diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 000000000000..3c5cbe7bcfde --- /dev/null +++ b/index.d.ts @@ -0,0 +1,446 @@ +export interface Config { + /** + * Enable dark-mode utilities for your project. + * + * [Documentation](https://tailwindcss.com/docs/dark-mode) + */ + dark?: 'media' | 'class' + + /** + * Configure what PurgeCSS removes when building for production. + * + * [Documentation](https://tailwindcss.com/docs/optimizing-for-production) + */ + purge?: Purge | string[] + + /** + * Customize the theme of your project. + * + * [Documentation](https://tailwindcss.com/docs/theme) + */ + theme?: ExtendableTheme + + /** + * Configure which utility variants are enabled. + * + * [Documentation](https://tailwindcss.com/docs/configuring-variants) + */ + variants?: ExtendableVariants + + /** Import presets created by you or others. + * + * [Documentation](https://tailwindcss.com/docs/presets) + */ + presets?: Config[] + + /** Use to disable core plugins. */ + corePlugins?: Record +} + +interface Theme { + /** [Documentation](https://tailwindcss.com/docs/container) */ + container?: Container + /** [Documentation](https://tailwindcss.com/docs/colors) */ + colors?: Colors + /** [Documentation](https://tailwindcss.com/docs/breakpoints) */ + screens?: Screens + /** [Documentation](https://tailwindcss.com/docs/customizing-spacing) */ + spacing?: Spacing + + /** [Documentation](https://tailwindcss.com/docs/object-position) */ + objectPosition?: Record + /** [Documentation](https://tailwindcss.com/docs/top-right-bottom-left) */ + inset?: Record + /** [Documentation](https://tailwindcss.com/docs/z-index) */ + zIndex?: Record + + /** [Documentation](https://tailwindcss.com/docs/flex) */ + flex?: Record + /** [Documentation](https://tailwindcss.com/docs/flex-grow) */ + flexGrow?: ObjectWithDefault + /** [Documentation](https://tailwindcss.com/docs/flex-shrink) */ + flexShrink?: ObjectWithDefault + /** [Documentation](https://tailwindcss.com/docs/order) */ + order?: Record + + /** [Documentation](https://tailwindcss.com/docs/grid-template-columns) */ + gridTemplateColumns?: Record + /** [Documentation](https://tailwindcss.com/docs/grid-column) */ + gridColumn?: Record + /** [Documentation](https://tailwindcss.com/docs/grid-column) */ + gridColumnStart?: Record + /** [Documentation](https://tailwindcss.com/docs/grid-column) */ + gridColumnEnd?: Record + /** [Documentation](https://tailwindcss.com/docs/grid-auto-columns) */ + gridAutoColumns?: Record + + /** [Documentation](https://tailwindcss.com/docs/grid-template-rows) */ + gridTemplateRows?: Record + /** [Documentation](https://tailwindcss.com/docs/grid-row) */ + gridRow?: Record + /** [Documentation](https://tailwindcss.com/docs/grid-row) */ + gridRowStart?: Record + /** [Documentation](https://tailwindcss.com/docs/grid-row) */ + gridRowEnd?: Record + /** [Documentation](https://tailwindcss.com/docs/grid-auto-rows) */ + gridAutoRows?: Record + + /** [Documentation](https://tailwindcss.com/docs/gap) */ + gap?: Record + + /** [Documentation](https://tailwindcss.com/docs/padding) */ + padding?: Record + /** [Documentation](https://tailwindcss.com/docs/margin) */ + margin?: Record + /** [Documentation](https://tailwindcss.com/docs/space) */ + space?: Record + + /** [Documentation](https://tailwindcss.com/docs/width) */ + width?: Record + /** [Documentation](https://tailwindcss.com/docs/min-width) */ + minWidth?: Record + /** [Documentation](https://tailwindcss.com/docs/max-width) */ + maxWidth?: Record + + /** [Documentation](https://tailwindcss.com/docs/height) */ + height?: Record + /** [Documentation](https://tailwindcss.com/docs/min-height) */ + minHeight?: Record + /** [Documentation](https://tailwindcss.com/docs/max-height) */ + maxHeight?: Record + + /** [Documentation](https://tailwindcss.com/docs/font-family) */ + fontFamily?: Record + /** + * [Documentation](https://tailwindcss.com/docs/font-size) + * + * @example + * xs: '.75rem', + * sm: ['14px', '20px'], + * xl: ['32px', { + * letterSpacing: '-0.02em', + * lineHeight: '40px', + * }], + */ + fontSize?: FontSize + /** [Documentation](https://tailwindcss.com/docs/font-weight) */ + fontWeight?: Record + /** [Documentation](https://tailwindcss.com/docs/letter-spacing) */ + letterSpacing?: Record + /** [Documentation](https://tailwindcss.com/docs/line-height) */ + lineHeight?: Record + + /** [Documentation](https://tailwindcss.com/docs/list-style-type) */ + listStyleType?: Record + /** [Documentation](https://tailwindcss.com/docs/placeholder-color) */ + placeholderColor?: Colors + /** [Documentation](https://tailwindcss.com/docs/placeholder-opacity) */ + placeholderOpacity?: Record + + /** [Documentation](https://tailwindcss.com/docs/text-color) */ + textColor?: Colors + /** [Documentation](https://tailwindcss.com/docs/text-opacity) */ + textOpacity?: Record + + /** [Documentation](https://tailwindcss.com/docs/background-color) */ + backgroundColor?: Colors + /** [Documentation](https://tailwindcss.com/docs/background-opacity) */ + backgroundOpacity?: Record + /** [Documentation](https://tailwindcss.com/docs/background-position) */ + backgroundPosition?: Record + /** [Documentation](https://tailwindcss.com/docs/background-size) */ + backgroundSize?: Record + /** [Documentation](https://tailwindcss.com/docs/background-image) */ + backgroundImage?: Record + /** [Documentation](https://tailwindcss.com/docs/gradient-color-stops) */ + gradientColorStops?: Record + + /** [Documentation](https://tailwindcss.com/docs/border-radius) */ + borderRadius?: ObjectWithDefault + /** [Documentation](https://tailwindcss.com/docs/border-width) */ + borderWidth?: ObjectWithDefault + /** [Documentation](https://tailwindcss.com/docs/border-color) */ + borderColor?: Colors + /** [Documentation](https://tailwindcss.com/docs/border-opacity) */ + borderOpacity?: Record + + /** [Documentation](https://tailwindcss.com/docs/divide-width) */ + divideWidth?: ObjectWithDefault + /** [Documentation](https://tailwindcss.com/docs/divide-color) */ + divideColor?: Colors + /** [Documentation](https://tailwindcss.com/docs/divide-opacity) */ + divideOpacity?: Record + + /** [Documentation](https://tailwindcss.com/docs/ring-width) */ + ringWidth?: ObjectWithDefault + /** [Documentation](https://tailwindcss.com/docs/ring-color) */ + ringColor?: Colors + /** [Documentation](https://tailwindcss.com/docs/ring-opacity) */ + ringOpacity?: Record + /** [Documentation](https://tailwindcss.com/docs/ring-offset-width) */ + ringOffsetWidth?: Record + /** [Documentation](https://tailwindcss.com/docs/ring-offset-color) */ + ringOffsetColor?: Colors + + /** [Documentation](https://tailwindcss.com/docs/box-shadow) */ + boxShadow?: ObjectWithDefault + /** [Documentation](https://tailwindcss.com/docs/opacity) */ + opacity?: Record + + /** [Documentation](https://tailwindcss.com/docs/transition-property) */ + transitionProperty?: Record + /** [Documentation](https://tailwindcss.com/docs/transition-duration) */ + transitionDuration?: Record + /** [Documentation](https://tailwindcss.com/docs/transition-timing-function) */ + transitionTimingFunction?: Record + /** [Documentation](https://tailwindcss.com/docs/transition-delay) */ + transitionDelay?: Record + /** [Documentation](https://tailwindcss.com/docs/animation) */ + animation?: Record + /** [Documentation](https://tailwindcss.com/docs/animation) */ + keyframes?: Keyframes + + /** [Documentation](https://tailwindcss.com/docs/transform-origin) */ + transformOrigin?: Record + /** [Documentation](https://tailwindcss.com/docs/scale) */ + scale?: Record + /** [Documentation](https://tailwindcss.com/docs/rotate) */ + rotate?: Record + /** [Documentation](https://tailwindcss.com/docs/translate) */ + translate?: Record + /** [Documentation](https://tailwindcss.com/docs/skew) */ + skew?: Record + + /** [Documentation](https://tailwindcss.com/docs/cursor) */ + cursor?: ObjectWithDefault + /** [Documentation](https://tailwindcss.com/docs/outline) */ + outline?: Record + + /** [Documentation](https://tailwindcss.com/docs/fill) */ + fill?: Colors + /** [Documentation](https://tailwindcss.com/docs/stroke) */ + stroke?: Colors + /** [Documentation](https://tailwindcss.com/docs/stroke-width) */ + strokeWidth?: Record +} +interface ExtendableTheme extends Theme { + extend?: Theme +} + +// PURGE +type LayerNames = 'components' | 'utilites' | 'base' +interface Purge { + enabled?: boolean + preserveHtmlElements?: boolean + layers?: LayerNames[] + /** **Usage of this mode is not recommended unless absolutely necessary.** */ + mode?: 'all' + content?: string[] + /** PurgeCSS user configuration. Read more in [their documentation](https://purgecss.com/configuration.html#configuration-file). */ + options?: Record +} + +// VARIANTS +interface Variants extends Partial> { + [key: string]: CoreVariantNames[] +} +interface ExtendableVariants extends Variants { + extend: Variants +} + +type ObjectWithDefault = + | Record<'DEFAULT', T> + | Record + | Record + +// CONTAINER +interface Container { + padding: string | ObjectWithDefault + center: boolean +} + +// COLORS +type Hex = `#${string}` +type Color = ObjectWithDefault +type Colors = + | Record + | Record + | Record + +// SCREENS +type DefaultBreakpoints = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'print' +type CustomScreenOptions = 'max' | 'min' | 'raw' +type Screens = + | Record + | Record> + +// SPACING +type Spacing = Record + +// FONTS +interface FontSize { + [key: string]: string | string[] | [string, { + letterSpacing?: string + lineHeight?: string + }] +} + +// KEYFRAMES +interface Keyframes { + [key: string]: Record> +} + +type DefaultColorNames = + | 'gray' + | 'red' + | 'yellow' + | 'blue' + | 'indigo' + | 'violet' + | 'pink' + | 'green' + | 'black' + | 'white' + | 'transparent' + | 'current' + +type CorePluginNames = + | 'preflight' + | 'container' + | 'accessibility' + | 'alignContent' + | 'alignItems' + | 'alignSelf' + | 'animation' + | 'appearance' + | 'backgroundAttachment' + | 'backgroundClip' + | 'backgroundColor' + | 'backgroundImage' + | 'backgroundOpacity' + | 'backgroundPosition' + | 'backgroundRepeat' + | 'backgroundSize' + | 'borderCollapse' + | 'borderColor' + | 'borderOpacity' + | 'borderRadius' + | 'borderStyle' + | 'borderWidth' + | 'boxShadow' + | 'boxSizing' + | 'clear' + | 'cursor' + | 'display' + | 'divideColor' + | 'divideOpacity' + | 'divideStyle' + | 'divideWidth' + | 'fill' + | 'flex' + | 'flexDirection' + | 'flexGrow' + | 'flexShrink' + | 'flexWrap' + | 'float' + | 'fontFamily' + | 'fontSize' + | 'fontSmoothing' + | 'fontStyle' + | 'fontVariantNumeric' + | 'fontWeight' + | 'gap' + | 'gradientColorStops' + | 'gridAutoColumns' + | 'gridAutoFlow' + | 'gridAutoRows' + | 'gridColumn' + | 'gridColumnEnd' + | 'gridColumnStart' + | 'gridRow' + | 'gridRowEnd' + | 'gridRowStart' + | 'gridTemplateColumns' + | 'gridTemplateRows' + | 'height' + | 'inset' + | 'justifyContent' + | 'justifyItems' + | 'justifySelf' + | 'letterSpacing' + | 'lineHeight' + | 'listStylePosition' + | 'listStyleType' + | 'margin' + | 'maxHeight' + | 'maxWidth' + | 'minHeight' + | 'minWidth' + | 'objectFit' + | 'objectPosition' + | 'opacity' + | 'order' + | 'outline' + | 'overflow' + | 'overscrollBehavior' + | 'padding' + | 'placeContent' + | 'placeholderColor' + | 'placeholderOpacity' + | 'placeItems' + | 'placeSelf' + | 'pointerEvents' + | 'position' + | 'resize' + | 'ringColor' + | 'ringOffsetColor' + | 'ringOffsetWidth' + | 'ringOpacity' + | 'ringWidth' + | 'rotate' + | 'scale' + | 'skew' + | 'space' + | 'stroke' + | 'strokeWidth' + | 'tableLayout' + | 'textAlign' + | 'textColor' + | 'textDecoration' + | 'textOpacity' + | 'textOverflow' + | 'textTransform' + | 'transform' + | 'transformOrigin' + | 'transitionDelay' + | 'transitionDuration' + | 'transitionProperty' + | 'transitionTimingFunction' + | 'translate' + | 'userSelect' + | 'verticalAlign' + | 'visibility' + | 'whitespace' + | 'width' + | 'wordBreak' + | 'zIndex' + +type CoreVariantNames = + | 'responsive' + | 'dark' + | 'motion-safe' + | 'motion-reduce' + | 'first' + | 'last' + | 'odd' + | 'even' + | 'visited' + | 'checked' + | 'group-hover' + | 'group-focus' + | 'focus-within' + | 'hover' + | 'focus' + | 'focus-visible' + | 'active' + | 'disabled' diff --git a/package.json b/package.json index 3ba6a05b6087..5cfc19eeaa5b 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "lodash": "^4.17.20", "modern-normalize": "^1.0.0", "node-emoji": "^1.8.1", - "object-hash": "^2.0.3", + "object-hash": "^2.1.1", "postcss-functions": "^3", "postcss-js": "^3.0.3", "postcss-nested": "^5.0.1", diff --git a/stubs/defaultConfig.stub.js b/stubs/defaultConfig.stub.js index 0c8eb73745d5..6780c023bf10 100644 --- a/stubs/defaultConfig.stub.js +++ b/stubs/defaultConfig.stub.js @@ -1,5 +1,6 @@ const colors = require('../colors') +/** @type {@import('tailwindcss').Config} */ module.exports = { purge: [], presets: [], diff --git a/stubs/defaultPostCssConfig.stub.js b/stubs/defaultPostCssConfig.stub.js index 33ad091d26d8..40b2efd994a6 100644 --- a/stubs/defaultPostCssConfig.stub.js +++ b/stubs/defaultPostCssConfig.stub.js @@ -1,3 +1,4 @@ +/** @type {@import('tailwindcss').Config} */ module.exports = { plugins: { tailwindcss: {}, diff --git a/stubs/simpleConfig.stub.js b/stubs/simpleConfig.stub.js index 62dfdaf3fc23..9b9f248582b8 100644 --- a/stubs/simpleConfig.stub.js +++ b/stubs/simpleConfig.stub.js @@ -1,3 +1,4 @@ +/** @type {@import('tailwindcss').Config} */ module.exports = { purge: [], darkMode: false, // or 'media' or 'class' diff --git a/yarn.lock b/yarn.lock index cb83cf8b3916..da5e83be0ba6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4221,10 +4221,10 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-hash@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" - integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== +object-hash@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09" + integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ== object-keys@^1.0.11, object-keys@^1.0.12: version "1.1.1"