@giddaa-housing/ui 0.1.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 (315) hide show
  1. package/README.md +18 -6
  2. package/css/base.css +37 -0
  3. package/css/components.css +135 -0
  4. package/css/generated/shared.css +1 -0
  5. package/css/giddaa.css +402 -0
  6. package/css/preset.css +77 -0
  7. package/css/styles.css +2 -0
  8. package/css/theme.css +255 -0
  9. package/dist/accordion.d.ts +9 -10
  10. package/dist/accordion.js +41 -117
  11. package/dist/activity-timeline.d.ts +29 -0
  12. package/dist/activity-timeline.js +97 -0
  13. package/dist/alert.d.ts +8 -9
  14. package/dist/alert.js +53 -141
  15. package/dist/auth-layout.d.ts +23 -0
  16. package/dist/auth-layout.js +153 -0
  17. package/dist/avatar.d.ts +6 -6
  18. package/dist/avatar.js +40 -142
  19. package/dist/badge.d.ts +12 -13
  20. package/dist/badge.js +66 -114
  21. package/dist/bar-chart.d.ts +136 -114
  22. package/dist/bar-chart.js +244 -297
  23. package/dist/breadcrumb.d.ts +5 -5
  24. package/dist/breadcrumb.js +56 -148
  25. package/dist/bullet-chart.d.ts +33 -33
  26. package/dist/bullet-chart.js +123 -183
  27. package/dist/button-BZIeyUw6.d.ts +17 -0
  28. package/dist/button-group.d.ts +13 -16
  29. package/dist/button-group.js +38 -163
  30. package/dist/button.d.ts +2 -19
  31. package/dist/button.js +90 -142
  32. package/dist/calendar.d.ts +6 -6
  33. package/dist/calendar.js +134 -288
  34. package/dist/card.d.ts +14 -16
  35. package/dist/card.js +58 -174
  36. package/dist/carousel.d.ts +34 -35
  37. package/dist/carousel.js +319 -378
  38. package/dist/chart.d.ts +58 -59
  39. package/dist/chart.js +350 -466
  40. package/dist/checkbox.d.ts +10 -12
  41. package/dist/checkbox.js +84 -84
  42. package/dist/cn-BI_4DMBf.js +23 -0
  43. package/dist/collapsible.d.ts +7 -8
  44. package/dist/collapsible.js +23 -77
  45. package/dist/combobox.d.ts +10 -10
  46. package/dist/combobox.js +220 -696
  47. package/dist/cta.d.ts +64 -0
  48. package/dist/cta.js +192 -0
  49. package/dist/currency-selector.d.ts +41 -0
  50. package/dist/currency-selector.js +114 -0
  51. package/dist/data-table.d.ts +164 -0
  52. package/dist/data-table.js +673 -0
  53. package/dist/date-picker.d.ts +27 -20
  54. package/dist/date-picker.js +122 -520
  55. package/dist/details-card.d.ts +19 -0
  56. package/dist/details-card.js +118 -0
  57. package/dist/dialog.d.ts +13 -14
  58. package/dist/dialog.js +117 -320
  59. package/dist/dropdown-menu.d.ts +14 -14
  60. package/dist/dropdown-menu.js +170 -365
  61. package/dist/dropzone.d.ts +55 -55
  62. package/dist/dropzone.js +328 -467
  63. package/dist/editorial-card.d.ts +27 -0
  64. package/dist/editorial-card.js +144 -0
  65. package/dist/empty-state.d.ts +8 -9
  66. package/dist/empty-state.js +48 -135
  67. package/dist/field.d.ts +23 -25
  68. package/dist/field.js +111 -327
  69. package/dist/filter.d.ts +118 -0
  70. package/dist/filter.js +775 -0
  71. package/dist/footer.d.ts +40 -0
  72. package/dist/footer.js +227 -0
  73. package/dist/funnel-chart.d.ts +38 -41
  74. package/dist/funnel-chart.js +168 -563
  75. package/dist/gallery-indicator.d.ts +17 -0
  76. package/dist/gallery-indicator.js +75 -0
  77. package/dist/heatmap-chart.d.ts +95 -0
  78. package/dist/heatmap-chart.js +197 -0
  79. package/dist/infotip.d.ts +10 -0
  80. package/dist/infotip.js +40 -0
  81. package/dist/input-CfoEJ8A6.d.ts +12 -0
  82. package/dist/input-group.d.ts +16 -19
  83. package/dist/input-group.js +92 -372
  84. package/dist/input-size-context-C-SFx9sx.d.ts +10 -0
  85. package/dist/input-size-context.d.ts +2 -11
  86. package/dist/input-size-context.js +14 -20
  87. package/dist/input.d.ts +2 -13
  88. package/dist/input.js +23 -79
  89. package/dist/item.d.ts +7 -8
  90. package/dist/item.js +22 -89
  91. package/dist/kpi-card.d.ts +18 -20
  92. package/dist/kpi-card.js +84 -232
  93. package/dist/label.d.ts +6 -6
  94. package/dist/label.js +39 -66
  95. package/dist/line-chart.d.ts +88 -89
  96. package/dist/line-chart.js +143 -262
  97. package/dist/logo.d.ts +4 -4
  98. package/dist/logo.js +87 -141
  99. package/dist/map-indicator.d.ts +13 -0
  100. package/dist/map-indicator.js +83 -0
  101. package/dist/match.d.ts +15 -0
  102. package/dist/match.js +68 -0
  103. package/dist/media-gallery-hero.d.ts +58 -0
  104. package/dist/media-gallery-hero.js +201 -0
  105. package/dist/media-player.d.ts +60 -0
  106. package/dist/media-player.js +919 -0
  107. package/dist/multi-step-form.d.ts +56 -0
  108. package/dist/multi-step-form.js +342 -0
  109. package/dist/number-input.d.ts +34 -34
  110. package/dist/number-input.js +62 -413
  111. package/dist/page-header.d.ts +10 -11
  112. package/dist/page-header.js +34 -107
  113. package/dist/pagination.d.ts +17 -20
  114. package/dist/pagination.js +132 -341
  115. package/dist/password-input.d.ts +5 -12
  116. package/dist/password-input.js +32 -354
  117. package/dist/phone-input.d.ts +19 -19
  118. package/dist/phone-input.js +232 -561
  119. package/dist/photo-gallery.d.ts +20 -20
  120. package/dist/photo-gallery.js +314 -746
  121. package/dist/picker-lzgmsNfG.js +32 -0
  122. package/dist/pie-chart.d.ts +60 -60
  123. package/dist/pie-chart.js +141 -184
  124. package/dist/popover.d.ts +9 -9
  125. package/dist/popover.js +60 -156
  126. package/dist/price-tag.d.ts +34 -0
  127. package/dist/price-tag.js +118 -0
  128. package/dist/progress.d.ts +18 -16
  129. package/dist/progress.js +156 -300
  130. package/dist/property-listing-card.d.ts +29 -0
  131. package/dist/property-listing-card.js +117 -0
  132. package/dist/radar-chart.d.ts +108 -0
  133. package/dist/radar-chart.js +172 -0
  134. package/dist/radio-group.d.ts +11 -13
  135. package/dist/radio-group.js +47 -96
  136. package/dist/review-block.d.ts +18 -0
  137. package/dist/review-block.js +154 -0
  138. package/dist/rich-text-editor.d.ts +30 -14
  139. package/dist/rich-text-editor.js +594 -979
  140. package/dist/scatter-chart.d.ts +140 -0
  141. package/dist/scatter-chart.js +248 -0
  142. package/dist/search-input.d.ts +8 -15
  143. package/dist/search-input.js +58 -408
  144. package/dist/select.d.ts +8 -8
  145. package/dist/select.js +131 -291
  146. package/dist/separator.d.ts +8 -9
  147. package/dist/separator.js +31 -70
  148. package/dist/sheet.d.ts +11 -11
  149. package/dist/sheet.js +84 -262
  150. package/dist/sidebar.d.ts +32 -37
  151. package/dist/sidebar.js +380 -1055
  152. package/dist/size-context-D4mYvcg8.d.ts +10 -0
  153. package/dist/size-context.d.ts +2 -11
  154. package/dist/size-context.js +14 -18
  155. package/dist/skeleton.d.ts +4 -5
  156. package/dist/skeleton.js +9 -45
  157. package/dist/slider.d.ts +27 -0
  158. package/dist/slider.js +81 -0
  159. package/dist/sparkline.d.ts +43 -46
  160. package/dist/sparkline.js +223 -561
  161. package/dist/stepper.d.ts +23 -24
  162. package/dist/stepper.js +149 -276
  163. package/dist/styles.css +9995 -2
  164. package/dist/switch.d.ts +10 -12
  165. package/dist/switch.js +49 -106
  166. package/dist/table-card.d.ts +35 -0
  167. package/dist/table-card.js +125 -0
  168. package/dist/table.d.ts +18 -14
  169. package/dist/table.js +114 -182
  170. package/dist/tabs.d.ts +23 -15
  171. package/dist/tabs.js +62 -149
  172. package/dist/tag.d.ts +22 -23
  173. package/dist/tag.js +104 -156
  174. package/dist/testimonial-block.d.ts +33 -0
  175. package/dist/testimonial-block.js +208 -0
  176. package/dist/textarea-IS_D8pXf.d.ts +11 -0
  177. package/dist/textarea.d.ts +2 -12
  178. package/dist/textarea.js +20 -74
  179. package/dist/time-picker.d.ts +11 -11
  180. package/dist/time-picker.js +247 -464
  181. package/dist/toast.d.ts +16 -18
  182. package/dist/toast.js +154 -310
  183. package/dist/tooltip.d.ts +9 -10
  184. package/dist/tooltip.js +33 -91
  185. package/dist/tree-map.d.ts +54 -57
  186. package/dist/tree-map.js +231 -646
  187. package/dist/use-uncontrolled-CLfM1XbB.js +21 -0
  188. package/dist/waterfall-chart.d.ts +126 -0
  189. package/dist/waterfall-chart.js +480 -0
  190. package/package.json +123 -34
  191. package/dist/accordion.js.map +0 -1
  192. package/dist/alert.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/base.css +0 -32
  197. package/dist/breadcrumb.js.map +0 -1
  198. package/dist/bullet-chart.js.map +0 -1
  199. package/dist/button-group.js.map +0 -1
  200. package/dist/button.js.map +0 -1
  201. package/dist/calendar.js.map +0 -1
  202. package/dist/card.js.map +0 -1
  203. package/dist/carousel.js.map +0 -1
  204. package/dist/chart.js.map +0 -1
  205. package/dist/checkbox.js.map +0 -1
  206. package/dist/collapsible.js.map +0 -1
  207. package/dist/combobox.js.map +0 -1
  208. package/dist/date-picker.js.map +0 -1
  209. package/dist/dialog.js.map +0 -1
  210. package/dist/dropdown-menu.js.map +0 -1
  211. package/dist/dropzone.js.map +0 -1
  212. package/dist/empty-state.js.map +0 -1
  213. package/dist/field.js.map +0 -1
  214. package/dist/files/red-hat-display-latin-300-italic.woff +0 -0
  215. package/dist/files/red-hat-display-latin-300-italic.woff2 +0 -0
  216. package/dist/files/red-hat-display-latin-300-normal.woff +0 -0
  217. package/dist/files/red-hat-display-latin-300-normal.woff2 +0 -0
  218. package/dist/files/red-hat-display-latin-400-italic.woff +0 -0
  219. package/dist/files/red-hat-display-latin-400-italic.woff2 +0 -0
  220. package/dist/files/red-hat-display-latin-400-normal.woff +0 -0
  221. package/dist/files/red-hat-display-latin-400-normal.woff2 +0 -0
  222. package/dist/files/red-hat-display-latin-500-italic.woff +0 -0
  223. package/dist/files/red-hat-display-latin-500-italic.woff2 +0 -0
  224. package/dist/files/red-hat-display-latin-500-normal.woff +0 -0
  225. package/dist/files/red-hat-display-latin-500-normal.woff2 +0 -0
  226. package/dist/files/red-hat-display-latin-600-italic.woff +0 -0
  227. package/dist/files/red-hat-display-latin-600-italic.woff2 +0 -0
  228. package/dist/files/red-hat-display-latin-600-normal.woff +0 -0
  229. package/dist/files/red-hat-display-latin-600-normal.woff2 +0 -0
  230. package/dist/files/red-hat-display-latin-700-italic.woff +0 -0
  231. package/dist/files/red-hat-display-latin-700-italic.woff2 +0 -0
  232. package/dist/files/red-hat-display-latin-700-normal.woff +0 -0
  233. package/dist/files/red-hat-display-latin-700-normal.woff2 +0 -0
  234. package/dist/files/red-hat-display-latin-800-italic.woff +0 -0
  235. package/dist/files/red-hat-display-latin-800-italic.woff2 +0 -0
  236. package/dist/files/red-hat-display-latin-800-normal.woff +0 -0
  237. package/dist/files/red-hat-display-latin-800-normal.woff2 +0 -0
  238. package/dist/files/red-hat-display-latin-900-italic.woff +0 -0
  239. package/dist/files/red-hat-display-latin-900-italic.woff2 +0 -0
  240. package/dist/files/red-hat-display-latin-900-normal.woff +0 -0
  241. package/dist/files/red-hat-display-latin-900-normal.woff2 +0 -0
  242. package/dist/files/red-hat-display-latin-ext-300-italic.woff +0 -0
  243. package/dist/files/red-hat-display-latin-ext-300-italic.woff2 +0 -0
  244. package/dist/files/red-hat-display-latin-ext-300-normal.woff +0 -0
  245. package/dist/files/red-hat-display-latin-ext-300-normal.woff2 +0 -0
  246. package/dist/files/red-hat-display-latin-ext-400-italic.woff +0 -0
  247. package/dist/files/red-hat-display-latin-ext-400-italic.woff2 +0 -0
  248. package/dist/files/red-hat-display-latin-ext-400-normal.woff +0 -0
  249. package/dist/files/red-hat-display-latin-ext-400-normal.woff2 +0 -0
  250. package/dist/files/red-hat-display-latin-ext-500-italic.woff +0 -0
  251. package/dist/files/red-hat-display-latin-ext-500-italic.woff2 +0 -0
  252. package/dist/files/red-hat-display-latin-ext-500-normal.woff +0 -0
  253. package/dist/files/red-hat-display-latin-ext-500-normal.woff2 +0 -0
  254. package/dist/files/red-hat-display-latin-ext-600-italic.woff +0 -0
  255. package/dist/files/red-hat-display-latin-ext-600-italic.woff2 +0 -0
  256. package/dist/files/red-hat-display-latin-ext-600-normal.woff +0 -0
  257. package/dist/files/red-hat-display-latin-ext-600-normal.woff2 +0 -0
  258. package/dist/files/red-hat-display-latin-ext-700-italic.woff +0 -0
  259. package/dist/files/red-hat-display-latin-ext-700-italic.woff2 +0 -0
  260. package/dist/files/red-hat-display-latin-ext-700-normal.woff +0 -0
  261. package/dist/files/red-hat-display-latin-ext-700-normal.woff2 +0 -0
  262. package/dist/files/red-hat-display-latin-ext-800-italic.woff +0 -0
  263. package/dist/files/red-hat-display-latin-ext-800-italic.woff2 +0 -0
  264. package/dist/files/red-hat-display-latin-ext-800-normal.woff +0 -0
  265. package/dist/files/red-hat-display-latin-ext-800-normal.woff2 +0 -0
  266. package/dist/files/red-hat-display-latin-ext-900-italic.woff +0 -0
  267. package/dist/files/red-hat-display-latin-ext-900-italic.woff2 +0 -0
  268. package/dist/files/red-hat-display-latin-ext-900-normal.woff +0 -0
  269. package/dist/files/red-hat-display-latin-ext-900-normal.woff2 +0 -0
  270. package/dist/funnel-chart.js.map +0 -1
  271. package/dist/index.d.ts +0 -87
  272. package/dist/index.js +0 -10448
  273. package/dist/index.js.map +0 -1
  274. package/dist/input-group.js.map +0 -1
  275. package/dist/input-size-context.js.map +0 -1
  276. package/dist/input.js.map +0 -1
  277. package/dist/item.js.map +0 -1
  278. package/dist/kpi-card.js.map +0 -1
  279. package/dist/label.js.map +0 -1
  280. package/dist/line-chart.js.map +0 -1
  281. package/dist/logo.js.map +0 -1
  282. package/dist/number-input.js.map +0 -1
  283. package/dist/page-header.js.map +0 -1
  284. package/dist/pagination.js.map +0 -1
  285. package/dist/password-input.js.map +0 -1
  286. package/dist/phone-input.js.map +0 -1
  287. package/dist/photo-gallery.js.map +0 -1
  288. package/dist/pie-chart.js.map +0 -1
  289. package/dist/popover.js.map +0 -1
  290. package/dist/progress.js.map +0 -1
  291. package/dist/radio-group.js.map +0 -1
  292. package/dist/red-hat-display.css +0 -2
  293. package/dist/rich-text-editor.js.map +0 -1
  294. package/dist/search-input.js.map +0 -1
  295. package/dist/select.js.map +0 -1
  296. package/dist/separator.js.map +0 -1
  297. package/dist/sheet.js.map +0 -1
  298. package/dist/sidebar.js.map +0 -1
  299. package/dist/size-context.js.map +0 -1
  300. package/dist/skeleton.js.map +0 -1
  301. package/dist/sparkline.js.map +0 -1
  302. package/dist/stepper.js.map +0 -1
  303. package/dist/switch.js.map +0 -1
  304. package/dist/tab-list.d.ts +0 -38
  305. package/dist/tab-list.js +0 -394
  306. package/dist/tab-list.js.map +0 -1
  307. package/dist/table.js.map +0 -1
  308. package/dist/tabs.js.map +0 -1
  309. package/dist/tag.js.map +0 -1
  310. package/dist/textarea.js.map +0 -1
  311. package/dist/theme/giddaa.css +0 -2
  312. package/dist/time-picker.js.map +0 -1
  313. package/dist/toast.js.map +0 -1
  314. package/dist/tooltip.js.map +0 -1
  315. package/dist/tree-map.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/time-picker.tsx","../src/lib/cn.ts","../src/components/ui/button.tsx","../src/components/ui/size-context.tsx","../src/components/ui/popover.tsx"],"sourcesContent":["\"use client\";\n\nimport { ClockIcon } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../../lib/cn\";\nimport { Button } from \"./button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nconst ITEM_HEIGHT = 40;\nconst VISIBLE_COUNT = 5;\nconst SCROLL_PADDING = Math.floor(VISIBLE_COUNT / 2) * ITEM_HEIGHT;\n// Tilt off-center items so the column reads as a scrollable wheel — a gentle\n// dome, not the full iOS cylinder. Clamped to this many items each side.\nconst CURVE_CLAMP = 3;\n\nconst HOURS_12 = Array.from({ length: 12 }, (_, i) =>\n\tString(i + 1).padStart(2, \"0\"),\n);\nconst HOURS_24 = Array.from({ length: 24 }, (_, i) =>\n\tString(i).padStart(2, \"0\"),\n);\nconst MINUTES = Array.from({ length: 60 }, (_, i) =>\n\tString(i).padStart(2, \"0\"),\n);\nconst PERIODS = [\"AM\", \"PM\"] as const;\n\ntype Period = \"AM\" | \"PM\";\n\ninterface TimeValue {\n\thour: string;\n\tminute: string;\n\tperiod: Period | \"\";\n}\n\nfunction parseTimeString(\n\tvalue: string | undefined,\n\tformat: \"12h\" | \"24h\",\n): TimeValue {\n\tif (value) {\n\t\tif (format === \"12h\") {\n\t\t\tconst m = value.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i);\n\t\t\tif (m) {\n\t\t\t\treturn {\n\t\t\t\t\thour: m[1].padStart(2, \"0\"),\n\t\t\t\t\tminute: m[2],\n\t\t\t\t\tperiod: m[3].toUpperCase() as Period,\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tconst m = value.match(/^(\\d{1,2}):(\\d{2})$/);\n\t\t\tif (m) {\n\t\t\t\treturn { hour: m[1].padStart(2, \"0\"), minute: m[2], period: \"\" };\n\t\t\t}\n\t\t}\n\t}\n\tconst now = new Date();\n\tif (format === \"12h\") {\n\t\tconst h = now.getHours();\n\t\treturn {\n\t\t\thour: String(h % 12 || 12).padStart(2, \"0\"),\n\t\t\tminute: String(now.getMinutes()).padStart(2, \"0\"),\n\t\t\tperiod: h >= 12 ? \"PM\" : \"AM\",\n\t\t};\n\t}\n\treturn {\n\t\thour: String(now.getHours()).padStart(2, \"0\"),\n\t\tminute: String(now.getMinutes()).padStart(2, \"0\"),\n\t\tperiod: \"\",\n\t};\n}\n\nfunction formatTimeValue(tv: TimeValue, format: \"12h\" | \"24h\"): string {\n\tif (format === \"12h\") return `${tv.hour}:${tv.minute} ${tv.period}`;\n\treturn `${tv.hour}:${tv.minute}`;\n}\n\n// ─── TimeColumn ────────────────────────────────────────────────────────────────\n\ninterface TimeColumnProps {\n\titems: readonly string[];\n\tvalue: string;\n\tonChange: (v: string) => void;\n}\n\nfunction TimeColumn({ items, value, onChange }: TimeColumnProps) {\n\tconst scrollRef = React.useRef<HTMLDivElement>(null);\n\tconst itemRefs = React.useRef<(HTMLButtonElement | null)[]>([]);\n\tconst [centerIndex, setCenterIndex] = React.useState(() =>\n\t\tMath.max(0, items.indexOf(value)),\n\t);\n\tconst isProgrammatic = React.useRef(false);\n\tconst settleRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst onChangeRef = React.useRef(onChange);\n\tonChangeRef.current = onChange;\n\n\t// Tilt + fade each item by its distance from the viewport centre. Derived\n\t// purely from scrollTop (offset in item units), so it never fights layout.\n\tconst paintCurve = React.useCallback(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tconst offset = el.scrollTop / ITEM_HEIGHT;\n\t\titemRefs.current.forEach((node, index) => {\n\t\t\tif (!node) return;\n\t\t\tconst distance = index - offset;\n\t\t\tconst abs = Math.min(Math.abs(distance), CURVE_CLAMP);\n\t\t\tconst tilt = Math.max(Math.min(distance, CURVE_CLAMP), -CURVE_CLAMP);\n\t\t\tnode.style.opacity = String(Math.max(1 - abs * 0.28, 0.2));\n\t\t\tnode.style.transform = `perspective(280px) rotateX(${tilt * -20}deg) scale(${1 - abs * 0.04})`;\n\t\t});\n\t}, []);\n\n\t// Seed scroll position on mount (runs while the panel is visible, so the\n\t// layout-based scrollTop sticks even mid open-animation).\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: mount-only seed from the initial index.\n\tReact.useEffect(() => {\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tisProgrammatic.current = true;\n\t\tel.scrollTop = centerIndex * ITEM_HEIGHT;\n\t\tpaintCurve();\n\t\trequestAnimationFrame(() => {\n\t\t\tisProgrammatic.current = false;\n\t\t});\n\t}, []);\n\n\t// Re-centre when the value prop changes from outside (not our own scroll).\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: only re-sync on external value changes.\n\tReact.useEffect(() => {\n\t\tconst idx = items.indexOf(value);\n\t\tif (idx === -1 || idx === centerIndex) return;\n\t\tsetCenterIndex(idx);\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tisProgrammatic.current = true;\n\t\tel.scrollTo({ top: idx * ITEM_HEIGHT, behavior: \"smooth\" });\n\t\tsetTimeout(() => {\n\t\t\tisProgrammatic.current = false;\n\t\t\tpaintCurve();\n\t\t}, 320);\n\t}, [value]);\n\n\tfunction handleScroll() {\n\t\tpaintCurve();\n\t\tif (isProgrammatic.current) return;\n\t\tconst el = scrollRef.current;\n\t\tif (!el) return;\n\t\tconst idx = Math.max(\n\t\t\t0,\n\t\t\tMath.min(Math.round(el.scrollTop / ITEM_HEIGHT), items.length - 1),\n\t\t);\n\t\tif (idx !== centerIndex) setCenterIndex(idx);\n\t\tif (settleRef.current) clearTimeout(settleRef.current);\n\t\tsettleRef.current = setTimeout(() => onChangeRef.current(items[idx]), 120);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={scrollRef}\n\t\t\tonScroll={handleScroll}\n\t\t\tstyle={{ height: `${VISIBLE_COUNT * ITEM_HEIGHT}px` }}\n\t\t\tclassName=\"overflow-y-scroll [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n\t\t>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tpaddingTop: `${SCROLL_PADDING}px`,\n\t\t\t\t\tpaddingBottom: `${SCROLL_PADDING}px`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\tconst dist = Math.abs(index - centerIndex);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tkey={item}\n\t\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\t\titemRefs.current[index] = node;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\tscrollRef.current?.scrollTo({\n\t\t\t\t\t\t\t\t\ttop: index * ITEM_HEIGHT,\n\t\t\t\t\t\t\t\t\tbehavior: \"smooth\",\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstyle={{ height: `${ITEM_HEIGHT}px` }}\n\t\t\t\t\t\t\tclassName=\"flex w-full cursor-pointer items-center justify-center select-none will-change-transform\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"rounded-full px-4 py-1.5 text-gdt-sm font-medium transition-colors\",\n\t\t\t\t\t\t\t\t\tdist === 0\n\t\t\t\t\t\t\t\t\t\t? \"bg-action-primary text-fg-on-brand\"\n\t\t\t\t\t\t\t\t\t\t: dist === 1\n\t\t\t\t\t\t\t\t\t\t\t? \"text-fg-secondary\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-fg-caption-placeholder\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\n// ─── TimePicker ───────────────────────────────────────────────────────────────\n\ninterface TimePickerProps {\n\tvalue?: string;\n\tonChange?: (time: string | undefined) => void;\n\tformat?: \"12h\" | \"24h\";\n\tdisabled?: boolean;\n\tplaceholder?: string;\n\tclassName?: string;\n}\n\nfunction TimePicker({\n\tvalue,\n\tonChange,\n\tformat = \"12h\",\n\tdisabled = false,\n\tplaceholder = \"Select time\",\n\tclassName,\n}: TimePickerProps) {\n\tconst [open, setOpen] = React.useState(false);\n\tconst [pending, setPending] = React.useState<TimeValue>(() =>\n\t\tparseTimeString(value, format),\n\t);\n\n\tfunction handleOpenChange(next: boolean) {\n\t\tif (next) setPending(parseTimeString(value, format));\n\t\tsetOpen(next);\n\t}\n\n\tconst columns = [\n\t\t{ key: \"Hour\", show: true },\n\t\t{ key: \"Minute\", show: true },\n\t\t{ key: \"Period\", show: format === \"12h\" },\n\t].filter((c) => c.show);\n\n\treturn (\n\t\t<Popover open={open} onOpenChange={handleOpenChange}>\n\t\t\t<PopoverTrigger\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex h-10 w-full items-center justify-between rounded-full border px-3.5 text-gdt-sm transition-[border-color,box-shadow] outline-none\",\n\t\t\t\t\tdisabled\n\t\t\t\t\t\t? \"cursor-not-allowed border-line-subtle bg-surface text-fg-caption-placeholder\"\n\t\t\t\t\t\t: open\n\t\t\t\t\t\t\t? \"border-line-focus bg-canvas text-fg-primary inset-ring-1 inset-ring-line-focus\"\n\t\t\t\t\t\t\t: \"border-line bg-canvas text-fg-primary hover:border-line-strong\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"min-w-0 truncate\",\n\t\t\t\t\t\t!value && \"text-fg-caption-placeholder\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{value || placeholder}\n\t\t\t\t</span>\n\t\t\t\t<ClockIcon\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"ml-2 size-4 shrink-0\",\n\t\t\t\t\t\tdisabled ? \"text-fg-caption-placeholder\" : \"text-fg-secondary\",\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t</PopoverTrigger>\n\t\t\t<PopoverContent\n\t\t\t\tshowArrow={false}\n\t\t\t\talign=\"start\"\n\t\t\t\tclassName=\"min-w-(--anchor-width) gap-0 overflow-hidden rounded-2xl p-0\"\n\t\t\t>\n\t\t\t\t<div className=\"w-full flex gap-2 items-center justify-center border-b border-line-subtle\">\n\t\t\t\t\t{columns.map((column) => (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tkey={column.key}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"py-3 text-center text-gdt-xs text-fg-caption-placeholder\",\n\t\t\t\t\t\t\t\tformat === \"12h\" ? \"w-20.5\" : \"w-31\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{column.key}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex gap-2 justify-center px-3 pt-2\",\n\t\t\t\t\t\tformat === \"12h\" ? \"*:w-20.5\" : \"*:w-31\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<TimeColumn\n\t\t\t\t\t\titems={format === \"12h\" ? HOURS_12 : HOURS_24}\n\t\t\t\t\t\tvalue={pending.hour}\n\t\t\t\t\t\tonChange={(hour) => setPending((prev) => ({ ...prev, hour }))}\n\t\t\t\t\t/>\n\t\t\t\t\t<TimeColumn\n\t\t\t\t\t\titems={MINUTES}\n\t\t\t\t\t\tvalue={pending.minute}\n\t\t\t\t\t\tonChange={(minute) => setPending((prev) => ({ ...prev, minute }))}\n\t\t\t\t\t/>\n\t\t\t\t\t{format === \"12h\" && (\n\t\t\t\t\t\t<TimeColumn\n\t\t\t\t\t\t\titems={PERIODS}\n\t\t\t\t\t\t\tvalue={pending.period}\n\t\t\t\t\t\t\tonChange={(period) =>\n\t\t\t\t\t\t\t\tsetPending((prev) => ({ ...prev, period: period as Period }))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"mt-2 flex items-center justify-between border-t border-line-subtle px-4 py-3\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"tertiary-outline\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tonClick={() => setOpen(false)}\n\t\t\t\t\t>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tonChange?.(formatTimeValue(pending, format));\n\t\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tApply\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n\nexport { TimePicker };\nexport type { TimePickerProps };\n","import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n\textend: {\n\t\tclassGroups: {\n\t\t\t\"font-size\": [\n\t\t\t\t{\n\t\t\t\t\ttext: [\n\t\t\t\t\t\t\"gdt-display\",\n\t\t\t\t\t\t\"gdt-h1\",\n\t\t\t\t\t\t\"gdt-h2\",\n\t\t\t\t\t\t\"gdt-h3\",\n\t\t\t\t\t\t\"gdt-h4\",\n\t\t\t\t\t\t\"gdt-h5\",\n\t\t\t\t\t\t\"gdt-xl\",\n\t\t\t\t\t\t\"gdt-lg\",\n\t\t\t\t\t\t\"gdt-md\",\n\t\t\t\t\t\t\"gdt-sm\",\n\t\t\t\t\t\t\"gdt-xs\",\n\t\t\t\t\t\t\"gdt-subtext\",\n\t\t\t\t\t\t\"gdt-capitalized\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n});\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import { Button as ButtonPrimitive } from \"@base-ui/react/button\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Loader } from \"lucide-react\";\nimport type * as React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { useComponentSize } from \"./size-context\";\n\nconst buttonVariants = cva(\n\t\"group/button inline-flex shrink-0 items-center justify-center rounded-full bg-clip-padding whitespace-nowrap font-bold transition-[background-color,color,border-color,box-shadow,transform] outline-none select-none focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-invalid:border-line-danger aria-invalid:ring-3 aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tprimary:\n\t\t\t\t\t\"bg-action-primary text-fg-on-brand hover:bg-action-primary-hover active:bg-action-primary-pressed\",\n\t\t\t\t\"primary-outline\":\n\t\t\t\t\t\"border-2 border-action-primary bg-transparent text-fg-brand hover:bg-surface-brand-subtle active:bg-surface-brand-subtle data-focused:bg-surface-brand-subtle data-pressed:bg-surface-brand-subtle\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"bg-surface-brand-subtle text-fg-brand hover:bg-action-primary-hover hover:text-fg-on-brand active:bg-action-primary-pressed active:text-fg-on-brand data-focused:bg-action-primary-hover data-pressed:bg-action-primary-pressed data-focused:text-fg-on-brand data-pressed:text-fg-on-brand\",\n\t\t\t\t\"secondary-outline\":\n\t\t\t\t\t\"border-2 border-action-secondary bg-transparent text-fg-brand hover:bg-surface-brand-subtle active:bg-surface-brand-subtle data-focused:bg-surface-brand-subtle data-pressed:bg-surface-brand-subtle\",\n\t\t\t\ttertiary:\n\t\t\t\t\t\"bg-action-tertiary text-fg-primary hover:bg-action-tertiary-hover active:bg-action-tertiary-pressed data-focused:bg-action-tertiary-hover data-pressed:bg-action-tertiary-pressed\",\n\t\t\t\t\"tertiary-outline\":\n\t\t\t\t\t\"border border-line-strong bg-transparent text-fg-primary hover:bg-surface active:bg-surface-raised data-focused:bg-surface data-pressed:bg-surface-raised\",\n\t\t\t\tghost:\n\t\t\t\t\t\"bg-transparent text-fg-primary hover:bg-surface active:bg-surface-raised data-focused:bg-surface data-pressed:bg-surface-raised\",\n\t\t\t\tdanger:\n\t\t\t\t\t\"bg-action-danger text-fg-on-brand hover:bg-action-danger-hover active:bg-action-danger-pressed data-focused:bg-action-danger-hover data-pressed:bg-action-danger-pressed\",\n\t\t\t\t\"glass-overlay\": \"bg-surface-glass-overlay-button text-fg-on-brand\",\n\t\t\t\t\"link-brand\":\n\t\t\t\t\t\"border-transparent bg-transparent px-0 text-fg-brand hover:underline active:underline active:opacity-70\",\n\t\t\t\t\"link-neutral\":\n\t\t\t\t\t\"border-transparent bg-transparent px-0 text-fg-secondary hover:underline active:underline active:opacity-70\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tsm: \"h-8 gap-2 px-3.5 text-gdt-xs has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 [&_svg:not([class*='size-'])]:size-3.5\",\n\t\t\t\tmd: \"h-10 gap-2 px-4.5 text-gdt-sm has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4\",\n\t\t\t\tlg: \"h-12.5 gap-2.5 px-5.5 text-gdt-md has-data-[icon=inline-end]:pr-5 has-data-[icon=inline-start]:pl-5 [&_svg:not([class*='size-'])]:size-4.5\",\n\t\t\t\txl: \"h-14 gap-3 px-6.5 text-gdt-lg has-data-[icon=inline-end]:pr-6 has-data-[icon=inline-start]:pl-6 [&_svg:not([class*='size-'])]:size-5\",\n\t\t\t\ticon: \"size-10\",\n\t\t\t\t\"icon-xs\": \"size-6 text-gdt-xs [&_svg:not([class*='size-'])]:size-3\",\n\t\t\t\t\"icon-sm\": \"size-8 text-gdt-sm [&_svg:not([class*='size-'])]:size-3.5\",\n\t\t\t\t\"icon-lg\":\n\t\t\t\t\t\"size-12.5 text-gdt-md [&_svg:not([class*='size-'])]:size-4.5\",\n\t\t\t\t\"icon-xl\": \"size-14 text-gdt-lg [&_svg:not([class*='size-'])]:size-5\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"primary\",\n\t\t\tsize: \"md\",\n\t\t},\n\t},\n);\n\ntype ButtonSize = NonNullable<VariantProps<typeof buttonVariants>[\"size\"]>;\n\nfunction Button({\n\tclassName,\n\tvariant = \"primary\",\n\tsize,\n\tisLoading = false,\n\tchildren,\n\tdisabled = false,\n\t...props\n}: ButtonPrimitive.Props &\n\tVariantProps<typeof buttonVariants> & { isLoading?: boolean }) {\n\tconst inheritedSize = useComponentSize();\n\tconst resolvedSize = size ?? inheritedSize;\n\tconst _disabled = disabled || isLoading;\n\treturn (\n\t\t<ButtonPrimitive\n\t\t\tdata-slot=\"button\"\n\t\t\tclassName={cn(buttonVariants({ variant, size: resolvedSize, className }))}\n\t\t\tdisabled={_disabled}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isLoading && <Loader className=\"size-4 animate-spin\" />} {children}\n\t\t</ButtonPrimitive>\n\t);\n}\n\ntype ButtonLinkProps = Omit<React.ComponentProps<\"a\">, \"href\"> &\n\tVariantProps<typeof buttonVariants> & {\n\t\tdisabled?: boolean;\n\t\thref: string;\n\t};\n\nfunction ButtonLink({\n\tclassName,\n\thref,\n\tvariant = \"primary\",\n\tsize,\n\tdisabled = false,\n\tonClick,\n\t...props\n}: ButtonLinkProps) {\n\tconst inheritedSize = useComponentSize();\n\tconst resolvedSize: ButtonSize = size ?? inheritedSize;\n\n\treturn (\n\t\t<a\n\t\t\tdata-slot=\"button-link\"\n\t\t\thref={href}\n\t\t\taria-disabled={disabled}\n\t\t\ttabIndex={disabled ? -1 : props.tabIndex}\n\t\t\tclassName={cn(buttonVariants({ variant, size: resolvedSize, className }))}\n\t\t\tonClick={(event) => {\n\t\t\t\tif (disabled) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tonClick?.(event);\n\t\t\t}}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Button, ButtonLink, buttonVariants };\n","\"use client\";\n\nimport { createContext, type ReactNode, useContext } from \"react\";\n\ntype ComponentSize = \"sm\" | \"md\" | \"lg\";\n\nconst SizeContext = createContext<ComponentSize | undefined>(undefined);\n\nfunction SizeProvider({\n\tchildren,\n\tsize,\n}: {\n\tchildren: ReactNode;\n\tsize?: ComponentSize | null;\n}) {\n\tif (!size) {\n\t\treturn <>{children}</>;\n\t}\n\n\treturn <SizeContext.Provider value={size}>{children}</SizeContext.Provider>;\n}\n\nfunction useComponentSize(\n\tsize?: ComponentSize | null,\n\tfallback: ComponentSize = \"md\",\n) {\n\tconst inheritedSize = useContext(SizeContext);\n\treturn size ?? inheritedSize ?? fallback;\n}\n\nexport { SizeProvider, useComponentSize, type ComponentSize };\n","\"use client\";\n\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../../lib/cn\";\nimport { type ComponentSize, SizeProvider } from \"./size-context\";\n\nfunction Popover({ ...props }: PopoverPrimitive.Root.Props) {\n\treturn <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: PopoverPrimitive.Trigger.Props) {\n\treturn <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\ntype PopoverContentProps = PopoverPrimitive.Popup.Props &\n\tPick<\n\t\tPopoverPrimitive.Positioner.Props,\n\t\t\"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n\t> & {\n\t\tshowArrow?: boolean;\n\t\tsize?: ComponentSize;\n\t};\n\nfunction PopoverContent({\n\tclassName,\n\talign = \"center\",\n\talignOffset = 0,\n\tside = \"bottom\",\n\tsideOffset = 6,\n\tshowArrow = true,\n\tsize = \"md\",\n\tchildren,\n\t...props\n}: PopoverContentProps) {\n\treturn (\n\t\t<PopoverPrimitive.Portal>\n\t\t\t<PopoverPrimitive.Positioner\n\t\t\t\talign={align}\n\t\t\t\talignOffset={alignOffset}\n\t\t\t\tside={side}\n\t\t\t\tsideOffset={sideOffset}\n\t\t\t\tclassName=\"isolate z-50\"\n\t\t\t>\n\t\t\t\t<PopoverPrimitive.Popup\n\t\t\t\t\tdata-slot=\"popover-content\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"z-50 relative flex w-72 max-w-[calc(100vw-2rem)] origin-(--transform-origin) flex-col rounded-lg border-0 bg-surface-overlay py-4 text-gdt-sm text-fg-primary shadow-2 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 has-[&_[data-slot=popover-footer]]:pb-0\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<SizeProvider size={size}>{children}</SizeProvider>\n\t\t\t\t\t{showArrow ? (\n\t\t\t\t\t\t<PopoverPrimitive.Arrow className=\"relative block w-3 h-1.5 overflow-clip data-[side=bottom]:top-[-6px] data-[side=left]:right-[-9px] data-[side=left]:rotate-90 data-[side=right]:left-[-9px] data-[side=right]:-rotate-90 data-[side=top]:bottom-[-6px] data-[side=top]:rotate-180 before:content-[''] before:absolute before:bottom-0 before:left-1/2 before:w-[calc(6px*sqrt(2))] before:h-[calc(6px*sqrt(2))] before:bg-surface-overlay before:border before:border-line before:[transform:translate(-50%,50%)_rotate(45deg)]\" />\n\t\t\t\t\t) : null}\n\t\t\t\t</PopoverPrimitive.Popup>\n\t\t\t</PopoverPrimitive.Positioner>\n\t\t</PopoverPrimitive.Portal>\n\t);\n}\n\nfunction PopoverHeader({\n\tclassName,\n\tborder,\n\t...props\n}: React.ComponentProps<\"div\"> & { border?: boolean }) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"popover-header\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex flex-col gap-0.5 px-4\",\n\t\t\t\tborder && \"border-b border-line-subtle pb-3\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction PopoverBody({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"popover-body\"\n\t\t\tclassName={cn(\"px-4 py-2\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction PopoverFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"popover-footer\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex flex-row items-center gap-2 px-4 border-t border-line-subtle pt-3\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction PopoverTitle({ className, ...props }: PopoverPrimitive.Title.Props) {\n\treturn (\n\t\t<PopoverPrimitive.Title\n\t\t\tdata-slot=\"popover-title\"\n\t\t\tclassName={cn(\"text-gdt-sm font-semibold text-fg-primary\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction PopoverDescription({\n\tclassName,\n\t...props\n}: PopoverPrimitive.Description.Props) {\n\treturn (\n\t\t<PopoverPrimitive.Description\n\t\t\tdata-slot=\"popover-description\"\n\t\t\tclassName={cn(\"text-gdt-xs font-normal text-fg-secondary\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tPopover,\n\tPopoverContent,\n\tPopoverDescription,\n\tPopoverHeader,\n\tPopoverTitle,\n\tPopoverTrigger,\n\tPopoverBody,\n\tPopoverFooter,\n};\n"],"mappings":"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","names":["jsx","jsx","jsxs","jsx","jsxs"]}
package/dist/toast.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/toast.tsx","../src/lib/cn.ts","../src/components/ui/button.tsx","../src/components/ui/size-context.tsx"],"sourcesContent":["import type {\n\tToastManagerAddOptions,\n\tToastManagerUpdateOptions,\n\tToastObject,\n} from \"@base-ui/react/toast\";\nimport { Toast as BaseToast } from \"@base-ui/react/toast\";\nimport { Check, Info, X } from \"lucide-react\";\nimport type { CSSProperties, PropsWithChildren } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { Button } from \"./button\";\n\ntype ToastVariant = \"success\" | \"info\" | \"warning\" | \"error\" | \"loading\";\ntype ResolvedToastSide = \"top\" | \"bottom\" | \"left\" | \"right\";\ntype ToastAlign = \"start\" | \"center\" | \"end\";\ntype ToastPlacement = {\n\tside: ResolvedToastSide;\n\talign: ToastAlign;\n\tkey: string;\n};\ntype ToastRootStyle = CSSProperties &\n\tRecord<\n\t\t| \"--toast-placement-index\"\n\t\t| \"--toast-placement-offset-y\"\n\t\t| \"--toast-placement-frontmost-height\",\n\t\tstring | number | undefined\n\t>;\n\ntype ToastData = {\n\ttype: ToastVariant;\n};\n\nconst DEFAULT_TOAST_SIDE = \"top\";\nconst DEFAULT_TOAST_ALIGN = \"end\";\ntype ToastSide = NonNullable<\n\tToastObject<{ type?: ToastVariant }>[\"positionerProps\"]\n>[\"side\"];\n\nexport const toastManager = BaseToast.createToastManager();\n\nexport const toast = Object.assign(\n\t(options: ToastManagerAddOptions<ToastData>) => toastManager.add(options),\n\t{\n\t\tsuccess: (options: ToastManagerAddOptions<ToastData>) =>\n\t\t\ttoastManager.add({\n\t\t\t\t...options,\n\t\t\t\tdata: { type: \"success\", ...options.data },\n\t\t\t}),\n\t\tinfo: (options: ToastManagerAddOptions<ToastData>) =>\n\t\t\ttoastManager.add({\n\t\t\t\t...options,\n\t\t\t\tdata: { type: \"info\", ...options.data },\n\t\t\t}),\n\t\twarning: (options: ToastManagerAddOptions<ToastData>) =>\n\t\t\ttoastManager.add({\n\t\t\t\t...options,\n\t\t\t\tdata: { type: \"warning\", ...options.data },\n\t\t\t}),\n\t\terror: (options: ToastManagerAddOptions<ToastData>) =>\n\t\t\ttoastManager.add({\n\t\t\t\t...options,\n\t\t\t\tdata: { type: \"error\", ...options.data },\n\t\t\t}),\n\t\tloading: (options: ToastManagerAddOptions<ToastData>) =>\n\t\t\ttoastManager.add({\n\t\t\t\t...options,\n\t\t\t\tdata: { type: \"loading\", ...options.data },\n\t\t\t}),\n\t\tdismiss: (toastId?: string | number) =>\n\t\t\ttoastManager.close(toastId?.toString()),\n\t\tupdate: (\n\t\t\ttoastId: string | number,\n\t\t\toptions: ToastManagerUpdateOptions<ToastData>,\n\t\t) => toastManager.update(toastId.toString(), options),\n\t\tpromise: toastManager.promise,\n\t},\n);\n\nexport function ToastProvider({ children }: PropsWithChildren) {\n\treturn (\n\t\t<BaseToast.Provider limit={4} timeout={5000} toastManager={toastManager}>\n\t\t\t{children}\n\t\t\t<BaseToast.Portal>\n\t\t\t\t<BaseToast.Viewport className=\"fixed inset-0 z-9999 pointer-events-none outline-none\">\n\t\t\t\t\t<ToastList />\n\t\t\t\t</BaseToast.Viewport>\n\t\t\t</BaseToast.Portal>\n\t\t</BaseToast.Provider>\n\t);\n}\n\nfunction ToastList() {\n\tconst { toasts } = BaseToast.useToastManager<ToastData>();\n\tconst placementStacks = new Map<\n\t\tstring,\n\t\t{\n\t\t\tdomIndex: number;\n\t\t\tvisibleIndex: number;\n\t\t\toffsetY: number;\n\t\t\tfrontmostHeight?: number;\n\t\t}\n\t>();\n\n\treturn toasts.map((item) => {\n\t\tconst placement = getToastPlacement(item);\n\t\tconst stack = placementStacks.get(placement.key) ?? {\n\t\t\tdomIndex: 0,\n\t\t\tvisibleIndex: 0,\n\t\t\toffsetY: 0,\n\t\t\tfrontmostHeight: item.height,\n\t\t};\n\t\tconst placementIndex =\n\t\t\titem.transitionStatus === \"ending\" ? stack.domIndex : stack.visibleIndex;\n\t\tconst style: ToastRootStyle = {\n\t\t\t\"--toast-placement-index\": placementIndex,\n\t\t\t\"--toast-placement-offset-y\": `${stack.offsetY}px`,\n\t\t\t\"--toast-placement-frontmost-height\": stack.frontmostHeight\n\t\t\t\t? `${stack.frontmostHeight}px`\n\t\t\t\t: undefined,\n\t\t};\n\n\t\tstack.offsetY += item.height ?? 0;\n\t\tstack.domIndex += 1;\n\t\tif (item.transitionStatus !== \"ending\") {\n\t\t\tstack.visibleIndex += 1;\n\t\t}\n\t\tplacementStacks.set(placement.key, stack);\n\n\t\treturn (\n\t\t\t<BaseToast.Root\n\t\t\t\tkey={item.id}\n\t\t\t\ttoast={item}\n\t\t\t\tclassName={cn(\n\t\t\t\t\ttoastRootBaseClassName,\n\t\t\t\t\tgetToastPositionClassName(placement),\n\t\t\t\t\tgetToastStackClassName(placement),\n\t\t\t\t\tgetToastExitClassName(placement.side),\n\t\t\t\t)}\n\t\t\t\tswipeDirection={getSwipeDirections(item)}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t<BaseToast.Content\n\t\t\t\t\tclassName={\n\t\t\t\t\t\t\"grid grid-cols-[16px_minmax(0,1fr)_24px] items-start gap-3 overflow-hidden px-2.5 py-3.5 pl-3 transition-opacity duration-250 data-behind:pointer-events-none data-behind:opacity-0 data-expanded:pointer-events-auto data-expanded:opacity-100\"\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<ToastIcon type={item.data?.type} />\n\t\t\t\t\t<div className=\"min-w-0 flex flex-col gap-1.5\">\n\t\t\t\t\t\t{item.title ? (\n\t\t\t\t\t\t\t<BaseToast.Title className=\"text-gdt-sm font-semibold text-fg-primary\" />\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t{item.description ? (\n\t\t\t\t\t\t\t<BaseToast.Description className=\"text-gdt-sm text-fg-secondary\" />\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<BaseToast.Action\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"cursor-pointer border-0 bg-transparent p-0 font-inherit text-gdt-sm font-semibold inline-flex w-fit items-center hover:underline underline-offset-2\",\n\t\t\t\t\t\t\t\titem.data?.type === \"success\" && \"text-fg-brand\",\n\t\t\t\t\t\t\t\titem.data?.type === \"info\" && \"text-fg-primary\",\n\t\t\t\t\t\t\t\titem.data?.type === \"warning\" && \"text-fg-accent\",\n\t\t\t\t\t\t\t\titem.data?.type === \"error\" && \"text-fg-danger\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<BaseToast.Close\n\t\t\t\t\t\trender={<Button variant=\"ghost\" size=\"icon-xs\" />}\n\t\t\t\t\t\taria-label=\"Close toast\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<X className=\"size-4\" />\n\t\t\t\t\t</BaseToast.Close>\n\t\t\t\t</BaseToast.Content>\n\t\t\t</BaseToast.Root>\n\t\t);\n\t});\n}\n\nfunction ToastIcon({ type }: { type?: ToastVariant }) {\n\tif (!type) return null;\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex size-5 items-center justify-center rounded-full text-canvas\",\n\t\t\t\ttype === \"success\" && \"bg-status-success\",\n\t\t\t\ttype === \"info\" && \"bg-status-info\",\n\t\t\t\ttype === \"warning\" && \"bg-status-warning text-fg-on-accent\",\n\t\t\t\ttype === \"error\" && \"bg-status-danger\",\n\t\t\t)}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t{type === \"success\" ? <Check size={10} strokeWidth={3} /> : null}\n\t\t\t{type === \"info\" ? <Info size={11} strokeWidth={2.8} /> : null}\n\t\t\t{type === \"warning\" ? (\n\t\t\t\t<span className=\"text-[11px] leading-none font-extrabold\">!</span>\n\t\t\t) : null}\n\t\t\t{type === \"error\" ? <X size={10} strokeWidth={3} /> : null}\n\t\t</span>\n\t);\n}\n\nconst toastRootBaseClassName =\n\t\"[--gap:12px] [--peek:12px] [--anchor-x:0px] [--anchor-y:0px] [--scale:calc(max(0,1-(var(--toast-placement-index)*0.04)))] [--shrink:calc(1-var(--scale))] [--height:var(--toast-placement-frontmost-height,var(--toast-height))] absolute z-[calc(1000-var(--toast-placement-index))] h-[var(--height)] min-h-[var(--height)] w-[min(335px,calc(100vw-32px))] overflow-visible rounded-lg border border-line bg-surface-overlay text-fg-primary shadow-[var(--elevation-e2-shadow)] pointer-events-auto select-none [transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(var(--collapsed-y))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms] after:absolute after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:pointer-events-auto after:content-[''] data-[expanded]:h-[var(--toast-height)] data-[expanded]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(var(--expanded-y))_scale(1)] data-[starting-style]:opacity-0 data-[starting-style]:[transform:translateX(var(--exit-x))_translateY(var(--exit-y))_scale(var(--scale))] data-[ending-style]:opacity-0 data-[limited]:opacity-0 [&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateX(var(--exit-x))_translateY(var(--exit-y))_scale(var(--scale))] data-[ending-style]:data-[swipe-direction=up]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)-150%))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=up]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)-150%))_scale(1)] data-[ending-style]:data-[swipe-direction=down]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)+150%))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=down]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)))_translateY(calc(var(--anchor-y)+var(--toast-swipe-movement-y)+150%))_scale(1)] data-[ending-style]:data-[swipe-direction=left]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)-150%))_translateY(var(--expanded-y))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=left]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)-150%))_translateY(var(--expanded-y))_scale(1)] data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)+150%))_translateY(var(--expanded-y))_scale(var(--scale))] data-[expanded]:data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--anchor-x)+var(--toast-swipe-movement-x,0px)+150%))_translateY(var(--expanded-y))_scale(1)]\";\n\nfunction getToastPlacement(\n\titem: ToastObject<{ type?: ToastVariant }>,\n\tisRtl = false,\n): ToastPlacement {\n\tconst side = item.positionerProps?.side ?? DEFAULT_TOAST_SIDE;\n\tconst align = (item.positionerProps?.align ??\n\t\tDEFAULT_TOAST_ALIGN) as ToastAlign;\n\tconst resolvedSide = resolveToastSide(side, isRtl);\n\n\treturn {\n\t\tside: resolvedSide,\n\t\talign,\n\t\tkey: `${resolvedSide}:${align}`,\n\t};\n}\n\nfunction resolveToastSide(\n\tside: ToastSide | undefined,\n\tisRtl: boolean,\n): ResolvedToastSide {\n\tif (side === \"inline-end\") return isRtl ? \"left\" : \"right\";\n\tif (side === \"inline-start\") return isRtl ? \"right\" : \"left\";\n\tif (\n\t\tside === \"top\" ||\n\t\tside === \"bottom\" ||\n\t\tside === \"left\" ||\n\t\tside === \"right\"\n\t) {\n\t\treturn side;\n\t}\n\treturn DEFAULT_TOAST_SIDE;\n}\n\nfunction getToastPositionClassName({ side, align }: ToastPlacement) {\n\tconst isVerticalSide = side === \"top\" || side === \"bottom\";\n\n\tif (isVerticalSide) {\n\t\treturn cn(\n\t\t\tside === \"top\" && \"top-6 max-sm:top-4\",\n\t\t\tside === \"bottom\" && \"bottom-6 max-sm:bottom-4\",\n\t\t\talign === \"start\" && \"left-6 origin-top-left max-sm:left-4\",\n\t\t\talign === \"center\" && \"left-1/2 origin-top [--anchor-x:-50%]\",\n\t\t\talign === \"end\" && \"right-6 origin-top-right max-sm:right-4\",\n\t\t\tside === \"bottom\" && align === \"start\" && \"origin-bottom-left\",\n\t\t\tside === \"bottom\" && align === \"center\" && \"origin-bottom\",\n\t\t\tside === \"bottom\" && align === \"end\" && \"origin-bottom-right\",\n\t\t);\n\t}\n\n\treturn cn(\n\t\tside === \"left\" && \"left-6 origin-left max-sm:left-4\",\n\t\tside === \"right\" && \"right-6 origin-right max-sm:right-4\",\n\t\talign === \"start\" && \"top-6 max-sm:top-4\",\n\t\talign === \"center\" && \"top-1/2 [--anchor-y:-50%]\",\n\t\talign === \"end\" && \"bottom-6 max-sm:bottom-4\",\n\t\tside === \"left\" && align === \"start\" && \"origin-top-left\",\n\t\tside === \"left\" && align === \"end\" && \"origin-bottom-left\",\n\t\tside === \"right\" && align === \"start\" && \"origin-top-right\",\n\t\tside === \"right\" && align === \"end\" && \"origin-bottom-right\",\n\t);\n}\n\nfunction getToastStackClassName({ side, align }: ToastPlacement) {\n\tconst stacksUp =\n\t\tside === \"bottom\" ||\n\t\t((side === \"left\" || side === \"right\") && align === \"end\");\n\n\tif (stacksUp) {\n\t\treturn \"after:bottom-full [--expanded-y:calc(var(--anchor-y)+var(--toast-swipe-movement-y)-var(--toast-placement-offset-y)-(var(--toast-placement-index)*var(--gap)))] [--collapsed-y:calc(var(--anchor-y)+var(--toast-swipe-movement-y)-(var(--toast-placement-index)*var(--peek))-(var(--shrink)*var(--height)))]\";\n\t}\n\n\treturn \"after:top-full [--expanded-y:calc(var(--anchor-y)+var(--toast-placement-offset-y)+(var(--toast-placement-index)*var(--gap))+var(--toast-swipe-movement-y))] [--collapsed-y:calc(var(--anchor-y)+var(--toast-swipe-movement-y)+(var(--toast-placement-index)*var(--peek))+(var(--shrink)*var(--height)))]\";\n}\n\nfunction getToastExitClassName(side: ResolvedToastSide) {\n\tif (side === \"bottom\") {\n\t\treturn \"[--exit-x:calc(var(--anchor-x)+24px)] [--exit-y:calc(var(--anchor-y)+150%)]\";\n\t}\n\tif (side === \"left\") {\n\t\treturn \"[--exit-x:calc(var(--anchor-x)-150%)] [--exit-y:var(--anchor-y)]\";\n\t}\n\tif (side === \"right\") {\n\t\treturn \"[--exit-x:calc(var(--anchor-x)+150%)] [--exit-y:var(--anchor-y)]\";\n\t}\n\treturn \"[--exit-x:calc(var(--anchor-x)+24px)] [--exit-y:calc(var(--anchor-y)-150%)]\";\n}\n\ntype SwipeDirection = \"up\" | \"down\" | \"left\" | \"right\";\nfunction getSwipeDirections(\n\titem: ToastObject<{ type?: ToastVariant }>,\n\tisRtl = false,\n) {\n\tconst { side: resolvedSide, align } = getToastPlacement(item, isRtl);\n\tconst primary: SwipeDirection =\n\t\tresolvedSide === \"top\"\n\t\t\t? \"up\"\n\t\t\t: resolvedSide === \"bottom\"\n\t\t\t\t? \"down\"\n\t\t\t\t: resolvedSide === \"left\"\n\t\t\t\t\t? \"left\"\n\t\t\t\t\t: /* right */ \"right\";\n\tif (align === \"center\") return primary;\n\tconst isVerticalSide = resolvedSide === \"top\" || resolvedSide === \"bottom\";\n\tconst secondary: SwipeDirection = isVerticalSide\n\t\t? align === \"start\"\n\t\t\t? \"left\"\n\t\t\t: \"right\"\n\t\t: align === \"start\"\n\t\t\t? \"up\"\n\t\t\t: \"down\";\n\treturn [primary, secondary];\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n\textend: {\n\t\tclassGroups: {\n\t\t\t\"font-size\": [\n\t\t\t\t{\n\t\t\t\t\ttext: [\n\t\t\t\t\t\t\"gdt-display\",\n\t\t\t\t\t\t\"gdt-h1\",\n\t\t\t\t\t\t\"gdt-h2\",\n\t\t\t\t\t\t\"gdt-h3\",\n\t\t\t\t\t\t\"gdt-h4\",\n\t\t\t\t\t\t\"gdt-h5\",\n\t\t\t\t\t\t\"gdt-xl\",\n\t\t\t\t\t\t\"gdt-lg\",\n\t\t\t\t\t\t\"gdt-md\",\n\t\t\t\t\t\t\"gdt-sm\",\n\t\t\t\t\t\t\"gdt-xs\",\n\t\t\t\t\t\t\"gdt-subtext\",\n\t\t\t\t\t\t\"gdt-capitalized\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n});\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import { Button as ButtonPrimitive } from \"@base-ui/react/button\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Loader } from \"lucide-react\";\nimport type * as React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { useComponentSize } from \"./size-context\";\n\nconst buttonVariants = cva(\n\t\"group/button inline-flex shrink-0 items-center justify-center rounded-full bg-clip-padding whitespace-nowrap font-bold transition-[background-color,color,border-color,box-shadow,transform] outline-none select-none focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-invalid:border-line-danger aria-invalid:ring-3 aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tprimary:\n\t\t\t\t\t\"bg-action-primary text-fg-on-brand hover:bg-action-primary-hover active:bg-action-primary-pressed\",\n\t\t\t\t\"primary-outline\":\n\t\t\t\t\t\"border-2 border-action-primary bg-transparent text-fg-brand hover:bg-surface-brand-subtle active:bg-surface-brand-subtle data-focused:bg-surface-brand-subtle data-pressed:bg-surface-brand-subtle\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"bg-surface-brand-subtle text-fg-brand hover:bg-action-primary-hover hover:text-fg-on-brand active:bg-action-primary-pressed active:text-fg-on-brand data-focused:bg-action-primary-hover data-pressed:bg-action-primary-pressed data-focused:text-fg-on-brand data-pressed:text-fg-on-brand\",\n\t\t\t\t\"secondary-outline\":\n\t\t\t\t\t\"border-2 border-action-secondary bg-transparent text-fg-brand hover:bg-surface-brand-subtle active:bg-surface-brand-subtle data-focused:bg-surface-brand-subtle data-pressed:bg-surface-brand-subtle\",\n\t\t\t\ttertiary:\n\t\t\t\t\t\"bg-action-tertiary text-fg-primary hover:bg-action-tertiary-hover active:bg-action-tertiary-pressed data-focused:bg-action-tertiary-hover data-pressed:bg-action-tertiary-pressed\",\n\t\t\t\t\"tertiary-outline\":\n\t\t\t\t\t\"border border-line-strong bg-transparent text-fg-primary hover:bg-surface active:bg-surface-raised data-focused:bg-surface data-pressed:bg-surface-raised\",\n\t\t\t\tghost:\n\t\t\t\t\t\"bg-transparent text-fg-primary hover:bg-surface active:bg-surface-raised data-focused:bg-surface data-pressed:bg-surface-raised\",\n\t\t\t\tdanger:\n\t\t\t\t\t\"bg-action-danger text-fg-on-brand hover:bg-action-danger-hover active:bg-action-danger-pressed data-focused:bg-action-danger-hover data-pressed:bg-action-danger-pressed\",\n\t\t\t\t\"glass-overlay\": \"bg-surface-glass-overlay-button text-fg-on-brand\",\n\t\t\t\t\"link-brand\":\n\t\t\t\t\t\"border-transparent bg-transparent px-0 text-fg-brand hover:underline active:underline active:opacity-70\",\n\t\t\t\t\"link-neutral\":\n\t\t\t\t\t\"border-transparent bg-transparent px-0 text-fg-secondary hover:underline active:underline active:opacity-70\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tsm: \"h-8 gap-2 px-3.5 text-gdt-xs has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3 [&_svg:not([class*='size-'])]:size-3.5\",\n\t\t\t\tmd: \"h-10 gap-2 px-4.5 text-gdt-sm has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4\",\n\t\t\t\tlg: \"h-12.5 gap-2.5 px-5.5 text-gdt-md has-data-[icon=inline-end]:pr-5 has-data-[icon=inline-start]:pl-5 [&_svg:not([class*='size-'])]:size-4.5\",\n\t\t\t\txl: \"h-14 gap-3 px-6.5 text-gdt-lg has-data-[icon=inline-end]:pr-6 has-data-[icon=inline-start]:pl-6 [&_svg:not([class*='size-'])]:size-5\",\n\t\t\t\ticon: \"size-10\",\n\t\t\t\t\"icon-xs\": \"size-6 text-gdt-xs [&_svg:not([class*='size-'])]:size-3\",\n\t\t\t\t\"icon-sm\": \"size-8 text-gdt-sm [&_svg:not([class*='size-'])]:size-3.5\",\n\t\t\t\t\"icon-lg\":\n\t\t\t\t\t\"size-12.5 text-gdt-md [&_svg:not([class*='size-'])]:size-4.5\",\n\t\t\t\t\"icon-xl\": \"size-14 text-gdt-lg [&_svg:not([class*='size-'])]:size-5\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"primary\",\n\t\t\tsize: \"md\",\n\t\t},\n\t},\n);\n\ntype ButtonSize = NonNullable<VariantProps<typeof buttonVariants>[\"size\"]>;\n\nfunction Button({\n\tclassName,\n\tvariant = \"primary\",\n\tsize,\n\tisLoading = false,\n\tchildren,\n\tdisabled = false,\n\t...props\n}: ButtonPrimitive.Props &\n\tVariantProps<typeof buttonVariants> & { isLoading?: boolean }) {\n\tconst inheritedSize = useComponentSize();\n\tconst resolvedSize = size ?? inheritedSize;\n\tconst _disabled = disabled || isLoading;\n\treturn (\n\t\t<ButtonPrimitive\n\t\t\tdata-slot=\"button\"\n\t\t\tclassName={cn(buttonVariants({ variant, size: resolvedSize, className }))}\n\t\t\tdisabled={_disabled}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isLoading && <Loader className=\"size-4 animate-spin\" />} {children}\n\t\t</ButtonPrimitive>\n\t);\n}\n\ntype ButtonLinkProps = Omit<React.ComponentProps<\"a\">, \"href\"> &\n\tVariantProps<typeof buttonVariants> & {\n\t\tdisabled?: boolean;\n\t\thref: string;\n\t};\n\nfunction ButtonLink({\n\tclassName,\n\thref,\n\tvariant = \"primary\",\n\tsize,\n\tdisabled = false,\n\tonClick,\n\t...props\n}: ButtonLinkProps) {\n\tconst inheritedSize = useComponentSize();\n\tconst resolvedSize: ButtonSize = size ?? inheritedSize;\n\n\treturn (\n\t\t<a\n\t\t\tdata-slot=\"button-link\"\n\t\t\thref={href}\n\t\t\taria-disabled={disabled}\n\t\t\ttabIndex={disabled ? -1 : props.tabIndex}\n\t\t\tclassName={cn(buttonVariants({ variant, size: resolvedSize, className }))}\n\t\t\tonClick={(event) => {\n\t\t\t\tif (disabled) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tonClick?.(event);\n\t\t\t}}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Button, ButtonLink, buttonVariants };\n","\"use client\";\n\nimport { createContext, type ReactNode, useContext } from \"react\";\n\ntype ComponentSize = \"sm\" | \"md\" | \"lg\";\n\nconst SizeContext = createContext<ComponentSize | undefined>(undefined);\n\nfunction SizeProvider({\n\tchildren,\n\tsize,\n}: {\n\tchildren: ReactNode;\n\tsize?: ComponentSize | null;\n}) {\n\tif (!size) {\n\t\treturn <>{children}</>;\n\t}\n\n\treturn <SizeContext.Provider value={size}>{children}</SizeContext.Provider>;\n}\n\nfunction useComponentSize(\n\tsize?: ComponentSize | null,\n\tfallback: ComponentSize = \"md\",\n) {\n\tconst inheritedSize = useContext(SizeContext);\n\treturn size ?? inheritedSize ?? fallback;\n}\n\nexport { SizeProvider, useComponentSize, type ComponentSize };\n"],"mappings":"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","names":["jsx","jsx","jsxs"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/tooltip.tsx","../src/lib/cn.ts"],"sourcesContent":["\"use client\";\n\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\";\nimport { cn } from \"../../lib/cn\";\n\nfunction Tooltip({ ...props }: PopoverPrimitive.Root.Props) {\n\treturn <PopoverPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({\n\t...props\n}: Omit<PopoverPrimitive.Trigger.Props, \"openOnHover\">) {\n\treturn (\n\t\t<PopoverPrimitive.Trigger\n\t\t\tnativeButton={false}\n\t\t\tdata-slot=\"tooltip-trigger\"\n\t\t\topenOnHover={true}\n\t\t\tdelay={100}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\ntype TooltipContentProps = PopoverPrimitive.Popup.Props &\n\tPick<\n\t\tPopoverPrimitive.Positioner.Props,\n\t\t\"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n\t> & {\n\t\tshowArrow?: boolean;\n\t};\n\nfunction TooltipContent({\n\tclassName,\n\tside = \"top\",\n\tsideOffset = 6,\n\talign = \"center\",\n\talignOffset = 0,\n\tshowArrow = true,\n\tchildren,\n\t...props\n}: TooltipContentProps) {\n\treturn (\n\t\t<PopoverPrimitive.Portal>\n\t\t\t<PopoverPrimitive.Positioner\n\t\t\t\talign={align}\n\t\t\t\talignOffset={alignOffset}\n\t\t\t\tside={side}\n\t\t\t\tsideOffset={sideOffset}\n\t\t\t\tclassName=\"isolate z-50\"\n\t\t\t>\n\t\t\t\t<PopoverPrimitive.Popup\n\t\t\t\t\tdata-slot=\"tooltip-content\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"z-50 relative inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-[6px] border border-line bg-surface-overlay px-3 py-2 text-gdt-sm font-medium text-fg-primary shadow-2 duration-100 has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t\t{showArrow ? (\n\t\t\t\t\t\t<PopoverPrimitive.Arrow className=\"relative block w-3 h-1.5 overflow-clip data-[side=bottom]:top-[-6px] data-[side=left]:right-[-9px] data-[side=left]:rotate-90 data-[side=right]:left-[-9px] data-[side=right]:-rotate-90 data-[side=top]:bottom-[-6px] data-[side=top]:rotate-180 before:content-[''] before:absolute before:bottom-0 before:left-1/2 before:w-[calc(6px*sqrt(2))] before:h-[calc(6px*sqrt(2))] before:bg-surface-overlay before:border before:border-line before:[transform:translate(-50%,50%)_rotate(45deg)]\" />\n\t\t\t\t\t) : null}\n\t\t\t\t</PopoverPrimitive.Popup>\n\t\t\t</PopoverPrimitive.Positioner>\n\t\t</PopoverPrimitive.Portal>\n\t);\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent };\n","import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n\textend: {\n\t\tclassGroups: {\n\t\t\t\"font-size\": [\n\t\t\t\t{\n\t\t\t\t\ttext: [\n\t\t\t\t\t\t\"gdt-display\",\n\t\t\t\t\t\t\"gdt-h1\",\n\t\t\t\t\t\t\"gdt-h2\",\n\t\t\t\t\t\t\"gdt-h3\",\n\t\t\t\t\t\t\"gdt-h4\",\n\t\t\t\t\t\t\"gdt-h5\",\n\t\t\t\t\t\t\"gdt-xl\",\n\t\t\t\t\t\t\"gdt-lg\",\n\t\t\t\t\t\t\"gdt-md\",\n\t\t\t\t\t\t\"gdt-sm\",\n\t\t\t\t\t\t\"gdt-xs\",\n\t\t\t\t\t\t\"gdt-subtext\",\n\t\t\t\t\t\t\"gdt-capitalized\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n});\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n"],"mappings":";AAEA,SAAS,WAAW,wBAAwB;;;ACF5C,SAA0B,YAAY;AACtC,SAAS,2BAA2B;AAEpC,IAAM,UAAU,oBAAoB;AAAA,EACnC,QAAQ;AAAA,IACP,aAAa;AAAA,MACZ,aAAa;AAAA,QACZ;AAAA,UACC,MAAM;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD,CAAC;AAEM,SAAS,MAAM,QAAsB;AAC3C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC5B;;;ADzBQ,cA4CJ,YA5CI;AADR,SAAS,QAAQ,EAAE,GAAG,MAAM,GAAgC;AAC3D,SAAO,oBAAC,iBAAiB,MAAjB,EAAsB,aAAU,WAAW,GAAG,OAAO;AAC9D;AAEA,SAAS,eAAe;AAAA,EACvB,GAAG;AACJ,GAAwD;AACvD,SACC;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACA,cAAc;AAAA,MACd,aAAU;AAAA,MACV,aAAa;AAAA,MACb,OAAO;AAAA,MACN,GAAG;AAAA;AAAA,EACL;AAEF;AAUA,SAAS,eAAe;AAAA,EACvB;AAAA,EACA,OAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACJ,GAAwB;AACvB,SACC,oBAAC,iBAAiB,QAAjB,EACA;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAU;AAAA,MAEV;AAAA,QAAC,iBAAiB;AAAA,QAAjB;AAAA,UACA,aAAU;AAAA,UACV,WAAW;AAAA,YACV;AAAA,YACA;AAAA,UACD;AAAA,UACC,GAAG;AAAA,UAEH;AAAA;AAAA,YACA,YACA,oBAAC,iBAAiB,OAAjB,EAAuB,WAAU,meAAke,IACjgB;AAAA;AAAA;AAAA,MACL;AAAA;AAAA,EACD,GACD;AAEF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/tree-map.tsx","../src/lib/cn.ts","../src/components/ui/chart.tsx","../src/components/ui/size-context.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { Treemap as RechartsTreemap, type TreemapNode } from \"recharts\";\nimport { cn } from \"../../lib/cn\";\nimport {\n\tChartCard,\n\ttype ChartConfig,\n\tChartContainer,\n\tChartDescription,\n\tChartHeader,\n\tChartTitle,\n\tChartTooltip,\n\tChartTooltipContent,\n\ttype ChartValueType,\n} from \"./chart\";\nimport { type ComponentSize, useComponentSize } from \"./size-context\";\n\n/**\n * A treemap — part-to-whole composition drawn as proportionally sized, nested\n * rectangles. Reach for one to compare category shares at a glance (portfolio\n * mix, holdings by type, regional distribution).\n *\n * Two shapes share one component: `flat` lays out a single level of categories;\n * `nested` groups subcategories beneath a shared group colour (each leaf inherits\n * its group's colour unless it sets its own `fill`). Both reuse the same palette,\n * in-tile labels, legend, frame, and tooltip — only the data depth differs.\n *\n * Per the chart architecture the recharts `Treemap` primitive is rendered\n * directly here; only the giddaa frame, palette, tile content, and legend are\n * supplied around it. Tiles are sized by `value`; the in-tile label (name + share\n * of the whole) is hidden on tiles too small to fit it.\n *\n * @example\n * <TreeMap\n * data={[\n * { label: \"Lekki\", value: 40 },\n * { label: \"Ikoyi\", value: 30 },\n * { label: \"V.I.\", value: 18 },\n * { label: \"Yaba\", value: 12 },\n * ]}\n * title=\"Portfolio mix\"\n * description=\"Share of holdings by location\"\n * tooltip\n * />\n *\n * @example\n * // Nested — subcategories grouped under a shared group colour\n * <TreeMap\n * data={[\n * { label: \"Residential\", children: [\n * { label: \"Apartments\", value: 27 },\n * { label: \"Duplexes\", value: 21 },\n * ] },\n * { label: \"Commercial\", children: [\n * { label: \"Offices\", value: 17 },\n * { label: \"Retail\", value: 13 },\n * ] },\n * { label: \"Land\", children: [{ label: \"Plots\", value: 14 }] },\n * ]}\n * title=\"Portfolio mix\"\n * description=\"Holdings by category & type\"\n * />\n */\n\n/** Treemap sizes line up with the three shared `ComponentSize` values. */\ntype TreeMapSize = ComponentSize;\n\n/** Where the colour-key legend sits relative to the plot. */\ntype TreeMapLegendPlacement = \"right\" | \"bottom\";\n\ntype TreeMapDatum = {\n\t/** Category name, shown in the tile label, legend, and tooltip. */\n\tlabel: string;\n\t/** Tile value — drives the tile's area. Omit on a group with `children`. */\n\tvalue?: number;\n\t/** Tile/group colour; defaults to the palette in order. Leaves inherit it. */\n\tfill?: string;\n\t/** Subcategories for a `nested` treemap. */\n\tchildren?: TreeMapDatum[];\n};\n\n/**\n * Tile palette, ordered by share: forest → brass → moss → clay → stone. Each\n * entry pairs a tile `fill` with the `text` colour that reads on it (a tonal\n * tint of the same scale). Giddaa has no `chart-1`…`chart-N` tokens yet, so these\n * map to the brand scales; assign by order, or override per datum with `fill`.\n */\nconst TREE_MAP_PALETTE = [\n\t{ fill: \"var(--color-forest-700)\", text: \"var(--color-forest-100)\" },\n\t{ fill: \"var(--color-brass-500)\", text: \"var(--color-brass-900)\" },\n\t{ fill: \"var(--color-moss-600)\", text: \"var(--color-moss-100)\" },\n\t{ fill: \"var(--color-clay-500)\", text: \"var(--color-clay-50)\" },\n\t{ fill: \"var(--color-stone-500)\", text: \"var(--color-stone-50)\" },\n] as const;\n\ntype TreeMapLayout = {\n\t/** Plot box height in px. Width stays fluid via the ResponsiveContainer. */\n\theight: number;\n\t/** Inset around every tile in px — straddles edges to read as a gap. */\n\tgap: number;\n\t/** Tile corner radius in px. */\n\tradius: number;\n\t/** Tile label padding from the top-left corner in px. */\n\tlabelPadding: number;\n\t/** Tile label (name) font size in px. */\n\tnameFontSize: number;\n\t/** Tile label (share) font size in px. */\n\tshareFontSize: number;\n\t/** Smallest tile width/height in px that still shows its label. */\n\tlabelMinSide: number;\n};\n\nconst TREE_MAP_LAYOUT: Record<TreeMapSize, TreeMapLayout> = {\n\tsm: {\n\t\theight: 180,\n\t\tgap: 3,\n\t\tradius: 4,\n\t\tlabelPadding: 8,\n\t\tnameFontSize: 11,\n\t\tshareFontSize: 10,\n\t\tlabelMinSide: 44,\n\t},\n\tmd: {\n\t\theight: 240,\n\t\tgap: 4,\n\t\tradius: 6,\n\t\tlabelPadding: 10,\n\t\tnameFontSize: 12,\n\t\tshareFontSize: 11,\n\t\tlabelMinSide: 52,\n\t},\n\tlg: {\n\t\theight: 300,\n\t\tgap: 5,\n\t\tradius: 8,\n\t\tlabelPadding: 12,\n\t\tnameFontSize: 14,\n\t\tshareFontSize: 12,\n\t\tlabelMinSide: 60,\n\t},\n};\n\n/** Vertical legend column / value list — shared with the right-hand legend. */\nconst treeMapLegendVariants = cva(\"flex min-w-0\", {\n\tvariants: {\n\t\tplacement: {\n\t\t\tright: \"flex-col\",\n\t\t\tbottom: \"flex-row flex-wrap items-center\",\n\t\t},\n\t\tsize: {\n\t\t\tsm: \"text-gdt-xs\",\n\t\t\tmd: \"text-gdt-sm\",\n\t\t\tlg: \"text-gdt-sm\",\n\t\t},\n\t},\n\tcompoundVariants: [\n\t\t{ placement: \"right\", size: \"sm\", className: \"gap-2\" },\n\t\t{ placement: \"right\", size: \"md\", className: \"gap-3\" },\n\t\t{ placement: \"right\", size: \"lg\", className: \"gap-3.5\" },\n\t\t{ placement: \"bottom\", className: \"gap-x-4 gap-y-2\" },\n\t],\n\tdefaultVariants: { placement: \"right\", size: \"md\" },\n});\n\nconst treeMapLegendDotVariants = cva(\"shrink-0 rounded-full\", {\n\tvariants: {\n\t\tsize: { sm: \"size-2\", md: \"size-2.5\", lg: \"size-3\" },\n\t},\n\tdefaultVariants: { size: \"md\" },\n});\n\n/** A tile / group resolved with its palette colours, ready to render. */\ntype ResolvedDatum = {\n\tlabel: string;\n\tvalue?: number;\n\tfill: string;\n\ttext: string;\n\tchildren?: ResolvedDatum[];\n};\n\n/**\n * Walk the data, assigning each top-level entry a palette colour (by order) that\n * its leaves inherit, and summing the leaf values into a grand total. Top-level\n * entries become the legend keys: tiles in `flat`, groups in `nested`.\n */\nfunction resolveData(data: TreeMapDatum[]): {\n\tresolved: ResolvedDatum[];\n\ttotal: number;\n} {\n\tlet total = 0;\n\n\tconst resolve = (\n\t\tdatum: TreeMapDatum,\n\t\tpalette: { fill: string; text: string },\n\t): ResolvedDatum => {\n\t\tconst fill = datum.fill ?? palette.fill;\n\t\tconst text = palette.text;\n\n\t\tif (datum.children?.length) {\n\t\t\treturn {\n\t\t\t\tlabel: datum.label,\n\t\t\t\tfill,\n\t\t\t\ttext,\n\t\t\t\tchildren: datum.children.map((child) => resolve(child, { fill, text })),\n\t\t\t};\n\t\t}\n\n\t\ttotal += datum.value ?? 0;\n\t\treturn { label: datum.label, value: datum.value, fill, text };\n\t};\n\n\tconst resolved = data.map((datum, i) =>\n\t\tresolve(datum, TREE_MAP_PALETTE[i % TREE_MAP_PALETTE.length]),\n\t);\n\n\treturn { resolved, total };\n}\n\ntype TreeMapProps = Omit<\n\tReact.ComponentProps<typeof ChartCard>,\n\t\"size\" | \"children\"\n> & {\n\t/** Categories — flat leaves, or groups carrying `children` (nested). */\n\tdata: TreeMapDatum[];\n\t/** Explicit size; otherwise inherited from the nearest `SizeProvider`. */\n\tsize?: TreeMapSize;\n\t/** Chart heading. Omit to hide the title. */\n\ttitle?: React.ReactNode;\n\t/** Supporting metadata (period, source). Omit to hide the description. */\n\tdescription?: React.ReactNode;\n\t/** Enable the hover value tooltip. Default false. */\n\ttooltip?: boolean;\n\t/** Legend placement — a right column or a wrapped bottom row. Default right. */\n\tlegend?: TreeMapLegendPlacement;\n\t/** Format the tile value in the tooltip. Defaults to a localised number. */\n\tvalueFormatter?: (value: number) => string;\n\t/** Value formatting for the tooltip. Defaults to `number`. */\n\tvalueType?: ChartValueType;\n};\n\nfunction TreeMap({\n\tdata,\n\tsize,\n\ttitle,\n\tdescription,\n\ttooltip = false,\n\tlegend = \"right\",\n\tvalueFormatter,\n\tvalueType = \"number\",\n\tclassName,\n\t...props\n}: TreeMapProps) {\n\tconst resolvedSize = useComponentSize(size);\n\tconst layout = TREE_MAP_LAYOUT[resolvedSize];\n\tconst { resolved, total } = resolveData(data);\n\n\t// recharts reads `value`/`label`/`children`/`fill` straight off each node;\n\t// the custom content below pulls `fill`, `text`, and the share from them.\n\tconst config = Object.fromEntries(\n\t\tresolved.map((datum) => [\n\t\t\tdatum.label,\n\t\t\t{ label: datum.label, color: datum.fill },\n\t\t]),\n\t) satisfies ChartConfig;\n\n\tconst tooltipNode = tooltip ? (\n\t\t<ChartTooltip\n\t\t\tcontent={\n\t\t\t\t<ChartTooltipContent\n\t\t\t\t\tnameKey=\"label\"\n\t\t\t\t\tvalueType={valueType}\n\t\t\t\t\tformatter={\n\t\t\t\t\t\tvalueFormatter\n\t\t\t\t\t\t\t? (value) =>\n\t\t\t\t\t\t\t\t\ttypeof value === \"number\" ? valueFormatter(value) : value\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t}\n\t\t/>\n\t) : null;\n\n\tconst legendNode = (\n\t\t<ul\n\t\t\tclassName={cn(\n\t\t\t\ttreeMapLegendVariants({ placement: legend, size: resolvedSize }),\n\t\t\t)}\n\t\t>\n\t\t\t{resolved.map((datum) => (\n\t\t\t\t<li\n\t\t\t\t\tkey={datum.label}\n\t\t\t\t\tclassName=\"flex items-center gap-2 text-fg-primary\"\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName={cn(treeMapLegendDotVariants({ size: resolvedSize }))}\n\t\t\t\t\t\tstyle={{ backgroundColor: datum.fill }}\n\t\t\t\t\t/>\n\t\t\t\t\t<span className=\"min-w-0 truncate\">{datum.label}</span>\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ul>\n\t);\n\n\treturn (\n\t\t<ChartCard size={resolvedSize} className={className} {...props}>\n\t\t\t{(title != null || description != null) && (\n\t\t\t\t<ChartHeader>\n\t\t\t\t\t{title != null && <ChartTitle>{title}</ChartTitle>}\n\t\t\t\t\t{description != null && (\n\t\t\t\t\t\t<ChartDescription>{description}</ChartDescription>\n\t\t\t\t\t)}\n\t\t\t\t</ChartHeader>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex gap-4\",\n\t\t\t\t\tlegend === \"right\" ? \"flex-row items-stretch\" : \"flex-col\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<ChartContainer\n\t\t\t\t\tconfig={config}\n\t\t\t\t\tclassName=\"aspect-auto min-w-0 flex-1\"\n\t\t\t\t\tstyle={{ height: layout.height }}\n\t\t\t\t>\n\t\t\t\t\t<RechartsTreemap\n\t\t\t\t\t\tdata={resolved}\n\t\t\t\t\t\tdataKey=\"value\"\n\t\t\t\t\t\tnameKey=\"label\"\n\t\t\t\t\t\ttype=\"flat\"\n\t\t\t\t\t\tisAnimationActive={false}\n\t\t\t\t\t\tcontent={<TreeMapTile total={total} layout={layout} />}\n\t\t\t\t\t>\n\t\t\t\t\t\t{tooltipNode}\n\t\t\t\t\t</RechartsTreemap>\n\t\t\t\t</ChartContainer>\n\t\t\t\t{legendNode}\n\t\t\t</div>\n\t\t</ChartCard>\n\t);\n}\n\n/**\n * Custom recharts `Treemap` tile. recharts calls it for every node (root, groups,\n * leaves); only leaves carry a value and tile the whole plot, so non-leaves draw\n * nothing. A leaf renders an inset, rounded rectangle in its colour with an\n * in-tile label (name over its share of the whole), dropped when the tile is too\n * small to fit it.\n */\ntype TreeMapTileProps = Partial<TreemapNode> & {\n\ttotal: number;\n\tlayout: TreeMapLayout;\n\t/** Resolved tile colours, attached to each datum by `resolveData`. */\n\tfill?: string;\n\ttext?: string;\n};\n\nfunction TreeMapTile({\n\ttotal,\n\tlayout,\n\tx,\n\ty,\n\twidth,\n\theight,\n\tvalue,\n\tname,\n\tchildren,\n\tfill,\n\ttext,\n}: TreeMapTileProps) {\n\t// Non-leaf nodes (root, groups) are pure containers — their leaves cover them.\n\tif (\n\t\tchildren != null ||\n\t\tx == null ||\n\t\ty == null ||\n\t\twidth == null ||\n\t\theight == null\n\t) {\n\t\treturn <g />;\n\t}\n\n\tconst tileX = x + layout.gap / 2;\n\tconst tileY = y + layout.gap / 2;\n\tconst tileW = Math.max(0, width - layout.gap);\n\tconst tileH = Math.max(0, height - layout.gap);\n\n\tconst showLabel =\n\t\ttileW >= layout.labelMinSide && tileH >= layout.labelMinSide;\n\tconst share = total > 0 ? Math.round(((value ?? 0) / total) * 100) : 0;\n\n\treturn (\n\t\t<g>\n\t\t\t<rect\n\t\t\t\tx={tileX}\n\t\t\t\ty={tileY}\n\t\t\t\twidth={tileW}\n\t\t\t\theight={tileH}\n\t\t\t\trx={layout.radius}\n\t\t\t\try={layout.radius}\n\t\t\t\tfill={fill}\n\t\t\t/>\n\t\t\t{showLabel && (\n\t\t\t\t<text\n\t\t\t\t\tx={tileX + layout.labelPadding}\n\t\t\t\t\ty={tileY + layout.labelPadding}\n\t\t\t\t\tfill={text}\n\t\t\t\t\tdominantBaseline=\"hanging\"\n\t\t\t\t>\n\t\t\t\t\t<tspan\n\t\t\t\t\t\tx={tileX + layout.labelPadding}\n\t\t\t\t\t\tclassName=\"font-semibold\"\n\t\t\t\t\t\tstyle={{ fontSize: layout.nameFontSize }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</tspan>\n\t\t\t\t\t<tspan\n\t\t\t\t\t\tx={tileX + layout.labelPadding}\n\t\t\t\t\t\tdy={layout.nameFontSize + 4}\n\t\t\t\t\t\tclassName=\"tabular-nums\"\n\t\t\t\t\t\tstyle={{ fontSize: layout.shareFontSize }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{share}%\n\t\t\t\t\t</tspan>\n\t\t\t\t</text>\n\t\t\t)}\n\t\t</g>\n\t);\n}\n\nexport { TREE_MAP_LAYOUT, TREE_MAP_PALETTE, TreeMap };\nexport type {\n\tTreeMapDatum,\n\tTreeMapLayout,\n\tTreeMapLegendPlacement,\n\tTreeMapProps,\n\tTreeMapSize,\n};\n","import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n\textend: {\n\t\tclassGroups: {\n\t\t\t\"font-size\": [\n\t\t\t\t{\n\t\t\t\t\ttext: [\n\t\t\t\t\t\t\"gdt-display\",\n\t\t\t\t\t\t\"gdt-h1\",\n\t\t\t\t\t\t\"gdt-h2\",\n\t\t\t\t\t\t\"gdt-h3\",\n\t\t\t\t\t\t\"gdt-h4\",\n\t\t\t\t\t\t\"gdt-h5\",\n\t\t\t\t\t\t\"gdt-xl\",\n\t\t\t\t\t\t\"gdt-lg\",\n\t\t\t\t\t\t\"gdt-md\",\n\t\t\t\t\t\t\"gdt-sm\",\n\t\t\t\t\t\t\"gdt-xs\",\n\t\t\t\t\t\t\"gdt-subtext\",\n\t\t\t\t\t\t\"gdt-capitalized\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n});\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport type { TooltipValueType } from \"recharts\";\nimport * as RechartsPrimitive from \"recharts\";\nimport { cn } from \"../../lib/cn\";\nimport {\n\ttype ComponentSize,\n\tSizeProvider,\n\tuseComponentSize,\n} from \"./size-context\";\n\n/**\n * Markers use `--color-surface-brand` as a placeholder. Giddaa has no\n * categorical chart palette yet — add `chart-1`…`chart-N` tokens and bind each\n * series (its legend marker and tooltip dot) to its own colour once they exist.\n * Until then any series without an explicit colour paints brand-green.\n */\nconst SERIES_COLOR_PLACEHOLDER = \"var(--color-surface-brand)\";\n\n/** How a precise value is formatted in the tooltip and which prefix/suffix it carries. */\nexport type ChartValueType = \"number\" | \"percentage\" | \"currency\";\n\nfunction formatChartValue(\n\tvalue: TooltipValueType | undefined,\n\ttype: ChartValueType,\n) {\n\tif (Array.isArray(value)) {\n\t\treturn value.join(\", \");\n\t}\n\n\tif (typeof value !== \"number\") {\n\t\treturn value == null ? \"\" : String(value);\n\t}\n\n\tswitch (type) {\n\t\tcase \"currency\":\n\t\t\treturn `₦${value.toLocaleString(\"en-NG\")}`;\n\t\tcase \"percentage\":\n\t\t\treturn `${value.toLocaleString(\"en-NG\", {\n\t\t\t\tminimumFractionDigits: 1,\n\t\t\t\tmaximumFractionDigits: 1,\n\t\t\t})}%`;\n\t\tdefault:\n\t\t\treturn value.toLocaleString(\"en-NG\");\n\t}\n}\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const;\n\nconst INITIAL_DIMENSION = { width: 320, height: 200 } as const;\ntype TooltipNameType = number | string;\n\nexport type ChartConfig = Record<\n\tstring,\n\t{\n\t\tlabel?: React.ReactNode;\n\t\ticon?: React.ComponentType;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record<keyof typeof THEMES, string> }\n\t)\n>;\n\ntype ChartContextProps = {\n\tconfig: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n\tconst context = React.useContext(ChartContext);\n\n\tif (!context) {\n\t\tthrow new Error(\"useChart must be used within a <ChartContainer />\");\n\t}\n\n\treturn context;\n}\n\n/**\n * Shared chart frame — the chrome that surrounds the plot of any chart type\n * (bar, line, area, pie). These are presentational, domain-free, and size-aware:\n * a `size` flows through `SizeProvider` so the plot and its labels can scale\n * with the card. Compose them with the plot primitives:\n *\n * <ChartCard size=\"md\">\n * <ChartHeader>\n * <ChartTitle>Revenue Overview</ChartTitle>\n * <ChartDescription>Monthly revenue · Jan–Jul</ChartDescription>\n * </ChartHeader>\n * <ChartContainer config={config}>{/* recharts plot *\\/}</ChartContainer>\n * </ChartCard>\n */\nconst chartCardVariants = cva(\n\t\"flex w-full min-w-0 flex-col rounded-2xl border border-line-subtle bg-surface-raised text-fg-primary shadow-1\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\tsm: \"gap-3 p-4\",\n\t\t\t\tmd: \"gap-4 p-5\",\n\t\t\t\tlg: \"gap-5 p-6\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: { size: \"md\" },\n\t},\n);\n\nfunction ChartCard({\n\tclassName,\n\tsize,\n\tchildren,\n\t...props\n}: React.ComponentProps<\"section\"> & { size?: ComponentSize }) {\n\tconst resolvedSize = useComponentSize(size);\n\n\treturn (\n\t\t<SizeProvider size={resolvedSize}>\n\t\t\t<section\n\t\t\t\tdata-slot=\"chart-card\"\n\t\t\t\tclassName={cn(chartCardVariants({ size: resolvedSize }), className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</section>\n\t\t</SizeProvider>\n\t);\n}\n\nfunction ChartHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"chart-header\"\n\t\t\tclassName={cn(\"flex min-w-0 flex-col gap-1\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst chartTitleVariants = cva(\"min-w-0 font-bold text-fg-primary\", {\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"text-gdt-md\",\n\t\t\tmd: \"text-gdt-lg\",\n\t\t\tlg: \"text-gdt-h5\",\n\t\t},\n\t},\n\tdefaultVariants: { size: \"md\" },\n});\n\nfunction ChartTitle({\n\tclassName,\n\tsize,\n\t...props\n}: React.ComponentProps<\"h3\"> & { size?: ComponentSize }) {\n\tconst resolvedSize = useComponentSize(size);\n\n\treturn (\n\t\t<h3\n\t\t\tdata-slot=\"chart-title\"\n\t\t\tclassName={cn(chartTitleVariants({ size: resolvedSize }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst chartDescriptionVariants = cva(\"min-w-0 font-normal text-fg-secondary\", {\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"text-gdt-xs\",\n\t\t\tmd: \"text-gdt-sm\",\n\t\t\tlg: \"text-gdt-sm\",\n\t\t},\n\t},\n\tdefaultVariants: { size: \"md\" },\n});\n\nfunction ChartDescription({\n\tclassName,\n\tsize,\n\t...props\n}: React.ComponentProps<\"p\"> & { size?: ComponentSize }) {\n\tconst resolvedSize = useComponentSize(size);\n\n\treturn (\n\t\t<p\n\t\t\tdata-slot=\"chart-description\"\n\t\t\tclassName={cn(\n\t\t\t\tchartDescriptionVariants({ size: resolvedSize }),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction ChartContainer({\n\tid,\n\tclassName,\n\tchildren,\n\tconfig,\n\tinitialDimension = INITIAL_DIMENSION,\n\t...props\n}: React.ComponentProps<\"div\"> & {\n\tconfig: ChartConfig;\n\tchildren: React.ComponentProps<\n\t\ttypeof RechartsPrimitive.ResponsiveContainer\n\t>[\"children\"];\n\tinitialDimension?: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n}) {\n\tconst uniqueId = React.useId();\n\tconst chartId = `chart-${id ?? uniqueId.replace(/:/g, \"\")}`;\n\n\treturn (\n\t\t<ChartContext.Provider value={{ config }}>\n\t\t\t<div\n\t\t\t\tdata-slot=\"chart\"\n\t\t\t\tdata-chart={chartId}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ChartStyle id={chartId} config={config} />\n\t\t\t\t<RechartsPrimitive.ResponsiveContainer\n\t\t\t\t\tinitialDimension={initialDimension}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</RechartsPrimitive.ResponsiveContainer>\n\t\t\t</div>\n\t\t</ChartContext.Provider>\n\t);\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n\tconst colorConfig = Object.entries(config).filter(\n\t\t([, config]) => config.theme ?? config.color,\n\t);\n\n\tif (!colorConfig.length) {\n\t\treturn null;\n\t}\n\n\tconst styleContent = Object.entries(THEMES)\n\t\t.map(\n\t\t\t([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n\t.map(([key, itemConfig]) => {\n\t\tconst color =\n\t\t\titemConfig.theme?.[theme as keyof typeof itemConfig.theme] ??\n\t\t\titemConfig.color;\n\t\treturn color ? ` --color-${key}: ${color};` : null;\n\t})\n\t.join(\"\\n\")}\n}\n`,\n\t\t)\n\t\t.join(\"\\n\");\n\n\treturn <style>{styleContent}</style>;\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\n/**\n * Hover tooltip for a chart data point. It surfaces a single precise value with\n * type-appropriate formatting — grouped integers, percentages, or ₦-prefixed\n * currency — sitting on an elevated overlay (bg-surface-overlay, Shadow-2,\n * 1px border-subtle) so users can read exact figures without leaving the chart.\n *\n * Anatomy: series dot · metric label · hero value · period caption.\n */\nconst chartTooltipVariants = cva(\n\t\"flex flex-col bg-surface-overlay border border-line-subtle shadow-2\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\txs: \"gap-0.5 rounded-md p-2\",\n\t\t\t\tsm: \"gap-0.5 rounded-md p-2.5\",\n\t\t\t\tmd: \"gap-1 rounded-lg p-3\",\n\t\t\t\tlg: \"gap-1 rounded-xl p-3.5\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"md\",\n\t\t},\n\t},\n);\n\nconst chartTooltipDotVariants = cva(\"shrink-0 rounded-full\", {\n\tvariants: {\n\t\tsize: {\n\t\t\txs: \"size-1.5\",\n\t\t\tsm: \"size-2\",\n\t\t\tmd: \"size-2.5\",\n\t\t\tlg: \"size-2.5\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"md\",\n\t},\n});\n\nconst chartTooltipLabelVariants = cva(\"font-medium text-fg-secondary\", {\n\tvariants: {\n\t\tsize: {\n\t\t\txs: \"text-gdt-xs\",\n\t\t\tsm: \"text-gdt-xs\",\n\t\t\tmd: \"text-gdt-sm\",\n\t\t\tlg: \"text-gdt-sm\",\n\t\t},\n\t},\n\tdefaultVariants: { size: \"md\" },\n});\n\nconst chartTooltipValueVariants = cva(\n\t\"font-extrabold text-fg-primary tabular-nums\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\txs: \"text-gdt-sm\",\n\t\t\t\tsm: \"text-gdt-md\",\n\t\t\t\tmd: \"text-gdt-lg\",\n\t\t\t\tlg: \"text-gdt-xl\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: { size: \"md\" },\n\t},\n);\n\nfunction ChartTooltipContent({\n\tactive,\n\tpayload,\n\tclassName,\n\thideIndicator = false,\n\tlabel,\n\tlabelFormatter,\n\tformatter,\n\tcolor,\n\tnameKey,\n\tvalueType = \"number\",\n\tsize = \"md\",\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n\tReact.ComponentProps<\"div\"> & {\n\t\thideIndicator?: boolean;\n\t\tnameKey?: string;\n\t\tvalueType?: ChartValueType;\n\t} & VariantProps<typeof chartTooltipVariants> &\n\tOmit<\n\t\tRechartsPrimitive.DefaultTooltipContentProps<\n\t\t\tTooltipValueType,\n\t\t\tTooltipNameType\n\t\t>,\n\t\t\"accessibilityLayer\"\n\t>) {\n\tconst { config } = useChart();\n\n\tif (!active || !payload?.length) {\n\t\treturn null;\n\t}\n\n\tconst [item] = payload.filter((entry) => entry.type !== \"none\");\n\n\tif (!item) {\n\t\treturn null;\n\t}\n\n\tconst key = `${nameKey ?? item.name ?? item.dataKey ?? \"value\"}`;\n\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\tconst dotColor =\n\t\tcolor ?? item.payload?.fill ?? item.color ?? SERIES_COLOR_PLACEHOLDER;\n\n\t// Metric label — the short name of the series being read, e.g. \"Total Revenue\".\n\tconst metricLabel = itemConfig?.label ?? item.name;\n\t// Hero value — the precise, formatted figure, the visual focus of the tooltip.\n\tconst heroValue = formatter\n\t\t? formatter(item.value, item.name ?? \"\", item, 0, item.payload)\n\t\t: formatChartValue(item.value, valueType);\n\t// Period caption — the time context for the value, e.g. \"March 2026\".\n\tconst periodCaption = labelFormatter\n\t\t? labelFormatter(label, payload)\n\t\t: ((typeof label === \"string\" ? config[label]?.label : null) ?? label);\n\n\treturn (\n\t\t<div className={cn(chartTooltipVariants({ size }), className)}>\n\t\t\t{metricLabel != null && (\n\t\t\t\t<div className=\"flex items-center gap-1.5 [&>svg]:size-3 [&>svg]:shrink-0\">\n\t\t\t\t\t{!hideIndicator &&\n\t\t\t\t\t\t(itemConfig?.icon ? (\n\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName={cn(chartTooltipDotVariants({ size }))}\n\t\t\t\t\t\t\t\tstyle={{ backgroundColor: dotColor }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t<span className={cn(chartTooltipLabelVariants({ size }))}>\n\t\t\t\t\t\t{metricLabel}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<p className={cn(chartTooltipValueVariants({ size }))}>{heroValue}</p>\n\t\t\t{periodCaption != null && periodCaption !== \"\" && (\n\t\t\t\t<p className=\"text-gdt-xs text-fg-caption-placeholder\">\n\t\t\t\t\t{periodCaption}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\n/** Marker shape that ties a legend item to its series. */\ntype ChartLegendMarker = \"dot\" | \"square\" | \"line\";\n\nconst chartLegendItemVariants = cva(\n\t\"group/legend-item flex items-center rounded-md leading-none text-fg-primary transition-colors [&>svg]:shrink-0\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\tsm: \"gap-1.5 px-2 py-1 text-gdt-xs [&>svg]:size-3\",\n\t\t\t\tmd: \"gap-2 px-2.5 py-1.5 text-gdt-sm [&>svg]:size-3.5\",\n\t\t\t},\n\t\t\tinteractive: {\n\t\t\t\ttrue: \"cursor-pointer outline-none hover:bg-surface-raised focus-visible:bg-surface-raised\",\n\t\t\t\tfalse: \"\",\n\t\t\t},\n\t\t\tinactive: {\n\t\t\t\ttrue: \"text-fg-caption-placeholder line-through\",\n\t\t\t\tfalse: \"\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"md\",\n\t\t\tinteractive: false,\n\t\t\tinactive: false,\n\t\t},\n\t},\n);\n\nconst chartLegendMarkerSizeVariants = cva(\"shrink-0\", {\n\tvariants: {\n\t\tmarker: {\n\t\t\tdot: \"rounded-full\",\n\t\t\tsquare: \"rounded-[2px]\",\n\t\t\tline: \"rounded-full\",\n\t\t},\n\t\tsize: {\n\t\t\tsm: \"\",\n\t\t\tmd: \"\",\n\t\t},\n\t},\n\tcompoundVariants: [\n\t\t{ marker: [\"dot\", \"square\"], size: \"sm\", className: \"size-2\" },\n\t\t{ marker: [\"dot\", \"square\"], size: \"md\", className: \"size-2.5\" },\n\t\t{ marker: \"line\", size: \"sm\", className: \"h-[3px] w-3\" },\n\t\t{ marker: \"line\", size: \"md\", className: \"h-[3px] w-3.5\" },\n\t],\n\tdefaultVariants: { marker: \"dot\", size: \"md\" },\n});\n\n/**\n * A shared legend for all chart types. Each item pairs a series marker with a\n * label and can be toggled to hide or show its series — the inactive state mutes\n * the marker and strikes through the label. Items compose into horizontal rows\n * or vertical columns, in two sizes, with dot, square, or line markers.\n *\n * Toggling: pass `onToggle` to make items interactive. Inactive items are read\n * from each payload entry's `inactive` flag (recharts sets this when wired) or\n * the controlled `inactiveKeys` set.\n */\nfunction ChartLegendContent({\n\tclassName,\n\thideIcon = false,\n\tpayload,\n\tverticalAlign = \"bottom\",\n\tnameKey,\n\tmarker = \"dot\",\n\tsize = \"md\",\n\torientation = \"horizontal\",\n\tinactiveKeys,\n\tonToggle,\n}: React.ComponentProps<\"div\"> & {\n\thideIcon?: boolean;\n\tnameKey?: string;\n\tmarker?: ChartLegendMarker;\n\tsize?: \"sm\" | \"md\";\n\torientation?: \"horizontal\" | \"vertical\";\n\tinactiveKeys?: Iterable<string>;\n\tonToggle?: (key: string) => void;\n} & RechartsPrimitive.DefaultLegendContentProps) {\n\tconst { config } = useChart();\n\n\tif (!payload?.length) {\n\t\treturn null;\n\t}\n\n\tconst inactiveSet = inactiveKeys ? new Set(inactiveKeys) : undefined;\n\tconst interactive = Boolean(onToggle);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex\",\n\t\t\t\torientation === \"vertical\"\n\t\t\t\t\t? \"flex-col items-start gap-0.5\"\n\t\t\t\t\t: \"flex-row flex-wrap items-center justify-center gap-x-1 gap-y-0.5\",\n\t\t\t\tverticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{payload\n\t\t\t\t.filter((item) => item.type !== \"none\")\n\t\t\t\t.map((item, index) => {\n\t\t\t\t\tconst key = `${nameKey ?? item.dataKey ?? \"value\"}`;\n\t\t\t\t\tconst itemKey = `${item.dataKey ?? item.value ?? index}`;\n\t\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\t\t\t\tconst inactive =\n\t\t\t\t\t\t(inactiveSet?.has(key) ?? false) || Boolean(item.inactive);\n\t\t\t\t\tconst markerColor = inactive\n\t\t\t\t\t\t? \"var(--color-fg-caption-placeholder)\"\n\t\t\t\t\t\t: (item.color ?? SERIES_COLOR_PLACEHOLDER);\n\n\t\t\t\t\tconst content = (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{itemConfig?.icon && !hideIcon ? (\n\t\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\tchartLegendMarkerSizeVariants({ marker, size }),\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ backgroundColor: markerColor }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{itemConfig?.label ?? item.value}\n\t\t\t\t\t\t</>\n\t\t\t\t\t);\n\n\t\t\t\t\tif (interactive) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tkey={itemKey}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-pressed={!inactive}\n\t\t\t\t\t\t\t\tonClick={() => onToggle?.(key)}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\tchartLegendItemVariants({ size, interactive, inactive }),\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={itemKey}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tchartLegendItemVariants({ size, interactive, inactive }),\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t</div>\n\t);\n}\n\n/** The size-scaled layout numbers a cartesian chart needs to build axis props. */\ntype CartesianAxisLayout = {\n\ttickMargin: number;\n\ttickFontSize: number;\n\tyAxisWidth: number;\n};\n\n/**\n * Shared `<XAxis>`/`<YAxis>` props — the giddaa cartesian-axis defaults (no tick\n * or axis lines, a size-scaled tick font, and a reserved value-axis width) that\n * every bar and line chart would otherwise repeat per axis. Spread the result\n * onto the recharts axis, then add the chart-specific props (`dataKey`,\n * `domain`, `ticks`, a `width`/`type` override, …):\n *\n * const chart = useBarChartLayout();\n * <XAxis dataKey=\"month\" {...chart.xAxis} />\n * <YAxis domain={[0, 120]} {...chart.yAxis} />\n */\nfunction cartesianAxisProps(layout: CartesianAxisLayout) {\n\tconst tick = { fontSize: layout.tickFontSize };\n\treturn {\n\t\txAxis: {\n\t\t\ttickLine: false,\n\t\t\taxisLine: false,\n\t\t\ttickMargin: layout.tickMargin,\n\t\t\ttick,\n\t\t},\n\t\tyAxis: {\n\t\t\ttickLine: false,\n\t\t\taxisLine: false,\n\t\t\twidth: layout.yAxisWidth,\n\t\t\ttick,\n\t\t},\n\t} as const;\n}\n\nfunction getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: unknown,\n\tkey: string,\n) {\n\tif (typeof payload !== \"object\" || payload === null) {\n\t\treturn undefined;\n\t}\n\n\tconst payloadPayload =\n\t\t\"payload\" in payload &&\n\t\ttypeof payload.payload === \"object\" &&\n\t\tpayload.payload !== null\n\t\t\t? payload.payload\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (\n\t\tkey in payload &&\n\t\ttypeof payload[key as keyof typeof payload] === \"string\"\n\t) {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadPayload &&\n\t\tkey in payloadPayload &&\n\t\ttypeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadPayload[\n\t\t\tkey as keyof typeof payloadPayload\n\t\t] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key];\n}\n\nexport {\n\tcartesianAxisProps,\n\tChartCard,\n\tChartContainer,\n\tChartDescription,\n\tChartHeader,\n\tChartLegend,\n\tChartLegendContent,\n\tChartStyle,\n\tChartTitle,\n\tChartTooltip,\n\tChartTooltipContent,\n};\nexport type { CartesianAxisLayout };\n","\"use client\";\n\nimport { createContext, type ReactNode, useContext } from \"react\";\n\ntype ComponentSize = \"sm\" | \"md\" | \"lg\";\n\nconst SizeContext = createContext<ComponentSize | undefined>(undefined);\n\nfunction SizeProvider({\n\tchildren,\n\tsize,\n}: {\n\tchildren: ReactNode;\n\tsize?: ComponentSize | null;\n}) {\n\tif (!size) {\n\t\treturn <>{children}</>;\n\t}\n\n\treturn <SizeContext.Provider value={size}>{children}</SizeContext.Provider>;\n}\n\nfunction useComponentSize(\n\tsize?: ComponentSize | null,\n\tfallback: ComponentSize = \"md\",\n) {\n\tconst inheritedSize = useContext(SizeContext);\n\treturn size ?? inheritedSize ?? fallback;\n}\n\nexport { SizeProvider, useComponentSize, type ComponentSize };\n"],"mappings":"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","names":["cva","Fragment","jsx","config","jsx","jsxs","cva"]}