@datum-cloud/datum-ui 3.7.1 → 3.8.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 (86) hide show
  1. package/dist/app-navigation/index.mjs +1 -1
  2. package/dist/{app-navigation-Bcx7hr9L.mjs → app-navigation-DyNZwlSG.mjs} +4 -4
  3. package/dist/assistant/index.mjs +9 -8
  4. package/dist/autocomplete/index.mjs +1 -1
  5. package/dist/{autocomplete-fSSmRLYK.mjs → autocomplete-D0zAcT78.mjs} +2 -2
  6. package/dist/autosearch/index.mjs +2 -2
  7. package/dist/badge/index.mjs +182 -1
  8. package/dist/button/index.mjs +2 -2
  9. package/dist/{button-Dj6cKrWj.mjs → button-Cn4KagBO.mjs} +1 -1
  10. package/dist/{button-BU8TEbJ5.mjs → button-IK-Lnu_9.mjs} +1 -1
  11. package/dist/{calendar-date-picker-BUwgVaI1.mjs → calendar-date-picker-CknZM6a2.mjs} +1 -1
  12. package/dist/card/index.mjs +1 -1
  13. package/dist/{card-save-bar-0XDpAJo_.mjs → card-save-bar-Te8jf-ie.mjs} +1 -1
  14. package/dist/checkbox/index.mjs +1 -1
  15. package/dist/checkbox-BAo5sbHk.mjs +84 -0
  16. package/dist/collapsible/index.mjs +1 -6
  17. package/dist/collapsible-B-KP3JZ-.mjs +104 -0
  18. package/dist/components/base/checkbox/checkbox.d.ts +11 -3
  19. package/dist/components/base/collapsible/collapsible.d.ts +28 -0
  20. package/dist/components/base/collapsible/index.d.ts +1 -1
  21. package/dist/components/base/radio-group/radio-group.d.ts +11 -5
  22. package/dist/components/base/spinner/index.d.ts +1 -1
  23. package/dist/components/base/spinner/spinner.d.ts +11 -0
  24. package/dist/components/base/switch/switch.d.ts +6 -1
  25. package/dist/components/base/typography/typography.d.ts +1 -1
  26. package/dist/components/features/_shared/copy-state-icon.d.ts +12 -0
  27. package/dist/components/features/_shared/index.d.ts +2 -0
  28. package/dist/components/features/_shared/motion-chip.d.ts +293 -0
  29. package/dist/components/icons/spinner.icon.d.ts +17 -3
  30. package/dist/copy-state-icon-DMvXXsZm.mjs +61 -0
  31. package/dist/data-table/index.mjs +1 -1
  32. package/dist/{data-table-s2YrE79S.mjs → data-table-CpBwO8Ea.mjs} +6 -6
  33. package/dist/date-picker/index.mjs +3 -3
  34. package/dist/date-time-picker/index.mjs +1 -1
  35. package/dist/{date-time-picker-CLdaGiGC.mjs → date-time-picker-Bc41Ixrs.mjs} +1 -1
  36. package/dist/{date-time-range-picker-RZX4CS4b.mjs → date-time-range-picker-yy1Acntn.mjs} +2 -2
  37. package/dist/dropzone/index.mjs +1 -1
  38. package/dist/{dropzone-Cer9E-VH.mjs → dropzone-qKYfSe7o.mjs} +1 -1
  39. package/dist/empty-content/index.mjs +1 -1
  40. package/dist/{empty-content-B2FZ9cyt.mjs → empty-content-CTMHak36.mjs} +1 -1
  41. package/dist/form/index.mjs +1 -1
  42. package/dist/form/stepper/index.mjs +1 -1
  43. package/dist/{form-C4XcxxjK.mjs → form-DTaVgDSV.mjs} +19 -12
  44. package/dist/grouped-table/index.mjs +1 -1
  45. package/dist/{grouped-table-32RO2v7U.mjs → grouped-table-Dl6DclbV.mjs} +3 -3
  46. package/dist/icons/index.mjs +1 -1
  47. package/dist/index.mjs +32 -32
  48. package/dist/{layers-XEND2WKv.mjs → layers-DLUbkJtt.mjs} +10 -2
  49. package/dist/loader-overlay/index.mjs +1 -1
  50. package/dist/{loader-overlay-JvB8IQo3.mjs → loader-overlay-DP0pvHuG.mjs} +1 -1
  51. package/dist/logs/index.mjs +39 -36
  52. package/dist/map/index.mjs +1 -1
  53. package/dist/more-actions/index.mjs +1 -1
  54. package/dist/{more-actions-D9k1ILzT.mjs → more-actions-BlSOVwa8.mjs} +1 -1
  55. package/dist/motion-chip-BczV7spP.mjs +52 -0
  56. package/dist/multi-select/index.mjs +1 -1
  57. package/dist/{multi-select-BUgx6VZF.mjs → multi-select-C2cBrqXl.mjs} +53 -45
  58. package/dist/picker/index.mjs +2 -2
  59. package/dist/{picker-C0h30DHf.mjs → picker-DC3GErYg.mjs} +1 -1
  60. package/dist/radio-group/index.mjs +1 -1
  61. package/dist/radio-group-Boxi2hm0.mjs +83 -0
  62. package/dist/rich-text-editor/index.mjs +1 -1
  63. package/dist/{rich-text-editor-ibngjhQV.mjs → rich-text-editor-BUz06s-b.mjs} +1 -1
  64. package/dist/spinner/index.mjs +1 -1
  65. package/dist/spinner-DSlDJdWl.mjs +23 -0
  66. package/dist/spinner.icon-BiUnMAxw.mjs +104 -0
  67. package/dist/switch/index.mjs +1 -1
  68. package/dist/switch-IduVwiPZ.mjs +114 -0
  69. package/dist/tabs/index.mjs +1 -1
  70. package/dist/tag-input/index.mjs +1 -1
  71. package/dist/{tag-input-DAMY703F.mjs → tag-input-a3ktkGrH.mjs} +39 -32
  72. package/dist/task-queue/index.mjs +1 -1
  73. package/dist/{task-queue-dropdown-BgQSGDwg.mjs → task-queue-dropdown-DuCAAybs.mjs} +3 -3
  74. package/dist/time-picker/index.mjs +1 -1
  75. package/dist/{time-picker-DgHjdcMZ.mjs → time-picker-B_am4eAK.mjs} +1 -1
  76. package/dist/{to-api-format-EZInfj0_.mjs → to-api-format-DyImCzCn.mjs} +2 -2
  77. package/dist/transfer/index.mjs +1 -1
  78. package/dist/{transfer-91lwTOhX.mjs → transfer-DGUeAQUL.mjs} +1 -1
  79. package/dist/{use-option-picker-CBMU72LU.mjs → use-option-picker-DXY2SNnT.mjs} +2 -2
  80. package/package.json +1 -4
  81. package/dist/badge-D7A6GfWn.mjs +0 -182
  82. package/dist/checkbox-CNljVnKj.mjs +0 -28
  83. package/dist/radio-group-0RxTmRnF.mjs +0 -43
  84. package/dist/spinner-DjEpx6Q3.mjs +0 -13
  85. package/dist/spinner.icon-D0SKuGFG.mjs +0 -47
  86. package/dist/switch-CWvVN9ea.mjs +0 -33
@@ -1,4 +1,4 @@
1
1
  import { t as CloseIcon } from "../close.icon-BCPmH4nN.mjs";
2
2
  import { t as Icon } from "../icon-wrapper-CIk2th6R.mjs";
3
- import { t as SpinnerIcon } from "../spinner.icon-D0SKuGFG.mjs";
3
+ import { t as SpinnerIcon } from "../spinner.icon-BiUnMAxw.mjs";
4
4
  export { CloseIcon, Icon, SpinnerIcon };
package/dist/index.mjs CHANGED
@@ -1,34 +1,34 @@
1
1
  import { t as cn } from "./utils-CTIuhCOs.mjs";
2
2
  import { n as AlertDescription, r as AlertTitle, t as Alert } from "./alert-CVckvox4.mjs";
3
3
  import { Avatar, AvatarFallback, AvatarImage } from "./avatar/index.mjs";
4
- import { n as badgeVariants, t as Badge } from "./badge-D7A6GfWn.mjs";
4
+ import { Badge, badgeVariants } from "./badge/index.mjs";
5
5
  import { a as BreadcrumbList, i as BreadcrumbLink, n as BreadcrumbEllipsis, o as BreadcrumbPage, r as BreadcrumbItem, s as BreadcrumbSeparator, t as Breadcrumb } from "./breadcrumb-D97jAZ2N.mjs";
6
- import { t as SpinnerIcon } from "./spinner.icon-D0SKuGFG.mjs";
7
- import { n as buttonVariants, t as Button } from "./button-Dj6cKrWj.mjs";
8
- import { t as LinkButton } from "./button-BU8TEbJ5.mjs";
6
+ import { t as SpinnerIcon } from "./spinner.icon-BiUnMAxw.mjs";
7
+ import { n as buttonVariants, t as Button } from "./button-Cn4KagBO.mjs";
8
+ import { t as LinkButton } from "./button-IK-Lnu_9.mjs";
9
9
  import { t as Separator } from "./separator-DNiiN2BN.mjs";
10
10
  import { i as buttonGroupVariants, n as ButtonGroupSeparator, r as ButtonGroupText, t as ButtonGroup } from "./button-group-C3GKo-0p.mjs";
11
11
  import { t as Icon } from "./icon-wrapper-CIk2th6R.mjs";
12
12
  import { Calendar, CalendarDayButton } from "./calendar/index.mjs";
13
- import { a as CardField, c as CardFooter, d as CardTitle, i as CardContent, l as CardHeader, n as Card, o as CardFieldLabel, r as CardAction, s as CardFieldValue, t as CardSaveBar, u as CardDescription } from "./card-save-bar-0XDpAJo_.mjs";
13
+ import { a as CardField, c as CardFooter, d as CardTitle, i as CardContent, l as CardHeader, n as Card, o as CardFieldLabel, r as CardAction, s as CardFieldValue, t as CardSaveBar, u as CardDescription } from "./card-save-bar-Te8jf-ie.mjs";
14
14
  import { a as ChartTooltip, i as ChartStyle, n as ChartLegend, o as ChartTooltipContent, r as ChartLegendContent, t as ChartContainer } from "./chart-BsGsx2jb.mjs";
15
- import { t as Checkbox } from "./checkbox-CNljVnKj.mjs";
16
- import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "./collapsible/index.mjs";
15
+ import { n as EASE, t as DURATION } from "./motion-DOrRbLmy.mjs";
16
+ import { t as useControllableState } from "./use-controllable-state-DLeVgbAb.mjs";
17
+ import { t as Checkbox } from "./checkbox-BAo5sbHk.mjs";
18
+ import { n as CollapsibleContent, r as CollapsibleTrigger, t as Collapsible } from "./collapsible-B-KP3JZ-.mjs";
17
19
  import { a as CommandInput, c as CommandSeparator, i as CommandGroup, l as CommandShortcut, n as CommandDialog, o as CommandItem, r as CommandEmpty, s as CommandList, t as Command } from "./command-B0be-zU5.mjs";
18
20
  import { t as CloseIcon } from "./close.icon-BCPmH4nN.mjs";
19
21
  import { t as Dialog } from "./dialog-C8RXIQYm.mjs";
20
- import { t as useControllableState } from "./use-controllable-state-DLeVgbAb.mjs";
21
22
  import { n as HoverCardContent, r as HoverCardTrigger, t as HoverCard } from "./hover-card-DSt1lZGg.mjs";
22
23
  import { t as Input } from "./input-DsT5qkJn.mjs";
23
24
  import { a as InputGroupText, i as InputGroupInput, n as InputGroupAddon, o as InputGroupTextarea, r as InputGroupButton, t as InputGroup } from "./input-group-CCzvJIZM.mjs";
24
25
  import { t as Label } from "./label-BR1V3Imy.mjs";
25
- import { t as Spinner } from "./spinner-DjEpx6Q3.mjs";
26
- import { A as useLeaflet, C as MapMarkerClusterGroup, D as MapRectangle, E as MapPopup, O as MapTooltip, S as MapMarker, T as MapPolyline, _ as MapLocateControl, a as MapTileLayer, b as MapCircle, c as MapDrawDelete, d as MapDrawPolygon, f as MapDrawPolyline, g as MapFullscreenControl, h as MapControlContainer, i as MapLayersControl, j as PlaceAutocomplete, k as Map, l as MapDrawEdit, m as MapDrawUndo, n as MapLayerGroup, o as MapDrawCircle, p as MapDrawRectangle, r as MapLayers, s as MapDrawControl, t as MapFeatureGroup, u as MapDrawMarker, v as MapSearchControl, w as MapPolygon, x as MapCircleMarker, y as MapZoomControl } from "./layers-XEND2WKv.mjs";
26
+ import { A as useLeaflet, C as MapMarkerClusterGroup, D as MapRectangle, E as MapPopup, O as MapTooltip, S as MapMarker, T as MapPolyline, _ as MapLocateControl, a as MapTileLayer, b as MapCircle, c as MapDrawDelete, d as MapDrawPolygon, f as MapDrawPolyline, g as MapFullscreenControl, h as MapControlContainer, i as MapLayersControl, j as PlaceAutocomplete, k as Map, l as MapDrawEdit, m as MapDrawUndo, n as MapLayerGroup, o as MapDrawCircle, p as MapDrawRectangle, r as MapLayers, s as MapDrawControl, t as MapFeatureGroup, u as MapDrawMarker, v as MapSearchControl, w as MapPolygon, x as MapCircleMarker, y as MapZoomControl } from "./layers-DLUbkJtt.mjs";
27
27
  import { i as useInSheet, n as MobileSheet, r as InSheetContext, t as ResponsiveSheetTrigger } from "./mobile-sheet-1995HYY_.mjs";
28
28
  import { a as SheetHeader, i as SheetFooter, o as SheetTitle, r as SheetDescription, s as SheetTrigger } from "./sheet-DYPtVIb2.mjs";
29
29
  import { i as SheetOverlay, n as SheetClose, r as SheetContent, t as Sheet } from "./sheet-DEpEJ_Rk.mjs";
30
30
  import { i as PopoverTrigger, n as PopoverAnchor, r as PopoverContent, t as Popover } from "./popover-7YxyP_W0.mjs";
31
- import { n as RadioGroupItem, t as RadioGroup } from "./radio-group-0RxTmRnF.mjs";
31
+ import { n as RadioGroupItem, t as RadioGroup } from "./radio-group-Boxi2hm0.mjs";
32
32
  import { t as useBreakpoint } from "./use-breakpoint-zY_JYINK.mjs";
33
33
  import { t as ResponsiveDropdown } from "./responsive-dropdown-DsWgpE_i.mjs";
34
34
  import { t as ResponsivePopover } from "./responsive-popover-DJYd8lOK.mjs";
@@ -37,53 +37,53 @@ import { n as SettingsNavItem, r as SettingsNavLabel, t as SettingsNav } from ".
37
37
  import { C as SidebarProvider, S as SidebarGroupLabel, _ as SidebarMenuSubButton, a as SidebarInput, b as SidebarGroupAction, c as SidebarSeparator, d as SidebarMenuAction, f as SidebarMenuBadge, g as SidebarMenuSub, h as SidebarMenuSkeleton, i as SidebarHeader, l as SidebarTrigger, m as SidebarMenuItem, n as SidebarContent, o as SidebarInset, p as SidebarMenuButton, r as SidebarFooter, s as SidebarRail, t as Sidebar, u as SidebarMenu, v as SidebarMenuSubItem, w as useSidebar, x as SidebarGroupContent, y as SidebarGroup } from "./sidebar-DWnxQWQ8.mjs";
38
38
  import { t as Tooltip } from "./tooltip-OIySjJWW.mjs";
39
39
  import { Skeleton } from "./skeleton/index.mjs";
40
- import { t as Switch } from "./switch-CWvVN9ea.mjs";
40
+ import { t as Spinner } from "./spinner-DSlDJdWl.mjs";
41
+ import { t as Switch } from "./switch-IduVwiPZ.mjs";
41
42
  import { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "./table/index.mjs";
42
43
  import { Tabs, TabsContent, TabsLinkTrigger, TabsList, TabsTrigger } from "./tabs/index.mjs";
43
44
  import { t as Textarea } from "./textarea-CvhdK6JY.mjs";
44
45
  import { a as ListItem, c as Title, d as titleVariants, i as List, l as paragraphVariants, n as Code, o as Paragraph, r as Link, s as Text, t as Blockquote, u as textVariants } from "./typography-XFfN6PGD.mjs";
45
46
  import { t as VisuallyHidden } from "./visuallyhidden-Mg4OsZ-l.mjs";
46
- import { a as hasActiveDescendant, i as findItemByHref, n as NavMenu, o as isNavItemActive, r as NavMenuItem, s as normalizePath, t as AppNavigation } from "./app-navigation-Bcx7hr9L.mjs";
47
- import { n as EASE, t as DURATION } from "./motion-DOrRbLmy.mjs";
48
- import { t as LoaderOverlay } from "./loader-overlay-JvB8IQo3.mjs";
49
- import { t as Autocomplete } from "./autocomplete-fSSmRLYK.mjs";
47
+ import { a as hasActiveDescendant, i as findItemByHref, n as NavMenu, o as isNavItemActive, r as NavMenuItem, s as normalizePath, t as AppNavigation } from "./app-navigation-DyNZwlSG.mjs";
48
+ import { t as LoaderOverlay } from "./loader-overlay-DP0pvHuG.mjs";
49
+ import { t as Autocomplete } from "./autocomplete-D0zAcT78.mjs";
50
50
  import { Autosearch, defaultAutosearchValue } from "./autosearch/index.mjs";
51
51
  import { n as avatarStackVariants, t as AvatarStack } from "./avatar-stack-2ow672bR.mjs";
52
- import { M as getBrowserTimezone, N as getTimezoneOffset, j as formatTimezoneLabel } from "./date-time-range-picker-RZX4CS4b.mjs";
53
- import { t as CalendarDatePicker } from "./calendar-date-picker-BUwgVaI1.mjs";
52
+ import { M as getBrowserTimezone, N as getTimezoneOffset, j as formatTimezoneLabel } from "./date-time-range-picker-yy1Acntn.mjs";
53
+ import { t as CalendarDatePicker } from "./calendar-date-picker-CknZM6a2.mjs";
54
54
  import { i as ClientOnly, n as useTheme, r as ThemeScript, t as ThemeProvider } from "./themes-BoxnQbbu.mjs";
55
55
  import { a as formatJson, c as isValidYaml, d as CodeEditor, i as CodeEditorTabs, l as jsonToYaml, n as jsonSchema, o as formatYaml, r as yamlSchema, s as isValidJson, t as createCodeEditorSchema, u as yamlToJson } from "./types-ChINrR8H.mjs";
56
56
  import { t as toast } from "./toast-CizxCEcK.mjs";
57
57
  import { n as Toaster, t as useToast } from "./use-toast-CZAZeS95.mjs";
58
- import { _ as useNuqsAdapter, a as useDataTablePagination, b as DEFAULT_PAGE_SIZE, c as useDataTableSelection, d as resolvePath, f as rowMatchesSearch, g as createSelectionColumn, h as DataTableColumnHeader, i as useDataTableLoading, l as useDataTableSorting, m as DataTableRowActions, n as useDataTableFilters, o as useDataTableRows, p as dataTableFeatures, r as useDataTableInlineContents, s as useDataTableSearch, t as DataTable, u as createDataTableStore, v as DEFAULT_DEBOUNCE_MS, x as DEFAULT_PAGE_SIZES, y as DEFAULT_LOADING_ROWS } from "./data-table-s2YrE79S.mjs";
58
+ import { _ as useNuqsAdapter, a as useDataTablePagination, b as DEFAULT_PAGE_SIZE, c as useDataTableSelection, d as resolvePath, f as rowMatchesSearch, g as createSelectionColumn, h as DataTableColumnHeader, i as useDataTableLoading, l as useDataTableSorting, m as DataTableRowActions, n as useDataTableFilters, o as useDataTableRows, p as dataTableFeatures, r as useDataTableInlineContents, s as useDataTableSearch, t as DataTable, u as createDataTableStore, v as DEFAULT_DEBOUNCE_MS, x as DEFAULT_PAGE_SIZES, y as DEFAULT_LOADING_ROWS } from "./data-table-CpBwO8Ea.mjs";
59
59
  import { t as ActionRow } from "./action-row-BEzE9x37.mjs";
60
60
  import { n as useDebouncedSearchInput, t as DEFAULT_SEARCH_DEBOUNCE_MS } from "./use-debounced-search-input-B4u28iLx.mjs";
61
- import { t as MultiSelect } from "./multi-select-BUgx6VZF.mjs";
61
+ import { t as MultiSelect } from "./multi-select-C2cBrqXl.mjs";
62
62
  import { a as formatRelativeDate, d as parseDate, i as formatCombinedDate, l as getTimestamp, n as DEFAULT_DATE_FORMAT, o as formatTimezoneDate, r as formatAbsoluteDate, s as formatUTCDate, t as DateTime, u as getTimezoneAbbreviation } from "./date-time-BBRVM9qb.mjs";
63
- import { t as DateTimePicker } from "./date-time-picker-CLdaGiGC.mjs";
63
+ import { t as DateTimePicker } from "./date-time-picker-Bc41Ixrs.mjs";
64
64
  import { a as DropdownMenuItem, c as DropdownMenuRadioGroup, d as DropdownMenuShortcut, f as DropdownMenuSub, h as DropdownMenuTrigger, i as DropdownMenuGroup, l as DropdownMenuRadioItem, m as DropdownMenuSubTrigger, n as DropdownMenuCheckboxItem, o as DropdownMenuLabel, p as DropdownMenuSubContent, r as DropdownMenuContent, s as DropdownMenuPortal, t as DropdownMenu, u as DropdownMenuSeparator } from "./dropdown-DR9j3Ni_.mjs";
65
- import { i as FileInputButton, n as DropzoneContent, r as DropzoneEmptyState, t as Dropzone } from "./dropzone-Cer9E-VH.mjs";
66
- import { t as EmptyContent } from "./empty-content-B2FZ9cyt.mjs";
67
- import { A as FormCheckbox, C as FormDialog, D as FormCustom, E as FormDatePicker, M as FormAutosearch, N as FormAutocomplete, O as FormCopyBox, S as FormError, T as FormDateTimePicker, _ as FormRadioGroup, a as useField, b as FormFieldArray, c as useWatchAll, d as FormTextarea, f as FormSwitch, g as FormRoot, h as FormSelectItem, i as useFieldContext, j as FormButton, k as FormCombobox, l as FormTransfer, m as FormSelect, n as useFormState, o as FormWhen, p as FormSubmit, r as useFormContext, s as useWatch, t as Form, u as FormTimePicker, v as FormRadioItem, w as FormDescription, x as FormField, y as FormInput } from "./form-C4XcxxjK.mjs";
65
+ import { i as FileInputButton, n as DropzoneContent, r as DropzoneEmptyState, t as Dropzone } from "./dropzone-qKYfSe7o.mjs";
66
+ import { t as EmptyContent } from "./empty-content-CTMHak36.mjs";
67
+ import { A as FormCheckbox, C as FormDialog, D as FormCustom, E as FormDatePicker, M as FormAutosearch, N as FormAutocomplete, O as FormCopyBox, S as FormError, T as FormDateTimePicker, _ as FormRadioGroup, a as useField, b as FormFieldArray, c as useWatchAll, d as FormTextarea, f as FormSwitch, g as FormRoot, h as FormSelectItem, i as useFieldContext, j as FormButton, k as FormCombobox, l as FormTransfer, m as FormSelect, n as useFormState, o as FormWhen, p as FormSubmit, r as useFormContext, s as useWatch, t as Form, u as FormTimePicker, v as FormRadioItem, w as FormDescription, x as FormField, y as FormInput } from "./form-DTaVgDSV.mjs";
68
68
  import { t as useCopyToClipboard } from "./use-copy-to-clipboard-CWKWHLxI.mjs";
69
69
  import { n as useAdapter, t as FormAdapterProvider } from "./adapter-context-XT749tyT.mjs";
70
70
  import { InputWithAddons } from "./input-with-addons/index.mjs";
71
- import { t as TimePicker } from "./time-picker-DgHjdcMZ.mjs";
72
- import { t as Transfer } from "./transfer-91lwTOhX.mjs";
71
+ import { t as TimePicker } from "./time-picker-B_am4eAK.mjs";
72
+ import { t as Transfer } from "./transfer-DGUeAQUL.mjs";
73
73
  import { a as getResponsiveValue, c as GRID_COLUMNS, d as RESPONSIVE_MAP, i as getGutter, l as GRID_PREFIX, n as Row, o as registerMediaQuery, r as RowContext, s as GRID_BREAKPOINTS, t as Col, u as RESPONSIVE_ARRAY } from "./col-CYHIfPJq.mjs";
74
- import { t as GroupedTable } from "./grouped-table-32RO2v7U.mjs";
74
+ import { t as GroupedTable } from "./grouped-table-Dl6DclbV.mjs";
75
75
  import { t as InputNumber } from "./input-number-DF-bfIo8.mjs";
76
76
  import { a as logoStyles, i as LogoFlat, n as LogoStacked, r as LogoIcon, t as LogoText } from "./logo-text-B54YiEte.mjs";
77
77
  import { t as Logo } from "./logo-CkzKra6H.mjs";
78
- import { t as MoreActions } from "./more-actions-D9k1ILzT.mjs";
78
+ import { t as MoreActions } from "./more-actions-BlSOVwa8.mjs";
79
79
  import { configureProgress, startProgress, stopProgress } from "./nprogress/index.mjs";
80
80
  import { t as PageTitle } from "./page-title-Djl3LvPT.mjs";
81
81
  import { t as RichTextContent } from "./rich-text-content-BiIIowBU.mjs";
82
- import { n as useRichTextEditor, t as RichTextEditor } from "./rich-text-editor-ibngjhQV.mjs";
82
+ import { n as useRichTextEditor, t as RichTextEditor } from "./rich-text-editor-BUz06s-b.mjs";
83
83
  import { t as defineStepper } from "./stepper-ZipxpzWY.mjs";
84
- import { t as TagsInput } from "./tag-input-DAMY703F.mjs";
85
- import { _ as RedisTaskStorage, a as TaskPanelItem, b as createProjectMetadata, c as TaskPanelHeader, d as useCurrentScope, f as useTasksWithLabels, g as detectStorage, h as TaskQueue, i as TaskPanel, l as getContextLabel, m as TaskQueueProvider, n as TaskSummaryDialog, o as TaskPanelCounter, p as useTaskQueue, r as TaskQueueTrigger, s as TaskPanelActions, t as TaskQueueDropdown, u as matchesCurrentScope, v as LocalTaskStorage, x as createUserMetadata, y as createOrgMetadata } from "./task-queue-dropdown-BgQSGDwg.mjs";
86
- import { _ as getShortTimezoneDisplay, a as TimeRangePicker, b as utcToLocalInputString, c as getPresetByKey, d as TimezoneSelector, f as QuickRangesPanel, g as getDefaultTimezoneOptions, h as formatUtcForDisplay, i as formatTimeRangeDisplay, l as getPresetByShortcut, m as createTimezoneOption, n as formatDateForInput, o as DEFAULT_PRESETS, p as CustomRangePanel, r as formatSingleTimeDisplay, s as getDefaultPreset, t as toApiTimeRange, u as getPresetRange, v as localInputStringToUtc, x as zonedDateToUtcString, y as utcStringToZonedDate } from "./to-api-format-EZInfj0_.mjs";
84
+ import { t as TagsInput } from "./tag-input-a3ktkGrH.mjs";
85
+ import { _ as RedisTaskStorage, a as TaskPanelItem, b as createProjectMetadata, c as TaskPanelHeader, d as useCurrentScope, f as useTasksWithLabels, g as detectStorage, h as TaskQueue, i as TaskPanel, l as getContextLabel, m as TaskQueueProvider, n as TaskSummaryDialog, o as TaskPanelCounter, p as useTaskQueue, r as TaskQueueTrigger, s as TaskPanelActions, t as TaskQueueDropdown, u as matchesCurrentScope, v as LocalTaskStorage, x as createUserMetadata, y as createOrgMetadata } from "./task-queue-dropdown-DuCAAybs.mjs";
86
+ import { _ as getShortTimezoneDisplay, a as TimeRangePicker, b as utcToLocalInputString, c as getPresetByKey, d as TimezoneSelector, f as QuickRangesPanel, g as getDefaultTimezoneOptions, h as formatUtcForDisplay, i as formatTimeRangeDisplay, l as getPresetByShortcut, m as createTimezoneOption, n as formatDateForInput, o as DEFAULT_PRESETS, p as CustomRangePanel, r as formatSingleTimeDisplay, s as getDefaultPreset, t as toApiTimeRange, u as getPresetRange, v as localInputStringToUtc, x as zonedDateToUtcString, y as utcStringToZonedDate } from "./to-api-format-DyImCzCn.mjs";
87
87
  import { t as useDebounce } from "./hooks-WVJbyhCz.mjs";
88
88
  import { n as toUTCTimestampStartOfDay, t as toUTCTimestampEndOfDay } from "./utils-CPJ5MCfd.mjs";
89
89
  export { CustomRangePanel as AbsoluteRangePanel, CustomRangePanel, ActionRow, Alert, AlertDescription, AlertTitle, AppNavigation, Autocomplete, Autosearch, Avatar, AvatarFallback, AvatarImage, AvatarStack, Badge, Blockquote, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDatePicker, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardField, CardFieldLabel, CardFieldValue, CardFooter, CardHeader, CardSaveBar, CardTitle, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, ClientOnly, CloseIcon, Code, CodeEditor, CodeEditorTabs, Col, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, DEFAULT_DATE_FORMAT, DEFAULT_DEBOUNCE_MS, DEFAULT_LOADING_ROWS, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZES, DEFAULT_PRESETS, DEFAULT_SEARCH_DEBOUNCE_MS, DURATION, DataTable, DataTableColumnHeader, DataTableRowActions, DateTime, DateTimePicker, Dialog, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Dropzone, DropzoneContent, DropzoneEmptyState, EASE, EmptyContent, FileInputButton, Form, FormAdapterProvider, FormAutocomplete, FormAutosearch, FormButton, FormCheckbox, FormCombobox, FormCopyBox, FormCustom, FormDatePicker, FormDateTimePicker, FormDescription, FormDialog, FormError, FormField, FormFieldArray, FormInput, FormRadioGroup, FormRadioItem, FormRoot, FormSelect, FormSelectItem, FormSubmit, FormSwitch, FormTextarea, FormTimePicker, FormTransfer, FormWhen, GRID_BREAKPOINTS, GRID_COLUMNS, GRID_PREFIX, GroupedTable, HoverCard, HoverCardContent, HoverCardTrigger, Icon, InSheetContext, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputNumber, InputWithAddons, Label, Link, LinkButton, List, ListItem, LoaderOverlay, LocalTaskStorage, Logo, LogoFlat, LogoIcon, LogoStacked, LogoText, Map, MapCircle, MapCircleMarker, MapControlContainer, MapDrawCircle, MapDrawControl, MapDrawDelete, MapDrawEdit, MapDrawMarker, MapDrawPolygon, MapDrawPolyline, MapDrawRectangle, MapDrawUndo, MapFeatureGroup, MapFullscreenControl, MapLayerGroup, MapLayers, MapLayersControl, MapLocateControl, MapMarker, MapMarkerClusterGroup, MapPolygon, MapPolyline, MapPopup, MapRectangle, MapSearchControl, MapTileLayer, MapTooltip, MapZoomControl, MobileSheet, MoreActions, MultiSelect, NavMenu, NavMenuItem, PageTitle, Paragraph, PlaceAutocomplete, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, QuickRangesPanel, RESPONSIVE_ARRAY, RESPONSIVE_MAP, RadioGroup, RadioGroupItem, RedisTaskStorage, ResponsiveDropdown, ResponsivePopover, ResponsiveSheetTrigger, RichTextContent, RichTextEditor, Row, RowContext, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SettingsNav, SettingsNavItem, SettingsNavLabel, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, 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, Spinner, SpinnerIcon, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsLinkTrigger, TabsList, TabsTrigger, TagsInput, TaskPanel, TaskPanelActions, TaskPanelCounter, TaskPanelHeader, TaskPanelItem, TaskQueue, TaskQueueDropdown, TaskQueueProvider, TaskQueueTrigger, TaskSummaryDialog, Text, Textarea, ThemeProvider, ThemeScript, TimePicker, TimeRangePicker, TimezoneSelector, Title, Toaster, Tooltip, Transfer, VisuallyHidden, avatarStackVariants, badgeVariants, buttonGroupVariants, buttonVariants, cn, configureProgress, createCodeEditorSchema, createDataTableStore, createOrgMetadata, createProjectMetadata, createSelectionColumn, createTimezoneOption, createUserMetadata, dataTableFeatures, defaultAutosearchValue, defineStepper, detectStorage, findItemByHref, formatAbsoluteDate, formatCombinedDate, formatDateForInput, formatJson, formatRelativeDate, formatSingleTimeDisplay, formatTimeRangeDisplay, formatTimezoneDate, formatTimezoneLabel, formatUTCDate, formatUtcForDisplay, formatYaml, getBrowserTimezone, getContextLabel, getDefaultPreset, getDefaultTimezoneOptions, getGutter, getPresetByKey, getPresetByShortcut, getPresetRange, getResponsiveValue, getShortTimezoneDisplay, getTimestamp, getTimezoneAbbreviation, getTimezoneOffset, hasActiveDescendant, isNavItemActive, isValidJson, isValidYaml, jsonSchema, jsonToYaml, localInputStringToUtc, logoStyles, matchesCurrentScope, normalizePath, paragraphVariants, parseDate, registerMediaQuery, resolvePath, rowMatchesSearch, startProgress, stopProgress, textVariants, titleVariants, toApiTimeRange, toUTCTimestampEndOfDay, toUTCTimestampStartOfDay, toast, useAdapter, useBreakpoint, useControllableState, useCopyToClipboard, useCurrentScope, useDataTableFilters, useDataTableInlineContents, useDataTableLoading, useDataTablePagination, useDataTableRows, useDataTableSearch, useDataTableSelection, useDataTableSorting, useDebounce, useDebouncedSearchInput, useField, useFieldContext, useFormContext, useFormState, useInSheet, useLeaflet, useNuqsAdapter, useRichTextEditor, useSidebar, useTaskQueue, useTasksWithLabels, useTheme, useToast, useWatch, useWatchAll, utcStringToZonedDate, utcToLocalInputString, yamlSchema, yamlToJson, zonedDateToUtcString };
@@ -3,13 +3,21 @@ import { t as ButtonGroup } from "./button-group-C3GKo-0p.mjs";
3
3
  import { t as Button } from "./button-C57mkFkS.mjs";
4
4
  import { i as CommandGroup, o as CommandItem, r as CommandEmpty, s as CommandList, t as Command } from "./command-B0be-zU5.mjs";
5
5
  import { i as InputGroupInput, n as InputGroupAddon, t as InputGroup } from "./input-group-CCzvJIZM.mjs";
6
- import { t as Spinner } from "./spinner-DjEpx6Q3.mjs";
7
6
  import { a as DropdownMenuRadioGroup, c as DropdownMenuTrigger, i as DropdownMenuLabel, n as DropdownMenuCheckboxItem, o as DropdownMenuRadioItem, r as DropdownMenuContent, s as DropdownMenuSeparator, t as DropdownMenu } from "./dropdown-menu-CjgTr8Ab.mjs";
8
- import { CircleIcon, LayersIcon, LoaderCircleIcon, MapPinIcon, MaximizeIcon, MinimizeIcon, MinusIcon, NavigationIcon, PenLineIcon, PentagonIcon, PlusIcon, SearchIcon, SquareIcon, Trash2Icon, Undo2Icon, WaypointsIcon } from "lucide-react";
7
+ import { CircleIcon, LayersIcon, Loader2Icon, LoaderCircleIcon, MapPinIcon, MaximizeIcon, MinimizeIcon, MinusIcon, NavigationIcon, PenLineIcon, PentagonIcon, PlusIcon, SearchIcon, SquareIcon, Trash2Icon, Undo2Icon, WaypointsIcon } from "lucide-react";
9
8
  import * as React from "react";
10
9
  import { Suspense, createContext, lazy, useContext, useEffect, useRef, useState } from "react";
11
10
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
12
11
  import { renderToString } from "react-dom/server.browser";
12
+ // ../shadcn/ui/spinner.tsx
13
+ function Spinner({ className, ...props }) {
14
+ return /* @__PURE__ */ jsx(Loader2Icon, {
15
+ role: "status",
16
+ "aria-label": "Loading",
17
+ className: cn("size-4 animate-spin", className),
18
+ ...props
19
+ });
20
+ }
13
21
  // ../shadcn/ui/place-autocomplete.tsx
14
22
  function formatAddress(properties) {
15
23
  const parts = [];
@@ -1 +1 @@
1
- export { t as LoaderOverlay } from "../loader-overlay-JvB8IQo3.mjs";
1
+ export { t as LoaderOverlay } from "../loader-overlay-DP0pvHuG.mjs";
@@ -1,5 +1,5 @@
1
1
  import { t as cn } from "./utils-CTIuhCOs.mjs";
2
- import { t as SpinnerIcon } from "./spinner.icon-D0SKuGFG.mjs";
2
+ import { t as SpinnerIcon } from "./spinner.icon-BiUnMAxw.mjs";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  // src/components/base/loader-overlay/loader-overlay.tsx
5
5
  function LoaderOverlay({ message, className }) {
@@ -1,18 +1,19 @@
1
1
  import { t as cn } from "../utils-CTIuhCOs.mjs";
2
2
  import { Skeleton } from "../skeleton/index.mjs";
3
- import { t as Badge } from "../badge-D7A6GfWn.mjs";
3
+ import { Badge } from "../badge/index.mjs";
4
4
  import { t as useBreakpoint } from "../use-breakpoint-zY_JYINK.mjs";
5
5
  import { t as useCopyToClipboard } from "../use-copy-to-clipboard-CWKWHLxI.mjs";
6
- import { t as Button } from "../button-Dj6cKrWj.mjs";
6
+ import { t as Button } from "../button-Cn4KagBO.mjs";
7
7
  import { t as Sheet } from "../sheet-DEpEJ_Rk.mjs";
8
8
  import { t as Icon } from "../icon-wrapper-CIk2th6R.mjs";
9
+ import { t as CopyStateIcon } from "../copy-state-icon-DMvXXsZm.mjs";
9
10
  import { c as getBrowserTimezone, t as DateTime, u as getTimezoneAbbreviation } from "../date-time-BBRVM9qb.mjs";
10
- import { t as Checkbox } from "../checkbox-CNljVnKj.mjs";
11
- import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../collapsible/index.mjs";
12
- import { t as DateTimeRangePicker } from "../date-time-range-picker-RZX4CS4b.mjs";
11
+ import { t as Checkbox } from "../checkbox-BAo5sbHk.mjs";
12
+ import { n as CollapsibleContent, r as CollapsibleTrigger, t as Collapsible } from "../collapsible-B-KP3JZ-.mjs";
13
+ import { t as DateTimeRangePicker } from "../date-time-range-picker-yy1Acntn.mjs";
13
14
  import { TableBody, TableCell, TableHead, TableHeader, TableRow } from "../table/index.mjs";
14
15
  import { t as Input } from "../input-DsT5qkJn.mjs";
15
- import { Bot, ChevronDown, ChevronUp, Clock, Copy, Download, HelpCircle, Inbox, Monitor, RefreshCw, Search, SlidersHorizontal, Smartphone, Tablet, TriangleAlert, X } from "lucide-react";
16
+ import { Bot, ChevronDown, ChevronUp, Clock, Download, HelpCircle, Inbox, Monitor, RefreshCw, Search, SlidersHorizontal, Smartphone, Tablet, TriangleAlert, X } from "lucide-react";
16
17
  import { createContext, memo, use, useCallback, useEffect, useMemo, useRef, useState } from "react";
17
18
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
18
19
  import { AnimatePresence, motion, useReducedMotion } from "motion/react";
@@ -688,9 +689,29 @@ function keyedParams(params) {
688
689
  };
689
690
  });
690
691
  }
692
+ /**
693
+ * Icon button that copies `text` and shows a check until the copied state
694
+ * resets. Each button owns its hook so only the one clicked flips.
695
+ */
696
+ function LogsCopyButton({ text, label, small = false }) {
697
+ const [copied, copy] = useCopyToClipboard();
698
+ return /* @__PURE__ */ jsx(Button, {
699
+ type: "secondary",
700
+ theme: "borderless",
701
+ size: "icon",
702
+ className: small ? "-my-1 size-6" : void 0,
703
+ "aria-label": label,
704
+ onClick: () => copy(text, { withToast: true }),
705
+ children: /* @__PURE__ */ jsx(CopyStateIcon, {
706
+ copied,
707
+ size: small ? 14 : 16,
708
+ strokeWidth: 1,
709
+ absoluteStrokeWidth: true
710
+ })
711
+ });
712
+ }
691
713
  const DetailBody = memo(({ showClose = true }) => {
692
714
  const { selectedEntry, selectPrevious, selectNext, setSelectedId } = useLogs();
693
- const [, copy] = useCopyToClipboard();
694
715
  if (!selectedEntry) return null;
695
716
  const parsed = parseLogLine(selectedEntry.line, selectedEntry.labels);
696
717
  const displayLine = parsed.kind === "http" && !selectedEntry.line.trim() ? formatHttpLogLine(parsed) : selectedEntry.line;
@@ -729,13 +750,9 @@ const DetailBody = memo(({ showClose = true }) => {
729
750
  onClick: selectNext,
730
751
  children: /* @__PURE__ */ jsx(Icon, { icon: ChevronDown })
731
752
  }),
732
- /* @__PURE__ */ jsx(Button, {
733
- type: "secondary",
734
- theme: "borderless",
735
- size: "icon",
736
- "aria-label": "Copy log line",
737
- onClick: () => copy(displayLine, { withToast: true }),
738
- children: /* @__PURE__ */ jsx(Icon, { icon: Copy })
753
+ /* @__PURE__ */ jsx(LogsCopyButton, {
754
+ text: displayLine,
755
+ label: "Copy log line"
739
756
  }),
740
757
  showClose && /* @__PURE__ */ jsx(Button, {
741
758
  type: "secondary",
@@ -827,17 +844,10 @@ const DetailBody = memo(({ showClose = true }) => {
827
844
  children: [/* @__PURE__ */ jsx("span", {
828
845
  className: "text-muted-foreground text-3xs font-medium",
829
846
  children: "Client"
830
- }), /* @__PURE__ */ jsx(Button, {
831
- type: "secondary",
832
- theme: "borderless",
833
- size: "icon",
834
- className: "-my-1 size-6",
835
- "aria-label": "Copy user agent",
836
- onClick: () => copy(client.raw, { withToast: true }),
837
- children: /* @__PURE__ */ jsx(Icon, {
838
- icon: Copy,
839
- size: 14
840
- })
847
+ }), /* @__PURE__ */ jsx(LogsCopyButton, {
848
+ text: client.raw,
849
+ label: "Copy user agent",
850
+ small: true
841
851
  })]
842
852
  }),
843
853
  /* @__PURE__ */ jsxs("div", {
@@ -873,17 +883,10 @@ const DetailBody = memo(({ showClose = true }) => {
873
883
  children: [/* @__PURE__ */ jsx("span", {
874
884
  className: "text-muted-foreground text-3xs font-medium",
875
885
  children: "Search params"
876
- }), /* @__PURE__ */ jsx(Button, {
877
- type: "secondary",
878
- theme: "borderless",
879
- size: "icon",
880
- className: "-my-1 size-6",
881
- "aria-label": "Copy search params",
882
- onClick: () => copy(`?${request.search}`, { withToast: true }),
883
- children: /* @__PURE__ */ jsx(Icon, {
884
- icon: Copy,
885
- size: 14
886
- })
886
+ }), /* @__PURE__ */ jsx(LogsCopyButton, {
887
+ text: `?${request.search}`,
888
+ label: "Copy search params",
889
+ small: true
887
890
  })]
888
891
  }), /* @__PURE__ */ jsx("dl", {
889
892
  className: "flex flex-wrap gap-1.5",
@@ -1 +1 @@
1
- export { k as Map, b as MapCircle, x as MapCircleMarker, h as MapControlContainer, o as MapDrawCircle, s as MapDrawControl, c as MapDrawDelete, l as MapDrawEdit, u as MapDrawMarker, d as MapDrawPolygon, f as MapDrawPolyline, p as MapDrawRectangle, m as MapDrawUndo, t as MapFeatureGroup, g as MapFullscreenControl, n as MapLayerGroup, r as MapLayers, i as MapLayersControl, _ as MapLocateControl, S as MapMarker, C as MapMarkerClusterGroup, w as MapPolygon, T as MapPolyline, E as MapPopup, D as MapRectangle, v as MapSearchControl, a as MapTileLayer, O as MapTooltip, y as MapZoomControl, j as PlaceAutocomplete, A as useLeaflet } from "../layers-XEND2WKv.mjs";
1
+ export { k as Map, b as MapCircle, x as MapCircleMarker, h as MapControlContainer, o as MapDrawCircle, s as MapDrawControl, c as MapDrawDelete, l as MapDrawEdit, u as MapDrawMarker, d as MapDrawPolygon, f as MapDrawPolyline, p as MapDrawRectangle, m as MapDrawUndo, t as MapFeatureGroup, g as MapFullscreenControl, n as MapLayerGroup, r as MapLayers, i as MapLayersControl, _ as MapLocateControl, S as MapMarker, C as MapMarkerClusterGroup, w as MapPolygon, T as MapPolyline, E as MapPopup, D as MapRectangle, v as MapSearchControl, a as MapTileLayer, O as MapTooltip, y as MapZoomControl, j as PlaceAutocomplete, A as useLeaflet } from "../layers-DLUbkJtt.mjs";
@@ -1,3 +1,3 @@
1
1
  import { t as ActionRow } from "../action-row-BEzE9x37.mjs";
2
- import { t as MoreActions } from "../more-actions-D9k1ILzT.mjs";
2
+ import { t as MoreActions } from "../more-actions-BlSOVwa8.mjs";
3
3
  export { ActionRow, MoreActions };
@@ -1,4 +1,4 @@
1
- import { t as Button } from "./button-Dj6cKrWj.mjs";
1
+ import { t as Button } from "./button-Cn4KagBO.mjs";
2
2
  import { t as Tooltip } from "./tooltip-OIySjJWW.mjs";
3
3
  import { t as cn } from "./utils-CTIuhCOs.mjs";
4
4
  import { t as ResponsiveDropdown } from "./responsive-dropdown-DsWgpE_i.mjs";
@@ -0,0 +1,52 @@
1
+ import { n as EASE, t as DURATION } from "./motion-DOrRbLmy.mjs";
2
+ import { Badge } from "./badge/index.mjs";
3
+ import { motion, useReducedMotion } from "motion/react";
4
+ // src/components/features/_shared/motion-chip.tsx
5
+ /** `Badge` as a Motion component, so chips can enter, exit and reflow. */
6
+ const MotionBadge = motion.create(Badge);
7
+ const ENTER = {
8
+ duration: DURATION.fast,
9
+ ease: EASE.out
10
+ };
11
+ const EXIT = {
12
+ duration: .1,
13
+ ease: EASE.out
14
+ };
15
+ /** Neighbours slide into a removed chip's gap a touch slower than it fades. */
16
+ const REFLOW = {
17
+ duration: .2,
18
+ ease: EASE.out
19
+ };
20
+ /**
21
+ * Motion props for a chip in a wrapping list, for use with `MotionBadge`
22
+ * inside `<AnimatePresence initial={false} mode="popLayout">`.
23
+ *
24
+ * A chip scales up slightly as it fades in, and fades out a little faster
25
+ * when removed. `popLayout` takes the leaving chip out of flow straight away,
26
+ * and `layout="position"` slides the chips after it into the gap rather than
27
+ * snapping. The list needs `position: relative` for `popLayout` to place the
28
+ * leaving chip. Under reduced motion chips only fade and nothing slides.
29
+ */
30
+ function useChipMotion() {
31
+ const reduceMotion = Boolean(useReducedMotion());
32
+ const scale = reduceMotion ? 1 : .85;
33
+ return {
34
+ initial: {
35
+ opacity: 0,
36
+ scale
37
+ },
38
+ animate: {
39
+ opacity: 1,
40
+ scale: 1,
41
+ transition: ENTER
42
+ },
43
+ exit: {
44
+ opacity: 0,
45
+ scale,
46
+ transition: EXIT
47
+ },
48
+ transition: { layout: REFLOW },
49
+ layout: reduceMotion ? false : "position"
50
+ };
51
+ }
52
+ export { useChipMotion as n, MotionBadge as t };
@@ -1 +1 @@
1
- export { t as MultiSelect } from "../multi-select-BUgx6VZF.mjs";
1
+ export { t as MultiSelect } from "../multi-select-C2cBrqXl.mjs";
@@ -1,14 +1,15 @@
1
1
  import { t as cn } from "./utils-CTIuhCOs.mjs";
2
2
  import { t as useControllableState } from "./use-controllable-state-DLeVgbAb.mjs";
3
- import { n as OptionList, t as useOptionPicker } from "./use-option-picker-CBMU72LU.mjs";
3
+ import { n as OptionList, t as useOptionPicker } from "./use-option-picker-DXY2SNnT.mjs";
4
4
  import { t as ResponsivePopover } from "./responsive-popover-DJYd8lOK.mjs";
5
5
  import { t as Separator } from "./separator-DNiiN2BN.mjs";
6
- import { t as LoaderOverlay } from "./loader-overlay-JvB8IQo3.mjs";
7
- import { t as Badge } from "./badge-D7A6GfWn.mjs";
6
+ import { t as LoaderOverlay } from "./loader-overlay-DP0pvHuG.mjs";
7
+ import { n as useChipMotion, t as MotionBadge } from "./motion-chip-BczV7spP.mjs";
8
8
  import { cva } from "class-variance-authority";
9
9
  import { CheckIcon, ChevronDown, WandSparkles, XCircle, XIcon } from "lucide-react";
10
10
  import * as React from "react";
11
11
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
12
+ import { AnimatePresence } from "motion/react";
12
13
  // src/components/features/multi-select/multi-select-options.tsx
13
14
  /**
14
15
  * Presentational popover command list for the multi-select: the searchable
@@ -88,52 +89,59 @@ function IconAction({ label, onActivate, className, children }) {
88
89
  function SelectedBadgeList({ selectedOptions, maxCount, variant, badgeClassName, clickableBadges, isAnimating, animation, onRemove, onClearExtra, onClearAll, onBadgeClick }) {
89
90
  const visibleOptions = selectedOptions.slice(0, maxCount === -1 ? void 0 : maxCount);
90
91
  const overflowCount = maxCount === -1 ? 0 : selectedOptions.length - maxCount;
92
+ const chipMotion = useChipMotion();
91
93
  return /* @__PURE__ */ jsxs("div", {
92
94
  className: "flex w-full items-center justify-between",
93
- children: [/* @__PURE__ */ jsxs("div", {
94
- className: "flex flex-wrap items-center gap-2",
95
- children: [visibleOptions.map((option) => {
96
- const IconComponent = option.icon;
97
- return /* @__PURE__ */ jsxs(Badge, {
98
- className: cn(multiSelectVariants({ variant }), "truncate", isAnimating && "animate-bounce", clickableBadges && "cursor-pointer", badgeClassName),
99
- style: { animationDuration: `${animation}s` },
100
- onClick: (event) => {
101
- if (clickableBadges) {
102
- event.stopPropagation();
103
- event.preventDefault();
104
- onBadgeClick?.(option);
105
- }
106
- },
107
- children: [
108
- IconComponent && /* @__PURE__ */ jsx(IconComponent, { className: "text-muted-foreground size-3" }),
109
- /* @__PURE__ */ jsx("span", {
110
- className: "max-w-[120px] truncate",
111
- children: option.label
112
- }),
113
- /* @__PURE__ */ jsx(IconAction, {
114
- label: `Remove ${option.label}`,
115
- onActivate: () => onRemove(option.value),
116
- className: "text-muted-foreground ml-1",
117
- children: /* @__PURE__ */ jsx(XCircle, {
118
- className: "size-3",
119
- "aria-hidden": "true"
95
+ children: [/* @__PURE__ */ jsx("div", {
96
+ className: "relative flex flex-wrap items-center gap-2",
97
+ children: /* @__PURE__ */ jsxs(AnimatePresence, {
98
+ initial: false,
99
+ mode: "popLayout",
100
+ children: [visibleOptions.map((option) => {
101
+ const IconComponent = option.icon;
102
+ return /* @__PURE__ */ jsxs(MotionBadge, {
103
+ ...chipMotion,
104
+ className: cn(multiSelectVariants({ variant }), "truncate", isAnimating && "animate-bounce", clickableBadges && "cursor-pointer", badgeClassName),
105
+ style: { animationDuration: `${animation}s` },
106
+ onClick: (event) => {
107
+ if (clickableBadges) {
108
+ event.stopPropagation();
109
+ event.preventDefault();
110
+ onBadgeClick?.(option);
111
+ }
112
+ },
113
+ children: [
114
+ IconComponent && /* @__PURE__ */ jsx(IconComponent, { className: "text-muted-foreground size-3" }),
115
+ /* @__PURE__ */ jsx("span", {
116
+ className: "max-w-[120px] truncate",
117
+ children: option.label
118
+ }),
119
+ /* @__PURE__ */ jsx(IconAction, {
120
+ label: `Remove ${option.label}`,
121
+ onActivate: () => onRemove(option.value),
122
+ className: "text-muted-foreground ml-1",
123
+ children: /* @__PURE__ */ jsx(XCircle, {
124
+ className: "size-3",
125
+ "aria-hidden": "true"
126
+ })
120
127
  })
128
+ ]
129
+ }, option.value);
130
+ }), overflowCount > 0 && /* @__PURE__ */ jsxs(MotionBadge, {
131
+ ...chipMotion,
132
+ className: cn(multiSelectVariants({ variant }), "text-muted-foreground", isAnimating && "animate-bounce"),
133
+ style: { animationDuration: `${animation}s` },
134
+ children: [`+ ${overflowCount} more`, /* @__PURE__ */ jsx(IconAction, {
135
+ label: "Clear extra selected",
136
+ onActivate: onClearExtra,
137
+ className: "text-muted-foreground ml-1",
138
+ children: /* @__PURE__ */ jsx(XCircle, {
139
+ className: "size-3",
140
+ "aria-hidden": "true"
121
141
  })
122
- ]
123
- }, option.value);
124
- }), overflowCount > 0 && /* @__PURE__ */ jsxs(Badge, {
125
- className: cn(multiSelectVariants({ variant }), "text-muted-foreground", isAnimating && "animate-bounce"),
126
- style: { animationDuration: `${animation}s` },
127
- children: [`+ ${overflowCount} more`, /* @__PURE__ */ jsx(IconAction, {
128
- label: "Clear extra selected",
129
- onActivate: onClearExtra,
130
- className: "text-muted-foreground ml-1",
131
- children: /* @__PURE__ */ jsx(XCircle, {
132
- className: "size-3",
133
- "aria-hidden": "true"
134
- })
135
- })]
136
- })]
142
+ })]
143
+ }, "overflow")]
144
+ })
137
145
  }), /* @__PURE__ */ jsxs("div", {
138
146
  className: "flex items-center justify-between",
139
147
  children: [
@@ -1,3 +1,3 @@
1
- import { A as formatInTimezone, B as isDateBearingMode, C as PickerClear, D as PickerCalendar, E as PickerContent, F as zonedDateToIso, H as isTimeBearingMode, I as ALLOWED_STEPS, L as DATE_BEARING_MODES, M as getBrowserTimezone, N as getTimezoneOffset, O as PickerContext, P as isoToZonedDate, R as RANGE_MODES, S as PickerCancel, T as PickerReset, V as isRangeMode, _ as parseTimeString, a as PickerTimezoneIndicator, b as PickerPresets, d as DATE_PRESETS, f as getDefaultPresets, g as isValidTimeString, h as formatTimeLabel, i as PickerTrigger, j as formatTimezoneLabel, k as usePickerContext, l as usePresets, m as dateToYYYYMMDD, o as PickerTimeInput, p as usePickerState, r as formatPickerValue, s as useTimeSlots, t as DateTimeRangePicker, u as DATETIME_PRESETS, v as resolveCommit, w as PickerFooter, x as PickerApply, y as useKeyboardShortcuts, z as TIME_BEARING_MODES } from "../date-time-range-picker-RZX4CS4b.mjs";
2
- import { a as DateRangePicker, c as getDaysDifference, d as isSameDateRange, f as isSameStringRange, i as DateRangeTimePicker, l as isRangeValid, m as PickerTimezoneSelect, n as TimePicker, o as DatePicker, p as Picker, r as DateTimePicker, s as clampRange, t as TimeRangePicker, u as isSameDate } from "../picker-C0h30DHf.mjs";
1
+ import { A as formatInTimezone, B as isDateBearingMode, C as PickerClear, D as PickerCalendar, E as PickerContent, F as zonedDateToIso, H as isTimeBearingMode, I as ALLOWED_STEPS, L as DATE_BEARING_MODES, M as getBrowserTimezone, N as getTimezoneOffset, O as PickerContext, P as isoToZonedDate, R as RANGE_MODES, S as PickerCancel, T as PickerReset, V as isRangeMode, _ as parseTimeString, a as PickerTimezoneIndicator, b as PickerPresets, d as DATE_PRESETS, f as getDefaultPresets, g as isValidTimeString, h as formatTimeLabel, i as PickerTrigger, j as formatTimezoneLabel, k as usePickerContext, l as usePresets, m as dateToYYYYMMDD, o as PickerTimeInput, p as usePickerState, r as formatPickerValue, s as useTimeSlots, t as DateTimeRangePicker, u as DATETIME_PRESETS, v as resolveCommit, w as PickerFooter, x as PickerApply, y as useKeyboardShortcuts, z as TIME_BEARING_MODES } from "../date-time-range-picker-yy1Acntn.mjs";
2
+ import { a as DateRangePicker, c as getDaysDifference, d as isSameDateRange, f as isSameStringRange, i as DateRangeTimePicker, l as isRangeValid, m as PickerTimezoneSelect, n as TimePicker, o as DatePicker, p as Picker, r as DateTimePicker, s as clampRange, t as TimeRangePicker, u as isSameDate } from "../picker-DC3GErYg.mjs";
3
3
  export { ALLOWED_STEPS, DATETIME_PRESETS, DATE_BEARING_MODES, DATE_PRESETS, DatePicker, DateRangePicker, DateRangeTimePicker, DateTimePicker, DateTimeRangePicker, Picker, PickerApply, PickerCalendar, PickerCancel, PickerClear, PickerContent, PickerContext, PickerFooter, PickerPresets, PickerReset, PickerTimeInput, PickerTimezoneIndicator, PickerTimezoneSelect, PickerTrigger, RANGE_MODES, TIME_BEARING_MODES, TimePicker, TimeRangePicker, clampRange, dateToYYYYMMDD, formatInTimezone, formatPickerValue, formatTimeLabel, formatTimezoneLabel, getBrowserTimezone, getDaysDifference, getDefaultPresets, getTimezoneOffset, isDateBearingMode, isRangeMode, isRangeValid, isSameDate, isSameDateRange, isSameStringRange, isTimeBearingMode, isValidTimeString, isoToZonedDate, parseTimeString, resolveCommit, useKeyboardShortcuts, usePickerContext, usePickerState, usePresets, useTimeSlots, zonedDateToIso };
@@ -1,6 +1,6 @@
1
1
  import { t as cn } from "./utils-CTIuhCOs.mjs";
2
2
  import { i as SelectItem, l as SelectTrigger, n as SelectContent, t as Select, u as SelectValue } from "./select-jgK6wyXj.mjs";
3
- import { C as PickerClear, D as PickerCalendar, E as PickerContent, F as zonedDateToIso, H as isTimeBearingMode, P as isoToZonedDate, S as PickerCancel, T as PickerReset, _ as parseTimeString, a as PickerTimezoneIndicator, b as PickerPresets, c as Picker$1, i as PickerTrigger, k as usePickerContext, n as DefaultFooter, o as PickerTimeInput, r as formatPickerValue, w as PickerFooter, x as PickerApply } from "./date-time-range-picker-RZX4CS4b.mjs";
3
+ import { C as PickerClear, D as PickerCalendar, E as PickerContent, F as zonedDateToIso, H as isTimeBearingMode, P as isoToZonedDate, S as PickerCancel, T as PickerReset, _ as parseTimeString, a as PickerTimezoneIndicator, b as PickerPresets, c as Picker$1, i as PickerTrigger, k as usePickerContext, n as DefaultFooter, o as PickerTimeInput, r as formatPickerValue, w as PickerFooter, x as PickerApply } from "./date-time-range-picker-yy1Acntn.mjs";
4
4
  import { Clock, Globe } from "lucide-react";
5
5
  import { useEffect, useState } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- export { t as RadioGroup, n as RadioGroupItem } from "../radio-group-0RxTmRnF.mjs";
1
+ export { t as RadioGroup, n as RadioGroupItem } from "../radio-group-Boxi2hm0.mjs";
@@ -0,0 +1,83 @@
1
+ import { t as cn } from "./utils-CTIuhCOs.mjs";
2
+ import { n as EASE } from "./motion-DOrRbLmy.mjs";
3
+ import * as React from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { motion, useReducedMotion } from "motion/react";
6
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
7
+ // src/components/base/radio-group/radio-group.tsx
8
+ /**
9
+ * The selected value, mirrored from Radix so each item can animate its dot in
10
+ * and out. `null` means there is no datum `RadioGroup` above the item (it was
11
+ * placed in a bare Radix root), in which case the item falls back to Radix's
12
+ * own mount/unmount and does not animate.
13
+ */
14
+ const RadioGroupValueContext = React.createContext(null);
15
+ function RadioGroup({ ref, className, value: valueProp, defaultValue, onValueChange, ...props }) {
16
+ const [uncontrolled, setUncontrolled] = React.useState(defaultValue);
17
+ const value = valueProp ?? uncontrolled;
18
+ const handleValueChange = React.useCallback((next) => {
19
+ if (valueProp === void 0) setUncontrolled(next);
20
+ onValueChange?.(next);
21
+ }, [onValueChange, valueProp]);
22
+ return /* @__PURE__ */ jsx(RadioGroupValueContext, {
23
+ value,
24
+ children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Root, {
25
+ ref,
26
+ "data-slot": "radio-group",
27
+ className: cn("grid gap-3", className),
28
+ value: valueProp,
29
+ defaultValue,
30
+ onValueChange: handleValueChange,
31
+ ...props
32
+ })
33
+ });
34
+ }
35
+ RadioGroup.displayName = "RadioGroup";
36
+ const DOT_IN = {
37
+ type: "spring",
38
+ visualDuration: .2,
39
+ bounce: .35
40
+ };
41
+ const DOT_OUT = {
42
+ duration: .1,
43
+ ease: EASE.out
44
+ };
45
+ /**
46
+ * RadioGroupItem renders the Radix primitive directly (not the shadcn wrapper)
47
+ * so the dot can stay mounted and animate out as well as in. The dot pops in
48
+ * from half size with a small spring and fades out quickly when another option
49
+ * takes the selection. Under reduced motion it only fades.
50
+ */
51
+ function RadioGroupItem({ ref, className, value, ...props }) {
52
+ const groupValue = React.use(RadioGroupValueContext);
53
+ const reduceMotion = Boolean(useReducedMotion());
54
+ const animated = groupValue !== null;
55
+ const visible = animated ? groupValue === value : true;
56
+ return /* @__PURE__ */ jsx(RadioGroupPrimitive.Item, {
57
+ ref,
58
+ value,
59
+ "data-slot": "radio-group-item",
60
+ className: cn("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", "transition-[color,box-shadow,transform] duration-[var(--duration-fast)] ease-out active:scale-[0.92] disabled:active:scale-100", className),
61
+ ...props,
62
+ children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, {
63
+ forceMount: animated ? true : void 0,
64
+ "data-slot": "radio-group-indicator",
65
+ className: "flex size-full items-center justify-center",
66
+ children: /* @__PURE__ */ jsx(motion.span, {
67
+ "aria-hidden": true,
68
+ className: "bg-primary size-2 rounded-full",
69
+ initial: false,
70
+ animate: visible ? {
71
+ scale: 1,
72
+ opacity: 1
73
+ } : {
74
+ scale: reduceMotion ? 1 : .5,
75
+ opacity: 0
76
+ },
77
+ transition: visible && !reduceMotion ? DOT_IN : DOT_OUT
78
+ })
79
+ })
80
+ });
81
+ }
82
+ RadioGroupItem.displayName = "RadioGroupItem";
83
+ export { RadioGroupItem as n, RadioGroup as t };