@giddaa-housing/ui 0.1.0 → 1.0.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 (334) 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.js +5 -35
  10. package/dist/accordion.js.map +1 -1
  11. package/dist/activity-timeline.d.ts +33 -0
  12. package/dist/activity-timeline.js +212 -0
  13. package/dist/activity-timeline.js.map +1 -0
  14. package/dist/alert.js +5 -35
  15. package/dist/alert.js.map +1 -1
  16. package/dist/auth-layout.d.ts +23 -0
  17. package/dist/auth-layout.js +304 -0
  18. package/dist/auth-layout.js.map +1 -0
  19. package/dist/avatar.js +10 -142
  20. package/dist/avatar.js.map +1 -1
  21. package/dist/badge.d.ts +3 -2
  22. package/dist/badge.js +6 -114
  23. package/dist/badge.js.map +1 -1
  24. package/dist/bar-chart.d.ts +101 -77
  25. package/dist/bar-chart.js +142 -220
  26. package/dist/bar-chart.js.map +1 -1
  27. package/dist/breadcrumb.js +5 -35
  28. package/dist/breadcrumb.js.map +1 -1
  29. package/dist/bullet-chart.js +15 -48
  30. package/dist/bullet-chart.js.map +1 -1
  31. package/dist/button-group.js +14 -90
  32. package/dist/button-group.js.map +1 -1
  33. package/dist/button.d.ts +5 -5
  34. package/dist/button.js +7 -140
  35. package/dist/button.js.map +1 -1
  36. package/dist/calendar.js +12 -287
  37. package/dist/calendar.js.map +1 -1
  38. package/dist/card.js +5 -35
  39. package/dist/card.js.map +1 -1
  40. package/dist/carousel.js +12 -386
  41. package/dist/carousel.js.map +1 -1
  42. package/dist/chart.js +16 -480
  43. package/dist/chart.js.map +1 -1
  44. package/dist/checkbox.d.ts +1 -1
  45. package/dist/checkbox.js +13 -48
  46. package/dist/checkbox.js.map +1 -1
  47. package/dist/chunk-322YCNVL.js +278 -0
  48. package/dist/chunk-322YCNVL.js.map +1 -0
  49. package/dist/chunk-3ACQVT7A.js +25 -0
  50. package/dist/chunk-3ACQVT7A.js.map +1 -0
  51. package/dist/chunk-3T65TLJX.js +334 -0
  52. package/dist/chunk-3T65TLJX.js.map +1 -0
  53. package/dist/chunk-6ZSGQHH2.js +192 -0
  54. package/dist/chunk-6ZSGQHH2.js.map +1 -0
  55. package/dist/chunk-7TBMLFGW.js +41 -0
  56. package/dist/chunk-7TBMLFGW.js.map +1 -0
  57. package/dist/chunk-B4H6RNDH.js +135 -0
  58. package/dist/chunk-B4H6RNDH.js.map +1 -0
  59. package/dist/chunk-BUXCGZ6X.js +219 -0
  60. package/dist/chunk-BUXCGZ6X.js.map +1 -0
  61. package/dist/chunk-CHII2QHH.js +58 -0
  62. package/dist/chunk-CHII2QHH.js.map +1 -0
  63. package/dist/chunk-DMNOXRRW.js +147 -0
  64. package/dist/chunk-DMNOXRRW.js.map +1 -0
  65. package/dist/chunk-EFSOSSIC.js +130 -0
  66. package/dist/chunk-EFSOSSIC.js.map +1 -0
  67. package/dist/chunk-FZDSVMKY.js +363 -0
  68. package/dist/chunk-FZDSVMKY.js.map +1 -0
  69. package/dist/chunk-GJOFIJS3.js +246 -0
  70. package/dist/chunk-GJOFIJS3.js.map +1 -0
  71. package/dist/chunk-HL3ZSYES.js +23 -0
  72. package/dist/chunk-HL3ZSYES.js.map +1 -0
  73. package/dist/chunk-JVLUBAPB.js +129 -0
  74. package/dist/chunk-JVLUBAPB.js.map +1 -0
  75. package/dist/chunk-KDPYSOYZ.js +64 -0
  76. package/dist/chunk-KDPYSOYZ.js.map +1 -0
  77. package/dist/chunk-KSMDANKI.js +43 -0
  78. package/dist/chunk-KSMDANKI.js.map +1 -0
  79. package/dist/chunk-MEKCCOP5.js +46 -0
  80. package/dist/chunk-MEKCCOP5.js.map +1 -0
  81. package/dist/chunk-NOFXVRWL.js +451 -0
  82. package/dist/chunk-NOFXVRWL.js.map +1 -0
  83. package/dist/chunk-PC5MHNVA.js +171 -0
  84. package/dist/chunk-PC5MHNVA.js.map +1 -0
  85. package/dist/chunk-QKAQZ2GU.js +122 -0
  86. package/dist/chunk-QKAQZ2GU.js.map +1 -0
  87. package/dist/chunk-QZHSHSVV.js +26 -0
  88. package/dist/chunk-QZHSHSVV.js.map +1 -0
  89. package/dist/chunk-RBMK26XD.js +19 -0
  90. package/dist/chunk-RBMK26XD.js.map +1 -0
  91. package/dist/chunk-SFNJGF6M.js +262 -0
  92. package/dist/chunk-SFNJGF6M.js.map +1 -0
  93. package/dist/chunk-UJJNLGTM.js +112 -0
  94. package/dist/chunk-UJJNLGTM.js.map +1 -0
  95. package/dist/chunk-VGR4ZWJ3.js +418 -0
  96. package/dist/chunk-VGR4ZWJ3.js.map +1 -0
  97. package/dist/chunk-XG47P6D4.js +99 -0
  98. package/dist/chunk-XG47P6D4.js.map +1 -0
  99. package/dist/chunk-XZZAHNVM.js +21 -0
  100. package/dist/chunk-XZZAHNVM.js.map +1 -0
  101. package/dist/chunk-Y4TTYVNE.js +36 -0
  102. package/dist/chunk-Y4TTYVNE.js.map +1 -0
  103. package/dist/chunk-YDWIHW6Q.js +69 -0
  104. package/dist/chunk-YDWIHW6Q.js.map +1 -0
  105. package/dist/collapsible.js +6 -35
  106. package/dist/collapsible.js.map +1 -1
  107. package/dist/combobox.js +26 -694
  108. package/dist/combobox.js.map +1 -1
  109. package/dist/cta.d.ts +66 -0
  110. package/dist/cta.js +358 -0
  111. package/dist/cta.js.map +1 -0
  112. package/dist/currency-selector.d.ts +42 -0
  113. package/dist/currency-selector.js +192 -0
  114. package/dist/currency-selector.js.map +1 -0
  115. package/dist/date-picker.d.ts +18 -10
  116. package/dist/date-picker.js +105 -430
  117. package/dist/date-picker.js.map +1 -1
  118. package/dist/details-card.d.ts +19 -0
  119. package/dist/details-card.js +267 -0
  120. package/dist/details-card.js.map +1 -0
  121. package/dist/dialog.js +36 -146
  122. package/dist/dialog.js.map +1 -1
  123. package/dist/dropdown-menu.d.ts +1 -1
  124. package/dist/dropdown-menu.js +20 -358
  125. package/dist/dropdown-menu.js.map +1 -1
  126. package/dist/dropzone.js +13 -40
  127. package/dist/dropzone.js.map +1 -1
  128. package/dist/editorial-card.d.ts +29 -0
  129. package/dist/editorial-card.js +311 -0
  130. package/dist/editorial-card.js.map +1 -0
  131. package/dist/empty-state.js +5 -35
  132. package/dist/empty-state.js.map +1 -1
  133. package/dist/field.js +30 -135
  134. package/dist/field.js.map +1 -1
  135. package/dist/footer.d.ts +47 -0
  136. package/dist/footer.js +430 -0
  137. package/dist/footer.js.map +1 -0
  138. package/dist/funnel-chart.js +42 -415
  139. package/dist/funnel-chart.js.map +1 -1
  140. package/dist/gallery-indicator.d.ts +18 -0
  141. package/dist/gallery-indicator.js +12 -0
  142. package/dist/gallery-indicator.js.map +1 -0
  143. package/dist/heatmap-chart.d.ts +98 -0
  144. package/dist/heatmap-chart.js +248 -0
  145. package/dist/heatmap-chart.js.map +1 -0
  146. package/dist/infotip.d.ts +11 -0
  147. package/dist/infotip.js +66 -0
  148. package/dist/infotip.js.map +1 -0
  149. package/dist/input-group.d.ts +2 -1
  150. package/dist/input-group.js +15 -371
  151. package/dist/input-group.js.map +1 -1
  152. package/dist/input-size-context.js +5 -19
  153. package/dist/input-size-context.js.map +1 -1
  154. package/dist/input.js +6 -78
  155. package/dist/input.js.map +1 -1
  156. package/dist/item.js +5 -35
  157. package/dist/item.js.map +1 -1
  158. package/dist/kpi-card.js +12 -52
  159. package/dist/kpi-card.js.map +1 -1
  160. package/dist/label.js +5 -64
  161. package/dist/label.js.map +1 -1
  162. package/dist/line-chart.js +9 -166
  163. package/dist/line-chart.js.map +1 -1
  164. package/dist/logo.js +4 -141
  165. package/dist/logo.js.map +1 -1
  166. package/dist/map-indicator.d.ts +13 -0
  167. package/dist/map-indicator.js +109 -0
  168. package/dist/map-indicator.js.map +1 -0
  169. package/dist/match.d.ts +16 -0
  170. package/dist/match.js +113 -0
  171. package/dist/match.js.map +1 -0
  172. package/dist/media-gallery-hero.d.ts +60 -0
  173. package/dist/media-gallery-hero.js +362 -0
  174. package/dist/media-gallery-hero.js.map +1 -0
  175. package/dist/media-player.d.ts +60 -0
  176. package/dist/media-player.js +1394 -0
  177. package/dist/media-player.js.map +1 -0
  178. package/dist/number-input.js +30 -325
  179. package/dist/number-input.js.map +1 -1
  180. package/dist/page-header.js +4 -32
  181. package/dist/page-header.js.map +1 -1
  182. package/dist/pagination.d.ts +1 -0
  183. package/dist/pagination.js +27 -161
  184. package/dist/pagination.js.map +1 -1
  185. package/dist/password-input.d.ts +1 -0
  186. package/dist/password-input.js +21 -319
  187. package/dist/password-input.js.map +1 -1
  188. package/dist/phone-input.d.ts +2 -1
  189. package/dist/phone-input.js +148 -359
  190. package/dist/phone-input.js.map +1 -1
  191. package/dist/photo-gallery.d.ts +1 -1
  192. package/dist/photo-gallery.js +97 -393
  193. package/dist/photo-gallery.js.map +1 -1
  194. package/dist/pie-chart.js +17 -52
  195. package/dist/pie-chart.js.map +1 -1
  196. package/dist/popover.js +13 -158
  197. package/dist/popover.js.map +1 -1
  198. package/dist/price-tag.d.ts +35 -0
  199. package/dist/price-tag.js +178 -0
  200. package/dist/price-tag.js.map +1 -0
  201. package/dist/progress.d.ts +5 -2
  202. package/dist/progress.js +14 -303
  203. package/dist/progress.js.map +1 -1
  204. package/dist/property-listing-card.d.ts +32 -0
  205. package/dist/property-listing-card.js +235 -0
  206. package/dist/property-listing-card.js.map +1 -0
  207. package/dist/radar-chart.d.ts +110 -0
  208. package/dist/radar-chart.js +147 -0
  209. package/dist/radar-chart.js.map +1 -0
  210. package/dist/radio-group.js +15 -50
  211. package/dist/radio-group.js.map +1 -1
  212. package/dist/review-block.d.ts +20 -0
  213. package/dist/review-block.js +10 -0
  214. package/dist/review-block.js.map +1 -0
  215. package/dist/rich-text-editor.js +172 -433
  216. package/dist/rich-text-editor.js.map +1 -1
  217. package/dist/scatter-chart.d.ts +142 -0
  218. package/dist/scatter-chart.js +252 -0
  219. package/dist/scatter-chart.js.map +1 -0
  220. package/dist/search-input.d.ts +1 -0
  221. package/dist/search-input.js +22 -320
  222. package/dist/search-input.js.map +1 -1
  223. package/dist/select.js +15 -292
  224. package/dist/select.js.map +1 -1
  225. package/dist/separator.js +5 -68
  226. package/dist/separator.js.map +1 -1
  227. package/dist/sheet.js +14 -271
  228. package/dist/sheet.js.map +1 -1
  229. package/dist/sidebar.d.ts +1 -1
  230. package/dist/sidebar.js +89 -494
  231. package/dist/sidebar.js.map +1 -1
  232. package/dist/size-context.js +5 -17
  233. package/dist/size-context.js.map +1 -1
  234. package/dist/skeleton.js +4 -44
  235. package/dist/skeleton.js.map +1 -1
  236. package/dist/slider.d.ts +28 -0
  237. package/dist/slider.js +152 -0
  238. package/dist/slider.js.map +1 -0
  239. package/dist/sparkline.js +33 -341
  240. package/dist/sparkline.js.map +1 -1
  241. package/dist/stepper.js +5 -35
  242. package/dist/stepper.js.map +1 -1
  243. package/dist/styles.css +9593 -2
  244. package/dist/switch.js +13 -48
  245. package/dist/switch.js.map +1 -1
  246. package/dist/tab-list.js +35 -306
  247. package/dist/tab-list.js.map +1 -1
  248. package/dist/table.js +5 -32
  249. package/dist/table.js.map +1 -1
  250. package/dist/tabs.js +10 -150
  251. package/dist/tabs.js.map +1 -1
  252. package/dist/tag.d.ts +7 -6
  253. package/dist/tag.js +101 -97
  254. package/dist/tag.js.map +1 -1
  255. package/dist/testimonial-block.d.ts +34 -0
  256. package/dist/testimonial-block.js +377 -0
  257. package/dist/testimonial-block.js.map +1 -0
  258. package/dist/textarea.js +6 -73
  259. package/dist/textarea.js.map +1 -1
  260. package/dist/time-picker.js +119 -279
  261. package/dist/time-picker.js.map +1 -1
  262. package/dist/toast.js +27 -132
  263. package/dist/toast.js.map +1 -1
  264. package/dist/tooltip.d.ts +5 -5
  265. package/dist/tooltip.js +7 -90
  266. package/dist/tooltip.js.map +1 -1
  267. package/dist/tree-map.js +41 -414
  268. package/dist/tree-map.js.map +1 -1
  269. package/dist/waterfall-chart.d.ts +129 -0
  270. package/dist/waterfall-chart.js +577 -0
  271. package/dist/waterfall-chart.js.map +1 -0
  272. package/package.json +98 -28
  273. package/dist/base.css +0 -32
  274. package/dist/files/red-hat-display-latin-300-italic.woff +0 -0
  275. package/dist/files/red-hat-display-latin-300-italic.woff2 +0 -0
  276. package/dist/files/red-hat-display-latin-300-normal.woff +0 -0
  277. package/dist/files/red-hat-display-latin-300-normal.woff2 +0 -0
  278. package/dist/files/red-hat-display-latin-400-italic.woff +0 -0
  279. package/dist/files/red-hat-display-latin-400-italic.woff2 +0 -0
  280. package/dist/files/red-hat-display-latin-400-normal.woff +0 -0
  281. package/dist/files/red-hat-display-latin-400-normal.woff2 +0 -0
  282. package/dist/files/red-hat-display-latin-500-italic.woff +0 -0
  283. package/dist/files/red-hat-display-latin-500-italic.woff2 +0 -0
  284. package/dist/files/red-hat-display-latin-500-normal.woff +0 -0
  285. package/dist/files/red-hat-display-latin-500-normal.woff2 +0 -0
  286. package/dist/files/red-hat-display-latin-600-italic.woff +0 -0
  287. package/dist/files/red-hat-display-latin-600-italic.woff2 +0 -0
  288. package/dist/files/red-hat-display-latin-600-normal.woff +0 -0
  289. package/dist/files/red-hat-display-latin-600-normal.woff2 +0 -0
  290. package/dist/files/red-hat-display-latin-700-italic.woff +0 -0
  291. package/dist/files/red-hat-display-latin-700-italic.woff2 +0 -0
  292. package/dist/files/red-hat-display-latin-700-normal.woff +0 -0
  293. package/dist/files/red-hat-display-latin-700-normal.woff2 +0 -0
  294. package/dist/files/red-hat-display-latin-800-italic.woff +0 -0
  295. package/dist/files/red-hat-display-latin-800-italic.woff2 +0 -0
  296. package/dist/files/red-hat-display-latin-800-normal.woff +0 -0
  297. package/dist/files/red-hat-display-latin-800-normal.woff2 +0 -0
  298. package/dist/files/red-hat-display-latin-900-italic.woff +0 -0
  299. package/dist/files/red-hat-display-latin-900-italic.woff2 +0 -0
  300. package/dist/files/red-hat-display-latin-900-normal.woff +0 -0
  301. package/dist/files/red-hat-display-latin-900-normal.woff2 +0 -0
  302. package/dist/files/red-hat-display-latin-ext-300-italic.woff +0 -0
  303. package/dist/files/red-hat-display-latin-ext-300-italic.woff2 +0 -0
  304. package/dist/files/red-hat-display-latin-ext-300-normal.woff +0 -0
  305. package/dist/files/red-hat-display-latin-ext-300-normal.woff2 +0 -0
  306. package/dist/files/red-hat-display-latin-ext-400-italic.woff +0 -0
  307. package/dist/files/red-hat-display-latin-ext-400-italic.woff2 +0 -0
  308. package/dist/files/red-hat-display-latin-ext-400-normal.woff +0 -0
  309. package/dist/files/red-hat-display-latin-ext-400-normal.woff2 +0 -0
  310. package/dist/files/red-hat-display-latin-ext-500-italic.woff +0 -0
  311. package/dist/files/red-hat-display-latin-ext-500-italic.woff2 +0 -0
  312. package/dist/files/red-hat-display-latin-ext-500-normal.woff +0 -0
  313. package/dist/files/red-hat-display-latin-ext-500-normal.woff2 +0 -0
  314. package/dist/files/red-hat-display-latin-ext-600-italic.woff +0 -0
  315. package/dist/files/red-hat-display-latin-ext-600-italic.woff2 +0 -0
  316. package/dist/files/red-hat-display-latin-ext-600-normal.woff +0 -0
  317. package/dist/files/red-hat-display-latin-ext-600-normal.woff2 +0 -0
  318. package/dist/files/red-hat-display-latin-ext-700-italic.woff +0 -0
  319. package/dist/files/red-hat-display-latin-ext-700-italic.woff2 +0 -0
  320. package/dist/files/red-hat-display-latin-ext-700-normal.woff +0 -0
  321. package/dist/files/red-hat-display-latin-ext-700-normal.woff2 +0 -0
  322. package/dist/files/red-hat-display-latin-ext-800-italic.woff +0 -0
  323. package/dist/files/red-hat-display-latin-ext-800-italic.woff2 +0 -0
  324. package/dist/files/red-hat-display-latin-ext-800-normal.woff +0 -0
  325. package/dist/files/red-hat-display-latin-ext-800-normal.woff2 +0 -0
  326. package/dist/files/red-hat-display-latin-ext-900-italic.woff +0 -0
  327. package/dist/files/red-hat-display-latin-ext-900-italic.woff2 +0 -0
  328. package/dist/files/red-hat-display-latin-ext-900-normal.woff +0 -0
  329. package/dist/files/red-hat-display-latin-ext-900-normal.woff2 +0 -0
  330. package/dist/index.d.ts +0 -87
  331. package/dist/index.js +0 -10448
  332. package/dist/index.js.map +0 -1
  333. package/dist/red-hat-display.css +0 -2
  334. package/dist/theme/giddaa.css +0 -2
@@ -0,0 +1,577 @@
1
+ "use client";
2
+ import {
3
+ ChartCard,
4
+ ChartContainer,
5
+ ChartDescription,
6
+ ChartHeader,
7
+ ChartTitle,
8
+ ChartTooltip,
9
+ ChartTooltipContent
10
+ } from "./chunk-NOFXVRWL.js";
11
+ import {
12
+ SizeProvider,
13
+ useComponentSize
14
+ } from "./chunk-HL3ZSYES.js";
15
+ import {
16
+ cn
17
+ } from "./chunk-Y4TTYVNE.js";
18
+
19
+ // src/waterfall-chart.tsx
20
+ import { cva } from "class-variance-authority";
21
+ import {
22
+ Bar,
23
+ LabelList,
24
+ BarChart as RechartsBarChart,
25
+ ReferenceLine,
26
+ XAxis,
27
+ YAxis
28
+ } from "recharts";
29
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
30
+ var WATERFALL_CHART_COLORS = {
31
+ total: "var(--color-status-info)",
32
+ increase: "var(--color-status-success)",
33
+ decrease: "var(--color-status-danger)",
34
+ connector: "var(--color-line-strong)",
35
+ baseline: "var(--color-line)"
36
+ };
37
+ var WATERFALL_CHART_LEGEND_ITEMS = [
38
+ { label: "Increase", color: WATERFALL_CHART_COLORS.increase },
39
+ { label: "Decrease", color: WATERFALL_CHART_COLORS.decrease },
40
+ { label: "Total", color: WATERFALL_CHART_COLORS.total }
41
+ ];
42
+ var WATERFALL_CHART_CONFIG = {
43
+ increase: {
44
+ label: "Increase",
45
+ color: WATERFALL_CHART_COLORS.increase
46
+ },
47
+ decrease: {
48
+ label: "Decrease",
49
+ color: WATERFALL_CHART_COLORS.decrease
50
+ },
51
+ total: {
52
+ label: "Total",
53
+ color: WATERFALL_CHART_COLORS.total
54
+ }
55
+ };
56
+ var WATERFALL_CHART_LAYOUT = {
57
+ sm: {
58
+ height: 150,
59
+ horizontalHeight: 170,
60
+ margin: { top: 18, right: 8, bottom: 0, left: 0 },
61
+ horizontalMargin: { top: 6, right: 36, bottom: 0, left: 0 },
62
+ barSize: 18,
63
+ barRadius: 3,
64
+ connectorWidth: 1.25,
65
+ valueGap: 4,
66
+ tickFontSize: 10,
67
+ yAxisWidth: 56,
68
+ xAxisHeight: 20
69
+ },
70
+ md: {
71
+ height: 190,
72
+ horizontalHeight: 220,
73
+ margin: { top: 22, right: 10, bottom: 0, left: 0 },
74
+ horizontalMargin: { top: 8, right: 44, bottom: 0, left: 0 },
75
+ barSize: 24,
76
+ barRadius: 4,
77
+ connectorWidth: 1.5,
78
+ valueGap: 5,
79
+ tickFontSize: 11,
80
+ yAxisWidth: 72,
81
+ xAxisHeight: 24
82
+ },
83
+ lg: {
84
+ height: 250,
85
+ horizontalHeight: 280,
86
+ margin: { top: 28, right: 12, bottom: 0, left: 0 },
87
+ horizontalMargin: { top: 10, right: 56, bottom: 0, left: 0 },
88
+ barSize: 32,
89
+ barRadius: 5,
90
+ connectorWidth: 1.5,
91
+ valueGap: 6,
92
+ tickFontSize: 12,
93
+ yAxisWidth: 88,
94
+ xAxisHeight: 28
95
+ }
96
+ };
97
+ var waterfallLegendVariants = cva("flex min-w-0", {
98
+ variants: {
99
+ placement: {
100
+ right: "flex-col items-start",
101
+ bottom: "flex-row flex-wrap items-center"
102
+ },
103
+ size: {
104
+ sm: "text-gdt-xs",
105
+ md: "text-gdt-xs",
106
+ lg: "text-gdt-sm"
107
+ }
108
+ },
109
+ compoundVariants: [
110
+ { placement: "right", size: "sm", className: "gap-2" },
111
+ { placement: "right", size: "md", className: "gap-2.5" },
112
+ { placement: "right", size: "lg", className: "gap-3" },
113
+ { placement: "bottom", className: "gap-x-4 gap-y-2" }
114
+ ],
115
+ defaultVariants: { placement: "right", size: "md" }
116
+ });
117
+ function defaultValueFormatter(value, { step }) {
118
+ if (step.type === "total") {
119
+ return value.toLocaleString("en-NG");
120
+ }
121
+ return `${value > 0 ? "+" : ""}${value.toLocaleString("en-NG")}`;
122
+ }
123
+ function resolveWaterfallData(data) {
124
+ let running = 0;
125
+ return data.map((datum, index) => {
126
+ const isEdge = index === 0 || index === data.length - 1;
127
+ const requestedType = datum.type ?? (isEdge ? "total" : "auto");
128
+ const type = requestedType === "auto" ? datum.value >= 0 ? "increase" : "decrease" : requestedType;
129
+ if (type === "total") {
130
+ running = datum.value;
131
+ return {
132
+ label: datum.label,
133
+ value: datum.value,
134
+ start: 0,
135
+ end: datum.value,
136
+ range: [0, datum.value].sort((a, b) => a - b),
137
+ type,
138
+ fill: datum.fill ?? WATERFALL_CHART_COLORS.total
139
+ };
140
+ }
141
+ const start = running;
142
+ const end = running + datum.value;
143
+ running = end;
144
+ return {
145
+ label: datum.label,
146
+ value: datum.value,
147
+ start,
148
+ end,
149
+ range: [start, end].sort((a, b) => a - b),
150
+ type,
151
+ fill: datum.fill ?? (type === "increase" ? WATERFALL_CHART_COLORS.increase : WATERFALL_CHART_COLORS.decrease)
152
+ };
153
+ });
154
+ }
155
+ function getWaterfallDomain(steps, domain) {
156
+ if (domain) return domain;
157
+ const values = steps.flatMap((step) => [step.start, step.end, 0]);
158
+ const min = Math.min(...values);
159
+ const max = Math.max(...values);
160
+ const span = Math.max(max - min, 1);
161
+ const pad = span * 0.08;
162
+ return [Math.min(0, min - pad), Math.max(0, max + pad)];
163
+ }
164
+ function getPayloadStep(payload) {
165
+ if (typeof payload !== "object" || payload === null) return void 0;
166
+ if (!("payload" in payload)) return void 0;
167
+ const row = payload.payload;
168
+ if (typeof row !== "object" || row === null) return void 0;
169
+ if (!("step" in row)) return void 0;
170
+ return row.step;
171
+ }
172
+ function findDatumByLabel(data, label) {
173
+ const stringLabel = String(label);
174
+ return data.find((datum) => datum.label === stringLabel) ?? {
175
+ label: stringLabel,
176
+ value: 0
177
+ };
178
+ }
179
+ function formatTooltipValue(valueFormatter, data) {
180
+ return (_value, _name, item, index) => {
181
+ const step = getPayloadStep(item);
182
+ if (!step) return "";
183
+ const datumIndex = Math.max(index, 0);
184
+ return valueFormatter(step.value, {
185
+ datum: data[datumIndex] ?? {
186
+ label: step.label,
187
+ value: step.value,
188
+ type: step.type
189
+ },
190
+ step,
191
+ index: datumIndex
192
+ });
193
+ };
194
+ }
195
+ function WaterfallChartLegend({
196
+ className,
197
+ size,
198
+ placement = "right",
199
+ items = WATERFALL_CHART_LEGEND_ITEMS,
200
+ ...props
201
+ }) {
202
+ const resolvedSize = useComponentSize(size);
203
+ const markerClassName = resolvedSize === "sm" ? "size-2" : resolvedSize === "lg" ? "size-3" : "size-2.5";
204
+ return /* @__PURE__ */ jsx(
205
+ "div",
206
+ {
207
+ className: cn(
208
+ waterfallLegendVariants({ placement, size: resolvedSize }),
209
+ className
210
+ ),
211
+ ...props,
212
+ children: items.map((item) => /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2", children: [
213
+ /* @__PURE__ */ jsx(
214
+ "span",
215
+ {
216
+ "aria-hidden": "true",
217
+ className: cn("shrink-0 rounded-[2px]", markerClassName),
218
+ style: { backgroundColor: item.color }
219
+ }
220
+ ),
221
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-fg-secondary", children: item.label })
222
+ ] }, item.label))
223
+ }
224
+ );
225
+ }
226
+ function WaterfallBarShape(props) {
227
+ const x = Number(props.x ?? 0);
228
+ const y = Number(props.y ?? 0);
229
+ const width = Number(props.width ?? 0);
230
+ const height = Number(props.height ?? 0);
231
+ const payload = props.payload;
232
+ const radius = Number(props.radius ?? 0);
233
+ const rectX = width < 0 ? x + width : x;
234
+ const rectY = height < 0 ? y + height : y;
235
+ const rectWidth = Math.abs(width);
236
+ const rectHeight = Math.abs(height);
237
+ if (rectWidth <= 0 || rectHeight <= 0) return null;
238
+ return /* @__PURE__ */ jsx(
239
+ "rect",
240
+ {
241
+ x: rectX,
242
+ y: rectY,
243
+ width: rectWidth,
244
+ height: rectHeight,
245
+ rx: radius,
246
+ fill: payload?.step?.fill ?? payload?.fill ?? WATERFALL_CHART_COLORS.total
247
+ }
248
+ );
249
+ }
250
+ function WaterfallValueLabel({
251
+ x,
252
+ y,
253
+ width,
254
+ height,
255
+ value,
256
+ payload,
257
+ orientation = "vertical",
258
+ layout,
259
+ valueFormatter = defaultValueFormatter,
260
+ data,
261
+ index
262
+ }) {
263
+ const step = payload?.step ?? payload;
264
+ if (!step || x == null || y == null || width == null || height == null) {
265
+ return null;
266
+ }
267
+ const resolvedIndex = index ?? data.findIndex((datum) => datum.label === step.label);
268
+ const context = {
269
+ datum: data[resolvedIndex] ?? {
270
+ label: step.label,
271
+ value: step.value,
272
+ type: step.type
273
+ },
274
+ step,
275
+ index: Math.max(resolvedIndex, 0)
276
+ };
277
+ const fallbackLabel = Array.isArray(value) ? value.join(", ") : value == null ? "" : String(value);
278
+ const label = valueFormatter(step.value, context) ?? fallbackLabel;
279
+ const numX = Number(x);
280
+ const numY = Number(y);
281
+ const numWidth = Number(width);
282
+ const numHeight = Number(height);
283
+ const rectX = numWidth < 0 ? numX + numWidth : numX;
284
+ const rectY = numHeight < 0 ? numY + numHeight : numY;
285
+ const rectWidth = Math.abs(numWidth);
286
+ const rectHeight = Math.abs(numHeight);
287
+ if (orientation === "horizontal") {
288
+ return /* @__PURE__ */ jsx(
289
+ "text",
290
+ {
291
+ x: rectX + rectWidth + layout.valueGap,
292
+ y: rectY + rectHeight / 2,
293
+ dominantBaseline: "central",
294
+ className: "fill-fg-primary text-gdt-xs font-semibold tabular-nums",
295
+ children: label
296
+ }
297
+ );
298
+ }
299
+ return /* @__PURE__ */ jsx(
300
+ "text",
301
+ {
302
+ x: rectX + rectWidth / 2,
303
+ y: Math.max(10, rectY - layout.valueGap),
304
+ textAnchor: "middle",
305
+ className: "fill-fg-primary text-gdt-xs font-semibold tabular-nums",
306
+ children: label
307
+ }
308
+ );
309
+ }
310
+ function WaterfallChartPlot({
311
+ data,
312
+ size,
313
+ orientation = "vertical",
314
+ legend = false,
315
+ showValues = true,
316
+ showTooltip = false,
317
+ valueType = "number",
318
+ valueFormatter = defaultValueFormatter,
319
+ categoryFormatter = (label) => label,
320
+ domain,
321
+ ariaLabel,
322
+ className,
323
+ ...props
324
+ }) {
325
+ const resolvedSize = useComponentSize(size);
326
+ const layout = WATERFALL_CHART_LAYOUT[resolvedSize];
327
+ const steps = resolveWaterfallData(data);
328
+ if (!steps.length) return null;
329
+ const isHorizontal = orientation === "horizontal";
330
+ const resolvedDomain = getWaterfallDomain(steps, domain);
331
+ const chartHeight = isHorizontal ? layout.horizontalHeight : layout.height;
332
+ const chartMargin = isHorizontal ? layout.horizontalMargin : layout.margin;
333
+ const chartData = steps.map((step) => ({
334
+ ...step,
335
+ range: step.range,
336
+ step
337
+ }));
338
+ const summary = ariaLabel ?? `Waterfall chart from ${steps[0]?.label ?? "start"} to ${steps.at(-1)?.label ?? "end"}`;
339
+ return /* @__PURE__ */ jsx(
340
+ "div",
341
+ {
342
+ className: cn("w-full min-w-0", className),
343
+ "data-slot": "waterfall-chart-plot",
344
+ role: "img",
345
+ "aria-label": summary,
346
+ ...props,
347
+ children: /* @__PURE__ */ jsxs(
348
+ "div",
349
+ {
350
+ className: cn(
351
+ "flex min-w-0 gap-5",
352
+ legend === "bottom" ? "flex-col" : "items-center justify-between max-sm:flex-col"
353
+ ),
354
+ children: [
355
+ /* @__PURE__ */ jsx(
356
+ ChartContainer,
357
+ {
358
+ config: WATERFALL_CHART_CONFIG,
359
+ className: "aspect-auto w-full min-w-0 flex-1",
360
+ style: { height: chartHeight },
361
+ initialDimension: { width: 420, height: chartHeight },
362
+ children: /* @__PURE__ */ jsxs(
363
+ RechartsBarChart,
364
+ {
365
+ accessibilityLayer: true,
366
+ data: chartData,
367
+ layout: isHorizontal ? "vertical" : "horizontal",
368
+ margin: chartMargin,
369
+ children: [
370
+ isHorizontal ? /* @__PURE__ */ jsxs(Fragment, { children: [
371
+ /* @__PURE__ */ jsx(
372
+ XAxis,
373
+ {
374
+ type: "number",
375
+ domain: resolvedDomain,
376
+ axisLine: false,
377
+ tickLine: false,
378
+ tick: false
379
+ }
380
+ ),
381
+ /* @__PURE__ */ jsx(
382
+ YAxis,
383
+ {
384
+ type: "category",
385
+ dataKey: "label",
386
+ width: layout.yAxisWidth,
387
+ axisLine: false,
388
+ tickLine: false,
389
+ tickMargin: 8,
390
+ tick: { fontSize: layout.tickFontSize },
391
+ tickFormatter: (label) => categoryFormatter(
392
+ String(label),
393
+ findDatumByLabel(data, label)
394
+ )
395
+ }
396
+ ),
397
+ /* @__PURE__ */ jsx(
398
+ ReferenceLine,
399
+ {
400
+ x: 0,
401
+ stroke: WATERFALL_CHART_COLORS.baseline,
402
+ strokeWidth: layout.connectorWidth
403
+ }
404
+ ),
405
+ steps.slice(0, -1).map((step, index) => /* @__PURE__ */ jsx(
406
+ ReferenceLine,
407
+ {
408
+ segment: [
409
+ { x: step.end, y: steps[index].label },
410
+ { x: step.end, y: steps[index + 1].label }
411
+ ],
412
+ stroke: WATERFALL_CHART_COLORS.connector,
413
+ strokeWidth: layout.connectorWidth
414
+ },
415
+ `${step.label}-connector`
416
+ ))
417
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
418
+ /* @__PURE__ */ jsx(
419
+ XAxis,
420
+ {
421
+ dataKey: "label",
422
+ height: layout.xAxisHeight,
423
+ axisLine: false,
424
+ tickLine: false,
425
+ tickMargin: 8,
426
+ tick: { fontSize: layout.tickFontSize },
427
+ tickFormatter: (label) => categoryFormatter(
428
+ String(label),
429
+ findDatumByLabel(data, label)
430
+ )
431
+ }
432
+ ),
433
+ /* @__PURE__ */ jsx(
434
+ YAxis,
435
+ {
436
+ type: "number",
437
+ domain: resolvedDomain,
438
+ width: layout.yAxisWidth,
439
+ axisLine: false,
440
+ tickLine: false,
441
+ tick: false
442
+ }
443
+ ),
444
+ /* @__PURE__ */ jsx(
445
+ ReferenceLine,
446
+ {
447
+ y: 0,
448
+ stroke: WATERFALL_CHART_COLORS.baseline,
449
+ strokeWidth: layout.connectorWidth
450
+ }
451
+ ),
452
+ steps.slice(0, -1).map((step, index) => /* @__PURE__ */ jsx(
453
+ ReferenceLine,
454
+ {
455
+ segment: [
456
+ { x: steps[index].label, y: step.end },
457
+ { x: steps[index + 1].label, y: step.end }
458
+ ],
459
+ stroke: WATERFALL_CHART_COLORS.connector,
460
+ strokeWidth: layout.connectorWidth
461
+ },
462
+ `${step.label}-connector`
463
+ ))
464
+ ] }),
465
+ showTooltip ? /* @__PURE__ */ jsx(
466
+ ChartTooltip,
467
+ {
468
+ cursor: false,
469
+ content: /* @__PURE__ */ jsx(
470
+ ChartTooltipContent,
471
+ {
472
+ nameKey: "type",
473
+ valueType,
474
+ formatter: formatTooltipValue(valueFormatter, data)
475
+ }
476
+ )
477
+ }
478
+ ) : null,
479
+ /* @__PURE__ */ jsx(
480
+ Bar,
481
+ {
482
+ dataKey: "range",
483
+ name: "Change",
484
+ barSize: layout.barSize,
485
+ isAnimationActive: false,
486
+ shape: /* @__PURE__ */ jsx(WaterfallBarShape, { radius: layout.barRadius }),
487
+ children: showValues ? /* @__PURE__ */ jsx(
488
+ LabelList,
489
+ {
490
+ dataKey: "range",
491
+ content: /* @__PURE__ */ jsx(
492
+ WaterfallValueLabel,
493
+ {
494
+ orientation,
495
+ layout,
496
+ valueFormatter,
497
+ data
498
+ }
499
+ )
500
+ }
501
+ ) : null
502
+ }
503
+ )
504
+ ]
505
+ }
506
+ )
507
+ }
508
+ ),
509
+ legend ? /* @__PURE__ */ jsx(
510
+ WaterfallChartLegend,
511
+ {
512
+ size: resolvedSize,
513
+ placement: legend,
514
+ className: legend === "bottom" ? "justify-center" : "shrink-0"
515
+ }
516
+ ) : null
517
+ ]
518
+ }
519
+ )
520
+ }
521
+ );
522
+ }
523
+ function WaterfallChart({
524
+ data,
525
+ size,
526
+ orientation = "vertical",
527
+ title,
528
+ description,
529
+ legend = "right",
530
+ showValues = true,
531
+ showTooltip = false,
532
+ valueType = "number",
533
+ valueFormatter,
534
+ categoryFormatter,
535
+ domain,
536
+ ariaLabel,
537
+ className,
538
+ ...props
539
+ }) {
540
+ const resolvedSize = useComponentSize(size);
541
+ const showHeader = title != null || description != null;
542
+ return /* @__PURE__ */ jsx(ChartCard, { size: resolvedSize, className, ...props, children: /* @__PURE__ */ jsxs(SizeProvider, { size: resolvedSize, children: [
543
+ showHeader ? /* @__PURE__ */ jsxs(ChartHeader, { children: [
544
+ title != null ? /* @__PURE__ */ jsx(ChartTitle, { children: title }) : null,
545
+ description != null ? /* @__PURE__ */ jsx(ChartDescription, { children: description }) : null
546
+ ] }) : null,
547
+ /* @__PURE__ */ jsx(
548
+ WaterfallChartPlot,
549
+ {
550
+ data,
551
+ size: resolvedSize,
552
+ orientation,
553
+ legend,
554
+ showValues,
555
+ showTooltip,
556
+ valueType,
557
+ valueFormatter,
558
+ categoryFormatter,
559
+ domain,
560
+ ariaLabel
561
+ }
562
+ )
563
+ ] }) });
564
+ }
565
+ var WaterfallChartCard = WaterfallChart;
566
+ export {
567
+ WATERFALL_CHART_COLORS,
568
+ WATERFALL_CHART_CONFIG,
569
+ WATERFALL_CHART_LAYOUT,
570
+ WATERFALL_CHART_LEGEND_ITEMS,
571
+ WaterfallChart,
572
+ WaterfallChartCard,
573
+ WaterfallChartLegend,
574
+ WaterfallChartPlot,
575
+ resolveWaterfallData
576
+ };
577
+ //# sourceMappingURL=waterfall-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/waterfall-chart.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport {\n\tBar,\n\tLabelList,\n\tBarChart as RechartsBarChart,\n\tReferenceLine,\n\tXAxis,\n\tYAxis,\n} from \"recharts\";\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 { cn } from \"./lib/cn\";\nimport {\n\ttype ComponentSize,\n\tSizeProvider,\n\tuseComponentSize,\n} from \"./size-context\";\n\ntype WaterfallChartOrientation = \"vertical\" | \"horizontal\";\ntype WaterfallChartLegendPlacement = \"right\" | \"bottom\";\ntype WaterfallChartStepType = \"auto\" | \"increase\" | \"decrease\" | \"total\";\n\ntype WaterfallChartDatum = {\n\t/** Step label shown on the category axis, legend/tooltip context, and value label context. */\n\tlabel: string;\n\t/** Absolute subtotal for `type=\"total\"`; delta amount for increase/decrease steps. */\n\tvalue: number;\n\t/** Defaults to `total` for the first/last datum and `auto` for middle data. */\n\ttype?: WaterfallChartStepType;\n\t/** Optional fill override for this step. Defaults to semantic status tokens. */\n\tfill?: string;\n};\n\ntype ResolvedWaterfallStep = {\n\tlabel: string;\n\tvalue: number;\n\tstart: number;\n\tend: number;\n\trange: [number, number];\n\ttype: Exclude<WaterfallChartStepType, \"auto\">;\n\tfill: string;\n};\n\ntype WaterfallChartLayout = {\n\theight: number;\n\thorizontalHeight: number;\n\tmargin: { top: number; right: number; bottom: number; left: number };\n\thorizontalMargin: {\n\t\ttop: number;\n\t\tright: number;\n\t\tbottom: number;\n\t\tleft: number;\n\t};\n\tbarSize: number;\n\tbarRadius: number;\n\tconnectorWidth: number;\n\tvalueGap: number;\n\ttickFontSize: number;\n\tyAxisWidth: number;\n\txAxisHeight: number;\n};\n\ntype WaterfallChartFormatContext = {\n\tdatum: WaterfallChartDatum;\n\tstep: ResolvedWaterfallStep;\n\tindex: number;\n};\n\ntype WaterfallChartPlotProps = Omit<React.ComponentProps<\"div\">, \"children\"> & {\n\tdata: WaterfallChartDatum[];\n\tsize?: ComponentSize;\n\torientation?: WaterfallChartOrientation;\n\tlegend?: WaterfallChartLegendPlacement | false;\n\tshowValues?: boolean;\n\tshowTooltip?: boolean;\n\tvalueType?: ChartValueType;\n\tvalueFormatter?: (\n\t\tvalue: number,\n\t\tcontext: WaterfallChartFormatContext,\n\t) => React.ReactNode;\n\tcategoryFormatter?: (label: string, datum: WaterfallChartDatum) => string;\n\tdomain?: [number, number] | [number, \"auto\"];\n\tariaLabel?: string;\n};\n\ntype WaterfallChartLegendProps = Omit<\n\tReact.ComponentProps<\"div\">,\n\t\"children\"\n> & {\n\tsize?: ComponentSize;\n\tplacement?: WaterfallChartLegendPlacement;\n\titems?: WaterfallChartLegendItem[];\n};\n\ntype WaterfallChartLegendItem = {\n\tlabel: string;\n\tcolor: string;\n};\n\ntype WaterfallChartProps = Omit<\n\tReact.ComponentProps<typeof ChartCard>,\n\t\"children\" | \"size\"\n> &\n\tWaterfallChartPlotProps & {\n\t\ttitle?: React.ReactNode;\n\t\tdescription?: React.ReactNode;\n\t};\n\nconst WATERFALL_CHART_COLORS = {\n\ttotal: \"var(--color-status-info)\",\n\tincrease: \"var(--color-status-success)\",\n\tdecrease: \"var(--color-status-danger)\",\n\tconnector: \"var(--color-line-strong)\",\n\tbaseline: \"var(--color-line)\",\n} as const;\n\nconst WATERFALL_CHART_LEGEND_ITEMS: WaterfallChartLegendItem[] = [\n\t{ label: \"Increase\", color: WATERFALL_CHART_COLORS.increase },\n\t{ label: \"Decrease\", color: WATERFALL_CHART_COLORS.decrease },\n\t{ label: \"Total\", color: WATERFALL_CHART_COLORS.total },\n];\n\nconst WATERFALL_CHART_CONFIG = {\n\tincrease: {\n\t\tlabel: \"Increase\",\n\t\tcolor: WATERFALL_CHART_COLORS.increase,\n\t},\n\tdecrease: {\n\t\tlabel: \"Decrease\",\n\t\tcolor: WATERFALL_CHART_COLORS.decrease,\n\t},\n\ttotal: {\n\t\tlabel: \"Total\",\n\t\tcolor: WATERFALL_CHART_COLORS.total,\n\t},\n} satisfies ChartConfig;\n\nconst WATERFALL_CHART_LAYOUT: Record<ComponentSize, WaterfallChartLayout> = {\n\tsm: {\n\t\theight: 150,\n\t\thorizontalHeight: 170,\n\t\tmargin: { top: 18, right: 8, bottom: 0, left: 0 },\n\t\thorizontalMargin: { top: 6, right: 36, bottom: 0, left: 0 },\n\t\tbarSize: 18,\n\t\tbarRadius: 3,\n\t\tconnectorWidth: 1.25,\n\t\tvalueGap: 4,\n\t\ttickFontSize: 10,\n\t\tyAxisWidth: 56,\n\t\txAxisHeight: 20,\n\t},\n\tmd: {\n\t\theight: 190,\n\t\thorizontalHeight: 220,\n\t\tmargin: { top: 22, right: 10, bottom: 0, left: 0 },\n\t\thorizontalMargin: { top: 8, right: 44, bottom: 0, left: 0 },\n\t\tbarSize: 24,\n\t\tbarRadius: 4,\n\t\tconnectorWidth: 1.5,\n\t\tvalueGap: 5,\n\t\ttickFontSize: 11,\n\t\tyAxisWidth: 72,\n\t\txAxisHeight: 24,\n\t},\n\tlg: {\n\t\theight: 250,\n\t\thorizontalHeight: 280,\n\t\tmargin: { top: 28, right: 12, bottom: 0, left: 0 },\n\t\thorizontalMargin: { top: 10, right: 56, bottom: 0, left: 0 },\n\t\tbarSize: 32,\n\t\tbarRadius: 5,\n\t\tconnectorWidth: 1.5,\n\t\tvalueGap: 6,\n\t\ttickFontSize: 12,\n\t\tyAxisWidth: 88,\n\t\txAxisHeight: 28,\n\t},\n};\n\nconst waterfallLegendVariants = cva(\"flex min-w-0\", {\n\tvariants: {\n\t\tplacement: {\n\t\t\tright: \"flex-col items-start\",\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-xs\",\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-2.5\" },\n\t\t{ placement: \"right\", size: \"lg\", className: \"gap-3\" },\n\t\t{ placement: \"bottom\", className: \"gap-x-4 gap-y-2\" },\n\t],\n\tdefaultVariants: { placement: \"right\", size: \"md\" },\n});\n\nfunction defaultValueFormatter(\n\tvalue: number,\n\t{ step }: WaterfallChartFormatContext,\n) {\n\tif (step.type === \"total\") {\n\t\treturn value.toLocaleString(\"en-NG\");\n\t}\n\n\treturn `${value > 0 ? \"+\" : \"\"}${value.toLocaleString(\"en-NG\")}`;\n}\n\nfunction resolveWaterfallData(data: WaterfallChartDatum[]) {\n\tlet running = 0;\n\n\treturn data.map((datum, index) => {\n\t\tconst isEdge = index === 0 || index === data.length - 1;\n\t\tconst requestedType = datum.type ?? (isEdge ? \"total\" : \"auto\");\n\t\tconst type =\n\t\t\trequestedType === \"auto\"\n\t\t\t\t? datum.value >= 0\n\t\t\t\t\t? \"increase\"\n\t\t\t\t\t: \"decrease\"\n\t\t\t\t: requestedType;\n\n\t\tif (type === \"total\") {\n\t\t\trunning = datum.value;\n\t\t\treturn {\n\t\t\t\tlabel: datum.label,\n\t\t\t\tvalue: datum.value,\n\t\t\t\tstart: 0,\n\t\t\t\tend: datum.value,\n\t\t\t\trange: [0, datum.value].sort((a, b) => a - b) as [number, number],\n\t\t\t\ttype,\n\t\t\t\tfill: datum.fill ?? WATERFALL_CHART_COLORS.total,\n\t\t\t} satisfies ResolvedWaterfallStep;\n\t\t}\n\n\t\tconst start = running;\n\t\tconst end = running + datum.value;\n\t\trunning = end;\n\n\t\treturn {\n\t\t\tlabel: datum.label,\n\t\t\tvalue: datum.value,\n\t\t\tstart,\n\t\t\tend,\n\t\t\trange: [start, end].sort((a, b) => a - b) as [number, number],\n\t\t\ttype,\n\t\t\tfill:\n\t\t\t\tdatum.fill ??\n\t\t\t\t(type === \"increase\"\n\t\t\t\t\t? WATERFALL_CHART_COLORS.increase\n\t\t\t\t\t: WATERFALL_CHART_COLORS.decrease),\n\t\t} satisfies ResolvedWaterfallStep;\n\t});\n}\n\nfunction getWaterfallDomain(\n\tsteps: ResolvedWaterfallStep[],\n\tdomain?: [number, number] | [number, \"auto\"],\n) {\n\tif (domain) return domain;\n\n\tconst values = steps.flatMap((step) => [step.start, step.end, 0]);\n\tconst min = Math.min(...values);\n\tconst max = Math.max(...values);\n\tconst span = Math.max(max - min, 1);\n\tconst pad = span * 0.08;\n\n\treturn [Math.min(0, min - pad), Math.max(0, max + pad)] as [number, number];\n}\n\nfunction getPayloadStep(payload: unknown): ResolvedWaterfallStep | undefined {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\tif (!(\"payload\" in payload)) return undefined;\n\tconst row = payload.payload;\n\tif (typeof row !== \"object\" || row === null) return undefined;\n\tif (!(\"step\" in row)) return undefined;\n\treturn row.step as ResolvedWaterfallStep;\n}\n\nfunction findDatumByLabel(data: WaterfallChartDatum[], label: unknown) {\n\tconst stringLabel = String(label);\n\treturn (\n\t\tdata.find((datum) => datum.label === stringLabel) ?? {\n\t\t\tlabel: stringLabel,\n\t\t\tvalue: 0,\n\t\t}\n\t);\n}\n\nfunction formatTooltipValue(\n\tvalueFormatter: NonNullable<WaterfallChartPlotProps[\"valueFormatter\"]>,\n\tdata: WaterfallChartDatum[],\n) {\n\treturn (\n\t\t_value: unknown,\n\t\t_name: unknown,\n\t\titem: unknown,\n\t\tindex: number,\n\t): React.ReactNode => {\n\t\tconst step = getPayloadStep(item);\n\t\tif (!step) return \"\";\n\t\tconst datumIndex = Math.max(index, 0);\n\t\treturn valueFormatter(step.value, {\n\t\t\tdatum: data[datumIndex] ?? {\n\t\t\t\tlabel: step.label,\n\t\t\t\tvalue: step.value,\n\t\t\t\ttype: step.type,\n\t\t\t},\n\t\t\tstep,\n\t\t\tindex: datumIndex,\n\t\t});\n\t};\n}\n\nfunction WaterfallChartLegend({\n\tclassName,\n\tsize,\n\tplacement = \"right\",\n\titems = WATERFALL_CHART_LEGEND_ITEMS,\n\t...props\n}: WaterfallChartLegendProps) {\n\tconst resolvedSize = useComponentSize(size);\n\tconst markerClassName =\n\t\tresolvedSize === \"sm\"\n\t\t\t? \"size-2\"\n\t\t\t: resolvedSize === \"lg\"\n\t\t\t\t? \"size-3\"\n\t\t\t\t: \"size-2.5\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\twaterfallLegendVariants({ placement, size: resolvedSize }),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{items.map((item) => (\n\t\t\t\t<div key={item.label} className=\"inline-flex items-center gap-2\">\n\t\t\t\t\t<span\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName={cn(\"shrink-0 rounded-[2px]\", markerClassName)}\n\t\t\t\t\t\tstyle={{ backgroundColor: item.color }}\n\t\t\t\t\t/>\n\t\t\t\t\t<span className=\"font-medium text-fg-secondary\">{item.label}</span>\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\nfunction WaterfallBarShape(props: Record<string, unknown>) {\n\tconst x = Number(props.x ?? 0);\n\tconst y = Number(props.y ?? 0);\n\tconst width = Number(props.width ?? 0);\n\tconst height = Number(props.height ?? 0);\n\tconst payload = props.payload as\n\t\t| (ResolvedWaterfallStep & { step?: ResolvedWaterfallStep })\n\t\t| undefined;\n\tconst radius = Number(props.radius ?? 0);\n\n\tconst rectX = width < 0 ? x + width : x;\n\tconst rectY = height < 0 ? y + height : y;\n\tconst rectWidth = Math.abs(width);\n\tconst rectHeight = Math.abs(height);\n\n\tif (rectWidth <= 0 || rectHeight <= 0) return null;\n\n\treturn (\n\t\t<rect\n\t\t\tx={rectX}\n\t\t\ty={rectY}\n\t\t\twidth={rectWidth}\n\t\t\theight={rectHeight}\n\t\t\trx={radius}\n\t\t\tfill={\n\t\t\t\tpayload?.step?.fill ?? payload?.fill ?? WATERFALL_CHART_COLORS.total\n\t\t\t}\n\t\t/>\n\t);\n}\n\nfunction WaterfallValueLabel({\n\tx,\n\ty,\n\twidth,\n\theight,\n\tvalue,\n\tpayload,\n\torientation = \"vertical\",\n\tlayout,\n\tvalueFormatter = defaultValueFormatter,\n\tdata,\n\tindex,\n}: {\n\tx?: string | number;\n\ty?: string | number;\n\twidth?: string | number;\n\theight?: string | number;\n\tvalue?: unknown;\n\tpayload?: ResolvedWaterfallStep & { step?: ResolvedWaterfallStep };\n\torientation?: WaterfallChartOrientation;\n\tlayout: WaterfallChartLayout;\n\tvalueFormatter?: NonNullable<WaterfallChartPlotProps[\"valueFormatter\"]>;\n\tdata: WaterfallChartDatum[];\n\tindex?: number;\n}) {\n\tconst step = payload?.step ?? payload;\n\n\tif (!step || x == null || y == null || width == null || height == null) {\n\t\treturn null;\n\t}\n\n\tconst resolvedIndex =\n\t\tindex ?? data.findIndex((datum) => datum.label === step.label);\n\tconst context = {\n\t\tdatum: data[resolvedIndex] ?? {\n\t\t\tlabel: step.label,\n\t\t\tvalue: step.value,\n\t\t\ttype: step.type,\n\t\t},\n\t\tstep,\n\t\tindex: Math.max(resolvedIndex, 0),\n\t};\n\n\tconst fallbackLabel = Array.isArray(value)\n\t\t? value.join(\", \")\n\t\t: value == null\n\t\t\t? \"\"\n\t\t\t: String(value);\n\tconst label = valueFormatter(step.value, context) ?? fallbackLabel;\n\n\tconst numX = Number(x);\n\tconst numY = Number(y);\n\tconst numWidth = Number(width);\n\tconst numHeight = Number(height);\n\tconst rectX = numWidth < 0 ? numX + numWidth : numX;\n\tconst rectY = numHeight < 0 ? numY + numHeight : numY;\n\tconst rectWidth = Math.abs(numWidth);\n\tconst rectHeight = Math.abs(numHeight);\n\n\tif (orientation === \"horizontal\") {\n\t\treturn (\n\t\t\t<text\n\t\t\t\tx={rectX + rectWidth + layout.valueGap}\n\t\t\t\ty={rectY + rectHeight / 2}\n\t\t\t\tdominantBaseline=\"central\"\n\t\t\t\tclassName=\"fill-fg-primary text-gdt-xs font-semibold tabular-nums\"\n\t\t\t>\n\t\t\t\t{label}\n\t\t\t</text>\n\t\t);\n\t}\n\n\treturn (\n\t\t<text\n\t\t\tx={rectX + rectWidth / 2}\n\t\t\ty={Math.max(10, rectY - layout.valueGap)}\n\t\t\ttextAnchor=\"middle\"\n\t\t\tclassName=\"fill-fg-primary text-gdt-xs font-semibold tabular-nums\"\n\t\t>\n\t\t\t{label}\n\t\t</text>\n\t);\n}\n\nfunction WaterfallChartPlot({\n\tdata,\n\tsize,\n\torientation = \"vertical\",\n\tlegend = false,\n\tshowValues = true,\n\tshowTooltip = false,\n\tvalueType = \"number\",\n\tvalueFormatter = defaultValueFormatter,\n\tcategoryFormatter = (label) => label,\n\tdomain,\n\tariaLabel,\n\tclassName,\n\t...props\n}: WaterfallChartPlotProps) {\n\tconst resolvedSize = useComponentSize(size);\n\tconst layout = WATERFALL_CHART_LAYOUT[resolvedSize];\n\tconst steps = resolveWaterfallData(data);\n\n\tif (!steps.length) return null;\n\n\tconst isHorizontal = orientation === \"horizontal\";\n\tconst resolvedDomain = getWaterfallDomain(steps, domain);\n\tconst chartHeight = isHorizontal ? layout.horizontalHeight : layout.height;\n\tconst chartMargin = isHorizontal ? layout.horizontalMargin : layout.margin;\n\tconst chartData = steps.map((step) => ({\n\t\t...step,\n\t\trange: step.range,\n\t\tstep,\n\t}));\n\tconst summary =\n\t\tariaLabel ??\n\t\t`Waterfall chart from ${steps[0]?.label ?? \"start\"} to ${\n\t\t\tsteps.at(-1)?.label ?? \"end\"\n\t\t}`;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"w-full min-w-0\", className)}\n\t\t\tdata-slot=\"waterfall-chart-plot\"\n\t\t\trole=\"img\"\n\t\t\taria-label={summary}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex min-w-0 gap-5\",\n\t\t\t\t\tlegend === \"bottom\"\n\t\t\t\t\t\t? \"flex-col\"\n\t\t\t\t\t\t: \"items-center justify-between max-sm:flex-col\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<ChartContainer\n\t\t\t\t\tconfig={WATERFALL_CHART_CONFIG}\n\t\t\t\t\tclassName=\"aspect-auto w-full min-w-0 flex-1\"\n\t\t\t\t\tstyle={{ height: chartHeight }}\n\t\t\t\t\tinitialDimension={{ width: 420, height: chartHeight }}\n\t\t\t\t>\n\t\t\t\t\t<RechartsBarChart\n\t\t\t\t\t\taccessibilityLayer\n\t\t\t\t\t\tdata={chartData}\n\t\t\t\t\t\tlayout={isHorizontal ? \"vertical\" : \"horizontal\"}\n\t\t\t\t\t\tmargin={chartMargin}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isHorizontal ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<XAxis\n\t\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\t\tdomain={resolvedDomain}\n\t\t\t\t\t\t\t\t\taxisLine={false}\n\t\t\t\t\t\t\t\t\ttickLine={false}\n\t\t\t\t\t\t\t\t\ttick={false}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<YAxis\n\t\t\t\t\t\t\t\t\ttype=\"category\"\n\t\t\t\t\t\t\t\t\tdataKey=\"label\"\n\t\t\t\t\t\t\t\t\twidth={layout.yAxisWidth}\n\t\t\t\t\t\t\t\t\taxisLine={false}\n\t\t\t\t\t\t\t\t\ttickLine={false}\n\t\t\t\t\t\t\t\t\ttickMargin={8}\n\t\t\t\t\t\t\t\t\ttick={{ fontSize: layout.tickFontSize }}\n\t\t\t\t\t\t\t\t\ttickFormatter={(label) =>\n\t\t\t\t\t\t\t\t\t\tcategoryFormatter(\n\t\t\t\t\t\t\t\t\t\t\tString(label),\n\t\t\t\t\t\t\t\t\t\t\tfindDatumByLabel(data, label),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<ReferenceLine\n\t\t\t\t\t\t\t\t\tx={0}\n\t\t\t\t\t\t\t\t\tstroke={WATERFALL_CHART_COLORS.baseline}\n\t\t\t\t\t\t\t\t\tstrokeWidth={layout.connectorWidth}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{steps.slice(0, -1).map((step, index) => (\n\t\t\t\t\t\t\t\t\t<ReferenceLine\n\t\t\t\t\t\t\t\t\t\tkey={`${step.label}-connector`}\n\t\t\t\t\t\t\t\t\t\tsegment={[\n\t\t\t\t\t\t\t\t\t\t\t{ x: step.end, y: steps[index].label },\n\t\t\t\t\t\t\t\t\t\t\t{ x: step.end, y: steps[index + 1].label },\n\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\tstroke={WATERFALL_CHART_COLORS.connector}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={layout.connectorWidth}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<XAxis\n\t\t\t\t\t\t\t\t\tdataKey=\"label\"\n\t\t\t\t\t\t\t\t\theight={layout.xAxisHeight}\n\t\t\t\t\t\t\t\t\taxisLine={false}\n\t\t\t\t\t\t\t\t\ttickLine={false}\n\t\t\t\t\t\t\t\t\ttickMargin={8}\n\t\t\t\t\t\t\t\t\ttick={{ fontSize: layout.tickFontSize }}\n\t\t\t\t\t\t\t\t\ttickFormatter={(label) =>\n\t\t\t\t\t\t\t\t\t\tcategoryFormatter(\n\t\t\t\t\t\t\t\t\t\t\tString(label),\n\t\t\t\t\t\t\t\t\t\t\tfindDatumByLabel(data, label),\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<YAxis\n\t\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\t\tdomain={resolvedDomain}\n\t\t\t\t\t\t\t\t\twidth={layout.yAxisWidth}\n\t\t\t\t\t\t\t\t\taxisLine={false}\n\t\t\t\t\t\t\t\t\ttickLine={false}\n\t\t\t\t\t\t\t\t\ttick={false}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<ReferenceLine\n\t\t\t\t\t\t\t\t\ty={0}\n\t\t\t\t\t\t\t\t\tstroke={WATERFALL_CHART_COLORS.baseline}\n\t\t\t\t\t\t\t\t\tstrokeWidth={layout.connectorWidth}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{steps.slice(0, -1).map((step, index) => (\n\t\t\t\t\t\t\t\t\t<ReferenceLine\n\t\t\t\t\t\t\t\t\t\tkey={`${step.label}-connector`}\n\t\t\t\t\t\t\t\t\t\tsegment={[\n\t\t\t\t\t\t\t\t\t\t\t{ x: steps[index].label, y: step.end },\n\t\t\t\t\t\t\t\t\t\t\t{ x: steps[index + 1].label, y: step.end },\n\t\t\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\t\t\tstroke={WATERFALL_CHART_COLORS.connector}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={layout.connectorWidth}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showTooltip ? (\n\t\t\t\t\t\t\t<ChartTooltip\n\t\t\t\t\t\t\t\tcursor={false}\n\t\t\t\t\t\t\t\tcontent={\n\t\t\t\t\t\t\t\t\t<ChartTooltipContent\n\t\t\t\t\t\t\t\t\t\tnameKey=\"type\"\n\t\t\t\t\t\t\t\t\t\tvalueType={valueType}\n\t\t\t\t\t\t\t\t\t\tformatter={formatTooltipValue(valueFormatter, data)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<Bar\n\t\t\t\t\t\t\tdataKey=\"range\"\n\t\t\t\t\t\t\tname=\"Change\"\n\t\t\t\t\t\t\tbarSize={layout.barSize}\n\t\t\t\t\t\t\tisAnimationActive={false}\n\t\t\t\t\t\t\tshape={<WaterfallBarShape radius={layout.barRadius} />}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{showValues ? (\n\t\t\t\t\t\t\t\t<LabelList\n\t\t\t\t\t\t\t\t\tdataKey=\"range\"\n\t\t\t\t\t\t\t\t\tcontent={\n\t\t\t\t\t\t\t\t\t\t<WaterfallValueLabel\n\t\t\t\t\t\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\t\t\t\t\t\tvalueFormatter={valueFormatter}\n\t\t\t\t\t\t\t\t\t\t\tdata={data}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</Bar>\n\t\t\t\t\t</RechartsBarChart>\n\t\t\t\t</ChartContainer>\n\t\t\t\t{legend ? (\n\t\t\t\t\t<WaterfallChartLegend\n\t\t\t\t\t\tsize={resolvedSize}\n\t\t\t\t\t\tplacement={legend}\n\t\t\t\t\t\tclassName={legend === \"bottom\" ? \"justify-center\" : \"shrink-0\"}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction WaterfallChart({\n\tdata,\n\tsize,\n\torientation = \"vertical\",\n\ttitle,\n\tdescription,\n\tlegend = \"right\",\n\tshowValues = true,\n\tshowTooltip = false,\n\tvalueType = \"number\",\n\tvalueFormatter,\n\tcategoryFormatter,\n\tdomain,\n\tariaLabel,\n\tclassName,\n\t...props\n}: WaterfallChartProps) {\n\tconst resolvedSize = useComponentSize(size);\n\tconst showHeader = title != null || description != null;\n\n\treturn (\n\t\t<ChartCard size={resolvedSize} className={className} {...props}>\n\t\t\t<SizeProvider size={resolvedSize}>\n\t\t\t\t{showHeader ? (\n\t\t\t\t\t<ChartHeader>\n\t\t\t\t\t\t{title != null ? <ChartTitle>{title}</ChartTitle> : null}\n\t\t\t\t\t\t{description != null ? (\n\t\t\t\t\t\t\t<ChartDescription>{description}</ChartDescription>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</ChartHeader>\n\t\t\t\t) : null}\n\t\t\t\t<WaterfallChartPlot\n\t\t\t\t\tdata={data}\n\t\t\t\t\tsize={resolvedSize}\n\t\t\t\t\torientation={orientation}\n\t\t\t\t\tlegend={legend}\n\t\t\t\t\tshowValues={showValues}\n\t\t\t\t\tshowTooltip={showTooltip}\n\t\t\t\t\tvalueType={valueType}\n\t\t\t\t\tvalueFormatter={valueFormatter}\n\t\t\t\t\tcategoryFormatter={categoryFormatter}\n\t\t\t\t\tdomain={domain}\n\t\t\t\t\tariaLabel={ariaLabel}\n\t\t\t\t/>\n\t\t\t</SizeProvider>\n\t\t</ChartCard>\n\t);\n}\n\nconst WaterfallChartCard = WaterfallChart;\n\nexport {\n\tWATERFALL_CHART_COLORS,\n\tWATERFALL_CHART_CONFIG,\n\tWATERFALL_CHART_LAYOUT,\n\tWATERFALL_CHART_LEGEND_ITEMS,\n\tWaterfallChart,\n\tWaterfallChartCard,\n\tWaterfallChartLegend,\n\tWaterfallChartPlot,\n\tresolveWaterfallData,\n};\nexport type {\n\tResolvedWaterfallStep,\n\tWaterfallChartDatum,\n\tWaterfallChartFormatContext,\n\tWaterfallChartLayout,\n\tWaterfallChartLegendItem,\n\tWaterfallChartLegendPlacement,\n\tWaterfallChartOrientation,\n\tWaterfallChartPlotProps,\n\tWaterfallChartProps,\n\tWaterfallChartStepType,\n};\n"],"mappings":"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","names":[]}