@giddaa-housing/ui 3.5.0 → 3.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 (101) hide show
  1. package/css/components.css +13 -0
  2. package/css/generated/shared.css +1 -1
  3. package/dist/badge.d.ts +5 -1
  4. package/dist/badge.js +19 -5
  5. package/dist/bar-chart.d.ts +1 -1
  6. package/dist/bullet-chart.d.ts +1 -1
  7. package/dist/button-BS5KCibF.d.ts +33 -0
  8. package/dist/button-group.d.ts +1 -1
  9. package/dist/button.d.ts +1 -1
  10. package/dist/button.js +49 -21
  11. package/dist/calendar.js +1 -1
  12. package/dist/carousel.d.ts +4 -2
  13. package/dist/carousel.js +11 -14
  14. package/dist/chart.d.ts +1 -1
  15. package/dist/chat.d.ts +1 -1
  16. package/dist/checkbox.d.ts +2 -2
  17. package/dist/checkbox.js +20 -6
  18. package/dist/{combobox-B7cKFJ9V.js → combobox-CACVdp1R.js} +41 -9
  19. package/dist/combobox.d.ts +8 -3
  20. package/dist/combobox.js +2 -2
  21. package/dist/cta.d.ts +1 -1
  22. package/dist/data-table.d.ts +2 -2
  23. package/dist/date-picker.d.ts +3 -3
  24. package/dist/date-picker.js +1 -1
  25. package/dist/dialog.d.ts +3 -1
  26. package/dist/dialog.js +9 -5
  27. package/dist/dropdown-menu.d.ts +1 -1
  28. package/dist/field.d.ts +4 -1
  29. package/dist/field.js +28 -11
  30. package/dist/footer.d.ts +2 -2
  31. package/dist/funnel-chart.d.ts +1 -1
  32. package/dist/heatmap-chart.d.ts +1 -1
  33. package/dist/input-group.d.ts +6 -6
  34. package/dist/input-group.js +38 -13
  35. package/dist/input-otp.d.ts +2 -2
  36. package/dist/input-otp.js +31 -14
  37. package/dist/input-size-context-BMhves-J.d.ts +13 -0
  38. package/dist/input-size-context.d.ts +2 -2
  39. package/dist/input-size-context.js +9 -2
  40. package/dist/input.d.ts +20 -2
  41. package/dist/input.js +30 -11
  42. package/dist/line-chart.d.ts +1 -1
  43. package/dist/mask-input.d.ts +1 -1
  44. package/dist/match.d.ts +5 -2
  45. package/dist/match.js +182 -26
  46. package/dist/media-gallery-hero.js +9 -7
  47. package/dist/mobile-sidebar.js +1 -0
  48. package/dist/number-input.d.ts +2 -2
  49. package/dist/number-input.js +2 -2
  50. package/dist/pagination.d.ts +1 -1
  51. package/dist/phone-input.d.ts +2 -2
  52. package/dist/phone-input.js +5 -4
  53. package/dist/picker-BTXBrsl4.js +62 -0
  54. package/dist/{picker-CsnHtbe4.d.ts → picker-j3txxA5t.d.ts} +2 -2
  55. package/dist/pie-chart.d.ts +1 -1
  56. package/dist/{popover-DSlPeH7x.d.ts → popover-CNymD33m.d.ts} +1 -1
  57. package/dist/popover.d.ts +1 -1
  58. package/dist/property-listing-card.d.ts +7 -3
  59. package/dist/property-listing-card.js +25 -8
  60. package/dist/radar-chart.d.ts +1 -1
  61. package/dist/radio-group.d.ts +2 -2
  62. package/dist/radio-group.js +23 -9
  63. package/dist/rich-text-editor.d.ts +1 -1
  64. package/dist/scatter-chart.d.ts +1 -1
  65. package/dist/scroll-spy.d.ts +8 -2
  66. package/dist/scroll-spy.js +13 -13
  67. package/dist/section-jumper.d.ts +31 -0
  68. package/dist/section-jumper.js +276 -0
  69. package/dist/select.d.ts +9 -4
  70. package/dist/select.js +112 -19
  71. package/dist/sheet.d.ts +3 -1
  72. package/dist/sheet.js +9 -5
  73. package/dist/sidebar.d.ts +2 -2
  74. package/dist/sidebar.js +1 -0
  75. package/dist/size-context-BVhHduLi.d.ts +33 -0
  76. package/dist/size-context.d.ts +2 -2
  77. package/dist/size-context.js +30 -1
  78. package/dist/slider.d.ts +5 -3
  79. package/dist/slider.js +25 -10
  80. package/dist/sonar.d.ts +1 -1
  81. package/dist/sonar.js +1 -1
  82. package/dist/sparkline.d.ts +1 -1
  83. package/dist/styles.css +1576 -258
  84. package/dist/switch.d.ts +2 -2
  85. package/dist/switch.js +20 -6
  86. package/dist/tabs.d.ts +1 -1
  87. package/dist/tag.d.ts +1 -1
  88. package/dist/textarea.d.ts +17 -1
  89. package/dist/textarea.js +23 -9
  90. package/dist/time-picker.d.ts +3 -3
  91. package/dist/time-picker.js +1 -1
  92. package/dist/tree-map.d.ts +1 -1
  93. package/dist/video-player-dialog.js +3 -2
  94. package/dist/waterfall-chart.d.ts +1 -1
  95. package/package.json +5 -1
  96. package/dist/button-DW5OijoR.d.ts +0 -17
  97. package/dist/input-CfoEJ8A6.d.ts +0 -12
  98. package/dist/input-size-context-C-SFx9sx.d.ts +0 -10
  99. package/dist/picker-DmIiQKLJ.js +0 -45
  100. package/dist/size-context-BX6kAdVj.d.ts +0 -11
  101. package/dist/textarea-IS_D8pXf.d.ts +0 -11
package/dist/match.js CHANGED
@@ -1,55 +1,124 @@
1
1
  "use client";
2
2
  import { ChevronDown } from "./icons.js";
3
3
  import { cn } from "./utils/cn.js";
4
+ import { resolveResponsiveComponentSize, useComponentSizeValue } from "./size-context.js";
4
5
  import { CircularProgress } from "./progress.js";
5
6
  import { jsx, jsxs } from "react/jsx-runtime";
6
7
  import { cva } from "class-variance-authority";
7
8
  //#region src/match.tsx
8
- const matchVariants = cva("inline-flex h-8 w-fit shrink-0 items-center rounded-full border border-line-subtle bg-surface text-fg-primary shadow-none transition-[background-color,border-color,box-shadow] outline-none focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] disabled:pointer-events-none disabled:opacity-60", {
9
- variants: { variant: {
10
- bar: "gap-2 px-3",
11
- donut: "gap-3 pl-2 pr-3"
12
- } },
13
- defaultVariants: { variant: "bar" }
9
+ const matchVariants = cva("inline-flex w-fit shrink-0 items-center rounded-full border border-line-subtle bg-surface text-fg-primary shadow-none transition-[background-color,border-color,box-shadow] outline-none focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] disabled:pointer-events-none disabled:opacity-60", {
10
+ variants: {
11
+ variant: {
12
+ bar: "",
13
+ donut: ""
14
+ },
15
+ size: {
16
+ sm: "h-7 text-gdt-subtext",
17
+ md: "h-8 text-gdt-xs",
18
+ lg: "h-10 text-gdt-sm"
19
+ }
20
+ },
21
+ compoundVariants: [
22
+ {
23
+ variant: "bar",
24
+ size: "sm",
25
+ className: "gap-1.5 px-2.5"
26
+ },
27
+ {
28
+ variant: "bar",
29
+ size: "md",
30
+ className: "gap-2 px-3"
31
+ },
32
+ {
33
+ variant: "bar",
34
+ size: "lg",
35
+ className: "gap-2.5 px-3.5"
36
+ },
37
+ {
38
+ variant: "donut",
39
+ size: "sm",
40
+ className: "gap-2 pl-1.5 pr-2.5"
41
+ },
42
+ {
43
+ variant: "donut",
44
+ size: "md",
45
+ className: "gap-3 pl-2 pr-3"
46
+ },
47
+ {
48
+ variant: "donut",
49
+ size: "lg",
50
+ className: "gap-3.5 pl-2.5 pr-3.5"
51
+ }
52
+ ],
53
+ defaultVariants: {
54
+ variant: "bar",
55
+ size: "md"
56
+ }
14
57
  });
58
+ const matchDonutSizes = {
59
+ sm: {
60
+ pixelSize: 20,
61
+ strokeWidth: 3
62
+ },
63
+ md: {
64
+ pixelSize: 24,
65
+ strokeWidth: 4
66
+ },
67
+ lg: {
68
+ pixelSize: 28,
69
+ strokeWidth: 4
70
+ }
71
+ };
72
+ const matchBarSizes = {
73
+ sm: "h-1 w-12",
74
+ md: "h-1.5 w-15",
75
+ lg: "h-2 w-18"
76
+ };
77
+ const matchChevronSizes = {
78
+ sm: "size-2.5",
79
+ md: "size-3",
80
+ lg: "size-3.5"
81
+ };
15
82
  function normalizeMatchValue(value) {
16
83
  if (!Number.isFinite(value)) return 0;
17
84
  return Math.min(100, Math.max(0, Math.round(value)));
18
85
  }
19
- function Match({ className, value, variant = "bar", label = "Match", showChevron = true, type = "button", "aria-label": ariaLabel, ...props }) {
86
+ function Match({ className, value, variant = "bar", size, label = "Match", showChevron = true, type = "button", "aria-label": ariaLabel, ...props }) {
87
+ const sizeValue = useComponentSizeValue(size);
88
+ const resolvedSizes = resolveResponsiveComponentSize(sizeValue);
89
+ const responsive = typeof sizeValue !== "string";
90
+ const resolvedVariant = variant ?? "bar";
20
91
  const progress = normalizeMatchValue(value);
21
92
  const text = `${progress}% ${label}`;
93
+ const rootSizeClasses = cn(matchVariants({
94
+ variant: resolvedVariant,
95
+ size: resolvedSizes.base
96
+ }), responsive && matchBreakpointClasses(resolvedVariant, "md", resolvedSizes.md), responsive && matchBreakpointClasses(resolvedVariant, "lg", resolvedSizes.lg));
22
97
  return /* @__PURE__ */ jsxs("button", {
23
98
  type,
24
99
  "aria-label": ariaLabel ?? text,
25
100
  "data-slot": "match",
26
- "data-variant": variant,
27
- className: cn(matchVariants({ variant }), className),
101
+ "data-variant": resolvedVariant,
102
+ "data-size": resolvedSizes.base,
103
+ "data-size-md": responsive ? resolvedSizes.md : void 0,
104
+ "data-size-lg": responsive ? resolvedSizes.lg : void 0,
105
+ className: cn(rootSizeClasses, className),
28
106
  ...props,
29
107
  children: [
30
- variant === "donut" ? /* @__PURE__ */ jsx(CircularProgress, {
31
- "aria-hidden": "true",
32
- role: "presentation",
33
- "data-slot": "match-donut",
34
- value: progress,
35
- pixelSize: 24,
36
- strokeWidth: 4,
37
- strokeLinecap: "butt",
38
- className: "shrink-0",
39
- children: /* @__PURE__ */ jsxs("span", {
40
- className: "sr-only",
41
- children: [progress, "%"]
42
- })
108
+ resolvedVariant === "donut" ? /* @__PURE__ */ jsx(MatchDonut, {
109
+ progress,
110
+ sizes: resolvedSizes,
111
+ responsive
43
112
  }) : null,
44
113
  /* @__PURE__ */ jsx("span", {
45
114
  "data-slot": "match-label",
46
- className: "shrink-0 text-[10px] font-bold leading-3",
115
+ className: "shrink-0 font-bold",
47
116
  children: text
48
117
  }),
49
- variant === "bar" ? /* @__PURE__ */ jsx("span", {
118
+ resolvedVariant === "bar" ? /* @__PURE__ */ jsx("span", {
50
119
  "aria-hidden": "true",
51
120
  "data-slot": "match-bar-track",
52
- className: "relative h-1.5 w-15 shrink-0 overflow-hidden rounded-full bg-surface-raised",
121
+ className: cn("relative shrink-0 overflow-hidden rounded-full bg-surface-raised", matchBarSizes[resolvedSizes.base], responsive && responsiveClass("md", matchBarSizes[resolvedSizes.md]), responsive && responsiveClass("lg", matchBarSizes[resolvedSizes.lg])),
53
122
  children: /* @__PURE__ */ jsx("span", {
54
123
  "data-slot": "match-bar-fill",
55
124
  className: "absolute inset-y-0 left-0 rounded-full bg-action-primary",
@@ -59,10 +128,97 @@ function Match({ className, value, variant = "bar", label = "Match", showChevron
59
128
  showChevron ? /* @__PURE__ */ jsx(ChevronDown, {
60
129
  "aria-hidden": "true",
61
130
  "data-slot": "match-chevron",
62
- className: "size-3 shrink-0 text-fg-secondary"
131
+ className: cn("shrink-0 text-fg-secondary", matchChevronSizes[resolvedSizes.base], responsive && responsiveClass("md", matchChevronSizes[resolvedSizes.md]), responsive && responsiveClass("lg", matchChevronSizes[resolvedSizes.lg]))
63
132
  }) : null
64
133
  ]
65
134
  });
66
135
  }
136
+ const responsiveSizeClasses = {
137
+ md: {
138
+ sm: "md:h-7 md:text-gdt-subtext",
139
+ md: "md:h-8 md:text-gdt-xs",
140
+ lg: "md:h-10 md:text-gdt-sm"
141
+ },
142
+ lg: {
143
+ sm: "lg:h-7 lg:text-gdt-subtext",
144
+ md: "lg:h-8 lg:text-gdt-xs",
145
+ lg: "lg:h-10 lg:text-gdt-sm"
146
+ }
147
+ };
148
+ const responsiveVariantClasses = {
149
+ md: {
150
+ bar: {
151
+ sm: "md:gap-1.5 md:px-2.5",
152
+ md: "md:gap-2 md:px-3",
153
+ lg: "md:gap-2.5 md:px-3.5"
154
+ },
155
+ donut: {
156
+ sm: "md:gap-2 md:pl-1.5 md:pr-2.5",
157
+ md: "md:gap-3 md:pl-2 md:pr-3",
158
+ lg: "md:gap-3.5 md:pl-2.5 md:pr-3.5"
159
+ }
160
+ },
161
+ lg: {
162
+ bar: {
163
+ sm: "lg:gap-1.5 lg:px-2.5",
164
+ md: "lg:gap-2 lg:px-3",
165
+ lg: "lg:gap-2.5 lg:px-3.5"
166
+ },
167
+ donut: {
168
+ sm: "lg:gap-2 lg:pl-1.5 lg:pr-2.5",
169
+ md: "lg:gap-3 lg:pl-2 lg:pr-3",
170
+ lg: "lg:gap-3.5 lg:pl-2.5 lg:pr-3.5"
171
+ }
172
+ }
173
+ };
174
+ function matchBreakpointClasses(variant, breakpoint, size) {
175
+ return cn(responsiveSizeClasses[breakpoint][size], responsiveVariantClasses[breakpoint][variant][size]);
176
+ }
177
+ const responsiveTokenClasses = {
178
+ md: {
179
+ "h-1 w-12": "md:h-1 md:w-12",
180
+ "h-1.5 w-15": "md:h-1.5 md:w-15",
181
+ "h-2 w-18": "md:h-2 md:w-18",
182
+ "size-2.5": "md:size-2.5",
183
+ "size-3": "md:size-3",
184
+ "size-3.5": "md:size-3.5"
185
+ },
186
+ lg: {
187
+ "h-1 w-12": "lg:h-1 lg:w-12",
188
+ "h-1.5 w-15": "lg:h-1.5 lg:w-15",
189
+ "h-2 w-18": "lg:h-2 lg:w-18",
190
+ "size-2.5": "lg:size-2.5",
191
+ "size-3": "lg:size-3",
192
+ "size-3.5": "lg:size-3.5"
193
+ }
194
+ };
195
+ function responsiveClass(breakpoint, className) {
196
+ return responsiveTokenClasses[breakpoint][className];
197
+ }
198
+ function MatchDonut({ progress, sizes, responsive }) {
199
+ return (responsive ? [
200
+ "base",
201
+ "md",
202
+ "lg"
203
+ ] : ["base"]).map((breakpoint) => {
204
+ const size = sizes[breakpoint];
205
+ const dimensions = matchDonutSizes[size];
206
+ const visibility = responsive ? breakpoint === "base" ? "md:hidden" : breakpoint === "md" ? "hidden md:grid lg:hidden" : "hidden lg:grid" : "";
207
+ return /* @__PURE__ */ jsx(CircularProgress, {
208
+ "aria-hidden": "true",
209
+ role: "presentation",
210
+ "data-slot": "match-donut",
211
+ value: progress,
212
+ pixelSize: dimensions.pixelSize,
213
+ strokeWidth: dimensions.strokeWidth,
214
+ strokeLinecap: "butt",
215
+ className: cn("shrink-0", visibility),
216
+ children: /* @__PURE__ */ jsxs("span", {
217
+ className: "sr-only",
218
+ children: [progress, "%"]
219
+ })
220
+ }, breakpoint);
221
+ });
222
+ }
67
223
  //#endregion
68
224
  export { Match, matchVariants };
@@ -9,7 +9,7 @@ import { ReviewBlock } from "./review-block.js";
9
9
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
10
  import { cva } from "class-variance-authority";
11
11
  //#region src/media-gallery-hero.tsx
12
- const mediaGalleryHeroVariants = cva("relative isolate h-[350px] w-full overflow-hidden rounded-[32px] md:h-[380px] md:rounded-[40px] lg:h-[480px]");
12
+ const mediaGalleryHeroVariants = cva("relative isolate h-[350px] w-full overflow-hidden rounded-none md:h-[380px] md:rounded-[40px] lg:h-[480px]");
13
13
  const mediaGalleryImagesVariants = cva("absolute inset-0 z-0 hidden size-full min-h-0 min-w-0 md:grid", {
14
14
  variants: { imageCount: {
15
15
  1: "",
@@ -53,7 +53,7 @@ function MediaGalleryTile({ className, image, index, isDesktopTile, onMediaClick
53
53
  className: "text-gdt-sm font-medium text-fg-caption-placeholder",
54
54
  children: "Media"
55
55
  }));
56
- const tileClassName = cn("relative flex size-full min-h-0 min-w-0 items-center justify-center overflow-hidden rounded-[32px] bg-surface-raised md:rounded-[40px]", "[&>img]:size-full [&>img]:object-cover", isDesktopTile && "hidden md:flex", className);
56
+ const tileClassName = cn("relative flex size-full min-h-0 min-w-0 items-center justify-center overflow-hidden rounded-none bg-surface-raised md:rounded-[40px]", "[&>img]:size-full [&>img]:object-cover", isDesktopTile && "hidden md:flex", className);
57
57
  if (!onMediaClick) return /* @__PURE__ */ jsx("div", {
58
58
  className: tileClassName,
59
59
  "data-slot": "media-gallery-tile",
@@ -71,6 +71,7 @@ function MediaGalleryTile({ className, image, index, isDesktopTile, onMediaClick
71
71
  function MobileGalleryCounter({ total }) {
72
72
  const { selectedIndex } = useCarousel();
73
73
  return /* @__PURE__ */ jsx(GalleryIndicator, {
74
+ className: "h-[35px] lg:h-[45px]",
74
75
  currentPhoto: selectedIndex + 1,
75
76
  size: "sm",
76
77
  totalPhotos: total
@@ -79,17 +80,16 @@ function MobileGalleryCounter({ total }) {
79
80
  function MobileMediaCarousel({ currentMedia, images, mediaTotal, onMediaClick, renderMedia, showMobileIndicator }) {
80
81
  const carouselImages = images.length > 0 ? images : [{}];
81
82
  return /* @__PURE__ */ jsxs(Carousel, {
82
- className: "absolute inset-0 z-0 block size-full rounded-[32px] md:hidden",
83
+ className: "absolute inset-0 z-0 block size-full rounded-none md:hidden",
83
84
  imageSize: "full",
84
85
  opts: {
85
86
  align: "start",
86
- loop: carouselImages.length > 1,
87
87
  startIndex: Math.max(0, currentMedia - 1)
88
88
  },
89
89
  children: [/* @__PURE__ */ jsx(CarouselContent, { children: carouselImages.map((image, index) => /* @__PURE__ */ jsx(CarouselItem, {
90
90
  className: "h-full",
91
91
  children: /* @__PURE__ */ jsx(MediaGalleryTile, {
92
- className: "rounded-[32px]",
92
+ className: "rounded-none",
93
93
  image,
94
94
  index,
95
95
  onMediaClick,
@@ -148,7 +148,7 @@ function MediaGalleryVideo({ alt = "", autoPlay, className, controls, label = "P
148
148
  children: "Video"
149
149
  }));
150
150
  return /* @__PURE__ */ jsxs("div", {
151
- className: cn("absolute inset-0 z-0 flex size-full items-center justify-center overflow-hidden rounded-[32px] bg-surface-raised md:rounded-[40px]", "[&>img]:size-full [&>img]:object-cover [&>video]:size-full [&>video]:object-cover", className),
151
+ className: cn("absolute inset-0 z-0 flex size-full items-center justify-center overflow-hidden rounded-none bg-surface-raised md:rounded-[40px]", "[&>img]:size-full [&>img]:object-cover [&>video]:size-full [&>video]:object-cover", className),
152
152
  "data-slot": "media-gallery-video",
153
153
  ...props,
154
154
  children: [content, controls ? null : /* @__PURE__ */ jsx("button", {
@@ -156,7 +156,7 @@ function MediaGalleryVideo({ alt = "", autoPlay, className, controls, label = "P
156
156
  className: cn(buttonVariants({
157
157
  variant: "glass-overlay",
158
158
  size: "icon-xl"
159
- }), "absolute top-1/2 left-1/2 z-10 size-20 -translate-x-1/2 -translate-y-1/2 active:not-aria-[haspopup]:-translate-y-1/2 md:size-24"),
159
+ }), "absolute top-1/2 left-1/2 z-10 size-[35px] -translate-x-1/2 -translate-y-1/2 active:not-aria-[haspopup]:-translate-y-1/2 lg:size-[45px] [&>svg]:size-4 lg:[&>svg]:size-5"),
160
160
  "data-slot": "media-gallery-video-play",
161
161
  onClick: onPlayClick,
162
162
  type: "button",
@@ -187,6 +187,7 @@ function MediaGalleryIndicator({ "aria-label": ariaLabel, className, label, onCl
187
187
  ...props,
188
188
  children: /* @__PURE__ */ jsx(GalleryIndicator, {
189
189
  "aria-hidden": "true",
190
+ className: "h-[35px] lg:h-[45px]",
190
191
  label: indicatorLabel,
191
192
  size
192
193
  })
@@ -195,6 +196,7 @@ function MediaGalleryIndicator({ "aria-label": ariaLabel, className, label, onCl
195
196
  className: cn("absolute right-4 bottom-4 z-10 hidden md:block", className),
196
197
  "data-slot": "media-gallery-indicator",
197
198
  children: /* @__PURE__ */ jsx(GalleryIndicator, {
199
+ className: "h-[35px] lg:h-[45px]",
198
200
  label: indicatorLabel,
199
201
  size
200
202
  })
@@ -27,6 +27,7 @@ function MobileSidebarContent({ className, showCloseButton = false, ...props })
27
27
  side: "right",
28
28
  size: "sm",
29
29
  showCloseButton,
30
+ popupClassName: "h-dvh w-[min(100vw,24.375rem)]",
30
31
  className: cn("h-dvh w-[min(100vw,24.375rem)] rounded-none border-y-0 border-r-0 bg-canvas [--sheet-padding-x:1.25rem] [--sheet-padding-top:0.8125rem]", className),
31
32
  ...props
32
33
  });
@@ -1,4 +1,4 @@
1
- import { t as ComponentSize } from "./size-context-BX6kAdVj.js";
1
+ import { n as ComponentSizeValue } from "./size-context-BVhHduLi.js";
2
2
  import * as React from "react";
3
3
  import { NumberFieldRootProps } from "@base-ui/react/number-field";
4
4
  //#region src/number-input.d.ts
@@ -32,7 +32,7 @@ type NumberInputProps = Omit<NumberFieldRootProps, "format"> & {
32
32
  format?: Intl.NumberFormatOptions;
33
33
  formatPreset?: NumberInputFormatPreset;
34
34
  placeholder?: string;
35
- size?: ComponentSize;
35
+ size?: ComponentSizeValue;
36
36
  thousandSeparator?: boolean;
37
37
  };
38
38
  declare function NumberInput({ children, format, formatPreset, placeholder, size, thousandSeparator, ...props }: NumberInputProps): React.JSX.Element;
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { Minus, Plus } from "./icons.js";
3
3
  import { cn } from "./utils/cn.js";
4
- import { SizeProvider, useComponentSize } from "./size-context.js";
4
+ import { SizeProvider, useComponentSize, useComponentSizeValue } from "./size-context.js";
5
5
  import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "./input-group.js";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { NumberField } from "@base-ui/react/number-field";
@@ -25,7 +25,7 @@ const numberInputFormatPresets = {
25
25
  plain: { useGrouping: false }
26
26
  };
27
27
  function NumberInput({ children, format, formatPreset, placeholder, size, thousandSeparator, ...props }) {
28
- const resolvedSize = useComponentSize(size);
28
+ const resolvedSize = useComponentSizeValue(size);
29
29
  const resolvedFormat = format ?? (formatPreset ? numberInputFormatPresets[formatPreset] : void 0) ?? (thousandSeparator ? numberInputFormatPresets.decimal : void 0);
30
30
  return /* @__PURE__ */ jsx(SizeProvider, {
31
31
  size: resolvedSize,
@@ -1,4 +1,4 @@
1
- import { n as ButtonLink, t as Button } from "./button-DW5OijoR.js";
1
+ import { n as ButtonLink, t as Button } from "./button-BS5KCibF.js";
2
2
  import * as React from "react";
3
3
  //#region src/pagination.d.ts
4
4
  declare function Pagination({ className, ...props }: React.ComponentProps<"nav">): React.JSX.Element;
@@ -1,4 +1,4 @@
1
- import { t as ComponentSize } from "./size-context-BX6kAdVj.js";
1
+ import { n as ComponentSizeValue } from "./size-context-BVhHduLi.js";
2
2
  import * as React from "react";
3
3
  import { CountryCode } from "libphonenumber-js";
4
4
  //#region src/phone-input.d.ts
@@ -6,7 +6,7 @@ interface PhoneInputProps {
6
6
  value?: string;
7
7
  onChange?: (value: string | undefined) => void;
8
8
  defaultCountry?: CountryCode;
9
- size?: ComponentSize;
9
+ size?: ComponentSizeValue;
10
10
  disabled?: boolean;
11
11
  readOnly?: boolean;
12
12
  placeholder?: string;
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { Check, ChevronDown, Search } from "./icons.js";
3
3
  import { cn } from "./utils/cn.js";
4
- import { useComponentSize } from "./size-context.js";
4
+ import { resolveResponsiveComponentSize, useComponentSizeValue } from "./size-context.js";
5
5
  import { Separator } from "./separator.js";
6
6
  import { InputGroup, InputGroupAddon, InputGroupInput } from "./input-group.js";
7
7
  import { Popover, PopoverContent, PopoverTrigger } from "./popover.js";
@@ -168,7 +168,8 @@ function CountrySelect({ country, size, disabled, onSelect, finalFocusRef }) {
168
168
  });
169
169
  }
170
170
  function PhoneInput({ value, onChange, defaultCountry = "NG", size, disabled = false, readOnly = false, placeholder = "(0000) 000-0000", className, id, name, ref, "aria-invalid": ariaInvalid }) {
171
- const resolvedSize = useComponentSize(size);
171
+ const sizeValue = useComponentSizeValue(size);
172
+ const resolvedSize = resolveResponsiveComponentSize(sizeValue);
172
173
  const inputRef = React.useRef(null);
173
174
  const setInputRef = React.useCallback((node) => {
174
175
  inputRef.current = node;
@@ -201,14 +202,14 @@ function PhoneInput({ value, onChange, defaultCountry = "NG", size, disabled = f
201
202
  }
202
203
  const dividerStateClasses = cn("group-hover/input-group:bg-line-strong", "group-focus-within/input-group:bg-line-focus", "group-has-[[aria-invalid=true]]/input-group:bg-line-danger", "group-has-disabled/input-group:bg-line-subtle");
203
204
  return /* @__PURE__ */ jsxs(InputGroup, {
204
- size: resolvedSize,
205
+ size: sizeValue,
205
206
  className,
206
207
  children: [/* @__PURE__ */ jsxs(InputGroupAddon, {
207
208
  align: "inline-start",
208
209
  className: "gap-2 self-stretch py-0",
209
210
  children: [/* @__PURE__ */ jsx(CountrySelect, {
210
211
  country,
211
- size: resolvedSize,
212
+ size: resolvedSize.base,
212
213
  disabled,
213
214
  onSelect: handleCountrySelect,
214
215
  finalFocusRef: inputRef
@@ -0,0 +1,62 @@
1
+ import { cn } from "./utils/cn.js";
2
+ import { responsiveValueClasses } from "./size-context.js";
3
+ import { Button } from "./button.js";
4
+ import { useInputComponentSizeValue } from "./input-size-context.js";
5
+ import { PopoverTrigger } from "./popover.js";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { cva } from "class-variance-authority";
8
+ //#region src/lib/picker.tsx
9
+ const pickerTriggerSizeVariants = {
10
+ sm: "h-8 px-3 text-gdt-xs [&_svg]:size-3.5",
11
+ md: "h-10 px-3.5 text-gdt-sm [&_svg]:size-4",
12
+ lg: "h-12 px-4 text-gdt-md [&_svg]:size-4.5",
13
+ xl: "h-14 px-4.5 text-gdt-lg [&_svg]:size-5"
14
+ };
15
+ const pickerTriggerVariants = cva("flex w-full items-center justify-between rounded-full border transition-[border-color,box-shadow] outline-none", {
16
+ variants: { size: pickerTriggerSizeVariants },
17
+ defaultVariants: { size: "md" }
18
+ });
19
+ function PickerTrigger({ icon: Icon, displayValue, placeholder, disabled, open, size, className }) {
20
+ const resolvedSize = responsiveValueClasses(useInputComponentSizeValue(size), responsivePickerTriggerSizes);
21
+ return /* @__PURE__ */ jsxs(PopoverTrigger, {
22
+ disabled,
23
+ "data-size": resolvedSize.base,
24
+ className: cn(pickerTriggerVariants({ size: null }), resolvedSize.className, 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),
25
+ children: [/* @__PURE__ */ jsx("span", {
26
+ className: cn("min-w-0 truncate", !displayValue && "text-fg-caption-placeholder"),
27
+ children: displayValue || placeholder
28
+ }), /* @__PURE__ */ jsx(Icon, { className: cn("ml-2 shrink-0", disabled ? "text-fg-caption-placeholder" : "text-fg-secondary") })]
29
+ });
30
+ }
31
+ const responsivePickerTriggerSizes = {
32
+ base: pickerTriggerSizeVariants,
33
+ md: {
34
+ sm: "md:h-8 md:px-3 md:text-gdt-xs md:[&_svg]:size-3.5",
35
+ md: "md:h-10 md:px-3.5 md:text-gdt-sm md:[&_svg]:size-4",
36
+ lg: "md:h-12 md:px-4 md:text-gdt-md md:[&_svg]:size-4.5",
37
+ xl: "md:h-14 md:px-4.5 md:text-gdt-lg md:[&_svg]:size-5"
38
+ },
39
+ lg: {
40
+ sm: "lg:h-8 lg:px-3 lg:text-gdt-xs lg:[&_svg]:size-3.5",
41
+ md: "lg:h-10 lg:px-3.5 lg:text-gdt-sm lg:[&_svg]:size-4",
42
+ lg: "lg:h-12 lg:px-4 lg:text-gdt-md lg:[&_svg]:size-4.5",
43
+ xl: "lg:h-14 lg:px-4.5 lg:text-gdt-lg lg:[&_svg]:size-5"
44
+ }
45
+ };
46
+ function PickerFooter({ secondaryLabel, onSecondary, onApply }) {
47
+ return /* @__PURE__ */ jsxs("div", {
48
+ className: "flex w-full items-center justify-between border-t border-line-subtle px-4 py-3",
49
+ children: [/* @__PURE__ */ jsx(Button, {
50
+ variant: "tertiary-outline",
51
+ size: "sm",
52
+ onClick: onSecondary,
53
+ children: secondaryLabel
54
+ }), /* @__PURE__ */ jsx(Button, {
55
+ size: "sm",
56
+ onClick: onApply,
57
+ children: "Apply"
58
+ })]
59
+ });
60
+ }
61
+ //#endregion
62
+ export { PickerTrigger as n, PickerFooter as t };
@@ -1,5 +1,5 @@
1
- import "./input-size-context-C-SFx9sx.js";
2
- import { r as PopoverContent } from "./popover-DSlPeH7x.js";
1
+ import "./input-size-context-BMhves-J.js";
2
+ import { r as PopoverContent } from "./popover-CNymD33m.js";
3
3
  import "./icons-C9JXR5Xv.js";
4
4
  import * as React from "react";
5
5
  //#region src/lib/picker.d.ts
@@ -1,4 +1,4 @@
1
- import { t as ComponentSize } from "./size-context-BX6kAdVj.js";
1
+ import { t as ComponentSize } from "./size-context-BVhHduLi.js";
2
2
  import { ChartConfig } from "./chart.js";
3
3
  import * as React from "react";
4
4
  import { Pie, PieChart as PieChart$1 } from "recharts";
@@ -1,4 +1,4 @@
1
- import { t as ComponentSize } from "./size-context-BX6kAdVj.js";
1
+ import { t as ComponentSize } from "./size-context-BVhHduLi.js";
2
2
  import * as React from "react";
3
3
  import { Popover } from "@base-ui/react/popover";
4
4
  //#region src/popover.d.ts
package/dist/popover.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as PopoverFooter, c as PopoverTrigger, i as PopoverDescription, n as PopoverBody, o as PopoverHeader, r as PopoverContent, s as PopoverTitle, t as Popover } from "./popover-DSlPeH7x.js";
1
+ import { a as PopoverFooter, c as PopoverTrigger, i as PopoverDescription, n as PopoverBody, o as PopoverHeader, r as PopoverContent, s as PopoverTitle, t as Popover } from "./popover-CNymD33m.js";
2
2
  export { Popover, PopoverBody, PopoverContent, PopoverDescription, PopoverFooter, PopoverHeader, PopoverTitle, PopoverTrigger };
@@ -1,5 +1,5 @@
1
- import { n as ButtonLink, t as Button } from "./button-DW5OijoR.js";
2
- import { Carousel, CarouselIndicator, CarouselItem } from "./carousel.js";
1
+ import { n as ButtonLink, t as Button } from "./button-BS5KCibF.js";
2
+ import { Carousel, CarouselIndicator, CarouselItem, CarouselNext, CarouselPrevious } from "./carousel.js";
3
3
  import { ImageProps } from "./image.js";
4
4
  import { useRender } from "@base-ui/react/use-render";
5
5
  import { VariantProps } from "class-variance-authority";
@@ -58,6 +58,10 @@ declare function PropertyListingCardMedia({ className, images, children, ...prop
58
58
  * carousel part works here, including `CarouselPrevious`/`CarouselNext`.
59
59
  */
60
60
  declare function PropertyListingCardCarousel({ className, opts, ...props }: React.ComponentProps<typeof Carousel>): React.JSX.Element;
61
+ /** Previous-photo control, revealed when the carousel is hovered or focused. */
62
+ declare function PropertyListingCardCarouselPrevious({ className, ...props }: React.ComponentProps<typeof CarouselPrevious>): React.JSX.Element;
63
+ /** Next-photo control, revealed when the carousel is hovered or focused. */
64
+ declare function PropertyListingCardCarouselNext({ className, ...props }: React.ComponentProps<typeof CarouselNext>): React.JSX.Element;
61
65
  declare function PropertyListingCardCarouselItem({ className, ...props }: React.ComponentProps<typeof CarouselItem>): React.JSX.Element;
62
66
  /**
63
67
  * The indicator, lifted clear of the options bar by default. That bar is
@@ -88,4 +92,4 @@ declare function PropertyListingCardActions({ className, ...props }: React.Compo
88
92
  declare function PropertyListingCardActionButton({ className, type, ...props }: React.ComponentProps<typeof Button>): React.JSX.Element;
89
93
  declare function PropertyListingCardActionButtonLink({ className, ...props }: React.ComponentProps<typeof ButtonLink>): React.JSX.Element;
90
94
  //#endregion
91
- export { PropertyListingCard, PropertyListingCardActionButton, PropertyListingCardActionButtonLink, PropertyListingCardActions, PropertyListingCardBadges, PropertyListingCardCarousel, PropertyListingCardCarouselIndicator, PropertyListingCardCarouselItem, PropertyListingCardDetails, PropertyListingCardImage, PropertyListingCardImagePlaceholder, PropertyListingCardMedia, PropertyListingCardMediaTop, PropertyListingCardOptionsBar, PropertyListingCardOverview, type PropertyListingCardProps, PropertyListingCardTitle, type PropertyListingImage, propertyListingCardVariants };
95
+ export { PropertyListingCard, PropertyListingCardActionButton, PropertyListingCardActionButtonLink, PropertyListingCardActions, PropertyListingCardBadges, PropertyListingCardCarousel, PropertyListingCardCarouselIndicator, PropertyListingCardCarouselItem, PropertyListingCardCarouselNext, PropertyListingCardCarouselPrevious, PropertyListingCardDetails, PropertyListingCardImage, PropertyListingCardImagePlaceholder, PropertyListingCardMedia, PropertyListingCardMediaTop, PropertyListingCardOptionsBar, PropertyListingCardOverview, type PropertyListingCardProps, PropertyListingCardTitle, type PropertyListingImage, propertyListingCardVariants };
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { cn } from "./utils/cn.js";
3
3
  import { Button, ButtonLink } from "./button.js";
4
- import { Carousel, CarouselContent, CarouselIndicator, CarouselItem } from "./carousel.js";
4
+ import { Carousel, CarouselContent, CarouselIndicator, CarouselItem, CarouselNext, CarouselPrevious } from "./carousel.js";
5
5
  import { Image } from "./image.js";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { mergeProps } from "@base-ui/react/merge-props";
@@ -53,7 +53,12 @@ function PropertyListingCardMedia({ className, images, children, ...props }) {
53
53
  }
54
54
  /** The backdrop the deprecated `images` prop builds, unchanged. */
55
55
  function PropertyListingCardMediaBackdrop({ images }) {
56
- if (images.length > 1) return /* @__PURE__ */ jsxs(PropertyListingCardCarousel, { children: [/* @__PURE__ */ jsx(CarouselContent, { children: images.map((carouselImage, index) => /* @__PURE__ */ jsx(PropertyListingCardCarouselItem, { children: /* @__PURE__ */ jsx(PropertyListingCardImage, { image: carouselImage }) }, carouselImage.id ?? carouselImage.src ?? carouselImage.alt ?? index)) }), /* @__PURE__ */ jsx(PropertyListingCardCarouselIndicator, {})] });
56
+ if (images.length > 1) return /* @__PURE__ */ jsxs(PropertyListingCardCarousel, { children: [
57
+ /* @__PURE__ */ jsx(CarouselContent, { children: images.map((carouselImage, index) => /* @__PURE__ */ jsx(PropertyListingCardCarouselItem, { children: /* @__PURE__ */ jsx(PropertyListingCardImage, { image: carouselImage }) }, carouselImage.id ?? carouselImage.src ?? carouselImage.alt ?? index)) }),
58
+ /* @__PURE__ */ jsx(PropertyListingCardCarouselIndicator, {}),
59
+ /* @__PURE__ */ jsx(PropertyListingCardCarouselPrevious, {}),
60
+ /* @__PURE__ */ jsx(PropertyListingCardCarouselNext, {})
61
+ ] });
57
62
  if (images[0]?.src) return /* @__PURE__ */ jsx(PropertyListingCardImage, {
58
63
  image: images[0],
59
64
  className: "absolute inset-0 -z-10"
@@ -69,11 +74,23 @@ function PropertyListingCardCarousel({ className, opts, ...props }) {
69
74
  return /* @__PURE__ */ jsx(Carousel, {
70
75
  "data-slot": "property-listing-card-carousel",
71
76
  imageSize: "full",
72
- opts: {
73
- loop: true,
74
- ...opts
75
- },
76
- className: cn("absolute inset-0 -z-10 size-full rounded-none bg-surface", className),
77
+ opts,
78
+ className: cn("group/property-listing-carousel absolute inset-0 -z-10 size-full rounded-none bg-surface", className),
79
+ ...props
80
+ });
81
+ }
82
+ const propertyListingCardCarouselControlClassName = "size-9 border-white/35 bg-black/50 text-white opacity-0 shadow-[0_4px_16px_rgb(0_0_0/0.28)] backdrop-blur-md transition-[background-color,opacity,scale] hover:scale-105 hover:bg-black/70 group-hover/property-listing-carousel:opacity-100 group-focus-within/property-listing-carousel:opacity-100 focus-visible:opacity-100 focus-visible:shadow-[0_0_0_2px_var(--color-line-focus),0_4px_16px_rgb(0_0_0/0.28)] active:hover:scale-[0.97] disabled:opacity-0 group-hover/property-listing-carousel:disabled:opacity-40 group-focus-within/property-listing-carousel:disabled:opacity-40 disabled:hover:scale-100 [&_svg]:mx-auto [&_svg]:size-[18px]";
83
+ /** Previous-photo control, revealed when the carousel is hovered or focused. */
84
+ function PropertyListingCardCarouselPrevious({ className, ...props }) {
85
+ return /* @__PURE__ */ jsx(CarouselPrevious, {
86
+ className: cn(propertyListingCardCarouselControlClassName, "left-3", className),
87
+ ...props
88
+ });
89
+ }
90
+ /** Next-photo control, revealed when the carousel is hovered or focused. */
91
+ function PropertyListingCardCarouselNext({ className, ...props }) {
92
+ return /* @__PURE__ */ jsx(CarouselNext, {
93
+ className: cn(propertyListingCardCarouselControlClassName, "right-3", className),
77
94
  ...props
78
95
  });
79
96
  }
@@ -184,4 +201,4 @@ function PropertyListingCardActionButtonLink({ className, ...props }) {
184
201
  });
185
202
  }
186
203
  //#endregion
187
- export { PropertyListingCard, PropertyListingCardActionButton, PropertyListingCardActionButtonLink, PropertyListingCardActions, PropertyListingCardBadges, PropertyListingCardCarousel, PropertyListingCardCarouselIndicator, PropertyListingCardCarouselItem, PropertyListingCardDetails, PropertyListingCardImage, PropertyListingCardImagePlaceholder, PropertyListingCardMedia, PropertyListingCardMediaTop, PropertyListingCardOptionsBar, PropertyListingCardOverview, PropertyListingCardTitle, propertyListingCardVariants };
204
+ export { PropertyListingCard, PropertyListingCardActionButton, PropertyListingCardActionButtonLink, PropertyListingCardActions, PropertyListingCardBadges, PropertyListingCardCarousel, PropertyListingCardCarouselIndicator, PropertyListingCardCarouselItem, PropertyListingCardCarouselNext, PropertyListingCardCarouselPrevious, PropertyListingCardDetails, PropertyListingCardImage, PropertyListingCardImagePlaceholder, PropertyListingCardMedia, PropertyListingCardMediaTop, PropertyListingCardOptionsBar, PropertyListingCardOverview, PropertyListingCardTitle, propertyListingCardVariants };
@@ -1,4 +1,4 @@
1
- import { t as ComponentSize } from "./size-context-BX6kAdVj.js";
1
+ import { t as ComponentSize } from "./size-context-BVhHduLi.js";
2
2
  import { ChartConfig } from "./chart.js";
3
3
  import * as React from "react";
4
4
  import { PolarAngleAxis, PolarGrid, PolarRadiusAxis, Radar, RadarChart as RadarChart$1 } from "recharts";
@@ -1,4 +1,4 @@
1
- import { VariantProps } from "class-variance-authority";
1
+ import { n as ComponentSizeValue } from "./size-context-BVhHduLi.js";
2
2
  import { Radio } from "@base-ui/react/radio";
3
3
  import { RadioGroup as RadioGroup$1 } from "@base-ui/react/radio-group";
4
4
  //#region src/radio-group.d.ts
@@ -6,7 +6,7 @@ declare function RadioGroup({ className, ...props }: RadioGroup$1.Props): import
6
6
  declare const radioVariants: (props?: ({
7
7
  size?: "lg" | "md" | "sm" | null | undefined;
8
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
- type RadioGroupItemSize = NonNullable<VariantProps<typeof radioVariants>["size"]>;
9
+ type RadioGroupItemSize = ComponentSizeValue;
10
10
  type RadioGroupItemProps<Value = unknown> = Radio.Root.Props<Value> & {
11
11
  size?: RadioGroupItemSize;
12
12
  };