@andreagiugni/tailwind-dashboard-ui 1.0.17 → 1.0.18

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.
@@ -291,17 +291,69 @@ function applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix)
291
291
  path.parentNode?.insertBefore(overlay, path.nextSibling);
292
292
  });
293
293
  }
294
- function scheduleMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix) {
295
- applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);
294
+ function centerHorizontalBarDataLabels(chartContext, minBarWidth, valueMatrix) {
295
+ const root = getChartElement(chartContext);
296
+ if (!root) return;
297
+ const values = valueMatrix.flat();
298
+ const paths = Array.from(root.querySelectorAll(".apexcharts-bar-area"));
299
+ const labels = Array.from(root.querySelectorAll(".apexcharts-datalabel"));
300
+ paths.forEach((path, index) => {
301
+ const label = labels[index];
302
+ const value = values[index] ?? 0;
303
+ if (!label || value < 0 || typeof path.getBBox !== "function") return;
304
+ const box = path.getBBox();
305
+ if (box.height <= 0) return;
306
+ const width = value >= 0 && box.width < minBarWidth ? minBarWidth : box.width;
307
+ const centerX = box.x + width / 2;
308
+ const centerY = box.y + box.height / 2;
309
+ label.setAttribute("x", `${centerX}`);
310
+ label.setAttribute("y", `${centerY}`);
311
+ label.setAttribute("text-anchor", "middle");
312
+ label.setAttribute("dominant-baseline", "middle");
313
+ label.setAttribute("alignment-baseline", "middle");
314
+ label.querySelectorAll("tspan").forEach((tspan) => {
315
+ tspan.setAttribute("x", `${centerX}`);
316
+ tspan.setAttribute("y", `${centerY}`);
317
+ });
318
+ });
319
+ }
320
+ function runHorizontalBarDomAdjustments(chartContext, minBarWidth, valueMatrix, shouldApplyMinBarWidth, shouldCenterDataLabels) {
321
+ if (shouldApplyMinBarWidth) {
322
+ applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);
323
+ }
324
+ if (shouldCenterDataLabels) {
325
+ centerHorizontalBarDataLabels(chartContext, minBarWidth, valueMatrix);
326
+ }
327
+ }
328
+ function scheduleHorizontalBarDomAdjustments(chartContext, minBarWidth, valueMatrix, shouldApplyMinBarWidth, shouldCenterDataLabels) {
329
+ runHorizontalBarDomAdjustments(
330
+ chartContext,
331
+ minBarWidth,
332
+ valueMatrix,
333
+ shouldApplyMinBarWidth,
334
+ shouldCenterDataLabels
335
+ );
296
336
  if (typeof window === "undefined" || typeof window.requestAnimationFrame !== "function") return;
297
337
  window.requestAnimationFrame(() => {
298
- applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);
338
+ runHorizontalBarDomAdjustments(
339
+ chartContext,
340
+ minBarWidth,
341
+ valueMatrix,
342
+ shouldApplyMinBarWidth,
343
+ shouldCenterDataLabels
344
+ );
299
345
  });
300
346
  }
301
- function composeMinimumBarWidthEvent(userEvent, minBarWidth, valueMatrix) {
347
+ function composeHorizontalBarLifecycleEvent(userEvent, minBarWidth, valueMatrix, shouldApplyMinBarWidth, shouldCenterDataLabels) {
302
348
  return (chart, eventOptions) => {
303
349
  userEvent?.(chart, eventOptions);
304
- scheduleMinimumHorizontalBarWidth(chart, minBarWidth, valueMatrix);
350
+ scheduleHorizontalBarDomAdjustments(
351
+ chart,
352
+ minBarWidth,
353
+ valueMatrix,
354
+ shouldApplyMinBarWidth,
355
+ shouldCenterDataLabels
356
+ );
305
357
  };
306
358
  }
307
359
  var BarChart = ({
@@ -336,6 +388,8 @@ var BarChart = ({
336
388
  const hasGeneratedLabels = showBarValues || showBarPercentages;
337
389
  const resolvedMinBarWidth = minBarWidth ?? (minBarPercentage === 0 ? 0 : 30);
338
390
  const hasMinimumBarWidth = isHorizontal && resolvedMinBarWidth > 0;
391
+ const shouldCenterDataLabels = isHorizontal && showBarPercentages;
392
+ const hasHorizontalDomAdjustments = hasMinimumBarWidth || shouldCenterDataLabels;
339
393
  const baseGridOptions = isHorizontal ? mergeGridOptions(defaultOptions.grid, horizontalGridOptions) : defaultOptions.grid;
340
394
  const getLabelContext = (seriesIndex, dataPointIndex, total) => ({
341
395
  seriesIndex,
@@ -405,22 +459,28 @@ var BarChart = ({
405
459
  )
406
460
  } : void 0;
407
461
  const userChartEvents = options?.chart?.events;
408
- const generatedChartEvents = hasMinimumBarWidth ? {
462
+ const generatedChartEvents = hasHorizontalDomAdjustments ? {
409
463
  ...userChartEvents,
410
- mounted: composeMinimumBarWidthEvent(
464
+ mounted: composeHorizontalBarLifecycleEvent(
411
465
  userChartEvents?.mounted,
412
466
  resolvedMinBarWidth,
413
- valueMatrix
467
+ valueMatrix,
468
+ hasMinimumBarWidth,
469
+ shouldCenterDataLabels
414
470
  ),
415
- updated: composeMinimumBarWidthEvent(
471
+ updated: composeHorizontalBarLifecycleEvent(
416
472
  userChartEvents?.updated,
417
473
  resolvedMinBarWidth,
418
- valueMatrix
474
+ valueMatrix,
475
+ hasMinimumBarWidth,
476
+ shouldCenterDataLabels
419
477
  ),
420
- animationEnd: composeMinimumBarWidthEvent(
478
+ animationEnd: composeHorizontalBarLifecycleEvent(
421
479
  userChartEvents?.animationEnd,
422
480
  resolvedMinBarWidth,
423
- valueMatrix
481
+ valueMatrix,
482
+ hasMinimumBarWidth,
483
+ shouldCenterDataLabels
424
484
  )
425
485
  } : userChartEvents;
426
486
  const mergedOptions = {
@@ -496,5 +556,5 @@ var BarChart = ({
496
556
  };
497
557
 
498
558
  exports.BarChart = BarChart;
499
- //# sourceMappingURL=chunk-MIIZ4KLS.cjs.map
500
- //# sourceMappingURL=chunk-MIIZ4KLS.cjs.map
559
+ //# sourceMappingURL=chunk-MSIXHONY.cjs.map
560
+ //# sourceMappingURL=chunk-MSIXHONY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Charts/BarChart.tsx"],"names":["React","jsx"],"mappings":"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","file":"chunk-MSIXHONY.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 centerHorizontalBarDataLabels(\n chartContext: unknown,\n minBarWidth: number,\n valueMatrix: number[][]\n) {\n const root = getChartElement(chartContext);\n if (!root) return;\n\n const values = valueMatrix.flat();\n const paths = Array.from(root.querySelectorAll<SVGPathElement>(\".apexcharts-bar-area\"));\n const labels = Array.from(root.querySelectorAll<SVGTextElement>(\".apexcharts-datalabel\"));\n\n paths.forEach((path, index) => {\n const label = labels[index];\n const value = values[index] ?? 0;\n if (!label || value < 0 || typeof path.getBBox !== \"function\") return;\n\n const box = path.getBBox();\n if (box.height <= 0) return;\n\n const width = value >= 0 && box.width < minBarWidth ? minBarWidth : box.width;\n const centerX = box.x + width / 2;\n const centerY = box.y + box.height / 2;\n\n label.setAttribute(\"x\", `${centerX}`);\n label.setAttribute(\"y\", `${centerY}`);\n label.setAttribute(\"text-anchor\", \"middle\");\n label.setAttribute(\"dominant-baseline\", \"middle\");\n label.setAttribute(\"alignment-baseline\", \"middle\");\n label.querySelectorAll(\"tspan\").forEach((tspan) => {\n tspan.setAttribute(\"x\", `${centerX}`);\n tspan.setAttribute(\"y\", `${centerY}`);\n });\n });\n}\n\ntype ApexChartEvents = NonNullable<NonNullable<ApexOptions[\"chart\"]>[\"events\"]>;\ntype ApexLifecycleEvent = NonNullable<ApexChartEvents[\"mounted\"]>;\n\nfunction runHorizontalBarDomAdjustments(\n chartContext: unknown,\n minBarWidth: number,\n valueMatrix: number[][],\n shouldApplyMinBarWidth: boolean,\n shouldCenterDataLabels: boolean\n) {\n if (shouldApplyMinBarWidth) {\n applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);\n }\n if (shouldCenterDataLabels) {\n centerHorizontalBarDataLabels(chartContext, minBarWidth, valueMatrix);\n }\n}\n\nfunction scheduleHorizontalBarDomAdjustments(\n chartContext: unknown,\n minBarWidth: number,\n valueMatrix: number[][],\n shouldApplyMinBarWidth: boolean,\n shouldCenterDataLabels: boolean\n) {\n runHorizontalBarDomAdjustments(\n chartContext,\n minBarWidth,\n valueMatrix,\n shouldApplyMinBarWidth,\n shouldCenterDataLabels\n );\n\n if (typeof window === \"undefined\" || typeof window.requestAnimationFrame !== \"function\") return;\n\n window.requestAnimationFrame(() => {\n runHorizontalBarDomAdjustments(\n chartContext,\n minBarWidth,\n valueMatrix,\n shouldApplyMinBarWidth,\n shouldCenterDataLabels\n );\n });\n}\n\nfunction composeHorizontalBarLifecycleEvent(\n userEvent: ApexLifecycleEvent | undefined,\n minBarWidth: number,\n valueMatrix: number[][],\n shouldApplyMinBarWidth: boolean,\n shouldCenterDataLabels: boolean\n): ApexLifecycleEvent {\n return (chart, eventOptions) => {\n userEvent?.(chart, eventOptions);\n scheduleHorizontalBarDomAdjustments(\n chart,\n minBarWidth,\n valueMatrix,\n shouldApplyMinBarWidth,\n shouldCenterDataLabels\n );\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 shouldCenterDataLabels = isHorizontal && showBarPercentages;\n const hasHorizontalDomAdjustments = hasMinimumBarWidth || shouldCenterDataLabels;\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 = hasHorizontalDomAdjustments\n ? {\n ...userChartEvents,\n mounted: composeHorizontalBarLifecycleEvent(\n userChartEvents?.mounted,\n resolvedMinBarWidth,\n valueMatrix,\n hasMinimumBarWidth,\n shouldCenterDataLabels\n ),\n updated: composeHorizontalBarLifecycleEvent(\n userChartEvents?.updated,\n resolvedMinBarWidth,\n valueMatrix,\n hasMinimumBarWidth,\n shouldCenterDataLabels\n ),\n animationEnd: composeHorizontalBarLifecycleEvent(\n userChartEvents?.animationEnd,\n resolvedMinBarWidth,\n valueMatrix,\n hasMinimumBarWidth,\n shouldCenterDataLabels\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"]}
@@ -285,17 +285,69 @@ function applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix)
285
285
  path.parentNode?.insertBefore(overlay, path.nextSibling);
286
286
  });
287
287
  }
288
- function scheduleMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix) {
289
- applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);
288
+ function centerHorizontalBarDataLabels(chartContext, minBarWidth, valueMatrix) {
289
+ const root = getChartElement(chartContext);
290
+ if (!root) return;
291
+ const values = valueMatrix.flat();
292
+ const paths = Array.from(root.querySelectorAll(".apexcharts-bar-area"));
293
+ const labels = Array.from(root.querySelectorAll(".apexcharts-datalabel"));
294
+ paths.forEach((path, index) => {
295
+ const label = labels[index];
296
+ const value = values[index] ?? 0;
297
+ if (!label || value < 0 || typeof path.getBBox !== "function") return;
298
+ const box = path.getBBox();
299
+ if (box.height <= 0) return;
300
+ const width = value >= 0 && box.width < minBarWidth ? minBarWidth : box.width;
301
+ const centerX = box.x + width / 2;
302
+ const centerY = box.y + box.height / 2;
303
+ label.setAttribute("x", `${centerX}`);
304
+ label.setAttribute("y", `${centerY}`);
305
+ label.setAttribute("text-anchor", "middle");
306
+ label.setAttribute("dominant-baseline", "middle");
307
+ label.setAttribute("alignment-baseline", "middle");
308
+ label.querySelectorAll("tspan").forEach((tspan) => {
309
+ tspan.setAttribute("x", `${centerX}`);
310
+ tspan.setAttribute("y", `${centerY}`);
311
+ });
312
+ });
313
+ }
314
+ function runHorizontalBarDomAdjustments(chartContext, minBarWidth, valueMatrix, shouldApplyMinBarWidth, shouldCenterDataLabels) {
315
+ if (shouldApplyMinBarWidth) {
316
+ applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);
317
+ }
318
+ if (shouldCenterDataLabels) {
319
+ centerHorizontalBarDataLabels(chartContext, minBarWidth, valueMatrix);
320
+ }
321
+ }
322
+ function scheduleHorizontalBarDomAdjustments(chartContext, minBarWidth, valueMatrix, shouldApplyMinBarWidth, shouldCenterDataLabels) {
323
+ runHorizontalBarDomAdjustments(
324
+ chartContext,
325
+ minBarWidth,
326
+ valueMatrix,
327
+ shouldApplyMinBarWidth,
328
+ shouldCenterDataLabels
329
+ );
290
330
  if (typeof window === "undefined" || typeof window.requestAnimationFrame !== "function") return;
291
331
  window.requestAnimationFrame(() => {
292
- applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);
332
+ runHorizontalBarDomAdjustments(
333
+ chartContext,
334
+ minBarWidth,
335
+ valueMatrix,
336
+ shouldApplyMinBarWidth,
337
+ shouldCenterDataLabels
338
+ );
293
339
  });
294
340
  }
295
- function composeMinimumBarWidthEvent(userEvent, minBarWidth, valueMatrix) {
341
+ function composeHorizontalBarLifecycleEvent(userEvent, minBarWidth, valueMatrix, shouldApplyMinBarWidth, shouldCenterDataLabels) {
296
342
  return (chart, eventOptions) => {
297
343
  userEvent?.(chart, eventOptions);
298
- scheduleMinimumHorizontalBarWidth(chart, minBarWidth, valueMatrix);
344
+ scheduleHorizontalBarDomAdjustments(
345
+ chart,
346
+ minBarWidth,
347
+ valueMatrix,
348
+ shouldApplyMinBarWidth,
349
+ shouldCenterDataLabels
350
+ );
299
351
  };
300
352
  }
301
353
  var BarChart = ({
@@ -330,6 +382,8 @@ var BarChart = ({
330
382
  const hasGeneratedLabels = showBarValues || showBarPercentages;
331
383
  const resolvedMinBarWidth = minBarWidth ?? (minBarPercentage === 0 ? 0 : 30);
332
384
  const hasMinimumBarWidth = isHorizontal && resolvedMinBarWidth > 0;
385
+ const shouldCenterDataLabels = isHorizontal && showBarPercentages;
386
+ const hasHorizontalDomAdjustments = hasMinimumBarWidth || shouldCenterDataLabels;
333
387
  const baseGridOptions = isHorizontal ? mergeGridOptions(defaultOptions.grid, horizontalGridOptions) : defaultOptions.grid;
334
388
  const getLabelContext = (seriesIndex, dataPointIndex, total) => ({
335
389
  seriesIndex,
@@ -399,22 +453,28 @@ var BarChart = ({
399
453
  )
400
454
  } : void 0;
401
455
  const userChartEvents = options?.chart?.events;
402
- const generatedChartEvents = hasMinimumBarWidth ? {
456
+ const generatedChartEvents = hasHorizontalDomAdjustments ? {
403
457
  ...userChartEvents,
404
- mounted: composeMinimumBarWidthEvent(
458
+ mounted: composeHorizontalBarLifecycleEvent(
405
459
  userChartEvents?.mounted,
406
460
  resolvedMinBarWidth,
407
- valueMatrix
461
+ valueMatrix,
462
+ hasMinimumBarWidth,
463
+ shouldCenterDataLabels
408
464
  ),
409
- updated: composeMinimumBarWidthEvent(
465
+ updated: composeHorizontalBarLifecycleEvent(
410
466
  userChartEvents?.updated,
411
467
  resolvedMinBarWidth,
412
- valueMatrix
468
+ valueMatrix,
469
+ hasMinimumBarWidth,
470
+ shouldCenterDataLabels
413
471
  ),
414
- animationEnd: composeMinimumBarWidthEvent(
472
+ animationEnd: composeHorizontalBarLifecycleEvent(
415
473
  userChartEvents?.animationEnd,
416
474
  resolvedMinBarWidth,
417
- valueMatrix
475
+ valueMatrix,
476
+ hasMinimumBarWidth,
477
+ shouldCenterDataLabels
418
478
  )
419
479
  } : userChartEvents;
420
480
  const mergedOptions = {
@@ -490,5 +550,5 @@ var BarChart = ({
490
550
  };
491
551
 
492
552
  export { BarChart };
493
- //# sourceMappingURL=chunk-C7OCYM5S.js.map
494
- //# sourceMappingURL=chunk-C7OCYM5S.js.map
553
+ //# sourceMappingURL=chunk-YENZVRNK.js.map
554
+ //# sourceMappingURL=chunk-YENZVRNK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Charts/BarChart.tsx"],"names":[],"mappings":";;;AA0CA,IAAM,cAAA,GAA8B;AAAA,EAClC,MAAA,EAAQ,CAAC,SAAS,CAAA;AAAA,EAClB,KAAA,EAAO;AAAA,IACL,UAAA,EAAY,oBAAA;AAAA,IACZ,IAAA,EAAM,KAAA;AAAA,IACN,MAAA,EAAQ,GAAA;AAAA,IACR,UAAA,EAAY;AAAA,MACV,OAAA,EAAS,IAAA;AAAA,MACT,KAAA,EAAO,GAAA;AAAA,MACP,gBAAA,EAAkB;AAAA,QAChB,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACT;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,OAAA,EAAS,IAAA;AAAA,QACT,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM;AAAA;AACR,GACF;AAAA,EACA,WAAA,EAAa;AAAA,IACX,GAAA,EAAK;AAAA,MACH,UAAA,EAAY,KAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,YAAA,EAAc,CAAA;AAAA,MACd,uBAAA,EAAyB;AAAA;AAC3B,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,KAAA,EAAO;AAAA,IACL,UAAA,EAAY;AAAA,MACV,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACV,IAAA,EAAM;AAAA,KACR;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM;AAAA,KACR;AAAA;AAAA;AAAA,IAGA,UAAA,EAAY;AAAA,MACV,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,QAAA,EAAU,KAAA;AAAA,IACV,eAAA,EAAiB,MAAA;AAAA,IACjB,UAAA,EAAY,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKZ,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,CAAA;AAAA,MACN,WAAA,EAAa,CAAA;AAAA,MACb,YAAY,MACV;AAAA;AACJ,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,IAAA,EAAM;AAAA;AACR,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,KAAA,EAAO;AAAA,QACL,IAAA,EAAM;AAAA;AACR;AACF,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,CAAA,EAAG;AAAA,MACD,IAAA,EAAM;AAAA,KACR;AAAA,IACA,CAAA,EAAG;AAAA,MACD,SAAA,EAAW,CAAC,GAAA,KAAgB,CAAA,EAAG,GAAG,CAAA;AAAA;AACpC;AAEJ,CAAA;AAEA,IAAM,aAAA,GAAqC;AAAA,EACzC;AAAA,IACE,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,KAAK,GAAG;AAAA;AAErE,CAAA;AAEA,IAAM,qBAAA,GAA6C;AAAA,EACjD,WAAA,EAAa,aAAA;AAAA,EACb,KAAA,EAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,IAAA,EAAM;AAAA;AACR,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,SAAS,gBAAA,CACP,MACA,QAAA,EACqB;AACrB,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,KAAA,EAAO;AAAA,MACL,GAAG,IAAA,EAAM,KAAA;AAAA,MACT,GAAG,QAAA,EAAU,KAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,GAAG,MAAM,KAAA,EAAO,KAAA;AAAA,QAChB,GAAG,UAAU,KAAA,EAAO;AAAA;AACtB,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,GAAG,IAAA,EAAM,KAAA;AAAA,MACT,GAAG,QAAA,EAAU,KAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,GAAG,MAAM,KAAA,EAAO,KAAA;AAAA,QAChB,GAAG,UAAU,KAAA,EAAO;AAAA;AACtB;AACF,GACF;AACF;AAEA,SAAS,aAAa,KAAA,EAA+B;AACnD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,QAAA,EAAU,OAAO,KAAA,CAAM,CAAC,CAAA;AACxE,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,EAAO;AACtD,IAAA,MAAM,IAAK,KAAA,CAAyB,CAAA;AACpC,IAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,IAAA;AAAA,EACrC;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,eAAe,MAAA,EAAyC;AAC/D,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,KAAU,YAAA,CAAa,KAAK,CAAA,IAAK,CAAC,CAAC,CAAA;AAChF;AAEA,SAAS,eAAe,MAAA,EAA4B;AAClD,EAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IACZ,CAAC,WAAA,EAAa,IAAA,KAAS,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,GAAQ,KAAA,EAAO,CAAC,CAAA;AAAA,IACnF;AAAA,GACF;AACF;AAEA,SAAS,gBAAA,CAAiB,QAAoB,cAAA,EAAgC;AAC5E,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,EAAO,IAAA,KAAS,SAAS,IAAA,CAAK,cAAc,CAAA,IAAK,CAAA,CAAA,EAAI,CAAC,CAAA;AAC9E;AAEA,SAAS,kBAAA,CACP,KAAA,EACA,SAAA,EACA,cAAA,EACA,UAAA,EACS;AACT,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO;AAAA,MACL,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,MACV,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,MACV;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACtC,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,UAAA,GAAa,cAAc,CAAA,IAAK,cAAA;AAAA,IACnC,CAAA,EAAG,KAAA;AAAA,IACH;AAAA,GACF;AACF;AAEA,SAAS,cAAA,CACP,MAAA,EACA,SAAA,EACA,cAAA,EACA,UAAA,EACqB;AACrB,EAAA,IAAI,CAAC,SAAA,EAAW,MAAA,EAAQ,OAAO,MAAA;AAE/B,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,EAAM,WAAA,KAAgB;AACvC,IAAA,MAAM,aAAA,GACJ,iBAAiB,WAAW,CAAA,IAAK,iBAAiB,CAAC,CAAA,IAAK,cAAA,CAAe,MAAA,GAAS,CAAC,CAAA;AAEnF,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,IAAA,EAAM,KAAK,IAAA,CAAK,GAAA;AAAA,QAAI,CAAC,OAAO,cAAA,KAC1B,kBAAA;AAAA,UACE,KAAA;AAAA,UACA,SAAA,CAAU,cAAc,CAAA,IAAK,aAAA,IAAiB,SAAA;AAAA,UAC9C,cAAA;AAAA,UACA;AAAA;AACF;AACF,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,eAAA,CACP,IAAA,EACA,QAAA,EACA,SAAA,EAC2B;AAC3B,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,GAAG,SAAA;AAAA,IACH,KAAA,EAAO;AAAA,MACL,GAAG,IAAA,EAAM,KAAA;AAAA,MACT,GAAG,QAAA,EAAU,KAAA;AAAA,MACb,GAAG,SAAA,EAAW;AAAA,KAChB;AAAA,IACA,UAAA,EAAY;AAAA,MACV,GAAG,IAAA,EAAM,UAAA;AAAA,MACT,GAAG,QAAA,EAAU,UAAA;AAAA,MACb,GAAG,SAAA,EAAW;AAAA;AAChB,GACF;AACF;AAEA,SAAS,mBAAA,CACP,IAAA,EACA,QAAA,EACA,SAAA,EACwB;AACxB,EAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAC,CAAA,GAAI,SAAY,IAAA,EAAM,CAAA;AACzD,EAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAC,CAAA,GAAI,SAAY,QAAA,EAAU,CAAA;AACrE,EAAA,MAAM,aAAa,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAC,CAAA,GAAI,SAAY,SAAA,EAAW,CAAA;AAExE,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,GAAG,QAAA;AAAA,IACH,GAAG,SAAA;AAAA,IACH,CAAA,EAAG;AAAA,MACD,GAAG,IAAA,EAAM,CAAA;AAAA,MACT,GAAG,QAAA,EAAU,CAAA;AAAA,MACb,GAAG,SAAA,EAAW;AAAA,KAChB;AAAA,IACA,CAAA,EAAG;AAAA,MACD,GAAG,KAAA;AAAA,MACH,GAAG,SAAA;AAAA,MACH,GAAG;AAAA;AACL,GACF;AACF;AAEA,SAAS,gBAAA,CACP,UACA,SAAA,EACwC;AACxC,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,SAAA,EAAW,OAAO,MAAA;AACpC,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,GAAG,SAAA;AAAA,IACH,MAAA,EAAQ,CAAC,GAAI,QAAA,EAAU,MAAA,IAAU,EAAC,EAAI,GAAI,SAAA,EAAW,MAAA,IAAU,EAAG;AAAA,GACpE;AACF;AAEA,SAAS,gBAAgB,YAAA,EAAuC;AAC9D,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,EAAa,OAAO,IAAA;AAC3C,EAAA,IAAI,CAAC,gBAAgB,OAAO,YAAA,KAAiB,YAAY,EAAE,IAAA,IAAQ,eAAe,OAAO,IAAA;AAEzF,EAAA,MAAM,UAAW,YAAA,CAAkC,EAAA;AACnD,EAAA,OAAO,OAAA,YAAmB,UAAU,OAAA,GAAU,IAAA;AAChD;AAEA,SAAS,8BAAA,CACP,YAAA,EACA,WAAA,EACA,WAAA,EACA;AACA,EAAA,MAAM,IAAA,GAAO,gBAAgB,YAAY,CAAA;AACzC,EAAA,IAAI,CAAC,IAAA,EAAM;AAEX,EAAA,IAAA,CACG,gBAAA,CAAiB,8BAA8B,CAAA,CAC/C,OAAA,CAAQ,CAAC,OAAA,KAAY,OAAA,CAAQ,QAAQ,CAAA;AAExC,EAAA,IAAI,eAAe,CAAA,EAAG;AAEtB,EAAA,MAAM,MAAA,GAAS,YAAY,IAAA,EAAK;AAChC,EAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAiC,sBAAsB,CAAC,CAAA;AACtF,EAAA,MAAM,cAAc,IAAA,CAAK,aAAA;AAEzB,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC7B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAK,CAAA,IAAK,CAAA;AAC/B,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,OAAO,IAAA,CAAK,YAAY,UAAA,EAAY;AAErD,IAAA,MAAM,GAAA,GAAM,KAAK,OAAA,EAAQ;AACzB,IAAA,IAAI,GAAA,CAAI,KAAA,IAAS,WAAA,IAAe,GAAA,CAAI,UAAU,CAAA,EAAG;AAEjD,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,eAAA,CAAgB,4BAAA,EAA8B,MAAM,CAAA;AAChF,IAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,CAAA,EAAG,IAAI,MAAA,GAAS,CAAA,EAAG,cAAc,CAAC,CAAA;AAC1D,IAAA,OAAA,CAAQ,YAAA,CAAa,8BAA8B,MAAM,CAAA;AACzD,IAAA,OAAA,CAAQ,YAAA,CAAa,GAAA,EAAK,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA,CAAE,CAAA;AACpC,IAAA,OAAA,CAAQ,YAAA,CAAa,GAAA,EAAK,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA,CAAE,CAAA;AACpC,IAAA,OAAA,CAAQ,YAAA,CAAa,OAAA,EAAS,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAC9C,IAAA,OAAA,CAAQ,YAAA,CAAa,QAAA,EAAU,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAC9C,IAAA,OAAA,CAAQ,YAAA,CAAa,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA;AACtC,IAAA,OAAA,CAAQ,YAAA,CAAa,QAAQ,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,cAAc,CAAA;AAC3F,IAAA,OAAA,CAAQ,YAAA,CAAa,WAAW,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,GAAG,CAAA;AACzF,IAAA,OAAA,CAAQ,MAAM,aAAA,GAAgB,MAAA;AAC9B,IAAA,IAAA,CAAK,UAAA,EAAY,YAAA,CAAa,OAAA,EAAS,IAAA,CAAK,WAAW,CAAA;AAAA,EACzD,CAAC,CAAA;AACH;AAEA,SAAS,6BAAA,CACP,YAAA,EACA,WAAA,EACA,WAAA,EACA;AACA,EAAA,MAAM,IAAA,GAAO,gBAAgB,YAAY,CAAA;AACzC,EAAA,IAAI,CAAC,IAAA,EAAM;AAEX,EAAA,MAAM,MAAA,GAAS,YAAY,IAAA,EAAK;AAChC,EAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAiC,sBAAsB,CAAC,CAAA;AACtF,EAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAiC,uBAAuB,CAAC,CAAA;AAExF,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC7B,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAK,CAAA,IAAK,CAAA;AAC/B,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,GAAQ,KAAK,OAAO,IAAA,CAAK,YAAY,UAAA,EAAY;AAE/D,IAAA,MAAM,GAAA,GAAM,KAAK,OAAA,EAAQ;AACzB,IAAA,IAAI,GAAA,CAAI,UAAU,CAAA,EAAG;AAErB,IAAA,MAAM,QAAQ,KAAA,IAAS,CAAA,IAAK,IAAI,KAAA,GAAQ,WAAA,GAAc,cAAc,GAAA,CAAI,KAAA;AACxE,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,CAAA,GAAI,KAAA,GAAQ,CAAA;AAChC,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,MAAA,GAAS,CAAA;AAErC,IAAA,KAAA,CAAM,YAAA,CAAa,GAAA,EAAK,CAAA,EAAG,OAAO,CAAA,CAAE,CAAA;AACpC,IAAA,KAAA,CAAM,YAAA,CAAa,GAAA,EAAK,CAAA,EAAG,OAAO,CAAA,CAAE,CAAA;AACpC,IAAA,KAAA,CAAM,YAAA,CAAa,eAAe,QAAQ,CAAA;AAC1C,IAAA,KAAA,CAAM,YAAA,CAAa,qBAAqB,QAAQ,CAAA;AAChD,IAAA,KAAA,CAAM,YAAA,CAAa,sBAAsB,QAAQ,CAAA;AACjD,IAAA,KAAA,CAAM,gBAAA,CAAiB,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,KAAA,KAAU;AACjD,MAAA,KAAA,CAAM,YAAA,CAAa,GAAA,EAAK,CAAA,EAAG,OAAO,CAAA,CAAE,CAAA;AACpC,MAAA,KAAA,CAAM,YAAA,CAAa,GAAA,EAAK,CAAA,EAAG,OAAO,CAAA,CAAE,CAAA;AAAA,IACtC,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAKA,SAAS,8BAAA,CACP,YAAA,EACA,WAAA,EACA,WAAA,EACA,wBACA,sBAAA,EACA;AACA,EAAA,IAAI,sBAAA,EAAwB;AAC1B,IAAA,8BAAA,CAA+B,YAAA,EAAc,aAAa,WAAW,CAAA;AAAA,EACvE;AACA,EAAA,IAAI,sBAAA,EAAwB;AAC1B,IAAA,6BAAA,CAA8B,YAAA,EAAc,aAAa,WAAW,CAAA;AAAA,EACtE;AACF;AAEA,SAAS,mCAAA,CACP,YAAA,EACA,WAAA,EACA,WAAA,EACA,wBACA,sBAAA,EACA;AACA,EAAA,8BAAA;AAAA,IACE,YAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,sBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,MAAA,CAAO,0BAA0B,UAAA,EAAY;AAEzF,EAAA,MAAA,CAAO,sBAAsB,MAAM;AACjC,IAAA,8BAAA;AAAA,MACE,YAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,sBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,kCAAA,CACP,SAAA,EACA,WAAA,EACA,WAAA,EACA,wBACA,sBAAA,EACoB;AACpB,EAAA,OAAO,CAAC,OAAO,YAAA,KAAiB;AAC9B,IAAA,SAAA,GAAY,OAAO,YAAY,CAAA;AAC/B,IAAA,mCAAA;AAAA,MACE,KAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,sBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AACF;AAEO,IAAM,WAAoC,CAAC;AAAA,EAChD,MAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA,GAAgB,KAAA;AAAA,EAChB,kBAAA,GAAqB,KAAA;AAAA,EACrB,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA,GAAiB,OAAA;AAAA,EACjB,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,KAAA,CAAM,SAAyC,IAAI,CAAA;AAC7E,EAAA,MAAM,kBAAkB,MAAA,IAAU,aAAA;AAClC,EAAA,MAAM,mBAAA,GACJ,UAAA,IAAe,OAAA,EAAS,KAAA,EAAO,UAAA;AACjC,EAAA,MAAM,eAAA,GAAkB,MAAA,IAAU,OAAA,EAAS,MAAA,IAAU,cAAA,CAAe,MAAA;AACpE,EAAA,MAAM,WAAA,GAAc,cAAA;AAAA,IAClB,eAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,WAAA,GAAc,eAAe,eAAe,CAAA;AAClD,EAAA,MAAM,WAAA,GAAc,eAAe,WAAW,CAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,UAAA,IAAe,OAAA,EAAS,WAAA,EAAa,KAAK,UAAA,KAAe,IAAA;AAC9E,EAAA,MAAM,qBAAqB,aAAA,IAAiB,kBAAA;AAC5C,EAAA,MAAM,mBAAA,GAAsB,WAAA,KAAgB,gBAAA,KAAqB,CAAA,GAAI,CAAA,GAAI,EAAA,CAAA;AACzE,EAAA,MAAM,kBAAA,GAAqB,gBAAgB,mBAAA,GAAsB,CAAA;AACjE,EAAA,MAAM,yBAAyB,YAAA,IAAgB,kBAAA;AAC/C,EAAA,MAAM,8BAA8B,kBAAA,IAAsB,sBAAA;AAC1D,EAAA,MAAM,kBAAkB,YAAA,GACpB,gBAAA,CAAiB,eAAe,IAAA,EAAM,qBAAqB,IAC3D,cAAA,CAAe,IAAA;AACnB,EAAA,MAAM,eAAA,GAAkB,CACtB,WAAA,EACA,cAAA,EACA,KAAA,MAC0B;AAAA,IAC1B,WAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA,EAAY,eAAA,CAAgB,WAAW,CAAA,EAAG,IAAA;AAAA,IAC1C,QAAA,EAAU,sBAAsB,cAAc,CAAA;AAAA,IAC9C;AAAA,GACF,CAAA;AACA,EAAA,MAAM,sBAA6D,kBAAA,GAC/D;AAAA,IACE,OAAA,EAAS,IAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,OAAA,EAAS,CAAA;AAAA,IACT,OAAA,EAAS,CAAA;AAAA,IACT,UAAA,EAAY;AAAA,MACV,OAAA,EAAS;AAAA,KACX;AAAA,IACA,KAAA,EAAO;AAAA,MACL,QAAA,EAAU,MAAA;AAAA,MACV,UAAA,EAAY,GAAA;AAAA,MACZ,MAAA,EAAQ,CAAC,kBAAA,GAAqB,SAAA,GAAY,SAAS;AAAA,KACrD;AAAA,IACA,SAAA,EAAW,CAAC,MAAA,EAAQ,IAAA,KAAS;AAC3B,MAAA,MAAM,WAAA,GAAc,MAAM,WAAA,IAAe,CAAA;AACzC,MAAA,MAAM,cAAA,GAAiB,MAAM,cAAA,IAAkB,CAAA;AAC/C,MAAA,MAAM,YAAA,GAAe,WAAA,CAAY,WAAW,CAAA,GAAI,cAAc,CAAA,IAAK,CAAA;AACnE,MAAA,MAAM,QACJ,cAAA,KAAmB,UAAA,GACf,gBAAA,CAAiB,WAAA,EAAa,cAAc,CAAA,GAC5C,WAAA;AACN,MAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,WAAA,EAAa,cAAA,EAAgB,KAAK,CAAA;AAElE,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,MAAM,UAAA,GAAa,KAAA,GAAQ,CAAA,GAAK,YAAA,GAAe,QAAS,GAAA,GAAM,CAAA;AAC9D,QAAA,OAAO,sBAAA,GACH,sBAAA,CAAuB,UAAA,EAAY,YAAA,EAAc,OAAO,IACxD,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,UAAU,CAAC,CAAA,CAAA,CAAA;AAAA,MAC/B;AAEA,MAAA,OAAO,oBACH,iBAAA,CAAkB,YAAA,EAAc,OAAO,CAAA,GACvC,GAAG,YAAY,CAAA,CAAA;AAAA,IACrB;AAAA,GACF,GACA,MAAA;AACJ,EAAA,MAAM,oBAAA,GACJ,gBAAgB,aAAA,GACZ;AAAA,IACE,QAAQ,eAAA,CAAgB,OAAA;AAAA,MAAQ,CAAC,MAAM,WAAA,KACrC,IAAA,CAAK,KAAK,GAAA,CAAI,CAAC,WAAW,cAAA,KAAmB;AAC3C,QAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,SAAS,CAAA,IAAK,CAAA;AACzC,QAAA,MAAM,QACJ,cAAA,KAAmB,UAAA,GACf,gBAAA,CAAiB,WAAA,EAAa,cAAc,CAAA,GAC5C,WAAA;AACN,QAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,WAAA,EAAa,cAAA,EAAgB,KAAK,CAAA;AAClE,QAAA,OAAO;AAAA,UACL,CAAA,EAAG,KAAA;AAAA,UACH,CAAA,EAAG,cAAA;AAAA,UACH,WAAA;AAAA,UACA,MAAA,EAAQ;AAAA,YACN,IAAA,EAAM;AAAA,WACR;AAAA,UACA,KAAA,EAAO;AAAA,YACL,MAAM,iBAAA,GAAoB,iBAAA,CAAkB,OAAO,OAAO,CAAA,GAAI,GAAG,KAAK,CAAA,CAAA;AAAA,YACtE,WAAA,EAAa,CAAA;AAAA,YACb,OAAA,EAAS,GAAA;AAAA,YACT,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,aAAA;AAAA,cACZ,KAAA,EAAO,SAAA;AAAA,cACP,QAAA,EAAU,MAAA;AAAA,cACV,UAAA,EAAY,GAAA;AAAA,cACZ,OAAA,EAAS;AAAA,gBACP,IAAA,EAAM,CAAA;AAAA,gBACN,KAAA,EAAO,CAAA;AAAA,gBACP,GAAA,EAAK,CAAA;AAAA,gBACL,MAAA,EAAQ;AAAA;AACV;AACF;AACF,SACF;AAAA,MACF,CAAC;AAAA;AACH,GACF,GACA,MAAA;AACN,EAAA,MAAM,eAAA,GAAkB,SAAS,KAAA,EAAO,MAAA;AACxC,EAAA,MAAM,uBAAoD,2BAAA,GACtD;AAAA,IACE,GAAG,eAAA;AAAA,IACH,OAAA,EAAS,kCAAA;AAAA,MACP,eAAA,EAAiB,OAAA;AAAA,MACjB,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA,EAAS,kCAAA;AAAA,MACP,eAAA,EAAiB,OAAA;AAAA,MACjB,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,YAAA,EAAc,kCAAA;AAAA,MACZ,eAAA,EAAiB,YAAA;AAAA,MACjB,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA;AACF,GACF,GACA,eAAA;AACJ,EAAA,MAAM,aAAA,GAA6B;AAAA,IACjC,GAAG,cAAA;AAAA,IACH,GAAG,OAAA;AAAA,IACH,MAAA,EAAQ,eAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,GAAG,cAAA,CAAe,KAAA;AAAA,MAClB,GAAG,OAAA,EAAS,KAAA;AAAA,MACZ,MAAA,EAAQ,oBAAA;AAAA,MACR,UAAA,EAAY;AAAA,QACV,GAAG,eAAe,KAAA,EAAO,UAAA;AAAA,QACzB,GAAG,SAAS,KAAA,EAAO,UAAA;AAAA,QACnB,gBAAA,EAAkB;AAAA,UAChB,GAAG,cAAA,CAAe,KAAA,EAAO,UAAA,EAAY,gBAAA;AAAA,UACrC,GAAG,OAAA,EAAS,KAAA,EAAO,UAAA,EAAY;AAAA,SACjC;AAAA,QACA,gBAAA,EAAkB;AAAA,UAChB,GAAG,cAAA,CAAe,KAAA,EAAO,UAAA,EAAY,gBAAA;AAAA,UACrC,GAAG,OAAA,EAAS,KAAA,EAAO,UAAA,EAAY;AAAA;AACjC,OACF;AAAA,MACA,QAAQ,MAAA,IAAU,OAAA,EAAS,KAAA,EAAO,MAAA,IAAU,eAAe,KAAA,EAAO;AAAA,KACpE;AAAA,IACA,WAAA,EAAa;AAAA,MACX,GAAG,cAAA,CAAe,WAAA;AAAA,MAClB,GAAG,OAAA,EAAS,WAAA;AAAA,MACZ,GAAA,EAAK;AAAA,QACH,GAAG,eAAe,WAAA,EAAa,GAAA;AAAA,QAC/B,GAAG,SAAS,WAAA,EAAa,GAAA;AAAA,QACzB,UAAA,EAAY,YAAA;AAAA,QACZ,GAAI,kBAAA,IAAsB;AAAA,UACxB,UAAA,EAAY;AAAA,YACV,GAAG,OAAA,EAAS,WAAA,EAAa,GAAA,EAAK,UAAA;AAAA,YAC9B,QAAA,EAAU,qBAAqB,QAAA,GAAW;AAAA;AAC5C;AACF;AACF,KACF;AAAA,IACA,UAAA,EAAY,eAAA;AAAA,MACV,cAAA,CAAe,UAAA;AAAA,MACf,OAAA,EAAS,UAAA;AAAA,MACT;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,GAAG,cAAA,CAAe,KAAA;AAAA,MAClB,GAAG,OAAA,EAAS,KAAA;AAAA,MACZ,YACE,UAAA,IACA,OAAA,EAAS,KAAA,EAAO,UAAA,IAChB,eAAe,KAAA,EAAO;AAAA,KAC1B;AAAA,IACA,IAAA,EAAM,gBAAA,CAAiB,eAAA,EAAiB,OAAA,EAAS,IAAI,CAAA;AAAA,IACrD,WAAA,EAAa,gBAAA,CAAiB,OAAA,EAAS,WAAA,EAAa,oBAAoB,CAAA;AAAA,IACxE,SAAS,mBAAA,CAAoB,cAAA,CAAe,OAAA,EAAS,OAAA,EAAS,SAAS,MAAS;AAAA,GAClF;AAEA,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,SAAA,GAAY,IAAA;AAEhB,IAAA,OAAO,kBAAkB,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW;AAC1C,MAAA,IAAI,SAAA,EAAW,QAAA,CAAS,MAAM,MAAA,CAAO,OAAkC,CAAA;AAAA,IACzE,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,KAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,aAAA;AAAA,MACT,MAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,KAAA;AAAA,MACL,QAAQ,MAAA,IAAU;AAAA;AAAA,GACpB;AAEJ","file":"chunk-YENZVRNK.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 centerHorizontalBarDataLabels(\n chartContext: unknown,\n minBarWidth: number,\n valueMatrix: number[][]\n) {\n const root = getChartElement(chartContext);\n if (!root) return;\n\n const values = valueMatrix.flat();\n const paths = Array.from(root.querySelectorAll<SVGPathElement>(\".apexcharts-bar-area\"));\n const labels = Array.from(root.querySelectorAll<SVGTextElement>(\".apexcharts-datalabel\"));\n\n paths.forEach((path, index) => {\n const label = labels[index];\n const value = values[index] ?? 0;\n if (!label || value < 0 || typeof path.getBBox !== \"function\") return;\n\n const box = path.getBBox();\n if (box.height <= 0) return;\n\n const width = value >= 0 && box.width < minBarWidth ? minBarWidth : box.width;\n const centerX = box.x + width / 2;\n const centerY = box.y + box.height / 2;\n\n label.setAttribute(\"x\", `${centerX}`);\n label.setAttribute(\"y\", `${centerY}`);\n label.setAttribute(\"text-anchor\", \"middle\");\n label.setAttribute(\"dominant-baseline\", \"middle\");\n label.setAttribute(\"alignment-baseline\", \"middle\");\n label.querySelectorAll(\"tspan\").forEach((tspan) => {\n tspan.setAttribute(\"x\", `${centerX}`);\n tspan.setAttribute(\"y\", `${centerY}`);\n });\n });\n}\n\ntype ApexChartEvents = NonNullable<NonNullable<ApexOptions[\"chart\"]>[\"events\"]>;\ntype ApexLifecycleEvent = NonNullable<ApexChartEvents[\"mounted\"]>;\n\nfunction runHorizontalBarDomAdjustments(\n chartContext: unknown,\n minBarWidth: number,\n valueMatrix: number[][],\n shouldApplyMinBarWidth: boolean,\n shouldCenterDataLabels: boolean\n) {\n if (shouldApplyMinBarWidth) {\n applyMinimumHorizontalBarWidth(chartContext, minBarWidth, valueMatrix);\n }\n if (shouldCenterDataLabels) {\n centerHorizontalBarDataLabels(chartContext, minBarWidth, valueMatrix);\n }\n}\n\nfunction scheduleHorizontalBarDomAdjustments(\n chartContext: unknown,\n minBarWidth: number,\n valueMatrix: number[][],\n shouldApplyMinBarWidth: boolean,\n shouldCenterDataLabels: boolean\n) {\n runHorizontalBarDomAdjustments(\n chartContext,\n minBarWidth,\n valueMatrix,\n shouldApplyMinBarWidth,\n shouldCenterDataLabels\n );\n\n if (typeof window === \"undefined\" || typeof window.requestAnimationFrame !== \"function\") return;\n\n window.requestAnimationFrame(() => {\n runHorizontalBarDomAdjustments(\n chartContext,\n minBarWidth,\n valueMatrix,\n shouldApplyMinBarWidth,\n shouldCenterDataLabels\n );\n });\n}\n\nfunction composeHorizontalBarLifecycleEvent(\n userEvent: ApexLifecycleEvent | undefined,\n minBarWidth: number,\n valueMatrix: number[][],\n shouldApplyMinBarWidth: boolean,\n shouldCenterDataLabels: boolean\n): ApexLifecycleEvent {\n return (chart, eventOptions) => {\n userEvent?.(chart, eventOptions);\n scheduleHorizontalBarDomAdjustments(\n chart,\n minBarWidth,\n valueMatrix,\n shouldApplyMinBarWidth,\n shouldCenterDataLabels\n );\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 shouldCenterDataLabels = isHorizontal && showBarPercentages;\n const hasHorizontalDomAdjustments = hasMinimumBarWidth || shouldCenterDataLabels;\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 = hasHorizontalDomAdjustments\n ? {\n ...userChartEvents,\n mounted: composeHorizontalBarLifecycleEvent(\n userChartEvents?.mounted,\n resolvedMinBarWidth,\n valueMatrix,\n hasMinimumBarWidth,\n shouldCenterDataLabels\n ),\n updated: composeHorizontalBarLifecycleEvent(\n userChartEvents?.updated,\n resolvedMinBarWidth,\n valueMatrix,\n hasMinimumBarWidth,\n shouldCenterDataLabels\n ),\n animationEnd: composeHorizontalBarLifecycleEvent(\n userChartEvents?.animationEnd,\n resolvedMinBarWidth,\n valueMatrix,\n hasMinimumBarWidth,\n shouldCenterDataLabels\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"]}
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkMIIZ4KLS_cjs = require('../../chunk-MIIZ4KLS.cjs');
4
+ var chunkMSIXHONY_cjs = require('../../chunk-MSIXHONY.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "BarChart", {
9
9
  enumerable: true,
10
- get: function () { return chunkMIIZ4KLS_cjs.BarChart; }
10
+ get: function () { return chunkMSIXHONY_cjs.BarChart; }
11
11
  });
12
12
  //# sourceMappingURL=BarChart.cjs.map
13
13
  //# sourceMappingURL=BarChart.cjs.map
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- export { BarChart } from '../../chunk-C7OCYM5S.js';
2
+ export { BarChart } from '../../chunk-YENZVRNK.js';
3
3
  //# sourceMappingURL=BarChart.js.map
4
4
  //# sourceMappingURL=BarChart.js.map
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkMIIZ4KLS_cjs = require('./chunk-MIIZ4KLS.cjs');
4
+ var chunkMSIXHONY_cjs = require('./chunk-MSIXHONY.cjs');
5
5
  var chunkZULPBSQV_cjs = require('./chunk-ZULPBSQV.cjs');
6
6
  var chunkGBQCVSZU_cjs = require('./chunk-GBQCVSZU.cjs');
7
7
  var chunkETOOIXCY_cjs = require('./chunk-ETOOIXCY.cjs');
@@ -2953,7 +2953,7 @@ var Slider = ({
2953
2953
 
2954
2954
  Object.defineProperty(exports, "BarChart", {
2955
2955
  enumerable: true,
2956
- get: function () { return chunkMIIZ4KLS_cjs.BarChart; }
2956
+ get: function () { return chunkMSIXHONY_cjs.BarChart; }
2957
2957
  });
2958
2958
  Object.defineProperty(exports, "LineChart", {
2959
2959
  enumerable: true,
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- export { BarChart } from './chunk-C7OCYM5S.js';
2
+ export { BarChart } from './chunk-YENZVRNK.js';
3
3
  export { LineChart } from './chunk-W6E275RF.js';
4
4
  export { Calendar, Modal } from './chunk-NJBVRPWW.js';
5
5
  export { Editor } from './chunk-PFCUA2W2.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andreagiugni/tailwind-dashboard-ui",
3
- "version": "1.0.17",
3
+ "version": "1.0.18",
4
4
  "description": "Reusable React + Tailwind CSS v4 dashboard components extracted from TailAdmin.",
5
5
  "homepage": "https://taildashboardui.com",
6
6
  "author": "Andrea Giugni",
@@ -1 +0,0 @@
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"]}
@@ -1 +0,0 @@
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"]}