pptx-angular-viewer 4.8.0 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/fesm2022/{pptx-angular-viewer-chart-3d-view-scene-CM71j9A9.mjs → pptx-angular-viewer-chart-3d-view-scene-CkW1D-mg.mjs} +36 -22
  3. package/fesm2022/pptx-angular-viewer-chart-3d-view-scene-CkW1D-mg.mjs.map +1 -0
  4. package/fesm2022/{pptx-angular-viewer-chat-history-idb-7dyn_ZbD.mjs → pptx-angular-viewer-chat-history-idb-BboVG09q.mjs} +2 -2
  5. package/fesm2022/{pptx-angular-viewer-chat-history-idb-7dyn_ZbD.mjs.map → pptx-angular-viewer-chat-history-idb-BboVG09q.mjs.map} +1 -1
  6. package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-Cf08ueRA.mjs → pptx-angular-viewer-pptx-angular-viewer-BWuuwItt.mjs} +11005 -2724
  7. package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-Cf08ueRA.mjs.map → pptx-angular-viewer-pptx-angular-viewer-BWuuwItt.mjs.map} +1 -1
  8. package/fesm2022/{pptx-angular-viewer-view-scene-Bn9SJZk9.mjs → pptx-angular-viewer-view-scene-BJXZicXV.mjs} +150 -65
  9. package/fesm2022/pptx-angular-viewer-view-scene-BJXZicXV.mjs.map +1 -0
  10. package/fesm2022/pptx-angular-viewer.mjs +1 -1
  11. package/i18n/de.cjs +276 -9
  12. package/i18n/de.mjs +276 -9
  13. package/i18n/es.cjs +276 -9
  14. package/i18n/es.mjs +276 -9
  15. package/i18n/fr.cjs +276 -9
  16. package/i18n/fr.mjs +276 -9
  17. package/i18n/zh-CN.cjs +279 -12
  18. package/i18n/zh-CN.mjs +279 -12
  19. package/package.json +5 -4
  20. package/pptx-angular-viewer.css +1 -1
  21. package/types/pptx-angular-viewer.d.ts +877 -208
  22. package/types/pptx-angular-viewer.d.ts.map +1 -1
  23. package/fesm2022/pptx-angular-viewer-chart-3d-view-scene-CM71j9A9.mjs.map +0 -1
  24. package/fesm2022/pptx-angular-viewer-view-scene-Bn9SJZk9.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"pptx-angular-viewer-chart-3d-view-scene-CM71j9A9.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-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-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 * 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 * Column bars of a `bar3D` chart WITHOUT right-angle axes\n * (`c:view3D/@rAngAx=0`) 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 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'\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\tconst slot = nCat > 0 ? 1 / nCat : 1;\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 slotIndex = layout.grouping === 'clustered' ? s : 0;\n\t\t\tconst row = layout.grouping === 'standard' ? s : 0;\n\t\t\tconst x0 = c * slot + (gapWidth * barW) / 2 + slotIndex * barW;\n\t\t\tconst y0 = valueY(layout, Math.min(from, to));\n\t\t\tconst y1 = Math.max(valueY(layout, Math.max(from, to)), y0 + 1e-6);\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[x0 + barW, y0],\n\t\t\t\t\t[x0 + barW, 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});\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 { PptxChartData } from 'pptx-viewer-core';\n\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}\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>;\n\n/** Box y of a value, 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 * 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 { 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\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 xs = prism.outline.map(([x]) => x);\n\t\t\treturn [\n\t\t\t\t(Math.min(...xs) + Math.max(...xs)) / 2,\n\t\t\t\tperspValueY(layout, value),\n\t\t\t\t(prism.z0 + prism.z1) / 2,\n\t\t\t];\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: false,\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\tconst unit = layout.range.majorUnit || 1;\n\t\t\t\tconst [x, y, z] = marks.anchor(point, start);\n\t\t\t\tconst y0 = perspToScreen(layout.view, [x, y, z]).y;\n\t\t\t\tconst y1 = perspToScreen(layout.view, [x, y + unit * layout.valueScale, z]).y;\n\t\t\t\tconst pxPerValue = (y0 - y1) / unit || 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 - dy / pxPerValue, {\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 * The oblique-projection family (`c:view3D/@rAngAx=1`, `bar3D`'s own\n * default; verified against `gt/chart-01.webp`) is drawn here. Everything\n * else (line3D/area3D/pie3D/surface3D, and bar3D's `standard` grouping, a\n * horizontal `c:barDir val=\"bar\"` or round shapes) has `geometry: null` and\n * mounts the matching perspective scene from `spec.perspective` (the\n * pre-`<pptx-three-view>` scenes, hosted on the shared renderer). Those are\n * not yet at PowerPoint parity; see `demos/demo-three-parity/README.md`.\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: this keeps a future `OrbitControls` well-defined, since only the camera moves, and 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 { createAreaChart3DScene } from './area-chart-3d-scene';\nimport { createBarChart3DScene } from './bar-chart-3d-scene';\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 { Chart3DPerspectiveScene, Chart3DSpec } from './chart-3d-spec';\nimport { createLineChart3DScene } from './line-chart-3d-scene';\nimport { createPieChart3DScene } from './pie-chart-3d-scene';\nimport { createSurfaceChart3DScene } from './surface-chart-3d-scene';\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\n/** The hosted perspective scene for a spec whose oblique geometry is `null`. */\nfunction mountPerspectiveScene(\n\tperspective: Chart3DPerspectiveScene,\n\tctx: ThreeViewContext,\n): ThreeViewScene {\n\tswitch (perspective.kind) {\n\t\tcase 'bar':\n\t\t\treturn createBarChart3DScene(ctx, perspective.options);\n\t\tcase 'line':\n\t\t\treturn createLineChart3DScene(ctx, perspective.options);\n\t\tcase 'area':\n\t\t\treturn createAreaChart3DScene(ctx, perspective.options);\n\t\tcase 'pie':\n\t\t\treturn createPieChart3DScene(ctx, perspective.options);\n\t\tcase 'surface':\n\t\t\treturn createSurfaceChart3DScene(ctx, perspective.options);\n\t\tdefault: {\n\t\t\tconst exhaustive: never = perspective;\n\t\t\treturn exhaustive;\n\t\t}\n\t}\n}\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\tif (spec.perspective) {\n\t\t\treturn mountPerspectiveScene(spec.perspective, ctx);\n\t\t}\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 +0,0 @@
1
- {"version":3,"file":"pptx-angular-viewer-view-scene-Bn9SJZk9.mjs","sources":["../../src/internal/shared-src/smartart-3d/text-block-texture.ts","../../src/internal/shared-src/smartart-3d/flat-mesh-object.ts","../../src/internal/shared-src/render/smartart-3d-ring.ts","../../src/internal/shared-src/render/smartart-3d-bevel-profile.ts","../../src/internal/shared-src/render/smartart-3d-solid-geometry.ts","../../src/internal/shared-src/render/smartart-3d-text-extrusion.ts","../../src/internal/shared-src/smartart-3d/lit-text-object.ts","../../src/internal/shared-src/smartart-3d/lit-mesh-object.ts","../../src/internal/shared-src/smartart-3d/view-camera.ts","../../src/internal/shared-src/smartart-3d/view-overflow.ts","../../src/internal/shared-src/smartart-3d/view-scene.ts"],"sourcesContent":["/**\n * Canvas texture for a `SmartArt3DTextBlock`, for the `<pptx-three-view>`\n * SmartArt scene (`view-scene.ts`).\n *\n * Unlike the legacy `smartart-3d/text-texture.ts` (which imports `three`\n * statically and re-wraps text itself), this draws the ALREADY wrapped/\n * positioned lines a `SmartArt3DTextBlock` carries (built from the same 2D\n * projection the SVG renderer uses), and takes the runtime `three` module as\n * a parameter so it stays out of the tsup-bundled `dist/index.mjs` (see the\n * \"no runtime `three` import\" rule in `three-view/types.ts`).\n *\n * @module smartart-3d/text-block-texture\n */\nimport type * as THREE from 'three';\n\nimport type { SmartArt3DTextBlock } from '../render/smartart-3d-types';\nimport type { ThreeModule } from '../three-view/types';\n\n/** Supersampling factor for crisp text at any zoom. */\nconst SUPERSAMPLE = 3;\n\n/** A built label texture plus the world-space plane size it should fill. */\nexport interface TextBlockTexture {\n\ttexture: THREE.CanvasTexture;\n\tworldWidth: number;\n\tworldHeight: number;\n}\n\n/** Build a canvas texture rendering `block`'s pre-wrapped lines, or `null` off-DOM. */\nexport function buildTextBlockTexture(\n\tthree: ThreeModule,\n\tblock: SmartArt3DTextBlock,\n): TextBlockTexture | null {\n\tif (typeof document === 'undefined' || block.lines.every((l) => l.text.length === 0)) {\n\t\treturn null;\n\t}\n\tconst worldWidth = Math.max(1, block.maxWidth);\n\tconst worldHeight = Math.max(1, block.maxHeight);\n\tconst canvas = document.createElement('canvas');\n\tcanvas.width = Math.max(8, Math.round(worldWidth * SUPERSAMPLE));\n\tcanvas.height = Math.max(8, Math.round(worldHeight * SUPERSAMPLE));\n\tconst ctx2d = canvas.getContext('2d');\n\tif (!ctx2d) {\n\t\treturn null;\n\t}\n\n\tconst weight = block.fontWeight ?? 400;\n\tconst italic = block.fontStyle === 'italic' ? 'italic ' : '';\n\tconst family = block.fontFamily\n\t\t? `${block.fontFamily}, system-ui, sans-serif`\n\t\t: 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif';\n\tconst px = Math.max(6, block.fontSize) * SUPERSAMPLE;\n\n\tctx2d.clearRect(0, 0, canvas.width, canvas.height);\n\tctx2d.fillStyle = block.color;\n\tctx2d.textAlign = 'center';\n\t// `dy` places each line's CENTRE (as `centeredSvgTextLines` lays it out,\n\t// and the 2D renderers draw with `dominant-baseline: central`).\n\tctx2d.textBaseline = 'middle';\n\tctx2d.font = `${italic}${weight} ${px}px ${family}`;\n\tconst centerX = canvas.width / 2;\n\tconst centerY = canvas.height / 2;\n\tfor (const line of block.lines) {\n\t\tif (!line.text) {\n\t\t\tcontinue;\n\t\t}\n\t\t// `dy` is a y-up offset from the block centre; canvas y grows downward.\n\t\tctx2d.fillText(line.text, centerX, centerY - line.dy * SUPERSAMPLE);\n\t}\n\n\tconst texture = new three.CanvasTexture(canvas);\n\ttexture.colorSpace = three.SRGBColorSpace;\n\ttexture.minFilter = three.LinearFilter;\n\ttexture.magFilter = three.LinearFilter;\n\t// See `smartart-3d/text-texture.ts` for why flipY must stay false with a\n\t// compensating UV flip: WebGL2 forbids UNPACK_FLIP_Y_WEBGL for some texture\n\t// targets, and leaving it enabled pollutes global pixel-store state.\n\ttexture.flipY = false;\n\ttexture.premultiplyAlpha = false;\n\ttexture.wrapT = three.RepeatWrapping;\n\ttexture.repeat.set(1, -1);\n\ttexture.offset.set(0, 1);\n\ttexture.needsUpdate = true;\n\n\treturn { texture, worldWidth, worldHeight };\n}\n","/**\n * Build the three.js `Object3D` for one flat `SmartArt3DMesh` (fill + stroke\n * outline + text label), for `view-scene.ts`.\n *\n * @module smartart-3d/flat-mesh-object\n */\nimport type * as THREE from 'three';\n\nimport type { SmartArt3DMesh } from '../render/smartart-3d-types';\nimport type { ThreeModule } from '../three-view/types';\nimport { buildTextBlockTexture } from './text-block-texture';\n\n/** Anything the scene must call `.dispose()` on when unmounted. */\nexport interface Disposable {\n\tdispose: () => void;\n}\n\n/** The built pieces for one mesh: the group to add to the scene, plus disposables. */\nexport interface MeshObject {\n\tgroup: THREE.Group;\n\tdisposables: Disposable[];\n}\n\n/** z-lift of the stroke outline above its fill, so the two don't z-fight. */\nconst STROKE_Z_LIFT = 0.05;\n\nfunction buildShape(three: ThreeModule, mesh: SmartArt3DMesh): THREE.Shape {\n\tconst shape = new three.Shape(mesh.outline.map((p) => new three.Vector2(p.x, p.y)));\n\tfor (const hole of mesh.holes ?? []) {\n\t\tshape.holes.push(new three.Path(hole.map((p) => new three.Vector2(p.x, p.y))));\n\t}\n\treturn shape;\n}\n\n/** Build the fill mesh for a flat (zero-depth) `SmartArt3DMesh`. */\nfunction buildFlatFill(\n\tthree: ThreeModule,\n\tmesh: SmartArt3DMesh,\n\tshape: THREE.Shape,\n\tdisposables: Disposable[],\n): THREE.Mesh | null {\n\tif (mesh.fillNone) {\n\t\treturn null;\n\t}\n\tconst geometry = new three.ShapeGeometry(shape);\n\tconst material = new three.MeshBasicMaterial({\n\t\tcolor: mesh.fill,\n\t\tside: three.DoubleSide,\n\t\ttransparent: mesh.opacity < 1,\n\t\topacity: mesh.opacity,\n\t});\n\tdisposables.push(geometry, material);\n\treturn new three.Mesh(geometry, material);\n}\n\n/** Build the stroke outline (and hole outlines) as line loops. */\nexport function buildStrokeLines(\n\tthree: ThreeModule,\n\tmesh: SmartArt3DMesh,\n\tdisposables: Disposable[],\n): THREE.LineLoop[] {\n\tif (mesh.strokeWidth <= 0 || mesh.stroke === 'transparent') {\n\t\treturn [];\n\t}\n\tconst material = new three.LineBasicMaterial({ color: mesh.stroke });\n\tdisposables.push(material);\n\tconst loops = [mesh.outline, ...(mesh.holes ?? [])];\n\treturn loops.map((loop) => {\n\t\tconst geometry = new three.BufferGeometry().setFromPoints(\n\t\t\tloop.map((p) => new three.Vector3(p.x, p.y, STROKE_Z_LIFT)),\n\t\t);\n\t\tdisposables.push(geometry);\n\t\treturn new three.LineLoop(geometry, material);\n\t});\n}\n\n/** Build the text label plane, or `null` when the mesh has no text. */\nexport function buildTextPlane(\n\tthree: ThreeModule,\n\tmesh: SmartArt3DMesh,\n\tgroup: THREE.Group,\n\tdisposables: Disposable[],\n): void {\n\tif (!mesh.textBlock) {\n\t\treturn;\n\t}\n\tconst built = buildTextBlockTexture(three, mesh.textBlock);\n\tif (!built) {\n\t\treturn;\n\t}\n\tdisposables.push(built.texture);\n\tconst geometry = new three.PlaneGeometry(built.worldWidth, built.worldHeight);\n\tconst material = new three.MeshBasicMaterial({\n\t\tmap: built.texture,\n\t\ttransparent: true,\n\t\tdepthWrite: false,\n\t});\n\tdisposables.push(geometry, material);\n\tconst plane = new three.Mesh(geometry, material);\n\t// `textBlock` carries its own world position (already includes the\n\t// shape's rotation applied to its centre); the group itself is placed at\n\t// the shape's own centre, so offset back to absolute world space here.\n\tplane.position.set(\n\t\tmesh.textBlock.x - mesh.position.x,\n\t\tmesh.textBlock.y - mesh.position.y,\n\t\tmesh.textBlock.z - mesh.position.z,\n\t);\n\tgroup.add(plane);\n}\n\n/** Build the complete `Object3D` for one flat mesh. */\nexport function buildFlatMeshObject(three: ThreeModule, mesh: SmartArt3DMesh): MeshObject {\n\tconst disposables: Disposable[] = [];\n\tconst group = new three.Group();\n\tgroup.position.set(mesh.position.x, mesh.position.y, mesh.position.z);\n\n\tconst shape = buildShape(three, mesh);\n\tconst fill = buildFlatFill(three, mesh, shape, disposables);\n\tif (fill) {\n\t\tgroup.add(fill);\n\t}\n\tfor (const line of buildStrokeLines(three, mesh, disposables)) {\n\t\tgroup.add(line);\n\t}\n\tbuildTextPlane(three, mesh, group, disposables);\n\n\treturn { group, disposables };\n}\n","/**\n * Closed-polygon (\"ring\") helpers for the lit SmartArt 3D solids: clean-up,\n * orientation, per-edge normals and a mitred inward/outward offset\n * (framework-agnostic, pure).\n *\n * @module render/smartart-3d-ring\n */\nimport type { Point2 } from './smartart-3d-types';\n\n/** Points closer than this are treated as the same vertex. */\nconst EPSILON = 1e-6;\n/** Longest mitre, as a multiple of the offset distance (sharp spikes are clipped). */\nconst MITER_LIMIT = 4;\n\n/** Drop repeated consecutive points and the closing duplicate of the first point. */\nexport function cleanRing(points: readonly Point2[]): Point2[] {\n\tconst out: Point2[] = [];\n\tfor (const p of points) {\n\t\tconst last = out[out.length - 1];\n\t\tif (!last || Math.hypot(p.x - last.x, p.y - last.y) > EPSILON) {\n\t\t\tout.push({ x: p.x, y: p.y });\n\t\t}\n\t}\n\twhile (out.length > 1) {\n\t\tconst first = out[0];\n\t\tconst last = out[out.length - 1];\n\t\tif (Math.hypot(first.x - last.x, first.y - last.y) > EPSILON) {\n\t\t\tbreak;\n\t\t}\n\t\tout.pop();\n\t}\n\treturn out;\n}\n\n/** Shoelace signed area: positive for a counter-clockwise ring in y-up space. */\nexport function ringSignedArea(ring: readonly Point2[]): number {\n\tlet area = 0;\n\tfor (let i = 0; i < ring.length; i++) {\n\t\tconst a = ring[i];\n\t\tconst b = ring[(i + 1) % ring.length];\n\t\tarea += a.x * b.y - b.x * a.y;\n\t}\n\treturn area / 2;\n}\n\n/** A cleaned, counter-clockwise (y-up) copy of `points`. */\nexport function toCcwRing(points: readonly Point2[]): Point2[] {\n\tconst ring = cleanRing(points);\n\treturn ringSignedArea(ring) < 0 ? ring.reverse() : ring;\n}\n\n/**\n * Unit inward normal of every edge `i -> i + 1` of a counter-clockwise ring\n * (the interior is on the edge's left).\n */\nexport function ringEdgeNormals(ring: readonly Point2[]): Point2[] {\n\treturn ring.map((a, i) => {\n\t\tconst b = ring[(i + 1) % ring.length];\n\t\tconst dx = b.x - a.x;\n\t\tconst dy = b.y - a.y;\n\t\tconst len = Math.hypot(dx, dy) || 1;\n\t\treturn { x: -dy / len, y: dx / len };\n\t});\n}\n\n/**\n * Offset a counter-clockwise ring by `distance` along its inward normals\n * (negative grows it). Each vertex moves along its mitre, clipped at\n * {@link MITER_LIMIT} times the distance so a sharp spike stays bounded.\n */\nexport function offsetRing(ring: readonly Point2[], distance: number): Point2[] {\n\tif (distance === 0) {\n\t\treturn ring.map((p) => ({ x: p.x, y: p.y }));\n\t}\n\tconst normals = ringEdgeNormals(ring);\n\tconst n = ring.length;\n\treturn ring.map((p, i) => {\n\t\tconst prev = normals[(i - 1 + n) % n];\n\t\tconst next = normals[i];\n\t\tconst denom = Math.max(0.05, 1 + prev.x * next.x + prev.y * next.y);\n\t\tlet ox = ((prev.x + next.x) / denom) * distance;\n\t\tlet oy = ((prev.y + next.y) / denom) * distance;\n\t\tconst len = Math.hypot(ox, oy);\n\t\tconst max = Math.abs(distance) * MITER_LIMIT;\n\t\tif (len > max) {\n\t\t\tox = (ox / len) * max;\n\t\t\toy = (oy / len) * max;\n\t\t}\n\t\treturn { x: p.x + ox, y: p.y + oy };\n\t});\n}\n\n/**\n * The in-plane inward direction to shade each edge's two ends with.\n *\n * `result[i]` is `[atStart, atEnd]` for edge `i -> i + 1`. Where the ring\n * turns by less than `smoothDeg` (a curve's tessellation) the two edges share\n * the averaged normal, so a circle shades smoothly; at a real corner each\n * edge keeps its own normal, so a rectangle's sides shade flat.\n */\nexport function ringShadingNormals(\n\tring: readonly Point2[],\n\tsmoothDeg = 30,\n): Array<[Point2, Point2]> {\n\tconst normals = ringEdgeNormals(ring);\n\tconst n = ring.length;\n\tconst cosLimit = Math.cos((smoothDeg * Math.PI) / 180);\n\tconst vertexNormal = (own: Point2, other: Point2): Point2 => {\n\t\tif (own.x * other.x + own.y * other.y < cosLimit) {\n\t\t\treturn own;\n\t\t}\n\t\tconst x = own.x + other.x;\n\t\tconst y = own.y + other.y;\n\t\tconst len = Math.hypot(x, y) || 1;\n\t\treturn { x: x / len, y: y / len };\n\t};\n\treturn normals.map((own, i) => [\n\t\tvertexNormal(own, normals[(i - 1 + n) % n]),\n\t\tvertexNormal(own, normals[(i + 1) % n]),\n\t]);\n}\n","/**\n * `a:bevelT/@prst` cross-sections for the lit SmartArt 3D solids\n * (framework-agnostic, pure).\n *\n * A profile is a polyline from the shape's outline (`s = 0`, `t = 0`) to the\n * inner edge of the bevel (`s = 1`, `t = 1`): `s` is the inset as a fraction\n * of the bevel width, `t` the height as a fraction of the bevel height. The\n * shapes follow the ECMA-376 20.1.10.9 preset silhouettes, tuned against the\n * PowerPoint exports of the SmartArt bevel quick styles\n * (`e2e/fixtures/three-d-parity/gt`): `circle` (Polished) is a quarter round,\n * `relaxedInset` (Inset) dips into a groove before rising to the face, which\n * is what paints its dark outer line and bright inner ridge.\n *\n * @module render/smartart-3d-bevel-profile\n */\n\n/** One sample of a bevel cross-section. */\nexport interface BevelProfilePoint {\n\t/** Inset from the outline, as a fraction of the bevel width (0..1). */\n\ts: number;\n\t/** Height above the bevel's base, as a fraction of the bevel height. */\n\tt: number;\n}\n\n/** Samples used for the curved profiles. */\nconst CURVE_SEGMENTS = 8;\n\nfunction sampleCurve(fn: (u: number) => BevelProfilePoint): BevelProfilePoint[] {\n\tconst points: BevelProfilePoint[] = [];\n\tfor (let i = 0; i <= CURVE_SEGMENTS; i++) {\n\t\tpoints.push(fn(i / CURVE_SEGMENTS));\n\t}\n\treturn points;\n}\n\nconst QUARTER = Math.PI / 2;\n\nconst PROFILES: Record<string, () => BevelProfilePoint[]> = {\n\t// Quarter round: vertical at the outline, flat where it meets the face.\n\tcircle: () => sampleCurve((u) => ({ s: 1 - Math.cos(u * QUARTER), t: Math.sin(u * QUARTER) })),\n\t// Round, but reaching the outline at a slant instead of vertically.\n\tconvex: () => sampleCurve((u) => ({ s: u, t: Math.sin(u * QUARTER) })),\n\tsoftRound: () => sampleCurve((u) => ({ s: u, t: 1 - (1 - u) * (1 - u) })),\n\t// A groove next to the outline, then a rounded rise onto the face.\n\trelaxedInset: () =>\n\t\tsampleCurve((u) => ({\n\t\t\ts: u,\n\t\t\tt: u * u * (3 - 2 * u) - 0.3 * Math.sin(Math.PI * u) * (1 - u),\n\t\t})),\n\tdivot: () =>\n\t\tsampleCurve((u) => ({\n\t\t\ts: u,\n\t\t\tt: u - 0.5 * Math.sin(Math.PI * u),\n\t\t})),\n\tangle: () => [\n\t\t{ s: 0, t: 0 },\n\t\t{ s: 1, t: 1 },\n\t],\n\tslope: () => [\n\t\t{ s: 0, t: 0 },\n\t\t{ s: 1, t: 1 },\n\t],\n\tcoolSlant: () => [\n\t\t{ s: 0, t: 0 },\n\t\t{ s: 0.3, t: 0.75 },\n\t\t{ s: 1, t: 1 },\n\t],\n\thardEdge: () => [\n\t\t{ s: 0, t: 0 },\n\t\t{ s: 0.2, t: 0.9 },\n\t\t{ s: 1, t: 1 },\n\t],\n\tcross: () => [\n\t\t{ s: 0, t: 0 },\n\t\t{ s: 0.5, t: 1 },\n\t\t{ s: 1, t: 1 },\n\t],\n\triblet: () => [\n\t\t{ s: 0, t: 0 },\n\t\t{ s: 0.33, t: 1 },\n\t\t{ s: 0.66, t: 0.5 },\n\t\t{ s: 1, t: 1 },\n\t],\n\tartDeco: () => [\n\t\t{ s: 0, t: 0 },\n\t\t{ s: 0.25, t: 0.5 },\n\t\t{ s: 0.5, t: 0.5 },\n\t\t{ s: 0.75, t: 1 },\n\t\t{ s: 1, t: 1 },\n\t],\n};\n\n/**\n * The cross-section for a bevel preset token; unknown tokens fall back to\n * `circle` (the ECMA-376 default for an `a:bevelT` without `@prst`).\n */\nexport function getSmartArtBevelProfile(profile: string | undefined): BevelProfilePoint[] {\n\tconst build = (profile && PROFILES[profile]) || PROFILES.circle;\n\treturn build();\n}\n","/**\n * Geometry for one lit SmartArt 3D solid: bevel bands, extrusion walls,\n * contour rim and the caps to triangulate (framework-agnostic, pure; the\n * three.js layer only triangulates the caps and uploads the arrays).\n *\n * Layout along z (mesh-local, the front face at `z = 0`, facing +z):\n *\n * ```\n * 0 front cap (the outline inset by bevelT.w)\n * 0 .. -bevelT.h top bevel band, outline -> inset\n * .. -extrusion side walls on the outline\n * .. -bevelB.h bottom bevel band, outline -> inset (back cap)\n * ```\n *\n * The contour (`a:sp3d/@contourW`) is a flat rim `contourW` wide around the\n * outline, at the front shoulder and at the back: the Brick Scene export\n * shows it as a thin line along the front edge and along the far end of the\n * extrusion walls, with the walls themselves in the extrusion colour.\n *\n * @module render/smartart-3d-solid-geometry\n */\nimport type { BevelProfilePoint } from './smartart-3d-bevel-profile';\nimport { getSmartArtBevelProfile } from './smartart-3d-bevel-profile';\nimport { offsetRing, ringShadingNormals, toCcwRing } from './smartart-3d-ring';\nimport type { SmartArt3DBevel, SmartArt3DSolid } from './smartart-3d-solid-types';\nimport type { Point2 } from './smartart-3d-types';\n\n/** A triangle list: 9 floats (3 xyz vertices) per triangle, normals alike. */\nexport interface SolidTriangles {\n\tpositions: number[];\n\tnormals: number[];\n}\n\n/** A planar cap to triangulate (outer ring + holes) at depth `z`. */\nexport interface SolidCap {\n\tring: Point2[];\n\tholes: Point2[][];\n\tz: number;\n\t/** +1: faces the viewer (front), -1: faces away (back). */\n\tfacing: 1 | -1;\n}\n\n/** Everything the three.js layer needs to build one solid. */\nexport interface SmartArt3DSolidGeometry {\n\t/** Bevel bands, painted with the shape's fill. */\n\tbody: SolidTriangles;\n\t/** Extrusion walls, painted with the extrusion colour. */\n\tsides: SolidTriangles;\n\tfrontCap: SolidCap;\n\t/** Back cap (extrusion colour), when the solid has any depth. */\n\tbackCap?: SolidCap;\n\t/** Contour rims (front and back annuli, contour colour). */\n\tcontourCaps: SolidCap[];\n}\n\n/** Contour rims sit this far in front of the plane they ring, so they win the depth test. */\nconst CONTOUR_Z_LIFT = 0.05;\n/** Slope used for a vertical profile segment (an outward, horizontal normal). */\nconst VERTICAL_SLOPE = 1e3;\n\nfunction emptyTriangles(): SolidTriangles {\n\treturn { positions: [], normals: [] };\n}\n\nfunction pushVertex(out: SolidTriangles, p: Point2, z: number, n: [number, number, number]): void {\n\tout.positions.push(p.x, p.y, z);\n\tout.normals.push(n[0], n[1], n[2]);\n}\n\nfunction normalize(x: number, y: number, z: number): [number, number, number] {\n\tconst len = Math.hypot(x, y, z) || 1;\n\treturn [x / len, y / len, z / len];\n}\n\n/** Push the two triangles of quad `a b c d` (in order around the quad). */\nfunction pushQuad(\n\tout: SolidTriangles,\n\tcorners: Array<{ p: Point2; z: number; n: [number, number, number] }>,\n): void {\n\tconst [a, b, c, d] = corners;\n\tfor (const v of [a, b, c, a, c, d]) {\n\t\tpushVertex(out, v.p, v.z, v.n);\n\t}\n}\n\n/**\n * A bevel band from `ring` (at `zOuter`) inward to `ring` inset by the bevel\n * width, rising by the bevel height toward `facing` (+1 front, -1 back).\n * Returns the band's inner ring.\n */\nfunction addBand(\n\tout: SolidTriangles,\n\tring: Point2[],\n\tbevel: SmartArt3DBevel,\n\tzOuter: number,\n\tfacing: 1 | -1,\n): Point2[] {\n\tconst profile: BevelProfilePoint[] = getSmartArtBevelProfile(bevel.profile);\n\tconst rings = profile.map((pt) => offsetRing(ring, bevel.width * pt.s));\n\tconst shading = ringShadingNormals(ring);\n\tconst n = ring.length;\n\tfor (let k = 0; k < profile.length - 1; k++) {\n\t\tconst ds = profile[k + 1].s - profile[k].s;\n\t\tconst dt = profile[k + 1].t - profile[k].t;\n\t\tconst slope =\n\t\t\tMath.abs(ds) < 1e-6\n\t\t\t\t? Math.sign(dt || 1) * VERTICAL_SLOPE\n\t\t\t\t: (bevel.height * dt) / (bevel.width * ds);\n\t\tconst z0 = zOuter + facing * bevel.height * profile[k].t;\n\t\tconst z1 = zOuter + facing * bevel.height * profile[k + 1].t;\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst j = (i + 1) % n;\n\t\t\tconst [mi, mj] = shading[i];\n\t\t\tconst ni = normalize(-slope * mi.x, -slope * mi.y, facing);\n\t\t\tconst nj = normalize(-slope * mj.x, -slope * mj.y, facing);\n\t\t\tpushQuad(out, [\n\t\t\t\t{ p: rings[k][i], z: z0, n: ni },\n\t\t\t\t{ p: rings[k][j], z: z0, n: nj },\n\t\t\t\t{ p: rings[k + 1][j], z: z1, n: nj },\n\t\t\t\t{ p: rings[k + 1][i], z: z1, n: ni },\n\t\t\t]);\n\t\t}\n\t}\n\treturn rings[rings.length - 1];\n}\n\n/** Vertical walls around `ring` from `zTop` down to `zBottom`, facing outward. */\nfunction addWalls(out: SolidTriangles, ring: Point2[], zTop: number, zBottom: number): void {\n\tif (zTop - zBottom <= 0) {\n\t\treturn;\n\t}\n\tconst shading = ringShadingNormals(ring);\n\tconst n = ring.length;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst j = (i + 1) % n;\n\t\tconst [mi, mj] = shading[i];\n\t\tconst ni = normalize(-mi.x, -mi.y, 0);\n\t\tconst nj = normalize(-mj.x, -mj.y, 0);\n\t\tpushQuad(out, [\n\t\t\t{ p: ring[i], z: zTop, n: ni },\n\t\t\t{ p: ring[j], z: zTop, n: nj },\n\t\t\t{ p: ring[j], z: zBottom, n: nj },\n\t\t\t{ p: ring[i], z: zBottom, n: ni },\n\t\t]);\n\t}\n}\n\n/**\n * Build the geometry for one solid from its mesh-local outline (and holes,\n * which are cut from the caps but not bevelled).\n */\nexport function buildSmartArt3DSolidGeometry(\n\toutline: readonly Point2[],\n\tholes: readonly Point2[][],\n\tsolid: SmartArt3DSolid,\n): SmartArt3DSolidGeometry {\n\tconst ring = toCcwRing(outline);\n\tconst body = emptyTriangles();\n\tconst sides = emptyTriangles();\n\tconst topHeight = solid.bevelTop?.height ?? 0;\n\tconst zShoulder = -topHeight;\n\tconst zBackShoulder = zShoulder - solid.extrusion;\n\tconst backHeight = solid.bevelBottom?.height ?? 0;\n\tconst zBack = zBackShoulder - backHeight;\n\tconst holeRings = holes.map((hole) => toCcwRing(hole)).filter((hole) => hole.length >= 3);\n\n\tconst frontRing = solid.bevelTop ? addBand(body, ring, solid.bevelTop, zShoulder, 1) : ring;\n\taddWalls(sides, ring, zShoulder, zBackShoulder);\n\tconst hasDepth = zBack < 0;\n\tconst backRing =\n\t\thasDepth && solid.bevelBottom\n\t\t\t? addBand(sides, ring, solid.bevelBottom, zBackShoulder, -1)\n\t\t\t: ring;\n\n\tconst contourCaps: SolidCap[] = [];\n\tif (solid.contourWidth > 0) {\n\t\tconst rim = offsetRing(ring, -solid.contourWidth);\n\t\tconst inner = [...ring].reverse();\n\t\tcontourCaps.push({ ring: rim, holes: [inner], z: zShoulder + CONTOUR_Z_LIFT, facing: 1 });\n\t\tif (hasDepth) {\n\t\t\tcontourCaps.push({ ring: rim, holes: [inner], z: zBack - CONTOUR_Z_LIFT, facing: -1 });\n\t\t}\n\t}\n\n\treturn {\n\t\tbody,\n\t\tsides,\n\t\tfrontCap: { ring: frontRing, holes: holeRings, z: 0, facing: 1 },\n\t\t...(hasDepth ? { backCap: { ring: backRing, holes: holeRings, z: zBack, facing: -1 } } : {}),\n\t\tcontourCaps,\n\t};\n}\n","/**\n * Extruded SmartArt labels (framework-agnostic, pure).\n *\n * A quick style can extrude the label text itself off the shape face\n * (`a:bodyPr/a:sp3d`, e.g. Bird's Eye Scene: `extrusionH=\"28000\"`). The\n * scene has glyph bitmaps, not glyph outlines, so it builds the letters'\n * solid from stacked copies of the label: side layers every\n * {@link TEXT_LAYER_STEP} px from the face up to the extrusion depth, drawn in\n * the shaded side colour, then the front copy on top at the full depth.\n * Under the diagram's camera the stack reads as the letters' walls.\n *\n * @module render/smartart-3d-text-extrusion\n */\nimport type { SmartArt3DTextBlock } from './smartart-3d-types';\n\n/** Depth between two side layers, layout px (fine enough to read as a wall). */\nexport const TEXT_LAYER_STEP = 0.4;\n\n/** Most side layers one label gets. */\nconst MAX_TEXT_LAYERS = 32;\n\n/**\n * sRGB factor on the side colour. Read off the Bird's Eye Scene export\n * (`gt/sa-014.webp`): white letters show walls around (164, 172, 175) under\n * a front face reading (245, 248, 249).\n */\nexport const TEXT_SIDE_SHADE = 0.69;\n\n/** Stacked planes for one label. */\nexport interface SmartArt3DTextLayers {\n\t/** z of each side layer, back to front (world units, absolute). */\n\tsideZ: number[];\n\t/** z of the front copy. */\n\tfrontZ: number;\n\t/** Side colour, `#rrggbb`. */\n\tsideColor: string;\n}\n\nfunction shadeHex(hex: string, factor: number): string {\n\tconst match = /^#?([0-9a-f]{6})$/iu.exec(hex.trim());\n\tif (!match) {\n\t\treturn hex;\n\t}\n\tconst n = Number.parseInt(match[1], 16);\n\tconst channel = (shift: number): string =>\n\t\tMath.round(((n >> shift) & 255) * factor)\n\t\t\t.toString(16)\n\t\t\t.padStart(2, '0');\n\treturn `#${channel(16)}${channel(8)}${channel(0)}`;\n}\n\n/**\n * The stacked layers for an extruded label, or `undefined` when the label is\n * flat (no `extrusion`).\n */\nexport function smartArt3DTextLayers(block: SmartArt3DTextBlock): SmartArt3DTextLayers | undefined {\n\tconst depth = block.extrusion ?? 0;\n\tif (!(depth > 0)) {\n\t\treturn undefined;\n\t}\n\tconst count = Math.max(1, Math.min(MAX_TEXT_LAYERS, Math.ceil(depth / TEXT_LAYER_STEP)));\n\tconst sideZ: number[] = [];\n\tfor (let i = 0; i < count; i++) {\n\t\tsideZ.push(block.z + (depth * i) / count);\n\t}\n\treturn {\n\t\tsideZ,\n\t\tfrontZ: block.z + depth,\n\t\tsideColor: shadeHex(block.extrusionColor ?? block.color, TEXT_SIDE_SHADE),\n\t};\n}\n","/**\n * The label of a lit SmartArt 3D mesh (bevel / scene quick styles): the same\n * canvas-texture plane the flat path draws, tinted by the light rig, and\n * stacked into a solid when the quick style extrudes the text itself\n * (`render/smartart-3d-text-extrusion.ts`).\n *\n * Must not import `three` at runtime (it takes the module as a parameter).\n *\n * @module smartart-3d/lit-text-object\n */\nimport type * as THREE from 'three';\n\nimport type { SmartArt3DLightModel } from '../render/smartart-3d-lighting';\nimport { smartArt3DTextLayers } from '../render/smartart-3d-text-extrusion';\nimport type { SmartArt3DMesh, SmartArt3DTextBlock } from '../render/smartart-3d-types';\nimport type { ThreeModule } from '../three-view/types';\nimport type { Disposable } from './flat-mesh-object';\nimport { buildTextBlockTexture } from './text-block-texture';\n\n/**\n * Planes showing `block` at each of `zs` (sharing one texture, geometry and\n * material).\n */\nfunction textPlanes(\n\tthree: ThreeModule,\n\tmesh: SmartArt3DMesh,\n\tblock: SmartArt3DTextBlock,\n\tzs: readonly number[],\n\tlight: SmartArt3DLightModel,\n\tdisposables: Disposable[],\n): THREE.Mesh[] {\n\tconst built = zs.length > 0 ? buildTextBlockTexture(three, block) : null;\n\tif (!built) {\n\t\treturn [];\n\t}\n\tconst geometry = new three.PlaneGeometry(built.worldWidth, built.worldHeight);\n\tconst material = new three.MeshBasicMaterial({\n\t\tmap: built.texture,\n\t\ttransparent: true,\n\t\tdepthWrite: false,\n\t});\n\t// The rig's tint is a linear factor, like the solids' vertex colours.\n\tmaterial.color.setRGB(light.tint[0], light.tint[1], light.tint[2]);\n\tdisposables.push(built.texture, geometry, material);\n\treturn zs.map((z) => {\n\t\tconst plane = new three.Mesh(geometry, material);\n\t\t// Text blocks carry world positions; the group sits at the mesh position.\n\t\tplane.position.set(block.x - mesh.position.x, block.y - mesh.position.y, z - mesh.position.z);\n\t\treturn plane;\n\t});\n}\n\n/** Add the lit label (flat or extruded) of `mesh` to `group`. */\nexport function buildLitTextObject(\n\tthree: ThreeModule,\n\tmesh: SmartArt3DMesh,\n\tgroup: THREE.Group,\n\tlight: SmartArt3DLightModel,\n\tdisposables: Disposable[],\n): void {\n\tconst block = mesh.textBlock;\n\tif (!block) {\n\t\treturn;\n\t}\n\tconst layers = smartArt3DTextLayers(block);\n\tconst planes = [\n\t\t...(layers\n\t\t\t? textPlanes(\n\t\t\t\t\tthree,\n\t\t\t\t\tmesh,\n\t\t\t\t\t{ ...block, color: layers.sideColor },\n\t\t\t\t\tlayers.sideZ,\n\t\t\t\t\tlight,\n\t\t\t\t\tdisposables,\n\t\t\t\t)\n\t\t\t: []),\n\t\t...textPlanes(three, mesh, block, [layers?.frontZ ?? block.z], light, disposables),\n\t];\n\tfor (const plane of planes) {\n\t\tgroup.add(plane);\n\t}\n}\n","/**\n * Build the three.js `Object3D` for one lit `SmartArt3DMesh` (bevel / scene\n * quick styles): the solid from `render/smartart-3d-solid-geometry.ts`,\n * shaded per vertex by `render/smartart-3d-vertex-shading.ts`, plus the same\n * stroke and text label the flat path draws.\n *\n * Must not import `three` at runtime (it takes the module as a parameter).\n *\n * @module smartart-3d/lit-mesh-object\n */\nimport type * as THREE from 'three';\n\nimport {\n\tsmartArt3DGradientColor,\n\tsmartArt3DGradientCoordinate,\n} from '../render/smartart-3d-drawing-solid';\nimport type { SmartArt3DLightModel } from '../render/smartart-3d-lighting';\nimport { toCcwRing } from '../render/smartart-3d-ring';\nimport type { SolidCap, SolidTriangles } from '../render/smartart-3d-solid-geometry';\nimport { buildSmartArt3DSolidGeometry } from '../render/smartart-3d-solid-geometry';\nimport type { SmartArt3DGradient } from '../render/smartart-3d-solid-types';\nimport type { Point2, SmartArt3DMesh, Vec3 } from '../render/smartart-3d-types';\nimport type { Rgb } from '../render/smartart-3d-vertex-shading';\nimport { hexToRgb, shadeSmartArt3DVertices } from '../render/smartart-3d-vertex-shading';\nimport type { ThreeModule } from '../three-view/types';\nimport type { Disposable, MeshObject } from './flat-mesh-object';\nimport { buildStrokeLines } from './flat-mesh-object';\nimport { buildLitTextObject } from './lit-text-object';\n\n/** Width of the 1D gradient lookup texture. */\nconst GRADIENT_TEXELS = 256;\n\n/** Append a triangulated planar cap to a triangle list. */\nfunction appendCap(three: ThreeModule, out: SolidTriangles, cap: SolidCap): void {\n\tif (cap.ring.length < 3) {\n\t\treturn;\n\t}\n\tconst contour = cap.ring.map((p) => new three.Vector2(p.x, p.y));\n\tconst holes = cap.holes.map((hole) => hole.map((p) => new three.Vector2(p.x, p.y)));\n\tconst all = [...contour, ...holes.flat()];\n\tfor (const face of three.ShapeUtils.triangulateShape(contour, holes)) {\n\t\tfor (const index of face) {\n\t\t\tconst p = all[index];\n\t\t\tout.positions.push(p.x, p.y, cap.z);\n\t\t\tout.normals.push(0, 0, cap.facing);\n\t\t}\n\t}\n}\n\nfunction buildGradientTexture(\n\tthree: ThreeModule,\n\tgradient: SmartArt3DGradient,\n): THREE.CanvasTexture | null {\n\tif (typeof document === 'undefined') {\n\t\treturn null;\n\t}\n\tconst canvas = document.createElement('canvas');\n\tcanvas.width = GRADIENT_TEXELS;\n\tcanvas.height = 1;\n\tconst ctx = canvas.getContext('2d');\n\tif (!ctx) {\n\t\treturn null;\n\t}\n\tconst paint = ctx.createLinearGradient(0, 0, GRADIENT_TEXELS, 0);\n\tfor (const stop of gradient.stops) {\n\t\tpaint.addColorStop(stop.offset, stop.color);\n\t}\n\tctx.fillStyle = paint;\n\tctx.fillRect(0, 0, GRADIENT_TEXELS, 1);\n\tconst texture = new three.CanvasTexture(canvas);\n\ttexture.colorSpace = three.SRGBColorSpace;\n\ttexture.wrapS = three.ClampToEdgeWrapping;\n\ttexture.needsUpdate = true;\n\treturn texture;\n}\n\ninterface PaintedPart {\n\ttriangles: SolidTriangles;\n\tcolor: string;\n\tgradient?: SmartArt3DGradient;\n\t/** The mesh's fill opacity (a Venn circle's 50% alpha); 1 when opaque. */\n\topacity: number;\n}\n\nfunction buildPart(\n\tthree: ThreeModule,\n\tpart: PaintedPart,\n\tlight: SmartArt3DLightModel,\n\teye: Vec3 | undefined,\n\tdisposables: Disposable[],\n): THREE.Mesh | null {\n\tconst { positions, normals } = part.triangles;\n\tif (positions.length === 0) {\n\t\treturn null;\n\t}\n\tconst gradient = part.gradient;\n\tconst flatColor = hexToRgb(part.color);\n\tconst baseAt = (p: Point2): Rgb => (gradient ? smartArt3DGradientColor(gradient, p) : flatColor);\n\tconst geometry = new three.BufferGeometry();\n\tgeometry.setAttribute('position', new three.Float32BufferAttribute(positions, 3));\n\tgeometry.setAttribute(\n\t\t'color',\n\t\tnew three.BufferAttribute(shadeSmartArt3DVertices(positions, normals, baseAt, light, eye), 3),\n\t);\n\tconst texture = gradient ? buildGradientTexture(three, gradient) : null;\n\tif (gradient && texture) {\n\t\tconst uv: number[] = [];\n\t\tfor (let i = 0; i < positions.length; i += 3) {\n\t\t\tuv.push(\n\t\t\t\tsmartArt3DGradientCoordinate({ x: positions[i], y: positions[i + 1] }, gradient),\n\t\t\t\t0.5,\n\t\t\t);\n\t\t}\n\t\tgeometry.setAttribute('uv', new three.Float32BufferAttribute(uv, 2));\n\t\tdisposables.push(texture);\n\t}\n\tconst material = new three.MeshBasicMaterial({\n\t\tcolor: texture ? '#ffffff' : part.color,\n\t\tmap: texture,\n\t\tvertexColors: true,\n\t\tside: three.DoubleSide,\n\t\ttransparent: part.opacity < 1,\n\t\topacity: part.opacity,\n\t});\n\tdisposables.push(geometry, material);\n\treturn new three.Mesh(geometry, material);\n}\n\n/**\n * Build the complete `Object3D` for one lit mesh (in diagram space; a scene\n * camera's rotation is applied by the caller's parent group).\n *\n * @param eye - a perspective scene camera's position in diagram space.\n */\nexport function buildLitMeshObject(\n\tthree: ThreeModule,\n\tmesh: SmartArt3DMesh,\n\tlight: SmartArt3DLightModel,\n\teye?: Vec3,\n): MeshObject {\n\tconst localEye = eye\n\t\t? { x: eye.x - mesh.position.x, y: eye.y - mesh.position.y, z: eye.z - mesh.position.z }\n\t\t: undefined;\n\tconst disposables: Disposable[] = [];\n\tconst group = new three.Group();\n\tgroup.position.set(mesh.position.x, mesh.position.y, mesh.position.z);\n\n\tif (!mesh.fillNone && mesh.outline.length >= 3) {\n\t\tconst holes = mesh.holes ?? [];\n\t\tconst geometry = mesh.solid\n\t\t\t? buildSmartArt3DSolidGeometry(mesh.outline, holes, mesh.solid)\n\t\t\t: undefined;\n\t\tconst body: SolidTriangles = geometry?.body ?? { positions: [], normals: [] };\n\t\tappendCap(\n\t\t\tthree,\n\t\t\tbody,\n\t\t\tgeometry?.frontCap ?? { ring: toCcwRing(mesh.outline), holes, z: 0, facing: 1 },\n\t\t);\n\t\tconst sides: SolidTriangles = geometry?.sides ?? { positions: [], normals: [] };\n\t\tif (geometry?.backCap) {\n\t\t\tappendCap(three, sides, geometry.backCap);\n\t\t}\n\t\tconst contour: SolidTriangles = { positions: [], normals: [] };\n\t\tfor (const cap of geometry?.contourCaps ?? []) {\n\t\t\tappendCap(three, contour, cap);\n\t\t}\n\t\tconst parts: PaintedPart[] = [\n\t\t\t{ triangles: body, color: mesh.fill, gradient: mesh.gradient, opacity: mesh.opacity },\n\t\t\t{\n\t\t\t\ttriangles: sides,\n\t\t\t\tcolor: mesh.solid?.extrusionColor ?? mesh.fill,\n\t\t\t\topacity: mesh.opacity,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttriangles: contour,\n\t\t\t\tcolor: mesh.solid?.contourColor ?? mesh.fill,\n\t\t\t\topacity: mesh.opacity,\n\t\t\t},\n\t\t];\n\t\tfor (const part of parts) {\n\t\t\tconst built = buildPart(three, part, light, localEye, disposables);\n\t\t\tif (built) {\n\t\t\t\tif (mesh.opacity < 1) {\n\t\t\t\t\t// A translucent fill (Basic Venn): the whole solid shows through.\n\t\t\t\t\tconst material = built.material as THREE.MeshBasicMaterial;\n\t\t\t\t\tmaterial.transparent = true;\n\t\t\t\t\tmaterial.opacity = mesh.opacity;\n\t\t\t\t}\n\t\t\t\tgroup.add(built);\n\t\t\t}\n\t\t}\n\t}\n\tfor (const line of buildStrokeLines(three, mesh, disposables)) {\n\t\tgroup.add(line);\n\t}\n\tbuildLitTextObject(three, mesh, group, light, disposables);\n\treturn { group, disposables };\n}\n","/**\n * Cameras for the `<pptx-three-view>` SmartArt scene: the face-on\n * orthographic framing every quick style starts from, and the whole-diagram\n * camera of a scene quick style (`SmartArt3DModel.camera`).\n *\n * Both frame the diagram's own bounds (letterboxed to the view's aspect) so\n * the z = 0 plane keeps the 2D layout's scale; a scene camera then turns the\n * diagram about its centre (see `render/smartart-3d-scene-camera.ts`) and, for\n * a perspective preset, looks at it from `distance` layout px away with a\n * field of view that still frames that plane at the same scale.\n *\n * Must not import `three` at runtime.\n *\n * @module smartart-3d/view-camera\n */\nimport type * as THREE from 'three';\n\nimport type { SmartArt3DBounds, SmartArt3DCamera } from '../render/smartart-3d-types';\nimport type { ThreeModule, ThreeViewSize } from '../three-view/types';\n\n/** Orthographic camera distance from the origin along +z (near/far only). */\nconst ORTHO_DISTANCE = 1000;\n\n/** Half-extents of the view frustum at z = 0, letterboxed to the view's aspect. */\nfunction frameHalfExtents(\n\tbounds: SmartArt3DBounds,\n\tsize: ThreeViewSize,\n): { halfW: number; halfH: number } {\n\tconst halfW = Math.max(1, bounds.width) / 2;\n\tconst halfH = Math.max(1, bounds.height) / 2;\n\tconst aspect = Math.max(1, size.pixelWidth) / Math.max(1, size.pixelHeight);\n\tconst fitHalfH = Math.max(halfH, halfW / aspect);\n\treturn { halfW: fitHalfH * aspect, halfH: fitHalfH };\n}\n\n/** The camera for a model, framed for `size`. */\nexport function buildSmartArtViewCamera(\n\tthree: ThreeModule,\n\tbounds: SmartArt3DBounds,\n\tsceneCamera: SmartArt3DCamera | undefined,\n\tsize: ThreeViewSize,\n): THREE.OrthographicCamera | THREE.PerspectiveCamera {\n\tlet camera: THREE.OrthographicCamera | THREE.PerspectiveCamera;\n\tif (sceneCamera?.projection === 'perspective') {\n\t\tconst distance = Math.max(1, sceneCamera.distance);\n\t\tcamera = new three.PerspectiveCamera(30, 1, distance / 20, distance * 20);\n\t\tcamera.position.set(0, 0, distance);\n\t} else {\n\t\tcamera = new three.OrthographicCamera(-1, 1, 1, -1, -ORTHO_DISTANCE * 2, ORTHO_DISTANCE * 2);\n\t\tcamera.position.set(0, 0, ORTHO_DISTANCE);\n\t}\n\tcamera.zoom = sceneCamera?.zoom ?? 1;\n\tcamera.lookAt(0, 0, 0);\n\tfitSmartArtViewCamera(camera, bounds, size);\n\treturn camera;\n}\n\n/** Re-frame a camera from {@link buildSmartArtViewCamera} for a new view size. */\nexport function fitSmartArtViewCamera(\n\tcamera: THREE.OrthographicCamera | THREE.PerspectiveCamera,\n\tbounds: SmartArt3DBounds,\n\tsize: ThreeViewSize,\n): void {\n\tconst { halfW, halfH } = frameHalfExtents(bounds, size);\n\tif ('isPerspectiveCamera' in camera && camera.isPerspectiveCamera) {\n\t\tcamera.aspect = halfW / halfH;\n\t\tcamera.fov = (2 * Math.atan(halfH / camera.position.length()) * 180) / Math.PI;\n\t} else {\n\t\tconst ortho = camera as THREE.OrthographicCamera;\n\t\tortho.left = -halfW;\n\t\tortho.right = halfW;\n\t\tortho.top = halfH;\n\t\tortho.bottom = -halfH;\n\t}\n\tcamera.updateProjectionMatrix();\n}\n","/**\n * How far a turned SmartArt diagram reaches past its element box, and the\n * camera framing that draws it there (see `three-view/view-overflow.ts`).\n *\n * Must not import `three` at runtime (it takes the module as a parameter).\n *\n * @module smartart-3d/view-overflow\n */\nimport type * as THREE from 'three';\n\nimport type { ThreeModule, ThreeViewOverflow, ThreeViewSize } from '../three-view/types';\nimport {\n\thasThreeViewOverflow,\n\tNO_THREE_VIEW_OVERFLOW,\n\toverflowViewOffset,\n\tthreeViewOverflowFromNdc,\n} from '../three-view/view-overflow';\n\ntype ViewCamera = THREE.OrthographicCamera | THREE.PerspectiveCamera;\n\n/**\n * Project the corners of every mesh's bounding box through `camera` (with no\n * view offset) and measure how far they reach past the element box.\n */\nfunction measureOverflow(\n\tthree: ThreeModule,\n\troot: THREE.Object3D,\n\tcamera: ViewCamera,\n): ThreeViewOverflow {\n\troot.updateMatrixWorld(true);\n\tcamera.updateMatrixWorld(true);\n\tconst points: { x: number; y: number }[] = [];\n\tconst corner = new three.Vector3();\n\troot.traverse((object) => {\n\t\tconst geometry = (object as THREE.Mesh).geometry as THREE.BufferGeometry | undefined;\n\t\tif (!geometry?.getAttribute?.('position')) {\n\t\t\treturn;\n\t\t}\n\t\tif (!geometry.boundingBox) {\n\t\t\tgeometry.computeBoundingBox();\n\t\t}\n\t\tconst box = geometry.boundingBox;\n\t\tif (!box || box.isEmpty()) {\n\t\t\treturn;\n\t\t}\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tcorner\n\t\t\t\t.set(\n\t\t\t\t\ti & 1 ? box.max.x : box.min.x,\n\t\t\t\t\ti & 2 ? box.max.y : box.min.y,\n\t\t\t\t\ti & 4 ? box.max.z : box.min.z,\n\t\t\t\t)\n\t\t\t\t.applyMatrix4(object.matrixWorld)\n\t\t\t\t.project(camera);\n\t\t\tpoints.push({ x: corner.x, y: corner.y });\n\t\t}\n\t});\n\treturn threeViewOverflowFromNdc(points);\n}\n\n/**\n * Frame `camera` for the element box plus the diagram's overflow, and return\n * that overflow. `turned` is false for a face-on diagram, which always fits\n * its box (no overflow is measured).\n */\nexport function frameSmartArtOverflow(\n\tthree: ThreeModule,\n\troot: THREE.Object3D,\n\tcamera: ViewCamera,\n\tsize: ThreeViewSize,\n\tturned: boolean,\n): ThreeViewOverflow {\n\tcamera.clearViewOffset();\n\tif (!turned) {\n\t\treturn NO_THREE_VIEW_OVERFLOW;\n\t}\n\tconst overflow = measureOverflow(three, root, camera);\n\tif (hasThreeViewOverflow(overflow)) {\n\t\tconst offset = overflowViewOffset(size, overflow);\n\t\tcamera.setViewOffset(\n\t\t\toffset.fullWidth,\n\t\t\toffset.fullHeight,\n\t\t\toffset.x,\n\t\t\toffset.y,\n\t\t\toffset.width,\n\t\t\toffset.height,\n\t\t);\n\t}\n\treturn overflow;\n}\n","/**\n * `<pptx-three-view>` scene module for 3D SmartArt.\n *\n * Flat quick styles (Simple Fill, White Outline, Subtle, Moderate, Intense):\n * every mesh is a zero-depth `ShapeGeometry` face, unlit (`MeshBasicMaterial`),\n * under a fixed orthographic camera framing the diagram's own viewBox\n * (`model.bounds`) - the same geometry/fills/text the 2D SVG renderer draws,\n * built by `render/smartart-3d-drawing-model.ts`.\n *\n * Bevel and scene quick styles (`model.styleCategory` `'bevel'`/`'scene'`):\n * each mesh becomes a lit solid (`lit-mesh-object.ts`: bevel bands,\n * extrusion, contour, per-vertex shading from the model's light rig). A scene\n * style also turns the whole diagram by its quick-style camera\n * (`model.camera`, `view-camera.ts`).\n *\n * Must not import `three` at runtime (use `ctx.three`): this module is\n * reachable from the main barrel through the scene registry.\n *\n * @module smartart-3d/view-scene\n */\n\nimport { resolveSmartArt3DLightModel } from '../render/smartart-3d-lighting';\nimport { smartArt3DCameraMatrix, smartArt3DEyeInDiagram } from '../render/smartart-3d-scene-camera';\nimport type { SmartArt3DModel } from '../render/smartart-3d-types';\nimport type { ThreeOrbitControls, ThreeViewContext, ThreeViewScene } from '../three-view/types';\nimport type { Disposable } from './flat-mesh-object';\nimport { buildFlatMeshObject } from './flat-mesh-object';\nimport { buildLitMeshObject } from './lit-mesh-object';\nimport { buildSmartArtViewCamera, fitSmartArtViewCamera } from './view-camera';\nimport { frameSmartArtOverflow } from './view-overflow';\n\nexport async function mountSmartArt3DView(\n\tmodel: SmartArt3DModel,\n\tctx: ThreeViewContext,\n): Promise<ThreeViewScene> {\n\tconst { three } = ctx;\n\tconst scene = new three.Scene();\n\tif (model.background) {\n\t\tscene.background = new three.Color(model.background);\n\t}\n\n\tconst disposables: Disposable[] = [];\n\tconst lit = model.styleCategory === 'bevel' || model.styleCategory === 'scene';\n\tconst view = model.camera ? smartArt3DCameraMatrix(model.camera) : undefined;\n\tconst eye = model.camera ? smartArt3DEyeInDiagram(model.camera) : undefined;\n\tconst root = new three.Group();\n\tif (view) {\n\t\troot.matrixAutoUpdate = false;\n\t\troot.matrix.set(\n\t\t\tview[0],\n\t\t\tview[1],\n\t\t\tview[2],\n\t\t\t0,\n\t\t\tview[3],\n\t\t\tview[4],\n\t\t\tview[5],\n\t\t\t0,\n\t\t\tview[6],\n\t\t\tview[7],\n\t\t\tview[8],\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t1,\n\t\t);\n\t}\n\tscene.add(root);\n\tfor (const mesh of model.meshes) {\n\t\tconst built = lit\n\t\t\t? buildLitMeshObject(\n\t\t\t\t\tthree,\n\t\t\t\t\tmesh,\n\t\t\t\t\tresolveSmartArt3DLightModel(model.lighting, mesh.solid?.material, eye !== undefined),\n\t\t\t\t\teye,\n\t\t\t\t)\n\t\t\t: buildFlatMeshObject(three, mesh);\n\t\troot.add(built.group);\n\t\tdisposables.push(...built.disposables);\n\t}\n\n\tconst camera = buildSmartArtViewCamera(three, model.bounds, model.camera, ctx.size);\n\tconst authoredPosition = camera.position.clone();\n\t// A turned diagram draws past its box as PowerPoint does (view-overflow.ts).\n\tlet overflow = frameSmartArtOverflow(three, root, camera, ctx.size, Boolean(model.camera));\n\n\tlet controls: ThreeOrbitControls | null = null;\n\tlet dampingActive = false;\n\tif (ctx.OrbitControls) {\n\t\tcontrols = new ctx.OrbitControls(camera, ctx.eventTarget);\n\t\tcontrols.enableDamping = true;\n\t\tcontrols.enablePan = false;\n\t\tcontrols.enabled = ctx.interactive;\n\t\tcontrols.enableRotate = ctx.interactive;\n\t\tcontrols.enableZoom = ctx.interactive;\n\t\tconst onChange = (): void => {\n\t\t\tdampingActive = true;\n\t\t\tctx.requestRender();\n\t\t};\n\t\tcontrols.addEventListener('change', onChange);\n\t}\n\n\tconst resetView = (): void => {\n\t\tcamera.position.copy(authoredPosition);\n\t\tcamera.lookAt(0, 0, 0);\n\t\tif (controls) {\n\t\t\tcontrols.target.set(0, 0, 0);\n\t\t\tcontrols.update();\n\t\t}\n\t\tctx.requestRender();\n\t};\n\tconst onDoubleClick = (): void => resetView();\n\tctx.eventTarget.addEventListener('dblclick', onDoubleClick);\n\n\treturn {\n\t\trender(renderer) {\n\t\t\tif (controls) {\n\t\t\t\tdampingActive = controls.update();\n\t\t\t}\n\t\t\trenderer.render(scene, camera);\n\t\t},\n\t\tresize(size) {\n\t\t\tfitSmartArtViewCamera(camera, model.bounds, size);\n\t\t\toverflow = frameSmartArtOverflow(three, root, camera, size, Boolean(model.camera));\n\t\t},\n\t\toverflow() {\n\t\t\treturn overflow;\n\t\t},\n\t\tisAnimating() {\n\t\t\treturn dampingActive;\n\t\t},\n\t\tsetInteractive(on) {\n\t\t\tif (!controls) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcontrols.enabled = on;\n\t\t\tcontrols.enableRotate = on;\n\t\t\tcontrols.enableZoom = on;\n\t\t\tif (!on) {\n\t\t\t\tresetView();\n\t\t\t}\n\t\t},\n\t\tdispose() {\n\t\t\tctx.eventTarget.removeEventListener('dblclick', onDoubleClick);\n\t\t\tcontrols?.dispose();\n\t\t\tfor (const d of disposables) {\n\t\t\t\td.dispose();\n\t\t\t}\n\t\t},\n\t};\n}\n"],"names":[],"mappings":"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"}