@giddaa-housing/ui 1.0.0 → 1.1.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 (326) hide show
  1. package/css/generated/shared.css +1 -1
  2. package/dist/accordion.d.ts +9 -10
  3. package/dist/accordion.js +41 -87
  4. package/dist/activity-timeline.d.ts +12 -16
  5. package/dist/activity-timeline.js +83 -198
  6. package/dist/alert.d.ts +8 -9
  7. package/dist/alert.js +53 -111
  8. package/dist/auth-layout.d.ts +4 -4
  9. package/dist/auth-layout.js +143 -294
  10. package/dist/avatar.d.ts +6 -6
  11. package/dist/avatar.js +49 -19
  12. package/dist/badge.d.ts +12 -14
  13. package/dist/badge.js +71 -11
  14. package/dist/bar-chart.d.ts +65 -67
  15. package/dist/bar-chart.js +232 -207
  16. package/dist/breadcrumb.d.ts +5 -5
  17. package/dist/breadcrumb.js +56 -118
  18. package/dist/bullet-chart.d.ts +33 -33
  19. package/dist/bullet-chart.js +121 -148
  20. package/dist/button-BZIeyUw6.d.ts +17 -0
  21. package/dist/button-group.d.ts +13 -16
  22. package/dist/button-group.js +39 -88
  23. package/dist/button.d.ts +2 -19
  24. package/dist/button.js +94 -13
  25. package/dist/calendar.d.ts +6 -6
  26. package/dist/calendar.js +138 -17
  27. package/dist/card.d.ts +14 -16
  28. package/dist/card.js +59 -145
  29. package/dist/carousel.d.ts +34 -35
  30. package/dist/carousel.js +335 -20
  31. package/dist/chart.d.ts +58 -59
  32. package/dist/chart.js +376 -28
  33. package/dist/checkbox.d.ts +10 -12
  34. package/dist/checkbox.js +82 -47
  35. package/dist/cn-BI_4DMBf.js +23 -0
  36. package/dist/collapsible.d.ts +7 -8
  37. package/dist/collapsible.js +22 -47
  38. package/dist/combobox.d.ts +10 -10
  39. package/dist/combobox.js +236 -44
  40. package/dist/cta.d.ts +12 -14
  41. package/dist/cta.js +175 -341
  42. package/dist/currency-selector.d.ts +31 -32
  43. package/dist/currency-selector.js +106 -184
  44. package/dist/data-table.d.ts +164 -0
  45. package/dist/data-table.js +673 -0
  46. package/dist/date-picker.d.ts +22 -23
  47. package/dist/date-picker.js +119 -192
  48. package/dist/details-card.d.ts +7 -7
  49. package/dist/details-card.js +104 -253
  50. package/dist/dialog.d.ts +13 -14
  51. package/dist/dialog.js +116 -209
  52. package/dist/dropdown-menu.d.ts +13 -13
  53. package/dist/dropdown-menu.js +180 -37
  54. package/dist/dropzone.d.ts +55 -55
  55. package/dist/dropzone.js +327 -439
  56. package/dist/editorial-card.d.ts +23 -25
  57. package/dist/editorial-card.js +129 -296
  58. package/dist/empty-state.d.ts +8 -9
  59. package/dist/empty-state.js +48 -105
  60. package/dist/field.d.ts +23 -25
  61. package/dist/field.js +110 -221
  62. package/dist/filter.d.ts +118 -0
  63. package/dist/filter.js +775 -0
  64. package/dist/footer.d.ts +8 -15
  65. package/dist/footer.js +197 -400
  66. package/dist/funnel-chart.d.ts +38 -41
  67. package/dist/funnel-chart.js +167 -189
  68. package/dist/gallery-indicator.d.ts +11 -12
  69. package/dist/gallery-indicator.js +75 -12
  70. package/dist/heatmap-chart.d.ts +47 -50
  71. package/dist/heatmap-chart.js +186 -237
  72. package/dist/infotip.d.ts +8 -9
  73. package/dist/infotip.js +33 -59
  74. package/dist/input-CfoEJ8A6.d.ts +12 -0
  75. package/dist/input-group.d.ts +16 -20
  76. package/dist/input-group.js +99 -23
  77. package/dist/input-size-context-C-SFx9sx.d.ts +10 -0
  78. package/dist/input-size-context.d.ts +2 -11
  79. package/dist/input-size-context.js +17 -9
  80. package/dist/input.d.ts +2 -13
  81. package/dist/input.js +27 -11
  82. package/dist/item.d.ts +7 -8
  83. package/dist/item.js +22 -59
  84. package/dist/kpi-card.d.ts +18 -20
  85. package/dist/kpi-card.js +84 -192
  86. package/dist/label.d.ts +6 -6
  87. package/dist/label.js +40 -8
  88. package/dist/line-chart.d.ts +88 -89
  89. package/dist/line-chart.js +142 -104
  90. package/dist/logo.d.ts +4 -4
  91. package/dist/logo.js +92 -9
  92. package/dist/map-indicator.d.ts +7 -7
  93. package/dist/map-indicator.js +80 -106
  94. package/dist/match.d.ts +10 -11
  95. package/dist/match.js +62 -107
  96. package/dist/media-gallery-hero.d.ts +40 -42
  97. package/dist/media-gallery-hero.js +182 -343
  98. package/dist/media-player.d.ts +17 -17
  99. package/dist/media-player.js +873 -1348
  100. package/dist/multi-step-form.d.ts +56 -0
  101. package/dist/multi-step-form.js +342 -0
  102. package/dist/number-input.d.ts +34 -34
  103. package/dist/number-input.js +61 -117
  104. package/dist/page-header.d.ts +10 -11
  105. package/dist/page-header.js +34 -79
  106. package/dist/pagination.d.ts +17 -21
  107. package/dist/pagination.js +132 -207
  108. package/dist/password-input.d.ts +5 -13
  109. package/dist/password-input.js +31 -55
  110. package/dist/phone-input.d.ts +19 -20
  111. package/dist/phone-input.js +226 -344
  112. package/dist/photo-gallery.d.ts +19 -19
  113. package/dist/photo-gallery.js +313 -449
  114. package/dist/picker-lzgmsNfG.js +32 -0
  115. package/dist/pie-chart.d.ts +60 -60
  116. package/dist/pie-chart.js +140 -148
  117. package/dist/popover.d.ts +9 -9
  118. package/dist/popover.js +72 -23
  119. package/dist/price-tag.d.ts +26 -27
  120. package/dist/price-tag.js +113 -173
  121. package/dist/progress.d.ts +16 -17
  122. package/dist/progress.js +169 -24
  123. package/dist/property-listing-card.d.ts +14 -17
  124. package/dist/property-listing-card.js +102 -220
  125. package/dist/radar-chart.d.ts +29 -31
  126. package/dist/radar-chart.js +162 -137
  127. package/dist/radio-group.d.ts +11 -13
  128. package/dist/radio-group.js +46 -60
  129. package/dist/review-block.d.ts +14 -16
  130. package/dist/review-block.js +154 -10
  131. package/dist/rich-text-editor.d.ts +30 -14
  132. package/dist/rich-text-editor.js +592 -716
  133. package/dist/scatter-chart.d.ts +45 -47
  134. package/dist/scatter-chart.js +236 -240
  135. package/dist/search-input.d.ts +8 -16
  136. package/dist/search-input.js +57 -109
  137. package/dist/select.d.ts +8 -8
  138. package/dist/select.js +144 -27
  139. package/dist/separator.d.ts +8 -9
  140. package/dist/separator.js +32 -8
  141. package/dist/sheet.d.ts +11 -11
  142. package/dist/sheet.js +103 -24
  143. package/dist/sidebar.d.ts +32 -37
  144. package/dist/sidebar.js +364 -634
  145. package/dist/size-context-D4mYvcg8.d.ts +10 -0
  146. package/dist/size-context.d.ts +2 -11
  147. package/dist/size-context.js +17 -9
  148. package/dist/skeleton.d.ts +4 -5
  149. package/dist/skeleton.js +12 -8
  150. package/dist/slider.d.ts +8 -9
  151. package/dist/slider.js +64 -135
  152. package/dist/sparkline.d.ts +43 -46
  153. package/dist/sparkline.js +221 -251
  154. package/dist/stepper.d.ts +23 -24
  155. package/dist/stepper.js +149 -246
  156. package/dist/styles.css +510 -108
  157. package/dist/switch.d.ts +10 -12
  158. package/dist/switch.js +48 -70
  159. package/dist/table-card.d.ts +35 -0
  160. package/dist/table-card.js +125 -0
  161. package/dist/table.d.ts +18 -14
  162. package/dist/table.js +113 -154
  163. package/dist/tabs.d.ts +23 -15
  164. package/dist/tabs.js +71 -18
  165. package/dist/tag.d.ts +21 -23
  166. package/dist/tag.js +103 -159
  167. package/dist/testimonial-block.d.ts +18 -19
  168. package/dist/testimonial-block.js +189 -358
  169. package/dist/textarea-IS_D8pXf.d.ts +11 -0
  170. package/dist/textarea.d.ts +2 -12
  171. package/dist/textarea.js +24 -11
  172. package/dist/time-picker.d.ts +11 -11
  173. package/dist/time-picker.js +245 -302
  174. package/dist/toast.d.ts +16 -18
  175. package/dist/toast.js +154 -205
  176. package/dist/tooltip.d.ts +8 -9
  177. package/dist/tooltip.js +37 -12
  178. package/dist/tree-map.d.ts +54 -57
  179. package/dist/tree-map.js +227 -269
  180. package/dist/use-uncontrolled-CLfM1XbB.js +21 -0
  181. package/dist/waterfall-chart.d.ts +94 -97
  182. package/dist/waterfall-chart.js +455 -552
  183. package/package.json +28 -9
  184. package/dist/accordion.js.map +0 -1
  185. package/dist/activity-timeline.js.map +0 -1
  186. package/dist/alert.js.map +0 -1
  187. package/dist/auth-layout.js.map +0 -1
  188. package/dist/avatar.js.map +0 -1
  189. package/dist/badge.js.map +0 -1
  190. package/dist/bar-chart.js.map +0 -1
  191. package/dist/breadcrumb.js.map +0 -1
  192. package/dist/bullet-chart.js.map +0 -1
  193. package/dist/button-group.js.map +0 -1
  194. package/dist/button.js.map +0 -1
  195. package/dist/calendar.js.map +0 -1
  196. package/dist/card.js.map +0 -1
  197. package/dist/carousel.js.map +0 -1
  198. package/dist/chart.js.map +0 -1
  199. package/dist/checkbox.js.map +0 -1
  200. package/dist/chunk-322YCNVL.js +0 -278
  201. package/dist/chunk-322YCNVL.js.map +0 -1
  202. package/dist/chunk-3ACQVT7A.js +0 -25
  203. package/dist/chunk-3ACQVT7A.js.map +0 -1
  204. package/dist/chunk-3T65TLJX.js +0 -334
  205. package/dist/chunk-3T65TLJX.js.map +0 -1
  206. package/dist/chunk-6ZSGQHH2.js +0 -192
  207. package/dist/chunk-6ZSGQHH2.js.map +0 -1
  208. package/dist/chunk-7TBMLFGW.js +0 -41
  209. package/dist/chunk-7TBMLFGW.js.map +0 -1
  210. package/dist/chunk-B4H6RNDH.js +0 -135
  211. package/dist/chunk-B4H6RNDH.js.map +0 -1
  212. package/dist/chunk-BUXCGZ6X.js +0 -219
  213. package/dist/chunk-BUXCGZ6X.js.map +0 -1
  214. package/dist/chunk-CHII2QHH.js +0 -58
  215. package/dist/chunk-CHII2QHH.js.map +0 -1
  216. package/dist/chunk-DMNOXRRW.js +0 -147
  217. package/dist/chunk-DMNOXRRW.js.map +0 -1
  218. package/dist/chunk-EFSOSSIC.js +0 -130
  219. package/dist/chunk-EFSOSSIC.js.map +0 -1
  220. package/dist/chunk-FZDSVMKY.js +0 -363
  221. package/dist/chunk-FZDSVMKY.js.map +0 -1
  222. package/dist/chunk-GJOFIJS3.js +0 -246
  223. package/dist/chunk-GJOFIJS3.js.map +0 -1
  224. package/dist/chunk-HL3ZSYES.js +0 -23
  225. package/dist/chunk-HL3ZSYES.js.map +0 -1
  226. package/dist/chunk-JVLUBAPB.js +0 -129
  227. package/dist/chunk-JVLUBAPB.js.map +0 -1
  228. package/dist/chunk-KDPYSOYZ.js +0 -64
  229. package/dist/chunk-KDPYSOYZ.js.map +0 -1
  230. package/dist/chunk-KSMDANKI.js +0 -43
  231. package/dist/chunk-KSMDANKI.js.map +0 -1
  232. package/dist/chunk-MEKCCOP5.js +0 -46
  233. package/dist/chunk-MEKCCOP5.js.map +0 -1
  234. package/dist/chunk-NOFXVRWL.js +0 -451
  235. package/dist/chunk-NOFXVRWL.js.map +0 -1
  236. package/dist/chunk-PC5MHNVA.js +0 -171
  237. package/dist/chunk-PC5MHNVA.js.map +0 -1
  238. package/dist/chunk-QKAQZ2GU.js +0 -122
  239. package/dist/chunk-QKAQZ2GU.js.map +0 -1
  240. package/dist/chunk-QZHSHSVV.js +0 -26
  241. package/dist/chunk-QZHSHSVV.js.map +0 -1
  242. package/dist/chunk-RBMK26XD.js +0 -19
  243. package/dist/chunk-RBMK26XD.js.map +0 -1
  244. package/dist/chunk-SFNJGF6M.js +0 -262
  245. package/dist/chunk-SFNJGF6M.js.map +0 -1
  246. package/dist/chunk-UJJNLGTM.js +0 -112
  247. package/dist/chunk-UJJNLGTM.js.map +0 -1
  248. package/dist/chunk-VGR4ZWJ3.js +0 -418
  249. package/dist/chunk-VGR4ZWJ3.js.map +0 -1
  250. package/dist/chunk-XG47P6D4.js +0 -99
  251. package/dist/chunk-XG47P6D4.js.map +0 -1
  252. package/dist/chunk-XZZAHNVM.js +0 -21
  253. package/dist/chunk-XZZAHNVM.js.map +0 -1
  254. package/dist/chunk-Y4TTYVNE.js +0 -36
  255. package/dist/chunk-Y4TTYVNE.js.map +0 -1
  256. package/dist/chunk-YDWIHW6Q.js +0 -69
  257. package/dist/chunk-YDWIHW6Q.js.map +0 -1
  258. package/dist/collapsible.js.map +0 -1
  259. package/dist/combobox.js.map +0 -1
  260. package/dist/cta.js.map +0 -1
  261. package/dist/currency-selector.js.map +0 -1
  262. package/dist/date-picker.js.map +0 -1
  263. package/dist/details-card.js.map +0 -1
  264. package/dist/dialog.js.map +0 -1
  265. package/dist/dropdown-menu.js.map +0 -1
  266. package/dist/dropzone.js.map +0 -1
  267. package/dist/editorial-card.js.map +0 -1
  268. package/dist/empty-state.js.map +0 -1
  269. package/dist/field.js.map +0 -1
  270. package/dist/footer.js.map +0 -1
  271. package/dist/funnel-chart.js.map +0 -1
  272. package/dist/gallery-indicator.js.map +0 -1
  273. package/dist/heatmap-chart.js.map +0 -1
  274. package/dist/infotip.js.map +0 -1
  275. package/dist/input-group.js.map +0 -1
  276. package/dist/input-size-context.js.map +0 -1
  277. package/dist/input.js.map +0 -1
  278. package/dist/item.js.map +0 -1
  279. package/dist/kpi-card.js.map +0 -1
  280. package/dist/label.js.map +0 -1
  281. package/dist/line-chart.js.map +0 -1
  282. package/dist/logo.js.map +0 -1
  283. package/dist/map-indicator.js.map +0 -1
  284. package/dist/match.js.map +0 -1
  285. package/dist/media-gallery-hero.js.map +0 -1
  286. package/dist/media-player.js.map +0 -1
  287. package/dist/number-input.js.map +0 -1
  288. package/dist/page-header.js.map +0 -1
  289. package/dist/pagination.js.map +0 -1
  290. package/dist/password-input.js.map +0 -1
  291. package/dist/phone-input.js.map +0 -1
  292. package/dist/photo-gallery.js.map +0 -1
  293. package/dist/pie-chart.js.map +0 -1
  294. package/dist/popover.js.map +0 -1
  295. package/dist/price-tag.js.map +0 -1
  296. package/dist/progress.js.map +0 -1
  297. package/dist/property-listing-card.js.map +0 -1
  298. package/dist/radar-chart.js.map +0 -1
  299. package/dist/radio-group.js.map +0 -1
  300. package/dist/review-block.js.map +0 -1
  301. package/dist/rich-text-editor.js.map +0 -1
  302. package/dist/scatter-chart.js.map +0 -1
  303. package/dist/search-input.js.map +0 -1
  304. package/dist/select.js.map +0 -1
  305. package/dist/separator.js.map +0 -1
  306. package/dist/sheet.js.map +0 -1
  307. package/dist/sidebar.js.map +0 -1
  308. package/dist/size-context.js.map +0 -1
  309. package/dist/skeleton.js.map +0 -1
  310. package/dist/slider.js.map +0 -1
  311. package/dist/sparkline.js.map +0 -1
  312. package/dist/stepper.js.map +0 -1
  313. package/dist/switch.js.map +0 -1
  314. package/dist/tab-list.d.ts +0 -38
  315. package/dist/tab-list.js +0 -123
  316. package/dist/tab-list.js.map +0 -1
  317. package/dist/table.js.map +0 -1
  318. package/dist/tabs.js.map +0 -1
  319. package/dist/tag.js.map +0 -1
  320. package/dist/testimonial-block.js.map +0 -1
  321. package/dist/textarea.js.map +0 -1
  322. package/dist/time-picker.js.map +0 -1
  323. package/dist/toast.js.map +0 -1
  324. package/dist/tooltip.js.map +0 -1
  325. package/dist/tree-map.js.map +0 -1
  326. package/dist/waterfall-chart.js.map +0 -1
@@ -1,10 +1,7 @@
1
- import * as React from 'react';
2
- import { ChartCard } 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 } from "./chart.js";
3
+ import * as React from "react";
4
+ //#region src/heatmap-chart.d.ts
8
5
  /**
9
6
  * A heatmap — a row × column grid encoding magnitude as fill intensity.
10
7
  * Reach for one to compare a measure across two categorical dimensions at a
@@ -37,12 +34,12 @@ import 'recharts';
37
34
  /** Heatmap sizes line up with the three shared `ComponentSize` values. */
38
35
  type HeatmapChartSize = ComponentSize;
39
36
  type HeatmapChartCellDatum = {
40
- /** Row category label. */
41
- row: string;
42
- /** Column category label. */
43
- column: string;
44
- /** Magnitude driving the cell's fill. Omit the datum entirely for "no data". */
45
- value: number;
37
+ /** Row category label. */
38
+ row: string;
39
+ /** Column category label. */
40
+ column: string;
41
+ /** Magnitude driving the cell's fill. Omit the datum entirely for "no data". */
42
+ value: number;
46
43
  };
47
44
  /**
48
45
  * Sequential fill ramp — `--color-surface-brand` (already theme-aware) at five
@@ -54,45 +51,45 @@ type HeatmapChartCellDatum = {
54
51
  */
55
52
  declare const HEATMAP_CHART_PALETTE: readonly ["rgb(from var(--color-surface-brand) r g b / 0.08)", "rgb(from var(--color-surface-brand) r g b / 0.22)", "rgb(from var(--color-surface-brand) r g b / 0.44)", "rgb(from var(--color-surface-brand) r g b / 0.7)", "rgb(from var(--color-surface-brand) r g b / 1)"];
56
53
  type HeatmapChartLayout = {
57
- /** Width/height of a single (square) cell in px. */
58
- cellSize: number;
59
- /** Gap between cells in px. */
60
- gap: number;
61
- /** Reserved width for row labels in px. */
62
- rowLabelWidth: number;
63
- /** Reserved height for the column header row in px. */
64
- columnLabelHeight: number;
65
- /** Row/column label font size in px. */
66
- labelFontSize: number;
67
- /** In-cell value label font size in px. */
68
- valueFontSize: number;
69
- /** Width of a single legend ramp swatch in px. */
70
- legendSwatchSize: number;
54
+ /** Width/height of a single (square) cell in px. */
55
+ cellSize: number;
56
+ /** Gap between cells in px. */
57
+ gap: number;
58
+ /** Reserved width for row labels in px. */
59
+ rowLabelWidth: number;
60
+ /** Reserved height for the column header row in px. */
61
+ columnLabelHeight: number;
62
+ /** Row/column label font size in px. */
63
+ labelFontSize: number;
64
+ /** In-cell value label font size in px. */
65
+ valueFontSize: number;
66
+ /** Width of a single legend ramp swatch in px. */
67
+ legendSwatchSize: number;
71
68
  };
72
69
  declare const HEATMAP_CHART_LAYOUT: Record<HeatmapChartSize, HeatmapChartLayout>;
73
70
  type HeatmapChartProps = Omit<React.ComponentProps<typeof ChartCard>, "size" | "children"> & {
74
- /** Cells — one entry per row/column pair that has a value. */
75
- data: HeatmapChartCellDatum[];
76
- /** Row order, top to bottom. Defaults to first-seen order in `data`. */
77
- rows?: string[];
78
- /** Column order, left to right. Defaults to first-seen order in `data`. */
79
- columns?: string[];
80
- /** Fixed `[min, max]` for the color scale. Defaults to the data's range. */
81
- domain?: [number, number];
82
- /** Explicit size; otherwise inherited from the nearest `SizeProvider`. */
83
- size?: HeatmapChartSize;
84
- /** Chart heading. Omit to hide the title. */
85
- title?: React.ReactNode;
86
- /** Supporting metadata (period, source). Omit to hide the description. */
87
- description?: React.ReactNode;
88
- /** Show the sequential-scale legend under the grid. Default true. */
89
- legend?: boolean;
90
- /** Print the formatted value inside every cell. Default false — the
91
- * hover/focus tooltip carries exact figures without crowding the grid. */
92
- showValues?: boolean;
93
- /** Format a cell value for the tooltip, legend, and in-cell label. */
94
- valueFormatter?: (value: number) => string;
71
+ /** Cells — one entry per row/column pair that has a value. */
72
+ data: HeatmapChartCellDatum[];
73
+ /** Row order, top to bottom. Defaults to first-seen order in `data`. */
74
+ rows?: string[];
75
+ /** Column order, left to right. Defaults to first-seen order in `data`. */
76
+ columns?: string[];
77
+ /** Fixed `[min, max]` for the color scale. Defaults to the data's range. */
78
+ domain?: [number, number];
79
+ /** Explicit size; otherwise inherited from the nearest `SizeProvider`. */
80
+ size?: HeatmapChartSize;
81
+ /** Chart heading. Omit to hide the title. */
82
+ title?: React.ReactNode;
83
+ /** Supporting metadata (period, source). Omit to hide the description. */
84
+ description?: React.ReactNode;
85
+ /** Show the sequential-scale legend under the grid. Default true. */
86
+ legend?: boolean;
87
+ /** Print the formatted value inside every cell. Default false — the
88
+ * hover/focus tooltip carries exact figures without crowding the grid. */
89
+ showValues?: boolean;
90
+ /** Format a cell value for the tooltip, legend, and in-cell label. */
91
+ valueFormatter?: (value: number) => string;
95
92
  };
96
93
  declare function HeatmapChart({ data, rows: rowsProp, columns: columnsProp, domain: domainProp, size, title, description, legend, showValues, valueFormatter, className, ...props }: HeatmapChartProps): React.JSX.Element;
97
-
98
- export { HEATMAP_CHART_LAYOUT, HEATMAP_CHART_PALETTE, HeatmapChart, type HeatmapChartCellDatum, type HeatmapChartLayout, type HeatmapChartProps, type HeatmapChartSize };
94
+ //#endregion
95
+ export { HEATMAP_CHART_LAYOUT, HEATMAP_CHART_PALETTE, HeatmapChart, type HeatmapChartCellDatum, type HeatmapChartLayout, type HeatmapChartProps, type HeatmapChartSize };
@@ -1,248 +1,197 @@
1
1
  "use client";
2
- import {
3
- ChartCard,
4
- ChartDescription,
5
- ChartHeader,
6
- ChartTitle
7
- } from "./chunk-NOFXVRWL.js";
8
- import {
9
- useComponentSize
10
- } from "./chunk-HL3ZSYES.js";
11
- import "./chunk-Y4TTYVNE.js";
12
-
13
- // src/heatmap-chart.tsx
14
- import { Fragment } from "react";
2
+ import { useComponentSize } from "./size-context.js";
3
+ import { ChartCard, ChartDescription, ChartHeader, ChartTitle } from "./chart.js";
15
4
  import { jsx, jsxs } from "react/jsx-runtime";
16
- var HEATMAP_CHART_PALETTE = [
17
- "rgb(from var(--color-surface-brand) r g b / 0.08)",
18
- "rgb(from var(--color-surface-brand) r g b / 0.22)",
19
- "rgb(from var(--color-surface-brand) r g b / 0.44)",
20
- "rgb(from var(--color-surface-brand) r g b / 0.7)",
21
- "rgb(from var(--color-surface-brand) r g b / 1)"
5
+ import { Fragment as Fragment$1 } from "react";
6
+ //#region src/heatmap-chart.tsx
7
+ /**
8
+ * Sequential fill ramp — `--color-surface-brand` (already theme-aware) at five
9
+ * magnitude-scaled opacity stops: 8%, 22%, 44%, 70%, 100%. Index 0 is the
10
+ * lowest magnitude bucket, index 4 the highest — assign by bucket order,
11
+ * never by an arbitrary opacity pick. Relative color syntax (`rgb(from … / a)`)
12
+ * keeps each stop a true alpha over whatever surface it sits on, matching the
13
+ * shadow/gradient tokens in `styles/giddaa.css`.
14
+ */
15
+ const HEATMAP_CHART_PALETTE = [
16
+ "rgb(from var(--color-surface-brand) r g b / 0.08)",
17
+ "rgb(from var(--color-surface-brand) r g b / 0.22)",
18
+ "rgb(from var(--color-surface-brand) r g b / 0.44)",
19
+ "rgb(from var(--color-surface-brand) r g b / 0.7)",
20
+ "rgb(from var(--color-surface-brand) r g b / 1)"
22
21
  ];
23
- var HEATMAP_CHART_LAYOUT = {
24
- sm: {
25
- cellSize: 20,
26
- gap: 3,
27
- rowLabelWidth: 64,
28
- columnLabelHeight: 20,
29
- labelFontSize: 10,
30
- valueFontSize: 9,
31
- legendSwatchSize: 14
32
- },
33
- md: {
34
- cellSize: 26,
35
- gap: 3,
36
- rowLabelWidth: 80,
37
- columnLabelHeight: 22,
38
- labelFontSize: 11,
39
- valueFontSize: 10,
40
- legendSwatchSize: 16
41
- },
42
- lg: {
43
- cellSize: 32,
44
- gap: 4,
45
- rowLabelWidth: 96,
46
- columnLabelHeight: 24,
47
- labelFontSize: 12,
48
- valueFontSize: 11,
49
- legendSwatchSize: 18
50
- }
22
+ const HEATMAP_CHART_LAYOUT = {
23
+ sm: {
24
+ cellSize: 20,
25
+ gap: 3,
26
+ rowLabelWidth: 64,
27
+ columnLabelHeight: 20,
28
+ labelFontSize: 10,
29
+ valueFontSize: 9,
30
+ legendSwatchSize: 14
31
+ },
32
+ md: {
33
+ cellSize: 26,
34
+ gap: 3,
35
+ rowLabelWidth: 80,
36
+ columnLabelHeight: 22,
37
+ labelFontSize: 11,
38
+ valueFontSize: 10,
39
+ legendSwatchSize: 16
40
+ },
41
+ lg: {
42
+ cellSize: 32,
43
+ gap: 4,
44
+ rowLabelWidth: 96,
45
+ columnLabelHeight: 24,
46
+ labelFontSize: 12,
47
+ valueFontSize: 11,
48
+ legendSwatchSize: 18
49
+ }
51
50
  };
51
+ /** Joins a row/column pair into a stable lookup key. */
52
52
  function cellKey(row, column) {
53
- return `${row}\u241F${column}`;
53
+ return `${row}␟${column}`;
54
54
  }
55
+ /** Buckets a value into one of the five palette steps (1 = lowest, 5 = highest). */
55
56
  function heatmapStep(value, domain) {
56
- const [min, max] = domain;
57
- if (max <= min) return HEATMAP_CHART_PALETTE.length;
58
- const ratio = (value - min) / (max - min);
59
- const step = Math.ceil(ratio * HEATMAP_CHART_PALETTE.length);
60
- return Math.min(HEATMAP_CHART_PALETTE.length, Math.max(1, step));
57
+ const [min, max] = domain;
58
+ if (max <= min) return HEATMAP_CHART_PALETTE.length;
59
+ const ratio = (value - min) / (max - min);
60
+ const step = Math.ceil(ratio * HEATMAP_CHART_PALETTE.length);
61
+ return Math.min(HEATMAP_CHART_PALETTE.length, Math.max(1, step));
61
62
  }
62
- function HeatmapChart({
63
- data,
64
- rows: rowsProp,
65
- columns: columnsProp,
66
- domain: domainProp,
67
- size,
68
- title,
69
- description,
70
- legend = true,
71
- showValues = false,
72
- valueFormatter = (value) => value.toLocaleString("en-NG"),
73
- className,
74
- ...props
75
- }) {
76
- const resolvedSize = useComponentSize(size);
77
- const layout = HEATMAP_CHART_LAYOUT[resolvedSize];
78
- const rows = rowsProp ?? Array.from(new Set(data.map((d) => d.row)));
79
- const columns = columnsProp ?? Array.from(new Set(data.map((d) => d.column)));
80
- const valuesByKey = new Map(
81
- data.map((datum) => [cellKey(datum.row, datum.column), datum.value])
82
- );
83
- const values = data.map((datum) => datum.value);
84
- const domain = domainProp ?? [
85
- values.length ? Math.min(...values) : 0,
86
- values.length ? Math.max(...values) : 1
87
- ];
88
- return /* @__PURE__ */ jsxs(ChartCard, { size: resolvedSize, className, ...props, children: [
89
- (title != null || description != null) && /* @__PURE__ */ jsxs(ChartHeader, { children: [
90
- title != null && /* @__PURE__ */ jsx(ChartTitle, { children: title }),
91
- description != null && /* @__PURE__ */ jsx(ChartDescription, { children: description })
92
- ] }),
93
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
94
- /* @__PURE__ */ jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxs(
95
- "div",
96
- {
97
- className: "inline-grid",
98
- style: {
99
- gridTemplateColumns: `${layout.rowLabelWidth}px repeat(${columns.length}, ${layout.cellSize}px)`,
100
- gap: layout.gap
101
- },
102
- children: [
103
- /* @__PURE__ */ jsx("span", { "aria-hidden": "true" }),
104
- columns.map((column) => /* @__PURE__ */ jsx(
105
- "span",
106
- {
107
- className: "flex items-end justify-center truncate px-0.5 pb-1 text-fg-secondary",
108
- style: {
109
- fontSize: layout.labelFontSize,
110
- height: layout.columnLabelHeight
111
- },
112
- title: column,
113
- children: column
114
- },
115
- column
116
- )),
117
- rows.map((row) => /* @__PURE__ */ jsxs(Fragment, { children: [
118
- /* @__PURE__ */ jsx(
119
- "span",
120
- {
121
- className: "flex items-center truncate pr-2 text-fg-secondary",
122
- style: {
123
- fontSize: layout.labelFontSize,
124
- height: layout.cellSize
125
- },
126
- title: row,
127
- children: row
128
- }
129
- ),
130
- columns.map((column) => /* @__PURE__ */ jsx(
131
- HeatmapChartCell,
132
- {
133
- row,
134
- column,
135
- value: valuesByKey.get(cellKey(row, column)),
136
- domain,
137
- layout,
138
- showValue: showValues,
139
- valueFormatter
140
- },
141
- column
142
- ))
143
- ] }, row))
144
- ]
145
- }
146
- ) }),
147
- legend && /* @__PURE__ */ jsx(
148
- HeatmapChartLegend,
149
- {
150
- domain,
151
- layout,
152
- valueFormatter
153
- }
154
- )
155
- ] })
156
- ] });
63
+ function HeatmapChart({ data, rows: rowsProp, columns: columnsProp, domain: domainProp, size, title, description, legend = true, showValues = false, valueFormatter = (value) => value.toLocaleString("en-NG"), className, ...props }) {
64
+ const resolvedSize = useComponentSize(size);
65
+ const layout = HEATMAP_CHART_LAYOUT[resolvedSize];
66
+ const rows = rowsProp ?? Array.from(new Set(data.map((d) => d.row)));
67
+ const columns = columnsProp ?? Array.from(new Set(data.map((d) => d.column)));
68
+ const valuesByKey = new Map(data.map((datum) => [cellKey(datum.row, datum.column), datum.value]));
69
+ const values = data.map((datum) => datum.value);
70
+ const domain = domainProp ?? [values.length ? Math.min(...values) : 0, values.length ? Math.max(...values) : 1];
71
+ return /* @__PURE__ */ jsxs(ChartCard, {
72
+ size: resolvedSize,
73
+ className,
74
+ ...props,
75
+ 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", {
76
+ className: "flex flex-col gap-3",
77
+ children: [/* @__PURE__ */ jsx("div", {
78
+ className: "overflow-x-auto",
79
+ children: /* @__PURE__ */ jsxs("div", {
80
+ className: "inline-grid",
81
+ style: {
82
+ gridTemplateColumns: `${layout.rowLabelWidth}px repeat(${columns.length}, ${layout.cellSize}px)`,
83
+ gap: layout.gap
84
+ },
85
+ children: [
86
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true" }),
87
+ columns.map((column) => /* @__PURE__ */ jsx("span", {
88
+ className: "flex items-end justify-center truncate px-0.5 pb-1 text-fg-secondary",
89
+ style: {
90
+ fontSize: layout.labelFontSize,
91
+ height: layout.columnLabelHeight
92
+ },
93
+ title: column,
94
+ children: column
95
+ }, column)),
96
+ rows.map((row) => /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
97
+ className: "flex items-center truncate pr-2 text-fg-secondary",
98
+ style: {
99
+ fontSize: layout.labelFontSize,
100
+ height: layout.cellSize
101
+ },
102
+ title: row,
103
+ children: row
104
+ }), columns.map((column) => /* @__PURE__ */ jsx(HeatmapChartCell, {
105
+ row,
106
+ column,
107
+ value: valuesByKey.get(cellKey(row, column)),
108
+ domain,
109
+ layout,
110
+ showValue: showValues,
111
+ valueFormatter
112
+ }, column))] }, row))
113
+ ]
114
+ })
115
+ }), legend && /* @__PURE__ */ jsx(HeatmapChartLegend, {
116
+ domain,
117
+ layout,
118
+ valueFormatter
119
+ })]
120
+ })]
121
+ });
157
122
  }
158
- function HeatmapChartCell({
159
- row,
160
- column,
161
- value,
162
- domain,
163
- layout,
164
- showValue,
165
- valueFormatter
166
- }) {
167
- if (value == null) {
168
- return /* @__PURE__ */ jsx(
169
- "span",
170
- {
171
- className: "rounded-[4px] border border-line-subtle border-dashed",
172
- style: { width: layout.cellSize, height: layout.cellSize },
173
- title: `${row} \xB7 ${column}: no data`
174
- }
175
- );
176
- }
177
- const step = heatmapStep(value, domain);
178
- const color = HEATMAP_CHART_PALETTE[step - 1];
179
- const formatted = valueFormatter(value);
180
- const label = `${row} \xB7 ${column}: ${formatted}`;
181
- const textColor = step >= 4 ? "var(--color-fg-on-brand)" : "var(--color-fg-primary)";
182
- return /* @__PURE__ */ jsxs(
183
- "button",
184
- {
185
- type: "button",
186
- className: "group/cell relative flex items-center justify-center rounded-[4px] outline-none focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)]",
187
- style: {
188
- width: layout.cellSize,
189
- height: layout.cellSize,
190
- backgroundColor: color
191
- },
192
- "aria-label": label,
193
- children: [
194
- showValue && /* @__PURE__ */ jsx(
195
- "span",
196
- {
197
- className: "pointer-events-none tabular-nums",
198
- style: { fontSize: layout.valueFontSize, color: textColor },
199
- children: formatted
200
- }
201
- ),
202
- /* @__PURE__ */ jsx(
203
- "span",
204
- {
205
- role: "tooltip",
206
- className: "pointer-events-none absolute bottom-full left-1/2 z-10 mb-1.5 -translate-x-1/2 whitespace-nowrap rounded-md border border-line-subtle bg-surface-overlay px-2 py-1 text-fg-primary text-gdt-xs opacity-0 shadow-2 transition-opacity group-hover/cell:opacity-100 group-focus-visible/cell:opacity-100",
207
- children: label
208
- }
209
- )
210
- ]
211
- }
212
- );
123
+ /**
124
+ * One grid cell. Missing data (no matching datum for this row/column) renders
125
+ * a dashed placeholder and is skipped from tab order — there is nothing to
126
+ * announce or hover. A valued cell is a focusable, hoverable swatch: the
127
+ * `aria-label` carries the row/column/value so screen readers get the exact
128
+ * figure without relying on the visual tooltip, which mirrors it for sighted
129
+ * hover/keyboard-focus use.
130
+ */
131
+ function HeatmapChartCell({ row, column, value, domain, layout, showValue, valueFormatter }) {
132
+ if (value == null) return /* @__PURE__ */ jsx("span", {
133
+ className: "rounded-[4px] border border-line-subtle border-dashed",
134
+ style: {
135
+ width: layout.cellSize,
136
+ height: layout.cellSize
137
+ },
138
+ title: `${row} · ${column}: no data`
139
+ });
140
+ const step = heatmapStep(value, domain);
141
+ const color = HEATMAP_CHART_PALETTE[step - 1];
142
+ const formatted = valueFormatter(value);
143
+ const label = `${row} · ${column}: ${formatted}`;
144
+ const textColor = step >= 4 ? "var(--color-fg-on-brand)" : "var(--color-fg-primary)";
145
+ return /* @__PURE__ */ jsxs("button", {
146
+ type: "button",
147
+ className: "group/cell relative flex items-center justify-center rounded-[4px] outline-none focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)]",
148
+ style: {
149
+ width: layout.cellSize,
150
+ height: layout.cellSize,
151
+ backgroundColor: color
152
+ },
153
+ "aria-label": label,
154
+ children: [showValue && /* @__PURE__ */ jsx("span", {
155
+ className: "pointer-events-none tabular-nums",
156
+ style: {
157
+ fontSize: layout.valueFontSize,
158
+ color: textColor
159
+ },
160
+ children: formatted
161
+ }), /* @__PURE__ */ jsx("span", {
162
+ role: "tooltip",
163
+ className: "pointer-events-none absolute bottom-full left-1/2 z-10 mb-1.5 -translate-x-1/2 whitespace-nowrap rounded-md border border-line-subtle bg-surface-overlay px-2 py-1 text-fg-primary text-gdt-xs opacity-0 shadow-2 transition-opacity group-hover/cell:opacity-100 group-focus-visible/cell:opacity-100",
164
+ children: label
165
+ })]
166
+ });
213
167
  }
214
- function HeatmapChartLegend({
215
- domain,
216
- layout,
217
- valueFormatter
218
- }) {
219
- return /* @__PURE__ */ jsxs(
220
- "div",
221
- {
222
- className: "flex items-center gap-2 text-fg-caption-placeholder",
223
- style: { fontSize: layout.labelFontSize },
224
- children: [
225
- /* @__PURE__ */ jsx("span", { className: "tabular-nums", children: valueFormatter(domain[0]) }),
226
- /* @__PURE__ */ jsx("div", { className: "flex overflow-hidden rounded-[3px]", children: HEATMAP_CHART_PALETTE.map((color) => /* @__PURE__ */ jsx(
227
- "span",
228
- {
229
- "aria-hidden": "true",
230
- style: {
231
- backgroundColor: color,
232
- width: layout.legendSwatchSize,
233
- height: layout.legendSwatchSize / 2
234
- }
235
- },
236
- color
237
- )) }),
238
- /* @__PURE__ */ jsx("span", { className: "tabular-nums", children: valueFormatter(domain[1]) })
239
- ]
240
- }
241
- );
168
+ /** Sequential-scale legend — the opacity ramp bounded by the domain's min/max. */
169
+ function HeatmapChartLegend({ domain, layout, valueFormatter }) {
170
+ return /* @__PURE__ */ jsxs("div", {
171
+ className: "flex items-center gap-2 text-fg-caption-placeholder",
172
+ style: { fontSize: layout.labelFontSize },
173
+ children: [
174
+ /* @__PURE__ */ jsx("span", {
175
+ className: "tabular-nums",
176
+ children: valueFormatter(domain[0])
177
+ }),
178
+ /* @__PURE__ */ jsx("div", {
179
+ className: "flex overflow-hidden rounded-[3px]",
180
+ children: HEATMAP_CHART_PALETTE.map((color) => /* @__PURE__ */ jsx("span", {
181
+ "aria-hidden": "true",
182
+ style: {
183
+ backgroundColor: color,
184
+ width: layout.legendSwatchSize,
185
+ height: layout.legendSwatchSize / 2
186
+ }
187
+ }, color))
188
+ }),
189
+ /* @__PURE__ */ jsx("span", {
190
+ className: "tabular-nums",
191
+ children: valueFormatter(domain[1])
192
+ })
193
+ ]
194
+ });
242
195
  }
243
- export {
244
- HEATMAP_CHART_LAYOUT,
245
- HEATMAP_CHART_PALETTE,
246
- HeatmapChart
247
- };
248
- //# sourceMappingURL=heatmap-chart.js.map
196
+ //#endregion
197
+ export { HEATMAP_CHART_LAYOUT, HEATMAP_CHART_PALETTE, HeatmapChart };
package/dist/infotip.d.ts CHANGED
@@ -1,11 +1,10 @@
1
- import * as React from 'react';
2
- import { Popover } from '@base-ui/react/popover';
3
-
4
- declare function Infotip({ ...props }: Popover.Root.Props): React.JSX.Element;
5
- declare function InfotipTrigger({ ...props }: Popover.Trigger.Props): React.JSX.Element;
1
+ import { Popover } from "@base-ui/react/popover";
2
+ //#region src/infotip.d.ts
3
+ declare function Infotip({ ...props }: Popover.Root.Props): import("react").JSX.Element;
4
+ declare function InfotipTrigger({ ...props }: Popover.Trigger.Props): import("react").JSX.Element;
6
5
  type InfotipContentProps = Popover.Popup.Props & Pick<Popover.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset"> & Pick<Popover.Portal.Props, "container"> & {
7
- showArrow?: boolean;
6
+ showArrow?: boolean;
8
7
  };
9
- declare function InfotipContent({ className, container, side, sideOffset, align, alignOffset, showArrow, children, ...props }: InfotipContentProps): React.JSX.Element;
10
-
11
- export { Infotip, InfotipContent, InfotipTrigger };
8
+ declare function InfotipContent({ className, container, side, sideOffset, align, alignOffset, showArrow, children, ...props }: InfotipContentProps): import("react").JSX.Element;
9
+ //#endregion
10
+ export { Infotip, InfotipContent, InfotipTrigger };