@extend-ai/react-xlsx 0.20.2 → 0.20.4
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-IQ4UDS5M.js +209 -0
- package/dist/browser-IQ4UDS5M.js.map +1 -0
- package/dist/browser-S6E2BS5S.cjs +212 -0
- package/dist/browser-S6E2BS5S.cjs.map +1 -0
- package/dist/{chart-renderer-F355CYSE.js → chart-renderer-4HTNG3SX.js} +94 -180
- package/dist/chart-renderer-4HTNG3SX.js.map +1 -0
- package/dist/{chart-renderer-7DTEXXG6.js → chart-renderer-5IN2B3YS.js} +94 -180
- package/dist/chart-renderer-5IN2B3YS.js.map +1 -0
- package/dist/{chart-renderer-LGW4EH4M.cjs → chart-renderer-6CWSXOSC.cjs} +324 -410
- package/dist/chart-renderer-6CWSXOSC.cjs.map +1 -0
- package/dist/{chart-renderer-3QDNTMRN.cjs → chart-renderer-H4BLRO5P.cjs} +324 -410
- package/dist/chart-renderer-H4BLRO5P.cjs.map +1 -0
- package/dist/chunk-GX5LAENE.cjs +108 -0
- package/dist/chunk-GX5LAENE.cjs.map +1 -0
- package/dist/{chunk-GXYDJPHM.js → chunk-H62SZBEY.js} +401 -132
- package/dist/chunk-H62SZBEY.js.map +1 -0
- package/dist/{chunk-3LMOGW6A.js → chunk-IISMO3AX.js} +30 -15
- package/dist/chunk-IISMO3AX.js.map +1 -0
- package/dist/{chunk-ZJ76CZAL.cjs → chunk-KQSUAIZD.cjs} +1168 -899
- package/dist/chunk-KQSUAIZD.cjs.map +1 -0
- package/dist/{chunk-IYGZTLDY.js → chunk-LZXL5E4W.js} +16 -7
- package/dist/chunk-LZXL5E4W.js.map +1 -0
- package/dist/chunk-MYN475JP.cjs +32 -0
- package/dist/chunk-MYN475JP.cjs.map +1 -0
- package/dist/{chunk-D2UA4P6N.cjs → chunk-NAYVSTCX.cjs} +22 -9
- package/dist/chunk-NAYVSTCX.cjs.map +1 -0
- package/dist/chunk-PK3MCNDK.js +32 -0
- package/dist/chunk-PK3MCNDK.js.map +1 -0
- package/dist/full-3FSPB3R6.cjs +212 -0
- package/dist/full-3FSPB3R6.cjs.map +1 -0
- package/dist/full-GPY27HZY.js +209 -0
- package/dist/full-GPY27HZY.js.map +1 -0
- package/dist/index.cjs +834 -602
- 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 +347 -115
- 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 +3 -3
- package/dist/internal.d.cts +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +2 -2
- package/dist/office_charts_bg.wasm +0 -0
- package/dist/office_charts_full_bg.wasm +0 -0
- package/dist/payload-B55ZKNYO.js +6 -0
- package/dist/payload-B55ZKNYO.js.map +1 -0
- package/dist/payload-E2KM77DZ.js +6 -0
- package/dist/payload-E2KM77DZ.js.map +1 -0
- package/dist/payload-K4S5RLJN.cjs +8 -0
- package/dist/payload-K4S5RLJN.cjs.map +1 -0
- package/dist/payload-PL4646XV.cjs +8 -0
- package/dist/payload-PL4646XV.cjs.map +1 -0
- package/dist/rust-office-charts-LICENSE.txt +21 -0
- package/dist/{shared-chart-3STFRVWT.js → shared-chart-5KTGZEZ5.js} +38 -20
- package/dist/shared-chart-5KTGZEZ5.js.map +1 -0
- package/dist/{shared-chart-DVC5S2P6.cjs → shared-chart-ACR4M7BP.cjs} +37 -20
- package/dist/shared-chart-ACR4M7BP.cjs.map +1 -0
- package/dist/{shared-chart-BFQNYOIQ.js → shared-chart-EGN5JTKT.js} +37 -20
- package/dist/shared-chart-EGN5JTKT.js.map +1 -0
- package/dist/{shared-chart-MFQSQG4K.cjs → shared-chart-XAV7VA45.cjs} +37 -19
- package/dist/shared-chart-XAV7VA45.cjs.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 +3 -3
- package/dist/vanilla.d.cts +2 -2
- package/dist/vanilla.d.ts +2 -2
- package/dist/vanilla.js +2 -2
- package/dist/xlsx-worker.js +298 -92
- package/dist/xlsx-worker.js.map +1 -1
- package/package.json +7 -15
- package/dist/chart-renderer-3QDNTMRN.cjs.map +0 -1
- package/dist/chart-renderer-7DTEXXG6.js.map +0 -1
- package/dist/chart-renderer-F355CYSE.js.map +0 -1
- package/dist/chart-renderer-LGW4EH4M.cjs.map +0 -1
- package/dist/chunk-3LMOGW6A.js.map +0 -1
- package/dist/chunk-D2UA4P6N.cjs.map +0 -1
- package/dist/chunk-GXYDJPHM.js.map +0 -1
- package/dist/chunk-IYGZTLDY.js.map +0 -1
- package/dist/chunk-OCF75R75.cjs +0 -90
- package/dist/chunk-OCF75R75.cjs.map +0 -1
- package/dist/chunk-ZJ76CZAL.cjs.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/shared-chart.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { OfficeCharts } from \"@extend-ai/rust-office-charts\";\nimport { renderSelectionRectHandles, useChartEvents } from \"./chart-interaction\";\nimport type { ChartSvgProps } from \"./chart-renderer\";\nimport type { XlsxChart, XlsxChartRenderSource, XlsxChartElementSelection } from \"./types\";\n\nconst svgNamespace = \"http://www.w3.org/2000/svg\";\nconst allowedElements = new Set([\n \"svg\", \"g\", \"defs\", \"clipPath\", \"rect\", \"circle\", \"ellipse\", \"path\", \"line\", \"polyline\", \"polygon\",\n \"text\", \"tspan\", \"linearGradient\", \"radialGradient\", \"stop\", \"pattern\"\n]);\nconst plainAttributes = new Set([\n \"x\", \"y\", \"width\", \"height\", \"x1\", \"x2\", \"y1\", \"y2\", \"cx\", \"cy\", \"fx\", \"fy\", \"r\", \"rx\", \"ry\", \"fr\",\n \"viewBox\", \"transform\", \"d\", \"points\", \"font-family\", \"font-weight\", \"font-size\", \"text-anchor\",\n \"dominant-baseline\", \"stroke-linecap\", \"stroke-linejoin\", \"stroke-width\", \"stroke-dasharray\",\n \"opacity\", \"fill-opacity\", \"stroke-opacity\", \"fill-rule\", \"shape-rendering\", \"offset\", \"stop-opacity\",\n \"gradientUnits\", \"gradientTransform\", \"patternUnits\", \"patternContentUnits\",\n \"data-chart-kind\", \"data-chart-series\", \"data-chart-point\", \"data-chart-x\", \"data-chart-y\"\n]);\n\nfunction safeChartSvg(markup: string, prefix: string) {\n const svg = new DOMParser().parseFromString(markup, \"image/svg+xml\").documentElement;\n if (svg.localName !== \"svg\" || svg.namespaceURI !== svgNamespace) return null;\n\n // Only local paint servers and inert geometry can enter the document.\n for (const node of [svg, ...Array.from(svg.querySelectorAll(\"*\"))]) {\n if (node.namespaceURI !== svgNamespace || !allowedElements.has(node.localName)) return null;\n for (const { name, value } of Array.from(node.attributes)) {\n if (plainAttributes.has(name) || name === \"xmlns\") continue;\n if (name === \"id\" && /^[\\w-]+$/.test(value)) {\n node.setAttribute(name, prefix + value);\n continue;\n }\n if (name === \"href\" && /^(linearGradient|radialGradient)$/.test(node.localName) && /^#[\\w-]+$/.test(value)) {\n node.setAttribute(name, \"#\" + prefix + value.slice(1));\n continue;\n }\n if ([\"fill\", \"stroke\", \"stop-color\", \"clip-path\"].includes(name)) {\n const local = /^url\\(#([\\w-]+)\\)$/.exec(value);\n if (local) {\n node.setAttribute(name, \"url(#\" + prefix + local[1] + \")\");\n continue;\n }\n if (/^(?:#[\\da-f]{3,8}|[a-z]+)$/i.test(value)) continue;\n }\n node.removeAttribute(name);\n }\n\n if (node.hasAttribute(\"data-chart-series\")) {\n node.setAttribute(\"data-xlsx-chart-series-index\", node.getAttribute(\"data-chart-series\")!);\n const point = node.getAttribute(\"data-chart-point\");\n if (point != null) node.setAttribute(\"data-xlsx-chart-point-index\", point);\n const kind = node.getAttribute(\"data-chart-kind\");\n if (kind === \"bar\") node.setAttribute(\"data-xlsx-chart-selection-mode\", \"seriesFirst\");\n if (kind === \"legendEntry\") node.setAttribute(\"data-xlsx-chart-element-kind\", kind);\n const style = (node as SVGElement).style;\n style.cursor = \"pointer\";\n style.pointerEvents = \"all\";\n }\n }\n return svg;\n}\n\nfunction renderSharedChart(renderer: OfficeCharts, chart: XlsxChart, source: XlsxChartRenderSource, width: number, height: number, prefix: string) {\n try {\n const svg = renderer.renderChart(source.xml, {\n themeColors: source.themeColors,\n themeOverrideXml: source.themeOverrideXml,\n styleXml: source.styleXml,\n colorStyleXml: source.colorStyleXml,\n width, height,\n interactive: true,\n spreadsheetDefaults: true,\n fontFamily: chart.fontFamily,\n data: {\n title: chart.title,\n series: chart.series.map((series) => ({\n chartType: source.kind,\n name: series.name,\n points: Array.from({ length: Math.max(series.values.length, series.categories.length) }, (_, index) => {\n const value = series.values[index];\n const label = series.categories[index];\n return {\n index,\n value: value == null ? null : String(value),\n categories: series.categories.length || series.categoriesRef?.formula\n ? [{ level: 0, label: label == null ? \"\" : String(label) }]\n : []\n };\n })\n }))\n }\n });\n return svg ? safeChartSvg(svg, prefix) : null;\n } catch {\n return null;\n }\n}\n\nfunction selectionHandles(svg: Element, chartId: string, selected: XlsxChartElementSelection | null | undefined) {\n if (!selected || selected.chartId !== chartId || selected.kind === \"chart\") return null;\n return Array.from(svg.querySelectorAll(\"[data-chart-point]\")).map((node, index) => {\n if (Number(node.getAttribute(\"data-chart-series\")) !== selected.seriesIndex\n || (selected.kind === \"point\" && Number(node.getAttribute(\"data-chart-point\")) !== selected.pointIndex)) return null;\n if (node.getAttribute(\"data-chart-kind\") === \"bar\") {\n return renderSelectionRectHandles(String(index), Number(node.getAttribute(\"x\")), Number(node.getAttribute(\"y\")),\n Number(node.getAttribute(\"width\")), Number(node.getAttribute(\"height\")));\n }\n if (!node.hasAttribute(\"data-chart-x\") || !node.hasAttribute(\"data-chart-y\")) return null;\n return renderSelectionRectHandles(String(index), Number(node.getAttribute(\"data-chart-x\")) - 4,\n Number(node.getAttribute(\"data-chart-y\")) - 4, 8, 8);\n });\n}\n\nexport function SharedChartSvg(props: ChartSvgProps & {\n source: XlsxChartRenderSource;\n renderer: OfficeCharts;\n fallback: React.ReactNode;\n}) {\n const { chart, rect, renderer, source, selectedChartElement, fallback } = props;\n const id = React.useId();\n const width = Math.max(1, rect.width);\n const height = Math.max(1, rect.height);\n const svg = React.useMemo(() => renderSharedChart(renderer, chart, source, width, height,\n \"oc-\" + id.replace(/[^\\w-]/g, \"\") + \"-\"), [renderer, chart, source, width, height, id]);\n const graphics = React.useRef<SVGGElement>(null);\n React.useLayoutEffect(() => {\n if (graphics.current && svg) graphics.current.replaceChildren(svg);\n }, [svg]);\n const handles = React.useMemo(() => svg && selectionHandles(svg, chart.id, selectedChartElement),\n [svg, chart.id, selectedChartElement]);\n const { handlePointerDown, handleDoubleClick } = useChartEvents(props);\n if (!svg) return <>{fallback}</>;\n return (\n <svg\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n data-xlsx-chart-renderer=\"office-charts\"\n onDoubleClick={handleDoubleClick}\n onPointerDown={handlePointerDown}\n role=\"img\"\n style={{ display: \"block\", height: \"100%\", pointerEvents: \"auto\", width: \"100%\" }}\n viewBox={`0 0 ${width} ${height}`}\n >\n <g ref={graphics} />\n {handles}\n </svg>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared-chart.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { OfficeCharts } from \"@extend-ai/rust-office-charts\";\nimport { renderSelectionRectHandles, useChartEvents } from \"./chart-interaction\";\nimport type { ChartSvgProps } from \"./chart-renderer\";\nimport type { XlsxChart, XlsxChartRenderSource, XlsxChartElementSelection } from \"./types\";\n\nconst svgNamespace = \"http://www.w3.org/2000/svg\";\nconst allowedElements = new Set([\n \"svg\", \"g\", \"defs\", \"clipPath\", \"rect\", \"circle\", \"ellipse\", \"path\", \"line\", \"polyline\", \"polygon\",\n \"text\", \"tspan\", \"linearGradient\", \"radialGradient\", \"stop\", \"pattern\"\n]);\nconst plainAttributes = new Set([\n \"x\", \"y\", \"width\", \"height\", \"x1\", \"x2\", \"y1\", \"y2\", \"cx\", \"cy\", \"fx\", \"fy\", \"r\", \"rx\", \"ry\", \"fr\",\n \"viewBox\", \"transform\", \"d\", \"points\", \"font-family\", \"font-weight\", \"font-size\", \"text-anchor\",\n \"dominant-baseline\", \"stroke-linecap\", \"stroke-linejoin\", \"stroke-width\", \"stroke-dasharray\",\n \"opacity\", \"fill-opacity\", \"stroke-opacity\", \"fill-rule\", \"shape-rendering\", \"offset\", \"stop-opacity\",\n \"gradientUnits\", \"gradientTransform\", \"patternUnits\", \"patternContentUnits\",\n \"data-chart-kind\", \"data-chart-series\", \"data-chart-point\", \"data-chart-x\", \"data-chart-y\"\n]);\n\nfunction safeChartSvg(markup: string, prefix: string) {\n const svg = new DOMParser().parseFromString(markup, \"image/svg+xml\").documentElement;\n if (svg.localName !== \"svg\" || svg.namespaceURI !== svgNamespace) return null;\n\n // Only local paint servers and inert geometry can enter the document.\n for (const node of [svg, ...Array.from(svg.querySelectorAll(\"*\"))]) {\n if (node.namespaceURI !== svgNamespace || !allowedElements.has(node.localName)) return null;\n for (const { name, value } of Array.from(node.attributes)) {\n if (plainAttributes.has(name) || name === \"xmlns\") continue;\n if (name === \"id\" && /^[\\w-]+$/.test(value)) {\n node.setAttribute(name, prefix + value);\n continue;\n }\n if (name === \"href\" && /^(linearGradient|radialGradient)$/.test(node.localName) && /^#[\\w-]+$/.test(value)) {\n node.setAttribute(name, \"#\" + prefix + value.slice(1));\n continue;\n }\n if ([\"fill\", \"stroke\", \"stop-color\", \"clip-path\"].includes(name)) {\n const local = /^url\\(#([\\w-]+)\\)$/.exec(value);\n if (local) {\n node.setAttribute(name, \"url(#\" + prefix + local[1] + \")\");\n continue;\n }\n if (/^(?:#[\\da-f]{3,8}|[a-z]+)$/i.test(value)) continue;\n }\n node.removeAttribute(name);\n }\n\n if (node.hasAttribute(\"data-chart-series\")) {\n node.setAttribute(\"data-xlsx-chart-series-index\", node.getAttribute(\"data-chart-series\")!);\n const point = node.getAttribute(\"data-chart-point\");\n if (point != null) node.setAttribute(\"data-xlsx-chart-point-index\", point);\n const kind = node.getAttribute(\"data-chart-kind\");\n if (kind === \"bar\") node.setAttribute(\"data-xlsx-chart-selection-mode\", \"seriesFirst\");\n if (kind === \"legendEntry\") node.setAttribute(\"data-xlsx-chart-element-kind\", kind);\n const style = (node as SVGElement).style;\n style.cursor = \"pointer\";\n style.pointerEvents = \"all\";\n }\n }\n return svg;\n}\n\nfunction renderSharedChart(renderer: OfficeCharts, chart: XlsxChart, source: XlsxChartRenderSource, width: number, height: number, prefix: string) {\n try {\n const svg = renderer.renderChart(source.xml, {\n themeColors: source.themeColors,\n themeOverrideXml: source.themeOverrideXml,\n styleXml: source.styleXml,\n colorStyleXml: source.colorStyleXml,\n width, height,\n interactive: true,\n spreadsheetDefaults: true,\n fontFamily: chart.fontFamily,\n data: {\n title: chart.title,\n series: chart.series.map((series) => ({\n chartType: source.kind,\n name: series.name,\n points: Array.from({ length: Math.max(series.values.length, series.categories.length) }, (_, index) => {\n const value = series.values[index];\n const label = series.categories[index];\n return {\n index,\n value: value == null ? null : String(value),\n categories: series.categories.length || series.categoriesRef?.formula\n ? [{ level: 0, label: label == null ? \"\" : String(label) }]\n : []\n };\n })\n }))\n }\n });\n return svg ? safeChartSvg(svg, prefix) : null;\n } catch {\n return null;\n }\n}\n\nfunction selectionHandles(svg: Element, chartId: string, selected: XlsxChartElementSelection | null | undefined) {\n if (!selected || selected.chartId !== chartId || selected.kind === \"chart\") return null;\n return Array.from(svg.querySelectorAll(\"[data-chart-point]\")).map((node, index) => {\n if (Number(node.getAttribute(\"data-chart-series\")) !== selected.seriesIndex\n || (selected.kind === \"point\" && Number(node.getAttribute(\"data-chart-point\")) !== selected.pointIndex)) return null;\n if (node.getAttribute(\"data-chart-kind\") === \"bar\") {\n return renderSelectionRectHandles(String(index), Number(node.getAttribute(\"x\")), Number(node.getAttribute(\"y\")),\n Number(node.getAttribute(\"width\")), Number(node.getAttribute(\"height\")));\n }\n if (!node.hasAttribute(\"data-chart-x\") || !node.hasAttribute(\"data-chart-y\")) return null;\n return renderSelectionRectHandles(String(index), Number(node.getAttribute(\"data-chart-x\")) - 4,\n Number(node.getAttribute(\"data-chart-y\")) - 4, 8, 8);\n });\n}\n\nexport function SharedChartSvg(props: ChartSvgProps & {\n source: XlsxChartRenderSource;\n renderer: OfficeCharts;\n fallback: React.ReactNode;\n}) {\n const { chart, rect, renderer, source, selectedChartElement, fallback } = props;\n const id = React.useId();\n const width = Math.max(1, rect.width);\n const height = Math.max(1, rect.height);\n const svg = React.useMemo(() => renderSharedChart(renderer, chart, source, width, height,\n \"oc-\" + id.replace(/[^\\w-]/g, \"\") + \"-\"), [renderer, chart, source, width, height, id]);\n const graphics = React.useRef<SVGGElement>(null);\n React.useLayoutEffect(() => {\n if (graphics.current && svg) graphics.current.replaceChildren(svg);\n }, [svg]);\n const handles = React.useMemo(() => svg && selectionHandles(svg, chart.id, selectedChartElement),\n [svg, chart.id, selectedChartElement]);\n const { handlePointerDown, handleDoubleClick } = useChartEvents(props);\n if (!svg) return <>{fallback}</>;\n return (\n <svg\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n data-xlsx-chart-renderer=\"office-charts\"\n onDoubleClick={handleDoubleClick}\n onPointerDown={handlePointerDown}\n role=\"img\"\n style={{ display: \"block\", height: \"100%\", pointerEvents: \"auto\", width: \"100%\" }}\n viewBox={`0 0 ${width} ${height}`}\n >\n <g ref={graphics} />\n {handles}\n </svg>\n );\n}\n"],"mappings":"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","names":["_"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/shared-chart-DVC5S2P6.cjs","../src/shared-chart.tsx"],"names":["_"],"mappings":"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","file":"/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/shared-chart-DVC5S2P6.cjs","sourcesContent":[null,"import * as React from \"react\";\nimport type { OfficeCharts } from \"@extend-ai/rust-office-charts\";\nimport { renderSelectionRectHandles, useChartEvents } from \"./chart-interaction\";\nimport type { ChartSvgProps } from \"./chart-renderer\";\nimport type { XlsxChart, XlsxChartRenderSource, XlsxChartElementSelection } from \"./types\";\n\nconst svgNamespace = \"http://www.w3.org/2000/svg\";\nconst allowedElements = new Set([\n \"svg\", \"g\", \"defs\", \"clipPath\", \"rect\", \"circle\", \"ellipse\", \"path\", \"line\", \"polyline\", \"polygon\",\n \"text\", \"tspan\", \"linearGradient\", \"radialGradient\", \"stop\", \"pattern\"\n]);\nconst plainAttributes = new Set([\n \"x\", \"y\", \"width\", \"height\", \"x1\", \"x2\", \"y1\", \"y2\", \"cx\", \"cy\", \"fx\", \"fy\", \"r\", \"rx\", \"ry\", \"fr\",\n \"viewBox\", \"transform\", \"d\", \"points\", \"font-family\", \"font-weight\", \"font-size\", \"text-anchor\",\n \"dominant-baseline\", \"stroke-linecap\", \"stroke-linejoin\", \"stroke-width\", \"stroke-dasharray\",\n \"opacity\", \"fill-opacity\", \"stroke-opacity\", \"fill-rule\", \"shape-rendering\", \"offset\", \"stop-opacity\",\n \"gradientUnits\", \"gradientTransform\", \"patternUnits\", \"patternContentUnits\",\n \"data-chart-kind\", \"data-chart-series\", \"data-chart-point\", \"data-chart-x\", \"data-chart-y\"\n]);\n\nfunction safeChartSvg(markup: string, prefix: string) {\n const svg = new DOMParser().parseFromString(markup, \"image/svg+xml\").documentElement;\n if (svg.localName !== \"svg\" || svg.namespaceURI !== svgNamespace) return null;\n\n // Only local paint servers and inert geometry can enter the document.\n for (const node of [svg, ...Array.from(svg.querySelectorAll(\"*\"))]) {\n if (node.namespaceURI !== svgNamespace || !allowedElements.has(node.localName)) return null;\n for (const { name, value } of Array.from(node.attributes)) {\n if (plainAttributes.has(name) || name === \"xmlns\") continue;\n if (name === \"id\" && /^[\\w-]+$/.test(value)) {\n node.setAttribute(name, prefix + value);\n continue;\n }\n if (name === \"href\" && /^(linearGradient|radialGradient)$/.test(node.localName) && /^#[\\w-]+$/.test(value)) {\n node.setAttribute(name, \"#\" + prefix + value.slice(1));\n continue;\n }\n if ([\"fill\", \"stroke\", \"stop-color\", \"clip-path\"].includes(name)) {\n const local = /^url\\(#([\\w-]+)\\)$/.exec(value);\n if (local) {\n node.setAttribute(name, \"url(#\" + prefix + local[1] + \")\");\n continue;\n }\n if (/^(?:#[\\da-f]{3,8}|[a-z]+)$/i.test(value)) continue;\n }\n node.removeAttribute(name);\n }\n\n if (node.hasAttribute(\"data-chart-series\")) {\n node.setAttribute(\"data-xlsx-chart-series-index\", node.getAttribute(\"data-chart-series\")!);\n const point = node.getAttribute(\"data-chart-point\");\n if (point != null) node.setAttribute(\"data-xlsx-chart-point-index\", point);\n const kind = node.getAttribute(\"data-chart-kind\");\n if (kind === \"bar\") node.setAttribute(\"data-xlsx-chart-selection-mode\", \"seriesFirst\");\n if (kind === \"legendEntry\") node.setAttribute(\"data-xlsx-chart-element-kind\", kind);\n const style = (node as SVGElement).style;\n style.cursor = \"pointer\";\n style.pointerEvents = \"all\";\n }\n }\n return svg;\n}\n\nfunction renderSharedChart(renderer: OfficeCharts, chart: XlsxChart, source: XlsxChartRenderSource, width: number, height: number, prefix: string) {\n try {\n const svg = renderer.renderChart(source.xml, {\n themeColors: source.themeColors,\n themeOverrideXml: source.themeOverrideXml,\n styleXml: source.styleXml,\n colorStyleXml: source.colorStyleXml,\n width, height,\n interactive: true,\n spreadsheetDefaults: true,\n fontFamily: chart.fontFamily,\n data: {\n title: chart.title,\n series: chart.series.map((series) => ({\n chartType: source.kind,\n name: series.name,\n points: Array.from({ length: Math.max(series.values.length, series.categories.length) }, (_, index) => {\n const value = series.values[index];\n const label = series.categories[index];\n return {\n index,\n value: value == null ? null : String(value),\n categories: series.categories.length || series.categoriesRef?.formula\n ? [{ level: 0, label: label == null ? \"\" : String(label) }]\n : []\n };\n })\n }))\n }\n });\n return svg ? safeChartSvg(svg, prefix) : null;\n } catch {\n return null;\n }\n}\n\nfunction selectionHandles(svg: Element, chartId: string, selected: XlsxChartElementSelection | null | undefined) {\n if (!selected || selected.chartId !== chartId || selected.kind === \"chart\") return null;\n return Array.from(svg.querySelectorAll(\"[data-chart-point]\")).map((node, index) => {\n if (Number(node.getAttribute(\"data-chart-series\")) !== selected.seriesIndex\n || (selected.kind === \"point\" && Number(node.getAttribute(\"data-chart-point\")) !== selected.pointIndex)) return null;\n if (node.getAttribute(\"data-chart-kind\") === \"bar\") {\n return renderSelectionRectHandles(String(index), Number(node.getAttribute(\"x\")), Number(node.getAttribute(\"y\")),\n Number(node.getAttribute(\"width\")), Number(node.getAttribute(\"height\")));\n }\n if (!node.hasAttribute(\"data-chart-x\") || !node.hasAttribute(\"data-chart-y\")) return null;\n return renderSelectionRectHandles(String(index), Number(node.getAttribute(\"data-chart-x\")) - 4,\n Number(node.getAttribute(\"data-chart-y\")) - 4, 8, 8);\n });\n}\n\nexport function SharedChartSvg(props: ChartSvgProps & {\n source: XlsxChartRenderSource;\n renderer: OfficeCharts;\n fallback: React.ReactNode;\n}) {\n const { chart, rect, renderer, source, selectedChartElement, fallback } = props;\n const id = React.useId();\n const width = Math.max(1, rect.width);\n const height = Math.max(1, rect.height);\n const svg = React.useMemo(() => renderSharedChart(renderer, chart, source, width, height,\n \"oc-\" + id.replace(/[^\\w-]/g, \"\") + \"-\"), [renderer, chart, source, width, height, id]);\n const graphics = React.useRef<SVGGElement>(null);\n React.useLayoutEffect(() => {\n if (graphics.current && svg) graphics.current.replaceChildren(svg);\n }, [svg]);\n const handles = React.useMemo(() => svg && selectionHandles(svg, chart.id, selectedChartElement),\n [svg, chart.id, selectedChartElement]);\n const { handlePointerDown, handleDoubleClick } = useChartEvents(props);\n if (!svg) return <>{fallback}</>;\n return (\n <svg\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n data-xlsx-chart-renderer=\"office-charts\"\n onDoubleClick={handleDoubleClick}\n onPointerDown={handlePointerDown}\n role=\"img\"\n style={{ display: \"block\", height: \"100%\", pointerEvents: \"auto\", width: \"100%\" }}\n viewBox={`0 0 ${width} ${height}`}\n >\n <g ref={graphics} />\n {handles}\n </svg>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/shared-chart-MFQSQG4K.cjs","../src/shared-chart.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/shared-chart-MFQSQG4K.cjs","sourcesContent":[null,"import * as React from \"react\";\nimport type { OfficeCharts } from \"@extend-ai/rust-office-charts\";\nimport { renderSelectionRectHandles, useChartEvents } from \"./chart-interaction\";\nimport type { ChartSvgProps } from \"./chart-renderer\";\nimport type { XlsxChart, XlsxChartRenderSource, XlsxChartElementSelection } from \"./types\";\n\nconst svgNamespace = \"http://www.w3.org/2000/svg\";\nconst allowedElements = new Set([\n \"svg\", \"g\", \"defs\", \"clipPath\", \"rect\", \"circle\", \"ellipse\", \"path\", \"line\", \"polyline\", \"polygon\",\n \"text\", \"tspan\", \"linearGradient\", \"radialGradient\", \"stop\", \"pattern\"\n]);\nconst plainAttributes = new Set([\n \"x\", \"y\", \"width\", \"height\", \"x1\", \"x2\", \"y1\", \"y2\", \"cx\", \"cy\", \"fx\", \"fy\", \"r\", \"rx\", \"ry\", \"fr\",\n \"viewBox\", \"transform\", \"d\", \"points\", \"font-family\", \"font-weight\", \"font-size\", \"text-anchor\",\n \"dominant-baseline\", \"stroke-linecap\", \"stroke-linejoin\", \"stroke-width\", \"stroke-dasharray\",\n \"opacity\", \"fill-opacity\", \"stroke-opacity\", \"fill-rule\", \"shape-rendering\", \"offset\", \"stop-opacity\",\n \"gradientUnits\", \"gradientTransform\", \"patternUnits\", \"patternContentUnits\",\n \"data-chart-kind\", \"data-chart-series\", \"data-chart-point\", \"data-chart-x\", \"data-chart-y\"\n]);\n\nfunction safeChartSvg(markup: string, prefix: string) {\n const svg = new DOMParser().parseFromString(markup, \"image/svg+xml\").documentElement;\n if (svg.localName !== \"svg\" || svg.namespaceURI !== svgNamespace) return null;\n\n // Only local paint servers and inert geometry can enter the document.\n for (const node of [svg, ...Array.from(svg.querySelectorAll(\"*\"))]) {\n if (node.namespaceURI !== svgNamespace || !allowedElements.has(node.localName)) return null;\n for (const { name, value } of Array.from(node.attributes)) {\n if (plainAttributes.has(name) || name === \"xmlns\") continue;\n if (name === \"id\" && /^[\\w-]+$/.test(value)) {\n node.setAttribute(name, prefix + value);\n continue;\n }\n if (name === \"href\" && /^(linearGradient|radialGradient)$/.test(node.localName) && /^#[\\w-]+$/.test(value)) {\n node.setAttribute(name, \"#\" + prefix + value.slice(1));\n continue;\n }\n if ([\"fill\", \"stroke\", \"stop-color\", \"clip-path\"].includes(name)) {\n const local = /^url\\(#([\\w-]+)\\)$/.exec(value);\n if (local) {\n node.setAttribute(name, \"url(#\" + prefix + local[1] + \")\");\n continue;\n }\n if (/^(?:#[\\da-f]{3,8}|[a-z]+)$/i.test(value)) continue;\n }\n node.removeAttribute(name);\n }\n\n if (node.hasAttribute(\"data-chart-series\")) {\n node.setAttribute(\"data-xlsx-chart-series-index\", node.getAttribute(\"data-chart-series\")!);\n const point = node.getAttribute(\"data-chart-point\");\n if (point != null) node.setAttribute(\"data-xlsx-chart-point-index\", point);\n const kind = node.getAttribute(\"data-chart-kind\");\n if (kind === \"bar\") node.setAttribute(\"data-xlsx-chart-selection-mode\", \"seriesFirst\");\n if (kind === \"legendEntry\") node.setAttribute(\"data-xlsx-chart-element-kind\", kind);\n const style = (node as SVGElement).style;\n style.cursor = \"pointer\";\n style.pointerEvents = \"all\";\n }\n }\n return svg;\n}\n\nfunction renderSharedChart(renderer: OfficeCharts, chart: XlsxChart, source: XlsxChartRenderSource, width: number, height: number, prefix: string) {\n try {\n const svg = renderer.renderChart(source.xml, {\n themeColors: source.themeColors,\n themeOverrideXml: source.themeOverrideXml,\n styleXml: source.styleXml,\n colorStyleXml: source.colorStyleXml,\n width, height,\n interactive: true,\n spreadsheetDefaults: true,\n fontFamily: chart.fontFamily,\n data: {\n title: chart.title,\n series: chart.series.map((series) => ({\n chartType: source.kind,\n name: series.name,\n points: Array.from({ length: Math.max(series.values.length, series.categories.length) }, (_, index) => {\n const value = series.values[index];\n const label = series.categories[index];\n return {\n index,\n value: value == null ? null : String(value),\n categories: series.categories.length || series.categoriesRef?.formula\n ? [{ level: 0, label: label == null ? \"\" : String(label) }]\n : []\n };\n })\n }))\n }\n });\n return svg ? safeChartSvg(svg, prefix) : null;\n } catch {\n return null;\n }\n}\n\nfunction selectionHandles(svg: Element, chartId: string, selected: XlsxChartElementSelection | null | undefined) {\n if (!selected || selected.chartId !== chartId || selected.kind === \"chart\") return null;\n return Array.from(svg.querySelectorAll(\"[data-chart-point]\")).map((node, index) => {\n if (Number(node.getAttribute(\"data-chart-series\")) !== selected.seriesIndex\n || (selected.kind === \"point\" && Number(node.getAttribute(\"data-chart-point\")) !== selected.pointIndex)) return null;\n if (node.getAttribute(\"data-chart-kind\") === \"bar\") {\n return renderSelectionRectHandles(String(index), Number(node.getAttribute(\"x\")), Number(node.getAttribute(\"y\")),\n Number(node.getAttribute(\"width\")), Number(node.getAttribute(\"height\")));\n }\n if (!node.hasAttribute(\"data-chart-x\") || !node.hasAttribute(\"data-chart-y\")) return null;\n return renderSelectionRectHandles(String(index), Number(node.getAttribute(\"data-chart-x\")) - 4,\n Number(node.getAttribute(\"data-chart-y\")) - 4, 8, 8);\n });\n}\n\nexport function SharedChartSvg(props: ChartSvgProps & {\n source: XlsxChartRenderSource;\n renderer: OfficeCharts;\n fallback: React.ReactNode;\n}) {\n const { chart, rect, renderer, source, selectedChartElement, fallback } = props;\n const id = React.useId();\n const width = Math.max(1, rect.width);\n const height = Math.max(1, rect.height);\n const svg = React.useMemo(() => renderSharedChart(renderer, chart, source, width, height,\n \"oc-\" + id.replace(/[^\\w-]/g, \"\") + \"-\"), [renderer, chart, source, width, height, id]);\n const graphics = React.useRef<SVGGElement>(null);\n React.useLayoutEffect(() => {\n if (graphics.current && svg) graphics.current.replaceChildren(svg);\n }, [svg]);\n const handles = React.useMemo(() => svg && selectionHandles(svg, chart.id, selectedChartElement),\n [svg, chart.id, selectedChartElement]);\n const { handlePointerDown, handleDoubleClick } = useChartEvents(props);\n if (!svg) return <>{fallback}</>;\n return (\n <svg\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n data-xlsx-chart-renderer=\"office-charts\"\n onDoubleClick={handleDoubleClick}\n onPointerDown={handlePointerDown}\n role=\"img\"\n style={{ display: \"block\", height: \"100%\", pointerEvents: \"auto\", width: \"100%\" }}\n viewBox={`0 0 ${width} ${height}`}\n >\n <g ref={graphics} />\n {handles}\n </svg>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/surface-regl.tsx"],"sourcesContent":["import { getBuiltinChartColor, getBuiltinChartSurfaceLine, resolveBuiltinChartColor } from \"./builtin-chart-styles\";\nimport createREGL from \"regl\";\nimport * as React from \"react\";\nimport { shadeSurfaceMatteColor, surfaceNormal, transformSurfaceNormal } from \"./surface-lighting\";\nimport { clipSurfaceBand, groupSurfaceBandEdges, normalizeSurfaceValue, surfaceDataRatios, triangulateSurfaceQuad } from \"./surface-geometry\";\nimport type { XlsxChart } from \"./types\";\n\ntype SurfacePalette = {\n border: string;\n mutedText: string;\n surface: string;\n text: string;\n};\n\ntype SurfaceLayout = {\n height: number;\n plot: {\n height: number;\n left: number;\n top: number;\n width: number;\n };\n width: number;\n};\n\ntype SurfaceCompositeProps = {\n background: string;\n borderColor: string;\n chart: XlsxChart;\n fontFamily: string;\n layout: SurfaceLayout;\n onDoubleClick?: React.MouseEventHandler<SVGSVGElement>;\n onPointerDown?: React.PointerEventHandler<SVGSVGElement>;\n overlay: React.ReactNode;\n palette: SurfacePalette;\n fallback: React.ReactNode;\n};\n\ntype SurfaceDomain = {\n maxValue: number;\n minValue: number;\n safeMax: number;\n ticks: number[];\n};\n\ntype SurfacePoint3D = {\n depth: number;\n worldX: number;\n worldY: number;\n worldZ: number;\n x: number;\n y: number;\n};\n\ntype SurfaceVertex = {\n bandColor: string;\n point: SurfacePoint3D;\n value: number;\n};\n\ntype SolidSurfaceTriangle = {\n color: string;\n points: [SurfacePoint3D, SurfacePoint3D, SurfacePoint3D];\n};\n\ntype SurfaceScene = {\n fillColors: Float32Array;\n fillPositions: Float32Array;\n lineColors: Float32Array;\n linePositions: Float32Array;\n wallColors: Float32Array;\n wallPositions: Float32Array;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\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 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 = clamp(ratio, 0, 1);\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 resolveSurfaceBaseColor(chart: XlsxChart, palette: Pick<SurfacePalette, \"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 normalizeSurfaceRendererHexColor(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 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 normalizeSurfaceRendererHexColor(color);\n}\n\nfunction getSurfaceColorStops(chart: XlsxChart, palette: SurfacePalette) {\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 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 = Math.pow(10, Math.floor(Math.log10(Math.max(roughStep, 1e-6))));\n const normalized = roughStep / magnitude;\n const niceStep = 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 : niceStep * 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 resolveSurfaceBandPaletteColor(chart: XlsxChart, palette: SurfacePalette, 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 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 resolveSurfaceBandColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n return resolveSurfaceBandPaletteColor(chart, palette, domain, value);\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: SurfacePalette, 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 colorToRgba(color: string, alpha = 1) {\n if (color === \"transparent\") return [0, 0, 0, 0] as const;\n const rgb = parseRgbColor(color);\n if (!rgb) {\n return [0.1, 0.1, 0.1, alpha] as const;\n }\n return [rgb.red / 255, rgb.green / 255, rgb.blue / 255, alpha] as const;\n}\n\nfunction normalizeSurfaceX(column: number, cols: number) {\n return cols <= 1 ? 0 : ((column / (cols - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceY(row: number, rows: number) {\n return rows <= 1 ? 0 : ((row / (rows - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceZ(value: number, domain: SurfaceDomain, heightExtent: number, axis?: XlsxChart[\"valueAxis\"]) {\n return -(normalizeSurfaceValue(value, domain.minValue, domain.safeMax, axis) - 0.5) * heightExtent;\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 rightAngleAxes: boolean\n) {\n if (rightAngleAxes) {\n return { depth: z, x: x + z * Math.sin(rotYRad), y: y - z * Math.sin(rotXRad) };\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 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.18, 1 + z2 * (0.24 + perspectiveStrength * 0.5))\n : 1;\n return {\n depth: z2,\n x: x1 * perspective,\n y: y1 * perspective\n };\n}\n\nfunction withProjectedDepth(point: SurfacePoint3D, depth: number): SurfacePoint3D {\n return {\n ...point,\n depth\n };\n}\n\nfunction nudgeProjectedDepth(point: SurfacePoint3D, delta: number): SurfacePoint3D {\n return {\n ...point,\n depth: point.depth + delta\n };\n}\n\nfunction isContourSurfaceChart(chart: XlsxChart) {\n const rawChartType = chart.raw && typeof chart.raw === \"object\" && typeof chart.raw.xmlChartType === \"string\"\n ? chart.raw.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 buildSurfaceMesh(chart: XlsxChart, palette: SurfacePalette, layout: SurfaceLayout): SurfaceScene | null {\n const rows = chart.series.length;\n const cols = chart.series.reduce((max, series) => Math.max(max, series.values.length), 0);\n if (rows < 2 || cols < 2) {\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 isWireframe = chart.wireframe === true;\n const fillVertices: SurfaceVertex[] = [];\n const wallTriangles: SolidSurfaceTriangle[] = [];\n const contourLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const meshLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const rotX = (chart.view3d?.rotX ?? 25) * (Math.PI / 180);\n const rotY = (chart.view3d?.rotY ?? 30) * (Math.PI / 180);\n const usePerspective = !isContour && chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp((chart.view3d?.perspective ?? (usePerspective ? 30 : 0)) / 100, 0, 1);\n const ratios = surfaceDataRatios(rows, cols, chart.valueAxis?.crossBetween !== \"midCat\", chart.view3d?.heightPercent, chart.view3d?.depthPercent, layout);\n const depthScale = ratios.depth;\n const heightExtent = 2 * ratios.height;\n const usesFlatMaterial = chart.surfaceMaterial === \"flat\";\n const wallLineColor = chart.valueAxis?.majorGridlineColor ?? chart.backWall?.lineColor ?? chart.sideWall?.lineColor ?? chart.floor?.lineColor ?? chart.axisLineColor ?? \"#a6a6a6\";\n const backWallFill = chart.backWall?.fillColor ?? \"#d9d9df\";\n const sideWallFill = chart.sideWall?.fillColor ?? \"#d5d7dc\";\n const floorFill = chart.floor?.fillColor ?? \"#d0d2d8\";\n const projectPoint = (column: number, row: number, value: number): SurfacePoint3D => {\n const worldX = normalizeSurfaceX(column, cols);\n if (isContour) {\n return {\n depth: 0,\n worldX,\n worldY: normalizeSurfaceY(row, rows),\n worldZ: 0,\n x: worldX,\n y: normalizeSurfaceY(row, rows)\n };\n }\n const worldY = normalizeSurfaceZ(value, domain, heightExtent, chart.valueAxis);\n const worldZ = normalizeSurfaceY(row, rows) * depthScale;\n const projected = projectCartesian3dPoint(worldX, worldY, worldZ, rotX, rotY, usePerspective, perspectiveStrength, chart.view3d?.rAngAx !== false);\n return {\n depth: projected.depth,\n worldX,\n worldY,\n worldZ,\n x: projected.x,\n y: projected.y\n };\n };\n const addWallQuad = (a: SurfacePoint3D, b: SurfacePoint3D, c: SurfacePoint3D, d: SurfacePoint3D, color: string) => {\n wallTriangles.push(\n { color, points: [a, b, c] },\n { color, points: [a, c, d] }\n );\n };\n const addMeshLine = (from: SurfacePoint3D, to: SurfacePoint3D, color: string) => {\n meshLines.push({ color, from, to });\n };\n\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 triangles = triangulateSurfaceQuad([\n { value: p00, x: columnIndex, y: rowIndex },\n { value: p10, x: columnIndex + 1, y: rowIndex },\n { value: p11, x: columnIndex + 1, y: rowIndex + 1 },\n { value: p01, x: columnIndex, y: rowIndex + 1 }\n ], chart.valueAxis);\n for (const triangle of triangles) {\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 bandColor = resolveSurfaceBandColor(chart, palette, domain, (lower + upper) / 2);\n if (!isWireframe && bandColor !== \"transparent\") {\n for (let index = 1; index < polygon.length - 1; index += 1) {\n for (const vertex of [polygon[0], polygon[index], polygon[index + 1]]) {\n const point = projectPoint(vertex.x, vertex.y, vertex.value);\n fillVertices.push({ bandColor, point: isContour ? withProjectedDepth(point, 0.08) : point, value: vertex.value });\n }\n }\n }\n for (const group of groupSurfaceBandEdges(polygon, triangle, band, lower, isWireframe)) {\n const edgeMidpoint = (domain.ticks[group.band] + domain.ticks[group.band + 1]) / 2;\n const color = resolveSurfaceWireframeColor(chart, palette, domain, edgeMidpoint);\n if (color !== \"transparent\") {\n for (const [from, to] of group.edges) {\n contourLines.push({ color, from: projectPoint(from.x, from.y, from.value), to: projectPoint(to.x, to.y, to.value) });\n }\n }\n }\n }\n }\n }\n }\n\n const columnSkip = Math.max(1, chart.categoryAxis?.tickMarkSkip ?? 1);\n const rowSkip = Math.max(1, chart.seriesAxis?.tickMarkSkip ?? 1);\n if (isContour) {\n const topLeft = withProjectedDepth(projectPoint(0, 0, domain.minValue), -0.12);\n const topRight = withProjectedDepth(projectPoint(cols - 1, 0, domain.minValue), -0.12);\n const bottomRight = withProjectedDepth(projectPoint(cols - 1, rows - 1, domain.minValue), -0.12);\n const bottomLeft = withProjectedDepth(projectPoint(0, rows - 1, domain.minValue), -0.12);\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(topLeft, topRight, bottomRight, bottomLeft, backWallFill);\n }\n for (let columnIndex = 0; columnIndex < cols; columnIndex += columnSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(columnIndex, 0, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(columnIndex, rows - 1, domain.minValue), 0.04),\n wallLineColor\n );\n }\n for (let rowIndex = 0; rowIndex < rows; rowIndex += rowSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(0, rowIndex, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(cols - 1, rowIndex, domain.minValue), 0.04),\n wallLineColor\n );\n }\n } else {\n const minPlaneValue = domain.minValue;\n const wallDepthOffset = 0;\n const backRow = chart.view3d?.rAngAx !== false || Math.cos(rotX) * Math.cos(rotY) >= 0 ? rows - 1 : 0;\n const sideColumn = Math.sin(rotY) >= 0 ? 0 : cols - 1;\n if (chart.floor?.hidden !== true && floorFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, rows - 1, minPlaneValue), wallDepthOffset),\n floorFill\n );\n }\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, backRow, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, backRow, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, backRow, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, backRow, minPlaneValue), wallDepthOffset),\n backWallFill\n );\n }\n if (chart.sideWall?.hidden !== true && sideWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(sideColumn, 0, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, 0, minPlaneValue), wallDepthOffset),\n sideWallFill\n );\n }\n for (const tick of chart.valueAxis?.majorGridlines ? domain.ticks : []) {\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, backRow, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, backRow, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(sideColumn, 0, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let columnIndex = 0; chart.categoryAxis?.majorGridlines && columnIndex < cols; columnIndex += columnSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, 0, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, rows - 1, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, backRow, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, backRow, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let rowIndex = 0; chart.seriesAxis?.majorGridlines && rowIndex < rows; rowIndex += rowSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, rowIndex, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(sideColumn, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(sideColumn, rowIndex, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n }\n\n const allPoints = [\n ...fillVertices.map((vertex) => vertex.point),\n ...wallTriangles.flatMap((triangle) => triangle.points),\n ...meshLines.flatMap((line) => [line.from, line.to]),\n ...contourLines.flatMap((line) => [line.from, line.to])\n ];\n if (allPoints.length === 0) {\n return null;\n }\n\n const minX = Math.min(...allPoints.map((point) => point.x));\n const maxX = Math.max(...allPoints.map((point) => point.x));\n const minY = Math.min(...allPoints.map((point) => point.y));\n const maxY = Math.max(...allPoints.map((point) => point.y));\n const minDepth = Math.min(...allPoints.map((point) => point.depth));\n const maxDepth = Math.max(...allPoints.map((point) => point.depth));\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 const toScreenX = (x: number) => centerX + (x - centerRawX) * scale;\n const toScreenY = (y: number) => centerY + (y - centerRawY) * scale;\n const toClipPoint = (point: SurfacePoint3D) => {\n const screenX = toScreenX(point.x);\n const screenY = toScreenY(point.y);\n return {\n x: (screenX / layout.width) * 2 - 1,\n y: 1 - (screenY / layout.height) * 2,\n z: clamp(((point.depth - minDepth) / Math.max(1e-6, maxDepth - minDepth)) * 2 - 1, -1, 1)\n };\n };\n\n const fillPositions: number[] = [];\n const fillColors: number[] = [];\n const wallPositions: number[] = [];\n const wallColors: number[] = [];\n for (const triangle of wallTriangles) {\n const world = triangle.points.map(point => ({ x: point.worldX, y: point.worldY, z: -point.worldZ }));\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 rgba = colorToRgba(usesFlatMaterial ? triangle.color : shadeSurfaceMatteColor(triangle.color, normal), 1);\n for (const point of triangle.points) {\n const clip = toClipPoint(point);\n wallPositions.push(clip.x, clip.y, clip.z);\n wallColors.push(rgba[0], rgba[1], rgba[2], rgba[3]);\n }\n }\n for (let index = 0; index < fillVertices.length; index += 3) {\n const left = fillVertices[index];\n const middle = fillVertices[index + 1];\n const right = fillVertices[index + 2];\n if (!left || !middle || !right) {\n continue;\n }\n const world = [left, middle, right].map(vertex => ({ x: vertex.point.worldX, y: vertex.point.worldY, z: -vertex.point.worldZ }));\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 shaded = colorToRgba(usesFlatMaterial ? left.bandColor : shadeSurfaceMatteColor(left.bandColor, normal), 1);\n [left, middle, right].forEach((vertex) => {\n const clip = toClipPoint(vertex.point);\n fillPositions.push(clip.x, clip.y, clip.z);\n fillColors.push(shaded[0], shaded[1], shaded[2], shaded[3]);\n });\n }\n\n const linePositions: number[] = [];\n const lineColors: number[] = [];\n meshLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z - 0.00001, to.x, to.y, to.z - 0.00001);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n contourLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z - 0.00001, to.x, to.y, to.z - 0.00001);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n\n return {\n fillColors: new Float32Array(fillColors),\n fillPositions: new Float32Array(fillPositions),\n lineColors: new Float32Array(lineColors),\n linePositions: new Float32Array(linePositions),\n wallColors: new Float32Array(wallColors),\n wallPositions: new Float32Array(wallPositions)\n };\n}\n\nexport const MemoSurfaceChartComposite = React.memo(function MemoSurfaceChartComposite({\n background,\n borderColor,\n chart,\n fontFamily,\n layout,\n onDoubleClick,\n onPointerDown,\n overlay,\n palette,\n fallback\n}: SurfaceCompositeProps) {\n const canvasRef = React.useRef<HTMLCanvasElement | null>(null);\n const [ready, setReady] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n const isContour = isContourSurfaceChart(chart);\n\n React.useEffect(() => {\n if (isContour) {\n setReady(false);\n setFailed(false);\n return;\n }\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n let cancelled = false;\n let reglInstance: ReturnType<typeof createREGL> | null = null;\n\n const drawSurface = () => {\n try {\n const scene = buildSurfaceMesh(chart, palette, layout);\n if (!scene) {\n if (!cancelled) {\n setFailed(true);\n setReady(false);\n }\n return;\n }\n const dpr = window.devicePixelRatio || 1;\n canvas.width = Math.max(1, Math.round(layout.width * dpr));\n canvas.height = Math.max(1, Math.round(layout.height * dpr));\n reglInstance = createREGL({\n attributes: {\n alpha: true,\n antialias: true,\n depth: true,\n premultipliedAlpha: true\n },\n canvas\n });\n const fillCommand = scene.fillPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.fillColors,\n position: scene.fillPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.fillPositions.length / 3,\n depth: {\n enable: true\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const wallCommand = scene.wallPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.wallColors,\n position: scene.wallPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.wallPositions.length / 3,\n depth: {\n enable: true,\n func: \"lequal\"\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const lineCommand = scene.linePositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.lineColors,\n position: scene.linePositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.linePositions.length / 3,\n depth: {\n enable: true,\n func: \"lequal\"\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n lineWidth: 1,\n primitive: \"lines\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n\n reglInstance.clear({ color: [0, 0, 0, 0], depth: 1 });\n wallCommand?.();\n fillCommand?.();\n lineCommand?.();\n if (!cancelled) {\n setReady(true);\n setFailed(false);\n }\n } catch {\n if (!cancelled) {\n setReady(false);\n setFailed(true);\n }\n }\n };\n\n setReady(false);\n setFailed(false);\n drawSurface();\n\n return () => {\n cancelled = true;\n reglInstance?.destroy();\n };\n }, [\n chart,\n isContour,\n layout,\n palette\n ]);\n\n const shouldRenderFallback = isContour || failed || !ready;\n\n return (\n <div\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n role=\"img\"\n style={{\n background,\n border: borderColor.trim().toLowerCase() === \"transparent\" ? \"none\" : `1px solid ${borderColor}`,\n boxSizing: \"border-box\",\n fontFamily,\n height: \"100%\",\n overflow: \"hidden\",\n pointerEvents: \"auto\",\n position: \"relative\",\n width: \"100%\"\n }}\n >\n <canvas\n ref={canvasRef}\n style={{\n display: shouldRenderFallback ? \"none\" : \"block\",\n height: \"100%\",\n inset: 0,\n position: \"absolute\",\n width: \"100%\"\n }}\n />\n <svg\n onDoubleClick={onDoubleClick}\n onPointerDown={onPointerDown}\n style={{ display: \"block\", height: \"100%\", inset: 0, position: \"absolute\", width: \"100%\" }}\n viewBox={`0 0 ${layout.width} ${layout.height}`}\n >\n {shouldRenderFallback ? fallback : null}\n {overlay}\n </svg>\n </div>\n );\n}, (prev, next) => (\n prev.chart === next.chart\n && prev.palette === next.palette\n && prev.background === next.background\n && prev.borderColor === next.borderColor\n && prev.fontFamily === next.fontFamily\n && prev.onDoubleClick === next.onDoubleClick\n && prev.onPointerDown === next.onPointerDown\n && prev.layout.width === next.layout.width\n && prev.layout.height === next.layout.height\n && prev.layout.plot.left === next.layout.plot.left\n && prev.layout.plot.top === next.layout.plot.top\n && prev.layout.plot.width === next.layout.plot.width\n && prev.layout.plot.height === next.layout.plot.height\n && prev.overlay === next.overlay\n && prev.fallback === next.fallback\n));\n"],"mappings":"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","names":["MemoSurfaceChartComposite"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/surface-regl-BBJ6OIKK.cjs","../src/surface-regl.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/surface-regl-BBJ6OIKK.cjs","sourcesContent":[null,"import { getBuiltinChartColor, getBuiltinChartSurfaceLine, resolveBuiltinChartColor } from \"./builtin-chart-styles\";\nimport createREGL from \"regl\";\nimport * as React from \"react\";\nimport { shadeSurfaceMatteColor, surfaceNormal, transformSurfaceNormal } from \"./surface-lighting\";\nimport { clipSurfaceBand, groupSurfaceBandEdges, normalizeSurfaceValue, surfaceDataRatios, triangulateSurfaceQuad } from \"./surface-geometry\";\nimport type { XlsxChart } from \"./types\";\n\ntype SurfacePalette = {\n border: string;\n mutedText: string;\n surface: string;\n text: string;\n};\n\ntype SurfaceLayout = {\n height: number;\n plot: {\n height: number;\n left: number;\n top: number;\n width: number;\n };\n width: number;\n};\n\ntype SurfaceCompositeProps = {\n background: string;\n borderColor: string;\n chart: XlsxChart;\n fontFamily: string;\n layout: SurfaceLayout;\n onDoubleClick?: React.MouseEventHandler<SVGSVGElement>;\n onPointerDown?: React.PointerEventHandler<SVGSVGElement>;\n overlay: React.ReactNode;\n palette: SurfacePalette;\n fallback: React.ReactNode;\n};\n\ntype SurfaceDomain = {\n maxValue: number;\n minValue: number;\n safeMax: number;\n ticks: number[];\n};\n\ntype SurfacePoint3D = {\n depth: number;\n worldX: number;\n worldY: number;\n worldZ: number;\n x: number;\n y: number;\n};\n\ntype SurfaceVertex = {\n bandColor: string;\n point: SurfacePoint3D;\n value: number;\n};\n\ntype SolidSurfaceTriangle = {\n color: string;\n points: [SurfacePoint3D, SurfacePoint3D, SurfacePoint3D];\n};\n\ntype SurfaceScene = {\n fillColors: Float32Array;\n fillPositions: Float32Array;\n lineColors: Float32Array;\n linePositions: Float32Array;\n wallColors: Float32Array;\n wallPositions: Float32Array;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\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 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 = clamp(ratio, 0, 1);\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 resolveSurfaceBaseColor(chart: XlsxChart, palette: Pick<SurfacePalette, \"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 normalizeSurfaceRendererHexColor(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 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 normalizeSurfaceRendererHexColor(color);\n}\n\nfunction getSurfaceColorStops(chart: XlsxChart, palette: SurfacePalette) {\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 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 = Math.pow(10, Math.floor(Math.log10(Math.max(roughStep, 1e-6))));\n const normalized = roughStep / magnitude;\n const niceStep = 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 : niceStep * 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 resolveSurfaceBandPaletteColor(chart: XlsxChart, palette: SurfacePalette, 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 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 resolveSurfaceBandColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n return resolveSurfaceBandPaletteColor(chart, palette, domain, value);\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: SurfacePalette, 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 colorToRgba(color: string, alpha = 1) {\n if (color === \"transparent\") return [0, 0, 0, 0] as const;\n const rgb = parseRgbColor(color);\n if (!rgb) {\n return [0.1, 0.1, 0.1, alpha] as const;\n }\n return [rgb.red / 255, rgb.green / 255, rgb.blue / 255, alpha] as const;\n}\n\nfunction normalizeSurfaceX(column: number, cols: number) {\n return cols <= 1 ? 0 : ((column / (cols - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceY(row: number, rows: number) {\n return rows <= 1 ? 0 : ((row / (rows - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceZ(value: number, domain: SurfaceDomain, heightExtent: number, axis?: XlsxChart[\"valueAxis\"]) {\n return -(normalizeSurfaceValue(value, domain.minValue, domain.safeMax, axis) - 0.5) * heightExtent;\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 rightAngleAxes: boolean\n) {\n if (rightAngleAxes) {\n return { depth: z, x: x + z * Math.sin(rotYRad), y: y - z * Math.sin(rotXRad) };\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 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.18, 1 + z2 * (0.24 + perspectiveStrength * 0.5))\n : 1;\n return {\n depth: z2,\n x: x1 * perspective,\n y: y1 * perspective\n };\n}\n\nfunction withProjectedDepth(point: SurfacePoint3D, depth: number): SurfacePoint3D {\n return {\n ...point,\n depth\n };\n}\n\nfunction nudgeProjectedDepth(point: SurfacePoint3D, delta: number): SurfacePoint3D {\n return {\n ...point,\n depth: point.depth + delta\n };\n}\n\nfunction isContourSurfaceChart(chart: XlsxChart) {\n const rawChartType = chart.raw && typeof chart.raw === \"object\" && typeof chart.raw.xmlChartType === \"string\"\n ? chart.raw.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 buildSurfaceMesh(chart: XlsxChart, palette: SurfacePalette, layout: SurfaceLayout): SurfaceScene | null {\n const rows = chart.series.length;\n const cols = chart.series.reduce((max, series) => Math.max(max, series.values.length), 0);\n if (rows < 2 || cols < 2) {\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 isWireframe = chart.wireframe === true;\n const fillVertices: SurfaceVertex[] = [];\n const wallTriangles: SolidSurfaceTriangle[] = [];\n const contourLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const meshLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const rotX = (chart.view3d?.rotX ?? 25) * (Math.PI / 180);\n const rotY = (chart.view3d?.rotY ?? 30) * (Math.PI / 180);\n const usePerspective = !isContour && chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp((chart.view3d?.perspective ?? (usePerspective ? 30 : 0)) / 100, 0, 1);\n const ratios = surfaceDataRatios(rows, cols, chart.valueAxis?.crossBetween !== \"midCat\", chart.view3d?.heightPercent, chart.view3d?.depthPercent, layout);\n const depthScale = ratios.depth;\n const heightExtent = 2 * ratios.height;\n const usesFlatMaterial = chart.surfaceMaterial === \"flat\";\n const wallLineColor = chart.valueAxis?.majorGridlineColor ?? chart.backWall?.lineColor ?? chart.sideWall?.lineColor ?? chart.floor?.lineColor ?? chart.axisLineColor ?? \"#a6a6a6\";\n const backWallFill = chart.backWall?.fillColor ?? \"#d9d9df\";\n const sideWallFill = chart.sideWall?.fillColor ?? \"#d5d7dc\";\n const floorFill = chart.floor?.fillColor ?? \"#d0d2d8\";\n const projectPoint = (column: number, row: number, value: number): SurfacePoint3D => {\n const worldX = normalizeSurfaceX(column, cols);\n if (isContour) {\n return {\n depth: 0,\n worldX,\n worldY: normalizeSurfaceY(row, rows),\n worldZ: 0,\n x: worldX,\n y: normalizeSurfaceY(row, rows)\n };\n }\n const worldY = normalizeSurfaceZ(value, domain, heightExtent, chart.valueAxis);\n const worldZ = normalizeSurfaceY(row, rows) * depthScale;\n const projected = projectCartesian3dPoint(worldX, worldY, worldZ, rotX, rotY, usePerspective, perspectiveStrength, chart.view3d?.rAngAx !== false);\n return {\n depth: projected.depth,\n worldX,\n worldY,\n worldZ,\n x: projected.x,\n y: projected.y\n };\n };\n const addWallQuad = (a: SurfacePoint3D, b: SurfacePoint3D, c: SurfacePoint3D, d: SurfacePoint3D, color: string) => {\n wallTriangles.push(\n { color, points: [a, b, c] },\n { color, points: [a, c, d] }\n );\n };\n const addMeshLine = (from: SurfacePoint3D, to: SurfacePoint3D, color: string) => {\n meshLines.push({ color, from, to });\n };\n\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 triangles = triangulateSurfaceQuad([\n { value: p00, x: columnIndex, y: rowIndex },\n { value: p10, x: columnIndex + 1, y: rowIndex },\n { value: p11, x: columnIndex + 1, y: rowIndex + 1 },\n { value: p01, x: columnIndex, y: rowIndex + 1 }\n ], chart.valueAxis);\n for (const triangle of triangles) {\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 bandColor = resolveSurfaceBandColor(chart, palette, domain, (lower + upper) / 2);\n if (!isWireframe && bandColor !== \"transparent\") {\n for (let index = 1; index < polygon.length - 1; index += 1) {\n for (const vertex of [polygon[0], polygon[index], polygon[index + 1]]) {\n const point = projectPoint(vertex.x, vertex.y, vertex.value);\n fillVertices.push({ bandColor, point: isContour ? withProjectedDepth(point, 0.08) : point, value: vertex.value });\n }\n }\n }\n for (const group of groupSurfaceBandEdges(polygon, triangle, band, lower, isWireframe)) {\n const edgeMidpoint = (domain.ticks[group.band] + domain.ticks[group.band + 1]) / 2;\n const color = resolveSurfaceWireframeColor(chart, palette, domain, edgeMidpoint);\n if (color !== \"transparent\") {\n for (const [from, to] of group.edges) {\n contourLines.push({ color, from: projectPoint(from.x, from.y, from.value), to: projectPoint(to.x, to.y, to.value) });\n }\n }\n }\n }\n }\n }\n }\n\n const columnSkip = Math.max(1, chart.categoryAxis?.tickMarkSkip ?? 1);\n const rowSkip = Math.max(1, chart.seriesAxis?.tickMarkSkip ?? 1);\n if (isContour) {\n const topLeft = withProjectedDepth(projectPoint(0, 0, domain.minValue), -0.12);\n const topRight = withProjectedDepth(projectPoint(cols - 1, 0, domain.minValue), -0.12);\n const bottomRight = withProjectedDepth(projectPoint(cols - 1, rows - 1, domain.minValue), -0.12);\n const bottomLeft = withProjectedDepth(projectPoint(0, rows - 1, domain.minValue), -0.12);\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(topLeft, topRight, bottomRight, bottomLeft, backWallFill);\n }\n for (let columnIndex = 0; columnIndex < cols; columnIndex += columnSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(columnIndex, 0, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(columnIndex, rows - 1, domain.minValue), 0.04),\n wallLineColor\n );\n }\n for (let rowIndex = 0; rowIndex < rows; rowIndex += rowSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(0, rowIndex, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(cols - 1, rowIndex, domain.minValue), 0.04),\n wallLineColor\n );\n }\n } else {\n const minPlaneValue = domain.minValue;\n const wallDepthOffset = 0;\n const backRow = chart.view3d?.rAngAx !== false || Math.cos(rotX) * Math.cos(rotY) >= 0 ? rows - 1 : 0;\n const sideColumn = Math.sin(rotY) >= 0 ? 0 : cols - 1;\n if (chart.floor?.hidden !== true && floorFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, rows - 1, minPlaneValue), wallDepthOffset),\n floorFill\n );\n }\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, backRow, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, backRow, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, backRow, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, backRow, minPlaneValue), wallDepthOffset),\n backWallFill\n );\n }\n if (chart.sideWall?.hidden !== true && sideWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(sideColumn, 0, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, 0, minPlaneValue), wallDepthOffset),\n sideWallFill\n );\n }\n for (const tick of chart.valueAxis?.majorGridlines ? domain.ticks : []) {\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, backRow, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, backRow, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(sideColumn, 0, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let columnIndex = 0; chart.categoryAxis?.majorGridlines && columnIndex < cols; columnIndex += columnSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, 0, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, rows - 1, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, backRow, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, backRow, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let rowIndex = 0; chart.seriesAxis?.majorGridlines && rowIndex < rows; rowIndex += rowSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, rowIndex, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(sideColumn, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(sideColumn, rowIndex, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n }\n\n const allPoints = [\n ...fillVertices.map((vertex) => vertex.point),\n ...wallTriangles.flatMap((triangle) => triangle.points),\n ...meshLines.flatMap((line) => [line.from, line.to]),\n ...contourLines.flatMap((line) => [line.from, line.to])\n ];\n if (allPoints.length === 0) {\n return null;\n }\n\n const minX = Math.min(...allPoints.map((point) => point.x));\n const maxX = Math.max(...allPoints.map((point) => point.x));\n const minY = Math.min(...allPoints.map((point) => point.y));\n const maxY = Math.max(...allPoints.map((point) => point.y));\n const minDepth = Math.min(...allPoints.map((point) => point.depth));\n const maxDepth = Math.max(...allPoints.map((point) => point.depth));\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 const toScreenX = (x: number) => centerX + (x - centerRawX) * scale;\n const toScreenY = (y: number) => centerY + (y - centerRawY) * scale;\n const toClipPoint = (point: SurfacePoint3D) => {\n const screenX = toScreenX(point.x);\n const screenY = toScreenY(point.y);\n return {\n x: (screenX / layout.width) * 2 - 1,\n y: 1 - (screenY / layout.height) * 2,\n z: clamp(((point.depth - minDepth) / Math.max(1e-6, maxDepth - minDepth)) * 2 - 1, -1, 1)\n };\n };\n\n const fillPositions: number[] = [];\n const fillColors: number[] = [];\n const wallPositions: number[] = [];\n const wallColors: number[] = [];\n for (const triangle of wallTriangles) {\n const world = triangle.points.map(point => ({ x: point.worldX, y: point.worldY, z: -point.worldZ }));\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 rgba = colorToRgba(usesFlatMaterial ? triangle.color : shadeSurfaceMatteColor(triangle.color, normal), 1);\n for (const point of triangle.points) {\n const clip = toClipPoint(point);\n wallPositions.push(clip.x, clip.y, clip.z);\n wallColors.push(rgba[0], rgba[1], rgba[2], rgba[3]);\n }\n }\n for (let index = 0; index < fillVertices.length; index += 3) {\n const left = fillVertices[index];\n const middle = fillVertices[index + 1];\n const right = fillVertices[index + 2];\n if (!left || !middle || !right) {\n continue;\n }\n const world = [left, middle, right].map(vertex => ({ x: vertex.point.worldX, y: vertex.point.worldY, z: -vertex.point.worldZ }));\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 shaded = colorToRgba(usesFlatMaterial ? left.bandColor : shadeSurfaceMatteColor(left.bandColor, normal), 1);\n [left, middle, right].forEach((vertex) => {\n const clip = toClipPoint(vertex.point);\n fillPositions.push(clip.x, clip.y, clip.z);\n fillColors.push(shaded[0], shaded[1], shaded[2], shaded[3]);\n });\n }\n\n const linePositions: number[] = [];\n const lineColors: number[] = [];\n meshLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z - 0.00001, to.x, to.y, to.z - 0.00001);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n contourLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z - 0.00001, to.x, to.y, to.z - 0.00001);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n\n return {\n fillColors: new Float32Array(fillColors),\n fillPositions: new Float32Array(fillPositions),\n lineColors: new Float32Array(lineColors),\n linePositions: new Float32Array(linePositions),\n wallColors: new Float32Array(wallColors),\n wallPositions: new Float32Array(wallPositions)\n };\n}\n\nexport const MemoSurfaceChartComposite = React.memo(function MemoSurfaceChartComposite({\n background,\n borderColor,\n chart,\n fontFamily,\n layout,\n onDoubleClick,\n onPointerDown,\n overlay,\n palette,\n fallback\n}: SurfaceCompositeProps) {\n const canvasRef = React.useRef<HTMLCanvasElement | null>(null);\n const [ready, setReady] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n const isContour = isContourSurfaceChart(chart);\n\n React.useEffect(() => {\n if (isContour) {\n setReady(false);\n setFailed(false);\n return;\n }\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n let cancelled = false;\n let reglInstance: ReturnType<typeof createREGL> | null = null;\n\n const drawSurface = () => {\n try {\n const scene = buildSurfaceMesh(chart, palette, layout);\n if (!scene) {\n if (!cancelled) {\n setFailed(true);\n setReady(false);\n }\n return;\n }\n const dpr = window.devicePixelRatio || 1;\n canvas.width = Math.max(1, Math.round(layout.width * dpr));\n canvas.height = Math.max(1, Math.round(layout.height * dpr));\n reglInstance = createREGL({\n attributes: {\n alpha: true,\n antialias: true,\n depth: true,\n premultipliedAlpha: true\n },\n canvas\n });\n const fillCommand = scene.fillPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.fillColors,\n position: scene.fillPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.fillPositions.length / 3,\n depth: {\n enable: true\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const wallCommand = scene.wallPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.wallColors,\n position: scene.wallPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.wallPositions.length / 3,\n depth: {\n enable: true,\n func: \"lequal\"\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const lineCommand = scene.linePositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.lineColors,\n position: scene.linePositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.linePositions.length / 3,\n depth: {\n enable: true,\n func: \"lequal\"\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n lineWidth: 1,\n primitive: \"lines\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n\n reglInstance.clear({ color: [0, 0, 0, 0], depth: 1 });\n wallCommand?.();\n fillCommand?.();\n lineCommand?.();\n if (!cancelled) {\n setReady(true);\n setFailed(false);\n }\n } catch {\n if (!cancelled) {\n setReady(false);\n setFailed(true);\n }\n }\n };\n\n setReady(false);\n setFailed(false);\n drawSurface();\n\n return () => {\n cancelled = true;\n reglInstance?.destroy();\n };\n }, [\n chart,\n isContour,\n layout,\n palette\n ]);\n\n const shouldRenderFallback = isContour || failed || !ready;\n\n return (\n <div\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n role=\"img\"\n style={{\n background,\n border: borderColor.trim().toLowerCase() === \"transparent\" ? \"none\" : `1px solid ${borderColor}`,\n boxSizing: \"border-box\",\n fontFamily,\n height: \"100%\",\n overflow: \"hidden\",\n pointerEvents: \"auto\",\n position: \"relative\",\n width: \"100%\"\n }}\n >\n <canvas\n ref={canvasRef}\n style={{\n display: shouldRenderFallback ? \"none\" : \"block\",\n height: \"100%\",\n inset: 0,\n position: \"absolute\",\n width: \"100%\"\n }}\n />\n <svg\n onDoubleClick={onDoubleClick}\n onPointerDown={onPointerDown}\n style={{ display: \"block\", height: \"100%\", inset: 0, position: \"absolute\", width: \"100%\" }}\n viewBox={`0 0 ${layout.width} ${layout.height}`}\n >\n {shouldRenderFallback ? fallback : null}\n {overlay}\n </svg>\n </div>\n );\n}, (prev, next) => (\n prev.chart === next.chart\n && prev.palette === next.palette\n && prev.background === next.background\n && prev.borderColor === next.borderColor\n && prev.fontFamily === next.fontFamily\n && prev.onDoubleClick === next.onDoubleClick\n && prev.onPointerDown === next.onPointerDown\n && prev.layout.width === next.layout.width\n && prev.layout.height === next.layout.height\n && prev.layout.plot.left === next.layout.plot.left\n && prev.layout.plot.top === next.layout.plot.top\n && prev.layout.plot.width === next.layout.plot.width\n && prev.layout.plot.height === next.layout.plot.height\n && prev.overlay === next.overlay\n && prev.fallback === next.fallback\n));\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/surface-regl.tsx"],"sourcesContent":["import { getBuiltinChartColor, getBuiltinChartSurfaceLine, resolveBuiltinChartColor } from \"./builtin-chart-styles\";\nimport createREGL from \"regl\";\nimport * as React from \"react\";\nimport { shadeSurfaceMatteColor, surfaceNormal, transformSurfaceNormal } from \"./surface-lighting\";\nimport { clipSurfaceBand, groupSurfaceBandEdges, normalizeSurfaceValue, surfaceDataRatios, triangulateSurfaceQuad } from \"./surface-geometry\";\nimport type { XlsxChart } from \"./types\";\n\ntype SurfacePalette = {\n border: string;\n mutedText: string;\n surface: string;\n text: string;\n};\n\ntype SurfaceLayout = {\n height: number;\n plot: {\n height: number;\n left: number;\n top: number;\n width: number;\n };\n width: number;\n};\n\ntype SurfaceCompositeProps = {\n background: string;\n borderColor: string;\n chart: XlsxChart;\n fontFamily: string;\n layout: SurfaceLayout;\n onDoubleClick?: React.MouseEventHandler<SVGSVGElement>;\n onPointerDown?: React.PointerEventHandler<SVGSVGElement>;\n overlay: React.ReactNode;\n palette: SurfacePalette;\n fallback: React.ReactNode;\n};\n\ntype SurfaceDomain = {\n maxValue: number;\n minValue: number;\n safeMax: number;\n ticks: number[];\n};\n\ntype SurfacePoint3D = {\n depth: number;\n worldX: number;\n worldY: number;\n worldZ: number;\n x: number;\n y: number;\n};\n\ntype SurfaceVertex = {\n bandColor: string;\n point: SurfacePoint3D;\n value: number;\n};\n\ntype SolidSurfaceTriangle = {\n color: string;\n points: [SurfacePoint3D, SurfacePoint3D, SurfacePoint3D];\n};\n\ntype SurfaceScene = {\n fillColors: Float32Array;\n fillPositions: Float32Array;\n lineColors: Float32Array;\n linePositions: Float32Array;\n wallColors: Float32Array;\n wallPositions: Float32Array;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\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 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 = clamp(ratio, 0, 1);\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 resolveSurfaceBaseColor(chart: XlsxChart, palette: Pick<SurfacePalette, \"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 normalizeSurfaceRendererHexColor(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 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 normalizeSurfaceRendererHexColor(color);\n}\n\nfunction getSurfaceColorStops(chart: XlsxChart, palette: SurfacePalette) {\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 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 = Math.pow(10, Math.floor(Math.log10(Math.max(roughStep, 1e-6))));\n const normalized = roughStep / magnitude;\n const niceStep = 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 : niceStep * 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 resolveSurfaceBandPaletteColor(chart: XlsxChart, palette: SurfacePalette, 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 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 resolveSurfaceBandColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n return resolveSurfaceBandPaletteColor(chart, palette, domain, value);\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: SurfacePalette, 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 colorToRgba(color: string, alpha = 1) {\n if (color === \"transparent\") return [0, 0, 0, 0] as const;\n const rgb = parseRgbColor(color);\n if (!rgb) {\n return [0.1, 0.1, 0.1, alpha] as const;\n }\n return [rgb.red / 255, rgb.green / 255, rgb.blue / 255, alpha] as const;\n}\n\nfunction normalizeSurfaceX(column: number, cols: number) {\n return cols <= 1 ? 0 : ((column / (cols - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceY(row: number, rows: number) {\n return rows <= 1 ? 0 : ((row / (rows - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceZ(value: number, domain: SurfaceDomain, heightExtent: number, axis?: XlsxChart[\"valueAxis\"]) {\n return -(normalizeSurfaceValue(value, domain.minValue, domain.safeMax, axis) - 0.5) * heightExtent;\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 rightAngleAxes: boolean\n) {\n if (rightAngleAxes) {\n return { depth: z, x: x + z * Math.sin(rotYRad), y: y - z * Math.sin(rotXRad) };\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 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.18, 1 + z2 * (0.24 + perspectiveStrength * 0.5))\n : 1;\n return {\n depth: z2,\n x: x1 * perspective,\n y: y1 * perspective\n };\n}\n\nfunction withProjectedDepth(point: SurfacePoint3D, depth: number): SurfacePoint3D {\n return {\n ...point,\n depth\n };\n}\n\nfunction nudgeProjectedDepth(point: SurfacePoint3D, delta: number): SurfacePoint3D {\n return {\n ...point,\n depth: point.depth + delta\n };\n}\n\nfunction isContourSurfaceChart(chart: XlsxChart) {\n const rawChartType = chart.raw && typeof chart.raw === \"object\" && typeof chart.raw.xmlChartType === \"string\"\n ? chart.raw.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 buildSurfaceMesh(chart: XlsxChart, palette: SurfacePalette, layout: SurfaceLayout): SurfaceScene | null {\n const rows = chart.series.length;\n const cols = chart.series.reduce((max, series) => Math.max(max, series.values.length), 0);\n if (rows < 2 || cols < 2) {\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 isWireframe = chart.wireframe === true;\n const fillVertices: SurfaceVertex[] = [];\n const wallTriangles: SolidSurfaceTriangle[] = [];\n const contourLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const meshLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const rotX = (chart.view3d?.rotX ?? 25) * (Math.PI / 180);\n const rotY = (chart.view3d?.rotY ?? 30) * (Math.PI / 180);\n const usePerspective = !isContour && chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp((chart.view3d?.perspective ?? (usePerspective ? 30 : 0)) / 100, 0, 1);\n const ratios = surfaceDataRatios(rows, cols, chart.valueAxis?.crossBetween !== \"midCat\", chart.view3d?.heightPercent, chart.view3d?.depthPercent, layout);\n const depthScale = ratios.depth;\n const heightExtent = 2 * ratios.height;\n const usesFlatMaterial = chart.surfaceMaterial === \"flat\";\n const wallLineColor = chart.valueAxis?.majorGridlineColor ?? chart.backWall?.lineColor ?? chart.sideWall?.lineColor ?? chart.floor?.lineColor ?? chart.axisLineColor ?? \"#a6a6a6\";\n const backWallFill = chart.backWall?.fillColor ?? \"#d9d9df\";\n const sideWallFill = chart.sideWall?.fillColor ?? \"#d5d7dc\";\n const floorFill = chart.floor?.fillColor ?? \"#d0d2d8\";\n const projectPoint = (column: number, row: number, value: number): SurfacePoint3D => {\n const worldX = normalizeSurfaceX(column, cols);\n if (isContour) {\n return {\n depth: 0,\n worldX,\n worldY: normalizeSurfaceY(row, rows),\n worldZ: 0,\n x: worldX,\n y: normalizeSurfaceY(row, rows)\n };\n }\n const worldY = normalizeSurfaceZ(value, domain, heightExtent, chart.valueAxis);\n const worldZ = normalizeSurfaceY(row, rows) * depthScale;\n const projected = projectCartesian3dPoint(worldX, worldY, worldZ, rotX, rotY, usePerspective, perspectiveStrength, chart.view3d?.rAngAx !== false);\n return {\n depth: projected.depth,\n worldX,\n worldY,\n worldZ,\n x: projected.x,\n y: projected.y\n };\n };\n const addWallQuad = (a: SurfacePoint3D, b: SurfacePoint3D, c: SurfacePoint3D, d: SurfacePoint3D, color: string) => {\n wallTriangles.push(\n { color, points: [a, b, c] },\n { color, points: [a, c, d] }\n );\n };\n const addMeshLine = (from: SurfacePoint3D, to: SurfacePoint3D, color: string) => {\n meshLines.push({ color, from, to });\n };\n\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 triangles = triangulateSurfaceQuad([\n { value: p00, x: columnIndex, y: rowIndex },\n { value: p10, x: columnIndex + 1, y: rowIndex },\n { value: p11, x: columnIndex + 1, y: rowIndex + 1 },\n { value: p01, x: columnIndex, y: rowIndex + 1 }\n ], chart.valueAxis);\n for (const triangle of triangles) {\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 bandColor = resolveSurfaceBandColor(chart, palette, domain, (lower + upper) / 2);\n if (!isWireframe && bandColor !== \"transparent\") {\n for (let index = 1; index < polygon.length - 1; index += 1) {\n for (const vertex of [polygon[0], polygon[index], polygon[index + 1]]) {\n const point = projectPoint(vertex.x, vertex.y, vertex.value);\n fillVertices.push({ bandColor, point: isContour ? withProjectedDepth(point, 0.08) : point, value: vertex.value });\n }\n }\n }\n for (const group of groupSurfaceBandEdges(polygon, triangle, band, lower, isWireframe)) {\n const edgeMidpoint = (domain.ticks[group.band] + domain.ticks[group.band + 1]) / 2;\n const color = resolveSurfaceWireframeColor(chart, palette, domain, edgeMidpoint);\n if (color !== \"transparent\") {\n for (const [from, to] of group.edges) {\n contourLines.push({ color, from: projectPoint(from.x, from.y, from.value), to: projectPoint(to.x, to.y, to.value) });\n }\n }\n }\n }\n }\n }\n }\n\n const columnSkip = Math.max(1, chart.categoryAxis?.tickMarkSkip ?? 1);\n const rowSkip = Math.max(1, chart.seriesAxis?.tickMarkSkip ?? 1);\n if (isContour) {\n const topLeft = withProjectedDepth(projectPoint(0, 0, domain.minValue), -0.12);\n const topRight = withProjectedDepth(projectPoint(cols - 1, 0, domain.minValue), -0.12);\n const bottomRight = withProjectedDepth(projectPoint(cols - 1, rows - 1, domain.minValue), -0.12);\n const bottomLeft = withProjectedDepth(projectPoint(0, rows - 1, domain.minValue), -0.12);\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(topLeft, topRight, bottomRight, bottomLeft, backWallFill);\n }\n for (let columnIndex = 0; columnIndex < cols; columnIndex += columnSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(columnIndex, 0, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(columnIndex, rows - 1, domain.minValue), 0.04),\n wallLineColor\n );\n }\n for (let rowIndex = 0; rowIndex < rows; rowIndex += rowSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(0, rowIndex, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(cols - 1, rowIndex, domain.minValue), 0.04),\n wallLineColor\n );\n }\n } else {\n const minPlaneValue = domain.minValue;\n const wallDepthOffset = 0;\n const backRow = chart.view3d?.rAngAx !== false || Math.cos(rotX) * Math.cos(rotY) >= 0 ? rows - 1 : 0;\n const sideColumn = Math.sin(rotY) >= 0 ? 0 : cols - 1;\n if (chart.floor?.hidden !== true && floorFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, rows - 1, minPlaneValue), wallDepthOffset),\n floorFill\n );\n }\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, backRow, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, backRow, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, backRow, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, backRow, minPlaneValue), wallDepthOffset),\n backWallFill\n );\n }\n if (chart.sideWall?.hidden !== true && sideWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(sideColumn, 0, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, 0, minPlaneValue), wallDepthOffset),\n sideWallFill\n );\n }\n for (const tick of chart.valueAxis?.majorGridlines ? domain.ticks : []) {\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, backRow, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, backRow, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(sideColumn, 0, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let columnIndex = 0; chart.categoryAxis?.majorGridlines && columnIndex < cols; columnIndex += columnSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, 0, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, rows - 1, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, backRow, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, backRow, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let rowIndex = 0; chart.seriesAxis?.majorGridlines && rowIndex < rows; rowIndex += rowSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, rowIndex, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(sideColumn, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(sideColumn, rowIndex, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n }\n\n const allPoints = [\n ...fillVertices.map((vertex) => vertex.point),\n ...wallTriangles.flatMap((triangle) => triangle.points),\n ...meshLines.flatMap((line) => [line.from, line.to]),\n ...contourLines.flatMap((line) => [line.from, line.to])\n ];\n if (allPoints.length === 0) {\n return null;\n }\n\n const minX = Math.min(...allPoints.map((point) => point.x));\n const maxX = Math.max(...allPoints.map((point) => point.x));\n const minY = Math.min(...allPoints.map((point) => point.y));\n const maxY = Math.max(...allPoints.map((point) => point.y));\n const minDepth = Math.min(...allPoints.map((point) => point.depth));\n const maxDepth = Math.max(...allPoints.map((point) => point.depth));\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 const toScreenX = (x: number) => centerX + (x - centerRawX) * scale;\n const toScreenY = (y: number) => centerY + (y - centerRawY) * scale;\n const toClipPoint = (point: SurfacePoint3D) => {\n const screenX = toScreenX(point.x);\n const screenY = toScreenY(point.y);\n return {\n x: (screenX / layout.width) * 2 - 1,\n y: 1 - (screenY / layout.height) * 2,\n z: clamp(((point.depth - minDepth) / Math.max(1e-6, maxDepth - minDepth)) * 2 - 1, -1, 1)\n };\n };\n\n const fillPositions: number[] = [];\n const fillColors: number[] = [];\n const wallPositions: number[] = [];\n const wallColors: number[] = [];\n for (const triangle of wallTriangles) {\n const world = triangle.points.map(point => ({ x: point.worldX, y: point.worldY, z: -point.worldZ }));\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 rgba = colorToRgba(usesFlatMaterial ? triangle.color : shadeSurfaceMatteColor(triangle.color, normal), 1);\n for (const point of triangle.points) {\n const clip = toClipPoint(point);\n wallPositions.push(clip.x, clip.y, clip.z);\n wallColors.push(rgba[0], rgba[1], rgba[2], rgba[3]);\n }\n }\n for (let index = 0; index < fillVertices.length; index += 3) {\n const left = fillVertices[index];\n const middle = fillVertices[index + 1];\n const right = fillVertices[index + 2];\n if (!left || !middle || !right) {\n continue;\n }\n const world = [left, middle, right].map(vertex => ({ x: vertex.point.worldX, y: vertex.point.worldY, z: -vertex.point.worldZ }));\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 shaded = colorToRgba(usesFlatMaterial ? left.bandColor : shadeSurfaceMatteColor(left.bandColor, normal), 1);\n [left, middle, right].forEach((vertex) => {\n const clip = toClipPoint(vertex.point);\n fillPositions.push(clip.x, clip.y, clip.z);\n fillColors.push(shaded[0], shaded[1], shaded[2], shaded[3]);\n });\n }\n\n const linePositions: number[] = [];\n const lineColors: number[] = [];\n meshLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z - 0.00001, to.x, to.y, to.z - 0.00001);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n contourLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z - 0.00001, to.x, to.y, to.z - 0.00001);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n\n return {\n fillColors: new Float32Array(fillColors),\n fillPositions: new Float32Array(fillPositions),\n lineColors: new Float32Array(lineColors),\n linePositions: new Float32Array(linePositions),\n wallColors: new Float32Array(wallColors),\n wallPositions: new Float32Array(wallPositions)\n };\n}\n\nexport const MemoSurfaceChartComposite = React.memo(function MemoSurfaceChartComposite({\n background,\n borderColor,\n chart,\n fontFamily,\n layout,\n onDoubleClick,\n onPointerDown,\n overlay,\n palette,\n fallback\n}: SurfaceCompositeProps) {\n const canvasRef = React.useRef<HTMLCanvasElement | null>(null);\n const [ready, setReady] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n const isContour = isContourSurfaceChart(chart);\n\n React.useEffect(() => {\n if (isContour) {\n setReady(false);\n setFailed(false);\n return;\n }\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n let cancelled = false;\n let reglInstance: ReturnType<typeof createREGL> | null = null;\n\n const drawSurface = () => {\n try {\n const scene = buildSurfaceMesh(chart, palette, layout);\n if (!scene) {\n if (!cancelled) {\n setFailed(true);\n setReady(false);\n }\n return;\n }\n const dpr = window.devicePixelRatio || 1;\n canvas.width = Math.max(1, Math.round(layout.width * dpr));\n canvas.height = Math.max(1, Math.round(layout.height * dpr));\n reglInstance = createREGL({\n attributes: {\n alpha: true,\n antialias: true,\n depth: true,\n premultipliedAlpha: true\n },\n canvas\n });\n const fillCommand = scene.fillPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.fillColors,\n position: scene.fillPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.fillPositions.length / 3,\n depth: {\n enable: true\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const wallCommand = scene.wallPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.wallColors,\n position: scene.wallPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.wallPositions.length / 3,\n depth: {\n enable: true,\n func: \"lequal\"\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const lineCommand = scene.linePositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.lineColors,\n position: scene.linePositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.linePositions.length / 3,\n depth: {\n enable: true,\n func: \"lequal\"\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n lineWidth: 1,\n primitive: \"lines\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n\n reglInstance.clear({ color: [0, 0, 0, 0], depth: 1 });\n wallCommand?.();\n fillCommand?.();\n lineCommand?.();\n if (!cancelled) {\n setReady(true);\n setFailed(false);\n }\n } catch {\n if (!cancelled) {\n setReady(false);\n setFailed(true);\n }\n }\n };\n\n setReady(false);\n setFailed(false);\n drawSurface();\n\n return () => {\n cancelled = true;\n reglInstance?.destroy();\n };\n }, [\n chart,\n isContour,\n layout,\n palette\n ]);\n\n const shouldRenderFallback = isContour || failed || !ready;\n\n return (\n <div\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n role=\"img\"\n style={{\n background,\n border: borderColor.trim().toLowerCase() === \"transparent\" ? \"none\" : `1px solid ${borderColor}`,\n boxSizing: \"border-box\",\n fontFamily,\n height: \"100%\",\n overflow: \"hidden\",\n pointerEvents: \"auto\",\n position: \"relative\",\n width: \"100%\"\n }}\n >\n <canvas\n ref={canvasRef}\n style={{\n display: shouldRenderFallback ? \"none\" : \"block\",\n height: \"100%\",\n inset: 0,\n position: \"absolute\",\n width: \"100%\"\n }}\n />\n <svg\n onDoubleClick={onDoubleClick}\n onPointerDown={onPointerDown}\n style={{ display: \"block\", height: \"100%\", inset: 0, position: \"absolute\", width: \"100%\" }}\n viewBox={`0 0 ${layout.width} ${layout.height}`}\n >\n {shouldRenderFallback ? fallback : null}\n {overlay}\n </svg>\n </div>\n );\n}, (prev, next) => (\n prev.chart === next.chart\n && prev.palette === next.palette\n && prev.background === next.background\n && prev.borderColor === next.borderColor\n && prev.fontFamily === next.fontFamily\n && prev.onDoubleClick === next.onDoubleClick\n && prev.onPointerDown === next.onPointerDown\n && prev.layout.width === next.layout.width\n && prev.layout.height === next.layout.height\n && prev.layout.plot.left === next.layout.plot.left\n && prev.layout.plot.top === next.layout.plot.top\n && prev.layout.plot.width === next.layout.plot.width\n && prev.layout.plot.height === next.layout.plot.height\n && prev.overlay === next.overlay\n && prev.fallback === next.fallback\n));\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,gBAAgB;AAyEvB,SAAS,MAAM,OAAe,KAAa,KAAa;AACtD,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C;AAEA,SAAS,WAAW,OAAgB;AAClC,MAAI,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,GAAG;AACvD,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,aAAa,MAAM,KAAK,EAAE,QAAQ,MAAM,EAAE;AAChD,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AACA,UAAM,SAAS,OAAO,UAAU;AAChC,WAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,SAAS,cAAc,OAAe;AACpC,QAAM,QAAQ,qBAAqB,KAAK,KAAK;AAC7C,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,MAAM,OAAO,SAAS,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,IAC9C,OAAO,OAAO,SAAS,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,IAC/C,KAAK,OAAO,SAAS,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE;AAAA,EAC/C;AACF;AAyBA,SAAS,wBAAwB,OAAkB,SAAuC;AACxF,SAAO,MAAM,oBAAoB,CAAC,KAC7B,MAAM,OAAO,CAAC,GAAG,SACjB,MAAM,OAAO,CAAC,GAAG,aACjB,MAAM,iBACN,MAAM,aACN,QAAQ;AACf;AAEA,SAAS,iCAAiC,OAAgB;AACxD,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AACA,QAAM,aAAa,QAAQ,WAAW,GAAG,IAAI,QAAQ,MAAM,CAAC,IAAI;AAChE,SAAO,iBAAiB,KAAK,UAAU,IAAI,IAAI,WAAW,YAAY,CAAC,KAAK;AAC9E;AAEA,SAAS,kCAAkC,OAAkB,MAAuB;AAClF,QAAM,QAAQ,MAAM,OAAO,CAAC,GAAG;AAC/B,MAAI,SAAS,SAAS,OAAO,kBAAkB,OAAO,OAAO,kBAAkB,KAAM,QAAO;AAC5F,QAAM,QAAQ,SAAS,SACnB,OAAO,gBAAgB,OAAO,eAC9B,OAAO,gBAAgB,OAAO;AAClC,SAAO,iCAAiC,KAAK;AAC/C;AAEA,SAAS,qBAAqB,OAAkB,SAAyB;AACvE,QAAM,eAAe,kCAAkC,OAAO,MAAM;AACpE,MAAI,aAAc,QAAO,CAAC,YAAY;AACtC,QAAM,UAAU,MAAM,qBAAqB,CAAC,GAAG,OAAO,CAAC,UAA2B,OAAO,UAAU,YAAY,MAAM,SAAS,CAAC;AAC/H,SAAO,OAAO,SAAS,IAAI,SAAS,CAAC,wBAAwB,OAAO,OAAO,CAAC;AAC9E;AAEA,SAAS,iBAAiB,OAAwC;AAChE,QAAM,gBAAgB,MAAM,OAAO,QAAQ,CAAC,WAC1C,OAAO,OACJ,IAAI,CAAC,UAAU,WAAW,KAAK,CAAC,EAChC,OAAO,CAAC,UAA2B,SAAS,IAAI,CACpD;AACD,MAAI,cAAc,WAAW,GAAG;AAC9B,WAAO;AAAA,EACT;AACA,QAAM,cAAc,OAAO,MAAM,WAAW,QAAQ,YAAY,OAAO,SAAS,MAAM,UAAU,GAAG,IAC/F,MAAM,UAAU,MAChB;AACJ,QAAM,cAAc,OAAO,MAAM,WAAW,QAAQ,YAAY,OAAO,SAAS,MAAM,UAAU,GAAG,IAC/F,MAAM,UAAU,MAChB;AACJ,QAAM,SAAS,KAAK,IAAI,GAAG,aAAa;AACxC,QAAM,SAAS,KAAK,IAAI,GAAG,aAAa;AACxC,QAAM,WAAW,KAAK,IAAI,MAAM,SAAS,KAAK,IAAI,GAAG,MAAM,CAAC;AAC5D,QAAM,YAAY,WAAW;AAC7B,QAAM,YAAY,KAAK,IAAI,IAAI,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI,WAAW,IAAI,CAAC,CAAC,CAAC;AAChF,QAAM,aAAa,YAAY;AAC/B,QAAM,WAAW,cAAc,IAAI,IAAI,cAAc,IAAI,IAAI,cAAc,IAAI,IAAI;AACnF,QAAM,OAAO,OAAO,MAAM,WAAW,cAAc,YAAY,MAAM,UAAU,YAAY,IACvF,MAAM,UAAU,YAChB,WAAW;AACf,QAAM,WAAW,gBAAgB,UAAU,IAAI,IAAI,KAAK,MAAM,SAAS,IAAI,IAAI;AAC/E,QAAM,WAAW,eAAe,KAAK,KAAK,SAAS,IAAI,IAAI;AAC3D,QAAM,UAAU,YAAY,WAAW,WAAW,OAAO;AACzD,QAAM,QAAkB,CAAC;AACzB,WAAS,UAAU,UAAU,WAAW,UAAU,OAAO,MAAO,WAAW,MAAM;AAC/E,UAAM,KAAK,OAAO,QAAQ,QAAQ,CAAC,CAAC,CAAC;AAAA,EACvC;AACA,QAAM,eAAe,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,SAAS,OAAO,OAAO,GAAG,OAAO,CAAC,CAAC;AACtF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,aAAa,UAAU,IAAI,eAAe,CAAC,UAAU,OAAO;AAAA,EACrE;AACF;AAEA,SAAS,+BAA+B,OAAkB,SAAyB,QAAuB,OAAe;AACvH,QAAM,YAAY,wBAAwB,QAAQ,KAAK;AACvD,QAAM,gBAAgB,8BAA8B,OAAO,oBAAoB,SAAS;AACxF,MAAI,cAAe,QAAO;AAC1B,QAAM,eAAe,kCAAkC,OAAO,MAAM;AACpE,MAAI,aAAc,QAAO;AACzB,QAAM,cAAc,MAAM,KAAK;AAC/B,QAAM,eAAe,KAAK,OAAO,OAAO,UAAU,OAAO,aAAa,OAAO,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,IAAI;AAC5G,QAAM,eAAe,cAAc,yBAAyB,qBAAqB,MAAM,cAAc,YAAY,cAAc,YAAY,GAAG,WAAW,IAAI;AAC7J,MAAI,aAAc,QAAO;AACzB,QAAM,QAAQ,qBAAqB,OAAO,OAAO;AACjD,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,wBAAwB,OAAO,OAAO;AAAA,EAC/C;AACA,SAAO,MAAM,KAAK,IAAI,MAAM,SAAS,GAAG,KAAK,IAAI,GAAG,SAAS,CAAC,CAAC,KAAK,MAAM,MAAM,SAAS,CAAC,KAAK,wBAAwB,OAAO,OAAO;AACvI;AAEA,SAAS,wBAAwB,QAAuB,OAAe;AACrE,QAAM,QAAQ,OAAO;AACrB,WAAS,QAAQ,GAAG,QAAQ,MAAM,SAAS,GAAG,SAAS,GAAG;AACxD,UAAM,MAAM,MAAM,QAAQ,CAAC,KAAK,OAAO;AACvC,QAAI,SAAS,OAAO,UAAU,MAAM,SAAS,GAAG;AAC9C,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,KAAK,IAAI,GAAG,MAAM,SAAS,CAAC;AACrC;AAEA,SAAS,wBAAwB,OAAkB,SAAyB,QAAuB,OAAe;AAChH,SAAO,+BAA+B,OAAO,SAAS,QAAQ,KAAK;AACrE;AAEA,SAAS,8BAA8B,OAAkB,KAAkD,OAAe;AACxH,QAAM,SAAS,MAAM,MAAM,GAAG;AAC9B,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,KAAK,EAAG,QAAO;AAC1G,QAAM,QAAS,OAAmC,KAAK;AACvD,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AACjE;AAEA,SAAS,6BAA6B,OAAkB,SAAyB,QAAuB,OAAe;AACrH,QAAM,YAAY,wBAAwB,QAAQ,KAAK;AACvD,QAAM,cAAc,MAAM,KAAK;AAC/B,QAAM,eAAe,KAAK,OAAO,OAAO,UAAU,OAAO,aAAa,OAAO,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,IAAI;AAC5G,QAAM,cAAc,cAAc,yBAAyB,2BAA2B,MAAM,cAAc,WAAW,YAAY,GAAG,WAAW,IAAI;AACnJ,SAAO,8BAA8B,OAAO,wBAAwB,SAAS,KACxE,kCAAkC,OAAO,MAAM,KAC/C,eACA,+BAA+B,OAAO,SAAS,QAAQ,KAAK;AACnE;AAEA,SAAS,YAAY,OAAe,QAAQ,GAAG;AAC7C,MAAI,UAAU,cAAe,QAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAC/C,QAAM,MAAM,cAAc,KAAK;AAC/B,MAAI,CAAC,KAAK;AACR,WAAO,CAAC,KAAK,KAAK,KAAK,KAAK;AAAA,EAC9B;AACA,SAAO,CAAC,IAAI,MAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,OAAO,KAAK,KAAK;AAC/D;AAEA,SAAS,kBAAkB,QAAgB,MAAc;AACvD,SAAO,QAAQ,IAAI,KAAM,UAAU,OAAO,KAAM,OAAO;AACzD;AAEA,SAAS,kBAAkB,KAAa,MAAc;AACpD,SAAO,QAAQ,IAAI,KAAM,OAAO,OAAO,KAAM,OAAO;AACtD;AAEA,SAAS,kBAAkB,OAAe,QAAuB,cAAsB,MAA+B;AACpH,SAAO,EAAE,sBAAsB,OAAO,OAAO,UAAU,OAAO,SAAS,IAAI,IAAI,OAAO;AACxF;AAEA,SAAS,wBACP,GACA,GACA,GACA,SACA,SACA,gBACA,qBACA,gBACA;AACA,MAAI,gBAAgB;AAClB,WAAO,EAAE,OAAO,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,OAAO,EAAE;AAAA,EAChF;AACA,QAAM,OAAO,KAAK,IAAI,OAAO;AAC7B,QAAM,OAAO,KAAK,IAAI,OAAO;AAC7B,QAAM,OAAO,KAAK,IAAI,OAAO;AAC7B,QAAM,OAAO,KAAK,IAAI,OAAO;AAC7B,QAAM,KAAK,IAAI,OAAO,IAAI;AAC1B,QAAM,KAAK,CAAC,IAAI,OAAO,IAAI;AAC3B,QAAM,KAAK,IAAI,OAAO,KAAK;AAC3B,QAAM,KAAK,IAAI,OAAO,KAAK;AAC3B,QAAM,cAAc,iBAChB,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,OAAO,sBAAsB,IAAI,IAC9D;AACJ,SAAO;AAAA,IACL,OAAO;AAAA,IACP,GAAG,KAAK;AAAA,IACR,GAAG,KAAK;AAAA,EACV;AACF;AAEA,SAAS,mBAAmB,OAAuB,OAA+B;AAChF,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,oBAAoB,OAAuB,OAA+B;AACjF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO,MAAM,QAAQ;AAAA,EACvB;AACF;AAEA,SAAS,sBAAsB,OAAkB;AAC/C,QAAM,eAAe,MAAM,OAAO,OAAO,MAAM,QAAQ,YAAY,OAAO,MAAM,IAAI,iBAAiB,WACjG,MAAM,IAAI,eACV;AACJ,MAAI,iBAAiB,gBAAgB;AACnC,WAAO;AAAA,EACT;AACA,MAAI,iBAAiB,kBAAkB;AACrC,WAAO;AAAA,EACT;AACA,SAAO,MAAM,cAAc,aAAa,MAAM,SAAS;AACzD;AAEA,SAAS,iBAAiB,OAAkB,SAAyB,QAA4C;AAC/G,QAAM,OAAO,MAAM,OAAO;AAC1B,QAAM,OAAO,MAAM,OAAO,OAAO,CAAC,KAAK,WAAW,KAAK,IAAI,KAAK,OAAO,OAAO,MAAM,GAAG,CAAC;AACxF,MAAI,OAAO,KAAK,OAAO,GAAG;AACxB,WAAO;AAAA,EACT;AACA,QAAM,SAAS,MAAM,OAAO,IAAI,CAAC,WAC/B,MAAM,KAAK,EAAE,QAAQ,KAAK,GAAG,CAAC,GAAG,gBAAgB,WAAW,OAAO,OAAO,WAAW,CAAC,CAAC,CACxF;AACD,QAAM,SAAS,iBAAiB,KAAK;AACrC,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AACA,QAAM,YAAY,sBAAsB,KAAK;AAC7C,QAAM,cAAc,MAAM,cAAc;AACxC,QAAM,eAAgC,CAAC;AACvC,QAAM,gBAAwC,CAAC;AAC/C,QAAM,eAAmF,CAAC;AAC1F,QAAM,YAAgF,CAAC;AACvF,QAAM,QAAQ,MAAM,QAAQ,QAAQ,OAAO,KAAK,KAAK;AACrD,QAAM,QAAQ,MAAM,QAAQ,QAAQ,OAAO,KAAK,KAAK;AACrD,QAAM,iBAAiB,CAAC,aAAa,MAAM,QAAQ,WAAW;AAC9D,QAAM,sBAAsB,OAAO,MAAM,QAAQ,gBAAgB,iBAAiB,KAAK,MAAM,KAAK,GAAG,CAAC;AACtG,QAAM,SAAS,kBAAkB,MAAM,MAAM,MAAM,WAAW,iBAAiB,UAAU,MAAM,QAAQ,eAAe,MAAM,QAAQ,cAAc,MAAM;AACxJ,QAAM,aAAa,OAAO;AAC1B,QAAM,eAAe,IAAI,OAAO;AAChC,QAAM,mBAAmB,MAAM,oBAAoB;AACnD,QAAM,gBAAgB,MAAM,WAAW,sBAAsB,MAAM,UAAU,aAAa,MAAM,UAAU,aAAa,MAAM,OAAO,aAAa,MAAM,iBAAiB;AACxK,QAAM,eAAe,MAAM,UAAU,aAAa;AAClD,QAAM,eAAe,MAAM,UAAU,aAAa;AAClD,QAAM,YAAY,MAAM,OAAO,aAAa;AAC5C,QAAM,eAAe,CAAC,QAAgB,KAAa,UAAkC;AACnF,UAAM,SAAS,kBAAkB,QAAQ,IAAI;AAC7C,QAAI,WAAW;AACb,aAAO;AAAA,QACL,OAAO;AAAA,QACP;AAAA,QACA,QAAQ,kBAAkB,KAAK,IAAI;AAAA,QACnC,QAAQ;AAAA,QACR,GAAG;AAAA,QACH,GAAG,kBAAkB,KAAK,IAAI;AAAA,MAChC;AAAA,IACF;AACA,UAAM,SAAS,kBAAkB,OAAO,QAAQ,cAAc,MAAM,SAAS;AAC7E,UAAM,SAAS,kBAAkB,KAAK,IAAI,IAAI;AAC9C,UAAM,YAAY,wBAAwB,QAAQ,QAAQ,QAAQ,MAAM,MAAM,gBAAgB,qBAAqB,MAAM,QAAQ,WAAW,KAAK;AACjJ,WAAO;AAAA,MACL,OAAO,UAAU;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,UAAU;AAAA,MACb,GAAG,UAAU;AAAA,IACf;AAAA,EACF;AACA,QAAM,cAAc,CAAC,GAAmB,GAAmB,GAAmBA,IAAmB,UAAkB;AACjH,kBAAc;AAAA,MACZ,EAAE,OAAO,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE;AAAA,MAC3B,EAAE,OAAO,QAAQ,CAAC,GAAG,GAAGA,EAAC,EAAE;AAAA,IAC7B;AAAA,EACF;AACA,QAAM,cAAc,CAAC,MAAsB,IAAoB,UAAkB;AAC/E,cAAU,KAAK,EAAE,OAAO,MAAM,GAAG,CAAC;AAAA,EACpC;AAEA,WAAS,WAAW,GAAG,WAAW,OAAO,GAAG,YAAY,GAAG;AACzD,aAAS,cAAc,GAAG,cAAc,OAAO,GAAG,eAAe,GAAG;AAClE,YAAM,MAAM,OAAO,QAAQ,IAAI,WAAW;AAC1C,YAAM,MAAM,OAAO,QAAQ,IAAI,cAAc,CAAC;AAC9C,YAAM,MAAM,OAAO,WAAW,CAAC,IAAI,WAAW;AAC9C,YAAM,MAAM,OAAO,WAAW,CAAC,IAAI,cAAc,CAAC;AAClD,UAAI,OAAO,QAAQ,OAAO,QAAQ,OAAO,QAAQ,OAAO,MAAM;AAC5D;AAAA,MACF;AACA,YAAM,YAAY,uBAAuB;AAAA,QACvC,EAAE,OAAO,KAAK,GAAG,aAAa,GAAG,SAAS;AAAA,QAC1C,EAAE,OAAO,KAAK,GAAG,cAAc,GAAG,GAAG,SAAS;AAAA,QAC9C,EAAE,OAAO,KAAK,GAAG,cAAc,GAAG,GAAG,WAAW,EAAE;AAAA,QAClD,EAAE,OAAO,KAAK,GAAG,aAAa,GAAG,WAAW,EAAE;AAAA,MAChD,GAAG,MAAM,SAAS;AAClB,iBAAW,YAAY,WAAW;AAChC,iBAAS,OAAO,GAAG,OAAO,OAAO,MAAM,SAAS,GAAG,QAAQ,GAAG;AAC5D,gBAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,gBAAM,QAAQ,OAAO,MAAM,OAAO,CAAC;AACnC,gBAAM,UAAU,gBAAgB,gBAAgB,UAAU,OAAO,MAAM,MAAM,WAAW,SAAS,CAAC,GAAG,OAAO,OAAO,MAAM,SAAS;AAClI,cAAI,QAAQ,SAAS,EAAG;AACxB,gBAAM,YAAY,wBAAwB,OAAO,SAAS,SAAS,QAAQ,SAAS,CAAC;AACrF,cAAI,CAAC,eAAe,cAAc,eAAe;AAC/C,qBAAS,QAAQ,GAAG,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG;AAC1D,yBAAW,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,KAAK,GAAG,QAAQ,QAAQ,CAAC,CAAC,GAAG;AACrE,sBAAM,QAAQ,aAAa,OAAO,GAAG,OAAO,GAAG,OAAO,KAAK;AAC3D,6BAAa,KAAK,EAAE,WAAW,OAAO,YAAY,mBAAmB,OAAO,IAAI,IAAI,OAAO,OAAO,OAAO,MAAM,CAAC;AAAA,cAClH;AAAA,YACF;AAAA,UACF;AACA,qBAAW,SAAS,sBAAsB,SAAS,UAAU,MAAM,OAAO,WAAW,GAAG;AACtF,kBAAM,gBAAgB,OAAO,MAAM,MAAM,IAAI,IAAI,OAAO,MAAM,MAAM,OAAO,CAAC,KAAK;AACjF,kBAAM,QAAQ,6BAA6B,OAAO,SAAS,QAAQ,YAAY;AAC/E,gBAAI,UAAU,eAAe;AAC3B,yBAAW,CAAC,MAAM,EAAE,KAAK,MAAM,OAAO;AACpC,6BAAa,KAAK,EAAE,OAAO,MAAM,aAAa,KAAK,GAAG,KAAK,GAAG,KAAK,KAAK,GAAG,IAAI,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;AAAA,cACrH;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAa,KAAK,IAAI,GAAG,MAAM,cAAc,gBAAgB,CAAC;AACpE,QAAM,UAAU,KAAK,IAAI,GAAG,MAAM,YAAY,gBAAgB,CAAC;AAC/D,MAAI,WAAW;AACb,UAAM,UAAU,mBAAmB,aAAa,GAAG,GAAG,OAAO,QAAQ,GAAG,KAAK;AAC7E,UAAM,WAAW,mBAAmB,aAAa,OAAO,GAAG,GAAG,OAAO,QAAQ,GAAG,KAAK;AACrF,UAAM,cAAc,mBAAmB,aAAa,OAAO,GAAG,OAAO,GAAG,OAAO,QAAQ,GAAG,KAAK;AAC/F,UAAM,aAAa,mBAAmB,aAAa,GAAG,OAAO,GAAG,OAAO,QAAQ,GAAG,KAAK;AACvF,QAAI,MAAM,UAAU,WAAW,QAAQ,iBAAiB,eAAe;AACrE,kBAAY,SAAS,UAAU,aAAa,YAAY,YAAY;AAAA,IACtE;AACA,aAAS,cAAc,GAAG,cAAc,MAAM,eAAe,YAAY;AACvE;AAAA,QACE,mBAAmB,aAAa,aAAa,GAAG,OAAO,QAAQ,GAAG,IAAI;AAAA,QACtE,mBAAmB,aAAa,aAAa,OAAO,GAAG,OAAO,QAAQ,GAAG,IAAI;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AACA,aAAS,WAAW,GAAG,WAAW,MAAM,YAAY,SAAS;AAC3D;AAAA,QACE,mBAAmB,aAAa,GAAG,UAAU,OAAO,QAAQ,GAAG,IAAI;AAAA,QACnE,mBAAmB,aAAa,OAAO,GAAG,UAAU,OAAO,QAAQ,GAAG,IAAI;AAAA,QAC1E;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL,UAAM,gBAAgB,OAAO;AAC7B,UAAM,kBAAkB;AACxB,UAAM,UAAU,MAAM,QAAQ,WAAW,SAAS,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,OAAO,IAAI;AACpG,UAAM,aAAa,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO;AACpD,QAAI,MAAM,OAAO,WAAW,QAAQ,cAAc,eAAe;AAC/D;AAAA,QACE,oBAAoB,aAAa,GAAG,GAAG,aAAa,GAAG,eAAe;AAAA,QACtE,oBAAoB,aAAa,OAAO,GAAG,GAAG,aAAa,GAAG,eAAe;AAAA,QAC7E,oBAAoB,aAAa,OAAO,GAAG,OAAO,GAAG,aAAa,GAAG,eAAe;AAAA,QACpF,oBAAoB,aAAa,GAAG,OAAO,GAAG,aAAa,GAAG,eAAe;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AACA,QAAI,MAAM,UAAU,WAAW,QAAQ,iBAAiB,eAAe;AACrE;AAAA,QACE,oBAAoB,aAAa,GAAG,SAAS,OAAO,OAAO,GAAG,eAAe;AAAA,QAC7E,oBAAoB,aAAa,OAAO,GAAG,SAAS,OAAO,OAAO,GAAG,eAAe;AAAA,QACpF,oBAAoB,aAAa,OAAO,GAAG,SAAS,aAAa,GAAG,eAAe;AAAA,QACnF,oBAAoB,aAAa,GAAG,SAAS,aAAa,GAAG,eAAe;AAAA,QAC5E;AAAA,MACF;AAAA,IACF;AACA,QAAI,MAAM,UAAU,WAAW,QAAQ,iBAAiB,eAAe;AACrE;AAAA,QACE,oBAAoB,aAAa,YAAY,GAAG,OAAO,OAAO,GAAG,eAAe;AAAA,QAChF,oBAAoB,aAAa,YAAY,OAAO,GAAG,OAAO,OAAO,GAAG,eAAe;AAAA,QACvF,oBAAoB,aAAa,YAAY,OAAO,GAAG,aAAa,GAAG,eAAe;AAAA,QACtF,oBAAoB,aAAa,YAAY,GAAG,aAAa,GAAG,eAAe;AAAA,QAC/E;AAAA,MACF;AAAA,IACF;AACA,eAAW,QAAQ,MAAM,WAAW,iBAAiB,OAAO,QAAQ,CAAC,GAAG;AACtE,UAAI,MAAM,UAAU,WAAW,QAAQ,kBAAkB,eAAe;AACtE,oBAAY,oBAAoB,aAAa,GAAG,SAAS,IAAI,GAAG,kBAAkB,IAAI,GAAG,oBAAoB,aAAa,OAAO,GAAG,SAAS,IAAI,GAAG,kBAAkB,IAAI,GAAG,aAAa;AAAA,MAC5L;AACA,UAAI,MAAM,UAAU,WAAW,QAAQ,kBAAkB,eAAe;AACtE,oBAAY,oBAAoB,aAAa,YAAY,GAAG,IAAI,GAAG,kBAAkB,IAAI,GAAG,oBAAoB,aAAa,YAAY,OAAO,GAAG,IAAI,GAAG,kBAAkB,IAAI,GAAG,aAAa;AAAA,MAClM;AAAA,IACF;AACA,aAAS,cAAc,GAAG,MAAM,cAAc,kBAAkB,cAAc,MAAM,eAAe,YAAY;AAC7G,UAAI,MAAM,OAAO,WAAW,QAAQ,kBAAkB,eAAe;AACnE,oBAAY,oBAAoB,aAAa,aAAa,GAAG,aAAa,GAAG,kBAAkB,IAAI,GAAG,oBAAoB,aAAa,aAAa,OAAO,GAAG,aAAa,GAAG,kBAAkB,IAAI,GAAG,aAAa;AAAA,MACtN;AACA,UAAI,MAAM,UAAU,WAAW,QAAQ,kBAAkB,eAAe;AACtE,oBAAY,oBAAoB,aAAa,aAAa,SAAS,aAAa,GAAG,kBAAkB,IAAI,GAAG,oBAAoB,aAAa,aAAa,SAAS,OAAO,OAAO,GAAG,kBAAkB,IAAI,GAAG,aAAa;AAAA,MAC5N;AAAA,IACF;AACA,aAAS,WAAW,GAAG,MAAM,YAAY,kBAAkB,WAAW,MAAM,YAAY,SAAS;AAC/F,UAAI,MAAM,OAAO,WAAW,QAAQ,kBAAkB,eAAe;AACnE,oBAAY,oBAAoB,aAAa,GAAG,UAAU,aAAa,GAAG,kBAAkB,IAAI,GAAG,oBAAoB,aAAa,OAAO,GAAG,UAAU,aAAa,GAAG,kBAAkB,IAAI,GAAG,aAAa;AAAA,MAChN;AACA,UAAI,MAAM,UAAU,WAAW,QAAQ,kBAAkB,eAAe;AACtE,oBAAY,oBAAoB,aAAa,YAAY,UAAU,aAAa,GAAG,kBAAkB,IAAI,GAAG,oBAAoB,aAAa,YAAY,UAAU,OAAO,OAAO,GAAG,kBAAkB,IAAI,GAAG,aAAa;AAAA,MAC5N;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY;AAAA,IAChB,GAAG,aAAa,IAAI,CAAC,WAAW,OAAO,KAAK;AAAA,IAC5C,GAAG,cAAc,QAAQ,CAAC,aAAa,SAAS,MAAM;AAAA,IACtD,GAAG,UAAU,QAAQ,CAAC,SAAS,CAAC,KAAK,MAAM,KAAK,EAAE,CAAC;AAAA,IACnD,GAAG,aAAa,QAAQ,CAAC,SAAS,CAAC,KAAK,MAAM,KAAK,EAAE,CAAC;AAAA,EACxD;AACA,MAAI,UAAU,WAAW,GAAG;AAC1B,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,KAAK,IAAI,GAAG,UAAU,IAAI,CAAC,UAAU,MAAM,CAAC,CAAC;AAC1D,QAAM,OAAO,KAAK,IAAI,GAAG,UAAU,IAAI,CAAC,UAAU,MAAM,CAAC,CAAC;AAC1D,QAAM,OAAO,KAAK,IAAI,GAAG,UAAU,IAAI,CAAC,UAAU,MAAM,CAAC,CAAC;AAC1D,QAAM,OAAO,KAAK,IAAI,GAAG,UAAU,IAAI,CAAC,UAAU,MAAM,CAAC,CAAC;AAC1D,QAAM,WAAW,KAAK,IAAI,GAAG,UAAU,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC;AAClE,QAAM,WAAW,KAAK,IAAI,GAAG,UAAU,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC;AAClE,QAAM,QAAQ,KAAK;AAAA,IACjB,OAAO,KAAK,QAAQ,KAAK,IAAI,MAAM,OAAO,IAAI;AAAA,IAC9C,OAAO,KAAK,SAAS,KAAK,IAAI,MAAM,OAAO,IAAI;AAAA,EACjD;AACA,QAAM,UAAU,OAAO,KAAK,OAAO,OAAO,KAAK,QAAQ;AACvD,QAAM,UAAU,OAAO,KAAK,MAAM,OAAO,KAAK,SAAS;AACvD,QAAM,cAAc,OAAO,QAAQ;AACnC,QAAM,cAAc,OAAO,QAAQ;AACnC,QAAM,YAAY,CAAC,MAAc,WAAW,IAAI,cAAc;AAC9D,QAAM,YAAY,CAAC,MAAc,WAAW,IAAI,cAAc;AAC9D,QAAM,cAAc,CAAC,UAA0B;AAC7C,UAAM,UAAU,UAAU,MAAM,CAAC;AACjC,UAAM,UAAU,UAAU,MAAM,CAAC;AACjC,WAAO;AAAA,MACL,GAAI,UAAU,OAAO,QAAS,IAAI;AAAA,MAClC,GAAG,IAAK,UAAU,OAAO,SAAU;AAAA,MACnC,GAAG,OAAQ,MAAM,QAAQ,YAAY,KAAK,IAAI,MAAM,WAAW,QAAQ,IAAK,IAAI,GAAG,IAAI,CAAC;AAAA,IAC1F;AAAA,EACF;AAEA,QAAM,gBAA0B,CAAC;AACjC,QAAM,aAAuB,CAAC;AAC9B,QAAM,gBAA0B,CAAC;AACjC,QAAM,aAAuB,CAAC;AAC9B,aAAW,YAAY,eAAe;AACpC,UAAM,QAAQ,SAAS,OAAO,IAAI,YAAU,EAAE,GAAG,MAAM,QAAQ,GAAG,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,EAAE;AACnG,UAAM,SAAS,uBAAuB,cAAc,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,QAAQ,QAAQ,IAAI,MAAM,QAAQ,QAAQ,IAAI,MAAM,QAAQ,WAAW,KAAK;AACrK,UAAM,OAAO,YAAY,mBAAmB,SAAS,QAAQ,uBAAuB,SAAS,OAAO,MAAM,GAAG,CAAC;AAC9G,eAAW,SAAS,SAAS,QAAQ;AACnC,YAAM,OAAO,YAAY,KAAK;AAC9B,oBAAc,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AACzC,iBAAW,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,IACpD;AAAA,EACF;AACA,WAAS,QAAQ,GAAG,QAAQ,aAAa,QAAQ,SAAS,GAAG;AAC3D,UAAM,OAAO,aAAa,KAAK;AAC/B,UAAM,SAAS,aAAa,QAAQ,CAAC;AACrC,UAAM,QAAQ,aAAa,QAAQ,CAAC;AACpC,QAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO;AAC9B;AAAA,IACF;AACA,UAAM,QAAQ,CAAC,MAAM,QAAQ,KAAK,EAAE,IAAI,aAAW,EAAE,GAAG,OAAO,MAAM,QAAQ,GAAG,OAAO,MAAM,QAAQ,GAAG,CAAC,OAAO,MAAM,OAAO,EAAE;AAC/H,UAAM,SAAS,uBAAuB,cAAc,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,QAAQ,QAAQ,IAAI,MAAM,QAAQ,QAAQ,IAAI,MAAM,QAAQ,WAAW,KAAK;AACrK,UAAM,SAAS,YAAY,mBAAmB,KAAK,YAAY,uBAAuB,KAAK,WAAW,MAAM,GAAG,CAAC;AAChH,KAAC,MAAM,QAAQ,KAAK,EAAE,QAAQ,CAAC,WAAW;AACxC,YAAM,OAAO,YAAY,OAAO,KAAK;AACrC,oBAAc,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AACzC,iBAAW,KAAK,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,IAC5D,CAAC;AAAA,EACH;AAEA,QAAM,gBAA0B,CAAC;AACjC,QAAM,aAAuB,CAAC;AAC9B,YAAU,QAAQ,CAAC,SAAS;AAC1B,UAAM,OAAO,YAAY,KAAK,IAAI;AAClC,UAAM,KAAK,YAAY,KAAK,EAAE;AAC9B,UAAM,OAAO,YAAY,KAAK,OAAO,CAAC;AACtC,kBAAc,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI,MAAS,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAO;AAC/E,eAAW,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,EACxF,CAAC;AACD,eAAa,QAAQ,CAAC,SAAS;AAC7B,UAAM,OAAO,YAAY,KAAK,IAAI;AAClC,UAAM,KAAK,YAAY,KAAK,EAAE;AAC9B,UAAM,OAAO,YAAY,KAAK,OAAO,CAAC;AACtC,kBAAc,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI,MAAS,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAO;AAC/E,eAAW,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,EACxF,CAAC;AAED,SAAO;AAAA,IACL,YAAY,IAAI,aAAa,UAAU;AAAA,IACvC,eAAe,IAAI,aAAa,aAAa;AAAA,IAC7C,YAAY,IAAI,aAAa,UAAU;AAAA,IACvC,eAAe,IAAI,aAAa,aAAa;AAAA,IAC7C,YAAY,IAAI,aAAa,UAAU;AAAA,IACvC,eAAe,IAAI,aAAa,aAAa;AAAA,EAC/C;AACF;AAEO,IAAM,4BAAkC,EAAK,SAASC,2BAA0B;AAAA,EACrF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,YAAkB,EAAiC,IAAI;AAC7D,QAAM,CAAC,OAAO,QAAQ,IAAU,EAAS,KAAK;AAC9C,QAAM,CAAC,QAAQ,SAAS,IAAU,EAAS,KAAK;AAChD,QAAM,YAAY,sBAAsB,KAAK;AAE7C,EAAM,EAAU,MAAM;AACpB,QAAI,WAAW;AACb,eAAS,KAAK;AACd,gBAAU,KAAK;AACf;AAAA,IACF;AACA,UAAM,SAAS,UAAU;AACzB,QAAI,CAAC,QAAQ;AACX;AAAA,IACF;AACA,QAAI,YAAY;AAChB,QAAI,eAAqD;AAEzD,UAAM,cAAc,MAAM;AACxB,UAAI;AACF,cAAM,QAAQ,iBAAiB,OAAO,SAAS,MAAM;AACrD,YAAI,CAAC,OAAO;AACV,cAAI,CAAC,WAAW;AACd,sBAAU,IAAI;AACd,qBAAS,KAAK;AAAA,UAChB;AACA;AAAA,QACF;AACA,cAAM,MAAM,OAAO,oBAAoB;AACvC,eAAO,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,QAAQ,GAAG,CAAC;AACzD,eAAO,SAAS,KAAK,IAAI,GAAG,KAAK,MAAM,OAAO,SAAS,GAAG,CAAC;AAC3D,uBAAe,WAAW;AAAA,UACxB,YAAY;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,YACX,OAAO;AAAA,YACP,oBAAoB;AAAA,UACtB;AAAA,UACA;AAAA,QACF,CAAC;AACD,cAAM,cAAc,MAAM,cAAc,SAAS,IAC7C,aAAa;AAAA,UACX,YAAY;AAAA,YACV,OAAO,MAAM;AAAA,YACb,UAAU,MAAM;AAAA,UAClB;AAAA,UACA,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,MAAM;AAAA,cACJ,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,QAAQ;AAAA,cACR,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA,OAAO,MAAM,cAAc,SAAS;AAAA,UACpC,OAAO;AAAA,YACL,QAAQ;AAAA,UACV;AAAA,UACA,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAON,WAAW;AAAA,UACX,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAUR,CAAC,IACD;AACJ,cAAM,cAAc,MAAM,cAAc,SAAS,IAC7C,aAAa;AAAA,UACX,YAAY;AAAA,YACV,OAAO,MAAM;AAAA,YACb,UAAU,MAAM;AAAA,UAClB;AAAA,UACA,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,MAAM;AAAA,cACJ,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,QAAQ;AAAA,cACR,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA,OAAO,MAAM,cAAc,SAAS;AAAA,UACpC,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,MAAM;AAAA,UACR;AAAA,UACA,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAON,WAAW;AAAA,UACX,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAUR,CAAC,IACD;AACJ,cAAM,cAAc,MAAM,cAAc,SAAS,IAC7C,aAAa;AAAA,UACX,YAAY;AAAA,YACV,OAAO,MAAM;AAAA,YACb,UAAU,MAAM;AAAA,UAClB;AAAA,UACA,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,MAAM;AAAA,cACJ,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,QAAQ;AAAA,cACR,UAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA,OAAO,MAAM,cAAc,SAAS;AAAA,UACpC,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,MAAM;AAAA,UACR;AAAA,UACA,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAON,WAAW;AAAA,UACX,WAAW;AAAA,UACX,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAUR,CAAC,IACD;AAEJ,qBAAa,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC;AACpD,sBAAc;AACd,sBAAc;AACd,sBAAc;AACd,YAAI,CAAC,WAAW;AACd,mBAAS,IAAI;AACb,oBAAU,KAAK;AAAA,QACjB;AAAA,MACF,QAAQ;AACN,YAAI,CAAC,WAAW;AACd,mBAAS,KAAK;AACd,oBAAU,IAAI;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAEA,aAAS,KAAK;AACd,cAAU,KAAK;AACf,gBAAY;AAEZ,WAAO,MAAM;AACX,kBAAY;AACZ,oBAAc,QAAQ;AAAA,IACxB;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,uBAAuB,aAAa,UAAU,CAAC;AAErD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAY,MAAM,SAAS,MAAM,QAAQ;AAAA,MACzC,MAAK;AAAA,MACL,OAAO;AAAA,QACL;AAAA,QACA,QAAQ,YAAY,KAAK,EAAE,YAAY,MAAM,gBAAgB,SAAS,aAAa,WAAW;AAAA,QAC9F,WAAW;AAAA,QACX;AAAA,QACA,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,eAAe;AAAA,QACf,UAAU;AAAA,QACV,OAAO;AAAA,MACT;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,OAAO;AAAA,cACL,SAAS,uBAAuB,SAAS;AAAA,cACzC,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,UAAU;AAAA,cACV,OAAO;AAAA,YACT;AAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,OAAO,EAAE,SAAS,SAAS,QAAQ,QAAQ,OAAO,GAAG,UAAU,YAAY,OAAO,OAAO;AAAA,YACzF,SAAS,OAAO,OAAO,KAAK,IAAI,OAAO,MAAM;AAAA,YAE5C;AAAA,qCAAuB,WAAW;AAAA,cAClC;AAAA;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ,GAAG,CAAC,MAAM,SACR,KAAK,UAAU,KAAK,SACjB,KAAK,YAAY,KAAK,WACtB,KAAK,eAAe,KAAK,cACzB,KAAK,gBAAgB,KAAK,eAC1B,KAAK,eAAe,KAAK,cACzB,KAAK,kBAAkB,KAAK,iBAC5B,KAAK,kBAAkB,KAAK,iBAC5B,KAAK,OAAO,UAAU,KAAK,OAAO,SAClC,KAAK,OAAO,WAAW,KAAK,OAAO,UACnC,KAAK,OAAO,KAAK,SAAS,KAAK,OAAO,KAAK,QAC3C,KAAK,OAAO,KAAK,QAAQ,KAAK,OAAO,KAAK,OAC1C,KAAK,OAAO,KAAK,UAAU,KAAK,OAAO,KAAK,SAC5C,KAAK,OAAO,KAAK,WAAW,KAAK,OAAO,KAAK,UAC7C,KAAK,YAAY,KAAK,WACtB,KAAK,aAAa,KAAK,QAC3B;","names":["d","MemoSurfaceChartComposite"]}
|