@extend-ai/react-xlsx 0.20.3 → 0.20.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{browser-B73UAN6E.cjs → browser-6MKX73CJ.cjs} +8 -28
- package/dist/browser-6MKX73CJ.cjs.map +1 -0
- package/dist/{browser-KWIEUO2X.js → browser-KJ6EVWLG.js} +8 -27
- package/dist/{browser-KWIEUO2X.js.map → browser-KJ6EVWLG.js.map} +1 -1
- package/dist/{chart-renderer-XBF7EPUS.js → chart-renderer-2BLFC2BD.js} +94 -180
- package/dist/chart-renderer-2BLFC2BD.js.map +1 -0
- package/dist/{chart-renderer-W7XW24JI.cjs → chart-renderer-2K7XSPVG.cjs} +321 -407
- package/dist/chart-renderer-2K7XSPVG.cjs.map +1 -0
- package/dist/{chart-renderer-2EKXNHUD.cjs → chart-renderer-2UJZRUSN.cjs} +324 -410
- package/dist/chart-renderer-2UJZRUSN.cjs.map +1 -0
- package/dist/{chart-renderer-ZLJVPLGN.js → chart-renderer-IYKCQENY.js} +86 -172
- package/dist/chart-renderer-IYKCQENY.js.map +1 -0
- package/dist/{chunk-WGRRI25I.cjs → chunk-5PBSOOA7.cjs} +22 -9
- package/dist/chunk-5PBSOOA7.cjs.map +1 -0
- package/dist/{chunk-VG4JELEQ.js → chunk-BFSDKYQU.js} +30 -15
- package/dist/chunk-BFSDKYQU.js.map +1 -0
- package/dist/chunk-IN7OU5PF.js +32 -0
- package/dist/chunk-IN7OU5PF.js.map +1 -0
- package/dist/{chunk-HKMFMIKE.js → chunk-KSXNNWAY.js} +16 -7
- package/dist/chunk-KSXNNWAY.js.map +1 -0
- package/dist/chunk-LY4EWUKF.js +22 -0
- package/dist/chunk-LY4EWUKF.js.map +1 -0
- package/dist/chunk-N6MMMGLF.cjs +32 -0
- package/dist/chunk-N6MMMGLF.cjs.map +1 -0
- package/dist/{chunk-HEEFCVWS.js → chunk-R5ERJ3BT.js} +404 -149
- package/dist/chunk-R5ERJ3BT.js.map +1 -0
- package/dist/chunk-RN27VSTN.cjs +108 -0
- package/dist/chunk-RN27VSTN.cjs.map +1 -0
- package/dist/{chunk-XISBYOD5.cjs → chunk-YPTGD7GK.cjs} +1172 -917
- package/dist/chunk-YPTGD7GK.cjs.map +1 -0
- package/dist/chunk-ZAUUKER4.cjs +22 -0
- package/dist/chunk-ZAUUKER4.cjs.map +1 -0
- package/dist/full-C7H4X2EX.cjs +212 -0
- package/dist/full-C7H4X2EX.cjs.map +1 -0
- package/dist/full-YT626I57.js +209 -0
- package/dist/full-YT626I57.js.map +1 -0
- package/dist/index.cjs +838 -620
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +57 -1
- package/dist/index.d.ts +57 -1
- package/dist/index.js +350 -132
- package/dist/index.js.map +1 -1
- package/dist/{internal-BJsg5os3.d.cts → internal-Cks9H21d.d.cts} +56 -1
- package/dist/{internal-BJsg5os3.d.ts → internal-Cks9H21d.d.ts} +56 -1
- package/dist/internal.cjs +4 -3
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.d.cts +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +3 -2
- package/dist/office_charts_bg.wasm +0 -0
- package/dist/office_charts_full_bg.wasm +0 -0
- package/dist/payload-7QT6NY6S.js +6 -0
- package/dist/payload-7QT6NY6S.js.map +1 -0
- package/dist/payload-BZGBW73P.cjs +8 -0
- package/dist/payload-BZGBW73P.cjs.map +1 -0
- package/dist/payload-H55PON66.js +6 -0
- package/dist/payload-H55PON66.js.map +1 -0
- package/dist/payload-RNKEYTQ4.cjs +8 -0
- package/dist/payload-RNKEYTQ4.cjs.map +1 -0
- package/dist/{shared-chart-DVC5S2P6.cjs → shared-chart-GCUFIUQL.cjs} +49 -20
- package/dist/shared-chart-GCUFIUQL.cjs.map +1 -0
- package/dist/{shared-chart-3STFRVWT.js → shared-chart-JV4MGKXX.js} +50 -20
- package/dist/shared-chart-JV4MGKXX.js.map +1 -0
- package/dist/{shared-chart-MFQSQG4K.cjs → shared-chart-OUC7EHFC.cjs} +49 -19
- package/dist/shared-chart-OUC7EHFC.cjs.map +1 -0
- package/dist/{shared-chart-BFQNYOIQ.js → shared-chart-PY47ED4I.js} +49 -20
- package/dist/shared-chart-PY47ED4I.js.map +1 -0
- package/dist/{surface-regl-R2N54JT2.js → surface-webgl-2ZZ6JQR2.js} +87 -151
- package/dist/surface-webgl-2ZZ6JQR2.js.map +1 -0
- package/dist/{surface-regl-BBJ6OIKK.cjs → surface-webgl-3HS6VBCK.cjs} +88 -152
- package/dist/surface-webgl-3HS6VBCK.cjs.map +1 -0
- package/dist/{surface-regl-7CDGGVDG.js → surface-webgl-4DQXDDXU.js} +87 -151
- package/dist/surface-webgl-4DQXDDXU.js.map +1 -0
- package/dist/{surface-regl-SUJ2TFZA.cjs → surface-webgl-SVYD564V.cjs} +88 -152
- package/dist/surface-webgl-SVYD564V.cjs.map +1 -0
- package/dist/vanilla.cjs +4 -3
- package/dist/vanilla.cjs.map +1 -1
- package/dist/vanilla.d.cts +2 -2
- package/dist/vanilla.d.ts +2 -2
- package/dist/vanilla.js +3 -2
- package/dist/xlsx-worker.js +298 -92
- package/dist/xlsx-worker.js.map +1 -1
- package/package.json +6 -15
- package/dist/browser-B73UAN6E.cjs.map +0 -1
- package/dist/chart-renderer-2EKXNHUD.cjs.map +0 -1
- package/dist/chart-renderer-W7XW24JI.cjs.map +0 -1
- package/dist/chart-renderer-XBF7EPUS.js.map +0 -1
- package/dist/chart-renderer-ZLJVPLGN.js.map +0 -1
- package/dist/chunk-6IGWCJU5.cjs +0 -90
- package/dist/chunk-6IGWCJU5.cjs.map +0 -1
- package/dist/chunk-HEEFCVWS.js.map +0 -1
- package/dist/chunk-HKMFMIKE.js.map +0 -1
- package/dist/chunk-VG4JELEQ.js.map +0 -1
- package/dist/chunk-WGRRI25I.cjs.map +0 -1
- package/dist/chunk-XISBYOD5.cjs.map +0 -1
- package/dist/payload-JBPE7GEG.cjs +0 -8
- package/dist/payload-JBPE7GEG.cjs.map +0 -1
- package/dist/payload-KYNCVJT5.js +0 -6
- package/dist/payload-KYNCVJT5.js.map +0 -1
- package/dist/region-map-geography-24TXETDP.cjs +0 -184
- package/dist/region-map-geography-24TXETDP.cjs.map +0 -1
- package/dist/region-map-geography-OR6DHAF7.js +0 -182
- package/dist/region-map-geography-OR6DHAF7.js.map +0 -1
- package/dist/shared-chart-3STFRVWT.js.map +0 -1
- package/dist/shared-chart-BFQNYOIQ.js.map +0 -1
- package/dist/shared-chart-DVC5S2P6.cjs.map +0 -1
- package/dist/shared-chart-MFQSQG4K.cjs.map +0 -1
- package/dist/surface-regl-7CDGGVDG.js.map +0 -1
- package/dist/surface-regl-BBJ6OIKK.cjs.map +0 -1
- package/dist/surface-regl-R2N54JT2.js.map +0 -1
- package/dist/surface-regl-SUJ2TFZA.cjs.map +0 -1
- package/dist/world-atlas-LICENSE.txt +0 -13
- /package/dist/{us-atlas-LICENSE.txt → rust-office-charts-MAP-DATA-LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/chart-renderer.tsx"],"sourcesContent":["import { useChartEvents, renderSelectionPointHandles, renderSelectionRectHandles } from \"./chart-interaction\";\nimport { getBuiltinChartColor, getBuiltinChartSurfaceLine, resolveBuiltinChartColor } from \"./builtin-chart-styles\";\nimport { hierarchy as d3Hierarchy, partition as d3Partition, treemap as d3Treemap, treemapBinary, treemapDice, treemapSquarify } from \"d3-hierarchy\";\nimport * as React from \"react\";\nimport { shadeSurfaceMatteColor, surfaceNormal, transformSurfaceNormal } from \"./surface-lighting\";\nimport { clipSurfaceBand, groupSurfaceBandEdges, normalizeSurfaceValue, surfaceDataRatios, triangulateSurfaceQuad } from \"./surface-geometry\";\nimport { scaleBand, scaleLinear, scalePoint } from \"d3-scale\";\nimport {\n arc as d3Arc,\n area as d3Area,\n curveCatmullRom,\n curveLinear,\n curveLinearClosed,\n line as d3Line,\n pie as d3Pie\n} from \"d3-shape\";\nimport type { CurveFactory } from \"d3-shape\";\nimport { regionMapResources, surfaceRenderer } from \"./chart-loader\";\nimport { useChartModule } from \"./use-chart-module\";\nimport type { RegionMapResources, RegionMapFeature } from \"./region-map-geography\";\nimport type { HierarchyNode, HierarchyRectangularNode } from \"d3-hierarchy\";\nimport type { FeatureCollection, Geometry } from \"geojson\";\nimport type { XlsxChart, XlsxChartAxis, XlsxChartElementSelection, XlsxChartSeries, XlsxChartTypeGroup, XlsxImageRect } from \"./types\";\n\ntype ChartRendererPalette = {\n border: string;\n mutedText: string;\n surface: string;\n text: string;\n};\n\nexport type ChartSvgProps = {\n chart: XlsxChart;\n onChartElementDoubleClick?: (selection: XlsxChartElementSelection, event: React.MouseEvent<SVGSVGElement>) => void;\n onChartElementPointerDown?: (selection: XlsxChartElementSelection, event: React.PointerEvent<SVGSVGElement>) => void;\n palette: ChartRendererPalette;\n rect: XlsxImageRect;\n selectedChartElement?: XlsxChartElementSelection | null;\n};\n\ntype RegionMapPlotProps = Pick<ChartSvgProps, \"chart\" | \"palette\" | \"selectedChartElement\"> & { layout: ChartLayout };\n\nfunction RegionMapPlot({ chart, palette, layout, selectedChartElement }: RegionMapPlotProps) {\n const resources = useChartModule(regionMapResources);\n return resources\n ? renderRegionMapChart(chart, palette, layout, selectedChartElement, resources)\n : null;\n}\n\nfunction SurfaceChartComposite({\n loadingFallback,\n ...props\n}: React.ComponentProps<typeof import(\"./surface-regl\").MemoSurfaceChartComposite> & { loadingFallback: React.ReactNode }) {\n const renderer = useChartModule(surfaceRenderer);\n return renderer ? <renderer.MemoSurfaceChartComposite {...props} /> : <>{loadingFallback}</>;\n}\n\ntype LegendItem = {\n color: string;\n label: string;\n};\n\ntype PlotRect = {\n height: number;\n left: number;\n top: number;\n width: number;\n};\n\ntype ChartLayout = {\n height: number;\n legendBounds?: PlotRect;\n legendItems: LegendItem[];\n legendPosition: string | undefined;\n plot: PlotRect;\n titleHeight: number;\n width: number;\n};\n\ntype BarRect = {\n capEnd?: boolean;\n capStart?: boolean;\n categoryIndex: number;\n bottomScale?: number;\n color: string;\n depthOrder?: number;\n depthOffsetX?: number;\n depthOffsetY?: number;\n depthX?: number;\n depthY?: number;\n gradientId?: string;\n height: number;\n invertedNegative?: boolean;\n isHorizontal: boolean;\n key: string;\n left: number;\n shape3d?: string;\n seriesIndex: number;\n stroke: string;\n strokeWidth: number;\n topScale?: number;\n value: number;\n width: number;\n top: number;\n};\n\ntype ChartElementDataOptions = {\n selectionMode?: \"seriesFirst\";\n};\n\nfunction chartElementDataProps(seriesIndex: number, pointIndex?: number, options?: ChartElementDataOptions) {\n return {\n \"data-xlsx-chart-point-index\": typeof pointIndex === \"number\" ? String(pointIndex) : undefined,\n \"data-xlsx-chart-selection-mode\": options?.selectionMode,\n \"data-xlsx-chart-series-index\": String(seriesIndex),\n style: {\n cursor: \"pointer\",\n pointerEvents: \"all\"\n } as React.CSSProperties\n };\n}\n\nfunction barChartElementDataProps(seriesIndex: number, pointIndex: number) {\n return chartElementDataProps(seriesIndex, pointIndex, { selectionMode: \"seriesFirst\" });\n}\n\nfunction isSelectedChartSeries(\n selectedChartElement: XlsxChartElementSelection | null | undefined,\n chartId: string,\n seriesIndex: number\n) {\n return selectedChartElement?.chartId === chartId\n && selectedChartElement.kind !== \"chart\"\n && selectedChartElement.seriesIndex === seriesIndex;\n}\n\nfunction isSelectedChartPoint(\n selectedChartElement: XlsxChartElementSelection | null | undefined,\n chartId: string,\n seriesIndex: number,\n pointIndex: number\n) {\n return selectedChartElement?.chartId === chartId\n && selectedChartElement.kind === \"point\"\n && selectedChartElement.seriesIndex === seriesIndex\n && selectedChartElement.pointIndex === pointIndex;\n}\n\nfunction isSelectedChartPointOrSeries(\n selectedChartElement: XlsxChartElementSelection | null | undefined,\n chartId: string,\n seriesIndex: number,\n pointIndex: number\n) {\n return isSelectedChartPoint(selectedChartElement, chartId, seriesIndex, pointIndex)\n || (\n isSelectedChartSeries(selectedChartElement, chartId, seriesIndex)\n && selectedChartElement?.kind !== \"point\"\n );\n}\n\ntype ChartHierarchyDatum = {\n children?: ChartHierarchyDatum[];\n colorIndex?: number;\n name: string;\n value?: number;\n};\n\ntype ComboRenderableGroup = {\n axisIds: number[];\n categoryAxis: XlsxChartAxis | null;\n chartType: string;\n gapWidth?: number;\n is3d?: boolean;\n raw?: Record<string, unknown>;\n series: XlsxChartSeries[];\n valueAxis: XlsxChartAxis | null;\n};\n\ntype ChartStage = {\n color: string;\n isSubtotal: boolean;\n label: string;\n value: number;\n};\n\ntype BoxWhiskerStats = {\n lowerFence: number;\n lowerWhisker: number;\n max: number;\n mean: number;\n median: number;\n min: number;\n outliers: number[];\n q1: number;\n q3: number;\n upperFence: number;\n upperWhisker: number;\n visiblePoints: number[];\n};\n\ntype SurfaceDomain = {\n maxValue: number;\n minValue: number;\n safeMax: number;\n ticks: number[];\n};\n\nfunction parseRgbColor(color: string) {\n const match = /^#?([0-9a-f]{6})$/i.exec(color);\n if (!match) {\n return null;\n }\n return {\n blue: Number.parseInt(match[1].slice(4, 6), 16),\n green: Number.parseInt(match[1].slice(2, 4), 16),\n red: Number.parseInt(match[1].slice(0, 2), 16)\n };\n}\n\nfunction mixRgbColor(color: string, mixWith: string, ratio: number) {\n const base = parseRgbColor(color);\n const target = parseRgbColor(mixWith);\n if (!base || !target) {\n return color;\n }\n const clamped = Math.max(0, Math.min(1, ratio));\n const mixChannel = (left: number, right: number) => Math.round(left + (right - left) * clamped);\n return `#${[\n mixChannel(base.red, target.red),\n mixChannel(base.green, target.green),\n mixChannel(base.blue, target.blue)\n ].map((value) => value.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\nfunction lightenColor(color: string, ratio: number) {\n return mixRgbColor(color, \"#ffffff\", ratio);\n}\n\nfunction darkenColor(color: string, ratio: number) {\n return mixRgbColor(color, \"#000000\", ratio);\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\nconst DEFAULT_CHART_FONT_STACK = [\n \"\\\"Aptos\\\"\",\n \"Calibri\",\n \"Carlito\",\n \"\\\"React XLSX Carlito\\\"\",\n \"\\\"Segoe UI\\\"\",\n \"Tahoma\",\n \"Arial\",\n \"sans-serif\"\n].join(\", \");\n\nconst DEFAULT_CHART_TEXT_COLOR = \"#000000\";\nconst DEFAULT_CHART_MUTED_TEXT_COLOR = \"#7f7f7f\";\n\nfunction escapeCssFontFamilyToken(value: string) {\n const trimmed = value.trim();\n if (!trimmed) {\n return \"\";\n }\n if (\n trimmed.startsWith(\"\\\"\")\n || trimmed.startsWith(\"'\")\n || /^(serif|sans-serif|monospace|cursive|fantasy|system-ui|math|emoji|fangsong)$/i.test(trimmed)\n ) {\n return trimmed;\n }\n return /\\s/.test(trimmed) ? `\"${trimmed.replace(/\"/g, \"\\\\\\\"\")}\"` : trimmed;\n}\n\nfunction buildChartFontFamily(fontFamily: string | undefined) {\n if (!fontFamily || fontFamily.trim().length === 0) {\n return DEFAULT_CHART_FONT_STACK;\n }\n const tokens = fontFamily\n .split(\",\")\n .map(escapeCssFontFamilyToken)\n .filter((token) => token.length > 0);\n if (tokens.length === 0) {\n return DEFAULT_CHART_FONT_STACK;\n }\n return [...tokens, \"Carlito\", \"\\\"React XLSX Carlito\\\"\", \"\\\"Segoe UI\\\"\", \"Tahoma\", \"Arial\", \"sans-serif\"].join(\", \");\n}\n\nfunction resolveChartTextColor(chart: XlsxChart) {\n return chart.textColor ?? chart.titleColor ?? DEFAULT_CHART_TEXT_COLOR;\n}\n\nfunction resolveChartAxisTextColor(chart: XlsxChart) {\n return chart.axisLabelColor ?? chart.textColor ?? chart.titleColor ?? DEFAULT_CHART_TEXT_COLOR;\n}\n\nfunction resolveChartMutedTextColor(chart: XlsxChart) {\n return chart.textColor ?? chart.axisLabelColor ?? DEFAULT_CHART_MUTED_TEXT_COLOR;\n}\n\nfunction safeNumber(value: unknown) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const normalized = value.trim().replace(/,/g, \"\");\n if (!normalized) {\n return null;\n }\n const parsed = Number(normalized);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction chartSeriesColor(chart: XlsxChart, seriesIndex: number) {\n const series = chart.series[seriesIndex];\n const paletteColor = chart.chartColorPalette?.[seriesIndex % Math.max(1, chart.chartColorPalette.length)];\n return series?.color ?? series?.lineColor ?? paletteColor ?? chart.textColor ?? \"#222222\";\n}\n\nfunction chartSeriesStrokeColor(chart: XlsxChart, seriesIndex: number) {\n const series = chart.series[seriesIndex];\n const paletteColor = chart.chartColorPalette?.[seriesIndex % Math.max(1, chart.chartColorPalette.length)];\n return series?.lineColor ?? series?.color ?? paletteColor ?? chart.textColor ?? \"#222222\";\n}\n\nfunction variesBarColorsByCategory(chart: XlsxChart) {\n return chart.series.length === 1\n && chart.varyColors !== false\n && !chart.chartExLayout\n && [\"ColumnClustered\", \"ColumnStacked\", \"ColumnPercentStacked\", \"BarClustered\", \"BarStacked\", \"BarPercentStacked\"].includes(chart.chartType);\n}\n\nfunction chartPointColor(chart: XlsxChart, pointIndex: number, seriesIndex = 0) {\n const pointStyle = chart.series[seriesIndex]?.dataPointStyles?.find((entry) => entry.index === pointIndex);\n if (pointStyle?.color) {\n return pointStyle.color;\n }\n const rawPoint = chart.series[seriesIndex]?.dataPoints?.[pointIndex];\n if (rawPoint && typeof rawPoint === \"object\") {\n const pointRecord = rawPoint as Record<string, unknown>;\n if (typeof pointRecord.color === \"string\") {\n return pointRecord.color;\n }\n if (typeof pointRecord.fillColor === \"string\") {\n return pointRecord.fillColor;\n }\n if (typeof pointRecord.solidFillHex === \"string\") {\n const normalized = pointRecord.solidFillHex.replace(/^#/, \"\");\n if (/^[0-9a-fA-F]{6}$/.test(normalized)) {\n return `#${normalized.toLowerCase()}`;\n }\n }\n const shapeProperties = pointRecord.shapeProperties && typeof pointRecord.shapeProperties === \"object\"\n ? pointRecord.shapeProperties as Record<string, unknown>\n : null;\n if (shapeProperties && typeof shapeProperties.solidFillHex === \"string\") {\n const normalized = shapeProperties.solidFillHex.replace(/^#/, \"\");\n if (/^[0-9a-fA-F]{6}$/.test(normalized)) {\n return `#${normalized.toLowerCase()}`;\n }\n }\n }\n const themeColors = chart.raw?.builtinThemeColors as Record<number, string> | undefined;\n const pointCount = Math.max(1, chart.series[seriesIndex]?.values.length ?? 0);\n const builtinColor = themeColors ? resolveBuiltinChartColor(getBuiltinChartColor(chart.chartStyleId, pointIndex, pointCount), themeColors) : undefined;\n if (builtinColor) return builtinColor;\n const palette = chart.chartColorPalette;\n if (palette && palette.length > 0) {\n const offset = chart.chartColorPaletteOffset ?? 0;\n return palette[(pointIndex + offset) % palette.length] ?? palette[pointIndex % palette.length];\n }\n return chartSeriesColor(chart, seriesIndex);\n}\n\nfunction isHistogramLikeSeries(series: XlsxChartSeries | null | undefined) {\n const raw = series?.raw && typeof series.raw === \"object\"\n ? series.raw as Record<string, unknown>\n : null;\n return Array.isArray(raw?.chartExHistogramBins) && raw.chartExHistogramBins.length > 0;\n}\n\nfunction isHistogramLikeChart(chart: XlsxChart) {\n return chart.series.some((series) => isHistogramLikeSeries(series));\n}\n\nfunction resolveRegionMapBaseColor(chart: XlsxChart, seriesIndex: number) {\n return chart.series[seriesIndex]?.color\n ?? chart.series[seriesIndex]?.lineColor\n ?? chart.chartColorPalette?.[0]\n ?? chartSeriesColor(chart, seriesIndex);\n}\n\nfunction resolveRegionMapDataColor(chart: XlsxChart, seriesIndex: number) {\n const pointColor = normalizeRendererHexColor(chartPointColor(chart, 0, seriesIndex));\n if (pointColor) {\n return pointColor;\n }\n\n const palette = Array.isArray(chart.chartColorPalette) ? chart.chartColorPalette : [];\n if (palette.length > 0) {\n const offset = chart.chartColorPaletteOffset ?? 0;\n const paletteColor = normalizeRendererHexColor(\n palette[((offset % palette.length) + palette.length) % palette.length]\n );\n if (paletteColor) {\n return paletteColor;\n }\n }\n\n return normalizeRendererHexColor(chart.series[seriesIndex]?.color ?? chart.series[seriesIndex]?.lineColor)\n ?? \"#4f81bd\";\n}\n\nfunction resolveRegionMapValueColors(series: XlsxChartSeries | null | undefined) {\n const raw = series?.raw && typeof series.raw === \"object\"\n ? series.raw as Record<string, unknown>\n : null;\n const colors = Array.isArray(raw?.valueColors)\n ? raw.valueColors\n .map((value) => normalizeRendererHexColor(value))\n .filter((value): value is string => Boolean(value))\n : [];\n return colors.length >= 2 ? colors : null;\n}\n\nfunction resolveRegionMapColorStrings(series: XlsxChartSeries | null | undefined) {\n const raw = series?.raw && typeof series.raw === \"object\"\n ? series.raw as Record<string, unknown>\n : null;\n const values = Array.isArray(raw?.chartExColorStrings)\n ? raw.chartExColorStrings\n .map((value) => (typeof value === \"string\" ? value.trim() : \"\"))\n : [];\n return values.some((value) => value.length > 0) ? values : null;\n}\n\nfunction resolveRegionMapLayoutProperties(series: XlsxChartSeries | null | undefined) {\n const raw = series?.raw && typeof series.raw === \"object\"\n ? series.raw as Record<string, unknown>\n : null;\n return raw?.layoutProperties && typeof raw.layoutProperties === \"object\"\n ? raw.layoutProperties as Record<string, unknown>\n : null;\n}\n\nfunction resolveRegionMapValueColorFromStops(stops: string[], ratio: number) {\n if (stops.length === 0) {\n return \"#4f81bd\";\n }\n if (stops.length === 1) {\n return stops[0];\n }\n const clamped = clamp(ratio, 0, 1);\n const scaled = clamped * (stops.length - 1);\n const lowerIndex = Math.floor(scaled);\n const upperIndex = Math.min(stops.length - 1, lowerIndex + 1);\n const mixRatio = scaled - lowerIndex;\n return mixRgbColor(stops[lowerIndex] ?? stops[0], stops[upperIndex] ?? stops[stops.length - 1], mixRatio);\n}\n\nfunction resolveRegionMapValueColor(chart: XlsxChart, seriesIndex: number, ratio: number) {\n const explicitStops = resolveRegionMapValueColors(chart.series[seriesIndex] ?? null);\n if (explicitStops) {\n return resolveRegionMapValueColorFromStops(explicitStops, ratio);\n }\n const baseColor = resolveRegionMapDataColor(chart, seriesIndex);\n return resolveRegionMapValueColorFromStops([\n lightenColor(baseColor, 0.82),\n lightenColor(baseColor, 0.28),\n darkenColor(baseColor, 0.08)\n ], ratio);\n}\n\nfunction resolveRegionMapNoDataColor(chart: XlsxChart, seriesIndex: number) {\n const baseColor = resolveRegionMapBaseColor(chart, seriesIndex);\n return normalizeRendererHexColor(baseColor) ?? chartSeriesColor(chart, seriesIndex);\n}\n\nfunction buildRegionMapLegendItems(chart: XlsxChart): LegendItem[] {\n const primarySeriesIndex = Math.max(0, chart.series.findIndex((series) => series.hidden !== true));\n const categoricalValues = resolveRegionMapColorStrings(chart.series[primarySeriesIndex] ?? null);\n if (categoricalValues) {\n const uniqueValues = Array.from(new Set(categoricalValues.filter(Boolean)));\n return uniqueValues.map((value, index) => ({\n color: chartPointColor(chart, index, primarySeriesIndex),\n label: value\n }));\n }\n const values = (chart.series[primarySeriesIndex]?.values ?? [])\n .map((value) => safeNumber(value))\n .filter((value): value is number => value != null);\n if (values.length === 0) {\n return [];\n }\n const minValue = Math.min(...values);\n const maxValue = Math.max(...values);\n return [minValue, maxValue].map((value, index) => ({\n color: resolveRegionMapValueColor(chart, primarySeriesIndex, index),\n label: formatTickValue(value)\n }));\n}\n\nfunction normalizeBuiltinPieStyleId(styleId: number | undefined) {\n if (typeof styleId !== \"number\" || !Number.isFinite(styleId)) {\n return null;\n }\n return styleId >= 100 ? styleId - 100 : styleId;\n}\n\nfunction getBuiltinPiePalette(chart: XlsxChart, seriesIndex: number) {\n if (chart.raw?.builtinThemeColors) return null;\n const normalized = normalizeBuiltinPieStyleId(chart.chartStyleId);\n if (normalized !== 32) {\n return null;\n }\n const baseColor = chart.series[seriesIndex]?.color\n ?? chart.series[seriesIndex]?.lineColor\n ?? chart.chartColorPalette?.[0]\n ?? null;\n if (!baseColor) {\n return null;\n }\n return [\n lightenColor(baseColor, 0.16),\n darkenColor(baseColor, 0.42),\n baseColor,\n darkenColor(baseColor, 0.18),\n lightenColor(baseColor, 0.08),\n darkenColor(baseColor, 0.3)\n ];\n}\n\nfunction resolvePiePointColor(chart: XlsxChart, pointIndex: number, seriesIndex = 0) {\n const pointStyle = chart.series[seriesIndex]?.dataPointStyles?.find((entry) => entry.index === pointIndex);\n if (pointStyle?.color) {\n return pointStyle.color;\n }\n const builtinPalette = getBuiltinPiePalette(chart, seriesIndex);\n if (builtinPalette && builtinPalette.length > 0) {\n return builtinPalette[pointIndex % builtinPalette.length] ?? builtinPalette[0];\n }\n return chartPointColor(chart, pointIndex, seriesIndex);\n}\n\nfunction selectPrimaryPieSeriesIndex(chart: XlsxChart) {\n let bestIndex = 0;\n let bestScore = Number.NEGATIVE_INFINITY;\n\n chart.series.forEach((series, index) => {\n let positiveCount = 0;\n let total = 0;\n for (const rawValue of series.values) {\n const value = safeNumber(rawValue);\n if (value != null && value > 0) {\n positiveCount += 1;\n total += value;\n }\n }\n const score = positiveCount * 1_000_000 + total;\n if (score > bestScore) {\n bestScore = score;\n bestIndex = index;\n }\n });\n\n return bestIndex;\n}\n\nfunction chartSeriesBarColors(\n chart: XlsxChart,\n seriesIndex: number,\n value: number,\n negativeFillMode: \"chartArea\" | \"none\" | \"series\"\n) {\n const series = chart.series[seriesIndex];\n const defaultFill = chartSeriesColor(chart, seriesIndex);\n const defaultStroke = chartSeriesStrokeColor(chart, seriesIndex);\n const defaultStrokeWidth = typeof series?.lineWidthPx === \"number\" && Number.isFinite(series.lineWidthPx)\n ? Math.max(0.8, Math.min(4, series.lineWidthPx))\n : 1;\n if (value < 0 && series?.invertIfNegative) {\n const resolvedNegativeFill = negativeFillMode === \"none\"\n ? \"none\"\n : series.negativeColor\n ?? (negativeFillMode === \"chartArea\" ? chart.chartAreaFillColor : undefined)\n ?? defaultFill;\n return {\n fill: resolvedNegativeFill,\n stroke: series.negativeLineColor ?? defaultStroke,\n strokeWidth: defaultStrokeWidth\n };\n }\n return {\n fill: defaultFill,\n stroke: defaultStroke,\n strokeWidth: defaultStrokeWidth\n };\n}\n\nfunction resolveCategoryBandPadding(gapWidth: number | undefined) {\n const normalizedGap = typeof gapWidth === \"number\" && Number.isFinite(gapWidth)\n ? clamp(gapWidth, 0, 500)\n : 150;\n const inner = clamp(normalizedGap / (100 + normalizedGap), 0.05, 0.88);\n const outer = clamp(inner * 0.5, 0, 0.45);\n return { inner, outer };\n}\n\nfunction normalizeLegendPosition(position: string | undefined) {\n switch (position) {\n case \"bottom\":\n return \"bottom\";\n case \"left\":\n return \"left\";\n case \"right\":\n return \"right\";\n case \"top\":\n return \"top\";\n case \"b\":\n return \"bottom\";\n case \"l\":\n return \"left\";\n case \"r\":\n return \"right\";\n case \"t\":\n return \"top\";\n default:\n return position;\n }\n}\n\nfunction normalizeChartMarkerSymbol(value: string | undefined) {\n if (!value || value === \"none\") {\n return \"none\";\n }\n if (value === \"auto\") {\n return \"circle\";\n }\n return value;\n}\n\nfunction normalizeRenderableChartType(chart: XlsxChart) {\n if (chart.chartType === \"ScatterSmooth\") {\n return \"ScatterSmooth\";\n }\n if (chart.chartType === \"Pie\" && chart.is3d) {\n return \"Pie3D\";\n }\n if (\n chart.chartType === \"Pie\"\n && chart.series.some((series) => Array.isArray(series.dataPoints) && series.dataPoints.some((point) => (\n point != null\n && typeof point === \"object\"\n && \"explosion\" in point\n && typeof (point as { explosion?: unknown }).explosion === \"number\"\n && ((point as { explosion?: number }).explosion ?? 0) > 0\n )))\n ) {\n return \"PieExploded\";\n }\n if (chart.chartType === \"Unsupported(c:ofPieChart)\") {\n return \"BarOfPie\";\n }\n return chart.chartType;\n}\n\nfunction normalizeCategoryLabel(value: unknown) {\n if (value == null) {\n return \"\";\n }\n return String(value)\n .replace(/[\\u200B-\\u200D\\uFEFF]/g, \"\")\n .trim();\n}\n\nfunction estimateReferencePointCount(formula: string | undefined) {\n if (!formula) {\n return 0;\n }\n const bang = formula.lastIndexOf(\"!\");\n const rawRange = (bang >= 0 ? formula.slice(bang + 1) : formula).replace(/\\$/g, \"\");\n const match = /^([A-Za-z]+)(\\d+):([A-Za-z]+)(\\d+)$/.exec(rawRange.trim());\n if (!match) {\n return 0;\n }\n const startRow = Number(match[2]);\n const endRow = Number(match[4]);\n if (!Number.isFinite(startRow) || !Number.isFinite(endRow)) {\n return 0;\n }\n return Math.abs(endRow - startRow) + 1;\n}\n\nfunction getCategoryLabels(chart: XlsxChart) {\n const primaryCategories = chart.series[0]?.categories ?? [];\n const includeReferenceCategoryCount = chart.plotVisibleOnly !== true;\n const referenceCategoryCount = includeReferenceCategoryCount\n ? Math.max(\n 0,\n ...chart.series.map((series) => Math.max(\n estimateReferencePointCount(series.categoriesRef?.formula),\n estimateReferencePointCount(series.valuesRef?.formula)\n ))\n )\n : 0;\n const categoryCount = Math.max(\n referenceCategoryCount,\n primaryCategories.length,\n ...chart.series.map((series) => Math.max(series.categories.length, series.values.length))\n );\n if (categoryCount <= 0) {\n return [];\n }\n const hasAnyExplicitCategory = chart.series.some((series) => (\n series.categories.some((value) => normalizeCategoryLabel(value).length > 0)\n ));\n const fallbackToImplicitOrdinal = chart.series.some((series) => {\n const categoriesLength = series.categories.length;\n if (categoriesLength === 0) {\n return false;\n }\n return series.categories.every((value) => normalizeCategoryLabel(value).length === 0);\n }) || !hasAnyExplicitCategory;\n return Array.from({ length: categoryCount }, (_, categoryIndex) => {\n const primary = primaryCategories[categoryIndex];\n if (primary != null) {\n const normalizedPrimary = normalizeCategoryLabel(primary);\n if (normalizedPrimary.length > 0) {\n return formatCategoryLabel(chart, primary, normalizedPrimary);\n }\n }\n const fallback = chart.series\n .map((series) => series.categories[categoryIndex])\n .find((value) => normalizeCategoryLabel(value).length > 0);\n if (fallback != null) {\n return formatCategoryLabel(chart, fallback, normalizeCategoryLabel(fallback));\n }\n return fallbackToImplicitOrdinal ? String(categoryIndex + 1) : \"\";\n });\n}\n\nfunction isComboChart(chart: XlsxChart) {\n const typeGroups = chart.typeGroups ?? [];\n if (typeGroups.length < 2) {\n return false;\n }\n const distinctChartTypes = new Set(typeGroups.map((group) => group.chartType));\n return distinctChartTypes.size > 1;\n}\n\nfunction getComboLegendSeries(chart: XlsxChart) {\n if (!isComboChart(chart)) {\n return chart.series.map((series, index) => ({\n color: chartSeriesColor(chart, index),\n label: series.name ?? `Series ${index + 1}`\n }));\n }\n return (chart.typeGroups ?? []).flatMap((group) => (\n group.series.map((series, seriesIndex) => ({\n color: series.lineColor ?? series.markerColor ?? series.color ?? chartSeriesColor(chart, seriesIndex),\n label: series.name ?? `Series ${seriesIndex + 1}`\n }))\n ));\n}\n\nfunction findAxisForGroup(\n chart: XlsxChart,\n axisIds: number[],\n positionMatcher: (position: string | undefined) => boolean,\n allowAnyMatch = false\n) {\n const positionedMatch = chart.axes.find((axis) => (\n axis.id != null\n && axisIds.includes(axis.id)\n && positionMatcher(axis.position)\n ));\n if (positionedMatch) {\n return positionedMatch;\n }\n if (!allowAnyMatch) {\n return null;\n }\n return chart.axes.find((axis) => axis.id != null && axisIds.includes(axis.id)) ?? null;\n}\n\nfunction buildComboGroups(chart: XlsxChart): ComboRenderableGroup[] {\n return (chart.typeGroups ?? []).map((group) => {\n const axisIds = group.axisIds ?? [];\n const categoryAxis = findAxisForGroup(chart, axisIds, (position) => position === \"b\" || position === \"t\")\n ?? chart.categoryAxis\n ?? null;\n const valueAxis = findAxisForGroup(chart, axisIds, (position) => position === \"l\" || position === \"r\", true)\n ?? chart.valueAxis\n ?? null;\n return {\n axisIds,\n categoryAxis,\n chartType: group.chartType,\n gapWidth: group.gapWidth,\n is3d: group.is3d,\n raw: group.raw,\n series: group.series,\n valueAxis\n };\n }).filter((group) => group.series.length > 0);\n}\n\nfunction resolveRenderableSeriesValue(rawValue: unknown, displayBlanksAs: string | undefined) {\n const numeric = safeNumber(rawValue);\n if (numeric != null) {\n return numeric;\n }\n return displayBlanksAs === \"zero\" ? 0 : null;\n}\n\nfunction coerceLooseNumber(value: unknown): number | null {\n const strict = safeNumber(value);\n if (strict != null) {\n return strict;\n }\n if (Array.isArray(value)) {\n for (const entry of value) {\n const nested = coerceLooseNumber(entry);\n if (nested != null) {\n return nested;\n }\n }\n return null;\n }\n if (value && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n for (const key of [\"x\", \"value\", \"v\", \"num\", \"number\", \"raw\"]) {\n const nested = coerceLooseNumber(record[key]);\n if (nested != null) {\n return nested;\n }\n }\n return null;\n }\n if (typeof value === \"string\") {\n const match = /-?\\d+(?:\\.\\d+)?/.exec(value);\n if (!match) {\n return null;\n }\n const parsed = Number(match[0]);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction buildPieEntries(chart: XlsxChart, seriesIndex = selectPrimaryPieSeriesIndex(chart)) {\n const categories = getCategoryLabels(chart);\n const values = chart.series[seriesIndex]?.values ?? [];\n return values\n .map((rawValue, index) => ({\n color: resolvePiePointColor(chart, index, seriesIndex),\n index,\n label: normalizeCategoryLabel(categories[index]),\n value: Math.max(0, safeNumber(rawValue) ?? 0)\n }))\n .filter((entry) => entry.value > 0);\n}\n\nfunction resolveChartStageSubtotal(series: XlsxChart[\"series\"][number]) {\n const raw = series.raw && typeof series.raw === \"object\"\n ? series.raw as Record<string, unknown>\n : null;\n const layoutProperties = raw?.layoutProperties && typeof raw.layoutProperties === \"object\"\n ? raw.layoutProperties as Record<string, unknown>\n : null;\n const subtotals = Array.isArray(layoutProperties?.subtotals) ? layoutProperties.subtotals : [];\n return subtotals.length > 0 || layoutProperties?.aggregation === true;\n}\n\nfunction buildChartStages(chart: XlsxChart) {\n if (chart.chartType === \"Funnel\" || chart.chartType === \"Waterfall\") {\n const primarySeriesIndex = Math.max(0, chart.series.findIndex((series) => series.hidden !== true));\n const primarySeries = chart.series[primarySeriesIndex] ?? null;\n if (!primarySeries) {\n return [];\n }\n\n const labels = getCategoryLabels(chart);\n return primarySeries.values\n .map((rawValue, index): ChartStage | null => {\n const value = safeNumber(rawValue);\n if (value == null || !Number.isFinite(value)) {\n return null;\n }\n return {\n color: chart.varyColors\n ? chartPointColor(chart, index, primarySeriesIndex)\n : chartSeriesColor(chart, primarySeriesIndex),\n isSubtotal: false,\n label: normalizeCategoryLabel(labels[index]) || String(index + 1),\n value\n };\n })\n .filter((stage): stage is ChartStage => stage != null);\n }\n\n return chart.series\n .map((series, index): ChartStage | null => {\n const value = series.values.reduce<number>((sum, entry) => sum + (safeNumber(entry) ?? 0), 0);\n if (!Number.isFinite(value)) {\n return null;\n }\n const formula = typeof series.valuesRef?.formula === \"string\" ? series.valuesRef.formula : \"\";\n const label = series.name\n ?? (formula.length > 0 ? formula.replace(/^.*!/, \"\").replace(/\\$/g, \"\") : `Series ${index + 1}`);\n return {\n color: chartSeriesColor(chart, typeof series.formatIdx === \"number\" ? series.formatIdx : index),\n isSubtotal: resolveChartStageSubtotal(series),\n label,\n value\n };\n })\n .filter((stage): stage is ChartStage => stage != null);\n}\n\nfunction buildHierarchyData(chart: XlsxChart) {\n const root: ChartHierarchyDatum = {\n children: [],\n name: chart.title ?? chart.name ?? \"Root\"\n };\n const rootChildren = root.children ?? [];\n const topLevelIndexByName = new Map<string, number>();\n const primaryHierarchySeries = chart.series.find((series) => {\n const raw = series.raw && typeof series.raw === \"object\" ? series.raw as Record<string, unknown> : null;\n return Array.isArray(raw?.chartExHierarchyCategories);\n }) ?? null;\n const primaryHierarchyPaths = (() => {\n if (!primaryHierarchySeries) {\n return null;\n }\n const raw = primaryHierarchySeries.raw as Record<string, unknown>;\n return Array.isArray(raw.chartExHierarchyCategories)\n ? raw.chartExHierarchyCategories.map((entry) => Array.isArray(entry)\n ? entry.map((value) => normalizeCategoryLabel(value)).filter((value) => value.length > 0)\n : [])\n : null;\n })();\n const rowCount = primaryHierarchyPaths\n ? primaryHierarchyPaths.length\n : Math.max(0, ...chart.series.map((series) => series.values.length));\n\n for (let rowIndex = 0; rowIndex < rowCount; rowIndex += 1) {\n const path = primaryHierarchyPaths?.[rowIndex] ?? chart.series\n .map((series) => normalizeCategoryLabel(series.categories[rowIndex] ?? series.values[rowIndex]))\n .filter((value) => value.length > 0);\n if (path.length === 0) {\n continue;\n }\n\n let current = root;\n path.forEach((part, levelIndex) => {\n current.children = current.children ?? [];\n const preserveDuplicateLeaf = levelIndex === path.length - 1 && path.length === 1;\n let next = preserveDuplicateLeaf\n ? undefined\n : current.children.find((child) => child.name === part);\n if (!next) {\n next = { children: [], name: part };\n if (levelIndex === 0) {\n const topLevelIndex = topLevelIndexByName.size;\n topLevelIndexByName.set(part, topLevelIndex);\n next.colorIndex = topLevelIndex;\n } else {\n next.colorIndex = current.colorIndex;\n }\n current.children.push(next);\n }\n current = next;\n });\n\n const valueSource = primaryHierarchySeries ?? chart.series[chart.series.length - 1] ?? null;\n current.value = (current.value ?? 0) + Math.max(0.0001, safeNumber(valueSource?.values[rowIndex]) ?? 1);\n }\n\n return rootChildren.length > 0 ? root : null;\n}\n\nfunction resolveBoxWhiskerQuartileMethod(series: XlsxChartSeries) {\n const raw = series.raw && typeof series.raw === \"object\" ? series.raw as Record<string, unknown> : null;\n const layoutProperties = raw?.layoutProperties && typeof raw.layoutProperties === \"object\"\n ? raw.layoutProperties as Record<string, unknown>\n : null;\n const statistics = layoutProperties?.statistics && typeof layoutProperties.statistics === \"object\"\n ? layoutProperties.statistics as Record<string, unknown>\n : null;\n return statistics?.quartileMethod === \"inclusive\" ? \"inclusive\" : \"exclusive\";\n}\n\nfunction resolveBoxWhiskerVisibility(series: XlsxChartSeries) {\n const raw = series.raw && typeof series.raw === \"object\" ? series.raw as Record<string, unknown> : null;\n const layoutProperties = raw?.layoutProperties && typeof raw.layoutProperties === \"object\"\n ? raw.layoutProperties as Record<string, unknown>\n : null;\n const visibility = layoutProperties?.visibility && typeof layoutProperties.visibility === \"object\"\n ? layoutProperties.visibility as Record<string, unknown>\n : null;\n return {\n meanLine: visibility?.meanLine === true,\n meanMarker: visibility?.meanMarker !== false,\n nonoutliers: visibility?.nonoutliers === true,\n outliers: visibility?.outliers !== false\n };\n}\n\nfunction computePercentile(sortedValues: number[], percentile: number, method: \"exclusive\" | \"inclusive\") {\n const count = sortedValues.length;\n if (count === 0) {\n return 0;\n }\n if (count === 1) {\n return sortedValues[0] ?? 0;\n }\n\n const rank = method === \"exclusive\"\n ? percentile * (count + 1)\n : 1 + percentile * (count - 1);\n if (rank <= 1) {\n return sortedValues[0] ?? 0;\n }\n if (rank >= count) {\n return sortedValues[count - 1] ?? 0;\n }\n\n const lowerIndex = Math.floor(rank) - 1;\n const upperIndex = Math.ceil(rank) - 1;\n const fraction = rank - Math.floor(rank);\n const lower = sortedValues[Math.max(0, lowerIndex)] ?? sortedValues[0] ?? 0;\n const upper = sortedValues[Math.max(0, upperIndex)] ?? sortedValues[count - 1] ?? 0;\n return lower + (upper - lower) * fraction;\n}\n\nfunction computeBoxWhiskerStats(series: XlsxChartSeries): BoxWhiskerStats | null {\n const sortedValues = series.values\n .map((value) => safeNumber(value))\n .filter((value): value is number => value != null)\n .sort((left, right) => left - right);\n if (sortedValues.length === 0) {\n return null;\n }\n\n const quartileMethod = resolveBoxWhiskerQuartileMethod(series);\n const q1 = computePercentile(sortedValues, 0.25, quartileMethod);\n const median = computePercentile(sortedValues, 0.5, quartileMethod);\n const q3 = computePercentile(sortedValues, 0.75, quartileMethod);\n const iqr = q3 - q1;\n const lowerFence = q1 - iqr * 1.5;\n const upperFence = q3 + iqr * 1.5;\n const visiblePoints = sortedValues.filter((value) => value >= lowerFence && value <= upperFence);\n const outliers = sortedValues.filter((value) => value < lowerFence || value > upperFence);\n const lowerWhisker = visiblePoints[0] ?? sortedValues[0] ?? 0;\n const upperWhisker = visiblePoints[visiblePoints.length - 1] ?? sortedValues[sortedValues.length - 1] ?? 0;\n const mean = sortedValues.reduce((sum, value) => sum + value, 0) / sortedValues.length;\n\n return {\n lowerFence,\n lowerWhisker,\n max: sortedValues[sortedValues.length - 1] ?? 0,\n mean,\n median,\n min: sortedValues[0] ?? 0,\n outliers,\n q1,\n q3,\n upperFence,\n upperWhisker,\n visiblePoints\n };\n}\n\nfunction resolveHierarchyNodeColor(chart: XlsxChart, node: HierarchyNode<ChartHierarchyDatum>) {\n const lineage = node.ancestors().reverse();\n const topLevel = lineage[1];\n const baseIndex = topLevel?.data.colorIndex ?? 0;\n const baseColor = chartSeriesColor(chart, baseIndex);\n const depth = Math.max(0, node.depth - 1);\n return depth === 0 ? baseColor : lightenColor(baseColor, clamp(depth * 0.16, 0, 0.5));\n}\n\nfunction resolveTreemapNodeColor(chart: XlsxChart, node: HierarchyNode<ChartHierarchyDatum>) {\n const lineage = node.ancestors().reverse();\n const topLevel = lineage[1];\n return chartSeriesColor(chart, topLevel?.data.colorIndex ?? 0);\n}\n\nfunction excelTreemapTile(node: HierarchyRectangularNode<ChartHierarchyDatum>, x0: number, y0: number, x1: number, y1: number) {\n if (!node.children || node.children.length === 0) {\n return;\n }\n if (node.depth === 0) {\n treemapDice(node, x0, y0, x1, y1);\n node.children.forEach((child) => excelTreemapTile(child, child.x0, child.y0, child.x1, child.y1));\n return;\n }\n treemapBinary(node, x0, y0, x1, y1);\n node.children.forEach((child) => excelTreemapTile(child, child.x0, child.y0, child.x1, child.y1));\n}\n\nfunction resolveSurfaceBaseColor(chart: XlsxChart, palette: Pick<ChartRendererPalette, \"text\">) {\n return chart.chartColorPalette?.[0]\n ?? chart.series[0]?.color\n ?? chart.series[0]?.lineColor\n ?? chart.axisLineColor\n ?? chart.textColor\n ?? palette.text;\n}\n\nfunction resolveExplicitSurfaceSeriesColor(chart: XlsxChart, kind: \"fill\" | \"line\") {\n const shape = chart.series[0]?.shapeProperties;\n if (kind === \"fill\" ? shape?.xmlFillHidden === true : shape?.xmlLineHidden === true) return \"transparent\";\n const color = kind === \"fill\"\n ? shape?.xmlFillColor ?? shape?.solidFillHex\n : shape?.xmlLineColor ?? shape?.lineColorHex;\n return normalizeRendererHexColor(color);\n}\n\nfunction getSurfaceColorStops(chart: XlsxChart, palette: ChartRendererPalette) {\n const explicitFill = resolveExplicitSurfaceSeriesColor(chart, \"fill\");\n if (explicitFill) return [explicitFill];\n const colors = (chart.chartColorPalette ?? []).filter((value): value is string => typeof value === \"string\" && value.length > 0);\n return colors.length > 0 ? colors : [resolveSurfaceBaseColor(chart, palette)];\n}\n\nfunction resolveSurfaceBandPaletteColor(chart: XlsxChart, palette: ChartRendererPalette, domain: SurfaceDomain, value: number) {\n const bandIndex = resolveSurfaceBandIndex(domain, value);\n const explicitColor = resolveSurfaceBandFormatColor(chart, \"bandFormatColors\", bandIndex);\n if (explicitColor) return explicitColor;\n const explicitFill = resolveExplicitSurfaceSeriesColor(chart, \"fill\");\n if (explicitFill) return explicitFill;\n const themeColors = chart.raw?.builtinThemeColors as Record<number, string> | undefined;\n const paletteCount = Math.trunc((domain.safeMax - domain.minValue) / (domain.ticks[1] - domain.ticks[0])) + 1;\n const builtinColor = themeColors ? resolveBuiltinChartColor(getBuiltinChartColor(chart.chartStyleId, bandIndex % paletteCount, paletteCount), themeColors) : undefined;\n if (builtinColor) return builtinColor;\n const stops = getSurfaceColorStops(chart, palette);\n if (stops.length === 0) {\n return resolveSurfaceBaseColor(chart, palette);\n }\n return stops[Math.min(stops.length - 1, Math.max(0, bandIndex))] ?? stops[stops.length - 1] ?? resolveSurfaceBaseColor(chart, palette);\n}\n\nfunction getSurfaceDomain(chart: XlsxChart): SurfaceDomain | null {\n const numericValues = chart.series.flatMap((series) => (\n series.values\n .map((value) => safeNumber(value))\n .filter((value): value is number => value != null)\n ));\n if (numericValues.length === 0) {\n return null;\n }\n const explicitMin = typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min)\n ? chart.valueAxis.min\n : null;\n const explicitMax = typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max)\n ? chart.valueAxis.max\n : null;\n const rawMin = Math.min(...numericValues);\n const rawMax = Math.max(...numericValues);\n const spanBase = Math.max(1e-6, rawMax - Math.min(0, rawMin));\n const roughStep = spanBase / 5;\n const magnitude = 10 ** Math.floor(Math.log10(Math.max(roughStep, 1e-6)));\n const normalized = roughStep / magnitude;\n const niceNormalized = normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10;\n const step = typeof chart.valueAxis?.majorUnit === \"number\" && chart.valueAxis.majorUnit > 0\n ? chart.valueAxis.majorUnit\n : niceNormalized * magnitude;\n const minValue = explicitMin ?? (rawMin >= 0 ? 0 : Math.floor(rawMin / step) * step);\n const maxValue = explicitMax ?? Math.ceil(rawMax / step) * step;\n const safeMax = maxValue <= minValue ? minValue + step : maxValue;\n const ticks: number[] = [];\n for (let current = minValue; current <= safeMax + step * 0.001; current += step) {\n ticks.push(Number(current.toFixed(8)));\n }\n const boundedTicks = [...new Set([...ticks.filter((tick) => tick < safeMax), safeMax])];\n return {\n maxValue,\n minValue,\n safeMax,\n ticks: boundedTicks.length >= 2 ? boundedTicks : [minValue, safeMax]\n };\n}\n\nfunction resolveSurfaceBandColor(chart: XlsxChart, palette: ChartRendererPalette, domain: SurfaceDomain, value: number) {\n return resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n}\n\nfunction resolveSurfaceBandIndex(domain: SurfaceDomain, value: number) {\n const ticks = domain.ticks;\n for (let index = 0; index < ticks.length - 1; index += 1) {\n const end = ticks[index + 1] ?? domain.safeMax;\n if (value <= end || index === ticks.length - 2) {\n return index;\n }\n }\n return Math.max(0, ticks.length - 2);\n}\n\nfunction resolveSurfaceBandFormatColor(chart: XlsxChart, key: \"bandFormatColors\" | \"bandFormatLineColors\", index: number) {\n const colors = chart.raw?.[key];\n if (!colors || typeof colors !== \"object\" || !Object.prototype.hasOwnProperty.call(colors, index)) return null;\n const color = (colors as Record<number, unknown>)[index];\n return typeof color === \"string\" && color.length > 0 ? color : null;\n}\n\nfunction resolveSurfaceWireframeColor(chart: XlsxChart, palette: ChartRendererPalette, domain: SurfaceDomain, value: number) {\n const bandIndex = resolveSurfaceBandIndex(domain, value);\n const themeColors = chart.raw?.builtinThemeColors as Record<number, string> | undefined;\n const paletteCount = Math.trunc((domain.safeMax - domain.minValue) / (domain.ticks[1] - domain.ticks[0])) + 1;\n const builtinLine = themeColors ? resolveBuiltinChartColor(getBuiltinChartSurfaceLine(chart.chartStyleId, bandIndex, paletteCount), themeColors) : undefined;\n return resolveSurfaceBandFormatColor(chart, \"bandFormatLineColors\", bandIndex)\n ?? resolveExplicitSurfaceSeriesColor(chart, \"line\")\n ?? builtinLine\n ?? resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n}\n\nfunction resolveSurfacePlotRect(chart: XlsxChart, layout: ChartLayout) {\n if (!isContourSurfaceChart(chart)) {\n return layout.plot;\n }\n const columnCount = Math.max(1, getCategoryLabels(chart).length);\n const depthScale = Math.max(0.01, (chart.view3d?.depthPercent ?? 100) / 100);\n const targetAspect = columnCount / Math.max(1, chart.series.length) / depthScale;\n let width = layout.plot.width;\n let height = layout.plot.height;\n if (width / Math.max(1e-6, height) > targetAspect) {\n width = height * targetAspect;\n } else {\n height = width / Math.max(1e-6, targetAspect);\n }\n return {\n height,\n left: layout.plot.left + (layout.plot.width - width) / 2,\n top: layout.plot.top + (layout.plot.height - height) / 2,\n width\n };\n}\n\nfunction buildSurfaceLegendItems(chart: XlsxChart, palette: ChartRendererPalette) {\n const domain = getSurfaceDomain(chart);\n if (!domain) {\n return [];\n }\n const items: LegendItem[] = [];\n for (let index = 0; index < domain.ticks.length - 1; index += 1) {\n const start = domain.ticks[index] ?? domain.minValue;\n const end = domain.ticks[index + 1] ?? domain.safeMax;\n const midpoint = start + (end - start) * 0.5;\n items.push({\n color: chart.wireframe\n ? resolveSurfaceWireframeColor(chart, palette, domain, midpoint)\n : resolveSurfaceBandColor(chart, palette, domain, midpoint),\n label: `${formatTickValue(start)}-${formatTickValue(end)}`\n });\n }\n return items.reverse();\n}\n\nfunction isContourSurfaceChart(chart: XlsxChart) {\n const rawChartType = chart.raw && typeof chart.raw === \"object\" && typeof (chart.raw as Record<string, unknown>).xmlChartType === \"string\"\n ? (chart.raw as Record<string, unknown>).xmlChartType\n : \"\";\n if (rawChartType === \"surfaceChart\") {\n return true;\n }\n if (rawChartType === \"surface3DChart\") {\n return false;\n }\n return chart.chartType === \"Surface\" && chart.is3d !== true;\n}\n\nfunction renderSurfaceAxes(chart: XlsxChart, layout: ChartLayout) {\n if (chart.categoryAxis?.delete && chart.seriesAxis?.delete && chart.valueAxis?.delete) {\n return null;\n }\n const plot = resolveSurfacePlotRect(chart, layout);\n const categories = getCategoryLabels(chart);\n const seriesLabels = chart.series.map((series, index) => normalizeCategoryLabel(series.name) || `Q${index + 1}`);\n const labelColor = resolveChartAxisTextColor(chart);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? \"#888888\";\n const rowCount = Math.max(1, seriesLabels.length);\n const columnCount = Math.max(1, categories.length);\n const columnPositions = categories.map((_, index) => (\n plot.left + (isContourSurfaceChart(chart) && chart.valueAxis?.crossBetween !== \"midCat\"\n ? ((index + 0.5) / columnCount) * plot.width\n : (columnCount <= 1 ? plot.width / 2 : (index / (columnCount - 1)) * plot.width))\n ));\n const rowPositions = seriesLabels.map((_, index) => (\n plot.top + plot.height - (rowCount <= 1 ? plot.height / 2 : (index / (rowCount - 1)) * plot.height)\n ));\n\n return (\n <g>\n {isContourSurfaceChart(chart) && <rect\n fill=\"none\"\n height={plot.height}\n stroke={lightenColor(axisColor, 0.18)}\n strokeWidth={0.8}\n width={plot.width}\n x={plot.left}\n y={plot.top}\n />}\n {chart.categoryAxis?.delete !== true && chart.categoryAxis?.labelPosition !== \"none\" && categories.map((label, index) => (\n <text\n key={`surface-x-label-${index}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={columnPositions[index] ?? plot.left}\n y={plot.top + plot.height + 14}\n >\n {label}\n </text>\n ))}\n {chart.seriesAxis?.delete !== true && chart.seriesAxis?.labelPosition !== \"none\" && seriesLabels.map((label, index) => (\n <text\n key={`surface-y-label-${index}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"start\"\n x={plot.left + plot.width + 8}\n y={(rowPositions[index] ?? plot.top) + 3}\n >\n {label}\n </text>\n ))}\n </g>\n );\n}\n\nfunction normalizeRendererHexColor(value: unknown) {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n const normalized = trimmed.startsWith(\"#\") ? trimmed.slice(1) : trimmed;\n return /^[0-9a-f]{6}$/i.test(normalized) ? `#${normalized.toLowerCase()}` : null;\n}\n\nfunction buildStockLegendItems(chart: XlsxChart, _palette: ChartRendererPalette): LegendItem[] {\n return chart.series.map((series, index) => ({\n color: chartSeriesStrokeColor(chart, index),\n label: series.name ?? `Series ${index + 1}`\n }));\n}\n\nfunction getLegendItems(chart: XlsxChart, chartType: string, palette: ChartRendererPalette): LegendItem[] {\n if (!chart.legend) {\n return [];\n }\n if (isComboChart(chart)) {\n return getComboLegendSeries(chart);\n }\n if (chartType === \"Stock\") {\n return buildStockLegendItems(chart, palette);\n }\n if (chartType === \"Surface\") {\n return buildSurfaceLegendItems(chart, palette);\n }\n if (chartType === \"RegionMap\") {\n return buildRegionMapLegendItems(chart);\n }\n if (variesBarColorsByCategory(chart)) {\n return getCategoryLabels(chart).map((label, index) => ({\n color: chartPointColor(chart, index),\n label\n }));\n }\n if (chartType === \"Sunburst\" || chartType === \"Treemap\") {\n const hierarchyData = buildHierarchyData(chart);\n if (!hierarchyData?.children) {\n return [];\n }\n return hierarchyData.children.map((child, index) => ({\n color: chartSeriesColor(chart, child.colorIndex ?? index),\n label: child.name\n }));\n }\n if (chartType === \"Pie\" || chartType === \"Pie3D\" || chartType === \"PieExploded\" || chartType === \"Doughnut\" || chartType === \"BarOfPie\") {\n if (chartType === \"BarOfPie\") {\n const categories = getCategoryLabels(chart);\n const values = chart.series[0]?.values ?? [];\n return categories\n .map((label, index) => ({\n color: chartPointColor(chart, index),\n label: normalizeCategoryLabel(label),\n value: safeNumber(values[index]) ?? 0\n }))\n .filter((entry) => entry.value > 0 && entry.label.trim().length > 0)\n .map((entry) => ({\n color: entry.color,\n label: entry.label\n }));\n }\n return buildPieEntries(chart).map((entry) => ({\n color: entry.color,\n label: entry.label\n }));\n }\n const isXyLegend = (\n chartType === \"Scatter\"\n || chartType === \"ScatterLines\"\n || chartType === \"ScatterSmooth\"\n || chartType === \"Bubble\"\n );\n return chart.series.map((series, index) => ({\n color: isXyLegend\n ? (series.lineColor ?? series.markerColor ?? series.color ?? chartSeriesColor(chart, index))\n : chartSeriesColor(chart, index),\n label: series.name ?? `Series ${index + 1}`\n }));\n}\n\nfunction buildLayout(chart: XlsxChart, rect: XlsxImageRect, legendItems: LegendItem[]): ChartLayout {\n const width = Math.max(80, Math.round(rect.width));\n const height = Math.max(60, Math.round(rect.height));\n const isSurfaceChart = chart.chartType === \"Surface\"\n || (chart.raw && typeof chart.raw === \"object\" && typeof (chart.raw as Record<string, unknown>).xmlChartType === \"string\" && String((chart.raw as Record<string, unknown>).xmlChartType).includes(\"surface\"));\n const titleHeight = chart.title && !(isSurfaceChart && chart.raw?.titleOverlay === true) ? (isSurfaceChart ? 30 : 24) : 8;\n const legendPosition = normalizeLegendPosition(chart.legend?.position);\n\n const legendVertical = legendItems.length > 0 && (legendPosition === \"right\" || legendPosition === \"left\");\n const compactWidth = width <= 280;\n const compactHeight = height <= 200;\n const finalLegendPosition = compactWidth || compactHeight\n ? (legendVertical ? \"bottom\" : legendPosition)\n : legendPosition;\n const layoutLegendPosition = chart.chartType === \"RegionMap\" ? finalLegendPosition : legendPosition;\n const primarySeries = chart.series.find((series) => series.hidden !== true) ?? chart.series[0];\n const horizontalMapGradient = chart.chartType === \"RegionMap\"\n && legendItems.length > 0 && !resolveRegionMapColorStrings(primarySeries)\n && (layoutLegendPosition === \"top\" || layoutLegendPosition === \"bottom\");\n const horizontalLegendHeight = horizontalMapGradient\n ? Math.min(48, Math.max(24, height - titleHeight - 8))\n : 24;\n const legendWidth = isSurfaceChart ? Math.max(32, ...legendItems.map((item) => 20 + item.label.length * 5.4)) : 98;\n const plotLeft = (isSurfaceChart && chart.valueAxis?.delete ? 12 : 42) + (layoutLegendPosition === \"left\" ? legendWidth : 0);\n const plotRight = 16 + (layoutLegendPosition === \"right\" ? legendWidth : 0);\n const plotTop = titleHeight + (layoutLegendPosition === \"top\" ? horizontalLegendHeight : 0);\n const plotBottom = (horizontalMapGradient || (isSurfaceChart && chart.categoryAxis?.delete) ? 8 : 28) + (layoutLegendPosition === \"bottom\" ? horizontalLegendHeight : 0);\n const plotWidth = Math.max(horizontalMapGradient ? 1 : 40, width - plotLeft - plotRight);\n\n return {\n height,\n legendBounds: horizontalMapGradient ? {\n left: plotLeft,\n top: layoutLegendPosition === \"top\" ? titleHeight : height - horizontalLegendHeight,\n width: plotWidth,\n height: horizontalLegendHeight\n } : undefined,\n legendItems,\n legendPosition: finalLegendPosition,\n plot: {\n height: Math.max(horizontalMapGradient ? 1 : 40, height - plotTop - plotBottom),\n left: plotLeft,\n top: plotTop,\n width: plotWidth\n },\n titleHeight,\n width\n };\n}\n\nfunction buildNiceStep(minValue: number, maxValue: number, preferredTicks = 5) {\n const span = Math.max(1e-6, maxValue - minValue);\n const roughStep = span / Math.max(1, preferredTicks);\n const magnitude = 10 ** Math.floor(Math.log10(roughStep));\n const normalized = roughStep / magnitude;\n const niceNormalized = normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10;\n return niceNormalized * magnitude;\n}\n\nfunction buildNumericTickValues(minValue: number, maxValue: number, majorUnit?: number) {\n if (!Number.isFinite(minValue) || !Number.isFinite(maxValue) || maxValue <= minValue) {\n return [];\n }\n const step = typeof majorUnit === \"number\" && majorUnit > 0\n ? majorUnit\n : buildNiceStep(minValue, maxValue, 5);\n if (!Number.isFinite(step) || step <= 0) {\n return [];\n }\n const start = Math.floor(minValue / step) * step;\n const values: number[] = [];\n for (let current = start; current <= maxValue + step * 0.001; current += step) {\n if (current >= minValue - step * 0.001 && current <= maxValue + step * 0.001) {\n values.push(Number(current.toFixed(8)));\n }\n }\n return values;\n}\n\nfunction resolveNumericAxisDomain(minValue: number, maxValue: number, majorUnit?: number, includeZero = false) {\n if (!Number.isFinite(minValue) || !Number.isFinite(maxValue)) {\n return {\n max: 1,\n min: 0,\n ticks: [0, 1]\n };\n }\n let domainMin = includeZero ? Math.min(0, minValue) : minValue;\n let domainMax = includeZero ? Math.max(0, maxValue) : maxValue;\n if (domainMax <= domainMin) {\n domainMax = domainMin + 1;\n }\n const step = typeof majorUnit === \"number\" && majorUnit > 0\n ? majorUnit\n : buildNiceStep(domainMin, domainMax, 5);\n const roundedMin = typeof majorUnit === \"number\" && majorUnit > 0\n ? domainMin\n : Math.floor(domainMin / step) * step;\n const roundedMax = typeof majorUnit === \"number\" && majorUnit > 0\n ? domainMax\n : Math.ceil(domainMax / step) * step;\n const finalMin = includeZero ? Math.min(0, roundedMin) : roundedMin;\n const finalMax = roundedMax <= finalMin ? finalMin + step : roundedMax;\n const ticks = buildNumericTickValues(finalMin, finalMax, step);\n return {\n max: finalMax,\n min: finalMin,\n ticks: ticks.length > 0 ? ticks : [finalMin, finalMax]\n };\n}\n\nfunction resolveAxisDomainWithChartOverrides(\n axis: XlsxChartAxis | null | undefined,\n minValue: number,\n maxValue: number,\n includeZero = false\n) {\n const hasExplicitMin = typeof axis?.min === \"number\" && Number.isFinite(axis.min);\n const hasExplicitMax = typeof axis?.max === \"number\" && Number.isFinite(axis.max);\n const rawMin = hasExplicitMin ? Number(axis?.min) : minValue;\n const rawMax = hasExplicitMax ? Number(axis?.max) : maxValue;\n const domain = resolveNumericAxisDomain(rawMin, rawMax, axis?.majorUnit, includeZero);\n return {\n hasExplicitMax,\n hasExplicitMin,\n majorUnit: axis?.majorUnit,\n max: hasExplicitMax ? Number(axis?.max) : domain.max,\n min: hasExplicitMin ? Number(axis?.min) : domain.min,\n ticks: (hasExplicitMin || hasExplicitMax)\n ? buildNumericTickValues(\n hasExplicitMin ? Number(axis?.min) : domain.min,\n hasExplicitMax ? Number(axis?.max) : domain.max,\n axis?.majorUnit\n )\n : domain.ticks\n };\n}\n\nfunction resolve3dFrameOffsets(chart: XlsxChart, baseDepthX = 11, baseDepthY = 8) {\n const depthRatio = clamp((chart.view3d?.depthPercent ?? 100) / 100, 0.35, 3.2);\n const rotX = clamp(chart.view3d?.rotX ?? 20, -80, 80);\n const rotY = clamp(chart.view3d?.rotY ?? 20, -80, 80);\n const usePerspective = chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp((chart.view3d?.perspective ?? (usePerspective ? 26 : 0)) / 100, 0, 1);\n const projectedOrigin = projectCartesian3dPoint(\n 0,\n 0,\n 0,\n rotX * (Math.PI / 180),\n rotY * (Math.PI / 180),\n usePerspective,\n perspectiveStrength\n );\n const projectedDepthPoint = projectCartesian3dPoint(\n 0,\n 0,\n 1,\n rotX * (Math.PI / 180),\n rotY * (Math.PI / 180),\n usePerspective,\n perspectiveStrength\n );\n const depthDirectionX = projectedDepthPoint.x - projectedOrigin.x;\n const depthDirectionY = projectedDepthPoint.y - projectedOrigin.y;\n const horizontalBias = clamp(1.42 + Math.abs(rotY) / 48 + depthRatio * 0.06, 1.5, 1.95);\n const verticalBias = clamp(1.18 + Math.abs(rotX) / 78, 1.22, 1.5);\n const biasedDepthDirectionX = depthDirectionX * horizontalBias;\n const biasedDepthDirectionY = depthDirectionY * verticalBias;\n const depthDirectionMagnitude = Math.hypot(biasedDepthDirectionX, biasedDepthDirectionY) || 1;\n const horizontalFactor = clamp(Math.abs(rotY) / 22, 0.55, 2.2);\n const verticalFactor = clamp(Math.abs(rotX) / 18, 0.45, 1.9);\n const legacyDepthX = Math.max(6, baseDepthX * depthRatio * horizontalFactor) * (rotY < 0 ? -1 : 1);\n const legacyDepthY = -Math.max(4, baseDepthY * depthRatio * verticalFactor);\n const depthMagnitude = Math.max(10, Math.hypot(legacyDepthX, legacyDepthY) * 1.34);\n const depthX = biasedDepthDirectionX / depthDirectionMagnitude * depthMagnitude;\n const depthY = biasedDepthDirectionY / depthDirectionMagnitude * depthMagnitude;\n return {\n depthRatio,\n depthX,\n depthY,\n insetBottom: Math.max(6, Math.abs(depthY) + 5),\n insetLeft: depthX < 0 ? Math.abs(depthX) + 4 : 0,\n insetRight: depthX > 0 ? depthX + 4 : 0,\n insetTop: Math.max(4, Math.abs(depthY) + 2)\n };\n}\n\nfunction formatTickValue(value: number) {\n if (Math.abs(value) >= 1000) {\n return value.toLocaleString(undefined, { maximumFractionDigits: 0 });\n }\n return value.toLocaleString(undefined, { maximumFractionDigits: 2 });\n}\n\nfunction formatPercentTickValue(value: number) {\n return `${formatTickValue(value)}%`;\n}\n\nfunction isLikelyDateFormatCode(formatCode: string | undefined) {\n if (!formatCode) {\n return false;\n }\n const normalized = formatCode\n .toLowerCase()\n .replace(/\\[[^\\]]*]/g, \" \")\n .replace(/\"[^\"]*\"/g, \" \")\n .replace(/\\\\./g, \" \");\n return /(?:d|m|y)/.test(normalized);\n}\n\nfunction excelSerialToDate(serial: number, use1904: boolean) {\n const wholeDays = Math.trunc(serial);\n const milliseconds = Math.round((serial - wholeDays) * 86_400_000);\n const baseUtc = use1904\n ? Date.UTC(1904, 0, 1)\n : Date.UTC(1899, 11, 30);\n return new Date(baseUtc + wholeDays * 86_400_000 + milliseconds);\n}\n\nfunction formatExcelDateSerial(value: number, formatCode: string | undefined, use1904: boolean) {\n const date = excelSerialToDate(value, use1904);\n const normalized = (formatCode ?? \"\").toLowerCase();\n const options: Intl.DateTimeFormatOptions = {};\n\n if (/yyyy/.test(normalized)) {\n options.year = \"numeric\";\n } else if (/yy/.test(normalized)) {\n options.year = \"2-digit\";\n }\n\n if (/mmmm/.test(normalized)) {\n options.month = \"long\";\n } else if (/mmm/.test(normalized)) {\n options.month = \"short\";\n } else if (/(^|[^a-z])m([^a-z]|$)|(^|[^a-z])mm([^a-z]|$)/.test(normalized)) {\n options.month = \"numeric\";\n }\n\n if (/dddd/.test(normalized)) {\n options.weekday = \"long\";\n } else if (/ddd/.test(normalized)) {\n options.weekday = \"short\";\n }\n\n if (/d/.test(normalized)) {\n options.day = \"numeric\";\n }\n\n if (Object.keys(options).length === 0) {\n options.month = \"short\";\n options.day = \"numeric\";\n }\n\n return new Intl.DateTimeFormat(undefined, options).format(date);\n}\n\nfunction formatCategoryLabel(chart: XlsxChart, value: unknown, fallback = \"\") {\n const rawRecord = chart.raw && typeof chart.raw === \"object\"\n ? chart.raw as Record<string, unknown>\n : null;\n const numeric = typeof value === \"number\" && Number.isFinite(value)\n ? value\n : null;\n const formatCode = chart.categoryAxis?.numberFormat?.formatCode;\n if (numeric != null && isLikelyDateFormatCode(formatCode)) {\n return formatExcelDateSerial(numeric, formatCode, rawRecord?.date1904 === true);\n }\n\n const normalized = normalizeCategoryLabel(value);\n if (normalized.length > 0) {\n return normalized;\n }\n return fallback;\n}\n\nfunction truncateSvgText(value: string, maxWidth: number, fontSize = 10) {\n if (!value || maxWidth <= 0) {\n return \"\";\n }\n const charWidth = Math.max(4.2, fontSize * 0.56);\n const maxChars = Math.max(1, Math.floor(maxWidth / charWidth));\n if (value.length <= maxChars) {\n return value;\n }\n if (maxChars <= 1) {\n return \"…\";\n }\n return `${value.slice(0, Math.max(0, maxChars - 1)).trimEnd()}…`;\n}\n\nfunction markerRadiusPx(sizePt: number | undefined) {\n return (Number.isFinite(sizePt) && Number(sizePt) > 0 ? Number(sizePt) : 5) * 2 / 3;\n}\n\nfunction markerSymbolPath(symbol: string, radius: number) {\n const diagonal = radius / Math.SQRT2;\n switch (symbol) {\n case \"none\":\n return \"\";\n case \"diamond\":\n return `M0,${-radius}L${radius},0L0,${radius}L${-radius},0Z`;\n case \"square\":\n return `M${-radius},${-radius}H${radius}V${radius}H${-radius}Z`;\n case \"triangle\":\n case \"triangle-up\":\n return `M0,${-radius}L${radius},${radius}H${-radius}Z`;\n case \"cross\":\n case \"x\":\n return `M${-diagonal},${-diagonal}L${diagonal},${diagonal}M${-diagonal},${diagonal}L${diagonal},${-diagonal}`;\n case \"plus\":\n return `M${-radius},0H${radius}M0,${-radius}V${radius}`;\n case \"star\":\n return `M${-radius},0H${radius}M${-radius / 2},${-radius * Math.sqrt(3) / 2}L${radius / 2},${radius * Math.sqrt(3) / 2}M${-radius / 2},${radius * Math.sqrt(3) / 2}L${radius / 2},${-radius * Math.sqrt(3) / 2}`;\n case \"dash\":\n return `M${-radius},0H${radius}`;\n case \"dot\":\n return `M${-radius / 2},0H${radius / 2}`;\n default:\n return `M${radius},0A${radius},${radius} 0 1,0 ${-radius},0A${radius},${radius} 0 1,0 ${radius},0Z`;\n }\n}\n\nconst TWO_PI = Math.PI * 2;\n\nfunction normalizePieArc(startAngle: number, endAngle: number) {\n let start = startAngle;\n let end = endAngle;\n while (end < start) {\n end += TWO_PI;\n }\n return { end, start };\n}\n\nfunction resolvePieFrontSegments(startAngle: number, endAngle: number): Array<[number, number]> {\n const { start, end } = normalizePieArc(startAngle, endAngle);\n const segments: Array<[number, number]> = [];\n const minBand = Math.floor(start / TWO_PI) - 1;\n const maxBand = Math.ceil(end / TWO_PI) + 1;\n for (let band = minBand; band <= maxBand; band += 1) {\n const frontStart = Math.PI / 2 + band * TWO_PI;\n const frontEnd = Math.PI * 1.5 + band * TWO_PI;\n const segmentStart = Math.max(start, frontStart);\n const segmentEnd = Math.min(end, frontEnd);\n if (segmentEnd - segmentStart > 1e-4) {\n segments.push([segmentStart, segmentEnd]);\n }\n }\n return segments;\n}\n\nfunction pieEllipsePoint(\n centerX: number,\n centerY: number,\n radius: number,\n tilt: number,\n angle: number,\n depth = 0\n) {\n return {\n x: centerX + Math.sin(angle) * radius,\n y: centerY - Math.cos(angle) * radius * tilt + depth\n };\n}\n\nfunction toSvgNumber(value: number) {\n return Number(value.toFixed(3));\n}\n\nfunction buildPieOuterWallPath(\n centerX: number,\n centerY: number,\n radius: number,\n tilt: number,\n depth: number,\n startAngle: number,\n endAngle: number,\n fullArc = false\n) {\n const ry = radius * tilt;\n const segments = fullArc ? [[startAngle, endAngle] as [number, number]] : resolvePieFrontSegments(startAngle, endAngle);\n return segments.map(([segmentStart, segmentEnd]) => {\n const topStart = pieEllipsePoint(centerX, centerY, radius, tilt, segmentStart, 0);\n const topEnd = pieEllipsePoint(centerX, centerY, radius, tilt, segmentEnd, 0);\n const bottomStart = pieEllipsePoint(centerX, centerY, radius, tilt, segmentStart, depth);\n const bottomEnd = pieEllipsePoint(centerX, centerY, radius, tilt, segmentEnd, depth);\n const largeArc = segmentEnd - segmentStart > Math.PI ? 1 : 0;\n return [\n `M ${toSvgNumber(topStart.x)} ${toSvgNumber(topStart.y)}`,\n `A ${toSvgNumber(radius)} ${toSvgNumber(ry)} 0 ${largeArc} 1 ${toSvgNumber(topEnd.x)} ${toSvgNumber(topEnd.y)}`,\n `L ${toSvgNumber(bottomEnd.x)} ${toSvgNumber(bottomEnd.y)}`,\n `A ${toSvgNumber(radius)} ${toSvgNumber(ry)} 0 ${largeArc} 0 ${toSvgNumber(bottomStart.x)} ${toSvgNumber(bottomStart.y)}`,\n \"Z\"\n ].join(\" \");\n });\n}\n\nfunction isPieFrontFacingAngle(angle: number) {\n const normalized = ((angle % TWO_PI) + TWO_PI) % TWO_PI;\n return normalized > Math.PI / 2 && normalized < Math.PI * 1.5;\n}\n\nfunction buildPieRadialWallPath(\n centerX: number,\n centerY: number,\n radius: number,\n tilt: number,\n depth: number,\n angle: number,\n forceVisible = false\n) {\n if (!forceVisible && !isPieFrontFacingAngle(angle)) {\n return null;\n }\n const topCenter = { x: centerX, y: centerY };\n const bottomCenter = { x: centerX, y: centerY + depth };\n const topEdge = pieEllipsePoint(centerX, centerY, radius, tilt, angle, 0);\n const bottomEdge = pieEllipsePoint(centerX, centerY, radius, tilt, angle, depth);\n return [\n `M ${toSvgNumber(topCenter.x)} ${toSvgNumber(topCenter.y)}`,\n `L ${toSvgNumber(topEdge.x)} ${toSvgNumber(topEdge.y)}`,\n `L ${toSvgNumber(bottomEdge.x)} ${toSvgNumber(bottomEdge.y)}`,\n `L ${toSvgNumber(bottomCenter.x)} ${toSvgNumber(bottomCenter.y)}`,\n \"Z\"\n ].join(\" \");\n}\n\nfunction renderTitle(chart: XlsxChart, layout: ChartLayout, palette: ChartRendererPalette) {\n if (!chart.title) {\n return null;\n }\n const fontSize = 12;\n const text = truncateSvgText(chart.title, Math.max(40, layout.width - 12), fontSize);\n const baselineY = layout.titleHeight >= 30 ? 19 : 16;\n return (\n <text\n fill={chart.titleColor ?? chart.textColor ?? DEFAULT_CHART_TEXT_COLOR}\n fontFamily={buildChartFontFamily(chart.titleFontFamily ?? chart.fontFamily)}\n fontSize={fontSize}\n fontWeight={600}\n textAnchor=\"middle\"\n x={layout.width / 2}\n y={baselineY}\n >\n {text}\n </text>\n );\n}\n\nfunction renderLegend(chart: XlsxChart, layout: ChartLayout, palette: ChartRendererPalette) {\n if (!chart.legend || layout.legendItems.length === 0) {\n return null;\n }\n const textColor = resolveChartAxisTextColor(chart);\n const legendPos = layout.legendPosition;\n const items = layout.legendItems;\n const swatchSize = 8;\n const textOffset = swatchSize + 4;\n\n if (chart.chartType === \"RegionMap\") {\n const seriesIndex = Math.max(0, chart.series.findIndex((series) => series.hidden !== true));\n const series = chart.series[seriesIndex];\n if (!resolveRegionMapColorStrings(series)) {\n const vertical = legendPos === \"left\" || legendPos === \"right\";\n const x = vertical ? (legendPos === \"right\" ? layout.plot.left + layout.plot.width + 8 : 8) : layout.plot.left;\n const showSeriesName = vertical || (layout.legendBounds?.height ?? 48) >= 44;\n const y = vertical ? layout.plot.top + 26 : (layout.legendBounds?.top ?? layout.height - 48) + (showSeriesName ? 20 : 4);\n const length = vertical ? Math.min(100, Math.max(24, layout.plot.height - 42)) : Math.min(160, layout.plot.width);\n const gradientId = `map-legend-${chart.id}`;\n const stops = resolveRegionMapValueColors(series);\n const count = stops?.length ?? 3;\n return (\n <g>\n <defs>\n <linearGradient id={gradientId} x1=\"0%\" x2={vertical ? \"0%\" : \"100%\"} y1={vertical ? \"100%\" : \"0%\"} y2=\"0%\">\n {Array.from({ length: count }, (_, index) => (\n <stop key={index} offset={`${index / (count - 1) * 100}%`} stopColor={resolveRegionMapValueColor(chart, seriesIndex, index / (count - 1))} />\n ))}\n </linearGradient>\n </defs>\n {showSeriesName && <text fill={textColor} fontSize={10} x={x} y={y - 12}>{series?.name ?? \"\"}</text>}\n <rect fill={`url(#${gradientId})`} x={x} y={y} width={vertical ? 8 : length} height={vertical ? length : 8} />\n <text fill={textColor} fontSize={10} x={vertical ? x + 12 : x} y={vertical ? y + length : y + 20}>{items[0]?.label}</text>\n <text fill={textColor} fontSize={10} textAnchor={vertical ? \"start\" : \"end\"} x={vertical ? x + 12 : x + length} y={vertical ? y + 7 : y + 20}>{items[1]?.label}</text>\n </g>\n );\n }\n }\n\n if (legendPos === \"left\" || legendPos === \"right\") {\n const x = legendPos === \"right\"\n ? layout.plot.left + layout.plot.width + 8\n : 8;\n const startY = chart.chartType === \"Surface\"\n ? layout.plot.top + Math.max(6, (layout.plot.height - items.length * 18) / 2 + 9)\n : layout.plot.top + 6;\n return (\n <g>\n {items.map((item, index) => {\n const y = startY + index * 18;\n return (\n <g\n {...(index < chart.series.length ? chartElementDataProps(index) : {})}\n data-xlsx-chart-element-kind={index < chart.series.length ? \"legendEntry\" : undefined}\n key={`legend-${index}`}\n transform={`translate(${x}, ${y})`}\n >\n <rect fill={chart.chartType === \"Surface\" && chart.wireframe ? \"none\" : item.color} stroke={chart.chartType === \"Surface\" && chart.wireframe ? item.color : undefined} height={swatchSize} width={swatchSize} x={0} y={-7} />\n <text fill={textColor} fontSize={10} x={textOffset} y={0}>\n {item.label}\n </text>\n </g>\n );\n })}\n </g>\n );\n }\n\n const rowY = legendPos === \"top\" ? (layout.titleHeight + 12) : (layout.height - 8);\n const totalWidth = items.reduce((sum, item) => sum + 24 + Math.min(96, item.label.length * 5.4), 0);\n let cursorX = Math.max(8, (layout.width - totalWidth) / 2);\n return (\n <g>\n {items.map((item, index) => {\n const labelWidth = Math.min(96, item.label.length * 5.4);\n const node = (\n <g\n {...(index < chart.series.length ? chartElementDataProps(index) : {})}\n data-xlsx-chart-element-kind={index < chart.series.length ? \"legendEntry\" : undefined}\n key={`legend-${index}`}\n transform={`translate(${cursorX}, ${rowY})`}\n >\n <rect fill={chart.chartType === \"Surface\" && chart.wireframe ? \"none\" : item.color} stroke={chart.chartType === \"Surface\" && chart.wireframe ? item.color : undefined} height={swatchSize} width={swatchSize} x={0} y={-7} />\n <text fill={textColor} fontSize={10} x={textOffset} y={0}>\n {item.label}\n </text>\n </g>\n );\n cursorX += 24 + labelWidth;\n return node;\n })}\n </g>\n );\n}\n\nfunction renderCartesianAxes(\n chart: XlsxChart,\n palette: ChartRendererPalette,\n plot: PlotRect,\n isHorizontal: boolean,\n categoryLabels: string[],\n categoryPositions: number[],\n valueTicks: number[],\n mapValue: (value: number) => number,\n formatValueTick: (value: number) => string = formatTickValue\n) {\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n const zeroPosition = mapValue(0);\n const showValueAxis = chart.valueAxis?.delete !== true;\n const showCategoryAxis = chart.categoryAxis?.delete !== true;\n const showValueLabels = showValueAxis && chart.valueAxis?.labelPosition !== \"none\";\n const showCategoryLabels = showCategoryAxis && chart.categoryAxis?.labelPosition !== \"none\";\n\n return (\n <g>\n {showValueAxis ? valueTicks.map((tick) => {\n const valuePosition = mapValue(tick);\n if (isHorizontal) {\n return (\n <g key={`grid-v-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.7)}\n strokeWidth={1}\n x1={valuePosition}\n x2={valuePosition}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n {showValueLabels ? <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={valuePosition}\n y={plot.top + plot.height + 14}\n >\n {formatValueTick(tick)}\n </text> : null}\n </g>\n );\n }\n return (\n <g key={`grid-h-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.7)}\n strokeWidth={1}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={valuePosition}\n y2={valuePosition}\n />\n {showValueLabels ? <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"end\"\n x={plot.left - 6}\n y={valuePosition + 3}\n >\n {formatValueTick(tick)}\n </text> : null}\n </g>\n );\n }) : null}\n {showCategoryLabels ? categoryPositions.map((position, index) => {\n const label = categoryLabels[index] ?? \"\";\n if (isHorizontal) {\n return (\n <text\n key={`cat-y-${index}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"end\"\n x={plot.left - 6}\n y={position + 3}\n >\n {label}\n </text>\n );\n }\n return (\n <text\n key={`cat-x-${index}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={position}\n y={plot.top + plot.height + 14}\n >\n {label}\n </text>\n );\n }) : null}\n {isHorizontal ? (\n <>\n {showValueAxis ? <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={plot.top + plot.height}\n y2={plot.top + plot.height}\n /> : null}\n {showCategoryAxis ? <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={zeroPosition}\n x2={zeroPosition}\n y1={plot.top}\n y2={plot.top + plot.height}\n /> : null}\n </>\n ) : (\n <>\n {showValueAxis ? <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={plot.left}\n x2={plot.left}\n y1={plot.top}\n y2={plot.top + plot.height}\n /> : null}\n {showCategoryAxis ? <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={zeroPosition}\n y2={zeroPosition}\n /> : null}\n </>\n )}\n </g>\n );\n}\n\nfunction scaleProjectedVector(vector: { x: number; y: number }, scale: number) {\n return {\n x: vector.x * scale,\n y: vector.y * scale\n };\n}\n\nfunction sampleProjectedEllipseArc(\n center: { x: number; y: number },\n axisA: { x: number; y: number },\n axisB: { x: number; y: number },\n startAngle: number,\n endAngle: number\n) {\n const steps = Math.max(12, Math.ceil(Math.abs(endAngle - startAngle) / (Math.PI / 14)));\n const points: Array<{ x: number; y: number }> = [];\n for (let step = 0; step <= steps; step += 1) {\n const ratio = step / steps;\n const angle = startAngle + ((endAngle - startAngle) * ratio);\n points.push({\n x: center.x + (axisA.x * Math.cos(angle)) + (axisB.x * Math.sin(angle)),\n y: center.y + (axisA.y * Math.cos(angle)) + (axisB.y * Math.sin(angle))\n });\n }\n return points;\n}\n\nfunction buildRibbonSvgPath(startArc: Array<{ x: number; y: number }>, endArc: Array<{ x: number; y: number }>) {\n if (startArc.length === 0 || endArc.length === 0) {\n return \"\";\n }\n return buildLinearSvgPath([...startArc, ...endArc.slice().reverse()], true);\n}\n\nfunction renderRadialFrustum(\n bar: BarRect,\n normalizedShape: \"cone\" | \"cylinder\",\n frontFill: string,\n sideFill: string,\n topFill: string\n) {\n const depthX = bar.depthX ?? (bar.isHorizontal ? 10 : 9);\n const depthY = bar.depthY ?? -7;\n const frontX = bar.left + (bar.depthOffsetX ?? 0);\n const frontY = bar.top + (bar.depthOffsetY ?? 0);\n const frontW = bar.width;\n const frontH = bar.height;\n const centerX = frontX + frontW / 2;\n const centerY = frontY + frontH / 2;\n const showStartCap = bar.capStart !== false;\n const showEndCap = bar.capEnd !== false;\n const startScale = normalizedShape === \"cone\" ? clamp(bar.bottomScale ?? 1, 0, 1) : 1;\n const endScale = normalizedShape === \"cone\" ? clamp(bar.topScale ?? 1, 0, 1) : 1;\n const radialDepthScale = normalizedShape === \"cylinder\"\n ? (bar.isHorizontal ? 0.52 : 0.48)\n : (bar.isHorizontal ? 0.7 : 0.58);\n const depthAxis = scaleProjectedVector({ x: depthX / 2, y: depthY / 2 }, radialDepthScale);\n const secondaryStrokeWidth = Math.max(0.6, bar.strokeWidth * 0.65);\n\n if (bar.isHorizontal) {\n const startCenter = { x: frontX + depthAxis.x, y: centerY + depthAxis.y };\n const endCenter = { x: frontX + frontW + depthAxis.x, y: centerY + depthAxis.y };\n const startAxisA = { x: 0, y: (frontH * startScale) / 2 };\n const endAxisA = { x: 0, y: (frontH * endScale) / 2 };\n const startAxisB = scaleProjectedVector(depthAxis, startScale);\n const endAxisB = scaleProjectedVector(depthAxis, endScale);\n const backStartArc = sampleProjectedEllipseArc(startCenter, startAxisA, startAxisB, 0, Math.PI);\n const backEndArc = sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, 0, Math.PI);\n const frontStartArc = sampleProjectedEllipseArc(startCenter, startAxisA, startAxisB, Math.PI, Math.PI * 2);\n const frontEndArc = sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, Math.PI, Math.PI * 2);\n const backWallPath = buildRibbonSvgPath(backEndArc, backStartArc);\n const frontWallPath = buildRibbonSvgPath(frontEndArc, frontStartArc);\n const endCapPath = endScale > 0.018\n ? buildLinearSvgPath(sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, 0, Math.PI * 2), true)\n : \"\";\n const startCapPath = startScale > 0.028\n ? buildLinearSvgPath(sampleProjectedEllipseArc(startCenter, startAxisA, startAxisB, 0, Math.PI * 2), true)\n : \"\";\n return (\n <g key={`${bar.key}-3d-horizontal-${normalizedShape}`}>\n {backWallPath ? <path d={backWallPath} fill={sideFill} stroke={bar.stroke} strokeWidth={secondaryStrokeWidth} /> : null}\n {showEndCap && endCapPath ? <path d={endCapPath} fill={topFill} stroke={bar.stroke} strokeWidth={secondaryStrokeWidth} /> : null}\n {frontWallPath ? <path d={frontWallPath} fill={frontFill} stroke={bar.stroke} strokeWidth={bar.strokeWidth} /> : null}\n {showStartCap && startCapPath ? <path d={startCapPath} fill={frontFill} stroke={bar.stroke} strokeWidth={secondaryStrokeWidth} /> : null}\n </g>\n );\n }\n\n const startCenter = { x: centerX + depthAxis.x, y: frontY + frontH + depthAxis.y };\n const endCenter = { x: centerX + depthAxis.x, y: frontY + depthAxis.y };\n const startAxisA = { x: (frontW * startScale) / 2, y: 0 };\n const endAxisA = { x: (frontW * endScale) / 2, y: 0 };\n const startAxisB = scaleProjectedVector(depthAxis, startScale);\n const endAxisB = scaleProjectedVector(depthAxis, endScale);\n const backStartArc = sampleProjectedEllipseArc(startCenter, startAxisA, startAxisB, 0, Math.PI);\n const backEndArc = sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, 0, Math.PI);\n const frontStartArc = sampleProjectedEllipseArc(startCenter, startAxisA, startAxisB, Math.PI, Math.PI * 2);\n const frontEndArc = sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, Math.PI, Math.PI * 2);\n const backWallPath = buildRibbonSvgPath(backEndArc, backStartArc);\n const frontWallPath = buildRibbonSvgPath(frontEndArc, frontStartArc);\n const endCapPath = endScale > 0.018\n ? buildLinearSvgPath(sampleProjectedEllipseArc(endCenter, endAxisA, endAxisB, 0, Math.PI * 2), true)\n : \"\";\n return (\n <g key={`${bar.key}-3d-${normalizedShape}`}>\n {backWallPath ? <path d={backWallPath} fill={sideFill} stroke={bar.stroke} strokeWidth={secondaryStrokeWidth} /> : null}\n {showEndCap && endCapPath ? <path d={endCapPath} fill={topFill} stroke={bar.stroke} strokeWidth={secondaryStrokeWidth} /> : null}\n {frontWallPath ? <path d={frontWallPath} fill={frontFill} stroke={bar.stroke} strokeWidth={bar.strokeWidth} /> : null}\n </g>\n );\n}\n\nfunction renderExtrudedRect(bar: BarRect) {\n const normalizedShape = (() => {\n switch (bar.shape3d) {\n case \"cone\":\n case \"coneToMax\":\n return \"cone\";\n case \"cylinder\":\n return \"cylinder\";\n case \"pyramid\":\n case \"pyramidToMax\":\n return \"pyramid\";\n default:\n return \"box\";\n }\n })();\n const depthX = bar.depthX ?? (bar.isHorizontal ? 10 : 9);\n const depthY = bar.depthY ?? -7;\n const frontX = bar.left + (bar.depthOffsetX ?? 0);\n const frontY = bar.top + (bar.depthOffsetY ?? 0);\n const frontW = bar.width;\n const frontH = bar.height;\n const frontX2 = frontX + frontW;\n const frontY2 = frontY + frontH;\n\n const sideAnchorX = frontX2;\n const sideDepthX = depthX;\n const centerX = frontX + frontW / 2;\n const bottomScale = clamp(bar.bottomScale ?? 1, 0.04, 1);\n const topScale = clamp(bar.topScale ?? 1, 0.04, 1);\n const bottomHalfWidth = (frontW * bottomScale) / 2;\n const topHalfWidth = (frontW * topScale) / 2;\n const bottomLeft = centerX - bottomHalfWidth;\n const bottomRight = centerX + bottomHalfWidth;\n const topLeft = centerX - topHalfWidth;\n const topRight = centerX + topHalfWidth;\n const showStartCap = bar.capStart !== false;\n const showEndCap = bar.capEnd !== false;\n\n const topFace = `${frontX},${frontY} ${frontX2},${frontY} ${frontX2 + sideDepthX},${frontY + depthY} ${frontX + sideDepthX},${frontY + depthY}`;\n const sideFace = `${sideAnchorX},${frontY} ${sideAnchorX},${frontY2} ${sideAnchorX + sideDepthX},${frontY2 + depthY} ${sideAnchorX + sideDepthX},${frontY + depthY}`;\n const frontFill = bar.gradientId ? `url(#${bar.gradientId})` : bar.color;\n const sideFill = bar.invertedNegative ? bar.color : darkenColor(bar.color, 0.22);\n const topFill = bar.invertedNegative ? lightenColor(bar.color, 0.04) : lightenColor(bar.color, 0.24);\n\n if (normalizedShape === \"cylinder\" || normalizedShape === \"cone\") {\n return renderRadialFrustum(bar, normalizedShape, frontFill, sideFill, topFill);\n }\n\n if (normalizedShape === \"box\") {\n return (\n <g key={`${bar.key}-3d`}>\n <polygon fill={sideFill} points={sideFace} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n <polygon fill={topFill} points={topFace} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n <rect fill={frontFill} height={frontH} stroke={bar.stroke} strokeWidth={bar.strokeWidth} width={frontW} x={frontX} y={frontY} />\n </g>\n );\n }\n\n if (bar.isHorizontal) {\n const centerY = frontY + frontH / 2;\n const startHalfHeight = (frontH * clamp(bar.bottomScale ?? 1, 0.04, 1)) / 2;\n const endHalfHeight = (frontH * clamp(bar.topScale ?? 1, 0.04, 1)) / 2;\n const startTop = centerY - startHalfHeight;\n const startBottom = centerY + startHalfHeight;\n const endTop = centerY - endHalfHeight;\n const endBottom = centerY + endHalfHeight;\n const topFacePoints = `${frontX},${startTop} ${frontX2},${endTop} ${frontX2 + sideDepthX},${endTop + depthY} ${frontX + sideDepthX},${startTop + depthY}`;\n const farSidePoints = `${frontX2},${endTop} ${frontX2},${endBottom} ${frontX2 + sideDepthX},${endBottom + depthY} ${frontX2 + sideDepthX},${endTop + depthY}`;\n\n const taperedFarFace = `${frontX2},${endTop} ${frontX2 + sideDepthX},${endTop + depthY} ${frontX2 + sideDepthX},${endBottom + depthY} ${frontX2},${endBottom}`;\n const frontPolygon = `${frontX},${startTop} ${frontX2},${endTop} ${frontX2},${endBottom} ${frontX},${startBottom}`;\n\n return (\n <g key={`${bar.key}-3d-horizontal-${normalizedShape}`}>\n <polygon fill={sideFill} points={taperedFarFace} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n <polygon fill={topFill} points={topFacePoints} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n <polygon fill={frontFill} points={frontPolygon} stroke={bar.stroke} strokeWidth={bar.strokeWidth} />\n </g>\n );\n }\n\n const taperedTopFace = `${topLeft},${frontY} ${topRight},${frontY} ${topRight + sideDepthX},${frontY + depthY} ${topLeft + sideDepthX},${frontY + depthY}`;\n const taperedSideFace = `${topRight},${frontY} ${bottomRight},${frontY2} ${bottomRight + sideDepthX},${frontY2 + depthY} ${topRight + sideDepthX},${frontY + depthY}`;\n const pyramidFrontFace = `${topLeft},${frontY} ${topRight},${frontY} ${bottomRight},${frontY2} ${bottomLeft},${frontY2}`;\n\n return (\n <g key={`${bar.key}-3d-${normalizedShape}`}>\n <polygon fill={sideFill} points={taperedSideFace} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n {showEndCap ? (\n <polygon fill={topFill} points={taperedTopFace} stroke={bar.stroke} strokeWidth={Math.max(0.6, bar.strokeWidth * 0.65)} />\n ) : null}\n <polygon fill={frontFill} points={pyramidFrontFace} stroke={bar.stroke} strokeWidth={bar.strokeWidth} />\n </g>\n );\n}\n\nfunction buildLinearSvgPath(points: Array<{ x: number; y: number }>, close = false) {\n if (points.length === 0) {\n return \"\";\n }\n const commands = points.map((point, index) => (\n `${index === 0 ? \"M\" : \"L\"} ${toSvgNumber(point.x)} ${toSvgNumber(point.y)}`\n ));\n if (close) {\n commands.push(\"Z\");\n }\n return commands.join(\" \");\n}\n\nfunction projectCartesian3dPoint(\n x: number,\n y: number,\n z: number,\n rotXRad: number,\n rotYRad: number,\n usePerspective: boolean,\n perspectiveStrength: number\n) {\n const cosX = Math.cos(rotXRad);\n const sinX = Math.sin(rotXRad);\n const cosY = Math.cos(rotYRad);\n const sinY = Math.sin(rotYRad);\n\n const x1 = x * cosY + z * sinY;\n const z1 = -x * sinY + z * cosY;\n const y1 = y * cosX - z1 * sinX;\n const z2 = y * sinX + z1 * cosX;\n const perspective = usePerspective\n ? 1 / Math.max(0.22, 1 + z2 * (0.26 + perspectiveStrength * 0.54))\n : 1;\n\n return {\n depth: z2,\n x: x1 * perspective,\n y: y1 * perspective\n };\n}\n\nfunction renderLineOrAreaChart3d(\n chart: XlsxChart,\n palette: ChartRendererPalette,\n layout: ChartLayout,\n categories: string[],\n stackedPointsBySeries: Array<Array<{ defined: boolean; y: number | null; y0: number | null; y1: number | null }>>,\n minValue: number,\n maxValue: number,\n isAreaChart: boolean,\n isStackedSeries: boolean,\n selectedChartElement?: XlsxChartElementSelection | null\n) {\n const plot = layout.plot;\n const valueDomain = resolveAxisDomainWithChartOverrides(\n chart.valueAxis,\n minValue,\n maxValue,\n isAreaChart || chart.valueAxis?.crosses === \"autoZero\"\n );\n minValue = valueDomain.min;\n maxValue = valueDomain.max;\n const valueSpan = Math.max(1e-6, maxValue - minValue);\n const seriesCount = Math.max(1, chart.series.length);\n const categoryCount = Math.max(1, categories.length);\n const depthScale = clamp((chart.view3d?.depthPercent ?? 100) / 100, 0.5, 4);\n const halfDepth = (seriesCount <= 1 ? 0.82 : 1.02) * depthScale;\n const frontZ = halfDepth;\n const backZ = -halfDepth;\n const baseValue = isAreaChart ? Math.max(minValue, Math.min(maxValue, 0)) : minValue;\n const rotXRad = clamp(chart.view3d?.rotX ?? 18, -80, 80) * (Math.PI / 180);\n const rotYRad = clamp(chart.view3d?.rotY ?? 24, -80, 80) * (Math.PI / 180);\n const usePerspective = chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp((chart.view3d?.perspective ?? (usePerspective ? 26 : 0)) / 100, 0, 1);\n\n const normalizeX = (categoryIndex: number) => (\n categoryCount <= 1 ? 0 : ((categoryIndex / (categoryCount - 1)) - 0.5) * 2\n );\n const normalizeY = (value: number) => (\n -((((value - minValue) / valueSpan) - 0.5) * 2)\n );\n const stackedAreaDepthSpan = isAreaChart && isStackedSeries\n ? Math.max(0.18, (frontZ - backZ) * 0.56)\n : 0;\n const stackedAreaBackZ = frontZ - stackedAreaDepthSpan;\n const normalizeZ = (seriesIndex: number) => (\n seriesCount <= 1 || (isAreaChart && isStackedSeries)\n ? frontZ * 0.94\n : (((seriesIndex / (seriesCount - 1)) - 0.5) * (frontZ - backZ))\n );\n const projectSeriesPoint = (x: number, value: number, z: number) => projectCartesian3dPoint(\n x,\n normalizeY(value),\n z,\n rotXRad,\n rotYRad,\n usePerspective,\n perspectiveStrength\n );\n\n const cubeCorners = [\n { x: -1, y: -1, z: backZ },\n { x: 1, y: -1, z: backZ },\n { x: 1, y: 1, z: backZ },\n { x: -1, y: 1, z: backZ },\n { x: -1, y: -1, z: frontZ },\n { x: 1, y: -1, z: frontZ },\n { x: 1, y: 1, z: frontZ },\n { x: -1, y: 1, z: frontZ }\n ].map((corner) => projectCartesian3dPoint(\n corner.x,\n corner.y,\n corner.z,\n rotXRad,\n rotYRad,\n usePerspective,\n perspectiveStrength\n ));\n\n const projectedSeries = stackedPointsBySeries.map((seriesPoints, seriesIndex) => {\n const z = normalizeZ(seriesIndex);\n return seriesPoints.map((point, categoryIndex) => {\n const x = normalizeX(categoryIndex);\n const topValue = isStackedSeries ? (point.y1 ?? point.y ?? baseValue) : (point.y ?? baseValue);\n const bottomValue = isAreaChart\n ? (isStackedSeries ? (point.y0 ?? baseValue) : baseValue)\n : baseValue;\n const top = projectSeriesPoint(x, topValue, z);\n const bottom = projectSeriesPoint(x, bottomValue, z);\n const topBack = isAreaChart && isStackedSeries\n ? projectSeriesPoint(x, topValue, stackedAreaBackZ)\n : null;\n const bottomBack = isAreaChart && isStackedSeries\n ? projectSeriesPoint(x, bottomValue, stackedAreaBackZ)\n : null;\n return {\n bottom,\n bottomBack,\n categoryIndex,\n defined: point.defined,\n depth: top.depth,\n depthBack: topBack?.depth ?? top.depth,\n top,\n topBack\n };\n });\n });\n\n const bounds = [\n ...cubeCorners,\n ...projectedSeries.flatMap((series) => series.flatMap((point) => point.defined\n ? [point.top, point.bottom, ...(point.topBack ? [point.topBack] : []), ...(point.bottomBack ? [point.bottomBack] : [])]\n : []))\n ];\n const minX = Math.min(...bounds.map((point) => point.x));\n const maxX = Math.max(...bounds.map((point) => point.x));\n const minY = Math.min(...bounds.map((point) => point.y));\n const maxY = Math.max(...bounds.map((point) => point.y));\n const scale = Math.min(\n plot.width / Math.max(0.4, maxX - minX),\n plot.height / Math.max(0.4, maxY - minY)\n ) * 0.82;\n const centerRawX = (minX + maxX) / 2;\n const centerRawY = (minY + maxY) / 2;\n const centerX = plot.left + plot.width / 2;\n const centerY = plot.top + plot.height / 2;\n const toScreenPoint = (point: { depth: number; x: number; y: number }) => ({\n depth: point.depth,\n x: centerX + (point.x - centerRawX) * scale,\n y: centerY + (point.y - centerRawY) * scale\n });\n\n const screenCorners = cubeCorners.map(toScreenPoint);\n const seriesGeometry = projectedSeries.map((series, seriesIndex) => ({\n averageDepth: series.reduce((sum, point) => sum + ((point.depth + point.depthBack) / 2), 0) / Math.max(1, series.length),\n points: series.map((point) => ({\n bottom: toScreenPoint(point.bottom),\n bottomBack: point.bottomBack ? toScreenPoint(point.bottomBack) : null,\n categoryIndex: point.categoryIndex,\n defined: point.defined,\n top: toScreenPoint(point.top),\n topBack: point.topBack ? toScreenPoint(point.topBack) : null\n })),\n seriesIndex\n })).sort((left, right) => left.averageDepth - right.averageDepth);\n\n const edgeColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const gridColor = lightenColor(edgeColor, 0.56);\n const labelColor = resolveChartAxisTextColor(chart);\n const boxEdges: Array<[number, number, boolean]> = [\n [0, 1, false], [1, 2, false], [2, 3, false], [3, 0, false],\n [4, 5, true], [5, 6, true], [6, 7, true], [7, 4, true],\n [0, 4, false], [1, 5, true], [2, 6, true], [3, 7, false]\n ];\n const yTicks = valueDomain.ticks;\n const xLabelPoints = categories.map((category, categoryIndex) => ({\n label: category,\n point: toScreenPoint(projectCartesian3dPoint(\n normalizeX(categoryIndex),\n -1.06,\n frontZ,\n rotXRad,\n rotYRad,\n usePerspective,\n perspectiveStrength\n ))\n }));\n const yLabelPoints = yTicks.map((tick) => ({\n point: toScreenPoint(projectCartesian3dPoint(\n -1.04,\n normalizeY(tick),\n frontZ,\n rotXRad,\n rotYRad,\n usePerspective,\n perspectiveStrength\n )),\n tick\n }));\n\n return (\n <g>\n {yTicks.map((tick) => {\n const yNorm = normalizeY(tick);\n const leftBack = toScreenPoint(projectCartesian3dPoint(-1, yNorm, backZ, rotXRad, rotYRad, usePerspective, perspectiveStrength));\n const rightBack = toScreenPoint(projectCartesian3dPoint(1, yNorm, backZ, rotXRad, rotYRad, usePerspective, perspectiveStrength));\n const leftFront = toScreenPoint(projectCartesian3dPoint(-1, yNorm, frontZ, rotXRad, rotYRad, usePerspective, perspectiveStrength));\n return (\n <g key={`line3d-grid-${tick}`}>\n <line stroke={gridColor} strokeWidth={1} x1={leftBack.x} x2={rightBack.x} y1={leftBack.y} y2={rightBack.y} />\n <line stroke={gridColor} strokeWidth={0.9} x1={leftBack.x} x2={leftFront.x} y1={leftBack.y} y2={leftFront.y} />\n </g>\n );\n })}\n {boxEdges.map(([startIndex, endIndex, emphasized], index) => {\n const start = screenCorners[startIndex];\n const end = screenCorners[endIndex];\n return (\n <line\n key={`line3d-box-${index}`}\n stroke={emphasized ? edgeColor : lightenColor(edgeColor, 0.34)}\n strokeWidth={emphasized ? 1.35 : 1}\n x1={start.x}\n x2={end.x}\n y1={start.y}\n y2={end.y}\n />\n );\n })}\n {seriesGeometry.map(({ points, seriesIndex }) => {\n const definedPoints = points.filter((point) => point.defined);\n if (definedPoints.length === 0) {\n return null;\n }\n const linePoints = definedPoints.map((point) => point.top);\n const areaPoints = isAreaChart\n ? [\n ...definedPoints.map((point) => point.top),\n ...definedPoints.slice().reverse().map((point) => point.bottom)\n ]\n : [];\n const areaBackPoints = isAreaChart && isStackedSeries\n ? [\n ...definedPoints.map((point) => point.topBack ?? point.top),\n ...definedPoints.slice().reverse().map((point) => point.bottomBack ?? point.bottom)\n ]\n : [];\n const strokeColor = chartSeriesStrokeColor(chart, seriesIndex);\n const fillColor = chartSeriesColor(chart, seriesIndex);\n const markerSymbol = normalizeChartMarkerSymbol(chart.series[seriesIndex]?.markerSymbol);\n const markerPath = markerSymbolPath(markerSymbol, markerRadiusPx(chart.series[seriesIndex]?.markerSize));\n const slabFaces = isAreaChart && isStackedSeries\n ? definedPoints.slice(1).map((point, pointIndex) => {\n const previous = definedPoints[pointIndex];\n if (!previous?.topBack || !point.topBack || !previous.bottomBack || !point.bottomBack) {\n return null;\n }\n const topFace = buildLinearSvgPath([previous.top, point.top, point.topBack, previous.topBack], true);\n const bottomFace = buildLinearSvgPath([previous.bottom, point.bottom, point.bottomBack, previous.bottomBack], true);\n return (\n <React.Fragment key={`line3d-area-face-${seriesIndex}-${pointIndex}`}>\n <path\n {...chartElementDataProps(seriesIndex)}\n d={topFace}\n fill={lightenColor(fillColor, 0.08)}\n fillOpacity={0.8}\n stroke={darkenColor(fillColor, 0.16)}\n strokeWidth={0.8}\n />\n <path\n {...chartElementDataProps(seriesIndex)}\n d={bottomFace}\n fill={darkenColor(fillColor, 0.2)}\n fillOpacity={0.34}\n stroke={darkenColor(fillColor, 0.24)}\n strokeWidth={0.6}\n />\n </React.Fragment>\n );\n })\n : [];\n const firstDefinedPoint = definedPoints[0] ?? null;\n const lastDefinedPoint = definedPoints[definedPoints.length - 1] ?? null;\n const startCap = isAreaChart && isStackedSeries && firstDefinedPoint?.topBack && firstDefinedPoint?.bottomBack\n ? buildLinearSvgPath([\n firstDefinedPoint.top,\n firstDefinedPoint.bottom,\n firstDefinedPoint.bottomBack,\n firstDefinedPoint.topBack\n ], true)\n : \"\";\n const endCap = isAreaChart && isStackedSeries && lastDefinedPoint?.topBack && lastDefinedPoint?.bottomBack\n ? buildLinearSvgPath([\n lastDefinedPoint.top,\n lastDefinedPoint.bottom,\n lastDefinedPoint.bottomBack,\n lastDefinedPoint.topBack\n ], true)\n : \"\";\n\n return (\n <g key={`line3d-series-${seriesIndex}`}>\n {isAreaChart && isStackedSeries && areaBackPoints.length >= 3 ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={buildLinearSvgPath(areaBackPoints, true)}\n fill={darkenColor(fillColor, 0.18)}\n fillOpacity={0.44}\n stroke={darkenColor(fillColor, 0.26)}\n strokeWidth={0.8}\n />\n ) : null}\n {slabFaces}\n {startCap ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={startCap}\n fill={darkenColor(fillColor, 0.24)}\n fillOpacity={0.54}\n stroke={darkenColor(fillColor, 0.3)}\n strokeWidth={0.7}\n />\n ) : null}\n {endCap ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={endCap}\n fill={darkenColor(fillColor, 0.14)}\n fillOpacity={0.6}\n stroke={darkenColor(fillColor, 0.24)}\n strokeWidth={0.7}\n />\n ) : null}\n {isAreaChart && areaPoints.length >= 3 ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={buildLinearSvgPath(areaPoints, true)}\n fill={fillColor}\n fillOpacity={0.74}\n stroke={darkenColor(fillColor, 0.12)}\n strokeWidth={0.9}\n />\n ) : null}\n {!isAreaChart\n ? definedPoints.map((point, pointIndex) => (\n <line\n key={`line3d-drop-${seriesIndex}-${pointIndex}`}\n stroke={lightenColor(strokeColor, 0.44)}\n strokeDasharray=\"2 2\"\n strokeWidth={0.9}\n x1={point.top.x}\n x2={point.bottom.x}\n y1={point.top.y}\n y2={point.bottom.y}\n />\n ))\n : null}\n <path\n {...chartElementDataProps(seriesIndex)}\n d={buildLinearSvgPath(linePoints)}\n fill=\"none\"\n stroke={strokeColor}\n strokeLinejoin=\"round\"\n strokeWidth={Math.max(1.8, chart.series[seriesIndex]?.lineWidthPx ?? 2)}\n />\n {markerPath.length > 0\n ? definedPoints.map((point, pointIndex) => (\n <g\n key={`line3d-marker-${seriesIndex}-${pointIndex}`}\n transform={`translate(${toSvgNumber(point.top.x)}, ${toSvgNumber(point.top.y)})`}\n >\n <path\n {...chartElementDataProps(seriesIndex, point.categoryIndex)}\n d={markerPath}\n fill={chart.series[seriesIndex]?.markerColor ?? fillColor}\n stroke={chart.series[seriesIndex]?.markerLineColor ?? chart.chartAreaFillColor ?? palette.surface}\n strokeWidth={1}\n />\n </g>\n ))\n : null}\n {definedPoints.map((point) => (\n <circle\n {...chartElementDataProps(seriesIndex, point.categoryIndex)}\n cx={point.top.x}\n cy={point.top.y}\n fill=\"transparent\"\n key={`line3d-hit-${seriesIndex}-${point.categoryIndex}`}\n r={7}\n stroke=\"none\"\n />\n ))}\n {definedPoints.map((point) => (\n isSelectedChartPointOrSeries(selectedChartElement, chart.id, seriesIndex, point.categoryIndex)\n ? renderSelectionPointHandles(\n `line3d-selection-${seriesIndex}-${point.categoryIndex}`,\n [{ x: point.top.x, y: point.top.y }]\n )\n : null\n ))}\n </g>\n );\n })}\n {yLabelPoints.map(({ point, tick }) => (\n <text\n key={`line3d-y-label-${tick}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"end\"\n x={point.x - 6}\n y={point.y + 3}\n >\n {formatTickValue(tick)}\n </text>\n ))}\n {xLabelPoints.map(({ label, point }, index) => (\n <text\n key={`line3d-x-label-${index}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={point.x}\n y={point.y + 14}\n >\n {label}\n </text>\n ))}\n </g>\n );\n}\n\nfunction renderBarChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, chartType: string, selectedChartElement?: XlsxChartElementSelection | null) {\n if (chart.series.length === 0) {\n return null;\n }\n const sourceCategories = getCategoryLabels(chart);\n if (sourceCategories.length === 0) {\n return null;\n }\n const isPercentStacked = chartType === \"ColumnPercentStacked\" || chartType === \"BarPercentStacked\";\n const isHorizontal = chartType === \"BarClustered\" || chartType === \"BarStacked\" || chartType === \"BarPercentStacked\";\n const isHistogramLike = isHistogramLikeChart(chart) && chartType === \"ColumnClustered\";\n const shouldReverseCategories = isHorizontal && chart.categoryAxis?.orientation !== \"maxMin\";\n const categories = shouldReverseCategories ? sourceCategories.slice().reverse() : sourceCategories;\n const isStacked = chartType === \"ColumnStacked\" || chartType === \"BarStacked\" || isPercentStacked;\n const negativeFillMode: \"chartArea\" | \"none\" | \"series\" = isPercentStacked\n ? \"chartArea\"\n : chartType === \"ColumnClustered\"\n ? \"none\"\n : \"series\";\n const categoryCount = categories.length;\n const seriesCount = chart.series.length;\n const normalized3dShape = (() => {\n switch (chart.shape3d) {\n case \"cone\":\n case \"coneToMax\":\n return \"cone\";\n case \"cylinder\":\n return \"cylinder\";\n case \"pyramid\":\n case \"pyramidToMax\":\n return \"pyramid\";\n default:\n return \"box\";\n }\n })();\n const frameOffsets = chart.is3d ? resolve3dFrameOffsets(chart, isHorizontal ? 9 : 11, isHorizontal ? 7 : 8) : null;\n const plot = chart.is3d && frameOffsets\n ? {\n ...layout.plot,\n height: Math.max(20, layout.plot.height - frameOffsets.insetBottom - 2),\n left: layout.plot.left + frameOffsets.insetLeft,\n top: layout.plot.top + frameOffsets.insetTop,\n width: Math.max(20, layout.plot.width - frameOffsets.insetLeft - frameOffsets.insetRight - 2)\n }\n : layout.plot;\n\n const matrix = chart.series.map((series) => {\n const values = Array.from(\n { length: categoryCount },\n (_, categoryIndex) => safeNumber(series.values[categoryIndex]) ?? 0\n );\n return shouldReverseCategories ? values.reverse() : values;\n });\n const rawMatrix = matrix.map((row) => row.slice());\n\n if (isPercentStacked) {\n for (let categoryIndex = 0; categoryIndex < categoryCount; categoryIndex += 1) {\n const total = matrix.reduce((sum, row) => sum + Math.max(0, row[categoryIndex] ?? 0), 0);\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex += 1) {\n matrix[seriesIndex][categoryIndex] = total > 0 ? ((matrix[seriesIndex][categoryIndex] ?? 0) / total) * 100 : 0;\n }\n }\n }\n\n const positiveTotals = Array.from({ length: categoryCount }, (_, categoryIndex) => (\n matrix.reduce((sum, row) => sum + Math.max(0, row[categoryIndex] ?? 0), 0)\n ));\n const negativeTotals = Array.from({ length: categoryCount }, (_, categoryIndex) => (\n Math.abs(matrix.reduce((sum, row) => sum + Math.min(0, row[categoryIndex] ?? 0), 0))\n ));\n\n let minValue = Number.POSITIVE_INFINITY;\n let maxValue = Number.NEGATIVE_INFINITY;\n if (isStacked) {\n for (let categoryIndex = 0; categoryIndex < categoryCount; categoryIndex += 1) {\n let positive = 0;\n let negative = 0;\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex += 1) {\n const value = matrix[seriesIndex][categoryIndex] ?? 0;\n if (value >= 0) {\n positive += value;\n } else {\n negative += value;\n }\n }\n maxValue = Math.max(maxValue, positive);\n minValue = Math.min(minValue, negative);\n }\n } else {\n for (const row of matrix) {\n for (const value of row) {\n maxValue = Math.max(maxValue, value);\n minValue = Math.min(minValue, value);\n }\n }\n }\n if (!Number.isFinite(minValue) || !Number.isFinite(maxValue)) {\n minValue = 0;\n maxValue = 1;\n }\n\n const valueDomain = resolveAxisDomainWithChartOverrides(\n chart.valueAxis,\n minValue,\n maxValue,\n true\n );\n minValue = valueDomain.min;\n maxValue = valueDomain.max;\n\n const categoryBandPadding = isHistogramLike\n ? { inner: 0, outer: 0 }\n : resolveCategoryBandPadding(chart.gapWidth);\n const categoryScale = scaleBand<string>()\n .domain(categories)\n .range(isHorizontal ? [plot.top, plot.top + plot.height] : [plot.left, plot.left + plot.width])\n .paddingInner(categoryBandPadding.inner)\n .paddingOuter(categoryBandPadding.outer);\n\n const seriesScale = scaleBand<string>()\n .domain(Array.from({ length: seriesCount }, (_, index) => String(index)))\n .range([0, categoryScale.bandwidth()])\n .paddingInner(isHistogramLike ? 0 : 0.16)\n .paddingOuter(isHistogramLike ? 0 : 0.08);\n const usesSeriesDepthAxis = (\n chart.is3d === true\n && !isHorizontal\n && !isStacked\n && seriesCount > 1\n && chart.seriesAxis != null\n );\n const depthLaneSpread = usesSeriesDepthAxis\n ? clamp(1.26 + seriesCount * 0.16, 1.4, 1.96)\n : 1;\n const depthGridSpanX = usesSeriesDepthAxis && frameOffsets\n ? frameOffsets.depthX * depthLaneSpread\n : 0;\n const depthGridSpanY = usesSeriesDepthAxis && frameOffsets\n ? frameOffsets.depthY * depthLaneSpread\n : 0;\n const depthSlotX = usesSeriesDepthAxis ? depthGridSpanX / Math.max(1, seriesCount) : 0;\n const depthSlotY = usesSeriesDepthAxis ? depthGridSpanY / Math.max(1, seriesCount) : 0;\n const depthBarX = usesSeriesDepthAxis\n ? Math.sign(depthSlotX || frameOffsets?.depthX || 1) * Math.max(8, Math.abs(depthSlotX) * 1.14)\n : frameOffsets?.depthX;\n const depthBarY = usesSeriesDepthAxis\n ? Math.sign(depthSlotY || frameOffsets?.depthY || -1) * Math.max(5.5, Math.abs(depthSlotY) * 1.12)\n : frameOffsets?.depthY;\n\n const shouldReverseValueAxis = chart.valueAxis?.orientation === \"maxMin\";\n const valueScale = scaleLinear()\n .domain([minValue, maxValue])\n .range(\n isHorizontal\n ? (shouldReverseValueAxis ? [plot.left + plot.width, plot.left] : [plot.left, plot.left + plot.width])\n : (shouldReverseValueAxis ? [plot.top, plot.top + plot.height] : [plot.top + plot.height, plot.top])\n );\n\n const ticks = isPercentStacked\n ? buildNumericTickValues(minValue, maxValue, chart.valueAxis?.majorUnit ?? 20)\n : valueDomain.ticks;\n const categoryPositions = categories.map((category) => {\n const bandStart = categoryScale(category) ?? 0;\n return bandStart + categoryScale.bandwidth() / 2;\n });\n\n const bars: BarRect[] = [];\n const positive = Array.from({ length: categoryCount }, () => 0);\n const negative = Array.from({ length: categoryCount }, () => 0);\n\n for (let seriesIndex = 0; seriesIndex < seriesCount; seriesIndex += 1) {\n for (let categoryIndex = 0; categoryIndex < categoryCount; categoryIndex += 1) {\n const value = matrix[seriesIndex][categoryIndex] ?? 0;\n const rawValue = rawMatrix[seriesIndex][categoryIndex] ?? value;\n const pointIndex = shouldReverseCategories ? (categoryCount - 1 - categoryIndex) : categoryIndex;\n const pointStyle = chart.series[seriesIndex]?.dataPointStyles?.find((entry) => entry.index === pointIndex);\n let start = 0;\n let end = value;\n if (isStacked) {\n if (value >= 0) {\n start = positive[categoryIndex];\n positive[categoryIndex] += value;\n end = positive[categoryIndex];\n } else {\n start = negative[categoryIndex];\n negative[categoryIndex] += value;\n end = negative[categoryIndex];\n }\n }\n\n const colors = chartSeriesBarColors(chart, seriesIndex, rawValue, negativeFillMode);\n const isInvertedNegative = rawValue < 0 && chart.series[seriesIndex]?.invertIfNegative === true;\n if (!(isInvertedNegative)) {\n if (variesBarColorsByCategory(chart)) {\n colors.fill = chartPointColor(chart, pointIndex, seriesIndex);\n colors.stroke = colors.fill;\n }\n if (pointStyle?.color) {\n colors.fill = pointStyle.color;\n if (!pointStyle.lineColor) {\n colors.stroke = pointStyle.color;\n }\n }\n if (pointStyle?.lineColor) {\n colors.stroke = pointStyle.lineColor;\n }\n }\n if (isInvertedNegative && isPercentStacked && chart.is3d) {\n colors.fill = \"#ffffff\";\n }\n const category = categories[categoryIndex];\n const categoryStart = categoryScale(category) ?? 0;\n const barThickness = usesSeriesDepthAxis\n ? Math.max(7, categoryScale.bandwidth() * 0.4)\n : isHistogramLike\n ? categoryScale.bandwidth()\n : isStacked\n ? categoryScale.bandwidth()\n : seriesScale.bandwidth();\n const barOffset = usesSeriesDepthAxis\n ? Math.max(0, (categoryScale.bandwidth() - barThickness) * 0.5)\n : isHistogramLike\n ? 0\n : isStacked\n ? 0\n : (seriesScale(String(seriesIndex)) ?? 0);\n const depthOffsetX = usesSeriesDepthAxis ? depthSlotX * seriesIndex : 0;\n const depthOffsetY = usesSeriesDepthAxis ? depthSlotY * seriesIndex : 0;\n const depthOrder = depthOffsetX * (frameOffsets?.depthX ?? 0) + depthOffsetY * (frameOffsets?.depthY ?? 0);\n const shapeTaper = normalized3dShape === \"pyramid\"\n ? 0.94\n : normalized3dShape === \"cone\"\n ? 1\n : 0;\n let topScale = 1;\n let bottomScale = 1;\n if (chart.is3d && shapeTaper > 0) {\n const scaleAt = (ratio: number) => {\n const clampedRatio = clamp(ratio, 0, 1);\n const taperedRatio = normalized3dShape === \"cone\"\n ? Math.pow(clampedRatio, isHorizontal ? 1.85 : 1.08)\n : clampedRatio;\n return clamp(1 - (taperedRatio * shapeTaper), normalized3dShape === \"cone\" ? 0 : 0.04, 1);\n };\n if (rawValue >= 0) {\n const total = Math.max(1e-6, isStacked ? positiveTotals[categoryIndex] : Math.abs(rawValue));\n bottomScale = scaleAt(isStacked ? start / total : 0);\n topScale = scaleAt(isStacked ? end / total : 1);\n } else {\n const total = Math.max(1e-6, isStacked ? negativeTotals[categoryIndex] : Math.abs(rawValue));\n topScale = scaleAt(isStacked ? Math.abs(start) / total : 0);\n bottomScale = scaleAt(isStacked ? Math.abs(end) / total : 1);\n }\n }\n\n if (isHorizontal) {\n const x1 = valueScale(start);\n const x2 = valueScale(end);\n const maxPositive = positiveTotals[categoryIndex] ?? 0;\n const maxNegative = negativeTotals[categoryIndex] ?? 0;\n bars.push({\n capEnd: !isStacked || (rawValue >= 0\n ? Math.abs(end - maxPositive) < 1e-6\n : Math.abs(end - maxNegative) < 1e-6),\n capStart: !isStacked || Math.abs(start) < 1e-6,\n bottomScale,\n categoryIndex,\n color: colors.fill,\n depthOrder,\n depthOffsetX,\n depthOffsetY,\n height: Math.max(1, barThickness),\n isHorizontal: true,\n key: `bar-${seriesIndex}-${categoryIndex}`,\n left: Math.min(x1, x2),\n depthX: usesSeriesDepthAxis ? depthBarX : frameOffsets?.depthX,\n depthY: usesSeriesDepthAxis ? depthBarY : frameOffsets?.depthY,\n shape3d: normalized3dShape,\n seriesIndex,\n stroke: colors.stroke,\n strokeWidth: colors.strokeWidth,\n topScale,\n top: categoryStart + barOffset,\n invertedNegative: isInvertedNegative,\n value: rawValue,\n width: Math.max(1, Math.abs(x2 - x1))\n });\n } else {\n const y1 = valueScale(start);\n const y2 = valueScale(end);\n const maxPositive = positiveTotals[categoryIndex] ?? 0;\n const maxNegative = negativeTotals[categoryIndex] ?? 0;\n bars.push({\n capEnd: !isStacked || (rawValue >= 0\n ? Math.abs(end - maxPositive) < 1e-6\n : Math.abs(end - maxNegative) < 1e-6),\n capStart: !isStacked || Math.abs(start) < 1e-6,\n bottomScale,\n categoryIndex,\n color: colors.fill,\n depthOrder,\n depthOffsetX,\n depthOffsetY,\n height: Math.max(1, Math.abs(y2 - y1)),\n isHorizontal: false,\n key: `bar-${seriesIndex}-${categoryIndex}`,\n left: categoryStart + barOffset,\n depthX: usesSeriesDepthAxis ? depthBarX : frameOffsets?.depthX,\n depthY: usesSeriesDepthAxis ? depthBarY : frameOffsets?.depthY,\n shape3d: normalized3dShape,\n seriesIndex,\n stroke: colors.stroke,\n strokeWidth: colors.strokeWidth,\n topScale,\n top: Math.min(y1, y2),\n invertedNegative: isInvertedNegative,\n value: rawValue,\n width: Math.max(1, barThickness)\n });\n }\n }\n }\n\n const renderedBars = chart.is3d && isStacked\n ? bars.slice().sort((left, right) => {\n if (left.categoryIndex !== right.categoryIndex) {\n return left.categoryIndex - right.categoryIndex;\n }\n const leftNegative = left.value < 0 ? 0 : 1;\n const rightNegative = right.value < 0 ? 0 : 1;\n if (leftNegative !== rightNegative) {\n return leftNegative - rightNegative;\n }\n if (isHorizontal) {\n if (left.left !== right.left) {\n return left.left - right.left;\n }\n return left.seriesIndex - right.seriesIndex;\n }\n if (left.top !== right.top) {\n return right.top - left.top;\n }\n return left.seriesIndex - right.seriesIndex;\n })\n : bars;\n const sortedBars = usesSeriesDepthAxis\n ? renderedBars.slice().sort((left, right) => {\n if ((left.depthOrder ?? 0) !== (right.depthOrder ?? 0)) {\n return (right.depthOrder ?? 0) - (left.depthOrder ?? 0);\n }\n if (left.categoryIndex !== right.categoryIndex) {\n return left.categoryIndex - right.categoryIndex;\n }\n return left.top - right.top;\n })\n : renderedBars;\n\n const useVertical3dGradient = chart.is3d && !isHorizontal;\n const gradientByColor = new Map<string, string>();\n if (useVertical3dGradient) {\n for (const bar of renderedBars) {\n if (!bar.color || bar.color === \"none\" || bar.color.startsWith(\"url(\")) {\n continue;\n }\n if (!gradientByColor.has(bar.color)) {\n gradientByColor.set(\n bar.color,\n `bar3d-front-${chart.id}-${gradientByColor.size}`.replace(/[^A-Za-z0-9_-]/g, \"-\")\n );\n }\n bar.gradientId = gradientByColor.get(bar.color);\n }\n }\n\n const axisNode = renderCartesianAxes(\n chart,\n palette,\n plot,\n isHorizontal,\n categories,\n categoryPositions,\n ticks,\n (value) => valueScale(value),\n isPercentStacked ? formatPercentTickValue : formatTickValue\n );\n const depthAxisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const depthGridColor = lightenColor(depthAxisColor, 0.48);\n const frameDepthX = usesSeriesDepthAxis ? depthGridSpanX : (frameOffsets?.depthX ?? 0);\n const frameDepthY = usesSeriesDepthAxis ? depthGridSpanY : (frameOffsets?.depthY ?? 0);\n const depthAxisNode = usesSeriesDepthAxis && frameOffsets ? (\n <g>\n {Array.from({ length: categoryCount + 1 }, (_, boundaryIndex) => {\n const x = plot.left + ((boundaryIndex / Math.max(1, categoryCount)) * plot.width);\n return (\n <line\n key={`bar3d-floor-x-${boundaryIndex}`}\n stroke={depthGridColor}\n strokeWidth={0.9}\n x1={x}\n x2={x + depthGridSpanX}\n y1={plot.top + plot.height}\n y2={plot.top + plot.height + depthGridSpanY}\n />\n );\n })}\n {Array.from({ length: seriesCount + 1 }, (_, boundaryIndex) => {\n const ratio = boundaryIndex / Math.max(1, seriesCount);\n const offsetX = depthGridSpanX * ratio;\n const offsetY = depthGridSpanY * ratio;\n return (\n <line\n key={`bar3d-floor-z-${boundaryIndex}`}\n stroke={depthGridColor}\n strokeWidth={0.9}\n x1={plot.left + offsetX}\n x2={plot.left + plot.width + offsetX}\n y1={plot.top + plot.height + offsetY}\n y2={plot.top + plot.height + offsetY}\n />\n );\n })}\n {chart.series.map((series, seriesIndex) => {\n const ratio = (seriesIndex + 0.5) / Math.max(1, seriesCount);\n const x = plot.left + plot.width + depthGridSpanX * ratio;\n const y = plot.top + plot.height + depthGridSpanY * ratio;\n return (\n <text\n key={`bar3d-ser-label-${seriesIndex}`}\n fill={resolveChartAxisTextColor(chart)}\n fontSize={10}\n textAnchor=\"start\"\n x={x + 7}\n y={y + 3}\n >\n {series.name ?? `Series ${seriesIndex + 1}`}\n </text>\n );\n })}\n </g>\n ) : null;\n\n const frameNode = chart.is3d && frameOffsets ? (\n <g>\n <polygon\n fill={lightenColor(chart.chartAreaFillColor ?? palette.surface, 0.05)}\n points={`${plot.left},${plot.top + plot.height} ${plot.left + plot.width},${plot.top + plot.height} ${plot.left + plot.width + frameDepthX},${plot.top + plot.height + frameDepthY} ${plot.left + frameDepthX},${plot.top + plot.height + frameDepthY}`}\n stroke={lightenColor(chart.axisLineColor ?? palette.border, 0.2)}\n strokeWidth={1}\n />\n <polygon\n fill={lightenColor(chart.chartAreaFillColor ?? palette.surface, 0.12)}\n points={`${plot.left},${plot.top} ${plot.left + plot.width},${plot.top} ${plot.left + plot.width + frameDepthX},${plot.top + frameDepthY} ${plot.left + frameDepthX},${plot.top + frameDepthY}`}\n stroke={lightenColor(chart.axisLineColor ?? palette.border, 0.2)}\n strokeWidth={1}\n />\n </g>\n ) : null;\n\n return (\n <g>\n {useVertical3dGradient && gradientByColor.size > 0 ? (\n <defs>\n {Array.from(gradientByColor.entries()).map(([color, id]) => (\n <linearGradient id={id} key={id} x1=\"0%\" x2=\"0%\" y1=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor={lightenColor(color, 0.28)} />\n <stop offset=\"42%\" stopColor={lightenColor(color, 0.12)} />\n <stop offset=\"100%\" stopColor={darkenColor(color, 0.1)} />\n </linearGradient>\n ))}\n </defs>\n ) : null}\n {axisNode}\n {frameNode}\n {depthAxisNode}\n {chart.is3d\n ? sortedBars.map((bar) => (\n <g key={`bar-hit-${bar.key}`} {...barChartElementDataProps(bar.seriesIndex, bar.categoryIndex)}>\n {renderExtrudedRect(bar)}\n </g>\n ))\n : renderedBars.map((bar) => (\n <rect\n {...barChartElementDataProps(bar.seriesIndex, bar.categoryIndex)}\n key={bar.key}\n fill={bar.color}\n height={bar.height}\n stroke={isHistogramLike ? \"none\" : bar.stroke}\n strokeWidth={isHistogramLike ? 0 : bar.strokeWidth}\n width={bar.width}\n x={bar.left}\n y={bar.top}\n />\n ))}\n {renderedBars.map((bar) => (\n isSelectedChartPoint(selectedChartElement, chart.id, bar.seriesIndex, bar.categoryIndex)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, bar.seriesIndex)\n && selectedChartElement?.kind !== \"point\"\n )\n ? renderSelectionRectHandles(`bar-selection-${bar.key}`, bar.left, bar.top, bar.width, bar.height)\n : null\n ))}\n </g>\n );\n}\n\nfunction renderLineOrAreaChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, chartType: string, selectedChartElement?: XlsxChartElementSelection | null) {\n if (chart.series.length === 0) {\n return null;\n }\n const categories = getCategoryLabels(chart);\n if (categories.length === 0) {\n return null;\n }\n const plot = layout.plot;\n const displayBlanksAs = chart.displayBlanksAs;\n const isAreaChart = chartType === \"Area\" || chartType === \"AreaStacked\" || chartType === \"AreaPercentStacked\";\n const isStackedArea = chartType === \"AreaStacked\" || chartType === \"AreaPercentStacked\";\n const isStackedLine = chartType === \"LineStacked\" || chartType === \"LinePercentStacked\";\n const isStackedSeries = isStackedArea || isStackedLine;\n const isPercentStackedSeries = chartType === \"AreaPercentStacked\" || chartType === \"LinePercentStacked\";\n const resolvedValuesBySeries = chart.series.map((series) => (\n categories.map((_, categoryIndex) => resolveRenderableSeriesValue(series.values[categoryIndex], displayBlanksAs))\n ));\n\n type SeriesPoint = {\n defined: boolean;\n y: number | null;\n y0: number | null;\n y1: number | null;\n };\n\n const stackedPointsBySeries: SeriesPoint[][] = isStackedSeries\n ? (() => {\n const positive = Array.from({ length: categories.length }, () => 0);\n const negative = Array.from({ length: categories.length }, () => 0);\n const categoryTotals = isPercentStackedSeries\n ? categories.map((_, categoryIndex) => {\n const total = resolvedValuesBySeries.reduce((sum, seriesValues) => (\n sum + (seriesValues[categoryIndex] ?? 0)\n ), 0);\n return Math.abs(total) < 1e-9 ? 1 : total;\n })\n : null;\n return chart.series.map((_, seriesIndex) => (\n categories.map((_, categoryIndex) => {\n const rawValue = resolvedValuesBySeries[seriesIndex]?.[categoryIndex] ?? null;\n if (rawValue == null) {\n return { defined: false, y: null, y0: null, y1: null };\n }\n const value = isPercentStackedSeries\n ? (rawValue / (categoryTotals?.[categoryIndex] ?? 1)) * 100\n : rawValue;\n if (value >= 0) {\n const start = positive[categoryIndex];\n const end = start + value;\n positive[categoryIndex] = end;\n return { defined: true, y: end, y0: start, y1: end };\n }\n const start = negative[categoryIndex];\n const end = start + value;\n negative[categoryIndex] = end;\n return { defined: true, y: end, y0: start, y1: end };\n })\n ));\n })()\n : chart.series.map((_, seriesIndex) => (\n categories.map((_, categoryIndex) => {\n const value = resolvedValuesBySeries[seriesIndex]?.[categoryIndex] ?? null;\n return {\n defined: value != null,\n y: value,\n y0: null,\n y1: value\n };\n })\n ));\n\n const stackedExtents = stackedPointsBySeries\n .flatMap((seriesPoints) => (\n seriesPoints.flatMap((point) => (\n point.defined\n ? [point.y0, point.y1].filter((value): value is number => value != null && Number.isFinite(value))\n : []\n ))\n ));\n if (stackedExtents.length === 0) {\n return null;\n }\n let minValue = Math.min(...stackedExtents);\n let maxValue = Math.max(...stackedExtents);\n if (isAreaChart) {\n minValue = Math.min(0, minValue);\n } else if ((chartType === \"Line\" || isStackedLine) && chart.valueAxis?.crosses === \"autoZero\") {\n minValue = Math.min(0, minValue);\n }\n if (isPercentStackedSeries) {\n const explicitMin = typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min)\n ? Number(chart.valueAxis.min)\n : Math.min(0, minValue);\n const explicitMax = typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max)\n ? Number(chart.valueAxis.max)\n : Math.max(100, maxValue);\n minValue = explicitMin;\n maxValue = explicitMax <= explicitMin ? explicitMin + 1 : explicitMax;\n } else {\n const valueDomain = resolveAxisDomainWithChartOverrides(\n chart.valueAxis,\n minValue,\n maxValue,\n isAreaChart || chart.valueAxis?.crosses === \"autoZero\"\n );\n minValue = valueDomain.min;\n maxValue = valueDomain.max;\n }\n\n const xScale = scalePoint<string>()\n .domain(categories)\n .range([plot.left, plot.left + plot.width]);\n const yScale = scaleLinear()\n .domain([minValue, maxValue])\n .range([plot.top + plot.height, plot.top]);\n\n const ticks = isPercentStackedSeries\n ? buildNumericTickValues(minValue, maxValue, chart.valueAxis?.majorUnit ?? 20)\n : resolveAxisDomainWithChartOverrides(\n chart.valueAxis,\n minValue,\n maxValue,\n isAreaChart || chart.valueAxis?.crosses === \"autoZero\"\n ).ticks;\n const categoryPositions = categories.map((category) => xScale(category) ?? plot.left);\n\n const curve: CurveFactory = curveLinear;\n const areaBaseline = yScale(Math.max(minValue, 0));\n const plotPointsBySeries = chart.series.map((_, seriesIndex) => (\n categories.map((category, categoryIndex) => {\n const point = stackedPointsBySeries[seriesIndex]?.[categoryIndex] ?? {\n defined: false,\n y: null,\n y0: null,\n y1: null\n };\n return {\n defined: point.defined,\n x: xScale(category) ?? plot.left,\n y: point.y,\n y0: point.y0,\n y1: point.y1\n };\n })\n ));\n\n if (chart.is3d) {\n return renderLineOrAreaChart3d(\n chart,\n palette,\n layout,\n categories,\n stackedPointsBySeries,\n minValue,\n maxValue,\n isAreaChart,\n isStackedSeries,\n selectedChartElement\n );\n }\n\n const rawRecord = chart.raw && typeof chart.raw === \"object\"\n ? chart.raw as Record<string, unknown>\n : null;\n const dropLinesRecord = rawRecord?.dropLines && typeof rawRecord.dropLines === \"object\"\n ? rawRecord.dropLines as Record<string, unknown>\n : null;\n const highLowLinesRecord = rawRecord?.highLowLines && typeof rawRecord.highLowLines === \"object\"\n ? rawRecord.highLowLines as Record<string, unknown>\n : null;\n const upDownBarsRecord = rawRecord?.upDownBars && typeof rawRecord.upDownBars === \"object\"\n ? rawRecord.upDownBars as Record<string, unknown>\n : null;\n const dropLineColor = normalizeRendererHexColor((dropLinesRecord?.shapeProperties as Record<string, unknown> | undefined)?.lineColorHex)\n ?? lightenColor(chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border, 0.45);\n const highLowLineColor = normalizeRendererHexColor((highLowLinesRecord?.shapeProperties as Record<string, unknown> | undefined)?.lineColorHex)\n ?? chart.axisLineColor\n ?? chart.chartAreaBorderColor\n ?? palette.border;\n const upDownGapWidth = typeof upDownBarsRecord?.gapWidth === \"number\" && Number.isFinite(upDownBarsRecord.gapWidth)\n ? upDownBarsRecord.gapWidth\n : 150;\n const categoryStep = categoryPositions.length >= 2\n ? Math.min(...categoryPositions.slice(1).map((position, index) => Math.abs(position - (categoryPositions[index] ?? 0))).filter((value) => value > 0))\n : plot.width;\n const upDownBarWidth = clamp(categoryStep * (1 - resolveCategoryBandPadding(upDownGapWidth).inner) * 0.82, 3, 28);\n\n return (\n <g>\n {renderCartesianAxes(\n chart,\n palette,\n plot,\n false,\n categories,\n categoryPositions,\n ticks,\n (value) => yScale(value)\n )}\n {!isAreaChart && !isStackedSeries && highLowLinesRecord\n ? categories.map((_, categoryIndex) => {\n const yValues = plotPointsBySeries\n .map((seriesPoints) => seriesPoints[categoryIndex]?.y)\n .filter((value): value is number => value != null && Number.isFinite(value));\n if (yValues.length < 2) {\n return null;\n }\n const x = categoryPositions[categoryIndex] ?? plot.left;\n return (\n <line\n key={`high-low-${categoryIndex}`}\n stroke={highLowLineColor}\n strokeWidth={1}\n x1={x}\n x2={x}\n y1={yScale(Math.min(...yValues))}\n y2={yScale(Math.max(...yValues))}\n />\n );\n })\n : null}\n {!isAreaChart && !isStackedSeries && upDownBarsRecord && plotPointsBySeries.length >= 2\n ? categories.map((_, categoryIndex) => {\n const first = plotPointsBySeries[0]?.[categoryIndex];\n const second = plotPointsBySeries[plotPointsBySeries.length - 1]?.[categoryIndex];\n if (!first || !second || first.y == null || second.y == null) {\n return null;\n }\n const top = yScale(Math.max(first.y, second.y));\n const bottom = yScale(Math.min(first.y, second.y));\n const isUpBar = second.y >= first.y;\n const fill = isUpBar ? darkenColor(highLowLineColor, 0.12) : \"#c0504d\";\n return (\n <rect\n key={`up-down-${categoryIndex}`}\n fill={fill}\n fillOpacity={0.92}\n height={Math.max(1, bottom - top)}\n stroke={darkenColor(fill, 0.18)}\n strokeWidth={1}\n width={upDownBarWidth}\n x={(categoryPositions[categoryIndex] ?? plot.left) - upDownBarWidth / 2}\n y={top}\n />\n );\n })\n : null}\n {chart.series.map((series, seriesIndex) => {\n const points = plotPointsBySeries[seriesIndex] ?? [];\n const lineStrokePoints = displayBlanksAs === \"span\"\n ? points.filter((point) => point.y != null)\n : points;\n const linePath = d3Line<{ x: number; y: number | null }>()\n .defined((point) => point.y != null)\n .x((point) => point.x)\n .y((point) => yScale(point.y ?? 0))\n .curve(curve)(lineStrokePoints) ?? \"\";\n\n const areaPath = isAreaChart\n ? d3Area<{ x: number; y: number | null; y0: number | null; y1: number | null }>()\n .defined((point) => (\n isStackedSeries\n ? point.y0 != null && point.y1 != null\n : point.y != null\n ))\n .x((point) => point.x)\n .y0((point) => (\n isStackedSeries\n ? yScale(point.y0 ?? 0)\n : areaBaseline\n ))\n .y1((point) => yScale((isStackedSeries ? point.y1 : point.y) ?? 0))\n .curve(curve)(points) ?? \"\"\n : \"\";\n\n const seriesFillColor = typeof series.shapeProperties?.xmlFillColor === \"string\"\n ? series.shapeProperties.xmlFillColor\n : chartSeriesColor(chart, seriesIndex);\n return (\n <g key={`line-series-${seriesIndex}`}>\n {!isAreaChart && !isStackedSeries && dropLinesRecord\n ? points.map((point, pointIndex) => (\n point.y == null ? null : (\n <line\n key={`drop-line-${seriesIndex}-${pointIndex}`}\n stroke={dropLineColor}\n strokeWidth={1}\n x1={point.x}\n x2={point.x}\n y1={yScale(point.y)}\n y2={areaBaseline}\n />\n )\n ))\n : null}\n {isAreaChart ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={areaPath}\n fill={seriesFillColor}\n fillOpacity={1}\n stroke=\"none\"\n />\n ) : null}\n <path\n {...chartElementDataProps(seriesIndex)}\n d={linePath}\n fill=\"none\"\n stroke={series.shapeProperties?.xmlLineHidden === true ? \"none\" : chartSeriesStrokeColor(chart, seriesIndex)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={Math.max(1.5, series.lineWidthPx ?? 2)}\n />\n {points.map((point, pointIndex) => (\n point.y == null || normalizeChartMarkerSymbol(series.markerSymbol) === \"none\" ? null : (\n <path\n {...chartElementDataProps(seriesIndex, pointIndex)}\n key={`line-marker-${seriesIndex}-${pointIndex}`}\n d={markerSymbolPath(normalizeChartMarkerSymbol(series.markerSymbol), markerRadiusPx(series.markerSize))}\n transform={`translate(${point.x}, ${yScale(point.y)})`}\n fill={series.markerColor ?? chartSeriesColor(chart, seriesIndex)}\n stroke={series.markerLineColor ?? chart.chartAreaFillColor ?? chartSeriesStrokeColor(chart, seriesIndex)}\n strokeWidth={1}\n />\n )\n ))}\n {points.map((point, pointIndex) => (\n point.y != null && (\n isSelectedChartPoint(selectedChartElement, chart.id, seriesIndex, pointIndex)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, seriesIndex)\n && selectedChartElement?.kind !== \"point\"\n )\n )\n ? isAreaChart\n ? renderSelectionPointHandles(`area-selection-${seriesIndex}-${pointIndex}`, [{ x: point.x, y: yScale(point.y) }])\n : renderSelectionRectHandles(\n `line-selection-${seriesIndex}-${pointIndex}`,\n point.x - 4,\n yScale(point.y) - 4,\n 8,\n 8\n )\n : null\n ))}\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderComboChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const groups = buildComboGroups(chart);\n const columnGroup = groups.find((group) => group.chartType.startsWith(\"Column\"));\n const lineGroup = groups.find((group) => group.chartType.startsWith(\"Line\"));\n if (!columnGroup || !lineGroup) {\n return null;\n }\n\n const primaryChart: XlsxChart = {\n ...chart,\n categoryAxis: columnGroup.categoryAxis ?? chart.categoryAxis,\n chartType: columnGroup.chartType,\n dataLabels: undefined,\n is3d: columnGroup.is3d ?? false,\n series: columnGroup.series,\n valueAxis: columnGroup.valueAxis ?? chart.valueAxis\n };\n const categories = getCategoryLabels(primaryChart);\n if (categories.length === 0) {\n return null;\n }\n\n const plot = layout.plot;\n const groupGapWidth = typeof columnGroup.raw?.gapWidth === \"number\" && Number.isFinite(columnGroup.raw.gapWidth)\n ? columnGroup.raw.gapWidth\n : columnGroup.gapWidth ?? chart.gapWidth;\n const histogramColumns = columnGroup.series.some((series) => isHistogramLikeSeries(series));\n const categoryBandPadding = histogramColumns\n ? { inner: 0, outer: 0 }\n : resolveCategoryBandPadding(groupGapWidth);\n const categoryScale = scaleBand<string>()\n .domain(categories)\n .range([plot.left, plot.left + plot.width])\n .paddingInner(categoryBandPadding.inner)\n .paddingOuter(categoryBandPadding.outer);\n const seriesScale = scaleBand<string>()\n .domain(Array.from({ length: columnGroup.series.length }, (_, index) => String(index)))\n .range([0, categoryScale.bandwidth()])\n .paddingInner(histogramColumns ? 0 : 0.16)\n .paddingOuter(histogramColumns ? 0 : 0.08);\n const categoryPositions = categories.map((category) => (\n (categoryScale(category) ?? plot.left) + categoryScale.bandwidth() / 2\n ));\n const resolveGlobalSeriesIndex = (series: XlsxChartSeries) => {\n const index = chart.series.findIndex((candidate) => candidate.id === series.id);\n return index >= 0 ? index : 0;\n };\n\n const primaryValues = columnGroup.series.flatMap((series) => (\n series.values.map((value) => safeNumber(value)).filter((value): value is number => value != null)\n ));\n const secondaryValues = lineGroup.series.flatMap((series) => (\n series.values.map((value) => safeNumber(value)).filter((value): value is number => value != null)\n ));\n if (primaryValues.length === 0 || secondaryValues.length === 0) {\n return null;\n }\n\n const primaryDomain = resolveNumericAxisDomain(\n typeof columnGroup.valueAxis?.min === \"number\" ? columnGroup.valueAxis.min : Math.min(...primaryValues),\n typeof columnGroup.valueAxis?.max === \"number\" ? columnGroup.valueAxis.max : Math.max(...primaryValues),\n columnGroup.valueAxis?.majorUnit,\n true\n );\n const secondaryDomain = resolveNumericAxisDomain(\n typeof lineGroup.valueAxis?.min === \"number\" ? lineGroup.valueAxis.min : Math.min(...secondaryValues),\n typeof lineGroup.valueAxis?.max === \"number\" ? lineGroup.valueAxis.max : Math.max(...secondaryValues),\n lineGroup.valueAxis?.majorUnit,\n false\n );\n const primaryScale = scaleLinear()\n .domain([primaryDomain.min, primaryDomain.max])\n .range([plot.top + plot.height, plot.top]);\n const secondaryScale = scaleLinear()\n .domain([secondaryDomain.min, secondaryDomain.max])\n .range([plot.top + plot.height, plot.top]);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n\n return (\n <g>\n {renderCartesianAxes(\n primaryChart,\n palette,\n plot,\n false,\n categories,\n categoryPositions,\n primaryDomain.ticks,\n (value) => primaryScale(value)\n )}\n {lineGroup.valueAxis?.delete !== true && lineGroup.valueAxis?.labelPosition !== \"none\" ? secondaryDomain.ticks.map((tick) => {\n const y = secondaryScale(tick);\n return (\n <text\n key={`combo-secondary-tick-${tick}`}\n fill={labelColor}\n fontSize={10}\n textAnchor=\"start\"\n x={plot.left + plot.width + 6}\n y={y + 3}\n >\n {formatTickValue(tick)}\n </text>\n );\n }) : null}\n {lineGroup.valueAxis?.delete !== true ? <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={plot.left + plot.width}\n x2={plot.left + plot.width}\n y1={plot.top}\n y2={plot.top + plot.height}\n /> : null}\n {columnGroup.series.flatMap((series, seriesIndex) => categories.map((category, categoryIndex) => {\n const globalSeriesIndex = resolveGlobalSeriesIndex(series);\n const value = safeNumber(series.values[categoryIndex]) ?? 0;\n const categoryStart = categoryScale(category) ?? plot.left;\n const barWidth = Math.max(1, histogramColumns ? categoryScale.bandwidth() : seriesScale.bandwidth());\n const x = categoryStart + (histogramColumns ? 0 : (seriesScale(String(seriesIndex)) ?? 0));\n const y = primaryScale(Math.max(0, value));\n const zeroY = primaryScale(0);\n const height = Math.max(1, Math.abs(zeroY - primaryScale(value)));\n const selected = isSelectedChartPoint(selectedChartElement, chart.id, globalSeriesIndex, categoryIndex)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, globalSeriesIndex)\n && selectedChartElement?.kind !== \"point\"\n );\n return (\n <React.Fragment key={`combo-bar-${seriesIndex}-${categoryIndex}`}>\n <rect\n {...barChartElementDataProps(globalSeriesIndex, categoryIndex)}\n fill={series.color ?? series.lineColor ?? chartSeriesColor(primaryChart, seriesIndex)}\n height={height}\n stroke={selected ? \"#64748b\" : (histogramColumns ? \"none\" : (series.lineColor ?? series.color ?? chartSeriesStrokeColor(primaryChart, seriesIndex)))}\n strokeWidth={selected ? 2 : (histogramColumns ? 0 : 1)}\n width={barWidth}\n x={x}\n y={Math.min(y, zeroY)}\n />\n {selected\n ? renderSelectionRectHandles(\n `combo-bar-selection-${globalSeriesIndex}-${categoryIndex}`,\n x,\n Math.min(y, zeroY),\n barWidth,\n height\n )\n : null}\n </React.Fragment>\n );\n }))}\n {lineGroup.series.map((series, seriesIndex) => {\n const globalSeriesIndex = resolveGlobalSeriesIndex(series);\n const points = categories.map((category, categoryIndex) => ({\n x: (categoryScale(category) ?? plot.left) + categoryScale.bandwidth() / 2,\n y: safeNumber(series.values[categoryIndex])\n }));\n const lineStrokePoints = chart.displayBlanksAs === \"span\"\n ? points.filter((point) => point.y != null)\n : points;\n const path = d3Line<{ x: number; y: number | null }>()\n .defined((point) => point.y != null)\n .x((point) => point.x)\n .y((point) => secondaryScale(point.y ?? 0))\n .curve(curveLinear)(lineStrokePoints) ?? \"\";\n return (\n <g key={`combo-line-${seriesIndex}`}>\n <path\n {...chartElementDataProps(globalSeriesIndex)}\n d={path}\n fill=\"none\"\n stroke={series.lineColor ?? series.color ?? chartSeriesStrokeColor(chart, columnGroup.series.length + seriesIndex)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={Math.max(1.5, series.lineWidthPx ?? 2)}\n />\n {points.map((point, pointIndex) => (\n point.y == null || normalizeChartMarkerSymbol(series.markerSymbol) === \"none\" ? null : (\n <path\n {...chartElementDataProps(globalSeriesIndex, pointIndex)}\n d={markerSymbolPath(normalizeChartMarkerSymbol(series.markerSymbol), markerRadiusPx(series.markerSize))}\n fill={series.markerColor ?? series.color ?? series.lineColor ?? chartSeriesColor(chart, columnGroup.series.length + seriesIndex)}\n key={`combo-line-marker-${seriesIndex}-${pointIndex}`}\n stroke={series.markerLineColor ?? chart.chartAreaFillColor ?? \"#ffffff\"}\n strokeWidth={1}\n transform={`translate(${point.x}, ${secondaryScale(point.y)})`}\n />\n )\n ))}\n {points.map((point, pointIndex) => (\n point.y != null && isSelectedChartPointOrSeries(selectedChartElement, chart.id, globalSeriesIndex, pointIndex)\n ? renderSelectionRectHandles(\n `combo-line-selection-${globalSeriesIndex}-${pointIndex}`,\n point.x - 4,\n secondaryScale(point.y) - 4,\n 8,\n 8\n )\n : null\n ))}\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderScatterChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, smooth: boolean, selectedChartElement?: XlsxChartElementSelection | null) {\n const plot = layout.plot;\n const rawRecord = chart.raw && typeof chart.raw === \"object\"\n ? chart.raw as Record<string, unknown>\n : null;\n const scatterStyle = typeof chart.scatterStyle === \"string\"\n ? chart.scatterStyle\n : rawRecord && typeof rawRecord.scatterStyle === \"string\"\n ? rawRecord.scatterStyle\n : undefined;\n const styleDrawsLine = scatterStyle\n ? scatterStyle === \"line\" || scatterStyle === \"lineMarker\" || scatterStyle === \"smooth\" || scatterStyle === \"smoothMarker\"\n : chart.chartType !== \"Scatter\";\n const styleShowsMarkers = scatterStyle\n ? scatterStyle === \"marker\" || scatterStyle === \"lineMarker\" || scatterStyle === \"smoothMarker\"\n : true;\n const styleUsesSmoothCurve = scatterStyle\n ? scatterStyle === \"smooth\" || scatterStyle === \"smoothMarker\"\n : smooth;\n const pointsBySeries = chart.series.map((series) => {\n const yLength = series.values.length;\n const directXValues = Array.from({ length: yLength }, (_, index) => coerceLooseNumber(series.categories[index]));\n\n let resolvedXValues = directXValues;\n let usesSyntheticIndex = false;\n if (directXValues.filter((value) => value != null).length < Math.max(2, yLength - 1)) {\n const categories = series.categories ?? [];\n const pairedXValues = Array.from({ length: yLength }, (_, index) => {\n const candidates = [\n categories[index],\n categories[index * 2],\n categories[index * 2 + 1],\n categories[index + 1]\n ];\n for (const candidate of candidates) {\n const parsed = coerceLooseNumber(candidate);\n if (parsed != null) {\n return parsed;\n }\n }\n return null;\n });\n if (pairedXValues.filter((value) => value != null).length >= 2) {\n resolvedXValues = pairedXValues;\n } else {\n const numericPool = categories\n .map((entry) => coerceLooseNumber(entry))\n .filter((value): value is number => value != null);\n if (numericPool.length >= 2) {\n resolvedXValues = Array.from(\n { length: yLength },\n (_, index) => numericPool[index] ?? numericPool[numericPool.length - 1] ?? null\n );\n } else {\n usesSyntheticIndex = true;\n resolvedXValues = Array.from({ length: yLength }, (_, index) => index + 1);\n }\n }\n }\n\n const points = series.values.map((value, index) => {\n const x = coerceLooseNumber(resolvedXValues[index]);\n const y = safeNumber(value);\n return x == null || y == null ? null : { x, y };\n }).filter((point): point is { x: number; y: number } => point != null);\n return {\n pointCount: yLength,\n points,\n series,\n usesSyntheticIndex\n };\n });\n\n const allX = pointsBySeries.flatMap((series) => series.points.map((point) => point.x));\n const allY = pointsBySeries.flatMap((series) => series.points.map((point) => point.y));\n if (allX.length === 0 || allY.length === 0) {\n return null;\n }\n\n const hasExplicitMinX = typeof chart.categoryAxis?.min === \"number\" && Number.isFinite(chart.categoryAxis.min);\n const hasExplicitMaxX = typeof chart.categoryAxis?.max === \"number\" && Number.isFinite(chart.categoryAxis.max);\n const hasExplicitMinY = typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min);\n const hasExplicitMaxY = typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max);\n const hasSyntheticIndexAxis = pointsBySeries.some((series) => series.usesSyntheticIndex);\n const syntheticPointCount = Math.max(0, ...pointsBySeries.map((series) => series.pointCount));\n\n let minX = hasExplicitMinX ? Number(chart.categoryAxis?.min) : Math.min(...allX);\n let maxX = hasExplicitMaxX ? Number(chart.categoryAxis?.max) : Math.max(...allX);\n let minY = hasExplicitMinY ? Number(chart.valueAxis?.min) : Math.min(...allY);\n let maxY = hasExplicitMaxY ? Number(chart.valueAxis?.max) : Math.max(...allY);\n\n if (!hasExplicitMinX) {\n minX = hasSyntheticIndexAxis\n ? 0\n : chart.categoryAxis?.crosses === \"autoZero\"\n ? Math.min(0, minX)\n : minX;\n }\n if (!hasExplicitMaxX) {\n maxX = hasSyntheticIndexAxis\n ? Math.max(maxX, syntheticPointCount + 1)\n : chart.categoryAxis?.crosses === \"autoZero\"\n ? Math.max(0, maxX)\n : maxX;\n }\n if (!hasExplicitMinY && chart.valueAxis?.crosses === \"autoZero\") {\n minY = Math.min(0, minY);\n }\n if (!hasExplicitMaxY && chart.valueAxis?.crosses === \"autoZero\") {\n maxY = Math.max(0, maxY);\n }\n\n if (maxX <= minX) {\n maxX = minX + 1;\n }\n if (maxY <= minY) {\n maxY = minY + 1;\n }\n\n const xStep = typeof chart.categoryAxis?.majorUnit === \"number\" && chart.categoryAxis.majorUnit > 0\n ? chart.categoryAxis.majorUnit\n : buildNiceStep(minX, maxX, 5);\n const yStep = typeof chart.valueAxis?.majorUnit === \"number\" && chart.valueAxis.majorUnit > 0\n ? chart.valueAxis.majorUnit\n : buildNiceStep(minY, maxY, 5);\n\n if (!hasExplicitMinX && !hasSyntheticIndexAxis && Number.isFinite(xStep) && xStep > 0) {\n minX = Math.floor(minX / xStep) * xStep;\n }\n if (!hasExplicitMaxX && !hasSyntheticIndexAxis && Number.isFinite(xStep) && xStep > 0) {\n maxX = Math.ceil(maxX / xStep) * xStep;\n }\n if (!hasExplicitMinY && Number.isFinite(yStep) && yStep > 0) {\n minY = Math.floor(minY / yStep) * yStep;\n }\n if (!hasExplicitMaxY && Number.isFinite(yStep) && yStep > 0) {\n maxY = Math.ceil(maxY / yStep) * yStep;\n }\n\n const safeMaxX = maxX <= minX ? minX + 1 : maxX;\n const safeMaxY = maxY <= minY ? minY + 1 : maxY;\n\n const xScale = scaleLinear().domain([minX, safeMaxX]).range([plot.left, plot.left + plot.width]);\n const yScale = scaleLinear().domain([minY, safeMaxY]).range([plot.top + plot.height, plot.top]);\n const xMajorUnit = typeof chart.categoryAxis?.majorUnit === \"number\" && chart.categoryAxis.majorUnit > 0\n ? chart.categoryAxis.majorUnit\n : hasSyntheticIndexAxis\n ? 1\n : undefined;\n const yMajorUnit = typeof chart.valueAxis?.majorUnit === \"number\" && chart.valueAxis.majorUnit > 0\n ? chart.valueAxis.majorUnit\n : buildNiceStep(minY, safeMaxY, 6);\n const xTicks = buildNumericTickValues(minX, safeMaxX, xMajorUnit);\n const yTicks = buildNumericTickValues(minY, safeMaxY, yMajorUnit);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n\n const hasZeroX = minX <= 0 && safeMaxX >= 0;\n const hasZeroY = minY <= 0 && safeMaxY >= 0;\n\n return (\n <g>\n {xTicks.map((tick) => (\n <g key={`scatter-x-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.7)}\n strokeWidth={1}\n x1={xScale(tick)}\n x2={xScale(tick)}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n <text fill={labelColor} fontSize={10} textAnchor=\"middle\" x={xScale(tick)} y={plot.top + plot.height + 14}>\n {formatTickValue(tick)}\n </text>\n </g>\n ))}\n {yTicks.map((tick) => (\n <g key={`scatter-y-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.7)}\n strokeWidth={1}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={yScale(tick)}\n y2={yScale(tick)}\n />\n <text fill={labelColor} fontSize={10} textAnchor=\"end\" x={plot.left - 6} y={yScale(tick) + 3}>\n {formatTickValue(tick)}\n </text>\n </g>\n ))}\n {hasZeroY ? (\n <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={yScale(0)}\n y2={yScale(0)}\n />\n ) : null}\n {hasZeroX ? (\n <line\n stroke={axisColor}\n strokeWidth={1.2}\n x1={xScale(0)}\n x2={xScale(0)}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n ) : null}\n {pointsBySeries.map((seriesPoints, seriesIndex) => {\n const series = seriesPoints.series;\n const markerSize = markerRadiusPx(series.markerSize);\n const markerPath = markerSymbolPath(\n normalizeChartMarkerSymbol(series.markerSymbol),\n markerSize\n );\n const markerFill = series.lineColor ?? series.markerColor ?? series.color ?? chartSeriesStrokeColor(chart, seriesIndex);\n const shouldDrawLine = styleDrawsLine\n && series.shapeProperties?.xmlLineHidden !== true\n && seriesPoints.points.length > 1;\n const shouldDrawMarkers = styleShowsMarkers\n && markerPath.length > 0;\n const lineCurve = smooth || styleUsesSmoothCurve || series.smooth === true\n ? curveCatmullRom.alpha(0.5)\n : curveLinear;\n const linePath = shouldDrawLine\n ? d3Line<{ x: number; y: number }>()\n .x((point) => xScale(point.x))\n .y((point) => yScale(point.y))\n .curve(lineCurve)(seriesPoints.points) ?? \"\"\n : \"\";\n\n return (\n <g key={`scatter-series-${seriesIndex}`}>\n {shouldDrawLine && linePath.length > 0 ? (\n <path\n {...chartElementDataProps(seriesIndex)}\n d={linePath}\n fill=\"none\"\n stroke={series.lineColor ?? chartSeriesStrokeColor(chart, seriesIndex)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={Math.max(1.2, series.lineWidthPx ?? 2)}\n />\n ) : null}\n {seriesPoints.points.map((point, pointIndex) => {\n if (!shouldDrawMarkers) {\n return null;\n }\n return (\n <g\n key={`scatter-point-${seriesIndex}-${pointIndex}`}\n transform={`translate(${xScale(point.x)}, ${yScale(point.y)})`}\n >\n <path\n {...chartElementDataProps(seriesIndex, pointIndex, { selectionMode: \"seriesFirst\" })}\n d={markerPath}\n fill={markerFill}\n stroke=\"none\"\n strokeWidth={0}\n />\n </g>\n );\n })}\n {seriesPoints.points.map((point, pointIndex) => (\n isSelectedChartPoint(selectedChartElement, chart.id, seriesIndex, pointIndex)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, seriesIndex)\n && selectedChartElement?.kind !== \"point\"\n )\n ? renderSelectionPointHandles(\n `scatter-selection-${seriesIndex}-${pointIndex}`,\n [{ x: xScale(point.x), y: yScale(point.y) }]\n )\n : null\n ))}\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderBubbleChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const plot = layout.plot;\n const pointsBySeries = chart.series.map((series) => (\n series.values.map((value, index) => {\n const x = safeNumber(series.categories[index]);\n const y = safeNumber(value);\n const bubble = safeNumber(series.bubbleSizes?.[index]);\n return x == null || y == null ? null : { bubble: bubble ?? 1, index, x, y };\n }).filter((point): point is { bubble: number; index: number; x: number; y: number } => point != null)\n ));\n\n const allX = pointsBySeries.flatMap((points) => points.map((point) => point.x));\n const allY = pointsBySeries.flatMap((points) => points.map((point) => point.y));\n const allBubble = pointsBySeries.flatMap((points) => points.map((point) => point.bubble));\n if (allX.length === 0 || allY.length === 0) {\n return null;\n }\n const minX = Math.min(...allX);\n const maxX = Math.max(...allX);\n const minY = Math.min(...allY);\n const maxY = Math.max(...allY);\n const bubbleMagnitudes = allBubble.map((value) => Math.sqrt(Math.max(0, value)));\n const minBubbleMagnitude = Math.min(...bubbleMagnitudes);\n const maxBubbleMagnitude = Math.max(...bubbleMagnitudes);\n\n const bubbleScaleFactor = clamp((chart.bubbleScale ?? 100) / 100, 0.2, 4);\n const minRadius = 4;\n const maxRadius = Math.max(minRadius + 2, 12 * bubbleScaleFactor);\n const radiusScale = scaleLinear()\n .domain([minBubbleMagnitude, maxBubbleMagnitude <= minBubbleMagnitude ? minBubbleMagnitude + 1 : maxBubbleMagnitude])\n .range([minRadius, maxRadius]);\n const safeMaxX = maxX <= minX ? minX + 1 : maxX;\n const safeMaxY = maxY <= minY ? minY + 1 : maxY;\n const xSpan = safeMaxX - minX;\n const ySpan = safeMaxY - minY;\n const xPad = Math.max(xSpan * 0.04, (xSpan * maxRadius) / Math.max(1, plot.width));\n const yPad = Math.max(ySpan * 0.06, (ySpan * maxRadius) / Math.max(1, plot.height));\n const xDomain = resolveAxisDomainWithChartOverrides(\n chart.categoryAxis,\n minX - xPad,\n safeMaxX + xPad,\n chart.categoryAxis?.crosses === \"autoZero\"\n );\n const yDomain = resolveAxisDomainWithChartOverrides(\n chart.valueAxis,\n minY - yPad,\n safeMaxY + yPad,\n chart.valueAxis?.crosses === \"autoZero\"\n );\n const xScale = scaleLinear().domain([xDomain.min, xDomain.max]).range([plot.left, plot.left + plot.width]);\n const yScale = scaleLinear().domain([yDomain.min, yDomain.max]).range([plot.top + plot.height, plot.top]);\n\n const xTicks = xDomain.ticks;\n const yTicks = yDomain.ticks;\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n const isBubble3d = chart.bubble3d === true || chart.is3d === true;\n const labelsEnabled = Boolean(\n chart.dataLabels?.showCategoryName\n || chart.dataLabels?.showSeriesName\n || chart.dataLabels?.showValue\n || chart.dataLabels?.showBubbleSize\n || chart.dataLabels?.showPercent\n );\n const bubbleTotals = pointsBySeries.map((points) => (\n points.reduce((sum, point) => sum + Math.abs(point.bubble), 0)\n ));\n\n return (\n <g>\n {xTicks.map((tick) => (\n <g key={`bubble-x-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.72)}\n strokeWidth={1}\n x1={xScale(tick)}\n x2={xScale(tick)}\n y1={plot.top}\n y2={plot.top + plot.height}\n />\n <text fill={labelColor} fontSize={10} textAnchor=\"middle\" x={xScale(tick)} y={plot.top + plot.height + 14}>\n {formatTickValue(tick)}\n </text>\n </g>\n ))}\n {yTicks.map((tick) => (\n <g key={`bubble-y-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.72)}\n strokeWidth={1}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={yScale(tick)}\n y2={yScale(tick)}\n />\n <text fill={labelColor} fontSize={10} textAnchor=\"end\" x={plot.left - 6} y={yScale(tick) + 3}>\n {formatTickValue(tick)}\n </text>\n </g>\n ))}\n <line stroke={axisColor} strokeWidth={1.2} x1={plot.left} x2={plot.left + plot.width} y1={plot.top + plot.height} y2={plot.top + plot.height} />\n <line stroke={axisColor} strokeWidth={1.2} x1={plot.left} x2={plot.left} y1={plot.top} y2={plot.top + plot.height} />\n {pointsBySeries.map((points, seriesIndex) => (\n <g key={`bubble-series-${seriesIndex}`}>\n {isBubble3d ? (\n <defs>\n <radialGradient id={`bubble3d-grad-${chart.id}-${seriesIndex}`} cx=\"35%\" cy=\"30%\" r=\"70%\">\n <stop offset=\"0%\" stopColor={lightenColor(chart.series[seriesIndex]?.color ?? chart.series[seriesIndex]?.lineColor ?? chartSeriesColor(chart, seriesIndex), 0.42)} />\n <stop offset=\"58%\" stopColor={chart.series[seriesIndex]?.color ?? chart.series[seriesIndex]?.lineColor ?? chartSeriesColor(chart, seriesIndex)} />\n <stop offset=\"100%\" stopColor={darkenColor(chart.series[seriesIndex]?.color ?? chart.series[seriesIndex]?.lineColor ?? chartSeriesColor(chart, seriesIndex), 0.18)} />\n </radialGradient>\n </defs>\n ) : null}\n {[...points]\n .sort((left, right) => {\n if (left.bubble !== right.bubble) {\n return right.bubble - left.bubble;\n }\n return left.index - right.index;\n })\n .map((point) => {\n const series = chart.series[seriesIndex];\n const baseColor = series?.color ?? series?.lineColor ?? chartSeriesColor(chart, seriesIndex);\n const radius = radiusScale(Math.sqrt(Math.max(0, point.bubble)));\n const pieces: string[] = [];\n if (chart.dataLabels?.showSeriesName && series?.name) {\n pieces.push(series.name);\n }\n if (chart.dataLabels?.showCategoryName) {\n pieces.push(formatTickValue(point.x));\n }\n if (chart.dataLabels?.showValue) {\n pieces.push(formatTickValue(point.y));\n }\n if (chart.dataLabels?.showBubbleSize) {\n pieces.push(formatTickValue(point.bubble));\n }\n if (chart.dataLabels?.showPercent) {\n pieces.push(`${Math.round((Math.abs(point.bubble) / Math.max(1, bubbleTotals[seriesIndex] ?? 1)) * 100)}%`);\n }\n return (\n <g key={`bubble-${seriesIndex}-${point.index}`}>\n <circle\n {...chartElementDataProps(seriesIndex, point.index, { selectionMode: \"seriesFirst\" })}\n cx={xScale(point.x)}\n cy={yScale(point.y)}\n fill={isBubble3d ? `url(#bubble3d-grad-${chart.id}-${seriesIndex})` : baseColor}\n fillOpacity={isBubble3d ? 0.98 : 0.78}\n r={radius}\n stroke={darkenColor(baseColor, 0.18)}\n strokeWidth={isBubble3d ? 1.2 : 1}\n />\n {isSelectedChartPoint(selectedChartElement, chart.id, seriesIndex, point.index)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, seriesIndex)\n && selectedChartElement?.kind !== \"point\"\n )\n ? renderSelectionRectHandles(\n `bubble-selection-${seriesIndex}-${point.index}`,\n xScale(point.x) - radius,\n yScale(point.y) - radius,\n radius * 2,\n radius * 2\n )\n : null}\n {isBubble3d ? (\n <ellipse\n cx={xScale(point.x) - radius * 0.16}\n cy={yScale(point.y) - radius * 0.22}\n fill=\"#ffffff\"\n opacity={0.22}\n rx={Math.max(1.5, radius * 0.34)}\n ry={Math.max(1, radius * 0.2)}\n />\n ) : null}\n {labelsEnabled && pieces.length > 0 ? (\n <text\n fill={resolveChartTextColor(chart)}\n fontSize={10}\n textAnchor=\"start\"\n x={xScale(point.x) + radius + 4}\n y={yScale(point.y) + 3}\n >\n {pieces.join(\", \")}\n </text>\n ) : null}\n </g>\n );\n })}\n </g>\n ))}\n </g>\n );\n}\n\nfunction renderRadarChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n if (chart.series.length === 0) {\n return null;\n }\n const categories = getCategoryLabels(chart);\n if (categories.length === 0) {\n return null;\n }\n const plot = layout.plot;\n const centerX = plot.left + plot.width * 0.5;\n const centerY = plot.top + plot.height * 0.52;\n const radius = Math.max(22, Math.min(plot.width, plot.height) * 0.38);\n const values = chart.series.flatMap((series) => (\n series.values\n .slice(0, categories.length)\n .map((value) => safeNumber(value))\n .filter((value): value is number => value != null)\n ));\n const hasExplicitMin = typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min);\n const hasExplicitMax = typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max);\n let minValue = hasExplicitMin\n ? Number(chart.valueAxis?.min)\n : Math.min(0, ...(values.length ? values : [0]));\n let maxValue = hasExplicitMax\n ? Number(chart.valueAxis?.max)\n : Math.max(1, ...(values.length ? values : [1]));\n if (chart.valueAxis?.crosses === \"autoZero\") {\n minValue = Math.min(0, minValue);\n }\n const safeMax = maxValue <= minValue ? minValue + 1 : maxValue;\n const span = Math.max(1e-6, safeMax - minValue);\n const candidateMajorUnit = typeof chart.valueAxis?.majorUnit === \"number\" && chart.valueAxis.majorUnit > 0\n ? chart.valueAxis.majorUnit\n : undefined;\n const preferredMajorUnit = candidateMajorUnit && span / candidateMajorUnit >= 3\n ? candidateMajorUnit\n : buildNiceStep(minValue, safeMax, 6);\n const ticks = buildNumericTickValues(minValue, safeMax, preferredMajorUnit);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n const filled = chart.radarStyle === \"filled\";\n const showSpokes = chart.categoryAxis?.majorGridlines === true;\n\n const angleAt = (index: number) => (Math.PI * 2 * index) / categories.length - Math.PI / 2;\n const radialPoint = (index: number, valueRatio: number) => {\n const angle = angleAt(index);\n const r = radius * valueRatio;\n return {\n x: centerX + Math.cos(angle) * r,\n y: centerY + Math.sin(angle) * r\n };\n };\n\n return (\n <g>\n {ticks.map((tick, ringIndex) => {\n const ratio = (tick - minValue) / (safeMax - minValue);\n const ringPoints = categories.map((_, categoryIndex) => radialPoint(categoryIndex, ratio));\n const ringPath = d3Line<{ x: number; y: number }>()\n .x((point) => point.x)\n .y((point) => point.y)\n .curve(curveLinearClosed)(ringPoints) ?? \"\";\n return (\n <g key={`radar-ring-${ringIndex}`}>\n <path\n d={ringPath}\n fill={ringIndex % 2 === 0 ? \"transparent\" : lightenColor(chart.chartAreaFillColor ?? palette.surface, 0.04)}\n stroke={lightenColor(axisColor, 0.5)}\n strokeWidth={1}\n />\n <text fill={labelColor} fontSize={9} x={centerX + 4} y={centerY - radius * ratio + 3}>\n {formatTickValue(tick)}\n </text>\n </g>\n );\n })}\n {categories.map((category, categoryIndex) => {\n const edge = radialPoint(categoryIndex, 1);\n return (\n <g key={`radar-axis-${categoryIndex}`}>\n {showSpokes ? (\n <line stroke={lightenColor(axisColor, 0.52)} strokeWidth={1} x1={centerX} x2={edge.x} y1={centerY} y2={edge.y} />\n ) : null}\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={centerX + (edge.x - centerX) * 1.1}\n y={centerY + (edge.y - centerY) * 1.1}\n >\n {category}\n </text>\n </g>\n );\n })}\n {chart.series.map((series, seriesIndex) => {\n const points = categories.map((_, categoryIndex) => {\n const rawValue = safeNumber(series.values[categoryIndex]);\n if (rawValue == null) {\n return {\n defined: false,\n pointIndex: categoryIndex,\n ...radialPoint(categoryIndex, 0)\n };\n }\n const ratio = clamp((rawValue - minValue) / (safeMax - minValue), 0, 1);\n return {\n defined: true,\n pointIndex: categoryIndex,\n ...radialPoint(categoryIndex, ratio)\n };\n });\n const definedPoints = points.filter((point) => point.defined);\n if (definedPoints.length === 0) {\n return null;\n }\n const hasGap = points.some((point) => !point.defined);\n const polygon = d3Line<{ defined: boolean; x: number; y: number }>()\n .defined((point) => point.defined)\n .x((point) => point.x)\n .y((point) => point.y)\n .curve(hasGap ? curveLinear : curveLinearClosed)(points) ?? \"\";\n const color = chartSeriesColor(chart, seriesIndex);\n const markerSymbol = normalizeChartMarkerSymbol(series.markerSymbol);\n const markerSize = markerRadiusPx(series.markerSize);\n const markerPath = markerSymbolPath(markerSymbol, markerSize);\n\t const showMarkers = markerSymbol !== \"none\" && markerPath.length > 0;\n\t return (\n\t <g key={`radar-series-${seriesIndex}`}>\n\t {definedPoints.length >= 2 ? (\n\t <path\n\t {...chartElementDataProps(seriesIndex)}\n\t d={polygon}\n\t fill={filled && !hasGap && definedPoints.length >= 3 ? color : \"none\"}\n\t fillOpacity={filled ? 0.26 : 0}\n\t stroke={chartSeriesStrokeColor(chart, seriesIndex)}\n\t strokeWidth={1.8}\n\t />\n\t ) : null}\n\t {showMarkers\n\t ? definedPoints.map((point) => (\n\t <g\n\t key={`radar-point-${seriesIndex}-${point.pointIndex}`}\n\t transform={`translate(${point.x}, ${point.y})`}\n\t >\n\t <path\n\t {...chartElementDataProps(seriesIndex, point.pointIndex)}\n\t d={markerPath}\n\t fill={series.markerColor ?? color}\n\t stroke={series.markerLineColor ?? chart.chartAreaFillColor ?? palette.surface}\n\t strokeWidth={1}\n\t />\n\t </g>\n\t ))\n\t : null}\n\t {definedPoints.map((point) => (\n\t isSelectedChartPoint(selectedChartElement, chart.id, seriesIndex, point.pointIndex)\n\t || (\n\t isSelectedChartSeries(selectedChartElement, chart.id, seriesIndex)\n\t && selectedChartElement?.kind !== \"point\"\n\t )\n\t ? renderSelectionPointHandles(\n\t `radar-selection-${seriesIndex}-${point.pointIndex}`,\n\t [{ x: point.x, y: point.y }]\n\t )\n\t : null\n\t ))}\n\t </g>\n\t );\n })}\n </g>\n );\n}\n\nfunction renderPieChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, chartType: string, selectedChartElement?: XlsxChartElementSelection | null) {\n const pieSeriesIndex = selectPrimaryPieSeriesIndex(chart);\n const pieSeries = chart.series[pieSeriesIndex];\n const pieData = buildPieEntries(chart, pieSeriesIndex);\n if (pieData.length === 0) {\n return null;\n }\n\n const legendOnRight = layout.legendPosition === \"right\";\n const centerX = legendOnRight ? layout.plot.left + layout.plot.width * 0.42 : layout.plot.left + layout.plot.width * 0.5;\n const centerY = layout.plot.top + layout.plot.height * 0.54;\n const outerRadius = Math.max(16, Math.min(layout.plot.width, layout.plot.height) * (chartType === \"Doughnut\" ? 0.32 : 0.38));\n const innerRatio = chartType === \"Doughnut\" ? clamp((chart.holeSize ?? 56) / 100, 0.1, 0.9) : 0;\n const innerRadius = outerRadius * innerRatio;\n const startAngle = ((chart.firstSliceAngle ?? 0) * Math.PI) / 180;\n const arcs = d3Pie<{ color: string; index: number; label: string; value: number }>()\n .value((entry) => entry.value)\n .sort(null)\n .startAngle(startAngle)\n .endAngle(startAngle + Math.PI * 2)(pieData);\n\n const arcPath = d3Arc<typeof arcs[number]>()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius);\n\n const isPie3d = chartType === \"Pie3D\" || (chartType === \"PieExploded\" && chart.is3d === true);\n const rotX = chart.view3d?.rotX ?? 20;\n const perspective = chart.view3d?.perspective ?? 30;\n const tiltFromRotX = clamp(0.14 + (rotX / 90) * 0.72, 0.12, 0.92);\n const perspectiveCompression = clamp(1 - (perspective / 180), 0.55, 1);\n const tilt = isPie3d ? clamp(tiltFromRotX * perspectiveCompression, 0.14, 0.78) : 1;\n const depthScale = (chart.view3d?.depthPercent ?? 100) / 100;\n const depth = isPie3d ? Math.max(9, outerRadius * 0.28 * depthScale) : 0;\n const dataLabelsEnabled = Boolean(chart.dataLabels?.showCategoryName || chart.dataLabels?.showPercent || chart.dataLabels?.showValue);\n const total = pieData.reduce((sum, entry) => sum + entry.value, 0);\n const shadowId = `pie3d-shadow-${chart.id}`.replace(/[^A-Za-z0-9_-]/g, \"-\");\n const baseShadowId = `pie3d-base-shadow-${chart.id}`.replace(/[^A-Za-z0-9_-]/g, \"-\");\n const sliceSeparatorColor = chart.chartAreaFillColor ?? \"#ffffff\";\n const labelBounds = {\n bottom: layout.height - 6,\n left: 6,\n right: layout.width - 6,\n top: layout.plot.top + 8\n };\n const pointLabelByIndex = new Map((chart.dataLabels?.pointLabels ?? []).map((label) => [label.index, label]));\n const centerValuePointLabel = chartType === \"Doughnut\"\n ? (chart.dataLabels?.pointLabels ?? []).find((label) => (\n label.deleted !== true\n && label.showValue === true\n && label.showCategoryName !== true\n && label.showPercent !== true\n && label.showSeriesName !== true\n && label.showBubbleSize !== true\n )) ?? null\n : null;\n const centerValueEntry = centerValuePointLabel\n ? pieData.find((entry) => entry.index === centerValuePointLabel.index) ?? null\n : null;\n const shouldRenderCenterValue = chartType === \"Doughnut\" && centerValueEntry != null;\n const centerValueLooksPercent = centerValueEntry != null\n && total > 0\n && total <= 1.0000001\n && centerValueEntry.value >= 0\n && centerValueEntry.value <= 1.0000001;\n const centerValueText = centerValueEntry == null\n ? \"\"\n : centerValueLooksPercent\n ? `${Math.round(centerValueEntry.value * 100)}%`\n : formatTickValue(centerValueEntry.value);\n const centerValueFontSize = shouldRenderCenterValue\n ? Math.max(\n 14,\n Math.min(\n Math.max(20, innerRadius * 0.72),\n (centerValuePointLabel?.fontSizePt ?? 28) * 0.85\n )\n )\n : 0;\n\n const resolveSliceExplosion = (pointIndex: number) => {\n const pointStyle = pieSeries?.dataPointStyles?.find((entry) => entry.index === pointIndex);\n const seriesExplosion = typeof pieSeries?.shapeProperties?.xmlExplosion === \"number\"\n ? pieSeries.shapeProperties.xmlExplosion\n : 0;\n const rawExplosion = Math.max(0, pointStyle?.explosion ?? seriesExplosion ?? 0);\n if (rawExplosion <= 0) {\n return 0;\n }\n // OOXML explosion values are percent-like offsets of the pie radius.\n return outerRadius * clamp(rawExplosion / 100, 0, 4);\n };\n const hasExplodedSlices = arcs.some((arc) => resolveSliceExplosion(arc.data.index) > 0);\n const sliceSeparatorWidth = hasExplodedSlices ? 2 : 1.2;\n\n return (\n <g>\n {isPie3d ? (\n <defs>\n <filter id={shadowId} x=\"-40%\" y=\"-40%\" width=\"180%\" height=\"200%\">\n <feDropShadow dx=\"1.2\" dy=\"3.6\" floodColor=\"#000000\" floodOpacity=\"0.28\" stdDeviation=\"2.8\" />\n </filter>\n <filter id={baseShadowId} x=\"-50%\" y=\"-50%\" width=\"220%\" height=\"220%\">\n <feGaussianBlur stdDeviation=\"3.2\" />\n </filter>\n </defs>\n ) : null}\n {isPie3d ? (\n <ellipse\n cx={centerX}\n cy={centerY + depth + 3}\n fill=\"#000000\"\n filter={`url(#${baseShadowId})`}\n opacity={0.14}\n rx={outerRadius * 1.02}\n ry={outerRadius * tilt * 0.68}\n />\n ) : null}\n {isPie3d\n ? arcs.map((arc) => {\n const midAngle = (arc.startAngle + arc.endAngle) / 2;\n const explosion = resolveSliceExplosion(arc.data.index);\n const explodeX = Math.sin(midAngle) * explosion;\n const explodeY = -Math.cos(midAngle) * explosion * tilt;\n const sidePaths = buildPieOuterWallPath(\n centerX,\n centerY,\n outerRadius,\n tilt,\n depth,\n arc.startAngle,\n arc.endAngle,\n explosion > 0\n );\n if (sidePaths.length === 0) {\n return null;\n }\n return (\n <g key={`pie-side-${arc.data.index}`} transform={`translate(${explodeX}, ${explodeY})`}>\n {sidePaths.map((sidePath, sideIndex) => (\n <path\n d={sidePath}\n fill={darkenColor(arc.data.color, 0.34)}\n key={`pie-side-path-${arc.data.index}-${sideIndex}`}\n stroke={darkenColor(arc.data.color, 0.5)}\n strokeWidth={0.8}\n />\n ))}\n {explosion > 0 ? (() => {\n const startWall = buildPieRadialWallPath(\n centerX,\n centerY,\n outerRadius,\n tilt,\n depth,\n arc.startAngle,\n true\n );\n const endWall = buildPieRadialWallPath(\n centerX,\n centerY,\n outerRadius,\n tilt,\n depth,\n arc.endAngle,\n true\n );\n return (\n <>\n {startWall ? (\n <path\n d={startWall}\n fill={darkenColor(arc.data.color, 0.26)}\n stroke={darkenColor(arc.data.color, 0.44)}\n strokeWidth={0.8}\n />\n ) : null}\n {endWall ? (\n <path\n d={endWall}\n fill={darkenColor(arc.data.color, 0.2)}\n stroke={darkenColor(arc.data.color, 0.4)}\n strokeWidth={0.8}\n />\n ) : null}\n </>\n );\n })() : null}\n </g>\n );\n })\n : null}\n {arcs.map((arc) => {\n const explosion = resolveSliceExplosion(arc.data.index);\n const midAngle = (arc.startAngle + arc.endAngle) / 2;\n const explodeX = Math.sin(midAngle) * explosion;\n const explodeY = -Math.cos(midAngle) * explosion * (isPie3d ? tilt : 1);\n const isSliceSelected = isSelectedChartPoint(selectedChartElement, chart.id, pieSeriesIndex, arc.data.index)\n || (\n isSelectedChartSeries(selectedChartElement, chart.id, pieSeriesIndex)\n && selectedChartElement?.kind !== \"point\"\n );\n const sliceHandlePoints = isSliceSelected\n ? [\n pieEllipsePoint(centerX, centerY, outerRadius, isPie3d ? tilt : 1, arc.startAngle),\n pieEllipsePoint(centerX, centerY, outerRadius, isPie3d ? tilt : 1, midAngle),\n pieEllipsePoint(centerX, centerY, outerRadius, isPie3d ? tilt : 1, arc.endAngle),\n innerRadius > 0\n ? pieEllipsePoint(centerX, centerY, innerRadius, isPie3d ? tilt : 1, midAngle)\n : { x: centerX, y: centerY }\n ].map((point) => ({\n x: point.x + explodeX,\n y: point.y + explodeY\n }))\n : [];\n const labelRadius = outerRadius + (chartType === \"PieExploded\" ? 8 : 12);\n const labelX = centerX + Math.sin(midAngle) * labelRadius + explodeX;\n const labelY = centerY - Math.cos(midAngle) * labelRadius * (isPie3d ? tilt : 1) + explodeY;\n const pieces: string[] = [];\n if (chart.dataLabels?.showCategoryName && arc.data.label.trim().length > 0) {\n pieces.push(arc.data.label);\n }\n const pointLabel = pointLabelByIndex.get(arc.data.index);\n const showValue = pointLabel?.showValue ?? chart.dataLabels?.showValue;\n const showPercent = pointLabel?.showPercent ?? chart.dataLabels?.showPercent;\n if (showValue) {\n pieces.push(formatTickValue(arc.data.value));\n }\n if (showPercent) {\n pieces.push(`${Math.round((arc.data.value / Math.max(1, total)) * 100)}%`);\n }\n const labelText = pieces.join(\", \");\n const truncatedLabelText = truncateSvgText(labelText, Math.max(48, layout.width * 0.42), 10);\n const approxLabelWidth = Math.max(12, truncatedLabelText.length * 5.6);\n let labelAnchor: \"end\" | \"start\" = labelX >= centerX ? \"start\" : \"end\";\n let resolvedLabelX = labelX;\n if (labelAnchor === \"start\" && resolvedLabelX + approxLabelWidth > labelBounds.right) {\n labelAnchor = \"end\";\n }\n if (labelAnchor === \"end\" && resolvedLabelX - approxLabelWidth < labelBounds.left) {\n labelAnchor = \"start\";\n }\n resolvedLabelX = clamp(resolvedLabelX, labelBounds.left, labelBounds.right);\n const resolvedLabelY = clamp(labelY, labelBounds.top, labelBounds.bottom);\n return (\n <React.Fragment key={`pie-top-${arc.data.index}`}>\n <g transform={`translate(${explodeX}, ${explodeY})`}>\n <path\n {...chartElementDataProps(pieSeriesIndex, arc.data.index)}\n d={(arcPath(arc) ?? \"\")}\n fill={arc.data.color}\n filter={isPie3d ? `url(#${shadowId})` : undefined}\n stroke={isSliceSelected ? \"#64748b\" : sliceSeparatorColor}\n strokeWidth={isSliceSelected ? Math.max(2, sliceSeparatorWidth) : sliceSeparatorWidth}\n transform={`translate(${centerX}, ${centerY})${isPie3d ? ` scale(1, ${tilt})` : \"\"}`}\n />\n </g>\n {isSliceSelected\n ? renderSelectionPointHandles(`pie-selection-${arc.data.index}`, sliceHandlePoints)\n : null}\n {dataLabelsEnabled && truncatedLabelText.length > 0 ? (\n <text\n fill={resolveChartTextColor(chart)}\n fontSize={10}\n textAnchor={labelAnchor}\n x={resolvedLabelX}\n y={resolvedLabelY}\n >\n {truncatedLabelText}\n </text>\n ) : null}\n </React.Fragment>\n );\n })}\n {shouldRenderCenterValue ? (\n <text\n fill={chart.textColor ?? chart.titleColor ?? DEFAULT_CHART_TEXT_COLOR}\n fontSize={centerValueFontSize}\n fontWeight={700}\n textAnchor=\"middle\"\n x={centerX}\n y={centerY + centerValueFontSize * 0.34}\n >\n {centerValueText}\n </text>\n ) : null}\n </g>\n );\n}\n\nfunction renderBarOfPieChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const pieSeriesIndex = selectPrimaryPieSeriesIndex(chart);\n const pieSeries = chart.series[pieSeriesIndex];\n const categories = getCategoryLabels(chart);\n const values = pieSeries?.values.map((value) => Math.max(0, safeNumber(value) ?? 0)) ?? [];\n if (values.length === 0) {\n return null;\n }\n const raw = (chart.raw ?? {}) as Record<string, unknown>;\n const ofPieType = raw.ofPieType === \"pie\" ? \"pie\" : \"bar\";\n const splitPos = typeof raw.splitPos === \"number\" ? raw.splitPos : 0;\n let secondaryIndices = values\n .map((value, index) => ({ index, value }))\n .filter(({ value }) => value <= splitPos)\n .map(({ index }) => index);\n if (secondaryIndices.length === 0) {\n secondaryIndices = values\n .map((value, index) => ({ index, value }))\n .sort((left, right) => left.value - right.value)\n .slice(0, Math.min(2, values.length))\n .map(({ index }) => index);\n }\n const secondarySet = new Set(secondaryIndices);\n const secondaryTotal = secondaryIndices.reduce((sum, index) => sum + (values[index] ?? 0), 0);\n const primaryData = values.flatMap((value, index) => secondarySet.has(index)\n ? []\n : [{ color: chartPointColor(chart, index, pieSeriesIndex), index, label: categories[index], value }]);\n if (secondaryTotal > 0) {\n primaryData.push({\n color: chartPointColor(chart, secondaryIndices[0] ?? 0, pieSeriesIndex),\n index: secondaryIndices[0] ?? 0,\n label: \"Other\",\n value: secondaryTotal\n });\n }\n\n const pieCenterX = layout.plot.left + layout.plot.width * 0.28;\n const pieCenterY = layout.plot.top + layout.plot.height * 0.55;\n const pieRadius = Math.max(16, Math.min(layout.plot.height, layout.plot.width * 0.45) * 0.3);\n const arc = d3Arc<{ endAngle: number; startAngle: number }>().innerRadius(0).outerRadius(pieRadius);\n const pieArcs = d3Pie<{ color: string; index: number; label: string; value: number }>()\n .value((entry) => entry.value)\n .sort(null)\n .startAngle(((90 - (chart.firstSliceAngle ?? 0)) * Math.PI) / 180)\n .endAngle(((90 - (chart.firstSliceAngle ?? 0)) * Math.PI) / 180 + Math.PI * 2)(primaryData);\n\n const secondaryLabels = secondaryIndices.map((index) => categories[index] ?? \"\");\n const secondaryValues = secondaryIndices.map((index) => values[index] ?? 0);\n const connectorTargetX = layout.plot.left + layout.plot.width * 0.69;\n const secondaryData = secondaryIndices.map((index) => ({\n color: chartPointColor(chart, index, pieSeriesIndex),\n index,\n label: categories[index] ?? \"\",\n value: values[index] ?? 0\n }));\n const secondaryCenterX = layout.plot.left + layout.plot.width * 0.79;\n const secondaryCenterY = pieCenterY;\n const secondaryRadius = pieRadius * clamp(((typeof raw.secondPieSize === \"number\" ? raw.secondPieSize : 100) / 100), 0.55, 1.5);\n const secondaryArc = d3Arc<{ endAngle: number; startAngle: number }>().innerRadius(0).outerRadius(secondaryRadius);\n const secondaryPieArcs = d3Pie<{ color: string; index: number; label: string; value: number }>()\n .value((entry) => entry.value)\n .sort(null)\n .startAngle(((90 - (chart.firstSliceAngle ?? 0)) * Math.PI) / 180)\n .endAngle(((90 - (chart.firstSliceAngle ?? 0)) * Math.PI) / 180 + Math.PI * 2)(secondaryData);\n const stackedBarLeft = layout.plot.left + layout.plot.width * 0.72;\n const stackedBarWidth = Math.max(20, layout.plot.width * 0.13);\n const stackedBarTop = layout.plot.top + 16;\n const stackedBarHeight = Math.max(28, layout.plot.height - 32);\n const secondaryTotalSafe = Math.max(1e-6, secondaryTotal);\n let stackCursor = stackedBarTop;\n\n return (\n <g>\n {pieArcs.map((entry, index) => {\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, pieSeriesIndex, entry.data.index);\n const midAngle = (entry.startAngle + entry.endAngle) / 2;\n const dot = pieEllipsePoint(pieCenterX, pieCenterY, pieRadius * 0.62, 1, midAngle);\n return (\n <React.Fragment key={`bar-of-pie-main-${index}`}>\n <path\n {...chartElementDataProps(pieSeriesIndex, entry.data.index)}\n d={arc(entry) ?? \"\"}\n fill={entry.data.color}\n stroke={selected ? \"#64748b\" : chart.chartAreaFillColor ?? palette.surface}\n strokeWidth={selected ? 2 : 1}\n transform={`translate(${pieCenterX}, ${pieCenterY})`}\n />\n {selected\n ? renderSelectionPointHandles(`bar-of-pie-main-selection-${index}`, [dot])\n : null}\n </React.Fragment>\n );\n })}\n <line\n stroke={chart.chartAreaBorderColor ?? palette.border}\n strokeWidth={1}\n x1={pieCenterX + pieRadius}\n x2={connectorTargetX}\n y1={pieCenterY - pieRadius * 0.4}\n y2={layout.plot.top + 10}\n />\n <line\n stroke={chart.chartAreaBorderColor ?? palette.border}\n strokeWidth={1}\n x1={pieCenterX + pieRadius}\n x2={connectorTargetX}\n y1={pieCenterY + pieRadius * 0.4}\n y2={layout.plot.top + layout.plot.height - 10}\n />\n {ofPieType === \"pie\"\n ? secondaryPieArcs.map((entry, index) => {\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, pieSeriesIndex, entry.data.index);\n const midAngle = (entry.startAngle + entry.endAngle) / 2;\n const dot = pieEllipsePoint(secondaryCenterX, secondaryCenterY, secondaryRadius * 0.62, 1, midAngle);\n return (\n <React.Fragment key={`bar-of-pie-secondary-pie-${index}`}>\n <path\n {...chartElementDataProps(pieSeriesIndex, entry.data.index)}\n d={secondaryArc(entry) ?? \"\"}\n fill={entry.data.color}\n stroke={selected ? \"#64748b\" : chart.chartAreaFillColor ?? palette.surface}\n strokeWidth={selected ? 2 : 1}\n transform={`translate(${secondaryCenterX}, ${secondaryCenterY})`}\n />\n {selected\n ? renderSelectionPointHandles(`bar-of-pie-secondary-pie-selection-${index}`, [dot])\n : null}\n </React.Fragment>\n );\n })\n : secondaryData.map((entry, index) => {\n const segmentHeight = index === secondaryData.length - 1\n ? Math.max(1, stackedBarTop + stackedBarHeight - stackCursor)\n : Math.max(1, (entry.value / secondaryTotalSafe) * stackedBarHeight);\n const y = stackCursor;\n stackCursor += segmentHeight;\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, pieSeriesIndex, entry.index);\n return (\n <g key={`bar-of-pie-secondary-bar-${index}`}>\n <rect\n {...chartElementDataProps(pieSeriesIndex, entry.index)}\n fill={entry.color}\n height={segmentHeight}\n stroke={selected ? \"#64748b\" : chart.chartAreaFillColor ?? palette.surface}\n strokeWidth={selected ? 2 : 1}\n width={stackedBarWidth}\n x={stackedBarLeft}\n y={y}\n />\n {selected\n ? renderSelectionRectHandles(\n `bar-of-pie-secondary-bar-selection-${index}`,\n stackedBarLeft,\n y,\n stackedBarWidth,\n segmentHeight\n )\n : null}\n <text\n fill={resolveChartAxisTextColor(chart)}\n fontSize={10}\n textAnchor=\"start\"\n x={stackedBarLeft + stackedBarWidth + 6}\n y={y + segmentHeight * 0.5 + 3}\n >\n {entry.label}\n </text>\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderSurfaceChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const plot = resolveSurfacePlotRect(chart, layout);\n const categories = getCategoryLabels(chart);\n const rows = chart.series.length;\n const cols = Math.max(\n categories.length,\n chart.series.reduce((max, series) => Math.max(max, series.values.length), 0)\n );\n if (rows === 0 || cols === 0) {\n return null;\n }\n const matrix = chart.series.map((series) => (\n Array.from({ length: cols }, (_, columnIndex) => safeNumber(series.values[columnIndex]))\n ));\n const domain = getSurfaceDomain(chart);\n if (!domain) {\n return null;\n }\n const isContour = isContourSurfaceChart(chart);\n const ratios = surfaceDataRatios(rows, cols, chart.valueAxis?.crossBetween !== \"midCat\", chart.view3d?.heightPercent, chart.view3d?.depthPercent, layout);\n const minValue = domain.minValue;\n const safeMax = domain.safeMax;\n const wallFill = chart.backWall?.fillColor ?? \"#d9d9df\";\n const wallLineColor = chart.backWall?.lineColor ?? chart.sideWall?.lineColor ?? chart.floor?.lineColor ?? (chart.axisLineColor ?? lightenColor(resolveSurfaceBaseColor(chart, palette), 0.4));\n\n if (isContour) {\n const faces: React.ReactNode[] = [];\n const lines: React.ReactNode[] = [];\n const backgroundNormal = transformSurfaceNormal({ x: 0, y: 1, z: 0 }, chart.view3d?.rotX ?? 90, chart.view3d?.rotY ?? 0);\n const backgroundFill = chart.surfaceMaterial === \"flat\" ? wallFill : shadeSurfaceMatteColor(wallFill, backgroundNormal);\n const inset = chart.valueAxis?.crossBetween !== \"midCat\" ? plot.width / (2 * cols) : 0;\n const dataWidth = plot.width - 2 * inset;\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex += 1) {\n for (let columnIndex = 0; columnIndex < cols - 1; columnIndex += 1) {\n const p00 = matrix[rowIndex]?.[columnIndex];\n const p10 = matrix[rowIndex]?.[columnIndex + 1];\n const p01 = matrix[rowIndex + 1]?.[columnIndex];\n const p11 = matrix[rowIndex + 1]?.[columnIndex + 1];\n if (p00 == null || p10 == null || p01 == null || p11 == null) {\n continue;\n }\n const x0 = plot.left + inset + columnIndex / (cols - 1) * dataWidth;\n const x1 = plot.left + inset + (columnIndex + 1) / (cols - 1) * dataWidth;\n const y0 = plot.top + plot.height - rowIndex / (rows - 1) * plot.height;\n const y1 = plot.top + plot.height - (rowIndex + 1) / (rows - 1) * plot.height;\n const triangles = triangulateSurfaceQuad([\n { value: p00, x: x0, y: y0 },\n { value: p10, x: x1, y: y0 },\n { value: p11, x: x1, y: y1 },\n { value: p01, x: x0, y: y1 }\n ], chart.valueAxis);\n triangles.forEach((triangle, triangleIndex) => {\n const world = triangle.map(point => ({\n x: (point.x - plot.left - inset) / dataWidth,\n y: (1 - normalizeSurfaceValue(point.value, domain.minValue, domain.safeMax, chart.valueAxis)) * ratios.height,\n z: (point.y - plot.top) / plot.height * ratios.depth\n }));\n const normal = transformSurfaceNormal(surfaceNormal(world[0], world[1], world[2]), chart.view3d?.rotX ?? 90, chart.view3d?.rotY ?? 0);\n for (let band = 0; band < domain.ticks.length - 1; band += 1) {\n const lower = domain.ticks[band];\n const upper = domain.ticks[band + 1];\n const polygon = clipSurfaceBand(clipSurfaceBand(triangle, lower, true, chart.valueAxis, band === 0), upper, false, chart.valueAxis);\n if (polygon.length < 3) {\n continue;\n }\n const key = `${rowIndex}-${columnIndex}-${triangleIndex}-${band}`;\n const midpoint = (lower + upper) / 2;\n if (!chart.wireframe) {\n faces.push(<polygon key={`surface-band-${key}`} fill={chart.surfaceMaterial === \"flat\" ? resolveSurfaceBandColor(chart, palette, domain, midpoint) : shadeSurfaceMatteColor(resolveSurfaceBandColor(chart, palette, domain, midpoint), normal)} points={polygon.map((point) => `${point.x},${point.y}`).join(\" \")} />);\n }\n const widths = chart.raw?.bandFormatLineWidths as Record<string, number> | undefined;\n for (const group of groupSurfaceBandEdges(polygon, triangle, band, lower, chart.wireframe === true)) {\n const edgeMidpoint = (domain.ticks[group.band] + domain.ticks[group.band + 1]) / 2;\n lines.push(\n <path\n key={`surface-edge-${key}-${group.band}`}\n d={group.edges.map(([from, to]) => `M ${from.x} ${from.y} L ${to.x} ${to.y}`).join(\" \")}\n fill=\"none\"\n stroke={resolveSurfaceWireframeColor(chart, palette, domain, edgeMidpoint)}\n strokeWidth={widths?.[group.band] ?? chart.series[0]?.lineWidthPx ?? 1}\n />\n );\n }\n }\n });\n }\n }\n return (\n <g>\n <rect\n fill={chart.raw?.plotAreaNoFill === true ? \"transparent\" : typeof chart.raw?.plotAreaFillColor === \"string\" ? chart.raw.plotAreaFillColor : backgroundFill}\n x={layout.plot.left}\n y={layout.plot.top}\n width={layout.plot.width}\n height={layout.plot.height}\n stroke={typeof chart.raw?.plotAreaLineColor === \"string\" ? chart.raw.plotAreaLineColor : wallLineColor}\n />\n <rect fill=\"none\" height={plot.height} stroke={wallLineColor} width={plot.width} x={plot.left} y={plot.top} />\n {faces}\n {lines}\n </g>\n );\n }\n\n const rotX = (chart.view3d?.rotX ?? 25) * (Math.PI / 180);\n const rotY = (chart.view3d?.rotY ?? 30) * (Math.PI / 180);\n const usePerspective = chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp(\n (chart.view3d?.perspective ?? (usePerspective ? 30 : 0)) / 100,\n 0,\n 1\n );\n const depthScale = ratios.depth;\n const heightExtent = 2 * ratios.height;\n const cosX = Math.cos(rotX);\n const sinX = Math.sin(rotX);\n const cosY = Math.cos(rotY);\n const sinY = Math.sin(rotY);\n\n type SurfacePoint = { depth: number; hasValue: boolean; value: number; x: number; y: number };\n const projectRawPoint = (columnIndex: number, rowIndex: number, value: number | null): SurfacePoint => {\n const hasValue = value != null;\n const normalizedX = cols <= 1 ? 0 : ((columnIndex / (cols - 1)) - 0.5) * 2;\n const normalizedY = hasValue ? -(normalizeSurfaceValue(value, minValue, safeMax, chart.valueAxis) - 0.5) * heightExtent : heightExtent / 2;\n const normalizedZ = rows <= 1 ? 0 : ((rowIndex / (rows - 1)) - 0.5) * 2 * depthScale;\n if (chart.view3d?.rAngAx !== false) {\n return {\n depth: normalizedZ,\n hasValue,\n value: value ?? minValue,\n x: normalizedX + normalizedZ * sinY,\n y: normalizedY - normalizedZ * sinX\n };\n }\n const x1 = normalizedX * cosY + normalizedZ * sinY;\n const z1 = -normalizedX * sinY + normalizedZ * cosY;\n const y1 = normalizedY * cosX - z1 * sinX;\n const z2 = normalizedY * sinX + z1 * cosX;\n const perspective = usePerspective ? 1 / Math.max(0.18, 1 + z2 * (0.24 + perspectiveStrength * 0.5)) : 1;\n return { depth: z2, hasValue, value: value ?? minValue, x: x1 * perspective, y: y1 * perspective };\n };\n const rawPoints = matrix.map((row, rowIndex) => row.map((value, columnIndex) => projectRawPoint(columnIndex, rowIndex, value)));\n\n const bounds = [\n ...rawPoints.flat(),\n ...[0, cols - 1].flatMap(column => [0, rows - 1].flatMap(row => [minValue, safeMax].map(value => projectRawPoint(column, row, value))))\n ];\n const minX = Math.min(...bounds.map((point) => point.x));\n const maxX = Math.max(...bounds.map((point) => point.x));\n const minY = Math.min(...bounds.map((point) => point.y));\n const maxY = Math.max(...bounds.map((point) => point.y));\n const scale = Math.min(\n layout.plot.width / Math.max(0.25, maxX - minX),\n layout.plot.height / Math.max(0.25, maxY - minY)\n );\n const centerX = layout.plot.left + layout.plot.width / 2;\n const centerY = layout.plot.top + layout.plot.height / 2;\n const centerRawX = (minX + maxX) / 2;\n const centerRawY = (minY + maxY) / 2;\n\n const projectPoint = (point: {x: number; y: number; value: number}) => {\n const projected = projectRawPoint(point.x, point.y, point.value);\n return { ...projected, x: centerX + (projected.x - centerRawX) * scale, y: centerY + (projected.y - centerRawY) * scale };\n };\n const wallNodes: React.ReactNode[] = [];\n const backRow = chart.view3d?.rAngAx !== false || cosX * cosY >= 0 ? rows - 1 : 0;\n const sideColumn = sinY >= 0 ? 0 : cols - 1;\n const wallPoint = (x: number, y: number, value: number) => ({ x, y, value });\n const addWall = (key: string, points: Array<{ x: number; y: number; value: number }>, color: string | undefined, hidden: boolean | undefined) => {\n if (hidden || color === \"transparent\") return;\n const world = points.map(point => ({\n x: point.x / Math.max(1, cols - 1),\n y: (1 - normalizeSurfaceValue(point.value, minValue, safeMax, chart.valueAxis)) * ratios.height,\n z: (1 - point.y / Math.max(1, rows - 1)) * depthScale\n }));\n const normal = transformSurfaceNormal(surfaceNormal(world[0], world[1], world[2]), chart.view3d?.rotX ?? 25, chart.view3d?.rotY ?? 30, chart.view3d?.rAngAx !== false);\n const baseColor = color ?? wallFill;\n wallNodes.push(<polygon key={key} fill={chart.surfaceMaterial === \"flat\" ? baseColor : shadeSurfaceMatteColor(baseColor, normal)} points={points.map(projectPoint).map(point => `${point.x},${point.y}`).join(\" \")} />);\n };\n addWall(\"floor\", [wallPoint(0, 0, minValue), wallPoint(cols - 1, 0, minValue), wallPoint(cols - 1, rows - 1, minValue), wallPoint(0, rows - 1, minValue)], chart.floor?.fillColor, chart.floor?.hidden);\n addWall(\"back\", [wallPoint(0, backRow, safeMax), wallPoint(cols - 1, backRow, safeMax), wallPoint(cols - 1, backRow, minValue), wallPoint(0, backRow, minValue)], chart.backWall?.fillColor, chart.backWall?.hidden);\n addWall(\"side\", [wallPoint(sideColumn, 0, safeMax), wallPoint(sideColumn, rows - 1, safeMax), wallPoint(sideColumn, rows - 1, minValue), wallPoint(sideColumn, 0, minValue)], chart.sideWall?.fillColor, chart.sideWall?.hidden);\n if (chart.valueAxis?.majorGridlines) {\n for (const tick of domain.ticks) {\n const edges = [\n ...(chart.backWall?.hidden ? [] : [[wallPoint(0, backRow, tick), wallPoint(cols - 1, backRow, tick)]]),\n ...(chart.sideWall?.hidden ? [] : [[wallPoint(sideColumn, 0, tick), wallPoint(sideColumn, rows - 1, tick)]])\n ];\n wallNodes.push(<path key={`wall-grid-${tick}`} fill=\"none\" stroke={chart.valueAxis.majorGridlineColor ?? wallLineColor} strokeWidth={1} d={edges.map(edge => { const [from, to] = edge.map(projectPoint); return `M ${from.x} ${from.y} L ${to.x} ${to.y}`; }).join(\" \")} />);\n }\n }\n const faces: Array<{ depth: number; node: React.ReactNode }> = [];\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex += 1) {\n for (let columnIndex = 0; columnIndex < cols - 1; columnIndex += 1) {\n const values = [matrix[rowIndex][columnIndex], matrix[rowIndex][columnIndex + 1], matrix[rowIndex + 1][columnIndex + 1], matrix[rowIndex + 1][columnIndex]];\n if (values.some(value => value == null)) continue;\n const triangles = triangulateSurfaceQuad([\n { value: values[0]!, x: columnIndex, y: rowIndex },\n { value: values[1]!, x: columnIndex + 1, y: rowIndex },\n { value: values[2]!, x: columnIndex + 1, y: rowIndex + 1 },\n { value: values[3]!, x: columnIndex, y: rowIndex + 1 }\n ], chart.valueAxis);\n triangles.forEach((triangle, triangleIndex) => {\n const world = triangle.map(point => ({\n x: point.x / Math.max(1, cols - 1),\n y: (1 - normalizeSurfaceValue(point.value, minValue, safeMax, chart.valueAxis)) * ratios.height,\n z: (1 - point.y / Math.max(1, rows - 1)) * depthScale\n }));\n const normal = transformSurfaceNormal(surfaceNormal(world[0], world[1], world[2]), chart.view3d?.rotX ?? 25, chart.view3d?.rotY ?? 30, chart.view3d?.rAngAx !== false);\n for (let band = 0; band < domain.ticks.length - 1; band += 1) {\n const lower = domain.ticks[band];\n const upper = domain.ticks[band + 1];\n const polygon = clipSurfaceBand(clipSurfaceBand(triangle, lower, true, chart.valueAxis, band === 0), upper, false, chart.valueAxis);\n if (polygon.length < 3) continue;\n const projected = polygon.map(projectPoint);\n const midpoint = (lower + upper) / 2;\n const widths = chart.raw?.bandFormatLineWidths as Record<string, number> | undefined;\n const edgeGroups = groupSurfaceBandEdges(polygon, triangle, band, lower, chart.wireframe === true);\n faces.push({\n depth: projected.reduce((sum, point) => sum + point.depth, 0) / projected.length,\n node: <g key={`surface-band-${rowIndex}-${columnIndex}-${triangleIndex}-${band}`}>\n {!chart.wireframe && <polygon fill={chart.surfaceMaterial === \"flat\" ? resolveSurfaceBandColor(chart, palette, domain, midpoint) : shadeSurfaceMatteColor(resolveSurfaceBandColor(chart, palette, domain, midpoint), normal)} points={projected.map(point => `${point.x},${point.y}`).join(\" \")} />}\n {edgeGroups.map((group) => {\n const edgeMidpoint = (domain.ticks[group.band] + domain.ticks[group.band + 1]) / 2;\n const edges = group.edges.map(([from, to]) => [projectPoint(from), projectPoint(to)]);\n return <path key={`surface-edge-${group.band}`} fill=\"none\" stroke={resolveSurfaceWireframeColor(chart, palette, domain, edgeMidpoint)} strokeWidth={widths?.[group.band] ?? chart.series[0]?.lineWidthPx ?? 1} d={edges.map(([from, to]) => `M ${from.x} ${from.y} L ${to.x} ${to.y}`).join(\" \")} />;\n })}\n </g>\n });\n }\n });\n }\n }\n faces.sort((left, right) => right.depth - left.depth);\n return <g>{wallNodes}{faces.map(face => face.node)}</g>;\n}\n\nfunction renderSurfaceHitOverlay(\n chart: XlsxChart,\n layout: ChartLayout,\n selectedChartElement?: XlsxChartElementSelection | null\n) {\n const plot = resolveSurfacePlotRect(chart, layout);\n const categories = getCategoryLabels(chart);\n const rows = chart.series.length;\n const cols = Math.max(\n categories.length,\n chart.series.reduce((max, series) => Math.max(max, series.values.length), 0)\n );\n if (rows === 0 || cols === 0) {\n return null;\n }\n\n const cellWidth = plot.width / cols;\n const cellHeight = plot.height / rows;\n return (\n <g>\n {chart.series.flatMap((_, seriesIndex) => (\n Array.from({ length: cols }, (_, pointIndex) => {\n const left = plot.left + pointIndex * cellWidth;\n const top = plot.top + seriesIndex * cellHeight;\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, seriesIndex, pointIndex);\n return (\n <React.Fragment key={`surface-hit-${seriesIndex}-${pointIndex}`}>\n <rect\n {...chartElementDataProps(seriesIndex, pointIndex)}\n fill=\"transparent\"\n height={cellHeight}\n stroke=\"none\"\n width={cellWidth}\n x={left}\n y={top}\n />\n {selected\n ? renderSelectionRectHandles(\n `surface-selection-${seriesIndex}-${pointIndex}`,\n left,\n top,\n cellWidth,\n cellHeight\n )\n : null}\n </React.Fragment>\n );\n })\n ))}\n </g>\n );\n}\n\nfunction indexByName(series: XlsxChart[\"series\"], matcher: RegExp) {\n const index = series.findIndex((entry) => matcher.test((entry.name ?? \"\").toLowerCase()));\n return index >= 0 ? index : null;\n}\n\nfunction renderStockChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n return renderLineOrAreaChart(chart, palette, layout, \"Stock\", selectedChartElement);\n}\n\nfunction renderWaterfallChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const stages = buildChartStages(chart);\n if (stages.length === 0) {\n return null;\n }\n\n const plot = layout.plot;\n const labels = stages.map((stage) => stage.label);\n const xScale = scaleBand<string>()\n .domain(labels)\n .range([plot.left, plot.left + plot.width])\n .paddingInner(0.34)\n .paddingOuter(0.18);\n\n const bars: Array<ChartStage & { end: number; index: number; start: number }> = [];\n let runningTotal = 0;\n stages.forEach((stage, index) => {\n const start = stage.isSubtotal ? 0 : runningTotal;\n const end = stage.isSubtotal ? runningTotal : runningTotal + stage.value;\n if (!stage.isSubtotal) {\n runningTotal = end;\n }\n bars.push({ ...stage, end, index, start });\n });\n\n const extents = bars.flatMap((bar) => [0, bar.start, bar.end]);\n let minValue = Math.min(...extents);\n let maxValue = Math.max(...extents);\n if (maxValue <= minValue) {\n maxValue = minValue + 1;\n }\n\n const yScale = scaleLinear()\n .domain([minValue, maxValue])\n .range([plot.top + plot.height, plot.top]);\n const ticks = buildNumericTickValues(minValue, maxValue, chart.valueAxis?.majorUnit);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n\n return (\n <g>\n {ticks.map((tick) => (\n <g key={`waterfall-y-${tick}`}>\n <line\n stroke={lightenColor(axisColor, 0.72)}\n strokeWidth={1}\n x1={plot.left}\n x2={plot.left + plot.width}\n y1={yScale(tick)}\n y2={yScale(tick)}\n />\n <text fill={labelColor} fontSize={10} textAnchor=\"end\" x={plot.left - 6} y={yScale(tick) + 3}>\n {formatTickValue(tick)}\n </text>\n </g>\n ))}\n <line stroke={axisColor} strokeWidth={1.2} x1={plot.left} x2={plot.left} y1={plot.top} y2={plot.top + plot.height} />\n <line stroke={axisColor} strokeWidth={1.2} x1={plot.left} x2={plot.left + plot.width} y1={yScale(0)} y2={yScale(0)} />\n {bars.map((bar, index) => {\n const bandLeft = xScale(bar.label) ?? plot.left;\n const bandWidth = xScale.bandwidth();\n const topValue = Math.max(bar.start, bar.end);\n const bottomValue = Math.min(bar.start, bar.end);\n const top = yScale(topValue);\n const height = Math.max(1, yScale(bottomValue) - top);\n const fill = bar.isSubtotal\n ? darkenColor(bar.color, 0.18)\n : bar.value >= 0\n ? bar.color\n : lightenColor(bar.color, 0.22);\n const connectorStart = index > 0 ? bars[index - 1] : null;\n const connectorY = connectorStart ? yScale(connectorStart.end) : 0;\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, 0, index);\n\n return (\n <g key={`waterfall-bar-${index}`}>\n {connectorStart ? (\n <line\n stroke={lightenColor(axisColor, 0.35)}\n strokeDasharray=\"3 3\"\n strokeWidth={1}\n x1={(xScale(connectorStart.label) ?? plot.left) + xScale.bandwidth()}\n x2={bandLeft}\n y1={connectorY}\n y2={connectorY}\n />\n ) : null}\n <rect\n {...chartElementDataProps(0, index)}\n fill={fill}\n rx={2}\n ry={2}\n stroke={selected ? \"#64748b\" : darkenColor(fill, 0.22)}\n strokeWidth={selected ? 2 : 1}\n x={bandLeft}\n y={top}\n width={bandWidth}\n height={height}\n />\n {selected\n ? renderSelectionRectHandles(`waterfall-selection-${index}`, bandLeft, top, bandWidth, height)\n : null}\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={bandLeft + bandWidth * 0.5}\n y={plot.top + plot.height + 14}\n >\n {bar.label}\n </text>\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={bandLeft + bandWidth * 0.5}\n y={top - 6}\n >\n {formatTickValue(bar.end)}\n </text>\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderFunnelChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const stages = buildChartStages(chart)\n .map((stage) => ({ ...stage, value: Math.max(0, stage.value) }))\n .filter((stage) => stage.value > 0);\n if (stages.length === 0) {\n return null;\n }\n\n const plot = layout.plot;\n const maxValue = Math.max(...stages.map((stage) => stage.value));\n const sectionHeight = plot.height / stages.length;\n const centerX = plot.left + plot.width * 0.5;\n const labelColor = resolveChartTextColor(chart);\n\n return (\n <g>\n {stages.map((stage, index) => {\n const stageWidth = (stage.value / maxValue) * plot.width;\n const topY = plot.top + index * sectionHeight;\n const stageHeight = Math.max(6, sectionHeight - 2);\n const left = centerX - stageWidth * 0.5;\n const fill = stage.isSubtotal ? darkenColor(stage.color, 0.14) : stage.color;\n const labelFitsInside = stageWidth > 90;\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, 0, index);\n\n return (\n <g key={`funnel-stage-${index}`}>\n <rect\n {...chartElementDataProps(0, index)}\n fill={fill}\n height={stageHeight}\n rx={0}\n ry={0}\n stroke={selected ? \"#64748b\" : darkenColor(fill, 0.2)}\n strokeWidth={selected ? 2 : 1}\n width={stageWidth}\n x={left}\n y={topY}\n />\n {selected\n ? renderSelectionRectHandles(`funnel-selection-${index}`, left, topY, stageWidth, stageHeight)\n : null}\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor={labelFitsInside ? \"middle\" : \"start\"}\n x={labelFitsInside ? centerX : centerX + stageWidth * 0.5 + 8}\n y={topY + sectionHeight * 0.5}\n >\n {`${stage.label} ${formatTickValue(stage.value)}`}\n </text>\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderSunburstChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const hierarchyData = buildHierarchyData(chart);\n if (!hierarchyData) {\n return null;\n }\n\n const root = d3Hierarchy(hierarchyData)\n .sum((node) => node.children && node.children.length > 0 ? 0 : Math.max(0.0001, node.value ?? 0))\n .sort((left, right) => (right.value ?? 0) - (left.value ?? 0));\n const partitioned = d3Partition<ChartHierarchyDatum>()\n .size([Math.PI * 2, root.height + 1])(root);\n const plot = layout.plot;\n const radius = Math.max(24, Math.min(plot.width, plot.height) * 0.5);\n const holeRadius = radius * 0.16;\n const centerX = plot.left + plot.width * 0.5;\n const centerY = plot.top + plot.height * 0.5;\n const ringSpan = Math.max(1, partitioned.height || 1);\n const arcBuilder = d3Arc<HierarchyRectangularNode<ChartHierarchyDatum>>()\n .startAngle((node) => node.x0)\n .endAngle((node) => node.x1)\n .padAngle(0.005)\n .padRadius(radius)\n .innerRadius((node) => holeRadius + ((node.y0 - 1) / ringSpan) * (radius - holeRadius))\n .outerRadius((node) => holeRadius + ((node.y1 - 1) / ringSpan) * (radius - holeRadius) - 1);\n\n return (\n <g transform={`translate(${centerX}, ${centerY})`}>\n {partitioned.descendants().filter((node) => node.depth > 0).map((node, index) => {\n const path = arcBuilder(node);\n if (!path) {\n return null;\n }\n const labelAngle = (node.x0 + node.x1) * 0.5 - Math.PI * 0.5;\n const labelRadius = holeRadius + (((node.y0 + node.y1) * 0.5 - 1) / ringSpan) * (radius - holeRadius);\n const labelX = Math.cos(labelAngle) * labelRadius;\n const labelY = Math.sin(labelAngle) * labelRadius;\n const arcSpan = node.x1 - node.x0;\n const canShowLabel = arcSpan * labelRadius > 26;\n const fill = resolveHierarchyNodeColor(chart, node);\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, 0, index);\n\n return (\n <g key={`sunburst-node-${index}`}>\n <path\n {...chartElementDataProps(0, index)}\n d={path}\n fill={fill}\n stroke={selected ? \"#64748b\" : palette.surface}\n strokeWidth={selected ? 2 : 1}\n />\n {selected\n ? renderSelectionPointHandles(`sunburst-selection-${index}`, [{ x: labelX, y: labelY }])\n : null}\n {canShowLabel ? (\n <text\n fill={darkenColor(fill, 0.65)}\n fontSize={9}\n textAnchor=\"middle\"\n transform={`translate(${labelX}, ${labelY}) rotate(${(labelAngle * 180) / Math.PI})`}\n >\n {node.data.name}\n </text>\n ) : null}\n </g>\n );\n })}\n <circle fill={chart.chartAreaFillColor ?? palette.surface} r={holeRadius - 2} />\n </g>\n );\n}\n\nfunction renderTreemapChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const hierarchyData = buildHierarchyData(chart);\n if (!hierarchyData) {\n return null;\n }\n\n const root = d3Hierarchy(hierarchyData)\n .sum((node) => node.children && node.children.length > 0 ? 0 : Math.max(0.0001, node.value ?? 0))\n .sort((left, right) => (right.value ?? 0) - (left.value ?? 0));\n const treemapRoot = d3Treemap<ChartHierarchyDatum>()\n .size([layout.plot.width, layout.plot.height])\n .paddingInner(2)\n .paddingOuter(1)\n .round(true)\n .tile(excelTreemapTile)(root);\n\n return (\n <g transform={`translate(${layout.plot.left}, ${layout.plot.top})`}>\n {treemapRoot.leaves().map((leaf, index) => {\n const fill = resolveTreemapNodeColor(chart, leaf);\n const width = Math.max(0, leaf.x1 - leaf.x0);\n const height = Math.max(0, leaf.y1 - leaf.y0);\n const canShowLabel = width > 48 && height > 22;\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, 0, index);\n\n return (\n <g key={`treemap-leaf-${index}`}>\n <rect\n {...chartElementDataProps(0, index)}\n fill={fill}\n rx={3}\n ry={3}\n stroke={selected ? \"#64748b\" : palette.surface}\n strokeWidth={selected ? 2 : 1}\n x={leaf.x0}\n y={leaf.y0}\n width={width}\n height={height}\n />\n {selected\n ? renderSelectionRectHandles(`treemap-selection-${index}`, leaf.x0, leaf.y0, width, height)\n : null}\n {canShowLabel ? (\n <>\n <text\n fill={darkenColor(fill, 0.68)}\n fontSize={10}\n fontWeight={600}\n x={leaf.x0 + 8}\n y={leaf.y0 + 14}\n >\n {leaf.data.name}\n </text>\n <text\n fill={darkenColor(fill, 0.54)}\n fontSize={9}\n x={leaf.x0 + 8}\n y={leaf.y0 + 28}\n >\n {formatTickValue(leaf.value ?? 0)}\n </text>\n </>\n ) : null}\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderBoxWhiskerChart(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, selectedChartElement?: XlsxChartElementSelection | null) {\n const visibleSeries = chart.series.filter((series) => series.hidden !== true);\n if (visibleSeries.length === 0) {\n return null;\n }\n\n const seriesStats = visibleSeries.map((series, index) => ({\n color: series.color ?? chartSeriesColor(chart, typeof series.formatIdx === \"number\" ? series.formatIdx : index),\n label: normalizeCategoryLabel(series.name) || `Series ${index + 1}`,\n lineColor: series.lineColor ?? series.color ?? chartSeriesColor(chart, typeof series.formatIdx === \"number\" ? series.formatIdx : index),\n series,\n stats: computeBoxWhiskerStats(series),\n visibility: resolveBoxWhiskerVisibility(series)\n })).filter((entry): entry is {\n color: string;\n label: string;\n lineColor: string;\n series: XlsxChartSeries;\n stats: BoxWhiskerStats;\n visibility: ReturnType<typeof resolveBoxWhiskerVisibility>;\n } => entry.stats != null);\n\n if (seriesStats.length === 0) {\n return null;\n }\n\n const allValues = seriesStats.flatMap((entry) => [\n entry.stats.min,\n entry.stats.lowerWhisker,\n entry.stats.q1,\n entry.stats.median,\n entry.stats.q3,\n entry.stats.upperWhisker,\n entry.stats.max\n ]);\n const minValue = Math.min(...allValues);\n const maxValue = Math.max(...allValues);\n const valueDomain = resolveAxisDomainWithChartOverrides(chart.valueAxis, minValue, maxValue, false);\n const yScale = scaleLinear()\n .domain([valueDomain.min, valueDomain.max])\n .range([layout.plot.top + layout.plot.height, layout.plot.top]);\n const xScale = scalePoint<number>()\n .domain(seriesStats.map((_, index) => index))\n .range([layout.plot.left + 24, layout.plot.left + layout.plot.width - 24]);\n const gap = seriesStats.length > 1\n ? Math.abs((xScale(1) ?? 0) - (xScale(0) ?? 0))\n : layout.plot.width * 0.5;\n const boxWidth = clamp(gap * 0.34, 20, 54);\n const capWidth = Math.max(8, boxWidth * 0.52);\n const axisColor = chart.axisLineColor ?? chart.chartAreaBorderColor ?? palette.border;\n const labelColor = resolveChartAxisTextColor(chart);\n const meanLinePoints = seriesStats\n .filter((entry) => entry.visibility.meanLine)\n .map((entry, index) => `${xScale(index) ?? layout.plot.left},${yScale(entry.stats.mean)}`);\n\n return (\n <g>\n {valueDomain.ticks.map((tick, index) => {\n const y = yScale(tick);\n return (\n <g key={`box-whisker-grid-${index}`}>\n <line\n stroke={lightenColor(axisColor, 0.22)}\n strokeWidth={0.8}\n x1={layout.plot.left}\n x2={layout.plot.left + layout.plot.width}\n y1={y}\n y2={y}\n />\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"end\"\n x={layout.plot.left - 6}\n y={y + 3}\n >\n {formatTickValue(tick)}\n </text>\n </g>\n );\n })}\n <line\n stroke={axisColor}\n strokeWidth={1}\n x1={layout.plot.left}\n x2={layout.plot.left}\n y1={layout.plot.top}\n y2={layout.plot.top + layout.plot.height}\n />\n <line\n stroke={axisColor}\n strokeWidth={1}\n x1={layout.plot.left}\n x2={layout.plot.left + layout.plot.width}\n y1={layout.plot.top + layout.plot.height}\n y2={layout.plot.top + layout.plot.height}\n />\n {meanLinePoints.length >= 2 ? (\n <polyline\n fill=\"none\"\n points={meanLinePoints.join(\" \")}\n stroke={darkenColor(axisColor, 0.2)}\n strokeDasharray=\"4 3\"\n strokeWidth={1}\n />\n ) : null}\n {seriesStats.map((entry, index) => {\n const x = xScale(index) ?? layout.plot.left;\n const boxTop = yScale(entry.stats.q3);\n const boxBottom = yScale(entry.stats.q1);\n const medianY = yScale(entry.stats.median);\n const lowerWhiskerY = yScale(entry.stats.lowerWhisker);\n const upperWhiskerY = yScale(entry.stats.upperWhisker);\n const meanY = yScale(entry.stats.mean);\n const visiblePoints = entry.visibility.nonoutliers\n ? entry.stats.visiblePoints\n : [];\n const outliers = entry.visibility.outliers\n ? entry.stats.outliers\n : [];\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, index, index);\n\n return (\n <g {...chartElementDataProps(index)} key={`box-whisker-series-${index}`}>\n <line\n stroke={entry.lineColor}\n strokeWidth={1.5}\n x1={x}\n x2={x}\n y1={upperWhiskerY}\n y2={boxTop}\n />\n <line\n stroke={entry.lineColor}\n strokeWidth={1.5}\n x1={x}\n x2={x}\n y1={boxBottom}\n y2={lowerWhiskerY}\n />\n <line\n stroke={entry.lineColor}\n strokeWidth={1.5}\n x1={x - capWidth * 0.5}\n x2={x + capWidth * 0.5}\n y1={upperWhiskerY}\n y2={upperWhiskerY}\n />\n <line\n stroke={entry.lineColor}\n strokeWidth={1.5}\n x1={x - capWidth * 0.5}\n x2={x + capWidth * 0.5}\n y1={lowerWhiskerY}\n y2={lowerWhiskerY}\n />\n <rect\n {...chartElementDataProps(index, index)}\n fill={lightenColor(entry.color, 0.35)}\n fillOpacity={0.72}\n height={Math.max(1, boxBottom - boxTop)}\n stroke={selected ? \"#64748b\" : entry.lineColor}\n strokeWidth={selected ? 2 : 1.5}\n width={boxWidth}\n x={x - boxWidth * 0.5}\n y={boxTop}\n />\n {selected\n ? renderSelectionRectHandles(\n `box-whisker-selection-${index}`,\n x - boxWidth * 0.5,\n boxTop,\n boxWidth,\n Math.max(1, boxBottom - boxTop)\n )\n : null}\n <line\n stroke={darkenColor(entry.lineColor, 0.15)}\n strokeWidth={2}\n x1={x - boxWidth * 0.5}\n x2={x + boxWidth * 0.5}\n y1={medianY}\n y2={medianY}\n />\n {entry.visibility.meanMarker ? (\n <>\n <line\n stroke={darkenColor(entry.lineColor, 0.18)}\n strokeWidth={1.2}\n x1={x - 4}\n x2={x + 4}\n y1={meanY - 4}\n y2={meanY + 4}\n />\n <line\n stroke={darkenColor(entry.lineColor, 0.18)}\n strokeWidth={1.2}\n x1={x - 4}\n x2={x + 4}\n y1={meanY + 4}\n y2={meanY - 4}\n />\n </>\n ) : null}\n {visiblePoints.map((value, pointIndex) => {\n const y = yScale(value);\n const jitter = ((pointIndex % 7) - 3) * (boxWidth / 16);\n return (\n <circle\n {...chartElementDataProps(index, pointIndex)}\n key={`box-whisker-visible-${index}-${pointIndex}`}\n cx={x + jitter}\n cy={y}\n fill={entry.color}\n fillOpacity={0.45}\n r={2}\n stroke=\"none\"\n />\n );\n })}\n {outliers.map((value, pointIndex) => {\n const y = yScale(value);\n return (\n <circle\n {...chartElementDataProps(index, pointIndex)}\n key={`box-whisker-outlier-${index}-${pointIndex}`}\n cx={x}\n cy={y}\n fill=\"#ffffff\"\n r={3}\n stroke={entry.lineColor}\n strokeWidth={1.2}\n />\n );\n })}\n <text\n fill={labelColor}\n fontSize={10}\n textAnchor=\"middle\"\n x={x}\n y={layout.plot.top + layout.plot.height + 14}\n >\n {entry.label}\n </text>\n </g>\n );\n })}\n </g>\n );\n}\n\nfunction renderRegionMapChart(\n chart: XlsxChart,\n palette: ChartRendererPalette,\n layout: ChartLayout,\n selectedChartElement: XlsxChartElementSelection | null | undefined,\n { geoIdentity, geoMercator, geoNaturalEarth1, geoPath, resolveRegionMapFeatureSet, resolveRegionMapFeature, getRegionMapBaseFeatures }: RegionMapResources\n) {\n const primarySeriesIndex = Math.max(0, chart.series.findIndex((series) => series.hidden !== true));\n const primarySeries = chart.series[primarySeriesIndex] ?? null;\n if (!primarySeries) {\n return null;\n }\n\n const labels = getCategoryLabels(chart);\n const layoutProperties = resolveRegionMapLayoutProperties(primarySeries);\n const geography = layoutProperties?.geography && typeof layoutProperties.geography === \"object\"\n ? layoutProperties.geography as Record<string, unknown>\n : null;\n const featureSet = resolveRegionMapFeatureSet(labels, geography);\n const viewedRegionType = typeof geography?.viewedRegionType === \"string\"\n ? geography.viewedRegionType\n : null;\n const projectionType = typeof geography?.projectionType === \"string\"\n ? geography.projectionType\n : null;\n const projection = featureSet === \"us-state\"\n ? geoIdentity()\n : projectionType === \"miller\"\n ? geoMercator()\n : geoNaturalEarth1();\n const availableFeatures = getRegionMapBaseFeatures(featureSet);\n const categoricalValues = resolveRegionMapColorStrings(primarySeries);\n const categoricalColorByLabel = categoricalValues\n ? new Map(\n Array.from(new Set(categoricalValues.filter(Boolean))).map((value, index) => [\n value,\n chartPointColor(chart, index, primarySeriesIndex)\n ])\n )\n : null;\n const entries = labels.map((label, index) => {\n const feature = resolveRegionMapFeature(label, featureSet);\n const value = safeNumber(primarySeries.values[index]);\n const colorLabel = categoricalValues?.[index] || null;\n return {\n colorLabel,\n feature,\n key: normalizeCategoryLabel(label),\n label: normalizeCategoryLabel(label),\n value\n };\n }).filter((entry) => entry.feature != null && (entry.value != null || entry.colorLabel != null)) as Array<{\n colorLabel: string | null;\n feature: RegionMapFeature;\n key: string;\n label: string;\n value: number | null;\n }>;\n const fitToMatchedData = entries.length > 0 && (viewedRegionType === \"dataOnly\" || entries.length === 1);\n const fitFeatures = fitToMatchedData\n ? entries.map((entry) => entry.feature)\n : availableFeatures;\n projection.fitExtent(\n [\n [layout.plot.left + 8, layout.plot.top + 8],\n [layout.plot.left + layout.plot.width - 8, layout.plot.top + layout.plot.height - 8]\n ],\n {\n type: \"FeatureCollection\",\n features: fitFeatures\n } satisfies FeatureCollection<Geometry, { name?: string }>\n );\n const path = geoPath(projection);\n const baseFeatures = fitToMatchedData\n ? fitFeatures\n : availableFeatures;\n const noDataFill = resolveRegionMapNoDataColor(chart, primarySeriesIndex);\n const outlineColor = chart.chartAreaBorderColor && chart.chartAreaBorderColor !== \"transparent\"\n ? chart.chartAreaBorderColor\n : darkenColor(noDataFill, 0.22);\n const numericEntryValues = primarySeries.values\n .map(safeNumber)\n .filter((value): value is number => typeof value === \"number\" && Number.isFinite(value));\n const minValue = numericEntryValues.length > 0 ? Math.min(...numericEntryValues) : 0;\n const maxValue = numericEntryValues.length > 0 ? Math.max(...numericEntryValues) : 1;\n const showRegionLabels = layoutProperties?.regionLabelLayout !== \"none\";\n\n return (\n <g>\n {baseFeatures.map((feature, index) => {\n const d = path(feature);\n if (!d) {\n return null;\n }\n return (\n <path\n d={d}\n fill={noDataFill}\n key={`region-map-base-${feature.id ?? \"feature\"}-${index}`}\n stroke={outlineColor}\n strokeLinejoin=\"round\"\n strokeWidth={0.6}\n />\n );\n })}\n {entries.map((entry, index) => {\n const d = path(entry.feature);\n if (!d) {\n return null;\n }\n const fill = entry.value != null\n ? (() => {\n const ratio = maxValue <= minValue ? 1 : (entry.value - minValue) / Math.max(1e-6, maxValue - minValue);\n return resolveRegionMapValueColor(chart, primarySeriesIndex, ratio);\n })()\n : categoricalColorByLabel?.get(entry.colorLabel ?? \"\") ?? resolveRegionMapDataColor(chart, primarySeriesIndex);\n const selected = isSelectedChartPointOrSeries(selectedChartElement, chart.id, primarySeriesIndex, index);\n const centroid = path.centroid(entry.feature);\n const canShowSelectionDot = Number.isFinite(centroid[0]) && Number.isFinite(centroid[1]);\n return (\n <React.Fragment key={`region-map-value-${entry.key || index}`}>\n <path\n {...chartElementDataProps(primarySeriesIndex, index)}\n d={d}\n fill={fill}\n stroke={selected ? \"#64748b\" : darkenColor(fill, 0.18)}\n strokeLinejoin=\"round\"\n strokeWidth={selected ? 1.8 : 0.85}\n />\n {selected && canShowSelectionDot\n ? renderSelectionPointHandles(`region-map-selection-${index}`, [{ x: centroid[0], y: centroid[1] }])\n : null}\n </React.Fragment>\n );\n })}\n {showRegionLabels\n ? entries.map((entry, index) => {\n const bounds = path.bounds(entry.feature);\n const [[x0, y0], [x1, y1]] = bounds;\n const width = x1 - x0;\n const height = y1 - y0;\n if (!Number.isFinite(width) || !Number.isFinite(height) || width < 26 || height < 12) {\n return null;\n }\n const centroid = path.centroid(entry.feature);\n if (!Number.isFinite(centroid[0]) || !Number.isFinite(centroid[1])) {\n return null;\n }\n return (\n <text\n fill={resolveChartTextColor(chart)}\n fontSize={9}\n fontWeight={600}\n key={`region-map-label-${entry.key || index}`}\n textAnchor=\"middle\"\n x={centroid[0]}\n y={centroid[1]}\n >\n {truncateSvgText(entry.label, Math.max(28, width - 4), 9)}\n </text>\n );\n })\n : null}\n </g>\n );\n}\n\nfunction renderUnsupported(chart: XlsxChart, palette: ChartRendererPalette, layout: ChartLayout, chartType: string) {\n return (\n <g>\n <rect\n fill={lightenColor(chart.chartAreaFillColor ?? palette.surface, 0.02)}\n height={layout.plot.height}\n stroke={lightenColor(chart.axisLineColor ?? palette.border, 0.2)}\n strokeDasharray=\"3 3\"\n width={layout.plot.width}\n x={layout.plot.left}\n y={layout.plot.top}\n />\n <text\n fill={resolveChartMutedTextColor(chart)}\n fontSize={11}\n textAnchor=\"middle\"\n x={layout.plot.left + layout.plot.width / 2}\n y={layout.plot.top + layout.plot.height / 2}\n >\n {`Unsupported chart type: ${chartType}`}\n </text>\n </g>\n );\n}\n\nfunction renderChartPlot(\n chart: XlsxChart,\n palette: ChartRendererPalette,\n layout: ChartLayout,\n chartType: string,\n selectedChartElement?: XlsxChartElementSelection | null\n) {\n if (isComboChart(chart)) {\n return renderComboChart(chart, palette, layout, selectedChartElement) ?? renderUnsupported(chart, palette, layout, \"Combo\");\n }\n if (\n chartType === \"ColumnClustered\"\n || chartType === \"ColumnStacked\"\n || chartType === \"ColumnPercentStacked\"\n || chartType === \"BarClustered\"\n || chartType === \"BarStacked\"\n || chartType === \"BarPercentStacked\"\n ) {\n return renderBarChart(chart, palette, layout, chartType, selectedChartElement);\n }\n if (\n chartType === \"Line\"\n || chartType === \"LineStacked\"\n || chartType === \"LinePercentStacked\"\n || chartType === \"Area\"\n || chartType === \"AreaStacked\"\n || chartType === \"AreaPercentStacked\"\n ) {\n return renderLineOrAreaChart(chart, palette, layout, chartType, selectedChartElement);\n }\n if (chartType === \"Scatter\") {\n return renderScatterChart(chart, palette, layout, false, selectedChartElement);\n }\n if (chartType === \"ScatterLines\") {\n return renderScatterChart(chart, palette, layout, false, selectedChartElement);\n }\n if (chartType === \"ScatterSmooth\") {\n return renderScatterChart(chart, palette, layout, true, selectedChartElement);\n }\n if (chartType === \"Bubble\") {\n return renderBubbleChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Radar\") {\n return renderRadarChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Pie\" || chartType === \"Pie3D\" || chartType === \"PieExploded\" || chartType === \"Doughnut\") {\n return renderPieChart(chart, palette, layout, chartType, selectedChartElement);\n }\n if (chartType === \"BarOfPie\") {\n return renderBarOfPieChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Surface\") {\n return renderSurfaceChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Stock\") {\n return renderStockChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Waterfall\") {\n return renderWaterfallChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Funnel\") {\n return renderFunnelChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"BoxWhisker\") {\n return renderBoxWhiskerChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Sunburst\") {\n return renderSunburstChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"Treemap\") {\n return renderTreemapChart(chart, palette, layout, selectedChartElement);\n }\n if (chartType === \"RegionMap\") {\n return <RegionMapPlot chart={chart} layout={layout} palette={palette} selectedChartElement={selectedChartElement} />;\n }\n return renderUnsupported(chart, palette, layout, chartType);\n}\n\nexport const MemoChartSvg = React.memo(function MemoChartSvg({\n chart,\n onChartElementDoubleClick,\n onChartElementPointerDown,\n palette,\n rect,\n selectedChartElement\n}: ChartSvgProps) {\n const renderChartType = normalizeRenderableChartType(chart);\n const legendItems = getLegendItems(chart, renderChartType, palette);\n const layout = buildLayout(chart, rect, legendItems);\n const chartRaw = chart.raw && typeof chart.raw === \"object\" ? chart.raw as Record<string, unknown> : null;\n const explicitNoFill = chartRaw?.chartAreaNoFill === true || chartRaw?.plotAreaNoFill === true;\n const background = chart.chartAreaFillColor ?? (explicitNoFill ? \"transparent\" : \"#ffffff\");\n const borderColor = chart.chartAreaBorderColor ?? \"transparent\";\n const normalizedBackground = background.trim().toLowerCase();\n const normalizedBorderColor = borderColor.trim().toLowerCase();\n const hideBackgroundRect = normalizedBackground === \"transparent\" && normalizedBorderColor === \"transparent\";\n const fontFamily = buildChartFontFamily(chart.fontFamily);\n const { handlePointerDown, handleDoubleClick } = useChartEvents({\n chart, onChartElementPointerDown, onChartElementDoubleClick, selectedChartElement\n });\n\n const renderSvgChart = (plot: React.ReactNode) => (\n <svg\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n onDoubleClick={handleDoubleClick}\n onPointerDown={handlePointerDown}\n role=\"img\"\n style={{ display: \"block\", fontFamily, height: \"100%\", pointerEvents: \"auto\", width: \"100%\" }}\n viewBox={`0 0 ${layout.width} ${layout.height}`}\n >\n {hideBackgroundRect\n ? null\n : <rect fill={background} height={layout.height} stroke={borderColor} strokeWidth={1} width={layout.width} x={0} y={0} />}\n {renderTitle(chart, layout, palette)}\n {renderLegend(chart, layout, palette)}\n {plot}\n </svg>\n );\n if (renderChartType === \"Surface\") {\n const surfacePlot = renderSurfaceChart(chart, palette, layout, selectedChartElement);\n return (\n <SurfaceChartComposite\n loadingFallback={renderSvgChart(surfacePlot)}\n background={background}\n borderColor={borderColor}\n chart={chart}\n fallback={surfacePlot}\n fontFamily={fontFamily}\n layout={layout}\n onDoubleClick={handleDoubleClick}\n onPointerDown={handlePointerDown}\n overlay={\n <>\n {renderSurfaceHitOverlay(chart, layout, selectedChartElement)}\n {renderSurfaceAxes(chart, layout)}\n {renderTitle(chart, layout, palette)}\n {renderLegend(chart, layout, palette)}\n </>\n }\n palette={palette}\n />\n );\n }\n\n return renderSvgChart(renderChartPlot(chart, palette, layout, renderChartType, selectedChartElement));\n}, (prev, next) => (\n prev.chart === next.chart\n && prev.onChartElementDoubleClick === next.onChartElementDoubleClick\n && prev.onChartElementPointerDown === next.onChartElementPointerDown\n && prev.palette === next.palette\n && prev.rect.height === next.rect.height\n && prev.rect.width === next.rect.width\n && prev.rect.left === next.rect.left\n && prev.rect.top === next.rect.top\n && prev.selectedChartElement === next.selectedChartElement\n));\n"],"mappings":"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","names":["series","startCenter","endCenter","startAxisA","endAxisA","startAxisB","endAxisB","backStartArc","backEndArc","frontStartArc","frontEndArc","backWallPath","frontWallPath","endCapPath","positive","negative","_","start","end","faces","MemoChartSvg"]}
|