pptx-angular-viewer 4.17.0 → 4.17.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/CHANGELOG.md +30 -0
- package/fesm2022/{pptx-angular-viewer-chart-3d-view-scene-BRjvg1Lm.mjs → pptx-angular-viewer-chart-3d-view-scene-C2kA7jqu.mjs} +2 -2
- package/fesm2022/{pptx-angular-viewer-chart-3d-view-scene-BRjvg1Lm.mjs.map → pptx-angular-viewer-chart-3d-view-scene-C2kA7jqu.mjs.map} +1 -1
- package/fesm2022/{pptx-angular-viewer-chat-history-idb-BwJhpRcA.mjs → pptx-angular-viewer-chat-history-idb-BBjLQFND.mjs} +2 -2
- package/fesm2022/{pptx-angular-viewer-chat-history-idb-BwJhpRcA.mjs.map → pptx-angular-viewer-chat-history-idb-BBjLQFND.mjs.map} +1 -1
- package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-Du_RhFi7.mjs → pptx-angular-viewer-pptx-angular-viewer-Bff9Ozdi.mjs} +13 -8
- package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-Du_RhFi7.mjs.map → pptx-angular-viewer-pptx-angular-viewer-Bff9Ozdi.mjs.map} +1 -1
- package/fesm2022/{pptx-angular-viewer-view-scene-BrbiYkoe.mjs → pptx-angular-viewer-view-scene-BzsaxsjL.mjs} +2 -2
- package/fesm2022/{pptx-angular-viewer-view-scene-BrbiYkoe.mjs.map → pptx-angular-viewer-view-scene-BzsaxsjL.mjs.map} +1 -1
- package/fesm2022/pptx-angular-viewer.mjs +1 -1
- package/package.json +2 -2
- package/types/pptx-angular-viewer.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pptx-angular-viewer-chart-3d-view-scene-BRjvg1Lm.mjs","sources":["../../src/internal/shared-src/render/chart-3d-shading.ts","../../src/internal/shared-src/render/chart-3d-oblique-shape-mesh.ts","../../src/internal/shared-src/render/chart-3d-bar-mesh.ts","../../src/internal/shared-src/render/chart-3d-chrome-overlay.ts","../../src/internal/shared-src/render/chart-3d-interaction.ts","../../src/internal/shared-src/render/chart-3d-mark-interaction.ts","../../src/internal/shared-src/render/chart-3d-oblique-drag.ts","../../src/internal/shared-src/render/chart-3d-oblique-interaction.ts","../../src/internal/shared-src/render/chart-3d-persp-bars.ts","../../src/internal/shared-src/render/chart-3d-persp-marks.ts","../../src/internal/shared-src/render/chart-3d-persp-shape-mesh.ts","../../src/internal/shared-src/render/chart-3d-persp-mesh.ts","../../src/internal/shared-src/render/chart-3d-persp-surface.ts","../../src/internal/shared-src/render/chart-3d-persp-surface-mesh.ts","../../src/internal/shared-src/render/chart-3d-persp-mark-set.ts","../../src/internal/shared-src/render/chart-3d-persp-scene.ts","../../src/internal/shared-src/render/chart-3d-pie-marks.ts","../../src/internal/shared-src/render/chart-3d-pie-scene.ts","../../src/internal/shared-src/render/chart-3d-view-scene.ts"],"sourcesContent":["/**\n * chart-3d-shading.ts: PowerPoint's flat chart-space shading for a 3D chart's\n * box faces, as one colour multiplier per named face.\n *\n * PowerPoint's 3D charts (bar3D, pie3D, line3D ribbons, area3D slabs, surface\n * bands) are flat-shaded in \"chart space\": every face of a given orientation\n * gets the SAME multiplier applied to the mark's base colour, regardless of\n * the chart's `c:view3D` tilt. Measured directly off the pixels of\n * `gt/chart-01.webp` (a 3-D Clustered Column, series 1 = theme accent1\n * `#156082`): the front (camera-facing) rect samples the base colour exactly\n * (`front = base`), the top face samples ~0.75x, and the visible side face\n * ~0.64x. `back`/`left` (mirrors of `right`) and `bottom` (rarely visible)\n * are not independently measured; `back`/`left` reuse the measured side\n * multiplier and `bottom` is a reasonable approximation between side and a\n * fully unlit face.\n *\n * @module chart-3d-shading\n */\nimport { shade } from './chart-palette';\n\n/** A box mesh's six face orientations, in the chart's own (unrotated) local frame. */\nexport type Chart3DFace = 'front' | 'back' | 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Darken amount (0-1, `chart-palette.ts#shade`'s `amount`) per face,\n * derived from the measured multipliers: `amount = 1 - multiplier`.\n */\nconst FACE_SHADE_AMOUNT: Record<Chart3DFace, number> = {\n\tfront: 0,\n\ttop: 0.25,\n\tright: 0.36,\n\tleft: 0.36,\n\tback: 0.36,\n\tbottom: 0.5,\n};\n\n/** Apply PowerPoint's measured per-face flat shading to a mark's base colour. */\nexport function shadeChart3DFace(baseColor: string, face: Chart3DFace): string {\n\tconst amount = FACE_SHADE_AMOUNT[face];\n\treturn amount === 0 ? baseColor : shade(baseColor, amount);\n}\n\n/**\n * The six face colours for a box mesh, in the order three.js `BoxGeometry`\n * expects its `material` array (`[+x, -x, +y, -y, +z, -z]`): right, left,\n * top, bottom, front, back. `front`/`back` name whichever world axis the\n * scene treats as the camera-facing depth axis; the caller picks that\n * mapping (see `chart-3d-view-scene.ts`).\n */\nexport function buildChart3DBoxFaceColors(\n\tbaseColor: string,\n): readonly [string, string, string, string, string, string] {\n\treturn [\n\t\tshadeChart3DFace(baseColor, 'right'),\n\t\tshadeChart3DFace(baseColor, 'left'),\n\t\tshadeChart3DFace(baseColor, 'top'),\n\t\tshadeChart3DFace(baseColor, 'bottom'),\n\t\tshadeChart3DFace(baseColor, 'front'),\n\t\tshadeChart3DFace(baseColor, 'back'),\n\t];\n}\n\ntype ShadeFamily = 'box' | 'cylinder' | 'cone' | 'pyramid';\n\n/**\n * Per-shape shade coefficients `[x, y, z]` for {@link chart3DNormalShade}.\n * `box` reproduces the face multipliers above (right 0.64, top 0.75, front\n * 1.0); the others are fitted to `gt/chart-07..09.webp` (accent1 columns):\n * a cylinder runs 1.07x at its centre line to ~0.64x at the silhouette, a\n * cone 1.16x to ~0.7x, a pyramid's front face 1.03x and its side 0.68x. Tops\n * (cylinder cap, box top) sample 0.75x throughout.\n */\nconst NORMAL_SHADE: Record<ShadeFamily, readonly [number, number, number]> = {\n\tbox: [0.64, 0.75, 1],\n\tcylinder: [0.62, 0.75, 1.07],\n\tcone: [0.7, 0.75, 1.16],\n\tpyramid: [0.68, 0.75, 1.03],\n};\n\n/** Multiplier for a downward-facing surface (a bar's underside), rarely visible. */\nconst UNDERSIDE_SHADE = 0.5;\n\nfunction shadeFamily(shape: string | undefined): ShadeFamily {\n\tswitch (shape) {\n\t\tcase 'cylinder':\n\t\t\treturn 'cylinder';\n\t\tcase 'cone':\n\t\tcase 'coneToMax':\n\t\t\treturn 'cone';\n\t\tcase 'pyramid':\n\t\tcase 'pyramidToMax':\n\t\t\treturn 'pyramid';\n\t\tdefault:\n\t\t\treturn 'box';\n\t}\n}\n\n/**\n * PowerPoint's flat chart-space shade for a surface of a `c:shape` bar with\n * unit world normal `(nx, ny, nz)` (x right, y up, z toward the viewer), as\n * a multiplier of the base colour: the quadratic form\n * `cx nx^2 + cy ny^2 + cz nz^2`, which for a box's axis-aligned faces is\n * exactly the per-face table above.\n */\nexport function chart3DNormalShade(\n\tshape: string | undefined,\n\tnx: number,\n\tny: number,\n\tnz: number,\n): number {\n\tconst [cx, cy, cz] = NORMAL_SHADE[shadeFamily(shape)];\n\treturn cx * nx * nx + (ny >= 0 ? cy : UNDERSIDE_SHADE) * ny * ny + cz * nz * nz;\n}\n","/**\n * Round and pointed bars (`c:shape` cylinder / cone / pyramid and the\n * `coneToMax` / `pyramidToMax` frustums) for the right-angle-axes 3D bar chart\n * (`chart-3d-oblique-layout.ts`).\n *\n * Measured on `gt/chart-07..09.webp`: every shape sits in the SAME footprint\n * as a box bar (a round shape is inscribed in the `w x d` base, a pyramid\n * fills it), so the layout is unchanged and only the mesh differs.\n *\n * Geometry is unit-sized (-0.5..0.5 on every axis, like `BoxGeometry(1,1,1)`)\n * so the caller places it with `position` + `scale` exactly as it does a box.\n * Shading is baked into vertex colours from each vertex's WORLD normal (the\n * unit normal corrected for the mesh's non-uniform scale), with\n * `chart-3d-shading.ts`'s per-shape quadratic form, so the drag preview\n * re-shades a bar whose proportions change. A round surface is shaded\n * relative to the oblique VIEW direction (yawed `atan(sin rotY)` off the\n * front normal), which is why PowerPoint's highlight sits at the middle of\n * the silhouette rather than left of it; flat facets keep the box table.\n *\n * @module chart-3d-oblique-shape-mesh\n */\nimport type * as THREE from 'three';\n\nimport type { ObliqueBar } from './chart-3d-oblique-layout';\nimport { chart3DNormalShade } from './chart-3d-shading';\n\ntype ThreeModule = typeof THREE;\n\n/** Radial segments of a round shape: smooth at any chart size. */\nconst ROUND_SEGMENTS = 48;\n\n/** Whether a bar is drawn with this module rather than as a box. */\nexport function isShapedObliqueBar(bar: Pick<ObliqueBar, 'shape'>): boolean {\n\treturn bar.shape !== 'box';\n}\n\n/** Cache key of a bar's unit geometry (shape, taper and orientation). */\nexport function obliqueShapeKey(bar: ObliqueBar, horizontal: boolean): string {\n\treturn `${bar.shape}:${bar.taper.bottom.toFixed(4)}:${bar.taper.top.toFixed(4)}:${horizontal ? 'h' : 'v'}`;\n}\n\n/**\n * The unit geometry of a shaped bar, its axis along +Y (or +X for a\n * horizontal chart, the base at the value-axis baseline end).\n */\nexport function buildObliqueShapeGeometry(\n\tthree: ThreeModule,\n\tbar: ObliqueBar,\n\thorizontal: boolean,\n): THREE.BufferGeometry {\n\tconst pointed = bar.shape === 'pyramid' || bar.shape === 'pyramidToMax';\n\tlet geometry: THREE.BufferGeometry;\n\tif (pointed) {\n\t\t// A 4-segment cylinder is a diamond of \"radius\" r; turned 45 degrees and\n\t\t// widened by sqrt(2) its base is the full unit square.\n\t\tconst r = Math.SQRT1_2;\n\t\tconst faceted = new three.CylinderGeometry(\n\t\t\tr * bar.taper.top,\n\t\t\tr * bar.taper.bottom,\n\t\t\t1,\n\t\t\t4,\n\t\t).rotateY(Math.PI / 4);\n\t\tgeometry = faceted.toNonIndexed();\n\t\tfaceted.dispose();\n\t\tgeometry.computeVertexNormals();\n\t} else {\n\t\tgeometry = new three.CylinderGeometry(\n\t\t\t0.5 * bar.taper.top,\n\t\t\t0.5 * bar.taper.bottom,\n\t\t\t1,\n\t\t\tROUND_SEGMENTS,\n\t\t);\n\t}\n\tif (horizontal) {\n\t\tgeometry.rotateZ(-Math.PI / 2);\n\t}\n\treturn geometry;\n}\n\n/**\n * (Re)write a shaped bar's vertex colours for its current world `scale`, so\n * each vertex gets the shade of its world-space normal.\n */\nexport function shadeObliqueShapeGeometry(\n\tthree: ThreeModule,\n\tgeometry: THREE.BufferGeometry,\n\tbar: Pick<ObliqueBar, 'shape' | 'color'>,\n\tscale: { x: number; y: number; z: number },\n\tviewYaw: number,\n): void {\n\tconst round = bar.shape !== 'pyramid' && bar.shape !== 'pyramidToMax';\n\tconst cos = Math.cos(round ? viewYaw : 0);\n\tconst sin = Math.sin(round ? viewYaw : 0);\n\tconst normals = geometry.getAttribute('normal');\n\tconst count = normals.count;\n\tlet colors = geometry.getAttribute('color') as THREE.BufferAttribute | undefined;\n\tif (!colors || colors.count !== count) {\n\t\tcolors = new three.Float32BufferAttribute(new Float32Array(count * 3), 3);\n\t\tgeometry.setAttribute('color', colors);\n\t}\n\tconst base = new three.Color(bar.color);\n\tconst srgb = base.getRGB(new three.Color(), three.SRGBColorSpace);\n\tconst out = new three.Color();\n\tfor (let i = 0; i < count; i++) {\n\t\t// Normals transform by the inverse scale.\n\t\tlet nx = normals.getX(i) / Math.max(scale.x, 1e-6);\n\t\tlet ny = normals.getY(i) / Math.max(scale.y, 1e-6);\n\t\tlet nz = normals.getZ(i) / Math.max(scale.z, 1e-6);\n\t\tconst len = Math.hypot(nx, ny, nz) || 1;\n\t\tnx /= len;\n\t\tny /= len;\n\t\tnz /= len;\n\t\tconst f = chart3DNormalShade(bar.shape, nx * cos - nz * sin, ny, nx * sin + nz * cos);\n\t\tout.setRGB(\n\t\t\tMath.min(1, srgb.r * f),\n\t\t\tMath.min(1, srgb.g * f),\n\t\t\tMath.min(1, srgb.b * f),\n\t\t\tthree.SRGBColorSpace,\n\t\t);\n\t\tcolors.setXYZ(i, out.r, out.g, out.b);\n\t}\n\tcolors.needsUpdate = true;\n}\n","/**\n * WebGL geometry for a right-angle-axes `bar3D` chart\n * (`chart-3d-oblique-layout.ts`): one box mesh per bar and the wall/floor\n * gridlines, in the oblique scene's frame (`chart-3d-view-scene.ts`).\n *\n * Scene frame: X/Y in chart px centred on the chart (Y up), Z = minus the\n * layout's world depth, so the scene camera's shear moves only what recedes.\n * A layout point `(x, y, z)` sits at scene\n * `(origin.x + x - W/2, H/2 - origin.y + y, -z)`, which the camera projects to\n * exactly the chart px `obliqueToScreen` returns.\n *\n * Box faces are flat `MeshBasicMaterial`s (PowerPoint shades box faces flat\n * in chart space, not by lighting) from `chart-3d-shading.ts`'s measured\n * multipliers. Gridlines are drawn in the scene rather than the SVG overlay\n * because bars must hide the back-wall lines behind them.\n *\n * @module chart-3d-bar-mesh\n */\nimport type * as THREE from 'three';\n\nimport type { ObliqueBar, ObliqueChartLayout } from './chart-3d-oblique-layout';\nimport {\n\tbuildObliqueShapeGeometry,\n\tisShapedObliqueBar,\n\tobliqueShapeKey,\n\tshadeObliqueShapeGeometry,\n} from './chart-3d-oblique-shape-mesh';\nimport { buildChart3DBoxFaceColors } from './chart-3d-shading';\n\ntype ThreeModule = typeof THREE;\n\n/** PowerPoint's default major gridline colour (tx1 at 15% tint, `#D9D9D9`). */\nconst GRIDLINE_COLOR = 0xd9d9d9;\n\nexport interface Chart3DBarMeshResult {\n\tgroup: THREE.Group;\n\t/** One mesh per bar, same order as `layout.bars`; carries `{ seriesIndex, categoryIndex }` in `userData`. */\n\tmeshes: THREE.Mesh[];\n\tdispose: () => void;\n}\n\n/** Scene position of a layout world point. */\nexport function obliqueToScene(\n\tlayout: ObliqueChartLayout,\n\tsvgWidth: number,\n\tsvgHeight: number,\n\tp: readonly [number, number, number],\n): [number, number, number] {\n\treturn [layout.origin.x + p[0] - svgWidth / 2, svgHeight / 2 - layout.origin.y + p[1], -p[2]];\n}\n\n/**\n * Place (and for a `c:shape` bar, reshape and reshade) a bar's mesh at a\n * bar's current world box. Used at build time and for the drag preview.\n */\nexport function placeObliqueBarMesh(\n\tthree: ThreeModule,\n\tmesh: THREE.Mesh,\n\tlayout: ObliqueChartLayout,\n\tsvgWidth: number,\n\tsvgHeight: number,\n\tbar: ObliqueBar,\n): void {\n\tmesh.position.set(\n\t\t...obliqueToScene(layout, svgWidth, svgHeight, [\n\t\t\tbar.x + bar.w / 2,\n\t\t\tbar.y + bar.h / 2,\n\t\t\tbar.z + bar.d / 2,\n\t\t]),\n\t);\n\tmesh.scale.set(Math.max(bar.w, 0.001), Math.max(bar.h, 0.001), bar.d);\n\tif (!isShapedObliqueBar(bar)) {\n\t\treturn;\n\t}\n\tconst key = obliqueShapeKey(bar, layout.horizontal);\n\tconst data = mesh.userData as { shapeKey?: string };\n\tif (data.shapeKey !== key) {\n\t\tconst previous = mesh.geometry;\n\t\tmesh.geometry = buildObliqueShapeGeometry(three, bar, layout.horizontal);\n\t\tprevious.dispose();\n\t\tdata.shapeKey = key;\n\t}\n\tshadeObliqueShapeGeometry(three, mesh.geometry, bar, mesh.scale, Math.atan(layout.shear.x));\n}\n\n/** Build the bar boxes and gridlines of an oblique layout into a new group. */\nexport function buildChart3DBarMeshes(\n\tthree: ThreeModule,\n\tlayout: ObliqueChartLayout,\n\tsvgWidth: number,\n\tsvgHeight: number,\n): Chart3DBarMeshResult {\n\tconst group = new three.Group();\n\tconst meshes: THREE.Mesh[] = [];\n\tconst lineGeometries: THREE.BufferGeometry[] = [];\n\tconst materials: THREE.Material[] = [];\n\n\tconst points: number[] = [];\n\tfor (const line of layout.gridlines) {\n\t\tpoints.push(\n\t\t\t...obliqueToScene(layout, svgWidth, svgHeight, line.from),\n\t\t\t...obliqueToScene(layout, svgWidth, svgHeight, line.to),\n\t\t);\n\t}\n\tif (points.length > 0) {\n\t\tconst lineGeometry = new three.BufferGeometry();\n\t\tlineGeometry.setAttribute('position', new three.Float32BufferAttribute(points, 3));\n\t\tconst lineMaterial = new three.LineBasicMaterial({ color: GRIDLINE_COLOR });\n\t\tlineGeometries.push(lineGeometry);\n\t\tmaterials.push(lineMaterial);\n\t\tgroup.add(new three.LineSegments(lineGeometry, lineMaterial));\n\t}\n\n\tfor (const bar of layout.bars) {\n\t\tlet mesh: THREE.Mesh;\n\t\tif (isShapedObliqueBar(bar)) {\n\t\t\tconst material = new three.MeshBasicMaterial({ vertexColors: true });\n\t\t\tmaterials.push(material);\n\t\t\tmesh = new three.Mesh(new three.BufferGeometry(), material);\n\t\t} else {\n\t\t\tconst faceMaterials = buildChart3DBoxFaceColors(bar.color).map(\n\t\t\t\t(color) => new three.MeshBasicMaterial({ color }),\n\t\t\t);\n\t\t\tmaterials.push(...faceMaterials);\n\t\t\tmesh = new three.Mesh(new three.BoxGeometry(1, 1, 1), faceMaterials);\n\t\t}\n\t\tmesh.userData = { seriesIndex: bar.seriesIndex, categoryIndex: bar.categoryIndex };\n\t\tplaceObliqueBarMesh(three, mesh, layout, svgWidth, svgHeight, bar);\n\t\tgroup.add(mesh);\n\t\tmeshes.push(mesh);\n\t}\n\n\treturn {\n\t\tgroup,\n\t\tmeshes,\n\t\tdispose: () => {\n\t\t\t// A drag preview may have swapped a shaped bar's geometry, so free\n\t\t\t// whatever each mesh holds now.\n\t\t\tfor (const geometry of [...lineGeometries, ...meshes.map((m) => m.geometry)]) {\n\t\t\t\tgeometry.dispose();\n\t\t\t}\n\t\t\tfor (const material of materials) {\n\t\t\t\tmaterial.dispose();\n\t\t\t}\n\t\t},\n\t};\n}\n","/**\n * chart-3d-chrome-overlay.ts: the SVG \"chrome\" (chart-area fill/border,\n * title, legend, value-axis gridlines/ticks, category labels) a 3D chart\n * scene draws OVER its WebGL canvas via `ctx.overlay`.\n *\n * PowerPoint's own 3D charts always show this chrome exactly like the 2D\n * chart does (see the parity brief's \"hybrid rendering\" requirement); for a\n * chart in the oblique (`rAngAx=1`) projection family this chrome is\n * ALREADY pixel-correct in the flat 2D `ChartViewModel` (verified against\n * `gt/chart-01.webp`: axes/gridlines/title/legend sit exactly where a plain\n * 2D chart would put them, perfectly undistorted), so this module reuses the\n * SAME `chart-view-model-dom.ts` piece-renderers the 2D/vanilla projector\n * uses, just WITHOUT `vm.primitives`/`vm.dataLabels` (the flat oblique\n * bars/extrusion polygons, replaced by real WebGL geometry).\n *\n * @module chart-3d-chrome-overlay\n */\nimport {\n\tappendChartLegendSvg,\n\trenderChartLineSvg,\n\trenderChartTextSvg,\n} from './chart-view-model-dom';\nimport { createSvgEl } from './chart-view-model-dom-helpers';\nimport type { ChartViewModel, LegendEntry } from './chart-view-model-types';\n\n/** A 3D scene's own axis labels, in chart px. */\nexport interface Chart3DBoxLabel {\n\ttext: string;\n\tx: number;\n\ty: number;\n\tanchor: 'start' | 'middle' | 'end';\n\tfontSize: number;\n\t/** Defaults to `central` (text centred on `y`). */\n\tbaseline?: 'central' | 'hanging';\n}\n\n/**\n * Chrome for a scene that draws its own plot box (the oblique and perspective\n * layouts): its labels replace the flat axes, and the title and legend move\n * to where PowerPoint puts them on a 3D chart.\n */\nexport interface Chart3DBoxChrome {\n\tlabels: ReadonlyArray<Chart3DBoxLabel>;\n\t/** List the legend bottom-up (a clustered horizontal bar chart does). */\n\treverseLegend: boolean;\n\t/** Legend entries replacing the flat chart's (a surface lists its value bands). */\n\tlegend?: LegendEntry[];\n}\n\n/**\n * Render a `ChartViewModel`'s chrome (everything except data marks) to an\n * `<svg>` sized to `vm.svgWidth` x `vm.svgHeight`, matching the WebGL\n * scene's own world-unit convention (1 world unit = 1 authored chart px) so\n * an element positioned from the same view-model's rects lines up exactly.\n */\nexport function renderChart3DChromeOverlaySvg(\n\tdoc: Document,\n\tsource: ChartViewModel,\n\tbox?: Chart3DBoxChrome,\n): SVGSVGElement {\n\tconst vm = box ? withBoxChromePositions(source) : source;\n\tconst svg = createSvgEl(doc, 'svg', {\n\t\tclass: 'pptxv-chart-3d-chrome',\n\t\tviewBox: `0 0 ${vm.svgWidth} ${vm.svgHeight}`,\n\t\tpreserveAspectRatio: 'none',\n\t});\n\tsvg.style.setProperty('width', '100%');\n\tsvg.style.setProperty('height', '100%');\n\tsvg.style.setProperty('display', 'block');\n\tsvg.style.setProperty('position', 'absolute');\n\tsvg.style.setProperty('inset', '0');\n\t// The WebGL canvas paints the marks; this overlay only adds chrome on top\n\t// of them, so pointer events must fall through to the canvas underneath.\n\tsvg.style.setProperty('pointer-events', 'none');\n\n\tif (vm.areaFill) {\n\t\tsvg.appendChild(\n\t\t\tcreateSvgEl(doc, 'rect', {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: vm.svgWidth,\n\t\t\t\theight: vm.svgHeight,\n\t\t\t\trx: vm.areaRadius,\n\t\t\t\tfill: vm.areaFill,\n\t\t\t}),\n\t\t);\n\t}\n\n\tif (vm.title) {\n\t\tconst title = createSvgEl(doc, 'text', {\n\t\t\tx: vm.titleX,\n\t\t\ty: vm.titleY,\n\t\t\t'text-anchor': 'middle',\n\t\t\t'font-size': vm.titleStyle?.fontSize ?? 12,\n\t\t\t'font-weight': vm.titleStyle?.fontWeight ?? 600,\n\t\t\t'font-family': vm.titleStyle?.fontFamily,\n\t\t\tfill: vm.titleStyle?.fill ?? '#1e293b',\n\t\t\t'data-chart-part': 'title',\n\t\t});\n\t\tif (vm.titleRunSpans && vm.titleRunSpans.length > 0) {\n\t\t\tfor (const run of vm.titleRunSpans) {\n\t\t\t\tconst tspan = createSvgEl(doc, 'tspan', {\n\t\t\t\t\t'font-size': run.fontSize,\n\t\t\t\t\t'font-weight': run.fontWeight,\n\t\t\t\t\t'font-style': run.fontStyle,\n\t\t\t\t\t'font-family': run.fontFamily,\n\t\t\t\t\tfill: run.fill,\n\t\t\t\t});\n\t\t\t\ttspan.textContent = run.text;\n\t\t\t\ttitle.appendChild(tspan);\n\t\t\t}\n\t\t} else {\n\t\t\ttitle.textContent = vm.title;\n\t\t}\n\t\tsvg.appendChild(title);\n\t}\n\n\tif (box) {\n\t\t// The box's gridlines are drawn in the scene (marks hide the back\n\t\t// wall); only its axis labels go here.\n\t\tappendBoxLabels(doc, svg, vm, box.labels);\n\t\t// A 3D chart keys every series with a plain swatch, lines included.\n\t\tconst legend = box.legend ?? vm.legend.map((item) => ({ ...item, lineSwatch: undefined }));\n\t\tconst legendVm = { ...vm, legend: box.reverseLegend ? legend.reverse() : legend };\n\t\tappendChartLegendSvg(doc, svg, legendVm);\n\t\treturn svg;\n\t}\n\n\tfor (const gl of vm.gridlines) {\n\t\tsvg.appendChild(renderChartLineSvg(doc, gl));\n\t}\n\tfor (const gl of vm.secondaryGridlines ?? []) {\n\t\tsvg.appendChild(renderChartLineSvg(doc, gl));\n\t}\n\tfor (const lbl of vm.axisLabels) {\n\t\tsvg.appendChild(renderChartTextSvg(doc, lbl));\n\t}\n\tfor (const lbl of vm.secondaryAxisLabels ?? []) {\n\t\tsvg.appendChild(renderChartTextSvg(doc, lbl));\n\t}\n\tif (vm.zeroLine) {\n\t\tsvg.appendChild(renderChartLineSvg(doc, vm.zeroLine));\n\t}\n\tfor (const lbl of vm.categoryLabels) {\n\t\tsvg.appendChild(renderChartTextSvg(doc, lbl));\n\t}\n\n\tappendChartLegendSvg(doc, svg, vm);\n\treturn svg;\n}\n\n/** Points to chart px (96 dpi). */\nconst PT = 4 / 3;\n/** Title baseline below the chart top, and legend baseline above its bottom, measured on `gt/chart-01`. */\nconst OBLIQUE_TITLE_BASELINE = 24 * PT;\nconst OBLIQUE_LEGEND_BASELINE = 14 * PT;\n\n/** The flat view model with its title and legend moved to where PowerPoint puts them on a 3D chart. */\nfunction withBoxChromePositions(vm: ChartViewModel): ChartViewModel {\n\tconst legendBottom = (vm.legendY ?? vm.svgHeight - 8) >= vm.svgHeight / 2;\n\treturn {\n\t\t...vm,\n\t\ttitleY: OBLIQUE_TITLE_BASELINE,\n\t\t// Legend text sits 3px below `legendY` (see `appendChartLegendSvg`).\n\t\tlegendY: legendBottom ? vm.svgHeight - OBLIQUE_LEGEND_BASELINE - 3 : vm.legendY,\n\t};\n}\n\nfunction appendBoxLabels(\n\tdoc: Document,\n\tsvg: SVGElement,\n\tvm: ChartViewModel,\n\tlabels: ReadonlyArray<Chart3DBoxLabel>,\n): void {\n\tconst style = vm.axisLabels[0];\n\tfor (const label of labels) {\n\t\tsvg.appendChild(\n\t\t\trenderChartTextSvg(doc, {\n\t\t\t\tkind: 'text',\n\t\t\t\tx: label.x,\n\t\t\t\ty: label.y,\n\t\t\t\ttext: label.text,\n\t\t\t\tfontSize: label.fontSize,\n\t\t\t\tfill: style?.fill ?? '#595959',\n\t\t\t\tfontFamily: style?.fontFamily,\n\t\t\t\ttextAnchor: label.anchor,\n\t\t\t\tdominantBaseline: label.baseline ?? 'central',\n\t\t\t}),\n\t\t);\n\t}\n}\n","/**\n * `chart-3d-interaction`: framework-neutral, three.js-free maths for\n * click-to-select and drag-to-value on the opt-in true-3D chart scenes\n * (bar3D / line3D / area3D / pie3D / surface3D).\n *\n * The 3D scenes already raycast pointer moves against their meshes for hover\n * tooltips (`bar-chart-3d-hit-test.ts`, `cartesian-chart-3d-hit-test.ts`,\n * `pie-chart-3d-hit-test.ts`, `surface-chart-3d-hit-test.ts`). This module\n * turns that SAME raycast hit into the identical {@link ChartPartRef} the 2D\n * chart-interaction model (`chart-interaction.ts`, `chart-canvas-drag.ts`)\n * already uses, so a 3D mark selection drives the same inspector panel a 2D\n * mark does.\n *\n * Drag-to-value has no single fixed screen axis to divide a pointer delta by\n * (unlike the 2D SVG, which is always dragged along its own vertical pixel\n * axis): the scene's camera can be orbited to any angle, so \"up\" on screen is\n * not fixed. Instead the scene (which owns the camera) projects two points\n * already known to sit on the mark's OWN value axis, at two distinct data\n * values, to screen space, and this module turns that screen-space\n * calibration plus a pointer delta into a value delta. Kept free of any\n * `three` import so it is unit-testable with plain numbers.\n *\n * @module chart-3d-interaction\n */\nimport type { ChartPartRef } from './chart-view-model';\n\n/**\n * Minimum pointer travel (px) before a mark press becomes a value drag,\n * mirroring {@link CHART_DRAG_THRESHOLD_PX} (`chart-canvas-drag.ts`): without\n * a threshold, every click on a mark would commit a (tiny) value change, so a\n * user could never select a mark without editing it.\n */\nexport const CHART_3D_DRAG_THRESHOLD_PX = 3;\n\n/** Emissive colour + intensity applied to a selected mark's material. */\nexport const CHART_3D_SELECTED_EMISSIVE = '#3b82f6';\nexport const CHART_3D_SELECTED_EMISSIVE_INTENSITY = 0.55;\n\n/** The (series, point) a 3D raycast hit landed on. Every hit-test module's `*Hit` shape already carries this, just under kind-specific field names. */\nexport interface Chart3DMarkHit {\n\tseriesIndex: number;\n\tpointIndex: number;\n}\n\n/**\n * Map a 3D raycast hit (or none) to the same selection descriptor the 2D\n * chart-interaction model uses.\n */\nexport function chart3DHitToPartRef(hit: Chart3DMarkHit | null | undefined): ChartPartRef | null {\n\tif (!hit) {\n\t\treturn null;\n\t}\n\treturn { role: 'dataPoint', seriesIndex: hit.seriesIndex, pointIndex: hit.pointIndex };\n}\n\n/** Whether a mesh's own (series, point) reference is the currently-selected part. */\nexport function chart3DMarkMatchesPart(\n\tmark: Chart3DMarkHit,\n\tpart: ChartPartRef | null | undefined,\n): boolean {\n\treturn (\n\t\tpart !== null &&\n\t\tpart !== undefined &&\n\t\tpart.role === 'dataPoint' &&\n\t\tpart.seriesIndex === mark.seriesIndex &&\n\t\tpart.pointIndex === mark.pointIndex\n\t);\n}\n\n/** A 2D point in CSS pixels (screen space). */\nexport interface ScreenPoint2D {\n\tx: number;\n\ty: number;\n}\n\n/** Screen-space calibration of a mark's value axis, valid only until the camera next moves. */\nexport interface Chart3DValueAxisCalibration {\n\t/** Screen-space unit vector pointing in the direction of increasing value. */\n\tdirectionScreen: ScreenPoint2D;\n\t/** Screen pixels of travel, along {@link directionScreen}, per +1 data value unit. */\n\tpixelsPerUnit: number;\n}\n\n/**\n * Calibrate a value axis from two already-projected screen points known to\n * correspond to two distinct data values on the same mark (e.g. its\n * value-zero base and its current top). Returns `null` when the two values\n * coincide or the two screen points are (near) coincident (camera looking\n * straight down the axis), since no calibration is possible.\n *\n * Order-independent: swapping `(screenAtValue0, value0)` with\n * `(screenAtValue1, value1)` yields the same {@link chart3DPointerDeltaToValueDelta}\n * result, since the direction vector and `pixelsPerUnit` sign flip together.\n */\nexport function calibrateChart3DValueAxis(\n\tscreenAtValue0: ScreenPoint2D,\n\tvalue0: number,\n\tscreenAtValue1: ScreenPoint2D,\n\tvalue1: number,\n): Chart3DValueAxisCalibration | null {\n\tconst valueSpan = value1 - value0;\n\tconst dx = screenAtValue1.x - screenAtValue0.x;\n\tconst dy = screenAtValue1.y - screenAtValue0.y;\n\tconst pixelSpan = Math.hypot(dx, dy);\n\tif (valueSpan === 0 || pixelSpan < 1e-6 || !Number.isFinite(valueSpan)) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tdirectionScreen: { x: dx / pixelSpan, y: dy / pixelSpan },\n\t\tpixelsPerUnit: pixelSpan / valueSpan,\n\t};\n}\n\n/**\n * Convert a screen-space pointer delta (current position minus drag-start\n * position, in CSS px) into a value delta, using a calibration taken at drag\n * start. Add the result to the mark's value at drag start to get the live\n * (or committed) dragged value.\n */\nexport function chart3DPointerDeltaToValueDelta(\n\tcalibration: Chart3DValueAxisCalibration,\n\tpointerDeltaScreen: ScreenPoint2D,\n): number {\n\tconst dot =\n\t\tpointerDeltaScreen.x * calibration.directionScreen.x +\n\t\tpointerDeltaScreen.y * calibration.directionScreen.y;\n\treturn dot / calibration.pixelsPerUnit;\n}\n","/**\n * Pointer interaction shared by the 3D chart scenes (`chart-3d-view-scene.ts`):\n * hover tooltip, click-to-select and drag-to-value on WebGL marks.\n *\n * A scene describes its marks through a {@link Chart3DMarkAdapter} (which data\n * point a ray hit, its value, how a drag previews, how a selection is drawn);\n * everything about pointer handling lives here once. As in the 2D chart, the\n * scene only claims a press while the chart is armed for editing\n * (`isChartInteractionArmed`), and a drag commits one value on release.\n *\n * Picking casts its own ray from the camera's inverse projection instead of\n * `Raycaster.setFromCamera`: the oblique camera carries a hand-inserted\n * shear and the perspective camera an off-centre projection, neither of which\n * `setFromCamera` models. Unprojecting the near and far NDC points through the\n * full inverse projection is exact for both.\n *\n * @module chart-3d-mark-interaction\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { ThreeViewContext } from '../three-view/types';\nimport { buildBarChart3DHoverTooltip } from './bar-chart-3d-hit-test';\nimport { CHART_3D_DRAG_THRESHOLD_PX } from './chart-3d-interaction';\nimport { isChartInteractionArmed } from './chart-canvas-drag';\nimport type { ChartPartRef } from './chart-view-model';\n\n/** A data point, as the chart's series / category indices. */\nexport interface Chart3DPoint {\n\tseriesIndex: number;\n\tpointIndex: number;\n}\n\n/** A live value drag on one mark. */\nexport interface Chart3DMarkDrag {\n\t/**\n\t * Preview the value for a pointer delta in chart px (`dx` right, `dy`\n\t * down), `at` being the pointer's chart px position; returns the value.\n\t */\n\tpreview: (dx: number, dy: number, at: { x: number; y: number }) => number;\n}\n\nexport interface Chart3DMarkAdapter {\n\t/** The objects rays are cast against. */\n\ttargets: ReadonlyArray<THREE.Object3D>;\n\t/** The data point under a hit, or `null` for none. */\n\tpointAt: (hit: THREE.Intersection) => Chart3DPoint | null;\n\t/** A data point's authored value, or `undefined` when it has none. */\n\tvalueOf: (point: Chart3DPoint) => number | undefined;\n\t/** Start a value drag on a point, or `null` when it is not draggable. */\n\tbeginDrag: (point: Chart3DPoint) => Chart3DMarkDrag | null;\n\t/** Draw (or clear) the selection. */\n\thighlight: (point: Chart3DPoint | null) => void;\n\tdispose?: () => void;\n}\n\nexport interface Chart3DMarkInteractionOptions {\n\tctx: ThreeViewContext;\n\tcamera: THREE.Camera;\n\t/** Root refreshed before picking (world matrices only update on render otherwise). */\n\tscene: THREE.Object3D;\n\t/** Chart px height of the view (client px convert to chart px through it). */\n\tsvgHeight: number;\n\tchartData: PptxChartData;\n\tcategoryLabels: ReadonlyArray<string>;\n\tseriesNames: ReadonlyArray<string>;\n\tadapter: Chart3DMarkAdapter;\n}\n\nexport interface Chart3DMarkInteraction {\n\tsetInteractive: (on: boolean) => void;\n\tsetSelectedPart: (part: ChartPartRef | null) => void;\n\tdispose: () => void;\n}\n\ninterface PressState {\n\tpoint: Chart3DPoint | null;\n\tdrag: { session: Chart3DMarkDrag; moved: boolean } | null;\n\tstartX: number;\n\tstartY: number;\n\t/** Chart px per client px, measured at press time (the slide may be zoomed). */\n\tchartPxPerClientPx: number;\n\tlastValue: number | null;\n}\n\nfunction partOf(point: Chart3DPoint | null): ChartPartRef | null {\n\treturn point\n\t\t? { role: 'dataPoint', seriesIndex: point.seriesIndex, pointIndex: point.pointIndex }\n\t\t: null;\n}\n\n/** Attach hover/select/drag to a 3D chart scene's marks. */\nexport function attachChart3DMarkInteraction(\n\toptions: Chart3DMarkInteractionOptions,\n): Chart3DMarkInteraction {\n\tconst { ctx, camera, adapter, chartData } = options;\n\tconst three = ctx.three;\n\tconst target = ctx.eventTarget;\n\tconst raycaster = new three.Raycaster();\n\tconst far = new three.Vector3();\n\tlet interactive = ctx.interactive;\n\tlet press: PressState | null = null;\n\tlet hoveredTooltip: string | undefined;\n\n\tfunction pointAt(clientX: number, clientY: number): Chart3DPoint | null {\n\t\tconst rect = target.getBoundingClientRect();\n\t\tif (rect.width <= 0 || rect.height <= 0) {\n\t\t\treturn null;\n\t\t}\n\t\toptions.scene.updateMatrixWorld();\n\t\tcamera.updateMatrixWorld();\n\t\tconst x = ((clientX - rect.left) / rect.width) * 2 - 1;\n\t\tconst y = -((clientY - rect.top) / rect.height) * 2 + 1;\n\t\traycaster.ray.origin.set(x, y, -1).unproject(camera);\n\t\tfar.set(x, y, 1).unproject(camera);\n\t\traycaster.ray.direction.copy(far).sub(raycaster.ray.origin).normalize();\n\t\tconst hit = raycaster.intersectObjects(adapter.targets as THREE.Object3D[], false)[0];\n\t\treturn hit ? adapter.pointAt(hit) : null;\n\t}\n\n\tconst onPointerMove = (event: PointerEvent): void => {\n\t\tif (press?.drag) {\n\t\t\tconst dx = event.clientX - press.startX;\n\t\t\tconst dy = event.clientY - press.startY;\n\t\t\tif (!press.drag.moved && Math.hypot(dx, dy) < CHART_3D_DRAG_THRESHOLD_PX) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpress.drag.moved = true;\n\t\t\tconst k = press.chartPxPerClientPx;\n\t\t\tconst rect = target.getBoundingClientRect();\n\t\t\tconst value = press.drag.session.preview(dx * k, dy * k, {\n\t\t\t\tx: (event.clientX - rect.left) * k,\n\t\t\t\ty: (event.clientY - rect.top) * k,\n\t\t\t});\n\t\t\tpress.lastValue = value;\n\t\t\tctx.requestRender();\n\t\t\tconst part = partOf(press.point);\n\t\t\tif (part) {\n\t\t\t\tctx.emit({ type: 'drag', detail: { part, value, phase: 'move' } });\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst point = pointAt(event.clientX, event.clientY);\n\t\tconst value = point ? adapter.valueOf(point) : undefined;\n\t\tconst tooltip =\n\t\t\tpoint && value !== undefined\n\t\t\t\t? buildBarChart3DHoverTooltip(\n\t\t\t\t\t\t{ seriesIndex: point.seriesIndex, categoryIndex: point.pointIndex, value },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcategoryLabels: options.categoryLabels,\n\t\t\t\t\t\t\tseriesNames: options.seriesNames,\n\t\t\t\t\t\t\tnumberFormats: chartData.series.map((s) => s.numberFormat),\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\tif (tooltip !== hoveredTooltip) {\n\t\t\thoveredTooltip = tooltip;\n\t\t\ttarget.title = tooltip ?? '';\n\t\t}\n\t};\n\n\tconst onPointerDown = (event: PointerEvent): void => {\n\t\tif (!interactive) {\n\t\t\treturn;\n\t\t}\n\t\tconst point = pointAt(event.clientX, event.clientY);\n\t\tconst armed = point !== null && isChartInteractionArmed(target);\n\t\tif (armed) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tconst session = armed && point ? adapter.beginDrag(point) : null;\n\t\tif (session) {\n\t\t\tevent.preventDefault();\n\t\t\t(target as { setPointerCapture?: (id: number) => void }).setPointerCapture?.(event.pointerId);\n\t\t}\n\t\tconst rect = target.getBoundingClientRect();\n\t\tpress = {\n\t\t\tpoint,\n\t\t\tdrag: session ? { session, moved: false } : null,\n\t\t\tstartX: event.clientX,\n\t\t\tstartY: event.clientY,\n\t\t\tchartPxPerClientPx: rect.height > 0 ? options.svgHeight / rect.height : 1,\n\t\t\tlastValue: null,\n\t\t};\n\t};\n\n\tconst onPointerUp = (event: PointerEvent): void => {\n\t\tconst current = press;\n\t\tpress = null;\n\t\tif (!current || !interactive) {\n\t\t\treturn;\n\t\t}\n\t\tconst part = partOf(current.point);\n\t\tif (current.drag?.moved && current.lastValue !== null && part) {\n\t\t\tctx.emit({ type: 'drag', detail: { part, value: current.lastValue, phase: 'commit' } });\n\t\t\treturn;\n\t\t}\n\t\tconst travel = Math.hypot(event.clientX - current.startX, event.clientY - current.startY);\n\t\tif (travel < CHART_3D_DRAG_THRESHOLD_PX) {\n\t\t\tctx.emit({ type: 'select', part });\n\t\t}\n\t};\n\n\tconst onPointerLeave = (): void => {\n\t\tif (hoveredTooltip !== undefined) {\n\t\t\thoveredTooltip = undefined;\n\t\t\ttarget.title = '';\n\t\t}\n\t};\n\n\ttarget.addEventListener('pointermove', onPointerMove);\n\ttarget.addEventListener('pointerdown', onPointerDown);\n\ttarget.addEventListener('pointerup', onPointerUp);\n\ttarget.addEventListener('pointerleave', onPointerLeave);\n\n\treturn {\n\t\tsetInteractive(on) {\n\t\t\tinteractive = on;\n\t\t\tif (!on) {\n\t\t\t\tpress = null;\n\t\t\t}\n\t\t},\n\t\tsetSelectedPart(part) {\n\t\t\tadapter.highlight(\n\t\t\t\tpart?.role === 'dataPoint' && part.pointIndex !== undefined\n\t\t\t\t\t? { seriesIndex: part.seriesIndex, pointIndex: part.pointIndex }\n\t\t\t\t\t: null,\n\t\t\t);\n\t\t\tctx.requestRender();\n\t\t},\n\t\tdispose() {\n\t\t\ttarget.removeEventListener('pointermove', onPointerMove);\n\t\t\ttarget.removeEventListener('pointerdown', onPointerDown);\n\t\t\ttarget.removeEventListener('pointerup', onPointerUp);\n\t\t\ttarget.removeEventListener('pointerleave', onPointerLeave);\n\t\t\tadapter.dispose?.();\n\t\t},\n\t};\n}\n","/**\n * Value-drag maths for the right-angle-axes 3D bar chart\n * (`chart-3d-oblique-layout.ts`), kept pure so it is testable without WebGL.\n *\n * A bar's front face is drawn flat, so dragging along the value axis moves\n * its value by `chart px / valueScale`, rounded like every other chart drag\n * (`roundDragValue`). Columns drag vertically (up = larger), horizontal bars\n * horizontally (right = larger). Like the 2D chart, only `clustered` and\n * `standard` bars are value-draggable: a stacked segment sits on a running\n * sum, so dragging one would not track the pointer.\n *\n * @module chart-3d-oblique-drag\n */\nimport { obliqueBarTaper } from './chart-3d-oblique-bars';\nimport type { ObliqueBar, ObliqueChartLayout } from './chart-3d-oblique-layout';\nimport { roundDragValue } from './chart-interaction';\n\n/** Whether a bar in this layout can be value-dragged. */\nexport function isObliqueBarDraggable(layout: Pick<ObliqueChartLayout, 'grouping'>): boolean {\n\treturn layout.grouping === 'clustered' || layout.grouping === 'standard';\n}\n\n/**\n * The value after dragging by a pointer delta, in chart px (`dx` right,\n * `dy` down).\n */\nexport function obliqueDragValue(\n\tlayout: Pick<ObliqueChartLayout, 'horizontal' | 'range' | 'valueScale'>,\n\tstartValue: number,\n\tdx: number,\n\tdy: number,\n): number {\n\tconst along = layout.horizontal ? dx : -dy;\n\tconst raw = startValue + along / layout.valueScale;\n\tconst span = layout.range.max - layout.range.min;\n\treturn roundDragValue(raw, { min: layout.range.min, max: layout.range.max, span });\n}\n\n/**\n * A bar's extent along the value axis after a drag to `value` (the baseline\n * end stays put), clipped to the axis, in the layout's world units.\n */\nexport function obliqueDraggedExtent(\n\tlayout: Pick<ObliqueChartLayout, 'range' | 'valueScale'>,\n\tvalue: number,\n): { from: number; length: number } {\n\tconst { min, max } = layout.range;\n\tconst base = Math.min(Math.max(0, min), max);\n\tconst clamp = (v: number): number => Math.min(Math.max(v, min), max);\n\tconst lo = (clamp(Math.min(base, value)) - min) * layout.valueScale;\n\tconst hi = (clamp(Math.max(base, value)) - min) * layout.valueScale;\n\treturn { from: lo, length: hi - lo };\n}\n\n/** `bar` with its value-axis extent (and taper) replaced: a live drag preview. */\nexport function obliqueBarAtValue(\n\tlayout: Pick<ObliqueChartLayout, 'horizontal' | 'range' | 'valueScale'>,\n\tbar: ObliqueBar,\n\tvalue: number,\n): ObliqueBar {\n\tconst { from, length } = obliqueDraggedExtent(layout, value);\n\tconst extent = (layout.range.max - layout.range.min) * layout.valueScale;\n\tconst taper = obliqueBarTaper(bar.shape, from, from + length, extent, value);\n\treturn layout.horizontal\n\t\t? { ...bar, x: from, w: length, value, taper }\n\t\t: { ...bar, y: from, h: length, value, taper };\n}\n","/**\n * Pointer interaction for the oblique `bar3D` scene (`chart-3d-view-scene.ts`):\n * the {@link Chart3DMarkAdapter} for its boxes, on the shared hover/select/\n * drag handling of `chart-3d-mark-interaction.ts`.\n *\n * Bars come from the right-angle-axes layout (`chart-3d-oblique-layout.ts`);\n * a value drag moves along that layout's value axis with its own scale\n * (`chart-3d-oblique-drag.ts`), vertically for columns and horizontally for\n * a `c:barDir=\"bar\"` chart. As in the 2D chart, stacked segments select but\n * never drag.\n *\n * @module chart-3d-oblique-interaction\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { ThreeViewContext } from '../three-view/types';\nimport { placeObliqueBarMesh } from './chart-3d-bar-mesh';\nimport { attachChart3DMarkInteraction } from './chart-3d-mark-interaction';\nimport type { Chart3DMarkInteraction, Chart3DPoint } from './chart-3d-mark-interaction';\nimport {\n\tisObliqueBarDraggable,\n\tobliqueBarAtValue,\n\tobliqueDragValue,\n} from './chart-3d-oblique-drag';\nimport type { ObliqueChartLayout } from './chart-3d-oblique-layout';\n\n/** Colour of the selected box's outline (matches the 2D selected-mark accent). */\nconst SELECTED_OUTLINE_COLOR = 0x2563eb;\n\nexport interface ObliqueBarInteractionOptions {\n\tctx: ThreeViewContext;\n\tcamera: THREE.Camera;\n\tmeshes: ReadonlyArray<THREE.Mesh>;\n\tlayout: ObliqueChartLayout;\n\t/** Chart px size of the view-box the scene frame is centred on. */\n\tsvgWidth: number;\n\tsvgHeight: number;\n\tchartData: PptxChartData;\n\tcategoryLabels: ReadonlyArray<string>;\n\tseriesNames: ReadonlyArray<string>;\n\t/** Scene the selection outline is added to. */\n\tscene: THREE.Object3D;\n}\n\nexport type ObliqueBarInteraction = Chart3DMarkInteraction;\n\n/** Attach hover/select/drag to an oblique bar scene's boxes. */\nexport function attachObliqueBarInteraction(\n\toptions: ObliqueBarInteractionOptions,\n): ObliqueBarInteraction {\n\tconst { ctx, meshes, layout } = options;\n\tconst bars = layout.bars;\n\tconst three = ctx.three;\n\n\tconst outline = new three.LineSegments(\n\t\tnew three.EdgesGeometry(new three.BoxGeometry(1, 1, 1)),\n\t\tnew three.LineBasicMaterial({ color: SELECTED_OUTLINE_COLOR }),\n\t);\n\toutline.visible = false;\n\toptions.scene.add(outline);\n\tlet selected = -1;\n\n\tconst indexOf = (point: Chart3DPoint): number =>\n\t\tbars.findIndex(\n\t\t\t(b) => b.seriesIndex === point.seriesIndex && b.categoryIndex === point.pointIndex,\n\t\t);\n\n\tfunction syncOutline(): void {\n\t\toutline.visible = selected >= 0;\n\t\tif (selected >= 0) {\n\t\t\toutline.position.copy(meshes[selected].position);\n\t\t\toutline.scale.copy(meshes[selected].scale);\n\t\t}\n\t}\n\n\treturn attachChart3DMarkInteraction({\n\t\tctx,\n\t\tcamera: options.camera,\n\t\tscene: options.scene,\n\t\tsvgHeight: options.svgHeight,\n\t\tchartData: options.chartData,\n\t\tcategoryLabels: options.categoryLabels,\n\t\tseriesNames: options.seriesNames,\n\t\tadapter: {\n\t\t\ttargets: meshes,\n\t\t\tpointAt(hit) {\n\t\t\t\tconst data = hit.object.userData as { seriesIndex?: number; categoryIndex?: number };\n\t\t\t\tif (data.seriesIndex === undefined || data.categoryIndex === undefined) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn { seriesIndex: data.seriesIndex, pointIndex: data.categoryIndex };\n\t\t\t},\n\t\t\tvalueOf(point) {\n\t\t\t\treturn bars[indexOf(point)]?.value;\n\t\t\t},\n\t\t\tbeginDrag(point) {\n\t\t\t\tconst index = indexOf(point);\n\t\t\t\tif (index < 0 || !isObliqueBarDraggable(layout)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst start = bars[index];\n\t\t\t\treturn {\n\t\t\t\t\tpreview(dx, dy) {\n\t\t\t\t\t\tconst value = obliqueDragValue(layout, start.value, dx, dy);\n\t\t\t\t\t\tplaceObliqueBarMesh(\n\t\t\t\t\t\t\tthree,\n\t\t\t\t\t\t\tmeshes[index],\n\t\t\t\t\t\t\tlayout,\n\t\t\t\t\t\t\toptions.svgWidth,\n\t\t\t\t\t\t\toptions.svgHeight,\n\t\t\t\t\t\t\tobliqueBarAtValue(layout, start, value),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsyncOutline();\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\thighlight(point) {\n\t\t\t\tselected = point ? indexOf(point) : -1;\n\t\t\t\tsyncOutline();\n\t\t\t},\n\t\t\tdispose() {\n\t\t\t\toutline.geometry.dispose();\n\t\t\t\t(outline.material as THREE.Material).dispose();\n\t\t\t\toutline.removeFromParent();\n\t\t\t},\n\t\t},\n\t});\n}\n","/**\n * Bars of a `bar3D` chart WITHOUT right-angle axes (`c:view3D/@rAngAx=0`):\n * columns, or horizontal bars for `c:barDir=\"bar\"`, on the perspective box (`chart-3d-persp-layout.ts`),\n * as box-space prisms. The bar sizing follows the right-angle-axes layout\n * (`chart-3d-oblique-bars.ts`), whose conventions PowerPoint shares: a bar's\n * depth equals its width, `clustered` series sit side by side in one row,\n * `stacked` ones share a bar, and `standard` gives each series its own row.\n *\n * @module chart-3d-persp-bars\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\n\nimport { obliqueBarTaper } from './chart-3d-oblique-bars';\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport type { PerspPrism } from './chart-3d-persp-marks';\n\nconst DEFAULT_GAP_WIDTH = 150;\n\ntype LayoutCore = Pick<\n\tPerspChartLayout,\n\t'grouping' | 'range' | 'valueScale' | 'categoryX' | 'rowDepth' | 'colors' | 'horizontal' | 'view'\n>;\n\nfunction valueY(layout: Pick<LayoutCore, 'range' | 'valueScale'>, v: number): number {\n\tconst clamped = Math.min(Math.max(v, layout.range.min), layout.range.max);\n\treturn (clamped - layout.range.min) * layout.valueScale;\n}\n\n/** One prism per bar; `override` replaces one point's value (a drag preview). */\nexport function buildPerspBarPrisms(\n\tchartData: PptxChartData,\n\tlayout: LayoutCore,\n\toverride?: { seriesIndex: number; pointIndex: number; value: number },\n): PerspPrism[] {\n\tconst nCat = layout.categoryX.length;\n\tconst nSer = chartData.series.length;\n\t// Slots divide the category axis: box x for columns, box y for horizontal bars.\n\tconst catExtent = layout.horizontal ? layout.view.box.h : layout.view.box.w;\n\tconst slot = nCat > 0 ? catExtent / nCat : catExtent;\n\tconst gapWidth = (chartData.barGapWidth ?? DEFAULT_GAP_WIDTH) / 100;\n\tconst slots = layout.grouping === 'clustered' ? nSer : 1;\n\tconst barW = slot / (slots + gapWidth);\n\tconst depth = Math.min(barW, layout.rowDepth);\n\tconst stacked = layout.grouping === 'stacked' || layout.grouping === 'percentStacked';\n\tconst baseline = Math.min(Math.max(0, layout.range.min), layout.range.max);\n\tconst prisms: PerspPrism[] = [];\n\tfor (let c = 0; c < nCat; c++) {\n\t\tconst valueOf = (s: number): number => {\n\t\t\tif (override && override.seriesIndex === s && override.pointIndex === c) {\n\t\t\t\treturn override.value;\n\t\t\t}\n\t\t\tconst v = chartData.series[s]?.values[c];\n\t\t\treturn v !== undefined && Number.isFinite(v) ? v : 0;\n\t\t};\n\t\tconst total = chartData.series.reduce((t, _s, s) => t + Math.abs(valueOf(s)), 0);\n\t\tlet pos = baseline;\n\t\tlet neg = baseline;\n\t\tfor (let s = 0; s < nSer; s++) {\n\t\t\tconst raw = valueOf(s);\n\t\t\tconst value = layout.grouping === 'percentStacked' ? (total ? raw / total : 0) : raw;\n\t\t\tlet from = baseline;\n\t\t\tlet to = value;\n\t\t\tif (stacked) {\n\t\t\t\tfrom = value >= 0 ? pos : neg;\n\t\t\t\tto = from + value;\n\t\t\t\tif (value >= 0) {\n\t\t\t\t\tpos = to;\n\t\t\t\t} else {\n\t\t\t\t\tneg = to;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst shape = chartData.series[s]?.shape ?? chartData.barShape ?? 'box';\n\t\t\tconst slotIndex = layout.grouping === 'clustered' ? s : 0;\n\t\t\tconst row = layout.grouping === 'standard' ? s : 0;\n\t\t\tconst c0 = c * slot + (gapWidth * barW) / 2 + slotIndex * barW;\n\t\t\tconst v0 = valueY(layout, Math.min(from, to));\n\t\t\tconst v1 = Math.max(valueY(layout, Math.max(from, to)), v0 + 1e-6);\n\t\t\t// Column: category along x, value up y. Horizontal: value along x, category up y.\n\t\t\tconst [x0, x1, y0, y1] = layout.horizontal\n\t\t\t\t? [v0, v1, c0, c0 + barW]\n\t\t\t\t: [c0, c0 + barW, v0, v1];\n\t\t\tconst z0 = row * layout.rowDepth + (layout.rowDepth - depth) / 2;\n\t\t\tprisms.push({\n\t\t\t\tseriesIndex: s,\n\t\t\t\tpointIndex: c,\n\t\t\t\tcolor: layout.colors[s],\n\t\t\t\toutline: [\n\t\t\t\t\t[x0, y0],\n\t\t\t\t\t[x1, y0],\n\t\t\t\t\t[x1, y1],\n\t\t\t\t\t[x0, y1],\n\t\t\t\t],\n\t\t\t\tz0,\n\t\t\t\tz1: z0 + depth,\n\t\t\t\tshape,\n\t\t\t\ttaper: obliqueBarTaper(\n\t\t\t\t\tshape,\n\t\t\t\t\tv0,\n\t\t\t\t\tv1,\n\t\t\t\t\t(layout.range.max - layout.range.min) * layout.valueScale,\n\t\t\t\t\traw,\n\t\t\t\t),\n\t\t\t\thorizontal: layout.horizontal,\n\t\t\t});\n\t\t}\n\t}\n\treturn prisms;\n}\n","/**\n * Marks of the perspective 3D line / area charts (`chart-3d-persp-layout.ts`)\n * as box-space prisms: a polygon in the category/value (x/y) plane extruded\n * through a depth range, which is how PowerPoint draws both families\n * (`gt/chart-10..13`):\n *\n * - 3-D Area: one slab per series, the area polygon down to the baseline,\n * `markDepth` deep and centred in its row. Stacked groupings share one row\n * and stack each series on the running sum (`percentStacked` normalised).\n * - 3-D Line: one ribbon per series in its own row, the polyline thickened\n * by a hairline so the tape has an edge to see.\n *\n * @module chart-3d-persp-marks\n */\nimport type { PptxBar3DShape, PptxChartData } from 'pptx-viewer-core';\n\nimport type { ObliqueTaper } from './chart-3d-oblique-types';\nimport { buildPerspBarPrisms } from './chart-3d-persp-bars';\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\n\n/** Ribbon thickness, as a fraction of the box height. */\nconst RIBBON_THICKNESS = 0.012;\n\nexport interface PerspPrism {\n\tseriesIndex: number;\n\t/** The bar's category, for a per-point mark (a bar); absent for a whole-series slab or ribbon. */\n\tpointIndex?: number;\n\tcolor: string;\n\t/** Polygon in box x/y, counter-clockwise. */\n\toutline: Array<[number, number]>;\n\tz0: number;\n\tz1: number;\n\t/**\n\t * A bar's `c:shape` (cylinder / cone / pyramid and the `...ToMax` slices);\n\t * absent or `box` extrudes the outline. The shape is inscribed in the\n\t * outline's bounding box, as with right-angle axes.\n\t */\n\tshape?: PptxBar3DShape;\n\t/** Width of a shaped bar at its baseline / value end, 0-1 (see `obliqueBarTaper`). */\n\ttaper?: ObliqueTaper;\n\t/** The bar runs along box x (a horizontal bar chart) rather than y. */\n\thorizontal?: boolean;\n}\n\ntype LayoutCore = Pick<\n\tPerspChartLayout,\n\t| 'kind'\n\t| 'grouping'\n\t| 'view'\n\t| 'range'\n\t| 'valueScale'\n\t| 'categoryX'\n\t| 'rowDepth'\n\t| 'markDepth'\n\t| 'colors'\n\t| 'horizontal'\n>;\n\n/** Position of a value along the value axis (box y, or box x for horizontal bars), clipped to the axis. */\nexport function perspValueY(layout: Pick<LayoutCore, 'range' | 'valueScale'>, v: number): number {\n\tconst clamped = Math.min(Math.max(v, layout.range.min), layout.range.max);\n\treturn (clamped - layout.range.min) * layout.valueScale;\n}\n\n/** Depth range of a row's mark. */\nexport function perspRowSpan(\n\tlayout: Pick<LayoutCore, 'rowDepth' | 'markDepth'>,\n\trow: number,\n): [number, number] {\n\tconst z0 = row * layout.rowDepth + (layout.rowDepth - layout.markDepth) / 2;\n\treturn [z0, z0 + layout.markDepth];\n}\n\nfunction finite(v: number | undefined): number {\n\treturn v !== undefined && Number.isFinite(v) ? v : 0;\n}\n\n/** Values series by series, `percentStacked` normalised to category totals. */\nfunction plottedValues(chartData: PptxChartData, layout: LayoutCore, nCat: number): number[][] {\n\tconst raw = chartData.series.map((s) =>\n\t\tArray.from({ length: nCat }, (_, c) => finite(s.values[c])),\n\t);\n\tif (layout.grouping !== 'percentStacked') {\n\t\treturn raw;\n\t}\n\tconst totals = Array.from({ length: nCat }, (_, c) =>\n\t\traw.reduce((t, s) => t + Math.abs(s[c]), 0),\n\t);\n\treturn raw.map((s) => s.map((v, c) => (totals[c] ? v / totals[c] : 0)));\n}\n\n/**\n * The prisms for a line or area chart; `override` replaces one point's value\n * (a live drag preview).\n */\nexport function buildPerspPrisms(\n\tchartData: PptxChartData,\n\tlayout: LayoutCore,\n\toverride?: { seriesIndex: number; pointIndex: number; value: number },\n): PerspPrism[] {\n\tif (layout.kind === 'bar') {\n\t\treturn buildPerspBarPrisms(chartData, layout, override);\n\t}\n\tconst nCat = layout.categoryX.length;\n\tconst values = plottedValues(chartData, layout, nCat);\n\tif (override) {\n\t\tconst row = values[override.seriesIndex];\n\t\tif (row && override.pointIndex < nCat) {\n\t\t\trow[override.pointIndex] = override.value;\n\t\t}\n\t}\n\tconst xs = layout.categoryX;\n\tconst baseY = perspValueY(layout, Math.max(0, layout.range.min));\n\tconst prisms: PerspPrism[] = [];\n\tif (layout.kind === 'line') {\n\t\tconst t = (layout.view.box.h * RIBBON_THICKNESS) / 2;\n\t\tvalues.forEach((series, s) => {\n\t\t\tconst ys = series.map((v) => perspValueY(layout, v));\n\t\t\tconst [z0, z1] = perspRowSpan(layout, s);\n\t\t\tprisms.push({\n\t\t\t\tseriesIndex: s,\n\t\t\t\tcolor: layout.colors[s],\n\t\t\t\toutline: [\n\t\t\t\t\t...xs.map((x, c): [number, number] => [x, ys[c] - t]),\n\t\t\t\t\t...xs.map((x, c): [number, number] => [x, ys[c] + t]).reverse(),\n\t\t\t\t],\n\t\t\t\tz0,\n\t\t\t\tz1,\n\t\t\t});\n\t\t});\n\t\treturn prisms;\n\t}\n\tconst stacked = layout.grouping !== 'standard';\n\tconst running = new Array<number>(nCat).fill(0);\n\tvalues.forEach((series, s) => {\n\t\tconst lower = stacked ? running.map((v) => perspValueY(layout, v)) : xs.map(() => baseY);\n\t\tconst upper = series.map((v, c) => perspValueY(layout, stacked ? running[c] + v : v));\n\t\tif (stacked) {\n\t\t\tseries.forEach((v, c) => {\n\t\t\t\trunning[c] += v;\n\t\t\t});\n\t\t}\n\t\tconst [z0, z1] = perspRowSpan(layout, stacked ? 0 : s);\n\t\tprisms.push({\n\t\t\tseriesIndex: s,\n\t\t\tcolor: layout.colors[s],\n\t\t\toutline: [\n\t\t\t\t...xs.map((x, c): [number, number] => [x, lower[c]]),\n\t\t\t\t...xs.map((x, c): [number, number] => [x, upper[c]]).reverse(),\n\t\t\t],\n\t\t\tz0,\n\t\t\tz1,\n\t\t});\n\t});\n\treturn prisms;\n}\n","/**\n * Round and pointed bars (`c:shape` cylinder / cone / pyramid and the\n * `...ToMax` slices) on the perspective box (`chart-3d-persp-layout.ts`), for\n * a `bar3D` chart without right-angle axes.\n *\n * The right-angle-axes chart already builds these solids\n * (`chart-3d-oblique-shape-mesh.ts`): a unit shape inscribed in the bar's\n * footprint. Here the same unit geometry is scaled into the prism's box-space\n * bounding box and shaded from its box-space normals with the shape's own\n * form (`chart-3d-shading.ts`); box-space `-z` faces the viewer. Without\n * right-angle axes PowerPoint has no export of this setting in the parity\n * deck, so the shading follows the box convention unverified.\n *\n * @module chart-3d-persp-shape-mesh\n */\nimport type * as THREE from 'three';\n\nimport { buildObliqueShapeGeometry } from './chart-3d-oblique-shape-mesh';\nimport type { ObliqueBar } from './chart-3d-oblique-types';\nimport type { PerspPrism } from './chart-3d-persp-marks';\nimport { chart3DNormalShade } from './chart-3d-shading';\n\ntype ThreeModule = typeof THREE;\n\n/** Whether a prism is drawn as a shaped solid rather than an extrusion. */\nexport function isShapedPerspPrism(prism: PerspPrism): boolean {\n\treturn prism.shape !== undefined && prism.shape !== 'box';\n}\n\n/** The prism's box-space bounding box: `[x0, x1, y0, y1]`. */\nfunction outlineBounds(prism: PerspPrism): [number, number, number, number] {\n\tconst xs = prism.outline.map(([x]) => x);\n\tconst ys = prism.outline.map(([, y]) => y);\n\treturn [Math.min(...xs), Math.max(...xs), Math.min(...ys), Math.max(...ys)];\n}\n\n/** A shaped bar's geometry in box space, with shading baked into vertex colours. */\nexport function buildShapedPrismGeometry(\n\tthree: ThreeModule,\n\tprism: PerspPrism,\n): THREE.BufferGeometry {\n\tconst shape = prism.shape ?? 'box';\n\tconst unit = buildObliqueShapeGeometry(\n\t\tthree,\n\t\t{ shape, taper: prism.taper ?? { bottom: 1, top: 1 } } as ObliqueBar,\n\t\tBoolean(prism.horizontal),\n\t);\n\tconst geometry = unit.index ? unit.toNonIndexed() : unit;\n\tif (geometry !== unit) {\n\t\tunit.dispose();\n\t}\n\tconst [x0, x1, y0, y1] = outlineBounds(prism);\n\tconst sx = Math.max(x1 - x0, 1e-6);\n\tconst sy = Math.max(y1 - y0, 1e-6);\n\tconst sz = Math.max(prism.z1 - prism.z0, 1e-6);\n\tgeometry.scale(sx, sy, sz);\n\tgeometry.translate((x0 + x1) / 2, (y0 + y1) / 2, (prism.z0 + prism.z1) / 2);\n\tgeometry.computeVertexNormals();\n\n\tconst normals = geometry.getAttribute('normal');\n\tconst colors = new Float32Array(normals.count * 3);\n\tconst base = new three.Color(prism.color).getRGB(new three.Color(), three.SRGBColorSpace);\n\tconst out = new three.Color();\n\tfor (let i = 0; i < normals.count; i++) {\n\t\tconst f = chart3DNormalShade(shape, normals.getX(i), normals.getY(i), -normals.getZ(i));\n\t\tout.setRGB(\n\t\t\tMath.min(1, base.r * f),\n\t\t\tMath.min(1, base.g * f),\n\t\t\tMath.min(1, base.b * f),\n\t\t\tthree.SRGBColorSpace,\n\t\t);\n\t\tcolors.set([out.r, out.g, out.b], i * 3);\n\t}\n\tgeometry.setAttribute('color', new three.Float32BufferAttribute(colors, 3));\n\treturn geometry;\n}\n","/**\n * WebGL geometry for the perspective 3D chart layout\n * (`chart-3d-persp-layout.ts`): the wall gridlines and one extruded, flat-\n * shaded mesh per mark prism (`chart-3d-persp-marks.ts`), in a group whose\n * matrix maps box space onto `buildPerspCamera`'s view space.\n *\n * Faces are shaded per vertex from their box-space normal with the same\n * quadratic form as the bar chart (`chart3DNormalShade`), the box's front\n * (-z, toward the viewer) as the lit face. Box space (x right, y up, z away)\n * is left-handed, so the box matrix mirrors; materials are two-sided.\n *\n * @module chart-3d-persp-mesh\n */\nimport type * as THREE from 'three';\n\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport type { PerspPrism } from './chart-3d-persp-marks';\nimport { buildShapedPrismGeometry, isShapedPerspPrism } from './chart-3d-persp-shape-mesh';\nimport { perspBoxMatrix } from './chart-3d-persp-view';\nimport { chart3DNormalShade } from './chart-3d-shading';\n\ntype ThreeModule = typeof THREE;\n\n/** PowerPoint's default major gridline colour (tx1 at 15% tint, `#D9D9D9`). */\nconst GRIDLINE_COLOR = 0xd9d9d9;\n\nexport interface PerspMeshResult {\n\t/** Box-space root (its matrix is the box placement). */\n\tgroup: THREE.Group;\n\t/** One mesh per prism, same order; `userData` names its series (and a bar's point). */\n\tmeshes: THREE.Mesh[];\n\t/** Replace mesh `i`'s geometry with `prism` (a drag preview). */\n\tsetPrism: (i: number, prism: PerspPrism) => void;\n\tdispose: () => void;\n}\n\n/** Bake face shading into a geometry's vertex colours. */\nexport function shadePerspGeometry(\n\tthree: ThreeModule,\n\tgeometry: THREE.BufferGeometry,\n\tcolor: string,\n): void {\n\tconst normals = geometry.getAttribute('normal');\n\tconst colors = new Float32Array(normals.count * 3);\n\tconst base = new three.Color(color).getRGB(new three.Color(), three.SRGBColorSpace);\n\tconst out = new three.Color();\n\tfor (let i = 0; i < normals.count; i++) {\n\t\t// Box-space -z faces the viewer.\n\t\tconst f = chart3DNormalShade('box', normals.getX(i), normals.getY(i), -normals.getZ(i));\n\t\tout.setRGB(\n\t\t\tMath.min(1, base.r * f),\n\t\t\tMath.min(1, base.g * f),\n\t\t\tMath.min(1, base.b * f),\n\t\t\tthree.SRGBColorSpace,\n\t\t);\n\t\tcolors[i * 3] = out.r;\n\t\tcolors[i * 3 + 1] = out.g;\n\t\tcolors[i * 3 + 2] = out.b;\n\t}\n\tgeometry.setAttribute('color', new three.Float32BufferAttribute(colors, 3));\n}\n\n/** An extruded, shaded prism geometry in box space. */\nexport function buildPrismGeometry(three: ThreeModule, prism: PerspPrism): THREE.BufferGeometry {\n\tif (isShapedPerspPrism(prism)) {\n\t\treturn buildShapedPrismGeometry(three, prism);\n\t}\n\tconst shape = new three.Shape(prism.outline.map(([x, y]) => new three.Vector2(x, y)));\n\tconst extruded = new three.ExtrudeGeometry(shape, {\n\t\tdepth: Math.max(prism.z1 - prism.z0, 1e-6),\n\t\tbevelEnabled: false,\n\t\tsteps: 1,\n\t});\n\tconst geometry = extruded.index ? extruded.toNonIndexed() : extruded;\n\tif (geometry !== extruded) {\n\t\textruded.dispose();\n\t}\n\tgeometry.translate(0, 0, prism.z0);\n\tgeometry.computeVertexNormals();\n\tshadePerspGeometry(three, geometry, prism.color);\n\treturn geometry;\n}\n\n/** The wall gridlines and floor edges of a perspective layout, in box space. */\nexport function buildPerspGridlines(\n\tthree: ThreeModule,\n\tlayout: Pick<PerspChartLayout, 'gridlines'>,\n): THREE.LineSegments {\n\tconst points: number[] = [];\n\tfor (const line of layout.gridlines) {\n\t\tpoints.push(...line.from, ...line.to);\n\t}\n\tconst geometry = new three.BufferGeometry();\n\tgeometry.setAttribute('position', new three.Float32BufferAttribute(points, 3));\n\treturn new three.LineSegments(geometry, new three.LineBasicMaterial({ color: GRIDLINE_COLOR }));\n}\n\n/** Build the gridlines and prism meshes of a perspective layout. */\nexport function buildPerspMeshes(\n\tthree: ThreeModule,\n\tlayout: Pick<PerspChartLayout, 'view' | 'gridlines'>,\n\tprisms: ReadonlyArray<PerspPrism>,\n): PerspMeshResult {\n\tconst group = new three.Group();\n\tgroup.matrixAutoUpdate = false;\n\tgroup.matrix.copy(perspBoxMatrix(three, layout.view));\n\n\tconst gridlines = buildPerspGridlines(three, layout);\n\tgroup.add(gridlines);\n\n\tconst material = new three.MeshBasicMaterial({ vertexColors: true, side: three.DoubleSide });\n\tconst meshes = prisms.map((prism) => {\n\t\tconst mesh = new three.Mesh(buildPrismGeometry(three, prism), material);\n\t\tmesh.userData = { seriesIndex: prism.seriesIndex, pointIndex: prism.pointIndex };\n\t\tgroup.add(mesh);\n\t\treturn mesh;\n\t});\n\n\treturn {\n\t\tgroup,\n\t\tmeshes,\n\t\tsetPrism(i, prism) {\n\t\t\tconst mesh = meshes[i];\n\t\t\tif (!mesh) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst previous = mesh.geometry;\n\t\t\tmesh.geometry = buildPrismGeometry(three, prism);\n\t\t\tprevious.dispose();\n\t\t},\n\t\tdispose() {\n\t\t\tgridlines.geometry.dispose();\n\t\t\t(gridlines.material as THREE.Material).dispose();\n\t\t\tmaterial.dispose();\n\t\t\tfor (const mesh of meshes) {\n\t\t\t\tmesh.geometry.dispose();\n\t\t\t}\n\t\t},\n\t};\n}\n","/**\n * The 3-D Surface chart (`c:surface3DChart`, and `c:surfaceChart` under the\n * 3D opt-in) on the perspective box (`chart-3d-persp-layout.ts`), as pure\n * geometry: PowerPoint colours a surface by VALUE BAND, one band per major\n * unit of the value axis (`gt/chart-16,17`: bands 0-0.5, 0.5-1, ... each in\n * its own colour, listed in the legend in place of the series).\n *\n * - The surface is a grid over categories (x) and series (z), series 1 on the\n * front edge and the last on the back wall. Each grid cell is split into two\n * triangles and each triangle clipped into the bands it crosses.\n * - Band colours come from `c:bandFmts` (fill, or the line colour of a\n * wireframe), else the chart palette cycle PowerPoint uses (accents 1-6,\n * then the same at 60% luminance).\n * - `c:wireframe` draws, for every band, the grid of the surface clamped\n * into that band in the band's colour (so a band the surface rises through\n * shows as a flat grid at its top edge), instead of fills.\n *\n * @module chart-3d-persp-surface\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\n\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport { perspValueY } from './chart-3d-persp-marks';\nimport { shade } from './chart-palette';\n\ntype Vec3 = [number, number, number];\n\nexport interface SurfaceBand {\n\t/** Legend text, e.g. `0-0.5`. */\n\tlabel: string;\n\tcolor: string;\n}\n\nexport interface SurfaceGeometry {\n\tbands: SurfaceBand[];\n\t/** Filled triangles as box-space vertex triples, with each triangle's band. */\n\ttriangles: Array<{ points: [Vec3, Vec3, Vec3]; band: number }>;\n\t/** Wireframe segments with each piece's band. */\n\tsegments: Array<{ from: Vec3; to: Vec3; band: number }>;\n}\n\ntype LayoutCore = Pick<PerspChartLayout, 'view' | 'range' | 'valueScale' | 'categoryX'>;\n\n/** Box z of series row `s` of `n` (front edge to back wall). */\nexport function surfaceRowZ(layout: Pick<LayoutCore, 'view'>, s: number, n: number): number {\n\treturn n > 1 ? (s / (n - 1)) * layout.view.box.d : layout.view.box.d / 2;\n}\n\n/** The value band edges (min, min + unit, ..., max). */\nfunction bandEdges(range: LayoutCore['range']): number[] {\n\tconst unit = range.majorUnit > 0 ? range.majorUnit : range.max - range.min || 1;\n\tconst edges: number[] = [];\n\tfor (let v = range.min; v < range.max - unit * 1e-9; v += unit) {\n\t\tedges.push(Number(v.toPrecision(12)));\n\t}\n\tedges.push(range.max);\n\treturn edges;\n}\n\nfunction formatEdge(v: number): string {\n\treturn String(Number(v.toPrecision(10)));\n}\n\n/** Colours and legend labels for each band. */\nexport function surfaceBands(\n\tchartData: PptxChartData,\n\trange: LayoutCore['range'],\n\tpalette: readonly string[],\n): SurfaceBand[] {\n\tconst edges = bandEdges(range);\n\treturn edges.slice(0, -1).map((lo, i) => {\n\t\tconst fmt = chartData.bandFmts?.find((b) => b.index === i)?.spPr;\n\t\tconst cycle = palette.length > 0 ? palette : ['#4472C4'];\n\t\tconst base = cycle[i % cycle.length];\n\t\tconst fallback = Math.floor(i / cycle.length) % 2 === 1 ? shade(base, 0.4) : base;\n\t\treturn {\n\t\t\tlabel: `${formatEdge(lo)}-${formatEdge(edges[i + 1])}`,\n\t\t\tcolor: fmt?.fillColor ?? fmt?.strokeColor ?? fallback,\n\t\t};\n\t});\n}\n\n/** Clip a polygon to `lo <= y <= hi` (box y). */\nfunction clipY(poly: Vec3[], lo: number, hi: number): Vec3[] {\n\tconst clip = (pts: Vec3[], keep: (p: Vec3) => boolean, edge: number): Vec3[] => {\n\t\tconst out: Vec3[] = [];\n\t\tfor (let i = 0; i < pts.length; i++) {\n\t\t\tconst a = pts[i];\n\t\t\tconst b = pts[(i + 1) % pts.length];\n\t\t\tconst ina = keep(a);\n\t\t\tconst inb = keep(b);\n\t\t\tif (ina) {\n\t\t\t\tout.push(a);\n\t\t\t}\n\t\t\tif (ina !== inb) {\n\t\t\t\tconst t = (edge - a[1]) / (b[1] - a[1]);\n\t\t\t\tout.push([a[0] + (b[0] - a[0]) * t, edge, a[2] + (b[2] - a[2]) * t]);\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t};\n\treturn clip(\n\t\tclip(poly, (p) => p[1] >= lo, lo),\n\t\t(p) => p[1] <= hi,\n\t\thi,\n\t);\n}\n\n/** A grid cell's two triangles. */\nfunction cellTriangles(\n\tpoint: (s: number, c: number) => Vec3,\n\ts: number,\n\tc: number,\n): Array<[Vec3, Vec3, Vec3]> {\n\treturn [\n\t\t[point(s, c), point(s, c + 1), point(s + 1, c + 1)],\n\t\t[point(s, c), point(s + 1, c + 1), point(s + 1, c)],\n\t];\n}\n\n/**\n * A grid edge drawn once per band with the surface clamped into that band\n * (PowerPoint's wireframe: each band is its own layer, flat where the\n * surface runs above or below it). Only the front series line keeps its\n * flat stretches: that is all `gt/chart-17` shows of the lower layers.\n */\nfunction clampedBandSegments(\n\ta: Vec3,\n\tb: Vec3,\n\tedgesY: number[],\n\tout: SurfaceGeometry['segments'],\n\tkeepFlat: boolean,\n): void {\n\tfor (let band = 0; band + 1 < edgesY.length; band++) {\n\t\tconst lo = edgesY[band];\n\t\tconst hi = edgesY[band + 1];\n\t\tconst cuts = [0, 1];\n\t\tfor (const e of [lo, hi]) {\n\t\t\tconst t = (e - a[1]) / (b[1] - a[1]);\n\t\t\tif (t > 0 && t < 1) {\n\t\t\t\tcuts.push(t);\n\t\t\t}\n\t\t}\n\t\tcuts.sort((x, y) => x - y);\n\t\tconst at = (t: number): Vec3 => [\n\t\t\ta[0] + (b[0] - a[0]) * t,\n\t\t\tMath.min(hi, Math.max(lo, a[1] + (b[1] - a[1]) * t)),\n\t\t\ta[2] + (b[2] - a[2]) * t,\n\t\t];\n\t\tfor (let i = 0; i + 1 < cuts.length; i++) {\n\t\t\tconst from = at(cuts[i]);\n\t\t\tconst to = at(cuts[i + 1]);\n\t\t\tconst flat = from[1] === to[1] && (from[1] === lo || from[1] === hi);\n\t\t\tif (keepFlat || !flat) {\n\t\t\t\tout.push({ from, to, band });\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * The surface's triangles (filled) or segments (wireframe) in box space;\n * `override` replaces one point's value (a drag preview).\n */\nexport function buildSurfaceGeometry(\n\tchartData: PptxChartData,\n\tlayout: LayoutCore,\n\tpalette: readonly string[],\n\toverride?: { seriesIndex: number; pointIndex: number; value: number },\n): SurfaceGeometry {\n\tconst nSer = chartData.series.length;\n\tconst nCat = layout.categoryX.length;\n\tconst bands = surfaceBands(chartData, layout.range, palette);\n\tconst edgesY = bandEdges(layout.range).map((v) => perspValueY(layout, v));\n\tconst point = (s: number, c: number): Vec3 => {\n\t\tlet v = chartData.series[s]?.values[c];\n\t\tif (override && override.seriesIndex === s && override.pointIndex === c) {\n\t\t\tv = override.value;\n\t\t}\n\t\tconst value = v !== undefined && Number.isFinite(v) ? v : layout.range.min;\n\t\treturn [layout.categoryX[c], perspValueY(layout, value), surfaceRowZ(layout, s, nSer)];\n\t};\n\tconst geometry: SurfaceGeometry = { bands, triangles: [], segments: [] };\n\tif (chartData.wireframe) {\n\t\tfor (let s = 0; s < nSer; s++) {\n\t\t\tfor (let c = 0; c < nCat; c++) {\n\t\t\t\tif (c + 1 < nCat) {\n\t\t\t\t\tclampedBandSegments(point(s, c), point(s, c + 1), edgesY, geometry.segments, s === 0);\n\t\t\t\t}\n\t\t\t\tif (s + 1 < nSer) {\n\t\t\t\t\tclampedBandSegments(point(s, c), point(s + 1, c), edgesY, geometry.segments, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn geometry;\n\t}\n\tfor (let s = 0; s + 1 < nSer; s++) {\n\t\tfor (let c = 0; c + 1 < nCat; c++) {\n\t\t\tfor (const tri of cellTriangles(point, s, c)) {\n\t\t\t\tfor (let b = 0; b < bands.length; b++) {\n\t\t\t\t\tconst piece = clipY(tri, edgesY[b], edgesY[b + 1]);\n\t\t\t\t\tfor (let i = 1; i + 1 < piece.length; i++) {\n\t\t\t\t\t\tgeometry.triangles.push({ points: [piece[0], piece[i], piece[i + 1]], band: b });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn geometry;\n}\n","/**\n * WebGL objects for the banded 3-D Surface (`chart-3d-persp-surface.ts`):\n * flat-shaded band triangles, or coloured band lines for a wireframe, plus an\n * invisible unclipped grid mesh for picking (a wireframe's hairlines are too\n * thin to hit).\n *\n * @module chart-3d-persp-surface-mesh\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport { perspValueY } from './chart-3d-persp-marks';\nimport { buildPerspGridlines } from './chart-3d-persp-mesh';\nimport { buildSurfaceGeometry, surfaceRowZ } from './chart-3d-persp-surface';\nimport { perspBoxMatrix } from './chart-3d-persp-view';\nimport { chart3DNormalShade } from './chart-3d-shading';\n\ntype ThreeModule = typeof THREE;\n\nexport interface SurfaceMarks {\n\tgroup: THREE.Group;\n\tpickTarget: THREE.Mesh;\n\trebuild: (override?: { seriesIndex: number; pointIndex: number; value: number }) => void;\n\tdispose: () => void;\n}\n\nfunction srgb(three: ThreeModule, hex: string, f: number): THREE.Color {\n\tconst base = new three.Color(hex).getRGB(new three.Color(), three.SRGBColorSpace);\n\treturn new three.Color().setRGB(\n\t\tMath.min(1, base.r * f),\n\t\tMath.min(1, base.g * f),\n\t\tMath.min(1, base.b * f),\n\t\tthree.SRGBColorSpace,\n\t);\n}\n\nfunction buildVisual(\n\tthree: ThreeModule,\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n\tpalette: readonly string[],\n\toverride?: { seriesIndex: number; pointIndex: number; value: number },\n): THREE.Object3D {\n\tconst geo = buildSurfaceGeometry(chartData, layout, palette, override);\n\tconst positions: number[] = [];\n\tconst colors: number[] = [];\n\tif (chartData.wireframe) {\n\t\tfor (const seg of geo.segments) {\n\t\t\tconst c = srgb(three, geo.bands[seg.band].color, 1);\n\t\t\tpositions.push(...seg.from, ...seg.to);\n\t\t\tcolors.push(c.r, c.g, c.b, c.r, c.g, c.b);\n\t\t}\n\t\tconst g = new three.BufferGeometry();\n\t\tg.setAttribute('position', new three.Float32BufferAttribute(positions, 3));\n\t\tg.setAttribute('color', new three.Float32BufferAttribute(colors, 3));\n\t\treturn new three.LineSegments(g, new three.LineBasicMaterial({ vertexColors: true }));\n\t}\n\tconst a = new three.Vector3();\n\tconst b = new three.Vector3();\n\tconst n = new three.Vector3();\n\tfor (const tri of geo.triangles) {\n\t\tconst [p0, p1, p2] = tri.points;\n\t\ta.set(p1[0] - p0[0], p1[1] - p0[1], p1[2] - p0[2]);\n\t\tb.set(p2[0] - p0[0], p2[1] - p0[1], p2[2] - p0[2]);\n\t\tn.crossVectors(a, b).normalize();\n\t\tif (n.y < 0) {\n\t\t\tn.negate();\n\t\t}\n\t\t// Box-space -z faces the viewer.\n\t\tconst c = srgb(three, geo.bands[tri.band].color, chart3DNormalShade('box', n.x, n.y, -n.z));\n\t\tpositions.push(...p0, ...p1, ...p2);\n\t\tcolors.push(c.r, c.g, c.b, c.r, c.g, c.b, c.r, c.g, c.b);\n\t}\n\tconst g = new three.BufferGeometry();\n\tg.setAttribute('position', new three.Float32BufferAttribute(positions, 3));\n\tg.setAttribute('color', new three.Float32BufferAttribute(colors, 3));\n\treturn new three.Mesh(\n\t\tg,\n\t\tnew three.MeshBasicMaterial({ vertexColors: true, side: three.DoubleSide }),\n\t);\n}\n\nfunction buildPickGeometry(\n\tthree: ThreeModule,\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n): THREE.BufferGeometry {\n\tconst nSer = chartData.series.length;\n\tconst nCat = layout.categoryX.length;\n\tconst at = (s: number, c: number): number[] => {\n\t\tconst v = chartData.series[s]?.values[c];\n\t\treturn [\n\t\t\tlayout.categoryX[c],\n\t\t\tperspValueY(layout, v !== undefined && Number.isFinite(v) ? v : layout.range.min),\n\t\t\tsurfaceRowZ(layout, s, nSer),\n\t\t];\n\t};\n\tconst positions: number[] = [];\n\tfor (let s = 0; s + 1 < nSer; s++) {\n\t\tfor (let c = 0; c + 1 < nCat; c++) {\n\t\t\tpositions.push(...at(s, c), ...at(s, c + 1), ...at(s + 1, c + 1));\n\t\t\tpositions.push(...at(s, c), ...at(s + 1, c + 1), ...at(s + 1, c));\n\t\t}\n\t}\n\tconst g = new three.BufferGeometry();\n\tg.setAttribute('position', new three.Float32BufferAttribute(positions, 3));\n\treturn g;\n}\n\nfunction disposeObject(object: THREE.Object3D): void {\n\tconst withGeometry = object as THREE.Object3D & {\n\t\tgeometry?: THREE.BufferGeometry;\n\t\tmaterial?: THREE.Material;\n\t};\n\twithGeometry.geometry?.dispose();\n\twithGeometry.material?.dispose();\n}\n\n/** Build the surface's objects into a box-space group. */\nexport function buildSurfaceMarks(\n\tthree: ThreeModule,\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n\tpalette: readonly string[],\n): SurfaceMarks {\n\tconst group = new three.Group();\n\tgroup.matrixAutoUpdate = false;\n\tgroup.matrix.copy(perspBoxMatrix(three, layout.view));\n\tconst gridlines = buildPerspGridlines(three, layout);\n\tgroup.add(gridlines);\n\tlet visual = buildVisual(three, chartData, layout, palette);\n\tgroup.add(visual);\n\tconst pickMaterial = new three.MeshBasicMaterial({ side: three.DoubleSide, visible: false });\n\tconst pickTarget = new three.Mesh(buildPickGeometry(three, chartData, layout), pickMaterial);\n\tgroup.add(pickTarget);\n\treturn {\n\t\tgroup,\n\t\tpickTarget,\n\t\trebuild(override) {\n\t\t\tgroup.remove(visual);\n\t\t\tdisposeObject(visual);\n\t\t\tvisual = buildVisual(three, chartData, layout, palette, override);\n\t\t\tgroup.add(visual);\n\t\t},\n\t\tdispose() {\n\t\t\tdisposeObject(visual);\n\t\t\tdisposeObject(gridlines);\n\t\t\tpickTarget.geometry.dispose();\n\t\t\tpickMaterial.dispose();\n\t\t},\n\t};\n}\n","/**\n * The marks of a perspective 3D chart scene (`chart-3d-persp-scene.ts`)\n * behind one interface, so the scene, its picking and its drag preview do\n * not care whether they draw line / area prisms or a banded surface.\n *\n * @module chart-3d-persp-mark-set\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { Chart3DPoint } from './chart-3d-mark-interaction';\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport { buildPerspPrisms, perspRowSpan, perspValueY } from './chart-3d-persp-marks';\nimport { buildPerspMeshes } from './chart-3d-persp-mesh';\nimport { surfaceRowZ } from './chart-3d-persp-surface';\nimport { buildSurfaceMarks } from './chart-3d-persp-surface-mesh';\n\ntype ThreeModule = typeof THREE;\n\nexport interface PerspMarkSet {\n\t/** Box-space root (its matrix is the box placement). */\n\tgroup: THREE.Group;\n\t/** Objects rays are cast against. */\n\ttargets: THREE.Object3D[];\n\t/** The data point at a box-space hit on `object`. */\n\tpointAt: (object: THREE.Object3D, local: THREE.Vector3) => Chart3DPoint | null;\n\t/** Box-space anchor of a point drawn at `value` (selection marker, drag scale). */\n\tanchor: (point: Chart3DPoint, value: number) => [number, number, number];\n\t/** Whether a point's value can be dragged. */\n\tdraggable: boolean;\n\t/** Redraw with one point at `value` (a drag preview). */\n\tpreview: (point: Chart3DPoint, value: number) => void;\n\tdispose: () => void;\n}\n\nfunction nearestIndex(xs: readonly number[], x: number): number {\n\tlet best = 0;\n\txs.forEach((v, i) => {\n\t\tif (Math.abs(v - x) < Math.abs(xs[best] - x)) {\n\t\t\tbest = i;\n\t\t}\n\t});\n\treturn best;\n}\n\n/** Build the mark set for a laid-out perspective chart. */\nexport function buildPerspMarkSet(\n\tthree: ThreeModule,\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n\tpalette: readonly string[],\n): PerspMarkSet {\n\tif (layout.kind === 'surface') {\n\t\tconst nSer = chartData.series.length;\n\t\tconst zs = Array.from({ length: nSer }, (_, s) => surfaceRowZ(layout, s, nSer));\n\t\tconst surface = buildSurfaceMarks(three, chartData, layout, palette);\n\t\treturn {\n\t\t\tgroup: surface.group,\n\t\t\ttargets: [surface.pickTarget],\n\t\t\tpointAt: (_object, local) => ({\n\t\t\t\tseriesIndex: nearestIndex(zs, local.z),\n\t\t\t\tpointIndex: nearestIndex(layout.categoryX, local.x),\n\t\t\t}),\n\t\t\tanchor: (point, value) => [\n\t\t\t\tlayout.categoryX[point.pointIndex],\n\t\t\t\tperspValueY(layout, value),\n\t\t\t\tzs[point.seriesIndex],\n\t\t\t],\n\t\t\tdraggable: true,\n\t\t\tpreview: (point, value) => surface.rebuild({ ...point, value }),\n\t\t\tdispose: () => surface.dispose(),\n\t\t};\n\t}\n\tif (layout.kind === 'bar') {\n\t\treturn buildBarMarkSet(three, chartData, layout);\n\t}\n\tconst stacked = layout.grouping !== 'standard' && layout.grouping !== 'clustered';\n\tconst meshes = buildPerspMeshes(three, layout, buildPerspPrisms(chartData, layout));\n\treturn {\n\t\tgroup: meshes.group,\n\t\ttargets: meshes.meshes,\n\t\tpointAt(object, local) {\n\t\t\tconst seriesIndex = (object.userData as { seriesIndex?: number }).seriesIndex;\n\t\t\treturn seriesIndex === undefined\n\t\t\t\t? null\n\t\t\t\t: { seriesIndex, pointIndex: nearestIndex(layout.categoryX, local.x) };\n\t\t},\n\t\tanchor(point, value) {\n\t\t\tconst [z0, z1] = perspRowSpan(layout, stacked ? 0 : point.seriesIndex);\n\t\t\treturn [layout.categoryX[point.pointIndex], perspValueY(layout, value), (z0 + z1) / 2];\n\t\t},\n\t\tdraggable: !stacked,\n\t\tpreview(point, value) {\n\t\t\tmeshes.setPrism(\n\t\t\t\tpoint.seriesIndex,\n\t\t\t\tbuildPerspPrisms(chartData, layout, { ...point, value })[point.seriesIndex],\n\t\t\t);\n\t\t},\n\t\tdispose: () => meshes.dispose(),\n\t};\n}\n\n/** Bars: one prism per point, dragged one at a time (not stacked ones, as in the 2D chart). */\nfunction buildBarMarkSet(\n\tthree: ThreeModule,\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n): PerspMarkSet {\n\tconst prisms = buildPerspPrisms(chartData, layout);\n\tconst meshes = buildPerspMeshes(three, layout, prisms);\n\tconst indexOf = (point: Chart3DPoint): number =>\n\t\tprisms.findIndex(\n\t\t\t(p) => p.seriesIndex === point.seriesIndex && p.pointIndex === point.pointIndex,\n\t\t);\n\treturn {\n\t\tgroup: meshes.group,\n\t\ttargets: meshes.meshes,\n\t\tpointAt(object) {\n\t\t\tconst data = object.userData as { seriesIndex?: number; pointIndex?: number };\n\t\t\treturn data.seriesIndex === undefined || data.pointIndex === undefined\n\t\t\t\t? null\n\t\t\t\t: { seriesIndex: data.seriesIndex, pointIndex: data.pointIndex };\n\t\t},\n\t\tanchor(point, value) {\n\t\t\tconst prism = prisms[indexOf(point)];\n\t\t\tif (!prism) {\n\t\t\t\treturn [0, perspValueY(layout, value), 0];\n\t\t\t}\n\t\t\tconst along = prism.outline.map(([x, y]) => (layout.horizontal ? y : x));\n\t\t\tconst mid = (Math.min(...along) + Math.max(...along)) / 2;\n\t\t\tconst v = perspValueY(layout, value);\n\t\t\tconst z = (prism.z0 + prism.z1) / 2;\n\t\t\treturn layout.horizontal ? [v, mid, z] : [mid, v, z];\n\t\t},\n\t\tdraggable: layout.grouping === 'clustered' || layout.grouping === 'standard',\n\t\tpreview(point, value) {\n\t\t\tconst i = indexOf(point);\n\t\t\tconst next = buildPerspPrisms(chartData, layout, { ...point, value })[i];\n\t\t\tif (next) {\n\t\t\t\tmeshes.setPrism(i, next);\n\t\t\t}\n\t\t},\n\t\tdispose: () => meshes.dispose(),\n\t};\n}\n","/**\n * `<pptx-three-view>` scene for the perspective 3D line / area / surface\n * charts (`chart-3d-persp-layout.ts`): the box's gridlines and marks in WebGL\n * through PowerPoint's fitted camera, its labels, title and legend in the SVG\n * overlay, and hover / select / drag on the shared mark interaction.\n *\n * A pick resolves to the nearest data point on the hit mark; a vertical drag\n * moves that point's value (not a stacked area's, as in the 2D chart), at the\n * screen scale of the value axis at that point. A surface's legend lists its\n * value bands, as PowerPoint's does.\n *\n * @module chart-3d-persp-scene\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { ThreeViewContext, ThreeViewScene } from '../three-view/types';\nimport { renderChart3DChromeOverlaySvg } from './chart-3d-chrome-overlay';\nimport { attachChart3DMarkInteraction } from './chart-3d-mark-interaction';\nimport type { Chart3DPoint } from './chart-3d-mark-interaction';\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport { buildPerspMarkSet } from './chart-3d-persp-mark-set';\nimport { surfaceBands } from './chart-3d-persp-surface';\nimport { buildPerspCamera, perspToScreen } from './chart-3d-persp-view';\nimport { roundDragValue } from './chart-interaction';\nimport { DEFAULT_PALETTE } from './chart-view-model-scale';\nimport type { ChartViewModel, LegendEntry } from './chart-view-model-types';\n\n/** Selection marker colour (the 2D selected-mark accent). */\nconst SELECTED_COLOR = 0x2563eb;\n\nexport interface PerspSceneInput {\n\tvm: ChartViewModel;\n\tlayout: PerspChartLayout;\n\tchartData: PptxChartData;\n\tcategoryLabels: ReadonlyArray<string>;\n}\n\n/** A surface's legend: one entry per value band (hollow keys for a wireframe). */\nfunction surfaceLegend(\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n\tpalette: readonly string[],\n\tbackground: string,\n\ttextStyle: LegendEntry['textStyle'],\n): LegendEntry[] {\n\treturn surfaceBands(chartData, layout.range, palette).map((band) => ({\n\t\tlabel: band.label,\n\t\tcolor: band.color,\n\t\t...(textStyle ? { textStyle } : {}),\n\t\t...(chartData.wireframe\n\t\t\t? {\n\t\t\t\t\tlineSwatch: {\n\t\t\t\t\t\tprimitives: [\n\t\t\t\t\t\t\t{ kind: 'rect' as const, x: 0, y: -7, w: 10, h: 10, fill: band.color },\n\t\t\t\t\t\t\t{ kind: 'rect' as const, x: 1, y: -6, w: 8, h: 8, fill: background },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t}));\n}\n\nexport function mountPerspChartView(input: PerspSceneInput, ctx: ThreeViewContext): ThreeViewScene {\n\tconst three = ctx.three;\n\tconst { vm, layout, chartData } = input;\n\tconst palette = chartData.colorPalette?.length ? chartData.colorPalette : DEFAULT_PALETTE;\n\tconst camera = buildPerspCamera(three, layout.view, vm.svgWidth, vm.svgHeight);\n\tconst scene = new three.Scene();\n\tconst marks = buildPerspMarkSet(three, chartData, layout, palette);\n\tscene.add(marks.group);\n\n\tconst markerGeometry = new three.OctahedronGeometry(layout.view.box.w * 0.012);\n\tconst markerMaterial = new three.MeshBasicMaterial({ color: SELECTED_COLOR });\n\tconst marker = new three.Mesh(markerGeometry, markerMaterial);\n\tmarker.visible = false;\n\tmarks.group.add(marker);\n\n\tconst overlay = renderChart3DChromeOverlaySvg(ctx.document, vm, {\n\t\tlabels: layout.labels,\n\t\treverseLegend: layout.horizontal && layout.grouping === 'clustered',\n\t\tlegend:\n\t\t\tlayout.kind === 'surface'\n\t\t\t\t? surfaceLegend(\n\t\t\t\t\t\tchartData,\n\t\t\t\t\t\tlayout,\n\t\t\t\t\t\tpalette,\n\t\t\t\t\t\tvm.areaFill ?? '#ffffff',\n\t\t\t\t\t\tvm.legend[0]?.textStyle,\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t});\n\tctx.overlay.appendChild(overlay);\n\n\tconst valueAt = (point: Chart3DPoint): number | undefined => {\n\t\tconst v = chartData.series[point.seriesIndex]?.values[point.pointIndex];\n\t\treturn v !== undefined && Number.isFinite(v) ? v : undefined;\n\t};\n\tconst placeMarker = (point: Chart3DPoint, value: number): void => {\n\t\tmarker.position.set(...marks.anchor(point, value));\n\t};\n\n\tconst interaction = attachChart3DMarkInteraction({\n\t\tctx,\n\t\tcamera,\n\t\tscene,\n\t\tsvgHeight: vm.svgHeight,\n\t\tchartData,\n\t\tcategoryLabels: input.categoryLabels,\n\t\tseriesNames: chartData.series.map((s) => s.name),\n\t\tadapter: {\n\t\t\ttargets: marks.targets,\n\t\t\tpointAt: (hit) => marks.pointAt(hit.object, marks.group.worldToLocal(hit.point.clone())),\n\t\t\tvalueOf: valueAt,\n\t\t\tbeginDrag(point) {\n\t\t\t\tconst start = valueAt(point);\n\t\t\t\tif (!marks.draggable || start === undefined) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\t// Screen px per value unit along the value axis at this point (up for\n\t\t\t\t// columns, right for horizontal bars); the pointer delta is projected\n\t\t\t\t// onto it, so either direction drags.\n\t\t\t\tconst unit = layout.range.majorUnit || 1;\n\t\t\t\tconst a = marks.anchor(point, start);\n\t\t\t\tconst step = unit * layout.valueScale;\n\t\t\t\tconst b: [number, number, number] = layout.horizontal\n\t\t\t\t\t? [a[0] + step, a[1], a[2]]\n\t\t\t\t\t: [a[0], a[1] + step, a[2]];\n\t\t\t\tconst s0 = perspToScreen(layout.view, a);\n\t\t\t\tconst s1 = perspToScreen(layout.view, b);\n\t\t\t\tconst ux = (s1.x - s0.x) / unit;\n\t\t\t\tconst uy = (s1.y - s0.y) / unit;\n\t\t\t\tconst len2 = ux * ux + uy * uy || 1;\n\t\t\t\tconst span = layout.range.max - layout.range.min;\n\t\t\t\treturn {\n\t\t\t\t\tpreview(dx, dy) {\n\t\t\t\t\t\tconst value = roundDragValue(start + (dx * ux + dy * uy) / len2, {\n\t\t\t\t\t\t\tmin: layout.range.min,\n\t\t\t\t\t\t\tmax: layout.range.max,\n\t\t\t\t\t\t\tspan,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tmarks.preview(point, value);\n\t\t\t\t\t\tif (marker.visible) {\n\t\t\t\t\t\t\tplaceMarker(point, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\thighlight(point) {\n\t\t\t\tconst value = point ? valueAt(point) : undefined;\n\t\t\t\tmarker.visible = point !== null && value !== undefined;\n\t\t\t\tif (point && value !== undefined) {\n\t\t\t\t\tplaceMarker(point, value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdispose() {\n\t\t\t\tmarkerGeometry.dispose();\n\t\t\t\tmarkerMaterial.dispose();\n\t\t\t},\n\t\t},\n\t});\n\n\tlet disposed = false;\n\treturn {\n\t\trender(renderer: THREE.WebGLRenderer) {\n\t\t\trenderer.render(scene, camera);\n\t\t},\n\t\tresize() {\n\t\t\t// The projection is fixed in authored chart px, like the overlay.\n\t\t},\n\t\tisAnimating: () => false,\n\t\tsetInteractive: (on) => interaction.setInteractive(on),\n\t\tsetSelectedPart: (part) => interaction.setSelectedPart(part),\n\t\tdispose() {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdisposed = true;\n\t\t\tinteraction.dispose();\n\t\t\tmarks.dispose();\n\t\t\toverlay.remove();\n\t\t},\n\t};\n}\n","/**\n * WebGL geometry for the 3-D Pie (`chart-3d-pie-layout.ts`): one mesh per\n * slice (top, rim, the two cut faces, bottom) with baked vertex colours, and\n * the white slice seams PowerPoint draws (`a:ln` in `lt1`).\n *\n * Shading, fitted to `gt/chart-14,15`: the top face keeps the slice colour;\n * the rim darkens from the left toward the right, `max(0.385, 0.57 - 0.275\n * phi)` with `phi` the rim normal's angle to the right of straight toward the\n * viewer (radians). The flat cut faces of an exploded pie follow their own\n * rule, lighter turned right: `0.5 + 0.2 sin(phi)` (0.70 at +59 degrees,\n * 0.42 at -23, 0.39 at -59, 0.3 at -90 on `gt/chart-15`).\n *\n * @module chart-3d-pie-marks\n */\nimport type * as THREE from 'three';\n\nimport { perspBoxMatrix } from './chart-3d-persp-view';\nimport type { PieChartLayout, PieSlice } from './chart-3d-pie-layout';\nimport { pieRimPoint } from './chart-3d-pie-layout';\n\ntype ThreeModule = typeof THREE;\ntype Vec3 = [number, number, number];\n\nconst SEAM_COLOR = 0xffffff;\n/** Arc segments per full turn. */\nconst SEGMENTS_PER_TURN = 144;\n\n/** Shade multiplier for a box-space normal (box -z faces the viewer); `cut` for a slice's flat cut face. */\nexport function pieFaceShade(nx: number, ny: number, nz: number, cut = false): number {\n\tif (ny > 0.5) {\n\t\treturn 1;\n\t}\n\tif (ny < -0.5) {\n\t\treturn 0.3;\n\t}\n\tconst phi = Math.atan2(nx, -nz);\n\tif (cut) {\n\t\treturn 0.5 + 0.2 * Math.sin(phi);\n\t}\n\treturn Math.max(0.385, 0.57 - 0.275 * phi);\n}\n\nexport interface PieMarks {\n\tgroup: THREE.Group;\n\tmeshes: THREE.Mesh[];\n\t/** Rebuild the slices (a drag preview). */\n\tsetSlices: (slices: ReadonlyArray<PieSlice>) => void;\n\tdispose: () => void;\n}\n\ninterface SliceBuffers {\n\tpositions: number[];\n\tcolors: number[];\n\tseams: number[];\n}\n\nfunction sliceBuffers(three: ThreeModule, layout: PieChartLayout, slice: PieSlice): SliceBuffers {\n\tconst base = new three.Color(slice.color).getRGB(new three.Color(), three.SRGBColorSpace);\n\tconst out = new three.Color();\n\tconst positions: number[] = [];\n\tconst colors: number[] = [];\n\tconst cx = layout.center.x + slice.offset.x;\n\tconst cz = layout.center.z + slice.offset.z;\n\tconst top = layout.center.y;\n\tconst r = layout.radius;\n\tconst push = (p: Vec3, n: Vec3, cut = false): void => {\n\t\tconst f = pieFaceShade(n[0], n[1], n[2], cut);\n\t\tout.setRGB(\n\t\t\tMath.min(1, base.r * f),\n\t\t\tMath.min(1, base.g * f),\n\t\t\tMath.min(1, base.b * f),\n\t\t\tthree.SRGBColorSpace,\n\t\t);\n\t\tpositions.push(...p);\n\t\tcolors.push(out.r, out.g, out.b);\n\t};\n\tconst span = slice.endAngle - slice.startAngle;\n\tconst steps = Math.max(2, Math.ceil((span / (Math.PI * 2)) * SEGMENTS_PER_TURN));\n\tconst angles = Array.from({ length: steps + 1 }, (_, i) => slice.startAngle + (span * i) / steps);\n\tconst rim = (a: number, y: number): Vec3 => {\n\t\tconst p = pieRimPoint(cx, cz, r, a);\n\t\treturn [p.x, y, p.z];\n\t};\n\tconst radial = (a: number): Vec3 => [Math.sin(a), 0, Math.cos(a)];\n\tfor (let i = 0; i < steps; i++) {\n\t\tconst a0 = angles[i];\n\t\tconst a1 = angles[i + 1];\n\t\t// Top and bottom fans.\n\t\tpush([cx, top, cz], [0, 1, 0]);\n\t\tpush(rim(a0, top), [0, 1, 0]);\n\t\tpush(rim(a1, top), [0, 1, 0]);\n\t\tpush([cx, 0, cz], [0, -1, 0]);\n\t\tpush(rim(a1, 0), [0, -1, 0]);\n\t\tpush(rim(a0, 0), [0, -1, 0]);\n\t\t// Rim, smooth-shaded by the radial normal.\n\t\tpush(rim(a0, top), radial(a0));\n\t\tpush(rim(a0, 0), radial(a0));\n\t\tpush(rim(a1, 0), radial(a1));\n\t\tpush(rim(a0, top), radial(a0));\n\t\tpush(rim(a1, 0), radial(a1));\n\t\tpush(rim(a1, top), radial(a1));\n\t}\n\t// The two cut faces, normals perpendicular to their radius.\n\tfor (const [a, sign] of [\n\t\t[slice.startAngle, -1],\n\t\t[slice.endAngle, 1],\n\t] as const) {\n\t\tconst n: Vec3 = [sign * Math.cos(a), 0, -sign * Math.sin(a)];\n\t\tpush([cx, top, cz], n, true);\n\t\tpush([cx, 0, cz], n, true);\n\t\tpush(rim(a, 0), n, true);\n\t\tpush([cx, top, cz], n, true);\n\t\tpush(rim(a, 0), n, true);\n\t\tpush(rim(a, top), n, true);\n\t}\n\tconst seams: number[] = [];\n\tfor (let i = 0; i < steps; i++) {\n\t\tseams.push(...rim(angles[i], top), ...rim(angles[i + 1], top));\n\t}\n\tfor (const a of [slice.startAngle, slice.endAngle]) {\n\t\tseams.push(cx, top, cz, ...rim(a, top), ...rim(a, top), ...rim(a, 0));\n\t}\n\treturn { positions, colors, seams };\n}\n\n/** Build the slice meshes and seams of a pie layout. */\nexport function buildPieMarks(three: ThreeModule, layout: PieChartLayout): PieMarks {\n\tconst group = new three.Group();\n\tgroup.matrixAutoUpdate = false;\n\tgroup.matrix.copy(perspBoxMatrix(three, layout.view));\n\tconst material = new three.MeshBasicMaterial({\n\t\tvertexColors: true,\n\t\tside: three.DoubleSide,\n\t\tpolygonOffset: true,\n\t\tpolygonOffsetFactor: 1,\n\t\tpolygonOffsetUnits: 1,\n\t});\n\tconst seamMaterial = new three.LineBasicMaterial({ color: SEAM_COLOR });\n\t// Stable array: the scene's pick targets keep pointing at it across rebuilds.\n\tconst meshes: THREE.Mesh[] = [];\n\tlet seams: THREE.LineSegments | null = null;\n\tconst clear = (): void => {\n\t\tfor (const mesh of meshes) {\n\t\t\tgroup.remove(mesh);\n\t\t\tmesh.geometry.dispose();\n\t\t}\n\t\tif (seams) {\n\t\t\tgroup.remove(seams);\n\t\t\tseams.geometry.dispose();\n\t\t}\n\t};\n\tconst build = (slices: ReadonlyArray<PieSlice>): void => {\n\t\tclear();\n\t\tconst seamPoints: number[] = [];\n\t\tconst built = slices.map((slice) => {\n\t\t\tconst b = sliceBuffers(three, layout, slice);\n\t\t\tconst geometry = new three.BufferGeometry();\n\t\t\tgeometry.setAttribute('position', new three.Float32BufferAttribute(b.positions, 3));\n\t\t\tgeometry.setAttribute('color', new three.Float32BufferAttribute(b.colors, 3));\n\t\t\tconst mesh = new three.Mesh(geometry, material);\n\t\t\tmesh.userData = { seriesIndex: 0, pointIndex: slice.pointIndex };\n\t\t\tgroup.add(mesh);\n\t\t\tseamPoints.push(...b.seams);\n\t\t\treturn mesh;\n\t\t});\n\t\tmeshes.splice(0, meshes.length, ...built);\n\t\tconst seamGeometry = new three.BufferGeometry();\n\t\tseamGeometry.setAttribute('position', new three.Float32BufferAttribute(seamPoints, 3));\n\t\tseams = new three.LineSegments(seamGeometry, seamMaterial);\n\t\tgroup.add(seams);\n\t};\n\tbuild(layout.slices);\n\treturn {\n\t\tgroup,\n\t\tmeshes,\n\t\tsetSlices: build,\n\t\tdispose() {\n\t\t\tclear();\n\t\t\tmaterial.dispose();\n\t\t\tseamMaterial.dispose();\n\t\t},\n\t};\n}\n","/**\n * `<pptx-three-view>` scene for the 3-D Pie (`chart-3d-pie-layout.ts`): the\n * slices in WebGL through the fitted perspective camera, title and legend in\n * the SVG overlay, and hover / select / drag on the shared mark interaction.\n *\n * A slice drag sweeps its trailing edge around the pie like the flat pie\n * (`resolvePieSliceShareValue`): the pointer is unprojected onto the pie's top\n * plane and its angle there sets the slice's share.\n *\n * @module chart-3d-pie-scene\n */\nimport type { PptxChartData, PptxElement } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { ThreeViewContext, ThreeViewScene } from '../three-view/types';\nimport { renderChart3DChromeOverlaySvg } from './chart-3d-chrome-overlay';\nimport { attachChart3DMarkInteraction } from './chart-3d-mark-interaction';\nimport { buildPerspCamera, perspScreenToPlaneY } from './chart-3d-persp-view';\nimport { computePieChartLayout, pieRimPoint } from './chart-3d-pie-layout';\nimport type { PieChartLayout } from './chart-3d-pie-layout';\nimport { buildPieMarks } from './chart-3d-pie-marks';\nimport { resolvePieSliceShareValue } from './chart-interaction-pie';\nimport type { ChartViewModel } from './chart-view-model-types';\n\n/** Selection marker colour (the 2D selected-mark accent). */\nconst SELECTED_COLOR = 0x2563eb;\n\nexport interface PieSceneInput {\n\telement: PptxElement;\n\tvm: ChartViewModel;\n\tlayout: PieChartLayout;\n\tchartData: PptxChartData;\n\tcategoryLabels: ReadonlyArray<string>;\n}\n\n/** The layout's slices with one value replaced (a drag preview). */\nfunction slicesWith(input: PieSceneInput, pointIndex: number, value: number) {\n\tconst series = input.chartData.series.map((s, i) =>\n\t\ti === 0 ? { ...s, values: s.values.map((v, j) => (j === pointIndex ? value : v)) } : s,\n\t);\n\tconst element = {\n\t\t...input.element,\n\t\tchartData: { ...input.chartData, series },\n\t} as PptxElement;\n\treturn computePieChartLayout(element, input.vm)?.slices ?? input.layout.slices;\n}\n\nexport function mountPieChartView(input: PieSceneInput, ctx: ThreeViewContext): ThreeViewScene {\n\tconst three = ctx.three;\n\tconst { vm, layout, chartData } = input;\n\tconst camera = buildPerspCamera(three, layout.view, vm.svgWidth, vm.svgHeight);\n\tconst scene = new three.Scene();\n\tconst marks = buildPieMarks(three, layout);\n\tscene.add(marks.group);\n\n\tconst markerGeometry = new three.OctahedronGeometry(0.03);\n\tconst markerMaterial = new three.MeshBasicMaterial({ color: SELECTED_COLOR });\n\tconst marker = new three.Mesh(markerGeometry, markerMaterial);\n\tmarker.visible = false;\n\tmarks.group.add(marker);\n\n\tconst overlay = renderChart3DChromeOverlaySvg(ctx.document, vm, {\n\t\tlabels: [],\n\t\treverseLegend: false,\n\t});\n\tctx.overlay.appendChild(overlay);\n\n\tconst values = (): number[] => chartData.series[0]?.values.slice() ?? [];\n\tconst interaction = attachChart3DMarkInteraction({\n\t\tctx,\n\t\tcamera,\n\t\tscene,\n\t\tsvgHeight: vm.svgHeight,\n\t\tchartData,\n\t\tcategoryLabels: input.categoryLabels,\n\t\tseriesNames: chartData.series.map((s) => s.name),\n\t\tadapter: {\n\t\t\ttargets: marks.meshes,\n\t\t\tpointAt(hit) {\n\t\t\t\tconst pointIndex = (hit.object.userData as { pointIndex?: number }).pointIndex;\n\t\t\t\treturn pointIndex === undefined ? null : { seriesIndex: 0, pointIndex };\n\t\t\t},\n\t\t\tvalueOf(point) {\n\t\t\t\tconst v = chartData.series[0]?.values[point.pointIndex];\n\t\t\t\treturn v !== undefined && Number.isFinite(v) ? v : undefined;\n\t\t\t},\n\t\t\tbeginDrag(point) {\n\t\t\t\tconst slice = layout.slices[point.pointIndex];\n\t\t\t\tif (!slice) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst start = values();\n\t\t\t\treturn {\n\t\t\t\t\tpreview(_dx, _dy, at) {\n\t\t\t\t\t\tconst hit = perspScreenToPlaneY(layout.view, at.x, at.y, layout.center.y);\n\t\t\t\t\t\tif (!hit) {\n\t\t\t\t\t\t\treturn start[point.pointIndex];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst angle = Math.atan2(\n\t\t\t\t\t\t\thit.x - layout.center.x - slice.offset.x,\n\t\t\t\t\t\t\thit.z - layout.center.z - slice.offset.z,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst value = resolvePieSliceShareValue(\n\t\t\t\t\t\t\tangle,\n\t\t\t\t\t\t\tslice.startAngle,\n\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\tpoint.pointIndex,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmarks.setSlices(slicesWith(input, point.pointIndex, value));\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\thighlight(point) {\n\t\t\t\tconst slice = point ? layout.slices[point.pointIndex] : undefined;\n\t\t\t\tmarker.visible = slice !== undefined;\n\t\t\t\tif (slice) {\n\t\t\t\t\tconst mid = (slice.startAngle + slice.endAngle) / 2;\n\t\t\t\t\tconst p = pieRimPoint(\n\t\t\t\t\t\tlayout.center.x + slice.offset.x,\n\t\t\t\t\t\tlayout.center.z + slice.offset.z,\n\t\t\t\t\t\tlayout.radius * 0.6,\n\t\t\t\t\t\tmid,\n\t\t\t\t\t);\n\t\t\t\t\tmarker.position.set(p.x, layout.center.y, p.z);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdispose() {\n\t\t\t\tmarkerGeometry.dispose();\n\t\t\t\tmarkerMaterial.dispose();\n\t\t\t},\n\t\t},\n\t});\n\n\tlet disposed = false;\n\treturn {\n\t\trender(renderer: THREE.WebGLRenderer) {\n\t\t\trenderer.render(scene, camera);\n\t\t},\n\t\tresize() {\n\t\t\t// The projection is fixed in authored chart px, like the overlay.\n\t\t},\n\t\tisAnimating: () => false,\n\t\tsetInteractive: (on) => interaction.setInteractive(on),\n\t\tsetSelectedPart: (part) => interaction.setSelectedPart(part),\n\t\tdispose() {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdisposed = true;\n\t\t\tinteraction.dispose();\n\t\t\tmarks.dispose();\n\t\t\toverlay.remove();\n\t\t},\n\t};\n}\n","import type { ChartPptxElement } from 'pptx-viewer-core';\n/**\n * `<pptx-three-view>` scene module for 3D charts.\n *\n * Mounts a chart spec by its geometry: a 3-D Pie on its fitted camera\n * (`chart-3d-pie-scene.ts`), the line / area / surface box and a bar3D chart\n * without right-angle axes on the perspective box (`chart-3d-persp-scene.ts`),\n * and the right-angle-axes `bar3D` (`c:view3D/@rAngAx=1`, its own default;\n * verified against `gt/chart-01.webp`) here. A chart with nothing to draw has\n * no spec at all, so its 2D chart stays.\n *\n * The oblique projection is built as a plain `OrthographicCamera` (1 world\n * unit = 1 authored chart px, matching `chart-3d-chrome-overlay.ts`'s\n * overlay `<svg>` viewBox exactly) with a SHEAR term hand-inserted into its\n * projection matrix, rather than tilting the camera or shearing the scene\n * graph: only the camera carries the projection, which keeps every box's world\n * position/size meaningful on its own instead of encoding the illusion into\n * mesh transforms.\n *\n * @module chart-3d-view-scene\n */\nimport type * as THREE from 'three';\n\nimport type { ThreeViewContext, ThreeViewScene } from '../three-view/types';\nimport { buildChart3DBarMeshes } from './chart-3d-bar-mesh';\nimport { renderChart3DChromeOverlaySvg } from './chart-3d-chrome-overlay';\nimport { attachObliqueBarInteraction } from './chart-3d-oblique-interaction';\nimport { mountPerspChartView } from './chart-3d-persp-scene';\nimport { widenPieViewModel } from './chart-3d-pie-layout';\nimport { mountPieChartView } from './chart-3d-pie-scene';\nimport type { Chart3DSpec } from './chart-3d-spec';\n\n/**\n * The oblique chart camera. Camera distance is chosen so `NEAR`/`FAR` stay\n * tight around the scene's own (tiny) depth extent. Exported for tests.\n */\nexport function buildObliqueCamera(\n\tthree: ThreeModule,\n\tsvgWidth: number,\n\tsvgHeight: number,\n\tshearX: number,\n\tshearY: number,\n): THREE.OrthographicCamera {\n\tconst halfW = svgWidth / 2;\n\tconst halfH = svgHeight / 2;\n\tconst distance = halfW + halfH + 500;\n\tconst camera = new three.OrthographicCamera(-halfW, halfW, halfH, -halfH, 1, distance + 2000);\n\tcamera.position.set(0, 0, distance);\n\tcamera.lookAt(0, 0, 0);\n\tcamera.updateProjectionMatrix();\n\n\t// Hand-insert the oblique shear: clip_x += kX * ndcScaleX * world_z,\n\t// clip_y += kY * ndcScaleY * world_z (see the module doc + the chart\n\t// track's progress log for the sign derivation between the flat 2D\n\t// fallback's SVG-Y-down depth vector and this scene's world-Y-up frame:\n\t// X needs no flip (kX = -shearX), Y does (kY = +shearY)).\n\tconst m = camera.projectionMatrix.elements;\n\tconst ndcScaleX = m[0];\n\tconst ndcScaleY = m[5];\n\tm[8] = -shearX * ndcScaleX;\n\tm[9] = shearY * ndcScaleY;\n\t// The shear multiplies VIEW-space z, which is `-distance` at the chart's\n\t// front plane (world z = 0). Offset it so the front plane is unsheared\n\t// and lands exactly on the 2D layout; only depth behind it shifts.\n\tm[12] += m[8] * distance;\n\tm[13] += m[9] * distance;\n\tcamera.projectionMatrixInverse.copy(camera.projectionMatrix).invert();\n\treturn camera;\n}\n\ntype ThreeModule = typeof THREE;\n\nexport async function mountChart3DView(\n\tspec: Chart3DSpec,\n\tctx: ThreeViewContext,\n): Promise<ThreeViewScene> {\n\tif (spec.geometry?.kind === 'pie') {\n\t\tconst chartData = (spec.element as ChartPptxElement).chartData;\n\t\tif (!chartData) {\n\t\t\tthrow new Error('3D chart spec without chart data');\n\t\t}\n\t\treturn mountPieChartView(\n\t\t\t{\n\t\t\t\telement: spec.element,\n\t\t\t\tvm: widenPieViewModel(spec.vm, spec.element),\n\t\t\t\tlayout: spec.geometry.layout,\n\t\t\t\tchartData,\n\t\t\t\tcategoryLabels: spec.categoryLabels,\n\t\t\t},\n\t\t\tctx,\n\t\t);\n\t}\n\tif (spec.geometry?.kind === 'perspective') {\n\t\tconst chartData = (spec.element as ChartPptxElement).chartData;\n\t\tif (!chartData) {\n\t\t\tthrow new Error('3D chart spec without chart data');\n\t\t}\n\t\treturn mountPerspChartView(\n\t\t\t{ vm: spec.vm, layout: spec.geometry.layout, chartData, categoryLabels: spec.categoryLabels },\n\t\t\tctx,\n\t\t);\n\t}\n\tif (spec.projection.mode !== 'oblique' || spec.geometry?.kind !== 'oblique') {\n\t\tthrow new Error(`no 3D chart scene for chartType=${spec.chartType}`);\n\t}\n\tconst three = ctx.three;\n\tconst { vm, geometry } = spec;\n\tconst chartData = (spec.element as ChartPptxElement).chartData;\n\tif (!chartData) {\n\t\tthrow new Error('3D chart spec without chart data');\n\t}\n\n\tconst camera = buildObliqueCamera(\n\t\tthree,\n\t\tvm.svgWidth,\n\t\tvm.svgHeight,\n\t\tspec.projection.shearX,\n\t\tspec.projection.shearY,\n\t);\n\n\tconst scene = new three.Scene();\n\tconst { layout } = geometry;\n\tconst bars = buildChart3DBarMeshes(three, layout, vm.svgWidth, vm.svgHeight);\n\tscene.add(bars.group);\n\n\tconst overlay = renderChart3DChromeOverlaySvg(ctx.document, vm, {\n\t\tlabels: layout.labels,\n\t\t// PowerPoint lists a clustered horizontal bar chart's legend bottom-up,\n\t\t// matching the order the series stack up the category axis.\n\t\treverseLegend: layout.horizontal && layout.grouping === 'clustered',\n\t});\n\tctx.overlay.appendChild(overlay);\n\n\tconst interaction = attachObliqueBarInteraction({\n\t\tctx,\n\t\tcamera,\n\t\tmeshes: bars.meshes,\n\t\tlayout,\n\t\tsvgWidth: vm.svgWidth,\n\t\tsvgHeight: vm.svgHeight,\n\t\tchartData,\n\t\tcategoryLabels: spec.categoryLabels,\n\t\tseriesNames: chartData.series.map((series) => series.name),\n\t\tscene,\n\t});\n\n\tlet disposed = false;\n\treturn {\n\t\trender(renderer: THREE.WebGLRenderer) {\n\t\t\trenderer.render(scene, camera);\n\t\t},\n\t\tresize() {\n\t\t\t// The orthographic frustum is fixed in authored chart-px units\n\t\t\t// (svgWidth/svgHeight), independent of the element's on-screen CSS\n\t\t\t// size, so nothing needs recomputing here.\n\t\t},\n\t\tisAnimating: () => false,\n\t\tsetInteractive: (on) => interaction.setInteractive(on),\n\t\tsetSelectedPart: (part) => interaction.setSelectedPart(part),\n\t\tdispose() {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdisposed = true;\n\t\t\tinteraction.dispose();\n\t\t\tbars.dispose();\n\t\t\toverlay.remove();\n\t\t},\n\t};\n}\n"],"names":["GRIDLINE_COLOR","SELECTED_COLOR"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pptx-angular-viewer-chart-3d-view-scene-C2kA7jqu.mjs","sources":["../../src/internal/shared-src/render/chart-3d-shading.ts","../../src/internal/shared-src/render/chart-3d-oblique-shape-mesh.ts","../../src/internal/shared-src/render/chart-3d-bar-mesh.ts","../../src/internal/shared-src/render/chart-3d-chrome-overlay.ts","../../src/internal/shared-src/render/chart-3d-interaction.ts","../../src/internal/shared-src/render/chart-3d-mark-interaction.ts","../../src/internal/shared-src/render/chart-3d-oblique-drag.ts","../../src/internal/shared-src/render/chart-3d-oblique-interaction.ts","../../src/internal/shared-src/render/chart-3d-persp-bars.ts","../../src/internal/shared-src/render/chart-3d-persp-marks.ts","../../src/internal/shared-src/render/chart-3d-persp-shape-mesh.ts","../../src/internal/shared-src/render/chart-3d-persp-mesh.ts","../../src/internal/shared-src/render/chart-3d-persp-surface.ts","../../src/internal/shared-src/render/chart-3d-persp-surface-mesh.ts","../../src/internal/shared-src/render/chart-3d-persp-mark-set.ts","../../src/internal/shared-src/render/chart-3d-persp-scene.ts","../../src/internal/shared-src/render/chart-3d-pie-marks.ts","../../src/internal/shared-src/render/chart-3d-pie-scene.ts","../../src/internal/shared-src/render/chart-3d-view-scene.ts"],"sourcesContent":["/**\n * chart-3d-shading.ts: PowerPoint's flat chart-space shading for a 3D chart's\n * box faces, as one colour multiplier per named face.\n *\n * PowerPoint's 3D charts (bar3D, pie3D, line3D ribbons, area3D slabs, surface\n * bands) are flat-shaded in \"chart space\": every face of a given orientation\n * gets the SAME multiplier applied to the mark's base colour, regardless of\n * the chart's `c:view3D` tilt. Measured directly off the pixels of\n * `gt/chart-01.webp` (a 3-D Clustered Column, series 1 = theme accent1\n * `#156082`): the front (camera-facing) rect samples the base colour exactly\n * (`front = base`), the top face samples ~0.75x, and the visible side face\n * ~0.64x. `back`/`left` (mirrors of `right`) and `bottom` (rarely visible)\n * are not independently measured; `back`/`left` reuse the measured side\n * multiplier and `bottom` is a reasonable approximation between side and a\n * fully unlit face.\n *\n * @module chart-3d-shading\n */\nimport { shade } from './chart-palette';\n\n/** A box mesh's six face orientations, in the chart's own (unrotated) local frame. */\nexport type Chart3DFace = 'front' | 'back' | 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Darken amount (0-1, `chart-palette.ts#shade`'s `amount`) per face,\n * derived from the measured multipliers: `amount = 1 - multiplier`.\n */\nconst FACE_SHADE_AMOUNT: Record<Chart3DFace, number> = {\n\tfront: 0,\n\ttop: 0.25,\n\tright: 0.36,\n\tleft: 0.36,\n\tback: 0.36,\n\tbottom: 0.5,\n};\n\n/** Apply PowerPoint's measured per-face flat shading to a mark's base colour. */\nexport function shadeChart3DFace(baseColor: string, face: Chart3DFace): string {\n\tconst amount = FACE_SHADE_AMOUNT[face];\n\treturn amount === 0 ? baseColor : shade(baseColor, amount);\n}\n\n/**\n * The six face colours for a box mesh, in the order three.js `BoxGeometry`\n * expects its `material` array (`[+x, -x, +y, -y, +z, -z]`): right, left,\n * top, bottom, front, back. `front`/`back` name whichever world axis the\n * scene treats as the camera-facing depth axis; the caller picks that\n * mapping (see `chart-3d-view-scene.ts`).\n */\nexport function buildChart3DBoxFaceColors(\n\tbaseColor: string,\n): readonly [string, string, string, string, string, string] {\n\treturn [\n\t\tshadeChart3DFace(baseColor, 'right'),\n\t\tshadeChart3DFace(baseColor, 'left'),\n\t\tshadeChart3DFace(baseColor, 'top'),\n\t\tshadeChart3DFace(baseColor, 'bottom'),\n\t\tshadeChart3DFace(baseColor, 'front'),\n\t\tshadeChart3DFace(baseColor, 'back'),\n\t];\n}\n\ntype ShadeFamily = 'box' | 'cylinder' | 'cone' | 'pyramid';\n\n/**\n * Per-shape shade coefficients `[x, y, z]` for {@link chart3DNormalShade}.\n * `box` reproduces the face multipliers above (right 0.64, top 0.75, front\n * 1.0); the others are fitted to `gt/chart-07..09.webp` (accent1 columns):\n * a cylinder runs 1.07x at its centre line to ~0.64x at the silhouette, a\n * cone 1.16x to ~0.7x, a pyramid's front face 1.03x and its side 0.68x. Tops\n * (cylinder cap, box top) sample 0.75x throughout.\n */\nconst NORMAL_SHADE: Record<ShadeFamily, readonly [number, number, number]> = {\n\tbox: [0.64, 0.75, 1],\n\tcylinder: [0.62, 0.75, 1.07],\n\tcone: [0.7, 0.75, 1.16],\n\tpyramid: [0.68, 0.75, 1.03],\n};\n\n/** Multiplier for a downward-facing surface (a bar's underside), rarely visible. */\nconst UNDERSIDE_SHADE = 0.5;\n\nfunction shadeFamily(shape: string | undefined): ShadeFamily {\n\tswitch (shape) {\n\t\tcase 'cylinder':\n\t\t\treturn 'cylinder';\n\t\tcase 'cone':\n\t\tcase 'coneToMax':\n\t\t\treturn 'cone';\n\t\tcase 'pyramid':\n\t\tcase 'pyramidToMax':\n\t\t\treturn 'pyramid';\n\t\tdefault:\n\t\t\treturn 'box';\n\t}\n}\n\n/**\n * PowerPoint's flat chart-space shade for a surface of a `c:shape` bar with\n * unit world normal `(nx, ny, nz)` (x right, y up, z toward the viewer), as\n * a multiplier of the base colour: the quadratic form\n * `cx nx^2 + cy ny^2 + cz nz^2`, which for a box's axis-aligned faces is\n * exactly the per-face table above.\n */\nexport function chart3DNormalShade(\n\tshape: string | undefined,\n\tnx: number,\n\tny: number,\n\tnz: number,\n): number {\n\tconst [cx, cy, cz] = NORMAL_SHADE[shadeFamily(shape)];\n\treturn cx * nx * nx + (ny >= 0 ? cy : UNDERSIDE_SHADE) * ny * ny + cz * nz * nz;\n}\n","/**\n * Round and pointed bars (`c:shape` cylinder / cone / pyramid and the\n * `coneToMax` / `pyramidToMax` frustums) for the right-angle-axes 3D bar chart\n * (`chart-3d-oblique-layout.ts`).\n *\n * Measured on `gt/chart-07..09.webp`: every shape sits in the SAME footprint\n * as a box bar (a round shape is inscribed in the `w x d` base, a pyramid\n * fills it), so the layout is unchanged and only the mesh differs.\n *\n * Geometry is unit-sized (-0.5..0.5 on every axis, like `BoxGeometry(1,1,1)`)\n * so the caller places it with `position` + `scale` exactly as it does a box.\n * Shading is baked into vertex colours from each vertex's WORLD normal (the\n * unit normal corrected for the mesh's non-uniform scale), with\n * `chart-3d-shading.ts`'s per-shape quadratic form, so the drag preview\n * re-shades a bar whose proportions change. A round surface is shaded\n * relative to the oblique VIEW direction (yawed `atan(sin rotY)` off the\n * front normal), which is why PowerPoint's highlight sits at the middle of\n * the silhouette rather than left of it; flat facets keep the box table.\n *\n * @module chart-3d-oblique-shape-mesh\n */\nimport type * as THREE from 'three';\n\nimport type { ObliqueBar } from './chart-3d-oblique-layout';\nimport { chart3DNormalShade } from './chart-3d-shading';\n\ntype ThreeModule = typeof THREE;\n\n/** Radial segments of a round shape: smooth at any chart size. */\nconst ROUND_SEGMENTS = 48;\n\n/** Whether a bar is drawn with this module rather than as a box. */\nexport function isShapedObliqueBar(bar: Pick<ObliqueBar, 'shape'>): boolean {\n\treturn bar.shape !== 'box';\n}\n\n/** Cache key of a bar's unit geometry (shape, taper and orientation). */\nexport function obliqueShapeKey(bar: ObliqueBar, horizontal: boolean): string {\n\treturn `${bar.shape}:${bar.taper.bottom.toFixed(4)}:${bar.taper.top.toFixed(4)}:${horizontal ? 'h' : 'v'}`;\n}\n\n/**\n * The unit geometry of a shaped bar, its axis along +Y (or +X for a\n * horizontal chart, the base at the value-axis baseline end).\n */\nexport function buildObliqueShapeGeometry(\n\tthree: ThreeModule,\n\tbar: ObliqueBar,\n\thorizontal: boolean,\n): THREE.BufferGeometry {\n\tconst pointed = bar.shape === 'pyramid' || bar.shape === 'pyramidToMax';\n\tlet geometry: THREE.BufferGeometry;\n\tif (pointed) {\n\t\t// A 4-segment cylinder is a diamond of \"radius\" r; turned 45 degrees and\n\t\t// widened by sqrt(2) its base is the full unit square.\n\t\tconst r = Math.SQRT1_2;\n\t\tconst faceted = new three.CylinderGeometry(\n\t\t\tr * bar.taper.top,\n\t\t\tr * bar.taper.bottom,\n\t\t\t1,\n\t\t\t4,\n\t\t).rotateY(Math.PI / 4);\n\t\tgeometry = faceted.toNonIndexed();\n\t\tfaceted.dispose();\n\t\tgeometry.computeVertexNormals();\n\t} else {\n\t\tgeometry = new three.CylinderGeometry(\n\t\t\t0.5 * bar.taper.top,\n\t\t\t0.5 * bar.taper.bottom,\n\t\t\t1,\n\t\t\tROUND_SEGMENTS,\n\t\t);\n\t}\n\tif (horizontal) {\n\t\tgeometry.rotateZ(-Math.PI / 2);\n\t}\n\treturn geometry;\n}\n\n/**\n * (Re)write a shaped bar's vertex colours for its current world `scale`, so\n * each vertex gets the shade of its world-space normal.\n */\nexport function shadeObliqueShapeGeometry(\n\tthree: ThreeModule,\n\tgeometry: THREE.BufferGeometry,\n\tbar: Pick<ObliqueBar, 'shape' | 'color'>,\n\tscale: { x: number; y: number; z: number },\n\tviewYaw: number,\n): void {\n\tconst round = bar.shape !== 'pyramid' && bar.shape !== 'pyramidToMax';\n\tconst cos = Math.cos(round ? viewYaw : 0);\n\tconst sin = Math.sin(round ? viewYaw : 0);\n\tconst normals = geometry.getAttribute('normal');\n\tconst count = normals.count;\n\tlet colors = geometry.getAttribute('color') as THREE.BufferAttribute | undefined;\n\tif (!colors || colors.count !== count) {\n\t\tcolors = new three.Float32BufferAttribute(new Float32Array(count * 3), 3);\n\t\tgeometry.setAttribute('color', colors);\n\t}\n\tconst base = new three.Color(bar.color);\n\tconst srgb = base.getRGB(new three.Color(), three.SRGBColorSpace);\n\tconst out = new three.Color();\n\tfor (let i = 0; i < count; i++) {\n\t\t// Normals transform by the inverse scale.\n\t\tlet nx = normals.getX(i) / Math.max(scale.x, 1e-6);\n\t\tlet ny = normals.getY(i) / Math.max(scale.y, 1e-6);\n\t\tlet nz = normals.getZ(i) / Math.max(scale.z, 1e-6);\n\t\tconst len = Math.hypot(nx, ny, nz) || 1;\n\t\tnx /= len;\n\t\tny /= len;\n\t\tnz /= len;\n\t\tconst f = chart3DNormalShade(bar.shape, nx * cos - nz * sin, ny, nx * sin + nz * cos);\n\t\tout.setRGB(\n\t\t\tMath.min(1, srgb.r * f),\n\t\t\tMath.min(1, srgb.g * f),\n\t\t\tMath.min(1, srgb.b * f),\n\t\t\tthree.SRGBColorSpace,\n\t\t);\n\t\tcolors.setXYZ(i, out.r, out.g, out.b);\n\t}\n\tcolors.needsUpdate = true;\n}\n","/**\n * WebGL geometry for a right-angle-axes `bar3D` chart\n * (`chart-3d-oblique-layout.ts`): one box mesh per bar and the wall/floor\n * gridlines, in the oblique scene's frame (`chart-3d-view-scene.ts`).\n *\n * Scene frame: X/Y in chart px centred on the chart (Y up), Z = minus the\n * layout's world depth, so the scene camera's shear moves only what recedes.\n * A layout point `(x, y, z)` sits at scene\n * `(origin.x + x - W/2, H/2 - origin.y + y, -z)`, which the camera projects to\n * exactly the chart px `obliqueToScreen` returns.\n *\n * Box faces are flat `MeshBasicMaterial`s (PowerPoint shades box faces flat\n * in chart space, not by lighting) from `chart-3d-shading.ts`'s measured\n * multipliers. Gridlines are drawn in the scene rather than the SVG overlay\n * because bars must hide the back-wall lines behind them.\n *\n * @module chart-3d-bar-mesh\n */\nimport type * as THREE from 'three';\n\nimport type { ObliqueBar, ObliqueChartLayout } from './chart-3d-oblique-layout';\nimport {\n\tbuildObliqueShapeGeometry,\n\tisShapedObliqueBar,\n\tobliqueShapeKey,\n\tshadeObliqueShapeGeometry,\n} from './chart-3d-oblique-shape-mesh';\nimport { buildChart3DBoxFaceColors } from './chart-3d-shading';\n\ntype ThreeModule = typeof THREE;\n\n/** PowerPoint's default major gridline colour (tx1 at 15% tint, `#D9D9D9`). */\nconst GRIDLINE_COLOR = 0xd9d9d9;\n\nexport interface Chart3DBarMeshResult {\n\tgroup: THREE.Group;\n\t/** One mesh per bar, same order as `layout.bars`; carries `{ seriesIndex, categoryIndex }` in `userData`. */\n\tmeshes: THREE.Mesh[];\n\tdispose: () => void;\n}\n\n/** Scene position of a layout world point. */\nexport function obliqueToScene(\n\tlayout: ObliqueChartLayout,\n\tsvgWidth: number,\n\tsvgHeight: number,\n\tp: readonly [number, number, number],\n): [number, number, number] {\n\treturn [layout.origin.x + p[0] - svgWidth / 2, svgHeight / 2 - layout.origin.y + p[1], -p[2]];\n}\n\n/**\n * Place (and for a `c:shape` bar, reshape and reshade) a bar's mesh at a\n * bar's current world box. Used at build time and for the drag preview.\n */\nexport function placeObliqueBarMesh(\n\tthree: ThreeModule,\n\tmesh: THREE.Mesh,\n\tlayout: ObliqueChartLayout,\n\tsvgWidth: number,\n\tsvgHeight: number,\n\tbar: ObliqueBar,\n): void {\n\tmesh.position.set(\n\t\t...obliqueToScene(layout, svgWidth, svgHeight, [\n\t\t\tbar.x + bar.w / 2,\n\t\t\tbar.y + bar.h / 2,\n\t\t\tbar.z + bar.d / 2,\n\t\t]),\n\t);\n\tmesh.scale.set(Math.max(bar.w, 0.001), Math.max(bar.h, 0.001), bar.d);\n\tif (!isShapedObliqueBar(bar)) {\n\t\treturn;\n\t}\n\tconst key = obliqueShapeKey(bar, layout.horizontal);\n\tconst data = mesh.userData as { shapeKey?: string };\n\tif (data.shapeKey !== key) {\n\t\tconst previous = mesh.geometry;\n\t\tmesh.geometry = buildObliqueShapeGeometry(three, bar, layout.horizontal);\n\t\tprevious.dispose();\n\t\tdata.shapeKey = key;\n\t}\n\tshadeObliqueShapeGeometry(three, mesh.geometry, bar, mesh.scale, Math.atan(layout.shear.x));\n}\n\n/** Build the bar boxes and gridlines of an oblique layout into a new group. */\nexport function buildChart3DBarMeshes(\n\tthree: ThreeModule,\n\tlayout: ObliqueChartLayout,\n\tsvgWidth: number,\n\tsvgHeight: number,\n): Chart3DBarMeshResult {\n\tconst group = new three.Group();\n\tconst meshes: THREE.Mesh[] = [];\n\tconst lineGeometries: THREE.BufferGeometry[] = [];\n\tconst materials: THREE.Material[] = [];\n\n\tconst points: number[] = [];\n\tfor (const line of layout.gridlines) {\n\t\tpoints.push(\n\t\t\t...obliqueToScene(layout, svgWidth, svgHeight, line.from),\n\t\t\t...obliqueToScene(layout, svgWidth, svgHeight, line.to),\n\t\t);\n\t}\n\tif (points.length > 0) {\n\t\tconst lineGeometry = new three.BufferGeometry();\n\t\tlineGeometry.setAttribute('position', new three.Float32BufferAttribute(points, 3));\n\t\tconst lineMaterial = new three.LineBasicMaterial({ color: GRIDLINE_COLOR });\n\t\tlineGeometries.push(lineGeometry);\n\t\tmaterials.push(lineMaterial);\n\t\tgroup.add(new three.LineSegments(lineGeometry, lineMaterial));\n\t}\n\n\tfor (const bar of layout.bars) {\n\t\tlet mesh: THREE.Mesh;\n\t\tif (isShapedObliqueBar(bar)) {\n\t\t\tconst material = new three.MeshBasicMaterial({ vertexColors: true });\n\t\t\tmaterials.push(material);\n\t\t\tmesh = new three.Mesh(new three.BufferGeometry(), material);\n\t\t} else {\n\t\t\tconst faceMaterials = buildChart3DBoxFaceColors(bar.color).map(\n\t\t\t\t(color) => new three.MeshBasicMaterial({ color }),\n\t\t\t);\n\t\t\tmaterials.push(...faceMaterials);\n\t\t\tmesh = new three.Mesh(new three.BoxGeometry(1, 1, 1), faceMaterials);\n\t\t}\n\t\tmesh.userData = { seriesIndex: bar.seriesIndex, categoryIndex: bar.categoryIndex };\n\t\tplaceObliqueBarMesh(three, mesh, layout, svgWidth, svgHeight, bar);\n\t\tgroup.add(mesh);\n\t\tmeshes.push(mesh);\n\t}\n\n\treturn {\n\t\tgroup,\n\t\tmeshes,\n\t\tdispose: () => {\n\t\t\t// A drag preview may have swapped a shaped bar's geometry, so free\n\t\t\t// whatever each mesh holds now.\n\t\t\tfor (const geometry of [...lineGeometries, ...meshes.map((m) => m.geometry)]) {\n\t\t\t\tgeometry.dispose();\n\t\t\t}\n\t\t\tfor (const material of materials) {\n\t\t\t\tmaterial.dispose();\n\t\t\t}\n\t\t},\n\t};\n}\n","/**\n * chart-3d-chrome-overlay.ts: the SVG \"chrome\" (chart-area fill/border,\n * title, legend, value-axis gridlines/ticks, category labels) a 3D chart\n * scene draws OVER its WebGL canvas via `ctx.overlay`.\n *\n * PowerPoint's own 3D charts always show this chrome exactly like the 2D\n * chart does (see the parity brief's \"hybrid rendering\" requirement); for a\n * chart in the oblique (`rAngAx=1`) projection family this chrome is\n * ALREADY pixel-correct in the flat 2D `ChartViewModel` (verified against\n * `gt/chart-01.webp`: axes/gridlines/title/legend sit exactly where a plain\n * 2D chart would put them, perfectly undistorted), so this module reuses the\n * SAME `chart-view-model-dom.ts` piece-renderers the 2D/vanilla projector\n * uses, just WITHOUT `vm.primitives`/`vm.dataLabels` (the flat oblique\n * bars/extrusion polygons, replaced by real WebGL geometry).\n *\n * @module chart-3d-chrome-overlay\n */\nimport {\n\tappendChartLegendSvg,\n\trenderChartLineSvg,\n\trenderChartTextSvg,\n} from './chart-view-model-dom';\nimport { createSvgEl } from './chart-view-model-dom-helpers';\nimport type { ChartViewModel, LegendEntry } from './chart-view-model-types';\n\n/** A 3D scene's own axis labels, in chart px. */\nexport interface Chart3DBoxLabel {\n\ttext: string;\n\tx: number;\n\ty: number;\n\tanchor: 'start' | 'middle' | 'end';\n\tfontSize: number;\n\t/** Defaults to `central` (text centred on `y`). */\n\tbaseline?: 'central' | 'hanging';\n}\n\n/**\n * Chrome for a scene that draws its own plot box (the oblique and perspective\n * layouts): its labels replace the flat axes, and the title and legend move\n * to where PowerPoint puts them on a 3D chart.\n */\nexport interface Chart3DBoxChrome {\n\tlabels: ReadonlyArray<Chart3DBoxLabel>;\n\t/** List the legend bottom-up (a clustered horizontal bar chart does). */\n\treverseLegend: boolean;\n\t/** Legend entries replacing the flat chart's (a surface lists its value bands). */\n\tlegend?: LegendEntry[];\n}\n\n/**\n * Render a `ChartViewModel`'s chrome (everything except data marks) to an\n * `<svg>` sized to `vm.svgWidth` x `vm.svgHeight`, matching the WebGL\n * scene's own world-unit convention (1 world unit = 1 authored chart px) so\n * an element positioned from the same view-model's rects lines up exactly.\n */\nexport function renderChart3DChromeOverlaySvg(\n\tdoc: Document,\n\tsource: ChartViewModel,\n\tbox?: Chart3DBoxChrome,\n): SVGSVGElement {\n\tconst vm = box ? withBoxChromePositions(source) : source;\n\tconst svg = createSvgEl(doc, 'svg', {\n\t\tclass: 'pptxv-chart-3d-chrome',\n\t\tviewBox: `0 0 ${vm.svgWidth} ${vm.svgHeight}`,\n\t\tpreserveAspectRatio: 'none',\n\t});\n\tsvg.style.setProperty('width', '100%');\n\tsvg.style.setProperty('height', '100%');\n\tsvg.style.setProperty('display', 'block');\n\tsvg.style.setProperty('position', 'absolute');\n\tsvg.style.setProperty('inset', '0');\n\t// The WebGL canvas paints the marks; this overlay only adds chrome on top\n\t// of them, so pointer events must fall through to the canvas underneath.\n\tsvg.style.setProperty('pointer-events', 'none');\n\n\tif (vm.areaFill) {\n\t\tsvg.appendChild(\n\t\t\tcreateSvgEl(doc, 'rect', {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0,\n\t\t\t\twidth: vm.svgWidth,\n\t\t\t\theight: vm.svgHeight,\n\t\t\t\trx: vm.areaRadius,\n\t\t\t\tfill: vm.areaFill,\n\t\t\t}),\n\t\t);\n\t}\n\n\tif (vm.title) {\n\t\tconst title = createSvgEl(doc, 'text', {\n\t\t\tx: vm.titleX,\n\t\t\ty: vm.titleY,\n\t\t\t'text-anchor': 'middle',\n\t\t\t'font-size': vm.titleStyle?.fontSize ?? 12,\n\t\t\t'font-weight': vm.titleStyle?.fontWeight ?? 600,\n\t\t\t'font-family': vm.titleStyle?.fontFamily,\n\t\t\tfill: vm.titleStyle?.fill ?? '#1e293b',\n\t\t\t'data-chart-part': 'title',\n\t\t});\n\t\tif (vm.titleRunSpans && vm.titleRunSpans.length > 0) {\n\t\t\tfor (const run of vm.titleRunSpans) {\n\t\t\t\tconst tspan = createSvgEl(doc, 'tspan', {\n\t\t\t\t\t'font-size': run.fontSize,\n\t\t\t\t\t'font-weight': run.fontWeight,\n\t\t\t\t\t'font-style': run.fontStyle,\n\t\t\t\t\t'font-family': run.fontFamily,\n\t\t\t\t\tfill: run.fill,\n\t\t\t\t});\n\t\t\t\ttspan.textContent = run.text;\n\t\t\t\ttitle.appendChild(tspan);\n\t\t\t}\n\t\t} else {\n\t\t\ttitle.textContent = vm.title;\n\t\t}\n\t\tsvg.appendChild(title);\n\t}\n\n\tif (box) {\n\t\t// The box's gridlines are drawn in the scene (marks hide the back\n\t\t// wall); only its axis labels go here.\n\t\tappendBoxLabels(doc, svg, vm, box.labels);\n\t\t// A 3D chart keys every series with a plain swatch, lines included.\n\t\tconst legend = box.legend ?? vm.legend.map((item) => ({ ...item, lineSwatch: undefined }));\n\t\tconst legendVm = { ...vm, legend: box.reverseLegend ? legend.reverse() : legend };\n\t\tappendChartLegendSvg(doc, svg, legendVm);\n\t\treturn svg;\n\t}\n\n\tfor (const gl of vm.gridlines) {\n\t\tsvg.appendChild(renderChartLineSvg(doc, gl));\n\t}\n\tfor (const gl of vm.secondaryGridlines ?? []) {\n\t\tsvg.appendChild(renderChartLineSvg(doc, gl));\n\t}\n\tfor (const lbl of vm.axisLabels) {\n\t\tsvg.appendChild(renderChartTextSvg(doc, lbl));\n\t}\n\tfor (const lbl of vm.secondaryAxisLabels ?? []) {\n\t\tsvg.appendChild(renderChartTextSvg(doc, lbl));\n\t}\n\tif (vm.zeroLine) {\n\t\tsvg.appendChild(renderChartLineSvg(doc, vm.zeroLine));\n\t}\n\tfor (const lbl of vm.categoryLabels) {\n\t\tsvg.appendChild(renderChartTextSvg(doc, lbl));\n\t}\n\n\tappendChartLegendSvg(doc, svg, vm);\n\treturn svg;\n}\n\n/** Points to chart px (96 dpi). */\nconst PT = 4 / 3;\n/** Title baseline below the chart top, and legend baseline above its bottom, measured on `gt/chart-01`. */\nconst OBLIQUE_TITLE_BASELINE = 24 * PT;\nconst OBLIQUE_LEGEND_BASELINE = 14 * PT;\n\n/** The flat view model with its title and legend moved to where PowerPoint puts them on a 3D chart. */\nfunction withBoxChromePositions(vm: ChartViewModel): ChartViewModel {\n\tconst legendBottom = (vm.legendY ?? vm.svgHeight - 8) >= vm.svgHeight / 2;\n\treturn {\n\t\t...vm,\n\t\ttitleY: OBLIQUE_TITLE_BASELINE,\n\t\t// Legend text sits 3px below `legendY` (see `appendChartLegendSvg`).\n\t\tlegendY: legendBottom ? vm.svgHeight - OBLIQUE_LEGEND_BASELINE - 3 : vm.legendY,\n\t};\n}\n\nfunction appendBoxLabels(\n\tdoc: Document,\n\tsvg: SVGElement,\n\tvm: ChartViewModel,\n\tlabels: ReadonlyArray<Chart3DBoxLabel>,\n): void {\n\tconst style = vm.axisLabels[0];\n\tfor (const label of labels) {\n\t\tsvg.appendChild(\n\t\t\trenderChartTextSvg(doc, {\n\t\t\t\tkind: 'text',\n\t\t\t\tx: label.x,\n\t\t\t\ty: label.y,\n\t\t\t\ttext: label.text,\n\t\t\t\tfontSize: label.fontSize,\n\t\t\t\tfill: style?.fill ?? '#595959',\n\t\t\t\tfontFamily: style?.fontFamily,\n\t\t\t\ttextAnchor: label.anchor,\n\t\t\t\tdominantBaseline: label.baseline ?? 'central',\n\t\t\t}),\n\t\t);\n\t}\n}\n","/**\n * `chart-3d-interaction`: framework-neutral, three.js-free maths for\n * click-to-select and drag-to-value on the opt-in true-3D chart scenes\n * (bar3D / line3D / area3D / pie3D / surface3D).\n *\n * The 3D scenes already raycast pointer moves against their meshes for hover\n * tooltips (`bar-chart-3d-hit-test.ts`, `cartesian-chart-3d-hit-test.ts`,\n * `pie-chart-3d-hit-test.ts`, `surface-chart-3d-hit-test.ts`). This module\n * turns that SAME raycast hit into the identical {@link ChartPartRef} the 2D\n * chart-interaction model (`chart-interaction.ts`, `chart-canvas-drag.ts`)\n * already uses, so a 3D mark selection drives the same inspector panel a 2D\n * mark does.\n *\n * Drag-to-value has no single fixed screen axis to divide a pointer delta by\n * (unlike the 2D SVG, which is always dragged along its own vertical pixel\n * axis): the scene's camera can be orbited to any angle, so \"up\" on screen is\n * not fixed. Instead the scene (which owns the camera) projects two points\n * already known to sit on the mark's OWN value axis, at two distinct data\n * values, to screen space, and this module turns that screen-space\n * calibration plus a pointer delta into a value delta. Kept free of any\n * `three` import so it is unit-testable with plain numbers.\n *\n * @module chart-3d-interaction\n */\nimport type { ChartPartRef } from './chart-view-model';\n\n/**\n * Minimum pointer travel (px) before a mark press becomes a value drag,\n * mirroring {@link CHART_DRAG_THRESHOLD_PX} (`chart-canvas-drag.ts`): without\n * a threshold, every click on a mark would commit a (tiny) value change, so a\n * user could never select a mark without editing it.\n */\nexport const CHART_3D_DRAG_THRESHOLD_PX = 3;\n\n/** Emissive colour + intensity applied to a selected mark's material. */\nexport const CHART_3D_SELECTED_EMISSIVE = '#3b82f6';\nexport const CHART_3D_SELECTED_EMISSIVE_INTENSITY = 0.55;\n\n/** The (series, point) a 3D raycast hit landed on. Every hit-test module's `*Hit` shape already carries this, just under kind-specific field names. */\nexport interface Chart3DMarkHit {\n\tseriesIndex: number;\n\tpointIndex: number;\n}\n\n/**\n * Map a 3D raycast hit (or none) to the same selection descriptor the 2D\n * chart-interaction model uses.\n */\nexport function chart3DHitToPartRef(hit: Chart3DMarkHit | null | undefined): ChartPartRef | null {\n\tif (!hit) {\n\t\treturn null;\n\t}\n\treturn { role: 'dataPoint', seriesIndex: hit.seriesIndex, pointIndex: hit.pointIndex };\n}\n\n/** Whether a mesh's own (series, point) reference is the currently-selected part. */\nexport function chart3DMarkMatchesPart(\n\tmark: Chart3DMarkHit,\n\tpart: ChartPartRef | null | undefined,\n): boolean {\n\treturn (\n\t\tpart !== null &&\n\t\tpart !== undefined &&\n\t\tpart.role === 'dataPoint' &&\n\t\tpart.seriesIndex === mark.seriesIndex &&\n\t\tpart.pointIndex === mark.pointIndex\n\t);\n}\n\n/** A 2D point in CSS pixels (screen space). */\nexport interface ScreenPoint2D {\n\tx: number;\n\ty: number;\n}\n\n/** Screen-space calibration of a mark's value axis, valid only until the camera next moves. */\nexport interface Chart3DValueAxisCalibration {\n\t/** Screen-space unit vector pointing in the direction of increasing value. */\n\tdirectionScreen: ScreenPoint2D;\n\t/** Screen pixels of travel, along {@link directionScreen}, per +1 data value unit. */\n\tpixelsPerUnit: number;\n}\n\n/**\n * Calibrate a value axis from two already-projected screen points known to\n * correspond to two distinct data values on the same mark (e.g. its\n * value-zero base and its current top). Returns `null` when the two values\n * coincide or the two screen points are (near) coincident (camera looking\n * straight down the axis), since no calibration is possible.\n *\n * Order-independent: swapping `(screenAtValue0, value0)` with\n * `(screenAtValue1, value1)` yields the same {@link chart3DPointerDeltaToValueDelta}\n * result, since the direction vector and `pixelsPerUnit` sign flip together.\n */\nexport function calibrateChart3DValueAxis(\n\tscreenAtValue0: ScreenPoint2D,\n\tvalue0: number,\n\tscreenAtValue1: ScreenPoint2D,\n\tvalue1: number,\n): Chart3DValueAxisCalibration | null {\n\tconst valueSpan = value1 - value0;\n\tconst dx = screenAtValue1.x - screenAtValue0.x;\n\tconst dy = screenAtValue1.y - screenAtValue0.y;\n\tconst pixelSpan = Math.hypot(dx, dy);\n\tif (valueSpan === 0 || pixelSpan < 1e-6 || !Number.isFinite(valueSpan)) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tdirectionScreen: { x: dx / pixelSpan, y: dy / pixelSpan },\n\t\tpixelsPerUnit: pixelSpan / valueSpan,\n\t};\n}\n\n/**\n * Convert a screen-space pointer delta (current position minus drag-start\n * position, in CSS px) into a value delta, using a calibration taken at drag\n * start. Add the result to the mark's value at drag start to get the live\n * (or committed) dragged value.\n */\nexport function chart3DPointerDeltaToValueDelta(\n\tcalibration: Chart3DValueAxisCalibration,\n\tpointerDeltaScreen: ScreenPoint2D,\n): number {\n\tconst dot =\n\t\tpointerDeltaScreen.x * calibration.directionScreen.x +\n\t\tpointerDeltaScreen.y * calibration.directionScreen.y;\n\treturn dot / calibration.pixelsPerUnit;\n}\n","/**\n * Pointer interaction shared by the 3D chart scenes (`chart-3d-view-scene.ts`):\n * hover tooltip, click-to-select and drag-to-value on WebGL marks.\n *\n * A scene describes its marks through a {@link Chart3DMarkAdapter} (which data\n * point a ray hit, its value, how a drag previews, how a selection is drawn);\n * everything about pointer handling lives here once. As in the 2D chart, the\n * scene only claims a press while the chart is armed for editing\n * (`isChartInteractionArmed`), and a drag commits one value on release.\n *\n * Picking casts its own ray from the camera's inverse projection instead of\n * `Raycaster.setFromCamera`: the oblique camera carries a hand-inserted\n * shear and the perspective camera an off-centre projection, neither of which\n * `setFromCamera` models. Unprojecting the near and far NDC points through the\n * full inverse projection is exact for both.\n *\n * @module chart-3d-mark-interaction\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { ThreeViewContext } from '../three-view/types';\nimport { buildBarChart3DHoverTooltip } from './bar-chart-3d-hit-test';\nimport { CHART_3D_DRAG_THRESHOLD_PX } from './chart-3d-interaction';\nimport { isChartInteractionArmed } from './chart-canvas-drag';\nimport type { ChartPartRef } from './chart-view-model';\n\n/** A data point, as the chart's series / category indices. */\nexport interface Chart3DPoint {\n\tseriesIndex: number;\n\tpointIndex: number;\n}\n\n/** A live value drag on one mark. */\nexport interface Chart3DMarkDrag {\n\t/**\n\t * Preview the value for a pointer delta in chart px (`dx` right, `dy`\n\t * down), `at` being the pointer's chart px position; returns the value.\n\t */\n\tpreview: (dx: number, dy: number, at: { x: number; y: number }) => number;\n}\n\nexport interface Chart3DMarkAdapter {\n\t/** The objects rays are cast against. */\n\ttargets: ReadonlyArray<THREE.Object3D>;\n\t/** The data point under a hit, or `null` for none. */\n\tpointAt: (hit: THREE.Intersection) => Chart3DPoint | null;\n\t/** A data point's authored value, or `undefined` when it has none. */\n\tvalueOf: (point: Chart3DPoint) => number | undefined;\n\t/** Start a value drag on a point, or `null` when it is not draggable. */\n\tbeginDrag: (point: Chart3DPoint) => Chart3DMarkDrag | null;\n\t/** Draw (or clear) the selection. */\n\thighlight: (point: Chart3DPoint | null) => void;\n\tdispose?: () => void;\n}\n\nexport interface Chart3DMarkInteractionOptions {\n\tctx: ThreeViewContext;\n\tcamera: THREE.Camera;\n\t/** Root refreshed before picking (world matrices only update on render otherwise). */\n\tscene: THREE.Object3D;\n\t/** Chart px height of the view (client px convert to chart px through it). */\n\tsvgHeight: number;\n\tchartData: PptxChartData;\n\tcategoryLabels: ReadonlyArray<string>;\n\tseriesNames: ReadonlyArray<string>;\n\tadapter: Chart3DMarkAdapter;\n}\n\nexport interface Chart3DMarkInteraction {\n\tsetInteractive: (on: boolean) => void;\n\tsetSelectedPart: (part: ChartPartRef | null) => void;\n\tdispose: () => void;\n}\n\ninterface PressState {\n\tpoint: Chart3DPoint | null;\n\tdrag: { session: Chart3DMarkDrag; moved: boolean } | null;\n\tstartX: number;\n\tstartY: number;\n\t/** Chart px per client px, measured at press time (the slide may be zoomed). */\n\tchartPxPerClientPx: number;\n\tlastValue: number | null;\n}\n\nfunction partOf(point: Chart3DPoint | null): ChartPartRef | null {\n\treturn point\n\t\t? { role: 'dataPoint', seriesIndex: point.seriesIndex, pointIndex: point.pointIndex }\n\t\t: null;\n}\n\n/** Attach hover/select/drag to a 3D chart scene's marks. */\nexport function attachChart3DMarkInteraction(\n\toptions: Chart3DMarkInteractionOptions,\n): Chart3DMarkInteraction {\n\tconst { ctx, camera, adapter, chartData } = options;\n\tconst three = ctx.three;\n\tconst target = ctx.eventTarget;\n\tconst raycaster = new three.Raycaster();\n\tconst far = new three.Vector3();\n\tlet interactive = ctx.interactive;\n\tlet press: PressState | null = null;\n\tlet hoveredTooltip: string | undefined;\n\n\tfunction pointAt(clientX: number, clientY: number): Chart3DPoint | null {\n\t\tconst rect = target.getBoundingClientRect();\n\t\tif (rect.width <= 0 || rect.height <= 0) {\n\t\t\treturn null;\n\t\t}\n\t\toptions.scene.updateMatrixWorld();\n\t\tcamera.updateMatrixWorld();\n\t\tconst x = ((clientX - rect.left) / rect.width) * 2 - 1;\n\t\tconst y = -((clientY - rect.top) / rect.height) * 2 + 1;\n\t\traycaster.ray.origin.set(x, y, -1).unproject(camera);\n\t\tfar.set(x, y, 1).unproject(camera);\n\t\traycaster.ray.direction.copy(far).sub(raycaster.ray.origin).normalize();\n\t\tconst hit = raycaster.intersectObjects(adapter.targets as THREE.Object3D[], false)[0];\n\t\treturn hit ? adapter.pointAt(hit) : null;\n\t}\n\n\tconst onPointerMove = (event: PointerEvent): void => {\n\t\tif (press?.drag) {\n\t\t\tconst dx = event.clientX - press.startX;\n\t\t\tconst dy = event.clientY - press.startY;\n\t\t\tif (!press.drag.moved && Math.hypot(dx, dy) < CHART_3D_DRAG_THRESHOLD_PX) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpress.drag.moved = true;\n\t\t\tconst k = press.chartPxPerClientPx;\n\t\t\tconst rect = target.getBoundingClientRect();\n\t\t\tconst value = press.drag.session.preview(dx * k, dy * k, {\n\t\t\t\tx: (event.clientX - rect.left) * k,\n\t\t\t\ty: (event.clientY - rect.top) * k,\n\t\t\t});\n\t\t\tpress.lastValue = value;\n\t\t\tctx.requestRender();\n\t\t\tconst part = partOf(press.point);\n\t\t\tif (part) {\n\t\t\t\tctx.emit({ type: 'drag', detail: { part, value, phase: 'move' } });\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst point = pointAt(event.clientX, event.clientY);\n\t\tconst value = point ? adapter.valueOf(point) : undefined;\n\t\tconst tooltip =\n\t\t\tpoint && value !== undefined\n\t\t\t\t? buildBarChart3DHoverTooltip(\n\t\t\t\t\t\t{ seriesIndex: point.seriesIndex, categoryIndex: point.pointIndex, value },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcategoryLabels: options.categoryLabels,\n\t\t\t\t\t\t\tseriesNames: options.seriesNames,\n\t\t\t\t\t\t\tnumberFormats: chartData.series.map((s) => s.numberFormat),\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\tif (tooltip !== hoveredTooltip) {\n\t\t\thoveredTooltip = tooltip;\n\t\t\ttarget.title = tooltip ?? '';\n\t\t}\n\t};\n\n\tconst onPointerDown = (event: PointerEvent): void => {\n\t\tif (!interactive) {\n\t\t\treturn;\n\t\t}\n\t\tconst point = pointAt(event.clientX, event.clientY);\n\t\tconst armed = point !== null && isChartInteractionArmed(target);\n\t\tif (armed) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tconst session = armed && point ? adapter.beginDrag(point) : null;\n\t\tif (session) {\n\t\t\tevent.preventDefault();\n\t\t\t(target as { setPointerCapture?: (id: number) => void }).setPointerCapture?.(event.pointerId);\n\t\t}\n\t\tconst rect = target.getBoundingClientRect();\n\t\tpress = {\n\t\t\tpoint,\n\t\t\tdrag: session ? { session, moved: false } : null,\n\t\t\tstartX: event.clientX,\n\t\t\tstartY: event.clientY,\n\t\t\tchartPxPerClientPx: rect.height > 0 ? options.svgHeight / rect.height : 1,\n\t\t\tlastValue: null,\n\t\t};\n\t};\n\n\tconst onPointerUp = (event: PointerEvent): void => {\n\t\tconst current = press;\n\t\tpress = null;\n\t\tif (!current || !interactive) {\n\t\t\treturn;\n\t\t}\n\t\tconst part = partOf(current.point);\n\t\tif (current.drag?.moved && current.lastValue !== null && part) {\n\t\t\tctx.emit({ type: 'drag', detail: { part, value: current.lastValue, phase: 'commit' } });\n\t\t\treturn;\n\t\t}\n\t\tconst travel = Math.hypot(event.clientX - current.startX, event.clientY - current.startY);\n\t\tif (travel < CHART_3D_DRAG_THRESHOLD_PX) {\n\t\t\tctx.emit({ type: 'select', part });\n\t\t}\n\t};\n\n\tconst onPointerLeave = (): void => {\n\t\tif (hoveredTooltip !== undefined) {\n\t\t\thoveredTooltip = undefined;\n\t\t\ttarget.title = '';\n\t\t}\n\t};\n\n\ttarget.addEventListener('pointermove', onPointerMove);\n\ttarget.addEventListener('pointerdown', onPointerDown);\n\ttarget.addEventListener('pointerup', onPointerUp);\n\ttarget.addEventListener('pointerleave', onPointerLeave);\n\n\treturn {\n\t\tsetInteractive(on) {\n\t\t\tinteractive = on;\n\t\t\tif (!on) {\n\t\t\t\tpress = null;\n\t\t\t}\n\t\t},\n\t\tsetSelectedPart(part) {\n\t\t\tadapter.highlight(\n\t\t\t\tpart?.role === 'dataPoint' && part.pointIndex !== undefined\n\t\t\t\t\t? { seriesIndex: part.seriesIndex, pointIndex: part.pointIndex }\n\t\t\t\t\t: null,\n\t\t\t);\n\t\t\tctx.requestRender();\n\t\t},\n\t\tdispose() {\n\t\t\ttarget.removeEventListener('pointermove', onPointerMove);\n\t\t\ttarget.removeEventListener('pointerdown', onPointerDown);\n\t\t\ttarget.removeEventListener('pointerup', onPointerUp);\n\t\t\ttarget.removeEventListener('pointerleave', onPointerLeave);\n\t\t\tadapter.dispose?.();\n\t\t},\n\t};\n}\n","/**\n * Value-drag maths for the right-angle-axes 3D bar chart\n * (`chart-3d-oblique-layout.ts`), kept pure so it is testable without WebGL.\n *\n * A bar's front face is drawn flat, so dragging along the value axis moves\n * its value by `chart px / valueScale`, rounded like every other chart drag\n * (`roundDragValue`). Columns drag vertically (up = larger), horizontal bars\n * horizontally (right = larger). Like the 2D chart, only `clustered` and\n * `standard` bars are value-draggable: a stacked segment sits on a running\n * sum, so dragging one would not track the pointer.\n *\n * @module chart-3d-oblique-drag\n */\nimport { obliqueBarTaper } from './chart-3d-oblique-bars';\nimport type { ObliqueBar, ObliqueChartLayout } from './chart-3d-oblique-layout';\nimport { roundDragValue } from './chart-interaction';\n\n/** Whether a bar in this layout can be value-dragged. */\nexport function isObliqueBarDraggable(layout: Pick<ObliqueChartLayout, 'grouping'>): boolean {\n\treturn layout.grouping === 'clustered' || layout.grouping === 'standard';\n}\n\n/**\n * The value after dragging by a pointer delta, in chart px (`dx` right,\n * `dy` down).\n */\nexport function obliqueDragValue(\n\tlayout: Pick<ObliqueChartLayout, 'horizontal' | 'range' | 'valueScale'>,\n\tstartValue: number,\n\tdx: number,\n\tdy: number,\n): number {\n\tconst along = layout.horizontal ? dx : -dy;\n\tconst raw = startValue + along / layout.valueScale;\n\tconst span = layout.range.max - layout.range.min;\n\treturn roundDragValue(raw, { min: layout.range.min, max: layout.range.max, span });\n}\n\n/**\n * A bar's extent along the value axis after a drag to `value` (the baseline\n * end stays put), clipped to the axis, in the layout's world units.\n */\nexport function obliqueDraggedExtent(\n\tlayout: Pick<ObliqueChartLayout, 'range' | 'valueScale'>,\n\tvalue: number,\n): { from: number; length: number } {\n\tconst { min, max } = layout.range;\n\tconst base = Math.min(Math.max(0, min), max);\n\tconst clamp = (v: number): number => Math.min(Math.max(v, min), max);\n\tconst lo = (clamp(Math.min(base, value)) - min) * layout.valueScale;\n\tconst hi = (clamp(Math.max(base, value)) - min) * layout.valueScale;\n\treturn { from: lo, length: hi - lo };\n}\n\n/** `bar` with its value-axis extent (and taper) replaced: a live drag preview. */\nexport function obliqueBarAtValue(\n\tlayout: Pick<ObliqueChartLayout, 'horizontal' | 'range' | 'valueScale'>,\n\tbar: ObliqueBar,\n\tvalue: number,\n): ObliqueBar {\n\tconst { from, length } = obliqueDraggedExtent(layout, value);\n\tconst extent = (layout.range.max - layout.range.min) * layout.valueScale;\n\tconst taper = obliqueBarTaper(bar.shape, from, from + length, extent, value);\n\treturn layout.horizontal\n\t\t? { ...bar, x: from, w: length, value, taper }\n\t\t: { ...bar, y: from, h: length, value, taper };\n}\n","/**\n * Pointer interaction for the oblique `bar3D` scene (`chart-3d-view-scene.ts`):\n * the {@link Chart3DMarkAdapter} for its boxes, on the shared hover/select/\n * drag handling of `chart-3d-mark-interaction.ts`.\n *\n * Bars come from the right-angle-axes layout (`chart-3d-oblique-layout.ts`);\n * a value drag moves along that layout's value axis with its own scale\n * (`chart-3d-oblique-drag.ts`), vertically for columns and horizontally for\n * a `c:barDir=\"bar\"` chart. As in the 2D chart, stacked segments select but\n * never drag.\n *\n * @module chart-3d-oblique-interaction\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { ThreeViewContext } from '../three-view/types';\nimport { placeObliqueBarMesh } from './chart-3d-bar-mesh';\nimport { attachChart3DMarkInteraction } from './chart-3d-mark-interaction';\nimport type { Chart3DMarkInteraction, Chart3DPoint } from './chart-3d-mark-interaction';\nimport {\n\tisObliqueBarDraggable,\n\tobliqueBarAtValue,\n\tobliqueDragValue,\n} from './chart-3d-oblique-drag';\nimport type { ObliqueChartLayout } from './chart-3d-oblique-layout';\n\n/** Colour of the selected box's outline (matches the 2D selected-mark accent). */\nconst SELECTED_OUTLINE_COLOR = 0x2563eb;\n\nexport interface ObliqueBarInteractionOptions {\n\tctx: ThreeViewContext;\n\tcamera: THREE.Camera;\n\tmeshes: ReadonlyArray<THREE.Mesh>;\n\tlayout: ObliqueChartLayout;\n\t/** Chart px size of the view-box the scene frame is centred on. */\n\tsvgWidth: number;\n\tsvgHeight: number;\n\tchartData: PptxChartData;\n\tcategoryLabels: ReadonlyArray<string>;\n\tseriesNames: ReadonlyArray<string>;\n\t/** Scene the selection outline is added to. */\n\tscene: THREE.Object3D;\n}\n\nexport type ObliqueBarInteraction = Chart3DMarkInteraction;\n\n/** Attach hover/select/drag to an oblique bar scene's boxes. */\nexport function attachObliqueBarInteraction(\n\toptions: ObliqueBarInteractionOptions,\n): ObliqueBarInteraction {\n\tconst { ctx, meshes, layout } = options;\n\tconst bars = layout.bars;\n\tconst three = ctx.three;\n\n\tconst outline = new three.LineSegments(\n\t\tnew three.EdgesGeometry(new three.BoxGeometry(1, 1, 1)),\n\t\tnew three.LineBasicMaterial({ color: SELECTED_OUTLINE_COLOR }),\n\t);\n\toutline.visible = false;\n\toptions.scene.add(outline);\n\tlet selected = -1;\n\n\tconst indexOf = (point: Chart3DPoint): number =>\n\t\tbars.findIndex(\n\t\t\t(b) => b.seriesIndex === point.seriesIndex && b.categoryIndex === point.pointIndex,\n\t\t);\n\n\tfunction syncOutline(): void {\n\t\toutline.visible = selected >= 0;\n\t\tif (selected >= 0) {\n\t\t\toutline.position.copy(meshes[selected].position);\n\t\t\toutline.scale.copy(meshes[selected].scale);\n\t\t}\n\t}\n\n\treturn attachChart3DMarkInteraction({\n\t\tctx,\n\t\tcamera: options.camera,\n\t\tscene: options.scene,\n\t\tsvgHeight: options.svgHeight,\n\t\tchartData: options.chartData,\n\t\tcategoryLabels: options.categoryLabels,\n\t\tseriesNames: options.seriesNames,\n\t\tadapter: {\n\t\t\ttargets: meshes,\n\t\t\tpointAt(hit) {\n\t\t\t\tconst data = hit.object.userData as { seriesIndex?: number; categoryIndex?: number };\n\t\t\t\tif (data.seriesIndex === undefined || data.categoryIndex === undefined) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn { seriesIndex: data.seriesIndex, pointIndex: data.categoryIndex };\n\t\t\t},\n\t\t\tvalueOf(point) {\n\t\t\t\treturn bars[indexOf(point)]?.value;\n\t\t\t},\n\t\t\tbeginDrag(point) {\n\t\t\t\tconst index = indexOf(point);\n\t\t\t\tif (index < 0 || !isObliqueBarDraggable(layout)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst start = bars[index];\n\t\t\t\treturn {\n\t\t\t\t\tpreview(dx, dy) {\n\t\t\t\t\t\tconst value = obliqueDragValue(layout, start.value, dx, dy);\n\t\t\t\t\t\tplaceObliqueBarMesh(\n\t\t\t\t\t\t\tthree,\n\t\t\t\t\t\t\tmeshes[index],\n\t\t\t\t\t\t\tlayout,\n\t\t\t\t\t\t\toptions.svgWidth,\n\t\t\t\t\t\t\toptions.svgHeight,\n\t\t\t\t\t\t\tobliqueBarAtValue(layout, start, value),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsyncOutline();\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\thighlight(point) {\n\t\t\t\tselected = point ? indexOf(point) : -1;\n\t\t\t\tsyncOutline();\n\t\t\t},\n\t\t\tdispose() {\n\t\t\t\toutline.geometry.dispose();\n\t\t\t\t(outline.material as THREE.Material).dispose();\n\t\t\t\toutline.removeFromParent();\n\t\t\t},\n\t\t},\n\t});\n}\n","/**\n * Bars of a `bar3D` chart WITHOUT right-angle axes (`c:view3D/@rAngAx=0`):\n * columns, or horizontal bars for `c:barDir=\"bar\"`, on the perspective box (`chart-3d-persp-layout.ts`),\n * as box-space prisms. The bar sizing follows the right-angle-axes layout\n * (`chart-3d-oblique-bars.ts`), whose conventions PowerPoint shares: a bar's\n * depth equals its width, `clustered` series sit side by side in one row,\n * `stacked` ones share a bar, and `standard` gives each series its own row.\n *\n * @module chart-3d-persp-bars\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\n\nimport { obliqueBarTaper } from './chart-3d-oblique-bars';\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport type { PerspPrism } from './chart-3d-persp-marks';\n\nconst DEFAULT_GAP_WIDTH = 150;\n\ntype LayoutCore = Pick<\n\tPerspChartLayout,\n\t'grouping' | 'range' | 'valueScale' | 'categoryX' | 'rowDepth' | 'colors' | 'horizontal' | 'view'\n>;\n\nfunction valueY(layout: Pick<LayoutCore, 'range' | 'valueScale'>, v: number): number {\n\tconst clamped = Math.min(Math.max(v, layout.range.min), layout.range.max);\n\treturn (clamped - layout.range.min) * layout.valueScale;\n}\n\n/** One prism per bar; `override` replaces one point's value (a drag preview). */\nexport function buildPerspBarPrisms(\n\tchartData: PptxChartData,\n\tlayout: LayoutCore,\n\toverride?: { seriesIndex: number; pointIndex: number; value: number },\n): PerspPrism[] {\n\tconst nCat = layout.categoryX.length;\n\tconst nSer = chartData.series.length;\n\t// Slots divide the category axis: box x for columns, box y for horizontal bars.\n\tconst catExtent = layout.horizontal ? layout.view.box.h : layout.view.box.w;\n\tconst slot = nCat > 0 ? catExtent / nCat : catExtent;\n\tconst gapWidth = (chartData.barGapWidth ?? DEFAULT_GAP_WIDTH) / 100;\n\tconst slots = layout.grouping === 'clustered' ? nSer : 1;\n\tconst barW = slot / (slots + gapWidth);\n\tconst depth = Math.min(barW, layout.rowDepth);\n\tconst stacked = layout.grouping === 'stacked' || layout.grouping === 'percentStacked';\n\tconst baseline = Math.min(Math.max(0, layout.range.min), layout.range.max);\n\tconst prisms: PerspPrism[] = [];\n\tfor (let c = 0; c < nCat; c++) {\n\t\tconst valueOf = (s: number): number => {\n\t\t\tif (override && override.seriesIndex === s && override.pointIndex === c) {\n\t\t\t\treturn override.value;\n\t\t\t}\n\t\t\tconst v = chartData.series[s]?.values[c];\n\t\t\treturn v !== undefined && Number.isFinite(v) ? v : 0;\n\t\t};\n\t\tconst total = chartData.series.reduce((t, _s, s) => t + Math.abs(valueOf(s)), 0);\n\t\tlet pos = baseline;\n\t\tlet neg = baseline;\n\t\tfor (let s = 0; s < nSer; s++) {\n\t\t\tconst raw = valueOf(s);\n\t\t\tconst value = layout.grouping === 'percentStacked' ? (total ? raw / total : 0) : raw;\n\t\t\tlet from = baseline;\n\t\t\tlet to = value;\n\t\t\tif (stacked) {\n\t\t\t\tfrom = value >= 0 ? pos : neg;\n\t\t\t\tto = from + value;\n\t\t\t\tif (value >= 0) {\n\t\t\t\t\tpos = to;\n\t\t\t\t} else {\n\t\t\t\t\tneg = to;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst shape = chartData.series[s]?.shape ?? chartData.barShape ?? 'box';\n\t\t\tconst slotIndex = layout.grouping === 'clustered' ? s : 0;\n\t\t\tconst row = layout.grouping === 'standard' ? s : 0;\n\t\t\tconst c0 = c * slot + (gapWidth * barW) / 2 + slotIndex * barW;\n\t\t\tconst v0 = valueY(layout, Math.min(from, to));\n\t\t\tconst v1 = Math.max(valueY(layout, Math.max(from, to)), v0 + 1e-6);\n\t\t\t// Column: category along x, value up y. Horizontal: value along x, category up y.\n\t\t\tconst [x0, x1, y0, y1] = layout.horizontal\n\t\t\t\t? [v0, v1, c0, c0 + barW]\n\t\t\t\t: [c0, c0 + barW, v0, v1];\n\t\t\tconst z0 = row * layout.rowDepth + (layout.rowDepth - depth) / 2;\n\t\t\tprisms.push({\n\t\t\t\tseriesIndex: s,\n\t\t\t\tpointIndex: c,\n\t\t\t\tcolor: layout.colors[s],\n\t\t\t\toutline: [\n\t\t\t\t\t[x0, y0],\n\t\t\t\t\t[x1, y0],\n\t\t\t\t\t[x1, y1],\n\t\t\t\t\t[x0, y1],\n\t\t\t\t],\n\t\t\t\tz0,\n\t\t\t\tz1: z0 + depth,\n\t\t\t\tshape,\n\t\t\t\ttaper: obliqueBarTaper(\n\t\t\t\t\tshape,\n\t\t\t\t\tv0,\n\t\t\t\t\tv1,\n\t\t\t\t\t(layout.range.max - layout.range.min) * layout.valueScale,\n\t\t\t\t\traw,\n\t\t\t\t),\n\t\t\t\thorizontal: layout.horizontal,\n\t\t\t});\n\t\t}\n\t}\n\treturn prisms;\n}\n","/**\n * Marks of the perspective 3D line / area charts (`chart-3d-persp-layout.ts`)\n * as box-space prisms: a polygon in the category/value (x/y) plane extruded\n * through a depth range, which is how PowerPoint draws both families\n * (`gt/chart-10..13`):\n *\n * - 3-D Area: one slab per series, the area polygon down to the baseline,\n * `markDepth` deep and centred in its row. Stacked groupings share one row\n * and stack each series on the running sum (`percentStacked` normalised).\n * - 3-D Line: one ribbon per series in its own row, the polyline thickened\n * by a hairline so the tape has an edge to see.\n *\n * @module chart-3d-persp-marks\n */\nimport type { PptxBar3DShape, PptxChartData } from 'pptx-viewer-core';\n\nimport type { ObliqueTaper } from './chart-3d-oblique-types';\nimport { buildPerspBarPrisms } from './chart-3d-persp-bars';\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\n\n/** Ribbon thickness, as a fraction of the box height. */\nconst RIBBON_THICKNESS = 0.012;\n\nexport interface PerspPrism {\n\tseriesIndex: number;\n\t/** The bar's category, for a per-point mark (a bar); absent for a whole-series slab or ribbon. */\n\tpointIndex?: number;\n\tcolor: string;\n\t/** Polygon in box x/y, counter-clockwise. */\n\toutline: Array<[number, number]>;\n\tz0: number;\n\tz1: number;\n\t/**\n\t * A bar's `c:shape` (cylinder / cone / pyramid and the `...ToMax` slices);\n\t * absent or `box` extrudes the outline. The shape is inscribed in the\n\t * outline's bounding box, as with right-angle axes.\n\t */\n\tshape?: PptxBar3DShape;\n\t/** Width of a shaped bar at its baseline / value end, 0-1 (see `obliqueBarTaper`). */\n\ttaper?: ObliqueTaper;\n\t/** The bar runs along box x (a horizontal bar chart) rather than y. */\n\thorizontal?: boolean;\n}\n\ntype LayoutCore = Pick<\n\tPerspChartLayout,\n\t| 'kind'\n\t| 'grouping'\n\t| 'view'\n\t| 'range'\n\t| 'valueScale'\n\t| 'categoryX'\n\t| 'rowDepth'\n\t| 'markDepth'\n\t| 'colors'\n\t| 'horizontal'\n>;\n\n/** Position of a value along the value axis (box y, or box x for horizontal bars), clipped to the axis. */\nexport function perspValueY(layout: Pick<LayoutCore, 'range' | 'valueScale'>, v: number): number {\n\tconst clamped = Math.min(Math.max(v, layout.range.min), layout.range.max);\n\treturn (clamped - layout.range.min) * layout.valueScale;\n}\n\n/** Depth range of a row's mark. */\nexport function perspRowSpan(\n\tlayout: Pick<LayoutCore, 'rowDepth' | 'markDepth'>,\n\trow: number,\n): [number, number] {\n\tconst z0 = row * layout.rowDepth + (layout.rowDepth - layout.markDepth) / 2;\n\treturn [z0, z0 + layout.markDepth];\n}\n\nfunction finite(v: number | undefined): number {\n\treturn v !== undefined && Number.isFinite(v) ? v : 0;\n}\n\n/** Values series by series, `percentStacked` normalised to category totals. */\nfunction plottedValues(chartData: PptxChartData, layout: LayoutCore, nCat: number): number[][] {\n\tconst raw = chartData.series.map((s) =>\n\t\tArray.from({ length: nCat }, (_, c) => finite(s.values[c])),\n\t);\n\tif (layout.grouping !== 'percentStacked') {\n\t\treturn raw;\n\t}\n\tconst totals = Array.from({ length: nCat }, (_, c) =>\n\t\traw.reduce((t, s) => t + Math.abs(s[c]), 0),\n\t);\n\treturn raw.map((s) => s.map((v, c) => (totals[c] ? v / totals[c] : 0)));\n}\n\n/**\n * The prisms for a line or area chart; `override` replaces one point's value\n * (a live drag preview).\n */\nexport function buildPerspPrisms(\n\tchartData: PptxChartData,\n\tlayout: LayoutCore,\n\toverride?: { seriesIndex: number; pointIndex: number; value: number },\n): PerspPrism[] {\n\tif (layout.kind === 'bar') {\n\t\treturn buildPerspBarPrisms(chartData, layout, override);\n\t}\n\tconst nCat = layout.categoryX.length;\n\tconst values = plottedValues(chartData, layout, nCat);\n\tif (override) {\n\t\tconst row = values[override.seriesIndex];\n\t\tif (row && override.pointIndex < nCat) {\n\t\t\trow[override.pointIndex] = override.value;\n\t\t}\n\t}\n\tconst xs = layout.categoryX;\n\tconst baseY = perspValueY(layout, Math.max(0, layout.range.min));\n\tconst prisms: PerspPrism[] = [];\n\tif (layout.kind === 'line') {\n\t\tconst t = (layout.view.box.h * RIBBON_THICKNESS) / 2;\n\t\tvalues.forEach((series, s) => {\n\t\t\tconst ys = series.map((v) => perspValueY(layout, v));\n\t\t\tconst [z0, z1] = perspRowSpan(layout, s);\n\t\t\tprisms.push({\n\t\t\t\tseriesIndex: s,\n\t\t\t\tcolor: layout.colors[s],\n\t\t\t\toutline: [\n\t\t\t\t\t...xs.map((x, c): [number, number] => [x, ys[c] - t]),\n\t\t\t\t\t...xs.map((x, c): [number, number] => [x, ys[c] + t]).reverse(),\n\t\t\t\t],\n\t\t\t\tz0,\n\t\t\t\tz1,\n\t\t\t});\n\t\t});\n\t\treturn prisms;\n\t}\n\tconst stacked = layout.grouping !== 'standard';\n\tconst running = new Array<number>(nCat).fill(0);\n\tvalues.forEach((series, s) => {\n\t\tconst lower = stacked ? running.map((v) => perspValueY(layout, v)) : xs.map(() => baseY);\n\t\tconst upper = series.map((v, c) => perspValueY(layout, stacked ? running[c] + v : v));\n\t\tif (stacked) {\n\t\t\tseries.forEach((v, c) => {\n\t\t\t\trunning[c] += v;\n\t\t\t});\n\t\t}\n\t\tconst [z0, z1] = perspRowSpan(layout, stacked ? 0 : s);\n\t\tprisms.push({\n\t\t\tseriesIndex: s,\n\t\t\tcolor: layout.colors[s],\n\t\t\toutline: [\n\t\t\t\t...xs.map((x, c): [number, number] => [x, lower[c]]),\n\t\t\t\t...xs.map((x, c): [number, number] => [x, upper[c]]).reverse(),\n\t\t\t],\n\t\t\tz0,\n\t\t\tz1,\n\t\t});\n\t});\n\treturn prisms;\n}\n","/**\n * Round and pointed bars (`c:shape` cylinder / cone / pyramid and the\n * `...ToMax` slices) on the perspective box (`chart-3d-persp-layout.ts`), for\n * a `bar3D` chart without right-angle axes.\n *\n * The right-angle-axes chart already builds these solids\n * (`chart-3d-oblique-shape-mesh.ts`): a unit shape inscribed in the bar's\n * footprint. Here the same unit geometry is scaled into the prism's box-space\n * bounding box and shaded from its box-space normals with the shape's own\n * form (`chart-3d-shading.ts`); box-space `-z` faces the viewer. Without\n * right-angle axes PowerPoint has no export of this setting in the parity\n * deck, so the shading follows the box convention unverified.\n *\n * @module chart-3d-persp-shape-mesh\n */\nimport type * as THREE from 'three';\n\nimport { buildObliqueShapeGeometry } from './chart-3d-oblique-shape-mesh';\nimport type { ObliqueBar } from './chart-3d-oblique-types';\nimport type { PerspPrism } from './chart-3d-persp-marks';\nimport { chart3DNormalShade } from './chart-3d-shading';\n\ntype ThreeModule = typeof THREE;\n\n/** Whether a prism is drawn as a shaped solid rather than an extrusion. */\nexport function isShapedPerspPrism(prism: PerspPrism): boolean {\n\treturn prism.shape !== undefined && prism.shape !== 'box';\n}\n\n/** The prism's box-space bounding box: `[x0, x1, y0, y1]`. */\nfunction outlineBounds(prism: PerspPrism): [number, number, number, number] {\n\tconst xs = prism.outline.map(([x]) => x);\n\tconst ys = prism.outline.map(([, y]) => y);\n\treturn [Math.min(...xs), Math.max(...xs), Math.min(...ys), Math.max(...ys)];\n}\n\n/** A shaped bar's geometry in box space, with shading baked into vertex colours. */\nexport function buildShapedPrismGeometry(\n\tthree: ThreeModule,\n\tprism: PerspPrism,\n): THREE.BufferGeometry {\n\tconst shape = prism.shape ?? 'box';\n\tconst unit = buildObliqueShapeGeometry(\n\t\tthree,\n\t\t{ shape, taper: prism.taper ?? { bottom: 1, top: 1 } } as ObliqueBar,\n\t\tBoolean(prism.horizontal),\n\t);\n\tconst geometry = unit.index ? unit.toNonIndexed() : unit;\n\tif (geometry !== unit) {\n\t\tunit.dispose();\n\t}\n\tconst [x0, x1, y0, y1] = outlineBounds(prism);\n\tconst sx = Math.max(x1 - x0, 1e-6);\n\tconst sy = Math.max(y1 - y0, 1e-6);\n\tconst sz = Math.max(prism.z1 - prism.z0, 1e-6);\n\tgeometry.scale(sx, sy, sz);\n\tgeometry.translate((x0 + x1) / 2, (y0 + y1) / 2, (prism.z0 + prism.z1) / 2);\n\tgeometry.computeVertexNormals();\n\n\tconst normals = geometry.getAttribute('normal');\n\tconst colors = new Float32Array(normals.count * 3);\n\tconst base = new three.Color(prism.color).getRGB(new three.Color(), three.SRGBColorSpace);\n\tconst out = new three.Color();\n\tfor (let i = 0; i < normals.count; i++) {\n\t\tconst f = chart3DNormalShade(shape, normals.getX(i), normals.getY(i), -normals.getZ(i));\n\t\tout.setRGB(\n\t\t\tMath.min(1, base.r * f),\n\t\t\tMath.min(1, base.g * f),\n\t\t\tMath.min(1, base.b * f),\n\t\t\tthree.SRGBColorSpace,\n\t\t);\n\t\tcolors.set([out.r, out.g, out.b], i * 3);\n\t}\n\tgeometry.setAttribute('color', new three.Float32BufferAttribute(colors, 3));\n\treturn geometry;\n}\n","/**\n * WebGL geometry for the perspective 3D chart layout\n * (`chart-3d-persp-layout.ts`): the wall gridlines and one extruded, flat-\n * shaded mesh per mark prism (`chart-3d-persp-marks.ts`), in a group whose\n * matrix maps box space onto `buildPerspCamera`'s view space.\n *\n * Faces are shaded per vertex from their box-space normal with the same\n * quadratic form as the bar chart (`chart3DNormalShade`), the box's front\n * (-z, toward the viewer) as the lit face. Box space (x right, y up, z away)\n * is left-handed, so the box matrix mirrors; materials are two-sided.\n *\n * @module chart-3d-persp-mesh\n */\nimport type * as THREE from 'three';\n\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport type { PerspPrism } from './chart-3d-persp-marks';\nimport { buildShapedPrismGeometry, isShapedPerspPrism } from './chart-3d-persp-shape-mesh';\nimport { perspBoxMatrix } from './chart-3d-persp-view';\nimport { chart3DNormalShade } from './chart-3d-shading';\n\ntype ThreeModule = typeof THREE;\n\n/** PowerPoint's default major gridline colour (tx1 at 15% tint, `#D9D9D9`). */\nconst GRIDLINE_COLOR = 0xd9d9d9;\n\nexport interface PerspMeshResult {\n\t/** Box-space root (its matrix is the box placement). */\n\tgroup: THREE.Group;\n\t/** One mesh per prism, same order; `userData` names its series (and a bar's point). */\n\tmeshes: THREE.Mesh[];\n\t/** Replace mesh `i`'s geometry with `prism` (a drag preview). */\n\tsetPrism: (i: number, prism: PerspPrism) => void;\n\tdispose: () => void;\n}\n\n/** Bake face shading into a geometry's vertex colours. */\nexport function shadePerspGeometry(\n\tthree: ThreeModule,\n\tgeometry: THREE.BufferGeometry,\n\tcolor: string,\n): void {\n\tconst normals = geometry.getAttribute('normal');\n\tconst colors = new Float32Array(normals.count * 3);\n\tconst base = new three.Color(color).getRGB(new three.Color(), three.SRGBColorSpace);\n\tconst out = new three.Color();\n\tfor (let i = 0; i < normals.count; i++) {\n\t\t// Box-space -z faces the viewer.\n\t\tconst f = chart3DNormalShade('box', normals.getX(i), normals.getY(i), -normals.getZ(i));\n\t\tout.setRGB(\n\t\t\tMath.min(1, base.r * f),\n\t\t\tMath.min(1, base.g * f),\n\t\t\tMath.min(1, base.b * f),\n\t\t\tthree.SRGBColorSpace,\n\t\t);\n\t\tcolors[i * 3] = out.r;\n\t\tcolors[i * 3 + 1] = out.g;\n\t\tcolors[i * 3 + 2] = out.b;\n\t}\n\tgeometry.setAttribute('color', new three.Float32BufferAttribute(colors, 3));\n}\n\n/** An extruded, shaded prism geometry in box space. */\nexport function buildPrismGeometry(three: ThreeModule, prism: PerspPrism): THREE.BufferGeometry {\n\tif (isShapedPerspPrism(prism)) {\n\t\treturn buildShapedPrismGeometry(three, prism);\n\t}\n\tconst shape = new three.Shape(prism.outline.map(([x, y]) => new three.Vector2(x, y)));\n\tconst extruded = new three.ExtrudeGeometry(shape, {\n\t\tdepth: Math.max(prism.z1 - prism.z0, 1e-6),\n\t\tbevelEnabled: false,\n\t\tsteps: 1,\n\t});\n\tconst geometry = extruded.index ? extruded.toNonIndexed() : extruded;\n\tif (geometry !== extruded) {\n\t\textruded.dispose();\n\t}\n\tgeometry.translate(0, 0, prism.z0);\n\tgeometry.computeVertexNormals();\n\tshadePerspGeometry(three, geometry, prism.color);\n\treturn geometry;\n}\n\n/** The wall gridlines and floor edges of a perspective layout, in box space. */\nexport function buildPerspGridlines(\n\tthree: ThreeModule,\n\tlayout: Pick<PerspChartLayout, 'gridlines'>,\n): THREE.LineSegments {\n\tconst points: number[] = [];\n\tfor (const line of layout.gridlines) {\n\t\tpoints.push(...line.from, ...line.to);\n\t}\n\tconst geometry = new three.BufferGeometry();\n\tgeometry.setAttribute('position', new three.Float32BufferAttribute(points, 3));\n\treturn new three.LineSegments(geometry, new three.LineBasicMaterial({ color: GRIDLINE_COLOR }));\n}\n\n/** Build the gridlines and prism meshes of a perspective layout. */\nexport function buildPerspMeshes(\n\tthree: ThreeModule,\n\tlayout: Pick<PerspChartLayout, 'view' | 'gridlines'>,\n\tprisms: ReadonlyArray<PerspPrism>,\n): PerspMeshResult {\n\tconst group = new three.Group();\n\tgroup.matrixAutoUpdate = false;\n\tgroup.matrix.copy(perspBoxMatrix(three, layout.view));\n\n\tconst gridlines = buildPerspGridlines(three, layout);\n\tgroup.add(gridlines);\n\n\tconst material = new three.MeshBasicMaterial({ vertexColors: true, side: three.DoubleSide });\n\tconst meshes = prisms.map((prism) => {\n\t\tconst mesh = new three.Mesh(buildPrismGeometry(three, prism), material);\n\t\tmesh.userData = { seriesIndex: prism.seriesIndex, pointIndex: prism.pointIndex };\n\t\tgroup.add(mesh);\n\t\treturn mesh;\n\t});\n\n\treturn {\n\t\tgroup,\n\t\tmeshes,\n\t\tsetPrism(i, prism) {\n\t\t\tconst mesh = meshes[i];\n\t\t\tif (!mesh) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst previous = mesh.geometry;\n\t\t\tmesh.geometry = buildPrismGeometry(three, prism);\n\t\t\tprevious.dispose();\n\t\t},\n\t\tdispose() {\n\t\t\tgridlines.geometry.dispose();\n\t\t\t(gridlines.material as THREE.Material).dispose();\n\t\t\tmaterial.dispose();\n\t\t\tfor (const mesh of meshes) {\n\t\t\t\tmesh.geometry.dispose();\n\t\t\t}\n\t\t},\n\t};\n}\n","/**\n * The 3-D Surface chart (`c:surface3DChart`, and `c:surfaceChart` under the\n * 3D opt-in) on the perspective box (`chart-3d-persp-layout.ts`), as pure\n * geometry: PowerPoint colours a surface by VALUE BAND, one band per major\n * unit of the value axis (`gt/chart-16,17`: bands 0-0.5, 0.5-1, ... each in\n * its own colour, listed in the legend in place of the series).\n *\n * - The surface is a grid over categories (x) and series (z), series 1 on the\n * front edge and the last on the back wall. Each grid cell is split into two\n * triangles and each triangle clipped into the bands it crosses.\n * - Band colours come from `c:bandFmts` (fill, or the line colour of a\n * wireframe), else the chart palette cycle PowerPoint uses (accents 1-6,\n * then the same at 60% luminance).\n * - `c:wireframe` draws, for every band, the grid of the surface clamped\n * into that band in the band's colour (so a band the surface rises through\n * shows as a flat grid at its top edge), instead of fills.\n *\n * @module chart-3d-persp-surface\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\n\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport { perspValueY } from './chart-3d-persp-marks';\nimport { shade } from './chart-palette';\n\ntype Vec3 = [number, number, number];\n\nexport interface SurfaceBand {\n\t/** Legend text, e.g. `0-0.5`. */\n\tlabel: string;\n\tcolor: string;\n}\n\nexport interface SurfaceGeometry {\n\tbands: SurfaceBand[];\n\t/** Filled triangles as box-space vertex triples, with each triangle's band. */\n\ttriangles: Array<{ points: [Vec3, Vec3, Vec3]; band: number }>;\n\t/** Wireframe segments with each piece's band. */\n\tsegments: Array<{ from: Vec3; to: Vec3; band: number }>;\n}\n\ntype LayoutCore = Pick<PerspChartLayout, 'view' | 'range' | 'valueScale' | 'categoryX'>;\n\n/** Box z of series row `s` of `n` (front edge to back wall). */\nexport function surfaceRowZ(layout: Pick<LayoutCore, 'view'>, s: number, n: number): number {\n\treturn n > 1 ? (s / (n - 1)) * layout.view.box.d : layout.view.box.d / 2;\n}\n\n/** The value band edges (min, min + unit, ..., max). */\nfunction bandEdges(range: LayoutCore['range']): number[] {\n\tconst unit = range.majorUnit > 0 ? range.majorUnit : range.max - range.min || 1;\n\tconst edges: number[] = [];\n\tfor (let v = range.min; v < range.max - unit * 1e-9; v += unit) {\n\t\tedges.push(Number(v.toPrecision(12)));\n\t}\n\tedges.push(range.max);\n\treturn edges;\n}\n\nfunction formatEdge(v: number): string {\n\treturn String(Number(v.toPrecision(10)));\n}\n\n/** Colours and legend labels for each band. */\nexport function surfaceBands(\n\tchartData: PptxChartData,\n\trange: LayoutCore['range'],\n\tpalette: readonly string[],\n): SurfaceBand[] {\n\tconst edges = bandEdges(range);\n\treturn edges.slice(0, -1).map((lo, i) => {\n\t\tconst fmt = chartData.bandFmts?.find((b) => b.index === i)?.spPr;\n\t\tconst cycle = palette.length > 0 ? palette : ['#4472C4'];\n\t\tconst base = cycle[i % cycle.length];\n\t\tconst fallback = Math.floor(i / cycle.length) % 2 === 1 ? shade(base, 0.4) : base;\n\t\treturn {\n\t\t\tlabel: `${formatEdge(lo)}-${formatEdge(edges[i + 1])}`,\n\t\t\tcolor: fmt?.fillColor ?? fmt?.strokeColor ?? fallback,\n\t\t};\n\t});\n}\n\n/** Clip a polygon to `lo <= y <= hi` (box y). */\nfunction clipY(poly: Vec3[], lo: number, hi: number): Vec3[] {\n\tconst clip = (pts: Vec3[], keep: (p: Vec3) => boolean, edge: number): Vec3[] => {\n\t\tconst out: Vec3[] = [];\n\t\tfor (let i = 0; i < pts.length; i++) {\n\t\t\tconst a = pts[i];\n\t\t\tconst b = pts[(i + 1) % pts.length];\n\t\t\tconst ina = keep(a);\n\t\t\tconst inb = keep(b);\n\t\t\tif (ina) {\n\t\t\t\tout.push(a);\n\t\t\t}\n\t\t\tif (ina !== inb) {\n\t\t\t\tconst t = (edge - a[1]) / (b[1] - a[1]);\n\t\t\t\tout.push([a[0] + (b[0] - a[0]) * t, edge, a[2] + (b[2] - a[2]) * t]);\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t};\n\treturn clip(\n\t\tclip(poly, (p) => p[1] >= lo, lo),\n\t\t(p) => p[1] <= hi,\n\t\thi,\n\t);\n}\n\n/** A grid cell's two triangles. */\nfunction cellTriangles(\n\tpoint: (s: number, c: number) => Vec3,\n\ts: number,\n\tc: number,\n): Array<[Vec3, Vec3, Vec3]> {\n\treturn [\n\t\t[point(s, c), point(s, c + 1), point(s + 1, c + 1)],\n\t\t[point(s, c), point(s + 1, c + 1), point(s + 1, c)],\n\t];\n}\n\n/**\n * A grid edge drawn once per band with the surface clamped into that band\n * (PowerPoint's wireframe: each band is its own layer, flat where the\n * surface runs above or below it). Only the front series line keeps its\n * flat stretches: that is all `gt/chart-17` shows of the lower layers.\n */\nfunction clampedBandSegments(\n\ta: Vec3,\n\tb: Vec3,\n\tedgesY: number[],\n\tout: SurfaceGeometry['segments'],\n\tkeepFlat: boolean,\n): void {\n\tfor (let band = 0; band + 1 < edgesY.length; band++) {\n\t\tconst lo = edgesY[band];\n\t\tconst hi = edgesY[band + 1];\n\t\tconst cuts = [0, 1];\n\t\tfor (const e of [lo, hi]) {\n\t\t\tconst t = (e - a[1]) / (b[1] - a[1]);\n\t\t\tif (t > 0 && t < 1) {\n\t\t\t\tcuts.push(t);\n\t\t\t}\n\t\t}\n\t\tcuts.sort((x, y) => x - y);\n\t\tconst at = (t: number): Vec3 => [\n\t\t\ta[0] + (b[0] - a[0]) * t,\n\t\t\tMath.min(hi, Math.max(lo, a[1] + (b[1] - a[1]) * t)),\n\t\t\ta[2] + (b[2] - a[2]) * t,\n\t\t];\n\t\tfor (let i = 0; i + 1 < cuts.length; i++) {\n\t\t\tconst from = at(cuts[i]);\n\t\t\tconst to = at(cuts[i + 1]);\n\t\t\tconst flat = from[1] === to[1] && (from[1] === lo || from[1] === hi);\n\t\t\tif (keepFlat || !flat) {\n\t\t\t\tout.push({ from, to, band });\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * The surface's triangles (filled) or segments (wireframe) in box space;\n * `override` replaces one point's value (a drag preview).\n */\nexport function buildSurfaceGeometry(\n\tchartData: PptxChartData,\n\tlayout: LayoutCore,\n\tpalette: readonly string[],\n\toverride?: { seriesIndex: number; pointIndex: number; value: number },\n): SurfaceGeometry {\n\tconst nSer = chartData.series.length;\n\tconst nCat = layout.categoryX.length;\n\tconst bands = surfaceBands(chartData, layout.range, palette);\n\tconst edgesY = bandEdges(layout.range).map((v) => perspValueY(layout, v));\n\tconst point = (s: number, c: number): Vec3 => {\n\t\tlet v = chartData.series[s]?.values[c];\n\t\tif (override && override.seriesIndex === s && override.pointIndex === c) {\n\t\t\tv = override.value;\n\t\t}\n\t\tconst value = v !== undefined && Number.isFinite(v) ? v : layout.range.min;\n\t\treturn [layout.categoryX[c], perspValueY(layout, value), surfaceRowZ(layout, s, nSer)];\n\t};\n\tconst geometry: SurfaceGeometry = { bands, triangles: [], segments: [] };\n\tif (chartData.wireframe) {\n\t\tfor (let s = 0; s < nSer; s++) {\n\t\t\tfor (let c = 0; c < nCat; c++) {\n\t\t\t\tif (c + 1 < nCat) {\n\t\t\t\t\tclampedBandSegments(point(s, c), point(s, c + 1), edgesY, geometry.segments, s === 0);\n\t\t\t\t}\n\t\t\t\tif (s + 1 < nSer) {\n\t\t\t\t\tclampedBandSegments(point(s, c), point(s + 1, c), edgesY, geometry.segments, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn geometry;\n\t}\n\tfor (let s = 0; s + 1 < nSer; s++) {\n\t\tfor (let c = 0; c + 1 < nCat; c++) {\n\t\t\tfor (const tri of cellTriangles(point, s, c)) {\n\t\t\t\tfor (let b = 0; b < bands.length; b++) {\n\t\t\t\t\tconst piece = clipY(tri, edgesY[b], edgesY[b + 1]);\n\t\t\t\t\tfor (let i = 1; i + 1 < piece.length; i++) {\n\t\t\t\t\t\tgeometry.triangles.push({ points: [piece[0], piece[i], piece[i + 1]], band: b });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn geometry;\n}\n","/**\n * WebGL objects for the banded 3-D Surface (`chart-3d-persp-surface.ts`):\n * flat-shaded band triangles, or coloured band lines for a wireframe, plus an\n * invisible unclipped grid mesh for picking (a wireframe's hairlines are too\n * thin to hit).\n *\n * @module chart-3d-persp-surface-mesh\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport { perspValueY } from './chart-3d-persp-marks';\nimport { buildPerspGridlines } from './chart-3d-persp-mesh';\nimport { buildSurfaceGeometry, surfaceRowZ } from './chart-3d-persp-surface';\nimport { perspBoxMatrix } from './chart-3d-persp-view';\nimport { chart3DNormalShade } from './chart-3d-shading';\n\ntype ThreeModule = typeof THREE;\n\nexport interface SurfaceMarks {\n\tgroup: THREE.Group;\n\tpickTarget: THREE.Mesh;\n\trebuild: (override?: { seriesIndex: number; pointIndex: number; value: number }) => void;\n\tdispose: () => void;\n}\n\nfunction srgb(three: ThreeModule, hex: string, f: number): THREE.Color {\n\tconst base = new three.Color(hex).getRGB(new three.Color(), three.SRGBColorSpace);\n\treturn new three.Color().setRGB(\n\t\tMath.min(1, base.r * f),\n\t\tMath.min(1, base.g * f),\n\t\tMath.min(1, base.b * f),\n\t\tthree.SRGBColorSpace,\n\t);\n}\n\nfunction buildVisual(\n\tthree: ThreeModule,\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n\tpalette: readonly string[],\n\toverride?: { seriesIndex: number; pointIndex: number; value: number },\n): THREE.Object3D {\n\tconst geo = buildSurfaceGeometry(chartData, layout, palette, override);\n\tconst positions: number[] = [];\n\tconst colors: number[] = [];\n\tif (chartData.wireframe) {\n\t\tfor (const seg of geo.segments) {\n\t\t\tconst c = srgb(three, geo.bands[seg.band].color, 1);\n\t\t\tpositions.push(...seg.from, ...seg.to);\n\t\t\tcolors.push(c.r, c.g, c.b, c.r, c.g, c.b);\n\t\t}\n\t\tconst g = new three.BufferGeometry();\n\t\tg.setAttribute('position', new three.Float32BufferAttribute(positions, 3));\n\t\tg.setAttribute('color', new three.Float32BufferAttribute(colors, 3));\n\t\treturn new three.LineSegments(g, new three.LineBasicMaterial({ vertexColors: true }));\n\t}\n\tconst a = new three.Vector3();\n\tconst b = new three.Vector3();\n\tconst n = new three.Vector3();\n\tfor (const tri of geo.triangles) {\n\t\tconst [p0, p1, p2] = tri.points;\n\t\ta.set(p1[0] - p0[0], p1[1] - p0[1], p1[2] - p0[2]);\n\t\tb.set(p2[0] - p0[0], p2[1] - p0[1], p2[2] - p0[2]);\n\t\tn.crossVectors(a, b).normalize();\n\t\tif (n.y < 0) {\n\t\t\tn.negate();\n\t\t}\n\t\t// Box-space -z faces the viewer.\n\t\tconst c = srgb(three, geo.bands[tri.band].color, chart3DNormalShade('box', n.x, n.y, -n.z));\n\t\tpositions.push(...p0, ...p1, ...p2);\n\t\tcolors.push(c.r, c.g, c.b, c.r, c.g, c.b, c.r, c.g, c.b);\n\t}\n\tconst g = new three.BufferGeometry();\n\tg.setAttribute('position', new three.Float32BufferAttribute(positions, 3));\n\tg.setAttribute('color', new three.Float32BufferAttribute(colors, 3));\n\treturn new three.Mesh(\n\t\tg,\n\t\tnew three.MeshBasicMaterial({ vertexColors: true, side: three.DoubleSide }),\n\t);\n}\n\nfunction buildPickGeometry(\n\tthree: ThreeModule,\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n): THREE.BufferGeometry {\n\tconst nSer = chartData.series.length;\n\tconst nCat = layout.categoryX.length;\n\tconst at = (s: number, c: number): number[] => {\n\t\tconst v = chartData.series[s]?.values[c];\n\t\treturn [\n\t\t\tlayout.categoryX[c],\n\t\t\tperspValueY(layout, v !== undefined && Number.isFinite(v) ? v : layout.range.min),\n\t\t\tsurfaceRowZ(layout, s, nSer),\n\t\t];\n\t};\n\tconst positions: number[] = [];\n\tfor (let s = 0; s + 1 < nSer; s++) {\n\t\tfor (let c = 0; c + 1 < nCat; c++) {\n\t\t\tpositions.push(...at(s, c), ...at(s, c + 1), ...at(s + 1, c + 1));\n\t\t\tpositions.push(...at(s, c), ...at(s + 1, c + 1), ...at(s + 1, c));\n\t\t}\n\t}\n\tconst g = new three.BufferGeometry();\n\tg.setAttribute('position', new three.Float32BufferAttribute(positions, 3));\n\treturn g;\n}\n\nfunction disposeObject(object: THREE.Object3D): void {\n\tconst withGeometry = object as THREE.Object3D & {\n\t\tgeometry?: THREE.BufferGeometry;\n\t\tmaterial?: THREE.Material;\n\t};\n\twithGeometry.geometry?.dispose();\n\twithGeometry.material?.dispose();\n}\n\n/** Build the surface's objects into a box-space group. */\nexport function buildSurfaceMarks(\n\tthree: ThreeModule,\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n\tpalette: readonly string[],\n): SurfaceMarks {\n\tconst group = new three.Group();\n\tgroup.matrixAutoUpdate = false;\n\tgroup.matrix.copy(perspBoxMatrix(three, layout.view));\n\tconst gridlines = buildPerspGridlines(three, layout);\n\tgroup.add(gridlines);\n\tlet visual = buildVisual(three, chartData, layout, palette);\n\tgroup.add(visual);\n\tconst pickMaterial = new three.MeshBasicMaterial({ side: three.DoubleSide, visible: false });\n\tconst pickTarget = new three.Mesh(buildPickGeometry(three, chartData, layout), pickMaterial);\n\tgroup.add(pickTarget);\n\treturn {\n\t\tgroup,\n\t\tpickTarget,\n\t\trebuild(override) {\n\t\t\tgroup.remove(visual);\n\t\t\tdisposeObject(visual);\n\t\t\tvisual = buildVisual(three, chartData, layout, palette, override);\n\t\t\tgroup.add(visual);\n\t\t},\n\t\tdispose() {\n\t\t\tdisposeObject(visual);\n\t\t\tdisposeObject(gridlines);\n\t\t\tpickTarget.geometry.dispose();\n\t\t\tpickMaterial.dispose();\n\t\t},\n\t};\n}\n","/**\n * The marks of a perspective 3D chart scene (`chart-3d-persp-scene.ts`)\n * behind one interface, so the scene, its picking and its drag preview do\n * not care whether they draw line / area prisms or a banded surface.\n *\n * @module chart-3d-persp-mark-set\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { Chart3DPoint } from './chart-3d-mark-interaction';\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport { buildPerspPrisms, perspRowSpan, perspValueY } from './chart-3d-persp-marks';\nimport { buildPerspMeshes } from './chart-3d-persp-mesh';\nimport { surfaceRowZ } from './chart-3d-persp-surface';\nimport { buildSurfaceMarks } from './chart-3d-persp-surface-mesh';\n\ntype ThreeModule = typeof THREE;\n\nexport interface PerspMarkSet {\n\t/** Box-space root (its matrix is the box placement). */\n\tgroup: THREE.Group;\n\t/** Objects rays are cast against. */\n\ttargets: THREE.Object3D[];\n\t/** The data point at a box-space hit on `object`. */\n\tpointAt: (object: THREE.Object3D, local: THREE.Vector3) => Chart3DPoint | null;\n\t/** Box-space anchor of a point drawn at `value` (selection marker, drag scale). */\n\tanchor: (point: Chart3DPoint, value: number) => [number, number, number];\n\t/** Whether a point's value can be dragged. */\n\tdraggable: boolean;\n\t/** Redraw with one point at `value` (a drag preview). */\n\tpreview: (point: Chart3DPoint, value: number) => void;\n\tdispose: () => void;\n}\n\nfunction nearestIndex(xs: readonly number[], x: number): number {\n\tlet best = 0;\n\txs.forEach((v, i) => {\n\t\tif (Math.abs(v - x) < Math.abs(xs[best] - x)) {\n\t\t\tbest = i;\n\t\t}\n\t});\n\treturn best;\n}\n\n/** Build the mark set for a laid-out perspective chart. */\nexport function buildPerspMarkSet(\n\tthree: ThreeModule,\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n\tpalette: readonly string[],\n): PerspMarkSet {\n\tif (layout.kind === 'surface') {\n\t\tconst nSer = chartData.series.length;\n\t\tconst zs = Array.from({ length: nSer }, (_, s) => surfaceRowZ(layout, s, nSer));\n\t\tconst surface = buildSurfaceMarks(three, chartData, layout, palette);\n\t\treturn {\n\t\t\tgroup: surface.group,\n\t\t\ttargets: [surface.pickTarget],\n\t\t\tpointAt: (_object, local) => ({\n\t\t\t\tseriesIndex: nearestIndex(zs, local.z),\n\t\t\t\tpointIndex: nearestIndex(layout.categoryX, local.x),\n\t\t\t}),\n\t\t\tanchor: (point, value) => [\n\t\t\t\tlayout.categoryX[point.pointIndex],\n\t\t\t\tperspValueY(layout, value),\n\t\t\t\tzs[point.seriesIndex],\n\t\t\t],\n\t\t\tdraggable: true,\n\t\t\tpreview: (point, value) => surface.rebuild({ ...point, value }),\n\t\t\tdispose: () => surface.dispose(),\n\t\t};\n\t}\n\tif (layout.kind === 'bar') {\n\t\treturn buildBarMarkSet(three, chartData, layout);\n\t}\n\tconst stacked = layout.grouping !== 'standard' && layout.grouping !== 'clustered';\n\tconst meshes = buildPerspMeshes(three, layout, buildPerspPrisms(chartData, layout));\n\treturn {\n\t\tgroup: meshes.group,\n\t\ttargets: meshes.meshes,\n\t\tpointAt(object, local) {\n\t\t\tconst seriesIndex = (object.userData as { seriesIndex?: number }).seriesIndex;\n\t\t\treturn seriesIndex === undefined\n\t\t\t\t? null\n\t\t\t\t: { seriesIndex, pointIndex: nearestIndex(layout.categoryX, local.x) };\n\t\t},\n\t\tanchor(point, value) {\n\t\t\tconst [z0, z1] = perspRowSpan(layout, stacked ? 0 : point.seriesIndex);\n\t\t\treturn [layout.categoryX[point.pointIndex], perspValueY(layout, value), (z0 + z1) / 2];\n\t\t},\n\t\tdraggable: !stacked,\n\t\tpreview(point, value) {\n\t\t\tmeshes.setPrism(\n\t\t\t\tpoint.seriesIndex,\n\t\t\t\tbuildPerspPrisms(chartData, layout, { ...point, value })[point.seriesIndex],\n\t\t\t);\n\t\t},\n\t\tdispose: () => meshes.dispose(),\n\t};\n}\n\n/** Bars: one prism per point, dragged one at a time (not stacked ones, as in the 2D chart). */\nfunction buildBarMarkSet(\n\tthree: ThreeModule,\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n): PerspMarkSet {\n\tconst prisms = buildPerspPrisms(chartData, layout);\n\tconst meshes = buildPerspMeshes(three, layout, prisms);\n\tconst indexOf = (point: Chart3DPoint): number =>\n\t\tprisms.findIndex(\n\t\t\t(p) => p.seriesIndex === point.seriesIndex && p.pointIndex === point.pointIndex,\n\t\t);\n\treturn {\n\t\tgroup: meshes.group,\n\t\ttargets: meshes.meshes,\n\t\tpointAt(object) {\n\t\t\tconst data = object.userData as { seriesIndex?: number; pointIndex?: number };\n\t\t\treturn data.seriesIndex === undefined || data.pointIndex === undefined\n\t\t\t\t? null\n\t\t\t\t: { seriesIndex: data.seriesIndex, pointIndex: data.pointIndex };\n\t\t},\n\t\tanchor(point, value) {\n\t\t\tconst prism = prisms[indexOf(point)];\n\t\t\tif (!prism) {\n\t\t\t\treturn [0, perspValueY(layout, value), 0];\n\t\t\t}\n\t\t\tconst along = prism.outline.map(([x, y]) => (layout.horizontal ? y : x));\n\t\t\tconst mid = (Math.min(...along) + Math.max(...along)) / 2;\n\t\t\tconst v = perspValueY(layout, value);\n\t\t\tconst z = (prism.z0 + prism.z1) / 2;\n\t\t\treturn layout.horizontal ? [v, mid, z] : [mid, v, z];\n\t\t},\n\t\tdraggable: layout.grouping === 'clustered' || layout.grouping === 'standard',\n\t\tpreview(point, value) {\n\t\t\tconst i = indexOf(point);\n\t\t\tconst next = buildPerspPrisms(chartData, layout, { ...point, value })[i];\n\t\t\tif (next) {\n\t\t\t\tmeshes.setPrism(i, next);\n\t\t\t}\n\t\t},\n\t\tdispose: () => meshes.dispose(),\n\t};\n}\n","/**\n * `<pptx-three-view>` scene for the perspective 3D line / area / surface\n * charts (`chart-3d-persp-layout.ts`): the box's gridlines and marks in WebGL\n * through PowerPoint's fitted camera, its labels, title and legend in the SVG\n * overlay, and hover / select / drag on the shared mark interaction.\n *\n * A pick resolves to the nearest data point on the hit mark; a vertical drag\n * moves that point's value (not a stacked area's, as in the 2D chart), at the\n * screen scale of the value axis at that point. A surface's legend lists its\n * value bands, as PowerPoint's does.\n *\n * @module chart-3d-persp-scene\n */\nimport type { PptxChartData } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { ThreeViewContext, ThreeViewScene } from '../three-view/types';\nimport { renderChart3DChromeOverlaySvg } from './chart-3d-chrome-overlay';\nimport { attachChart3DMarkInteraction } from './chart-3d-mark-interaction';\nimport type { Chart3DPoint } from './chart-3d-mark-interaction';\nimport type { PerspChartLayout } from './chart-3d-persp-layout';\nimport { buildPerspMarkSet } from './chart-3d-persp-mark-set';\nimport { surfaceBands } from './chart-3d-persp-surface';\nimport { buildPerspCamera, perspToScreen } from './chart-3d-persp-view';\nimport { roundDragValue } from './chart-interaction';\nimport { DEFAULT_PALETTE } from './chart-view-model-scale';\nimport type { ChartViewModel, LegendEntry } from './chart-view-model-types';\n\n/** Selection marker colour (the 2D selected-mark accent). */\nconst SELECTED_COLOR = 0x2563eb;\n\nexport interface PerspSceneInput {\n\tvm: ChartViewModel;\n\tlayout: PerspChartLayout;\n\tchartData: PptxChartData;\n\tcategoryLabels: ReadonlyArray<string>;\n}\n\n/** A surface's legend: one entry per value band (hollow keys for a wireframe). */\nfunction surfaceLegend(\n\tchartData: PptxChartData,\n\tlayout: PerspChartLayout,\n\tpalette: readonly string[],\n\tbackground: string,\n\ttextStyle: LegendEntry['textStyle'],\n): LegendEntry[] {\n\treturn surfaceBands(chartData, layout.range, palette).map((band) => ({\n\t\tlabel: band.label,\n\t\tcolor: band.color,\n\t\t...(textStyle ? { textStyle } : {}),\n\t\t...(chartData.wireframe\n\t\t\t? {\n\t\t\t\t\tlineSwatch: {\n\t\t\t\t\t\tprimitives: [\n\t\t\t\t\t\t\t{ kind: 'rect' as const, x: 0, y: -7, w: 10, h: 10, fill: band.color },\n\t\t\t\t\t\t\t{ kind: 'rect' as const, x: 1, y: -6, w: 8, h: 8, fill: background },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t}));\n}\n\nexport function mountPerspChartView(input: PerspSceneInput, ctx: ThreeViewContext): ThreeViewScene {\n\tconst three = ctx.three;\n\tconst { vm, layout, chartData } = input;\n\tconst palette = chartData.colorPalette?.length ? chartData.colorPalette : DEFAULT_PALETTE;\n\tconst camera = buildPerspCamera(three, layout.view, vm.svgWidth, vm.svgHeight);\n\tconst scene = new three.Scene();\n\tconst marks = buildPerspMarkSet(three, chartData, layout, palette);\n\tscene.add(marks.group);\n\n\tconst markerGeometry = new three.OctahedronGeometry(layout.view.box.w * 0.012);\n\tconst markerMaterial = new three.MeshBasicMaterial({ color: SELECTED_COLOR });\n\tconst marker = new three.Mesh(markerGeometry, markerMaterial);\n\tmarker.visible = false;\n\tmarks.group.add(marker);\n\n\tconst overlay = renderChart3DChromeOverlaySvg(ctx.document, vm, {\n\t\tlabels: layout.labels,\n\t\treverseLegend: layout.horizontal && layout.grouping === 'clustered',\n\t\tlegend:\n\t\t\tlayout.kind === 'surface'\n\t\t\t\t? surfaceLegend(\n\t\t\t\t\t\tchartData,\n\t\t\t\t\t\tlayout,\n\t\t\t\t\t\tpalette,\n\t\t\t\t\t\tvm.areaFill ?? '#ffffff',\n\t\t\t\t\t\tvm.legend[0]?.textStyle,\n\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t});\n\tctx.overlay.appendChild(overlay);\n\n\tconst valueAt = (point: Chart3DPoint): number | undefined => {\n\t\tconst v = chartData.series[point.seriesIndex]?.values[point.pointIndex];\n\t\treturn v !== undefined && Number.isFinite(v) ? v : undefined;\n\t};\n\tconst placeMarker = (point: Chart3DPoint, value: number): void => {\n\t\tmarker.position.set(...marks.anchor(point, value));\n\t};\n\n\tconst interaction = attachChart3DMarkInteraction({\n\t\tctx,\n\t\tcamera,\n\t\tscene,\n\t\tsvgHeight: vm.svgHeight,\n\t\tchartData,\n\t\tcategoryLabels: input.categoryLabels,\n\t\tseriesNames: chartData.series.map((s) => s.name),\n\t\tadapter: {\n\t\t\ttargets: marks.targets,\n\t\t\tpointAt: (hit) => marks.pointAt(hit.object, marks.group.worldToLocal(hit.point.clone())),\n\t\t\tvalueOf: valueAt,\n\t\t\tbeginDrag(point) {\n\t\t\t\tconst start = valueAt(point);\n\t\t\t\tif (!marks.draggable || start === undefined) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\t// Screen px per value unit along the value axis at this point (up for\n\t\t\t\t// columns, right for horizontal bars); the pointer delta is projected\n\t\t\t\t// onto it, so either direction drags.\n\t\t\t\tconst unit = layout.range.majorUnit || 1;\n\t\t\t\tconst a = marks.anchor(point, start);\n\t\t\t\tconst step = unit * layout.valueScale;\n\t\t\t\tconst b: [number, number, number] = layout.horizontal\n\t\t\t\t\t? [a[0] + step, a[1], a[2]]\n\t\t\t\t\t: [a[0], a[1] + step, a[2]];\n\t\t\t\tconst s0 = perspToScreen(layout.view, a);\n\t\t\t\tconst s1 = perspToScreen(layout.view, b);\n\t\t\t\tconst ux = (s1.x - s0.x) / unit;\n\t\t\t\tconst uy = (s1.y - s0.y) / unit;\n\t\t\t\tconst len2 = ux * ux + uy * uy || 1;\n\t\t\t\tconst span = layout.range.max - layout.range.min;\n\t\t\t\treturn {\n\t\t\t\t\tpreview(dx, dy) {\n\t\t\t\t\t\tconst value = roundDragValue(start + (dx * ux + dy * uy) / len2, {\n\t\t\t\t\t\t\tmin: layout.range.min,\n\t\t\t\t\t\t\tmax: layout.range.max,\n\t\t\t\t\t\t\tspan,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tmarks.preview(point, value);\n\t\t\t\t\t\tif (marker.visible) {\n\t\t\t\t\t\t\tplaceMarker(point, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\thighlight(point) {\n\t\t\t\tconst value = point ? valueAt(point) : undefined;\n\t\t\t\tmarker.visible = point !== null && value !== undefined;\n\t\t\t\tif (point && value !== undefined) {\n\t\t\t\t\tplaceMarker(point, value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdispose() {\n\t\t\t\tmarkerGeometry.dispose();\n\t\t\t\tmarkerMaterial.dispose();\n\t\t\t},\n\t\t},\n\t});\n\n\tlet disposed = false;\n\treturn {\n\t\trender(renderer: THREE.WebGLRenderer) {\n\t\t\trenderer.render(scene, camera);\n\t\t},\n\t\tresize() {\n\t\t\t// The projection is fixed in authored chart px, like the overlay.\n\t\t},\n\t\tisAnimating: () => false,\n\t\tsetInteractive: (on) => interaction.setInteractive(on),\n\t\tsetSelectedPart: (part) => interaction.setSelectedPart(part),\n\t\tdispose() {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdisposed = true;\n\t\t\tinteraction.dispose();\n\t\t\tmarks.dispose();\n\t\t\toverlay.remove();\n\t\t},\n\t};\n}\n","/**\n * WebGL geometry for the 3-D Pie (`chart-3d-pie-layout.ts`): one mesh per\n * slice (top, rim, the two cut faces, bottom) with baked vertex colours, and\n * the white slice seams PowerPoint draws (`a:ln` in `lt1`).\n *\n * Shading, fitted to `gt/chart-14,15`: the top face keeps the slice colour;\n * the rim darkens from the left toward the right, `max(0.385, 0.57 - 0.275\n * phi)` with `phi` the rim normal's angle to the right of straight toward the\n * viewer (radians). The flat cut faces of an exploded pie follow their own\n * rule, lighter turned right: `0.5 + 0.2 sin(phi)` (0.70 at +59 degrees,\n * 0.42 at -23, 0.39 at -59, 0.3 at -90 on `gt/chart-15`).\n *\n * @module chart-3d-pie-marks\n */\nimport type * as THREE from 'three';\n\nimport { perspBoxMatrix } from './chart-3d-persp-view';\nimport type { PieChartLayout, PieSlice } from './chart-3d-pie-layout';\nimport { pieRimPoint } from './chart-3d-pie-layout';\n\ntype ThreeModule = typeof THREE;\ntype Vec3 = [number, number, number];\n\nconst SEAM_COLOR = 0xffffff;\n/** Arc segments per full turn. */\nconst SEGMENTS_PER_TURN = 144;\n\n/** Shade multiplier for a box-space normal (box -z faces the viewer); `cut` for a slice's flat cut face. */\nexport function pieFaceShade(nx: number, ny: number, nz: number, cut = false): number {\n\tif (ny > 0.5) {\n\t\treturn 1;\n\t}\n\tif (ny < -0.5) {\n\t\treturn 0.3;\n\t}\n\tconst phi = Math.atan2(nx, -nz);\n\tif (cut) {\n\t\treturn 0.5 + 0.2 * Math.sin(phi);\n\t}\n\treturn Math.max(0.385, 0.57 - 0.275 * phi);\n}\n\nexport interface PieMarks {\n\tgroup: THREE.Group;\n\tmeshes: THREE.Mesh[];\n\t/** Rebuild the slices (a drag preview). */\n\tsetSlices: (slices: ReadonlyArray<PieSlice>) => void;\n\tdispose: () => void;\n}\n\ninterface SliceBuffers {\n\tpositions: number[];\n\tcolors: number[];\n\tseams: number[];\n}\n\nfunction sliceBuffers(three: ThreeModule, layout: PieChartLayout, slice: PieSlice): SliceBuffers {\n\tconst base = new three.Color(slice.color).getRGB(new three.Color(), three.SRGBColorSpace);\n\tconst out = new three.Color();\n\tconst positions: number[] = [];\n\tconst colors: number[] = [];\n\tconst cx = layout.center.x + slice.offset.x;\n\tconst cz = layout.center.z + slice.offset.z;\n\tconst top = layout.center.y;\n\tconst r = layout.radius;\n\tconst push = (p: Vec3, n: Vec3, cut = false): void => {\n\t\tconst f = pieFaceShade(n[0], n[1], n[2], cut);\n\t\tout.setRGB(\n\t\t\tMath.min(1, base.r * f),\n\t\t\tMath.min(1, base.g * f),\n\t\t\tMath.min(1, base.b * f),\n\t\t\tthree.SRGBColorSpace,\n\t\t);\n\t\tpositions.push(...p);\n\t\tcolors.push(out.r, out.g, out.b);\n\t};\n\tconst span = slice.endAngle - slice.startAngle;\n\tconst steps = Math.max(2, Math.ceil((span / (Math.PI * 2)) * SEGMENTS_PER_TURN));\n\tconst angles = Array.from({ length: steps + 1 }, (_, i) => slice.startAngle + (span * i) / steps);\n\tconst rim = (a: number, y: number): Vec3 => {\n\t\tconst p = pieRimPoint(cx, cz, r, a);\n\t\treturn [p.x, y, p.z];\n\t};\n\tconst radial = (a: number): Vec3 => [Math.sin(a), 0, Math.cos(a)];\n\tfor (let i = 0; i < steps; i++) {\n\t\tconst a0 = angles[i];\n\t\tconst a1 = angles[i + 1];\n\t\t// Top and bottom fans.\n\t\tpush([cx, top, cz], [0, 1, 0]);\n\t\tpush(rim(a0, top), [0, 1, 0]);\n\t\tpush(rim(a1, top), [0, 1, 0]);\n\t\tpush([cx, 0, cz], [0, -1, 0]);\n\t\tpush(rim(a1, 0), [0, -1, 0]);\n\t\tpush(rim(a0, 0), [0, -1, 0]);\n\t\t// Rim, smooth-shaded by the radial normal.\n\t\tpush(rim(a0, top), radial(a0));\n\t\tpush(rim(a0, 0), radial(a0));\n\t\tpush(rim(a1, 0), radial(a1));\n\t\tpush(rim(a0, top), radial(a0));\n\t\tpush(rim(a1, 0), radial(a1));\n\t\tpush(rim(a1, top), radial(a1));\n\t}\n\t// The two cut faces, normals perpendicular to their radius.\n\tfor (const [a, sign] of [\n\t\t[slice.startAngle, -1],\n\t\t[slice.endAngle, 1],\n\t] as const) {\n\t\tconst n: Vec3 = [sign * Math.cos(a), 0, -sign * Math.sin(a)];\n\t\tpush([cx, top, cz], n, true);\n\t\tpush([cx, 0, cz], n, true);\n\t\tpush(rim(a, 0), n, true);\n\t\tpush([cx, top, cz], n, true);\n\t\tpush(rim(a, 0), n, true);\n\t\tpush(rim(a, top), n, true);\n\t}\n\tconst seams: number[] = [];\n\tfor (let i = 0; i < steps; i++) {\n\t\tseams.push(...rim(angles[i], top), ...rim(angles[i + 1], top));\n\t}\n\tfor (const a of [slice.startAngle, slice.endAngle]) {\n\t\tseams.push(cx, top, cz, ...rim(a, top), ...rim(a, top), ...rim(a, 0));\n\t}\n\treturn { positions, colors, seams };\n}\n\n/** Build the slice meshes and seams of a pie layout. */\nexport function buildPieMarks(three: ThreeModule, layout: PieChartLayout): PieMarks {\n\tconst group = new three.Group();\n\tgroup.matrixAutoUpdate = false;\n\tgroup.matrix.copy(perspBoxMatrix(three, layout.view));\n\tconst material = new three.MeshBasicMaterial({\n\t\tvertexColors: true,\n\t\tside: three.DoubleSide,\n\t\tpolygonOffset: true,\n\t\tpolygonOffsetFactor: 1,\n\t\tpolygonOffsetUnits: 1,\n\t});\n\tconst seamMaterial = new three.LineBasicMaterial({ color: SEAM_COLOR });\n\t// Stable array: the scene's pick targets keep pointing at it across rebuilds.\n\tconst meshes: THREE.Mesh[] = [];\n\tlet seams: THREE.LineSegments | null = null;\n\tconst clear = (): void => {\n\t\tfor (const mesh of meshes) {\n\t\t\tgroup.remove(mesh);\n\t\t\tmesh.geometry.dispose();\n\t\t}\n\t\tif (seams) {\n\t\t\tgroup.remove(seams);\n\t\t\tseams.geometry.dispose();\n\t\t}\n\t};\n\tconst build = (slices: ReadonlyArray<PieSlice>): void => {\n\t\tclear();\n\t\tconst seamPoints: number[] = [];\n\t\tconst built = slices.map((slice) => {\n\t\t\tconst b = sliceBuffers(three, layout, slice);\n\t\t\tconst geometry = new three.BufferGeometry();\n\t\t\tgeometry.setAttribute('position', new three.Float32BufferAttribute(b.positions, 3));\n\t\t\tgeometry.setAttribute('color', new three.Float32BufferAttribute(b.colors, 3));\n\t\t\tconst mesh = new three.Mesh(geometry, material);\n\t\t\tmesh.userData = { seriesIndex: 0, pointIndex: slice.pointIndex };\n\t\t\tgroup.add(mesh);\n\t\t\tseamPoints.push(...b.seams);\n\t\t\treturn mesh;\n\t\t});\n\t\tmeshes.splice(0, meshes.length, ...built);\n\t\tconst seamGeometry = new three.BufferGeometry();\n\t\tseamGeometry.setAttribute('position', new three.Float32BufferAttribute(seamPoints, 3));\n\t\tseams = new three.LineSegments(seamGeometry, seamMaterial);\n\t\tgroup.add(seams);\n\t};\n\tbuild(layout.slices);\n\treturn {\n\t\tgroup,\n\t\tmeshes,\n\t\tsetSlices: build,\n\t\tdispose() {\n\t\t\tclear();\n\t\t\tmaterial.dispose();\n\t\t\tseamMaterial.dispose();\n\t\t},\n\t};\n}\n","/**\n * `<pptx-three-view>` scene for the 3-D Pie (`chart-3d-pie-layout.ts`): the\n * slices in WebGL through the fitted perspective camera, title and legend in\n * the SVG overlay, and hover / select / drag on the shared mark interaction.\n *\n * A slice drag sweeps its trailing edge around the pie like the flat pie\n * (`resolvePieSliceShareValue`): the pointer is unprojected onto the pie's top\n * plane and its angle there sets the slice's share.\n *\n * @module chart-3d-pie-scene\n */\nimport type { PptxChartData, PptxElement } from 'pptx-viewer-core';\nimport type * as THREE from 'three';\n\nimport type { ThreeViewContext, ThreeViewScene } from '../three-view/types';\nimport { renderChart3DChromeOverlaySvg } from './chart-3d-chrome-overlay';\nimport { attachChart3DMarkInteraction } from './chart-3d-mark-interaction';\nimport { buildPerspCamera, perspScreenToPlaneY } from './chart-3d-persp-view';\nimport { computePieChartLayout, pieRimPoint } from './chart-3d-pie-layout';\nimport type { PieChartLayout } from './chart-3d-pie-layout';\nimport { buildPieMarks } from './chart-3d-pie-marks';\nimport { resolvePieSliceShareValue } from './chart-interaction-pie';\nimport type { ChartViewModel } from './chart-view-model-types';\n\n/** Selection marker colour (the 2D selected-mark accent). */\nconst SELECTED_COLOR = 0x2563eb;\n\nexport interface PieSceneInput {\n\telement: PptxElement;\n\tvm: ChartViewModel;\n\tlayout: PieChartLayout;\n\tchartData: PptxChartData;\n\tcategoryLabels: ReadonlyArray<string>;\n}\n\n/** The layout's slices with one value replaced (a drag preview). */\nfunction slicesWith(input: PieSceneInput, pointIndex: number, value: number) {\n\tconst series = input.chartData.series.map((s, i) =>\n\t\ti === 0 ? { ...s, values: s.values.map((v, j) => (j === pointIndex ? value : v)) } : s,\n\t);\n\tconst element = {\n\t\t...input.element,\n\t\tchartData: { ...input.chartData, series },\n\t} as PptxElement;\n\treturn computePieChartLayout(element, input.vm)?.slices ?? input.layout.slices;\n}\n\nexport function mountPieChartView(input: PieSceneInput, ctx: ThreeViewContext): ThreeViewScene {\n\tconst three = ctx.three;\n\tconst { vm, layout, chartData } = input;\n\tconst camera = buildPerspCamera(three, layout.view, vm.svgWidth, vm.svgHeight);\n\tconst scene = new three.Scene();\n\tconst marks = buildPieMarks(three, layout);\n\tscene.add(marks.group);\n\n\tconst markerGeometry = new three.OctahedronGeometry(0.03);\n\tconst markerMaterial = new three.MeshBasicMaterial({ color: SELECTED_COLOR });\n\tconst marker = new three.Mesh(markerGeometry, markerMaterial);\n\tmarker.visible = false;\n\tmarks.group.add(marker);\n\n\tconst overlay = renderChart3DChromeOverlaySvg(ctx.document, vm, {\n\t\tlabels: [],\n\t\treverseLegend: false,\n\t});\n\tctx.overlay.appendChild(overlay);\n\n\tconst values = (): number[] => chartData.series[0]?.values.slice() ?? [];\n\tconst interaction = attachChart3DMarkInteraction({\n\t\tctx,\n\t\tcamera,\n\t\tscene,\n\t\tsvgHeight: vm.svgHeight,\n\t\tchartData,\n\t\tcategoryLabels: input.categoryLabels,\n\t\tseriesNames: chartData.series.map((s) => s.name),\n\t\tadapter: {\n\t\t\ttargets: marks.meshes,\n\t\t\tpointAt(hit) {\n\t\t\t\tconst pointIndex = (hit.object.userData as { pointIndex?: number }).pointIndex;\n\t\t\t\treturn pointIndex === undefined ? null : { seriesIndex: 0, pointIndex };\n\t\t\t},\n\t\t\tvalueOf(point) {\n\t\t\t\tconst v = chartData.series[0]?.values[point.pointIndex];\n\t\t\t\treturn v !== undefined && Number.isFinite(v) ? v : undefined;\n\t\t\t},\n\t\t\tbeginDrag(point) {\n\t\t\t\tconst slice = layout.slices[point.pointIndex];\n\t\t\t\tif (!slice) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst start = values();\n\t\t\t\treturn {\n\t\t\t\t\tpreview(_dx, _dy, at) {\n\t\t\t\t\t\tconst hit = perspScreenToPlaneY(layout.view, at.x, at.y, layout.center.y);\n\t\t\t\t\t\tif (!hit) {\n\t\t\t\t\t\t\treturn start[point.pointIndex];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst angle = Math.atan2(\n\t\t\t\t\t\t\thit.x - layout.center.x - slice.offset.x,\n\t\t\t\t\t\t\thit.z - layout.center.z - slice.offset.z,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst value = resolvePieSliceShareValue(\n\t\t\t\t\t\t\tangle,\n\t\t\t\t\t\t\tslice.startAngle,\n\t\t\t\t\t\t\tstart,\n\t\t\t\t\t\t\tpoint.pointIndex,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmarks.setSlices(slicesWith(input, point.pointIndex, value));\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\thighlight(point) {\n\t\t\t\tconst slice = point ? layout.slices[point.pointIndex] : undefined;\n\t\t\t\tmarker.visible = slice !== undefined;\n\t\t\t\tif (slice) {\n\t\t\t\t\tconst mid = (slice.startAngle + slice.endAngle) / 2;\n\t\t\t\t\tconst p = pieRimPoint(\n\t\t\t\t\t\tlayout.center.x + slice.offset.x,\n\t\t\t\t\t\tlayout.center.z + slice.offset.z,\n\t\t\t\t\t\tlayout.radius * 0.6,\n\t\t\t\t\t\tmid,\n\t\t\t\t\t);\n\t\t\t\t\tmarker.position.set(p.x, layout.center.y, p.z);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdispose() {\n\t\t\t\tmarkerGeometry.dispose();\n\t\t\t\tmarkerMaterial.dispose();\n\t\t\t},\n\t\t},\n\t});\n\n\tlet disposed = false;\n\treturn {\n\t\trender(renderer: THREE.WebGLRenderer) {\n\t\t\trenderer.render(scene, camera);\n\t\t},\n\t\tresize() {\n\t\t\t// The projection is fixed in authored chart px, like the overlay.\n\t\t},\n\t\tisAnimating: () => false,\n\t\tsetInteractive: (on) => interaction.setInteractive(on),\n\t\tsetSelectedPart: (part) => interaction.setSelectedPart(part),\n\t\tdispose() {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdisposed = true;\n\t\t\tinteraction.dispose();\n\t\t\tmarks.dispose();\n\t\t\toverlay.remove();\n\t\t},\n\t};\n}\n","import type { ChartPptxElement } from 'pptx-viewer-core';\n/**\n * `<pptx-three-view>` scene module for 3D charts.\n *\n * Mounts a chart spec by its geometry: a 3-D Pie on its fitted camera\n * (`chart-3d-pie-scene.ts`), the line / area / surface box and a bar3D chart\n * without right-angle axes on the perspective box (`chart-3d-persp-scene.ts`),\n * and the right-angle-axes `bar3D` (`c:view3D/@rAngAx=1`, its own default;\n * verified against `gt/chart-01.webp`) here. A chart with nothing to draw has\n * no spec at all, so its 2D chart stays.\n *\n * The oblique projection is built as a plain `OrthographicCamera` (1 world\n * unit = 1 authored chart px, matching `chart-3d-chrome-overlay.ts`'s\n * overlay `<svg>` viewBox exactly) with a SHEAR term hand-inserted into its\n * projection matrix, rather than tilting the camera or shearing the scene\n * graph: only the camera carries the projection, which keeps every box's world\n * position/size meaningful on its own instead of encoding the illusion into\n * mesh transforms.\n *\n * @module chart-3d-view-scene\n */\nimport type * as THREE from 'three';\n\nimport type { ThreeViewContext, ThreeViewScene } from '../three-view/types';\nimport { buildChart3DBarMeshes } from './chart-3d-bar-mesh';\nimport { renderChart3DChromeOverlaySvg } from './chart-3d-chrome-overlay';\nimport { attachObliqueBarInteraction } from './chart-3d-oblique-interaction';\nimport { mountPerspChartView } from './chart-3d-persp-scene';\nimport { widenPieViewModel } from './chart-3d-pie-layout';\nimport { mountPieChartView } from './chart-3d-pie-scene';\nimport type { Chart3DSpec } from './chart-3d-spec';\n\n/**\n * The oblique chart camera. Camera distance is chosen so `NEAR`/`FAR` stay\n * tight around the scene's own (tiny) depth extent. Exported for tests.\n */\nexport function buildObliqueCamera(\n\tthree: ThreeModule,\n\tsvgWidth: number,\n\tsvgHeight: number,\n\tshearX: number,\n\tshearY: number,\n): THREE.OrthographicCamera {\n\tconst halfW = svgWidth / 2;\n\tconst halfH = svgHeight / 2;\n\tconst distance = halfW + halfH + 500;\n\tconst camera = new three.OrthographicCamera(-halfW, halfW, halfH, -halfH, 1, distance + 2000);\n\tcamera.position.set(0, 0, distance);\n\tcamera.lookAt(0, 0, 0);\n\tcamera.updateProjectionMatrix();\n\n\t// Hand-insert the oblique shear: clip_x += kX * ndcScaleX * world_z,\n\t// clip_y += kY * ndcScaleY * world_z (see the module doc + the chart\n\t// track's progress log for the sign derivation between the flat 2D\n\t// fallback's SVG-Y-down depth vector and this scene's world-Y-up frame:\n\t// X needs no flip (kX = -shearX), Y does (kY = +shearY)).\n\tconst m = camera.projectionMatrix.elements;\n\tconst ndcScaleX = m[0];\n\tconst ndcScaleY = m[5];\n\tm[8] = -shearX * ndcScaleX;\n\tm[9] = shearY * ndcScaleY;\n\t// The shear multiplies VIEW-space z, which is `-distance` at the chart's\n\t// front plane (world z = 0). Offset it so the front plane is unsheared\n\t// and lands exactly on the 2D layout; only depth behind it shifts.\n\tm[12] += m[8] * distance;\n\tm[13] += m[9] * distance;\n\tcamera.projectionMatrixInverse.copy(camera.projectionMatrix).invert();\n\treturn camera;\n}\n\ntype ThreeModule = typeof THREE;\n\nexport async function mountChart3DView(\n\tspec: Chart3DSpec,\n\tctx: ThreeViewContext,\n): Promise<ThreeViewScene> {\n\tif (spec.geometry?.kind === 'pie') {\n\t\tconst chartData = (spec.element as ChartPptxElement).chartData;\n\t\tif (!chartData) {\n\t\t\tthrow new Error('3D chart spec without chart data');\n\t\t}\n\t\treturn mountPieChartView(\n\t\t\t{\n\t\t\t\telement: spec.element,\n\t\t\t\tvm: widenPieViewModel(spec.vm, spec.element),\n\t\t\t\tlayout: spec.geometry.layout,\n\t\t\t\tchartData,\n\t\t\t\tcategoryLabels: spec.categoryLabels,\n\t\t\t},\n\t\t\tctx,\n\t\t);\n\t}\n\tif (spec.geometry?.kind === 'perspective') {\n\t\tconst chartData = (spec.element as ChartPptxElement).chartData;\n\t\tif (!chartData) {\n\t\t\tthrow new Error('3D chart spec without chart data');\n\t\t}\n\t\treturn mountPerspChartView(\n\t\t\t{ vm: spec.vm, layout: spec.geometry.layout, chartData, categoryLabels: spec.categoryLabels },\n\t\t\tctx,\n\t\t);\n\t}\n\tif (spec.projection.mode !== 'oblique' || spec.geometry?.kind !== 'oblique') {\n\t\tthrow new Error(`no 3D chart scene for chartType=${spec.chartType}`);\n\t}\n\tconst three = ctx.three;\n\tconst { vm, geometry } = spec;\n\tconst chartData = (spec.element as ChartPptxElement).chartData;\n\tif (!chartData) {\n\t\tthrow new Error('3D chart spec without chart data');\n\t}\n\n\tconst camera = buildObliqueCamera(\n\t\tthree,\n\t\tvm.svgWidth,\n\t\tvm.svgHeight,\n\t\tspec.projection.shearX,\n\t\tspec.projection.shearY,\n\t);\n\n\tconst scene = new three.Scene();\n\tconst { layout } = geometry;\n\tconst bars = buildChart3DBarMeshes(three, layout, vm.svgWidth, vm.svgHeight);\n\tscene.add(bars.group);\n\n\tconst overlay = renderChart3DChromeOverlaySvg(ctx.document, vm, {\n\t\tlabels: layout.labels,\n\t\t// PowerPoint lists a clustered horizontal bar chart's legend bottom-up,\n\t\t// matching the order the series stack up the category axis.\n\t\treverseLegend: layout.horizontal && layout.grouping === 'clustered',\n\t});\n\tctx.overlay.appendChild(overlay);\n\n\tconst interaction = attachObliqueBarInteraction({\n\t\tctx,\n\t\tcamera,\n\t\tmeshes: bars.meshes,\n\t\tlayout,\n\t\tsvgWidth: vm.svgWidth,\n\t\tsvgHeight: vm.svgHeight,\n\t\tchartData,\n\t\tcategoryLabels: spec.categoryLabels,\n\t\tseriesNames: chartData.series.map((series) => series.name),\n\t\tscene,\n\t});\n\n\tlet disposed = false;\n\treturn {\n\t\trender(renderer: THREE.WebGLRenderer) {\n\t\t\trenderer.render(scene, camera);\n\t\t},\n\t\tresize() {\n\t\t\t// The orthographic frustum is fixed in authored chart-px units\n\t\t\t// (svgWidth/svgHeight), independent of the element's on-screen CSS\n\t\t\t// size, so nothing needs recomputing here.\n\t\t},\n\t\tisAnimating: () => false,\n\t\tsetInteractive: (on) => interaction.setInteractive(on),\n\t\tsetSelectedPart: (part) => interaction.setSelectedPart(part),\n\t\tdispose() {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdisposed = true;\n\t\t\tinteraction.dispose();\n\t\t\tbars.dispose();\n\t\t\toverlay.remove();\n\t\t},\n\t};\n}\n"],"names":["GRIDLINE_COLOR","SELECTED_COLOR"],"mappings":"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"}
|