tailwindcss 0.0.0-insiders.bbafc8e → 0.0.0-insiders.bbc2f3f

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 (198) hide show
  1. package/README.md +16 -13
  2. package/dist/chunk-5C7JPVMO.mjs +10 -0
  3. package/dist/chunk-AZANAYY2.mjs +1 -0
  4. package/dist/chunk-V2K3XTS4.mjs +1 -0
  5. package/dist/colors-b_6i0Oi7.d.ts +295 -0
  6. package/dist/colors.d.mts +295 -0
  7. package/dist/colors.d.ts +5 -0
  8. package/dist/colors.js +1 -0
  9. package/dist/colors.mjs +1 -0
  10. package/dist/default-theme.d.mts +1147 -0
  11. package/dist/default-theme.d.ts +1147 -0
  12. package/dist/default-theme.js +1 -0
  13. package/dist/default-theme.mjs +1 -0
  14. package/dist/flatten-color-palette.d.mts +6 -0
  15. package/dist/flatten-color-palette.d.ts +6 -0
  16. package/dist/flatten-color-palette.js +1 -0
  17. package/dist/flatten-color-palette.mjs +1 -0
  18. package/dist/lib.d.mts +260 -0
  19. package/dist/lib.d.ts +3 -0
  20. package/dist/lib.js +33 -0
  21. package/dist/lib.mjs +24 -0
  22. package/dist/plugin.d.mts +11 -0
  23. package/dist/plugin.d.ts +104 -0
  24. package/dist/plugin.js +1 -0
  25. package/dist/plugin.mjs +1 -0
  26. package/dist/resolve-config-BIFUA2FY.d.ts +29 -0
  27. package/dist/resolve-config-QUZ9b-Gn.d.mts +190 -0
  28. package/dist/types-B254mqw1.d.mts +98 -0
  29. package/index.css +865 -0
  30. package/package.json +73 -95
  31. package/preflight.css +383 -0
  32. package/theme.css +453 -0
  33. package/CHANGELOG.md +0 -2084
  34. package/base.css +0 -1
  35. package/colors.js +0 -2
  36. package/components.css +0 -1
  37. package/defaultConfig.js +0 -2
  38. package/defaultTheme.js +0 -2
  39. package/lib/cli-peer-dependencies.js +0 -15
  40. package/lib/cli.js +0 -741
  41. package/lib/constants.js +0 -37
  42. package/lib/corePluginList.js +0 -178
  43. package/lib/corePlugins.js +0 -3587
  44. package/lib/css/LICENSE +0 -25
  45. package/lib/css/preflight.css +0 -367
  46. package/lib/featureFlags.js +0 -59
  47. package/lib/index.js +0 -41
  48. package/lib/lib/cacheInvalidation.js +0 -69
  49. package/lib/lib/collapseAdjacentRules.js +0 -54
  50. package/lib/lib/collapseDuplicateDeclarations.js +0 -80
  51. package/lib/lib/defaultExtractor.js +0 -44
  52. package/lib/lib/detectNesting.js +0 -34
  53. package/lib/lib/evaluateTailwindFunctions.js +0 -171
  54. package/lib/lib/expandApplyAtRules.js +0 -433
  55. package/lib/lib/expandTailwindAtRules.js +0 -262
  56. package/lib/lib/generateRules.js +0 -631
  57. package/lib/lib/getModuleDependencies.js +0 -48
  58. package/lib/lib/normalizeTailwindDirectives.js +0 -84
  59. package/lib/lib/partitionApplyAtRules.js +0 -53
  60. package/lib/lib/resolveDefaultsAtRules.js +0 -143
  61. package/lib/lib/setupContextUtils.js +0 -859
  62. package/lib/lib/setupTrackingContext.js +0 -171
  63. package/lib/lib/sharedState.js +0 -52
  64. package/lib/lib/substituteScreenAtRules.js +0 -27
  65. package/lib/postcss-plugins/nesting/README.md +0 -42
  66. package/lib/postcss-plugins/nesting/index.js +0 -17
  67. package/lib/postcss-plugins/nesting/plugin.js +0 -85
  68. package/lib/processTailwindFeatures.js +0 -59
  69. package/lib/public/colors.js +0 -329
  70. package/lib/public/create-plugin.js +0 -13
  71. package/lib/public/default-config.js +0 -14
  72. package/lib/public/default-theme.js +0 -14
  73. package/lib/public/resolve-config.js +0 -19
  74. package/lib/util/bigSign.js +0 -8
  75. package/lib/util/buildMediaQuery.js +0 -20
  76. package/lib/util/cloneDeep.js +0 -19
  77. package/lib/util/cloneNodes.js +0 -25
  78. package/lib/util/color.js +0 -99
  79. package/lib/util/configurePlugins.js +0 -18
  80. package/lib/util/createPlugin.js +0 -29
  81. package/lib/util/createUtilityPlugin.js +0 -49
  82. package/lib/util/dataTypes.js +0 -233
  83. package/lib/util/defaults.js +0 -22
  84. package/lib/util/escapeClassName.js +0 -19
  85. package/lib/util/escapeCommas.js +0 -8
  86. package/lib/util/flattenColorPalette.js +0 -17
  87. package/lib/util/formatVariantSelector.js +0 -186
  88. package/lib/util/getAllConfigs.js +0 -29
  89. package/lib/util/hashConfig.js +0 -16
  90. package/lib/util/isKeyframeRule.js +0 -8
  91. package/lib/util/isPlainObject.js +0 -12
  92. package/lib/util/isValidArbitraryValue.js +0 -64
  93. package/lib/util/log.js +0 -51
  94. package/lib/util/nameClass.js +0 -32
  95. package/lib/util/negateValue.js +0 -19
  96. package/lib/util/normalizeConfig.js +0 -240
  97. package/lib/util/normalizeScreens.js +0 -59
  98. package/lib/util/parseAnimationValue.js +0 -89
  99. package/lib/util/parseBoxShadowValue.js +0 -117
  100. package/lib/util/parseDependency.js +0 -63
  101. package/lib/util/parseObjectStyles.js +0 -31
  102. package/lib/util/pluginUtils.js +0 -179
  103. package/lib/util/prefixSelector.js +0 -20
  104. package/lib/util/resolveConfig.js +0 -255
  105. package/lib/util/resolveConfigPath.js +0 -51
  106. package/lib/util/responsive.js +0 -19
  107. package/lib/util/tap.js +0 -9
  108. package/lib/util/toColorValue.js +0 -8
  109. package/lib/util/toPath.js +0 -14
  110. package/lib/util/transformThemeValue.js +0 -59
  111. package/lib/util/withAlphaVariable.js +0 -67
  112. package/nesting/index.js +0 -2
  113. package/peers/index.js +0 -75077
  114. package/plugin.js +0 -2
  115. package/prettier.config.js +0 -19
  116. package/resolveConfig.js +0 -2
  117. package/screens.css +0 -1
  118. package/scripts/create-plugin-list.js +0 -10
  119. package/scripts/install-integrations.js +0 -27
  120. package/scripts/rebuildFixtures.js +0 -68
  121. package/src/cli-peer-dependencies.js +0 -9
  122. package/src/cli.js +0 -815
  123. package/src/constants.js +0 -17
  124. package/src/corePluginList.js +0 -1
  125. package/src/corePlugins.js +0 -2365
  126. package/src/css/LICENSE +0 -25
  127. package/src/css/preflight.css +0 -367
  128. package/src/featureFlags.js +0 -54
  129. package/src/index.js +0 -42
  130. package/src/lib/cacheInvalidation.js +0 -52
  131. package/src/lib/collapseAdjacentRules.js +0 -54
  132. package/src/lib/collapseDuplicateDeclarations.js +0 -93
  133. package/src/lib/defaultExtractor.js +0 -50
  134. package/src/lib/detectNesting.js +0 -39
  135. package/src/lib/evaluateTailwindFunctions.js +0 -198
  136. package/src/lib/expandApplyAtRules.js +0 -480
  137. package/src/lib/expandTailwindAtRules.js +0 -292
  138. package/src/lib/generateRules.js +0 -623
  139. package/src/lib/getModuleDependencies.js +0 -39
  140. package/src/lib/normalizeTailwindDirectives.js +0 -84
  141. package/src/lib/partitionApplyAtRules.js +0 -52
  142. package/src/lib/resolveDefaultsAtRules.js +0 -146
  143. package/src/lib/setupContextUtils.js +0 -883
  144. package/src/lib/setupTrackingContext.js +0 -183
  145. package/src/lib/sharedState.js +0 -48
  146. package/src/lib/substituteScreenAtRules.js +0 -19
  147. package/src/postcss-plugins/nesting/README.md +0 -42
  148. package/src/postcss-plugins/nesting/index.js +0 -13
  149. package/src/postcss-plugins/nesting/plugin.js +0 -80
  150. package/src/processTailwindFeatures.js +0 -58
  151. package/src/public/colors.js +0 -300
  152. package/src/public/create-plugin.js +0 -2
  153. package/src/public/default-config.js +0 -4
  154. package/src/public/default-theme.js +0 -4
  155. package/src/public/resolve-config.js +0 -7
  156. package/src/util/bigSign.js +0 -3
  157. package/src/util/buildMediaQuery.js +0 -20
  158. package/src/util/cloneDeep.js +0 -11
  159. package/src/util/cloneNodes.js +0 -24
  160. package/src/util/color.js +0 -69
  161. package/src/util/configurePlugins.js +0 -23
  162. package/src/util/createPlugin.js +0 -27
  163. package/src/util/createUtilityPlugin.js +0 -37
  164. package/src/util/dataTypes.js +0 -248
  165. package/src/util/defaults.js +0 -17
  166. package/src/util/escapeClassName.js +0 -8
  167. package/src/util/escapeCommas.js +0 -3
  168. package/src/util/flattenColorPalette.js +0 -13
  169. package/src/util/formatVariantSelector.js +0 -196
  170. package/src/util/getAllConfigs.js +0 -19
  171. package/src/util/hashConfig.js +0 -5
  172. package/src/util/isKeyframeRule.js +0 -3
  173. package/src/util/isPlainObject.js +0 -8
  174. package/src/util/isValidArbitraryValue.js +0 -61
  175. package/src/util/log.js +0 -29
  176. package/src/util/nameClass.js +0 -26
  177. package/src/util/negateValue.js +0 -16
  178. package/src/util/normalizeConfig.js +0 -270
  179. package/src/util/normalizeScreens.js +0 -45
  180. package/src/util/parseAnimationValue.js +0 -68
  181. package/src/util/parseBoxShadowValue.js +0 -119
  182. package/src/util/parseDependency.js +0 -49
  183. package/src/util/parseObjectStyles.js +0 -19
  184. package/src/util/pluginUtils.js +0 -192
  185. package/src/util/prefixSelector.js +0 -14
  186. package/src/util/resolveConfig.js +0 -269
  187. package/src/util/resolveConfigPath.js +0 -55
  188. package/src/util/responsive.js +0 -10
  189. package/src/util/tap.js +0 -4
  190. package/src/util/toColorValue.js +0 -3
  191. package/src/util/toPath.js +0 -26
  192. package/src/util/transformThemeValue.js +0 -52
  193. package/src/util/withAlphaVariable.js +0 -49
  194. package/stubs/defaultConfig.stub.js +0 -950
  195. package/stubs/defaultPostCssConfig.stub.js +0 -6
  196. package/stubs/simpleConfig.stub.js +0 -7
  197. package/tailwind.css +0 -5
  198. package/variants.css +0 -1
@@ -1,270 +0,0 @@
1
- import log, { dim } from './log'
2
-
3
- export function normalizeConfig(config) {
4
- // Quick structure validation
5
- /**
6
- * type FilePath = string
7
- * type RawFile = { raw: string, extension?: string }
8
- * type ExtractorFn = (content: string) => Array<string>
9
- * type TransformerFn = (content: string) => string
10
- *
11
- * type Content =
12
- * | Array<FilePath | RawFile>
13
- * | {
14
- * files: Array<FilePath | RawFile>,
15
- * extract?: ExtractorFn | { [extension: string]: ExtractorFn }
16
- * transform?: TransformerFn | { [extension: string]: TransformerFn }
17
- * }
18
- */
19
- let valid = (() => {
20
- // `config.purge` should not exist anymore
21
- if (config.purge) {
22
- return false
23
- }
24
-
25
- // `config.content` should exist
26
- if (!config.content) {
27
- return false
28
- }
29
-
30
- // `config.content` should be an object or an array
31
- if (
32
- !Array.isArray(config.content) &&
33
- !(typeof config.content === 'object' && config.content !== null)
34
- ) {
35
- return false
36
- }
37
-
38
- // When `config.content` is an array, it should consist of FilePaths or RawFiles
39
- if (Array.isArray(config.content)) {
40
- return config.content.every((path) => {
41
- // `path` can be a string
42
- if (typeof path === 'string') return true
43
-
44
- // `path` can be an object { raw: string, extension?: string }
45
- // `raw` must be a string
46
- if (typeof path?.raw !== 'string') return false
47
-
48
- // `extension` (if provided) should also be a string
49
- if (path?.extension && typeof path?.extension !== 'string') {
50
- return false
51
- }
52
-
53
- return true
54
- })
55
- }
56
-
57
- // When `config.content` is an object
58
- if (typeof config.content === 'object' && config.content !== null) {
59
- // Only `files`, `extract` and `transform` can exist in `config.content`
60
- if (
61
- Object.keys(config.content).some((key) => !['files', 'extract', 'transform'].includes(key))
62
- ) {
63
- return false
64
- }
65
-
66
- // `config.content.files` should exist of FilePaths or RawFiles
67
- if (Array.isArray(config.content.files)) {
68
- if (
69
- !config.content.files.every((path) => {
70
- // `path` can be a string
71
- if (typeof path === 'string') return true
72
-
73
- // `path` can be an object { raw: string, extension?: string }
74
- // `raw` must be a string
75
- if (typeof path?.raw !== 'string') return false
76
-
77
- // `extension` (if provided) should also be a string
78
- if (path?.extension && typeof path?.extension !== 'string') {
79
- return false
80
- }
81
-
82
- return true
83
- })
84
- ) {
85
- return false
86
- }
87
-
88
- // `config.content.extract` is optional, and can be a Function or a Record<String, Function>
89
- if (typeof config.content.extract === 'object') {
90
- for (let value of Object.values(config.content.extract)) {
91
- if (typeof value !== 'function') {
92
- return false
93
- }
94
- }
95
- } else if (
96
- !(config.content.extract === undefined || typeof config.content.extract === 'function')
97
- ) {
98
- return false
99
- }
100
-
101
- // `config.content.transform` is optional, and can be a Function or a Record<String, Function>
102
- if (typeof config.content.transform === 'object') {
103
- for (let value of Object.values(config.content.transform)) {
104
- if (typeof value !== 'function') {
105
- return false
106
- }
107
- }
108
- } else if (
109
- !(
110
- config.content.transform === undefined || typeof config.content.transform === 'function'
111
- )
112
- ) {
113
- return false
114
- }
115
- }
116
-
117
- return true
118
- }
119
-
120
- return false
121
- })()
122
-
123
- if (!valid) {
124
- log.warn('purge-deprecation', [
125
- 'The `purge`/`content` options have changed in Tailwind CSS v3.0.',
126
- 'Update your configuration file to eliminate this warning.',
127
- 'https://tailwindcss.com/docs/upgrade-guide#configure-content-sources',
128
- ])
129
- }
130
-
131
- // Normalize the `safelist`
132
- config.safelist = (() => {
133
- let { content, purge, safelist } = config
134
-
135
- if (Array.isArray(safelist)) return safelist
136
- if (Array.isArray(content?.safelist)) return content.safelist
137
- if (Array.isArray(purge?.safelist)) return purge.safelist
138
- if (Array.isArray(purge?.options?.safelist)) return purge.options.safelist
139
-
140
- return []
141
- })()
142
-
143
- // Normalize prefix option
144
- if (typeof config.prefix === 'function') {
145
- log.warn('prefix-function', [
146
- 'As of Tailwind CSS v3.0, `prefix` cannot be a function.',
147
- 'Update `prefix` in your configuration to be a string to eliminate this warning.',
148
- 'https://tailwindcss.com/docs/upgrade-guide#prefix-cannot-be-a-function',
149
- ])
150
- config.prefix = ''
151
- } else {
152
- config.prefix = config.prefix ?? ''
153
- }
154
-
155
- // Normalize the `content`
156
- config.content = {
157
- files: (() => {
158
- let { content, purge } = config
159
-
160
- if (Array.isArray(purge)) return purge
161
- if (Array.isArray(purge?.content)) return purge.content
162
- if (Array.isArray(content)) return content
163
- if (Array.isArray(content?.content)) return content.content
164
- if (Array.isArray(content?.files)) return content.files
165
-
166
- return []
167
- })(),
168
-
169
- extract: (() => {
170
- let extract = (() => {
171
- if (config.purge?.extract) return config.purge.extract
172
- if (config.content?.extract) return config.content.extract
173
-
174
- if (config.purge?.extract?.DEFAULT) return config.purge.extract.DEFAULT
175
- if (config.content?.extract?.DEFAULT) return config.content.extract.DEFAULT
176
-
177
- if (config.purge?.options?.extractors) return config.purge.options.extractors
178
- if (config.content?.options?.extractors) return config.content.options.extractors
179
-
180
- return {}
181
- })()
182
-
183
- let extractors = {}
184
-
185
- let defaultExtractor = (() => {
186
- if (config.purge?.options?.defaultExtractor) {
187
- return config.purge.options.defaultExtractor
188
- }
189
-
190
- if (config.content?.options?.defaultExtractor) {
191
- return config.content.options.defaultExtractor
192
- }
193
-
194
- return undefined
195
- })()
196
-
197
- if (defaultExtractor !== undefined) {
198
- extractors.DEFAULT = defaultExtractor
199
- }
200
-
201
- // Functions
202
- if (typeof extract === 'function') {
203
- extractors.DEFAULT = extract
204
- }
205
-
206
- // Arrays
207
- else if (Array.isArray(extract)) {
208
- for (let { extensions, extractor } of extract ?? []) {
209
- for (let extension of extensions) {
210
- extractors[extension] = extractor
211
- }
212
- }
213
- }
214
-
215
- // Objects
216
- else if (typeof extract === 'object' && extract !== null) {
217
- Object.assign(extractors, extract)
218
- }
219
-
220
- return extractors
221
- })(),
222
-
223
- transform: (() => {
224
- let transform = (() => {
225
- if (config.purge?.transform) return config.purge.transform
226
- if (config.content?.transform) return config.content.transform
227
-
228
- if (config.purge?.transform?.DEFAULT) return config.purge.transform.DEFAULT
229
- if (config.content?.transform?.DEFAULT) return config.content.transform.DEFAULT
230
-
231
- return {}
232
- })()
233
-
234
- let transformers = {}
235
-
236
- if (typeof transform === 'function') {
237
- transformers.DEFAULT = transform
238
- }
239
-
240
- if (typeof transform === 'object' && transform !== null) {
241
- Object.assign(transformers, transform)
242
- }
243
-
244
- return transformers
245
- })(),
246
- }
247
-
248
- // Validate globs to prevent bogus globs.
249
- // E.g.: `./src/*.{html}` is invalid, the `{html}` should just be `html`
250
- for (let file of config.content.files) {
251
- if (typeof file === 'string' && /{([^,]*?)}/g.test(file)) {
252
- log.warn('invalid-glob-braces', [
253
- `The glob pattern ${dim(file)} in your Tailwind CSS configuration is invalid.`,
254
- `Update it to ${dim(file.replace(/{([^,]*?)}/g, '$1'))} to silence this warning.`,
255
- // TODO: Add https://tw.wtf/invalid-glob-braces
256
- ])
257
- break
258
- }
259
- }
260
-
261
- if (config.content.files.length === 0) {
262
- log.warn('content-problems', [
263
- 'The `content` option in your Tailwind CSS configuration is missing or empty.',
264
- 'Configure your content sources or your generated CSS will be missing styles.',
265
- 'https://tailwindcss.com/docs/content-configuration',
266
- ])
267
- }
268
-
269
- return config
270
- }
@@ -1,45 +0,0 @@
1
- /**
2
- * A function that normalizes the various forms that the screens object can be
3
- * provided in.
4
- *
5
- * Input(s):
6
- * - ['100px', '200px'] // Raw strings
7
- * - { sm: '100px', md: '200px' } // Object with string values
8
- * - { sm: { min: '100px' }, md: { max: '100px' } } // Object with object values
9
- * - { sm: [{ min: '100px' }, { max: '200px' }] } // Object with object array (multiple values)
10
- *
11
- * Output(s):
12
- * - [{ name: 'sm', values: [{ min: '100px', max: '200px' }] }] // List of objects, that contains multiple values
13
- */
14
- export function normalizeScreens(screens, root = true) {
15
- if (Array.isArray(screens)) {
16
- return screens.map((screen) => {
17
- if (root && Array.isArray(screen)) {
18
- throw new Error('The tuple syntax is not supported for `screens`.')
19
- }
20
-
21
- if (typeof screen === 'string') {
22
- return { name: screen.toString(), values: [{ min: screen, max: undefined }] }
23
- }
24
-
25
- let [name, options] = screen
26
- name = name.toString()
27
-
28
- if (typeof options === 'string') {
29
- return { name, values: [{ min: options, max: undefined }] }
30
- }
31
-
32
- if (Array.isArray(options)) {
33
- return { name, values: options.map((option) => resolveValue(option)) }
34
- }
35
-
36
- return { name, values: [resolveValue(options)] }
37
- })
38
- }
39
-
40
- return normalizeScreens(Object.entries(screens ?? {}), false)
41
- }
42
-
43
- function resolveValue({ 'min-width': _minWidth, min = _minWidth, max, raw } = {}) {
44
- return { min, max, raw }
45
- }
@@ -1,68 +0,0 @@
1
- const DIRECTIONS = new Set(['normal', 'reverse', 'alternate', 'alternate-reverse'])
2
- const PLAY_STATES = new Set(['running', 'paused'])
3
- const FILL_MODES = new Set(['none', 'forwards', 'backwards', 'both'])
4
- const ITERATION_COUNTS = new Set(['infinite'])
5
- const TIMINGS = new Set([
6
- 'linear',
7
- 'ease',
8
- 'ease-in',
9
- 'ease-out',
10
- 'ease-in-out',
11
- 'step-start',
12
- 'step-end',
13
- ])
14
- const TIMING_FNS = ['cubic-bezier', 'steps']
15
-
16
- const COMMA = /\,(?![^(]*\))/g // Comma separator that is not located between brackets. E.g.: `cubiz-bezier(a, b, c)` these don't count.
17
- const SPACE = /\ +(?![^(]*\))/g // Similar to the one above, but with spaces instead.
18
- const TIME = /^(-?[\d.]+m?s)$/
19
- const DIGIT = /^(\d+)$/
20
-
21
- export default function parseAnimationValue(input) {
22
- let animations = input.split(COMMA)
23
- return animations.map((animation) => {
24
- let value = animation.trim()
25
- let result = { value }
26
- let parts = value.split(SPACE)
27
- let seen = new Set()
28
-
29
- for (let part of parts) {
30
- if (!seen.has('DIRECTIONS') && DIRECTIONS.has(part)) {
31
- result.direction = part
32
- seen.add('DIRECTIONS')
33
- } else if (!seen.has('PLAY_STATES') && PLAY_STATES.has(part)) {
34
- result.playState = part
35
- seen.add('PLAY_STATES')
36
- } else if (!seen.has('FILL_MODES') && FILL_MODES.has(part)) {
37
- result.fillMode = part
38
- seen.add('FILL_MODES')
39
- } else if (
40
- !seen.has('ITERATION_COUNTS') &&
41
- (ITERATION_COUNTS.has(part) || DIGIT.test(part))
42
- ) {
43
- result.iterationCount = part
44
- seen.add('ITERATION_COUNTS')
45
- } else if (!seen.has('TIMING_FUNCTION') && TIMINGS.has(part)) {
46
- result.timingFunction = part
47
- seen.add('TIMING_FUNCTION')
48
- } else if (!seen.has('TIMING_FUNCTION') && TIMING_FNS.some((f) => part.startsWith(`${f}(`))) {
49
- result.timingFunction = part
50
- seen.add('TIMING_FUNCTION')
51
- } else if (!seen.has('DURATION') && TIME.test(part)) {
52
- result.duration = part
53
- seen.add('DURATION')
54
- } else if (!seen.has('DELAY') && TIME.test(part)) {
55
- result.delay = part
56
- seen.add('DELAY')
57
- } else if (!seen.has('NAME')) {
58
- result.name = part
59
- seen.add('NAME')
60
- } else {
61
- if (!result.unknown) result.unknown = []
62
- result.unknown.push(part)
63
- }
64
- }
65
-
66
- return result
67
- })
68
- }
@@ -1,119 +0,0 @@
1
- let KEYWORDS = new Set(['inset', 'inherit', 'initial', 'revert', 'unset'])
2
- let SPACE = /\ +(?![^(]*\))/g // Similar to the one above, but with spaces instead.
3
- let LENGTH = /^-?(\d+|\.\d+)(.*?)$/g
4
-
5
- let SPECIALS = /[(),]/g
6
-
7
- /**
8
- * This splits a string on top-level commas.
9
- *
10
- * Regex doesn't support recursion (at least not the JS-flavored version).
11
- * So we have to use a tiny state machine to keep track of paren vs comma
12
- * placement. Before we'd only exclude commas from the inner-most nested
13
- * set of parens rather than any commas that were not contained in parens
14
- * at all which is the intended behavior here.
15
- *
16
- * Expected behavior:
17
- * var(--a, 0 0 1px rgb(0, 0, 0)), 0 0 1px rgb(0, 0, 0)
18
- * ─┬─ ┬ ┬ ┬
19
- * x x x ╰──────── Split because top-level
20
- * ╰──────────────┴──┴───────────── Ignored b/c inside >= 1 levels of parens
21
- *
22
- * @param {string} input
23
- */
24
- function* splitByTopLevelCommas(input) {
25
- SPECIALS.lastIndex = -1
26
-
27
- let depth = 0
28
- let lastIndex = 0
29
- let found = false
30
-
31
- // Find all parens & commas
32
- // And only split on commas if they're top-level
33
- for (let match of input.matchAll(SPECIALS)) {
34
- if (match[0] === '(') depth++
35
- if (match[0] === ')') depth--
36
- if (match[0] === ',' && depth === 0) {
37
- found = true
38
-
39
- yield input.substring(lastIndex, match.index)
40
- lastIndex = match.index + match[0].length
41
- }
42
- }
43
-
44
- // Provide the last segment of the string if available
45
- // Otherwise the whole string since no commas were found
46
- // This mirrors the behavior of string.split()
47
- if (found) {
48
- yield input.substring(lastIndex)
49
- } else {
50
- yield input
51
- }
52
- }
53
-
54
- export function parseBoxShadowValue(input) {
55
- let shadows = Array.from(splitByTopLevelCommas(input))
56
- return shadows.map((shadow) => {
57
- let value = shadow.trim()
58
- let result = { raw: value }
59
- let parts = value.split(SPACE)
60
- let seen = new Set()
61
-
62
- for (let part of parts) {
63
- // Reset index, since the regex is stateful.
64
- LENGTH.lastIndex = 0
65
-
66
- // Keyword
67
- if (!seen.has('KEYWORD') && KEYWORDS.has(part)) {
68
- result.keyword = part
69
- seen.add('KEYWORD')
70
- }
71
-
72
- // Length value
73
- else if (LENGTH.test(part)) {
74
- if (!seen.has('X')) {
75
- result.x = part
76
- seen.add('X')
77
- } else if (!seen.has('Y')) {
78
- result.y = part
79
- seen.add('Y')
80
- } else if (!seen.has('BLUR')) {
81
- result.blur = part
82
- seen.add('BLUR')
83
- } else if (!seen.has('SPREAD')) {
84
- result.spread = part
85
- seen.add('SPREAD')
86
- }
87
- }
88
-
89
- // Color or unknown
90
- else {
91
- if (!result.color) {
92
- result.color = part
93
- } else {
94
- if (!result.unknown) result.unknown = []
95
- result.unknown.push(part)
96
- }
97
- }
98
- }
99
-
100
- // Check if valid
101
- result.valid = result.x !== undefined && result.y !== undefined
102
-
103
- return result
104
- })
105
- }
106
-
107
- export function formatBoxShadowValue(shadows) {
108
- return shadows
109
- .map((shadow) => {
110
- if (!shadow.valid) {
111
- return shadow.raw
112
- }
113
-
114
- return [shadow.keyword, shadow.x, shadow.y, shadow.blur, shadow.spread, shadow.color]
115
- .filter(Boolean)
116
- .join(' ')
117
- })
118
- .join(', ')
119
- }
@@ -1,49 +0,0 @@
1
- import isGlob from 'is-glob'
2
- import globParent from 'glob-parent'
3
- import path from 'path'
4
-
5
- // Based on `glob-base`
6
- // https://github.com/micromatch/glob-base/blob/master/index.js
7
- function parseGlob(pattern) {
8
- let glob = pattern
9
- let base = globParent(pattern)
10
-
11
- if (base !== '.') {
12
- glob = pattern.substr(base.length)
13
- if (glob.charAt(0) === '/') {
14
- glob = glob.substr(1)
15
- }
16
- }
17
-
18
- if (glob.substr(0, 2) === './') {
19
- glob = glob.substr(2)
20
- }
21
- if (glob.charAt(0) === '/') {
22
- glob = glob.substr(1)
23
- }
24
-
25
- return { base, glob }
26
- }
27
-
28
- export default function parseDependency(normalizedFileOrGlob) {
29
- if (normalizedFileOrGlob.startsWith('!')) {
30
- return null
31
- }
32
-
33
- let message
34
-
35
- if (isGlob(normalizedFileOrGlob)) {
36
- let { base, glob } = parseGlob(normalizedFileOrGlob)
37
- message = { type: 'dir-dependency', dir: path.resolve(base), glob }
38
- } else {
39
- message = { type: 'dependency', file: path.resolve(normalizedFileOrGlob) }
40
- }
41
-
42
- // rollup-plugin-postcss does not support dir-dependency messages
43
- // but directories can be watched in the same way as files
44
- if (message.type === 'dir-dependency' && process.env.ROLLUP_WATCH === 'true') {
45
- message = { type: 'dependency', file: message.dir }
46
- }
47
-
48
- return message
49
- }
@@ -1,19 +0,0 @@
1
- import postcss from 'postcss'
2
- import postcssNested from 'postcss-nested'
3
- import postcssJs from 'postcss-js'
4
-
5
- export default function parseObjectStyles(styles) {
6
- if (!Array.isArray(styles)) {
7
- return parseObjectStyles([styles])
8
- }
9
-
10
- return styles.flatMap((style) => {
11
- return postcss([
12
- postcssNested({
13
- bubble: ['screen'],
14
- }),
15
- ]).process(style, {
16
- parser: postcssJs,
17
- }).root.nodes
18
- })
19
- }