@lovrozagar/flare 0.8.0 → 0.9.1
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 +23 -0
- package/package.json +1 -1
- package/src/plugins/cn-theme.ts +36 -0
- package/src/plugins/sx-ast/index.ts +157 -14
- package/src/plugins/sx-ast/rewrite.ts +11 -2
- package/src/plugins/tw-compile.ts +152 -38
- package/src/styles/cn-vendor/NOTICE.md +9 -5
- package/src/styles/cn-vendor/compiler.ts +1160 -0
- package/src/styles/cn-vendor/config.ts +136 -0
- package/src/styles/cn-vendor/default-config.generated.ts +26 -0
- package/src/styles/cn-vendor/theme-css.ts +180 -0
- package/src/styles/cn-vendor/validators.ts +122 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MIT License
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2026 shadcn
|
|
5
|
+
*
|
|
6
|
+
* Vendored from https://github.com/shadcn-ui/cn
|
|
7
|
+
* tag cn@0.4.0
|
|
8
|
+
* commit 84db83298f69a229d6f1ffc5d8c8d99ef451fb49
|
|
9
|
+
* Source: packages/cn/src/config.ts
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
// Custom-config entry (`cn/config`, re-exported from `cn`): create a `cn`
|
|
13
|
+
// with a tailwind-merge–style config extension, compiled at first call
|
|
14
|
+
// (~3 ms once, then full engine speed). For zero-compile production setups,
|
|
15
|
+
// run the compiler at build time instead (`npx cn build`) and pair the
|
|
16
|
+
// emitted tables with `createCn` from `cn/engine`.
|
|
17
|
+
|
|
18
|
+
import {
|
|
19
|
+
compileToTables,
|
|
20
|
+
mergeConfigs,
|
|
21
|
+
type CnConfig,
|
|
22
|
+
type ClassGroupDef,
|
|
23
|
+
type ConfigExtension,
|
|
24
|
+
type CreateCnInput,
|
|
25
|
+
} from "./compiler.ts"
|
|
26
|
+
import { getDefaultCnConfig } from "./default-config.generated.ts"
|
|
27
|
+
import { createEngine, wrapClsx } from "./engine.ts"
|
|
28
|
+
import type { CnFunction, Engine } from "./types.ts"
|
|
29
|
+
|
|
30
|
+
export { getDefaultCnConfig as defaultConfig }
|
|
31
|
+
export { mergeConfigs }
|
|
32
|
+
export type { CnConfig, ClassGroupDef, ConfigExtension, CreateCnInput }
|
|
33
|
+
export type {
|
|
34
|
+
DefaultClassGroupIds,
|
|
35
|
+
DefaultThemeGroupIds,
|
|
36
|
+
} from "./default-config.generated.ts"
|
|
37
|
+
|
|
38
|
+
/** Reference a theme scale from a class-group definition. */
|
|
39
|
+
export const fromTheme = (key: string): { $t: string } => ({ $t: key })
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Marker-form validators for custom class groups (compiled to allocation-free
|
|
43
|
+
* span opcodes — prefer these over passing tailwind-merge's validator
|
|
44
|
+
* functions, which run as slower custom validators).
|
|
45
|
+
*/
|
|
46
|
+
export const validators = {
|
|
47
|
+
isAny: { $v: "isAny" },
|
|
48
|
+
isAnyNonArbitrary: { $v: "isAnyNonArbitrary" },
|
|
49
|
+
isArbitraryValue: { $v: "isArbitraryValue" },
|
|
50
|
+
isArbitraryVariable: { $v: "isArbitraryVariable" },
|
|
51
|
+
isFraction: { $v: "isFraction" },
|
|
52
|
+
isNumber: { $v: "isNumber" },
|
|
53
|
+
isInteger: { $v: "isInteger" },
|
|
54
|
+
isPercent: { $v: "isPercent" },
|
|
55
|
+
isTshirtSize: { $v: "isTshirtSize" },
|
|
56
|
+
isNamedContainerQuery: { $v: "isNamedContainerQuery" },
|
|
57
|
+
isArbitraryLength: { $v: "isArbitraryLength" },
|
|
58
|
+
isArbitraryNumber: { $v: "isArbitraryNumber" },
|
|
59
|
+
isArbitraryWeight: { $v: "isArbitraryWeight" },
|
|
60
|
+
isArbitraryFamilyName: { $v: "isArbitraryFamilyName" },
|
|
61
|
+
isArbitraryPosition: { $v: "isArbitraryPosition" },
|
|
62
|
+
isArbitrarySize: { $v: "isArbitrarySize" },
|
|
63
|
+
isArbitraryImage: { $v: "isArbitraryImage" },
|
|
64
|
+
isArbitraryShadow: { $v: "isArbitraryShadow" },
|
|
65
|
+
isArbitraryVariableLength: { $v: "isArbitraryVariableLength" },
|
|
66
|
+
isArbitraryVariableFamilyName: { $v: "isArbitraryVariableFamilyName" },
|
|
67
|
+
isArbitraryVariablePosition: { $v: "isArbitraryVariablePosition" },
|
|
68
|
+
isArbitraryVariableSize: { $v: "isArbitraryVariableSize" },
|
|
69
|
+
isArbitraryVariableImage: { $v: "isArbitraryVariableImage" },
|
|
70
|
+
isArbitraryVariableShadow: { $v: "isArbitraryVariableShadow" },
|
|
71
|
+
isArbitraryVariableWeight: { $v: "isArbitraryVariableWeight" },
|
|
72
|
+
} as const
|
|
73
|
+
|
|
74
|
+
const isFullConfig = (input: object): input is CnConfig =>
|
|
75
|
+
"classGroups" in input &&
|
|
76
|
+
"theme" in input &&
|
|
77
|
+
"conflictingClassGroups" in input
|
|
78
|
+
|
|
79
|
+
const resolveConfig = (
|
|
80
|
+
input?: CreateCnInput
|
|
81
|
+
): { config: CnConfig; cacheSize?: number } => {
|
|
82
|
+
if (input === undefined) return { config: getDefaultCnConfig() }
|
|
83
|
+
if (typeof input === "function")
|
|
84
|
+
return { config: input(getDefaultCnConfig()) }
|
|
85
|
+
if (isFullConfig(input)) return { config: input }
|
|
86
|
+
return {
|
|
87
|
+
config: mergeConfigs(getDefaultCnConfig(), input),
|
|
88
|
+
cacheSize: input.cacheSize,
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const buildEngine = (input?: CreateCnInput): Engine => {
|
|
93
|
+
const { config, cacheSize } = resolveConfig(input)
|
|
94
|
+
const { tables, validatorImpls, prefix } = compileToTables(config)
|
|
95
|
+
return createEngine(tables, validatorImpls, { cacheSize, prefix })
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Create a `cn` function for a custom config. Accepts a tailwind-merge–style
|
|
100
|
+
* `{ extend, override, prefix }` extension, a `(defaultConfig) => config`
|
|
101
|
+
* transform, or a complete config. Compilation is lazy: the first call pays
|
|
102
|
+
* ~3 ms once, every later call runs at full engine speed.
|
|
103
|
+
*
|
|
104
|
+
* ```ts
|
|
105
|
+
* const cn = createCn({
|
|
106
|
+
* extend: { classGroups: { "font-size": [{ text: ["hero", "tiny"] }] } },
|
|
107
|
+
* })
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export const createCn = (input?: CreateCnInput): CnFunction => {
|
|
111
|
+
let engine: Engine | null = null
|
|
112
|
+
const getEngine = (): Engine => engine ?? (engine = buildEngine(input))
|
|
113
|
+
return wrapClsx((s: string) => getEngine().mergeString(s), {
|
|
114
|
+
seenBefore: (s: string) => getEngine().seenBefore(s),
|
|
115
|
+
mergeUncached: (s: string) => getEngine().mergeUncached(s),
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* tailwind-merge–compatible variadic merge for a custom config — the
|
|
121
|
+
* `extendTailwindMerge` migration path.
|
|
122
|
+
*/
|
|
123
|
+
export const createTwMerge = (input?: CreateCnInput): Engine["merge"] => {
|
|
124
|
+
let engine: Engine | null = null
|
|
125
|
+
return function (): string {
|
|
126
|
+
if (engine === null) engine = buildEngine(input)
|
|
127
|
+
|
|
128
|
+
return engine.merge.apply(null, arguments as never)
|
|
129
|
+
} as Engine["merge"]
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Familiar-name alias for tailwind-merge migrations:
|
|
134
|
+
* `extendTailwindMerge(ext)` ≡ `createTwMerge(ext)`.
|
|
135
|
+
*/
|
|
136
|
+
export const extendTailwindMerge = createTwMerge
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MIT License
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2026 shadcn
|
|
5
|
+
*
|
|
6
|
+
* Vendored from https://github.com/shadcn-ui/cn
|
|
7
|
+
* tag cn@0.4.0
|
|
8
|
+
* commit 84db83298f69a229d6f1ffc5d8c8d99ef451fb49
|
|
9
|
+
* Source: packages/cn/src/default-config.generated.ts
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
// GENERATED by scripts/vendor-config.mjs from tailwind-merge's default config
|
|
13
|
+
// (MIT, Dany Castillo — see README.md). Do not edit.
|
|
14
|
+
import type { CnConfig } from './compiler.ts'
|
|
15
|
+
|
|
16
|
+
const J =
|
|
17
|
+
"{\"theme\":{\"animate\":[\"spin\",\"ping\",\"pulse\",\"bounce\"],\"aspect\":[\"video\"],\"blur\":[{\"$v\":\"isTshirtSize\"}],\"breakpoint\":[{\"$v\":\"isTshirtSize\"}],\"color\":[{\"$v\":\"isAny\"}],\"container\":[{\"$v\":\"isTshirtSize\"}],\"drop-shadow\":[{\"$v\":\"isTshirtSize\"}],\"ease\":[\"in\",\"out\",\"in-out\"],\"font\":[{\"$v\":\"isAnyNonArbitrary\"}],\"font-weight\":[\"thin\",\"extralight\",\"light\",\"normal\",\"medium\",\"semibold\",\"bold\",\"extrabold\",\"black\"],\"inset-shadow\":[{\"$v\":\"isTshirtSize\"}],\"leading\":[\"none\",\"tight\",\"snug\",\"normal\",\"relaxed\",\"loose\"],\"perspective\":[\"dramatic\",\"near\",\"normal\",\"midrange\",\"distant\",\"none\"],\"radius\":[{\"$v\":\"isTshirtSize\"}],\"shadow\":[{\"$v\":\"isTshirtSize\"}],\"spacing\":[\"px\",{\"$v\":\"isNumber\"}],\"text\":[{\"$v\":\"isTshirtSize\"}],\"text-shadow\":[{\"$v\":\"isTshirtSize\"}],\"tracking\":[\"tighter\",\"tight\",\"normal\",\"wide\",\"wider\",\"widest\"]},\"classGroups\":{\"aspect\":[{\"aspect\":[\"auto\",\"square\",{\"$v\":\"isFraction\"},{\"$v\":\"isArbitraryValue\"},{\"$v\":\"isArbitraryVariable\"},{\"$t\":\"aspect\"}]}],\"container\":[\"container\"],\"container-type\":[{\"@container\":[\"\",\"normal\",\"size\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"container-named\":[{\"$v\":\"isNamedContainerQuery\"}],\"columns\":[{\"columns\":[{\"$v\":\"isNumber\"},\"auto\",{\"$v\":\"isArbitraryValue\"},{\"$v\":\"isArbitraryVariable\"},{\"$t\":\"container\"}]}],\"break-after\":[{\"break-after\":[\"auto\",\"avoid\",\"all\",\"avoid-page\",\"page\",\"left\",\"right\",\"column\"]}],\"break-before\":[{\"break-before\":[\"auto\",\"avoid\",\"all\",\"avoid-page\",\"page\",\"left\",\"right\",\"column\"]}],\"break-inside\":[{\"break-inside\":[\"auto\",\"avoid\",\"avoid-page\",\"avoid-column\"]}],\"box-decoration\":[{\"box-decoration\":[\"slice\",\"clone\"]}],\"box\":[{\"box\":[\"border\",\"content\"]}],\"display\":[\"block\",\"inline-block\",\"inline\",\"flex\",\"inline-flex\",\"table\",\"inline-table\",\"table-caption\",\"table-cell\",\"table-column\",\"table-column-group\",\"table-footer-group\",\"table-header-group\",\"table-row-group\",\"table-row\",\"flow-root\",\"grid\",\"inline-grid\",\"contents\",\"list-item\",\"hidden\"],\"sr\":[\"sr-only\",\"not-sr-only\"],\"float\":[{\"float\":[\"right\",\"left\",\"none\",\"start\",\"end\"]}],\"clear\":[{\"clear\":[\"left\",\"right\",\"both\",\"none\",\"start\",\"end\"]}],\"isolation\":[\"isolate\",\"isolation-auto\"],\"object-fit\":[{\"object\":[\"contain\",\"cover\",\"fill\",\"none\",\"scale-down\"]}],\"object-position\":[{\"object\":[\"center\",\"top\",\"bottom\",\"left\",\"right\",\"top-left\",\"left-top\",\"top-right\",\"right-top\",\"bottom-right\",\"right-bottom\",\"bottom-left\",\"left-bottom\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"overflow\":[{\"overflow\":[\"auto\",\"hidden\",\"clip\",\"visible\",\"scroll\"]}],\"overflow-x\":[{\"overflow-x\":[\"auto\",\"hidden\",\"clip\",\"visible\",\"scroll\"]}],\"overflow-y\":[{\"overflow-y\":[\"auto\",\"hidden\",\"clip\",\"visible\",\"scroll\"]}],\"overscroll\":[{\"overscroll\":[\"auto\",\"contain\",\"none\"]}],\"overscroll-x\":[{\"overscroll-x\":[\"auto\",\"contain\",\"none\"]}],\"overscroll-y\":[{\"overscroll-y\":[\"auto\",\"contain\",\"none\"]}],\"position\":[\"static\",\"fixed\",\"absolute\",\"relative\",\"sticky\"],\"inset\":[{\"inset\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"inset-x\":[{\"inset-x\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"inset-y\":[{\"inset-y\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"start\":[{\"inset-s\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}],\"start\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"end\":[{\"inset-e\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}],\"end\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"inset-bs\":[{\"inset-bs\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"inset-be\":[{\"inset-be\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"top\":[{\"top\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"right\":[{\"right\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"bottom\":[{\"bottom\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"left\":[{\"left\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"visibility\":[\"visible\",\"invisible\",\"collapse\"],\"z\":[{\"z\":[{\"$v\":\"isInteger\"},\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"basis\":[{\"basis\":[{\"$v\":\"isFraction\"},\"full\",\"auto\",{\"$t\":\"container\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"flex-direction\":[{\"flex\":[\"row\",\"row-reverse\",\"col\",\"col-reverse\"]}],\"flex-wrap\":[{\"flex\":[\"nowrap\",\"wrap\",\"wrap-reverse\"]}],\"flex\":[{\"flex\":[{\"$v\":\"isNumber\"},{\"$v\":\"isFraction\"},\"auto\",\"initial\",\"none\",{\"$v\":\"isArbitraryValue\"}]}],\"grow\":[{\"grow\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"shrink\":[{\"shrink\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"order\":[{\"order\":[{\"$v\":\"isInteger\"},\"first\",\"last\",\"none\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"grid-cols\":[{\"grid-cols\":[{\"$v\":\"isInteger\"},\"none\",\"subgrid\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"col-start-end\":[{\"col\":[\"auto\",{\"span\":[\"full\",{\"$v\":\"isInteger\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]},{\"$v\":\"isInteger\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"col-start\":[{\"col-start\":[{\"$v\":\"isInteger\"},\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"col-end\":[{\"col-end\":[{\"$v\":\"isInteger\"},\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"grid-rows\":[{\"grid-rows\":[{\"$v\":\"isInteger\"},\"none\",\"subgrid\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"row-start-end\":[{\"row\":[\"auto\",{\"span\":[\"full\",{\"$v\":\"isInteger\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]},{\"$v\":\"isInteger\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"row-start\":[{\"row-start\":[{\"$v\":\"isInteger\"},\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"row-end\":[{\"row-end\":[{\"$v\":\"isInteger\"},\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"grid-flow\":[{\"grid-flow\":[\"row\",\"col\",\"dense\",\"row-dense\",\"col-dense\"]}],\"auto-cols\":[{\"auto-cols\":[\"auto\",\"min\",\"max\",\"fr\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]},{\"auto-cols\":[{\"$t\":\"spacing\"}]}],\"auto-rows\":[{\"auto-rows\":[\"auto\",\"min\",\"max\",\"fr\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]},{\"auto-rows\":[{\"$t\":\"spacing\"}]}],\"gap\":[{\"gap\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"gap-x\":[{\"gap-x\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"gap-y\":[{\"gap-y\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"justify-content\":[{\"justify\":[\"start\",\"end\",\"center\",\"between\",\"around\",\"evenly\",\"stretch\",\"baseline\",\"center-safe\",\"end-safe\",\"normal\"]}],\"justify-items\":[{\"justify-items\":[\"start\",\"end\",\"center\",\"stretch\",\"center-safe\",\"end-safe\",\"normal\"]}],\"justify-self\":[{\"justify-self\":[\"auto\",\"start\",\"end\",\"center\",\"stretch\",\"center-safe\",\"end-safe\"]}],\"align-content\":[{\"content\":[\"normal\",\"start\",\"end\",\"center\",\"between\",\"around\",\"evenly\",\"stretch\",\"baseline\",\"center-safe\",\"end-safe\"]}],\"align-items\":[{\"items\":[\"start\",\"end\",\"center\",\"stretch\",\"center-safe\",\"end-safe\",{\"baseline\":[\"\",\"last\"]}]}],\"align-self\":[{\"self\":[\"auto\",\"start\",\"end\",\"center\",\"stretch\",\"center-safe\",\"end-safe\",{\"baseline\":[\"\",\"last\"]}]}],\"place-content\":[{\"place-content\":[\"start\",\"end\",\"center\",\"between\",\"around\",\"evenly\",\"stretch\",\"baseline\",\"center-safe\",\"end-safe\"]}],\"place-items\":[{\"place-items\":[\"start\",\"end\",\"center\",\"stretch\",\"center-safe\",\"end-safe\",\"baseline\"]}],\"place-self\":[{\"place-self\":[\"auto\",\"start\",\"end\",\"center\",\"stretch\",\"center-safe\",\"end-safe\"]}],\"p\":[{\"p\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"px\":[{\"px\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"py\":[{\"py\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"ps\":[{\"ps\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"pe\":[{\"pe\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"pbs\":[{\"pbs\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"pbe\":[{\"pbe\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"pt\":[{\"pt\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"pr\":[{\"pr\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"pb\":[{\"pb\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"pl\":[{\"pl\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"m\":[{\"m\":[\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"mx\":[{\"mx\":[\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"my\":[{\"my\":[\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"ms\":[{\"ms\":[\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"me\":[{\"me\":[\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"mbs\":[{\"mbs\":[\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"mbe\":[{\"mbe\":[\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"mt\":[{\"mt\":[\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"mr\":[{\"mr\":[\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"mb\":[{\"mb\":[\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"ml\":[{\"ml\":[\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"space-x\":[{\"space-x\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"space-x-reverse\":[\"space-x-reverse\"],\"space-y\":[{\"space-y\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"space-y-reverse\":[\"space-y-reverse\"],\"size\":[{\"size\":[{\"$v\":\"isFraction\"},\"auto\",\"full\",\"dvw\",\"dvh\",\"lvw\",\"lvh\",\"svw\",\"svh\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"inline-size\":[{\"inline\":[\"auto\",{\"$t\":\"container\"},{\"$v\":\"isFraction\"},\"screen\",\"full\",\"dvw\",\"lvw\",\"svw\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"min-inline-size\":[{\"min-inline\":[\"auto\",{\"$t\":\"container\"},{\"$v\":\"isFraction\"},\"screen\",\"full\",\"dvw\",\"lvw\",\"svw\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"max-inline-size\":[{\"max-inline\":[\"none\",{\"$t\":\"container\"},{\"$v\":\"isFraction\"},\"screen\",\"full\",\"dvw\",\"lvw\",\"svw\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"block-size\":[{\"block\":[\"auto\",{\"$v\":\"isFraction\"},\"screen\",\"full\",\"lh\",\"dvh\",\"lvh\",\"svh\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"min-block-size\":[{\"min-block\":[\"auto\",{\"$v\":\"isFraction\"},\"screen\",\"full\",\"lh\",\"dvh\",\"lvh\",\"svh\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"max-block-size\":[{\"max-block\":[\"none\",{\"$v\":\"isFraction\"},\"screen\",\"full\",\"lh\",\"dvh\",\"lvh\",\"svh\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"w\":[{\"w\":[{\"$t\":\"container\"},\"screen\",{\"$v\":\"isFraction\"},\"auto\",\"full\",\"dvw\",\"dvh\",\"lvw\",\"lvh\",\"svw\",\"svh\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"min-w\":[{\"min-w\":[{\"$t\":\"container\"},\"screen\",\"none\",{\"$v\":\"isFraction\"},\"auto\",\"full\",\"dvw\",\"dvh\",\"lvw\",\"lvh\",\"svw\",\"svh\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"max-w\":[{\"max-w\":[{\"$t\":\"container\"},\"screen\",\"none\",\"prose\",{\"screen\":[{\"$t\":\"breakpoint\"}]},{\"$v\":\"isFraction\"},\"auto\",\"full\",\"dvw\",\"dvh\",\"lvw\",\"lvh\",\"svw\",\"svh\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"h\":[{\"h\":[\"screen\",\"lh\",{\"$v\":\"isFraction\"},\"auto\",\"full\",\"dvw\",\"dvh\",\"lvw\",\"lvh\",\"svw\",\"svh\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"min-h\":[{\"min-h\":[\"screen\",\"lh\",\"none\",{\"$v\":\"isFraction\"},\"auto\",\"full\",\"dvw\",\"dvh\",\"lvw\",\"lvh\",\"svw\",\"svh\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"max-h\":[{\"max-h\":[\"screen\",\"lh\",\"none\",{\"$v\":\"isFraction\"},\"auto\",\"full\",\"dvw\",\"dvh\",\"lvw\",\"lvh\",\"svw\",\"svh\",\"min\",\"max\",\"fit\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"font-size\":[{\"text\":[\"base\",{\"$t\":\"text\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"font-smoothing\":[\"antialiased\",\"subpixel-antialiased\"],\"font-style\":[\"italic\",\"not-italic\"],\"font-weight\":[{\"font\":[{\"$t\":\"font-weight\"},{\"$v\":\"isArbitraryVariableWeight\"},{\"$v\":\"isArbitraryWeight\"}]}],\"font-stretch\":[{\"font-stretch\":[\"ultra-condensed\",\"extra-condensed\",\"condensed\",\"semi-condensed\",\"normal\",\"semi-expanded\",\"expanded\",\"extra-expanded\",\"ultra-expanded\",{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryValue\"}]}],\"font-family\":[{\"font\":[{\"$v\":\"isArbitraryVariableFamilyName\"},{\"$v\":\"isArbitraryFamilyName\"},{\"$t\":\"font\"}]}],\"font-features\":[{\"font-features\":[{\"$v\":\"isArbitraryValue\"}]}],\"fvn-normal\":[\"normal-nums\"],\"fvn-ordinal\":[\"ordinal\"],\"fvn-slashed-zero\":[\"slashed-zero\"],\"fvn-figure\":[\"lining-nums\",\"oldstyle-nums\"],\"fvn-spacing\":[\"proportional-nums\",\"tabular-nums\"],\"fvn-fraction\":[\"diagonal-fractions\",\"stacked-fractions\"],\"tracking\":[{\"tracking\":[{\"$t\":\"tracking\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"line-clamp\":[{\"line-clamp\":[{\"$v\":\"isNumber\"},\"none\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryNumber\"}]}],\"leading\":[{\"leading\":[\"none\",{\"$t\":\"leading\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"list-image\":[{\"list-image\":[\"none\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"list-style-position\":[{\"list\":[\"inside\",\"outside\"]}],\"list-style-type\":[{\"list\":[\"disc\",\"decimal\",\"none\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"text-alignment\":[{\"text\":[\"left\",\"center\",\"right\",\"justify\",\"start\",\"end\"]}],\"placeholder-color\":[{\"placeholder\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"text-color\":[{\"text\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"text-decoration\":[\"underline\",\"overline\",\"line-through\",\"no-underline\"],\"text-decoration-style\":[{\"decoration\":[\"solid\",\"dashed\",\"dotted\",\"double\",\"wavy\"]}],\"text-decoration-thickness\":[{\"decoration\":[{\"$v\":\"isNumber\"},\"from-font\",\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryLength\"}]}],\"text-decoration-color\":[{\"decoration\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"underline-offset\":[{\"underline-offset\":[{\"$v\":\"isNumber\"},\"auto\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"text-transform\":[\"uppercase\",\"lowercase\",\"capitalize\",\"normal-case\"],\"text-overflow\":[\"truncate\",\"text-ellipsis\",\"text-clip\"],\"text-wrap\":[{\"text\":[\"wrap\",\"nowrap\",\"balance\",\"pretty\"]}],\"indent\":[{\"indent\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"tab-size\":[{\"tab\":[{\"$v\":\"isInteger\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"vertical-align\":[{\"align\":[\"baseline\",\"top\",\"middle\",\"bottom\",\"text-top\",\"text-bottom\",\"sub\",\"super\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"whitespace\":[{\"whitespace\":[\"normal\",\"nowrap\",\"pre\",\"pre-line\",\"pre-wrap\",\"break-spaces\"]}],\"break\":[{\"break\":[\"normal\",\"words\",\"all\",\"keep\"]}],\"wrap\":[{\"wrap\":[\"break-word\",\"anywhere\",\"normal\"]}],\"hyphens\":[{\"hyphens\":[\"none\",\"manual\",\"auto\"]}],\"content\":[{\"content\":[\"none\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"bg-attachment\":[{\"bg\":[\"fixed\",\"local\",\"scroll\"]}],\"bg-clip\":[{\"bg-clip\":[\"border\",\"padding\",\"content\",\"text\"]}],\"bg-origin\":[{\"bg-origin\":[\"border\",\"padding\",\"content\"]}],\"bg-position\":[{\"bg\":[\"center\",\"top\",\"bottom\",\"left\",\"right\",\"top-left\",\"left-top\",\"top-right\",\"right-top\",\"bottom-right\",\"right-bottom\",\"bottom-left\",\"left-bottom\",{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"},{\"position\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}]}],\"bg-repeat\":[{\"bg\":[\"no-repeat\",{\"repeat\":[\"\",\"x\",\"y\",\"space\",\"round\"]}]}],\"bg-size\":[{\"bg\":[\"auto\",\"cover\",\"contain\",{\"$v\":\"isArbitraryVariableSize\"},{\"$v\":\"isArbitrarySize\"},{\"size\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}]}],\"bg-image\":[{\"bg\":[\"none\",{\"linear\":[{\"to\":[\"t\",\"tr\",\"r\",\"br\",\"b\",\"bl\",\"l\",\"tl\"]},{\"$v\":\"isInteger\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}],\"radial\":[\"\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}],\"conic\":[\"\",{\"$v\":\"isInteger\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]},{\"$v\":\"isArbitraryVariableImage\"},{\"$v\":\"isArbitraryImage\"}]},{\"bg-gradient-to\":[\"t\",\"tr\",\"r\",\"br\",\"b\",\"bl\",\"l\",\"tl\"]}],\"bg-color\":[{\"bg\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"gradient-from-pos\":[{\"from\":[{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"gradient-via-pos\":[{\"via\":[{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"gradient-to-pos\":[{\"to\":[{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"gradient-from\":[{\"from\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"gradient-via\":[{\"via\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"gradient-to\":[{\"to\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded\":[{\"rounded\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-s\":[{\"rounded-s\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-e\":[{\"rounded-e\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-t\":[{\"rounded-t\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-r\":[{\"rounded-r\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-b\":[{\"rounded-b\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-l\":[{\"rounded-l\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-ss\":[{\"rounded-ss\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-se\":[{\"rounded-se\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-ee\":[{\"rounded-ee\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-es\":[{\"rounded-es\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-tl\":[{\"rounded-tl\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-tr\":[{\"rounded-tr\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-br\":[{\"rounded-br\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rounded-bl\":[{\"rounded-bl\":[\"\",\"none\",\"full\",{\"$t\":\"radius\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-w\":[{\"border\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"border-w-x\":[{\"border-x\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"border-w-y\":[{\"border-y\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"border-w-s\":[{\"border-s\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"border-w-e\":[{\"border-e\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"border-w-bs\":[{\"border-bs\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"border-w-be\":[{\"border-be\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"border-w-t\":[{\"border-t\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"border-w-r\":[{\"border-r\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"border-w-b\":[{\"border-b\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"border-w-l\":[{\"border-l\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"divide-x\":[{\"divide-x\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"divide-x-reverse\":[\"divide-x-reverse\"],\"divide-y\":[{\"divide-y\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"divide-y-reverse\":[\"divide-y-reverse\"],\"border-style\":[{\"border\":[\"solid\",\"dashed\",\"dotted\",\"double\",\"hidden\",\"none\"]}],\"divide-style\":[{\"divide\":[\"solid\",\"dashed\",\"dotted\",\"double\",\"hidden\",\"none\"]}],\"border-color\":[{\"border\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-color-x\":[{\"border-x\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-color-y\":[{\"border-y\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-color-s\":[{\"border-s\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-color-e\":[{\"border-e\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-color-bs\":[{\"border-bs\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-color-be\":[{\"border-be\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-color-t\":[{\"border-t\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-color-r\":[{\"border-r\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-color-b\":[{\"border-b\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-color-l\":[{\"border-l\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"divide-color\":[{\"divide\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"outline-style\":[{\"outline\":[\"solid\",\"dashed\",\"dotted\",\"double\",\"none\",\"hidden\"]}],\"outline-offset\":[{\"outline-offset\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"outline-w\":[{\"outline\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"outline-color\":[{\"outline\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"shadow\":[{\"shadow\":[\"\",\"inner\",\"none\",{\"$t\":\"shadow\"},{\"$v\":\"isArbitraryVariableShadow\"},{\"$v\":\"isArbitraryShadow\"}]}],\"shadow-color\":[{\"shadow\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"inset-shadow\":[{\"inset-shadow\":[\"none\",{\"$t\":\"inset-shadow\"},{\"$v\":\"isArbitraryVariableShadow\"},{\"$v\":\"isArbitraryShadow\"}]}],\"inset-shadow-color\":[{\"inset-shadow\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"ring-w\":[{\"ring\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"ring-w-inset\":[\"ring-inset\"],\"ring-color\":[{\"ring\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"ring-offset-w\":[{\"ring-offset\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryLength\"}]}],\"ring-offset-color\":[{\"ring-offset\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"inset-ring-w\":[{\"inset-ring\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"}]}],\"inset-ring-color\":[{\"inset-ring\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"text-shadow\":[{\"text-shadow\":[\"none\",{\"$t\":\"text-shadow\"},{\"$v\":\"isArbitraryVariableShadow\"},{\"$v\":\"isArbitraryShadow\"}]}],\"text-shadow-color\":[{\"text-shadow\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"opacity\":[{\"opacity\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mix-blend\":[{\"mix-blend\":[\"normal\",\"multiply\",\"screen\",\"overlay\",\"darken\",\"lighten\",\"color-dodge\",\"color-burn\",\"hard-light\",\"soft-light\",\"difference\",\"exclusion\",\"hue\",\"saturation\",\"color\",\"luminosity\",\"plus-darker\",\"plus-lighter\"]}],\"bg-blend\":[{\"bg-blend\":[\"normal\",\"multiply\",\"screen\",\"overlay\",\"darken\",\"lighten\",\"color-dodge\",\"color-burn\",\"hard-light\",\"soft-light\",\"difference\",\"exclusion\",\"hue\",\"saturation\",\"color\",\"luminosity\"]}],\"mask-clip\":[{\"mask-clip\":[\"border\",\"padding\",\"content\",\"fill\",\"stroke\",\"view\"]},\"mask-no-clip\"],\"mask-composite\":[{\"mask\":[\"add\",\"subtract\",\"intersect\",\"exclude\"]}],\"mask-image-linear-pos\":[{\"mask-linear\":[{\"$v\":\"isNumber\"}]}],\"mask-image-linear-from-pos\":[{\"mask-linear-from\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-linear-to-pos\":[{\"mask-linear-to\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-linear-from-color\":[{\"mask-linear-from\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-linear-to-color\":[{\"mask-linear-to\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-t-from-pos\":[{\"mask-t-from\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-t-to-pos\":[{\"mask-t-to\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-t-from-color\":[{\"mask-t-from\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-t-to-color\":[{\"mask-t-to\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-r-from-pos\":[{\"mask-r-from\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-r-to-pos\":[{\"mask-r-to\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-r-from-color\":[{\"mask-r-from\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-r-to-color\":[{\"mask-r-to\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-b-from-pos\":[{\"mask-b-from\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-b-to-pos\":[{\"mask-b-to\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-b-from-color\":[{\"mask-b-from\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-b-to-color\":[{\"mask-b-to\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-l-from-pos\":[{\"mask-l-from\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-l-to-pos\":[{\"mask-l-to\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-l-from-color\":[{\"mask-l-from\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-l-to-color\":[{\"mask-l-to\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-x-from-pos\":[{\"mask-x-from\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-x-to-pos\":[{\"mask-x-to\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-x-from-color\":[{\"mask-x-from\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-x-to-color\":[{\"mask-x-to\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-y-from-pos\":[{\"mask-y-from\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-y-to-pos\":[{\"mask-y-to\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-y-from-color\":[{\"mask-y-from\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-y-to-color\":[{\"mask-y-to\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-radial\":[{\"mask-radial\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-radial-from-pos\":[{\"mask-radial-from\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-radial-to-pos\":[{\"mask-radial-to\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-radial-from-color\":[{\"mask-radial-from\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-radial-to-color\":[{\"mask-radial-to\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-radial-shape\":[{\"mask-radial\":[\"circle\",\"ellipse\"]}],\"mask-image-radial-size\":[{\"mask-radial\":[{\"closest\":[\"side\",\"corner\"],\"farthest\":[\"side\",\"corner\"]}]}],\"mask-image-radial-pos\":[{\"mask-radial-at\":[\"center\",\"top\",\"bottom\",\"left\",\"right\",\"top-left\",\"left-top\",\"top-right\",\"right-top\",\"bottom-right\",\"right-bottom\",\"bottom-left\",\"left-bottom\"]}],\"mask-image-conic-pos\":[{\"mask-conic\":[{\"$v\":\"isNumber\"}]}],\"mask-image-conic-from-pos\":[{\"mask-conic-from\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-conic-to-pos\":[{\"mask-conic-to\":[{\"$v\":\"isNumber\"},{\"$v\":\"isPercent\"},{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"}]}],\"mask-image-conic-from-color\":[{\"mask-conic-from\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-image-conic-to-color\":[{\"mask-conic-to\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"mask-mode\":[{\"mask\":[\"alpha\",\"luminance\",\"match\"]}],\"mask-origin\":[{\"mask-origin\":[\"border\",\"padding\",\"content\",\"fill\",\"stroke\",\"view\"]}],\"mask-position\":[{\"mask\":[\"center\",\"top\",\"bottom\",\"left\",\"right\",\"top-left\",\"left-top\",\"top-right\",\"right-top\",\"bottom-right\",\"right-bottom\",\"bottom-left\",\"left-bottom\",{\"$v\":\"isArbitraryVariablePosition\"},{\"$v\":\"isArbitraryPosition\"},{\"position\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}]}],\"mask-repeat\":[{\"mask\":[\"no-repeat\",{\"repeat\":[\"\",\"x\",\"y\",\"space\",\"round\"]}]}],\"mask-size\":[{\"mask\":[\"auto\",\"cover\",\"contain\",{\"$v\":\"isArbitraryVariableSize\"},{\"$v\":\"isArbitrarySize\"},{\"size\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}]}],\"mask-type\":[{\"mask-type\":[\"alpha\",\"luminance\"]}],\"mask-image\":[{\"mask\":[\"none\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"filter\":[{\"filter\":[\"\",\"none\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"blur\":[{\"blur\":[\"\",\"none\",{\"$t\":\"blur\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"brightness\":[{\"brightness\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"contrast\":[{\"contrast\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"drop-shadow\":[{\"drop-shadow\":[\"\",\"none\",{\"$t\":\"drop-shadow\"},{\"$v\":\"isArbitraryVariableShadow\"},{\"$v\":\"isArbitraryShadow\"}]}],\"drop-shadow-color\":[{\"drop-shadow\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"grayscale\":[{\"grayscale\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"hue-rotate\":[{\"hue-rotate\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"invert\":[{\"invert\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"saturate\":[{\"saturate\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"sepia\":[{\"sepia\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"backdrop-filter\":[{\"backdrop-filter\":[\"\",\"none\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"backdrop-blur\":[{\"backdrop-blur\":[\"\",\"none\",{\"$t\":\"blur\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"backdrop-brightness\":[{\"backdrop-brightness\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"backdrop-contrast\":[{\"backdrop-contrast\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"backdrop-grayscale\":[{\"backdrop-grayscale\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"backdrop-hue-rotate\":[{\"backdrop-hue-rotate\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"backdrop-invert\":[{\"backdrop-invert\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"backdrop-opacity\":[{\"backdrop-opacity\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"backdrop-saturate\":[{\"backdrop-saturate\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"backdrop-sepia\":[{\"backdrop-sepia\":[\"\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"border-collapse\":[{\"border\":[\"collapse\",\"separate\"]}],\"border-spacing\":[{\"border-spacing\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"border-spacing-x\":[{\"border-spacing-x\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"border-spacing-y\":[{\"border-spacing-y\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"table-layout\":[{\"table\":[\"auto\",\"fixed\"]}],\"caption\":[{\"caption\":[\"top\",\"bottom\"]}],\"transition\":[{\"transition\":[\"\",\"all\",\"colors\",\"opacity\",\"shadow\",\"transform\",\"none\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"transition-behavior\":[{\"transition\":[\"normal\",\"discrete\"]}],\"duration\":[{\"duration\":[{\"$v\":\"isNumber\"},\"initial\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"ease\":[{\"ease\":[\"linear\",\"initial\",{\"$t\":\"ease\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"delay\":[{\"delay\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"animate\":[{\"animate\":[\"none\",{\"$t\":\"animate\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"backface\":[{\"backface\":[\"hidden\",\"visible\"]}],\"perspective\":[{\"perspective\":[{\"$t\":\"perspective\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"perspective-origin\":[{\"perspective-origin\":[\"center\",\"top\",\"bottom\",\"left\",\"right\",\"top-left\",\"left-top\",\"top-right\",\"right-top\",\"bottom-right\",\"right-bottom\",\"bottom-left\",\"left-bottom\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rotate\":[{\"rotate\":[\"none\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rotate-x\":[{\"rotate-x\":[\"none\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rotate-y\":[{\"rotate-y\":[\"none\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"rotate-z\":[{\"rotate-z\":[\"none\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"scale\":[{\"scale\":[\"none\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"scale-x\":[{\"scale-x\":[\"none\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"scale-y\":[{\"scale-y\":[\"none\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"scale-z\":[{\"scale-z\":[\"none\",{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"scale-3d\":[\"scale-3d\"],\"skew\":[{\"skew\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"skew-x\":[{\"skew-x\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"skew-y\":[{\"skew-y\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"transform\":[{\"transform\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},\"\",\"none\",\"gpu\",\"cpu\"]}],\"transform-origin\":[{\"origin\":[\"center\",\"top\",\"bottom\",\"left\",\"right\",\"top-left\",\"left-top\",\"top-right\",\"right-top\",\"bottom-right\",\"right-bottom\",\"bottom-left\",\"left-bottom\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"transform-style\":[{\"transform\":[\"3d\",\"flat\"]}],\"translate\":[{\"translate\":[{\"$v\":\"isFraction\"},\"full\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"translate-x\":[{\"translate-x\":[{\"$v\":\"isFraction\"},\"full\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"translate-y\":[{\"translate-y\":[{\"$v\":\"isFraction\"},\"full\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"translate-z\":[{\"translate-z\":[{\"$v\":\"isFraction\"},\"full\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"translate-none\":[\"translate-none\"],\"zoom\":[{\"zoom\":[{\"$v\":\"isInteger\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"accent\":[{\"accent\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"appearance\":[{\"appearance\":[\"none\",\"auto\"]}],\"caret-color\":[{\"caret\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"color-scheme\":[{\"scheme\":[\"normal\",\"dark\",\"light\",\"light-dark\",\"only-dark\",\"only-light\"]}],\"cursor\":[{\"cursor\":[\"auto\",\"default\",\"pointer\",\"wait\",\"text\",\"move\",\"help\",\"not-allowed\",\"none\",\"context-menu\",\"progress\",\"cell\",\"crosshair\",\"vertical-text\",\"alias\",\"copy\",\"no-drop\",\"grab\",\"grabbing\",\"all-scroll\",\"col-resize\",\"row-resize\",\"n-resize\",\"e-resize\",\"s-resize\",\"w-resize\",\"ne-resize\",\"nw-resize\",\"se-resize\",\"sw-resize\",\"ew-resize\",\"ns-resize\",\"nesw-resize\",\"nwse-resize\",\"zoom-in\",\"zoom-out\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"field-sizing\":[{\"field-sizing\":[\"fixed\",\"content\"]}],\"pointer-events\":[{\"pointer-events\":[\"auto\",\"none\"]}],\"resize\":[{\"resize\":[\"none\",\"\",\"y\",\"x\"]}],\"scroll-behavior\":[{\"scroll\":[\"auto\",\"smooth\"]}],\"scrollbar-thumb-color\":[{\"scrollbar-thumb\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"scrollbar-track-color\":[{\"scrollbar-track\":[{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"scrollbar-gutter\":[{\"scrollbar-gutter\":[\"auto\",\"stable\",\"both\"]}],\"scrollbar-w\":[{\"scrollbar\":[\"auto\",\"thin\",\"none\"]}],\"scroll-m\":[{\"scroll-m\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-mx\":[{\"scroll-mx\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-my\":[{\"scroll-my\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-ms\":[{\"scroll-ms\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-me\":[{\"scroll-me\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-mbs\":[{\"scroll-mbs\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-mbe\":[{\"scroll-mbe\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-mt\":[{\"scroll-mt\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-mr\":[{\"scroll-mr\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-mb\":[{\"scroll-mb\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-ml\":[{\"scroll-ml\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-p\":[{\"scroll-p\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-px\":[{\"scroll-px\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-py\":[{\"scroll-py\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-ps\":[{\"scroll-ps\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-pe\":[{\"scroll-pe\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-pbs\":[{\"scroll-pbs\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-pbe\":[{\"scroll-pbe\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-pt\":[{\"scroll-pt\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-pr\":[{\"scroll-pr\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-pb\":[{\"scroll-pb\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"scroll-pl\":[{\"scroll-pl\":[{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"},{\"$t\":\"spacing\"}]}],\"snap-align\":[{\"snap\":[\"start\",\"end\",\"center\",\"align-none\"]}],\"snap-stop\":[{\"snap\":[\"normal\",\"always\"]}],\"snap-type\":[{\"snap\":[\"none\",\"x\",\"y\",\"both\"]}],\"snap-strictness\":[{\"snap\":[\"mandatory\",\"proximity\"]}],\"touch\":[{\"touch\":[\"auto\",\"none\",\"manipulation\"]}],\"touch-x\":[{\"touch-pan\":[\"x\",\"left\",\"right\"]}],\"touch-y\":[{\"touch-pan\":[\"y\",\"up\",\"down\"]}],\"touch-pz\":[\"touch-pinch-zoom\"],\"select\":[{\"select\":[\"none\",\"text\",\"all\",\"auto\"]}],\"will-change\":[{\"will-change\":[\"auto\",\"scroll\",\"contents\",\"transform\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"fill\":[{\"fill\":[\"none\",{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"stroke-w\":[{\"stroke\":[{\"$v\":\"isNumber\"},{\"$v\":\"isArbitraryVariableLength\"},{\"$v\":\"isArbitraryLength\"},{\"$v\":\"isArbitraryNumber\"}]}],\"stroke\":[{\"stroke\":[\"none\",{\"$t\":\"color\"},{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"forced-color-adjust\":[{\"forced-color-adjust\":[\"auto\",\"none\"]}],\"contain\":[{\"contain\":[\"none\",\"content\",\"strict\",{\"$v\":\"isArbitraryVariable\"},{\"$v\":\"isArbitraryValue\"}]}],\"contain-size\":[{\"contain\":[\"size\",\"inline-size\"]}],\"contain-layout\":[\"contain-layout\"],\"contain-paint\":[\"contain-paint\"],\"contain-style\":[\"contain-style\"]},\"conflictingClassGroups\":{\"container-named\":[\"container-type\"],\"overflow\":[\"overflow-x\",\"overflow-y\"],\"overscroll\":[\"overscroll-x\",\"overscroll-y\"],\"inset\":[\"inset-x\",\"inset-y\",\"inset-bs\",\"inset-be\",\"start\",\"end\",\"top\",\"right\",\"bottom\",\"left\"],\"inset-x\":[\"start\",\"end\",\"right\",\"left\"],\"inset-y\":[\"inset-bs\",\"inset-be\",\"top\",\"bottom\"],\"flex\":[\"basis\",\"grow\",\"shrink\"],\"gap\":[\"gap-x\",\"gap-y\"],\"p\":[\"px\",\"py\",\"ps\",\"pe\",\"pbs\",\"pbe\",\"pt\",\"pr\",\"pb\",\"pl\"],\"px\":[\"ps\",\"pe\",\"pr\",\"pl\"],\"py\":[\"pbs\",\"pbe\",\"pt\",\"pb\"],\"m\":[\"mx\",\"my\",\"ms\",\"me\",\"mbs\",\"mbe\",\"mt\",\"mr\",\"mb\",\"ml\"],\"mx\":[\"ms\",\"me\",\"mr\",\"ml\"],\"my\":[\"mbs\",\"mbe\",\"mt\",\"mb\"],\"size\":[\"w\",\"h\"],\"font-size\":[\"leading\"],\"fvn-normal\":[\"fvn-ordinal\",\"fvn-slashed-zero\",\"fvn-figure\",\"fvn-spacing\",\"fvn-fraction\"],\"fvn-ordinal\":[\"fvn-normal\"],\"fvn-slashed-zero\":[\"fvn-normal\"],\"fvn-figure\":[\"fvn-normal\"],\"fvn-spacing\":[\"fvn-normal\"],\"fvn-fraction\":[\"fvn-normal\"],\"line-clamp\":[\"display\",\"overflow\"],\"rounded\":[\"rounded-s\",\"rounded-e\",\"rounded-t\",\"rounded-r\",\"rounded-b\",\"rounded-l\",\"rounded-ss\",\"rounded-se\",\"rounded-ee\",\"rounded-es\",\"rounded-tl\",\"rounded-tr\",\"rounded-br\",\"rounded-bl\"],\"rounded-s\":[\"rounded-ss\",\"rounded-es\"],\"rounded-e\":[\"rounded-se\",\"rounded-ee\"],\"rounded-t\":[\"rounded-tl\",\"rounded-tr\"],\"rounded-r\":[\"rounded-tr\",\"rounded-br\"],\"rounded-b\":[\"rounded-br\",\"rounded-bl\"],\"rounded-l\":[\"rounded-tl\",\"rounded-bl\"],\"border-spacing\":[\"border-spacing-x\",\"border-spacing-y\"],\"border-w\":[\"border-w-x\",\"border-w-y\",\"border-w-s\",\"border-w-e\",\"border-w-bs\",\"border-w-be\",\"border-w-t\",\"border-w-r\",\"border-w-b\",\"border-w-l\"],\"border-w-x\":[\"border-w-s\",\"border-w-e\",\"border-w-r\",\"border-w-l\"],\"border-w-y\":[\"border-w-bs\",\"border-w-be\",\"border-w-t\",\"border-w-b\"],\"border-color\":[\"border-color-x\",\"border-color-y\",\"border-color-s\",\"border-color-e\",\"border-color-bs\",\"border-color-be\",\"border-color-t\",\"border-color-r\",\"border-color-b\",\"border-color-l\"],\"border-color-x\":[\"border-color-s\",\"border-color-e\",\"border-color-r\",\"border-color-l\"],\"border-color-y\":[\"border-color-bs\",\"border-color-be\",\"border-color-t\",\"border-color-b\"],\"translate\":[\"translate-x\",\"translate-y\",\"translate-none\"],\"translate-none\":[\"translate\",\"translate-x\",\"translate-y\",\"translate-z\"],\"scroll-m\":[\"scroll-mx\",\"scroll-my\",\"scroll-ms\",\"scroll-me\",\"scroll-mbs\",\"scroll-mbe\",\"scroll-mt\",\"scroll-mr\",\"scroll-mb\",\"scroll-ml\"],\"scroll-mx\":[\"scroll-ms\",\"scroll-me\",\"scroll-mr\",\"scroll-ml\"],\"scroll-my\":[\"scroll-mbs\",\"scroll-mbe\",\"scroll-mt\",\"scroll-mb\"],\"scroll-p\":[\"scroll-px\",\"scroll-py\",\"scroll-ps\",\"scroll-pe\",\"scroll-pbs\",\"scroll-pbe\",\"scroll-pt\",\"scroll-pr\",\"scroll-pb\",\"scroll-pl\"],\"scroll-px\":[\"scroll-ps\",\"scroll-pe\",\"scroll-pr\",\"scroll-pl\"],\"scroll-py\":[\"scroll-pbs\",\"scroll-pbe\",\"scroll-pt\",\"scroll-pb\"],\"touch\":[\"touch-x\",\"touch-y\",\"touch-pz\"],\"touch-x\":[\"touch\"],\"touch-y\":[\"touch\"],\"touch-pz\":[\"touch\"],\"contain\":[\"contain-size\",\"contain-layout\",\"contain-paint\",\"contain-style\"],\"contain-size\":[\"contain\"],\"contain-layout\":[\"contain\"],\"contain-paint\":[\"contain\"],\"contain-style\":[\"contain\"]},\"conflictingClassGroupModifiers\":{\"font-size\":[\"leading\"]},\"orderSensitiveModifiers\":[\"*\",\"**\",\"after\",\"backdrop\",\"before\",\"details-content\",\"file\",\"first-letter\",\"first-line\",\"marker\",\"placeholder\",\"selection\"],\"postfixLookupClassGroups\":[\"container-type\"]}"
|
|
18
|
+
|
|
19
|
+
/** A fresh copy of the default config (marker form; safe to mutate). */
|
|
20
|
+
export const getDefaultCnConfig = (): CnConfig => JSON.parse(J) as CnConfig
|
|
21
|
+
|
|
22
|
+
/** every class-group id in the default config (autocomplete for extensions) */
|
|
23
|
+
export type DefaultClassGroupIds = "aspect" | "container" | "container-type" | "container-named" | "columns" | "break-after" | "break-before" | "break-inside" | "box-decoration" | "box" | "display" | "sr" | "float" | "clear" | "isolation" | "object-fit" | "object-position" | "overflow" | "overflow-x" | "overflow-y" | "overscroll" | "overscroll-x" | "overscroll-y" | "position" | "inset" | "inset-x" | "inset-y" | "start" | "end" | "inset-bs" | "inset-be" | "top" | "right" | "bottom" | "left" | "visibility" | "z" | "basis" | "flex-direction" | "flex-wrap" | "flex" | "grow" | "shrink" | "order" | "grid-cols" | "col-start-end" | "col-start" | "col-end" | "grid-rows" | "row-start-end" | "row-start" | "row-end" | "grid-flow" | "auto-cols" | "auto-rows" | "gap" | "gap-x" | "gap-y" | "justify-content" | "justify-items" | "justify-self" | "align-content" | "align-items" | "align-self" | "place-content" | "place-items" | "place-self" | "p" | "px" | "py" | "ps" | "pe" | "pbs" | "pbe" | "pt" | "pr" | "pb" | "pl" | "m" | "mx" | "my" | "ms" | "me" | "mbs" | "mbe" | "mt" | "mr" | "mb" | "ml" | "space-x" | "space-x-reverse" | "space-y" | "space-y-reverse" | "size" | "inline-size" | "min-inline-size" | "max-inline-size" | "block-size" | "min-block-size" | "max-block-size" | "w" | "min-w" | "max-w" | "h" | "min-h" | "max-h" | "font-size" | "font-smoothing" | "font-style" | "font-weight" | "font-stretch" | "font-family" | "font-features" | "fvn-normal" | "fvn-ordinal" | "fvn-slashed-zero" | "fvn-figure" | "fvn-spacing" | "fvn-fraction" | "tracking" | "line-clamp" | "leading" | "list-image" | "list-style-position" | "list-style-type" | "text-alignment" | "placeholder-color" | "text-color" | "text-decoration" | "text-decoration-style" | "text-decoration-thickness" | "text-decoration-color" | "underline-offset" | "text-transform" | "text-overflow" | "text-wrap" | "indent" | "tab-size" | "vertical-align" | "whitespace" | "break" | "wrap" | "hyphens" | "content" | "bg-attachment" | "bg-clip" | "bg-origin" | "bg-position" | "bg-repeat" | "bg-size" | "bg-image" | "bg-color" | "gradient-from-pos" | "gradient-via-pos" | "gradient-to-pos" | "gradient-from" | "gradient-via" | "gradient-to" | "rounded" | "rounded-s" | "rounded-e" | "rounded-t" | "rounded-r" | "rounded-b" | "rounded-l" | "rounded-ss" | "rounded-se" | "rounded-ee" | "rounded-es" | "rounded-tl" | "rounded-tr" | "rounded-br" | "rounded-bl" | "border-w" | "border-w-x" | "border-w-y" | "border-w-s" | "border-w-e" | "border-w-bs" | "border-w-be" | "border-w-t" | "border-w-r" | "border-w-b" | "border-w-l" | "divide-x" | "divide-x-reverse" | "divide-y" | "divide-y-reverse" | "border-style" | "divide-style" | "border-color" | "border-color-x" | "border-color-y" | "border-color-s" | "border-color-e" | "border-color-bs" | "border-color-be" | "border-color-t" | "border-color-r" | "border-color-b" | "border-color-l" | "divide-color" | "outline-style" | "outline-offset" | "outline-w" | "outline-color" | "shadow" | "shadow-color" | "inset-shadow" | "inset-shadow-color" | "ring-w" | "ring-w-inset" | "ring-color" | "ring-offset-w" | "ring-offset-color" | "inset-ring-w" | "inset-ring-color" | "text-shadow" | "text-shadow-color" | "opacity" | "mix-blend" | "bg-blend" | "mask-clip" | "mask-composite" | "mask-image-linear-pos" | "mask-image-linear-from-pos" | "mask-image-linear-to-pos" | "mask-image-linear-from-color" | "mask-image-linear-to-color" | "mask-image-t-from-pos" | "mask-image-t-to-pos" | "mask-image-t-from-color" | "mask-image-t-to-color" | "mask-image-r-from-pos" | "mask-image-r-to-pos" | "mask-image-r-from-color" | "mask-image-r-to-color" | "mask-image-b-from-pos" | "mask-image-b-to-pos" | "mask-image-b-from-color" | "mask-image-b-to-color" | "mask-image-l-from-pos" | "mask-image-l-to-pos" | "mask-image-l-from-color" | "mask-image-l-to-color" | "mask-image-x-from-pos" | "mask-image-x-to-pos" | "mask-image-x-from-color" | "mask-image-x-to-color" | "mask-image-y-from-pos" | "mask-image-y-to-pos" | "mask-image-y-from-color" | "mask-image-y-to-color" | "mask-image-radial" | "mask-image-radial-from-pos" | "mask-image-radial-to-pos" | "mask-image-radial-from-color" | "mask-image-radial-to-color" | "mask-image-radial-shape" | "mask-image-radial-size" | "mask-image-radial-pos" | "mask-image-conic-pos" | "mask-image-conic-from-pos" | "mask-image-conic-to-pos" | "mask-image-conic-from-color" | "mask-image-conic-to-color" | "mask-mode" | "mask-origin" | "mask-position" | "mask-repeat" | "mask-size" | "mask-type" | "mask-image" | "filter" | "blur" | "brightness" | "contrast" | "drop-shadow" | "drop-shadow-color" | "grayscale" | "hue-rotate" | "invert" | "saturate" | "sepia" | "backdrop-filter" | "backdrop-blur" | "backdrop-brightness" | "backdrop-contrast" | "backdrop-grayscale" | "backdrop-hue-rotate" | "backdrop-invert" | "backdrop-opacity" | "backdrop-saturate" | "backdrop-sepia" | "border-collapse" | "border-spacing" | "border-spacing-x" | "border-spacing-y" | "table-layout" | "caption" | "transition" | "transition-behavior" | "duration" | "ease" | "delay" | "animate" | "backface" | "perspective" | "perspective-origin" | "rotate" | "rotate-x" | "rotate-y" | "rotate-z" | "scale" | "scale-x" | "scale-y" | "scale-z" | "scale-3d" | "skew" | "skew-x" | "skew-y" | "transform" | "transform-origin" | "transform-style" | "translate" | "translate-x" | "translate-y" | "translate-z" | "translate-none" | "zoom" | "accent" | "appearance" | "caret-color" | "color-scheme" | "cursor" | "field-sizing" | "pointer-events" | "resize" | "scroll-behavior" | "scrollbar-thumb-color" | "scrollbar-track-color" | "scrollbar-gutter" | "scrollbar-w" | "scroll-m" | "scroll-mx" | "scroll-my" | "scroll-ms" | "scroll-me" | "scroll-mbs" | "scroll-mbe" | "scroll-mt" | "scroll-mr" | "scroll-mb" | "scroll-ml" | "scroll-p" | "scroll-px" | "scroll-py" | "scroll-ps" | "scroll-pe" | "scroll-pbs" | "scroll-pbe" | "scroll-pt" | "scroll-pr" | "scroll-pb" | "scroll-pl" | "snap-align" | "snap-stop" | "snap-type" | "snap-strictness" | "touch" | "touch-x" | "touch-y" | "touch-pz" | "select" | "will-change" | "fill" | "stroke-w" | "stroke" | "forced-color-adjust" | "contain" | "contain-size" | "contain-layout" | "contain-paint" | "contain-style"
|
|
24
|
+
|
|
25
|
+
/** every theme scale key in the default config */
|
|
26
|
+
export type DefaultThemeGroupIds = "animate" | "aspect" | "blur" | "breakpoint" | "color" | "container" | "drop-shadow" | "ease" | "font" | "font-weight" | "inset-shadow" | "leading" | "perspective" | "radius" | "shadow" | "spacing" | "text" | "text-shadow" | "tracking"
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MIT License
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2026 shadcn
|
|
5
|
+
*
|
|
6
|
+
* Vendored from https://github.com/shadcn-ui/cn
|
|
7
|
+
* tag cn@0.4.0
|
|
8
|
+
* commit 84db83298f69a229d6f1ffc5d8c8d99ef451fb49
|
|
9
|
+
* Source: packages/cn/src/theme-css.ts
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
// Reads the theme scales Tailwind v4 stylesheets declare, so `cn build`
|
|
13
|
+
// can register them without a hand-written config. Only `@theme` blocks
|
|
14
|
+
// are read: `--radius-card` adds `card` to the radius scale, and
|
|
15
|
+
// `--radius-*: initial` replaces the default scale with the declared names,
|
|
16
|
+
// the way Tailwind does. Relative `@import`s are followed; packages are not.
|
|
17
|
+
import { readFileSync } from "node:fs"
|
|
18
|
+
import { dirname, resolve } from "node:path"
|
|
19
|
+
import type { ConfigExtension } from "./compiler.ts"
|
|
20
|
+
|
|
21
|
+
// Tailwind namespace → cn theme scale. Longest first, so `--text-shadow-x`
|
|
22
|
+
// is a text shadow and `--font-weight-x` a weight. `--color-*` and
|
|
23
|
+
// `--font-*` are left out: cn already accepts any name on those scales.
|
|
24
|
+
const NAMESPACES: [string, string][] = [
|
|
25
|
+
["inset-shadow", "inset-shadow"],
|
|
26
|
+
["drop-shadow", "drop-shadow"],
|
|
27
|
+
["text-shadow", "text-shadow"],
|
|
28
|
+
["font-weight", "font-weight"],
|
|
29
|
+
["perspective", "perspective"],
|
|
30
|
+
["breakpoint", "breakpoint"],
|
|
31
|
+
["container", "container"],
|
|
32
|
+
["tracking", "tracking"],
|
|
33
|
+
["spacing", "spacing"],
|
|
34
|
+
["leading", "leading"],
|
|
35
|
+
["animate", "animate"],
|
|
36
|
+
["radius", "radius"],
|
|
37
|
+
["shadow", "shadow"],
|
|
38
|
+
["aspect", "aspect"],
|
|
39
|
+
["blur", "blur"],
|
|
40
|
+
["ease", "ease"],
|
|
41
|
+
["text", "text"],
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
const stripComments = (css: string) => css.replace(/\/\*[\s\S]*?\*\//g, "")
|
|
45
|
+
|
|
46
|
+
// Bodies of every `@theme` block, at any nesting depth.
|
|
47
|
+
const themeBlocks = (css: string) => {
|
|
48
|
+
const bodies: string[] = []
|
|
49
|
+
const re = /@theme\b[^{;]*\{/g
|
|
50
|
+
while (re.exec(css)) {
|
|
51
|
+
let depth = 1
|
|
52
|
+
let i = re.lastIndex
|
|
53
|
+
for (; i < css.length && depth > 0; i++) {
|
|
54
|
+
if (css[i] === "{") depth++
|
|
55
|
+
else if (css[i] === "}") depth--
|
|
56
|
+
}
|
|
57
|
+
bodies.push(css.slice(re.lastIndex, i - 1))
|
|
58
|
+
re.lastIndex = i
|
|
59
|
+
}
|
|
60
|
+
return bodies
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Whether a stylesheet is a Tailwind entry or declares theme values. */
|
|
64
|
+
export const isTailwindCss = (css: string) =>
|
|
65
|
+
/@theme\b/.test(css) || /@import\s+(?:url\(\s*)?["']tailwindcss/.test(css)
|
|
66
|
+
|
|
67
|
+
// Flare patch: return every specifier; `themeFromCss` decides how each resolves.
|
|
68
|
+
const importPaths = (css: string) => {
|
|
69
|
+
const paths: string[] = []
|
|
70
|
+
const re = /@import\s+(?:url\(\s*)?["']([^"']+)["']/g
|
|
71
|
+
let match
|
|
72
|
+
while ((match = re.exec(css))) paths.push(match[1]!)
|
|
73
|
+
return paths
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Flare patch: per-utility color namespaces (`--text-color-muted`) are
|
|
77
|
+
// colors, which cn already accepts by any name; they must not land on the
|
|
78
|
+
// font-size (`text`) or other scales.
|
|
79
|
+
const COLOR_NAMESPACES = [
|
|
80
|
+
"background-color",
|
|
81
|
+
"text-color",
|
|
82
|
+
"border-color",
|
|
83
|
+
"ring-color",
|
|
84
|
+
"ring-offset-color",
|
|
85
|
+
"outline-color",
|
|
86
|
+
"decoration-color",
|
|
87
|
+
"divide-color",
|
|
88
|
+
"placeholder-color",
|
|
89
|
+
"caret-color",
|
|
90
|
+
"accent-color",
|
|
91
|
+
"shadow-color",
|
|
92
|
+
"inset-shadow-color",
|
|
93
|
+
"fill",
|
|
94
|
+
"stroke",
|
|
95
|
+
]
|
|
96
|
+
|
|
97
|
+
/** Resolves a bare `@import` specifier (a package) to a file, from the importing file's directory. */
|
|
98
|
+
export type BareImportResolver = (specifier: string, fromDir: string) => string
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* The theme scales declared in stylesheets and the files they import, as a
|
|
102
|
+
* config extension: declared names under `extend`, and scales reset with
|
|
103
|
+
* `--<namespace>-*: initial` under `override`. Also returns every file read,
|
|
104
|
+
* so a watcher can rebuild when one changes.
|
|
105
|
+
*
|
|
106
|
+
* Flare patch: bare (package) imports are followed through `resolveBare`;
|
|
107
|
+
* `tailwindcss` itself is skipped because its defaults are already the base config.
|
|
108
|
+
*/
|
|
109
|
+
export const themeFromCss = (entries: readonly string[], resolveBare?: BareImportResolver) => {
|
|
110
|
+
const files: string[] = []
|
|
111
|
+
let entry = ""
|
|
112
|
+
const names = new Map<string, Set<string>>()
|
|
113
|
+
const reset = new Set<string>()
|
|
114
|
+
const visit = (path: string) => {
|
|
115
|
+
if (files.includes(path)) return
|
|
116
|
+
files.push(path)
|
|
117
|
+
let css
|
|
118
|
+
try {
|
|
119
|
+
css = stripComments(readFileSync(path, "utf8"))
|
|
120
|
+
} catch (err) {
|
|
121
|
+
throw new Error(
|
|
122
|
+
`cannot read css ${path === entry ? path : `${path} (imported from ${entry})`}: ${(err as Error).message}`,
|
|
123
|
+
{ cause: err }
|
|
124
|
+
)
|
|
125
|
+
}
|
|
126
|
+
for (const spec of importPaths(css)) {
|
|
127
|
+
if (spec.startsWith("./") || spec.startsWith("../") || spec.startsWith("/")) {
|
|
128
|
+
visit(resolve(dirname(path), spec))
|
|
129
|
+
} else if (resolveBare && spec !== "tailwindcss" && !spec.startsWith("tailwindcss/")) {
|
|
130
|
+
visit(resolveBare(spec, dirname(path)))
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
for (const body of themeBlocks(css)) {
|
|
134
|
+
for (const decl of body.split(";")) {
|
|
135
|
+
const colon = decl.indexOf(":")
|
|
136
|
+
if (colon === -1) continue
|
|
137
|
+
const prop = decl.slice(0, colon).trim()
|
|
138
|
+
const value = decl.slice(colon + 1).trim()
|
|
139
|
+
if (!prop.startsWith("--")) continue
|
|
140
|
+
if (prop === "--*" && value === "initial") {
|
|
141
|
+
for (const [, scale] of NAMESPACES) reset.add(scale)
|
|
142
|
+
continue
|
|
143
|
+
}
|
|
144
|
+
if (COLOR_NAMESPACES.some((ns) => prop.startsWith(`--${ns}-`))) continue
|
|
145
|
+
const entry = NAMESPACES.find(([ns]) => prop.startsWith(`--${ns}-`))
|
|
146
|
+
if (!entry) continue
|
|
147
|
+
const [ns, scale] = entry
|
|
148
|
+
const name = prop.slice(ns.length + 3)
|
|
149
|
+
if (name === "*") {
|
|
150
|
+
if (value === "initial") reset.add(scale)
|
|
151
|
+
continue
|
|
152
|
+
}
|
|
153
|
+
// `--text-display--line-height` is a sub-property of `display`.
|
|
154
|
+
if (!name || name.includes("--")) continue
|
|
155
|
+
if (value === "initial") {
|
|
156
|
+
names.get(scale)?.delete(name)
|
|
157
|
+
continue
|
|
158
|
+
}
|
|
159
|
+
let set = names.get(scale)
|
|
160
|
+
if (!set) names.set(scale, (set = new Set()))
|
|
161
|
+
set.add(name)
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
for (const file of entries) {
|
|
166
|
+
entry = resolve(file)
|
|
167
|
+
visit(entry)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const extend: Record<string, string[]> = {}
|
|
171
|
+
const override: Record<string, string[]> = {}
|
|
172
|
+
for (const [scale, set] of names) {
|
|
173
|
+
if (!reset.has(scale)) extend[scale] = [...set]
|
|
174
|
+
}
|
|
175
|
+
for (const scale of reset) override[scale] = [...(names.get(scale) ?? [])]
|
|
176
|
+
const extension: ConfigExtension = {}
|
|
177
|
+
if (Object.keys(extend).length) extension.extend = { theme: extend }
|
|
178
|
+
if (Object.keys(override).length) extension.override = { theme: override }
|
|
179
|
+
return { extension, files }
|
|
180
|
+
}
|