@giddaa-housing/ui 1.0.0 → 1.2.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 (331) hide show
  1. package/css/generated/shared.css +1 -1
  2. package/css/giddaa.css +12 -2
  3. package/dist/accordion.d.ts +9 -10
  4. package/dist/accordion.js +41 -87
  5. package/dist/activity-timeline.d.ts +12 -16
  6. package/dist/activity-timeline.js +83 -198
  7. package/dist/alert.d.ts +8 -9
  8. package/dist/alert.js +53 -111
  9. package/dist/auth-layout.d.ts +4 -4
  10. package/dist/auth-layout.js +143 -294
  11. package/dist/avatar.d.ts +6 -6
  12. package/dist/avatar.js +49 -19
  13. package/dist/badge.d.ts +12 -14
  14. package/dist/badge.js +71 -11
  15. package/dist/bar-chart.d.ts +65 -67
  16. package/dist/bar-chart.js +232 -207
  17. package/dist/breadcrumb.d.ts +5 -5
  18. package/dist/breadcrumb.js +56 -118
  19. package/dist/bullet-chart.d.ts +41 -37
  20. package/dist/bullet-chart.js +125 -148
  21. package/dist/button-BZIeyUw6.d.ts +17 -0
  22. package/dist/button-group.d.ts +13 -16
  23. package/dist/button-group.js +39 -88
  24. package/dist/button.d.ts +2 -19
  25. package/dist/button.js +94 -13
  26. package/dist/calendar.d.ts +6 -6
  27. package/dist/calendar.js +138 -17
  28. package/dist/card.d.ts +14 -16
  29. package/dist/card.js +59 -145
  30. package/dist/carousel.d.ts +34 -35
  31. package/dist/carousel.js +335 -20
  32. package/dist/chart.d.ts +90 -63
  33. package/dist/chart.js +573 -28
  34. package/dist/checkbox.d.ts +10 -12
  35. package/dist/checkbox.js +82 -47
  36. package/dist/cn-BI_4DMBf.js +23 -0
  37. package/dist/collapsible.d.ts +7 -8
  38. package/dist/collapsible.js +22 -47
  39. package/dist/combobox.d.ts +10 -10
  40. package/dist/combobox.js +236 -44
  41. package/dist/cta.d.ts +12 -14
  42. package/dist/cta.js +175 -341
  43. package/dist/currency-selector.d.ts +31 -32
  44. package/dist/currency-selector.js +106 -184
  45. package/dist/data-table.d.ts +168 -0
  46. package/dist/data-table.js +676 -0
  47. package/dist/date-picker.d.ts +22 -23
  48. package/dist/date-picker.js +119 -192
  49. package/dist/details-card.d.ts +7 -7
  50. package/dist/details-card.js +104 -253
  51. package/dist/dialog.d.ts +13 -14
  52. package/dist/dialog.js +116 -209
  53. package/dist/dropdown-menu.d.ts +13 -13
  54. package/dist/dropdown-menu.js +180 -37
  55. package/dist/dropzone.d.ts +55 -55
  56. package/dist/dropzone.js +327 -439
  57. package/dist/editorial-card.d.ts +23 -25
  58. package/dist/editorial-card.js +129 -296
  59. package/dist/empty-state.d.ts +8 -9
  60. package/dist/empty-state.js +48 -105
  61. package/dist/field.d.ts +23 -25
  62. package/dist/field.js +110 -221
  63. package/dist/filter.d.ts +118 -0
  64. package/dist/filter.js +775 -0
  65. package/dist/footer.d.ts +8 -15
  66. package/dist/footer.js +197 -400
  67. package/dist/funnel-chart.d.ts +49 -48
  68. package/dist/funnel-chart.js +170 -189
  69. package/dist/gallery-indicator.d.ts +11 -12
  70. package/dist/gallery-indicator.js +75 -12
  71. package/dist/heatmap-chart.d.ts +47 -50
  72. package/dist/heatmap-chart.js +186 -237
  73. package/dist/infotip.d.ts +8 -9
  74. package/dist/infotip.js +33 -59
  75. package/dist/input-CfoEJ8A6.d.ts +12 -0
  76. package/dist/input-group.d.ts +16 -20
  77. package/dist/input-group.js +99 -23
  78. package/dist/input-size-context-C-SFx9sx.d.ts +10 -0
  79. package/dist/input-size-context.d.ts +2 -11
  80. package/dist/input-size-context.js +17 -9
  81. package/dist/input.d.ts +2 -13
  82. package/dist/input.js +27 -11
  83. package/dist/item.d.ts +7 -8
  84. package/dist/item.js +22 -59
  85. package/dist/kpi-card.d.ts +18 -20
  86. package/dist/kpi-card.js +84 -192
  87. package/dist/label.d.ts +6 -6
  88. package/dist/label.js +40 -8
  89. package/dist/line-chart.d.ts +200 -129
  90. package/dist/line-chart.js +330 -105
  91. package/dist/list-item.d.ts +22 -0
  92. package/dist/list-item.js +84 -0
  93. package/dist/logo.d.ts +4 -4
  94. package/dist/logo.js +92 -9
  95. package/dist/map-indicator.d.ts +7 -7
  96. package/dist/map-indicator.js +80 -106
  97. package/dist/match.d.ts +10 -11
  98. package/dist/match.js +62 -107
  99. package/dist/media-gallery-hero.d.ts +40 -42
  100. package/dist/media-gallery-hero.js +182 -343
  101. package/dist/media-player.d.ts +17 -17
  102. package/dist/media-player.js +873 -1348
  103. package/dist/multi-step-form.d.ts +56 -0
  104. package/dist/multi-step-form.js +342 -0
  105. package/dist/number-input.d.ts +34 -34
  106. package/dist/number-input.js +64 -117
  107. package/dist/page-header.d.ts +10 -11
  108. package/dist/page-header.js +34 -79
  109. package/dist/pagination.d.ts +17 -21
  110. package/dist/pagination.js +132 -207
  111. package/dist/password-input.d.ts +5 -13
  112. package/dist/password-input.js +31 -55
  113. package/dist/phone-input.d.ts +19 -20
  114. package/dist/phone-input.js +226 -344
  115. package/dist/photo-gallery.d.ts +19 -19
  116. package/dist/photo-gallery.js +313 -449
  117. package/dist/picker-lzgmsNfG.js +32 -0
  118. package/dist/pie-chart.d.ts +121 -90
  119. package/dist/pie-chart.js +183 -149
  120. package/dist/popover.d.ts +9 -9
  121. package/dist/popover.js +72 -23
  122. package/dist/price-tag.d.ts +26 -27
  123. package/dist/price-tag.js +113 -173
  124. package/dist/progress.d.ts +16 -17
  125. package/dist/progress.js +169 -24
  126. package/dist/property-listing-card.d.ts +14 -17
  127. package/dist/property-listing-card.js +102 -220
  128. package/dist/purchase-option-card.d.ts +79 -0
  129. package/dist/purchase-option-card.js +176 -0
  130. package/dist/radar-chart.d.ts +29 -31
  131. package/dist/radar-chart.js +162 -137
  132. package/dist/radio-group.d.ts +11 -13
  133. package/dist/radio-group.js +46 -60
  134. package/dist/review-block.d.ts +14 -16
  135. package/dist/review-block.js +154 -10
  136. package/dist/rich-text-editor.d.ts +30 -14
  137. package/dist/rich-text-editor.js +592 -716
  138. package/dist/scatter-chart.d.ts +45 -47
  139. package/dist/scatter-chart.js +236 -240
  140. package/dist/search-input.d.ts +8 -16
  141. package/dist/search-input.js +57 -109
  142. package/dist/select.d.ts +8 -8
  143. package/dist/select.js +144 -27
  144. package/dist/separator.d.ts +8 -9
  145. package/dist/separator.js +32 -8
  146. package/dist/sheet.d.ts +11 -11
  147. package/dist/sheet.js +103 -24
  148. package/dist/sidebar.d.ts +32 -37
  149. package/dist/sidebar.js +364 -634
  150. package/dist/size-context-D4mYvcg8.d.ts +10 -0
  151. package/dist/size-context.d.ts +2 -11
  152. package/dist/size-context.js +17 -9
  153. package/dist/skeleton.d.ts +4 -5
  154. package/dist/skeleton.js +12 -8
  155. package/dist/slider.d.ts +8 -9
  156. package/dist/slider.js +64 -135
  157. package/dist/sparkline.d.ts +68 -58
  158. package/dist/sparkline.js +315 -251
  159. package/dist/stepper.d.ts +23 -24
  160. package/dist/stepper.js +149 -246
  161. package/dist/styles.css +1004 -116
  162. package/dist/switch.d.ts +10 -12
  163. package/dist/switch.js +48 -70
  164. package/dist/table-card.d.ts +35 -0
  165. package/dist/table-card.js +125 -0
  166. package/dist/table.d.ts +18 -14
  167. package/dist/table.js +117 -154
  168. package/dist/tabs.d.ts +33 -15
  169. package/dist/tabs.js +110 -18
  170. package/dist/tag.d.ts +21 -23
  171. package/dist/tag.js +103 -159
  172. package/dist/testimonial-block.d.ts +18 -19
  173. package/dist/testimonial-block.js +189 -358
  174. package/dist/textarea-IS_D8pXf.d.ts +11 -0
  175. package/dist/textarea.d.ts +2 -12
  176. package/dist/textarea.js +24 -11
  177. package/dist/time-picker.d.ts +11 -11
  178. package/dist/time-picker.js +245 -302
  179. package/dist/toast.d.ts +16 -18
  180. package/dist/toast.js +154 -205
  181. package/dist/tooltip.d.ts +8 -9
  182. package/dist/tooltip.js +37 -12
  183. package/dist/tree-map.d.ts +59 -62
  184. package/dist/tree-map.js +226 -269
  185. package/dist/use-uncontrolled-CLfM1XbB.js +21 -0
  186. package/dist/waterfall-chart.d.ts +94 -97
  187. package/dist/waterfall-chart.js +455 -552
  188. package/package.json +36 -9
  189. package/dist/accordion.js.map +0 -1
  190. package/dist/activity-timeline.js.map +0 -1
  191. package/dist/alert.js.map +0 -1
  192. package/dist/auth-layout.js.map +0 -1
  193. package/dist/avatar.js.map +0 -1
  194. package/dist/badge.js.map +0 -1
  195. package/dist/bar-chart.js.map +0 -1
  196. package/dist/breadcrumb.js.map +0 -1
  197. package/dist/bullet-chart.js.map +0 -1
  198. package/dist/button-group.js.map +0 -1
  199. package/dist/button.js.map +0 -1
  200. package/dist/calendar.js.map +0 -1
  201. package/dist/card.js.map +0 -1
  202. package/dist/carousel.js.map +0 -1
  203. package/dist/chart.js.map +0 -1
  204. package/dist/checkbox.js.map +0 -1
  205. package/dist/chunk-322YCNVL.js +0 -278
  206. package/dist/chunk-322YCNVL.js.map +0 -1
  207. package/dist/chunk-3ACQVT7A.js +0 -25
  208. package/dist/chunk-3ACQVT7A.js.map +0 -1
  209. package/dist/chunk-3T65TLJX.js +0 -334
  210. package/dist/chunk-3T65TLJX.js.map +0 -1
  211. package/dist/chunk-6ZSGQHH2.js +0 -192
  212. package/dist/chunk-6ZSGQHH2.js.map +0 -1
  213. package/dist/chunk-7TBMLFGW.js +0 -41
  214. package/dist/chunk-7TBMLFGW.js.map +0 -1
  215. package/dist/chunk-B4H6RNDH.js +0 -135
  216. package/dist/chunk-B4H6RNDH.js.map +0 -1
  217. package/dist/chunk-BUXCGZ6X.js +0 -219
  218. package/dist/chunk-BUXCGZ6X.js.map +0 -1
  219. package/dist/chunk-CHII2QHH.js +0 -58
  220. package/dist/chunk-CHII2QHH.js.map +0 -1
  221. package/dist/chunk-DMNOXRRW.js +0 -147
  222. package/dist/chunk-DMNOXRRW.js.map +0 -1
  223. package/dist/chunk-EFSOSSIC.js +0 -130
  224. package/dist/chunk-EFSOSSIC.js.map +0 -1
  225. package/dist/chunk-FZDSVMKY.js +0 -363
  226. package/dist/chunk-FZDSVMKY.js.map +0 -1
  227. package/dist/chunk-GJOFIJS3.js +0 -246
  228. package/dist/chunk-GJOFIJS3.js.map +0 -1
  229. package/dist/chunk-HL3ZSYES.js +0 -23
  230. package/dist/chunk-HL3ZSYES.js.map +0 -1
  231. package/dist/chunk-JVLUBAPB.js +0 -129
  232. package/dist/chunk-JVLUBAPB.js.map +0 -1
  233. package/dist/chunk-KDPYSOYZ.js +0 -64
  234. package/dist/chunk-KDPYSOYZ.js.map +0 -1
  235. package/dist/chunk-KSMDANKI.js +0 -43
  236. package/dist/chunk-KSMDANKI.js.map +0 -1
  237. package/dist/chunk-MEKCCOP5.js +0 -46
  238. package/dist/chunk-MEKCCOP5.js.map +0 -1
  239. package/dist/chunk-NOFXVRWL.js +0 -451
  240. package/dist/chunk-NOFXVRWL.js.map +0 -1
  241. package/dist/chunk-PC5MHNVA.js +0 -171
  242. package/dist/chunk-PC5MHNVA.js.map +0 -1
  243. package/dist/chunk-QKAQZ2GU.js +0 -122
  244. package/dist/chunk-QKAQZ2GU.js.map +0 -1
  245. package/dist/chunk-QZHSHSVV.js +0 -26
  246. package/dist/chunk-QZHSHSVV.js.map +0 -1
  247. package/dist/chunk-RBMK26XD.js +0 -19
  248. package/dist/chunk-RBMK26XD.js.map +0 -1
  249. package/dist/chunk-SFNJGF6M.js +0 -262
  250. package/dist/chunk-SFNJGF6M.js.map +0 -1
  251. package/dist/chunk-UJJNLGTM.js +0 -112
  252. package/dist/chunk-UJJNLGTM.js.map +0 -1
  253. package/dist/chunk-VGR4ZWJ3.js +0 -418
  254. package/dist/chunk-VGR4ZWJ3.js.map +0 -1
  255. package/dist/chunk-XG47P6D4.js +0 -99
  256. package/dist/chunk-XG47P6D4.js.map +0 -1
  257. package/dist/chunk-XZZAHNVM.js +0 -21
  258. package/dist/chunk-XZZAHNVM.js.map +0 -1
  259. package/dist/chunk-Y4TTYVNE.js +0 -36
  260. package/dist/chunk-Y4TTYVNE.js.map +0 -1
  261. package/dist/chunk-YDWIHW6Q.js +0 -69
  262. package/dist/chunk-YDWIHW6Q.js.map +0 -1
  263. package/dist/collapsible.js.map +0 -1
  264. package/dist/combobox.js.map +0 -1
  265. package/dist/cta.js.map +0 -1
  266. package/dist/currency-selector.js.map +0 -1
  267. package/dist/date-picker.js.map +0 -1
  268. package/dist/details-card.js.map +0 -1
  269. package/dist/dialog.js.map +0 -1
  270. package/dist/dropdown-menu.js.map +0 -1
  271. package/dist/dropzone.js.map +0 -1
  272. package/dist/editorial-card.js.map +0 -1
  273. package/dist/empty-state.js.map +0 -1
  274. package/dist/field.js.map +0 -1
  275. package/dist/footer.js.map +0 -1
  276. package/dist/funnel-chart.js.map +0 -1
  277. package/dist/gallery-indicator.js.map +0 -1
  278. package/dist/heatmap-chart.js.map +0 -1
  279. package/dist/infotip.js.map +0 -1
  280. package/dist/input-group.js.map +0 -1
  281. package/dist/input-size-context.js.map +0 -1
  282. package/dist/input.js.map +0 -1
  283. package/dist/item.js.map +0 -1
  284. package/dist/kpi-card.js.map +0 -1
  285. package/dist/label.js.map +0 -1
  286. package/dist/line-chart.js.map +0 -1
  287. package/dist/logo.js.map +0 -1
  288. package/dist/map-indicator.js.map +0 -1
  289. package/dist/match.js.map +0 -1
  290. package/dist/media-gallery-hero.js.map +0 -1
  291. package/dist/media-player.js.map +0 -1
  292. package/dist/number-input.js.map +0 -1
  293. package/dist/page-header.js.map +0 -1
  294. package/dist/pagination.js.map +0 -1
  295. package/dist/password-input.js.map +0 -1
  296. package/dist/phone-input.js.map +0 -1
  297. package/dist/photo-gallery.js.map +0 -1
  298. package/dist/pie-chart.js.map +0 -1
  299. package/dist/popover.js.map +0 -1
  300. package/dist/price-tag.js.map +0 -1
  301. package/dist/progress.js.map +0 -1
  302. package/dist/property-listing-card.js.map +0 -1
  303. package/dist/radar-chart.js.map +0 -1
  304. package/dist/radio-group.js.map +0 -1
  305. package/dist/review-block.js.map +0 -1
  306. package/dist/rich-text-editor.js.map +0 -1
  307. package/dist/scatter-chart.js.map +0 -1
  308. package/dist/search-input.js.map +0 -1
  309. package/dist/select.js.map +0 -1
  310. package/dist/separator.js.map +0 -1
  311. package/dist/sheet.js.map +0 -1
  312. package/dist/sidebar.js.map +0 -1
  313. package/dist/size-context.js.map +0 -1
  314. package/dist/skeleton.js.map +0 -1
  315. package/dist/slider.js.map +0 -1
  316. package/dist/sparkline.js.map +0 -1
  317. package/dist/stepper.js.map +0 -1
  318. package/dist/switch.js.map +0 -1
  319. package/dist/tab-list.d.ts +0 -38
  320. package/dist/tab-list.js +0 -123
  321. package/dist/tab-list.js.map +0 -1
  322. package/dist/table.js.map +0 -1
  323. package/dist/tabs.js.map +0 -1
  324. package/dist/tag.js.map +0 -1
  325. package/dist/testimonial-block.js.map +0 -1
  326. package/dist/textarea.js.map +0 -1
  327. package/dist/time-picker.js.map +0 -1
  328. package/dist/toast.js.map +0 -1
  329. package/dist/tooltip.js.map +0 -1
  330. package/dist/tree-map.js.map +0 -1
  331. package/dist/waterfall-chart.js.map +0 -1
package/dist/carousel.js CHANGED
@@ -1,22 +1,337 @@
1
1
  "use client";
2
- import {
3
- Carousel,
4
- CarouselContent,
5
- CarouselIndicator,
6
- CarouselItem,
7
- CarouselNext,
8
- CarouselPrevious,
9
- useCarousel
10
- } from "./chunk-FZDSVMKY.js";
11
- import "./chunk-HL3ZSYES.js";
12
- import "./chunk-Y4TTYVNE.js";
13
- export {
14
- Carousel,
15
- CarouselContent,
16
- CarouselIndicator,
17
- CarouselItem,
18
- CarouselNext,
19
- CarouselPrevious,
20
- useCarousel
2
+ import { t as cn } from "./cn-BI_4DMBf.js";
3
+ import { useComponentSize } from "./size-context.js";
4
+ import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { cva } from "class-variance-authority";
7
+ import * as React from "react";
8
+ import useEmblaCarousel from "embla-carousel-react";
9
+ //#region src/carousel.tsx
10
+ /**
11
+ * Shared glassmorphic treatment for every overlay surface in the carousel
12
+ * (navigation arrows + indicator). Dark glass at 35% over a 16px backdrop
13
+ * blur with a near-invisible 18% light border that lifts the chrome off the
14
+ * imagery. Always dark, in both themes — see `--color-surface-glass-overlay-button`.
15
+ */
16
+ const glassChrome = "border border-fg-on-brand/[0.18] bg-surface-glass-overlay-button backdrop-blur-[16px]";
17
+ const carouselVariants = cva("relative overflow-hidden rounded-2xl bg-surface-brand-subtle", {
18
+ variants: { imageSize: {
19
+ sm: "w-[320px] max-w-full aspect-[320/220]",
20
+ md: "w-[520px] max-w-full aspect-[520/340]",
21
+ lg: "w-[800px] max-w-full aspect-[800/500]",
22
+ full: "w-full"
23
+ } },
24
+ defaultVariants: { imageSize: "md" }
25
+ });
26
+ const CarouselContext = React.createContext(null);
27
+ function useCarousel() {
28
+ const context = React.useContext(CarouselContext);
29
+ if (!context) throw new Error("useCarousel must be used within a <Carousel />");
30
+ return context;
31
+ }
32
+ function Carousel({ orientation = "horizontal", opts, setApi, plugins, size, imageSize, className, children, ...props }) {
33
+ const resolvedSize = useComponentSize(size);
34
+ const [carouselRef, api] = useEmblaCarousel({
35
+ ...opts,
36
+ axis: orientation === "horizontal" ? "x" : "y"
37
+ }, plugins);
38
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false);
39
+ const [canScrollNext, setCanScrollNext] = React.useState(false);
40
+ const [selectedIndex, setSelectedIndex] = React.useState(0);
41
+ const [scrollSnaps, setScrollSnaps] = React.useState([]);
42
+ const onSelect = React.useCallback((api) => {
43
+ if (!api) return;
44
+ setCanScrollPrev(api.canScrollPrev());
45
+ setCanScrollNext(api.canScrollNext());
46
+ setSelectedIndex(api.selectedScrollSnap());
47
+ }, []);
48
+ const onReInit = React.useCallback((api) => {
49
+ if (!api) return;
50
+ setScrollSnaps(api.scrollSnapList());
51
+ onSelect(api);
52
+ }, [onSelect]);
53
+ const scrollPrev = React.useCallback(() => {
54
+ api?.scrollPrev();
55
+ }, [api]);
56
+ const scrollNext = React.useCallback(() => {
57
+ api?.scrollNext();
58
+ }, [api]);
59
+ const scrollTo = React.useCallback((index) => {
60
+ api?.scrollTo(index);
61
+ }, [api]);
62
+ const handleKeyDown = React.useCallback((event) => {
63
+ const prevKey = orientation === "horizontal" ? "ArrowLeft" : "ArrowUp";
64
+ const nextKey = orientation === "horizontal" ? "ArrowRight" : "ArrowDown";
65
+ if (event.key === prevKey) {
66
+ event.preventDefault();
67
+ scrollPrev();
68
+ } else if (event.key === nextKey) {
69
+ event.preventDefault();
70
+ scrollNext();
71
+ }
72
+ }, [
73
+ orientation,
74
+ scrollPrev,
75
+ scrollNext
76
+ ]);
77
+ React.useEffect(() => {
78
+ if (!api || !setApi) return;
79
+ setApi(api);
80
+ }, [api, setApi]);
81
+ React.useEffect(() => {
82
+ if (!api) return;
83
+ onReInit(api);
84
+ api.on("reInit", onReInit);
85
+ api.on("select", onSelect);
86
+ return () => {
87
+ api?.off("reInit", onReInit);
88
+ api?.off("select", onSelect);
89
+ };
90
+ }, [
91
+ api,
92
+ onReInit,
93
+ onSelect
94
+ ]);
95
+ return /* @__PURE__ */ jsx(CarouselContext.Provider, {
96
+ value: {
97
+ carouselRef,
98
+ api,
99
+ orientation,
100
+ size: resolvedSize,
101
+ scrollPrev,
102
+ scrollNext,
103
+ scrollTo,
104
+ canScrollPrev,
105
+ canScrollNext,
106
+ selectedIndex,
107
+ scrollSnaps
108
+ },
109
+ children: /* @__PURE__ */ jsx("div", {
110
+ onKeyDownCapture: handleKeyDown,
111
+ className: cn(carouselVariants({ imageSize }), className),
112
+ role: "region",
113
+ "aria-roledescription": "carousel",
114
+ "data-slot": "carousel",
115
+ ...props,
116
+ children
117
+ })
118
+ });
119
+ }
120
+ function CarouselContent({ className, ...props }) {
121
+ const { carouselRef, orientation } = useCarousel();
122
+ return /* @__PURE__ */ jsx("div", {
123
+ ref: carouselRef,
124
+ className: "h-full overflow-hidden",
125
+ "data-slot": "carousel-content",
126
+ children: /* @__PURE__ */ jsx("div", {
127
+ className: cn("flex h-full", orientation === "horizontal" ? "" : "flex-col", className),
128
+ ...props
129
+ })
130
+ });
131
+ }
132
+ function CarouselItem({ className, ...props }) {
133
+ return /* @__PURE__ */ jsx("div", {
134
+ role: "group",
135
+ "aria-roledescription": "slide",
136
+ "data-slot": "carousel-item",
137
+ className: cn("min-w-0 shrink-0 grow-0 basis-full", className),
138
+ ...props
139
+ });
140
+ }
141
+ const arrowVariants = cva(cn("absolute top-1/2 z-10 grid -translate-y-1/2 place-items-center rounded-full text-fg-on-brand/95 shadow-1 transition-[transform,opacity] outline-none", glassChrome, "hover:scale-105 focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] active:scale-95 disabled:pointer-events-none disabled:opacity-40"), {
142
+ variants: {
143
+ size: {
144
+ sm: "size-8 [&_svg]:size-4",
145
+ md: "size-10 [&_svg]:size-[18px]",
146
+ lg: "size-12 [&_svg]:size-5"
147
+ },
148
+ side: {
149
+ prev: "",
150
+ next: ""
151
+ }
152
+ },
153
+ compoundVariants: [
154
+ {
155
+ size: "sm",
156
+ side: "prev",
157
+ className: "left-3"
158
+ },
159
+ {
160
+ size: "sm",
161
+ side: "next",
162
+ className: "right-3"
163
+ },
164
+ {
165
+ size: "md",
166
+ side: "prev",
167
+ className: "left-4"
168
+ },
169
+ {
170
+ size: "md",
171
+ side: "next",
172
+ className: "right-4"
173
+ },
174
+ {
175
+ size: "lg",
176
+ side: "prev",
177
+ className: "left-5"
178
+ },
179
+ {
180
+ size: "lg",
181
+ side: "next",
182
+ className: "right-5"
183
+ }
184
+ ],
185
+ defaultVariants: {
186
+ size: "md",
187
+ side: "prev"
188
+ }
189
+ });
190
+ function CarouselPrevious({ className, ...props }) {
191
+ const { size, scrollPrev, canScrollPrev } = useCarousel();
192
+ return /* @__PURE__ */ jsxs("button", {
193
+ type: "button",
194
+ "data-slot": "carousel-previous",
195
+ className: cn(arrowVariants({
196
+ size,
197
+ side: "prev"
198
+ }), className),
199
+ disabled: !canScrollPrev,
200
+ onClick: scrollPrev,
201
+ ...props,
202
+ children: [/* @__PURE__ */ jsx(ChevronLeftIcon, { className: "cn-rtl-flip" }), /* @__PURE__ */ jsx("span", {
203
+ className: "sr-only",
204
+ children: "Previous slide"
205
+ })]
206
+ });
207
+ }
208
+ function CarouselNext({ className, ...props }) {
209
+ const { size, scrollNext, canScrollNext } = useCarousel();
210
+ return /* @__PURE__ */ jsxs("button", {
211
+ type: "button",
212
+ "data-slot": "carousel-next",
213
+ className: cn(arrowVariants({
214
+ size,
215
+ side: "next"
216
+ }), className),
217
+ disabled: !canScrollNext,
218
+ onClick: scrollNext,
219
+ ...props,
220
+ children: [/* @__PURE__ */ jsx(ChevronRightIcon, { className: "cn-rtl-flip" }), /* @__PURE__ */ jsx("span", {
221
+ className: "sr-only",
222
+ children: "Next slide"
223
+ })]
224
+ });
225
+ }
226
+ /**
227
+ * Past this many items the indicator switches from "show every dot" to the
228
+ * Airbnb-style windowed mode: at most `MANY_WINDOW` dots, the active one kept
229
+ * near the centre, and dots at a clipped edge faded down to imply more beyond.
230
+ */
231
+ const MANY_THRESHOLD = 5;
232
+ const MANY_WINDOW = 5;
233
+ /**
234
+ * Returns the dots to render plus the window start, so the determinate and
235
+ * windowed ("many") cases share one render path. The dot strip is always the
236
+ * full list; `start` drives the translate that slides it under the viewport.
237
+ */
238
+ function getIndicatorWindow(count, selected) {
239
+ if (count < MANY_THRESHOLD) return {
240
+ dots: Array.from({ length: count }, (_, index) => ({
241
+ index,
242
+ faded: false
243
+ })),
244
+ start: 0,
245
+ visible: count
246
+ };
247
+ const start = Math.max(0, Math.min(selected - Math.floor(MANY_WINDOW / 2), count - MANY_WINDOW));
248
+ const end = start + MANY_WINDOW - 1;
249
+ const overflowLeft = start > 0;
250
+ const overflowRight = end < count - 1;
251
+ return {
252
+ dots: Array.from({ length: count }, (_, index) => ({
253
+ index,
254
+ faded: overflowLeft && index === start || overflowRight && index === end
255
+ })),
256
+ start,
257
+ visible: MANY_WINDOW
258
+ };
259
+ }
260
+ /** Dot diameter, gap, and pill padding per size — in px to keep them crisp. */
261
+ const INDICATOR_SIZES = {
262
+ sm: {
263
+ dot: 5,
264
+ gap: 4,
265
+ padX: 8,
266
+ padY: 4
267
+ },
268
+ md: {
269
+ dot: 7,
270
+ gap: 5,
271
+ padX: 10,
272
+ padY: 5
273
+ },
274
+ lg: {
275
+ dot: 9,
276
+ gap: 6,
277
+ padX: 12,
278
+ padY: 6
279
+ }
21
280
  };
22
- //# sourceMappingURL=carousel.js.map
281
+ /** Distance of the indicator from the bottom edge, per size (12/18/24px). */
282
+ const INDICATOR_OFFSET = {
283
+ sm: "bottom-3",
284
+ md: "bottom-[18px]",
285
+ lg: "bottom-6"
286
+ };
287
+ function CarouselIndicator({ className, count: countProp, selected: selectedProp, size: sizeProp, onSelect, ...props }) {
288
+ const ctx = React.useContext(CarouselContext);
289
+ const inheritedSize = useComponentSize(sizeProp);
290
+ const size = sizeProp ?? ctx?.size ?? inheritedSize;
291
+ const count = countProp ?? ctx?.scrollSnaps.length ?? 0;
292
+ const selected = selectedProp ?? ctx?.selectedIndex ?? 0;
293
+ const handleSelect = onSelect ?? ctx?.scrollTo;
294
+ if (count <= 1) return null;
295
+ const { dot, gap, padX, padY } = INDICATOR_SIZES[size];
296
+ const { dots, start, visible } = getIndicatorWindow(count, selected);
297
+ const step = dot + gap;
298
+ const viewportWidth = visible * step - gap;
299
+ return /* @__PURE__ */ jsx("div", {
300
+ "data-slot": "carousel-indicator",
301
+ className: cn("absolute left-1/2 z-10 flex -translate-x-1/2 items-center justify-center rounded-full", INDICATOR_OFFSET[size], glassChrome, className),
302
+ style: { padding: `${padY}px ${padX}px` },
303
+ role: "tablist",
304
+ "aria-label": "Slide indicators",
305
+ ...props,
306
+ children: /* @__PURE__ */ jsx("div", {
307
+ className: "overflow-hidden",
308
+ style: { width: viewportWidth },
309
+ children: /* @__PURE__ */ jsx("div", {
310
+ className: "flex items-center transition-transform duration-300 ease-out",
311
+ style: {
312
+ gap,
313
+ transform: `translateX(${-start * step}px)`
314
+ },
315
+ children: dots.map(({ index, faded }) => {
316
+ const isActive = index === selected;
317
+ return /* @__PURE__ */ jsx("button", {
318
+ type: "button",
319
+ role: "tab",
320
+ "aria-selected": isActive,
321
+ "aria-label": `Go to slide ${index + 1}`,
322
+ onClick: () => handleSelect?.(index),
323
+ className: cn("shrink-0 rounded-full bg-fg-on-brand transition-[transform,opacity] duration-300 ease-out", handleSelect ? "cursor-pointer" : "cursor-default"),
324
+ style: {
325
+ width: dot,
326
+ height: dot,
327
+ opacity: faded ? .3 : isActive ? 1 : .55,
328
+ transform: faded ? "scale(0.6)" : "scale(1)"
329
+ }
330
+ }, index);
331
+ })
332
+ })
333
+ })
334
+ });
335
+ }
336
+ //#endregion
337
+ export { Carousel, CarouselContent, CarouselIndicator, CarouselItem, CarouselNext, CarouselPrevious, useCarousel };
package/dist/chart.d.ts CHANGED
@@ -1,48 +1,74 @@
1
- import * as class_variance_authority_types from 'class-variance-authority/types';
2
- import { VariantProps } from 'class-variance-authority';
3
- import * as React from 'react';
4
- import * as RechartsPrimitive from 'recharts';
5
- import { TooltipValueType } from 'recharts';
6
- import { ComponentSize } from './size-context.js';
7
-
1
+ import { t as ComponentSize } from "./size-context-D4mYvcg8.js";
2
+ import { VariantProps } from "class-variance-authority";
3
+ import * as React from "react";
4
+ import * as RechartsPrimitive from "recharts";
5
+ import { TooltipValueType } from "recharts";
6
+ //#region src/chart.d.ts
8
7
  /** How a precise value is formatted in the tooltip and which prefix/suffix it carries. */
9
8
  type ChartValueType = "number" | "percentage" | "currency";
10
9
  declare const THEMES: {
11
- readonly light: "";
12
- readonly dark: ".dark";
10
+ readonly light: "";
11
+ readonly dark: ".dark";
13
12
  };
14
13
  type TooltipNameType = number | string;
15
14
  type ChartConfig = Record<string, {
16
- label?: React.ReactNode;
17
- icon?: React.ComponentType;
15
+ label?: React.ReactNode;
16
+ icon?: React.ComponentType;
18
17
  } & ({
19
- color?: string;
20
- theme?: never;
18
+ color?: string;
19
+ theme?: never;
21
20
  } | {
22
- color?: never;
23
- theme: Record<keyof typeof THEMES, string>;
21
+ color?: never;
22
+ theme: Record<keyof typeof THEMES, string>;
24
23
  })>;
25
24
  declare function ChartCard({ className, size, children, ...props }: React.ComponentProps<"section"> & {
26
- size?: ComponentSize;
25
+ size?: ComponentSize;
27
26
  }): React.JSX.Element;
28
27
  declare function ChartHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
29
28
  declare function ChartTitle({ className, size, ...props }: React.ComponentProps<"h3"> & {
30
- size?: ComponentSize;
29
+ size?: ComponentSize;
31
30
  }): React.JSX.Element;
32
31
  declare function ChartDescription({ className, size, ...props }: React.ComponentProps<"p"> & {
33
- size?: ComponentSize;
32
+ size?: ComponentSize;
34
33
  }): React.JSX.Element;
34
+ type ChartMetricLayout = "stacked" | "inline";
35
+ declare function ChartMetric({ className, layout, size, ...props }: React.ComponentProps<"div"> & {
36
+ layout?: ChartMetricLayout;
37
+ size?: ComponentSize;
38
+ }): React.JSX.Element;
39
+ declare function ChartValue({ className, size, ...props }: React.ComponentProps<"p"> & {
40
+ size?: ComponentSize;
41
+ }): React.JSX.Element;
42
+ type ChartTrendDirection = "up" | "down";
43
+ type ChartTrendOrientation = "horizontal" | "vertical";
44
+ declare function ChartTrend({ className, direction, orientation, size, ...props }: React.ComponentProps<"p"> & {
45
+ direction?: ChartTrendDirection;
46
+ orientation?: ChartTrendOrientation;
47
+ size?: ComponentSize;
48
+ }): React.JSX.Element;
49
+ declare function ChartTrendChip({ children, className, direction: directionProp, showIcon, size: sizeProp, ...props }: React.ComponentProps<"span"> & {
50
+ direction?: ChartTrendDirection;
51
+ showIcon?: boolean;
52
+ size?: ComponentSize;
53
+ }): React.JSX.Element;
54
+ declare function ChartTrendValue({ className, size: sizeProp, ...props }: React.ComponentProps<"span"> & {
55
+ size?: ComponentSize;
56
+ }): React.JSX.Element;
57
+ declare function ChartTrendCaption({ className, size: sizeProp, ...props }: React.ComponentProps<"span"> & {
58
+ size?: ComponentSize;
59
+ }): React.JSX.Element;
60
+ declare function ChartFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
35
61
  declare function ChartContainer({ id, className, children, config, initialDimension, ...props }: React.ComponentProps<"div"> & {
36
- config: ChartConfig;
37
- children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>["children"];
38
- initialDimension?: {
39
- width: number;
40
- height: number;
41
- };
62
+ config: ChartConfig;
63
+ children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>["children"];
64
+ initialDimension?: {
65
+ width: number;
66
+ height: number;
67
+ };
42
68
  }): React.JSX.Element;
43
69
  declare const ChartStyle: ({ id, config }: {
44
- id: string;
45
- config: ChartConfig;
70
+ id: string;
71
+ config: ChartConfig;
46
72
  }) => React.JSX.Element | null;
47
73
  declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
48
74
  /**
@@ -54,12 +80,12 @@ declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
54
80
  * Anatomy: series dot · metric label · hero value · period caption.
55
81
  */
56
82
  declare const chartTooltipVariants: (props?: ({
57
- size?: "sm" | "md" | "lg" | "xs" | null | undefined;
58
- } & class_variance_authority_types.ClassProp) | undefined) => string;
59
- declare function ChartTooltipContent({ active, payload, className, hideIndicator, label, labelFormatter, formatter, color, nameKey, valueType, size, }: React.ComponentProps<typeof RechartsPrimitive.Tooltip> & React.ComponentProps<"div"> & {
60
- hideIndicator?: boolean;
61
- nameKey?: string;
62
- valueType?: ChartValueType;
83
+ size?: "lg" | "md" | "sm" | "xs" | null | undefined;
84
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
85
+ declare function ChartTooltipContent({ active, payload, className, hideIndicator, label, labelFormatter, formatter, color, nameKey, valueType, size }: React.ComponentProps<typeof RechartsPrimitive.Tooltip> & React.ComponentProps<"div"> & {
86
+ hideIndicator?: boolean;
87
+ nameKey?: string;
88
+ valueType?: ChartValueType;
63
89
  } & VariantProps<typeof chartTooltipVariants> & Omit<RechartsPrimitive.DefaultTooltipContentProps<TooltipValueType, TooltipNameType>, "accessibilityLayer">): React.JSX.Element | null;
64
90
  declare const ChartLegend: React.MemoExoticComponent<(outsideProps: RechartsPrimitive.LegendProps) => React.ReactPortal | null>;
65
91
  /** Marker shape that ties a legend item to its series. */
@@ -74,49 +100,50 @@ type ChartLegendMarker = "dot" | "square" | "line";
74
100
  * from each payload entry's `inactive` flag (recharts sets this when wired) or
75
101
  * the controlled `inactiveKeys` set.
76
102
  */
77
- declare function ChartLegendContent({ className, hideIcon, payload, verticalAlign, nameKey, marker, size, orientation, inactiveKeys, onToggle, }: React.ComponentProps<"div"> & {
78
- hideIcon?: boolean;
79
- nameKey?: string;
80
- marker?: ChartLegendMarker;
81
- size?: "sm" | "md";
82
- orientation?: "horizontal" | "vertical";
83
- inactiveKeys?: Iterable<string>;
84
- onToggle?: (key: string) => void;
103
+ declare function ChartLegendContent({ className, hideIcon, payload, verticalAlign, nameKey, marker, size, orientation, inactiveKeys, onToggle }: React.ComponentProps<"div"> & {
104
+ hideIcon?: boolean;
105
+ nameKey?: string;
106
+ marker?: ChartLegendMarker;
107
+ size?: "sm" | "md";
108
+ orientation?: "horizontal" | "vertical";
109
+ inactiveKeys?: Iterable<string>;
110
+ onToggle?: (key: string) => void;
85
111
  } & RechartsPrimitive.DefaultLegendContentProps): React.JSX.Element | null;
86
112
  /** The size-scaled layout numbers a cartesian chart needs to build axis props. */
87
113
  type CartesianAxisLayout = {
88
- tickMargin: number;
89
- tickFontSize: number;
90
- yAxisWidth: number;
114
+ tickMargin: number;
115
+ tickFontSize: number;
116
+ yAxisWidth: number;
91
117
  };
92
118
  /**
93
119
  * Shared `<XAxis>`/`<YAxis>` props — the giddaa cartesian-axis defaults (no tick
94
120
  * or axis lines, a size-scaled tick font, and a reserved value-axis width) that
95
121
  * every bar and line chart would otherwise repeat per axis. Spread the result
96
122
  * onto the recharts axis, then add the chart-specific props (`dataKey`,
97
- * `domain`, `ticks`, a `width`/`type` override, …):
123
+ * `domain`, `ticks`, a `width`/`type` override, …). Chart modules build their
124
+ * per-size axis wrappers (`BarChartXAxis`, `LineChartXAxis`, …) on top of this:
98
125
  *
99
- * const chart = useBarChartLayout();
100
- * <XAxis dataKey="month" {...chart.xAxis} />
101
- * <YAxis domain={[0, 120]} {...chart.yAxis} />
126
+ * const axes = cartesianAxisProps({ tickMargin: 8, tickFontSize: 11, yAxisWidth: 32 });
127
+ * <XAxis dataKey="month" {...axes.xAxis} />
128
+ * <YAxis domain={[0, 120]} {...axes.yAxis} />
102
129
  */
103
130
  declare function cartesianAxisProps(layout: CartesianAxisLayout): {
104
- readonly xAxis: {
105
- readonly tickLine: false;
106
- readonly axisLine: false;
107
- readonly tickMargin: number;
108
- readonly tick: {
109
- fontSize: number;
110
- };
131
+ readonly xAxis: {
132
+ readonly tickLine: false;
133
+ readonly axisLine: false;
134
+ readonly tickMargin: number;
135
+ readonly tick: {
136
+ fontSize: number;
111
137
  };
112
- readonly yAxis: {
113
- readonly tickLine: false;
114
- readonly axisLine: false;
115
- readonly width: number;
116
- readonly tick: {
117
- fontSize: number;
118
- };
138
+ };
139
+ readonly yAxis: {
140
+ readonly tickLine: false;
141
+ readonly axisLine: false;
142
+ readonly width: number;
143
+ readonly tick: {
144
+ fontSize: number;
119
145
  };
146
+ };
120
147
  };
121
-
122
- export { type CartesianAxisLayout, ChartCard, type ChartConfig, ChartContainer, ChartDescription, ChartHeader, ChartLegend, ChartLegendContent, ChartStyle, ChartTitle, ChartTooltip, ChartTooltipContent, type ChartValueType, cartesianAxisProps };
148
+ //#endregion
149
+ export { type CartesianAxisLayout, ChartCard, ChartConfig, ChartContainer, ChartDescription, ChartFooter, ChartHeader, ChartLegend, ChartLegendContent, ChartMetric, type ChartMetricLayout, ChartStyle, ChartTitle, ChartTooltip, ChartTooltipContent, ChartTrend, ChartTrendCaption, ChartTrendChip, type ChartTrendDirection, type ChartTrendOrientation, ChartTrendValue, ChartValue, ChartValueType, cartesianAxisProps };