tailwindcss 0.0.0-insiders.ff2c25f → 0.0.0-internal.b2586d4e

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 (248) hide show
  1. package/README.md +5 -6
  2. package/dist/lib.d.mts +339 -0
  3. package/dist/lib.d.ts +339 -0
  4. package/dist/lib.js +17 -0
  5. package/dist/lib.mjs +17 -0
  6. package/index.css +5 -0
  7. package/package.json +36 -107
  8. package/preflight.css +334 -0
  9. package/theme.css +463 -0
  10. package/base.css +0 -1
  11. package/colors.d.ts +0 -3
  12. package/colors.js +0 -2
  13. package/components.css +0 -1
  14. package/defaultConfig.d.ts +0 -3
  15. package/defaultConfig.js +0 -2
  16. package/defaultTheme.d.ts +0 -4
  17. package/defaultTheme.js +0 -2
  18. package/lib/cli/build/deps.js +0 -54
  19. package/lib/cli/build/index.js +0 -48
  20. package/lib/cli/build/plugin.js +0 -367
  21. package/lib/cli/build/utils.js +0 -78
  22. package/lib/cli/build/watching.js +0 -178
  23. package/lib/cli/help/index.js +0 -71
  24. package/lib/cli/index.js +0 -239
  25. package/lib/cli/init/index.js +0 -46
  26. package/lib/cli-peer-dependencies.js +0 -28
  27. package/lib/cli.js +0 -7
  28. package/lib/constants.js +0 -44
  29. package/lib/corePluginList.js +0 -181
  30. package/lib/corePlugins.js +0 -4062
  31. package/lib/css/LICENSE +0 -25
  32. package/lib/css/preflight.css +0 -367
  33. package/lib/featureFlags.js +0 -71
  34. package/lib/index.js +0 -6
  35. package/lib/lib/cacheInvalidation.js +0 -90
  36. package/lib/lib/collapseAdjacentRules.js +0 -59
  37. package/lib/lib/collapseDuplicateDeclarations.js +0 -83
  38. package/lib/lib/content.js +0 -177
  39. package/lib/lib/defaultExtractor.js +0 -241
  40. package/lib/lib/detectNesting.js +0 -43
  41. package/lib/lib/evaluateTailwindFunctions.js +0 -234
  42. package/lib/lib/expandApplyAtRules.js +0 -526
  43. package/lib/lib/expandTailwindAtRules.js +0 -273
  44. package/lib/lib/findAtConfigPath.js +0 -44
  45. package/lib/lib/generateRules.js +0 -866
  46. package/lib/lib/getModuleDependencies.js +0 -51
  47. package/lib/lib/normalizeTailwindDirectives.js +0 -87
  48. package/lib/lib/offsets.js +0 -299
  49. package/lib/lib/partitionApplyAtRules.js +0 -56
  50. package/lib/lib/regex.js +0 -60
  51. package/lib/lib/remap-bitfield.js +0 -87
  52. package/lib/lib/resolveDefaultsAtRules.js +0 -161
  53. package/lib/lib/setupContextUtils.js +0 -1218
  54. package/lib/lib/setupTrackingContext.js +0 -163
  55. package/lib/lib/sharedState.js +0 -78
  56. package/lib/lib/substituteScreenAtRules.js +0 -29
  57. package/lib/oxide/cli/build/deps.js +0 -81
  58. package/lib/oxide/cli/build/index.js +0 -47
  59. package/lib/oxide/cli/build/plugin.js +0 -364
  60. package/lib/oxide/cli/build/utils.js +0 -77
  61. package/lib/oxide/cli/build/watching.js +0 -177
  62. package/lib/oxide/cli/help/index.js +0 -70
  63. package/lib/oxide/cli/index.js +0 -220
  64. package/lib/oxide/cli/init/index.js +0 -35
  65. package/lib/oxide/cli.js +0 -5
  66. package/lib/oxide/postcss-plugin.js +0 -2
  67. package/lib/plugin.js +0 -48
  68. package/lib/postcss-plugins/nesting/README.md +0 -42
  69. package/lib/postcss-plugins/nesting/index.js +0 -19
  70. package/lib/postcss-plugins/nesting/plugin.js +0 -87
  71. package/lib/processTailwindFeatures.js +0 -62
  72. package/lib/public/colors.js +0 -331
  73. package/lib/public/create-plugin.js +0 -15
  74. package/lib/public/default-config.js +0 -16
  75. package/lib/public/default-theme.js +0 -16
  76. package/lib/public/resolve-config.js +0 -22
  77. package/lib/util/bigSign.js +0 -11
  78. package/lib/util/buildMediaQuery.js +0 -25
  79. package/lib/util/cloneDeep.js +0 -20
  80. package/lib/util/cloneNodes.js +0 -32
  81. package/lib/util/color.js +0 -98
  82. package/lib/util/configurePlugins.js +0 -21
  83. package/lib/util/createPlugin.js +0 -30
  84. package/lib/util/createUtilityPlugin.js +0 -51
  85. package/lib/util/dataTypes.js +0 -266
  86. package/lib/util/defaults.js +0 -25
  87. package/lib/util/escapeClassName.js +0 -22
  88. package/lib/util/escapeCommas.js +0 -11
  89. package/lib/util/flattenColorPalette.js +0 -16
  90. package/lib/util/formatVariantSelector.js +0 -351
  91. package/lib/util/getAllConfigs.js +0 -48
  92. package/lib/util/hashConfig.js +0 -19
  93. package/lib/util/isKeyframeRule.js +0 -11
  94. package/lib/util/isPlainObject.js +0 -15
  95. package/lib/util/isSyntacticallyValidPropertyValue.js +0 -72
  96. package/lib/util/log.js +0 -57
  97. package/lib/util/nameClass.js +0 -43
  98. package/lib/util/negateValue.js +0 -34
  99. package/lib/util/normalizeConfig.js +0 -281
  100. package/lib/util/normalizeScreens.js +0 -170
  101. package/lib/util/parseAnimationValue.js +0 -91
  102. package/lib/util/parseBoxShadowValue.js +0 -84
  103. package/lib/util/parseDependency.js +0 -45
  104. package/lib/util/parseGlob.js +0 -34
  105. package/lib/util/parseObjectStyles.js +0 -34
  106. package/lib/util/pluginUtils.js +0 -283
  107. package/lib/util/prefixSelector.js +0 -37
  108. package/lib/util/removeAlphaVariables.js +0 -29
  109. package/lib/util/resolveConfig.js +0 -254
  110. package/lib/util/resolveConfigPath.js +0 -54
  111. package/lib/util/responsive.js +0 -22
  112. package/lib/util/splitAtTopLevelOnly.js +0 -43
  113. package/lib/util/tap.js +0 -12
  114. package/lib/util/toColorValue.js +0 -11
  115. package/lib/util/toPath.js +0 -30
  116. package/lib/util/transformThemeValue.js +0 -71
  117. package/lib/util/validateConfig.js +0 -24
  118. package/lib/util/validateFormalSyntax.js +0 -24
  119. package/lib/util/withAlphaVariable.js +0 -75
  120. package/nesting/index.js +0 -2
  121. package/oxide-node-api-shim/index.js +0 -21
  122. package/oxide-node-api-shim/package.json +0 -5
  123. package/peers/index.js +0 -79461
  124. package/plugin.d.ts +0 -11
  125. package/plugin.js +0 -2
  126. package/prettier.config.js +0 -19
  127. package/resolveConfig.d.ts +0 -12
  128. package/resolveConfig.js +0 -2
  129. package/screens.css +0 -1
  130. package/scripts/create-plugin-list.js +0 -10
  131. package/scripts/generate-types.js +0 -105
  132. package/scripts/release-channel.js +0 -18
  133. package/scripts/release-notes.js +0 -21
  134. package/scripts/swap-engines.js +0 -40
  135. package/scripts/type-utils.js +0 -27
  136. package/src/cli/build/deps.js +0 -56
  137. package/src/cli/build/index.js +0 -49
  138. package/src/cli/build/plugin.js +0 -439
  139. package/src/cli/build/utils.js +0 -76
  140. package/src/cli/build/watching.js +0 -227
  141. package/src/cli/help/index.js +0 -70
  142. package/src/cli/index.js +0 -234
  143. package/src/cli/init/index.js +0 -50
  144. package/src/cli-peer-dependencies.js +0 -15
  145. package/src/cli.js +0 -7
  146. package/src/constants.js +0 -17
  147. package/src/corePluginList.js +0 -1
  148. package/src/corePlugins.js +0 -2744
  149. package/src/css/LICENSE +0 -25
  150. package/src/css/preflight.css +0 -367
  151. package/src/featureFlags.js +0 -64
  152. package/src/index.js +0 -5
  153. package/src/lib/cacheInvalidation.js +0 -52
  154. package/src/lib/collapseAdjacentRules.js +0 -58
  155. package/src/lib/collapseDuplicateDeclarations.js +0 -93
  156. package/src/lib/content.js +0 -208
  157. package/src/lib/defaultExtractor.js +0 -217
  158. package/src/lib/detectNesting.js +0 -47
  159. package/src/lib/evaluateTailwindFunctions.js +0 -269
  160. package/src/lib/expandApplyAtRules.js +0 -606
  161. package/src/lib/expandTailwindAtRules.js +0 -285
  162. package/src/lib/findAtConfigPath.js +0 -48
  163. package/src/lib/generateRules.js +0 -899
  164. package/src/lib/getModuleDependencies.js +0 -39
  165. package/src/lib/normalizeTailwindDirectives.js +0 -84
  166. package/src/lib/offsets.js +0 -367
  167. package/src/lib/partitionApplyAtRules.js +0 -52
  168. package/src/lib/regex.js +0 -74
  169. package/src/lib/remap-bitfield.js +0 -82
  170. package/src/lib/resolveDefaultsAtRules.js +0 -163
  171. package/src/lib/setupContextUtils.js +0 -1308
  172. package/src/lib/setupTrackingContext.js +0 -171
  173. package/src/lib/sharedState.js +0 -67
  174. package/src/lib/substituteScreenAtRules.js +0 -19
  175. package/src/oxide/cli/build/deps.ts +0 -91
  176. package/src/oxide/cli/build/index.ts +0 -47
  177. package/src/oxide/cli/build/plugin.ts +0 -436
  178. package/src/oxide/cli/build/utils.ts +0 -74
  179. package/src/oxide/cli/build/watching.ts +0 -225
  180. package/src/oxide/cli/help/index.ts +0 -69
  181. package/src/oxide/cli/index.ts +0 -212
  182. package/src/oxide/cli/init/index.ts +0 -32
  183. package/src/oxide/cli.ts +0 -1
  184. package/src/oxide/postcss-plugin.ts +0 -1
  185. package/src/plugin.js +0 -47
  186. package/src/postcss-plugins/nesting/README.md +0 -42
  187. package/src/postcss-plugins/nesting/index.js +0 -13
  188. package/src/postcss-plugins/nesting/plugin.js +0 -80
  189. package/src/processTailwindFeatures.js +0 -58
  190. package/src/public/colors.js +0 -300
  191. package/src/public/create-plugin.js +0 -2
  192. package/src/public/default-config.js +0 -4
  193. package/src/public/default-theme.js +0 -4
  194. package/src/public/resolve-config.js +0 -7
  195. package/src/util/bigSign.js +0 -3
  196. package/src/util/buildMediaQuery.js +0 -22
  197. package/src/util/cloneDeep.js +0 -11
  198. package/src/util/cloneNodes.js +0 -28
  199. package/src/util/color.js +0 -73
  200. package/src/util/configurePlugins.js +0 -23
  201. package/src/util/createPlugin.js +0 -27
  202. package/src/util/createUtilityPlugin.js +0 -37
  203. package/src/util/dataTypes.js +0 -281
  204. package/src/util/defaults.js +0 -17
  205. package/src/util/escapeClassName.js +0 -8
  206. package/src/util/escapeCommas.js +0 -3
  207. package/src/util/flattenColorPalette.js +0 -13
  208. package/src/util/formatVariantSelector.js +0 -412
  209. package/src/util/getAllConfigs.js +0 -38
  210. package/src/util/hashConfig.js +0 -5
  211. package/src/util/isKeyframeRule.js +0 -3
  212. package/src/util/isPlainObject.js +0 -8
  213. package/src/util/isSyntacticallyValidPropertyValue.js +0 -61
  214. package/src/util/log.js +0 -29
  215. package/src/util/nameClass.js +0 -30
  216. package/src/util/negateValue.js +0 -24
  217. package/src/util/normalizeConfig.js +0 -300
  218. package/src/util/normalizeScreens.js +0 -140
  219. package/src/util/parseAnimationValue.js +0 -68
  220. package/src/util/parseBoxShadowValue.js +0 -72
  221. package/src/util/parseDependency.js +0 -44
  222. package/src/util/parseGlob.js +0 -24
  223. package/src/util/parseObjectStyles.js +0 -19
  224. package/src/util/pluginUtils.js +0 -314
  225. package/src/util/prefixSelector.js +0 -32
  226. package/src/util/removeAlphaVariables.js +0 -24
  227. package/src/util/resolveConfig.js +0 -277
  228. package/src/util/resolveConfigPath.js +0 -55
  229. package/src/util/responsive.js +0 -10
  230. package/src/util/splitAtTopLevelOnly.js +0 -45
  231. package/src/util/tap.js +0 -4
  232. package/src/util/toColorValue.js +0 -3
  233. package/src/util/toPath.js +0 -26
  234. package/src/util/transformThemeValue.js +0 -62
  235. package/src/util/validateConfig.js +0 -13
  236. package/src/util/validateFormalSyntax.js +0 -34
  237. package/src/util/withAlphaVariable.js +0 -49
  238. package/stubs/defaultConfig.stub.js +0 -956
  239. package/stubs/defaultPostCssConfig.stub.js +0 -6
  240. package/stubs/simpleConfig.stub.js +0 -8
  241. package/tailwind.css +0 -5
  242. package/types/config.d.ts +0 -367
  243. package/types/generated/.gitkeep +0 -0
  244. package/types/generated/colors.d.ts +0 -276
  245. package/types/generated/corePluginList.d.ts +0 -1
  246. package/types/generated/default-theme.d.ts +0 -345
  247. package/types/index.d.ts +0 -7
  248. package/variants.css +0 -1
@@ -1,300 +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`, `relative`, `extract`, and `transform` can exist in `config.content`
60
- if (
61
- Object.keys(config.content).some(
62
- (key) => !['files', 'relative', 'extract', 'transform'].includes(key)
63
- )
64
- ) {
65
- return false
66
- }
67
-
68
- // `config.content.files` should exist of FilePaths or RawFiles
69
- if (Array.isArray(config.content.files)) {
70
- if (
71
- !config.content.files.every((path) => {
72
- // `path` can be a string
73
- if (typeof path === 'string') return true
74
-
75
- // `path` can be an object { raw: string, extension?: string }
76
- // `raw` must be a string
77
- if (typeof path?.raw !== 'string') return false
78
-
79
- // `extension` (if provided) should also be a string
80
- if (path?.extension && typeof path?.extension !== 'string') {
81
- return false
82
- }
83
-
84
- return true
85
- })
86
- ) {
87
- return false
88
- }
89
-
90
- // `config.content.extract` is optional, and can be a Function or a Record<String, Function>
91
- if (typeof config.content.extract === 'object') {
92
- for (let value of Object.values(config.content.extract)) {
93
- if (typeof value !== 'function') {
94
- return false
95
- }
96
- }
97
- } else if (
98
- !(config.content.extract === undefined || typeof config.content.extract === 'function')
99
- ) {
100
- return false
101
- }
102
-
103
- // `config.content.transform` is optional, and can be a Function or a Record<String, Function>
104
- if (typeof config.content.transform === 'object') {
105
- for (let value of Object.values(config.content.transform)) {
106
- if (typeof value !== 'function') {
107
- return false
108
- }
109
- }
110
- } else if (
111
- !(
112
- config.content.transform === undefined || typeof config.content.transform === 'function'
113
- )
114
- ) {
115
- return false
116
- }
117
-
118
- // `config.content.relative` is optional and can be a boolean
119
- if (
120
- typeof config.content.relative !== 'boolean' &&
121
- typeof config.content.relative !== 'undefined'
122
- ) {
123
- return false
124
- }
125
- }
126
-
127
- return true
128
- }
129
-
130
- return false
131
- })()
132
-
133
- if (!valid) {
134
- log.warn('purge-deprecation', [
135
- 'The `purge`/`content` options have changed in Tailwind CSS v3.0.',
136
- 'Update your configuration file to eliminate this warning.',
137
- 'https://tailwindcss.com/docs/upgrade-guide#configure-content-sources',
138
- ])
139
- }
140
-
141
- // Normalize the `safelist`
142
- config.safelist = (() => {
143
- let { content, purge, safelist } = config
144
-
145
- if (Array.isArray(safelist)) return safelist
146
- if (Array.isArray(content?.safelist)) return content.safelist
147
- if (Array.isArray(purge?.safelist)) return purge.safelist
148
- if (Array.isArray(purge?.options?.safelist)) return purge.options.safelist
149
-
150
- return []
151
- })()
152
-
153
- // Normalize the `blocklist`
154
- config.blocklist = (() => {
155
- let { blocklist } = config
156
-
157
- if (Array.isArray(blocklist)) {
158
- if (blocklist.every((item) => typeof item === 'string')) {
159
- return blocklist
160
- }
161
-
162
- log.warn('blocklist-invalid', [
163
- 'The `blocklist` option must be an array of strings.',
164
- 'https://tailwindcss.com/docs/content-configuration#discarding-classes',
165
- ])
166
- }
167
-
168
- return []
169
- })()
170
-
171
- // Normalize prefix option
172
- if (typeof config.prefix === 'function') {
173
- log.warn('prefix-function', [
174
- 'As of Tailwind CSS v3.0, `prefix` cannot be a function.',
175
- 'Update `prefix` in your configuration to be a string to eliminate this warning.',
176
- 'https://tailwindcss.com/docs/upgrade-guide#prefix-cannot-be-a-function',
177
- ])
178
- config.prefix = ''
179
- } else {
180
- config.prefix = config.prefix ?? ''
181
- }
182
-
183
- // Normalize the `content`
184
- config.content = {
185
- relative: (() => {
186
- let { content } = config
187
-
188
- if (content?.relative) {
189
- return content.relative
190
- }
191
-
192
- return config.future?.relativeContentPathsByDefault ?? false
193
- })(),
194
-
195
- files: (() => {
196
- let { content, purge } = config
197
-
198
- if (Array.isArray(purge)) return purge
199
- if (Array.isArray(purge?.content)) return purge.content
200
- if (Array.isArray(content)) return content
201
- if (Array.isArray(content?.content)) return content.content
202
- if (Array.isArray(content?.files)) return content.files
203
-
204
- return []
205
- })(),
206
-
207
- extract: (() => {
208
- let extract = (() => {
209
- if (config.purge?.extract) return config.purge.extract
210
- if (config.content?.extract) return config.content.extract
211
-
212
- if (config.purge?.extract?.DEFAULT) return config.purge.extract.DEFAULT
213
- if (config.content?.extract?.DEFAULT) return config.content.extract.DEFAULT
214
-
215
- if (config.purge?.options?.extractors) return config.purge.options.extractors
216
- if (config.content?.options?.extractors) return config.content.options.extractors
217
-
218
- return {}
219
- })()
220
-
221
- let extractors = {}
222
-
223
- let defaultExtractor = (() => {
224
- if (config.purge?.options?.defaultExtractor) {
225
- return config.purge.options.defaultExtractor
226
- }
227
-
228
- if (config.content?.options?.defaultExtractor) {
229
- return config.content.options.defaultExtractor
230
- }
231
-
232
- return undefined
233
- })()
234
-
235
- if (defaultExtractor !== undefined) {
236
- extractors.DEFAULT = defaultExtractor
237
- }
238
-
239
- // Functions
240
- if (typeof extract === 'function') {
241
- extractors.DEFAULT = extract
242
- }
243
-
244
- // Arrays
245
- else if (Array.isArray(extract)) {
246
- for (let { extensions, extractor } of extract ?? []) {
247
- for (let extension of extensions) {
248
- extractors[extension] = extractor
249
- }
250
- }
251
- }
252
-
253
- // Objects
254
- else if (typeof extract === 'object' && extract !== null) {
255
- Object.assign(extractors, extract)
256
- }
257
-
258
- return extractors
259
- })(),
260
-
261
- transform: (() => {
262
- let transform = (() => {
263
- if (config.purge?.transform) return config.purge.transform
264
- if (config.content?.transform) return config.content.transform
265
-
266
- if (config.purge?.transform?.DEFAULT) return config.purge.transform.DEFAULT
267
- if (config.content?.transform?.DEFAULT) return config.content.transform.DEFAULT
268
-
269
- return {}
270
- })()
271
-
272
- let transformers = {}
273
-
274
- if (typeof transform === 'function') {
275
- transformers.DEFAULT = transform
276
- }
277
-
278
- if (typeof transform === 'object' && transform !== null) {
279
- Object.assign(transformers, transform)
280
- }
281
-
282
- return transformers
283
- })(),
284
- }
285
-
286
- // Validate globs to prevent bogus globs.
287
- // E.g.: `./src/*.{html}` is invalid, the `{html}` should just be `html`
288
- for (let file of config.content.files) {
289
- if (typeof file === 'string' && /{([^,]*?)}/g.test(file)) {
290
- log.warn('invalid-glob-braces', [
291
- `The glob pattern ${dim(file)} in your Tailwind CSS configuration is invalid.`,
292
- `Update it to ${dim(file.replace(/{([^,]*?)}/g, '$1'))} to silence this warning.`,
293
- // TODO: Add https://tw.wtf/invalid-glob-braces
294
- ])
295
- break
296
- }
297
- }
298
-
299
- return config
300
- }
@@ -1,140 +0,0 @@
1
- /**
2
- * @typedef {object} ScreenValue
3
- * @property {number|undefined} min
4
- * @property {number|undefined} max
5
- * @property {string|undefined} raw
6
- */
7
-
8
- /**
9
- * @typedef {object} Screen
10
- * @property {string} name
11
- * @property {boolean} not
12
- * @property {ScreenValue[]} values
13
- */
14
-
15
- /**
16
- * A function that normalizes the various forms that the screens object can be
17
- * provided in.
18
- *
19
- * Input(s):
20
- * - ['100px', '200px'] // Raw strings
21
- * - { sm: '100px', md: '200px' } // Object with string values
22
- * - { sm: { min: '100px' }, md: { max: '100px' } } // Object with object values
23
- * - { sm: [{ min: '100px' }, { max: '200px' }] } // Object with object array (multiple values)
24
- *
25
- * Output(s):
26
- * - [{ name: 'sm', values: [{ min: '100px', max: '200px' }] }] // List of objects, that contains multiple values
27
- *
28
- * @returns {Screen[]}
29
- */
30
- export function normalizeScreens(screens, root = true) {
31
- if (Array.isArray(screens)) {
32
- return screens.map((screen) => {
33
- if (root && Array.isArray(screen)) {
34
- throw new Error('The tuple syntax is not supported for `screens`.')
35
- }
36
-
37
- if (typeof screen === 'string') {
38
- return { name: screen.toString(), not: false, values: [{ min: screen, max: undefined }] }
39
- }
40
-
41
- let [name, options] = screen
42
- name = name.toString()
43
-
44
- if (typeof options === 'string') {
45
- return { name, not: false, values: [{ min: options, max: undefined }] }
46
- }
47
-
48
- if (Array.isArray(options)) {
49
- return { name, not: false, values: options.map((option) => resolveValue(option)) }
50
- }
51
-
52
- return { name, not: false, values: [resolveValue(options)] }
53
- })
54
- }
55
-
56
- return normalizeScreens(Object.entries(screens ?? {}), false)
57
- }
58
-
59
- /**
60
- * @param {Screen} screen
61
- * @returns {{result: false, reason: string} | {result: true, reason: null}}
62
- */
63
- export function isScreenSortable(screen) {
64
- if (screen.values.length !== 1) {
65
- return { result: false, reason: 'multiple-values' }
66
- } else if (screen.values[0].raw !== undefined) {
67
- return { result: false, reason: 'raw-values' }
68
- } else if (screen.values[0].min !== undefined && screen.values[0].max !== undefined) {
69
- return { result: false, reason: 'min-and-max' }
70
- }
71
-
72
- return { result: true, reason: null }
73
- }
74
-
75
- /**
76
- * @param {'min' | 'max'} type
77
- * @param {Screen | 'string'} a
78
- * @param {Screen | 'string'} z
79
- * @returns {number}
80
- */
81
- export function compareScreens(type, a, z) {
82
- let aScreen = toScreen(a, type)
83
- let zScreen = toScreen(z, type)
84
-
85
- let aSorting = isScreenSortable(aScreen)
86
- let bSorting = isScreenSortable(zScreen)
87
-
88
- // These cases should never happen and indicate a bug in Tailwind CSS itself
89
- if (aSorting.reason === 'multiple-values' || bSorting.reason === 'multiple-values') {
90
- throw new Error(
91
- 'Attempted to sort a screen with multiple values. This should never happen. Please open a bug report.'
92
- )
93
- } else if (aSorting.reason === 'raw-values' || bSorting.reason === 'raw-values') {
94
- throw new Error(
95
- 'Attempted to sort a screen with raw values. This should never happen. Please open a bug report.'
96
- )
97
- } else if (aSorting.reason === 'min-and-max' || bSorting.reason === 'min-and-max') {
98
- throw new Error(
99
- 'Attempted to sort a screen with both min and max values. This should never happen. Please open a bug report.'
100
- )
101
- }
102
-
103
- // Let the sorting begin
104
- let { min: aMin, max: aMax } = aScreen.values[0]
105
- let { min: zMin, max: zMax } = zScreen.values[0]
106
-
107
- // Negating screens flip their behavior. Basically `not min-width` is `max-width`
108
- if (a.not) [aMin, aMax] = [aMax, aMin]
109
- if (z.not) [zMin, zMax] = [zMax, zMin]
110
-
111
- aMin = aMin === undefined ? aMin : parseFloat(aMin)
112
- aMax = aMax === undefined ? aMax : parseFloat(aMax)
113
- zMin = zMin === undefined ? zMin : parseFloat(zMin)
114
- zMax = zMax === undefined ? zMax : parseFloat(zMax)
115
-
116
- let [aValue, zValue] = type === 'min' ? [aMin, zMin] : [zMax, aMax]
117
-
118
- return aValue - zValue
119
- }
120
-
121
- /**
122
- *
123
- * @param {PartialScreen> | string} value
124
- * @param {'min' | 'max'} type
125
- * @returns {Screen}
126
- */
127
- export function toScreen(value, type) {
128
- if (typeof value === 'object') {
129
- return value
130
- }
131
-
132
- return {
133
- name: 'arbitrary-screen',
134
- values: [{ [type]: value }],
135
- }
136
- }
137
-
138
- function resolveValue({ 'min-width': _minWidth, min = _minWidth, max, raw } = {}) {
139
- return { min, max, raw }
140
- }
@@ -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,72 +0,0 @@
1
- import { splitAtTopLevelOnly } from './splitAtTopLevelOnly'
2
-
3
- let KEYWORDS = new Set(['inset', 'inherit', 'initial', 'revert', 'unset'])
4
- let SPACE = /\ +(?![^(]*\))/g // Similar to the one above, but with spaces instead.
5
- let LENGTH = /^-?(\d+|\.\d+)(.*?)$/g
6
-
7
- export function parseBoxShadowValue(input) {
8
- let shadows = splitAtTopLevelOnly(input, ',')
9
- return shadows.map((shadow) => {
10
- let value = shadow.trim()
11
- let result = { raw: value }
12
- let parts = value.split(SPACE)
13
- let seen = new Set()
14
-
15
- for (let part of parts) {
16
- // Reset index, since the regex is stateful.
17
- LENGTH.lastIndex = 0
18
-
19
- // Keyword
20
- if (!seen.has('KEYWORD') && KEYWORDS.has(part)) {
21
- result.keyword = part
22
- seen.add('KEYWORD')
23
- }
24
-
25
- // Length value
26
- else if (LENGTH.test(part)) {
27
- if (!seen.has('X')) {
28
- result.x = part
29
- seen.add('X')
30
- } else if (!seen.has('Y')) {
31
- result.y = part
32
- seen.add('Y')
33
- } else if (!seen.has('BLUR')) {
34
- result.blur = part
35
- seen.add('BLUR')
36
- } else if (!seen.has('SPREAD')) {
37
- result.spread = part
38
- seen.add('SPREAD')
39
- }
40
- }
41
-
42
- // Color or unknown
43
- else {
44
- if (!result.color) {
45
- result.color = part
46
- } else {
47
- if (!result.unknown) result.unknown = []
48
- result.unknown.push(part)
49
- }
50
- }
51
- }
52
-
53
- // Check if valid
54
- result.valid = result.x !== undefined && result.y !== undefined
55
-
56
- return result
57
- })
58
- }
59
-
60
- export function formatBoxShadowValue(shadows) {
61
- return shadows
62
- .map((shadow) => {
63
- if (!shadow.valid) {
64
- return shadow.raw
65
- }
66
-
67
- return [shadow.keyword, shadow.x, shadow.y, shadow.blur, shadow.spread, shadow.color]
68
- .filter(Boolean)
69
- .join(' ')
70
- })
71
- .join(', ')
72
- }
@@ -1,44 +0,0 @@
1
- // @ts-check
2
-
3
- /**
4
- * @typedef {{type: 'dependency', file: string} | {type: 'dir-dependency', dir: string, glob: string}} Dependency
5
- */
6
-
7
- /**
8
- *
9
- * @param {import('../lib/content.js').ContentPath} contentPath
10
- * @returns {Dependency[]}
11
- */
12
- export default function parseDependency(contentPath) {
13
- if (contentPath.ignore) {
14
- return []
15
- }
16
-
17
- if (!contentPath.glob) {
18
- return [
19
- {
20
- type: 'dependency',
21
- file: contentPath.base,
22
- },
23
- ]
24
- }
25
-
26
- if (process.env.ROLLUP_WATCH === 'true') {
27
- // rollup-plugin-postcss does not support dir-dependency messages
28
- // but directories can be watched in the same way as files
29
- return [
30
- {
31
- type: 'dependency',
32
- file: contentPath.base,
33
- },
34
- ]
35
- }
36
-
37
- return [
38
- {
39
- type: 'dir-dependency',
40
- dir: contentPath.base,
41
- glob: contentPath.glob,
42
- },
43
- ]
44
- }
@@ -1,24 +0,0 @@
1
- import globParent from 'glob-parent'
2
-
3
- // Based on `glob-base`
4
- // https://github.com/micromatch/glob-base/blob/master/index.js
5
- export function parseGlob(pattern) {
6
- let glob = pattern
7
- let base = globParent(pattern)
8
-
9
- if (base !== '.') {
10
- glob = pattern.substr(base.length)
11
- if (glob.charAt(0) === '/') {
12
- glob = glob.substr(1)
13
- }
14
- }
15
-
16
- if (glob.substr(0, 2) === './') {
17
- glob = glob.substr(2)
18
- }
19
- if (glob.charAt(0) === '/') {
20
- glob = glob.substr(1)
21
- }
22
-
23
- return { base, glob }
24
- }
@@ -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
- }