@extend-ai/react-xlsx 0.20.3 → 0.20.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{browser-B73UAN6E.cjs → browser-6MKX73CJ.cjs} +8 -28
- package/dist/browser-6MKX73CJ.cjs.map +1 -0
- package/dist/{browser-KWIEUO2X.js → browser-KJ6EVWLG.js} +8 -27
- package/dist/{browser-KWIEUO2X.js.map → browser-KJ6EVWLG.js.map} +1 -1
- package/dist/{chart-renderer-XBF7EPUS.js → chart-renderer-2BLFC2BD.js} +94 -180
- package/dist/chart-renderer-2BLFC2BD.js.map +1 -0
- package/dist/{chart-renderer-W7XW24JI.cjs → chart-renderer-2K7XSPVG.cjs} +321 -407
- package/dist/chart-renderer-2K7XSPVG.cjs.map +1 -0
- package/dist/{chart-renderer-2EKXNHUD.cjs → chart-renderer-2UJZRUSN.cjs} +324 -410
- package/dist/chart-renderer-2UJZRUSN.cjs.map +1 -0
- package/dist/{chart-renderer-ZLJVPLGN.js → chart-renderer-IYKCQENY.js} +86 -172
- package/dist/chart-renderer-IYKCQENY.js.map +1 -0
- package/dist/{chunk-WGRRI25I.cjs → chunk-5PBSOOA7.cjs} +22 -9
- package/dist/chunk-5PBSOOA7.cjs.map +1 -0
- package/dist/{chunk-VG4JELEQ.js → chunk-BFSDKYQU.js} +30 -15
- package/dist/chunk-BFSDKYQU.js.map +1 -0
- package/dist/chunk-IN7OU5PF.js +32 -0
- package/dist/chunk-IN7OU5PF.js.map +1 -0
- package/dist/{chunk-HKMFMIKE.js → chunk-KSXNNWAY.js} +16 -7
- package/dist/chunk-KSXNNWAY.js.map +1 -0
- package/dist/chunk-LY4EWUKF.js +22 -0
- package/dist/chunk-LY4EWUKF.js.map +1 -0
- package/dist/chunk-N6MMMGLF.cjs +32 -0
- package/dist/chunk-N6MMMGLF.cjs.map +1 -0
- package/dist/{chunk-HEEFCVWS.js → chunk-R5ERJ3BT.js} +404 -149
- package/dist/chunk-R5ERJ3BT.js.map +1 -0
- package/dist/chunk-RN27VSTN.cjs +108 -0
- package/dist/chunk-RN27VSTN.cjs.map +1 -0
- package/dist/{chunk-XISBYOD5.cjs → chunk-YPTGD7GK.cjs} +1172 -917
- package/dist/chunk-YPTGD7GK.cjs.map +1 -0
- package/dist/chunk-ZAUUKER4.cjs +22 -0
- package/dist/chunk-ZAUUKER4.cjs.map +1 -0
- package/dist/full-C7H4X2EX.cjs +212 -0
- package/dist/full-C7H4X2EX.cjs.map +1 -0
- package/dist/full-YT626I57.js +209 -0
- package/dist/full-YT626I57.js.map +1 -0
- package/dist/index.cjs +838 -620
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +57 -1
- package/dist/index.d.ts +57 -1
- package/dist/index.js +350 -132
- package/dist/index.js.map +1 -1
- package/dist/{internal-BJsg5os3.d.cts → internal-Cks9H21d.d.cts} +56 -1
- package/dist/{internal-BJsg5os3.d.ts → internal-Cks9H21d.d.ts} +56 -1
- package/dist/internal.cjs +4 -3
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.d.cts +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +3 -2
- package/dist/office_charts_bg.wasm +0 -0
- package/dist/office_charts_full_bg.wasm +0 -0
- package/dist/payload-7QT6NY6S.js +6 -0
- package/dist/payload-7QT6NY6S.js.map +1 -0
- package/dist/payload-BZGBW73P.cjs +8 -0
- package/dist/payload-BZGBW73P.cjs.map +1 -0
- package/dist/payload-H55PON66.js +6 -0
- package/dist/payload-H55PON66.js.map +1 -0
- package/dist/payload-RNKEYTQ4.cjs +8 -0
- package/dist/payload-RNKEYTQ4.cjs.map +1 -0
- package/dist/{shared-chart-DVC5S2P6.cjs → shared-chart-GCUFIUQL.cjs} +49 -20
- package/dist/shared-chart-GCUFIUQL.cjs.map +1 -0
- package/dist/{shared-chart-3STFRVWT.js → shared-chart-JV4MGKXX.js} +50 -20
- package/dist/shared-chart-JV4MGKXX.js.map +1 -0
- package/dist/{shared-chart-MFQSQG4K.cjs → shared-chart-OUC7EHFC.cjs} +49 -19
- package/dist/shared-chart-OUC7EHFC.cjs.map +1 -0
- package/dist/{shared-chart-BFQNYOIQ.js → shared-chart-PY47ED4I.js} +49 -20
- package/dist/shared-chart-PY47ED4I.js.map +1 -0
- package/dist/{surface-regl-R2N54JT2.js → surface-webgl-2ZZ6JQR2.js} +87 -151
- package/dist/surface-webgl-2ZZ6JQR2.js.map +1 -0
- package/dist/{surface-regl-BBJ6OIKK.cjs → surface-webgl-3HS6VBCK.cjs} +88 -152
- package/dist/surface-webgl-3HS6VBCK.cjs.map +1 -0
- package/dist/{surface-regl-7CDGGVDG.js → surface-webgl-4DQXDDXU.js} +87 -151
- package/dist/surface-webgl-4DQXDDXU.js.map +1 -0
- package/dist/{surface-regl-SUJ2TFZA.cjs → surface-webgl-SVYD564V.cjs} +88 -152
- package/dist/surface-webgl-SVYD564V.cjs.map +1 -0
- package/dist/vanilla.cjs +4 -3
- package/dist/vanilla.cjs.map +1 -1
- package/dist/vanilla.d.cts +2 -2
- package/dist/vanilla.d.ts +2 -2
- package/dist/vanilla.js +3 -2
- package/dist/xlsx-worker.js +298 -92
- package/dist/xlsx-worker.js.map +1 -1
- package/package.json +6 -15
- package/dist/browser-B73UAN6E.cjs.map +0 -1
- package/dist/chart-renderer-2EKXNHUD.cjs.map +0 -1
- package/dist/chart-renderer-W7XW24JI.cjs.map +0 -1
- package/dist/chart-renderer-XBF7EPUS.js.map +0 -1
- package/dist/chart-renderer-ZLJVPLGN.js.map +0 -1
- package/dist/chunk-6IGWCJU5.cjs +0 -90
- package/dist/chunk-6IGWCJU5.cjs.map +0 -1
- package/dist/chunk-HEEFCVWS.js.map +0 -1
- package/dist/chunk-HKMFMIKE.js.map +0 -1
- package/dist/chunk-VG4JELEQ.js.map +0 -1
- package/dist/chunk-WGRRI25I.cjs.map +0 -1
- package/dist/chunk-XISBYOD5.cjs.map +0 -1
- package/dist/payload-JBPE7GEG.cjs +0 -8
- package/dist/payload-JBPE7GEG.cjs.map +0 -1
- package/dist/payload-KYNCVJT5.js +0 -6
- package/dist/payload-KYNCVJT5.js.map +0 -1
- package/dist/region-map-geography-24TXETDP.cjs +0 -184
- package/dist/region-map-geography-24TXETDP.cjs.map +0 -1
- package/dist/region-map-geography-OR6DHAF7.js +0 -182
- package/dist/region-map-geography-OR6DHAF7.js.map +0 -1
- package/dist/shared-chart-3STFRVWT.js.map +0 -1
- package/dist/shared-chart-BFQNYOIQ.js.map +0 -1
- package/dist/shared-chart-DVC5S2P6.cjs.map +0 -1
- package/dist/shared-chart-MFQSQG4K.cjs.map +0 -1
- package/dist/surface-regl-7CDGGVDG.js.map +0 -1
- package/dist/surface-regl-BBJ6OIKK.cjs.map +0 -1
- package/dist/surface-regl-R2N54JT2.js.map +0 -1
- package/dist/surface-regl-SUJ2TFZA.cjs.map +0 -1
- package/dist/world-atlas-LICENSE.txt +0 -13
- /package/dist/{us-atlas-LICENSE.txt → rust-office-charts-MAP-DATA-LICENSE.txt} +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
+
var _chunkZAUUKER4cjs = require('./chunk-ZAUUKER4.cjs');
|
|
4
|
+
|
|
3
5
|
|
|
4
|
-
var _chunkM55TBS4Xcjs = require('./chunk-M55TBS4X.cjs');
|
|
5
6
|
|
|
7
|
+
var _chunkM55TBS4Xcjs = require('./chunk-M55TBS4X.cjs');
|
|
6
8
|
|
|
7
9
|
|
|
8
10
|
|
|
@@ -26,6 +28,8 @@ var allowedElements = /* @__PURE__ */ new Set([
|
|
|
26
28
|
"line",
|
|
27
29
|
"polyline",
|
|
28
30
|
"polygon",
|
|
31
|
+
"title",
|
|
32
|
+
"desc",
|
|
29
33
|
"text",
|
|
30
34
|
"tspan",
|
|
31
35
|
"linearGradient",
|
|
@@ -74,18 +78,28 @@ var plainAttributes = /* @__PURE__ */ new Set([
|
|
|
74
78
|
"gradientTransform",
|
|
75
79
|
"patternUnits",
|
|
76
80
|
"patternContentUnits",
|
|
81
|
+
"pointer-events",
|
|
77
82
|
"data-chart-kind",
|
|
78
83
|
"data-chart-series",
|
|
79
84
|
"data-chart-point",
|
|
80
85
|
"data-chart-x",
|
|
81
86
|
"data-chart-y"
|
|
82
87
|
]);
|
|
83
|
-
function safeChartSvg(markup, prefix) {
|
|
88
|
+
function safeChartSvg(markup, prefix, seriesMap) {
|
|
84
89
|
const svg = new DOMParser().parseFromString(markup, "image/svg+xml").documentElement;
|
|
85
90
|
if (svg.localName !== "svg" || svg.namespaceURI !== svgNamespace) return null;
|
|
86
91
|
for (const node of [svg, ...Array.from(svg.querySelectorAll("*"))]) {
|
|
87
92
|
if (node.namespaceURI !== svgNamespace || !allowedElements.has(node.localName)) return null;
|
|
88
93
|
for (const { name, value } of Array.from(node.attributes)) {
|
|
94
|
+
if (name === "font-family") {
|
|
95
|
+
const families = value.split(",").map((family) => family.trim());
|
|
96
|
+
const unquote = (family) => family.replace(/^["']|["']$/g, "");
|
|
97
|
+
if (/^(Calibri|Carlito|Aptos(?: Narrow)?)$/i.test(unquote(_nullishCoalesce(families[0], () => ( "")))) && !families.some((family) => unquote(family) === _chunkZAUUKER4cjs.SPREADSHEET_FALLBACK_FONT)) {
|
|
98
|
+
families.splice(1, 0, JSON.stringify(_chunkZAUUKER4cjs.SPREADSHEET_FALLBACK_FONT));
|
|
99
|
+
node.setAttribute(name, families.join(", "));
|
|
100
|
+
}
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
89
103
|
if (plainAttributes.has(name) || name === "xmlns") continue;
|
|
90
104
|
if (name === "id" && /^[\w-]+$/.test(value)) {
|
|
91
105
|
node.setAttribute(name, prefix + value);
|
|
@@ -106,7 +120,11 @@ function safeChartSvg(markup, prefix) {
|
|
|
106
120
|
node.removeAttribute(name);
|
|
107
121
|
}
|
|
108
122
|
if (node.hasAttribute("data-chart-series")) {
|
|
109
|
-
|
|
123
|
+
const sourceSeries = Number(node.getAttribute("data-chart-series"));
|
|
124
|
+
const series = _nullishCoalesce(_optionalChain([seriesMap, 'optionalAccess', _3 => _3[sourceSeries]]), () => ( sourceSeries));
|
|
125
|
+
if (!Number.isInteger(series) || series < 0) return null;
|
|
126
|
+
node.setAttribute("data-chart-series", String(series));
|
|
127
|
+
node.setAttribute("data-xlsx-chart-series-index", String(series));
|
|
110
128
|
const point = node.getAttribute("data-chart-point");
|
|
111
129
|
if (point != null) node.setAttribute("data-xlsx-chart-point-index", point);
|
|
112
130
|
const kind = node.getAttribute("data-chart-kind");
|
|
@@ -133,22 +151,33 @@ function renderSharedChart(renderer, chart, source, width, height, prefix) {
|
|
|
133
151
|
fontFamily: chart.fontFamily,
|
|
134
152
|
data: {
|
|
135
153
|
title: chart.title,
|
|
136
|
-
series: chart.series.map((series) =>
|
|
137
|
-
chartType
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
154
|
+
series: (_nullishCoalesce(source.sourceSeries, () => ( chart.series))).map((series, ordinal) => {
|
|
155
|
+
const chartType = _nullishCoalesce(_optionalChain([source, 'access', _4 => _4.seriesTypes, 'optionalAccess', _5 => _5[ordinal]]), () => ( source.kind));
|
|
156
|
+
const xy = chartType === "scatter" || chartType === "bubble";
|
|
157
|
+
const indexedX = _optionalChain([source, 'access', _6 => _6.indexedXSeries, 'optionalAccess', _7 => _7[ordinal]]) === true;
|
|
158
|
+
const hierarchy = _optionalChain([series, 'access', _8 => _8.raw, 'optionalAccess', _9 => _9.chartExHierarchyCategories]);
|
|
159
|
+
const colorStrings = _optionalChain([series, 'access', _10 => _10.raw, 'optionalAccess', _11 => _11.chartExColorStrings]);
|
|
160
|
+
return {
|
|
161
|
+
chartType,
|
|
162
|
+
name: series.name,
|
|
163
|
+
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) => {
|
|
164
|
+
const value = series.values[index];
|
|
165
|
+
const label = series.categories[index];
|
|
166
|
+
const bubble = _optionalChain([series, 'access', _14 => _14.bubbleSizes, 'optionalAccess', _15 => _15[index]]);
|
|
167
|
+
return {
|
|
168
|
+
index,
|
|
169
|
+
value: xy ? void 0 : _nullishCoalesce(_optionalChain([colorStrings, 'optionalAccess', _16 => _16[index]]), () => ( (value == null ? null : String(value)))),
|
|
170
|
+
x: indexedX ? String(index + 1) : xy && label != null ? String(label) : void 0,
|
|
171
|
+
y: xy && value != null ? String(value) : void 0,
|
|
172
|
+
bubbleSize: bubble == null ? void 0 : String(bubble),
|
|
173
|
+
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) }] : []
|
|
174
|
+
};
|
|
175
|
+
})
|
|
176
|
+
};
|
|
177
|
+
})
|
|
149
178
|
}
|
|
150
179
|
});
|
|
151
|
-
return svg ? safeChartSvg(svg, prefix) : null;
|
|
180
|
+
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
181
|
} catch (e) {
|
|
153
182
|
return null;
|
|
154
183
|
}
|
|
@@ -157,7 +186,7 @@ function selectionHandles(svg, chartId, selected) {
|
|
|
157
186
|
if (!selected || selected.chartId !== chartId || selected.kind === "chart") return null;
|
|
158
187
|
return Array.from(svg.querySelectorAll("[data-chart-point]")).map((node, index) => {
|
|
159
188
|
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.
|
|
189
|
+
if (node.localName === "rect") {
|
|
161
190
|
return _chunkM55TBS4Xcjs.renderSelectionRectHandles.call(void 0,
|
|
162
191
|
String(index),
|
|
163
192
|
Number(node.getAttribute("x")),
|
|
@@ -198,7 +227,7 @@ function SharedChartSvg(props) {
|
|
|
198
227
|
[svg, chart.id, selectedChartElement]
|
|
199
228
|
);
|
|
200
229
|
const { handlePointerDown, handleDoubleClick } = _chunkM55TBS4Xcjs.useChartEvents.call(void 0, props);
|
|
201
|
-
if (!svg) return /* @__PURE__ */ _chunkAZWBTFJIcjs.u.call(void 0,
|
|
230
|
+
if (!svg) return /* @__PURE__ */ _chunkAZWBTFJIcjs.u.call(void 0, "div", { "data-xlsx-chart-fallback": "unsupported", style: { width: "100%", height: "100%" }, children: fallback });
|
|
202
231
|
return /* @__PURE__ */ _chunkAZWBTFJIcjs.u.call(void 0,
|
|
203
232
|
"svg",
|
|
204
233
|
{
|
|
@@ -219,4 +248,4 @@ function SharedChartSvg(props) {
|
|
|
219
248
|
|
|
220
249
|
|
|
221
250
|
exports.SharedChartSvg = SharedChartSvg;
|
|
222
|
-
//# sourceMappingURL=shared-chart-
|
|
251
|
+
//# sourceMappingURL=shared-chart-GCUFIUQL.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/shared-chart-GCUFIUQL.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-GCUFIUQL.cjs","sourcesContent":[null,"import * as React from \"react\";\nimport type { OfficeCharts } from \"@extend-ai/rust-office-charts\";\nimport { renderSelectionRectHandles, useChartEvents } from \"./chart-interaction\";\nimport { SPREADSHEET_FALLBACK_FONT } from \"./spreadsheet-fonts\";\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 (name === \"font-family\") {\n const families = value.split(\",\").map((family) => family.trim());\n const unquote = (family: string) => family.replace(/^[\"']|[\"']$/g, \"\");\n if (/^(Calibri|Carlito|Aptos(?: Narrow)?)$/i.test(unquote(families[0] ?? \"\"))\n && !families.some((family) => unquote(family) === SPREADSHEET_FALLBACK_FONT)) {\n families.splice(1, 0, JSON.stringify(SPREADSHEET_FALLBACK_FONT));\n node.setAttribute(name, families.join(\", \"));\n }\n continue;\n }\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"]}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SPREADSHEET_FALLBACK_FONT
|
|
3
|
+
} from "./chunk-LY4EWUKF.js";
|
|
1
4
|
import {
|
|
2
5
|
renderSelectionRectHandles,
|
|
3
6
|
useChartEvents
|
|
@@ -5,7 +8,7 @@ import {
|
|
|
5
8
|
|
|
6
9
|
// src/shared-chart.tsx
|
|
7
10
|
import * as React from "react";
|
|
8
|
-
import {
|
|
11
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
12
|
var svgNamespace = "http://www.w3.org/2000/svg";
|
|
10
13
|
var allowedElements = /* @__PURE__ */ new Set([
|
|
11
14
|
"svg",
|
|
@@ -19,6 +22,8 @@ var allowedElements = /* @__PURE__ */ new Set([
|
|
|
19
22
|
"line",
|
|
20
23
|
"polyline",
|
|
21
24
|
"polygon",
|
|
25
|
+
"title",
|
|
26
|
+
"desc",
|
|
22
27
|
"text",
|
|
23
28
|
"tspan",
|
|
24
29
|
"linearGradient",
|
|
@@ -67,18 +72,28 @@ var plainAttributes = /* @__PURE__ */ new Set([
|
|
|
67
72
|
"gradientTransform",
|
|
68
73
|
"patternUnits",
|
|
69
74
|
"patternContentUnits",
|
|
75
|
+
"pointer-events",
|
|
70
76
|
"data-chart-kind",
|
|
71
77
|
"data-chart-series",
|
|
72
78
|
"data-chart-point",
|
|
73
79
|
"data-chart-x",
|
|
74
80
|
"data-chart-y"
|
|
75
81
|
]);
|
|
76
|
-
function safeChartSvg(markup, prefix) {
|
|
82
|
+
function safeChartSvg(markup, prefix, seriesMap) {
|
|
77
83
|
const svg = new DOMParser().parseFromString(markup, "image/svg+xml").documentElement;
|
|
78
84
|
if (svg.localName !== "svg" || svg.namespaceURI !== svgNamespace) return null;
|
|
79
85
|
for (const node of [svg, ...Array.from(svg.querySelectorAll("*"))]) {
|
|
80
86
|
if (node.namespaceURI !== svgNamespace || !allowedElements.has(node.localName)) return null;
|
|
81
87
|
for (const { name, value } of Array.from(node.attributes)) {
|
|
88
|
+
if (name === "font-family") {
|
|
89
|
+
const families = value.split(",").map((family) => family.trim());
|
|
90
|
+
const unquote = (family) => family.replace(/^["']|["']$/g, "");
|
|
91
|
+
if (/^(Calibri|Carlito|Aptos(?: Narrow)?)$/i.test(unquote(families[0] ?? "")) && !families.some((family) => unquote(family) === SPREADSHEET_FALLBACK_FONT)) {
|
|
92
|
+
families.splice(1, 0, JSON.stringify(SPREADSHEET_FALLBACK_FONT));
|
|
93
|
+
node.setAttribute(name, families.join(", "));
|
|
94
|
+
}
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
82
97
|
if (plainAttributes.has(name) || name === "xmlns") continue;
|
|
83
98
|
if (name === "id" && /^[\w-]+$/.test(value)) {
|
|
84
99
|
node.setAttribute(name, prefix + value);
|
|
@@ -99,7 +114,11 @@ function safeChartSvg(markup, prefix) {
|
|
|
99
114
|
node.removeAttribute(name);
|
|
100
115
|
}
|
|
101
116
|
if (node.hasAttribute("data-chart-series")) {
|
|
102
|
-
|
|
117
|
+
const sourceSeries = Number(node.getAttribute("data-chart-series"));
|
|
118
|
+
const series = seriesMap?.[sourceSeries] ?? sourceSeries;
|
|
119
|
+
if (!Number.isInteger(series) || series < 0) return null;
|
|
120
|
+
node.setAttribute("data-chart-series", String(series));
|
|
121
|
+
node.setAttribute("data-xlsx-chart-series-index", String(series));
|
|
103
122
|
const point = node.getAttribute("data-chart-point");
|
|
104
123
|
if (point != null) node.setAttribute("data-xlsx-chart-point-index", point);
|
|
105
124
|
const kind = node.getAttribute("data-chart-kind");
|
|
@@ -126,22 +145,33 @@ function renderSharedChart(renderer, chart, source, width, height, prefix) {
|
|
|
126
145
|
fontFamily: chart.fontFamily,
|
|
127
146
|
data: {
|
|
128
147
|
title: chart.title,
|
|
129
|
-
series: chart.series.map((series) =>
|
|
130
|
-
chartType
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
148
|
+
series: (source.sourceSeries ?? chart.series).map((series, ordinal) => {
|
|
149
|
+
const chartType = source.seriesTypes?.[ordinal] ?? source.kind;
|
|
150
|
+
const xy = chartType === "scatter" || chartType === "bubble";
|
|
151
|
+
const indexedX = source.indexedXSeries?.[ordinal] === true;
|
|
152
|
+
const hierarchy = series.raw?.chartExHierarchyCategories;
|
|
153
|
+
const colorStrings = series.raw?.chartExColorStrings;
|
|
154
|
+
return {
|
|
155
|
+
chartType,
|
|
156
|
+
name: series.name,
|
|
157
|
+
points: Array.from({ length: Math.max(series.values.length, indexedX ? 0 : series.categories.length, series.bubbleSizes?.length ?? 0) }, (_, index) => {
|
|
158
|
+
const value = series.values[index];
|
|
159
|
+
const label = series.categories[index];
|
|
160
|
+
const bubble = series.bubbleSizes?.[index];
|
|
161
|
+
return {
|
|
162
|
+
index,
|
|
163
|
+
value: xy ? void 0 : colorStrings?.[index] ?? (value == null ? null : String(value)),
|
|
164
|
+
x: indexedX ? String(index + 1) : xy && label != null ? String(label) : void 0,
|
|
165
|
+
y: xy && value != null ? String(value) : void 0,
|
|
166
|
+
bubbleSize: bubble == null ? void 0 : String(bubble),
|
|
167
|
+
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) }] : []
|
|
168
|
+
};
|
|
169
|
+
})
|
|
170
|
+
};
|
|
171
|
+
})
|
|
142
172
|
}
|
|
143
173
|
});
|
|
144
|
-
return svg ? safeChartSvg(svg, prefix) : null;
|
|
174
|
+
return svg ? safeChartSvg(svg, prefix, source.sourceSeries?.map((series) => chart.series.findIndex((candidate) => candidate.id === series.id))) : null;
|
|
145
175
|
} catch {
|
|
146
176
|
return null;
|
|
147
177
|
}
|
|
@@ -150,7 +180,7 @@ function selectionHandles(svg, chartId, selected) {
|
|
|
150
180
|
if (!selected || selected.chartId !== chartId || selected.kind === "chart") return null;
|
|
151
181
|
return Array.from(svg.querySelectorAll("[data-chart-point]")).map((node, index) => {
|
|
152
182
|
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.
|
|
183
|
+
if (node.localName === "rect") {
|
|
154
184
|
return renderSelectionRectHandles(
|
|
155
185
|
String(index),
|
|
156
186
|
Number(node.getAttribute("x")),
|
|
@@ -191,7 +221,7 @@ function SharedChartSvg(props) {
|
|
|
191
221
|
[svg, chart.id, selectedChartElement]
|
|
192
222
|
);
|
|
193
223
|
const { handlePointerDown, handleDoubleClick } = useChartEvents(props);
|
|
194
|
-
if (!svg) return /* @__PURE__ */ jsx(
|
|
224
|
+
if (!svg) return /* @__PURE__ */ jsx("div", { "data-xlsx-chart-fallback": "unsupported", style: { width: "100%", height: "100%" }, children: fallback });
|
|
195
225
|
return /* @__PURE__ */ jsxs(
|
|
196
226
|
"svg",
|
|
197
227
|
{
|
|
@@ -212,4 +242,4 @@ function SharedChartSvg(props) {
|
|
|
212
242
|
export {
|
|
213
243
|
SharedChartSvg
|
|
214
244
|
};
|
|
215
|
-
//# sourceMappingURL=shared-chart-
|
|
245
|
+
//# sourceMappingURL=shared-chart-JV4MGKXX.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 { SPREADSHEET_FALLBACK_FONT } from \"./spreadsheet-fonts\";\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 (name === \"font-family\") {\n const families = value.split(\",\").map((family) => family.trim());\n const unquote = (family: string) => family.replace(/^[\"']|[\"']$/g, \"\");\n if (/^(Calibri|Carlito|Aptos(?: Narrow)?)$/i.test(unquote(families[0] ?? \"\"))\n && !families.some((family) => unquote(family) === SPREADSHEET_FALLBACK_FONT)) {\n families.splice(1, 0, JSON.stringify(SPREADSHEET_FALLBACK_FONT));\n node.setAttribute(name, families.join(\", \"));\n }\n continue;\n }\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"]}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
+
var _chunkZAUUKER4cjs = require('./chunk-ZAUUKER4.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
3
6
|
|
|
4
7
|
var _chunkIDNIGBUMcjs = require('./chunk-IDNIGBUM.cjs');
|
|
5
8
|
require('./chunk-AD4CGQN2.cjs');
|
|
@@ -20,6 +23,8 @@ var allowedElements = /* @__PURE__ */ new Set([
|
|
|
20
23
|
"line",
|
|
21
24
|
"polyline",
|
|
22
25
|
"polygon",
|
|
26
|
+
"title",
|
|
27
|
+
"desc",
|
|
23
28
|
"text",
|
|
24
29
|
"tspan",
|
|
25
30
|
"linearGradient",
|
|
@@ -68,18 +73,28 @@ var plainAttributes = /* @__PURE__ */ new Set([
|
|
|
68
73
|
"gradientTransform",
|
|
69
74
|
"patternUnits",
|
|
70
75
|
"patternContentUnits",
|
|
76
|
+
"pointer-events",
|
|
71
77
|
"data-chart-kind",
|
|
72
78
|
"data-chart-series",
|
|
73
79
|
"data-chart-point",
|
|
74
80
|
"data-chart-x",
|
|
75
81
|
"data-chart-y"
|
|
76
82
|
]);
|
|
77
|
-
function safeChartSvg(markup, prefix) {
|
|
83
|
+
function safeChartSvg(markup, prefix, seriesMap) {
|
|
78
84
|
const svg = new DOMParser().parseFromString(markup, "image/svg+xml").documentElement;
|
|
79
85
|
if (svg.localName !== "svg" || svg.namespaceURI !== svgNamespace) return null;
|
|
80
86
|
for (const node of [svg, ...Array.from(svg.querySelectorAll("*"))]) {
|
|
81
87
|
if (node.namespaceURI !== svgNamespace || !allowedElements.has(node.localName)) return null;
|
|
82
88
|
for (const { name, value } of Array.from(node.attributes)) {
|
|
89
|
+
if (name === "font-family") {
|
|
90
|
+
const families = value.split(",").map((family) => family.trim());
|
|
91
|
+
const unquote = (family) => family.replace(/^["']|["']$/g, "");
|
|
92
|
+
if (/^(Calibri|Carlito|Aptos(?: Narrow)?)$/i.test(unquote(_nullishCoalesce(families[0], () => ( "")))) && !families.some((family) => unquote(family) === _chunkZAUUKER4cjs.SPREADSHEET_FALLBACK_FONT)) {
|
|
93
|
+
families.splice(1, 0, JSON.stringify(_chunkZAUUKER4cjs.SPREADSHEET_FALLBACK_FONT));
|
|
94
|
+
node.setAttribute(name, families.join(", "));
|
|
95
|
+
}
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
83
98
|
if (plainAttributes.has(name) || name === "xmlns") continue;
|
|
84
99
|
if (name === "id" && /^[\w-]+$/.test(value)) {
|
|
85
100
|
node.setAttribute(name, prefix + value);
|
|
@@ -100,7 +115,11 @@ function safeChartSvg(markup, prefix) {
|
|
|
100
115
|
node.removeAttribute(name);
|
|
101
116
|
}
|
|
102
117
|
if (node.hasAttribute("data-chart-series")) {
|
|
103
|
-
|
|
118
|
+
const sourceSeries = Number(node.getAttribute("data-chart-series"));
|
|
119
|
+
const series = _nullishCoalesce(_optionalChain([seriesMap, 'optionalAccess', _2 => _2[sourceSeries]]), () => ( sourceSeries));
|
|
120
|
+
if (!Number.isInteger(series) || series < 0) return null;
|
|
121
|
+
node.setAttribute("data-chart-series", String(series));
|
|
122
|
+
node.setAttribute("data-xlsx-chart-series-index", String(series));
|
|
104
123
|
const point = node.getAttribute("data-chart-point");
|
|
105
124
|
if (point != null) node.setAttribute("data-xlsx-chart-point-index", point);
|
|
106
125
|
const kind = node.getAttribute("data-chart-kind");
|
|
@@ -127,22 +146,33 @@ function renderSharedChart(renderer, chart, source, width, height, prefix) {
|
|
|
127
146
|
fontFamily: chart.fontFamily,
|
|
128
147
|
data: {
|
|
129
148
|
title: chart.title,
|
|
130
|
-
series: chart.series.map((series) =>
|
|
131
|
-
chartType
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
149
|
+
series: (_nullishCoalesce(source.sourceSeries, () => ( chart.series))).map((series, ordinal) => {
|
|
150
|
+
const chartType = _nullishCoalesce(_optionalChain([source, 'access', _3 => _3.seriesTypes, 'optionalAccess', _4 => _4[ordinal]]), () => ( source.kind));
|
|
151
|
+
const xy = chartType === "scatter" || chartType === "bubble";
|
|
152
|
+
const indexedX = _optionalChain([source, 'access', _5 => _5.indexedXSeries, 'optionalAccess', _6 => _6[ordinal]]) === true;
|
|
153
|
+
const hierarchy = _optionalChain([series, 'access', _7 => _7.raw, 'optionalAccess', _8 => _8.chartExHierarchyCategories]);
|
|
154
|
+
const colorStrings = _optionalChain([series, 'access', _9 => _9.raw, 'optionalAccess', _10 => _10.chartExColorStrings]);
|
|
155
|
+
return {
|
|
156
|
+
chartType,
|
|
157
|
+
name: series.name,
|
|
158
|
+
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) => {
|
|
159
|
+
const value = series.values[index];
|
|
160
|
+
const label = series.categories[index];
|
|
161
|
+
const bubble = _optionalChain([series, 'access', _13 => _13.bubbleSizes, 'optionalAccess', _14 => _14[index]]);
|
|
162
|
+
return {
|
|
163
|
+
index,
|
|
164
|
+
value: xy ? void 0 : _nullishCoalesce(_optionalChain([colorStrings, 'optionalAccess', _15 => _15[index]]), () => ( (value == null ? null : String(value)))),
|
|
165
|
+
x: indexedX ? String(index + 1) : xy && label != null ? String(label) : void 0,
|
|
166
|
+
y: xy && value != null ? String(value) : void 0,
|
|
167
|
+
bubbleSize: bubble == null ? void 0 : String(bubble),
|
|
168
|
+
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) }] : []
|
|
169
|
+
};
|
|
170
|
+
})
|
|
171
|
+
};
|
|
172
|
+
})
|
|
143
173
|
}
|
|
144
174
|
});
|
|
145
|
-
return svg ? safeChartSvg(svg, prefix) : null;
|
|
175
|
+
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
176
|
} catch (e) {
|
|
147
177
|
return null;
|
|
148
178
|
}
|
|
@@ -151,7 +181,7 @@ function selectionHandles(svg, chartId, selected) {
|
|
|
151
181
|
if (!selected || selected.chartId !== chartId || selected.kind === "chart") return null;
|
|
152
182
|
return Array.from(svg.querySelectorAll("[data-chart-point]")).map((node, index) => {
|
|
153
183
|
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.
|
|
184
|
+
if (node.localName === "rect") {
|
|
155
185
|
return _chunkIDNIGBUMcjs.renderSelectionRectHandles.call(void 0,
|
|
156
186
|
String(index),
|
|
157
187
|
Number(node.getAttribute("x")),
|
|
@@ -192,7 +222,7 @@ function SharedChartSvg(props) {
|
|
|
192
222
|
[svg, chart.id, selectedChartElement]
|
|
193
223
|
);
|
|
194
224
|
const { handlePointerDown, handleDoubleClick } = _chunkIDNIGBUMcjs.useChartEvents.call(void 0, props);
|
|
195
|
-
if (!svg) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
225
|
+
if (!svg) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-xlsx-chart-fallback": "unsupported", style: { width: "100%", height: "100%" }, children: fallback });
|
|
196
226
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
197
227
|
"svg",
|
|
198
228
|
{
|
|
@@ -213,4 +243,4 @@ function SharedChartSvg(props) {
|
|
|
213
243
|
|
|
214
244
|
|
|
215
245
|
exports.SharedChartSvg = SharedChartSvg;
|
|
216
|
-
//# sourceMappingURL=shared-chart-
|
|
246
|
+
//# sourceMappingURL=shared-chart-OUC7EHFC.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/shared-chart-OUC7EHFC.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-OUC7EHFC.cjs","sourcesContent":[null,"import * as React from \"react\";\nimport type { OfficeCharts } from \"@extend-ai/rust-office-charts\";\nimport { renderSelectionRectHandles, useChartEvents } from \"./chart-interaction\";\nimport { SPREADSHEET_FALLBACK_FONT } from \"./spreadsheet-fonts\";\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 (name === \"font-family\") {\n const families = value.split(\",\").map((family) => family.trim());\n const unquote = (family: string) => family.replace(/^[\"']|[\"']$/g, \"\");\n if (/^(Calibri|Carlito|Aptos(?: Narrow)?)$/i.test(unquote(families[0] ?? \"\"))\n && !families.some((family) => unquote(family) === SPREADSHEET_FALLBACK_FONT)) {\n families.splice(1, 0, JSON.stringify(SPREADSHEET_FALLBACK_FONT));\n node.setAttribute(name, families.join(\", \"));\n }\n continue;\n }\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"]}
|