@nerds-with-charisma/revit-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,3107 @@
1
+ "use client";
2
+
3
+ // src/components/button.tsx
4
+ import { Slot } from "@radix-ui/react-slot";
5
+ import { cva } from "class-variance-authority";
6
+
7
+ // src/lib/utils.ts
8
+ import { clsx } from "clsx";
9
+ import { twMerge } from "tailwind-merge";
10
+ var cn = (...inputs) => {
11
+ return twMerge(clsx(inputs));
12
+ };
13
+
14
+ // src/theme/motion.ts
15
+ var motion = {
16
+ surface: "transition-[transform,color,background-color,border-color,box-shadow,opacity] duration-200 ease-out"
17
+ };
18
+
19
+ // src/components/button.tsx
20
+ import { jsx } from "react/jsx-runtime";
21
+ var buttonVariants = cva(
22
+ `inline-flex items-center justify-center gap-2 whitespace-nowrap font-sans text-sm font-semibold uppercase tracking-[0.12em] ${motion.surface} hover:scale-[1.02] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0`,
23
+ {
24
+ variants: {
25
+ variant: {
26
+ default: "rounded-pill border-2 border-primary bg-primary text-primary-foreground shadow-[0_8px_12px_6px_rgba(0,0,0,0.07)] hover:bg-primary/90 focus-visible:ring-brand-off-black focus-visible:ring-offset-primary",
27
+ secondary: "rounded-pill border-2 border-secondary bg-secondary text-secondary-foreground shadow-[0_12px_24px_rgba(0,0,0,0.07)] hover:bg-secondary/90",
28
+ outline: "rounded-pill border-2 border-border bg-card text-card-foreground shadow-[0_14px_22px_rgba(0,0,0,0.03)] hover:border-primary hover:bg-primary/25",
29
+ ghost: "rounded-pill hover:bg-accent hover:text-accent-foreground",
30
+ link: "rounded-none tracking-normal normal-case underline-offset-4 hover:underline",
31
+ destructive: "rounded-pill border-2 border-destructive bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90"
32
+ },
33
+ size: {
34
+ default: "px-3.5 py-2 text-[11px] md:px-4 md:text-[12px]",
35
+ sm: "px-3 py-1.5 text-[10px]",
36
+ lg: "min-w-[10rem] px-6 py-3 text-sm sm:min-w-[12rem]",
37
+ icon: "size-9 rounded-pill p-0"
38
+ }
39
+ },
40
+ defaultVariants: {
41
+ variant: "default",
42
+ size: "default"
43
+ }
44
+ }
45
+ );
46
+ var Button = ({ className, variant, size, asChild = false, ...props }) => {
47
+ const Comp = asChild ? Slot : "button";
48
+ return /* @__PURE__ */ jsx(
49
+ Comp,
50
+ {
51
+ "data-id": "Button",
52
+ "data-slot": "button",
53
+ className: cn(buttonVariants({ variant, size }), className),
54
+ ...props
55
+ }
56
+ );
57
+ };
58
+
59
+ // src/components/input.tsx
60
+ import { cva as cva2 } from "class-variance-authority";
61
+
62
+ // src/theme/field.ts
63
+ var fieldSurface = `border border-border bg-card font-sans text-foreground outline-none ${motion.surface} placeholder:text-muted-foreground hover:border-primary focus-visible:border-primary focus-visible:shadow-[0_0_0_3px_rgba(255,229,0,0.28)] disabled:cursor-not-allowed disabled:opacity-50`;
64
+
65
+ // src/components/input.tsx
66
+ import { jsx as jsx2 } from "react/jsx-runtime";
67
+ var inputVariants = cva2(`w-full ${fieldSurface} file:border-0 file:bg-transparent file:text-sm file:font-medium`, {
68
+ variants: {
69
+ variant: {
70
+ default: "rounded-md",
71
+ pill: "rounded-pill",
72
+ filled: "rounded-md bg-muted"
73
+ },
74
+ size: {
75
+ default: "h-12 px-5 py-3 text-base",
76
+ sm: "h-9 px-3 py-1 text-sm",
77
+ md: "h-11 px-4 py-2 text-base md:text-sm"
78
+ }
79
+ },
80
+ defaultVariants: {
81
+ variant: "default",
82
+ size: "default"
83
+ }
84
+ });
85
+ var Input = ({ className, type, variant, size, ...props }) => {
86
+ return /* @__PURE__ */ jsx2(
87
+ "input",
88
+ {
89
+ "data-id": "Input",
90
+ "data-slot": "input",
91
+ type,
92
+ className: cn(inputVariants({ variant, size }), className),
93
+ ...props
94
+ }
95
+ );
96
+ };
97
+
98
+ // src/components/card.tsx
99
+ import { cva as cva3 } from "class-variance-authority";
100
+ import { jsx as jsx3 } from "react/jsx-runtime";
101
+ var cardVariants = cva3(`font-sans text-card-foreground ${motion.surface}`, {
102
+ variants: {
103
+ variant: {
104
+ default: "rounded-lg border border-border bg-card shadow-[0_18px_40px_rgba(0,0,0,0.04)]",
105
+ elevated: "rounded-xl bg-card shadow-[0_24px_48px_rgba(0,0,0,0.12)]",
106
+ frost: "rounded-lg border border-white/55 bg-white/0 shadow-[0_1px_0_rgba(255,255,255,0.2)_inset,0_12px_40px_rgba(0,0,0,0.04)] backdrop-blur-xl backdrop-saturate-150",
107
+ outline: "rounded-lg border border-border bg-transparent shadow-none"
108
+ },
109
+ size: {
110
+ sm: "[&_[data-slot=card-header]]:p-4 [&_[data-slot=card-content]]:px-4 [&_[data-slot=card-content]]:pb-4 [&_[data-slot=card-footer]]:p-4 [&_[data-slot=card-footer]]:pt-0",
111
+ default: "",
112
+ lg: "[&_[data-slot=card-header]]:p-8 [&_[data-slot=card-content]]:px-8 [&_[data-slot=card-content]]:pb-8 [&_[data-slot=card-footer]]:p-8 [&_[data-slot=card-footer]]:pt-0"
113
+ }
114
+ },
115
+ defaultVariants: {
116
+ variant: "default",
117
+ size: "default"
118
+ }
119
+ });
120
+ var Card = ({ className, variant, size, ...props }) => {
121
+ return /* @__PURE__ */ jsx3(
122
+ "div",
123
+ {
124
+ "data-id": "Card",
125
+ "data-slot": "card",
126
+ className: cn(cardVariants({ variant, size }), className),
127
+ ...props
128
+ }
129
+ );
130
+ };
131
+
132
+ // src/components/card-header.tsx
133
+ import { jsx as jsx4 } from "react/jsx-runtime";
134
+ var CardHeader = ({ className, ...props }) => {
135
+ return /* @__PURE__ */ jsx4(
136
+ "div",
137
+ {
138
+ "data-id": "CardHeader",
139
+ "data-slot": "card-header",
140
+ className: cn("flex flex-col gap-1.5 p-6", className),
141
+ ...props
142
+ }
143
+ );
144
+ };
145
+
146
+ // src/components/card-title.tsx
147
+ import { jsx as jsx5 } from "react/jsx-runtime";
148
+ var CardTitle = ({ className, ...props }) => {
149
+ return /* @__PURE__ */ jsx5(
150
+ "h3",
151
+ {
152
+ "data-id": "CardTitle",
153
+ "data-slot": "card-title",
154
+ className: cn("font-sans text-xl font-semibold leading-none tracking-tight", className),
155
+ ...props
156
+ }
157
+ );
158
+ };
159
+
160
+ // src/components/card-description.tsx
161
+ import { jsx as jsx6 } from "react/jsx-runtime";
162
+ var CardDescription = ({ className, ...props }) => {
163
+ return /* @__PURE__ */ jsx6(
164
+ "p",
165
+ {
166
+ "data-id": "CardDescription",
167
+ "data-slot": "card-description",
168
+ className: cn("text-sm text-muted-foreground", className),
169
+ ...props
170
+ }
171
+ );
172
+ };
173
+
174
+ // src/components/card-content.tsx
175
+ import { jsx as jsx7 } from "react/jsx-runtime";
176
+ var CardContent = ({ className, ...props }) => {
177
+ return /* @__PURE__ */ jsx7(
178
+ "div",
179
+ {
180
+ "data-id": "CardContent",
181
+ "data-slot": "card-content",
182
+ className: cn("p-6 pt-0", className),
183
+ ...props
184
+ }
185
+ );
186
+ };
187
+
188
+ // src/components/card-footer.tsx
189
+ import { jsx as jsx8 } from "react/jsx-runtime";
190
+ var CardFooter = ({ className, ...props }) => {
191
+ return /* @__PURE__ */ jsx8(
192
+ "div",
193
+ {
194
+ "data-id": "CardFooter",
195
+ "data-slot": "card-footer",
196
+ className: cn("flex items-center gap-2 p-6 pt-0", className),
197
+ ...props
198
+ }
199
+ );
200
+ };
201
+
202
+ // src/components/select.tsx
203
+ import * as SelectPrimitive from "@radix-ui/react-select";
204
+ var Select = SelectPrimitive.Root;
205
+
206
+ // src/components/select-group.tsx
207
+ import * as SelectPrimitive2 from "@radix-ui/react-select";
208
+ var SelectGroup = SelectPrimitive2.Group;
209
+
210
+ // src/components/select-value.tsx
211
+ import * as SelectPrimitive3 from "@radix-ui/react-select";
212
+ var SelectValue = SelectPrimitive3.Value;
213
+
214
+ // src/components/select-trigger.tsx
215
+ import * as SelectPrimitive4 from "@radix-ui/react-select";
216
+ import { cva as cva4 } from "class-variance-authority";
217
+ import { ChevronDown } from "lucide-react";
218
+ import { jsx as jsx9, jsxs } from "react/jsx-runtime";
219
+ var selectTriggerVariants = cva4(
220
+ `flex w-full items-center justify-between gap-2 ${fieldSurface} data-[placeholder]:text-muted-foreground [&_svg]:size-4 [&_svg]:opacity-50`,
221
+ {
222
+ variants: {
223
+ variant: {
224
+ default: "rounded-md",
225
+ pill: "rounded-pill",
226
+ filled: "rounded-md bg-muted"
227
+ },
228
+ size: {
229
+ default: "h-12 px-5 py-3 text-base",
230
+ sm: "h-9 px-3 py-1 text-sm",
231
+ md: "h-11 px-4 py-2 text-base md:text-sm"
232
+ }
233
+ },
234
+ defaultVariants: {
235
+ variant: "default",
236
+ size: "default"
237
+ }
238
+ }
239
+ );
240
+ var SelectTrigger = ({
241
+ className,
242
+ variant,
243
+ size,
244
+ children,
245
+ ...props
246
+ }) => {
247
+ return /* @__PURE__ */ jsxs(
248
+ SelectPrimitive4.Trigger,
249
+ {
250
+ "data-id": "SelectTrigger",
251
+ "data-slot": "select-trigger",
252
+ className: cn(selectTriggerVariants({ variant, size }), className),
253
+ ...props,
254
+ children: [
255
+ children,
256
+ /* @__PURE__ */ jsx9(SelectPrimitive4.Icon, { asChild: true, children: /* @__PURE__ */ jsx9(ChevronDown, {}) })
257
+ ]
258
+ }
259
+ );
260
+ };
261
+
262
+ // src/components/select-content.tsx
263
+ import * as SelectPrimitive7 from "@radix-ui/react-select";
264
+
265
+ // src/components/select-scroll-down-button.tsx
266
+ import * as SelectPrimitive5 from "@radix-ui/react-select";
267
+ import { ChevronDown as ChevronDown2 } from "lucide-react";
268
+ import { jsx as jsx10 } from "react/jsx-runtime";
269
+ var SelectScrollDownButton = ({ className, ...props }) => {
270
+ return /* @__PURE__ */ jsx10(
271
+ SelectPrimitive5.ScrollDownButton,
272
+ {
273
+ "data-id": "SelectScrollDownButton",
274
+ className: cn("flex cursor-default items-center justify-center py-1", className),
275
+ ...props,
276
+ children: /* @__PURE__ */ jsx10(ChevronDown2, { className: "size-4" })
277
+ }
278
+ );
279
+ };
280
+
281
+ // src/components/select-scroll-up-button.tsx
282
+ import * as SelectPrimitive6 from "@radix-ui/react-select";
283
+ import { ChevronUp } from "lucide-react";
284
+ import { jsx as jsx11 } from "react/jsx-runtime";
285
+ var SelectScrollUpButton = ({ className, ...props }) => {
286
+ return /* @__PURE__ */ jsx11(
287
+ SelectPrimitive6.ScrollUpButton,
288
+ {
289
+ "data-id": "SelectScrollUpButton",
290
+ className: cn("flex cursor-default items-center justify-center py-1", className),
291
+ ...props,
292
+ children: /* @__PURE__ */ jsx11(ChevronUp, { className: "size-4" })
293
+ }
294
+ );
295
+ };
296
+
297
+ // src/components/select-content.tsx
298
+ import { jsx as jsx12, jsxs as jsxs2 } from "react/jsx-runtime";
299
+ var SelectContent = ({
300
+ className,
301
+ children,
302
+ position = "popper",
303
+ ...props
304
+ }) => {
305
+ return /* @__PURE__ */ jsx12(SelectPrimitive7.Portal, { children: /* @__PURE__ */ jsxs2(
306
+ SelectPrimitive7.Content,
307
+ {
308
+ "data-id": "SelectContent",
309
+ "data-slot": "select-content",
310
+ className: cn(
311
+ "revit-ui relative z-50 max-h-96 min-w-32 overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-[0_18px_40px_rgba(0,0,0,0.08)] 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",
312
+ position === "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",
313
+ className
314
+ ),
315
+ position,
316
+ ...props,
317
+ children: [
318
+ /* @__PURE__ */ jsx12(SelectScrollUpButton, {}),
319
+ /* @__PURE__ */ jsx12(
320
+ SelectPrimitive7.Viewport,
321
+ {
322
+ className: cn(
323
+ "p-1",
324
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
325
+ ),
326
+ children
327
+ }
328
+ ),
329
+ /* @__PURE__ */ jsx12(SelectScrollDownButton, {})
330
+ ]
331
+ }
332
+ ) });
333
+ };
334
+
335
+ // src/components/select-item.tsx
336
+ import * as SelectPrimitive8 from "@radix-ui/react-select";
337
+ import { Check } from "lucide-react";
338
+ import { jsx as jsx13, jsxs as jsxs3 } from "react/jsx-runtime";
339
+ var SelectItem = ({ className, children, ...props }) => {
340
+ return /* @__PURE__ */ jsxs3(
341
+ SelectPrimitive8.Item,
342
+ {
343
+ "data-id": "SelectItem",
344
+ "data-slot": "select-item",
345
+ className: cn(
346
+ `relative flex w-full cursor-default select-none items-center rounded-md py-2 pl-8 pr-2 text-sm outline-none ${motion.surface} focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,
347
+ className
348
+ ),
349
+ ...props,
350
+ children: [
351
+ /* @__PURE__ */ jsx13("span", { className: "absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx13(SelectPrimitive8.ItemIndicator, { children: /* @__PURE__ */ jsx13(Check, { className: "size-4" }) }) }),
352
+ /* @__PURE__ */ jsx13(SelectPrimitive8.ItemText, { children })
353
+ ]
354
+ }
355
+ );
356
+ };
357
+
358
+ // src/components/select-label.tsx
359
+ import * as SelectPrimitive9 from "@radix-ui/react-select";
360
+ import { jsx as jsx14 } from "react/jsx-runtime";
361
+ var SelectLabel = ({ className, ...props }) => {
362
+ return /* @__PURE__ */ jsx14(
363
+ SelectPrimitive9.Label,
364
+ {
365
+ "data-id": "SelectLabel",
366
+ className: cn("px-2 py-1.5 text-xs font-semibold uppercase tracking-[0.12em]", className),
367
+ ...props
368
+ }
369
+ );
370
+ };
371
+
372
+ // src/components/select-separator.tsx
373
+ import * as SelectPrimitive10 from "@radix-ui/react-select";
374
+ import { jsx as jsx15 } from "react/jsx-runtime";
375
+ var SelectSeparator = ({ className, ...props }) => {
376
+ return /* @__PURE__ */ jsx15(
377
+ SelectPrimitive10.Separator,
378
+ {
379
+ "data-id": "SelectSeparator",
380
+ className: cn("-mx-1 my-1 h-px bg-border", className),
381
+ ...props
382
+ }
383
+ );
384
+ };
385
+
386
+ // src/components/dialog.tsx
387
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
388
+ var Dialog = DialogPrimitive.Root;
389
+
390
+ // src/components/dialog-trigger.tsx
391
+ import * as DialogPrimitive2 from "@radix-ui/react-dialog";
392
+ var DialogTrigger = DialogPrimitive2.Trigger;
393
+
394
+ // src/components/dialog-content.tsx
395
+ import * as DialogPrimitive5 from "@radix-ui/react-dialog";
396
+ import { X } from "lucide-react";
397
+
398
+ // src/components/dialog-overlay.tsx
399
+ import * as DialogPrimitive3 from "@radix-ui/react-dialog";
400
+ import { jsx as jsx16 } from "react/jsx-runtime";
401
+ var DialogOverlay = ({ className, ...props }) => {
402
+ return /* @__PURE__ */ jsx16(
403
+ DialogPrimitive3.Overlay,
404
+ {
405
+ "data-id": "DialogOverlay",
406
+ "data-slot": "dialog-overlay",
407
+ className: cn(
408
+ "fixed inset-0 z-50 bg-black/40 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
409
+ className
410
+ ),
411
+ ...props
412
+ }
413
+ );
414
+ };
415
+
416
+ // src/components/dialog-portal.tsx
417
+ import * as DialogPrimitive4 from "@radix-ui/react-dialog";
418
+ var DialogPortal = DialogPrimitive4.Portal;
419
+
420
+ // src/components/dialog-content.tsx
421
+ import { jsx as jsx17, jsxs as jsxs4 } from "react/jsx-runtime";
422
+ var DialogContent = ({ className, children, ...props }) => {
423
+ return /* @__PURE__ */ jsxs4(DialogPortal, { children: [
424
+ /* @__PURE__ */ jsx17(DialogOverlay, {}),
425
+ /* @__PURE__ */ jsxs4(
426
+ DialogPrimitive5.Content,
427
+ {
428
+ "data-id": "DialogContent",
429
+ "data-slot": "dialog-content",
430
+ className: cn(
431
+ `revit-ui fixed top-1/2 left-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-[0_24px_48px_rgba(0,0,0,0.12)] ${motion.surface} 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`,
432
+ className
433
+ ),
434
+ ...props,
435
+ children: [
436
+ children,
437
+ /* @__PURE__ */ jsxs4(
438
+ DialogPrimitive5.Close,
439
+ {
440
+ "data-id": "DialogClose",
441
+ className: `absolute top-4 right-4 rounded-pill p-1 opacity-70 ${motion.surface} hover:bg-muted hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none`,
442
+ children: [
443
+ /* @__PURE__ */ jsx17(X, { className: "size-4" }),
444
+ /* @__PURE__ */ jsx17("span", { className: "sr-only", children: "Close" })
445
+ ]
446
+ }
447
+ )
448
+ ]
449
+ }
450
+ )
451
+ ] });
452
+ };
453
+
454
+ // src/components/dialog-header.tsx
455
+ import { jsx as jsx18 } from "react/jsx-runtime";
456
+ var DialogHeader = ({ className, ...props }) => {
457
+ return /* @__PURE__ */ jsx18(
458
+ "div",
459
+ {
460
+ "data-id": "DialogHeader",
461
+ className: cn("flex flex-col gap-1.5 text-center sm:text-left", className),
462
+ ...props
463
+ }
464
+ );
465
+ };
466
+
467
+ // src/components/dialog-footer.tsx
468
+ import { jsx as jsx19 } from "react/jsx-runtime";
469
+ var DialogFooter = ({ className, ...props }) => {
470
+ return /* @__PURE__ */ jsx19(
471
+ "div",
472
+ {
473
+ "data-id": "DialogFooter",
474
+ className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
475
+ ...props
476
+ }
477
+ );
478
+ };
479
+
480
+ // src/components/dialog-title.tsx
481
+ import * as DialogPrimitive6 from "@radix-ui/react-dialog";
482
+ import { jsx as jsx20 } from "react/jsx-runtime";
483
+ var DialogTitle = ({ className, ...props }) => {
484
+ return /* @__PURE__ */ jsx20(
485
+ DialogPrimitive6.Title,
486
+ {
487
+ "data-id": "DialogTitle",
488
+ className: cn("font-sans text-lg font-semibold leading-none tracking-tight", className),
489
+ ...props
490
+ }
491
+ );
492
+ };
493
+
494
+ // src/components/dialog-description.tsx
495
+ import * as DialogPrimitive7 from "@radix-ui/react-dialog";
496
+ import { jsx as jsx21 } from "react/jsx-runtime";
497
+ var DialogDescription = ({ className, ...props }) => {
498
+ return /* @__PURE__ */ jsx21(
499
+ DialogPrimitive7.Description,
500
+ {
501
+ "data-id": "DialogDescription",
502
+ className: cn("text-sm text-muted-foreground", className),
503
+ ...props
504
+ }
505
+ );
506
+ };
507
+
508
+ // src/components/dialog-close.tsx
509
+ import * as DialogPrimitive8 from "@radix-ui/react-dialog";
510
+ var DialogClose = DialogPrimitive8.Close;
511
+
512
+ // src/components/label.tsx
513
+ import { cva as cva5 } from "class-variance-authority";
514
+ import { jsx as jsx22 } from "react/jsx-runtime";
515
+ var labelVariants = cva5(
516
+ "font-sans leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
517
+ {
518
+ variants: {
519
+ variant: {
520
+ default: "text-sm font-medium",
521
+ eyebrow: "text-xs font-bold uppercase tracking-[0.22em] text-brand-gold"
522
+ }
523
+ },
524
+ defaultVariants: {
525
+ variant: "default"
526
+ }
527
+ }
528
+ );
529
+ var Label2 = ({ className, variant, ...props }) => {
530
+ return /* @__PURE__ */ jsx22("label", { "data-id": "Label", className: cn(labelVariants({ variant }), className), ...props });
531
+ };
532
+
533
+ // src/components/textarea.tsx
534
+ import { cva as cva6 } from "class-variance-authority";
535
+ import { jsx as jsx23 } from "react/jsx-runtime";
536
+ var textareaVariants = cva6(`min-h-24 w-full resize-y ${fieldSurface}`, {
537
+ variants: {
538
+ variant: {
539
+ default: "rounded-md",
540
+ filled: "rounded-md bg-muted"
541
+ },
542
+ size: {
543
+ default: "px-5 py-3 text-base",
544
+ sm: "min-h-20 px-3 py-2 text-sm"
545
+ }
546
+ },
547
+ defaultVariants: {
548
+ variant: "default",
549
+ size: "default"
550
+ }
551
+ });
552
+ var Textarea = ({ className, variant, size, ...props }) => {
553
+ return /* @__PURE__ */ jsx23(
554
+ "textarea",
555
+ {
556
+ "data-id": "Textarea",
557
+ "data-slot": "textarea",
558
+ className: cn(textareaVariants({ variant, size }), className),
559
+ ...props
560
+ }
561
+ );
562
+ };
563
+
564
+ // src/components/checkbox.tsx
565
+ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
566
+ import { Check as Check2 } from "lucide-react";
567
+ import { jsx as jsx24 } from "react/jsx-runtime";
568
+ var Checkbox = ({ className, ...props }) => {
569
+ return /* @__PURE__ */ jsx24(
570
+ CheckboxPrimitive.Root,
571
+ {
572
+ "data-id": "Checkbox",
573
+ "data-slot": "checkbox",
574
+ className: cn(
575
+ `peer size-5 shrink-0 rounded-sm border border-border bg-card ${motion.surface} hover:border-primary focus-visible:border-primary focus-visible:shadow-[0_0_0_3px_rgba(255,229,0,0.28)] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground`,
576
+ className
577
+ ),
578
+ ...props,
579
+ children: /* @__PURE__ */ jsx24(CheckboxPrimitive.Indicator, { className: "flex items-center justify-center text-current", children: /* @__PURE__ */ jsx24(Check2, { className: "size-3.5 stroke-[3]" }) })
580
+ }
581
+ );
582
+ };
583
+
584
+ // src/components/badge.tsx
585
+ import { cva as cva7 } from "class-variance-authority";
586
+ import { jsx as jsx25 } from "react/jsx-runtime";
587
+ var badgeVariants = cva7(
588
+ `inline-flex items-center font-sans font-semibold uppercase tracking-[0.12em] ${motion.surface}`,
589
+ {
590
+ variants: {
591
+ variant: {
592
+ default: "rounded-pill border-2 border-primary bg-primary text-primary-foreground",
593
+ tag: "rounded-pill border-2 border-border bg-card text-card-foreground hover:border-primary hover:bg-primary/25",
594
+ outline: "rounded-pill border border-border bg-card text-foreground",
595
+ secondary: "rounded-pill border-2 border-secondary bg-secondary text-secondary-foreground",
596
+ destructive: "rounded-pill border-2 border-destructive bg-destructive text-destructive-foreground"
597
+ },
598
+ size: {
599
+ default: "px-3.5 py-1.5 text-[11px]",
600
+ sm: "px-2.5 py-1 text-[10px]"
601
+ }
602
+ },
603
+ defaultVariants: {
604
+ variant: "default",
605
+ size: "default"
606
+ }
607
+ }
608
+ );
609
+ var Badge = ({ className, variant, size, ...props }) => {
610
+ return /* @__PURE__ */ jsx25("span", { "data-id": "Badge", className: cn(badgeVariants({ variant, size }), className), ...props });
611
+ };
612
+
613
+ // src/components/switch.tsx
614
+ import * as SwitchPrimitive from "@radix-ui/react-switch";
615
+ import { jsx as jsx26 } from "react/jsx-runtime";
616
+ var Switch = ({ className, ...props }) => {
617
+ return /* @__PURE__ */ jsx26(
618
+ SwitchPrimitive.Root,
619
+ {
620
+ "data-id": "Switch",
621
+ "data-slot": "switch",
622
+ className: cn(
623
+ `peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-pill border border-border bg-muted ${motion.surface} focus-visible:border-primary focus-visible:shadow-[0_0_0_3px_rgba(255,229,0,0.28)] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary`,
624
+ className
625
+ ),
626
+ ...props,
627
+ children: /* @__PURE__ */ jsx26(
628
+ SwitchPrimitive.Thumb,
629
+ {
630
+ "data-id": "SwitchThumb",
631
+ className: `pointer-events-none block size-5 rounded-pill bg-card shadow-sm ${motion.surface} data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5`
632
+ }
633
+ )
634
+ }
635
+ );
636
+ };
637
+
638
+ // src/components/radio-group.tsx
639
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
640
+ import { jsx as jsx27 } from "react/jsx-runtime";
641
+ var RadioGroup = ({ className, ...props }) => {
642
+ return /* @__PURE__ */ jsx27(
643
+ RadioGroupPrimitive.Root,
644
+ {
645
+ "data-id": "RadioGroup",
646
+ className: cn("grid gap-2", className),
647
+ ...props
648
+ }
649
+ );
650
+ };
651
+
652
+ // src/components/radio-group-item.tsx
653
+ import * as RadioGroupPrimitive2 from "@radix-ui/react-radio-group";
654
+ import { Circle } from "lucide-react";
655
+ import { jsx as jsx28 } from "react/jsx-runtime";
656
+ var RadioGroupItem = ({ className, ...props }) => {
657
+ return /* @__PURE__ */ jsx28(
658
+ RadioGroupPrimitive2.Item,
659
+ {
660
+ "data-id": "RadioGroupItem",
661
+ className: cn(
662
+ `aspect-square size-5 rounded-full border border-border bg-card ${motion.surface} hover:border-primary focus-visible:border-primary focus-visible:shadow-[0_0_0_3px_rgba(255,229,0,0.28)] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary`,
663
+ className
664
+ ),
665
+ ...props,
666
+ children: /* @__PURE__ */ jsx28(RadioGroupPrimitive2.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx28(Circle, { className: "size-2.5 fill-primary text-primary" }) })
667
+ }
668
+ );
669
+ };
670
+
671
+ // src/components/tabs.tsx
672
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
673
+ var Tabs = TabsPrimitive.Root;
674
+
675
+ // src/components/tabs-list.tsx
676
+ import * as TabsPrimitive2 from "@radix-ui/react-tabs";
677
+ import { jsx as jsx29 } from "react/jsx-runtime";
678
+ var TabsList = ({ className, ...props }) => {
679
+ return /* @__PURE__ */ jsx29(
680
+ TabsPrimitive2.List,
681
+ {
682
+ "data-id": "TabsList",
683
+ className: cn(
684
+ "inline-flex items-center gap-1 rounded-pill border border-border bg-card p-1",
685
+ className
686
+ ),
687
+ ...props
688
+ }
689
+ );
690
+ };
691
+
692
+ // src/components/tabs-trigger.tsx
693
+ import * as TabsPrimitive3 from "@radix-ui/react-tabs";
694
+ import { jsx as jsx30 } from "react/jsx-runtime";
695
+ var TabsTrigger = ({ className, ...props }) => {
696
+ return /* @__PURE__ */ jsx30(
697
+ TabsPrimitive3.Trigger,
698
+ {
699
+ "data-id": "TabsTrigger",
700
+ className: cn(
701
+ `inline-flex items-center justify-center rounded-pill px-4 py-2 font-sans text-[11px] font-semibold uppercase tracking-[0.12em] ${motion.surface} hover:bg-muted focus-visible:outline-none focus-visible:shadow-[0_0_0_3px_rgba(255,229,0,0.28)] disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-primary data-[state=active]:text-primary-foreground`,
702
+ className
703
+ ),
704
+ ...props
705
+ }
706
+ );
707
+ };
708
+
709
+ // src/components/tabs-content.tsx
710
+ import * as TabsPrimitive4 from "@radix-ui/react-tabs";
711
+ import { jsx as jsx31 } from "react/jsx-runtime";
712
+ var TabsContent = ({ className, ...props }) => {
713
+ return /* @__PURE__ */ jsx31(
714
+ TabsPrimitive4.Content,
715
+ {
716
+ "data-id": "TabsContent",
717
+ className: cn(`mt-4 outline-none ${motion.surface} focus-visible:shadow-[0_0_0_3px_rgba(255,229,0,0.28)]`, className),
718
+ ...props
719
+ }
720
+ );
721
+ };
722
+
723
+ // src/components/tooltip-provider.tsx
724
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
725
+ import { jsx as jsx32 } from "react/jsx-runtime";
726
+ var TooltipProvider = ({ delayDuration = 200, ...props }) => {
727
+ return /* @__PURE__ */ jsx32(TooltipPrimitive.Provider, { delayDuration, ...props });
728
+ };
729
+
730
+ // src/components/tooltip.tsx
731
+ import * as TooltipPrimitive2 from "@radix-ui/react-tooltip";
732
+ var Tooltip = TooltipPrimitive2.Root;
733
+
734
+ // src/components/tooltip-trigger.tsx
735
+ import * as TooltipPrimitive3 from "@radix-ui/react-tooltip";
736
+ var TooltipTrigger = TooltipPrimitive3.Trigger;
737
+
738
+ // src/components/tooltip-content.tsx
739
+ import * as TooltipPrimitive4 from "@radix-ui/react-tooltip";
740
+ import { jsx as jsx33 } from "react/jsx-runtime";
741
+ var TooltipContent = ({ className, sideOffset = 8, ...props }) => {
742
+ return /* @__PURE__ */ jsx33(TooltipPrimitive4.Portal, { children: /* @__PURE__ */ jsx33(
743
+ TooltipPrimitive4.Content,
744
+ {
745
+ "data-id": "TooltipContent",
746
+ sideOffset,
747
+ className: cn(
748
+ "z-50 rounded-md border border-border bg-card px-3 py-1.5 font-sans text-xs text-card-foreground shadow-[0_12px_24px_rgba(0,0,0,0.08)] 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",
749
+ className
750
+ ),
751
+ ...props
752
+ }
753
+ ) });
754
+ };
755
+
756
+ // src/components/separator.tsx
757
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
758
+ import { jsx as jsx34 } from "react/jsx-runtime";
759
+ var Separator2 = ({
760
+ className,
761
+ orientation = "horizontal",
762
+ decorative = true,
763
+ ...props
764
+ }) => {
765
+ return /* @__PURE__ */ jsx34(
766
+ SeparatorPrimitive.Root,
767
+ {
768
+ "data-id": "Separator",
769
+ decorative,
770
+ orientation,
771
+ className: cn(
772
+ "shrink-0 bg-border",
773
+ orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
774
+ className
775
+ ),
776
+ ...props
777
+ }
778
+ );
779
+ };
780
+
781
+ // src/components/accordion.tsx
782
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
783
+ var Accordion = AccordionPrimitive.Root;
784
+
785
+ // src/components/accordion-item.tsx
786
+ import * as AccordionPrimitive2 from "@radix-ui/react-accordion";
787
+ import { jsx as jsx35 } from "react/jsx-runtime";
788
+ var AccordionItem = ({ className, ...props }) => {
789
+ return /* @__PURE__ */ jsx35(
790
+ AccordionPrimitive2.Item,
791
+ {
792
+ "data-id": "AccordionItem",
793
+ className: cn("border-b border-border", className),
794
+ ...props
795
+ }
796
+ );
797
+ };
798
+
799
+ // src/components/accordion-trigger.tsx
800
+ import * as AccordionPrimitive3 from "@radix-ui/react-accordion";
801
+ import { ChevronDown as ChevronDown3 } from "lucide-react";
802
+ import { jsx as jsx36, jsxs as jsxs5 } from "react/jsx-runtime";
803
+ var AccordionTrigger = ({ className, children, ...props }) => {
804
+ return /* @__PURE__ */ jsx36(AccordionPrimitive3.Header, { className: "flex", children: /* @__PURE__ */ jsxs5(
805
+ AccordionPrimitive3.Trigger,
806
+ {
807
+ "data-id": "AccordionTrigger",
808
+ className: cn(
809
+ `flex flex-1 items-center justify-between py-4 text-left font-sans text-sm font-semibold ${motion.surface} hover:text-brand-gold focus-visible:outline-none focus-visible:shadow-[0_0_0_3px_rgba(255,229,0,0.28)] [&[data-state=open]>svg]:rotate-180`,
810
+ className
811
+ ),
812
+ ...props,
813
+ children: [
814
+ children,
815
+ /* @__PURE__ */ jsx36(ChevronDown3, { className: `size-4 shrink-0 ${motion.surface}` })
816
+ ]
817
+ }
818
+ ) });
819
+ };
820
+
821
+ // src/components/accordion-content.tsx
822
+ import * as AccordionPrimitive4 from "@radix-ui/react-accordion";
823
+ import { jsx as jsx37 } from "react/jsx-runtime";
824
+ var AccordionContent = ({ className, children, ...props }) => {
825
+ return /* @__PURE__ */ jsx37(
826
+ AccordionPrimitive4.Content,
827
+ {
828
+ "data-id": "AccordionContent",
829
+ className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
830
+ ...props,
831
+ children: /* @__PURE__ */ jsx37("div", { className: cn("pb-4 text-muted-foreground", className), children })
832
+ }
833
+ );
834
+ };
835
+
836
+ // src/components/alert.tsx
837
+ import { cva as cva8 } from "class-variance-authority";
838
+ import { jsx as jsx38 } from "react/jsx-runtime";
839
+ var alertVariants = cva8("relative w-full rounded-lg border px-4 py-3 font-sans text-sm", {
840
+ variants: {
841
+ variant: {
842
+ default: "border-border bg-card text-card-foreground",
843
+ warning: "border-primary/60 bg-primary/15 text-foreground",
844
+ destructive: "border-destructive/40 bg-destructive/10 text-destructive"
845
+ }
846
+ },
847
+ defaultVariants: {
848
+ variant: "default"
849
+ }
850
+ });
851
+ var Alert = ({ className, variant, ...props }) => {
852
+ return /* @__PURE__ */ jsx38("div", { "data-id": "Alert", role: "alert", className: cn(alertVariants({ variant }), className), ...props });
853
+ };
854
+
855
+ // src/components/alert-title.tsx
856
+ import { jsx as jsx39 } from "react/jsx-runtime";
857
+ var AlertTitle = ({ className, ...props }) => {
858
+ return /* @__PURE__ */ jsx39(
859
+ "h5",
860
+ {
861
+ "data-id": "AlertTitle",
862
+ className: cn("mb-1 font-sans text-sm font-semibold tracking-tight", className),
863
+ ...props
864
+ }
865
+ );
866
+ };
867
+
868
+ // src/components/alert-description.tsx
869
+ import { jsx as jsx40 } from "react/jsx-runtime";
870
+ var AlertDescription = ({ className, ...props }) => {
871
+ return /* @__PURE__ */ jsx40("p", { "data-id": "AlertDescription", className: cn("text-sm text-muted-foreground", className), ...props });
872
+ };
873
+
874
+ // src/components/avatar.tsx
875
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
876
+ import { jsx as jsx41 } from "react/jsx-runtime";
877
+ var Avatar = ({ className, ...props }) => {
878
+ return /* @__PURE__ */ jsx41(
879
+ AvatarPrimitive.Root,
880
+ {
881
+ "data-id": "Avatar",
882
+ className: cn("relative flex size-10 shrink-0 overflow-hidden rounded-pill", className),
883
+ ...props
884
+ }
885
+ );
886
+ };
887
+
888
+ // src/components/avatar-image.tsx
889
+ import * as AvatarPrimitive2 from "@radix-ui/react-avatar";
890
+ import { jsx as jsx42 } from "react/jsx-runtime";
891
+ var AvatarImage = ({ className, ...props }) => {
892
+ return /* @__PURE__ */ jsx42(
893
+ AvatarPrimitive2.Image,
894
+ {
895
+ "data-id": "AvatarImage",
896
+ className: cn("aspect-square size-full object-cover", className),
897
+ ...props
898
+ }
899
+ );
900
+ };
901
+
902
+ // src/components/avatar-fallback.tsx
903
+ import * as AvatarPrimitive3 from "@radix-ui/react-avatar";
904
+ import { jsx as jsx43 } from "react/jsx-runtime";
905
+ var AvatarFallback = ({ className, ...props }) => {
906
+ return /* @__PURE__ */ jsx43(
907
+ AvatarPrimitive3.Fallback,
908
+ {
909
+ "data-id": "AvatarFallback",
910
+ className: cn(
911
+ "flex size-full items-center justify-center bg-primary font-sans text-xs font-semibold uppercase text-primary-foreground",
912
+ className
913
+ ),
914
+ ...props
915
+ }
916
+ );
917
+ };
918
+
919
+ // src/components/dropdown-menu.tsx
920
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
921
+ var DropdownMenu = DropdownMenuPrimitive.Root;
922
+
923
+ // src/components/dropdown-menu-trigger.tsx
924
+ import * as DropdownMenuPrimitive2 from "@radix-ui/react-dropdown-menu";
925
+ var DropdownMenuTrigger = DropdownMenuPrimitive2.Trigger;
926
+
927
+ // src/components/dropdown-menu-content.tsx
928
+ import * as DropdownMenuPrimitive3 from "@radix-ui/react-dropdown-menu";
929
+ import { jsx as jsx44 } from "react/jsx-runtime";
930
+ var DropdownMenuContent = ({
931
+ className,
932
+ sideOffset = 8,
933
+ ...props
934
+ }) => {
935
+ return /* @__PURE__ */ jsx44(DropdownMenuPrimitive3.Portal, { children: /* @__PURE__ */ jsx44(
936
+ DropdownMenuPrimitive3.Content,
937
+ {
938
+ "data-id": "DropdownMenuContent",
939
+ sideOffset,
940
+ className: cn(
941
+ "z-50 min-w-40 overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-[0_18px_40px_rgba(0,0,0,0.08)] 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",
942
+ className
943
+ ),
944
+ ...props
945
+ }
946
+ ) });
947
+ };
948
+
949
+ // src/components/dropdown-menu-item.tsx
950
+ import * as DropdownMenuPrimitive4 from "@radix-ui/react-dropdown-menu";
951
+ import { jsx as jsx45 } from "react/jsx-runtime";
952
+ var DropdownMenuItem = ({ className, ...props }) => {
953
+ return /* @__PURE__ */ jsx45(
954
+ DropdownMenuPrimitive4.Item,
955
+ {
956
+ "data-id": "DropdownMenuItem",
957
+ className: cn(
958
+ `relative flex cursor-default items-center rounded-md px-3 py-2 text-sm outline-none ${motion.surface} focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,
959
+ className
960
+ ),
961
+ ...props
962
+ }
963
+ );
964
+ };
965
+
966
+ // src/components/dropdown-menu-label.tsx
967
+ import * as DropdownMenuPrimitive5 from "@radix-ui/react-dropdown-menu";
968
+ import { jsx as jsx46 } from "react/jsx-runtime";
969
+ var DropdownMenuLabel = ({ className, ...props }) => {
970
+ return /* @__PURE__ */ jsx46(
971
+ DropdownMenuPrimitive5.Label,
972
+ {
973
+ "data-id": "DropdownMenuLabel",
974
+ className: cn("px-3 py-2 text-xs font-semibold uppercase tracking-[0.12em]", className),
975
+ ...props
976
+ }
977
+ );
978
+ };
979
+
980
+ // src/components/dropdown-menu-separator.tsx
981
+ import * as DropdownMenuPrimitive6 from "@radix-ui/react-dropdown-menu";
982
+ import { jsx as jsx47 } from "react/jsx-runtime";
983
+ var DropdownMenuSeparator = ({ className, ...props }) => {
984
+ return /* @__PURE__ */ jsx47(
985
+ DropdownMenuPrimitive6.Separator,
986
+ {
987
+ "data-id": "DropdownMenuSeparator",
988
+ className: cn("-mx-1 my-1 h-px bg-border", className),
989
+ ...props
990
+ }
991
+ );
992
+ };
993
+
994
+ // src/components/popover.tsx
995
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
996
+ var Popover = PopoverPrimitive.Root;
997
+
998
+ // src/components/popover-trigger.tsx
999
+ import * as PopoverPrimitive2 from "@radix-ui/react-popover";
1000
+ var PopoverTrigger = PopoverPrimitive2.Trigger;
1001
+
1002
+ // src/components/popover-content.tsx
1003
+ import * as PopoverPrimitive3 from "@radix-ui/react-popover";
1004
+ import { jsx as jsx48 } from "react/jsx-runtime";
1005
+ var PopoverContent = ({
1006
+ className,
1007
+ align = "center",
1008
+ sideOffset = 8,
1009
+ ...props
1010
+ }) => {
1011
+ return /* @__PURE__ */ jsx48(PopoverPrimitive3.Portal, { children: /* @__PURE__ */ jsx48(
1012
+ PopoverPrimitive3.Content,
1013
+ {
1014
+ "data-id": "PopoverContent",
1015
+ align,
1016
+ sideOffset,
1017
+ className: cn(
1018
+ "z-50 w-72 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-[0_18px_40px_rgba(0,0,0,0.08)] outline-none 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",
1019
+ className
1020
+ ),
1021
+ ...props
1022
+ }
1023
+ ) });
1024
+ };
1025
+
1026
+ // src/components/sheet.tsx
1027
+ import * as DialogPrimitive9 from "@radix-ui/react-dialog";
1028
+ var Sheet = DialogPrimitive9.Root;
1029
+
1030
+ // src/components/sheet-trigger.tsx
1031
+ import * as DialogPrimitive10 from "@radix-ui/react-dialog";
1032
+ var SheetTrigger = DialogPrimitive10.Trigger;
1033
+
1034
+ // src/components/sheet-content.tsx
1035
+ import * as DialogPrimitive11 from "@radix-ui/react-dialog";
1036
+ import { cva as cva9 } from "class-variance-authority";
1037
+ import { X as X2 } from "lucide-react";
1038
+ import { jsx as jsx49, jsxs as jsxs6 } from "react/jsx-runtime";
1039
+ var sheetContentVariants = cva9(
1040
+ `fixed z-50 flex flex-col gap-4 border-border bg-card p-6 text-card-foreground shadow-[0_24px_48px_rgba(0,0,0,0.12)] ${motion.surface} data-[state=open]:animate-in data-[state=closed]:animate-out`,
1041
+ {
1042
+ variants: {
1043
+ side: {
1044
+ right: "inset-y-0 right-0 h-full w-full max-w-sm border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right",
1045
+ left: "inset-y-0 left-0 h-full w-full max-w-sm border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left",
1046
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
1047
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom"
1048
+ }
1049
+ },
1050
+ defaultVariants: {
1051
+ side: "right"
1052
+ }
1053
+ }
1054
+ );
1055
+ var SheetContent = ({ className, children, side, ...props }) => {
1056
+ return /* @__PURE__ */ jsxs6(DialogPortal, { children: [
1057
+ /* @__PURE__ */ jsx49(DialogOverlay, {}),
1058
+ /* @__PURE__ */ jsxs6(
1059
+ DialogPrimitive11.Content,
1060
+ {
1061
+ "data-id": "SheetContent",
1062
+ className: cn(sheetContentVariants({ side }), className),
1063
+ ...props,
1064
+ children: [
1065
+ children,
1066
+ /* @__PURE__ */ jsxs6(
1067
+ DialogPrimitive11.Close,
1068
+ {
1069
+ "data-id": "SheetClose",
1070
+ className: `absolute top-4 right-4 rounded-pill p-1 opacity-70 ${motion.surface} hover:bg-muted hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none`,
1071
+ children: [
1072
+ /* @__PURE__ */ jsx49(X2, { className: "size-4" }),
1073
+ /* @__PURE__ */ jsx49("span", { className: "sr-only", children: "Close" })
1074
+ ]
1075
+ }
1076
+ )
1077
+ ]
1078
+ }
1079
+ )
1080
+ ] });
1081
+ };
1082
+
1083
+ // src/components/sheet-header.tsx
1084
+ import { jsx as jsx50 } from "react/jsx-runtime";
1085
+ var SheetHeader = ({ className, ...props }) => {
1086
+ return /* @__PURE__ */ jsx50("div", { "data-id": "SheetHeader", className: cn("flex flex-col gap-1.5 pr-8", className), ...props });
1087
+ };
1088
+
1089
+ // src/components/sheet-title.tsx
1090
+ import * as DialogPrimitive12 from "@radix-ui/react-dialog";
1091
+ import { jsx as jsx51 } from "react/jsx-runtime";
1092
+ var SheetTitle = ({ className, ...props }) => {
1093
+ return /* @__PURE__ */ jsx51(
1094
+ DialogPrimitive12.Title,
1095
+ {
1096
+ "data-id": "SheetTitle",
1097
+ className: cn("font-sans text-lg font-semibold tracking-tight", className),
1098
+ ...props
1099
+ }
1100
+ );
1101
+ };
1102
+
1103
+ // src/components/sheet-description.tsx
1104
+ import * as DialogPrimitive13 from "@radix-ui/react-dialog";
1105
+ import { jsx as jsx52 } from "react/jsx-runtime";
1106
+ var SheetDescription = ({ className, ...props }) => {
1107
+ return /* @__PURE__ */ jsx52(
1108
+ DialogPrimitive13.Description,
1109
+ {
1110
+ "data-id": "SheetDescription",
1111
+ className: cn("text-sm text-muted-foreground", className),
1112
+ ...props
1113
+ }
1114
+ );
1115
+ };
1116
+
1117
+ // src/components/skeleton.tsx
1118
+ import { jsx as jsx53 } from "react/jsx-runtime";
1119
+ var Skeleton = ({ className, ...props }) => {
1120
+ return /* @__PURE__ */ jsx53(
1121
+ "div",
1122
+ {
1123
+ "data-id": "Skeleton",
1124
+ className: cn(`animate-pulse rounded-md bg-muted ${motion.surface}`, className),
1125
+ ...props
1126
+ }
1127
+ );
1128
+ };
1129
+
1130
+ // src/components/slider.tsx
1131
+ import * as SliderPrimitive from "@radix-ui/react-slider";
1132
+ import { jsx as jsx54, jsxs as jsxs7 } from "react/jsx-runtime";
1133
+ var Slider = ({ className, ...props }) => {
1134
+ return /* @__PURE__ */ jsxs7(
1135
+ SliderPrimitive.Root,
1136
+ {
1137
+ "data-id": "Slider",
1138
+ className: cn("relative flex w-full touch-none items-center select-none", className),
1139
+ ...props,
1140
+ children: [
1141
+ /* @__PURE__ */ jsx54(
1142
+ SliderPrimitive.Track,
1143
+ {
1144
+ "data-id": "SliderTrack",
1145
+ className: "relative h-2 w-full grow overflow-hidden rounded-pill bg-muted",
1146
+ children: /* @__PURE__ */ jsx54(SliderPrimitive.Range, { className: "absolute h-full bg-primary" })
1147
+ }
1148
+ ),
1149
+ /* @__PURE__ */ jsx54(
1150
+ SliderPrimitive.Thumb,
1151
+ {
1152
+ "data-id": "SliderThumb",
1153
+ className: `block size-5 rounded-pill border border-primary bg-card ${motion.surface} focus-visible:shadow-[0_0_0_3px_rgba(255,229,0,0.28)] focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50`
1154
+ }
1155
+ )
1156
+ ]
1157
+ }
1158
+ );
1159
+ };
1160
+
1161
+ // src/components/table.tsx
1162
+ import { jsx as jsx55 } from "react/jsx-runtime";
1163
+ var Table = ({ className, ...props }) => {
1164
+ return /* @__PURE__ */ jsx55("div", { "data-id": "TableWrap", className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx55("table", { "data-id": "Table", className: cn("w-full caption-bottom text-sm", className), ...props }) });
1165
+ };
1166
+
1167
+ // src/components/table-header.tsx
1168
+ import { jsx as jsx56 } from "react/jsx-runtime";
1169
+ var TableHeader = ({ className, ...props }) => {
1170
+ return /* @__PURE__ */ jsx56("thead", { "data-id": "TableHeader", className: cn("[&_tr]:border-b", className), ...props });
1171
+ };
1172
+
1173
+ // src/components/table-body.tsx
1174
+ import { jsx as jsx57 } from "react/jsx-runtime";
1175
+ var TableBody = ({ className, ...props }) => {
1176
+ return /* @__PURE__ */ jsx57("tbody", { "data-id": "TableBody", className: cn("[&_tr:last-child]:border-0", className), ...props });
1177
+ };
1178
+
1179
+ // src/components/table-footer.tsx
1180
+ import { jsx as jsx58 } from "react/jsx-runtime";
1181
+ var TableFooter = ({ className, ...props }) => {
1182
+ return /* @__PURE__ */ jsx58(
1183
+ "tfoot",
1184
+ {
1185
+ "data-id": "TableFooter",
1186
+ className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className),
1187
+ ...props
1188
+ }
1189
+ );
1190
+ };
1191
+
1192
+ // src/components/table-row.tsx
1193
+ import { jsx as jsx59 } from "react/jsx-runtime";
1194
+ var TableRow = ({ className, ...props }) => {
1195
+ return /* @__PURE__ */ jsx59(
1196
+ "tr",
1197
+ {
1198
+ "data-id": "TableRow",
1199
+ className: cn(
1200
+ `border-b border-border ${motion.surface} hover:bg-muted/50 data-[state=selected]:bg-muted`,
1201
+ className
1202
+ ),
1203
+ ...props
1204
+ }
1205
+ );
1206
+ };
1207
+
1208
+ // src/components/table-head.tsx
1209
+ import { jsx as jsx60 } from "react/jsx-runtime";
1210
+ var TableHead = ({ className, ...props }) => {
1211
+ return /* @__PURE__ */ jsx60(
1212
+ "th",
1213
+ {
1214
+ "data-id": "TableHead",
1215
+ className: cn(
1216
+ "h-12 px-4 text-left align-middle font-sans text-xs font-semibold uppercase tracking-[0.12em] text-muted-foreground",
1217
+ className
1218
+ ),
1219
+ ...props
1220
+ }
1221
+ );
1222
+ };
1223
+
1224
+ // src/components/table-cell.tsx
1225
+ import { jsx as jsx61 } from "react/jsx-runtime";
1226
+ var TableCell = ({ className, ...props }) => {
1227
+ return /* @__PURE__ */ jsx61("td", { "data-id": "TableCell", className: cn("p-4 align-middle", className), ...props });
1228
+ };
1229
+
1230
+ // src/components/table-caption.tsx
1231
+ import { jsx as jsx62 } from "react/jsx-runtime";
1232
+ var TableCaption = ({ className, ...props }) => {
1233
+ return /* @__PURE__ */ jsx62(
1234
+ "caption",
1235
+ {
1236
+ "data-id": "TableCaption",
1237
+ className: cn("mt-4 text-sm text-muted-foreground", className),
1238
+ ...props
1239
+ }
1240
+ );
1241
+ };
1242
+
1243
+ // src/components/pagination.tsx
1244
+ import { jsx as jsx63 } from "react/jsx-runtime";
1245
+ var Pagination = ({ className, ...props }) => {
1246
+ return /* @__PURE__ */ jsx63(
1247
+ "nav",
1248
+ {
1249
+ "data-id": "Pagination",
1250
+ role: "navigation",
1251
+ "aria-label": "pagination",
1252
+ className: cn("mx-auto flex w-full justify-center", className),
1253
+ ...props
1254
+ }
1255
+ );
1256
+ };
1257
+
1258
+ // src/components/pagination-content.tsx
1259
+ import { jsx as jsx64 } from "react/jsx-runtime";
1260
+ var PaginationContent = ({ className, ...props }) => {
1261
+ return /* @__PURE__ */ jsx64("ul", { "data-id": "PaginationContent", className: cn("flex flex-row items-center gap-1", className), ...props });
1262
+ };
1263
+
1264
+ // src/components/pagination-item.tsx
1265
+ import { jsx as jsx65 } from "react/jsx-runtime";
1266
+ var PaginationItem = (props) => {
1267
+ return /* @__PURE__ */ jsx65("li", { "data-id": "PaginationItem", ...props });
1268
+ };
1269
+
1270
+ // src/components/pagination-link.tsx
1271
+ import { jsx as jsx66 } from "react/jsx-runtime";
1272
+ var PaginationLink = ({ className, isActive, ...props }) => {
1273
+ return /* @__PURE__ */ jsx66(
1274
+ "a",
1275
+ {
1276
+ "data-id": "PaginationLink",
1277
+ "aria-current": isActive ? "page" : void 0,
1278
+ className: cn(
1279
+ buttonVariants({ variant: isActive ? "default" : "outline", size: "icon" }),
1280
+ className
1281
+ ),
1282
+ ...props
1283
+ }
1284
+ );
1285
+ };
1286
+
1287
+ // src/components/pagination-previous.tsx
1288
+ import { ChevronLeft } from "lucide-react";
1289
+ import { jsx as jsx67, jsxs as jsxs8 } from "react/jsx-runtime";
1290
+ var PaginationPrevious = ({ className, ...props }) => {
1291
+ return /* @__PURE__ */ jsxs8(
1292
+ PaginationLink,
1293
+ {
1294
+ "aria-label": "Go to previous page",
1295
+ className: cn("w-auto gap-1 px-3", className),
1296
+ ...props,
1297
+ children: [
1298
+ /* @__PURE__ */ jsx67(ChevronLeft, { className: "size-4" }),
1299
+ /* @__PURE__ */ jsx67("span", { children: "Prev" })
1300
+ ]
1301
+ }
1302
+ );
1303
+ };
1304
+
1305
+ // src/components/pagination-next.tsx
1306
+ import { ChevronRight } from "lucide-react";
1307
+ import { jsx as jsx68, jsxs as jsxs9 } from "react/jsx-runtime";
1308
+ var PaginationNext = ({ className, ...props }) => {
1309
+ return /* @__PURE__ */ jsxs9(PaginationLink, { "aria-label": "Go to next page", className: cn("w-auto gap-1 px-3", className), ...props, children: [
1310
+ /* @__PURE__ */ jsx68("span", { children: "Next" }),
1311
+ /* @__PURE__ */ jsx68(ChevronRight, { className: "size-4" })
1312
+ ] });
1313
+ };
1314
+
1315
+ // src/components/pagination-ellipsis.tsx
1316
+ import { MoreHorizontal } from "lucide-react";
1317
+ import { jsx as jsx69, jsxs as jsxs10 } from "react/jsx-runtime";
1318
+ var PaginationEllipsis = ({ className, ...props }) => {
1319
+ return /* @__PURE__ */ jsxs10(
1320
+ "span",
1321
+ {
1322
+ "data-id": "PaginationEllipsis",
1323
+ "aria-hidden": true,
1324
+ className: cn("flex size-9 items-center justify-center", className),
1325
+ ...props,
1326
+ children: [
1327
+ /* @__PURE__ */ jsx69(MoreHorizontal, { className: "size-4" }),
1328
+ /* @__PURE__ */ jsx69("span", { className: "sr-only", children: "More pages" })
1329
+ ]
1330
+ }
1331
+ );
1332
+ };
1333
+
1334
+ // src/components/breadcrumb.tsx
1335
+ import { jsx as jsx70 } from "react/jsx-runtime";
1336
+ var Breadcrumb = ({ ...props }) => {
1337
+ return /* @__PURE__ */ jsx70("nav", { "data-id": "Breadcrumb", "aria-label": "breadcrumb", ...props });
1338
+ };
1339
+
1340
+ // src/components/breadcrumb-list.tsx
1341
+ import { jsx as jsx71 } from "react/jsx-runtime";
1342
+ var BreadcrumbList = ({ className, ...props }) => {
1343
+ return /* @__PURE__ */ jsx71(
1344
+ "ol",
1345
+ {
1346
+ "data-id": "BreadcrumbList",
1347
+ className: cn("flex flex-wrap items-center gap-1.5 text-sm text-muted-foreground", className),
1348
+ ...props
1349
+ }
1350
+ );
1351
+ };
1352
+
1353
+ // src/components/breadcrumb-item.tsx
1354
+ import { jsx as jsx72 } from "react/jsx-runtime";
1355
+ var BreadcrumbItem = ({ className, ...props }) => {
1356
+ return /* @__PURE__ */ jsx72("li", { "data-id": "BreadcrumbItem", className: cn("inline-flex items-center gap-1.5", className), ...props });
1357
+ };
1358
+
1359
+ // src/components/breadcrumb-link.tsx
1360
+ import { Slot as Slot2 } from "@radix-ui/react-slot";
1361
+ import { jsx as jsx73 } from "react/jsx-runtime";
1362
+ var BreadcrumbLink = ({ asChild, className, ...props }) => {
1363
+ const Comp = asChild ? Slot2 : "a";
1364
+ return /* @__PURE__ */ jsx73(
1365
+ Comp,
1366
+ {
1367
+ "data-id": "BreadcrumbLink",
1368
+ className: cn(`${motion.surface} hover:text-foreground`, className),
1369
+ ...props
1370
+ }
1371
+ );
1372
+ };
1373
+
1374
+ // src/components/breadcrumb-page.tsx
1375
+ import { jsx as jsx74 } from "react/jsx-runtime";
1376
+ var BreadcrumbPage = ({ className, ...props }) => {
1377
+ return /* @__PURE__ */ jsx74(
1378
+ "span",
1379
+ {
1380
+ "data-id": "BreadcrumbPage",
1381
+ role: "link",
1382
+ "aria-disabled": "true",
1383
+ "aria-current": "page",
1384
+ className: cn("font-medium text-foreground", className),
1385
+ ...props
1386
+ }
1387
+ );
1388
+ };
1389
+
1390
+ // src/components/breadcrumb-separator.tsx
1391
+ import { ChevronRight as ChevronRight2 } from "lucide-react";
1392
+ import { jsx as jsx75 } from "react/jsx-runtime";
1393
+ var BreadcrumbSeparator = ({ children, className, ...props }) => {
1394
+ return /* @__PURE__ */ jsx75("li", { "data-id": "BreadcrumbSeparator", role: "presentation", "aria-hidden": true, className: cn("[&>svg]:size-3.5", className), ...props, children: children ?? /* @__PURE__ */ jsx75(ChevronRight2, {}) });
1395
+ };
1396
+
1397
+ // src/components/form.tsx
1398
+ import { createContext, useContext } from "react";
1399
+ import {
1400
+ Controller,
1401
+ FormProvider,
1402
+ useFormContext
1403
+ } from "react-hook-form";
1404
+ import { jsx as jsx76 } from "react/jsx-runtime";
1405
+ var Form = FormProvider;
1406
+ var FormFieldContext = createContext({});
1407
+ var FormField = ({
1408
+ ...props
1409
+ }) => {
1410
+ return /* @__PURE__ */ jsx76(FormFieldContext, { value: { name: props.name }, children: /* @__PURE__ */ jsx76(Controller, { ...props }) });
1411
+ };
1412
+ var FormItemContext = createContext({});
1413
+ var useFormField = () => {
1414
+ const fieldContext = useContext(FormFieldContext);
1415
+ const itemContext = useContext(FormItemContext);
1416
+ const { getFieldState, formState } = useFormContext();
1417
+ const fieldState = getFieldState(fieldContext.name, formState);
1418
+ if (!fieldContext.name) {
1419
+ throw new Error("useFormField must be used within FormField");
1420
+ }
1421
+ const { id } = itemContext;
1422
+ return {
1423
+ id,
1424
+ name: fieldContext.name,
1425
+ formItemId: `${id}-form-item`,
1426
+ formDescriptionId: `${id}-form-item-description`,
1427
+ formMessageId: `${id}-form-item-message`,
1428
+ ...fieldState
1429
+ };
1430
+ };
1431
+
1432
+ // src/components/form-item.tsx
1433
+ import { useId } from "react";
1434
+ import { jsx as jsx77 } from "react/jsx-runtime";
1435
+ var FormItem = ({ className, ...props }) => {
1436
+ const id = useId();
1437
+ return /* @__PURE__ */ jsx77(FormItemContext, { value: { id }, children: /* @__PURE__ */ jsx77("div", { "data-id": "FormItem", className: cn("flex flex-col gap-2", className), ...props }) });
1438
+ };
1439
+
1440
+ // src/components/form-label.tsx
1441
+ import { jsx as jsx78 } from "react/jsx-runtime";
1442
+ var FormLabel = ({ className, ...props }) => {
1443
+ const { error, formItemId } = useFormField();
1444
+ return /* @__PURE__ */ jsx78(
1445
+ Label2,
1446
+ {
1447
+ "data-id": "FormLabel",
1448
+ htmlFor: formItemId,
1449
+ className: cn(error && "text-destructive", className),
1450
+ ...props
1451
+ }
1452
+ );
1453
+ };
1454
+
1455
+ // src/components/form-control.tsx
1456
+ import { Slot as Slot3 } from "@radix-ui/react-slot";
1457
+ import { jsx as jsx79 } from "react/jsx-runtime";
1458
+ var FormControl = ({ ...props }) => {
1459
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
1460
+ return /* @__PURE__ */ jsx79(
1461
+ Slot3,
1462
+ {
1463
+ "data-id": "FormControl",
1464
+ id: formItemId,
1465
+ "aria-describedby": !error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`,
1466
+ "aria-invalid": !!error,
1467
+ ...props
1468
+ }
1469
+ );
1470
+ };
1471
+
1472
+ // src/components/form-description.tsx
1473
+ import { jsx as jsx80 } from "react/jsx-runtime";
1474
+ var FormDescription = ({ className, ...props }) => {
1475
+ const { formDescriptionId } = useFormField();
1476
+ return /* @__PURE__ */ jsx80(
1477
+ "p",
1478
+ {
1479
+ "data-id": "FormDescription",
1480
+ id: formDescriptionId,
1481
+ className: cn("text-sm text-muted-foreground", className),
1482
+ ...props
1483
+ }
1484
+ );
1485
+ };
1486
+
1487
+ // src/components/form-message.tsx
1488
+ import { jsx as jsx81 } from "react/jsx-runtime";
1489
+ var FormMessage = ({ className, children, ...props }) => {
1490
+ const { error, formMessageId } = useFormField();
1491
+ const body = error ? String(error.message ?? "") : children;
1492
+ if (!body) {
1493
+ return null;
1494
+ }
1495
+ return /* @__PURE__ */ jsx81(
1496
+ "p",
1497
+ {
1498
+ "data-id": "FormMessage",
1499
+ id: formMessageId,
1500
+ className: cn("text-sm font-medium text-destructive", className),
1501
+ ...props,
1502
+ children: body
1503
+ }
1504
+ );
1505
+ };
1506
+
1507
+ // src/components/toaster.tsx
1508
+ import { Toaster as SonnerToaster, toast } from "sonner";
1509
+ import { jsx as jsx82 } from "react/jsx-runtime";
1510
+ var Toaster = ({ ...props }) => {
1511
+ return /* @__PURE__ */ jsx82(
1512
+ SonnerToaster,
1513
+ {
1514
+ "data-id": "Toaster",
1515
+ theme: "light",
1516
+ className: "toaster group",
1517
+ toastOptions: {
1518
+ classNames: {
1519
+ toast: "group toast border border-border bg-card text-card-foreground shadow-[0_18px_40px_rgba(0,0,0,0.08)]",
1520
+ description: "text-muted-foreground",
1521
+ actionButton: "bg-primary text-primary-foreground",
1522
+ cancelButton: "bg-muted text-muted-foreground"
1523
+ }
1524
+ },
1525
+ ...props
1526
+ }
1527
+ );
1528
+ };
1529
+
1530
+ // src/components/command.tsx
1531
+ import { Command as CommandPrimitive } from "cmdk";
1532
+ import { jsx as jsx83 } from "react/jsx-runtime";
1533
+ var Command = ({ className, ...props }) => {
1534
+ return /* @__PURE__ */ jsx83(
1535
+ CommandPrimitive,
1536
+ {
1537
+ "data-id": "Command",
1538
+ className: cn(
1539
+ "flex h-full w-full flex-col overflow-hidden rounded-lg bg-popover text-popover-foreground",
1540
+ className
1541
+ ),
1542
+ ...props
1543
+ }
1544
+ );
1545
+ };
1546
+
1547
+ // src/components/command-input.tsx
1548
+ import { Command as CommandPrimitive2 } from "cmdk";
1549
+ import { Search } from "lucide-react";
1550
+ import { jsx as jsx84, jsxs as jsxs11 } from "react/jsx-runtime";
1551
+ var CommandInput = ({ className, ...props }) => {
1552
+ return /* @__PURE__ */ jsxs11("div", { className: "flex items-center border-b border-border px-3", "data-id": "CommandInputWrap", children: [
1553
+ /* @__PURE__ */ jsx84(Search, { className: "mr-2 size-4 shrink-0 opacity-50" }),
1554
+ /* @__PURE__ */ jsx84(
1555
+ CommandPrimitive2.Input,
1556
+ {
1557
+ "data-id": "CommandInput",
1558
+ className: cn(
1559
+ `flex h-11 w-full bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50`,
1560
+ className
1561
+ ),
1562
+ ...props
1563
+ }
1564
+ )
1565
+ ] });
1566
+ };
1567
+
1568
+ // src/components/command-list.tsx
1569
+ import { Command as CommandPrimitive3 } from "cmdk";
1570
+ import { jsx as jsx85 } from "react/jsx-runtime";
1571
+ var CommandList = ({ className, ...props }) => {
1572
+ return /* @__PURE__ */ jsx85(
1573
+ CommandPrimitive3.List,
1574
+ {
1575
+ "data-id": "CommandList",
1576
+ className: cn("max-h-64 overflow-y-auto overflow-x-hidden p-1", className),
1577
+ ...props
1578
+ }
1579
+ );
1580
+ };
1581
+
1582
+ // src/components/command-empty.tsx
1583
+ import { Command as CommandPrimitive4 } from "cmdk";
1584
+ import { jsx as jsx86 } from "react/jsx-runtime";
1585
+ var CommandEmpty = ({ className, ...props }) => {
1586
+ return /* @__PURE__ */ jsx86(
1587
+ CommandPrimitive4.Empty,
1588
+ {
1589
+ "data-id": "CommandEmpty",
1590
+ className: cn("py-6 text-center text-sm text-muted-foreground", className),
1591
+ ...props
1592
+ }
1593
+ );
1594
+ };
1595
+
1596
+ // src/components/command-group.tsx
1597
+ import { Command as CommandPrimitive5 } from "cmdk";
1598
+ import { jsx as jsx87 } from "react/jsx-runtime";
1599
+ var CommandGroup = ({ className, ...props }) => {
1600
+ return /* @__PURE__ */ jsx87(
1601
+ CommandPrimitive5.Group,
1602
+ {
1603
+ "data-id": "CommandGroup",
1604
+ className: cn(
1605
+ "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-[0.12em] [&_[cmdk-group-heading]]:text-muted-foreground",
1606
+ className
1607
+ ),
1608
+ ...props
1609
+ }
1610
+ );
1611
+ };
1612
+
1613
+ // src/components/command-item.tsx
1614
+ import { Command as CommandPrimitive6 } from "cmdk";
1615
+ import { jsx as jsx88 } from "react/jsx-runtime";
1616
+ var CommandItem = ({ className, ...props }) => {
1617
+ return /* @__PURE__ */ jsx88(
1618
+ CommandPrimitive6.Item,
1619
+ {
1620
+ "data-id": "CommandItem",
1621
+ className: cn(
1622
+ `relative flex cursor-default items-center rounded-md px-3 py-2 text-sm outline-none ${motion.surface} data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50`,
1623
+ className
1624
+ ),
1625
+ ...props
1626
+ }
1627
+ );
1628
+ };
1629
+
1630
+ // src/components/combobox.tsx
1631
+ import { useState } from "react";
1632
+ import { Check as Check3, ChevronsUpDown } from "lucide-react";
1633
+ import { jsx as jsx89, jsxs as jsxs12 } from "react/jsx-runtime";
1634
+ var Combobox = ({
1635
+ options,
1636
+ value,
1637
+ onValueChange,
1638
+ placeholder = "Select\u2026",
1639
+ emptyText = "No results.",
1640
+ className
1641
+ }) => {
1642
+ const [open, openSetter] = useState(false);
1643
+ const selected = options.find((option) => option.value === value);
1644
+ return /* @__PURE__ */ jsxs12(Popover, { open, onOpenChange: openSetter, children: [
1645
+ /* @__PURE__ */ jsx89(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs12(
1646
+ Button,
1647
+ {
1648
+ "data-id": "Combobox",
1649
+ variant: "outline",
1650
+ role: "combobox",
1651
+ "aria-expanded": open,
1652
+ className: cn("w-full justify-between normal-case tracking-normal", className),
1653
+ children: [
1654
+ selected?.label ?? placeholder,
1655
+ /* @__PURE__ */ jsx89(ChevronsUpDown, { className: "size-4 opacity-50" })
1656
+ ]
1657
+ }
1658
+ ) }),
1659
+ /* @__PURE__ */ jsx89(PopoverContent, { className: "w-[var(--radix-popover-trigger-width)] p-0", children: /* @__PURE__ */ jsxs12(Command, { children: [
1660
+ /* @__PURE__ */ jsx89(CommandInput, { placeholder }),
1661
+ /* @__PURE__ */ jsxs12(CommandList, { children: [
1662
+ /* @__PURE__ */ jsx89(CommandEmpty, { children: emptyText }),
1663
+ options.map((option) => /* @__PURE__ */ jsxs12(
1664
+ CommandItem,
1665
+ {
1666
+ value: option.value,
1667
+ onSelect: () => {
1668
+ onValueChange?.(option.value === value ? "" : option.value);
1669
+ openSetter(false);
1670
+ },
1671
+ children: [
1672
+ /* @__PURE__ */ jsx89(Check3, { className: cn("mr-2 size-4", value === option.value ? "opacity-100" : "opacity-0") }),
1673
+ option.label
1674
+ ]
1675
+ },
1676
+ option.value
1677
+ ))
1678
+ ] })
1679
+ ] }) })
1680
+ ] });
1681
+ };
1682
+
1683
+ // src/components/context-menu.tsx
1684
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
1685
+ var ContextMenu = ContextMenuPrimitive.Root;
1686
+
1687
+ // src/components/context-menu-trigger.tsx
1688
+ import * as ContextMenuPrimitive2 from "@radix-ui/react-context-menu";
1689
+ var ContextMenuTrigger = ContextMenuPrimitive2.Trigger;
1690
+
1691
+ // src/components/context-menu-content.tsx
1692
+ import * as ContextMenuPrimitive3 from "@radix-ui/react-context-menu";
1693
+
1694
+ // src/theme/overlay.ts
1695
+ var overlayPanel = `z-50 overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-[0_18px_40px_rgba(0,0,0,0.08)] ${motion.surface}`;
1696
+ var menuItem = `relative flex cursor-default items-center rounded-md px-3 py-2 text-sm outline-none ${motion.surface} focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50`;
1697
+
1698
+ // src/components/context-menu-content.tsx
1699
+ import { jsx as jsx90 } from "react/jsx-runtime";
1700
+ var ContextMenuContent = ({ className, ...props }) => {
1701
+ return /* @__PURE__ */ jsx90(ContextMenuPrimitive3.Portal, { children: /* @__PURE__ */ jsx90(
1702
+ ContextMenuPrimitive3.Content,
1703
+ {
1704
+ "data-id": "ContextMenuContent",
1705
+ className: cn(overlayPanel, "min-w-40 p-1", className),
1706
+ ...props
1707
+ }
1708
+ ) });
1709
+ };
1710
+
1711
+ // src/components/context-menu-item.tsx
1712
+ import * as ContextMenuPrimitive4 from "@radix-ui/react-context-menu";
1713
+ import { jsx as jsx91 } from "react/jsx-runtime";
1714
+ var ContextMenuItem = ({ className, ...props }) => {
1715
+ return /* @__PURE__ */ jsx91(ContextMenuPrimitive4.Item, { "data-id": "ContextMenuItem", className: cn(menuItem, className), ...props });
1716
+ };
1717
+
1718
+ // src/components/alert-dialog.tsx
1719
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
1720
+ var AlertDialog = AlertDialogPrimitive.Root;
1721
+
1722
+ // src/components/alert-dialog-trigger.tsx
1723
+ import * as AlertDialogPrimitive2 from "@radix-ui/react-alert-dialog";
1724
+ var AlertDialogTrigger = AlertDialogPrimitive2.Trigger;
1725
+
1726
+ // src/components/alert-dialog-content.tsx
1727
+ import * as AlertDialogPrimitive4 from "@radix-ui/react-alert-dialog";
1728
+
1729
+ // src/components/alert-dialog-overlay.tsx
1730
+ import * as AlertDialogPrimitive3 from "@radix-ui/react-alert-dialog";
1731
+ import { jsx as jsx92 } from "react/jsx-runtime";
1732
+ var AlertDialogOverlay = ({ className, ...props }) => {
1733
+ return /* @__PURE__ */ jsx92(
1734
+ AlertDialogPrimitive3.Overlay,
1735
+ {
1736
+ "data-id": "AlertDialogOverlay",
1737
+ className: cn(
1738
+ "fixed inset-0 z-50 bg-black/40 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1739
+ className
1740
+ ),
1741
+ ...props
1742
+ }
1743
+ );
1744
+ };
1745
+
1746
+ // src/components/alert-dialog-content.tsx
1747
+ import { jsx as jsx93, jsxs as jsxs13 } from "react/jsx-runtime";
1748
+ var AlertDialogContent = ({ className, ...props }) => {
1749
+ return /* @__PURE__ */ jsxs13(AlertDialogPrimitive4.Portal, { children: [
1750
+ /* @__PURE__ */ jsx93(AlertDialogOverlay, {}),
1751
+ /* @__PURE__ */ jsx93(
1752
+ AlertDialogPrimitive4.Content,
1753
+ {
1754
+ "data-id": "AlertDialogContent",
1755
+ className: cn(
1756
+ `fixed top-1/2 left-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg border border-border bg-card p-6 shadow-[0_24px_48px_rgba(0,0,0,0.12)] ${motion.surface} 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`,
1757
+ className
1758
+ ),
1759
+ ...props
1760
+ }
1761
+ )
1762
+ ] });
1763
+ };
1764
+
1765
+ // src/components/alert-dialog-header.tsx
1766
+ import { jsx as jsx94 } from "react/jsx-runtime";
1767
+ var AlertDialogHeader = ({ className, ...props }) => {
1768
+ return /* @__PURE__ */ jsx94("div", { "data-id": "AlertDialogHeader", className: cn("flex flex-col gap-2", className), ...props });
1769
+ };
1770
+
1771
+ // src/components/alert-dialog-footer.tsx
1772
+ import { jsx as jsx95 } from "react/jsx-runtime";
1773
+ var AlertDialogFooter = ({ className, ...props }) => {
1774
+ return /* @__PURE__ */ jsx95(
1775
+ "div",
1776
+ {
1777
+ "data-id": "AlertDialogFooter",
1778
+ className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
1779
+ ...props
1780
+ }
1781
+ );
1782
+ };
1783
+
1784
+ // src/components/alert-dialog-title.tsx
1785
+ import * as AlertDialogPrimitive5 from "@radix-ui/react-alert-dialog";
1786
+ import { jsx as jsx96 } from "react/jsx-runtime";
1787
+ var AlertDialogTitle = ({ className, ...props }) => {
1788
+ return /* @__PURE__ */ jsx96(
1789
+ AlertDialogPrimitive5.Title,
1790
+ {
1791
+ "data-id": "AlertDialogTitle",
1792
+ className: cn("font-sans text-lg font-semibold", className),
1793
+ ...props
1794
+ }
1795
+ );
1796
+ };
1797
+
1798
+ // src/components/alert-dialog-description.tsx
1799
+ import * as AlertDialogPrimitive6 from "@radix-ui/react-alert-dialog";
1800
+ import { jsx as jsx97 } from "react/jsx-runtime";
1801
+ var AlertDialogDescription = ({ className, ...props }) => {
1802
+ return /* @__PURE__ */ jsx97(
1803
+ AlertDialogPrimitive6.Description,
1804
+ {
1805
+ "data-id": "AlertDialogDescription",
1806
+ className: cn("text-sm text-muted-foreground", className),
1807
+ ...props
1808
+ }
1809
+ );
1810
+ };
1811
+
1812
+ // src/components/alert-dialog-action.tsx
1813
+ import * as AlertDialogPrimitive7 from "@radix-ui/react-alert-dialog";
1814
+ import { jsx as jsx98 } from "react/jsx-runtime";
1815
+ var AlertDialogAction = ({ className, ...props }) => {
1816
+ return /* @__PURE__ */ jsx98(
1817
+ AlertDialogPrimitive7.Action,
1818
+ {
1819
+ "data-id": "AlertDialogAction",
1820
+ className: cn(buttonVariants(), className),
1821
+ ...props
1822
+ }
1823
+ );
1824
+ };
1825
+
1826
+ // src/components/alert-dialog-cancel.tsx
1827
+ import * as AlertDialogPrimitive8 from "@radix-ui/react-alert-dialog";
1828
+ import { jsx as jsx99 } from "react/jsx-runtime";
1829
+ var AlertDialogCancel = ({ className, ...props }) => {
1830
+ return /* @__PURE__ */ jsx99(
1831
+ AlertDialogPrimitive8.Cancel,
1832
+ {
1833
+ "data-id": "AlertDialogCancel",
1834
+ className: cn(buttonVariants({ variant: "outline" }), className),
1835
+ ...props
1836
+ }
1837
+ );
1838
+ };
1839
+
1840
+ // src/components/hover-card.tsx
1841
+ import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
1842
+ var HoverCard = HoverCardPrimitive.Root;
1843
+
1844
+ // src/components/hover-card-trigger.tsx
1845
+ import * as HoverCardPrimitive2 from "@radix-ui/react-hover-card";
1846
+ var HoverCardTrigger = HoverCardPrimitive2.Trigger;
1847
+
1848
+ // src/components/hover-card-content.tsx
1849
+ import * as HoverCardPrimitive3 from "@radix-ui/react-hover-card";
1850
+ import { jsx as jsx100 } from "react/jsx-runtime";
1851
+ var HoverCardContent = ({
1852
+ className,
1853
+ align = "center",
1854
+ sideOffset = 8,
1855
+ ...props
1856
+ }) => {
1857
+ return /* @__PURE__ */ jsx100(
1858
+ HoverCardPrimitive3.Content,
1859
+ {
1860
+ "data-id": "HoverCardContent",
1861
+ align,
1862
+ sideOffset,
1863
+ className: cn(
1864
+ overlayPanel,
1865
+ "w-64 p-4 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",
1866
+ className
1867
+ ),
1868
+ ...props
1869
+ }
1870
+ );
1871
+ };
1872
+
1873
+ // src/components/progress.tsx
1874
+ import * as ProgressPrimitive from "@radix-ui/react-progress";
1875
+ import { jsx as jsx101 } from "react/jsx-runtime";
1876
+ var Progress = ({ className, value, ...props }) => {
1877
+ return /* @__PURE__ */ jsx101(
1878
+ ProgressPrimitive.Root,
1879
+ {
1880
+ "data-id": "Progress",
1881
+ className: cn("relative h-2 w-full overflow-hidden rounded-pill bg-muted", className),
1882
+ ...props,
1883
+ children: /* @__PURE__ */ jsx101(
1884
+ ProgressPrimitive.Indicator,
1885
+ {
1886
+ className: `h-full w-full flex-1 bg-primary ${motion.surface}`,
1887
+ style: { transform: `translateX(-${100 - (value ?? 0)}%)` }
1888
+ }
1889
+ )
1890
+ }
1891
+ );
1892
+ };
1893
+
1894
+ // src/components/toggle.tsx
1895
+ import * as TogglePrimitive from "@radix-ui/react-toggle";
1896
+ import { cva as cva10 } from "class-variance-authority";
1897
+ import { jsx as jsx102 } from "react/jsx-runtime";
1898
+ var toggleVariants = cva10(
1899
+ `inline-flex items-center justify-center gap-2 rounded-pill font-sans text-sm font-semibold ${motion.surface} hover:bg-muted focus-visible:outline-none focus-visible:shadow-[0_0_0_3px_rgba(255,229,0,0.28)] disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-primary data-[state=on]:text-primary-foreground`,
1900
+ {
1901
+ variants: {
1902
+ variant: {
1903
+ default: "bg-transparent",
1904
+ outline: "border border-border bg-card"
1905
+ },
1906
+ size: {
1907
+ default: "h-9 px-3",
1908
+ sm: "h-8 px-2.5 text-xs",
1909
+ lg: "h-10 px-4"
1910
+ }
1911
+ },
1912
+ defaultVariants: {
1913
+ variant: "default",
1914
+ size: "default"
1915
+ }
1916
+ }
1917
+ );
1918
+ var Toggle = ({ className, variant, size, ...props }) => {
1919
+ return /* @__PURE__ */ jsx102(
1920
+ TogglePrimitive.Root,
1921
+ {
1922
+ "data-id": "Toggle",
1923
+ className: cn(toggleVariants({ variant, size }), className),
1924
+ ...props
1925
+ }
1926
+ );
1927
+ };
1928
+
1929
+ // src/components/toggle-group.tsx
1930
+ import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
1931
+ import { createContext as createContext2, useContext as useContext2 } from "react";
1932
+ import { jsx as jsx103 } from "react/jsx-runtime";
1933
+ var ToggleGroupContext = createContext2({
1934
+ size: "default",
1935
+ variant: "default"
1936
+ });
1937
+ var ToggleGroup = ({ className, variant, size, children, ...props }) => {
1938
+ return /* @__PURE__ */ jsx103(
1939
+ ToggleGroupPrimitive.Root,
1940
+ {
1941
+ "data-id": "ToggleGroup",
1942
+ className: cn("flex items-center gap-1", className),
1943
+ ...props,
1944
+ children: /* @__PURE__ */ jsx103(ToggleGroupContext, { value: { variant, size }, children })
1945
+ }
1946
+ );
1947
+ };
1948
+ var useToggleGroup = () => useContext2(ToggleGroupContext);
1949
+
1950
+ // src/components/toggle-group-item.tsx
1951
+ import * as ToggleGroupPrimitive2 from "@radix-ui/react-toggle-group";
1952
+ import { jsx as jsx104 } from "react/jsx-runtime";
1953
+ var ToggleGroupItem = ({ className, children, ...props }) => {
1954
+ const { variant, size } = useToggleGroup();
1955
+ return /* @__PURE__ */ jsx104(
1956
+ ToggleGroupPrimitive2.Item,
1957
+ {
1958
+ "data-id": "ToggleGroupItem",
1959
+ className: cn(toggleVariants({ variant, size }), className),
1960
+ ...props,
1961
+ children
1962
+ }
1963
+ );
1964
+ };
1965
+
1966
+ // src/components/scroll-area.tsx
1967
+ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
1968
+ import { jsx as jsx105, jsxs as jsxs14 } from "react/jsx-runtime";
1969
+ var ScrollArea = ({ className, children, ...props }) => {
1970
+ return /* @__PURE__ */ jsxs14(ScrollAreaPrimitive.Root, { "data-id": "ScrollArea", className: cn("relative overflow-hidden", className), ...props, children: [
1971
+ /* @__PURE__ */ jsx105(ScrollAreaPrimitive.Viewport, { className: "size-full rounded-[inherit]", children }),
1972
+ /* @__PURE__ */ jsx105(ScrollBar, {}),
1973
+ /* @__PURE__ */ jsx105(ScrollAreaPrimitive.Corner, {})
1974
+ ] });
1975
+ };
1976
+ var ScrollBar = ({ className, orientation = "vertical", ...props }) => {
1977
+ return /* @__PURE__ */ jsx105(
1978
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
1979
+ {
1980
+ "data-id": "ScrollBar",
1981
+ orientation,
1982
+ className: cn(
1983
+ "flex touch-none p-px select-none",
1984
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent",
1985
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
1986
+ className
1987
+ ),
1988
+ ...props,
1989
+ children: /* @__PURE__ */ jsx105(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-pill bg-border" })
1990
+ }
1991
+ );
1992
+ };
1993
+
1994
+ // src/components/collapsible.tsx
1995
+ import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
1996
+ var Collapsible = CollapsiblePrimitive.Root;
1997
+
1998
+ // src/components/collapsible-trigger.tsx
1999
+ import * as CollapsiblePrimitive2 from "@radix-ui/react-collapsible";
2000
+ var CollapsibleTrigger2 = CollapsiblePrimitive2.CollapsibleTrigger;
2001
+
2002
+ // src/components/collapsible-content.tsx
2003
+ import * as CollapsiblePrimitive3 from "@radix-ui/react-collapsible";
2004
+ import { jsx as jsx106 } from "react/jsx-runtime";
2005
+ var CollapsibleContent2 = ({ className, ...props }) => {
2006
+ return /* @__PURE__ */ jsx106(
2007
+ CollapsiblePrimitive3.CollapsibleContent,
2008
+ {
2009
+ "data-id": "CollapsibleContent",
2010
+ className: cn(className),
2011
+ ...props
2012
+ }
2013
+ );
2014
+ };
2015
+
2016
+ // src/components/calendar.tsx
2017
+ import { DayPicker } from "react-day-picker";
2018
+ import { jsx as jsx107 } from "react/jsx-runtime";
2019
+ var Calendar = ({ className, ...props }) => {
2020
+ return /* @__PURE__ */ jsx107(
2021
+ DayPicker,
2022
+ {
2023
+ "data-id": "Calendar",
2024
+ className: cn("p-3 font-sans", className),
2025
+ ...props
2026
+ }
2027
+ );
2028
+ };
2029
+
2030
+ // src/components/date-picker.tsx
2031
+ import { format } from "date-fns";
2032
+ import { CalendarIcon } from "lucide-react";
2033
+ import { useState as useState2 } from "react";
2034
+ import { jsx as jsx108, jsxs as jsxs15 } from "react/jsx-runtime";
2035
+ var DatePicker = ({
2036
+ value,
2037
+ onValueChange,
2038
+ placeholder = "Pick a date",
2039
+ className
2040
+ }) => {
2041
+ const [open, openSetter] = useState2(false);
2042
+ return /* @__PURE__ */ jsxs15(Popover, { open, onOpenChange: openSetter, children: [
2043
+ /* @__PURE__ */ jsx108(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs15(
2044
+ Button,
2045
+ {
2046
+ "data-id": "DatePicker",
2047
+ variant: "outline",
2048
+ className: cn(
2049
+ "w-full justify-start normal-case tracking-normal",
2050
+ !value && "text-muted-foreground",
2051
+ className
2052
+ ),
2053
+ children: [
2054
+ /* @__PURE__ */ jsx108(CalendarIcon, { className: "size-4" }),
2055
+ value ? format(value, "PPP") : placeholder
2056
+ ]
2057
+ }
2058
+ ) }),
2059
+ /* @__PURE__ */ jsx108(PopoverContent, { className: "w-auto p-0", children: /* @__PURE__ */ jsx108(
2060
+ Calendar,
2061
+ {
2062
+ mode: "single",
2063
+ selected: value,
2064
+ onSelect: (date) => {
2065
+ onValueChange?.(date);
2066
+ openSetter(false);
2067
+ }
2068
+ }
2069
+ ) })
2070
+ ] });
2071
+ };
2072
+
2073
+ // src/components/chart-container.tsx
2074
+ import { ResponsiveContainer } from "recharts";
2075
+ import { jsx as jsx109 } from "react/jsx-runtime";
2076
+ var ChartContainer = ({ className, children, ...props }) => {
2077
+ return /* @__PURE__ */ jsx109("div", { "data-id": "ChartContainer", className: cn("h-64 w-full", className), ...props, children: /* @__PURE__ */ jsx109(ResponsiveContainer, { width: "100%", height: "100%", children }) });
2078
+ };
2079
+
2080
+ // src/components/chart-tooltip.tsx
2081
+ import { Tooltip as Tooltip2 } from "recharts";
2082
+
2083
+ // src/components/carousel.tsx
2084
+ import useEmblaCarousel from "embla-carousel-react";
2085
+ import { ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight3 } from "lucide-react";
2086
+ import { createContext as createContext3, useContext as useContext3 } from "react";
2087
+ import { jsx as jsx110, jsxs as jsxs16 } from "react/jsx-runtime";
2088
+ var CarouselContext = createContext3(null);
2089
+ var useCarousel = () => {
2090
+ const context = useContext3(CarouselContext);
2091
+ if (!context) {
2092
+ throw new Error("useCarousel must be used within Carousel");
2093
+ }
2094
+ return context;
2095
+ };
2096
+ var Carousel = ({ className, opts, children, ...props }) => {
2097
+ const [carouselRef, api] = useEmblaCarousel(opts);
2098
+ const scrollPrev = () => api?.scrollPrev();
2099
+ const scrollNext = () => api?.scrollNext();
2100
+ const onKeyDown = (event) => {
2101
+ if (event.key === "ArrowLeft") {
2102
+ event.preventDefault();
2103
+ scrollPrev();
2104
+ }
2105
+ if (event.key === "ArrowRight") {
2106
+ event.preventDefault();
2107
+ scrollNext();
2108
+ }
2109
+ };
2110
+ return /* @__PURE__ */ jsx110(CarouselContext, { value: { carouselRef, api, scrollPrev, scrollNext }, children: /* @__PURE__ */ jsx110(
2111
+ "div",
2112
+ {
2113
+ "data-id": "Carousel",
2114
+ className: cn("relative", className),
2115
+ role: "region",
2116
+ "aria-roledescription": "carousel",
2117
+ onKeyDown,
2118
+ ...props,
2119
+ children
2120
+ }
2121
+ ) });
2122
+ };
2123
+ var CarouselContent = ({ className, ...props }) => {
2124
+ const { carouselRef } = useCarousel();
2125
+ return /* @__PURE__ */ jsx110("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ jsx110("div", { "data-id": "CarouselContent", className: cn("flex", className), ...props }) });
2126
+ };
2127
+ var CarouselItem = ({ className, ...props }) => {
2128
+ return /* @__PURE__ */ jsx110(
2129
+ "div",
2130
+ {
2131
+ "data-id": "CarouselItem",
2132
+ role: "group",
2133
+ "aria-roledescription": "slide",
2134
+ className: cn("min-w-0 shrink-0 grow-0 basis-full", className),
2135
+ ...props
2136
+ }
2137
+ );
2138
+ };
2139
+ var CarouselPrevious = ({ className, ...props }) => {
2140
+ const { scrollPrev } = useCarousel();
2141
+ return /* @__PURE__ */ jsxs16(
2142
+ Button,
2143
+ {
2144
+ "data-id": "CarouselPrevious",
2145
+ variant: "outline",
2146
+ size: "icon",
2147
+ className: cn("absolute top-1/2 -left-4 -translate-y-1/2", className),
2148
+ onClick: scrollPrev,
2149
+ ...props,
2150
+ children: [
2151
+ /* @__PURE__ */ jsx110(ChevronLeft2, {}),
2152
+ /* @__PURE__ */ jsx110("span", { className: "sr-only", children: "Previous slide" })
2153
+ ]
2154
+ }
2155
+ );
2156
+ };
2157
+ var CarouselNext = ({ className, ...props }) => {
2158
+ const { scrollNext } = useCarousel();
2159
+ return /* @__PURE__ */ jsxs16(
2160
+ Button,
2161
+ {
2162
+ "data-id": "CarouselNext",
2163
+ variant: "outline",
2164
+ size: "icon",
2165
+ className: cn("absolute top-1/2 -right-4 -translate-y-1/2", className),
2166
+ onClick: scrollNext,
2167
+ ...props,
2168
+ children: [
2169
+ /* @__PURE__ */ jsx110(ChevronRight3, {}),
2170
+ /* @__PURE__ */ jsx110("span", { className: "sr-only", children: "Next slide" })
2171
+ ]
2172
+ }
2173
+ );
2174
+ };
2175
+
2176
+ // src/components/drawer.tsx
2177
+ import { Drawer as VaulDrawer } from "vaul";
2178
+ import { jsx as jsx111, jsxs as jsxs17 } from "react/jsx-runtime";
2179
+ var Drawer = VaulDrawer.Root;
2180
+ var DrawerTrigger = VaulDrawer.Trigger;
2181
+ var DrawerClose = VaulDrawer.Close;
2182
+ var DrawerPortal = VaulDrawer.Portal;
2183
+ var DrawerOverlay = ({ className, ...props }) => {
2184
+ return /* @__PURE__ */ jsx111(
2185
+ VaulDrawer.Overlay,
2186
+ {
2187
+ "data-id": "DrawerOverlay",
2188
+ className: cn("fixed inset-0 z-50 bg-black/40", className),
2189
+ ...props
2190
+ }
2191
+ );
2192
+ };
2193
+ var DrawerContent = ({ className, children, ...props }) => {
2194
+ return /* @__PURE__ */ jsxs17(VaulDrawer.Portal, { children: [
2195
+ /* @__PURE__ */ jsx111(DrawerOverlay, {}),
2196
+ /* @__PURE__ */ jsxs17(
2197
+ VaulDrawer.Content,
2198
+ {
2199
+ "data-id": "DrawerContent",
2200
+ className: cn(
2201
+ `fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-xl border border-border bg-card ${motion.surface}`,
2202
+ className
2203
+ ),
2204
+ ...props,
2205
+ children: [
2206
+ /* @__PURE__ */ jsx111("div", { className: "mx-auto mt-4 h-1.5 w-12 rounded-pill bg-muted" }),
2207
+ children
2208
+ ]
2209
+ }
2210
+ )
2211
+ ] });
2212
+ };
2213
+ var DrawerTitle = ({ className, ...props }) => {
2214
+ return /* @__PURE__ */ jsx111(
2215
+ VaulDrawer.Title,
2216
+ {
2217
+ "data-id": "DrawerTitle",
2218
+ className: cn("px-4 pt-4 font-sans text-lg font-semibold", className),
2219
+ ...props
2220
+ }
2221
+ );
2222
+ };
2223
+ var DrawerDescription = ({
2224
+ className,
2225
+ ...props
2226
+ }) => {
2227
+ return /* @__PURE__ */ jsx111(
2228
+ VaulDrawer.Description,
2229
+ {
2230
+ "data-id": "DrawerDescription",
2231
+ className: cn("px-4 pb-4 text-sm text-muted-foreground", className),
2232
+ ...props
2233
+ }
2234
+ );
2235
+ };
2236
+
2237
+ // src/components/menubar.tsx
2238
+ import * as MenubarPrimitive from "@radix-ui/react-menubar";
2239
+ import { jsx as jsx112 } from "react/jsx-runtime";
2240
+ var Menubar = ({ className, ...props }) => {
2241
+ return /* @__PURE__ */ jsx112(
2242
+ MenubarPrimitive.Root,
2243
+ {
2244
+ "data-id": "Menubar",
2245
+ className: cn("flex h-10 items-center gap-1 rounded-lg border border-border bg-card p-1", className),
2246
+ ...props
2247
+ }
2248
+ );
2249
+ };
2250
+ var MenubarMenu = MenubarPrimitive.Menu;
2251
+ var MenubarTrigger = ({
2252
+ className,
2253
+ ...props
2254
+ }) => {
2255
+ return /* @__PURE__ */ jsx112(
2256
+ MenubarPrimitive.Trigger,
2257
+ {
2258
+ "data-id": "MenubarTrigger",
2259
+ className: cn(
2260
+ "rounded-md px-3 py-1.5 text-sm font-medium outline-none hover:bg-accent data-[state=open]:bg-accent",
2261
+ className
2262
+ ),
2263
+ ...props
2264
+ }
2265
+ );
2266
+ };
2267
+ var MenubarContent = ({
2268
+ className,
2269
+ ...props
2270
+ }) => {
2271
+ return /* @__PURE__ */ jsx112(MenubarPrimitive.Portal, { children: /* @__PURE__ */ jsx112(
2272
+ MenubarPrimitive.Content,
2273
+ {
2274
+ "data-id": "MenubarContent",
2275
+ className: cn(overlayPanel, "min-w-40 p-1", className),
2276
+ ...props
2277
+ }
2278
+ ) });
2279
+ };
2280
+ var MenubarItem = ({ className, ...props }) => {
2281
+ return /* @__PURE__ */ jsx112(MenubarPrimitive.Item, { "data-id": "MenubarItem", className: cn(menuItem, className), ...props });
2282
+ };
2283
+ var MenubarSeparator = ({
2284
+ className,
2285
+ ...props
2286
+ }) => {
2287
+ return /* @__PURE__ */ jsx112(
2288
+ MenubarPrimitive.Separator,
2289
+ {
2290
+ "data-id": "MenubarSeparator",
2291
+ className: cn("-mx-1 my-1 h-px bg-border", className),
2292
+ ...props
2293
+ }
2294
+ );
2295
+ };
2296
+
2297
+ // src/components/navigation-menu.tsx
2298
+ import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
2299
+ import { ChevronDown as ChevronDown4 } from "lucide-react";
2300
+ import { jsx as jsx113, jsxs as jsxs18 } from "react/jsx-runtime";
2301
+ var NavigationMenu = ({
2302
+ className,
2303
+ children,
2304
+ ...props
2305
+ }) => {
2306
+ return /* @__PURE__ */ jsxs18(
2307
+ NavigationMenuPrimitive.Root,
2308
+ {
2309
+ "data-id": "NavigationMenu",
2310
+ className: cn("relative z-10 flex max-w-max flex-1 items-center justify-center", className),
2311
+ ...props,
2312
+ children: [
2313
+ children,
2314
+ /* @__PURE__ */ jsx113(
2315
+ NavigationMenuPrimitive.Viewport,
2316
+ {
2317
+ className: cn(
2318
+ overlayPanel,
2319
+ "absolute top-full mt-2 origin-top-center overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out"
2320
+ )
2321
+ }
2322
+ )
2323
+ ]
2324
+ }
2325
+ );
2326
+ };
2327
+ var NavigationMenuList = ({
2328
+ className,
2329
+ ...props
2330
+ }) => {
2331
+ return /* @__PURE__ */ jsx113(
2332
+ NavigationMenuPrimitive.List,
2333
+ {
2334
+ "data-id": "NavigationMenuList",
2335
+ className: cn("flex flex-1 list-none items-center gap-1", className),
2336
+ ...props
2337
+ }
2338
+ );
2339
+ };
2340
+ var NavigationMenuItem = NavigationMenuPrimitive.Item;
2341
+ var NavigationMenuTrigger = ({
2342
+ className,
2343
+ children,
2344
+ ...props
2345
+ }) => {
2346
+ return /* @__PURE__ */ jsxs18(
2347
+ NavigationMenuPrimitive.Trigger,
2348
+ {
2349
+ "data-id": "NavigationMenuTrigger",
2350
+ className: cn(
2351
+ "inline-flex h-10 items-center gap-1 rounded-pill px-4 text-sm font-medium hover:bg-accent",
2352
+ className
2353
+ ),
2354
+ ...props,
2355
+ children: [
2356
+ children,
2357
+ /* @__PURE__ */ jsx113(ChevronDown4, { className: "size-3" })
2358
+ ]
2359
+ }
2360
+ );
2361
+ };
2362
+ var NavigationMenuContent = ({
2363
+ className,
2364
+ ...props
2365
+ }) => {
2366
+ return /* @__PURE__ */ jsx113(
2367
+ NavigationMenuPrimitive.Content,
2368
+ {
2369
+ "data-id": "NavigationMenuContent",
2370
+ className: cn("p-4", className),
2371
+ ...props
2372
+ }
2373
+ );
2374
+ };
2375
+ var NavigationMenuLink = NavigationMenuPrimitive.Link;
2376
+
2377
+ // src/components/resizable.tsx
2378
+ import { Group as Group2, Panel, Separator as Separator5 } from "react-resizable-panels";
2379
+ import { jsx as jsx114 } from "react/jsx-runtime";
2380
+ var ResizablePanelGroup = ({ className, ...props }) => {
2381
+ return /* @__PURE__ */ jsx114(Group2, { "data-id": "ResizablePanelGroup", className: cn("flex h-full w-full", className), ...props });
2382
+ };
2383
+ var ResizablePanel = Panel;
2384
+ var ResizableHandle = ({ className, ...props }) => {
2385
+ return /* @__PURE__ */ jsx114(
2386
+ Separator5,
2387
+ {
2388
+ "data-id": "ResizableHandle",
2389
+ className: cn("bg-border focus-visible:bg-primary data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=horizontal]:w-px", className),
2390
+ ...props
2391
+ }
2392
+ );
2393
+ };
2394
+
2395
+ // src/components/sidebar.tsx
2396
+ import { PanelLeft } from "lucide-react";
2397
+ import {
2398
+ createContext as createContext4,
2399
+ useContext as useContext4,
2400
+ useMemo,
2401
+ useState as useState3
2402
+ } from "react";
2403
+ import { jsx as jsx115, jsxs as jsxs19 } from "react/jsx-runtime";
2404
+ var SidebarContext = createContext4(null);
2405
+ var useSidebar = () => {
2406
+ const context = useContext4(SidebarContext);
2407
+ if (!context) {
2408
+ throw new Error("useSidebar must be used within SidebarProvider");
2409
+ }
2410
+ return context;
2411
+ };
2412
+ var SidebarProvider = ({
2413
+ defaultOpen = true,
2414
+ className,
2415
+ style,
2416
+ children,
2417
+ ...props
2418
+ }) => {
2419
+ const [isOpen, isOpenSetter] = useState3(defaultOpen);
2420
+ const value = useMemo(() => ({ isOpen, isOpenSetter }), [isOpen]);
2421
+ return /* @__PURE__ */ jsx115(SidebarContext, { value, children: /* @__PURE__ */ jsx115(
2422
+ "div",
2423
+ {
2424
+ "data-id": "SidebarProvider",
2425
+ className: cn("flex min-h-svh w-full", className),
2426
+ style: {
2427
+ "--sidebar-width": "16rem",
2428
+ ...style
2429
+ },
2430
+ ...props,
2431
+ children
2432
+ }
2433
+ ) });
2434
+ };
2435
+ var Sidebar = ({ className, children, ...props }) => {
2436
+ const { isOpen } = useSidebar();
2437
+ return /* @__PURE__ */ jsx115(
2438
+ "aside",
2439
+ {
2440
+ "data-id": "Sidebar",
2441
+ "data-state": isOpen ? "open" : "closed",
2442
+ className: cn(
2443
+ "border-r border-border bg-card text-card-foreground transition-[width] duration-200",
2444
+ isOpen ? "w-[var(--sidebar-width)]" : "w-0 overflow-hidden",
2445
+ className
2446
+ ),
2447
+ ...props,
2448
+ children: isOpen ? children : null
2449
+ }
2450
+ );
2451
+ };
2452
+ var SidebarInset = ({ className, ...props }) => {
2453
+ return /* @__PURE__ */ jsx115("main", { "data-id": "SidebarInset", className: cn("flex flex-1 flex-col", className), ...props });
2454
+ };
2455
+ var SidebarTrigger = ({ className, ...props }) => {
2456
+ const { isOpen, isOpenSetter } = useSidebar();
2457
+ return /* @__PURE__ */ jsxs19(
2458
+ Button,
2459
+ {
2460
+ "data-id": "SidebarTrigger",
2461
+ variant: "ghost",
2462
+ size: "icon",
2463
+ className,
2464
+ onClick: () => isOpenSetter(!isOpen),
2465
+ ...props,
2466
+ children: [
2467
+ /* @__PURE__ */ jsx115(PanelLeft, {}),
2468
+ /* @__PURE__ */ jsx115("span", { className: "sr-only", children: "Toggle sidebar" })
2469
+ ]
2470
+ }
2471
+ );
2472
+ };
2473
+ var SidebarHeader = ({ className, ...props }) => {
2474
+ return /* @__PURE__ */ jsx115("div", { "data-id": "SidebarHeader", className: cn("p-4", className), ...props });
2475
+ };
2476
+ var SidebarContent = ({ className, ...props }) => {
2477
+ return /* @__PURE__ */ jsx115("div", { "data-id": "SidebarContent", className: cn("flex-1 p-2", className), ...props });
2478
+ };
2479
+ var SidebarFooter = ({ className, ...props }) => {
2480
+ return /* @__PURE__ */ jsx115("div", { "data-id": "SidebarFooter", className: cn("p-4", className), ...props });
2481
+ };
2482
+ var SidebarMenu = ({ className, ...props }) => {
2483
+ return /* @__PURE__ */ jsx115("ul", { "data-id": "SidebarMenu", className: cn("flex flex-col gap-1", className), ...props });
2484
+ };
2485
+ var SidebarMenuItem = ({ className, ...props }) => {
2486
+ return /* @__PURE__ */ jsx115("li", { "data-id": "SidebarMenuItem", className: cn(className), ...props });
2487
+ };
2488
+ var SidebarMenuButton = ({ className, ...props }) => {
2489
+ return /* @__PURE__ */ jsx115(
2490
+ "button",
2491
+ {
2492
+ "data-id": "SidebarMenuButton",
2493
+ className: cn(
2494
+ "flex w-full items-center rounded-md px-3 py-2 text-left text-sm hover:bg-accent",
2495
+ className
2496
+ ),
2497
+ ...props
2498
+ }
2499
+ );
2500
+ };
2501
+
2502
+ // src/components/input-otp.tsx
2503
+ import { OTPInput, OTPInputContext } from "input-otp";
2504
+ import { useContext as useContext5 } from "react";
2505
+ import { jsx as jsx116, jsxs as jsxs20 } from "react/jsx-runtime";
2506
+ var InputOTP = ({ className, containerClassName, ...props }) => {
2507
+ return /* @__PURE__ */ jsx116(
2508
+ OTPInput,
2509
+ {
2510
+ "data-id": "InputOTP",
2511
+ containerClassName: cn("flex items-center gap-2", containerClassName),
2512
+ className: cn("disabled:cursor-not-allowed", className),
2513
+ ...props
2514
+ }
2515
+ );
2516
+ };
2517
+ var InputOTPGroup = ({ className, ...props }) => {
2518
+ return /* @__PURE__ */ jsx116("div", { "data-id": "InputOTPGroup", className: cn("flex items-center gap-2", className), ...props });
2519
+ };
2520
+ var InputOTPSlot = ({
2521
+ index,
2522
+ className,
2523
+ ...props
2524
+ }) => {
2525
+ const inputOTPContext = useContext5(OTPInputContext);
2526
+ const slot = inputOTPContext.slots[index];
2527
+ return /* @__PURE__ */ jsxs20(
2528
+ "div",
2529
+ {
2530
+ "data-id": "InputOTPSlot",
2531
+ className: cn(
2532
+ fieldSurface,
2533
+ "relative flex h-12 w-10 items-center justify-center rounded-md text-sm",
2534
+ slot?.isActive && "z-10 border-primary shadow-[0_0_0_3px_rgba(255,229,0,0.28)]",
2535
+ className
2536
+ ),
2537
+ ...props,
2538
+ children: [
2539
+ slot?.char,
2540
+ slot?.hasFakeCaret ? /* @__PURE__ */ jsx116("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx116("div", { className: "h-4 w-px animate-pulse bg-foreground" }) }) : null
2541
+ ]
2542
+ }
2543
+ );
2544
+ };
2545
+
2546
+ // src/components/aspect-ratio.tsx
2547
+ import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
2548
+ var AspectRatio = AspectRatioPrimitive.Root;
2549
+
2550
+ // src/theme/surfaces.ts
2551
+ var surfaces = {
2552
+ frostPanel: "revit-frost-panel rounded-lg",
2553
+ frostNav: "revit-frost-nav rounded-pill",
2554
+ frostTile: "revit-frost-tile overflow-hidden rounded-[20px]",
2555
+ frostFab: "revit-frost-fab rounded-pill",
2556
+ brandGradient: "revit-brand-gradient",
2557
+ scrimHero: "revit-image-scrim-hero",
2558
+ scrimDetail: "revit-image-scrim-detail",
2559
+ scrimFooter: "revit-image-scrim-footer"
2560
+ };
2561
+
2562
+ // src/components/frost-panel.tsx
2563
+ import { jsx as jsx117 } from "react/jsx-runtime";
2564
+ var FrostPanel = ({ className, ...props }) => {
2565
+ return /* @__PURE__ */ jsx117("div", { "data-id": "FrostPanel", className: cn(surfaces.frostPanel, className), ...props });
2566
+ };
2567
+
2568
+ // src/components/frost-nav.tsx
2569
+ import { jsx as jsx118 } from "react/jsx-runtime";
2570
+ var FrostNav = ({ className, isOnLight = false, ...props }) => {
2571
+ return /* @__PURE__ */ jsx118(
2572
+ "nav",
2573
+ {
2574
+ "data-id": "FrostNav",
2575
+ "data-on-light": isOnLight ? "true" : void 0,
2576
+ className: cn(surfaces.frostNav, className),
2577
+ ...props
2578
+ }
2579
+ );
2580
+ };
2581
+
2582
+ // src/components/frost-tile.tsx
2583
+ import { jsx as jsx119 } from "react/jsx-runtime";
2584
+ var FrostTile = ({ className, ...props }) => {
2585
+ return /* @__PURE__ */ jsx119("div", { "data-id": "FrostTile", className: cn("group", surfaces.frostTile, className), ...props });
2586
+ };
2587
+
2588
+ // src/components/frost-fab.tsx
2589
+ import { jsx as jsx120 } from "react/jsx-runtime";
2590
+ var FrostFab = ({ className, ...props }) => {
2591
+ return /* @__PURE__ */ jsx120("div", { "data-id": "FrostFab", className: cn(surfaces.frostFab, className), ...props });
2592
+ };
2593
+
2594
+ // src/components/brand-gradient.tsx
2595
+ import { jsx as jsx121 } from "react/jsx-runtime";
2596
+ var BrandGradient = ({ className, ...props }) => {
2597
+ return /* @__PURE__ */ jsx121("div", { "data-id": "BrandGradient", className: cn(surfaces.brandGradient, className), ...props });
2598
+ };
2599
+
2600
+ // src/components/image-scrim.tsx
2601
+ import { cva as cva11 } from "class-variance-authority";
2602
+ import { jsx as jsx122 } from "react/jsx-runtime";
2603
+ var imageScrimVariants = cva11("pointer-events-none absolute inset-0", {
2604
+ variants: {
2605
+ variant: {
2606
+ hero: "revit-image-scrim-hero",
2607
+ detail: "revit-image-scrim-detail",
2608
+ footer: "revit-image-scrim-footer"
2609
+ }
2610
+ },
2611
+ defaultVariants: {
2612
+ variant: "hero"
2613
+ }
2614
+ });
2615
+ var ImageScrim = ({ className, variant, ...props }) => {
2616
+ return /* @__PURE__ */ jsx122(
2617
+ "div",
2618
+ {
2619
+ "data-id": "ImageScrim",
2620
+ "aria-hidden": true,
2621
+ className: cn(imageScrimVariants({ variant }), className),
2622
+ ...props
2623
+ }
2624
+ );
2625
+ };
2626
+
2627
+ // src/components/search-bar.tsx
2628
+ import { Search as Search2 } from "lucide-react";
2629
+ import { jsx as jsx123, jsxs as jsxs21 } from "react/jsx-runtime";
2630
+ var SearchBar = ({
2631
+ className,
2632
+ placeholder = "Search",
2633
+ value,
2634
+ defaultValue,
2635
+ onValueChange,
2636
+ onSearch,
2637
+ submitLabel = /* @__PURE__ */ jsx123(Search2, { className: "size-4" }),
2638
+ ...props
2639
+ }) => {
2640
+ const onSubmit = (event) => {
2641
+ event.preventDefault();
2642
+ const formData = new FormData(event.currentTarget);
2643
+ const nextValue = String(formData.get("q") ?? "");
2644
+ onSearch?.(nextValue);
2645
+ };
2646
+ return /* @__PURE__ */ jsxs21(
2647
+ "form",
2648
+ {
2649
+ "data-id": "SearchBar",
2650
+ onSubmit,
2651
+ className: cn(
2652
+ "flex w-full overflow-hidden rounded-pill border border-border bg-card shadow-[0_8px_18px_rgba(0,0,0,0.04)] ring-2 ring-transparent transition-[box-shadow,border-color] duration-200 focus-within:ring-primary hover:border-primary",
2653
+ className
2654
+ ),
2655
+ children: [
2656
+ /* @__PURE__ */ jsx123(
2657
+ Input,
2658
+ {
2659
+ name: "q",
2660
+ variant: "pill",
2661
+ value,
2662
+ defaultValue,
2663
+ placeholder,
2664
+ onChange: (event) => onValueChange?.(event.target.value),
2665
+ className: "rounded-none border-0 shadow-none ring-0 focus-visible:shadow-none",
2666
+ ...props
2667
+ }
2668
+ ),
2669
+ /* @__PURE__ */ jsx123(Button, { type: "submit", size: "icon", className: "rounded-none", "aria-label": "Search", children: submitLabel })
2670
+ ]
2671
+ }
2672
+ );
2673
+ };
2674
+
2675
+ // src/components/confirm-dialog.tsx
2676
+ import { jsx as jsx124, jsxs as jsxs22 } from "react/jsx-runtime";
2677
+ var ConfirmDialog = ({
2678
+ trigger,
2679
+ title,
2680
+ description,
2681
+ confirmLabel = "Confirm",
2682
+ cancelLabel = "Cancel",
2683
+ onConfirm
2684
+ }) => {
2685
+ return /* @__PURE__ */ jsxs22(AlertDialog, { children: [
2686
+ /* @__PURE__ */ jsx124(AlertDialogTrigger, { asChild: true, children: trigger }),
2687
+ /* @__PURE__ */ jsxs22(AlertDialogContent, { "data-id": "ConfirmDialog", children: [
2688
+ /* @__PURE__ */ jsxs22(AlertDialogHeader, { children: [
2689
+ /* @__PURE__ */ jsx124(AlertDialogTitle, { children: title }),
2690
+ description ? /* @__PURE__ */ jsx124(AlertDialogDescription, { children: description }) : null
2691
+ ] }),
2692
+ /* @__PURE__ */ jsxs22(AlertDialogFooter, { children: [
2693
+ /* @__PURE__ */ jsx124(AlertDialogCancel, { children: cancelLabel }),
2694
+ /* @__PURE__ */ jsx124(AlertDialogAction, { onClick: onConfirm, children: confirmLabel })
2695
+ ] })
2696
+ ] })
2697
+ ] });
2698
+ };
2699
+
2700
+ // src/components/command-dialog.tsx
2701
+ import { jsx as jsx125 } from "react/jsx-runtime";
2702
+ var CommandDialog = ({ children, contentClassName, ...props }) => {
2703
+ return /* @__PURE__ */ jsx125(Dialog, { ...props, children: /* @__PURE__ */ jsx125(DialogContent, { "data-id": "CommandDialog", className: cn("overflow-hidden p-0", contentClassName), children: /* @__PURE__ */ jsx125(Command, { className: "[&_[data-id=CommandInputWrap]]:h-12", children }) }) });
2704
+ };
2705
+
2706
+ // src/components/pagination-bar.tsx
2707
+ import { jsx as jsx126, jsxs as jsxs23 } from "react/jsx-runtime";
2708
+ var PaginationBar = ({
2709
+ page,
2710
+ pageCount,
2711
+ onPageChange,
2712
+ className,
2713
+ ...props
2714
+ }) => {
2715
+ const pages = Array.from({ length: pageCount }, (_, index) => index + 1);
2716
+ const visible = pages.filter((item) => item === 1 || item === pageCount || Math.abs(item - page) <= 1);
2717
+ return /* @__PURE__ */ jsx126(Pagination, { "data-id": "PaginationBar", className, ...props, children: /* @__PURE__ */ jsxs23(PaginationContent, { children: [
2718
+ /* @__PURE__ */ jsx126(PaginationItem, { children: /* @__PURE__ */ jsx126(
2719
+ PaginationPrevious,
2720
+ {
2721
+ href: "#",
2722
+ onClick: (event) => {
2723
+ event.preventDefault();
2724
+ if (page > 1) {
2725
+ onPageChange?.(page - 1);
2726
+ }
2727
+ }
2728
+ }
2729
+ ) }),
2730
+ visible.map((item, index) => {
2731
+ const previous = visible[index - 1];
2732
+ return /* @__PURE__ */ jsxs23(PaginationItem, { children: [
2733
+ previous && item - previous > 1 ? /* @__PURE__ */ jsx126(PaginationEllipsis, {}) : null,
2734
+ /* @__PURE__ */ jsx126(
2735
+ PaginationLink,
2736
+ {
2737
+ href: "#",
2738
+ isActive: item === page,
2739
+ onClick: (event) => {
2740
+ event.preventDefault();
2741
+ onPageChange?.(item);
2742
+ },
2743
+ children: item
2744
+ }
2745
+ )
2746
+ ] }, `pagination-${item}--${index}`);
2747
+ }),
2748
+ /* @__PURE__ */ jsx126(PaginationItem, { children: /* @__PURE__ */ jsx126(
2749
+ PaginationNext,
2750
+ {
2751
+ href: "#",
2752
+ onClick: (event) => {
2753
+ event.preventDefault();
2754
+ if (page < pageCount) {
2755
+ onPageChange?.(page + 1);
2756
+ }
2757
+ }
2758
+ }
2759
+ ) })
2760
+ ] }) });
2761
+ };
2762
+
2763
+ // src/theme/tokensToCss.ts
2764
+ var colorToVars = (colors, prefix) => {
2765
+ const vars = {
2766
+ [`${prefix}background`]: colors.background,
2767
+ [`${prefix}foreground`]: colors.foreground,
2768
+ [`${prefix}card`]: colors.card,
2769
+ [`${prefix}card-foreground`]: colors.cardForeground,
2770
+ [`${prefix}popover`]: colors.popover,
2771
+ [`${prefix}popover-foreground`]: colors.popoverForeground,
2772
+ [`${prefix}primary`]: colors.primary,
2773
+ [`${prefix}primary-foreground`]: colors.primaryForeground,
2774
+ [`${prefix}secondary`]: colors.secondary,
2775
+ [`${prefix}secondary-foreground`]: colors.secondaryForeground,
2776
+ [`${prefix}muted`]: colors.muted,
2777
+ [`${prefix}muted-foreground`]: colors.mutedForeground,
2778
+ [`${prefix}accent`]: colors.accent,
2779
+ [`${prefix}accent-foreground`]: colors.accentForeground,
2780
+ [`${prefix}destructive`]: colors.destructive,
2781
+ [`${prefix}destructive-foreground`]: colors.destructiveForeground,
2782
+ [`${prefix}border`]: colors.border,
2783
+ [`${prefix}input`]: colors.input,
2784
+ [`${prefix}ring`]: colors.ring,
2785
+ [`${prefix}brand-yellow`]: colors.brand.yellow,
2786
+ [`${prefix}brand-yellow-light`]: colors.brand.yellowLight,
2787
+ [`${prefix}brand-off-black`]: colors.brand.offBlack,
2788
+ [`${prefix}brand-pink`]: colors.brand.pink,
2789
+ [`${prefix}brand-purple`]: colors.brand.purple,
2790
+ [`${prefix}brand-blue`]: colors.brand.blue,
2791
+ [`${prefix}brand-gold`]: colors.brand.gold,
2792
+ [`${prefix}brand-brown`]: colors.brand.brown,
2793
+ [`${prefix}brand-umber`]: colors.brand.umber,
2794
+ [`${prefix}brand-mist`]: colors.brand.mist
2795
+ };
2796
+ return vars;
2797
+ };
2798
+ var tokensToCssVars = (tokens) => {
2799
+ const light2 = colorToVars(tokens.colors, "--revit-color-");
2800
+ const dark2 = colorToVars(tokens.colorsDark, "--revit-color-");
2801
+ const shared = {
2802
+ "--revit-radius-sm": tokens.radius.sm,
2803
+ "--revit-radius-md": tokens.radius.md,
2804
+ "--revit-radius-lg": tokens.radius.lg,
2805
+ "--revit-radius-xl": tokens.radius.xl,
2806
+ "--revit-radius-pill": tokens.radius.pill,
2807
+ "--revit-font-sans": tokens.fontFamily.sans
2808
+ };
2809
+ return { light: { ...light2, ...shared }, dark: dark2 };
2810
+ };
2811
+ var decls = (vars) => Object.entries(vars).map(([name, value]) => `${name}: ${value};`).join("\n ");
2812
+ var tokensToStylesheet = (tokens) => {
2813
+ const { light: light2, dark: dark2 } = tokensToCssVars(tokens);
2814
+ return `:root,
2815
+ .revit-ui {
2816
+ ${decls(light2)}
2817
+ }
2818
+ html.dark,
2819
+ html[data-theme="dark"],
2820
+ .dark,
2821
+ [data-theme="dark"] {
2822
+ ${decls(dark2)}
2823
+ }`;
2824
+ };
2825
+
2826
+ // src/theme/tokens.revit.ts
2827
+ var brand = {
2828
+ yellow: "#FFE500",
2829
+ yellowLight: "#FFF06E",
2830
+ offBlack: "#2C2C2C",
2831
+ pink: "#FF005C",
2832
+ purple: "#BA00FF",
2833
+ blue: "#00FFFB",
2834
+ gold: "#B8A500",
2835
+ brown: "#78350F",
2836
+ umber: "#58483B",
2837
+ mist: "#F2F2F7"
2838
+ };
2839
+ var light = {
2840
+ background: "#ffffff",
2841
+ foreground: brand.offBlack,
2842
+ card: "#ffffff",
2843
+ cardForeground: brand.offBlack,
2844
+ popover: "#ffffff",
2845
+ popoverForeground: brand.offBlack,
2846
+ primary: brand.yellow,
2847
+ primaryForeground: "#000000",
2848
+ secondary: "#000000",
2849
+ secondaryForeground: "#ffffff",
2850
+ muted: brand.mist,
2851
+ mutedForeground: brand.umber,
2852
+ accent: brand.yellowLight,
2853
+ accentForeground: "#000000",
2854
+ destructive: "#FF002B",
2855
+ destructiveForeground: "#ffffff",
2856
+ border: brand.mist,
2857
+ input: brand.mist,
2858
+ ring: brand.yellow,
2859
+ brand
2860
+ };
2861
+ var dark = {
2862
+ background: "#0f172a",
2863
+ foreground: "#ffffff",
2864
+ card: "#0f172a",
2865
+ cardForeground: "#ffffff",
2866
+ popover: "#0f172a",
2867
+ popoverForeground: "#ffffff",
2868
+ primary: brand.yellow,
2869
+ primaryForeground: "#000000",
2870
+ secondary: brand.yellow,
2871
+ secondaryForeground: "#000000",
2872
+ muted: "#1e293b",
2873
+ mutedForeground: "#cbd5e1",
2874
+ accent: "#1e293b",
2875
+ accentForeground: "#ffffff",
2876
+ destructive: "#FF002B",
2877
+ destructiveForeground: "#ffffff",
2878
+ border: "#334155",
2879
+ input: "#334155",
2880
+ ring: brand.yellow,
2881
+ brand
2882
+ };
2883
+ var revitTokens = {
2884
+ colors: light,
2885
+ colorsDark: dark,
2886
+ radius: {
2887
+ sm: "0.375rem",
2888
+ md: "0.5rem",
2889
+ lg: "1.25rem",
2890
+ xl: "1.5rem",
2891
+ pill: "9999px"
2892
+ },
2893
+ fontFamily: {
2894
+ sans: "Afacad, ui-sans-serif, system-ui, sans-serif"
2895
+ }
2896
+ };
2897
+
2898
+ // src/theme/RevitUIProvider.tsx
2899
+ import { Fragment, jsx as jsx127, jsxs as jsxs24 } from "react/jsx-runtime";
2900
+ var RevitUIProvider = ({ tokens = revitTokens, children }) => {
2901
+ return /* @__PURE__ */ jsxs24(Fragment, { children: [
2902
+ /* @__PURE__ */ jsx127("style", { "data-id": "RevitUITheme", dangerouslySetInnerHTML: { __html: tokensToStylesheet(tokens) } }),
2903
+ /* @__PURE__ */ jsx127("div", { "data-id": "RevitUIProvider", className: "revit-ui font-sans", children })
2904
+ ] });
2905
+ };
2906
+ export {
2907
+ Accordion,
2908
+ AccordionContent,
2909
+ AccordionItem,
2910
+ AccordionTrigger,
2911
+ Alert,
2912
+ AlertDescription,
2913
+ AlertDialog,
2914
+ AlertDialogAction,
2915
+ AlertDialogCancel,
2916
+ AlertDialogContent,
2917
+ AlertDialogDescription,
2918
+ AlertDialogFooter,
2919
+ AlertDialogHeader,
2920
+ AlertDialogTitle,
2921
+ AlertDialogTrigger,
2922
+ AlertTitle,
2923
+ AspectRatio,
2924
+ Avatar,
2925
+ AvatarFallback,
2926
+ AvatarImage,
2927
+ Badge,
2928
+ BrandGradient,
2929
+ Breadcrumb,
2930
+ BreadcrumbItem,
2931
+ BreadcrumbLink,
2932
+ BreadcrumbList,
2933
+ BreadcrumbPage,
2934
+ BreadcrumbSeparator,
2935
+ Button,
2936
+ Calendar,
2937
+ Card,
2938
+ CardContent,
2939
+ CardDescription,
2940
+ CardFooter,
2941
+ CardHeader,
2942
+ CardTitle,
2943
+ Carousel,
2944
+ CarouselContent,
2945
+ CarouselItem,
2946
+ CarouselNext,
2947
+ CarouselPrevious,
2948
+ ChartContainer,
2949
+ Tooltip2 as ChartTooltip,
2950
+ Checkbox,
2951
+ Collapsible,
2952
+ CollapsibleContent2 as CollapsibleContent,
2953
+ CollapsibleTrigger2 as CollapsibleTrigger,
2954
+ Combobox,
2955
+ Command,
2956
+ CommandDialog,
2957
+ CommandEmpty,
2958
+ CommandGroup,
2959
+ CommandInput,
2960
+ CommandItem,
2961
+ CommandList,
2962
+ ConfirmDialog,
2963
+ ContextMenu,
2964
+ ContextMenuContent,
2965
+ ContextMenuItem,
2966
+ ContextMenuTrigger,
2967
+ DatePicker,
2968
+ Dialog,
2969
+ DialogClose,
2970
+ DialogContent,
2971
+ DialogDescription,
2972
+ DialogFooter,
2973
+ DialogHeader,
2974
+ DialogTitle,
2975
+ DialogTrigger,
2976
+ Drawer,
2977
+ DrawerContent,
2978
+ DrawerDescription,
2979
+ DrawerTitle,
2980
+ DrawerTrigger,
2981
+ DropdownMenu,
2982
+ DropdownMenuContent,
2983
+ DropdownMenuItem,
2984
+ DropdownMenuLabel,
2985
+ DropdownMenuSeparator,
2986
+ DropdownMenuTrigger,
2987
+ Form,
2988
+ FormControl,
2989
+ FormDescription,
2990
+ FormField,
2991
+ FormItem,
2992
+ FormLabel,
2993
+ FormMessage,
2994
+ FrostFab,
2995
+ FrostNav,
2996
+ FrostPanel,
2997
+ FrostTile,
2998
+ HoverCard,
2999
+ HoverCardContent,
3000
+ HoverCardTrigger,
3001
+ ImageScrim,
3002
+ Input,
3003
+ InputOTP,
3004
+ InputOTPGroup,
3005
+ InputOTPSlot,
3006
+ Label2 as Label,
3007
+ Menubar,
3008
+ MenubarContent,
3009
+ MenubarItem,
3010
+ MenubarMenu,
3011
+ MenubarSeparator,
3012
+ MenubarTrigger,
3013
+ NavigationMenu,
3014
+ NavigationMenuContent,
3015
+ NavigationMenuItem,
3016
+ NavigationMenuLink,
3017
+ NavigationMenuList,
3018
+ NavigationMenuTrigger,
3019
+ Pagination,
3020
+ PaginationBar,
3021
+ PaginationContent,
3022
+ PaginationEllipsis,
3023
+ PaginationItem,
3024
+ PaginationLink,
3025
+ PaginationNext,
3026
+ PaginationPrevious,
3027
+ Popover,
3028
+ PopoverContent,
3029
+ PopoverTrigger,
3030
+ Progress,
3031
+ RadioGroup,
3032
+ RadioGroupItem,
3033
+ ResizableHandle,
3034
+ ResizablePanel,
3035
+ ResizablePanelGroup,
3036
+ RevitUIProvider,
3037
+ ScrollArea,
3038
+ ScrollBar,
3039
+ SearchBar,
3040
+ Select,
3041
+ SelectContent,
3042
+ SelectGroup,
3043
+ SelectItem,
3044
+ SelectLabel,
3045
+ SelectSeparator,
3046
+ SelectTrigger,
3047
+ SelectValue,
3048
+ Separator2 as Separator,
3049
+ Sheet,
3050
+ SheetContent,
3051
+ SheetDescription,
3052
+ SheetHeader,
3053
+ SheetTitle,
3054
+ SheetTrigger,
3055
+ Sidebar,
3056
+ SidebarContent,
3057
+ SidebarFooter,
3058
+ SidebarHeader,
3059
+ SidebarInset,
3060
+ SidebarMenu,
3061
+ SidebarMenuButton,
3062
+ SidebarMenuItem,
3063
+ SidebarProvider,
3064
+ SidebarTrigger,
3065
+ Skeleton,
3066
+ Slider,
3067
+ Switch,
3068
+ Table,
3069
+ TableBody,
3070
+ TableCaption,
3071
+ TableCell,
3072
+ TableFooter,
3073
+ TableHead,
3074
+ TableHeader,
3075
+ TableRow,
3076
+ Tabs,
3077
+ TabsContent,
3078
+ TabsList,
3079
+ TabsTrigger,
3080
+ Textarea,
3081
+ Toaster,
3082
+ Toggle,
3083
+ ToggleGroup,
3084
+ ToggleGroupItem,
3085
+ Tooltip,
3086
+ TooltipContent,
3087
+ TooltipProvider,
3088
+ TooltipTrigger,
3089
+ alertVariants,
3090
+ badgeVariants,
3091
+ buttonVariants,
3092
+ cardVariants,
3093
+ cn,
3094
+ inputVariants,
3095
+ labelVariants,
3096
+ revitTokens,
3097
+ selectTriggerVariants,
3098
+ surfaces,
3099
+ textareaVariants,
3100
+ toast,
3101
+ toggleVariants,
3102
+ tokensToCssVars,
3103
+ tokensToStylesheet,
3104
+ useFormField,
3105
+ useSidebar
3106
+ };
3107
+ //# sourceMappingURL=index.js.map