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.
- package/README.md +16 -13
- package/dist/chunk-5C7JPVMO.mjs +10 -0
- package/dist/chunk-AZANAYY2.mjs +1 -0
- package/dist/chunk-V2K3XTS4.mjs +1 -0
- package/dist/colors-b_6i0Oi7.d.ts +295 -0
- package/dist/colors.d.mts +295 -0
- package/dist/colors.d.ts +5 -0
- package/dist/colors.js +1 -0
- package/dist/colors.mjs +1 -0
- package/dist/default-theme.d.mts +1147 -0
- package/dist/default-theme.d.ts +1147 -0
- package/dist/default-theme.js +1 -0
- package/dist/default-theme.mjs +1 -0
- package/dist/flatten-color-palette.d.mts +6 -0
- package/dist/flatten-color-palette.d.ts +6 -0
- package/dist/flatten-color-palette.js +1 -0
- package/dist/flatten-color-palette.mjs +1 -0
- package/dist/lib.d.mts +260 -0
- package/dist/lib.d.ts +3 -0
- package/dist/lib.js +33 -0
- package/dist/lib.mjs +24 -0
- package/dist/plugin.d.mts +11 -0
- package/dist/plugin.d.ts +104 -0
- package/dist/plugin.js +1 -0
- package/dist/plugin.mjs +1 -0
- package/dist/resolve-config-BIFUA2FY.d.ts +29 -0
- package/dist/resolve-config-QUZ9b-Gn.d.mts +190 -0
- package/dist/types-B254mqw1.d.mts +98 -0
- package/index.css +865 -0
- package/package.json +73 -95
- package/preflight.css +383 -0
- package/theme.css +453 -0
- package/CHANGELOG.md +0 -2084
- package/base.css +0 -1
- package/colors.js +0 -2
- package/components.css +0 -1
- package/defaultConfig.js +0 -2
- package/defaultTheme.js +0 -2
- package/lib/cli-peer-dependencies.js +0 -15
- package/lib/cli.js +0 -741
- package/lib/constants.js +0 -37
- package/lib/corePluginList.js +0 -178
- package/lib/corePlugins.js +0 -3587
- package/lib/css/LICENSE +0 -25
- package/lib/css/preflight.css +0 -367
- package/lib/featureFlags.js +0 -59
- package/lib/index.js +0 -41
- package/lib/lib/cacheInvalidation.js +0 -69
- package/lib/lib/collapseAdjacentRules.js +0 -54
- package/lib/lib/collapseDuplicateDeclarations.js +0 -80
- package/lib/lib/defaultExtractor.js +0 -44
- package/lib/lib/detectNesting.js +0 -34
- package/lib/lib/evaluateTailwindFunctions.js +0 -171
- package/lib/lib/expandApplyAtRules.js +0 -433
- package/lib/lib/expandTailwindAtRules.js +0 -262
- package/lib/lib/generateRules.js +0 -631
- package/lib/lib/getModuleDependencies.js +0 -48
- package/lib/lib/normalizeTailwindDirectives.js +0 -84
- package/lib/lib/partitionApplyAtRules.js +0 -53
- package/lib/lib/resolveDefaultsAtRules.js +0 -143
- package/lib/lib/setupContextUtils.js +0 -859
- package/lib/lib/setupTrackingContext.js +0 -171
- package/lib/lib/sharedState.js +0 -52
- package/lib/lib/substituteScreenAtRules.js +0 -27
- package/lib/postcss-plugins/nesting/README.md +0 -42
- package/lib/postcss-plugins/nesting/index.js +0 -17
- package/lib/postcss-plugins/nesting/plugin.js +0 -85
- package/lib/processTailwindFeatures.js +0 -59
- package/lib/public/colors.js +0 -329
- package/lib/public/create-plugin.js +0 -13
- package/lib/public/default-config.js +0 -14
- package/lib/public/default-theme.js +0 -14
- package/lib/public/resolve-config.js +0 -19
- package/lib/util/bigSign.js +0 -8
- package/lib/util/buildMediaQuery.js +0 -20
- package/lib/util/cloneDeep.js +0 -19
- package/lib/util/cloneNodes.js +0 -25
- package/lib/util/color.js +0 -99
- package/lib/util/configurePlugins.js +0 -18
- package/lib/util/createPlugin.js +0 -29
- package/lib/util/createUtilityPlugin.js +0 -49
- package/lib/util/dataTypes.js +0 -233
- package/lib/util/defaults.js +0 -22
- package/lib/util/escapeClassName.js +0 -19
- package/lib/util/escapeCommas.js +0 -8
- package/lib/util/flattenColorPalette.js +0 -17
- package/lib/util/formatVariantSelector.js +0 -186
- package/lib/util/getAllConfigs.js +0 -29
- package/lib/util/hashConfig.js +0 -16
- package/lib/util/isKeyframeRule.js +0 -8
- package/lib/util/isPlainObject.js +0 -12
- package/lib/util/isValidArbitraryValue.js +0 -64
- package/lib/util/log.js +0 -51
- package/lib/util/nameClass.js +0 -32
- package/lib/util/negateValue.js +0 -19
- package/lib/util/normalizeConfig.js +0 -240
- package/lib/util/normalizeScreens.js +0 -59
- package/lib/util/parseAnimationValue.js +0 -89
- package/lib/util/parseBoxShadowValue.js +0 -117
- package/lib/util/parseDependency.js +0 -63
- package/lib/util/parseObjectStyles.js +0 -31
- package/lib/util/pluginUtils.js +0 -179
- package/lib/util/prefixSelector.js +0 -20
- package/lib/util/resolveConfig.js +0 -255
- package/lib/util/resolveConfigPath.js +0 -51
- package/lib/util/responsive.js +0 -19
- package/lib/util/tap.js +0 -9
- package/lib/util/toColorValue.js +0 -8
- package/lib/util/toPath.js +0 -14
- package/lib/util/transformThemeValue.js +0 -59
- package/lib/util/withAlphaVariable.js +0 -67
- package/nesting/index.js +0 -2
- package/peers/index.js +0 -75077
- package/plugin.js +0 -2
- package/prettier.config.js +0 -19
- package/resolveConfig.js +0 -2
- package/screens.css +0 -1
- package/scripts/create-plugin-list.js +0 -10
- package/scripts/install-integrations.js +0 -27
- package/scripts/rebuildFixtures.js +0 -68
- package/src/cli-peer-dependencies.js +0 -9
- package/src/cli.js +0 -815
- package/src/constants.js +0 -17
- package/src/corePluginList.js +0 -1
- package/src/corePlugins.js +0 -2365
- package/src/css/LICENSE +0 -25
- package/src/css/preflight.css +0 -367
- package/src/featureFlags.js +0 -54
- package/src/index.js +0 -42
- package/src/lib/cacheInvalidation.js +0 -52
- package/src/lib/collapseAdjacentRules.js +0 -54
- package/src/lib/collapseDuplicateDeclarations.js +0 -93
- package/src/lib/defaultExtractor.js +0 -50
- package/src/lib/detectNesting.js +0 -39
- package/src/lib/evaluateTailwindFunctions.js +0 -198
- package/src/lib/expandApplyAtRules.js +0 -480
- package/src/lib/expandTailwindAtRules.js +0 -292
- package/src/lib/generateRules.js +0 -623
- package/src/lib/getModuleDependencies.js +0 -39
- package/src/lib/normalizeTailwindDirectives.js +0 -84
- package/src/lib/partitionApplyAtRules.js +0 -52
- package/src/lib/resolveDefaultsAtRules.js +0 -146
- package/src/lib/setupContextUtils.js +0 -883
- package/src/lib/setupTrackingContext.js +0 -183
- package/src/lib/sharedState.js +0 -48
- package/src/lib/substituteScreenAtRules.js +0 -19
- package/src/postcss-plugins/nesting/README.md +0 -42
- package/src/postcss-plugins/nesting/index.js +0 -13
- package/src/postcss-plugins/nesting/plugin.js +0 -80
- package/src/processTailwindFeatures.js +0 -58
- package/src/public/colors.js +0 -300
- package/src/public/create-plugin.js +0 -2
- package/src/public/default-config.js +0 -4
- package/src/public/default-theme.js +0 -4
- package/src/public/resolve-config.js +0 -7
- package/src/util/bigSign.js +0 -3
- package/src/util/buildMediaQuery.js +0 -20
- package/src/util/cloneDeep.js +0 -11
- package/src/util/cloneNodes.js +0 -24
- package/src/util/color.js +0 -69
- package/src/util/configurePlugins.js +0 -23
- package/src/util/createPlugin.js +0 -27
- package/src/util/createUtilityPlugin.js +0 -37
- package/src/util/dataTypes.js +0 -248
- package/src/util/defaults.js +0 -17
- package/src/util/escapeClassName.js +0 -8
- package/src/util/escapeCommas.js +0 -3
- package/src/util/flattenColorPalette.js +0 -13
- package/src/util/formatVariantSelector.js +0 -196
- package/src/util/getAllConfigs.js +0 -19
- package/src/util/hashConfig.js +0 -5
- package/src/util/isKeyframeRule.js +0 -3
- package/src/util/isPlainObject.js +0 -8
- package/src/util/isValidArbitraryValue.js +0 -61
- package/src/util/log.js +0 -29
- package/src/util/nameClass.js +0 -26
- package/src/util/negateValue.js +0 -16
- package/src/util/normalizeConfig.js +0 -270
- package/src/util/normalizeScreens.js +0 -45
- package/src/util/parseAnimationValue.js +0 -68
- package/src/util/parseBoxShadowValue.js +0 -119
- package/src/util/parseDependency.js +0 -49
- package/src/util/parseObjectStyles.js +0 -19
- package/src/util/pluginUtils.js +0 -192
- package/src/util/prefixSelector.js +0 -14
- package/src/util/resolveConfig.js +0 -269
- package/src/util/resolveConfigPath.js +0 -55
- package/src/util/responsive.js +0 -10
- package/src/util/tap.js +0 -4
- package/src/util/toColorValue.js +0 -3
- package/src/util/toPath.js +0 -26
- package/src/util/transformThemeValue.js +0 -52
- package/src/util/withAlphaVariable.js +0 -49
- package/stubs/defaultConfig.stub.js +0 -950
- package/stubs/defaultPostCssConfig.stub.js +0 -6
- package/stubs/simpleConfig.stub.js +0 -7
- package/tailwind.css +0 -5
- 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
|
-
}
|