@extend-ai/react-xlsx 0.19.0 → 0.20.1
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/README.md +2 -1
- package/dist/{chart-renderer-LHXMRBGR.cjs → chart-renderer-K2VM257E.cjs} +44 -39
- package/dist/chart-renderer-K2VM257E.cjs.map +1 -0
- package/dist/{chart-renderer-HVOEAQXK.cjs → chart-renderer-K6GORT3R.cjs} +44 -39
- package/dist/chart-renderer-K6GORT3R.cjs.map +1 -0
- package/dist/{chart-renderer-R2B4I2HL.js → chart-renderer-KGLAI4DN.js} +25 -20
- package/dist/chart-renderer-KGLAI4DN.js.map +1 -0
- package/dist/{chart-renderer-3K2VKB5I.js → chart-renderer-RXO7WP4Q.js} +25 -20
- package/dist/chart-renderer-RXO7WP4Q.js.map +1 -0
- package/dist/{chunk-ZIO47YMT.cjs → chunk-2MVEKDY2.cjs} +4 -4
- package/dist/{chunk-ZIO47YMT.cjs.map → chunk-2MVEKDY2.cjs.map} +1 -1
- package/dist/{chunk-3O2QY6LA.js → chunk-3JTCYAUX.js} +3 -3
- package/dist/{chunk-4VX5HTCF.cjs → chunk-54YBFWL3.cjs} +4 -4
- package/dist/{chunk-4VX5HTCF.cjs.map → chunk-54YBFWL3.cjs.map} +1 -1
- package/dist/{chunk-T5WZHPIN.cjs → chunk-AD4CGQN2.cjs} +2 -2
- package/dist/{chunk-T5WZHPIN.cjs.map → chunk-AD4CGQN2.cjs.map} +1 -1
- package/dist/{chunk-Y737JKUG.js → chunk-GXJO6CK6.js} +136 -33
- package/dist/chunk-GXJO6CK6.js.map +1 -0
- package/dist/{chunk-TYJLNPNE.cjs → chunk-HAHCVXCU.cjs} +922 -819
- package/dist/chunk-HAHCVXCU.cjs.map +1 -0
- package/dist/{chunk-E2VSYCP2.cjs → chunk-O3V2MCOC.cjs} +18 -2
- package/dist/chunk-O3V2MCOC.cjs.map +1 -0
- package/dist/{chunk-BAAMDEDS.js → chunk-VXBNYHW5.js} +18 -2
- package/dist/{chunk-BAAMDEDS.js.map → chunk-VXBNYHW5.js.map} +1 -1
- package/dist/{chunk-O7S3Y6II.js → chunk-WSQDFXDW.js} +3 -3
- package/dist/index.cjs +617 -530
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +115 -28
- package/dist/index.js.map +1 -1
- package/dist/{internal-DSz8QMhK.d.cts → internal-trWFv9In.d.cts} +5 -0
- package/dist/{internal-DSz8QMhK.d.ts → internal-trWFv9In.d.ts} +5 -0
- package/dist/internal.cjs +4 -4
- package/dist/internal.d.cts +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +2 -2
- package/dist/{region-map-geography-6TGXBY3V.cjs → region-map-geography-VEN5CPRS.cjs} +2 -2
- package/dist/{region-map-geography-6TGXBY3V.cjs.map → region-map-geography-VEN5CPRS.cjs.map} +1 -1
- package/dist/{spreadsheet-font-assets-4AHYDTAQ.cjs → spreadsheet-font-assets-6FKCVICP.cjs} +2 -2
- package/dist/{spreadsheet-font-assets-4AHYDTAQ.cjs.map → spreadsheet-font-assets-6FKCVICP.cjs.map} +1 -1
- package/dist/{surface-regl-MAPCPD7W.cjs → surface-regl-2NNG62KS.cjs} +18 -15
- package/dist/surface-regl-2NNG62KS.cjs.map +1 -0
- package/dist/{surface-regl-NWR5ZZ5D.js → surface-regl-7CDGGVDG.js} +10 -7
- package/dist/surface-regl-7CDGGVDG.js.map +1 -0
- package/dist/{surface-regl-PWTZWQQS.cjs → surface-regl-SUJ2TFZA.cjs} +18 -15
- package/dist/surface-regl-SUJ2TFZA.cjs.map +1 -0
- package/dist/{surface-regl-KW4JL325.js → surface-regl-TJUWTLAZ.js} +10 -7
- package/dist/surface-regl-TJUWTLAZ.js.map +1 -0
- package/dist/vanilla.cjs +4 -4
- package/dist/vanilla.d.cts +2 -2
- package/dist/vanilla.d.ts +2 -2
- package/dist/vanilla.js +2 -2
- package/dist/xlsx-worker.js +67 -1
- package/dist/xlsx-worker.js.map +1 -1
- package/package.json +1 -1
- package/dist/chart-renderer-3K2VKB5I.js.map +0 -1
- package/dist/chart-renderer-HVOEAQXK.cjs.map +0 -1
- package/dist/chart-renderer-LHXMRBGR.cjs.map +0 -1
- package/dist/chart-renderer-R2B4I2HL.js.map +0 -1
- package/dist/chunk-E2VSYCP2.cjs.map +0 -1
- package/dist/chunk-TYJLNPNE.cjs.map +0 -1
- package/dist/chunk-Y737JKUG.js.map +0 -1
- package/dist/surface-regl-KW4JL325.js.map +0 -1
- package/dist/surface-regl-MAPCPD7W.cjs.map +0 -1
- package/dist/surface-regl-NWR5ZZ5D.js.map +0 -1
- package/dist/surface-regl-PWTZWQQS.cjs.map +0 -1
- /package/dist/{chunk-3O2QY6LA.js.map → chunk-3JTCYAUX.js.map} +0 -0
- /package/dist/{chunk-O7S3Y6II.js.map → chunk-WSQDFXDW.js.map} +0 -0
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _chunkO3V2MCOCcjs = require('./chunk-O3V2MCOC.cjs');
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
var _chunk5ERNVHSOcjs = require('./chunk-5ERNVHSO.cjs');
|
|
16
|
-
require('./chunk-
|
|
16
|
+
require('./chunk-AD4CGQN2.cjs');
|
|
17
17
|
|
|
18
18
|
// src/surface-regl.tsx
|
|
19
19
|
var _regl = require('regl'); var _regl2 = _interopRequireDefault(_regl);
|
|
@@ -160,7 +160,7 @@ function normalizeSurfaceY(row, rows) {
|
|
|
160
160
|
return rows <= 1 ? 0 : (row / (rows - 1) - 0.5) * 2;
|
|
161
161
|
}
|
|
162
162
|
function normalizeSurfaceZ(value, domain, heightExtent, axis) {
|
|
163
|
-
return -(
|
|
163
|
+
return -(_chunkO3V2MCOCcjs.normalizeSurfaceValue.call(void 0, value, domain.minValue, domain.safeMax, axis) - 0.5) * heightExtent;
|
|
164
164
|
}
|
|
165
165
|
function projectCartesian3dPoint(x, y, z, rotXRad, rotYRad, usePerspective, perspectiveStrength, rightAngleAxes) {
|
|
166
166
|
if (rightAngleAxes) {
|
|
@@ -224,7 +224,7 @@ function buildSurfaceMesh(chart, palette, layout) {
|
|
|
224
224
|
const rotY = (_nullishCoalesce(_optionalChain([chart, 'access', _33 => _33.view3d, 'optionalAccess', _34 => _34.rotY]), () => ( 30))) * (Math.PI / 180);
|
|
225
225
|
const usePerspective = !isContour && _optionalChain([chart, 'access', _35 => _35.view3d, 'optionalAccess', _36 => _36.rAngAx]) === false;
|
|
226
226
|
const perspectiveStrength = clamp((_nullishCoalesce(_optionalChain([chart, 'access', _37 => _37.view3d, 'optionalAccess', _38 => _38.perspective]), () => ( (usePerspective ? 30 : 0)))) / 100, 0, 1);
|
|
227
|
-
const ratios =
|
|
227
|
+
const ratios = _chunkO3V2MCOCcjs.surfaceDataRatios.call(void 0, rows, cols, _optionalChain([chart, 'access', _39 => _39.valueAxis, 'optionalAccess', _40 => _40.crossBetween]) !== "midCat", _optionalChain([chart, 'access', _41 => _41.view3d, 'optionalAccess', _42 => _42.heightPercent]), _optionalChain([chart, 'access', _43 => _43.view3d, 'optionalAccess', _44 => _44.depthPercent]), layout);
|
|
228
228
|
const depthScale = ratios.depth;
|
|
229
229
|
const heightExtent = 2 * ratios.height;
|
|
230
230
|
const usesFlatMaterial = chart.surfaceMaterial === "flat";
|
|
@@ -274,7 +274,7 @@ function buildSurfaceMesh(chart, palette, layout) {
|
|
|
274
274
|
if (p00 == null || p10 == null || p01 == null || p11 == null) {
|
|
275
275
|
continue;
|
|
276
276
|
}
|
|
277
|
-
const triangles =
|
|
277
|
+
const triangles = _chunkO3V2MCOCcjs.triangulateSurfaceQuad.call(void 0, [
|
|
278
278
|
{ value: p00, x: columnIndex, y: rowIndex },
|
|
279
279
|
{ value: p10, x: columnIndex + 1, y: rowIndex },
|
|
280
280
|
{ value: p11, x: columnIndex + 1, y: rowIndex + 1 },
|
|
@@ -284,7 +284,7 @@ function buildSurfaceMesh(chart, palette, layout) {
|
|
|
284
284
|
for (let band = 0; band < domain.ticks.length - 1; band += 1) {
|
|
285
285
|
const lower = domain.ticks[band];
|
|
286
286
|
const upper = domain.ticks[band + 1];
|
|
287
|
-
const polygon =
|
|
287
|
+
const polygon = _chunkO3V2MCOCcjs.clipSurfaceBand.call(void 0, _chunkO3V2MCOCcjs.clipSurfaceBand.call(void 0, triangle, lower, true, chart.valueAxis, band === 0), upper, false, chart.valueAxis);
|
|
288
288
|
if (polygon.length < 3) continue;
|
|
289
289
|
const bandColor = resolveSurfaceBandColor(chart, palette, domain, (lower + upper) / 2);
|
|
290
290
|
if (!isWireframe && bandColor !== "transparent") {
|
|
@@ -295,10 +295,13 @@ function buildSurfaceMesh(chart, palette, layout) {
|
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
297
|
}
|
|
298
|
-
const
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
298
|
+
for (const group of _chunkO3V2MCOCcjs.groupSurfaceBandEdges.call(void 0, polygon, triangle, band, lower, isWireframe)) {
|
|
299
|
+
const edgeMidpoint = (domain.ticks[group.band] + domain.ticks[group.band + 1]) / 2;
|
|
300
|
+
const color = resolveSurfaceWireframeColor(chart, palette, domain, edgeMidpoint);
|
|
301
|
+
if (color !== "transparent") {
|
|
302
|
+
for (const [from, to] of group.edges) {
|
|
303
|
+
contourLines.push({ color, from: projectPoint(from.x, from.y, from.value), to: projectPoint(to.x, to.y, to.value) });
|
|
304
|
+
}
|
|
302
305
|
}
|
|
303
306
|
}
|
|
304
307
|
}
|
|
@@ -426,8 +429,8 @@ function buildSurfaceMesh(chart, palette, layout) {
|
|
|
426
429
|
const wallColors = [];
|
|
427
430
|
for (const triangle of wallTriangles) {
|
|
428
431
|
const world = triangle.points.map((point) => ({ x: point.worldX, y: point.worldY, z: -point.worldZ }));
|
|
429
|
-
const normal =
|
|
430
|
-
const rgba = colorToRgba(usesFlatMaterial ? triangle.color :
|
|
432
|
+
const normal = _chunkO3V2MCOCcjs.transformSurfaceNormal.call(void 0, _chunkO3V2MCOCcjs.surfaceNormal.call(void 0, world[0], world[1], world[2]), _nullishCoalesce(_optionalChain([chart, 'access', _101 => _101.view3d, 'optionalAccess', _102 => _102.rotX]), () => ( 25)), _nullishCoalesce(_optionalChain([chart, 'access', _103 => _103.view3d, 'optionalAccess', _104 => _104.rotY]), () => ( 30)), _optionalChain([chart, 'access', _105 => _105.view3d, 'optionalAccess', _106 => _106.rAngAx]) !== false);
|
|
433
|
+
const rgba = colorToRgba(usesFlatMaterial ? triangle.color : _chunkO3V2MCOCcjs.shadeSurfaceMatteColor.call(void 0, triangle.color, normal), 1);
|
|
431
434
|
for (const point of triangle.points) {
|
|
432
435
|
const clip = toClipPoint(point);
|
|
433
436
|
wallPositions.push(clip.x, clip.y, clip.z);
|
|
@@ -442,8 +445,8 @@ function buildSurfaceMesh(chart, palette, layout) {
|
|
|
442
445
|
continue;
|
|
443
446
|
}
|
|
444
447
|
const world = [left, middle, right].map((vertex) => ({ x: vertex.point.worldX, y: vertex.point.worldY, z: -vertex.point.worldZ }));
|
|
445
|
-
const normal =
|
|
446
|
-
const shaded = colorToRgba(usesFlatMaterial ? left.bandColor :
|
|
448
|
+
const normal = _chunkO3V2MCOCcjs.transformSurfaceNormal.call(void 0, _chunkO3V2MCOCcjs.surfaceNormal.call(void 0, world[0], world[1], world[2]), _nullishCoalesce(_optionalChain([chart, 'access', _107 => _107.view3d, 'optionalAccess', _108 => _108.rotX]), () => ( 25)), _nullishCoalesce(_optionalChain([chart, 'access', _109 => _109.view3d, 'optionalAccess', _110 => _110.rotY]), () => ( 30)), _optionalChain([chart, 'access', _111 => _111.view3d, 'optionalAccess', _112 => _112.rAngAx]) !== false);
|
|
449
|
+
const shaded = colorToRgba(usesFlatMaterial ? left.bandColor : _chunkO3V2MCOCcjs.shadeSurfaceMatteColor.call(void 0, left.bandColor, normal), 1);
|
|
447
450
|
[left, middle, right].forEach((vertex) => {
|
|
448
451
|
const clip = toClipPoint(vertex.point);
|
|
449
452
|
fillPositions.push(clip.x, clip.y, clip.z);
|
|
@@ -718,4 +721,4 @@ var MemoSurfaceChartComposite = React.memo(function MemoSurfaceChartComposite2({
|
|
|
718
721
|
|
|
719
722
|
|
|
720
723
|
exports.MemoSurfaceChartComposite = MemoSurfaceChartComposite;
|
|
721
|
-
//# sourceMappingURL=surface-regl-
|
|
724
|
+
//# sourceMappingURL=surface-regl-SUJ2TFZA.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/surface-regl-SUJ2TFZA.cjs","../src/surface-regl.tsx"],"names":["MemoSurfaceChartComposite"],"mappings":"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","file":"/home/runner/work/react-xlsx/react-xlsx/packages/react-xlsx/dist/surface-regl-SUJ2TFZA.cjs","sourcesContent":[null,"import { getBuiltinChartColor, getBuiltinChartSurfaceLine, resolveBuiltinChartColor } from \"./builtin-chart-styles\";\nimport createREGL from \"regl\";\nimport * as React from \"react\";\nimport { shadeSurfaceMatteColor, surfaceNormal, transformSurfaceNormal } from \"./surface-lighting\";\nimport { clipSurfaceBand, groupSurfaceBandEdges, normalizeSurfaceValue, surfaceDataRatios, triangulateSurfaceQuad } from \"./surface-geometry\";\nimport type { XlsxChart } from \"./types\";\n\ntype SurfacePalette = {\n border: string;\n mutedText: string;\n surface: string;\n text: string;\n};\n\ntype SurfaceLayout = {\n height: number;\n plot: {\n height: number;\n left: number;\n top: number;\n width: number;\n };\n width: number;\n};\n\ntype SurfaceCompositeProps = {\n background: string;\n borderColor: string;\n chart: XlsxChart;\n fontFamily: string;\n layout: SurfaceLayout;\n onDoubleClick?: React.MouseEventHandler<SVGSVGElement>;\n onPointerDown?: React.PointerEventHandler<SVGSVGElement>;\n overlay: React.ReactNode;\n palette: SurfacePalette;\n fallback: React.ReactNode;\n};\n\ntype SurfaceDomain = {\n maxValue: number;\n minValue: number;\n safeMax: number;\n ticks: number[];\n};\n\ntype SurfacePoint3D = {\n depth: number;\n worldX: number;\n worldY: number;\n worldZ: number;\n x: number;\n y: number;\n};\n\ntype SurfaceVertex = {\n bandColor: string;\n point: SurfacePoint3D;\n value: number;\n};\n\ntype SolidSurfaceTriangle = {\n color: string;\n points: [SurfacePoint3D, SurfacePoint3D, SurfacePoint3D];\n};\n\ntype SurfaceScene = {\n fillColors: Float32Array;\n fillPositions: Float32Array;\n lineColors: Float32Array;\n linePositions: Float32Array;\n wallColors: Float32Array;\n wallPositions: Float32Array;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction safeNumber(value: unknown) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const normalized = value.trim().replace(/,/g, \"\");\n if (!normalized) {\n return null;\n }\n const parsed = Number(normalized);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction parseRgbColor(color: string) {\n const match = /^#?([0-9a-f]{6})$/i.exec(color);\n if (!match) {\n return null;\n }\n return {\n blue: Number.parseInt(match[1].slice(4, 6), 16),\n green: Number.parseInt(match[1].slice(2, 4), 16),\n red: Number.parseInt(match[1].slice(0, 2), 16)\n };\n}\n\nfunction mixRgbColor(color: string, mixWith: string, ratio: number) {\n const base = parseRgbColor(color);\n const target = parseRgbColor(mixWith);\n if (!base || !target) {\n return color;\n }\n const clamped = clamp(ratio, 0, 1);\n const mixChannel = (left: number, right: number) => Math.round(left + (right - left) * clamped);\n return `#${[\n mixChannel(base.red, target.red),\n mixChannel(base.green, target.green),\n mixChannel(base.blue, target.blue)\n ].map((value) => value.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\nfunction lightenColor(color: string, ratio: number) {\n return mixRgbColor(color, \"#ffffff\", ratio);\n}\n\nfunction darkenColor(color: string, ratio: number) {\n return mixRgbColor(color, \"#000000\", ratio);\n}\n\nfunction resolveSurfaceBaseColor(chart: XlsxChart, palette: Pick<SurfacePalette, \"text\">) {\n return chart.chartColorPalette?.[0]\n ?? chart.series[0]?.color\n ?? chart.series[0]?.lineColor\n ?? chart.axisLineColor\n ?? chart.textColor\n ?? palette.text;\n}\n\nfunction normalizeSurfaceRendererHexColor(value: unknown) {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n const normalized = trimmed.startsWith(\"#\") ? trimmed.slice(1) : trimmed;\n return /^[0-9a-f]{6}$/i.test(normalized) ? `#${normalized.toLowerCase()}` : null;\n}\n\nfunction resolveExplicitSurfaceSeriesColor(chart: XlsxChart, kind: \"fill\" | \"line\") {\n const shape = chart.series[0]?.shapeProperties;\n if (kind === \"fill\" ? shape?.xmlFillHidden === true : shape?.xmlLineHidden === true) return \"transparent\";\n const color = kind === \"fill\"\n ? shape?.xmlFillColor ?? shape?.solidFillHex\n : shape?.xmlLineColor ?? shape?.lineColorHex;\n return normalizeSurfaceRendererHexColor(color);\n}\n\nfunction getSurfaceColorStops(chart: XlsxChart, palette: SurfacePalette) {\n const explicitFill = resolveExplicitSurfaceSeriesColor(chart, \"fill\");\n if (explicitFill) return [explicitFill];\n const colors = (chart.chartColorPalette ?? []).filter((value): value is string => typeof value === \"string\" && value.length > 0);\n return colors.length > 0 ? colors : [resolveSurfaceBaseColor(chart, palette)];\n}\n\nfunction getSurfaceDomain(chart: XlsxChart): SurfaceDomain | null {\n const numericValues = chart.series.flatMap((series) => (\n series.values\n .map((value) => safeNumber(value))\n .filter((value): value is number => value != null)\n ));\n if (numericValues.length === 0) {\n return null;\n }\n const explicitMin = typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min)\n ? chart.valueAxis.min\n : null;\n const explicitMax = typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max)\n ? chart.valueAxis.max\n : null;\n const rawMin = Math.min(...numericValues);\n const rawMax = Math.max(...numericValues);\n const spanBase = Math.max(1e-6, rawMax - Math.min(0, rawMin));\n const roughStep = spanBase / 5;\n const magnitude = Math.pow(10, Math.floor(Math.log10(Math.max(roughStep, 1e-6))));\n const normalized = roughStep / magnitude;\n const niceStep = normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10;\n const step = typeof chart.valueAxis?.majorUnit === \"number\" && chart.valueAxis.majorUnit > 0\n ? chart.valueAxis.majorUnit\n : niceStep * magnitude;\n const minValue = explicitMin ?? (rawMin >= 0 ? 0 : Math.floor(rawMin / step) * step);\n const maxValue = explicitMax ?? Math.ceil(rawMax / step) * step;\n const safeMax = maxValue <= minValue ? minValue + step : maxValue;\n const ticks: number[] = [];\n for (let current = minValue; current <= safeMax + step * 0.001; current += step) {\n ticks.push(Number(current.toFixed(8)));\n }\n const boundedTicks = [...new Set([...ticks.filter((tick) => tick < safeMax), safeMax])];\n return {\n maxValue,\n minValue,\n safeMax,\n ticks: boundedTicks.length >= 2 ? boundedTicks : [minValue, safeMax]\n };\n}\n\nfunction resolveSurfaceBandPaletteColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n const bandIndex = resolveSurfaceBandIndex(domain, value);\n const explicitColor = resolveSurfaceBandFormatColor(chart, \"bandFormatColors\", bandIndex);\n if (explicitColor) return explicitColor;\n const explicitFill = resolveExplicitSurfaceSeriesColor(chart, \"fill\");\n if (explicitFill) return explicitFill;\n const themeColors = chart.raw?.builtinThemeColors as Record<number, string> | undefined;\n const paletteCount = Math.trunc((domain.safeMax - domain.minValue) / (domain.ticks[1] - domain.ticks[0])) + 1;\n const builtinColor = themeColors ? resolveBuiltinChartColor(getBuiltinChartColor(chart.chartStyleId, bandIndex % paletteCount, paletteCount), themeColors) : undefined;\n if (builtinColor) return builtinColor;\n const stops = getSurfaceColorStops(chart, palette);\n if (stops.length === 0) {\n return resolveSurfaceBaseColor(chart, palette);\n }\n return stops[Math.min(stops.length - 1, Math.max(0, bandIndex))] ?? stops[stops.length - 1] ?? resolveSurfaceBaseColor(chart, palette);\n}\n\nfunction resolveSurfaceBandIndex(domain: SurfaceDomain, value: number) {\n const ticks = domain.ticks;\n for (let index = 0; index < ticks.length - 1; index += 1) {\n const end = ticks[index + 1] ?? domain.safeMax;\n if (value <= end || index === ticks.length - 2) {\n return index;\n }\n }\n return Math.max(0, ticks.length - 2);\n}\n\nfunction resolveSurfaceBandColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n return resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n}\n\nfunction resolveSurfaceBandFormatColor(chart: XlsxChart, key: \"bandFormatColors\" | \"bandFormatLineColors\", index: number) {\n const colors = chart.raw?.[key];\n if (!colors || typeof colors !== \"object\" || !Object.prototype.hasOwnProperty.call(colors, index)) return null;\n const color = (colors as Record<number, unknown>)[index];\n return typeof color === \"string\" && color.length > 0 ? color : null;\n}\n\nfunction resolveSurfaceWireframeColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n const bandIndex = resolveSurfaceBandIndex(domain, value);\n const themeColors = chart.raw?.builtinThemeColors as Record<number, string> | undefined;\n const paletteCount = Math.trunc((domain.safeMax - domain.minValue) / (domain.ticks[1] - domain.ticks[0])) + 1;\n const builtinLine = themeColors ? resolveBuiltinChartColor(getBuiltinChartSurfaceLine(chart.chartStyleId, bandIndex, paletteCount), themeColors) : undefined;\n return resolveSurfaceBandFormatColor(chart, \"bandFormatLineColors\", bandIndex)\n ?? resolveExplicitSurfaceSeriesColor(chart, \"line\")\n ?? builtinLine\n ?? resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n}\n\nfunction colorToRgba(color: string, alpha = 1) {\n if (color === \"transparent\") return [0, 0, 0, 0] as const;\n const rgb = parseRgbColor(color);\n if (!rgb) {\n return [0.1, 0.1, 0.1, alpha] as const;\n }\n return [rgb.red / 255, rgb.green / 255, rgb.blue / 255, alpha] as const;\n}\n\nfunction normalizeSurfaceX(column: number, cols: number) {\n return cols <= 1 ? 0 : ((column / (cols - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceY(row: number, rows: number) {\n return rows <= 1 ? 0 : ((row / (rows - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceZ(value: number, domain: SurfaceDomain, heightExtent: number, axis?: XlsxChart[\"valueAxis\"]) {\n return -(normalizeSurfaceValue(value, domain.minValue, domain.safeMax, axis) - 0.5) * heightExtent;\n}\n\nfunction projectCartesian3dPoint(\n x: number,\n y: number,\n z: number,\n rotXRad: number,\n rotYRad: number,\n usePerspective: boolean,\n perspectiveStrength: number,\n rightAngleAxes: boolean\n) {\n if (rightAngleAxes) {\n return { depth: z, x: x + z * Math.sin(rotYRad), y: y - z * Math.sin(rotXRad) };\n }\n const cosX = Math.cos(rotXRad);\n const sinX = Math.sin(rotXRad);\n const cosY = Math.cos(rotYRad);\n const sinY = Math.sin(rotYRad);\n const x1 = x * cosY + z * sinY;\n const z1 = -x * sinY + z * cosY;\n const y1 = y * cosX - z1 * sinX;\n const z2 = y * sinX + z1 * cosX;\n const perspective = usePerspective\n ? 1 / Math.max(0.18, 1 + z2 * (0.24 + perspectiveStrength * 0.5))\n : 1;\n return {\n depth: z2,\n x: x1 * perspective,\n y: y1 * perspective\n };\n}\n\nfunction withProjectedDepth(point: SurfacePoint3D, depth: number): SurfacePoint3D {\n return {\n ...point,\n depth\n };\n}\n\nfunction nudgeProjectedDepth(point: SurfacePoint3D, delta: number): SurfacePoint3D {\n return {\n ...point,\n depth: point.depth + delta\n };\n}\n\nfunction isContourSurfaceChart(chart: XlsxChart) {\n const rawChartType = chart.raw && typeof chart.raw === \"object\" && typeof chart.raw.xmlChartType === \"string\"\n ? chart.raw.xmlChartType\n : \"\";\n if (rawChartType === \"surfaceChart\") {\n return true;\n }\n if (rawChartType === \"surface3DChart\") {\n return false;\n }\n return chart.chartType === \"Surface\" && chart.is3d !== true;\n}\n\nfunction buildSurfaceMesh(chart: XlsxChart, palette: SurfacePalette, layout: SurfaceLayout): SurfaceScene | null {\n const rows = chart.series.length;\n const cols = chart.series.reduce((max, series) => Math.max(max, series.values.length), 0);\n if (rows < 2 || cols < 2) {\n return null;\n }\n const matrix = chart.series.map((series) => (\n Array.from({ length: cols }, (_, columnIndex) => safeNumber(series.values[columnIndex]))\n ));\n const domain = getSurfaceDomain(chart);\n if (!domain) {\n return null;\n }\n const isContour = isContourSurfaceChart(chart);\n const isWireframe = chart.wireframe === true;\n const fillVertices: SurfaceVertex[] = [];\n const wallTriangles: SolidSurfaceTriangle[] = [];\n const contourLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const meshLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const rotX = (chart.view3d?.rotX ?? 25) * (Math.PI / 180);\n const rotY = (chart.view3d?.rotY ?? 30) * (Math.PI / 180);\n const usePerspective = !isContour && chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp((chart.view3d?.perspective ?? (usePerspective ? 30 : 0)) / 100, 0, 1);\n const ratios = surfaceDataRatios(rows, cols, chart.valueAxis?.crossBetween !== \"midCat\", chart.view3d?.heightPercent, chart.view3d?.depthPercent, layout);\n const depthScale = ratios.depth;\n const heightExtent = 2 * ratios.height;\n const usesFlatMaterial = chart.surfaceMaterial === \"flat\";\n const wallLineColor = chart.valueAxis?.majorGridlineColor ?? chart.backWall?.lineColor ?? chart.sideWall?.lineColor ?? chart.floor?.lineColor ?? chart.axisLineColor ?? \"#a6a6a6\";\n const backWallFill = chart.backWall?.fillColor ?? \"#d9d9df\";\n const sideWallFill = chart.sideWall?.fillColor ?? \"#d5d7dc\";\n const floorFill = chart.floor?.fillColor ?? \"#d0d2d8\";\n const projectPoint = (column: number, row: number, value: number): SurfacePoint3D => {\n const worldX = normalizeSurfaceX(column, cols);\n if (isContour) {\n return {\n depth: 0,\n worldX,\n worldY: normalizeSurfaceY(row, rows),\n worldZ: 0,\n x: worldX,\n y: normalizeSurfaceY(row, rows)\n };\n }\n const worldY = normalizeSurfaceZ(value, domain, heightExtent, chart.valueAxis);\n const worldZ = normalizeSurfaceY(row, rows) * depthScale;\n const projected = projectCartesian3dPoint(worldX, worldY, worldZ, rotX, rotY, usePerspective, perspectiveStrength, chart.view3d?.rAngAx !== false);\n return {\n depth: projected.depth,\n worldX,\n worldY,\n worldZ,\n x: projected.x,\n y: projected.y\n };\n };\n const addWallQuad = (a: SurfacePoint3D, b: SurfacePoint3D, c: SurfacePoint3D, d: SurfacePoint3D, color: string) => {\n wallTriangles.push(\n { color, points: [a, b, c] },\n { color, points: [a, c, d] }\n );\n };\n const addMeshLine = (from: SurfacePoint3D, to: SurfacePoint3D, color: string) => {\n meshLines.push({ color, from, to });\n };\n\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex += 1) {\n for (let columnIndex = 0; columnIndex < cols - 1; columnIndex += 1) {\n const p00 = matrix[rowIndex]?.[columnIndex];\n const p10 = matrix[rowIndex]?.[columnIndex + 1];\n const p01 = matrix[rowIndex + 1]?.[columnIndex];\n const p11 = matrix[rowIndex + 1]?.[columnIndex + 1];\n if (p00 == null || p10 == null || p01 == null || p11 == null) {\n continue;\n }\n const triangles = triangulateSurfaceQuad([\n { value: p00, x: columnIndex, y: rowIndex },\n { value: p10, x: columnIndex + 1, y: rowIndex },\n { value: p11, x: columnIndex + 1, y: rowIndex + 1 },\n { value: p01, x: columnIndex, y: rowIndex + 1 }\n ], chart.valueAxis);\n for (const triangle of triangles) {\n for (let band = 0; band < domain.ticks.length - 1; band += 1) {\n const lower = domain.ticks[band];\n const upper = domain.ticks[band + 1];\n const polygon = clipSurfaceBand(clipSurfaceBand(triangle, lower, true, chart.valueAxis, band === 0), upper, false, chart.valueAxis);\n if (polygon.length < 3) continue;\n const bandColor = resolveSurfaceBandColor(chart, palette, domain, (lower + upper) / 2);\n if (!isWireframe && bandColor !== \"transparent\") {\n for (let index = 1; index < polygon.length - 1; index += 1) {\n for (const vertex of [polygon[0], polygon[index], polygon[index + 1]]) {\n const point = projectPoint(vertex.x, vertex.y, vertex.value);\n fillVertices.push({ bandColor, point: isContour ? withProjectedDepth(point, 0.08) : point, value: vertex.value });\n }\n }\n }\n for (const group of groupSurfaceBandEdges(polygon, triangle, band, lower, isWireframe)) {\n const edgeMidpoint = (domain.ticks[group.band] + domain.ticks[group.band + 1]) / 2;\n const color = resolveSurfaceWireframeColor(chart, palette, domain, edgeMidpoint);\n if (color !== \"transparent\") {\n for (const [from, to] of group.edges) {\n contourLines.push({ color, from: projectPoint(from.x, from.y, from.value), to: projectPoint(to.x, to.y, to.value) });\n }\n }\n }\n }\n }\n }\n }\n\n const columnSkip = Math.max(1, chart.categoryAxis?.tickMarkSkip ?? 1);\n const rowSkip = Math.max(1, chart.seriesAxis?.tickMarkSkip ?? 1);\n if (isContour) {\n const topLeft = withProjectedDepth(projectPoint(0, 0, domain.minValue), -0.12);\n const topRight = withProjectedDepth(projectPoint(cols - 1, 0, domain.minValue), -0.12);\n const bottomRight = withProjectedDepth(projectPoint(cols - 1, rows - 1, domain.minValue), -0.12);\n const bottomLeft = withProjectedDepth(projectPoint(0, rows - 1, domain.minValue), -0.12);\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(topLeft, topRight, bottomRight, bottomLeft, backWallFill);\n }\n for (let columnIndex = 0; columnIndex < cols; columnIndex += columnSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(columnIndex, 0, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(columnIndex, rows - 1, domain.minValue), 0.04),\n wallLineColor\n );\n }\n for (let rowIndex = 0; rowIndex < rows; rowIndex += rowSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(0, rowIndex, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(cols - 1, rowIndex, domain.minValue), 0.04),\n wallLineColor\n );\n }\n } else {\n const minPlaneValue = domain.minValue;\n const wallDepthOffset = 0;\n const backRow = chart.view3d?.rAngAx !== false || Math.cos(rotX) * Math.cos(rotY) >= 0 ? rows - 1 : 0;\n const sideColumn = Math.sin(rotY) >= 0 ? 0 : cols - 1;\n if (chart.floor?.hidden !== true && floorFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, rows - 1, minPlaneValue), wallDepthOffset),\n floorFill\n );\n }\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, backRow, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, backRow, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, backRow, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, backRow, minPlaneValue), wallDepthOffset),\n backWallFill\n );\n }\n if (chart.sideWall?.hidden !== true && sideWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(sideColumn, 0, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, 0, minPlaneValue), wallDepthOffset),\n sideWallFill\n );\n }\n for (const tick of chart.valueAxis?.majorGridlines ? domain.ticks : []) {\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, backRow, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, backRow, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(sideColumn, 0, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let columnIndex = 0; chart.categoryAxis?.majorGridlines && columnIndex < cols; columnIndex += columnSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, 0, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, rows - 1, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, backRow, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, backRow, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let rowIndex = 0; chart.seriesAxis?.majorGridlines && rowIndex < rows; rowIndex += rowSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, rowIndex, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(sideColumn, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(sideColumn, rowIndex, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n }\n\n const allPoints = [\n ...fillVertices.map((vertex) => vertex.point),\n ...wallTriangles.flatMap((triangle) => triangle.points),\n ...meshLines.flatMap((line) => [line.from, line.to]),\n ...contourLines.flatMap((line) => [line.from, line.to])\n ];\n if (allPoints.length === 0) {\n return null;\n }\n\n const minX = Math.min(...allPoints.map((point) => point.x));\n const maxX = Math.max(...allPoints.map((point) => point.x));\n const minY = Math.min(...allPoints.map((point) => point.y));\n const maxY = Math.max(...allPoints.map((point) => point.y));\n const minDepth = Math.min(...allPoints.map((point) => point.depth));\n const maxDepth = Math.max(...allPoints.map((point) => point.depth));\n const scale = Math.min(\n layout.plot.width / Math.max(0.25, maxX - minX),\n layout.plot.height / Math.max(0.25, maxY - minY)\n );\n const centerX = layout.plot.left + layout.plot.width / 2;\n const centerY = layout.plot.top + layout.plot.height / 2;\n const centerRawX = (minX + maxX) / 2;\n const centerRawY = (minY + maxY) / 2;\n const toScreenX = (x: number) => centerX + (x - centerRawX) * scale;\n const toScreenY = (y: number) => centerY + (y - centerRawY) * scale;\n const toClipPoint = (point: SurfacePoint3D) => {\n const screenX = toScreenX(point.x);\n const screenY = toScreenY(point.y);\n return {\n x: (screenX / layout.width) * 2 - 1,\n y: 1 - (screenY / layout.height) * 2,\n z: clamp(((point.depth - minDepth) / Math.max(1e-6, maxDepth - minDepth)) * 2 - 1, -1, 1)\n };\n };\n\n const fillPositions: number[] = [];\n const fillColors: number[] = [];\n const wallPositions: number[] = [];\n const wallColors: number[] = [];\n for (const triangle of wallTriangles) {\n const world = triangle.points.map(point => ({ x: point.worldX, y: point.worldY, z: -point.worldZ }));\n const normal = transformSurfaceNormal(surfaceNormal(world[0], world[1], world[2]), chart.view3d?.rotX ?? 25, chart.view3d?.rotY ?? 30, chart.view3d?.rAngAx !== false);\n const rgba = colorToRgba(usesFlatMaterial ? triangle.color : shadeSurfaceMatteColor(triangle.color, normal), 1);\n for (const point of triangle.points) {\n const clip = toClipPoint(point);\n wallPositions.push(clip.x, clip.y, clip.z);\n wallColors.push(rgba[0], rgba[1], rgba[2], rgba[3]);\n }\n }\n for (let index = 0; index < fillVertices.length; index += 3) {\n const left = fillVertices[index];\n const middle = fillVertices[index + 1];\n const right = fillVertices[index + 2];\n if (!left || !middle || !right) {\n continue;\n }\n const world = [left, middle, right].map(vertex => ({ x: vertex.point.worldX, y: vertex.point.worldY, z: -vertex.point.worldZ }));\n const normal = transformSurfaceNormal(surfaceNormal(world[0], world[1], world[2]), chart.view3d?.rotX ?? 25, chart.view3d?.rotY ?? 30, chart.view3d?.rAngAx !== false);\n const shaded = colorToRgba(usesFlatMaterial ? left.bandColor : shadeSurfaceMatteColor(left.bandColor, normal), 1);\n [left, middle, right].forEach((vertex) => {\n const clip = toClipPoint(vertex.point);\n fillPositions.push(clip.x, clip.y, clip.z);\n fillColors.push(shaded[0], shaded[1], shaded[2], shaded[3]);\n });\n }\n\n const linePositions: number[] = [];\n const lineColors: number[] = [];\n meshLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z - 0.00001, to.x, to.y, to.z - 0.00001);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n contourLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z - 0.00001, to.x, to.y, to.z - 0.00001);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n\n return {\n fillColors: new Float32Array(fillColors),\n fillPositions: new Float32Array(fillPositions),\n lineColors: new Float32Array(lineColors),\n linePositions: new Float32Array(linePositions),\n wallColors: new Float32Array(wallColors),\n wallPositions: new Float32Array(wallPositions)\n };\n}\n\nexport const MemoSurfaceChartComposite = React.memo(function MemoSurfaceChartComposite({\n background,\n borderColor,\n chart,\n fontFamily,\n layout,\n onDoubleClick,\n onPointerDown,\n overlay,\n palette,\n fallback\n}: SurfaceCompositeProps) {\n const canvasRef = React.useRef<HTMLCanvasElement | null>(null);\n const [ready, setReady] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n const isContour = isContourSurfaceChart(chart);\n\n React.useEffect(() => {\n if (isContour) {\n setReady(false);\n setFailed(false);\n return;\n }\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n let cancelled = false;\n let reglInstance: ReturnType<typeof createREGL> | null = null;\n\n const drawSurface = () => {\n try {\n const scene = buildSurfaceMesh(chart, palette, layout);\n if (!scene) {\n if (!cancelled) {\n setFailed(true);\n setReady(false);\n }\n return;\n }\n const dpr = window.devicePixelRatio || 1;\n canvas.width = Math.max(1, Math.round(layout.width * dpr));\n canvas.height = Math.max(1, Math.round(layout.height * dpr));\n reglInstance = createREGL({\n attributes: {\n alpha: true,\n antialias: true,\n depth: true,\n premultipliedAlpha: true\n },\n canvas\n });\n const fillCommand = scene.fillPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.fillColors,\n position: scene.fillPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.fillPositions.length / 3,\n depth: {\n enable: true\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const wallCommand = scene.wallPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.wallColors,\n position: scene.wallPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.wallPositions.length / 3,\n depth: {\n enable: true,\n func: \"lequal\"\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const lineCommand = scene.linePositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.lineColors,\n position: scene.linePositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.linePositions.length / 3,\n depth: {\n enable: true,\n func: \"lequal\"\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n lineWidth: 1,\n primitive: \"lines\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n\n reglInstance.clear({ color: [0, 0, 0, 0], depth: 1 });\n wallCommand?.();\n fillCommand?.();\n lineCommand?.();\n if (!cancelled) {\n setReady(true);\n setFailed(false);\n }\n } catch {\n if (!cancelled) {\n setReady(false);\n setFailed(true);\n }\n }\n };\n\n setReady(false);\n setFailed(false);\n drawSurface();\n\n return () => {\n cancelled = true;\n reglInstance?.destroy();\n };\n }, [\n chart,\n isContour,\n layout,\n palette\n ]);\n\n const shouldRenderFallback = isContour || failed || !ready;\n\n return (\n <div\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n role=\"img\"\n style={{\n background,\n border: borderColor.trim().toLowerCase() === \"transparent\" ? \"none\" : `1px solid ${borderColor}`,\n boxSizing: \"border-box\",\n fontFamily,\n height: \"100%\",\n overflow: \"hidden\",\n pointerEvents: \"auto\",\n position: \"relative\",\n width: \"100%\"\n }}\n >\n <canvas\n ref={canvasRef}\n style={{\n display: shouldRenderFallback ? \"none\" : \"block\",\n height: \"100%\",\n inset: 0,\n position: \"absolute\",\n width: \"100%\"\n }}\n />\n <svg\n onDoubleClick={onDoubleClick}\n onPointerDown={onPointerDown}\n style={{ display: \"block\", height: \"100%\", inset: 0, position: \"absolute\", width: \"100%\" }}\n viewBox={`0 0 ${layout.width} ${layout.height}`}\n >\n {shouldRenderFallback ? fallback : null}\n {overlay}\n </svg>\n </div>\n );\n}, (prev, next) => (\n prev.chart === next.chart\n && prev.palette === next.palette\n && prev.background === next.background\n && prev.borderColor === next.borderColor\n && prev.fontFamily === next.fontFamily\n && prev.onDoubleClick === next.onDoubleClick\n && prev.onPointerDown === next.onPointerDown\n && prev.layout.width === next.layout.width\n && prev.layout.height === next.layout.height\n && prev.layout.plot.left === next.layout.plot.left\n && prev.layout.plot.top === next.layout.plot.top\n && prev.layout.plot.width === next.layout.plot.width\n && prev.layout.plot.height === next.layout.plot.height\n && prev.overlay === next.overlay\n && prev.fallback === next.fallback\n));\n"]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
clipSurfaceBand,
|
|
3
|
+
groupSurfaceBandEdges,
|
|
3
4
|
normalizeSurfaceValue,
|
|
4
5
|
shadeSurfaceMatteColor,
|
|
5
|
-
surfaceBandEdges,
|
|
6
6
|
surfaceDataRatios,
|
|
7
7
|
surfaceNormal,
|
|
8
8
|
transformSurfaceNormal,
|
|
9
9
|
triangulateSurfaceQuad
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-VXBNYHW5.js";
|
|
11
11
|
import {
|
|
12
12
|
A,
|
|
13
13
|
N,
|
|
@@ -297,10 +297,13 @@ function buildSurfaceMesh(chart, palette, layout) {
|
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
299
|
}
|
|
300
|
-
const
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
300
|
+
for (const group of groupSurfaceBandEdges(polygon, triangle, band, lower, isWireframe)) {
|
|
301
|
+
const edgeMidpoint = (domain.ticks[group.band] + domain.ticks[group.band + 1]) / 2;
|
|
302
|
+
const color = resolveSurfaceWireframeColor(chart, palette, domain, edgeMidpoint);
|
|
303
|
+
if (color !== "transparent") {
|
|
304
|
+
for (const [from, to] of group.edges) {
|
|
305
|
+
contourLines.push({ color, from: projectPoint(from.x, from.y, from.value), to: projectPoint(to.x, to.y, to.value) });
|
|
306
|
+
}
|
|
304
307
|
}
|
|
305
308
|
}
|
|
306
309
|
}
|
|
@@ -720,4 +723,4 @@ var MemoSurfaceChartComposite = N(function MemoSurfaceChartComposite2({
|
|
|
720
723
|
export {
|
|
721
724
|
MemoSurfaceChartComposite
|
|
722
725
|
};
|
|
723
|
-
//# sourceMappingURL=surface-regl-
|
|
726
|
+
//# sourceMappingURL=surface-regl-TJUWTLAZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/surface-regl.tsx"],"sourcesContent":["import { getBuiltinChartColor, getBuiltinChartSurfaceLine, resolveBuiltinChartColor } from \"./builtin-chart-styles\";\nimport createREGL from \"regl\";\nimport * as React from \"react\";\nimport { shadeSurfaceMatteColor, surfaceNormal, transformSurfaceNormal } from \"./surface-lighting\";\nimport { clipSurfaceBand, groupSurfaceBandEdges, normalizeSurfaceValue, surfaceDataRatios, triangulateSurfaceQuad } from \"./surface-geometry\";\nimport type { XlsxChart } from \"./types\";\n\ntype SurfacePalette = {\n border: string;\n mutedText: string;\n surface: string;\n text: string;\n};\n\ntype SurfaceLayout = {\n height: number;\n plot: {\n height: number;\n left: number;\n top: number;\n width: number;\n };\n width: number;\n};\n\ntype SurfaceCompositeProps = {\n background: string;\n borderColor: string;\n chart: XlsxChart;\n fontFamily: string;\n layout: SurfaceLayout;\n onDoubleClick?: React.MouseEventHandler<SVGSVGElement>;\n onPointerDown?: React.PointerEventHandler<SVGSVGElement>;\n overlay: React.ReactNode;\n palette: SurfacePalette;\n fallback: React.ReactNode;\n};\n\ntype SurfaceDomain = {\n maxValue: number;\n minValue: number;\n safeMax: number;\n ticks: number[];\n};\n\ntype SurfacePoint3D = {\n depth: number;\n worldX: number;\n worldY: number;\n worldZ: number;\n x: number;\n y: number;\n};\n\ntype SurfaceVertex = {\n bandColor: string;\n point: SurfacePoint3D;\n value: number;\n};\n\ntype SolidSurfaceTriangle = {\n color: string;\n points: [SurfacePoint3D, SurfacePoint3D, SurfacePoint3D];\n};\n\ntype SurfaceScene = {\n fillColors: Float32Array;\n fillPositions: Float32Array;\n lineColors: Float32Array;\n linePositions: Float32Array;\n wallColors: Float32Array;\n wallPositions: Float32Array;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction safeNumber(value: unknown) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === \"string\") {\n const normalized = value.trim().replace(/,/g, \"\");\n if (!normalized) {\n return null;\n }\n const parsed = Number(normalized);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction parseRgbColor(color: string) {\n const match = /^#?([0-9a-f]{6})$/i.exec(color);\n if (!match) {\n return null;\n }\n return {\n blue: Number.parseInt(match[1].slice(4, 6), 16),\n green: Number.parseInt(match[1].slice(2, 4), 16),\n red: Number.parseInt(match[1].slice(0, 2), 16)\n };\n}\n\nfunction mixRgbColor(color: string, mixWith: string, ratio: number) {\n const base = parseRgbColor(color);\n const target = parseRgbColor(mixWith);\n if (!base || !target) {\n return color;\n }\n const clamped = clamp(ratio, 0, 1);\n const mixChannel = (left: number, right: number) => Math.round(left + (right - left) * clamped);\n return `#${[\n mixChannel(base.red, target.red),\n mixChannel(base.green, target.green),\n mixChannel(base.blue, target.blue)\n ].map((value) => value.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\nfunction lightenColor(color: string, ratio: number) {\n return mixRgbColor(color, \"#ffffff\", ratio);\n}\n\nfunction darkenColor(color: string, ratio: number) {\n return mixRgbColor(color, \"#000000\", ratio);\n}\n\nfunction resolveSurfaceBaseColor(chart: XlsxChart, palette: Pick<SurfacePalette, \"text\">) {\n return chart.chartColorPalette?.[0]\n ?? chart.series[0]?.color\n ?? chart.series[0]?.lineColor\n ?? chart.axisLineColor\n ?? chart.textColor\n ?? palette.text;\n}\n\nfunction normalizeSurfaceRendererHexColor(value: unknown) {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n const normalized = trimmed.startsWith(\"#\") ? trimmed.slice(1) : trimmed;\n return /^[0-9a-f]{6}$/i.test(normalized) ? `#${normalized.toLowerCase()}` : null;\n}\n\nfunction resolveExplicitSurfaceSeriesColor(chart: XlsxChart, kind: \"fill\" | \"line\") {\n const shape = chart.series[0]?.shapeProperties;\n if (kind === \"fill\" ? shape?.xmlFillHidden === true : shape?.xmlLineHidden === true) return \"transparent\";\n const color = kind === \"fill\"\n ? shape?.xmlFillColor ?? shape?.solidFillHex\n : shape?.xmlLineColor ?? shape?.lineColorHex;\n return normalizeSurfaceRendererHexColor(color);\n}\n\nfunction getSurfaceColorStops(chart: XlsxChart, palette: SurfacePalette) {\n const explicitFill = resolveExplicitSurfaceSeriesColor(chart, \"fill\");\n if (explicitFill) return [explicitFill];\n const colors = (chart.chartColorPalette ?? []).filter((value): value is string => typeof value === \"string\" && value.length > 0);\n return colors.length > 0 ? colors : [resolveSurfaceBaseColor(chart, palette)];\n}\n\nfunction getSurfaceDomain(chart: XlsxChart): SurfaceDomain | null {\n const numericValues = chart.series.flatMap((series) => (\n series.values\n .map((value) => safeNumber(value))\n .filter((value): value is number => value != null)\n ));\n if (numericValues.length === 0) {\n return null;\n }\n const explicitMin = typeof chart.valueAxis?.min === \"number\" && Number.isFinite(chart.valueAxis.min)\n ? chart.valueAxis.min\n : null;\n const explicitMax = typeof chart.valueAxis?.max === \"number\" && Number.isFinite(chart.valueAxis.max)\n ? chart.valueAxis.max\n : null;\n const rawMin = Math.min(...numericValues);\n const rawMax = Math.max(...numericValues);\n const spanBase = Math.max(1e-6, rawMax - Math.min(0, rawMin));\n const roughStep = spanBase / 5;\n const magnitude = Math.pow(10, Math.floor(Math.log10(Math.max(roughStep, 1e-6))));\n const normalized = roughStep / magnitude;\n const niceStep = normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10;\n const step = typeof chart.valueAxis?.majorUnit === \"number\" && chart.valueAxis.majorUnit > 0\n ? chart.valueAxis.majorUnit\n : niceStep * magnitude;\n const minValue = explicitMin ?? (rawMin >= 0 ? 0 : Math.floor(rawMin / step) * step);\n const maxValue = explicitMax ?? Math.ceil(rawMax / step) * step;\n const safeMax = maxValue <= minValue ? minValue + step : maxValue;\n const ticks: number[] = [];\n for (let current = minValue; current <= safeMax + step * 0.001; current += step) {\n ticks.push(Number(current.toFixed(8)));\n }\n const boundedTicks = [...new Set([...ticks.filter((tick) => tick < safeMax), safeMax])];\n return {\n maxValue,\n minValue,\n safeMax,\n ticks: boundedTicks.length >= 2 ? boundedTicks : [minValue, safeMax]\n };\n}\n\nfunction resolveSurfaceBandPaletteColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n const bandIndex = resolveSurfaceBandIndex(domain, value);\n const explicitColor = resolveSurfaceBandFormatColor(chart, \"bandFormatColors\", bandIndex);\n if (explicitColor) return explicitColor;\n const explicitFill = resolveExplicitSurfaceSeriesColor(chart, \"fill\");\n if (explicitFill) return explicitFill;\n const themeColors = chart.raw?.builtinThemeColors as Record<number, string> | undefined;\n const paletteCount = Math.trunc((domain.safeMax - domain.minValue) / (domain.ticks[1] - domain.ticks[0])) + 1;\n const builtinColor = themeColors ? resolveBuiltinChartColor(getBuiltinChartColor(chart.chartStyleId, bandIndex % paletteCount, paletteCount), themeColors) : undefined;\n if (builtinColor) return builtinColor;\n const stops = getSurfaceColorStops(chart, palette);\n if (stops.length === 0) {\n return resolveSurfaceBaseColor(chart, palette);\n }\n return stops[Math.min(stops.length - 1, Math.max(0, bandIndex))] ?? stops[stops.length - 1] ?? resolveSurfaceBaseColor(chart, palette);\n}\n\nfunction resolveSurfaceBandIndex(domain: SurfaceDomain, value: number) {\n const ticks = domain.ticks;\n for (let index = 0; index < ticks.length - 1; index += 1) {\n const end = ticks[index + 1] ?? domain.safeMax;\n if (value <= end || index === ticks.length - 2) {\n return index;\n }\n }\n return Math.max(0, ticks.length - 2);\n}\n\nfunction resolveSurfaceBandColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n return resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n}\n\nfunction resolveSurfaceBandFormatColor(chart: XlsxChart, key: \"bandFormatColors\" | \"bandFormatLineColors\", index: number) {\n const colors = chart.raw?.[key];\n if (!colors || typeof colors !== \"object\" || !Object.prototype.hasOwnProperty.call(colors, index)) return null;\n const color = (colors as Record<number, unknown>)[index];\n return typeof color === \"string\" && color.length > 0 ? color : null;\n}\n\nfunction resolveSurfaceWireframeColor(chart: XlsxChart, palette: SurfacePalette, domain: SurfaceDomain, value: number) {\n const bandIndex = resolveSurfaceBandIndex(domain, value);\n const themeColors = chart.raw?.builtinThemeColors as Record<number, string> | undefined;\n const paletteCount = Math.trunc((domain.safeMax - domain.minValue) / (domain.ticks[1] - domain.ticks[0])) + 1;\n const builtinLine = themeColors ? resolveBuiltinChartColor(getBuiltinChartSurfaceLine(chart.chartStyleId, bandIndex, paletteCount), themeColors) : undefined;\n return resolveSurfaceBandFormatColor(chart, \"bandFormatLineColors\", bandIndex)\n ?? resolveExplicitSurfaceSeriesColor(chart, \"line\")\n ?? builtinLine\n ?? resolveSurfaceBandPaletteColor(chart, palette, domain, value);\n}\n\nfunction colorToRgba(color: string, alpha = 1) {\n if (color === \"transparent\") return [0, 0, 0, 0] as const;\n const rgb = parseRgbColor(color);\n if (!rgb) {\n return [0.1, 0.1, 0.1, alpha] as const;\n }\n return [rgb.red / 255, rgb.green / 255, rgb.blue / 255, alpha] as const;\n}\n\nfunction normalizeSurfaceX(column: number, cols: number) {\n return cols <= 1 ? 0 : ((column / (cols - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceY(row: number, rows: number) {\n return rows <= 1 ? 0 : ((row / (rows - 1)) - 0.5) * 2;\n}\n\nfunction normalizeSurfaceZ(value: number, domain: SurfaceDomain, heightExtent: number, axis?: XlsxChart[\"valueAxis\"]) {\n return -(normalizeSurfaceValue(value, domain.minValue, domain.safeMax, axis) - 0.5) * heightExtent;\n}\n\nfunction projectCartesian3dPoint(\n x: number,\n y: number,\n z: number,\n rotXRad: number,\n rotYRad: number,\n usePerspective: boolean,\n perspectiveStrength: number,\n rightAngleAxes: boolean\n) {\n if (rightAngleAxes) {\n return { depth: z, x: x + z * Math.sin(rotYRad), y: y - z * Math.sin(rotXRad) };\n }\n const cosX = Math.cos(rotXRad);\n const sinX = Math.sin(rotXRad);\n const cosY = Math.cos(rotYRad);\n const sinY = Math.sin(rotYRad);\n const x1 = x * cosY + z * sinY;\n const z1 = -x * sinY + z * cosY;\n const y1 = y * cosX - z1 * sinX;\n const z2 = y * sinX + z1 * cosX;\n const perspective = usePerspective\n ? 1 / Math.max(0.18, 1 + z2 * (0.24 + perspectiveStrength * 0.5))\n : 1;\n return {\n depth: z2,\n x: x1 * perspective,\n y: y1 * perspective\n };\n}\n\nfunction withProjectedDepth(point: SurfacePoint3D, depth: number): SurfacePoint3D {\n return {\n ...point,\n depth\n };\n}\n\nfunction nudgeProjectedDepth(point: SurfacePoint3D, delta: number): SurfacePoint3D {\n return {\n ...point,\n depth: point.depth + delta\n };\n}\n\nfunction isContourSurfaceChart(chart: XlsxChart) {\n const rawChartType = chart.raw && typeof chart.raw === \"object\" && typeof chart.raw.xmlChartType === \"string\"\n ? chart.raw.xmlChartType\n : \"\";\n if (rawChartType === \"surfaceChart\") {\n return true;\n }\n if (rawChartType === \"surface3DChart\") {\n return false;\n }\n return chart.chartType === \"Surface\" && chart.is3d !== true;\n}\n\nfunction buildSurfaceMesh(chart: XlsxChart, palette: SurfacePalette, layout: SurfaceLayout): SurfaceScene | null {\n const rows = chart.series.length;\n const cols = chart.series.reduce((max, series) => Math.max(max, series.values.length), 0);\n if (rows < 2 || cols < 2) {\n return null;\n }\n const matrix = chart.series.map((series) => (\n Array.from({ length: cols }, (_, columnIndex) => safeNumber(series.values[columnIndex]))\n ));\n const domain = getSurfaceDomain(chart);\n if (!domain) {\n return null;\n }\n const isContour = isContourSurfaceChart(chart);\n const isWireframe = chart.wireframe === true;\n const fillVertices: SurfaceVertex[] = [];\n const wallTriangles: SolidSurfaceTriangle[] = [];\n const contourLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const meshLines: Array<{ color: string; from: SurfacePoint3D; to: SurfacePoint3D }> = [];\n const rotX = (chart.view3d?.rotX ?? 25) * (Math.PI / 180);\n const rotY = (chart.view3d?.rotY ?? 30) * (Math.PI / 180);\n const usePerspective = !isContour && chart.view3d?.rAngAx === false;\n const perspectiveStrength = clamp((chart.view3d?.perspective ?? (usePerspective ? 30 : 0)) / 100, 0, 1);\n const ratios = surfaceDataRatios(rows, cols, chart.valueAxis?.crossBetween !== \"midCat\", chart.view3d?.heightPercent, chart.view3d?.depthPercent, layout);\n const depthScale = ratios.depth;\n const heightExtent = 2 * ratios.height;\n const usesFlatMaterial = chart.surfaceMaterial === \"flat\";\n const wallLineColor = chart.valueAxis?.majorGridlineColor ?? chart.backWall?.lineColor ?? chart.sideWall?.lineColor ?? chart.floor?.lineColor ?? chart.axisLineColor ?? \"#a6a6a6\";\n const backWallFill = chart.backWall?.fillColor ?? \"#d9d9df\";\n const sideWallFill = chart.sideWall?.fillColor ?? \"#d5d7dc\";\n const floorFill = chart.floor?.fillColor ?? \"#d0d2d8\";\n const projectPoint = (column: number, row: number, value: number): SurfacePoint3D => {\n const worldX = normalizeSurfaceX(column, cols);\n if (isContour) {\n return {\n depth: 0,\n worldX,\n worldY: normalizeSurfaceY(row, rows),\n worldZ: 0,\n x: worldX,\n y: normalizeSurfaceY(row, rows)\n };\n }\n const worldY = normalizeSurfaceZ(value, domain, heightExtent, chart.valueAxis);\n const worldZ = normalizeSurfaceY(row, rows) * depthScale;\n const projected = projectCartesian3dPoint(worldX, worldY, worldZ, rotX, rotY, usePerspective, perspectiveStrength, chart.view3d?.rAngAx !== false);\n return {\n depth: projected.depth,\n worldX,\n worldY,\n worldZ,\n x: projected.x,\n y: projected.y\n };\n };\n const addWallQuad = (a: SurfacePoint3D, b: SurfacePoint3D, c: SurfacePoint3D, d: SurfacePoint3D, color: string) => {\n wallTriangles.push(\n { color, points: [a, b, c] },\n { color, points: [a, c, d] }\n );\n };\n const addMeshLine = (from: SurfacePoint3D, to: SurfacePoint3D, color: string) => {\n meshLines.push({ color, from, to });\n };\n\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex += 1) {\n for (let columnIndex = 0; columnIndex < cols - 1; columnIndex += 1) {\n const p00 = matrix[rowIndex]?.[columnIndex];\n const p10 = matrix[rowIndex]?.[columnIndex + 1];\n const p01 = matrix[rowIndex + 1]?.[columnIndex];\n const p11 = matrix[rowIndex + 1]?.[columnIndex + 1];\n if (p00 == null || p10 == null || p01 == null || p11 == null) {\n continue;\n }\n const triangles = triangulateSurfaceQuad([\n { value: p00, x: columnIndex, y: rowIndex },\n { value: p10, x: columnIndex + 1, y: rowIndex },\n { value: p11, x: columnIndex + 1, y: rowIndex + 1 },\n { value: p01, x: columnIndex, y: rowIndex + 1 }\n ], chart.valueAxis);\n for (const triangle of triangles) {\n for (let band = 0; band < domain.ticks.length - 1; band += 1) {\n const lower = domain.ticks[band];\n const upper = domain.ticks[band + 1];\n const polygon = clipSurfaceBand(clipSurfaceBand(triangle, lower, true, chart.valueAxis, band === 0), upper, false, chart.valueAxis);\n if (polygon.length < 3) continue;\n const bandColor = resolveSurfaceBandColor(chart, palette, domain, (lower + upper) / 2);\n if (!isWireframe && bandColor !== \"transparent\") {\n for (let index = 1; index < polygon.length - 1; index += 1) {\n for (const vertex of [polygon[0], polygon[index], polygon[index + 1]]) {\n const point = projectPoint(vertex.x, vertex.y, vertex.value);\n fillVertices.push({ bandColor, point: isContour ? withProjectedDepth(point, 0.08) : point, value: vertex.value });\n }\n }\n }\n for (const group of groupSurfaceBandEdges(polygon, triangle, band, lower, isWireframe)) {\n const edgeMidpoint = (domain.ticks[group.band] + domain.ticks[group.band + 1]) / 2;\n const color = resolveSurfaceWireframeColor(chart, palette, domain, edgeMidpoint);\n if (color !== \"transparent\") {\n for (const [from, to] of group.edges) {\n contourLines.push({ color, from: projectPoint(from.x, from.y, from.value), to: projectPoint(to.x, to.y, to.value) });\n }\n }\n }\n }\n }\n }\n }\n\n const columnSkip = Math.max(1, chart.categoryAxis?.tickMarkSkip ?? 1);\n const rowSkip = Math.max(1, chart.seriesAxis?.tickMarkSkip ?? 1);\n if (isContour) {\n const topLeft = withProjectedDepth(projectPoint(0, 0, domain.minValue), -0.12);\n const topRight = withProjectedDepth(projectPoint(cols - 1, 0, domain.minValue), -0.12);\n const bottomRight = withProjectedDepth(projectPoint(cols - 1, rows - 1, domain.minValue), -0.12);\n const bottomLeft = withProjectedDepth(projectPoint(0, rows - 1, domain.minValue), -0.12);\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(topLeft, topRight, bottomRight, bottomLeft, backWallFill);\n }\n for (let columnIndex = 0; columnIndex < cols; columnIndex += columnSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(columnIndex, 0, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(columnIndex, rows - 1, domain.minValue), 0.04),\n wallLineColor\n );\n }\n for (let rowIndex = 0; rowIndex < rows; rowIndex += rowSkip) {\n addMeshLine(\n withProjectedDepth(projectPoint(0, rowIndex, domain.minValue), 0.04),\n withProjectedDepth(projectPoint(cols - 1, rowIndex, domain.minValue), 0.04),\n wallLineColor\n );\n }\n } else {\n const minPlaneValue = domain.minValue;\n const wallDepthOffset = 0;\n const backRow = chart.view3d?.rAngAx !== false || Math.cos(rotX) * Math.cos(rotY) >= 0 ? rows - 1 : 0;\n const sideColumn = Math.sin(rotY) >= 0 ? 0 : cols - 1;\n if (chart.floor?.hidden !== true && floorFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, 0, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, rows - 1, minPlaneValue), wallDepthOffset),\n floorFill\n );\n }\n if (chart.backWall?.hidden !== true && backWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(0, backRow, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, backRow, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(cols - 1, backRow, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(0, backRow, minPlaneValue), wallDepthOffset),\n backWallFill\n );\n }\n if (chart.sideWall?.hidden !== true && sideWallFill !== \"transparent\") {\n addWallQuad(\n nudgeProjectedDepth(projectPoint(sideColumn, 0, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, domain.safeMax), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, minPlaneValue), wallDepthOffset),\n nudgeProjectedDepth(projectPoint(sideColumn, 0, minPlaneValue), wallDepthOffset),\n sideWallFill\n );\n }\n for (const tick of chart.valueAxis?.majorGridlines ? domain.ticks : []) {\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, backRow, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, backRow, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(sideColumn, 0, tick), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(sideColumn, rows - 1, tick), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let columnIndex = 0; chart.categoryAxis?.majorGridlines && columnIndex < cols; columnIndex += columnSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, 0, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, rows - 1, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.backWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(columnIndex, backRow, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(columnIndex, backRow, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n for (let rowIndex = 0; chart.seriesAxis?.majorGridlines && rowIndex < rows; rowIndex += rowSkip) {\n if (chart.floor?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(0, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(cols - 1, rowIndex, minPlaneValue), wallDepthOffset * 0.75), wallLineColor);\n }\n if (chart.sideWall?.hidden !== true && wallLineColor !== \"transparent\") {\n addMeshLine(nudgeProjectedDepth(projectPoint(sideColumn, rowIndex, minPlaneValue), wallDepthOffset * 0.75), nudgeProjectedDepth(projectPoint(sideColumn, rowIndex, domain.safeMax), wallDepthOffset * 0.75), wallLineColor);\n }\n }\n }\n\n const allPoints = [\n ...fillVertices.map((vertex) => vertex.point),\n ...wallTriangles.flatMap((triangle) => triangle.points),\n ...meshLines.flatMap((line) => [line.from, line.to]),\n ...contourLines.flatMap((line) => [line.from, line.to])\n ];\n if (allPoints.length === 0) {\n return null;\n }\n\n const minX = Math.min(...allPoints.map((point) => point.x));\n const maxX = Math.max(...allPoints.map((point) => point.x));\n const minY = Math.min(...allPoints.map((point) => point.y));\n const maxY = Math.max(...allPoints.map((point) => point.y));\n const minDepth = Math.min(...allPoints.map((point) => point.depth));\n const maxDepth = Math.max(...allPoints.map((point) => point.depth));\n const scale = Math.min(\n layout.plot.width / Math.max(0.25, maxX - minX),\n layout.plot.height / Math.max(0.25, maxY - minY)\n );\n const centerX = layout.plot.left + layout.plot.width / 2;\n const centerY = layout.plot.top + layout.plot.height / 2;\n const centerRawX = (minX + maxX) / 2;\n const centerRawY = (minY + maxY) / 2;\n const toScreenX = (x: number) => centerX + (x - centerRawX) * scale;\n const toScreenY = (y: number) => centerY + (y - centerRawY) * scale;\n const toClipPoint = (point: SurfacePoint3D) => {\n const screenX = toScreenX(point.x);\n const screenY = toScreenY(point.y);\n return {\n x: (screenX / layout.width) * 2 - 1,\n y: 1 - (screenY / layout.height) * 2,\n z: clamp(((point.depth - minDepth) / Math.max(1e-6, maxDepth - minDepth)) * 2 - 1, -1, 1)\n };\n };\n\n const fillPositions: number[] = [];\n const fillColors: number[] = [];\n const wallPositions: number[] = [];\n const wallColors: number[] = [];\n for (const triangle of wallTriangles) {\n const world = triangle.points.map(point => ({ x: point.worldX, y: point.worldY, z: -point.worldZ }));\n const normal = transformSurfaceNormal(surfaceNormal(world[0], world[1], world[2]), chart.view3d?.rotX ?? 25, chart.view3d?.rotY ?? 30, chart.view3d?.rAngAx !== false);\n const rgba = colorToRgba(usesFlatMaterial ? triangle.color : shadeSurfaceMatteColor(triangle.color, normal), 1);\n for (const point of triangle.points) {\n const clip = toClipPoint(point);\n wallPositions.push(clip.x, clip.y, clip.z);\n wallColors.push(rgba[0], rgba[1], rgba[2], rgba[3]);\n }\n }\n for (let index = 0; index < fillVertices.length; index += 3) {\n const left = fillVertices[index];\n const middle = fillVertices[index + 1];\n const right = fillVertices[index + 2];\n if (!left || !middle || !right) {\n continue;\n }\n const world = [left, middle, right].map(vertex => ({ x: vertex.point.worldX, y: vertex.point.worldY, z: -vertex.point.worldZ }));\n const normal = transformSurfaceNormal(surfaceNormal(world[0], world[1], world[2]), chart.view3d?.rotX ?? 25, chart.view3d?.rotY ?? 30, chart.view3d?.rAngAx !== false);\n const shaded = colorToRgba(usesFlatMaterial ? left.bandColor : shadeSurfaceMatteColor(left.bandColor, normal), 1);\n [left, middle, right].forEach((vertex) => {\n const clip = toClipPoint(vertex.point);\n fillPositions.push(clip.x, clip.y, clip.z);\n fillColors.push(shaded[0], shaded[1], shaded[2], shaded[3]);\n });\n }\n\n const linePositions: number[] = [];\n const lineColors: number[] = [];\n meshLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z - 0.00001, to.x, to.y, to.z - 0.00001);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n contourLines.forEach((line) => {\n const from = toClipPoint(line.from);\n const to = toClipPoint(line.to);\n const rgba = colorToRgba(line.color, 1);\n linePositions.push(from.x, from.y, from.z - 0.00001, to.x, to.y, to.z - 0.00001);\n lineColors.push(rgba[0], rgba[1], rgba[2], rgba[3], rgba[0], rgba[1], rgba[2], rgba[3]);\n });\n\n return {\n fillColors: new Float32Array(fillColors),\n fillPositions: new Float32Array(fillPositions),\n lineColors: new Float32Array(lineColors),\n linePositions: new Float32Array(linePositions),\n wallColors: new Float32Array(wallColors),\n wallPositions: new Float32Array(wallPositions)\n };\n}\n\nexport const MemoSurfaceChartComposite = React.memo(function MemoSurfaceChartComposite({\n background,\n borderColor,\n chart,\n fontFamily,\n layout,\n onDoubleClick,\n onPointerDown,\n overlay,\n palette,\n fallback\n}: SurfaceCompositeProps) {\n const canvasRef = React.useRef<HTMLCanvasElement | null>(null);\n const [ready, setReady] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n const isContour = isContourSurfaceChart(chart);\n\n React.useEffect(() => {\n if (isContour) {\n setReady(false);\n setFailed(false);\n return;\n }\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n let cancelled = false;\n let reglInstance: ReturnType<typeof createREGL> | null = null;\n\n const drawSurface = () => {\n try {\n const scene = buildSurfaceMesh(chart, palette, layout);\n if (!scene) {\n if (!cancelled) {\n setFailed(true);\n setReady(false);\n }\n return;\n }\n const dpr = window.devicePixelRatio || 1;\n canvas.width = Math.max(1, Math.round(layout.width * dpr));\n canvas.height = Math.max(1, Math.round(layout.height * dpr));\n reglInstance = createREGL({\n attributes: {\n alpha: true,\n antialias: true,\n depth: true,\n premultipliedAlpha: true\n },\n canvas\n });\n const fillCommand = scene.fillPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.fillColors,\n position: scene.fillPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.fillPositions.length / 3,\n depth: {\n enable: true\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const wallCommand = scene.wallPositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.wallColors,\n position: scene.wallPositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.wallPositions.length / 3,\n depth: {\n enable: true,\n func: \"lequal\"\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n primitive: \"triangles\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n const lineCommand = scene.linePositions.length > 0\n ? reglInstance({\n attributes: {\n color: scene.lineColors,\n position: scene.linePositions\n },\n blend: {\n enable: true,\n func: {\n dstRGB: \"one minus src alpha\",\n dstAlpha: \"one minus src alpha\",\n srcRGB: \"src alpha\",\n srcAlpha: \"src alpha\"\n }\n },\n count: scene.linePositions.length / 3,\n depth: {\n enable: true,\n func: \"lequal\"\n },\n frag: `\n precision mediump float;\n varying vec4 vColor;\n void main() {\n gl_FragColor = vColor;\n }\n `,\n lineWidth: 1,\n primitive: \"lines\",\n vert: `\n precision mediump float;\n attribute vec3 position;\n attribute vec4 color;\n varying vec4 vColor;\n void main() {\n gl_Position = vec4(position, 1.0);\n vColor = color;\n }\n `\n })\n : null;\n\n reglInstance.clear({ color: [0, 0, 0, 0], depth: 1 });\n wallCommand?.();\n fillCommand?.();\n lineCommand?.();\n if (!cancelled) {\n setReady(true);\n setFailed(false);\n }\n } catch {\n if (!cancelled) {\n setReady(false);\n setFailed(true);\n }\n }\n };\n\n setReady(false);\n setFailed(false);\n drawSurface();\n\n return () => {\n cancelled = true;\n reglInstance?.destroy();\n };\n }, [\n chart,\n isContour,\n layout,\n palette\n ]);\n\n const shouldRenderFallback = isContour || failed || !ready;\n\n return (\n <div\n aria-label={chart.title ?? chart.name ?? \"Chart\"}\n role=\"img\"\n style={{\n background,\n border: borderColor.trim().toLowerCase() === \"transparent\" ? \"none\" : `1px solid ${borderColor}`,\n boxSizing: \"border-box\",\n fontFamily,\n height: \"100%\",\n overflow: \"hidden\",\n pointerEvents: \"auto\",\n position: \"relative\",\n width: \"100%\"\n }}\n >\n <canvas\n ref={canvasRef}\n style={{\n display: shouldRenderFallback ? \"none\" : \"block\",\n height: \"100%\",\n inset: 0,\n position: \"absolute\",\n width: \"100%\"\n }}\n />\n <svg\n onDoubleClick={onDoubleClick}\n onPointerDown={onPointerDown}\n style={{ display: \"block\", height: \"100%\", inset: 0, position: \"absolute\", width: \"100%\" }}\n viewBox={`0 0 ${layout.width} ${layout.height}`}\n >\n {shouldRenderFallback ? fallback : null}\n {overlay}\n </svg>\n </div>\n );\n}, (prev, next) => (\n prev.chart === next.chart\n && prev.palette === next.palette\n && prev.background === next.background\n && prev.borderColor === next.borderColor\n && prev.fontFamily === next.fontFamily\n && prev.onDoubleClick === next.onDoubleClick\n && prev.onPointerDown === next.onPointerDown\n && prev.layout.width === next.layout.width\n && prev.layout.height === next.layout.height\n && prev.layout.plot.left === next.layout.plot.left\n && prev.layout.plot.top === next.layout.plot.top\n && prev.layout.plot.width === next.layout.plot.width\n && prev.layout.plot.height === next.layout.plot.height\n && prev.overlay === next.overlay\n && prev.fallback === next.fallback\n));\n"],"mappings":"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","names":["d","MemoSurfaceChartComposite"]}
|
package/dist/vanilla.cjs
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var
|
|
9
|
-
require('./chunk-
|
|
8
|
+
var _chunkHAHCVXCUcjs = require('./chunk-HAHCVXCU.cjs');
|
|
9
|
+
require('./chunk-2MVEKDY2.cjs');
|
|
10
10
|
require('./chunk-CJBI5F6V.cjs');
|
|
11
|
-
require('./chunk-
|
|
11
|
+
require('./chunk-AD4CGQN2.cjs');
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
@@ -16,5 +16,5 @@ require('./chunk-T5WZHPIN.cjs');
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
exports.XlsxFileSizeLimitExceededError =
|
|
19
|
+
exports.XlsxFileSizeLimitExceededError = _chunkHAHCVXCUcjs.XlsxFileSizeLimitExceededError; exports.XlsxViewer = _chunkHAHCVXCUcjs.XlsxViewer; exports.createXlsxViewer = _chunkHAHCVXCUcjs.createXlsxViewer; exports.initWasm = _chunkHAHCVXCUcjs.initWasm; exports.parseXlsxRange = _chunkHAHCVXCUcjs.parseXlsxRange; exports.setWasmSource = _chunkHAHCVXCUcjs.setWasmSource;
|
|
20
20
|
//# sourceMappingURL=vanilla.cjs.map
|
package/dist/vanilla.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { X as XlsxParsedRange } from './internal-
|
|
2
|
-
export { U as UseXlsxViewerControllerOptions, a as UseXlsxViewerThumbnailsOptions, b as XlsxActiveCellOverlayRenderProps, c as XlsxCellAddress, d as XlsxCellAlignmentInput, e as XlsxCellBorderEdgeInput, f as XlsxCellBorderStyleInput, g as XlsxCellFillStyleInput, h as XlsxCellFontStyleInput, i as XlsxCellGradientStopInput, j as XlsxCellNumberFormatInput, k as XlsxCellProtectionInput, l as XlsxCellRange, m as XlsxCellStyleColorInput, n as XlsxCellStyleInput, o as XlsxChart, p as XlsxChartAxis, q as XlsxChartDataLabels, r as XlsxChartElementSelection, s as XlsxChartLegend, t as XlsxChartPointDataLabel, u as XlsxChartPointStyle, v as XlsxChartReference, w as XlsxChartSeries, x as XlsxChartTypeGroup, y as XlsxChartWall, z as XlsxChartsheet, A as XlsxClipboardData, B as XlsxConditionalColorScaleRule, C as XlsxConditionalDataBarRule, D as XlsxConditionalFormatIcon, E as XlsxConditionalFormatRule, F as XlsxConditionalFormatValueObject, G as XlsxConditionalIconSetRule, H as XlsxConditionalStyledRule, I as XlsxContextMenuAction, J as XlsxContextMenuActionId, K as XlsxContextMenuContext, L as XlsxDataValidation, M as XlsxDrawingLayout, N as XlsxFileSizeLimitExceededError, O as XlsxFormControl, P as XlsxFormControlActionEvent, Q as XlsxFormControlCaption, R as XlsxFormControlCaptionInput, S as XlsxFormControlCaptionRun, T as XlsxFormControlChangeEvent, V as XlsxFormControlInput, W as XlsxFormControlKind, Y as XlsxFormControlKindInput, Z as XlsxFormControlPatch, _ as XlsxFormControlSelectionMode, $ as XlsxFormControlState, a0 as XlsxFormulaTarget, a1 as XlsxFreezePanes, a2 as XlsxHighlightRangeOptions, a3 as XlsxImage, a4 as XlsxImageAnchor, a5 as XlsxImageMarker, a6 as XlsxImageRect, a7 as XlsxImageResizeHandlePosition, a8 as XlsxMergeMode, a9 as XlsxRangeHighlight, aa as XlsxResolvedCellStyle, ab as XlsxShape, ac as XlsxShapeFill, ad as XlsxShapeParagraph, ae as XlsxShapeStroke, af as XlsxShapeTextBox, ag as XlsxShapeTextRun, ah as XlsxSheetData, ai as XlsxSheetThumbnail, aj as XlsxSheetThumbnailResolution, ak as XlsxSheetVisibility, al as XlsxSparkline, am as XlsxTable, an as XlsxTableColumn, ao as XlsxTableSortDirection, ap as XlsxTableSortState, aq as XlsxTableStyleDefinition, ar as XlsxTableStyleInfo, as as XlsxThemePalette, at as XlsxVanillaCellStyleContext, au as XlsxVanillaChartLoadingRenderProps, av as XlsxVanillaContent, aw as XlsxVanillaContextMenuRenderProps, ax as XlsxVanillaFileTooLargeRenderProps, ay as XlsxVanillaFormControlRenderProps, az as XlsxVanillaImageRenderProps, aA as XlsxVanillaStyle, aB as XlsxVanillaViewer, aC as XlsxVanillaViewerOptions, aD as XlsxViewer, aE as XlsxViewerCharts, aF as XlsxViewerController, aG as XlsxViewerEditing, aH as XlsxViewerImages, aI as XlsxViewerSelection, aJ as XlsxViewerTables, aK as XlsxViewerThumbnails, aL as XlsxViewerZoom, aM as XlsxWasmSource, aN as XlsxWorkbookTab, aO as createXlsxViewer, aP as initWasm, aQ as setWasmSource } from './internal-
|
|
1
|
+
import { X as XlsxParsedRange } from './internal-trWFv9In.cjs';
|
|
2
|
+
export { U as UseXlsxViewerControllerOptions, a as UseXlsxViewerThumbnailsOptions, b as XlsxActiveCellOverlayRenderProps, c as XlsxCellAddress, d as XlsxCellAlignmentInput, e as XlsxCellBorderEdgeInput, f as XlsxCellBorderStyleInput, g as XlsxCellFillStyleInput, h as XlsxCellFontStyleInput, i as XlsxCellGradientStopInput, j as XlsxCellNumberFormatInput, k as XlsxCellProtectionInput, l as XlsxCellRange, m as XlsxCellStyleColorInput, n as XlsxCellStyleInput, o as XlsxChart, p as XlsxChartAxis, q as XlsxChartDataLabels, r as XlsxChartElementSelection, s as XlsxChartLegend, t as XlsxChartPointDataLabel, u as XlsxChartPointStyle, v as XlsxChartReference, w as XlsxChartSeries, x as XlsxChartTypeGroup, y as XlsxChartWall, z as XlsxChartsheet, A as XlsxClipboardData, B as XlsxConditionalColorScaleRule, C as XlsxConditionalDataBarRule, D as XlsxConditionalFormatIcon, E as XlsxConditionalFormatRule, F as XlsxConditionalFormatValueObject, G as XlsxConditionalIconSetRule, H as XlsxConditionalStyledRule, I as XlsxContextMenuAction, J as XlsxContextMenuActionId, K as XlsxContextMenuContext, L as XlsxDataValidation, M as XlsxDrawingLayout, N as XlsxFileSizeLimitExceededError, O as XlsxFormControl, P as XlsxFormControlActionEvent, Q as XlsxFormControlCaption, R as XlsxFormControlCaptionInput, S as XlsxFormControlCaptionRun, T as XlsxFormControlChangeEvent, V as XlsxFormControlInput, W as XlsxFormControlKind, Y as XlsxFormControlKindInput, Z as XlsxFormControlPatch, _ as XlsxFormControlSelectionMode, $ as XlsxFormControlState, a0 as XlsxFormulaTarget, a1 as XlsxFreezePanes, a2 as XlsxHighlightRangeOptions, a3 as XlsxImage, a4 as XlsxImageAnchor, a5 as XlsxImageMarker, a6 as XlsxImageRect, a7 as XlsxImageResizeHandlePosition, a8 as XlsxMergeMode, a9 as XlsxRangeHighlight, aa as XlsxResolvedCellStyle, ab as XlsxShape, ac as XlsxShapeFill, ad as XlsxShapeParagraph, ae as XlsxShapeStroke, af as XlsxShapeTextBox, ag as XlsxShapeTextRun, ah as XlsxSheetData, ai as XlsxSheetThumbnail, aj as XlsxSheetThumbnailResolution, ak as XlsxSheetVisibility, al as XlsxSparkline, am as XlsxTable, an as XlsxTableColumn, ao as XlsxTableSortDirection, ap as XlsxTableSortState, aq as XlsxTableStyleDefinition, ar as XlsxTableStyleInfo, as as XlsxThemePalette, at as XlsxVanillaCellStyleContext, au as XlsxVanillaChartLoadingRenderProps, av as XlsxVanillaContent, aw as XlsxVanillaContextMenuRenderProps, ax as XlsxVanillaFileTooLargeRenderProps, ay as XlsxVanillaFormControlRenderProps, az as XlsxVanillaImageRenderProps, aA as XlsxVanillaStyle, aB as XlsxVanillaViewer, aC as XlsxVanillaViewerOptions, aD as XlsxViewer, aE as XlsxViewerCharts, aF as XlsxViewerController, aG as XlsxViewerEditing, aH as XlsxViewerImages, aI as XlsxViewerSelection, aJ as XlsxViewerTables, aK as XlsxViewerThumbnails, aL as XlsxViewerZoom, aM as XlsxWasmSource, aN as XlsxWorkbookTab, aO as createXlsxViewer, aP as initWasm, aQ as setWasmSource } from './internal-trWFv9In.cjs';
|
|
3
3
|
import '@dukelib/sheets-wasm';
|
|
4
4
|
import 'csstype';
|
|
5
5
|
|
package/dist/vanilla.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { X as XlsxParsedRange } from './internal-
|
|
2
|
-
export { U as UseXlsxViewerControllerOptions, a as UseXlsxViewerThumbnailsOptions, b as XlsxActiveCellOverlayRenderProps, c as XlsxCellAddress, d as XlsxCellAlignmentInput, e as XlsxCellBorderEdgeInput, f as XlsxCellBorderStyleInput, g as XlsxCellFillStyleInput, h as XlsxCellFontStyleInput, i as XlsxCellGradientStopInput, j as XlsxCellNumberFormatInput, k as XlsxCellProtectionInput, l as XlsxCellRange, m as XlsxCellStyleColorInput, n as XlsxCellStyleInput, o as XlsxChart, p as XlsxChartAxis, q as XlsxChartDataLabels, r as XlsxChartElementSelection, s as XlsxChartLegend, t as XlsxChartPointDataLabel, u as XlsxChartPointStyle, v as XlsxChartReference, w as XlsxChartSeries, x as XlsxChartTypeGroup, y as XlsxChartWall, z as XlsxChartsheet, A as XlsxClipboardData, B as XlsxConditionalColorScaleRule, C as XlsxConditionalDataBarRule, D as XlsxConditionalFormatIcon, E as XlsxConditionalFormatRule, F as XlsxConditionalFormatValueObject, G as XlsxConditionalIconSetRule, H as XlsxConditionalStyledRule, I as XlsxContextMenuAction, J as XlsxContextMenuActionId, K as XlsxContextMenuContext, L as XlsxDataValidation, M as XlsxDrawingLayout, N as XlsxFileSizeLimitExceededError, O as XlsxFormControl, P as XlsxFormControlActionEvent, Q as XlsxFormControlCaption, R as XlsxFormControlCaptionInput, S as XlsxFormControlCaptionRun, T as XlsxFormControlChangeEvent, V as XlsxFormControlInput, W as XlsxFormControlKind, Y as XlsxFormControlKindInput, Z as XlsxFormControlPatch, _ as XlsxFormControlSelectionMode, $ as XlsxFormControlState, a0 as XlsxFormulaTarget, a1 as XlsxFreezePanes, a2 as XlsxHighlightRangeOptions, a3 as XlsxImage, a4 as XlsxImageAnchor, a5 as XlsxImageMarker, a6 as XlsxImageRect, a7 as XlsxImageResizeHandlePosition, a8 as XlsxMergeMode, a9 as XlsxRangeHighlight, aa as XlsxResolvedCellStyle, ab as XlsxShape, ac as XlsxShapeFill, ad as XlsxShapeParagraph, ae as XlsxShapeStroke, af as XlsxShapeTextBox, ag as XlsxShapeTextRun, ah as XlsxSheetData, ai as XlsxSheetThumbnail, aj as XlsxSheetThumbnailResolution, ak as XlsxSheetVisibility, al as XlsxSparkline, am as XlsxTable, an as XlsxTableColumn, ao as XlsxTableSortDirection, ap as XlsxTableSortState, aq as XlsxTableStyleDefinition, ar as XlsxTableStyleInfo, as as XlsxThemePalette, at as XlsxVanillaCellStyleContext, au as XlsxVanillaChartLoadingRenderProps, av as XlsxVanillaContent, aw as XlsxVanillaContextMenuRenderProps, ax as XlsxVanillaFileTooLargeRenderProps, ay as XlsxVanillaFormControlRenderProps, az as XlsxVanillaImageRenderProps, aA as XlsxVanillaStyle, aB as XlsxVanillaViewer, aC as XlsxVanillaViewerOptions, aD as XlsxViewer, aE as XlsxViewerCharts, aF as XlsxViewerController, aG as XlsxViewerEditing, aH as XlsxViewerImages, aI as XlsxViewerSelection, aJ as XlsxViewerTables, aK as XlsxViewerThumbnails, aL as XlsxViewerZoom, aM as XlsxWasmSource, aN as XlsxWorkbookTab, aO as createXlsxViewer, aP as initWasm, aQ as setWasmSource } from './internal-
|
|
1
|
+
import { X as XlsxParsedRange } from './internal-trWFv9In.js';
|
|
2
|
+
export { U as UseXlsxViewerControllerOptions, a as UseXlsxViewerThumbnailsOptions, b as XlsxActiveCellOverlayRenderProps, c as XlsxCellAddress, d as XlsxCellAlignmentInput, e as XlsxCellBorderEdgeInput, f as XlsxCellBorderStyleInput, g as XlsxCellFillStyleInput, h as XlsxCellFontStyleInput, i as XlsxCellGradientStopInput, j as XlsxCellNumberFormatInput, k as XlsxCellProtectionInput, l as XlsxCellRange, m as XlsxCellStyleColorInput, n as XlsxCellStyleInput, o as XlsxChart, p as XlsxChartAxis, q as XlsxChartDataLabels, r as XlsxChartElementSelection, s as XlsxChartLegend, t as XlsxChartPointDataLabel, u as XlsxChartPointStyle, v as XlsxChartReference, w as XlsxChartSeries, x as XlsxChartTypeGroup, y as XlsxChartWall, z as XlsxChartsheet, A as XlsxClipboardData, B as XlsxConditionalColorScaleRule, C as XlsxConditionalDataBarRule, D as XlsxConditionalFormatIcon, E as XlsxConditionalFormatRule, F as XlsxConditionalFormatValueObject, G as XlsxConditionalIconSetRule, H as XlsxConditionalStyledRule, I as XlsxContextMenuAction, J as XlsxContextMenuActionId, K as XlsxContextMenuContext, L as XlsxDataValidation, M as XlsxDrawingLayout, N as XlsxFileSizeLimitExceededError, O as XlsxFormControl, P as XlsxFormControlActionEvent, Q as XlsxFormControlCaption, R as XlsxFormControlCaptionInput, S as XlsxFormControlCaptionRun, T as XlsxFormControlChangeEvent, V as XlsxFormControlInput, W as XlsxFormControlKind, Y as XlsxFormControlKindInput, Z as XlsxFormControlPatch, _ as XlsxFormControlSelectionMode, $ as XlsxFormControlState, a0 as XlsxFormulaTarget, a1 as XlsxFreezePanes, a2 as XlsxHighlightRangeOptions, a3 as XlsxImage, a4 as XlsxImageAnchor, a5 as XlsxImageMarker, a6 as XlsxImageRect, a7 as XlsxImageResizeHandlePosition, a8 as XlsxMergeMode, a9 as XlsxRangeHighlight, aa as XlsxResolvedCellStyle, ab as XlsxShape, ac as XlsxShapeFill, ad as XlsxShapeParagraph, ae as XlsxShapeStroke, af as XlsxShapeTextBox, ag as XlsxShapeTextRun, ah as XlsxSheetData, ai as XlsxSheetThumbnail, aj as XlsxSheetThumbnailResolution, ak as XlsxSheetVisibility, al as XlsxSparkline, am as XlsxTable, an as XlsxTableColumn, ao as XlsxTableSortDirection, ap as XlsxTableSortState, aq as XlsxTableStyleDefinition, ar as XlsxTableStyleInfo, as as XlsxThemePalette, at as XlsxVanillaCellStyleContext, au as XlsxVanillaChartLoadingRenderProps, av as XlsxVanillaContent, aw as XlsxVanillaContextMenuRenderProps, ax as XlsxVanillaFileTooLargeRenderProps, ay as XlsxVanillaFormControlRenderProps, az as XlsxVanillaImageRenderProps, aA as XlsxVanillaStyle, aB as XlsxVanillaViewer, aC as XlsxVanillaViewerOptions, aD as XlsxViewer, aE as XlsxViewerCharts, aF as XlsxViewerController, aG as XlsxViewerEditing, aH as XlsxViewerImages, aI as XlsxViewerSelection, aJ as XlsxViewerTables, aK as XlsxViewerThumbnails, aL as XlsxViewerZoom, aM as XlsxWasmSource, aN as XlsxWorkbookTab, aO as createXlsxViewer, aP as initWasm, aQ as setWasmSource } from './internal-trWFv9In.js';
|
|
3
3
|
import '@dukelib/sheets-wasm';
|
|
4
4
|
import 'csstype';
|
|
5
5
|
|
package/dist/vanilla.js
CHANGED
|
@@ -5,8 +5,8 @@ import {
|
|
|
5
5
|
initWasm,
|
|
6
6
|
parseXlsxRange,
|
|
7
7
|
setWasmSource
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-GXJO6CK6.js";
|
|
9
|
+
import "./chunk-WSQDFXDW.js";
|
|
10
10
|
import "./chunk-NBH72POD.js";
|
|
11
11
|
export {
|
|
12
12
|
XlsxFileSizeLimitExceededError,
|
package/dist/xlsx-worker.js
CHANGED
|
@@ -2382,6 +2382,71 @@ var init_duke_sheets_wasm = __esm({
|
|
|
2382
2382
|
}
|
|
2383
2383
|
});
|
|
2384
2384
|
|
|
2385
|
+
// src/number-locale.ts
|
|
2386
|
+
var separators = /* @__PURE__ */ new Map();
|
|
2387
|
+
function localizeCellNumber(worksheet, row, col, text, locale = "en-US") {
|
|
2388
|
+
if (locale === "en-US" || !text) return text;
|
|
2389
|
+
const value = worksheet.getCalculatedValueAt(row, col);
|
|
2390
|
+
try {
|
|
2391
|
+
if (!value.is_number) return text;
|
|
2392
|
+
} finally {
|
|
2393
|
+
value.free();
|
|
2394
|
+
}
|
|
2395
|
+
const style = worksheet.getCellStyleAt(row, col);
|
|
2396
|
+
const format = style?.numberFormat;
|
|
2397
|
+
if (format?.isDateFormat) return text;
|
|
2398
|
+
let symbols = separators.get(locale);
|
|
2399
|
+
if (!symbols) {
|
|
2400
|
+
const parts = new Intl.NumberFormat(locale).formatToParts(12345.6);
|
|
2401
|
+
symbols = {
|
|
2402
|
+
decimal: parts.find((part) => part.type === "decimal")?.value ?? ".",
|
|
2403
|
+
group: parts.find((part) => part.type === "group")?.value ?? ","
|
|
2404
|
+
};
|
|
2405
|
+
if (separators.size >= 100) separators.clear();
|
|
2406
|
+
separators.set(locale, symbols);
|
|
2407
|
+
}
|
|
2408
|
+
if (symbols.decimal === "." && symbols.group === ",") return text;
|
|
2409
|
+
const protectedPositions = /* @__PURE__ */ new Set();
|
|
2410
|
+
const code = format?.formatString ?? "";
|
|
2411
|
+
const literalPattern = /"[^"]*"|\\.|\[[^\]]*\]/g;
|
|
2412
|
+
const firstPlaceholder = code.replace(literalPattern, (token) => " ".repeat(token.length)).search(/[0#?]/);
|
|
2413
|
+
const literals = [...code.matchAll(literalPattern)];
|
|
2414
|
+
let suffixEnd = text.length;
|
|
2415
|
+
let prefixStart = 0;
|
|
2416
|
+
const protect = (token, suffix) => {
|
|
2417
|
+
const literal = token.startsWith('"') ? token.slice(1, -1) : token.startsWith("\\") ? token.slice(1) : token.startsWith("[$") ? token.slice(2, -1).split("-")[0] : "";
|
|
2418
|
+
if (!literal) return;
|
|
2419
|
+
const offset = suffix ? text.lastIndexOf(literal, suffixEnd - literal.length) : text.indexOf(literal, prefixStart);
|
|
2420
|
+
if (offset >= 0) {
|
|
2421
|
+
for (let i = offset; i < offset + literal.length; i++) protectedPositions.add(i);
|
|
2422
|
+
if (suffix) suffixEnd = offset;
|
|
2423
|
+
else prefixStart = offset + literal.length;
|
|
2424
|
+
}
|
|
2425
|
+
};
|
|
2426
|
+
for (const token of literals.filter((token2) => token2.index < firstPlaceholder)) protect(token[0], false);
|
|
2427
|
+
for (const token of literals.filter((token2) => token2.index >= firstPlaceholder).reverse()) protect(token[0], true);
|
|
2428
|
+
return text.replace(
|
|
2429
|
+
/\d[\d,]*(?:\.\d*)?|\.\d+/g,
|
|
2430
|
+
(number, offset) => number.replace(/[.,]/g, (separator, index) => protectedPositions.has(offset + index) ? separator : separator === "." ? symbols.decimal : symbols.group)
|
|
2431
|
+
);
|
|
2432
|
+
}
|
|
2433
|
+
function localizeRows(worksheet, rows, locale = "en-US") {
|
|
2434
|
+
if (locale === "en-US" || !Array.isArray(rows)) return;
|
|
2435
|
+
for (const row of rows) {
|
|
2436
|
+
for (const cell of row.cells ?? []) {
|
|
2437
|
+
if (!cell.isMergedSecondary && typeof cell.value === "string") {
|
|
2438
|
+
const value = worksheet.getCalculatedValueAt(row.index, cell.col);
|
|
2439
|
+
try {
|
|
2440
|
+
cell.numericValue = value.is_number ? value.asNumber() : null;
|
|
2441
|
+
} finally {
|
|
2442
|
+
value.free();
|
|
2443
|
+
}
|
|
2444
|
+
cell.value = localizeCellNumber(worksheet, row.index, cell.col, cell.value, locale);
|
|
2445
|
+
}
|
|
2446
|
+
}
|
|
2447
|
+
}
|
|
2448
|
+
}
|
|
2449
|
+
|
|
2385
2450
|
// ../../node_modules/.pnpm/fflate@0.8.3/node_modules/fflate/esm/browser.js
|
|
2386
2451
|
var u8 = Uint8Array;
|
|
2387
2452
|
var u16 = Uint16Array;
|
|
@@ -8280,7 +8345,7 @@ async function handleMessage(message) {
|
|
|
8280
8345
|
const targetSheet = sheets.find((sheet) => sheet.workbookSheetIndex === message.payload.workbookSheetIndex) ?? null;
|
|
8281
8346
|
const worksheet = workbook.getSheet(message.payload.workbookSheetIndex);
|
|
8282
8347
|
return {
|
|
8283
|
-
displayValue: getCellDisplayValue(worksheet, message.payload.row, message.payload.col, targetSheet),
|
|
8348
|
+
displayValue: localizeCellNumber(worksheet, message.payload.row, message.payload.col, getCellDisplayValue(worksheet, message.payload.row, message.payload.col, targetSheet), message.payload.locale),
|
|
8284
8349
|
formula: worksheet.getFormulaAt(message.payload.row, message.payload.col) ?? ""
|
|
8285
8350
|
};
|
|
8286
8351
|
}
|
|
@@ -8306,6 +8371,7 @@ async function handleMessage(message) {
|
|
|
8306
8371
|
}
|
|
8307
8372
|
}
|
|
8308
8373
|
}
|
|
8374
|
+
localizeRows(worksheet, rows, message.payload.locale);
|
|
8309
8375
|
return rows;
|
|
8310
8376
|
}
|
|
8311
8377
|
default:
|