@datum-cloud/datum-ui 2.4.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/app-navigation/index.mjs +2 -2
  2. package/dist/{app-navigation--tEBCrfl.mjs → app-navigation-DhPaPFnN.mjs} +3 -7
  3. package/dist/assistant/index.mjs +15 -6
  4. package/dist/autocomplete/index.mjs +1 -1
  5. package/dist/{autocomplete-DZ_HSBak.mjs → autocomplete-BxtzndxZ.mjs} +1 -1
  6. package/dist/autosearch/index.mjs +3 -3
  7. package/dist/avatar-stack/index.mjs +1 -1
  8. package/dist/{avatar-stack-BZK6zUJr.mjs → avatar-stack-BUcsjhA6.mjs} +1 -1
  9. package/dist/button/index.mjs +2 -2
  10. package/dist/{button-H_8dI-Ib.mjs → button-CDPui_Ov.mjs} +1 -1
  11. package/dist/{button-A1qTjZ8U.mjs → button-DoMqfQLu.mjs} +1 -1
  12. package/dist/{calendar-date-picker-ynSGADfR.mjs → calendar-date-picker-bpTUcGu_.mjs} +1 -1
  13. package/dist/components/base/hover-card/hover-card.d.ts +13 -0
  14. package/dist/components/base/hover-card/index.d.ts +1 -1
  15. package/dist/components/base/popover/index.d.ts +1 -1
  16. package/dist/components/base/popover/popover.d.ts +15 -0
  17. package/dist/components/features/logs/components/columns.d.ts +15 -0
  18. package/dist/components/features/logs/components/root.d.ts +1 -1
  19. package/dist/components/features/logs/components/status-badge.d.ts +5 -0
  20. package/dist/components/features/logs/components/timeline.d.ts +3 -0
  21. package/dist/components/features/logs/fixtures/index.d.ts +2 -0
  22. package/dist/components/features/logs/index.d.ts +3 -2
  23. package/dist/components/features/logs/logs.d.ts +2 -0
  24. package/dist/components/features/logs/types.d.ts +51 -3
  25. package/dist/components/features/logs/utils/detail-width.d.ts +3 -0
  26. package/dist/components/features/logs/utils/facets.d.ts +7 -0
  27. package/dist/components/features/logs/utils/format-timestamp.d.ts +4 -0
  28. package/dist/components/features/logs/utils/histogram.d.ts +16 -0
  29. package/dist/components/features/logs/utils/host.d.ts +7 -0
  30. package/dist/components/features/logs/utils/index.d.ts +6 -4
  31. package/dist/components/features/logs/utils/parse-log-line.d.ts +17 -3
  32. package/dist/components/features/logs/utils/time-range.d.ts +19 -0
  33. package/dist/data-table/index.mjs +1 -1
  34. package/dist/{data-table-ClfRpyHq.mjs → data-table-BaWOHdZX.mjs} +6 -6
  35. package/dist/date-picker/index.mjs +3 -3
  36. package/dist/date-time/index.mjs +1 -1
  37. package/dist/{date-time-CA-09lnw.mjs → date-time-lZdefM4H.mjs} +2 -2
  38. package/dist/date-time-picker/index.mjs +1 -1
  39. package/dist/{date-time-picker-BzcHrf-A.mjs → date-time-picker-Bd7qSZVr.mjs} +1 -1
  40. package/dist/{date-time-range-picker-Dog33Ry0.mjs → date-time-range-picker-DlFTh3DF.mjs} +14 -5
  41. package/dist/dialog/index.mjs +1 -1
  42. package/dist/{dialog-N2pkQIc4.mjs → dialog-Gu70fban.mjs} +1 -1
  43. package/dist/dropdown/index.mjs +1 -1
  44. package/dist/{dropdown-B0znsOlu.mjs → dropdown-Xvduih96.mjs} +6 -6
  45. package/dist/dropzone/index.mjs +1 -1
  46. package/dist/{dropzone-DrWVd7OI.mjs → dropzone-ihksfjN2.mjs} +1 -1
  47. package/dist/empty-content/index.mjs +1 -1
  48. package/dist/{empty-content-DvaelFpJ.mjs → empty-content-CmuVcU0P.mjs} +2 -2
  49. package/dist/form/index.mjs +1 -1
  50. package/dist/form/stepper/index.mjs +1 -1
  51. package/dist/{form-BhBsoMFA.mjs → form-BKxvdIKB.mjs} +10 -10
  52. package/dist/grouped-table/index.mjs +1 -1
  53. package/dist/{grouped-table-Bb9KoI1e.mjs → grouped-table-DWtEx18V.mjs} +4 -8
  54. package/dist/hover-card/index.mjs +1 -1
  55. package/dist/{hover-card-08jU9cD8.mjs → hover-card-BNOE5vT5.mjs} +20 -3
  56. package/dist/index.mjs +35 -34
  57. package/dist/logs/fixtures/index.mjs +770 -3
  58. package/dist/logs/index.mjs +1044 -249
  59. package/dist/mobile-sheet/index.mjs +1 -1
  60. package/dist/{mobile-sheet-BYp-QQmn.mjs → mobile-sheet-9TootJGg.mjs} +1 -1
  61. package/dist/more-actions/index.mjs +1 -1
  62. package/dist/{more-actions-B1FUf2rm.mjs → more-actions-C3DYWO0a.mjs} +3 -3
  63. package/dist/motion-DvGRWdsm.mjs +46 -0
  64. package/dist/multi-select/index.mjs +1 -1
  65. package/dist/{multi-select-PtdMChPF.mjs → multi-select-CH8KERkt.mjs} +1 -1
  66. package/dist/picker/index.mjs +2 -2
  67. package/dist/{picker-raVuDxsh.mjs → picker-DbKukBkk.mjs} +1 -1
  68. package/dist/popover/index.mjs +1 -33
  69. package/dist/popover-X82NwhX9.mjs +53 -0
  70. package/dist/responsive-dropdown/index.mjs +1 -1
  71. package/dist/{responsive-dropdown-n0Txkax5.mjs → responsive-dropdown-C_KKgLbH.mjs} +2 -2
  72. package/dist/responsive-popover/index.mjs +1 -1
  73. package/dist/{responsive-popover-C_1nzIvm.mjs → responsive-popover-8VcjBM2d.mjs} +2 -2
  74. package/dist/rich-text-editor/index.mjs +1 -1
  75. package/dist/{rich-text-editor-Dohp-pbf.mjs → rich-text-editor-DVga5upM.mjs} +3 -3
  76. package/dist/select/index.mjs +1 -1
  77. package/dist/{select-DCU44UO6.mjs → select-CQsG8Kju.mjs} +1 -1
  78. package/dist/sheet/index.mjs +1 -1
  79. package/dist/{sheet-C2i2k5i2.mjs → sheet-DHn6C_rs.mjs} +1 -1
  80. package/dist/sidebar/index.mjs +1 -1
  81. package/dist/{sidebar-D6BoAr6C.mjs → sidebar-BeWEEu7P.mjs} +1 -1
  82. package/dist/styles/motion.css +61 -0
  83. package/dist/styles/root.css +6 -0
  84. package/dist/switch/index.mjs +1 -1
  85. package/dist/{switch-DPHr3TcN.mjs → switch-Z2pJMckf.mjs} +1 -1
  86. package/dist/tabs/index.mjs +1 -1
  87. package/dist/task-queue/index.mjs +1 -1
  88. package/dist/{task-queue-dropdown-ClLLTMxU.mjs → task-queue-dropdown-BJS3snfZ.mjs} +4 -4
  89. package/dist/time-picker/index.mjs +1 -1
  90. package/dist/{time-picker-CFhaHTtI.mjs → time-picker-rVTkmbIG.mjs} +1 -1
  91. package/dist/{to-api-format-WC7b9Mcv.mjs → to-api-format-Bm1VcKkS.mjs} +4 -4
  92. package/dist/tooltip/index.mjs +1 -1
  93. package/dist/{tooltip-C_SL1imw.mjs → tooltip-DhbN1BDK.mjs} +1 -1
  94. package/dist/transfer/index.mjs +1 -1
  95. package/dist/{transfer-CEq9AhL7.mjs → transfer-DsshYgIk.mjs} +1 -1
  96. package/dist/utils/index.d.ts +2 -0
  97. package/dist/utils/index.mjs +2 -1
  98. package/dist/utils/motion.d.ts +30 -0
  99. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- import { i as useInSheet, n as MobileSheet, r as InSheetContext, t as ResponsiveSheetTrigger } from "../mobile-sheet-BYp-QQmn.mjs";
1
+ import { i as useInSheet, n as MobileSheet, r as InSheetContext, t as ResponsiveSheetTrigger } from "../mobile-sheet-9TootJGg.mjs";
2
2
  export { InSheetContext, MobileSheet, ResponsiveSheetTrigger, useInSheet };
@@ -1,6 +1,6 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
2
  import { a as SheetHeader, o as SheetTitle, r as SheetDescription } from "./sheet-DXCZyMHI.mjs";
3
- import { r as SheetContent, t as Sheet } from "./sheet-C2i2k5i2.mjs";
3
+ import { r as SheetContent, t as Sheet } from "./sheet-DHn6C_rs.mjs";
4
4
  import { createContext, use } from "react";
5
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
6
  import { Slot } from "@radix-ui/react-slot";
@@ -1,3 +1,3 @@
1
1
  import { t as ActionRow } from "../action-row-DTvs91_3.mjs";
2
- import { t as MoreActions } from "../more-actions-B1FUf2rm.mjs";
2
+ import { t as MoreActions } from "../more-actions-C3DYWO0a.mjs";
3
3
  export { ActionRow, MoreActions };
@@ -1,7 +1,7 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
- import { t as Button } from "./button-A1qTjZ8U.mjs";
3
- import { t as ResponsiveDropdown } from "./responsive-dropdown-n0Txkax5.mjs";
4
- import { t as Tooltip } from "./tooltip-C_SL1imw.mjs";
2
+ import { t as Button } from "./button-DoMqfQLu.mjs";
3
+ import { t as ResponsiveDropdown } from "./responsive-dropdown-C_KKgLbH.mjs";
4
+ import { t as Tooltip } from "./tooltip-DhbN1BDK.mjs";
5
5
  import { t as ActionRow } from "./action-row-DTvs91_3.mjs";
6
6
  import { Ellipsis } from "lucide-react";
7
7
  import { useState } from "react";
@@ -0,0 +1,46 @@
1
+ //#region src/utils/motion.ts
2
+ /**
3
+ * Motion tokens — the single source of truth for JS-driven animation
4
+ * (Motion / `motion/react`). Mirrors the CSS motion tokens defined in
5
+ * `@repo/shadcn/styles/shadcn.css` so component motion stays cohesive
6
+ * whether it runs through CSS or Motion.
7
+ *
8
+ * Curves match the CSS `--ease-*` custom properties exactly.
9
+ */
10
+ /** Cubic-bezier easing curves as Motion-compatible tuples. */
11
+ const EASE = {
12
+ /** Strong ease-out for entrances/exits. Mirrors `--ease-out`. */
13
+ out: [
14
+ .23,
15
+ 1,
16
+ .32,
17
+ 1
18
+ ],
19
+ /** Strong ease-in-out for on-screen movement. Mirrors `--ease-in-out`. */
20
+ inOut: [
21
+ .77,
22
+ 0,
23
+ .175,
24
+ 1
25
+ ],
26
+ /** iOS-style drawer curve. Mirrors `--ease-drawer`. */
27
+ drawer: [
28
+ .32,
29
+ .72,
30
+ 0,
31
+ 1
32
+ ]
33
+ };
34
+ /** Durations in seconds (Motion expects seconds, not ms). */
35
+ const DURATION = {
36
+ /** 150ms — button press, tooltips, small popovers. */
37
+ fast: .15,
38
+ /** 250ms — dropdowns, selects, standard UI. */
39
+ medium: .25,
40
+ /** 350ms — drawer/sheet enter. */
41
+ drawerIn: .35,
42
+ /** 200ms — drawer/sheet exit (faster than enter). */
43
+ drawerOut: .2
44
+ };
45
+ //#endregion
46
+ export { EASE as n, DURATION as t };
@@ -1,2 +1,2 @@
1
- import { t as MultiSelect } from "../multi-select-PtdMChPF.mjs";
1
+ import { t as MultiSelect } from "../multi-select-CH8KERkt.mjs";
2
2
  export { MultiSelect };
@@ -2,7 +2,7 @@ import { t as cn } from "./utils-Bu32wN-x.mjs";
2
2
  import { t as Badge } from "./badge-BTNW_FEU.mjs";
3
3
  import { t as Separator } from "./separator-vbPD_WFQ.mjs";
4
4
  import { t as useControllableState } from "./use-controllable-state-Dna7u3r9.mjs";
5
- import { t as ResponsivePopover } from "./responsive-popover-C_1nzIvm.mjs";
5
+ import { t as ResponsivePopover } from "./responsive-popover-8VcjBM2d.mjs";
6
6
  import { t as LoaderOverlay } from "./loader-overlay-DD94azZX.mjs";
7
7
  import { n as OptionList, t as useOptionPicker } from "./use-option-picker-s2bUYwXC.mjs";
8
8
  import { cva } from "class-variance-authority";
@@ -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-Dog33Ry0.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-raVuDxsh.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-DlFTh3DF.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-DbKukBkk.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-Bu32wN-x.mjs";
2
2
  import { i as SelectItem, l as SelectTrigger, n as SelectContent, t as Select, u as SelectValue } from "./select-daE2Nn0Z.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-Dog33Ry0.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-DlFTh3DF.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,34 +1,2 @@
1
- import { t as cn } from "../utils-Bu32wN-x.mjs";
2
- import "react";
3
- import { jsx } from "react/jsx-runtime";
4
- import * as PopoverPrimitive from "@radix-ui/react-popover";
5
- //#region ../shadcn/ui/popover.tsx
6
- function Popover({ ...props }) {
7
- return /* @__PURE__ */ jsx(PopoverPrimitive.Root, {
8
- "data-slot": "popover",
9
- ...props
10
- });
11
- }
12
- function PopoverTrigger({ ...props }) {
13
- return /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, {
14
- "data-slot": "popover-trigger",
15
- ...props
16
- });
17
- }
18
- function PopoverContent({ className, align = "center", sideOffset = 4, ...props }) {
19
- return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(PopoverPrimitive.Content, {
20
- "data-slot": "popover-content",
21
- align,
22
- sideOffset,
23
- className: cn("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-hidden", className),
24
- ...props
25
- }) });
26
- }
27
- function PopoverAnchor({ ...props }) {
28
- return /* @__PURE__ */ jsx(PopoverPrimitive.Anchor, {
29
- "data-slot": "popover-anchor",
30
- ...props
31
- });
32
- }
33
- //#endregion
1
+ import { i as PopoverTrigger, n as PopoverAnchor, r as PopoverContent, t as Popover } from "../popover-X82NwhX9.mjs";
34
2
  export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };
@@ -0,0 +1,53 @@
1
+ import { t as cn } from "./utils-Bu32wN-x.mjs";
2
+ import "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
5
+ //#region ../shadcn/ui/popover.tsx
6
+ function Popover$1({ ...props }) {
7
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Root, {
8
+ "data-slot": "popover",
9
+ ...props
10
+ });
11
+ }
12
+ function PopoverTrigger$1({ ...props }) {
13
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, {
14
+ "data-slot": "popover-trigger",
15
+ ...props
16
+ });
17
+ }
18
+ function PopoverContent$1({ className, align = "center", sideOffset = 4, ...props }) {
19
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(PopoverPrimitive.Content, {
20
+ "data-slot": "popover-content",
21
+ align,
22
+ sideOffset,
23
+ className: cn("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-hidden", className),
24
+ ...props
25
+ }) });
26
+ }
27
+ function PopoverAnchor$1({ ...props }) {
28
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Anchor, {
29
+ "data-slot": "popover-anchor",
30
+ ...props
31
+ });
32
+ }
33
+ //#endregion
34
+ //#region src/components/base/popover/popover.tsx
35
+ /**
36
+ * Datum Popover
37
+ *
38
+ * Thin wrapper over the shadcn popover. Adds trigger-anchored motion to
39
+ * `PopoverContent` (scale from the trigger, not the centre) with the shared
40
+ * fast/ease-out motion tokens. Root/Trigger/Anchor are passed through
41
+ * unchanged so this stays a drop-in replacement.
42
+ */
43
+ const Popover = Popover$1;
44
+ const PopoverTrigger = PopoverTrigger$1;
45
+ const PopoverAnchor = PopoverAnchor$1;
46
+ function PopoverContent({ className, ...props }) {
47
+ return /* @__PURE__ */ jsx(PopoverContent$1, {
48
+ className: cn("origin-(--radix-popover-content-transform-origin) duration-[var(--duration-fast)] ease-out", className),
49
+ ...props
50
+ });
51
+ }
52
+ //#endregion
53
+ export { PopoverTrigger as i, PopoverAnchor as n, PopoverContent as r, Popover as t };
@@ -1,2 +1,2 @@
1
- import { t as ResponsiveDropdown } from "../responsive-dropdown-n0Txkax5.mjs";
1
+ import { t as ResponsiveDropdown } from "../responsive-dropdown-C_KKgLbH.mjs";
2
2
  export { ResponsiveDropdown };
@@ -1,6 +1,6 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
- import { i as useInSheet, t as ResponsiveSheetTrigger } from "./mobile-sheet-BYp-QQmn.mjs";
3
- import { Popover, PopoverContent, PopoverTrigger } from "./popover/index.mjs";
2
+ import { i as useInSheet, t as ResponsiveSheetTrigger } from "./mobile-sheet-9TootJGg.mjs";
3
+ import { i as PopoverTrigger, r as PopoverContent, t as Popover } from "./popover-X82NwhX9.mjs";
4
4
  import { t as useBreakpoint } from "./use-breakpoint-CwiUJSmk.mjs";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/base/responsive-dropdown/responsive-dropdown.tsx
@@ -1,2 +1,2 @@
1
- import { t as ResponsivePopover } from "../responsive-popover-C_1nzIvm.mjs";
1
+ import { t as ResponsivePopover } from "../responsive-popover-8VcjBM2d.mjs";
2
2
  export { ResponsivePopover };
@@ -1,6 +1,6 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
- import { i as useInSheet, t as ResponsiveSheetTrigger } from "./mobile-sheet-BYp-QQmn.mjs";
3
- import { Popover, PopoverContent, PopoverTrigger } from "./popover/index.mjs";
2
+ import { i as useInSheet, t as ResponsiveSheetTrigger } from "./mobile-sheet-9TootJGg.mjs";
3
+ import { i as PopoverTrigger, r as PopoverContent, t as Popover } from "./popover-X82NwhX9.mjs";
4
4
  import { t as useBreakpoint } from "./use-breakpoint-CwiUJSmk.mjs";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/base/responsive-popover/responsive-popover.tsx
@@ -1,2 +1,2 @@
1
- import { n as useRichTextEditor, r as RichTextContent, t as RichTextEditor } from "../rich-text-editor-Dohp-pbf.mjs";
1
+ import { n as useRichTextEditor, r as RichTextContent, t as RichTextEditor } from "../rich-text-editor-DVga5upM.mjs";
2
2
  export { RichTextContent, RichTextEditor, useRichTextEditor };
@@ -1,9 +1,9 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
- import { t as Button } from "./button-A1qTjZ8U.mjs";
2
+ import { t as Button } from "./button-DoMqfQLu.mjs";
3
3
  import { t as Icon } from "./icon-wrapper-DKfJlJd0.mjs";
4
4
  import { t as Input } from "./input-j4tbmYYz.mjs";
5
- import { t as ResponsivePopover } from "./responsive-popover-C_1nzIvm.mjs";
6
- import { t as Tooltip } from "./tooltip-C_SL1imw.mjs";
5
+ import { t as ResponsivePopover } from "./responsive-popover-8VcjBM2d.mjs";
6
+ import { t as Tooltip } from "./tooltip-DhbN1BDK.mjs";
7
7
  import { BoldIcon, ItalicIcon, LinkIcon, StrikethroughIcon, UnderlineIcon, UnlinkIcon } from "lucide-react";
8
8
  import { createContext, use, useCallback, useEffect, useState } from "react";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,2 +1,2 @@
1
- import { a as SelectLabel, c as SelectSeparator, i as SelectItem, l as SelectTrigger, n as SelectContent, o as SelectScrollDownButton, r as SelectGroup, s as SelectScrollUpButton, t as Select, u as SelectValue } from "../select-DCU44UO6.mjs";
1
+ import { a as SelectLabel, c as SelectSeparator, i as SelectItem, l as SelectTrigger, n as SelectContent, o as SelectScrollDownButton, r as SelectGroup, s as SelectScrollUpButton, t as Select, u as SelectValue } from "../select-CQsG8Kju.mjs";
2
2
  export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue };
@@ -24,7 +24,7 @@ SelectTrigger.displayName = "SelectTrigger";
24
24
  function SelectContent({ ref, className, ...props }) {
25
25
  return /* @__PURE__ */ jsx(SelectContent$1, {
26
26
  ref,
27
- className: cn(className),
27
+ className: cn("origin-(--radix-select-content-transform-origin) duration-[var(--duration-fast)] ease-out", className),
28
28
  ...props
29
29
  });
30
30
  }
@@ -1,3 +1,3 @@
1
1
  import { a as SheetHeader, i as SheetFooter, o as SheetTitle, r as SheetDescription, s as SheetTrigger } from "../sheet-DXCZyMHI.mjs";
2
- import { i as SheetOverlay, n as SheetClose, r as SheetContent, t as Sheet } from "../sheet-C2i2k5i2.mjs";
2
+ import { i as SheetOverlay, n as SheetClose, r as SheetContent, t as Sheet } from "../sheet-DHn6C_rs.mjs";
3
3
  export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetTitle, SheetTrigger };
@@ -18,7 +18,7 @@ function SheetContent({ className, children, side = "right", showCloseButton = t
18
18
  "data-slot": "sheet-portal",
19
19
  children: [/* @__PURE__ */ jsx(SheetOverlay, {}), /* @__PURE__ */ jsxs(SheetPrimitive.Content, {
20
20
  "data-slot": "sheet-content",
21
- className: cn("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500", side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm", side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm", side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b", side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t", className),
21
+ className: cn("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-[var(--ease-drawer)] data-[state=closed]:duration-[var(--duration-drawer-out)] data-[state=open]:duration-[var(--duration-drawer-in)]", side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm", side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm", side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b", side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t", className),
22
22
  ...props,
23
23
  children: [children, showCloseButton && /* @__PURE__ */ jsxs(SheetPrimitive.Close, {
24
24
  className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 cursor-pointer rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0",
@@ -1,2 +1,2 @@
1
- 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-D6BoAr6C.mjs";
1
+ 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-BeWEEu7P.mjs";
2
2
  export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar };
@@ -4,7 +4,7 @@ import { t as Button } from "./button-CsdF61EI.mjs";
4
4
  import { t as Icon } from "./icon-wrapper-DKfJlJd0.mjs";
5
5
  import { t as Input } from "./input-j4tbmYYz.mjs";
6
6
  import { a as SheetHeader, n as SheetContent, o as SheetTitle, r as SheetDescription, t as Sheet } from "./sheet-DXCZyMHI.mjs";
7
- import { i as TooltipProvider, t as Tooltip } from "./tooltip-C_SL1imw.mjs";
7
+ import { i as TooltipProvider, t as Tooltip } from "./tooltip-DhbN1BDK.mjs";
8
8
  import { t as Skeleton } from "./skeleton-DFExK4GX.mjs";
9
9
  import { cva } from "class-variance-authority";
10
10
  import { PanelLeftCloseIcon, PanelLeftOpenIcon } from "lucide-react";
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Motion tokens (datum-ui layer).
3
+ *
4
+ * Single source of truth for easing + duration used by datum-ui components.
5
+ * Lives in its own file so every entry point that assembles the design
6
+ * system — the shipped `root.css` AND Storybook's piecemeal imports — pulls
7
+ * in the same tokens. Mirrored in TS at `utils/motion.ts` for Motion.
8
+ *
9
+ * NOTE: must be imported AFTER `@import 'tailwindcss'` so the `--ease-*`
10
+ * overrides win over Tailwind's defaults.
11
+ */
12
+
13
+ /* Strong custom curves — the built-in CSS easings are too weak.
14
+ * `--ease-out` / `--ease-in-out` override the default Tailwind utilities
15
+ * app-wide; `--ease-drawer` is a named iOS-style curve. */
16
+ @theme {
17
+ --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
18
+ --ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
19
+ --ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);
20
+
21
+ /* Durations — keep UI animations snappy (<300ms). */
22
+ --duration-fast: 150ms;
23
+ --duration-medium: 250ms;
24
+ --duration-drawer-in: 350ms;
25
+ --duration-drawer-out: 200ms;
26
+ }
27
+
28
+ /* ============================================================
29
+ * Reduced-motion safety net.
30
+ *
31
+ * Systemic fallback complementing the per-component `useReducedMotion`
32
+ * in Motion. Reduced motion means *fewer and gentler* animations, not
33
+ * zero: opacity/colour fades are kept (they aid comprehension), while
34
+ * movement (translate), scale and rotation are neutralised.
35
+ *
36
+ * tw-animate-css drives `animate-in`/`animate-out` from CSS variables,
37
+ * so zeroing the enter/exit translate/scale/rotate vars strips the
38
+ * movement from every Radix overlay while leaving the fade intact.
39
+ * ============================================================ */
40
+ @media (prefers-reduced-motion: reduce) {
41
+ *,
42
+ *::before,
43
+ *::after {
44
+ --tw-enter-translate-x: 0 !important;
45
+ --tw-enter-translate-y: 0 !important;
46
+ --tw-exit-translate-x: 0 !important;
47
+ --tw-exit-translate-y: 0 !important;
48
+ --tw-enter-scale: 1 !important;
49
+ --tw-exit-scale: 1 !important;
50
+ --tw-enter-rotate: 0 !important;
51
+ --tw-exit-rotate: 0 !important;
52
+ }
53
+
54
+ /* Height-based collapsibles carry no fade to preserve — make instant. */
55
+ .animate-collapsible-down,
56
+ .animate-collapsible-up {
57
+ animation-duration: 0.01ms !important;
58
+ }
59
+
60
+ /* Continuous spinners are essential loading feedback and are kept. */
61
+ }
@@ -36,3 +36,9 @@
36
36
 
37
37
  /* Theme overrides — always loaded after shadcn */
38
38
  @import './themes/alpha.css';
39
+
40
+ /* Motion tokens + reduced-motion safety net.
41
+ * In its own file so Storybook (which imports pieces individually) and the
42
+ * shipped bundle share one source. Must load after tailwindcss for the
43
+ * `--ease-*` overrides to win. */
44
+ @import './motion.css';
@@ -1,2 +1,2 @@
1
- import { t as Switch } from "../switch-DPHr3TcN.mjs";
1
+ import { t as Switch } from "../switch-Z2pJMckf.mjs";
2
2
  export { Switch };
@@ -19,7 +19,7 @@ function Switch$1({ className, ...props }) {
19
19
  function Switch({ ref, className, ...props }) {
20
20
  return /* @__PURE__ */ jsx(Switch$1, {
21
21
  ref,
22
- className: cn(className),
22
+ className: cn("transition-[background-color,border-color,box-shadow] duration-[var(--duration-fast)] ease-out", className),
23
23
  ...props
24
24
  });
25
25
  }
@@ -23,7 +23,7 @@ function TabsList({ className, ...props }) {
23
23
  }
24
24
  function TabsTrigger({ className, ...props }) {
25
25
  return /* @__PURE__ */ jsx(TabsPrimitive.Trigger, {
26
- className: cn("data-[state=active]:bg-background dark:data-[state=active]:text-foreground data-[state=active]:text-foreground dark:hover:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring inline-flex flex-1 items-center justify-center gap-1.5 rounded-md px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
26
+ className: cn("data-[state=active]:bg-background dark:data-[state=active]:text-foreground data-[state=active]:text-foreground dark:hover:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring inline-flex flex-1 items-center justify-center gap-1.5 rounded-md px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow,transform] duration-[var(--duration-fast)] ease-out active:scale-[0.98] disabled:active:scale-100 focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
27
27
  ...props
28
28
  });
29
29
  }
@@ -1,2 +1,2 @@
1
- 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-ClLLTMxU.mjs";
1
+ 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-BJS3snfZ.mjs";
2
2
  export { LocalTaskStorage, RedisTaskStorage, TaskPanel, TaskPanelActions, TaskPanelCounter, TaskPanelHeader, TaskPanelItem, TaskQueue, TaskQueueDropdown, TaskQueueProvider, TaskQueueTrigger, TaskSummaryDialog, createOrgMetadata, createProjectMetadata, createUserMetadata, detectStorage, getContextLabel, matchesCurrentScope, useCurrentScope, useTaskQueue, useTasksWithLabels };
@@ -1,11 +1,11 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
2
  import { t as Badge } from "./badge-BTNW_FEU.mjs";
3
3
  import { t as SpinnerIcon } from "./spinner.icon-BYUMQ8H-.mjs";
4
- import { t as Button } from "./button-A1qTjZ8U.mjs";
4
+ import { t as Button } from "./button-DoMqfQLu.mjs";
5
5
  import { t as Icon } from "./icon-wrapper-DKfJlJd0.mjs";
6
- import { t as Dialog } from "./dialog-N2pkQIc4.mjs";
7
- import { t as ResponsiveDropdown } from "./responsive-dropdown-n0Txkax5.mjs";
8
- import { a as TooltipTrigger, n as Tooltip, r as TooltipContent, t as Tooltip$1 } from "./tooltip-C_SL1imw.mjs";
6
+ import { t as Dialog } from "./dialog-Gu70fban.mjs";
7
+ import { t as ResponsiveDropdown } from "./responsive-dropdown-C_KKgLbH.mjs";
8
+ import { a as TooltipTrigger, n as Tooltip, r as TooltipContent, t as Tooltip$1 } from "./tooltip-DhbN1BDK.mjs";
9
9
  import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "./table/index.mjs";
10
10
  import { Ban, CheckCircle2, CircleAlert, CircleCheck, CornerDownRightIcon, FileIcon, ListTodo, X, XCircle } from "lucide-react";
11
11
  import { createContext, use, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
@@ -1,2 +1,2 @@
1
- import { t as TimePicker } from "../time-picker-CFhaHTtI.mjs";
1
+ import { t as TimePicker } from "../time-picker-rVTkmbIG.mjs";
2
2
  export { TimePicker };
@@ -1,5 +1,5 @@
1
1
  import { t as useDeprecationWarning } from "./use-deprecation-warning-DXrGc0jX.mjs";
2
- import { n as TimePicker$1 } from "./picker-raVuDxsh.mjs";
2
+ import { n as TimePicker$1 } from "./picker-DbKukBkk.mjs";
3
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region src/components/features/time-picker/time-picker.tsx
5
5
  const STEP_VALUES = [
@@ -1,10 +1,10 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
- import { t as Button } from "./button-A1qTjZ8U.mjs";
2
+ import { t as Button } from "./button-DoMqfQLu.mjs";
3
3
  import { Calendar } from "./calendar/index.mjs";
4
4
  import { t as Input } from "./input-j4tbmYYz.mjs";
5
- import { t as ResponsivePopover } from "./responsive-popover-C_1nzIvm.mjs";
6
- import { i as SelectItem, l as SelectTrigger, n as SelectContent, t as Select, u as SelectValue } from "./select-DCU44UO6.mjs";
7
- import { F as zonedDateToIso, M as getBrowserTimezone, N as getTimezoneOffset, P as isoToZonedDate, U as endOfDayInTz, W as startOfDayInTz, j as formatTimezoneLabel, t as DateTimeRangePicker } from "./date-time-range-picker-Dog33Ry0.mjs";
5
+ import { t as ResponsivePopover } from "./responsive-popover-8VcjBM2d.mjs";
6
+ import { i as SelectItem, l as SelectTrigger, n as SelectContent, t as Select, u as SelectValue } from "./select-CQsG8Kju.mjs";
7
+ import { F as zonedDateToIso, M as getBrowserTimezone, N as getTimezoneOffset, P as isoToZonedDate, U as endOfDayInTz, W as startOfDayInTz, j as formatTimezoneLabel, t as DateTimeRangePicker } from "./date-time-range-picker-DlFTh3DF.mjs";
8
8
  import { t as useDeprecationWarning } from "./use-deprecation-warning-DXrGc0jX.mjs";
9
9
  import { CalendarIcon, Globe } from "lucide-react";
10
10
  import { useCallback, useEffect, useId, useRef, useState } from "react";
@@ -1,2 +1,2 @@
1
- import { t as Tooltip } from "../tooltip-C_SL1imw.mjs";
1
+ import { t as Tooltip } from "../tooltip-DhbN1BDK.mjs";
2
2
  export { Tooltip };
@@ -39,7 +39,7 @@ function TooltipContent({ className, arrowClassName, sideOffset = 0, children, .
39
39
  return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs(TooltipPrimitive.Content, {
40
40
  "data-slot": "tooltip-content",
41
41
  sideOffset,
42
- className: cn("tooltip-content", "bg-secondary text-secondary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance max-w-[calc(100vw-2rem)]", className),
42
+ className: cn("bg-secondary text-secondary-foreground origin-(--radix-tooltip-content-transform-origin) duration-[var(--duration-fast)] ease-out animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance max-w-[calc(100vw-2rem)]", className),
43
43
  ...props,
44
44
  children: [children, /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, {
45
45
  className: cn("fill-secondary -my-px border-none drop-shadow-[0_1px_0_secondary]", arrowClassName),
@@ -1,2 +1,2 @@
1
- import { t as Transfer } from "../transfer-CEq9AhL7.mjs";
1
+ import { t as Transfer } from "../transfer-DsshYgIk.mjs";
2
2
  export { Transfer };
@@ -1,5 +1,5 @@
1
1
  import { t as cn } from "./utils-Bu32wN-x.mjs";
2
- import { t as Button } from "./button-A1qTjZ8U.mjs";
2
+ import { t as Button } from "./button-DoMqfQLu.mjs";
3
3
  import { Search, X } from "lucide-react";
4
4
  import * as React from "react";
5
5
  import { useCallback, useEffect, useMemo, useState } from "react";
@@ -1,2 +1,4 @@
1
1
  export { cn } from './cn';
2
+ export type { Duration, Ease } from './motion';
3
+ export { DURATION, EASE } from './motion';
2
4
  export { toUTCTimestampEndOfDay, toUTCTimestampStartOfDay } from './timezone';
@@ -1,3 +1,4 @@
1
1
  import { t as cn } from "../utils-Bu32wN-x.mjs";
2
+ import { n as EASE, t as DURATION } from "../motion-DvGRWdsm.mjs";
2
3
  import { n as toUTCTimestampStartOfDay, t as toUTCTimestampEndOfDay } from "../utils-CA4QEIJ8.mjs";
3
- export { cn, toUTCTimestampEndOfDay, toUTCTimestampStartOfDay };
4
+ export { DURATION, EASE, cn, toUTCTimestampEndOfDay, toUTCTimestampStartOfDay };
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Motion tokens — the single source of truth for JS-driven animation
3
+ * (Motion / `motion/react`). Mirrors the CSS motion tokens defined in
4
+ * `../_shadcn/styles/shadcn.css` so component motion stays cohesive
5
+ * whether it runs through CSS or Motion.
6
+ *
7
+ * Curves match the CSS `--ease-*` custom properties exactly.
8
+ */
9
+ /** Cubic-bezier easing curves as Motion-compatible tuples. */
10
+ export declare const EASE: {
11
+ /** Strong ease-out for entrances/exits. Mirrors `--ease-out`. */
12
+ readonly out: readonly [0.23, 1, 0.32, 1];
13
+ /** Strong ease-in-out for on-screen movement. Mirrors `--ease-in-out`. */
14
+ readonly inOut: readonly [0.77, 0, 0.175, 1];
15
+ /** iOS-style drawer curve. Mirrors `--ease-drawer`. */
16
+ readonly drawer: readonly [0.32, 0.72, 0, 1];
17
+ };
18
+ /** Durations in seconds (Motion expects seconds, not ms). */
19
+ export declare const DURATION: {
20
+ /** 150ms — button press, tooltips, small popovers. */
21
+ readonly fast: 0.15;
22
+ /** 250ms — dropdowns, selects, standard UI. */
23
+ readonly medium: 0.25;
24
+ /** 350ms — drawer/sheet enter. */
25
+ readonly drawerIn: 0.35;
26
+ /** 200ms — drawer/sheet exit (faster than enter). */
27
+ readonly drawerOut: 0.2;
28
+ };
29
+ export type Ease = keyof typeof EASE;
30
+ export type Duration = keyof typeof DURATION;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@datum-cloud/datum-ui",
3
3
  "type": "module",
4
- "version": "2.4.0",
4
+ "version": "2.6.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "url": "https://github.com/datum-cloud/datum-ui"