@datum-cloud/datum-ui 3.8.0 → 3.10.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 (52) hide show
  1. package/dist/autocomplete/index.mjs +1 -1
  2. package/dist/{autocomplete-D0zAcT78.mjs → autocomplete-CrCbO2VS.mjs} +10 -4
  3. package/dist/autosearch/index.mjs +1 -1
  4. package/dist/button-group/index.mjs +1 -1
  5. package/dist/{button-group-C3GKo-0p.mjs → button-group-DJ6X1SSj.mjs} +2 -2
  6. package/dist/{calendar-date-picker-CknZM6a2.mjs → calendar-date-picker-BRKs56gR.mjs} +1 -1
  7. package/dist/components/features/logs/hooks/use-logs-url-state.d.ts +59 -0
  8. package/dist/components/features/logs/index.d.ts +4 -1
  9. package/dist/components/features/logs/utils/facet-counts.d.ts +50 -0
  10. package/dist/components/features/logs/utils/facets.d.ts +2 -0
  11. package/dist/components/features/logs/utils/index.d.ts +4 -0
  12. package/dist/components/features/logs/utils/url-state.d.ts +61 -0
  13. package/dist/data-table/index.mjs +1 -1
  14. package/dist/{data-table-CpBwO8Ea.mjs → data-table-DFUnUydN.mjs} +5 -5
  15. package/dist/date-picker/index.mjs +3 -3
  16. package/dist/date-time-picker/index.mjs +1 -1
  17. package/dist/{date-time-picker-Bc41Ixrs.mjs → date-time-picker-BRMm2QSz.mjs} +1 -1
  18. package/dist/{date-time-range-picker-yy1Acntn.mjs → date-time-range-picker-CqGGJTLS.mjs} +18 -7
  19. package/dist/field-styles-D-FJatHt.mjs +31 -0
  20. package/dist/form/index.mjs +1 -1
  21. package/dist/{form-DTaVgDSV.mjs → form-VdbSqDjL.mjs} +5 -5
  22. package/dist/grouped-table/index.mjs +1 -1
  23. package/dist/{grouped-table-Dl6DclbV.mjs → grouped-table-B4HzLXq6.mjs} +1 -1
  24. package/dist/hooks/index.mjs +1 -1
  25. package/dist/hooks/use-breakpoint.d.ts +7 -2
  26. package/dist/index.mjs +19 -19
  27. package/dist/{layers-DLUbkJtt.mjs → layers-BC1Ny49w.mjs} +1 -1
  28. package/dist/logs/index.mjs +374 -80
  29. package/dist/map/index.mjs +1 -1
  30. package/dist/more-actions/index.mjs +1 -1
  31. package/dist/{more-actions-BlSOVwa8.mjs → more-actions-DXQiV-bN.mjs} +1 -1
  32. package/dist/multi-select/index.mjs +1 -1
  33. package/dist/{multi-select-C2cBrqXl.mjs → multi-select-DwcsJdHt.mjs} +32 -24
  34. package/dist/picker/index.mjs +2 -2
  35. package/dist/{picker-DC3GErYg.mjs → picker-BHPtncpv.mjs} +2 -2
  36. package/dist/responsive-dropdown/index.mjs +1 -1
  37. package/dist/{responsive-dropdown-DsWgpE_i.mjs → responsive-dropdown-B9cDUeHt.mjs} +1 -1
  38. package/dist/responsive-popover/index.mjs +1 -1
  39. package/dist/{responsive-popover-DJYd8lOK.mjs → responsive-popover-B_pUxrZ1.mjs} +1 -1
  40. package/dist/rich-text-editor/index.mjs +1 -1
  41. package/dist/{rich-text-editor-BUz06s-b.mjs → rich-text-editor-CPd_6vdZ.mjs} +1 -1
  42. package/dist/select/index.mjs +1 -1
  43. package/dist/{select-DemYhwnG.mjs → select-B0Xlz-wD.mjs} +3 -2
  44. package/dist/{select-jgK6wyXj.mjs → select-CGsHf70u.mjs} +7 -2
  45. package/dist/task-queue/index.mjs +1 -1
  46. package/dist/{task-queue-dropdown-DuCAAybs.mjs → task-queue-dropdown-BflEFiMi.mjs} +1 -1
  47. package/dist/time-picker/index.mjs +1 -1
  48. package/dist/{time-picker-B_am4eAK.mjs → time-picker-BFwH-Vd3.mjs} +1 -1
  49. package/dist/{to-api-format-DyImCzCn.mjs → to-api-format-BiWOTFha.mjs} +3 -3
  50. package/dist/{use-breakpoint-zY_JYINK.mjs → use-breakpoint-Ce5tS4cU.mjs} +11 -5
  51. package/dist/utils/field-styles.d.ts +21 -0
  52. package/package.json +1 -1
@@ -1,8 +1,10 @@
1
1
  import { t as cn } from "./utils-CTIuhCOs.mjs";
2
+ import { n as fieldPlaceholderClassName, r as fieldTriggerClassName, t as fieldIconClassName } from "./field-styles-D-FJatHt.mjs";
2
3
  import { t as useControllableState } from "./use-controllable-state-DLeVgbAb.mjs";
3
4
  import { n as OptionList, t as useOptionPicker } from "./use-option-picker-DXY2SNnT.mjs";
4
- import { t as ResponsivePopover } from "./responsive-popover-DJYd8lOK.mjs";
5
+ import { t as ResponsivePopover } from "./responsive-popover-B_pUxrZ1.mjs";
5
6
  import { t as Separator } from "./separator-DNiiN2BN.mjs";
7
+ import { t as Icon } from "./icon-wrapper-CIk2th6R.mjs";
6
8
  import { t as LoaderOverlay } from "./loader-overlay-DP0pvHuG.mjs";
7
9
  import { n as useChipMotion, t as MotionBadge } from "./motion-chip-BczV7spP.mjs";
8
10
  import { cva } from "class-variance-authority";
@@ -91,9 +93,9 @@ function SelectedBadgeList({ selectedOptions, maxCount, variant, badgeClassName,
91
93
  const overflowCount = maxCount === -1 ? 0 : selectedOptions.length - maxCount;
92
94
  const chipMotion = useChipMotion();
93
95
  return /* @__PURE__ */ jsxs("div", {
94
- className: "flex w-full items-center justify-between",
96
+ className: "flex w-full items-center justify-between gap-2",
95
97
  children: [/* @__PURE__ */ jsx("div", {
96
- className: "relative flex flex-wrap items-center gap-2",
98
+ className: "relative flex min-w-0 flex-wrap items-center gap-2",
97
99
  children: /* @__PURE__ */ jsxs(AnimatePresence, {
98
100
  initial: false,
99
101
  mode: "popLayout",
@@ -120,7 +122,9 @@ function SelectedBadgeList({ selectedOptions, maxCount, variant, badgeClassName,
120
122
  label: `Remove ${option.label}`,
121
123
  onActivate: () => onRemove(option.value),
122
124
  className: "text-muted-foreground ml-1",
123
- children: /* @__PURE__ */ jsx(XCircle, {
125
+ children: /* @__PURE__ */ jsx(Icon, {
126
+ icon: XCircle,
127
+ size: 12,
124
128
  className: "size-3",
125
129
  "aria-hidden": "true"
126
130
  })
@@ -135,7 +139,9 @@ function SelectedBadgeList({ selectedOptions, maxCount, variant, badgeClassName,
135
139
  label: "Clear extra selected",
136
140
  onActivate: onClearExtra,
137
141
  className: "text-muted-foreground ml-1",
138
- children: /* @__PURE__ */ jsx(XCircle, {
142
+ children: /* @__PURE__ */ jsx(Icon, {
143
+ icon: XCircle,
144
+ size: 12,
139
145
  className: "size-3",
140
146
  "aria-hidden": "true"
141
147
  })
@@ -143,23 +149,26 @@ function SelectedBadgeList({ selectedOptions, maxCount, variant, badgeClassName,
143
149
  }, "overflow")]
144
150
  })
145
151
  }), /* @__PURE__ */ jsxs("div", {
146
- className: "flex items-center justify-between",
152
+ className: "flex shrink-0 items-center gap-2",
147
153
  children: [
148
154
  /* @__PURE__ */ jsx(IconAction, {
149
155
  label: "Clear all",
150
156
  onActivate: onClearAll,
151
- className: "text-muted-foreground mx-2",
152
- children: /* @__PURE__ */ jsx(XIcon, {
153
- className: "h-4",
157
+ className: "text-muted-foreground hover:text-foreground rounded-sm",
158
+ children: /* @__PURE__ */ jsx(Icon, {
159
+ icon: XIcon,
160
+ size: 14,
161
+ className: "size-3.5 shrink-0",
154
162
  "aria-hidden": "true"
155
163
  })
156
164
  }),
157
165
  /* @__PURE__ */ jsx("span", {
158
- className: "bg-border flex h-full min-h-6 w-px",
166
+ className: "bg-border h-4 w-px",
159
167
  "aria-hidden": "true"
160
168
  }),
161
- /* @__PURE__ */ jsx(ChevronDown, {
162
- className: "text-muted-foreground mx-2 h-4",
169
+ /* @__PURE__ */ jsx(Icon, {
170
+ icon: ChevronDown,
171
+ className: fieldIconClassName,
163
172
  "aria-hidden": "true"
164
173
  })
165
174
  ]
@@ -238,6 +247,7 @@ function MultiSelect({ options, onValueChange, variant, defaultValue = EMPTY_ARR
238
247
  ]
239
248
  })]
240
249
  })] }) : void 0;
250
+ const showBadges = hasSelection && !isLoading && options.length > 0;
241
251
  const triggerJSX = /* @__PURE__ */ jsxs("button", {
242
252
  ...rest,
243
253
  type: "button",
@@ -247,8 +257,8 @@ function MultiSelect({ options, onValueChange, variant, defaultValue = EMPTY_ARR
247
257
  onTriggerClick?.(event);
248
258
  setIsPopoverOpen((prev) => !prev);
249
259
  },
250
- className: cn("text-input-foreground placeholder:text-input-placeholder", "border-input-border bg-input-background/50 relative flex min-h-10 w-full items-center justify-between rounded-lg border px-2 py-1 text-left text-sm transition-all", "focus-visible:border-input-focus-border focus-visible:shadow-(--input-focus-shadow)", "focus-visible:ring-0 focus-visible:ring-offset-0 focus-visible:outline-hidden", (disabled || isLoading) && "cursor-not-allowed opacity-50", className),
251
- children: [hasSelection && !isLoading && options.length > 0 ? /* @__PURE__ */ jsx(SelectedBadgeList, {
260
+ className: cn(fieldTriggerClassName, "relative min-h-10 justify-between py-1", (disabled || isLoading) && "cursor-not-allowed opacity-50", className),
261
+ children: [showBadges ? /* @__PURE__ */ jsx(SelectedBadgeList, {
252
262
  selectedOptions,
253
263
  maxCount,
254
264
  variant,
@@ -260,16 +270,14 @@ function MultiSelect({ options, onValueChange, variant, defaultValue = EMPTY_ARR
260
270
  onClearExtra: clearExtraOptions,
261
271
  onClearAll: handleClear,
262
272
  onBadgeClick
263
- }) : /* @__PURE__ */ jsxs("div", {
264
- className: "flex w-full items-center justify-between px-2",
265
- children: [/* @__PURE__ */ jsx("span", {
266
- className: "text-muted-foreground text-sm",
267
- children: placeholder
268
- }), /* @__PURE__ */ jsx(ChevronDown, {
269
- className: "text-muted-foreground mx-1 h-4",
270
- "aria-hidden": "true"
271
- })]
272
- }), isLoading && /* @__PURE__ */ jsx(LoaderOverlay, { className: "rounded-lg" })]
273
+ }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
274
+ className: cn("min-w-0 flex-1 truncate", fieldPlaceholderClassName),
275
+ children: placeholder
276
+ }), /* @__PURE__ */ jsx(Icon, {
277
+ icon: ChevronDown,
278
+ className: fieldIconClassName,
279
+ "aria-hidden": "true"
280
+ })] }), isLoading && /* @__PURE__ */ jsx(LoaderOverlay, { className: "rounded-lg" })]
273
281
  });
274
282
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
275
283
  /* @__PURE__ */ jsx(ResponsivePopover, {
@@ -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-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";
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-CqGGJTLS.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-BHPtncpv.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
- 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-yy1Acntn.mjs";
2
+ import { i as SelectItem, l as SelectTrigger, n as SelectContent, t as Select, u as SelectValue } from "./select-CGsHf70u.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-CqGGJTLS.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 ResponsiveDropdown } from "../responsive-dropdown-DsWgpE_i.mjs";
1
+ export { t as ResponsiveDropdown } from "../responsive-dropdown-B9cDUeHt.mjs";
@@ -1,4 +1,4 @@
1
- import { t as useBreakpoint } from "./use-breakpoint-zY_JYINK.mjs";
1
+ import { t as useBreakpoint } from "./use-breakpoint-Ce5tS4cU.mjs";
2
2
  import { t as cn } from "./utils-CTIuhCOs.mjs";
3
3
  import { i as useInSheet, t as ResponsiveSheetTrigger } from "./mobile-sheet-1995HYY_.mjs";
4
4
  import { i as PopoverTrigger, r as PopoverContent, t as Popover } from "./popover-7YxyP_W0.mjs";
@@ -1 +1 @@
1
- export { t as ResponsivePopover } from "../responsive-popover-DJYd8lOK.mjs";
1
+ export { t as ResponsivePopover } from "../responsive-popover-B_pUxrZ1.mjs";
@@ -1,4 +1,4 @@
1
- import { t as useBreakpoint } from "./use-breakpoint-zY_JYINK.mjs";
1
+ import { t as useBreakpoint } from "./use-breakpoint-Ce5tS4cU.mjs";
2
2
  import { t as cn } from "./utils-CTIuhCOs.mjs";
3
3
  import { i as useInSheet, t as ResponsiveSheetTrigger } from "./mobile-sheet-1995HYY_.mjs";
4
4
  import { i as PopoverTrigger, r as PopoverContent, t as Popover } from "./popover-7YxyP_W0.mjs";
@@ -1,3 +1,3 @@
1
1
  import { t as RichTextContent } from "../rich-text-content-BiIIowBU.mjs";
2
- import { n as useRichTextEditor, t as RichTextEditor } from "../rich-text-editor-BUz06s-b.mjs";
2
+ import { n as useRichTextEditor, t as RichTextEditor } from "../rich-text-editor-CPd_6vdZ.mjs";
3
3
  export { RichTextContent, RichTextEditor, useRichTextEditor };
@@ -2,7 +2,7 @@ import { t as cn } from "./utils-CTIuhCOs.mjs";
2
2
  import { t as Tooltip } from "./tooltip-OIySjJWW.mjs";
3
3
  import { t as Button } from "./button-Cn4KagBO.mjs";
4
4
  import { t as Input } from "./input-DsT5qkJn.mjs";
5
- import { t as ResponsivePopover } from "./responsive-popover-DJYd8lOK.mjs";
5
+ import { t as ResponsivePopover } from "./responsive-popover-B_pUxrZ1.mjs";
6
6
  import { t as Icon } from "./icon-wrapper-CIk2th6R.mjs";
7
7
  import { BoldIcon, ItalicIcon, LinkIcon, StrikethroughIcon, UnderlineIcon, UnlinkIcon } from "lucide-react";
8
8
  import { createContext, use, useCallback, useEffect, useState } from "react";
@@ -1 +1 @@
1
- export { t as Select, n as SelectContent, r as SelectGroup, i as SelectItem, a as SelectLabel, o as SelectScrollDownButton, s as SelectScrollUpButton, c as SelectSeparator, l as SelectTrigger, u as SelectValue } from "../select-DemYhwnG.mjs";
1
+ export { t as Select, n as SelectContent, r as SelectGroup, i as SelectItem, a as SelectLabel, o as SelectScrollDownButton, s as SelectScrollUpButton, c as SelectSeparator, l as SelectTrigger, u as SelectValue } from "../select-B0Xlz-wD.mjs";
@@ -1,5 +1,6 @@
1
- import { a as SelectLabel$1, c as SelectSeparator$1, i as SelectItem$1, l as SelectTrigger$1, n as SelectContent$1, o as SelectScrollDownButton$1, r as SelectGroup$1, s as SelectScrollUpButton$1, t as Select$1, u as SelectValue$1 } from "./select-jgK6wyXj.mjs";
1
+ import { a as SelectLabel$1, c as SelectSeparator$1, i as SelectItem$1, l as SelectTrigger$1, n as SelectContent$1, o as SelectScrollDownButton$1, r as SelectGroup$1, s as SelectScrollUpButton$1, t as Select$1, u as SelectValue$1 } from "./select-CGsHf70u.mjs";
2
2
  import { t as cn } from "./utils-CTIuhCOs.mjs";
3
+ import { r as fieldTriggerClassName } from "./field-styles-D-FJatHt.mjs";
3
4
  import "react";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  // src/components/base/select/select.tsx
@@ -16,7 +17,7 @@ SelectGroup.displayName = "SelectGroup";
16
17
  function SelectTrigger({ ref, className, ...props }) {
17
18
  return /* @__PURE__ */ jsx(SelectTrigger$1, {
18
19
  ref,
19
- className: cn("rounded-lg", "bg-input-background/50", "text-input-foreground", "border-input-border", "placeholder:text-input-placeholder", "shadow-none", "focus-visible:ring-0 focus-visible:ring-offset-0", "focus-visible:border-input-focus-border", "focus-visible:shadow-(--input-focus-shadow)", "aria-invalid:border-destructive", className),
20
+ className: cn(fieldTriggerClassName, "data-[placeholder]:text-input-placeholder", className),
20
21
  ...props
21
22
  });
22
23
  }
@@ -25,11 +25,16 @@ function SelectValue({ ...props }) {
25
25
  function SelectTrigger({ className, children, ...props }) {
26
26
  return /* @__PURE__ */ jsxs(SelectPrimitive.Trigger, {
27
27
  "data-slot": "select-trigger",
28
- className: cn("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive rounded-md border bg-transparent py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "flex h-auto min-h-10 w-full items-center justify-between px-3 text-sm font-medium", className),
28
+ className: cn("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive rounded-md border bg-transparent py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "flex h-auto min-h-10 w-full items-center justify-between gap-2 px-3 text-sm font-normal", className),
29
29
  ...props,
30
30
  children: [children, /* @__PURE__ */ jsx(SelectPrimitive.Icon, {
31
31
  asChild: true,
32
- children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4 opacity-50" })
32
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, {
33
+ className: "text-muted-foreground size-4 shrink-0",
34
+ size: 16,
35
+ strokeWidth: 1,
36
+ absoluteStrokeWidth: true
37
+ })
33
38
  })]
34
39
  });
35
40
  }
@@ -1 +1 @@
1
- export { v as LocalTaskStorage, _ as RedisTaskStorage, i as TaskPanel, s as TaskPanelActions, o as TaskPanelCounter, c as TaskPanelHeader, a as TaskPanelItem, h as TaskQueue, t as TaskQueueDropdown, m as TaskQueueProvider, r as TaskQueueTrigger, n as TaskSummaryDialog, y as createOrgMetadata, b as createProjectMetadata, x as createUserMetadata, g as detectStorage, l as getContextLabel, u as matchesCurrentScope, d as useCurrentScope, p as useTaskQueue, f as useTasksWithLabels } from "../task-queue-dropdown-DuCAAybs.mjs";
1
+ export { v as LocalTaskStorage, _ as RedisTaskStorage, i as TaskPanel, s as TaskPanelActions, o as TaskPanelCounter, c as TaskPanelHeader, a as TaskPanelItem, h as TaskQueue, t as TaskQueueDropdown, m as TaskQueueProvider, r as TaskQueueTrigger, n as TaskSummaryDialog, y as createOrgMetadata, b as createProjectMetadata, x as createUserMetadata, g as detectStorage, l as getContextLabel, u as matchesCurrentScope, d as useCurrentScope, p as useTaskQueue, f as useTasksWithLabels } from "../task-queue-dropdown-BflEFiMi.mjs";
@@ -4,7 +4,7 @@ import { t as SpinnerIcon } from "./spinner.icon-BiUnMAxw.mjs";
4
4
  import { t as Button } from "./button-Cn4KagBO.mjs";
5
5
  import { t as Icon } from "./icon-wrapper-CIk2th6R.mjs";
6
6
  import { t as Dialog } from "./dialog-C8RXIQYm.mjs";
7
- import { t as ResponsiveDropdown } from "./responsive-dropdown-DsWgpE_i.mjs";
7
+ import { t as ResponsiveDropdown } from "./responsive-dropdown-B9cDUeHt.mjs";
8
8
  import { a as TooltipTrigger, n as Tooltip, r as TooltipContent, t as Tooltip$1 } from "./tooltip-OIySjJWW.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";
@@ -1 +1 @@
1
- export { t as TimePicker } from "../time-picker-B_am4eAK.mjs";
1
+ export { t as TimePicker } from "../time-picker-BFwH-Vd3.mjs";
@@ -1,5 +1,5 @@
1
1
  import { t as useDeprecationWarning } from "./use-deprecation-warning-BS1V4IS5.mjs";
2
- import { n as TimePicker$1 } from "./picker-DC3GErYg.mjs";
2
+ import { n as TimePicker$1 } from "./picker-BHPtncpv.mjs";
3
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
4
  // src/components/features/time-picker/time-picker.tsx
5
5
  const STEP_VALUES = [
@@ -2,9 +2,9 @@ import { t as cn } from "./utils-CTIuhCOs.mjs";
2
2
  import { t as Button } from "./button-Cn4KagBO.mjs";
3
3
  import { Calendar } from "./calendar/index.mjs";
4
4
  import { t as Input } from "./input-DsT5qkJn.mjs";
5
- import { t as ResponsivePopover } from "./responsive-popover-DJYd8lOK.mjs";
6
- import { i as SelectItem, l as SelectTrigger, n as SelectContent, t as Select, u as SelectValue } from "./select-DemYhwnG.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-yy1Acntn.mjs";
5
+ import { t as ResponsivePopover } from "./responsive-popover-B_pUxrZ1.mjs";
6
+ import { i as SelectItem, l as SelectTrigger, n as SelectContent, t as Select, u as SelectValue } from "./select-B0Xlz-wD.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-CqGGJTLS.mjs";
8
8
  import { t as useDeprecationWarning } from "./use-deprecation-warning-BS1V4IS5.mjs";
9
9
  import { CalendarIcon, Globe } from "lucide-react";
10
10
  import { useCallback, useEffect, useId, useRef, useState } from "react";
@@ -13,16 +13,22 @@ function getBreakpoint() {
13
13
  * Returns the current viewport breakpoint tier.
14
14
  *
15
15
  * Breakpoints: mobile <768px, tablet 768–1023px, desktop ≥1024px.
16
- * SSR-safe: defaults to 'desktop' on server; client corrects on mount.
16
+ *
17
+ * `initial` is the tier the server rendered with. Pass the viewport the server
18
+ * already knows about (for example a viewport client hint) so the hydration
19
+ * render matches; without one it defaults to 'desktop'. The client measures on
20
+ * mount and tracks resizes after that, so the first render stays deterministic
21
+ * on both sides.
17
22
  */
18
- function useBreakpoint() {
19
- const [breakpoint, setBreakpoint] = useState(getBreakpoint);
23
+ function useBreakpoint(initial = "desktop") {
24
+ const [breakpoint, setBreakpoint] = useState(initial);
20
25
  useEffect(() => {
21
- const mqTablet = window.matchMedia(`(min-width: ${TABLET_MIN}px)`);
22
- const mqDesktop = window.matchMedia(`(min-width: ${DESKTOP_MIN}px)`);
23
26
  const update = () => {
24
27
  setBreakpoint(getBreakpoint());
25
28
  };
29
+ update();
30
+ const mqTablet = window.matchMedia(`(min-width: ${TABLET_MIN}px)`);
31
+ const mqDesktop = window.matchMedia(`(min-width: ${DESKTOP_MIN}px)`);
26
32
  mqTablet.addEventListener("change", update);
27
33
  mqDesktop.addEventListener("change", update);
28
34
  return () => {
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Shared look for every input-like trigger: Select, Autocomplete, MultiSelect
3
+ * and the date/time pickers. They sit next to each other in toolbars and
4
+ * filter rows, so they must line up with `Input` and with each other:
5
+ *
6
+ * - 12px (`px-3`) inline padding, the same as `Input`
7
+ * - `text-sm`, regular weight for both the value and the placeholder
8
+ * - 8px (`gap-2`) between the leading icon, the value and trailing icons
9
+ * - trailing chevrons are 16px and muted, with no extra margin, so the
10
+ * chevron sits 12px from the right edge on every trigger
11
+ * - clear (X) icons are 14px: lucide's X fills more of its box than the
12
+ * chevron, so at 16px it looks heavier than the chevron beside it
13
+ *
14
+ * Internal: not part of the public `utils` entry.
15
+ */
16
+ /** Box, type and focus styles. Height is left to each component. */
17
+ export declare const fieldTriggerClassName: string;
18
+ /** Placeholder text inside a trigger. Same colour as `Input`'s placeholder. */
19
+ export declare const fieldPlaceholderClassName = "text-input-placeholder";
20
+ /** Leading icons and the trailing chevron. Clear icons use `size-3.5`. */
21
+ export declare const fieldIconClassName = "text-muted-foreground size-4 shrink-0";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@datum-cloud/datum-ui",
3
3
  "type": "module",
4
- "version": "3.8.0",
4
+ "version": "3.10.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "url": "https://github.com/datum-cloud/datum-ui"