json-schema-builder-react 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3803 @@
1
+ import { jsx as n, jsxs as l, Fragment as Ye } from "react/jsx-runtime";
2
+ import * as I from "react";
3
+ import { useContext as et, createContext as tt, useState as E, useEffect as re, useMemo as rt } from "react";
4
+ import { Slot as nt } from "@radix-ui/react-slot";
5
+ import { X as ot, ChevronDown as ge, Check as je, ChevronUp as at, Type as it, Hash as Ce, CheckSquare as st, Braces as lt, List as dt, FileText as ct, Plus as te, Pencil as mt, Trash2 as Re, CheckCircle2 as ut, Copy as pt, Download as ht, ChevronRight as ft, Moon as gt, Sun as bt, Upload as yt } from "lucide-react";
6
+ import * as ne from "@radix-ui/react-tooltip";
7
+ import * as B from "@radix-ui/react-dialog";
8
+ import * as Le from "@radix-ui/react-label";
9
+ import * as A from "@radix-ui/react-select";
10
+ import * as ie from "@radix-ui/react-checkbox";
11
+ function Me(e) {
12
+ var r, t, a = "";
13
+ if (typeof e == "string" || typeof e == "number") a += e;
14
+ else if (typeof e == "object") if (Array.isArray(e)) {
15
+ var o = e.length;
16
+ for (r = 0; r < o; r++) e[r] && (t = Me(e[r])) && (a && (a += " "), a += t);
17
+ } else for (t in e) e[t] && (a && (a += " "), a += t);
18
+ return a;
19
+ }
20
+ function qe() {
21
+ for (var e, r, t = 0, a = "", o = arguments.length; t < o; t++) (e = arguments[t]) && (r = Me(e)) && (a && (a += " "), a += r);
22
+ return a;
23
+ }
24
+ const ke = (e) => typeof e == "boolean" ? `${e}` : e === 0 ? "0" : e, Se = qe, Ee = (e, r) => (t) => {
25
+ var a;
26
+ if ((r == null ? void 0 : r.variants) == null) return Se(e, t == null ? void 0 : t.class, t == null ? void 0 : t.className);
27
+ const { variants: o, defaultVariants: i } = r, s = Object.keys(o).map((d) => {
28
+ const f = t == null ? void 0 : t[d], C = i == null ? void 0 : i[d];
29
+ if (f === null) return null;
30
+ const v = ke(f) || ke(C);
31
+ return o[d][v];
32
+ }), c = t && Object.entries(t).reduce((d, f) => {
33
+ let [C, v] = f;
34
+ return v === void 0 || (d[C] = v), d;
35
+ }, {}), m = r == null || (a = r.compoundVariants) === null || a === void 0 ? void 0 : a.reduce((d, f) => {
36
+ let { class: C, className: v, ...T } = f;
37
+ return Object.entries(T).every((b) => {
38
+ let [u, h] = b;
39
+ return Array.isArray(h) ? h.includes({
40
+ ...i,
41
+ ...c
42
+ }[u]) : {
43
+ ...i,
44
+ ...c
45
+ }[u] === h;
46
+ }) ? [
47
+ ...d,
48
+ C,
49
+ v
50
+ ] : d;
51
+ }, []);
52
+ return Se(e, s, m, t == null ? void 0 : t.class, t == null ? void 0 : t.className);
53
+ }, be = "-", vt = (e) => {
54
+ const r = wt(e), {
55
+ conflictingClassGroups: t,
56
+ conflictingClassGroupModifiers: a
57
+ } = e;
58
+ return {
59
+ getClassGroupId: (s) => {
60
+ const c = s.split(be);
61
+ return c[0] === "" && c.length !== 1 && c.shift(), Fe(c, r) || xt(s);
62
+ },
63
+ getConflictingClassGroupIds: (s, c) => {
64
+ const m = t[s] || [];
65
+ return c && a[s] ? [...m, ...a[s]] : m;
66
+ }
67
+ };
68
+ }, Fe = (e, r) => {
69
+ var s;
70
+ if (e.length === 0)
71
+ return r.classGroupId;
72
+ const t = e[0], a = r.nextPart.get(t), o = a ? Fe(e.slice(1), a) : void 0;
73
+ if (o)
74
+ return o;
75
+ if (r.validators.length === 0)
76
+ return;
77
+ const i = e.join(be);
78
+ return (s = r.validators.find(({
79
+ validator: c
80
+ }) => c(i))) == null ? void 0 : s.classGroupId;
81
+ }, Ie = /^\[(.+)\]$/, xt = (e) => {
82
+ if (Ie.test(e)) {
83
+ const r = Ie.exec(e)[1], t = r == null ? void 0 : r.substring(0, r.indexOf(":"));
84
+ if (t)
85
+ return "arbitrary.." + t;
86
+ }
87
+ }, wt = (e) => {
88
+ const {
89
+ theme: r,
90
+ prefix: t
91
+ } = e, a = {
92
+ nextPart: /* @__PURE__ */ new Map(),
93
+ validators: []
94
+ };
95
+ return Ct(Object.entries(e.classGroups), t).forEach(([i, s]) => {
96
+ se(s, a, i, r);
97
+ }), a;
98
+ }, se = (e, r, t, a) => {
99
+ e.forEach((o) => {
100
+ if (typeof o == "string") {
101
+ const i = o === "" ? r : Te(r, o);
102
+ i.classGroupId = t;
103
+ return;
104
+ }
105
+ if (typeof o == "function") {
106
+ if (Nt(o)) {
107
+ se(o(a), r, t, a);
108
+ return;
109
+ }
110
+ r.validators.push({
111
+ validator: o,
112
+ classGroupId: t
113
+ });
114
+ return;
115
+ }
116
+ Object.entries(o).forEach(([i, s]) => {
117
+ se(s, Te(r, i), t, a);
118
+ });
119
+ });
120
+ }, Te = (e, r) => {
121
+ let t = e;
122
+ return r.split(be).forEach((a) => {
123
+ t.nextPart.has(a) || t.nextPart.set(a, {
124
+ nextPart: /* @__PURE__ */ new Map(),
125
+ validators: []
126
+ }), t = t.nextPart.get(a);
127
+ }), t;
128
+ }, Nt = (e) => e.isThemeGetter, Ct = (e, r) => r ? e.map(([t, a]) => {
129
+ const o = a.map((i) => typeof i == "string" ? r + i : typeof i == "object" ? Object.fromEntries(Object.entries(i).map(([s, c]) => [r + s, c])) : i);
130
+ return [t, o];
131
+ }) : e, kt = (e) => {
132
+ if (e < 1)
133
+ return {
134
+ get: () => {
135
+ },
136
+ set: () => {
137
+ }
138
+ };
139
+ let r = 0, t = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map();
140
+ const o = (i, s) => {
141
+ t.set(i, s), r++, r > e && (r = 0, a = t, t = /* @__PURE__ */ new Map());
142
+ };
143
+ return {
144
+ get(i) {
145
+ let s = t.get(i);
146
+ if (s !== void 0)
147
+ return s;
148
+ if ((s = a.get(i)) !== void 0)
149
+ return o(i, s), s;
150
+ },
151
+ set(i, s) {
152
+ t.has(i) ? t.set(i, s) : o(i, s);
153
+ }
154
+ };
155
+ }, Oe = "!", St = (e) => {
156
+ const {
157
+ separator: r,
158
+ experimentalParseClassName: t
159
+ } = e, a = r.length === 1, o = r[0], i = r.length, s = (c) => {
160
+ const m = [];
161
+ let d = 0, f = 0, C;
162
+ for (let h = 0; h < c.length; h++) {
163
+ let k = c[h];
164
+ if (d === 0) {
165
+ if (k === o && (a || c.slice(h, h + i) === r)) {
166
+ m.push(c.slice(f, h)), f = h + i;
167
+ continue;
168
+ }
169
+ if (k === "/") {
170
+ C = h;
171
+ continue;
172
+ }
173
+ }
174
+ k === "[" ? d++ : k === "]" && d--;
175
+ }
176
+ const v = m.length === 0 ? c : c.substring(f), T = v.startsWith(Oe), b = T ? v.substring(1) : v, u = C && C > f ? C - f : void 0;
177
+ return {
178
+ modifiers: m,
179
+ hasImportantModifier: T,
180
+ baseClassName: b,
181
+ maybePostfixModifierPosition: u
182
+ };
183
+ };
184
+ return t ? (c) => t({
185
+ className: c,
186
+ parseClassName: s
187
+ }) : s;
188
+ }, It = (e) => {
189
+ if (e.length <= 1)
190
+ return e;
191
+ const r = [];
192
+ let t = [];
193
+ return e.forEach((a) => {
194
+ a[0] === "[" ? (r.push(...t.sort(), a), t = []) : t.push(a);
195
+ }), r.push(...t.sort()), r;
196
+ }, Tt = (e) => ({
197
+ cache: kt(e.cacheSize),
198
+ parseClassName: St(e),
199
+ ...vt(e)
200
+ }), zt = /\s+/, Pt = (e, r) => {
201
+ const {
202
+ parseClassName: t,
203
+ getClassGroupId: a,
204
+ getConflictingClassGroupIds: o
205
+ } = r, i = [], s = e.trim().split(zt);
206
+ let c = "";
207
+ for (let m = s.length - 1; m >= 0; m -= 1) {
208
+ const d = s[m], {
209
+ modifiers: f,
210
+ hasImportantModifier: C,
211
+ baseClassName: v,
212
+ maybePostfixModifierPosition: T
213
+ } = t(d);
214
+ let b = !!T, u = a(b ? v.substring(0, T) : v);
215
+ if (!u) {
216
+ if (!b) {
217
+ c = d + (c.length > 0 ? " " + c : c);
218
+ continue;
219
+ }
220
+ if (u = a(v), !u) {
221
+ c = d + (c.length > 0 ? " " + c : c);
222
+ continue;
223
+ }
224
+ b = !1;
225
+ }
226
+ const h = It(f).join(":"), k = C ? h + Oe : h, w = k + u;
227
+ if (i.includes(w))
228
+ continue;
229
+ i.push(w);
230
+ const p = o(u, b);
231
+ for (let j = 0; j < p.length; ++j) {
232
+ const V = p[j];
233
+ i.push(k + V);
234
+ }
235
+ c = d + (c.length > 0 ? " " + c : c);
236
+ }
237
+ return c;
238
+ };
239
+ function At() {
240
+ let e = 0, r, t, a = "";
241
+ for (; e < arguments.length; )
242
+ (r = arguments[e++]) && (t = Ve(r)) && (a && (a += " "), a += t);
243
+ return a;
244
+ }
245
+ const Ve = (e) => {
246
+ if (typeof e == "string")
247
+ return e;
248
+ let r, t = "";
249
+ for (let a = 0; a < e.length; a++)
250
+ e[a] && (r = Ve(e[a])) && (t && (t += " "), t += r);
251
+ return t;
252
+ };
253
+ function jt(e, ...r) {
254
+ let t, a, o, i = s;
255
+ function s(m) {
256
+ const d = r.reduce((f, C) => C(f), e());
257
+ return t = Tt(d), a = t.cache.get, o = t.cache.set, i = c, c(m);
258
+ }
259
+ function c(m) {
260
+ const d = a(m);
261
+ if (d)
262
+ return d;
263
+ const f = Pt(m, t);
264
+ return o(m, f), f;
265
+ }
266
+ return function() {
267
+ return i(At.apply(null, arguments));
268
+ };
269
+ }
270
+ const S = (e) => {
271
+ const r = (t) => t[e] || [];
272
+ return r.isThemeGetter = !0, r;
273
+ }, De = /^\[(?:([a-z-]+):)?(.+)\]$/i, Rt = /^\d+\/\d+$/, Lt = /* @__PURE__ */ new Set(["px", "full", "screen"]), Mt = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/, qt = /\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$/, Et = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/, Ft = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/, Ot = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/, U = (e) => X(e) || Lt.has(e) || Rt.test(e), K = (e) => Z(e, "length", Ut), X = (e) => !!e && !Number.isNaN(Number(e)), ae = (e) => Z(e, "number", X), Y = (e) => !!e && Number.isInteger(Number(e)), Vt = (e) => e.endsWith("%") && X(e.slice(0, -1)), g = (e) => De.test(e), H = (e) => Mt.test(e), Dt = /* @__PURE__ */ new Set(["length", "size", "percentage"]), Gt = (e) => Z(e, Dt, Ge), Bt = (e) => Z(e, "position", Ge), $t = /* @__PURE__ */ new Set(["image", "url"]), _t = (e) => Z(e, $t, Kt), Jt = (e) => Z(e, "", Wt), ee = () => !0, Z = (e, r, t) => {
274
+ const a = De.exec(e);
275
+ return a ? a[1] ? typeof r == "string" ? a[1] === r : r.has(a[1]) : t(a[2]) : !1;
276
+ }, Ut = (e) => (
277
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
278
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
279
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
280
+ qt.test(e) && !Et.test(e)
281
+ ), Ge = () => !1, Wt = (e) => Ft.test(e), Kt = (e) => Ot.test(e), Ht = () => {
282
+ const e = S("colors"), r = S("spacing"), t = S("blur"), a = S("brightness"), o = S("borderColor"), i = S("borderRadius"), s = S("borderSpacing"), c = S("borderWidth"), m = S("contrast"), d = S("grayscale"), f = S("hueRotate"), C = S("invert"), v = S("gap"), T = S("gradientColorStops"), b = S("gradientColorStopPositions"), u = S("inset"), h = S("margin"), k = S("opacity"), w = S("padding"), p = S("saturate"), j = S("scale"), V = S("sepia"), W = S("skew"), F = S("space"), D = S("translate"), q = () => ["auto", "contain", "none"], _ = () => ["auto", "hidden", "clip", "visible", "scroll"], $ = () => ["auto", g, r], x = () => [g, r], y = () => ["", U, K], O = () => ["auto", X, g], z = () => ["bottom", "center", "left", "left-bottom", "left-top", "right", "right-bottom", "right-top", "top"], G = () => ["solid", "dashed", "dotted", "double", "none"], we = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"], oe = () => ["start", "end", "center", "between", "around", "evenly", "stretch"], Q = () => ["", "0", g], Ne = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"], J = () => [X, g];
283
+ return {
284
+ cacheSize: 500,
285
+ separator: ":",
286
+ theme: {
287
+ colors: [ee],
288
+ spacing: [U, K],
289
+ blur: ["none", "", H, g],
290
+ brightness: J(),
291
+ borderColor: [e],
292
+ borderRadius: ["none", "", "full", H, g],
293
+ borderSpacing: x(),
294
+ borderWidth: y(),
295
+ contrast: J(),
296
+ grayscale: Q(),
297
+ hueRotate: J(),
298
+ invert: Q(),
299
+ gap: x(),
300
+ gradientColorStops: [e],
301
+ gradientColorStopPositions: [Vt, K],
302
+ inset: $(),
303
+ margin: $(),
304
+ opacity: J(),
305
+ padding: x(),
306
+ saturate: J(),
307
+ scale: J(),
308
+ sepia: Q(),
309
+ skew: J(),
310
+ space: x(),
311
+ translate: x()
312
+ },
313
+ classGroups: {
314
+ // Layout
315
+ /**
316
+ * Aspect Ratio
317
+ * @see https://tailwindcss.com/docs/aspect-ratio
318
+ */
319
+ aspect: [{
320
+ aspect: ["auto", "square", "video", g]
321
+ }],
322
+ /**
323
+ * Container
324
+ * @see https://tailwindcss.com/docs/container
325
+ */
326
+ container: ["container"],
327
+ /**
328
+ * Columns
329
+ * @see https://tailwindcss.com/docs/columns
330
+ */
331
+ columns: [{
332
+ columns: [H]
333
+ }],
334
+ /**
335
+ * Break After
336
+ * @see https://tailwindcss.com/docs/break-after
337
+ */
338
+ "break-after": [{
339
+ "break-after": Ne()
340
+ }],
341
+ /**
342
+ * Break Before
343
+ * @see https://tailwindcss.com/docs/break-before
344
+ */
345
+ "break-before": [{
346
+ "break-before": Ne()
347
+ }],
348
+ /**
349
+ * Break Inside
350
+ * @see https://tailwindcss.com/docs/break-inside
351
+ */
352
+ "break-inside": [{
353
+ "break-inside": ["auto", "avoid", "avoid-page", "avoid-column"]
354
+ }],
355
+ /**
356
+ * Box Decoration Break
357
+ * @see https://tailwindcss.com/docs/box-decoration-break
358
+ */
359
+ "box-decoration": [{
360
+ "box-decoration": ["slice", "clone"]
361
+ }],
362
+ /**
363
+ * Box Sizing
364
+ * @see https://tailwindcss.com/docs/box-sizing
365
+ */
366
+ box: [{
367
+ box: ["border", "content"]
368
+ }],
369
+ /**
370
+ * Display
371
+ * @see https://tailwindcss.com/docs/display
372
+ */
373
+ display: ["block", "inline-block", "inline", "flex", "inline-flex", "table", "inline-table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row-group", "table-row", "flow-root", "grid", "inline-grid", "contents", "list-item", "hidden"],
374
+ /**
375
+ * Floats
376
+ * @see https://tailwindcss.com/docs/float
377
+ */
378
+ float: [{
379
+ float: ["right", "left", "none", "start", "end"]
380
+ }],
381
+ /**
382
+ * Clear
383
+ * @see https://tailwindcss.com/docs/clear
384
+ */
385
+ clear: [{
386
+ clear: ["left", "right", "both", "none", "start", "end"]
387
+ }],
388
+ /**
389
+ * Isolation
390
+ * @see https://tailwindcss.com/docs/isolation
391
+ */
392
+ isolation: ["isolate", "isolation-auto"],
393
+ /**
394
+ * Object Fit
395
+ * @see https://tailwindcss.com/docs/object-fit
396
+ */
397
+ "object-fit": [{
398
+ object: ["contain", "cover", "fill", "none", "scale-down"]
399
+ }],
400
+ /**
401
+ * Object Position
402
+ * @see https://tailwindcss.com/docs/object-position
403
+ */
404
+ "object-position": [{
405
+ object: [...z(), g]
406
+ }],
407
+ /**
408
+ * Overflow
409
+ * @see https://tailwindcss.com/docs/overflow
410
+ */
411
+ overflow: [{
412
+ overflow: _()
413
+ }],
414
+ /**
415
+ * Overflow X
416
+ * @see https://tailwindcss.com/docs/overflow
417
+ */
418
+ "overflow-x": [{
419
+ "overflow-x": _()
420
+ }],
421
+ /**
422
+ * Overflow Y
423
+ * @see https://tailwindcss.com/docs/overflow
424
+ */
425
+ "overflow-y": [{
426
+ "overflow-y": _()
427
+ }],
428
+ /**
429
+ * Overscroll Behavior
430
+ * @see https://tailwindcss.com/docs/overscroll-behavior
431
+ */
432
+ overscroll: [{
433
+ overscroll: q()
434
+ }],
435
+ /**
436
+ * Overscroll Behavior X
437
+ * @see https://tailwindcss.com/docs/overscroll-behavior
438
+ */
439
+ "overscroll-x": [{
440
+ "overscroll-x": q()
441
+ }],
442
+ /**
443
+ * Overscroll Behavior Y
444
+ * @see https://tailwindcss.com/docs/overscroll-behavior
445
+ */
446
+ "overscroll-y": [{
447
+ "overscroll-y": q()
448
+ }],
449
+ /**
450
+ * Position
451
+ * @see https://tailwindcss.com/docs/position
452
+ */
453
+ position: ["static", "fixed", "absolute", "relative", "sticky"],
454
+ /**
455
+ * Top / Right / Bottom / Left
456
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
457
+ */
458
+ inset: [{
459
+ inset: [u]
460
+ }],
461
+ /**
462
+ * Right / Left
463
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
464
+ */
465
+ "inset-x": [{
466
+ "inset-x": [u]
467
+ }],
468
+ /**
469
+ * Top / Bottom
470
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
471
+ */
472
+ "inset-y": [{
473
+ "inset-y": [u]
474
+ }],
475
+ /**
476
+ * Start
477
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
478
+ */
479
+ start: [{
480
+ start: [u]
481
+ }],
482
+ /**
483
+ * End
484
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
485
+ */
486
+ end: [{
487
+ end: [u]
488
+ }],
489
+ /**
490
+ * Top
491
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
492
+ */
493
+ top: [{
494
+ top: [u]
495
+ }],
496
+ /**
497
+ * Right
498
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
499
+ */
500
+ right: [{
501
+ right: [u]
502
+ }],
503
+ /**
504
+ * Bottom
505
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
506
+ */
507
+ bottom: [{
508
+ bottom: [u]
509
+ }],
510
+ /**
511
+ * Left
512
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
513
+ */
514
+ left: [{
515
+ left: [u]
516
+ }],
517
+ /**
518
+ * Visibility
519
+ * @see https://tailwindcss.com/docs/visibility
520
+ */
521
+ visibility: ["visible", "invisible", "collapse"],
522
+ /**
523
+ * Z-Index
524
+ * @see https://tailwindcss.com/docs/z-index
525
+ */
526
+ z: [{
527
+ z: ["auto", Y, g]
528
+ }],
529
+ // Flexbox and Grid
530
+ /**
531
+ * Flex Basis
532
+ * @see https://tailwindcss.com/docs/flex-basis
533
+ */
534
+ basis: [{
535
+ basis: $()
536
+ }],
537
+ /**
538
+ * Flex Direction
539
+ * @see https://tailwindcss.com/docs/flex-direction
540
+ */
541
+ "flex-direction": [{
542
+ flex: ["row", "row-reverse", "col", "col-reverse"]
543
+ }],
544
+ /**
545
+ * Flex Wrap
546
+ * @see https://tailwindcss.com/docs/flex-wrap
547
+ */
548
+ "flex-wrap": [{
549
+ flex: ["wrap", "wrap-reverse", "nowrap"]
550
+ }],
551
+ /**
552
+ * Flex
553
+ * @see https://tailwindcss.com/docs/flex
554
+ */
555
+ flex: [{
556
+ flex: ["1", "auto", "initial", "none", g]
557
+ }],
558
+ /**
559
+ * Flex Grow
560
+ * @see https://tailwindcss.com/docs/flex-grow
561
+ */
562
+ grow: [{
563
+ grow: Q()
564
+ }],
565
+ /**
566
+ * Flex Shrink
567
+ * @see https://tailwindcss.com/docs/flex-shrink
568
+ */
569
+ shrink: [{
570
+ shrink: Q()
571
+ }],
572
+ /**
573
+ * Order
574
+ * @see https://tailwindcss.com/docs/order
575
+ */
576
+ order: [{
577
+ order: ["first", "last", "none", Y, g]
578
+ }],
579
+ /**
580
+ * Grid Template Columns
581
+ * @see https://tailwindcss.com/docs/grid-template-columns
582
+ */
583
+ "grid-cols": [{
584
+ "grid-cols": [ee]
585
+ }],
586
+ /**
587
+ * Grid Column Start / End
588
+ * @see https://tailwindcss.com/docs/grid-column
589
+ */
590
+ "col-start-end": [{
591
+ col: ["auto", {
592
+ span: ["full", Y, g]
593
+ }, g]
594
+ }],
595
+ /**
596
+ * Grid Column Start
597
+ * @see https://tailwindcss.com/docs/grid-column
598
+ */
599
+ "col-start": [{
600
+ "col-start": O()
601
+ }],
602
+ /**
603
+ * Grid Column End
604
+ * @see https://tailwindcss.com/docs/grid-column
605
+ */
606
+ "col-end": [{
607
+ "col-end": O()
608
+ }],
609
+ /**
610
+ * Grid Template Rows
611
+ * @see https://tailwindcss.com/docs/grid-template-rows
612
+ */
613
+ "grid-rows": [{
614
+ "grid-rows": [ee]
615
+ }],
616
+ /**
617
+ * Grid Row Start / End
618
+ * @see https://tailwindcss.com/docs/grid-row
619
+ */
620
+ "row-start-end": [{
621
+ row: ["auto", {
622
+ span: [Y, g]
623
+ }, g]
624
+ }],
625
+ /**
626
+ * Grid Row Start
627
+ * @see https://tailwindcss.com/docs/grid-row
628
+ */
629
+ "row-start": [{
630
+ "row-start": O()
631
+ }],
632
+ /**
633
+ * Grid Row End
634
+ * @see https://tailwindcss.com/docs/grid-row
635
+ */
636
+ "row-end": [{
637
+ "row-end": O()
638
+ }],
639
+ /**
640
+ * Grid Auto Flow
641
+ * @see https://tailwindcss.com/docs/grid-auto-flow
642
+ */
643
+ "grid-flow": [{
644
+ "grid-flow": ["row", "col", "dense", "row-dense", "col-dense"]
645
+ }],
646
+ /**
647
+ * Grid Auto Columns
648
+ * @see https://tailwindcss.com/docs/grid-auto-columns
649
+ */
650
+ "auto-cols": [{
651
+ "auto-cols": ["auto", "min", "max", "fr", g]
652
+ }],
653
+ /**
654
+ * Grid Auto Rows
655
+ * @see https://tailwindcss.com/docs/grid-auto-rows
656
+ */
657
+ "auto-rows": [{
658
+ "auto-rows": ["auto", "min", "max", "fr", g]
659
+ }],
660
+ /**
661
+ * Gap
662
+ * @see https://tailwindcss.com/docs/gap
663
+ */
664
+ gap: [{
665
+ gap: [v]
666
+ }],
667
+ /**
668
+ * Gap X
669
+ * @see https://tailwindcss.com/docs/gap
670
+ */
671
+ "gap-x": [{
672
+ "gap-x": [v]
673
+ }],
674
+ /**
675
+ * Gap Y
676
+ * @see https://tailwindcss.com/docs/gap
677
+ */
678
+ "gap-y": [{
679
+ "gap-y": [v]
680
+ }],
681
+ /**
682
+ * Justify Content
683
+ * @see https://tailwindcss.com/docs/justify-content
684
+ */
685
+ "justify-content": [{
686
+ justify: ["normal", ...oe()]
687
+ }],
688
+ /**
689
+ * Justify Items
690
+ * @see https://tailwindcss.com/docs/justify-items
691
+ */
692
+ "justify-items": [{
693
+ "justify-items": ["start", "end", "center", "stretch"]
694
+ }],
695
+ /**
696
+ * Justify Self
697
+ * @see https://tailwindcss.com/docs/justify-self
698
+ */
699
+ "justify-self": [{
700
+ "justify-self": ["auto", "start", "end", "center", "stretch"]
701
+ }],
702
+ /**
703
+ * Align Content
704
+ * @see https://tailwindcss.com/docs/align-content
705
+ */
706
+ "align-content": [{
707
+ content: ["normal", ...oe(), "baseline"]
708
+ }],
709
+ /**
710
+ * Align Items
711
+ * @see https://tailwindcss.com/docs/align-items
712
+ */
713
+ "align-items": [{
714
+ items: ["start", "end", "center", "baseline", "stretch"]
715
+ }],
716
+ /**
717
+ * Align Self
718
+ * @see https://tailwindcss.com/docs/align-self
719
+ */
720
+ "align-self": [{
721
+ self: ["auto", "start", "end", "center", "stretch", "baseline"]
722
+ }],
723
+ /**
724
+ * Place Content
725
+ * @see https://tailwindcss.com/docs/place-content
726
+ */
727
+ "place-content": [{
728
+ "place-content": [...oe(), "baseline"]
729
+ }],
730
+ /**
731
+ * Place Items
732
+ * @see https://tailwindcss.com/docs/place-items
733
+ */
734
+ "place-items": [{
735
+ "place-items": ["start", "end", "center", "baseline", "stretch"]
736
+ }],
737
+ /**
738
+ * Place Self
739
+ * @see https://tailwindcss.com/docs/place-self
740
+ */
741
+ "place-self": [{
742
+ "place-self": ["auto", "start", "end", "center", "stretch"]
743
+ }],
744
+ // Spacing
745
+ /**
746
+ * Padding
747
+ * @see https://tailwindcss.com/docs/padding
748
+ */
749
+ p: [{
750
+ p: [w]
751
+ }],
752
+ /**
753
+ * Padding X
754
+ * @see https://tailwindcss.com/docs/padding
755
+ */
756
+ px: [{
757
+ px: [w]
758
+ }],
759
+ /**
760
+ * Padding Y
761
+ * @see https://tailwindcss.com/docs/padding
762
+ */
763
+ py: [{
764
+ py: [w]
765
+ }],
766
+ /**
767
+ * Padding Start
768
+ * @see https://tailwindcss.com/docs/padding
769
+ */
770
+ ps: [{
771
+ ps: [w]
772
+ }],
773
+ /**
774
+ * Padding End
775
+ * @see https://tailwindcss.com/docs/padding
776
+ */
777
+ pe: [{
778
+ pe: [w]
779
+ }],
780
+ /**
781
+ * Padding Top
782
+ * @see https://tailwindcss.com/docs/padding
783
+ */
784
+ pt: [{
785
+ pt: [w]
786
+ }],
787
+ /**
788
+ * Padding Right
789
+ * @see https://tailwindcss.com/docs/padding
790
+ */
791
+ pr: [{
792
+ pr: [w]
793
+ }],
794
+ /**
795
+ * Padding Bottom
796
+ * @see https://tailwindcss.com/docs/padding
797
+ */
798
+ pb: [{
799
+ pb: [w]
800
+ }],
801
+ /**
802
+ * Padding Left
803
+ * @see https://tailwindcss.com/docs/padding
804
+ */
805
+ pl: [{
806
+ pl: [w]
807
+ }],
808
+ /**
809
+ * Margin
810
+ * @see https://tailwindcss.com/docs/margin
811
+ */
812
+ m: [{
813
+ m: [h]
814
+ }],
815
+ /**
816
+ * Margin X
817
+ * @see https://tailwindcss.com/docs/margin
818
+ */
819
+ mx: [{
820
+ mx: [h]
821
+ }],
822
+ /**
823
+ * Margin Y
824
+ * @see https://tailwindcss.com/docs/margin
825
+ */
826
+ my: [{
827
+ my: [h]
828
+ }],
829
+ /**
830
+ * Margin Start
831
+ * @see https://tailwindcss.com/docs/margin
832
+ */
833
+ ms: [{
834
+ ms: [h]
835
+ }],
836
+ /**
837
+ * Margin End
838
+ * @see https://tailwindcss.com/docs/margin
839
+ */
840
+ me: [{
841
+ me: [h]
842
+ }],
843
+ /**
844
+ * Margin Top
845
+ * @see https://tailwindcss.com/docs/margin
846
+ */
847
+ mt: [{
848
+ mt: [h]
849
+ }],
850
+ /**
851
+ * Margin Right
852
+ * @see https://tailwindcss.com/docs/margin
853
+ */
854
+ mr: [{
855
+ mr: [h]
856
+ }],
857
+ /**
858
+ * Margin Bottom
859
+ * @see https://tailwindcss.com/docs/margin
860
+ */
861
+ mb: [{
862
+ mb: [h]
863
+ }],
864
+ /**
865
+ * Margin Left
866
+ * @see https://tailwindcss.com/docs/margin
867
+ */
868
+ ml: [{
869
+ ml: [h]
870
+ }],
871
+ /**
872
+ * Space Between X
873
+ * @see https://tailwindcss.com/docs/space
874
+ */
875
+ "space-x": [{
876
+ "space-x": [F]
877
+ }],
878
+ /**
879
+ * Space Between X Reverse
880
+ * @see https://tailwindcss.com/docs/space
881
+ */
882
+ "space-x-reverse": ["space-x-reverse"],
883
+ /**
884
+ * Space Between Y
885
+ * @see https://tailwindcss.com/docs/space
886
+ */
887
+ "space-y": [{
888
+ "space-y": [F]
889
+ }],
890
+ /**
891
+ * Space Between Y Reverse
892
+ * @see https://tailwindcss.com/docs/space
893
+ */
894
+ "space-y-reverse": ["space-y-reverse"],
895
+ // Sizing
896
+ /**
897
+ * Width
898
+ * @see https://tailwindcss.com/docs/width
899
+ */
900
+ w: [{
901
+ w: ["auto", "min", "max", "fit", "svw", "lvw", "dvw", g, r]
902
+ }],
903
+ /**
904
+ * Min-Width
905
+ * @see https://tailwindcss.com/docs/min-width
906
+ */
907
+ "min-w": [{
908
+ "min-w": [g, r, "min", "max", "fit"]
909
+ }],
910
+ /**
911
+ * Max-Width
912
+ * @see https://tailwindcss.com/docs/max-width
913
+ */
914
+ "max-w": [{
915
+ "max-w": [g, r, "none", "full", "min", "max", "fit", "prose", {
916
+ screen: [H]
917
+ }, H]
918
+ }],
919
+ /**
920
+ * Height
921
+ * @see https://tailwindcss.com/docs/height
922
+ */
923
+ h: [{
924
+ h: [g, r, "auto", "min", "max", "fit", "svh", "lvh", "dvh"]
925
+ }],
926
+ /**
927
+ * Min-Height
928
+ * @see https://tailwindcss.com/docs/min-height
929
+ */
930
+ "min-h": [{
931
+ "min-h": [g, r, "min", "max", "fit", "svh", "lvh", "dvh"]
932
+ }],
933
+ /**
934
+ * Max-Height
935
+ * @see https://tailwindcss.com/docs/max-height
936
+ */
937
+ "max-h": [{
938
+ "max-h": [g, r, "min", "max", "fit", "svh", "lvh", "dvh"]
939
+ }],
940
+ /**
941
+ * Size
942
+ * @see https://tailwindcss.com/docs/size
943
+ */
944
+ size: [{
945
+ size: [g, r, "auto", "min", "max", "fit"]
946
+ }],
947
+ // Typography
948
+ /**
949
+ * Font Size
950
+ * @see https://tailwindcss.com/docs/font-size
951
+ */
952
+ "font-size": [{
953
+ text: ["base", H, K]
954
+ }],
955
+ /**
956
+ * Font Smoothing
957
+ * @see https://tailwindcss.com/docs/font-smoothing
958
+ */
959
+ "font-smoothing": ["antialiased", "subpixel-antialiased"],
960
+ /**
961
+ * Font Style
962
+ * @see https://tailwindcss.com/docs/font-style
963
+ */
964
+ "font-style": ["italic", "not-italic"],
965
+ /**
966
+ * Font Weight
967
+ * @see https://tailwindcss.com/docs/font-weight
968
+ */
969
+ "font-weight": [{
970
+ font: ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black", ae]
971
+ }],
972
+ /**
973
+ * Font Family
974
+ * @see https://tailwindcss.com/docs/font-family
975
+ */
976
+ "font-family": [{
977
+ font: [ee]
978
+ }],
979
+ /**
980
+ * Font Variant Numeric
981
+ * @see https://tailwindcss.com/docs/font-variant-numeric
982
+ */
983
+ "fvn-normal": ["normal-nums"],
984
+ /**
985
+ * Font Variant Numeric
986
+ * @see https://tailwindcss.com/docs/font-variant-numeric
987
+ */
988
+ "fvn-ordinal": ["ordinal"],
989
+ /**
990
+ * Font Variant Numeric
991
+ * @see https://tailwindcss.com/docs/font-variant-numeric
992
+ */
993
+ "fvn-slashed-zero": ["slashed-zero"],
994
+ /**
995
+ * Font Variant Numeric
996
+ * @see https://tailwindcss.com/docs/font-variant-numeric
997
+ */
998
+ "fvn-figure": ["lining-nums", "oldstyle-nums"],
999
+ /**
1000
+ * Font Variant Numeric
1001
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1002
+ */
1003
+ "fvn-spacing": ["proportional-nums", "tabular-nums"],
1004
+ /**
1005
+ * Font Variant Numeric
1006
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1007
+ */
1008
+ "fvn-fraction": ["diagonal-fractions", "stacked-fractions"],
1009
+ /**
1010
+ * Letter Spacing
1011
+ * @see https://tailwindcss.com/docs/letter-spacing
1012
+ */
1013
+ tracking: [{
1014
+ tracking: ["tighter", "tight", "normal", "wide", "wider", "widest", g]
1015
+ }],
1016
+ /**
1017
+ * Line Clamp
1018
+ * @see https://tailwindcss.com/docs/line-clamp
1019
+ */
1020
+ "line-clamp": [{
1021
+ "line-clamp": ["none", X, ae]
1022
+ }],
1023
+ /**
1024
+ * Line Height
1025
+ * @see https://tailwindcss.com/docs/line-height
1026
+ */
1027
+ leading: [{
1028
+ leading: ["none", "tight", "snug", "normal", "relaxed", "loose", U, g]
1029
+ }],
1030
+ /**
1031
+ * List Style Image
1032
+ * @see https://tailwindcss.com/docs/list-style-image
1033
+ */
1034
+ "list-image": [{
1035
+ "list-image": ["none", g]
1036
+ }],
1037
+ /**
1038
+ * List Style Type
1039
+ * @see https://tailwindcss.com/docs/list-style-type
1040
+ */
1041
+ "list-style-type": [{
1042
+ list: ["none", "disc", "decimal", g]
1043
+ }],
1044
+ /**
1045
+ * List Style Position
1046
+ * @see https://tailwindcss.com/docs/list-style-position
1047
+ */
1048
+ "list-style-position": [{
1049
+ list: ["inside", "outside"]
1050
+ }],
1051
+ /**
1052
+ * Placeholder Color
1053
+ * @deprecated since Tailwind CSS v3.0.0
1054
+ * @see https://tailwindcss.com/docs/placeholder-color
1055
+ */
1056
+ "placeholder-color": [{
1057
+ placeholder: [e]
1058
+ }],
1059
+ /**
1060
+ * Placeholder Opacity
1061
+ * @see https://tailwindcss.com/docs/placeholder-opacity
1062
+ */
1063
+ "placeholder-opacity": [{
1064
+ "placeholder-opacity": [k]
1065
+ }],
1066
+ /**
1067
+ * Text Alignment
1068
+ * @see https://tailwindcss.com/docs/text-align
1069
+ */
1070
+ "text-alignment": [{
1071
+ text: ["left", "center", "right", "justify", "start", "end"]
1072
+ }],
1073
+ /**
1074
+ * Text Color
1075
+ * @see https://tailwindcss.com/docs/text-color
1076
+ */
1077
+ "text-color": [{
1078
+ text: [e]
1079
+ }],
1080
+ /**
1081
+ * Text Opacity
1082
+ * @see https://tailwindcss.com/docs/text-opacity
1083
+ */
1084
+ "text-opacity": [{
1085
+ "text-opacity": [k]
1086
+ }],
1087
+ /**
1088
+ * Text Decoration
1089
+ * @see https://tailwindcss.com/docs/text-decoration
1090
+ */
1091
+ "text-decoration": ["underline", "overline", "line-through", "no-underline"],
1092
+ /**
1093
+ * Text Decoration Style
1094
+ * @see https://tailwindcss.com/docs/text-decoration-style
1095
+ */
1096
+ "text-decoration-style": [{
1097
+ decoration: [...G(), "wavy"]
1098
+ }],
1099
+ /**
1100
+ * Text Decoration Thickness
1101
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
1102
+ */
1103
+ "text-decoration-thickness": [{
1104
+ decoration: ["auto", "from-font", U, K]
1105
+ }],
1106
+ /**
1107
+ * Text Underline Offset
1108
+ * @see https://tailwindcss.com/docs/text-underline-offset
1109
+ */
1110
+ "underline-offset": [{
1111
+ "underline-offset": ["auto", U, g]
1112
+ }],
1113
+ /**
1114
+ * Text Decoration Color
1115
+ * @see https://tailwindcss.com/docs/text-decoration-color
1116
+ */
1117
+ "text-decoration-color": [{
1118
+ decoration: [e]
1119
+ }],
1120
+ /**
1121
+ * Text Transform
1122
+ * @see https://tailwindcss.com/docs/text-transform
1123
+ */
1124
+ "text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"],
1125
+ /**
1126
+ * Text Overflow
1127
+ * @see https://tailwindcss.com/docs/text-overflow
1128
+ */
1129
+ "text-overflow": ["truncate", "text-ellipsis", "text-clip"],
1130
+ /**
1131
+ * Text Wrap
1132
+ * @see https://tailwindcss.com/docs/text-wrap
1133
+ */
1134
+ "text-wrap": [{
1135
+ text: ["wrap", "nowrap", "balance", "pretty"]
1136
+ }],
1137
+ /**
1138
+ * Text Indent
1139
+ * @see https://tailwindcss.com/docs/text-indent
1140
+ */
1141
+ indent: [{
1142
+ indent: x()
1143
+ }],
1144
+ /**
1145
+ * Vertical Alignment
1146
+ * @see https://tailwindcss.com/docs/vertical-align
1147
+ */
1148
+ "vertical-align": [{
1149
+ align: ["baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super", g]
1150
+ }],
1151
+ /**
1152
+ * Whitespace
1153
+ * @see https://tailwindcss.com/docs/whitespace
1154
+ */
1155
+ whitespace: [{
1156
+ whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"]
1157
+ }],
1158
+ /**
1159
+ * Word Break
1160
+ * @see https://tailwindcss.com/docs/word-break
1161
+ */
1162
+ break: [{
1163
+ break: ["normal", "words", "all", "keep"]
1164
+ }],
1165
+ /**
1166
+ * Hyphens
1167
+ * @see https://tailwindcss.com/docs/hyphens
1168
+ */
1169
+ hyphens: [{
1170
+ hyphens: ["none", "manual", "auto"]
1171
+ }],
1172
+ /**
1173
+ * Content
1174
+ * @see https://tailwindcss.com/docs/content
1175
+ */
1176
+ content: [{
1177
+ content: ["none", g]
1178
+ }],
1179
+ // Backgrounds
1180
+ /**
1181
+ * Background Attachment
1182
+ * @see https://tailwindcss.com/docs/background-attachment
1183
+ */
1184
+ "bg-attachment": [{
1185
+ bg: ["fixed", "local", "scroll"]
1186
+ }],
1187
+ /**
1188
+ * Background Clip
1189
+ * @see https://tailwindcss.com/docs/background-clip
1190
+ */
1191
+ "bg-clip": [{
1192
+ "bg-clip": ["border", "padding", "content", "text"]
1193
+ }],
1194
+ /**
1195
+ * Background Opacity
1196
+ * @deprecated since Tailwind CSS v3.0.0
1197
+ * @see https://tailwindcss.com/docs/background-opacity
1198
+ */
1199
+ "bg-opacity": [{
1200
+ "bg-opacity": [k]
1201
+ }],
1202
+ /**
1203
+ * Background Origin
1204
+ * @see https://tailwindcss.com/docs/background-origin
1205
+ */
1206
+ "bg-origin": [{
1207
+ "bg-origin": ["border", "padding", "content"]
1208
+ }],
1209
+ /**
1210
+ * Background Position
1211
+ * @see https://tailwindcss.com/docs/background-position
1212
+ */
1213
+ "bg-position": [{
1214
+ bg: [...z(), Bt]
1215
+ }],
1216
+ /**
1217
+ * Background Repeat
1218
+ * @see https://tailwindcss.com/docs/background-repeat
1219
+ */
1220
+ "bg-repeat": [{
1221
+ bg: ["no-repeat", {
1222
+ repeat: ["", "x", "y", "round", "space"]
1223
+ }]
1224
+ }],
1225
+ /**
1226
+ * Background Size
1227
+ * @see https://tailwindcss.com/docs/background-size
1228
+ */
1229
+ "bg-size": [{
1230
+ bg: ["auto", "cover", "contain", Gt]
1231
+ }],
1232
+ /**
1233
+ * Background Image
1234
+ * @see https://tailwindcss.com/docs/background-image
1235
+ */
1236
+ "bg-image": [{
1237
+ bg: ["none", {
1238
+ "gradient-to": ["t", "tr", "r", "br", "b", "bl", "l", "tl"]
1239
+ }, _t]
1240
+ }],
1241
+ /**
1242
+ * Background Color
1243
+ * @see https://tailwindcss.com/docs/background-color
1244
+ */
1245
+ "bg-color": [{
1246
+ bg: [e]
1247
+ }],
1248
+ /**
1249
+ * Gradient Color Stops From Position
1250
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1251
+ */
1252
+ "gradient-from-pos": [{
1253
+ from: [b]
1254
+ }],
1255
+ /**
1256
+ * Gradient Color Stops Via Position
1257
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1258
+ */
1259
+ "gradient-via-pos": [{
1260
+ via: [b]
1261
+ }],
1262
+ /**
1263
+ * Gradient Color Stops To Position
1264
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1265
+ */
1266
+ "gradient-to-pos": [{
1267
+ to: [b]
1268
+ }],
1269
+ /**
1270
+ * Gradient Color Stops From
1271
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1272
+ */
1273
+ "gradient-from": [{
1274
+ from: [T]
1275
+ }],
1276
+ /**
1277
+ * Gradient Color Stops Via
1278
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1279
+ */
1280
+ "gradient-via": [{
1281
+ via: [T]
1282
+ }],
1283
+ /**
1284
+ * Gradient Color Stops To
1285
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1286
+ */
1287
+ "gradient-to": [{
1288
+ to: [T]
1289
+ }],
1290
+ // Borders
1291
+ /**
1292
+ * Border Radius
1293
+ * @see https://tailwindcss.com/docs/border-radius
1294
+ */
1295
+ rounded: [{
1296
+ rounded: [i]
1297
+ }],
1298
+ /**
1299
+ * Border Radius Start
1300
+ * @see https://tailwindcss.com/docs/border-radius
1301
+ */
1302
+ "rounded-s": [{
1303
+ "rounded-s": [i]
1304
+ }],
1305
+ /**
1306
+ * Border Radius End
1307
+ * @see https://tailwindcss.com/docs/border-radius
1308
+ */
1309
+ "rounded-e": [{
1310
+ "rounded-e": [i]
1311
+ }],
1312
+ /**
1313
+ * Border Radius Top
1314
+ * @see https://tailwindcss.com/docs/border-radius
1315
+ */
1316
+ "rounded-t": [{
1317
+ "rounded-t": [i]
1318
+ }],
1319
+ /**
1320
+ * Border Radius Right
1321
+ * @see https://tailwindcss.com/docs/border-radius
1322
+ */
1323
+ "rounded-r": [{
1324
+ "rounded-r": [i]
1325
+ }],
1326
+ /**
1327
+ * Border Radius Bottom
1328
+ * @see https://tailwindcss.com/docs/border-radius
1329
+ */
1330
+ "rounded-b": [{
1331
+ "rounded-b": [i]
1332
+ }],
1333
+ /**
1334
+ * Border Radius Left
1335
+ * @see https://tailwindcss.com/docs/border-radius
1336
+ */
1337
+ "rounded-l": [{
1338
+ "rounded-l": [i]
1339
+ }],
1340
+ /**
1341
+ * Border Radius Start Start
1342
+ * @see https://tailwindcss.com/docs/border-radius
1343
+ */
1344
+ "rounded-ss": [{
1345
+ "rounded-ss": [i]
1346
+ }],
1347
+ /**
1348
+ * Border Radius Start End
1349
+ * @see https://tailwindcss.com/docs/border-radius
1350
+ */
1351
+ "rounded-se": [{
1352
+ "rounded-se": [i]
1353
+ }],
1354
+ /**
1355
+ * Border Radius End End
1356
+ * @see https://tailwindcss.com/docs/border-radius
1357
+ */
1358
+ "rounded-ee": [{
1359
+ "rounded-ee": [i]
1360
+ }],
1361
+ /**
1362
+ * Border Radius End Start
1363
+ * @see https://tailwindcss.com/docs/border-radius
1364
+ */
1365
+ "rounded-es": [{
1366
+ "rounded-es": [i]
1367
+ }],
1368
+ /**
1369
+ * Border Radius Top Left
1370
+ * @see https://tailwindcss.com/docs/border-radius
1371
+ */
1372
+ "rounded-tl": [{
1373
+ "rounded-tl": [i]
1374
+ }],
1375
+ /**
1376
+ * Border Radius Top Right
1377
+ * @see https://tailwindcss.com/docs/border-radius
1378
+ */
1379
+ "rounded-tr": [{
1380
+ "rounded-tr": [i]
1381
+ }],
1382
+ /**
1383
+ * Border Radius Bottom Right
1384
+ * @see https://tailwindcss.com/docs/border-radius
1385
+ */
1386
+ "rounded-br": [{
1387
+ "rounded-br": [i]
1388
+ }],
1389
+ /**
1390
+ * Border Radius Bottom Left
1391
+ * @see https://tailwindcss.com/docs/border-radius
1392
+ */
1393
+ "rounded-bl": [{
1394
+ "rounded-bl": [i]
1395
+ }],
1396
+ /**
1397
+ * Border Width
1398
+ * @see https://tailwindcss.com/docs/border-width
1399
+ */
1400
+ "border-w": [{
1401
+ border: [c]
1402
+ }],
1403
+ /**
1404
+ * Border Width X
1405
+ * @see https://tailwindcss.com/docs/border-width
1406
+ */
1407
+ "border-w-x": [{
1408
+ "border-x": [c]
1409
+ }],
1410
+ /**
1411
+ * Border Width Y
1412
+ * @see https://tailwindcss.com/docs/border-width
1413
+ */
1414
+ "border-w-y": [{
1415
+ "border-y": [c]
1416
+ }],
1417
+ /**
1418
+ * Border Width Start
1419
+ * @see https://tailwindcss.com/docs/border-width
1420
+ */
1421
+ "border-w-s": [{
1422
+ "border-s": [c]
1423
+ }],
1424
+ /**
1425
+ * Border Width End
1426
+ * @see https://tailwindcss.com/docs/border-width
1427
+ */
1428
+ "border-w-e": [{
1429
+ "border-e": [c]
1430
+ }],
1431
+ /**
1432
+ * Border Width Top
1433
+ * @see https://tailwindcss.com/docs/border-width
1434
+ */
1435
+ "border-w-t": [{
1436
+ "border-t": [c]
1437
+ }],
1438
+ /**
1439
+ * Border Width Right
1440
+ * @see https://tailwindcss.com/docs/border-width
1441
+ */
1442
+ "border-w-r": [{
1443
+ "border-r": [c]
1444
+ }],
1445
+ /**
1446
+ * Border Width Bottom
1447
+ * @see https://tailwindcss.com/docs/border-width
1448
+ */
1449
+ "border-w-b": [{
1450
+ "border-b": [c]
1451
+ }],
1452
+ /**
1453
+ * Border Width Left
1454
+ * @see https://tailwindcss.com/docs/border-width
1455
+ */
1456
+ "border-w-l": [{
1457
+ "border-l": [c]
1458
+ }],
1459
+ /**
1460
+ * Border Opacity
1461
+ * @see https://tailwindcss.com/docs/border-opacity
1462
+ */
1463
+ "border-opacity": [{
1464
+ "border-opacity": [k]
1465
+ }],
1466
+ /**
1467
+ * Border Style
1468
+ * @see https://tailwindcss.com/docs/border-style
1469
+ */
1470
+ "border-style": [{
1471
+ border: [...G(), "hidden"]
1472
+ }],
1473
+ /**
1474
+ * Divide Width X
1475
+ * @see https://tailwindcss.com/docs/divide-width
1476
+ */
1477
+ "divide-x": [{
1478
+ "divide-x": [c]
1479
+ }],
1480
+ /**
1481
+ * Divide Width X Reverse
1482
+ * @see https://tailwindcss.com/docs/divide-width
1483
+ */
1484
+ "divide-x-reverse": ["divide-x-reverse"],
1485
+ /**
1486
+ * Divide Width Y
1487
+ * @see https://tailwindcss.com/docs/divide-width
1488
+ */
1489
+ "divide-y": [{
1490
+ "divide-y": [c]
1491
+ }],
1492
+ /**
1493
+ * Divide Width Y Reverse
1494
+ * @see https://tailwindcss.com/docs/divide-width
1495
+ */
1496
+ "divide-y-reverse": ["divide-y-reverse"],
1497
+ /**
1498
+ * Divide Opacity
1499
+ * @see https://tailwindcss.com/docs/divide-opacity
1500
+ */
1501
+ "divide-opacity": [{
1502
+ "divide-opacity": [k]
1503
+ }],
1504
+ /**
1505
+ * Divide Style
1506
+ * @see https://tailwindcss.com/docs/divide-style
1507
+ */
1508
+ "divide-style": [{
1509
+ divide: G()
1510
+ }],
1511
+ /**
1512
+ * Border Color
1513
+ * @see https://tailwindcss.com/docs/border-color
1514
+ */
1515
+ "border-color": [{
1516
+ border: [o]
1517
+ }],
1518
+ /**
1519
+ * Border Color X
1520
+ * @see https://tailwindcss.com/docs/border-color
1521
+ */
1522
+ "border-color-x": [{
1523
+ "border-x": [o]
1524
+ }],
1525
+ /**
1526
+ * Border Color Y
1527
+ * @see https://tailwindcss.com/docs/border-color
1528
+ */
1529
+ "border-color-y": [{
1530
+ "border-y": [o]
1531
+ }],
1532
+ /**
1533
+ * Border Color S
1534
+ * @see https://tailwindcss.com/docs/border-color
1535
+ */
1536
+ "border-color-s": [{
1537
+ "border-s": [o]
1538
+ }],
1539
+ /**
1540
+ * Border Color E
1541
+ * @see https://tailwindcss.com/docs/border-color
1542
+ */
1543
+ "border-color-e": [{
1544
+ "border-e": [o]
1545
+ }],
1546
+ /**
1547
+ * Border Color Top
1548
+ * @see https://tailwindcss.com/docs/border-color
1549
+ */
1550
+ "border-color-t": [{
1551
+ "border-t": [o]
1552
+ }],
1553
+ /**
1554
+ * Border Color Right
1555
+ * @see https://tailwindcss.com/docs/border-color
1556
+ */
1557
+ "border-color-r": [{
1558
+ "border-r": [o]
1559
+ }],
1560
+ /**
1561
+ * Border Color Bottom
1562
+ * @see https://tailwindcss.com/docs/border-color
1563
+ */
1564
+ "border-color-b": [{
1565
+ "border-b": [o]
1566
+ }],
1567
+ /**
1568
+ * Border Color Left
1569
+ * @see https://tailwindcss.com/docs/border-color
1570
+ */
1571
+ "border-color-l": [{
1572
+ "border-l": [o]
1573
+ }],
1574
+ /**
1575
+ * Divide Color
1576
+ * @see https://tailwindcss.com/docs/divide-color
1577
+ */
1578
+ "divide-color": [{
1579
+ divide: [o]
1580
+ }],
1581
+ /**
1582
+ * Outline Style
1583
+ * @see https://tailwindcss.com/docs/outline-style
1584
+ */
1585
+ "outline-style": [{
1586
+ outline: ["", ...G()]
1587
+ }],
1588
+ /**
1589
+ * Outline Offset
1590
+ * @see https://tailwindcss.com/docs/outline-offset
1591
+ */
1592
+ "outline-offset": [{
1593
+ "outline-offset": [U, g]
1594
+ }],
1595
+ /**
1596
+ * Outline Width
1597
+ * @see https://tailwindcss.com/docs/outline-width
1598
+ */
1599
+ "outline-w": [{
1600
+ outline: [U, K]
1601
+ }],
1602
+ /**
1603
+ * Outline Color
1604
+ * @see https://tailwindcss.com/docs/outline-color
1605
+ */
1606
+ "outline-color": [{
1607
+ outline: [e]
1608
+ }],
1609
+ /**
1610
+ * Ring Width
1611
+ * @see https://tailwindcss.com/docs/ring-width
1612
+ */
1613
+ "ring-w": [{
1614
+ ring: y()
1615
+ }],
1616
+ /**
1617
+ * Ring Width Inset
1618
+ * @see https://tailwindcss.com/docs/ring-width
1619
+ */
1620
+ "ring-w-inset": ["ring-inset"],
1621
+ /**
1622
+ * Ring Color
1623
+ * @see https://tailwindcss.com/docs/ring-color
1624
+ */
1625
+ "ring-color": [{
1626
+ ring: [e]
1627
+ }],
1628
+ /**
1629
+ * Ring Opacity
1630
+ * @see https://tailwindcss.com/docs/ring-opacity
1631
+ */
1632
+ "ring-opacity": [{
1633
+ "ring-opacity": [k]
1634
+ }],
1635
+ /**
1636
+ * Ring Offset Width
1637
+ * @see https://tailwindcss.com/docs/ring-offset-width
1638
+ */
1639
+ "ring-offset-w": [{
1640
+ "ring-offset": [U, K]
1641
+ }],
1642
+ /**
1643
+ * Ring Offset Color
1644
+ * @see https://tailwindcss.com/docs/ring-offset-color
1645
+ */
1646
+ "ring-offset-color": [{
1647
+ "ring-offset": [e]
1648
+ }],
1649
+ // Effects
1650
+ /**
1651
+ * Box Shadow
1652
+ * @see https://tailwindcss.com/docs/box-shadow
1653
+ */
1654
+ shadow: [{
1655
+ shadow: ["", "inner", "none", H, Jt]
1656
+ }],
1657
+ /**
1658
+ * Box Shadow Color
1659
+ * @see https://tailwindcss.com/docs/box-shadow-color
1660
+ */
1661
+ "shadow-color": [{
1662
+ shadow: [ee]
1663
+ }],
1664
+ /**
1665
+ * Opacity
1666
+ * @see https://tailwindcss.com/docs/opacity
1667
+ */
1668
+ opacity: [{
1669
+ opacity: [k]
1670
+ }],
1671
+ /**
1672
+ * Mix Blend Mode
1673
+ * @see https://tailwindcss.com/docs/mix-blend-mode
1674
+ */
1675
+ "mix-blend": [{
1676
+ "mix-blend": [...we(), "plus-lighter", "plus-darker"]
1677
+ }],
1678
+ /**
1679
+ * Background Blend Mode
1680
+ * @see https://tailwindcss.com/docs/background-blend-mode
1681
+ */
1682
+ "bg-blend": [{
1683
+ "bg-blend": we()
1684
+ }],
1685
+ // Filters
1686
+ /**
1687
+ * Filter
1688
+ * @deprecated since Tailwind CSS v3.0.0
1689
+ * @see https://tailwindcss.com/docs/filter
1690
+ */
1691
+ filter: [{
1692
+ filter: ["", "none"]
1693
+ }],
1694
+ /**
1695
+ * Blur
1696
+ * @see https://tailwindcss.com/docs/blur
1697
+ */
1698
+ blur: [{
1699
+ blur: [t]
1700
+ }],
1701
+ /**
1702
+ * Brightness
1703
+ * @see https://tailwindcss.com/docs/brightness
1704
+ */
1705
+ brightness: [{
1706
+ brightness: [a]
1707
+ }],
1708
+ /**
1709
+ * Contrast
1710
+ * @see https://tailwindcss.com/docs/contrast
1711
+ */
1712
+ contrast: [{
1713
+ contrast: [m]
1714
+ }],
1715
+ /**
1716
+ * Drop Shadow
1717
+ * @see https://tailwindcss.com/docs/drop-shadow
1718
+ */
1719
+ "drop-shadow": [{
1720
+ "drop-shadow": ["", "none", H, g]
1721
+ }],
1722
+ /**
1723
+ * Grayscale
1724
+ * @see https://tailwindcss.com/docs/grayscale
1725
+ */
1726
+ grayscale: [{
1727
+ grayscale: [d]
1728
+ }],
1729
+ /**
1730
+ * Hue Rotate
1731
+ * @see https://tailwindcss.com/docs/hue-rotate
1732
+ */
1733
+ "hue-rotate": [{
1734
+ "hue-rotate": [f]
1735
+ }],
1736
+ /**
1737
+ * Invert
1738
+ * @see https://tailwindcss.com/docs/invert
1739
+ */
1740
+ invert: [{
1741
+ invert: [C]
1742
+ }],
1743
+ /**
1744
+ * Saturate
1745
+ * @see https://tailwindcss.com/docs/saturate
1746
+ */
1747
+ saturate: [{
1748
+ saturate: [p]
1749
+ }],
1750
+ /**
1751
+ * Sepia
1752
+ * @see https://tailwindcss.com/docs/sepia
1753
+ */
1754
+ sepia: [{
1755
+ sepia: [V]
1756
+ }],
1757
+ /**
1758
+ * Backdrop Filter
1759
+ * @deprecated since Tailwind CSS v3.0.0
1760
+ * @see https://tailwindcss.com/docs/backdrop-filter
1761
+ */
1762
+ "backdrop-filter": [{
1763
+ "backdrop-filter": ["", "none"]
1764
+ }],
1765
+ /**
1766
+ * Backdrop Blur
1767
+ * @see https://tailwindcss.com/docs/backdrop-blur
1768
+ */
1769
+ "backdrop-blur": [{
1770
+ "backdrop-blur": [t]
1771
+ }],
1772
+ /**
1773
+ * Backdrop Brightness
1774
+ * @see https://tailwindcss.com/docs/backdrop-brightness
1775
+ */
1776
+ "backdrop-brightness": [{
1777
+ "backdrop-brightness": [a]
1778
+ }],
1779
+ /**
1780
+ * Backdrop Contrast
1781
+ * @see https://tailwindcss.com/docs/backdrop-contrast
1782
+ */
1783
+ "backdrop-contrast": [{
1784
+ "backdrop-contrast": [m]
1785
+ }],
1786
+ /**
1787
+ * Backdrop Grayscale
1788
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
1789
+ */
1790
+ "backdrop-grayscale": [{
1791
+ "backdrop-grayscale": [d]
1792
+ }],
1793
+ /**
1794
+ * Backdrop Hue Rotate
1795
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
1796
+ */
1797
+ "backdrop-hue-rotate": [{
1798
+ "backdrop-hue-rotate": [f]
1799
+ }],
1800
+ /**
1801
+ * Backdrop Invert
1802
+ * @see https://tailwindcss.com/docs/backdrop-invert
1803
+ */
1804
+ "backdrop-invert": [{
1805
+ "backdrop-invert": [C]
1806
+ }],
1807
+ /**
1808
+ * Backdrop Opacity
1809
+ * @see https://tailwindcss.com/docs/backdrop-opacity
1810
+ */
1811
+ "backdrop-opacity": [{
1812
+ "backdrop-opacity": [k]
1813
+ }],
1814
+ /**
1815
+ * Backdrop Saturate
1816
+ * @see https://tailwindcss.com/docs/backdrop-saturate
1817
+ */
1818
+ "backdrop-saturate": [{
1819
+ "backdrop-saturate": [p]
1820
+ }],
1821
+ /**
1822
+ * Backdrop Sepia
1823
+ * @see https://tailwindcss.com/docs/backdrop-sepia
1824
+ */
1825
+ "backdrop-sepia": [{
1826
+ "backdrop-sepia": [V]
1827
+ }],
1828
+ // Tables
1829
+ /**
1830
+ * Border Collapse
1831
+ * @see https://tailwindcss.com/docs/border-collapse
1832
+ */
1833
+ "border-collapse": [{
1834
+ border: ["collapse", "separate"]
1835
+ }],
1836
+ /**
1837
+ * Border Spacing
1838
+ * @see https://tailwindcss.com/docs/border-spacing
1839
+ */
1840
+ "border-spacing": [{
1841
+ "border-spacing": [s]
1842
+ }],
1843
+ /**
1844
+ * Border Spacing X
1845
+ * @see https://tailwindcss.com/docs/border-spacing
1846
+ */
1847
+ "border-spacing-x": [{
1848
+ "border-spacing-x": [s]
1849
+ }],
1850
+ /**
1851
+ * Border Spacing Y
1852
+ * @see https://tailwindcss.com/docs/border-spacing
1853
+ */
1854
+ "border-spacing-y": [{
1855
+ "border-spacing-y": [s]
1856
+ }],
1857
+ /**
1858
+ * Table Layout
1859
+ * @see https://tailwindcss.com/docs/table-layout
1860
+ */
1861
+ "table-layout": [{
1862
+ table: ["auto", "fixed"]
1863
+ }],
1864
+ /**
1865
+ * Caption Side
1866
+ * @see https://tailwindcss.com/docs/caption-side
1867
+ */
1868
+ caption: [{
1869
+ caption: ["top", "bottom"]
1870
+ }],
1871
+ // Transitions and Animation
1872
+ /**
1873
+ * Tranisition Property
1874
+ * @see https://tailwindcss.com/docs/transition-property
1875
+ */
1876
+ transition: [{
1877
+ transition: ["none", "all", "", "colors", "opacity", "shadow", "transform", g]
1878
+ }],
1879
+ /**
1880
+ * Transition Duration
1881
+ * @see https://tailwindcss.com/docs/transition-duration
1882
+ */
1883
+ duration: [{
1884
+ duration: J()
1885
+ }],
1886
+ /**
1887
+ * Transition Timing Function
1888
+ * @see https://tailwindcss.com/docs/transition-timing-function
1889
+ */
1890
+ ease: [{
1891
+ ease: ["linear", "in", "out", "in-out", g]
1892
+ }],
1893
+ /**
1894
+ * Transition Delay
1895
+ * @see https://tailwindcss.com/docs/transition-delay
1896
+ */
1897
+ delay: [{
1898
+ delay: J()
1899
+ }],
1900
+ /**
1901
+ * Animation
1902
+ * @see https://tailwindcss.com/docs/animation
1903
+ */
1904
+ animate: [{
1905
+ animate: ["none", "spin", "ping", "pulse", "bounce", g]
1906
+ }],
1907
+ // Transforms
1908
+ /**
1909
+ * Transform
1910
+ * @see https://tailwindcss.com/docs/transform
1911
+ */
1912
+ transform: [{
1913
+ transform: ["", "gpu", "none"]
1914
+ }],
1915
+ /**
1916
+ * Scale
1917
+ * @see https://tailwindcss.com/docs/scale
1918
+ */
1919
+ scale: [{
1920
+ scale: [j]
1921
+ }],
1922
+ /**
1923
+ * Scale X
1924
+ * @see https://tailwindcss.com/docs/scale
1925
+ */
1926
+ "scale-x": [{
1927
+ "scale-x": [j]
1928
+ }],
1929
+ /**
1930
+ * Scale Y
1931
+ * @see https://tailwindcss.com/docs/scale
1932
+ */
1933
+ "scale-y": [{
1934
+ "scale-y": [j]
1935
+ }],
1936
+ /**
1937
+ * Rotate
1938
+ * @see https://tailwindcss.com/docs/rotate
1939
+ */
1940
+ rotate: [{
1941
+ rotate: [Y, g]
1942
+ }],
1943
+ /**
1944
+ * Translate X
1945
+ * @see https://tailwindcss.com/docs/translate
1946
+ */
1947
+ "translate-x": [{
1948
+ "translate-x": [D]
1949
+ }],
1950
+ /**
1951
+ * Translate Y
1952
+ * @see https://tailwindcss.com/docs/translate
1953
+ */
1954
+ "translate-y": [{
1955
+ "translate-y": [D]
1956
+ }],
1957
+ /**
1958
+ * Skew X
1959
+ * @see https://tailwindcss.com/docs/skew
1960
+ */
1961
+ "skew-x": [{
1962
+ "skew-x": [W]
1963
+ }],
1964
+ /**
1965
+ * Skew Y
1966
+ * @see https://tailwindcss.com/docs/skew
1967
+ */
1968
+ "skew-y": [{
1969
+ "skew-y": [W]
1970
+ }],
1971
+ /**
1972
+ * Transform Origin
1973
+ * @see https://tailwindcss.com/docs/transform-origin
1974
+ */
1975
+ "transform-origin": [{
1976
+ origin: ["center", "top", "top-right", "right", "bottom-right", "bottom", "bottom-left", "left", "top-left", g]
1977
+ }],
1978
+ // Interactivity
1979
+ /**
1980
+ * Accent Color
1981
+ * @see https://tailwindcss.com/docs/accent-color
1982
+ */
1983
+ accent: [{
1984
+ accent: ["auto", e]
1985
+ }],
1986
+ /**
1987
+ * Appearance
1988
+ * @see https://tailwindcss.com/docs/appearance
1989
+ */
1990
+ appearance: [{
1991
+ appearance: ["none", "auto"]
1992
+ }],
1993
+ /**
1994
+ * Cursor
1995
+ * @see https://tailwindcss.com/docs/cursor
1996
+ */
1997
+ cursor: [{
1998
+ cursor: ["auto", "default", "pointer", "wait", "text", "move", "help", "not-allowed", "none", "context-menu", "progress", "cell", "crosshair", "vertical-text", "alias", "copy", "no-drop", "grab", "grabbing", "all-scroll", "col-resize", "row-resize", "n-resize", "e-resize", "s-resize", "w-resize", "ne-resize", "nw-resize", "se-resize", "sw-resize", "ew-resize", "ns-resize", "nesw-resize", "nwse-resize", "zoom-in", "zoom-out", g]
1999
+ }],
2000
+ /**
2001
+ * Caret Color
2002
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
2003
+ */
2004
+ "caret-color": [{
2005
+ caret: [e]
2006
+ }],
2007
+ /**
2008
+ * Pointer Events
2009
+ * @see https://tailwindcss.com/docs/pointer-events
2010
+ */
2011
+ "pointer-events": [{
2012
+ "pointer-events": ["none", "auto"]
2013
+ }],
2014
+ /**
2015
+ * Resize
2016
+ * @see https://tailwindcss.com/docs/resize
2017
+ */
2018
+ resize: [{
2019
+ resize: ["none", "y", "x", ""]
2020
+ }],
2021
+ /**
2022
+ * Scroll Behavior
2023
+ * @see https://tailwindcss.com/docs/scroll-behavior
2024
+ */
2025
+ "scroll-behavior": [{
2026
+ scroll: ["auto", "smooth"]
2027
+ }],
2028
+ /**
2029
+ * Scroll Margin
2030
+ * @see https://tailwindcss.com/docs/scroll-margin
2031
+ */
2032
+ "scroll-m": [{
2033
+ "scroll-m": x()
2034
+ }],
2035
+ /**
2036
+ * Scroll Margin X
2037
+ * @see https://tailwindcss.com/docs/scroll-margin
2038
+ */
2039
+ "scroll-mx": [{
2040
+ "scroll-mx": x()
2041
+ }],
2042
+ /**
2043
+ * Scroll Margin Y
2044
+ * @see https://tailwindcss.com/docs/scroll-margin
2045
+ */
2046
+ "scroll-my": [{
2047
+ "scroll-my": x()
2048
+ }],
2049
+ /**
2050
+ * Scroll Margin Start
2051
+ * @see https://tailwindcss.com/docs/scroll-margin
2052
+ */
2053
+ "scroll-ms": [{
2054
+ "scroll-ms": x()
2055
+ }],
2056
+ /**
2057
+ * Scroll Margin End
2058
+ * @see https://tailwindcss.com/docs/scroll-margin
2059
+ */
2060
+ "scroll-me": [{
2061
+ "scroll-me": x()
2062
+ }],
2063
+ /**
2064
+ * Scroll Margin Top
2065
+ * @see https://tailwindcss.com/docs/scroll-margin
2066
+ */
2067
+ "scroll-mt": [{
2068
+ "scroll-mt": x()
2069
+ }],
2070
+ /**
2071
+ * Scroll Margin Right
2072
+ * @see https://tailwindcss.com/docs/scroll-margin
2073
+ */
2074
+ "scroll-mr": [{
2075
+ "scroll-mr": x()
2076
+ }],
2077
+ /**
2078
+ * Scroll Margin Bottom
2079
+ * @see https://tailwindcss.com/docs/scroll-margin
2080
+ */
2081
+ "scroll-mb": [{
2082
+ "scroll-mb": x()
2083
+ }],
2084
+ /**
2085
+ * Scroll Margin Left
2086
+ * @see https://tailwindcss.com/docs/scroll-margin
2087
+ */
2088
+ "scroll-ml": [{
2089
+ "scroll-ml": x()
2090
+ }],
2091
+ /**
2092
+ * Scroll Padding
2093
+ * @see https://tailwindcss.com/docs/scroll-padding
2094
+ */
2095
+ "scroll-p": [{
2096
+ "scroll-p": x()
2097
+ }],
2098
+ /**
2099
+ * Scroll Padding X
2100
+ * @see https://tailwindcss.com/docs/scroll-padding
2101
+ */
2102
+ "scroll-px": [{
2103
+ "scroll-px": x()
2104
+ }],
2105
+ /**
2106
+ * Scroll Padding Y
2107
+ * @see https://tailwindcss.com/docs/scroll-padding
2108
+ */
2109
+ "scroll-py": [{
2110
+ "scroll-py": x()
2111
+ }],
2112
+ /**
2113
+ * Scroll Padding Start
2114
+ * @see https://tailwindcss.com/docs/scroll-padding
2115
+ */
2116
+ "scroll-ps": [{
2117
+ "scroll-ps": x()
2118
+ }],
2119
+ /**
2120
+ * Scroll Padding End
2121
+ * @see https://tailwindcss.com/docs/scroll-padding
2122
+ */
2123
+ "scroll-pe": [{
2124
+ "scroll-pe": x()
2125
+ }],
2126
+ /**
2127
+ * Scroll Padding Top
2128
+ * @see https://tailwindcss.com/docs/scroll-padding
2129
+ */
2130
+ "scroll-pt": [{
2131
+ "scroll-pt": x()
2132
+ }],
2133
+ /**
2134
+ * Scroll Padding Right
2135
+ * @see https://tailwindcss.com/docs/scroll-padding
2136
+ */
2137
+ "scroll-pr": [{
2138
+ "scroll-pr": x()
2139
+ }],
2140
+ /**
2141
+ * Scroll Padding Bottom
2142
+ * @see https://tailwindcss.com/docs/scroll-padding
2143
+ */
2144
+ "scroll-pb": [{
2145
+ "scroll-pb": x()
2146
+ }],
2147
+ /**
2148
+ * Scroll Padding Left
2149
+ * @see https://tailwindcss.com/docs/scroll-padding
2150
+ */
2151
+ "scroll-pl": [{
2152
+ "scroll-pl": x()
2153
+ }],
2154
+ /**
2155
+ * Scroll Snap Align
2156
+ * @see https://tailwindcss.com/docs/scroll-snap-align
2157
+ */
2158
+ "snap-align": [{
2159
+ snap: ["start", "end", "center", "align-none"]
2160
+ }],
2161
+ /**
2162
+ * Scroll Snap Stop
2163
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
2164
+ */
2165
+ "snap-stop": [{
2166
+ snap: ["normal", "always"]
2167
+ }],
2168
+ /**
2169
+ * Scroll Snap Type
2170
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2171
+ */
2172
+ "snap-type": [{
2173
+ snap: ["none", "x", "y", "both"]
2174
+ }],
2175
+ /**
2176
+ * Scroll Snap Type Strictness
2177
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2178
+ */
2179
+ "snap-strictness": [{
2180
+ snap: ["mandatory", "proximity"]
2181
+ }],
2182
+ /**
2183
+ * Touch Action
2184
+ * @see https://tailwindcss.com/docs/touch-action
2185
+ */
2186
+ touch: [{
2187
+ touch: ["auto", "none", "manipulation"]
2188
+ }],
2189
+ /**
2190
+ * Touch Action X
2191
+ * @see https://tailwindcss.com/docs/touch-action
2192
+ */
2193
+ "touch-x": [{
2194
+ "touch-pan": ["x", "left", "right"]
2195
+ }],
2196
+ /**
2197
+ * Touch Action Y
2198
+ * @see https://tailwindcss.com/docs/touch-action
2199
+ */
2200
+ "touch-y": [{
2201
+ "touch-pan": ["y", "up", "down"]
2202
+ }],
2203
+ /**
2204
+ * Touch Action Pinch Zoom
2205
+ * @see https://tailwindcss.com/docs/touch-action
2206
+ */
2207
+ "touch-pz": ["touch-pinch-zoom"],
2208
+ /**
2209
+ * User Select
2210
+ * @see https://tailwindcss.com/docs/user-select
2211
+ */
2212
+ select: [{
2213
+ select: ["none", "text", "all", "auto"]
2214
+ }],
2215
+ /**
2216
+ * Will Change
2217
+ * @see https://tailwindcss.com/docs/will-change
2218
+ */
2219
+ "will-change": [{
2220
+ "will-change": ["auto", "scroll", "contents", "transform", g]
2221
+ }],
2222
+ // SVG
2223
+ /**
2224
+ * Fill
2225
+ * @see https://tailwindcss.com/docs/fill
2226
+ */
2227
+ fill: [{
2228
+ fill: [e, "none"]
2229
+ }],
2230
+ /**
2231
+ * Stroke Width
2232
+ * @see https://tailwindcss.com/docs/stroke-width
2233
+ */
2234
+ "stroke-w": [{
2235
+ stroke: [U, K, ae]
2236
+ }],
2237
+ /**
2238
+ * Stroke
2239
+ * @see https://tailwindcss.com/docs/stroke
2240
+ */
2241
+ stroke: [{
2242
+ stroke: [e, "none"]
2243
+ }],
2244
+ // Accessibility
2245
+ /**
2246
+ * Screen Readers
2247
+ * @see https://tailwindcss.com/docs/screen-readers
2248
+ */
2249
+ sr: ["sr-only", "not-sr-only"],
2250
+ /**
2251
+ * Forced Color Adjust
2252
+ * @see https://tailwindcss.com/docs/forced-color-adjust
2253
+ */
2254
+ "forced-color-adjust": [{
2255
+ "forced-color-adjust": ["auto", "none"]
2256
+ }]
2257
+ },
2258
+ conflictingClassGroups: {
2259
+ overflow: ["overflow-x", "overflow-y"],
2260
+ overscroll: ["overscroll-x", "overscroll-y"],
2261
+ inset: ["inset-x", "inset-y", "start", "end", "top", "right", "bottom", "left"],
2262
+ "inset-x": ["right", "left"],
2263
+ "inset-y": ["top", "bottom"],
2264
+ flex: ["basis", "grow", "shrink"],
2265
+ gap: ["gap-x", "gap-y"],
2266
+ p: ["px", "py", "ps", "pe", "pt", "pr", "pb", "pl"],
2267
+ px: ["pr", "pl"],
2268
+ py: ["pt", "pb"],
2269
+ m: ["mx", "my", "ms", "me", "mt", "mr", "mb", "ml"],
2270
+ mx: ["mr", "ml"],
2271
+ my: ["mt", "mb"],
2272
+ size: ["w", "h"],
2273
+ "font-size": ["leading"],
2274
+ "fvn-normal": ["fvn-ordinal", "fvn-slashed-zero", "fvn-figure", "fvn-spacing", "fvn-fraction"],
2275
+ "fvn-ordinal": ["fvn-normal"],
2276
+ "fvn-slashed-zero": ["fvn-normal"],
2277
+ "fvn-figure": ["fvn-normal"],
2278
+ "fvn-spacing": ["fvn-normal"],
2279
+ "fvn-fraction": ["fvn-normal"],
2280
+ "line-clamp": ["display", "overflow"],
2281
+ rounded: ["rounded-s", "rounded-e", "rounded-t", "rounded-r", "rounded-b", "rounded-l", "rounded-ss", "rounded-se", "rounded-ee", "rounded-es", "rounded-tl", "rounded-tr", "rounded-br", "rounded-bl"],
2282
+ "rounded-s": ["rounded-ss", "rounded-es"],
2283
+ "rounded-e": ["rounded-se", "rounded-ee"],
2284
+ "rounded-t": ["rounded-tl", "rounded-tr"],
2285
+ "rounded-r": ["rounded-tr", "rounded-br"],
2286
+ "rounded-b": ["rounded-br", "rounded-bl"],
2287
+ "rounded-l": ["rounded-tl", "rounded-bl"],
2288
+ "border-spacing": ["border-spacing-x", "border-spacing-y"],
2289
+ "border-w": ["border-w-s", "border-w-e", "border-w-t", "border-w-r", "border-w-b", "border-w-l"],
2290
+ "border-w-x": ["border-w-r", "border-w-l"],
2291
+ "border-w-y": ["border-w-t", "border-w-b"],
2292
+ "border-color": ["border-color-s", "border-color-e", "border-color-t", "border-color-r", "border-color-b", "border-color-l"],
2293
+ "border-color-x": ["border-color-r", "border-color-l"],
2294
+ "border-color-y": ["border-color-t", "border-color-b"],
2295
+ "scroll-m": ["scroll-mx", "scroll-my", "scroll-ms", "scroll-me", "scroll-mt", "scroll-mr", "scroll-mb", "scroll-ml"],
2296
+ "scroll-mx": ["scroll-mr", "scroll-ml"],
2297
+ "scroll-my": ["scroll-mt", "scroll-mb"],
2298
+ "scroll-p": ["scroll-px", "scroll-py", "scroll-ps", "scroll-pe", "scroll-pt", "scroll-pr", "scroll-pb", "scroll-pl"],
2299
+ "scroll-px": ["scroll-pr", "scroll-pl"],
2300
+ "scroll-py": ["scroll-pt", "scroll-pb"],
2301
+ touch: ["touch-x", "touch-y", "touch-pz"],
2302
+ "touch-x": ["touch"],
2303
+ "touch-y": ["touch"],
2304
+ "touch-pz": ["touch"]
2305
+ },
2306
+ conflictingClassGroupModifiers: {
2307
+ "font-size": ["leading"]
2308
+ }
2309
+ };
2310
+ }, Xt = /* @__PURE__ */ jt(Ht);
2311
+ function N(...e) {
2312
+ return Xt(qe(e));
2313
+ }
2314
+ const Zt = Ee(
2315
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover-elevate active-elevate-2",
2316
+ {
2317
+ variants: {
2318
+ variant: {
2319
+ default: "bg-primary text-primary-foreground border border-primary-border",
2320
+ destructive: "bg-destructive text-destructive-foreground border border-destructive-border",
2321
+ outline: (
2322
+ // Shows the background color of whatever card / sidebar / accent background it is inside of.
2323
+ // Inherits the current text color.
2324
+ " border [border-color:var(--button-outline)] shadow-xs active:shadow-none "
2325
+ ),
2326
+ secondary: "border bg-secondary text-secondary-foreground border border-secondary-border ",
2327
+ // Add a transparent border so that when someone toggles a border on later, it doesn't shift layout/size.
2328
+ ghost: "border border-transparent"
2329
+ },
2330
+ // Heights are set as "min" heights, because sometimes Ai will place large amount of content
2331
+ // inside buttons. With a min-height they will look appropriate with small amounts of content,
2332
+ // but will expand to fit large amounts of content.
2333
+ size: {
2334
+ default: "min-h-9 px-4 py-2",
2335
+ sm: "min-h-8 rounded-md px-3 text-xs",
2336
+ lg: "min-h-10 rounded-md px-8",
2337
+ icon: "h-9 w-9"
2338
+ }
2339
+ },
2340
+ defaultVariants: {
2341
+ variant: "default",
2342
+ size: "default"
2343
+ }
2344
+ }
2345
+ ), L = I.forwardRef(
2346
+ ({ className: e, variant: r, size: t, asChild: a = !1, ...o }, i) => /* @__PURE__ */ n(
2347
+ a ? nt : "button",
2348
+ {
2349
+ className: N(Zt({ variant: r, size: t, className: e })),
2350
+ ref: i,
2351
+ ...o
2352
+ }
2353
+ )
2354
+ );
2355
+ L.displayName = "Button";
2356
+ const M = I.forwardRef(
2357
+ ({ className: e, type: r, ...t }, a) => /* @__PURE__ */ n(
2358
+ "input",
2359
+ {
2360
+ type: r,
2361
+ className: N(
2362
+ "flex h-9 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
2363
+ e
2364
+ ),
2365
+ ref: a,
2366
+ ...t
2367
+ }
2368
+ )
2369
+ );
2370
+ M.displayName = "Input";
2371
+ const Qt = ne.Provider, Yt = ne.Root, er = ne.Trigger, Be = I.forwardRef(({ className: e, sideOffset: r = 4, ...t }, a) => /* @__PURE__ */ n(
2372
+ ne.Content,
2373
+ {
2374
+ ref: a,
2375
+ sideOffset: r,
2376
+ className: N(
2377
+ "z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]",
2378
+ e
2379
+ ),
2380
+ ...t
2381
+ }
2382
+ ));
2383
+ Be.displayName = ne.Content.displayName;
2384
+ const tr = B.Root, rr = B.Portal, $e = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
2385
+ B.Overlay,
2386
+ {
2387
+ ref: t,
2388
+ className: N(
2389
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
2390
+ e
2391
+ ),
2392
+ ...r
2393
+ }
2394
+ ));
2395
+ $e.displayName = B.Overlay.displayName;
2396
+ const _e = I.forwardRef(({ className: e, children: r, ...t }, a) => /* @__PURE__ */ l(rr, { children: [
2397
+ /* @__PURE__ */ n($e, {}),
2398
+ /* @__PURE__ */ l(
2399
+ B.Content,
2400
+ {
2401
+ ref: a,
2402
+ className: N(
2403
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
2404
+ e
2405
+ ),
2406
+ ...t,
2407
+ children: [
2408
+ r,
2409
+ /* @__PURE__ */ l(B.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
2410
+ /* @__PURE__ */ n(ot, { className: "h-4 w-4" }),
2411
+ /* @__PURE__ */ n("span", { className: "sr-only", children: "Close" })
2412
+ ] })
2413
+ ]
2414
+ }
2415
+ )
2416
+ ] }));
2417
+ _e.displayName = B.Content.displayName;
2418
+ const Je = ({
2419
+ className: e,
2420
+ ...r
2421
+ }) => /* @__PURE__ */ n(
2422
+ "div",
2423
+ {
2424
+ className: N(
2425
+ "flex flex-col space-y-1.5 text-center sm:text-left",
2426
+ e
2427
+ ),
2428
+ ...r
2429
+ }
2430
+ );
2431
+ Je.displayName = "DialogHeader";
2432
+ const Ue = ({
2433
+ className: e,
2434
+ ...r
2435
+ }) => /* @__PURE__ */ n(
2436
+ "div",
2437
+ {
2438
+ className: N(
2439
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
2440
+ e
2441
+ ),
2442
+ ...r
2443
+ }
2444
+ );
2445
+ Ue.displayName = "DialogFooter";
2446
+ const We = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
2447
+ B.Title,
2448
+ {
2449
+ ref: t,
2450
+ className: N(
2451
+ "text-lg font-semibold leading-none tracking-tight",
2452
+ e
2453
+ ),
2454
+ ...r
2455
+ }
2456
+ ));
2457
+ We.displayName = B.Title.displayName;
2458
+ const nr = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
2459
+ B.Description,
2460
+ {
2461
+ ref: t,
2462
+ className: N("text-sm text-muted-foreground", e),
2463
+ ...r
2464
+ }
2465
+ ));
2466
+ nr.displayName = B.Description.displayName;
2467
+ const or = Ee(
2468
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
2469
+ ), P = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
2470
+ Le.Root,
2471
+ {
2472
+ ref: t,
2473
+ className: N(or(), e),
2474
+ ...r
2475
+ }
2476
+ ));
2477
+ P.displayName = Le.Root.displayName;
2478
+ const ze = A.Root, Pe = A.Value, le = I.forwardRef(({ className: e, children: r, ...t }, a) => /* @__PURE__ */ l(
2479
+ A.Trigger,
2480
+ {
2481
+ ref: a,
2482
+ className: N(
2483
+ "flex h-9 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
2484
+ e
2485
+ ),
2486
+ ...t,
2487
+ children: [
2488
+ r,
2489
+ /* @__PURE__ */ n(A.Icon, { asChild: !0, children: /* @__PURE__ */ n(ge, { className: "h-4 w-4 opacity-50" }) })
2490
+ ]
2491
+ }
2492
+ ));
2493
+ le.displayName = A.Trigger.displayName;
2494
+ const Ke = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
2495
+ A.ScrollUpButton,
2496
+ {
2497
+ ref: t,
2498
+ className: N(
2499
+ "flex cursor-default items-center justify-center py-1",
2500
+ e
2501
+ ),
2502
+ ...r,
2503
+ children: /* @__PURE__ */ n(at, { className: "h-4 w-4" })
2504
+ }
2505
+ ));
2506
+ Ke.displayName = A.ScrollUpButton.displayName;
2507
+ const He = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
2508
+ A.ScrollDownButton,
2509
+ {
2510
+ ref: t,
2511
+ className: N(
2512
+ "flex cursor-default items-center justify-center py-1",
2513
+ e
2514
+ ),
2515
+ ...r,
2516
+ children: /* @__PURE__ */ n(ge, { className: "h-4 w-4" })
2517
+ }
2518
+ ));
2519
+ He.displayName = A.ScrollDownButton.displayName;
2520
+ const de = I.forwardRef(({ className: e, children: r, position: t = "popper", ...a }, o) => /* @__PURE__ */ n(A.Portal, { children: /* @__PURE__ */ l(
2521
+ A.Content,
2522
+ {
2523
+ ref: o,
2524
+ className: N(
2525
+ "relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",
2526
+ t === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
2527
+ e
2528
+ ),
2529
+ position: t,
2530
+ ...a,
2531
+ children: [
2532
+ /* @__PURE__ */ n(Ke, {}),
2533
+ /* @__PURE__ */ n(
2534
+ A.Viewport,
2535
+ {
2536
+ className: N(
2537
+ "p-1",
2538
+ t === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
2539
+ ),
2540
+ children: r
2541
+ }
2542
+ ),
2543
+ /* @__PURE__ */ n(He, {})
2544
+ ]
2545
+ }
2546
+ ) }));
2547
+ de.displayName = A.Content.displayName;
2548
+ const ar = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
2549
+ A.Label,
2550
+ {
2551
+ ref: t,
2552
+ className: N("py-1.5 pl-8 pr-2 text-sm font-semibold", e),
2553
+ ...r
2554
+ }
2555
+ ));
2556
+ ar.displayName = A.Label.displayName;
2557
+ const R = I.forwardRef(({ className: e, children: r, ...t }, a) => /* @__PURE__ */ l(
2558
+ A.Item,
2559
+ {
2560
+ ref: a,
2561
+ className: N(
2562
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
2563
+ e
2564
+ ),
2565
+ ...t,
2566
+ children: [
2567
+ /* @__PURE__ */ n("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ n(A.ItemIndicator, { children: /* @__PURE__ */ n(je, { className: "h-4 w-4" }) }) }),
2568
+ /* @__PURE__ */ n(A.ItemText, { children: r })
2569
+ ]
2570
+ }
2571
+ ));
2572
+ R.displayName = A.Item.displayName;
2573
+ const ir = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
2574
+ A.Separator,
2575
+ {
2576
+ ref: t,
2577
+ className: N("-mx-1 my-1 h-px bg-muted", e),
2578
+ ...r
2579
+ }
2580
+ ));
2581
+ ir.displayName = A.Separator.displayName;
2582
+ const ce = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
2583
+ ie.Root,
2584
+ {
2585
+ ref: t,
2586
+ className: N(
2587
+ "peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
2588
+ e
2589
+ ),
2590
+ ...r,
2591
+ children: /* @__PURE__ */ n(
2592
+ ie.Indicator,
2593
+ {
2594
+ className: N("flex items-center justify-center text-current"),
2595
+ children: /* @__PURE__ */ n(je, { className: "h-4 w-4" })
2596
+ }
2597
+ )
2598
+ }
2599
+ ));
2600
+ ce.displayName = ie.Root.displayName;
2601
+ const ye = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
2602
+ "textarea",
2603
+ {
2604
+ className: N(
2605
+ "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
2606
+ e
2607
+ ),
2608
+ ref: t,
2609
+ ...r
2610
+ }
2611
+ ));
2612
+ ye.displayName = "Textarea";
2613
+ const sr = (e) => e.trim().toLowerCase().replace(/[^\w\s]/g, "").replace(/\s+/g, "_"), lr = (e, r, t = !1) => {
2614
+ const a = (m, d) => {
2615
+ r({ ...e, [m]: d });
2616
+ };
2617
+ return {
2618
+ handleTitleChange: (m) => {
2619
+ a("title", m);
2620
+ },
2621
+ handleTitleBlur: () => {
2622
+ if (t && e.title) {
2623
+ const m = sr(e.title);
2624
+ a("key", m);
2625
+ }
2626
+ },
2627
+ handleKeyChange: (m) => {
2628
+ t && a("key", m);
2629
+ },
2630
+ handleFieldChange: a,
2631
+ handleConstraintChange: (m, d) => {
2632
+ r({
2633
+ ...e,
2634
+ [m]: d
2635
+ });
2636
+ }
2637
+ };
2638
+ }, me = {
2639
+ string: "String",
2640
+ number: "Number",
2641
+ integer: "Integer",
2642
+ boolean: "Boolean",
2643
+ object: "Object",
2644
+ array: "Array",
2645
+ null: "Null",
2646
+ file: "File"
2647
+ }, Xe = tt({
2648
+ getTypeLabel: (e) => me[e],
2649
+ typeLabels: me
2650
+ });
2651
+ function dr({
2652
+ children: e,
2653
+ customLabels: r = {}
2654
+ }) {
2655
+ const t = { ...me, ...r }, a = (o) => t[o] || o;
2656
+ return /* @__PURE__ */ n(Xe.Provider, { value: { getTypeLabel: a, typeLabels: t }, children: e });
2657
+ }
2658
+ function Ze() {
2659
+ return et(Xe);
2660
+ }
2661
+ function ue({
2662
+ property: e,
2663
+ open: r,
2664
+ onOpenChange: t,
2665
+ onUpdate: a,
2666
+ isArrayItem: o = !1,
2667
+ isNewProperty: i = !1,
2668
+ propertyLabel: s = { singular: "Property", plural: "Properties" },
2669
+ showRegex: c = !1
2670
+ }) {
2671
+ var w;
2672
+ const { typeLabels: m } = Ze(), [d, f] = E(e);
2673
+ re(() => {
2674
+ r && f(e);
2675
+ }, [e, r]);
2676
+ const {
2677
+ handleTitleChange: C,
2678
+ handleTitleBlur: v,
2679
+ handleKeyChange: T,
2680
+ handleFieldChange: b,
2681
+ handleConstraintChange: u
2682
+ } = lr(d, f, i), h = () => {
2683
+ var p;
2684
+ (p = d.title) != null && p.trim() && (a(d), t(!1));
2685
+ }, k = () => {
2686
+ f(e), t(!1);
2687
+ };
2688
+ return /* @__PURE__ */ n(tr, { open: r, onOpenChange: t, children: /* @__PURE__ */ l(
2689
+ _e,
2690
+ {
2691
+ className: "max-w-2xl max-h-[80vh] flex flex-col gap-0 p-0",
2692
+ "data-testid": "dialog-edit-property",
2693
+ children: [
2694
+ /* @__PURE__ */ n(Je, { className: "px-6 pt-6 pb-4 shrink-0", children: /* @__PURE__ */ n(We, { children: i ? `Add ${s.singular}` : `Edit ${s.singular}` }) }),
2695
+ /* @__PURE__ */ l("div", { className: "space-y-6 px-6 pb-4 overflow-y-auto flex-1 min-h-0", children: [
2696
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2697
+ /* @__PURE__ */ l(P, { className: "flex items-center gap-1.5", children: [
2698
+ /* @__PURE__ */ n("span", { className: "w-1.5 h-1.5 rounded-full bg-red-500" }),
2699
+ "Type"
2700
+ ] }),
2701
+ /* @__PURE__ */ l(
2702
+ ze,
2703
+ {
2704
+ value: d.type,
2705
+ onValueChange: (p) => b("type", p),
2706
+ "data-testid": "select-type-dialog",
2707
+ children: [
2708
+ /* @__PURE__ */ n(le, { children: /* @__PURE__ */ n(Pe, {}) }),
2709
+ /* @__PURE__ */ l(de, { children: [
2710
+ /* @__PURE__ */ n(R, { value: "string", children: m.string }),
2711
+ /* @__PURE__ */ n(R, { value: "number", children: m.number }),
2712
+ /* @__PURE__ */ n(R, { value: "integer", children: m.integer }),
2713
+ /* @__PURE__ */ n(R, { value: "boolean", children: m.boolean }),
2714
+ /* @__PURE__ */ n(R, { value: "object", children: m.object }),
2715
+ /* @__PURE__ */ n(R, { value: "array", children: m.array }),
2716
+ /* @__PURE__ */ n(R, { value: "file", children: m.file }),
2717
+ /* @__PURE__ */ n(R, { value: "null", children: m.null })
2718
+ ] })
2719
+ ]
2720
+ }
2721
+ )
2722
+ ] }),
2723
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2724
+ /* @__PURE__ */ l(P, { className: "flex items-center gap-1.5", children: [
2725
+ /* @__PURE__ */ n("span", { className: "w-1.5 h-1.5 rounded-full bg-red-500" }),
2726
+ "Title"
2727
+ ] }),
2728
+ /* @__PURE__ */ n(
2729
+ M,
2730
+ {
2731
+ value: d.title || "",
2732
+ onChange: (p) => C(p.target.value),
2733
+ onBlur: v,
2734
+ placeholder: "Property Title",
2735
+ "data-testid": "input-title-dialog",
2736
+ required: !0
2737
+ }
2738
+ ),
2739
+ !i && d.key && /* @__PURE__ */ l("p", { className: "text-xs text-muted-foreground font-mono", children: [
2740
+ "Key: ",
2741
+ d.key
2742
+ ] })
2743
+ ] }),
2744
+ i && /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2745
+ /* @__PURE__ */ n(P, { children: "Key" }),
2746
+ /* @__PURE__ */ n(
2747
+ M,
2748
+ {
2749
+ value: d.key,
2750
+ onChange: (p) => T(p.target.value),
2751
+ placeholder: "property_key",
2752
+ "data-testid": "input-key-dialog"
2753
+ }
2754
+ )
2755
+ ] }),
2756
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2757
+ /* @__PURE__ */ n(P, { children: "Description" }),
2758
+ /* @__PURE__ */ n(
2759
+ ye,
2760
+ {
2761
+ placeholder: "Optional description",
2762
+ value: d.description || "",
2763
+ onChange: (p) => b("description", p.target.value),
2764
+ rows: 2,
2765
+ "data-testid": "input-edit-description"
2766
+ }
2767
+ )
2768
+ ] }),
2769
+ d.type === "array" && /* @__PURE__ */ l("div", { className: "space-y-2 border-l-2 border-border pl-4 mt-2", children: [
2770
+ /* @__PURE__ */ l(P, { className: "font-semibold text-xs text-muted-foreground", children: [
2771
+ m.array,
2772
+ " Items"
2773
+ ] }),
2774
+ d.items ? /* @__PURE__ */ l("div", { className: "bg-muted/40 p-2 rounded", children: [
2775
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2776
+ /* @__PURE__ */ n(P, { children: "Item Type" }),
2777
+ /* @__PURE__ */ l(
2778
+ ze,
2779
+ {
2780
+ value: d.items.type,
2781
+ onValueChange: (p) => f({
2782
+ ...d,
2783
+ items: {
2784
+ ...d.items,
2785
+ type: p
2786
+ }
2787
+ }),
2788
+ children: [
2789
+ /* @__PURE__ */ n(le, { children: /* @__PURE__ */ n(Pe, {}) }),
2790
+ /* @__PURE__ */ l(de, { children: [
2791
+ /* @__PURE__ */ n(R, { value: "string", children: m.string }),
2792
+ /* @__PURE__ */ n(R, { value: "number", children: m.number }),
2793
+ /* @__PURE__ */ n(R, { value: "integer", children: m.integer }),
2794
+ /* @__PURE__ */ n(R, { value: "boolean", children: m.boolean }),
2795
+ /* @__PURE__ */ n(R, { value: "object", children: m.object }),
2796
+ /* @__PURE__ */ n(R, { value: "array", children: m.array }),
2797
+ /* @__PURE__ */ n(R, { value: "file", children: m.file }),
2798
+ /* @__PURE__ */ n(R, { value: "null", children: m.null })
2799
+ ] })
2800
+ ]
2801
+ }
2802
+ )
2803
+ ] }),
2804
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2805
+ /* @__PURE__ */ n(P, { children: "Item Title" }),
2806
+ /* @__PURE__ */ n(
2807
+ M,
2808
+ {
2809
+ value: d.items.title || "",
2810
+ onChange: (p) => f({
2811
+ ...d,
2812
+ items: {
2813
+ ...d.items,
2814
+ title: p.target.value
2815
+ }
2816
+ }),
2817
+ placeholder: "Item Title"
2818
+ }
2819
+ )
2820
+ ] }),
2821
+ /* @__PURE__ */ l(
2822
+ L,
2823
+ {
2824
+ variant: "ghost",
2825
+ size: "sm",
2826
+ className: "mt-2",
2827
+ onClick: () => f({ ...d, items: void 0 }),
2828
+ children: [
2829
+ "Remove ",
2830
+ m.array,
2831
+ " Item Schema"
2832
+ ]
2833
+ }
2834
+ )
2835
+ ] }) : /* @__PURE__ */ l(
2836
+ L,
2837
+ {
2838
+ variant: "outline",
2839
+ size: "sm",
2840
+ onClick: () => {
2841
+ f({
2842
+ ...d,
2843
+ items: {
2844
+ id: Date.now().toString() + Math.random(),
2845
+ key: "item",
2846
+ type: "string",
2847
+ required: !1
2848
+ }
2849
+ });
2850
+ },
2851
+ children: [
2852
+ "Add ",
2853
+ m.array,
2854
+ " Item Schema"
2855
+ ]
2856
+ }
2857
+ )
2858
+ ] }),
2859
+ !o && /* @__PURE__ */ l("div", { className: "flex items-center gap-2", children: [
2860
+ /* @__PURE__ */ n(
2861
+ ce,
2862
+ {
2863
+ id: "prop-required",
2864
+ checked: d.required,
2865
+ onCheckedChange: (p) => b("required", p),
2866
+ "data-testid": "checkbox-edit-required"
2867
+ }
2868
+ ),
2869
+ /* @__PURE__ */ n(P, { htmlFor: "prop-required", className: "cursor-pointer", children: "Required field" })
2870
+ ] }),
2871
+ d.type === "string" && /* @__PURE__ */ l("details", { className: "border rounded-md", children: [
2872
+ /* @__PURE__ */ n("summary", { className: "p-4 cursor-pointer hover:bg-accent/50 transition-colors", children: /* @__PURE__ */ l("h4", { className: "text-sm font-medium inline", children: [
2873
+ m.string,
2874
+ " Constraints"
2875
+ ] }) }),
2876
+ /* @__PURE__ */ l("div", { className: "space-y-4 p-4 pt-0", children: [
2877
+ /* @__PURE__ */ l("div", { className: "grid grid-cols-2 gap-4", children: [
2878
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2879
+ /* @__PURE__ */ n(P, { htmlFor: "min-length", children: "Minimum Length" }),
2880
+ /* @__PURE__ */ n(
2881
+ M,
2882
+ {
2883
+ id: "min-length",
2884
+ type: "number",
2885
+ placeholder: "0",
2886
+ value: d.minLength || "",
2887
+ onChange: (p) => u(
2888
+ "minLength",
2889
+ p.target.value ? parseInt(p.target.value) : void 0
2890
+ ),
2891
+ "data-testid": "input-edit-minlength"
2892
+ }
2893
+ )
2894
+ ] }),
2895
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2896
+ /* @__PURE__ */ n(P, { htmlFor: "max-length", children: "Maximum Length" }),
2897
+ /* @__PURE__ */ n(
2898
+ M,
2899
+ {
2900
+ id: "max-length",
2901
+ type: "number",
2902
+ placeholder: "∞",
2903
+ value: d.maxLength || "",
2904
+ onChange: (p) => u(
2905
+ "maxLength",
2906
+ p.target.value ? parseInt(p.target.value) : void 0
2907
+ ),
2908
+ "data-testid": "input-edit-maxlength"
2909
+ }
2910
+ )
2911
+ ] })
2912
+ ] }),
2913
+ c && /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2914
+ /* @__PURE__ */ n(P, { htmlFor: "pattern", children: "Pattern (regex)" }),
2915
+ /* @__PURE__ */ n(
2916
+ M,
2917
+ {
2918
+ id: "pattern",
2919
+ placeholder: "^[a-z]+$",
2920
+ value: d.pattern || "",
2921
+ onChange: (p) => u("pattern", p.target.value),
2922
+ className: "font-mono text-sm",
2923
+ "data-testid": "input-edit-pattern"
2924
+ }
2925
+ )
2926
+ ] }),
2927
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2928
+ /* @__PURE__ */ n(P, { children: "Enum Values" }),
2929
+ /* @__PURE__ */ n("div", { className: "space-y-2", children: [...d.enum || [], ""].map((p, j) => {
2930
+ var V;
2931
+ return /* @__PURE__ */ n(
2932
+ M,
2933
+ {
2934
+ placeholder: j === (((V = d.enum) == null ? void 0 : V.length) || 0) ? "Add new value..." : "Enum value",
2935
+ value: p,
2936
+ onChange: (W) => {
2937
+ const F = W.target.value, D = d.enum || [];
2938
+ if (j === D.length)
2939
+ F.trim() && u("enum", [
2940
+ ...D,
2941
+ F.trim()
2942
+ ]);
2943
+ else if (F.trim()) {
2944
+ const q = [...D];
2945
+ q[j] = F.trim(), u("enum", q);
2946
+ } else {
2947
+ const q = D.filter(
2948
+ (_, $) => $ !== j
2949
+ );
2950
+ u(
2951
+ "enum",
2952
+ q.length > 0 ? q : void 0
2953
+ );
2954
+ }
2955
+ },
2956
+ "data-testid": `input-edit-enum-${j}`
2957
+ },
2958
+ j
2959
+ );
2960
+ }) }),
2961
+ /* @__PURE__ */ n("p", { className: "text-xs text-muted-foreground", children: "Enter allowed values (empty fields will be removed)" })
2962
+ ] })
2963
+ ] })
2964
+ ] }),
2965
+ (d.type === "number" || d.type === "integer") && /* @__PURE__ */ l("details", { className: "border rounded-md", children: [
2966
+ /* @__PURE__ */ n("summary", { className: "p-4 cursor-pointer hover:bg-accent/50 transition-colors", children: /* @__PURE__ */ n("h4", { className: "text-sm font-medium inline", children: "Numeric Constraints" }) }),
2967
+ /* @__PURE__ */ n("div", { className: "space-y-4 p-4 pt-0", children: /* @__PURE__ */ l("div", { className: "grid grid-cols-2 gap-4", children: [
2968
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2969
+ /* @__PURE__ */ n(P, { htmlFor: "minimum", children: "Minimum Value" }),
2970
+ /* @__PURE__ */ n(
2971
+ M,
2972
+ {
2973
+ id: "minimum",
2974
+ type: "number",
2975
+ placeholder: "-∞",
2976
+ value: d.minimum ?? "",
2977
+ onChange: (p) => u(
2978
+ "minimum",
2979
+ p.target.value ? parseFloat(p.target.value) : void 0
2980
+ ),
2981
+ "data-testid": "input-edit-minimum"
2982
+ }
2983
+ )
2984
+ ] }),
2985
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
2986
+ /* @__PURE__ */ n(P, { htmlFor: "maximum", children: "Maximum Value" }),
2987
+ /* @__PURE__ */ n(
2988
+ M,
2989
+ {
2990
+ id: "maximum",
2991
+ type: "number",
2992
+ placeholder: "∞",
2993
+ value: d.maximum ?? "",
2994
+ onChange: (p) => u(
2995
+ "maximum",
2996
+ p.target.value ? parseFloat(p.target.value) : void 0
2997
+ ),
2998
+ "data-testid": "input-edit-maximum"
2999
+ }
3000
+ )
3001
+ ] })
3002
+ ] }) })
3003
+ ] }),
3004
+ d.type === "array" && /* @__PURE__ */ l("details", { className: "border rounded-md", children: [
3005
+ /* @__PURE__ */ n("summary", { className: "p-4 cursor-pointer hover:bg-accent/50 transition-colors", children: /* @__PURE__ */ l("h4", { className: "text-sm font-medium inline", children: [
3006
+ m.array,
3007
+ " Constraints"
3008
+ ] }) }),
3009
+ /* @__PURE__ */ l("div", { className: "space-y-4 p-4 pt-0", children: [
3010
+ /* @__PURE__ */ l("div", { className: "grid grid-cols-2 gap-4", children: [
3011
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
3012
+ /* @__PURE__ */ n(P, { htmlFor: "min-items", children: "Minimum Items" }),
3013
+ /* @__PURE__ */ n(
3014
+ M,
3015
+ {
3016
+ id: "min-items",
3017
+ type: "number",
3018
+ placeholder: "0",
3019
+ value: d.minItems || "",
3020
+ onChange: (p) => u(
3021
+ "minItems",
3022
+ p.target.value ? parseInt(p.target.value) : void 0
3023
+ ),
3024
+ "data-testid": "input-edit-minitems"
3025
+ }
3026
+ )
3027
+ ] }),
3028
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
3029
+ /* @__PURE__ */ n(P, { htmlFor: "max-items", children: "Maximum Items" }),
3030
+ /* @__PURE__ */ n(
3031
+ M,
3032
+ {
3033
+ id: "max-items",
3034
+ type: "number",
3035
+ placeholder: "∞",
3036
+ value: d.maxItems || "",
3037
+ onChange: (p) => u(
3038
+ "maxItems",
3039
+ p.target.value ? parseInt(p.target.value) : void 0
3040
+ ),
3041
+ "data-testid": "input-edit-maxitems"
3042
+ }
3043
+ )
3044
+ ] })
3045
+ ] }),
3046
+ /* @__PURE__ */ l("div", { className: "flex items-center gap-2", children: [
3047
+ /* @__PURE__ */ n(
3048
+ ce,
3049
+ {
3050
+ id: "unique-items",
3051
+ checked: d.uniqueItems || !1,
3052
+ onCheckedChange: (p) => u("uniqueItems", p),
3053
+ "data-testid": "checkbox-edit-unique"
3054
+ }
3055
+ ),
3056
+ /* @__PURE__ */ n(P, { htmlFor: "unique-items", className: "cursor-pointer", children: "All items must be unique" })
3057
+ ] })
3058
+ ] })
3059
+ ] })
3060
+ ] }),
3061
+ /* @__PURE__ */ l(Ue, { className: "px-6 py-4 border-t bg-background shrink-0", children: [
3062
+ /* @__PURE__ */ n(
3063
+ L,
3064
+ {
3065
+ variant: "outline",
3066
+ onClick: k,
3067
+ "data-testid": "button-cancel",
3068
+ children: "Cancel"
3069
+ }
3070
+ ),
3071
+ /* @__PURE__ */ n(
3072
+ L,
3073
+ {
3074
+ onClick: h,
3075
+ "data-testid": "button-save",
3076
+ disabled: !((w = d.title) != null && w.trim()),
3077
+ children: "Save Changes"
3078
+ }
3079
+ )
3080
+ ] })
3081
+ ]
3082
+ }
3083
+ ) });
3084
+ }
3085
+ const ve = () => `${Date.now()}-${Math.random()}`;
3086
+ function pe({
3087
+ property: e,
3088
+ onUpdate: r,
3089
+ onDelete: t,
3090
+ level: a = 1,
3091
+ isArrayItem: o = !1,
3092
+ showRegex: i = !1
3093
+ }) {
3094
+ const { getTypeLabel: s } = Ze(), [c, m] = E(!1), [d, f] = E(null), [C, v] = E(!1), [T, b] = E(!1), [u, h] = E(e.title || "");
3095
+ re(() => {
3096
+ T || h(e.title || "");
3097
+ }, [e.title, T]);
3098
+ const k = `h${Math.min(a, 6)}`, w = e.type === "object", p = w && e.children && e.children.length > 0, j = {
3099
+ 1: "text-xl",
3100
+ 2: "text-base",
3101
+ 3: "text-base",
3102
+ 4: "text-base",
3103
+ 5: "text-sm",
3104
+ 6: "text-sm"
3105
+ }[a] || "text-sm", V = (y, O) => {
3106
+ const z = e.children.map(
3107
+ (G) => G.id === y ? O : G
3108
+ );
3109
+ r({ ...e, children: z });
3110
+ }, W = (y) => {
3111
+ const O = e.children.filter((z) => z.id !== y);
3112
+ r({ ...e, children: O });
3113
+ }, F = () => {
3114
+ const y = {
3115
+ id: ve(),
3116
+ key: "",
3117
+ type: "string",
3118
+ required: !1
3119
+ };
3120
+ f(y), v(!0);
3121
+ }, D = (y) => {
3122
+ r({
3123
+ ...e,
3124
+ children: [...e.children || [], y]
3125
+ }), v(!1), f(null);
3126
+ }, q = () => {
3127
+ v(!1), f(null);
3128
+ }, _ = () => {
3129
+ const y = e.title || e.key || "";
3130
+ h(y), b(!0);
3131
+ }, $ = () => {
3132
+ const y = u.trim();
3133
+ if (!y) {
3134
+ h(e.title || ""), b(!1);
3135
+ return;
3136
+ }
3137
+ y !== e.title && r({ ...e, title: y }), b(!1);
3138
+ }, x = (y) => {
3139
+ y.key === "Enter" ? $() : y.key === "Escape" && (h(e.title || ""), b(!1));
3140
+ };
3141
+ return /* @__PURE__ */ l("div", { className: "group", children: [
3142
+ /* @__PURE__ */ l("div", { className: "flex gap-4 items-center rounded-md -mx-2 px-2 py-1 transition-colors hover:bg-accent/50", children: [
3143
+ /* @__PURE__ */ n("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ l("div", { className: "flex items-start gap-3", children: [
3144
+ !o && /* @__PURE__ */ n(
3145
+ "button",
3146
+ {
3147
+ onClick: () => r({ ...e, required: !e.required }),
3148
+ className: "shrink-0 transition-all hover:scale-110 mt-0.5",
3149
+ title: e.required ? "Required field - click to make optional" : "Optional field - click to make required",
3150
+ children: e.required ? /* @__PURE__ */ n("span", { className: "block w-4 h-4 rounded-full bg-primary" }) : /* @__PURE__ */ n("span", { className: "block w-4 h-4 rounded-full border border-dashed border-gray-400" })
3151
+ }
3152
+ ),
3153
+ T ? /* @__PURE__ */ n(
3154
+ M,
3155
+ {
3156
+ value: u,
3157
+ onChange: (y) => h(y.target.value),
3158
+ onBlur: $,
3159
+ onKeyDown: x,
3160
+ autoFocus: !0,
3161
+ className: j,
3162
+ placeholder: "Enter title"
3163
+ }
3164
+ ) : /* @__PURE__ */ l("div", { className: "flex gap-2 flex-wrap", children: [
3165
+ /* @__PURE__ */ l("div", { className: "flex items-start gap-2", children: [
3166
+ /* @__PURE__ */ n(
3167
+ k,
3168
+ {
3169
+ className: `${j} font-medium cursor-pointer hover:text-primary transition-colors leading-none`,
3170
+ onClick: _,
3171
+ children: e.title || e.key || /* @__PURE__ */ n("span", { className: "text-muted-foreground italic", children: "unnamed" })
3172
+ }
3173
+ ),
3174
+ /* @__PURE__ */ n(Qt, { children: /* @__PURE__ */ l(Yt, { children: [
3175
+ /* @__PURE__ */ n(er, { asChild: !0, children: /* @__PURE__ */ l("span", { children: [
3176
+ e.type === "string" && /* @__PURE__ */ n(it, { className: "w-5 h-5 text-muted-foreground" }),
3177
+ e.type === "number" && /* @__PURE__ */ n(Ce, { className: "w-5 h-5 text-muted-foreground" }),
3178
+ e.type === "integer" && /* @__PURE__ */ n(Ce, { className: "w-5 h-5 text-muted-foreground" }),
3179
+ e.type === "boolean" && /* @__PURE__ */ n(st, { className: "w-5 h-5 text-muted-foreground" }),
3180
+ e.type === "object" && /* @__PURE__ */ n(lt, { className: "w-5 h-5 text-muted-foreground" }),
3181
+ e.type === "array" && /* @__PURE__ */ n(dt, { className: "w-5 h-5 text-muted-foreground" }),
3182
+ e.type === "file" && /* @__PURE__ */ n(ct, { className: "w-5 h-5 text-muted-foreground" })
3183
+ ] }) }),
3184
+ /* @__PURE__ */ l(Be, { side: "top", children: [
3185
+ s(e.type),
3186
+ e.type === "array" && e.items ? ` of ${s(e.items.type)}` : ""
3187
+ ] })
3188
+ ] }) }),
3189
+ e.type === "object" && /* @__PURE__ */ n(
3190
+ L,
3191
+ {
3192
+ variant: "ghost",
3193
+ size: "icon",
3194
+ className: "opacity-0 group-hover:opacity-100 h-6 w-6",
3195
+ onClick: F,
3196
+ "data-testid": `button-add-child-${e.id}`,
3197
+ children: /* @__PURE__ */ n(te, { className: "!w-5 !h-5" })
3198
+ }
3199
+ )
3200
+ ] }),
3201
+ e.description && /* @__PURE__ */ n(
3202
+ "p",
3203
+ {
3204
+ className: "text-sm text-muted-foreground flex-1 min-w-[200px]",
3205
+ "data-testid": `text-description-${e.id}`,
3206
+ children: e.description
3207
+ }
3208
+ )
3209
+ ] })
3210
+ ] }) }),
3211
+ /* @__PURE__ */ l("div", { className: "flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity shrink-0", children: [
3212
+ /* @__PURE__ */ n(
3213
+ L,
3214
+ {
3215
+ variant: "ghost",
3216
+ size: "icon",
3217
+ className: "h-7 w-7",
3218
+ onClick: () => m(!0),
3219
+ "data-testid": `button-edit-${e.id}`,
3220
+ children: /* @__PURE__ */ n(mt, { className: "w-3 h-3" })
3221
+ }
3222
+ ),
3223
+ w && e.type !== "object" && /* @__PURE__ */ n(
3224
+ L,
3225
+ {
3226
+ variant: "ghost",
3227
+ size: "icon",
3228
+ className: "h-7 w-7",
3229
+ onClick: F,
3230
+ "data-testid": `button-add-child-${e.id}`,
3231
+ children: /* @__PURE__ */ n(te, { className: "w-3 h-3" })
3232
+ }
3233
+ ),
3234
+ /* @__PURE__ */ n(
3235
+ L,
3236
+ {
3237
+ variant: "ghost",
3238
+ size: "icon",
3239
+ className: "h-7 w-7 text-muted-foreground hover:text-destructive",
3240
+ onClick: t,
3241
+ "data-testid": `button-delete-${e.id}`,
3242
+ children: /* @__PURE__ */ n(Re, { className: "w-3 h-3" })
3243
+ }
3244
+ )
3245
+ ] })
3246
+ ] }),
3247
+ p && /* @__PURE__ */ n(
3248
+ "div",
3249
+ {
3250
+ className: a === 1 ? "ml-6 mt-1 border-l-2 border-border pl-6" : "ml-4 mt-1 border-l border-border pl-4",
3251
+ children: e.children.map((y) => /* @__PURE__ */ n(
3252
+ pe,
3253
+ {
3254
+ property: y,
3255
+ onUpdate: (O) => V(y.id, O),
3256
+ onDelete: () => W(y.id),
3257
+ level: a + 1,
3258
+ showRegex: i
3259
+ },
3260
+ y.id
3261
+ ))
3262
+ }
3263
+ ),
3264
+ e.type === "array" && e.items && /* @__PURE__ */ l(
3265
+ "div",
3266
+ {
3267
+ className: a === 1 ? "ml-6 mt-1 border-l-2 border-border pl-6" : "ml-4 mt-1 border-l border-border pl-4",
3268
+ children: [
3269
+ /* @__PURE__ */ l("div", { className: "mb-2 text-xs text-muted-foreground font-semibold uppercase", children: [
3270
+ s("array"),
3271
+ " Items"
3272
+ ] }),
3273
+ /* @__PURE__ */ n(
3274
+ pe,
3275
+ {
3276
+ property: e.items,
3277
+ onUpdate: (y) => r({ ...e, items: y }),
3278
+ onDelete: () => r({ ...e, items: void 0 }),
3279
+ level: a + 1,
3280
+ isArrayItem: !0,
3281
+ showRegex: i
3282
+ }
3283
+ )
3284
+ ]
3285
+ }
3286
+ ),
3287
+ /* @__PURE__ */ n(
3288
+ ue,
3289
+ {
3290
+ property: e,
3291
+ open: c,
3292
+ onOpenChange: m,
3293
+ onUpdate: r,
3294
+ isArrayItem: o,
3295
+ isNewProperty: !1,
3296
+ showRegex: i
3297
+ }
3298
+ ),
3299
+ C && d && /* @__PURE__ */ n(
3300
+ ue,
3301
+ {
3302
+ property: d,
3303
+ open: C,
3304
+ isNewProperty: !0,
3305
+ onOpenChange: (y) => {
3306
+ y || q();
3307
+ },
3308
+ onUpdate: D,
3309
+ showRegex: i
3310
+ }
3311
+ )
3312
+ ] });
3313
+ }
3314
+ const xe = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
3315
+ "div",
3316
+ {
3317
+ ref: t,
3318
+ className: N(
3319
+ "shadcn-card rounded-xl border bg-card border-card-border text-card-foreground shadow-sm",
3320
+ e
3321
+ ),
3322
+ ...r
3323
+ }
3324
+ ));
3325
+ xe.displayName = "Card";
3326
+ const cr = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
3327
+ "div",
3328
+ {
3329
+ ref: t,
3330
+ className: N("flex flex-col space-y-1.5 p-6", e),
3331
+ ...r
3332
+ }
3333
+ ));
3334
+ cr.displayName = "CardHeader";
3335
+ const mr = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
3336
+ "div",
3337
+ {
3338
+ ref: t,
3339
+ className: N(
3340
+ "text-2xl font-semibold leading-none tracking-tight",
3341
+ e
3342
+ ),
3343
+ ...r
3344
+ }
3345
+ ));
3346
+ mr.displayName = "CardTitle";
3347
+ const ur = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
3348
+ "div",
3349
+ {
3350
+ ref: t,
3351
+ className: N("text-sm text-muted-foreground", e),
3352
+ ...r
3353
+ }
3354
+ ));
3355
+ ur.displayName = "CardDescription";
3356
+ const pr = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n("div", { ref: t, className: N("p-6 pt-0", e), ...r }));
3357
+ pr.displayName = "CardContent";
3358
+ const hr = I.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ n(
3359
+ "div",
3360
+ {
3361
+ ref: t,
3362
+ className: N("flex items-center p-6 pt-0", e),
3363
+ ...r
3364
+ }
3365
+ ));
3366
+ hr.displayName = "CardFooter";
3367
+ const fr = () => new Promise((e, r) => {
3368
+ const t = document.createElement("input");
3369
+ t.type = "file", t.accept = ".json", t.onchange = (a) => {
3370
+ var s;
3371
+ const o = (s = a.target.files) == null ? void 0 : s[0];
3372
+ if (!o) {
3373
+ r(new Error("No file selected"));
3374
+ return;
3375
+ }
3376
+ const i = new FileReader();
3377
+ i.onload = (c) => {
3378
+ var m;
3379
+ try {
3380
+ const d = JSON.parse((m = c.target) == null ? void 0 : m.result);
3381
+ e(d);
3382
+ } catch {
3383
+ r(new Error("Invalid JSON file"));
3384
+ }
3385
+ }, i.onerror = () => r(new Error("Failed to read file")), i.readAsText(o);
3386
+ }, t.click();
3387
+ }), Qe = (e, r = "schema.json") => {
3388
+ const t = JSON.stringify(e, null, 2), a = new Blob([t], { type: "application/json" }), o = URL.createObjectURL(a), i = document.createElement("a");
3389
+ i.href = o, i.download = r, document.body.appendChild(i), i.click(), document.body.removeChild(i), URL.revokeObjectURL(o);
3390
+ };
3391
+ function gr({ schema: e }) {
3392
+ const [r, t] = E(!1), a = JSON.stringify(e, null, 2);
3393
+ return /* @__PURE__ */ l("div", { className: "h-full flex flex-col", children: [
3394
+ /* @__PURE__ */ l("div", { className: "flex items-center justify-between p-4 border-b", children: [
3395
+ /* @__PURE__ */ n("h2", { className: "text-sm font-medium", children: "JSON Schema Output" }),
3396
+ /* @__PURE__ */ l("div", { className: "flex gap-2", children: [
3397
+ /* @__PURE__ */ n(
3398
+ L,
3399
+ {
3400
+ variant: "outline",
3401
+ size: "sm",
3402
+ onClick: async () => {
3403
+ await navigator.clipboard.writeText(a), t(!0), setTimeout(() => t(!1), 2e3);
3404
+ },
3405
+ "data-testid": "button-copy",
3406
+ children: r ? /* @__PURE__ */ n(ut, { className: "w-4 h-4" }) : /* @__PURE__ */ n(pt, { className: "w-4 h-4" })
3407
+ }
3408
+ ),
3409
+ /* @__PURE__ */ n(
3410
+ L,
3411
+ {
3412
+ variant: "outline",
3413
+ size: "sm",
3414
+ onClick: () => {
3415
+ Qe(e, "schema.json");
3416
+ },
3417
+ "data-testid": "button-download",
3418
+ children: /* @__PURE__ */ n(ht, { className: "w-4 h-4" })
3419
+ }
3420
+ )
3421
+ ] })
3422
+ ] }),
3423
+ /* @__PURE__ */ n("div", { className: "flex-1 overflow-auto", children: /* @__PURE__ */ n(xe, { className: "m-4 bg-muted/30", children: /* @__PURE__ */ n(
3424
+ "pre",
3425
+ {
3426
+ className: "p-6 text-xs font-mono overflow-auto",
3427
+ "data-testid": "text-json-output",
3428
+ children: /* @__PURE__ */ n("code", { children: a })
3429
+ }
3430
+ ) }) })
3431
+ ] });
3432
+ }
3433
+ function br({
3434
+ title: e,
3435
+ description: r,
3436
+ version: t,
3437
+ onUpdate: a
3438
+ }) {
3439
+ const [o, i] = E(!1);
3440
+ return /* @__PURE__ */ l(xe, { className: "p-4", children: [
3441
+ /* @__PURE__ */ l(
3442
+ L,
3443
+ {
3444
+ variant: "ghost",
3445
+ onClick: () => i(!o),
3446
+ className: "w-full justify-between px-2 h-auto hover:bg-transparent",
3447
+ "data-testid": "button-toggle-metadata",
3448
+ children: [
3449
+ /* @__PURE__ */ n("h3", { className: "text-sm font-medium", children: "Schema Metadata" }),
3450
+ o ? /* @__PURE__ */ n(ge, { className: "w-4 h-4" }) : /* @__PURE__ */ n(ft, { className: "w-4 h-4" })
3451
+ ]
3452
+ }
3453
+ ),
3454
+ o && /* @__PURE__ */ l("div", { className: "mt-4 space-y-4", children: [
3455
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
3456
+ /* @__PURE__ */ n(
3457
+ P,
3458
+ {
3459
+ htmlFor: "schema-title",
3460
+ className: "text-xs text-muted-foreground",
3461
+ children: "Title"
3462
+ }
3463
+ ),
3464
+ /* @__PURE__ */ n(
3465
+ M,
3466
+ {
3467
+ id: "schema-title",
3468
+ placeholder: "My Schema",
3469
+ value: e,
3470
+ onChange: (s) => a("title", s.target.value),
3471
+ "data-testid": "input-title"
3472
+ }
3473
+ )
3474
+ ] }),
3475
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
3476
+ /* @__PURE__ */ n(
3477
+ P,
3478
+ {
3479
+ htmlFor: "schema-description",
3480
+ className: "text-xs text-muted-foreground",
3481
+ children: "Description"
3482
+ }
3483
+ ),
3484
+ /* @__PURE__ */ n(
3485
+ ye,
3486
+ {
3487
+ id: "schema-description",
3488
+ placeholder: "Describe your schema...",
3489
+ value: r,
3490
+ onChange: (s) => a("description", s.target.value),
3491
+ className: "resize-none",
3492
+ rows: 3,
3493
+ "data-testid": "input-schema-description"
3494
+ }
3495
+ )
3496
+ ] }),
3497
+ /* @__PURE__ */ l("div", { className: "space-y-2", children: [
3498
+ /* @__PURE__ */ n(
3499
+ P,
3500
+ {
3501
+ htmlFor: "schema-version",
3502
+ className: "text-xs text-muted-foreground",
3503
+ children: "Version"
3504
+ }
3505
+ ),
3506
+ /* @__PURE__ */ n(
3507
+ M,
3508
+ {
3509
+ id: "schema-version",
3510
+ placeholder: "1.0.0",
3511
+ value: t,
3512
+ onChange: (s) => a("version", s.target.value),
3513
+ "data-testid": "input-version"
3514
+ }
3515
+ )
3516
+ ] })
3517
+ ] })
3518
+ ] });
3519
+ }
3520
+ const yr = (e, r, t = !0) => {
3521
+ const a = {
3522
+ type: "object"
3523
+ };
3524
+ t && r && (r.title && (a.title = r.title), r.description && (a.description = r.description));
3525
+ const o = he(e);
3526
+ Object.keys(o).length > 0 && (a.properties = o);
3527
+ const i = e.filter((s) => s.required && s.key).map((s) => s.key);
3528
+ return i.length > 0 && (a.required = i), a;
3529
+ }, he = (e) => {
3530
+ const r = {};
3531
+ return e.forEach((t) => {
3532
+ if (!t.key) return;
3533
+ const o = { type: t.type === "file" ? "string" : t.type };
3534
+ if (t.title && (o.title = t.title), t.description && (o.description = t.description), t.type === "file" && (o.format = "filename"), t.type === "string" && (t.minLength !== void 0 && (o.minLength = t.minLength), t.maxLength !== void 0 && (o.maxLength = t.maxLength), t.pattern && (o.pattern = t.pattern), t.enum && t.enum.length > 0 && (o.enum = t.enum)), (t.type === "number" || t.type === "integer") && (t.minimum !== void 0 && (o.minimum = t.minimum), t.maximum !== void 0 && (o.maximum = t.maximum)), t.type === "array" && (t.minItems !== void 0 && (o.minItems = t.minItems), t.maxItems !== void 0 && (o.maxItems = t.maxItems), t.uniqueItems && (o.uniqueItems = t.uniqueItems), t.items && (o.items = he([t.items])[t.items.key] || {
3535
+ type: t.items.type
3536
+ })), t.type === "object" && t.children && t.children.length > 0) {
3537
+ o.properties = he(t.children);
3538
+ const i = t.children.filter((s) => s.required && s.key).map((s) => s.key);
3539
+ i.length > 0 && (o.required = i);
3540
+ }
3541
+ r[t.key] = o;
3542
+ }), r;
3543
+ }, Ae = (e) => {
3544
+ const r = {
3545
+ properties: []
3546
+ };
3547
+ return (e.title || e.description) && (r.metadata = {
3548
+ title: typeof e.title == "string" ? e.title : "",
3549
+ description: typeof e.description == "string" ? e.description : "",
3550
+ version: "1.0.0"
3551
+ // Default version
3552
+ }), e.properties && typeof e.properties == "object" && (r.properties = fe(
3553
+ e.properties,
3554
+ Array.isArray(e.required) ? e.required : []
3555
+ )), r;
3556
+ }, fe = (e, r = []) => e ? Object.entries(e).filter(([, t]) => typeof t == "object").map(([t, a]) => {
3557
+ const o = a;
3558
+ let i = typeof o.type == "string" ? o.type : "string";
3559
+ i === "string" && o.format === "filename" && (i = "file");
3560
+ const s = {
3561
+ id: ve(),
3562
+ key: t,
3563
+ title: typeof o.title == "string" ? o.title : void 0,
3564
+ type: i,
3565
+ description: typeof o.description == "string" ? o.description : void 0,
3566
+ required: r.includes(t)
3567
+ };
3568
+ return o.minLength !== void 0 && (s.minLength = o.minLength), o.maxLength !== void 0 && (s.maxLength = o.maxLength), o.pattern && (s.pattern = o.pattern), o.enum && Array.isArray(o.enum) && (s.enum = o.enum), o.minimum !== void 0 && (s.minimum = o.minimum), o.maximum !== void 0 && (s.maximum = o.maximum), o.minItems !== void 0 && (s.minItems = o.minItems), o.maxItems !== void 0 && (s.maxItems = o.maxItems), o.uniqueItems && (s.uniqueItems = o.uniqueItems), s.type === "array" && o.items && typeof o.items == "object" && !Array.isArray(o.items) && (s.items = fe(
3569
+ { item: o.items },
3570
+ []
3571
+ ).find((c) => c.key === "item")), o.properties && typeof o.properties == "object" && (s.children = fe(
3572
+ o.properties,
3573
+ Array.isArray(o.required) ? o.required : []
3574
+ )), s;
3575
+ }) : [], vr = (e = !0) => {
3576
+ const [r, t] = E([]), [a, o] = E({
3577
+ title: "",
3578
+ description: "",
3579
+ version: ""
3580
+ }), i = rt(
3581
+ () => yr(r, a, e),
3582
+ [r, a, e]
3583
+ );
3584
+ return {
3585
+ properties: r,
3586
+ metadata: a,
3587
+ schema: i,
3588
+ addProperty: () => ({
3589
+ id: ve(),
3590
+ key: "",
3591
+ type: "string",
3592
+ required: !1
3593
+ }),
3594
+ updateProperty: (b, u) => {
3595
+ t((h) => h.some((w) => w.id === b) ? h.map((w) => w.id === b ? u : w) : [...h, u]);
3596
+ },
3597
+ deleteProperty: (b) => {
3598
+ t((u) => u.filter((h) => h.id !== b));
3599
+ },
3600
+ clearAll: () => {
3601
+ t([]), o({ title: "", description: "", version: "" });
3602
+ },
3603
+ updateMetadata: (b, u) => {
3604
+ o((h) => ({ ...h, [b]: u }));
3605
+ },
3606
+ importSchema: async () => {
3607
+ const b = await fr(), u = Ae(b);
3608
+ t(u.properties), u.metadata && e && o(u.metadata);
3609
+ },
3610
+ downloadSchema: () => {
3611
+ Qe(i, "schema.json");
3612
+ },
3613
+ loadSchema: (b) => {
3614
+ const u = Ae(b);
3615
+ t(u.properties), u.metadata && e && o(u.metadata);
3616
+ }
3617
+ };
3618
+ };
3619
+ function xr() {
3620
+ const [e, r] = E("light");
3621
+ return re(() => {
3622
+ const o = localStorage.getItem("theme") || (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
3623
+ r(o), document.documentElement.classList.toggle("dark", o === "dark");
3624
+ }, []), /* @__PURE__ */ n(
3625
+ L,
3626
+ {
3627
+ variant: "ghost",
3628
+ size: "icon",
3629
+ onClick: () => {
3630
+ const a = e === "light" ? "dark" : "light";
3631
+ r(a), localStorage.setItem("theme", a), document.documentElement.classList.toggle("dark", a === "dark");
3632
+ },
3633
+ "data-testid": "button-theme-toggle",
3634
+ children: e === "light" ? /* @__PURE__ */ n(gt, { className: "w-4 h-4" }) : /* @__PURE__ */ n(bt, { className: "w-4 h-4" })
3635
+ }
3636
+ );
3637
+ }
3638
+ function Sr({
3639
+ initialSchema: e,
3640
+ onSchemaChange: r,
3641
+ showMetadata: t = !1,
3642
+ showImport: a = !0,
3643
+ showClear: o = !0,
3644
+ showOutput: i = !0,
3645
+ showHeader: s = !0,
3646
+ className: c = "h-screen",
3647
+ showSummary: m = !1,
3648
+ typeLabels: d,
3649
+ propertyLabel: f = { singular: "property", plural: "properties" },
3650
+ showRegex: C = !1
3651
+ }) {
3652
+ const [v, T] = E(null), [b, u] = E(!1), {
3653
+ properties: h,
3654
+ metadata: k,
3655
+ schema: w,
3656
+ addProperty: p,
3657
+ updateProperty: j,
3658
+ deleteProperty: V,
3659
+ clearAll: W,
3660
+ updateMetadata: F,
3661
+ importSchema: D,
3662
+ loadSchema: q
3663
+ } = vr(t);
3664
+ re(() => {
3665
+ r && r(w);
3666
+ }, [w]), re(() => {
3667
+ e && q(e);
3668
+ }, [e]);
3669
+ const _ = () => {
3670
+ const z = p();
3671
+ T(z), u(!0);
3672
+ }, $ = (z) => {
3673
+ j(z.id, z), u(!1), T(null);
3674
+ }, x = () => {
3675
+ u(!1), T(null);
3676
+ }, y = () => {
3677
+ W();
3678
+ }, O = async () => {
3679
+ await D();
3680
+ };
3681
+ return /* @__PURE__ */ n(dr, { customLabels: d, children: /* @__PURE__ */ l("div", { className: `${c} flex flex-col`, children: [
3682
+ s && /* @__PURE__ */ n("header", { className: "h-16 border-b flex items-center justify-between px-6", children: /* @__PURE__ */ l("div", { className: "flex items-center gap-3", children: [
3683
+ a && /* @__PURE__ */ n(
3684
+ L,
3685
+ {
3686
+ variant: "outline",
3687
+ size: "sm",
3688
+ onClick: O,
3689
+ "data-testid": "button-import",
3690
+ children: /* @__PURE__ */ n(yt, { className: "w-4 h-4" })
3691
+ }
3692
+ ),
3693
+ o && /* @__PURE__ */ n(
3694
+ L,
3695
+ {
3696
+ variant: "outline",
3697
+ size: "sm",
3698
+ onClick: y,
3699
+ disabled: h.length === 0,
3700
+ "data-testid": "button-clear",
3701
+ children: /* @__PURE__ */ n(Re, { className: "w-4 h-4" })
3702
+ }
3703
+ ),
3704
+ /* @__PURE__ */ n(xr, {})
3705
+ ] }) }),
3706
+ /* @__PURE__ */ l("div", { className: "flex-1 flex overflow-hidden", children: [
3707
+ /* @__PURE__ */ n("div", { className: i ? "w-3/5 border-r" : "w-full", children: /* @__PURE__ */ l("div", { className: "h-full overflow-auto p-6 space-y-4", children: [
3708
+ t && /* @__PURE__ */ n(
3709
+ br,
3710
+ {
3711
+ title: k.title,
3712
+ description: k.description,
3713
+ version: k.version,
3714
+ onUpdate: (z, G) => F(z, G)
3715
+ }
3716
+ ),
3717
+ h.length === 0 ? /* @__PURE__ */ l("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [
3718
+ /* @__PURE__ */ n("div", { className: "w-16 h-16 rounded-full bg-muted flex items-center justify-center mb-4", children: /* @__PURE__ */ n(te, { className: "w-8 h-8 text-muted-foreground" }) }),
3719
+ /* @__PURE__ */ l("h2", { className: "text-lg font-medium mb-2", children: [
3720
+ "No ",
3721
+ f.plural,
3722
+ " yet"
3723
+ ] }),
3724
+ /* @__PURE__ */ l("p", { className: "text-sm text-muted-foreground mb-6 max-w-sm", children: [
3725
+ "Start building your JSON schema by adding your first",
3726
+ " ",
3727
+ f.singular
3728
+ ] }),
3729
+ /* @__PURE__ */ l(L, { onClick: _, "data-testid": "button-add-first", children: [
3730
+ /* @__PURE__ */ n(te, { className: "w-4 h-4 mr-2" }),
3731
+ "Add ",
3732
+ f.singular
3733
+ ] })
3734
+ ] }) : /* @__PURE__ */ l(Ye, { children: [
3735
+ /* @__PURE__ */ n("div", { className: "space-y-1", children: h.map((z) => /* @__PURE__ */ n(
3736
+ pe,
3737
+ {
3738
+ property: z,
3739
+ onUpdate: (G) => j(z.id, G),
3740
+ onDelete: () => V(z.id),
3741
+ showRegex: C
3742
+ },
3743
+ z.id
3744
+ )) }),
3745
+ /* @__PURE__ */ n("div", { className: "pt-6", children: /* @__PURE__ */ l(
3746
+ L,
3747
+ {
3748
+ onClick: _,
3749
+ className: "w-full",
3750
+ variant: "outline",
3751
+ "data-testid": "button-add-property",
3752
+ children: [
3753
+ /* @__PURE__ */ n(te, { className: "w-4 h-4 mr-2" }),
3754
+ "Add ",
3755
+ f.singular
3756
+ ]
3757
+ }
3758
+ ) }),
3759
+ m && /* @__PURE__ */ l("div", { className: "pt-4 border-t flex items-center justify-between text-sm text-muted-foreground", children: [
3760
+ /* @__PURE__ */ l("span", { children: [
3761
+ h.length,
3762
+ " ",
3763
+ h.length === 1 ? f.singular : f.plural
3764
+ ] }),
3765
+ /* @__PURE__ */ l("span", { children: [
3766
+ h.filter((z) => z.required).length,
3767
+ " required"
3768
+ ] })
3769
+ ] })
3770
+ ] })
3771
+ ] }) }),
3772
+ i && /* @__PURE__ */ n("div", { className: "w-2/5", children: /* @__PURE__ */ n(gr, { schema: w }) })
3773
+ ] }),
3774
+ b && v && /* @__PURE__ */ n(
3775
+ ue,
3776
+ {
3777
+ property: v,
3778
+ open: b,
3779
+ isNewProperty: !0,
3780
+ onOpenChange: (z) => {
3781
+ z || x();
3782
+ },
3783
+ propertyLabel: f,
3784
+ onUpdate: $,
3785
+ showRegex: C
3786
+ }
3787
+ )
3788
+ ] }) });
3789
+ }
3790
+ export {
3791
+ gr as JsonOutput,
3792
+ Sr as JsonSchemaBuilder,
3793
+ pe as PropertyDocument,
3794
+ ue as PropertyEditDialog,
3795
+ br as SchemaMetadataComponent,
3796
+ Qe as downloadJsonFile,
3797
+ yr as generateSchema,
3798
+ fr as importJsonFile,
3799
+ Ae as parseSchema,
3800
+ lr as usePropertyEditor,
3801
+ vr as useSchemaBuilder
3802
+ };
3803
+ //# sourceMappingURL=index.js.map