pptx-angular-viewer 2.8.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  import * as pptx_viewer_core from 'pptx-viewer-core';
2
- import { PptxThemePreset, PptxSlide, PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartData, PptxElementAnimation, PptxAnimationPreset, PptxAnimationDirection, PptxAnimationRepeatMode, PptxAnimationSequence, PptxAnimationTimingCurve, PptxAnimationTrigger, ParsedTableStyleMap, PptxThemeColorScheme, PptxThemeFontScheme, TablePptxElement, PptxSection, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, InkPptxElement, PptxComment, PptxChartType, PptxTheme, PptxHandler, PptxData, PptxHeaderFooter, PptxSlideMaster, PptxNotesMaster, PptxHandoutMaster, PptxPresentationProperties, PptxCoreProperties, PptxAppProperties, PptxThemeOption, PptxCustomProperty, ParsedSignature, PptxSaveFormat, PptxTableCell, PptxTableCellStyle, PptxTableRow, PptxTableData, PptxCustomShow, MasterViewTab, SvgExportOptions, Model3DPptxElement, ZoomPptxElement, PptxSlideTransition, ChartPptxElement, MediaPptxElement, SmartArtPptxElement, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, SignatureStatus, ElementActionType, ElementAction, PptxImageEffects, MediaBookmark, ColorMapAliasKey, ChartAxisEdit, ChartDataPointLabelEdit, PptxChartLegendPosition, PptxChartStyle, ChartAxisTitleStyleEdit, ChartGridlineStyleEdit, PptxChartMarkerSymbol, PptxSmartArtNode, SmartArtLayoutType, PptxSmartArtNodeStyle, MediaCaptionTrack, PptxMediaType } from 'pptx-viewer-core';
2
+ import { PptxThemePreset, PptxSlide, PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartData, PptxElementAnimation, PptxAnimationPreset, PptxAnimationDirection, PptxAnimationRepeatMode, PptxAnimationSequence, PptxAnimationTimingCurve, PptxAnimationTrigger, ParsedTableStyleMap, PptxThemeColorScheme, PptxThemeFontScheme, TablePptxElement, PptxSection, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, PptxSlideTransition, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, ElementActionType, InkPptxElement, PptxComment, PptxChartType, PptxTheme, PptxHandler, PptxData, PptxHeaderFooter, PptxSlideMaster, PptxNotesMaster, PptxHandoutMaster, PptxPresentationProperties, PptxCoreProperties, PptxAppProperties, PptxThemeOption, PptxCustomProperty, PptxTagCollection, ParsedSignature, PptxSaveFormat, PptxTableCell, PptxTableCellStyle, PptxTableRow, PptxTableData, PptxCustomShow, MasterViewTab, SvgExportOptions, Model3DPptxElement, ZoomPptxElement, ChartPptxElement, MediaPptxElement, SmartArtPptxElement, MaterialPresetType, Text3DStyle, BevelPresetType, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, SignatureStatus, ElementAction, PptxImageEffects, MediaBookmark, ColorMapAliasKey, ChartAxisEdit, ChartDataPointLabelEdit, PptxChartLegendPosition, PptxChartStyle, ChartAxisTitleStyleEdit, ChartGridlineStyleEdit, PptxChartMarkerSymbol, PptxSmartArtNode, SmartArtLayoutType, PptxSmartArtNodeStyle, MediaCaptionTrack, PptxMediaType } from 'pptx-viewer-core';
3
3
  export { SWITCHABLE_LAYOUT_TYPES, addSmartArtNode, addSmartArtNodeAsChild, chartDataAddCategory, chartDataAddSeries, chartDataChangeType, chartDataRemoveCategory, chartDataRemoveSeries, chartDataUpdatePoint, demoteSmartArtNode, promoteSmartArtNode, removeSmartArtNode, reorderSmartArtNode, switchSmartArtLayout, updateSmartArtNodeText } from 'pptx-viewer-core';
4
4
  import * as _angular_core from '@angular/core';
5
- import { Signal, WritableSignal, OnDestroy, OnInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
5
+ import { Signal, WritableSignal, OnDestroy, OnInit, AfterViewInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
6
6
  import * as AiSdk from 'ai';
7
7
  import { LanguageModel, ChatTransport, UIMessage, ToolSet } from 'ai';
8
8
  import * as pptx_angular_viewer from 'pptx-angular-viewer';
@@ -388,7 +388,7 @@ declare const DEFAULT_STROKE_COLOR = "#1f2937";
388
388
  * The resolution priority mirrors React exactly:
389
389
  *
390
390
  * 1. **Adjustment-aware** — when `shapeAdjustments` exist, consult
391
- * {@link getAdjustmentAwareShapeClipPath} so `pie`, `arc`, `donut`,
391
+ * {@link getAdjustmentAwareClipPath} so `pie`, `arc`, `donut`,
392
392
  * `blockArc`, and wedge callouts respond to their adjustment values.
393
393
  * 2. **Spec-correct preset evaluator** — {@link getShapeClipPathFromPreset}
394
394
  * produces a `path('…')` clip-path for any shape in the preset table.
@@ -396,6 +396,18 @@ declare const DEFAULT_STROKE_COLOR = "#1f2937";
396
396
  * `cloud` / `cloudCallout`.
397
397
  * 4. **Static preset table** — {@link getShapeClipPath} as the final
398
398
  * fallback (core's comprehensive `PRESET_SHAPE_CLIP_PATHS`).
399
+ *
400
+ * Step 1 deliberately calls the DYNAMIC-only entry point
401
+ * ({@link getAdjustmentAwareClipPath}) rather than core's
402
+ * `getAdjustmentAwareShapeClipPath` wrapper. That wrapper falls back to the
403
+ * static, adjustment-BLIND polygon table whenever a shape is outside its
404
+ * 14-shape dynamic set, and returning that at step 1 swallowed the whole rest
405
+ * of the cascade: every preset carrying an authored `a:avLst` adjustment
406
+ * (parallelogram, trapezoid, teardrop, notchedRightArrow, round2SameRect, the
407
+ * arrows…) was clipped with its DEFAULT adjustment instead of its own. A
408
+ * parallelogram authored at `adj="84929"` — a thin diagonal band — rendered as
409
+ * the 25000-default polygon covering ~80% of its box and occluded the text
410
+ * behind it (issue #132).
399
411
  */
400
412
 
401
413
  /**
@@ -511,6 +523,104 @@ declare function buildPatternFillCss(style: ShapeStyle | undefined): {
511
523
  backgroundColor: string;
512
524
  } | undefined;
513
525
 
526
+ /**
527
+ * OOXML gradient fill (`a:gradFill`) → SVG paint server.
528
+ *
529
+ * The CSS resolvers in `fill-style.ts` cover every shape a binding paints as an
530
+ * HTML box (a `background-image` clipped by `clip-path`). Freeform geometry is
531
+ * different: `a:custGeom` shapes are painted as a real SVG `<path>`, and an SVG
532
+ * `fill` attribute cannot take a CSS gradient. Renderers therefore fell back to
533
+ * the parser's *representative* solid colour, so a freeform authored with a
534
+ * left-to-right fade rendered as one flat block and any transparent region of
535
+ * the gradient became opaque (issue #132).
536
+ *
537
+ * This module converts the same structured `ShapeStyle` gradient data into an
538
+ * SVG `<linearGradient>` / `<radialGradient>` descriptor plus the `url(#id)`
539
+ * reference to put in `fill`. It stays framework-agnostic: JSX/template
540
+ * bindings read {@link SvgGradientDef} and emit their own elements, while
541
+ * string-building bindings can use {@link svgGradientMarkup}.
542
+ *
543
+ * Reference: ECMA-376 Part 1, §20.1.8.35 (gradFill) and §20.1.8.49 (path).
544
+ */
545
+
546
+ /** One `<stop>` of an SVG gradient. */
547
+ interface SvgGradientStopDef {
548
+ /** Stop offset as a fraction of the gradient line (0-1). */
549
+ offset: number;
550
+ /** Stop colour as `#RRGGBB`. */
551
+ color: string;
552
+ /** Stop alpha (0-1). Omitted when the stop is fully opaque. */
553
+ opacity?: number;
554
+ }
555
+ /** An SVG `<linearGradient>` in `objectBoundingBox` units. */
556
+ interface SvgLinearGradientDef {
557
+ kind: 'linear';
558
+ id: string;
559
+ x1: number;
560
+ y1: number;
561
+ x2: number;
562
+ y2: number;
563
+ stops: SvgGradientStopDef[];
564
+ }
565
+ /** An SVG `<radialGradient>` in `objectBoundingBox` units. */
566
+ interface SvgRadialGradientDef {
567
+ kind: 'radial';
568
+ id: string;
569
+ cx: number;
570
+ cy: number;
571
+ r: number;
572
+ stops: SvgGradientStopDef[];
573
+ }
574
+ /** Either flavour of SVG gradient produced by {@link buildSvgGradientDef}. */
575
+ type SvgGradientDef = SvgLinearGradientDef | SvgRadialGradientDef;
576
+ /**
577
+ * An SVG `<pattern>` paint server for a preset pattern OUTLINE.
578
+ *
579
+ * The tile is carried as a data-URI `<image>` rather than inline primitives so
580
+ * every binding can render the `<pattern>` from plain attribute bindings, with
581
+ * no raw-markup injection (which Angular's template sanitiser would fight).
582
+ */
583
+ interface SvgPatternDef {
584
+ kind: 'pattern';
585
+ id: string;
586
+ /** Tile size in user-space px; the pattern repeats on this grid. */
587
+ width: number;
588
+ height: number;
589
+ /** `data:image/svg+xml,…` of one rendered tile. */
590
+ href: string;
591
+ }
592
+
593
+ /**
594
+ * Gradient and pattern OUTLINES (`a:ln/a:gradFill`, `a:ln/a:pattFill`).
595
+ *
596
+ * Every binding paints a shape's outline as a CSS `border`, which can only take
597
+ * a single flat colour. A gradient outline was therefore rendered with the
598
+ * parser's averaged `strokeColor` (two-tone came out flat, fade-to-transparent
599
+ * came out opaque), and a patterned outline with the pattern's foreground alone,
600
+ * so the hatching disappeared entirely.
601
+ *
602
+ * CSS has no way to fix either in place - `border-image` ignores `border-radius`
603
+ * and cannot follow a `clip-path` - so the outline is instead stroked as a real
604
+ * SVG path laid over the element, using the shape's own resolved geometry. This
605
+ * module turns an element into everything a binding needs for that overlay; the
606
+ * bindings supply only the ~10 lines of view layer.
607
+ */
608
+
609
+ /** The paint server an outline is stroked with: a gradient or a pattern. */
610
+ type StrokeOutlinePaint = SvgGradientDef | SvgPatternDef;
611
+ /** Everything needed to stroke one shape's outline as an SVG overlay. */
612
+ interface StrokeOutline {
613
+ /** Path data in the element's own pixel space (viewBox `0 0 width height`). */
614
+ d: string;
615
+ /** Paint server to define in `<defs>` and reference from the path's `stroke`. */
616
+ paint: StrokeOutlinePaint;
617
+ strokeWidth: number;
618
+ /** SVG `stroke-dasharray`, or `undefined` for a solid line. */
619
+ dashArray: string | undefined;
620
+ lineCap: 'butt' | 'round' | 'square';
621
+ lineJoin: 'round' | 'bevel' | 'miter';
622
+ }
623
+
514
624
  /**
515
625
  * Stroke/dash normalisation, compound-line box-shadow generation, SVG
516
626
  * dasharray, element transform strings, and drawing-unit parsing. Pure
@@ -1688,6 +1798,127 @@ interface CellCoord {
1688
1798
  */
1689
1799
  declare function setCellText(element: TablePptxElement, rowIndex: number, colIndex: number, text: string): TablePptxElement;
1690
1800
 
1801
+ /**
1802
+ * table-data-grid.ts: framework-agnostic render model for the inspector's table
1803
+ * data grid (the spreadsheet-like editor that edits table cell TEXT from the
1804
+ * sidebar, as opposed to on-canvas cell editing).
1805
+ *
1806
+ * The matching mutations live in `table-data-grid-ops.ts`; both are exported
1807
+ * from the package barrel and are one feature in two files, split only to stay
1808
+ * inside the repo's 300 LOC ceiling.
1809
+ *
1810
+ * WHY this model exists rather than each binding reading `tableData` directly:
1811
+ * the grid is the table analogue of the chart data grid every binding already
1812
+ * ships, and without a shared layer all five re-derive the same two awkward
1813
+ * details and drift apart.
1814
+ *
1815
+ * 1. **Ragged rows.** `PptxTableData.rows[i].cells` is not guaranteed to be
1816
+ * `columnWidths.length` long (merged spans and malformed decks both produce
1817
+ * short rows). A view that iterates `row.cells` renders a lopsided grid and
1818
+ * silently hides the trailing cells. `buildTableDataGrid` normalises every
1819
+ * row to exactly `colCount` entries so the view can iterate blindly.
1820
+ * 2. **The last-row/last-column floor.** A table may not be reduced to zero
1821
+ * rows or zero columns, so remove controls must be disabled at 1. Exposing
1822
+ * `canRemoveRow` / `canRemoveColumn` on the model keeps that rule in one
1823
+ * place instead of in five templates.
1824
+ *
1825
+ * @module render/table-data-grid
1826
+ */
1827
+
1828
+ /** One editable cell in the inspector grid, carrying its own coordinates. */
1829
+ interface TableDataGridCell {
1830
+ /** Zero-based row index within the table. */
1831
+ rowIndex: number;
1832
+ /** Zero-based column index within the table. */
1833
+ colIndex: number;
1834
+ /** Current plain-text content, `''` when the underlying cell is missing. */
1835
+ text: string;
1836
+ }
1837
+ /** One row of the inspector grid, normalised to the table's column count. */
1838
+ interface TableDataGridRow {
1839
+ /** Zero-based row index within the table. */
1840
+ rowIndex: number;
1841
+ /** Exactly `colCount` cells, left to right. */
1842
+ cells: TableDataGridCell[];
1843
+ }
1844
+ /** Everything a binding's table-data-grid view needs to render itself. */
1845
+ interface TableDataGridModel {
1846
+ /** Number of rows in the table. */
1847
+ rowCount: number;
1848
+ /** Number of columns, taken from `columnWidths` (the authoritative count). */
1849
+ colCount: number;
1850
+ /** `[0, 1, ... colCount - 1]`, so templates can render column headers. */
1851
+ colIndices: number[];
1852
+ /** Normalised rows; safe to iterate without bounds checks. */
1853
+ rows: TableDataGridRow[];
1854
+ /** False when removing a row would empty the table (or there is no data). */
1855
+ canRemoveRow: boolean;
1856
+ /** False when removing a column would empty the table (or there is no data). */
1857
+ canRemoveColumn: boolean;
1858
+ }
1859
+
1860
+ /**
1861
+ * table-data-grid-ops.ts: element-level, immutable row/column/cell operations
1862
+ * behind the inspector's table data grid.
1863
+ *
1864
+ * Split out of `table-data-grid.ts` (which owns the render model and its types)
1865
+ * to keep both files inside the repo's 300 LOC ceiling. Import either through
1866
+ * the package barrel; they are one feature in two files.
1867
+ *
1868
+ * WHY these wrap the primitives in `table-layout` rather than calling them
1869
+ * directly from a view:
1870
+ *
1871
+ * 1. **The "append / remove last" dance.** The grid's header buttons operate on
1872
+ * the END of the table, but the primitives are positional
1873
+ * (`insertTableRow(td, idx, 'below')`). Without these wrappers every binding
1874
+ * re-writes the same `count - 1` clamp and gets it wrong for an empty table.
1875
+ * 2. **rawXml synchronisation**, which is load-bearing: see {@link withTableData}.
1876
+ *
1877
+ * They take and return a whole `TablePptxElement` so an inspector can hand the
1878
+ * result straight to the binding's `updateElement` edit path as a single history
1879
+ * entry. The underlying transforms are the merge-AWARE ones in `table-layout`,
1880
+ * so existing merge spans are adjusted rather than destroyed.
1881
+ *
1882
+ * Every function is pure: the input element is never mutated.
1883
+ *
1884
+ * @module render/table-data-grid-ops
1885
+ */
1886
+
1887
+ /**
1888
+ * Insert a blank row above or below `rowIdx`, preserving merge spans.
1889
+ *
1890
+ * @param element - The source table element (not mutated).
1891
+ * @param rowIdx - Zero-based reference row.
1892
+ * @param position - Whether the new row goes above or below the reference row.
1893
+ * @returns A new element with the row inserted.
1894
+ */
1895
+ declare function insertTableElementRow(element: TablePptxElement, rowIdx: number, position: 'above' | 'below'): TablePptxElement;
1896
+ /**
1897
+ * Remove the row at `rowIdx`, preserving merge spans. No-op on the last row.
1898
+ *
1899
+ * @param element - The source table element (not mutated).
1900
+ * @param rowIdx - Zero-based row to remove.
1901
+ * @returns A new element with the row removed.
1902
+ */
1903
+ declare function removeTableElementRow(element: TablePptxElement, rowIdx: number): TablePptxElement;
1904
+ /**
1905
+ * Insert a blank column left or right of `colIdx`, preserving merge spans.
1906
+ *
1907
+ * @param element - The source table element (not mutated).
1908
+ * @param colIdx - Zero-based reference column.
1909
+ * @param position - Whether the new column goes left or right of the reference.
1910
+ * @returns A new element with the column inserted.
1911
+ */
1912
+ declare function insertTableElementColumn(element: TablePptxElement, colIdx: number, position: 'left' | 'right'): TablePptxElement;
1913
+ /**
1914
+ * Remove the column at `colIdx`, preserving merge spans. No-op on the last one.
1915
+ *
1916
+ * @param element - The source table element (not mutated).
1917
+ * @param colIdx - Zero-based column to remove.
1918
+ * @returns A new element with the column removed.
1919
+ */
1920
+ declare function removeTableElementColumn(element: TablePptxElement, colIdx: number): TablePptxElement;
1921
+
1691
1922
  /**
1692
1923
  * table-style-presets.ts - framework-agnostic table style preset catalogue.
1693
1924
  *
@@ -2322,6 +2553,57 @@ declare function computeSnap(box: SnapBox, others: readonly SnapBox[], threshold
2322
2553
  */
2323
2554
  declare function snapToGridStep(value: number, step: number): number;
2324
2555
 
2556
+ /**
2557
+ * Ruler tick-generation + constants shared by the React, Vue, and Angular
2558
+ * editors. Pure (unit-testable); each binding renders the generated ticks.
2559
+ */
2560
+ /** CSS pixels per inch at 96 dpi. */
2561
+ declare const PX_PER_INCH = 96;
2562
+ /** CSS pixels per centimetre (96 / 2.54). */
2563
+ declare const PX_PER_CM: number;
2564
+ /** Ruler strip thickness in CSS pixels. */
2565
+ declare const RULER_THICKNESS = 20;
2566
+ /** Font size for numbers on the ruler. */
2567
+ declare const RULER_FONT_SIZE = 10;
2568
+ /** The unit system used for ruler display. */
2569
+ type RulerUnit = 'inches' | 'centimetres';
2570
+ interface Tick {
2571
+ /** Position along the ruler in scaled CSS pixels from the slide origin. */
2572
+ position: number;
2573
+ /** Label to display (empty for minor ticks). */
2574
+ label: string;
2575
+ /** Whether this is a major (numbered) tick. */
2576
+ isMajor: boolean;
2577
+ }
2578
+ /**
2579
+ * Generate tick marks for a single ruler axis.
2580
+ *
2581
+ * @param slideLengthPx The slide dimension (width or height) in CSS px.
2582
+ * @param scale The current editor scale.
2583
+ * @param unit Ruler unit system.
2584
+ */
2585
+ declare function generateTicks(slideLengthPx: number, scale: number, unit: RulerUnit): Tick[];
2586
+ /**
2587
+ * Resolve a drag that started on a ruler strip into a new guide position.
2588
+ *
2589
+ * Shared because every binding that supports "drag off the ruler to create a
2590
+ * guide" needs the exact same three rules, and they are easy to get subtly
2591
+ * wrong per binding: the pointer must have left the strip (otherwise a plain
2592
+ * click on the ruler would drop a guide on the slide edge), the offset is
2593
+ * measured from the strip's own leading edge so the strip thickness has to be
2594
+ * subtracted before un-scaling, and a guide dropped outside the slide is
2595
+ * discarded rather than clamped (PowerPoint drops it too).
2596
+ *
2597
+ * @param pointerOffsetPx Pointer distance, in screen px, from the leading edge
2598
+ * of the ruler strip (top for the horizontal ruler,
2599
+ * left for the vertical one).
2600
+ * @param scale Current editor scale (fitScale * userZoom).
2601
+ * @param slideLengthPx Slide dimension on the guide's axis, unscaled.
2602
+ * @returns The slide-local position in unscaled px, or `null` when the drag
2603
+ * should not create a guide.
2604
+ */
2605
+ declare function rulerDragToGuidePosition(pointerOffsetPx: number, scale: number, slideLengthPx: number): number | null;
2606
+
2325
2607
  /**
2326
2608
  * Render the n-th (1-based) marker for an OOXML auto-numbering scheme.
2327
2609
  *
@@ -3191,6 +3473,32 @@ declare const SLIDE_TRANSITION_KEYFRAMES = "\n/* \u2500\u2500 Fade \u2500\u2500\
3191
3473
  */
3192
3474
  declare function getSlideTransitionAnimations(type: PptxTransitionType, durationMs: number, direction: string | undefined, orient?: string | undefined, spokes?: number | undefined): SlideTransitionAnimations;
3193
3475
 
3476
+ /**
3477
+ * `slide-transition-options` - the pure option catalogues backing every
3478
+ * binding's slide-transition inspector section.
3479
+ *
3480
+ * WHY this lives in shared: the transition type list, the set of types that
3481
+ * pick an orientation instead of a direction, and the arrow glyph/grid tables
3482
+ * used by the direction picker are all plain data with no framework in them.
3483
+ * They previously sat inside `packages/react`, which meant a binding porting
3484
+ * the section had to retype 24 transition values and 12 arrow glyphs by hand,
3485
+ * and any new OOXML transition type silently reached one binding only. React
3486
+ * now re-exports these from here so there is exactly one list to update.
3487
+ *
3488
+ * NOTE: each option keeps both a plain-ASCII `label` (English fallback for
3489
+ * non-i18n consumers) and an `i18nKey` resolvable through each binding's
3490
+ * translator, matching the `{ value, i18nKey }` convention used elsewhere.
3491
+ *
3492
+ * @module render/slide-transition-options
3493
+ */
3494
+
3495
+ /** A selectable slide-transition type with its English label and i18n key. */
3496
+ interface SlideTransitionOptionEntry {
3497
+ value: NonNullable<PptxSlideTransition['type']>;
3498
+ label: string;
3499
+ i18nKey: string;
3500
+ }
3501
+
3194
3502
  /** A node rendered as an SVG rect (rounded or flat). */
3195
3503
  interface RenderedRectNode {
3196
3504
  kind: 'rect';
@@ -3962,6 +4270,69 @@ declare function sampleColorFromSlide(clientX: number, clientY: number): Eyedrop
3962
4270
  */
3963
4271
  declare function pickColorByClickFallback(): Promise<string | null>;
3964
4272
 
4273
+ /** Whether the reading view is on screen, and which slide it is showing. */
4274
+ interface ReadingViewState {
4275
+ open: boolean;
4276
+ /** Zero-based index into the deck's visible slides. */
4277
+ slideIndex: number;
4278
+ }
4279
+ /** A navigation intent a binding can raise from a key, a click or a tap. */
4280
+ type ReadingViewCommand = {
4281
+ command: 'next';
4282
+ } | {
4283
+ command: 'previous';
4284
+ } | {
4285
+ command: 'first';
4286
+ } | {
4287
+ command: 'last';
4288
+ }
4289
+ /** Jump to a zero-based slide index. */
4290
+ | {
4291
+ command: 'goto';
4292
+ slideIndex: number;
4293
+ } | {
4294
+ command: 'exit';
4295
+ } | {
4296
+ command: 'none';
4297
+ };
4298
+
4299
+ /**
4300
+ * The one definition of what the canvas context menu contains.
4301
+ *
4302
+ * The five menus were written five times from scratch rather than ported from a
4303
+ * single item list, and their command sets drifted exactly as you would expect:
4304
+ * Vue had no Bring to Front, Angular had no Edit Hyperlink or Group, Svelte had
4305
+ * no table commands at all, and Vanilla had no menu whatsoever. Nothing crashes
4306
+ * when a binding omits a command, so each omission was only ever discoverable by
4307
+ * the user who right-clicked expecting it.
4308
+ *
4309
+ * This module owns the command ids, their labels, their order, the separators
4310
+ * between the groups, and the rules deciding which are offered. A binding
4311
+ * supplies the context (what was clicked, what is selected) and renders the
4312
+ * result; it does not decide what is in the menu. Adding a command here adds it
4313
+ * to all five at once, which is the point.
4314
+ *
4315
+ * The operations themselves stay in the bindings: each already owns clipboard,
4316
+ * z-order, grouping, comments, hyperlink and table mutation, and routing them is
4317
+ * a switch over {@link ContextMenuCommandId}.
4318
+ *
4319
+ * @module render/context-menu-commands
4320
+ */
4321
+ /** Every command a canvas context menu can offer, in no particular order. */
4322
+ type ContextMenuCommandId = 'copy' | 'cut' | 'paste' | 'duplicate' | 'bring-forward' | 'send-backward' | 'bring-front' | 'send-back' | 'ai-ask' | 'ai-fix' | 'comment' | 'hyperlink' | 'table-insert-row-above' | 'table-insert-row-below' | 'table-delete-row' | 'table-insert-col-left' | 'table-insert-col-right' | 'table-delete-col' | 'table-merge-selected' | 'table-merge-right' | 'table-merge-down' | 'table-split' | 'group' | 'ungroup' | 'delete';
4323
+ /** One rendered entry: a command, plus how it is presented. */
4324
+ interface ContextMenuEntry {
4325
+ id: ContextMenuCommandId;
4326
+ /** i18n key; the binding translates it with its own translator. */
4327
+ labelKey: string;
4328
+ /** Draw a rule above this entry (it opens a new group of commands). */
4329
+ separatorBefore?: boolean;
4330
+ /** Destructive: tinted red, as PowerPoint tints Delete. */
4331
+ danger?: boolean;
4332
+ /** Offered but not usable right now (greyed out, still announced). */
4333
+ disabled?: boolean;
4334
+ }
4335
+
3965
4336
  /**
3966
4337
  * smart-art-presets.ts: the SmartArt insert-gallery catalogue, shared across
3967
4338
  * bindings. Pure data + types; consumed by each binding's insert dialog and
@@ -4146,6 +4517,49 @@ declare function issueTypeLabel(type: AccessibilityIssueType): string;
4146
4517
  */
4147
4518
  declare function issueTrackKey(issue: AccessibilityIssue, index: number): string;
4148
4519
 
4520
+ /**
4521
+ * `element-action-options` - the option catalogue for an element's "Action
4522
+ * Settings" inspector panel (PowerPoint's Insert > Action dialog).
4523
+ *
4524
+ * WHY shared: the mapping from `ElementActionType` to a translation key is
4525
+ * plain data that every binding's action panel needs verbatim, and the two
4526
+ * types that take an extra input (`url`, `slide`) are a rule, not a rendering
4527
+ * decision. Keeping the list here means adding a new action kind updates all
4528
+ * five bindings at once instead of five hand-typed copies drifting apart.
4529
+ *
4530
+ * @module render/element-action-options
4531
+ */
4532
+
4533
+ /** One entry of the action-type select, with its dictionary key. */
4534
+ interface ElementActionOption {
4535
+ value: ElementActionType;
4536
+ labelKey: string;
4537
+ }
4538
+
4539
+ /**
4540
+ * `tag-collections` - pure list surgery for the inspector's Tags section
4541
+ * (`ppt/tags/*.xml`, PowerPoint's programmatic name/value metadata).
4542
+ *
4543
+ * WHY shared: a tag lives at a two-level address (which collection, then which
4544
+ * tag inside it) while the UI shows one flat list, so every add/edit/delete has
4545
+ * to map a flat row back onto the nested model. That mapping is identical in
4546
+ * every binding and is exactly the kind of off-by-one-prone code that must not
4547
+ * be retyped per framework. The functions below are immutable: they return new
4548
+ * arrays so a caller can push the result straight into an undoable commit.
4549
+ *
4550
+ * @module render/tag-collections
4551
+ */
4552
+
4553
+ /** A tag paired with its address inside the nested collection model. */
4554
+ interface FlatTagRow {
4555
+ name: string;
4556
+ value: string;
4557
+ /** Index of the owning collection in the `PptxTagCollection[]`. */
4558
+ colIdx: number;
4559
+ /** Index of the tag inside that collection's `tags` array. */
4560
+ tagIdx: number;
4561
+ }
4562
+
4149
4563
  /**
4150
4564
  * Pure, framework-agnostic helpers for freehand ink drawing, shared by every
4151
4565
  * binding. No framework imports, so these can be unit-tested without TestBed.
@@ -4484,9 +4898,12 @@ interface BackstageTemplate {
4484
4898
  id: string;
4485
4899
  name: string;
4486
4900
  description: string;
4901
+ /** Dictionary key for `name`, so bindings can render a translated gallery. */
4902
+ nameKey: string;
4903
+ /** Dictionary key for `description`. */
4904
+ descriptionKey: string;
4487
4905
  preview: string;
4488
4906
  }
4489
- declare function formatBackstageDate(timestamp: number, now?: number): string;
4490
4907
  declare function formatBackstageSize(bytes: number): string;
4491
4908
 
4492
4909
  /** Framework-neutral virtual-list range used by every thumbnail sidebar. */
@@ -4737,20 +5154,6 @@ interface ViewerOptions {
4737
5154
  type ViewerOptionsGroupId = keyof ViewerOptions;
4738
5155
  type ViewerOptionPrimitive = boolean | number | string;
4739
5156
 
4740
- /**
4741
- * Quick Access Toolbar command catalog and list-editing helpers, backing the
4742
- * Options > Quick Access Toolbar pane and the title-bar QAT strip.
4743
- *
4744
- * Ids map onto actions every binding already exposes; each binding resolves
4745
- * an id to its own icon + handler when rendering the strip.
4746
- */
4747
- interface QuickAccessCommandDefinition {
4748
- id: string;
4749
- labelKey: string;
4750
- /** Logical icon name bindings map to their icon set. */
4751
- icon: string;
4752
- }
4753
-
4754
5157
  interface ViewerAddinStatus {
4755
5158
  /** Addin id -> whether the capability is active in this host. */
4756
5159
  [addinId: string]: boolean | undefined;
@@ -6276,8 +6679,14 @@ declare class EditorStateService {
6276
6679
  addElement(slideIndex: number, element: PptxElement): void;
6277
6680
  /** Patch slide-level properties (background, notes, …); one history entry. */
6278
6681
  updateSlide(slideIndex: number, patch: Partial<PptxSlide>): void;
6279
- /** Insert a blank slide after `afterIndex` (records history). */
6280
- addSlide(afterIndex: number): void;
6682
+ /**
6683
+ * Insert a blank slide after `afterIndex` (records history).
6684
+ *
6685
+ * @param layoutPath - Package path of the slide layout the new slide should
6686
+ * inherit from, as offered by the Home tab's "New Slide" split button.
6687
+ * Omitted for a plain blank slide, which is what the button itself does.
6688
+ */
6689
+ addSlide(afterIndex: number, layoutPath?: string): void;
6281
6690
  /** Delete a slide (keeps at least one; records history). */
6282
6691
  deleteSlide(index: number): void;
6283
6692
  /** Duplicate a slide, inserting the copy after it (records history). */
@@ -6457,6 +6866,13 @@ declare class LoadContentService {
6457
6866
  readonly notesCanvasSize: _angular_core.WritableSignal<CanvasSize | undefined>;
6458
6867
  /** Custom document properties (used for `docproperty` field substitution). */
6459
6868
  readonly customProperties: _angular_core.WritableSignal<PptxCustomProperty[]>;
6869
+ /**
6870
+ * `ppt/tags/*.xml` name/value metadata, editable from the inspector's TAGS
6871
+ * card. Tags are how add-ins and automation stamp machine-readable data onto
6872
+ * a deck, so they are carried through save (see {@link saveSlides}) rather
6873
+ * than silently dropped.
6874
+ */
6875
+ readonly tagCollections: _angular_core.WritableSignal<PptxTagCollection[]>;
6460
6876
  /** Header/footer settings (footer/header/date-time text + format) for field substitution. */
6461
6877
  readonly headerFooter: _angular_core.WritableSignal<PptxHeaderFooter | undefined>;
6462
6878
  /** Whether the presentation contains digital signatures. */
@@ -6862,8 +7278,18 @@ declare function getContainerStyle(el: PptxElement, zIndex: number): StyleMap;
6862
7278
  */
6863
7279
  declare function getShapeFillStrokeStyle(el: PptxElement, parentGroupFill?: ShapeStyle, animatesFill?: boolean, animatesStroke?: boolean): StyleMap;
6864
7280
  /**
6865
- * Text block style for elements that carry text. Mirrors the essentials of the
6866
- * React `getTextStyleForElement`.
7281
+ * Text block style for elements that carry text.
7282
+ *
7283
+ * A thin adapter over the shared {@link buildTextBlockStyle}, which React
7284
+ * renders from too. This used to be a hand-ported copy of React's builder, and
7285
+ * the copy had silently lost `a:normAutofit` (a shrink-to-fit title painted 43%
7286
+ * too large), `a:bodyPr/@wrap="none"` (a no-wrap line wrapped to three), the
7287
+ * default font declaration, the italic padding nudge and the body
7288
+ * margin/indent pair.
7289
+ *
7290
+ * The shared record is camelCase; `[ngStyle]` maps elsewhere in this binding
7291
+ * are kebab-case, so it is converted rather than mixing both conventions in one
7292
+ * merged map (`warpedTextStyle` merges this with the 3D scene style).
6867
7293
  */
6868
7294
  declare function getTextBlockStyle(el: PptxElement): StyleMap;
6869
7295
  /** Resolve a displayable image source for picture/image/media poster frames. */
@@ -7976,6 +8402,8 @@ declare class ViewerZoomService {
7976
8402
  readonly zoom: _angular_core.WritableSignal<number>;
7977
8403
  /** {@link zoom} rounded to a whole percentage for display. */
7978
8404
  readonly zoomPercent: _angular_core.Signal<number>;
8405
+ /** Jump to an explicit zoom level, clamped by the shared bounds. */
8406
+ setZoom(level: number): void;
7979
8407
  zoomIn(): void;
7980
8408
  zoomOut(): void;
7981
8409
  zoomReset(): void;
@@ -8219,6 +8647,12 @@ declare class PowerPointViewerComponent {
8219
8647
  protected readonly rootStyle: _angular_core.Signal<Record<string, string>>;
8220
8648
  /** Slide-sorter grid overlay visibility. */
8221
8649
  protected readonly showSorter: _angular_core.WritableSignal<boolean>;
8650
+ /**
8651
+ * Reading View visibility: the deck at full window size with the editor
8652
+ * chrome cut back to a nav bar. Not the slide show (no fullscreen, no
8653
+ * pointer tools, no presenter console).
8654
+ */
8655
+ protected readonly showReadingView: _angular_core.WritableSignal<boolean>;
8222
8656
  /** Full-canvas master editor visibility and active target. */
8223
8657
  protected readonly showMasterView: _angular_core.WritableSignal<boolean>;
8224
8658
  protected readonly masterViewTab: _angular_core.WritableSignal<MasterViewTab>;
@@ -8229,7 +8663,7 @@ declare class PowerPointViewerComponent {
8229
8663
  /** Whether periodic autosave is enabled (title-bar AutoSave toggle; default on). */
8230
8664
  protected readonly autosaveEnabled: _angular_core.WritableSignal<boolean>;
8231
8665
  /** Active drawing tool (from the ribbon Draw tab). */
8232
- protected readonly activeDrawTool: _angular_core.WritableSignal<"pen" | "highlighter" | "eraser" | "select" | "freeform">;
8666
+ protected readonly activeDrawTool: _angular_core.WritableSignal<"select" | "pen" | "highlighter" | "eraser" | "freeform">;
8233
8667
  /** Active ink stroke colour. */
8234
8668
  protected readonly activeDrawColor: _angular_core.WritableSignal<string>;
8235
8669
  /** Active ink stroke width in stage pixels. */
@@ -8303,6 +8737,12 @@ declare class PowerPointViewerComponent {
8303
8737
  protected updateNotesMaster(master: PptxNotesMaster): void;
8304
8738
  protected updateHandoutMaster(master: PptxHandoutMaster): void;
8305
8739
  goTo(index: number): void;
8740
+ /**
8741
+ * Leave Reading View on the slide the reader ended on, which is what leaving
8742
+ * any PowerPoint view does: the editor should not snap back to wherever it
8743
+ * was when the reader entered.
8744
+ */
8745
+ protected closeReadingView(slideIndex: number): void;
8306
8746
  goPrev(): void;
8307
8747
  protected onCreatePresentation(templateId: string): void;
8308
8748
  /**
@@ -8337,7 +8777,7 @@ declare class PowerPointViewerComponent {
8337
8777
  canRedo(): boolean;
8338
8778
  /** Get the current zoom level (1 = 100%). */
8339
8779
  getZoom(): number;
8340
- /** Set the zoom level (clamped to min/max bounds). */
8780
+ /** Set the zoom level (clamped by the shared cross-binding bounds). */
8341
8781
  setZoom(level: number): void;
8342
8782
  /** Zoom in by one step. */
8343
8783
  zoomIn(): void;
@@ -8368,6 +8808,14 @@ declare class PowerPointViewerComponent {
8368
8808
  protected onContextMenuAskAi(): void;
8369
8809
  /** Context-menu "Fix with AI": scope + open the assistant with a prefilled directive. */
8370
8810
  protected onContextMenuFixAi(): void;
8811
+ /**
8812
+ * Context-menu "Add Comment": show the comments panel, mirroring React's
8813
+ * `setIsInspectorPaneOpen(true) + setSidebarPanelMode('comments')`. It sets
8814
+ * the panel rather than toggling it, because choosing Add Comment while the
8815
+ * panel is already open must not close it; the mobile swipe-dismiss flag is
8816
+ * cleared for the same reason.
8817
+ */
8818
+ protected onContextMenuAddComment(): void;
8371
8819
  /** Get the IDs of currently selected elements. */
8372
8820
  getSelectedElementIds(): string[];
8373
8821
  /** Programmatically select elements by their IDs. */
@@ -8606,6 +9054,11 @@ declare class ExportService {
8606
9054
  * Provided alongside `LoadContentService` in the viewer subtree, so renderers
8607
9055
  * used outside the viewer (thumbnails, export) that inject it `optional` simply
8608
9056
  * fall back to no substitution.
9057
+ *
9058
+ * The assembly itself (including the slide-title resolution, which used to be a
9059
+ * local `placeholderType` scan here and so never resolved a title on a real
9060
+ * `.pptx`) lives in `pptx-viewer-shared`, so all five bindings build the same
9061
+ * context; this service is only the signals adapter.
8609
9062
  */
8610
9063
  declare class FieldContextService {
8611
9064
  private readonly load;
@@ -8706,6 +9159,10 @@ interface KeyboardHost {
8706
9159
  readonly canEdit: () => boolean;
8707
9160
  readonly presenting: () => boolean;
8708
9161
  readonly activeSlideIndex: () => number;
9162
+ /** Go back one slide (the arrows page the deck when nothing is selected). */
9163
+ readonly goPrev?: () => void;
9164
+ /** Go forward one slide. */
9165
+ readonly goNext?: () => void;
8709
9166
  }
8710
9167
  declare class ViewerKeyboardService {
8711
9168
  private readonly editor;
@@ -8715,6 +9172,13 @@ declare class ViewerKeyboardService {
8715
9172
  /** Wire the host accessors (called once from the component constructor). */
8716
9173
  bind(host: KeyboardHost): void;
8717
9174
  handleKeyDown(event: KeyboardEvent): void;
9175
+ /**
9176
+ * Escape unwinds the transient chrome one layer at a time: an armed format
9177
+ * painter first (it is modal over the pointer), then the shortcut cheat
9178
+ * sheet. Before this the branch stopped after the painter, so the panel "?"
9179
+ * had just opened stayed on screen with no key that could dismiss it.
9180
+ */
9181
+ private handleEscape;
8718
9182
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerKeyboardService, never>;
8719
9183
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerKeyboardService>;
8720
9184
  }
@@ -9335,6 +9799,8 @@ declare class RibbonComponent {
9335
9799
  readonly a11y: _angular_core.OutputEmitterRef<void>;
9336
9800
  readonly link: _angular_core.OutputEmitterRef<void>;
9337
9801
  readonly openSorter: _angular_core.OutputEmitterRef<void>;
9802
+ /** View tab > Reading View: the deck full-window, not the slide show. */
9803
+ readonly openReadingView: _angular_core.OutputEmitterRef<void>;
9338
9804
  readonly openMasterView: _angular_core.OutputEmitterRef<void>;
9339
9805
  readonly toggleNotes: _angular_core.OutputEmitterRef<void>;
9340
9806
  readonly toggleFormatPainter: _angular_core.OutputEmitterRef<void>;
@@ -9393,7 +9859,7 @@ declare class RibbonComponent {
9393
9859
  /** Forward the Review proofing toggle to the viewer-owned live state. */
9394
9860
  protected setSpellCheck(enabled: boolean): void;
9395
9861
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonComponent, never>;
9396
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonComponent, "pptx-ribbon", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; "zoomPercent": { "alias": "zoomPercent"; "required": false; "isSignal": true; }; "formatPainterActive": { "alias": "formatPainterActive"; "required": false; "isSignal": true; }; "canActivateFormatPainter": { "alias": "canActivateFormatPainter"; "required": false; "isSignal": true; }; "exporting": { "alias": "exporting"; "required": false; "isSignal": true; }; "hasMacros": { "alias": "hasMacros"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "eyedropperActive": { "alias": "eyedropperActive"; "required": false; "isSignal": true; }; "themeGalleryOpen": { "alias": "themeGalleryOpen"; "required": false; "isSignal": true; }; "sidebarCollapsed": { "alias": "sidebarCollapsed"; "required": false; "isSignal": true; }; "inspectorOpen": { "alias": "inspectorOpen"; "required": false; "isSignal": true; }; "commentsOpen": { "alias": "commentsOpen"; "required": false; "isSignal": true; }; "commentCount": { "alias": "commentCount"; "required": false; "isSignal": true; }; "findOpen": { "alias": "findOpen"; "required": false; "isSignal": true; }; "collabConnected": { "alias": "collabConnected"; "required": false; "isSignal": true; }; "connectedCount": { "alias": "connectedCount"; "required": false; "isSignal": true; }; "spellCheckEnabled": { "alias": "spellCheckEnabled"; "required": false; "isSignal": true; }; "showSubtitles": { "alias": "showSubtitles"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; "aiEnabled": { "alias": "aiEnabled"; "required": false; "isSignal": true; }; "aiPanelOpen": { "alias": "aiPanelOpen"; "required": false; "isSignal": true; }; "accountAuth": { "alias": "accountAuth"; "required": false; "isSignal": true; }; }, { "prev": "prev"; "next": "next"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "zoomReset": "zoomReset"; "find": "find"; "present": "present"; "presenter": "presenter"; "record": "record"; "presentFromBeginning": "presentFromBeginning"; "rehearseTimings": "rehearseTimings"; "toggleSubtitles": "toggleSubtitles"; "openSubtitleSettings": "openSubtitleSettings"; "recordFromBeginning": "recordFromBeginning"; "recordFromCurrent": "recordFromCurrent"; "spellCheckChange": "spellCheckChange"; "share": "share"; "broadcast": "broadcast"; "openFile": "openFile"; "openRecentFile": "openRecentFile"; "createPresentation": "createPresentation"; "save": "save"; "savePpsx": "savePpsx"; "savePptm": "savePptm"; "packageForSharing": "packageForSharing"; "toggleSidebar": "toggleSidebar"; "toggleAiPanel": "toggleAiPanel"; "signatures": "signatures"; "info": "info"; "print": "print"; "comments": "comments"; "a11y": "a11y"; "link": "link"; "openSorter": "openSorter"; "openMasterView": "openMasterView"; "toggleNotes": "toggleNotes"; "toggleFormatPainter": "toggleFormatPainter"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "copySlideAsImage": "copySlideAsImage"; "replace": "replace"; "toggleInspector": "toggleInspector"; "drawToolChange": "drawToolChange"; "toggleThemeGallery": "toggleThemeGallery"; "toggleGrid": "toggleGrid"; "toggleRulers": "toggleRulers"; "toggleGuides": "toggleGuides"; "toggleSelectionPane": "toggleSelectionPane"; "openCustomShows": "openCustomShows"; "toggleSnapToGrid": "toggleSnapToGrid"; "toggleSnapToShape": "toggleSnapToShape"; "addGuide": "addGuide"; "zoomToFit": "zoomToFit"; "toggleEyedropper": "toggleEyedropper"; "openSmartArtDialog": "openSmartArtDialog"; "openEquationDialog": "openEquationDialog"; "openSetUpSlideShow": "openSetUpSlideShow"; "openCompare": "openCompare"; "openPassword": "openPassword"; "openFontEmbedding": "openFontEmbedding"; "openVersionHistory": "openVersionHistory"; "openShortcuts": "openShortcuts"; "openSettings": "openSettings"; }, never, never, true, never>;
9862
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonComponent, "pptx-ribbon", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; "zoomPercent": { "alias": "zoomPercent"; "required": false; "isSignal": true; }; "formatPainterActive": { "alias": "formatPainterActive"; "required": false; "isSignal": true; }; "canActivateFormatPainter": { "alias": "canActivateFormatPainter"; "required": false; "isSignal": true; }; "exporting": { "alias": "exporting"; "required": false; "isSignal": true; }; "hasMacros": { "alias": "hasMacros"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "eyedropperActive": { "alias": "eyedropperActive"; "required": false; "isSignal": true; }; "themeGalleryOpen": { "alias": "themeGalleryOpen"; "required": false; "isSignal": true; }; "sidebarCollapsed": { "alias": "sidebarCollapsed"; "required": false; "isSignal": true; }; "inspectorOpen": { "alias": "inspectorOpen"; "required": false; "isSignal": true; }; "commentsOpen": { "alias": "commentsOpen"; "required": false; "isSignal": true; }; "commentCount": { "alias": "commentCount"; "required": false; "isSignal": true; }; "findOpen": { "alias": "findOpen"; "required": false; "isSignal": true; }; "collabConnected": { "alias": "collabConnected"; "required": false; "isSignal": true; }; "connectedCount": { "alias": "connectedCount"; "required": false; "isSignal": true; }; "spellCheckEnabled": { "alias": "spellCheckEnabled"; "required": false; "isSignal": true; }; "showSubtitles": { "alias": "showSubtitles"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; "aiEnabled": { "alias": "aiEnabled"; "required": false; "isSignal": true; }; "aiPanelOpen": { "alias": "aiPanelOpen"; "required": false; "isSignal": true; }; "accountAuth": { "alias": "accountAuth"; "required": false; "isSignal": true; }; }, { "prev": "prev"; "next": "next"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "zoomReset": "zoomReset"; "find": "find"; "present": "present"; "presenter": "presenter"; "record": "record"; "presentFromBeginning": "presentFromBeginning"; "rehearseTimings": "rehearseTimings"; "toggleSubtitles": "toggleSubtitles"; "openSubtitleSettings": "openSubtitleSettings"; "recordFromBeginning": "recordFromBeginning"; "recordFromCurrent": "recordFromCurrent"; "spellCheckChange": "spellCheckChange"; "share": "share"; "broadcast": "broadcast"; "openFile": "openFile"; "openRecentFile": "openRecentFile"; "createPresentation": "createPresentation"; "save": "save"; "savePpsx": "savePpsx"; "savePptm": "savePptm"; "packageForSharing": "packageForSharing"; "toggleSidebar": "toggleSidebar"; "toggleAiPanel": "toggleAiPanel"; "signatures": "signatures"; "info": "info"; "print": "print"; "comments": "comments"; "a11y": "a11y"; "link": "link"; "openSorter": "openSorter"; "openReadingView": "openReadingView"; "openMasterView": "openMasterView"; "toggleNotes": "toggleNotes"; "toggleFormatPainter": "toggleFormatPainter"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "copySlideAsImage": "copySlideAsImage"; "replace": "replace"; "toggleInspector": "toggleInspector"; "drawToolChange": "drawToolChange"; "toggleThemeGallery": "toggleThemeGallery"; "toggleGrid": "toggleGrid"; "toggleRulers": "toggleRulers"; "toggleGuides": "toggleGuides"; "toggleSelectionPane": "toggleSelectionPane"; "openCustomShows": "openCustomShows"; "toggleSnapToGrid": "toggleSnapToGrid"; "toggleSnapToShape": "toggleSnapToShape"; "addGuide": "addGuide"; "zoomToFit": "zoomToFit"; "toggleEyedropper": "toggleEyedropper"; "openSmartArtDialog": "openSmartArtDialog"; "openEquationDialog": "openEquationDialog"; "openSetUpSlideShow": "openSetUpSlideShow"; "openCompare": "openCompare"; "openPassword": "openPassword"; "openFontEmbedding": "openFontEmbedding"; "openVersionHistory": "openVersionHistory"; "openShortcuts": "openShortcuts"; "openSettings": "openSettings"; }, never, never, true, never>;
9397
9863
  }
9398
9864
 
9399
9865
  /** The eight resize-handle positions around a selection box. */
@@ -9477,6 +9943,8 @@ declare class RulerGuidesService {
9477
9943
  readonly rulerGuides: _angular_core.WritableSignal<readonly RulerGuide[]>;
9478
9944
  /** Active guide-drag state (id + axis only), or null when nothing is being dragged. */
9479
9945
  private guideDrag;
9946
+ /** Ruler strip a drag-out-a-guide gesture was armed on, or null. */
9947
+ private rulerDragAxis;
9480
9948
  private host;
9481
9949
  /** Wire the host accessors (called once from the component constructor). */
9482
9950
  bind(host: RulerGuidesHost): void;
@@ -9489,10 +9957,24 @@ declare class RulerGuidesService {
9489
9957
  onGuidePointerDown(event: PointerEvent, id: string, axis: RulerGuide['axis']): void;
9490
9958
  /** Remove a guide (called on guide handle double-click). */
9491
9959
  onGuideDoubleClick(event: MouseEvent, id: string): void;
9492
- /** Drag from the horizontal ruler to create a new horizontal guide (axis:'y'). */
9493
- onHRulerPointerDown(event: PointerEvent): void;
9494
- /** Drag from the vertical ruler to create a new vertical guide (axis:'x'). */
9495
- onVRulerPointerDown(event: PointerEvent): void;
9960
+ /**
9961
+ * Arm a drag-out-a-guide gesture on a ruler strip ('h' = the horizontal strip
9962
+ * along the top, 'v' = the vertical strip down the left).
9963
+ *
9964
+ * Nothing is created yet: the guide is dropped on pointer-UP so a stray click
9965
+ * on the strip cannot leave a guide behind. This is the gesture React, Vue,
9966
+ * Svelte and Vanilla all implement; Angular used to create the guide on
9967
+ * pointer-DOWN off its own stage-relative arithmetic, which both diverged
9968
+ * from the other bindings and duplicated the drop maths.
9969
+ */
9970
+ onRulerPointerDown(axis: 'h' | 'v', event: PointerEvent): void;
9971
+ /**
9972
+ * Resolve an armed ruler drag: drop one guide when the pointer left the strip
9973
+ * and landed on the slide. All three rules (must have left the strip, strip
9974
+ * thickness subtracted before un-scaling, out-of-slide drops discarded) live
9975
+ * in the shared {@link rulerDragToGuidePosition}.
9976
+ */
9977
+ onRulerPointerUp(axis: 'h' | 'v', event: PointerEvent): void;
9496
9978
  /** Update the dragged guide's position. Returns false when no guide drag is in progress (caller should fall through). */
9497
9979
  handlePointerMove(event: PointerEvent): boolean;
9498
9980
  /** End the guide drag. Returns false when no guide drag was in progress (caller should fall through). */
@@ -9501,30 +9983,6 @@ declare class RulerGuidesService {
9501
9983
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<RulerGuidesService>;
9502
9984
  }
9503
9985
 
9504
- /**
9505
- * ruler-ticks.ts: Pure tick-mark generation for the slide canvas's horizontal
9506
- * and vertical ruler strips. No Angular/DOM dependency so it is trivially
9507
- * unit-testable in isolation from `SlideCanvasComponent`.
9508
- */
9509
- /** Height/width (px) of the ruler strips: mirrors React's RULER_THICKNESS. */
9510
- declare const RULER_THICKNESS = 20;
9511
- /** Pixels per inch on the slide canvas (PPTX slides are 10" wide = 960 px). */
9512
- declare const SLIDE_PX_PER_INCH = 96;
9513
- /** A single tick mark on a ruler strip. */
9514
- interface RulerTick {
9515
- /** Position in screen pixels along the ruler. */
9516
- position: number;
9517
- /** Whether this is a major (inch) tick. */
9518
- isMajor: boolean;
9519
- /** Label to display (only on major ticks, every N inches). */
9520
- label: string | null;
9521
- }
9522
- /**
9523
- * Generate ruler tick marks for a given slide dimension and scale.
9524
- * Produces ticks every 1/4 inch (minor) and every inch (major).
9525
- */
9526
- declare function generateRulerTicks(slidePx: number, scale: number): ReadonlyArray<RulerTick>;
9527
-
9528
9986
  /**
9529
9987
  * Slide-scoped DI context: lets leaf renderers (chart, SmartArt) resolve which
9530
9988
  * slide their canvas is displaying without threading an input through every
@@ -9571,6 +10029,12 @@ declare class SlideCanvasComponent implements SlideContext {
9571
10029
  * of the slide viewport. Only active on the interactive canvas.
9572
10030
  */
9573
10031
  readonly showRulers: _angular_core.InputSignal<boolean>;
10032
+ /**
10033
+ * Unit system for the ruler labels. Defaults to inches, as PowerPoint does;
10034
+ * the tick generator (shared with every other binding) also understands
10035
+ * centimetres, which the old Angular-only generator could not express.
10036
+ */
10037
+ readonly rulerUnit: _angular_core.InputSignal<RulerUnit>;
9574
10038
  /**
9575
10039
  * When true, render a static center-crosshair guide overlay on the slide stage.
9576
10040
  * Only active on the interactive canvas.
@@ -9669,7 +10133,7 @@ declare class SlideCanvasComponent implements SlideContext {
9669
10133
  */
9670
10134
  readonly aiPickMode: _angular_core.InputSignal<boolean>;
9671
10135
  /** Active draw tool. When not 'select', pointer gestures draw ink strokes. */
9672
- readonly drawTool: _angular_core.InputSignal<"pen" | "highlighter" | "eraser" | "select" | "freeform">;
10136
+ readonly drawTool: _angular_core.InputSignal<"select" | "pen" | "highlighter" | "eraser" | "freeform">;
9673
10137
  /** Active ink stroke colour (CSS colour string). */
9674
10138
  readonly drawColor: _angular_core.InputSignal<string>;
9675
10139
  /** Active ink stroke width in stage pixels. */
@@ -9885,13 +10349,40 @@ declare class SlideCanvasComponent implements SlideContext {
9885
10349
  * same page do not share the same `<pattern>` definition.
9886
10350
  */
9887
10351
  protected readonly gridPatternId: string;
9888
- /** Tick marks for the horizontal ruler strip (scaled slide width). */
9889
- readonly hRulerTicks: _angular_core.Signal<readonly RulerTick[]>;
10352
+ /**
10353
+ * Tick marks for the horizontal ruler strip (scaled slide width).
10354
+ *
10355
+ * Generated by the SHARED `generateTicks`, which is what gives Angular the
10356
+ * same unit system, subdivision-density collapse at low zoom and label
10357
+ * thinning the other bindings have. A local generator used to live in
10358
+ * `ruler-ticks.ts` with fixed quarter-inch subdivisions and inch-only
10359
+ * labels, so Angular disagreed with every other binding at every zoom.
10360
+ */
10361
+ readonly hRulerTicks: _angular_core.Signal<readonly Tick[]>;
9890
10362
  /** Tick marks for the vertical ruler strip (scaled slide height). */
9891
- readonly vRulerTicks: _angular_core.Signal<readonly RulerTick[]>;
10363
+ readonly vRulerTicks: _angular_core.Signal<readonly Tick[]>;
10364
+ /** Ruler strip thickness / label font size, exposed for the template. */
10365
+ protected readonly rulerThickness = 20;
10366
+ protected readonly rulerFontSize = 10;
10367
+ /**
10368
+ * Bounds of a single selection, highlighted on both strips (PowerPoint shades
10369
+ * the selected shape's span on its rulers). Multi-selection paints nothing,
10370
+ * matching React and Svelte.
10371
+ */
10372
+ private readonly rulerHighlightBounds;
10373
+ /** Selected element extent (scaled px) highlighted on the horizontal strip. */
10374
+ readonly hRulerHighlight: _angular_core.Signal<{
10375
+ start: number;
10376
+ span: number;
10377
+ } | null>;
10378
+ /** Selected element extent (scaled px) highlighted on the vertical strip. */
10379
+ readonly vRulerHighlight: _angular_core.Signal<{
10380
+ start: number;
10381
+ span: number;
10382
+ } | null>;
9892
10383
  readonly stageStyle: _angular_core.Signal<StyleMap>;
9893
10384
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideCanvasComponent, never>;
9894
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideCanvasComponent, "pptx-slide-canvas", never, { "slide": { "alias": "slide"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "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; }; "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"; "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>;
10385
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideCanvasComponent, "pptx-slide-canvas", never, { "slide": { "alias": "slide"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "rulerUnit": { "alias": "rulerUnit"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "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; }; "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"; "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>;
9895
10386
  }
9896
10387
 
9897
10388
  /**
@@ -10109,6 +10600,12 @@ declare class ElementRendererComponent {
10109
10600
  private readonly playback;
10110
10601
  private readonly translate;
10111
10602
  readonly smartArt3D: _angular_core.Signal<boolean>;
10603
+ /**
10604
+ * Whether the Selection Pane has hidden this element. Drives the empty first
10605
+ * `@case` in the template; see the comment there for why nothing is rendered
10606
+ * rather than rendered-and-hidden.
10607
+ */
10608
+ readonly isHidden: _angular_core.Signal<boolean>;
10112
10609
  /** Obstacle rects (absolute slide coords) for connector A* routing. */
10113
10610
  readonly obstacles: _angular_core.InputSignal<readonly RouterRect[]>;
10114
10611
  readonly canvasWidth: _angular_core.InputSignal<number>;
@@ -10137,6 +10634,18 @@ declare class ElementRendererComponent {
10137
10634
  * runs resolve to display text, mirroring React's `fieldContext`.
10138
10635
  */
10139
10636
  readonly fieldContext: _angular_core.InputSignal<FieldSubstitutionContext | undefined>;
10637
+ /**
10638
+ * The elements of the slide being painted, threaded down (including to
10639
+ * recursive group children) alongside {@link fieldContext}.
10640
+ *
10641
+ * Needed only by `a:linkedTxbx` chains: a text box in a linked chain renders
10642
+ * the slice of the chain's text that the preceding boxes could not hold,
10643
+ * which is computable only from its SIBLINGS. Mirrors React's `slideElements`
10644
+ * (taken from its `activeSlide.elements` prop). Left empty by a host that
10645
+ * renders an element outside any slide, in which case a linked box falls back
10646
+ * to its own authored segments.
10647
+ */
10648
+ readonly slideElements: _angular_core.InputSignal<readonly PptxElement[]>;
10140
10649
  /**
10141
10650
  * When true, inherited master/layout (template) elements get a visual
10142
10651
  * affordance (amber outline ring + slightly reduced opacity) signalling that
@@ -10172,6 +10681,10 @@ declare class ElementRendererComponent {
10172
10681
  * DAG fill-overlay tint (colour + blend mode) painted as a separate blended
10173
10682
  * layer over the shape. Undefined when the element has no fill overlay.
10174
10683
  */
10684
+ /** Gradient / pattern `a:ln` outline, stroked as an SVG path over the element. */
10685
+ readonly gradientOutline: _angular_core.Signal<StrokeOutline | undefined>;
10686
+ /** viewBox in the element's own pixel space, matching the outline path data. */
10687
+ readonly outlineViewBox: _angular_core.Signal<string>;
10175
10688
  readonly fillOverlay: _angular_core.Signal<FillOverlayCss | undefined>;
10176
10689
  /**
10177
10690
  * Outline ring + slight transparency applied to inherited template
@@ -10232,7 +10745,7 @@ declare class ElementRendererComponent {
10232
10745
  readonly hasText: _angular_core.Signal<boolean>;
10233
10746
  readonly placeholderLabel: _angular_core.Signal<any>;
10234
10747
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementRendererComponent, never>;
10235
- 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; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "fieldContext": { "alias": "fieldContext"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "parentGroupFill": { "alias": "parentGroupFill"; "required": false; "isSignal": true; }; }, { "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
10748
+ 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; }; "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; }; }, { "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
10236
10749
  }
10237
10750
 
10238
10751
  /**
@@ -10607,11 +11120,17 @@ declare function computeTextLines(text: string, fontSize: number): Array<{
10607
11120
  * `RenderedConnector[]` view-models. Every binding renders the same
10608
11121
  * geometry; this maps those view-models to SVG exactly as Vue does.
10609
11122
  * 3. **Placeholder** -- when there is neither data nor any nodes/shapes.
11123
+ *
11124
+ * Positioning is NOT this component's job: its chrome root fills the positioned,
11125
+ * element-id bearing box its host draws (the element dispatcher, the 3D
11126
+ * renderer's fallback branch, or a preview stage), the same contract the chart
11127
+ * and table renderers follow. Owning `left`/`top` here too offset the diagram
11128
+ * twice, and stamping the element id on this root hid the host's marked node
11129
+ * from anything reading the element contract by id.
10610
11130
  */
10611
11131
  declare class SmartArtRendererComponent {
10612
11132
  /** The smartArt element to render. Must be `type === 'smartArt'`. */
10613
11133
  readonly element: _angular_core.InputSignal<PptxElement>;
10614
- readonly zIndex: _angular_core.InputSignal<number>;
10615
11134
  /**
10616
11135
  * Whether inline on-canvas node-text editing is enabled. False in
10617
11136
  * presentation / read-only / thumbnail contexts (mirrors the table renderer's
@@ -10660,7 +11179,6 @@ declare class SmartArtRendererComponent {
10660
11179
  readonly canEditNodes: _angular_core.Signal<boolean>;
10661
11180
  constructor();
10662
11181
  private readonly smartArtData;
10663
- readonly containerStyle: _angular_core.Signal<StyleMap>;
10664
11182
  readonly chromeStyle: _angular_core.Signal<StyleMap>;
10665
11183
  readonly palette: _angular_core.Signal<string[]>;
10666
11184
  readonly artStyle: _angular_core.Signal<pptx_viewer_core.SmartArtStyle>;
@@ -10749,7 +11267,7 @@ declare class SmartArtRendererComponent {
10749
11267
  private reflow;
10750
11268
  readonly isEmpty: _angular_core.Signal<boolean>;
10751
11269
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartArtRendererComponent, never>;
10752
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartArtRendererComponent, "pptx-smart-art-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "animationState": { "alias": "animationState"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
11270
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartArtRendererComponent, "pptx-smart-art-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "animationState": { "alias": "animationState"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
10753
11271
  }
10754
11272
 
10755
11273
  /**
@@ -10853,13 +11371,25 @@ declare class InkRendererComponent {
10853
11371
  readonly zIndex: _angular_core.InputSignal<number>;
10854
11372
  readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
10855
11373
  readonly replay: _angular_core.InputSignal<boolean>;
11374
+ /**
11375
+ * Emit the neutral element marker (`data-pptx-element="true"`) on this
11376
+ * renderer's root, the node that also carries `data-element-id`.
11377
+ *
11378
+ * Set only by the main interactive canvas. It is an input rather than
11379
+ * something the dispatcher wraps around this component because the root here
11380
+ * positions itself absolutely, so an outer marked box would offset the ink
11381
+ * twice. Without it an ink element renders correctly but is not an element as
11382
+ * far as the shared contract is concerned, so anything enumerating or
11383
+ * hit-testing slide elements by the marker skips it.
11384
+ */
11385
+ readonly markElement: _angular_core.InputSignal<boolean>;
10856
11386
  readonly replayKeyframes = "@keyframes pptx-ink-replay {\n from { stroke-dashoffset: var(--ink-path-length); }\n to { stroke-dashoffset: 0; }\n}";
10857
11387
  readonly containerStyle: _angular_core.Signal<StyleMap>;
10858
11388
  readonly strokes: _angular_core.Signal<InkStroke[]>;
10859
11389
  readonly replayStyles: _angular_core.Signal<InkStrokeAnimationStyle[]>;
10860
11390
  readonly viewBox: _angular_core.Signal<string>;
10861
11391
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InkRendererComponent, never>;
10862
- 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; }; }, {}, never, never, true, never>;
11392
+ 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; }; }, {}, never, never, true, never>;
10863
11393
  }
10864
11394
 
10865
11395
  /**
@@ -10939,6 +11469,10 @@ declare function buildOleActionModel(el: OlePptxElement, translate?: TranslateSe
10939
11469
  * type-badge overlay; otherwise a type-specific icon + label placeholder box
10940
11470
  * is drawn, mirroring the React / Vue fallback.
10941
11471
  *
11472
+ * Positioning is NOT this component's job: it fills the positioned, element-id
11473
+ * bearing box its host draws (see `element-renderer.component.ts`), the same
11474
+ * contract the chart and table renderers follow.
11475
+ *
10942
11476
  * Pure helpers (type resolution, colour / label maps, placeholder style) live
10943
11477
  * in `ole-renderer-helpers.ts` so they can be unit-tested without TestBed.
10944
11478
  *
@@ -10947,9 +11481,6 @@ declare function buildOleActionModel(el: OlePptxElement, translate?: TranslateSe
10947
11481
  declare class OleRendererComponent {
10948
11482
  /** The element to render. Must be `type === 'ole'`. */
10949
11483
  readonly element: _angular_core.InputSignal<PptxElement>;
10950
- readonly zIndex: _angular_core.InputSignal<number>;
10951
- /** Absolute container positioning + dimensions. */
10952
- readonly containerStyle: _angular_core.Signal<StyleMap>;
10953
11484
  /** Narrowed OLE element: undefined when the input is not `type === 'ole'`. */
10954
11485
  private readonly ole;
10955
11486
  /** Resolved application type (excel / word / pdf / visio / mathtype / unknown). */
@@ -10990,7 +11521,7 @@ declare class OleRendererComponent {
10990
11521
  */
10991
11522
  openEmbedded(): void;
10992
11523
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<OleRendererComponent, never>;
10993
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<OleRendererComponent, "pptx-ole-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
11524
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OleRendererComponent, "pptx-ole-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
10994
11525
  }
10995
11526
 
10996
11527
  /** Narrowed view-model derived from a `Model3DPptxElement`. */
@@ -11055,6 +11586,15 @@ declare class Model3DRendererComponent implements OnDestroy {
11055
11586
  * editor; the root viewer can pass `false` in passive presentation mode.
11056
11587
  */
11057
11588
  readonly interactive: _angular_core.InputSignal<boolean>;
11589
+ /**
11590
+ * Emit the neutral element marker (`data-pptx-element="true"`) on this
11591
+ * renderer's root, the node that also carries `data-element-id`. Set only by
11592
+ * the main interactive canvas.
11593
+ *
11594
+ * Separate from `interactive` above, which is about the 3D scene's orbit
11595
+ * controls and defaults to `true` even on a thumbnail.
11596
+ */
11597
+ readonly markElement: _angular_core.InputSignal<boolean>;
11058
11598
  private readonly sceneRef;
11059
11599
  readonly containerStyle: _angular_core.Signal<StyleMap>;
11060
11600
  readonly vm: _angular_core.Signal<Model3DViewModel>;
@@ -11076,7 +11616,7 @@ declare class Model3DRendererComponent implements OnDestroy {
11076
11616
  private teardownHandle;
11077
11617
  ngOnDestroy(): void;
11078
11618
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Model3DRendererComponent, never>;
11079
- 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; }; }, {}, never, never, true, never>;
11619
+ 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; }; }, {}, never, never, true, never>;
11080
11620
  }
11081
11621
 
11082
11622
  /**
@@ -11171,6 +11711,16 @@ declare class ZoomRendererComponent {
11171
11711
  readonly element: _angular_core.InputSignal<PptxElement>;
11172
11712
  readonly zIndex: _angular_core.InputSignal<number>;
11173
11713
  readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
11714
+ /**
11715
+ * Emit the neutral element marker (`data-pptx-element="true"`) on this
11716
+ * renderer's root, the node that also carries `data-element-id`. Set only by
11717
+ * the main interactive canvas.
11718
+ *
11719
+ * Deliberately NOT called `interactive`: this component already uses that
11720
+ * word for something else (`interactive()` below means the tile is
11721
+ * click-to-jump, which only happens inside a running presentation).
11722
+ */
11723
+ readonly markElement: _angular_core.InputSignal<boolean>;
11174
11724
  readonly containerStyle: _angular_core.Signal<StyleMap>;
11175
11725
  /**
11176
11726
  * Target-slide lookup, provided by the viewer. `null` in trees that do not
@@ -11194,7 +11744,7 @@ declare class ZoomRendererComponent {
11194
11744
  protected onClick(event: MouseEvent): void;
11195
11745
  protected onKeydown(event: KeyboardEvent): void;
11196
11746
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZoomRendererComponent, never>;
11197
- 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; }; }, {}, never, never, true, never>;
11747
+ 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>;
11198
11748
  }
11199
11749
 
11200
11750
  declare class AnimationPlaybackService {
@@ -11697,6 +12247,59 @@ declare class SlideSorterOverlayComponent {
11697
12247
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideSorterOverlayComponent, "pptx-slide-sorter-overlay", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; }, { "select": "select"; "closed": "closed"; }, never, never, true, never>;
11698
12248
  }
11699
12249
 
12250
+ declare class ReadingViewOverlayComponent implements OnInit, AfterViewInit, OnDestroy {
12251
+ /**
12252
+ * The deck to read, template (master/layout) elements already merged in. The
12253
+ * host passes its merged display deck rather than a separate template layer:
12254
+ * the reader navigates inside this overlay, so a single "active slide's
12255
+ * template elements" array would paint slide 1's master over slide 2.
12256
+ */
12257
+ readonly slides: _angular_core.InputSignal<readonly PptxSlide[]>;
12258
+ readonly canvasSize: _angular_core.InputSignal<CanvasSize>;
12259
+ readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
12260
+ /** Slide the editor was on when Reading View was entered. */
12261
+ readonly activeSlideIndex: _angular_core.InputSignal<number>;
12262
+ /** Emits the slide the reader ended on, so the editor lands there. */
12263
+ readonly exit: _angular_core.OutputEmitterRef<number>;
12264
+ /** Whether the view is on screen and which slide it shows (shared state). */
12265
+ protected readonly state: _angular_core.WritableSignal<ReadingViewState>;
12266
+ private readonly viewportRef;
12267
+ /** Measured size of the area the slide is fitted into, in CSS pixels. */
12268
+ private readonly viewport;
12269
+ /**
12270
+ * PowerPoint's "type a slide number, then Enter" jump. One buffer per open
12271
+ * session, and every key mapped through it EXACTLY once: mapping mutates the
12272
+ * buffer, so a second call would swallow the digit it just accumulated.
12273
+ */
12274
+ private readonly keyBuffer;
12275
+ /** Bound once so the capture-phase listener can be removed again. */
12276
+ private readonly keyListener;
12277
+ private resizeObserver;
12278
+ ngOnInit(): void;
12279
+ ngAfterViewInit(): void;
12280
+ ngOnDestroy(): void;
12281
+ /** The slide on screen, or undefined when closed or the deck is empty. */
12282
+ protected readonly visibleSlide: _angular_core.Signal<PptxSlide | undefined>;
12283
+ /** Fit scale for the slide; 0 before the first layout pass. */
12284
+ protected readonly scale: _angular_core.Signal<number>;
12285
+ protected readonly stageWidth: _angular_core.Signal<number>;
12286
+ protected readonly stageHeight: _angular_core.Signal<number>;
12287
+ protected readonly counter: _angular_core.Signal<string>;
12288
+ protected readonly canPrevious: _angular_core.Signal<boolean>;
12289
+ protected readonly canNext: _angular_core.Signal<boolean>;
12290
+ /** Apply a navigation intent, handing the reader back to the editor on close. */
12291
+ protected run(command: ReadingViewCommand): void;
12292
+ /**
12293
+ * Window-level so no element has to hold focus, matching the slide show.
12294
+ * Writing {@link state} marks this `OnPush` view dirty and notifies Angular's
12295
+ * change-detection scheduler, so no manual `markForCheck` is needed even
12296
+ * though the listener is not a host binding.
12297
+ */
12298
+ protected onKeyDown(event: KeyboardEvent): void;
12299
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ReadingViewOverlayComponent, never>;
12300
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ReadingViewOverlayComponent, "pptx-reading-view-overlay", never, { "slides": { "alias": "slides"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "activeSlideIndex": { "alias": "activeSlideIndex"; "required": false; "isSignal": true; }; }, { "exit": "exit"; }, never, never, true, never>;
12301
+ }
12302
+
11700
12303
  declare class FindBarComponent {
11701
12304
  /** All slides in the current presentation. */
11702
12305
  readonly slides: _angular_core.InputSignal<PptxSlide[]>;
@@ -11949,6 +12552,116 @@ declare class SlideSizeCardComponent {
11949
12552
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideSizeCardComponent, "pptx-slide-size-card", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
11950
12553
  }
11951
12554
 
12555
+ declare class SlideTransitionCardComponent {
12556
+ /** Zero-based index of the slide whose transition is being edited. */
12557
+ readonly slideIndex: _angular_core.InputSignal<number>;
12558
+ /** Whether mutation controls are enabled. */
12559
+ readonly canEdit: _angular_core.InputSignal<boolean>;
12560
+ private readonly editor;
12561
+ protected readonly transitionOptions: readonly SlideTransitionOptionEntry[];
12562
+ protected readonly orientOptions: ({
12563
+ value: "horz";
12564
+ i18nKey: string;
12565
+ } | {
12566
+ value: "vert";
12567
+ i18nKey: string;
12568
+ })[];
12569
+ protected readonly maxDurationMs = 10000;
12570
+ protected readonly minSpokes = 1;
12571
+ protected readonly maxSpokes = 8;
12572
+ protected readonly activeSlide: _angular_core.Signal<PptxSlide | undefined>;
12573
+ protected readonly transition: _angular_core.Signal<PptxSlideTransition | undefined>;
12574
+ protected readonly transitionType: _angular_core.Signal<PptxTransitionType>;
12575
+ protected readonly usesOrientation: _angular_core.Signal<boolean>;
12576
+ protected readonly isWheel: _angular_core.Signal<boolean>;
12577
+ /** Compass tokens for the current type, or undefined when it takes none. */
12578
+ protected readonly directionTokens: _angular_core.Signal<readonly string[] | undefined>;
12579
+ protected readonly orientation: _angular_core.Signal<pptx_viewer_core.PptxSplitOrientation>;
12580
+ protected readonly spokes: _angular_core.Signal<number>;
12581
+ protected readonly durationMs: _angular_core.Signal<number>;
12582
+ protected readonly advanceOnClick: _angular_core.Signal<boolean>;
12583
+ protected onTypeChange(event: Event): void;
12584
+ protected onDirection(direction: string): void;
12585
+ protected onOrientation(orient: 'horz' | 'vert'): void;
12586
+ protected onSpokes(event: Event): void;
12587
+ protected onDuration(event: Event): void;
12588
+ protected onAdvanceOnClick(event: Event): void;
12589
+ /** Merge a partial transition change onto the slide as one history entry. */
12590
+ private patch;
12591
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideTransitionCardComponent, never>;
12592
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideTransitionCardComponent, "pptx-slide-transition-card", never, { "slideIndex": { "alias": "slideIndex"; "required": true; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12593
+ }
12594
+
12595
+ declare class SlideBackgroundCardComponent {
12596
+ /** Zero-based index of the slide whose background is being edited. */
12597
+ readonly slideIndex: _angular_core.InputSignal<number>;
12598
+ /** Whether mutation controls are enabled. */
12599
+ readonly canEdit: _angular_core.InputSignal<boolean>;
12600
+ private readonly editor;
12601
+ protected readonly imageAccept = "image/png,image/jpeg,image/gif,image/webp,image/svg+xml";
12602
+ protected readonly slide: _angular_core.Signal<PptxSlide | undefined>;
12603
+ /** Stable per-slide key so the colour input reseeds only on slide change. */
12604
+ protected readonly slideKey: _angular_core.Signal<string>;
12605
+ protected readonly backgroundColor: _angular_core.Signal<string>;
12606
+ protected readonly hasBackground: _angular_core.Signal<boolean>;
12607
+ protected onColorChange(event: Event): void;
12608
+ protected onImagePicked(event: Event): void;
12609
+ protected onRemoveImage(): void;
12610
+ protected onClear(): void;
12611
+ private patch;
12612
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideBackgroundCardComponent, never>;
12613
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideBackgroundCardComponent, "pptx-slide-background-card", never, { "slideIndex": { "alias": "slideIndex"; "required": true; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12614
+ }
12615
+
12616
+ /** One rendered grid slot: a direction token, or a blank spacer. */
12617
+ interface DirectionCell {
12618
+ /** Stable key for `@for` tracking (cells can repeat `null`). */
12619
+ readonly key: string;
12620
+ /** The direction token, or null for an empty compass slot. */
12621
+ readonly value: string | null;
12622
+ /** Arrow glyph for the token (falls back to the raw token). */
12623
+ readonly arrow: string;
12624
+ }
12625
+ declare class TransitionDirectionPickerComponent {
12626
+ /** Valid direction tokens for the current transition type. */
12627
+ readonly directions: _angular_core.InputSignal<readonly string[]>;
12628
+ /** Currently selected token, if any. */
12629
+ readonly value: _angular_core.InputSignal<string | undefined>;
12630
+ /** Whether the buttons are inert (read-only deck). */
12631
+ readonly disabled: _angular_core.InputSignal<boolean>;
12632
+ /** The token the user chose. */
12633
+ readonly pick: _angular_core.OutputEmitterRef<string>;
12634
+ /** Four or more tokens earn the compass grid; fewer stay an inline row. */
12635
+ protected readonly useGrid: _angular_core.Signal<boolean>;
12636
+ protected readonly gridCells: _angular_core.Signal<DirectionCell[]>;
12637
+ /** Arrow glyph for a token, falling back to the raw token. */
12638
+ protected arrowFor(token: string): string;
12639
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TransitionDirectionPickerComponent, never>;
12640
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TransitionDirectionPickerComponent, "pptx-transition-direction-picker", never, { "directions": { "alias": "directions"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "pick": "pick"; }, never, never, true, never>;
12641
+ }
12642
+
12643
+ declare class TransitionPreviewComponent {
12644
+ /** The transition being previewed. */
12645
+ readonly transition: _angular_core.InputSignal<PptxSlideTransition>;
12646
+ /** Bumped on every click; recreates both layers so the animation restarts. */
12647
+ private readonly playKey;
12648
+ private readonly playing;
12649
+ private timer;
12650
+ constructor();
12651
+ /** Single-element list so the template can key the layers on the counter. */
12652
+ protected readonly playKeys: _angular_core.Signal<readonly number[]>;
12653
+ protected readonly durationMs: _angular_core.Signal<number>;
12654
+ /** `none` and `cut` have nothing to show; React hides the preview entirely. */
12655
+ protected readonly previewable: _angular_core.Signal<boolean>;
12656
+ private readonly animations;
12657
+ protected readonly incomingAnimation: _angular_core.Signal<string | null>;
12658
+ protected readonly outgoingAnimation: _angular_core.Signal<string | null>;
12659
+ protected readonly outgoingZIndex: _angular_core.Signal<0 | 2>;
12660
+ protected play(): void;
12661
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TransitionPreviewComponent, never>;
12662
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TransitionPreviewComponent, "pptx-transition-preview", never, { "transition": { "alias": "transition"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
12663
+ }
12664
+
11952
12665
  declare class NotesHandoutCardComponent {
11953
12666
  private readonly loader;
11954
12667
  private readonly translate;
@@ -11979,6 +12692,28 @@ declare class DocumentPropertiesCardComponent {
11979
12692
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DocumentPropertiesCardComponent, "pptx-document-properties-card", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
11980
12693
  }
11981
12694
 
12695
+ declare class TagsCardComponent {
12696
+ /** Whether mutation controls are enabled. */
12697
+ readonly canEdit: _angular_core.InputSignal<boolean>;
12698
+ private readonly loader;
12699
+ private readonly editor;
12700
+ /** Collapsed by default, matching React's TagsSection initial state. */
12701
+ protected readonly collapsed: _angular_core.WritableSignal<boolean>;
12702
+ protected readonly rows: _angular_core.Signal<FlatTagRow[]>;
12703
+ protected toggle(): void;
12704
+ protected onFieldChange(event: Event, colIdx: number, tagIdx: number, field: 'name' | 'value'): void;
12705
+ protected onDelete(colIdx: number, tagIdx: number): void;
12706
+ protected onAdd(): void;
12707
+ /**
12708
+ * Tags live outside the slide list, so they are not part of the slide undo
12709
+ * stack; writing the loader signal and flagging the deck dirty is the same
12710
+ * path the DOCUMENT properties card uses.
12711
+ */
12712
+ private commit;
12713
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TagsCardComponent, never>;
12714
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagsCardComponent, "pptx-tags-card", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12715
+ }
12716
+
11982
12717
  declare class GradientPickerComponent {
11983
12718
  /** The element whose gradient fill is being edited. */
11984
12719
  readonly element: _angular_core.InputSignal<PptxElement>;
@@ -12066,6 +12801,79 @@ declare class TextAdvancedPanelComponent {
12066
12801
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextAdvancedPanelComponent, "pptx-text-advanced-panel", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; }, { "patch": "patch"; }, never, never, true, never>;
12067
12802
  }
12068
12803
 
12804
+ declare class Text3DPanelComponent {
12805
+ /** The selected element whose text style carries the 3D settings. */
12806
+ readonly element: _angular_core.InputSignal<PptxElement>;
12807
+ /** A partial-element patch for the orchestrator to commit (one history entry). */
12808
+ readonly patch: _angular_core.OutputEmitterRef<Partial<PptxElement>>;
12809
+ protected readonly materialPresets: readonly {
12810
+ value: MaterialPresetType | "";
12811
+ label: string;
12812
+ }[];
12813
+ protected readonly maxDepthPt = 100;
12814
+ protected readonly topBevelKeys: pptx_angular_viewer.Text3DBevelKeys;
12815
+ protected readonly bottomBevelKeys: pptx_angular_viewer.Text3DBevelKeys;
12816
+ protected readonly text3d: _angular_core.Signal<Text3DStyle | undefined>;
12817
+ protected readonly hasExtrusion: _angular_core.Signal<boolean>;
12818
+ protected readonly depthPt: _angular_core.Signal<number>;
12819
+ protected readonly extrusionColor: _angular_core.Signal<string>;
12820
+ protected readonly material: _angular_core.Signal<string>;
12821
+ /** Merge a partial 3D change onto the current style and emit the patch. */
12822
+ protected commit(changes: Partial<Text3DStyle>): void;
12823
+ protected onExtrusionToggle(event: Event): void;
12824
+ protected onDepthChange(event: Event): void;
12825
+ protected onColorChange(event: Event): void;
12826
+ protected onMaterialChange(event: Event): void;
12827
+ private emitText3d;
12828
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Text3DPanelComponent, never>;
12829
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Text3DPanelComponent, "pptx-text-3d-panel", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; }, { "patch": "patch"; }, never, never, true, never>;
12830
+ }
12831
+
12832
+ /** The three `Text3DStyle` fields one bevel block owns. */
12833
+ interface Text3DBevelKeys {
12834
+ readonly type: 'bevelTopType' | 'bevelBottomType';
12835
+ readonly width: 'bevelTopWidth' | 'bevelBottomWidth';
12836
+ readonly height: 'bevelTopHeight' | 'bevelBottomHeight';
12837
+ }
12838
+ /** Field names of the TOP bevel (`a:bevelT`). */
12839
+ declare const TEXT_3D_TOP_BEVEL_KEYS: Text3DBevelKeys;
12840
+ /** Field names of the BOTTOM bevel (`a:bevelB`). */
12841
+ declare const TEXT_3D_BOTTOM_BEVEL_KEYS: Text3DBevelKeys;
12842
+ /**
12843
+ * Build the single-field patch for one bevel input. Exported (and pure) so the
12844
+ * clamping is unit-testable without a TestBed, matching this package's
12845
+ * convention of testing logic and leaving DOM behaviour to the e2e specs.
12846
+ */
12847
+ declare function bevelSizePatch(key: Text3DBevelKeys['width'] | Text3DBevelKeys['height'], pt: number): Partial<Text3DStyle>;
12848
+ declare class Text3DBevelSectionComponent {
12849
+ /** Display label for this edge (already translated by the parent). */
12850
+ readonly label: _angular_core.InputSignal<string>;
12851
+ /** Which `Text3DStyle` fields this block writes. */
12852
+ readonly keys: _angular_core.InputSignal<Text3DBevelKeys>;
12853
+ /**
12854
+ * The element's current 3D-text style, if any. Named `text3d` rather than
12855
+ * `style` because Angular special-cases a `[style]` binding as the native
12856
+ * style map, which would never reach an input of that name.
12857
+ */
12858
+ readonly text3d: _angular_core.InputSignal<Text3DStyle | undefined>;
12859
+ /** Whether the controls are inert (no extrusion, or read-only deck). */
12860
+ readonly disabled: _angular_core.InputSignal<boolean>;
12861
+ /** A partial `Text3DStyle` change for the parent to merge and commit. */
12862
+ readonly bevelChange: _angular_core.OutputEmitterRef<Partial<Text3DStyle>>;
12863
+ protected readonly bevelPresets: readonly {
12864
+ value: BevelPresetType;
12865
+ label: string;
12866
+ }[];
12867
+ protected readonly maxPt = 50;
12868
+ protected readonly bevelType: _angular_core.Signal<BevelPresetType>;
12869
+ protected readonly widthPt: _angular_core.Signal<number>;
12870
+ protected readonly heightPt: _angular_core.Signal<number>;
12871
+ protected onType(event: Event): void;
12872
+ protected onSize(event: Event, dimension: 'width' | 'height'): void;
12873
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Text3DBevelSectionComponent, never>;
12874
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Text3DBevelSectionComponent, "pptx-text-3d-bevel-section", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "keys": { "alias": "keys"; "required": true; "isSignal": true; }; "text3d": { "alias": "text3d"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "bevelChange": "bevelChange"; }, never, never, true, never>;
12875
+ }
12876
+
12069
12877
  declare class TableDataEditorComponent {
12070
12878
  /** The table element being edited. */
12071
12879
  readonly element: _angular_core.InputSignal<TablePptxElement>;
@@ -12075,10 +12883,19 @@ declare class TableDataEditorComponent {
12075
12883
  readonly elementChange: _angular_core.OutputEmitterRef<TablePptxElement>;
12076
12884
  /** Shared cell selection (drives the cell-formatting panel + context menu). */
12077
12885
  private readonly selection;
12078
- protected readonly rows: _angular_core.Signal<pptx_viewer_core.PptxTableRow[]>;
12886
+ /**
12887
+ * Normalised render model from `pptx-viewer-shared`. Using it (rather than
12888
+ * iterating `tableData.rows` directly) is what keeps ragged rows, which real
12889
+ * decks do contain, from rendering a lopsided grid with cells missing off the
12890
+ * right-hand edge.
12891
+ */
12892
+ protected readonly grid: _angular_core.Signal<TableDataGridModel>;
12893
+ protected readonly rows: _angular_core.Signal<TableDataGridRow[]>;
12079
12894
  protected readonly rowCount: _angular_core.Signal<number>;
12080
12895
  protected readonly colCount: _angular_core.Signal<number>;
12081
12896
  protected readonly colIndices: _angular_core.Signal<number[]>;
12897
+ protected readonly canRemoveRow: _angular_core.Signal<boolean>;
12898
+ protected readonly canRemoveColumn: _angular_core.Signal<boolean>;
12082
12899
  protected onCellChange(event: Event, rowIndex: number, colIndex: number): void;
12083
12900
  /** Focusing a cell selects it so the cell-formatting panel targets it. */
12084
12901
  protected onCellFocus(rowIndex: number, colIndex: number): void;
@@ -12948,6 +13765,8 @@ declare class EditorToolbarComponent {
12948
13765
  }
12949
13766
 
12950
13767
  declare class StatusBarComponent {
13768
+ /** Shared height token; see the note above the row in the template. */
13769
+ protected readonly statusBarHeightClass: "min-h-[29px]";
12951
13770
  readonly slideIndex: _angular_core.InputSignal<number>;
12952
13771
  readonly slideCount: _angular_core.InputSignal<number>;
12953
13772
  readonly canEdit: _angular_core.InputSignal<boolean>;
@@ -13006,6 +13825,14 @@ declare class EditorContextMenuComponent {
13006
13825
  readonly askAi: _angular_core.OutputEmitterRef<void>;
13007
13826
  /** "Fix with AI": open the assistant with a prefilled fix directive. */
13008
13827
  readonly fixAi: _angular_core.OutputEmitterRef<void>;
13828
+ /**
13829
+ * "Edit Hyperlink": the dialog lives at viewer level (it needs the selected
13830
+ * element and the document-properties service), so the menu asks for it
13831
+ * rather than owning it.
13832
+ */
13833
+ readonly editHyperlink: _angular_core.OutputEmitterRef<void>;
13834
+ /** "Add Comment": open the right-docked comments panel, as React does. */
13835
+ readonly addComment: _angular_core.OutputEmitterRef<void>;
13009
13836
  protected readonly editor: EditorStateService;
13010
13837
  private readonly tableSelection;
13011
13838
  private readonly host;
@@ -13018,36 +13845,23 @@ declare class EditorContextMenuComponent {
13018
13845
  element: TablePptxElement;
13019
13846
  sel: TableCellSelection;
13020
13847
  } | null>;
13848
+ /** The single selected element, or null on an empty or multi selection. */
13849
+ private readonly selectedElement;
13850
+ /** The menu, as the shared command list builds it for this right-click. */
13851
+ protected readonly entries: _angular_core.Signal<ContextMenuEntry[]>;
13852
+ /** Editor operations behind each command id (see the dispatch module). */
13853
+ private readonly actions;
13021
13854
  onEscape(): void;
13022
13855
  onDocumentPointerDown(event: PointerEvent): void;
13023
- protected onAskAi(): void;
13024
- protected onFixAi(): void;
13025
- protected onCut(): void;
13026
- protected onCopy(): void;
13027
- protected onPaste(): void;
13028
- protected onDuplicate(): void;
13029
- protected onDelete(): void;
13030
- protected onBringToFront(): void;
13031
- protected onSendToBack(): void;
13032
- protected onBringForward(): void;
13033
- protected onSendBackward(): void;
13034
- protected onInsertRowAbove(): void;
13035
- protected onInsertRowBelow(): void;
13036
- protected onInsertColLeft(): void;
13037
- protected onInsertColRight(): void;
13038
- protected onDeleteRow(): void;
13039
- protected onDeleteColumn(): void;
13040
- protected onMergeRight(): void;
13041
- protected onMergeDown(): void;
13042
- protected onSplitCell(): void;
13043
- protected onMergeSelected(): void;
13856
+ /** Run the chosen command, then close: every item closes the menu. */
13857
+ protected run(id: ContextMenuCommandId): void;
13044
13858
  /**
13045
13859
  * Run a pure table transform on the current table context and commit the
13046
- * result through the editor (one undoable history entry), then close the menu.
13860
+ * result through the editor (one undoable history entry).
13047
13861
  */
13048
13862
  private applyTable;
13049
13863
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EditorContextMenuComponent, never>;
13050
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EditorContextMenuComponent, "pptx-editor-context-menu", never, { "x": { "alias": "x"; "required": true; "isSignal": true; }; "y": { "alias": "y"; "required": true; "isSignal": true; }; "slideIndex": { "alias": "slideIndex"; "required": true; "isSignal": true; }; "showAiActions": { "alias": "showAiActions"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "askAi": "askAi"; "fixAi": "fixAi"; }, never, never, true, never>;
13864
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EditorContextMenuComponent, "pptx-editor-context-menu", never, { "x": { "alias": "x"; "required": true; "isSignal": true; }; "y": { "alias": "y"; "required": true; "isSignal": true; }; "slideIndex": { "alias": "slideIndex"; "required": true; "isSignal": true; }; "showAiActions": { "alias": "showAiActions"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "askAi": "askAi"; "fixAi": "fixAi"; "editHyperlink": "editHyperlink"; "addComment": "addComment"; }, never, never, true, never>;
13051
13865
  }
13052
13866
 
13053
13867
  /**
@@ -13162,6 +13976,11 @@ declare class EquationRendererComponent {
13162
13976
  * Converts the OMML input to MathML and wraps it in a `SafeHtml` value so
13163
13977
  * Angular's `[innerHTML]` binding renders the `<math>` markup instead of
13164
13978
  * stripping it.
13979
+ *
13980
+ * `bypassSecurityTrustHtml` switches Angular's own sanitiser off, and the
13981
+ * OMML comes from an arbitrary deck, so the markup is run through the shared
13982
+ * `sanitizeMathMl` (DOMPurify, MathML + SVG profiles) first. That is the same
13983
+ * guarantee the other four bindings apply at their raw-HTML sinks.
13165
13984
  */
13166
13985
  readonly safeMathml: _angular_core.Signal<SafeHtml>;
13167
13986
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EquationRendererComponent, never>;
@@ -13376,22 +14195,32 @@ declare class AnimationPanelComponent {
13376
14195
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AnimationPanelComponent, "pptx-animation-panel", never, { "groups": { "alias": "groups"; "required": true; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "isPlaying": { "alias": "isPlaying"; "required": false; "isSignal": true; }; }, { "playRequested": "playRequested"; "pauseRequested": "pauseRequested"; "stepRequested": "stepRequested"; "resetRequested": "resetRequested"; "seek": "seek"; }, never, never, true, never>;
13377
14196
  }
13378
14197
 
14198
+ type Trigger = 'click' | 'hover';
13379
14199
  declare class ActionSettingsPanelComponent {
13380
14200
  readonly element: _angular_core.InputSignal<PptxElement>;
13381
14201
  readonly slideCount: _angular_core.InputSignal<number>;
13382
14202
  readonly patch: _angular_core.OutputEmitterRef<Partial<PptxElement>>;
13383
14203
  protected readonly triggers: readonly ["click", "hover"];
13384
- protected readonly actionTypes: readonly {
13385
- value: ElementActionType;
13386
- key: string;
13387
- }[];
14204
+ protected readonly actionTypes: readonly ElementActionOption[];
14205
+ /**
14206
+ * The type the user just picked, per trigger.
14207
+ *
14208
+ * WHY it exists: "Go to URL" / "Go to Slide" only become a stored action once
14209
+ * they carry a target, so controls driven purely by the committed element
14210
+ * never revealed the input needed to supply that target, leaving both kinds
14211
+ * unreachable. The pick is tagged with its element id so moving the inspector
14212
+ * to another shape does not carry a half-made choice across.
14213
+ */
14214
+ private readonly pending;
13388
14215
  private readonly clickAction;
13389
14216
  private readonly hoverAction;
13390
- protected actionFor(trigger: 'click' | 'hover'): ElementAction | undefined;
14217
+ protected actionFor(trigger: Trigger): ElementAction | undefined;
14218
+ /** The action type this trigger's controls should render right now. */
14219
+ protected typeFor(trigger: Trigger): ElementActionType;
13391
14220
  private update;
13392
- protected onType(event: Event, trigger: 'click' | 'hover'): void;
13393
- protected onUrl(event: Event, trigger: 'click' | 'hover'): void;
13394
- protected onSlide(event: Event, trigger: 'click' | 'hover'): void;
14221
+ protected onType(event: Event, trigger: Trigger): void;
14222
+ protected onUrl(event: Event, trigger: Trigger): void;
14223
+ protected onSlide(event: Event, trigger: Trigger): void;
13395
14224
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionSettingsPanelComponent, never>;
13396
14225
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ActionSettingsPanelComponent, "pptx-action-settings-panel", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; }, { "patch": "patch"; }, never, never, true, never>;
13397
14226
  }
@@ -13944,7 +14773,15 @@ declare class EquationEditorDialogComponent {
13944
14773
  * (the shared catalogue every binding's equation dialog renders).
13945
14774
  */
13946
14775
  declare const TEMPLATES: readonly pptx_angular_viewer.EquationTemplate[];
13947
- /** Convert a LaTeX string to a MathML markup string, empty on any failure. */
14776
+ /**
14777
+ * Convert a LaTeX string to a MathML markup string, empty on any failure.
14778
+ *
14779
+ * The result is DOMPurify-sanitised (MathML + SVG profiles) by shared before it
14780
+ * is returned. That matters here specifically: the Angular dialog and gallery
14781
+ * hand this string to `DomSanitizer.bypassSecurityTrustHtml`, which disables
14782
+ * Angular's own sanitiser, so this was previously the one binding injecting
14783
+ * unsanitised equation markup.
14784
+ */
13948
14785
  declare function latexToMathml(latex: string): string;
13949
14786
 
13950
14787
  declare class EquationTemplateGalleryComponent {
@@ -14365,7 +15202,7 @@ declare class AccountPageComponent {
14365
15202
  readonly accountAuth: _angular_core.InputSignal<AccountAuthConfig | undefined>;
14366
15203
  private readonly translate;
14367
15204
  protected readonly swatches: readonly string[];
14368
- protected readonly version = "2.7.1";
15205
+ protected readonly version = "2.9.0";
14369
15206
  protected readonly profile: _angular_core.WritableSignal<ViewerProfile>;
14370
15207
  protected readonly initial: _angular_core.Signal<string>;
14371
15208
  protected readonly usage: _angular_core.WritableSignal<LocalStorageUsageSummary | null>;
@@ -15154,10 +15991,19 @@ declare function computeCornerHandle(box: (Box & {
15154
15991
  }) | null, editable: boolean, handleScreenPx: number, offsetPx: number, zoom: number, corner: 'top-center' | 'top-left'): CornerHandleBox | null;
15155
15992
  /**
15156
15993
  * Resolve the id of the interactive element under a pointer target, or null.
15157
- * An element host carries `data-element-id`, but template (master/layout)
15158
- * elements are only interactive while `editTemplateMode` is on; when off they
15159
- * are reported as null so the canvas treats them as background (no
15160
- * select/drag/context-menu/inline-edit).
15994
+ *
15995
+ * Resolution goes through the shared hit-test, which answers with the TOP-LEVEL
15996
+ * element rather than the innermost `data-element-id` node. That distinction is
15997
+ * the whole point here: a group renders its children's nodes inside its own, so
15998
+ * the innermost node under a click is usually a grouped CHILD, whose id is not
15999
+ * in `allElements`. This function used to look that child id up, find nothing,
16000
+ * and report "no element", which CLEARED the selection: Ungroup was then only
16001
+ * reachable by hitting a gap inside the group's box that missed every child.
16002
+ * PowerPoint (and React, Vanilla and Svelte) select the group instead.
16003
+ *
16004
+ * Template (master/layout) elements are only interactive while
16005
+ * `editTemplateMode` is on; when off they are reported as null so the canvas
16006
+ * treats them as background (no select/drag/context-menu/inline-edit).
15161
16007
  */
15162
16008
  declare function resolveInteractiveElementId(target: EventTarget | null, allElements: readonly PptxElement[], editTemplateMode: boolean): string | null;
15163
16009
 
@@ -15443,6 +16289,12 @@ declare class SmartArt3DRendererComponent implements OnDestroy {
15443
16289
  readonly zIndex: _angular_core.InputSignal<number>;
15444
16290
  /** When true and the 3D scene is active, enables inline node text editing. */
15445
16291
  readonly canEdit: _angular_core.InputSignal<boolean>;
16292
+ /**
16293
+ * Emit the neutral element marker (`data-pptx-element="true"`) on the node
16294
+ * that also carries `data-element-id`: the 3D scene's root, or the box the
16295
+ * SVG fallback branch is drawn into. Set only by the main interactive canvas.
16296
+ */
16297
+ readonly markElement: _angular_core.InputSignal<boolean>;
15446
16298
  private readonly canvas;
15447
16299
  private readonly containerEl;
15448
16300
  private readonly nodeEditor3d;
@@ -15480,7 +16332,7 @@ declare class SmartArt3DRendererComponent implements OnDestroy {
15480
16332
  private applyCommit;
15481
16333
  ngOnDestroy(): void;
15482
16334
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartArt3DRendererComponent, never>;
15483
- 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; }; }, {}, never, never, true, never>;
16335
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartArt3DRendererComponent, "pptx-smart-art-3d-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15484
16336
  }
15485
16337
 
15486
16338
  declare class SmartArtPreviewComponent {
@@ -15752,26 +16604,6 @@ declare function parseNodeTextarea(value: string, fallback: readonly string[]):
15752
16604
  * @module angular-viewer/table-data-helpers
15753
16605
  */
15754
16606
 
15755
- /**
15756
- * Insert a blank row above or below `rowIdx`, growing any vertical merge spans
15757
- * that straddle the insertion point (delegates to the shared `insertTableRow`).
15758
- */
15759
- declare function insertRow(element: TablePptxElement, rowIdx: number, position: 'above' | 'below'): TablePptxElement;
15760
- /**
15761
- * Delete the row at `rowIdx`, adjusting vertical merge spans. No-op (element
15762
- * returned unchanged) when the table has a single row.
15763
- */
15764
- declare function removeRow(element: TablePptxElement, rowIdx: number): TablePptxElement;
15765
- /**
15766
- * Insert a blank column left or right of `colIdx`, splitting the source column's
15767
- * width and growing horizontal merge spans (delegates to `insertTableColumn`).
15768
- */
15769
- declare function insertColumn(element: TablePptxElement, colIdx: number, position: 'left' | 'right'): TablePptxElement;
15770
- /**
15771
- * Delete the column at `colIdx`, adjusting horizontal merge spans and
15772
- * renormalising widths. No-op when the table has a single column.
15773
- */
15774
- declare function removeColumn(element: TablePptxElement, colIdx: number): TablePptxElement;
15775
16607
  /** Merge a rectangular selection of cells into their top-left anchor. */
15776
16608
  declare function mergeSelection(element: TablePptxElement, cells: CellCoord[]): TablePptxElement;
15777
16609
  /** Split the merged cell anchored at `(row, col)` back into individual cells. */
@@ -15788,6 +16620,42 @@ declare function splitCursorCell(element: TablePptxElement, row: number, col: nu
15788
16620
  */
15789
16621
  declare function patchTableData(element: TablePptxElement, patch: Partial<PptxTableData>): TablePptxElement;
15790
16622
 
16623
+ /** One gallery button: the preset it applies plus the key naming it. */
16624
+ interface AnimationPresetEntry {
16625
+ value: PptxAnimationPreset;
16626
+ labelKey: string;
16627
+ }
16628
+ /** One gallery column: a bucket's caption plus the presets filed under it. */
16629
+ interface AnimationPresetCategory {
16630
+ group: AnimationGroup;
16631
+ labelKey: string;
16632
+ tone: string;
16633
+ presets: readonly AnimationPresetEntry[];
16634
+ }
16635
+ /** The i18n key naming a preset, shared by every binding's gallery. */
16636
+ declare function animationPresetLabelKey(preset: PptxAnimationPreset): string;
16637
+ /**
16638
+ * The gallery's columns, in the catalogue's own order.
16639
+ *
16640
+ * That order already leads each bucket with the effects PowerPoint puts first
16641
+ * (Appear / Fade In / Fly In, Spin / Pulse, Fade Out), so the six presets this
16642
+ * tab used to offer still read as the primary set without being rendered twice.
16643
+ */
16644
+ declare const ANIMATION_PRESET_CATEGORIES: readonly AnimationPresetCategory[];
16645
+ /** What the gallery emits when a preset button is pressed. */
16646
+ interface AnimationPresetPick {
16647
+ preset: PptxAnimationPreset;
16648
+ group: AnimationGroup;
16649
+ }
16650
+ declare class RibbonAnimationGalleryComponent {
16651
+ /** True when the deck is not editable or nothing is selected. */
16652
+ readonly disabled: _angular_core.InputSignal<boolean>;
16653
+ readonly addAnimation: _angular_core.OutputEmitterRef<AnimationPresetPick>;
16654
+ protected readonly categories: readonly AnimationPresetCategory[];
16655
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonAnimationGalleryComponent, never>;
16656
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonAnimationGalleryComponent, "pptx-ribbon-animation-gallery", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "addAnimation": "addAnimation"; }, never, never, true, never>;
16657
+ }
16658
+
15791
16659
  declare class RibbonAnimationsSectionComponent {
15792
16660
  private readonly editor;
15793
16661
  readonly slideIndex: _angular_core.InputSignal<number>;
@@ -15795,29 +16663,16 @@ declare class RibbonAnimationsSectionComponent {
15795
16663
  readonly canEdit: _angular_core.InputSignal<boolean>;
15796
16664
  readonly present: _angular_core.OutputEmitterRef<void>;
15797
16665
  readonly toggleInspector: _angular_core.OutputEmitterRef<void>;
15798
- protected readonly entrancePresets: readonly {
15799
- value: PptxAnimationPreset;
15800
- label: string;
15801
- labelKey: string;
15802
- }[];
15803
- protected readonly emphasisPresets: readonly {
15804
- value: PptxAnimationPreset;
15805
- label: string;
15806
- labelKey: string;
15807
- }[];
15808
- protected readonly exitPresets: readonly {
15809
- value: PptxAnimationPreset;
15810
- label: string;
15811
- labelKey: string;
15812
- }[];
15813
16666
  protected hasSel(): boolean;
15814
16667
  protected canAuthor(): boolean;
16668
+ /** Apply the preset a gallery button asked for. */
16669
+ protected onGalleryPick(pick: AnimationPresetPick): void;
15815
16670
  /**
15816
16671
  * Add an animation preset to the selected element on the active slide.
15817
16672
  * Delegates to the immutable helpers in animation-author-helpers.ts and
15818
16673
  * commits the updated animations array via EditorStateService.updateSlide.
15819
16674
  */
15820
- protected addAnimation(preset: PptxAnimationPreset, group: 'entrance' | 'emphasis' | 'exit'): void;
16675
+ protected addAnimation(preset: PptxAnimationPreset, group: AnimationGroup): void;
15821
16676
  /** Remove all animations from the selected element. */
15822
16677
  protected removeAnim(): void;
15823
16678
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonAnimationsSectionComponent, never>;
@@ -15827,6 +16682,10 @@ declare class RibbonAnimationsSectionComponent {
15827
16682
  declare class RibbonArrangeSectionComponent {
15828
16683
  protected readonly editor: EditorStateService;
15829
16684
  readonly slideIndex: _angular_core.InputSignal<number>;
16685
+ /** The active selection, which gates Ungroup and the outline-width spinner. */
16686
+ readonly selectedElement: _angular_core.InputSignal<PptxElement | null>;
16687
+ /** Whether the deck is editable; a read-only deck cannot group or restyle. */
16688
+ readonly canEdit: _angular_core.InputSignal<boolean>;
15830
16689
  readonly formatPainterActive: _angular_core.InputSignal<boolean>;
15831
16690
  readonly canActivateFormatPainter: _angular_core.InputSignal<boolean>;
15832
16691
  readonly toggleFormatPainter: _angular_core.OutputEmitterRef<void>;
@@ -15835,7 +16694,7 @@ declare class RibbonArrangeSectionComponent {
15835
16694
  /** Toggle horizontal/vertical flip on each selected element. */
15836
16695
  protected flipSelected(axis: 'horizontal' | 'vertical'): void;
15837
16696
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonArrangeSectionComponent, never>;
15838
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonArrangeSectionComponent, "pptx-ribbon-arrange-section", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "formatPainterActive": { "alias": "formatPainterActive"; "required": false; "isSignal": true; }; "canActivateFormatPainter": { "alias": "canActivateFormatPainter"; "required": false; "isSignal": true; }; }, { "toggleFormatPainter": "toggleFormatPainter"; }, never, never, true, never>;
16697
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonArrangeSectionComponent, "pptx-ribbon-arrange-section", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "formatPainterActive": { "alias": "formatPainterActive"; "required": false; "isSignal": true; }; "canActivateFormatPainter": { "alias": "canActivateFormatPainter"; "required": false; "isSignal": true; }; }, { "toggleFormatPainter": "toggleFormatPainter"; }, never, never, true, never>;
15839
16698
  }
15840
16699
 
15841
16700
  declare class RibbonColorPopoverComponent {
@@ -15869,6 +16728,8 @@ declare class RibbonDrawingGroupComponent {
15869
16728
  /** Insert the picked preset immediately (selects it and records history). */
15870
16729
  protected onShapeSelect(shape: ShapePresetDef): void;
15871
16730
  protected onArrange(direction: 'up' | 'down'): void;
16731
+ /** Group or ungroup the selection, then close the menu. */
16732
+ protected onGroup(group: boolean): void;
15872
16733
  protected onArrangeEdge(edge: 'front' | 'back'): void;
15873
16734
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonDrawingGroupComponent, never>;
15874
16735
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonDrawingGroupComponent, "pptx-ribbon-drawing-group", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -15882,8 +16743,8 @@ declare class RibbonEditingSectionComponent {
15882
16743
  }
15883
16744
 
15884
16745
  interface BackstageAction {
15885
- title: string;
15886
- body: string;
16746
+ titleKey: string;
16747
+ bodyKey: string;
15887
16748
  icon: string;
15888
16749
  event: {
15889
16750
  emit: () => void;
@@ -15920,33 +16781,48 @@ declare class RibbonFileSectionComponent {
15920
16781
  readonly openVersionHistory: _angular_core.OutputEmitterRef<void>;
15921
16782
  readonly share: _angular_core.OutputEmitterRef<void>;
15922
16783
  readonly options: _angular_core.OutputEmitterRef<void>;
16784
+ /**
16785
+ * Optional: the backstage only needs a translator for the two strings the
16786
+ * shared helpers build (relative dates, recent-file fallbacks). A host that
16787
+ * has not provided ngx-translate should still get an English backstage
16788
+ * rather than an NG0201 at construction time.
16789
+ */
16790
+ private readonly translate;
16791
+ private readonly t;
15923
16792
  protected readonly templates: readonly BackstageTemplate[];
15924
16793
  protected readonly mainNav: _angular_core.Signal<readonly {
15925
16794
  id: BackstagePage;
15926
16795
  label: string;
16796
+ labelKey: string;
15927
16797
  group?: "footer";
15928
16798
  }[]>;
15929
16799
  protected readonly footerNav: {
15930
16800
  id: BackstagePage;
15931
16801
  label: string;
16802
+ labelKey: string;
15932
16803
  group?: "footer";
15933
16804
  }[];
15934
16805
  protected readonly page: _angular_core.WritableSignal<BackstagePage>;
15935
16806
  protected readonly query: _angular_core.WritableSignal<string>;
15936
16807
  protected readonly recent: _angular_core.WritableSignal<BackstageRecentFile[]>;
15937
- protected readonly title: _angular_core.Signal<string>;
16808
+ protected readonly titleKey: _angular_core.Signal<string>;
15938
16809
  protected readonly visibleRecent: _angular_core.Signal<BackstageRecentFile[]>;
15939
- protected readonly date: typeof formatBackstageDate;
15940
16810
  protected readonly size: typeof formatBackstageSize;
15941
16811
  protected readonly actions: _angular_core.Signal<BackstageAction[]>;
15942
16812
  constructor();
16813
+ protected date(timestamp: number): string;
15943
16814
  protected selectPage(id: BackstagePage): void;
15944
16815
  protected run(event: {
15945
16816
  emit: () => void;
15946
16817
  }): void;
15947
16818
  protected create(templateId: string): void;
15948
16819
  protected openRecent(key: string): void;
15949
- private action;
16820
+ /**
16821
+ * Card order, wording and dictionary keys come from `pptx-viewer-shared`;
16822
+ * this only maps each card to its glyph and to the output that fires it, so
16823
+ * the backstage cannot be worded differently here than in the other four
16824
+ * bindings.
16825
+ */
15950
16826
  private pageActions;
15951
16827
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonFileSectionComponent, never>;
15952
16828
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonFileSectionComponent, "pptx-ribbon-file-section", never, { "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "exporting": { "alias": "exporting"; "required": false; "isSignal": true; }; "hasMacros": { "alias": "hasMacros"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; "accountAuth": { "alias": "accountAuth"; "required": false; "isSignal": true; }; }, { "close": "close"; "createPresentation": "createPresentation"; "openFile": "openFile"; "openRecentFile": "openRecentFile"; "save": "save"; "savePpsx": "savePpsx"; "savePptm": "savePptm"; "packageForSharing": "packageForSharing"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "copySlideAsImage": "copySlideAsImage"; "print": "print"; "info": "info"; "signatures": "signatures"; "replace": "replace"; "openPassword": "openPassword"; "openFontEmbedding": "openFontEmbedding"; "openVersionHistory": "openVersionHistory"; "share": "share"; "options": "options"; }, never, never, true, never>;
@@ -15996,25 +16872,79 @@ declare class RibbonFontControlsComponent {
15996
16872
  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>;
15997
16873
  }
15998
16874
 
16875
+ /**
16876
+ * The slide layouts the Home tab's "New Slide" split button can insert from.
16877
+ *
16878
+ * A deck's layouts hang off its masters, one list per master, and a layout's
16879
+ * `name` is optional in OOXML. This flattens both facts away so the ribbon can
16880
+ * render a single menu without knowing about masters: one entry per layout, in
16881
+ * document order, always with something to display.
16882
+ *
16883
+ * Pure on purpose: the picker's behaviour is worth testing without a TestBed.
16884
+ */
16885
+
16886
+ /** One entry in the New Slide layout menu. */
16887
+ interface RibbonLayoutOption {
16888
+ /** Package path of the layout, written to the new slide's `layoutPath`. */
16889
+ path: string;
16890
+ /** Display name; falls back to the layout's file stem when OOXML omits one. */
16891
+ name: string;
16892
+ }
16893
+
15999
16894
  declare class RibbonHomeSectionComponent {
16000
16895
  protected readonly editor: EditorStateService;
16896
+ private readonly loader;
16897
+ /** Layouts offered by the New Slide split button (empty for a layout-less deck). */
16898
+ protected readonly layoutOptions: _angular_core.Signal<RibbonLayoutOption[]>;
16001
16899
  readonly slideIndex: _angular_core.InputSignal<number>;
16002
16900
  readonly selectedElement: _angular_core.InputSignal<PptxElement | null>;
16901
+ readonly canEdit: _angular_core.InputSignal<boolean>;
16003
16902
  readonly formatPainterActive: _angular_core.InputSignal<boolean>;
16004
16903
  readonly canActivateFormatPainter: _angular_core.InputSignal<boolean>;
16005
16904
  readonly toggleFormatPainter: _angular_core.OutputEmitterRef<void>;
16006
16905
  readonly findReplace: _angular_core.OutputEmitterRef<void>;
16007
16906
  readonly applyLayout: _angular_core.OutputEmitterRef<string>;
16008
16907
  readonly resetSlide: _angular_core.OutputEmitterRef<void>;
16009
- protected hasSel(): boolean;
16010
16908
  protected copy(): void;
16011
16909
  protected cut(): void;
16012
16910
  protected paste(): void;
16013
16911
  protected onSelectAll(): void;
16014
16912
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonHomeSectionComponent, never>;
16015
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonHomeSectionComponent, "pptx-ribbon-home-section", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; "formatPainterActive": { "alias": "formatPainterActive"; "required": false; "isSignal": true; }; "canActivateFormatPainter": { "alias": "canActivateFormatPainter"; "required": false; "isSignal": true; }; }, { "toggleFormatPainter": "toggleFormatPainter"; "findReplace": "findReplace"; "applyLayout": "applyLayout"; "resetSlide": "resetSlide"; }, never, never, true, never>;
16913
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonHomeSectionComponent, "pptx-ribbon-home-section", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "formatPainterActive": { "alias": "formatPainterActive"; "required": false; "isSignal": true; }; "canActivateFormatPainter": { "alias": "canActivateFormatPainter"; "required": false; "isSignal": true; }; }, { "toggleFormatPainter": "toggleFormatPainter"; "findReplace": "findReplace"; "applyLayout": "applyLayout"; "resetSlide": "resetSlide"; }, never, never, true, never>;
16914
+ }
16915
+
16916
+ declare class RibbonHyperlinkButtonComponent {
16917
+ protected readonly editor: EditorStateService;
16918
+ /** The host opens the hyperlink edit dialog for the current selection. */
16919
+ readonly openHyperlink: _angular_core.OutputEmitterRef<void>;
16920
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonHyperlinkButtonComponent, never>;
16921
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonHyperlinkButtonComponent, "pptx-ribbon-hyperlink-button", never, {}, { "openHyperlink": "openHyperlink"; }, never, never, true, never>;
16016
16922
  }
16017
16923
 
16924
+ /**
16925
+ * ribbon-insert-file-picker.ts: the browser-file plumbing behind Insert >
16926
+ * Image / Media.
16927
+ *
16928
+ * Extracted from {@link RibbonInsertSectionComponent} because none of it is
16929
+ * view code: it is a file dialog, a FileReader, and an <img> probe, all of
16930
+ * which the component only ever awaits. Keeping them here holds that component
16931
+ * to this repo's 300-LOC budget and makes the three steps testable without
16932
+ * instantiating a ribbon.
16933
+ *
16934
+ * Every helper resolves rather than rejects. An insert the user cancelled and
16935
+ * an insert the browser could not decode are the same non-event to the caller,
16936
+ * and a rejected promise would only be re-swallowed one frame later.
16937
+ */
16938
+ /** Read a File as a base64 data URL, resolving to '' on failure. */
16939
+ declare function readAsDataUrl(file: File): Promise<string>;
16940
+ /** Resolve an image data URL's natural dimensions (falls back to 400x300). */
16941
+ declare function imageDimensions(dataUrl: string): Promise<{
16942
+ width: number;
16943
+ height: number;
16944
+ }>;
16945
+ /** Open the native file picker for a single file of the given accept type. */
16946
+ declare function pickFile(accept: string, onFile: (file: File) => void): void;
16947
+
16018
16948
  declare class RibbonInsertFieldsComponent {
16019
16949
  private readonly editor;
16020
16950
  private readonly translate;
@@ -16046,13 +16976,21 @@ declare class RibbonInsertSectionComponent {
16046
16976
  private readonly translate;
16047
16977
  readonly slideIndex: _angular_core.InputSignal<number>;
16048
16978
  readonly newChartType: _angular_core.InputSignal<PptxChartType>;
16979
+ readonly newShapeType: _angular_core.InputSignal<ShapePresetType>;
16049
16980
  readonly openSmartArtDialog: _angular_core.OutputEmitterRef<void>;
16050
16981
  readonly openEquationDialog: _angular_core.OutputEmitterRef<void>;
16982
+ /** "Hyperlink"; the host opens the hyperlink edit dialog for the selection. */
16983
+ readonly openHyperlink: _angular_core.OutputEmitterRef<void>;
16051
16984
  readonly chartTypeChange: _angular_core.OutputEmitterRef<PptxChartType>;
16985
+ readonly shapeTypeChange: _angular_core.OutputEmitterRef<ShapePresetType>;
16052
16986
  /** Chart types offered in the Insert tab dropdown (shared source of truth). */
16053
16987
  protected readonly chartTypes: readonly InsertChartTypeOption[];
16988
+ /** Geometries offered by the Insert tab's shape picker (shared catalogue). */
16989
+ protected readonly shapePresets: readonly ShapePresetDef[];
16054
16990
  protected insertText(): void;
16055
- protected insertShape(kind: 'rect' | 'ellipse' | 'line'): void;
16991
+ protected setShapeType(event: Event): void;
16992
+ /** Insert the geometry currently chosen in the shape-type dropdown. */
16993
+ protected insertShape(): void;
16056
16994
  protected insertTable(): void;
16057
16995
  protected setChartType(event: Event): void;
16058
16996
  protected insertChart(): void;
@@ -16062,10 +17000,8 @@ declare class RibbonInsertSectionComponent {
16062
17000
  protected insertMedia(): void;
16063
17001
  private addImageFile;
16064
17002
  private addMediaFile;
16065
- /** Open the native file picker for a single file of the given accept type. */
16066
- private pickFile;
16067
17003
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonInsertSectionComponent, never>;
16068
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonInsertSectionComponent, "pptx-ribbon-insert-section", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "newChartType": { "alias": "newChartType"; "required": false; "isSignal": true; }; }, { "openSmartArtDialog": "openSmartArtDialog"; "openEquationDialog": "openEquationDialog"; "chartTypeChange": "chartTypeChange"; }, never, never, true, never>;
17004
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonInsertSectionComponent, "pptx-ribbon-insert-section", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "newChartType": { "alias": "newChartType"; "required": false; "isSignal": true; }; "newShapeType": { "alias": "newShapeType"; "required": false; "isSignal": true; }; }, { "openSmartArtDialog": "openSmartArtDialog"; "openEquationDialog": "openEquationDialog"; "openHyperlink": "openHyperlink"; "chartTypeChange": "chartTypeChange"; "shapeTypeChange": "shapeTypeChange"; }, never, never, true, never>;
16069
17005
  }
16070
17006
 
16071
17007
  declare class RibbonParagraphControlsComponent {
@@ -16174,6 +17110,30 @@ declare class RibbonReviewSectionComponent {
16174
17110
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonReviewSectionComponent, "pptx-ribbon-review-section", never, { "spellCheckEnabled": { "alias": "spellCheckEnabled"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, { "comments": "comments"; "spellCheckChange": "spellCheckChange"; "a11y": "a11y"; "openCompare": "openCompare"; "language": "language"; "link": "link"; }, never, never, true, never>;
16175
17111
  }
16176
17112
 
17113
+ /** Grouping needs an editable deck and at least two selected elements. */
17114
+ declare function canGroupSelection(canEdit: boolean, selectedCount: number): boolean;
17115
+ /** Ungrouping needs an editable deck and a selection that IS a group. */
17116
+ declare function canUngroupSelection(canEdit: boolean, element: PptxElement | null): boolean;
17117
+ /** An outline width only exists on an element that carries shape properties. */
17118
+ declare function canSetStrokeWidth(canEdit: boolean, element: PptxElement | null): boolean;
17119
+ /** The stroke width to show for a selection, defaulted for a shape without one. */
17120
+ declare function strokeWidthOf(element: PptxElement | null): number;
17121
+ declare class RibbonShapeExtrasComponent {
17122
+ protected readonly editor: EditorStateService;
17123
+ readonly slideIndex: _angular_core.InputSignal<number>;
17124
+ readonly selectedElement: _angular_core.InputSignal<PptxElement | null>;
17125
+ readonly canEdit: _angular_core.InputSignal<boolean>;
17126
+ /** Grouping needs two elements; the multi-select is the source of truth. */
17127
+ protected readonly canGroup: _angular_core.Signal<boolean>;
17128
+ protected readonly canUngroup: _angular_core.Signal<boolean>;
17129
+ protected readonly canSetStroke: _angular_core.Signal<boolean>;
17130
+ protected readonly strokeWidth: _angular_core.Signal<number>;
17131
+ /** Write the typed outline width through the history-integrated patch path. */
17132
+ protected onStrokeWidth(event: Event): void;
17133
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonShapeExtrasComponent, never>;
17134
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonShapeExtrasComponent, "pptx-ribbon-shape-extras", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17135
+ }
17136
+
16177
17137
  declare class RibbonSlideshowSectionComponent {
16178
17138
  readonly slideCount: _angular_core.InputSignal<number>;
16179
17139
  readonly showSubtitles: _angular_core.InputSignal<boolean>;
@@ -16183,6 +17143,7 @@ declare class RibbonSlideshowSectionComponent {
16183
17143
  readonly presentFromCurrent: _angular_core.OutputEmitterRef<void>;
16184
17144
  readonly presenter: _angular_core.OutputEmitterRef<void>;
16185
17145
  readonly broadcast: _angular_core.OutputEmitterRef<void>;
17146
+ /** "Custom show"; the host opens the custom-show manager dialog. */
16186
17147
  readonly openCustomShows: _angular_core.OutputEmitterRef<void>;
16187
17148
  readonly openSetUpSlideShow: _angular_core.OutputEmitterRef<void>;
16188
17149
  readonly rehearseTimings: _angular_core.OutputEmitterRef<void>;
@@ -16238,12 +17199,12 @@ declare class RibbonViewSectionComponent {
16238
17199
  readonly showRulers: _angular_core.InputSignal<boolean>;
16239
17200
  readonly showGuides: _angular_core.InputSignal<boolean>;
16240
17201
  readonly snapToGrid: _angular_core.InputSignal<boolean>;
17202
+ /** Whether dragging snaps to other shapes' edges (active-state styling). */
16241
17203
  readonly snapToShape: _angular_core.InputSignal<boolean>;
16242
17204
  readonly eyedropperActive: _angular_core.InputSignal<boolean>;
16243
17205
  readonly openSorter: _angular_core.OutputEmitterRef<void>;
16244
- readonly toggleNotes: _angular_core.OutputEmitterRef<void>;
16245
- readonly print: _angular_core.OutputEmitterRef<void>;
16246
- readonly openShortcuts: _angular_core.OutputEmitterRef<void>;
17206
+ /** Enter Reading View: the deck full-window, NOT the fullscreen slide show. */
17207
+ readonly openReadingView: _angular_core.OutputEmitterRef<void>;
16247
17208
  readonly openMasterView: _angular_core.OutputEmitterRef<void>;
16248
17209
  readonly toggleGrid: _angular_core.OutputEmitterRef<void>;
16249
17210
  readonly toggleRulers: _angular_core.OutputEmitterRef<void>;
@@ -16255,7 +17216,7 @@ declare class RibbonViewSectionComponent {
16255
17216
  readonly zoomToFit: _angular_core.OutputEmitterRef<void>;
16256
17217
  readonly toggleEyedropper: _angular_core.OutputEmitterRef<void>;
16257
17218
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonViewSectionComponent, never>;
16258
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonViewSectionComponent, "pptx-ribbon-view-section", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "eyedropperActive": { "alias": "eyedropperActive"; "required": false; "isSignal": true; }; }, { "openSorter": "openSorter"; "toggleNotes": "toggleNotes"; "print": "print"; "openShortcuts": "openShortcuts"; "openMasterView": "openMasterView"; "toggleGrid": "toggleGrid"; "toggleRulers": "toggleRulers"; "toggleGuides": "toggleGuides"; "toggleSelectionPane": "toggleSelectionPane"; "toggleSnapToGrid": "toggleSnapToGrid"; "toggleSnapToShape": "toggleSnapToShape"; "addGuide": "addGuide"; "zoomToFit": "zoomToFit"; "toggleEyedropper": "toggleEyedropper"; }, never, never, true, never>;
17219
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonViewSectionComponent, "pptx-ribbon-view-section", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "eyedropperActive": { "alias": "eyedropperActive"; "required": false; "isSignal": true; }; }, { "openSorter": "openSorter"; "openReadingView": "openReadingView"; "openMasterView": "openMasterView"; "toggleGrid": "toggleGrid"; "toggleRulers": "toggleRulers"; "toggleGuides": "toggleGuides"; "toggleSelectionPane": "toggleSelectionPane"; "toggleSnapToGrid": "toggleSnapToGrid"; "toggleSnapToShape": "toggleSnapToShape"; "addGuide": "addGuide"; "zoomToFit": "zoomToFit"; "toggleEyedropper": "toggleEyedropper"; }, never, never, true, never>;
16259
17220
  }
16260
17221
 
16261
17222
  /**
@@ -16426,6 +17387,30 @@ interface SwipeDismissDrag {
16426
17387
  */
16427
17388
  declare function createSwipeDismissDrag(onDismiss: () => void): SwipeDismissDrag;
16428
17389
 
17390
+ /**
17391
+ * ruler-strips.ts: the visibility gate for the slide canvas's ruler strips.
17392
+ *
17393
+ * Deliberately holds NO tick or guide-drop maths: it forwards to the shared
17394
+ * `generateTicks` (the single source of truth every binding renders from), and
17395
+ * exists only because Angular components cannot be mounted in this package's
17396
+ * unit tests, so the "rulers off -> no ticks / rulers on -> shared ticks" rule
17397
+ * needs a seam that is testable without a TestBed. It replaces the deleted
17398
+ * `ruler-ticks.ts`, which generated its OWN quarter-inch, inches-only ticks and
17399
+ * so disagreed with React, Vue, Svelte and Vanilla at every zoom level.
17400
+ */
17401
+
17402
+ /** Ticks for one ruler strip, or nothing at all while the strip is hidden. */
17403
+ declare function rulerStripTicks(visible: boolean, slideLengthPx: number, scale: number, unit: RulerUnit): ReadonlyArray<Tick>;
17404
+ /**
17405
+ * Selected-element extent projected onto a strip, in scaled px, or null when
17406
+ * nothing (or more than one thing) is selected. PowerPoint shades this span on
17407
+ * both rulers; React and Svelte do the same.
17408
+ */
17409
+ declare function rulerHighlight(start: number | undefined, span: number | undefined, scale: number): {
17410
+ start: number;
17411
+ span: number;
17412
+ } | null;
17413
+
16429
17414
  /**
16430
17415
  * collaboration-writeback.ts: elected-writer serialization helper for the
16431
17416
  * Angular collaboration service.
@@ -16877,11 +17862,11 @@ declare class TitleBarComponent {
16877
17862
  /** Resolved Quick Access options (host-supplied, or the default trio+). */
16878
17863
  protected readonly qat: _angular_core.Signal<ViewerQuickAccessOptions>;
16879
17864
  /**
16880
- * Configured Quick Access commands beyond the dedicated save/undo/redo
16881
- * buttons (which keep their own gating + labels). Rendered as text-label
16882
- * buttons routed through {@link onQuickCommand}.
17865
+ * The Quick Access options narrowed to the commands beyond the dedicated
17866
+ * save/undo/redo buttons. Reusing {@link QuickAccessStripComponent} for the
17867
+ * remainder means those buttons carry real icons rather than a letter glyph.
16883
17868
  */
16884
- protected readonly extraQuickCommands: _angular_core.Signal<QuickAccessCommandDefinition[]>;
17869
+ protected readonly extraQat: _angular_core.Signal<ViewerQuickAccessOptions>;
16885
17870
  /**
16886
17871
  * Route a Quick Access press: keep the dedicated save/undo/redo outputs
16887
17872
  * (existing host wiring, `hiddenActions` gating) and forward everything
@@ -17008,5 +17993,5 @@ declare const SEQUENCE_OPTIONS: ReadonlyArray<{
17008
17993
  labelKey: string;
17009
17994
  }>;
17010
17995
 
17011
- export { ALIGN_OPTIONS, AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AVATAR_COLOR_SWATCHES, AccessibilityPanelComponent, AccessibilityService, AccountPageComponent, ActionSettingsPanelComponent, AdvancedChartEditorComponent, AiChangeOverlayComponent, AiChatPanelComponent, AiChatService, AiComposerComponent, AiFocusBarComponent, AiFocusHighlightOverlayComponent, AiMessageListComponent, AiPanelStore, AiProposalCardComponent, AiSettingsSectionComponent, AiToolCallCardComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, AutosaveService, BroadcastDialogComponent, CHART_EDITOR_STYLES, CURSOR_PALETTE, CanvasFitService, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartElementViewComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartPartSelectionService, ChartPrimitivesComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, CollaborationCursorsComponent, CollaborationService, ColorChangedImageComponent, CommentsPanelComponent, CommentsService, ComparePanelComponent, ConnectorRendererComponent, ConnectorTextOverlayComponent, CustomShowsComponent, DATA_TABLE_HEADER_H, DATA_TABLE_KEY_W, DATA_TABLE_PADDING, DATA_TABLE_ROW_H, 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_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_STYLE, DEFAULT_TABLE_ROW_HEIGHT, DEFAULT_TEXT_COLOR, DEFAULT_VIEWER_PROFILE, DIRECTIONAL_PRESETS, DIRECTION_OPTIONS, DocumentPropertiesCardComponent, EMBEDDED_FONTS_STYLE_ID, EMPHASIS_PRESETS, ENTRANCE_PRESETS, TEMPLATES as EQUATION_TEMPLATES, EXIT_PRESETS, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportProgressModalComponent, ExportService, FieldContextService, FindBarComponent, FindReplaceBarComponent, FollowModeBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GALLERY_THEME_PRESETS, 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, MediaPreviewComponent, MediaPropertiesPanelComponent, MediaRendererComponent, MediaTrimTimelineComponent, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesHandoutCardComponent, NotesPanelComponent, NotesToolbarComponent, OleRendererComponent, POWER_POINT_VIEWER_PROVIDERS, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationPropertiesPanelComponent, PresentationSettingsCardComponent, PresentationSubtitleBarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, REPEAT_MODE_OPTIONS, RESIZE_HANDLES, RULER_THICKNESS, RemoteSelectionOverlayComponent, RibbonAnimationsSectionComponent, RibbonArrangeSectionComponent, RibbonColorPopoverComponent, RibbonComponent, RibbonDesignSectionComponent, RibbonDrawSectionComponent, RibbonDrawingGroupComponent, RibbonEditingSectionComponent, RibbonFileSectionComponent, RibbonFontControlsComponent, RibbonHomeSectionComponent, RibbonInsertFieldsComponent, RibbonInsertSectionComponent, RibbonParagraphControlsComponent, RibbonPrimaryRowComponent, RibbonReviewSectionComponent, RibbonSlideshowSectionComponent, RibbonTransitionsSectionComponent, RibbonViewSectionComponent, RulerGuidesService, SEQUENCE_OPTIONS, SEVERITY_GROUPS, SEVERITY_LABELS, SHORTCUT_REFERENCE_ITEMS, SLIDE_PX_PER_INCH, 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, SlideCanvasComponent, SlideDefaultInspectorComponent, SlideDiffChangesComponent, SlideDiffRowComponent, SlideDiffThumbnailsComponent, SlideSizeCardComponent, SlideSorterOverlayComponent, SlideThemeOverridePanelComponent, SlidesPanelComponent, SmartArt3DRendererComponent, SmartArt3DService, SmartArtPreviewComponent, SmartArtPropertiesComponent, SmartArtRendererComponent, StatusBarComponent, TABLE_STRUCTURE_TOGGLES, TEXT_DIRECTION_OPTIONS, THEME_CATALOG, TIMING_CURVE_OPTIONS, TRIGGER_OPTIONS, TYPE_LABELS, TableCellAdvancedFillComponent, TableCellFormattingComponent, TableDataEditorComponent, TablePropertiesComponent, TableRendererComponent, TableResizeOverlayComponent, TableSelectionService, TextAdvancedPanelComponent, ThemeEditorFieldsComponent, ThemeGalleryComponent, ThemeSelectorCardComponent, TitleBarComponent, 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, ZoomNavigationService, ZoomRendererComponent, ZoomTargetService, addCategory, addCommentToList, addGradientStopPatch, addItem, addSeries, addSubItem, advanceStep, aiToggleVisible, alignPatch, animationFor, annotationMapToInkInserts, applyAcceptedDiff, applyAnimationPreset, applyFindReplacements, applyFormatToElement, applyMove, applyResize, applyTableStylePreset, asMediaElement, assignUserColor, attachTouchGestures, beginNodeEdit, 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, buildModel3DContainerStyle, buildModel3DViewModel, buildOleActionModel, buildOleInfoRows, buildPatternFillCss, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildRegionMapViewModel, buildSaveSlides, buildShareUrl, buildSmartArtInsertElement, buildSmartArtNodes, buildStockViewModel, buildSurfaceViewModel, buildTableViewModel, buildTreemapViewModel, buildTrimFragment, buildWaterfallViewModel, buildZeroLine, buildZoomContainerStyle, buildZoomViewModel, bulletIndentPx, canAddTopLevelNode, canRemoveTopLevelNode, canStartBroadcast, canStartShare, canUseClipboard, captionDisplayText, cellRunStyle, cellStyleToStyleMap, cellTdStyle, changeCountLabel, changeIcon, characterSpacingPatch, checkFontAvailable, clampCursorPosition, clampGifDimensions, clampIndex, clampNotesFontSize, clampScale, clampStep, clearAllLocalViewerData, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, collectStoredChats, collectUsedFontFamilies, columnWidthStyle, commitNodeText, computeAlign, computeAxisTitlePrimitives, computeBarRects, computeBubbleRadius, computeCornerHandle, computeDataTablePrimitives, computeDistribute, computeDrawingViewBox, computeErrorBarPrimitives, computeFocusTargets, computeHandleBoxes, computeHandoutLayout, computeIsMobile, computeIsTablet, computeLinePoints, computeLinearRegression, computePageCount, computePieLayout, computePieSlicePath, computePieSlices, computePlotLayout, computeRSquared, computeRadarPoints, computeScatterDots, computeSelectionBoxes, computeSingleSelected, computeSlideIndices, computeSnap, computeStackedBarRects, computeStackedValueRange, computeTextLines, computeTimerProgress, 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, estimatePageCount, evenColumnWidths, evenRowHeights, exitPresentationFullscreen, exportAiChatLogs, extractPathPoints, eyedropperAvailable, fillColorOf, findInSlides, findOwningSlideIndex, findSlideIndexByElementId, fitPolynomial, fitZoom, focusTargetChips, fontMimeForFormat, fontSizeOf, formatAutoNumber, formatAxisValue, formatBytes, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, generateCustomShowId, generatePressureCircles, generateRulerTicks, getClrChangeParams, getContainerStyle, getDuotoneFilterDef, getImageSrc, getLocalStorageUsageSummary, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDownloadFileName, getOleTypeColor, getOleTypeLabel, getPasswordStrength, getPatternSvg, getPlaceholderStyle, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getSmartArtNodeBounds, getSpeechRecognitionCtor, getTextBlockStyle, getTextWarp, getTouchDistance, getWarpCategory, getWarpPath, gradientStateFromStyle, gradientStateOf, gradientStatePatch, gridColumns, groupElements, groupIssuesBySeverity, hasAnimation, hasCopyableFormat, hasExistingLink, hasExitedFullscreen, hasGradientFill, hasPressureVariation, hasVisibleSlideAfter, headerLabel, inkViewBox, insertColumn, insertRow, interpolateWidth, isAudienceTab, isBold, isBrowserOpenableMime, isChildNode, isElementInteractive, isInjectableUrl, isItalic, isPpactionUrl, isPresenterMessage, isSigned, isTextElement, isTwoTableFocus, isUnderline, isUrlSafe, isValidRoomId, isViewportBackgroundPressTarget, isZoomActivationKey, issueTrackKey, issueTypeLabel, keyToLabel, latexToMathml, linePointsToSvgString, lineSpacingPatch, loadAudienceContent, mergeCaptionResults, mergeDown, mergeRight, mergeSelection, 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, pendingElementStyles, pickColorByClickFallback, pickSupportedMimeType, planGifFrames, planVideoSegments, pointsToSvgPathD, presenceToCursors, presetByLayout, presetsForCategory, pressuresToWidths, prevVisibleIndex, projectDrawingShapes, promoteNode, provideViewerTheme, radarAngle, radarRingPoints, recordWebm, redistributeColumnWidth, removeAnimation, removeCategory, removeColumn, removeCommentFromList, removeElementAnimation, removeGradientStopPatch, removeNode, removeRow, removeSeries, renderToCanvas, reorderAnimationDown, reorderAnimationUp, replaceInSlides, replaceMatch, requestPresentationFullscreen, resizeElement, resolveCaptionTracks, resolveChartKind, resolveFontVariant, resolveHyperlinkHref, resolveInteractiveElementId, resolveMediaSrc, resolveOleType, resolveParagraphBullet, resolvePresenterNotes, resolveProfileInitial, resolveRegionCode, resolveSlideAutoAdvanceMs, resolvePalette as resolveSmartArtPalette, resolveThemeCatalogEntry, resolveTransitionDuration, revealedElementStyles, routeOrthogonalConnector, rowStyle, sampleColorFromSlide, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, saveViewerProfile, scanAvailableFonts, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, selectValue, sendBackward, sendToBack, sequentialColorScale, serializeWriteBack, seriesColor, setAnimationEmphasis, setAnimationEntrance, setAnimationExit, setAxis, setAxisLogScale, setAxisTitleStyle, setCategoryLabel, setCellText, setColorScheme, setDataLabels, setDataPointExplosion, setDataPointFill, setDataPointLabel, setDelay, setDirection, setDuration, 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, smartArtNodes, paletteColour as smartArtPaletteColour, snapToGridStep, splitCursorCell, splitMergedCell, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, stringFromEvent, strokeColorOf, strokeToInkElement, styleShadowFilter, textAdvancedPatch, textAdvancedStateFromStyle, textAdvancedStateOf, textColorOf, textDirectionPatch, textStyleOf, textStylePatch, themeStyle, themeToCssVars, thumbnailHeight, thumbnailZoom, toggleCommentResolvedInList, toggleNodeBold, toggleNodeItalic, toggleSheet, topLevelNodeCount, transformSelectedTextCase, translationsEn, ungroupElements, updateElementById, updateGlowPatch, updateGradientStopPatch, updateInnerShadowPatch, updateOuterShadowPatch, updateReflectionPatch, vAlignPatch, validatePassword, validatePrintSettings, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, waypointsToPathD, worstStatus, zoomTargetSlideIndex };
17012
- export type { AccessibilityIssueGroup, AccountAuthConfig, ActionDescriptor, AiCanvasHighlight, AiChatInitState, AiLogChat, AiLogExport, AiLogFormat, AiLogMessage, AiPanelSelectionAccessors, AlignBox, AlignMode, AnimationClickGroup, AnimationGroup, AnnotationInkInsert, AnnotationStroke, AttachTouchGesturesConfig, AwarenessLike, BarRect, Box, BridgeDeps, BroadcastConfig, BroadcastDefaults, CSSProperties, CanvasSize, CellCoord, CellParagraph, CellTextRun, ChartPartRef, ChartPartSelection, ChartValueDrag, ChartViewModel, ClassValue, ClrChangeParams, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, CornerHandleBox, CustomShow, CustomThemeEdit, DestroyableYDoc, DiagonalBorderInfo, DistributeMode, DocumentProperties, DrawingViewBox, DuotoneFilterDef, EffectsState, EmbeddedFontStyles, EquationTemplate, EyedropperResult, FindOptions, FindResult, FocusChip, FocusSelectionInput, GifFrame, GifFramePlan, GifPlanOptions, GlowState, GradientState, GradientStop$1 as GradientStop, GroupResult, HandleBox, HandoutSlidesPerPage, HyperlinkDraft, InkPoint, InkStroke, InlineEditState, InnerShadowState, LegendEntry, LinePoint, LinearFit, LocalIdentity, LocalStorageUsageSummary, LocaleCatalogEntry, MobileSheetKey, Model3DViewModel, NodeEditBox, NotesSegmentViewModel, ObjectUrlFactory, OleActionModel, OleInfoRow, OuterShadowState, OverallSignatureStatus, PartitionedSlides, PathPoint, PieSliceGeometry, PieSliceOptions, PlotLayout, PlotLayoutOptions, PositionUpdate, PowerPointViewerAPI, PptxAiBridge, PptxAiConfig, PptxAiConnection, PptxAiContextStrategy, PptxAiElementUpdate, PptxAiToolName, PptxAiUIMessage, PptxAiWritePolicy, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, 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, RulerTick, ScatterDot, SelectionBox, 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, TextAdvancedChanges, TextAdvancedState, TextStyleChanges, TextWarpCssDef, TextWarpDef, TextWarpPathDef, ThemeCatalogEntry, TimerProgress, ToolbarActionId, TouchGestureCallbacks, TranslationKey, UngroupResult, ValueRange, VideoPlanOptions, VideoSegmentPlan, ViewerMode, ViewerProfile, ViewerSettings, ViewerTheme, ViewerThemeColors, ZoomViewModel };
17996
+ export { ALIGN_OPTIONS, ANIMATION_PRESET_CATEGORIES, AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AVATAR_COLOR_SWATCHES, AccessibilityPanelComponent, AccessibilityService, AccountPageComponent, ActionSettingsPanelComponent, AdvancedChartEditorComponent, AiChangeOverlayComponent, AiChatPanelComponent, AiChatService, AiComposerComponent, AiFocusBarComponent, AiFocusHighlightOverlayComponent, AiMessageListComponent, AiPanelStore, AiProposalCardComponent, AiSettingsSectionComponent, AiToolCallCardComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, AutosaveService, BroadcastDialogComponent, CHART_EDITOR_STYLES, CURSOR_PALETTE, CanvasFitService, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartElementViewComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartPartSelectionService, ChartPrimitivesComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, CollaborationCursorsComponent, CollaborationService, ColorChangedImageComponent, CommentsPanelComponent, CommentsService, ComparePanelComponent, ConnectorRendererComponent, ConnectorTextOverlayComponent, CustomShowsComponent, DATA_TABLE_HEADER_H, DATA_TABLE_KEY_W, DATA_TABLE_PADDING, DATA_TABLE_ROW_H, 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_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_STYLE, DEFAULT_TABLE_ROW_HEIGHT, DEFAULT_TEXT_COLOR, DEFAULT_VIEWER_PROFILE, DIRECTIONAL_PRESETS, DIRECTION_OPTIONS, DocumentPropertiesCardComponent, EMBEDDED_FONTS_STYLE_ID, EMPHASIS_PRESETS, ENTRANCE_PRESETS, TEMPLATES as EQUATION_TEMPLATES, EXIT_PRESETS, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportProgressModalComponent, ExportService, FieldContextService, FindBarComponent, FindReplaceBarComponent, FollowModeBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GALLERY_THEME_PRESETS, 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, MediaPreviewComponent, MediaPropertiesPanelComponent, MediaRendererComponent, MediaTrimTimelineComponent, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesHandoutCardComponent, NotesPanelComponent, NotesToolbarComponent, OleRendererComponent, POWER_POINT_VIEWER_PROVIDERS, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PX_PER_CM, PX_PER_INCH, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationPropertiesPanelComponent, PresentationSettingsCardComponent, PresentationSubtitleBarComponent, 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, 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, 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, ZoomNavigationService, ZoomRendererComponent, ZoomTargetService, addCategory, addCommentToList, addGradientStopPatch, addItem, addSeries, addSubItem, advanceStep, aiToggleVisible, alignPatch, animationFor, animationPresetLabelKey, annotationMapToInkInserts, applyAcceptedDiff, applyAnimationPreset, applyFindReplacements, applyFormatToElement, applyMove, applyResize, applyTableStylePreset, asMediaElement, assignUserColor, attachTouchGestures, 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, buildModel3DContainerStyle, buildModel3DViewModel, buildOleActionModel, buildOleInfoRows, buildPatternFillCss, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildRegionMapViewModel, buildSaveSlides, buildShareUrl, buildSmartArtInsertElement, buildSmartArtNodes, buildStockViewModel, buildSurfaceViewModel, buildTableViewModel, buildTreemapViewModel, buildTrimFragment, buildWaterfallViewModel, buildZeroLine, buildZoomContainerStyle, buildZoomViewModel, bulletIndentPx, canAddTopLevelNode, canGroupSelection, canRemoveTopLevelNode, canSetStrokeWidth, canStartBroadcast, canStartShare, canUngroupSelection, canUseClipboard, captionDisplayText, cellRunStyle, cellStyleToStyleMap, cellTdStyle, changeCountLabel, changeIcon, characterSpacingPatch, checkFontAvailable, clampCursorPosition, clampGifDimensions, clampIndex, clampNotesFontSize, clampScale, clampStep, clearAllLocalViewerData, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, collectStoredChats, collectUsedFontFamilies, columnWidthStyle, commitNodeText, computeAlign, computeAxisTitlePrimitives, computeBarRects, computeBubbleRadius, computeCornerHandle, computeDataTablePrimitives, computeDistribute, computeDrawingViewBox, computeErrorBarPrimitives, computeFocusTargets, computeHandleBoxes, computeHandoutLayout, computeIsMobile, computeIsTablet, computeLinePoints, computeLinearRegression, computePageCount, computePieLayout, computePieSlicePath, computePieSlices, computePlotLayout, computeRSquared, computeRadarPoints, computeScatterDots, computeSelectionBoxes, computeSingleSelected, computeSlideIndices, computeSnap, computeStackedBarRects, computeStackedValueRange, computeTextLines, computeTimerProgress, 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, estimatePageCount, evenColumnWidths, evenRowHeights, exitPresentationFullscreen, exportAiChatLogs, extractPathPoints, eyedropperAvailable, fillColorOf, findInSlides, findOwningSlideIndex, findSlideIndexByElementId, fitPolynomial, fitZoom, focusTargetChips, fontMimeForFormat, fontSizeOf, formatAutoNumber, formatAxisValue, formatBytes, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, generateCustomShowId, generatePressureCircles, generateTicks, getClrChangeParams, getContainerStyle, getDuotoneFilterDef, getImageSrc, getLocalStorageUsageSummary, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDownloadFileName, getOleTypeColor, getOleTypeLabel, getPasswordStrength, getPatternSvg, getPlaceholderStyle, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getSmartArtNodeBounds, getSpeechRecognitionCtor, getTextBlockStyle, getTextWarp, getTouchDistance, getWarpCategory, getWarpPath, gradientStateFromStyle, gradientStateOf, gradientStatePatch, gridColumns, groupElements, 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, isPpactionUrl, isPresenterMessage, isSigned, isTextElement, isTwoTableFocus, isUnderline, isUrlSafe, isValidRoomId, isViewportBackgroundPressTarget, isZoomActivationKey, issueTrackKey, issueTypeLabel, keyToLabel, latexToMathml, linePointsToSvgString, lineSpacingPatch, loadAudienceContent, mergeCaptionResults, mergeDown, mergeRight, mergeSelection, 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, pendingElementStyles, pickColorByClickFallback, pickFile, pickSupportedMimeType, planGifFrames, planVideoSegments, pointsToSvgPathD, presenceToCursors, presetByLayout, presetsForCategory, pressuresToWidths, prevVisibleIndex, projectDrawingShapes, promoteNode, provideViewerTheme, radarAngle, radarRingPoints, readAsDataUrl, recordWebm, redistributeColumnWidth, 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, resolveSlideAutoAdvanceMs, resolvePalette as resolveSmartArtPalette, resolveThemeCatalogEntry, resolveTransitionDuration, revealedElementStyles, routeOrthogonalConnector, rowStyle, rulerDragToGuidePosition, rulerHighlight, rulerStripTicks, sampleColorFromSlide, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, saveViewerProfile, scanAvailableFonts, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, selectValue, sendBackward, sendToBack, sequentialColorScale, serializeWriteBack, seriesColor, setAnimationEmphasis, setAnimationEntrance, setAnimationExit, setAxis, setAxisLogScale, setAxisTitleStyle, setCategoryLabel, setCellText, setColorScheme, setDataLabels, setDataPointExplosion, setDataPointFill, setDataPointLabel, setDelay, setDirection, setDuration, 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, smartArtNodes, paletteColour as smartArtPaletteColour, snapToGridStep, splitCursorCell, splitMergedCell, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, stringFromEvent, strokeColorOf, strokeToInkElement, strokeWidthOf, styleShadowFilter, textAdvancedPatch, textAdvancedStateFromStyle, textAdvancedStateOf, textColorOf, textDirectionPatch, textStyleOf, textStylePatch, themeStyle, themeToCssVars, thumbnailHeight, thumbnailZoom, toggleCommentResolvedInList, toggleNodeBold, toggleNodeItalic, toggleSheet, topLevelNodeCount, transformSelectedTextCase, translationsEn, ungroupElements, updateElementById, updateGlowPatch, updateGradientStopPatch, updateInnerShadowPatch, updateOuterShadowPatch, updateReflectionPatch, vAlignPatch, validatePassword, validatePrintSettings, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, waypointsToPathD, worstStatus, zoomTargetSlideIndex };
17997
+ export type { AccessibilityIssueGroup, AccountAuthConfig, ActionDescriptor, AiCanvasHighlight, AiChatInitState, AiLogChat, AiLogExport, AiLogFormat, AiLogMessage, AiPanelSelectionAccessors, AlignBox, AlignMode, AnimationClickGroup, AnimationGroup, AnimationPresetCategory, AnimationPresetEntry, AnimationPresetPick, AnnotationInkInsert, AnnotationStroke, AttachTouchGesturesConfig, AwarenessLike, BarRect, Box, BridgeDeps, BroadcastConfig, BroadcastDefaults, CSSProperties, CanvasSize, CellCoord, CellParagraph, CellTextRun, ChartPartRef, ChartPartSelection, ChartValueDrag, ChartViewModel, ClassValue, ClrChangeParams, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, CornerHandleBox, CustomShow, CustomThemeEdit, DestroyableYDoc, DiagonalBorderInfo, DistributeMode, DocumentProperties, DrawingViewBox, DuotoneFilterDef, EffectsState, EmbeddedFontStyles, EquationTemplate, EyedropperResult, FindOptions, FindResult, FocusChip, FocusSelectionInput, GifFrame, GifFramePlan, GifPlanOptions, GlowState, GradientState, GradientStop$1 as GradientStop, GroupResult, HandleBox, HandoutSlidesPerPage, HyperlinkDraft, InkPoint, InkStroke, InlineEditState, InnerShadowState, LegendEntry, LinePoint, LinearFit, LocalIdentity, LocalStorageUsageSummary, LocaleCatalogEntry, MobileSheetKey, Model3DViewModel, NodeEditBox, NotesSegmentViewModel, ObjectUrlFactory, OleActionModel, OleInfoRow, OuterShadowState, OverallSignatureStatus, PartitionedSlides, PathPoint, PieSliceGeometry, PieSliceOptions, PlotLayout, PlotLayoutOptions, PositionUpdate, PowerPointViewerAPI, PptxAiBridge, PptxAiConfig, PptxAiConnection, PptxAiContextStrategy, PptxAiElementUpdate, PptxAiToolName, PptxAiUIMessage, PptxAiWritePolicy, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, 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, ScatterDot, SelectionBox, 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, TimerProgress, ToolbarActionId, TouchGestureCallbacks, TranslationKey, UngroupResult, ValueRange, VideoPlanOptions, VideoSegmentPlan, ViewerMode, ViewerProfile, ViewerSettings, ViewerTheme, ViewerThemeColors, ZoomViewModel };