@hai3/uikit 0.1.0-alpha.2 → 0.1.0-alpha.4

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.mjs DELETED
@@ -1,2054 +0,0 @@
1
- import * as React18 from 'react';
2
- import React18__default from 'react';
3
- import * as AvatarPrimitive from '@radix-ui/react-avatar';
4
- import { clsx } from 'clsx';
5
- import { twMerge } from 'tailwind-merge';
6
- import { jsx, jsxs } from 'react/jsx-runtime';
7
- import { Slot } from '@radix-ui/react-slot';
8
- import { cva } from 'class-variance-authority';
9
- import { ButtonSize, ButtonVariant, IconButtonSize } from '@hai3/uikit-contracts';
10
- export { ButtonSize, ButtonVariant, IconButtonSize } from '@hai3/uikit-contracts';
11
- import * as SwitchPrimitives from '@radix-ui/react-switch';
12
- import { Loader2, ChevronDown, X, ArrowLeft, ArrowRight, ChevronUp, Check, ChevronRight, Circle, ChevronRightIcon, CheckIcon, CircleIcon, User, Bot, Paperclip, Send, Plus, Search } from 'lucide-react';
13
- import { trim, toUpper } from 'lodash';
14
- import * as SliderPrimitive from '@radix-ui/react-slider';
15
- import * as ProgressPrimitive from '@radix-ui/react-progress';
16
- import * as TooltipPrimitive from '@radix-ui/react-tooltip';
17
- import * as PopoverPrimitive from '@radix-ui/react-popover';
18
- import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
19
- import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
20
- import * as SheetPrimitive from '@radix-ui/react-dialog';
21
- import * as AccordionPrimitive from '@radix-ui/react-accordion';
22
- import useEmblaCarousel from 'embla-carousel-react';
23
- import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
24
- import * as SelectPrimitive from '@radix-ui/react-select';
25
- import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
26
- import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
27
-
28
- // src/base/avatar.tsx
29
- function cn(...inputs) {
30
- return twMerge(clsx(inputs));
31
- }
32
- var Avatar = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
33
- AvatarPrimitive.Root,
34
- {
35
- ref,
36
- className: cn(
37
- "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
38
- className
39
- ),
40
- ...props
41
- }
42
- ));
43
- Avatar.displayName = AvatarPrimitive.Root.displayName;
44
- var AvatarImage = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
45
- AvatarPrimitive.Image,
46
- {
47
- ref,
48
- className: cn("aspect-square h-full w-full", className),
49
- ...props
50
- }
51
- ));
52
- AvatarImage.displayName = AvatarPrimitive.Image.displayName;
53
- var AvatarFallback = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
54
- AvatarPrimitive.Fallback,
55
- {
56
- ref,
57
- className: cn(
58
- "flex h-full w-full items-center justify-center rounded-full bg-muted",
59
- className
60
- ),
61
- ...props
62
- }
63
- ));
64
- AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
65
- var buttonVariants = cva(
66
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
67
- {
68
- variants: {
69
- variant: {
70
- [ButtonVariant.Default]: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
71
- [ButtonVariant.Destructive]: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
72
- [ButtonVariant.Outline]: "border border-input bg-background shadow-sm hover:bg-accent data-[state=open]:bg-accent",
73
- [ButtonVariant.Secondary]: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
74
- [ButtonVariant.Ghost]: "hover:bg-accent data-[state=open]:bg-accent",
75
- [ButtonVariant.Link]: "text-primary underline-offset-4 hover:underline"
76
- },
77
- size: {
78
- [ButtonSize.Default]: "h-9 px-4 py-2",
79
- [ButtonSize.Sm]: "h-8 rounded-md px-3 text-xs",
80
- [ButtonSize.Lg]: "h-10 rounded-md px-8",
81
- [ButtonSize.Icon]: "h-9 w-9"
82
- }
83
- },
84
- defaultVariants: {
85
- variant: ButtonVariant.Default,
86
- size: ButtonSize.Default
87
- }
88
- }
89
- );
90
- var Button = React18.forwardRef(
91
- ({ className, variant, size, asChild = false, ...props }, ref) => {
92
- const Comp = asChild ? Slot : "button";
93
- return /* @__PURE__ */ jsx(
94
- Comp,
95
- {
96
- className: cn(buttonVariants({ variant, size, className })),
97
- ref,
98
- ...props
99
- }
100
- );
101
- }
102
- );
103
- Button.displayName = "Button";
104
- var badgeVariants = cva(
105
- "inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
106
- {
107
- variants: {
108
- variant: {
109
- default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
110
- secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
111
- destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
112
- outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
113
- }
114
- },
115
- defaultVariants: {
116
- variant: "default"
117
- }
118
- }
119
- );
120
- function Badge({
121
- className,
122
- variant,
123
- asChild = false,
124
- ...props
125
- }) {
126
- const Comp = asChild ? Slot : "span";
127
- return /* @__PURE__ */ jsx(
128
- Comp,
129
- {
130
- className: cn(badgeVariants({ variant }), className),
131
- ...props
132
- }
133
- );
134
- }
135
- var Input = React18.forwardRef(
136
- ({ className, type, ...props }, ref) => {
137
- return /* @__PURE__ */ jsx(
138
- "input",
139
- {
140
- type,
141
- className: cn(
142
- "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
143
- className
144
- ),
145
- ref,
146
- ...props
147
- }
148
- );
149
- }
150
- );
151
- Input.displayName = "Input";
152
- var Textarea = React18.forwardRef(
153
- ({ className, autoResize = false, minHeight = 50, maxHeight = 350, size = "default", onChange, ...props }, ref) => {
154
- const internalRef = React18.useRef(null);
155
- React18.useImperativeHandle(ref, () => internalRef.current);
156
- const sizeClasses = {
157
- sm: "min-h-11 h-11",
158
- // 44px / 2.75rem - exact height
159
- default: "min-h-[60px]",
160
- // 60px / 3.75rem
161
- lg: "min-h-20"
162
- // 80px / 5rem
163
- };
164
- const paddingClasses = {
165
- sm: "py-3",
166
- // 12px top + 12px bottom + 20px line-height = 44px
167
- default: "py-2",
168
- // 8px top + 8px bottom (default)
169
- lg: "py-2"
170
- // 8px top + 8px bottom (default)
171
- };
172
- const handleResize = React18.useCallback(() => {
173
- if (autoResize && size !== "sm" && internalRef.current) {
174
- const textarea = internalRef.current;
175
- textarea.style.height = "auto";
176
- const scrollHeight = textarea.scrollHeight;
177
- textarea.style.height = `${Math.min(Math.max(scrollHeight, minHeight), maxHeight)}px`;
178
- }
179
- }, [autoResize, size, minHeight, maxHeight]);
180
- React18.useEffect(() => {
181
- handleResize();
182
- }, [handleResize, props.value]);
183
- const handleChange = React18.useCallback(
184
- (e) => {
185
- handleResize();
186
- onChange?.(e);
187
- },
188
- [onChange, handleResize]
189
- );
190
- return /* @__PURE__ */ jsx(
191
- "textarea",
192
- {
193
- className: cn(
194
- "flex w-full rounded-md border border-input bg-transparent px-3 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
195
- sizeClasses[size],
196
- paddingClasses[size],
197
- className
198
- ),
199
- ref: internalRef,
200
- onChange: handleChange,
201
- ...props
202
- }
203
- );
204
- }
205
- );
206
- Textarea.displayName = "Textarea";
207
- var Switch = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
208
- SwitchPrimitives.Root,
209
- {
210
- className: cn(
211
- "peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
212
- className
213
- ),
214
- ...props,
215
- ref,
216
- children: /* @__PURE__ */ jsx(
217
- SwitchPrimitives.Thumb,
218
- {
219
- className: cn(
220
- "pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform",
221
- "data-[state=checked]:ltr:translate-x-4 data-[state=checked]:rtl:-translate-x-4",
222
- "data-[state=unchecked]:translate-x-0"
223
- )
224
- }
225
- )
226
- }
227
- ));
228
- Switch.displayName = SwitchPrimitives.Root.displayName;
229
- function Skeleton({
230
- className,
231
- inheritColor = false,
232
- ...props
233
- }) {
234
- return /* @__PURE__ */ jsx(
235
- "div",
236
- {
237
- className: cn(
238
- "animate-pulse rounded-md",
239
- inheritColor ? "bg-current opacity-20" : "bg-muted",
240
- className
241
- ),
242
- ...props
243
- }
244
- );
245
- }
246
- var Spinner = React18.forwardRef(
247
- ({ className, icon: Icon2 = Loader2, size = "size-4", ...props }, ref) => {
248
- const textColorClasses = className?.match(/\btext-\S+/g)?.join(" ") || "";
249
- const wrapperClasses = trim(className?.replace(/\btext-\S+/g, "") || "");
250
- return /* @__PURE__ */ jsx(
251
- "div",
252
- {
253
- ref,
254
- className: cn("inline-flex items-center justify-center", wrapperClasses),
255
- ...props,
256
- children: /* @__PURE__ */ jsx(Icon2, { className: cn("animate-spin", size, textColorClasses) })
257
- }
258
- );
259
- }
260
- );
261
- Spinner.displayName = "Spinner";
262
- var Slider = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
263
- SliderPrimitive.Root,
264
- {
265
- ref,
266
- className: cn(
267
- "relative flex w-full touch-none select-none items-center",
268
- className
269
- ),
270
- ...props
271
- }
272
- ));
273
- Slider.displayName = SliderPrimitive.Root.displayName;
274
- var SliderTrack = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
275
- SliderPrimitive.Track,
276
- {
277
- ref,
278
- className: cn(
279
- "relative h-1.5 w-full grow overflow-hidden rounded-full bg-primary/20",
280
- className
281
- ),
282
- ...props
283
- }
284
- ));
285
- SliderTrack.displayName = SliderPrimitive.Track.displayName;
286
- var SliderRange = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
287
- SliderPrimitive.Range,
288
- {
289
- ref,
290
- className: cn("absolute h-full bg-primary", className),
291
- ...props
292
- }
293
- ));
294
- SliderRange.displayName = SliderPrimitive.Range.displayName;
295
- var SliderThumb = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
296
- SliderPrimitive.Thumb,
297
- {
298
- ref,
299
- className: cn(
300
- "block h-4 w-4 rounded-full border border-primary/50 bg-background shadow transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
301
- className
302
- ),
303
- ...props
304
- }
305
- ));
306
- SliderThumb.displayName = SliderPrimitive.Thumb.displayName;
307
- var Progress = React18.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ jsx(
308
- ProgressPrimitive.Root,
309
- {
310
- ref,
311
- className: cn(
312
- "relative h-2 w-full overflow-hidden rounded-full bg-primary/20",
313
- className
314
- ),
315
- ...props,
316
- children: /* @__PURE__ */ jsx(
317
- ProgressPrimitive.Indicator,
318
- {
319
- className: "h-full w-full flex-1 bg-primary transition-all",
320
- style: { transform: `translateX(-${100 - (value || 0)}%)` }
321
- }
322
- )
323
- }
324
- ));
325
- Progress.displayName = ProgressPrimitive.Root.displayName;
326
- var TooltipProvider = ({
327
- delayDuration = 0,
328
- ...props
329
- }) => /* @__PURE__ */ jsx(
330
- TooltipPrimitive.Provider,
331
- {
332
- delayDuration,
333
- ...props
334
- }
335
- );
336
- TooltipProvider.displayName = TooltipPrimitive.Provider.displayName;
337
- var Tooltip = ({
338
- ...props
339
- }) => /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { ...props }) });
340
- Tooltip.displayName = TooltipPrimitive.Root.displayName;
341
- var TooltipTrigger = React18.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { ref, ...props }));
342
- TooltipTrigger.displayName = TooltipPrimitive.Trigger.displayName;
343
- var TooltipContent = React18.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
344
- TooltipPrimitive.Content,
345
- {
346
- ref,
347
- sideOffset,
348
- className: cn(
349
- "z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
350
- className
351
- ),
352
- ...props
353
- }
354
- ) }));
355
- TooltipContent.displayName = TooltipPrimitive.Content.displayName;
356
- var Popover = PopoverPrimitive.Root;
357
- Popover.displayName = "Popover";
358
- var PopoverTrigger = React18.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
359
- PopoverPrimitive.Trigger,
360
- {
361
- ref,
362
- "data-slot": "popover-trigger",
363
- ...props
364
- }
365
- ));
366
- PopoverTrigger.displayName = "PopoverTrigger";
367
- var PopoverContent = React18.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
368
- PopoverPrimitive.Content,
369
- {
370
- ref,
371
- "data-slot": "popover-content",
372
- align,
373
- sideOffset,
374
- className: cn(
375
- "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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",
376
- className
377
- ),
378
- ...props
379
- }
380
- ) }));
381
- PopoverContent.displayName = "PopoverContent";
382
- var PopoverAnchor = React18.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
383
- PopoverPrimitive.Anchor,
384
- {
385
- ref,
386
- "data-slot": "popover-anchor",
387
- ...props
388
- }
389
- ));
390
- PopoverAnchor.displayName = "PopoverAnchor";
391
- var HoverCard = HoverCardPrimitive.Root;
392
- HoverCard.displayName = "HoverCard";
393
- var HoverCardTrigger = React18.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
394
- HoverCardPrimitive.Trigger,
395
- {
396
- ref,
397
- "data-slot": "hover-card-trigger",
398
- ...props
399
- }
400
- ));
401
- HoverCardTrigger.displayName = "HoverCardTrigger";
402
- var HoverCardContent = React18.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(HoverCardPrimitive.Portal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsx(
403
- HoverCardPrimitive.Content,
404
- {
405
- ref,
406
- "data-slot": "hover-card-content",
407
- align,
408
- sideOffset,
409
- className: cn(
410
- "z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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",
411
- className
412
- ),
413
- ...props
414
- }
415
- ) }));
416
- HoverCardContent.displayName = "HoverCardContent";
417
- var Card = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
418
- "div",
419
- {
420
- ref,
421
- className: cn(
422
- "rounded-xl border bg-card text-card-foreground shadow",
423
- className
424
- ),
425
- ...props
426
- }
427
- ));
428
- Card.displayName = "Card";
429
- var CardHeader = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
430
- "div",
431
- {
432
- ref,
433
- className: cn("flex flex-col space-y-1.5 p-6", className),
434
- ...props
435
- }
436
- ));
437
- CardHeader.displayName = "CardHeader";
438
- var CardTitle = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
439
- "div",
440
- {
441
- ref,
442
- className: cn("font-semibold leading-none tracking-tight", className),
443
- ...props
444
- }
445
- ));
446
- CardTitle.displayName = "CardTitle";
447
- var CardDescription = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
448
- "div",
449
- {
450
- ref,
451
- className: cn("text-sm text-muted-foreground", className),
452
- ...props
453
- }
454
- ));
455
- CardDescription.displayName = "CardDescription";
456
- var CardContent = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("p-6 pt-0", className), ...props }));
457
- CardContent.displayName = "CardContent";
458
- var CardFooter = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
459
- "div",
460
- {
461
- ref,
462
- className: cn("flex items-center p-6 pt-0", className),
463
- ...props
464
- }
465
- ));
466
- CardFooter.displayName = "CardFooter";
467
- var Header = React18__default.forwardRef(
468
- ({ children, className }, ref) => {
469
- return /* @__PURE__ */ jsx(
470
- "header",
471
- {
472
- ref,
473
- className: cn(
474
- "flex items-center justify-end px-6 py-4 bg-background border-b border-border h-16 w-full",
475
- className
476
- ),
477
- children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4", children })
478
- }
479
- );
480
- }
481
- );
482
- Header.displayName = "Header";
483
- var NavigationMenu = React18.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
484
- NavigationMenuPrimitive.Root,
485
- {
486
- ref,
487
- className: cn(
488
- "relative z-10 flex max-w-max flex-1 items-center justify-center",
489
- className
490
- ),
491
- ...props,
492
- children: [
493
- children,
494
- /* @__PURE__ */ jsx(NavigationMenuViewport, {})
495
- ]
496
- }
497
- ));
498
- NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
499
- var NavigationMenuList = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
500
- NavigationMenuPrimitive.List,
501
- {
502
- ref,
503
- className: cn(
504
- "group flex flex-1 list-none items-center justify-center space-x-1",
505
- className
506
- ),
507
- ...props
508
- }
509
- ));
510
- NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
511
- var NavigationMenuItem = NavigationMenuPrimitive.Item;
512
- var navigationMenuTriggerStyle = cva(
513
- "group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:text-accent-foreground data-[state=open]:bg-accent/50 data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent"
514
- );
515
- var NavigationMenuTrigger = React18.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
516
- NavigationMenuPrimitive.Trigger,
517
- {
518
- ref,
519
- className: cn(navigationMenuTriggerStyle(), "group", className),
520
- ...props,
521
- children: [
522
- children,
523
- " ",
524
- /* @__PURE__ */ jsx(
525
- ChevronDown,
526
- {
527
- className: "relative top-[1px] ml-1 h-3 w-3 transition duration-300 group-data-[state=open]:rotate-180",
528
- "aria-hidden": "true"
529
- }
530
- )
531
- ]
532
- }
533
- ));
534
- NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
535
- var NavigationMenuContent = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
536
- NavigationMenuPrimitive.Content,
537
- {
538
- ref,
539
- className: cn(
540
- "left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 md:absolute md:w-auto ",
541
- className
542
- ),
543
- ...props
544
- }
545
- ));
546
- NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
547
- var NavigationMenuLink = NavigationMenuPrimitive.Link;
548
- var NavigationMenuViewport = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx(
549
- NavigationMenuPrimitive.Viewport,
550
- {
551
- className: cn(
552
- "origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
553
- className
554
- ),
555
- ref,
556
- ...props
557
- }
558
- ) }));
559
- NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
560
- var NavigationMenuIndicator = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
561
- NavigationMenuPrimitive.Indicator,
562
- {
563
- ref,
564
- className: cn(
565
- "top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in",
566
- className
567
- ),
568
- ...props,
569
- children: /* @__PURE__ */ jsx("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" })
570
- }
571
- ));
572
- NavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;
573
- var Sheet = SheetPrimitive.Root;
574
- var SheetTrigger = SheetPrimitive.Trigger;
575
- var SheetClose = SheetPrimitive.Close;
576
- var SheetPortal = SheetPrimitive.Portal;
577
- var SheetOverlay = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
578
- SheetPrimitive.Overlay,
579
- {
580
- className: cn(
581
- "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
582
- className
583
- ),
584
- ...props,
585
- ref
586
- }
587
- ));
588
- SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
589
- var sheetVariants = cva(
590
- "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out",
591
- {
592
- variants: {
593
- side: {
594
- top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
595
- bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
596
- left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
597
- right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
598
- }
599
- },
600
- defaultVariants: {
601
- side: "right"
602
- }
603
- }
604
- );
605
- var SheetContent = React18.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(SheetPortal, { children: [
606
- /* @__PURE__ */ jsx(SheetOverlay, {}),
607
- /* @__PURE__ */ jsxs(
608
- SheetPrimitive.Content,
609
- {
610
- ref,
611
- className: cn(sheetVariants({ side }), className),
612
- ...props,
613
- children: [
614
- /* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
615
- /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
616
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
617
- ] }),
618
- children
619
- ]
620
- }
621
- )
622
- ] }));
623
- SheetContent.displayName = SheetPrimitive.Content.displayName;
624
- var SheetHeader = ({
625
- className,
626
- ...props
627
- }) => /* @__PURE__ */ jsx(
628
- "div",
629
- {
630
- className: cn(
631
- "flex flex-col space-y-2 text-center sm:text-left",
632
- className
633
- ),
634
- ...props
635
- }
636
- );
637
- SheetHeader.displayName = "SheetHeader";
638
- var SheetFooter = ({
639
- className,
640
- ...props
641
- }) => /* @__PURE__ */ jsx(
642
- "div",
643
- {
644
- className: cn(
645
- "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
646
- className
647
- ),
648
- ...props
649
- }
650
- );
651
- SheetFooter.displayName = "SheetFooter";
652
- var SheetTitle = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
653
- SheetPrimitive.Title,
654
- {
655
- ref,
656
- className: cn("text-lg font-semibold text-foreground", className),
657
- ...props
658
- }
659
- ));
660
- SheetTitle.displayName = SheetPrimitive.Title.displayName;
661
- var SheetDescription = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
662
- SheetPrimitive.Description,
663
- {
664
- ref,
665
- className: cn("text-sm text-muted-foreground", className),
666
- ...props
667
- }
668
- ));
669
- SheetDescription.displayName = SheetPrimitive.Description.displayName;
670
- var Dialog = SheetPrimitive.Root;
671
- var DialogTrigger = SheetPrimitive.Trigger;
672
- var DialogPortal = SheetPrimitive.Portal;
673
- var DialogClose = SheetPrimitive.Close;
674
- var DialogOverlay = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
675
- SheetPrimitive.Overlay,
676
- {
677
- ref,
678
- className: cn(
679
- "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
680
- className
681
- ),
682
- ...props
683
- }
684
- ));
685
- DialogOverlay.displayName = SheetPrimitive.Overlay.displayName;
686
- var DialogContent = React18.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
687
- /* @__PURE__ */ jsx(DialogOverlay, {}),
688
- /* @__PURE__ */ jsxs(
689
- SheetPrimitive.Content,
690
- {
691
- ref,
692
- className: cn(
693
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
694
- className
695
- ),
696
- ...props,
697
- children: [
698
- children,
699
- /* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
700
- /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
701
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
702
- ] })
703
- ]
704
- }
705
- )
706
- ] }));
707
- DialogContent.displayName = SheetPrimitive.Content.displayName;
708
- var DialogHeader = ({
709
- className,
710
- ...props
711
- }) => /* @__PURE__ */ jsx(
712
- "div",
713
- {
714
- className: cn(
715
- "flex flex-col space-y-1.5 text-center sm:text-left",
716
- className
717
- ),
718
- ...props
719
- }
720
- );
721
- DialogHeader.displayName = "DialogHeader";
722
- var DialogFooter = ({
723
- className,
724
- ...props
725
- }) => /* @__PURE__ */ jsx(
726
- "div",
727
- {
728
- className: cn(
729
- "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
730
- className
731
- ),
732
- ...props
733
- }
734
- );
735
- DialogFooter.displayName = "DialogFooter";
736
- var DialogTitle = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
737
- SheetPrimitive.Title,
738
- {
739
- ref,
740
- className: cn(
741
- "text-lg font-semibold leading-none tracking-tight",
742
- className
743
- ),
744
- ...props
745
- }
746
- ));
747
- DialogTitle.displayName = SheetPrimitive.Title.displayName;
748
- var DialogDescription = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
749
- SheetPrimitive.Description,
750
- {
751
- ref,
752
- className: cn("text-sm text-muted-foreground", className),
753
- ...props
754
- }
755
- ));
756
- DialogDescription.displayName = SheetPrimitive.Description.displayName;
757
- var Accordion = React18.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
758
- AccordionPrimitive.Root,
759
- {
760
- ref,
761
- "data-slot": "accordion",
762
- ...props
763
- }
764
- ));
765
- Accordion.displayName = "Accordion";
766
- var AccordionItem = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
767
- AccordionPrimitive.Item,
768
- {
769
- ref,
770
- "data-slot": "accordion-item",
771
- className: cn("border-b last:border-b-0", className),
772
- ...props
773
- }
774
- ));
775
- AccordionItem.displayName = "AccordionItem";
776
- var AccordionTrigger = React18.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
777
- AccordionPrimitive.Trigger,
778
- {
779
- ref,
780
- "data-slot": "accordion-trigger",
781
- className: cn(
782
- "flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] focus-visible:border-ring focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
783
- className
784
- ),
785
- ...props,
786
- children: [
787
- children,
788
- /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200" })
789
- ]
790
- }
791
- ) }));
792
- AccordionTrigger.displayName = "AccordionTrigger";
793
- var AccordionContent = React18.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
794
- AccordionPrimitive.Content,
795
- {
796
- ref,
797
- "data-slot": "accordion-content",
798
- className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
799
- ...props,
800
- children: /* @__PURE__ */ jsx("div", { className: cn("pt-0 pb-4", className), children })
801
- }
802
- ));
803
- AccordionContent.displayName = "AccordionContent";
804
- var CarouselContext = React18.createContext(null);
805
- function useCarousel() {
806
- const context = React18.useContext(CarouselContext);
807
- if (!context) {
808
- throw new Error("useCarousel must be used within a <Carousel />");
809
- }
810
- return context;
811
- }
812
- var Carousel = React18.forwardRef(
813
- ({
814
- orientation = "horizontal",
815
- opts,
816
- setApi,
817
- plugins,
818
- className,
819
- children,
820
- ...props
821
- }, ref) => {
822
- const [carouselRef, api] = useEmblaCarousel(
823
- {
824
- ...opts,
825
- axis: orientation === "horizontal" ? "x" : "y"
826
- },
827
- plugins
828
- );
829
- const [canScrollPrev, setCanScrollPrev] = React18.useState(false);
830
- const [canScrollNext, setCanScrollNext] = React18.useState(false);
831
- const onSelect = React18.useCallback((api2) => {
832
- if (!api2) return;
833
- setCanScrollPrev(api2.canScrollPrev());
834
- setCanScrollNext(api2.canScrollNext());
835
- }, []);
836
- const scrollPrev = React18.useCallback(() => {
837
- api?.scrollPrev();
838
- }, [api]);
839
- const scrollNext = React18.useCallback(() => {
840
- api?.scrollNext();
841
- }, [api]);
842
- const handleKeyDown = React18.useCallback(
843
- (event) => {
844
- if (event.key === "ArrowLeft") {
845
- event.preventDefault();
846
- scrollPrev();
847
- } else if (event.key === "ArrowRight") {
848
- event.preventDefault();
849
- scrollNext();
850
- }
851
- },
852
- [scrollPrev, scrollNext]
853
- );
854
- React18.useEffect(() => {
855
- if (!api || !setApi) return;
856
- setApi(api);
857
- }, [api, setApi]);
858
- React18.useEffect(() => {
859
- if (!api) return;
860
- onSelect(api);
861
- api.on("reInit", onSelect);
862
- api.on("select", onSelect);
863
- return () => {
864
- api?.off("select", onSelect);
865
- };
866
- }, [api, onSelect]);
867
- return /* @__PURE__ */ jsx(
868
- CarouselContext.Provider,
869
- {
870
- value: {
871
- carouselRef,
872
- api,
873
- opts,
874
- orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
875
- scrollPrev,
876
- scrollNext,
877
- canScrollPrev,
878
- canScrollNext
879
- },
880
- children: /* @__PURE__ */ jsx(
881
- "div",
882
- {
883
- ref,
884
- onKeyDownCapture: handleKeyDown,
885
- className: cn("relative", className),
886
- role: "region",
887
- "aria-roledescription": "carousel",
888
- "data-slot": "carousel",
889
- ...props,
890
- children
891
- }
892
- )
893
- }
894
- );
895
- }
896
- );
897
- Carousel.displayName = "Carousel";
898
- var CarouselContent = React18.forwardRef(({ className, ...props }, ref) => {
899
- const { carouselRef, orientation } = useCarousel();
900
- return /* @__PURE__ */ jsx(
901
- "div",
902
- {
903
- ref: carouselRef,
904
- className: "overflow-hidden",
905
- "data-slot": "carousel-content",
906
- children: /* @__PURE__ */ jsx(
907
- "div",
908
- {
909
- ref,
910
- className: cn(
911
- "flex",
912
- orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
913
- className
914
- ),
915
- ...props
916
- }
917
- )
918
- }
919
- );
920
- });
921
- CarouselContent.displayName = "CarouselContent";
922
- var CarouselItem = React18.forwardRef(({ className, ...props }, ref) => {
923
- const { orientation } = useCarousel();
924
- return /* @__PURE__ */ jsx(
925
- "div",
926
- {
927
- ref,
928
- role: "group",
929
- "aria-roledescription": "slide",
930
- "data-slot": "carousel-item",
931
- className: cn(
932
- "min-w-0 shrink-0 grow-0 basis-full",
933
- orientation === "horizontal" ? "pl-4" : "pt-4",
934
- className
935
- ),
936
- ...props
937
- }
938
- );
939
- });
940
- CarouselItem.displayName = "CarouselItem";
941
- var CarouselPrevious = React18.forwardRef(({ className, variant = ButtonVariant.Outline, size = ButtonSize.Icon, ...props }, ref) => {
942
- const { orientation, scrollPrev, canScrollPrev } = useCarousel();
943
- return /* @__PURE__ */ jsxs(
944
- Button,
945
- {
946
- ref,
947
- "data-slot": "carousel-previous",
948
- variant,
949
- size,
950
- className: cn(
951
- "absolute h-8 w-8 rounded-full",
952
- orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
953
- className
954
- ),
955
- disabled: !canScrollPrev,
956
- onClick: scrollPrev,
957
- ...props,
958
- children: [
959
- /* @__PURE__ */ jsx(ArrowLeft, { className: "h-4 w-4" }),
960
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Previous slide" })
961
- ]
962
- }
963
- );
964
- });
965
- CarouselPrevious.displayName = "CarouselPrevious";
966
- var CarouselNext = React18.forwardRef(({ className, variant = ButtonVariant.Outline, size = ButtonSize.Icon, ...props }, ref) => {
967
- const { orientation, scrollNext, canScrollNext } = useCarousel();
968
- return /* @__PURE__ */ jsxs(
969
- Button,
970
- {
971
- ref,
972
- "data-slot": "carousel-next",
973
- variant,
974
- size,
975
- className: cn(
976
- "absolute h-8 w-8 rounded-full",
977
- orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
978
- className
979
- ),
980
- disabled: !canScrollNext,
981
- onClick: scrollNext,
982
- ...props,
983
- children: [
984
- /* @__PURE__ */ jsx(ArrowRight, { className: "h-4 w-4" }),
985
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Next slide" })
986
- ]
987
- }
988
- );
989
- });
990
- CarouselNext.displayName = "CarouselNext";
991
- var Collapsible = React18.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
992
- CollapsiblePrimitive.Root,
993
- {
994
- ref,
995
- "data-slot": "collapsible",
996
- ...props
997
- }
998
- ));
999
- Collapsible.displayName = "Collapsible";
1000
- var CollapsibleTrigger2 = React18.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
1001
- CollapsiblePrimitive.CollapsibleTrigger,
1002
- {
1003
- ref,
1004
- "data-slot": "collapsible-trigger",
1005
- ...props
1006
- }
1007
- ));
1008
- CollapsibleTrigger2.displayName = "CollapsibleTrigger";
1009
- var CollapsibleContent2 = React18.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
1010
- CollapsiblePrimitive.CollapsibleContent,
1011
- {
1012
- ref,
1013
- "data-slot": "collapsible-content",
1014
- ...props
1015
- }
1016
- ));
1017
- CollapsibleContent2.displayName = "CollapsibleContent";
1018
- var Select = SelectPrimitive.Root;
1019
- var SelectGroup = SelectPrimitive.Group;
1020
- var SelectValue = SelectPrimitive.Value;
1021
- var SelectTrigger = React18.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1022
- SelectPrimitive.Trigger,
1023
- {
1024
- ref,
1025
- className: cn(
1026
- // HAI3 customization: bg-background and hover states for consistency with Button Outline
1027
- "flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm ring-offset-background hover:bg-accent hover:text-bg-accent-foreground data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
1028
- className
1029
- ),
1030
- ...props,
1031
- children: [
1032
- children,
1033
- /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 opacity-50" }) })
1034
- ]
1035
- }
1036
- ));
1037
- SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
1038
- var SelectScrollUpButton = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1039
- SelectPrimitive.ScrollUpButton,
1040
- {
1041
- ref,
1042
- className: cn(
1043
- "flex cursor-default items-center justify-center py-1",
1044
- className
1045
- ),
1046
- ...props,
1047
- children: /* @__PURE__ */ jsx(ChevronUp, { className: "h-4 w-4" })
1048
- }
1049
- ));
1050
- SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
1051
- var SelectScrollDownButton = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1052
- SelectPrimitive.ScrollDownButton,
1053
- {
1054
- ref,
1055
- className: cn(
1056
- "flex cursor-default items-center justify-center py-1",
1057
- className
1058
- ),
1059
- ...props,
1060
- children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4" })
1061
- }
1062
- ));
1063
- SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
1064
- var SelectContent = React18.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
1065
- SelectPrimitive.Content,
1066
- {
1067
- ref,
1068
- className: cn(
1069
- "relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",
1070
- 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",
1071
- className
1072
- ),
1073
- position,
1074
- ...props,
1075
- children: [
1076
- /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
1077
- /* @__PURE__ */ jsx(
1078
- SelectPrimitive.Viewport,
1079
- {
1080
- className: cn(
1081
- "p-1",
1082
- position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
1083
- ),
1084
- children
1085
- }
1086
- ),
1087
- /* @__PURE__ */ jsx(SelectScrollDownButton, {})
1088
- ]
1089
- }
1090
- ) }));
1091
- SelectContent.displayName = SelectPrimitive.Content.displayName;
1092
- var SelectLabel = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1093
- SelectPrimitive.Label,
1094
- {
1095
- ref,
1096
- className: cn("px-2 py-1.5 text-sm font-semibold", className),
1097
- ...props
1098
- }
1099
- ));
1100
- SelectLabel.displayName = SelectPrimitive.Label.displayName;
1101
- var SelectItem = React18.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1102
- SelectPrimitive.Item,
1103
- {
1104
- ref,
1105
- className: cn(
1106
- "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-bg-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1107
- className
1108
- ),
1109
- ...props,
1110
- children: [
1111
- /* @__PURE__ */ jsx("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
1112
- /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children })
1113
- ]
1114
- }
1115
- ));
1116
- SelectItem.displayName = SelectPrimitive.Item.displayName;
1117
- var SelectSeparator = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1118
- SelectPrimitive.Separator,
1119
- {
1120
- ref,
1121
- className: cn("-mx-1 my-1 h-px bg-muted", className),
1122
- ...props
1123
- }
1124
- ));
1125
- SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
1126
- var DropdownMenu = ({ dir, ...props }) => /* @__PURE__ */ jsx(
1127
- DropdownMenuPrimitive.Root,
1128
- {
1129
- ...props,
1130
- dir
1131
- }
1132
- );
1133
- DropdownMenu.displayName = "DropdownMenu";
1134
- var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
1135
- var DropdownMenuGroup = DropdownMenuPrimitive.Group;
1136
- var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
1137
- var DropdownMenuSub = DropdownMenuPrimitive.Sub;
1138
- var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
1139
- var DropdownMenuSubTrigger = React18.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1140
- DropdownMenuPrimitive.SubTrigger,
1141
- {
1142
- ref,
1143
- className: cn(
1144
- "flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1145
- inset && "pl-8",
1146
- className
1147
- ),
1148
- ...props,
1149
- children: [
1150
- children,
1151
- /* @__PURE__ */ jsx(ChevronRight, { className: "ms-auto rtl:rotate-180" })
1152
- ]
1153
- }
1154
- ));
1155
- DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
1156
- var DropdownMenuSubContent = React18.forwardRef(({ className, container, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { container: container ?? void 0, children: /* @__PURE__ */ jsx(
1157
- DropdownMenuPrimitive.SubContent,
1158
- {
1159
- ref,
1160
- className: cn(
1161
- "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1162
- className
1163
- ),
1164
- ...props
1165
- }
1166
- ) }));
1167
- DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
1168
- var DropdownMenuContent = React18.forwardRef(({ className, sideOffset = 4, container, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { container: container ?? void 0, children: /* @__PURE__ */ jsx(
1169
- DropdownMenuPrimitive.Content,
1170
- {
1171
- ref,
1172
- sideOffset,
1173
- className: cn(
1174
- "z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",
1175
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1176
- className
1177
- ),
1178
- ...props
1179
- }
1180
- ) }));
1181
- DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
1182
- var DropdownMenuItem = React18.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1183
- DropdownMenuPrimitive.Item,
1184
- {
1185
- ref,
1186
- className: cn(
1187
- "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0",
1188
- inset && "pl-8",
1189
- className
1190
- ),
1191
- ...props
1192
- }
1193
- ));
1194
- DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
1195
- var DropdownMenuCheckboxItem = React18.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
1196
- DropdownMenuPrimitive.CheckboxItem,
1197
- {
1198
- ref,
1199
- className: cn(
1200
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1201
- className
1202
- ),
1203
- checked,
1204
- ...props,
1205
- children: [
1206
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
1207
- children
1208
- ]
1209
- }
1210
- ));
1211
- DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
1212
- var DropdownMenuRadioItem = React18.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1213
- DropdownMenuPrimitive.RadioItem,
1214
- {
1215
- ref,
1216
- className: cn(
1217
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1218
- className
1219
- ),
1220
- ...props,
1221
- children: [
1222
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { className: "h-2 w-2 fill-current" }) }) }),
1223
- children
1224
- ]
1225
- }
1226
- ));
1227
- DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
1228
- var DropdownMenuLabel = React18.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1229
- DropdownMenuPrimitive.Label,
1230
- {
1231
- ref,
1232
- className: cn(
1233
- "px-2 py-1.5 text-sm font-semibold",
1234
- inset && "pl-8",
1235
- className
1236
- ),
1237
- ...props
1238
- }
1239
- ));
1240
- DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
1241
- var DropdownMenuSeparator = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1242
- DropdownMenuPrimitive.Separator,
1243
- {
1244
- ref,
1245
- className: cn("-mx-1 my-1 h-px bg-muted", className),
1246
- ...props
1247
- }
1248
- ));
1249
- DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
1250
- var DropdownMenuShortcut = ({
1251
- className,
1252
- ...props
1253
- }) => {
1254
- return /* @__PURE__ */ jsx(
1255
- "span",
1256
- {
1257
- className: cn("ml-auto text-xs tracking-widest opacity-60", className),
1258
- ...props
1259
- }
1260
- );
1261
- };
1262
- DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1263
- function ContextMenu({
1264
- ...props
1265
- }) {
1266
- return /* @__PURE__ */ jsx(ContextMenuPrimitive.Root, { "data-slot": "context-menu", ...props });
1267
- }
1268
- function ContextMenuTrigger({
1269
- ...props
1270
- }) {
1271
- return /* @__PURE__ */ jsx(ContextMenuPrimitive.Trigger, { "data-slot": "context-menu-trigger", ...props });
1272
- }
1273
- function ContextMenuGroup({
1274
- ...props
1275
- }) {
1276
- return /* @__PURE__ */ jsx(ContextMenuPrimitive.Group, { "data-slot": "context-menu-group", ...props });
1277
- }
1278
- function ContextMenuPortal({
1279
- ...props
1280
- }) {
1281
- return /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { "data-slot": "context-menu-portal", ...props });
1282
- }
1283
- function ContextMenuSub({
1284
- ...props
1285
- }) {
1286
- return /* @__PURE__ */ jsx(ContextMenuPrimitive.Sub, { "data-slot": "context-menu-sub", ...props });
1287
- }
1288
- function ContextMenuRadioGroup({
1289
- ...props
1290
- }) {
1291
- return /* @__PURE__ */ jsx(
1292
- ContextMenuPrimitive.RadioGroup,
1293
- {
1294
- "data-slot": "context-menu-radio-group",
1295
- ...props
1296
- }
1297
- );
1298
- }
1299
- function ContextMenuSubTrigger({
1300
- className,
1301
- inset,
1302
- children,
1303
- ...props
1304
- }) {
1305
- return /* @__PURE__ */ jsxs(
1306
- ContextMenuPrimitive.SubTrigger,
1307
- {
1308
- "data-slot": "context-menu-sub-trigger",
1309
- "data-inset": inset,
1310
- className: cn(
1311
- "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1312
- className
1313
- ),
1314
- ...props,
1315
- children: [
1316
- children,
1317
- /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })
1318
- ]
1319
- }
1320
- );
1321
- }
1322
- function ContextMenuSubContent({
1323
- className,
1324
- ...props
1325
- }) {
1326
- return /* @__PURE__ */ jsx(
1327
- ContextMenuPrimitive.SubContent,
1328
- {
1329
- "data-slot": "context-menu-sub-content",
1330
- className: cn(
1331
- "bg-popover text-popover-foreground 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 z-50 min-w-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-hidden rounded-md border p-1 shadow-lg",
1332
- className
1333
- ),
1334
- ...props
1335
- }
1336
- );
1337
- }
1338
- function ContextMenuContent({
1339
- className,
1340
- ...props
1341
- }) {
1342
- return /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1343
- ContextMenuPrimitive.Content,
1344
- {
1345
- "data-slot": "context-menu-content",
1346
- className: cn(
1347
- "bg-popover text-popover-foreground 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 z-50 max-h-[var(--radix-context-menu-content-available-height)] min-w-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
1348
- className
1349
- ),
1350
- ...props
1351
- }
1352
- ) });
1353
- }
1354
- function ContextMenuItem({
1355
- className,
1356
- inset,
1357
- variant = "default",
1358
- ...props
1359
- }) {
1360
- return /* @__PURE__ */ jsx(
1361
- ContextMenuPrimitive.Item,
1362
- {
1363
- "data-slot": "context-menu-item",
1364
- "data-inset": inset,
1365
- "data-variant": variant,
1366
- className: cn(
1367
- "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1368
- className
1369
- ),
1370
- ...props
1371
- }
1372
- );
1373
- }
1374
- function ContextMenuCheckboxItem({
1375
- className,
1376
- children,
1377
- checked,
1378
- ...props
1379
- }) {
1380
- return /* @__PURE__ */ jsxs(
1381
- ContextMenuPrimitive.CheckboxItem,
1382
- {
1383
- "data-slot": "context-menu-checkbox-item",
1384
- className: cn(
1385
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1386
- className
1387
- ),
1388
- checked,
1389
- ...props,
1390
- children: [
1391
- /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
1392
- children
1393
- ]
1394
- }
1395
- );
1396
- }
1397
- function ContextMenuRadioItem({
1398
- className,
1399
- children,
1400
- ...props
1401
- }) {
1402
- return /* @__PURE__ */ jsxs(
1403
- ContextMenuPrimitive.RadioItem,
1404
- {
1405
- "data-slot": "context-menu-radio-item",
1406
- className: cn(
1407
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1408
- className
1409
- ),
1410
- ...props,
1411
- children: [
1412
- /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) }) }),
1413
- children
1414
- ]
1415
- }
1416
- );
1417
- }
1418
- function ContextMenuLabel({
1419
- className,
1420
- inset,
1421
- ...props
1422
- }) {
1423
- return /* @__PURE__ */ jsx(
1424
- ContextMenuPrimitive.Label,
1425
- {
1426
- "data-slot": "context-menu-label",
1427
- "data-inset": inset,
1428
- className: cn(
1429
- "text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
1430
- className
1431
- ),
1432
- ...props
1433
- }
1434
- );
1435
- }
1436
- function ContextMenuSeparator({
1437
- className,
1438
- ...props
1439
- }) {
1440
- return /* @__PURE__ */ jsx(
1441
- ContextMenuPrimitive.Separator,
1442
- {
1443
- "data-slot": "context-menu-separator",
1444
- className: cn("bg-border -mx-1 my-1 h-px", className),
1445
- ...props
1446
- }
1447
- );
1448
- }
1449
- function ContextMenuShortcut({
1450
- className,
1451
- ...props
1452
- }) {
1453
- return /* @__PURE__ */ jsx(
1454
- "span",
1455
- {
1456
- "data-slot": "context-menu-shortcut",
1457
- className: cn(
1458
- "text-muted-foreground ml-auto text-xs tracking-widest",
1459
- className
1460
- ),
1461
- ...props
1462
- }
1463
- );
1464
- }
1465
- var IconButton = React18__default.forwardRef(
1466
- ({ variant = ButtonVariant.Ghost, size = IconButtonSize.Default, className, ...props }, ref) => {
1467
- const sizeStyles = {
1468
- [IconButtonSize.Small]: "h-8 w-8",
1469
- [IconButtonSize.Default]: "h-9 w-9",
1470
- [IconButtonSize.Large]: "h-11 w-11"
1471
- };
1472
- return /* @__PURE__ */ jsx(
1473
- Button,
1474
- {
1475
- ref,
1476
- variant,
1477
- size: ButtonSize.Icon,
1478
- className: cn(sizeStyles[size], className),
1479
- ...props
1480
- }
1481
- );
1482
- }
1483
- );
1484
- IconButton.displayName = "IconButton";
1485
- var DropdownButton = React18__default.forwardRef(({ children, variant = ButtonVariant.Outline, className, ...props }, ref) => {
1486
- return /* @__PURE__ */ jsxs(
1487
- Button,
1488
- {
1489
- ref,
1490
- variant,
1491
- className: cn("min-w-40 justify-between rtl:flex-row-reverse", className),
1492
- ...props,
1493
- children: [
1494
- /* @__PURE__ */ jsx("span", { children }),
1495
- /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4" })
1496
- ]
1497
- }
1498
- );
1499
- });
1500
- DropdownButton.displayName = "DropdownButton";
1501
- var Sidebar = React18.forwardRef(({ collapsed = false, className, children, ...props }, ref) => {
1502
- return /* @__PURE__ */ jsx(
1503
- "aside",
1504
- {
1505
- ref,
1506
- "data-state": collapsed ? "collapsed" : "expanded",
1507
- "data-collapsible": collapsed ? "icon" : "",
1508
- className: cn(
1509
- "group flex flex-col border-r border-mainMenu-border transition-[width] duration-200 ease-linear",
1510
- "bg-mainMenu text-mainMenu-foreground",
1511
- collapsed ? "w-14" : "w-64",
1512
- className
1513
- ),
1514
- ...props,
1515
- children
1516
- }
1517
- );
1518
- });
1519
- Sidebar.displayName = "Sidebar";
1520
- var SidebarContent = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1521
- "div",
1522
- {
1523
- ref,
1524
- "data-sidebar": "content",
1525
- className: cn(
1526
- // HAI3 customization: gap and padding use rem-based spacing for theme scaling
1527
- "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden p-2",
1528
- className
1529
- ),
1530
- ...props
1531
- }
1532
- ));
1533
- SidebarContent.displayName = "SidebarContent";
1534
- var SidebarMenu = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1535
- "ul",
1536
- {
1537
- ref,
1538
- "data-sidebar": "menu",
1539
- className: cn("flex w-full min-w-0 flex-col gap-1", className),
1540
- ...props
1541
- }
1542
- ));
1543
- SidebarMenu.displayName = "SidebarMenu";
1544
- var SidebarMenuItem = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1545
- "li",
1546
- {
1547
- ref,
1548
- "data-sidebar": "menu-item",
1549
- className: cn("group/menu-item relative", className),
1550
- ...props
1551
- }
1552
- ));
1553
- SidebarMenuItem.displayName = "SidebarMenuItem";
1554
- var sidebarMenuButtonVariants = cva(
1555
- // HAI3 customization: All sizing uses rem-based Tailwind classes for theme responsiveness
1556
- "peer/menu-button flex w-full items-center gap-2 rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>span:last-child]:overflow-hidden [&>svg]:size-5 [&>svg]:shrink-0 text-mainMenu-foreground hover:bg-mainMenu-hover data-[active=true]:bg-mainMenu-selected data-[active=true]:text-white data-[active=true]:font-medium",
1557
- {
1558
- variants: {
1559
- variant: {
1560
- default: "",
1561
- outline: "bg-background shadow-[0_0_0_1px_hsl(var(--border))] hover:bg-mainMenu-hover"
1562
- },
1563
- size: {
1564
- // HAI3 customization: All heights use rem-based Tailwind classes (h-10=2.5rem, h-7=1.75rem, h-12=3rem)
1565
- default: "h-10 text-sm",
1566
- sm: "h-7 text-xs",
1567
- lg: "h-12 text-sm group-data-[collapsible=icon]:!p-0"
1568
- }
1569
- },
1570
- defaultVariants: {
1571
- variant: "default",
1572
- size: "default"
1573
- }
1574
- }
1575
- );
1576
- var SidebarMenuButton = React18.forwardRef(
1577
- ({
1578
- asChild = false,
1579
- isActive = false,
1580
- variant = "default",
1581
- size = "default",
1582
- tooltip,
1583
- className,
1584
- ...props
1585
- }, ref) => {
1586
- const Comp = asChild ? Slot : "button";
1587
- return /* @__PURE__ */ jsx(
1588
- Comp,
1589
- {
1590
- ref,
1591
- "data-sidebar": "menu-button",
1592
- "data-size": size,
1593
- "data-active": isActive,
1594
- title: tooltip,
1595
- className: cn(sidebarMenuButtonVariants({ variant, size }), className),
1596
- ...props
1597
- }
1598
- );
1599
- }
1600
- );
1601
- SidebarMenuButton.displayName = "SidebarMenuButton";
1602
- var SidebarMenuIcon = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1603
- "span",
1604
- {
1605
- ref,
1606
- className: cn("size-5 min-w-[1.5rem] flex-shrink-0 [&>svg]:w-full [&>svg]:h-full", className),
1607
- ...props
1608
- }
1609
- ));
1610
- SidebarMenuIcon.displayName = "SidebarMenuIcon";
1611
- var SidebarMenuLabel = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1612
- "span",
1613
- {
1614
- ref,
1615
- className: cn(className),
1616
- ...props
1617
- }
1618
- ));
1619
- SidebarMenuLabel.displayName = "SidebarMenuLabel";
1620
- var SidebarHeader = React18.forwardRef(
1621
- ({ logo, logoText, collapsed = false, onClick, className, ...props }, ref) => {
1622
- return /* @__PURE__ */ jsxs(
1623
- "div",
1624
- {
1625
- ref,
1626
- className: cn(
1627
- "flex flex-col h-16",
1628
- className
1629
- ),
1630
- ...props,
1631
- children: [
1632
- /* @__PURE__ */ jsx("div", { className: "flex items-center flex-1 px-2", children: /* @__PURE__ */ jsxs(SidebarMenuButton, { onClick, tooltip: collapsed ? "Expand menu" : "Collapse menu", children: [
1633
- logo && /* @__PURE__ */ jsx(SidebarMenuIcon, { children: logo }),
1634
- logoText && /* @__PURE__ */ jsx(SidebarMenuLabel, { className: "[&>svg]:h-5 [&>svg]:w-auto", children: logoText })
1635
- ] }) }),
1636
- /* @__PURE__ */ jsx("div", { className: "border-b border-mainMenu-border mx-4" })
1637
- ]
1638
- }
1639
- );
1640
- }
1641
- );
1642
- SidebarHeader.displayName = "SidebarHeader";
1643
- var UserInfo = React18__default.forwardRef(
1644
- ({ displayName, email, avatarUrl, className, loading }, ref) => {
1645
- const getInitials = () => {
1646
- if (!displayName) return toUpper(email?.[0] || "") || "?";
1647
- const parts = trim(displayName).split(/\s+/);
1648
- if (parts.length >= 2) {
1649
- return toUpper(`${parts[0][0]}${parts[parts.length - 1][0]}`);
1650
- }
1651
- return toUpper(displayName.slice(0, 2));
1652
- };
1653
- const initials = getInitials();
1654
- const displayText = displayName || email || "User";
1655
- if (loading) {
1656
- return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex items-center gap-2 text-sm", className), children: [
1657
- /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-8 rounded-full" }),
1658
- /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" })
1659
- ] });
1660
- }
1661
- return /* @__PURE__ */ jsxs(
1662
- "div",
1663
- {
1664
- ref,
1665
- className: cn(
1666
- "flex items-center gap-2 text-sm text-muted-foreground",
1667
- className
1668
- ),
1669
- children: [
1670
- /* @__PURE__ */ jsxs(Avatar, { className: "h-8 w-8", children: [
1671
- avatarUrl && /* @__PURE__ */ jsx(AvatarImage, { src: avatarUrl, alt: displayText }),
1672
- /* @__PURE__ */ jsx(AvatarFallback, { children: initials })
1673
- ] }),
1674
- /* @__PURE__ */ jsx("span", { children: displayText })
1675
- ]
1676
- }
1677
- );
1678
- }
1679
- );
1680
- UserInfo.displayName = "UserInfo";
1681
- var MessageType = /* @__PURE__ */ ((MessageType2) => {
1682
- MessageType2["User"] = "user";
1683
- MessageType2["Assistant"] = "assistant";
1684
- return MessageType2;
1685
- })(MessageType || {});
1686
- var MessageBubble = ({
1687
- type,
1688
- content,
1689
- className = "",
1690
- onCopy,
1691
- onEdit,
1692
- onDelete
1693
- }) => {
1694
- const isUser = type === "user" /* User */;
1695
- return /* @__PURE__ */ jsxs("div", { className: `flex gap-4 group ${className}`, children: [
1696
- /* @__PURE__ */ jsx(Avatar, { className: "h-8 w-8 flex-shrink-0", children: /* @__PURE__ */ jsx(
1697
- AvatarFallback,
1698
- {
1699
- className: isUser ? "bg-blue-500 text-white" : "bg-green-500 text-white",
1700
- children: isUser ? /* @__PURE__ */ jsx(User, { size: 16 }) : /* @__PURE__ */ jsx(Bot, { size: 16 })
1701
- }
1702
- ) }),
1703
- /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
1704
- /* @__PURE__ */ jsx("div", { className: "prose prose-sm max-w-none", children: /* @__PURE__ */ jsx("div", { className: "leading-relaxed whitespace-pre-wrap", children: content }) }),
1705
- (onCopy || onEdit || onDelete) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 mt-2 opacity-0 group-hover:opacity-100 transition-opacity", children: [
1706
- onCopy && /* @__PURE__ */ jsx(
1707
- "button",
1708
- {
1709
- onClick: onCopy,
1710
- className: "p-1.5 hover:bg-muted rounded-lg transition-colors text-muted-foreground hover:text-foreground",
1711
- title: "Copy message",
1712
- children: /* @__PURE__ */ jsxs(
1713
- "svg",
1714
- {
1715
- width: "14",
1716
- height: "14",
1717
- viewBox: "0 0 24 24",
1718
- fill: "none",
1719
- stroke: "currentColor",
1720
- strokeWidth: "2",
1721
- strokeLinecap: "round",
1722
- strokeLinejoin: "round",
1723
- children: [
1724
- /* @__PURE__ */ jsx("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2", ry: "2" }),
1725
- /* @__PURE__ */ jsx("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
1726
- ]
1727
- }
1728
- )
1729
- }
1730
- ),
1731
- onEdit && /* @__PURE__ */ jsx(
1732
- "button",
1733
- {
1734
- onClick: onEdit,
1735
- className: "p-1.5 hover:bg-muted rounded-lg transition-colors text-muted-foreground hover:text-foreground",
1736
- title: "Edit message",
1737
- children: /* @__PURE__ */ jsxs(
1738
- "svg",
1739
- {
1740
- width: "14",
1741
- height: "14",
1742
- viewBox: "0 0 24 24",
1743
- fill: "none",
1744
- stroke: "currentColor",
1745
- strokeWidth: "2",
1746
- strokeLinecap: "round",
1747
- strokeLinejoin: "round",
1748
- children: [
1749
- /* @__PURE__ */ jsx("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }),
1750
- /* @__PURE__ */ jsx("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })
1751
- ]
1752
- }
1753
- )
1754
- }
1755
- ),
1756
- onDelete && /* @__PURE__ */ jsx(
1757
- "button",
1758
- {
1759
- onClick: onDelete,
1760
- className: "p-1.5 hover:bg-destructive/10 rounded-lg transition-colors text-muted-foreground hover:text-destructive",
1761
- title: "Delete message",
1762
- children: /* @__PURE__ */ jsxs(
1763
- "svg",
1764
- {
1765
- width: "14",
1766
- height: "14",
1767
- viewBox: "0 0 24 24",
1768
- fill: "none",
1769
- stroke: "currentColor",
1770
- strokeWidth: "2",
1771
- strokeLinecap: "round",
1772
- strokeLinejoin: "round",
1773
- children: [
1774
- /* @__PURE__ */ jsx("polyline", { points: "3 6 5 6 21 6" }),
1775
- /* @__PURE__ */ jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
1776
- ]
1777
- }
1778
- )
1779
- }
1780
- )
1781
- ] })
1782
- ] })
1783
- ] });
1784
- };
1785
- var ChatInput = ({
1786
- value,
1787
- onChange,
1788
- onSend,
1789
- onAttachFile,
1790
- placeholder = "Type a message...",
1791
- disabled = false,
1792
- maxRows = 14,
1793
- className = ""
1794
- }) => {
1795
- const handleKeyDown = (e) => {
1796
- if (e.key === "Enter" && !e.shiftKey) {
1797
- e.preventDefault();
1798
- if (!disabled && trim(value)) {
1799
- onSend();
1800
- }
1801
- }
1802
- };
1803
- const rows = Math.min(
1804
- Math.max(value.split("\n").length, 1),
1805
- maxRows
1806
- );
1807
- return /* @__PURE__ */ jsxs("div", { className: `flex items-end gap-2 ${className}`, children: [
1808
- onAttachFile && /* @__PURE__ */ jsx(
1809
- Button,
1810
- {
1811
- variant: ButtonVariant.Ghost,
1812
- size: ButtonSize.Icon,
1813
- onClick: onAttachFile,
1814
- disabled,
1815
- className: "flex-shrink-0",
1816
- "aria-label": "Attach file",
1817
- children: /* @__PURE__ */ jsx(Paperclip, { size: 20 })
1818
- }
1819
- ),
1820
- /* @__PURE__ */ jsx(
1821
- "textarea",
1822
- {
1823
- value,
1824
- onChange: (e) => onChange(e.target.value),
1825
- onKeyDown: handleKeyDown,
1826
- placeholder,
1827
- disabled,
1828
- rows,
1829
- className: "flex-1 resize-none rounded-lg border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
1830
- }
1831
- ),
1832
- /* @__PURE__ */ jsx(
1833
- Button,
1834
- {
1835
- onClick: onSend,
1836
- disabled: disabled || !trim(value),
1837
- className: "flex-shrink-0",
1838
- "aria-label": "Send message",
1839
- children: /* @__PURE__ */ jsx(Send, { size: 20 })
1840
- }
1841
- )
1842
- ] });
1843
- };
1844
- var ThreadList = ({
1845
- threads,
1846
- selectedThreadId,
1847
- onThreadSelect,
1848
- onNewThread,
1849
- onDeleteThread,
1850
- searchQuery = "",
1851
- onSearchChange,
1852
- loading = false,
1853
- className = ""
1854
- }) => {
1855
- if (loading) {
1856
- return /* @__PURE__ */ jsxs("div", { className: `flex flex-col h-full ${className}`, children: [
1857
- /* @__PURE__ */ jsxs("div", { className: "p-4 border-b", children: [
1858
- /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-full mb-3" }),
1859
- /* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-full" })
1860
- ] }),
1861
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto p-2", children: [1, 2, 3, 4, 5].map((i) => /* @__PURE__ */ jsx(Skeleton, { className: "h-16 w-full mb-2" }, i)) })
1862
- ] });
1863
- }
1864
- return /* @__PURE__ */ jsxs("div", { className: `flex flex-col h-full ${className}`, children: [
1865
- /* @__PURE__ */ jsxs("div", { className: "p-4 border-b", children: [
1866
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-3", children: [
1867
- /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold", children: "Recent Chats" }),
1868
- /* @__PURE__ */ jsx(
1869
- Button,
1870
- {
1871
- variant: ButtonVariant.Ghost,
1872
- size: ButtonSize.Icon,
1873
- onClick: onNewThread,
1874
- "aria-label": "New chat",
1875
- children: /* @__PURE__ */ jsx(Plus, { size: 16 })
1876
- }
1877
- )
1878
- ] }),
1879
- onSearchChange && /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1880
- /* @__PURE__ */ jsx(
1881
- Search,
1882
- {
1883
- size: 16,
1884
- className: "absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground"
1885
- }
1886
- ),
1887
- /* @__PURE__ */ jsx(
1888
- "input",
1889
- {
1890
- type: "text",
1891
- placeholder: "Search chats...",
1892
- value: searchQuery,
1893
- onChange: (e) => onSearchChange(e.target.value),
1894
- className: "w-full pl-9 pr-3 py-2 border border-input rounded-lg text-sm bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
1895
- }
1896
- )
1897
- ] })
1898
- ] }),
1899
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto", children: threads.length === 0 ? /* @__PURE__ */ jsx("div", { className: "p-4 text-center text-muted-foreground text-sm", children: "No chats yet. Start a new conversation!" }) : threads.map((thread) => /* @__PURE__ */ jsx(
1900
- "div",
1901
- {
1902
- onClick: () => onThreadSelect(thread.id),
1903
- className: `p-3 border-b cursor-pointer transition-colors hover:bg-muted/50 ${selectedThreadId === thread.id ? "bg-muted" : ""}`,
1904
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-2", children: [
1905
- /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
1906
- /* @__PURE__ */ jsxs("h3", { className: "font-medium text-sm truncate mb-1", children: [
1907
- thread.title,
1908
- thread.isTemporary && /* @__PURE__ */ jsx("span", { className: "ml-2 text-xs text-muted-foreground", children: "(Temporary)" })
1909
- ] }),
1910
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground truncate", children: thread.preview })
1911
- ] }),
1912
- onDeleteThread && /* @__PURE__ */ jsx(
1913
- "button",
1914
- {
1915
- onClick: (e) => {
1916
- e.stopPropagation();
1917
- onDeleteThread(thread.id);
1918
- },
1919
- className: "p-1 opacity-0 group-hover:opacity-100 hover:bg-destructive/10 rounded transition-opacity text-muted-foreground hover:text-destructive",
1920
- "aria-label": "Delete thread",
1921
- children: /* @__PURE__ */ jsxs(
1922
- "svg",
1923
- {
1924
- width: "14",
1925
- height: "14",
1926
- viewBox: "0 0 24 24",
1927
- fill: "none",
1928
- stroke: "currentColor",
1929
- strokeWidth: "2",
1930
- strokeLinecap: "round",
1931
- strokeLinejoin: "round",
1932
- children: [
1933
- /* @__PURE__ */ jsx("polyline", { points: "3 6 5 6 21 6" }),
1934
- /* @__PURE__ */ jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
1935
- ]
1936
- }
1937
- )
1938
- }
1939
- )
1940
- ] })
1941
- },
1942
- thread.id
1943
- )) })
1944
- ] });
1945
- };
1946
- var MENU_ICON_ID = "menu";
1947
- var MenuIcon = ({ className = "" }) => {
1948
- return /* @__PURE__ */ jsxs(
1949
- "svg",
1950
- {
1951
- className,
1952
- width: "20",
1953
- height: "20",
1954
- viewBox: "0 0 24 24",
1955
- fill: "none",
1956
- stroke: "currentColor",
1957
- strokeWidth: "2",
1958
- strokeLinecap: "round",
1959
- strokeLinejoin: "round",
1960
- children: [
1961
- /* @__PURE__ */ jsx("line", { x1: "3", y1: "12", x2: "21", y2: "12" }),
1962
- /* @__PURE__ */ jsx("line", { x1: "3", y1: "6", x2: "21", y2: "6" }),
1963
- /* @__PURE__ */ jsx("line", { x1: "3", y1: "18", x2: "21", y2: "18" })
1964
- ]
1965
- }
1966
- );
1967
- };
1968
- var CLOSE_ICON_ID = "close";
1969
- var CloseIcon = ({ className = "" }) => {
1970
- return /* @__PURE__ */ jsxs(
1971
- "svg",
1972
- {
1973
- className,
1974
- width: "20",
1975
- height: "20",
1976
- viewBox: "0 0 24 24",
1977
- fill: "none",
1978
- stroke: "currentColor",
1979
- strokeWidth: "2",
1980
- strokeLinecap: "round",
1981
- strokeLinejoin: "round",
1982
- children: [
1983
- /* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
1984
- /* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
1985
- ]
1986
- }
1987
- );
1988
- };
1989
-
1990
- // src/styles/applyTheme.ts
1991
- var hslToVar = (color) => {
1992
- if (color === "transparent") {
1993
- return "transparent";
1994
- }
1995
- if (color.startsWith("hsl(")) {
1996
- return color.replace("hsl(", "").replace(")", "");
1997
- }
1998
- return color;
1999
- };
2000
- var applyTheme = (theme, themeName) => {
2001
- const root = document.documentElement;
2002
- if (themeName) {
2003
- root.setAttribute("data-theme", themeName);
2004
- }
2005
- root.style.setProperty("--background", hslToVar(theme.colors.background));
2006
- root.style.setProperty("--foreground", hslToVar(theme.colors.foreground));
2007
- root.style.setProperty("--card", hslToVar(theme.colors.background));
2008
- root.style.setProperty("--card-foreground", hslToVar(theme.colors.foreground));
2009
- root.style.setProperty("--popover", hslToVar(theme.colors.background));
2010
- root.style.setProperty("--popover-foreground", hslToVar(theme.colors.foreground));
2011
- root.style.setProperty("--primary", hslToVar(theme.colors.primary));
2012
- root.style.setProperty("--primary-foreground", hslToVar(theme.colors.background));
2013
- root.style.setProperty("--secondary", hslToVar(theme.colors.secondary));
2014
- root.style.setProperty("--secondary-foreground", hslToVar(theme.colors.foreground));
2015
- root.style.setProperty("--muted", hslToVar(theme.colors.muted));
2016
- root.style.setProperty("--muted-foreground", hslToVar(theme.colors.foreground));
2017
- root.style.setProperty("--accent", hslToVar(theme.colors.accent));
2018
- root.style.setProperty("--accent-foreground", hslToVar(theme.colors.background));
2019
- root.style.setProperty("--destructive", hslToVar(theme.colors.error));
2020
- root.style.setProperty("--destructive-foreground", hslToVar(theme.colors.foreground));
2021
- root.style.setProperty("--border", hslToVar(theme.colors.border));
2022
- root.style.setProperty("--input", hslToVar(theme.colors.border));
2023
- root.style.setProperty("--ring", hslToVar(theme.colors.primary));
2024
- root.style.setProperty("--error", hslToVar(theme.colors.error));
2025
- root.style.setProperty("--warning", hslToVar(theme.colors.warning));
2026
- root.style.setProperty("--success", hslToVar(theme.colors.success));
2027
- root.style.setProperty("--info", hslToVar(theme.colors.info));
2028
- root.style.setProperty("--left-menu", hslToVar(theme.colors.mainMenu.DEFAULT));
2029
- root.style.setProperty("--left-menu-foreground", hslToVar(theme.colors.mainMenu.foreground));
2030
- root.style.setProperty("--left-menu-hover", hslToVar(theme.colors.mainMenu.hover));
2031
- root.style.setProperty("--left-menu-selected", hslToVar(theme.colors.mainMenu.selected));
2032
- root.style.setProperty("--left-menu-border", hslToVar(theme.colors.mainMenu.border));
2033
- Object.entries(theme.spacing).forEach(([key, value]) => {
2034
- root.style.setProperty(`--spacing-${key}`, value);
2035
- });
2036
- Object.entries(theme.borderRadius).forEach(([key, value]) => {
2037
- root.style.setProperty(`--radius-${key}`, value);
2038
- });
2039
- Object.entries(theme.shadows).forEach(([key, value]) => {
2040
- root.style.setProperty(`--shadow-${key}`, value);
2041
- });
2042
- Object.entries(theme.transitions).forEach(([key, value]) => {
2043
- root.style.setProperty(`--transition-${key}`, value);
2044
- });
2045
- if (themeName?.endsWith("-large")) {
2046
- root.style.fontSize = "125%";
2047
- } else {
2048
- root.style.fontSize = "";
2049
- }
2050
- };
2051
-
2052
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Avatar, AvatarFallback, AvatarImage, Badge, Button, CLOSE_ICON_ID, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChatInput, CloseIcon, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownButton, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Header, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, Input, MENU_ICON_ID, MenuIcon, MessageBubble, MessageType, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuIcon, SidebarMenuItem, SidebarMenuLabel, Skeleton, Slider, SliderRange, SliderThumb, SliderTrack, Spinner, Switch, Textarea, ThreadList, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserInfo, applyTheme, badgeVariants };
2053
- //# sourceMappingURL=index.mjs.map
2054
- //# sourceMappingURL=index.mjs.map