@devalok/shilp-sutra 0.52.0 → 0.54.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.
Files changed (123) hide show
  1. package/AGENTS.md +7 -1
  2. package/BREAKING.json +29 -0
  3. package/MIGRATION.md +61 -0
  4. package/dist/_chunks/motion-provider.js +7 -6
  5. package/dist/_chunks/motion-provider.js.map +1 -1
  6. package/dist/_chunks/success.js +53 -53
  7. package/dist/ai/command-bar.js +158 -158
  8. package/dist/ai/command-bar.js.map +1 -1
  9. package/dist/ai/conversation.js +5 -5
  10. package/dist/composed/avatar-group.d.ts +11 -9
  11. package/dist/composed/avatar-group.d.ts.map +1 -1
  12. package/dist/composed/avatar-group.js +108 -140
  13. package/dist/composed/avatar-group.js.map +1 -1
  14. package/dist/composed/bulk-action-bar.d.ts +19 -11
  15. package/dist/composed/bulk-action-bar.d.ts.map +1 -1
  16. package/dist/composed/bulk-action-bar.js +81 -110
  17. package/dist/composed/bulk-action-bar.js.map +1 -1
  18. package/dist/composed/command-palette.js +17 -17
  19. package/dist/composed/command-palette.js.map +1 -1
  20. package/dist/composed/error-boundary.d.ts +15 -3
  21. package/dist/composed/error-boundary.d.ts.map +1 -1
  22. package/dist/composed/error-boundary.js +43 -26
  23. package/dist/composed/error-boundary.js.map +1 -1
  24. package/dist/composed/loading-skeleton.d.ts +2 -0
  25. package/dist/composed/loading-skeleton.d.ts.map +1 -1
  26. package/dist/composed/loading-skeleton.js +79 -56
  27. package/dist/composed/loading-skeleton.js.map +1 -1
  28. package/dist/composed/master-detail.d.ts +21 -8
  29. package/dist/composed/master-detail.d.ts.map +1 -1
  30. package/dist/composed/master-detail.js +91 -77
  31. package/dist/composed/master-detail.js.map +1 -1
  32. package/dist/composed/page-skeletons.d.ts +6 -0
  33. package/dist/composed/page-skeletons.d.ts.map +1 -1
  34. package/dist/composed/page-skeletons.js +93 -71
  35. package/dist/composed/page-skeletons.js.map +1 -1
  36. package/dist/composed/priority-indicator.d.ts +15 -6
  37. package/dist/composed/priority-indicator.d.ts.map +1 -1
  38. package/dist/composed/priority-indicator.js +37 -88
  39. package/dist/composed/priority-indicator.js.map +1 -1
  40. package/dist/composed/schedule-view.d.ts +17 -2
  41. package/dist/composed/schedule-view.d.ts.map +1 -1
  42. package/dist/composed/schedule-view.js +163 -64
  43. package/dist/composed/schedule-view.js.map +1 -1
  44. package/dist/motion/motion-provider.d.ts.map +1 -1
  45. package/dist/shell/bottom-navbar.d.ts +32 -6
  46. package/dist/shell/bottom-navbar.d.ts.map +1 -1
  47. package/dist/shell/bottom-navbar.js +156 -129
  48. package/dist/shell/bottom-navbar.js.map +1 -1
  49. package/dist/shell/index.d.ts +5 -3
  50. package/dist/shell/index.d.ts.map +1 -1
  51. package/dist/shell/index.js +2 -3
  52. package/dist/shell/notification-preferences.d.ts.map +1 -1
  53. package/dist/shell/notification-preferences.js +2 -0
  54. package/dist/shell/notification-preferences.js.map +1 -1
  55. package/dist/tokens/primitives.css +6 -2
  56. package/dist/tokens/utilities.css +6 -0
  57. package/dist/ui/autocomplete.d.ts +34 -32
  58. package/dist/ui/autocomplete.d.ts.map +1 -1
  59. package/dist/ui/autocomplete.js +115 -110
  60. package/dist/ui/autocomplete.js.map +1 -1
  61. package/dist/ui/combobox.d.ts +1 -1
  62. package/dist/ui/combobox.d.ts.map +1 -1
  63. package/dist/ui/combobox.js +133 -128
  64. package/dist/ui/combobox.js.map +1 -1
  65. package/dist/ui/file-upload.d.ts.map +1 -1
  66. package/dist/ui/file-upload.js +124 -138
  67. package/dist/ui/file-upload.js.map +1 -1
  68. package/dist/ui/form.d.ts +7 -0
  69. package/dist/ui/form.d.ts.map +1 -1
  70. package/dist/ui/form.js +4 -2
  71. package/dist/ui/form.js.map +1 -1
  72. package/dist/ui/icon-button.d.ts +2 -1
  73. package/dist/ui/icon-button.d.ts.map +1 -1
  74. package/dist/ui/icon-button.js +1 -1
  75. package/dist/ui/icon-button.js.map +1 -1
  76. package/dist/ui/index.js +30 -30
  77. package/dist/ui/label.d.ts.map +1 -1
  78. package/dist/ui/label.js +7 -6
  79. package/dist/ui/label.js.map +1 -1
  80. package/dist/ui/search-input.js +4 -4
  81. package/dist/ui/sidebar.js +7 -7
  82. package/dist/ui/spinner.d.ts.map +1 -1
  83. package/dist/ui/spinner.js +50 -44
  84. package/dist/ui/spinner.js.map +1 -1
  85. package/dist/ui/switch.d.ts.map +1 -1
  86. package/dist/ui/switch.js +24 -24
  87. package/dist/ui/switch.js.map +1 -1
  88. package/dist/ui/table.js +1 -1
  89. package/dist/ui/table.js.map +1 -1
  90. package/docs/components/composed/bulk-action-bar.md +9 -3
  91. package/docs/components/composed/error-boundary.md +18 -2
  92. package/docs/components/composed/master-detail.md +12 -2
  93. package/docs/components/composed/page-skeletons.md +2 -2
  94. package/docs/components/composed/priority-indicator.md +22 -11
  95. package/docs/components/composed/rich-chat-input.md +18 -6
  96. package/docs/components/composed/schedule-view.md +20 -5
  97. package/docs/components/composed/simple-tooltip.md +1 -1
  98. package/docs/components/shell/app-command-palette.md +2 -1
  99. package/docs/components/shell/bottom-navbar.md +28 -9
  100. package/docs/components/shell/command-registry.md +2 -2
  101. package/docs/components/shell/link-context.md +2 -2
  102. package/docs/components/shell/top-bar.md +1 -1
  103. package/docs/components/ui/autocomplete.md +26 -10
  104. package/docs/components/ui/search-input.md +2 -2
  105. package/docs/components/ui/slider.md +2 -2
  106. package/docs/components/ui/split-button.md +3 -3
  107. package/llms.txt +2 -2
  108. package/make-kit/Guidelines.md +1 -1
  109. package/make-kit/components/overview.md +2 -2
  110. package/make-kit/foundations/surfaces.md +1 -1
  111. package/mcp-manifest.json +581 -172
  112. package/package.json +1 -6
  113. package/skill/SKILL.md +1 -1
  114. package/skill/chat-skill/README.md +18 -0
  115. package/skill/chat-skill/SKILL.md +78 -0
  116. package/skill/chat-skill/chatgpt-instructions.md +26 -0
  117. package/skill/chat-skill/gemini-instructions.md +25 -0
  118. package/skill/references/components.md +2 -2
  119. package/dist/shell/sidebar.d.ts +0 -113
  120. package/dist/shell/sidebar.d.ts.map +0 -1
  121. package/dist/shell/sidebar.js +0 -293
  122. package/dist/shell/sidebar.js.map +0 -1
  123. package/docs/components/shell/sidebar.md +0 -103
package/dist/ui/index.js CHANGED
@@ -9,35 +9,35 @@ import { AlertDialog as d, AlertDialogAction as f, AlertDialogCancel as p, Alert
9
9
  import { Alert as S, alertVariants as C } from "./alert.js";
10
10
  import { AspectRatio as w } from "./aspect-ratio.js";
11
11
  import { FormField as T, FormHelperText as E, useFormField as D } from "./form.js";
12
- import { Autocomplete as O } from "./autocomplete.js";
13
- import { Dot as k, dotVariants as A } from "./dot.js";
14
- import { Skeleton as j, SkeletonAvatar as M, SkeletonButton as N, SkeletonChart as P, SkeletonGroup as F, SkeletonImage as I, SkeletonInput as L, SkeletonText as R, skeletonVariants as z } from "./skeleton.js";
15
- import { Avatar as B, AvatarFallback as V, AvatarImage as H, avatarVariants as U } from "./avatar.js";
16
- import { BadgeIndicator as W } from "./badge-indicator.js";
17
- import { BadgeCompound as G, BadgeGroup as K, badgeVariants as q } from "../_chunks/badge-group.js";
18
- import { Banner as J, bannerVariants as Y } from "./banner.js";
19
- import { Breadcrumb as X, BreadcrumbEllipsis as Z, BreadcrumbItem as re, BreadcrumbLink as ie, BreadcrumbList as ae, BreadcrumbPage as oe, BreadcrumbSeparator as se } from "./breadcrumb.js";
20
- import { ButtonGroup as ce, useButtonGroup as le } from "./button-group.js";
21
- import { Button as ue, buttonVariants as de } from "./button.js";
22
- import { Card as fe, CardAction as pe, CardBleed as me, CardContent as he, CardDescription as ge, CardFooter as _e, CardHeader as ve, CardSection as ye, CardTitle as be, cardVariants as xe } from "./card.js";
23
- import { Checkbox as Se } from "./checkbox.js";
24
- import { Code as Ce } from "./code.js";
25
- import { Collapsible as we, CollapsibleContent as Te, CollapsibleTrigger as Ee } from "./collapsible.js";
26
- import { Popover as De, PopoverAnchor as Oe, PopoverContent as ke, PopoverTrigger as Ae } from "../_chunks/popover.js";
27
- import { ColorInput as je } from "./color-input.js";
28
- import { ColorSwatch as Me } from "./color-swatch.js";
29
- import { Combobox as Ne, comboboxTriggerVariants as Pe } from "./combobox.js";
30
- import { Container as Fe } from "./container.js";
31
- import { ContextMenu as Ie, ContextMenuCheckboxItem as Le, ContextMenuContent as Re, ContextMenuGroup as ze, ContextMenuItem as Be, ContextMenuLabel as Ve, ContextMenuPortal as He, ContextMenuRadioGroup as Ue, ContextMenuRadioItem as We, ContextMenuSeparator as Ge, ContextMenuShortcut as Ke, ContextMenuSub as qe, ContextMenuSubContent as Je, ContextMenuSubTrigger as Ye, ContextMenuTrigger as Xe } from "./context-menu.js";
32
- import { Table as Ze, TableBody as Qe, TableCaption as $e, TableCell as et, TableFooter as tt, TableHead as nt, TableHeader as rt, TableRow as it, TableRowActions as at } from "./table.js";
33
- import { DropdownMenu as ot, DropdownMenuCheckboxItem as st, DropdownMenuContent as ct, DropdownMenuGroup as lt, DropdownMenuItem as ut, DropdownMenuLabel as dt, DropdownMenuPortal as ft, DropdownMenuRadioGroup as pt, DropdownMenuRadioItem as mt, DropdownMenuSeparator as ht, DropdownMenuShortcut as gt, DropdownMenuSub as _t, DropdownMenuSubContent as vt, DropdownMenuSubTrigger as yt, DropdownMenuTrigger as bt } from "./dropdown-menu.js";
34
- import { DevalokGrain as xt } from "./devalok-grain.js";
35
- import { Dialog as St, DialogClose as Ct, DialogContent as wt, DialogContentRaw as Tt, DialogDescription as Et, DialogFooter as Dt, DialogHeader as Ot, DialogOverlay as kt, DialogPortal as At, DialogTitle as jt, DialogTrigger as Mt } from "./dialog.js";
36
- import { FileUpload as Nt } from "./file-upload.js";
37
- import { HoverCard as Pt, HoverCardContent as Ft, HoverCardTrigger as It } from "./hover-card.js";
38
- import { IconButton as Lt } from "./icon-button.js";
39
- import { IconGroup as Rt } from "./icon-group.js";
40
- import { Input as zt, inputWrapperVariants as Bt } from "./input.js";
12
+ import { Input as O, inputWrapperVariants as k } from "./input.js";
13
+ import { Autocomplete as A } from "./autocomplete.js";
14
+ import { Dot as j, dotVariants as M } from "./dot.js";
15
+ import { Skeleton as N, SkeletonAvatar as P, SkeletonButton as F, SkeletonChart as I, SkeletonGroup as L, SkeletonImage as R, SkeletonInput as z, SkeletonText as B, skeletonVariants as V } from "./skeleton.js";
16
+ import { Avatar as H, AvatarFallback as U, AvatarImage as W, avatarVariants as G } from "./avatar.js";
17
+ import { BadgeIndicator as K } from "./badge-indicator.js";
18
+ import { BadgeCompound as q, BadgeGroup as J, badgeVariants as Y } from "../_chunks/badge-group.js";
19
+ import { Banner as X, bannerVariants as Z } from "./banner.js";
20
+ import { Breadcrumb as re, BreadcrumbEllipsis as ie, BreadcrumbItem as ae, BreadcrumbLink as oe, BreadcrumbList as se, BreadcrumbPage as ce, BreadcrumbSeparator as le } from "./breadcrumb.js";
21
+ import { ButtonGroup as ue, useButtonGroup as de } from "./button-group.js";
22
+ import { Button as fe, buttonVariants as pe } from "./button.js";
23
+ import { Card as me, CardAction as he, CardBleed as ge, CardContent as _e, CardDescription as ve, CardFooter as ye, CardHeader as be, CardSection as xe, CardTitle as Se, cardVariants as Ce } from "./card.js";
24
+ import { Checkbox as we } from "./checkbox.js";
25
+ import { Code as Te } from "./code.js";
26
+ import { Collapsible as Ee, CollapsibleContent as De, CollapsibleTrigger as Oe } from "./collapsible.js";
27
+ import { Popover as ke, PopoverAnchor as Ae, PopoverContent as je, PopoverTrigger as Me } from "../_chunks/popover.js";
28
+ import { ColorInput as Ne } from "./color-input.js";
29
+ import { ColorSwatch as Pe } from "./color-swatch.js";
30
+ import { Combobox as Fe, comboboxTriggerVariants as Ie } from "./combobox.js";
31
+ import { Container as Le } from "./container.js";
32
+ import { ContextMenu as Re, ContextMenuCheckboxItem as ze, ContextMenuContent as Be, ContextMenuGroup as Ve, ContextMenuItem as He, ContextMenuLabel as Ue, ContextMenuPortal as We, ContextMenuRadioGroup as Ge, ContextMenuRadioItem as Ke, ContextMenuSeparator as qe, ContextMenuShortcut as Je, ContextMenuSub as Ye, ContextMenuSubContent as Xe, ContextMenuSubTrigger as Ze, ContextMenuTrigger as Qe } from "./context-menu.js";
33
+ import { Table as $e, TableBody as et, TableCaption as tt, TableCell as nt, TableFooter as rt, TableHead as it, TableHeader as at, TableRow as ot, TableRowActions as st } from "./table.js";
34
+ import { DropdownMenu as ct, DropdownMenuCheckboxItem as lt, DropdownMenuContent as ut, DropdownMenuGroup as dt, DropdownMenuItem as ft, DropdownMenuLabel as pt, DropdownMenuPortal as mt, DropdownMenuRadioGroup as ht, DropdownMenuRadioItem as gt, DropdownMenuSeparator as _t, DropdownMenuShortcut as vt, DropdownMenuSub as yt, DropdownMenuSubContent as bt, DropdownMenuSubTrigger as xt, DropdownMenuTrigger as St } from "./dropdown-menu.js";
35
+ import { DevalokGrain as Ct } from "./devalok-grain.js";
36
+ import { Dialog as wt, DialogClose as Tt, DialogContent as Et, DialogContentRaw as Dt, DialogDescription as Ot, DialogFooter as kt, DialogHeader as At, DialogOverlay as jt, DialogPortal as Mt, DialogTitle as Nt, DialogTrigger as Pt } from "./dialog.js";
37
+ import { FileUpload as Ft } from "./file-upload.js";
38
+ import { HoverCard as It, HoverCardContent as Lt, HoverCardTrigger as Rt } from "./hover-card.js";
39
+ import { IconButton as zt } from "./icon-button.js";
40
+ import { IconGroup as Bt } from "./icon-group.js";
41
41
  import { Label as Vt } from "./label.js";
42
42
  import { Separator as Ht } from "./separator.js";
43
43
  import { SplitButton as Ut } from "./split-button.js";
@@ -90,4 +90,4 @@ function Oi() {
90
90
  //#region src/ui/index.ts
91
91
  Oi();
92
92
  //#endregion
93
- export { s as Accordion, c as AccordionContent, l as AccordionItem, u as AccordionTrigger, S as Alert, d as AlertDialog, f as AlertDialogAction, p as AlertDialogCancel, m as AlertDialogContent, h as AlertDialogDescription, g as AlertDialogFooter, _ as AlertDialogHeader, v as AlertDialogOverlay, y as AlertDialogPortal, b as AlertDialogTitle, x as AlertDialogTrigger, w as AspectRatio, O as Autocomplete, B as Avatar, V as AvatarFallback, H as AvatarImage, G as Badge, K as BadgeGroup, W as BadgeIndicator, J as Banner, X as Breadcrumb, Z as BreadcrumbEllipsis, re as BreadcrumbItem, ie as BreadcrumbLink, ae as BreadcrumbList, oe as BreadcrumbPage, se as BreadcrumbSeparator, ue as Button, ce as ButtonGroup, fe as Card, pe as CardAction, me as CardBleed, he as CardContent, ge as CardDescription, _e as CardFooter, ve as CardHeader, ye as CardSection, be as CardTitle, Se as Checkbox, Ce as Code, we as Collapsible, Te as CollapsibleContent, Ee as CollapsibleTrigger, je as ColorInput, Me as ColorSwatch, Ne as Combobox, Fe as Container, Ie as ContextMenu, Le as ContextMenuCheckboxItem, Re as ContextMenuContent, ze as ContextMenuGroup, Be as ContextMenuItem, Ve as ContextMenuLabel, He as ContextMenuPortal, Ue as ContextMenuRadioGroup, We as ContextMenuRadioItem, Ge as ContextMenuSeparator, Ke as ContextMenuShortcut, qe as ContextMenuSub, Je as ContextMenuSubContent, Ye as ContextMenuSubTrigger, Xe as ContextMenuTrigger, ui as DateSeparator, xt as DevalokGrain, St as Dialog, Ct as DialogClose, wt as DialogContent, Tt as DialogContentRaw, Et as DialogDescription, Dt as DialogFooter, Ot as DialogHeader, kt as DialogOverlay, At as DialogPortal, jt as DialogTitle, Mt as DialogTrigger, k as Dot, ot as DropdownMenu, st as DropdownMenuCheckboxItem, ct as DropdownMenuContent, lt as DropdownMenuGroup, ut as DropdownMenuItem, dt as DropdownMenuLabel, ft as DropdownMenuPortal, pt as DropdownMenuRadioGroup, mt as DropdownMenuRadioItem, ht as DropdownMenuSeparator, gt as DropdownMenuShortcut, _t as DropdownMenuSub, vt as DropdownMenuSubContent, yt as DropdownMenuSubTrigger, bt as DropdownMenuTrigger, Nt as FileUpload, T as FormField, E as FormHelperText, Pt as HoverCard, Ft as HoverCardContent, It as HoverCardTrigger, o as Icon, Lt as IconButton, ee as IconContext, Rt as IconGroup, te as IconProvider, zt as Input, Vt as Label, vi as Link, Jn as Menubar, Yn as MenubarCheckboxItem, Xn as MenubarContent, Zn as MenubarGroup, Qn as MenubarItem, $n as MenubarLabel, er as MenubarMenu, tr as MenubarPortal, nr as MenubarRadioGroup, rr as MenubarRadioItem, ir as MenubarSeparator, ar as MenubarShortcut, or as MenubarSub, sr as MenubarSubContent, cr as MenubarSubTrigger, lr as MenubarTrigger, di as Message, fi as MessageInput, pi as MessageList, Vn as MultiProgressRing, ur as NavigationMenu, dr as NavigationMenuContent, fr as NavigationMenuIndicator, pr as NavigationMenuItem, mr as NavigationMenuLink, hr as NavigationMenuList, gr as NavigationMenuTrigger, _r as NavigationMenuViewport, Gt as NumberInput, yi as OAuth, bi as OAuthButton, xi as OAuthConnectionRow, Si as OAuthDivider, Ci as OAuthGlyph, wi as OAuthGroup, vr as PaginationContent, yr as PaginationEllipsis, br as PaginationItem, xr as PaginationLink, Sr as PaginationNav, Cr as PaginationNext, wr as PaginationPrevious, Tr as PaginationRoot, De as Popover, Oe as PopoverAnchor, ke as PopoverContent, Ae as PopoverTrigger, Mn as Progress, Nn as ProgressIndicator, Pn as ProgressLabel, Hn as ProgressRing, Fn as ProgressRoot, In as ProgressSegment, Ln as ProgressTrack, Rn as ProgressValue, qt as RadioGroup, Jt as RadioGroupItem, Yt as SearchInput, li as SegmentedControl, Xt as Select, Zt as SelectContent, Qt as SelectGroup, $t as SelectItem, en as SelectLabel, tn as SelectScrollDownButton, nn as SelectScrollUpButton, rn as SelectSeparator, Q as SelectTrigger, an as SelectValue, Ht as Separator, Sn as Sheet, Cn as SheetClose, wn as SheetContent, Tn as SheetDescription, En as SheetFooter, Dn as SheetHeader, On as SheetOverlay, kn as SheetPortal, An as SheetTitle, jn as SheetTrigger, Dr as Sidebar, Or as SidebarContent, kr as SidebarFooter, Ar as SidebarGroup, jr as SidebarGroupAction, Mr as SidebarGroupContent, Nr as SidebarGroupLabel, Pr as SidebarHeader, Fr as SidebarInput, Ir as SidebarInset, Lr as SidebarMenu, Rr as SidebarMenuAction, zr as SidebarMenuBadge, Br as SidebarMenuButton, Vr as SidebarMenuItem, Hr as SidebarMenuSkeleton, Ur as SidebarMenuSub, Wr as SidebarMenuSubButton, Gr as SidebarMenuSubItem, Kr as SidebarProvider, qr as SidebarRail, Jr as SidebarSeparator, Yr as SidebarTrigger, j as Skeleton, M as SkeletonAvatar, N as SkeletonButton, P as SkeletonChart, F as SkeletonGroup, I as SkeletonImage, L as SkeletonInput, R as SkeletonText, sn as Slider, a as Spinner, Ut as SplitButton, ai as Stack, Wn as StatCard, Un as StatFlash, ti as Step, ni as Stepper, Gn as Surface, un as Switch, mi as SystemMessage, Ze as Table, Qe as TableBody, $e as TableCaption, et as TableCell, tt as TableFooter, nt as TableHead, rt as TableHeader, it as TableRow, at as TableRowActions, qn as TableRowLink, Zr as Tabs, Qr as TabsContent, $r as TabsList, ei as TabsTrigger, ri as Text, dn as Textarea, pn as Toggle, hn as ToggleGroup, gn as ToggleGroupItem, _n as Tooltip, vn as TooltipContent, yn as TooltipProvider, bn as TooltipTrigger, oi as TreeItem, si as TreeView, xn as TruncatedText, hi as TypingIndicator, gi as UnreadSeparator, Wt as VisuallyHidden, C as alertVariants, U as avatarVariants, q as badgeVariants, Y as bannerVariants, de as buttonVariants, xe as cardVariants, i as cn, Pe as comboboxTriggerVariants, A as dotVariants, Di as formatRelativeTime, Er as generatePagination, Ti as getOAuthLabel, Ei as getOAuthName, Bt as inputWrapperVariants, Kt as numberInputWrapperVariants, zn as progressIndicatorVariants, Bn as progressTrackVariants, on as selectTriggerVariants, z as skeletonVariants, cn as sliderThumbVariants, ln as sliderTrackVariants, e as springs, t as stagger, Kn as surfaceVariants, ii as textVariants, fn as textareaVariants, mn as toggleVariants, n as tweens, le as useButtonGroup, D as useFormField, ne as useIconContext, _i as useMessageContext, Xr as useSidebar, ci as useTree, r as withReducedMotion };
93
+ export { s as Accordion, c as AccordionContent, l as AccordionItem, u as AccordionTrigger, S as Alert, d as AlertDialog, f as AlertDialogAction, p as AlertDialogCancel, m as AlertDialogContent, h as AlertDialogDescription, g as AlertDialogFooter, _ as AlertDialogHeader, v as AlertDialogOverlay, y as AlertDialogPortal, b as AlertDialogTitle, x as AlertDialogTrigger, w as AspectRatio, A as Autocomplete, H as Avatar, U as AvatarFallback, W as AvatarImage, q as Badge, J as BadgeGroup, K as BadgeIndicator, X as Banner, re as Breadcrumb, ie as BreadcrumbEllipsis, ae as BreadcrumbItem, oe as BreadcrumbLink, se as BreadcrumbList, ce as BreadcrumbPage, le as BreadcrumbSeparator, fe as Button, ue as ButtonGroup, me as Card, he as CardAction, ge as CardBleed, _e as CardContent, ve as CardDescription, ye as CardFooter, be as CardHeader, xe as CardSection, Se as CardTitle, we as Checkbox, Te as Code, Ee as Collapsible, De as CollapsibleContent, Oe as CollapsibleTrigger, Ne as ColorInput, Pe as ColorSwatch, Fe as Combobox, Le as Container, Re as ContextMenu, ze as ContextMenuCheckboxItem, Be as ContextMenuContent, Ve as ContextMenuGroup, He as ContextMenuItem, Ue as ContextMenuLabel, We as ContextMenuPortal, Ge as ContextMenuRadioGroup, Ke as ContextMenuRadioItem, qe as ContextMenuSeparator, Je as ContextMenuShortcut, Ye as ContextMenuSub, Xe as ContextMenuSubContent, Ze as ContextMenuSubTrigger, Qe as ContextMenuTrigger, ui as DateSeparator, Ct as DevalokGrain, wt as Dialog, Tt as DialogClose, Et as DialogContent, Dt as DialogContentRaw, Ot as DialogDescription, kt as DialogFooter, At as DialogHeader, jt as DialogOverlay, Mt as DialogPortal, Nt as DialogTitle, Pt as DialogTrigger, j as Dot, ct as DropdownMenu, lt as DropdownMenuCheckboxItem, ut as DropdownMenuContent, dt as DropdownMenuGroup, ft as DropdownMenuItem, pt as DropdownMenuLabel, mt as DropdownMenuPortal, ht as DropdownMenuRadioGroup, gt as DropdownMenuRadioItem, _t as DropdownMenuSeparator, vt as DropdownMenuShortcut, yt as DropdownMenuSub, bt as DropdownMenuSubContent, xt as DropdownMenuSubTrigger, St as DropdownMenuTrigger, Ft as FileUpload, T as FormField, E as FormHelperText, It as HoverCard, Lt as HoverCardContent, Rt as HoverCardTrigger, o as Icon, zt as IconButton, ee as IconContext, Bt as IconGroup, te as IconProvider, O as Input, Vt as Label, vi as Link, Jn as Menubar, Yn as MenubarCheckboxItem, Xn as MenubarContent, Zn as MenubarGroup, Qn as MenubarItem, $n as MenubarLabel, er as MenubarMenu, tr as MenubarPortal, nr as MenubarRadioGroup, rr as MenubarRadioItem, ir as MenubarSeparator, ar as MenubarShortcut, or as MenubarSub, sr as MenubarSubContent, cr as MenubarSubTrigger, lr as MenubarTrigger, di as Message, fi as MessageInput, pi as MessageList, Vn as MultiProgressRing, ur as NavigationMenu, dr as NavigationMenuContent, fr as NavigationMenuIndicator, pr as NavigationMenuItem, mr as NavigationMenuLink, hr as NavigationMenuList, gr as NavigationMenuTrigger, _r as NavigationMenuViewport, Gt as NumberInput, yi as OAuth, bi as OAuthButton, xi as OAuthConnectionRow, Si as OAuthDivider, Ci as OAuthGlyph, wi as OAuthGroup, vr as PaginationContent, yr as PaginationEllipsis, br as PaginationItem, xr as PaginationLink, Sr as PaginationNav, Cr as PaginationNext, wr as PaginationPrevious, Tr as PaginationRoot, ke as Popover, Ae as PopoverAnchor, je as PopoverContent, Me as PopoverTrigger, Mn as Progress, Nn as ProgressIndicator, Pn as ProgressLabel, Hn as ProgressRing, Fn as ProgressRoot, In as ProgressSegment, Ln as ProgressTrack, Rn as ProgressValue, qt as RadioGroup, Jt as RadioGroupItem, Yt as SearchInput, li as SegmentedControl, Xt as Select, Zt as SelectContent, Qt as SelectGroup, $t as SelectItem, en as SelectLabel, tn as SelectScrollDownButton, nn as SelectScrollUpButton, rn as SelectSeparator, Q as SelectTrigger, an as SelectValue, Ht as Separator, Sn as Sheet, Cn as SheetClose, wn as SheetContent, Tn as SheetDescription, En as SheetFooter, Dn as SheetHeader, On as SheetOverlay, kn as SheetPortal, An as SheetTitle, jn as SheetTrigger, Dr as Sidebar, Or as SidebarContent, kr as SidebarFooter, Ar as SidebarGroup, jr as SidebarGroupAction, Mr as SidebarGroupContent, Nr as SidebarGroupLabel, Pr as SidebarHeader, Fr as SidebarInput, Ir as SidebarInset, Lr as SidebarMenu, Rr as SidebarMenuAction, zr as SidebarMenuBadge, Br as SidebarMenuButton, Vr as SidebarMenuItem, Hr as SidebarMenuSkeleton, Ur as SidebarMenuSub, Wr as SidebarMenuSubButton, Gr as SidebarMenuSubItem, Kr as SidebarProvider, qr as SidebarRail, Jr as SidebarSeparator, Yr as SidebarTrigger, N as Skeleton, P as SkeletonAvatar, F as SkeletonButton, I as SkeletonChart, L as SkeletonGroup, R as SkeletonImage, z as SkeletonInput, B as SkeletonText, sn as Slider, a as Spinner, Ut as SplitButton, ai as Stack, Wn as StatCard, Un as StatFlash, ti as Step, ni as Stepper, Gn as Surface, un as Switch, mi as SystemMessage, $e as Table, et as TableBody, tt as TableCaption, nt as TableCell, rt as TableFooter, it as TableHead, at as TableHeader, ot as TableRow, st as TableRowActions, qn as TableRowLink, Zr as Tabs, Qr as TabsContent, $r as TabsList, ei as TabsTrigger, ri as Text, dn as Textarea, pn as Toggle, hn as ToggleGroup, gn as ToggleGroupItem, _n as Tooltip, vn as TooltipContent, yn as TooltipProvider, bn as TooltipTrigger, oi as TreeItem, si as TreeView, xn as TruncatedText, hi as TypingIndicator, gi as UnreadSeparator, Wt as VisuallyHidden, C as alertVariants, G as avatarVariants, Y as badgeVariants, Z as bannerVariants, pe as buttonVariants, Ce as cardVariants, i as cn, Ie as comboboxTriggerVariants, M as dotVariants, Di as formatRelativeTime, Er as generatePagination, Ti as getOAuthLabel, Ei as getOAuthName, k as inputWrapperVariants, Kt as numberInputWrapperVariants, zn as progressIndicatorVariants, Bn as progressTrackVariants, on as selectTriggerVariants, V as skeletonVariants, cn as sliderThumbVariants, ln as sliderTrackVariants, e as springs, t as stagger, Kn as surfaceVariants, ii as textVariants, fn as textareaVariants, mn as toggleVariants, n as tweens, de as useButtonGroup, D as useFormField, ne as useIconContext, _i as useMessageContext, Xr as useSidebar, ci as useTree, r as withReducedMotion };
@@ -1 +1 @@
1
- {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../src/ui/label.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,QAAA,MAAM,KAAK,qFAwBT,CAAA;AAGF,OAAO,EAAE,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../src/ui/label.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,QAAA,MAAM,KAAK,qFA4BT,CAAA;AAGF,OAAO,EAAE,KAAK,EAAE,CAAA"}
package/dist/ui/label.js CHANGED
@@ -5,14 +5,15 @@ import { useFormField as n } from "./form.js";
5
5
  import * as r from "react";
6
6
  import { jsx as i, jsxs as a } from "react/jsx-runtime";
7
7
  //#region src/ui/label.tsx
8
- var o = r.forwardRef(({ className: r, required: o, children: s, htmlFor: c, ...l }, u) => {
9
- let d = n(), f = c ?? d.inputId, p = o ?? d.required;
8
+ var o = r.forwardRef(({ className: r, required: o, children: s, htmlFor: c, id: l, ...u }, d) => {
9
+ let f = n(), p = c ?? f.inputId, m = l ?? f.labelId, h = o ?? f.required;
10
10
  return /* @__PURE__ */ a(e, {
11
- ref: u,
12
- htmlFor: f,
11
+ ref: d,
12
+ id: m,
13
+ htmlFor: p,
13
14
  className: t("font-sans text-body-md font-medium text-surface-fg leading-none transition-opacity duration-fast-01 ease-productive-standard peer-disabled:opacity-action-disabled", r),
14
- ...l,
15
- children: [s, p && /* @__PURE__ */ i("span", {
15
+ ...u,
16
+ children: [s, h && /* @__PURE__ */ i("span", {
16
17
  className: "text-error-11 ml-ds-01",
17
18
  "aria-hidden": "true",
18
19
  children: "*"
@@ -1 +1 @@
1
- {"version":3,"file":"label.js","names":[],"sources":["../../src/ui/label.tsx"],"sourcesContent":["'use client'\n\nimport * as LabelPrimitive from '@primitives/react-label'\nimport * as React from 'react'\n\nimport { useFormField } from './form'\nimport { cn } from './lib/utils'\n\nexport interface LabelProps\n extends React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> {\n required?: boolean\n}\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n LabelProps\n>(({ className, required, children, htmlFor, ...props }, ref) => {\n const fieldCtx = useFormField()\n // Explicit htmlFor wins; otherwise fall back to FormField's inputId.\n const resolvedHtmlFor = htmlFor ?? fieldCtx.inputId\n const resolvedRequired = required ?? fieldCtx.required\n return (\n <LabelPrimitive.Root\n ref={ref}\n htmlFor={resolvedHtmlFor}\n className={cn(\n 'font-sans text-body-md font-medium text-surface-fg leading-none transition-opacity duration-fast-01 ease-productive-standard peer-disabled:opacity-action-disabled',\n className,\n )}\n {...props}\n >\n {children}\n {resolvedRequired && (\n <span className=\"text-error-11 ml-ds-01\" aria-hidden=\"true\">*</span>\n )}\n </LabelPrimitive.Root>\n )\n})\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n"],"mappings":";;;;;;;AAaA,IAAM,IAAQ,EAAM,YAGjB,EAAE,cAAW,aAAU,aAAU,YAAS,GAAG,KAAS,MAAQ;CAC/D,IAAM,IAAW,EAAa,GAExB,IAAkB,KAAW,EAAS,SACtC,IAAmB,KAAY,EAAS;CAC9C,OACE,kBAAC,GAAD;EACO;EACL,SAAS;EACT,WAAW,EACT,sKACA,CACF;EACA,GAAI;YAPN,CASG,GACA,KACC,kBAAC,QAAD;GAAM,WAAU;GAAyB,eAAY;aAAO;EAAO,CAAA,CAElD;;AAEzB,CAAC;AACD,EAAM,cAAA,EAAkC"}
1
+ {"version":3,"file":"label.js","names":[],"sources":["../../src/ui/label.tsx"],"sourcesContent":["'use client'\n\nimport * as LabelPrimitive from '@primitives/react-label'\nimport * as React from 'react'\n\nimport { useFormField } from './form'\nimport { cn } from './lib/utils'\n\nexport interface LabelProps\n extends React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> {\n required?: boolean\n}\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n LabelProps\n>(({ className, required, children, htmlFor, id, ...props }, ref) => {\n const fieldCtx = useFormField()\n // Explicit htmlFor wins; otherwise fall back to FormField's inputId.\n const resolvedHtmlFor = htmlFor ?? fieldCtx.inputId\n // Adopt the field's labelId so non-labellable controls (Combobox div) can point\n // aria-labelledby at this label. Explicit id wins.\n const resolvedId = id ?? fieldCtx.labelId\n const resolvedRequired = required ?? fieldCtx.required\n return (\n <LabelPrimitive.Root\n ref={ref}\n id={resolvedId}\n htmlFor={resolvedHtmlFor}\n className={cn(\n 'font-sans text-body-md font-medium text-surface-fg leading-none transition-opacity duration-fast-01 ease-productive-standard peer-disabled:opacity-action-disabled',\n className,\n )}\n {...props}\n >\n {children}\n {resolvedRequired && (\n <span className=\"text-error-11 ml-ds-01\" aria-hidden=\"true\">*</span>\n )}\n </LabelPrimitive.Root>\n )\n})\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n"],"mappings":";;;;;;;AAaA,IAAM,IAAQ,EAAM,YAGjB,EAAE,cAAW,aAAU,aAAU,YAAS,OAAI,GAAG,KAAS,MAAQ;CACnE,IAAM,IAAW,EAAa,GAExB,IAAkB,KAAW,EAAS,SAGtC,IAAa,KAAM,EAAS,SAC5B,IAAmB,KAAY,EAAS;CAC9C,OACE,kBAAC,GAAD;EACO;EACL,IAAI;EACJ,SAAS;EACT,WAAW,EACT,sKACA,CACF;EACA,GAAI;YARN,CAUG,GACA,KACC,kBAAC,QAAD;GAAM,WAAU;GAAyB,eAAY;aAAO;EAAO,CAAA,CAElD;;AAEzB,CAAC;AACD,EAAM,cAAA,EAAkC"}
@@ -2,8 +2,8 @@
2
2
  import { springs as e } from "./lib/motion.js";
3
3
  import { Spinner as t } from "./spinner.js";
4
4
  import { Icon as n } from "./icon.js";
5
- import { Button as r } from "./button.js";
6
- import { Input as i } from "./input.js";
5
+ import { Input as r } from "./input.js";
6
+ import { Button as i } from "./button.js";
7
7
  import * as a from "react";
8
8
  import { jsx as o } from "react/jsx-runtime";
9
9
  import { IconSearch as s, IconX as c } from "@tabler/icons-react";
@@ -25,7 +25,7 @@ var d = a.forwardRef(({ className: a, value: d, onClear: f, loading: p, size: m
25
25
  scale: .8
26
26
  },
27
27
  transition: e.snappy,
28
- children: /* @__PURE__ */ o(r, {
28
+ children: /* @__PURE__ */ o(i, {
29
29
  type: "button",
30
30
  variant: "ghost",
31
31
  size: "icon-xs",
@@ -35,7 +35,7 @@ var d = a.forwardRef(({ className: a, value: d, onClear: f, loading: p, size: m
35
35
  children: /* @__PURE__ */ o(n, { icon: c })
36
36
  })
37
37
  }) });
38
- return /* @__PURE__ */ o(i, {
38
+ return /* @__PURE__ */ o(r, {
39
39
  ref: _,
40
40
  size: m,
41
41
  startSection: /* @__PURE__ */ o(n, { icon: s }),
@@ -5,9 +5,9 @@ import { cva as n } from "../_chunks/vendor-utils.js";
5
5
  import { cn as r } from "./lib/utils.js";
6
6
  import { Icon as i } from "./icon.js";
7
7
  import { useIsMobile as a } from "../hooks/use-mobile.js";
8
- import { Skeleton as o } from "./skeleton.js";
9
- import { Button as s } from "./button.js";
10
- import { Input as c } from "./input.js";
8
+ import { Input as o } from "./input.js";
9
+ import { Skeleton as s } from "./skeleton.js";
10
+ import { Button as c } from "./button.js";
11
11
  import { Separator as l } from "./separator.js";
12
12
  import { Tooltip as u, TooltipContent as d, TooltipProvider as f, TooltipTrigger as p } from "./tooltip.js";
13
13
  import { Sheet as m, SheetContent as h } from "./sheet.js";
@@ -139,7 +139,7 @@ var M = _(({ side: e = "left", variant: t = "sidebar", collapsible: n = "offcanv
139
139
  M.displayName = "Sidebar";
140
140
  var N = _(({ className: e, onClick: t, ...n }, a) => {
141
141
  let { toggleSidebar: o } = A();
142
- return /* @__PURE__ */ E(s, {
142
+ return /* @__PURE__ */ E(c, {
143
143
  ref: a,
144
144
  "data-sidebar": "trigger",
145
145
  variant: "ghost",
@@ -179,7 +179,7 @@ var F = _(({ className: e, ...t }, n) => /* @__PURE__ */ T("main", {
179
179
  ...t
180
180
  }));
181
181
  F.displayName = "SidebarInset";
182
- var I = _(({ className: e, wrapperClassName: t, ...n }, i) => /* @__PURE__ */ T(c, {
182
+ var I = _(({ className: e, wrapperClassName: t, ...n }, i) => /* @__PURE__ */ T(o, {
183
183
  ref: i,
184
184
  "data-sidebar": "input",
185
185
  size: "sm",
@@ -326,10 +326,10 @@ var X = _(({ className: e, showIcon: t = !1, ...n }, i) => {
326
326
  "data-sidebar": "menu-skeleton",
327
327
  className: r("flex h-ds-sm items-center gap-ds-03 rounded-control px-ds-03", e),
328
328
  ...n,
329
- children: [t && /* @__PURE__ */ T(o, {
329
+ children: [t && /* @__PURE__ */ T(s, {
330
330
  className: "h-ico-sm w-ico-sm rounded-control",
331
331
  "data-sidebar": "menu-skeleton-icon"
332
- }), /* @__PURE__ */ T(o, {
332
+ }), /* @__PURE__ */ T(s, {
333
333
  className: "h-4 max-w-(--skeleton-width) flex-1",
334
334
  "data-sidebar": "menu-skeleton-text",
335
335
  style: { "--skeleton-width": a }
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/ui/spinner.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAgB9B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,yCAAyC;IACzC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAA;IACxC,iEAAiE;IACjE,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC3B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAyBD,QAAA,MAAM,OAAO,sFAqOZ,CAAA;AAGD,OAAO,EAAE,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/ui/spinner.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAgB9B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,yCAAyC;IACzC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAA;IACxC,iEAAiE;IACjE,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC3B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAyBD,QAAA,MAAM,OAAO,sFA+OZ,CAAA;AAGD,OAAO,EAAE,OAAO,EAAE,CAAA"}
@@ -26,15 +26,21 @@ var s = {
26
26
  error: "var(--color-error-9)"
27
27
  }, m = "M7 12.5l3 3 7-7", h = "M8 8l8 8M16 8l-8 8", g = "M5 12.5l4 4 10-10", _ = "M6 6l12 12M18 6l-12 12", v = t.forwardRef(({ size: v = "md", state: y = "spinning", variant: b = "filled", delay: x = 0, onComplete: S, className: C }, w) => {
28
28
  let T = o(), [E, D] = t.useState(x === 0);
29
- if (t.useEffect(() => {
29
+ t.useEffect(() => {
30
30
  if (x <= 0) {
31
31
  D(!0);
32
32
  return;
33
33
  }
34
34
  let e = setTimeout(() => D(!0), x);
35
35
  return () => clearTimeout(e);
36
- }, [x]), !E) return null;
37
- let O = c[v], k = l[v], A = y === "spinning", j = y === "success" || y === "error", M = b === "filled", N = b === "bare" && y === "spinning" ? "currentColor" : p[y], P = M ? "white" : "currentColor", F = M ? m : g, I = M ? h : _, L = .4, R = M ? .5 : .35, z = .35;
36
+ }, [x]);
37
+ let O = t.useRef(S);
38
+ if (t.useEffect(() => {
39
+ O.current = S;
40
+ }), t.useEffect(() => {
41
+ T && (y === "success" || y === "error") && O.current?.();
42
+ }, [T, y]), !E) return null;
43
+ let k = c[v], A = l[v], j = y === "spinning", M = y === "success" || y === "error", N = b === "filled", P = b === "bare" && y === "spinning" ? "currentColor" : p[y], F = N ? "white" : "currentColor", I = N ? m : g, L = N ? h : _, R = .4, z = N ? .5 : .35, B = .35;
38
44
  return /* @__PURE__ */ r("span", {
39
45
  ref: w,
40
46
  role: "status",
@@ -45,50 +51,50 @@ var s = {
45
51
  fill: "none",
46
52
  xmlns: "http://www.w3.org/2000/svg",
47
53
  children: [
48
- T ? !(j && !M) && /* @__PURE__ */ n("circle", {
54
+ T ? !(M && !N) && /* @__PURE__ */ n("circle", {
49
55
  cx: "12",
50
56
  cy: "12",
51
57
  r: u,
52
58
  stroke: "var(--color-surface-border)",
53
- strokeWidth: O,
59
+ strokeWidth: k,
54
60
  fill: "none"
55
61
  }) : /* @__PURE__ */ n(a.circle, {
56
62
  cx: "12",
57
63
  cy: "12",
58
64
  r: u,
59
65
  stroke: "var(--color-surface-border)",
60
- strokeWidth: O,
66
+ strokeWidth: k,
61
67
  fill: "none",
62
- animate: { opacity: j && !M ? 0 : 1 },
68
+ animate: { opacity: M && !N ? 0 : 1 },
63
69
  transition: {
64
70
  duration: .2,
65
- delay: j && !M ? L : 0
71
+ delay: M && !N ? R : 0
66
72
  }
67
73
  }),
68
74
  T ? /* @__PURE__ */ n("circle", {
69
75
  cx: "12",
70
76
  cy: "12",
71
77
  r: u,
72
- stroke: N,
73
- strokeWidth: O,
78
+ stroke: P,
79
+ strokeWidth: k,
74
80
  fill: "none",
75
81
  strokeLinecap: "round",
76
- strokeDasharray: A ? `${d * .75} ${d * .25}` : `${d} 0`,
82
+ strokeDasharray: j ? `${d * .75} ${d * .25}` : `${d} 0`,
77
83
  style: {
78
84
  transformOrigin: "center",
79
- transform: A ? "rotate(-90deg)" : void 0,
80
- opacity: j && !M ? 0 : 1
85
+ transform: j ? "rotate(-90deg)" : void 0,
86
+ opacity: M && !N ? 0 : 1
81
87
  }
82
88
  }) : /* @__PURE__ */ n(a.circle, {
83
89
  cx: "12",
84
90
  cy: "12",
85
91
  r: u,
86
- stroke: N,
87
- strokeWidth: O,
92
+ stroke: P,
93
+ strokeWidth: k,
88
94
  fill: "none",
89
95
  strokeLinecap: "round",
90
96
  style: { transformOrigin: "center" },
91
- animate: A ? {
97
+ animate: j ? {
92
98
  rotate: [0, 360],
93
99
  strokeDasharray: [
94
100
  `${d * .1} ${d * .9}`,
@@ -98,9 +104,9 @@ var s = {
98
104
  } : {
99
105
  rotate: 0,
100
106
  strokeDasharray: `${d} 0`,
101
- ...!M && { opacity: 0 }
107
+ ...!N && { opacity: 0 }
102
108
  },
103
- transition: A ? {
109
+ transition: j ? {
104
110
  rotate: {
105
111
  duration: 1,
106
112
  repeat: Infinity,
@@ -117,26 +123,26 @@ var s = {
117
123
  ease: "easeOut"
118
124
  },
119
125
  strokeDasharray: {
120
- duration: L,
126
+ duration: R,
121
127
  ease: "easeInOut"
122
128
  },
123
- ...!M && { opacity: {
129
+ ...!N && { opacity: {
124
130
  duration: .2,
125
- delay: L
131
+ delay: R
126
132
  } }
127
133
  }
128
134
  }),
129
- /* @__PURE__ */ n(i, { children: j && M && (T ? /* @__PURE__ */ n("circle", {
135
+ /* @__PURE__ */ n(i, { children: M && N && (T ? /* @__PURE__ */ n("circle", {
130
136
  cx: "12",
131
137
  cy: "12",
132
- r: u + O / 2,
133
- fill: N,
138
+ r: u + k / 2,
139
+ fill: P,
134
140
  stroke: "none"
135
141
  }, "fill-static") : /* @__PURE__ */ n(a.circle, {
136
142
  cx: "12",
137
143
  cy: "12",
138
- r: u + O / 2,
139
- fill: N,
144
+ r: u + k / 2,
145
+ fill: P,
140
146
  stroke: "none",
141
147
  initial: { opacity: 0 },
142
148
  animate: { opacity: 1 },
@@ -148,16 +154,16 @@ var s = {
148
154
  style: { transformOrigin: "center" }
149
155
  }, "fill")) }),
150
156
  /* @__PURE__ */ n(i, { children: y === "success" && (T ? /* @__PURE__ */ n("path", {
151
- d: F,
152
- stroke: P,
153
- strokeWidth: k,
157
+ d: I,
158
+ stroke: F,
159
+ strokeWidth: A,
154
160
  strokeLinecap: "round",
155
161
  strokeLinejoin: "round",
156
162
  fill: "none"
157
163
  }, "check-static") : /* @__PURE__ */ n(a.path, {
158
- d: F,
159
- stroke: P,
160
- strokeWidth: k,
164
+ d: I,
165
+ stroke: F,
166
+ strokeWidth: A,
161
167
  strokeLinecap: "round",
162
168
  strokeLinejoin: "round",
163
169
  fill: "none",
@@ -171,27 +177,27 @@ var s = {
171
177
  },
172
178
  transition: {
173
179
  pathLength: {
174
- duration: z,
180
+ duration: B,
175
181
  ease: "easeOut",
176
- delay: R
182
+ delay: z
177
183
  },
178
184
  opacity: {
179
185
  duration: .1,
180
- delay: R
186
+ delay: z
181
187
  }
182
188
  },
183
189
  onAnimationComplete: () => S?.()
184
190
  }, "check")) }),
185
191
  /* @__PURE__ */ n(i, { children: y === "error" && (T ? /* @__PURE__ */ n("path", {
186
- d: I,
187
- stroke: P,
188
- strokeWidth: k,
192
+ d: L,
193
+ stroke: F,
194
+ strokeWidth: A,
189
195
  strokeLinecap: "round",
190
196
  fill: "none"
191
197
  }, "x-static") : /* @__PURE__ */ n(a.path, {
192
- d: I,
193
- stroke: P,
194
- strokeWidth: k,
198
+ d: L,
199
+ stroke: F,
200
+ strokeWidth: A,
195
201
  strokeLinecap: "round",
196
202
  fill: "none",
197
203
  initial: {
@@ -204,13 +210,13 @@ var s = {
204
210
  },
205
211
  transition: {
206
212
  pathLength: {
207
- duration: z,
213
+ duration: B,
208
214
  ease: "easeOut",
209
- delay: R
215
+ delay: z
210
216
  },
211
217
  opacity: {
212
218
  duration: .1,
213
- delay: R
219
+ delay: z
214
220
  }
215
221
  },
216
222
  onAnimationComplete: () => S?.()
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.js","names":[],"sources":["../../src/ui/spinner.tsx"],"sourcesContent":["'use client'\n\nimport {\n AnimatePresence,\n motion,\n useReducedMotion,\n} from 'framer-motion'\nimport * as React from 'react'\n\nimport { cn } from './lib/utils'\n\nconst sizeClasses = {\n sm: 'h-ico-sm w-ico-sm',\n md: 'h-ico-md w-ico-md',\n lg: 'h-ico-lg w-ico-lg',\n} as const\n\n/** Arc stroke width per size */\nconst arcStrokeWidths = { sm: 3, md: 3, lg: 4 } as const\n\n/** Thinner icon stroke for checkmark / X — feels lighter and more refined */\nconst iconStrokeWidths = { sm: 1.8, md: 2, lg: 2.5 } as const\n\n/**\n * Props for Spinner — an animated arc spinner with optional success (checkmark) and error (X)\n * state transitions, powered by Framer Motion.\n *\n * **Sizes:** `sm` (16px) | `md` (20px, default) | `lg` (24px)\n *\n * **States:**\n * - `spinning` (default): Rotating arc with Material Design-style pulse\n * - `success`: Arc completes to filled green circle, white checkmark draws in\n * - `error`: Arc completes to filled red circle, white X draws in\n *\n * **Variants:**\n * - `filled` (default): Semantic colored fill + white icon — for standalone contexts\n * - `bare`: No fill, icon uses `currentColor` — for embedding in buttons, toolbars, etc.\n *\n * **Accessibility:** `role=\"status\"` with sr-only text that updates per state.\n * Respects `prefers-reduced-motion` — shows static icons with opacity crossfades.\n *\n * @example\n * <Spinner /> // basic arc spinner\n * <Spinner size=\"sm\" /> // small\n * <Spinner state=\"success\" /> // filled green circle + white check\n * <Spinner state=\"success\" variant=\"bare\" /> // just the check, currentColor\n * <Spinner state=\"error\" /> // filled red circle + white X\n * <Spinner delay={150} /> // no render until 150ms\n * <Spinner state=\"success\" onComplete={handleDone} /> // callback after animation\n */\nexport interface SpinnerProps {\n /** sm | md | lg — maps to icon size tokens. Default: 'md' */\n size?: 'sm' | 'md' | 'lg'\n /** Current state. Default: 'spinning' */\n state?: 'spinning' | 'success' | 'error'\n /** Visual variant for success/error states. Default: 'filled' */\n variant?: 'filled' | 'bare'\n /** Delay in ms before showing (avoids flicker). Default: 0 */\n delay?: number\n /** Fires when success/error transition animation completes */\n onComplete?: () => void\n className?: string\n}\n\nconst RADIUS = 10\nconst CIRCUMFERENCE = 2 * Math.PI * RADIUS\n\nconst srText: Record<string, string> = {\n spinning: 'Loading...',\n success: 'Complete',\n error: 'Error',\n}\n\nconst stateColors: Record<string, string> = {\n spinning: 'var(--color-accent-9)',\n success: 'var(--color-success-9)',\n error: 'var(--color-error-9)',\n}\n\n// Filled variant — icons fit inside the filled circle\nconst CHECKMARK_D = 'M7 12.5l3 3 7-7'\nconst X_MARK_D = 'M8 8l8 8M16 8l-8 8'\n\n// Bare variant — larger icons since there's no circle constraining them\nconst CHECKMARK_BARE_D = 'M5 12.5l4 4 10-10'\nconst X_MARK_BARE_D = 'M6 6l12 12M18 6l-12 12'\n\nconst Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ size = 'md', state = 'spinning', variant = 'filled', delay = 0, onComplete, className }, ref) => {\n const prefersReduced = useReducedMotion()\n const [visible, setVisible] = React.useState(delay === 0)\n\n React.useEffect(() => {\n if (delay <= 0) {\n setVisible(true)\n return\n }\n const timer = setTimeout(() => setVisible(true), delay)\n return () => clearTimeout(timer)\n }, [delay])\n\n if (!visible) return null\n\n const arcSw = arcStrokeWidths[size]\n const iconSw = iconStrokeWidths[size]\n const isSpinning = state === 'spinning'\n const isFinal = state === 'success' || state === 'error'\n const isFilled = variant === 'filled'\n const color = variant === 'bare' && state === 'spinning' ? 'currentColor' : stateColors[state]\n\n // Icon stroke: white on filled backgrounds, currentColor on bare\n const iconColor = isFilled ? 'white' : 'currentColor'\n const checkPath = isFilled ? CHECKMARK_D : CHECKMARK_BARE_D\n const xPath = isFilled ? X_MARK_D : X_MARK_BARE_D\n\n // ── Sequence timing (seconds) ──────────────────────────────────\n // Filled: arc completes → fill fades in → white icon draws\n // Bare: arc completes + fades out → currentColor icon draws\n const ARC_COMPLETE = 0.4\n const FILL_DELAY = 0.3\n const FILL_DURATION = 0.25\n const ICON_DELAY = isFilled ? 0.5 : 0.35\n const ICON_DURATION = 0.35\n\n return (\n <span ref={ref} role=\"status\" className={cn('inline-flex', className)}>\n <svg\n className={sizeClasses[size]}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {/* Background track circle — hidden in bare final state */}\n {prefersReduced ? (\n !(isFinal && !isFilled) && (\n <circle\n cx=\"12\"\n cy=\"12\"\n r={RADIUS}\n stroke=\"var(--color-surface-border)\"\n strokeWidth={arcSw}\n fill=\"none\"\n />\n )\n ) : (\n <motion.circle\n cx=\"12\"\n cy=\"12\"\n r={RADIUS}\n stroke=\"var(--color-surface-border)\"\n strokeWidth={arcSw}\n fill=\"none\"\n animate={{ opacity: isFinal && !isFilled ? 0 : 1 }}\n transition={{ duration: 0.2, delay: isFinal && !isFilled ? ARC_COMPLETE : 0 }}\n />\n )}\n\n {/* Animated arc — spins when loading, completes to full circle on state change */}\n {prefersReduced ? (\n <circle\n cx=\"12\"\n cy=\"12\"\n r={RADIUS}\n stroke={color}\n strokeWidth={arcSw}\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeDasharray={\n isSpinning\n ? `${CIRCUMFERENCE * 0.75} ${CIRCUMFERENCE * 0.25}`\n : `${CIRCUMFERENCE} 0`\n }\n style={{\n transformOrigin: 'center',\n transform: isSpinning ? 'rotate(-90deg)' : undefined,\n opacity: isFinal && !isFilled ? 0 : 1,\n }}\n />\n ) : (\n <motion.circle\n cx=\"12\"\n cy=\"12\"\n r={RADIUS}\n stroke={color}\n strokeWidth={arcSw}\n fill=\"none\"\n strokeLinecap=\"round\"\n style={{ transformOrigin: 'center' }}\n animate={\n isSpinning\n ? {\n rotate: [0, 360],\n strokeDasharray: [\n `${CIRCUMFERENCE * 0.1} ${CIRCUMFERENCE * 0.9}`,\n `${CIRCUMFERENCE * 0.75} ${CIRCUMFERENCE * 0.25}`,\n `${CIRCUMFERENCE * 0.1} ${CIRCUMFERENCE * 0.9}`,\n ],\n }\n : {\n rotate: 0,\n strokeDasharray: `${CIRCUMFERENCE} 0`,\n // In bare mode, fade out the arc after it completes\n ...(!isFilled && { opacity: 0 }),\n }\n }\n transition={\n isSpinning\n ? {\n rotate: { duration: 1, repeat: Infinity, ease: 'linear' },\n strokeDasharray: { duration: 1.5, repeat: Infinity, ease: 'easeInOut' },\n }\n : {\n rotate: { duration: 0.3, ease: 'easeOut' },\n strokeDasharray: { duration: ARC_COMPLETE, ease: 'easeInOut' },\n ...(!isFilled && { opacity: { duration: 0.2, delay: ARC_COMPLETE } }),\n }\n }\n />\n )}\n\n {/* Filled circle — fades in after arc completes, covers track (filled variant only) */}\n <AnimatePresence>\n {isFinal && isFilled &&\n (prefersReduced ? (\n <circle\n key=\"fill-static\"\n cx=\"12\"\n cy=\"12\"\n r={RADIUS + arcSw / 2}\n fill={color}\n stroke=\"none\"\n />\n ) : (\n <motion.circle\n key=\"fill\"\n cx=\"12\"\n cy=\"12\"\n r={RADIUS + arcSw / 2}\n fill={color}\n stroke=\"none\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: FILL_DURATION, delay: FILL_DELAY, ease: 'easeOut' }}\n style={{ transformOrigin: 'center' }}\n />\n ))}\n </AnimatePresence>\n\n {/* Checkmark — white on filled, currentColor on bare */}\n <AnimatePresence>\n {state === 'success' &&\n (prefersReduced ? (\n <path\n key=\"check-static\"\n d={checkPath}\n stroke={iconColor}\n strokeWidth={iconSw}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n ) : (\n <motion.path\n key=\"check\"\n d={checkPath}\n stroke={iconColor}\n strokeWidth={iconSw}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n initial={{ pathLength: 0, opacity: 0 }}\n animate={{ pathLength: 1, opacity: 1 }}\n transition={{\n pathLength: { duration: ICON_DURATION, ease: 'easeOut', delay: ICON_DELAY },\n opacity: { duration: 0.1, delay: ICON_DELAY },\n }}\n onAnimationComplete={() => onComplete?.()}\n />\n ))}\n </AnimatePresence>\n\n {/* X mark — white on filled, currentColor on bare */}\n <AnimatePresence>\n {state === 'error' &&\n (prefersReduced ? (\n <path\n key=\"x-static\"\n d={xPath}\n stroke={iconColor}\n strokeWidth={iconSw}\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n ) : (\n <motion.path\n key=\"x\"\n d={xPath}\n stroke={iconColor}\n strokeWidth={iconSw}\n strokeLinecap=\"round\"\n fill=\"none\"\n initial={{ pathLength: 0, opacity: 0 }}\n animate={{ pathLength: 1, opacity: 1 }}\n transition={{\n pathLength: { duration: ICON_DURATION, ease: 'easeOut', delay: ICON_DELAY },\n opacity: { duration: 0.1, delay: ICON_DELAY },\n }}\n onAnimationComplete={() => onComplete?.()}\n />\n ))}\n </AnimatePresence>\n </svg>\n <span className=\"sr-only\">{srText[state]}</span>\n </span>\n )\n },\n)\nSpinner.displayName = 'Spinner'\n\nexport { Spinner }\n"],"mappings":"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"}
1
+ {"version":3,"file":"spinner.js","names":[],"sources":["../../src/ui/spinner.tsx"],"sourcesContent":["'use client'\n\nimport {\n AnimatePresence,\n motion,\n useReducedMotion,\n} from 'framer-motion'\nimport * as React from 'react'\n\nimport { cn } from './lib/utils'\n\nconst sizeClasses = {\n sm: 'h-ico-sm w-ico-sm',\n md: 'h-ico-md w-ico-md',\n lg: 'h-ico-lg w-ico-lg',\n} as const\n\n/** Arc stroke width per size */\nconst arcStrokeWidths = { sm: 3, md: 3, lg: 4 } as const\n\n/** Thinner icon stroke for checkmark / X — feels lighter and more refined */\nconst iconStrokeWidths = { sm: 1.8, md: 2, lg: 2.5 } as const\n\n/**\n * Props for Spinner — an animated arc spinner with optional success (checkmark) and error (X)\n * state transitions, powered by Framer Motion.\n *\n * **Sizes:** `sm` (16px) | `md` (20px, default) | `lg` (24px)\n *\n * **States:**\n * - `spinning` (default): Rotating arc with Material Design-style pulse\n * - `success`: Arc completes to filled green circle, white checkmark draws in\n * - `error`: Arc completes to filled red circle, white X draws in\n *\n * **Variants:**\n * - `filled` (default): Semantic colored fill + white icon — for standalone contexts\n * - `bare`: No fill, icon uses `currentColor` — for embedding in buttons, toolbars, etc.\n *\n * **Accessibility:** `role=\"status\"` with sr-only text that updates per state.\n * Respects `prefers-reduced-motion` — shows static icons with opacity crossfades.\n *\n * @example\n * <Spinner /> // basic arc spinner\n * <Spinner size=\"sm\" /> // small\n * <Spinner state=\"success\" /> // filled green circle + white check\n * <Spinner state=\"success\" variant=\"bare\" /> // just the check, currentColor\n * <Spinner state=\"error\" /> // filled red circle + white X\n * <Spinner delay={150} /> // no render until 150ms\n * <Spinner state=\"success\" onComplete={handleDone} /> // callback after animation\n */\nexport interface SpinnerProps {\n /** sm | md | lg — maps to icon size tokens. Default: 'md' */\n size?: 'sm' | 'md' | 'lg'\n /** Current state. Default: 'spinning' */\n state?: 'spinning' | 'success' | 'error'\n /** Visual variant for success/error states. Default: 'filled' */\n variant?: 'filled' | 'bare'\n /** Delay in ms before showing (avoids flicker). Default: 0 */\n delay?: number\n /** Fires when success/error transition animation completes */\n onComplete?: () => void\n className?: string\n}\n\nconst RADIUS = 10\nconst CIRCUMFERENCE = 2 * Math.PI * RADIUS\n\nconst srText: Record<string, string> = {\n spinning: 'Loading...',\n success: 'Complete',\n error: 'Error',\n}\n\nconst stateColors: Record<string, string> = {\n spinning: 'var(--color-accent-9)',\n success: 'var(--color-success-9)',\n error: 'var(--color-error-9)',\n}\n\n// Filled variant — icons fit inside the filled circle\nconst CHECKMARK_D = 'M7 12.5l3 3 7-7'\nconst X_MARK_D = 'M8 8l8 8M16 8l-8 8'\n\n// Bare variant — larger icons since there's no circle constraining them\nconst CHECKMARK_BARE_D = 'M5 12.5l4 4 10-10'\nconst X_MARK_BARE_D = 'M6 6l12 12M18 6l-12 12'\n\nconst Spinner = React.forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ size = 'md', state = 'spinning', variant = 'filled', delay = 0, onComplete, className }, ref) => {\n const prefersReduced = useReducedMotion()\n const [visible, setVisible] = React.useState(delay === 0)\n\n React.useEffect(() => {\n if (delay <= 0) {\n setVisible(true)\n return\n }\n const timer = setTimeout(() => setVisible(true), delay)\n return () => clearTimeout(timer)\n }, [delay])\n\n // Under reduced-motion the success/error paths render statically (no\n // onAnimationComplete), so fire the documented onComplete contract here.\n const onCompleteRef = React.useRef(onComplete)\n React.useEffect(() => { onCompleteRef.current = onComplete })\n React.useEffect(() => {\n if (prefersReduced && (state === 'success' || state === 'error')) {\n onCompleteRef.current?.()\n }\n }, [prefersReduced, state])\n\n if (!visible) return null\n\n const arcSw = arcStrokeWidths[size]\n const iconSw = iconStrokeWidths[size]\n const isSpinning = state === 'spinning'\n const isFinal = state === 'success' || state === 'error'\n const isFilled = variant === 'filled'\n const color = variant === 'bare' && state === 'spinning' ? 'currentColor' : stateColors[state]\n\n // Icon stroke: white on filled backgrounds, currentColor on bare\n const iconColor = isFilled ? 'white' : 'currentColor'\n const checkPath = isFilled ? CHECKMARK_D : CHECKMARK_BARE_D\n const xPath = isFilled ? X_MARK_D : X_MARK_BARE_D\n\n // ── Sequence timing (seconds) ──────────────────────────────────\n // Filled: arc completes → fill fades in → white icon draws\n // Bare: arc completes + fades out → currentColor icon draws\n const ARC_COMPLETE = 0.4\n const FILL_DELAY = 0.3\n const FILL_DURATION = 0.25\n const ICON_DELAY = isFilled ? 0.5 : 0.35\n const ICON_DURATION = 0.35\n\n return (\n <span ref={ref} role=\"status\" className={cn('inline-flex', className)}>\n <svg\n className={sizeClasses[size]}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {/* Background track circle — hidden in bare final state */}\n {prefersReduced ? (\n !(isFinal && !isFilled) && (\n <circle\n cx=\"12\"\n cy=\"12\"\n r={RADIUS}\n stroke=\"var(--color-surface-border)\"\n strokeWidth={arcSw}\n fill=\"none\"\n />\n )\n ) : (\n <motion.circle\n cx=\"12\"\n cy=\"12\"\n r={RADIUS}\n stroke=\"var(--color-surface-border)\"\n strokeWidth={arcSw}\n fill=\"none\"\n animate={{ opacity: isFinal && !isFilled ? 0 : 1 }}\n transition={{ duration: 0.2, delay: isFinal && !isFilled ? ARC_COMPLETE : 0 }}\n />\n )}\n\n {/* Animated arc — spins when loading, completes to full circle on state change */}\n {prefersReduced ? (\n <circle\n cx=\"12\"\n cy=\"12\"\n r={RADIUS}\n stroke={color}\n strokeWidth={arcSw}\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeDasharray={\n isSpinning\n ? `${CIRCUMFERENCE * 0.75} ${CIRCUMFERENCE * 0.25}`\n : `${CIRCUMFERENCE} 0`\n }\n style={{\n transformOrigin: 'center',\n transform: isSpinning ? 'rotate(-90deg)' : undefined,\n opacity: isFinal && !isFilled ? 0 : 1,\n }}\n />\n ) : (\n <motion.circle\n cx=\"12\"\n cy=\"12\"\n r={RADIUS}\n stroke={color}\n strokeWidth={arcSw}\n fill=\"none\"\n strokeLinecap=\"round\"\n style={{ transformOrigin: 'center' }}\n animate={\n isSpinning\n ? {\n rotate: [0, 360],\n strokeDasharray: [\n `${CIRCUMFERENCE * 0.1} ${CIRCUMFERENCE * 0.9}`,\n `${CIRCUMFERENCE * 0.75} ${CIRCUMFERENCE * 0.25}`,\n `${CIRCUMFERENCE * 0.1} ${CIRCUMFERENCE * 0.9}`,\n ],\n }\n : {\n rotate: 0,\n strokeDasharray: `${CIRCUMFERENCE} 0`,\n // In bare mode, fade out the arc after it completes\n ...(!isFilled && { opacity: 0 }),\n }\n }\n transition={\n isSpinning\n ? {\n rotate: { duration: 1, repeat: Infinity, ease: 'linear' },\n strokeDasharray: { duration: 1.5, repeat: Infinity, ease: 'easeInOut' },\n }\n : {\n rotate: { duration: 0.3, ease: 'easeOut' },\n strokeDasharray: { duration: ARC_COMPLETE, ease: 'easeInOut' },\n ...(!isFilled && { opacity: { duration: 0.2, delay: ARC_COMPLETE } }),\n }\n }\n />\n )}\n\n {/* Filled circle — fades in after arc completes, covers track (filled variant only) */}\n <AnimatePresence>\n {isFinal && isFilled &&\n (prefersReduced ? (\n <circle\n key=\"fill-static\"\n cx=\"12\"\n cy=\"12\"\n r={RADIUS + arcSw / 2}\n fill={color}\n stroke=\"none\"\n />\n ) : (\n <motion.circle\n key=\"fill\"\n cx=\"12\"\n cy=\"12\"\n r={RADIUS + arcSw / 2}\n fill={color}\n stroke=\"none\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: FILL_DURATION, delay: FILL_DELAY, ease: 'easeOut' }}\n style={{ transformOrigin: 'center' }}\n />\n ))}\n </AnimatePresence>\n\n {/* Checkmark — white on filled, currentColor on bare */}\n <AnimatePresence>\n {state === 'success' &&\n (prefersReduced ? (\n <path\n key=\"check-static\"\n d={checkPath}\n stroke={iconColor}\n strokeWidth={iconSw}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n />\n ) : (\n <motion.path\n key=\"check\"\n d={checkPath}\n stroke={iconColor}\n strokeWidth={iconSw}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n initial={{ pathLength: 0, opacity: 0 }}\n animate={{ pathLength: 1, opacity: 1 }}\n transition={{\n pathLength: { duration: ICON_DURATION, ease: 'easeOut', delay: ICON_DELAY },\n opacity: { duration: 0.1, delay: ICON_DELAY },\n }}\n onAnimationComplete={() => onComplete?.()}\n />\n ))}\n </AnimatePresence>\n\n {/* X mark — white on filled, currentColor on bare */}\n <AnimatePresence>\n {state === 'error' &&\n (prefersReduced ? (\n <path\n key=\"x-static\"\n d={xPath}\n stroke={iconColor}\n strokeWidth={iconSw}\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n ) : (\n <motion.path\n key=\"x\"\n d={xPath}\n stroke={iconColor}\n strokeWidth={iconSw}\n strokeLinecap=\"round\"\n fill=\"none\"\n initial={{ pathLength: 0, opacity: 0 }}\n animate={{ pathLength: 1, opacity: 1 }}\n transition={{\n pathLength: { duration: ICON_DURATION, ease: 'easeOut', delay: ICON_DELAY },\n opacity: { duration: 0.1, delay: ICON_DELAY },\n }}\n onAnimationComplete={() => onComplete?.()}\n />\n ))}\n </AnimatePresence>\n </svg>\n <span className=\"sr-only\">{srText[state]}</span>\n </span>\n )\n },\n)\nSpinner.displayName = 'Spinner'\n\nexport { Spinner }\n"],"mappings":";;;;;;AAWA,IAAM,IAAc;CAClB,IAAI;CACJ,IAAI;CACJ,IAAI;AACN,GAGM,IAAkB;CAAE,IAAI;CAAG,IAAI;CAAG,IAAI;AAAE,GAGxC,IAAmB;CAAE,IAAI;CAAK,IAAI;CAAG,IAAI;AAAI,GA2C7C,IAAS,IACT,IAAgB,IAAI,KAAK,KAAK,GAE9B,IAAiC;CACrC,UAAU;CACV,SAAS;CACT,OAAO;AACT,GAEM,IAAsC;CAC1C,UAAU;CACV,SAAS;CACT,OAAO;AACT,GAGM,IAAc,mBACd,IAAW,sBAGX,IAAmB,qBACnB,IAAgB,0BAEhB,IAAU,EAAM,YACnB,EAAE,UAAO,MAAM,WAAQ,YAAY,aAAU,UAAU,WAAQ,GAAG,eAAY,gBAAa,MAAQ;CAClG,IAAM,IAAiB,EAAiB,GAClC,CAAC,GAAS,KAAc,EAAM,SAAS,MAAU,CAAC;CAExD,EAAM,gBAAgB;EACpB,IAAI,KAAS,GAAG;GACd,EAAW,EAAI;GACf;EACF;EACA,IAAM,IAAQ,iBAAiB,EAAW,EAAI,GAAG,CAAK;EACtD,aAAa,aAAa,CAAK;CACjC,GAAG,CAAC,CAAK,CAAC;CAIV,IAAM,IAAgB,EAAM,OAAO,CAAU;CAQ7C,IAPA,EAAM,gBAAgB;EAAE,EAAc,UAAU;CAAW,CAAC,GAC5D,EAAM,gBAAgB;EACpB,AAAI,MAAmB,MAAU,aAAa,MAAU,YACtD,EAAc,UAAU;CAE5B,GAAG,CAAC,GAAgB,CAAK,CAAC,GAEtB,CAAC,GAAS,OAAO;CAErB,IAAM,IAAQ,EAAgB,IACxB,IAAS,EAAiB,IAC1B,IAAa,MAAU,YACvB,IAAU,MAAU,aAAa,MAAU,SAC3C,IAAW,MAAY,UACvB,IAAQ,MAAY,UAAU,MAAU,aAAa,iBAAiB,EAAY,IAGlF,IAAY,IAAW,UAAU,gBACjC,IAAY,IAAW,IAAc,GACrC,IAAQ,IAAW,IAAW,GAK9B,IAAe,IAGf,IAAa,IAAW,KAAM,KAC9B,IAAgB;CAEtB,OACE,kBAAC,QAAD;EAAW;EAAK,MAAK;EAAS,WAAW,EAAG,eAAe,CAAS;YAApE,CACE,kBAAC,OAAD;GACE,WAAW,EAAY;GACvB,SAAQ;GACR,MAAK;GACL,OAAM;aAJR;IAOG,IACC,EAAE,KAAW,CAAC,MACZ,kBAAC,UAAD;KACE,IAAG;KACH,IAAG;KACH,GAAG;KACH,QAAO;KACP,aAAa;KACb,MAAK;IACN,CAAA,IAGH,kBAAC,EAAO,QAAR;KACE,IAAG;KACH,IAAG;KACH,GAAG;KACH,QAAO;KACP,aAAa;KACb,MAAK;KACL,SAAS,EAAE,SAAS,KAAW,CAAC,IAAW,IAAI,EAAE;KACjD,YAAY;MAAE,UAAU;MAAK,OAAO,KAAW,CAAC,IAAW,IAAe;KAAE;IAC7E,CAAA;IAIF,IACC,kBAAC,UAAD;KACE,IAAG;KACH,IAAG;KACH,GAAG;KACH,QAAQ;KACR,aAAa;KACb,MAAK;KACL,eAAc;KACd,iBACE,IACI,GAAG,IAAgB,IAAK,GAAG,IAAgB,QAC3C,GAAG,EAAc;KAEvB,OAAO;MACL,iBAAiB;MACjB,WAAW,IAAa,mBAAmB,KAAA;MAC3C,SAAS,KAAW,CAAC,IAAW,IAAI;KACtC;IACD,CAAA,IAED,kBAAC,EAAO,QAAR;KACE,IAAG;KACH,IAAG;KACH,GAAG;KACH,QAAQ;KACR,aAAa;KACb,MAAK;KACL,eAAc;KACd,OAAO,EAAE,iBAAiB,SAAS;KACnC,SACE,IACI;MACE,QAAQ,CAAC,GAAG,GAAG;MACf,iBAAiB;OACf,GAAG,IAAgB,GAAI,GAAG,IAAgB;OAC1C,GAAG,IAAgB,IAAK,GAAG,IAAgB;OAC3C,GAAG,IAAgB,GAAI,GAAG,IAAgB;MAC5C;KACF,IACA;MACE,QAAQ;MACR,iBAAiB,GAAG,EAAc;MAElC,GAAI,CAAC,KAAY,EAAE,SAAS,EAAE;KAChC;KAEN,YACE,IACI;MACE,QAAQ;OAAE,UAAU;OAAG,QAAQ;OAAU,MAAM;MAAS;MACxD,iBAAiB;OAAE,UAAU;OAAK,QAAQ;OAAU,MAAM;MAAY;KACxE,IACA;MACE,QAAQ;OAAE,UAAU;OAAK,MAAM;MAAU;MACzC,iBAAiB;OAAE,UAAU;OAAc,MAAM;MAAY;MAC7D,GAAI,CAAC,KAAY,EAAE,SAAS;OAAE,UAAU;OAAK,OAAO;MAAa,EAAE;KACrE;IAEP,CAAA;IAIH,kBAAC,GAAD,EAAA,UACG,KAAW,MACT,IACC,kBAAC,UAAD;KAEE,IAAG;KACH,IAAG;KACH,GAAG,IAAS,IAAQ;KACpB,MAAM;KACN,QAAO;IACR,GANK,aAML,IAED,kBAAC,EAAO,QAAR;KAEE,IAAG;KACH,IAAG;KACH,GAAG,IAAS,IAAQ;KACpB,MAAM;KACN,QAAO;KACP,SAAS,EAAE,SAAS,EAAE;KACtB,SAAS,EAAE,SAAS,EAAE;KACtB,YAAY;MAAE,UAAU;MAAe,OAAO;MAAY,MAAM;KAAU;KAC1E,OAAO,EAAE,iBAAiB,SAAS;IACpC,GAVK,MAUL,GAEU,CAAA;IAGjB,kBAAC,GAAD,EAAA,UACG,MAAU,cACR,IACC,kBAAC,QAAD;KAEE,GAAG;KACH,QAAQ;KACR,aAAa;KACb,eAAc;KACd,gBAAe;KACf,MAAK;IACN,GAPK,cAOL,IAED,kBAAC,EAAO,MAAR;KAEE,GAAG;KACH,QAAQ;KACR,aAAa;KACb,eAAc;KACd,gBAAe;KACf,MAAK;KACL,SAAS;MAAE,YAAY;MAAG,SAAS;KAAE;KACrC,SAAS;MAAE,YAAY;MAAG,SAAS;KAAE;KACrC,YAAY;MACV,YAAY;OAAE,UAAU;OAAe,MAAM;OAAW,OAAO;MAAW;MAC1E,SAAS;OAAE,UAAU;OAAK,OAAO;MAAW;KAC9C;KACA,2BAA2B,IAAa;IACzC,GAdK,OAcL,GAEU,CAAA;IAGjB,kBAAC,GAAD,EAAA,UACG,MAAU,YACR,IACC,kBAAC,QAAD;KAEE,GAAG;KACH,QAAQ;KACR,aAAa;KACb,eAAc;KACd,MAAK;IACN,GANK,UAML,IAED,kBAAC,EAAO,MAAR;KAEE,GAAG;KACH,QAAQ;KACR,aAAa;KACb,eAAc;KACd,MAAK;KACL,SAAS;MAAE,YAAY;MAAG,SAAS;KAAE;KACrC,SAAS;MAAE,YAAY;MAAG,SAAS;KAAE;KACrC,YAAY;MACV,YAAY;OAAE,UAAU;OAAe,MAAM;OAAW,OAAO;MAAW;MAC1E,SAAS;OAAE,UAAU;OAAK,OAAO;MAAW;KAC9C;KACA,2BAA2B,IAAa;IACzC,GAbK,GAaL,GAEU,CAAA;GACd;MACL,kBAAC,QAAD;GAAM,WAAU;aAAW,EAAO;EAAa,CAAA,CAC3C;;AAEV,CACF;AACA,EAAQ,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../src/ui/switch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,gBAAgB,MAAM,0BAA0B,CAAA;AAE5D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,mBAAmB,CAAA;AAuBtE,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC;IAC/F,yJAAyJ;IACzJ,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;IACxC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED,QAAA,MAAM,MAAM,uFAyDV,CAAA;AAGF,OAAO,EAAE,MAAM,EAAE,CAAA"}
1
+ {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../src/ui/switch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,gBAAgB,MAAM,0BAA0B,CAAA;AAE5D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,mBAAmB,CAAA;AAuBtE,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC;IAC/F,yJAAyJ;IACzJ,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;IACxC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED,QAAA,MAAM,MAAM,uFA8DV,CAAA;AAGF,OAAO,EAAE,MAAM,EAAE,CAAA"}
package/dist/ui/switch.js CHANGED
@@ -6,9 +6,9 @@ import { useFormField as i } from "./form.js";
6
6
  import { resolveFieldState as a } from "../_chunks/field-state.js";
7
7
  import * as o from "react";
8
8
  import { jsx as s } from "react/jsx-runtime";
9
- import { motion as c } from "framer-motion";
9
+ import { motion as c, useReducedMotion as l } from "framer-motion";
10
10
  //#region src/ui/switch.tsx
11
- var l = {
11
+ var u = {
12
12
  sm: {
13
13
  track: "h-6 w-[38px]",
14
14
  thumb: "h-5 w-5",
@@ -24,40 +24,40 @@ var l = {
24
24
  thumb: "h-6 w-6",
25
25
  travel: 24
26
26
  }
27
- }, u = {
27
+ }, d = {
28
28
  error: "border-error-7 data-[state=checked]:bg-error-9",
29
29
  warning: "border-warning-7 data-[state=checked]:bg-warning-9",
30
30
  success: "border-success-7 data-[state=checked]:bg-success-9"
31
- }, d = {
31
+ }, f = {
32
32
  accent: "data-[state=checked]:bg-accent-9",
33
33
  success: "data-[state=checked]:bg-success-9",
34
34
  warning: "data-[state=checked]:bg-warning-9"
35
- }, f = o.forwardRef(({ className: f, state: p, size: m = "md", color: h = "accent", thumbIcon: g, checked: _, defaultChecked: v, onCheckedChange: y, ...b }, x) => {
36
- let S = i(), C = a(p, S.state), w = b["aria-describedby"] ?? S.helperTextId, T = b["aria-required"] ?? S.required, [E, D] = o.useState(v ?? !1), O = _ === void 0 ? E : _, { track: k, thumb: A, travel: j } = l[m], M = o.useCallback((e) => {
37
- _ === void 0 && D(e), y?.(e);
38
- }, [_, y]);
35
+ }, p = o.forwardRef(({ className: p, state: m, size: h = "md", color: g = "accent", thumbIcon: _, checked: v, defaultChecked: y, onCheckedChange: b, ...x }, S) => {
36
+ let C = i(), w = a(m, C.state), T = x["aria-describedby"] ?? C.helperTextId, E = x["aria-required"] ?? C.required, [D, O] = o.useState(y ?? !1), k = v === void 0 ? D : v, A = l(), j = typeof document < "u" && (document.dir === "rtl" || document.documentElement.dir === "rtl"), { track: M, thumb: N, travel: P } = u[h], F = o.useCallback((e) => {
37
+ v === void 0 && O(e), b?.(e);
38
+ }, [v, b]);
39
39
  return /* @__PURE__ */ s(e, {
40
- className: r("touch-target peer inline-flex shrink-0 cursor-pointer items-center rounded-pill border-2 border-surface-border-strong shadow-raised transition-colors duration-fast-01 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-action-disabled data-[state=checked]:border-transparent data-[state=unchecked]:bg-surface-border-strong data-[state=unchecked]:hover:bg-surface-raised-active", k, d[h], C && u[C], f),
41
- checked: _,
42
- defaultChecked: v,
43
- onCheckedChange: M,
44
- "aria-invalid": C === "error" || void 0,
45
- "aria-describedby": w,
46
- "aria-required": T || void 0,
47
- ...b,
48
- ref: x,
40
+ className: r("touch-target peer inline-flex shrink-0 cursor-pointer items-center rounded-pill border-2 border-surface-border-strong shadow-raised transition-colors duration-fast-01 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-action-disabled data-[state=checked]:border-transparent data-[state=unchecked]:bg-surface-border-strong data-[state=unchecked]:hover:bg-surface-raised-active", M, f[g], w && d[w], p),
41
+ checked: v,
42
+ defaultChecked: y,
43
+ onCheckedChange: F,
44
+ "aria-invalid": w === "error" || void 0,
45
+ "aria-describedby": T,
46
+ "aria-required": E || void 0,
47
+ ...x,
48
+ ref: S,
49
49
  children: /* @__PURE__ */ s(t, {
50
50
  asChild: !0,
51
51
  children: /* @__PURE__ */ s(c.span, {
52
- className: r("pointer-events-none flex items-center justify-center rounded-pill bg-accent-fg shadow-raised-hover ring-0", A),
53
- animate: { x: O ? j : 0 },
54
- whileTap: { scale: .85 },
55
- transition: n.snappy,
56
- children: g
52
+ className: r("pointer-events-none flex items-center justify-center rounded-pill bg-accent-fg shadow-raised-hover ring-0", N),
53
+ animate: { x: (k ? P : 0) * (j ? -1 : 1) },
54
+ whileTap: A ? void 0 : { scale: .85 },
55
+ transition: A ? { duration: 0 } : n.snappy,
56
+ children: _
57
57
  })
58
58
  })
59
59
  });
60
60
  });
61
- f.displayName = e.displayName;
61
+ p.displayName = e.displayName;
62
62
  //#endregion
63
- export { f as Switch };
63
+ export { p as Switch };