@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.
@@ -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
+ }