@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.
Files changed (103) hide show
  1. package/dist/browser-IQ4UDS5M.js +209 -0
  2. package/dist/browser-IQ4UDS5M.js.map +1 -0
  3. package/dist/browser-S6E2BS5S.cjs +212 -0
  4. package/dist/browser-S6E2BS5S.cjs.map +1 -0
  5. package/dist/{chart-renderer-F355CYSE.js → chart-renderer-4HTNG3SX.js} +94 -180
  6. package/dist/chart-renderer-4HTNG3SX.js.map +1 -0
  7. package/dist/{chart-renderer-7DTEXXG6.js → chart-renderer-5IN2B3YS.js} +94 -180
  8. package/dist/chart-renderer-5IN2B3YS.js.map +1 -0
  9. package/dist/{chart-renderer-LGW4EH4M.cjs → chart-renderer-6CWSXOSC.cjs} +324 -410
  10. package/dist/chart-renderer-6CWSXOSC.cjs.map +1 -0
  11. package/dist/{chart-renderer-3QDNTMRN.cjs → chart-renderer-H4BLRO5P.cjs} +324 -410
  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-GXYDJPHM.js → chunk-H62SZBEY.js} +401 -132
  16. package/dist/chunk-H62SZBEY.js.map +1 -0
  17. package/dist/{chunk-3LMOGW6A.js → chunk-IISMO3AX.js} +30 -15
  18. package/dist/chunk-IISMO3AX.js.map +1 -0
  19. package/dist/{chunk-ZJ76CZAL.cjs → chunk-KQSUAIZD.cjs} +1168 -899
  20. package/dist/chunk-KQSUAIZD.cjs.map +1 -0
  21. package/dist/{chunk-IYGZTLDY.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-D2UA4P6N.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/rust-office-charts-LICENSE.txt +21 -0
  56. package/dist/{shared-chart-3STFRVWT.js → shared-chart-5KTGZEZ5.js} +38 -20
  57. package/dist/shared-chart-5KTGZEZ5.js.map +1 -0
  58. package/dist/{shared-chart-DVC5S2P6.cjs → shared-chart-ACR4M7BP.cjs} +37 -20
  59. package/dist/shared-chart-ACR4M7BP.cjs.map +1 -0
  60. package/dist/{shared-chart-BFQNYOIQ.js → shared-chart-EGN5JTKT.js} +37 -20
  61. package/dist/shared-chart-EGN5JTKT.js.map +1 -0
  62. package/dist/{shared-chart-MFQSQG4K.cjs → shared-chart-XAV7VA45.cjs} +37 -19
  63. package/dist/shared-chart-XAV7VA45.cjs.map +1 -0
  64. package/dist/{surface-regl-R2N54JT2.js → surface-webgl-2ZZ6JQR2.js} +87 -151
  65. package/dist/surface-webgl-2ZZ6JQR2.js.map +1 -0
  66. package/dist/{surface-regl-BBJ6OIKK.cjs → surface-webgl-3HS6VBCK.cjs} +88 -152
  67. package/dist/surface-webgl-3HS6VBCK.cjs.map +1 -0
  68. package/dist/{surface-regl-7CDGGVDG.js → surface-webgl-4DQXDDXU.js} +87 -151
  69. package/dist/surface-webgl-4DQXDDXU.js.map +1 -0
  70. package/dist/{surface-regl-SUJ2TFZA.cjs → surface-webgl-SVYD564V.cjs} +88 -152
  71. package/dist/surface-webgl-SVYD564V.cjs.map +1 -0
  72. package/dist/vanilla.cjs +3 -3
  73. package/dist/vanilla.d.cts +2 -2
  74. package/dist/vanilla.d.ts +2 -2
  75. package/dist/vanilla.js +2 -2
  76. package/dist/xlsx-worker.js +298 -92
  77. package/dist/xlsx-worker.js.map +1 -1
  78. package/package.json +7 -15
  79. package/dist/chart-renderer-3QDNTMRN.cjs.map +0 -1
  80. package/dist/chart-renderer-7DTEXXG6.js.map +0 -1
  81. package/dist/chart-renderer-F355CYSE.js.map +0 -1
  82. package/dist/chart-renderer-LGW4EH4M.cjs.map +0 -1
  83. package/dist/chunk-3LMOGW6A.js.map +0 -1
  84. package/dist/chunk-D2UA4P6N.cjs.map +0 -1
  85. package/dist/chunk-GXYDJPHM.js.map +0 -1
  86. package/dist/chunk-IYGZTLDY.js.map +0 -1
  87. package/dist/chunk-OCF75R75.cjs +0 -90
  88. package/dist/chunk-OCF75R75.cjs.map +0 -1
  89. package/dist/chunk-ZJ76CZAL.cjs.map +0 -1
  90. package/dist/region-map-geography-24TXETDP.cjs +0 -184
  91. package/dist/region-map-geography-24TXETDP.cjs.map +0 -1
  92. package/dist/region-map-geography-OR6DHAF7.js +0 -182
  93. package/dist/region-map-geography-OR6DHAF7.js.map +0 -1
  94. package/dist/shared-chart-3STFRVWT.js.map +0 -1
  95. package/dist/shared-chart-BFQNYOIQ.js.map +0 -1
  96. package/dist/shared-chart-DVC5S2P6.cjs.map +0 -1
  97. package/dist/shared-chart-MFQSQG4K.cjs.map +0 -1
  98. package/dist/surface-regl-7CDGGVDG.js.map +0 -1
  99. package/dist/surface-regl-BBJ6OIKK.cjs.map +0 -1
  100. package/dist/surface-regl-R2N54JT2.js.map +0 -1
  101. package/dist/surface-regl-SUJ2TFZA.cjs.map +0 -1
  102. package/dist/world-atlas-LICENSE.txt +0 -13
  103. /package/dist/{us-atlas-LICENSE.txt → rust-office-charts-MAP-DATA-LICENSE.txt} +0 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 CrowdView Inc, dba Extend
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -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":"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","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