@andreagiugni/tailwind-dashboard-ui 1.0.14 → 1.0.16

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 CHANGED
@@ -221,7 +221,7 @@ in [Peer dependencies](#peer-dependencies)).
221
221
 
222
222
  | Component | Key props |
223
223
  |---|---|
224
- | `BarChart` | `series`, `categories`, `colors?`, `height?`, `horizontal?`, `showBarValues?`, `showBarPercentages?`, `minBarPercentage?`, `percentageMode?`, `barValueFormatter?`, `barPercentageFormatter?`, `options?` (merged over defaults) |
224
+ | `BarChart` | `series`, `categories`, `colors?`, `barColors?` (per-option bar colors), `height?`, `horizontal?`, `showBarValues?`, `showBarPercentages?`, `minBarWidth?` (fixed px minimum for horizontal bars, default `30`), `percentageMode?`, `barValueFormatter?`, `barPercentageFormatter?`, `options?` (merged over defaults) |
225
225
  | `LineChart` | `series`, `categories`, `colors?`, `height?`, `options?` |
226
226
  | `Calendar` | `events`, `onEventClick`, `onDateSelect`, `initialView` |
227
227
  | `Editor` (WYSIWYG) | `content`, `onChange(html)`, `placeholder?`, `editable?`, `toolbar?`, `rows?` — Tiptap-powered, customizable toolbar |
@@ -170,27 +170,42 @@ function getSeriesTotal(matrix) {
170
170
  function getCategoryTotal(matrix, dataPointIndex) {
171
171
  return matrix.reduce((total, data) => total + (data[dataPointIndex] ?? 0), 0);
172
172
  }
173
- function getMaxValue(matrix) {
174
- return matrix.reduce(
175
- (max, data) => Math.max(max, ...data.map((value) => Math.max(0, value))),
176
- 0
177
- );
178
- }
179
- function setDataValue(value, nextValue) {
180
- if (typeof value === "number") return nextValue;
181
- if (Array.isArray(value)) return [value[0], nextValue, ...value.slice(2)];
182
- if (value && typeof value === "object" && "y" in value) {
183
- return { ...value, y: nextValue };
173
+ function withDataPointColor(value, fillColor, dataPointIndex, categories) {
174
+ if (Array.isArray(value)) {
175
+ return {
176
+ x: value[0],
177
+ y: value[1],
178
+ fillColor
179
+ };
180
+ }
181
+ if (value && typeof value === "object") {
182
+ return {
183
+ ...value,
184
+ fillColor
185
+ };
184
186
  }
185
- return value;
187
+ return {
188
+ x: categories?.[dataPointIndex] ?? dataPointIndex,
189
+ y: value,
190
+ fillColor
191
+ };
186
192
  }
187
- function applyMinimumBarValue(series, minimumValue) {
188
- return series.map((item) => ({
189
- ...item,
190
- data: item.data.map(
191
- (value) => getDataValue(value) === 0 ? setDataValue(value, minimumValue) : value
192
- )
193
- }));
193
+ function applyBarColors(series, barColors, fallbackColors, categories) {
194
+ if (!barColors?.length) return series;
195
+ return series.map((item, seriesIndex) => {
196
+ const fallbackColor = fallbackColors?.[seriesIndex] ?? fallbackColors?.[0] ?? defaultOptions.colors?.[0];
197
+ return {
198
+ ...item,
199
+ data: item.data.map(
200
+ (value, dataPointIndex) => withDataPointColor(
201
+ value,
202
+ barColors[dataPointIndex] ?? fallbackColor ?? "#465fff",
203
+ dataPointIndex,
204
+ categories
205
+ )
206
+ )
207
+ };
208
+ });
194
209
  }
195
210
  function mergeDataLabels(base, override, generated) {
196
211
  return {
@@ -237,15 +252,63 @@ function mergeAnnotations(override, generated) {
237
252
  points: [...override?.points ?? [], ...generated?.points ?? []]
238
253
  };
239
254
  }
255
+ function getChartElement(chartContext) {
256
+ if (typeof Element === "undefined") return null;
257
+ if (!chartContext || typeof chartContext !== "object" || !("el" in chartContext)) return null;
258
+ const element = chartContext.el;
259
+ return element instanceof Element ? element : null;
260
+ }
261
+ function applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix) {
262
+ const root = getChartElement(chartContext);
263
+ if (!root) return;
264
+ root.querySelectorAll("[data-taildashboard-min-bar]").forEach((element) => element.remove());
265
+ if (minBarWidth <= 0) return;
266
+ const values = valueMatrix.flat();
267
+ const paths = Array.from(root.querySelectorAll(".apexcharts-bar-area"));
268
+ const documentRef = root.ownerDocument;
269
+ paths.forEach((path, index) => {
270
+ const value = values[index] ?? 0;
271
+ if (value < 0 || typeof path.getBBox !== "function") return;
272
+ const box = path.getBBox();
273
+ if (box.width >= minBarWidth || box.height <= 0) return;
274
+ const overlay = documentRef.createElementNS("http://www.w3.org/2000/svg", "rect");
275
+ const radius = Math.min(5, box.height / 2, minBarWidth / 2);
276
+ overlay.setAttribute("data-taildashboard-min-bar", "true");
277
+ overlay.setAttribute("x", `${box.x}`);
278
+ overlay.setAttribute("y", `${box.y}`);
279
+ overlay.setAttribute("width", `${minBarWidth}`);
280
+ overlay.setAttribute("height", `${box.height}`);
281
+ overlay.setAttribute("rx", `${radius}`);
282
+ overlay.setAttribute("fill", path.getAttribute("fill") ?? path.style.fill ?? "currentColor");
283
+ overlay.setAttribute("opacity", path.getAttribute("opacity") ?? path.style.opacity ?? "1");
284
+ overlay.style.pointerEvents = "none";
285
+ path.parentNode?.insertBefore(overlay, path.nextSibling);
286
+ });
287
+ }
288
+ function scheduleMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix) {
289
+ applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);
290
+ if (typeof window === "undefined" || typeof window.requestAnimationFrame !== "function") return;
291
+ window.requestAnimationFrame(() => {
292
+ applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);
293
+ });
294
+ }
295
+ function composeMinimumBarWidthEvent(userEvent, minBarWidth, valueMatrix) {
296
+ return (chart, eventOptions) => {
297
+ userEvent?.(chart, eventOptions);
298
+ scheduleMinimumHorizontalBarWidth(chart, minBarWidth, valueMatrix);
299
+ };
300
+ }
240
301
  var BarChart = ({
241
302
  series,
242
303
  categories,
243
304
  colors,
305
+ barColors,
244
306
  height,
245
307
  horizontal,
246
308
  showBarValues = false,
247
309
  showBarPercentages = false,
248
- minBarPercentage = 2,
310
+ minBarWidth,
311
+ minBarPercentage,
249
312
  percentageMode = "total",
250
313
  barValueFormatter,
251
314
  barPercentageFormatter,
@@ -254,16 +317,19 @@ var BarChart = ({
254
317
  const [Chart, setChart] = React.useState(null);
255
318
  const effectiveSeries = series ?? defaultSeries;
256
319
  const effectiveCategories = categories ?? options?.xaxis?.categories;
320
+ const effectiveColors = colors ?? options?.colors ?? defaultOptions.colors;
321
+ const chartSeries = applyBarColors(
322
+ effectiveSeries,
323
+ barColors,
324
+ effectiveColors,
325
+ effectiveCategories
326
+ );
257
327
  const valueMatrix = getValueMatrix(effectiveSeries);
258
328
  const seriesTotal = getSeriesTotal(valueMatrix);
259
329
  const isHorizontal = horizontal ?? options?.plotOptions?.bar?.horizontal === true;
260
330
  const hasGeneratedLabels = showBarValues || showBarPercentages;
261
- const maxValue = getMaxValue(valueMatrix);
262
- const minimumValueScale = maxValue > 0 ? maxValue : 100;
263
- const minimumBarValue = minimumValueScale * (Math.max(0, minBarPercentage) / 100);
264
- const hasMinimumBarValue = isHorizontal && minimumBarValue > 0;
265
- const chartSeries = hasMinimumBarValue ? applyMinimumBarValue(effectiveSeries, minimumBarValue) : effectiveSeries;
266
- const chartValueMatrix = getValueMatrix(chartSeries);
331
+ const resolvedMinBarWidth = minBarWidth ?? (minBarPercentage === 0 ? 0 : 30);
332
+ const hasMinimumBarWidth = isHorizontal && resolvedMinBarWidth > 0;
267
333
  const baseGridOptions = isHorizontal ? mergeGridOptions(defaultOptions.grid, horizontalGridOptions) : defaultOptions.grid;
268
334
  const getLabelContext = (seriesIndex, dataPointIndex, total) => ({
269
335
  seriesIndex,
@@ -302,11 +368,10 @@ var BarChart = ({
302
368
  points: effectiveSeries.flatMap(
303
369
  (item, seriesIndex) => item.data.map((dataPoint, dataPointIndex) => {
304
370
  const value = getDataValue(dataPoint) ?? 0;
305
- const chartValue = chartValueMatrix[seriesIndex]?.[dataPointIndex] ?? value;
306
371
  const total = percentageMode === "category" ? getCategoryTotal(valueMatrix, dataPointIndex) : seriesTotal;
307
372
  const context = getLabelContext(seriesIndex, dataPointIndex, total);
308
373
  return {
309
- x: chartValue,
374
+ x: value,
310
375
  y: dataPointIndex,
311
376
  seriesIndex,
312
377
  marker: {
@@ -333,24 +398,33 @@ var BarChart = ({
333
398
  })
334
399
  )
335
400
  } : void 0;
336
- const generatedTooltip = hasMinimumBarValue ? {
337
- y: {
338
- formatter: (_value, opts) => {
339
- const originalValue = valueMatrix[opts?.seriesIndex ?? 0]?.[opts?.dataPointIndex ?? 0] ?? 0;
340
- const overrideY = Array.isArray(options?.tooltip?.y) ? void 0 : options?.tooltip?.y;
341
- const defaultY = Array.isArray(defaultOptions.tooltip?.y) ? void 0 : defaultOptions.tooltip?.y;
342
- const formatter = overrideY?.formatter ?? defaultY?.formatter;
343
- return formatter ? formatter(originalValue, opts) : `${originalValue}`;
344
- }
345
- }
346
- } : void 0;
401
+ const userChartEvents = options?.chart?.events;
402
+ const generatedChartEvents = hasMinimumBarWidth ? {
403
+ ...userChartEvents,
404
+ mounted: composeMinimumBarWidthEvent(
405
+ userChartEvents?.mounted,
406
+ resolvedMinBarWidth,
407
+ valueMatrix
408
+ ),
409
+ updated: composeMinimumBarWidthEvent(
410
+ userChartEvents?.updated,
411
+ resolvedMinBarWidth,
412
+ valueMatrix
413
+ ),
414
+ animationEnd: composeMinimumBarWidthEvent(
415
+ userChartEvents?.animationEnd,
416
+ resolvedMinBarWidth,
417
+ valueMatrix
418
+ )
419
+ } : userChartEvents;
347
420
  const mergedOptions = {
348
421
  ...defaultOptions,
349
422
  ...options,
350
- colors: colors ?? options?.colors ?? defaultOptions.colors,
423
+ colors: effectiveColors,
351
424
  chart: {
352
425
  ...defaultOptions.chart,
353
426
  ...options?.chart,
427
+ events: generatedChartEvents,
354
428
  animations: {
355
429
  ...defaultOptions.chart?.animations,
356
430
  ...options?.chart?.animations,
@@ -388,14 +462,11 @@ var BarChart = ({
388
462
  xaxis: {
389
463
  ...defaultOptions.xaxis,
390
464
  ...options?.xaxis,
391
- categories: categories ?? options?.xaxis?.categories ?? defaultOptions.xaxis?.categories,
392
- ...hasMinimumBarValue && options?.xaxis?.max === void 0 && {
393
- max: minimumValueScale
394
- }
465
+ categories: categories ?? options?.xaxis?.categories ?? defaultOptions.xaxis?.categories
395
466
  },
396
467
  grid: mergeGridOptions(baseGridOptions, options?.grid),
397
468
  annotations: mergeAnnotations(options?.annotations, generatedAnnotations),
398
- tooltip: mergeTooltipOptions(defaultOptions.tooltip, options?.tooltip, generatedTooltip)
469
+ tooltip: mergeTooltipOptions(defaultOptions.tooltip, options?.tooltip, void 0)
399
470
  };
400
471
  React.useEffect(() => {
401
472
  let isMounted = true;
@@ -419,5 +490,5 @@ var BarChart = ({
419
490
  };
420
491
 
421
492
  export { BarChart };
422
- //# sourceMappingURL=chunk-OXOGLCGX.js.map
423
- //# sourceMappingURL=chunk-OXOGLCGX.js.map
493
+ //# sourceMappingURL=chunk-C7OCYM5S.js.map
494
+ //# sourceMappingURL=chunk-C7OCYM5S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Charts/BarChart.tsx"],"names":[],"mappings":"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","file":"chunk-C7OCYM5S.js","sourcesContent":["\"use client\";\nimport React from \"react\";\nimport type { ApexOptions } from \"apexcharts\";\n\ntype ReactApexChartProps = {\n options: ApexOptions;\n series: ApexAxisChartSeries;\n type: \"bar\" | \"area\";\n height: number;\n};\ntype ReactApexChartComponent = React.ComponentType<ReactApexChartProps>;\n\nexport interface BarChartProps {\n series?: ApexAxisChartSeries;\n categories?: string[];\n colors?: string[];\n barColors?: string[];\n height?: number;\n horizontal?: boolean;\n showBarValues?: boolean;\n showBarPercentages?: boolean;\n minBarWidth?: number;\n /** @deprecated Use minBarWidth. Passing 0 still disables the minimum visual width. */\n minBarPercentage?: number;\n percentageMode?: \"total\" | \"category\";\n barValueFormatter?: (value: number, context: BarChartLabelContext) => string;\n barPercentageFormatter?: (\n percentage: number,\n value: number,\n context: BarChartLabelContext\n ) => string;\n options?: ApexOptions;\n}\n\nexport interface BarChartLabelContext {\n seriesIndex: number;\n dataPointIndex: number;\n seriesName?: string;\n category?: string;\n total: number;\n}\n\nconst defaultOptions: ApexOptions = {\n colors: [\"#465fff\"],\n chart: {\n fontFamily: \"Outfit, sans-serif\",\n type: \"bar\",\n height: 180,\n animations: {\n enabled: true,\n speed: 200,\n animateGradually: {\n enabled: false,\n delay: 0,\n },\n dynamicAnimation: {\n enabled: true,\n speed: 175,\n },\n },\n toolbar: {\n show: false,\n },\n },\n plotOptions: {\n bar: {\n horizontal: false,\n columnWidth: \"39%\",\n borderRadius: 5,\n borderRadiusApplication: \"end\",\n },\n },\n dataLabels: {\n enabled: false,\n },\n // No transparent stroke around the columns: it shrinks and shifts the\n // painted bar inside its allocated slot, so the hover highlight band\n // (crosshairs width \"barWidth\" = the allocated width) would render wider\n // than — and offset from — the visible bar.\n stroke: {\n show: false,\n },\n xaxis: {\n categories: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n axisBorder: {\n show: false,\n },\n axisTicks: {\n show: false,\n },\n // Match the hover highlight band to the bar width (the default band spans\n // the whole category slot, looking ~3x wider than the 39% columns).\n crosshairs: {\n width: \"barWidth\",\n },\n },\n legend: {\n show: true,\n position: \"top\",\n horizontalAlign: \"left\",\n fontFamily: \"Outfit\",\n // Rounded, border-less swatches that echo the column styling. ApexCharts\n // sets the marker span's `color` to the series color, so `currentColor`\n // picks it up; `customHTML` lets us round the corners (the built-in shapes\n // are sharp SVG paths that CSS border-radius can't touch).\n markers: {\n size: 7,\n strokeWidth: 0,\n customHTML: () =>\n '<span style=\"display:block;height:100%;width:100%;border-radius:3px;background:currentColor\"></span>',\n },\n },\n yaxis: {\n title: {\n text: undefined,\n },\n },\n grid: {\n yaxis: {\n lines: {\n show: true,\n },\n },\n },\n fill: {\n opacity: 1,\n },\n tooltip: {\n x: {\n show: false,\n },\n y: {\n formatter: (val: number) => `${val}`,\n },\n },\n};\n\nconst defaultSeries: ApexAxisChartSeries = [\n {\n name: \"Sales\",\n data: [168, 385, 201, 298, 187, 195, 291, 110, 215, 390, 280, 112],\n },\n];\n\nconst horizontalGridOptions: ApexOptions[\"grid\"] = {\n borderColor: \"transparent\",\n xaxis: {\n lines: {\n show: false,\n },\n },\n yaxis: {\n lines: {\n show: false,\n },\n },\n};\n\nfunction mergeGridOptions(\n base: ApexOptions[\"grid\"],\n override: ApexOptions[\"grid\"]\n): ApexOptions[\"grid\"] {\n return {\n ...base,\n ...override,\n xaxis: {\n ...base?.xaxis,\n ...override?.xaxis,\n lines: {\n ...base?.xaxis?.lines,\n ...override?.xaxis?.lines,\n },\n },\n yaxis: {\n ...base?.yaxis,\n ...override?.yaxis,\n lines: {\n ...base?.yaxis?.lines,\n ...override?.yaxis?.lines,\n },\n },\n };\n}\n\nfunction getDataValue(value: unknown): number | null {\n if (typeof value === \"number\") return value;\n if (Array.isArray(value) && typeof value[1] === \"number\") return value[1];\n if (value && typeof value === \"object\" && \"y\" in value) {\n const y = (value as { y: unknown }).y;\n return typeof y === \"number\" ? y : null;\n }\n return null;\n}\n\nfunction getValueMatrix(series: ApexAxisChartSeries): number[][] {\n return series.map((item) => item.data.map((value) => getDataValue(value) ?? 0));\n}\n\nfunction getSeriesTotal(matrix: number[][]): number {\n return matrix.reduce(\n (seriesTotal, data) => seriesTotal + data.reduce((total, value) => total + value, 0),\n 0\n );\n}\n\nfunction getCategoryTotal(matrix: number[][], dataPointIndex: number): number {\n return matrix.reduce((total, data) => total + (data[dataPointIndex] ?? 0), 0);\n}\n\nfunction withDataPointColor(\n value: unknown,\n fillColor: string,\n dataPointIndex: number,\n categories?: string[]\n): unknown {\n if (Array.isArray(value)) {\n return {\n x: value[0],\n y: value[1],\n fillColor,\n };\n }\n\n if (value && typeof value === \"object\") {\n return {\n ...value,\n fillColor,\n };\n }\n\n return {\n x: categories?.[dataPointIndex] ?? dataPointIndex,\n y: value,\n fillColor,\n };\n}\n\nfunction applyBarColors(\n series: ApexAxisChartSeries,\n barColors: string[] | undefined,\n fallbackColors: string[] | undefined,\n categories?: string[]\n): ApexAxisChartSeries {\n if (!barColors?.length) return series;\n\n return series.map((item, seriesIndex) => {\n const fallbackColor =\n fallbackColors?.[seriesIndex] ?? fallbackColors?.[0] ?? defaultOptions.colors?.[0];\n\n return {\n ...item,\n data: item.data.map((value, dataPointIndex) =>\n withDataPointColor(\n value,\n barColors[dataPointIndex] ?? fallbackColor ?? \"#465fff\",\n dataPointIndex,\n categories\n )\n ) as typeof item.data,\n };\n });\n}\n\nfunction mergeDataLabels(\n base: ApexOptions[\"dataLabels\"],\n override: ApexOptions[\"dataLabels\"],\n generated: ApexOptions[\"dataLabels\"]\n): ApexOptions[\"dataLabels\"] {\n return {\n ...base,\n ...override,\n ...generated,\n style: {\n ...base?.style,\n ...override?.style,\n ...generated?.style,\n },\n background: {\n ...base?.background,\n ...override?.background,\n ...generated?.background,\n },\n };\n}\n\nfunction mergeTooltipOptions(\n base: ApexOptions[\"tooltip\"],\n override: ApexOptions[\"tooltip\"],\n generated: ApexOptions[\"tooltip\"]\n): ApexOptions[\"tooltip\"] {\n const baseY = Array.isArray(base?.y) ? undefined : base?.y;\n const overrideY = Array.isArray(override?.y) ? undefined : override?.y;\n const generatedY = Array.isArray(generated?.y) ? undefined : generated?.y;\n\n return {\n ...base,\n ...override,\n ...generated,\n x: {\n ...base?.x,\n ...override?.x,\n ...generated?.x,\n },\n y: {\n ...baseY,\n ...overrideY,\n ...generatedY,\n },\n };\n}\n\nfunction mergeAnnotations(\n override: ApexOptions[\"annotations\"],\n generated: ApexOptions[\"annotations\"]\n): ApexOptions[\"annotations\"] | undefined {\n if (!override && !generated) return undefined;\n return {\n ...override,\n ...generated,\n points: [...(override?.points ?? []), ...(generated?.points ?? [])],\n };\n}\n\nfunction getChartElement(chartContext: unknown): Element | null {\n if (typeof Element === \"undefined\") return null;\n if (!chartContext || typeof chartContext !== \"object\" || !(\"el\" in chartContext)) return null;\n\n const element = (chartContext as { el?: unknown }).el;\n return element instanceof Element ? element : null;\n}\n\nfunction applyMinimumHorizontalBarWidth(\n chartContext: unknown,\n minBarWidth: number,\n valueMatrix: number[][]\n) {\n const root = getChartElement(chartContext);\n if (!root) return;\n\n root\n .querySelectorAll(\"[data-taildashboard-min-bar]\")\n .forEach((element) => element.remove());\n\n if (minBarWidth <= 0) return;\n\n const values = valueMatrix.flat();\n const paths = Array.from(root.querySelectorAll<SVGPathElement>(\".apexcharts-bar-area\"));\n const documentRef = root.ownerDocument;\n\n paths.forEach((path, index) => {\n const value = values[index] ?? 0;\n if (value < 0 || typeof path.getBBox !== \"function\") return;\n\n const box = path.getBBox();\n if (box.width >= minBarWidth || box.height <= 0) return;\n\n const overlay = documentRef.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n const radius = Math.min(5, box.height / 2, minBarWidth / 2);\n overlay.setAttribute(\"data-taildashboard-min-bar\", \"true\");\n overlay.setAttribute(\"x\", `${box.x}`);\n overlay.setAttribute(\"y\", `${box.y}`);\n overlay.setAttribute(\"width\", `${minBarWidth}`);\n overlay.setAttribute(\"height\", `${box.height}`);\n overlay.setAttribute(\"rx\", `${radius}`);\n overlay.setAttribute(\"fill\", path.getAttribute(\"fill\") ?? path.style.fill ?? \"currentColor\");\n overlay.setAttribute(\"opacity\", path.getAttribute(\"opacity\") ?? path.style.opacity ?? \"1\");\n overlay.style.pointerEvents = \"none\";\n path.parentNode?.insertBefore(overlay, path.nextSibling);\n });\n}\n\nfunction scheduleMinimumHorizontalBarWidth(\n chartContext: unknown,\n minBarWidth: number,\n valueMatrix: number[][]\n) {\n applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);\n\n if (typeof window === \"undefined\" || typeof window.requestAnimationFrame !== \"function\") return;\n\n window.requestAnimationFrame(() => {\n applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);\n });\n}\n\ntype ApexChartEvents = NonNullable<NonNullable<ApexOptions[\"chart\"]>[\"events\"]>;\ntype ApexLifecycleEvent = NonNullable<ApexChartEvents[\"mounted\"]>;\n\nfunction composeMinimumBarWidthEvent(\n userEvent: ApexLifecycleEvent | undefined,\n minBarWidth: number,\n valueMatrix: number[][]\n): ApexLifecycleEvent {\n return (chart, eventOptions) => {\n userEvent?.(chart, eventOptions);\n scheduleMinimumHorizontalBarWidth(chart, minBarWidth, valueMatrix);\n };\n}\n\nexport const BarChart: React.FC<BarChartProps> = ({\n series,\n categories,\n colors,\n barColors,\n height,\n horizontal,\n showBarValues = false,\n showBarPercentages = false,\n minBarWidth,\n minBarPercentage,\n percentageMode = \"total\",\n barValueFormatter,\n barPercentageFormatter,\n options,\n}) => {\n const [Chart, setChart] = React.useState<ReactApexChartComponent | null>(null);\n const effectiveSeries = series ?? defaultSeries;\n const effectiveCategories =\n categories ?? (options?.xaxis?.categories as string[] | undefined);\n const effectiveColors = colors ?? options?.colors ?? defaultOptions.colors;\n const chartSeries = applyBarColors(\n effectiveSeries,\n barColors,\n effectiveColors as string[] | undefined,\n effectiveCategories\n );\n const valueMatrix = getValueMatrix(effectiveSeries);\n const seriesTotal = getSeriesTotal(valueMatrix);\n const isHorizontal = horizontal ?? (options?.plotOptions?.bar?.horizontal === true);\n const hasGeneratedLabels = showBarValues || showBarPercentages;\n const resolvedMinBarWidth = minBarWidth ?? (minBarPercentage === 0 ? 0 : 30);\n const hasMinimumBarWidth = isHorizontal && resolvedMinBarWidth > 0;\n const baseGridOptions = isHorizontal\n ? mergeGridOptions(defaultOptions.grid, horizontalGridOptions)\n : defaultOptions.grid;\n const getLabelContext = (\n seriesIndex: number,\n dataPointIndex: number,\n total: number\n ): BarChartLabelContext => ({\n seriesIndex,\n dataPointIndex,\n seriesName: effectiveSeries[seriesIndex]?.name,\n category: effectiveCategories?.[dataPointIndex],\n total,\n });\n const generatedDataLabels: ApexOptions[\"dataLabels\"] | undefined = hasGeneratedLabels\n ? {\n enabled: true,\n textAnchor: \"middle\",\n offsetX: 0,\n offsetY: 0,\n background: {\n enabled: false,\n },\n style: {\n fontSize: \"12px\",\n fontWeight: 600,\n colors: [showBarPercentages ? \"#ffffff\" : \"#344054\"],\n },\n formatter: (_value, opts) => {\n const seriesIndex = opts?.seriesIndex ?? 0;\n const dataPointIndex = opts?.dataPointIndex ?? 0;\n const numericValue = valueMatrix[seriesIndex]?.[dataPointIndex] ?? 0;\n const total =\n percentageMode === \"category\"\n ? getCategoryTotal(valueMatrix, dataPointIndex)\n : seriesTotal;\n const context = getLabelContext(seriesIndex, dataPointIndex, total);\n\n if (showBarPercentages) {\n const percentage = total > 0 ? (numericValue / total) * 100 : 0;\n return barPercentageFormatter\n ? barPercentageFormatter(percentage, numericValue, context)\n : `${Math.round(percentage)}%`;\n }\n\n return barValueFormatter\n ? barValueFormatter(numericValue, context)\n : `${numericValue}`;\n },\n }\n : undefined;\n const generatedAnnotations: ApexOptions[\"annotations\"] | undefined =\n isHorizontal && showBarValues\n ? {\n points: effectiveSeries.flatMap((item, seriesIndex) =>\n item.data.map((dataPoint, dataPointIndex) => {\n const value = getDataValue(dataPoint) ?? 0;\n const total =\n percentageMode === \"category\"\n ? getCategoryTotal(valueMatrix, dataPointIndex)\n : seriesTotal;\n const context = getLabelContext(seriesIndex, dataPointIndex, total);\n return {\n x: value,\n y: dataPointIndex,\n seriesIndex,\n marker: {\n size: 0,\n },\n label: {\n text: barValueFormatter ? barValueFormatter(value, context) : `${value}`,\n borderWidth: 0,\n offsetY: -12,\n style: {\n background: \"transparent\",\n color: \"#344054\",\n fontSize: \"12px\",\n fontWeight: 600,\n padding: {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n },\n },\n },\n };\n })\n ),\n }\n : undefined;\n const userChartEvents = options?.chart?.events;\n const generatedChartEvents: ApexChartEvents | undefined = hasMinimumBarWidth\n ? {\n ...userChartEvents,\n mounted: composeMinimumBarWidthEvent(\n userChartEvents?.mounted,\n resolvedMinBarWidth,\n valueMatrix\n ),\n updated: composeMinimumBarWidthEvent(\n userChartEvents?.updated,\n resolvedMinBarWidth,\n valueMatrix\n ),\n animationEnd: composeMinimumBarWidthEvent(\n userChartEvents?.animationEnd,\n resolvedMinBarWidth,\n valueMatrix\n ),\n }\n : userChartEvents;\n const mergedOptions: ApexOptions = {\n ...defaultOptions,\n ...options,\n colors: effectiveColors,\n chart: {\n ...defaultOptions.chart,\n ...options?.chart,\n events: generatedChartEvents,\n animations: {\n ...defaultOptions.chart?.animations,\n ...options?.chart?.animations,\n animateGradually: {\n ...defaultOptions.chart?.animations?.animateGradually,\n ...options?.chart?.animations?.animateGradually,\n },\n dynamicAnimation: {\n ...defaultOptions.chart?.animations?.dynamicAnimation,\n ...options?.chart?.animations?.dynamicAnimation,\n },\n },\n height: height ?? options?.chart?.height ?? defaultOptions.chart?.height,\n },\n plotOptions: {\n ...defaultOptions.plotOptions,\n ...options?.plotOptions,\n bar: {\n ...defaultOptions.plotOptions?.bar,\n ...options?.plotOptions?.bar,\n horizontal: isHorizontal,\n ...(hasGeneratedLabels && {\n dataLabels: {\n ...options?.plotOptions?.bar?.dataLabels,\n position: showBarPercentages ? \"center\" : \"top\",\n },\n }),\n },\n },\n dataLabels: mergeDataLabels(\n defaultOptions.dataLabels,\n options?.dataLabels,\n generatedDataLabels\n ),\n xaxis: {\n ...defaultOptions.xaxis,\n ...options?.xaxis,\n categories:\n categories ??\n options?.xaxis?.categories ??\n defaultOptions.xaxis?.categories,\n },\n grid: mergeGridOptions(baseGridOptions, options?.grid),\n annotations: mergeAnnotations(options?.annotations, generatedAnnotations),\n tooltip: mergeTooltipOptions(defaultOptions.tooltip, options?.tooltip, undefined),\n };\n\n React.useEffect(() => {\n let isMounted = true;\n\n import(\"react-apexcharts\").then((module) => {\n if (isMounted) setChart(() => module.default as ReactApexChartComponent);\n });\n\n return () => {\n isMounted = false;\n };\n }, []);\n\n if (!Chart) return null;\n\n return (\n <Chart\n options={mergedOptions}\n series={chartSeries}\n type=\"bar\"\n height={height ?? 180}\n />\n );\n};\n"]}
@@ -176,27 +176,42 @@ function getSeriesTotal(matrix) {
176
176
  function getCategoryTotal(matrix, dataPointIndex) {
177
177
  return matrix.reduce((total, data) => total + (data[dataPointIndex] ?? 0), 0);
178
178
  }
179
- function getMaxValue(matrix) {
180
- return matrix.reduce(
181
- (max, data) => Math.max(max, ...data.map((value) => Math.max(0, value))),
182
- 0
183
- );
184
- }
185
- function setDataValue(value, nextValue) {
186
- if (typeof value === "number") return nextValue;
187
- if (Array.isArray(value)) return [value[0], nextValue, ...value.slice(2)];
188
- if (value && typeof value === "object" && "y" in value) {
189
- return { ...value, y: nextValue };
179
+ function withDataPointColor(value, fillColor, dataPointIndex, categories) {
180
+ if (Array.isArray(value)) {
181
+ return {
182
+ x: value[0],
183
+ y: value[1],
184
+ fillColor
185
+ };
186
+ }
187
+ if (value && typeof value === "object") {
188
+ return {
189
+ ...value,
190
+ fillColor
191
+ };
190
192
  }
191
- return value;
193
+ return {
194
+ x: categories?.[dataPointIndex] ?? dataPointIndex,
195
+ y: value,
196
+ fillColor
197
+ };
192
198
  }
193
- function applyMinimumBarValue(series, minimumValue) {
194
- return series.map((item) => ({
195
- ...item,
196
- data: item.data.map(
197
- (value) => getDataValue(value) === 0 ? setDataValue(value, minimumValue) : value
198
- )
199
- }));
199
+ function applyBarColors(series, barColors, fallbackColors, categories) {
200
+ if (!barColors?.length) return series;
201
+ return series.map((item, seriesIndex) => {
202
+ const fallbackColor = fallbackColors?.[seriesIndex] ?? fallbackColors?.[0] ?? defaultOptions.colors?.[0];
203
+ return {
204
+ ...item,
205
+ data: item.data.map(
206
+ (value, dataPointIndex) => withDataPointColor(
207
+ value,
208
+ barColors[dataPointIndex] ?? fallbackColor ?? "#465fff",
209
+ dataPointIndex,
210
+ categories
211
+ )
212
+ )
213
+ };
214
+ });
200
215
  }
201
216
  function mergeDataLabels(base, override, generated) {
202
217
  return {
@@ -243,15 +258,63 @@ function mergeAnnotations(override, generated) {
243
258
  points: [...override?.points ?? [], ...generated?.points ?? []]
244
259
  };
245
260
  }
261
+ function getChartElement(chartContext) {
262
+ if (typeof Element === "undefined") return null;
263
+ if (!chartContext || typeof chartContext !== "object" || !("el" in chartContext)) return null;
264
+ const element = chartContext.el;
265
+ return element instanceof Element ? element : null;
266
+ }
267
+ function applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix) {
268
+ const root = getChartElement(chartContext);
269
+ if (!root) return;
270
+ root.querySelectorAll("[data-taildashboard-min-bar]").forEach((element) => element.remove());
271
+ if (minBarWidth <= 0) return;
272
+ const values = valueMatrix.flat();
273
+ const paths = Array.from(root.querySelectorAll(".apexcharts-bar-area"));
274
+ const documentRef = root.ownerDocument;
275
+ paths.forEach((path, index) => {
276
+ const value = values[index] ?? 0;
277
+ if (value < 0 || typeof path.getBBox !== "function") return;
278
+ const box = path.getBBox();
279
+ if (box.width >= minBarWidth || box.height <= 0) return;
280
+ const overlay = documentRef.createElementNS("http://www.w3.org/2000/svg", "rect");
281
+ const radius = Math.min(5, box.height / 2, minBarWidth / 2);
282
+ overlay.setAttribute("data-taildashboard-min-bar", "true");
283
+ overlay.setAttribute("x", `${box.x}`);
284
+ overlay.setAttribute("y", `${box.y}`);
285
+ overlay.setAttribute("width", `${minBarWidth}`);
286
+ overlay.setAttribute("height", `${box.height}`);
287
+ overlay.setAttribute("rx", `${radius}`);
288
+ overlay.setAttribute("fill", path.getAttribute("fill") ?? path.style.fill ?? "currentColor");
289
+ overlay.setAttribute("opacity", path.getAttribute("opacity") ?? path.style.opacity ?? "1");
290
+ overlay.style.pointerEvents = "none";
291
+ path.parentNode?.insertBefore(overlay, path.nextSibling);
292
+ });
293
+ }
294
+ function scheduleMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix) {
295
+ applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);
296
+ if (typeof window === "undefined" || typeof window.requestAnimationFrame !== "function") return;
297
+ window.requestAnimationFrame(() => {
298
+ applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);
299
+ });
300
+ }
301
+ function composeMinimumBarWidthEvent(userEvent, minBarWidth, valueMatrix) {
302
+ return (chart, eventOptions) => {
303
+ userEvent?.(chart, eventOptions);
304
+ scheduleMinimumHorizontalBarWidth(chart, minBarWidth, valueMatrix);
305
+ };
306
+ }
246
307
  var BarChart = ({
247
308
  series,
248
309
  categories,
249
310
  colors,
311
+ barColors,
250
312
  height,
251
313
  horizontal,
252
314
  showBarValues = false,
253
315
  showBarPercentages = false,
254
- minBarPercentage = 2,
316
+ minBarWidth,
317
+ minBarPercentage,
255
318
  percentageMode = "total",
256
319
  barValueFormatter,
257
320
  barPercentageFormatter,
@@ -260,16 +323,19 @@ var BarChart = ({
260
323
  const [Chart, setChart] = React__default.default.useState(null);
261
324
  const effectiveSeries = series ?? defaultSeries;
262
325
  const effectiveCategories = categories ?? options?.xaxis?.categories;
326
+ const effectiveColors = colors ?? options?.colors ?? defaultOptions.colors;
327
+ const chartSeries = applyBarColors(
328
+ effectiveSeries,
329
+ barColors,
330
+ effectiveColors,
331
+ effectiveCategories
332
+ );
263
333
  const valueMatrix = getValueMatrix(effectiveSeries);
264
334
  const seriesTotal = getSeriesTotal(valueMatrix);
265
335
  const isHorizontal = horizontal ?? options?.plotOptions?.bar?.horizontal === true;
266
336
  const hasGeneratedLabels = showBarValues || showBarPercentages;
267
- const maxValue = getMaxValue(valueMatrix);
268
- const minimumValueScale = maxValue > 0 ? maxValue : 100;
269
- const minimumBarValue = minimumValueScale * (Math.max(0, minBarPercentage) / 100);
270
- const hasMinimumBarValue = isHorizontal && minimumBarValue > 0;
271
- const chartSeries = hasMinimumBarValue ? applyMinimumBarValue(effectiveSeries, minimumBarValue) : effectiveSeries;
272
- const chartValueMatrix = getValueMatrix(chartSeries);
337
+ const resolvedMinBarWidth = minBarWidth ?? (minBarPercentage === 0 ? 0 : 30);
338
+ const hasMinimumBarWidth = isHorizontal && resolvedMinBarWidth > 0;
273
339
  const baseGridOptions = isHorizontal ? mergeGridOptions(defaultOptions.grid, horizontalGridOptions) : defaultOptions.grid;
274
340
  const getLabelContext = (seriesIndex, dataPointIndex, total) => ({
275
341
  seriesIndex,
@@ -308,11 +374,10 @@ var BarChart = ({
308
374
  points: effectiveSeries.flatMap(
309
375
  (item, seriesIndex) => item.data.map((dataPoint, dataPointIndex) => {
310
376
  const value = getDataValue(dataPoint) ?? 0;
311
- const chartValue = chartValueMatrix[seriesIndex]?.[dataPointIndex] ?? value;
312
377
  const total = percentageMode === "category" ? getCategoryTotal(valueMatrix, dataPointIndex) : seriesTotal;
313
378
  const context = getLabelContext(seriesIndex, dataPointIndex, total);
314
379
  return {
315
- x: chartValue,
380
+ x: value,
316
381
  y: dataPointIndex,
317
382
  seriesIndex,
318
383
  marker: {
@@ -339,24 +404,33 @@ var BarChart = ({
339
404
  })
340
405
  )
341
406
  } : void 0;
342
- const generatedTooltip = hasMinimumBarValue ? {
343
- y: {
344
- formatter: (_value, opts) => {
345
- const originalValue = valueMatrix[opts?.seriesIndex ?? 0]?.[opts?.dataPointIndex ?? 0] ?? 0;
346
- const overrideY = Array.isArray(options?.tooltip?.y) ? void 0 : options?.tooltip?.y;
347
- const defaultY = Array.isArray(defaultOptions.tooltip?.y) ? void 0 : defaultOptions.tooltip?.y;
348
- const formatter = overrideY?.formatter ?? defaultY?.formatter;
349
- return formatter ? formatter(originalValue, opts) : `${originalValue}`;
350
- }
351
- }
352
- } : void 0;
407
+ const userChartEvents = options?.chart?.events;
408
+ const generatedChartEvents = hasMinimumBarWidth ? {
409
+ ...userChartEvents,
410
+ mounted: composeMinimumBarWidthEvent(
411
+ userChartEvents?.mounted,
412
+ resolvedMinBarWidth,
413
+ valueMatrix
414
+ ),
415
+ updated: composeMinimumBarWidthEvent(
416
+ userChartEvents?.updated,
417
+ resolvedMinBarWidth,
418
+ valueMatrix
419
+ ),
420
+ animationEnd: composeMinimumBarWidthEvent(
421
+ userChartEvents?.animationEnd,
422
+ resolvedMinBarWidth,
423
+ valueMatrix
424
+ )
425
+ } : userChartEvents;
353
426
  const mergedOptions = {
354
427
  ...defaultOptions,
355
428
  ...options,
356
- colors: colors ?? options?.colors ?? defaultOptions.colors,
429
+ colors: effectiveColors,
357
430
  chart: {
358
431
  ...defaultOptions.chart,
359
432
  ...options?.chart,
433
+ events: generatedChartEvents,
360
434
  animations: {
361
435
  ...defaultOptions.chart?.animations,
362
436
  ...options?.chart?.animations,
@@ -394,14 +468,11 @@ var BarChart = ({
394
468
  xaxis: {
395
469
  ...defaultOptions.xaxis,
396
470
  ...options?.xaxis,
397
- categories: categories ?? options?.xaxis?.categories ?? defaultOptions.xaxis?.categories,
398
- ...hasMinimumBarValue && options?.xaxis?.max === void 0 && {
399
- max: minimumValueScale
400
- }
471
+ categories: categories ?? options?.xaxis?.categories ?? defaultOptions.xaxis?.categories
401
472
  },
402
473
  grid: mergeGridOptions(baseGridOptions, options?.grid),
403
474
  annotations: mergeAnnotations(options?.annotations, generatedAnnotations),
404
- tooltip: mergeTooltipOptions(defaultOptions.tooltip, options?.tooltip, generatedTooltip)
475
+ tooltip: mergeTooltipOptions(defaultOptions.tooltip, options?.tooltip, void 0)
405
476
  };
406
477
  React__default.default.useEffect(() => {
407
478
  let isMounted = true;
@@ -425,5 +496,5 @@ var BarChart = ({
425
496
  };
426
497
 
427
498
  exports.BarChart = BarChart;
428
- //# sourceMappingURL=chunk-WIBFUDZM.cjs.map
429
- //# sourceMappingURL=chunk-WIBFUDZM.cjs.map
499
+ //# sourceMappingURL=chunk-MIIZ4KLS.cjs.map
500
+ //# sourceMappingURL=chunk-MIIZ4KLS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Charts/BarChart.tsx"],"names":["React","jsx"],"mappings":"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","file":"chunk-MIIZ4KLS.cjs","sourcesContent":["\"use client\";\nimport React from \"react\";\nimport type { ApexOptions } from \"apexcharts\";\n\ntype ReactApexChartProps = {\n options: ApexOptions;\n series: ApexAxisChartSeries;\n type: \"bar\" | \"area\";\n height: number;\n};\ntype ReactApexChartComponent = React.ComponentType<ReactApexChartProps>;\n\nexport interface BarChartProps {\n series?: ApexAxisChartSeries;\n categories?: string[];\n colors?: string[];\n barColors?: string[];\n height?: number;\n horizontal?: boolean;\n showBarValues?: boolean;\n showBarPercentages?: boolean;\n minBarWidth?: number;\n /** @deprecated Use minBarWidth. Passing 0 still disables the minimum visual width. */\n minBarPercentage?: number;\n percentageMode?: \"total\" | \"category\";\n barValueFormatter?: (value: number, context: BarChartLabelContext) => string;\n barPercentageFormatter?: (\n percentage: number,\n value: number,\n context: BarChartLabelContext\n ) => string;\n options?: ApexOptions;\n}\n\nexport interface BarChartLabelContext {\n seriesIndex: number;\n dataPointIndex: number;\n seriesName?: string;\n category?: string;\n total: number;\n}\n\nconst defaultOptions: ApexOptions = {\n colors: [\"#465fff\"],\n chart: {\n fontFamily: \"Outfit, sans-serif\",\n type: \"bar\",\n height: 180,\n animations: {\n enabled: true,\n speed: 200,\n animateGradually: {\n enabled: false,\n delay: 0,\n },\n dynamicAnimation: {\n enabled: true,\n speed: 175,\n },\n },\n toolbar: {\n show: false,\n },\n },\n plotOptions: {\n bar: {\n horizontal: false,\n columnWidth: \"39%\",\n borderRadius: 5,\n borderRadiusApplication: \"end\",\n },\n },\n dataLabels: {\n enabled: false,\n },\n // No transparent stroke around the columns: it shrinks and shifts the\n // painted bar inside its allocated slot, so the hover highlight band\n // (crosshairs width \"barWidth\" = the allocated width) would render wider\n // than — and offset from — the visible bar.\n stroke: {\n show: false,\n },\n xaxis: {\n categories: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n axisBorder: {\n show: false,\n },\n axisTicks: {\n show: false,\n },\n // Match the hover highlight band to the bar width (the default band spans\n // the whole category slot, looking ~3x wider than the 39% columns).\n crosshairs: {\n width: \"barWidth\",\n },\n },\n legend: {\n show: true,\n position: \"top\",\n horizontalAlign: \"left\",\n fontFamily: \"Outfit\",\n // Rounded, border-less swatches that echo the column styling. ApexCharts\n // sets the marker span's `color` to the series color, so `currentColor`\n // picks it up; `customHTML` lets us round the corners (the built-in shapes\n // are sharp SVG paths that CSS border-radius can't touch).\n markers: {\n size: 7,\n strokeWidth: 0,\n customHTML: () =>\n '<span style=\"display:block;height:100%;width:100%;border-radius:3px;background:currentColor\"></span>',\n },\n },\n yaxis: {\n title: {\n text: undefined,\n },\n },\n grid: {\n yaxis: {\n lines: {\n show: true,\n },\n },\n },\n fill: {\n opacity: 1,\n },\n tooltip: {\n x: {\n show: false,\n },\n y: {\n formatter: (val: number) => `${val}`,\n },\n },\n};\n\nconst defaultSeries: ApexAxisChartSeries = [\n {\n name: \"Sales\",\n data: [168, 385, 201, 298, 187, 195, 291, 110, 215, 390, 280, 112],\n },\n];\n\nconst horizontalGridOptions: ApexOptions[\"grid\"] = {\n borderColor: \"transparent\",\n xaxis: {\n lines: {\n show: false,\n },\n },\n yaxis: {\n lines: {\n show: false,\n },\n },\n};\n\nfunction mergeGridOptions(\n base: ApexOptions[\"grid\"],\n override: ApexOptions[\"grid\"]\n): ApexOptions[\"grid\"] {\n return {\n ...base,\n ...override,\n xaxis: {\n ...base?.xaxis,\n ...override?.xaxis,\n lines: {\n ...base?.xaxis?.lines,\n ...override?.xaxis?.lines,\n },\n },\n yaxis: {\n ...base?.yaxis,\n ...override?.yaxis,\n lines: {\n ...base?.yaxis?.lines,\n ...override?.yaxis?.lines,\n },\n },\n };\n}\n\nfunction getDataValue(value: unknown): number | null {\n if (typeof value === \"number\") return value;\n if (Array.isArray(value) && typeof value[1] === \"number\") return value[1];\n if (value && typeof value === \"object\" && \"y\" in value) {\n const y = (value as { y: unknown }).y;\n return typeof y === \"number\" ? y : null;\n }\n return null;\n}\n\nfunction getValueMatrix(series: ApexAxisChartSeries): number[][] {\n return series.map((item) => item.data.map((value) => getDataValue(value) ?? 0));\n}\n\nfunction getSeriesTotal(matrix: number[][]): number {\n return matrix.reduce(\n (seriesTotal, data) => seriesTotal + data.reduce((total, value) => total + value, 0),\n 0\n );\n}\n\nfunction getCategoryTotal(matrix: number[][], dataPointIndex: number): number {\n return matrix.reduce((total, data) => total + (data[dataPointIndex] ?? 0), 0);\n}\n\nfunction withDataPointColor(\n value: unknown,\n fillColor: string,\n dataPointIndex: number,\n categories?: string[]\n): unknown {\n if (Array.isArray(value)) {\n return {\n x: value[0],\n y: value[1],\n fillColor,\n };\n }\n\n if (value && typeof value === \"object\") {\n return {\n ...value,\n fillColor,\n };\n }\n\n return {\n x: categories?.[dataPointIndex] ?? dataPointIndex,\n y: value,\n fillColor,\n };\n}\n\nfunction applyBarColors(\n series: ApexAxisChartSeries,\n barColors: string[] | undefined,\n fallbackColors: string[] | undefined,\n categories?: string[]\n): ApexAxisChartSeries {\n if (!barColors?.length) return series;\n\n return series.map((item, seriesIndex) => {\n const fallbackColor =\n fallbackColors?.[seriesIndex] ?? fallbackColors?.[0] ?? defaultOptions.colors?.[0];\n\n return {\n ...item,\n data: item.data.map((value, dataPointIndex) =>\n withDataPointColor(\n value,\n barColors[dataPointIndex] ?? fallbackColor ?? \"#465fff\",\n dataPointIndex,\n categories\n )\n ) as typeof item.data,\n };\n });\n}\n\nfunction mergeDataLabels(\n base: ApexOptions[\"dataLabels\"],\n override: ApexOptions[\"dataLabels\"],\n generated: ApexOptions[\"dataLabels\"]\n): ApexOptions[\"dataLabels\"] {\n return {\n ...base,\n ...override,\n ...generated,\n style: {\n ...base?.style,\n ...override?.style,\n ...generated?.style,\n },\n background: {\n ...base?.background,\n ...override?.background,\n ...generated?.background,\n },\n };\n}\n\nfunction mergeTooltipOptions(\n base: ApexOptions[\"tooltip\"],\n override: ApexOptions[\"tooltip\"],\n generated: ApexOptions[\"tooltip\"]\n): ApexOptions[\"tooltip\"] {\n const baseY = Array.isArray(base?.y) ? undefined : base?.y;\n const overrideY = Array.isArray(override?.y) ? undefined : override?.y;\n const generatedY = Array.isArray(generated?.y) ? undefined : generated?.y;\n\n return {\n ...base,\n ...override,\n ...generated,\n x: {\n ...base?.x,\n ...override?.x,\n ...generated?.x,\n },\n y: {\n ...baseY,\n ...overrideY,\n ...generatedY,\n },\n };\n}\n\nfunction mergeAnnotations(\n override: ApexOptions[\"annotations\"],\n generated: ApexOptions[\"annotations\"]\n): ApexOptions[\"annotations\"] | undefined {\n if (!override && !generated) return undefined;\n return {\n ...override,\n ...generated,\n points: [...(override?.points ?? []), ...(generated?.points ?? [])],\n };\n}\n\nfunction getChartElement(chartContext: unknown): Element | null {\n if (typeof Element === \"undefined\") return null;\n if (!chartContext || typeof chartContext !== \"object\" || !(\"el\" in chartContext)) return null;\n\n const element = (chartContext as { el?: unknown }).el;\n return element instanceof Element ? element : null;\n}\n\nfunction applyMinimumHorizontalBarWidth(\n chartContext: unknown,\n minBarWidth: number,\n valueMatrix: number[][]\n) {\n const root = getChartElement(chartContext);\n if (!root) return;\n\n root\n .querySelectorAll(\"[data-taildashboard-min-bar]\")\n .forEach((element) => element.remove());\n\n if (minBarWidth <= 0) return;\n\n const values = valueMatrix.flat();\n const paths = Array.from(root.querySelectorAll<SVGPathElement>(\".apexcharts-bar-area\"));\n const documentRef = root.ownerDocument;\n\n paths.forEach((path, index) => {\n const value = values[index] ?? 0;\n if (value < 0 || typeof path.getBBox !== \"function\") return;\n\n const box = path.getBBox();\n if (box.width >= minBarWidth || box.height <= 0) return;\n\n const overlay = documentRef.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n const radius = Math.min(5, box.height / 2, minBarWidth / 2);\n overlay.setAttribute(\"data-taildashboard-min-bar\", \"true\");\n overlay.setAttribute(\"x\", `${box.x}`);\n overlay.setAttribute(\"y\", `${box.y}`);\n overlay.setAttribute(\"width\", `${minBarWidth}`);\n overlay.setAttribute(\"height\", `${box.height}`);\n overlay.setAttribute(\"rx\", `${radius}`);\n overlay.setAttribute(\"fill\", path.getAttribute(\"fill\") ?? path.style.fill ?? \"currentColor\");\n overlay.setAttribute(\"opacity\", path.getAttribute(\"opacity\") ?? path.style.opacity ?? \"1\");\n overlay.style.pointerEvents = \"none\";\n path.parentNode?.insertBefore(overlay, path.nextSibling);\n });\n}\n\nfunction scheduleMinimumHorizontalBarWidth(\n chartContext: unknown,\n minBarWidth: number,\n valueMatrix: number[][]\n) {\n applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);\n\n if (typeof window === \"undefined\" || typeof window.requestAnimationFrame !== \"function\") return;\n\n window.requestAnimationFrame(() => {\n applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);\n });\n}\n\ntype ApexChartEvents = NonNullable<NonNullable<ApexOptions[\"chart\"]>[\"events\"]>;\ntype ApexLifecycleEvent = NonNullable<ApexChartEvents[\"mounted\"]>;\n\nfunction composeMinimumBarWidthEvent(\n userEvent: ApexLifecycleEvent | undefined,\n minBarWidth: number,\n valueMatrix: number[][]\n): ApexLifecycleEvent {\n return (chart, eventOptions) => {\n userEvent?.(chart, eventOptions);\n scheduleMinimumHorizontalBarWidth(chart, minBarWidth, valueMatrix);\n };\n}\n\nexport const BarChart: React.FC<BarChartProps> = ({\n series,\n categories,\n colors,\n barColors,\n height,\n horizontal,\n showBarValues = false,\n showBarPercentages = false,\n minBarWidth,\n minBarPercentage,\n percentageMode = \"total\",\n barValueFormatter,\n barPercentageFormatter,\n options,\n}) => {\n const [Chart, setChart] = React.useState<ReactApexChartComponent | null>(null);\n const effectiveSeries = series ?? defaultSeries;\n const effectiveCategories =\n categories ?? (options?.xaxis?.categories as string[] | undefined);\n const effectiveColors = colors ?? options?.colors ?? defaultOptions.colors;\n const chartSeries = applyBarColors(\n effectiveSeries,\n barColors,\n effectiveColors as string[] | undefined,\n effectiveCategories\n );\n const valueMatrix = getValueMatrix(effectiveSeries);\n const seriesTotal = getSeriesTotal(valueMatrix);\n const isHorizontal = horizontal ?? (options?.plotOptions?.bar?.horizontal === true);\n const hasGeneratedLabels = showBarValues || showBarPercentages;\n const resolvedMinBarWidth = minBarWidth ?? (minBarPercentage === 0 ? 0 : 30);\n const hasMinimumBarWidth = isHorizontal && resolvedMinBarWidth > 0;\n const baseGridOptions = isHorizontal\n ? mergeGridOptions(defaultOptions.grid, horizontalGridOptions)\n : defaultOptions.grid;\n const getLabelContext = (\n seriesIndex: number,\n dataPointIndex: number,\n total: number\n ): BarChartLabelContext => ({\n seriesIndex,\n dataPointIndex,\n seriesName: effectiveSeries[seriesIndex]?.name,\n category: effectiveCategories?.[dataPointIndex],\n total,\n });\n const generatedDataLabels: ApexOptions[\"dataLabels\"] | undefined = hasGeneratedLabels\n ? {\n enabled: true,\n textAnchor: \"middle\",\n offsetX: 0,\n offsetY: 0,\n background: {\n enabled: false,\n },\n style: {\n fontSize: \"12px\",\n fontWeight: 600,\n colors: [showBarPercentages ? \"#ffffff\" : \"#344054\"],\n },\n formatter: (_value, opts) => {\n const seriesIndex = opts?.seriesIndex ?? 0;\n const dataPointIndex = opts?.dataPointIndex ?? 0;\n const numericValue = valueMatrix[seriesIndex]?.[dataPointIndex] ?? 0;\n const total =\n percentageMode === \"category\"\n ? getCategoryTotal(valueMatrix, dataPointIndex)\n : seriesTotal;\n const context = getLabelContext(seriesIndex, dataPointIndex, total);\n\n if (showBarPercentages) {\n const percentage = total > 0 ? (numericValue / total) * 100 : 0;\n return barPercentageFormatter\n ? barPercentageFormatter(percentage, numericValue, context)\n : `${Math.round(percentage)}%`;\n }\n\n return barValueFormatter\n ? barValueFormatter(numericValue, context)\n : `${numericValue}`;\n },\n }\n : undefined;\n const generatedAnnotations: ApexOptions[\"annotations\"] | undefined =\n isHorizontal && showBarValues\n ? {\n points: effectiveSeries.flatMap((item, seriesIndex) =>\n item.data.map((dataPoint, dataPointIndex) => {\n const value = getDataValue(dataPoint) ?? 0;\n const total =\n percentageMode === \"category\"\n ? getCategoryTotal(valueMatrix, dataPointIndex)\n : seriesTotal;\n const context = getLabelContext(seriesIndex, dataPointIndex, total);\n return {\n x: value,\n y: dataPointIndex,\n seriesIndex,\n marker: {\n size: 0,\n },\n label: {\n text: barValueFormatter ? barValueFormatter(value, context) : `${value}`,\n borderWidth: 0,\n offsetY: -12,\n style: {\n background: \"transparent\",\n color: \"#344054\",\n fontSize: \"12px\",\n fontWeight: 600,\n padding: {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n },\n },\n },\n };\n })\n ),\n }\n : undefined;\n const userChartEvents = options?.chart?.events;\n const generatedChartEvents: ApexChartEvents | undefined = hasMinimumBarWidth\n ? {\n ...userChartEvents,\n mounted: composeMinimumBarWidthEvent(\n userChartEvents?.mounted,\n resolvedMinBarWidth,\n valueMatrix\n ),\n updated: composeMinimumBarWidthEvent(\n userChartEvents?.updated,\n resolvedMinBarWidth,\n valueMatrix\n ),\n animationEnd: composeMinimumBarWidthEvent(\n userChartEvents?.animationEnd,\n resolvedMinBarWidth,\n valueMatrix\n ),\n }\n : userChartEvents;\n const mergedOptions: ApexOptions = {\n ...defaultOptions,\n ...options,\n colors: effectiveColors,\n chart: {\n ...defaultOptions.chart,\n ...options?.chart,\n events: generatedChartEvents,\n animations: {\n ...defaultOptions.chart?.animations,\n ...options?.chart?.animations,\n animateGradually: {\n ...defaultOptions.chart?.animations?.animateGradually,\n ...options?.chart?.animations?.animateGradually,\n },\n dynamicAnimation: {\n ...defaultOptions.chart?.animations?.dynamicAnimation,\n ...options?.chart?.animations?.dynamicAnimation,\n },\n },\n height: height ?? options?.chart?.height ?? defaultOptions.chart?.height,\n },\n plotOptions: {\n ...defaultOptions.plotOptions,\n ...options?.plotOptions,\n bar: {\n ...defaultOptions.plotOptions?.bar,\n ...options?.plotOptions?.bar,\n horizontal: isHorizontal,\n ...(hasGeneratedLabels && {\n dataLabels: {\n ...options?.plotOptions?.bar?.dataLabels,\n position: showBarPercentages ? \"center\" : \"top\",\n },\n }),\n },\n },\n dataLabels: mergeDataLabels(\n defaultOptions.dataLabels,\n options?.dataLabels,\n generatedDataLabels\n ),\n xaxis: {\n ...defaultOptions.xaxis,\n ...options?.xaxis,\n categories:\n categories ??\n options?.xaxis?.categories ??\n defaultOptions.xaxis?.categories,\n },\n grid: mergeGridOptions(baseGridOptions, options?.grid),\n annotations: mergeAnnotations(options?.annotations, generatedAnnotations),\n tooltip: mergeTooltipOptions(defaultOptions.tooltip, options?.tooltip, undefined),\n };\n\n React.useEffect(() => {\n let isMounted = true;\n\n import(\"react-apexcharts\").then((module) => {\n if (isMounted) setChart(() => module.default as ReactApexChartComponent);\n });\n\n return () => {\n isMounted = false;\n };\n }, []);\n\n if (!Chart) return null;\n\n return (\n <Chart\n options={mergedOptions}\n series={chartSeries}\n type=\"bar\"\n height={height ?? 180}\n />\n );\n};\n"]}