@giddaa-housing/ui 2.0.0 → 3.0.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 (62) hide show
  1. package/css/generated/shared.css +1 -1
  2. package/css/theme.css +24 -0
  3. package/dist/accordion.js +1 -1
  4. package/dist/{button-BZIeyUw6.d.ts → button-DW5OijoR.d.ts} +1 -1
  5. package/dist/button-group.d.ts +1 -1
  6. package/dist/button-group.js +2 -2
  7. package/dist/button.d.ts +1 -1
  8. package/dist/button.js +4 -3
  9. package/dist/call-card.d.ts +131 -0
  10. package/dist/call-card.js +300 -0
  11. package/dist/card.d.ts +4 -2
  12. package/dist/card.js +7 -7
  13. package/dist/carousel.js +12 -9
  14. package/dist/chat.d.ts +208 -0
  15. package/dist/chat.js +528 -0
  16. package/dist/checkbox.js +1 -1
  17. package/dist/combobox.d.ts +48 -1
  18. package/dist/combobox.js +78 -5
  19. package/dist/cta.d.ts +1 -1
  20. package/dist/data-table.d.ts +1 -1
  21. package/dist/data-table.js +1 -1
  22. package/dist/date-picker.d.ts +5 -2
  23. package/dist/date-picker.js +11 -6
  24. package/dist/dialog.js +2 -2
  25. package/dist/dropdown-menu.js +1 -1
  26. package/dist/file-upload.js +3 -3
  27. package/dist/infinite-scroll.d.ts +40 -0
  28. package/dist/infinite-scroll.js +125 -0
  29. package/dist/infotip.js +1 -1
  30. package/dist/input-group.d.ts +1 -1
  31. package/dist/media-player.js +15 -8
  32. package/dist/message.d.ts +263 -0
  33. package/dist/message.js +524 -0
  34. package/dist/multi-step-form.js +10 -6
  35. package/dist/page-header.d.ts +6 -6
  36. package/dist/page-header.js +21 -7
  37. package/dist/pagination.d.ts +1 -1
  38. package/dist/picker-xSTzeYhc.js +50 -0
  39. package/dist/popover.d.ts +2 -2
  40. package/dist/popover.js +3 -2
  41. package/dist/price-tag.js +1 -1
  42. package/dist/property-listing-card.d.ts +1 -1
  43. package/dist/radio-group.js +1 -1
  44. package/dist/rich-text-editor.js +3 -3
  45. package/dist/select.js +1 -1
  46. package/dist/sheet.js +1 -1
  47. package/dist/sidebar.d.ts +1 -1
  48. package/dist/sidebar.js +5 -5
  49. package/dist/skeleton.js +1 -1
  50. package/dist/slider.js +3 -2
  51. package/dist/styles.css +1893 -160
  52. package/dist/switch.js +3 -3
  53. package/dist/table.js +2 -2
  54. package/dist/tabs.js +4 -4
  55. package/dist/time-picker.d.ts +4 -1
  56. package/dist/time-picker.js +93 -12
  57. package/dist/toast.js +1 -1
  58. package/dist/tooltip.d.ts +2 -1
  59. package/dist/tooltip.js +9 -2
  60. package/dist/use-reduced-motion-BDvOK14x.js +17 -0
  61. package/package.json +18 -1
  62. package/dist/picker-lzgmsNfG.js +0 -32
package/dist/switch.js CHANGED
@@ -5,7 +5,7 @@ import { jsx } from "react/jsx-runtime";
5
5
  import { cva } from "class-variance-authority";
6
6
  import { Switch as Switch$1 } from "@base-ui/react/switch";
7
7
  //#region src/switch.tsx
8
- const switchVariants = cva("peer group/switch relative inline-flex shrink-0 items-center rounded-full border bg-clip-padding p-0.5 transition-[background-color,border-color,box-shadow,opacity] outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] aria-invalid:border-line-danger aria-invalid:ring-3 aria-invalid:ring-line-danger/20 aria-invalid:focus-visible:border-line-danger aria-invalid:focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-danger)] data-checked:border-action-primary data-checked:bg-action-primary data-unchecked:border-line data-unchecked:bg-transparent data-[loading=true]:border-action-primary data-[loading=true]:bg-action-primary data-disabled:border-line-subtle! data-disabled:bg-transparent! data-disabled:cursor-not-allowed data-disabled:opacity-60 h-6 w-10 [--switch-spinner-size:0.75rem] [--switch-thumb-size:18px] [--switch-track-width:2.5rem] group-data-[size=sm]/field:h-5 group-data-[size=sm]/field:w-8 group-data-[size=sm]/field:[--switch-spinner-size:0.625rem] group-data-[size=sm]/field:[--switch-thumb-size:14px] group-data-[size=sm]/field:[--switch-track-width:2rem] group-data-[size=md]/field:h-6 group-data-[size=md]/field:w-10 group-data-[size=md]/field:[--switch-spinner-size:0.75rem] group-data-[size=md]/field:[--switch-thumb-size:18px] group-data-[size=md]/field:[--switch-track-width:2.5rem] group-data-[size=lg]/field:h-7 group-data-[size=lg]/field:w-12 group-data-[size=lg]/field:[--switch-spinner-size:0.875rem] group-data-[size=lg]/field:[--switch-thumb-size:22px] group-data-[size=lg]/field:[--switch-track-width:3rem]", { variants: { size: {
8
+ const switchVariants = cva("peer group/switch relative inline-flex shrink-0 items-center rounded-full border bg-clip-padding p-0.5 transition-[background-color,border-color,box-shadow,opacity,scale] duration-[var(--duration-motion-press)] ease-gdt-out active:scale-[0.97] motion-reduce:active:scale-100 outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] aria-invalid:border-line-danger aria-invalid:ring-3 aria-invalid:ring-line-danger/20 aria-invalid:focus-visible:border-line-danger aria-invalid:focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-danger)] data-checked:border-action-primary data-checked:bg-action-primary data-unchecked:border-line data-unchecked:bg-transparent data-[loading=true]:border-action-primary data-[loading=true]:bg-action-primary data-disabled:border-line-subtle! data-disabled:bg-transparent! data-disabled:cursor-not-allowed data-disabled:opacity-60 data-disabled:active:scale-100 h-6 w-10 [--switch-spinner-size:0.75rem] [--switch-thumb-size:18px] [--switch-track-width:2.5rem] group-data-[size=sm]/field:h-5 group-data-[size=sm]/field:w-8 group-data-[size=sm]/field:[--switch-spinner-size:0.625rem] group-data-[size=sm]/field:[--switch-thumb-size:14px] group-data-[size=sm]/field:[--switch-track-width:2rem] group-data-[size=md]/field:h-6 group-data-[size=md]/field:w-10 group-data-[size=md]/field:[--switch-spinner-size:0.75rem] group-data-[size=md]/field:[--switch-thumb-size:18px] group-data-[size=md]/field:[--switch-track-width:2.5rem] group-data-[size=lg]/field:h-7 group-data-[size=lg]/field:w-12 group-data-[size=lg]/field:[--switch-spinner-size:0.875rem] group-data-[size=lg]/field:[--switch-thumb-size:22px] group-data-[size=lg]/field:[--switch-track-width:3rem]", { variants: { size: {
9
9
  sm: "h-5 w-8 [--switch-spinner-size:0.625rem] [--switch-thumb-size:14px] [--switch-track-width:2rem]",
10
10
  md: "h-6 w-10 [--switch-spinner-size:0.75rem] [--switch-thumb-size:18px] [--switch-track-width:2.5rem]",
11
11
  lg: "h-7 w-12 [--switch-spinner-size:0.875rem] [--switch-thumb-size:22px] [--switch-track-width:3rem]"
@@ -38,11 +38,11 @@ function Switch({ className, disabled = false, loading = false, readOnly = false
38
38
  ...props,
39
39
  children: /* @__PURE__ */ jsx(Switch$1.Thumb, {
40
40
  "data-slot": "switch-thumb",
41
- className: cn("pointer-events-none grid size-(--switch-thumb-size) translate-x-0 place-items-center rounded-full bg-fg-on-brand text-fg-brand ring-0 transition-transform duration-200 ease-out data-checked:translate-x-[calc(var(--switch-track-width)-var(--switch-thumb-size)-4px)]", loading && "translate-x-[calc(var(--switch-track-width)-var(--switch-thumb-size)-4px)]", isDisabled && "translate-x-0! bg-line text-fg-caption-placeholder"),
41
+ className: cn("pointer-events-none grid size-(--switch-thumb-size) translate-x-0 place-items-center rounded-full bg-fg-on-brand text-fg-brand ring-0 transition-[translate] duration-200 ease-out motion-reduce:transition-none data-checked:translate-x-[calc(var(--switch-track-width)-var(--switch-thumb-size)-4px)]", loading && "translate-x-[calc(var(--switch-track-width)-var(--switch-thumb-size)-4px)]", isDisabled && "translate-x-0! bg-line text-fg-caption-placeholder"),
42
42
  children: loading && !isDisabled && /* @__PURE__ */ jsx("span", {
43
43
  "aria-hidden": "true",
44
44
  "data-slot": "switch-spinner",
45
- className: "size-(--switch-spinner-size) animate-spin rounded-full border-2 border-current border-r-transparent"
45
+ className: "size-(--switch-spinner-size) animate-spin rounded-full border-2 border-current border-r-transparent motion-reduce:animate-none"
46
46
  })
47
47
  })
48
48
  });
package/dist/table.js CHANGED
@@ -79,7 +79,7 @@ function TableRow({ className, ...props }) {
79
79
  function TableHead({ className, pinnedSide, ...props }) {
80
80
  return /* @__PURE__ */ jsx("th", {
81
81
  "data-slot": "table-head",
82
- className: cn("relative h-14 px-6 py-4 text-left align-middle bg-surface-raised", "text-gdt-sm font-semibold text-fg-secondary", "whitespace-nowrap has-[[role=checkbox]]:pr-0", getPinnedDividerClassName(pinnedSide), className),
82
+ className: cn("relative h-14 px-6 py-4 text-left align-middle bg-surface-raised", "text-gdt-sm font-semibold text-fg-secondary", "break-words has-[[role=checkbox]]:pr-0", getPinnedDividerClassName(pinnedSide), className),
83
83
  ...props
84
84
  });
85
85
  }
@@ -95,7 +95,7 @@ function TableHead({ className, pinnedSide, ...props }) {
95
95
  function TableCell({ className, pinned = false, pinnedSide, ...props }) {
96
96
  return /* @__PURE__ */ jsx("td", {
97
97
  "data-slot": "table-cell",
98
- className: cn("relative h-14 px-6 py-4 align-middle text-gdt-sm text-fg-primary", "whitespace-nowrap", pinned && "bg-canvas transition-[background-color,filter] group-hover:bg-surface group-active:bg-surface-raised group-data-[state=selected]:bg-surface-brand-subtle group-data-[state=selected]:group-hover:bg-surface-brand-subtle group-data-[state=selected]:group-hover:brightness-95 group-data-[state=selected]:group-active:brightness-90", getPinnedDividerClassName(pinnedSide), className),
98
+ className: cn("relative h-14 px-6 py-4 align-middle text-gdt-sm text-fg-primary", "break-words", pinned && "bg-canvas transition-[background-color,filter] group-hover:bg-surface group-active:bg-surface-raised group-data-[state=selected]:bg-surface-brand-subtle group-data-[state=selected]:group-hover:bg-surface-brand-subtle group-data-[state=selected]:group-hover:brightness-95 group-data-[state=selected]:group-active:brightness-90", getPinnedDividerClassName(pinnedSide), className),
99
99
  ...props
100
100
  });
101
101
  }
package/dist/tabs.js CHANGED
@@ -24,9 +24,9 @@ function Tabs({ className, orientation = "horizontal", size, ...props }) {
24
24
  children: root
25
25
  }) : root;
26
26
  }
27
- const tabsListVariants = cva(cn("group/tabs-list relative inline-flex w-fit shrink-0 items-center gap-1 text-fg-secondary", "group-data-[orientation=horizontal]/tabs:border-b group-data-[orientation=horizontal]/tabs:border-line-subtle", "group-data-[orientation=vertical]/tabs:flex-col group-data-[orientation=vertical]/tabs:border-l group-data-[orientation=vertical]/tabs:border-line-subtle"), {
27
+ const tabsListVariants = cva(cn("group/tabs-list relative inline-flex w-fit shrink-0 items-center gap-1 text-fg-secondary", "group-data-[orientation=vertical]/tabs:flex-col"), {
28
28
  variants: { variant: {
29
- underline: "rounded-none bg-transparent p-0",
29
+ underline: cn("rounded-none bg-transparent p-0", "group-data-[orientation=horizontal]/tabs:border-b group-data-[orientation=horizontal]/tabs:border-line-subtle", "group-data-[orientation=vertical]/tabs:border-l group-data-[orientation=vertical]/tabs:border-line-subtle"),
30
30
  secondary: "rounded-4xl bg-transparent p-0"
31
31
  } },
32
32
  defaultVariants: { variant: "underline" }
@@ -40,7 +40,7 @@ function TabsList({ className, variant = "underline", size, children, ...props }
40
40
  "data-size": resolvedSize,
41
41
  className: cn(tabsListVariants({ variant: resolvedVariant }), className),
42
42
  ...props,
43
- children: [children, /* @__PURE__ */ jsx(Tabs$1.Indicator, { className: cn("pointer-events-none absolute left-0 top-0 z-0 h-(--active-tab-height) w-(--active-tab-width) translate-x-(--active-tab-left) translate-y-(--active-tab-top) transition-[transform,width,height] duration-200 ease-in-out", "group-data-[variant=secondary]/tabs-list:hidden", "group-data-[variant=underline]/tabs-list:rounded-none group-data-[variant=underline]/tabs-list:bg-line-focus group-data-[variant=underline]/tabs-list:shadow-none", "group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:top-auto group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:bottom-[-1px] group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:h-0.5! group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:translate-y-0", "group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:left-auto group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:right-[-1px] group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:w-0.5! group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:translate-x-0") })]
43
+ children: [children, /* @__PURE__ */ jsx(Tabs$1.Indicator, { className: cn("pointer-events-none absolute left-0 top-0 z-0 h-(--active-tab-height) w-(--active-tab-width) translate-x-(--active-tab-left) translate-y-(--active-tab-top) transition-[translate,width,height] duration-200 ease-in-out motion-reduce:transition-none", "group-data-[variant=secondary]/tabs-list:hidden", "group-data-[variant=underline]/tabs-list:rounded-none group-data-[variant=underline]/tabs-list:bg-line-focus group-data-[variant=underline]/tabs-list:shadow-none", "group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:top-auto group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:bottom-[-1px] group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:h-0.5! group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:translate-y-0", "group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:left-auto group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:right-[-1px] group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:w-0.5! group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:translate-x-0") })]
44
44
  });
45
45
  }
46
46
  /**
@@ -99,7 +99,7 @@ function TabsCount({ className, count, abbreviate, max, loading, children, ...pr
99
99
  "data-slot": "tabs-count",
100
100
  "data-loading": loading || void 0,
101
101
  "aria-busy": loading || void 0,
102
- className: cn("inline-flex items-center justify-center rounded-full font-semibold leading-none transition-[background-color,color]", "group-data-[size=sm]/tabs-list:h-4 group-data-[size=sm]/tabs-list:min-w-4 group-data-[size=sm]/tabs-list:px-1 group-data-[size=sm]/tabs-list:text-[10px]", "group-data-[size=md]/tabs-list:h-5 group-data-[size=md]/tabs-list:min-w-5 group-data-[size=md]/tabs-list:px-1 group-data-[size=md]/tabs-list:text-[11px]", "group-data-[size=lg]/tabs-list:h-5 group-data-[size=lg]/tabs-list:min-w-5 group-data-[size=lg]/tabs-list:px-1.5 group-data-[size=lg]/tabs-list:text-gdt-xs", "group-data-[variant=underline]/tabs-list:bg-surface-raised group-data-[variant=underline]/tabs-list:text-fg-secondary group-data-[variant=underline]/tabs-list:group-data-[active]/tabs-trigger:bg-surface-brand-subtle group-data-[variant=underline]/tabs-list:group-data-[active]/tabs-trigger:text-fg-brand", "group-data-[variant=secondary]/tabs-list:bg-surface-overlay group-data-[variant=secondary]/tabs-list:text-fg-secondary group-data-[variant=secondary]/tabs-list:group-data-[active]/tabs-trigger:bg-surface-brand-subtle group-data-[variant=secondary]/tabs-list:group-data-[active]/tabs-trigger:text-fg-brand", "data-loading:animate-pulse", className),
102
+ className: cn("inline-flex items-center justify-center rounded-full font-semibold leading-none transition-[background-color,color]", "group-data-[size=sm]/tabs-list:h-4 group-data-[size=sm]/tabs-list:min-w-4 group-data-[size=sm]/tabs-list:px-1 group-data-[size=sm]/tabs-list:text-[10px]", "group-data-[size=md]/tabs-list:h-5 group-data-[size=md]/tabs-list:min-w-5 group-data-[size=md]/tabs-list:px-1 group-data-[size=md]/tabs-list:text-[11px]", "group-data-[size=lg]/tabs-list:h-5 group-data-[size=lg]/tabs-list:min-w-5 group-data-[size=lg]/tabs-list:px-1.5 group-data-[size=lg]/tabs-list:text-gdt-xs", "group-data-[variant=underline]/tabs-list:bg-surface-raised group-data-[variant=underline]/tabs-list:text-fg-secondary group-data-[variant=underline]/tabs-list:group-data-[active]/tabs-trigger:bg-surface-brand-subtle group-data-[variant=underline]/tabs-list:group-data-[active]/tabs-trigger:text-fg-brand", "group-data-[variant=secondary]/tabs-list:bg-surface-overlay group-data-[variant=secondary]/tabs-list:text-fg-secondary group-data-[variant=secondary]/tabs-list:group-data-[active]/tabs-trigger:bg-surface-brand-subtle group-data-[variant=secondary]/tabs-list:group-data-[active]/tabs-trigger:text-fg-brand", "data-loading:animate-pulse motion-reduce:data-loading:animate-none", className),
103
103
  ...props,
104
104
  children: content
105
105
  });
@@ -1,3 +1,4 @@
1
+ import { n as InputSize } from "./input-CfoEJ8A6.js";
1
2
  import * as React from "react";
2
3
  //#region src/time-picker.d.ts
3
4
  interface TimePickerProps {
@@ -5,9 +6,11 @@ interface TimePickerProps {
5
6
  onChange?: (time: string | undefined) => void;
6
7
  format?: "12h" | "24h";
7
8
  disabled?: boolean;
9
+ /** Controls the trigger size. The time selection panel is not resized. */
10
+ size?: InputSize;
8
11
  placeholder?: string;
9
12
  className?: string;
10
13
  }
11
- declare function TimePicker({ value, onChange, format, disabled, placeholder, className }: TimePickerProps): React.JSX.Element;
14
+ declare function TimePicker({ value, onChange, format, disabled, size, placeholder, className }: TimePickerProps): React.JSX.Element;
12
15
  //#endregion
13
16
  export { TimePicker, type TimePickerProps };
@@ -1,10 +1,37 @@
1
1
  "use client";
2
2
  import { t as cn } from "./cn-BI_4DMBf.js";
3
+ import { t as useReducedMotion } from "./use-reduced-motion-BDvOK14x.js";
3
4
  import { Popover, PopoverContent } from "./popover.js";
4
- import { n as PickerTrigger, t as PickerFooter } from "./picker-lzgmsNfG.js";
5
+ import { n as PickerFooter, r as PickerTrigger, t as PICKER_COLLISION_AVOIDANCE } from "./picker-xSTzeYhc.js";
5
6
  import { ClockIcon } from "lucide-react";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
7
8
  import * as React from "react";
9
+ //#region src/lib/time-picker-paint.ts
10
+ function getPaintBounds(offset, itemCount, curveClamp) {
11
+ const bound = curveClamp + 1;
12
+ return {
13
+ low: Math.max(0, Math.floor(offset - bound)),
14
+ high: Math.min(itemCount - 1, Math.ceil(offset + bound))
15
+ };
16
+ }
17
+ function createRafScheduler(callback) {
18
+ let frame = null;
19
+ return {
20
+ schedule() {
21
+ if (frame !== null) return;
22
+ frame = requestAnimationFrame(() => {
23
+ frame = null;
24
+ callback();
25
+ });
26
+ },
27
+ cancel() {
28
+ if (frame === null) return;
29
+ cancelAnimationFrame(frame);
30
+ frame = null;
31
+ }
32
+ };
33
+ }
34
+ //#endregion
8
35
  //#region src/time-picker.tsx
9
36
  const ITEM_HEIGHT = 40;
10
37
  const VISIBLE_COUNT = 5;
@@ -56,18 +83,69 @@ function TimeColumn({ label, items, value, onChange }) {
56
83
  const isProgrammatic = React.useRef(false);
57
84
  const onChangeRef = React.useRef(onChange);
58
85
  onChangeRef.current = onChange;
86
+ const reducedMotion = useReducedMotion();
87
+ const reducedMotionRef = React.useRef(reducedMotion);
88
+ reducedMotionRef.current = reducedMotion;
89
+ const paintedIndexesRef = React.useRef(/* @__PURE__ */ new Set());
59
90
  const paintCurve = React.useCallback(() => {
60
91
  const el = scrollRef.current;
61
92
  if (!el) return;
62
93
  const offset = el.scrollTop / ITEM_HEIGHT;
63
- itemRefs.current.forEach((node, index) => {
64
- if (!node) return;
94
+ if (reducedMotionRef.current) {
95
+ const center = Math.round(offset);
96
+ const radius = Math.floor(VISIBLE_COUNT / 2);
97
+ const low = Math.max(0, center - radius);
98
+ const high = Math.min(itemRefs.current.length - 1, center + radius);
99
+ const nextPainted = /* @__PURE__ */ new Set();
100
+ for (let index = low; index <= high; index++) {
101
+ const node = itemRefs.current[index];
102
+ if (!node) continue;
103
+ node.style.opacity = index === center ? "1" : "0.55";
104
+ node.style.transform = "";
105
+ node.style.willChange = "";
106
+ nextPainted.add(index);
107
+ }
108
+ for (const index of paintedIndexesRef.current) {
109
+ if (nextPainted.has(index)) continue;
110
+ const node = itemRefs.current[index];
111
+ if (!node) continue;
112
+ node.style.opacity = "";
113
+ node.style.transform = "";
114
+ node.style.willChange = "";
115
+ }
116
+ paintedIndexesRef.current = nextPainted;
117
+ return;
118
+ }
119
+ const { low, high } = getPaintBounds(offset, itemRefs.current.length, CURVE_CLAMP);
120
+ const nextPainted = /* @__PURE__ */ new Set();
121
+ for (let index = low; index <= high; index++) {
122
+ const node = itemRefs.current[index];
123
+ if (!node) continue;
65
124
  const distance = index - offset;
66
125
  const abs = Math.min(Math.abs(distance), CURVE_CLAMP);
67
126
  const tilt = Math.max(Math.min(distance, CURVE_CLAMP), -3);
68
127
  node.style.opacity = String(Math.max(1 - abs * .28, .2));
69
128
  node.style.transform = `perspective(280px) rotateX(${tilt * -20}deg) scale(${1 - abs * .04})`;
70
- });
129
+ node.style.willChange = "transform, opacity";
130
+ nextPainted.add(index);
131
+ }
132
+ for (const index of paintedIndexesRef.current) {
133
+ if (nextPainted.has(index)) continue;
134
+ const node = itemRefs.current[index];
135
+ if (!node) continue;
136
+ node.style.opacity = "";
137
+ node.style.transform = "";
138
+ node.style.willChange = "";
139
+ }
140
+ paintedIndexesRef.current = nextPainted;
141
+ }, []);
142
+ const paintSchedulerRef = React.useRef(null);
143
+ if (!paintSchedulerRef.current) paintSchedulerRef.current = createRafScheduler(paintCurve);
144
+ const schedulePaintCurve = React.useCallback(() => {
145
+ paintSchedulerRef.current?.schedule();
146
+ }, []);
147
+ React.useEffect(() => {
148
+ return () => paintSchedulerRef.current?.cancel();
71
149
  }, []);
72
150
  React.useEffect(() => {
73
151
  const el = scrollRef.current;
@@ -88,7 +166,7 @@ function TimeColumn({ label, items, value, onChange }) {
88
166
  isProgrammatic.current = true;
89
167
  el.scrollTo({
90
168
  top: idx * ITEM_HEIGHT,
91
- behavior: "smooth"
169
+ behavior: reducedMotionRef.current ? "auto" : "smooth"
92
170
  });
93
171
  setTimeout(() => {
94
172
  isProgrammatic.current = false;
@@ -103,14 +181,14 @@ function TimeColumn({ label, items, value, onChange }) {
103
181
  onChangeRef.current(items[index]);
104
182
  el.scrollTo({
105
183
  top: index * ITEM_HEIGHT,
106
- behavior: "smooth"
184
+ behavior: reducedMotionRef.current ? "auto" : "smooth"
107
185
  });
108
186
  setTimeout(() => {
109
187
  isProgrammatic.current = false;
110
188
  }, 350);
111
189
  }
112
190
  function handleScroll() {
113
- paintCurve();
191
+ schedulePaintCurve();
114
192
  if (isProgrammatic.current) return;
115
193
  const el = scrollRef.current;
116
194
  if (!el) return;
@@ -132,7 +210,7 @@ function TimeColumn({ label, items, value, onChange }) {
132
210
  role: "listbox",
133
211
  "aria-label": label,
134
212
  style: { height: `${VISIBLE_COUNT * ITEM_HEIGHT}px` },
135
- className: "relative snap-y snap-mandatory overflow-y-scroll overscroll-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
213
+ className: "relative snap-y snap-mandatory overflow-y-scroll overscroll-contain scrollbar-none [&::-webkit-scrollbar]:hidden",
136
214
  children: /* @__PURE__ */ jsx("div", {
137
215
  style: {
138
216
  paddingTop: `${SCROLL_PADDING}px`,
@@ -150,7 +228,7 @@ function TimeColumn({ label, items, value, onChange }) {
150
228
  },
151
229
  onClick: () => selectIndex(index),
152
230
  style: { height: `${ITEM_HEIGHT}px` },
153
- className: "flex w-full cursor-pointer snap-center items-center justify-center select-none will-change-transform",
231
+ className: "flex w-full cursor-pointer snap-center items-center justify-center select-none",
154
232
  children: /* @__PURE__ */ jsx("span", {
155
233
  className: cn("text-gdt-sm font-medium transition-colors", dist === 0 ? "text-fg-on-brand" : dist === 1 ? "text-fg-secondary" : "text-fg-caption-placeholder"),
156
234
  children: item
@@ -161,7 +239,7 @@ function TimeColumn({ label, items, value, onChange }) {
161
239
  })]
162
240
  });
163
241
  }
164
- function TimePicker({ value, onChange, format = "12h", disabled = false, placeholder = "Select time", className }) {
242
+ function TimePicker({ value, onChange, format = "12h", disabled = false, size, placeholder = "Select time", className }) {
165
243
  const [open, setOpen] = React.useState(false);
166
244
  const [pending, setPending] = React.useState(() => parseTimeString(value, format));
167
245
  function handleOpenChange(next) {
@@ -191,11 +269,14 @@ function TimePicker({ value, onChange, format = "12h", disabled = false, placeho
191
269
  placeholder,
192
270
  disabled,
193
271
  open,
272
+ size,
194
273
  className
195
274
  }), /* @__PURE__ */ jsxs(PopoverContent, {
196
275
  showArrow: false,
197
- align: "start",
198
- className: "min-w-(--anchor-width) gap-0 overflow-hidden rounded-2xl p-0",
276
+ align: "center",
277
+ side: "bottom",
278
+ collisionAvoidance: PICKER_COLLISION_AVOIDANCE,
279
+ className: "min-w-(--anchor-width) gap-0 overflow-hidden rounded-2xl p-0 border border-line-subtle",
199
280
  children: [
200
281
  /* @__PURE__ */ jsx("div", {
201
282
  className: "flex w-full items-center justify-center gap-2 border-b border-line-subtle",
package/dist/toast.js CHANGED
@@ -133,7 +133,7 @@ function ToastIcon({ type }) {
133
133
  ]
134
134
  });
135
135
  }
136
- const toastRootBaseClassName = "[--gap:12px] [--peek:12px] [--anchor-x:0px] [--anchor-y:0px] [--scale:calc(max(0,1-(var(--toast-placement-index)*0.04)))] [--shrink:calc(1-var(--scale))] [--height:var(--toast-placement-frontmost-height,var(--toast-height))] absolute z-[calc(1000-var(--toast-placement-index))] h-[var(--height)] min-h-[var(--height)] w-[min(335px,calc(100vw-32px))] overflow-visible rounded-lg border border-line bg-surface-overlay text-fg-primary shadow-[var(--elevation-e2-shadow)] pointer-events-auto select-none [transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(var(--collapsed-y))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms] after:absolute after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:pointer-events-auto after:content-[''] data-[expanded]:h-[var(--toast-height)] data-[expanded]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(var(--expanded-y))_scale(1)] data-[starting-style]:opacity-0 data-[starting-style]:[transform:translateX(var(--exit-x))_translateY(var(--exit-y))_scale(var(--scale))] data-[ending-style]:opacity-0 data-[limited]:opacity-0 [&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateX(var(--exit-x))_translateY(var(--exit-y))_scale(var(--scale))] data-[ending-style]:data-[swipe-direction=up]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)-150%))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=up]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)-150%))_scale(1)] data-[ending-style]:data-[swipe-direction=down]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)+150%))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=down]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)+150%))_scale(1)] data-[ending-style]:data-[swipe-direction=left]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)-150%))_translateY(var(--expanded-y))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=left]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)-150%))_translateY(var(--expanded-y))_scale(1)] data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)+150%))_translateY(var(--expanded-y))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)+150%))_translateY(var(--expanded-y))_scale(1)]";
136
+ const toastRootBaseClassName = "[--gap:12px] [--peek:12px] [--anchor-x:0px] [--anchor-y:0px] [--scale:calc(max(0,1-(var(--toast-placement-index)*0.04)))] [--shrink:calc(1-var(--scale))] [--height:var(--toast-placement-frontmost-height,var(--toast-height))] absolute z-[calc(1000-var(--toast-placement-index))] h-[var(--height)] min-h-[var(--height)] w-[min(335px,calc(100vw-32px))] overflow-visible rounded-lg border border-line bg-surface-overlay text-fg-primary shadow-[var(--elevation-e2-shadow)] pointer-events-auto select-none [transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(var(--collapsed-y))_scale(var(--scale))] [transition:transform_var(--duration-motion-surface)_var(--ease-gdt-out),opacity_var(--duration-motion-surface)_var(--ease-gdt-out)] motion-reduce:[transition:opacity_var(--duration-motion-surface)_var(--ease-gdt-out)] data-swiping:transition-none after:absolute after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:pointer-events-auto after:content-[''] data-[expanded]:h-[var(--toast-height)] data-[expanded]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(var(--expanded-y))_scale(1)] data-[starting-style]:opacity-0 data-[starting-style]:[transform:translateX(var(--exit-x))_translateY(var(--exit-y))_scale(var(--scale))] data-[ending-style]:opacity-0 data-[limited]:opacity-0 [&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateX(var(--exit-x))_translateY(var(--exit-y))_scale(var(--scale))] data-[ending-style]:data-[swipe-direction=up]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)-150%))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=up]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)-150%))_scale(1)] data-[ending-style]:data-[swipe-direction=down]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)+150%))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=down]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)+150%))_scale(1)] data-[ending-style]:data-[swipe-direction=left]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)-150%))_translateY(var(--expanded-y))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=left]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)-150%))_translateY(var(--expanded-y))_scale(1)] data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)+150%))_translateY(var(--expanded-y))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)+150%))_translateY(var(--expanded-y))_scale(1)]";
137
137
  function getToastPlacement(item, isRtl = false) {
138
138
  const side = item.positionerProps?.side ?? DEFAULT_TOAST_SIDE;
139
139
  const align = item.positionerProps?.align ?? DEFAULT_TOAST_ALIGN;
package/dist/tooltip.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
2
2
  //#region src/tooltip.d.ts
3
+ declare function TooltipProvider({ delay, timeout, ...props }: Tooltip$1.Provider.Props): import("react").JSX.Element;
3
4
  declare function Tooltip({ ...props }: Tooltip$1.Root.Props): import("react").JSX.Element;
4
5
  declare function TooltipTrigger({ ...props }: Tooltip$1.Trigger.Props): import("react").JSX.Element;
5
6
  type TooltipContentProps = Tooltip$1.Popup.Props & Pick<Tooltip$1.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset"> & Pick<Tooltip$1.Portal.Props, "container"> & {
@@ -7,4 +8,4 @@ type TooltipContentProps = Tooltip$1.Popup.Props & Pick<Tooltip$1.Positioner.Pro
7
8
  };
8
9
  declare function TooltipContent({ className, container, side, sideOffset, align, alignOffset, showArrow, children, ...props }: TooltipContentProps): import("react").JSX.Element;
9
10
  //#endregion
10
- export { Tooltip, TooltipContent, TooltipTrigger };
11
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
package/dist/tooltip.js CHANGED
@@ -3,6 +3,13 @@ import { t as cn } from "./cn-BI_4DMBf.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
5
5
  //#region src/tooltip.tsx
6
+ function TooltipProvider({ delay = 100, timeout = 400, ...props }) {
7
+ return /* @__PURE__ */ jsx(Tooltip$1.Provider, {
8
+ delay,
9
+ timeout,
10
+ ...props
11
+ });
12
+ }
6
13
  function Tooltip({ ...props }) {
7
14
  return /* @__PURE__ */ jsx(Tooltip$1.Root, {
8
15
  "data-slot": "tooltip",
@@ -27,7 +34,7 @@ function TooltipContent({ className, container, side = "top", sideOffset = 6, al
27
34
  className: "pointer-events-none isolate z-50",
28
35
  children: /* @__PURE__ */ jsxs(Tooltip$1.Popup, {
29
36
  "data-slot": "tooltip-content",
30
- className: cn("z-50 relative inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-[6px] border border-line bg-surface-overlay px-3 py-2 text-gdt-sm font-medium text-fg-primary shadow-2 duration-100 has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
37
+ className: cn("z-50 relative inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-[6px] border border-line bg-surface-overlay px-3 py-2 text-gdt-sm font-medium text-fg-primary shadow-2 transition-[opacity,scale,translate] duration-[var(--duration-motion-tooltip)] ease-gdt-out has-data-[slot=kbd]:pr-1.5 data-instant:transition-none data-starting-style:opacity-0 data-starting-style:scale-95 data-ending-style:opacity-0 data-ending-style:scale-95 data-[side=bottom]:data-starting-style:translate-y-2 data-[side=bottom]:data-ending-style:translate-y-2 data-[side=top]:data-starting-style:-translate-y-2 data-[side=top]:data-ending-style:-translate-y-2 data-[side=left]:data-starting-style:translate-x-2 data-[side=left]:data-ending-style:translate-x-2 data-[side=right]:data-starting-style:-translate-x-2 data-[side=right]:data-ending-style:-translate-x-2 data-[side=inline-end]:data-starting-style:-translate-x-2 data-[side=inline-end]:data-ending-style:-translate-x-2 data-[side=inline-start]:data-starting-style:translate-x-2 data-[side=inline-start]:data-ending-style:translate-x-2 motion-reduce:data-starting-style:scale-100 motion-reduce:data-ending-style:scale-100 motion-reduce:data-[side=bottom]:data-starting-style:translate-y-0 motion-reduce:data-[side=bottom]:data-ending-style:translate-y-0 motion-reduce:data-[side=top]:data-starting-style:translate-y-0 motion-reduce:data-[side=top]:data-ending-style:translate-y-0 motion-reduce:data-[side=left]:data-starting-style:translate-x-0 motion-reduce:data-[side=left]:data-ending-style:translate-x-0 motion-reduce:data-[side=right]:data-starting-style:translate-x-0 motion-reduce:data-[side=right]:data-ending-style:translate-x-0 motion-reduce:data-[side=inline-end]:data-starting-style:translate-x-0 motion-reduce:data-[side=inline-end]:data-ending-style:translate-x-0 motion-reduce:data-[side=inline-start]:data-starting-style:translate-x-0 motion-reduce:data-[side=inline-start]:data-ending-style:translate-x-0 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm", className),
31
38
  ...props,
32
39
  children: [children, showArrow ? /* @__PURE__ */ jsx(Tooltip$1.Arrow, { className: "relative block w-3 h-1.5 overflow-clip data-[side=bottom]:top-[-6px] data-[side=left]:right-[-9px] data-[side=left]:rotate-90 data-[side=right]:left-[-9px] data-[side=right]:-rotate-90 data-[side=top]:bottom-[-6px] data-[side=top]:rotate-180 before:content-[''] before:absolute before:bottom-0 before:left-1/2 before:w-[calc(6px*sqrt(2))] before:h-[calc(6px*sqrt(2))] before:bg-surface-overlay before:border before:border-line before:[transform:translate(-50%,50%)_rotate(45deg)]" }) : null]
33
40
  })
@@ -35,4 +42,4 @@ function TooltipContent({ className, container, side = "top", sideOffset = 6, al
35
42
  });
36
43
  }
37
44
  //#endregion
38
- export { Tooltip, TooltipContent, TooltipTrigger };
45
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ //#region src/lib/use-reduced-motion.ts
3
+ const QUERY = "(prefers-reduced-motion: reduce)";
4
+ function subscribeToReducedMotion(onChange) {
5
+ const media = window.matchMedia(QUERY);
6
+ const update = () => onChange(media.matches);
7
+ update();
8
+ media.addEventListener("change", update);
9
+ return () => media.removeEventListener("change", update);
10
+ }
11
+ function useReducedMotion() {
12
+ const [reduced, setReduced] = React.useState(false);
13
+ React.useEffect(() => subscribeToReducedMotion(setReduced), []);
14
+ return reduced;
15
+ }
16
+ //#endregion
17
+ export { useReducedMotion as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@giddaa-housing/ui",
3
- "version": "2.0.0",
3
+ "version": "3.0.0",
4
4
  "description": "Giddaa reusable UI component library.",
5
5
  "type": "module",
6
6
  "private": false,
@@ -65,6 +65,10 @@
65
65
  "types": "./dist/calendar.d.ts",
66
66
  "import": "./dist/calendar.js"
67
67
  },
68
+ "./call-card": {
69
+ "types": "./dist/call-card.d.ts",
70
+ "import": "./dist/call-card.js"
71
+ },
68
72
  "./card": {
69
73
  "types": "./dist/card.d.ts",
70
74
  "import": "./dist/card.js"
@@ -77,6 +81,10 @@
77
81
  "types": "./dist/chart.d.ts",
78
82
  "import": "./dist/chart.js"
79
83
  },
84
+ "./chat": {
85
+ "types": "./dist/chat.d.ts",
86
+ "import": "./dist/chat.js"
87
+ },
80
88
  "./checkbox": {
81
89
  "types": "./dist/checkbox.d.ts",
82
90
  "import": "./dist/checkbox.js"
@@ -161,6 +169,10 @@
161
169
  "types": "./dist/infotip.d.ts",
162
170
  "import": "./dist/infotip.js"
163
171
  },
172
+ "./infinite-scroll": {
173
+ "types": "./dist/infinite-scroll.d.ts",
174
+ "import": "./dist/infinite-scroll.js"
175
+ },
164
176
  "./input": {
165
177
  "types": "./dist/input.d.ts",
166
178
  "import": "./dist/input.js"
@@ -213,6 +225,10 @@
213
225
  "types": "./dist/media-player.d.ts",
214
226
  "import": "./dist/media-player.js"
215
227
  },
228
+ "./message": {
229
+ "types": "./dist/message.d.ts",
230
+ "import": "./dist/message.js"
231
+ },
216
232
  "./multi-step-form": {
217
233
  "types": "./dist/multi-step-form.d.ts",
218
234
  "import": "./dist/multi-step-form.js"
@@ -383,6 +399,7 @@
383
399
  },
384
400
  "dependencies": {
385
401
  "@base-ui/react": "^1.5.0",
402
+ "@tanstack/react-virtual": "^3.14.7",
386
403
  "@tiptap/extension-color": "^3.22.5",
387
404
  "@tiptap/extension-image": "^3.22.5",
388
405
  "@tiptap/extension-placeholder": "^3.22.5",
@@ -1,32 +0,0 @@
1
- import { t as cn } from "./cn-BI_4DMBf.js";
2
- import { Button } from "./button.js";
3
- import { PopoverTrigger } from "./popover.js";
4
- import { jsx, jsxs } from "react/jsx-runtime";
5
- //#region src/lib/picker.tsx
6
- function PickerTrigger({ icon: Icon, displayValue, placeholder, disabled, open, className }) {
7
- return /* @__PURE__ */ jsxs(PopoverTrigger, {
8
- disabled,
9
- className: cn("flex h-10 w-full items-center justify-between rounded-full border px-3.5 text-gdt-sm transition-[border-color,box-shadow] outline-none", disabled ? "cursor-not-allowed border-line-subtle bg-surface text-fg-caption-placeholder" : open ? "border-line-focus bg-canvas text-fg-primary inset-ring-1 inset-ring-line-focus" : "border-line bg-canvas text-fg-primary hover:border-line-strong", className),
10
- children: [/* @__PURE__ */ jsx("span", {
11
- className: cn("min-w-0 truncate", !displayValue && "text-fg-caption-placeholder"),
12
- children: displayValue || placeholder
13
- }), /* @__PURE__ */ jsx(Icon, { className: cn("ml-2 size-4 shrink-0", disabled ? "text-fg-caption-placeholder" : "text-fg-secondary") })]
14
- });
15
- }
16
- function PickerFooter({ secondaryLabel, onSecondary, onApply }) {
17
- return /* @__PURE__ */ jsxs("div", {
18
- className: "flex w-full items-center justify-between border-t border-line-subtle px-4 py-3",
19
- children: [/* @__PURE__ */ jsx(Button, {
20
- variant: "tertiary-outline",
21
- size: "sm",
22
- onClick: onSecondary,
23
- children: secondaryLabel
24
- }), /* @__PURE__ */ jsx(Button, {
25
- size: "sm",
26
- onClick: onApply,
27
- children: "Apply"
28
- })]
29
- });
30
- }
31
- //#endregion
32
- export { PickerTrigger as n, PickerFooter as t };