@extend-ai/react-xlsx 0.20.3 → 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.
Files changed (107) hide show
  1. package/dist/{browser-KWIEUO2X.js → browser-IQ4UDS5M.js} +8 -27
  2. package/dist/{browser-KWIEUO2X.js.map → browser-IQ4UDS5M.js.map} +1 -1
  3. package/dist/{browser-B73UAN6E.cjs → browser-S6E2BS5S.cjs} +8 -28
  4. package/dist/browser-S6E2BS5S.cjs.map +1 -0
  5. package/dist/{chart-renderer-XBF7EPUS.js → chart-renderer-4HTNG3SX.js} +94 -180
  6. package/dist/chart-renderer-4HTNG3SX.js.map +1 -0
  7. package/dist/{chart-renderer-ZLJVPLGN.js → chart-renderer-5IN2B3YS.js} +86 -172
  8. package/dist/chart-renderer-5IN2B3YS.js.map +1 -0
  9. package/dist/{chart-renderer-2EKXNHUD.cjs → chart-renderer-6CWSXOSC.cjs} +324 -410
  10. package/dist/chart-renderer-6CWSXOSC.cjs.map +1 -0
  11. package/dist/{chart-renderer-W7XW24JI.cjs → chart-renderer-H4BLRO5P.cjs} +321 -407
  12. package/dist/chart-renderer-H4BLRO5P.cjs.map +1 -0
  13. package/dist/chunk-GX5LAENE.cjs +108 -0
  14. package/dist/chunk-GX5LAENE.cjs.map +1 -0
  15. package/dist/{chunk-HEEFCVWS.js → chunk-H62SZBEY.js} +401 -132
  16. package/dist/chunk-H62SZBEY.js.map +1 -0
  17. package/dist/{chunk-VG4JELEQ.js → chunk-IISMO3AX.js} +30 -15
  18. package/dist/chunk-IISMO3AX.js.map +1 -0
  19. package/dist/{chunk-XISBYOD5.cjs → chunk-KQSUAIZD.cjs} +1168 -899
  20. package/dist/chunk-KQSUAIZD.cjs.map +1 -0
  21. package/dist/{chunk-HKMFMIKE.js → chunk-LZXL5E4W.js} +16 -7
  22. package/dist/chunk-LZXL5E4W.js.map +1 -0
  23. package/dist/chunk-MYN475JP.cjs +32 -0
  24. package/dist/chunk-MYN475JP.cjs.map +1 -0
  25. package/dist/{chunk-WGRRI25I.cjs → chunk-NAYVSTCX.cjs} +22 -9
  26. package/dist/chunk-NAYVSTCX.cjs.map +1 -0
  27. package/dist/chunk-PK3MCNDK.js +32 -0
  28. package/dist/chunk-PK3MCNDK.js.map +1 -0
  29. package/dist/full-3FSPB3R6.cjs +212 -0
  30. package/dist/full-3FSPB3R6.cjs.map +1 -0
  31. package/dist/full-GPY27HZY.js +209 -0
  32. package/dist/full-GPY27HZY.js.map +1 -0
  33. package/dist/index.cjs +834 -602
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +57 -1
  36. package/dist/index.d.ts +57 -1
  37. package/dist/index.js +347 -115
  38. package/dist/index.js.map +1 -1
  39. package/dist/{internal-BJsg5os3.d.cts → internal-Cks9H21d.d.cts} +56 -1
  40. package/dist/{internal-BJsg5os3.d.ts → internal-Cks9H21d.d.ts} +56 -1
  41. package/dist/internal.cjs +3 -3
  42. package/dist/internal.d.cts +1 -1
  43. package/dist/internal.d.ts +1 -1
  44. package/dist/internal.js +2 -2
  45. package/dist/office_charts_bg.wasm +0 -0
  46. package/dist/office_charts_full_bg.wasm +0 -0
  47. package/dist/payload-B55ZKNYO.js +6 -0
  48. package/dist/payload-B55ZKNYO.js.map +1 -0
  49. package/dist/payload-E2KM77DZ.js +6 -0
  50. package/dist/payload-E2KM77DZ.js.map +1 -0
  51. package/dist/payload-K4S5RLJN.cjs +8 -0
  52. package/dist/payload-K4S5RLJN.cjs.map +1 -0
  53. package/dist/payload-PL4646XV.cjs +8 -0
  54. package/dist/payload-PL4646XV.cjs.map +1 -0
  55. package/dist/{shared-chart-3STFRVWT.js → shared-chart-5KTGZEZ5.js} +38 -20
  56. package/dist/shared-chart-5KTGZEZ5.js.map +1 -0
  57. package/dist/{shared-chart-DVC5S2P6.cjs → shared-chart-ACR4M7BP.cjs} +37 -20
  58. package/dist/shared-chart-ACR4M7BP.cjs.map +1 -0
  59. package/dist/{shared-chart-BFQNYOIQ.js → shared-chart-EGN5JTKT.js} +37 -20
  60. package/dist/shared-chart-EGN5JTKT.js.map +1 -0
  61. package/dist/{shared-chart-MFQSQG4K.cjs → shared-chart-XAV7VA45.cjs} +37 -19
  62. package/dist/shared-chart-XAV7VA45.cjs.map +1 -0
  63. package/dist/{surface-regl-R2N54JT2.js → surface-webgl-2ZZ6JQR2.js} +87 -151
  64. package/dist/surface-webgl-2ZZ6JQR2.js.map +1 -0
  65. package/dist/{surface-regl-BBJ6OIKK.cjs → surface-webgl-3HS6VBCK.cjs} +88 -152
  66. package/dist/surface-webgl-3HS6VBCK.cjs.map +1 -0
  67. package/dist/{surface-regl-7CDGGVDG.js → surface-webgl-4DQXDDXU.js} +87 -151
  68. package/dist/surface-webgl-4DQXDDXU.js.map +1 -0
  69. package/dist/{surface-regl-SUJ2TFZA.cjs → surface-webgl-SVYD564V.cjs} +88 -152
  70. package/dist/surface-webgl-SVYD564V.cjs.map +1 -0
  71. package/dist/vanilla.cjs +3 -3
  72. package/dist/vanilla.d.cts +2 -2
  73. package/dist/vanilla.d.ts +2 -2
  74. package/dist/vanilla.js +2 -2
  75. package/dist/xlsx-worker.js +298 -92
  76. package/dist/xlsx-worker.js.map +1 -1
  77. package/package.json +6 -15
  78. package/dist/browser-B73UAN6E.cjs.map +0 -1
  79. package/dist/chart-renderer-2EKXNHUD.cjs.map +0 -1
  80. package/dist/chart-renderer-W7XW24JI.cjs.map +0 -1
  81. package/dist/chart-renderer-XBF7EPUS.js.map +0 -1
  82. package/dist/chart-renderer-ZLJVPLGN.js.map +0 -1
  83. package/dist/chunk-6IGWCJU5.cjs +0 -90
  84. package/dist/chunk-6IGWCJU5.cjs.map +0 -1
  85. package/dist/chunk-HEEFCVWS.js.map +0 -1
  86. package/dist/chunk-HKMFMIKE.js.map +0 -1
  87. package/dist/chunk-VG4JELEQ.js.map +0 -1
  88. package/dist/chunk-WGRRI25I.cjs.map +0 -1
  89. package/dist/chunk-XISBYOD5.cjs.map +0 -1
  90. package/dist/payload-JBPE7GEG.cjs +0 -8
  91. package/dist/payload-JBPE7GEG.cjs.map +0 -1
  92. package/dist/payload-KYNCVJT5.js +0 -6
  93. package/dist/payload-KYNCVJT5.js.map +0 -1
  94. package/dist/region-map-geography-24TXETDP.cjs +0 -184
  95. package/dist/region-map-geography-24TXETDP.cjs.map +0 -1
  96. package/dist/region-map-geography-OR6DHAF7.js +0 -182
  97. package/dist/region-map-geography-OR6DHAF7.js.map +0 -1
  98. package/dist/shared-chart-3STFRVWT.js.map +0 -1
  99. package/dist/shared-chart-BFQNYOIQ.js.map +0 -1
  100. package/dist/shared-chart-DVC5S2P6.cjs.map +0 -1
  101. package/dist/shared-chart-MFQSQG4K.cjs.map +0 -1
  102. package/dist/surface-regl-7CDGGVDG.js.map +0 -1
  103. package/dist/surface-regl-BBJ6OIKK.cjs.map +0 -1
  104. package/dist/surface-regl-R2N54JT2.js.map +0 -1
  105. package/dist/surface-regl-SUJ2TFZA.cjs.map +0 -1
  106. package/dist/world-atlas-LICENSE.txt +0 -13
  107. /package/dist/{us-atlas-LICENSE.txt → rust-office-charts-MAP-DATA-LICENSE.txt} +0 -0
@@ -5,7 +5,7 @@ import {
5
5
 
6
6
  // src/shared-chart.tsx
7
7
  import * as React from "react";
8
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
9
  var svgNamespace = "http://www.w3.org/2000/svg";
10
10
  var allowedElements = /* @__PURE__ */ new Set([
11
11
  "svg",
@@ -19,6 +19,8 @@ var allowedElements = /* @__PURE__ */ new Set([
19
19
  "line",
20
20
  "polyline",
21
21
  "polygon",
22
+ "title",
23
+ "desc",
22
24
  "text",
23
25
  "tspan",
24
26
  "linearGradient",
@@ -67,13 +69,14 @@ var plainAttributes = /* @__PURE__ */ new Set([
67
69
  "gradientTransform",
68
70
  "patternUnits",
69
71
  "patternContentUnits",
72
+ "pointer-events",
70
73
  "data-chart-kind",
71
74
  "data-chart-series",
72
75
  "data-chart-point",
73
76
  "data-chart-x",
74
77
  "data-chart-y"
75
78
  ]);
76
- function safeChartSvg(markup, prefix) {
79
+ function safeChartSvg(markup, prefix, seriesMap) {
77
80
  const svg = new DOMParser().parseFromString(markup, "image/svg+xml").documentElement;
78
81
  if (svg.localName !== "svg" || svg.namespaceURI !== svgNamespace) return null;
79
82
  for (const node of [svg, ...Array.from(svg.querySelectorAll("*"))]) {
@@ -99,7 +102,11 @@ function safeChartSvg(markup, prefix) {
99
102
  node.removeAttribute(name);
100
103
  }
101
104
  if (node.hasAttribute("data-chart-series")) {
102
- node.setAttribute("data-xlsx-chart-series-index", node.getAttribute("data-chart-series"));
105
+ const sourceSeries = Number(node.getAttribute("data-chart-series"));
106
+ const series = seriesMap?.[sourceSeries] ?? sourceSeries;
107
+ if (!Number.isInteger(series) || series < 0) return null;
108
+ node.setAttribute("data-chart-series", String(series));
109
+ node.setAttribute("data-xlsx-chart-series-index", String(series));
103
110
  const point = node.getAttribute("data-chart-point");
104
111
  if (point != null) node.setAttribute("data-xlsx-chart-point-index", point);
105
112
  const kind = node.getAttribute("data-chart-kind");
@@ -126,22 +133,33 @@ function renderSharedChart(renderer, chart, source, width, height, prefix) {
126
133
  fontFamily: chart.fontFamily,
127
134
  data: {
128
135
  title: chart.title,
129
- series: chart.series.map((series) => ({
130
- chartType: source.kind,
131
- name: series.name,
132
- points: Array.from({ length: Math.max(series.values.length, series.categories.length) }, (_, index) => {
133
- const value = series.values[index];
134
- const label = series.categories[index];
135
- return {
136
- index,
137
- value: value == null ? null : String(value),
138
- categories: series.categories.length || series.categoriesRef?.formula ? [{ level: 0, label: label == null ? "" : String(label) }] : []
139
- };
140
- })
141
- }))
136
+ series: (source.sourceSeries ?? chart.series).map((series, ordinal) => {
137
+ const chartType = source.seriesTypes?.[ordinal] ?? source.kind;
138
+ const xy = chartType === "scatter" || chartType === "bubble";
139
+ const indexedX = source.indexedXSeries?.[ordinal] === true;
140
+ const hierarchy = series.raw?.chartExHierarchyCategories;
141
+ const colorStrings = series.raw?.chartExColorStrings;
142
+ return {
143
+ chartType,
144
+ name: series.name,
145
+ points: Array.from({ length: Math.max(series.values.length, indexedX ? 0 : series.categories.length, series.bubbleSizes?.length ?? 0) }, (_, index) => {
146
+ const value = series.values[index];
147
+ const label = series.categories[index];
148
+ const bubble = series.bubbleSizes?.[index];
149
+ return {
150
+ index,
151
+ value: xy ? void 0 : colorStrings?.[index] ?? (value == null ? null : String(value)),
152
+ x: indexedX ? String(index + 1) : xy && label != null ? String(label) : void 0,
153
+ y: xy && value != null ? String(value) : void 0,
154
+ bubbleSize: bubble == null ? void 0 : String(bubble),
155
+ categories: xy ? [] : hierarchy?.[index]?.length ? [...hierarchy[index]].reverse().map((label2, level) => ({ level, label: label2 })) : series.categories.length || series.categoriesRef?.formula ? [{ level: 0, label: label == null ? "" : String(label) }] : []
156
+ };
157
+ })
158
+ };
159
+ })
142
160
  }
143
161
  });
144
- return svg ? safeChartSvg(svg, prefix) : null;
162
+ return svg ? safeChartSvg(svg, prefix, source.sourceSeries?.map((series) => chart.series.findIndex((candidate) => candidate.id === series.id))) : null;
145
163
  } catch {
146
164
  return null;
147
165
  }
@@ -150,7 +168,7 @@ function selectionHandles(svg, chartId, selected) {
150
168
  if (!selected || selected.chartId !== chartId || selected.kind === "chart") return null;
151
169
  return Array.from(svg.querySelectorAll("[data-chart-point]")).map((node, index) => {
152
170
  if (Number(node.getAttribute("data-chart-series")) !== selected.seriesIndex || selected.kind === "point" && Number(node.getAttribute("data-chart-point")) !== selected.pointIndex) return null;
153
- if (node.getAttribute("data-chart-kind") === "bar") {
171
+ if (node.localName === "rect") {
154
172
  return renderSelectionRectHandles(
155
173
  String(index),
156
174
  Number(node.getAttribute("x")),
@@ -191,7 +209,7 @@ function SharedChartSvg(props) {
191
209
  [svg, chart.id, selectedChartElement]
192
210
  );
193
211
  const { handlePointerDown, handleDoubleClick } = useChartEvents(props);
194
- if (!svg) return /* @__PURE__ */ jsx(Fragment, { children: fallback });
212
+ if (!svg) return /* @__PURE__ */ jsx("div", { "data-xlsx-chart-fallback": "unsupported", style: { width: "100%", height: "100%" }, children: fallback });
195
213
  return /* @__PURE__ */ jsxs(
196
214
  "svg",
197
215
  {
@@ -212,4 +230,4 @@ function SharedChartSvg(props) {
212
230
  export {
213
231
  SharedChartSvg
214
232
  };
215
- //# sourceMappingURL=shared-chart-3STFRVWT.js.map
233
+ //# sourceMappingURL=shared-chart-5KTGZEZ5.js.map
@@ -0,0 +1 @@
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 \"title\", \"desc\", \"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 \"pointer-events\", \"data-chart-kind\", \"data-chart-series\", \"data-chart-point\", \"data-chart-x\", \"data-chart-y\"\n]);\n\nfunction safeChartSvg(markup: string, prefix: string, seriesMap?: number[]) {\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 const sourceSeries = Number(node.getAttribute(\"data-chart-series\"));\n const series = seriesMap?.[sourceSeries] ?? sourceSeries;\n if (!Number.isInteger(series) || series < 0) return null;\n node.setAttribute(\"data-chart-series\", String(series));\n node.setAttribute(\"data-xlsx-chart-series-index\", String(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: (source.sourceSeries ?? chart.series).map((series, ordinal) => {\n const chartType = source.seriesTypes?.[ordinal] ?? source.kind;\n const xy = chartType === \"scatter\" || chartType === \"bubble\";\n const indexedX = source.indexedXSeries?.[ordinal] === true;\n const hierarchy = series.raw?.chartExHierarchyCategories as string[][] | undefined;\n const colorStrings = series.raw?.chartExColorStrings as Array<string | null> | undefined;\n return {\n chartType,\n name: series.name,\n points: Array.from({ length: Math.max(series.values.length, indexedX ? 0 : series.categories.length, series.bubbleSizes?.length ?? 0) }, (_, index) => {\n const value = series.values[index];\n const label = series.categories[index];\n const bubble = series.bubbleSizes?.[index];\n return {\n index,\n value: xy ? undefined : colorStrings?.[index] ?? (value == null ? null : String(value)),\n x: indexedX ? String(index + 1) : xy && label != null ? String(label) : undefined,\n y: xy && value != null ? String(value) : undefined,\n bubbleSize: bubble == null ? undefined : String(bubble),\n categories: xy ? [] : hierarchy?.[index]?.length\n ? [...hierarchy[index]].reverse().map((label, level) => ({level, label}))\n : series.categories.length || series.categoriesRef?.formula\n ? [{ level: 0, label: label == null ? \"\" : String(label) }]\n : []\n };\n })\n };\n })\n }\n });\n return svg ? safeChartSvg(svg, prefix, source.sourceSeries?.map(series => chart.series.findIndex(candidate => candidate.id === series.id))) : 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.localName === \"rect\") {\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 <div data-xlsx-chart-fallback=\"unsupported\" style={{width:\"100%\",height:\"100%\"}}>{fallback}</div>;\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":["label"]}
@@ -8,7 +8,6 @@ var _chunkM55TBS4Xcjs = require('./chunk-M55TBS4X.cjs');
8
8
 
9
9
 
10
10
 
11
-
12
11
  var _chunkAZWBTFJIcjs = require('./chunk-AZWBTFJI.cjs');
13
12
  require('./chunk-AD4CGQN2.cjs');
14
13
 
@@ -26,6 +25,8 @@ var allowedElements = /* @__PURE__ */ new Set([
26
25
  "line",
27
26
  "polyline",
28
27
  "polygon",
28
+ "title",
29
+ "desc",
29
30
  "text",
30
31
  "tspan",
31
32
  "linearGradient",
@@ -74,13 +75,14 @@ var plainAttributes = /* @__PURE__ */ new Set([
74
75
  "gradientTransform",
75
76
  "patternUnits",
76
77
  "patternContentUnits",
78
+ "pointer-events",
77
79
  "data-chart-kind",
78
80
  "data-chart-series",
79
81
  "data-chart-point",
80
82
  "data-chart-x",
81
83
  "data-chart-y"
82
84
  ]);
83
- function safeChartSvg(markup, prefix) {
85
+ function safeChartSvg(markup, prefix, seriesMap) {
84
86
  const svg = new DOMParser().parseFromString(markup, "image/svg+xml").documentElement;
85
87
  if (svg.localName !== "svg" || svg.namespaceURI !== svgNamespace) return null;
86
88
  for (const node of [svg, ...Array.from(svg.querySelectorAll("*"))]) {
@@ -106,7 +108,11 @@ function safeChartSvg(markup, prefix) {
106
108
  node.removeAttribute(name);
107
109
  }
108
110
  if (node.hasAttribute("data-chart-series")) {
109
- node.setAttribute("data-xlsx-chart-series-index", node.getAttribute("data-chart-series"));
111
+ const sourceSeries = Number(node.getAttribute("data-chart-series"));
112
+ const series = _nullishCoalesce(_optionalChain([seriesMap, 'optionalAccess', _3 => _3[sourceSeries]]), () => ( sourceSeries));
113
+ if (!Number.isInteger(series) || series < 0) return null;
114
+ node.setAttribute("data-chart-series", String(series));
115
+ node.setAttribute("data-xlsx-chart-series-index", String(series));
110
116
  const point = node.getAttribute("data-chart-point");
111
117
  if (point != null) node.setAttribute("data-xlsx-chart-point-index", point);
112
118
  const kind = node.getAttribute("data-chart-kind");
@@ -133,22 +139,33 @@ function renderSharedChart(renderer, chart, source, width, height, prefix) {
133
139
  fontFamily: chart.fontFamily,
134
140
  data: {
135
141
  title: chart.title,
136
- series: chart.series.map((series) => ({
137
- chartType: source.kind,
138
- name: series.name,
139
- points: Array.from({ length: Math.max(series.values.length, series.categories.length) }, (_2, index) => {
140
- const value = series.values[index];
141
- const label = series.categories[index];
142
- return {
143
- index,
144
- value: value == null ? null : String(value),
145
- categories: series.categories.length || _optionalChain([series, 'access', _3 => _3.categoriesRef, 'optionalAccess', _4 => _4.formula]) ? [{ level: 0, label: label == null ? "" : String(label) }] : []
146
- };
147
- })
148
- }))
142
+ series: (_nullishCoalesce(source.sourceSeries, () => ( chart.series))).map((series, ordinal) => {
143
+ const chartType = _nullishCoalesce(_optionalChain([source, 'access', _4 => _4.seriesTypes, 'optionalAccess', _5 => _5[ordinal]]), () => ( source.kind));
144
+ const xy = chartType === "scatter" || chartType === "bubble";
145
+ const indexedX = _optionalChain([source, 'access', _6 => _6.indexedXSeries, 'optionalAccess', _7 => _7[ordinal]]) === true;
146
+ const hierarchy = _optionalChain([series, 'access', _8 => _8.raw, 'optionalAccess', _9 => _9.chartExHierarchyCategories]);
147
+ const colorStrings = _optionalChain([series, 'access', _10 => _10.raw, 'optionalAccess', _11 => _11.chartExColorStrings]);
148
+ return {
149
+ chartType,
150
+ name: series.name,
151
+ points: Array.from({ length: Math.max(series.values.length, indexedX ? 0 : series.categories.length, _nullishCoalesce(_optionalChain([series, 'access', _12 => _12.bubbleSizes, 'optionalAccess', _13 => _13.length]), () => ( 0))) }, (_2, index) => {
152
+ const value = series.values[index];
153
+ const label = series.categories[index];
154
+ const bubble = _optionalChain([series, 'access', _14 => _14.bubbleSizes, 'optionalAccess', _15 => _15[index]]);
155
+ return {
156
+ index,
157
+ value: xy ? void 0 : _nullishCoalesce(_optionalChain([colorStrings, 'optionalAccess', _16 => _16[index]]), () => ( (value == null ? null : String(value)))),
158
+ x: indexedX ? String(index + 1) : xy && label != null ? String(label) : void 0,
159
+ y: xy && value != null ? String(value) : void 0,
160
+ bubbleSize: bubble == null ? void 0 : String(bubble),
161
+ categories: xy ? [] : _optionalChain([hierarchy, 'optionalAccess', _17 => _17[index], 'optionalAccess', _18 => _18.length]) ? [...hierarchy[index]].reverse().map((label2, level) => ({ level, label: label2 })) : series.categories.length || _optionalChain([series, 'access', _19 => _19.categoriesRef, 'optionalAccess', _20 => _20.formula]) ? [{ level: 0, label: label == null ? "" : String(label) }] : []
162
+ };
163
+ })
164
+ };
165
+ })
149
166
  }
150
167
  });
151
- return svg ? safeChartSvg(svg, prefix) : null;
168
+ return svg ? safeChartSvg(svg, prefix, _optionalChain([source, 'access', _21 => _21.sourceSeries, 'optionalAccess', _22 => _22.map, 'call', _23 => _23((series) => chart.series.findIndex((candidate) => candidate.id === series.id))])) : null;
152
169
  } catch (e) {
153
170
  return null;
154
171
  }
@@ -157,7 +174,7 @@ function selectionHandles(svg, chartId, selected) {
157
174
  if (!selected || selected.chartId !== chartId || selected.kind === "chart") return null;
158
175
  return Array.from(svg.querySelectorAll("[data-chart-point]")).map((node, index) => {
159
176
  if (Number(node.getAttribute("data-chart-series")) !== selected.seriesIndex || selected.kind === "point" && Number(node.getAttribute("data-chart-point")) !== selected.pointIndex) return null;
160
- if (node.getAttribute("data-chart-kind") === "bar") {
177
+ if (node.localName === "rect") {
161
178
  return _chunkM55TBS4Xcjs.renderSelectionRectHandles.call(void 0,
162
179
  String(index),
163
180
  Number(node.getAttribute("x")),
@@ -198,7 +215,7 @@ function SharedChartSvg(props) {
198
215
  [svg, chart.id, selectedChartElement]
199
216
  );
200
217
  const { handlePointerDown, handleDoubleClick } = _chunkM55TBS4Xcjs.useChartEvents.call(void 0, props);
201
- if (!svg) return /* @__PURE__ */ _chunkAZWBTFJIcjs.u.call(void 0, _chunkAZWBTFJIcjs.S, { children: fallback });
218
+ if (!svg) return /* @__PURE__ */ _chunkAZWBTFJIcjs.u.call(void 0, "div", { "data-xlsx-chart-fallback": "unsupported", style: { width: "100%", height: "100%" }, children: fallback });
202
219
  return /* @__PURE__ */ _chunkAZWBTFJIcjs.u.call(void 0,
203
220
  "svg",
204
221
  {
@@ -219,4 +236,4 @@ function SharedChartSvg(props) {
219
236
 
220
237
 
221
238
  exports.SharedChartSvg = SharedChartSvg;
222
- //# sourceMappingURL=shared-chart-DVC5S2P6.cjs.map
239
+ //# sourceMappingURL=shared-chart-ACR4M7BP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/shared-chart-ACR4M7BP.cjs","../src/shared-chart.tsx"],"names":["_","label"],"mappings":"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","file":"/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/shared-chart-ACR4M7BP.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 \"title\", \"desc\", \"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 \"pointer-events\", \"data-chart-kind\", \"data-chart-series\", \"data-chart-point\", \"data-chart-x\", \"data-chart-y\"\n]);\n\nfunction safeChartSvg(markup: string, prefix: string, seriesMap?: number[]) {\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 const sourceSeries = Number(node.getAttribute(\"data-chart-series\"));\n const series = seriesMap?.[sourceSeries] ?? sourceSeries;\n if (!Number.isInteger(series) || series < 0) return null;\n node.setAttribute(\"data-chart-series\", String(series));\n node.setAttribute(\"data-xlsx-chart-series-index\", String(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: (source.sourceSeries ?? chart.series).map((series, ordinal) => {\n const chartType = source.seriesTypes?.[ordinal] ?? source.kind;\n const xy = chartType === \"scatter\" || chartType === \"bubble\";\n const indexedX = source.indexedXSeries?.[ordinal] === true;\n const hierarchy = series.raw?.chartExHierarchyCategories as string[][] | undefined;\n const colorStrings = series.raw?.chartExColorStrings as Array<string | null> | undefined;\n return {\n chartType,\n name: series.name,\n points: Array.from({ length: Math.max(series.values.length, indexedX ? 0 : series.categories.length, series.bubbleSizes?.length ?? 0) }, (_, index) => {\n const value = series.values[index];\n const label = series.categories[index];\n const bubble = series.bubbleSizes?.[index];\n return {\n index,\n value: xy ? undefined : colorStrings?.[index] ?? (value == null ? null : String(value)),\n x: indexedX ? String(index + 1) : xy && label != null ? String(label) : undefined,\n y: xy && value != null ? String(value) : undefined,\n bubbleSize: bubble == null ? undefined : String(bubble),\n categories: xy ? [] : hierarchy?.[index]?.length\n ? [...hierarchy[index]].reverse().map((label, level) => ({level, label}))\n : series.categories.length || series.categoriesRef?.formula\n ? [{ level: 0, label: label == null ? \"\" : String(label) }]\n : []\n };\n })\n };\n })\n }\n });\n return svg ? safeChartSvg(svg, prefix, source.sourceSeries?.map(series => chart.series.findIndex(candidate => candidate.id === series.id))) : 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.localName === \"rect\") {\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 <div data-xlsx-chart-fallback=\"unsupported\" style={{width:\"100%\",height:\"100%\"}}>{fallback}</div>;\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"]}
@@ -4,7 +4,6 @@ import {
4
4
  } from "./chunk-AJT23BDP.js";
5
5
  import {
6
6
  A,
7
- S,
8
7
  T,
9
8
  _,
10
9
  g,
@@ -25,6 +24,8 @@ var allowedElements = /* @__PURE__ */ new Set([
25
24
  "line",
26
25
  "polyline",
27
26
  "polygon",
27
+ "title",
28
+ "desc",
28
29
  "text",
29
30
  "tspan",
30
31
  "linearGradient",
@@ -73,13 +74,14 @@ var plainAttributes = /* @__PURE__ */ new Set([
73
74
  "gradientTransform",
74
75
  "patternUnits",
75
76
  "patternContentUnits",
77
+ "pointer-events",
76
78
  "data-chart-kind",
77
79
  "data-chart-series",
78
80
  "data-chart-point",
79
81
  "data-chart-x",
80
82
  "data-chart-y"
81
83
  ]);
82
- function safeChartSvg(markup, prefix) {
84
+ function safeChartSvg(markup, prefix, seriesMap) {
83
85
  const svg = new DOMParser().parseFromString(markup, "image/svg+xml").documentElement;
84
86
  if (svg.localName !== "svg" || svg.namespaceURI !== svgNamespace) return null;
85
87
  for (const node of [svg, ...Array.from(svg.querySelectorAll("*"))]) {
@@ -105,7 +107,11 @@ function safeChartSvg(markup, prefix) {
105
107
  node.removeAttribute(name);
106
108
  }
107
109
  if (node.hasAttribute("data-chart-series")) {
108
- node.setAttribute("data-xlsx-chart-series-index", node.getAttribute("data-chart-series"));
110
+ const sourceSeries = Number(node.getAttribute("data-chart-series"));
111
+ const series = seriesMap?.[sourceSeries] ?? sourceSeries;
112
+ if (!Number.isInteger(series) || series < 0) return null;
113
+ node.setAttribute("data-chart-series", String(series));
114
+ node.setAttribute("data-xlsx-chart-series-index", String(series));
109
115
  const point = node.getAttribute("data-chart-point");
110
116
  if (point != null) node.setAttribute("data-xlsx-chart-point-index", point);
111
117
  const kind = node.getAttribute("data-chart-kind");
@@ -132,22 +138,33 @@ function renderSharedChart(renderer, chart, source, width, height, prefix) {
132
138
  fontFamily: chart.fontFamily,
133
139
  data: {
134
140
  title: chart.title,
135
- series: chart.series.map((series) => ({
136
- chartType: source.kind,
137
- name: series.name,
138
- points: Array.from({ length: Math.max(series.values.length, series.categories.length) }, (_2, index) => {
139
- const value = series.values[index];
140
- const label = series.categories[index];
141
- return {
142
- index,
143
- value: value == null ? null : String(value),
144
- categories: series.categories.length || series.categoriesRef?.formula ? [{ level: 0, label: label == null ? "" : String(label) }] : []
145
- };
146
- })
147
- }))
141
+ series: (source.sourceSeries ?? chart.series).map((series, ordinal) => {
142
+ const chartType = source.seriesTypes?.[ordinal] ?? source.kind;
143
+ const xy = chartType === "scatter" || chartType === "bubble";
144
+ const indexedX = source.indexedXSeries?.[ordinal] === true;
145
+ const hierarchy = series.raw?.chartExHierarchyCategories;
146
+ const colorStrings = series.raw?.chartExColorStrings;
147
+ return {
148
+ chartType,
149
+ name: series.name,
150
+ points: Array.from({ length: Math.max(series.values.length, indexedX ? 0 : series.categories.length, series.bubbleSizes?.length ?? 0) }, (_2, index) => {
151
+ const value = series.values[index];
152
+ const label = series.categories[index];
153
+ const bubble = series.bubbleSizes?.[index];
154
+ return {
155
+ index,
156
+ value: xy ? void 0 : colorStrings?.[index] ?? (value == null ? null : String(value)),
157
+ x: indexedX ? String(index + 1) : xy && label != null ? String(label) : void 0,
158
+ y: xy && value != null ? String(value) : void 0,
159
+ bubbleSize: bubble == null ? void 0 : String(bubble),
160
+ categories: xy ? [] : hierarchy?.[index]?.length ? [...hierarchy[index]].reverse().map((label2, level) => ({ level, label: label2 })) : series.categories.length || series.categoriesRef?.formula ? [{ level: 0, label: label == null ? "" : String(label) }] : []
161
+ };
162
+ })
163
+ };
164
+ })
148
165
  }
149
166
  });
150
- return svg ? safeChartSvg(svg, prefix) : null;
167
+ return svg ? safeChartSvg(svg, prefix, source.sourceSeries?.map((series) => chart.series.findIndex((candidate) => candidate.id === series.id))) : null;
151
168
  } catch {
152
169
  return null;
153
170
  }
@@ -156,7 +173,7 @@ function selectionHandles(svg, chartId, selected) {
156
173
  if (!selected || selected.chartId !== chartId || selected.kind === "chart") return null;
157
174
  return Array.from(svg.querySelectorAll("[data-chart-point]")).map((node, index) => {
158
175
  if (Number(node.getAttribute("data-chart-series")) !== selected.seriesIndex || selected.kind === "point" && Number(node.getAttribute("data-chart-point")) !== selected.pointIndex) return null;
159
- if (node.getAttribute("data-chart-kind") === "bar") {
176
+ if (node.localName === "rect") {
160
177
  return renderSelectionRectHandles(
161
178
  String(index),
162
179
  Number(node.getAttribute("x")),
@@ -197,7 +214,7 @@ function SharedChartSvg(props) {
197
214
  [svg, chart.id, selectedChartElement]
198
215
  );
199
216
  const { handlePointerDown, handleDoubleClick } = useChartEvents(props);
200
- if (!svg) return /* @__PURE__ */ u(S, { children: fallback });
217
+ if (!svg) return /* @__PURE__ */ u("div", { "data-xlsx-chart-fallback": "unsupported", style: { width: "100%", height: "100%" }, children: fallback });
201
218
  return /* @__PURE__ */ u(
202
219
  "svg",
203
220
  {
@@ -218,4 +235,4 @@ function SharedChartSvg(props) {
218
235
  export {
219
236
  SharedChartSvg
220
237
  };
221
- //# sourceMappingURL=shared-chart-BFQNYOIQ.js.map
238
+ //# sourceMappingURL=shared-chart-EGN5JTKT.js.map
@@ -0,0 +1 @@
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 \"title\", \"desc\", \"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 \"pointer-events\", \"data-chart-kind\", \"data-chart-series\", \"data-chart-point\", \"data-chart-x\", \"data-chart-y\"\n]);\n\nfunction safeChartSvg(markup: string, prefix: string, seriesMap?: number[]) {\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 const sourceSeries = Number(node.getAttribute(\"data-chart-series\"));\n const series = seriesMap?.[sourceSeries] ?? sourceSeries;\n if (!Number.isInteger(series) || series < 0) return null;\n node.setAttribute(\"data-chart-series\", String(series));\n node.setAttribute(\"data-xlsx-chart-series-index\", String(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: (source.sourceSeries ?? chart.series).map((series, ordinal) => {\n const chartType = source.seriesTypes?.[ordinal] ?? source.kind;\n const xy = chartType === \"scatter\" || chartType === \"bubble\";\n const indexedX = source.indexedXSeries?.[ordinal] === true;\n const hierarchy = series.raw?.chartExHierarchyCategories as string[][] | undefined;\n const colorStrings = series.raw?.chartExColorStrings as Array<string | null> | undefined;\n return {\n chartType,\n name: series.name,\n points: Array.from({ length: Math.max(series.values.length, indexedX ? 0 : series.categories.length, series.bubbleSizes?.length ?? 0) }, (_, index) => {\n const value = series.values[index];\n const label = series.categories[index];\n const bubble = series.bubbleSizes?.[index];\n return {\n index,\n value: xy ? undefined : colorStrings?.[index] ?? (value == null ? null : String(value)),\n x: indexedX ? String(index + 1) : xy && label != null ? String(label) : undefined,\n y: xy && value != null ? String(value) : undefined,\n bubbleSize: bubble == null ? undefined : String(bubble),\n categories: xy ? [] : hierarchy?.[index]?.length\n ? [...hierarchy[index]].reverse().map((label, level) => ({level, label}))\n : series.categories.length || series.categoriesRef?.formula\n ? [{ level: 0, label: label == null ? \"\" : String(label) }]\n : []\n };\n })\n };\n })\n }\n });\n return svg ? safeChartSvg(svg, prefix, source.sourceSeries?.map(series => chart.series.findIndex(candidate => candidate.id === series.id))) : 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.localName === \"rect\") {\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 <div data-xlsx-chart-fallback=\"unsupported\" style={{width:\"100%\",height:\"100%\"}}>{fallback}</div>;\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":";;;;;;;;;;;;;AAMA,IAAM,eAAe;AACrB,IAAM,kBAAkB,oBAAI,IAAI;AAAA,EAC9B;AAAA,EAAO;AAAA,EAAK;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAY;AAAA,EACzF;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAkB;AAAA,EAAkB;AAAA,EAAQ;AAChF,CAAC;AACD,IAAM,kBAAkB,oBAAI,IAAI;AAAA,EAC9B;AAAA,EAAK;AAAA,EAAK;AAAA,EAAS;AAAA,EAAU;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAK;AAAA,EAAM;AAAA,EAAM;AAAA,EAC9F;AAAA,EAAW;AAAA,EAAa;AAAA,EAAK;AAAA,EAAU;AAAA,EAAe;AAAA,EAAe;AAAA,EAAa;AAAA,EAClF;AAAA,EAAqB;AAAA,EAAkB;AAAA,EAAmB;AAAA,EAAgB;AAAA,EAC1E;AAAA,EAAW;AAAA,EAAgB;AAAA,EAAkB;AAAA,EAAa;AAAA,EAAmB;AAAA,EAAU;AAAA,EACvF;AAAA,EAAiB;AAAA,EAAqB;AAAA,EAAgB;AAAA,EACtD;AAAA,EAAkB;AAAA,EAAmB;AAAA,EAAqB;AAAA,EAAoB;AAAA,EAAgB;AAChG,CAAC;AAED,SAAS,aAAa,QAAgB,QAAgB,WAAsB;AAC1E,QAAM,MAAM,IAAI,UAAU,EAAE,gBAAgB,QAAQ,eAAe,EAAE;AACrE,MAAI,IAAI,cAAc,SAAS,IAAI,iBAAiB,aAAc,QAAO;AAGzE,aAAW,QAAQ,CAAC,KAAK,GAAG,MAAM,KAAK,IAAI,iBAAiB,GAAG,CAAC,CAAC,GAAG;AAClE,QAAI,KAAK,iBAAiB,gBAAgB,CAAC,gBAAgB,IAAI,KAAK,SAAS,EAAG,QAAO;AACvF,eAAW,EAAE,MAAM,MAAM,KAAK,MAAM,KAAK,KAAK,UAAU,GAAG;AACzD,UAAI,gBAAgB,IAAI,IAAI,KAAK,SAAS,QAAS;AACnD,UAAI,SAAS,QAAQ,WAAW,KAAK,KAAK,GAAG;AAC3C,aAAK,aAAa,MAAM,SAAS,KAAK;AACtC;AAAA,MACF;AACA,UAAI,SAAS,UAAU,oCAAoC,KAAK,KAAK,SAAS,KAAK,YAAY,KAAK,KAAK,GAAG;AAC1G,aAAK,aAAa,MAAM,MAAM,SAAS,MAAM,MAAM,CAAC,CAAC;AACrD;AAAA,MACF;AACA,UAAI,CAAC,QAAQ,UAAU,cAAc,WAAW,EAAE,SAAS,IAAI,GAAG;AAChE,cAAM,QAAQ,qBAAqB,KAAK,KAAK;AAC7C,YAAI,OAAO;AACT,eAAK,aAAa,MAAM,UAAU,SAAS,MAAM,CAAC,IAAI,GAAG;AACzD;AAAA,QACF;AACA,YAAI,8BAA8B,KAAK,KAAK,EAAG;AAAA,MACjD;AACA,WAAK,gBAAgB,IAAI;AAAA,IAC3B;AAEA,QAAI,KAAK,aAAa,mBAAmB,GAAG;AAC1C,YAAM,eAAe,OAAO,KAAK,aAAa,mBAAmB,CAAC;AAClE,YAAM,SAAS,YAAY,YAAY,KAAK;AAC5C,UAAI,CAAC,OAAO,UAAU,MAAM,KAAK,SAAS,EAAG,QAAO;AACpD,WAAK,aAAa,qBAAqB,OAAO,MAAM,CAAC;AACrD,WAAK,aAAa,gCAAgC,OAAO,MAAM,CAAC;AAChE,YAAM,QAAQ,KAAK,aAAa,kBAAkB;AAClD,UAAI,SAAS,KAAM,MAAK,aAAa,+BAA+B,KAAK;AACzE,YAAM,OAAO,KAAK,aAAa,iBAAiB;AAChD,UAAI,SAAS,MAAO,MAAK,aAAa,kCAAkC,aAAa;AACrF,UAAI,SAAS,cAAe,MAAK,aAAa,gCAAgC,IAAI;AAClF,YAAM,QAAS,KAAoB;AACnC,YAAM,SAAS;AACf,YAAM,gBAAgB;AAAA,IACxB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,UAAwB,OAAkB,QAA+B,OAAe,QAAgB,QAAgB;AACjJ,MAAI;AACF,UAAM,MAAM,SAAS,YAAY,OAAO,KAAK;AAAA,MAC3C,aAAa,OAAO;AAAA,MACpB,kBAAkB,OAAO;AAAA,MACzB,UAAU,OAAO;AAAA,MACjB,eAAe,OAAO;AAAA,MACtB;AAAA,MAAO;AAAA,MACP,aAAa;AAAA,MACb,qBAAqB;AAAA,MACrB,YAAY,MAAM;AAAA,MAClB,MAAM;AAAA,QACJ,OAAO,MAAM;AAAA,QACb,SAAS,OAAO,gBAAgB,MAAM,QAAQ,IAAI,CAAC,QAAQ,YAAY;AACrE,gBAAM,YAAY,OAAO,cAAc,OAAO,KAAK,OAAO;AAC1D,gBAAM,KAAK,cAAc,aAAa,cAAc;AACpD,gBAAM,WAAW,OAAO,iBAAiB,OAAO,MAAM;AACtD,gBAAM,YAAY,OAAO,KAAK;AAC9B,gBAAM,eAAe,OAAO,KAAK;AACjC,iBAAO;AAAA,YACL;AAAA,YACA,MAAM,OAAO;AAAA,YACb,QAAQ,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,OAAO,OAAO,QAAQ,WAAW,IAAI,OAAO,WAAW,QAAQ,OAAO,aAAa,UAAU,CAAC,EAAE,GAAG,CAACA,IAAG,UAAU;AACrJ,oBAAM,QAAQ,OAAO,OAAO,KAAK;AACjC,oBAAM,QAAQ,OAAO,WAAW,KAAK;AACrC,oBAAM,SAAS,OAAO,cAAc,KAAK;AACzC,qBAAO;AAAA,gBACL;AAAA,gBACA,OAAO,KAAK,SAAY,eAAe,KAAK,MAAM,SAAS,OAAO,OAAO,OAAO,KAAK;AAAA,gBACrF,GAAG,WAAW,OAAO,QAAQ,CAAC,IAAI,MAAM,SAAS,OAAO,OAAO,KAAK,IAAI;AAAA,gBACxE,GAAG,MAAM,SAAS,OAAO,OAAO,KAAK,IAAI;AAAA,gBACzC,YAAY,UAAU,OAAO,SAAY,OAAO,MAAM;AAAA,gBACtD,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,GAAG,SACtC,CAAC,GAAG,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,CAACC,QAAO,WAAW,EAAC,OAAO,OAAAA,OAAK,EAAE,IACtE,OAAO,WAAW,UAAU,OAAO,eAAe,UAChD,CAAC,EAAE,OAAO,GAAG,OAAO,SAAS,OAAO,KAAK,OAAO,KAAK,EAAE,CAAC,IACxD,CAAC;AAAA,cACT;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AACD,WAAO,MAAM,aAAa,KAAK,QAAQ,OAAO,cAAc,IAAI,YAAU,MAAM,OAAO,UAAU,eAAa,UAAU,OAAO,OAAO,EAAE,CAAC,CAAC,IAAI;AAAA,EAChJ,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,iBAAiB,KAAc,SAAiB,UAAwD;AAC/G,MAAI,CAAC,YAAY,SAAS,YAAY,WAAW,SAAS,SAAS,QAAS,QAAO;AACnF,SAAO,MAAM,KAAK,IAAI,iBAAiB,oBAAoB,CAAC,EAAE,IAAI,CAAC,MAAM,UAAU;AACjF,QAAI,OAAO,KAAK,aAAa,mBAAmB,CAAC,MAAM,SAAS,eAC1D,SAAS,SAAS,WAAW,OAAO,KAAK,aAAa,kBAAkB,CAAC,MAAM,SAAS,WAAa,QAAO;AAClH,QAAI,KAAK,cAAc,QAAQ;AAC7B,aAAO;AAAA,QAA2B,OAAO,KAAK;AAAA,QAAG,OAAO,KAAK,aAAa,GAAG,CAAC;AAAA,QAAG,OAAO,KAAK,aAAa,GAAG,CAAC;AAAA,QAC5G,OAAO,KAAK,aAAa,OAAO,CAAC;AAAA,QAAG,OAAO,KAAK,aAAa,QAAQ,CAAC;AAAA,MAAC;AAAA,IAC3E;AACA,QAAI,CAAC,KAAK,aAAa,cAAc,KAAK,CAAC,KAAK,aAAa,cAAc,EAAG,QAAO;AACrF,WAAO;AAAA,MAA2B,OAAO,KAAK;AAAA,MAAG,OAAO,KAAK,aAAa,cAAc,CAAC,IAAI;AAAA,MAC3F,OAAO,KAAK,aAAa,cAAc,CAAC,IAAI;AAAA,MAAG;AAAA,MAAG;AAAA,IAAC;AAAA,EACvD,CAAC;AACH;AAEO,SAAS,eAAe,OAI5B;AACD,QAAM,EAAE,OAAO,MAAM,UAAU,QAAQ,sBAAsB,SAAS,IAAI;AAC1E,QAAM,KAAW,EAAM;AACvB,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,KAAK;AACpC,QAAM,SAAS,KAAK,IAAI,GAAG,KAAK,MAAM;AACtC,QAAM,MAAY,EAAQ,MAAM;AAAA,IAAkB;AAAA,IAAU;AAAA,IAAO;AAAA,IAAQ;AAAA,IAAO;AAAA,IAChF,QAAQ,GAAG,QAAQ,WAAW,EAAE,IAAI;AAAA,EAAG,GAAG,CAAC,UAAU,OAAO,QAAQ,OAAO,QAAQ,EAAE,CAAC;AACxF,QAAM,WAAiB,EAAoB,IAAI;AAC/C,EAAM,EAAgB,MAAM;AAC1B,QAAI,SAAS,WAAW,IAAK,UAAS,QAAQ,gBAAgB,GAAG;AAAA,EACnE,GAAG,CAAC,GAAG,CAAC;AACR,QAAM,UAAgB;AAAA,IAAQ,MAAM,OAAO,iBAAiB,KAAK,MAAM,IAAI,oBAAoB;AAAA,IAC7F,CAAC,KAAK,MAAM,IAAI,oBAAoB;AAAA,EAAC;AACvC,QAAM,EAAE,mBAAmB,kBAAkB,IAAI,eAAe,KAAK;AACrE,MAAI,CAAC,IAAK,QAAO,kBAAC,SAAI,4BAAyB,eAAc,OAAO,EAAC,OAAM,QAAO,QAAO,OAAM,GAAI,oBAAS;AAC5G,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAY,MAAM,SAAS,MAAM,QAAQ;AAAA,MACzC,4BAAyB;AAAA,MACzB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,MAAK;AAAA,MACL,OAAO,EAAE,SAAS,SAAS,QAAQ,QAAQ,eAAe,QAAQ,OAAO,OAAO;AAAA,MAChF,SAAS,OAAO,KAAK,IAAI,MAAM;AAAA,MAE/B;AAAA,0BAAC,OAAE,KAAK,UAAU;AAAA,QACjB;AAAA;AAAA;AAAA,EACH;AAEJ;","names":["_","label"]}
@@ -20,6 +20,8 @@ var allowedElements = /* @__PURE__ */ new Set([
20
20
  "line",
21
21
  "polyline",
22
22
  "polygon",
23
+ "title",
24
+ "desc",
23
25
  "text",
24
26
  "tspan",
25
27
  "linearGradient",
@@ -68,13 +70,14 @@ var plainAttributes = /* @__PURE__ */ new Set([
68
70
  "gradientTransform",
69
71
  "patternUnits",
70
72
  "patternContentUnits",
73
+ "pointer-events",
71
74
  "data-chart-kind",
72
75
  "data-chart-series",
73
76
  "data-chart-point",
74
77
  "data-chart-x",
75
78
  "data-chart-y"
76
79
  ]);
77
- function safeChartSvg(markup, prefix) {
80
+ function safeChartSvg(markup, prefix, seriesMap) {
78
81
  const svg = new DOMParser().parseFromString(markup, "image/svg+xml").documentElement;
79
82
  if (svg.localName !== "svg" || svg.namespaceURI !== svgNamespace) return null;
80
83
  for (const node of [svg, ...Array.from(svg.querySelectorAll("*"))]) {
@@ -100,7 +103,11 @@ function safeChartSvg(markup, prefix) {
100
103
  node.removeAttribute(name);
101
104
  }
102
105
  if (node.hasAttribute("data-chart-series")) {
103
- node.setAttribute("data-xlsx-chart-series-index", node.getAttribute("data-chart-series"));
106
+ const sourceSeries = Number(node.getAttribute("data-chart-series"));
107
+ const series = _nullishCoalesce(_optionalChain([seriesMap, 'optionalAccess', _2 => _2[sourceSeries]]), () => ( sourceSeries));
108
+ if (!Number.isInteger(series) || series < 0) return null;
109
+ node.setAttribute("data-chart-series", String(series));
110
+ node.setAttribute("data-xlsx-chart-series-index", String(series));
104
111
  const point = node.getAttribute("data-chart-point");
105
112
  if (point != null) node.setAttribute("data-xlsx-chart-point-index", point);
106
113
  const kind = node.getAttribute("data-chart-kind");
@@ -127,22 +134,33 @@ function renderSharedChart(renderer, chart, source, width, height, prefix) {
127
134
  fontFamily: chart.fontFamily,
128
135
  data: {
129
136
  title: chart.title,
130
- series: chart.series.map((series) => ({
131
- chartType: source.kind,
132
- name: series.name,
133
- points: Array.from({ length: Math.max(series.values.length, series.categories.length) }, (_, index) => {
134
- const value = series.values[index];
135
- const label = series.categories[index];
136
- return {
137
- index,
138
- value: value == null ? null : String(value),
139
- categories: series.categories.length || _optionalChain([series, 'access', _2 => _2.categoriesRef, 'optionalAccess', _3 => _3.formula]) ? [{ level: 0, label: label == null ? "" : String(label) }] : []
140
- };
141
- })
142
- }))
137
+ series: (_nullishCoalesce(source.sourceSeries, () => ( chart.series))).map((series, ordinal) => {
138
+ const chartType = _nullishCoalesce(_optionalChain([source, 'access', _3 => _3.seriesTypes, 'optionalAccess', _4 => _4[ordinal]]), () => ( source.kind));
139
+ const xy = chartType === "scatter" || chartType === "bubble";
140
+ const indexedX = _optionalChain([source, 'access', _5 => _5.indexedXSeries, 'optionalAccess', _6 => _6[ordinal]]) === true;
141
+ const hierarchy = _optionalChain([series, 'access', _7 => _7.raw, 'optionalAccess', _8 => _8.chartExHierarchyCategories]);
142
+ const colorStrings = _optionalChain([series, 'access', _9 => _9.raw, 'optionalAccess', _10 => _10.chartExColorStrings]);
143
+ return {
144
+ chartType,
145
+ name: series.name,
146
+ points: Array.from({ length: Math.max(series.values.length, indexedX ? 0 : series.categories.length, _nullishCoalesce(_optionalChain([series, 'access', _11 => _11.bubbleSizes, 'optionalAccess', _12 => _12.length]), () => ( 0))) }, (_, index) => {
147
+ const value = series.values[index];
148
+ const label = series.categories[index];
149
+ const bubble = _optionalChain([series, 'access', _13 => _13.bubbleSizes, 'optionalAccess', _14 => _14[index]]);
150
+ return {
151
+ index,
152
+ value: xy ? void 0 : _nullishCoalesce(_optionalChain([colorStrings, 'optionalAccess', _15 => _15[index]]), () => ( (value == null ? null : String(value)))),
153
+ x: indexedX ? String(index + 1) : xy && label != null ? String(label) : void 0,
154
+ y: xy && value != null ? String(value) : void 0,
155
+ bubbleSize: bubble == null ? void 0 : String(bubble),
156
+ categories: xy ? [] : _optionalChain([hierarchy, 'optionalAccess', _16 => _16[index], 'optionalAccess', _17 => _17.length]) ? [...hierarchy[index]].reverse().map((label2, level) => ({ level, label: label2 })) : series.categories.length || _optionalChain([series, 'access', _18 => _18.categoriesRef, 'optionalAccess', _19 => _19.formula]) ? [{ level: 0, label: label == null ? "" : String(label) }] : []
157
+ };
158
+ })
159
+ };
160
+ })
143
161
  }
144
162
  });
145
- return svg ? safeChartSvg(svg, prefix) : null;
163
+ return svg ? safeChartSvg(svg, prefix, _optionalChain([source, 'access', _20 => _20.sourceSeries, 'optionalAccess', _21 => _21.map, 'call', _22 => _22((series) => chart.series.findIndex((candidate) => candidate.id === series.id))])) : null;
146
164
  } catch (e) {
147
165
  return null;
148
166
  }
@@ -151,7 +169,7 @@ function selectionHandles(svg, chartId, selected) {
151
169
  if (!selected || selected.chartId !== chartId || selected.kind === "chart") return null;
152
170
  return Array.from(svg.querySelectorAll("[data-chart-point]")).map((node, index) => {
153
171
  if (Number(node.getAttribute("data-chart-series")) !== selected.seriesIndex || selected.kind === "point" && Number(node.getAttribute("data-chart-point")) !== selected.pointIndex) return null;
154
- if (node.getAttribute("data-chart-kind") === "bar") {
172
+ if (node.localName === "rect") {
155
173
  return _chunkIDNIGBUMcjs.renderSelectionRectHandles.call(void 0,
156
174
  String(index),
157
175
  Number(node.getAttribute("x")),
@@ -192,7 +210,7 @@ function SharedChartSvg(props) {
192
210
  [svg, chart.id, selectedChartElement]
193
211
  );
194
212
  const { handlePointerDown, handleDoubleClick } = _chunkIDNIGBUMcjs.useChartEvents.call(void 0, props);
195
- if (!svg) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: fallback });
213
+ if (!svg) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-xlsx-chart-fallback": "unsupported", style: { width: "100%", height: "100%" }, children: fallback });
196
214
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
197
215
  "svg",
198
216
  {
@@ -213,4 +231,4 @@ function SharedChartSvg(props) {
213
231
 
214
232
 
215
233
  exports.SharedChartSvg = SharedChartSvg;
216
- //# sourceMappingURL=shared-chart-MFQSQG4K.cjs.map
234
+ //# sourceMappingURL=shared-chart-XAV7VA45.cjs.map