@adea-ai/ui 0.95.3 → 0.95.5

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/dist/NOTICE CHANGED
@@ -38,6 +38,8 @@ than copied:
38
38
  SolidJS (solid-js) MIT License
39
39
  lucide (lucide-solid) ISC License
40
40
  Tailwind CSS MIT License
41
+ cn (cn@0.4.0) MIT License; generated tables retain the
42
+ upstream notice in `src/lib/cn-tables.generated.ts`
41
43
 
42
44
  The shadcn/ui design vocabulary is used throughout the system. Its NativeSelect
43
45
  source is translated in one component and separately attributed below.
@@ -0,0 +1,28 @@
1
+ declare const _default: {
2
+ GROUP_COUNT: number;
3
+ customValidatorNames: string[];
4
+ edgeStart: Int32Array<ArrayBufferLike>;
5
+ labelStart: Int32Array<ArrayBufferLike>;
6
+ labelText: string;
7
+ edgeTarget: Int32Array<ArrayBuffer>;
8
+ nodeGroup: Int32Array<ArrayBufferLike>;
9
+ nodeVlist: Int32Array<ArrayBuffer>;
10
+ vlistPat: Int32Array<ArrayBufferLike>;
11
+ vlistOps: Int32Array<ArrayBufferLike>;
12
+ vlistRef: Int32Array<ArrayBufferLike>;
13
+ vlistGroup: Int32Array<ArrayBufferLike>;
14
+ litAnchor: Int32Array<ArrayBuffer>;
15
+ litGroup: Int32Array<ArrayBuffer>;
16
+ litPool: Int32Array<ArrayBuffer>;
17
+ poolOffsets: Int32Array<ArrayBuffer>;
18
+ poolText: string;
19
+ adjGid: Int32Array<ArrayBufferLike>;
20
+ adjStart: Int32Array<ArrayBufferLike>;
21
+ adjTgt: Int32Array<ArrayBufferLike>;
22
+ patGid: Int32Array<ArrayBufferLike>;
23
+ patTgt: Int32Array<ArrayBufferLike>;
24
+ postfixLookupGroups: Int32Array<ArrayBufferLike>;
25
+ orderSensitiveModifiers: string;
26
+ };
27
+ export default _default;
28
+ //# sourceMappingURL=cn-tables.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn-tables.generated.d.ts","sourceRoot":"","sources":["../../src/lib/cn-tables.generated.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0IA,wBAMC"}
@@ -0,0 +1,131 @@
1
+ //#region src/lib/cn-tables.generated.ts
2
+ var P = 48;
3
+ var U = (s, o = 0) => {
4
+ const out = new Int32Array(s.length);
5
+ for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i) - P - o;
6
+ return out;
7
+ };
8
+ var PS = (counts) => {
9
+ const out = new Int32Array(counts.length + 1);
10
+ for (let i = 0; i < counts.length; i++) out[i + 1] = out[i] + counts[i];
11
+ return out;
12
+ };
13
+ var DZ = (s) => {
14
+ const out = new Int32Array(s.length);
15
+ let a = 0;
16
+ for (let i = 0; i < s.length; i++) {
17
+ const z = s.charCodeAt(i) - P;
18
+ a += z >>> 1 ^ -(z & 1);
19
+ out[i] = a;
20
+ }
21
+ return out;
22
+ };
23
+ var GROUP_COUNT = 387;
24
+ var customValidatorNames = [];
25
+ var edgeStart = PS(U("E0500002005282000000002000150000020021820000011200000003022202000300004200120000200420001200021200301200010400162000010000220021010:2192001200220012000220012000200200200400010200040000000000400200108200110100000022010313000162002000020020012020080213000228200000000082000000000120002000120020020040101020300130001001010"));
26
+ var labelStart = PS(U(":11111111211111119311546544411119731869:671397415686432441111111111161114151214313433415:78311132233313187211117221449443411141111151152226611131111112212518142224214215421421542142424242516171151615616347111111111197911327451111111111111111111113134714133513411111311111111111111111111112444411111342312715245411117:3"));
27
+ var labelText = "@containerabcdefghinlmoprstunderlineviawzccentlignnimatespectuto-colsrowsaglorightnessckdrop-sisbcontrastfiltergrayscalehue-rotateinvertopacityslurrightnessaturateepia-coniclinearpositionradialsizeockurrderttom-belrstxyespacing-xyaretoursorlnt-umnsendspantartainentrasteividerop-shadowurationcorationlay-xyasendillexontromlter-featuresstretchapr-xyayscaleidow-colsrowsue-rotatedentlinesetvert-beringsxyeshadoweiadingftnest-clamp-imageabein-lrstxyskx--b-coniclpositionrsizet-x-y-fromto-fromto-inearfromto-fromto-adialfromto-fromtofromtofromtofromtoblockhinlinew-screenesblockhinlinewbjectpacityrutlinederigin-offsetbelrstxyesrspective-originaceholderioghtng-offsettateundedw-xyz-belrstlreseslr-endspantartaturatecepiahizekewpace-taleroll-xyz-barmpbelrstxyesbelrstxyes-thumbrackadowrink-xyxyartrokeabextora-shadowpckingnsformitionlate-xyz-offsetill-changeoom";
28
+ var edgeTarget = (() => {
29
+ const N = edgeStart.length - 1;
30
+ const sizes = new Int32Array(N);
31
+ for (let i = N - 1; i >= 0; i--) {
32
+ let s = 1;
33
+ let c = i + 1;
34
+ for (let k = edgeStart[i]; k < edgeStart[i + 1]; k++) {
35
+ s += sizes[c];
36
+ c += sizes[c];
37
+ }
38
+ sizes[i] = s;
39
+ }
40
+ const out = new Int32Array(edgeStart[N]);
41
+ let e = 0;
42
+ for (let i = 0; i < N; i++) {
43
+ let c = i + 1;
44
+ for (let k = edgeStart[i]; k < edgeStart[i + 1]; k++) {
45
+ out[e++] = c;
46
+ c += sizes[c];
47
+ }
48
+ }
49
+ return out;
50
+ })();
51
+ var nodeGroup = U("02000000000000900<=0?000B000F00F00ŏI0J0LNPRTVX0000]_a00000000000000000000000rst0000000zŏ00000000000…ŏ000ˆ0000ŏ0000000000—0000000000000000000000000000000000000000000000000000Ë000000000000000000000Þ000000000000000000ð0000000ø0ùúûüýþÿĀāĂ㥹Ć000000000000000000000000000000000000000000ħ0ĨĪ00000000000000000000ļĽ00000Ŭ000000", 1);
52
+ var vlistPat = PS(U("123333359346463635126536711576"));
53
+ var vlistOps = U("93203242332583253248325D>E?F@03263243255B:032523853:0325B:8GA032542H<C=12727B:0328432553;D>E?3257D>032585:0325B:;0328B:032");
54
+ var vlistRef = U("012113445661666666789111:5;;;;;;;;444;;;:62999<1161=62>>?61:21@ABCD4446996:64E:::;:?::64:F114GHHIHHHHIHH1HH1HH1HHHHHH::EEJ4444::EE4444441691;644444114244444:;K6666555555555555555999666664444444444444444444444226?6:66644L9M?D:111::::6DE199");
55
+ var vlistGroup = DZ("020200202020020020020020020020200200200200200200200002020202001003040106000200200200200200200200200200200200200200200200200200200200200200200200200200200200020020020020020020002020200202002002002002002002002002002020002002020020200220200200200200200200200200200200020020020000200020002000200200200020020020002000200200200020020202002020202000200200020022000200200020020002002000200220002002000200W0Z00020020002002020002002000200g0j0002002000200200020020002002000200200020020002000200002000002002002002002000200020000200002002002002002002002020020020200200200200200200200200202020020020020020020020020002002002020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020002002002002002002000200200200200200200200200200020202020002000200020002002002002000020200200");
56
+ var nodeVlist = (() => {
57
+ const out = (/* @__PURE__ */ new Int32Array(319)).fill(-1);
58
+ const A = DZ("02422242:222222242224222242442222222422222244442242226224222426222422442462222422622222222626222462242622422622422424242422222222422222222242422222222222222222622442224222222222222224424442262222222222222222222226224222424242422224422422422222");
59
+ const V = DZ("02222222222222222222202222222222222222222222221422222222222222222222222222222222222Y\\222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221422222222222222222222222222222222222222Ŀł222222222222222222");
60
+ for (let i = 0; i < A.length; i++) out[A[i]] = V[i];
61
+ return out;
62
+ })();
63
+ var SETS = "container |break-after- all auto avoid avoid-page column left page right|break-before- all auto avoid avoid-page column left page right|break-inside-a uto void void-column void-page|box-decoration- clone slice|box- border content| contents flow-root hidden table table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group| not-sr-only sr-only|float- end left none right start|clear- both end left none right start|isolat e ion-auto|overflow- auto clip hidden scroll visible|overflow-x- auto clip hidden scroll visible|overflow-y- auto clip hidden scroll visible|overscroll- auto contain none|overscroll-x- auto contain none|overscroll-y- auto contain none| absolute fixed relative static sticky| collapse invisible visible|justify- around baseline between center center-safe end end-safe evenly normal start stretch|justify-items- center center-safe end end-safe normal start stretch|justify-self- auto center center-safe end end-safe start stretch|items- baseline baseline-last center center-safe end end-safe start stretch|self- auto baseline baseline-last center center-safe end end-safe start stretch|place-content- around baseline between center center-safe end end-safe evenly start stretch|place-items- baseline center center-safe end end-safe start stretch|place-self- auto center center-safe end end-safe start stretch| antialiased subpixel-antialiased| italic not-italic|normal-nums |ordinal |slashed-zero | lining-nums oldstyle-nums| proportional-nums tabular-nums| diagonal-fractions stacked-fractions| no-underline overline| capitalize lowercase normal-case uppercase|truncate |whitespace- break-spaces normal nowrap pre pre-line pre-wrap|break- all keep normal words|wrap- anywhere break-word normal|hyphens- auto manual none|mix-blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay plus-darker plus-lighter saturation screen soft-light|table- auto fixed|caption- bottom top|backface- hidden visible|appearance- auto none|scheme- dark light light-dark normal only-dark only-light|field-sizing- content fixed|pointer-events- auto none|resize -none -x -y|snap- align-none center end start|snap- always normal|snap- both none x y|snap- mandatory proximity|touch- auto manipulation none|touch-pan- left right x|touch-pan- down up y|touch-pinch-zoom |select- all auto none text|forced-color-adjust- auto none| normal size| baseline bottom middle sub super text-bottom text-top top| bounce none ping pulse spin| auto square video| auto fr max min px|none | auto full px| fixed local scroll|clip- border content padding text|origin- border content padding| bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| no-repeat repeat repeat-round repeat-space repeat-x repeat-y| auto contain cover| gradient-to-b gradient-to-bl gradient-to-br gradient-to-l gradient-to-r gradient-to-t gradient-to-tl gradient-to-tr none|blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay saturation screen soft-light|to- b bl br l r t tl tr| auto dvh fit full lh lvh max min px screen svh| dashed dotted double hidden none solid| collapse separate|px |auto |full | content none strict| inline-size size|layout |paint |style | around baseline between center center-safe end end-safe evenly normal start stretch| alias all-scroll auto cell col-resize context-menu copy crosshair default e-resize ew-resize grab grabbing help move n-resize ne-resize nesw-resize no-drop none not-allowed ns-resize nw-resize nwse-resize pointer progress row-resize s-resize se-resize sw-resize text vertical-text w-resize wait zoom-in zoom-out| dashed dotted double solid wavy| auto from-font|reverse |initial | in in-out initial linear out| col col-reverse row row-reverse| nowrap wrap wrap-reverse| auto initial none| black bold extrabold extralight light medium normal semibold thin| condensed expanded extra-condensed extra-expanded normal semi-condensed semi-expanded ultra-condensed ultra-expanded|flow- col col-dense dense row row-dense| none subgrid| auto dvh dvw fit full lh lvh lvw max min px screen svh svw| control-2xl control-2xs control-lg control-md control-sm control-xl control-xs rail-item row-lg row-md row-sm statusbar topbar| block flex grid table| auto dvw fit full lvw max min px screen svw| loose none normal px relaxed snug tight|through |item | inside outside| decimal disc none| auto px| clip-border clip-content clip-fill clip-padding clip-stroke clip-view no-clip| add exclude intersect subtract| alpha luminance match|origin- border content fill padding stroke view|type- alpha luminance| circle ellipse| closest-corner closest-side farthest-corner farthest-side|at- bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| dvh fit full lh lvh max min none px screen svh| auto dvh dvw fit full lh lvh lvw max min none px screen svh svw| dvw fit full lvw max min none px screen svw| auto dvh dvw fit full lvh lvw max min none prose px svh svw| auto dvh dvw fit full lvh lvw max min none px screen svh svw| contain cover fill none scale-down| first last none| distant dramatic midrange near none normal|inset | full none|3d | auto smooth|gutter- auto both stable| auto none thin| inner none| auto dvh dvw fit full lvh lvw max min px svh svw| control-2xl control-2xs control-lg control-md control-sm control-xl control-xs rail-item|base | center end justify left right start| clip ellipsis| balance nowrap pretty wrap| normal tight tighter wide wider widest| cpu gpu none| 3d flat| all colors none opacity shadow transform| discrete normal| full px| auto dvh dvw fit full lvh lvw max min px screen svh svw| rail rail-expanded sidebar sidebar-compact| auto contents scroll transform".split("|").map((s) => {
64
+ const tails = s.split(" ");
65
+ const prefix = tails.shift();
66
+ for (let i = 0; i < tails.length; i++) tails[i] = prefix + tails[i];
67
+ return tails;
68
+ });
69
+ var AA = DZ("0000000000000000000000000000000000000000000000000000000000000262242:6@200000006:240B428:44224000020460442224262200266426424062026224222824220022400000000\\00N222422242222222224062242222222422226264222422222222222222442804222422222222222222222222220<40<02042600024440202042244022");
70
+ var AG = DZ("ɠ222222222222222222222222222222222222222222222222222222222222˕4222226>ʶ22ʷʺʷ2ʸʷ42ʴ2ʓ22>621422ɶ222ɹɼɷɺɷɺ22ɱ42222ɨ2ɧ26622ɘɓ24ɐɋƸƵ222]d24242ǖǓƚÆȭ2263ȪȧȪ2222222ǥ222222222222222222DŽƿ2ǀƷ2222222422222ƞƓ22222222222222222222144Ũť22Ťš222222222222222222222ĺ2ij6İħĪħĪɥŰ4Ĥ¯²ġ822ĘĕĘ2ė22226Čĉ2");
71
+ var AS = DZ("02222222222222222222222222222222222222222222222222222222222222222202022222222222EH2200IL021042222Y\\222IL0cf2e10j2222U00X2022]`2{0000120~}€„22‡Š‰:22~22222222222G000sˆOVI00000œ2>40000ŽŸB00000Iª«000®00000000000000021M°¯00²•000000000000000000000˜2222ŸHGHa1¾222Ã2Ä2222ÍÐ000±´22·");
72
+ var litAnchor = /* @__PURE__ */ new Int32Array(1020);
73
+ var litGroup = /* @__PURE__ */ new Int32Array(1020);
74
+ var litPool = /* @__PURE__ */ new Int32Array(1020);
75
+ var poolText = "";
76
+ var poolOffsets = /* @__PURE__ */ new Int32Array(1072);
77
+ {
78
+ const tailRef = /* @__PURE__ */ new Map();
79
+ let nextRef = 0;
80
+ let e = 0;
81
+ for (let i = 0; i < AA.length; i++) for (const tail of SETS[AS[i]]) {
82
+ let r = tailRef.get(tail);
83
+ if (r === void 0) {
84
+ r = nextRef++;
85
+ tailRef.set(tail, r);
86
+ poolOffsets[r * 2] = poolText.length;
87
+ poolOffsets[r * 2 + 1] = tail.length;
88
+ poolText += tail;
89
+ }
90
+ litAnchor[e] = AA[i];
91
+ litGroup[e] = AG[i];
92
+ litPool[e] = r;
93
+ e++;
94
+ }
95
+ }
96
+ var adjGid = DZ("0b2N:222@R>F@286¦2@H2D266226FB22B2>BD\\6N22222Z222D222t");
97
+ var adjStart = PS(U("1::24444432:442:44:44>222222:44:4421322511111311111114"));
98
+ var adjTgt = DZ("2Š4A;33N=C@H4A;33N=C@<27;83:;8393NQ:3NQʰ222ˉºŴŽ2R2=18cƴÅҜ=cĞÛC1ƈǝȈ:ħ25=11D3A@4=<1;1DEr25;11B3?<6;:371BCn9@7=<8192>2E121@9@EHE@9>2T25511<398454131<=V25511<398454131<=„ƧNž2Ĕé242L222290000f22500ɛ000ǘ222");
99
+ var patGid = U("ij");
100
+ var patTgt = U("—");
101
+ var postfixLookupGroups = U("1");
102
+ var cn_tables_generated_default = {
103
+ GROUP_COUNT,
104
+ customValidatorNames,
105
+ edgeStart,
106
+ labelStart,
107
+ labelText,
108
+ edgeTarget,
109
+ nodeGroup,
110
+ nodeVlist,
111
+ vlistPat,
112
+ vlistOps,
113
+ vlistRef,
114
+ vlistGroup,
115
+ litAnchor,
116
+ litGroup,
117
+ litPool,
118
+ poolOffsets,
119
+ poolText,
120
+ adjGid,
121
+ adjStart,
122
+ adjTgt,
123
+ patGid,
124
+ patTgt,
125
+ postfixLookupGroups,
126
+ orderSensitiveModifiers: "* ** after backdrop before details-content file first-letter first-line marker placeholder selection"
127
+ };
128
+ //#endregion
129
+ export { cn_tables_generated_default as default };
130
+
131
+ //# sourceMappingURL=cn-tables.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn-tables.generated.js","names":[],"sources":["../../src/lib/cn-tables.generated.ts"],"sourcesContent":["/*\n * Generated class-group tables from cn@0.4.0 by cn/build, using the complete\n * config and no source scanning. cn is Copyright (c) 2026 shadcn, MIT licensed.\n * This MIT notice is retained because the generated decoder is distributed in\n * this file and in the standalone registry payload.\n *\n * MIT License\n *\n * Copyright (c) 2026 shadcn\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n// GENERATED by `cn build` — do not edit.\n// Pair with createCn from \"cn/engine\":\n// import tables from \"./cn-tables.generated.ts\"\n// import { createCn } from \"cn/engine\"\n// export const cn = createCn(tables)\nconst P = 48\nconst U = (s: string, o = 0): Int32Array => {\n const out = new Int32Array(s.length)\n for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i) - P - o\n return out\n}\nconst PS = (counts: Int32Array): Int32Array => {\n const out = new Int32Array(counts.length + 1)\n for (let i = 0; i < counts.length; i++) out[i + 1] = out[i]! + counts[i]!\n return out\n}\n// zigzag-delta stream → running values\nconst DZ = (s: string): Int32Array => {\n const out = new Int32Array(s.length)\n let a = 0\n for (let i = 0; i < s.length; i++) {\n const z = s.charCodeAt(i) - P\n a += (z >>> 1) ^ -(z & 1)\n out[i] = a\n }\n return out\n}\nconst GROUP_COUNT = 387\nconst customValidatorNames: string[] = []\nconst edgeStart = PS(U(\"E0500002005282000000002000150000020021820000011200000003022202000300004200120000200420001200021200301200010400162000010000220021010:2192001200220012000220012000200200200400010200040000000000400200108200110100000022010313000162002000020020012020080213000228200000000082000000000120002000120020020040101020300130001001010\"))\nconst labelStart = PS(U(\":11111111211111119311546544411119731869:671397415686432441111111111161114151214313433415:78311132233313187211117221449443411141111151152226611131111112212518142224214215421421542142424242516171151615616347111111111197911327451111111111111111111113134714133513411111311111111111111111111112444411111342312715245411117:3\"))\nconst labelText = \"@containerabcdefghinlmoprstunderlineviawzccentlignnimatespectuto-colsrowsaglorightnessckdrop-sisbcontrastfiltergrayscalehue-rotateinvertopacityslurrightnessaturateepia-coniclinearpositionradialsizeockurrderttom-belrstxyespacing-xyaretoursorlnt-umnsendspantartainentrasteividerop-shadowurationcorationlay-xyasendillexontromlter-featuresstretchapr-xyayscaleidow-colsrowsue-rotatedentlinesetvert-beringsxyeshadoweiadingftnest-clamp-imageabein-lrstxyskx--b-coniclpositionrsizet-x-y-fromto-fromto-inearfromto-fromto-adialfromto-fromtofromtofromtofromtoblockhinlinew-screenesblockhinlinewbjectpacityrutlinederigin-offsetbelrstxyesrspective-originaceholderioghtng-offsettateundedw-xyz-belrstlreseslr-endspantartaturatecepiahizekewpace-taleroll-xyz-barmpbelrstxyesbelrstxyes-thumbrackadowrink-xyxyartrokeabextora-shadowpckingnsformitionlate-xyz-offsetill-changeoom\"\n// pre-order tree: targets derived from edge counts via subtree sizes\nconst edgeTarget = (() => {\n const N = edgeStart.length - 1\n const sizes = new Int32Array(N)\n for (let i = N - 1; i >= 0; i--) {\n let s = 1\n let c = i + 1\n for (let k = edgeStart[i]!; k < edgeStart[i + 1]!; k++) { s += sizes[c]!; c += sizes[c]! }\n sizes[i] = s\n }\n const out = new Int32Array(edgeStart[N]!)\n let e = 0\n for (let i = 0; i < N; i++) {\n let c = i + 1\n for (let k = edgeStart[i]!; k < edgeStart[i + 1]!; k++) { out[e++] = c; c += sizes[c]! }\n }\n return out\n})()\nconst nodeGroup = U(\"02000000000000900<=0?000B000F00F00ŏI0J0LNPRTVX0000]_a00000000000000000000000rst0000000zŏ00000000000…ŏ000ˆ0000ŏ0000000000—0000000000000000000000000000000000000000000000000000Ë000000000000000000000Þ000000000000000000ð0000000ø0ùúûüýþÿĀāĂ㥹Ć000000000000000000000000000000000000000000ħ0ĨĪ00000000000000000000ļĽ00000Ŭ000000\", 1)\n// vlists = op-pattern pool + per-list refs; the engine indexes these directly\nconst vlistPat = PS(U(\"123333359346463635126536711576\"))\nconst vlistOps = U(\"93203242332583253248325D>E?F@03263243255B:032523853:0325B:8GA032542H<C=12727B:0328432553;D>E?3257D>032585:0325B:;0328B:032\")\nconst vlistRef = U(\"012113445661666666789111:5;;;;;;;;444;;;:62999<1161=62>>?61:21@ABCD4446996:64E:::;:?::64:F114GHHIHHHHIHH1HH1HH1HHHHHH::EEJ4444::EE4444441691;644444114244444:;K6666555555555555555999666664444444444444444444444226?6:66644L9M?D:111::::6DE199\")\nconst vlistGroup = DZ(\"020200202020020020020020020020200200200200200200200002020202001003040106000200200200200200200200200200200200200200200200200200200200200200200200200200200200020020020020020020002020200202002002002002002002002002002020002002020020200220200200200200200200200200200200020020020000200020002000200200200020020020002000200200200020020202002020202000200200020022000200200020020002002000200220002002000200W0Z00020020002002020002002000200g0j0002002000200200020020002002000200200020020002000200002000002002002002002000200020000200002002002002002002002020020020200200200200200200200200202020020020020020020020020002002002020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020002002002002002002000200200200200200200200200200020202020002000200020002002002002000020200200\")\n// nodeVlist rebuilt sparse: (anchor deltas, vlist ids)\nconst nodeVlist = (() => {\n const out = new Int32Array(319).fill(-1)\n const A = DZ(\"02422242:222222242224222242442222222422222244442242226224222426222422442462222422622222222626222462242622422622422424242422222222422222222242422222222222222222622442224222222222222224424442262222222222222222222226224222424242422224422422422222\")\n const V = DZ(\"02222222222222222222202222222222222222222222221422222222222222222222222222222222222Y\\\\222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221422222222222222222222222222222222222222Ŀł222222222222222222\")\n for (let i = 0; i < A.length; i++) out[A[i]!] = V[i]!\n return out\n})()\nconst SETS = \"container |break-after- all auto avoid avoid-page column left page right|break-before- all auto avoid avoid-page column left page right|break-inside-a uto void void-column void-page|box-decoration- clone slice|box- border content| contents flow-root hidden table table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group| not-sr-only sr-only|float- end left none right start|clear- both end left none right start|isolat e ion-auto|overflow- auto clip hidden scroll visible|overflow-x- auto clip hidden scroll visible|overflow-y- auto clip hidden scroll visible|overscroll- auto contain none|overscroll-x- auto contain none|overscroll-y- auto contain none| absolute fixed relative static sticky| collapse invisible visible|justify- around baseline between center center-safe end end-safe evenly normal start stretch|justify-items- center center-safe end end-safe normal start stretch|justify-self- auto center center-safe end end-safe start stretch|items- baseline baseline-last center center-safe end end-safe start stretch|self- auto baseline baseline-last center center-safe end end-safe start stretch|place-content- around baseline between center center-safe end end-safe evenly start stretch|place-items- baseline center center-safe end end-safe start stretch|place-self- auto center center-safe end end-safe start stretch| antialiased subpixel-antialiased| italic not-italic|normal-nums |ordinal |slashed-zero | lining-nums oldstyle-nums| proportional-nums tabular-nums| diagonal-fractions stacked-fractions| no-underline overline| capitalize lowercase normal-case uppercase|truncate |whitespace- break-spaces normal nowrap pre pre-line pre-wrap|break- all keep normal words|wrap- anywhere break-word normal|hyphens- auto manual none|mix-blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay plus-darker plus-lighter saturation screen soft-light|table- auto fixed|caption- bottom top|backface- hidden visible|appearance- auto none|scheme- dark light light-dark normal only-dark only-light|field-sizing- content fixed|pointer-events- auto none|resize -none -x -y|snap- align-none center end start|snap- always normal|snap- both none x y|snap- mandatory proximity|touch- auto manipulation none|touch-pan- left right x|touch-pan- down up y|touch-pinch-zoom |select- all auto none text|forced-color-adjust- auto none| normal size| baseline bottom middle sub super text-bottom text-top top| bounce none ping pulse spin| auto square video| auto fr max min px|none | auto full px| fixed local scroll|clip- border content padding text|origin- border content padding| bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| no-repeat repeat repeat-round repeat-space repeat-x repeat-y| auto contain cover| gradient-to-b gradient-to-bl gradient-to-br gradient-to-l gradient-to-r gradient-to-t gradient-to-tl gradient-to-tr none|blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay saturation screen soft-light|to- b bl br l r t tl tr| auto dvh fit full lh lvh max min px screen svh| dashed dotted double hidden none solid| collapse separate|px |auto |full | content none strict| inline-size size|layout |paint |style | around baseline between center center-safe end end-safe evenly normal start stretch| alias all-scroll auto cell col-resize context-menu copy crosshair default e-resize ew-resize grab grabbing help move n-resize ne-resize nesw-resize no-drop none not-allowed ns-resize nw-resize nwse-resize pointer progress row-resize s-resize se-resize sw-resize text vertical-text w-resize wait zoom-in zoom-out| dashed dotted double solid wavy| auto from-font|reverse |initial | in in-out initial linear out| col col-reverse row row-reverse| nowrap wrap wrap-reverse| auto initial none| black bold extrabold extralight light medium normal semibold thin| condensed expanded extra-condensed extra-expanded normal semi-condensed semi-expanded ultra-condensed ultra-expanded|flow- col col-dense dense row row-dense| none subgrid| auto dvh dvw fit full lh lvh lvw max min px screen svh svw| control-2xl control-2xs control-lg control-md control-sm control-xl control-xs rail-item row-lg row-md row-sm statusbar topbar| block flex grid table| auto dvw fit full lvw max min px screen svw| loose none normal px relaxed snug tight|through |item | inside outside| decimal disc none| auto px| clip-border clip-content clip-fill clip-padding clip-stroke clip-view no-clip| add exclude intersect subtract| alpha luminance match|origin- border content fill padding stroke view|type- alpha luminance| circle ellipse| closest-corner closest-side farthest-corner farthest-side|at- bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| dvh fit full lh lvh max min none px screen svh| auto dvh dvw fit full lh lvh lvw max min none px screen svh svw| dvw fit full lvw max min none px screen svw| auto dvh dvw fit full lvh lvw max min none prose px svh svw| auto dvh dvw fit full lvh lvw max min none px screen svh svw| contain cover fill none scale-down| first last none| distant dramatic midrange near none normal|inset | full none|3d | auto smooth|gutter- auto both stable| auto none thin| inner none| auto dvh dvw fit full lvh lvw max min px svh svw| control-2xl control-2xs control-lg control-md control-sm control-xl control-xs rail-item|base | center end justify left right start| clip ellipsis| balance nowrap pretty wrap| normal tight tighter wide wider widest| cpu gpu none| 3d flat| all colors none opacity shadow transform| discrete normal| full px| auto dvh dvw fit full lvh lvw max min px screen svh svw| rail rail-expanded sidebar sidebar-compact| auto contents scroll transform\".split('|').map((s) => {\n const tails = s.split(' ')\n const prefix = tails.shift()!\n for (let i = 0; i < tails.length; i++) {\n tails[i] = prefix + tails[i]\n }\n return tails\n})\nconst AA = DZ(\"0000000000000000000000000000000000000000000000000000000000000262242:6@200000006:240B428:44224000020460442224262200266426424062026224222824220022400000000\\\\00N222422242222222224062242222222422226264222422222222222222442804222422222222222222222222220<40<02042600024440202042244022\")\nconst AG = DZ(\"ɠ222222222222222222222222222222222222222222222222222222222222˕4222226>ʶ22ʷʺʷ2ʸʷ42ʴ2ʓ22>621422ɶ222ɹɼɷɺɷɺ22ɱ42222ɨ2ɧ26622ɘɓ24ɐɋƸƵ222]d24242ǖǓƚÆȭ2263ȪȧȪ2222222ǥ222222222222222222DŽƿ2ǀƷ2222222422222ƞƓ22222222222222222222144Ũť22Ťš222222222222222222222ĺ2ij6İħĪħĪɥŰ4Ĥ¯²ġ822ĘĕĘ2ė22226Čĉ2\")\nconst AS = DZ(\"02222222222222222222222222222222222222222222222222222222222222222202022222222222EH2200IL021042222Y\\\\222IL0cf2e10j2222U00X2022]`2{0000120~}€„22‡Š‰:22~22222222222G000sˆOVI00000œ2>40000ŽŸB00000Iª«000®00000000000000021M°¯00²•000000000000000000000˜2222ŸHGHa1¾222Ã2Ä2222ÍÐ000±´22·\")\nconst litAnchor = new Int32Array(1020)\nconst litGroup = new Int32Array(1020)\nconst litPool = new Int32Array(1020)\nlet poolText = ''\nconst poolOffsets = new Int32Array(1072)\n{\n const tailRef = new Map()\n let nextRef = 0\n let e = 0\n for (let i = 0; i < AA.length; i++) {\n for (const tail of SETS[AS[i]!]!) {\n let r = tailRef.get(tail)\n if (r === undefined) {\n r = nextRef++\n tailRef.set(tail, r)\n poolOffsets[r * 2] = poolText.length\n poolOffsets[r * 2 + 1] = tail.length\n poolText += tail\n }\n litAnchor[e] = AA[i]!\n litGroup[e] = AG[i]!\n litPool[e] = r\n e++\n }\n }\n}\n// conflict adjacency (engine builds claim bitmask CSR at init)\nconst adjGid = DZ(\"0b2N:222@R>F@286¦2@H2D266226FB22B2>BD\\\\6N22222Z222D222t\")\nconst adjStart = PS(U(\"1::24444432:442:44:44>222222:44:4421322511111311111114\"))\nconst adjTgt = DZ(\"2Š4A;33N=C@H4A;33N=C@<27;83:;8393NQ:3NQʰ222ˉºŴŽ2R2=18cƴÅҜ=cĞÛC1ƈǝȈ:ħ25=11D3A@4=<1;1DEr25;11B3?<6;:371BCn9@7=<8192>2E121@9@EHE@9>2T25511<398454131<=V25511<398454131<=„ƧNž2Ĕé242L222290000f22500ɛ000ǘ222\")\nconst patGid = U(\"ij\")\nconst patTgt = U(\"—\")\nconst postfixLookupGroups = U(\"1\")\nconst orderSensitiveModifiers = \"* ** after backdrop before details-content file first-letter first-line marker placeholder selection\"\nexport default {\n GROUP_COUNT, customValidatorNames, edgeStart, labelStart, labelText,\n edgeTarget, nodeGroup, nodeVlist, vlistPat, vlistOps, vlistRef, vlistGroup,\n litAnchor, litGroup, litPool, poolOffsets, poolText,\n adjGid, adjStart, adjTgt, patGid, patTgt, postfixLookupGroups,\n orderSensitiveModifiers,\n}\n"],"mappings":";AAkCA,IAAM,IAAI;AACV,IAAM,KAAK,GAAW,IAAI,MAAkB;CACxC,MAAM,MAAM,IAAI,WAAW,EAAE,MAAM;CACnC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,IAAI,KAAK,EAAE,WAAW,CAAC,IAAI,IAAI;CAClE,OAAO;AACX;AACA,IAAM,MAAM,WAAmC;CAC3C,MAAM,MAAM,IAAI,WAAW,OAAO,SAAS,CAAC;CAC5C,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,IAAI,IAAI,KAAK,IAAI,KAAM,OAAO;CACtE,OAAO;AACX;AAEA,IAAM,MAAM,MAA0B;CAClC,MAAM,MAAM,IAAI,WAAW,EAAE,MAAM;CACnC,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;EAC/B,MAAM,IAAI,EAAE,WAAW,CAAC,IAAI;EAC5B,KAAM,MAAM,IAAK,EAAE,IAAI;EACvB,IAAI,KAAK;CACb;CACA,OAAO;AACX;AACA,IAAM,cAAc;AACpB,IAAM,uBAAiC,CAAC;AACxC,IAAM,YAAY,GAAG,EAAE,iUAAiU,CAAC;AACzV,IAAM,aAAa,GAAG,EAAE,gUAAgU,CAAC;AACzV,IAAM,YAAY;AAElB,IAAM,oBAAoB;CACtB,MAAM,IAAI,UAAU,SAAS;CAC7B,MAAM,QAAQ,IAAI,WAAW,CAAC;CAC9B,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;EAC7B,IAAI,IAAI;EACR,IAAI,IAAI,IAAI;EACZ,KAAK,IAAI,IAAI,UAAU,IAAK,IAAI,UAAU,IAAI,IAAK,KAAK;GAAE,KAAK,MAAM;GAAK,KAAK,MAAM;EAAI;EACzF,MAAM,KAAK;CACf;CACA,MAAM,MAAM,IAAI,WAAW,UAAU,EAAG;CACxC,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EACxB,IAAI,IAAI,IAAI;EACZ,KAAK,IAAI,IAAI,UAAU,IAAK,IAAI,UAAU,IAAI,IAAK,KAAK;GAAE,IAAI,OAAO;GAAG,KAAK,MAAM;EAAI;CAC3F;CACA,OAAO;AACX,EAAA,CAAG;AACH,IAAM,YAAY,EAAE,mUAAmU,CAAC;AAExV,IAAM,WAAW,GAAG,EAAE,gCAAgC,CAAC;AACvD,IAAM,WAAW,EAAE,4HAA4H;AAC/I,IAAM,WAAW,EAAE,gPAAgP;AACnQ,IAAM,aAAa,GAAG,22BAA22B;AAEj4B,IAAM,mBAAmB;CACrB,MAAM,uBAAM,IAAI,WAAW,GAAG,EAAA,CAAE,KAAK,EAAE;CACvC,MAAM,IAAI,GAAG,qPAAqP;CAClQ,MAAM,IAAI,GAAG,sPAAsP;CACnQ,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,IAAI,EAAE,MAAO,EAAE;CAClD,OAAO;AACX,EAAA,CAAG;AACH,IAAM,OAAO,8wLAA8wL,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM;CAC7yL,MAAM,QAAQ,EAAE,MAAM,GAAG;CACzB,MAAM,SAAS,MAAM,MAAM;CAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAC9B,MAAM,KAAK,SAAS,MAAM;CAE9B,OAAO;AACX,CAAC;AACD,IAAM,KAAK,GAAG,wRAAwR;AACtS,IAAM,KAAK,GAAG,uRAAuR;AACrS,IAAM,KAAK,GAAG,wRAAwR;AACtS,IAAM,4BAAY,IAAI,WAAW,IAAI;AACrC,IAAM,2BAAW,IAAI,WAAW,IAAI;AACpC,IAAM,0BAAU,IAAI,WAAW,IAAI;AACnC,IAAI,WAAW;AACf,IAAM,8BAAc,IAAI,WAAW,IAAI;AACvC;CACI,MAAM,0BAAU,IAAI,IAAI;CACxB,IAAI,UAAU;CACd,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,QAAQ,KAC3B,KAAK,MAAM,QAAQ,KAAK,GAAG,KAAO;EAC9B,IAAI,IAAI,QAAQ,IAAI,IAAI;EACxB,IAAI,MAAM,KAAA,GAAW;GACjB,IAAI;GACJ,QAAQ,IAAI,MAAM,CAAC;GACnB,YAAY,IAAI,KAAK,SAAS;GAC9B,YAAY,IAAI,IAAI,KAAK,KAAK;GAC9B,YAAY;EAChB;EACA,UAAU,KAAK,GAAG;EAClB,SAAS,KAAK,GAAG;EACjB,QAAQ,KAAK;EACb;CACJ;AAER;AAEA,IAAM,SAAS,GAAG,yDAAyD;AAC3E,IAAM,WAAW,GAAG,EAAE,wDAAwD,CAAC;AAC/E,IAAM,SAAS,GAAG,0MAA0M;AAC5N,IAAM,SAAS,EAAE,GAAG;AACpB,IAAM,SAAS,EAAE,GAAG;AACpB,IAAM,sBAAsB,EAAE,GAAG;AAEjC,IAAA,8BAAe;CACX;CAAa;CAAsB;CAAW;CAAY;CAC1D;CAAY;CAAW;CAAW;CAAU;CAAU;CAAU;CAChE;CAAW;CAAU;CAAS;CAAa;CAC3C;CAAQ;CAAU;CAAQ;CAAQ;CAAQ;CAC1C;AACJ"}
@@ -19,8 +19,9 @@ import type { CnFunction } from 'cn';
19
19
  * shows up as a control that ignores its `size` prop, long after the line
20
20
  * that caused it was written.
21
21
  *
22
- * Registering the families below is what makes "the last class wins" true for
23
- * the whole system, including for consumers overriding a component's default.
22
+ * Compiling the design-system families into full tables makes "the last class
23
+ * wins" true for the whole system, including for consumer overrides, without
24
+ * loading the runtime config/compiler path.
24
25
  */
25
26
  export declare const cn: CnFunction;
26
27
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAEpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,EAAE,EAAE,UA6Cf,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAGpC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,EAAE,EAAE,UAA6B,CAAA"}
package/dist/lib/utils.js CHANGED
@@ -1,4 +1,5 @@
1
- import { createCn } from "cn/config";
1
+ import cn_tables_generated_default from "./cn-tables.generated.js";
2
+ import { createCn } from "cn/engine";
2
3
  //#region src/lib/utils.ts
3
4
  /**
4
5
  * Merge conditional class values, letting the last conflicting utility win.
@@ -20,42 +21,11 @@ import { createCn } from "cn/config";
20
21
  * shows up as a control that ignores its `size` prop, long after the line
21
22
  * that caused it was written.
22
23
  *
23
- * Registering the families below is what makes "the last class wins" true for
24
- * the whole system, including for consumers overriding a component's default.
24
+ * Compiling the design-system families into full tables makes "the last class
25
+ * wins" true for the whole system, including for consumer overrides, without
26
+ * loading the runtime config/compiler path.
25
27
  */
26
- var cn = createCn({ extend: { classGroups: {
27
- "ds-height": [{ h: [
28
- "control-2xs",
29
- "control-xs",
30
- "control-sm",
31
- "control-md",
32
- "control-lg",
33
- "control-xl",
34
- "control-2xl",
35
- "row-sm",
36
- "row-md",
37
- "row-lg",
38
- "rail-item",
39
- "topbar",
40
- "statusbar"
41
- ] }],
42
- "ds-width": [{ w: [
43
- "rail",
44
- "rail-expanded",
45
- "sidebar",
46
- "sidebar-compact"
47
- ] }],
48
- "ds-size": [{ size: [
49
- "control-2xs",
50
- "control-xs",
51
- "control-sm",
52
- "control-md",
53
- "control-lg",
54
- "control-xl",
55
- "control-2xl",
56
- "rail-item"
57
- ] }]
58
- } } });
28
+ var cn = createCn(cn_tables_generated_default);
59
29
  //#endregion
60
30
  export { cn };
61
31
 
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../src/lib/utils.ts"],"sourcesContent":["import { createCn } from 'cn/config'\nimport type { CnFunction } from 'cn'\n\n/**\n * Merge conditional class values, letting the last conflicting utility win.\n *\n * Accepts an object whose keys are classes and whose values enable them, which\n * is the form the design-system linter can read statically:\n *\n * cn('base', { 'is-open': open(), 'is-disabled': disabled() })\n *\n * A template literal (`cn(`base--${value}`)`) is invisible to the linter and\n * will be reported, because a class the linter cannot read is a class it\n * cannot check against the theme.\n *\n * `cn` also has to be told about the utilities this design system adds. Every\n * token-derived utility (`h-control-md`, `w-rail`, `p-control-lg`, …) is an\n * unknown name to a default merge instance. Left unregistered,\n * `cn('h-control-md', 'h-control-sm')` keeps both classes and the winner is\n * decided by stylesheet order rather than by the caller — a bug that only\n * shows up as a control that ignores its `size` prop, long after the line\n * that caused it was written.\n *\n * Registering the families below is what makes \"the last class wins\" true for\n * the whole system, including for consumers overriding a component's default.\n */\nexport const cn: CnFunction = createCn({\n extend: {\n classGroups: {\n 'ds-height': [\n {\n h: [\n 'control-2xs',\n 'control-xs',\n 'control-sm',\n 'control-md',\n 'control-lg',\n 'control-xl',\n 'control-2xl',\n 'row-sm',\n 'row-md',\n 'row-lg',\n 'rail-item',\n 'topbar',\n 'statusbar',\n ],\n },\n ],\n 'ds-width': [\n {\n w: ['rail', 'rail-expanded', 'sidebar', 'sidebar-compact'],\n },\n ],\n // `size-*` is a real Tailwind group, but the token-derived values are\n // not, so they need the same treatment as height and width.\n 'ds-size': [\n {\n size: [\n 'control-2xs',\n 'control-xs',\n 'control-sm',\n 'control-md',\n 'control-lg',\n 'control-xl',\n 'control-2xl',\n 'rail-item',\n ],\n },\n ],\n },\n },\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,IAAa,KAAiB,SAAS,EACrC,QAAQ,EACN,aAAa;CACX,aAAa,CACX,EACE,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,EACF,CACF;CACA,YAAY,CACV,EACE,GAAG;EAAC;EAAQ;EAAiB;EAAW;CAAiB,EAC3D,CACF;CAGA,WAAW,CACT,EACE,MAAM;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,EACF,CACF;AACF,EACF,EACF,CAAC"}
1
+ {"version":3,"file":"utils.js","names":["tables"],"sources":["../../src/lib/utils.ts"],"sourcesContent":["import { createCn } from 'cn/engine'\nimport type { CnFunction } from 'cn'\nimport tables from '#lib/cn-tables.generated'\n\n/**\n * Merge conditional class values, letting the last conflicting utility win.\n *\n * Accepts an object whose keys are classes and whose values enable them, which\n * is the form the design-system linter can read statically:\n *\n * cn('base', { 'is-open': open(), 'is-disabled': disabled() })\n *\n * A template literal (`cn(`base--${value}`)`) is invisible to the linter and\n * will be reported, because a class the linter cannot read is a class it\n * cannot check against the theme.\n *\n * `cn` also has to be told about the utilities this design system adds. Every\n * token-derived utility (`h-control-md`, `w-rail`, `p-control-lg`, …) is an\n * unknown name to a default merge instance. Left unregistered,\n * `cn('h-control-md', 'h-control-sm')` keeps both classes and the winner is\n * decided by stylesheet order rather than by the caller — a bug that only\n * shows up as a control that ignores its `size` prop, long after the line\n * that caused it was written.\n *\n * Compiling the design-system families into full tables makes \"the last class\n * wins\" true for the whole system, including for consumer overrides, without\n * loading the runtime config/compiler path.\n */\nexport const cn: CnFunction = createCn(tables)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,IAAa,KAAiB,SAASA,2BAAM"}
package/dist/r/lib.json CHANGED
@@ -15,6 +15,11 @@
15
15
  "type": "registry:lib",
16
16
  "target": "lib/clipboard.ts"
17
17
  },
18
+ {
19
+ "path": "src/lib/cn-tables.generated.ts",
20
+ "type": "registry:lib",
21
+ "target": "lib/cn-tables.generated.ts"
22
+ },
18
23
  {
19
24
  "path": "src/lib/download.ts",
20
25
  "type": "registry:lib",
@@ -2371,6 +2371,11 @@
2371
2371
  "type": "registry:lib",
2372
2372
  "target": "lib/clipboard.ts"
2373
2373
  },
2374
+ {
2375
+ "path": "src/lib/cn-tables.generated.ts",
2376
+ "type": "registry:lib",
2377
+ "target": "lib/cn-tables.generated.ts"
2378
+ },
2374
2379
  {
2375
2380
  "path": "src/lib/download.ts",
2376
2381
  "type": "registry:lib",
@@ -0,0 +1,145 @@
1
+ /*
2
+ * Generated class-group tables from cn@0.4.0 by cn/build, using the complete
3
+ * config and no source scanning. cn is Copyright (c) 2026 shadcn, MIT licensed.
4
+ * This MIT notice is retained because the generated decoder is distributed in
5
+ * this file and in the standalone registry payload.
6
+ *
7
+ * MIT License
8
+ *
9
+ * Copyright (c) 2026 shadcn
10
+ *
11
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ * of this software and associated documentation files (the "Software"), to deal
13
+ * in the Software without restriction, including without limitation the rights
14
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ * copies of the Software, and to permit persons to whom the Software is
16
+ * furnished to do so, subject to the following conditions:
17
+ *
18
+ * The above copyright notice and this permission notice shall be included in all
19
+ * copies or substantial portions of the Software.
20
+ *
21
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ * SOFTWARE.
28
+ */
29
+
30
+ // GENERATED by `cn build` — do not edit.
31
+ // Pair with createCn from "cn/engine":
32
+ // import tables from "./cn-tables.generated.ts"
33
+ // import { createCn } from "cn/engine"
34
+ // export const cn = createCn(tables)
35
+ const P = 48
36
+ const U = (s: string, o = 0): Int32Array => {
37
+ const out = new Int32Array(s.length)
38
+ for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i) - P - o
39
+ return out
40
+ }
41
+ const PS = (counts: Int32Array): Int32Array => {
42
+ const out = new Int32Array(counts.length + 1)
43
+ for (let i = 0; i < counts.length; i++) out[i + 1] = out[i]! + counts[i]!
44
+ return out
45
+ }
46
+ // zigzag-delta stream → running values
47
+ const DZ = (s: string): Int32Array => {
48
+ const out = new Int32Array(s.length)
49
+ let a = 0
50
+ for (let i = 0; i < s.length; i++) {
51
+ const z = s.charCodeAt(i) - P
52
+ a += (z >>> 1) ^ -(z & 1)
53
+ out[i] = a
54
+ }
55
+ return out
56
+ }
57
+ const GROUP_COUNT = 387
58
+ const customValidatorNames: string[] = []
59
+ const edgeStart = PS(U("E0500002005282000000002000150000020021820000011200000003022202000300004200120000200420001200021200301200010400162000010000220021010:2192001200220012000220012000200200200400010200040000000000400200108200110100000022010313000162002000020020012020080213000228200000000082000000000120002000120020020040101020300130001001010"))
60
+ const labelStart = PS(U(":11111111211111119311546544411119731869:671397415686432441111111111161114151214313433415:78311132233313187211117221449443411141111151152226611131111112212518142224214215421421542142424242516171151615616347111111111197911327451111111111111111111113134714133513411111311111111111111111111112444411111342312715245411117:3"))
61
+ const labelText = "@containerabcdefghinlmoprstunderlineviawzccentlignnimatespectuto-colsrowsaglorightnessckdrop-sisbcontrastfiltergrayscalehue-rotateinvertopacityslurrightnessaturateepia-coniclinearpositionradialsizeockurrderttom-belrstxyespacing-xyaretoursorlnt-umnsendspantartainentrasteividerop-shadowurationcorationlay-xyasendillexontromlter-featuresstretchapr-xyayscaleidow-colsrowsue-rotatedentlinesetvert-beringsxyeshadoweiadingftnest-clamp-imageabein-lrstxyskx--b-coniclpositionrsizet-x-y-fromto-fromto-inearfromto-fromto-adialfromto-fromtofromtofromtofromtoblockhinlinew-screenesblockhinlinewbjectpacityrutlinederigin-offsetbelrstxyesrspective-originaceholderioghtng-offsettateundedw-xyz-belrstlreseslr-endspantartaturatecepiahizekewpace-taleroll-xyz-barmpbelrstxyesbelrstxyes-thumbrackadowrink-xyxyartrokeabextora-shadowpckingnsformitionlate-xyz-offsetill-changeoom"
62
+ // pre-order tree: targets derived from edge counts via subtree sizes
63
+ const edgeTarget = (() => {
64
+ const N = edgeStart.length - 1
65
+ const sizes = new Int32Array(N)
66
+ for (let i = N - 1; i >= 0; i--) {
67
+ let s = 1
68
+ let c = i + 1
69
+ for (let k = edgeStart[i]!; k < edgeStart[i + 1]!; k++) { s += sizes[c]!; c += sizes[c]! }
70
+ sizes[i] = s
71
+ }
72
+ const out = new Int32Array(edgeStart[N]!)
73
+ let e = 0
74
+ for (let i = 0; i < N; i++) {
75
+ let c = i + 1
76
+ for (let k = edgeStart[i]!; k < edgeStart[i + 1]!; k++) { out[e++] = c; c += sizes[c]! }
77
+ }
78
+ return out
79
+ })()
80
+ const nodeGroup = U("02000000000000900<=0?000B000F00F00ŏI0J0LNPRTVX0000]_a00000000000000000000000rst0000000zŏ00000000000…ŏ000ˆ0000ŏ0000000000—0000000000000000000000000000000000000000000000000000Ë000000000000000000000Þ000000000000000000ð0000000ø0ùúûüýþÿĀāĂ㥹Ć000000000000000000000000000000000000000000ħ0ĨĪ00000000000000000000ļĽ00000Ŭ000000", 1)
81
+ // vlists = op-pattern pool + per-list refs; the engine indexes these directly
82
+ const vlistPat = PS(U("123333359346463635126536711576"))
83
+ const vlistOps = U("93203242332583253248325D>E?F@03263243255B:032523853:0325B:8GA032542H<C=12727B:0328432553;D>E?3257D>032585:0325B:;0328B:032")
84
+ const vlistRef = U("012113445661666666789111:5;;;;;;;;444;;;:62999<1161=62>>?61:21@ABCD4446996:64E:::;:?::64:F114GHHIHHHHIHH1HH1HH1HHHHHH::EEJ4444::EE4444441691;644444114244444:;K6666555555555555555999666664444444444444444444444226?6:66644L9M?D:111::::6DE199")
85
+ const vlistGroup = DZ("020200202020020020020020020020200200200200200200200002020202001003040106000200200200200200200200200200200200200200200200200200200200200200200200200200200200020020020020020020002020200202002002002002002002002002002020002002020020200220200200200200200200200200200200020020020000200020002000200200200020020020002000200200200020020202002020202000200200020022000200200020020002002000200220002002000200W0Z00020020002002020002002000200g0j0002002000200200020020002002000200200020020002000200002000002002002002002000200020000200002002002002002002002020020020200200200200200200200200202020020020020020020020020002002002020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020002002002002002002000200200200200200200200200200020202020002000200020002002002002000020200200")
86
+ // nodeVlist rebuilt sparse: (anchor deltas, vlist ids)
87
+ const nodeVlist = (() => {
88
+ const out = new Int32Array(319).fill(-1)
89
+ const A = DZ("02422242:222222242224222242442222222422222244442242226224222426222422442462222422622222222626222462242622422622422424242422222222422222222242422222222222222222622442224222222222222224424442262222222222222222222226224222424242422224422422422222")
90
+ const V = DZ("02222222222222222222202222222222222222222222221422222222222222222222222222222222222Y\\222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221422222222222222222222222222222222222222Ŀł222222222222222222")
91
+ for (let i = 0; i < A.length; i++) out[A[i]!] = V[i]!
92
+ return out
93
+ })()
94
+ const SETS = "container |break-after- all auto avoid avoid-page column left page right|break-before- all auto avoid avoid-page column left page right|break-inside-a uto void void-column void-page|box-decoration- clone slice|box- border content| contents flow-root hidden table table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group| not-sr-only sr-only|float- end left none right start|clear- both end left none right start|isolat e ion-auto|overflow- auto clip hidden scroll visible|overflow-x- auto clip hidden scroll visible|overflow-y- auto clip hidden scroll visible|overscroll- auto contain none|overscroll-x- auto contain none|overscroll-y- auto contain none| absolute fixed relative static sticky| collapse invisible visible|justify- around baseline between center center-safe end end-safe evenly normal start stretch|justify-items- center center-safe end end-safe normal start stretch|justify-self- auto center center-safe end end-safe start stretch|items- baseline baseline-last center center-safe end end-safe start stretch|self- auto baseline baseline-last center center-safe end end-safe start stretch|place-content- around baseline between center center-safe end end-safe evenly start stretch|place-items- baseline center center-safe end end-safe start stretch|place-self- auto center center-safe end end-safe start stretch| antialiased subpixel-antialiased| italic not-italic|normal-nums |ordinal |slashed-zero | lining-nums oldstyle-nums| proportional-nums tabular-nums| diagonal-fractions stacked-fractions| no-underline overline| capitalize lowercase normal-case uppercase|truncate |whitespace- break-spaces normal nowrap pre pre-line pre-wrap|break- all keep normal words|wrap- anywhere break-word normal|hyphens- auto manual none|mix-blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay plus-darker plus-lighter saturation screen soft-light|table- auto fixed|caption- bottom top|backface- hidden visible|appearance- auto none|scheme- dark light light-dark normal only-dark only-light|field-sizing- content fixed|pointer-events- auto none|resize -none -x -y|snap- align-none center end start|snap- always normal|snap- both none x y|snap- mandatory proximity|touch- auto manipulation none|touch-pan- left right x|touch-pan- down up y|touch-pinch-zoom |select- all auto none text|forced-color-adjust- auto none| normal size| baseline bottom middle sub super text-bottom text-top top| bounce none ping pulse spin| auto square video| auto fr max min px|none | auto full px| fixed local scroll|clip- border content padding text|origin- border content padding| bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| no-repeat repeat repeat-round repeat-space repeat-x repeat-y| auto contain cover| gradient-to-b gradient-to-bl gradient-to-br gradient-to-l gradient-to-r gradient-to-t gradient-to-tl gradient-to-tr none|blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay saturation screen soft-light|to- b bl br l r t tl tr| auto dvh fit full lh lvh max min px screen svh| dashed dotted double hidden none solid| collapse separate|px |auto |full | content none strict| inline-size size|layout |paint |style | around baseline between center center-safe end end-safe evenly normal start stretch| alias all-scroll auto cell col-resize context-menu copy crosshair default e-resize ew-resize grab grabbing help move n-resize ne-resize nesw-resize no-drop none not-allowed ns-resize nw-resize nwse-resize pointer progress row-resize s-resize se-resize sw-resize text vertical-text w-resize wait zoom-in zoom-out| dashed dotted double solid wavy| auto from-font|reverse |initial | in in-out initial linear out| col col-reverse row row-reverse| nowrap wrap wrap-reverse| auto initial none| black bold extrabold extralight light medium normal semibold thin| condensed expanded extra-condensed extra-expanded normal semi-condensed semi-expanded ultra-condensed ultra-expanded|flow- col col-dense dense row row-dense| none subgrid| auto dvh dvw fit full lh lvh lvw max min px screen svh svw| control-2xl control-2xs control-lg control-md control-sm control-xl control-xs rail-item row-lg row-md row-sm statusbar topbar| block flex grid table| auto dvw fit full lvw max min px screen svw| loose none normal px relaxed snug tight|through |item | inside outside| decimal disc none| auto px| clip-border clip-content clip-fill clip-padding clip-stroke clip-view no-clip| add exclude intersect subtract| alpha luminance match|origin- border content fill padding stroke view|type- alpha luminance| circle ellipse| closest-corner closest-side farthest-corner farthest-side|at- bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| dvh fit full lh lvh max min none px screen svh| auto dvh dvw fit full lh lvh lvw max min none px screen svh svw| dvw fit full lvw max min none px screen svw| auto dvh dvw fit full lvh lvw max min none prose px svh svw| auto dvh dvw fit full lvh lvw max min none px screen svh svw| contain cover fill none scale-down| first last none| distant dramatic midrange near none normal|inset | full none|3d | auto smooth|gutter- auto both stable| auto none thin| inner none| auto dvh dvw fit full lvh lvw max min px svh svw| control-2xl control-2xs control-lg control-md control-sm control-xl control-xs rail-item|base | center end justify left right start| clip ellipsis| balance nowrap pretty wrap| normal tight tighter wide wider widest| cpu gpu none| 3d flat| all colors none opacity shadow transform| discrete normal| full px| auto dvh dvw fit full lvh lvw max min px screen svh svw| rail rail-expanded sidebar sidebar-compact| auto contents scroll transform".split('|').map((s) => {
95
+ const tails = s.split(' ')
96
+ const prefix = tails.shift()!
97
+ for (let i = 0; i < tails.length; i++) {
98
+ tails[i] = prefix + tails[i]
99
+ }
100
+ return tails
101
+ })
102
+ const AA = DZ("0000000000000000000000000000000000000000000000000000000000000262242:6@200000006:240B428:44224000020460442224262200266426424062026224222824220022400000000\\00N222422242222222224062242222222422226264222422222222222222442804222422222222222222222222220<40<02042600024440202042244022")
103
+ const AG = DZ("ɠ222222222222222222222222222222222222222222222222222222222222˕4222226>ʶ22ʷʺʷ2ʸʷ42ʴ2ʓ22>621422ɶ222ɹɼɷɺɷɺ22ɱ42222ɨ2ɧ26622ɘɓ24ɐɋƸƵ222]d24242ǖǓƚÆȭ2263ȪȧȪ2222222ǥ222222222222222222DŽƿ2ǀƷ2222222422222ƞƓ22222222222222222222144Ũť22Ťš222222222222222222222ĺ2ij6İħĪħĪɥŰ4Ĥ¯²ġ822ĘĕĘ2ė22226Čĉ2")
104
+ const AS = DZ("02222222222222222222222222222222222222222222222222222222222222222202022222222222EH2200IL021042222Y\\222IL0cf2e10j2222U00X2022]`2{0000120~}€„22‡Š‰:22~22222222222G000sˆOVI00000œ2>40000ŽŸB00000Iª«000®00000000000000021M°¯00²•000000000000000000000˜2222ŸHGHa1¾222Ã2Ä2222ÍÐ000±´22·")
105
+ const litAnchor = new Int32Array(1020)
106
+ const litGroup = new Int32Array(1020)
107
+ const litPool = new Int32Array(1020)
108
+ let poolText = ''
109
+ const poolOffsets = new Int32Array(1072)
110
+ {
111
+ const tailRef = new Map()
112
+ let nextRef = 0
113
+ let e = 0
114
+ for (let i = 0; i < AA.length; i++) {
115
+ for (const tail of SETS[AS[i]!]!) {
116
+ let r = tailRef.get(tail)
117
+ if (r === undefined) {
118
+ r = nextRef++
119
+ tailRef.set(tail, r)
120
+ poolOffsets[r * 2] = poolText.length
121
+ poolOffsets[r * 2 + 1] = tail.length
122
+ poolText += tail
123
+ }
124
+ litAnchor[e] = AA[i]!
125
+ litGroup[e] = AG[i]!
126
+ litPool[e] = r
127
+ e++
128
+ }
129
+ }
130
+ }
131
+ // conflict adjacency (engine builds claim bitmask CSR at init)
132
+ const adjGid = DZ("0b2N:222@R>F@286¦2@H2D266226FB22B2>BD\\6N22222Z222D222t")
133
+ const adjStart = PS(U("1::24444432:442:44:44>222222:44:4421322511111311111114"))
134
+ const adjTgt = DZ("2Š4A;33N=C@H4A;33N=C@<27;83:;8393NQ:3NQʰ222ˉºŴŽ2R2=18cƴÅҜ=cĞÛC1ƈǝȈ:ħ25=11D3A@4=<1;1DEr25;11B3?<6;:371BCn9@7=<8192>2E121@9@EHE@9>2T25511<398454131<=V25511<398454131<=„ƧNž2Ĕé242L222290000f22500ɛ000ǘ222")
135
+ const patGid = U("ij")
136
+ const patTgt = U("—")
137
+ const postfixLookupGroups = U("1")
138
+ const orderSensitiveModifiers = "* ** after backdrop before details-content file first-letter first-line marker placeholder selection"
139
+ export default {
140
+ GROUP_COUNT, customValidatorNames, edgeStart, labelStart, labelText,
141
+ edgeTarget, nodeGroup, nodeVlist, vlistPat, vlistOps, vlistRef, vlistGroup,
142
+ litAnchor, litGroup, litPool, poolOffsets, poolText,
143
+ adjGid, adjStart, adjTgt, patGid, patTgt, postfixLookupGroups,
144
+ orderSensitiveModifiers,
145
+ }
@@ -1,5 +1,6 @@
1
- import { createCn } from 'cn/config'
1
+ import { createCn } from 'cn/engine'
2
2
  import type { CnFunction } from 'cn'
3
+ import tables from './cn-tables.generated'
3
4
 
4
5
  /**
5
6
  * Merge conditional class values, letting the last conflicting utility win.
@@ -21,52 +22,8 @@ import type { CnFunction } from 'cn'
21
22
  * shows up as a control that ignores its `size` prop, long after the line
22
23
  * that caused it was written.
23
24
  *
24
- * Registering the families below is what makes "the last class wins" true for
25
- * the whole system, including for consumers overriding a component's default.
25
+ * Compiling the design-system families into full tables makes "the last class
26
+ * wins" true for the whole system, including for consumer overrides, without
27
+ * loading the runtime config/compiler path.
26
28
  */
27
- export const cn: CnFunction = createCn({
28
- extend: {
29
- classGroups: {
30
- 'ds-height': [
31
- {
32
- h: [
33
- 'control-2xs',
34
- 'control-xs',
35
- 'control-sm',
36
- 'control-md',
37
- 'control-lg',
38
- 'control-xl',
39
- 'control-2xl',
40
- 'row-sm',
41
- 'row-md',
42
- 'row-lg',
43
- 'rail-item',
44
- 'topbar',
45
- 'statusbar',
46
- ],
47
- },
48
- ],
49
- 'ds-width': [
50
- {
51
- w: ['rail', 'rail-expanded', 'sidebar', 'sidebar-compact'],
52
- },
53
- ],
54
- // `size-*` is a real Tailwind group, but the token-derived values are
55
- // not, so they need the same treatment as height and width.
56
- 'ds-size': [
57
- {
58
- size: [
59
- 'control-2xs',
60
- 'control-xs',
61
- 'control-sm',
62
- 'control-md',
63
- 'control-lg',
64
- 'control-xl',
65
- 'control-2xl',
66
- 'rail-item',
67
- ],
68
- },
69
- ],
70
- },
71
- },
72
- })
29
+ export const cn: CnFunction = createCn(tables)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adea-ai/ui",
3
- "version": "0.95.3",
3
+ "version": "0.95.5",
4
4
  "description": "The Adea design system: Kobalte-backed Solid components, semantic OKLCH tokens, and the app-shell layout primitives shared by Adea and Cortana.",
5
5
  "keywords": [
6
6
  "adea",
@@ -59,6 +59,7 @@
59
59
  "development": "./src/lib/*.ts",
60
60
  "import": "./dist/lib/*.js"
61
61
  },
62
+ "./lib/cn-tables.generated": null,
62
63
  "./lint": {
63
64
  "types": "./dist/lint/index.d.ts",
64
65
  "default": "./dist/lint.js"
@@ -89,13 +90,15 @@
89
90
  }
90
91
  },
91
92
  "scripts": {
92
- "build": "vite build && tsc -p tsconfig.json --emitDeclarationOnly",
93
- "dev": "vite build --watch",
93
+ "build": "bun run cn:build && vite build && tsc -p tsconfig.json --emitDeclarationOnly",
94
+ "dev": "bun run cn:build && vite build --watch",
94
95
  "lint": "oxlint",
95
- "test": "bun test --conditions=browser tests",
96
+ "test": "bun run cn:check && bun test --conditions=browser tests",
96
97
  "typecheck": "tsc -p tsconfig.check.json --noEmit",
97
- "registry:build": "bun scripts/build-registry.ts",
98
- "registry:validate": "bun scripts/validate-registry.ts",
98
+ "cn:build": "bun scripts/build-cn-tables.ts",
99
+ "cn:check": "bun scripts/check-cn-tables.ts",
100
+ "registry:build": "bun run cn:build && bun scripts/build-registry.ts",
101
+ "registry:validate": "bun run cn:check && bun scripts/validate-registry.ts",
99
102
  "pack:check": "bun scripts/check-pack.ts",
100
103
  "check:tree-shaking": "bun scripts/check-tree-shaking.ts",
101
104
  "theme:build": "bun scripts/build-default-theme.ts",
package/registry.json CHANGED
@@ -2371,6 +2371,11 @@
2371
2371
  "type": "registry:lib",
2372
2372
  "target": "lib/clipboard.ts"
2373
2373
  },
2374
+ {
2375
+ "path": "src/lib/cn-tables.generated.ts",
2376
+ "type": "registry:lib",
2377
+ "target": "lib/cn-tables.generated.ts"
2378
+ },
2374
2379
  {
2375
2380
  "path": "src/lib/download.ts",
2376
2381
  "type": "registry:lib",
@@ -0,0 +1,145 @@
1
+ /*
2
+ * Generated class-group tables from cn@0.4.0 by cn/build, using the complete
3
+ * config and no source scanning. cn is Copyright (c) 2026 shadcn, MIT licensed.
4
+ * This MIT notice is retained because the generated decoder is distributed in
5
+ * this file and in the standalone registry payload.
6
+ *
7
+ * MIT License
8
+ *
9
+ * Copyright (c) 2026 shadcn
10
+ *
11
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ * of this software and associated documentation files (the "Software"), to deal
13
+ * in the Software without restriction, including without limitation the rights
14
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ * copies of the Software, and to permit persons to whom the Software is
16
+ * furnished to do so, subject to the following conditions:
17
+ *
18
+ * The above copyright notice and this permission notice shall be included in all
19
+ * copies or substantial portions of the Software.
20
+ *
21
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ * SOFTWARE.
28
+ */
29
+
30
+ // GENERATED by `cn build` — do not edit.
31
+ // Pair with createCn from "cn/engine":
32
+ // import tables from "./cn-tables.generated.ts"
33
+ // import { createCn } from "cn/engine"
34
+ // export const cn = createCn(tables)
35
+ const P = 48
36
+ const U = (s: string, o = 0): Int32Array => {
37
+ const out = new Int32Array(s.length)
38
+ for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i) - P - o
39
+ return out
40
+ }
41
+ const PS = (counts: Int32Array): Int32Array => {
42
+ const out = new Int32Array(counts.length + 1)
43
+ for (let i = 0; i < counts.length; i++) out[i + 1] = out[i]! + counts[i]!
44
+ return out
45
+ }
46
+ // zigzag-delta stream → running values
47
+ const DZ = (s: string): Int32Array => {
48
+ const out = new Int32Array(s.length)
49
+ let a = 0
50
+ for (let i = 0; i < s.length; i++) {
51
+ const z = s.charCodeAt(i) - P
52
+ a += (z >>> 1) ^ -(z & 1)
53
+ out[i] = a
54
+ }
55
+ return out
56
+ }
57
+ const GROUP_COUNT = 387
58
+ const customValidatorNames: string[] = []
59
+ const edgeStart = PS(U("E0500002005282000000002000150000020021820000011200000003022202000300004200120000200420001200021200301200010400162000010000220021010:2192001200220012000220012000200200200400010200040000000000400200108200110100000022010313000162002000020020012020080213000228200000000082000000000120002000120020020040101020300130001001010"))
60
+ const labelStart = PS(U(":11111111211111119311546544411119731869:671397415686432441111111111161114151214313433415:78311132233313187211117221449443411141111151152226611131111112212518142224214215421421542142424242516171151615616347111111111197911327451111111111111111111113134714133513411111311111111111111111111112444411111342312715245411117:3"))
61
+ const labelText = "@containerabcdefghinlmoprstunderlineviawzccentlignnimatespectuto-colsrowsaglorightnessckdrop-sisbcontrastfiltergrayscalehue-rotateinvertopacityslurrightnessaturateepia-coniclinearpositionradialsizeockurrderttom-belrstxyespacing-xyaretoursorlnt-umnsendspantartainentrasteividerop-shadowurationcorationlay-xyasendillexontromlter-featuresstretchapr-xyayscaleidow-colsrowsue-rotatedentlinesetvert-beringsxyeshadoweiadingftnest-clamp-imageabein-lrstxyskx--b-coniclpositionrsizet-x-y-fromto-fromto-inearfromto-fromto-adialfromto-fromtofromtofromtofromtoblockhinlinew-screenesblockhinlinewbjectpacityrutlinederigin-offsetbelrstxyesrspective-originaceholderioghtng-offsettateundedw-xyz-belrstlreseslr-endspantartaturatecepiahizekewpace-taleroll-xyz-barmpbelrstxyesbelrstxyes-thumbrackadowrink-xyxyartrokeabextora-shadowpckingnsformitionlate-xyz-offsetill-changeoom"
62
+ // pre-order tree: targets derived from edge counts via subtree sizes
63
+ const edgeTarget = (() => {
64
+ const N = edgeStart.length - 1
65
+ const sizes = new Int32Array(N)
66
+ for (let i = N - 1; i >= 0; i--) {
67
+ let s = 1
68
+ let c = i + 1
69
+ for (let k = edgeStart[i]!; k < edgeStart[i + 1]!; k++) { s += sizes[c]!; c += sizes[c]! }
70
+ sizes[i] = s
71
+ }
72
+ const out = new Int32Array(edgeStart[N]!)
73
+ let e = 0
74
+ for (let i = 0; i < N; i++) {
75
+ let c = i + 1
76
+ for (let k = edgeStart[i]!; k < edgeStart[i + 1]!; k++) { out[e++] = c; c += sizes[c]! }
77
+ }
78
+ return out
79
+ })()
80
+ const nodeGroup = U("02000000000000900<=0?000B000F00F00ŏI0J0LNPRTVX0000]_a00000000000000000000000rst0000000zŏ00000000000…ŏ000ˆ0000ŏ0000000000—0000000000000000000000000000000000000000000000000000Ë000000000000000000000Þ000000000000000000ð0000000ø0ùúûüýþÿĀāĂ㥹Ć000000000000000000000000000000000000000000ħ0ĨĪ00000000000000000000ļĽ00000Ŭ000000", 1)
81
+ // vlists = op-pattern pool + per-list refs; the engine indexes these directly
82
+ const vlistPat = PS(U("123333359346463635126536711576"))
83
+ const vlistOps = U("93203242332583253248325D>E?F@03263243255B:032523853:0325B:8GA032542H<C=12727B:0328432553;D>E?3257D>032585:0325B:;0328B:032")
84
+ const vlistRef = U("012113445661666666789111:5;;;;;;;;444;;;:62999<1161=62>>?61:21@ABCD4446996:64E:::;:?::64:F114GHHIHHHHIHH1HH1HH1HHHHHH::EEJ4444::EE4444441691;644444114244444:;K6666555555555555555999666664444444444444444444444226?6:66644L9M?D:111::::6DE199")
85
+ const vlistGroup = DZ("020200202020020020020020020020200200200200200200200002020202001003040106000200200200200200200200200200200200200200200200200200200200200200200200200200200200020020020020020020002020200202002002002002002002002002002020002002020020200220200200200200200200200200200200020020020000200020002000200200200020020020002000200200200020020202002020202000200200020022000200200020020002002000200220002002000200W0Z00020020002002020002002000200g0j0002002000200200020020002002000200200020020002000200002000002002002002002000200020000200002002002002002002002020020020200200200200200200200200202020020020020020020020020002002002020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020002002002002002002000200200200200200200200200200020202020002000200020002002002002000020200200")
86
+ // nodeVlist rebuilt sparse: (anchor deltas, vlist ids)
87
+ const nodeVlist = (() => {
88
+ const out = new Int32Array(319).fill(-1)
89
+ const A = DZ("02422242:222222242224222242442222222422222244442242226224222426222422442462222422622222222626222462242622422622422424242422222222422222222242422222222222222222622442224222222222222224424442262222222222222222222226224222424242422224422422422222")
90
+ const V = DZ("02222222222222222222202222222222222222222222221422222222222222222222222222222222222Y\\222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221422222222222222222222222222222222222222Ŀł222222222222222222")
91
+ for (let i = 0; i < A.length; i++) out[A[i]!] = V[i]!
92
+ return out
93
+ })()
94
+ const SETS = "container |break-after- all auto avoid avoid-page column left page right|break-before- all auto avoid avoid-page column left page right|break-inside-a uto void void-column void-page|box-decoration- clone slice|box- border content| contents flow-root hidden table table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group| not-sr-only sr-only|float- end left none right start|clear- both end left none right start|isolat e ion-auto|overflow- auto clip hidden scroll visible|overflow-x- auto clip hidden scroll visible|overflow-y- auto clip hidden scroll visible|overscroll- auto contain none|overscroll-x- auto contain none|overscroll-y- auto contain none| absolute fixed relative static sticky| collapse invisible visible|justify- around baseline between center center-safe end end-safe evenly normal start stretch|justify-items- center center-safe end end-safe normal start stretch|justify-self- auto center center-safe end end-safe start stretch|items- baseline baseline-last center center-safe end end-safe start stretch|self- auto baseline baseline-last center center-safe end end-safe start stretch|place-content- around baseline between center center-safe end end-safe evenly start stretch|place-items- baseline center center-safe end end-safe start stretch|place-self- auto center center-safe end end-safe start stretch| antialiased subpixel-antialiased| italic not-italic|normal-nums |ordinal |slashed-zero | lining-nums oldstyle-nums| proportional-nums tabular-nums| diagonal-fractions stacked-fractions| no-underline overline| capitalize lowercase normal-case uppercase|truncate |whitespace- break-spaces normal nowrap pre pre-line pre-wrap|break- all keep normal words|wrap- anywhere break-word normal|hyphens- auto manual none|mix-blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay plus-darker plus-lighter saturation screen soft-light|table- auto fixed|caption- bottom top|backface- hidden visible|appearance- auto none|scheme- dark light light-dark normal only-dark only-light|field-sizing- content fixed|pointer-events- auto none|resize -none -x -y|snap- align-none center end start|snap- always normal|snap- both none x y|snap- mandatory proximity|touch- auto manipulation none|touch-pan- left right x|touch-pan- down up y|touch-pinch-zoom |select- all auto none text|forced-color-adjust- auto none| normal size| baseline bottom middle sub super text-bottom text-top top| bounce none ping pulse spin| auto square video| auto fr max min px|none | auto full px| fixed local scroll|clip- border content padding text|origin- border content padding| bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| no-repeat repeat repeat-round repeat-space repeat-x repeat-y| auto contain cover| gradient-to-b gradient-to-bl gradient-to-br gradient-to-l gradient-to-r gradient-to-t gradient-to-tl gradient-to-tr none|blend- color color-burn color-dodge darken difference exclusion hard-light hue lighten luminosity multiply normal overlay saturation screen soft-light|to- b bl br l r t tl tr| auto dvh fit full lh lvh max min px screen svh| dashed dotted double hidden none solid| collapse separate|px |auto |full | content none strict| inline-size size|layout |paint |style | around baseline between center center-safe end end-safe evenly normal start stretch| alias all-scroll auto cell col-resize context-menu copy crosshair default e-resize ew-resize grab grabbing help move n-resize ne-resize nesw-resize no-drop none not-allowed ns-resize nw-resize nwse-resize pointer progress row-resize s-resize se-resize sw-resize text vertical-text w-resize wait zoom-in zoom-out| dashed dotted double solid wavy| auto from-font|reverse |initial | in in-out initial linear out| col col-reverse row row-reverse| nowrap wrap wrap-reverse| auto initial none| black bold extrabold extralight light medium normal semibold thin| condensed expanded extra-condensed extra-expanded normal semi-condensed semi-expanded ultra-condensed ultra-expanded|flow- col col-dense dense row row-dense| none subgrid| auto dvh dvw fit full lh lvh lvw max min px screen svh svw| control-2xl control-2xs control-lg control-md control-sm control-xl control-xs rail-item row-lg row-md row-sm statusbar topbar| block flex grid table| auto dvw fit full lvw max min px screen svw| loose none normal px relaxed snug tight|through |item | inside outside| decimal disc none| auto px| clip-border clip-content clip-fill clip-padding clip-stroke clip-view no-clip| add exclude intersect subtract| alpha luminance match|origin- border content fill padding stroke view|type- alpha luminance| circle ellipse| closest-corner closest-side farthest-corner farthest-side|at- bottom bottom-left bottom-right center left left-bottom left-top right right-bottom right-top top top-left top-right| dvh fit full lh lvh max min none px screen svh| auto dvh dvw fit full lh lvh lvw max min none px screen svh svw| dvw fit full lvw max min none px screen svw| auto dvh dvw fit full lvh lvw max min none prose px svh svw| auto dvh dvw fit full lvh lvw max min none px screen svh svw| contain cover fill none scale-down| first last none| distant dramatic midrange near none normal|inset | full none|3d | auto smooth|gutter- auto both stable| auto none thin| inner none| auto dvh dvw fit full lvh lvw max min px svh svw| control-2xl control-2xs control-lg control-md control-sm control-xl control-xs rail-item|base | center end justify left right start| clip ellipsis| balance nowrap pretty wrap| normal tight tighter wide wider widest| cpu gpu none| 3d flat| all colors none opacity shadow transform| discrete normal| full px| auto dvh dvw fit full lvh lvw max min px screen svh svw| rail rail-expanded sidebar sidebar-compact| auto contents scroll transform".split('|').map((s) => {
95
+ const tails = s.split(' ')
96
+ const prefix = tails.shift()!
97
+ for (let i = 0; i < tails.length; i++) {
98
+ tails[i] = prefix + tails[i]
99
+ }
100
+ return tails
101
+ })
102
+ const AA = DZ("0000000000000000000000000000000000000000000000000000000000000262242:6@200000006:240B428:44224000020460442224262200266426424062026224222824220022400000000\\00N222422242222222224062242222222422226264222422222222222222442804222422222222222222222222220<40<02042600024440202042244022")
103
+ const AG = DZ("ɠ222222222222222222222222222222222222222222222222222222222222˕4222226>ʶ22ʷʺʷ2ʸʷ42ʴ2ʓ22>621422ɶ222ɹɼɷɺɷɺ22ɱ42222ɨ2ɧ26622ɘɓ24ɐɋƸƵ222]d24242ǖǓƚÆȭ2263ȪȧȪ2222222ǥ222222222222222222DŽƿ2ǀƷ2222222422222ƞƓ22222222222222222222144Ũť22Ťš222222222222222222222ĺ2ij6İħĪħĪɥŰ4Ĥ¯²ġ822ĘĕĘ2ė22226Čĉ2")
104
+ const AS = DZ("02222222222222222222222222222222222222222222222222222222222222222202022222222222EH2200IL021042222Y\\222IL0cf2e10j2222U00X2022]`2{0000120~}€„22‡Š‰:22~22222222222G000sˆOVI00000œ2>40000ŽŸB00000Iª«000®00000000000000021M°¯00²•000000000000000000000˜2222ŸHGHa1¾222Ã2Ä2222ÍÐ000±´22·")
105
+ const litAnchor = new Int32Array(1020)
106
+ const litGroup = new Int32Array(1020)
107
+ const litPool = new Int32Array(1020)
108
+ let poolText = ''
109
+ const poolOffsets = new Int32Array(1072)
110
+ {
111
+ const tailRef = new Map()
112
+ let nextRef = 0
113
+ let e = 0
114
+ for (let i = 0; i < AA.length; i++) {
115
+ for (const tail of SETS[AS[i]!]!) {
116
+ let r = tailRef.get(tail)
117
+ if (r === undefined) {
118
+ r = nextRef++
119
+ tailRef.set(tail, r)
120
+ poolOffsets[r * 2] = poolText.length
121
+ poolOffsets[r * 2 + 1] = tail.length
122
+ poolText += tail
123
+ }
124
+ litAnchor[e] = AA[i]!
125
+ litGroup[e] = AG[i]!
126
+ litPool[e] = r
127
+ e++
128
+ }
129
+ }
130
+ }
131
+ // conflict adjacency (engine builds claim bitmask CSR at init)
132
+ const adjGid = DZ("0b2N:222@R>F@286¦2@H2D266226FB22B2>BD\\6N22222Z222D222t")
133
+ const adjStart = PS(U("1::24444432:442:44:44>222222:44:4421322511111311111114"))
134
+ const adjTgt = DZ("2Š4A;33N=C@H4A;33N=C@<27;83:;8393NQ:3NQʰ222ˉºŴŽ2R2=18cƴÅҜ=cĞÛC1ƈǝȈ:ħ25=11D3A@4=<1;1DEr25;11B3?<6;:371BCn9@7=<8192>2E121@9@EHE@9>2T25511<398454131<=V25511<398454131<=„ƧNž2Ĕé242L222290000f22500ɛ000ǘ222")
135
+ const patGid = U("ij")
136
+ const patTgt = U("—")
137
+ const postfixLookupGroups = U("1")
138
+ const orderSensitiveModifiers = "* ** after backdrop before details-content file first-letter first-line marker placeholder selection"
139
+ export default {
140
+ GROUP_COUNT, customValidatorNames, edgeStart, labelStart, labelText,
141
+ edgeTarget, nodeGroup, nodeVlist, vlistPat, vlistOps, vlistRef, vlistGroup,
142
+ litAnchor, litGroup, litPool, poolOffsets, poolText,
143
+ adjGid, adjStart, adjTgt, patGid, patTgt, postfixLookupGroups,
144
+ orderSensitiveModifiers,
145
+ }
package/src/lib/utils.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { createCn } from 'cn/config'
1
+ import { createCn } from 'cn/engine'
2
2
  import type { CnFunction } from 'cn'
3
+ import tables from '#lib/cn-tables.generated'
3
4
 
4
5
  /**
5
6
  * Merge conditional class values, letting the last conflicting utility win.
@@ -21,52 +22,8 @@ import type { CnFunction } from 'cn'
21
22
  * shows up as a control that ignores its `size` prop, long after the line
22
23
  * that caused it was written.
23
24
  *
24
- * Registering the families below is what makes "the last class wins" true for
25
- * the whole system, including for consumers overriding a component's default.
25
+ * Compiling the design-system families into full tables makes "the last class
26
+ * wins" true for the whole system, including for consumer overrides, without
27
+ * loading the runtime config/compiler path.
26
28
  */
27
- export const cn: CnFunction = createCn({
28
- extend: {
29
- classGroups: {
30
- 'ds-height': [
31
- {
32
- h: [
33
- 'control-2xs',
34
- 'control-xs',
35
- 'control-sm',
36
- 'control-md',
37
- 'control-lg',
38
- 'control-xl',
39
- 'control-2xl',
40
- 'row-sm',
41
- 'row-md',
42
- 'row-lg',
43
- 'rail-item',
44
- 'topbar',
45
- 'statusbar',
46
- ],
47
- },
48
- ],
49
- 'ds-width': [
50
- {
51
- w: ['rail', 'rail-expanded', 'sidebar', 'sidebar-compact'],
52
- },
53
- ],
54
- // `size-*` is a real Tailwind group, but the token-derived values are
55
- // not, so they need the same treatment as height and width.
56
- 'ds-size': [
57
- {
58
- size: [
59
- 'control-2xs',
60
- 'control-xs',
61
- 'control-sm',
62
- 'control-md',
63
- 'control-lg',
64
- 'control-xl',
65
- 'control-2xl',
66
- 'rail-item',
67
- ],
68
- },
69
- ],
70
- },
71
- },
72
- })
29
+ export const cn: CnFunction = createCn(tables)