@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/tree-map.js CHANGED
@@ -1,279 +1,236 @@
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/tree-map.tsx
19
- import { cva } from "class-variance-authority";
20
- import { Treemap as RechartsTreemap } 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";
21
5
  import { jsx, jsxs } from "react/jsx-runtime";
22
- var TREE_MAP_PALETTE = [
23
- { fill: "var(--color-forest-700)", text: "var(--color-forest-100)" },
24
- { fill: "var(--color-brass-500)", text: "var(--color-brass-900)" },
25
- { fill: "var(--color-moss-600)", text: "var(--color-moss-100)" },
26
- { fill: "var(--color-clay-500)", text: "var(--color-clay-50)" },
27
- { fill: "var(--color-stone-500)", text: "var(--color-stone-50)" }
6
+ import { cva } from "class-variance-authority";
7
+ import { Treemap } from "recharts";
8
+ //#region src/tree-map.tsx
9
+ /**
10
+ * Tile palette, ordered by share. A tile's area already encodes magnitude and
11
+ * every tile is directly labelled, so the fill carries category *identity* — the
12
+ * three validated categorical `chart-1`…`chart-3` tokens, then a neutral "Other"
13
+ * bucket for the fourth+ category (the brand has three validated categorical
14
+ * slots; see `styles/giddaa.css`). Each entry pairs a `fill` with the `text`
15
+ * colour that reads on it in both themes. Assign by order, or override per datum
16
+ * with `fill`.
17
+ */
18
+ const TREE_MAP_PALETTE = [
19
+ {
20
+ fill: "var(--color-chart-1)",
21
+ text: "var(--color-forest-50)"
22
+ },
23
+ {
24
+ fill: "var(--color-chart-2)",
25
+ text: "var(--color-brass-900)"
26
+ },
27
+ {
28
+ fill: "var(--color-chart-3)",
29
+ text: "var(--color-clay-900)"
30
+ },
31
+ {
32
+ fill: "var(--color-action-tertiary)",
33
+ text: "var(--color-fg-primary)"
34
+ }
28
35
  ];
29
- var TREE_MAP_LAYOUT = {
30
- sm: {
31
- height: 180,
32
- gap: 3,
33
- radius: 4,
34
- labelPadding: 8,
35
- nameFontSize: 11,
36
- shareFontSize: 10,
37
- labelMinSide: 44
38
- },
39
- md: {
40
- height: 240,
41
- gap: 4,
42
- radius: 6,
43
- labelPadding: 10,
44
- nameFontSize: 12,
45
- shareFontSize: 11,
46
- labelMinSide: 52
47
- },
48
- lg: {
49
- height: 300,
50
- gap: 5,
51
- radius: 8,
52
- labelPadding: 12,
53
- nameFontSize: 14,
54
- shareFontSize: 12,
55
- labelMinSide: 60
56
- }
36
+ const TREE_MAP_LAYOUT = {
37
+ sm: {
38
+ height: 180,
39
+ gap: 3,
40
+ radius: 4,
41
+ labelPadding: 8,
42
+ nameFontSize: 11,
43
+ shareFontSize: 10,
44
+ labelMinSide: 44
45
+ },
46
+ md: {
47
+ height: 240,
48
+ gap: 4,
49
+ radius: 6,
50
+ labelPadding: 10,
51
+ nameFontSize: 12,
52
+ shareFontSize: 11,
53
+ labelMinSide: 52
54
+ },
55
+ lg: {
56
+ height: 300,
57
+ gap: 5,
58
+ radius: 8,
59
+ labelPadding: 12,
60
+ nameFontSize: 14,
61
+ shareFontSize: 12,
62
+ labelMinSide: 60
63
+ }
57
64
  };
58
- var treeMapLegendVariants = cva("flex min-w-0", {
59
- variants: {
60
- placement: {
61
- right: "flex-col",
62
- bottom: "flex-row flex-wrap items-center"
63
- },
64
- size: {
65
- sm: "text-gdt-xs",
66
- md: "text-gdt-sm",
67
- lg: "text-gdt-sm"
68
- }
69
- },
70
- compoundVariants: [
71
- { placement: "right", size: "sm", className: "gap-2" },
72
- { placement: "right", size: "md", className: "gap-3" },
73
- { placement: "right", size: "lg", className: "gap-3.5" },
74
- { placement: "bottom", className: "gap-x-4 gap-y-2" }
75
- ],
76
- defaultVariants: { placement: "right", size: "md" }
65
+ /** Vertical legend column / value list — shared with the right-hand legend. */
66
+ const treeMapLegendVariants = cva("flex min-w-0", {
67
+ variants: {
68
+ placement: {
69
+ right: "flex-col",
70
+ bottom: "flex-row flex-wrap items-center"
71
+ },
72
+ size: {
73
+ sm: "text-gdt-xs",
74
+ md: "text-gdt-sm",
75
+ lg: "text-gdt-sm"
76
+ }
77
+ },
78
+ compoundVariants: [
79
+ {
80
+ placement: "right",
81
+ size: "sm",
82
+ className: "gap-2"
83
+ },
84
+ {
85
+ placement: "right",
86
+ size: "md",
87
+ className: "gap-3"
88
+ },
89
+ {
90
+ placement: "right",
91
+ size: "lg",
92
+ className: "gap-3.5"
93
+ },
94
+ {
95
+ placement: "bottom",
96
+ className: "gap-x-4 gap-y-2"
97
+ }
98
+ ],
99
+ defaultVariants: {
100
+ placement: "right",
101
+ size: "md"
102
+ }
77
103
  });
78
- var treeMapLegendDotVariants = cva("shrink-0 rounded-full", {
79
- variants: {
80
- size: { sm: "size-2", md: "size-2.5", lg: "size-3" }
81
- },
82
- defaultVariants: { size: "md" }
104
+ const treeMapLegendDotVariants = cva("shrink-0 rounded-full", {
105
+ variants: { size: {
106
+ sm: "size-2",
107
+ md: "size-2.5",
108
+ lg: "size-3"
109
+ } },
110
+ defaultVariants: { size: "md" }
83
111
  });
112
+ /**
113
+ * Walk the data, assigning each top-level entry a palette colour (by order) that
114
+ * its leaves inherit, and summing the leaf values into a grand total. Top-level
115
+ * entries become the legend keys: tiles in `flat`, groups in `nested`.
116
+ */
84
117
  function resolveData(data) {
85
- let total = 0;
86
- const resolve = (datum, palette) => {
87
- const fill = datum.fill ?? palette.fill;
88
- const text = palette.text;
89
- if (datum.children?.length) {
90
- return {
91
- label: datum.label,
92
- fill,
93
- text,
94
- children: datum.children.map((child) => resolve(child, { fill, text }))
95
- };
96
- }
97
- total += datum.value ?? 0;
98
- return { label: datum.label, value: datum.value, fill, text };
99
- };
100
- const resolved = data.map(
101
- (datum, i) => resolve(datum, TREE_MAP_PALETTE[i % TREE_MAP_PALETTE.length])
102
- );
103
- return { resolved, total };
118
+ let total = 0;
119
+ const resolve = (datum, palette) => {
120
+ const fill = datum.fill ?? palette.fill;
121
+ const text = palette.text;
122
+ if (datum.children?.length) return {
123
+ label: datum.label,
124
+ fill,
125
+ text,
126
+ children: datum.children.map((child) => resolve(child, {
127
+ fill,
128
+ text
129
+ }))
130
+ };
131
+ total += datum.value ?? 0;
132
+ return {
133
+ label: datum.label,
134
+ value: datum.value,
135
+ fill,
136
+ text
137
+ };
138
+ };
139
+ return {
140
+ resolved: data.map((datum, i) => resolve(datum, TREE_MAP_PALETTE[i % TREE_MAP_PALETTE.length])),
141
+ total
142
+ };
104
143
  }
105
- function TreeMap({
106
- data,
107
- size,
108
- title,
109
- description,
110
- tooltip = false,
111
- legend = "right",
112
- valueFormatter,
113
- valueType = "number",
114
- className,
115
- ...props
116
- }) {
117
- const resolvedSize = useComponentSize(size);
118
- const layout = TREE_MAP_LAYOUT[resolvedSize];
119
- const { resolved, total } = resolveData(data);
120
- const config = Object.fromEntries(
121
- resolved.map((datum) => [
122
- datum.label,
123
- { label: datum.label, color: datum.fill }
124
- ])
125
- );
126
- const tooltipNode = tooltip ? /* @__PURE__ */ jsx(
127
- ChartTooltip,
128
- {
129
- content: /* @__PURE__ */ jsx(
130
- ChartTooltipContent,
131
- {
132
- nameKey: "label",
133
- valueType,
134
- formatter: valueFormatter ? (value) => typeof value === "number" ? valueFormatter(value) : value : void 0
135
- }
136
- )
137
- }
138
- ) : null;
139
- const legendNode = /* @__PURE__ */ jsx(
140
- "ul",
141
- {
142
- className: cn(
143
- treeMapLegendVariants({ placement: legend, size: resolvedSize })
144
- ),
145
- children: resolved.map((datum) => /* @__PURE__ */ jsxs(
146
- "li",
147
- {
148
- className: "flex items-center gap-2 text-fg-primary",
149
- children: [
150
- /* @__PURE__ */ jsx(
151
- "span",
152
- {
153
- "aria-hidden": "true",
154
- className: cn(treeMapLegendDotVariants({ size: resolvedSize })),
155
- style: { backgroundColor: datum.fill }
156
- }
157
- ),
158
- /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: datum.label })
159
- ]
160
- },
161
- datum.label
162
- ))
163
- }
164
- );
165
- return /* @__PURE__ */ jsxs(ChartCard, { size: resolvedSize, className, ...props, children: [
166
- (title != null || description != null) && /* @__PURE__ */ jsxs(ChartHeader, { children: [
167
- title != null && /* @__PURE__ */ jsx(ChartTitle, { children: title }),
168
- description != null && /* @__PURE__ */ jsx(ChartDescription, { children: description })
169
- ] }),
170
- /* @__PURE__ */ jsxs(
171
- "div",
172
- {
173
- className: cn(
174
- "flex gap-4",
175
- legend === "right" ? "flex-row items-stretch" : "flex-col"
176
- ),
177
- children: [
178
- /* @__PURE__ */ jsx(
179
- ChartContainer,
180
- {
181
- config,
182
- className: "aspect-auto min-w-0 flex-1",
183
- style: { height: layout.height },
184
- children: /* @__PURE__ */ jsx(
185
- RechartsTreemap,
186
- {
187
- data: resolved,
188
- dataKey: "value",
189
- nameKey: "label",
190
- type: "flat",
191
- isAnimationActive: false,
192
- content: /* @__PURE__ */ jsx(TreeMapTile, { total, layout }),
193
- children: tooltipNode
194
- }
195
- )
196
- }
197
- ),
198
- legendNode
199
- ]
200
- }
201
- )
202
- ] });
144
+ function TreeMap({ data, size, title, description, tooltip = false, legend = "right", valueFormatter, valueType = "number", className, ...props }) {
145
+ const resolvedSize = useComponentSize(size);
146
+ const layout = TREE_MAP_LAYOUT[resolvedSize];
147
+ const { resolved, total } = resolveData(data);
148
+ const config = Object.fromEntries(resolved.map((datum) => [datum.label, {
149
+ label: datum.label,
150
+ color: datum.fill
151
+ }]));
152
+ const tooltipNode = tooltip ? /* @__PURE__ */ jsx(ChartTooltip, { content: /* @__PURE__ */ jsx(ChartTooltipContent, {
153
+ nameKey: "label",
154
+ valueType,
155
+ formatter: valueFormatter ? (value) => typeof value === "number" ? valueFormatter(value) : value : void 0
156
+ }) }) : null;
157
+ const legendNode = /* @__PURE__ */ jsx("ul", {
158
+ className: cn(treeMapLegendVariants({
159
+ placement: legend,
160
+ size: resolvedSize
161
+ })),
162
+ children: resolved.map((datum) => /* @__PURE__ */ jsxs("li", {
163
+ className: "flex items-center gap-2 text-fg-primary",
164
+ children: [/* @__PURE__ */ jsx("span", {
165
+ "aria-hidden": "true",
166
+ className: cn(treeMapLegendDotVariants({ size: resolvedSize })),
167
+ style: { backgroundColor: datum.fill }
168
+ }), /* @__PURE__ */ jsx("span", {
169
+ className: "min-w-0 truncate",
170
+ children: datum.label
171
+ })]
172
+ }, datum.label))
173
+ });
174
+ return /* @__PURE__ */ jsxs(ChartCard, {
175
+ size: resolvedSize,
176
+ className,
177
+ ...props,
178
+ 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", {
179
+ className: cn("flex gap-4", legend === "right" ? "flex-row items-stretch" : "flex-col"),
180
+ children: [/* @__PURE__ */ jsx(ChartContainer, {
181
+ config,
182
+ className: "aspect-auto min-w-0 flex-1",
183
+ style: { height: layout.height },
184
+ children: /* @__PURE__ */ jsx(Treemap, {
185
+ data: resolved,
186
+ dataKey: "value",
187
+ nameKey: "label",
188
+ type: "flat",
189
+ isAnimationActive: false,
190
+ content: /* @__PURE__ */ jsx(TreeMapTile, {
191
+ total,
192
+ layout
193
+ }),
194
+ children: tooltipNode
195
+ })
196
+ }), legendNode]
197
+ })]
198
+ });
203
199
  }
204
- function TreeMapTile({
205
- total,
206
- layout,
207
- x,
208
- y,
209
- width,
210
- height,
211
- value,
212
- name,
213
- children,
214
- fill,
215
- text
216
- }) {
217
- if (children != null || x == null || y == null || width == null || height == null) {
218
- return /* @__PURE__ */ jsx("g", {});
219
- }
220
- const tileX = x + layout.gap / 2;
221
- const tileY = y + layout.gap / 2;
222
- const tileW = Math.max(0, width - layout.gap);
223
- const tileH = Math.max(0, height - layout.gap);
224
- const showLabel = tileW >= layout.labelMinSide && tileH >= layout.labelMinSide;
225
- const share = total > 0 ? Math.round((value ?? 0) / total * 100) : 0;
226
- return /* @__PURE__ */ jsxs("g", { children: [
227
- /* @__PURE__ */ jsx(
228
- "rect",
229
- {
230
- x: tileX,
231
- y: tileY,
232
- width: tileW,
233
- height: tileH,
234
- rx: layout.radius,
235
- ry: layout.radius,
236
- fill
237
- }
238
- ),
239
- showLabel && /* @__PURE__ */ jsxs(
240
- "text",
241
- {
242
- x: tileX + layout.labelPadding,
243
- y: tileY + layout.labelPadding,
244
- fill: text,
245
- dominantBaseline: "hanging",
246
- children: [
247
- /* @__PURE__ */ jsx(
248
- "tspan",
249
- {
250
- x: tileX + layout.labelPadding,
251
- className: "font-semibold",
252
- style: { fontSize: layout.nameFontSize },
253
- children: name
254
- }
255
- ),
256
- /* @__PURE__ */ jsxs(
257
- "tspan",
258
- {
259
- x: tileX + layout.labelPadding,
260
- dy: layout.nameFontSize + 4,
261
- className: "tabular-nums",
262
- style: { fontSize: layout.shareFontSize },
263
- children: [
264
- share,
265
- "%"
266
- ]
267
- }
268
- )
269
- ]
270
- }
271
- )
272
- ] });
200
+ function TreeMapTile({ total, layout, x, y, width, height, value, name, children, fill, text }) {
201
+ if (children != null || x == null || y == null || width == null || height == null) return /* @__PURE__ */ jsx("g", {});
202
+ const tileX = x + layout.gap / 2;
203
+ const tileY = y + layout.gap / 2;
204
+ const tileW = Math.max(0, width - layout.gap);
205
+ const tileH = Math.max(0, height - layout.gap);
206
+ const showLabel = tileW >= layout.labelMinSide && tileH >= layout.labelMinSide;
207
+ const share = total > 0 ? Math.round((value ?? 0) / total * 100) : 0;
208
+ return /* @__PURE__ */ jsxs("g", { children: [/* @__PURE__ */ jsx("rect", {
209
+ x: tileX,
210
+ y: tileY,
211
+ width: tileW,
212
+ height: tileH,
213
+ rx: layout.radius,
214
+ ry: layout.radius,
215
+ fill
216
+ }), showLabel && /* @__PURE__ */ jsxs("text", {
217
+ x: tileX + layout.labelPadding,
218
+ y: tileY + layout.labelPadding,
219
+ fill: text,
220
+ dominantBaseline: "hanging",
221
+ children: [/* @__PURE__ */ jsx("tspan", {
222
+ x: tileX + layout.labelPadding,
223
+ className: "font-semibold",
224
+ style: { fontSize: layout.nameFontSize },
225
+ children: name
226
+ }), /* @__PURE__ */ jsxs("tspan", {
227
+ x: tileX + layout.labelPadding,
228
+ dy: layout.nameFontSize + 4,
229
+ className: "tabular-nums",
230
+ style: { fontSize: layout.shareFontSize },
231
+ children: [share, "%"]
232
+ })]
233
+ })] });
273
234
  }
274
- export {
275
- TREE_MAP_LAYOUT,
276
- TREE_MAP_PALETTE,
277
- TreeMap
278
- };
279
- //# sourceMappingURL=tree-map.js.map
235
+ //#endregion
236
+ export { TREE_MAP_LAYOUT, TREE_MAP_PALETTE, TreeMap };
@@ -0,0 +1,21 @@
1
+ import { useState } from "react";
2
+ //#region src/lib/use-uncontrolled.ts
3
+ function useUncontrolled({ value, defaultValue, finalValue, onChange = () => {} }) {
4
+ const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue !== void 0 ? defaultValue : finalValue);
5
+ const handleUncontrolledChange = (nextValue, ...payload) => {
6
+ setUncontrolledValue(nextValue);
7
+ onChange?.(nextValue, ...payload);
8
+ };
9
+ if (value !== void 0) return [
10
+ value,
11
+ onChange,
12
+ true
13
+ ];
14
+ return [
15
+ uncontrolledValue,
16
+ handleUncontrolledChange,
17
+ false
18
+ ];
19
+ }
20
+ //#endregion
21
+ export { useUncontrolled as t };