pptx-angular-viewer 3.9.0 → 3.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.
@@ -374,39 +374,6 @@ declare const DEFAULT_FILL_COLOR = "#3b82f6";
374
374
  /** Fallback shape stroke colour. */
375
375
  declare const DEFAULT_STROKE_COLOR = "#1f2937";
376
376
 
377
- /**
378
- * `hollow-shape-hit-test`: making an UNFILLED shape click-through.
379
- *
380
- * PowerPoint hit-tests an unfilled shape on its OUTLINE and its TEXT only: a
381
- * bare frame drawn over a chart is a border you can grab, not a pane that
382
- * swallows every click inside it. The web does not work that way - a
383
- * `background: transparent` box still hit-tests across its whole border box -
384
- * so a `<a:noFill/>` rectangle laid over other content stole every click meant
385
- * for what was underneath it, and those elements could only be selected by
386
- * moving the frame out of the way (issue #132 deck, slide 5, where a panel
387
- * frame sat over a bar chart and two text boxes).
388
- *
389
- * The fix mirrors `connector-hit-target`, which solves the same problem from the
390
- * other direction: the container goes `pointer-events: none` and a TRANSPARENT
391
- * stroke along the shape's own outline opts that outline back in with
392
- * `pointer-events: stroke`. `pointer-events` inherits, so a descendant
393
- * re-enabling itself under a `none` ancestor works by construction.
394
- *
395
- * Deliberately narrow: only a shape with NO text qualifies. An unfilled TEXT
396
- * box is also outline-only in PowerPoint, but its text must stay clickable and
397
- * that is a much larger behavioural change than the reported bug needs.
398
- *
399
- * @module render/hollow-shape-hit-test
400
- */
401
-
402
- /** Geometry and band width for a hollow shape's transparent outline target. */
403
- interface HollowHitOutline {
404
- /** SVG path data for the shape's own outline. */
405
- readonly d: string;
406
- /** Width of the transparent stroke painted along it. */
407
- readonly strokeWidth: number;
408
- }
409
-
410
377
  /**
411
378
  * Shape geometry helpers — Vue port of the React package's
412
379
  * `viewer/utils/resolved-shape-clip-path.ts` cascade.
@@ -555,279 +522,6 @@ declare function buildPatternFillCss(style: ShapeStyle | undefined): {
555
522
  backgroundImage: string;
556
523
  backgroundColor: string;
557
524
  } | undefined;
558
- /** Result of {@link getComputedFillStyle}. */
559
- interface ComputedFillStyle {
560
- backgroundColor?: string;
561
- backgroundImage?: string;
562
- backgroundSize?: string;
563
- backgroundPosition?: string;
564
- backgroundRepeat?: string;
565
- /** Carried through for renderers that need to inject pattern defs. */
566
- svgFilter?: {
567
- id: string;
568
- markup: string;
569
- };
570
- }
571
-
572
- /**
573
- * `path="rect"` SVG paint server: the true nested-rectangle (Chebyshev)
574
- * gradient field, as a `<pattern>` whose tile is the same normalised SVG
575
- * image {@link ./path-gradient-rect.ts} builds for the CSS `background-image`
576
- * path.
577
- *
578
- * Split out of `svg-gradient-paint.ts` (which stays focused on the
579
- * `<linearGradient>` / `<radialGradient>` paint servers SVG can express
580
- * natively) to keep both files under this repo's ~300-LOC guideline.
581
- *
582
- * @module svg-gradient-rect-path
583
- */
584
-
585
- /**
586
- * A `path="rect"` gradient's true nested-rectangle field, painted as a
587
- * `<pattern>` whose single tile is stretched to the shape's own box
588
- * (`patternUnits="objectBoundingBox"`, `width`/`height` 1, the `<image>`
589
- * itself `preserveAspectRatio="none"`).
590
- *
591
- * SVG's native `<radialGradient>` can only express an ellipse, which is a
592
- * visibly wrong approximation for a rect-path gradient near a non-square
593
- * shape's corners (see `path-gradient-rect.ts`'s module doc), so a freeform
594
- * (`a:custGeom`) shape with `a:path type="rect"` needs this distinct paint
595
- * server instead of an elliptical `SvgRadialGradientDef`.
596
- */
597
- interface SvgRectPathGradientDef {
598
- kind: 'rectPath';
599
- id: string;
600
- /** `data:image/svg+xml,...` of the nested-rectangle band field. */
601
- href: string;
602
- }
603
-
604
- /**
605
- * SVG `<pattern>` paint server for a preset pattern OUTLINE (`a:ln/a:pattFill`).
606
- *
607
- * Split out of `svg-gradient-paint.ts` to keep that file (and this one) under
608
- * this repo's ~300-LOC guideline; both are part of the same "freeform shape
609
- * needs a real SVG paint server, not a flattened representative colour"
610
- * effort (see that module's header).
611
- *
612
- * @module svg-stroke-pattern-paint
613
- */
614
-
615
- /**
616
- * An SVG `<pattern>` paint server for a preset pattern OUTLINE.
617
- *
618
- * The tile is carried as a data-URI `<image>` rather than inline primitives so
619
- * every binding can render the `<pattern>` from plain attribute bindings, with
620
- * no raw-markup injection (which Angular's template sanitiser would fight).
621
- */
622
- interface SvgPatternDef {
623
- kind: 'pattern';
624
- id: string;
625
- /** Tile size in user-space px; the pattern repeats on this grid. */
626
- width: number;
627
- height: number;
628
- /** `data:image/svg+xml,…` of one rendered tile. */
629
- href: string;
630
- }
631
-
632
- /**
633
- * OOXML gradient fill (`a:gradFill`) → SVG paint server.
634
- *
635
- * The CSS resolvers in `fill-style.ts` cover every shape a binding paints as an
636
- * HTML box (a `background-image` clipped by `clip-path`). Freeform geometry is
637
- * different: `a:custGeom` shapes are painted as a real SVG `<path>`, and an SVG
638
- * `fill` attribute cannot take a CSS gradient. Renderers therefore fell back to
639
- * the parser's *representative* solid colour, so a freeform authored with a
640
- * left-to-right fade rendered as one flat block and any transparent region of
641
- * the gradient became opaque (issue #132).
642
- *
643
- * This module converts the same structured `ShapeStyle` gradient data into an
644
- * SVG `<linearGradient>` / `<radialGradient>` descriptor plus the `url(#id)`
645
- * reference to put in `fill`. It stays framework-agnostic: JSX/template
646
- * bindings read {@link SvgGradientDef} and emit their own elements, while
647
- * string-building bindings can use {@link svgGradientMarkup}.
648
- *
649
- * Reference: ECMA-376 Part 1, §20.1.8.35 (gradFill) and §20.1.8.49 (path).
650
- */
651
-
652
- /** One `<stop>` of an SVG gradient. */
653
- interface SvgGradientStopDef {
654
- /** Stop offset as a fraction of the gradient line (0-1). */
655
- offset: number;
656
- /** Stop colour as `#RRGGBB`. */
657
- color: string;
658
- /** Stop alpha (0-1). Omitted when the stop is fully opaque. */
659
- opacity?: number;
660
- }
661
- /** An SVG `<linearGradient>` in `objectBoundingBox` units. */
662
- interface SvgLinearGradientDef {
663
- kind: 'linear';
664
- id: string;
665
- x1: number;
666
- y1: number;
667
- x2: number;
668
- y2: number;
669
- stops: SvgGradientStopDef[];
670
- }
671
- /** An SVG `<radialGradient>` in `objectBoundingBox` units. */
672
- interface SvgRadialGradientDef {
673
- kind: 'radial';
674
- id: string;
675
- cx: number;
676
- cy: number;
677
- r: number;
678
- stops: SvgGradientStopDef[];
679
- }
680
-
681
- /** Either flavour of SVG gradient produced by {@link buildSvgGradientDef}. */
682
- type SvgGradientDef = SvgLinearGradientDef | SvgRadialGradientDef | SvgRectPathGradientDef;
683
-
684
- /**
685
- * Stroked SVG OUTLINES: gradient/pattern lines (`a:ln/a:gradFill`,
686
- * `a:ln/a:pattFill`), stroke-only ("open") preset geometry, and centred
687
- * (`a:ln/@algn="ctr"`) solid lines.
688
- *
689
- * Every binding paints a shape's outline as a CSS `border`, which can only take
690
- * a single flat colour, can only outline a BOX, and - because `box-sizing:
691
- * border-box` puts the whole border INSIDE the element's declared box - can only
692
- * express `a:ln/@algn="in"`. That breaks three ways:
693
- *
694
- * - A gradient outline was rendered with the parser's averaged `strokeColor`
695
- * (two-tone came out flat, fade-to-transparent came out opaque), and a
696
- * patterned outline with the pattern's foreground alone, so the hatching
697
- * disappeared entirely.
698
- * - An open preset (`<a:prstGeom prst="line"/>`, the connector family, `arc`,
699
- * …) has no region to fill and no box to outline, so a CSS border drew a
700
- * RECTANGLE where PowerPoint draws a line or an arc. See
701
- * `./stroke-only-preset`.
702
- * - `@algn="ctr"` is PowerPoint's DEFAULT (an omitted `@algn` means `ctr`, not
703
- * `in`): the line straddles the shape's path, half outside the box and half
704
- * over the fill. A `border-box` CSS border cannot straddle anything - it can
705
- * only sit flush with the box edge - so every bordered shape at the default
706
- * alignment rendered `strokeWidth / 2` too small on each edge. An SVG
707
- * `<path>` stroke is centred on the path by definition, so routing the
708
- * default-aligned case through this same overlay is the fix; `@algn="in"`
709
- * keeps the cheap `border-box` CSS border, which is already exactly right.
710
- *
711
- * CSS has no way to fix any of these in place - `border-image` ignores
712
- * `border-radius` and cannot follow a `clip-path`, and no CSS property centres a
713
- * border on the box edge - so the outline is instead stroked as a real SVG path
714
- * laid over the element, using the shape's own resolved geometry. This module
715
- * turns an element into everything a binding needs for that overlay; the
716
- * bindings supply only the ~10 lines of view layer.
717
- */
718
-
719
- /** The paint server an outline is stroked with: a gradient or a pattern. */
720
- type StrokeOutlinePaint = SvgGradientDef | SvgPatternDef;
721
- /**
722
- * One parallel stroke of a compound (`a:ln/@cmpd`) line: its width, and its
723
- * perpendicular offset from the centre line in element px. A single line is one
724
- * strand at offset `0`.
725
- */
726
- interface StrokeOutlineStrand {
727
- strokeWidth: number;
728
- offset: number;
729
- }
730
- /** Everything needed to stroke one shape's outline as an SVG overlay. */
731
- interface StrokeOutline {
732
- /** Path data in the element's own pixel space (viewBox `0 0 width height`). */
733
- d: string;
734
- /**
735
- * Paint server to define in `<defs>`, or `undefined` when the outline is
736
- * stroked with a flat colour (an open preset with an ordinary solid line).
737
- */
738
- paint: StrokeOutlinePaint | undefined;
739
- /** Ready-to-use SVG `stroke` value: `url(#…)` for a paint server, else a colour. */
740
- stroke: string;
741
- strokeWidth: number;
742
- /** Parallel strands to emit; one entry unless the line is compound. */
743
- strands: readonly StrokeOutlineStrand[];
744
- /** SVG `stroke-dasharray`, or `undefined` for a solid line. */
745
- dashArray: string | undefined;
746
- lineCap: 'butt' | 'round' | 'square';
747
- lineJoin: 'round' | 'bevel' | 'miter';
748
- }
749
-
750
- /**
751
- * Pure paint-decision logic for per-sub-path geometry, shared by custom
752
- * geometry (`a:custGeom`) AND multi-sub-path preset shapes (`a:prstGeom`).
753
- *
754
- * Kept free of any view-layer concern (JSX, Vue/Angular templates, DOM) so it
755
- * is unit-testable in isolation; each binding's SVG emission is a thin ~10-line
756
- * mapping over its result. Originally lived only in the React package
757
- * (`viewer/utils/vector-subpath-paint.ts`), which meant Vue and Vanilla (and,
758
- * for preset shapes, every binding including React) had no way to honour a
759
- * sub-path's own `@fill`/`@stroke` flags: they flattened every sub-path into
760
- * one merged path with a single element-level fill, so a stroke-only sub-path
761
- * inside a filled shape (an open eye/mouth on `smileyFace`) or a shading
762
- * sub-path (`lighten`/`darken`, the bevel highlight on `actionButton*`) either
763
- * rendered filled-and-distorted or vanished outright.
764
- *
765
- * Both geometry kinds evaluate to the exact same per-sub-path shape -
766
- * `{ d, fillMode, stroke }` - which is what lets ONE function
767
- * ({@link buildSubpathPaints}) paint either: `customGeometryPathsToSvgSubpaths`
768
- * (core) already returns that shape for custom geometry, and preset geometry's
769
- * `PresetSubpathResult` (`{ d, fill, stroke }`, from core's
770
- * `evaluatePresetShape`) is a one-line rename away - see
771
- * `./subpath-fill-overlay`, which resolves *which* elements need this
772
- * treatment and calls this to build the actual paints.
773
- */
774
-
775
- /** Resolved paint intent for a single geometry sub-path. */
776
- interface SubpathPaint {
777
- /** SVG path data for this sub-path. */
778
- d: string;
779
- /** Resolved fill paint, or `'none'` when this sub-path opts out of fill. */
780
- fill: string;
781
- /** Whether this sub-path draws its stroke (`@stroke` !== 0). */
782
- stroked: boolean;
783
- }
784
-
785
- /**
786
- * Per-sub-path FILL overlay: the shared mechanism behind two structurally
787
- * identical bugs.
788
- *
789
- * Both custom geometry (`a:custGeom`) and preset geometry (`a:prstGeom`) can
790
- * carry several sub-paths, each with its own `@fill` mode
791
- * (`norm`/`lighten`/`lightenLess`/`darken`/`darkenLess`/`none`) and `@stroke`
792
- * flag. Every binding paints a shape as ONE box: a single CSS
793
- * `background-color` clipped to a single merged `clip-path` built by
794
- * concatenating every sub-path's `d` together (`getResolvedShapeClipPath`,
795
- * `buildCustomGeometryClipPath`). That merge is lossy two ways:
796
- *
797
- * - It discards each sub-path's own `@fill`, so a preset's shading/bevel
798
- * sub-paths (`lighten`/`darken`, e.g. every `actionButton*`, curved arrows,
799
- * `bevel`, `foldedCorner`) paint as flat instead of shaded, and a `fill="none"`
800
- * sub-path (`smileyFace`'s eyes/mouth) paints FILLED instead of as an open
801
- * stroke - because `clip-path` auto-closes every sub-path.
802
- * - It cannot vary the fill AT ALL across sub-paths, so it is architecturally
803
- * incapable of the above regardless of which colour is chosen.
804
- *
805
- * The fix is the same for both: paint the affected element as layered SVG
806
- * `<path>`s, each carrying its own resolved fill, instead of one CSS box. This
807
- * module decides WHICH elements need that (an element needs it only when at
808
- * least one sub-path's mode is not `norm`/unset, or it opts out of its stroke)
809
- * and builds the paints via the shared `./vector-subpath-paint`; a binding's
810
- * `ShapeEffectOverlay` renders the result as an `<svg>` sibling to the shape
811
- * box (mirroring `buildStrokeOutline`), and `getComputedFillStyle`
812
- * ({@link suppressesCssFill}) drops the CSS background so the flat colour does
813
- * not show underneath.
814
- *
815
- * Restricted to a solid (or absent) fill: a gradient/pattern/image fill keeps
816
- * the existing single merged clip-path box, since neither geometry kind's
817
- * sub-paths can carry an independent paint SERVER (only a solid, mode-shifted
818
- * colour), and the common case for both bug classes - shading/bevel highlights,
819
- * `smileyFace`'s eyes - is a solid theme colour.
820
- */
821
-
822
- /** Everything a binding needs to paint an element's per-sub-path fill overlay. */
823
- interface SubpathFillOverlay {
824
- /** One paint per sub-path, in authoring order. */
825
- readonly paints: readonly SubpathPaint[];
826
- /** `viewBox` width, in the same coordinate space as every `paints[].d`. */
827
- readonly viewBoxWidth: number;
828
- /** `viewBox` height, in the same coordinate space as every `paints[].d`. */
829
- readonly viewBoxHeight: number;
830
- }
831
525
 
832
526
  /**
833
527
  * Stroke/dash normalisation, compound-line box-shadow generation, SVG
@@ -838,59 +532,6 @@ interface SubpathFillOverlay {
838
532
  /** A neutral CSS map (framework `CSSProperties` are structurally compatible). */
839
533
  type CssStyleMap = Record<string, string | number>;
840
534
 
841
- /**
842
- * Per-run inline-style builder for rendered text runs (framework-agnostic).
843
- *
844
- * Maps a `TextSegment`'s `TextStyle` onto a neutral CSS record that every
845
- * binding applies to its own run span. React included: its `text-segment-render`
846
- * now starts from this record and re-resolves only the handful of properties it
847
- * derives more precisely (colour/size/family fallbacks, PANOSE substitution,
848
- * the `@baseline` percentage, the `@kern` threshold, per-run BiDi), each of
849
- * which is documented there as a gap in this module rather than a preference.
850
- * Split out of `text-paragraphs` to keep each module focused and small; this
851
- * module itself later split its letter-spacing/split helpers into
852
- * `text-run-spacing.ts`, its hollow-text fill decision into
853
- * `text-run-hollow.ts`, and its nested-decoration / underline-variant helpers
854
- * into `text-run-decoration.ts`, for the same reason.
855
- */
856
-
857
- /** A plain CSS style map (keys are CSS properties; binding-agnostic). */
858
- type RunStyle = Record<string, string | number>;
859
-
860
- /**
861
- * Per-script (`a:ea` / `a:cs` / `a:sym`) font fallback for one run, as a pure
862
- * decision function every binding maps onto its own nested-span markup.
863
- *
864
- * OOXML authors up to four typefaces per run (`a:latin`, `a:ea`, `a:cs`,
865
- * `a:sym`), and PowerPoint paints each Unicode script category in ITS OWN
866
- * font, not the run's `a:latin` face. This was React-only
867
- * (`renderScriptAwareText` in `text-segment-render.tsx`): the other four
868
- * bindings applied only `a:latin` to the whole run, so CJK, Arabic, Hebrew and
869
- * Thai text rendered in the wrong typeface (or the browser's serif default)
870
- * in Vue, Angular, Svelte and Vanilla.
871
- *
872
- * `resolveScriptFontSet` resolves the four faces (PANOSE-substituted, with the
873
- * run falling back to the text body's own declaration); `splitRunByScriptFont`
874
- * segments a run's text by script and returns, per piece, the CSS a binding
875
- * spreads onto a nested span. A binding does nothing but map that descriptor:
876
- * render `text` plain when a piece carries no `style` override, or a nested
877
- * span with `style` when it does.
878
- */
879
-
880
- /** One script-tagged piece of a run's text, ready for a binding's nested span. */
881
- interface ScriptFontPiece {
882
- text: string;
883
- /**
884
- * CSS for a nested span wrapping `text`, or `undefined` when this piece
885
- * needs no span at all (its script's font equals the run's own, so plain
886
- * text renders identically). When present it carries the `fontFamily`
887
- * override plus the run's own decoration subset, repeated because
888
- * `text-decoration-*` does not inherit into a nested span (see
889
- * `nestedTextDecorationStyle`).
890
- */
891
- style?: RunStyle;
892
- }
893
-
894
535
  /**
895
536
  * `a:reflection` compositing: a real, cross-browser mirrored copy of an
896
537
  * element rather than `-webkit-box-reflect`.
@@ -999,23 +640,9 @@ interface LineShadowParams {
999
640
  color: string;
1000
641
  opacity: number;
1001
642
  }
1002
- /**
1003
- * A fill-overlay tint layer: the overlay {@link https://developer.mozilla.org/en-US/docs/Web/CSS/color colour}
1004
- * (an `rgba()` string carrying the overlay's alpha) plus the `mix-blend-mode`
1005
- * used to composite it over the element. Unlike the whole-element
1006
- * {@link getEffectDagBlendMode} proxy, this describes a *separate* coloured
1007
- * layer the integrator should paint on top of the element (e.g. an absolutely
1008
- * positioned pseudo-element / child), so the tint colour is actually rendered.
1009
- */
1010
- interface FillOverlayCss {
1011
- /** Overlay colour as an `rgba()`/hex string (already includes opacity). */
1012
- color: string;
1013
- /** `mix-blend-mode` for the overlay layer (`normal` for the `over` blend). */
1014
- blendMode: string;
1015
- }
1016
643
 
1017
644
  /**
1018
- * Text warp / WordArt logic Vue port of the React
645
+ * Text warp / WordArt logic: Vue port of the React
1019
646
  * `viewer/utils/warp-path-generators.ts` + `text-warp-classifier.ts`.
1020
647
  *
1021
648
  * Pure, framework-agnostic helpers that classify an OOXML `prstTxWarp` preset
@@ -1030,12 +657,26 @@ interface FillOverlayCss {
1030
657
 
1031
658
  /**
1032
659
  * Rendering-strategy category for a warp preset.
1033
- * - `path`: renders along an SVG `<textPath>` (arcs, waves, circles…)
1034
- * - `envelope`: non-uniform vertical stretch (inflate/deflate/can)
1035
- * - `simple`: basic 2D transforms (slant, fade, cascade)
660
+ * - `path`: renders along an SVG `<textPath>` (arcs, waves, circles,
661
+ * slant/fade/cascade, …)
662
+ * - `envelope`: non-uniform vertical stretch (inflate/deflate/can). Also
663
+ * renders along an SVG `<textPath>`; kept as its own category
664
+ * for documentation/grouping only (see {@link ENVELOPE_PRESETS}).
665
+ * - `simple`: unused (kept for API stability; no preset classifies here
666
+ * any more, see {@link SIMPLE_PRESETS}).
1036
667
  * - `none`: no warp (`textNoShape`, `textPlain`, unknown)
668
+ *
669
+ * Every classified preset (`path` and `envelope` alike) should be routed to
670
+ * SVG `<textPath>` rendering via {@link shouldUseSvgWarp}; a binding that
671
+ * instead branches on this category to decide path-vs-CSS-transform will
672
+ * wrongly fall back to a flat CSS-transform approximation for the `envelope`
673
+ * family. Use `shouldUseSvgWarp` for that decision, not `classifyTextWarp`.
1037
674
  */
1038
675
  type WarpCategory$1 = 'path' | 'envelope' | 'simple' | 'none';
676
+ /** Presets that require SVG textPath rendering (all others fall back to flat). */
677
+ declare const SVG_WARP_PRESETS: ReadonlySet<string>;
678
+ /** Returns `true` when the preset should use SVG `<textPath>` rendering. */
679
+ declare function shouldUseSvgWarp(preset: PptxTextWarpPreset | undefined): boolean;
1039
680
  /**
1040
681
  * Build the SVG path `d` attribute for a warp preset at a given line position.
1041
682
  *
@@ -1055,6 +696,16 @@ declare function buildWarpPath(preset: PptxTextWarpPreset, width: number, height
1055
696
  */
1056
697
  declare const getWarpPath: typeof buildWarpPath;
1057
698
 
699
+ /** One rendered piece of a glyph: clipped to its own x-band, its own affine fit. */
700
+ interface EnvelopeGlyphSlice {
701
+ /** Left edge of this slice's clip rect, in the glyph's own (pre-transform) x. */
702
+ clipX0: number;
703
+ /** Right edge of this slice's clip rect, in the glyph's own (pre-transform) x. */
704
+ clipX1: number;
705
+ /** Same `matrix(1 b 0 d 0 f)` form as {@link glyphEnvelopeMatrix}, fit to this slice's own edges. */
706
+ transform: string;
707
+ }
708
+
1058
709
  /**
1059
710
  * omml-to-mathml.ts — pure OMML → MathML conversion.
1060
711
  *
@@ -1411,6 +1062,8 @@ interface SvgLine {
1411
1062
  dashArray?: string;
1412
1063
  opacity?: number;
1413
1064
  title?: string;
1065
+ /** Optional SVG transform (e.g. a chart-overlay connector's own rotation about its box centre). */
1066
+ transform?: string;
1414
1067
  }
1415
1068
  interface SvgText {
1416
1069
  kind: 'text';
@@ -1439,6 +1092,8 @@ interface SvgPolygon {
1439
1092
  dashArray?: string;
1440
1093
  part?: ChartPartRef;
1441
1094
  title?: string;
1095
+ /** Optional SVG transform (e.g. a chart-overlay shape's own rotation/flip about its box centre). */
1096
+ transform?: string;
1442
1097
  }
1443
1098
  interface SvgAreaGradient {
1444
1099
  kind: 'areaGradient';
@@ -1936,19 +1591,14 @@ declare function buildComboViewModel(element: PptxElement, chartData: PptxChartD
1936
1591
  declare function buildStockViewModel(element: PptxElement, chartData: PptxChartData, categoryLabels: ReadonlyArray<string>): ChartViewModel;
1937
1592
 
1938
1593
  /**
1939
- * View-model builders for surface and treemap chart kinds.
1940
- *
1941
- * Ported from:
1942
- * packages/react/src/viewer/utils/chart-surface-treemap.tsx (surface + treemap)
1943
- *
1944
- * Produces a `ChartViewModel` (SVG primitives only, zero Angular dependencies)
1945
- * that the Angular ChartRendererComponent template iterates over.
1594
+ * Shared colour ramp and view-model chrome helpers for the surface and
1595
+ * treemap chart kinds.
1946
1596
  *
1947
- * Surface isometric projection when the grid has ≥2 series and ≥2 categories,
1948
- * flat colour-mapped grid otherwise.
1949
- * Treemap – slice-and-dice rectangles sorted largest-first with inline labels.
1597
+ * Split out of `chart-surface-treemap.ts` (which re-exports `surfaceColor`)
1598
+ * to keep that file's several chart-kind builders each under the repo's
1599
+ * per-file line budget.
1950
1600
  *
1951
- * @module chart-surface-treemap
1601
+ * @module chart-surface-common
1952
1602
  */
1953
1603
 
1954
1604
  /**
@@ -1963,15 +1613,45 @@ declare function surfaceColor(t: number): {
1963
1613
  g: number;
1964
1614
  b: number;
1965
1615
  };
1616
+
1617
+ /**
1618
+ * Flat colour-mapped grid view-model builder for the surface chart kind (the
1619
+ * fallback used when the grid has fewer than 2 series or 2 categories), plus
1620
+ * the `buildSurfaceViewModel` dispatcher between it and the isometric builder.
1621
+ *
1622
+ * Split out of `chart-surface-treemap.ts` (which re-exports
1623
+ * `buildSurfaceViewModel`) to keep that file's several chart-kind builders
1624
+ * each under the repo's per-file line budget.
1625
+ *
1626
+ * Ported from:
1627
+ * packages/react/src/viewer/utils/chart-surface-treemap.tsx (renderSurfaceChart)
1628
+ *
1629
+ * @module chart-surface-flat
1630
+ */
1631
+
1966
1632
  /**
1967
1633
  * Build the view-model for a surface chart.
1968
1634
  *
1969
- * Renders an isometric 3-D-like projection when the grid has 2 series and
1970
- * 2 categories; falls back to a flat colour-mapped grid otherwise.
1635
+ * Renders an isometric 3-D-like projection when the grid has >= 2 series and
1636
+ * >= 2 categories; falls back to a flat colour-mapped grid otherwise.
1971
1637
  * Mirrors `renderSurfaceChart` / `renderIsometricSurfaceFallback` in React's
1972
1638
  * `chart-surface-treemap.tsx`.
1973
1639
  */
1974
1640
  declare function buildSurfaceViewModel(element: PptxElement, chartData: PptxChartData, categoryLabels: ReadonlyArray<string>): ChartViewModel;
1641
+
1642
+ /**
1643
+ * View-model builder for the treemap chart kind.
1644
+ *
1645
+ * Split out of `chart-surface-treemap.ts` (which re-exports this) to keep
1646
+ * that file's several chart-kind builders each under the repo's per-file
1647
+ * line budget.
1648
+ *
1649
+ * Ported from:
1650
+ * packages/react/src/viewer/utils/chart-surface-treemap.tsx (renderTreemapChart)
1651
+ *
1652
+ * @module chart-treemap-view
1653
+ */
1654
+
1975
1655
  /**
1976
1656
  * Build the view-model for a treemap chart.
1977
1657
  *
@@ -1982,43 +1662,51 @@ declare function buildSurfaceViewModel(element: PptxElement, chartData: PptxChar
1982
1662
  declare function buildTreemapViewModel(element: PptxElement, chartData: PptxChartData, categoryLabels: ReadonlyArray<string>): ChartViewModel;
1983
1663
 
1984
1664
  /**
1985
- * View-model builders for waterfall and regionMap chart kinds.
1986
- *
1987
- * Ported from:
1988
- * packages/react/src/viewer/utils/chart-waterfall-combo.tsx (waterfall only)
1989
- * packages/react/src/viewer/utils/chart-map.tsx (regionMap)
1665
+ * Region-label -> region-code alias lookup for the regionMap chart kind.
1990
1666
  *
1991
- * Produces a `ChartViewModel` (SVG primitives only, zero Angular dependencies)
1992
- * that the Angular ChartRendererComponent template iterates over.
1993
- *
1994
- * Waterfall – running-total bars with positive/negative/total colouring and
1995
- * dashed connector lines between bars.
1996
- * RegionMap – choropleth SVG with simplified world region outlines coloured by
1997
- * the first data series; unmatched regions fall back to a table.
1667
+ * Split out of `chart-waterfall-map.ts` (which re-exports `resolveRegionCode`)
1668
+ * to keep that file's two unrelated chart kinds (waterfall, regionMap) each
1669
+ * under the repo's per-file line budget.
1998
1670
  *
1999
- * @module chart-waterfall-map
1671
+ * @module chart-region-map-alias
2000
1672
  */
1673
+ /** Resolve a category label to a region key (case-insensitive). */
1674
+ declare function resolveRegionCode(label: string): string | undefined;
2001
1675
 
2002
1676
  /**
2003
- * Build the view-model for a waterfall chart.
1677
+ * Colour-scale and colour-legend helpers for the regionMap chart kind.
2004
1678
  *
2005
- * Each bar starts from the running total of all previous values; the last bar
2006
- * shows the grand total (reset to 0 base). Positive values get a green fill,
2007
- * negative values get a red fill, and the final total bar uses indigo.
2008
- * Dashed connector lines join adjacent bar tops/bottoms.
1679
+ * Split out of `chart-waterfall-map.ts` (which re-exports `sequentialColorScale`
1680
+ * / `normalizeValue`) to keep that file's two unrelated chart kinds (waterfall,
1681
+ * regionMap) each under the repo's per-file line budget.
2009
1682
  *
2010
- * Mirrors `renderWaterfallChart` in React's `chart-waterfall-combo.tsx`.
1683
+ * @module chart-region-map-colors
2011
1684
  */
2012
- declare function buildWaterfallViewModel(element: PptxElement, chartData: PptxChartData, categoryLabels: ReadonlyArray<string>): ChartViewModel;
2013
- /** Resolve a category label to a region key (case-insensitive). */
2014
- declare function resolveRegionCode(label: string): string | undefined;
1685
+
2015
1686
  /**
2016
- * 3-stop sequential colour scale: light (#dbeafe) mid (#3b82f6) dark (#1e3a5f).
1687
+ * 3-stop sequential colour scale: light (#dbeafe) -> mid (#3b82f6) -> dark (#1e3a5f).
2017
1688
  * Mirrors `sequentialColorScale` in React's `chart-map.tsx`.
2018
1689
  */
2019
1690
  declare function sequentialColorScale(t: number): string;
2020
1691
  /** Normalise a value to [0..1] within a min/max range. */
2021
1692
  declare function normalizeValue(value: number, min: number, max: number): number;
1693
+
1694
+ /**
1695
+ * View-model builder for the regionMap (choropleth) chart kind.
1696
+ *
1697
+ * Split out of `chart-waterfall-map.ts` (which re-exports this) to keep that
1698
+ * file's two unrelated chart kinds (waterfall, regionMap) each under the
1699
+ * repo's per-file line budget.
1700
+ *
1701
+ * Ported from:
1702
+ * packages/react/src/viewer/utils/chart-map.tsx
1703
+ *
1704
+ * RegionMap - choropleth SVG with simplified world region outlines coloured by
1705
+ * the first data series; unmatched regions fall back to a table.
1706
+ *
1707
+ * @module chart-region-map-view
1708
+ */
1709
+
2022
1710
  /**
2023
1711
  * Build the view-model for a regionMap (choropleth) chart.
2024
1712
  *
@@ -2031,6 +1719,34 @@ declare function normalizeValue(value: number, min: number, max: number): number
2031
1719
  */
2032
1720
  declare function buildRegionMapViewModel(element: PptxElement, chartData: PptxChartData, categoryLabels: ReadonlyArray<string>): ChartViewModel;
2033
1721
 
1722
+ /**
1723
+ * View-model builder for the waterfall chart kind.
1724
+ *
1725
+ * Split out of `chart-waterfall-map.ts` (which re-exports this) to keep that
1726
+ * file's two unrelated chart kinds (waterfall, regionMap) each under the
1727
+ * repo's per-file line budget.
1728
+ *
1729
+ * Ported from:
1730
+ * packages/react/src/viewer/utils/chart-waterfall-combo.tsx (waterfall only)
1731
+ *
1732
+ * Waterfall - running-total bars with positive/negative/total colouring and
1733
+ * dashed connector lines between bars.
1734
+ *
1735
+ * @module chart-waterfall-view
1736
+ */
1737
+
1738
+ /**
1739
+ * Build the view-model for a waterfall chart.
1740
+ *
1741
+ * Each bar starts from the running total of all previous values; the last bar
1742
+ * shows the grand total (reset to 0 base). Positive values get a green fill,
1743
+ * negative values get a red fill, and the final total bar uses indigo.
1744
+ * Dashed connector lines join adjacent bar tops/bottoms.
1745
+ *
1746
+ * Mirrors `renderWaterfallChart` in React's `chart-waterfall-combo.tsx`.
1747
+ */
1748
+ declare function buildWaterfallViewModel(element: PptxElement, chartData: PptxChartData, categoryLabels: ReadonlyArray<string>): ChartViewModel;
1749
+
2034
1750
  /**
2035
1751
  * chart-overlays-axis-titles.ts: `computeAxisTitlePrimitives`, building
2036
1752
  * `SvgText[]` for the X and Y axis titles. Split out of chart-overlays.ts to
@@ -2469,74 +2185,13 @@ declare function revealedElementStyles(groups: readonly AnimationClickGroup[], s
2469
2185
  declare function pendingElementStyles(groups: readonly AnimationClickGroup[], step: number): Map<string, CSSProperties>;
2470
2186
 
2471
2187
  /**
2472
- * `animation-text-style-resolve` - resolves the discrete font-style / colour /
2473
- * size override PowerPoint's font-style emphasis effects apply to their
2474
- * target's text: Bold Flash, Bold Reveal, Underline, Brush On Underline,
2475
- * Font Style / Change Font Style, Change Font Size, and the font-style `p:set`
2476
- * siblings composed alongside Wave / Grow With Color / Teeter.
2477
- *
2478
- * PowerPoint authors these two ways, both already parsed by core:
2479
- * - A `p:set` discrete (non-interpolated) assignment
2480
- * ({@link PptxNativeAnimation.setAnimations}, ECMA-376 S19.5.79
2481
- * CT_TLSetBehavior): the value snaps on once and holds until the effect's
2482
- * `p:cTn/@fill` says otherwise (Bold Reveal, Underline / Brush On
2483
- * Underline).
2484
- * - A generic `p:anim` ramp ({@link PptxNativeAnimation.attributeAnimations},
2485
- * ECMA-376 S19.5.2 CT_TLAnimateBehavior) whose `p:tavLst` stops are not
2486
- * numerically interpolatable for a boolean attribute (Bold Flash): only the
2487
- * LAST stop's value is meaningful, the same "snap at the end" reading
2488
- * PowerPoint itself gives a discrete `calcMode` ramp.
2489
- *
2490
- * Ground truth (COM `AddEffect` + raw OOXML inspection, see
2491
- * `animation-emphasis-ground-truth-early.ts`): `style.fontWeight` (bold),
2492
- * `style.fontStyle` (italic), `style.textDecorationUnderline` (underline),
2493
- * `style.fontSize` (a numeric ramp: this module reads its FIRST/LAST stop
2494
- * ratio as {@link TextStyleAnimationDescriptor.fontScale}, a relative
2495
- * multiplier rather than an absolute size, since a shape's runs may not all
2496
- * share the authored effect's own reference size), and `style.color` (font
2497
- * colour, distinct from `fillcolor`/`stroke.color`, which the existing
2498
- * `p:animClr` colour-animation path already owns).
2499
- *
2500
- * Deliberately does NOT model a "during" vs "after" phase distinction: the
2501
- * hold-vs-revert decision this effect's `p:cTn/@fill` makes is already
2502
- * computed once, correctly, by `animation-fill-repeat.ts`'s
2503
- * `shouldHoldEndState` (the exact same rule CSS-animation steps already use
2504
- * to decide whether their final frame persists on cleanup) and surfaced on
2505
- * {@link import('./animation-timeline-types').TimelineStep.holdEndState}.
2506
- * `animation-text-style-state.ts` reuses that flag rather than recomputing
2507
- * hold/revert semantics a second time here.
2508
- *
2509
- * @module render/animation-text-style-resolve
2510
- */
2511
-
2512
- /**
2513
- * Framework-neutral text-style override a font-style emphasis effect applies
2514
- * on top of its target's own authored per-run bold/italic/underline/size/
2515
- * colour. Every binding maps this onto its own text container so it OVERRIDES
2516
- * the runs' inline styles (the runs carry explicit inline styles of their
2517
- * own, so plain CSS inheritance cannot reach them).
2518
- */
2519
- interface TextStyleAnimationDescriptor {
2520
- bold?: boolean;
2521
- italic?: boolean;
2522
- underline?: boolean;
2523
- /** Relative multiplier against each run's own authored font size. */
2524
- fontScale?: number;
2525
- color?: string;
2526
- }
2527
-
2528
- /**
2529
- * `animation-timeline-types` — pure interfaces for the native-animation
2530
- * (OOXML `p:timing` tree) playback engine shared by every binding.
2531
- *
2532
- * These describe the *parsed* native animation model (`PptxNativeAnimation`,
2533
- * driven by `presetClass` / `presetId`), as opposed to the editor-level
2534
- * {@link import('./animation-css').AnimationCssResult} model in `animation-css`
2535
- * (driven by `PptxElementAnimation` preset strings). Both coexist in shared.
2188
+ * `animation-timeline-build-descriptors` - staged-build (`p:bldChart` /
2189
+ * `p:bldDgm`) reveal descriptor types, split out of `animation-timeline-types`
2190
+ * to keep that module under the file-size limit. Re-exported from
2191
+ * `animation-timeline-types` so existing imports are unaffected.
2536
2192
  *
2537
- * @module render/animation-timeline-types
2193
+ * @module render/animation-timeline-build-descriptors
2538
2194
  */
2539
-
2540
2195
  /**
2541
2196
  * Normalized staged-reveal mode for a chart graphic frame, derived from the
2542
2197
  * OOXML `a:bldChart/@bld` (or `p:bldOleChart/@bld`) token:
@@ -2570,12 +2225,12 @@ interface ChartRevealPoint {
2570
2225
  * Playback-time chart reveal state derived from AUTHORED `p:graphicEl`
2571
2226
  * indices (see `chart-reveal-descriptor`'s `resolveChartRevealDescriptor`),
2572
2227
  * rather than from click-count/time progress. Present on
2573
- * {@link ElementAnimationState.chartReveal} only when every fired
2574
- * chart-build step for the element carried index data; a renderer prefers
2575
- * this over the progress-based `build`/`ElementBuildState` path when present,
2576
- * since it reflects the real authored reveal set (correct even for a
2577
- * reversed-order or gapped chart build), and falls back to `build` when
2578
- * absent.
2228
+ * {@link import('./animation-timeline-group').ElementAnimationState.chartReveal}
2229
+ * only when every fired chart-build step for the element carried index data;
2230
+ * a renderer prefers this over the progress-based `build`/`ElementBuildState`
2231
+ * path when present, since it reflects the real authored reveal set (correct
2232
+ * even for a reversed-order or gapped chart build), and falls back to `build`
2233
+ * when absent.
2579
2234
  */
2580
2235
  interface ChartRevealDescriptor {
2581
2236
  /**
@@ -2596,12 +2251,13 @@ interface ChartRevealDescriptor {
2596
2251
  * Playback-time SmartArt diagram reveal state derived from AUTHORED
2597
2252
  * `p:graphicEl/p:dgm/@id` indices (see `diagram-reveal-descriptor`'s
2598
2253
  * `resolveDiagramRevealDescriptor`), rather than from click-count/time
2599
- * progress. Present on {@link ElementAnimationState.diagramReveal} only when
2600
- * every fired diagram-build step for the element carried `p:graphicEl` data.
2601
- * A SmartArt renderer prefers this over the progress-based `build` /
2602
- * {@link ElementBuildState} path when present, since it reflects the real
2603
- * authored reveal set (correct even for a reversed-order or by-branch build),
2604
- * and falls back to `build` when absent.
2254
+ * progress. Present on
2255
+ * {@link import('./animation-timeline-group').ElementAnimationState.diagramReveal}
2256
+ * only when every fired diagram-build step for the element carried
2257
+ * `p:graphicEl` data. A SmartArt renderer prefers this over the
2258
+ * progress-based `build` / {@link ElementBuildState} path when present, since
2259
+ * it reflects the real authored reveal set (correct even for a
2260
+ * reversed-order or by-branch build), and falls back to `build` when absent.
2605
2261
  */
2606
2262
  interface DiagramRevealDescriptor {
2607
2263
  /**
@@ -2614,9 +2270,11 @@ interface DiagramRevealDescriptor {
2614
2270
  nodeIds: ReadonlySet<string>;
2615
2271
  }
2616
2272
  /**
2617
- * Playback-time staged-build state surfaced on {@link ElementAnimationState}.
2618
- * `progress` is the 0..1 fraction of the build revealed at the current playback
2619
- * time; a consumer maps it to its own item COUNT (see `revealedStageCount`).
2273
+ * Playback-time staged-build state surfaced on
2274
+ * {@link import('./animation-timeline-group').ElementAnimationState}.
2275
+ * `progress` is the 0..1 fraction of the build revealed at the current
2276
+ * playback time; a consumer maps it to its own item COUNT (see
2277
+ * `revealedStageCount`).
2620
2278
  */
2621
2279
  type ElementBuildState = {
2622
2280
  kind: 'chart';
@@ -2627,6 +2285,75 @@ type ElementBuildState = {
2627
2285
  mode: DiagramBuildMode;
2628
2286
  progress: number;
2629
2287
  };
2288
+
2289
+ /**
2290
+ * `animation-text-style-resolve` - resolves the discrete font-style / colour /
2291
+ * size override PowerPoint's font-style emphasis effects apply to their
2292
+ * target's text: Bold Flash, Bold Reveal, Underline, Brush On Underline,
2293
+ * Font Style / Change Font Style, Change Font Size, and the font-style `p:set`
2294
+ * siblings composed alongside Wave / Grow With Color / Teeter.
2295
+ *
2296
+ * PowerPoint authors these two ways, both already parsed by core:
2297
+ * - A `p:set` discrete (non-interpolated) assignment
2298
+ * ({@link PptxNativeAnimation.setAnimations}, ECMA-376 S19.5.79
2299
+ * CT_TLSetBehavior): the value snaps on once and holds until the effect's
2300
+ * `p:cTn/@fill` says otherwise (Bold Reveal, Underline / Brush On
2301
+ * Underline).
2302
+ * - A generic `p:anim` ramp ({@link PptxNativeAnimation.attributeAnimations},
2303
+ * ECMA-376 S19.5.2 CT_TLAnimateBehavior) whose `p:tavLst` stops are not
2304
+ * numerically interpolatable for a boolean attribute (Bold Flash): only the
2305
+ * LAST stop's value is meaningful, the same "snap at the end" reading
2306
+ * PowerPoint itself gives a discrete `calcMode` ramp.
2307
+ *
2308
+ * Ground truth (COM `AddEffect` + raw OOXML inspection, see
2309
+ * `animation-emphasis-ground-truth-early.ts`): `style.fontWeight` (bold),
2310
+ * `style.fontStyle` (italic), `style.textDecorationUnderline` (underline),
2311
+ * `style.fontSize` (a numeric ramp: this module reads its FIRST/LAST stop
2312
+ * ratio as {@link TextStyleAnimationDescriptor.fontScale}, a relative
2313
+ * multiplier rather than an absolute size, since a shape's runs may not all
2314
+ * share the authored effect's own reference size), and `style.color` (font
2315
+ * colour, distinct from `fillcolor`/`stroke.color`, which the existing
2316
+ * `p:animClr` colour-animation path already owns).
2317
+ *
2318
+ * Deliberately does NOT model a "during" vs "after" phase distinction: the
2319
+ * hold-vs-revert decision this effect's `p:cTn/@fill` makes is already
2320
+ * computed once, correctly, by `animation-fill-repeat.ts`'s
2321
+ * `shouldHoldEndState` (the exact same rule CSS-animation steps already use
2322
+ * to decide whether their final frame persists on cleanup) and surfaced on
2323
+ * {@link import('./animation-timeline-types').TimelineStep.holdEndState}.
2324
+ * `animation-text-style-state.ts` reuses that flag rather than recomputing
2325
+ * hold/revert semantics a second time here.
2326
+ *
2327
+ * @module render/animation-text-style-resolve
2328
+ */
2329
+
2330
+ /**
2331
+ * Framework-neutral text-style override a font-style emphasis effect applies
2332
+ * on top of its target's own authored per-run bold/italic/underline/size/
2333
+ * colour. Every binding maps this onto its own text container so it OVERRIDES
2334
+ * the runs' inline styles (the runs carry explicit inline styles of their
2335
+ * own, so plain CSS inheritance cannot reach them).
2336
+ */
2337
+ interface TextStyleAnimationDescriptor {
2338
+ bold?: boolean;
2339
+ italic?: boolean;
2340
+ underline?: boolean;
2341
+ /** Relative multiplier against each run's own authored font size. */
2342
+ fontScale?: number;
2343
+ color?: string;
2344
+ }
2345
+
2346
+ /**
2347
+ * `animation-timeline-group` - click-group and whole-timeline models
2348
+ * ({@link TimelineClickGroup}, {@link AnimationTimeline},
2349
+ * {@link ElementAnimationState}, {@link AnimationStyle}), split out of
2350
+ * `animation-timeline-types` to keep that module under the file-size limit.
2351
+ * Re-exported from `animation-timeline-types` so existing imports are
2352
+ * unaffected.
2353
+ *
2354
+ * @module render/animation-timeline-group
2355
+ */
2356
+
2630
2357
  /** Snapshot of a single element's animation state at a point in the timeline. */
2631
2358
  interface ElementAnimationState {
2632
2359
  /** Whether the element should be visible. */
@@ -2679,14 +2406,14 @@ interface ElementAnimationState {
2679
2406
  animatesStroke?: boolean;
2680
2407
  /**
2681
2408
  * Active discrete font-style / colour / size override (see
2682
- * {@link TimelineStep.textStyle}) a font-style emphasis effect currently
2683
- * applies to this element's text, OVERRIDING the runs' own inline
2684
- * bold/italic/underline/size/colour. `animation-playback-engine.ts` writes
2685
- * this on step start and again on cleanup (held in full when the effect's
2686
- * `p:cTn/@fill` holds its end state, otherwise reverted); a text renderer
2687
- * maps it onto its run markup via `buildTextStyleOverrideCss`
2688
- * (`animation-text-style-css.ts`). Absent means no font-style emphasis
2689
- * effect is currently active on this element.
2409
+ * {@link import('./animation-timeline-step').TimelineStep.textStyle}) a
2410
+ * font-style emphasis effect currently applies to this element's text,
2411
+ * OVERRIDING the runs' own inline bold/italic/underline/size/colour.
2412
+ * `animation-playback-engine.ts` writes this on step start and again on
2413
+ * cleanup (held in full when the effect's `p:cTn/@fill` holds its end
2414
+ * state, otherwise reverted); a text renderer maps it onto its run markup
2415
+ * via `buildTextStyleOverrideCss` (`animation-text-style-css.ts`). Absent
2416
+ * means no font-style emphasis effect is currently active on this element.
2690
2417
  */
2691
2418
  textStyle?: TextStyleAnimationDescriptor;
2692
2419
  }
@@ -3114,12 +2841,22 @@ declare function computeGridSpacingPx(gridSpacing: GridSpacingEmu | undefined, f
3114
2841
 
3115
2842
  /** Default slide stage colour when a slide carries no usable background. */
3116
2843
  declare const DEFAULT_SLIDE_BACKGROUND = "#ffffff";
2844
+ /**
2845
+ * The slide's own pixel size, needed only to anchor a `shadeToTitle`
2846
+ * gradient on the title placeholder's bounds (see
2847
+ * `background-shade-to-title.ts`). Optional: a caller that omits it still
2848
+ * gets the plain authored gradient, matching this project's prior behaviour.
2849
+ */
2850
+ interface SlideBackgroundSize {
2851
+ widthPx: number;
2852
+ heightPx: number;
2853
+ }
3117
2854
  /**
3118
2855
  * Build the background portion of the slide stage style from a slide's
3119
2856
  * resolved background fields. Returns only `background-*` properties so the
3120
2857
  * caller can spread it into the rest of the stage style.
3121
2858
  */
3122
- declare function getSlideBackgroundStyle(slide: PptxSlide | undefined): CssStyleMap;
2859
+ declare function getSlideBackgroundStyle(slide: PptxSlide | undefined, slideSize?: SlideBackgroundSize): CssStyleMap;
3123
2860
 
3124
2861
  /**
3125
2862
  * editor-insert.ts: Pure factory functions for creating new slide elements.
@@ -3744,67 +3481,6 @@ interface FieldSubstitutionContext {
3744
3481
  slideTitle?: string;
3745
3482
  }
3746
3483
 
3747
- /**
3748
- * CSS-ready tab layout for one run's text, built on the pure positioning maths
3749
- * in `text-tab-layout.ts`.
3750
- *
3751
- * `buildRunTabLines` is the "pure decision function" every binding maps
3752
- * mechanically onto its own template: it splits a run's text on `\n`, lays out
3753
- * each line's `\t`-separated pieces against the paragraph's tab stops, and
3754
- * returns, per piece, CSS a binding spreads verbatim onto a nested span (plus
3755
- * a ready-filled leader string for the gap before it). A binding renders
3756
- * nothing but `pieces.map(...)`; the alignment/leader decision itself never
3757
- * has to be reimplemented per framework.
3758
- */
3759
-
3760
- /** One tabbed-line piece, ready to spread onto a binding's own span element. */
3761
- interface TabbedRunPiece {
3762
- text: string;
3763
- /**
3764
- * CSS for the span that wraps `text`: inline-block layout, this run's own
3765
- * decoration repeated, and this piece's own PowerPoint advance-width
3766
- * correction as `letter-spacing` (see `buildTabbedLine`). The piece is
3767
- * nested inside the run's own span, and neither property inherits the way a
3768
- * caller would want: `text-decoration-*` does not inherit into a nested
3769
- * element at all (an ancestor's underline is drawn *through* its
3770
- * descendants, but each descendant still computes `none` of its own), so a
3771
- * caller passes the run's decoration subset (`nestedTextDecorationStyle`) to
3772
- * have it repeated here; `letter-spacing` DOES inherit, which is exactly why
3773
- * this piece sets it explicitly rather than only when non-zero - the run's
3774
- * container span carries its own (wrong, whole-text) correction that would
3775
- * otherwise leak in.
3776
- */
3777
- style: RunStyle;
3778
- /** CSS for the leader-fill span preceding this piece, or `undefined` when there is no gap to fill. */
3779
- leaderStyle?: RunStyle;
3780
- /** Leader glyphs sized to fill `leaderStyle`'s width. Present only alongside `leaderStyle`. */
3781
- leaderText?: string;
3782
- /**
3783
- * `a:rPr/@u="words"` per-word/gap sub-pieces of THIS tab piece's own text
3784
- * (see `splitWordsForUnderline`), present only when the run's underline is
3785
- * `words`. A tab-separated piece is otherwise rendered as a single span
3786
- * (`text` + `style`), which underlines it continuously - correct for a
3787
- * one-word piece, but wrong for a piece like `"Hello World"` between two tab
3788
- * stops, which needs a gap under the space. A binding renders one SIBLING
3789
- * span per entry IN PLACE OF the piece's single `text` span: each entry's
3790
- * `style` is the piece's own `style` (the same inline-block layout and
3791
- * advance-width correction, so the line measures exactly as before), with
3792
- * the underline stripped on a gap entry. They must be siblings, not spans
3793
- * nested inside the piece span: an ancestor's underline is drawn through
3794
- * every inline descendant, so a nested gap could not lose it. `text`/`style`
3795
- * stay the continuous-underline fallback for a binding that does not
3796
- * render this field.
3797
- */
3798
- words?: Array<{
3799
- text: string;
3800
- style: RunStyle;
3801
- }>;
3802
- }
3803
- /** One `\n`-split line of a run's tabbed text. */
3804
- interface TabbedLineRun {
3805
- pieces: TabbedRunPiece[];
3806
- }
3807
-
3808
3484
  /**
3809
3485
  * The two halves of an in-place cross-dissolve, paired so a binding can
3810
3486
  * composite them the way PowerPoint composites them: ADDITIVELY.
@@ -4869,7 +4545,7 @@ declare const SLIDE_TRANSITION_KEYFRAMES: string;
4869
4545
  * is rendered faithfully by delegating to {@link getP14TransitionAnimations}
4870
4546
  * (its `@keyframes` live in `p14-transition-keyframes` and are folded into
4871
4547
  * `SLIDE_TRANSITION_KEYFRAMES`). The newer Office 2013+ (p15) cinematic family
4872
- * (`cube`/`flip`/`rotate`/`orbit`/`fallOver`/`drape`/`curtains`/`wind`/
4548
+ * (`cube`/`box`/`flip`/`rotate`/`orbit`/`fallOver`/`drape`/`curtains`/`wind`/
4873
4549
  * `prestige`/`fracture`/`crush`/`peelOff`/`pageCurlSingle`/`pageCurlDouble`/
4874
4550
  * `airplane`/`origami`) is likewise rendered faithfully via
4875
4551
  * {@link getCinematicTransitionAnimations} (its `@keyframes` live in
@@ -4887,7 +4563,7 @@ declare const SLIDE_TRANSITION_KEYFRAMES: string;
4887
4563
  *
4888
4564
  * Unknown types fall back to a symmetrical cross-fade.
4889
4565
  */
4890
- declare function getSlideTransitionAnimations(type: PptxTransitionType, durationMs: number, direction: string | undefined, orient?: string | undefined, spokes?: number | undefined): SlideTransitionAnimations;
4566
+ declare function getSlideTransitionAnimations(type: PptxTransitionType, durationMs: number, direction: string | undefined, orient?: string | undefined, spokes?: number | undefined, pattern?: string | undefined): SlideTransitionAnimations;
4891
4567
 
4892
4568
  /**
4893
4569
  * `slide-transition-options` - the pure option catalogues backing every
@@ -6001,57 +5677,6 @@ declare function formatTime(date: Date): string;
6001
5677
  */
6002
5678
  declare function formatElapsed(elapsedMs: number): string;
6003
5679
 
6004
- /**
6005
- * `text-build-spans` - framework-agnostic spec for rendering a staged text
6006
- * build (by paragraph / word / letter).
6007
- *
6008
- * `expandTextBuildAnimations` splits one animation into per-paragraph,
6009
- * per-word or per-character sub-animations keyed `<elementId>::p0` /
6010
- * `::w0-3` / `::c0-7`. Something then has to split the RENDERED text the same
6011
- * way and attach each sub-animation to its own span, or the build has no
6012
- * visible effect and the whole box fades as one.
6013
- *
6014
- * React did that inline in JSX, which left the other four bindings with no
6015
- * by-letter animation at all. This module returns the split as plain data so
6016
- * every binding can render it with its own primitives - the same shape as
6017
- * `notesSegmentsToSpans`.
6018
- *
6019
- * @module render/text-build-spans
6020
- */
6021
-
6022
- /** One rendered piece of a staged text build. */
6023
- interface TextBuildSpan<TStyle = unknown> {
6024
- /**
6025
- * The sub-animation id (`<elementId>::c0-3`), or `undefined` for the
6026
- * whitespace between words, which is emitted verbatim and never animated.
6027
- */
6028
- animId?: string;
6029
- /** The text this span renders. */
6030
- text: string;
6031
- /** True when the sub-animation says the piece is not visible yet. */
6032
- hidden: boolean;
6033
- /** The CSS `animation` shorthand to apply, when one is running. */
6034
- cssAnimation?: string;
6035
- /**
6036
- * The style of the run this piece came from, passed straight through. A
6037
- * build splits the text but must not flatten its formatting: without this a
6038
- * bold or coloured run turns plain for the duration of the animation.
6039
- */
6040
- style?: TStyle;
6041
- }
6042
- /** How a paragraph's text is split for its build. */
6043
- type TextBuildGranularity = 'paragraph' | 'word' | 'char';
6044
- /** The spec for one paragraph of a staged text build. */
6045
- interface TextBuildSpec<TStyle = unknown> {
6046
- granularity: TextBuildGranularity;
6047
- /** For a paragraph-level build, the single wrapper's id. */
6048
- animId?: string;
6049
- hidden?: boolean;
6050
- cssAnimation?: string;
6051
- /** For word/char builds, the pieces in render order. */
6052
- spans?: TextBuildSpan<TStyle>[];
6053
- }
6054
-
6055
5680
  /**
6056
5681
  * audience-content-store: IndexedDB-based storage for sharing PPTX content
6057
5682
  * between the presenter tab and audience tab.
@@ -6591,7 +6216,41 @@ interface InkPoint {
6591
6216
  * data".
6592
6217
  */
6593
6218
  pressure?: number;
6219
+ /**
6220
+ * Pen-tilt lean, in degrees, from `PointerEvent.tiltX`/`tiltY` on
6221
+ * supporting hardware (a mouse, or a stylus with no tilt sensor, reports a
6222
+ * constant 0). Optional and always captured as a pair: a binding that has
6223
+ * not wired tilt capture simply omits both, and {@link strokeToInkElement}
6224
+ * treats a constant `(0, 0)` reading the same way it treats a constant
6225
+ * pressure, i.e. as "no real tilt data" rather than authoring a channel
6226
+ * for it.
6227
+ */
6228
+ tiltX?: number;
6229
+ tiltY?: number;
6230
+ }
6231
+ /**
6232
+ * Minimal shape of the browser `PointerEvent` fields {@link pointFromPointerEvent}
6233
+ * reads. Kept duck-typed (not `PointerEvent` itself) so this module has no DOM
6234
+ * lib dependency and is trivially unit-testable with a plain object.
6235
+ */
6236
+ interface PointerEventLike {
6237
+ pressure?: number;
6238
+ tiltX?: number;
6239
+ tiltY?: number;
6594
6240
  }
6241
+ /**
6242
+ * Attach a pointer event's pressure and tilt reading to an already
6243
+ * stage-mapped `{x, y}` position, producing the {@link InkPoint} every
6244
+ * binding's Draw-tab pointerdown/pointermove handler feeds into
6245
+ * {@link strokeToInkElement} (directly, or via an accumulated points array).
6246
+ *
6247
+ * Each binding computes `{x, y}` differently (its own stage rect + zoom
6248
+ * scale), which is why this only takes the already-local position rather than
6249
+ * a raw client-coordinate event; extracting `pressure`/`tiltX`/`tiltY`
6250
+ * verbatim onto that point is the one part every binding must do identically,
6251
+ * so it lives here instead of being re-typed out five times.
6252
+ */
6253
+ declare function pointFromPointerEvent(x: number, y: number, event: PointerEventLike): InkPoint;
6595
6254
  /**
6596
6255
  * Convert an array of points into an SVG path `d` attribute string.
6597
6256
  * - 0 points -> `''`
@@ -6620,6 +6279,11 @@ interface StrokeToInkElementOpts {
6620
6279
  * the per-point pressure channel is attached as `inkPointPressures: [[...]]`
6621
6280
  * so every binding's shared ink renderer (`ink-rendering.ts`) draws the
6622
6281
  * stroke at variable width, identically to a stroke authored in React.
6282
+ * - When any point carries a genuinely non-zero `tiltX`/`tiltY` reading, the
6283
+ * raw per-point tilt channel is attached as `inkPointTiltX`/`inkPointTiltY`
6284
+ * so every binding's shared ink renderer (`ink-group-strokes.ts`) draws the
6285
+ * calligraphic nib lean, and the core save pipeline authors it as InkML
6286
+ * `OTx`/`OTy`.
6623
6287
  */
6624
6288
  declare function strokeToInkElement(opts: StrokeToInkElementOpts): InkPptxElement | null;
6625
6289
 
@@ -6734,6 +6398,132 @@ interface InkStrokeAnimationStyle {
6734
6398
  strokeDashoffset: string;
6735
6399
  }
6736
6400
 
6401
+ /**
6402
+ * Pen-tilt calligraphic nib rendering.
6403
+ *
6404
+ * A stylus or digitizer pen can report its tilt (how far it leans off
6405
+ * perpendicular, and which way) alongside position and pressure. This module
6406
+ * turns that per-point tilt data into "nib marks": ellipses widened
6407
+ * perpendicular to the pen's lean direction, approximating the look of a
6408
+ * chisel-tip calligraphy pen. It is the tilt counterpart of the plain
6409
+ * pressure-circle rendering in `./ink-rendering`.
6410
+ *
6411
+ * Framework-agnostic: only depends on `./ink-rendering`'s point/width types,
6412
+ * so every binding (React, Vue, Angular, Svelte, Vanilla) consumes one copy.
6413
+ *
6414
+ * @module ink-tilt-nib
6415
+ */
6416
+
6417
+ /**
6418
+ * One calligraphic nib mark: an ellipse whose wide axis sits perpendicular to
6419
+ * the pen's tilt-lean direction at that point, approximating a chisel-tip
6420
+ * nib. Degrades to a circle (`rPerp === rTilt`) wherever tilt magnitude is 0.
6421
+ */
6422
+ interface NibMark {
6423
+ cx: number;
6424
+ cy: number;
6425
+ /** Radius along the tilt-lean direction (the nib's narrow axis). */
6426
+ rTilt: number;
6427
+ /** Radius perpendicular to the tilt-lean direction (the nib's wide axis). */
6428
+ rPerp: number;
6429
+ /**
6430
+ * Rotation, in degrees, to apply to an SVG `<ellipse rx={rPerp} ry={rTilt}>`
6431
+ * (e.g. via `transform="rotate(rotationDeg cx cy)"`) so its wide axis
6432
+ * points perpendicular to the lean direction.
6433
+ */
6434
+ rotationDeg: number;
6435
+ }
6436
+
6437
+ /** One rendered stroke: a constant-width path, pressure circles, or tilt nib marks. */
6438
+ interface InkStrokeView {
6439
+ d: string;
6440
+ color: string;
6441
+ width: number;
6442
+ opacity: number;
6443
+ /** Per-point pressure circles; `null` renders the plain path. Mutually exclusive with `nibMarks`. */
6444
+ circles: PressureCircle[] | null;
6445
+ /**
6446
+ * Per-point calligraphic nib marks, built from the stroke's tilt channels;
6447
+ * `null` when the stroke declared no (or all-zero) tilt data, in which
6448
+ * case `circles` (or the plain path) renders as before this feature
6449
+ * existed.
6450
+ */
6451
+ nibMarks: NibMark[] | null;
6452
+ }
6453
+
6454
+ /**
6455
+ * Live (in-progress) stroke preview for the Draw tool, shared by every
6456
+ * binding.
6457
+ *
6458
+ * Before this module, every binding's Draw overlay built its own live-preview
6459
+ * polyline `d` directly from the accumulated point list and stopped there: a
6460
+ * calligraphic pen-tilt lean or a pressure-variable width only ever appeared
6461
+ * once `pointerup` committed the stroke as an `InkPptxElement` and it
6462
+ * round-tripped through {@link buildInkGroupStrokes}. This function is the
6463
+ * "pointer still down" twin of that: given the SAME accumulated `InkPoint[]`
6464
+ * (with per-point pressure/tilt already attached by
6465
+ * {@link pointFromPointerEvent}), it makes the SAME render-mode decision
6466
+ * ({@link buildInkStrokeView}) a just-committed stroke would get, so a
6467
+ * calligraphic-nib or pressure-variable stroke looks identical before and
6468
+ * after `pointerup`. Every binding's Draw overlay maps the result the same
6469
+ * way its committed-stroke renderer already maps an `InkStrokeView` (plain
6470
+ * path / pressure circles / tilt nib marks).
6471
+ *
6472
+ * @module render/ink-live-preview
6473
+ */
6474
+
6475
+ /** Options for {@link buildLiveInkStrokeView}. */
6476
+ interface LiveInkStrokeViewOpts {
6477
+ /**
6478
+ * Accumulated in-progress points, in the overlay's own stage-local
6479
+ * coordinate space. Unlike {@link strokeToInkElement}, these are NOT
6480
+ * translated to a bounding-box origin: a live preview draws directly over
6481
+ * the untranslated stage the same way the plain polyline it replaces
6482
+ * always did.
6483
+ */
6484
+ points: InkPoint[];
6485
+ color: string;
6486
+ width: number;
6487
+ tool: 'pen' | 'highlighter' | 'freeform';
6488
+ }
6489
+ /**
6490
+ * Build the render view for an in-progress stroke, or `null` when there are
6491
+ * no points yet (nothing to draw).
6492
+ *
6493
+ * Mirrors {@link strokeToInkElement}'s pressure/tilt "did it capture real
6494
+ * data" decision, but skips the bounding-box translation and the
6495
+ * fewer-than-two-points rejection: a live preview must draw starting from the
6496
+ * very first point (a single dot is a valid in-progress state, unlike a
6497
+ * committed stroke, which requires at least two points to have a path at
6498
+ * all).
6499
+ */
6500
+ declare function buildLiveInkStrokeView(opts: LiveInkStrokeViewOpts): InkStrokeView | null;
6501
+
6502
+ /**
6503
+ * Framework-neutral view model for a Draw-tab `InkPptxElement`'s own strokes.
6504
+ *
6505
+ * Mirrors `content-part-strokes.ts` (the same decision for a loaded
6506
+ * `p:contentPart`), but reads an `InkPptxElement`'s parallel per-path arrays
6507
+ * (`inkPaths`/`inkColors`/`inkWidths`/`inkOpacities`/`inkPointPressures`/
6508
+ * `inkPointTiltX`/`inkPointTiltY`) instead of a `ContentPartInkStroke[]`.
6509
+ *
6510
+ * Every binding used to hand-roll this exact pressure-circle decision (with
6511
+ * two subtly different legacy-fallback conditions: `inkWidths.length > 1` in
6512
+ * React/Angular vs. the more correct `inkWidths.length > el.inkPaths.length`
6513
+ * in Vue/Svelte/vanilla, since a per-PATH widths array of length 2 on a
6514
+ * 3-path stroke is not per-POINT legacy data), and none of them rendered a
6515
+ * tilt-driven calligraphic nib for this element type at all (only the loaded
6516
+ * `contentPart` path had it). One decision function closes both gaps for all
6517
+ * five bindings at once.
6518
+ *
6519
+ * @module render/ink-group-strokes
6520
+ */
6521
+
6522
+ /** One rendered ink-group stroke, keyed for list rendering. */
6523
+ interface InkGroupStrokeView extends InkStrokeView {
6524
+ key: string;
6525
+ }
6526
+
6737
6527
  /**
6738
6528
  * Pure helper logic for mobile chrome state, shared by every binding.
6739
6529
  *
@@ -8153,6 +7943,16 @@ interface ReadOnlyRecommendation {
8153
7943
  readonly messageKey: string;
8154
7944
  /** Whether a binding's "read-only" toggle should default to on. */
8155
7945
  readonly defaultReadOnly: boolean;
7946
+ /**
7947
+ * Whether lifting this recommendation requires a correct password, rather
7948
+ * than a plain "Edit anyway". True only for a `modifyVerifier` that carries
7949
+ * a hash this viewer can actually check (`hashData` + `saltData` +
7950
+ * `algorithmName`, see `checkModifyPassword`). "Mark as Final" is purely
7951
+ * advisory and never requires one, and a `modifyVerifier` missing pieces of
7952
+ * its hash cannot be verified either way, so both fall back to the plain
7953
+ * "Edit anyway" a binding already had.
7954
+ */
7955
+ readonly requiresPassword: boolean;
8156
7956
  }
8157
7957
 
8158
7958
  interface CompatibilityWarningToast {
@@ -10144,10 +9944,25 @@ declare class LoadNoticesService {
10144
9944
  * host viewer's `canEdit`, the same way the Protected View lock does.
10145
9945
  */
10146
9946
  readonly lockActive: _angular_core.Signal<boolean>;
10147
- /** "Edit anyway": lifts the recommendation's lock and hides the banner. */
9947
+ /** Whether the inline password prompt should render instead of the two buttons. */
9948
+ readonly passwordPromptOpen: _angular_core.WritableSignal<boolean>;
9949
+ /** Reason the last password attempt failed, or null before any attempt / after success. */
9950
+ readonly passwordError: _angular_core.WritableSignal<"wrong-password" | "unsupported-algorithm" | null>;
9951
+ /** True while {@link submitPassword}'s check is in flight (disables the form). */
9952
+ readonly checkingPassword: _angular_core.WritableSignal<boolean>;
9953
+ /**
9954
+ * "Edit anyway": lifts the recommendation's lock and hides the banner, or
9955
+ * (when `recommendation().requiresPassword` is set) opens the inline
9956
+ * password prompt instead of unlocking immediately.
9957
+ */
10148
9958
  editAnyway(): void;
10149
9959
  /** "Dismiss": hides the banner but leaves any lock in place. */
10150
9960
  dismissBanner(): void;
9961
+ /** Close the password prompt without unlocking. */
9962
+ cancelPasswordPrompt(): void;
9963
+ /** Check `password` against the deck's `modifyVerifier`; unlocks on a match. */
9964
+ submitPassword(password: string): Promise<void>;
9965
+ private unlock;
10151
9966
  /** Deck-level plus every slide's compatibility warnings, deduped by code. */
10152
9967
  readonly toasts: _angular_core.Signal<CompatibilityWarningToast[]>;
10153
9968
  private readonly dismissedToastIds;
@@ -13914,6 +13729,14 @@ declare class InkDrawingService {
13914
13729
  readonly active: _angular_core.WritableSignal<boolean>;
13915
13730
  /** SVG path `d` for the live stroke preview (updated on every pointer move). */
13916
13731
  readonly liveInkPath: _angular_core.WritableSignal<string>;
13732
+ /**
13733
+ * The in-progress stroke's render view (plain path, pressure circles, or
13734
+ * tilt nib marks), from the shared `buildLiveInkStrokeView`: the same
13735
+ * decision `InkRendererComponent` makes for a committed stroke, fed the
13736
+ * SAME accumulated `points` {@link handlePointerUp} hands to
13737
+ * `strokeToInkElement`. `null` while idle.
13738
+ */
13739
+ readonly liveStrokeView: _angular_core.WritableSignal<InkStrokeView | null>;
13917
13740
  /** Accumulated points for the stroke currently being drawn. */
13918
13741
  private points;
13919
13742
  private host;
@@ -13922,6 +13745,15 @@ declare class InkDrawingService {
13922
13745
  private requireHost;
13923
13746
  /** True when a draw tool (anything but 'select') should own the current gesture. */
13924
13747
  isDrawToolActive(): boolean;
13748
+ /** Narrow the ribbon's `DrawTool` to the pen/highlighter/freeform union `strokeToInkElement`/`buildLiveInkStrokeView` accept. */
13749
+ private resolveTool;
13750
+ /**
13751
+ * Recompute `liveInkPath`/`liveStrokeView` from the currently accumulated
13752
+ * points. Called after every pointerdown/pointermove so the preview shows
13753
+ * the same calligraphic-nib / pressure-circle decision a committed stroke
13754
+ * gets, while the pointer is still down.
13755
+ */
13756
+ private syncLivePreview;
13925
13757
  /**
13926
13758
  * Handle a stage pointerdown while a draw tool is active: eraser hit-tests
13927
13759
  * against ink elements (topmost wins); pen/highlighter/freeform begin a new
@@ -14564,354 +14396,103 @@ declare class SlideCanvasComponent implements SlideContext {
14564
14396
  private readonly rulerHighlightBounds;
14565
14397
  /** Selected element extent (scaled px) highlighted on the horizontal strip. */
14566
14398
  readonly hRulerHighlight: _angular_core.Signal<{
14567
- start: number;
14568
- span: number;
14569
- } | null>;
14570
- /** Selected element extent (scaled px) highlighted on the vertical strip. */
14571
- readonly vRulerHighlight: _angular_core.Signal<{
14572
- start: number;
14573
- span: number;
14574
- } | null>;
14575
- readonly stageStyle: _angular_core.Signal<StyleMap>;
14576
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideCanvasComponent, never>;
14577
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideCanvasComponent, "pptx-slide-canvas", never, { "slide": { "alias": "slide"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "rulerUnit": { "alias": "rulerUnit"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "gridSpacing": { "alias": "gridSpacing"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "guideCommand": { "alias": "guideCommand"; "required": false; "isSignal": true; }; "spellCheck": { "alias": "spellCheck"; "required": false; "isSignal": true; }; "snapToGuides": { "alias": "snapToGuides"; "required": false; "isSignal": true; }; "autoFit": { "alias": "autoFit"; "required": false; "isSignal": true; }; "transparentBackground": { "alias": "transparentBackground"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "exposeElementIds": { "alias": "exposeElementIds"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "editingId": { "alias": "editingId"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "aiHighlights": { "alias": "aiHighlights"; "required": false; "isSignal": true; }; "aiActive": { "alias": "aiActive"; "required": false; "isSignal": true; }; "aiActiveSlideIndex": { "alias": "aiActiveSlideIndex"; "required": false; "isSignal": true; }; "aiChangeBatch": { "alias": "aiChangeBatch"; "required": false; "isSignal": true; }; "aiPickMode": { "alias": "aiPickMode"; "required": false; "isSignal": true; }; "drawTool": { "alias": "drawTool"; "required": false; "isSignal": true; }; "drawColor": { "alias": "drawColor"; "required": false; "isSignal": true; }; "drawWidth": { "alias": "drawWidth"; "required": false; "isSignal": true; }; }, { "elementSelect": "elementSelect"; "backgroundClick": "backgroundClick"; "transformStart": "transformStart"; "transformUpdate": "transformUpdate"; "transformEnd": "transformEnd"; "adjustUpdate": "adjustUpdate"; "connectorEndpointUpdate": "connectorEndpointUpdate"; "contextMenu": "contextMenu"; "textEditStart": "textEditStart"; "textCommit": "textCommit"; "textInput": "textInput"; "textCancel": "textCancel"; "textFormat": "textFormat"; "rotateUpdate": "rotateUpdate"; "marqueeSelect": "marqueeSelect"; "inkStrokeComplete": "inkStrokeComplete"; "eraserHit": "eraserHit"; "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, ["*"], true, never>;
14578
- }
14579
-
14580
- /**
14581
- * Renderer-injected shape-effect definitions that need a companion DOM node
14582
- * (a soft-edge `<filter>` def, a DAG fill-overlay tint layer), plus the helper
14583
- * that strips dangling `url(#…)` filter references.
14584
- *
14585
- * Kept out of `element-style.ts` so that module stays focused on producing the
14586
- * base `[ngStyle]` maps. Mirrors the Vue/Svelte `ShapeEffectOverlay` split.
14587
- */
14588
-
14589
- /** Injectable soft-edge `<filter>` descriptor (id + feather radius in px). */
14590
- interface SoftEdgeFilterDef {
14591
- id: string;
14592
- radius: number;
14593
- }
14594
- /**
14595
- * `a:reflection` mirrored-sibling descriptor: the wrapper style (position,
14596
- * mirror transform, mask-image fade - see shared's `getReflectionWrapperStyle`)
14597
- * plus the mirrored CONTENT to paint inside it. Cross-browser, unlike the
14598
- * `-webkit-box-reflect` `element-style.ts` used to set (Firefox never
14599
- * implemented that property, so reflections were invisible there entirely).
14600
- */
14601
- interface ReflectionOverlay {
14602
- wrapperStyle: ReflectionWrapperStyle;
14603
- /** Set for a picture/image element: its actual photo, cloned. */
14604
- imgSrc?: string;
14605
- imgFitStyle?: Record<string, unknown>;
14606
- /** Set for everything else: the resolved fill (colour/gradient/pattern/image). */
14607
- fill?: ComputedFillStyle;
14608
- }
14609
-
14610
- /**
14611
- * Angular's paragraph view model, built from the SHARED `buildParagraphs`.
14612
- *
14613
- * This module replaces the ~190-line hand-ported paragraph builder that used to
14614
- * live inside `element-renderer.component.ts` (self-documented as "hand-ported
14615
- * from `buildParagraphs`"). That copy had already drifted: it applied a
14616
- * paragraph's bullet unconditionally, with none of shared's "suppress the
14617
- * bullet on a paragraph with no visible text" rule, so a whitespace-only or
14618
- * marker-only paragraph painted a stray bullet here and nothing elsewhere.
14619
- *
14620
- * It also replaces the segment walk that used to follow the shared call. Runs
14621
- * carry their own `hyperlink` and `equation` now (see `text-run-meta`), so the
14622
- * walk that re-attached those two facts by matching each run's characters back
14623
- * onto the segment it came from is gone, and Vue, Svelte and Vanilla render
14624
- * both from the same model instead of dropping them.
14625
- *
14626
- * What is left here is a pure rename: shared's neutral field names onto the
14627
- * ones this binding's template already binds.
14628
- */
14629
- /** A single rendered run inside an Angular paragraph. */
14630
- interface TextRun {
14631
- text: string;
14632
- style: StyleMap;
14633
- /** Safe `href` when this run carries a renderable hyperlink. */
14634
- href?: string;
14635
- /** Hyperlink tooltip / title text. */
14636
- tooltip?: string;
14637
- /** `<a target>`, from `a:hlinkClick/@tgtFrame` when authored, else `_blank`. */
14638
- target?: string;
14639
- /** `<a rel>` paired with {@link target}. */
14640
- rel?: string;
14641
- /** Parsed OMML for an inline equation run (rendered as MathML). */
14642
- equationXml?: Record<string, unknown>;
14643
- /** Optional equation number for numbered equations. */
14644
- equationNumber?: string;
14645
- /** `a:ruby` phonetic guide (furigana / pinyin) rendered above this run. */
14646
- rubyText?: string;
14647
- /** `[ngStyle]` map for the `<rt>` annotation (size / family / alignment). */
14648
- rubyStyle?: StyleMap;
14649
- /**
14650
- * Per-script (`a:ea`/`a:cs`/`a:sym`) font-fallback pieces for this run's
14651
- * text, when it authors a distinct east-Asian / complex-script / symbol
14652
- * font the text actually needs. The template renders these as nested spans
14653
- * instead of `text`. Absent for the common single-font case.
14654
- */
14655
- scriptRuns?: ScriptFontPiece[];
14656
- /**
14657
- * Measured tab-stop layout for this run's text, present when it contains an
14658
- * authored `\t` and the paragraph declares explicit tab stops. The template
14659
- * renders these lines/pieces instead of `text`, honouring per-stop
14660
- * alignment and leader glyphs a plain CSS `tab-size` cannot express.
14661
- */
14662
- tabLines?: TabbedLineRun[];
14663
- /**
14664
- * `a:rPr/@u="words"` word/gap pieces of a RUBY run's base text (same shape
14665
- * as `scriptRuns`, rendered the same way in place of `text`): the base text
14666
- * stays one run so the annotation still reads over the whole thing, while
14667
- * only the word entries carry the underline. Absent otherwise.
14668
- */
14669
- underlineWordPieces?: ScriptFontPiece[];
14670
- /**
14671
- * `a:reflection` mirrored-sibling wrapper style for this run, or `undefined`
14672
- * for the common no-reflection case - the text-run counterpart of a
14673
- * shape/picture's `ReflectionOverlay` (`element-effect-defs.ts`). The
14674
- * template renders a sibling `<span>` positioned/masked by this style,
14675
- * painted with the same text, instead of the old `-webkit-box-reflect`
14676
- * (Firefox never implemented that property).
14677
- */
14678
- reflection?: ReflectionWrapperStyle;
14679
- }
14680
- /** A rendered paragraph: runs plus bullet + indent + spacing metadata. */
14681
- interface Paragraph {
14682
- runs: TextRun[];
14683
- /** Bullet / number marker text, when this paragraph is a list item. */
14684
- bulletMarker?: string;
14685
- /** Resolved picture marker, or metadata for its accessible glyph fallback. */
14686
- bulletPicture?: PictureBulletMarker;
14687
- /** `[ngStyle]` map for the bullet marker (colour / font / hang width). */
14688
- bulletStyle: StyleMap;
14689
- /** Left indent in px (hanging-indent layout). */
14690
- indentPx: number;
14691
- /** `text-indent` in px (first-line / hanging indent), when authored. */
14692
- textIndentPx?: number;
14693
- /**
14694
- * True when the paragraph has no runs and no bullet: an authored blank line
14695
- * (`<a:p><a:endParaRPr/></a:p>`), which PowerPoint gives a full line box.
14696
- * The template renders a `<br>` for it so the gap survives (issue #131).
14697
- */
14698
- isEmpty?: boolean;
14699
- /** Per-paragraph `line-height` from this paragraph's own `a:lnSpc`. */
14700
- lineHeight?: number | string;
14701
- /** `margin-top` in px from `a:spcBef` (space before), when overridden. */
14702
- spaceBeforePx?: number;
14703
- /** `margin-bottom` in px from `a:spcAft` (space after), when overridden. */
14704
- spaceAfterPx?: number;
14705
- /** `font-size` in px re-basing the paragraph's CSS line boxes onto its runs. */
14706
- strutFontSizePx?: number;
14707
- /**
14708
- * This paragraph's own `text-align` / BiDi `direction` / kinsoku line-break
14709
- * rules, when it overrides the body's. Bound with `[ngStyle]` under the
14710
- * explicit geometry bindings, which win.
14711
- */
14712
- paragraphStyle?: StyleMap;
14713
- }
14714
-
14715
- /**
14716
- * Text-warp (WordArt) descriptor resolver for the Angular viewer.
14717
- *
14718
- * Angular port of:
14719
- * packages/react/src/viewer/utils/text-warp-classifier.ts
14720
- * packages/react/src/viewer/utils/text-warp-css.tsx
14721
- * packages/react/src/viewer/utils/warp-text-renderer.tsx (descriptor shape)
14722
- *
14723
- * `getTextWarp(element)` resolves an element's OOXML `prstTxWarp` preset into a
14724
- * `TextWarpDef` that the Angular template can consume without any React/HTML
14725
- * string injection. The descriptor selects one of two rendering strategies:
14726
- *
14727
- * - `'path'` : SVG `<textPath>` along a curved/arc/circle path.
14728
- * The `pathLines` array contains one entry per paragraph with a
14729
- * pre-computed SVG `d` attribute. The template renders an inline
14730
- * `<svg>` with `<defs><path>` + `<text><textPath href>`.
14731
- *
14732
- * - `'css'` : A whole-block CSS transform approximation. The template
14733
- * applies `cssTransform` and `cssTransformOrigin` to the
14734
- * existing `div.pptx-ng-text` wrapper (or a parent div) via
14735
- * `[ngStyle]`. No SVG required.
14736
- *
14737
- * Presets classified as `'none'` (textNoShape, textPlain, unknown) return
14738
- * `undefined` so callers can skip extra rendering without an allowlist check.
14739
- */
14740
-
14741
- /** The four rendering strategy families. */
14742
- type WarpCategory = WarpCategory$1;
14743
- /**
14744
- * Classify a warp preset into a rendering strategy category.
14745
- *
14746
- * Returns `'none'` for unknown or empty presets so callers can safely
14747
- * skip rendering without an explicit allowlist check. Thin alias for the
14748
- * shared `classifyTextWarp` helper.
14749
- */
14750
- declare const getWarpCategory: (preset: string | undefined) => WarpCategory;
14751
-
14752
- /**
14753
- * A single pre-computed SVG path line for one text paragraph.
14754
- *
14755
- * The template renders this as:
14756
- * `<path [id]="pathId" [attr.d]="d" fill="none" />`
14757
- * inside `<defs>`, then references it with `<textPath [attr.href]="'#'+pathId">`.
14758
- */
14759
- interface WarpPathLine {
14760
- /** Unique DOM id for this `<path>` element (safe to use as `href` fragment). */
14761
- pathId: string;
14762
- /** SVG path data (`d` attribute). */
14763
- d: string;
14764
- /** The text segments that flow along this path. */
14765
- segments: TextSegment[];
14399
+ start: number;
14400
+ span: number;
14401
+ } | null>;
14402
+ /** Selected element extent (scaled px) highlighted on the vertical strip. */
14403
+ readonly vRulerHighlight: _angular_core.Signal<{
14404
+ start: number;
14405
+ span: number;
14406
+ } | null>;
14407
+ readonly stageStyle: _angular_core.Signal<StyleMap>;
14408
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideCanvasComponent, never>;
14409
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideCanvasComponent, "pptx-slide-canvas", never, { "slide": { "alias": "slide"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "rulerUnit": { "alias": "rulerUnit"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "gridSpacing": { "alias": "gridSpacing"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "guideCommand": { "alias": "guideCommand"; "required": false; "isSignal": true; }; "spellCheck": { "alias": "spellCheck"; "required": false; "isSignal": true; }; "snapToGuides": { "alias": "snapToGuides"; "required": false; "isSignal": true; }; "autoFit": { "alias": "autoFit"; "required": false; "isSignal": true; }; "transparentBackground": { "alias": "transparentBackground"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "exposeElementIds": { "alias": "exposeElementIds"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "editingId": { "alias": "editingId"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "aiHighlights": { "alias": "aiHighlights"; "required": false; "isSignal": true; }; "aiActive": { "alias": "aiActive"; "required": false; "isSignal": true; }; "aiActiveSlideIndex": { "alias": "aiActiveSlideIndex"; "required": false; "isSignal": true; }; "aiChangeBatch": { "alias": "aiChangeBatch"; "required": false; "isSignal": true; }; "aiPickMode": { "alias": "aiPickMode"; "required": false; "isSignal": true; }; "drawTool": { "alias": "drawTool"; "required": false; "isSignal": true; }; "drawColor": { "alias": "drawColor"; "required": false; "isSignal": true; }; "drawWidth": { "alias": "drawWidth"; "required": false; "isSignal": true; }; }, { "elementSelect": "elementSelect"; "backgroundClick": "backgroundClick"; "transformStart": "transformStart"; "transformUpdate": "transformUpdate"; "transformEnd": "transformEnd"; "adjustUpdate": "adjustUpdate"; "connectorEndpointUpdate": "connectorEndpointUpdate"; "contextMenu": "contextMenu"; "textEditStart": "textEditStart"; "textCommit": "textCommit"; "textInput": "textInput"; "textCancel": "textCancel"; "textFormat": "textFormat"; "rotateUpdate": "rotateUpdate"; "marqueeSelect": "marqueeSelect"; "inkStrokeComplete": "inkStrokeComplete"; "eraserHit": "eraserHit"; "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, ["*"], true, never>;
14766
14410
  }
14411
+
14767
14412
  /**
14768
- * Descriptor for SVG `<textPath>`-based warp rendering.
14413
+ * Renderer-injected shape-effect definitions that need a companion DOM node
14414
+ * (a soft-edge `<filter>` def, a DAG fill-overlay tint layer), plus the helper
14415
+ * that strips dangling `url(#…)` filter references.
14769
14416
  *
14770
- * One `WarpPathLine` per paragraph. The template renders an inline `<svg>`
14771
- * covering the element bounds, defines each path in `<defs>`, then lays
14772
- * `<text><textPath href="#pathId">` on each path.
14417
+ * Kept out of `element-style.ts` so that module stays focused on producing the
14418
+ * base `[ngStyle]` maps. Mirrors the Vue/Svelte `ShapeEffectOverlay` split.
14773
14419
  */
14774
- interface TextWarpPathDef {
14775
- readonly strategy: 'path';
14776
- /** OOXML preset name (e.g. `'textArchUp'`). */
14777
- readonly preset: PptxTextWarpPreset;
14778
- /** One entry per paragraph. */
14779
- readonly pathLines: WarpPathLine[];
14780
- /** Element pixel width (for `<svg width>`). */
14781
- readonly width: number;
14782
- /** Element pixel height (for `<svg height>`). */
14783
- readonly height: number;
14784
- /** SVG `text-anchor` value derived from paragraph alignment. */
14785
- readonly textAnchor: 'start' | 'middle' | 'end';
14786
- /** SVG `<textPath startOffset>` value (e.g. `"0%"`, `"50%"`, `"100%"`). */
14787
- readonly startOffset: string;
14788
- /** Base font size in points from the element's text style. */
14789
- readonly baseFontSize: number;
14790
- /** Base font family string (already CSS-ready). */
14791
- readonly baseFontFamily: string;
14792
- /** Base text fill colour (hex). */
14793
- readonly baseColor: string;
14420
+
14421
+ /** Injectable soft-edge `<filter>` descriptor (id + feather radius in px). */
14422
+ interface SoftEdgeFilterDef {
14423
+ id: string;
14424
+ radius: number;
14794
14425
  }
14795
14426
  /**
14796
- * Descriptor for CSS-transform-based warp rendering.
14427
+ * `a:reflection` mirrored-sibling wrapper style descriptor (position, mirror
14428
+ * transform, mask-image fade - see shared's `getReflectionWrapperStyle`).
14429
+ * Cross-browser, unlike the `-webkit-box-reflect` `element-style.ts` used to
14430
+ * set (Firefox never implemented that property, so reflections were invisible
14431
+ * there entirely).
14797
14432
  *
14798
- * The template applies `cssTransform` + `cssTransformOrigin` on the
14799
- * `div.pptx-ng-text` wrapper (or a containing div) via `[ngStyle]`.
14433
+ * The mirrored CONTENT is no longer carried here: `ReflectionMirrorContentComponent`
14434
+ * (`reflection-mirror-content.component.ts`) paints the element's own fill,
14435
+ * outline, text body and - for a group - its children directly from
14436
+ * `element`, rather than this descriptor only ever offering a resolved fill
14437
+ * (or a picture's `<img>` src) to paint a flat box with.
14800
14438
  */
14801
- interface TextWarpCssDef {
14802
- readonly strategy: 'css';
14803
- /** OOXML preset name (e.g. `'textSlantUp'`). */
14804
- readonly preset: PptxTextWarpPreset;
14805
- /** CSS `transform` string (e.g. `"perspective(500px) rotateY(8deg) skewY(-4deg)"`). */
14806
- readonly cssTransform: string;
14807
- /** CSS `transform-origin` string (e.g. `"left center"`). */
14808
- readonly cssTransformOrigin: string;
14439
+ interface ReflectionOverlay {
14440
+ wrapperStyle: ReflectionWrapperStyle;
14809
14441
  }
14810
- /** Union of the two warp rendering strategies. */
14811
- type TextWarpDef = TextWarpPathDef | TextWarpCssDef;
14812
- /**
14813
- * Resolve a `PptxElement`'s text warp preset into a `TextWarpDef` descriptor,
14814
- * or `undefined` when the element carries no warp (or the preset is `textNoShape` /
14815
- * `textPlain` / unknown).
14816
- *
14817
- * @param element Any `PptxElement`. Elements without text properties always
14818
- * return `undefined`.
14819
- * @param fieldContext Optional OOXML field-substitution context. When given,
14820
- * field runs (slide number, date/time, footer, ...) in the warp
14821
- * paragraphs are resolved to their display text, mirroring
14822
- * React's warp-text-renderer.
14823
- * @returns A `TextWarpDef` with `strategy: 'path'` for SVG textPath warps, or
14824
- * `strategy: 'css'` for CSS-transform approximations.
14825
- */
14826
- declare function getTextWarp(element: PptxElement, fieldContext?: FieldSubstitutionContext): TextWarpDef | undefined;
14827
14442
 
14828
14443
  /**
14829
14444
  * ElementRendererComponent: Angular port of the React `ElementRenderer.tsx`
14830
- * and the Vue `ElementRenderer.vue`.
14831
- *
14832
- * Renders a single slide element by its `type` discriminant:
14833
- * - `text` / `shape` → positioned box with fill/stroke + rich text + effects
14834
- * - `connector` → SVG straight/bent/curved connector
14835
- * - `chart` → inline-SVG chart (bar/line/area/pie/scatter)
14836
- * - `table` → HTML `<table>`
14837
- * - `smartArt` → SVG drawing-shapes / node-text fallback
14838
- * - `ink` → SVG ink strokes
14839
- * - `ole` → embedded-object preview / icon
14840
- * - `model3d` → interactive three.js scene when the optional
14841
- * `three` peer is present, else poster / placeholder
14842
- * - `zoom` → slide/section zoom thumbnail
14843
- * - `picture` / `image` → `<img>`
14844
- * - `media` → native `<video>`/`<audio>` playback, poster fallback
14845
- * - `group` → recursive children (self-referencing selector)
14846
- * - everything else → labelled placeholder (defensive fallback)
14445
+ * and the Vue `ElementRenderer.vue`. Dispatches by `element().type`:
14446
+ * `connector`/`group` (self-recursive) stay here; `picture`/`image` goes to
14447
+ * `ImageRendererComponent`; `text`/`shape` goes to
14448
+ * `ElementRendererShapeComponent`; everything else goes to
14449
+ * `ElementRendererGraphicsComponent`; an unmatched type falls back to a
14450
+ * labelled placeholder.
14847
14451
  */
14848
14452
  declare class ElementRendererComponent {
14849
14453
  readonly element: _angular_core.InputSignal<PptxElement>;
14850
14454
  readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
14851
14455
  readonly zIndex: _angular_core.InputSignal<number>;
14852
14456
  /**
14853
- * Host opt-in to the Three.js SmartArt renderer, surfaced via the
14854
- * viewer-scoped {@link SmartArt3DService}. Optional so renderers used outside
14855
- * the viewer subtree (thumbnails, export) default to the SVG renderer.
14457
+ * Host opt-in to the Three.js SmartArt renderer. Optional so renderers used
14458
+ * outside the viewer subtree (thumbnails, export) default to the SVG one.
14856
14459
  */
14857
14460
  private readonly smartArt3DService;
14858
14461
  /**
14859
- * Native-animation playback (present only inside a running presentation, which
14860
- * provides {@link AnimationPlaybackService} at the overlay level). Optional so
14861
- * the same renderer in the editor / thumbnails / export resolves to `null` and
14862
- * renders with no animation state. Mirrors the Vue `injectPresentationElementStates`
14863
- * provide/inject and React's threaded `presentationElementStates` prop.
14462
+ * Native-animation playback, present only inside a running presentation.
14463
+ * Optional so the editor/thumbnails/export render with no animation state.
14864
14464
  */
14865
14465
  private readonly playback;
14866
14466
  private readonly translate;
14867
- /**
14868
- * Optional so this renderer still works outside a `PowerPointViewerComponent`
14869
- * host (thumbnails, export): a text-run hyperlink click is then never
14870
- * confirmed, matching the option's own default meaning ("not configured").
14871
- */
14872
- private readonly viewerOpts;
14873
14467
  readonly smartArt3D: _angular_core.Signal<boolean>;
14874
- /**
14875
- * Whether the Selection Pane has hidden this element. Drives the empty first
14876
- * `@case` in the template; see the comment there for why nothing is rendered
14877
- * rather than rendered-and-hidden.
14878
- */
14468
+ /** Whether the Selection Pane has hidden this element; see the empty first `@case`. */
14879
14469
  readonly isHidden: _angular_core.Signal<boolean>;
14880
- /** Obstacle rects (absolute slide coords) for connector A* routing. */
14470
+ /** Obstacle rects (slide coords) for connector A* routing. */
14881
14471
  readonly obstacles: _angular_core.InputSignal<readonly RouterRect[]>;
14882
14472
  readonly canvasWidth: _angular_core.InputSignal<number>;
14883
14473
  readonly canvasHeight: _angular_core.InputSignal<number>;
14884
14474
  /**
14885
14475
  * When true (default), the element host carries the framework-neutral
14886
14476
  * `data-pptx-element="true"` contract attribute (used by selection + the
14887
- * shared e2e specs). Thumbnail / preview / presentation canvases pass `false`
14888
- * so they don't pollute the contract selectors, mirroring React, where only
14889
- * the main editing canvas exposes the element contract (thumbnails use a
14890
- * separate lightweight renderer).
14477
+ * shared e2e specs). Thumbnail/preview/presentation canvases pass `false`
14478
+ * so they don't pollute the contract selectors, mirroring React.
14891
14479
  */
14892
14480
  readonly interactive: _angular_core.InputSignal<boolean>;
14893
14481
  /**
14894
- * Emit the `data-pptx-element` marker even though `interactive` is false.
14895
- * The slide canvas sets this for template (master/layout) elements, which are
14896
- * interaction-locked outside edit-template mode but are still rendered slide
14897
- * elements as far as the contract is concerned (the marker means "carries the
14898
- * element contract", not "editable right now"), matching the other bindings.
14482
+ * Emit the `data-pptx-element` marker even though `interactive` is false:
14483
+ * the marker means "carries the element contract", not "editable right
14484
+ * now", so an interaction-locked template (master/layout) element still
14485
+ * sets it, matching the other bindings.
14899
14486
  */
14900
14487
  readonly marked: _angular_core.InputSignal<boolean>;
14901
14488
  /**
14902
14489
  * When true (default), the rendered node carries `data-element-id`.
14903
14490
  *
14904
14491
  * Turned OFF by the miniature surfaces that paint EVERY slide at once
14905
- * (thumbnail rail, mobile slide sheet, slide sorter, presenter navigator,
14906
- * layout gallery, diff strip). Those put one node per element per slide into
14907
- * the document, so the id of an element on slide 1 was addressable while
14908
- * slide 3 was on screen, and every framework-neutral `[data-element-id]`
14909
- * query resolved the wrong slide. React solved the same hazard by giving
14910
- * thumbnails a separate `StaticElementRenderer` that stamps no id at all
14911
- * ("exposing their ids there would put two nodes with the same id in the
14912
- * document"); this input is Angular's equivalent, since it reuses the live
14913
- * renderer for its miniatures.
14914
- *
14492
+ * (thumbnail rail, slide sorter, presenter navigator, ...): those put one
14493
+ * node per element per slide into the document, so without this an id
14494
+ * would resolve to the wrong slide's copy. React's equivalent hazard is
14495
+ * why `StaticElementRenderer` stamps no id at all for its miniatures.
14915
14496
  * Distinct from {@link interactive}: the presentation stage is not
14916
14497
  * interactive but MUST keep its ids, because the morph engine's generated
14917
14498
  * keyframe CSS selects on them.
@@ -14923,73 +14504,57 @@ declare class ElementRendererComponent {
14923
14504
  readonly elementMarked: _angular_core.Signal<boolean>;
14924
14505
  /**
14925
14506
  * `pointer-events: none` while this render is not interactive, mirroring
14926
- * React's `pointer-events-none` Tailwind class on the same condition. This is
14927
- * the piece `editTemplateMode` actually depends on: {@link marked} keeps the
14928
- * `data-pptx-element` contract attribute on a locked template (master/layout)
14929
- * element so it stays findable as a rendered slide element, but the attribute
14930
- * alone never stopped clicks/drags from reaching it. Without this, a
14931
- * layout/master shape stayed fully clickable with `editTemplateMode` off:
14932
- * nothing on its DOM node reflected the lock, only the stage's pointerdown
14933
- * handler's id-based gate did, which kept selection/drag from acting on it
14934
- * but left the element itself indistinguishable from an interactive one to
14935
- * anything reading its computed style (e.g. `e2e/template-editing.spec.ts`).
14507
+ * React's `pointer-events-none` class on the same condition. This is the
14508
+ * piece `editTemplateMode` actually depends on: {@link marked} keeps a
14509
+ * locked template element findable via `data-pptx-element`, but only this
14510
+ * stops clicks/drags from reaching it (without it a layout/master shape
14511
+ * stayed fully clickable with `editTemplateMode` off, indistinguishable
14512
+ * from an interactive one to anything reading its computed style, e.g.
14513
+ * `e2e/template-editing.spec.ts`).
14936
14514
  */
14937
14515
  readonly rootPointerEvents: _angular_core.Signal<"none" | null>;
14938
14516
  /**
14939
- * True only on the live presentation stage; threaded to the media renderer so
14940
- * a slide's media autoplays when the slide becomes active (and to group
14941
- * children so nested media autoplays too). False everywhere else.
14517
+ * True only on the live presentation stage, so a slide's media autoplays
14518
+ * when it becomes active (and nested group children autoplay too).
14942
14519
  */
14943
14520
  readonly presenting: _angular_core.InputSignal<boolean>;
14944
- /** Whether inline editing (e.g. table-cell text input) is enabled. */
14521
+ /** Whether inline editing (table-cell text input, etc.) is enabled. */
14945
14522
  readonly editable: _angular_core.InputSignal<boolean>;
14946
14523
  /**
14947
14524
  * OOXML field-substitution context (slide number, date/time, header/footer,
14948
- * slide title, custom doc properties). Built once per slide by the slide
14949
- * canvas and threaded down (including to recursive group children) so field
14950
- * runs resolve to display text, mirroring React's `fieldContext`.
14525
+ * slide title, custom doc properties), threaded down (incl. to recursive
14526
+ * group children) so field runs resolve to display text.
14951
14527
  */
14952
14528
  readonly fieldContext: _angular_core.InputSignal<FieldSubstitutionContext | undefined>;
14953
14529
  /**
14954
14530
  * The elements of the slide being painted, threaded down (including to
14955
- * recursive group children) alongside {@link fieldContext}.
14956
- *
14957
- * Needed only by `a:linkedTxbx` chains: a text box in a linked chain renders
14958
- * the slice of the chain's text that the preceding boxes could not hold,
14959
- * which is computable only from its SIBLINGS. Mirrors React's `slideElements`
14960
- * (taken from its `activeSlide.elements` prop). Left empty by a host that
14961
- * renders an element outside any slide, in which case a linked box falls back
14962
- * to its own authored segments.
14531
+ * recursive group children) alongside {@link fieldContext}. Needed only by
14532
+ * `a:linkedTxbx` chains: a text box in a linked chain renders the slice of
14533
+ * the chain's text the preceding boxes could not hold, computable only
14534
+ * from its SIBLINGS. Mirrors React's `slideElements`. Left empty outside
14535
+ * any slide, in which case a linked box falls back to its own segments.
14963
14536
  */
14964
14537
  readonly slideElements: _angular_core.InputSignal<readonly PptxElement[]>;
14965
14538
  /**
14966
- * When true, inherited master/layout (template) elements get a visual
14967
- * affordance (amber outline ring + slightly reduced opacity) signalling that
14968
- * they are now directly editable. Has no effect on normal slide elements, and
14969
- * no effect at all when false, so default rendering is untouched.
14539
+ * When true, inherited master/layout elements get a visual affordance
14540
+ * (amber outline + reduced opacity) signalling they are now editable. No
14541
+ * effect on normal slide elements or when false.
14970
14542
  */
14971
14543
  readonly editTemplateMode: _angular_core.InputSignal<boolean>;
14972
14544
  /**
14973
- * The enclosing group's fill (`GroupPptxElement.groupFill`), passed down by
14974
- * the group render branch so a child painted with `a:grpFill`
14975
- * (`fillMode === 'group'`) inherits the group's resolved fill.
14545
+ * The enclosing group's fill (`GroupPptxElement.groupFill`), so a child
14546
+ * painted with `a:grpFill` inherits the group's resolved fill.
14976
14547
  */
14977
14548
  readonly parentGroupFill: _angular_core.InputSignal<ShapeStyle | undefined>;
14978
14549
  /**
14979
14550
  * The element currently open in the element-level inline text editor
14980
14551
  * (the `<textarea data-inline-editor>` overlay in `slide-canvas.component`),
14981
- * or `null` when nothing is being edited.
14982
- *
14983
- * Mirrors React's `ElementBody.renderBody`, which swaps its static text
14984
- * render out for the inline editor while `isEditing` is true rather than
14985
- * layering the two: without this, this component kept painting the
14986
- * element's normal text UNDERNEATH the editor overlay, and the editor's
14987
- * own translucent background let it show through as a duplicate, offset
14988
- * "text shadow" (issue #182).
14552
+ * or `null`. Mirrors React's `ElementBody.renderBody`, which swaps its
14553
+ * static text render out for the inline editor rather than layering the
14554
+ * two: without this the element's normal text painted UNDERNEATH the
14555
+ * editor overlay, showing through as a duplicate "text shadow" (issue #182).
14989
14556
  */
14990
14557
  readonly editingElementId: _angular_core.InputSignal<string | null>;
14991
- /** This exact element is open in the element-level inline text editor right now. */
14992
- readonly isBeingInlineEdited: _angular_core.Signal<boolean>;
14993
14558
  /** Emitted when a table cell's text edit is committed. */
14994
14559
  readonly cellCommit: _angular_core.OutputEmitterRef<{
14995
14560
  id: string;
@@ -15000,137 +14565,55 @@ declare class ElementRendererComponent {
15000
14565
  id: string;
15001
14566
  tableData: PptxTableData;
15002
14567
  }>;
15003
- /** Duotone SVG `<filter>` descriptor for this element, if any. */
14568
+ /** Duotone SVG `<filter>` descriptor, if any. */
15004
14569
  readonly duotoneFilter: _angular_core.Signal<pptx_angular_viewer.DuotoneFilterDef | undefined>;
15005
14570
  /**
15006
- * Soft-edge feather `<filter>` descriptor (id + radius). The template injects
15007
- * a matching `<filter>` into a hidden `<defs>` so the `filter:
15008
- * url(#soft-edge-<id>)` reference on the shape resolves. Undefined otherwise.
14571
+ * Soft-edge feather `<filter>` descriptor (id + radius). The template
14572
+ * injects a matching `<filter>` def so `filter: url(#soft-edge-<id>)`
14573
+ * resolves. Undefined otherwise.
15009
14574
  */
15010
14575
  readonly softEdgeFilter: _angular_core.Signal<SoftEdgeFilterDef | undefined>;
15011
14576
  /**
15012
- * DAG fill-overlay tint (colour + blend mode) painted as a separate blended
15013
- * layer over the shape. Undefined when the element has no fill overlay.
15014
- */
15015
- /**
15016
- * Stroked SVG outline: a gradient / pattern `a:ln`, or a stroke-only ("open")
15017
- * preset such as `line` or `arc`, neither of which a CSS border can paint.
15018
- */
15019
- readonly gradientOutline: _angular_core.Signal<StrokeOutline | undefined>;
15020
- /** viewBox in the element's PAINTED box, which the path data is authored in. */
15021
- readonly outlineViewBox: _angular_core.Signal<string>;
15022
- /**
15023
- * Transparent outline hit band for an unfilled, textless shape. Its container
15024
- * is `pointer-events: none` so clicks fall through to whatever it is drawn
15025
- * over; this opts the OUTLINE back in (same trick as the connector target).
15026
- */
15027
- readonly hollowHit: _angular_core.Signal<HollowHitOutline | undefined>;
15028
- readonly fillOverlay: _angular_core.Signal<FillOverlayCss | undefined>;
15029
- /**
15030
- * `a:reflection` mirrored-sibling descriptor, or `undefined` when the
15031
- * element has no reflection. See `element-effect-defs.ts`'s
15032
- * `getReflectionOverlay`.
14577
+ * `a:reflection` mirrored-sibling descriptor, or `undefined`. Used by the
14578
+ * `group` branch below (a group reflects its whole composited subtree);
14579
+ * `ElementRendererShapeComponent` recomputes its own copy locally instead,
14580
+ * mirroring how `ImageRendererComponent` already does the same.
15033
14581
  */
15034
14582
  readonly reflection: _angular_core.Signal<ReflectionOverlay | undefined>;
15035
- /**
15036
- * Per-sub-path fill overlay for a multi-sub-path preset or custom geometry,
15037
- * or `undefined` when a single merged fill is correct (the ordinary case).
15038
- */
15039
- readonly subpathFill: _angular_core.Signal<SubpathFillOverlay | undefined>;
15040
- /** `viewBox` for the sub-path fill overlay, in its own coordinate space. */
15041
- readonly subpathFillViewBox: _angular_core.Signal<string | undefined>;
15042
- /**
15043
- * Outline ring + slight transparency applied to inherited template
15044
- * (master/layout) elements while editTemplateMode is on. Empty otherwise, so
15045
- * normal rendering is never altered.
15046
- */
15047
- readonly templateAffordanceStyle: _angular_core.Signal<StyleMap>;
15048
14583
  /**
15049
14584
  * This element's native-animation playback state, or `undefined` outside a
15050
- * running presentation. Drives the staged chart / SmartArt build reveal and the
15051
- * `p:animClr` fill / stroke relinquish (threaded to the chart / SmartArt /
15052
- * connector renderers), mirroring React's per-element `animationState`.
14585
+ * running presentation. Drives the staged chart/SmartArt build reveal and
14586
+ * the `p:animClr` fill/stroke relinquish.
15053
14587
  */
15054
14588
  readonly animationState: _angular_core.Signal<ElementAnimationState | undefined>;
15055
14589
  /**
15056
14590
  * A font-style emphasis effect (Bold Flash, Bold Reveal, Underline, Change
15057
14591
  * Font Style/Size) overrides the runs' own inline bold/italic/underline/
15058
- * size, which plain CSS inheritance cannot reach (the runs declare those
15059
- * unconditionally). See `animation-text-style-css.ts`. NOT gated on
15060
- * `hasTextProperties`: a table cell, a chart title/label/legend, and a
15061
- * SmartArt node caption all animate this way too, and shared's selector
15062
- * already scopes itself to this element's `data-element-id`, which every
15063
- * branch of the template below carries on its own root.
14592
+ * size, which plain CSS inheritance cannot reach. See
14593
+ * `animation-text-style-css.ts`. NOT gated on `hasTextProperties`: a table
14594
+ * cell, a chart title/label/legend, and a SmartArt node caption all
14595
+ * animate this way too, and shared's selector scopes itself to this
14596
+ * element's `data-element-id`, which every branch below carries.
15064
14597
  */
15065
14598
  readonly textStyleOverrideCss: _angular_core.Signal<string | undefined>;
15066
- /**
15067
- * Per-paragraph split for a staged text build (by paragraph / word / letter),
15068
- * or `undefined` entries to render the runs normally. PowerPoint's "Animate
15069
- * text: By letter" needs the rendered text split to match the per-character
15070
- * sub-animations, otherwise the whole box just fades as one.
15071
- */
15072
- readonly textBuildSpecs: _angular_core.Signal<(TextBuildSpec<StyleMap> | undefined)[]>;
15073
- /**
15074
- * Trust Center > "Confirm before opening external hyperlinks" gate for a
15075
- * text-run hyperlink (`<a class="pptx-ng-link">`). The anchor's own `href` /
15076
- * `target="_blank"` still does the actual navigation; this only vetoes it
15077
- * via `preventDefault()` when the user declines the prompt.
15078
- */
15079
- protected onHyperlinkClick(event: MouseEvent, href: string): void;
15080
- /** Whole-paragraph text, for the paragraph-level build wrapper. */
15081
- protected paragraphText(para: Paragraph): string;
15082
- /** Style for one build piece, merged over the run's own style. */
15083
- protected buildSpanStyle(span: {
15084
- style?: StyleMap;
15085
- hidden?: boolean;
15086
- cssAnimation?: string;
15087
- }): {
15088
- [x: string]: string | number;
15089
- };
14599
+ /** Live per-sub-element animation states for the staged text-build split. */
14600
+ readonly subElementAnimStates: _angular_core.Signal<Map<string, ElementAnimationState> | undefined>;
15090
14601
  readonly containerStyle: _angular_core.Signal<StyleMap>;
14602
+ /** Fill/stroke/effects container style; see `buildShapeContainerStyle`'s doc. */
15091
14603
  readonly shapeContainerStyle: _angular_core.Signal<StyleMap>;
15092
- readonly textStyle: _angular_core.Signal<StyleMap>;
15093
- /** Text-warp (WordArt) descriptor for the element, if any. */
15094
- readonly textWarp: _angular_core.Signal<pptx_angular_viewer.TextWarpDef | undefined>;
15095
- /** Only the SVG-textPath warp variant (for the `<svg>` overlay branch). */
15096
- readonly pathWarp: _angular_core.Signal<TextWarpPathDef | undefined>;
15097
- /** Text block 3D scene style (a:bodyPr/a:scene3d), mirroring React's ElementBody. */
15098
- readonly scene3dStyle: _angular_core.Signal<StyleMap | undefined>;
15099
- /**
15100
- * Text block style, folding in a CSS-transform warp and the 3D scene
15101
- * (perspective + rotation) when present. The warp transform and the scene
15102
- * transform are composed rather than clobbering each other.
15103
- */
15104
- readonly warpedTextStyle: _angular_core.Signal<StyleMap>;
15105
14604
  readonly children: _angular_core.Signal<PptxElement[]>;
15106
14605
  /**
15107
14606
  * The fill handed to this group's `a:grpFill` children as their
15108
- * `parentGroupFill`; undefined for non-group elements.
15109
- *
15110
- * The shared helper, not a hand-inlined copy: the inlined one returned this
15111
- * group's own fill only, and `a:grpFill` resolves against the nearest
15112
- * ANCESTOR that has a fill, so a shape inside a fill-less nested group came
15113
- * out transparent. (The old copy justified itself with "shared is only
15114
- * vendored at build time", but this component already imports a dozen shared
15115
- * symbols from the vendored barrel.)
14607
+ * `parentGroupFill`; undefined for non-group elements. Uses the shared
14608
+ * helper, not a hand-inlined copy: `a:grpFill` resolves against the
14609
+ * nearest ANCESTOR that has a fill, so a naive "this group's own fill
14610
+ * only" version left a shape inside a fill-less nested group transparent.
15116
14611
  */
15117
14612
  readonly childParentGroupFill: _angular_core.Signal<ShapeStyle | undefined>;
15118
14613
  readonly isShapeLike: _angular_core.Signal<boolean>;
15119
14614
  readonly isImageLike: _angular_core.Signal<boolean>;
15120
- readonly paragraphs: _angular_core.Signal<Paragraph[]>;
15121
- readonly hasText: _angular_core.Signal<boolean>;
15122
- /**
15123
- * An empty inherited placeholder's greyed-out hint ("Click to add title"),
15124
- * or null when it should not be shown. `editable` is only ever set true on
15125
- * the live editing canvas (Present Mode leaves it at its `false` default,
15126
- * and the thumbnail rail passes it explicitly false), matching shared's
15127
- * `'edit'`-only surface: PowerPoint never prints, presents or thumbnails
15128
- * this authoring hint.
15129
- */
15130
- readonly placeholderPrompt: _angular_core.Signal<{
15131
- text: string;
15132
- style: StyleMap;
15133
- } | null>;
14615
+ /** Element kinds routed to `ElementRendererGraphicsComponent`; see `GRAPHICS_ELEMENT_TYPES`. */
14616
+ readonly isGraphicsElement: _angular_core.Signal<boolean>;
15134
14617
  readonly placeholderLabel: _angular_core.Signal<any>;
15135
14618
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementRendererComponent, never>;
15136
14619
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementRendererComponent, "pptx-element-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "obstacles": { "alias": "obstacles"; "required": false; "isSignal": true; }; "canvasWidth": { "alias": "canvasWidth"; "required": false; "isSignal": true; }; "canvasHeight": { "alias": "canvasHeight"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "marked": { "alias": "marked"; "required": false; "isSignal": true; }; "exposeElementId": { "alias": "exposeElementId"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "fieldContext": { "alias": "fieldContext"; "required": false; "isSignal": true; }; "slideElements": { "alias": "slideElements"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "parentGroupFill": { "alias": "parentGroupFill"; "required": false; "isSignal": true; }; "editingElementId": { "alias": "editingElementId"; "required": false; "isSignal": true; }; }, { "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
@@ -15283,6 +14766,17 @@ declare class ConnectorTextOverlayComponent {
15283
14766
 
15284
14767
  declare class ChartRendererComponent {
15285
14768
  readonly element: _angular_core.InputSignal<PptxElement>;
14769
+ /**
14770
+ * An untargeted bar3D extrusion face whose fill is picture-only samples a
14771
+ * colour from the picture ASYNCHRONOUSLY (see `chart-bar3d-face-picture-
14772
+ * sample.ts`'s module doc for the COM-verified ground truth this
14773
+ * reproduces); `buildChartViewModel` only ever sees whatever is already
14774
+ * cached. This signal is bumped by the shared (non-Angular) sample cache
14775
+ * whenever one resolves, and `vm` below reads it purely to establish a
14776
+ * signal dependency, forcing `computed` to rebuild once a sample lands.
14777
+ */
14778
+ private readonly sampleVersion;
14779
+ constructor();
15286
14780
  readonly vm: _angular_core.Signal<ChartViewModel>;
15287
14781
  readonly viewBox: _angular_core.Signal<string>;
15288
14782
  readonly swatchSize = 10;
@@ -15370,24 +14864,26 @@ declare class ChartElementViewComponent {
15370
14864
  private readonly chartData;
15371
14865
  /**
15372
14866
  * Opt-in interactive 3D surface scene (camera orbit/zoom via OrbitControls).
15373
- * Marks are not selectable/draggable in this mode: a mesh facet has no 2D
15374
- * screen geometry to hit-test against, so value-drag editing stays SVG-only.
14867
+ * Click-to-select only: the grid is a single mesh with no per-cell geometry
14868
+ * to drag a value against, so value-drag editing stays SVG-only (see the
14869
+ * shared `SurfaceChart3DInteraction` doc comment).
15375
14870
  */
15376
14871
  protected readonly use3D: _angular_core.Signal<boolean>;
15377
14872
  protected readonly isSurfaceKind: _angular_core.Signal<boolean>;
15378
14873
  /**
15379
14874
  * Opt-in interactive 3D bar scene (real box meshes, camera orbit/zoom via
15380
- * OrbitControls). Same "marks are not selectable/draggable" caveat as the
15381
- * surface scene above. `chartType` is checked directly (NOT via
15382
- * `resolveChartKind`, which folds `bar`/`bar3D` onto the same 'bar' kind),
15383
- * so a plain 2-D bar chart never mounts the 3D scene.
14875
+ * OrbitControls). Clustered boxes are click-to-select AND drag-to-value
14876
+ * (`onChartPart3DSelect`/`onChart3DValueDragCommit` below); stacked/
14877
+ * percentStacked boxes are select-only. `chartType` is checked directly
14878
+ * (NOT via `resolveChartKind`, which folds `bar`/`bar3D` onto the same
14879
+ * 'bar' kind), so a plain 2-D bar chart never mounts the 3D scene.
15384
14880
  */
15385
14881
  protected readonly use3DBar: _angular_core.Signal<boolean>;
15386
14882
  protected readonly isBar3DKind: _angular_core.Signal<boolean>;
15387
14883
  /**
15388
14884
  * Opt-in interactive 3D line/area scenes (tube path / ribbon meshes, camera
15389
- * orbit/zoom via OrbitControls). Same "marks are not selectable/draggable"
15390
- * caveat as the surface/bar scenes above.
14885
+ * orbit/zoom via OrbitControls). Point markers are click-to-select AND
14886
+ * drag-to-value, same as the bar scene above.
15391
14887
  */
15392
14888
  protected readonly use3DLine: _angular_core.Signal<boolean>;
15393
14889
  protected readonly isLine3DKind: _angular_core.Signal<boolean>;
@@ -15395,11 +14891,11 @@ declare class ChartElementViewComponent {
15395
14891
  protected readonly isArea3DKind: _angular_core.Signal<boolean>;
15396
14892
  /**
15397
14893
  * Opt-in interactive 3D pie scene (real wedge meshes, camera orbit/zoom via
15398
- * OrbitControls). Same "marks are not selectable/draggable" caveat as the
15399
- * bar scene above. `chartType` is checked directly (NOT via
15400
- * `resolveChartKind`, which folds `pie`/`pie3D`/`doughnut` onto the same
15401
- * 'pie' kind), so a plain 2-D pie or doughnut chart never mounts the 3D
15402
- * scene.
14894
+ * OrbitControls). Click-to-select only: a pie/doughnut slice has no single
14895
+ * value axis to drag along (see the shared `PieChart3DInteraction` doc
14896
+ * comment). `chartType` is checked directly (NOT via `resolveChartKind`,
14897
+ * which folds `pie`/`pie3D`/`doughnut` onto the same 'pie' kind), so a
14898
+ * plain 2-D pie or doughnut chart never mounts the 3D scene.
15403
14899
  */
15404
14900
  protected readonly use3DPie: _angular_core.Signal<boolean>;
15405
14901
  protected readonly isPie3DKind: _angular_core.Signal<boolean>;
@@ -15417,8 +14913,13 @@ declare class ChartElementViewComponent {
15417
14913
  */
15418
14914
  protected readonly renderedElement: _angular_core.Signal<PptxElement>;
15419
14915
  protected readonly dragBadge: _angular_core.Signal<string>;
15420
- /** The part selected for THIS chart, or null. */
15421
- private readonly selectedPart;
14916
+ /** The part selected for THIS chart, or null. Also fed to the 3D chart
14917
+ * renderers so an external selection change (inspector, keyboard) re-applies
14918
+ * the mesh highlight in the mounted scene. */
14919
+ protected readonly selectedPart: _angular_core.Signal<ChartPartRef | null>;
14920
+ /** Active font-style emphasis override for a 3D chart scene's own axis
14921
+ * labels (bar3D/line3D/area3D/surface3D; pie3D draws none). */
14922
+ protected readonly chartTextStyle: _angular_core.Signal<TextStyleAnimationDescriptor | undefined>;
15422
14923
  constructor();
15423
14924
  protected onPointerDown(event: PointerEvent): void;
15424
14925
  protected onPointerMove(event: PointerEvent): void;
@@ -15426,6 +14927,34 @@ declare class ChartElementViewComponent {
15426
14927
  /** Cancel an in-flight value drag with Escape (document-level, like React). */
15427
14928
  protected onEscape(): void;
15428
14929
  private endDrag;
14930
+ /**
14931
+ * A 3D scene's own click-to-select fired (or empty space, clearing). Routes
14932
+ * to the SAME `ChartPartSelectionService` the 2D `onPointerDown` above uses,
14933
+ * so the inspector reacts identically to a 3D mark. Gated on `canEdit()`
14934
+ * exactly like the 2D path: every read-only mount of this same chart
14935
+ * element (thumbnail rail, export) shares the one injected service
14936
+ * instance, so an un-gated write here would fight the canvas copy's
14937
+ * selection (see the constructor's `clearForElement` effect comment).
14938
+ */
14939
+ protected onChartPart3DSelect(part: ChartPartRef | null): void;
14940
+ /**
14941
+ * Live value while dragging a 3D mark. Only drives the floating badge
14942
+ * (`dragValue`/`dragBadge`, shared with the 2D drag UI): unlike the 2D SVG
14943
+ * drag, previewing the new value in the mesh itself would require
14944
+ * re-mounting the WebGL scene on every pointer-move, which would tear down
14945
+ * the in-flight pointer capture the shared scene's own drag state machine
14946
+ * relies on.
14947
+ */
14948
+ protected onChart3DValueDragPreview(event: {
14949
+ part: ChartPartRef;
14950
+ value: number;
14951
+ }): void;
14952
+ /** Final value from a 3D mark drag: commits through the same channel the
14953
+ * 2D value-drag / mark-drag paths use above. */
14954
+ protected onChart3DValueDragCommit(event: {
14955
+ part: ChartPartRef;
14956
+ value: number;
14957
+ }): void;
15429
14958
  protected onDblClick(event: MouseEvent): void;
15430
14959
  protected onTitleInput(event: Event): void;
15431
14960
  protected onTitleKeydown(event: KeyboardEvent): void;
@@ -15755,28 +15284,6 @@ declare class SmartArtRendererComponent {
15755
15284
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartArtRendererComponent, "pptx-smart-art-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "animationState": { "alias": "animationState"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15756
15285
  }
15757
15286
 
15758
- /** Resolved per-stroke data used to render a single `<path>` (or circle set). */
15759
- interface InkStroke {
15760
- d: string;
15761
- color: string;
15762
- width: number;
15763
- opacity: number;
15764
- /**
15765
- * When present, render as pressure-sensitive circles instead of a plain
15766
- * constant-width `<path>`. Empty/absent means a constant-width stroke.
15767
- */
15768
- circles?: PressureCircle[];
15769
- }
15770
- /**
15771
- * Narrow `element` to `InkPptxElement` and return the resolved per-stroke
15772
- * array, or an empty array when the element is not an ink element.
15773
- */
15774
- declare function buildInkStrokes(element: PptxElement): InkStroke[];
15775
- /** Minimum SVG viewport dimension (clamp to ≥ 1 to avoid degenerate viewBox). */
15776
- declare function inkViewBox(element: PptxElement): string;
15777
- /** Wrapper `[ngStyle]`-compatible style for the ink container `<div>`. */
15778
- declare function buildInkContainerStyle(element: PptxElement, zIndex: number): StyleMap;
15779
-
15780
15287
  /**
15781
15288
  * InkRendererComponent: Angular port of the Vue `InkRenderer.vue`
15782
15289
  * (and the React `renderInk` inside `InkGroupRenderers.tsx`), viewer-first
@@ -15827,7 +15334,7 @@ declare class InkRendererComponent {
15827
15334
  readonly elementIdAttr: _angular_core.Signal<string | null>;
15828
15335
  readonly replayKeyframes = "@keyframes pptx-ink-replay {\n from { stroke-dashoffset: var(--ink-path-length); }\n to { stroke-dashoffset: 0; }\n}";
15829
15336
  readonly containerStyle: _angular_core.Signal<StyleMap>;
15830
- readonly strokes: _angular_core.Signal<InkStroke[]>;
15337
+ readonly strokes: _angular_core.Signal<InkGroupStrokeView[]>;
15831
15338
  readonly replayStyles: _angular_core.Signal<InkStrokeAnimationStyle[]>;
15832
15339
  readonly viewBox: _angular_core.Signal<string>;
15833
15340
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InkRendererComponent, never>;
@@ -16296,6 +15803,11 @@ declare class AnimationPlaybackService {
16296
15803
  */
16297
15804
  setSlide(slide: PptxSlide | undefined, showWithAnimation?: boolean, options?: {
16298
15805
  completed?: boolean;
15806
+ /** The slide canvas size (px), for a `p:anim` formula needing the animated shape's real box. */
15807
+ slideWidthPx?: number;
15808
+ slideHeightPx?: number;
15809
+ /** The deck's resolved theme colour map, for a scheme-colour (`a:schemeClr`) animation stop. */
15810
+ themeColorMap?: Readonly<Record<string, string>>;
16299
15811
  }): void;
16300
15812
  /**
16301
15813
  * True while the active slide shows its builds as already complete because
@@ -16605,6 +16117,18 @@ interface ShowNavigatorDeps {
16605
16117
  /** The slide at the CURRENT index (a computed over `currentIndex`). */
16606
16118
  currentSlide: () => PptxSlide | undefined;
16607
16119
  showWithAnimation: () => boolean | undefined;
16120
+ /**
16121
+ * The slide canvas size (px), for a `p:anim` formula needing the animated
16122
+ * shape's real box (e.g. Grow And Turn's `-#ppt_w/2` fly-in). Optional so a
16123
+ * host constructed before this existed still compiles; omitting it just
16124
+ * keeps the pre-existing fallback behaviour.
16125
+ */
16126
+ canvasSize?: () => {
16127
+ width: number;
16128
+ height: number;
16129
+ };
16130
+ /** The deck's resolved theme colour map, for a scheme-colour (`a:schemeClr`) animation stop. */
16131
+ themeColorMap?: () => Readonly<Record<string, string>> | undefined;
16608
16132
  playback: AnimationPlaybackService;
16609
16133
  annotations: PresentationAnnotationsService;
16610
16134
  /** Publish a committed index change to the host's `indexChange` output. */
@@ -16811,6 +16335,13 @@ declare class PresentationOverlayComponent implements OnInit {
16811
16335
  * it, external-hyperlink clicks are simply never confirmed.
16812
16336
  */
16813
16337
  private readonly viewerOpts;
16338
+ /**
16339
+ * Optional for the same reason as {@link viewerOpts}. Its `themeColorMap`
16340
+ * signal lets `AnimationPlaybackService.setSlide` resolve a scheme-colour
16341
+ * (`a:schemeClr`) animation stop; absent it, such a stop falls back to the
16342
+ * canned preset timing exactly as before.
16343
+ */
16344
+ private readonly loadContent;
16814
16345
  readonly slides: _angular_core.InputSignal<PptxSlide[]>;
16815
16346
  readonly canvasSize: _angular_core.InputSignal<CanvasSize>;
16816
16347
  readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
@@ -17357,13 +16888,11 @@ declare class InspectorPanelComponent {
17357
16888
  protected readonly chartEl: _angular_core.Signal<ChartPptxElement | undefined>;
17358
16889
  protected readonly imageEl: _angular_core.Signal<PptxElement | undefined>;
17359
16890
  /**
17360
- * The selected element narrowed to a plain shape/text box/connector, or
17361
- * `undefined`. Gates `AccessibilityTextPanelComponent` (alt text / title):
17362
- * a picture's own alt text lives in `imageEl` above, so this must not
17363
- * also match `image`/`picture`, and stays restricted to the three kinds
17364
- * `PptxNonVisualDescription` was added to (not every graphic-frame kind
17365
- * the shared descriptor recognises), so it does not duplicate a
17366
- * table/chart/smartArt/media/ole panel's own alt-text UI.
16891
+ * The selected element, or `undefined`, gating
16892
+ * `AccessibilityTextPanelComponent` (alt text / title) via shared's
16893
+ * `shouldShowAccessibilitySection`: true for a plain shape, text box,
16894
+ * connector, and every graphic-frame kind (table/chart/smartArt/media/ole).
16895
+ * A picture's own alt text lives in `imageEl` above instead.
17367
16896
  */
17368
16897
  protected readonly accessibilityTextEl: _angular_core.Signal<PptxElement | undefined>;
17369
16898
  protected readonly mediaEl: _angular_core.Signal<MediaPptxElement | undefined>;
@@ -18300,6 +17829,13 @@ declare class ChartTypeSelectorComponent {
18300
17829
  protected readonly groupingOptions: readonly ChartOption<"clustered" | "stacked" | "percentStacked" | undefined>[];
18301
17830
  protected readonly data: _angular_core.Signal<PptxChartData | undefined>;
18302
17831
  protected readonly supportsGrouping: _angular_core.Signal<boolean>;
17832
+ /**
17833
+ * The type shown as selected. "Pareto" has no `PptxChartType` of its own
17834
+ * (docs/guide/limitations.md's ChartEx row): it is `chartType: 'histogram'`
17835
+ * plus a `paretoLine`-layout series, so reading `chartType` raw would show
17836
+ * "Histogram" for a chart the user picked "Pareto" for.
17837
+ */
17838
+ protected readonly displayedType: _angular_core.Signal<ChartTypeSelectValue | undefined>;
18303
17839
  protected onTitle(event: Event): void;
18304
17840
  protected onType(event: Event): void;
18305
17841
  protected onGrouping(event: Event): void;
@@ -19639,21 +19175,21 @@ declare class ImagePropertiesPanelComponent {
19639
19175
  }
19640
19176
 
19641
19177
  /**
19642
- * Alt text / title editor for a plain shape, text box or connector, at
19643
- * parity with React's `AccessibilityTextSection` and Vue's
19644
- * `AccessibilityPanel.vue`.
19178
+ * Alt text / title editor for a plain shape, text box, connector, or any
19179
+ * graphic-frame kind (table/chart/smartArt/media/ole), at parity with
19180
+ * React's `AccessibilityTextSection` and Vue's `AccessibilityPanel.vue`.
19645
19181
  *
19646
19182
  * A picture's own alt text field lives in `ImagePropertiesPanelComponent`;
19647
- * this covers the three element kinds that only started modelling `altText`
19648
- * / `title` once core parsed `p:cNvPr/@descr` / `@title` on `p:sp` / `p:cxnSp`
19649
- * (see `PptxNonVisualDescription`). `getNonVisualDescriptionFields` (shared)
19650
- * decides which fields apply so this component stays a thin view.
19183
+ * `shouldShowAccessibilitySection` (shared) decides which other element
19184
+ * kinds get this panel at all, and `getNonVisualDescriptionFields` (shared)
19185
+ * decides which of its two fields apply, so this component stays a thin
19186
+ * view.
19651
19187
  */
19652
19188
  declare class AccessibilityTextPanelComponent {
19653
19189
  readonly element: _angular_core.InputSignal<PptxElement>;
19654
19190
  readonly patch: _angular_core.OutputEmitterRef<Partial<PptxElement>>;
19655
19191
  protected readonly fields: _angular_core.Signal<NonVisualDescriptionFields>;
19656
- /** Whether the selected element kind supports either field. */
19192
+ /** Whether the selected element kind should show this panel at all. */
19657
19193
  static supports(element: PptxElement): boolean;
19658
19194
  protected onAltText(event: Event): void;
19659
19195
  protected onTitle(event: Event): void;
@@ -20627,7 +20163,7 @@ declare class AccountPageComponent {
20627
20163
  readonly accountAuth: _angular_core.InputSignal<AccountAuthConfig | undefined>;
20628
20164
  private readonly translate;
20629
20165
  protected readonly swatches: readonly string[];
20630
- protected readonly version = "3.8.0";
20166
+ protected readonly version = "3.9.0";
20631
20167
  protected readonly profile: _angular_core.WritableSignal<ViewerProfile>;
20632
20168
  protected readonly initial: _angular_core.Signal<string>;
20633
20169
  protected readonly usage: _angular_core.WritableSignal<LocalStorageUsageSummary | null>;
@@ -21470,30 +21006,171 @@ interface PresenterNotes {
21470
21006
  declare function resolvePresenterNotes(slide: PptxSlide | undefined): PresenterNotes;
21471
21007
 
21472
21008
  /**
21473
- * SVG path generators for WordArt text warp presets.
21009
+ * True two-curve WordArt envelope descriptor (inflate/deflate/can) for the
21010
+ * Angular viewer. Split out of `text-warp.ts` to keep that file under the
21011
+ * repo's per-file line budget.
21012
+ *
21013
+ * Unlike `TextWarpPathDef` (a shared-baseline SVG `<textPath>`), glyph HEIGHT
21014
+ * varies with horizontal position here: each glyph carries its own `matrix`
21015
+ * transform, computed by `buildGlyphEnvelope` (`pptx-viewer-shared`) from the
21016
+ * preset's top/bottom envelope curves sampled across the glyph's own width.
21017
+ */
21018
+
21019
+ /** One glyph of an envelope-warped (inflate/deflate/can) line. */
21020
+ interface WarpGlyph {
21021
+ readonly char: string;
21022
+ readonly x: number;
21023
+ readonly y: number;
21024
+ /** SVG `matrix(1 b 0 d 0 f)` mapping the nominal band onto the envelope curve. */
21025
+ readonly transform: string;
21026
+ readonly fill: string;
21027
+ readonly fontWeight: 400 | 700;
21028
+ readonly fontStyle: 'italic' | 'normal';
21029
+ readonly fontFamily: string;
21030
+ readonly fontSize: number;
21031
+ /**
21032
+ * Present only when this glyph needed more than one rendered piece (see
21033
+ * `chooseGlyphSliceCount` in pptx-viewer-shared): a very wide glyph on a
21034
+ * strongly-curved envelope, where `transform` alone misses how much the
21035
+ * curve bends within the glyph's own width. Absent for an ordinary
21036
+ * caption, in which case the template renders exactly one `<text>` with
21037
+ * `transform`, unchanged from before slicing existed.
21038
+ */
21039
+ readonly slices?: EnvelopeGlyphSlice[];
21040
+ /**
21041
+ * Deterministic clip-id prefix for this glyph's slices (unique across
21042
+ * every WordArt element on the page: element id + line + glyph index).
21043
+ * The template appends `-s{index}` per slice.
21044
+ */
21045
+ readonly clipIdPrefix: string;
21046
+ }
21047
+ /** Descriptor for the true two-curve envelope renderer. One `<text>` per glyph. */
21048
+ interface TextWarpGlyphDef {
21049
+ readonly strategy: 'glyph';
21050
+ readonly preset: PptxTextWarpPreset;
21051
+ readonly width: number;
21052
+ readonly height: number;
21053
+ readonly glyphs: WarpGlyph[];
21054
+ }
21055
+
21056
+ /**
21057
+ * Text-warp (WordArt) descriptor resolver for the Angular viewer.
21058
+ *
21059
+ * Angular port of:
21060
+ * packages/react/src/viewer/utils/text-warp-classifier.ts
21061
+ * packages/react/src/viewer/utils/warp-text-renderer.tsx (descriptor shape)
21062
+ *
21063
+ * `getTextWarp(element)` resolves an element's OOXML `prstTxWarp` preset into a
21064
+ * `TextWarpDef` that the Angular template can consume without any React/HTML
21065
+ * string injection. Every classified preset (`textNoShape`/`textPlain`/unknown
21066
+ * excluded) now resolves to `strategy: 'path'`: SVG `<textPath>` along a
21067
+ * curved/arc/circle/bent baseline. The `pathLines` array contains one entry
21068
+ * per paragraph with a pre-computed SVG `d` attribute; the template renders an
21069
+ * inline `<svg>` with `<defs><path>` + `<text><textPath href>`.
21070
+ *
21071
+ * `strategy: 'css'` (a whole-block CSS transform approximation applied to the
21072
+ * `div.pptx-ng-text` wrapper) is no longer produced: `warp-path-generators.ts`
21073
+ * used to expose a NARROWER, LOCAL `shouldUseSvgWarp` that deliberately
21074
+ * excluded the envelope (inflate/deflate/can) and simple (slant/fade/cascade)
21075
+ * families, so this function fell back to a CSS-transform approximation for
21076
+ * them - a cross-binding parity bug, since React and Vanilla import shared's
21077
+ * BROAD `shouldUseSvgWarp` directly and already rendered those presets as true
21078
+ * SVG textPath. `warp-path-generators.ts` now re-exports the broad shared set,
21079
+ * so every classified preset takes the `'path'` branch. `TextWarpCssDef` /
21080
+ * `'css'` stay in the `TextWarpDef` union for API stability; nothing produces
21081
+ * one any more.
21474
21082
  *
21475
- * The path-generator implementations (`getWarpPath`, `WARP_PATH_GENERATORS`,
21476
- * `WarpPathGenerator`) are mathematically identical to the framework-agnostic
21477
- * versions in `pptx-viewer-shared` (`render/text-warp.ts`), so they are
21478
- * re-exported from the vendored shared barrel rather than duplicated here.
21083
+ * Presets classified as `'none'` (textNoShape, textPlain, unknown) return
21084
+ * `undefined` so callers can skip extra rendering without an allowlist check.
21085
+ */
21086
+
21087
+ /** The four rendering strategy families. */
21088
+ type WarpCategory = WarpCategory$1;
21089
+ /**
21090
+ * Classify a warp preset into a rendering strategy category.
21479
21091
  *
21480
- * `SVG_WARP_PRESETS` / `shouldUseSvgWarp` are kept LOCAL on purpose: the Angular
21481
- * renderer (`text-warp.ts`) treats only this *narrow* set as `<textPath>`-routed
21482
- * presets and CSS-approximates the envelope/simple families. Shared's
21483
- * `SVG_WARP_PRESETS` is a broader set (every path-renderable preset), so it must
21484
- * not be substituted here; doing so would route envelope/simple presets to
21485
- * `<textPath>` and break the css-strategy routing (and its tests).
21092
+ * Returns `'none'` for unknown or empty presets so callers can safely
21093
+ * skip rendering without an explicit allowlist check. Thin alias for the
21094
+ * shared `classifyTextWarp` helper.
21486
21095
  */
21096
+ declare const getWarpCategory: (preset: string | undefined) => WarpCategory;
21487
21097
 
21488
21098
  /**
21489
- * Presets that the Angular renderer draws with SVG `<textPath>` along a
21490
- * curved/circular path. Envelope (inflate/deflate/can) and simple (slant/fade/
21491
- * cascade) presets are intentionally absent; they are CSS-approximated by
21492
- * `text-warp.ts`. This set must stay in sync with that file's `PATH_PRESETS`.
21099
+ * A single pre-computed SVG path line for one text paragraph.
21100
+ *
21101
+ * The template renders this as:
21102
+ * `<path [id]="pathId" [attr.d]="d" fill="none" />`
21103
+ * inside `<defs>`, then references it with `<textPath [attr.href]="'#'+pathId">`.
21493
21104
  */
21494
- declare const SVG_WARP_PRESETS: ReadonlySet<string>;
21495
- /** Returns `true` when the preset should use SVG `<textPath>` rendering. */
21496
- declare function shouldUseSvgWarp(preset: PptxTextWarpPreset | undefined): boolean;
21105
+ interface WarpPathLine {
21106
+ /** Unique DOM id for this `<path>` element (safe to use as `href` fragment). */
21107
+ pathId: string;
21108
+ /** SVG path data (`d` attribute). */
21109
+ d: string;
21110
+ /** The text segments that flow along this path. */
21111
+ segments: TextSegment[];
21112
+ }
21113
+ /**
21114
+ * Descriptor for SVG `<textPath>`-based warp rendering.
21115
+ *
21116
+ * One `WarpPathLine` per paragraph. The template renders an inline `<svg>`
21117
+ * covering the element bounds, defines each path in `<defs>`, then lays
21118
+ * `<text><textPath href="#pathId">` on each path.
21119
+ */
21120
+ interface TextWarpPathDef {
21121
+ readonly strategy: 'path';
21122
+ /** OOXML preset name (e.g. `'textArchUp'`). */
21123
+ readonly preset: PptxTextWarpPreset;
21124
+ /** One entry per paragraph. */
21125
+ readonly pathLines: WarpPathLine[];
21126
+ /** Element pixel width (for `<svg width>`). */
21127
+ readonly width: number;
21128
+ /** Element pixel height (for `<svg height>`). */
21129
+ readonly height: number;
21130
+ /** SVG `text-anchor` value derived from paragraph alignment. */
21131
+ readonly textAnchor: 'start' | 'middle' | 'end';
21132
+ /** SVG `<textPath startOffset>` value (e.g. `"0%"`, `"50%"`, `"100%"`). */
21133
+ readonly startOffset: string;
21134
+ /** Base font size in points from the element's text style. */
21135
+ readonly baseFontSize: number;
21136
+ /** Base font family string (already CSS-ready). */
21137
+ readonly baseFontFamily: string;
21138
+ /** Base text fill colour (hex). */
21139
+ readonly baseColor: string;
21140
+ }
21141
+ /**
21142
+ * Descriptor for CSS-transform-based warp rendering.
21143
+ *
21144
+ * The template applies `cssTransform` + `cssTransformOrigin` on the
21145
+ * `div.pptx-ng-text` wrapper (or a containing div) via `[ngStyle]`.
21146
+ */
21147
+ interface TextWarpCssDef {
21148
+ readonly strategy: 'css';
21149
+ /** OOXML preset name (e.g. `'textSlantUp'`). */
21150
+ readonly preset: PptxTextWarpPreset;
21151
+ /** CSS `transform` string (e.g. `"perspective(500px) rotateY(8deg) skewY(-4deg)"`). */
21152
+ readonly cssTransform: string;
21153
+ /** CSS `transform-origin` string (e.g. `"left center"`). */
21154
+ readonly cssTransformOrigin: string;
21155
+ }
21156
+
21157
+ /** Union of the warp rendering strategies. */
21158
+ type TextWarpDef = TextWarpPathDef | TextWarpCssDef | TextWarpGlyphDef;
21159
+ /**
21160
+ * Resolve a `PptxElement`'s text warp preset into a `TextWarpDef` descriptor,
21161
+ * or `undefined` when the element carries no warp (or the preset is `textNoShape` /
21162
+ * `textPlain` / unknown).
21163
+ *
21164
+ * @param element Any `PptxElement`. Elements without text properties always
21165
+ * return `undefined`.
21166
+ * @param fieldContext Optional OOXML field-substitution context. When given,
21167
+ * field runs (slide number, date/time, footer, ...) in the warp
21168
+ * paragraphs are resolved to their display text, mirroring
21169
+ * React's warp-text-renderer.
21170
+ * @returns A `TextWarpDef` with `strategy: 'path'` for a classified preset,
21171
+ * or `undefined` for `textNoShape`/`textPlain`/an unknown preset.
21172
+ */
21173
+ declare function getTextWarp(element: PptxElement, fieldContext?: FieldSubstitutionContext): TextWarpDef | undefined;
21497
21174
 
21498
21175
  /**
21499
21176
  * Generate an inline SVG string for an OOXML preset pattern fill.
@@ -22030,13 +21707,24 @@ declare class SmartArt3DRendererComponent implements OnDestroy {
22030
21707
  * SVG fallback branch is drawn into. Set only by the main interactive canvas.
22031
21708
  */
22032
21709
  readonly markElement: _angular_core.InputSignal<boolean>;
21710
+ /**
21711
+ * Active font-style emphasis override (Bold Flash, Bold Reveal, Underline,
21712
+ * Change Font Style/Size) for every node's caption, driven by native-
21713
+ * animation playback. Mirrors `ChartElementViewComponent`'s `textStyle`
21714
+ * threading for the 3D chart scenes: a canvas-texture caption has no DOM
21715
+ * text node the CSS-injection path (`buildTextStyleOverrideCss`) can reach,
21716
+ * so the scene's own `setTextStyle` handle method is the only way in.
21717
+ */
21718
+ readonly textStyle: _angular_core.InputSignal<TextStyleAnimationDescriptor | undefined>;
22033
21719
  private readonly canvas;
22034
21720
  private readonly containerEl;
22035
21721
  private readonly nodeEditor3d;
22036
21722
  /** `true` until the 3D scene is known to be mountable; renders the SVG fallback. */
22037
21723
  readonly useFallback: _angular_core.WritableSignal<boolean>;
22038
21724
  private readonly mountFn;
22039
- private handle;
21725
+ /** The live mounted handle, or `null` while unmounted. A signal so
21726
+ * `setTextStyle` re-applies as soon as it (or the input) changes. */
21727
+ private readonly handle;
22040
21728
  protected readonly editState: _angular_core.WritableSignal<InlineEditState | null>;
22041
21729
  /** Live draft text, updated on every input event. */
22042
21730
  protected draftText: string;
@@ -22067,7 +21755,7 @@ declare class SmartArt3DRendererComponent implements OnDestroy {
22067
21755
  private applyCommit;
22068
21756
  ngOnDestroy(): void;
22069
21757
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartArt3DRendererComponent, never>;
22070
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartArt3DRendererComponent, "pptx-smart-art-3d-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
21758
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartArt3DRendererComponent, "pptx-smart-art-3d-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; "textStyle": { "alias": "textStyle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
22071
21759
  }
22072
21760
 
22073
21761
  declare class SmartArtPreviewComponent {
@@ -23309,6 +22997,18 @@ declare class WriteBackScheduler {
23309
22997
  cancel(): void;
23310
22998
  }
23311
22999
 
23000
+ /** Resolved per-stroke data used to render a single `<path>`, circle set, or nib-mark set. */
23001
+ type InkStroke = InkGroupStrokeView;
23002
+ /**
23003
+ * Narrow `element` to `InkPptxElement` and return the resolved per-stroke
23004
+ * array, or an empty array when the element is not an ink element.
23005
+ */
23006
+ declare function buildInkStrokes(element: PptxElement): InkStroke[];
23007
+ /** Minimum SVG viewport dimension (clamp to ≥ 1 to avoid degenerate viewBox). */
23008
+ declare function inkViewBox(element: PptxElement): string;
23009
+ /** Wrapper `[ngStyle]`-compatible style for the ink container `<div>`. */
23010
+ declare function buildInkContainerStyle(element: PptxElement, zIndex: number): StyleMap;
23011
+
23312
23012
  /**
23313
23013
  * Pure (Angular-free) helpers for the `<a:clrChange>` colour-change image
23314
23014
  * effect. Kept out of the component so they can be unit-tested without TestBed
@@ -23967,6 +23667,6 @@ declare function thumbnailHeight(canvasW: number, canvasH: number, thumbW: numbe
23967
23667
  */
23968
23668
  declare function gridColumns(containerW: number, thumbW: number, gap: number, maxCols: number): number;
23969
23669
 
23970
- export { AFTER_ANIMATION_VALUES, ALIGN_OPTIONS, ANIMATION_PRESET_CATEGORIES, AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AVATAR_COLOR_SWATCHES, AXIS_LABEL_COLOR, AccessibilityPanelComponent, AccessibilityService, AccessibilityTextPanelComponent, AccountPageComponent, ActionSettingsPanelComponent, AdvancedChartEditorComponent, AiChangeOverlayComponent, AiChatPanelComponent, AiChatService, AiComposerComponent, AiFocusBarComponent, AiFocusHighlightOverlayComponent, AiHistoryMenuComponent, AiHistoryService, AiMessageListComponent, AiPanelStore, AiProposalCardComponent, AiSettingsSectionComponent, AiToolCallCardComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, AutosaveRecoveryDialogComponent, AutosaveService, BroadcastDialogComponent, CHART_EDITOR_STYLES, CURSOR_PALETTE, CanvasFitService, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointMarkerOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartElementViewComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartPartSelectionService, ChartPrimitivesComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, ChartTypeSelectorComponent, CollaborationCursorsComponent, CollaborationService, ColorChangedImageComponent, CommentMarkersOverlayComponent, CommentsPanelComponent, CommentsService, ComparePanelComponent, ConnectorRendererComponent, ConnectorTextOverlayComponent, CustomShowsComponent, DEFAULT_BOUNDS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_COLOR_SCHEME, DEFAULT_FILL_COLOR, DEFAULT_LAYOUT, DEFAULT_PALETTE$1 as DEFAULT_PALETTE, DEFAULT_PATTERN_FILL_PRESET, DEFAULT_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_STYLE, DEFAULT_TABLE_ROW_HEIGHT, DEFAULT_TEXT_COLOR, DEFAULT_VIEWER_PROFILE, DIRECTIONAL_PRESETS, DIRECTION_OPTIONS, DocumentPropertiesCardComponent, EMBEDDED_FONTS_STYLE_ID, EMPHASIS_PRESETS, ENTRANCE_PRESETS, TEMPLATES as EQUATION_TEMPLATES, EXIT_PRESETS, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportProgressModalComponent, ExportService, FieldContextService, FindBarComponent, FindReplaceBarComponent, FollowModeBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GALLERY_THEME_PRESETS, GOOGLE_WEBFONTS_LINK_ID, GRIDLINE_COLOR, GoogleWebfontsService, GradientPickerComponent, HANDOUT_OPTIONS, HeaderFooterDialogComponent, HyperlinkDialogComponent, ImagePropertiesPanelComponent, InkDrawingService, InkRendererComponent, InsertSmartArtDialogComponent, InspectorPaneHeaderComponent, InspectorPanelComponent, IsMobileService, KeepAnnotationsDialogComponent, LOCALE_CATALOG, LONG_PRESS_DURATION_MS, LONG_PRESS_MOVE_TOLERANCE_PX, LoadContentService, LocalPresencePublisher, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MOTION_PATH_COLUMNS, MediaPreviewComponent, MediaPropertiesPanelComponent, MediaRendererComponent, MediaTrimTimelineComponent, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesHandoutCardComponent, NotesPanelComponent, NotesToolbarComponent, OleRendererComponent, OutlineViewOverlayComponent, POWER_POINT_VIEWER_PROVIDERS, PPTX_OPEN_ACCEPT, PRESENTATION_OPEN_EXTENSIONS, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PRESENTER_TIMER_SEGMENT_MS, PX_PER_CM, PX_PER_INCH, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentToolbarAutoHide, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationPropertiesPanelComponent, PresentationSettingsCardComponent, PresentationSubtitleBarComponent, PresentationToolbarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, REPEAT_MODE_OPTIONS, RESIZE_HANDLES, RULER_FONT_SIZE, RULER_THICKNESS, ReadingViewOverlayComponent, RemoteSelectionOverlayComponent, RibbonAnimationGalleryComponent, RibbonAnimationsSectionComponent, RibbonArrangeSectionComponent, RibbonColorPopoverComponent, RibbonComponent, RibbonDesignSectionComponent, RibbonDrawSectionComponent, RibbonDrawingGroupComponent, RibbonEditingSectionComponent, RibbonFileSectionComponent, RibbonFontControlsComponent, RibbonHomeSectionComponent, RibbonHyperlinkButtonComponent, RibbonInsertFieldsComponent, RibbonInsertSectionComponent, RibbonMotionPathGalleryComponent, RibbonParagraphControlsComponent, RibbonPrimaryRowComponent, RibbonReviewSectionComponent, RibbonShapeExtrasComponent, RibbonSlideshowSectionComponent, RibbonTransitionsSectionComponent, RibbonViewSectionComponent, RulerGuidesService, SEQUENCE_OPTIONS, SEVERITY_GROUPS, SEVERITY_LABELS, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, DEFAULT_PALETTE as SMARTART_DEFAULT_PALETTE, PALETTES as SMARTART_PALETTES, SMART_ART_COLOR_SCHEMES, SMART_ART_STYLE_OPTIONS, SUB_ITEM_LABEL, SVG_WARP_PRESETS, SWIPE_MAX_VERTICAL_PX, SWIPE_THRESHOLD_PX, SelectionPaneComponent, SetUpSlideShowDialogComponent, SettingsAppearanceTabComponent, SettingsDialogComponent, SettingsLanguageTabComponent, ShareDialogComponent, ShortcutPanelComponent, ShowOptionsFieldsetComponent, ShowSlidesFieldsetComponent, SignatureStrippedDialogComponent, SignaturesPanelComponent, SignaturesService, SlideBackgroundCardComponent, SlideCanvasComponent, SlideDefaultInspectorComponent, SlideDiffChangesComponent, SlideDiffRowComponent, SlideDiffThumbnailsComponent, SlideSizeCardComponent, SlideSorterOverlayComponent, SlideThemeOverridePanelComponent, SlideTransitionCardComponent, SlidesPanelComponent, SmartArt3DRendererComponent, SmartArt3DService, SmartArtPreviewComponent, SmartArtPropertiesComponent, SmartArtRendererComponent, StatusBarComponent, TABLE_STRUCTURE_TOGGLES, TEXT_3D_BOTTOM_BEVEL_KEYS, TEXT_3D_TOP_BEVEL_KEYS, TEXT_DIRECTION_OPTIONS, THEME_CATALOG, TIMING_CURVE_OPTIONS, TRIGGER_OPTIONS, TYPE_LABELS, TableCellAdvancedFillComponent, TableCellFormattingComponent, TableDataEditorComponent, TablePropertiesComponent, TableRendererComponent, TableResizeOverlayComponent, TableSelectionService, TagsCardComponent, Text3DBevelSectionComponent, Text3DPanelComponent, TextAdvancedPanelComponent, ThemeEditorFieldsComponent, ThemeGalleryComponent, ThemeSelectorCardComponent, TitleBarComponent, TitleBarSearchComponent, TransitionDirectionPickerComponent, TransitionPreviewComponent, VALIGN_OPTIONS, VIEWER_THEME, VersionHistoryPanelComponent, ViewerCanvasEditingService, ViewerCollabCursorService, ViewerCollaborationSessionService, ViewerCompareService, ViewerCustomShowsService, ViewerDialogsService, ViewerDocumentPropertiesService, ViewerExportService, ViewerExtraDialogsComponent, ViewerFileIOService, ViewerFindReplaceService, ViewerFormatPainterService, ViewerInspectorPanelService, ViewerKeyboardService, ViewerMobileSheetService, ViewerPresentationModeService, ViewerThemeGalleryService, ViewerTouchGesturesService, ViewerZoomService, WEBM_MIME_CANDIDATES, WriteBackScheduler, ZERO_LINE_COLOR, ZoomNavigationService, ZoomRendererComponent, ZoomTargetService, addCategory, addCommentToList, addGradientStopPatch, addItem, addSeries, addSubItem, advanceStep, affordanceElements, aiToggleVisible, alignPatch, animationFor, animationPresetLabelKey, annotationMapToInkInserts, applyAcceptedDiff, applyAnimationPreset, applyFindReplacements, applyFormatToElement, applyMove, applyResize, asMediaElement, assignUserColor, attachShowVisibilityPause, attachTouchGestures, axisTickValues, beginNodeEdit, bevelSizePatch, boolFromEvent, bringForward, bringToFront, buildBarActions, buildBroadcastConfig, buildBroadcastViewerUrl, buildCategoryLabels, buildCellParagraphs, buildChartViewModel, buildChatLogExport, buildChatLogMarkdown, buildChromeStyle, buildClearHyperlinkPatch, buildClickGroups, buildColStyles, buildCollaborationConfig, buildComboViewModel, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildEquationElement, buildEquationSegment, buildFallbackViewModel, buildFontFaceRule, buildGradientFillCss, buildGridlinesAndLabels, buildHyperlinkPatch, buildInkContainerStyle, buildInkStrokes, buildLegend, buildMarkTooltip, buildModel3DContainerStyle, buildModel3DViewModel, buildOleActionModel, buildOleInfoRows, buildPatternFillCss, buildPieViewModel, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildRadarViewModel, buildRegionMapViewModel, buildSaveSlides, buildShareUrl, buildSmartArtInsertElement, buildSmartArtNodes, buildStockViewModel, buildSurfaceViewModel, buildTableViewModel, buildTreemapViewModel, buildTrimFragment, buildWaterfallViewModel, buildZeroLine, buildZoomContainerStyle, buildZoomViewModel, bulletIndentPx, canAddTopLevelNode, canEditSmartArtNodes, canGroupSelection, canRemoveTopLevelNode, canSetStrokeWidth, canStartBroadcast, canStartShare, canUngroupSelection, canUseClipboard, captionDisplayText, cellRunStyle, cellStyleToStyleMap, cellTdStyle, changeCountLabel, changeIcon, characterSpacingPatch, chartPreserveAspectRatio, checkFontAvailable, clampCursorPosition, clampGifDimensions, clampIndex, clampNotesFontSize, clampScale, clampStep, clearAllLocalViewerData, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, collectStoredChats, collectUsedFontFamilies, columnWidthStyle, commitNodeText, computeAlign, computeAxisTitlePrimitives, computeBarRects, computeBubbleRadius, computeCornerHandle, computeDistribute, computeDrawingViewBox, computeErrorBarPrimitives, computeFocusTargets, computeGridSpacingPx, computeHandleBoxes, computeHandoutLayout, computeIsMobile, computeIsTablet, computeLinePoints, computeLinearRegression, computePageCount, computePieLayout, computePieSlicePath, computePieSlices, computePlotLayout, computeRSquared, computeRadarPoints, computeResizeHandleBoxes, computeRotateHandleBox, computeScatterDots, computeScatterXDomain, computeSelectionBoxes, computeSingleSelected, computeSlideIndices, computeSnap, computeStackedBarRects, computeStackedValueRange, computeTrendlinePrimitives, computeValueRange, convertOmmlToMathMl, copyFormatFromElement, countAccessibilityIssues, countAnnotationStrokes, createAngularAiBridge, createCustomShow, createSwipeDismissDrag, createWebrtcBundle, createWebsocketBundle, cssObjectToStyleMap, currentColorScheme, currentLayout, currentStyle, defaultCssVars, defaultRadius, defaultThemeColors, deleteElementsByIds, deleteVersion as deleteRecoveryVersion, demoteNode, deriveModel3DBlobUrl, derivePresenceList, describeSmartArtBounds, disableGlowPatch, disableInnerShadowPatch, disableOuterShadowPatch, disableReflectionPatch, disableSoftEdgePatch, duplicateElementById, durationOf, effectsStateOf, enableGlowPatch, enableInnerShadowPatch, enableOuterShadowPatch, enableReflectionPatch, enableSoftEdgePatch, encodeGif, endShowMediaCleanup, estimatePageCount, exitPresentationFullscreen, exportAiChatLogs, extractPathPoints, eyedropperAvailable, fillColorOf, findInSlides, findOwningSlideIndex, findSlideIndexByElementId, firstVisibleIndex, fitPolynomial, fitZoom, focusTargetChips, fontMimeForFormat, fontSizeOf, forgetSessionDeck, formatAxisValue, formatBytes, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, generateCustomShowId, generatePressureCircles, generateTicks, getClrChangeParams, getContainerStyle, getDuotoneFilterDef, getEffectSoundState, getImageSrc, getLocalStorageUsageSummary, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDownloadFileName, getOleTypeColor, getOleTypeLabel, getPasswordStrength, getPatternSvg, getPlaceholderStyle, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getSessionTabId, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getSmartArtNodeBounds, getSpeechRecognitionCtor, getTextBlockStyle, getTextWarp, getTouchDistance, getWarpCategory, getWarpPath, gradientStateFromStyle, gradientStateOf, gradientStatePatch, gradientStopColorCommitPatch, gridColumns, groupIssuesBySeverity, hasAnimation, hasCopyableFormat, hasExistingLink, hasExitedFullscreen, hasGradientFill, hasPressureVariation, hasVisibleSlideAfter, headerLabel, imageDimensions, inkViewBox, insertTableElementColumn as insertColumn, insertTableElementRow as insertRow, interpolateWidth, isAudienceTab, isBold, isBrowserOpenableMime, isChildNode, isElementInteractive, isInjectableUrl, isItalic, isLegacyBinaryPresentation, isPpactionUrl, isPresenterMessage, isSigned, isSupportedPresentationFile, isTextElement, isTwoTableFocus, isUnderline, isUrlSafe, isValidRoomId, isViewportBackgroundPressTarget, isZoomActivationKey, issueTrackKey, issueTypeLabel, keyToLabel, lastVisibleIndex, latexToMathml, layoutConnectorPaints, layoutNodeLabels, linePointsToSvgString, lineSpacingPatch, loadAudienceContent, loadSessionDeck, mediaFallbackFor, mediaSurfaceFor, mergeCaptionResults, mergeDown, mergeRight, mergeSelection, mergeTablesDirective, moveElementBy, moveNodeDown, moveNodeUp, msToFrameDelayCs, narrowToCircle, narrowToPolygon, narrowToRect, newChartElement, newEquationElement, newPresetShapeElement, newShapeElement, newSmartArtElement, newTableElement, newTextElement, nextVisibleIndex, nodeBold, nodeEditBox, nodeFillColor, nodeFontColor, nodeIdFromKey, nodeItalic, nodeStyle, normalizeFontFormat, normalizeSlidesPerPage, normalizeValue, numFromEvent, ommlToMathml, ooxmlDashToCssBorderStyle, openNativeEyeDropper, overallStatus, paletteColor, parseAudienceNonce, parseNodeTextarea, partitionSlides, patchChartData, patchChartStyle, patchTableData, patchTextStyle, patternPresetOptions, pendingElementStyles, pickColorByClickFallback, pickFile, pickSupportedMimeType, planGifFrames, planVideoSegments, pointsToSvgPathD, presenceToCursors, presentationBaseName, presentationStageStyle, presenterTimerProgress, presetByLayout, presetsForCategory, pressuresToWidths, prevVisibleIndex, projectDrawingShapes, promoteNode, provideViewerTheme, radarAngle, radarRingPoints, readAsDataUrl, recordWebm, registerCrossSlideAudio, rememberSessionDeck, removeAnimation, removeCategory, removeTableElementColumn as removeColumn, removeCommentFromList, removeElementAnimation, removeGradientStopPatch, removeNode, removeTableElementRow as removeRow, removeSeries, renderToCanvas, reorderAnimationDown, reorderAnimationUp, replaceInSlides, replaceMatch, requestPresentationFullscreen, resizeElement, resolveCaptionTracks, resolveChartKind, resolveFontVariant, resolveHyperlinkHref, resolveInteractiveElementId, resolveMediaSrc, resolveOleType, resolveParagraphBullet, resolvePresenterNotes, resolveProfileInitial, resolveRegionCode, resolveRibbonCanGroup, resolveSlideAutoAdvanceMs, resolvePalette as resolveSmartArtPalette, resolveThemeCatalogEntry, resolveTransitionDuration, restoreSessionDeck, revealedElementStyles, routeOrthogonalConnector, rowStyle, rulerDragToGuidePosition, rulerHighlight, rulerStripTicks, sampleColorFromSlide, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, saveViewerProfile, savedPresentationFileName, scanAvailableFonts, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, selectValue, sendBackward, sendToBack, sequentialColorScale, serializeWriteBack, seriesColor, setAfterAnimation, setAfterAnimationColor, setAnimationEmphasis, setAnimationEntrance, setAnimationExit, setAxis, setAxisLogScale, setAxisTitleStyle, setCategoryLabel, setCellText, setColorScheme, setDataLabels, setDataPointExplosion, setDataPointFill, setDataPointLabel, setDataPointMarker, setDelay, setDirection, setDuration, setEffectSound, setElementPosition, setGridlineStyle, setLayout, setLegend, setNodeStyle, setNodeText, setRepeatCount, setRepeatMode, setSequence, setSeriesChartType, setSeriesColor, setSeriesErrorBars, setSeriesMarker, setSeriesName, setSeriesTrendline, setSeriesValue, setStyle, setTimingCurve, setTitle, setTrigger, setTriggerShapeId, shapeStylePatch, sheetAfterNavigate, shouldBlockClickAdvance, shouldUseSvgWarp, showDirectionPicker, showsTemplateAffordance, signatureCountLabel, signatureKey, signatureTimestamp, signerName, statusLabel as slideDiffStatusLabel, slideNumberOf, slidesWithReappliedLayout, smartArtNodes, paletteColour as smartArtPaletteColour, snapToGridStep, splitCursorCell, splitMergedCell, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, stringFromEvent, strokeColorOf, strokeToInkElement, strokeWidthOf, styleShadowFilter, surfaceColor, textAdvancedPatch, textAdvancedStateFromStyle, textAdvancedStateOf, textColorOf, textDirectionPatch, textFontSizePatch, textStyleOf, textStylePatch, themeStyle, themeToCssVars, thumbnailHeight, thumbnailZoom, toggleCommentResolvedInList, toggleNodeBold, toggleNodeItalic, toggleSheet, topLevelNodeCount, transformSelectedTextCase, translationsEn, updateElementById, updateGlowPatch, updateGradientStopPatch, updateInnerShadowPatch, updateOuterShadowPatch, updateReflectionPatch, vAlignPatch, validatePassword, validatePrintSettings, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, waypointsToPathD, withManualLayouts, worstStatus, zoomTargetSlideIndex };
23971
- export type { AccessibilityIssueGroup, AccountAuthConfig, ActionDescriptor, ActiveShow, AiCanvasHighlight, AiChatInitState, AiHistoryInitDeps, AiLogChat, AiLogExport, AiLogFormat, AiLogMessage, AiPanelSelectionAccessors, AlignBox, AlignMode, AnimationClickGroup, AnimationGroup, AnimationPresetCategory, AnimationPresetEntry, AnimationPresetPick, AnnotationInkInsert, AnnotationStroke, AttachTouchGesturesConfig, AuthoredRange, AwarenessLike, BarRect, Box, BridgeDeps, BroadcastConfig, BroadcastDefaults, BubbleRadiusOptions, CSSProperties, CanvasSize, CellCoord, CellParagraph, CellTextRun, ChartPartRef, ChartPartSelection, ChartSvgDef, ChartSvgPatternDef, ChartValueDrag, ChartViewModel, ClassValue, ClrChangeParams, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, CornerHandleBox, CustomShow, CustomThemeEdit, DestroyableYDoc, DiagonalBorderInfo, DistributeMode, DocumentProperties, DrawingViewBox, DuotoneFilterDef, EffectSoundState, EffectsState, EmbeddedFontStyles, EquationTemplate, EyedropperResult, FindOptions, FindResult, FocusChip, FocusSelectionInput, GifFrame, GifFramePlan, GifPlanOptions, GlowState, GradientState, GradientStop$1 as GradientStop, HandleBox, HandoutSlidesPerPage, HyperlinkDraft, InkPoint, InkStroke, InlineEditState, InnerShadowState, LegendEntry, LinePoint, LinearFit, LocalIdentity, LocalStorageUsageSummary, LocaleCatalogEntry, MobileSheetKey, Model3DViewModel, MotionPathColumn, MotionPathEntry, NodeEditBox, NotesSegmentViewModel, ObjectUrlFactory, OleActionModel, OleInfoRow, OuterShadowState, OutlineCommit, OverallSignatureStatus, PartitionedSlides, PathPoint, PieSliceGeometry, PieSliceOptions, PlotLayout, PlotLayoutOptions, PositionUpdate, PowerPointViewerAPI, PptxAiBridge, PptxAiConfig, PptxAiConnection, PptxAiContextStrategy, PptxAiElementUpdate, PptxAiToolName, PptxAiUIMessage, PptxAiWritePolicy, PresentToolbarAction, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, PresenterTimerProgress, PressureCircle, PrintColorMode, PrintHtmlDocumentOptions as PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, ProposalView, ProviderBundle, ProviderLike, RadarPoint, RecordWebmOptions, RecoveryVersion, ReflectionState, RemoteCursor, SanitizedPresence as RemotePresence, RenderedShape, ReplaceResult, ResizeHandle, ResolvedCaptionTrack, ResolvedFontVariant, ResolvedOleType, RulerUnit, SavedPresentationFormat, ScatterDot, ScatterXDomain, SelectionBox, SessionDeck, ShapeStyleChanges, ShareDefaults$1 as ShareDefaults, ShareFormFields, ShortcutReferenceItem, SignatureStatusKind, SlideInspectorTab, SlideTransitionAnimations, SmartArtInsertEvent, SmartArtNodeBounds, SnapBox, SnapGuide, SnapResult, SoftEdgeState, SpeechAlternative, SpeechRecognitionCtor, SpeechRecognitionEventLite, SpeechRecognitionLite, SpeechResult, SpeechResultList, SpeechSupportState, StagedProposal, StrokeToInkElementOpts, StyleMap, SupportedChartKind, SvgAreaGradient, SvgCircle, SvgLine, SvgPath, SvgPolygon, SvgPolyline, SvgPrimitive, SvgRect, SvgText, SwipeDismissDrag, TableBooleanFlag, TableCellSelection, TableCellViewModel, TableRowViewModel, TemplateElementsBySlideId, Text3DBevelKeys, TextAdvancedChanges, TextAdvancedState, TextStyleChanges, TextWarpCssDef, TextWarpDef, TextWarpPathDef, ThemeCatalogEntry, Tick, ToolbarActionId, TouchGestureCallbacks, TranslationKey, ValueRange, VideoPlanOptions, VideoSegmentPlan, ViewerMode, ViewerProfile, ViewerSettings, ViewerTheme, ViewerThemeColors, ZoomTranslate, ZoomViewModel };
23670
+ export { AFTER_ANIMATION_VALUES, ALIGN_OPTIONS, ANIMATION_PRESET_CATEGORIES, AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AVATAR_COLOR_SWATCHES, AXIS_LABEL_COLOR, AccessibilityPanelComponent, AccessibilityService, AccessibilityTextPanelComponent, AccountPageComponent, ActionSettingsPanelComponent, AdvancedChartEditorComponent, AiChangeOverlayComponent, AiChatPanelComponent, AiChatService, AiComposerComponent, AiFocusBarComponent, AiFocusHighlightOverlayComponent, AiHistoryMenuComponent, AiHistoryService, AiMessageListComponent, AiPanelStore, AiProposalCardComponent, AiSettingsSectionComponent, AiToolCallCardComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, AutosaveRecoveryDialogComponent, AutosaveService, BroadcastDialogComponent, CHART_EDITOR_STYLES, CURSOR_PALETTE, CanvasFitService, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointMarkerOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartElementViewComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartPartSelectionService, ChartPrimitivesComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, ChartTypeSelectorComponent, CollaborationCursorsComponent, CollaborationService, ColorChangedImageComponent, CommentMarkersOverlayComponent, CommentsPanelComponent, CommentsService, ComparePanelComponent, ConnectorRendererComponent, ConnectorTextOverlayComponent, CustomShowsComponent, DEFAULT_BOUNDS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_COLOR_SCHEME, DEFAULT_FILL_COLOR, DEFAULT_LAYOUT, DEFAULT_PALETTE$1 as DEFAULT_PALETTE, DEFAULT_PATTERN_FILL_PRESET, DEFAULT_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_STYLE, DEFAULT_TABLE_ROW_HEIGHT, DEFAULT_TEXT_COLOR, DEFAULT_VIEWER_PROFILE, DIRECTIONAL_PRESETS, DIRECTION_OPTIONS, DocumentPropertiesCardComponent, EMBEDDED_FONTS_STYLE_ID, EMPHASIS_PRESETS, ENTRANCE_PRESETS, TEMPLATES as EQUATION_TEMPLATES, EXIT_PRESETS, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportProgressModalComponent, ExportService, FieldContextService, FindBarComponent, FindReplaceBarComponent, FollowModeBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GALLERY_THEME_PRESETS, GOOGLE_WEBFONTS_LINK_ID, GRIDLINE_COLOR, GoogleWebfontsService, GradientPickerComponent, HANDOUT_OPTIONS, HeaderFooterDialogComponent, HyperlinkDialogComponent, ImagePropertiesPanelComponent, InkDrawingService, InkRendererComponent, InsertSmartArtDialogComponent, InspectorPaneHeaderComponent, InspectorPanelComponent, IsMobileService, KeepAnnotationsDialogComponent, LOCALE_CATALOG, LONG_PRESS_DURATION_MS, LONG_PRESS_MOVE_TOLERANCE_PX, LoadContentService, LocalPresencePublisher, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MOTION_PATH_COLUMNS, MediaPreviewComponent, MediaPropertiesPanelComponent, MediaRendererComponent, MediaTrimTimelineComponent, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesHandoutCardComponent, NotesPanelComponent, NotesToolbarComponent, OleRendererComponent, OutlineViewOverlayComponent, POWER_POINT_VIEWER_PROVIDERS, PPTX_OPEN_ACCEPT, PRESENTATION_OPEN_EXTENSIONS, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PRESENTER_TIMER_SEGMENT_MS, PX_PER_CM, PX_PER_INCH, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentToolbarAutoHide, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationPropertiesPanelComponent, PresentationSettingsCardComponent, PresentationSubtitleBarComponent, PresentationToolbarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, REPEAT_MODE_OPTIONS, RESIZE_HANDLES, RULER_FONT_SIZE, RULER_THICKNESS, ReadingViewOverlayComponent, RemoteSelectionOverlayComponent, RibbonAnimationGalleryComponent, RibbonAnimationsSectionComponent, RibbonArrangeSectionComponent, RibbonColorPopoverComponent, RibbonComponent, RibbonDesignSectionComponent, RibbonDrawSectionComponent, RibbonDrawingGroupComponent, RibbonEditingSectionComponent, RibbonFileSectionComponent, RibbonFontControlsComponent, RibbonHomeSectionComponent, RibbonHyperlinkButtonComponent, RibbonInsertFieldsComponent, RibbonInsertSectionComponent, RibbonMotionPathGalleryComponent, RibbonParagraphControlsComponent, RibbonPrimaryRowComponent, RibbonReviewSectionComponent, RibbonShapeExtrasComponent, RibbonSlideshowSectionComponent, RibbonTransitionsSectionComponent, RibbonViewSectionComponent, RulerGuidesService, SEQUENCE_OPTIONS, SEVERITY_GROUPS, SEVERITY_LABELS, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, DEFAULT_PALETTE as SMARTART_DEFAULT_PALETTE, PALETTES as SMARTART_PALETTES, SMART_ART_COLOR_SCHEMES, SMART_ART_STYLE_OPTIONS, SUB_ITEM_LABEL, SVG_WARP_PRESETS, SWIPE_MAX_VERTICAL_PX, SWIPE_THRESHOLD_PX, SelectionPaneComponent, SetUpSlideShowDialogComponent, SettingsAppearanceTabComponent, SettingsDialogComponent, SettingsLanguageTabComponent, ShareDialogComponent, ShortcutPanelComponent, ShowOptionsFieldsetComponent, ShowSlidesFieldsetComponent, SignatureStrippedDialogComponent, SignaturesPanelComponent, SignaturesService, SlideBackgroundCardComponent, SlideCanvasComponent, SlideDefaultInspectorComponent, SlideDiffChangesComponent, SlideDiffRowComponent, SlideDiffThumbnailsComponent, SlideSizeCardComponent, SlideSorterOverlayComponent, SlideThemeOverridePanelComponent, SlideTransitionCardComponent, SlidesPanelComponent, SmartArt3DRendererComponent, SmartArt3DService, SmartArtPreviewComponent, SmartArtPropertiesComponent, SmartArtRendererComponent, StatusBarComponent, TABLE_STRUCTURE_TOGGLES, TEXT_3D_BOTTOM_BEVEL_KEYS, TEXT_3D_TOP_BEVEL_KEYS, TEXT_DIRECTION_OPTIONS, THEME_CATALOG, TIMING_CURVE_OPTIONS, TRIGGER_OPTIONS, TYPE_LABELS, TableCellAdvancedFillComponent, TableCellFormattingComponent, TableDataEditorComponent, TablePropertiesComponent, TableRendererComponent, TableResizeOverlayComponent, TableSelectionService, TagsCardComponent, Text3DBevelSectionComponent, Text3DPanelComponent, TextAdvancedPanelComponent, ThemeEditorFieldsComponent, ThemeGalleryComponent, ThemeSelectorCardComponent, TitleBarComponent, TitleBarSearchComponent, TransitionDirectionPickerComponent, TransitionPreviewComponent, VALIGN_OPTIONS, VIEWER_THEME, VersionHistoryPanelComponent, ViewerCanvasEditingService, ViewerCollabCursorService, ViewerCollaborationSessionService, ViewerCompareService, ViewerCustomShowsService, ViewerDialogsService, ViewerDocumentPropertiesService, ViewerExportService, ViewerExtraDialogsComponent, ViewerFileIOService, ViewerFindReplaceService, ViewerFormatPainterService, ViewerInspectorPanelService, ViewerKeyboardService, ViewerMobileSheetService, ViewerPresentationModeService, ViewerThemeGalleryService, ViewerTouchGesturesService, ViewerZoomService, WEBM_MIME_CANDIDATES, WriteBackScheduler, ZERO_LINE_COLOR, ZoomNavigationService, ZoomRendererComponent, ZoomTargetService, addCategory, addCommentToList, addGradientStopPatch, addItem, addSeries, addSubItem, advanceStep, affordanceElements, aiToggleVisible, alignPatch, animationFor, animationPresetLabelKey, annotationMapToInkInserts, applyAcceptedDiff, applyAnimationPreset, applyFindReplacements, applyFormatToElement, applyMove, applyResize, asMediaElement, assignUserColor, attachShowVisibilityPause, attachTouchGestures, axisTickValues, beginNodeEdit, bevelSizePatch, boolFromEvent, bringForward, bringToFront, buildBarActions, buildBroadcastConfig, buildBroadcastViewerUrl, buildCategoryLabels, buildCellParagraphs, buildChartViewModel, buildChatLogExport, buildChatLogMarkdown, buildChromeStyle, buildClearHyperlinkPatch, buildClickGroups, buildColStyles, buildCollaborationConfig, buildComboViewModel, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildEquationElement, buildEquationSegment, buildFallbackViewModel, buildFontFaceRule, buildGradientFillCss, buildGridlinesAndLabels, buildHyperlinkPatch, buildInkContainerStyle, buildInkStrokes, buildLegend, buildLiveInkStrokeView, buildMarkTooltip, buildModel3DContainerStyle, buildModel3DViewModel, buildOleActionModel, buildOleInfoRows, buildPatternFillCss, buildPieViewModel, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildRadarViewModel, buildRegionMapViewModel, buildSaveSlides, buildShareUrl, buildSmartArtInsertElement, buildSmartArtNodes, buildStockViewModel, buildSurfaceViewModel, buildTableViewModel, buildTreemapViewModel, buildTrimFragment, buildWaterfallViewModel, buildZeroLine, buildZoomContainerStyle, buildZoomViewModel, bulletIndentPx, canAddTopLevelNode, canEditSmartArtNodes, canGroupSelection, canRemoveTopLevelNode, canSetStrokeWidth, canStartBroadcast, canStartShare, canUngroupSelection, canUseClipboard, captionDisplayText, cellRunStyle, cellStyleToStyleMap, cellTdStyle, changeCountLabel, changeIcon, characterSpacingPatch, chartPreserveAspectRatio, checkFontAvailable, clampCursorPosition, clampGifDimensions, clampIndex, clampNotesFontSize, clampScale, clampStep, clearAllLocalViewerData, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, collectStoredChats, collectUsedFontFamilies, columnWidthStyle, commitNodeText, computeAlign, computeAxisTitlePrimitives, computeBarRects, computeBubbleRadius, computeCornerHandle, computeDistribute, computeDrawingViewBox, computeErrorBarPrimitives, computeFocusTargets, computeGridSpacingPx, computeHandleBoxes, computeHandoutLayout, computeIsMobile, computeIsTablet, computeLinePoints, computeLinearRegression, computePageCount, computePieLayout, computePieSlicePath, computePieSlices, computePlotLayout, computeRSquared, computeRadarPoints, computeResizeHandleBoxes, computeRotateHandleBox, computeScatterDots, computeScatterXDomain, computeSelectionBoxes, computeSingleSelected, computeSlideIndices, computeSnap, computeStackedBarRects, computeStackedValueRange, computeTrendlinePrimitives, computeValueRange, convertOmmlToMathMl, copyFormatFromElement, countAccessibilityIssues, countAnnotationStrokes, createAngularAiBridge, createCustomShow, createSwipeDismissDrag, createWebrtcBundle, createWebsocketBundle, cssObjectToStyleMap, currentColorScheme, currentLayout, currentStyle, defaultCssVars, defaultRadius, defaultThemeColors, deleteElementsByIds, deleteVersion as deleteRecoveryVersion, demoteNode, deriveModel3DBlobUrl, derivePresenceList, describeSmartArtBounds, disableGlowPatch, disableInnerShadowPatch, disableOuterShadowPatch, disableReflectionPatch, disableSoftEdgePatch, duplicateElementById, durationOf, effectsStateOf, enableGlowPatch, enableInnerShadowPatch, enableOuterShadowPatch, enableReflectionPatch, enableSoftEdgePatch, encodeGif, endShowMediaCleanup, estimatePageCount, exitPresentationFullscreen, exportAiChatLogs, extractPathPoints, eyedropperAvailable, fillColorOf, findInSlides, findOwningSlideIndex, findSlideIndexByElementId, firstVisibleIndex, fitPolynomial, fitZoom, focusTargetChips, fontMimeForFormat, fontSizeOf, forgetSessionDeck, formatAxisValue, formatBytes, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, generateCustomShowId, generatePressureCircles, generateTicks, getClrChangeParams, getContainerStyle, getDuotoneFilterDef, getEffectSoundState, getImageSrc, getLocalStorageUsageSummary, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDownloadFileName, getOleTypeColor, getOleTypeLabel, getPasswordStrength, getPatternSvg, getPlaceholderStyle, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getSessionTabId, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getSmartArtNodeBounds, getSpeechRecognitionCtor, getTextBlockStyle, getTextWarp, getTouchDistance, getWarpCategory, getWarpPath, gradientStateFromStyle, gradientStateOf, gradientStatePatch, gradientStopColorCommitPatch, gridColumns, groupIssuesBySeverity, hasAnimation, hasCopyableFormat, hasExistingLink, hasExitedFullscreen, hasGradientFill, hasPressureVariation, hasVisibleSlideAfter, headerLabel, imageDimensions, inkViewBox, insertTableElementColumn as insertColumn, insertTableElementRow as insertRow, interpolateWidth, isAudienceTab, isBold, isBrowserOpenableMime, isChildNode, isElementInteractive, isInjectableUrl, isItalic, isLegacyBinaryPresentation, isPpactionUrl, isPresenterMessage, isSigned, isSupportedPresentationFile, isTextElement, isTwoTableFocus, isUnderline, isUrlSafe, isValidRoomId, isViewportBackgroundPressTarget, isZoomActivationKey, issueTrackKey, issueTypeLabel, keyToLabel, lastVisibleIndex, latexToMathml, layoutConnectorPaints, layoutNodeLabels, linePointsToSvgString, lineSpacingPatch, loadAudienceContent, loadSessionDeck, mediaFallbackFor, mediaSurfaceFor, mergeCaptionResults, mergeDown, mergeRight, mergeSelection, mergeTablesDirective, moveElementBy, moveNodeDown, moveNodeUp, msToFrameDelayCs, narrowToCircle, narrowToPolygon, narrowToRect, newChartElement, newEquationElement, newPresetShapeElement, newShapeElement, newSmartArtElement, newTableElement, newTextElement, nextVisibleIndex, nodeBold, nodeEditBox, nodeFillColor, nodeFontColor, nodeIdFromKey, nodeItalic, nodeStyle, normalizeFontFormat, normalizeSlidesPerPage, normalizeValue, numFromEvent, ommlToMathml, ooxmlDashToCssBorderStyle, openNativeEyeDropper, overallStatus, paletteColor, parseAudienceNonce, parseNodeTextarea, partitionSlides, patchChartData, patchChartStyle, patchTableData, patchTextStyle, patternPresetOptions, pendingElementStyles, pickColorByClickFallback, pickFile, pickSupportedMimeType, planGifFrames, planVideoSegments, pointFromPointerEvent, pointsToSvgPathD, presenceToCursors, presentationBaseName, presentationStageStyle, presenterTimerProgress, presetByLayout, presetsForCategory, pressuresToWidths, prevVisibleIndex, projectDrawingShapes, promoteNode, provideViewerTheme, radarAngle, radarRingPoints, readAsDataUrl, recordWebm, registerCrossSlideAudio, rememberSessionDeck, removeAnimation, removeCategory, removeTableElementColumn as removeColumn, removeCommentFromList, removeElementAnimation, removeGradientStopPatch, removeNode, removeTableElementRow as removeRow, removeSeries, renderToCanvas, reorderAnimationDown, reorderAnimationUp, replaceInSlides, replaceMatch, requestPresentationFullscreen, resizeElement, resolveCaptionTracks, resolveChartKind, resolveFontVariant, resolveHyperlinkHref, resolveInteractiveElementId, resolveMediaSrc, resolveOleType, resolveParagraphBullet, resolvePresenterNotes, resolveProfileInitial, resolveRegionCode, resolveRibbonCanGroup, resolveSlideAutoAdvanceMs, resolvePalette as resolveSmartArtPalette, resolveThemeCatalogEntry, resolveTransitionDuration, restoreSessionDeck, revealedElementStyles, routeOrthogonalConnector, rowStyle, rulerDragToGuidePosition, rulerHighlight, rulerStripTicks, sampleColorFromSlide, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, saveViewerProfile, savedPresentationFileName, scanAvailableFonts, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, selectValue, sendBackward, sendToBack, sequentialColorScale, serializeWriteBack, seriesColor, setAfterAnimation, setAfterAnimationColor, setAnimationEmphasis, setAnimationEntrance, setAnimationExit, setAxis, setAxisLogScale, setAxisTitleStyle, setCategoryLabel, setCellText, setColorScheme, setDataLabels, setDataPointExplosion, setDataPointFill, setDataPointLabel, setDataPointMarker, setDelay, setDirection, setDuration, setEffectSound, setElementPosition, setGridlineStyle, setLayout, setLegend, setNodeStyle, setNodeText, setRepeatCount, setRepeatMode, setSequence, setSeriesChartType, setSeriesColor, setSeriesErrorBars, setSeriesMarker, setSeriesName, setSeriesTrendline, setSeriesValue, setStyle, setTimingCurve, setTitle, setTrigger, setTriggerShapeId, shapeStylePatch, sheetAfterNavigate, shouldBlockClickAdvance, shouldUseSvgWarp, showDirectionPicker, showsTemplateAffordance, signatureCountLabel, signatureKey, signatureTimestamp, signerName, statusLabel as slideDiffStatusLabel, slideNumberOf, slidesWithReappliedLayout, smartArtNodes, paletteColour as smartArtPaletteColour, snapToGridStep, splitCursorCell, splitMergedCell, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, stringFromEvent, strokeColorOf, strokeToInkElement, strokeWidthOf, styleShadowFilter, surfaceColor, textAdvancedPatch, textAdvancedStateFromStyle, textAdvancedStateOf, textColorOf, textDirectionPatch, textFontSizePatch, textStyleOf, textStylePatch, themeStyle, themeToCssVars, thumbnailHeight, thumbnailZoom, toggleCommentResolvedInList, toggleNodeBold, toggleNodeItalic, toggleSheet, topLevelNodeCount, transformSelectedTextCase, translationsEn, updateElementById, updateGlowPatch, updateGradientStopPatch, updateInnerShadowPatch, updateOuterShadowPatch, updateReflectionPatch, vAlignPatch, validatePassword, validatePrintSettings, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, waypointsToPathD, withManualLayouts, worstStatus, zoomTargetSlideIndex };
23671
+ export type { AccessibilityIssueGroup, AccountAuthConfig, ActionDescriptor, ActiveShow, AiCanvasHighlight, AiChatInitState, AiHistoryInitDeps, AiLogChat, AiLogExport, AiLogFormat, AiLogMessage, AiPanelSelectionAccessors, AlignBox, AlignMode, AnimationClickGroup, AnimationGroup, AnimationPresetCategory, AnimationPresetEntry, AnimationPresetPick, AnnotationInkInsert, AnnotationStroke, AttachTouchGesturesConfig, AuthoredRange, AwarenessLike, BarRect, Box, BridgeDeps, BroadcastConfig, BroadcastDefaults, BubbleRadiusOptions, CSSProperties, CanvasSize, CellCoord, CellParagraph, CellTextRun, ChartPartRef, ChartPartSelection, ChartSvgDef, ChartSvgPatternDef, ChartValueDrag, ChartViewModel, ClassValue, ClrChangeParams, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, CornerHandleBox, CustomShow, CustomThemeEdit, DestroyableYDoc, DiagonalBorderInfo, DistributeMode, DocumentProperties, DrawingViewBox, DuotoneFilterDef, EffectSoundState, EffectsState, EmbeddedFontStyles, EquationTemplate, EyedropperResult, FindOptions, FindResult, FocusChip, FocusSelectionInput, GifFrame, GifFramePlan, GifPlanOptions, GlowState, GradientState, GradientStop$1 as GradientStop, HandleBox, HandoutSlidesPerPage, HyperlinkDraft, InkPoint, InkStroke, InkStrokeView, InlineEditState, InnerShadowState, LegendEntry, LinePoint, LinearFit, LocalIdentity, LocalStorageUsageSummary, LocaleCatalogEntry, MobileSheetKey, Model3DViewModel, MotionPathColumn, MotionPathEntry, NodeEditBox, NotesSegmentViewModel, ObjectUrlFactory, OleActionModel, OleInfoRow, OuterShadowState, OutlineCommit, OverallSignatureStatus, PartitionedSlides, PathPoint, PieSliceGeometry, PieSliceOptions, PlotLayout, PlotLayoutOptions, PositionUpdate, PowerPointViewerAPI, PptxAiBridge, PptxAiConfig, PptxAiConnection, PptxAiContextStrategy, PptxAiElementUpdate, PptxAiToolName, PptxAiUIMessage, PptxAiWritePolicy, PresentToolbarAction, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, PresenterTimerProgress, PressureCircle, PrintColorMode, PrintHtmlDocumentOptions as PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, ProposalView, ProviderBundle, ProviderLike, RadarPoint, RecordWebmOptions, RecoveryVersion, ReflectionState, RemoteCursor, SanitizedPresence as RemotePresence, RenderedShape, ReplaceResult, ResizeHandle, ResolvedCaptionTrack, ResolvedFontVariant, ResolvedOleType, RulerUnit, SavedPresentationFormat, ScatterDot, ScatterXDomain, SelectionBox, SessionDeck, ShapeStyleChanges, ShareDefaults$1 as ShareDefaults, ShareFormFields, ShortcutReferenceItem, SignatureStatusKind, SlideInspectorTab, SlideTransitionAnimations, SmartArtInsertEvent, SmartArtNodeBounds, SnapBox, SnapGuide, SnapResult, SoftEdgeState, SpeechAlternative, SpeechRecognitionCtor, SpeechRecognitionEventLite, SpeechRecognitionLite, SpeechResult, SpeechResultList, SpeechSupportState, StagedProposal, StrokeToInkElementOpts, StyleMap, SupportedChartKind, SvgAreaGradient, SvgCircle, SvgLine, SvgPath, SvgPolygon, SvgPolyline, SvgPrimitive, SvgRect, SvgText, SwipeDismissDrag, TableBooleanFlag, TableCellSelection, TableCellViewModel, TableRowViewModel, TemplateElementsBySlideId, Text3DBevelKeys, TextAdvancedChanges, TextAdvancedState, TextStyleChanges, TextWarpCssDef, TextWarpDef, TextWarpPathDef, ThemeCatalogEntry, Tick, ToolbarActionId, TouchGestureCallbacks, TranslationKey, ValueRange, VideoPlanOptions, VideoSegmentPlan, ViewerMode, ViewerProfile, ViewerSettings, ViewerTheme, ViewerThemeColors, ZoomTranslate, ZoomViewModel };
23972
23672
  //# sourceMappingURL=pptx-angular-viewer.d.ts.map