@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
@@ -1,10 +1,7 @@
1
- import * as React from 'react';
2
- import { ChartCard, ChartValueType } from './chart.js';
3
- import { ComponentSize } from './size-context.js';
4
- import 'class-variance-authority/types';
5
- import 'class-variance-authority';
6
- import 'recharts';
7
-
1
+ import { t as ComponentSize } from "./size-context-D4mYvcg8.js";
2
+ import { ChartCard, ChartValueType } from "./chart.js";
3
+ import * as React from "react";
4
+ //#region src/funnel-chart.d.ts
8
5
  /**
9
6
  * A staged conversion chart for drop-off analytics. Two renderings share one
10
7
  * component — `funnel` draws connected, edge-sharing trapezoids (recharts
@@ -12,9 +9,10 @@ import 'recharts';
12
9
  * (recharts `BarChart`, vertical layout) over a faint 100 % reference, using
13
10
  * recharts' built-in `Bar` `background`. Both read top-down as the audience
14
11
  * drops off, and both reuse the same stage data, palette, value-label column,
15
- * legend, frame, and tooltip — only the inner plot differs (the same split as
16
- * `Sparkline`). Per the chart architecture the recharts primitives are rendered
17
- * directly here, never wrapped.
12
+ * legend, frame, and tooltip — only the inner plot differs (the same
13
+ * split-by-render-style approach as the `Sparkline*` components). Per the chart
14
+ * architecture the recharts primitives are rendered directly here, never
15
+ * wrapped.
18
16
  *
19
17
  * @example
20
18
  * <FunnelChart
@@ -35,50 +33,53 @@ type FunnelChartType = "funnel" | "bars";
35
33
  /** Where the colour-key legend sits relative to the plot. */
36
34
  type FunnelLegendPlacement = "right" | "bottom";
37
35
  type FunnelStage = {
38
- /** Stage name, e.g. "Applied". */
39
- label: string;
40
- /** Absolute count reaching this stage. */
41
- value: number;
42
- /** Segment colour; defaults to the palette in stage order. */
43
- fill?: string;
36
+ /** Stage name, e.g. "Applied". */
37
+ label: string;
38
+ /** Absolute count reaching this stage. */
39
+ value: number;
40
+ /** Segment colour; defaults to the palette in stage order. */
41
+ fill?: string;
44
42
  };
45
43
  /**
46
- * Stage palette, ordered top-of-funnel → bottom: forest brass → moss → clay →
47
- * stone. Giddaa has no `chart-1`…`chart-N` tokens yet, so these map to the brand
48
- * scales; assign by order, or override per stage with `fill`.
44
+ * Stage palette, ordered top-of-funnel → bottom. A funnel encodes *magnitude*
45
+ * (each stage is a share of the one above), not identity, so like
46
+ * `heatmap-chart` stages take one theme-aware hue (`surface-brand`) at a
47
+ * descending opacity ramp rather than distinct categorical hues. The ramp is
48
+ * floored (down to 20%, not the heatmap's 8%) so the faintest stage's legend dot
49
+ * stays legible. Assign by order, or override per stage with `fill`.
49
50
  */
50
- declare const FUNNEL_CHART_PALETTE: readonly ["var(--color-forest-700)", "var(--color-brass-500)", "var(--color-moss-600)", "var(--color-clay-500)", "var(--color-stone-500)"];
51
+ declare const FUNNEL_CHART_PALETTE: readonly ["rgb(from var(--color-surface-brand) r g b / 1)", "rgb(from var(--color-surface-brand) r g b / 0.78)", "rgb(from var(--color-surface-brand) r g b / 0.56)", "rgb(from var(--color-surface-brand) r g b / 0.36)", "rgb(from var(--color-surface-brand) r g b / 0.2)"];
51
52
  type FunnelChartLayout = {
52
- /** Plot box height in px. */
53
- height: number;
54
- /** Plot box width in px — the funnel/bars column; labels + legend flow after. */
55
- width: number;
56
- /** Corner radius for the `bars` rendering. */
57
- barRadius: number;
58
- /** Bar thickness cap for the `bars` rendering. */
59
- barMaxSize: number;
53
+ /** Plot box height in px. */
54
+ height: number;
55
+ /** Plot box width in px — the funnel/bars column; labels + legend flow after. */
56
+ width: number;
57
+ /** Corner radius for the `bars` rendering. */
58
+ barRadius: number;
59
+ /** Bar thickness cap for the `bars` rendering. */
60
+ barMaxSize: number;
60
61
  };
61
62
  declare const FUNNEL_CHART_LAYOUT: Record<FunnelChartSize, FunnelChartLayout>;
62
63
  type FunnelChartProps = Omit<React.ComponentProps<typeof ChartCard>, "size" | "children"> & {
63
- /** Stages in funnel order — the widest (top) stage first. */
64
- data: FunnelStage[];
65
- /** Plot rendering. Defaults to `funnel`. */
66
- type?: FunnelChartType;
67
- /** Explicit size; otherwise inherited from the nearest `SizeProvider`. */
68
- size?: FunnelChartSize;
69
- /** Chart heading. Omit to hide the title. */
70
- title?: React.ReactNode;
71
- /** Supporting metadata (period, source). Omit to hide the description. */
72
- description?: React.ReactNode;
73
- /** Enable the hover value tooltip. Default false. */
74
- tooltip?: boolean;
75
- /** Legend placement — a right column or a wrapped bottom row. Default right. */
76
- legend?: FunnelLegendPlacement;
77
- /** Format the absolute count in the value label and tooltip. */
78
- valueFormatter?: (value: number) => string;
79
- /** Value formatting for the tooltip. Defaults to `number`. */
80
- valueType?: ChartValueType;
64
+ /** Stages in funnel order — the widest (top) stage first. */
65
+ data: FunnelStage[];
66
+ /** Plot rendering. Defaults to `funnel`. */
67
+ type?: FunnelChartType;
68
+ /** Explicit size; otherwise inherited from the nearest `SizeProvider`. */
69
+ size?: FunnelChartSize;
70
+ /** Chart heading. Omit to hide the title. */
71
+ title?: React.ReactNode;
72
+ /** Supporting metadata (period, source). Omit to hide the description. */
73
+ description?: React.ReactNode;
74
+ /** Enable the hover value tooltip. Default false. */
75
+ tooltip?: boolean;
76
+ /** Legend placement — a right column or a wrapped bottom row. Default right. */
77
+ legend?: FunnelLegendPlacement;
78
+ /** Format the absolute count in the value label and tooltip. */
79
+ valueFormatter?: (value: number) => string;
80
+ /** Value formatting for the tooltip. Defaults to `number`. */
81
+ valueType?: ChartValueType;
81
82
  };
82
83
  declare function FunnelChart({ data, type, size, title, description, tooltip, legend, valueFormatter, valueType, className, ...props }: FunnelChartProps): React.JSX.Element;
83
-
84
- export { FUNNEL_CHART_LAYOUT, FUNNEL_CHART_PALETTE, FunnelChart, type FunnelChartLayout, type FunnelChartProps, type FunnelChartSize, type FunnelChartType, type FunnelLegendPlacement, type FunnelStage };
84
+ //#endregion
85
+ export { FUNNEL_CHART_LAYOUT, FUNNEL_CHART_PALETTE, FunnelChart, type FunnelChartLayout, type FunnelChartProps, type FunnelChartSize, type FunnelChartType, type FunnelLegendPlacement, type FunnelStage };
@@ -1,196 +1,177 @@
1
1
  "use client";
2
- import {
3
- ChartCard,
4
- ChartContainer,
5
- ChartDescription,
6
- ChartHeader,
7
- ChartTitle,
8
- ChartTooltip,
9
- ChartTooltipContent
10
- } from "./chunk-NOFXVRWL.js";
11
- import {
12
- useComponentSize
13
- } from "./chunk-HL3ZSYES.js";
14
- import {
15
- cn
16
- } from "./chunk-Y4TTYVNE.js";
17
-
18
- // src/funnel-chart.tsx
19
- import { cva } from "class-variance-authority";
20
- import {
21
- Bar,
22
- BarChart,
23
- Funnel,
24
- FunnelChart as RechartsFunnelChart,
25
- XAxis,
26
- YAxis
27
- } from "recharts";
2
+ import { t as cn } from "./cn-BI_4DMBf.js";
3
+ import { useComponentSize } from "./size-context.js";
4
+ import { ChartCard, ChartContainer, ChartDescription, ChartHeader, ChartTitle, ChartTooltip, ChartTooltipContent } from "./chart.js";
28
5
  import { jsx, jsxs } from "react/jsx-runtime";
29
- var FUNNEL_CHART_PALETTE = [
30
- "var(--color-forest-700)",
31
- "var(--color-brass-500)",
32
- "var(--color-moss-600)",
33
- "var(--color-clay-500)",
34
- "var(--color-stone-500)"
6
+ import { cva } from "class-variance-authority";
7
+ import { Bar, BarChart, Funnel, FunnelChart as FunnelChart$1, XAxis, YAxis } from "recharts";
8
+ //#region src/funnel-chart.tsx
9
+ /**
10
+ * Stage palette, ordered top-of-funnel → bottom. A funnel encodes *magnitude*
11
+ * (each stage is a share of the one above), not identity, so — like
12
+ * `heatmap-chart` — stages take one theme-aware hue (`surface-brand`) at a
13
+ * descending opacity ramp rather than distinct categorical hues. The ramp is
14
+ * floored (down to 20%, not the heatmap's 8%) so the faintest stage's legend dot
15
+ * stays legible. Assign by order, or override per stage with `fill`.
16
+ */
17
+ const FUNNEL_CHART_PALETTE = [
18
+ "rgb(from var(--color-surface-brand) r g b / 1)",
19
+ "rgb(from var(--color-surface-brand) r g b / 0.78)",
20
+ "rgb(from var(--color-surface-brand) r g b / 0.56)",
21
+ "rgb(from var(--color-surface-brand) r g b / 0.36)",
22
+ "rgb(from var(--color-surface-brand) r g b / 0.2)"
35
23
  ];
36
- var FUNNEL_CHART_LAYOUT = {
37
- sm: { height: 150, width: 150, barRadius: 3, barMaxSize: 14 },
38
- md: { height: 200, width: 220, barRadius: 4, barMaxSize: 18 },
39
- lg: { height: 264, width: 288, barRadius: 5, barMaxSize: 22 }
24
+ const FUNNEL_CHART_LAYOUT = {
25
+ sm: {
26
+ height: 150,
27
+ width: 150,
28
+ barRadius: 3,
29
+ barMaxSize: 14
30
+ },
31
+ md: {
32
+ height: 200,
33
+ width: 220,
34
+ barRadius: 4,
35
+ barMaxSize: 18
36
+ },
37
+ lg: {
38
+ height: 264,
39
+ width: 288,
40
+ barRadius: 5,
41
+ barMaxSize: 22
42
+ }
40
43
  };
41
- var funnelStageListVariants = cva("flex min-w-0 flex-col", {
42
- variants: {
43
- size: {
44
- sm: "gap-2 text-gdt-xs",
45
- md: "gap-3 text-gdt-sm",
46
- lg: "gap-3.5 text-gdt-sm"
47
- }
48
- },
49
- defaultVariants: { size: "md" }
44
+ /** Vertical stage list — value-label column and the right-hand legend share it. */
45
+ const funnelStageListVariants = cva("flex min-w-0 flex-col", {
46
+ variants: { size: {
47
+ sm: "gap-2 text-gdt-xs",
48
+ md: "gap-3 text-gdt-sm",
49
+ lg: "gap-3.5 text-gdt-sm"
50
+ } },
51
+ defaultVariants: { size: "md" }
50
52
  });
51
- var funnelLegendDotVariants = cva("shrink-0 rounded-full", {
52
- variants: {
53
- size: { sm: "size-2", md: "size-2.5", lg: "size-3" }
54
- },
55
- defaultVariants: { size: "md" }
53
+ const funnelLegendDotVariants = cva("shrink-0 rounded-full", {
54
+ variants: { size: {
55
+ sm: "size-2",
56
+ md: "size-2.5",
57
+ lg: "size-3"
58
+ } },
59
+ defaultVariants: { size: "md" }
56
60
  });
57
- function FunnelChart({
58
- data,
59
- type = "funnel",
60
- size,
61
- title,
62
- description,
63
- tooltip = false,
64
- legend = "right",
65
- valueFormatter = (value) => value.toLocaleString("en-NG"),
66
- valueType = "number",
67
- className,
68
- ...props
69
- }) {
70
- const resolvedSize = useComponentSize(size);
71
- const layout = FUNNEL_CHART_LAYOUT[resolvedSize];
72
- const stages = data.map((stage, i) => ({
73
- ...stage,
74
- fill: stage.fill ?? FUNNEL_CHART_PALETTE[i % FUNNEL_CHART_PALETTE.length]
75
- }));
76
- const top = stages[0]?.value || 1;
77
- const config = Object.fromEntries(
78
- stages.map((stage) => [
79
- stage.label,
80
- { label: stage.label, color: stage.fill }
81
- ])
82
- );
83
- const tooltipNode = tooltip ? /* @__PURE__ */ jsx(
84
- ChartTooltip,
85
- {
86
- cursor: false,
87
- content: /* @__PURE__ */ jsx(ChartTooltipContent, { nameKey: "label", valueType })
88
- }
89
- ) : null;
90
- const chartNode = type === "bars" ? /* @__PURE__ */ jsxs(
91
- BarChart,
92
- {
93
- accessibilityLayer: true,
94
- layout: "vertical",
95
- data: stages,
96
- margin: { top: 0, right: 0, bottom: 0, left: 0 },
97
- barCategoryGap: "0%",
98
- children: [
99
- tooltipNode,
100
- /* @__PURE__ */ jsx(XAxis, { type: "number", domain: [0, top], hide: true }),
101
- /* @__PURE__ */ jsx(YAxis, { type: "category", dataKey: "label", hide: true }),
102
- /* @__PURE__ */ jsx(
103
- Bar,
104
- {
105
- dataKey: "value",
106
- radius: layout.barRadius,
107
- color: "var(--color-line-subtle)",
108
- isAnimationActive: false
109
- }
110
- )
111
- ]
112
- }
113
- ) : /* @__PURE__ */ jsxs(RechartsFunnelChart, { margin: { top: 0, right: 0, bottom: 0, left: 0 }, children: [
114
- tooltipNode,
115
- /* @__PURE__ */ jsx(
116
- Funnel,
117
- {
118
- data: stages,
119
- dataKey: "value",
120
- nameKey: "label",
121
- isAnimationActive: false
122
- }
123
- )
124
- ] });
125
- const valueLabels = /* @__PURE__ */ jsx("ul", { className: cn(funnelStageListVariants({ size: resolvedSize })), children: stages.map((stage) => /* @__PURE__ */ jsxs(
126
- "li",
127
- {
128
- className: "whitespace-nowrap tabular-nums text-fg-primary",
129
- children: [
130
- valueFormatter(stage.value),
131
- " \xB7",
132
- " ",
133
- Math.round(stage.value / top * 100),
134
- "%"
135
- ]
136
- },
137
- stage.label
138
- )) });
139
- const legendNode = /* @__PURE__ */ jsx(
140
- "ul",
141
- {
142
- className: cn(
143
- legend === "right" ? funnelStageListVariants({ size: resolvedSize }) : cn(
144
- "flex flex-row flex-wrap items-center gap-x-4 gap-y-2",
145
- resolvedSize === "sm" ? "text-gdt-xs" : "text-gdt-sm"
146
- )
147
- ),
148
- children: stages.map((stage) => /* @__PURE__ */ jsxs(
149
- "li",
150
- {
151
- className: "flex items-center gap-2 text-fg-primary",
152
- children: [
153
- /* @__PURE__ */ jsx(
154
- "span",
155
- {
156
- "aria-hidden": "true",
157
- className: cn(funnelLegendDotVariants({ size: resolvedSize })),
158
- style: { backgroundColor: stage.fill }
159
- }
160
- ),
161
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: stage.label })
162
- ]
163
- },
164
- stage.label
165
- ))
166
- }
167
- );
168
- return /* @__PURE__ */ jsxs(ChartCard, { size: resolvedSize, className, ...props, children: [
169
- (title != null || description != null) && /* @__PURE__ */ jsxs(ChartHeader, { children: [
170
- title != null && /* @__PURE__ */ jsx(ChartTitle, { children: title }),
171
- description != null && /* @__PURE__ */ jsx(ChartDescription, { children: description })
172
- ] }),
173
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
174
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-4", children: [
175
- /* @__PURE__ */ jsx(
176
- ChartContainer,
177
- {
178
- config,
179
- className: "aspect-auto shrink-0",
180
- style: { width: layout.width, height: layout.height },
181
- children: chartNode
182
- }
183
- ),
184
- valueLabels,
185
- legend === "right" && legendNode
186
- ] }),
187
- legend === "bottom" && legendNode
188
- ] })
189
- ] });
61
+ function FunnelChart({ data, type = "funnel", size, title, description, tooltip = false, legend = "right", valueFormatter = (value) => value.toLocaleString("en-NG"), valueType = "number", className, ...props }) {
62
+ const resolvedSize = useComponentSize(size);
63
+ const layout = FUNNEL_CHART_LAYOUT[resolvedSize];
64
+ const stages = data.map((stage, i) => ({
65
+ ...stage,
66
+ fill: stage.fill ?? FUNNEL_CHART_PALETTE[i % FUNNEL_CHART_PALETTE.length]
67
+ }));
68
+ const top = stages[0]?.value || 1;
69
+ const config = Object.fromEntries(stages.map((stage) => [stage.label, {
70
+ label: stage.label,
71
+ color: stage.fill
72
+ }]));
73
+ const tooltipNode = tooltip ? /* @__PURE__ */ jsx(ChartTooltip, {
74
+ cursor: false,
75
+ content: /* @__PURE__ */ jsx(ChartTooltipContent, {
76
+ nameKey: "label",
77
+ valueType
78
+ })
79
+ }) : null;
80
+ const chartNode = type === "bars" ? /* @__PURE__ */ jsxs(BarChart, {
81
+ accessibilityLayer: true,
82
+ layout: "vertical",
83
+ data: stages,
84
+ margin: {
85
+ top: 0,
86
+ right: 0,
87
+ bottom: 0,
88
+ left: 0
89
+ },
90
+ barCategoryGap: "0%",
91
+ children: [
92
+ tooltipNode,
93
+ /* @__PURE__ */ jsx(XAxis, {
94
+ type: "number",
95
+ domain: [0, top],
96
+ hide: true
97
+ }),
98
+ /* @__PURE__ */ jsx(YAxis, {
99
+ type: "category",
100
+ dataKey: "label",
101
+ hide: true
102
+ }),
103
+ /* @__PURE__ */ jsx(Bar, {
104
+ dataKey: "value",
105
+ radius: layout.barRadius,
106
+ color: "var(--color-line-subtle)",
107
+ isAnimationActive: false
108
+ })
109
+ ]
110
+ }) : /* @__PURE__ */ jsxs(FunnelChart$1, {
111
+ margin: {
112
+ top: 0,
113
+ right: 0,
114
+ bottom: 0,
115
+ left: 0
116
+ },
117
+ children: [tooltipNode, /* @__PURE__ */ jsx(Funnel, {
118
+ data: stages,
119
+ dataKey: "value",
120
+ nameKey: "label",
121
+ isAnimationActive: false
122
+ })]
123
+ });
124
+ const valueLabels = /* @__PURE__ */ jsx("ul", {
125
+ className: cn(funnelStageListVariants({ size: resolvedSize })),
126
+ children: stages.map((stage) => /* @__PURE__ */ jsxs("li", {
127
+ className: "whitespace-nowrap tabular-nums text-fg-primary",
128
+ children: [
129
+ valueFormatter(stage.value),
130
+ " ·",
131
+ " ",
132
+ Math.round(stage.value / top * 100),
133
+ "%"
134
+ ]
135
+ }, stage.label))
136
+ });
137
+ const legendNode = /* @__PURE__ */ jsx("ul", {
138
+ className: cn(legend === "right" ? funnelStageListVariants({ size: resolvedSize }) : cn("flex flex-row flex-wrap items-center gap-x-4 gap-y-2", resolvedSize === "sm" ? "text-gdt-xs" : "text-gdt-sm")),
139
+ children: stages.map((stage) => /* @__PURE__ */ jsxs("li", {
140
+ className: "flex items-center gap-2 text-fg-primary",
141
+ children: [/* @__PURE__ */ jsx("span", {
142
+ "aria-hidden": "true",
143
+ className: cn(funnelLegendDotVariants({ size: resolvedSize })),
144
+ style: { backgroundColor: stage.fill }
145
+ }), /* @__PURE__ */ jsx("span", {
146
+ className: "min-w-0 truncate",
147
+ children: stage.label
148
+ })]
149
+ }, stage.label))
150
+ });
151
+ return /* @__PURE__ */ jsxs(ChartCard, {
152
+ size: resolvedSize,
153
+ className,
154
+ ...props,
155
+ children: [(title != null || description != null) && /* @__PURE__ */ jsxs(ChartHeader, { children: [title != null && /* @__PURE__ */ jsx(ChartTitle, { children: title }), description != null && /* @__PURE__ */ jsx(ChartDescription, { children: description })] }), /* @__PURE__ */ jsxs("div", {
156
+ className: "flex flex-col gap-4",
157
+ children: [/* @__PURE__ */ jsxs("div", {
158
+ className: "flex flex-wrap items-center gap-x-6 gap-y-4",
159
+ children: [
160
+ /* @__PURE__ */ jsx(ChartContainer, {
161
+ config,
162
+ className: "aspect-auto shrink-0",
163
+ style: {
164
+ width: layout.width,
165
+ height: layout.height
166
+ },
167
+ children: chartNode
168
+ }),
169
+ valueLabels,
170
+ legend === "right" && legendNode
171
+ ]
172
+ }), legend === "bottom" && legendNode]
173
+ })]
174
+ });
190
175
  }
191
- export {
192
- FUNNEL_CHART_LAYOUT,
193
- FUNNEL_CHART_PALETTE,
194
- FunnelChart
195
- };
196
- //# sourceMappingURL=funnel-chart.js.map
176
+ //#endregion
177
+ export { FUNNEL_CHART_LAYOUT, FUNNEL_CHART_PALETTE, FunnelChart };
@@ -1,18 +1,17 @@
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
-
1
+ import { VariantProps } from "class-variance-authority";
2
+ import * as React from "react";
3
+ //#region src/gallery-indicator.d.ts
5
4
  type GalleryIndicatorSize = "sm" | "md" | "lg";
6
5
  declare const galleryIndicatorVariants: (props?: ({
7
- size?: "sm" | "md" | "lg" | null | undefined;
8
- } & class_variance_authority_types.ClassProp) | undefined) => string;
6
+ size?: "lg" | "md" | "sm" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
8
  type GalleryIndicatorProps = React.ComponentProps<"span"> & VariantProps<typeof galleryIndicatorVariants> & {
10
- photoCount?: number;
11
- currentPhoto?: number;
12
- totalPhotos?: number;
13
- label?: string;
9
+ photoCount?: number;
10
+ currentPhoto?: number;
11
+ totalPhotos?: number;
12
+ label?: string;
14
13
  };
15
14
  declare function GalleryIndicatorIcon(props: React.SVGProps<SVGSVGElement>): React.JSX.Element;
16
15
  declare function GalleryIndicator({ className, size, photoCount, currentPhoto, totalPhotos, label, children, ...props }: GalleryIndicatorProps): React.JSX.Element;
17
-
18
- export { GalleryIndicator, GalleryIndicatorIcon, type GalleryIndicatorProps, type GalleryIndicatorSize, galleryIndicatorVariants };
16
+ //#endregion
17
+ export { GalleryIndicator, GalleryIndicatorIcon, type GalleryIndicatorProps, type GalleryIndicatorSize, galleryIndicatorVariants };
@@ -1,12 +1,75 @@
1
- import {
2
- GalleryIndicator,
3
- GalleryIndicatorIcon,
4
- galleryIndicatorVariants
5
- } from "./chunk-UJJNLGTM.js";
6
- import "./chunk-Y4TTYVNE.js";
7
- export {
8
- GalleryIndicator,
9
- GalleryIndicatorIcon,
10
- galleryIndicatorVariants
11
- };
12
- //# sourceMappingURL=gallery-indicator.js.map
1
+ import { t as cn } from "./cn-BI_4DMBf.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ //#region src/gallery-indicator.tsx
5
+ const galleryIndicatorVariants = cva("inline-flex w-fit shrink-0 items-center justify-center rounded-[100px] bg-black/40 px-3 font-bold leading-none whitespace-nowrap text-white shadow-[0px_0px_4px_0px_rgba(0,0,0,0.1)] backdrop-blur-[15px] sm:px-4", {
6
+ variants: { size: {
7
+ sm: "h-[35px] gap-2 text-gdt-xs sm:gap-4 [&>svg]:size-5",
8
+ md: "h-10 gap-2 text-gdt-sm sm:gap-4 [&>svg]:size-5",
9
+ lg: "h-10 gap-2 text-gdt-lg sm:h-[50px] sm:gap-4 [&>svg]:size-6"
10
+ } },
11
+ defaultVariants: { size: "md" }
12
+ });
13
+ function GalleryIndicatorIcon(props) {
14
+ return /* @__PURE__ */ jsxs("svg", {
15
+ "aria-hidden": "true",
16
+ xmlns: "http://www.w3.org/2000/svg",
17
+ viewBox: "0 0 24 24",
18
+ fill: "none",
19
+ ...props,
20
+ children: [
21
+ /* @__PURE__ */ jsx("path", {
22
+ d: "M5.75 17.5 3.63 7.62a2 2 0 0 1 1.53-2.37l9.66-2.07a2 2 0 0 1 2.37 1.53l.27 1.29",
23
+ stroke: "currentColor",
24
+ strokeLinecap: "round",
25
+ strokeLinejoin: "round",
26
+ strokeWidth: "2"
27
+ }),
28
+ /* @__PURE__ */ jsx("rect", {
29
+ width: "14.5",
30
+ height: "12.5",
31
+ x: "7",
32
+ y: "7.5",
33
+ stroke: "currentColor",
34
+ strokeLinejoin: "round",
35
+ strokeWidth: "2",
36
+ rx: "2"
37
+ }),
38
+ /* @__PURE__ */ jsx("path", {
39
+ d: "m8.75 17 3.31-3.31a1.25 1.25 0 0 1 1.77 0L17.25 17",
40
+ stroke: "currentColor",
41
+ strokeLinecap: "round",
42
+ strokeLinejoin: "round",
43
+ strokeWidth: "2"
44
+ }),
45
+ /* @__PURE__ */ jsx("path", {
46
+ d: "m15.5 15.25.81-.81a1.25 1.25 0 0 1 1.77 0L20.5 16.86",
47
+ stroke: "currentColor",
48
+ strokeLinecap: "round",
49
+ strokeLinejoin: "round",
50
+ strokeWidth: "2"
51
+ }),
52
+ /* @__PURE__ */ jsx("circle", {
53
+ cx: "17.25",
54
+ cy: "11.25",
55
+ r: "1.25",
56
+ fill: "currentColor"
57
+ })
58
+ ]
59
+ });
60
+ }
61
+ function GalleryIndicator({ className, size = "md", photoCount = 35, currentPhoto, totalPhotos = photoCount, label, children, ...props }) {
62
+ const resolvedLabel = children ?? label ?? (currentPhoto === void 0 ? `View All ${photoCount} Photos` : `${currentPhoto}/${totalPhotos}`);
63
+ return /* @__PURE__ */ jsxs("span", {
64
+ "data-slot": "gallery-indicator",
65
+ "data-size": size,
66
+ className: cn(galleryIndicatorVariants({ size }), className),
67
+ ...props,
68
+ children: [/* @__PURE__ */ jsx(GalleryIndicatorIcon, { className: "shrink-0 text-white" }), /* @__PURE__ */ jsx("span", {
69
+ className: "min-w-0 truncate",
70
+ children: resolvedLabel
71
+ })]
72
+ });
73
+ }
74
+ //#endregion
75
+ export { GalleryIndicator, GalleryIndicatorIcon, galleryIndicatorVariants };