tailwindcss 0.0.0-insiders.d3e754a → 0.0.0-insiders.d3f2221
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 +13 -9
- package/colors.d.ts +3 -0
- package/defaultConfig.d.ts +3 -0
- package/defaultTheme.d.ts +4 -0
- package/index.css +5 -0
- package/lib/cli/build/index.js +57 -0
- package/lib/cli/build/plugin.js +431 -0
- package/lib/cli/build/utils.js +88 -0
- package/lib/cli/build/watching.js +182 -0
- package/lib/cli/help/index.js +73 -0
- package/lib/cli/index.js +231 -0
- package/lib/cli/init/index.js +63 -0
- package/lib/cli.js +1 -739
- package/lib/corePluginList.js +13 -3
- package/lib/corePlugins.js +1094 -478
- package/lib/css/preflight.css +17 -4
- package/lib/featureFlags.js +49 -23
- package/lib/index.js +1 -29
- package/lib/lib/cacheInvalidation.js +92 -0
- package/lib/lib/collapseAdjacentRules.js +12 -5
- package/lib/lib/collapseDuplicateDeclarations.js +12 -7
- package/lib/lib/content.js +207 -0
- package/lib/lib/defaultExtractor.js +217 -33
- package/lib/lib/detectNesting.js +15 -4
- package/lib/lib/evaluateTailwindFunctions.js +104 -37
- package/lib/lib/expandApplyAtRules.js +312 -211
- package/lib/lib/expandTailwindAtRules.js +149 -96
- package/lib/lib/findAtConfigPath.js +46 -0
- package/lib/lib/generateRules.js +437 -188
- package/lib/lib/getModuleDependencies.js +88 -37
- package/lib/lib/handleImportAtRules.js +50 -0
- package/lib/lib/load-config.js +42 -0
- package/lib/lib/normalizeTailwindDirectives.js +9 -19
- package/lib/lib/offsets.js +306 -0
- package/lib/lib/partitionApplyAtRules.js +11 -6
- package/lib/lib/regex.js +74 -0
- package/lib/lib/remap-bitfield.js +89 -0
- package/lib/lib/resolveDefaultsAtRules.js +80 -58
- package/lib/lib/setupContextUtils.js +683 -270
- package/lib/lib/setupTrackingContext.js +63 -67
- package/lib/lib/sharedState.js +39 -10
- package/lib/lib/substituteScreenAtRules.js +13 -9
- package/lib/plugin.js +164 -0
- package/lib/postcss-plugins/nesting/README.md +2 -2
- package/lib/postcss-plugins/nesting/index.js +10 -6
- package/lib/postcss-plugins/nesting/plugin.js +15 -11
- package/lib/processTailwindFeatures.js +33 -28
- package/lib/public/colors.js +55 -29
- package/lib/public/create-plugin.js +9 -5
- package/lib/public/default-config.js +10 -6
- package/lib/public/default-theme.js +10 -6
- package/lib/public/load-config.js +12 -0
- package/lib/public/resolve-config.js +11 -6
- package/lib/util/applyImportantSelector.js +36 -0
- package/lib/util/bigSign.js +6 -1
- package/lib/util/buildMediaQuery.js +12 -5
- package/lib/util/cloneDeep.js +8 -5
- package/lib/util/cloneNodes.js +11 -2
- package/lib/util/color.js +59 -42
- package/lib/util/colorNames.js +752 -0
- package/lib/util/configurePlugins.js +7 -2
- package/lib/util/createPlugin.js +8 -5
- package/lib/util/createUtilityPlugin.js +15 -11
- package/lib/util/dataTypes.js +172 -47
- package/lib/util/defaults.js +12 -7
- package/lib/util/escapeClassName.js +13 -8
- package/lib/util/escapeCommas.js +6 -1
- package/lib/util/flattenColorPalette.js +9 -8
- package/lib/util/formatVariantSelector.js +230 -151
- package/lib/util/getAllConfigs.js +34 -12
- package/lib/util/hashConfig.js +9 -4
- package/lib/util/isKeyframeRule.js +6 -1
- package/lib/util/isPlainObject.js +6 -1
- package/lib/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +15 -5
- package/lib/util/log.js +36 -9
- package/lib/util/nameClass.js +24 -7
- package/lib/util/negateValue.js +23 -6
- package/lib/util/normalizeConfig.js +142 -69
- package/lib/util/normalizeScreens.js +124 -5
- package/lib/util/parseAnimationValue.js +8 -4
- package/lib/util/parseBoxShadowValue.js +16 -45
- package/lib/util/parseDependency.js +38 -54
- package/lib/util/parseGlob.js +36 -0
- package/lib/util/parseObjectStyles.js +14 -9
- package/lib/util/pluginUtils.js +146 -51
- package/lib/util/prefixSelector.js +29 -10
- package/lib/util/pseudoElements.js +209 -0
- package/lib/util/removeAlphaVariables.js +31 -0
- package/lib/util/resolveConfig.js +100 -73
- package/lib/util/resolveConfigPath.js +27 -8
- package/lib/util/responsive.js +10 -5
- package/lib/util/splitAtTopLevelOnly.js +51 -0
- package/lib/util/tap.js +6 -1
- package/lib/util/toColorValue.js +6 -1
- package/lib/util/toPath.js +20 -2
- package/lib/util/transformThemeValue.js +21 -7
- package/lib/util/validateConfig.js +48 -0
- package/lib/util/validateFormalSyntax.js +26 -0
- package/lib/util/withAlphaVariable.js +24 -12
- package/lib/value-parser/LICENSE +22 -0
- package/lib/value-parser/README.md +3 -0
- package/lib/value-parser/index.d.js +2 -0
- package/lib/value-parser/index.js +22 -0
- package/lib/value-parser/parse.js +259 -0
- package/lib/value-parser/stringify.js +38 -0
- package/lib/value-parser/unit.js +86 -0
- package/lib/value-parser/walk.js +16 -0
- package/loadConfig.d.ts +4 -0
- package/loadConfig.js +2 -0
- package/package.json +58 -53
- package/plugin.d.ts +11 -0
- package/resolveConfig.d.ts +12 -0
- package/scripts/generate-types.js +105 -0
- package/scripts/release-channel.js +18 -0
- package/scripts/release-notes.js +21 -0
- package/scripts/type-utils.js +27 -0
- package/src/cli/build/index.js +53 -0
- package/src/cli/build/plugin.js +469 -0
- package/src/cli/build/utils.js +76 -0
- package/src/cli/build/watching.js +229 -0
- package/src/cli/help/index.js +70 -0
- package/src/cli/index.js +217 -0
- package/src/cli/init/index.js +79 -0
- package/src/cli.js +1 -813
- package/src/corePluginList.js +1 -1
- package/src/corePlugins.js +636 -117
- package/src/css/preflight.css +17 -4
- package/src/featureFlags.js +13 -3
- package/src/index.js +1 -28
- package/src/lib/cacheInvalidation.js +52 -0
- package/src/lib/collapseAdjacentRules.js +5 -1
- package/src/lib/content.js +240 -0
- package/src/lib/defaultExtractor.js +192 -35
- package/src/lib/detectNesting.js +9 -1
- package/src/lib/evaluateTailwindFunctions.js +82 -8
- package/src/lib/expandApplyAtRules.js +322 -189
- package/src/lib/expandTailwindAtRules.js +87 -60
- package/src/lib/findAtConfigPath.js +48 -0
- package/src/lib/generateRules.js +428 -128
- package/src/lib/getModuleDependencies.js +70 -30
- package/src/lib/handleImportAtRules.js +34 -0
- package/src/lib/load-config.ts +31 -0
- package/src/lib/normalizeTailwindDirectives.js +0 -27
- package/src/lib/offsets.js +373 -0
- package/src/lib/regex.js +74 -0
- package/src/lib/remap-bitfield.js +82 -0
- package/src/lib/resolveDefaultsAtRules.js +53 -36
- package/src/lib/setupContextUtils.js +608 -157
- package/src/lib/setupTrackingContext.js +44 -58
- package/src/lib/sharedState.js +14 -4
- package/src/plugin.js +133 -0
- package/src/postcss-plugins/nesting/README.md +2 -2
- package/src/processTailwindFeatures.js +3 -2
- package/src/public/colors.js +22 -0
- package/src/public/default-config.js +1 -1
- package/src/public/default-theme.js +2 -2
- package/src/public/load-config.js +2 -0
- package/src/util/applyImportantSelector.js +27 -0
- package/src/util/buildMediaQuery.js +5 -3
- package/src/util/cloneNodes.js +5 -1
- package/src/util/color.js +39 -20
- package/src/util/colorNames.js +150 -0
- package/src/util/dataTypes.js +115 -23
- package/src/util/formatVariantSelector.js +265 -144
- package/src/util/getAllConfigs.js +21 -2
- package/src/util/{isValidArbitraryValue.js → isSyntacticallyValidPropertyValue.js} +1 -1
- package/src/util/log.js +25 -1
- package/src/util/nameClass.js +4 -0
- package/src/util/negateValue.js +11 -3
- package/src/util/normalizeConfig.js +78 -20
- package/src/util/normalizeScreens.js +99 -4
- package/src/util/parseBoxShadowValue.js +3 -50
- package/src/util/parseDependency.js +37 -42
- package/src/util/parseGlob.js +24 -0
- package/src/util/pluginUtils.js +118 -23
- package/src/util/prefixSelector.js +29 -10
- package/src/util/pseudoElements.js +167 -0
- package/src/util/removeAlphaVariables.js +24 -0
- package/src/util/resolveConfig.js +70 -32
- package/src/util/resolveConfigPath.js +12 -1
- package/src/util/splitAtTopLevelOnly.js +52 -0
- package/src/util/toPath.js +1 -1
- package/src/util/transformThemeValue.js +13 -3
- package/src/util/validateConfig.js +36 -0
- package/src/util/validateFormalSyntax.js +34 -0
- package/src/util/withAlphaVariable.js +1 -1
- package/src/value-parser/LICENSE +22 -0
- package/src/value-parser/README.md +3 -0
- package/src/value-parser/index.d.ts +177 -0
- package/src/value-parser/index.js +28 -0
- package/src/value-parser/parse.js +303 -0
- package/src/value-parser/stringify.js +41 -0
- package/src/value-parser/unit.js +118 -0
- package/src/value-parser/walk.js +18 -0
- package/stubs/.gitignore +1 -0
- package/stubs/.prettierrc.json +6 -0
- package/stubs/{defaultConfig.stub.js → config.full.js} +224 -172
- package/stubs/{simpleConfig.stub.js → config.simple.js} +1 -1
- package/stubs/{defaultPostCssConfig.stub.js → postcss.config.cjs} +0 -1
- package/stubs/postcss.config.js +5 -0
- package/stubs/tailwind.config.cjs +2 -0
- package/stubs/tailwind.config.js +2 -0
- package/stubs/tailwind.config.ts +3 -0
- package/types/config.d.ts +369 -0
- package/types/generated/.gitkeep +0 -0
- package/types/generated/colors.d.ts +298 -0
- package/types/generated/corePluginList.d.ts +1 -0
- package/types/generated/default-theme.d.ts +378 -0
- package/types/index.d.ts +7 -0
- package/CHANGELOG.md +0 -2075
- package/lib/cli-peer-dependencies.js +0 -15
- package/lib/constants.js +0 -37
- package/peers/index.js +0 -75077
- package/scripts/install-integrations.js +0 -27
- package/scripts/rebuildFixtures.js +0 -68
- package/src/cli-peer-dependencies.js +0 -9
- package/src/constants.js +0 -17
package/src/util/color.js
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
|
-
import namedColors from '
|
|
1
|
+
import namedColors from './colorNames'
|
|
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 =
|
|
6
|
-
let SEP =
|
|
7
|
-
let ALPHA_SEP =
|
|
5
|
+
let VALUE = /(?:\d+|\d*\.\d+)%?/
|
|
6
|
+
let SEP = /(?:\s*,\s*|\s+)/
|
|
7
|
+
let ALPHA_SEP = /\s*[,/]\s*/
|
|
8
|
+
let CUSTOM_PROPERTY = /var\(--(?:[^ )]*?)(?:,(?:[^ )]*?|var\(--[^ )]*?\)))?\)/
|
|
9
|
+
|
|
8
10
|
let RGB = new RegExp(
|
|
9
|
-
`^rgba
|
|
11
|
+
`^(rgba?)\\(\\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*\\)$`
|
|
10
12
|
)
|
|
11
13
|
let HSL = new RegExp(
|
|
12
|
-
`^hsla
|
|
14
|
+
`^(hsla?)\\(\\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*\\)$`
|
|
13
15
|
)
|
|
14
16
|
|
|
15
|
-
|
|
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 } = {}) {
|
|
16
20
|
if (typeof value !== 'string') {
|
|
17
21
|
return null
|
|
18
22
|
}
|
|
@@ -40,30 +44,45 @@ export function parseColor(value) {
|
|
|
40
44
|
}
|
|
41
45
|
}
|
|
42
46
|
|
|
43
|
-
let
|
|
47
|
+
let match = value.match(RGB) ?? value.match(HSL)
|
|
44
48
|
|
|
45
|
-
if (
|
|
46
|
-
return
|
|
47
|
-
mode: 'rgb',
|
|
48
|
-
color: [rgbMatch[1], rgbMatch[2], rgbMatch[3]].map((v) => v.toString()),
|
|
49
|
-
alpha: rgbMatch[4]?.toString?.(),
|
|
50
|
-
}
|
|
49
|
+
if (match === null) {
|
|
50
|
+
return null
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
let
|
|
53
|
+
let color = [match[2], match[3], match[4]].filter(Boolean).map((v) => v.toString())
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
// rgba(var(--my-color), 0.1)
|
|
56
|
+
// hsla(var(--my-color), 0.1)
|
|
57
|
+
if (color.length === 2 && color[0].startsWith('var(')) {
|
|
56
58
|
return {
|
|
57
|
-
mode:
|
|
58
|
-
color: [
|
|
59
|
-
alpha:
|
|
59
|
+
mode: match[1],
|
|
60
|
+
color: [color[0]],
|
|
61
|
+
alpha: color[1],
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
64
|
|
|
63
|
-
|
|
65
|
+
if (!loose && color.length !== 3) {
|
|
66
|
+
return null
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (color.length < 3 && !color.some((part) => /^var\(.*?\)$/.test(part))) {
|
|
70
|
+
return null
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
mode: match[1],
|
|
75
|
+
color,
|
|
76
|
+
alpha: match[5]?.toString?.(),
|
|
77
|
+
}
|
|
64
78
|
}
|
|
65
79
|
|
|
66
80
|
export function formatColor({ mode, color, alpha }) {
|
|
67
81
|
let hasAlpha = alpha !== undefined
|
|
82
|
+
|
|
83
|
+
if (mode === 'rgba' || mode === 'hsla') {
|
|
84
|
+
return `${mode}(${color.join(', ')}${hasAlpha ? `, ${alpha}` : ''})`
|
|
85
|
+
}
|
|
86
|
+
|
|
68
87
|
return `${mode}(${color.join(' ')}${hasAlpha ? ` / ${alpha}` : ''})`
|
|
69
88
|
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
aliceblue: [240, 248, 255],
|
|
3
|
+
antiquewhite: [250, 235, 215],
|
|
4
|
+
aqua: [0, 255, 255],
|
|
5
|
+
aquamarine: [127, 255, 212],
|
|
6
|
+
azure: [240, 255, 255],
|
|
7
|
+
beige: [245, 245, 220],
|
|
8
|
+
bisque: [255, 228, 196],
|
|
9
|
+
black: [0, 0, 0],
|
|
10
|
+
blanchedalmond: [255, 235, 205],
|
|
11
|
+
blue: [0, 0, 255],
|
|
12
|
+
blueviolet: [138, 43, 226],
|
|
13
|
+
brown: [165, 42, 42],
|
|
14
|
+
burlywood: [222, 184, 135],
|
|
15
|
+
cadetblue: [95, 158, 160],
|
|
16
|
+
chartreuse: [127, 255, 0],
|
|
17
|
+
chocolate: [210, 105, 30],
|
|
18
|
+
coral: [255, 127, 80],
|
|
19
|
+
cornflowerblue: [100, 149, 237],
|
|
20
|
+
cornsilk: [255, 248, 220],
|
|
21
|
+
crimson: [220, 20, 60],
|
|
22
|
+
cyan: [0, 255, 255],
|
|
23
|
+
darkblue: [0, 0, 139],
|
|
24
|
+
darkcyan: [0, 139, 139],
|
|
25
|
+
darkgoldenrod: [184, 134, 11],
|
|
26
|
+
darkgray: [169, 169, 169],
|
|
27
|
+
darkgreen: [0, 100, 0],
|
|
28
|
+
darkgrey: [169, 169, 169],
|
|
29
|
+
darkkhaki: [189, 183, 107],
|
|
30
|
+
darkmagenta: [139, 0, 139],
|
|
31
|
+
darkolivegreen: [85, 107, 47],
|
|
32
|
+
darkorange: [255, 140, 0],
|
|
33
|
+
darkorchid: [153, 50, 204],
|
|
34
|
+
darkred: [139, 0, 0],
|
|
35
|
+
darksalmon: [233, 150, 122],
|
|
36
|
+
darkseagreen: [143, 188, 143],
|
|
37
|
+
darkslateblue: [72, 61, 139],
|
|
38
|
+
darkslategray: [47, 79, 79],
|
|
39
|
+
darkslategrey: [47, 79, 79],
|
|
40
|
+
darkturquoise: [0, 206, 209],
|
|
41
|
+
darkviolet: [148, 0, 211],
|
|
42
|
+
deeppink: [255, 20, 147],
|
|
43
|
+
deepskyblue: [0, 191, 255],
|
|
44
|
+
dimgray: [105, 105, 105],
|
|
45
|
+
dimgrey: [105, 105, 105],
|
|
46
|
+
dodgerblue: [30, 144, 255],
|
|
47
|
+
firebrick: [178, 34, 34],
|
|
48
|
+
floralwhite: [255, 250, 240],
|
|
49
|
+
forestgreen: [34, 139, 34],
|
|
50
|
+
fuchsia: [255, 0, 255],
|
|
51
|
+
gainsboro: [220, 220, 220],
|
|
52
|
+
ghostwhite: [248, 248, 255],
|
|
53
|
+
gold: [255, 215, 0],
|
|
54
|
+
goldenrod: [218, 165, 32],
|
|
55
|
+
gray: [128, 128, 128],
|
|
56
|
+
green: [0, 128, 0],
|
|
57
|
+
greenyellow: [173, 255, 47],
|
|
58
|
+
grey: [128, 128, 128],
|
|
59
|
+
honeydew: [240, 255, 240],
|
|
60
|
+
hotpink: [255, 105, 180],
|
|
61
|
+
indianred: [205, 92, 92],
|
|
62
|
+
indigo: [75, 0, 130],
|
|
63
|
+
ivory: [255, 255, 240],
|
|
64
|
+
khaki: [240, 230, 140],
|
|
65
|
+
lavender: [230, 230, 250],
|
|
66
|
+
lavenderblush: [255, 240, 245],
|
|
67
|
+
lawngreen: [124, 252, 0],
|
|
68
|
+
lemonchiffon: [255, 250, 205],
|
|
69
|
+
lightblue: [173, 216, 230],
|
|
70
|
+
lightcoral: [240, 128, 128],
|
|
71
|
+
lightcyan: [224, 255, 255],
|
|
72
|
+
lightgoldenrodyellow: [250, 250, 210],
|
|
73
|
+
lightgray: [211, 211, 211],
|
|
74
|
+
lightgreen: [144, 238, 144],
|
|
75
|
+
lightgrey: [211, 211, 211],
|
|
76
|
+
lightpink: [255, 182, 193],
|
|
77
|
+
lightsalmon: [255, 160, 122],
|
|
78
|
+
lightseagreen: [32, 178, 170],
|
|
79
|
+
lightskyblue: [135, 206, 250],
|
|
80
|
+
lightslategray: [119, 136, 153],
|
|
81
|
+
lightslategrey: [119, 136, 153],
|
|
82
|
+
lightsteelblue: [176, 196, 222],
|
|
83
|
+
lightyellow: [255, 255, 224],
|
|
84
|
+
lime: [0, 255, 0],
|
|
85
|
+
limegreen: [50, 205, 50],
|
|
86
|
+
linen: [250, 240, 230],
|
|
87
|
+
magenta: [255, 0, 255],
|
|
88
|
+
maroon: [128, 0, 0],
|
|
89
|
+
mediumaquamarine: [102, 205, 170],
|
|
90
|
+
mediumblue: [0, 0, 205],
|
|
91
|
+
mediumorchid: [186, 85, 211],
|
|
92
|
+
mediumpurple: [147, 112, 219],
|
|
93
|
+
mediumseagreen: [60, 179, 113],
|
|
94
|
+
mediumslateblue: [123, 104, 238],
|
|
95
|
+
mediumspringgreen: [0, 250, 154],
|
|
96
|
+
mediumturquoise: [72, 209, 204],
|
|
97
|
+
mediumvioletred: [199, 21, 133],
|
|
98
|
+
midnightblue: [25, 25, 112],
|
|
99
|
+
mintcream: [245, 255, 250],
|
|
100
|
+
mistyrose: [255, 228, 225],
|
|
101
|
+
moccasin: [255, 228, 181],
|
|
102
|
+
navajowhite: [255, 222, 173],
|
|
103
|
+
navy: [0, 0, 128],
|
|
104
|
+
oldlace: [253, 245, 230],
|
|
105
|
+
olive: [128, 128, 0],
|
|
106
|
+
olivedrab: [107, 142, 35],
|
|
107
|
+
orange: [255, 165, 0],
|
|
108
|
+
orangered: [255, 69, 0],
|
|
109
|
+
orchid: [218, 112, 214],
|
|
110
|
+
palegoldenrod: [238, 232, 170],
|
|
111
|
+
palegreen: [152, 251, 152],
|
|
112
|
+
paleturquoise: [175, 238, 238],
|
|
113
|
+
palevioletred: [219, 112, 147],
|
|
114
|
+
papayawhip: [255, 239, 213],
|
|
115
|
+
peachpuff: [255, 218, 185],
|
|
116
|
+
peru: [205, 133, 63],
|
|
117
|
+
pink: [255, 192, 203],
|
|
118
|
+
plum: [221, 160, 221],
|
|
119
|
+
powderblue: [176, 224, 230],
|
|
120
|
+
purple: [128, 0, 128],
|
|
121
|
+
rebeccapurple: [102, 51, 153],
|
|
122
|
+
red: [255, 0, 0],
|
|
123
|
+
rosybrown: [188, 143, 143],
|
|
124
|
+
royalblue: [65, 105, 225],
|
|
125
|
+
saddlebrown: [139, 69, 19],
|
|
126
|
+
salmon: [250, 128, 114],
|
|
127
|
+
sandybrown: [244, 164, 96],
|
|
128
|
+
seagreen: [46, 139, 87],
|
|
129
|
+
seashell: [255, 245, 238],
|
|
130
|
+
sienna: [160, 82, 45],
|
|
131
|
+
silver: [192, 192, 192],
|
|
132
|
+
skyblue: [135, 206, 235],
|
|
133
|
+
slateblue: [106, 90, 205],
|
|
134
|
+
slategray: [112, 128, 144],
|
|
135
|
+
slategrey: [112, 128, 144],
|
|
136
|
+
snow: [255, 250, 250],
|
|
137
|
+
springgreen: [0, 255, 127],
|
|
138
|
+
steelblue: [70, 130, 180],
|
|
139
|
+
tan: [210, 180, 140],
|
|
140
|
+
teal: [0, 128, 128],
|
|
141
|
+
thistle: [216, 191, 216],
|
|
142
|
+
tomato: [255, 99, 71],
|
|
143
|
+
turquoise: [64, 224, 208],
|
|
144
|
+
violet: [238, 130, 238],
|
|
145
|
+
wheat: [245, 222, 179],
|
|
146
|
+
white: [255, 255, 255],
|
|
147
|
+
whitesmoke: [245, 245, 245],
|
|
148
|
+
yellow: [255, 255, 0],
|
|
149
|
+
yellowgreen: [154, 205, 50],
|
|
150
|
+
}
|
package/src/util/dataTypes.js
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
import { parseColor } from './color'
|
|
2
2
|
import { parseBoxShadowValue } from './parseBoxShadowValue'
|
|
3
|
+
import { splitAtTopLevelOnly } from './splitAtTopLevelOnly'
|
|
3
4
|
|
|
4
5
|
let cssFunctions = ['min', 'max', 'clamp', 'calc']
|
|
5
6
|
|
|
6
7
|
// Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Types
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
function isCSSFunction(value) {
|
|
10
|
+
return cssFunctions.some((fn) => new RegExp(`^${fn}\\(.*\\)`).test(value))
|
|
11
|
+
}
|
|
10
12
|
|
|
11
13
|
// This is not a data type, but rather a function that can normalize the
|
|
12
14
|
// correct values.
|
|
13
15
|
export function normalize(value, isRoot = true) {
|
|
16
|
+
if (value.startsWith('--')) {
|
|
17
|
+
return `var(${value})`
|
|
18
|
+
}
|
|
19
|
+
|
|
14
20
|
// Keep raw strings if it starts with `url(`
|
|
15
21
|
if (value.includes('url(')) {
|
|
16
22
|
return value
|
|
@@ -40,12 +46,81 @@ export function normalize(value, isRoot = true) {
|
|
|
40
46
|
value = value.trim()
|
|
41
47
|
}
|
|
42
48
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return value
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
value = normalizeMathOperatorSpacing(value)
|
|
50
|
+
|
|
51
|
+
return value
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Add spaces around operators inside math functions
|
|
56
|
+
* like calc() that do not follow an operator or '('.
|
|
57
|
+
*
|
|
58
|
+
* @param {string} value
|
|
59
|
+
* @returns {string}
|
|
60
|
+
*/
|
|
61
|
+
function normalizeMathOperatorSpacing(value) {
|
|
62
|
+
let preventFormattingInFunctions = ['theme']
|
|
63
|
+
|
|
64
|
+
return value.replace(/(calc|min|max|clamp)\(.+\)/g, (match) => {
|
|
65
|
+
let result = ''
|
|
66
|
+
|
|
67
|
+
function lastChar() {
|
|
68
|
+
let char = result.trimEnd()
|
|
69
|
+
return char[char.length - 1]
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
for (let i = 0; i < match.length; i++) {
|
|
73
|
+
function peek(word) {
|
|
74
|
+
return word.split('').every((char, j) => match[i + j] === char)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function consumeUntil(chars) {
|
|
78
|
+
let minIndex = Infinity
|
|
79
|
+
for (let char of chars) {
|
|
80
|
+
let index = match.indexOf(char, i)
|
|
81
|
+
if (index !== -1 && index < minIndex) {
|
|
82
|
+
minIndex = index
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
let result = match.slice(i, minIndex)
|
|
87
|
+
i += result.length - 1
|
|
88
|
+
return result
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
let char = match[i]
|
|
92
|
+
|
|
93
|
+
// Handle `var(--variable)`
|
|
94
|
+
if (peek('var')) {
|
|
95
|
+
// When we consume until `)`, then we are dealing with this scenario:
|
|
96
|
+
// `var(--example)`
|
|
97
|
+
//
|
|
98
|
+
// When we consume until `,`, then we are dealing with this scenario:
|
|
99
|
+
// `var(--example, 1rem)`
|
|
100
|
+
//
|
|
101
|
+
// In this case we do want to "format", the default value as well
|
|
102
|
+
result += consumeUntil([')', ','])
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Skip formatting inside known functions
|
|
106
|
+
else if (preventFormattingInFunctions.some((fn) => peek(fn))) {
|
|
107
|
+
result += consumeUntil([')'])
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Handle operators
|
|
111
|
+
else if (
|
|
112
|
+
['+', '-', '*', '/'].includes(char) &&
|
|
113
|
+
!['(', '+', '-', '*', '/'].includes(lastChar())
|
|
114
|
+
) {
|
|
115
|
+
result += ` ${char} `
|
|
116
|
+
} else {
|
|
117
|
+
result += char
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Simplify multiple spaces
|
|
122
|
+
return result.replace(/\s+/g, ' ')
|
|
123
|
+
})
|
|
49
124
|
}
|
|
50
125
|
|
|
51
126
|
export function url(value) {
|
|
@@ -53,13 +128,16 @@ export function url(value) {
|
|
|
53
128
|
}
|
|
54
129
|
|
|
55
130
|
export function number(value) {
|
|
56
|
-
return !isNaN(Number(value)) ||
|
|
131
|
+
return !isNaN(Number(value)) || isCSSFunction(value)
|
|
57
132
|
}
|
|
58
133
|
|
|
59
134
|
export function percentage(value) {
|
|
60
|
-
return
|
|
135
|
+
return (value.endsWith('%') && number(value.slice(0, -1))) || isCSSFunction(value)
|
|
61
136
|
}
|
|
62
137
|
|
|
138
|
+
// Please refer to MDN when updating this list:
|
|
139
|
+
// https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units
|
|
140
|
+
// https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Container_Queries#container_query_length_units
|
|
63
141
|
let lengthUnits = [
|
|
64
142
|
'cm',
|
|
65
143
|
'mm',
|
|
@@ -73,20 +151,33 @@ let lengthUnits = [
|
|
|
73
151
|
'ch',
|
|
74
152
|
'rem',
|
|
75
153
|
'lh',
|
|
154
|
+
'rlh',
|
|
76
155
|
'vw',
|
|
77
156
|
'vh',
|
|
78
157
|
'vmin',
|
|
79
158
|
'vmax',
|
|
159
|
+
'vb',
|
|
160
|
+
'vi',
|
|
161
|
+
'svw',
|
|
162
|
+
'svh',
|
|
163
|
+
'lvw',
|
|
164
|
+
'lvh',
|
|
165
|
+
'dvw',
|
|
166
|
+
'dvh',
|
|
167
|
+
'cqw',
|
|
168
|
+
'cqh',
|
|
169
|
+
'cqi',
|
|
170
|
+
'cqb',
|
|
171
|
+
'cqmin',
|
|
172
|
+
'cqmax',
|
|
80
173
|
]
|
|
81
174
|
let lengthUnitsPattern = `(?:${lengthUnits.join('|')})`
|
|
82
175
|
export function length(value) {
|
|
83
|
-
return
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
)
|
|
89
|
-
})
|
|
176
|
+
return (
|
|
177
|
+
value === '0' ||
|
|
178
|
+
new RegExp(`^[+-]?[0-9]*\.?[0-9]+(?:[eE][+-]?[0-9]+)?${lengthUnitsPattern}$`).test(value) ||
|
|
179
|
+
isCSSFunction(value)
|
|
180
|
+
)
|
|
90
181
|
}
|
|
91
182
|
|
|
92
183
|
let lineWidths = new Set(['thin', 'medium', 'thick'])
|
|
@@ -109,11 +200,11 @@ export function shadow(value) {
|
|
|
109
200
|
export function color(value) {
|
|
110
201
|
let colors = 0
|
|
111
202
|
|
|
112
|
-
let result = value
|
|
203
|
+
let result = splitAtTopLevelOnly(value, '_').every((part) => {
|
|
113
204
|
part = normalize(part)
|
|
114
205
|
|
|
115
206
|
if (part.startsWith('var(')) return true
|
|
116
|
-
if (parseColor(part) !== null) return colors++, true
|
|
207
|
+
if (parseColor(part, { loose: true }) !== null) return colors++, true
|
|
117
208
|
|
|
118
209
|
return false
|
|
119
210
|
})
|
|
@@ -124,7 +215,7 @@ export function color(value) {
|
|
|
124
215
|
|
|
125
216
|
export function image(value) {
|
|
126
217
|
let images = 0
|
|
127
|
-
let result = value
|
|
218
|
+
let result = splitAtTopLevelOnly(value, ',').every((part) => {
|
|
128
219
|
part = normalize(part)
|
|
129
220
|
|
|
130
221
|
if (part.startsWith('var(')) return true
|
|
@@ -145,11 +236,12 @@ export function image(value) {
|
|
|
145
236
|
}
|
|
146
237
|
|
|
147
238
|
let gradientTypes = new Set([
|
|
239
|
+
'conic-gradient',
|
|
148
240
|
'linear-gradient',
|
|
149
241
|
'radial-gradient',
|
|
242
|
+
'repeating-conic-gradient',
|
|
150
243
|
'repeating-linear-gradient',
|
|
151
244
|
'repeating-radial-gradient',
|
|
152
|
-
'conic-gradient',
|
|
153
245
|
])
|
|
154
246
|
export function gradient(value) {
|
|
155
247
|
value = normalize(value)
|
|
@@ -165,7 +257,7 @@ export function gradient(value) {
|
|
|
165
257
|
let validPositions = new Set(['center', 'top', 'right', 'bottom', 'left'])
|
|
166
258
|
export function position(value) {
|
|
167
259
|
let positions = 0
|
|
168
|
-
let result = value
|
|
260
|
+
let result = splitAtTopLevelOnly(value, '_').every((part) => {
|
|
169
261
|
part = normalize(part)
|
|
170
262
|
|
|
171
263
|
if (part.startsWith('var(')) return true
|
|
@@ -183,7 +275,7 @@ export function position(value) {
|
|
|
183
275
|
|
|
184
276
|
export function familyName(value) {
|
|
185
277
|
let fonts = 0
|
|
186
|
-
let result = value
|
|
278
|
+
let result = splitAtTopLevelOnly(value, ',').every((part) => {
|
|
187
279
|
part = normalize(part)
|
|
188
280
|
|
|
189
281
|
if (part.startsWith('var(')) return true
|