tailwindcss 0.0.0-insiders.fda68f7 → 0.0.0-oxide.6bf5e56

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 (195) hide show
  1. package/CHANGELOG.md +603 -2
  2. package/LICENSE +1 -2
  3. package/README.md +14 -6
  4. package/colors.d.ts +3 -0
  5. package/colors.js +2 -304
  6. package/defaultConfig.d.ts +3 -0
  7. package/defaultConfig.js +2 -4
  8. package/defaultTheme.d.ts +4 -0
  9. package/defaultTheme.js +2 -4
  10. package/lib/cli/build/deps.js +54 -0
  11. package/lib/cli/build/index.js +48 -0
  12. package/lib/cli/build/plugin.js +367 -0
  13. package/lib/cli/build/utils.js +78 -0
  14. package/lib/cli/build/watching.js +178 -0
  15. package/lib/cli/help/index.js +71 -0
  16. package/lib/cli/index.js +18 -0
  17. package/lib/cli/init/index.js +46 -0
  18. package/lib/cli/shared.js +13 -0
  19. package/lib/cli-peer-dependencies.js +22 -14
  20. package/lib/cli.js +217 -743
  21. package/lib/constants.js +41 -34
  22. package/lib/corePluginList.js +178 -5
  23. package/lib/corePlugins.js +3879 -2941
  24. package/lib/css/preflight.css +22 -9
  25. package/lib/featureFlags.js +61 -50
  26. package/lib/index.js +45 -28
  27. package/lib/lib/cacheInvalidation.js +90 -0
  28. package/lib/lib/collapseAdjacentRules.js +52 -36
  29. package/lib/lib/collapseDuplicateDeclarations.js +83 -0
  30. package/lib/lib/content.js +176 -0
  31. package/lib/lib/defaultExtractor.js +236 -0
  32. package/lib/lib/detectNesting.js +37 -0
  33. package/lib/lib/evaluateTailwindFunctions.js +203 -161
  34. package/lib/lib/expandApplyAtRules.js +502 -221
  35. package/lib/lib/expandTailwindAtRules.js +258 -243
  36. package/lib/lib/findAtConfigPath.js +44 -0
  37. package/lib/lib/generateRules.js +775 -320
  38. package/lib/lib/getModuleDependencies.js +44 -46
  39. package/lib/lib/normalizeTailwindDirectives.js +79 -60
  40. package/lib/lib/offsets.js +217 -0
  41. package/lib/lib/partitionApplyAtRules.js +56 -0
  42. package/lib/lib/regex.js +60 -0
  43. package/lib/lib/resolveDefaultsAtRules.js +150 -94
  44. package/lib/lib/setupContextUtils.js +1146 -599
  45. package/lib/lib/setupTrackingContext.js +129 -177
  46. package/lib/lib/sharedState.js +53 -21
  47. package/lib/lib/substituteScreenAtRules.js +26 -28
  48. package/{nesting → lib/postcss-plugins/nesting}/README.md +2 -2
  49. package/lib/postcss-plugins/nesting/index.js +19 -0
  50. package/lib/postcss-plugins/nesting/plugin.js +87 -0
  51. package/lib/processTailwindFeatures.js +58 -53
  52. package/lib/public/colors.js +331 -0
  53. package/lib/public/create-plugin.js +15 -0
  54. package/lib/public/default-config.js +16 -0
  55. package/lib/public/default-theme.js +16 -0
  56. package/lib/public/resolve-config.js +22 -0
  57. package/lib/util/bigSign.js +7 -6
  58. package/lib/util/buildMediaQuery.js +21 -32
  59. package/lib/util/cloneDeep.js +16 -14
  60. package/lib/util/cloneNodes.js +29 -15
  61. package/lib/util/color.js +90 -66
  62. package/lib/util/configurePlugins.js +17 -15
  63. package/lib/util/createPlugin.js +23 -26
  64. package/lib/util/createUtilityPlugin.js +46 -46
  65. package/lib/util/dataTypes.js +242 -0
  66. package/lib/util/defaults.js +20 -15
  67. package/lib/util/escapeClassName.js +18 -17
  68. package/lib/util/escapeCommas.js +7 -6
  69. package/lib/util/flattenColorPalette.js +13 -12
  70. package/lib/util/formatVariantSelector.js +285 -0
  71. package/lib/util/getAllConfigs.js +44 -18
  72. package/lib/util/hashConfig.js +15 -12
  73. package/lib/util/isKeyframeRule.js +7 -6
  74. package/lib/util/isPlainObject.js +11 -11
  75. package/lib/util/isSyntacticallyValidPropertyValue.js +72 -0
  76. package/lib/util/log.js +52 -33
  77. package/lib/util/nameClass.js +37 -26
  78. package/lib/util/negateValue.js +31 -17
  79. package/lib/util/normalizeConfig.js +281 -0
  80. package/lib/util/normalizeScreens.js +170 -0
  81. package/lib/util/parseAnimationValue.js +85 -54
  82. package/lib/util/parseBoxShadowValue.js +84 -0
  83. package/lib/util/parseDependency.js +41 -70
  84. package/lib/util/parseGlob.js +34 -0
  85. package/lib/util/parseObjectStyles.js +30 -24
  86. package/lib/util/pluginUtils.js +252 -287
  87. package/lib/util/prefixSelector.js +20 -20
  88. package/lib/util/removeAlphaVariables.js +29 -0
  89. package/lib/util/resolveConfig.js +221 -256
  90. package/lib/util/resolveConfigPath.js +43 -48
  91. package/lib/util/responsive.js +18 -14
  92. package/lib/util/splitAtTopLevelOnly.js +43 -0
  93. package/lib/util/tap.js +8 -7
  94. package/lib/util/toColorValue.js +7 -6
  95. package/lib/util/toPath.js +27 -8
  96. package/lib/util/transformThemeValue.js +67 -28
  97. package/lib/util/validateConfig.js +24 -0
  98. package/lib/util/validateFormalSyntax.js +24 -0
  99. package/lib/util/withAlphaVariable.js +67 -57
  100. package/nesting/index.js +2 -12
  101. package/package.json +60 -65
  102. package/peers/index.js +76445 -84221
  103. package/plugin.d.ts +11 -0
  104. package/plugin.js +1 -2
  105. package/resolveConfig.d.ts +12 -0
  106. package/resolveConfig.js +2 -7
  107. package/scripts/create-plugin-list.js +2 -2
  108. package/scripts/generate-types.js +105 -0
  109. package/scripts/release-channel.js +18 -0
  110. package/scripts/release-notes.js +21 -0
  111. package/scripts/type-utils.js +27 -0
  112. package/src/cli/build/deps.js +56 -0
  113. package/src/cli/build/index.js +49 -0
  114. package/src/cli/build/plugin.js +439 -0
  115. package/src/cli/build/utils.js +76 -0
  116. package/src/cli/build/watching.js +227 -0
  117. package/src/cli/help/index.js +70 -0
  118. package/src/cli/index.js +3 -0
  119. package/src/cli/init/index.js +50 -0
  120. package/src/cli/shared.js +6 -0
  121. package/src/cli-peer-dependencies.js +7 -1
  122. package/src/cli.js +50 -575
  123. package/src/corePluginList.js +1 -1
  124. package/src/corePlugins.js +2405 -1948
  125. package/src/css/preflight.css +22 -9
  126. package/src/featureFlags.js +26 -10
  127. package/src/index.js +19 -6
  128. package/src/lib/cacheInvalidation.js +52 -0
  129. package/src/lib/collapseAdjacentRules.js +21 -2
  130. package/src/lib/collapseDuplicateDeclarations.js +93 -0
  131. package/src/lib/content.js +212 -0
  132. package/src/lib/defaultExtractor.js +211 -0
  133. package/src/lib/detectNesting.js +39 -0
  134. package/src/lib/evaluateTailwindFunctions.js +84 -10
  135. package/src/lib/expandApplyAtRules.js +508 -153
  136. package/src/lib/expandTailwindAtRules.js +130 -104
  137. package/src/lib/findAtConfigPath.js +48 -0
  138. package/src/lib/generateRules.js +596 -70
  139. package/src/lib/normalizeTailwindDirectives.js +10 -3
  140. package/src/lib/offsets.js +270 -0
  141. package/src/lib/partitionApplyAtRules.js +52 -0
  142. package/src/lib/regex.js +74 -0
  143. package/src/lib/resolveDefaultsAtRules.js +105 -47
  144. package/src/lib/setupContextUtils.js +828 -196
  145. package/src/lib/setupTrackingContext.js +19 -54
  146. package/src/lib/sharedState.js +45 -7
  147. package/src/lib/substituteScreenAtRules.js +6 -3
  148. package/src/postcss-plugins/nesting/README.md +42 -0
  149. package/src/postcss-plugins/nesting/index.js +13 -0
  150. package/src/postcss-plugins/nesting/plugin.js +80 -0
  151. package/src/processTailwindFeatures.js +19 -2
  152. package/src/public/colors.js +300 -0
  153. package/src/public/create-plugin.js +2 -0
  154. package/src/public/default-config.js +4 -0
  155. package/src/public/default-theme.js +4 -0
  156. package/src/public/resolve-config.js +7 -0
  157. package/src/util/buildMediaQuery.js +14 -16
  158. package/src/util/cloneNodes.js +19 -2
  159. package/src/util/color.js +31 -14
  160. package/src/util/createUtilityPlugin.js +2 -11
  161. package/src/util/dataTypes.js +256 -0
  162. package/src/util/defaults.js +6 -0
  163. package/src/util/formatVariantSelector.js +319 -0
  164. package/src/util/getAllConfigs.js +19 -0
  165. package/src/util/isSyntacticallyValidPropertyValue.js +61 -0
  166. package/src/util/log.js +23 -22
  167. package/src/util/nameClass.js +14 -6
  168. package/src/util/negateValue.js +15 -5
  169. package/src/util/normalizeConfig.js +300 -0
  170. package/src/util/normalizeScreens.js +140 -0
  171. package/src/util/parseAnimationValue.js +7 -1
  172. package/src/util/parseBoxShadowValue.js +72 -0
  173. package/src/util/parseDependency.js +37 -38
  174. package/src/util/parseGlob.js +24 -0
  175. package/src/util/pluginUtils.js +216 -197
  176. package/src/util/prefixSelector.js +7 -8
  177. package/src/util/removeAlphaVariables.js +24 -0
  178. package/src/util/resolveConfig.js +86 -91
  179. package/src/util/splitAtTopLevelOnly.js +45 -0
  180. package/src/util/toPath.js +23 -1
  181. package/src/util/transformThemeValue.js +33 -8
  182. package/src/util/validateConfig.js +13 -0
  183. package/src/util/validateFormalSyntax.js +34 -0
  184. package/src/util/withAlphaVariable.js +14 -9
  185. package/stubs/defaultConfig.stub.js +186 -117
  186. package/stubs/simpleConfig.stub.js +1 -1
  187. package/types/config.d.ts +362 -0
  188. package/types/generated/.gitkeep +0 -0
  189. package/types/generated/colors.d.ts +276 -0
  190. package/types/generated/corePluginList.d.ts +1 -0
  191. package/types/generated/default-theme.d.ts +342 -0
  192. package/types/index.d.ts +7 -0
  193. package/lib/lib/setupWatchingContext.js +0 -331
  194. package/nesting/plugin.js +0 -41
  195. package/src/lib/setupWatchingContext.js +0 -306
@@ -0,0 +1,300 @@
1
+ import log from '../util/log'
2
+
3
+ function warn({ version, from, to }) {
4
+ log.warn(`${from}-color-renamed`, [
5
+ `As of Tailwind CSS ${version}, \`${from}\` has been renamed to \`${to}\`.`,
6
+ 'Update your configuration file to silence this warning.',
7
+ ])
8
+ }
9
+
10
+ export default {
11
+ inherit: 'inherit',
12
+ current: 'currentColor',
13
+ transparent: 'transparent',
14
+ black: '#000',
15
+ white: '#fff',
16
+ slate: {
17
+ 50: '#f8fafc',
18
+ 100: '#f1f5f9',
19
+ 200: '#e2e8f0',
20
+ 300: '#cbd5e1',
21
+ 400: '#94a3b8',
22
+ 500: '#64748b',
23
+ 600: '#475569',
24
+ 700: '#334155',
25
+ 800: '#1e293b',
26
+ 900: '#0f172a',
27
+ },
28
+ gray: {
29
+ 50: '#f9fafb',
30
+ 100: '#f3f4f6',
31
+ 200: '#e5e7eb',
32
+ 300: '#d1d5db',
33
+ 400: '#9ca3af',
34
+ 500: '#6b7280',
35
+ 600: '#4b5563',
36
+ 700: '#374151',
37
+ 800: '#1f2937',
38
+ 900: '#111827',
39
+ },
40
+ zinc: {
41
+ 50: '#fafafa',
42
+ 100: '#f4f4f5',
43
+ 200: '#e4e4e7',
44
+ 300: '#d4d4d8',
45
+ 400: '#a1a1aa',
46
+ 500: '#71717a',
47
+ 600: '#52525b',
48
+ 700: '#3f3f46',
49
+ 800: '#27272a',
50
+ 900: '#18181b',
51
+ },
52
+ neutral: {
53
+ 50: '#fafafa',
54
+ 100: '#f5f5f5',
55
+ 200: '#e5e5e5',
56
+ 300: '#d4d4d4',
57
+ 400: '#a3a3a3',
58
+ 500: '#737373',
59
+ 600: '#525252',
60
+ 700: '#404040',
61
+ 800: '#262626',
62
+ 900: '#171717',
63
+ },
64
+ stone: {
65
+ 50: '#fafaf9',
66
+ 100: '#f5f5f4',
67
+ 200: '#e7e5e4',
68
+ 300: '#d6d3d1',
69
+ 400: '#a8a29e',
70
+ 500: '#78716c',
71
+ 600: '#57534e',
72
+ 700: '#44403c',
73
+ 800: '#292524',
74
+ 900: '#1c1917',
75
+ },
76
+ red: {
77
+ 50: '#fef2f2',
78
+ 100: '#fee2e2',
79
+ 200: '#fecaca',
80
+ 300: '#fca5a5',
81
+ 400: '#f87171',
82
+ 500: '#ef4444',
83
+ 600: '#dc2626',
84
+ 700: '#b91c1c',
85
+ 800: '#991b1b',
86
+ 900: '#7f1d1d',
87
+ },
88
+ orange: {
89
+ 50: '#fff7ed',
90
+ 100: '#ffedd5',
91
+ 200: '#fed7aa',
92
+ 300: '#fdba74',
93
+ 400: '#fb923c',
94
+ 500: '#f97316',
95
+ 600: '#ea580c',
96
+ 700: '#c2410c',
97
+ 800: '#9a3412',
98
+ 900: '#7c2d12',
99
+ },
100
+ amber: {
101
+ 50: '#fffbeb',
102
+ 100: '#fef3c7',
103
+ 200: '#fde68a',
104
+ 300: '#fcd34d',
105
+ 400: '#fbbf24',
106
+ 500: '#f59e0b',
107
+ 600: '#d97706',
108
+ 700: '#b45309',
109
+ 800: '#92400e',
110
+ 900: '#78350f',
111
+ },
112
+ yellow: {
113
+ 50: '#fefce8',
114
+ 100: '#fef9c3',
115
+ 200: '#fef08a',
116
+ 300: '#fde047',
117
+ 400: '#facc15',
118
+ 500: '#eab308',
119
+ 600: '#ca8a04',
120
+ 700: '#a16207',
121
+ 800: '#854d0e',
122
+ 900: '#713f12',
123
+ },
124
+ lime: {
125
+ 50: '#f7fee7',
126
+ 100: '#ecfccb',
127
+ 200: '#d9f99d',
128
+ 300: '#bef264',
129
+ 400: '#a3e635',
130
+ 500: '#84cc16',
131
+ 600: '#65a30d',
132
+ 700: '#4d7c0f',
133
+ 800: '#3f6212',
134
+ 900: '#365314',
135
+ },
136
+ green: {
137
+ 50: '#f0fdf4',
138
+ 100: '#dcfce7',
139
+ 200: '#bbf7d0',
140
+ 300: '#86efac',
141
+ 400: '#4ade80',
142
+ 500: '#22c55e',
143
+ 600: '#16a34a',
144
+ 700: '#15803d',
145
+ 800: '#166534',
146
+ 900: '#14532d',
147
+ },
148
+ emerald: {
149
+ 50: '#ecfdf5',
150
+ 100: '#d1fae5',
151
+ 200: '#a7f3d0',
152
+ 300: '#6ee7b7',
153
+ 400: '#34d399',
154
+ 500: '#10b981',
155
+ 600: '#059669',
156
+ 700: '#047857',
157
+ 800: '#065f46',
158
+ 900: '#064e3b',
159
+ },
160
+ teal: {
161
+ 50: '#f0fdfa',
162
+ 100: '#ccfbf1',
163
+ 200: '#99f6e4',
164
+ 300: '#5eead4',
165
+ 400: '#2dd4bf',
166
+ 500: '#14b8a6',
167
+ 600: '#0d9488',
168
+ 700: '#0f766e',
169
+ 800: '#115e59',
170
+ 900: '#134e4a',
171
+ },
172
+ cyan: {
173
+ 50: '#ecfeff',
174
+ 100: '#cffafe',
175
+ 200: '#a5f3fc',
176
+ 300: '#67e8f9',
177
+ 400: '#22d3ee',
178
+ 500: '#06b6d4',
179
+ 600: '#0891b2',
180
+ 700: '#0e7490',
181
+ 800: '#155e75',
182
+ 900: '#164e63',
183
+ },
184
+ sky: {
185
+ 50: '#f0f9ff',
186
+ 100: '#e0f2fe',
187
+ 200: '#bae6fd',
188
+ 300: '#7dd3fc',
189
+ 400: '#38bdf8',
190
+ 500: '#0ea5e9',
191
+ 600: '#0284c7',
192
+ 700: '#0369a1',
193
+ 800: '#075985',
194
+ 900: '#0c4a6e',
195
+ },
196
+ blue: {
197
+ 50: '#eff6ff',
198
+ 100: '#dbeafe',
199
+ 200: '#bfdbfe',
200
+ 300: '#93c5fd',
201
+ 400: '#60a5fa',
202
+ 500: '#3b82f6',
203
+ 600: '#2563eb',
204
+ 700: '#1d4ed8',
205
+ 800: '#1e40af',
206
+ 900: '#1e3a8a',
207
+ },
208
+ indigo: {
209
+ 50: '#eef2ff',
210
+ 100: '#e0e7ff',
211
+ 200: '#c7d2fe',
212
+ 300: '#a5b4fc',
213
+ 400: '#818cf8',
214
+ 500: '#6366f1',
215
+ 600: '#4f46e5',
216
+ 700: '#4338ca',
217
+ 800: '#3730a3',
218
+ 900: '#312e81',
219
+ },
220
+ violet: {
221
+ 50: '#f5f3ff',
222
+ 100: '#ede9fe',
223
+ 200: '#ddd6fe',
224
+ 300: '#c4b5fd',
225
+ 400: '#a78bfa',
226
+ 500: '#8b5cf6',
227
+ 600: '#7c3aed',
228
+ 700: '#6d28d9',
229
+ 800: '#5b21b6',
230
+ 900: '#4c1d95',
231
+ },
232
+ purple: {
233
+ 50: '#faf5ff',
234
+ 100: '#f3e8ff',
235
+ 200: '#e9d5ff',
236
+ 300: '#d8b4fe',
237
+ 400: '#c084fc',
238
+ 500: '#a855f7',
239
+ 600: '#9333ea',
240
+ 700: '#7e22ce',
241
+ 800: '#6b21a8',
242
+ 900: '#581c87',
243
+ },
244
+ fuchsia: {
245
+ 50: '#fdf4ff',
246
+ 100: '#fae8ff',
247
+ 200: '#f5d0fe',
248
+ 300: '#f0abfc',
249
+ 400: '#e879f9',
250
+ 500: '#d946ef',
251
+ 600: '#c026d3',
252
+ 700: '#a21caf',
253
+ 800: '#86198f',
254
+ 900: '#701a75',
255
+ },
256
+ pink: {
257
+ 50: '#fdf2f8',
258
+ 100: '#fce7f3',
259
+ 200: '#fbcfe8',
260
+ 300: '#f9a8d4',
261
+ 400: '#f472b6',
262
+ 500: '#ec4899',
263
+ 600: '#db2777',
264
+ 700: '#be185d',
265
+ 800: '#9d174d',
266
+ 900: '#831843',
267
+ },
268
+ rose: {
269
+ 50: '#fff1f2',
270
+ 100: '#ffe4e6',
271
+ 200: '#fecdd3',
272
+ 300: '#fda4af',
273
+ 400: '#fb7185',
274
+ 500: '#f43f5e',
275
+ 600: '#e11d48',
276
+ 700: '#be123c',
277
+ 800: '#9f1239',
278
+ 900: '#881337',
279
+ },
280
+ get lightBlue() {
281
+ warn({ version: 'v2.2', from: 'lightBlue', to: 'sky' })
282
+ return this.sky
283
+ },
284
+ get warmGray() {
285
+ warn({ version: 'v3.0', from: 'warmGray', to: 'stone' })
286
+ return this.stone
287
+ },
288
+ get trueGray() {
289
+ warn({ version: 'v3.0', from: 'trueGray', to: 'neutral' })
290
+ return this.neutral
291
+ },
292
+ get coolGray() {
293
+ warn({ version: 'v3.0', from: 'coolGray', to: 'gray' })
294
+ return this.gray
295
+ },
296
+ get blueGray() {
297
+ warn({ version: 'v3.0', from: 'blueGray', to: 'slate' })
298
+ return this.slate
299
+ },
300
+ }
@@ -0,0 +1,2 @@
1
+ import createPlugin from '../util/createPlugin'
2
+ export default createPlugin
@@ -0,0 +1,4 @@
1
+ import { cloneDeep } from '../util/cloneDeep'
2
+ import defaultConfig from '../../stubs/defaultConfig.stub'
3
+
4
+ export default cloneDeep(defaultConfig)
@@ -0,0 +1,4 @@
1
+ import { cloneDeep } from '../util/cloneDeep'
2
+ import defaultConfig from '../../stubs/defaultConfig.stub'
3
+
4
+ export default cloneDeep(defaultConfig.theme)
@@ -0,0 +1,7 @@
1
+ import resolveConfigObjects from '../util/resolveConfig'
2
+ import getAllConfigs from '../util/getAllConfigs'
3
+
4
+ export default function resolveConfig(...configs) {
5
+ let [, ...defaultConfigs] = getAllConfigs(configs[0])
6
+ return resolveConfigObjects([...configs, ...defaultConfigs])
7
+ }
@@ -1,24 +1,22 @@
1
1
  export default function buildMediaQuery(screens) {
2
- if (typeof screens === 'string') {
3
- screens = { min: screens }
4
- }
5
-
6
- if (!Array.isArray(screens)) {
7
- screens = [screens]
8
- }
2
+ screens = Array.isArray(screens) ? screens : [screens]
9
3
 
10
4
  return screens
11
5
  .map((screen) => {
12
- if (screen?.hasOwnProperty?.('raw')) {
13
- return screen.raw
14
- }
6
+ let values = screen.values.map((screen) => {
7
+ if (screen.raw !== undefined) {
8
+ return screen.raw
9
+ }
10
+
11
+ return [
12
+ screen.min && `(min-width: ${screen.min})`,
13
+ screen.max && `(max-width: ${screen.max})`,
14
+ ]
15
+ .filter(Boolean)
16
+ .join(' and ')
17
+ })
15
18
 
16
- return Object.entries(screen)
17
- .map(([feature, value]) => {
18
- feature = { min: 'min-width', max: 'max-width' }[feature] ?? feature
19
- return `(${feature}: ${value})`
20
- })
21
- .join(' and ')
19
+ return screen.not ? `not all and ${values}` : values
22
20
  })
23
21
  .join(', ')
24
22
  }
@@ -1,9 +1,26 @@
1
- export default function cloneNodes(nodes, source) {
1
+ export default function cloneNodes(nodes, source = undefined, raws = undefined) {
2
2
  return nodes.map((node) => {
3
3
  let cloned = node.clone()
4
4
 
5
- if (source !== undefined) {
5
+ // We always want override the source map
6
+ // except when explicitly told not to
7
+ let shouldOverwriteSource = node.raws.tailwind?.preserveSource !== true || !cloned.source
8
+
9
+ if (source !== undefined && shouldOverwriteSource) {
6
10
  cloned.source = source
11
+
12
+ if ('walk' in cloned) {
13
+ cloned.walk((child) => {
14
+ child.source = source
15
+ })
16
+ }
17
+ }
18
+
19
+ if (raws !== undefined) {
20
+ cloned.raws.tailwind = {
21
+ ...cloned.raws.tailwind,
22
+ ...raws,
23
+ }
7
24
  }
8
25
 
9
26
  return cloned
package/src/util/color.js CHANGED
@@ -2,14 +2,21 @@ import namedColors from 'color-name'
2
2
 
3
3
  let HEX = /^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i
4
4
  let SHORT_HEX = /^#([a-f\d])([a-f\d])([a-f\d])([a-f\d])?$/i
5
- let VALUE = `(?:\\d+|\\d*\\.\\d+)%?`
6
- let SEP = `(?:\\s*,\\s*|\\s+)`
7
- let ALPHA_SEP = `\\s*[,/]\\s*`
8
- let RGB_HSL = new RegExp(
9
- `^(rgb|hsl)a?\\(\\s*(${VALUE})${SEP}(${VALUE})${SEP}(${VALUE})(?:${ALPHA_SEP}(${VALUE}))?\\s*\\)$`
5
+ let VALUE = /(?:\d+|\d*\.\d+)%?/
6
+ let SEP = /(?:\s*,\s*|\s+)/
7
+ let ALPHA_SEP = /\s*[,/]\s*/
8
+ let CUSTOM_PROPERTY = /var\(--(?:[^ )]*?)\)/
9
+
10
+ let RGB = new RegExp(
11
+ `^(rgb)a?\\(\\s*(${VALUE.source}|${CUSTOM_PROPERTY.source})(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${ALPHA_SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?\\s*\\)$`
12
+ )
13
+ let HSL = new RegExp(
14
+ `^(hsl)a?\\(\\s*((?:${VALUE.source})(?:deg|rad|grad|turn)?|${CUSTOM_PROPERTY.source})(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${ALPHA_SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?\\s*\\)$`
10
15
  )
11
16
 
12
- export function parseColor(value) {
17
+ // In "loose" mode the color may contain fewer than 3 parts, as long as at least
18
+ // one of the parts is variable.
19
+ export function parseColor(value, { loose = false } = {}) {
13
20
  if (typeof value !== 'string') {
14
21
  return null
15
22
  }
@@ -37,17 +44,27 @@ export function parseColor(value) {
37
44
  }
38
45
  }
39
46
 
40
- let match = value.match(RGB_HSL)
47
+ let match = value.match(RGB) ?? value.match(HSL)
41
48
 
42
- if (match !== null) {
43
- return {
44
- mode: match[1],
45
- color: [match[2], match[3], match[4]].map((v) => v.toString()),
46
- alpha: match[5]?.toString?.(),
47
- }
49
+ if (match === null) {
50
+ return null
48
51
  }
49
52
 
50
- return null
53
+ let color = [match[2], match[3], match[4]].filter(Boolean).map((v) => v.toString())
54
+
55
+ if (!loose && color.length !== 3) {
56
+ return null
57
+ }
58
+
59
+ if (color.length < 3 && !color.some((part) => /^var\(.*?\)$/.test(part))) {
60
+ return null
61
+ }
62
+
63
+ return {
64
+ mode: match[1],
65
+ color,
66
+ alpha: match[5]?.toString?.(),
67
+ }
51
68
  }
52
69
 
53
70
  export function formatColor({ mode, color, alpha }) {
@@ -1,18 +1,9 @@
1
1
  import transformThemeValue from './transformThemeValue'
2
- import { asValue, asColor, asAngle, asLength, asLookupValue } from '../util/pluginUtils'
3
-
4
- let asMap = new Map([
5
- [asValue, 'any'],
6
- [asColor, 'color'],
7
- [asAngle, 'angle'],
8
- [asLength, 'length'],
9
- [asLookupValue, 'lookup'],
10
- ])
11
2
 
12
3
  export default function createUtilityPlugin(
13
4
  themeKey,
14
5
  utilityVariations = [[themeKey, [themeKey]]],
15
- { filterDefault = false, resolveArbitraryValue = asValue } = {}
6
+ { filterDefault = false, ...options } = {}
16
7
  ) {
17
8
  let transformValue = transformThemeValue(themeKey)
18
9
  return function ({ matchUtilities, theme }) {
@@ -33,12 +24,12 @@ export default function createUtilityPlugin(
33
24
  })
34
25
  }, {}),
35
26
  {
27
+ ...options,
36
28
  values: filterDefault
37
29
  ? Object.fromEntries(
38
30
  Object.entries(theme(themeKey) ?? {}).filter(([modifier]) => modifier !== 'DEFAULT')
39
31
  )
40
32
  : theme(themeKey),
41
- type: asMap.get(resolveArbitraryValue) ?? 'any',
42
33
  }
43
34
  )
44
35
  }