pptx-angular-viewer 3.18.0 → 3.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import * as pptx_viewer_core from 'pptx-viewer-core';
2
- import { PptxThemePreset, PptxSlide, PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartLegendTextStyle, PptxChartData, PptxChartDataLabelPosition, PptxChartType, PptxElementAnimation, PptxAnimationPreset, PptxAnimationSequence, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, PptxAfterAnimationAction, ParsedTableStyleMap, PptxThemeColorScheme, PptxThemeFontScheme, TablePptxElement, PptxSection, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, PptxSlideTransition, SmartArtLayoutType, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PptxThemeColorRef, PlaceholderDefaults, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, ElementActionType, InkPptxElement, PptxComment, PptxChartBarDirection, MasterViewTab, MediaPptxElement, PptxTheme, PptxHandler, PptxData, PptxHandlerSaveOptions, PptxModernCommentAuthor, PptxCommentMention, PptxHeaderFooter, PptxCustomShow, PptxSlideMaster, PptxNotesMaster, PptxHandoutMaster, PptxPresentationProperties, PptxViewProperties, PptxCoreProperties, PptxAppProperties, PptxThemeOption, PptxCustomProperty, PptxTagCollection, ParsedSignature, PptxSaveFormat, PptxTableCell, PptxTableCellStyle, PptxTableRow, PptxTableData, SvgExportOptions, PptxGridSpacing, RenderedNode, RenderedCircleNode, RenderedPolygonNode, RenderedRectNode, SmartArtLayoutResult, Model3DPptxElement, ZoomPptxElement, ChartPptxElement, SmartArtPptxElement, PptxAnimationTimelineAnchor, MaterialPresetType, Text3DStyle, BevelPresetType, PptxBar3DShape, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartMarker, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, PptxTextStyleLevels, SignatureStatus, ElementAction, PptxImageEffects, MediaBookmark, ColorMapAliasKey, ChartAxisEdit, ChartDataPointLabelEdit, PptxChartLegendPosition, PptxChartStyle, ChartAxisTitleStyleEdit, PptxChartMarkerSymbol, ChartGridlineStyleEdit, PptxSmartArtNode, PptxSmartArtNodeStyle, PptxLayoutPreview, MediaCaptionTrack, PptxMediaType } from 'pptx-viewer-core';
2
+ import { PptxThemePreset, PptxElement, PptxSlide, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartLegendTextStyle, PptxChartData, PptxChartDataLabelPosition, PptxChartType, PptxElementAnimation, PptxAnimationPreset, PptxAnimationSequence, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, PptxAfterAnimationAction, ParsedTableStyleMap, PptxThemeColorScheme, PptxThemeFontScheme, TablePptxElement, PptxSection, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, PptxSlideTransition, SmartArtLayoutType, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PptxThemeColorRef, PlaceholderDefaults, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, ElementActionType, InkPptxElement, PptxComment, PptxChartBarDirection, ImagePptxElement, MasterViewTab, MediaPptxElement, PptxTheme, PptxHandler, PptxData, PptxHandlerSaveOptions, PptxModernCommentAuthor, PptxCommentMention, PptxHeaderFooter, PptxCustomShow, PptxSlideMaster, PptxNotesMaster, PptxHandoutMaster, PptxPresentationProperties, PptxViewProperties, PptxCoreProperties, PptxAppProperties, PptxThemeOption, PptxCustomProperty, PptxTagCollection, ParsedSignature, PptxSaveFormat, PptxTableCell, PptxTableCellStyle, PptxTableRow, PptxTableData, SvgExportOptions, PptxGridSpacing, RenderedNode, RenderedCircleNode, RenderedPolygonNode, RenderedRectNode, SmartArtLayoutResult, Model3DPptxElement, ZoomPptxElement, ChartPptxElement, SmartArtPptxElement, PptxAnimationTimelineAnchor, MaterialPresetType, Text3DStyle, BevelPresetType, PptxBar3DShape, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartMarker, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, PptxTextStyleLevels, SignatureStatus, ElementAction, PptxImageEffects, MediaBookmark, ColorMapAliasKey, ChartAxisEdit, ChartDataPointLabelEdit, PptxChartLegendPosition, PptxChartStyle, ChartAxisTitleStyleEdit, PptxChartMarkerSymbol, ChartGridlineStyleEdit, PptxSmartArtNode, PptxSmartArtNodeStyle, PptxLayoutPreview, MediaCaptionTrack, PptxMediaType } from 'pptx-viewer-core';
3
3
  export { GroupResult, SWITCHABLE_LAYOUT_TYPES, UngroupResult, addSmartArtNode, addSmartArtNodeAsChild, chartDataChangeType, chartDataUpdatePoint, demoteSmartArtNode, formatAutoNumberMarker as formatAutoNumber, groupElements, promoteSmartArtNode, removeSmartArtNode, reorderSmartArtNode, switchSmartArtLayout, ungroupElements, updateSmartArtNodeText } from 'pptx-viewer-core';
4
4
  import * as _angular_core from '@angular/core';
5
5
  import { Signal, WritableSignal, OnDestroy, OnInit, AfterViewInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
@@ -177,13 +177,16 @@ declare function resolveThemeCatalogEntry(key: string | undefined, catalog?: rea
177
177
  */
178
178
  declare const GALLERY_THEME_PRESETS: readonly PptxThemePreset[];
179
179
 
180
- /**
181
- * Framework-agnostic public types shared by the viewer bindings.
182
- *
183
- * These were duplicated in the React (`types-ui.ts`) and Vue (`viewer/types.ts`)
184
- * packages; this is the canonical copy. Each binding layers its own
185
- * framework-specific prop/event/handle types on top of these.
186
- */
180
+ /** A shallow property patch for a top-level element on an ordinary slide. */
181
+ interface ElementUpdate {
182
+ slideId: string;
183
+ elementId: string;
184
+ patch: Partial<PptxElement>;
185
+ }
186
+ interface ElementUpdateOptions {
187
+ /** Optional description for the undo entry. */
188
+ label?: string;
189
+ }
187
190
 
188
191
  /** Canvas dimensions in pixels. */
189
192
  interface CanvasSize {
@@ -280,6 +283,8 @@ interface PowerPointViewerAPI {
280
283
  * Accepts a `Partial<PptxElement>` patch (e.g. `{ x: 100, width: 300 }`).
281
284
  */
282
285
  updateElement: (elementId: string, updates: Partial<PptxElement>) => void;
286
+ /** Atomically patch ordinary slide elements as one independent undo step. Rejects invalid batches. */
287
+ updateElements: (updates: readonly ElementUpdate[], options?: ElementUpdateOptions) => Promise<void>;
283
288
  /** Delete elements by their IDs from the active slide. */
284
289
  deleteElements: (elementIds: string[]) => void;
285
290
  /**
@@ -540,6 +545,59 @@ declare function buildPatternFillCss(style: ShapeStyle | undefined): {
540
545
  /** A neutral CSS map (framework `CSSProperties` are structurally compatible). */
541
546
  type CssStyleMap = Record<string, string | number>;
542
547
 
548
+ /**
549
+ * Per-run inline-style builder for rendered text runs (framework-agnostic).
550
+ *
551
+ * Maps a `TextSegment`'s `TextStyle` onto a neutral CSS record that every
552
+ * binding applies to its own run span. React included: its `text-segment-render`
553
+ * now starts from this record and re-resolves only the handful of properties it
554
+ * derives more precisely (colour/size/family fallbacks, PANOSE substitution,
555
+ * the `@baseline` percentage, the `@kern` threshold, per-run BiDi), each of
556
+ * which is documented there as a gap in this module rather than a preference.
557
+ * Split out of `text-paragraphs` to keep each module focused and small; this
558
+ * module itself later split its letter-spacing/split helpers into
559
+ * `text-run-spacing.ts`, its hollow-text fill decision into
560
+ * `text-run-hollow.ts`, and its nested-decoration / underline-variant helpers
561
+ * into `text-run-decoration.ts`, for the same reason.
562
+ */
563
+
564
+ /** A plain CSS style map (keys are CSS properties; binding-agnostic). */
565
+ type RunStyle = Record<string, string | number>;
566
+
567
+ /**
568
+ * Per-script (`a:ea` / `a:cs` / `a:sym`) font fallback for one run, as a pure
569
+ * decision function every binding maps onto its own nested-span markup.
570
+ *
571
+ * OOXML authors up to four typefaces per run (`a:latin`, `a:ea`, `a:cs`,
572
+ * `a:sym`), and PowerPoint paints each Unicode script category in ITS OWN
573
+ * font, not the run's `a:latin` face. This was React-only
574
+ * (`renderScriptAwareText` in `text-segment-render.tsx`): the other four
575
+ * bindings applied only `a:latin` to the whole run, so CJK, Arabic, Hebrew and
576
+ * Thai text rendered in the wrong typeface (or the browser's serif default)
577
+ * in Vue, Angular, Svelte and Vanilla.
578
+ *
579
+ * `resolveScriptFontSet` resolves the four faces (PANOSE-substituted, with the
580
+ * run falling back to the text body's own declaration); `splitRunByScriptFont`
581
+ * segments a run's text by script and returns, per piece, the CSS a binding
582
+ * spreads onto a nested span. A binding does nothing but map that descriptor:
583
+ * render `text` plain when a piece carries no `style` override, or a nested
584
+ * span with `style` when it does.
585
+ */
586
+
587
+ /** One script-tagged piece of a run's text, ready for a binding's nested span. */
588
+ interface ScriptFontPiece {
589
+ text: string;
590
+ /**
591
+ * CSS for a nested span wrapping `text`, or `undefined` when this piece
592
+ * needs no span at all (its script's font equals the run's own, so plain
593
+ * text renders identically). When present it carries the `fontFamily`
594
+ * override plus the run's own decoration subset, repeated because
595
+ * `text-decoration-*` does not inherit into a nested span (see
596
+ * `nestedTextDecorationStyle`).
597
+ */
598
+ style?: RunStyle;
599
+ }
600
+
543
601
  /**
544
602
  * `a:reflection` compositing: a real, cross-browser mirrored copy of an
545
603
  * element rather than `-webkit-box-reflect`.
@@ -2899,6 +2957,25 @@ declare function computeDistribute(boxes: readonly AlignBox[], mode: DistributeM
2899
2957
  /** The eight resize handles, named by compass direction. */
2900
2958
  type ResizeHandleId = 'nw' | 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w';
2901
2959
 
2960
+ type HitAreaStyle = Partial<Record<'top' | 'right' | 'bottom' | 'left', string>> & {
2961
+ position: 'absolute';
2962
+ pointerEvents: 'auto';
2963
+ inset: string;
2964
+ };
2965
+ /**
2966
+ * Bound an invisible resize target halfway toward its neighboring anchors.
2967
+ * The visible, focusable button stays pointer-events:none; this child owns
2968
+ * presses and bubbles them to its existing button handlers. Outward padding
2969
+ * stays intact, and targets only share space when their usual areas overlap.
2970
+ *
2971
+ * Inherit selection width/height in the button's coordinate space. React's
2972
+ * inverse-scaled buttons also inherit --pptx-handle-inverse-scale; other
2973
+ * bindings leave it at 1. The default -1px inset includes a button's border;
2974
+ * an expanded target can override --pptx-handle-hit-inset without changing
2975
+ * the partition. CSS keeps these bounds live during zoom and resize previews.
2976
+ */
2977
+ declare function getResizeHandleHitAreaStyle(handle: ResizeHandleId): HitAreaStyle;
2978
+
2902
2979
  /** The `cx`/`cy` shape of `PptxGridSpacing`. Only `cx` (horizontal spacing) is
2903
2980
  * used: PowerPoint's grid is square, and every binding's snap step is a
2904
2981
  * single number applied to both axes. */
@@ -3512,6 +3589,375 @@ declare function bulletIndentPx(level: number | undefined): number;
3512
3589
  type ParagraphBulletKind = 'bullet' | 'numbered' | 'none';
3513
3590
  /** The list state of several paragraphs: `'mixed'` when they disagree. */
3514
3591
  type ElementBulletKind = ParagraphBulletKind | 'mixed';
3592
+ /** Only text properties change; unsupported elements return an empty patch. */
3593
+ interface ElementBulletPatch {
3594
+ textSegments?: TextSegment[];
3595
+ textStyle?: TextStyle;
3596
+ }
3597
+
3598
+ /**
3599
+ * Per-run facts a rendered paragraph carries besides its text and CSS: the
3600
+ * run's HYPERLINK and its inline EQUATION (framework-agnostic).
3601
+ *
3602
+ * Both are authored on the run (`a:r > a:rPr > a:hlinkClick` /
3603
+ * `a:hlinkMouseOver`, and an `m:oMath` sibling that core stamps onto its own
3604
+ * segment), and both need a different ELEMENT around the run - an `<a>` and a
3605
+ * MathML host - rather than a different style, which is why they are modelled
3606
+ * separately from {@link RunStyle} instead of being folded into it.
3607
+ *
3608
+ * Before this existed, `buildParagraphs` returned `{ text, style }` only, so a
3609
+ * hyperlinked run rendered as plain text in Vue, Svelte and Vanilla (the link
3610
+ * was silently dropped) and Angular compensated with a text-prefix walk that
3611
+ * re-attached the metadata to shared's runs by matching their characters. This
3612
+ * module is that walk's replacement: resolve once, in the builder, for all five.
3613
+ */
3614
+
3615
+ /** A run's resolved hyperlink target. */
3616
+ interface RunHyperlink {
3617
+ /**
3618
+ * The URL to hand a click handler. For an internal `ppaction://hlinksldjump`
3619
+ * the resolved slide index is appended as a `slideIndex` query parameter, so
3620
+ * the target survives a callback whose only argument is the URL (see
3621
+ * `parsePpactionUrl`, which reads it back off).
3622
+ */
3623
+ url: string;
3624
+ /**
3625
+ * A safe, renderable `href` for a plain `<a>`, or `undefined` when the target
3626
+ * is an internal `ppaction://` action or fails the URL safety check. A
3627
+ * binding with no click handler renders the run as text in that case, which
3628
+ * is what every binding did for every link before this field existed.
3629
+ */
3630
+ href?: string;
3631
+ /** `a:hlinkClick/@tooltip`, for the anchor's `title`. */
3632
+ tooltip?: string;
3633
+ /**
3634
+ * `<a target>` for a real (non-`ppaction://`) hyperlink, from
3635
+ * `a:hlinkClick/@tgtFrame` when authored, else `_blank` (every binding's
3636
+ * pre-existing hardcoded default). Only meaningful alongside {@link href}.
3637
+ */
3638
+ target?: string;
3639
+ /** `<a rel>` paired with {@link target} (see `resolveHyperlinkTargetAttrs`). */
3640
+ rel?: string;
3641
+ /** Resolved target slide for an internal slide jump. */
3642
+ targetSlideIndex?: number;
3643
+ /**
3644
+ * True when the target came from `a:hlinkMouseOver` rather than
3645
+ * `a:hlinkClick`: PowerPoint follows it on hover, not on click, so a binding
3646
+ * that renders a plain anchor should not make it look clickable.
3647
+ */
3648
+ onHover?: boolean;
3649
+ }
3650
+ /** An inline equation run (`m:oMath`), rendered as MathML rather than text. */
3651
+ interface RunEquation {
3652
+ /** The raw OMML node, for `convertOmmlToMathMl`. */
3653
+ xml: Record<string, unknown>;
3654
+ /** Display number for a numbered equation, without its parentheses. */
3655
+ number?: string;
3656
+ }
3657
+
3658
+ /**
3659
+ * `text-run-ruby`: the phonetic guide (`a:ruby`, furigana / pinyin) as a
3660
+ * framework-neutral run field.
3661
+ *
3662
+ * Core has always parsed a ruby run in full (`rubyText`, `rubyAlignment`,
3663
+ * `rubyFontSize`, `rubyStyle`) and has always saved it back, but the annotation
3664
+ * was RENDERED in React alone: `buildParagraphs` never read `seg.rubyText`, so
3665
+ * the guide simply vanished in Vue, Angular, Svelte and Vanilla (the base text
3666
+ * still painted, which is why nothing looked broken).
3667
+ *
3668
+ * This module resolves the annotation into a `{ text, style }` descriptor that
3669
+ * rides the run, so each binding renders the same `<ruby>` / `<rt>` markup from
3670
+ * the same decision.
3671
+ *
3672
+ * @module render/text-run-ruby
3673
+ */
3674
+
3675
+ /** A run's phonetic guide, ready to render as `<rt>` above the base text. */
3676
+ interface RunRuby {
3677
+ /** The annotation itself (`a:ruby/a:rt`), e.g. the furigana reading. */
3678
+ text: string;
3679
+ /** Inline style for the `<rt>` element (size, family, alignment, colour). */
3680
+ style: RunStyle;
3681
+ }
3682
+
3683
+ /**
3684
+ * CSS-ready tab layout for one run's text, built on the pure positioning maths
3685
+ * in `text-tab-layout.ts`.
3686
+ *
3687
+ * `buildRunTabLines` is the "pure decision function" every binding maps
3688
+ * mechanically onto its own template: it splits a run's text on `\n`, lays out
3689
+ * each line's `\t`-separated pieces against the paragraph's tab stops, and
3690
+ * returns, per piece, CSS a binding spreads verbatim onto a nested span (plus
3691
+ * a ready-filled leader string for the gap before it). A binding renders
3692
+ * nothing but `pieces.map(...)`; the alignment/leader decision itself never
3693
+ * has to be reimplemented per framework.
3694
+ */
3695
+
3696
+ /** One tabbed-line piece, ready to spread onto a binding's own span element. */
3697
+ interface TabbedRunPiece {
3698
+ text: string;
3699
+ /**
3700
+ * CSS for the span that wraps `text`: inline-block layout, this run's own
3701
+ * decoration repeated, and this piece's own PowerPoint advance-width
3702
+ * correction as `letter-spacing` (see `buildTabbedLine`). The piece is
3703
+ * nested inside the run's own span, and neither property inherits the way a
3704
+ * caller would want: `text-decoration-*` does not inherit into a nested
3705
+ * element at all (an ancestor's underline is drawn *through* its
3706
+ * descendants, but each descendant still computes `none` of its own), so a
3707
+ * caller passes the run's decoration subset (`nestedTextDecorationStyle`) to
3708
+ * have it repeated here; `letter-spacing` DOES inherit, which is exactly why
3709
+ * this piece sets it explicitly rather than only when non-zero - the run's
3710
+ * container span carries its own (wrong, whole-text) correction that would
3711
+ * otherwise leak in.
3712
+ */
3713
+ style: RunStyle;
3714
+ /** CSS for the leader-fill span preceding this piece, or `undefined` when there is no gap to fill. */
3715
+ leaderStyle?: RunStyle;
3716
+ /** Leader glyphs sized to fill `leaderStyle`'s width. Present only alongside `leaderStyle`. */
3717
+ leaderText?: string;
3718
+ /**
3719
+ * `a:rPr/@u="words"` per-word/gap sub-pieces of THIS tab piece's own text
3720
+ * (see `splitWordsForUnderline`), present only when the run's underline is
3721
+ * `words`. A tab-separated piece is otherwise rendered as a single span
3722
+ * (`text` + `style`), which underlines it continuously - correct for a
3723
+ * one-word piece, but wrong for a piece like `"Hello World"` between two tab
3724
+ * stops, which needs a gap under the space. A binding renders one SIBLING
3725
+ * span per entry IN PLACE OF the piece's single `text` span: each entry's
3726
+ * `style` is the piece's own `style` (the same inline-block layout and
3727
+ * advance-width correction, so the line measures exactly as before), with
3728
+ * the underline stripped on a gap entry. They must be siblings, not spans
3729
+ * nested inside the piece span: an ancestor's underline is drawn through
3730
+ * every inline descendant, so a nested gap could not lose it. `text`/`style`
3731
+ * stay the continuous-underline fallback for a binding that does not
3732
+ * render this field.
3733
+ */
3734
+ words?: Array<{
3735
+ text: string;
3736
+ style: RunStyle;
3737
+ }>;
3738
+ }
3739
+ /** One `\n`-split line of a run's tabbed text. */
3740
+ interface TabbedLineRun {
3741
+ pieces: TabbedRunPiece[];
3742
+ }
3743
+
3744
+ /**
3745
+ * The two descriptor types `buildParagraphs` (in `text-paragraphs.ts`) returns:
3746
+ * a single rendered run (`ParagraphRun`) and a rendered paragraph of them
3747
+ * (`RenderParagraph`). Every one of the five bindings imports these two types
3748
+ * from the package barrel to type its own run/paragraph components, so they
3749
+ * live in their own module rather than inside the (much longer) builder that
3750
+ * produces them - keeping `text-paragraphs.ts` itself under the repo's
3751
+ * ~300 LOC guideline without hiding the split behind a re-export shim: the
3752
+ * barrel (`render/index.ts`) exports this module directly, so no importer
3753
+ * (inside `pptx-viewer-shared` or across the five bindings) has to change its
3754
+ * import path, since every one of them already goes through the package root
3755
+ * (`pptx-viewer-shared`), never a deep `.../text-paragraphs` path.
3756
+ */
3757
+
3758
+ /** A single rendered run within a paragraph. */
3759
+ interface ParagraphRun {
3760
+ text: string;
3761
+ style: RunStyle;
3762
+ /**
3763
+ * The run's hyperlink (`a:hlinkClick` / `a:hlinkMouseOver`), when it has one.
3764
+ * A binding renders the run inside an `<a href>` when {@link RunHyperlink.href}
3765
+ * is set, and routes {@link RunHyperlink.url} to its click handler otherwise
3766
+ * (internal `ppaction://` slide jumps).
3767
+ */
3768
+ hyperlink?: RunHyperlink;
3769
+ /**
3770
+ * An inline equation (`m:oMath`) this run renders INSTEAD of `text`, which is
3771
+ * empty for it. Emitted in the run sequence so the maths lands at its
3772
+ * authored position between the runs around it.
3773
+ */
3774
+ equation?: RunEquation;
3775
+ /**
3776
+ * The run's phonetic guide (`a:ruby`: furigana, pinyin, bopomofo), when it
3777
+ * has one. A binding renders `<ruby>{text}<rt style>{ruby.text}</rt></ruby>`;
3778
+ * a run carrying one is never split per word, so the annotation appears once
3779
+ * over the whole base run.
3780
+ *
3781
+ * Core parsed and saved ruby from the start, but `buildParagraphs` never read
3782
+ * it, so the annotation rendered in React alone.
3783
+ */
3784
+ ruby?: RunRuby;
3785
+ /**
3786
+ * Index of the `textSegments` entry (of the override list when one was
3787
+ * supplied) this run was built from.
3788
+ *
3789
+ * Shared splits one authored run into several per-word runs for PowerPoint's
3790
+ * metric tracking, so this is many-to-one. It is the seam a binding uses to
3791
+ * reach the facts the neutral model does not carry - React's find-match
3792
+ * highlights, per-script font spans, tab stops and ruby all key off the
3793
+ * originating segment - without regrouping the segments itself and drifting
3794
+ * from the grouping here.
3795
+ */
3796
+ segmentIndex?: number;
3797
+ /**
3798
+ * Offset of this run's `text` within its segment's RENDERED text (after field
3799
+ * substitution), so a caller holding per-segment character offsets can map
3800
+ * them onto the split runs.
3801
+ */
3802
+ charStart?: number;
3803
+ /**
3804
+ * Per-script (`a:ea`/`a:cs`/`a:sym`) font-fallback pieces for this run's
3805
+ * text, when a script it contains needs a font distinct from its own. A
3806
+ * binding renders these as nested spans in place of `text` (see
3807
+ * `text-script-fonts.ts`); absent for the common single-font case.
3808
+ */
3809
+ scriptRuns?: ScriptFontPiece[];
3810
+ /**
3811
+ * Measured tab-stop layout for this run's text, present when it contains an
3812
+ * authored `\t` and the paragraph declares explicit tab stops. A binding
3813
+ * renders these lines/pieces in place of `text`, honouring per-stop
3814
+ * alignment and leader glyphs a plain CSS `tab-size` cannot express (see
3815
+ * `text-tab-run-build.ts`). Absent for the common no-tab case.
3816
+ */
3817
+ tabLines?: TabbedLineRun[];
3818
+ /**
3819
+ * `a:rPr/@u="words"` word/gap pieces of a RUBY run's base text, present only
3820
+ * when such a run's underline is `words` (the ordinary per-word split emits
3821
+ * sibling runs instead; a tab piece carries its own `words`). Same shape as
3822
+ * `scriptRuns` and rendered the same way, in place of `text`: a word entry
3823
+ * carries the decoration for its own span, a gap entry is bare text. The
3824
+ * run's own `style` has the underline stripped when this is set (see
3825
+ * `paragraph-run-build.ts`).
3826
+ */
3827
+ underlineWordPieces?: ScriptFontPiece[];
3828
+ /**
3829
+ * `a:reflection` mirrored-sibling wrapper style for this run (the text-run
3830
+ * counterpart of a shape/picture's `ComputedEffectStyle.reflection`), or
3831
+ * `undefined` for the common no-reflection case. A binding renders a sibling
3832
+ * node just below the run's own, painted with the same text, positioned and
3833
+ * masked by this style - see `render/reflection.ts`'s
3834
+ * `getTextReflectionWrapperStyle`.
3835
+ */
3836
+ reflection?: ReflectionWrapperStyle;
3837
+ }
3838
+ /** A rendered paragraph: runs plus resolved bullet + hanging-indent metadata. */
3839
+ interface RenderParagraph {
3840
+ runs: ParagraphRun[];
3841
+ /** Bullet glyph / number to render before the runs (or `undefined`). */
3842
+ bulletMarker?: string;
3843
+ /** Picture marker rendered before runs, or fallback metadata when unresolved. */
3844
+ bulletPicture?: PictureBulletMarker;
3845
+ /** Inline style for the bullet marker (font / size / colour). */
3846
+ bulletStyle: RunStyle;
3847
+ /** `margin-left` in px for the whole paragraph (hanging-indent layout). */
3848
+ marginLeftPx?: number;
3849
+ /** `text-indent` in px (first-line / hanging indent). */
3850
+ textIndentPx?: number;
3851
+ /**
3852
+ * Per-paragraph `line-height` from this paragraph's own `a:pPr > a:lnSpc`.
3853
+ * A unitless multiplier for proportional spacing (`a:spcPct`) or a `"<n>pt"`
3854
+ * string for exact spacing (`a:spcPts`). Undefined when the paragraph does
3855
+ * not override spacing (binding keeps the body-level line-height).
3856
+ */
3857
+ lineHeight?: number | string;
3858
+ /** `margin-top` in px from this paragraph's `a:pPr > a:spcBef` (space before). */
3859
+ spaceBeforePx?: number;
3860
+ /** `margin-bottom` in px from this paragraph's `a:pPr > a:spcAft` (space after). */
3861
+ spaceAfterPx?: number;
3862
+ /**
3863
+ * `font-size` in px to set on the paragraph element so its CSS line boxes
3864
+ * are built from its OWN runs rather than the text body's default size.
3865
+ * Undefined when the paragraph already matches the body default.
3866
+ *
3867
+ * See `resolveParagraphStrutFontSize` for why this is needed: without it a
3868
+ * paragraph of small runs inside a larger-defaulting body is laid out on
3869
+ * too-tall lines and overflows its shape.
3870
+ */
3871
+ strutFontSizePx?: number;
3872
+ /**
3873
+ * True when the paragraph has no runs and no bullet: an authored blank line
3874
+ * (`<a:p><a:endParaRPr/></a:p>`).
3875
+ *
3876
+ * PowerPoint gives such a paragraph a full line box, which is how decks
3877
+ * space a heading away from the bullet list under it. A binding must render
3878
+ * something with height for it (a `<br>`), or the gap disappears and the
3879
+ * block reads as one dense run of text (issue #131, slides 13-14).
3880
+ */
3881
+ isEmpty?: boolean;
3882
+ /**
3883
+ * Indices of this paragraph's segments in the rendered segment list (the
3884
+ * override list when one was supplied), in authored order and INCLUDING the
3885
+ * bullet-marker segment the runs drop.
3886
+ *
3887
+ * The seam a binding uses to reach paragraph facts the neutral model does not
3888
+ * carry, without regrouping the segments itself and drifting from the
3889
+ * grouping here - which is exactly how React ended up splitting on every
3890
+ * `"\n"` and treating a soft `a:br` as a paragraph break.
3891
+ */
3892
+ segmentIndices: number[];
3893
+ /**
3894
+ * True when this paragraph resolves right-to-left (`a:pPr/@rtl`, or the text
3895
+ * body's default). A binding that mirrors its hanging indent for RTL reads
3896
+ * this; the direction itself is already in {@link paragraphStyle}.
3897
+ */
3898
+ rtl?: boolean;
3899
+ /**
3900
+ * Extra CSS for the paragraph box, beyond the margin / indent / spacing
3901
+ * fields above: this paragraph's own `text-align` (`a:pPr/@algn`), its BiDi
3902
+ * `direction`, and the kinsoku line-breaking rules (`@eaLnBrk`,
3903
+ * `@latinLnBrk`, `@hangingPunct`). Absent when the paragraph overrides none
3904
+ * of them, which is the common case.
3905
+ *
3906
+ * All three used to be resolved in React's private paragraph renderer only,
3907
+ * so a deck that centred one paragraph of a left-aligned body, or set CJK
3908
+ * break rules, rendered differently in the other four bindings.
3909
+ */
3910
+ paragraphStyle?: RunStyle;
3911
+ }
3912
+
3913
+ /** Current editor payload. Missing segments explicitly denotes plain-text fallback. */
3914
+ interface InlineTextEditSnapshot {
3915
+ elementId: string;
3916
+ text: string;
3917
+ textSegments?: TextSegment[];
3918
+ }
3919
+ interface InlineListRun {
3920
+ token: string;
3921
+ segmentIndex: number;
3922
+ text: string;
3923
+ style: Readonly<TextStyle>;
3924
+ isLineBreak?: true;
3925
+ }
3926
+ interface InlineListParagraph {
3927
+ token: string;
3928
+ sourceIndex: number;
3929
+ runs: readonly InlineListRun[];
3930
+ presentation: RenderParagraph;
3931
+ }
3932
+ /** Descriptor identity also identifies the private provenance registry. */
3933
+ interface InlineListSeed {
3934
+ elementId: string;
3935
+ paragraphs: readonly InlineListParagraph[];
3936
+ }
3937
+ type InlineListReadResult = {
3938
+ kind: 'supported';
3939
+ snapshot: InlineTextEditSnapshot;
3940
+ paragraphs: RenderParagraph[];
3941
+ } | {
3942
+ kind: 'unsupported';
3943
+ reason: string;
3944
+ text: string;
3945
+ };
3946
+
3947
+ /**
3948
+ * Utilities for reading and restoring text selections within the inline text
3949
+ * editor contentEditable, and for applying style updates to a subset of text
3950
+ * segments based on the current selection. Framework-agnostic (uses DOM globals
3951
+ * only; no framework imports).
3952
+ */
3953
+
3954
+ /** Describes which segments (and offsets within them) are selected. */
3955
+ interface InlineTextSelection {
3956
+ startSegIdx: number;
3957
+ startOffset: number;
3958
+ endSegIdx: number;
3959
+ endOffset: number;
3960
+ }
3515
3961
 
3516
3962
  /**
3517
3963
  * notes-utils.ts: framework-agnostic pure helpers for the rich speaker-notes
@@ -4589,6 +5035,60 @@ interface SlideTransitionAnimations {
4589
5035
  /** Whether the outgoing layer should render above the incoming layer. */
4590
5036
  outgoingOnTop: boolean;
4591
5037
  }
5038
+ /** The four cardinal directions a transition can resolve to. */
5039
+ type ResolvedDirection = 'left' | 'right' | 'up' | 'down';
5040
+ /** Cardinal directions plus the four diagonals (for cover/uncover/strips). */
5041
+ type ResolvedDirection8 = ResolvedDirection | 'lu' | 'ld' | 'ru' | 'rd';
5042
+ /** Map an OOXML `dir` token (`l`/`r`/`u`/`d`) to a cardinal direction. */
5043
+ declare function resolveDirection(direction: string | undefined, defaultDir: ResolvedDirection): ResolvedDirection;
5044
+ /** Map an OOXML `dir` token to a cardinal **or diagonal** direction. */
5045
+ declare function resolveDirection8(direction: string | undefined, defaultDir: ResolvedDirection): ResolvedDirection8;
5046
+ /** Resolve an orientation from the `orient` or `direction` attribute. */
5047
+ declare function resolveOrientation(direction: string | undefined, orient: string | undefined): 'horz' | 'vert';
5048
+ /** Transition types eligible for `random` selection (kept deterministic-light). */
5049
+ declare const RANDOM_ELIGIBLE_TYPES: readonly PptxTransitionType[];
5050
+ /** No-animation sentinel — used for `none`/`cut` (instant slide swap). */
5051
+ declare const INSTANT: SlideTransitionAnimations;
5052
+ /**
5053
+ * Default transition duration (ms) when the transition omits `durationMs`. This
5054
+ * is the React/Vue default consumed by `resolveSlideTransition`. The Angular
5055
+ * binding uses its own (smaller, floored) duration policy.
5056
+ */
5057
+ declare const DEFAULT_TRANSITION_DURATION_MS = 1000;
5058
+ /**
5059
+ * Default Morph duration (ms) for a transition that declares NEITHER an
5060
+ * explicit `p14:dur` (which lands in `durationMs` and always wins) NOR a legacy
5061
+ * `spd` speed (see {@link TRANSITION_SPEED_DURATION_MS}).
5062
+ *
5063
+ * A Morph that declares nothing carries no duration hint at all, and desktop
5064
+ * PowerPoint then plays it at its own 0.5s fallback (the Duration box shows
5065
+ * 0.50 for such slides and the transition measures at half a second); the
5066
+ * previous 1.0s/2.0s defaults made those decks play at double PowerPoint
5067
+ * speed.
5068
+ */
5069
+ declare const DEFAULT_MORPH_DURATION_MS = 500;
5070
+ /**
5071
+ * Duration (ms) for each legacy `p:transition/@spd` speed.
5072
+ *
5073
+ * Measured against PowerPoint itself: the issue #131 deck's morph slides carry
5074
+ * `spd="slow"` and no `p14:dur`, and PowerPoint reports
5075
+ * `SlideShowTransition.Duration = 1.0`. Re-authoring that attribute and
5076
+ * re-reading it through COM gives fast=0.5s, med=0.75s, slow=1.0s - and the
5077
+ * same values for Morph as for every other effect, contradicting the earlier
5078
+ * assumption that Morph ignores `spd`.
5079
+ */
5080
+ declare const TRANSITION_SPEED_DURATION_MS: Readonly<Record<string, number>>;
5081
+ /** Easing applied to every transition animation. */
5082
+ declare const EASE = "ease-in-out";
5083
+ /**
5084
+ * `p:wheel/@spokes` (CT_WheelTransition): PowerPoint's Wheel dialog offers
5085
+ * exactly these five spoke counts. Any other authored value (or absence, the
5086
+ * schema default) snaps to the nearest one so the keyframe lookup always
5087
+ * resolves to a real `pptx-tr-wheel-in-N` block.
5088
+ */
5089
+ declare const WHEEL_SPOKE_COUNTS: readonly number[];
5090
+ /** Resolve an authored `spokes` count to the nearest PowerPoint-offered value. */
5091
+ declare function resolveWheelSpokeCount(spokes: number | undefined): number;
4592
5092
 
4593
5093
  /**
4594
5094
  * `slide-transition-keyframes` — the full `@keyframes` block backing every
@@ -4619,6 +5119,11 @@ interface SlideTransitionAnimations {
4619
5119
  * transitions animate wherever this single string is injected.
4620
5120
  */
4621
5121
  declare const SLIDE_TRANSITION_KEYFRAMES: string;
5122
+ /**
5123
+ * Alias of {@link SLIDE_TRANSITION_KEYFRAMES} under the `_CSS` name the Vue
5124
+ * binding historically exported.
5125
+ */
5126
+ declare const SLIDE_TRANSITION_KEYFRAMES_CSS: string;
4622
5127
 
4623
5128
  /**
4624
5129
  * `slide-transition-css` — pure mapping from a {@link PptxSlideTransition}
@@ -4661,6 +5166,18 @@ declare const SLIDE_TRANSITION_KEYFRAMES: string;
4661
5166
  * Unknown types fall back to a symmetrical cross-fade.
4662
5167
  */
4663
5168
  declare function getSlideTransitionAnimations(type: PptxTransitionType, durationMs: number, direction: string | undefined, orient?: string | undefined, spokes?: number | undefined, pattern?: string | undefined): SlideTransitionAnimations;
5169
+ /**
5170
+ * Convenience wrapper that reads everything off a {@link PptxSlideTransition},
5171
+ * applying the React/Vue default duration when none is set. `none`/`cut` and a
5172
+ * transition with a non-positive duration resolve to {@link INSTANT}.
5173
+ */
5174
+ declare function resolveSlideTransition(transition: PptxSlideTransition | undefined): SlideTransitionAnimations;
5175
+ /**
5176
+ * The effective duration (ms) for a transition under the React/Vue policy — the
5177
+ * configured `durationMs`, or {@link DEFAULT_TRANSITION_DURATION_MS} when
5178
+ * unset/invalid. `none`/`cut` resolve to `0` (instant).
5179
+ */
5180
+ declare function resolveTransitionDurationMs(transition: PptxSlideTransition | undefined): number;
4664
5181
 
4665
5182
  /**
4666
5183
  * `slide-transition-fragment-types` - shared types and small pure helpers for
@@ -4874,6 +5391,35 @@ interface SlideShowOptionDescriptor {
4874
5391
  unsupported: boolean;
4875
5392
  }
4876
5393
 
5394
+ /** Part 1: conveyor / doors / ferris / flash / flythrough / gallery / glitter / honeycomb / pan. */
5395
+ declare const P14_TRANSITION_KEYFRAMES = "\n/* \u2500\u2500 Conveyor (translate X with staggered timing) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-conveyor-in-from-right {\n\tfrom { transform: translateX(100%) rotateY(-30deg); }\n\t60% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-left {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(-100%) rotateY(30deg); }\n}\n@keyframes pptx-tr-conveyor-in-from-left {\n\tfrom { transform: translateX(-100%) rotateY(30deg); }\n\t60% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-right {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(100%) rotateY(-30deg); }\n}\n\n/* \u2500\u2500 Doors (clip-path from center split) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n MEASURED via COM CreateVideo: PowerPoint's `dir=\"horz\"` names a\n HORIZONTAL split line (two panels stacked top/bottom, opening upward and\n downward), and `dir=\"vert\"` a VERTICAL split line (panels side by side,\n opening left and right) - the opposite of what \"clips left/right\" vs\n \"clips top/bottom\" would suggest at a glance. Keep the clip-path bodies\n matched to the MEASURED direction, not the intuitive one. */\n@keyframes pptx-tr-doors-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-doors-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n\n/* \u2500\u2500 Ferris (rotate elements around center) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-ferris-in-from-right {\n\tfrom { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-left {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n}\n@keyframes pptx-tr-ferris-in-from-left {\n\tfrom { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-right {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n}\n\n/* \u2500\u2500 Flash (bright flash opacity burst) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-flash-white {\n\t0% { opacity: 1; }\n\t30% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n@keyframes pptx-tr-flash-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t70% { opacity: 1; }\n\t100% { opacity: 1; }\n}\n\n/* \u2500\u2500 Flythrough (scale + translate Z-axis feel) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-flythrough-in {\n\tfrom { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n}\n@keyframes pptx-tr-flythrough-reverse-in {\n\tfrom { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-reverse-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n}\n\n/* \u2500\u2500 Gallery (translate with perspective) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-gallery-in-from-right {\n\tfrom { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-left {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n}\n@keyframes pptx-tr-gallery-in-from-left {\n\tfrom { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-right {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n}\n\n/* \u2500\u2500 Glitter (particle dissolve effect) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-glitter-in {\n\tfrom { opacity: 0; filter: brightness(1.5) contrast(1.3) blur(2px); }\n\t60% { opacity: 0.7; filter: brightness(1.2) contrast(1.1) blur(1px); }\n\tto { opacity: 1; filter: brightness(1) contrast(1) blur(0); }\n}\n\n/* \u2500\u2500 Honeycomb (hexagonal reveal) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-honeycomb-in {\n\tfrom {\n\t\tclip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%);\n\t\topacity: 0;\n\t}\n\tto {\n\t\tclip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);\n\t\topacity: 1;\n\t}\n}\n@keyframes pptx-tr-honeycomb-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* \u2500\u2500 Pan (large-scale translate) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-pan-from-right {\n\tfrom { transform: translateX(100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-pan-from-left {\n\tfrom { transform: translateX(-100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-pan-from-bottom {\n\tfrom { transform: translateY(100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-top {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(-100%); }\n}\n@keyframes pptx-tr-pan-from-top {\n\tfrom { transform: translateY(-100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-bottom {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(100%); }\n}\n";
5396
+ /** Part 2: prism / reveal / ripple / shred / switch / vortex / warp / wheelReverse / window. */
5397
+ declare const P14_TRANSITION_KEYFRAMES_2 = "\n/* \u2500\u2500 Prism: see `slide-transition-prism` (split out to keep this module\n under the per-file LOC budget) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n@keyframes pptx-tr-prism-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-bottom {\n\tfrom { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-top {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-top {\n\tfrom { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-bottom {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n}\n\n/* \u2500\u2500 Reveal (slide away reveal) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-reveal-out-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-reveal-out-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n/* MEASURED: the incoming layer stays hidden for roughly the first half of the\n transition (a real black/background gap shows through), then fades in -\n not a flat 0.5->1 fade running the whole duration. */\n@keyframes pptx-tr-reveal-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n\n/* \u2500\u2500 Ripple (expanding ring clip-path) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-ripple-in {\n\tfrom { clip-path: circle(0% at 50% 50%); opacity: 0.5; }\n\t30% { clip-path: circle(20% at 50% 50%); opacity: 0.7; }\n\t60% { clip-path: circle(50% at 50% 50%); opacity: 0.9; }\n\tto { clip-path: circle(75% at 50% 50%); opacity: 1; }\n}\n\n/* \u2500\u2500 Shred (fragmented clip-path pieces) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-shred-strips-in {\n\tfrom { clip-path: inset(0 100% 0 0); opacity: 0; }\n\t30% { clip-path: inset(0 60% 0 0); opacity: 0.5; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-rectangles-in {\n\tfrom { clip-path: inset(50%); opacity: 0; }\n\t40% { clip-path: inset(20%); opacity: 0.6; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* \u2500\u2500 Switch (flip/rotate swap) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-switch-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n}\n@keyframes pptx-tr-switch-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n}\n\n/* \u2500\u2500 Vortex (rotate + scale spiral) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-vortex-in {\n\tfrom { transform: rotate(720deg) scale(0); opacity: 0; }\n\tto { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-vortex-out {\n\tfrom { transform: rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: rotate(-720deg) scale(0); opacity: 0; }\n}\n\n/* \u2500\u2500 Warp: see `slide-transition-warp` (COM-measured radial zoom blur,\n split out to keep this module under the per-file LOC budget) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n@keyframes pptx-tr-warp-in {\n\t0% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n}\n@keyframes pptx-tr-warp-reverse-in {\n\t0% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-reverse-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n}\n\n\n/* \u2500\u2500 WheelReverse (reverse wheel rotation) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-wheel-reverse-in {\n\tfrom { clip-path: circle(0% at 50% 50%); transform: rotate(180deg); }\n\tto { clip-path: circle(75% at 50% 50%); transform: rotate(0deg); }\n}\n\n/* \u2500\u2500 Window (scale from center with border) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Same measured horz/vert meaning as Doors above (horz = horizontal split\n line opening vertically; vert = vertical split line opening horizontally). */\n@keyframes pptx-tr-window-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-out {\n\tfrom { opacity: 1; transform: scale(1); }\n\tto { opacity: 0; transform: scale(0.9); }\n}\n";
5398
+ /** Both p14 keyframe blocks concatenated, for single `<style>` injection. */
5399
+ declare const P14_TRANSITION_KEYFRAMES_ALL = "\n/* \u2500\u2500 Conveyor (translate X with staggered timing) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-conveyor-in-from-right {\n\tfrom { transform: translateX(100%) rotateY(-30deg); }\n\t60% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-left {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(-100%) rotateY(30deg); }\n}\n@keyframes pptx-tr-conveyor-in-from-left {\n\tfrom { transform: translateX(-100%) rotateY(30deg); }\n\t60% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-right {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(100%) rotateY(-30deg); }\n}\n\n/* \u2500\u2500 Doors (clip-path from center split) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n MEASURED via COM CreateVideo: PowerPoint's `dir=\"horz\"` names a\n HORIZONTAL split line (two panels stacked top/bottom, opening upward and\n downward), and `dir=\"vert\"` a VERTICAL split line (panels side by side,\n opening left and right) - the opposite of what \"clips left/right\" vs\n \"clips top/bottom\" would suggest at a glance. Keep the clip-path bodies\n matched to the MEASURED direction, not the intuitive one. */\n@keyframes pptx-tr-doors-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-doors-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n\n/* \u2500\u2500 Ferris (rotate elements around center) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-ferris-in-from-right {\n\tfrom { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-left {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n}\n@keyframes pptx-tr-ferris-in-from-left {\n\tfrom { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-right {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n}\n\n/* \u2500\u2500 Flash (bright flash opacity burst) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-flash-white {\n\t0% { opacity: 1; }\n\t30% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n@keyframes pptx-tr-flash-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t70% { opacity: 1; }\n\t100% { opacity: 1; }\n}\n\n/* \u2500\u2500 Flythrough (scale + translate Z-axis feel) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-flythrough-in {\n\tfrom { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n}\n@keyframes pptx-tr-flythrough-reverse-in {\n\tfrom { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-reverse-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n}\n\n/* \u2500\u2500 Gallery (translate with perspective) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-gallery-in-from-right {\n\tfrom { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-left {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n}\n@keyframes pptx-tr-gallery-in-from-left {\n\tfrom { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-right {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n}\n\n/* \u2500\u2500 Glitter (particle dissolve effect) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-glitter-in {\n\tfrom { opacity: 0; filter: brightness(1.5) contrast(1.3) blur(2px); }\n\t60% { opacity: 0.7; filter: brightness(1.2) contrast(1.1) blur(1px); }\n\tto { opacity: 1; filter: brightness(1) contrast(1) blur(0); }\n}\n\n/* \u2500\u2500 Honeycomb (hexagonal reveal) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-honeycomb-in {\n\tfrom {\n\t\tclip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%);\n\t\topacity: 0;\n\t}\n\tto {\n\t\tclip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);\n\t\topacity: 1;\n\t}\n}\n@keyframes pptx-tr-honeycomb-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* \u2500\u2500 Pan (large-scale translate) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-pan-from-right {\n\tfrom { transform: translateX(100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-pan-from-left {\n\tfrom { transform: translateX(-100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-pan-from-bottom {\n\tfrom { transform: translateY(100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-top {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(-100%); }\n}\n@keyframes pptx-tr-pan-from-top {\n\tfrom { transform: translateY(-100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-bottom {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(100%); }\n}\n\n\n/* \u2500\u2500 Prism: see `slide-transition-prism` (split out to keep this module\n under the per-file LOC budget) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n@keyframes pptx-tr-prism-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-bottom {\n\tfrom { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-top {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-top {\n\tfrom { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-bottom {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n}\n\n/* \u2500\u2500 Reveal (slide away reveal) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-reveal-out-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-reveal-out-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n/* MEASURED: the incoming layer stays hidden for roughly the first half of the\n transition (a real black/background gap shows through), then fades in -\n not a flat 0.5->1 fade running the whole duration. */\n@keyframes pptx-tr-reveal-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n\n/* \u2500\u2500 Ripple (expanding ring clip-path) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-ripple-in {\n\tfrom { clip-path: circle(0% at 50% 50%); opacity: 0.5; }\n\t30% { clip-path: circle(20% at 50% 50%); opacity: 0.7; }\n\t60% { clip-path: circle(50% at 50% 50%); opacity: 0.9; }\n\tto { clip-path: circle(75% at 50% 50%); opacity: 1; }\n}\n\n/* \u2500\u2500 Shred (fragmented clip-path pieces) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-shred-strips-in {\n\tfrom { clip-path: inset(0 100% 0 0); opacity: 0; }\n\t30% { clip-path: inset(0 60% 0 0); opacity: 0.5; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-rectangles-in {\n\tfrom { clip-path: inset(50%); opacity: 0; }\n\t40% { clip-path: inset(20%); opacity: 0.6; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* \u2500\u2500 Switch (flip/rotate swap) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-switch-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n}\n@keyframes pptx-tr-switch-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n}\n\n/* \u2500\u2500 Vortex (rotate + scale spiral) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-vortex-in {\n\tfrom { transform: rotate(720deg) scale(0); opacity: 0; }\n\tto { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-vortex-out {\n\tfrom { transform: rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: rotate(-720deg) scale(0); opacity: 0; }\n}\n\n/* \u2500\u2500 Warp: see `slide-transition-warp` (COM-measured radial zoom blur,\n split out to keep this module under the per-file LOC budget) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n@keyframes pptx-tr-warp-in {\n\t0% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n}\n@keyframes pptx-tr-warp-reverse-in {\n\t0% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-reverse-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n}\n\n\n/* \u2500\u2500 WheelReverse (reverse wheel rotation) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-wheel-reverse-in {\n\tfrom { clip-path: circle(0% at 50% 50%); transform: rotate(180deg); }\n\tto { clip-path: circle(75% at 50% 50%); transform: rotate(0deg); }\n}\n\n/* \u2500\u2500 Window (scale from center with border) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Same measured horz/vert meaning as Doors above (horz = horizontal split\n line opening vertically; vert = vertical split line opening horizontally). */\n@keyframes pptx-tr-window-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-out {\n\tfrom { opacity: 1; transform: scale(1); }\n\tto { opacity: 0; transform: scale(0.9); }\n}\n";
5400
+
5401
+ /**
5402
+ * `p14-transition-css` — animation resolver for the Office 2010 (`p14`
5403
+ * namespace) slide transitions. Maps each p14 transition type to the faithful
5404
+ * per-effect CSS `animation` descriptors whose `@keyframes` live in
5405
+ * `p14-transition-keyframes`.
5406
+ *
5407
+ * This is the high-fidelity counterpart to the 2-D approximations the core
5408
+ * `getSlideTransitionAnimations` emits for the same exotic types. Returns
5409
+ * `undefined` for any type that is not a p14 transition, so callers can fall
5410
+ * back to the core resolver.
5411
+ *
5412
+ * Pure; no framework or DOM imports.
5413
+ *
5414
+ * @module render/p14-transition-css
5415
+ */
5416
+
5417
+ /**
5418
+ * Return CSS animation descriptors for p14 transition types. Returns
5419
+ * `undefined` when the type is not a p14 transition.
5420
+ */
5421
+ declare function getP14TransitionAnimations(type: PptxTransitionType, durationMs: number, direction: string | undefined, orient?: string | undefined, pattern?: string | undefined): SlideTransitionAnimations | undefined;
5422
+
4877
5423
  /**
4878
5424
  * smartart-accessibility.ts: framework-agnostic accessibility metadata for the
4879
5425
  * SmartArt renderer, shared across the React, Vue, and Angular bindings.
@@ -7023,6 +7569,17 @@ interface SummaryZoomView {
7023
7569
  ariaLabel: string;
7024
7570
  }
7025
7571
 
7572
+ /**
7573
+ * Decode a local image File/Blob into a centred element, fitting the slide
7574
+ * without upscaling. Dimensions are slide pixels; image bytes are preserved.
7575
+ *
7576
+ * Resolves null for unsupported/unreadable images, invalid bounds, cancellation,
7577
+ * or unavailable browser APIs. Importing this module is safe outside a browser.
7578
+ * No slide, selection, history, clipboard, or network state is changed. The
7579
+ * caller must still validate its document/slide destination before committing.
7580
+ */
7581
+ declare function createImageElementFromFile(file: Blob, canvasSize: CanvasSize, signal?: AbortSignal): Promise<ImagePptxElement | null>;
7582
+
7026
7583
  /** One editable row in the master/layout background card. */
7027
7584
  interface TemplateBackgroundRow {
7028
7585
  /** The layout or master part path, passed to `setTemplateBackground`/`getTemplateBackgroundColor`. */
@@ -8087,6 +8644,17 @@ interface OleIconShape {
8087
8644
  */
8088
8645
  declare function registerCrossSlideAudio(element: MediaPptxElement, src: string | undefined): boolean;
8089
8646
 
8647
+ /** The viewer-owned edit session identifies the part to overlay, never just a global element ID. */
8648
+ interface PendingInlineTextEdit {
8649
+ snapshot: InlineTextEditSnapshot;
8650
+ text?: string;
8651
+ target: {
8652
+ slideId: string;
8653
+ } | {
8654
+ masterView: MasterViewTarget;
8655
+ };
8656
+ }
8657
+
8090
8658
  /**
8091
8659
  * Grouping needs an editable deck, at least two selected elements, and (when
8092
8660
  * the caller can supply it) none of those elements locked against grouping.
@@ -8226,6 +8794,27 @@ interface ViewportFitOptions {
8226
8794
  maxFitScale?: number | null;
8227
8795
  }
8228
8796
 
8797
+ type InlineListSelectionResult = {
8798
+ kind: 'supported';
8799
+ snapshot: InlineTextEditSnapshot;
8800
+ selection: InlineTextSelection | null;
8801
+ bodyRange?: {
8802
+ start: number;
8803
+ end: number;
8804
+ };
8805
+ } | {
8806
+ kind: 'unsupported';
8807
+ reason: string;
8808
+ };
8809
+
8810
+ interface InlineListController {
8811
+ read(): InlineListReadResult;
8812
+ format(snapshot: InlineTextEditSnapshot): InlineListReadResult;
8813
+ readSelection(selection?: Selection | null): InlineListSelectionResult;
8814
+ refresh(): InlineListReadResult;
8815
+ dispose(): void;
8816
+ }
8817
+
8229
8818
  /**
8230
8819
  * Minimal GIF89a encoder (pure JS, no external dependency) plus pure
8231
8820
  * frame-planning helpers — shared by the React, Vue, and Angular bindings.
@@ -8438,6 +9027,51 @@ interface RasterizeElementTilesResult {
8438
9027
  tiles: RasterizedTile[];
8439
9028
  }
8440
9029
 
9030
+ /**
9031
+ * `slide-transition-cinematic`: animation resolver + `@keyframes` for the
9032
+ * Office 2013+ (`p15` namespace) "cinematic" slide-transition family: the 3-D
9033
+ * and dramatic composites that ship with modern PowerPoint but have no
9034
+ * dedicated case in the classic {@link getSlideTransitionAnimations} switch and
9035
+ * therefore used to fall back to a flat symmetrical cross-fade.
9036
+ *
9037
+ * Handled here (all with real, distinct keyframes):
9038
+ *
9039
+ * - 3-D rotations: `cube`, `flip`, `rotate`, `orbit` (kept in this module),
9040
+ * and `box` (split into `slide-transition-box`: it shares Cube's OOXML
9041
+ * element but is COM-measured as visually distinct, so it earns its own
9042
+ * keyframe set rather than reusing Cube's)
9043
+ * - page curl / peel: `pageCurlSingle`, `pageCurlDouble`, `peelOff`
9044
+ * - directional / scale / rotate composites: `fallOver`, `drape`, `curtains`,
9045
+ * `wind`, `prestige`, `fracture`, `crush`, `airplane`, `origami`
9046
+ *
9047
+ * This mirrors the {@link getP14TransitionAnimations} pattern: the resolver
9048
+ * returns `undefined` for any type it does not own, so the core resolver can
9049
+ * fall through to its own cases. The `@keyframes` string
9050
+ * ({@link CINEMATIC_TRANSITION_KEYFRAMES}) must be injected alongside the core
9051
+ * and p14 blocks (it is folded into `SLIDE_TRANSITION_KEYFRAMES`), so every
9052
+ * binding that injects that aggregate animates these with no per-binding wiring.
9053
+ *
9054
+ * All names share the `pptx-tr-*` prefix so they never collide with the
9055
+ * element-animation (`pptx-vue-*`) or timeline (`pptx-tl-*`) keyframes. Pure; no
9056
+ * framework or DOM imports.
9057
+ *
9058
+ * @module render/slide-transition-cinematic
9059
+ */
9060
+
9061
+ /**
9062
+ * Resolve a p15 cinematic transition to its CSS `animation` descriptors, or
9063
+ * `undefined` when the type is not a cinematic transition (so the caller can
9064
+ * fall through to the classic 2-D / p14 resolvers).
9065
+ */
9066
+ declare function getCinematicTransitionAnimations(type: PptxTransitionType, durationMs: number, direction: string | undefined, orient?: string | undefined): SlideTransitionAnimations | undefined;
9067
+ /**
9068
+ * `@keyframes` backing every cinematic transition. Fold into the injected
9069
+ * aggregate (`SLIDE_TRANSITION_KEYFRAMES`) so these animate wherever it is
9070
+ * injected. `pptx-tr-fade-in` (reused by wind/fracture/airplane incoming) is
9071
+ * already defined in the core block, so it is intentionally not redefined here.
9072
+ */
9073
+ declare const CINEMATIC_TRANSITION_KEYFRAMES: string;
9074
+
8441
9075
  /**
8442
9076
  * Thin re-export shim → vendored `pptx-viewer-shared` (`render/embedded-fonts`).
8443
9077
  *
@@ -10021,6 +10655,9 @@ declare class IsMobileService {
10021
10655
  * signatures, …) were added alongside the corresponding features.
10022
10656
  */
10023
10657
  declare class LoadContentService {
10658
+ private pendingInlineEditReader?;
10659
+ /** Viewer-scoped current list session. Saving never commits or blurs it. */
10660
+ bindPendingInlineEdit(reader: () => PendingInlineTextEdit | undefined): void;
10024
10661
  /** Parsed slides (with image Blob URLs patched in). */
10025
10662
  readonly slides: _angular_core.WritableSignal<PptxSlide[]>;
10026
10663
  /**
@@ -10944,6 +11581,15 @@ declare class ViewerCanvasEditingService {
10944
11581
  private readonly viewerOpts;
10945
11582
  /** Id of the element being inline text-edited, or null. */
10946
11583
  readonly editingId: _angular_core.WritableSignal<string | null>;
11584
+ private inlineSnapshot;
11585
+ private readonly listSession;
11586
+ onListSession(event: {
11587
+ controller: InlineListController;
11588
+ active: boolean;
11589
+ }): void;
11590
+ formatInlineSnapshot(snapshot: InlineTextEditSnapshot): boolean;
11591
+ endInlineListSession(): void;
11592
+ readInlineSnapshot(): InlineTextEditSnapshot | undefined;
10947
11593
  /** Open editor context-menu position (client coords), or null. */
10948
11594
  readonly contextMenuPos: _angular_core.WritableSignal<{
10949
11595
  x: number;
@@ -10978,11 +11624,13 @@ declare class ViewerCanvasEditingService {
10978
11624
  onTextInput(event: {
10979
11625
  id: string;
10980
11626
  text: string;
11627
+ snapshot?: InlineTextEditSnapshot;
10981
11628
  }): void;
10982
11629
  /** Commit an inline text edit without flattening its rich-text runs. */
10983
11630
  onTextCommit(event: {
10984
11631
  id: string;
10985
11632
  text: string;
11633
+ snapshot?: InlineTextEditSnapshot;
10986
11634
  height?: number;
10987
11635
  autoFitFontScale?: number;
10988
11636
  autoFitLineSpacingReduction?: number;
@@ -12444,6 +13092,7 @@ declare class PowerPointViewerComponent implements PowerPointViewerAPI {
12444
13092
  private readonly destroyRef;
12445
13093
  protected readonly dialogs: ViewerDialogsService;
12446
13094
  protected readonly viewerOpts: ViewerOptionsService;
13095
+ private readonly masterInlineEditor;
12447
13096
  private readonly compareSvc;
12448
13097
  protected readonly xport: ViewerExportService;
12449
13098
  protected readonly findReplace: ViewerFindReplaceService;
@@ -12476,8 +13125,10 @@ declare class PowerPointViewerComponent implements PowerPointViewerAPI {
12476
13125
  private readonly extraDialogs;
12477
13126
  /** Surface the encrypted-file notice dialog alongside the inline fallback. */
12478
13127
  private readonly encryptedNotice;
13128
+ private readonly editorCanvas;
12479
13129
  /** The `<main>` host; used to locate the live `.pptx-ng-canvas-stage`. */
12480
13130
  private readonly mainEl;
13131
+ private readonly viewerRoot;
12481
13132
  /**
12482
13133
  * Whether the CURRENT document's Protected View lock was lifted via the
12483
13134
  * banner's "Enable Editing" button this session. A document the host
@@ -12883,6 +13534,7 @@ declare class PowerPointViewerComponent implements PowerPointViewerAPI {
12883
13534
  getElementById(elementId: string, slideIndex?: number): PptxElement | undefined;
12884
13535
  /** Insert a defensive copy into the active ordinary editable slide. */
12885
13536
  addElement(element: PptxElement): string | undefined;
13537
+ updateElements(updates: readonly ElementUpdate[], options?: ElementUpdateOptions): Promise<void>;
12886
13538
  /** Update one or more properties of an element by ID. */
12887
13539
  updateElement(elementId: string, updates: Partial<PptxElement>): void;
12888
13540
  /** Delete elements by their IDs from the active slide. */
@@ -14204,6 +14856,110 @@ declare class RulerGuidesService {
14204
14856
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
14205
14857
  }
14206
14858
 
14859
+ /**
14860
+ * selection-geometry.ts: Pure geometry helpers for `SlideCanvasComponent`'s
14861
+ * selection outline, resize/rotate/adjust handles, and the
14862
+ * pointer-target-to-interactive-element resolution. No Angular dependency, so
14863
+ * these are trivially unit-testable and reusable outside the component.
14864
+ */
14865
+
14866
+ /** A selected element's bounding box (stage coords), keyed by id. */
14867
+ interface SelectionBox extends Box {
14868
+ id: string;
14869
+ }
14870
+ /** A resize-handle's render box (stage coords) plus its cursor style. */
14871
+ interface HandleBox {
14872
+ handle: ResizeHandle;
14873
+ left: number;
14874
+ top: number;
14875
+ size: number;
14876
+ cursor: string;
14877
+ }
14878
+ /** A rotate/adjust handle's render box (stage coords). */
14879
+ interface CornerHandleBox {
14880
+ left: number;
14881
+ top: number;
14882
+ size: number;
14883
+ }
14884
+ /** Bounding boxes (stage coords) for the given selected element ids. */
14885
+ declare function computeSelectionBoxes(elements: readonly PptxElement[], selectedIds: readonly string[]): SelectionBox[];
14886
+ /** The single selected element's box, or null when 0 or >1 are selected. */
14887
+ declare function computeSingleSelected(elements: readonly PptxElement[], selectedIds: readonly string[]): (Box & {
14888
+ id: string;
14889
+ }) | null;
14890
+ /** Resize-handle render boxes (stage coords) for the single selection. */
14891
+ declare function computeHandleBoxes(box: (Box & {
14892
+ id: string;
14893
+ }) | null, editable: boolean, handleScreenPx: number, zoom: number): HandleBox[];
14894
+ /**
14895
+ * Resize-handle boxes for the single selection, suppressed entirely when the
14896
+ * element's authored `a:spLocks` forbids resizing.
14897
+ *
14898
+ * The lock question is asked HERE rather than in the component so the rule is
14899
+ * unit-testable without Angular, and so the render gate and the pointer-down
14900
+ * gate ({@link canInteractWithElement}) can never disagree: a handle the user
14901
+ * cannot see is also a handle the pointer path refuses.
14902
+ */
14903
+ declare function computeResizeHandleBoxes(element: PptxElement | null | undefined, box: (Box & {
14904
+ id: string;
14905
+ }) | null, editable: boolean, handleScreenPx: number, zoom: number): HandleBox[];
14906
+ /**
14907
+ * A corner handle box (rotate or shape-adjust) offset above/outside the
14908
+ * single selection's box by `offsetPx` (screen pixels, scaled by zoom).
14909
+ */
14910
+ declare function computeCornerHandle(box: (Box & {
14911
+ id: string;
14912
+ }) | null, editable: boolean, handleScreenPx: number, offsetPx: number, zoom: number, corner: 'top-center' | 'top-left'): CornerHandleBox | null;
14913
+ /**
14914
+ * The rotate-knob box for the single selection, or null when the element's
14915
+ * authored `a:spLocks/@noRotation` forbids the gesture. Companion to
14916
+ * {@link computeResizeHandleBoxes}; see that function for why the lock check
14917
+ * lives in this module.
14918
+ */
14919
+ declare function computeRotateHandleBox(element: PptxElement | null | undefined, box: (Box & {
14920
+ id: string;
14921
+ }) | null, editable: boolean, handleScreenPx: number, offsetPx: number, zoom: number): CornerHandleBox | null;
14922
+ /**
14923
+ * Resolve the id of the interactive element under a pointer target, or null.
14924
+ *
14925
+ * Resolution goes through the shared hit-test, which answers with the TOP-LEVEL
14926
+ * element rather than the innermost `data-element-id` node. That distinction is
14927
+ * the whole point here: a group renders its children's nodes inside its own, so
14928
+ * the innermost node under a click is usually a grouped CHILD, whose id is not
14929
+ * in `allElements`. This function used to look that child id up, find nothing,
14930
+ * and report "no element", which CLEARED the selection: Ungroup was then only
14931
+ * reachable by hitting a gap inside the group's box that missed every child.
14932
+ * PowerPoint (and React, Vanilla and Svelte) select the group instead.
14933
+ *
14934
+ * Template (master/layout) elements are only interactive while
14935
+ * `editTemplateMode` is on; when off they are reported as null so the canvas
14936
+ * treats them as background (no select/drag/context-menu/inline-edit).
14937
+ */
14938
+ declare function resolveInteractiveElementId(target: EventTarget | null, allElements: readonly PptxElement[], editTemplateMode: boolean): string | null;
14939
+
14940
+ /** Keep the existing handle anchor while opt-in artwork can grow its frame. */
14941
+ declare function selectionControlArtwork(box: CornerHandleBox, handle?: ResizeHandle): {
14942
+ frame: {
14943
+ left: string;
14944
+ top: string;
14945
+ width: string;
14946
+ height: string;
14947
+ };
14948
+ artwork: {
14949
+ color?: string | undefined;
14950
+ position: "absolute";
14951
+ left: string;
14952
+ top: string;
14953
+ transform: string;
14954
+ pointerEvents: "none";
14955
+ width: string;
14956
+ height: string;
14957
+ borderRadius: string;
14958
+ background: string;
14959
+ borderColor: string;
14960
+ };
14961
+ };
14962
+
14207
14963
  /**
14208
14964
  * shape-adjust-handle.ts: the Angular view-mapping for the SHARED shape
14209
14965
  * adjustment (`a:avLst`) affordance.
@@ -14482,6 +15238,7 @@ declare class SlideCanvasComponent implements SlideContext {
14482
15238
  readonly textCommit: _angular_core.OutputEmitterRef<{
14483
15239
  id: string;
14484
15240
  text: string;
15241
+ snapshot?: InlineTextEditSnapshot;
14485
15242
  height?: number;
14486
15243
  autoFitFontScale?: number;
14487
15244
  autoFitLineSpacingReduction?: number;
@@ -14494,6 +15251,7 @@ declare class SlideCanvasComponent implements SlideContext {
14494
15251
  readonly textInput: _angular_core.OutputEmitterRef<{
14495
15252
  id: string;
14496
15253
  text: string;
15254
+ snapshot?: InlineTextEditSnapshot;
14497
15255
  }>;
14498
15256
  /** Emitted when an inline edit is cancelled (Escape). */
14499
15257
  readonly textCancel: _angular_core.OutputEmitterRef<void>;
@@ -14502,6 +15260,10 @@ declare class SlideCanvasComponent implements SlideContext {
14502
15260
  id: string;
14503
15261
  updates: Partial<TextStyle>;
14504
15262
  }>;
15263
+ readonly listSession: _angular_core.OutputEmitterRef<{
15264
+ controller: InlineListController;
15265
+ active: boolean;
15266
+ }>;
14505
15267
  /** Emitted during a rotate gesture with the new rotation (degrees). */
14506
15268
  readonly rotateUpdate: _angular_core.OutputEmitterRef<{
14507
15269
  id: string;
@@ -14523,6 +15285,7 @@ declare class SlideCanvasComponent implements SlideContext {
14523
15285
  id: string;
14524
15286
  tableData: PptxTableData;
14525
15287
  }>;
15288
+ hasActivePointerInteraction(): boolean;
14526
15289
  private drag;
14527
15290
  /** Live shape-adjustment gesture (amber diamond), or null when idle. */
14528
15291
  private adjustDrag;
@@ -14549,6 +15312,13 @@ declare class SlideCanvasComponent implements SlideContext {
14549
15312
  /** Per-instance user-created ruler-guide controller. */
14550
15313
  protected readonly rulerGuidesSvc: RulerGuidesService;
14551
15314
  private readonly textEditor;
15315
+ private readonly listEditor;
15316
+ readonly inlineListSeed: _angular_core.WritableSignal<InlineListSeed | undefined>;
15317
+ readonly listActivationSelection: _angular_core.WritableSignal<{
15318
+ start: number;
15319
+ end: number;
15320
+ } | undefined>;
15321
+ private listSessionId;
14552
15322
  private readonly stageRef;
14553
15323
  private readonly viewportRef;
14554
15324
  /** Per-instance auto-fit scale measurement (see {@link CanvasFitService}). */
@@ -14615,6 +15385,8 @@ declare class SlideCanvasComponent implements SlideContext {
14615
15385
  * for an element whose authored `a:spLocks/@noResize` pins its size.
14616
15386
  */
14617
15387
  readonly handleBoxes: _angular_core.Signal<pptx_angular_viewer.HandleBox[]>;
15388
+ readonly resizeHitAreaStyle: typeof getResizeHandleHitAreaStyle;
15389
+ readonly selectionControlArtwork: typeof selectionControlArtwork;
14618
15390
  /**
14619
15391
  * Rotation-handle box (stage coords) above the single selection, or null (also
14620
15392
  * null when `a:spLocks/@noRotation` is authored on the element).
@@ -14683,6 +15455,7 @@ declare class SlideCanvasComponent implements SlideContext {
14683
15455
  width: number;
14684
15456
  height: number;
14685
15457
  text: string;
15458
+ element: PptxElement;
14686
15459
  } | null>;
14687
15460
  /**
14688
15461
  * May inline text editing begin on this element? Honours the authored
@@ -14785,7 +15558,7 @@ declare class SlideCanvasComponent implements SlideContext {
14785
15558
  } | null>;
14786
15559
  readonly stageStyle: _angular_core.Signal<StyleMap>;
14787
15560
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideCanvasComponent, never>;
14788
- 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; }; "fitPadding": { "alias": "fitPadding"; "required": false; "isSignal": true; }; "maxFitScale": { "alias": "maxFitScale"; "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>;
15561
+ 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; }; "fitPadding": { "alias": "fitPadding"; "required": false; "isSignal": true; }; "maxFitScale": { "alias": "maxFitScale"; "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"; "listSession": "listSession"; "rotateUpdate": "rotateUpdate"; "marqueeSelect": "marqueeSelect"; "inkStrokeComplete": "inkStrokeComplete"; "eraserHit": "eraserHit"; "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, ["*"], true, never>;
14789
15562
  }
14790
15563
 
14791
15564
  /** Injectable bevel lighting `<filter>` descriptor: id + sanitized markup. */
@@ -15003,6 +15776,8 @@ declare class ElementRendererComponent {
15003
15776
  readonly isImageLike: _angular_core.Signal<boolean>;
15004
15777
  /** Element kinds routed to `ElementRendererGraphicsComponent`; see `GRAPHICS_ELEMENT_TYPES`. */
15005
15778
  readonly isGraphicsElement: _angular_core.Signal<boolean>;
15779
+ /** Hit target for a degenerate `group`; other branches compute their own (issue #285). */
15780
+ readonly hitTargetStyle: _angular_core.Signal<StyleMap | undefined>;
15006
15781
  readonly placeholderLabel: _angular_core.Signal<any>;
15007
15782
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementRendererComponent, never>;
15008
15783
  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>;
@@ -15713,6 +16488,8 @@ declare class InkRendererComponent {
15713
16488
  readonly zIndex: _angular_core.InputSignal<number>;
15714
16489
  readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
15715
16490
  readonly replay: _angular_core.InputSignal<boolean>;
16491
+ /** Whether inline editing (drag/resize) is enabled on this surface. */
16492
+ readonly editable: _angular_core.InputSignal<boolean>;
15716
16493
  /**
15717
16494
  * Emit the neutral element marker (`data-pptx-element="true"`) on this
15718
16495
  * renderer's root, the node that also carries `data-element-id`.
@@ -15736,11 +16513,17 @@ declare class InkRendererComponent {
15736
16513
  readonly elementIdAttr: _angular_core.Signal<string | null>;
15737
16514
  readonly replayKeyframes = "@keyframes pptx-ink-replay {\n from { stroke-dashoffset: var(--ink-path-length); }\n to { stroke-dashoffset: 0; }\n}";
15738
16515
  readonly containerStyle: _angular_core.Signal<StyleMap>;
16516
+ /**
16517
+ * Interaction-only hit target for a degenerate ink element; `replay()` is
16518
+ * this renderer's own name for `presenting` (see its doc). See
16519
+ * `ElementRendererShapeComponent.hitTargetStyle`'s fuller doc (issue #285).
16520
+ */
16521
+ readonly hitTargetStyle: _angular_core.Signal<CssStyleMap | undefined>;
15739
16522
  readonly strokes: _angular_core.Signal<InkGroupStrokeView[]>;
15740
16523
  readonly replayStyles: _angular_core.Signal<InkStrokeAnimationStyle[]>;
15741
16524
  readonly viewBox: _angular_core.Signal<string>;
15742
16525
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InkRendererComponent, never>;
15743
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<InkRendererComponent, "pptx-ink-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "replay": { "alias": "replay"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; "exposeElementId": { "alias": "exposeElementId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16526
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InkRendererComponent, "pptx-ink-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "replay": { "alias": "replay"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; "exposeElementId": { "alias": "exposeElementId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15744
16527
  }
15745
16528
 
15746
16529
  /**
@@ -15972,8 +16755,17 @@ declare class Model3DRendererComponent implements OnDestroy {
15972
16755
  * `ElementRendererComponent.exposeElementId`.
15973
16756
  */
15974
16757
  readonly exposeElementId: _angular_core.InputSignal<boolean>;
16758
+ /** Whether inline editing (drag/resize) is enabled on this surface. */
16759
+ readonly editable: _angular_core.InputSignal<boolean>;
16760
+ /** True only on the live presentation stage; see `ElementRendererComponent.presenting`. */
16761
+ readonly presenting: _angular_core.InputSignal<boolean>;
15975
16762
  /** `data-element-id` for this element, or null on a miniature surface. */
15976
16763
  readonly elementIdAttr: _angular_core.Signal<string | null>;
16764
+ /**
16765
+ * Interaction-only hit target for a degenerate 3D model; see
16766
+ * `ElementRendererShapeComponent.hitTargetStyle`'s fuller doc (issue #285).
16767
+ */
16768
+ readonly hitTargetStyle: _angular_core.Signal<CssStyleMap | undefined>;
15977
16769
  private readonly sceneRef;
15978
16770
  readonly containerStyle: _angular_core.Signal<StyleMap>;
15979
16771
  readonly vm: _angular_core.Signal<Model3DViewModel>;
@@ -15995,7 +16787,7 @@ declare class Model3DRendererComponent implements OnDestroy {
15995
16787
  private teardownHandle;
15996
16788
  ngOnDestroy(): void;
15997
16789
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Model3DRendererComponent, never>;
15998
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Model3DRendererComponent, "pptx-model3d-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; "exposeElementId": { "alias": "exposeElementId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16790
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Model3DRendererComponent, "pptx-model3d-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; "exposeElementId": { "alias": "exposeElementId"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15999
16791
  }
16000
16792
 
16001
16793
  /** Resolves a `pptx.*` key, interpolating `{{...}}` params when given. */
@@ -16107,7 +16899,16 @@ declare class ZoomRendererComponent {
16107
16899
  * click-to-jump, which only happens inside a running presentation).
16108
16900
  */
16109
16901
  readonly markElement: _angular_core.InputSignal<boolean>;
16902
+ /** Whether inline editing (drag/resize) is enabled on this surface. */
16903
+ readonly editable: _angular_core.InputSignal<boolean>;
16904
+ /** True only on the live presentation stage; see `ElementRendererComponent.presenting`. */
16905
+ readonly presenting: _angular_core.InputSignal<boolean>;
16110
16906
  readonly containerStyle: _angular_core.Signal<StyleMap>;
16907
+ /**
16908
+ * Interaction-only hit target for a degenerate zoom tile; see
16909
+ * `ElementRendererShapeComponent.hitTargetStyle`'s fuller doc (issue #285).
16910
+ */
16911
+ readonly hitTargetStyle: _angular_core.Signal<CssStyleMap | undefined>;
16111
16912
  /**
16112
16913
  * Target-slide lookup, provided by the viewer. `null` in trees that do not
16113
16914
  * provide it (e.g. isolated component tests), where the fallback thumbnail
@@ -16136,7 +16937,7 @@ declare class ZoomRendererComponent {
16136
16937
  protected onClick(event: MouseEvent): void;
16137
16938
  protected onKeydown(event: KeyboardEvent): void;
16138
16939
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZoomRendererComponent, never>;
16139
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZoomRendererComponent, "pptx-zoom-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16940
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZoomRendererComponent, "pptx-zoom-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16140
16941
  }
16141
16942
 
16142
16943
  /** Inline style record as Angular's `[ngStyle]` consumes it. */
@@ -20630,7 +21431,7 @@ declare class AccountPageComponent {
20630
21431
  readonly accountAuth: _angular_core.InputSignal<AccountAuthConfig | undefined>;
20631
21432
  private readonly translate;
20632
21433
  protected readonly swatches: readonly string[];
20633
- protected readonly version = "3.17.1";
21434
+ protected readonly version = "3.19.0";
20634
21435
  protected readonly profile: _angular_core.WritableSignal<ViewerProfile>;
20635
21436
  protected readonly initial: _angular_core.Signal<string>;
20636
21437
  protected readonly usage: _angular_core.WritableSignal<LocalStorageUsageSummary | null>;
@@ -21764,87 +22565,6 @@ declare function newChartElement(chartKind?: InsertChartKind | PptxChartType): P
21764
22565
  */
21765
22566
  declare function newPresetShapeElement(shapeType: ShapePresetType, name?: string): PptxElement;
21766
22567
 
21767
- /**
21768
- * selection-geometry.ts: Pure geometry helpers for `SlideCanvasComponent`'s
21769
- * selection outline, resize/rotate/adjust handles, and the
21770
- * pointer-target-to-interactive-element resolution. No Angular dependency, so
21771
- * these are trivially unit-testable and reusable outside the component.
21772
- */
21773
-
21774
- /** A selected element's bounding box (stage coords), keyed by id. */
21775
- interface SelectionBox extends Box {
21776
- id: string;
21777
- }
21778
- /** A resize-handle's render box (stage coords) plus its cursor style. */
21779
- interface HandleBox {
21780
- handle: ResizeHandle;
21781
- left: number;
21782
- top: number;
21783
- size: number;
21784
- cursor: string;
21785
- }
21786
- /** A rotate/adjust handle's render box (stage coords). */
21787
- interface CornerHandleBox {
21788
- left: number;
21789
- top: number;
21790
- size: number;
21791
- }
21792
- /** Bounding boxes (stage coords) for the given selected element ids. */
21793
- declare function computeSelectionBoxes(elements: readonly PptxElement[], selectedIds: readonly string[]): SelectionBox[];
21794
- /** The single selected element's box, or null when 0 or >1 are selected. */
21795
- declare function computeSingleSelected(elements: readonly PptxElement[], selectedIds: readonly string[]): (Box & {
21796
- id: string;
21797
- }) | null;
21798
- /** Resize-handle render boxes (stage coords) for the single selection. */
21799
- declare function computeHandleBoxes(box: (Box & {
21800
- id: string;
21801
- }) | null, editable: boolean, handleScreenPx: number, zoom: number): HandleBox[];
21802
- /**
21803
- * Resize-handle boxes for the single selection, suppressed entirely when the
21804
- * element's authored `a:spLocks` forbids resizing.
21805
- *
21806
- * The lock question is asked HERE rather than in the component so the rule is
21807
- * unit-testable without Angular, and so the render gate and the pointer-down
21808
- * gate ({@link canInteractWithElement}) can never disagree: a handle the user
21809
- * cannot see is also a handle the pointer path refuses.
21810
- */
21811
- declare function computeResizeHandleBoxes(element: PptxElement | null | undefined, box: (Box & {
21812
- id: string;
21813
- }) | null, editable: boolean, handleScreenPx: number, zoom: number): HandleBox[];
21814
- /**
21815
- * A corner handle box (rotate or shape-adjust) offset above/outside the
21816
- * single selection's box by `offsetPx` (screen pixels, scaled by zoom).
21817
- */
21818
- declare function computeCornerHandle(box: (Box & {
21819
- id: string;
21820
- }) | null, editable: boolean, handleScreenPx: number, offsetPx: number, zoom: number, corner: 'top-center' | 'top-left'): CornerHandleBox | null;
21821
- /**
21822
- * The rotate-knob box for the single selection, or null when the element's
21823
- * authored `a:spLocks/@noRotation` forbids the gesture. Companion to
21824
- * {@link computeResizeHandleBoxes}; see that function for why the lock check
21825
- * lives in this module.
21826
- */
21827
- declare function computeRotateHandleBox(element: PptxElement | null | undefined, box: (Box & {
21828
- id: string;
21829
- }) | null, editable: boolean, handleScreenPx: number, offsetPx: number, zoom: number): CornerHandleBox | null;
21830
- /**
21831
- * Resolve the id of the interactive element under a pointer target, or null.
21832
- *
21833
- * Resolution goes through the shared hit-test, which answers with the TOP-LEVEL
21834
- * element rather than the innermost `data-element-id` node. That distinction is
21835
- * the whole point here: a group renders its children's nodes inside its own, so
21836
- * the innermost node under a click is usually a grouped CHILD, whose id is not
21837
- * in `allElements`. This function used to look that child id up, find nothing,
21838
- * and report "no element", which CLEARED the selection: Ungroup was then only
21839
- * reachable by hitting a gap inside the group's box that missed every child.
21840
- * PowerPoint (and React, Vanilla and Svelte) select the group instead.
21841
- *
21842
- * Template (master/layout) elements are only interactive while
21843
- * `editTemplateMode` is on; when off they are reported as null so the canvas
21844
- * treats them as background (no select/drag/context-menu/inline-edit).
21845
- */
21846
- declare function resolveInteractiveElementId(target: EventTarget | null, allElements: readonly PptxElement[], editTemplateMode: boolean): string | null;
21847
-
21848
22568
  /**
21849
22569
  * chart-advanced-helpers.ts: Pure immutable wrappers around the remaining
21850
22570
  * advanced chart-editing core ops that `chart-data-helpers.ts` does not already
@@ -22147,6 +22867,10 @@ declare class SmartArt3DRendererComponent implements OnDestroy {
22147
22867
  * SVG fallback branch is drawn into. Set only by the main interactive canvas.
22148
22868
  */
22149
22869
  readonly markElement: _angular_core.InputSignal<boolean>;
22870
+ /** Whether inline editing (drag/resize) is enabled on this surface. */
22871
+ readonly editable: _angular_core.InputSignal<boolean>;
22872
+ /** True only on the live presentation stage; see `ElementRendererComponent.presenting`. */
22873
+ readonly presenting: _angular_core.InputSignal<boolean>;
22150
22874
  /**
22151
22875
  * Active font-style emphasis override (Bold Flash, Bold Reveal, Underline,
22152
22876
  * Change Font Style/Size) for every node's caption, driven by native-
@@ -22175,6 +22899,11 @@ declare class SmartArt3DRendererComponent implements OnDestroy {
22175
22899
  private readonly slideContext;
22176
22900
  private readonly injector;
22177
22901
  readonly containerStyle: _angular_core.Signal<StyleMap>;
22902
+ /**
22903
+ * Interaction-only hit target for a degenerate 3D SmartArt; see
22904
+ * `ElementRendererShapeComponent.hitTargetStyle`'s fuller doc (issue #285).
22905
+ */
22906
+ readonly hitTargetStyle: _angular_core.Signal<CssStyleMap | undefined>;
22178
22907
  private readonly smartArtData;
22179
22908
  private readonly model;
22180
22909
  constructor();
@@ -22195,7 +22924,7 @@ declare class SmartArt3DRendererComponent implements OnDestroy {
22195
22924
  private applyCommit;
22196
22925
  ngOnDestroy(): void;
22197
22926
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartArt3DRendererComponent, never>;
22198
- 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>;
22927
+ 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; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "textStyle": { "alias": "textStyle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
22199
22928
  }
22200
22929
 
22201
22930
  declare class SmartArtPreviewComponent {
@@ -22749,7 +23478,9 @@ declare class RibbonFileSectionComponent {
22749
23478
 
22750
23479
  declare class RibbonFontControlsComponent {
22751
23480
  private readonly editor;
23481
+ private readonly inlineEditing;
22752
23482
  readonly slideIndex: _angular_core.InputSignal<number>;
23483
+ readonly canEdit: _angular_core.InputSignal<boolean>;
22753
23484
  readonly selectedElement: _angular_core.InputSignal<PptxElement | null>;
22754
23485
  private readonly loader;
22755
23486
  private readonly customFonts;
@@ -22812,7 +23543,7 @@ declare class RibbonFontControlsComponent {
22812
23543
  protected clearFormatting(): void;
22813
23544
  private patch;
22814
23545
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonFontControlsComponent, never>;
22815
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonFontControlsComponent, "pptx-ribbon-font-controls", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
23546
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonFontControlsComponent, "pptx-ribbon-font-controls", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
22816
23547
  }
22817
23548
 
22818
23549
  /**
@@ -23003,6 +23734,7 @@ declare class RibbonInsertSectionComponent {
23003
23734
 
23004
23735
  declare class RibbonParagraphControlsComponent {
23005
23736
  private readonly editor;
23737
+ private readonly inlineEditing;
23006
23738
  readonly slideIndex: _angular_core.InputSignal<number>;
23007
23739
  readonly selectedElement: _angular_core.InputSignal<PptxElement | null>;
23008
23740
  readonly canEdit: _angular_core.InputSignal<boolean>;
@@ -23190,12 +23922,15 @@ declare function textStyleOf(el: PptxElement | null): TextStyle | null;
23190
23922
  /** Whether the given element can take text formatting. */
23191
23923
  declare function isTextElement(el: PptxElement | null): boolean;
23192
23924
  /** Merge `patch` into the selection's text style and commit via the editor. */
23193
- declare function patchTextStyle(editor: EditorStateService, slideIndex: number, el: PptxElement | null, patch: Partial<TextStyle>): void;
23925
+ declare function formatInlineListStyle(el: PptxElement, patch: Partial<TextStyle>, draft: InlineTextEditSnapshot, formatSnapshot: (snapshot: InlineTextEditSnapshot) => boolean): (ElementBulletPatch & {
23926
+ text: string;
23927
+ }) | undefined;
23928
+ declare function patchTextStyle(editor: EditorStateService, slideIndex: number, el: PptxElement | null, patch: Partial<TextStyle>, snapshot?: InlineTextEditSnapshot, formatSnapshot?: (snapshot: InlineTextEditSnapshot) => boolean): void;
23194
23929
  /**
23195
23930
  * Rewrite the selection's text characters (ribbon Aa "Change Case" dropdown).
23196
23931
  * Unlike {@link patchTextStyle}, this mutates content, not style.
23197
23932
  */
23198
- declare function transformSelectedTextCase(editor: EditorStateService, slideIndex: number, el: PptxElement | null, mode: ChangeCaseMode): void;
23933
+ declare function transformSelectedTextCase(editor: EditorStateService, slideIndex: number, el: PptxElement | null, mode: ChangeCaseMode, snapshot?: InlineTextEditSnapshot, endSession?: () => void): void;
23199
23934
 
23200
23935
  declare class RibbonTransitionsSectionComponent {
23201
23936
  private readonly editor;
@@ -23576,6 +24311,12 @@ declare class MediaRendererComponent {
23576
24311
  readonly interactive: _angular_core.InputSignal<boolean>;
23577
24312
  /** Keep the data-pptx-element marker on interaction-locked template elements. */
23578
24313
  readonly marked: _angular_core.InputSignal<boolean>;
24314
+ /**
24315
+ * Whether inline editing (drag/resize) is enabled on this surface. Distinct
24316
+ * from {@link interactive} above, which gates the transport/pointer-events
24317
+ * inertness and has its own, already-established semantics.
24318
+ */
24319
+ readonly editable: _angular_core.InputSignal<boolean>;
23579
24320
  /**
23580
24321
  * When true (default), the rendered node carries `data-element-id`. The
23581
24322
  * miniature surfaces that paint every slide at once turn it off so one
@@ -23636,6 +24377,11 @@ declare class MediaRendererComponent {
23636
24377
  private readonly translate;
23637
24378
  readonly fallbackLabel: _angular_core.Signal<string>;
23638
24379
  readonly containerStyle: _angular_core.Signal<StyleMap>;
24380
+ /**
24381
+ * Interaction-only hit target for a degenerate media element; see
24382
+ * `ElementRendererShapeComponent.hitTargetStyle`'s fuller doc (issue #285).
24383
+ */
24384
+ readonly hitTargetStyle: _angular_core.Signal<CssStyleMap | undefined>;
23639
24385
  /** Poster / preview frame data-URL (also used as the `<video poster>`). */
23640
24386
  readonly poster: _angular_core.Signal<string | undefined>;
23641
24387
  /** Playable source URL (inline data URL or resolved archive path). */
@@ -23646,7 +24392,7 @@ declare class MediaRendererComponent {
23646
24392
  readonly captionTracks: _angular_core.Signal<ResolvedCaptionTrack[]>;
23647
24393
  readonly clrChangeParams: _angular_core.Signal<ClrChangeParams | undefined>;
23648
24394
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MediaRendererComponent, never>;
23649
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MediaRendererComponent, "pptx-media-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "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; }; "placeholderLabel": { "alias": "placeholderLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
24395
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MediaRendererComponent, "pptx-media-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "marked": { "alias": "marked"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "exposeElementId": { "alias": "exposeElementId"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "placeholderLabel": { "alias": "placeholderLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
23650
24396
  }
23651
24397
 
23652
24398
  /**
@@ -24115,6 +24861,6 @@ declare function thumbnailHeight(canvasW: number, canvasH: number, thumbW: numbe
24115
24861
  */
24116
24862
  declare function gridColumns(containerW: number, thumbW: number, gap: number, maxCols: number): number;
24117
24863
 
24118
- 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, EFFECT_SOUND_CATALOGUE, 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, beginDrawingNodeEdit, 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, getEffectSoundAsset, 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, setEffectStockSound, 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 };
24119
- 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, ViewportFitOptions, ViewportFitPadding, ZoomTranslate, ZoomViewModel };
24864
+ 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, CINEMATIC_TRANSITION_KEYFRAMES, 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_MORPH_DURATION_MS, 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, EASE, EFFECT_SOUND_CATALOGUE, 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, INSTANT, 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, P14_TRANSITION_KEYFRAMES, P14_TRANSITION_KEYFRAMES_2, P14_TRANSITION_KEYFRAMES_ALL, 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, RANDOM_ELIGIBLE_TYPES, 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, DEFAULT_TRANSITION_DURATION_MS as SHARED_DEFAULT_TRANSITION_DURATION_MS, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, SLIDE_TRANSITION_KEYFRAMES_CSS, 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, TRANSITION_SPEED_DURATION_MS, 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, WHEEL_SPOKE_COUNTS, 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, beginDrawingNodeEdit, 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, createImageElementFromFile, 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, formatInlineListStyle, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, generateCustomShowId, generatePressureCircles, generateTicks, getCinematicTransitionAnimations, getClrChangeParams, getContainerStyle, getDuotoneFilterDef, getEffectSoundAsset, getEffectSoundState, getImageSrc, getLocalStorageUsageSummary, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDownloadFileName, getOleTypeColor, getOleTypeLabel, getP14TransitionAnimations, 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, resolveDirection, resolveDirection8, resolveFontVariant, resolveHyperlinkHref, resolveInteractiveElementId, resolveMediaSrc, resolveOleType, resolveOrientation, resolveParagraphBullet, resolvePresenterNotes, resolveProfileInitial, resolveRegionCode, resolveRibbonCanGroup, resolveSlideAutoAdvanceMs, resolveSlideTransition, resolvePalette as resolveSmartArtPalette, resolveThemeCatalogEntry, resolveTransitionDuration, resolveTransitionDurationMs, resolveWheelSpokeCount, 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, setEffectStockSound, 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 };
24865
+ 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, ElementUpdate, ElementUpdateOptions, 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, ResolvedDirection, ResolvedDirection8, 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, ViewportFitOptions, ViewportFitPadding, ZoomTranslate, ZoomViewModel };
24120
24866
  //# sourceMappingURL=pptx-angular-viewer.d.ts.map