@walidsj/react-ui 0.1.1 → 0.1.3

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/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { Button as Button$1 } from "@base-ui/react/button";
2
2
  import { clsx } from "clsx";
3
3
  import { forwardRef } from "react";
4
- import { twMerge } from "tailwind-merge";
5
4
  import { jsx } from "react/jsx-runtime";
6
5
  import { Input as Input$1 } from "@base-ui/react/input";
7
6
  // node_modules/class-variance-authority/dist/index.mjs
@@ -56,18 +55,1176 @@ var cva = (base, config) => (props) => {
56
55
  ] : acc;
57
56
  }, []), props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
58
57
  };
59
- // src/lib/cn.ts
60
- function cn(...inputs) {
61
- return twMerge(clsx(inputs));
58
+ // node_modules/cn/dist/tables.js
59
+ var P = 48;
60
+ var U = (s, o = 0) => {
61
+ const out = new Int32Array(s.length);
62
+ for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i) - P - o;
63
+ return out;
64
+ };
65
+ var PS = (counts) => {
66
+ const out = new Int32Array(counts.length + 1);
67
+ for (let i = 0; i < counts.length; i++) out[i + 1] = out[i] + counts[i];
68
+ return out;
69
+ };
70
+ var DZ = (s) => {
71
+ const out = new Int32Array(s.length);
72
+ let a = 0;
73
+ for (let i = 0; i < s.length; i++) {
74
+ const z = s.charCodeAt(i) - P;
75
+ a += z >>> 1 ^ -(z & 1);
76
+ out[i] = a;
77
+ }
78
+ return out;
79
+ };
80
+ var GROUP_COUNT = 384;
81
+ var customValidatorNames = [];
82
+ var edgeStart = PS(U("E0500002005282000000002000150000020021820000011200000003022202000300004200120000200420001200021200301200010400162000010000220021010:2192001200220012000220012000200200200400010200040000000000400200108200110100000022010313000162002000020020012020080213000228200000000082000000000120002000120020020040101020300130001001010"));
83
+ var labelStart = PS(U(":11111111211111119311546544411119731869:671397415686432441111111111161114151214313433415:78311132233313187211117221449443411141111151152226611131111112212518142224214215421421542142424242516171151615616347111111111197911327451111111111111111111113134714133513411111311111111111111111111112444411111342312715245411117:3"));
84
+ 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";
85
+ var edgeTarget = (() => {
86
+ const N = edgeStart.length - 1;
87
+ const sizes = new Int32Array(N);
88
+ for (let i = N - 1; i >= 0; i--) {
89
+ let s = 1;
90
+ let c = i + 1;
91
+ for (let k = edgeStart[i]; k < edgeStart[i + 1]; k++) {
92
+ s += sizes[c];
93
+ c += sizes[c];
94
+ }
95
+ sizes[i] = s;
96
+ }
97
+ const out = new Int32Array(edgeStart[N]);
98
+ let e = 0;
99
+ for (let i = 0; i < N; i++) {
100
+ let c = i + 1;
101
+ for (let k = edgeStart[i]; k < edgeStart[i + 1]; k++) {
102
+ out[e++] = c;
103
+ c += sizes[c];
104
+ }
105
+ }
106
+ return out;
107
+ })();
108
+ var nodeGroup = U("02000000000000900<=0?000B000F00F00ŏI0J0LNPRTVX0000]_a00000000000000000000000rst0000000zŏ00000000000…ŏ000ˆ0000ŏ0000000000—0000000000000000000000000000000000000000000000000000Ë000000000000000000000Þ000000000000000000ð0000000ø0ùúûüýþÿĀāĂ㥹Ć000000000000000000000000000000000000000000ħ0ĨĪ00000000000000000000ļĽ00000Ŭ000000", 1);
109
+ var vlistPat = PS(U("123333359346463635126536711576"));
110
+ var vlistOps = U("93203242332583253248325D>E?F@03263243255B:032523853:0325B:8GA032542H<C=12727B:0328432553;D>E?3257D>032585:0325B:;0328B:032");
111
+ var vlistRef = U("012113445661666666789111:5;;;;;;;;444;;;:62999<1161=62>>?61:21@ABCD4446996:64E:::;:?::64:F114GHHIHHHHIHH1HH1HH1HHHHHH::EEJ4444::EE4444441691;644444114244444:;K6666555555555555555999666664444444444444444444444226?6:66644L9M?D:111::::6DE199");
112
+ var vlistGroup = DZ("020200202020020020020020020020200200200200200200200002020202001003040106000200200200200200200200200200200200200200200200200200200200200200200200200200200200020020020020020020002020200202002002002002002002002002002020002002020020200220200200200200200200200200200200020020020000200020002000200200200020020020002000200200200020020202002020202000200200020022000200200020020002002000200220002002000200W0Z00020020002002020002002000200g0j0002002000200200020020002002000200200020020002000200002000002002002002002000200020000200002002002002002002002020020020200200200200200200200200202020020020020020020020020002002002020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020020002002002002002002000200200200200200200200200200020202020002000200020002002002002000020200200");
113
+ var nodeVlist = (() => {
114
+ const out = (/* @__PURE__ */ new Int32Array(319)).fill(-1);
115
+ const A = DZ("02422242:222222242224222242442222222422222244442242226224222426222422442462222422622222222626222462242622422622422424242422222222422222222242422222222222222222622442224222222222222224424442262222222222222222222226224222424242422224422422422222");
116
+ const V = DZ("02222222222222222222202222222222222222222222221422222222222222222222222222222222222Y\\222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221422222222222222222222222222222222222222Ŀł222222222222222222");
117
+ for (let i = 0; i < A.length; i++) out[A[i]] = V[i];
118
+ return out;
119
+ })();
120
+ 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| 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|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| auto contents scroll transform".split("|").map((s) => {
121
+ const tails = s.split(" ");
122
+ const prefix = tails.shift();
123
+ for (let i = 0; i < tails.length; i++) tails[i] = prefix + tails[i];
124
+ return tails;
125
+ });
126
+ var AA = DZ("0000000000000000000000000000000000000000000000000000000000000262242:6@200000006:240B428:4422400002046044222426220026642642462026224222824220022400000000\\00N222422242222222224062242222222422226264222422222222222222442804222422222222222222222222220<4<0204260002444020204224422");
127
+ var AG = DZ("ɠ222222222222222222222222222222222222222222222222222222222222˕4222226>ʶ22ʷʺʷ2ʸʷ42ʴ2ʓ22>621422ɶ222ɹɼɷɺɷɺ22ɱ42222ɨ2ɧ26622ɘɓ244ƸƵ222]d24242ǖǓƚÄȫ2263ȨȥȨ2222222ǣ222222222222222222ǂƽ2ƾƵ2222222422222ƜƑ22222222222222222222144Ŧţ22Ţş222222222222222222222ĸ2ı68ĦģĦɡŰ4Ġ«®ĝ822ĔđĔ2ē2222622");
128
+ var AS = DZ("02222222222222222222222222222222222222222222222222222222222222222202022222222222EH2200IL021042222Y\\222IL0cf2e10j2222U00X202[^2y0000120|{~‚22…ˆ‡:22|22222222222G000q†OVI00000}š2›>40000ŒB00000I¨©000¬00000000000000021M®­00°“000000000000000000000–222›HGHa1º222¿2À2222ÉÌ000­°2±");
129
+ var litAnchor = /* @__PURE__ */ new Int32Array(995);
130
+ var litGroup = /* @__PURE__ */ new Int32Array(995);
131
+ var litPool = /* @__PURE__ */ new Int32Array(995);
132
+ var poolText = "";
133
+ var poolOffsets = /* @__PURE__ */ new Int32Array(1038);
134
+ {
135
+ const tailRef = /* @__PURE__ */ new Map();
136
+ let nextRef = 0;
137
+ let e = 0;
138
+ for (let i = 0; i < AA.length; i++) for (const tail of SETS[AS[i]]) {
139
+ let r = tailRef.get(tail);
140
+ if (r === void 0) {
141
+ r = nextRef++;
142
+ tailRef.set(tail, r);
143
+ poolOffsets[r * 2] = poolText.length;
144
+ poolOffsets[r * 2 + 1] = tail.length;
145
+ poolText += tail;
146
+ }
147
+ litAnchor[e] = AA[i];
148
+ litGroup[e] = AG[i];
149
+ litPool[e] = r;
150
+ e++;
151
+ }
62
152
  }
153
+ var adjGid = DZ("0b2N:222@R>F@286¦2@H2D266226FB22B2>BD\\6N22222Z222D222p");
154
+ var adjStart = PS(U("1::24444432:442:44:44>222222:44:4421322511111311111114"));
155
+ 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");
156
+ var patGid = U("ij");
157
+ var patTgt = U("—");
158
+ var postfixLookupGroups = U("1");
159
+ var tables_generated_default = {
160
+ GROUP_COUNT,
161
+ customValidatorNames,
162
+ edgeStart,
163
+ labelStart,
164
+ labelText,
165
+ edgeTarget,
166
+ nodeGroup,
167
+ nodeVlist,
168
+ vlistPat,
169
+ vlistOps,
170
+ vlistRef,
171
+ vlistGroup,
172
+ litAnchor,
173
+ litGroup,
174
+ litPool,
175
+ poolOffsets,
176
+ poolText,
177
+ adjGid,
178
+ adjStart,
179
+ adjTgt,
180
+ patGid,
181
+ patTgt,
182
+ postfixLookupGroups,
183
+ orderSensitiveModifiers: "* ** after backdrop before details-content file first-letter first-line marker placeholder selection"
184
+ };
185
+ // node_modules/cn/dist/engine.js
186
+ var IS_JSC = "line" in /* @__PURE__ */ new Error();
187
+ var EXTERNAL = -1;
188
+ var DEAD = -1;
189
+ var fnv = (str, s, e) => {
190
+ let h = 2166136261;
191
+ for (let p = s; p < e; p++) h = Math.imul(h ^ str.charCodeAt(p), 16777619);
192
+ return h;
193
+ };
194
+ var spanHash = (str, s, e) => {
195
+ const len = e - s;
196
+ let h = Math.imul(len, 2654435761) ^ str.charCodeAt(s);
197
+ if (len > 3) {
198
+ const q = len >> 2;
199
+ const m = len >> 1;
200
+ h = Math.imul(h ^ str.charCodeAt(s + 1) << 8 ^ str.charCodeAt(s + 2) << 16 ^ str.charCodeAt(s + q), 2246822507);
201
+ h = Math.imul(h ^ str.charCodeAt(s + m) << 8 ^ str.charCodeAt(s + m + q) << 16 ^ str.charCodeAt(e - 3), 3266489909);
202
+ h ^= str.charCodeAt(e - 2) << 8 ^ str.charCodeAt(e - 1) << 16;
203
+ for (let p = s + 3, q = e - 4; p < s + 8 && p < q; p++, q--) h = Math.imul(h ^ str.charCodeAt(p) ^ str.charCodeAt(q) << 8, 16777619);
204
+ }
205
+ return h ^ h >>> 15 | 0;
206
+ };
207
+ var createEngine = (T, validatorImpls, options = {}) => {
208
+ const { GROUP_COUNT, edgeStart, labelStart, labelText, edgeTarget, nodeGroup, nodeVlist, vlistPat, vlistOps, vlistRef, vlistGroup, litAnchor, litGroup, litPool, poolOffsets, poolText, adjGid, adjStart, adjTgt, patGid, patTgt, postfixLookupGroups, customValidatorNames, orderSensitiveModifiers } = T;
209
+ const adjRow = new Int32Array(GROUP_COUNT).fill(-1);
210
+ for (let i = 0; i < adjGid.length; i++) adjRow[adjGid[i]] = i;
211
+ let maxAdj = 0;
212
+ for (let r = 0; r + 1 < adjStart.length; r++) {
213
+ const n = adjStart[r + 1] - adjStart[r];
214
+ if (n > maxAdj) maxAdj = n;
215
+ }
216
+ let CLAIM_PER_TOKEN = 32;
217
+ while (CLAIM_PER_TOKEN < 2 * (1 + maxAdj + patGid.length)) CLAIM_PER_TOKEN <<= 1;
218
+ const vgStart = new Int32Array(vlistRef.length + 1);
219
+ for (let l = 0; l < vlistRef.length; l++) vgStart[l + 1] = vgStart[l] + vlistPat[vlistRef[l] + 1] - vlistPat[vlistRef[l]];
220
+ const postfixLookupSet = new Uint8Array(GROUP_COUNT);
221
+ for (let i = 0; i < postfixLookupGroups.length; i++) postfixLookupSet[postfixLookupGroups[i]] = 1;
222
+ const nodeCount = edgeStart.length - 1;
223
+ const nodeHasLit = new Uint8Array(nodeCount);
224
+ let litMaxLen = 0;
225
+ let litNoArb = true;
226
+ for (let i = 0; i < litAnchor.length; i++) {
227
+ nodeHasLit[litAnchor[i]] = 1;
228
+ const len = poolOffsets[litPool[i] * 2 + 1];
229
+ if (len > litMaxLen) litMaxLen = len;
230
+ const c0 = poolText.charCodeAt(poolOffsets[litPool[i] * 2]);
231
+ if (c0 === 91 || c0 === 40) litNoArb = false;
232
+ }
233
+ let LIT_SIZE = 1;
234
+ while (LIT_SIZE < litAnchor.length * 2) LIT_SIZE <<= 1;
235
+ const litTable = new Int32Array(LIT_SIZE).fill(-1);
236
+ for (let i = 0; i < litAnchor.length; i++) {
237
+ const off = poolOffsets[litPool[i] * 2];
238
+ let idx = (fnv(poolText, off, off + poolOffsets[litPool[i] * 2 + 1]) ^ Math.imul(litAnchor[i], 2654435761) | 0) & LIT_SIZE - 1;
239
+ while (litTable[idx] !== -1) idx = idx + 1 & LIT_SIZE - 1;
240
+ litTable[idx] = i;
241
+ }
242
+ const litProbe = (anchor, input, s, e) => {
243
+ let idx = (fnv(input, s, e) ^ Math.imul(anchor, 2654435761) | 0) & LIT_SIZE - 1;
244
+ const len = e - s;
245
+ for (;;) {
246
+ const entry = litTable[idx];
247
+ if (entry === -1) return -1;
248
+ if (litAnchor[entry] === anchor && poolOffsets[litPool[entry] * 2 + 1] === len) {
249
+ const off = poolOffsets[litPool[entry] * 2];
250
+ let ok = true;
251
+ for (let k = 0; k < len; k++) if (poolText.charCodeAt(off + k) !== input.charCodeAt(s + k)) {
252
+ ok = false;
253
+ break;
254
+ }
255
+ if (ok) return litGroup[entry];
256
+ }
257
+ idx = idx + 1 & LIT_SIZE - 1;
258
+ }
259
+ };
260
+ const cacheSize = options.cacheSize ?? 8192;
261
+ const RAW_PREFIX = options.prefix ?? T.prefix ?? "";
262
+ const FULL_PREFIX = RAW_PREFIX === "" ? "" : RAW_PREFIX + ":";
263
+ const FPL = FULL_PREFIX.length;
264
+ const vCustom = (customValidatorNames ?? []).map((name) => {
265
+ const fn = validatorImpls && validatorImpls[name];
266
+ if (!fn) throw new Error("cn: missing validator " + name);
267
+ return fn;
268
+ });
269
+ const lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
270
+ const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/;
271
+ const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
272
+ const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
273
+ let aKind = 0;
274
+ let aLabelS = -1;
275
+ let aLabelE = -1;
276
+ let aValS = -1;
277
+ let aValE = -1;
278
+ const isWordCode = (c) => c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c === 95;
279
+ const isUniWS = (c) => /\s/.test(String.fromCharCode(c));
280
+ const analyzeArb = (input, s, e) => {
281
+ aKind = 0;
282
+ aLabelS = -1;
283
+ if (e - s < 3) return;
284
+ const c0 = input.charCodeAt(s);
285
+ const cl = input.charCodeAt(e - 1);
286
+ if (c0 === 91 && cl === 93) aKind = 1;
287
+ else if (c0 === 40 && cl === 41) aKind = 2;
288
+ else return;
289
+ aValS = s + 1;
290
+ aValE = e - 1;
291
+ let p = s + 1;
292
+ if (isWordCode(input.charCodeAt(p))) {
293
+ p++;
294
+ while (p < e - 1) {
295
+ const c = input.charCodeAt(p);
296
+ if (!isWordCode(c) && c !== 45) break;
297
+ p++;
298
+ }
299
+ if (p < e - 2 && input.charCodeAt(p) === 58) {
300
+ aLabelS = s + 1;
301
+ aLabelE = p;
302
+ aValS = p + 1;
303
+ }
304
+ }
305
+ };
306
+ const spanEq = (input, s, e, str) => {
307
+ if (e - s !== str.length) return false;
308
+ for (let i = 0; i < str.length; i++) if (input.charCodeAt(s + i) !== str.charCodeAt(i)) return false;
309
+ return true;
310
+ };
311
+ const fractionRegex = /^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/;
312
+ const tshirtRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
313
+ const isNumStr = (v) => !!v && !Number.isNaN(Number(v));
314
+ const spanIsNamedContainerQuery = (input, s, e) => {
315
+ if (e - s < 11 || !spanEq(input, s, s + 10, "@container")) return false;
316
+ if (input.charCodeAt(s + 10) === 47) return e - s >= 12;
317
+ const c11 = input.charCodeAt(s + 11);
318
+ return c11 === 115 && e - s >= 17 && spanEq(input, s + 10, s + 16, "-size/") || c11 === 110 && e - s >= 19 && spanEq(input, s + 10, s + 18, "-normal/");
319
+ };
320
+ const VKIND = [
321
+ 1,
322
+ 1,
323
+ 1,
324
+ 1,
325
+ 1,
326
+ 1,
327
+ 1,
328
+ 1,
329
+ 2,
330
+ 2,
331
+ 2,
332
+ 2,
333
+ 2,
334
+ 2,
335
+ 2
336
+ ];
337
+ const VLABELS = "length|number|number weight|family-name|position percentage|length size bg-size|image url|shadow|length|family-name|position percentage|length size bg-size|image url|shadow|number weight".split("|").map((s) => s.split(" "));
338
+ const VFALL = [
339
+ 2,
340
+ 3,
341
+ 1,
342
+ 0,
343
+ 0,
344
+ 0,
345
+ 4,
346
+ 5,
347
+ 0,
348
+ 0,
349
+ 0,
350
+ 0,
351
+ 0,
352
+ 1,
353
+ 1
354
+ ];
355
+ const runValidator = (op, input, s, e) => {
356
+ if (op >= 10) {
357
+ if (op >= 25) return vCustom[op - 25](input.slice(s, e));
358
+ const i = op - 10;
359
+ if (aKind !== VKIND[i]) return false;
360
+ if (aLabelS >= 0) {
361
+ for (const L of VLABELS[i]) if (spanEq(input, aLabelS, aLabelE, L)) return true;
362
+ return false;
363
+ }
364
+ switch (VFALL[i]) {
365
+ case 0: return false;
366
+ case 1: return true;
367
+ case 2: {
368
+ const v = input.slice(aValS, aValE);
369
+ return lengthUnitRegex.test(v) && !colorFunctionRegex.test(v);
370
+ }
371
+ case 3: return isNumStr(input.slice(aValS, aValE));
372
+ case 4: return imageRegex.test(input.slice(aValS, aValE));
373
+ default: return shadowRegex.test(input.slice(aValS, aValE));
374
+ }
375
+ }
376
+ switch (op) {
377
+ case 0: return true;
378
+ case 1: return aKind === 0;
379
+ case 2: return aKind === 1;
380
+ case 3: return aKind === 2;
381
+ case 4: return fractionRegex.test(input.slice(s, e));
382
+ case 5: return isNumStr(input.slice(s, e));
383
+ case 6: {
384
+ const v = input.slice(s, e);
385
+ return !!v && Number.isInteger(Number(v));
386
+ }
387
+ case 7: return e > s && input.charCodeAt(e - 1) === 37 && isNumStr(input.slice(s, e - 1));
388
+ case 8: return tshirtRegex.test(input.slice(s, e));
389
+ default: return spanIsNamedContainerQuery(input, s, e);
390
+ }
391
+ };
392
+ const orderSensitive = new Set(typeof orderSensitiveModifiers === "string" ? orderSensitiveModifiers.split(" ") : orderSensitiveModifiers);
393
+ const internSpan = (map, input, s, e, imp, make) => {
394
+ const h = fnv(input, s, e) ^ (imp ? 2654435769 : 0) | 0;
395
+ let bucket = map.get(h);
396
+ if (bucket !== void 0) outer: for (let b = 0; b < bucket.length; b++) {
397
+ const en = bucket[b];
398
+ if (en.imp !== imp || en.k.length !== e - s) continue;
399
+ for (let i = 0; i < en.k.length; i++) if (en.k.charCodeAt(i) !== input.charCodeAt(s + i)) continue outer;
400
+ return en.id;
401
+ }
402
+ else map.set(h, bucket = []);
403
+ const k = input.slice(s, e);
404
+ const id = make(k);
405
+ bucket.push({
406
+ k,
407
+ imp,
408
+ id
409
+ });
410
+ return id;
411
+ };
412
+ let ctxByHash = /* @__PURE__ */ new Map();
413
+ let ctxByCanon = /* @__PURE__ */ new Map();
414
+ let nextCtxId = 2;
415
+ const MAX_CTX = 4096;
416
+ const canonicalizeContext = (raw, important) => {
417
+ const mods = [];
418
+ let dB = 0, dP = 0, start = 0;
419
+ for (let i = 0; i < raw.length; i++) {
420
+ const c = raw.charCodeAt(i);
421
+ if (dB === 0 && dP === 0 && c === 58) {
422
+ mods.push(raw.slice(start, i));
423
+ start = i + 1;
424
+ } else if (c === 91) dB++;
425
+ else if (c === 93) dB--;
426
+ else if (c === 40) dP++;
427
+ else if (c === 41) dP--;
428
+ }
429
+ mods.push(raw.slice(start));
430
+ let canonical = mods[0];
431
+ if (mods.length > 1) {
432
+ const result = [];
433
+ let segment = [];
434
+ for (const mod of mods) if (mod.charCodeAt(0) === 91 || orderSensitive.has(mod)) {
435
+ if (segment.length) {
436
+ result.push(...segment.sort());
437
+ segment = [];
438
+ }
439
+ result.push(mod);
440
+ } else segment.push(mod);
441
+ if (segment.length) result.push(...segment.sort());
442
+ canonical = result.join(":");
443
+ }
444
+ const key = important ? canonical + " !" : canonical;
445
+ let id = ctxByCanon.get(key);
446
+ if (id === void 0) ctxByCanon.set(key, id = nextCtxId++);
447
+ return id;
448
+ };
449
+ let dynByHash = /* @__PURE__ */ new Map();
450
+ let nextDynId = GROUP_COUNT;
451
+ const MAX_DYN = GROUP_COUNT + 4096;
452
+ const newDynId = () => nextDynId++;
453
+ const ID_LIMIT = 2097152;
454
+ const TOKEN_TABLE = 8192;
455
+ const memoHash = new Int32Array(TOKEN_TABLE);
456
+ const memoStr = new Array(TOKEN_TABLE).fill(null);
457
+ const memoGid = new Int32Array(TOKEN_TABLE);
458
+ const memoCtx = new Int32Array(TOKEN_TABLE);
459
+ const memoFlags = new Uint8Array(TOKEN_TABLE);
460
+ let memoTick = 0;
461
+ const memoPut = (way0, input, ts, te, h, gid, ctxId, flags) => {
462
+ let slot = way0;
463
+ if (memoStr[way0] !== null) {
464
+ if (memoStr[way0 | 1] === null) slot = way0 | 1;
465
+ else if ((memoTick++ & 3) === 0) slot = way0 | memoTick >> 2 & 1;
466
+ else return;
467
+ }
468
+ memoStr[slot] = input.slice(ts, te);
469
+ memoHash[slot] = h;
470
+ memoGid[slot] = gid;
471
+ memoCtx[slot] = ctxId;
472
+ memoFlags[slot] = flags;
473
+ };
474
+ const memoReset = () => memoStr.fill(null);
475
+ let cap = 256;
476
+ let tokI32 = [
477
+ new Int32Array(cap),
478
+ new Int32Array(cap),
479
+ new Int32Array(cap),
480
+ new Int32Array(cap)
481
+ ];
482
+ let [tokStart, tokEnd, tokGid, tokCtx] = tokI32;
483
+ let tokFlags = new Uint8Array(cap);
484
+ let keep = new Uint8Array(cap);
485
+ const growTokens = () => {
486
+ cap *= 2;
487
+ tokI32 = tokI32.map((a) => {
488
+ const n = new Int32Array(cap);
489
+ n.set(a);
490
+ return n;
491
+ });
492
+ [tokStart, tokEnd, tokGid, tokCtx] = tokI32;
493
+ const nf = new Uint8Array(cap);
494
+ nf.set(tokFlags);
495
+ tokFlags = nf;
496
+ keep = new Uint8Array(cap);
497
+ };
498
+ let ckptCap = 64;
499
+ let ckptNode = new Int32Array(ckptCap);
500
+ let ckptTail = new Int32Array(ckptCap);
501
+ const claim0 = new Int32Array(GROUP_COUNT);
502
+ let CLAIM_TABLE = 2048;
503
+ let claimShift = 21;
504
+ let claimKeys = new Float64Array(CLAIM_TABLE);
505
+ let claimEpochs = new Int32Array(CLAIM_TABLE);
506
+ let epoch = 0;
507
+ const claimTest = (ctx, gid) => {
508
+ if (ctx === 0 && gid < GROUP_COUNT) {
509
+ if (claim0[gid] === epoch) return 1;
510
+ claim0[gid] = epoch;
511
+ return 0;
512
+ }
513
+ const key = ctx * 2097152 + gid + 1;
514
+ let idx = Math.imul(key, 2654435761) >>> claimShift;
515
+ for (;;) {
516
+ if (claimEpochs[idx] !== epoch) break;
517
+ if (claimKeys[idx] === key) return 1;
518
+ idx = idx + 1 & CLAIM_TABLE - 1;
519
+ }
520
+ claimKeys[idx] = key;
521
+ claimEpochs[idx] = epoch;
522
+ return 0;
523
+ };
524
+ const resolveAt = (input, bs, endPos, nodeAt, ckptAt) => {
525
+ if (endPos - bs >= 2 && input.charCodeAt(bs) === 91 && input.charCodeAt(endPos - 1) === 93) {
526
+ let colon = -1;
527
+ for (let p = bs + 1; p < endPos - 1; p++) if (input.charCodeAt(p) === 58) {
528
+ colon = p;
529
+ break;
530
+ }
531
+ if (colon === -1 || colon === bs + 1) return EXTERNAL;
532
+ return internSpan(dynByHash, input, bs + 1, colon, 0, newDynId);
533
+ }
534
+ if (nodeAt >= 0 && nodeGroup[nodeAt] >= 0) return nodeGroup[nodeAt];
535
+ for (let k = ckptAt - 1; k >= 0; k--) {
536
+ const tailStart = ckptTail[k];
537
+ if (tailStart > endPos) continue;
538
+ const nodeId = ckptNode[k];
539
+ const tlen = endPos - tailStart;
540
+ if (nodeHasLit[nodeId] === 1 && tlen > 0 && tlen <= litMaxLen) {
541
+ const c0 = input.charCodeAt(tailStart);
542
+ if (litNoArb === false || c0 !== 91 && c0 !== 40) {
543
+ const g = litProbe(nodeId, input, tailStart, endPos);
544
+ if (g >= 0) return g;
545
+ }
546
+ }
547
+ const vl = nodeVlist[nodeId];
548
+ if (vl < 0) continue;
549
+ const pat = vlistRef[vl];
550
+ const vs = vlistPat[pat];
551
+ const ve = vlistPat[pat + 1];
552
+ if (vs === ve) continue;
553
+ analyzeArb(input, tailStart, endPos);
554
+ const g0 = vgStart[vl] - vs;
555
+ for (let v = vs; v < ve; v++) if (runValidator(vlistOps[v], input, tailStart, endPos)) return vlistGroup[g0 + v];
556
+ }
557
+ return EXTERNAL;
558
+ };
559
+ const mergeClassList = (input) => {
560
+ const n = input.length;
561
+ let tokenCount = 0;
562
+ let totalTokenChars = 0;
563
+ let sawNonSpaceWS = false;
564
+ if (nextCtxId > MAX_CTX || ctxByHash.size > MAX_CTX) {
565
+ ctxByHash = /* @__PURE__ */ new Map();
566
+ ctxByCanon = /* @__PURE__ */ new Map();
567
+ nextCtxId = 2;
568
+ memoReset();
569
+ }
570
+ if (nextDynId > MAX_DYN) {
571
+ dynByHash = /* @__PURE__ */ new Map();
572
+ nextDynId = GROUP_COUNT;
573
+ memoReset();
574
+ }
575
+ let i = 0;
576
+ while (i < n) {
577
+ let c = input.charCodeAt(i);
578
+ if (c === 32 || c >= 9 && c <= 13 || c >= 160 && isUniWS(c)) {
579
+ if (c !== 32) sawNonSpaceWS = true;
580
+ i++;
581
+ continue;
582
+ }
583
+ const ts = i;
584
+ let th = 0;
585
+ while (i < n) {
586
+ c = input.charCodeAt(i);
587
+ if (c <= 32) {
588
+ if (c === 32) break;
589
+ if (c >= 9 && c <= 13) {
590
+ sawNonSpaceWS = true;
591
+ break;
592
+ }
593
+ } else if (c >= 160 && isUniWS(c)) {
594
+ sawNonSpaceWS = true;
595
+ break;
596
+ }
597
+ th = Math.imul(th ^ c, 16777619);
598
+ i++;
599
+ }
600
+ const te = i;
601
+ const len = te - ts;
602
+ if (tokenCount === cap) growTokens();
603
+ const t = tokenCount++;
604
+ tokStart[t] = ts;
605
+ tokEnd[t] = te;
606
+ totalTokenChars += len;
607
+ th ^= Math.imul(len, 2654435761);
608
+ const h = th ^ th >>> 15 | 0;
609
+ const way0 = h & 8190;
610
+ {
611
+ let hitAt = -1;
612
+ if (memoHash[way0] === h && memoStr[way0] !== null && memoStr[way0].length === len) hitAt = way0;
613
+ else if (memoHash[way0 | 1] === h && memoStr[way0 | 1] !== null && memoStr[way0 | 1].length === len) hitAt = way0 | 1;
614
+ if (hitAt >= 0) {
615
+ const s = memoStr[hitAt];
616
+ let ok = true;
617
+ for (let k = 0; k < len; k++) if (s.charCodeAt(k) !== input.charCodeAt(ts + k)) {
618
+ ok = false;
619
+ break;
620
+ }
621
+ if (ok) {
622
+ tokGid[t] = memoGid[hitAt];
623
+ tokCtx[t] = memoCtx[hitAt];
624
+ tokFlags[t] = memoFlags[hitAt];
625
+ continue;
626
+ }
627
+ }
628
+ }
629
+ let pts = ts;
630
+ if (FPL !== 0) {
631
+ if (te - ts <= FPL || !input.startsWith(FULL_PREFIX, ts)) {
632
+ tokGid[t] = EXTERNAL;
633
+ memoPut(way0, input, ts, te, h, EXTERNAL, 0, 0);
634
+ continue;
635
+ }
636
+ pts = ts + FPL;
637
+ }
638
+ let depthB = 0, depthP = 0;
639
+ let lastColon = -1, lastSlash = -1;
640
+ for (let p = pts; p < te; p++) {
641
+ const pc = input.charCodeAt(p);
642
+ if (depthB === 0 && depthP === 0) {
643
+ if (pc === 58) {
644
+ lastColon = p;
645
+ continue;
646
+ }
647
+ if (pc === 47) {
648
+ lastSlash = p;
649
+ continue;
650
+ }
651
+ }
652
+ if (pc === 91) depthB++;
653
+ else if (pc === 93) depthB--;
654
+ else if (pc === 40) depthP++;
655
+ else if (pc === 41) depthP--;
656
+ }
657
+ const modStart = lastColon >= pts ? lastColon + 1 : pts;
658
+ let bs = modStart;
659
+ let be = te;
660
+ let important = false;
661
+ let prefixShift = 0;
662
+ if (be > bs && input.charCodeAt(be - 1) === 33) {
663
+ important = true;
664
+ be--;
665
+ } else if (be > bs && input.charCodeAt(bs) === 33) {
666
+ important = true;
667
+ bs++;
668
+ prefixShift = 1;
669
+ }
670
+ let postfixEnd = -1;
671
+ if (lastSlash > modStart) {
672
+ postfixEnd = lastSlash + prefixShift;
673
+ if (postfixEnd >= be) postfixEnd = -1;
674
+ }
675
+ let feedStart = bs;
676
+ if (be - bs > 1 && input.charCodeAt(bs) === 45) feedStart = bs + 1;
677
+ let node = 0;
678
+ let lp = 0;
679
+ let le = 0;
680
+ let pending = -1;
681
+ let ckptTop = 0;
682
+ if (nodeVlist[0] >= 0 || nodeHasLit[0] === 1) {
683
+ ckptNode[0] = 0;
684
+ ckptTail[0] = feedStart;
685
+ ckptTop = 1;
686
+ }
687
+ let slashNode = DEAD;
688
+ let slashCkpt = 0;
689
+ for (let p = feedStart; p < be; p++) {
690
+ if (p === postfixEnd) {
691
+ slashNode = lp < le ? DEAD : node;
692
+ slashCkpt = ckptTop;
693
+ }
694
+ if (node !== DEAD) {
695
+ const cc = input.charCodeAt(p);
696
+ let arrived = -1;
697
+ if (lp < le) {
698
+ if (labelText.charCodeAt(lp) === cc) {
699
+ lp++;
700
+ if (lp === le) arrived = node = pending;
701
+ } else node = DEAD;
702
+ } else {
703
+ const es = edgeStart[node];
704
+ const ee = edgeStart[node + 1];
705
+ let next = DEAD;
706
+ for (let e = es; e < ee; e++) {
707
+ const ls = labelStart[e];
708
+ if (labelText.charCodeAt(ls) === cc) {
709
+ if (labelStart[e + 1] - ls === 1) arrived = next = edgeTarget[e];
710
+ else {
711
+ lp = ls + 1;
712
+ le = labelStart[e + 1];
713
+ pending = edgeTarget[e];
714
+ next = node;
715
+ }
716
+ break;
717
+ }
718
+ }
719
+ node = next;
720
+ }
721
+ if (arrived >= 0 && (nodeVlist[arrived] >= 0 || nodeHasLit[arrived] === 1) && p + 1 < be && input.charCodeAt(p + 1) === 45) {
722
+ if (ckptTop === ckptCap) {
723
+ ckptCap *= 2;
724
+ const nv = new Int32Array(ckptCap);
725
+ nv.set(ckptNode);
726
+ ckptNode = nv;
727
+ const nt = new Int32Array(ckptCap);
728
+ nt.set(ckptTail);
729
+ ckptTail = nt;
730
+ }
731
+ ckptNode[ckptTop] = arrived;
732
+ ckptTail[ckptTop] = p + 2;
733
+ ckptTop++;
734
+ }
735
+ }
736
+ }
737
+ if (postfixEnd === be) {
738
+ slashNode = lp < le ? DEAD : node;
739
+ slashCkpt = ckptTop;
740
+ }
741
+ const endNode = lp < le ? DEAD : node;
742
+ let gid;
743
+ let hasPostfix = false;
744
+ if (postfixEnd >= 0) {
745
+ hasPostfix = true;
746
+ gid = resolveAt(input, bs, postfixEnd, slashNode, slashCkpt);
747
+ if (gid !== EXTERNAL && gid < GROUP_COUNT && postfixLookupSet[gid]) {
748
+ const gidFull = resolveAt(input, bs, be, endNode, ckptTop);
749
+ if (gidFull !== EXTERNAL && gidFull !== gid) {
750
+ gid = gidFull;
751
+ hasPostfix = false;
752
+ }
753
+ } else if (gid === EXTERNAL) {
754
+ gid = resolveAt(input, bs, be, endNode, ckptTop);
755
+ hasPostfix = false;
756
+ }
757
+ } else gid = resolveAt(input, bs, be, endNode, ckptTop);
758
+ let ctxId = 0;
759
+ let flags = 0;
760
+ if (gid === EXTERNAL) tokGid[t] = EXTERNAL;
761
+ else {
762
+ flags = hasPostfix ? 1 : 0;
763
+ ctxId = pts >= lastColon ? important ? 1 : 0 : internSpan(ctxByHash, input, pts, lastColon, important ? 1 : 0, (k) => canonicalizeContext(k, important));
764
+ tokGid[t] = gid;
765
+ tokFlags[t] = flags;
766
+ tokCtx[t] = ctxId;
767
+ }
768
+ memoPut(way0, input, ts, te, h, gid, ctxId, flags);
769
+ }
770
+ if (tokenCount === 0) return "";
771
+ if (tokenCount === 1) return tokStart[0] === 0 && tokEnd[0] === n ? input : input.slice(tokStart[0], tokEnd[0]);
772
+ if (tokenCount * CLAIM_PER_TOKEN > CLAIM_TABLE) {
773
+ while (tokenCount * CLAIM_PER_TOKEN > CLAIM_TABLE) {
774
+ CLAIM_TABLE <<= 1;
775
+ claimShift--;
776
+ }
777
+ claimKeys = new Float64Array(CLAIM_TABLE);
778
+ claimEpochs = new Int32Array(CLAIM_TABLE);
779
+ }
780
+ if (nextCtxId >= ID_LIMIT || nextDynId >= ID_LIMIT) throw new Error("cn: too many distinct classes in one merge");
781
+ epoch = epoch + 1 | 0;
782
+ if (epoch === 0) {
783
+ claim0.fill(0);
784
+ claimEpochs.fill(0);
785
+ epoch = 1;
786
+ }
787
+ let didDrop = false;
788
+ for (let t = tokenCount - 1; t >= 0; t--) {
789
+ const gid = tokGid[t];
790
+ if (gid === EXTERNAL) {
791
+ keep[t] = 1;
792
+ continue;
793
+ }
794
+ const ctxId = tokCtx[t];
795
+ if (claimTest(ctxId, gid) === 1) {
796
+ keep[t] = 0;
797
+ didDrop = true;
798
+ continue;
799
+ }
800
+ keep[t] = 1;
801
+ if (gid < GROUP_COUNT) {
802
+ const r = adjRow[gid];
803
+ if (r >= 0) for (let k = adjStart[r]; k < adjStart[r + 1]; k++) claimTest(ctxId, adjTgt[k]);
804
+ if (tokFlags[t] & 1) {
805
+ for (let k = 0; k < patGid.length; k++) if (patGid[k] === gid) claimTest(ctxId, patTgt[k]);
806
+ }
807
+ }
808
+ }
809
+ if (!didDrop && !sawNonSpaceWS && n === totalTokenChars + tokenCount - 1) return input;
810
+ let out = "";
811
+ let t = 0;
812
+ while (t < tokenCount) {
813
+ if (!keep[t]) {
814
+ t++;
815
+ continue;
816
+ }
817
+ const runStart = tokStart[t];
818
+ let runEnd = tokEnd[t];
819
+ let u = t + 1;
820
+ while (u < tokenCount && keep[u] && tokStart[u] === runEnd + 1 && input.charCodeAt(runEnd) === 32) {
821
+ runEnd = tokEnd[u];
822
+ u++;
823
+ }
824
+ if (out.length > 0) out += " ";
825
+ out += input.slice(runStart, runEnd);
826
+ t = u;
827
+ }
828
+ return out;
829
+ };
830
+ const DOOR_SIZE = 16384;
831
+ const door = new Int32Array(DOOR_SIZE * 2);
832
+ let doorBase = 0;
833
+ let doorEpoch = 1;
834
+ let cache = Object.create(null);
835
+ let prevCache = Object.create(null);
836
+ let cacheMap = /* @__PURE__ */ new Map();
837
+ let prevCacheMap = /* @__PURE__ */ new Map();
838
+ let cacheCount = 0;
839
+ let doorMarks = 0;
840
+ const rotateDoor = () => {
841
+ doorBase ^= DOOR_SIZE;
842
+ doorEpoch = doorEpoch + 1 | 0;
843
+ doorMarks = 0;
844
+ };
845
+ const mergeCached = (input) => {
846
+ let merged = cache[input];
847
+ if (merged !== void 0) return merged;
848
+ const hash = spanHash(input, 0, input.length);
849
+ const slot = (hash & 16383) + doorBase;
850
+ const wasSeen = door[slot] === (hash ^ doorEpoch) || door[slot ^ DOOR_SIZE] === (hash ^ doorEpoch - 1);
851
+ if (wasSeen) {
852
+ merged = prevCache[input];
853
+ if (merged !== void 0) {
854
+ cache[input] = merged;
855
+ return merged;
856
+ }
857
+ }
858
+ merged = mergeClassList(input);
859
+ if (wasSeen) {
860
+ cache[input] = merged;
861
+ if (++cacheCount > cacheSize) {
862
+ cacheCount = 0;
863
+ prevCache = cache;
864
+ cache = Object.create(null);
865
+ rotateDoor();
866
+ }
867
+ } else {
868
+ door[slot] = hash ^ doorEpoch;
869
+ if (++doorMarks > DOOR_SIZE) rotateDoor();
870
+ }
871
+ return merged;
872
+ };
873
+ const mergeCachedMap = (input) => {
874
+ let merged = cacheMap.get(input);
875
+ if (merged !== void 0) return merged;
876
+ const hash = spanHash(input, 0, input.length);
877
+ const slot = (hash & 16383) + doorBase;
878
+ const wasSeen = door[slot] === (hash ^ doorEpoch) || door[slot ^ DOOR_SIZE] === (hash ^ doorEpoch - 1);
879
+ if (wasSeen) {
880
+ merged = prevCacheMap.get(input);
881
+ if (merged !== void 0) {
882
+ cacheMap.set(input, merged);
883
+ return merged;
884
+ }
885
+ }
886
+ merged = mergeClassList(input);
887
+ if (wasSeen) {
888
+ cacheMap.set(input, merged);
889
+ if (++cacheCount > cacheSize) {
890
+ cacheCount = 0;
891
+ prevCacheMap = cacheMap;
892
+ cacheMap = /* @__PURE__ */ new Map();
893
+ rotateDoor();
894
+ }
895
+ } else {
896
+ door[slot] = hash ^ doorEpoch;
897
+ if (++doorMarks > DOOR_SIZE) rotateDoor();
898
+ }
899
+ return merged;
900
+ };
901
+ const seenBefore = (input) => {
902
+ const hash = spanHash(input, 0, input.length);
903
+ const slot = (hash & 16383) + doorBase;
904
+ if (door[slot] === (hash ^ doorEpoch) || door[slot ^ DOOR_SIZE] === (hash ^ doorEpoch - 1)) return true;
905
+ door[slot] = hash ^ doorEpoch;
906
+ if (++doorMarks > DOOR_SIZE) rotateDoor();
907
+ return false;
908
+ };
909
+ const mergeString = cacheSize === 0 ? mergeClassList : IS_JSC ? (input) => {
910
+ const merged = cacheMap.get(input);
911
+ return merged !== void 0 ? merged : mergeCachedMap(input);
912
+ } : mergeCached;
913
+ const merge = function() {
914
+ return arguments.length === 1 && typeof arguments[0] === "string" ? mergeString(arguments[0]) : mergeString(twJoin.apply(null, arguments));
915
+ };
916
+ return {
917
+ merge,
918
+ mergeString,
919
+ seenBefore: cacheSize === 0 ? () => false : seenBefore,
920
+ mergeUncached: mergeClassList
921
+ };
922
+ };
923
+ var resolveValue = (v, clsxMode) => {
924
+ if (!v) return "";
925
+ if (typeof v === "string") return v;
926
+ let out = "";
927
+ if (typeof v.length === "number" && (clsxMode ? Array.isArray(v) : true)) {
928
+ const arr = v;
929
+ for (let i = 0; i < arr.length; i++) {
930
+ const item = arr[i];
931
+ if (!item) continue;
932
+ const r = typeof item === "string" ? item : resolveValue(item, clsxMode);
933
+ if (r) {
934
+ if (out) out += " ";
935
+ out += r;
936
+ }
937
+ }
938
+ return out;
939
+ }
940
+ if (clsxMode) {
941
+ if (typeof v === "number") return "" + v;
942
+ if (typeof v === "object") {
943
+ for (const k in v) if (v[k]) {
944
+ if (out) out += " ";
945
+ out += k;
946
+ }
947
+ }
948
+ }
949
+ return out;
950
+ };
951
+ var joinArgs = (args, clsxMode) => {
952
+ let s = "";
953
+ for (let i = 0; i < args.length; i++) {
954
+ const a = args[i];
955
+ if (!a) continue;
956
+ const r = typeof a === "string" ? a : resolveValue(a, clsxMode);
957
+ if (r) {
958
+ if (s) s += " ";
959
+ s += r;
960
+ }
961
+ }
962
+ return s;
963
+ };
964
+ /** join-only, `twJoin`-compatible (strings + nested arrays, falsy skipped) */
965
+ var twJoin = function() {
966
+ return joinArgs(arguments, false);
967
+ };
968
+ var BUCKET_CAP = 256;
969
+ var BUCKET_MISS_CAP = 16;
970
+ var BUCKET_SKIP = 1024;
971
+ var CHURN_SIZE = 4096;
972
+ var wrapClsx = (mergeString, fresh) => {
973
+ const seenBefore = fresh === void 0 ? () => true : fresh.seenBefore;
974
+ const mergeUncached = fresh === void 0 ? mergeString : fresh.mergeUncached;
975
+ let argCache = /* @__PURE__ */ new Map();
976
+ let prevArgCache = /* @__PURE__ */ new Map();
977
+ let argCount = 0;
978
+ let lastHit = null;
979
+ let churnKey = null;
980
+ let churnOwn = [];
981
+ let churnVal = [];
982
+ let churnTick = 0;
983
+ const churnLookup = (key, own, join) => {
984
+ if (churnKey === null) {
985
+ churnKey = new Array(CHURN_SIZE).fill("");
986
+ churnOwn = new Array(CHURN_SIZE).fill("");
987
+ churnVal = new Array(CHURN_SIZE).fill("");
988
+ }
989
+ const way0 = spanHash(key, 0, key.length) & 4094;
990
+ if (churnKey[way0] === key && churnOwn[way0] === own) return churnVal[way0];
991
+ if (churnKey[way0 | 1] === key && churnOwn[way0 | 1] === own) return churnVal[way0 | 1];
992
+ const merged = mergeString(join ? own + " " + key : key);
993
+ const slot = churnKey[way0] === "" ? way0 : way0 | (churnKey[way0 | 1] === "" ? 1 : churnTick++ & 1);
994
+ churnKey[slot] = key;
995
+ churnOwn[slot] = own;
996
+ churnVal[slot] = merged;
997
+ return merged;
998
+ };
999
+ const match3 = (e, v0, v1, v2) => {
1000
+ let k = 0;
1001
+ if (v0) {
1002
+ if (v0 !== e.a0) return false;
1003
+ k = 1;
1004
+ }
1005
+ if (v1) {
1006
+ if (v1 !== (k === 0 ? e.a0 : e.a1)) return false;
1007
+ k++;
1008
+ }
1009
+ if (v2) {
1010
+ if (v2 !== (k === 0 ? e.a0 : k === 1 ? e.a1 : e.a2)) return false;
1011
+ k++;
1012
+ }
1013
+ return k === e.t;
1014
+ };
1015
+ const matchN = (e, vals) => {
1016
+ const ea = e.a;
1017
+ let k = 0;
1018
+ for (let i = 0; i < vals.length; i++) {
1019
+ const v = vals[i];
1020
+ if (!v) continue;
1021
+ if (v !== ea[k]) return false;
1022
+ k++;
1023
+ }
1024
+ return k === e.t;
1025
+ };
1026
+ const resolveArgs = (vals, probed) => {
1027
+ const nArgs = vals.length;
1028
+ const pred = lastHit === null ? null : lastHit.n;
1029
+ if (!probed) {
1030
+ if (pred !== null && matchN(pred, vals)) {
1031
+ lastHit = pred;
1032
+ return pred.r;
1033
+ }
1034
+ if (lastHit !== null && lastHit !== pred && matchN(lastHit, vals)) return lastHit.r;
1035
+ }
1036
+ let first = "";
1037
+ let firstIdx = -1;
1038
+ let truthy = 0;
1039
+ let hasResolvedValue = false;
1040
+ for (let i = 0; i < nArgs; i++) {
1041
+ let v = vals[i];
1042
+ if (!v) continue;
1043
+ if (typeof v !== "string") {
1044
+ v = vals[i] = resolveValue(v, true);
1045
+ if (!v) continue;
1046
+ hasResolvedValue = true;
1047
+ }
1048
+ if (firstIdx < 0) {
1049
+ first = v;
1050
+ firstIdx = i;
1051
+ }
1052
+ truthy++;
1053
+ }
1054
+ if (truthy === 0) return "";
1055
+ if (truthy === 1) return mergeString(first);
1056
+ if (hasResolvedValue) {
1057
+ if (pred !== null && matchN(pred, vals)) {
1058
+ lastHit = pred;
1059
+ return pred.r;
1060
+ }
1061
+ if (lastHit !== null && lastHit !== pred && matchN(lastHit, vals)) return lastHit.r;
1062
+ }
1063
+ let bucket = argCache.get(first);
1064
+ if (bucket === void 0) {
1065
+ bucket = prevArgCache.get(first);
1066
+ if (bucket !== void 0) argCache.set(first, bucket);
1067
+ }
1068
+ let hit = null;
1069
+ if (bucket !== void 0) {
1070
+ if (bucket.skip > 0) {
1071
+ bucket.skip--;
1072
+ lastHit = null;
1073
+ let joined = first;
1074
+ for (let i = firstIdx + 1; i < nArgs; i++) {
1075
+ const v = vals[i];
1076
+ if (v) joined += " " + v;
1077
+ }
1078
+ return churnLookup(joined, "", false);
1079
+ }
1080
+ const entries = bucket.e;
1081
+ outer: for (let b = 0; b < entries.length; b++) {
1082
+ const e = entries[b];
1083
+ if (e.t !== truthy) continue;
1084
+ const ea = e.a;
1085
+ let k = 1;
1086
+ for (let i = firstIdx + 1; i < nArgs; i++) {
1087
+ const v = vals[i];
1088
+ if (v && v !== ea[k++]) continue outer;
1089
+ }
1090
+ hit = e;
1091
+ break;
1092
+ }
1093
+ if (hit !== null) bucket.miss = 0;
1094
+ }
1095
+ if (hit === null) {
1096
+ let joined = first;
1097
+ const a = [first];
1098
+ for (let i = firstIdx + 1; i < nArgs; i++) {
1099
+ const v = vals[i];
1100
+ if (!v) continue;
1101
+ joined += " " + v;
1102
+ a.push(v);
1103
+ }
1104
+ if (!seenBefore(joined)) return mergeUncached(joined);
1105
+ hit = {
1106
+ r: mergeString(joined),
1107
+ t: a.length,
1108
+ a0: a[0],
1109
+ a1: a[1],
1110
+ a2: a[2] ?? "",
1111
+ a,
1112
+ n: null
1113
+ };
1114
+ if (bucket === void 0) argCache.set(first, bucket = {
1115
+ e: [],
1116
+ miss: 0,
1117
+ skip: 0,
1118
+ at: 0
1119
+ });
1120
+ else if (++bucket.miss > BUCKET_MISS_CAP) {
1121
+ bucket.miss = BUCKET_MISS_CAP;
1122
+ bucket.skip = BUCKET_SKIP;
1123
+ bucket.e.length = 0;
1124
+ bucket.at = 0;
1125
+ }
1126
+ const entries = bucket.e;
1127
+ if (entries.length < BUCKET_CAP) entries.push(hit);
1128
+ else {
1129
+ entries[bucket.at] = hit;
1130
+ bucket.at = bucket.at + 1 & 255;
1131
+ }
1132
+ if (++argCount > 1e3) {
1133
+ argCount = 0;
1134
+ prevArgCache = argCache;
1135
+ argCache = /* @__PURE__ */ new Map();
1136
+ }
1137
+ }
1138
+ if (lastHit !== null && lastHit !== hit) lastHit.n = hit;
1139
+ lastHit = hit;
1140
+ return hit.r;
1141
+ };
1142
+ const mergeSingleValue = (value) => Array.isArray(value) ? resolveArgs(value.slice(), false) : mergeString(resolveValue(value, true));
1143
+ return function(v0, v1, v2) {
1144
+ const nArgs = arguments.length;
1145
+ if ((nArgs | 1) === 3) {
1146
+ const lh = lastHit;
1147
+ if (lh !== null) {
1148
+ const pred = lh.n;
1149
+ if (pred !== null && match3(pred, v0, v1, v2)) {
1150
+ lastHit = pred;
1151
+ return pred.r;
1152
+ }
1153
+ if (lh !== pred && match3(lh, v0, v1, v2)) return lh.r;
1154
+ }
1155
+ if (nArgs === 2 && typeof v1 === "string" && v1 !== "") {
1156
+ const bucket = argCache.get(v0);
1157
+ if (bucket !== void 0 && bucket.skip > 0) {
1158
+ bucket.skip--;
1159
+ lastHit = null;
1160
+ return churnLookup(v1, v0, true);
1161
+ }
1162
+ }
1163
+ return resolveArgs([
1164
+ v0,
1165
+ v1,
1166
+ v2
1167
+ ], true);
1168
+ }
1169
+ if (nArgs === 1) return typeof v0 === "string" ? mergeString(v0) : mergeSingleValue(v0);
1170
+ const lh = lastHit;
1171
+ if (lh !== null) {
1172
+ const pred = lh.n;
1173
+ if (pred !== null) {
1174
+ const pa = pred.a;
1175
+ let k = 0;
1176
+ let ok = true;
1177
+ for (let i = 0; i < nArgs; i++) {
1178
+ const v = arguments[i];
1179
+ if (!v) continue;
1180
+ if (v !== pa[k]) {
1181
+ ok = false;
1182
+ break;
1183
+ }
1184
+ k++;
1185
+ }
1186
+ if (ok && k === pred.t) {
1187
+ lastHit = pred;
1188
+ return pred.r;
1189
+ }
1190
+ }
1191
+ if (lh !== pred) {
1192
+ const la = lh.a;
1193
+ let k = 0;
1194
+ let ok = true;
1195
+ for (let i = 0; i < nArgs; i++) {
1196
+ const v = arguments[i];
1197
+ if (!v) continue;
1198
+ if (v !== la[k]) {
1199
+ ok = false;
1200
+ break;
1201
+ }
1202
+ k++;
1203
+ }
1204
+ if (ok && k === lh.t) return lh.r;
1205
+ }
1206
+ }
1207
+ const vals = [];
1208
+ for (let i = 0; i < nArgs; i++) vals.push(arguments[i]);
1209
+ return resolveArgs(vals, true);
1210
+ };
1211
+ };
1212
+ // node_modules/cn/dist/index.js
1213
+ var instance = /* @__PURE__ */ createEngine(tables_generated_default);
1214
+ /**
1215
+ * Merge Tailwind CSS classes with clsx-style arguments (strings, arrays,
1216
+ * objects, conditionals). Drop-in replacement for `twMerge(clsx(...))`.
1217
+ */
1218
+ var cn = /* @__PURE__ */ wrapClsx(instance.mergeString, instance);
1219
+ instance.merge;
63
1220
  // src/components/button/button.tsx
64
- var buttonVariants = cva("inline-flex select-none items-center justify-center whitespace-nowrap rounded-ui-md font-medium transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50", {
1221
+ var buttonVariants = cva("rounded-ui-md focus-visible:ring-ring focus-visible:ring-offset-background inline-flex items-center justify-center font-medium whitespace-nowrap transition-colors outline-none select-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", {
65
1222
  variants: {
66
1223
  variant: {
67
1224
  primary: "bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80",
68
1225
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 active:bg-secondary/70",
69
- outline: "border border-border bg-transparent text-foreground hover:bg-muted active:bg-muted/70",
70
- ghost: "bg-transparent text-foreground hover:bg-muted active:bg-muted/70",
1226
+ outline: "border-border text-foreground hover:bg-muted active:bg-muted/70 border bg-transparent",
1227
+ ghost: "text-foreground hover:bg-muted active:bg-muted/70 bg-transparent",
71
1228
  danger: "bg-danger text-danger-foreground hover:bg-danger/90 active:bg-danger/80"
72
1229
  },
73
1230
  size: {
@@ -93,14 +1250,63 @@ var Button = forwardRef(function Button({ className, variant = "primary", size =
93
1250
  });
94
1251
  });
95
1252
  // src/components/input/input.tsx
96
- var Input = forwardRef(function Input({ className, invalid = false, "aria-invalid": ariaInvalid, ...props }, ref) {
1253
+ var inputVariants = cva("rounded-ui-md border-border bg-background text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/30 flex w-full border py-2 shadow-sm transition-colors outline-none focus-visible:ring-2 disabled:cursor-not-allowed disabled:opacity-50", {
1254
+ variants: {
1255
+ size: {
1256
+ sm: "h-8 px-2.5 text-sm",
1257
+ md: "h-10 px-3 text-sm",
1258
+ lg: "h-12 px-4 text-base"
1259
+ },
1260
+ invalid: {
1261
+ true: "border-danger focus-visible:ring-danger/30",
1262
+ false: ""
1263
+ }
1264
+ },
1265
+ defaultVariants: {
1266
+ size: "md",
1267
+ invalid: false
1268
+ }
1269
+ });
1270
+ var Input = forwardRef(function Input({ className, invalid = false, size = "md", "aria-invalid": ariaInvalid, ...props }, ref) {
97
1271
  return /* @__PURE__ */ jsx(Input$1, {
98
1272
  ...props,
99
1273
  ref,
100
1274
  "aria-invalid": invalid || ariaInvalid,
101
- className: cn("flex h-10 w-full rounded-ui-md border border-border bg-background px-3 py-2 text-sm text-foreground shadow-sm outline-none transition-colors placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-[invalid=true]:border-danger aria-[invalid=true]:focus-visible:ring-danger/30", className)
1275
+ className: cn(inputVariants({
1276
+ size,
1277
+ invalid
1278
+ }), className)
1279
+ });
1280
+ });
1281
+ // src/components/textarea/textarea.tsx
1282
+ var textareaVariants = cva("rounded-ui-md border-border bg-background text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/30 flex w-full resize-y border py-2 shadow-sm transition-colors outline-none focus-visible:ring-2 disabled:cursor-not-allowed disabled:opacity-50", {
1283
+ variants: {
1284
+ size: {
1285
+ sm: "min-h-16 px-2.5 text-sm",
1286
+ md: "min-h-20 px-3 text-sm",
1287
+ lg: "min-h-28 px-4 text-base"
1288
+ },
1289
+ invalid: {
1290
+ true: "border-danger focus-visible:ring-danger/30",
1291
+ false: ""
1292
+ }
1293
+ },
1294
+ defaultVariants: {
1295
+ size: "md",
1296
+ invalid: false
1297
+ }
1298
+ });
1299
+ var Textarea = forwardRef(function Textarea({ className, invalid = false, size = "md", "aria-invalid": ariaInvalid, ...props }, ref) {
1300
+ return /* @__PURE__ */ jsx("textarea", {
1301
+ ...props,
1302
+ ref,
1303
+ "aria-invalid": invalid || ariaInvalid,
1304
+ className: cn(textareaVariants({
1305
+ size,
1306
+ invalid
1307
+ }), className)
102
1308
  });
103
1309
  });
104
- export { Button, Input };
1310
+ export { Button, Input, Textarea };
105
1311
 
106
1312
  //# sourceMappingURL=index.js.map