tailwindcss 3.0.22 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/CHANGELOG.md +92 -2
  2. package/colors.d.ts +3 -0
  3. package/defaultConfig.d.ts +3 -0
  4. package/defaultTheme.d.ts +3 -0
  5. package/lib/cli-peer-dependencies.js +10 -5
  6. package/lib/cli.js +266 -203
  7. package/lib/constants.js +8 -8
  8. package/lib/corePluginList.js +1 -0
  9. package/lib/corePlugins.js +1662 -1554
  10. package/lib/css/preflight.css +1 -8
  11. package/lib/featureFlags.js +14 -12
  12. package/lib/index.js +16 -6
  13. package/lib/lib/cacheInvalidation.js +87 -0
  14. package/lib/lib/collapseAdjacentRules.js +30 -15
  15. package/lib/lib/collapseDuplicateDeclarations.js +1 -1
  16. package/lib/lib/defaultExtractor.js +191 -30
  17. package/lib/lib/detectNesting.js +9 -9
  18. package/lib/lib/evaluateTailwindFunctions.js +37 -28
  19. package/lib/lib/expandApplyAtRules.js +379 -189
  20. package/lib/lib/expandTailwindAtRules.js +168 -144
  21. package/lib/lib/generateRules.js +190 -81
  22. package/lib/lib/getModuleDependencies.js +14 -14
  23. package/lib/lib/normalizeTailwindDirectives.js +35 -35
  24. package/lib/lib/partitionApplyAtRules.js +7 -7
  25. package/lib/lib/regex.js +52 -0
  26. package/lib/lib/resolveDefaultsAtRules.js +80 -79
  27. package/lib/lib/setupContextUtils.js +207 -170
  28. package/lib/lib/setupTrackingContext.js +61 -63
  29. package/lib/lib/sharedState.js +11 -8
  30. package/lib/lib/substituteScreenAtRules.js +3 -4
  31. package/lib/postcss-plugins/nesting/README.md +2 -2
  32. package/lib/postcss-plugins/nesting/index.js +1 -1
  33. package/lib/postcss-plugins/nesting/plugin.js +40 -9
  34. package/lib/processTailwindFeatures.js +7 -7
  35. package/lib/public/colors.js +241 -241
  36. package/lib/public/resolve-config.js +5 -5
  37. package/lib/util/buildMediaQuery.js +2 -3
  38. package/lib/util/cloneDeep.js +3 -5
  39. package/lib/util/cloneNodes.js +12 -1
  40. package/lib/util/color.js +42 -51
  41. package/lib/util/createPlugin.js +1 -2
  42. package/lib/util/createUtilityPlugin.js +6 -7
  43. package/lib/util/dataTypes.js +85 -81
  44. package/lib/util/escapeClassName.js +5 -5
  45. package/lib/util/escapeCommas.js +1 -1
  46. package/lib/util/flattenColorPalette.js +4 -7
  47. package/lib/util/formatVariantSelector.js +82 -75
  48. package/lib/util/getAllConfigs.js +15 -10
  49. package/lib/util/hashConfig.js +5 -5
  50. package/lib/util/isKeyframeRule.js +1 -1
  51. package/lib/util/isPlainObject.js +1 -1
  52. package/lib/util/isValidArbitraryValue.js +26 -27
  53. package/lib/util/log.js +9 -10
  54. package/lib/util/nameClass.js +7 -7
  55. package/lib/util/negateValue.js +4 -5
  56. package/lib/util/normalizeConfig.js +68 -58
  57. package/lib/util/normalizeScreens.js +5 -6
  58. package/lib/util/parseAnimationValue.js +56 -57
  59. package/lib/util/parseBoxShadowValue.js +19 -20
  60. package/lib/util/parseDependency.js +32 -32
  61. package/lib/util/parseObjectStyles.js +6 -6
  62. package/lib/util/pluginUtils.js +20 -12
  63. package/lib/util/prefixSelector.js +1 -1
  64. package/lib/util/resolveConfig.js +81 -58
  65. package/lib/util/resolveConfigPath.js +16 -16
  66. package/lib/util/responsive.js +6 -6
  67. package/lib/util/splitAtTopLevelOnly.js +90 -0
  68. package/lib/util/toColorValue.js +1 -1
  69. package/lib/util/toPath.js +2 -2
  70. package/lib/util/transformThemeValue.js +30 -28
  71. package/lib/util/validateConfig.js +21 -0
  72. package/lib/util/withAlphaVariable.js +23 -23
  73. package/package.json +33 -27
  74. package/peers/index.js +7728 -5848
  75. package/plugin.d.ts +11 -0
  76. package/scripts/generate-types.js +52 -0
  77. package/src/cli-peer-dependencies.js +7 -1
  78. package/src/cli.js +118 -24
  79. package/src/corePluginList.js +1 -1
  80. package/src/corePlugins.js +142 -30
  81. package/src/css/preflight.css +1 -8
  82. package/src/featureFlags.js +4 -4
  83. package/src/index.js +15 -1
  84. package/src/lib/cacheInvalidation.js +52 -0
  85. package/src/lib/collapseAdjacentRules.js +21 -2
  86. package/src/lib/defaultExtractor.js +177 -33
  87. package/src/lib/evaluateTailwindFunctions.js +20 -4
  88. package/src/lib/expandApplyAtRules.js +418 -186
  89. package/src/lib/expandTailwindAtRules.js +30 -10
  90. package/src/lib/generateRules.js +142 -51
  91. package/src/lib/regex.js +74 -0
  92. package/src/lib/resolveDefaultsAtRules.js +7 -3
  93. package/src/lib/setupContextUtils.js +142 -87
  94. package/src/lib/setupTrackingContext.js +7 -3
  95. package/src/lib/sharedState.js +2 -0
  96. package/src/postcss-plugins/nesting/README.md +2 -2
  97. package/src/postcss-plugins/nesting/plugin.js +36 -0
  98. package/src/util/cloneNodes.js +14 -1
  99. package/src/util/color.js +25 -21
  100. package/src/util/dataTypes.js +14 -6
  101. package/src/util/formatVariantSelector.js +79 -62
  102. package/src/util/getAllConfigs.js +7 -0
  103. package/src/util/log.js +8 -8
  104. package/src/util/normalizeConfig.js +0 -8
  105. package/src/util/parseBoxShadowValue.js +3 -2
  106. package/src/util/pluginUtils.js +13 -1
  107. package/src/util/resolveConfig.js +66 -22
  108. package/src/util/splitAtTopLevelOnly.js +71 -0
  109. package/src/util/toPath.js +1 -1
  110. package/src/util/transformThemeValue.js +4 -2
  111. package/src/util/validateConfig.js +13 -0
  112. package/src/util/withAlphaVariable.js +1 -1
  113. package/stubs/defaultConfig.stub.js +5 -1
  114. package/stubs/simpleConfig.stub.js +1 -0
  115. package/types/config.d.ts +325 -0
  116. package/types/generated/.gitkeep +0 -0
  117. package/types/generated/colors.d.ts +276 -0
  118. package/types/generated/corePluginList.d.ts +1 -0
  119. package/types/index.d.ts +1 -0
package/plugin.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import type { Config, PluginCreator } from './types/config'
2
+ type Plugin = {
3
+ withOptions<T>(
4
+ plugin: (options: T) => PluginCreator,
5
+ config?: (options: T) => Config
6
+ ): { (options: T): { handler: PluginCreator; config?: Config }; __isOptionsFunction: true }
7
+ (plugin: PluginCreator, config?: Config): { handler: PluginCreator; config?: Config }
8
+ }
9
+
10
+ declare const plugin: Plugin
11
+ export = plugin
@@ -0,0 +1,52 @@
1
+ import prettier from 'prettier'
2
+ import { corePlugins } from '../src/corePlugins'
3
+ import colors from '../src/public/colors'
4
+ import fs from 'fs'
5
+ import path from 'path'
6
+
7
+ fs.writeFileSync(
8
+ path.join(process.cwd(), 'types', 'generated', 'corePluginList.d.ts'),
9
+ `export type CorePluginList = ${Object.keys(corePlugins)
10
+ .map((p) => `'${p}'`)
11
+ .join(' | ')}`
12
+ )
13
+
14
+ let colorsWithoutDeprecatedColors = Object.fromEntries(
15
+ Object.entries(Object.getOwnPropertyDescriptors(colors))
16
+ .filter(([_, { value }]) => {
17
+ return typeof value !== 'undefined'
18
+ })
19
+ .map(([name, definition]) => [name, definition.value])
20
+ )
21
+
22
+ let deprecatedColors = Object.entries(Object.getOwnPropertyDescriptors(colors))
23
+ .filter(([_, { value }]) => {
24
+ return typeof value === 'undefined'
25
+ })
26
+ .map(([name, definition]) => {
27
+ let warn = console.warn
28
+ let messages = []
29
+ console.warn = (...args) => messages.push(args.pop())
30
+ definition.get()
31
+ console.warn = warn
32
+ let message = messages.join(' ').trim()
33
+ let newColor = message.match(/renamed to `(.*)`/)[1]
34
+ return `/** @deprecated ${message} */${name}: DefaultColors['${newColor}'],`
35
+ })
36
+ .join('\n')
37
+
38
+ fs.writeFileSync(
39
+ path.join(process.cwd(), 'types', 'generated', 'colors.d.ts'),
40
+ prettier.format(
41
+ `export interface DefaultColors { ${JSON.stringify(colorsWithoutDeprecatedColors).slice(
42
+ 1,
43
+ -1
44
+ )}\n${deprecatedColors}\n}`,
45
+ {
46
+ semi: false,
47
+ singleQuote: true,
48
+ printWidth: 100,
49
+ parser: 'typescript',
50
+ }
51
+ )
52
+ )
@@ -1,4 +1,10 @@
1
- export let postcss = require('postcss')
1
+ export function lazyPostcss() {
2
+ return require('postcss')
3
+ }
4
+
5
+ export function lazyPostcssImport() {
6
+ return require('postcss-import')
7
+ }
2
8
 
3
9
  export function lazyAutoprefixer() {
4
10
  return require('autoprefixer')
package/src/cli.js CHANGED
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { postcss, lazyCssnano, lazyAutoprefixer } from '../peers/index.js'
3
+ import { lazyPostcss, lazyPostcssImport, lazyCssnano, lazyAutoprefixer } from '../peers/index.js'
4
4
 
5
5
  import chokidar from 'chokidar'
6
6
  import path from 'path'
7
7
  import arg from 'arg'
8
8
  import fs from 'fs'
9
9
  import postcssrc from 'postcss-load-config'
10
- import { cosmiconfig } from 'cosmiconfig'
10
+ import { lilconfig } from 'lilconfig'
11
11
  import loadPlugins from 'postcss-load-config/src/plugins' // Little bit scary, looking at private/internal API
12
+ import loadOptions from 'postcss-load-config/src/options' // Little bit scary, looking at private/internal API
12
13
  import tailwind from './processTailwindFeatures'
13
14
  import resolveConfigInternal from '../resolveConfig'
14
15
  import fastGlob from 'fast-glob'
@@ -16,11 +17,33 @@ import getModuleDependencies from './lib/getModuleDependencies'
16
17
  import log from './util/log'
17
18
  import packageJson from '../package.json'
18
19
  import normalizePath from 'normalize-path'
20
+ import { validateConfig } from './util/validateConfig.js'
19
21
 
20
22
  let env = {
21
23
  DEBUG: process.env.DEBUG !== undefined && process.env.DEBUG !== '0',
22
24
  }
23
25
 
26
+ function isESM() {
27
+ const pkgPath = path.resolve('./package.json')
28
+
29
+ try {
30
+ let pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'))
31
+ return pkg.type && pkg.type === 'module'
32
+ } catch (err) {
33
+ return false
34
+ }
35
+ }
36
+
37
+ let configs = isESM()
38
+ ? {
39
+ tailwind: 'tailwind.config.cjs',
40
+ postcss: 'postcss.config.cjs',
41
+ }
42
+ : {
43
+ tailwind: 'tailwind.config.js',
44
+ postcss: 'postcss.config.js',
45
+ }
46
+
24
47
  // ---
25
48
 
26
49
  function indentRecursive(node, indent = 0) {
@@ -145,12 +168,21 @@ function oneOf(...options) {
145
168
  )
146
169
  }
147
170
 
171
+ function loadPostcss() {
172
+ // Try to load a local `postcss` version first
173
+ try {
174
+ return require('postcss')
175
+ } catch {}
176
+
177
+ return lazyPostcss()
178
+ }
179
+
148
180
  let commands = {
149
181
  init: {
150
182
  run: init,
151
183
  args: {
152
- '--full': { type: Boolean, description: 'Initialize a full `tailwind.config.js` file' },
153
- '--postcss': { type: Boolean, description: 'Initialize a `postcss.config.js` file' },
184
+ '--full': { type: Boolean, description: `Initialize a full \`${configs.tailwind}\` file` },
185
+ '--postcss': { type: Boolean, description: `Initialize a \`${configs.postcss}\` file` },
154
186
  '-f': '--full',
155
187
  '-p': '--postcss',
156
188
  },
@@ -161,6 +193,10 @@ let commands = {
161
193
  '--input': { type: String, description: 'Input file' },
162
194
  '--output': { type: String, description: 'Output file' },
163
195
  '--watch': { type: Boolean, description: 'Watch for changes and rebuild as needed' },
196
+ '--poll': {
197
+ type: Boolean,
198
+ description: 'Use polling instead of filesystem events when watching',
199
+ },
164
200
  '--content': {
165
201
  type: String,
166
202
  description: 'Content paths to use for removing unused classes',
@@ -187,6 +223,7 @@ let commands = {
187
223
  '-o': '--output',
188
224
  '-m': '--minify',
189
225
  '-w': '--watch',
226
+ '-p': '--poll',
190
227
  },
191
228
  },
192
229
  }
@@ -320,7 +357,7 @@ run()
320
357
  function init() {
321
358
  let messages = []
322
359
 
323
- let tailwindConfigLocation = path.resolve(args['_'][1] ?? './tailwind.config.js')
360
+ let tailwindConfigLocation = path.resolve(args['_'][1] ?? `./${configs.tailwind}`)
324
361
  if (fs.existsSync(tailwindConfigLocation)) {
325
362
  messages.push(`${path.basename(tailwindConfigLocation)} already exists.`)
326
363
  } else {
@@ -340,7 +377,7 @@ function init() {
340
377
  }
341
378
 
342
379
  if (args['--postcss']) {
343
- let postcssConfigLocation = path.resolve('./postcss.config.js')
380
+ let postcssConfigLocation = path.resolve(`./${configs.postcss}`)
344
381
  if (fs.existsSync(postcssConfigLocation)) {
345
382
  messages.push(`${path.basename(postcssConfigLocation)} already exists.`)
346
383
  } else {
@@ -367,8 +404,14 @@ async function build() {
367
404
  let input = args['--input']
368
405
  let output = args['--output']
369
406
  let shouldWatch = args['--watch']
407
+ let shouldPoll = args['--poll']
408
+ let shouldCoalesceWriteEvents = shouldPoll || process.platform === 'win32'
370
409
  let includePostCss = args['--postcss']
371
410
 
411
+ // Polling interval in milliseconds
412
+ // Used only when polling or coalescing add/change events on Windows
413
+ let pollInterval = 10
414
+
372
415
  // TODO: Deprecate this in future versions
373
416
  if (!input && args['_'][1]) {
374
417
  console.error('[deprecation] Running tailwindcss without -i, please provide an input file.')
@@ -388,17 +431,17 @@ async function build() {
388
431
  let configPath = args['--config']
389
432
  ? args['--config']
390
433
  : ((defaultPath) => (fs.existsSync(defaultPath) ? defaultPath : null))(
391
- path.resolve('./tailwind.config.js')
434
+ path.resolve(`./${configs.tailwind}`)
392
435
  )
393
436
 
394
437
  async function loadPostCssPlugins() {
395
438
  let customPostCssPath = typeof args['--postcss'] === 'string' ? args['--postcss'] : undefined
396
- let { plugins: configPlugins } = customPostCssPath
439
+ let config = customPostCssPath
397
440
  ? await (async () => {
398
441
  let file = path.resolve(customPostCssPath)
399
442
 
400
- // Implementation, see: https://unpkg.com/browse/postcss-load-config@3.0.1/src/index.js
401
- let { config = {} } = await cosmiconfig('postcss').load(file)
443
+ // Implementation, see: https://unpkg.com/browse/postcss-load-config@3.1.0/src/index.js
444
+ let { config = {} } = await lilconfig('postcss').load(file)
402
445
  if (typeof config === 'function') {
403
446
  config = config()
404
447
  } else {
@@ -409,10 +452,16 @@ async function build() {
409
452
  config.plugins = []
410
453
  }
411
454
 
412
- return { plugins: loadPlugins(config, file) }
455
+ return {
456
+ file,
457
+ plugins: loadPlugins(config, file),
458
+ options: loadOptions(config, file),
459
+ }
413
460
  })()
414
461
  : await postcssrc()
415
462
 
463
+ let configPlugins = config.plugins
464
+
416
465
  let configPluginTailwindIdx = configPlugins.findIndex((plugin) => {
417
466
  if (typeof plugin === 'function' && plugin.name === 'tailwindcss') {
418
467
  return true
@@ -432,7 +481,7 @@ async function build() {
432
481
  ? configPlugins
433
482
  : configPlugins.slice(configPluginTailwindIdx + 1)
434
483
 
435
- return [beforePlugins, afterPlugins]
484
+ return [beforePlugins, afterPlugins, config.options]
436
485
  }
437
486
 
438
487
  function resolveConfig() {
@@ -452,10 +501,13 @@ async function build() {
452
501
  let files = args['--content'].split(/(?<!{[^}]+),/)
453
502
  let resolvedConfig = resolveConfigInternal(config, { content: { files } })
454
503
  resolvedConfig.content.files = files
504
+ resolvedConfig = validateConfig(resolvedConfig)
455
505
  return resolvedConfig
456
506
  }
457
507
 
458
- return resolveConfigInternal(config)
508
+ let resolvedConfig = resolveConfigInternal(config)
509
+ resolvedConfig = validateConfig(resolvedConfig)
510
+ return resolvedConfig
459
511
  }
460
512
 
461
513
  function extractFileGlobs(config) {
@@ -516,7 +568,44 @@ async function build() {
516
568
 
517
569
  tailwindPlugin.postcss = true
518
570
 
519
- let [beforePlugins, afterPlugins] = includePostCss ? await loadPostCssPlugins() : [[], []]
571
+ let IMPORT_COMMENT = '__TAILWIND_RESTORE_IMPORT__: '
572
+
573
+ let [beforePlugins, afterPlugins, postcssOptions] = includePostCss
574
+ ? await loadPostCssPlugins()
575
+ : [
576
+ [
577
+ (root) => {
578
+ root.walkAtRules('import', (rule) => {
579
+ if (rule.params.slice(1).startsWith('tailwindcss/')) {
580
+ rule.after(postcss.comment({ text: IMPORT_COMMENT + rule.params }))
581
+ rule.remove()
582
+ }
583
+ })
584
+ },
585
+ (() => {
586
+ try {
587
+ return require('postcss-import')
588
+ } catch {}
589
+
590
+ return lazyPostcssImport()
591
+ })(),
592
+ (root) => {
593
+ root.walkComments((rule) => {
594
+ if (rule.text.startsWith(IMPORT_COMMENT)) {
595
+ rule.after(
596
+ postcss.atRule({
597
+ name: 'import',
598
+ params: rule.text.replace(IMPORT_COMMENT, ''),
599
+ })
600
+ )
601
+ rule.remove()
602
+ }
603
+ })
604
+ },
605
+ ],
606
+ [],
607
+ {},
608
+ ]
520
609
 
521
610
  let plugins = [
522
611
  ...beforePlugins,
@@ -545,13 +634,14 @@ async function build() {
545
634
  })(),
546
635
  ].filter(Boolean)
547
636
 
637
+ let postcss = loadPostcss()
548
638
  let processor = postcss(plugins)
549
639
 
550
640
  function processCSS(css) {
551
641
  let start = process.hrtime.bigint()
552
642
  return Promise.resolve()
553
643
  .then(() => (output ? fs.promises.mkdir(path.dirname(output), { recursive: true }) : null))
554
- .then(() => processor.process(css, { from: input, to: output }))
644
+ .then(() => processor.process(css, { ...postcssOptions, from: input, to: output }))
555
645
  .then((result) => {
556
646
  if (!output) {
557
647
  return process.stdout.write(result.css)
@@ -678,6 +768,7 @@ async function build() {
678
768
  let tailwindPluginIdx = plugins.indexOf('__TAILWIND_PLUGIN_POSITION__')
679
769
  let copy = plugins.slice()
680
770
  copy.splice(tailwindPluginIdx, 1, tailwindPlugin)
771
+ let postcss = loadPostcss()
681
772
  let processor = postcss(copy)
682
773
 
683
774
  function processCSS(css) {
@@ -746,14 +837,15 @@ async function build() {
746
837
  }
747
838
 
748
839
  watcher = chokidar.watch([...contextDependencies, ...extractFileGlobs(config)], {
840
+ usePolling: shouldPoll,
841
+ interval: shouldPoll ? pollInterval : undefined,
749
842
  ignoreInitial: true,
750
- awaitWriteFinish:
751
- process.platform === 'win32'
752
- ? {
753
- stabilityThreshold: 50,
754
- pollInterval: 10,
755
- }
756
- : false,
843
+ awaitWriteFinish: shouldCoalesceWriteEvents
844
+ ? {
845
+ stabilityThreshold: 50,
846
+ pollInterval: pollInterval,
847
+ }
848
+ : false,
757
849
  })
758
850
 
759
851
  let chain = Promise.resolve()
@@ -806,8 +898,10 @@ async function build() {
806
898
 
807
899
  if (shouldWatch) {
808
900
  /* Abort the watcher if stdin is closed to avoid zombie processes */
809
- process.stdin.on('end', () => process.exit(0))
810
- process.stdin.resume()
901
+ if (process.stdin.isTTY) {
902
+ process.stdin.on('end', () => process.exit(0))
903
+ process.stdin.resume()
904
+ }
811
905
  startWatcher()
812
906
  } else {
813
907
  buildOnce()
@@ -1 +1 @@
1
- export default ["preflight","container","accessibility","pointerEvents","visibility","position","inset","isolation","zIndex","order","gridColumn","gridColumnStart","gridColumnEnd","gridRow","gridRowStart","gridRowEnd","float","clear","margin","boxSizing","display","aspectRatio","height","maxHeight","minHeight","width","minWidth","maxWidth","flex","flexShrink","flexGrow","flexBasis","tableLayout","borderCollapse","transformOrigin","translate","rotate","skew","scale","transform","animation","cursor","touchAction","userSelect","resize","scrollSnapType","scrollSnapAlign","scrollSnapStop","scrollMargin","scrollPadding","listStylePosition","listStyleType","appearance","columns","breakBefore","breakInside","breakAfter","gridAutoColumns","gridAutoFlow","gridAutoRows","gridTemplateColumns","gridTemplateRows","flexDirection","flexWrap","placeContent","placeItems","alignContent","alignItems","justifyContent","justifyItems","gap","space","divideWidth","divideStyle","divideColor","divideOpacity","placeSelf","alignSelf","justifySelf","overflow","overscrollBehavior","scrollBehavior","textOverflow","whitespace","wordBreak","borderRadius","borderWidth","borderStyle","borderColor","borderOpacity","backgroundColor","backgroundOpacity","backgroundImage","gradientColorStops","boxDecorationBreak","backgroundSize","backgroundAttachment","backgroundClip","backgroundPosition","backgroundRepeat","backgroundOrigin","fill","stroke","strokeWidth","objectFit","objectPosition","padding","textAlign","textIndent","verticalAlign","fontFamily","fontSize","fontWeight","textTransform","fontStyle","fontVariantNumeric","lineHeight","letterSpacing","textColor","textOpacity","textDecoration","textDecorationColor","textDecorationStyle","textDecorationThickness","textUnderlineOffset","fontSmoothing","placeholderColor","placeholderOpacity","caretColor","accentColor","opacity","backgroundBlendMode","mixBlendMode","boxShadow","boxShadowColor","outlineStyle","outlineWidth","outlineOffset","outlineColor","ringWidth","ringColor","ringOpacity","ringOffsetWidth","ringOffsetColor","blur","brightness","contrast","dropShadow","grayscale","hueRotate","invert","saturate","sepia","filter","backdropBlur","backdropBrightness","backdropContrast","backdropGrayscale","backdropHueRotate","backdropInvert","backdropOpacity","backdropSaturate","backdropSepia","backdropFilter","transitionProperty","transitionDelay","transitionDuration","transitionTimingFunction","willChange","content"]
1
+ export default ["preflight","container","accessibility","pointerEvents","visibility","position","inset","isolation","zIndex","order","gridColumn","gridColumnStart","gridColumnEnd","gridRow","gridRowStart","gridRowEnd","float","clear","margin","boxSizing","display","aspectRatio","height","maxHeight","minHeight","width","minWidth","maxWidth","flex","flexShrink","flexGrow","flexBasis","tableLayout","borderCollapse","borderSpacing","transformOrigin","translate","rotate","skew","scale","transform","animation","cursor","touchAction","userSelect","resize","scrollSnapType","scrollSnapAlign","scrollSnapStop","scrollMargin","scrollPadding","listStylePosition","listStyleType","appearance","columns","breakBefore","breakInside","breakAfter","gridAutoColumns","gridAutoFlow","gridAutoRows","gridTemplateColumns","gridTemplateRows","flexDirection","flexWrap","placeContent","placeItems","alignContent","alignItems","justifyContent","justifyItems","gap","space","divideWidth","divideStyle","divideColor","divideOpacity","placeSelf","alignSelf","justifySelf","overflow","overscrollBehavior","scrollBehavior","textOverflow","whitespace","wordBreak","borderRadius","borderWidth","borderStyle","borderColor","borderOpacity","backgroundColor","backgroundOpacity","backgroundImage","gradientColorStops","boxDecorationBreak","backgroundSize","backgroundAttachment","backgroundClip","backgroundPosition","backgroundRepeat","backgroundOrigin","fill","stroke","strokeWidth","objectFit","objectPosition","padding","textAlign","textIndent","verticalAlign","fontFamily","fontSize","fontWeight","textTransform","fontStyle","fontVariantNumeric","lineHeight","letterSpacing","textColor","textOpacity","textDecoration","textDecorationColor","textDecorationStyle","textDecorationThickness","textUnderlineOffset","fontSmoothing","placeholderColor","placeholderOpacity","caretColor","accentColor","opacity","backgroundBlendMode","mixBlendMode","boxShadow","boxShadowColor","outlineStyle","outlineWidth","outlineOffset","outlineColor","ringWidth","ringColor","ringOpacity","ringOffsetWidth","ringOffsetColor","blur","brightness","contrast","dropShadow","grayscale","hueRotate","invert","saturate","sepia","filter","backdropBlur","backdropBrightness","backdropContrast","backdropGrayscale","backdropHueRotate","backdropInvert","backdropOpacity","backdropSaturate","backdropSepia","backdropFilter","transitionProperty","transitionDelay","transitionDuration","transitionTimingFunction","willChange","content"]