erp-pro-ui 0.1.2 → 0.1.3
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/dist/calendar.cjs +1 -1
- package/dist/calendar.mjs +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.mjs +1 -1
- package/dist/carousel.cjs +1 -1
- package/dist/carousel.mjs +1 -1
- package/dist/catalog.cjs +6 -0
- package/dist/catalog.cjs.map +1 -1
- package/dist/catalog.d.ts +11 -1
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.mjs +6 -0
- package/dist/catalog.mjs.map +1 -1
- package/dist/charts.cjs +2 -1
- package/dist/charts.mjs +2 -2
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.mjs +1 -1
- package/dist/chip.cjs +1 -1
- package/dist/chip.mjs +1 -1
- package/dist/chroma-grid.cjs +1 -1
- package/dist/chroma-grid.mjs +1 -1
- package/dist/chunks/{calendar-xrGmvukr.cjs → calendar-Cpp_Rc7T.cjs} +58 -17
- package/dist/chunks/calendar-Cpp_Rc7T.cjs.map +1 -0
- package/dist/chunks/{calendar-BarcG6x_.mjs → calendar-DrCgT_pj.mjs} +58 -17
- package/dist/chunks/calendar-DrCgT_pj.mjs.map +1 -0
- package/dist/chunks/{card-gt-HZh0h.cjs → card-C5_tFK6Q.cjs} +1 -1
- package/dist/chunks/{card-gt-HZh0h.cjs.map → card-C5_tFK6Q.cjs.map} +1 -1
- package/dist/chunks/{card-CcIF6z2H.mjs → card-Dh8wNv8N.mjs} +1 -1
- package/dist/chunks/{card-CcIF6z2H.mjs.map → card-Dh8wNv8N.mjs.map} +1 -1
- package/dist/chunks/{carousel-DJdqBVRK.mjs → carousel-BYwqI4cA.mjs} +1 -1
- package/dist/chunks/{carousel-DJdqBVRK.mjs.map → carousel-BYwqI4cA.mjs.map} +1 -1
- package/dist/chunks/{carousel-Cq5uwqQt.cjs → carousel-C1338X8h.cjs} +1 -1
- package/dist/chunks/{carousel-Cq5uwqQt.cjs.map → carousel-C1338X8h.cjs.map} +1 -1
- package/dist/chunks/{charts-DugYWvEf.mjs → charts-BYvM4TMG.mjs} +371 -117
- package/dist/chunks/charts-BYvM4TMG.mjs.map +1 -0
- package/dist/chunks/{charts-BpElnsoR.cjs → charts-DbxyHtlX.cjs} +375 -115
- package/dist/chunks/charts-DbxyHtlX.cjs.map +1 -0
- package/dist/chunks/{checkbox-yHuSw-hV.cjs → checkbox-CxOcjoGP.cjs} +1 -1
- package/dist/chunks/{checkbox-yHuSw-hV.cjs.map → checkbox-CxOcjoGP.cjs.map} +1 -1
- package/dist/chunks/{checkbox-DvwlGwWe.mjs → checkbox-Pr49U9F1.mjs} +1 -1
- package/dist/chunks/{checkbox-DvwlGwWe.mjs.map → checkbox-Pr49U9F1.mjs.map} +1 -1
- package/dist/chunks/{chip-DcBji__g.cjs → chip-B4ol1yPk.cjs} +1 -1
- package/dist/chunks/{chip-DcBji__g.cjs.map → chip-B4ol1yPk.cjs.map} +1 -1
- package/dist/chunks/{chip-BGSUmnlO.mjs → chip-DdnBLdpl.mjs} +1 -1
- package/dist/chunks/{chip-BGSUmnlO.mjs.map → chip-DdnBLdpl.mjs.map} +1 -1
- package/dist/chunks/{chroma-grid-Cdeql_2C.mjs → chroma-grid-BAo6V5A7.mjs} +1 -1
- package/dist/chunks/{chroma-grid-Cdeql_2C.mjs.map → chroma-grid-BAo6V5A7.mjs.map} +1 -1
- package/dist/chunks/{chroma-grid-9E9j1s9I.cjs → chroma-grid-CIk0dsNS.cjs} +1 -1
- package/dist/chunks/{chroma-grid-9E9j1s9I.cjs.map → chroma-grid-CIk0dsNS.cjs.map} +1 -1
- package/dist/chunks/{color-palette-BLvDnCOD.cjs → color-palette-2TuEMkAn.cjs} +1 -1
- package/dist/chunks/{color-palette-BLvDnCOD.cjs.map → color-palette-2TuEMkAn.cjs.map} +1 -1
- package/dist/chunks/{color-palette-CXlCDiZz.mjs → color-palette-euKQMWlV.mjs} +1 -1
- package/dist/chunks/{color-palette-CXlCDiZz.mjs.map → color-palette-euKQMWlV.mjs.map} +1 -1
- package/dist/chunks/{combobox-BXu3s0dt.cjs → combobox-CwGubKTt.cjs} +2 -2
- package/dist/chunks/combobox-CwGubKTt.cjs.map +1 -0
- package/dist/chunks/{combobox-CjK-qG4k.mjs → combobox-DrFmkI0F.mjs} +2 -2
- package/dist/chunks/combobox-DrFmkI0F.mjs.map +1 -0
- package/dist/chunks/{data-table-DyEQn9Yj.mjs → data-table-Bo80m7qV.mjs} +8 -8
- package/dist/chunks/{data-table-DyEQn9Yj.mjs.map → data-table-Bo80m7qV.mjs.map} +1 -1
- package/dist/chunks/{data-table-9HELVsYR.cjs → data-table-W1sK5tkL.cjs} +8 -8
- package/dist/chunks/{data-table-9HELVsYR.cjs.map → data-table-W1sK5tkL.cjs.map} +1 -1
- package/dist/chunks/{date-picker-D8gaaMlJ.mjs → date-picker-CNPORxhv.mjs} +87 -17
- package/dist/chunks/date-picker-CNPORxhv.mjs.map +1 -0
- package/dist/chunks/{date-picker-W9om1j7A.cjs → date-picker-CZo68Fkl.cjs} +87 -17
- package/dist/chunks/date-picker-CZo68Fkl.cjs.map +1 -0
- package/dist/chunks/input-BWM6G7jq.cjs +117 -0
- package/dist/chunks/input-BWM6G7jq.cjs.map +1 -0
- package/dist/chunks/input-Bt_r_B_c.mjs +105 -0
- package/dist/chunks/input-Bt_r_B_c.mjs.map +1 -0
- package/dist/chunks/{multi-select-combobox-ELSH_Xr4.mjs → multi-select-combobox-D46M-AN9.mjs} +2 -2
- package/dist/chunks/multi-select-combobox-D46M-AN9.mjs.map +1 -0
- package/dist/chunks/{multi-select-combobox-UW0X15W7.cjs → multi-select-combobox-dS6bJE_e.cjs} +2 -2
- package/dist/chunks/multi-select-combobox-dS6bJE_e.cjs.map +1 -0
- package/dist/chunks/{otp-input-B6zzOEqw.cjs → otp-input-DSW9Ca_D.cjs} +2 -2
- package/dist/chunks/otp-input-DSW9Ca_D.cjs.map +1 -0
- package/dist/chunks/{otp-input-Bg4nQG6x.mjs → otp-input-DeAi4nJ_.mjs} +2 -2
- package/dist/chunks/otp-input-DeAi4nJ_.mjs.map +1 -0
- package/dist/chunks/{progress-bar-C9FZDrju.mjs → progress-bar-B9sy7WBT.mjs} +1 -1
- package/dist/chunks/{progress-bar-C9FZDrju.mjs.map → progress-bar-B9sy7WBT.mjs.map} +1 -1
- package/dist/chunks/{progress-bar-C1OvQ-NI.cjs → progress-bar-BdvQtpm3.cjs} +1 -1
- package/dist/chunks/{progress-bar-C1OvQ-NI.cjs.map → progress-bar-BdvQtpm3.cjs.map} +1 -1
- package/dist/chunks/select-B8UQ6Uq5.mjs +170 -0
- package/dist/chunks/select-B8UQ6Uq5.mjs.map +1 -0
- package/dist/chunks/select-CCUSMvfS.cjs +176 -0
- package/dist/chunks/select-CCUSMvfS.cjs.map +1 -0
- package/dist/chunks/stepper-D6qQbZdg.cjs +642 -0
- package/dist/chunks/stepper-D6qQbZdg.cjs.map +1 -0
- package/dist/chunks/stepper-DUknuW2E.mjs +618 -0
- package/dist/chunks/stepper-DUknuW2E.mjs.map +1 -0
- package/dist/chunks/{textarea-CU5C-Zw9.mjs → textarea-Blky_fLK.mjs} +2 -2
- package/dist/chunks/{textarea-CU5C-Zw9.mjs.map → textarea-Blky_fLK.mjs.map} +1 -1
- package/dist/chunks/{textarea-CAUsyu4-.cjs → textarea-ok_NlE2p.cjs} +2 -2
- package/dist/chunks/textarea-ok_NlE2p.cjs.map +1 -0
- package/dist/color-palette.cjs +1 -1
- package/dist/color-palette.mjs +1 -1
- package/dist/colors.css +3 -0
- package/dist/combobox.cjs +1 -1
- package/dist/combobox.mjs +1 -1
- package/dist/components/data-display/charts/AreaChart.d.ts.map +1 -1
- package/dist/components/data-display/charts/BarChart.d.ts +1 -0
- package/dist/components/data-display/charts/BarChart.d.ts.map +1 -1
- package/dist/components/data-display/charts/NeonLineChart.d.ts.map +1 -1
- package/dist/components/data-display/charts/PieChart.d.ts +18 -2
- package/dist/components/data-display/charts/PieChart.d.ts.map +1 -1
- package/dist/components/data-display/charts/PositiveNegativeBarChart.d.ts +21 -0
- package/dist/components/data-display/charts/PositiveNegativeBarChart.d.ts.map +1 -0
- package/dist/components/data-display/charts/StackedBarChart.d.ts.map +1 -1
- package/dist/components/data-display/charts/ThinBreakdownBar.d.ts +3 -0
- package/dist/components/data-display/charts/ThinBreakdownBar.d.ts.map +1 -1
- package/dist/components/data-display/charts/chartStyles.d.ts +24 -0
- package/dist/components/data-display/charts/chartStyles.d.ts.map +1 -0
- package/dist/components/data-display/charts/index.d.ts +2 -0
- package/dist/components/data-display/charts/index.d.ts.map +1 -1
- package/dist/components/forms/calendar/Calendar.d.ts.map +1 -1
- package/dist/components/forms/date-picker/DatePicker.d.ts.map +1 -1
- package/dist/components/forms/input/Input.d.ts.map +1 -1
- package/dist/components/forms/input/types.d.ts +5 -0
- package/dist/components/forms/input/types.d.ts.map +1 -1
- package/dist/components/forms/select/Select.d.ts.map +1 -1
- package/dist/components/forms/select/types.d.ts +7 -1
- package/dist/components/forms/select/types.d.ts.map +1 -1
- package/dist/components/navigation/stepper/Stepper1.d.ts +4 -0
- package/dist/components/navigation/stepper/Stepper1.d.ts.map +1 -0
- package/dist/components/navigation/stepper/Stepper2.d.ts +5 -0
- package/dist/components/navigation/stepper/Stepper2.d.ts.map +1 -0
- package/dist/components/navigation/stepper/index.d.ts +4 -1
- package/dist/components/navigation/stepper/index.d.ts.map +1 -1
- package/dist/components/navigation/stepper/types.d.ts +85 -0
- package/dist/components/navigation/stepper/types.d.ts.map +1 -1
- package/dist/data-table.cjs +1 -1
- package/dist/data-table.mjs +1 -1
- package/dist/date-picker.cjs +1 -1
- package/dist/date-picker.mjs +1 -1
- package/dist/docs.cjs +10 -0
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.d.ts.map +1 -1
- package/dist/docs.mjs +10 -0
- package/dist/docs.mjs.map +1 -1
- package/dist/foundation.css +7 -0
- package/dist/index.cjs +23 -18
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +19 -19
- package/dist/input.cjs +1 -1
- package/dist/input.mjs +1 -1
- package/dist/multi-select-combobox.cjs +1 -1
- package/dist/multi-select-combobox.mjs +1 -1
- package/dist/otp-input.cjs +1 -1
- package/dist/otp-input.mjs +1 -1
- package/dist/progress-bar.cjs +1 -1
- package/dist/progress-bar.mjs +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.mjs +1 -1
- package/dist/stepper.cjs +5 -1
- package/dist/stepper.mjs +2 -2
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.mjs +1 -1
- package/dist/tokens.css +11 -2
- package/package.json +4 -4
- package/dist/chunks/calendar-BarcG6x_.mjs.map +0 -1
- package/dist/chunks/calendar-xrGmvukr.cjs.map +0 -1
- package/dist/chunks/charts-BpElnsoR.cjs.map +0 -1
- package/dist/chunks/charts-DugYWvEf.mjs.map +0 -1
- package/dist/chunks/combobox-BXu3s0dt.cjs.map +0 -1
- package/dist/chunks/combobox-CjK-qG4k.mjs.map +0 -1
- package/dist/chunks/date-picker-D8gaaMlJ.mjs.map +0 -1
- package/dist/chunks/date-picker-W9om1j7A.cjs.map +0 -1
- package/dist/chunks/input-D9qZNqXV.cjs +0 -99
- package/dist/chunks/input-D9qZNqXV.cjs.map +0 -1
- package/dist/chunks/input-wNqevfQ4.mjs +0 -87
- package/dist/chunks/input-wNqevfQ4.mjs.map +0 -1
- package/dist/chunks/multi-select-combobox-ELSH_Xr4.mjs.map +0 -1
- package/dist/chunks/multi-select-combobox-UW0X15W7.cjs.map +0 -1
- package/dist/chunks/otp-input-B6zzOEqw.cjs.map +0 -1
- package/dist/chunks/otp-input-Bg4nQG6x.mjs.map +0 -1
- package/dist/chunks/select-D71tk6-I.mjs +0 -152
- package/dist/chunks/select-D71tk6-I.mjs.map +0 -1
- package/dist/chunks/select-WC_kPqUP.cjs +0 -158
- package/dist/chunks/select-WC_kPqUP.cjs.map +0 -1
- package/dist/chunks/stepper-D4yQsQB0.mjs +0 -261
- package/dist/chunks/stepper-D4yQsQB0.mjs.map +0 -1
- package/dist/chunks/stepper-fY-Sx72k.cjs +0 -267
- package/dist/chunks/stepper-fY-Sx72k.cjs.map +0 -1
- package/dist/chunks/textarea-CAUsyu4-.cjs.map +0 -1
|
@@ -107,6 +107,58 @@ var normalizeChartColors = (requestedColors) => {
|
|
|
107
107
|
});
|
|
108
108
|
};
|
|
109
109
|
//#endregion
|
|
110
|
+
//#region src/components/data-display/charts/chartStyles.ts
|
|
111
|
+
var chartTooltipContentStyle = {
|
|
112
|
+
background: "linear-gradient(135deg, color-mix(in srgb, var(--ds-color-bg-surface) 88%, transparent), color-mix(in srgb, var(--ds-color-bg-elevated) 74%, transparent))",
|
|
113
|
+
border: "1px solid color-mix(in srgb, var(--ds-color-border-strong) 72%, transparent)",
|
|
114
|
+
borderRadius: "12px",
|
|
115
|
+
backdropFilter: "blur(18px) saturate(180%)",
|
|
116
|
+
WebkitBackdropFilter: "blur(18px) saturate(180%)",
|
|
117
|
+
boxShadow: "0 18px 40px color-mix(in srgb, var(--ds-color-fg) 14%, transparent), inset 0 1px 0 color-mix(in srgb, var(--ds-color-bg-surface) 36%, transparent)",
|
|
118
|
+
color: "var(--ds-color-fg)",
|
|
119
|
+
padding: "0.75rem 0.875rem"
|
|
120
|
+
};
|
|
121
|
+
var chartTooltipLabelStyle = {
|
|
122
|
+
color: "var(--ds-color-fg)",
|
|
123
|
+
fontSize: "0.8125rem",
|
|
124
|
+
fontWeight: 600,
|
|
125
|
+
marginBottom: "0.375rem"
|
|
126
|
+
};
|
|
127
|
+
var chartTooltipItemStyle = {
|
|
128
|
+
color: "var(--ds-color-fg)",
|
|
129
|
+
fontSize: "0.8125rem",
|
|
130
|
+
fontWeight: 500,
|
|
131
|
+
padding: 0
|
|
132
|
+
};
|
|
133
|
+
var chartTooltipWrapperStyle = { outline: "none" };
|
|
134
|
+
var chartLegendTextStyle = {
|
|
135
|
+
fontSize: "12px",
|
|
136
|
+
color: "var(--ds-color-fg-muted)"
|
|
137
|
+
};
|
|
138
|
+
var chartBandHoverCursorStyle = {
|
|
139
|
+
fill: "color-mix(in srgb, var(--ds-color-accent) 12%, transparent)",
|
|
140
|
+
stroke: "color-mix(in srgb, var(--ds-color-accent) 34%, var(--ds-color-border-strong))",
|
|
141
|
+
strokeWidth: 1
|
|
142
|
+
};
|
|
143
|
+
var chartLineHoverCursorStyle = {
|
|
144
|
+
stroke: "color-mix(in srgb, var(--ds-color-accent) 42%, var(--ds-color-border-strong))",
|
|
145
|
+
strokeWidth: 1.25,
|
|
146
|
+
strokeDasharray: "4 4"
|
|
147
|
+
};
|
|
148
|
+
var getChartActiveDotStyle = (strokeColor) => ({
|
|
149
|
+
r: 6,
|
|
150
|
+
fill: "color-mix(in srgb, var(--ds-color-bg-surface) 90%, transparent)",
|
|
151
|
+
stroke: strokeColor,
|
|
152
|
+
strokeWidth: 2.5
|
|
153
|
+
});
|
|
154
|
+
var chartPillTooltipStyle = {
|
|
155
|
+
background: "linear-gradient(135deg, color-mix(in srgb, var(--ds-color-bg-surface) 90%, transparent), color-mix(in srgb, var(--ds-color-bg-elevated) 76%, transparent))",
|
|
156
|
+
border: "1px solid color-mix(in srgb, var(--ds-color-border-strong) 70%, transparent)",
|
|
157
|
+
boxShadow: "0 14px 32px color-mix(in srgb, var(--ds-color-fg) 14%, transparent), inset 0 1px 0 color-mix(in srgb, var(--ds-color-bg-surface) 34%, transparent)",
|
|
158
|
+
backdropFilter: "blur(16px) saturate(170%)",
|
|
159
|
+
WebkitBackdropFilter: "blur(16px) saturate(170%)"
|
|
160
|
+
};
|
|
161
|
+
//#endregion
|
|
110
162
|
//#region src/components/data-display/charts/NeonLineChart.tsx
|
|
111
163
|
var NeonLineChart = ({ data, height = 300, lineColorStop1 = getChartColorVar(2), lineColorStop2 = getChartColorVar(1), glowColor = getChartColorVar(1), className = "" }) => {
|
|
112
164
|
const [normalizedStop1, normalizedStop2] = react.default.useMemo(() => normalizeChartColors([lineColorStop1, lineColorStop2]), [lineColorStop1, lineColorStop2]);
|
|
@@ -185,14 +237,11 @@ var NeonLineChart = ({ data, height = 300, lineColorStop1 = getChartColorVar(2),
|
|
|
185
237
|
dx: -10
|
|
186
238
|
}),
|
|
187
239
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
|
|
188
|
-
contentStyle:
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
color: "var(--ds-color-fg)"
|
|
194
|
-
},
|
|
195
|
-
itemStyle: { color: "var(--ds-color-fg)" }
|
|
240
|
+
contentStyle: chartTooltipContentStyle,
|
|
241
|
+
cursor: chartLineHoverCursorStyle,
|
|
242
|
+
itemStyle: chartTooltipItemStyle,
|
|
243
|
+
labelStyle: chartTooltipLabelStyle,
|
|
244
|
+
wrapperStyle: chartTooltipWrapperStyle
|
|
196
245
|
}),
|
|
197
246
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Line, {
|
|
198
247
|
type: "monotone",
|
|
@@ -200,12 +249,7 @@ var NeonLineChart = ({ data, height = 300, lineColorStop1 = getChartColorVar(2),
|
|
|
200
249
|
stroke: "url(#neonGradient)",
|
|
201
250
|
strokeWidth: 3,
|
|
202
251
|
dot: false,
|
|
203
|
-
activeDot:
|
|
204
|
-
r: 6,
|
|
205
|
-
fill: "var(--ds-color-surface)",
|
|
206
|
-
stroke: normalizedStop2,
|
|
207
|
-
strokeWidth: 2
|
|
208
|
-
},
|
|
252
|
+
activeDot: getChartActiveDotStyle(normalizedStop2),
|
|
209
253
|
filter: "url(#neonGlow)"
|
|
210
254
|
})
|
|
211
255
|
]
|
|
@@ -265,21 +309,17 @@ var StackedBarChart = ({ data, categories, height = 300, yAxisDomain, className
|
|
|
265
309
|
domain: yAxisDomain
|
|
266
310
|
}),
|
|
267
311
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
backdropFilter: "blur(8px)",
|
|
274
|
-
color: "var(--ds-color-fg)"
|
|
275
|
-
}
|
|
312
|
+
contentStyle: chartTooltipContentStyle,
|
|
313
|
+
cursor: chartBandHoverCursorStyle,
|
|
314
|
+
itemStyle: chartTooltipItemStyle,
|
|
315
|
+
labelStyle: chartTooltipLabelStyle,
|
|
316
|
+
wrapperStyle: chartTooltipWrapperStyle
|
|
276
317
|
}),
|
|
277
318
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Legend, {
|
|
278
319
|
iconType: "circle",
|
|
279
320
|
wrapperStyle: {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
color: "var(--color-neutral-300)"
|
|
321
|
+
...chartLegendTextStyle,
|
|
322
|
+
paddingTop: "20px"
|
|
283
323
|
}
|
|
284
324
|
}),
|
|
285
325
|
normalizedCategories.map((cat, index) => {
|
|
@@ -310,7 +350,8 @@ var StackedBarChart = ({ data, categories, height = 300, yAxisDomain, className
|
|
|
310
350
|
};
|
|
311
351
|
//#endregion
|
|
312
352
|
//#region src/components/data-display/charts/ThinBreakdownBar.tsx
|
|
313
|
-
var
|
|
353
|
+
var defaultValueFormatter$2 = (value) => new Intl.NumberFormat().format(value);
|
|
354
|
+
var ThinBreakdownBar = ({ data: segments, className = "", showLabels = true, showSummary = false, summaryLabel = "Total", valueFormatter = defaultValueFormatter$2 }) => {
|
|
314
355
|
const [activeSegmentKey, setActiveSegmentKey] = react.default.useState(null);
|
|
315
356
|
const normalizedSegments = react.default.useMemo(() => {
|
|
316
357
|
const normalizedColors = normalizeChartColors(segments.map((segment) => segment.color));
|
|
@@ -334,65 +375,93 @@ var ThinBreakdownBar = ({ data: segments, className = "", showLabels = true }) =
|
|
|
334
375
|
});
|
|
335
376
|
}, [normalizedSegments]);
|
|
336
377
|
const activeSegment = react.default.useMemo(() => segmentsWithMetrics.find((segment) => segment.key === activeSegmentKey) ?? null, [activeSegmentKey, segmentsWithMetrics]);
|
|
378
|
+
const totalValue = react.default.useMemo(() => segments.reduce((sum, item) => sum + item.value, 0), [segments]);
|
|
379
|
+
const summaryTitle = activeSegment?.label ?? summaryLabel;
|
|
380
|
+
const summaryValue = activeSegment?.value ?? totalValue;
|
|
381
|
+
const summaryMeta = activeSegment ? `${Math.round(activeSegment.widthPercent)}% of total` : `${segments.length} segments`;
|
|
337
382
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
338
383
|
className: `w-full flex flex-col gap-3 ${className}`,
|
|
339
|
-
children: [
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
384
|
+
children: [
|
|
385
|
+
showSummary && (activeSegment || totalValue > 0) ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
386
|
+
className: "flex items-start justify-between gap-4 rounded-xl border border-border/70 bg-background/70 px-4 py-3 backdrop-blur-md",
|
|
387
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
388
|
+
className: "min-w-0",
|
|
389
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
390
|
+
className: "truncate text-[11px] font-medium tracking-[0.16em] text-muted-foreground uppercase transition-colors duration-200",
|
|
391
|
+
style: activeSegment ? { color: activeSegment.color } : void 0,
|
|
392
|
+
children: summaryTitle
|
|
393
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
394
|
+
className: "mt-1 text-xs text-muted-foreground",
|
|
395
|
+
children: summaryMeta
|
|
396
|
+
})]
|
|
397
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
398
|
+
className: "text-right text-lg font-semibold leading-none text-foreground transition-colors duration-200",
|
|
399
|
+
style: activeSegment ? { color: activeSegment.color } : void 0,
|
|
400
|
+
children: valueFormatter(summaryValue)
|
|
401
|
+
})]
|
|
402
|
+
}) : null,
|
|
403
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
404
|
+
className: "relative",
|
|
405
|
+
children: [activeSegment && !showSummary && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
406
|
+
className: "pointer-events-none absolute -top-10 z-10 -translate-x-1/2 rounded-full px-2.5 py-1 text-[11px] font-medium text-foreground",
|
|
407
|
+
style: {
|
|
408
|
+
...chartPillTooltipStyle,
|
|
409
|
+
left: `${activeSegment.centerPercent}%`
|
|
410
|
+
},
|
|
411
|
+
children: [
|
|
412
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: activeSegment.label }),
|
|
413
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
414
|
+
className: "mx-1 text-muted-foreground",
|
|
415
|
+
children: "•"
|
|
416
|
+
}),
|
|
417
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
418
|
+
style: { color: activeSegment.color },
|
|
419
|
+
children: activeSegment.value
|
|
420
|
+
})
|
|
421
|
+
]
|
|
422
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
423
|
+
className: "rounded-full bg-background-tertiary/80 p-0.5",
|
|
424
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
425
|
+
className: "flex w-full gap-1",
|
|
426
|
+
onMouseLeave: () => setActiveSegmentKey(null),
|
|
427
|
+
children: segmentsWithMetrics.map((segment) => {
|
|
428
|
+
const isActive = activeSegmentKey === segment.key;
|
|
429
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
430
|
+
className: "relative flex h-2.5 min-w-0 items-center",
|
|
431
|
+
style: { width: `${segment.widthPercent}%` },
|
|
432
|
+
onMouseEnter: () => setActiveSegmentKey(segment.key),
|
|
433
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
434
|
+
className: "h-full w-full rounded-full transition-[transform,filter,box-shadow,opacity] duration-200 ease-out",
|
|
435
|
+
style: {
|
|
436
|
+
backgroundColor: segment.color,
|
|
437
|
+
opacity: activeSegmentKey && !isActive ? .72 : 1,
|
|
438
|
+
transform: isActive ? "scaleY(1.3)" : "scaleY(1)",
|
|
439
|
+
filter: isActive ? "saturate(1.1) brightness(1.05)" : "none",
|
|
440
|
+
boxShadow: isActive ? `inset 0 1px 1px rgba(255,255,255,0.28), 0 0 0 1px color-mix(in srgb, ${segment.color} 35%, transparent), 0 0 14px color-mix(in srgb, ${segment.color} 45%, transparent)` : `inset 0 1px 1px rgba(255,255,255,0.2), 0 0 8px color-mix(in srgb, ${segment.color} 30%, transparent)`
|
|
441
|
+
},
|
|
442
|
+
title: `${segment.label}: ${segment.value}`
|
|
443
|
+
})
|
|
444
|
+
}, segment.key);
|
|
445
|
+
})
|
|
378
446
|
})
|
|
447
|
+
})]
|
|
448
|
+
}),
|
|
449
|
+
showLabels && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
450
|
+
className: "flex w-full items-start gap-1 px-0.5",
|
|
451
|
+
children: segmentsWithMetrics.map((segment) => {
|
|
452
|
+
const isActive = activeSegmentKey === segment.key;
|
|
453
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
454
|
+
className: "flex min-w-0 justify-center",
|
|
455
|
+
style: { width: `${segment.widthPercent}%` },
|
|
456
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
457
|
+
className: "whitespace-nowrap px-1 text-center text-[11px] font-medium tracking-wide text-muted-foreground transition-colors duration-200",
|
|
458
|
+
style: isActive ? { color: segment.color } : void 0,
|
|
459
|
+
children: segment.label
|
|
460
|
+
})
|
|
461
|
+
}, `label-${segment.key}`);
|
|
379
462
|
})
|
|
380
|
-
})]
|
|
381
|
-
}), showLabels && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
382
|
-
className: "flex w-full items-start gap-1 px-0.5",
|
|
383
|
-
children: segmentsWithMetrics.map((segment) => {
|
|
384
|
-
const isActive = activeSegmentKey === segment.key;
|
|
385
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
386
|
-
className: "flex min-w-0 justify-center",
|
|
387
|
-
style: { width: `${segment.widthPercent}%` },
|
|
388
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
389
|
-
className: "whitespace-nowrap px-1 text-center text-[11px] font-medium tracking-wide text-muted-foreground transition-colors duration-200",
|
|
390
|
-
style: isActive ? { color: segment.color } : void 0,
|
|
391
|
-
children: segment.label
|
|
392
|
-
})
|
|
393
|
-
}, `label-${segment.key}`);
|
|
394
463
|
})
|
|
395
|
-
|
|
464
|
+
]
|
|
396
465
|
});
|
|
397
466
|
};
|
|
398
467
|
//#endregion
|
|
@@ -462,16 +531,14 @@ var AreaChart = ({ data, categories, height = 300, className = "", showGrid = tr
|
|
|
462
531
|
dx: -10
|
|
463
532
|
}),
|
|
464
533
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
|
|
465
|
-
contentStyle:
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
color: "var(--ds-color-fg)"
|
|
471
|
-
},
|
|
472
|
-
itemStyle: { color: "var(--ds-color-fg)" }
|
|
534
|
+
contentStyle: chartTooltipContentStyle,
|
|
535
|
+
cursor: chartLineHoverCursorStyle,
|
|
536
|
+
itemStyle: chartTooltipItemStyle,
|
|
537
|
+
labelStyle: chartTooltipLabelStyle,
|
|
538
|
+
wrapperStyle: chartTooltipWrapperStyle
|
|
473
539
|
}),
|
|
474
540
|
normalizedCategories.map((cat) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Area, {
|
|
541
|
+
activeDot: getChartActiveDotStyle(cat.color),
|
|
475
542
|
type: "monotone",
|
|
476
543
|
dataKey: cat.key,
|
|
477
544
|
stroke: cat.color,
|
|
@@ -486,7 +553,8 @@ var AreaChart = ({ data, categories, height = 300, className = "", showGrid = tr
|
|
|
486
553
|
};
|
|
487
554
|
//#endregion
|
|
488
555
|
//#region src/components/data-display/charts/BarChart.tsx
|
|
489
|
-
var BarChart = ({ data, categories, height = 300, className = "", layout = "horizontal" }) => {
|
|
556
|
+
var BarChart = ({ data, categories, height = 300, className = "", layout = "horizontal", maxBarSize }) => {
|
|
557
|
+
const resolvedMaxBarSize = maxBarSize ?? (layout === "horizontal" ? 40 : 22);
|
|
490
558
|
const normalizedCategories = react.default.useMemo(() => {
|
|
491
559
|
const normalizedColors = normalizeChartColors(categories.map((category) => category.color));
|
|
492
560
|
return categories.map((category, index) => ({
|
|
@@ -503,6 +571,7 @@ var BarChart = ({ data, categories, height = 300, className = "", layout = "hori
|
|
|
503
571
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.BarChart, {
|
|
504
572
|
data,
|
|
505
573
|
layout,
|
|
574
|
+
barCategoryGap: data.length <= 4 ? "28%" : "18%",
|
|
506
575
|
margin: {
|
|
507
576
|
top: 20,
|
|
508
577
|
right: 30,
|
|
@@ -555,18 +624,16 @@ var BarChart = ({ data, categories, height = 300, className = "", layout = "hori
|
|
|
555
624
|
dx: -10
|
|
556
625
|
})] }),
|
|
557
626
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
backdropFilter: "blur(8px)",
|
|
564
|
-
color: "var(--ds-color-fg)"
|
|
565
|
-
}
|
|
627
|
+
contentStyle: chartTooltipContentStyle,
|
|
628
|
+
cursor: chartBandHoverCursorStyle,
|
|
629
|
+
itemStyle: chartTooltipItemStyle,
|
|
630
|
+
labelStyle: chartTooltipLabelStyle,
|
|
631
|
+
wrapperStyle: chartTooltipWrapperStyle
|
|
566
632
|
}),
|
|
567
633
|
normalizedCategories.map((cat) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Bar, {
|
|
568
634
|
dataKey: cat.key,
|
|
569
635
|
fill: cat.color,
|
|
636
|
+
maxBarSize: resolvedMaxBarSize,
|
|
570
637
|
radius: layout === "horizontal" ? [
|
|
571
638
|
4,
|
|
572
639
|
4,
|
|
@@ -585,14 +652,187 @@ var BarChart = ({ data, categories, height = 300, className = "", layout = "hori
|
|
|
585
652
|
});
|
|
586
653
|
};
|
|
587
654
|
//#endregion
|
|
588
|
-
//#region src/components/data-display/charts/
|
|
589
|
-
var
|
|
590
|
-
|
|
591
|
-
|
|
655
|
+
//#region src/components/data-display/charts/PositiveNegativeBarChart.tsx
|
|
656
|
+
var defaultValueFormatter$1 = (value) => new Intl.NumberFormat().format(value);
|
|
657
|
+
var getBarRadius = (value, layout) => {
|
|
658
|
+
if (value === 0) return [
|
|
659
|
+
6,
|
|
660
|
+
6,
|
|
661
|
+
6,
|
|
662
|
+
6
|
|
663
|
+
];
|
|
664
|
+
if (layout === "horizontal") return value > 0 ? [
|
|
665
|
+
6,
|
|
666
|
+
6,
|
|
667
|
+
0,
|
|
668
|
+
0
|
|
669
|
+
] : [
|
|
670
|
+
0,
|
|
671
|
+
0,
|
|
672
|
+
6,
|
|
673
|
+
6
|
|
674
|
+
];
|
|
675
|
+
return value > 0 ? [
|
|
676
|
+
0,
|
|
677
|
+
6,
|
|
678
|
+
6,
|
|
679
|
+
0
|
|
680
|
+
] : [
|
|
681
|
+
6,
|
|
682
|
+
0,
|
|
683
|
+
0,
|
|
684
|
+
6
|
|
685
|
+
];
|
|
686
|
+
};
|
|
687
|
+
var PositiveNegativeBarChart = ({ data, height = 320, className = "", layout = "horizontal", positiveColor = getChartColorVar(3), negativeColor = getChartColorVar(5), neutralColor = getChartColorVar(15), showGrid = true, seriesLabel = "Variance", valueFormatter = defaultValueFormatter$1, tickFormatter }) => {
|
|
688
|
+
const resolvedPositiveColor = react.default.useMemo(() => normalizeChartColorValue(positiveColor) ?? getChartColorVar(3), [positiveColor]);
|
|
689
|
+
const resolvedNegativeColor = react.default.useMemo(() => normalizeChartColorValue(negativeColor) ?? getChartColorVar(5), [negativeColor]);
|
|
690
|
+
const resolvedNeutralColor = react.default.useMemo(() => normalizeChartColorValue(neutralColor) ?? getChartColorVar(15), [neutralColor]);
|
|
691
|
+
const resolvedTickFormatter = react.default.useCallback((value) => tickFormatter?.(value) ?? valueFormatter(value), [tickFormatter, valueFormatter]);
|
|
692
|
+
const getBarFill = react.default.useCallback((value) => {
|
|
693
|
+
if (value > 0) return resolvedPositiveColor;
|
|
694
|
+
if (value < 0) return resolvedNegativeColor;
|
|
695
|
+
return resolvedNeutralColor;
|
|
696
|
+
}, [
|
|
697
|
+
resolvedNegativeColor,
|
|
698
|
+
resolvedNeutralColor,
|
|
699
|
+
resolvedPositiveColor
|
|
700
|
+
]);
|
|
592
701
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
593
702
|
className: `w-full ${className}`,
|
|
594
703
|
style: { height },
|
|
595
704
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ResponsiveContainer, {
|
|
705
|
+
width: "100%",
|
|
706
|
+
height: "100%",
|
|
707
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.BarChart, {
|
|
708
|
+
data,
|
|
709
|
+
layout,
|
|
710
|
+
margin: {
|
|
711
|
+
top: 20,
|
|
712
|
+
right: 30,
|
|
713
|
+
left: 20,
|
|
714
|
+
bottom: 5
|
|
715
|
+
},
|
|
716
|
+
children: [
|
|
717
|
+
showGrid ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.CartesianGrid, {
|
|
718
|
+
strokeDasharray: "3 3",
|
|
719
|
+
horizontal: layout === "horizontal",
|
|
720
|
+
vertical: layout === "vertical",
|
|
721
|
+
stroke: "var(--ds-color-border)",
|
|
722
|
+
opacity: .35
|
|
723
|
+
}) : null,
|
|
724
|
+
layout === "horizontal" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
725
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.XAxis, {
|
|
726
|
+
dataKey: "name",
|
|
727
|
+
axisLine: false,
|
|
728
|
+
tickLine: false,
|
|
729
|
+
tick: {
|
|
730
|
+
fill: "var(--ds-color-fg-muted)",
|
|
731
|
+
fontSize: 12
|
|
732
|
+
},
|
|
733
|
+
dy: 10
|
|
734
|
+
}),
|
|
735
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.YAxis, {
|
|
736
|
+
axisLine: false,
|
|
737
|
+
tickLine: false,
|
|
738
|
+
tick: {
|
|
739
|
+
fill: "var(--ds-color-fg-muted)",
|
|
740
|
+
fontSize: 12
|
|
741
|
+
},
|
|
742
|
+
tickFormatter: resolvedTickFormatter,
|
|
743
|
+
dx: -10
|
|
744
|
+
}),
|
|
745
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ReferenceLine, {
|
|
746
|
+
y: 0,
|
|
747
|
+
stroke: "var(--ds-color-border-strong)",
|
|
748
|
+
strokeOpacity: .95
|
|
749
|
+
})
|
|
750
|
+
] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
751
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.XAxis, {
|
|
752
|
+
type: "number",
|
|
753
|
+
axisLine: false,
|
|
754
|
+
tickLine: false,
|
|
755
|
+
tick: {
|
|
756
|
+
fill: "var(--ds-color-fg-muted)",
|
|
757
|
+
fontSize: 12
|
|
758
|
+
},
|
|
759
|
+
tickFormatter: resolvedTickFormatter,
|
|
760
|
+
dy: 10
|
|
761
|
+
}),
|
|
762
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.YAxis, {
|
|
763
|
+
dataKey: "name",
|
|
764
|
+
type: "category",
|
|
765
|
+
axisLine: false,
|
|
766
|
+
tickLine: false,
|
|
767
|
+
tick: {
|
|
768
|
+
fill: "var(--ds-color-fg-muted)",
|
|
769
|
+
fontSize: 12
|
|
770
|
+
},
|
|
771
|
+
width: 96,
|
|
772
|
+
dx: -6
|
|
773
|
+
}),
|
|
774
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ReferenceLine, {
|
|
775
|
+
x: 0,
|
|
776
|
+
stroke: "var(--ds-color-border-strong)",
|
|
777
|
+
strokeOpacity: .95
|
|
778
|
+
})
|
|
779
|
+
] }),
|
|
780
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
|
|
781
|
+
contentStyle: chartTooltipContentStyle,
|
|
782
|
+
cursor: chartBandHoverCursorStyle,
|
|
783
|
+
itemStyle: chartTooltipItemStyle,
|
|
784
|
+
labelStyle: chartTooltipLabelStyle,
|
|
785
|
+
wrapperStyle: chartTooltipWrapperStyle,
|
|
786
|
+
formatter: (value) => [valueFormatter(Number(value ?? 0)), seriesLabel]
|
|
787
|
+
}),
|
|
788
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Bar, {
|
|
789
|
+
dataKey: "value",
|
|
790
|
+
radius: 6,
|
|
791
|
+
barSize: layout === "horizontal" ? 30 : 22,
|
|
792
|
+
shape: (props) => {
|
|
793
|
+
const barValue = Array.isArray(props.value) ? props.value[1] - props.value[0] : props.value;
|
|
794
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Rectangle, {
|
|
795
|
+
...props,
|
|
796
|
+
radius: getBarRadius(barValue, layout)
|
|
797
|
+
});
|
|
798
|
+
},
|
|
799
|
+
children: data.map((entry) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Cell, { fill: getBarFill(entry.value) }, `${entry.name}-${entry.value}`))
|
|
800
|
+
})
|
|
801
|
+
]
|
|
802
|
+
})
|
|
803
|
+
})
|
|
804
|
+
});
|
|
805
|
+
};
|
|
806
|
+
//#endregion
|
|
807
|
+
//#region src/components/data-display/charts/PieChart.tsx
|
|
808
|
+
var defaultValueFormatter = (value) => new Intl.NumberFormat().format(value);
|
|
809
|
+
var PieChart = ({ data, colors, height = 300, className = "", variant = "donut", showCenterSummary = variant === "donut", centerLabel = "Total", valueFormatter = defaultValueFormatter, renderCenterContent }) => {
|
|
810
|
+
const [activeIndex, setActiveIndex] = react.default.useState(null);
|
|
811
|
+
const innerRadius = variant === "donut" ? "60%" : 0;
|
|
812
|
+
const normalizedColors = react.default.useMemo(() => normalizeChartColors(colors), [colors]);
|
|
813
|
+
const totalValue = react.default.useMemo(() => data.reduce((sum, item) => sum + item.value, 0), [data]);
|
|
814
|
+
const activeSlice = activeIndex !== null && activeIndex >= 0 && activeIndex < data.length ? data[activeIndex] : null;
|
|
815
|
+
const activePercentage = activeSlice && totalValue > 0 ? `${Math.round(activeSlice.value / totalValue * 100)}% of total` : `${data.length} categories`;
|
|
816
|
+
const displayLabel = activeSlice?.name ?? centerLabel;
|
|
817
|
+
const displayValue = activeSlice?.value ?? totalValue;
|
|
818
|
+
const centerContentContext = {
|
|
819
|
+
activeColor: activeIndex !== null ? normalizedColors[activeIndex % normalizedColors.length] : void 0,
|
|
820
|
+
activeIndex,
|
|
821
|
+
activeSlice,
|
|
822
|
+
data,
|
|
823
|
+
displayLabel,
|
|
824
|
+
displayPercentageLabel: activePercentage,
|
|
825
|
+
displayValue,
|
|
826
|
+
normalizedColors,
|
|
827
|
+
totalValue,
|
|
828
|
+
valueFormatter,
|
|
829
|
+
variant
|
|
830
|
+
};
|
|
831
|
+
const shouldRenderCenterContent = variant === "donut" && (showCenterSummary || Boolean(renderCenterContent));
|
|
832
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
833
|
+
className: `relative w-full ${className}`,
|
|
834
|
+
style: { height },
|
|
835
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ResponsiveContainer, {
|
|
596
836
|
width: "100%",
|
|
597
837
|
height: "100%",
|
|
598
838
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.PieChart, { children: [
|
|
@@ -605,27 +845,41 @@ var PieChart = ({ data, colors, height = 300, className = "", variant = "donut"
|
|
|
605
845
|
paddingAngle: variant === "donut" ? 2 : 0,
|
|
606
846
|
dataKey: "value",
|
|
607
847
|
stroke: "none",
|
|
848
|
+
onMouseEnter: (_data, index) => setActiveIndex(index),
|
|
849
|
+
onMouseLeave: () => setActiveIndex(null),
|
|
608
850
|
children: data.map((entry, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Cell, { fill: normalizedColors[index % normalizedColors.length] }, `cell-${index}`))
|
|
609
851
|
}),
|
|
610
852
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
|
|
611
|
-
contentStyle:
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
backdropFilter: "blur(8px)",
|
|
616
|
-
color: "var(--ds-color-fg)"
|
|
617
|
-
},
|
|
618
|
-
itemStyle: { color: "var(--ds-color-fg)" }
|
|
853
|
+
contentStyle: chartTooltipContentStyle,
|
|
854
|
+
itemStyle: chartTooltipItemStyle,
|
|
855
|
+
labelStyle: chartTooltipLabelStyle,
|
|
856
|
+
wrapperStyle: chartTooltipWrapperStyle
|
|
619
857
|
}),
|
|
620
858
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Legend, {
|
|
621
859
|
iconType: "circle",
|
|
622
|
-
wrapperStyle:
|
|
623
|
-
fontSize: "12px",
|
|
624
|
-
color: "var(--color-neutral-300)"
|
|
625
|
-
}
|
|
860
|
+
wrapperStyle: chartLegendTextStyle
|
|
626
861
|
})
|
|
627
862
|
] })
|
|
628
|
-
})
|
|
863
|
+
}), shouldRenderCenterContent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
864
|
+
className: "pointer-events-none absolute inset-0 flex items-center justify-center",
|
|
865
|
+
children: renderCenterContent ? renderCenterContent(centerContentContext) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
866
|
+
className: "flex max-w-[42%] flex-col items-center text-center",
|
|
867
|
+
children: [
|
|
868
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
869
|
+
className: "text-[11px] font-medium tracking-[0.16em] text-muted-foreground uppercase",
|
|
870
|
+
children: displayLabel
|
|
871
|
+
}),
|
|
872
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
873
|
+
className: "mt-1 text-2xl font-semibold leading-none text-foreground sm:text-3xl",
|
|
874
|
+
children: valueFormatter(displayValue)
|
|
875
|
+
}),
|
|
876
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
877
|
+
className: "mt-2 text-xs leading-tight text-muted-foreground",
|
|
878
|
+
children: activePercentage
|
|
879
|
+
})
|
|
880
|
+
]
|
|
881
|
+
})
|
|
882
|
+
}) : null]
|
|
629
883
|
});
|
|
630
884
|
};
|
|
631
885
|
//#endregion
|
|
@@ -653,6 +907,12 @@ Object.defineProperty(exports, "PieChart", {
|
|
|
653
907
|
return PieChart;
|
|
654
908
|
}
|
|
655
909
|
});
|
|
910
|
+
Object.defineProperty(exports, "PositiveNegativeBarChart", {
|
|
911
|
+
enumerable: true,
|
|
912
|
+
get: function() {
|
|
913
|
+
return PositiveNegativeBarChart;
|
|
914
|
+
}
|
|
915
|
+
});
|
|
656
916
|
Object.defineProperty(exports, "StackedBarChart", {
|
|
657
917
|
enumerable: true,
|
|
658
918
|
get: function() {
|
|
@@ -684,4 +944,4 @@ Object.defineProperty(exports, "getChartPalette", {
|
|
|
684
944
|
}
|
|
685
945
|
});
|
|
686
946
|
|
|
687
|
-
//# sourceMappingURL=charts-
|
|
947
|
+
//# sourceMappingURL=charts-DbxyHtlX.cjs.map
|