tailwindcss 3.4.1 → 4.0.0-alpha.2

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 (280) hide show
  1. package/README.md +5 -6
  2. package/dist/lib.d.mts +324 -0
  3. package/dist/lib.d.ts +324 -0
  4. package/dist/lib.js +11 -0
  5. package/dist/lib.mjs +11 -0
  6. package/index.css +5 -0
  7. package/package.json +29 -107
  8. package/preflight.css +355 -0
  9. package/theme.css +465 -0
  10. package/CHANGELOG.md +0 -2571
  11. package/base.css +0 -1
  12. package/colors.d.ts +0 -3
  13. package/colors.js +0 -2
  14. package/components.css +0 -1
  15. package/defaultConfig.d.ts +0 -3
  16. package/defaultConfig.js +0 -2
  17. package/defaultTheme.d.ts +0 -4
  18. package/defaultTheme.js +0 -2
  19. package/lib/cli/build/deps.js +0 -62
  20. package/lib/cli/build/index.js +0 -54
  21. package/lib/cli/build/plugin.js +0 -378
  22. package/lib/cli/build/utils.js +0 -88
  23. package/lib/cli/build/watching.js +0 -182
  24. package/lib/cli/help/index.js +0 -73
  25. package/lib/cli/index.js +0 -230
  26. package/lib/cli/init/index.js +0 -63
  27. package/lib/cli-peer-dependencies.js +0 -36
  28. package/lib/cli.js +0 -7
  29. package/lib/corePluginList.js +0 -190
  30. package/lib/corePlugins.js +0 -4282
  31. package/lib/css/LICENSE +0 -25
  32. package/lib/css/preflight.css +0 -385
  33. package/lib/featureFlags.js +0 -83
  34. package/lib/index.js +0 -2
  35. package/lib/lib/cacheInvalidation.js +0 -92
  36. package/lib/lib/collapseAdjacentRules.js +0 -61
  37. package/lib/lib/collapseDuplicateDeclarations.js +0 -85
  38. package/lib/lib/content.js +0 -181
  39. package/lib/lib/defaultExtractor.js +0 -251
  40. package/lib/lib/detectNesting.js +0 -45
  41. package/lib/lib/evaluateTailwindFunctions.js +0 -238
  42. package/lib/lib/expandApplyAtRules.js +0 -540
  43. package/lib/lib/expandTailwindAtRules.js +0 -291
  44. package/lib/lib/findAtConfigPath.js +0 -46
  45. package/lib/lib/generateRules.js +0 -904
  46. package/lib/lib/getModuleDependencies.js +0 -99
  47. package/lib/lib/load-config.js +0 -53
  48. package/lib/lib/normalizeTailwindDirectives.js +0 -89
  49. package/lib/lib/offsets.js +0 -306
  50. package/lib/lib/partitionApplyAtRules.js +0 -58
  51. package/lib/lib/regex.js +0 -74
  52. package/lib/lib/remap-bitfield.js +0 -89
  53. package/lib/lib/resolveDefaultsAtRules.js +0 -165
  54. package/lib/lib/setupContextUtils.js +0 -1294
  55. package/lib/lib/setupTrackingContext.js +0 -166
  56. package/lib/lib/sharedState.js +0 -87
  57. package/lib/lib/substituteScreenAtRules.js +0 -31
  58. package/lib/oxide/cli/build/deps.js +0 -89
  59. package/lib/oxide/cli/build/index.js +0 -53
  60. package/lib/oxide/cli/build/plugin.js +0 -375
  61. package/lib/oxide/cli/build/utils.js +0 -87
  62. package/lib/oxide/cli/build/watching.js +0 -179
  63. package/lib/oxide/cli/help/index.js +0 -72
  64. package/lib/oxide/cli/index.js +0 -214
  65. package/lib/oxide/cli/init/index.js +0 -52
  66. package/lib/oxide/cli.js +0 -5
  67. package/lib/oxide/postcss-plugin.js +0 -2
  68. package/lib/plugin.js +0 -98
  69. package/lib/postcss-plugins/nesting/README.md +0 -42
  70. package/lib/postcss-plugins/nesting/index.js +0 -21
  71. package/lib/postcss-plugins/nesting/plugin.js +0 -89
  72. package/lib/processTailwindFeatures.js +0 -64
  73. package/lib/public/colors.js +0 -355
  74. package/lib/public/create-plugin.js +0 -17
  75. package/lib/public/default-config.js +0 -18
  76. package/lib/public/default-theme.js +0 -18
  77. package/lib/public/load-config.js +0 -12
  78. package/lib/public/resolve-config.js +0 -24
  79. package/lib/util/applyImportantSelector.js +0 -36
  80. package/lib/util/bigSign.js +0 -13
  81. package/lib/util/buildMediaQuery.js +0 -27
  82. package/lib/util/cloneDeep.js +0 -22
  83. package/lib/util/cloneNodes.js +0 -54
  84. package/lib/util/color.js +0 -116
  85. package/lib/util/colorNames.js +0 -752
  86. package/lib/util/configurePlugins.js +0 -23
  87. package/lib/util/createPlugin.js +0 -32
  88. package/lib/util/createUtilityPlugin.js +0 -53
  89. package/lib/util/dataTypes.js +0 -415
  90. package/lib/util/defaults.js +0 -27
  91. package/lib/util/escapeClassName.js +0 -24
  92. package/lib/util/escapeCommas.js +0 -13
  93. package/lib/util/flattenColorPalette.js +0 -18
  94. package/lib/util/formatVariantSelector.js +0 -270
  95. package/lib/util/getAllConfigs.js +0 -50
  96. package/lib/util/hashConfig.js +0 -21
  97. package/lib/util/isKeyframeRule.js +0 -13
  98. package/lib/util/isPlainObject.js +0 -17
  99. package/lib/util/isSyntacticallyValidPropertyValue.js +0 -74
  100. package/lib/util/log.js +0 -61
  101. package/lib/util/nameClass.js +0 -49
  102. package/lib/util/negateValue.js +0 -36
  103. package/lib/util/normalizeConfig.js +0 -282
  104. package/lib/util/normalizeScreens.js +0 -178
  105. package/lib/util/parseAnimationValue.js +0 -93
  106. package/lib/util/parseBoxShadowValue.js +0 -88
  107. package/lib/util/parseDependency.js +0 -47
  108. package/lib/util/parseGlob.js +0 -36
  109. package/lib/util/parseObjectStyles.js +0 -36
  110. package/lib/util/pluginUtils.js +0 -289
  111. package/lib/util/prefixSelector.js +0 -39
  112. package/lib/util/pseudoElements.js +0 -212
  113. package/lib/util/removeAlphaVariables.js +0 -31
  114. package/lib/util/resolveConfig.js +0 -256
  115. package/lib/util/resolveConfigPath.js +0 -70
  116. package/lib/util/responsive.js +0 -24
  117. package/lib/util/splitAtTopLevelOnly.js +0 -51
  118. package/lib/util/tap.js +0 -14
  119. package/lib/util/toColorValue.js +0 -13
  120. package/lib/util/toPath.js +0 -32
  121. package/lib/util/transformThemeValue.js +0 -73
  122. package/lib/util/validateConfig.js +0 -37
  123. package/lib/util/validateFormalSyntax.js +0 -26
  124. package/lib/util/withAlphaVariable.js +0 -79
  125. package/lib/value-parser/LICENSE +0 -22
  126. package/lib/value-parser/README.md +0 -3
  127. package/lib/value-parser/index.d.js +0 -2
  128. package/lib/value-parser/index.js +0 -22
  129. package/lib/value-parser/parse.js +0 -259
  130. package/lib/value-parser/stringify.js +0 -38
  131. package/lib/value-parser/unit.js +0 -86
  132. package/lib/value-parser/walk.js +0 -16
  133. package/loadConfig.d.ts +0 -4
  134. package/loadConfig.js +0 -2
  135. package/nesting/index.d.ts +0 -4
  136. package/nesting/index.js +0 -2
  137. package/peers/index.js +0 -96624
  138. package/plugin.d.ts +0 -11
  139. package/plugin.js +0 -2
  140. package/prettier.config.js +0 -19
  141. package/resolveConfig.d.ts +0 -31
  142. package/resolveConfig.js +0 -2
  143. package/screens.css +0 -1
  144. package/scripts/create-plugin-list.js +0 -10
  145. package/scripts/generate-types.js +0 -104
  146. package/scripts/release-channel.js +0 -18
  147. package/scripts/release-notes.js +0 -21
  148. package/scripts/swap-engines.js +0 -40
  149. package/scripts/type-utils.js +0 -27
  150. package/src/cli/build/deps.js +0 -56
  151. package/src/cli/build/index.js +0 -49
  152. package/src/cli/build/plugin.js +0 -444
  153. package/src/cli/build/utils.js +0 -76
  154. package/src/cli/build/watching.js +0 -229
  155. package/src/cli/help/index.js +0 -70
  156. package/src/cli/index.js +0 -216
  157. package/src/cli/init/index.js +0 -79
  158. package/src/cli-peer-dependencies.js +0 -15
  159. package/src/cli.js +0 -7
  160. package/src/corePluginList.js +0 -1
  161. package/src/corePlugins.js +0 -2943
  162. package/src/css/LICENSE +0 -25
  163. package/src/css/preflight.css +0 -385
  164. package/src/featureFlags.js +0 -66
  165. package/src/index.js +0 -1
  166. package/src/lib/cacheInvalidation.js +0 -52
  167. package/src/lib/collapseAdjacentRules.js +0 -58
  168. package/src/lib/collapseDuplicateDeclarations.js +0 -93
  169. package/src/lib/content.js +0 -208
  170. package/src/lib/defaultExtractor.js +0 -230
  171. package/src/lib/detectNesting.js +0 -47
  172. package/src/lib/evaluateTailwindFunctions.js +0 -272
  173. package/src/lib/expandApplyAtRules.js +0 -620
  174. package/src/lib/expandTailwindAtRules.js +0 -300
  175. package/src/lib/findAtConfigPath.js +0 -48
  176. package/src/lib/generateRules.js +0 -951
  177. package/src/lib/getModuleDependencies.js +0 -79
  178. package/src/lib/load-config.ts +0 -39
  179. package/src/lib/normalizeTailwindDirectives.js +0 -84
  180. package/src/lib/offsets.js +0 -373
  181. package/src/lib/partitionApplyAtRules.js +0 -52
  182. package/src/lib/regex.js +0 -74
  183. package/src/lib/remap-bitfield.js +0 -82
  184. package/src/lib/resolveDefaultsAtRules.js +0 -163
  185. package/src/lib/setupContextUtils.js +0 -1366
  186. package/src/lib/setupTrackingContext.js +0 -169
  187. package/src/lib/sharedState.js +0 -61
  188. package/src/lib/substituteScreenAtRules.js +0 -19
  189. package/src/oxide/cli/build/deps.ts +0 -91
  190. package/src/oxide/cli/build/index.ts +0 -47
  191. package/src/oxide/cli/build/plugin.ts +0 -442
  192. package/src/oxide/cli/build/utils.ts +0 -74
  193. package/src/oxide/cli/build/watching.ts +0 -225
  194. package/src/oxide/cli/help/index.ts +0 -69
  195. package/src/oxide/cli/index.ts +0 -204
  196. package/src/oxide/cli/init/index.ts +0 -59
  197. package/src/oxide/cli.ts +0 -1
  198. package/src/oxide/postcss-plugin.ts +0 -1
  199. package/src/plugin.js +0 -107
  200. package/src/postcss-plugins/nesting/README.md +0 -42
  201. package/src/postcss-plugins/nesting/index.js +0 -13
  202. package/src/postcss-plugins/nesting/plugin.js +0 -80
  203. package/src/processTailwindFeatures.js +0 -59
  204. package/src/public/colors.js +0 -322
  205. package/src/public/create-plugin.js +0 -2
  206. package/src/public/default-config.js +0 -4
  207. package/src/public/default-theme.js +0 -4
  208. package/src/public/load-config.js +0 -2
  209. package/src/public/resolve-config.js +0 -7
  210. package/src/util/applyImportantSelector.js +0 -27
  211. package/src/util/bigSign.js +0 -3
  212. package/src/util/buildMediaQuery.js +0 -22
  213. package/src/util/cloneDeep.js +0 -11
  214. package/src/util/cloneNodes.js +0 -49
  215. package/src/util/color.js +0 -88
  216. package/src/util/colorNames.js +0 -150
  217. package/src/util/configurePlugins.js +0 -23
  218. package/src/util/createPlugin.js +0 -27
  219. package/src/util/createUtilityPlugin.js +0 -37
  220. package/src/util/dataTypes.js +0 -406
  221. package/src/util/defaults.js +0 -17
  222. package/src/util/escapeClassName.js +0 -8
  223. package/src/util/escapeCommas.js +0 -3
  224. package/src/util/flattenColorPalette.js +0 -13
  225. package/src/util/formatVariantSelector.js +0 -324
  226. package/src/util/getAllConfigs.js +0 -38
  227. package/src/util/hashConfig.js +0 -5
  228. package/src/util/isKeyframeRule.js +0 -3
  229. package/src/util/isPlainObject.js +0 -8
  230. package/src/util/isSyntacticallyValidPropertyValue.js +0 -61
  231. package/src/util/log.js +0 -29
  232. package/src/util/nameClass.js +0 -30
  233. package/src/util/negateValue.js +0 -24
  234. package/src/util/normalizeConfig.js +0 -301
  235. package/src/util/normalizeScreens.js +0 -140
  236. package/src/util/parseAnimationValue.js +0 -68
  237. package/src/util/parseBoxShadowValue.js +0 -72
  238. package/src/util/parseDependency.js +0 -44
  239. package/src/util/parseGlob.js +0 -24
  240. package/src/util/parseObjectStyles.js +0 -19
  241. package/src/util/pluginUtils.js +0 -307
  242. package/src/util/prefixSelector.js +0 -33
  243. package/src/util/pseudoElements.js +0 -171
  244. package/src/util/removeAlphaVariables.js +0 -24
  245. package/src/util/resolveConfig.js +0 -277
  246. package/src/util/resolveConfigPath.js +0 -66
  247. package/src/util/responsive.js +0 -10
  248. package/src/util/splitAtTopLevelOnly.js +0 -52
  249. package/src/util/tap.js +0 -4
  250. package/src/util/toColorValue.js +0 -3
  251. package/src/util/toPath.js +0 -26
  252. package/src/util/transformThemeValue.js +0 -62
  253. package/src/util/validateConfig.js +0 -26
  254. package/src/util/validateFormalSyntax.js +0 -34
  255. package/src/util/withAlphaVariable.js +0 -49
  256. package/src/value-parser/LICENSE +0 -22
  257. package/src/value-parser/README.md +0 -3
  258. package/src/value-parser/index.d.ts +0 -177
  259. package/src/value-parser/index.js +0 -28
  260. package/src/value-parser/parse.js +0 -303
  261. package/src/value-parser/stringify.js +0 -41
  262. package/src/value-parser/unit.js +0 -118
  263. package/src/value-parser/walk.js +0 -18
  264. package/stubs/.gitignore +0 -1
  265. package/stubs/.prettierrc.json +0 -6
  266. package/stubs/config.full.js +0 -1062
  267. package/stubs/config.simple.js +0 -7
  268. package/stubs/postcss.config.cjs +0 -6
  269. package/stubs/postcss.config.js +0 -6
  270. package/stubs/tailwind.config.cjs +0 -2
  271. package/stubs/tailwind.config.js +0 -2
  272. package/stubs/tailwind.config.ts +0 -3
  273. package/tailwind.css +0 -5
  274. package/types/config.d.ts +0 -376
  275. package/types/generated/.gitkeep +0 -0
  276. package/types/generated/colors.d.ts +0 -298
  277. package/types/generated/corePluginList.d.ts +0 -1
  278. package/types/generated/default-theme.d.ts +0 -397
  279. package/types/index.d.ts +0 -11
  280. package/variants.css +0 -1
package/README.md CHANGED
@@ -12,19 +12,18 @@
12
12
  A utility-first CSS framework for rapidly building custom user interfaces.
13
13
  </p>
14
14
 
15
-
16
15
  <p align="center">
17
- <a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/actions/workflow/status/tailwindlabs/tailwindcss/ci-stable.yml?branch=master" alt="Build Status"></a>
16
+ <a href="https://github.com/tailwindlabs/tailwindcss/actions"><img src="https://img.shields.io/github/actions/workflow/status/tailwindlabs/tailwindcss/ci.yml?branch=next" alt="Build Status"></a>
18
17
  <a href="https://www.npmjs.com/package/tailwindcss"><img src="https://img.shields.io/npm/dt/tailwindcss.svg" alt="Total Downloads"></a>
19
18
  <a href="https://github.com/tailwindcss/tailwindcss/releases"><img src="https://img.shields.io/npm/v/tailwindcss.svg" alt="Latest Release"></a>
20
19
  <a href="https://github.com/tailwindcss/tailwindcss/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/tailwindcss.svg" alt="License"></a>
21
20
  </p>
22
21
 
23
- ------
22
+ ---
24
23
 
25
24
  ## Documentation
26
25
 
27
- For full documentation, visit [tailwindcss.com](https://tailwindcss.com/).
26
+ For full documentation, visit [tailwindcss.com](https://tailwindcss.com).
28
27
 
29
28
  ## Community
30
29
 
@@ -32,10 +31,10 @@ For help, discussion about best practices, or any other conversation that would
32
31
 
33
32
  [Discuss Tailwind CSS on GitHub](https://github.com/tailwindcss/tailwindcss/discussions)
34
33
 
35
- For casual chit-chat with others using the framework:
34
+ For chatting with others using the framework:
36
35
 
37
36
  [Join the Tailwind CSS Discord Server](https://discord.gg/7NF8GNe)
38
37
 
39
38
  ## Contributing
40
39
 
41
- If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/master/.github/CONTRIBUTING.md) **before submitting a pull request**.
40
+ If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/next/.github/CONTRIBUTING.md) **before submitting a pull request**.
package/dist/lib.d.mts ADDED
@@ -0,0 +1,324 @@
1
+ interface ClassMetadata {
2
+ modifiers: string[];
3
+ }
4
+ type ClassEntry = [string, ClassMetadata];
5
+ interface SelectorOptions {
6
+ modifier?: string;
7
+ value?: string;
8
+ }
9
+ interface VariantEntry {
10
+ name: string;
11
+ isArbitrary: boolean;
12
+ values: string[];
13
+ hasDash: boolean;
14
+ selectors: (options: SelectorOptions) => string[];
15
+ }
16
+
17
+ declare class Theme {
18
+ private values;
19
+ constructor(values?: Map<string, string>);
20
+ add(key: string, value: string): void;
21
+ keysInNamespaces(themeKeys: ThemeKey[]): string[];
22
+ get(themeKeys: ThemeKey[]): string | null;
23
+ entries(): IterableIterator<[string, string]>;
24
+ clearNamespace(namespace: string): void;
25
+ resolveKey(candidateValue: string, themeKeys: ThemeKey[]): string | null;
26
+ resolve(candidateValue: string, themeKeys: ThemeKey[]): string | null;
27
+ resolveWith(candidateValue: string, themeKeys: ThemeKey[], nestedKeys?: `--${string}`[]): [string, Record<string, string>] | null;
28
+ namespace(namespace: string): Map<string | null, string>;
29
+ }
30
+ type ThemeKey = '--accent-color' | '--animate' | '--aspect-ratio' | '--backdrop-blur' | '--backdrop-brightness' | '--backdrop-contrast' | '--backdrop-grayscale' | '--backdrop-hue-rotate' | '--backdrop-invert' | '--backdrop-opacity' | '--backdrop-saturate' | '--backdrop-sepia' | '--background-color' | '--background-image' | '--blur' | '--border-color' | '--border-spacing' | '--border-width' | '--box-shadow-color' | '--breakpoint' | '--brightness' | '--caret-color' | '--color' | '--columns' | '--contrast' | '--cursor' | '--default-border-width' | '--default-ring-color' | '--default-ring-width' | '--divide-width' | '--divide-color' | '--drop-shadow' | '--fill' | '--flex-basis' | '--font-family' | '--font-size' | '--font-weight' | '--gap' | '--gradient-color-stop-positions' | '--grayscale' | '--grid-auto-columns' | '--grid-auto-rows' | '--grid-column' | '--grid-column-end' | '--grid-column-start' | '--grid-row' | '--grid-row-end' | '--grid-row-start' | '--grid-template-columns' | '--grid-template-rows' | '--height' | '--hue-rotate' | '--inset' | '--inset-shadow' | '--invert' | '--letter-spacing' | '--line-height' | '--line-clamp' | '--list-style-image' | '--list-style-type' | '--margin' | '--max-height' | '--max-width' | '--min-height' | '--min-width' | '--object-position' | '--opacity' | '--order' | '--outline-color' | '--outline-width' | '--outline-offset' | '--padding' | '--placeholder-color' | '--radius' | '--ring-color' | '--ring-offset-color' | '--ring-offset-width' | '--ring-width' | '--rotate' | '--saturate' | '--scale' | '--scroll-margin' | '--scroll-padding' | '--sepia' | '--shadow' | '--size' | '--skew' | '--space' | '--spacing' | '--stroke' | '--stroke-width' | '--text-color' | '--text-decoration-color' | '--text-decoration-thickness' | '--text-indent' | '--text-underline-offset' | '--transform-origin' | '--transition-delay' | '--transition-duration' | '--transition-property' | '--transition-timing-function' | '--translate' | '--width' | '--z-index';
31
+
32
+ type Rule = {
33
+ kind: 'rule';
34
+ selector: string;
35
+ nodes: AstNode[];
36
+ };
37
+ type Declaration = {
38
+ kind: 'declaration';
39
+ property: string;
40
+ value: string;
41
+ important: boolean;
42
+ };
43
+ type Comment = {
44
+ kind: 'comment';
45
+ value: string;
46
+ };
47
+ type AstNode = Rule | Declaration | Comment;
48
+
49
+ type ArbitraryUtilityValue = {
50
+ kind: 'arbitrary';
51
+ /**
52
+ * bg-[color:--my-color]
53
+ * ^^^^^
54
+ */
55
+ dataType: string | null;
56
+ /**
57
+ * bg-[#0088cc]
58
+ * ^^^^^^^
59
+ * bg-[--my_variable]
60
+ * var(^^^^^^^^^^^^^)
61
+ */
62
+ value: string;
63
+ /**
64
+ * bg-[--my_variable]
65
+ * ^^^^^^^^^^^^^
66
+ */
67
+ dashedIdent: string | null;
68
+ };
69
+ type NamedUtilityValue = {
70
+ kind: 'named';
71
+ /**
72
+ * bg-red-500
73
+ * ^^^^^^^
74
+ *
75
+ * w-1/2
76
+ * ^
77
+ */
78
+ value: string;
79
+ /**
80
+ * w-1/2
81
+ * ^^^
82
+ */
83
+ fraction: string | null;
84
+ };
85
+ type ArbitraryModifier = {
86
+ kind: 'arbitrary';
87
+ /**
88
+ * bg-red-500/[50%]
89
+ * ^^^
90
+ */
91
+ value: string;
92
+ /**
93
+ * bg-red-500/[--my_variable]
94
+ * ^^^^^^^^^^^^^
95
+ */
96
+ dashedIdent: string | null;
97
+ };
98
+ type NamedModifier = {
99
+ kind: 'named';
100
+ /**
101
+ * bg-red-500/50
102
+ * ^^
103
+ */
104
+ value: string;
105
+ };
106
+ type ArbitraryVariantValue = {
107
+ kind: 'arbitrary';
108
+ value: string;
109
+ };
110
+ type NamedVariantValue = {
111
+ kind: 'named';
112
+ value: string;
113
+ };
114
+ type Variant =
115
+ /**
116
+ * Arbitrary variants are variants that take a selector and generate a variant
117
+ * on the fly.
118
+ *
119
+ * E.g.: `[&_p]`
120
+ */
121
+ {
122
+ kind: 'arbitrary';
123
+ selector: string;
124
+ compounds: boolean;
125
+ }
126
+ /**
127
+ * Static variants are variants that don't take any arguments.
128
+ *
129
+ * E.g.: `hover`
130
+ */
131
+ | {
132
+ kind: 'static';
133
+ root: string;
134
+ compounds: boolean;
135
+ }
136
+ /**
137
+ * Functional variants are variants that can take an argument. The argument is
138
+ * either a named variant value or an arbitrary variant value.
139
+ *
140
+ * E.g.:
141
+ *
142
+ * - `aria-disabled`
143
+ * - `aria-[disabled]`
144
+ * - `@container-size` -> @container, with named value `size`
145
+ * - `@container-[inline-size]` -> @container, with arbitrary variant value `inline-size`
146
+ * - `@container` -> @container, with no value
147
+ */
148
+ | {
149
+ kind: 'functional';
150
+ root: string;
151
+ value: ArbitraryVariantValue | NamedVariantValue | null;
152
+ modifier: ArbitraryModifier | NamedModifier | null;
153
+ compounds: boolean;
154
+ }
155
+ /**
156
+ * Compound variants are variants that take another variant as an argument.
157
+ *
158
+ * E.g.:
159
+ *
160
+ * - `has-[&_p]`
161
+ * - `group-*`
162
+ * - `peer-*`
163
+ */
164
+ | {
165
+ kind: 'compound';
166
+ root: string;
167
+ modifier: ArbitraryModifier | NamedModifier | null;
168
+ variant: Variant;
169
+ compounds: boolean;
170
+ };
171
+ type Candidate =
172
+ /**
173
+ * Arbitrary candidates are candidates that register utilities on the fly with
174
+ * a property and a value.
175
+ *
176
+ * E.g.:
177
+ *
178
+ * - `[color:red]`
179
+ * - `[color:red]/50`
180
+ * - `[color:red]/50!`
181
+ */
182
+ {
183
+ kind: 'arbitrary';
184
+ property: string;
185
+ value: string;
186
+ modifier: ArbitraryModifier | NamedModifier | null;
187
+ variants: Variant[];
188
+ important: boolean;
189
+ }
190
+ /**
191
+ * Static candidates are candidates that don't take any arguments.
192
+ *
193
+ * E.g.:
194
+ *
195
+ * - `underline`
196
+ * - `flex`
197
+ */
198
+ | {
199
+ kind: 'static';
200
+ root: string;
201
+ variants: Variant[];
202
+ negative: boolean;
203
+ important: boolean;
204
+ }
205
+ /**
206
+ * Functional candidates are candidates that can take an argument.
207
+ *
208
+ * E.g.:
209
+ *
210
+ * - `bg-red-500`
211
+ * - `bg-[#0088cc]`
212
+ * - `w-1/2`
213
+ */
214
+ | {
215
+ kind: 'functional';
216
+ root: string;
217
+ value: ArbitraryUtilityValue | NamedUtilityValue | null;
218
+ modifier: ArbitraryModifier | NamedModifier | null;
219
+ variants: Variant[];
220
+ negative: boolean;
221
+ important: boolean;
222
+ };
223
+
224
+ type CompileFn<T extends Candidate['kind']> = (value: Extract<Candidate, {
225
+ kind: T;
226
+ }>) => AstNode[] | undefined;
227
+ interface SuggestionGroup {
228
+ supportsNegative?: boolean;
229
+ values: (string | null)[];
230
+ modifiers: string[];
231
+ }
232
+ declare class Utilities {
233
+ private utilities;
234
+ private completions;
235
+ static(name: string, compileFn: CompileFn<'static'>): void;
236
+ functional(name: string, compileFn: CompileFn<'functional'>): void;
237
+ arbitrary(compileFn: CompileFn<'arbitrary'>): void;
238
+ has(name: string): boolean;
239
+ get(name: string | symbol): {
240
+ kind: "arbitrary" | "static" | "functional";
241
+ compileFn: CompileFn<any>;
242
+ } | undefined;
243
+ kind(name: string): "arbitrary" | "static" | "functional";
244
+ getCompletions(name: string): SuggestionGroup[];
245
+ suggest(name: string, groups: () => SuggestionGroup[]): void;
246
+ keys(): IterableIterator<string | symbol>;
247
+ entries(): IterableIterator<[string | symbol, {
248
+ kind: "arbitrary" | "static" | "functional";
249
+ compileFn: CompileFn<any>;
250
+ }]>;
251
+ getArbitrary(): CompileFn<any>;
252
+ private set;
253
+ }
254
+
255
+ type VariantFn<T extends Variant['kind']> = (rule: Rule, variant: Extract<Variant, {
256
+ kind: T;
257
+ }>) => null | void;
258
+ type CompareFn = (a: Variant, z: Variant) => number;
259
+ declare class Variants {
260
+ private compareFns;
261
+ private variants;
262
+ private completions;
263
+ /**
264
+ * Registering a group of variants should result in the same sort number for
265
+ * all the variants. This is to ensure that the variants are applied in the
266
+ * correct order.
267
+ */
268
+ private groupOrder;
269
+ /**
270
+ * Keep track of the last sort order instead of using the size of the map to
271
+ * avoid unnecessarily skipping order numbers.
272
+ */
273
+ private lastOrder;
274
+ static(name: string, applyFn: VariantFn<'static'>, { compounds }?: {
275
+ compounds?: boolean;
276
+ }): void;
277
+ functional(name: string, applyFn: VariantFn<'functional'>, { compounds }?: {
278
+ compounds?: boolean;
279
+ }): void;
280
+ compound(name: string, applyFn: VariantFn<'compound'>, { compounds }?: {
281
+ compounds?: boolean;
282
+ }): void;
283
+ group(fn: () => void, compareFn?: CompareFn): void;
284
+ has(name: string): boolean;
285
+ get(name: string): {
286
+ kind: "arbitrary" | "static" | "functional" | "compound";
287
+ order: number;
288
+ applyFn: VariantFn<any>;
289
+ compounds: boolean;
290
+ } | undefined;
291
+ kind(name: string): "arbitrary" | "static" | "functional" | "compound";
292
+ compounds(name: string): boolean;
293
+ suggest(name: string, suggestions: () => string[]): void;
294
+ getCompletions(name: string): string[];
295
+ compare(a: Variant | null, z: Variant | null): number;
296
+ keys(): IterableIterator<string>;
297
+ entries(): IterableIterator<[string, {
298
+ kind: "arbitrary" | "static" | "functional" | "compound";
299
+ order: number;
300
+ applyFn: VariantFn<any>;
301
+ compounds: boolean;
302
+ }]>;
303
+ private set;
304
+ private nextOrder;
305
+ }
306
+
307
+ type DesignSystem = {
308
+ theme: Theme;
309
+ utilities: Utilities;
310
+ variants: Variants;
311
+ candidatesToCss(classes: string[]): (string | null)[];
312
+ getClassOrder(classes: string[]): [string, bigint | null][];
313
+ getClassList(): ClassEntry[];
314
+ getVariants(): VariantEntry[];
315
+ };
316
+
317
+ declare function compile(css: string, rawCandidates: string[]): string;
318
+ declare function optimizeCss(input: string, { file, minify }?: {
319
+ file?: string;
320
+ minify?: boolean;
321
+ }): string;
322
+ declare function __unstable__loadDesignSystem(css: string): DesignSystem;
323
+
324
+ export { __unstable__loadDesignSystem, compile, optimizeCss };
package/dist/lib.d.ts ADDED
@@ -0,0 +1,324 @@
1
+ interface ClassMetadata {
2
+ modifiers: string[];
3
+ }
4
+ type ClassEntry = [string, ClassMetadata];
5
+ interface SelectorOptions {
6
+ modifier?: string;
7
+ value?: string;
8
+ }
9
+ interface VariantEntry {
10
+ name: string;
11
+ isArbitrary: boolean;
12
+ values: string[];
13
+ hasDash: boolean;
14
+ selectors: (options: SelectorOptions) => string[];
15
+ }
16
+
17
+ declare class Theme {
18
+ private values;
19
+ constructor(values?: Map<string, string>);
20
+ add(key: string, value: string): void;
21
+ keysInNamespaces(themeKeys: ThemeKey[]): string[];
22
+ get(themeKeys: ThemeKey[]): string | null;
23
+ entries(): IterableIterator<[string, string]>;
24
+ clearNamespace(namespace: string): void;
25
+ resolveKey(candidateValue: string, themeKeys: ThemeKey[]): string | null;
26
+ resolve(candidateValue: string, themeKeys: ThemeKey[]): string | null;
27
+ resolveWith(candidateValue: string, themeKeys: ThemeKey[], nestedKeys?: `--${string}`[]): [string, Record<string, string>] | null;
28
+ namespace(namespace: string): Map<string | null, string>;
29
+ }
30
+ type ThemeKey = '--accent-color' | '--animate' | '--aspect-ratio' | '--backdrop-blur' | '--backdrop-brightness' | '--backdrop-contrast' | '--backdrop-grayscale' | '--backdrop-hue-rotate' | '--backdrop-invert' | '--backdrop-opacity' | '--backdrop-saturate' | '--backdrop-sepia' | '--background-color' | '--background-image' | '--blur' | '--border-color' | '--border-spacing' | '--border-width' | '--box-shadow-color' | '--breakpoint' | '--brightness' | '--caret-color' | '--color' | '--columns' | '--contrast' | '--cursor' | '--default-border-width' | '--default-ring-color' | '--default-ring-width' | '--divide-width' | '--divide-color' | '--drop-shadow' | '--fill' | '--flex-basis' | '--font-family' | '--font-size' | '--font-weight' | '--gap' | '--gradient-color-stop-positions' | '--grayscale' | '--grid-auto-columns' | '--grid-auto-rows' | '--grid-column' | '--grid-column-end' | '--grid-column-start' | '--grid-row' | '--grid-row-end' | '--grid-row-start' | '--grid-template-columns' | '--grid-template-rows' | '--height' | '--hue-rotate' | '--inset' | '--inset-shadow' | '--invert' | '--letter-spacing' | '--line-height' | '--line-clamp' | '--list-style-image' | '--list-style-type' | '--margin' | '--max-height' | '--max-width' | '--min-height' | '--min-width' | '--object-position' | '--opacity' | '--order' | '--outline-color' | '--outline-width' | '--outline-offset' | '--padding' | '--placeholder-color' | '--radius' | '--ring-color' | '--ring-offset-color' | '--ring-offset-width' | '--ring-width' | '--rotate' | '--saturate' | '--scale' | '--scroll-margin' | '--scroll-padding' | '--sepia' | '--shadow' | '--size' | '--skew' | '--space' | '--spacing' | '--stroke' | '--stroke-width' | '--text-color' | '--text-decoration-color' | '--text-decoration-thickness' | '--text-indent' | '--text-underline-offset' | '--transform-origin' | '--transition-delay' | '--transition-duration' | '--transition-property' | '--transition-timing-function' | '--translate' | '--width' | '--z-index';
31
+
32
+ type Rule = {
33
+ kind: 'rule';
34
+ selector: string;
35
+ nodes: AstNode[];
36
+ };
37
+ type Declaration = {
38
+ kind: 'declaration';
39
+ property: string;
40
+ value: string;
41
+ important: boolean;
42
+ };
43
+ type Comment = {
44
+ kind: 'comment';
45
+ value: string;
46
+ };
47
+ type AstNode = Rule | Declaration | Comment;
48
+
49
+ type ArbitraryUtilityValue = {
50
+ kind: 'arbitrary';
51
+ /**
52
+ * bg-[color:--my-color]
53
+ * ^^^^^
54
+ */
55
+ dataType: string | null;
56
+ /**
57
+ * bg-[#0088cc]
58
+ * ^^^^^^^
59
+ * bg-[--my_variable]
60
+ * var(^^^^^^^^^^^^^)
61
+ */
62
+ value: string;
63
+ /**
64
+ * bg-[--my_variable]
65
+ * ^^^^^^^^^^^^^
66
+ */
67
+ dashedIdent: string | null;
68
+ };
69
+ type NamedUtilityValue = {
70
+ kind: 'named';
71
+ /**
72
+ * bg-red-500
73
+ * ^^^^^^^
74
+ *
75
+ * w-1/2
76
+ * ^
77
+ */
78
+ value: string;
79
+ /**
80
+ * w-1/2
81
+ * ^^^
82
+ */
83
+ fraction: string | null;
84
+ };
85
+ type ArbitraryModifier = {
86
+ kind: 'arbitrary';
87
+ /**
88
+ * bg-red-500/[50%]
89
+ * ^^^
90
+ */
91
+ value: string;
92
+ /**
93
+ * bg-red-500/[--my_variable]
94
+ * ^^^^^^^^^^^^^
95
+ */
96
+ dashedIdent: string | null;
97
+ };
98
+ type NamedModifier = {
99
+ kind: 'named';
100
+ /**
101
+ * bg-red-500/50
102
+ * ^^
103
+ */
104
+ value: string;
105
+ };
106
+ type ArbitraryVariantValue = {
107
+ kind: 'arbitrary';
108
+ value: string;
109
+ };
110
+ type NamedVariantValue = {
111
+ kind: 'named';
112
+ value: string;
113
+ };
114
+ type Variant =
115
+ /**
116
+ * Arbitrary variants are variants that take a selector and generate a variant
117
+ * on the fly.
118
+ *
119
+ * E.g.: `[&_p]`
120
+ */
121
+ {
122
+ kind: 'arbitrary';
123
+ selector: string;
124
+ compounds: boolean;
125
+ }
126
+ /**
127
+ * Static variants are variants that don't take any arguments.
128
+ *
129
+ * E.g.: `hover`
130
+ */
131
+ | {
132
+ kind: 'static';
133
+ root: string;
134
+ compounds: boolean;
135
+ }
136
+ /**
137
+ * Functional variants are variants that can take an argument. The argument is
138
+ * either a named variant value or an arbitrary variant value.
139
+ *
140
+ * E.g.:
141
+ *
142
+ * - `aria-disabled`
143
+ * - `aria-[disabled]`
144
+ * - `@container-size` -> @container, with named value `size`
145
+ * - `@container-[inline-size]` -> @container, with arbitrary variant value `inline-size`
146
+ * - `@container` -> @container, with no value
147
+ */
148
+ | {
149
+ kind: 'functional';
150
+ root: string;
151
+ value: ArbitraryVariantValue | NamedVariantValue | null;
152
+ modifier: ArbitraryModifier | NamedModifier | null;
153
+ compounds: boolean;
154
+ }
155
+ /**
156
+ * Compound variants are variants that take another variant as an argument.
157
+ *
158
+ * E.g.:
159
+ *
160
+ * - `has-[&_p]`
161
+ * - `group-*`
162
+ * - `peer-*`
163
+ */
164
+ | {
165
+ kind: 'compound';
166
+ root: string;
167
+ modifier: ArbitraryModifier | NamedModifier | null;
168
+ variant: Variant;
169
+ compounds: boolean;
170
+ };
171
+ type Candidate =
172
+ /**
173
+ * Arbitrary candidates are candidates that register utilities on the fly with
174
+ * a property and a value.
175
+ *
176
+ * E.g.:
177
+ *
178
+ * - `[color:red]`
179
+ * - `[color:red]/50`
180
+ * - `[color:red]/50!`
181
+ */
182
+ {
183
+ kind: 'arbitrary';
184
+ property: string;
185
+ value: string;
186
+ modifier: ArbitraryModifier | NamedModifier | null;
187
+ variants: Variant[];
188
+ important: boolean;
189
+ }
190
+ /**
191
+ * Static candidates are candidates that don't take any arguments.
192
+ *
193
+ * E.g.:
194
+ *
195
+ * - `underline`
196
+ * - `flex`
197
+ */
198
+ | {
199
+ kind: 'static';
200
+ root: string;
201
+ variants: Variant[];
202
+ negative: boolean;
203
+ important: boolean;
204
+ }
205
+ /**
206
+ * Functional candidates are candidates that can take an argument.
207
+ *
208
+ * E.g.:
209
+ *
210
+ * - `bg-red-500`
211
+ * - `bg-[#0088cc]`
212
+ * - `w-1/2`
213
+ */
214
+ | {
215
+ kind: 'functional';
216
+ root: string;
217
+ value: ArbitraryUtilityValue | NamedUtilityValue | null;
218
+ modifier: ArbitraryModifier | NamedModifier | null;
219
+ variants: Variant[];
220
+ negative: boolean;
221
+ important: boolean;
222
+ };
223
+
224
+ type CompileFn<T extends Candidate['kind']> = (value: Extract<Candidate, {
225
+ kind: T;
226
+ }>) => AstNode[] | undefined;
227
+ interface SuggestionGroup {
228
+ supportsNegative?: boolean;
229
+ values: (string | null)[];
230
+ modifiers: string[];
231
+ }
232
+ declare class Utilities {
233
+ private utilities;
234
+ private completions;
235
+ static(name: string, compileFn: CompileFn<'static'>): void;
236
+ functional(name: string, compileFn: CompileFn<'functional'>): void;
237
+ arbitrary(compileFn: CompileFn<'arbitrary'>): void;
238
+ has(name: string): boolean;
239
+ get(name: string | symbol): {
240
+ kind: "arbitrary" | "static" | "functional";
241
+ compileFn: CompileFn<any>;
242
+ } | undefined;
243
+ kind(name: string): "arbitrary" | "static" | "functional";
244
+ getCompletions(name: string): SuggestionGroup[];
245
+ suggest(name: string, groups: () => SuggestionGroup[]): void;
246
+ keys(): IterableIterator<string | symbol>;
247
+ entries(): IterableIterator<[string | symbol, {
248
+ kind: "arbitrary" | "static" | "functional";
249
+ compileFn: CompileFn<any>;
250
+ }]>;
251
+ getArbitrary(): CompileFn<any>;
252
+ private set;
253
+ }
254
+
255
+ type VariantFn<T extends Variant['kind']> = (rule: Rule, variant: Extract<Variant, {
256
+ kind: T;
257
+ }>) => null | void;
258
+ type CompareFn = (a: Variant, z: Variant) => number;
259
+ declare class Variants {
260
+ private compareFns;
261
+ private variants;
262
+ private completions;
263
+ /**
264
+ * Registering a group of variants should result in the same sort number for
265
+ * all the variants. This is to ensure that the variants are applied in the
266
+ * correct order.
267
+ */
268
+ private groupOrder;
269
+ /**
270
+ * Keep track of the last sort order instead of using the size of the map to
271
+ * avoid unnecessarily skipping order numbers.
272
+ */
273
+ private lastOrder;
274
+ static(name: string, applyFn: VariantFn<'static'>, { compounds }?: {
275
+ compounds?: boolean;
276
+ }): void;
277
+ functional(name: string, applyFn: VariantFn<'functional'>, { compounds }?: {
278
+ compounds?: boolean;
279
+ }): void;
280
+ compound(name: string, applyFn: VariantFn<'compound'>, { compounds }?: {
281
+ compounds?: boolean;
282
+ }): void;
283
+ group(fn: () => void, compareFn?: CompareFn): void;
284
+ has(name: string): boolean;
285
+ get(name: string): {
286
+ kind: "arbitrary" | "static" | "functional" | "compound";
287
+ order: number;
288
+ applyFn: VariantFn<any>;
289
+ compounds: boolean;
290
+ } | undefined;
291
+ kind(name: string): "arbitrary" | "static" | "functional" | "compound";
292
+ compounds(name: string): boolean;
293
+ suggest(name: string, suggestions: () => string[]): void;
294
+ getCompletions(name: string): string[];
295
+ compare(a: Variant | null, z: Variant | null): number;
296
+ keys(): IterableIterator<string>;
297
+ entries(): IterableIterator<[string, {
298
+ kind: "arbitrary" | "static" | "functional" | "compound";
299
+ order: number;
300
+ applyFn: VariantFn<any>;
301
+ compounds: boolean;
302
+ }]>;
303
+ private set;
304
+ private nextOrder;
305
+ }
306
+
307
+ type DesignSystem = {
308
+ theme: Theme;
309
+ utilities: Utilities;
310
+ variants: Variants;
311
+ candidatesToCss(classes: string[]): (string | null)[];
312
+ getClassOrder(classes: string[]): [string, bigint | null][];
313
+ getClassList(): ClassEntry[];
314
+ getVariants(): VariantEntry[];
315
+ };
316
+
317
+ declare function compile(css: string, rawCandidates: string[]): string;
318
+ declare function optimizeCss(input: string, { file, minify }?: {
319
+ file?: string;
320
+ minify?: boolean;
321
+ }): string;
322
+ declare function __unstable__loadDesignSystem(css: string): DesignSystem;
323
+
324
+ export { __unstable__loadDesignSystem, compile, optimizeCss };