@hilum/ui 3.5.3 → 3.6.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 CHANGED
@@ -3,11 +3,7 @@ import { clsx } from 'clsx';
3
3
  import { twMerge } from 'tailwind-merge';
4
4
  import * as React16 from 'react';
5
5
  import { createContext, forwardRef, useRef, useState, useCallback, useEffect, useContext, isValidElement, cloneElement, useMemo, useId, Children, useLayoutEffect } from 'react';
6
- import { DropdownMenu, Avatar as Avatar$1, AlertDialog, AspectRatio, Checkbox, Collapsible, ContextMenu, Popover, Label as Label$1, HoverCard, Menubar, Dialog as Dialog$1, NavigationMenu, Progress, Separator, ScrollArea, Toggle, ToggleGroup, Slot as Slot$1 } from 'radix-ui';
7
6
  import { Check, Circle, ChevronRight, Minus, Search, X, ChevronDown, CornerDownRight, SkipForward, Pencil, Inbox, MessageCircle, Home, Pause, Play, RotateCcw, Link, ImageIcon, User, Globe, Brain, Paintbrush, Heart, Rocket, Lightbulb, Palette, Shield, Bell, Mail, Lock, Users, Loader, ArrowUp, ArrowRight, ArrowLeft, Plus, Settings, Star, Clock, SquareLibrary, RectangleHorizontal, Moon, Sun, Monitor, Dot, Menu, Copy, Pipette, MoreHorizontal, ChevronLeft, ChevronsUpDown, ChevronUp, CalendarIcon, Upload, File, CircleHelp, Info, AlertTriangle, AlertCircle, CheckCircle, GripVertical, Bold, Italic, Underline, Strikethrough, Heading1, Heading2, Heading3, List as List$1, ListOrdered, AlignLeft, FileText, Image as Image$1, Filter, ArrowDown, PanelLeft, TrendingDown, TrendingUp, Download, XCircle, Loader2 } from 'lucide-react';
8
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
9
- import { AnimatePresence, motion, useMotionValue, useTransform, animate, useReducedMotion, Reorder } from 'framer-motion';
10
- import * as AccordionPrimitive from '@radix-ui/react-accordion';
11
7
  import { IconCornerDownRight, IconPlayerSkipForward, IconPencil, IconInbox, IconMessageCircle, IconHome, IconPlayerPause, IconPlayerPlay, IconRotate2, IconCheck, IconLink, IconPhoto, IconUser, IconGlobe, IconBrain, IconBrush, IconHeart, IconRocket, IconBulb, IconPalette, IconShield, IconBell, IconMail, IconLock, IconUsers, IconLoader2, IconSearch, IconArrowUp, IconArrowRight, IconArrowLeft, IconPlus, IconSettings, IconStar, IconClock, IconLibrary, IconCircle, IconSquare, IconMoon, IconSun, IconDeviceDesktop, IconPoint, IconMenu2, IconCopy, IconX, IconColorPicker, IconChevronDown, IconChevronRight } from '@tabler/icons-react';
12
8
  import { ArrowElbowDownRight, SkipForward as SkipForward$1, Pencil as Pencil$1, Tray, ChatCircle, House, Pause as Pause$1, Play as Play$1, ArrowCounterClockwise, Check as Check$1, Link as Link$1, Image, User as User$1, Globe as Globe$1, Brain as Brain$1, PaintBrush, Heart as Heart$1, Rocket as Rocket$1, Lightbulb as Lightbulb$1, Palette as Palette$1, Shield as Shield$1, Bell as Bell$1, Envelope, Lock as Lock$1, Users as Users$1, Spinner as Spinner$1, MagnifyingGlass, ArrowUp as ArrowUp$1, ArrowRight as ArrowRight$1, ArrowLeft as ArrowLeft$1, Plus as Plus$1, Gear, Star as Star$1, Clock as Clock$1, Books, Circle as Circle$1, Rectangle, Moon as Moon$1, Sun as Sun$1, Monitor as Monitor$1, DotOutline, List, Copy as Copy$1, X as X$1, Eyedropper, CaretDown, CaretRight } from '@phosphor-icons/react';
13
9
  import { HugeiconsIcon } from '@hugeicons/react';
@@ -55,6 +51,10 @@ import HiPencil from '@hugeicons/core-free-icons/PencilEdit01Icon';
55
51
  import HiSkipForward from '@hugeicons/core-free-icons/NextIcon';
56
52
  import HiCornerDownRight from '@hugeicons/core-free-icons/ArrowMoveDownRightIcon';
57
53
  import { CornerDownRight as CornerDownRight$1, SkipForward as SkipForward$2, Pencil01, Inbox01, MessageCircle01, Home01, RefreshCcw01, Check as Check$2, Link01, Image01, User01, Globe01, CpuChip01, Brush01, Heart as Heart$2, Rocket01, Lightbulb01, Palette as Palette$2, Shield01, Bell01, Mail01, Lock01, Users01, Loading01, SearchMd, ArrowUp as ArrowUp$2, ArrowRight as ArrowRight$2, ArrowLeft as ArrowLeft$2, Plus as Plus$2, Settings01, Star01, Clock as Clock$2, BookClosed, Circle as Circle$2, Square, Moon01, Sun as Sun$2, Monitor01, Menu01, Copy01, XClose, Dropper, ChevronDown as ChevronDown$1, ChevronRight as ChevronRight$1 } from '@untitledui/icons';
54
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
55
+ import { DropdownMenu, Avatar as Avatar$1, AlertDialog, AspectRatio, Checkbox, Collapsible, ContextMenu, Popover, Label as Label$1, HoverCard, Menubar, Dialog as Dialog$1, NavigationMenu, Progress, Separator, ScrollArea, Toggle, ToggleGroup, Slot as Slot$1 } from 'radix-ui';
56
+ import { AnimatePresence, motion, useMotionValue, useTransform, animate, useReducedMotion, Reorder } from 'framer-motion';
57
+ import * as AccordionPrimitive from '@radix-ui/react-accordion';
58
58
  import { Slot } from '@radix-ui/react-slot';
59
59
  import { cva } from 'class-variance-authority';
60
60
  import { DayPicker } from 'react-day-picker';
@@ -79,469 +79,59 @@ import * as TabsPrimitive from '@radix-ui/react-tabs';
79
79
  function cn(...inputs) {
80
80
  return twMerge(clsx(inputs));
81
81
  }
82
- var motionClasses = "transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-150 ease-out motion-reduce:transition-none";
83
- var springMotionClasses = "transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-200 ease-[cubic-bezier(0.2,0.9,0.2,1.15)] motion-reduce:transition-none";
84
- var pressClasses = "active:scale-[0.97] motion-reduce:active:scale-100";
85
- var focusRingClasses = "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30 focus-visible:ring-offset-1";
86
- var iconStrokeClasses = "[&_svg]:transition-[stroke-width,transform,color] [&_svg]:duration-150 [&_svg]:ease-out group-hover:[&_svg]:stroke-[2]";
87
- var controlSurfaceClasses = "border border-border bg-card shadow-natural hover:border-ground-200 hover:shadow-elevated";
88
- var menuItemClasses = "relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2 body outline-none transition-[background-color,color,box-shadow] duration-150 ease-out";
89
- var menuItemActiveClasses = "focus:bg-muted focus:text-foreground data-[highlighted]:bg-muted";
90
- function useProximityIndex(axis = "y") {
91
- const containerRef = React16.useRef(null);
92
- const itemRefs = React16.useRef(/* @__PURE__ */ new Map());
93
- const frameRef = React16.useRef(null);
94
- const [activeIndex, setActiveIndex] = React16.useState(null);
95
- const registerItem = React16.useCallback((index, node) => {
96
- if (node) itemRefs.current.set(index, node);
97
- else itemRefs.current.delete(index);
98
- }, []);
99
- const onPointerMove = React16.useCallback(
100
- (event) => {
101
- if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);
102
- const pointer = axis === "x" ? event.clientX : event.clientY;
103
- frameRef.current = requestAnimationFrame(() => {
104
- frameRef.current = null;
105
- let closestIndex = null;
106
- let closestDistance = Number.POSITIVE_INFINITY;
107
- itemRefs.current.forEach((node, index) => {
108
- const rect = node.getBoundingClientRect();
109
- const start = axis === "x" ? rect.left : rect.top;
110
- const size = axis === "x" ? rect.width : rect.height;
111
- const center = start + size / 2;
112
- const distance = Math.abs(pointer - center);
113
- if (distance < closestDistance) {
114
- closestDistance = distance;
115
- closestIndex = index;
116
- }
117
- });
118
- setActiveIndex(closestIndex);
119
- });
120
- },
121
- [axis]
122
- );
123
- const clearActiveIndex = React16.useCallback(() => {
124
- if (frameRef.current !== null) {
125
- cancelAnimationFrame(frameRef.current);
126
- frameRef.current = null;
127
- }
128
- setActiveIndex(null);
129
- }, []);
130
- React16.useEffect(
131
- () => () => {
132
- if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);
133
- },
134
- []
135
- );
136
- return {
137
- activeIndex,
138
- containerRef,
139
- registerItem,
140
- handlers: {
141
- onPointerMove,
142
- onPointerLeave: clearActiveIndex
143
- }
82
+ var iconLibraryOrder = [
83
+ "lucide",
84
+ "tabler",
85
+ "phosphor",
86
+ "hugeicons",
87
+ "untitledui"
88
+ ];
89
+ var iconLibraryLabels = {
90
+ lucide: "Lucide",
91
+ tabler: "Tabler",
92
+ phosphor: "Phosphor",
93
+ hugeicons: "HugeIcons",
94
+ untitledui: "Untitled UI"
95
+ };
96
+ function tabler(Icon) {
97
+ return function TablerAdapter({ size, strokeWidth, className }) {
98
+ const props = {};
99
+ if (size !== void 0) props.size = size;
100
+ if (strokeWidth !== void 0) props.stroke = strokeWidth;
101
+ if (className !== void 0) props.className = className;
102
+ return /* @__PURE__ */ jsx(Icon, { ...props });
144
103
  };
145
104
  }
146
-
147
- // src/lib/mobile-popper-sheet.ts
148
- var mobileDialogSheetContentClassName = [
149
- "fixed inset-x-0 bottom-0 z-50 max-h-[calc(100dvh-1rem)] w-full overflow-y-auto",
150
- "rounded-t-2xl border border-border bg-card p-6 shadow-elevated",
151
- "max-sm:pb-[calc(1.5rem+env(safe-area-inset-bottom))] max-sm:pt-8",
152
- "max-sm:before:absolute max-sm:before:left-1/2 max-sm:before:top-3 max-sm:before:h-1 max-sm:before:w-9",
153
- "max-sm:before:-translate-x-1/2 max-sm:before:rounded-full max-sm:before:bg-muted-foreground/35"
154
- ].join(" ");
155
- var desktopDialogContentClassName = "sm:bottom-auto sm:left-1/2 sm:top-1/2 sm:max-h-[calc(100dvh-2rem)] sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-2xl";
156
- var dialogSheetMotionClassName = [
157
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
158
- "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
159
- "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
160
- "sm:data-[state=closed]:zoom-out-95 sm:data-[state=open]:zoom-in-95"
161
- ].join(" ");
162
- var mobilePopperSheetPositionClassName = [
163
- "max-sm:!fixed max-sm:!inset-x-3 max-sm:!bottom-3 max-sm:!top-auto max-sm:!left-3 max-sm:!right-3",
164
- "max-sm:!w-auto max-sm:!min-w-0 max-sm:!max-w-none max-sm:!transform-none"
165
- ].join(" ");
166
- var mobilePopperSheetSurfaceClassName = "max-sm:max-h-[min(70dvh,28rem)] max-sm:rounded-2xl max-sm:border max-sm:border-border max-sm:shadow-elevated";
167
- var mobilePopperSheetMotionClassName = [
168
- "max-sm:data-[state=closed]:slide-out-to-bottom max-sm:data-[state=open]:slide-in-from-bottom"
169
- ].join(" ");
170
- var mobilePopperSheetStyle = `
171
- @media (max-width: 639px) {
172
- [data-radix-popper-content-wrapper]:has([data-hilum-mobile-sheet="true"]) {
173
- position: fixed !important;
174
- inset: 0 !important;
175
- min-width: 0 !important;
176
- transform: none !important;
177
- pointer-events: none;
178
- z-index: 50 !important;
179
- }
180
-
181
- [data-radix-popper-content-wrapper]:has([data-hilum-mobile-sheet="true"][data-state="open"])::before {
182
- content: "";
183
- position: fixed;
184
- inset: 0;
185
- background: rgb(0 0 0 / 0.3);
186
- backdrop-filter: blur(4px);
187
- pointer-events: auto;
188
- }
189
-
190
- [data-hilum-mobile-sheet="true"] {
191
- position: fixed !important;
192
- left: 0.75rem !important;
193
- right: 0.75rem !important;
194
- bottom: max(0.75rem, env(safe-area-inset-bottom)) !important;
195
- top: auto !important;
196
- width: calc(100dvw - 1.5rem) !important;
197
- min-width: 0 !important;
198
- max-width: none !important;
199
- transform: none !important;
200
- pointer-events: auto;
201
- transform-origin: bottom center !important;
202
- overscroll-behavior: contain;
203
- }
204
-
205
- [data-hilum-mobile-sheet="true"]::before {
206
- content: "";
207
- position: absolute;
208
- top: 0.5rem;
209
- left: 50%;
210
- width: 2.25rem;
211
- height: 0.25rem;
212
- border-radius: 999px;
213
- background: hsl(var(--muted-foreground) / 0.35);
214
- transform: translateX(-50%);
215
- }
105
+ function phosphor(Icon) {
106
+ return function PhosphorAdapter({ size, strokeWidth, className }) {
107
+ const weight = strokeWidth != null && strokeWidth >= 1.75 ? "regular" : "light";
108
+ const props = { weight };
109
+ if (size !== void 0) props.size = size;
110
+ if (className !== void 0) props.className = className;
111
+ return /* @__PURE__ */ jsx(Icon, { ...props });
112
+ };
216
113
  }
217
- `;
218
- var DropdownMenuRoot = DropdownMenu.Root;
219
- var DropdownMenuTrigger = DropdownMenu.Trigger;
220
- var DropdownMenuGroup = DropdownMenu.Group;
221
- var DropdownMenuPortal = DropdownMenu.Portal;
222
- var DropdownMenuSub = DropdownMenu.Sub;
223
- var DropdownMenuRadioGroup = DropdownMenu.RadioGroup;
224
- var DropdownMenuContent = React16.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxs(Fragment, { children: [
225
- /* @__PURE__ */ jsx("style", { children: mobilePopperSheetStyle }),
226
- /* @__PURE__ */ jsx(DropdownMenu.Portal, { children: /* @__PURE__ */ jsx(
227
- DropdownMenu.Content,
228
- {
229
- ref,
230
- "data-hilum-mobile-sheet": "true",
231
- sideOffset,
232
- className: cn(
233
- "z-50 min-w-[8rem] rounded-xl border border-border bg-card p-1 shadow-elevated",
234
- mobilePopperSheetPositionClassName,
235
- mobilePopperSheetSurfaceClassName,
236
- "max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5",
237
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
238
- "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
239
- "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
240
- mobilePopperSheetMotionClassName,
241
- "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",
242
- "data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",
243
- className
244
- ),
245
- ...props
246
- }
247
- ) })
248
- ] }));
249
- DropdownMenuContent.displayName = "DropdownMenuContent";
250
- var DropdownMenuItem = React16.forwardRef(({ className, inset, destructive, ...props }, ref) => /* @__PURE__ */ jsx(
251
- DropdownMenu.Item,
252
- {
253
- ref,
254
- className: cn(
255
- menuItemClasses,
256
- motionClasses,
257
- pressClasses,
258
- destructive ? "text-destructive focus:bg-destructive/10 focus:text-destructive" : "text-muted-foreground focus:bg-muted focus:text-foreground",
259
- !destructive && menuItemActiveClasses,
260
- "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
261
- inset && "pl-8",
262
- className
263
- ),
264
- ...props
265
- }
266
- ));
267
- DropdownMenuItem.displayName = "DropdownMenuItem";
268
- var DropdownMenuCheckboxItem = React16.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
269
- DropdownMenu.CheckboxItem,
270
- {
271
- ref,
272
- className: cn(
273
- menuItemClasses,
274
- menuItemActiveClasses,
275
- "py-2 pl-8 pr-2.5 text-muted-foreground",
276
- "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
277
- className
278
- ),
279
- ...props,
280
- children: [
281
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { size: 13, className: "text-foreground" }) }) }),
282
- children
283
- ]
284
- }
285
- ));
286
- DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem";
287
- var DropdownMenuRadioItem = React16.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
288
- DropdownMenu.RadioItem,
289
- {
290
- ref,
291
- className: cn(
292
- menuItemClasses,
293
- menuItemActiveClasses,
294
- "py-2 pl-8 pr-2.5 text-muted-foreground",
295
- "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
296
- className
297
- ),
298
- ...props,
299
- children: [
300
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { size: 8, className: "fill-foreground text-foreground" }) }) }),
301
- children
302
- ]
303
- }
304
- ));
305
- DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem";
306
- var DropdownMenuLabel = React16.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
307
- DropdownMenu.Label,
308
- {
309
- ref,
310
- className: cn("px-2.5 py-1 label text-muted-foreground", inset && "pl-8", className),
311
- ...props
312
- }
313
- ));
314
- DropdownMenuLabel.displayName = "DropdownMenuLabel";
315
- var DropdownMenuSeparator = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
316
- DropdownMenu.Separator,
317
- {
318
- ref,
319
- className: cn("mx-1 my-1 h-px bg-muted", className),
320
- ...props
321
- }
322
- ));
323
- DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
324
- var DropdownMenuSubTrigger = React16.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
325
- DropdownMenu.SubTrigger,
326
- {
327
- ref,
328
- className: cn(
329
- menuItemClasses,
330
- menuItemActiveClasses,
331
- "text-muted-foreground data-[state=open]:bg-muted",
332
- inset && "pl-8",
333
- className
334
- ),
335
- ...props,
336
- children: [
337
- children,
338
- /* @__PURE__ */ jsx(ChevronRight, { size: 14, className: "ml-auto text-muted-foreground" })
339
- ]
340
- }
341
- ));
342
- DropdownMenuSubTrigger.displayName = "DropdownMenuSubTrigger";
343
- var DropdownMenuSubContent = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(Fragment, { children: [
344
- /* @__PURE__ */ jsx("style", { children: mobilePopperSheetStyle }),
345
- /* @__PURE__ */ jsx(
346
- DropdownMenu.SubContent,
347
- {
348
- ref,
349
- "data-hilum-mobile-sheet": "true",
350
- className: cn(
351
- "z-50 min-w-[8rem] rounded-xl border border-border bg-card p-1 shadow-elevated",
352
- mobilePopperSheetPositionClassName,
353
- mobilePopperSheetSurfaceClassName,
354
- "max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5",
355
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
356
- "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
357
- "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
358
- mobilePopperSheetMotionClassName,
359
- "data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",
360
- className
361
- ),
362
- ...props
363
- }
364
- )
365
- ] }));
366
- DropdownMenuSubContent.displayName = "DropdownMenuSubContent";
367
- function DropdownMenuShortcut({ className, ...props }) {
368
- return /* @__PURE__ */ jsx("span", { className: cn("ml-auto caption text-muted-foreground", className), ...props });
369
- }
370
- DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
371
- var sizeMap = {
372
- xs: "size-5 caption-xs",
373
- sm: "size-7 caption",
374
- md: "size-8 body",
375
- lg: "size-10 body-lg",
376
- xl: "size-12 subheading"
377
- };
378
- var Avatar = React16.forwardRef(
379
- ({ className, size = "md", ...props }, ref) => /* @__PURE__ */ jsx(
380
- Avatar$1.Root,
381
- {
382
- ref,
383
- className: cn(
384
- "relative flex shrink-0 overflow-hidden rounded-full",
385
- sizeMap[size],
386
- className
387
- ),
388
- ...props
389
- }
390
- )
391
- );
392
- Avatar.displayName = "Avatar";
393
- var AvatarImage = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
394
- Avatar$1.Image,
395
- {
396
- ref,
397
- className: cn(
398
- "aspect-square h-full w-full object-cover outline outline-1 -outline-offset-1 outline-black/10 dark:outline-white/10",
399
- className
400
- ),
401
- ...props
402
- }
403
- ));
404
- AvatarImage.displayName = "AvatarImage";
405
- var AvatarFallback = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
406
- Avatar$1.Fallback,
407
- {
408
- ref,
409
- className: cn(
410
- "flex h-full w-full items-center justify-center rounded-full bg-muted body font-semibold text-muted-foreground",
411
- className
412
- ),
413
- ...props
414
- }
415
- ));
416
- AvatarFallback.displayName = "AvatarFallback";
417
- var statusColorMap = {
418
- online: "bg-brand-secondary",
419
- offline: "bg-muted",
420
- busy: "bg-destructive",
421
- away: "bg-brand-secondary"
422
- };
423
- var statusSizeMap = {
424
- xs: "size-1.5 ring-1",
425
- sm: "size-2 ring-1",
426
- md: "size-2.5 ring-[1.5px]",
427
- lg: "size-3 ring-2",
428
- xl: "size-3.5 ring-2"
429
- };
430
- var AvatarWithStatus = React16.forwardRef(({ status, size = "md", className, children, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "relative inline-flex shrink-0", children: [
431
- /* @__PURE__ */ jsx(Avatar, { ref, size, className, ...props, children }),
432
- status && /* @__PURE__ */ jsx(
433
- "span",
434
- {
435
- className: cn(
436
- "absolute bottom-0 right-0 rounded-full ring-background",
437
- statusColorMap[status],
438
- statusSizeMap[size]
439
- )
440
- }
441
- )
442
- ] }));
443
- AvatarWithStatus.displayName = "AvatarWithStatus";
444
- var AccountMenuContent = React16.forwardRef(({ className, sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx(
445
- DropdownMenuContent,
446
- {
447
- ref,
448
- sideOffset,
449
- className: cn(
450
- "w-72 overflow-hidden rounded-xl border border-border bg-card p-0 text-foreground shadow-elevated",
451
- className
452
- ),
453
- ...props
454
- }
455
- ));
456
- AccountMenuContent.displayName = "AccountMenuContent";
457
- var AccountMenuHeader = React16.forwardRef(
458
- ({ name, email, avatarSrc, avatarAlt, fallback, className, ...props }, ref) => /* @__PURE__ */ jsxs(
459
- "div",
460
- {
461
- ref,
462
- className: cn("flex flex-col items-center px-5 py-5 text-center", className),
463
- ...props,
464
- children: [
465
- /* @__PURE__ */ jsxs(Avatar, { size: "lg", className: "mb-3", children: [
466
- avatarSrc && /* @__PURE__ */ jsx(AvatarImage, { src: avatarSrc, alt: avatarAlt ?? "" }),
467
- /* @__PURE__ */ jsx(AvatarFallback, { className: "bg-brand-primary text-primary-foreground", children: fallback })
468
- ] }),
469
- /* @__PURE__ */ jsx("p", { className: "body font-medium leading-tight text-foreground", children: name }),
470
- email && /* @__PURE__ */ jsx("p", { className: "caption text-muted-foreground", children: email })
471
- ]
472
- }
473
- )
474
- );
475
- AccountMenuHeader.displayName = "AccountMenuHeader";
476
- var AccountMenuSection = React16.forwardRef(
477
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("p-2", className), ...props })
478
- );
479
- AccountMenuSection.displayName = "AccountMenuSection";
480
- var AccountMenuItem = React16.forwardRef(({ icon, trailing, description, destructive, children, className, ...props }, ref) => /* @__PURE__ */ jsxs(
481
- DropdownMenuItem,
482
- {
483
- ref,
484
- className: cn(
485
- "min-h-10 rounded-md px-2.5 py-2",
486
- "group",
487
- destructive ? "text-destructive focus:bg-destructive/10 focus:text-destructive" : "text-foreground focus:bg-muted focus:text-foreground",
488
- "data-[disabled]:opacity-40",
489
- "[&_svg:not([class*='size-'])]:size-4",
490
- className
491
- ),
492
- ...props,
493
- children: [
494
- icon && /* @__PURE__ */ jsx("span", { className: "flex size-5 shrink-0 items-center justify-center", children: icon }),
495
- /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 flex-col", children: [
496
- /* @__PURE__ */ jsx("span", { className: "body truncate font-medium leading-tight", children }),
497
- description && /* @__PURE__ */ jsx("span", { className: "caption truncate font-normal text-muted-foreground group-focus:text-muted-foreground", children: description })
498
- ] }),
499
- trailing && /* @__PURE__ */ jsx("span", { className: "caption ml-3 shrink-0 text-muted-foreground", children: trailing })
500
- ]
501
- }
502
- ));
503
- AccountMenuItem.displayName = "AccountMenuItem";
504
- var AccountMenuSeparator = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuSeparator, { ref, className: cn("m-0 bg-border", className), ...props }));
505
- AccountMenuSeparator.displayName = "AccountMenuSeparator";
506
- function tabler(Icon) {
507
- return function TablerAdapter({ size, strokeWidth, className }) {
508
- const props = {};
509
- if (size !== void 0) props.size = size;
510
- if (strokeWidth !== void 0) props.stroke = strokeWidth;
511
- if (className !== void 0) props.className = className;
512
- return /* @__PURE__ */ jsx(Icon, { ...props });
513
- };
514
- }
515
- function phosphor(Icon) {
516
- return function PhosphorAdapter({ size, strokeWidth, className }) {
517
- const weight = strokeWidth != null && strokeWidth >= 1.75 ? "regular" : "light";
518
- const props = { weight };
519
- if (size !== void 0) props.size = size;
520
- if (className !== void 0) props.className = className;
521
- return /* @__PURE__ */ jsx(Icon, { ...props });
522
- };
523
- }
524
- function hugeicons(iconDef) {
525
- return function HugeIconsAdapter({ size, strokeWidth, className }) {
526
- const props = {};
527
- if (size !== void 0) props.size = size;
528
- if (strokeWidth !== void 0) props.strokeWidth = strokeWidth;
529
- if (className !== void 0) props.className = className;
530
- return /* @__PURE__ */ jsx(
531
- HugeiconsIcon,
532
- {
533
- icon: iconDef,
534
- ...props
535
- }
536
- );
537
- };
538
- }
539
- function untitledui(Icon) {
540
- return function UntitledUiAdapter({ size, strokeWidth, className }) {
541
- const props = {};
542
- if (size !== void 0) {
543
- props.width = size;
544
- props.height = size;
114
+ function hugeicons(iconDef) {
115
+ return function HugeIconsAdapter({ size, strokeWidth, className }) {
116
+ const props = {};
117
+ if (size !== void 0) props.size = size;
118
+ if (strokeWidth !== void 0) props.strokeWidth = strokeWidth;
119
+ if (className !== void 0) props.className = className;
120
+ return /* @__PURE__ */ jsx(
121
+ HugeiconsIcon,
122
+ {
123
+ icon: iconDef,
124
+ ...props
125
+ }
126
+ );
127
+ };
128
+ }
129
+ function untitledui(Icon) {
130
+ return function UntitledUiAdapter({ size, strokeWidth, className }) {
131
+ const props = {};
132
+ if (size !== void 0) {
133
+ props.width = size;
134
+ props.height = size;
545
135
  }
546
136
  if (strokeWidth !== void 0) props.strokeWidth = strokeWidth;
547
137
  if (className !== void 0) props.className = className;
@@ -797,19 +387,560 @@ var untitleduiMap = {
797
387
  "skip-forward": untitledui(SkipForward$2),
798
388
  "corner-down-right": untitledui(CornerDownRight$1)
799
389
  };
800
- var iconMap = {
801
- lucide: lucideMap,
802
- tabler: tablerMap,
803
- phosphor: phosphorMap,
804
- hugeicons: hugeiconsMap,
805
- untitledui: untitleduiMap
390
+ var iconMap = {
391
+ lucide: lucideMap,
392
+ tabler: tablerMap,
393
+ phosphor: phosphorMap,
394
+ hugeicons: hugeiconsMap,
395
+ untitledui: untitleduiMap
396
+ };
397
+ var IconContext = createContext(null);
398
+ function useIconLibrary() {
399
+ const ctx = useContext(IconContext);
400
+ if (!ctx) throw new Error("useIconLibrary must be used within an IconProvider");
401
+ return ctx;
402
+ }
403
+ function useIcon(name) {
404
+ const ctx = useContext(IconContext);
405
+ if (!ctx) return iconMap.lucide[name];
406
+ return iconMap[ctx.iconLibrary][name];
407
+ }
408
+ function useIcons() {
409
+ const ctx = useContext(IconContext);
410
+ const lib = ctx?.iconLibrary ?? "lucide";
411
+ return useMemo(() => iconMap[lib], [lib]);
412
+ }
413
+ function IconProvider({
414
+ children,
415
+ defaultLibrary = "lucide"
416
+ }) {
417
+ const [iconLibrary, setIconLibraryState] = useState(defaultLibrary);
418
+ const setIconLibrary = useCallback((next) => {
419
+ setIconLibraryState(next);
420
+ }, []);
421
+ useEffect(() => {
422
+ const onKeyDown = (e) => {
423
+ if (e.key !== "i" && e.key !== "I") return;
424
+ if (e.metaKey || e.ctrlKey || e.altKey) return;
425
+ const tag = e.target?.tagName;
426
+ if (tag === "INPUT" || tag === "TEXTAREA" || e.target?.isContentEditable)
427
+ return;
428
+ e.preventDefault();
429
+ setIconLibraryState((prev) => {
430
+ const idx = iconLibraryOrder.indexOf(prev);
431
+ return iconLibraryOrder[(idx + 1) % iconLibraryOrder.length];
432
+ });
433
+ };
434
+ document.addEventListener("keydown", onKeyDown);
435
+ return () => document.removeEventListener("keydown", onKeyDown);
436
+ }, []);
437
+ return /* @__PURE__ */ jsx(IconContext.Provider, { value: { iconLibrary, setIconLibrary }, children });
438
+ }
439
+ var shapeOrder = ["rounded", "pill"];
440
+ var shapeMap = {
441
+ pill: {
442
+ item: "rounded-[20px]",
443
+ bg: "rounded-[20px]",
444
+ // +2px over `item` because the focus ring sits 2px outside the element
445
+ // (top/left -2, width/height +4); this keeps the corners concentric so a
446
+ // pill element gets a pill ring (matches the rounded-mode 8px→10px bump).
447
+ focusRing: "rounded-[22px]",
448
+ mergedBg: "rounded-2xl",
449
+ container: "rounded-3xl",
450
+ button: "rounded-[20px]",
451
+ input: "rounded-[20px]",
452
+ bgRadius: 20,
453
+ mergedRadius: 16
454
+ },
455
+ rounded: {
456
+ item: "rounded-lg",
457
+ bg: "rounded-lg",
458
+ focusRing: "rounded-[10px]",
459
+ mergedBg: "rounded-lg",
460
+ container: "rounded-xl",
461
+ button: "rounded-lg",
462
+ input: "rounded-lg",
463
+ bgRadius: 8,
464
+ mergedRadius: 8
465
+ }
466
+ };
467
+ var ShapeContext = createContext(null);
468
+ function useShape() {
469
+ const ctx = useContext(ShapeContext);
470
+ if (!ctx) return shapeMap.rounded;
471
+ return ctx.classes;
472
+ }
473
+ function useShapeContext() {
474
+ const ctx = useContext(ShapeContext);
475
+ if (!ctx) throw new Error("useShapeContext must be used within a ShapeProvider");
476
+ return ctx;
477
+ }
478
+ function transitionShape(callback) {
479
+ const root = document.documentElement;
480
+ root.classList.add("transitioning");
481
+ void root.offsetHeight;
482
+ callback();
483
+ setTimeout(() => root.classList.remove("transitioning"), 200);
484
+ }
485
+ function ShapeProvider({
486
+ children,
487
+ defaultShape = "rounded"
488
+ }) {
489
+ const [shape3, setShapeState] = useState(defaultShape);
490
+ const setShape = useCallback((next) => {
491
+ transitionShape(() => setShapeState(next));
492
+ }, []);
493
+ useEffect(() => {
494
+ const onKeyDown = (e) => {
495
+ if (e.key !== "r" && e.key !== "R") return;
496
+ if (e.metaKey || e.ctrlKey || e.altKey) return;
497
+ const tag = e.target?.tagName;
498
+ if (tag === "INPUT" || tag === "TEXTAREA" || e.target?.isContentEditable)
499
+ return;
500
+ e.preventDefault();
501
+ transitionShape(() => {
502
+ setShapeState((prev) => {
503
+ const idx = shapeOrder.indexOf(prev);
504
+ return shapeOrder[(idx + 1) % shapeOrder.length];
505
+ });
506
+ });
507
+ };
508
+ document.addEventListener("keydown", onKeyDown);
509
+ return () => document.removeEventListener("keydown", onKeyDown);
510
+ }, []);
511
+ return /* @__PURE__ */ jsx(ShapeContext.Provider, { value: { shape: shape3, setShape, classes: shapeMap[shape3] }, children });
512
+ }
513
+ var SurfaceContext = createContext(1);
514
+ function useSurface() {
515
+ return useContext(SurfaceContext);
516
+ }
517
+ function SurfaceProvider({ value, children }) {
518
+ return /* @__PURE__ */ jsx(SurfaceContext.Provider, { value: Math.max(1, Math.min(8, value)), children });
519
+ }
520
+ var motionClasses = "transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-150 ease-out motion-reduce:transition-none";
521
+ var springMotionClasses = "transition-[background-color,border-color,box-shadow,color,opacity,transform] duration-200 ease-[cubic-bezier(0.2,0.9,0.2,1.15)] motion-reduce:transition-none";
522
+ var pressClasses = "active:scale-[0.97] motion-reduce:active:scale-100";
523
+ var focusRingClasses = "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand-primary/30 focus-visible:ring-offset-1";
524
+ var iconStrokeClasses = "[&_svg]:transition-[stroke-width,transform,color] [&_svg]:duration-150 [&_svg]:ease-out group-hover:[&_svg]:stroke-[2]";
525
+ var controlSurfaceClasses = "border border-border bg-background hover:border-ground-200";
526
+ var menuItemClasses = "relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2.5 py-2 body outline-none transition-[background-color,color,box-shadow] duration-150 ease-out";
527
+ var menuItemActiveClasses = "focus:bg-muted focus:text-foreground data-[highlighted]:bg-muted";
528
+ function useProximityIndex(axis = "y") {
529
+ const containerRef = React16.useRef(null);
530
+ const itemRefs = React16.useRef(/* @__PURE__ */ new Map());
531
+ const frameRef = React16.useRef(null);
532
+ const [activeIndex, setActiveIndex] = React16.useState(null);
533
+ const registerItem = React16.useCallback((index, node) => {
534
+ if (node) itemRefs.current.set(index, node);
535
+ else itemRefs.current.delete(index);
536
+ }, []);
537
+ const onPointerMove = React16.useCallback(
538
+ (event) => {
539
+ if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);
540
+ const pointer = axis === "x" ? event.clientX : event.clientY;
541
+ frameRef.current = requestAnimationFrame(() => {
542
+ frameRef.current = null;
543
+ let closestIndex = null;
544
+ let closestDistance = Number.POSITIVE_INFINITY;
545
+ itemRefs.current.forEach((node, index) => {
546
+ const rect = node.getBoundingClientRect();
547
+ const start = axis === "x" ? rect.left : rect.top;
548
+ const size = axis === "x" ? rect.width : rect.height;
549
+ const center = start + size / 2;
550
+ const distance = Math.abs(pointer - center);
551
+ if (distance < closestDistance) {
552
+ closestDistance = distance;
553
+ closestIndex = index;
554
+ }
555
+ });
556
+ setActiveIndex(closestIndex);
557
+ });
558
+ },
559
+ [axis]
560
+ );
561
+ const clearActiveIndex = React16.useCallback(() => {
562
+ if (frameRef.current !== null) {
563
+ cancelAnimationFrame(frameRef.current);
564
+ frameRef.current = null;
565
+ }
566
+ setActiveIndex(null);
567
+ }, []);
568
+ React16.useEffect(
569
+ () => () => {
570
+ if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);
571
+ },
572
+ []
573
+ );
574
+ return {
575
+ activeIndex,
576
+ containerRef,
577
+ registerItem,
578
+ handlers: {
579
+ onPointerMove,
580
+ onPointerLeave: clearActiveIndex
581
+ }
582
+ };
583
+ }
584
+
585
+ // src/lib/mobile-popper-sheet.ts
586
+ var mobileDialogSheetContentClassName = [
587
+ "fixed inset-x-0 bottom-0 z-50 max-h-[calc(100dvh-1rem)] w-full overflow-y-auto",
588
+ "rounded-t-2xl border border-border bg-card p-6 shadow-elevated",
589
+ "max-sm:pb-[calc(1.5rem+env(safe-area-inset-bottom))] max-sm:pt-8",
590
+ "max-sm:before:absolute max-sm:before:left-1/2 max-sm:before:top-3 max-sm:before:h-1 max-sm:before:w-9",
591
+ "max-sm:before:-translate-x-1/2 max-sm:before:rounded-full max-sm:before:bg-muted-foreground/35"
592
+ ].join(" ");
593
+ var desktopDialogContentClassName = "sm:bottom-auto sm:left-1/2 sm:top-1/2 sm:max-h-[calc(100dvh-2rem)] sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-2xl";
594
+ var dialogSheetMotionClassName = [
595
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
596
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
597
+ "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
598
+ "sm:data-[state=closed]:zoom-out-95 sm:data-[state=open]:zoom-in-95"
599
+ ].join(" ");
600
+ var mobilePopperSheetPositionClassName = [
601
+ "max-sm:!fixed max-sm:!inset-x-3 max-sm:!bottom-3 max-sm:!top-auto max-sm:!left-3 max-sm:!right-3",
602
+ "max-sm:!w-auto max-sm:!min-w-0 max-sm:!max-w-none max-sm:!transform-none"
603
+ ].join(" ");
604
+ var mobilePopperSheetSurfaceClassName = "max-sm:max-h-[min(70dvh,28rem)] max-sm:rounded-2xl max-sm:border max-sm:border-border max-sm:shadow-elevated";
605
+ var mobilePopperSheetMotionClassName = [
606
+ "max-sm:data-[state=closed]:slide-out-to-bottom max-sm:data-[state=open]:slide-in-from-bottom"
607
+ ].join(" ");
608
+ var mobilePopperSheetStyle = `
609
+ @media (max-width: 639px) {
610
+ [data-radix-popper-content-wrapper]:has([data-hilum-mobile-sheet="true"]) {
611
+ position: fixed !important;
612
+ inset: 0 !important;
613
+ min-width: 0 !important;
614
+ transform: none !important;
615
+ pointer-events: none;
616
+ z-index: 50 !important;
617
+ }
618
+
619
+ [data-radix-popper-content-wrapper]:has([data-hilum-mobile-sheet="true"][data-state="open"])::before {
620
+ content: "";
621
+ position: fixed;
622
+ inset: 0;
623
+ background: rgb(0 0 0 / 0.3);
624
+ backdrop-filter: blur(4px);
625
+ pointer-events: auto;
626
+ }
627
+
628
+ [data-hilum-mobile-sheet="true"] {
629
+ position: fixed !important;
630
+ left: 0.75rem !important;
631
+ right: 0.75rem !important;
632
+ bottom: max(0.75rem, env(safe-area-inset-bottom)) !important;
633
+ top: auto !important;
634
+ width: calc(100dvw - 1.5rem) !important;
635
+ min-width: 0 !important;
636
+ max-width: none !important;
637
+ transform: none !important;
638
+ pointer-events: auto;
639
+ transform-origin: bottom center !important;
640
+ overscroll-behavior: contain;
641
+ }
642
+
643
+ [data-hilum-mobile-sheet="true"]::before {
644
+ content: "";
645
+ position: absolute;
646
+ top: 0.5rem;
647
+ left: 50%;
648
+ width: 2.25rem;
649
+ height: 0.25rem;
650
+ border-radius: 999px;
651
+ background: hsl(var(--muted-foreground) / 0.35);
652
+ transform: translateX(-50%);
653
+ }
654
+ }
655
+ `;
656
+ var DropdownMenuRoot = DropdownMenu.Root;
657
+ var DropdownMenuTrigger = DropdownMenu.Trigger;
658
+ var DropdownMenuGroup = DropdownMenu.Group;
659
+ var DropdownMenuPortal = DropdownMenu.Portal;
660
+ var DropdownMenuSub = DropdownMenu.Sub;
661
+ var DropdownMenuRadioGroup = DropdownMenu.RadioGroup;
662
+ var DropdownMenuContent = React16.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxs(Fragment, { children: [
663
+ /* @__PURE__ */ jsx("style", { children: mobilePopperSheetStyle }),
664
+ /* @__PURE__ */ jsx(DropdownMenu.Portal, { children: /* @__PURE__ */ jsx(
665
+ DropdownMenu.Content,
666
+ {
667
+ ref,
668
+ "data-hilum-mobile-sheet": "true",
669
+ sideOffset,
670
+ className: cn(
671
+ "z-50 min-w-[8rem] rounded-xl border border-border bg-card p-1 shadow-elevated",
672
+ mobilePopperSheetPositionClassName,
673
+ mobilePopperSheetSurfaceClassName,
674
+ "max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5",
675
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
676
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
677
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
678
+ mobilePopperSheetMotionClassName,
679
+ "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",
680
+ "data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",
681
+ className
682
+ ),
683
+ ...props
684
+ }
685
+ ) })
686
+ ] }));
687
+ DropdownMenuContent.displayName = "DropdownMenuContent";
688
+ var DropdownMenuItem = React16.forwardRef(({ className, inset, destructive, ...props }, ref) => /* @__PURE__ */ jsx(
689
+ DropdownMenu.Item,
690
+ {
691
+ ref,
692
+ className: cn(
693
+ menuItemClasses,
694
+ motionClasses,
695
+ pressClasses,
696
+ destructive ? "text-destructive focus:bg-destructive/10 focus:text-destructive" : "text-muted-foreground focus:bg-muted focus:text-foreground",
697
+ !destructive && menuItemActiveClasses,
698
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
699
+ inset && "pl-8",
700
+ className
701
+ ),
702
+ ...props
703
+ }
704
+ ));
705
+ DropdownMenuItem.displayName = "DropdownMenuItem";
706
+ var DropdownMenuCheckboxItem = React16.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
707
+ DropdownMenu.CheckboxItem,
708
+ {
709
+ ref,
710
+ className: cn(
711
+ menuItemClasses,
712
+ menuItemActiveClasses,
713
+ "py-2 pl-8 pr-2.5 text-muted-foreground",
714
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
715
+ className
716
+ ),
717
+ ...props,
718
+ children: [
719
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { size: 13, className: "text-foreground" }) }) }),
720
+ children
721
+ ]
722
+ }
723
+ ));
724
+ DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem";
725
+ var DropdownMenuRadioItem = React16.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
726
+ DropdownMenu.RadioItem,
727
+ {
728
+ ref,
729
+ className: cn(
730
+ menuItemClasses,
731
+ menuItemActiveClasses,
732
+ "py-2 pl-8 pr-2.5 text-muted-foreground",
733
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
734
+ className
735
+ ),
736
+ ...props,
737
+ children: [
738
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { size: 8, className: "fill-foreground text-foreground" }) }) }),
739
+ children
740
+ ]
741
+ }
742
+ ));
743
+ DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem";
744
+ var DropdownMenuLabel = React16.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
745
+ DropdownMenu.Label,
746
+ {
747
+ ref,
748
+ className: cn("px-2.5 py-1 label text-muted-foreground", inset && "pl-8", className),
749
+ ...props
750
+ }
751
+ ));
752
+ DropdownMenuLabel.displayName = "DropdownMenuLabel";
753
+ var DropdownMenuSeparator = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
754
+ DropdownMenu.Separator,
755
+ {
756
+ ref,
757
+ className: cn("mx-1 my-1 h-px bg-muted", className),
758
+ ...props
759
+ }
760
+ ));
761
+ DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
762
+ var DropdownMenuSubTrigger = React16.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
763
+ DropdownMenu.SubTrigger,
764
+ {
765
+ ref,
766
+ className: cn(
767
+ menuItemClasses,
768
+ menuItemActiveClasses,
769
+ "text-muted-foreground data-[state=open]:bg-muted",
770
+ inset && "pl-8",
771
+ className
772
+ ),
773
+ ...props,
774
+ children: [
775
+ children,
776
+ /* @__PURE__ */ jsx(ChevronRight, { size: 14, className: "ml-auto text-muted-foreground" })
777
+ ]
778
+ }
779
+ ));
780
+ DropdownMenuSubTrigger.displayName = "DropdownMenuSubTrigger";
781
+ var DropdownMenuSubContent = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(Fragment, { children: [
782
+ /* @__PURE__ */ jsx("style", { children: mobilePopperSheetStyle }),
783
+ /* @__PURE__ */ jsx(
784
+ DropdownMenu.SubContent,
785
+ {
786
+ ref,
787
+ "data-hilum-mobile-sheet": "true",
788
+ className: cn(
789
+ "z-50 min-w-[8rem] rounded-xl border border-border bg-card p-1 shadow-elevated",
790
+ mobilePopperSheetPositionClassName,
791
+ mobilePopperSheetSurfaceClassName,
792
+ "max-sm:overflow-y-auto max-sm:px-2 max-sm:pb-2 max-sm:pt-5",
793
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
794
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
795
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
796
+ mobilePopperSheetMotionClassName,
797
+ "data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",
798
+ className
799
+ ),
800
+ ...props
801
+ }
802
+ )
803
+ ] }));
804
+ DropdownMenuSubContent.displayName = "DropdownMenuSubContent";
805
+ function DropdownMenuShortcut({ className, ...props }) {
806
+ return /* @__PURE__ */ jsx("span", { className: cn("ml-auto caption text-muted-foreground", className), ...props });
807
+ }
808
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
809
+ var sizeMap = {
810
+ xs: "size-5 caption-xs",
811
+ sm: "size-7 caption",
812
+ md: "size-8 body",
813
+ lg: "size-10 body-lg",
814
+ xl: "size-12 subheading"
815
+ };
816
+ var Avatar = React16.forwardRef(
817
+ ({ className, size = "md", ...props }, ref) => /* @__PURE__ */ jsx(
818
+ Avatar$1.Root,
819
+ {
820
+ ref,
821
+ className: cn(
822
+ "relative flex shrink-0 overflow-hidden rounded-full",
823
+ sizeMap[size],
824
+ className
825
+ ),
826
+ ...props
827
+ }
828
+ )
829
+ );
830
+ Avatar.displayName = "Avatar";
831
+ var AvatarImage = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
832
+ Avatar$1.Image,
833
+ {
834
+ ref,
835
+ className: cn(
836
+ "aspect-square h-full w-full object-cover outline outline-1 -outline-offset-1 outline-black/10 dark:outline-white/10",
837
+ className
838
+ ),
839
+ ...props
840
+ }
841
+ ));
842
+ AvatarImage.displayName = "AvatarImage";
843
+ var AvatarFallback = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
844
+ Avatar$1.Fallback,
845
+ {
846
+ ref,
847
+ className: cn(
848
+ "flex h-full w-full items-center justify-center rounded-full bg-muted body font-semibold text-muted-foreground",
849
+ className
850
+ ),
851
+ ...props
852
+ }
853
+ ));
854
+ AvatarFallback.displayName = "AvatarFallback";
855
+ var statusColorMap = {
856
+ online: "bg-brand-secondary",
857
+ offline: "bg-muted",
858
+ busy: "bg-destructive",
859
+ away: "bg-brand-secondary"
806
860
  };
807
- var IconContext = createContext(null);
808
- function useIcon(name) {
809
- const ctx = useContext(IconContext);
810
- if (!ctx) return iconMap.lucide[name];
811
- return iconMap[ctx.iconLibrary][name];
812
- }
861
+ var statusSizeMap = {
862
+ xs: "size-1.5 ring-1",
863
+ sm: "size-2 ring-1",
864
+ md: "size-2.5 ring-[1.5px]",
865
+ lg: "size-3 ring-2",
866
+ xl: "size-3.5 ring-2"
867
+ };
868
+ var AvatarWithStatus = React16.forwardRef(({ status, size = "md", className, children, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "relative inline-flex shrink-0", children: [
869
+ /* @__PURE__ */ jsx(Avatar, { ref, size, className, ...props, children }),
870
+ status && /* @__PURE__ */ jsx(
871
+ "span",
872
+ {
873
+ className: cn(
874
+ "absolute bottom-0 right-0 rounded-full ring-background",
875
+ statusColorMap[status],
876
+ statusSizeMap[size]
877
+ )
878
+ }
879
+ )
880
+ ] }));
881
+ AvatarWithStatus.displayName = "AvatarWithStatus";
882
+ var AccountMenuContent = React16.forwardRef(({ className, sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx(
883
+ DropdownMenuContent,
884
+ {
885
+ ref,
886
+ sideOffset,
887
+ className: cn(
888
+ "w-72 overflow-hidden rounded-xl border border-border bg-card p-0 text-foreground shadow-elevated",
889
+ className
890
+ ),
891
+ ...props
892
+ }
893
+ ));
894
+ AccountMenuContent.displayName = "AccountMenuContent";
895
+ var AccountMenuHeader = React16.forwardRef(
896
+ ({ name, email, avatarSrc, avatarAlt, fallback, className, ...props }, ref) => /* @__PURE__ */ jsxs(
897
+ "div",
898
+ {
899
+ ref,
900
+ className: cn("flex flex-col items-center px-5 py-5 text-center", className),
901
+ ...props,
902
+ children: [
903
+ /* @__PURE__ */ jsxs(Avatar, { size: "lg", className: "mb-3", children: [
904
+ avatarSrc && /* @__PURE__ */ jsx(AvatarImage, { src: avatarSrc, alt: avatarAlt ?? "" }),
905
+ /* @__PURE__ */ jsx(AvatarFallback, { className: "bg-brand-primary text-primary-foreground", children: fallback })
906
+ ] }),
907
+ /* @__PURE__ */ jsx("p", { className: "body font-medium leading-tight text-foreground", children: name }),
908
+ email && /* @__PURE__ */ jsx("p", { className: "caption text-muted-foreground", children: email })
909
+ ]
910
+ }
911
+ )
912
+ );
913
+ AccountMenuHeader.displayName = "AccountMenuHeader";
914
+ var AccountMenuSection = React16.forwardRef(
915
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("p-2", className), ...props })
916
+ );
917
+ AccountMenuSection.displayName = "AccountMenuSection";
918
+ var AccountMenuItem = React16.forwardRef(({ icon, trailing, description, destructive, children, className, ...props }, ref) => /* @__PURE__ */ jsxs(
919
+ DropdownMenuItem,
920
+ {
921
+ ref,
922
+ className: cn(
923
+ "min-h-10 rounded-md px-2.5 py-2",
924
+ "group",
925
+ destructive ? "text-destructive focus:bg-destructive/10 focus:text-destructive" : "text-foreground focus:bg-muted focus:text-foreground",
926
+ "data-[disabled]:opacity-40",
927
+ "[&_svg:not([class*='size-'])]:size-4",
928
+ className
929
+ ),
930
+ ...props,
931
+ children: [
932
+ icon && /* @__PURE__ */ jsx("span", { className: "flex size-5 shrink-0 items-center justify-center", children: icon }),
933
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 flex-col", children: [
934
+ /* @__PURE__ */ jsx("span", { className: "body truncate font-medium leading-tight", children }),
935
+ description && /* @__PURE__ */ jsx("span", { className: "caption truncate font-normal text-muted-foreground group-focus:text-muted-foreground", children: description })
936
+ ] }),
937
+ trailing && /* @__PURE__ */ jsx("span", { className: "caption ml-3 shrink-0 text-muted-foreground", children: trailing })
938
+ ]
939
+ }
940
+ ));
941
+ AccountMenuItem.displayName = "AccountMenuItem";
942
+ var AccountMenuSeparator = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuSeparator, { ref, className: cn("m-0 bg-border", className), ...props }));
943
+ AccountMenuSeparator.displayName = "AccountMenuSeparator";
813
944
 
814
945
  // src/lib/springs.ts
815
946
  var spring = {
@@ -958,33 +1089,6 @@ function useProximityHover(containerRef, options = {}) {
958
1089
  measureItems
959
1090
  };
960
1091
  }
961
- var shapeMap = {
962
- pill: {
963
- item: "rounded-[20px]",
964
- bg: "rounded-[20px]",
965
- // +2px over `item` because the focus ring sits 2px outside the element
966
- // (top/left -2, width/height +4); this keeps the corners concentric so a
967
- // pill element gets a pill ring (matches the rounded-mode 8px→10px bump).
968
- focusRing: "rounded-[22px]",
969
- mergedBg: "rounded-2xl",
970
- container: "rounded-3xl",
971
- button: "rounded-[20px]",
972
- input: "rounded-[20px]",
973
- bgRadius: 20,
974
- mergedRadius: 16
975
- },
976
- rounded: {
977
- item: "rounded-lg",
978
- bg: "rounded-lg",
979
- focusRing: "rounded-[10px]",
980
- container: "rounded-xl"}
981
- };
982
- var ShapeContext = createContext(null);
983
- function useShape() {
984
- const ctx = useContext(ShapeContext);
985
- if (!ctx) return shapeMap.pill;
986
- return ctx.classes;
987
- }
988
1092
  var AccordionGroupContext = createContext(null);
989
1093
  function useAccordionGroup() {
990
1094
  return useContext(AccordionGroupContext);
@@ -1691,7 +1795,7 @@ var Button = forwardRef(
1691
1795
  className: "transition-[stroke-width] duration-80 group-hover:stroke-[2]"
1692
1796
  }
1693
1797
  ),
1694
- /* @__PURE__ */ jsx("span", { children }),
1798
+ LeadingIcon || TrailingIcon ? /* @__PURE__ */ jsx("span", { children }) : children,
1695
1799
  TrailingIcon && /* @__PURE__ */ jsx(
1696
1800
  TrailingIcon,
1697
1801
  {
@@ -4616,13 +4720,6 @@ CheckboxItem.displayName = "CheckboxItem";
4616
4720
  var CollapsibleRoot = Collapsible.Root;
4617
4721
  var CollapsibleTrigger = Collapsible.Trigger;
4618
4722
  var CollapsibleContent = Collapsible.Content;
4619
- var SurfaceContext = createContext(1);
4620
- function useSurface() {
4621
- return useContext(SurfaceContext);
4622
- }
4623
- function SurfaceProvider({ value, children }) {
4624
- return /* @__PURE__ */ jsx(SurfaceContext.Provider, { value: Math.max(1, Math.min(8, value)), children });
4625
- }
4626
4723
 
4627
4724
  // src/lib/surface-classes.ts
4628
4725
  var SURFACE_BG = {
@@ -7846,6 +7943,7 @@ function ColorInput2({
7846
7943
  disabled,
7847
7944
  presets
7848
7945
  }) {
7946
+ const shape3 = useShape();
7849
7947
  const [hex, setHex] = React16.useState(value);
7850
7948
  React16.useEffect(() => {
7851
7949
  setHex(value);
@@ -7858,8 +7956,9 @@ function ColorInput2({
7858
7956
  "div",
7859
7957
  {
7860
7958
  className: cn(
7861
- "inline-flex h-8 items-stretch gap-0 rounded-md border border-border bg-card overflow-hidden",
7862
- "shadow-natural focus-within:ring-2 focus-within:ring-brand-primary/20 focus-within:border-brand-primary",
7959
+ "inline-flex h-8 items-stretch gap-0 overflow-hidden border border-border bg-background",
7960
+ shape3.input,
7961
+ "focus-within:border-brand-primary focus-within:ring-2 focus-within:ring-brand-primary/20",
7863
7962
  motionClasses,
7864
7963
  disabled && "opacity-50 pointer-events-none",
7865
7964
  className
@@ -7918,6 +8017,7 @@ function Combobox({
7918
8017
  emptyText = "No results found.",
7919
8018
  className
7920
8019
  }) {
8020
+ const shape3 = useShape();
7921
8021
  const [open, setOpen] = React16.useState(false);
7922
8022
  const [query, setQuery] = React16.useState("");
7923
8023
  const [activeIndex, setActiveIndex] = React16.useState(-1);
@@ -7999,9 +8099,10 @@ function Combobox({
7999
8099
  "aria-activedescendant": open && activeIndex >= 0 ? `${listboxId}-option-${activeIndex}` : void 0,
8000
8100
  "aria-autocomplete": "list",
8001
8101
  className: cn(
8002
- "flex h-10 w-full rounded-lg border border-border bg-card pr-10 body text-foreground",
8102
+ "flex h-10 w-full border border-border bg-background pr-10 body text-foreground",
8103
+ shape3.input,
8003
8104
  "placeholder:text-muted-foreground",
8004
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30 focus-visible:border-border",
8105
+ "focus-visible:border-border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/30",
8005
8106
  "disabled:cursor-not-allowed disabled:opacity-50",
8006
8107
  selectedOption?.avatar && !open ? "pl-8" : selectedOption?.statusColor && !open ? "pl-7" : "pl-3"
8007
8108
  ),
@@ -8797,13 +8898,15 @@ var TableCaption = forwardRef(
8797
8898
  );
8798
8899
  TableCaption.displayName = "TableCaption";
8799
8900
  function Input({ className, type, ...props }) {
8901
+ const shape3 = useShape();
8800
8902
  return /* @__PURE__ */ jsx(
8801
8903
  "input",
8802
8904
  {
8803
8905
  type,
8804
8906
  "data-slot": "input",
8805
8907
  className: cn(
8806
- "flex h-10 w-full rounded-md px-3 py-1",
8908
+ "flex h-10 w-full px-3 py-1",
8909
+ shape3.input,
8807
8910
  "body text-foreground placeholder:text-muted-foreground",
8808
8911
  controlSurfaceClasses,
8809
8912
  motionClasses,
@@ -10514,6 +10617,7 @@ var InputGroup = forwardRef(
10514
10617
  }, ref) => {
10515
10618
  const itemsRef = useRef(/* @__PURE__ */ new Map());
10516
10619
  const [activeIndex, setActiveIndex] = useState(null);
10620
+ const shape3 = useShape();
10517
10621
  const registerItem = useCallback((index, element) => {
10518
10622
  if (element) {
10519
10623
  itemsRef.current.set(index, element);
@@ -10546,7 +10650,8 @@ var InputGroup = forwardRef(
10546
10650
  {
10547
10651
  ref,
10548
10652
  className: cn(
10549
- "relative flex items-center gap-2 rounded-[var(--radius-input)] border bg-background px-3 py-2 text-[13px] transition-colors",
10653
+ "relative flex items-center gap-2 border bg-background px-3 py-2 text-[13px] transition-colors",
10654
+ shape3.input,
10550
10655
  error ? "border-destructive/50" : "border-border",
10551
10656
  disabled && "opacity-50",
10552
10657
  pill && "rounded-full",
@@ -11333,6 +11438,7 @@ var InputNumber = React16.forwardRef(
11333
11438
  onKeyDown,
11334
11439
  ...rest
11335
11440
  }, ref) => {
11441
+ const shape3 = useShape();
11336
11442
  const formatValue = React16.useCallback(
11337
11443
  (next) => next === null ? mixedLabel : next.toFixed(precision),
11338
11444
  [mixedLabel, precision]
@@ -11342,13 +11448,16 @@ var InputNumber = React16.forwardRef(
11342
11448
  setText(formatValue(value));
11343
11449
  }, [formatValue, value]);
11344
11450
  const clamp = React16.useCallback((n) => Math.min(max, Math.max(min, n)), [min, max]);
11345
- const parseAndClamp = React16.useCallback((raw) => {
11346
- const n = parseFloat(raw);
11347
- if (Number.isFinite(n)) {
11348
- return clamp(n);
11349
- }
11350
- return null;
11351
- }, [clamp]);
11451
+ const parseAndClamp = React16.useCallback(
11452
+ (raw) => {
11453
+ const n = parseFloat(raw);
11454
+ if (Number.isFinite(n)) {
11455
+ return clamp(n);
11456
+ }
11457
+ return null;
11458
+ },
11459
+ [clamp]
11460
+ );
11352
11461
  const commit = (raw) => {
11353
11462
  const next = parseAndClamp(raw);
11354
11463
  if (next === null) {
@@ -11380,8 +11489,9 @@ var InputNumber = React16.forwardRef(
11380
11489
  "div",
11381
11490
  {
11382
11491
  className: cn(
11383
- "inline-flex h-8 items-stretch rounded-md border border-border bg-card overflow-hidden",
11384
- "focus-within:ring-2 focus-within:ring-brand-primary/20 focus-within:border-brand-primary",
11492
+ "inline-flex h-8 items-stretch overflow-hidden border border-border bg-background",
11493
+ shape3.input,
11494
+ "focus-within:border-brand-primary focus-within:ring-2 focus-within:ring-brand-primary/20",
11385
11495
  disabled && "opacity-50 pointer-events-none",
11386
11496
  className
11387
11497
  ),
@@ -12045,31 +12155,35 @@ function MobileDrawer({
12045
12155
  ] });
12046
12156
  }
12047
12157
  MobileDrawer.displayName = "MobileDrawer";
12048
- var NativeSelect = React16.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "relative", children: [
12049
- /* @__PURE__ */ jsx(
12050
- "select",
12051
- {
12052
- ref,
12053
- className: cn(
12054
- "peer h-10 w-full appearance-none rounded-lg border border-border bg-card pl-3 pr-8",
12055
- "body text-foreground",
12056
- "focus:outline-none focus:ring-2 focus:ring-ring/30 focus:border-border",
12057
- "disabled:cursor-not-allowed disabled:opacity-50",
12058
- "aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-destructive/20",
12059
- className
12060
- ),
12061
- ...props,
12062
- children
12063
- }
12064
- ),
12065
- /* @__PURE__ */ jsx(
12066
- ChevronDown,
12067
- {
12068
- size: 14,
12069
- className: "pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground peer-disabled:opacity-50"
12070
- }
12071
- )
12072
- ] }));
12158
+ var NativeSelect = React16.forwardRef(({ className, children, ...props }, ref) => {
12159
+ const shape3 = useShape();
12160
+ return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
12161
+ /* @__PURE__ */ jsx(
12162
+ "select",
12163
+ {
12164
+ ref,
12165
+ className: cn(
12166
+ "peer h-10 w-full appearance-none border border-border bg-background pl-3 pr-8",
12167
+ shape3.input,
12168
+ "body text-foreground",
12169
+ "focus:border-border focus:outline-none focus:ring-2 focus:ring-ring/30",
12170
+ "disabled:cursor-not-allowed disabled:opacity-50",
12171
+ "aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-destructive/20",
12172
+ className
12173
+ ),
12174
+ ...props,
12175
+ children
12176
+ }
12177
+ ),
12178
+ /* @__PURE__ */ jsx(
12179
+ ChevronDown,
12180
+ {
12181
+ size: 14,
12182
+ className: "pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground peer-disabled:opacity-50"
12183
+ }
12184
+ )
12185
+ ] });
12186
+ });
12073
12187
  NativeSelect.displayName = "NativeSelect";
12074
12188
  var NativeSelectOption = React16.forwardRef((props, ref) => /* @__PURE__ */ jsx("option", { ref, ...props }));
12075
12189
  NativeSelectOption.displayName = "NativeSelectOption";
@@ -14181,6 +14295,7 @@ function StatCard({
14181
14295
  label,
14182
14296
  title,
14183
14297
  value,
14298
+ variant = "default",
14184
14299
  trend,
14185
14300
  icon,
14186
14301
  children,
@@ -14201,11 +14316,12 @@ function StatCard({
14201
14316
  down: TrendingDown,
14202
14317
  neutral: Minus
14203
14318
  };
14319
+ const surfaceClass = variant === "responsive" ? "min-w-0 border-border bg-transparent p-4 sm:rounded-xl sm:border sm:bg-card sm:p-5 sm:shadow-natural" : "min-w-0 rounded-xl border border-border bg-card p-4 shadow-natural sm:p-5";
14204
14320
  return /* @__PURE__ */ jsxs(
14205
14321
  "div",
14206
14322
  {
14207
14323
  className: cn(
14208
- "min-w-0 rounded-xl border border-border bg-card p-4 shadow-natural sm:p-5",
14324
+ surfaceClass,
14209
14325
  containerClassName,
14210
14326
  className
14211
14327
  ),
@@ -15343,12 +15459,14 @@ var TabsSubtlePanel = forwardRef(
15343
15459
  );
15344
15460
  TabsSubtlePanel.displayName = "TabsSubtlePanel";
15345
15461
  function Textarea({ className, ...props }) {
15462
+ const shape3 = useShape();
15346
15463
  return /* @__PURE__ */ jsx(
15347
15464
  "textarea",
15348
15465
  {
15349
15466
  "data-slot": "textarea",
15350
15467
  className: cn(
15351
- "flex min-h-[80px] w-full rounded-md px-3 py-2",
15468
+ "flex min-h-[80px] w-full px-3 py-2",
15469
+ shape3.input,
15352
15470
  "body text-foreground placeholder:text-muted-foreground",
15353
15471
  "resize-none",
15354
15472
  controlSurfaceClasses,
@@ -15933,6 +16051,6 @@ function UsageBar({
15933
16051
  ] });
15934
16052
  }
15935
16053
 
15936
- export { Accordion, AccordionContent, AccordionGroup, AccordionItem, AccordionTrigger, AccountMenuContent, AccountMenuHeader, AccountMenuItem, AccountMenuSection, AccountMenuSeparator, ActionPanel, ActivityFeed, Alert, AlertDescription, AlertDialogRoot as AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AskUserQuestions, AspectRatioRoot as AspectRatio, Avatar, AvatarFallback, AvatarImage, AvatarStack, AvatarWithStatus, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupItem, CHART_COLORS, Calendar, Callout, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardHeading, CardMedia, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, ChatMessage, CheckboxRoot as Checkbox, CheckboxGroup, CheckboxItem, CollapsibleRoot as Collapsible, CollapsibleContent, CollapsibleTrigger, ColorInput2 as ColorInput, ColorPicker, ColorPickerPopover, ColorPickerPortalContainer, ColorSwatch, ColorTile, Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandPalette, CommandSeparator, CommandShortcut, ContextMenuRoot as ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataTable, DataTransferControls, DatePicker, DescriptionList, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DrawerRoot as Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, Dropdown, DropdownLabel, DropdownMenuRoot as DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DropdownSeparator, EmptyState, Field, FileDropzone, FileThumbnail, GridList, GridListAccentCard, GridListCard, HelpTooltip, HoverCardRoot as HoverCard, HoverCardContent, HoverCardTrigger, Input, InputCopy, InputField, InputGroup, InputMessage, InputNumber, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, Label, MediaAssetCard, MediaObject, MenuItem, MenubarRoot as Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MobileDrawer, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavItem, NavMenu, NavigationMenuRoot as NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Notification, PageHeading, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PopoverRoot as Popover, PopoverClose, PopoverContent, PopoverTrigger, ProgressRoot as Progress, PropertyRow, RadioCards, RadioGroup, RadioGroupItem, RadioItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RichTextEditor, SIDEBAR_COOKIE_MAX_AGE, SIDEBAR_COOKIE_NAME, SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON, SIDEBAR_WIDTH_MOBILE, ScrollAreaRoot as ScrollArea, SearchableTable, SectionHeading, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, SheetRoot as Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, SliderComfortable, SliderControl, Spinner, StackedList, StackedListItem, StatCard, StatCardGrid, StatCardSlot, StatusBadge, Steps, Switch, TabItem, TabPanel, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsSubtle, TabsSubtleItem, TabsSubtlePanel, TabsTrigger, Textarea, ThinkingIndicator, ThinkingStep, ThinkingStepDetails, ThinkingStepImage, ThinkingStepSource, ThinkingStepSources, ThinkingSteps, ThinkingStepsContent, ThinkingStepsHeader, TitledCard, Toaster, ToggleRoot as Toggle, ToggleGroupRoot as ToggleGroup, ToggleGroupItem, Tooltip3 as Tooltip, TooltipContent, TooltipPortalContainer, TooltipProvider, TooltipRoot, TooltipTrigger, UrlRedirectPrompt, UsageBar, badgeColors, badgeVariants, buildParsed, buttonVariants, cardVariants, cn, formatDate, formatFileSize, hasUrlHandleChanged, loadPdfjs, navigationMenuTriggerStyle, normalizeUrlHandle, parseColor, renderPdfFirstPage, spinnerVariants, statusBadgeVariantFor, statusLabel, toggleVariants, triggerVariants, urlResourcePath, useDropdown, useOptionalSidebar, useSidebar };
16054
+ export { Accordion, AccordionContent, AccordionGroup, AccordionItem, AccordionTrigger, AccountMenuContent, AccountMenuHeader, AccountMenuItem, AccountMenuSection, AccountMenuSeparator, ActionPanel, ActivityFeed, Alert, AlertDescription, AlertDialogRoot as AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AskUserQuestions, AspectRatioRoot as AspectRatio, Avatar, AvatarFallback, AvatarImage, AvatarStack, AvatarWithStatus, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupItem, CHART_COLORS, Calendar, Callout, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardHeading, CardMedia, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, ChatMessage, CheckboxRoot as Checkbox, CheckboxGroup, CheckboxItem, CollapsibleRoot as Collapsible, CollapsibleContent, CollapsibleTrigger, ColorInput2 as ColorInput, ColorPicker, ColorPickerPopover, ColorPickerPortalContainer, ColorSwatch, ColorTile, Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandPalette, CommandSeparator, CommandShortcut, ContextMenuRoot as ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataTable, DataTransferControls, DatePicker, DescriptionList, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DrawerRoot as Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, Dropdown, DropdownLabel, DropdownMenuRoot as DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DropdownSeparator, EmptyState, Field, FileDropzone, FileThumbnail, GridList, GridListAccentCard, GridListCard, HelpTooltip, HoverCardRoot as HoverCard, HoverCardContent, HoverCardTrigger, IconProvider, Input, InputCopy, InputField, InputGroup, InputMessage, InputNumber, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, Label, MediaAssetCard, MediaObject, MenuItem, MenubarRoot as Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MobileDrawer, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavItem, NavMenu, NavigationMenuRoot as NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Notification, PageHeading, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PopoverRoot as Popover, PopoverClose, PopoverContent, PopoverTrigger, ProgressRoot as Progress, PropertyRow, RadioCards, RadioGroup, RadioGroupItem, RadioItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RichTextEditor, SIDEBAR_COOKIE_MAX_AGE, SIDEBAR_COOKIE_NAME, SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON, SIDEBAR_WIDTH_MOBILE, ScrollAreaRoot as ScrollArea, SearchableTable, SectionHeading, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, ShapeProvider, SheetRoot as Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, SliderComfortable, SliderControl, Spinner, StackedList, StackedListItem, StatCard, StatCardGrid, StatCardSlot, StatusBadge, Steps, SurfaceProvider, Switch, TabItem, TabPanel, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsSubtle, TabsSubtleItem, TabsSubtlePanel, TabsTrigger, Textarea, ThinkingIndicator, ThinkingStep, ThinkingStepDetails, ThinkingStepImage, ThinkingStepSource, ThinkingStepSources, ThinkingSteps, ThinkingStepsContent, ThinkingStepsHeader, TitledCard, Toaster, ToggleRoot as Toggle, ToggleGroupRoot as ToggleGroup, ToggleGroupItem, Tooltip3 as Tooltip, TooltipContent, TooltipPortalContainer, TooltipProvider, TooltipRoot, TooltipTrigger, UrlRedirectPrompt, UsageBar, badgeColors, badgeVariants, buildParsed, buttonVariants, cardVariants, cn, formatDate, formatFileSize, hasUrlHandleChanged, iconLibraryLabels, iconLibraryOrder, loadPdfjs, navigationMenuTriggerStyle, normalizeUrlHandle, parseColor, renderPdfFirstPage, shapeMap, spinnerVariants, statusBadgeVariantFor, statusLabel, toggleVariants, triggerVariants, urlResourcePath, useDropdown, useIcon, useIconLibrary, useIcons, useOptionalSidebar, useShape, useShapeContext, useSidebar, useSurface };
15937
16055
  //# sourceMappingURL=index.js.map
15938
16056
  //# sourceMappingURL=index.js.map