@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.
- package/README.md +18 -6
- package/css/base.css +37 -0
- package/css/components.css +135 -0
- package/css/generated/shared.css +1 -0
- package/css/giddaa.css +402 -0
- package/css/preset.css +77 -0
- package/css/styles.css +2 -0
- package/css/theme.css +255 -0
- package/dist/accordion.js +5 -35
- package/dist/accordion.js.map +1 -1
- package/dist/activity-timeline.d.ts +33 -0
- package/dist/activity-timeline.js +212 -0
- package/dist/activity-timeline.js.map +1 -0
- package/dist/alert.js +5 -35
- package/dist/alert.js.map +1 -1
- package/dist/auth-layout.d.ts +23 -0
- package/dist/auth-layout.js +304 -0
- package/dist/auth-layout.js.map +1 -0
- package/dist/avatar.js +10 -142
- package/dist/avatar.js.map +1 -1
- package/dist/badge.d.ts +3 -2
- package/dist/badge.js +6 -114
- package/dist/badge.js.map +1 -1
- package/dist/bar-chart.d.ts +101 -77
- package/dist/bar-chart.js +142 -220
- package/dist/bar-chart.js.map +1 -1
- package/dist/breadcrumb.js +5 -35
- package/dist/breadcrumb.js.map +1 -1
- package/dist/bullet-chart.js +15 -48
- package/dist/bullet-chart.js.map +1 -1
- package/dist/button-group.js +14 -90
- package/dist/button-group.js.map +1 -1
- package/dist/button.d.ts +5 -5
- package/dist/button.js +7 -140
- package/dist/button.js.map +1 -1
- package/dist/calendar.js +12 -287
- package/dist/calendar.js.map +1 -1
- package/dist/card.js +5 -35
- package/dist/card.js.map +1 -1
- package/dist/carousel.js +12 -386
- package/dist/carousel.js.map +1 -1
- package/dist/chart.js +16 -480
- package/dist/chart.js.map +1 -1
- package/dist/checkbox.d.ts +1 -1
- package/dist/checkbox.js +13 -48
- package/dist/checkbox.js.map +1 -1
- package/dist/chunk-322YCNVL.js +278 -0
- package/dist/chunk-322YCNVL.js.map +1 -0
- package/dist/chunk-3ACQVT7A.js +25 -0
- package/dist/chunk-3ACQVT7A.js.map +1 -0
- package/dist/chunk-3T65TLJX.js +334 -0
- package/dist/chunk-3T65TLJX.js.map +1 -0
- package/dist/chunk-6ZSGQHH2.js +192 -0
- package/dist/chunk-6ZSGQHH2.js.map +1 -0
- package/dist/chunk-7TBMLFGW.js +41 -0
- package/dist/chunk-7TBMLFGW.js.map +1 -0
- package/dist/chunk-B4H6RNDH.js +135 -0
- package/dist/chunk-B4H6RNDH.js.map +1 -0
- package/dist/chunk-BUXCGZ6X.js +219 -0
- package/dist/chunk-BUXCGZ6X.js.map +1 -0
- package/dist/chunk-CHII2QHH.js +58 -0
- package/dist/chunk-CHII2QHH.js.map +1 -0
- package/dist/chunk-DMNOXRRW.js +147 -0
- package/dist/chunk-DMNOXRRW.js.map +1 -0
- package/dist/chunk-EFSOSSIC.js +130 -0
- package/dist/chunk-EFSOSSIC.js.map +1 -0
- package/dist/chunk-FZDSVMKY.js +363 -0
- package/dist/chunk-FZDSVMKY.js.map +1 -0
- package/dist/chunk-GJOFIJS3.js +246 -0
- package/dist/chunk-GJOFIJS3.js.map +1 -0
- package/dist/chunk-HL3ZSYES.js +23 -0
- package/dist/chunk-HL3ZSYES.js.map +1 -0
- package/dist/chunk-JVLUBAPB.js +129 -0
- package/dist/chunk-JVLUBAPB.js.map +1 -0
- package/dist/chunk-KDPYSOYZ.js +64 -0
- package/dist/chunk-KDPYSOYZ.js.map +1 -0
- package/dist/chunk-KSMDANKI.js +43 -0
- package/dist/chunk-KSMDANKI.js.map +1 -0
- package/dist/chunk-MEKCCOP5.js +46 -0
- package/dist/chunk-MEKCCOP5.js.map +1 -0
- package/dist/chunk-NOFXVRWL.js +451 -0
- package/dist/chunk-NOFXVRWL.js.map +1 -0
- package/dist/chunk-PC5MHNVA.js +171 -0
- package/dist/chunk-PC5MHNVA.js.map +1 -0
- package/dist/chunk-QKAQZ2GU.js +122 -0
- package/dist/chunk-QKAQZ2GU.js.map +1 -0
- package/dist/chunk-QZHSHSVV.js +26 -0
- package/dist/chunk-QZHSHSVV.js.map +1 -0
- package/dist/chunk-RBMK26XD.js +19 -0
- package/dist/chunk-RBMK26XD.js.map +1 -0
- package/dist/chunk-SFNJGF6M.js +262 -0
- package/dist/chunk-SFNJGF6M.js.map +1 -0
- package/dist/chunk-UJJNLGTM.js +112 -0
- package/dist/chunk-UJJNLGTM.js.map +1 -0
- package/dist/chunk-VGR4ZWJ3.js +418 -0
- package/dist/chunk-VGR4ZWJ3.js.map +1 -0
- package/dist/chunk-XG47P6D4.js +99 -0
- package/dist/chunk-XG47P6D4.js.map +1 -0
- package/dist/chunk-XZZAHNVM.js +21 -0
- package/dist/chunk-XZZAHNVM.js.map +1 -0
- package/dist/chunk-Y4TTYVNE.js +36 -0
- package/dist/chunk-Y4TTYVNE.js.map +1 -0
- package/dist/chunk-YDWIHW6Q.js +69 -0
- package/dist/chunk-YDWIHW6Q.js.map +1 -0
- package/dist/collapsible.js +6 -35
- package/dist/collapsible.js.map +1 -1
- package/dist/combobox.js +26 -694
- package/dist/combobox.js.map +1 -1
- package/dist/cta.d.ts +66 -0
- package/dist/cta.js +358 -0
- package/dist/cta.js.map +1 -0
- package/dist/currency-selector.d.ts +42 -0
- package/dist/currency-selector.js +192 -0
- package/dist/currency-selector.js.map +1 -0
- package/dist/date-picker.d.ts +18 -10
- package/dist/date-picker.js +105 -430
- package/dist/date-picker.js.map +1 -1
- package/dist/details-card.d.ts +19 -0
- package/dist/details-card.js +267 -0
- package/dist/details-card.js.map +1 -0
- package/dist/dialog.js +36 -146
- package/dist/dialog.js.map +1 -1
- package/dist/dropdown-menu.d.ts +1 -1
- package/dist/dropdown-menu.js +20 -358
- package/dist/dropdown-menu.js.map +1 -1
- package/dist/dropzone.js +13 -40
- package/dist/dropzone.js.map +1 -1
- package/dist/editorial-card.d.ts +29 -0
- package/dist/editorial-card.js +311 -0
- package/dist/editorial-card.js.map +1 -0
- package/dist/empty-state.js +5 -35
- package/dist/empty-state.js.map +1 -1
- package/dist/field.js +30 -135
- package/dist/field.js.map +1 -1
- package/dist/footer.d.ts +47 -0
- package/dist/footer.js +430 -0
- package/dist/footer.js.map +1 -0
- package/dist/funnel-chart.js +42 -415
- package/dist/funnel-chart.js.map +1 -1
- package/dist/gallery-indicator.d.ts +18 -0
- package/dist/gallery-indicator.js +12 -0
- package/dist/gallery-indicator.js.map +1 -0
- package/dist/heatmap-chart.d.ts +98 -0
- package/dist/heatmap-chart.js +248 -0
- package/dist/heatmap-chart.js.map +1 -0
- package/dist/infotip.d.ts +11 -0
- package/dist/infotip.js +66 -0
- package/dist/infotip.js.map +1 -0
- package/dist/input-group.d.ts +2 -1
- package/dist/input-group.js +15 -371
- package/dist/input-group.js.map +1 -1
- package/dist/input-size-context.js +5 -19
- package/dist/input-size-context.js.map +1 -1
- package/dist/input.js +6 -78
- package/dist/input.js.map +1 -1
- package/dist/item.js +5 -35
- package/dist/item.js.map +1 -1
- package/dist/kpi-card.js +12 -52
- package/dist/kpi-card.js.map +1 -1
- package/dist/label.js +5 -64
- package/dist/label.js.map +1 -1
- package/dist/line-chart.js +9 -166
- package/dist/line-chart.js.map +1 -1
- package/dist/logo.js +4 -141
- package/dist/logo.js.map +1 -1
- package/dist/map-indicator.d.ts +13 -0
- package/dist/map-indicator.js +109 -0
- package/dist/map-indicator.js.map +1 -0
- package/dist/match.d.ts +16 -0
- package/dist/match.js +113 -0
- package/dist/match.js.map +1 -0
- package/dist/media-gallery-hero.d.ts +60 -0
- package/dist/media-gallery-hero.js +362 -0
- package/dist/media-gallery-hero.js.map +1 -0
- package/dist/media-player.d.ts +60 -0
- package/dist/media-player.js +1394 -0
- package/dist/media-player.js.map +1 -0
- package/dist/number-input.js +30 -325
- package/dist/number-input.js.map +1 -1
- package/dist/page-header.js +4 -32
- package/dist/page-header.js.map +1 -1
- package/dist/pagination.d.ts +1 -0
- package/dist/pagination.js +27 -161
- package/dist/pagination.js.map +1 -1
- package/dist/password-input.d.ts +1 -0
- package/dist/password-input.js +21 -319
- package/dist/password-input.js.map +1 -1
- package/dist/phone-input.d.ts +2 -1
- package/dist/phone-input.js +148 -359
- package/dist/phone-input.js.map +1 -1
- package/dist/photo-gallery.d.ts +1 -1
- package/dist/photo-gallery.js +97 -393
- package/dist/photo-gallery.js.map +1 -1
- package/dist/pie-chart.js +17 -52
- package/dist/pie-chart.js.map +1 -1
- package/dist/popover.js +13 -158
- package/dist/popover.js.map +1 -1
- package/dist/price-tag.d.ts +35 -0
- package/dist/price-tag.js +178 -0
- package/dist/price-tag.js.map +1 -0
- package/dist/progress.d.ts +5 -2
- package/dist/progress.js +14 -303
- package/dist/progress.js.map +1 -1
- package/dist/property-listing-card.d.ts +32 -0
- package/dist/property-listing-card.js +235 -0
- package/dist/property-listing-card.js.map +1 -0
- package/dist/radar-chart.d.ts +110 -0
- package/dist/radar-chart.js +147 -0
- package/dist/radar-chart.js.map +1 -0
- package/dist/radio-group.js +15 -50
- package/dist/radio-group.js.map +1 -1
- package/dist/review-block.d.ts +20 -0
- package/dist/review-block.js +10 -0
- package/dist/review-block.js.map +1 -0
- package/dist/rich-text-editor.js +172 -433
- package/dist/rich-text-editor.js.map +1 -1
- package/dist/scatter-chart.d.ts +142 -0
- package/dist/scatter-chart.js +252 -0
- package/dist/scatter-chart.js.map +1 -0
- package/dist/search-input.d.ts +1 -0
- package/dist/search-input.js +22 -320
- package/dist/search-input.js.map +1 -1
- package/dist/select.js +15 -292
- package/dist/select.js.map +1 -1
- package/dist/separator.js +5 -68
- package/dist/separator.js.map +1 -1
- package/dist/sheet.js +14 -271
- package/dist/sheet.js.map +1 -1
- package/dist/sidebar.d.ts +1 -1
- package/dist/sidebar.js +89 -494
- package/dist/sidebar.js.map +1 -1
- package/dist/size-context.js +5 -17
- package/dist/size-context.js.map +1 -1
- package/dist/skeleton.js +4 -44
- package/dist/skeleton.js.map +1 -1
- package/dist/slider.d.ts +28 -0
- package/dist/slider.js +152 -0
- package/dist/slider.js.map +1 -0
- package/dist/sparkline.js +33 -341
- package/dist/sparkline.js.map +1 -1
- package/dist/stepper.js +5 -35
- package/dist/stepper.js.map +1 -1
- package/dist/styles.css +9593 -2
- package/dist/switch.js +13 -48
- package/dist/switch.js.map +1 -1
- package/dist/tab-list.js +35 -306
- package/dist/tab-list.js.map +1 -1
- package/dist/table.js +5 -32
- package/dist/table.js.map +1 -1
- package/dist/tabs.js +10 -150
- package/dist/tabs.js.map +1 -1
- package/dist/tag.d.ts +7 -6
- package/dist/tag.js +101 -97
- package/dist/tag.js.map +1 -1
- package/dist/testimonial-block.d.ts +34 -0
- package/dist/testimonial-block.js +377 -0
- package/dist/testimonial-block.js.map +1 -0
- package/dist/textarea.js +6 -73
- package/dist/textarea.js.map +1 -1
- package/dist/time-picker.js +119 -279
- package/dist/time-picker.js.map +1 -1
- package/dist/toast.js +27 -132
- package/dist/toast.js.map +1 -1
- package/dist/tooltip.d.ts +5 -5
- package/dist/tooltip.js +7 -90
- package/dist/tooltip.js.map +1 -1
- package/dist/tree-map.js +41 -414
- package/dist/tree-map.js.map +1 -1
- package/dist/waterfall-chart.d.ts +129 -0
- package/dist/waterfall-chart.js +577 -0
- package/dist/waterfall-chart.js.map +1 -0
- package/package.json +98 -28
- package/dist/base.css +0 -32
- package/dist/files/red-hat-display-latin-300-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-300-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-300-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-300-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-400-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-400-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-400-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-400-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-500-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-500-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-500-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-500-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-600-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-600-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-600-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-600-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-700-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-700-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-700-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-700-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-800-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-800-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-800-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-800-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-900-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-900-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-900-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-900-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-300-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-300-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-300-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-300-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-400-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-400-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-400-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-400-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-500-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-500-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-500-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-500-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-600-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-600-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-600-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-600-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-700-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-700-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-700-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-700-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-800-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-800-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-800-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-800-normal.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-900-italic.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-900-italic.woff2 +0 -0
- package/dist/files/red-hat-display-latin-ext-900-normal.woff +0 -0
- package/dist/files/red-hat-display-latin-ext-900-normal.woff2 +0 -0
- package/dist/index.d.ts +0 -87
- package/dist/index.js +0 -10448
- package/dist/index.js.map +0 -1
- package/dist/red-hat-display.css +0 -2
- 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":[]}
|