pptx-angular-viewer 3.6.5 → 3.8.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,5 +1,5 @@
1
1
  import * as pptx_viewer_core from 'pptx-viewer-core';
2
- import { PptxThemePreset, PptxSlide, PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartLegendTextStyle, PptxChartData, PptxChartDataLabelPosition, PptxChartType, PptxElementAnimation, PptxAnimationPreset, PptxAnimationSequence, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, PptxAfterAnimationAction, ParsedTableStyleMap, PptxThemeColorScheme, PptxThemeFontScheme, TablePptxElement, PptxSection, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, PptxSlideTransition, SmartArtLayoutType, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PlaceholderDefaults, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, ElementActionType, InkPptxElement, PptxComment, PptxChartBarDirection, MasterViewTab, MediaPptxElement, PptxTheme, PptxHandler, PptxData, PptxModernCommentAuthor, PptxCommentMention, PptxHeaderFooter, PptxCustomShow, PptxSlideMaster, PptxNotesMaster, PptxHandoutMaster, PptxPresentationProperties, PptxViewProperties, PptxCoreProperties, PptxAppProperties, PptxThemeOption, PptxCustomProperty, PptxTagCollection, ParsedSignature, PptxSaveFormat, PptxTableCell, PptxTableCellStyle, PptxTableRow, PptxTableData, SvgExportOptions, PptxGridSpacing, RenderedNode, RenderedCircleNode, RenderedPolygonNode, RenderedRectNode, SmartArtLayoutResult, Model3DPptxElement, ZoomPptxElement, ChartPptxElement, SmartArtPptxElement, PptxAnimationTimelineAnchor, MaterialPresetType, Text3DStyle, BevelPresetType, PptxBar3DShape, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartMarker, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, PptxTextStyleLevels, SignatureStatus, ElementAction, PptxImageEffects, MediaBookmark, ColorMapAliasKey, ChartAxisEdit, ChartDataPointLabelEdit, PptxChartLegendPosition, PptxChartStyle, ChartAxisTitleStyleEdit, PptxChartMarkerSymbol, ChartGridlineStyleEdit, PptxSmartArtNode, PptxSmartArtNodeStyle, PptxLayoutPreview, MediaCaptionTrack, PptxMediaType } from 'pptx-viewer-core';
2
+ import { PptxThemePreset, PptxSlide, PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartLegendTextStyle, PptxChartData, PptxChartDataLabelPosition, PptxChartType, PptxElementAnimation, PptxAnimationPreset, PptxAnimationSequence, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, PptxAfterAnimationAction, ParsedTableStyleMap, PptxThemeColorScheme, PptxThemeFontScheme, TablePptxElement, PptxSection, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, PptxSlideTransition, SmartArtLayoutType, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PptxThemeColorRef, PlaceholderDefaults, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, ElementActionType, InkPptxElement, PptxComment, PptxChartBarDirection, MasterViewTab, MediaPptxElement, PptxTheme, PptxHandler, PptxData, PptxModernCommentAuthor, PptxCommentMention, PptxHeaderFooter, PptxCustomShow, PptxSlideMaster, PptxNotesMaster, PptxHandoutMaster, PptxPresentationProperties, PptxViewProperties, PptxCoreProperties, PptxAppProperties, PptxThemeOption, PptxCustomProperty, PptxTagCollection, ParsedSignature, PptxSaveFormat, PptxTableCell, PptxTableCellStyle, PptxTableRow, PptxTableData, SvgExportOptions, PptxGridSpacing, RenderedNode, RenderedCircleNode, RenderedPolygonNode, RenderedRectNode, SmartArtLayoutResult, Model3DPptxElement, ZoomPptxElement, ChartPptxElement, SmartArtPptxElement, PptxAnimationTimelineAnchor, MaterialPresetType, Text3DStyle, BevelPresetType, PptxBar3DShape, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartMarker, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, PptxTextStyleLevels, SignatureStatus, ElementAction, PptxImageEffects, MediaBookmark, ColorMapAliasKey, ChartAxisEdit, ChartDataPointLabelEdit, PptxChartLegendPosition, PptxChartStyle, ChartAxisTitleStyleEdit, PptxChartMarkerSymbol, ChartGridlineStyleEdit, PptxSmartArtNode, PptxSmartArtNodeStyle, PptxLayoutPreview, MediaCaptionTrack, PptxMediaType } from 'pptx-viewer-core';
3
3
  export { GroupResult, SWITCHABLE_LAYOUT_TYPES, UngroupResult, addSmartArtNode, addSmartArtNodeAsChild, chartDataChangeType, chartDataUpdatePoint, demoteSmartArtNode, formatAutoNumberMarker as formatAutoNumber, groupElements, promoteSmartArtNode, removeSmartArtNode, reorderSmartArtNode, switchSmartArtLayout, ungroupElements, updateSmartArtNodeText } from 'pptx-viewer-core';
4
4
  import * as _angular_core from '@angular/core';
5
5
  import { Signal, WritableSignal, OnDestroy, OnInit, AfterViewInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
@@ -569,6 +569,66 @@ interface ComputedFillStyle {
569
569
  };
570
570
  }
571
571
 
572
+ /**
573
+ * `path="rect"` SVG paint server: the true nested-rectangle (Chebyshev)
574
+ * gradient field, as a `<pattern>` whose tile is the same normalised SVG
575
+ * image {@link ./path-gradient-rect.ts} builds for the CSS `background-image`
576
+ * path.
577
+ *
578
+ * Split out of `svg-gradient-paint.ts` (which stays focused on the
579
+ * `<linearGradient>` / `<radialGradient>` paint servers SVG can express
580
+ * natively) to keep both files under this repo's ~300-LOC guideline.
581
+ *
582
+ * @module svg-gradient-rect-path
583
+ */
584
+
585
+ /**
586
+ * A `path="rect"` gradient's true nested-rectangle field, painted as a
587
+ * `<pattern>` whose single tile is stretched to the shape's own box
588
+ * (`patternUnits="objectBoundingBox"`, `width`/`height` 1, the `<image>`
589
+ * itself `preserveAspectRatio="none"`).
590
+ *
591
+ * SVG's native `<radialGradient>` can only express an ellipse, which is a
592
+ * visibly wrong approximation for a rect-path gradient near a non-square
593
+ * shape's corners (see `path-gradient-rect.ts`'s module doc), so a freeform
594
+ * (`a:custGeom`) shape with `a:path type="rect"` needs this distinct paint
595
+ * server instead of an elliptical `SvgRadialGradientDef`.
596
+ */
597
+ interface SvgRectPathGradientDef {
598
+ kind: 'rectPath';
599
+ id: string;
600
+ /** `data:image/svg+xml,...` of the nested-rectangle band field. */
601
+ href: string;
602
+ }
603
+
604
+ /**
605
+ * SVG `<pattern>` paint server for a preset pattern OUTLINE (`a:ln/a:pattFill`).
606
+ *
607
+ * Split out of `svg-gradient-paint.ts` to keep that file (and this one) under
608
+ * this repo's ~300-LOC guideline; both are part of the same "freeform shape
609
+ * needs a real SVG paint server, not a flattened representative colour"
610
+ * effort (see that module's header).
611
+ *
612
+ * @module svg-stroke-pattern-paint
613
+ */
614
+
615
+ /**
616
+ * An SVG `<pattern>` paint server for a preset pattern OUTLINE.
617
+ *
618
+ * The tile is carried as a data-URI `<image>` rather than inline primitives so
619
+ * every binding can render the `<pattern>` from plain attribute bindings, with
620
+ * no raw-markup injection (which Angular's template sanitiser would fight).
621
+ */
622
+ interface SvgPatternDef {
623
+ kind: 'pattern';
624
+ id: string;
625
+ /** Tile size in user-space px; the pattern repeats on this grid. */
626
+ width: number;
627
+ height: number;
628
+ /** `data:image/svg+xml,…` of one rendered tile. */
629
+ href: string;
630
+ }
631
+
572
632
  /**
573
633
  * OOXML gradient fill (`a:gradFill`) → SVG paint server.
574
634
  *
@@ -617,24 +677,9 @@ interface SvgRadialGradientDef {
617
677
  r: number;
618
678
  stops: SvgGradientStopDef[];
619
679
  }
680
+
620
681
  /** Either flavour of SVG gradient produced by {@link buildSvgGradientDef}. */
621
- type SvgGradientDef = SvgLinearGradientDef | SvgRadialGradientDef;
622
- /**
623
- * An SVG `<pattern>` paint server for a preset pattern OUTLINE.
624
- *
625
- * The tile is carried as a data-URI `<image>` rather than inline primitives so
626
- * every binding can render the `<pattern>` from plain attribute bindings, with
627
- * no raw-markup injection (which Angular's template sanitiser would fight).
628
- */
629
- interface SvgPatternDef {
630
- kind: 'pattern';
631
- id: string;
632
- /** Tile size in user-space px; the pattern repeats on this grid. */
633
- width: number;
634
- height: number;
635
- /** `data:image/svg+xml,…` of one rendered tile. */
636
- href: string;
637
- }
682
+ type SvgGradientDef = SvgLinearGradientDef | SvgRadialGradientDef | SvgRectPathGradientDef;
638
683
 
639
684
  /**
640
685
  * Stroked SVG OUTLINES: gradient/pattern lines (`a:ln/a:gradFill`,
@@ -1067,6 +1112,60 @@ interface EquationTemplate {
1067
1112
  i18nKey: string;
1068
1113
  }
1069
1114
 
1115
+ /**
1116
+ * Chart title text style: the font every binding draws `vm.title` with.
1117
+ *
1118
+ * Cascade (highest wins): the title's own `c:tx/c:rich` / `c:txPr` run
1119
+ * properties (`PptxChartStyle.titleFont*`), then the chart-style part's
1120
+ * title entry, then this viewer's fixed defaults (12 px, semi-bold, slate).
1121
+ * Returned as a framework-neutral descriptor the bindings map straight onto
1122
+ * SVG `<text>` attributes, so a chart authored with a 24 pt red title reads
1123
+ * the same in all five bindings.
1124
+ *
1125
+ * @module chart-title-style
1126
+ */
1127
+
1128
+ /** Resolved SVG text attributes for the chart title. */
1129
+ interface ChartTitleTextStyle {
1130
+ /** `font-size`, in slide-px. */
1131
+ fontSize: number;
1132
+ /** `font-weight`. */
1133
+ fontWeight: number;
1134
+ /** `fill`. */
1135
+ fill: string;
1136
+ /** `font-family`, only when the title names a typeface. */
1137
+ fontFamily?: string;
1138
+ }
1139
+
1140
+ /**
1141
+ * chart-svg-def-types.ts: `<defs>` descriptor types for the chart engine,
1142
+ * split out of `chart-view-model-types.ts` to keep it within the repo's
1143
+ * ~300-LOC limit.
1144
+ *
1145
+ * @module chart-svg-def-types
1146
+ */
1147
+ /**
1148
+ * A `<defs>` entry a chart needs rendered before its primitives, so a
1149
+ * primitive's `fill`/`stroke` can reference it by `url(#id)`. Currently only
1150
+ * `<pattern>` (a data point's `c:dPt/c:pictureOptions` picture fill, see
1151
+ * `chart-datapoint-picture-fills.ts`); the `kind` discriminant leaves room for
1152
+ * a future def type without a breaking change to `ChartViewModel.defs`.
1153
+ */
1154
+ interface ChartSvgPatternDef {
1155
+ kind: 'pattern';
1156
+ /** Also the `fill="url(#...)"` target on the primitive(s) it paints. Unique per chart instance. */
1157
+ id: string;
1158
+ /** Image source (a `data:`/`blob:` URL). */
1159
+ href: string;
1160
+ patternUnits: 'userSpaceOnUse';
1161
+ x: number;
1162
+ y: number;
1163
+ width: number;
1164
+ height: number;
1165
+ preserveAspectRatio?: string;
1166
+ }
1167
+ type ChartSvgDef = ChartSvgPatternDef;
1168
+
1070
1169
  /**
1071
1170
  * chart-view-model-scale.ts: palette, value-range and axis-value helpers of
1072
1171
  * the chart engine. Split out of `chart-view-model.ts`, which re-exports
@@ -1344,6 +1443,18 @@ interface ChartViewModel {
1344
1443
  * NOTHING should be painted behind it. See `chart-area-fill.ts`.
1345
1444
  */
1346
1445
  areaFill?: string;
1446
+ /**
1447
+ * SVG `rx`/`ry` corner radius for the chart-area rect, when
1448
+ * `c:chartSpace/c:roundedCorners` is set. `undefined` (square corners) is
1449
+ * the default PowerPoint uses for a chart with no fill at all, so a
1450
+ * projector should omit the attribute rather than pass `0`.
1451
+ */
1452
+ areaRadius?: number;
1453
+ /**
1454
+ * Font the title is drawn with (`c:title` run properties, then the chart
1455
+ * style part, then the viewer defaults). See `chart-title-style.ts`.
1456
+ */
1457
+ titleStyle?: ChartTitleTextStyle;
1347
1458
  /**
1348
1459
  * SVG `fill` for the plot-area rect, resolved from `c:plotArea/c:spPr`.
1349
1460
  * `undefined` means paint nothing and let the chart area show through.
@@ -1373,6 +1484,14 @@ interface ChartViewModel {
1373
1484
  * when the chart has no overlay.
1374
1485
  */
1375
1486
  userShapes?: SvgPrimitive[];
1487
+ /**
1488
+ * `<defs>` a binding must render before `primitives`, so a primitive's
1489
+ * `fill: 'url(#id)'` resolves. Currently populated only by data-point
1490
+ * picture fills (`c:dPt/c:pictureOptions`, C2-G9); absent when the chart
1491
+ * has none, so a projector that ignores this field paints exactly as
1492
+ * before.
1493
+ */
1494
+ defs?: ChartSvgDef[];
1376
1495
  }
1377
1496
 
1378
1497
  /**
@@ -1538,6 +1657,25 @@ declare function withManualLayouts(vm: ChartViewModel, chartData: Pick<PptxChart
1538
1657
  declare function buildFallbackViewModel(width: number, height: number, label: string): ChartViewModel;
1539
1658
  declare function buildPieViewModel(element: PptxElement, chartData: PptxChartData, categoryLabels: ReadonlyArray<string>, isDoughnut: boolean): ChartViewModel;
1540
1659
 
1660
+ /**
1661
+ * chart-radar-geometry.ts: radar (spider) chart polar-coordinate geometry,
1662
+ * split out of `chart-view-model-points.ts` to keep that file within the
1663
+ * repo's ~300-LOC limit. Re-exported from there (and from `chart-view-model.ts`)
1664
+ * so the public import surface is unchanged.
1665
+ *
1666
+ * @module chart-radar-geometry
1667
+ */
1668
+ /** Angle (radians) of the i-th radar spoke; 0 points up (-90°), clockwise. */
1669
+ declare function radarAngle(index: number, catCount: number): number;
1670
+ interface RadarPoint {
1671
+ x: number;
1672
+ y: number;
1673
+ }
1674
+ /** Project a series' values onto radar (polar) coordinates around (cx, cy). */
1675
+ declare function computeRadarPoints(values: ReadonlyArray<number>, maxVal: number, radius: number, cx: number, cy: number, catCount: number): RadarPoint[];
1676
+ /** Points string for a radar gridline ring at radius `rr`. */
1677
+ declare function radarRingPoints(cx: number, cy: number, rr: number, catCount: number): string;
1678
+
1541
1679
  /**
1542
1680
  * chart-view-model-points.ts: pie / doughnut, scatter, bubble and radar
1543
1681
  * geometry of the chart engine. Split out of `chart-view-model.ts`, which
@@ -1591,23 +1729,29 @@ interface ScatterXDomain {
1591
1729
  */
1592
1730
  declare function computeScatterXDomain(seriesXValues: ReadonlyArray<ReadonlyArray<number> | undefined>): ScatterXDomain | undefined;
1593
1731
  declare function computeScatterDots(values: ReadonlyArray<number>, maxXIndex: number, layout: PlotLayout, range: ValueRange, xValues?: ReadonlyArray<number>, xDomain?: ScatterXDomain): ScatterDot[];
1732
+ /** `c:bubbleScale` / `c:sizeRepresents` inputs to {@link computeBubbleRadius}. */
1733
+ interface BubbleRadiusOptions {
1734
+ /** `c:bubbleScale` (0-300%). PowerPoint's own default, 100, leaves the envelope unscaled. */
1735
+ bubbleScale?: number;
1736
+ /**
1737
+ * `c:sizeRepresents`. `'area'` (ECMA-376's own default) sizes bubbles so the
1738
+ * rendered AREA is proportional to the value (radius scales with the square
1739
+ * root of it); `'w'` sizes so the DIAMETER is proportional (radius scales
1740
+ * linearly). Defaults to `'w'` here so this raw helper's pre-existing
1741
+ * 3-argument callers stay byte-identical; `buildBubbles` resolves the
1742
+ * chart-wide `'area'` default itself before calling in.
1743
+ */
1744
+ sizeRepresents?: 'area' | 'w';
1745
+ }
1594
1746
  /**
1595
1747
  * Radius of a bubble given its size value, the max size in the chart, and a
1596
- * median radius derived from the plot area. Mirrors `renderBubbleChart` in
1597
- * React's chart-scatter-bubble.tsx: when no size value is present the bubble
1598
- * uses the median radius; otherwise it scales from 0.5x to 2x the median.
1748
+ * median radius derived from the plot area. When no size value is present the
1749
+ * bubble uses the median radius (scaled by `bubbleScale`); otherwise it scales
1750
+ * from 0.5x to 2x the median, linearly (`sizeRepresents: 'w'`) or by square
1751
+ * root (`'area'`, so the bubble's rendered AREA, not its diameter, tracks the
1752
+ * value).
1599
1753
  */
1600
- declare function computeBubbleRadius(sizeVal: number | undefined, maxBubble: number, medianRadius: number): number;
1601
- /** Angle (radians) of the i-th radar spoke; 0 points up (-90°), clockwise. */
1602
- declare function radarAngle(index: number, catCount: number): number;
1603
- interface RadarPoint {
1604
- x: number;
1605
- y: number;
1606
- }
1607
- /** Project a series' values onto radar (polar) coordinates around (cx, cy). */
1608
- declare function computeRadarPoints(values: ReadonlyArray<number>, maxVal: number, radius: number, cx: number, cy: number, catCount: number): RadarPoint[];
1609
- /** Points string for a radar gridline ring at radius `rr`. */
1610
- declare function radarRingPoints(cx: number, cy: number, rr: number, catCount: number): string;
1754
+ declare function computeBubbleRadius(sizeVal: number | undefined, maxBubble: number, medianRadius: number, options?: BubbleRadiusOptions): number;
1611
1755
 
1612
1756
  /**
1613
1757
  * chart-view-model-radar.ts: the radar / spider view-model builder. Split out
@@ -1840,6 +1984,37 @@ declare function normalizeValue(value: number, min: number, max: number): number
1840
1984
  */
1841
1985
  declare function buildRegionMapViewModel(element: PptxElement, chartData: PptxChartData, categoryLabels: ReadonlyArray<string>): ChartViewModel;
1842
1986
 
1987
+ /**
1988
+ * chart-overlays-axis-titles.ts: `computeAxisTitlePrimitives`, building
1989
+ * `SvgText[]` for the X and Y axis titles. Split out of chart-overlays.ts to
1990
+ * keep that module under the repo's file-size guideline.
1991
+ *
1992
+ * Ported / adapted from:
1993
+ * packages/react/src/viewer/utils/chart-chrome.tsx (axis titles)
1994
+ *
1995
+ * @module chart-overlays-axis-titles
1996
+ */
1997
+
1998
+ /**
1999
+ * Build `SvgText[]` for the X and Y axis titles.
2000
+ *
2001
+ * Axis titles are read from `chartData.axes`:
2002
+ * - the primary category axis (`catAx`, `axPos === 'b'`) drives the X title
2003
+ * - the primary value axis (`valAx`, `axPos === 'l'` or first `valAx`) drives the Y title
2004
+ *
2005
+ * **Rotation note**: `SvgText` has no `transform` or `rotate` field. The Y
2006
+ * axis title is therefore placed to the left of the plot without rotation and
2007
+ * noted inline. If the orchestrator adds a `transform?: string` field to
2008
+ * `SvgText` (or a new `SvgTransform` wrapper primitive), the Y title can be
2009
+ * rendered rotated -90 degrees by passing
2010
+ * `transform: \`rotate(-90, ${x}, ${y})\`` (the template expression is
2011
+ * straightforward once the field exists).
2012
+ *
2013
+ * @param chartData Full parsed chart data.
2014
+ * @param layout Plot-area bounding box.
2015
+ */
2016
+ declare function computeAxisTitlePrimitives(chartData: PptxChartData, layout: PlotLayout): SvgText[];
2017
+
1843
2018
  interface ErrorBarRenderOptions {
1844
2019
  /** Source point indexes in display order after category/date-axis filtering. */
1845
2020
  sourceIndices?: ReadonlyArray<number>;
@@ -1854,23 +2029,16 @@ interface ErrorBarRenderOptions {
1854
2029
  declare function computeErrorBarPrimitives(chartData: PptxChartData, catCount: number, layout: PlotLayout, range: ValueRange, mode?: 'line' | 'bar', options?: ErrorBarRenderOptions): SvgPrimitive[];
1855
2030
 
1856
2031
  /**
1857
- * chart-overlays.ts chart overlay depth for Angular pptx-angular-viewer.
1858
- *
1859
- * Pure functions that produce additional `SvgPrimitive[]` / `SvgText[]` for an
1860
- * existing cartesian chart. No Angular dependencies; all inputs are typed
1861
- * against `pptx-viewer-core` and the `SvgPrimitive` union already defined in
1862
- * `chart-renderer-helpers.ts`.
2032
+ * chart-overlays-regression.ts: least-squares regression / polynomial-fit
2033
+ * math for chart trendlines. Split out of chart-overlays.ts to keep that
2034
+ * module under the repo's file-size guideline.
1863
2035
  *
1864
2036
  * Ported / adapted from:
1865
- * packages/react/src/viewer/utils/chart-trendlines.tsx (regression engine)
1866
- * packages/react/src/viewer/utils/chart-overlay-lines.tsx (error bars)
1867
- * packages/react/src/viewer/utils/chart-chrome.tsx (axis titles)
1868
- * packages/react/src/viewer/utils/chart-data-table.tsx (data table)
1869
- * packages/shared/src/render/chart-trendlines.ts (shared port)
2037
+ * packages/react/src/viewer/utils/chart-trendlines.tsx (regression engine)
2038
+ * packages/shared/src/render/chart-trendlines.ts (shared port)
1870
2039
  *
1871
- * @module chart-overlays
2040
+ * @module chart-overlays-regression
1872
2041
  */
1873
-
1874
2042
  /** Result of an ordinary least-squares linear regression. */
1875
2043
  interface LinearFit {
1876
2044
  slope: number;
@@ -1887,23 +2055,37 @@ interface LinearFit {
1887
2055
  */
1888
2056
  declare function computeLinearRegression(xVals: number[], yVals: number[]): LinearFit;
1889
2057
  /**
1890
- * Fit polynomial coefficients (ascending order: [a0, a1, …, a_order]) via
2058
+ * Fit polynomial coefficients (ascending order: [a0, a1, ..., a_order]) via
1891
2059
  * Gaussian elimination on the normal equations.
1892
2060
  * Mirrors `fitPolynomial` in chart-trendlines.tsx (React).
1893
2061
  */
1894
2062
  declare function fitPolynomial(xVals: number[], yVals: number[], order: number): number[];
1895
2063
  /**
1896
- * Coefficient of determination (R²) of an arbitrary fit function against data.
1897
- * Mirrors `computeRSquared` in chart-trendlines.tsx (React).
2064
+ * Coefficient of determination (R-squared) of an arbitrary fit function
2065
+ * against data. Mirrors `computeRSquared` in chart-trendlines.tsx (React).
1898
2066
  */
1899
2067
  declare function computeRSquared(xVals: number[], yVals: number[], evalFn: (x: number) => number): number;
2068
+
2069
+ /**
2070
+ * chart-overlays-trendline.ts: public `computeTrendlinePrimitives` API,
2071
+ * turning each series' `computeTrendlinePoints` fit into `SvgPrimitive[]`.
2072
+ * Split out of chart-overlays.ts to keep that module under the repo's
2073
+ * file-size guideline.
2074
+ *
2075
+ * Ported / adapted from:
2076
+ * packages/react/src/viewer/utils/chart-trendlines.tsx (regression engine)
2077
+ * packages/shared/src/render/chart-trendlines.ts (shared port)
2078
+ *
2079
+ * @module chart-overlays-trendline
2080
+ */
2081
+
1900
2082
  /**
1901
2083
  * Build `SvgPrimitive[]` for all trendlines declared by every series in
1902
- * `chartData`. Returns an empty array when no series declares a trendline.
2084
+ * `chartData`. Returns an empty array when no series declares a trendline.
1903
2085
  *
1904
2086
  * Each trendline produces:
1905
2087
  * - one `SvgPath` (dashed polyline in the series / trendline colour), and
1906
- * - optionally one `SvgText` with the equation / R² label at the last point.
2088
+ * - optionally one `SvgText` with the equation / R-squared label at the last point.
1907
2089
  *
1908
2090
  * @param chartData Full parsed chart data.
1909
2091
  * @param catCount Number of categories (x-slots), e.g. `chartData.categories.length || 1`.
@@ -1913,25 +2095,6 @@ declare function computeRSquared(xVals: number[], yVals: number[], evalFn: (x: n
1913
2095
  * @param colorPalette Optional resolved palette (same as passed to `seriesColor`).
1914
2096
  */
1915
2097
  declare function computeTrendlinePrimitives(chartData: PptxChartData, catCount: number, layout: PlotLayout, range: ValueRange, mode?: 'line' | 'bar', colorPalette?: readonly string[]): SvgPrimitive[];
1916
- /**
1917
- * Build `SvgText[]` for the X and Y axis titles.
1918
- *
1919
- * Axis titles are read from `chartData.axes`:
1920
- * - the primary category axis (`catAx`, `axPos === 'b'`) drives the X title
1921
- * - the primary value axis (`valAx`, `axPos === 'l'` or first `valAx`) drives the Y title
1922
- *
1923
- * **Rotation note**: `SvgText` has no `transform` or `rotate` field. The Y
1924
- * axis title is therefore placed to the left of the plot without rotation and
1925
- * noted inline. If the orchestrator adds a `transform?: string` field to
1926
- * `SvgText` (or a new `SvgTransform` wrapper primitive), the Y title can be
1927
- * rendered rotated -90° by passing
1928
- * `transform: \`rotate(-90, ${x}, ${y})\`` — the template expression is
1929
- * straightforward once the field exists.
1930
- *
1931
- * @param chartData Full parsed chart data.
1932
- * @param layout Plot-area bounding box.
1933
- */
1934
- declare function computeAxisTitlePrimitives(chartData: PptxChartData, layout: PlotLayout): SvgText[];
1935
2098
 
1936
2099
  /**
1937
2100
  * `animation-authoring` — pure, immutable helpers for the editor's element
@@ -2290,6 +2453,62 @@ type ChartBuildMode = 'asOne' | 'bySeries' | 'byCategory' | 'byElement';
2290
2453
  * - `byLvlAtOnce` a whole level is revealed per stage (`lvlAtOnce`).
2291
2454
  */
2292
2455
  type DiagramBuildMode = 'asOne' | 'byOne' | 'byLvl' | 'byLvlAtOnce';
2456
+ /**
2457
+ * One authored `p:graphicEl` reveal unit resolved onto a chart, per
2458
+ * `TimelineStepGraphicElement`'s "both indices set" case: a single (series,
2459
+ * category) cell revealed by a `bldStep="seriesEl"`/`"categoryEl"` effect.
2460
+ */
2461
+ interface ChartRevealPoint {
2462
+ seriesIdx: number;
2463
+ categoryIdx: number;
2464
+ }
2465
+ /**
2466
+ * Playback-time chart reveal state derived from AUTHORED `p:graphicEl`
2467
+ * indices (see `chart-reveal-descriptor`'s `resolveChartRevealDescriptor`),
2468
+ * rather than from click-count/time progress. Present on
2469
+ * {@link ElementAnimationState.chartReveal} only when every fired
2470
+ * chart-build step for the element carried index data; a renderer prefers
2471
+ * this over the progress-based `build`/`ElementBuildState` path when present,
2472
+ * since it reflects the real authored reveal set (correct even for a
2473
+ * reversed-order or gapped chart build), and falls back to `build` when
2474
+ * absent.
2475
+ */
2476
+ interface ChartRevealDescriptor {
2477
+ /**
2478
+ * Whether the chart's background/axes/gridlines/legend should currently be
2479
+ * visible: always `true` when the chart's `animateBackground` is `false`
2480
+ * ("shown throughout"), otherwise `true` from the first revealed stage
2481
+ * onward.
2482
+ */
2483
+ background: boolean;
2484
+ /** Whole series revealed by a `bldStep="series"` effect. */
2485
+ series: ReadonlySet<number>;
2486
+ /** Whole categories revealed by a `bldStep="category"` effect. */
2487
+ categories: ReadonlySet<number>;
2488
+ /** Individual cells revealed by a `bldStep="seriesEl"`/`"categoryEl"` effect. */
2489
+ points: readonly ChartRevealPoint[];
2490
+ }
2491
+ /**
2492
+ * Playback-time SmartArt diagram reveal state derived from AUTHORED
2493
+ * `p:graphicEl/p:dgm/@id` indices (see `diagram-reveal-descriptor`'s
2494
+ * `resolveDiagramRevealDescriptor`), rather than from click-count/time
2495
+ * progress. Present on {@link ElementAnimationState.diagramReveal} only when
2496
+ * every fired diagram-build step for the element carried `p:graphicEl` data.
2497
+ * A SmartArt renderer prefers this over the progress-based `build` /
2498
+ * {@link ElementBuildState} path when present, since it reflects the real
2499
+ * authored reveal set (correct even for a reversed-order or by-branch build),
2500
+ * and falls back to `build` when absent.
2501
+ */
2502
+ interface DiagramRevealDescriptor {
2503
+ /**
2504
+ * Whether the diagram's background/connector chrome should currently be
2505
+ * visible: `true` once any node-revealing or background-revealing
2506
+ * (`bldStep="bg"`) step has fired.
2507
+ */
2508
+ background: boolean;
2509
+ /** Data-model point ids (`PptxSmartArtNode.id`) revealed so far. */
2510
+ nodeIds: ReadonlySet<string>;
2511
+ }
2293
2512
  /**
2294
2513
  * Playback-time staged-build state surfaced on {@link ElementAnimationState}.
2295
2514
  * `progress` is the 0..1 fraction of the build revealed at the current playback
@@ -2320,6 +2539,27 @@ interface ElementAnimationState {
2320
2539
  * whole-element entrances, so existing renderers are unaffected.
2321
2540
  */
2322
2541
  build?: ElementBuildState;
2542
+ /**
2543
+ * Authored-index chart reveal state (see {@link ChartRevealDescriptor}),
2544
+ * present only when every fired chart-build step for this element carried
2545
+ * `p:graphicEl` index data. A chart renderer prefers this over `build` when
2546
+ * present; `chart-build`'s `resolveRevealedChartData` picks between the two.
2547
+ */
2548
+ chartReveal?: {
2549
+ mode: ChartBuildMode;
2550
+ descriptor: ChartRevealDescriptor;
2551
+ };
2552
+ /**
2553
+ * Authored-index SmartArt diagram reveal state (see
2554
+ * {@link DiagramRevealDescriptor}), present only when every fired
2555
+ * diagram-build step for this element carried `p:graphicEl` node-id data.
2556
+ * `diagram-build`'s `resolveRevealedSmartArtNodes` prefers this over `build`
2557
+ * when present.
2558
+ */
2559
+ diagramReveal?: {
2560
+ mode: DiagramBuildMode;
2561
+ descriptor: DiagramRevealDescriptor;
2562
+ };
2323
2563
  /**
2324
2564
  * True when an active `p:animClr` color animation targets this shape's fill.
2325
2565
  * A vector renderer should then paint the fill with `fill: inherit` so the
@@ -3423,6 +3663,26 @@ interface TabbedRunPiece {
3423
3663
  leaderStyle?: RunStyle;
3424
3664
  /** Leader glyphs sized to fill `leaderStyle`'s width. Present only alongside `leaderStyle`. */
3425
3665
  leaderText?: string;
3666
+ /**
3667
+ * `a:rPr/@u="words"` per-word/gap sub-pieces of THIS tab piece's own text
3668
+ * (see `splitWordsForUnderline`), present only when the run's underline is
3669
+ * `words`. A tab-separated piece is otherwise rendered as a single span
3670
+ * (`text` + `style`), which underlines it continuously - correct for a
3671
+ * one-word piece, but wrong for a piece like `"Hello World"` between two tab
3672
+ * stops, which needs a gap under the space. A binding renders one SIBLING
3673
+ * span per entry IN PLACE OF the piece's single `text` span: each entry's
3674
+ * `style` is the piece's own `style` (the same inline-block layout and
3675
+ * advance-width correction, so the line measures exactly as before), with
3676
+ * the underline stripped on a gap entry. They must be siblings, not spans
3677
+ * nested inside the piece span: an ancestor's underline is drawn through
3678
+ * every inline descendant, so a nested gap could not lose it. `text`/`style`
3679
+ * stay the continuous-underline fallback for a binding that does not
3680
+ * render this field.
3681
+ */
3682
+ words?: Array<{
3683
+ text: string;
3684
+ style: RunStyle;
3685
+ }>;
3426
3686
  }
3427
3687
  /** One `\n`-split line of a run's tabbed text. */
3428
3688
  interface TabbedLineRun {
@@ -4469,7 +4729,7 @@ interface SlideTransitionAnimations {
4469
4729
  * faithful Office 2010 (`p14`) keyframes, so both the classic and exotic / 3-D
4470
4730
  * transitions animate wherever this single string is injected.
4471
4731
  */
4472
- declare const SLIDE_TRANSITION_KEYFRAMES = "\n/* \u2500\u2500 Fade \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-fade-in {\n\tfrom { opacity: 0; }\n\tto { opacity: 1; }\n}\n@keyframes pptx-tr-fade-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; }\n}\n\n/* \u2500\u2500 Push \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-push-in-from-right {\n\tfrom { transform: translateX(100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-push-out-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-push-in-from-left {\n\tfrom { transform: translateX(-100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-push-out-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-push-in-from-bottom {\n\tfrom { transform: translateY(100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-push-out-to-top {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(-100%); }\n}\n@keyframes pptx-tr-push-in-from-top {\n\tfrom { transform: translateY(-100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-push-out-to-bottom {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(100%); }\n}\n\n/* \u2500\u2500 Cover (incoming slides over stationary outgoing) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-cover-from-right {\n\tfrom { transform: translateX(100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-cover-from-left {\n\tfrom { transform: translateX(-100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-cover-from-bottom {\n\tfrom { transform: translateY(100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-cover-from-top {\n\tfrom { transform: translateY(-100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-cover-from-lu {\n\tfrom { transform: translate(-100%, -100%); }\n\tto { transform: translate(0, 0); }\n}\n@keyframes pptx-tr-cover-from-ld {\n\tfrom { transform: translate(-100%, 100%); }\n\tto { transform: translate(0, 0); }\n}\n@keyframes pptx-tr-cover-from-ru {\n\tfrom { transform: translate(100%, -100%); }\n\tto { transform: translate(0, 0); }\n}\n@keyframes pptx-tr-cover-from-rd {\n\tfrom { transform: translate(100%, 100%); }\n\tto { transform: translate(0, 0); }\n}\n\n/* \u2500\u2500 Uncover (outgoing slides away revealing stationary incoming) \u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-uncover-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-uncover-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-uncover-to-top {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(-100%); }\n}\n@keyframes pptx-tr-uncover-to-bottom {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(100%); }\n}\n@keyframes pptx-tr-uncover-to-lu {\n\tfrom { transform: translate(0, 0); }\n\tto { transform: translate(-100%, -100%); }\n}\n@keyframes pptx-tr-uncover-to-ld {\n\tfrom { transform: translate(0, 0); }\n\tto { transform: translate(-100%, 100%); }\n}\n@keyframes pptx-tr-uncover-to-ru {\n\tfrom { transform: translate(0, 0); }\n\tto { transform: translate(100%, -100%); }\n}\n@keyframes pptx-tr-uncover-to-rd {\n\tfrom { transform: translate(0, 0); }\n\tto { transform: translate(100%, 100%); }\n}\n\n/* \u2500\u2500 Split \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-split-h-out {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-split-v-out {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-split-h-in {\n\tfrom { clip-path: inset(0 0); }\n\tto { clip-path: inset(0 50%); }\n}\n@keyframes pptx-tr-split-v-in {\n\tfrom { clip-path: inset(0 0); }\n\tto { clip-path: inset(50% 0); }\n}\n\n/* \u2500\u2500 Dissolve \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-dissolve-in {\n\tfrom { opacity: 0; filter: blur(4px); }\n\tto { opacity: 1; filter: blur(0px); }\n}\n\n/* \u2500\u2500 Circle / Diamond / Plus (clip-path shapes) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-circle-in {\n\tfrom { clip-path: circle(0% at 50% 50%); }\n\tto { clip-path: circle(75% at 50% 50%); }\n}\n@keyframes pptx-tr-diamond-in {\n\tfrom { clip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%); }\n\tto { clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); }\n}\n@keyframes pptx-tr-plus-in {\n\tfrom {\n\t\tclip-path: polygon(\n\t\t\t50% 50%, 50% 50%, 50% 50%, 50% 50%,\n\t\t\t50% 50%, 50% 50%, 50% 50%, 50% 50%,\n\t\t\t50% 50%, 50% 50%, 50% 50%, 50% 50%\n\t\t);\n\t}\n\tto {\n\t\tclip-path: polygon(\n\t\t\t33% 0%, 66% 0%, 66% 33%, 100% 33%,\n\t\t\t100% 66%, 66% 66%, 66% 100%, 33% 100%,\n\t\t\t33% 66%, 0% 66%, 0% 33%, 33% 33%\n\t\t);\n\t}\n}\n\n/* \u2500\u2500 Wedge \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-wedge-in {\n\tfrom { clip-path: polygon(50% 0%, 50% 0%, 50% 0%); }\n\tto { clip-path: polygon(50% 0%, 100% 100%, 0% 100%); }\n}\n\n/* \u2500\u2500 Zoom \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-zoom-in {\n\tfrom { transform: scale(0); opacity: 0; }\n\tto { transform: scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-zoom-out {\n\tfrom { transform: scale(1); opacity: 1; }\n\tto { transform: scale(2); opacity: 0; }\n}\n\n/* \u2500\u2500 Blinds \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-blinds-h {\n\tfrom { clip-path: inset(0 0 100% 0); }\n\tto { clip-path: inset(0); }\n}\n@keyframes pptx-tr-blinds-v {\n\tfrom { clip-path: inset(0 100% 0 0); }\n\tto { clip-path: inset(0); }\n}\n\n/* \u2500\u2500 Checker (approximate with dissolve + contrast) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-checker-in {\n\tfrom { opacity: 0; filter: contrast(2) blur(2px); }\n\tto { opacity: 1; filter: contrast(1) blur(0); }\n}\n\n/* \u2500\u2500 Comb \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-comb-h {\n\tfrom { clip-path: inset(0 100% 0 0); }\n\tto { clip-path: inset(0); }\n}\n@keyframes pptx-tr-comb-v {\n\tfrom { clip-path: inset(100% 0 0 0); }\n\tto { clip-path: inset(0); }\n}\n\n/* \u2500\u2500 Strips (diagonal) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-strips-lu {\n\tfrom { clip-path: polygon(0% 0%, 0% 0%, 0% 0%); }\n\tto { clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%); }\n}\n@keyframes pptx-tr-strips-ld {\n\tfrom { clip-path: polygon(0% 100%, 0% 100%, 0% 100%); }\n\tto { clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%); }\n}\n@keyframes pptx-tr-strips-ru {\n\tfrom { clip-path: polygon(100% 0%, 100% 0%, 100% 0%); }\n\tto { clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%); }\n}\n@keyframes pptx-tr-strips-rd {\n\tfrom { clip-path: polygon(100% 100%, 100% 100%, 100% 100%); }\n\tto { clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%); }\n}\n\n/* \u2500\u2500 RandomBar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-randombar-h {\n\tfrom { opacity: 0; clip-path: inset(0 0 100% 0); }\n\tto { opacity: 1; clip-path: inset(0); }\n}\n@keyframes pptx-tr-randombar-v {\n\tfrom { opacity: 0; clip-path: inset(0 100% 0 0); }\n\tto { opacity: 1; clip-path: inset(0); }\n}\n\n/* \u2500\u2500 Newsflash \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-newsflash-in {\n\tfrom { transform: rotate(720deg) scale(0); opacity: 0; }\n\tto { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n\n/* \u2500\u2500 Wheel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-wheel-in {\n\tfrom { clip-path: circle(0% at 50% 50%); transform: rotate(-180deg); }\n\tto { clip-path: circle(75% at 50% 50%); transform: rotate(0deg); }\n}\n\n\n/* \u2500\u2500 Wipe (soft mask reveal) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/* PowerPoint feathers the wipe edge with a WIDE, smooth gradient - the fade\n * zone spans roughly a slide width in real renders, not a narrow band. The\n * incoming layer is masked with a 3x-oversized gradient (fade zone = one slide\n * width) whose position sweeps it across the slide; the band fully exits both\n * edges, so the start is fully hidden and the end fully opaque. */\n@keyframes pptx-tr-wipe-from-left {\n\tfrom {\n\t\t-webkit-mask-image: linear-gradient(to right, #000 33.3%, transparent 66.7%);\n\t\t-webkit-mask-size: 300% 100%;\n\t\t-webkit-mask-repeat: no-repeat;\n\t\t-webkit-mask-position: 100% 0;\n\t\tmask-image: linear-gradient(to right, #000 33.3%, transparent 66.7%);\n\t\tmask-size: 300% 100%;\n\t\tmask-repeat: no-repeat;\n\t\tmask-position: 100% 0;\n\t}\n\tto {\n\t\t-webkit-mask-image: linear-gradient(to right, #000 33.3%, transparent 66.7%);\n\t\t-webkit-mask-size: 300% 100%;\n\t\t-webkit-mask-repeat: no-repeat;\n\t\t-webkit-mask-position: 0% 0;\n\t\tmask-image: linear-gradient(to right, #000 33.3%, transparent 66.7%);\n\t\tmask-size: 300% 100%;\n\t\tmask-repeat: no-repeat;\n\t\tmask-position: 0% 0;\n\t}\n}\n@keyframes pptx-tr-wipe-from-right {\n\tfrom {\n\t\t-webkit-mask-image: linear-gradient(to left, #000 33.3%, transparent 66.7%);\n\t\t-webkit-mask-size: 300% 100%;\n\t\t-webkit-mask-repeat: no-repeat;\n\t\t-webkit-mask-position: 0% 0;\n\t\tmask-image: linear-gradient(to left, #000 33.3%, transparent 66.7%);\n\t\tmask-size: 300% 100%;\n\t\tmask-repeat: no-repeat;\n\t\tmask-position: 0% 0;\n\t}\n\tto {\n\t\t-webkit-mask-image: linear-gradient(to left, #000 33.3%, transparent 66.7%);\n\t\t-webkit-mask-size: 300% 100%;\n\t\t-webkit-mask-repeat: no-repeat;\n\t\t-webkit-mask-position: 100% 0;\n\t\tmask-image: linear-gradient(to left, #000 33.3%, transparent 66.7%);\n\t\tmask-size: 300% 100%;\n\t\tmask-repeat: no-repeat;\n\t\tmask-position: 100% 0;\n\t}\n}\n@keyframes pptx-tr-wipe-from-top {\n\tfrom {\n\t\t-webkit-mask-image: linear-gradient(to bottom, #000 33.3%, transparent 66.7%);\n\t\t-webkit-mask-size: 100% 300%;\n\t\t-webkit-mask-repeat: no-repeat;\n\t\t-webkit-mask-position: 0 100%;\n\t\tmask-image: linear-gradient(to bottom, #000 33.3%, transparent 66.7%);\n\t\tmask-size: 100% 300%;\n\t\tmask-repeat: no-repeat;\n\t\tmask-position: 0 100%;\n\t}\n\tto {\n\t\t-webkit-mask-image: linear-gradient(to bottom, #000 33.3%, transparent 66.7%);\n\t\t-webkit-mask-size: 100% 300%;\n\t\t-webkit-mask-repeat: no-repeat;\n\t\t-webkit-mask-position: 0 0%;\n\t\tmask-image: linear-gradient(to bottom, #000 33.3%, transparent 66.7%);\n\t\tmask-size: 100% 300%;\n\t\tmask-repeat: no-repeat;\n\t\tmask-position: 0 0%;\n\t}\n}\n@keyframes pptx-tr-wipe-from-bottom {\n\tfrom {\n\t\t-webkit-mask-image: linear-gradient(to top, #000 33.3%, transparent 66.7%);\n\t\t-webkit-mask-size: 100% 300%;\n\t\t-webkit-mask-repeat: no-repeat;\n\t\t-webkit-mask-position: 0 0%;\n\t\tmask-image: linear-gradient(to top, #000 33.3%, transparent 66.7%);\n\t\tmask-size: 100% 300%;\n\t\tmask-repeat: no-repeat;\n\t\tmask-position: 0 0%;\n\t}\n\tto {\n\t\t-webkit-mask-image: linear-gradient(to top, #000 33.3%, transparent 66.7%);\n\t\t-webkit-mask-size: 100% 300%;\n\t\t-webkit-mask-repeat: no-repeat;\n\t\t-webkit-mask-position: 0 100%;\n\t\tmask-image: linear-gradient(to top, #000 33.3%, transparent 66.7%);\n\t\tmask-size: 100% 300%;\n\t\tmask-repeat: no-repeat;\n\t\tmask-position: 0 100%;\n\t}\n}\n\n\n/* \u2500\u2500 Conveyor (translate X with staggered timing) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-conveyor-in-from-right {\n\tfrom { transform: translateX(100%) rotateY(-30deg); }\n\t60% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-left {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(-100%) rotateY(30deg); }\n}\n@keyframes pptx-tr-conveyor-in-from-left {\n\tfrom { transform: translateX(-100%) rotateY(30deg); }\n\t60% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-right {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(100%) rotateY(-30deg); }\n}\n\n/* \u2500\u2500 Doors (clip-path from center split) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-doors-horz {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-doors-vert {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n\n/* \u2500\u2500 Ferris (rotate elements around center) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-ferris-in-from-right {\n\tfrom { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-left {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n}\n@keyframes pptx-tr-ferris-in-from-left {\n\tfrom { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-right {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n}\n\n/* \u2500\u2500 Flash (bright flash opacity burst) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-flash-white {\n\t0% { opacity: 1; }\n\t30% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n@keyframes pptx-tr-flash-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t70% { opacity: 1; }\n\t100% { opacity: 1; }\n}\n\n/* \u2500\u2500 Flythrough (scale + translate Z-axis feel) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-flythrough-in {\n\tfrom { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n}\n@keyframes pptx-tr-flythrough-reverse-in {\n\tfrom { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-reverse-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n}\n\n/* \u2500\u2500 Gallery (translate with perspective) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-gallery-in-from-right {\n\tfrom { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-left {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n}\n@keyframes pptx-tr-gallery-in-from-left {\n\tfrom { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-right {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n}\n\n/* \u2500\u2500 Glitter (particle dissolve effect) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-glitter-in {\n\tfrom { opacity: 0; filter: brightness(1.5) contrast(1.3) blur(2px); }\n\t60% { opacity: 0.7; filter: brightness(1.2) contrast(1.1) blur(1px); }\n\tto { opacity: 1; filter: brightness(1) contrast(1) blur(0); }\n}\n\n/* \u2500\u2500 Honeycomb (hexagonal reveal) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-honeycomb-in {\n\tfrom {\n\t\tclip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%);\n\t\topacity: 0;\n\t}\n\tto {\n\t\tclip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);\n\t\topacity: 1;\n\t}\n}\n@keyframes pptx-tr-honeycomb-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* \u2500\u2500 Pan (large-scale translate) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-pan-from-right {\n\tfrom { transform: translateX(100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-pan-from-left {\n\tfrom { transform: translateX(-100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-pan-from-bottom {\n\tfrom { transform: translateY(100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-top {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(-100%); }\n}\n@keyframes pptx-tr-pan-from-top {\n\tfrom { transform: translateY(-100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-bottom {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(100%); }\n}\n\n\n/* \u2500\u2500 Prism (3D rotation via perspective transform) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-prism-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-bottom {\n\tfrom { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-top {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-top {\n\tfrom { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-bottom {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n}\n\n/* \u2500\u2500 Reveal (slide away reveal) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-reveal-out-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-reveal-out-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-reveal-in {\n\tfrom { opacity: 0.5; }\n\tto { opacity: 1; }\n}\n\n/* \u2500\u2500 Ripple (expanding ring clip-path) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-ripple-in {\n\tfrom { clip-path: circle(0% at 50% 50%); opacity: 0.5; }\n\t30% { clip-path: circle(20% at 50% 50%); opacity: 0.7; }\n\t60% { clip-path: circle(50% at 50% 50%); opacity: 0.9; }\n\tto { clip-path: circle(75% at 50% 50%); opacity: 1; }\n}\n\n/* \u2500\u2500 Shred (fragmented clip-path pieces) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-shred-strips-in {\n\tfrom { clip-path: inset(0 100% 0 0); opacity: 0; }\n\t30% { clip-path: inset(0 60% 0 0); opacity: 0.5; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-rectangles-in {\n\tfrom { clip-path: inset(50%); opacity: 0; }\n\t40% { clip-path: inset(20%); opacity: 0.6; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* \u2500\u2500 Switch (flip/rotate swap) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-switch-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n}\n@keyframes pptx-tr-switch-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n}\n\n/* \u2500\u2500 Vortex (rotate + scale spiral) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-vortex-in {\n\tfrom { transform: rotate(720deg) scale(0); opacity: 0; }\n\tto { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-vortex-out {\n\tfrom { transform: rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: rotate(-720deg) scale(0); opacity: 0; }\n}\n\n/* \u2500\u2500 Warp (skew distortion) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-warp-in {\n\tfrom { transform: scale(0.3) skewX(30deg) skewY(15deg); opacity: 0; }\n\t50% { transform: scale(0.8) skewX(-5deg) skewY(-3deg); opacity: 0.7; }\n\tto { transform: scale(1) skewX(0deg) skewY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-warp-out {\n\tfrom { transform: scale(1) skewX(0deg) skewY(0deg); opacity: 1; }\n\t50% { transform: scale(0.8) skewX(5deg) skewY(3deg); opacity: 0.7; }\n\tto { transform: scale(0.3) skewX(-30deg) skewY(-15deg); opacity: 0; }\n}\n@keyframes pptx-tr-warp-reverse-in {\n\tfrom { transform: scale(3) skewX(-20deg) skewY(-10deg); opacity: 0; filter: blur(4px); }\n\tto { transform: scale(1) skewX(0deg) skewY(0deg); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-warp-reverse-out {\n\tfrom { transform: scale(1) skewX(0deg) skewY(0deg); opacity: 1; filter: blur(0); }\n\tto { transform: scale(3) skewX(20deg) skewY(10deg); opacity: 0; filter: blur(4px); }\n}\n\n/* \u2500\u2500 WheelReverse (reverse wheel rotation) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-wheel-reverse-in {\n\tfrom { clip-path: circle(0% at 50% 50%); transform: rotate(180deg); }\n\tto { clip-path: circle(75% at 50% 50%); transform: rotate(0deg); }\n}\n\n/* \u2500\u2500 Window (scale from center with border) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-window-horz {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-vert {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-out {\n\tfrom { opacity: 1; transform: scale(1); }\n\tto { opacity: 0; transform: scale(0.9); }\n}\n\n\n/* \u2500\u2500 Cube (rotate off one edge onto the next face) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-cube-out-left { from { transform: perspective(1400px) translateX(0) rotateY(0deg); } to { transform: perspective(1400px) translateX(-50%) rotateY(-90deg); opacity: .5; } }\n@keyframes pptx-tr-cube-in-left { from { transform: perspective(1400px) translateX(50%) rotateY(90deg); opacity: .5; } to { transform: perspective(1400px) translateX(0) rotateY(0deg); opacity: 1; } }\n@keyframes pptx-tr-cube-out-right { from { transform: perspective(1400px) translateX(0) rotateY(0deg); } to { transform: perspective(1400px) translateX(50%) rotateY(90deg); opacity: .5; } }\n@keyframes pptx-tr-cube-in-right { from { transform: perspective(1400px) translateX(-50%) rotateY(-90deg); opacity: .5; } to { transform: perspective(1400px) translateX(0) rotateY(0deg); opacity: 1; } }\n@keyframes pptx-tr-cube-out-up { from { transform: perspective(1400px) translateY(0) rotateX(0deg); } to { transform: perspective(1400px) translateY(-50%) rotateX(90deg); opacity: .5; } }\n@keyframes pptx-tr-cube-in-up { from { transform: perspective(1400px) translateY(50%) rotateX(-90deg); opacity: .5; } to { transform: perspective(1400px) translateY(0) rotateX(0deg); opacity: 1; } }\n@keyframes pptx-tr-cube-out-down { from { transform: perspective(1400px) translateY(0) rotateX(0deg); } to { transform: perspective(1400px) translateY(50%) rotateX(-90deg); opacity: .5; } }\n@keyframes pptx-tr-cube-in-down { from { transform: perspective(1400px) translateY(-50%) rotateX(90deg); opacity: .5; } to { transform: perspective(1400px) translateY(0) rotateX(0deg); opacity: 1; } }\n\n/* \u2500\u2500 Orbit (swing the faces through depth) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-orbit-out-left { from { transform: perspective(1600px) translateZ(0) rotateY(0deg); opacity: 1; } to { transform: perspective(1600px) translateZ(-700px) rotateY(-105deg); opacity: 0; } }\n@keyframes pptx-tr-orbit-in-left { from { transform: perspective(1600px) translateZ(-700px) rotateY(105deg); opacity: 0; } to { transform: perspective(1600px) translateZ(0) rotateY(0deg); opacity: 1; } }\n@keyframes pptx-tr-orbit-out-right { from { transform: perspective(1600px) translateZ(0) rotateY(0deg); opacity: 1; } to { transform: perspective(1600px) translateZ(-700px) rotateY(105deg); opacity: 0; } }\n@keyframes pptx-tr-orbit-in-right { from { transform: perspective(1600px) translateZ(-700px) rotateY(-105deg); opacity: 0; } to { transform: perspective(1600px) translateZ(0) rotateY(0deg); opacity: 1; } }\n@keyframes pptx-tr-orbit-out-up { from { transform: perspective(1600px) translateZ(0) rotateX(0deg); opacity: 1; } to { transform: perspective(1600px) translateZ(-700px) rotateX(105deg); opacity: 0; } }\n@keyframes pptx-tr-orbit-in-up { from { transform: perspective(1600px) translateZ(-700px) rotateX(-105deg); opacity: 0; } to { transform: perspective(1600px) translateZ(0) rotateX(0deg); opacity: 1; } }\n@keyframes pptx-tr-orbit-out-down { from { transform: perspective(1600px) translateZ(0) rotateX(0deg); opacity: 1; } to { transform: perspective(1600px) translateZ(-700px) rotateX(-105deg); opacity: 0; } }\n@keyframes pptx-tr-orbit-in-down { from { transform: perspective(1600px) translateZ(-700px) rotateX(105deg); opacity: 0; } to { transform: perspective(1600px) translateZ(0) rotateX(0deg); opacity: 1; } }\n\n/* \u2500\u2500 Flip (card flip; opacity hides the back face) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-flip-out-left { from { transform: perspective(1400px) rotateY(0deg); opacity: 1; } to { transform: perspective(1400px) rotateY(90deg); opacity: 0; } }\n@keyframes pptx-tr-flip-in-left { from { transform: perspective(1400px) rotateY(-90deg); opacity: 0; } to { transform: perspective(1400px) rotateY(0deg); opacity: 1; } }\n@keyframes pptx-tr-flip-out-right { from { transform: perspective(1400px) rotateY(0deg); opacity: 1; } to { transform: perspective(1400px) rotateY(-90deg); opacity: 0; } }\n@keyframes pptx-tr-flip-in-right { from { transform: perspective(1400px) rotateY(90deg); opacity: 0; } to { transform: perspective(1400px) rotateY(0deg); opacity: 1; } }\n@keyframes pptx-tr-flip-out-up { from { transform: perspective(1400px) rotateX(0deg); opacity: 1; } to { transform: perspective(1400px) rotateX(-90deg); opacity: 0; } }\n@keyframes pptx-tr-flip-in-up { from { transform: perspective(1400px) rotateX(90deg); opacity: 0; } to { transform: perspective(1400px) rotateX(0deg); opacity: 1; } }\n@keyframes pptx-tr-flip-out-down { from { transform: perspective(1400px) rotateX(0deg); opacity: 1; } to { transform: perspective(1400px) rotateX(90deg); opacity: 0; } }\n@keyframes pptx-tr-flip-in-down { from { transform: perspective(1400px) rotateX(-90deg); opacity: 0; } to { transform: perspective(1400px) rotateX(0deg); opacity: 1; } }\n\n/* \u2500\u2500 Rotate (in-plane spin + zoom) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-rotate-out-cw { from { transform: rotate(0deg) scale(1); opacity: 1; } to { transform: rotate(90deg) scale(.4); opacity: 0; } }\n@keyframes pptx-tr-rotate-in-cw { from { transform: rotate(-90deg) scale(.4); opacity: 0; } to { transform: rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-rotate-out-ccw { from { transform: rotate(0deg) scale(1); opacity: 1; } to { transform: rotate(-90deg) scale(.4); opacity: 0; } }\n@keyframes pptx-tr-rotate-in-ccw { from { transform: rotate(90deg) scale(.4); opacity: 0; } to { transform: rotate(0deg) scale(1); opacity: 1; } }\n\n/* \u2500\u2500 Fall Over (incoming board topples down over outgoing) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-fallover-out { from { transform: translateZ(0); opacity: 1; } to { transform: perspective(1400px) rotateX(5deg) scale(.94); opacity: .25; } }\n@keyframes pptx-tr-fallover-in { 0% { transform: perspective(1400px) rotateX(-100deg); transform-origin: top center; opacity: .4; } 70% { transform: perspective(1400px) rotateX(8deg); transform-origin: top center; opacity: 1; } 100% { transform: perspective(1400px) rotateX(0deg); transform-origin: top center; opacity: 1; } }\n\n/* \u2500\u2500 Drape (fabric draping down into place) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-drape-in { from { transform: perspective(1600px) rotateX(-55deg) scale(1.15); transform-origin: top center; opacity: 0; } to { transform: perspective(1600px) rotateX(0deg) scale(1); transform-origin: top center; opacity: 1; } }\n\n/* \u2500\u2500 Curtains (outgoing lifts to reveal incoming) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-curtains-out { from { transform: scaleY(1); transform-origin: top center; opacity: 1; } to { transform: scaleY(0); transform-origin: top center; opacity: .3; } }\n\n/* \u2500\u2500 Wind (outgoing blows away with skew + blur) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-wind-out-left { from { transform: translateX(0) skewX(0deg); opacity: 1; filter: blur(0); } to { transform: translateX(-120%) skewX(25deg); opacity: 0; filter: blur(6px); } }\n@keyframes pptx-tr-wind-out-right { from { transform: translateX(0) skewX(0deg); opacity: 1; filter: blur(0); } to { transform: translateX(120%) skewX(-25deg); opacity: 0; filter: blur(6px); } }\n\n/* \u2500\u2500 Prestige (magic vanish then reappear) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-prestige-out { from { transform: scale(1) rotate(0deg); opacity: 1; filter: blur(0); } to { transform: scale(1.4) rotate(6deg); opacity: 0; filter: blur(8px); } }\n@keyframes pptx-tr-prestige-in { from { transform: scale(.6) rotate(-6deg); opacity: 0; filter: blur(8px); } to { transform: scale(1) rotate(0deg); opacity: 1; filter: blur(0); } }\n\n/* \u2500\u2500 Fracture (shatter into contrast + blur) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-fracture-out { 0% { transform: scale(1); opacity: 1; filter: contrast(1) blur(0); } 55% { transform: scale(1.04) rotate(1deg); opacity: 1; filter: contrast(1.7) brightness(1.15); } 100% { transform: scale(1.15) rotate(-2deg); opacity: 0; filter: contrast(2.2) blur(4px); } }\n\n/* \u2500\u2500 Crush (squash flat, then new slide expands) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-crush-out { from { transform: scaleY(1); transform-origin: bottom; opacity: 1; } to { transform: scaleY(0); transform-origin: bottom; opacity: .2; } }\n@keyframes pptx-tr-crush-in { from { transform: scaleY(0); transform-origin: bottom; opacity: .2; } to { transform: scaleY(1); transform-origin: bottom; opacity: 1; } }\n\n/* \u2500\u2500 Peel Off (peel away from a corner) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-peeloff-out { from { transform: perspective(1400px) rotate3d(1, 1, 0, 0deg); transform-origin: top right; opacity: 1; } to { transform: perspective(1400px) rotate3d(1, 1, 0, 110deg); transform-origin: top right; opacity: .15; } }\n\n/* \u2500\u2500 Page Curl (curl off the right edge; double curls new in) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-pagecurl-out { from { transform: perspective(1600px) rotateY(0deg); transform-origin: right center; opacity: 1; } to { transform: perspective(1600px) rotateY(-155deg); transform-origin: right center; opacity: .25; } }\n@keyframes pptx-tr-pagecurl-double-in { from { transform: perspective(1600px) rotateY(155deg); transform-origin: left center; opacity: .25; } to { transform: perspective(1600px) rotateY(0deg); transform-origin: left center; opacity: 1; } }\n\n/* \u2500\u2500 Airplane (fly off like a paper plane) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@keyframes pptx-tr-airplane-out { 0% { transform: perspective(1200px) translate3d(0, 0, 0) rotate3d(1, -1, 0, 0deg) scale(1); opacity: 1; } 40% { transform: perspective(1200px) translate3d(10%, -10%, 0) rotate3d(1, -1, 0, 25deg) scale(.85); opacity: 1; } 100% { transform: perspective(1200px) translate3d(150%, -70%, 0) rotate3d(1, -1, 1, 70deg) scale(.05); opacity: 0; } }\n\n/* \u2500\u2500 Origami (fold the sheet over its top edge; the next unfolds up) \u2500\u2500\n The old single-phase rotateY + scaleX compressed the outgoing slide into a\n narrow vertical sliver for most of the (3+ second) duration, which read as\n \"just a grey line\" instead of paper folding (issue #132). The fold is now\n hinged like a real sheet: the outgoing slide creases over its TOP edge,\n dims as it tips through edge-on, and tumbles away shrinking; the incoming\n slide lies folded at its BOTTOM edge and rises into place. The edge-on\n moment is brief and already mid-fade, so no line artifact survives. */\n@keyframes pptx-tr-origami-out { 0% { transform: perspective(1400px) rotateX(0deg) translateY(0) scale(1); transform-origin: top center; opacity: 1; filter: brightness(1); } 45% { transform: perspective(1400px) rotateX(-52deg) translateY(2%) scale(.96); transform-origin: top center; opacity: 1; filter: brightness(.82); } 70% { transform: perspective(1400px) rotateX(-84deg) translateY(8%) scale(.88); transform-origin: top center; opacity: .8; filter: brightness(.68); } 100% { transform: perspective(1400px) rotateX(-125deg) translateY(30%) scale(.68); transform-origin: top center; opacity: 0; filter: brightness(.55); } }\n@keyframes pptx-tr-origami-in { 0% { transform: perspective(1400px) rotateX(62deg) scale(.94); transform-origin: bottom center; opacity: 0; filter: brightness(.7); } 30% { transform: perspective(1400px) rotateX(62deg) scale(.94); transform-origin: bottom center; opacity: .65; filter: brightness(.75); } 100% { transform: perspective(1400px) rotateX(0deg) scale(1); transform-origin: bottom center; opacity: 1; filter: brightness(1); } }\n";
4732
+ declare const SLIDE_TRANSITION_KEYFRAMES: string;
4473
4733
 
4474
4734
  /**
4475
4735
  * `slide-transition-css` — pure mapping from a {@link PptxSlideTransition}
@@ -4860,7 +5120,7 @@ interface DrawingViewBox {
4860
5120
  height: number;
4861
5121
  }
4862
5122
  /** Compute the SVG viewBox that fits all drawing shapes, rebasing to (0, 0). */
4863
- declare function computeDrawingViewBox(shapes: PptxSmartArtDrawingShape[]): DrawingViewBox;
5123
+ declare function computeDrawingViewBox(shapes: readonly PptxSmartArtDrawingShape[]): DrawingViewBox;
4864
5124
  /**
4865
5125
  * Project raw `PptxSmartArtDrawingShape`s into `RenderedShape` view-models,
4866
5126
  * rebasing positions relative to the viewBox origin.
@@ -4965,7 +5225,15 @@ declare function isUnderline(el: PptxElement): boolean;
4965
5225
  */
4966
5226
  interface ShapeStyleChanges {
4967
5227
  fillColor?: string;
5228
+ /**
5229
+ * Set alongside `fillColor` when the colour came from a theme swatch (wins
5230
+ * on save); pass `undefined` explicitly when clearing a previously-stored
5231
+ * ref (a custom hex or recent-colour pick has no theme identity).
5232
+ */
5233
+ fillColorRef?: PptxThemeColorRef;
4968
5234
  strokeColor?: string;
5235
+ /** Same contract as {@link fillColorRef}, for the stroke colour. */
5236
+ strokeColorRef?: PptxThemeColorRef;
4969
5237
  }
4970
5238
  /**
4971
5239
  * Builds a Partial<PptxElement> patch that merges the given changes into the
@@ -4978,6 +5246,8 @@ declare function shapeStylePatch(el: PptxElement, changes: ShapeStyleChanges): P
4978
5246
  */
4979
5247
  interface TextStyleChanges {
4980
5248
  color?: string;
5249
+ /** Same contract as {@link ShapeStyleChanges.fillColorRef}, for the text colour. */
5250
+ colorRef?: PptxThemeColorRef;
4981
5251
  fontSize?: number;
4982
5252
  bold?: boolean;
4983
5253
  italic?: boolean;
@@ -6374,6 +6644,13 @@ interface GradientStop$1 {
6374
6644
  color: string;
6375
6645
  position: number;
6376
6646
  opacity?: number;
6647
+ /**
6648
+ * Theme colour identity for this stop, mirroring
6649
+ * `ShapeStyle.fillColorRef`. Set by a theme-swatch pick so the stop keeps
6650
+ * following the theme after a later theme change; cleared by a custom hex
6651
+ * pick, which has no theme identity.
6652
+ */
6653
+ colorRef?: PptxThemeColorRef;
6377
6654
  }
6378
6655
  /** The editable gradient state surfaced to the component. */
6379
6656
  interface GradientState {
@@ -6565,6 +6842,22 @@ interface MediaFallbackVisual {
6565
6842
  placeholder: MediaFallbackPlaceholder;
6566
6843
  }
6567
6844
 
6845
+ /**
6846
+ * Trim-timeline geometry math for the trim-editing UI, shared by every
6847
+ * binding's trim scrubber (React `TrimTimeline`, Vue `MediaTrimTimeline.vue`,
6848
+ * Angular `media-trim-timeline.component.ts`, Svelte, vanilla).
6849
+ *
6850
+ * `trimEndMs` throughout this module is `p14:trim/@end`'s own on-the-wire
6851
+ * unit: the distance, in milliseconds, from the END of the clip, NOT an
6852
+ * absolute stop time. COM-verified ground truth (see
6853
+ * `PptxHandlerRuntimeMediaParsingUtils.ts`'s `MediaExtensionData` doc):
6854
+ * setting `Shape.MediaFormat.EndPoint = 29596` on a 30034ms clip round-trips
6855
+ * through real PowerPoint as `p14:trim end="438"` (30034 - 29596). Every
6856
+ * function here converts to/from an absolute position internally using the
6857
+ * caller-supplied `durationSeconds`, so a caller can keep storing and
6858
+ * round-tripping the raw distance-from-end value without doing that maths
6859
+ * itself.
6860
+ */
6568
6861
  type MediaTrimHandle = 'start' | 'end';
6569
6862
  interface MediaTimelineGeometry {
6570
6863
  startPercent: number;
@@ -6573,6 +6866,7 @@ interface MediaTimelineGeometry {
6573
6866
  }
6574
6867
  interface MediaTrimRange {
6575
6868
  trimStartMs: number;
6869
+ /** Distance, in ms, from the clip's END. See module doc. */
6576
6870
  trimEndMs: number;
6577
6871
  }
6578
6872
 
@@ -6690,6 +6984,54 @@ interface FontEmbeddingDescriptor {
6690
6984
  disabledReasonKey?: string;
6691
6985
  }
6692
6986
 
6987
+ /**
6988
+ * Pure decision helpers a colour-picker UI uses on top of the theme swatch
6989
+ * grid ({@link buildThemeColorSwatchGrid}): which swatch (if any) matches the
6990
+ * element's current colour, and what a click / a custom pick should write
6991
+ * back to the model.
6992
+ *
6993
+ * Every binding (React, Vue, Angular, Svelte, Vanilla) shares this module so
6994
+ * "click a theme swatch" and "type a custom hex" behave identically
6995
+ * everywhere: a theme swatch commits both the resolved hex (so rendering
6996
+ * keeps working even where the ref cannot be resolved) and the
6997
+ * {@link PptxThemeColorRef} (so the colour survives a later theme swap); a
6998
+ * custom hex or a recent-colour pick always clears the ref, since a plain
6999
+ * sRGB value has no theme identity for PowerPoint to reapply.
7000
+ *
7001
+ * @module render/theme-color-picker-state
7002
+ */
7003
+
7004
+ /** What a picker should write back to the model on a commit. */
7005
+ interface ThemeColorPickerCommit {
7006
+ /** Resolved `#rrggbb`, always set so rendering keeps working. */
7007
+ readonly hex: string;
7008
+ /** The theme ref to store, or `undefined` to clear a previously-stored ref. */
7009
+ readonly ref: PptxThemeColorRef | undefined;
7010
+ }
7011
+
7012
+ /**
7013
+ * The exact model field pair each colour-picker surface writes on a commit
7014
+ * ({@link ThemeColorPickerCommit}), named once so five bindings cannot each
7015
+ * spell `backgroundColorRef` / `colorRef` differently (or forget the ref
7016
+ * field entirely, which is how a swatch pick silently degraded to a plain
7017
+ * hex in the ribbon Shape Fill/Outline pickers before this module existed).
7018
+ *
7019
+ * Every helper here is a trivial field rename: the interesting decision
7020
+ * logic (which swatch is selected, what a click vs. a custom hex commits)
7021
+ * already lives in {@link ../render/theme-color-picker-state}. This module
7022
+ * only exists so that decision's OUTPUT lands on the right property names
7023
+ * for each surface (gradient stop, table cell fill, table cell text).
7024
+ *
7025
+ * @module render/theme-color-field-commit
7026
+ */
7027
+
7028
+ /**
7029
+ * The `color` / `colorRef` patch a gradient stop editor writes for one stop,
7030
+ * in any binding. Pass to `updateGradientStopPatch(el, index, ...)` or merge
7031
+ * directly into the stop object a binding's own gradient state holds.
7032
+ */
7033
+ declare function gradientStopColorCommitPatch(commit: ThemeColorPickerCommit): Pick<GradientStop$1, 'color' | 'colorRef'>;
7034
+
6693
7035
  /**
6694
7036
  * Command-search data for the PowerPoint-style "Tell me what you want to do"
6695
7037
  * search bar. Provides searchable command entries grouped by category, each
@@ -7612,9 +7954,20 @@ interface OleIconShape {
7612
7954
  */
7613
7955
  declare function registerCrossSlideAudio(element: MediaPptxElement, src: string | undefined): boolean;
7614
7956
 
7615
- /** Grouping needs an editable deck and at least two selected elements. */
7616
- declare function canGroupSelection(canEdit: boolean, selectedCount: number): boolean;
7617
- /** Ungrouping needs an editable deck and a selection that IS a group. */
7957
+ /**
7958
+ * Grouping needs an editable deck, at least two selected elements, and (when
7959
+ * the caller can supply it) none of those elements locked against grouping.
7960
+ *
7961
+ * `selectionGroupable` defaults to `true` so callers that only know the
7962
+ * selection count (not yet the elements themselves) keep their previous
7963
+ * behaviour; a caller that HAS the selected elements should pass
7964
+ * `selectedElements.every((el) => canInteractWithElement(el, 'group'))`.
7965
+ */
7966
+ declare function canGroupSelection(canEdit: boolean, selectedCount: number, selectionGroupable?: boolean): boolean;
7967
+ /**
7968
+ * Ungrouping needs an editable deck, a selection that IS a group, and that
7969
+ * group's own `a:grpSpLocks/@noGrp` allowing it.
7970
+ */
7618
7971
  declare function canUngroupSelection(canEdit: boolean, element: PptxElement | null): boolean;
7619
7972
  /** An outline width only exists on an element that carries shape properties. */
7620
7973
  declare function canSetStrokeWidth(canEdit: boolean, element: PptxElement | null): boolean;
@@ -10366,6 +10719,8 @@ declare class ViewerCanvasEditingService {
10366
10719
  id: string;
10367
10720
  text: string;
10368
10721
  height?: number;
10722
+ autoFitFontScale?: number;
10723
+ autoFitLineSpacingReduction?: number;
10369
10724
  }): void;
10370
10725
  /** Receive a completed ink stroke and append it to the active slide. */
10371
10726
  onInkStrokeComplete(ink: InkPptxElement): void;
@@ -13723,6 +14078,8 @@ declare class SlideCanvasComponent implements SlideContext {
13723
14078
  id: string;
13724
14079
  text: string;
13725
14080
  height?: number;
14081
+ autoFitFontScale?: number;
14082
+ autoFitLineSpacingReduction?: number;
13726
14083
  }>;
13727
14084
  /**
13728
14085
  * Emitted on EVERY keystroke while inline-editing. The commit path stays the
@@ -14083,6 +14440,10 @@ interface TextRun {
14083
14440
  href?: string;
14084
14441
  /** Hyperlink tooltip / title text. */
14085
14442
  tooltip?: string;
14443
+ /** `<a target>`, from `a:hlinkClick/@tgtFrame` when authored, else `_blank`. */
14444
+ target?: string;
14445
+ /** `<a rel>` paired with {@link target}. */
14446
+ rel?: string;
14086
14447
  /** Parsed OMML for an inline equation run (rendered as MathML). */
14087
14448
  equationXml?: Record<string, unknown>;
14088
14449
  /** Optional equation number for numbered equations. */
@@ -14105,6 +14466,13 @@ interface TextRun {
14105
14466
  * alignment and leader glyphs a plain CSS `tab-size` cannot express.
14106
14467
  */
14107
14468
  tabLines?: TabbedLineRun[];
14469
+ /**
14470
+ * `a:rPr/@u="words"` word/gap pieces of a RUBY run's base text (same shape
14471
+ * as `scriptRuns`, rendered the same way in place of `text`): the base text
14472
+ * stays one run so the annotation still reads over the whole thing, while
14473
+ * only the word entries carry the underline. Absent otherwise.
14474
+ */
14475
+ underlineWordPieces?: ScriptFontPiece[];
14108
14476
  /**
14109
14477
  * `a:reflection` mirrored-sibling wrapper style for this run, or `undefined`
14110
14478
  * for the common no-reflection case - the text-run counterpart of a
@@ -14743,9 +15111,10 @@ declare class ChartElementViewComponent {
14743
15111
  readonly editable: _angular_core.InputSignal<boolean>;
14744
15112
  /**
14745
15113
  * Native-animation playback state. When it carries a staged chart build
14746
- * (`build.kind === 'chart'`) the chart reveals its series / categories / cells
14747
- * progressively via the shared `applyChartBuildReveal`. Absent outside a
14748
- * running presentation, so ordinary rendering is unaffected.
15114
+ * (`build.kind === 'chart'`, or the authored-index `chartReveal`) the chart
15115
+ * reveals its series / categories / cells progressively via the shared
15116
+ * `resolveRevealedChartData`. Absent outside a running presentation, so
15117
+ * ordinary rendering is unaffected.
14749
15118
  */
14750
15119
  readonly animationState: _angular_core.InputSignal<ElementAnimationState | undefined>;
14751
15120
  /**
@@ -14867,6 +15236,12 @@ declare class ChartElementViewComponent {
14867
15236
  * @module angular-viewer/smart-art-inline-edit
14868
15237
  */
14869
15238
 
15239
+ /**
15240
+ * May a node on this SmartArt be entered for inline double-click/Enter
15241
+ * editing? G8: `a:graphicFrameLocks/@noDrilldown` forbids the drill-down,
15242
+ * even when the diagram is otherwise editable with a commit channel.
15243
+ */
15244
+ declare function canEditSmartArtNodes(editable: boolean, hasEditor: boolean, element: PptxElement): boolean;
14870
15245
  /**
14871
15246
  * An axis-aligned box in element-local (viewBox) pixel coordinates, used to
14872
15247
  * position the inline `<textarea>` over a node. Because the SmartArt `<svg>`
@@ -15060,12 +15435,10 @@ declare class SmartArtRendererComponent {
15060
15435
  readonly shadowFilter: _angular_core.Signal<string | undefined>;
15061
15436
  private readonly rawDrawingShapes;
15062
15437
  readonly hasDrawingShapes: _angular_core.Signal<boolean>;
15063
- private readonly diagramBuild;
15064
- private readonly shownNodeCount;
15065
- private readonly isPartialBuild;
15438
+ private readonly diagramReveal;
15066
15439
  /** Leading node prefix revealed so far (full list when no partial build). */
15067
15440
  private readonly revealedNodes;
15068
- /** Leading drawing-shape prefix revealed so far (proportional to nodes). */
15441
+ /** Revealed drawing-shape subset, preferring the authored node-id set. */
15069
15442
  private readonly revealedShapeList;
15070
15443
  private readonly viewBox;
15071
15444
  /** `viewBox` attribute string for the drawing-shapes `<svg>`. */
@@ -15075,6 +15448,11 @@ declare class SmartArtRendererComponent {
15075
15448
  * Node id for each drawing shape (index-aligned with `renderedShapes`).
15076
15449
  * Used to tag `<g>` elements with `data-smartart-node-id` so the 3D
15077
15450
  * renderer's hit-test overlay can resolve a click to a node.
15451
+ *
15452
+ * Aligned with the REVEALED subset `renderedShapes` projects: during a staged
15453
+ * `p:bldDgm` build that differs from the full list, and indexing the full
15454
+ * list's ids by rendered position stamped the first node's id onto whichever
15455
+ * shape the authored reveal showed first (Gamma carried Alpha's id).
15078
15456
  */
15079
15457
  readonly drawingShapeNodeIds: _angular_core.Signal<(string | undefined)[]>;
15080
15458
  readonly layout: _angular_core.Signal<SmartArtLayoutResult>;
@@ -15664,6 +16042,12 @@ declare class AnimationPlaybackService {
15664
16042
  private controller;
15665
16043
  private readonly timers;
15666
16044
  private readonly buildHandle;
16045
+ /**
16046
+ * The click-group the last presenter click started, so a second click while
16047
+ * it is still mid-flight fast-forwards it (`p:seq/@nextAc="seek"`) instead
16048
+ * of skipping to the next group. Owned here, mutated by the shared helpers.
16049
+ */
16050
+ private readonly activeGroup;
15667
16051
  private showWithAnimation;
15668
16052
  private frameRoot;
15669
16053
  private onPlayActionSound;
@@ -16152,6 +16536,11 @@ declare class PresentationInputController {
16152
16536
  handleKeyDown(event: KeyboardEvent): void;
16153
16537
  /** Left-click on the slide area advances to the next visible slide. */
16154
16538
  handleBodyClick(event: MouseEvent): void;
16539
+ /**
16540
+ * `@highlightClick` ("Highlight click"): a brief flash independent of
16541
+ * whatever the action itself does, so it runs even for a no-op action.
16542
+ */
16543
+ private applyClickHighlight;
16155
16544
  /**
16156
16545
  * Run any on-slide action under the pointer, and report what the click left
16157
16546
  * for the show: only `'advance'` reaches {@link advanceFromClick}.
@@ -16369,6 +16758,16 @@ declare class PresentationOverlayComponent implements OnInit {
16369
16758
  */
16370
16759
  protected onStageHover(event: MouseEvent): void;
16371
16760
  protected onStageHoverEnd(event: MouseEvent): void;
16761
+ /** The element currently flashed by `a:hlinkHover/@highlightClick`, if any. */
16762
+ private highlightedHoverElement;
16763
+ /**
16764
+ * `a:hlinkHover/@highlightClick`: the same flash as the click version, held
16765
+ * for the duration of the hover rather than timed. Tracked separately from
16766
+ * `stageAnimator`'s native-animation hover trigger above, since a shape can
16767
+ * carry one without the other.
16768
+ */
16769
+ private applyHoverHighlight;
16770
+ private clearHoverHighlightUnlessWithin;
16372
16771
  /** Viewport dimensions, updated on resize. */
16373
16772
  private readonly viewportW;
16374
16773
  private readonly viewportH;
@@ -16710,8 +17109,21 @@ declare class InspectorPanelComponent {
16710
17109
  protected readonly isLocked: _angular_core.Signal<boolean>;
16711
17110
  /** Whether the element supports shape-style (fill/stroke) editing. */
16712
17111
  protected readonly hasShape: _angular_core.Signal<boolean>;
17112
+ /**
17113
+ * LIVE (not `seed()`-frozen) fill/stroke colour + ref, read fresh from the
17114
+ * element on every change so the theme-swatch grid's highlight tracks the
17115
+ * current colour right after a pick, unlike the caret-preserving `seed()`
17116
+ * fields the native `<input type="color">`s bind to.
17117
+ */
17118
+ protected readonly liveFillColor: _angular_core.Signal<string>;
17119
+ protected readonly liveStrokeColor: _angular_core.Signal<string>;
17120
+ protected readonly fillColorRef: _angular_core.Signal<PptxThemeColorRef | undefined>;
17121
+ protected readonly strokeColorRef: _angular_core.Signal<PptxThemeColorRef | undefined>;
16713
17122
  /** Whether the element supports text-style editing. */
16714
17123
  protected readonly hasText: _angular_core.Signal<boolean>;
17124
+ /** LIVE text colour + ref (see {@link liveFillColor}'s doc for why not `seed()`). */
17125
+ protected readonly liveTextColor: _angular_core.Signal<string>;
17126
+ protected readonly textColorRef: _angular_core.Signal<PptxThemeColorRef | undefined>;
16715
17127
  protected readonly currentBold: _angular_core.Signal<boolean>;
16716
17128
  protected readonly currentItalic: _angular_core.Signal<boolean>;
16717
17129
  protected readonly currentUnderline: _angular_core.Signal<boolean>;
@@ -16750,16 +17162,22 @@ declare class InspectorPanelComponent {
16750
17162
  protected onRotationChange(event: Event): void;
16751
17163
  protected onOpacityChange(event: Event): void;
16752
17164
  protected onFillColorChange(event: Event): void;
16753
- /** Recent-colours row pick: commits through the same path as the native picker. */
17165
+ /** Recent-colours row pick: commits through the same path as the native picker, clearing any stored ref. */
16754
17166
  protected onFillColorPick(color: string): void;
17167
+ /** Theme-swatch pick: commits BOTH the resolved hex and the ref, so the fill follows a later theme change. */
17168
+ protected onFillThemeColor(commit: ThemeColorPickerCommit): void;
16755
17169
  private commitFillColor;
16756
17170
  protected onStrokeColorChange(event: Event): void;
16757
- /** Recent-colours row pick: commits through the same path as the native picker. */
17171
+ /** Recent-colours row pick: commits through the same path as the native picker, clearing any stored ref. */
16758
17172
  protected onStrokeColorPick(color: string): void;
17173
+ /** Theme-swatch pick: commits BOTH the resolved hex and the ref, so the stroke follows a later theme change. */
17174
+ protected onStrokeThemeColor(commit: ThemeColorPickerCommit): void;
16759
17175
  private commitStrokeColor;
16760
17176
  protected onTextColorChange(event: Event): void;
16761
- /** Recent-colours row pick: commits through the same path as the native picker. */
17177
+ /** Recent-colours row pick: commits through the same path as the native picker, clearing any stored ref. */
16762
17178
  protected onTextColorPick(color: string): void;
17179
+ /** Theme-swatch pick: commits BOTH the resolved hex and the ref, so the text colour follows a later theme change. */
17180
+ protected onTextThemeColor(commit: ThemeColorPickerCommit): void;
16763
17181
  private commitTextColor;
16764
17182
  protected onFontSizeChange(event: Event): void;
16765
17183
  protected onBoldToggle(): void;
@@ -17122,7 +17540,10 @@ declare class GradientPickerComponent {
17122
17540
  protected readonly previewCss: _angular_core.Signal<string>;
17123
17541
  protected onTypeChange(event: Event): void;
17124
17542
  protected onAngleChange(event: Event): void;
17543
+ /** No theme identity, so this always explicitly clears any stored `colorRef` (see {@link onStopThemePick}). */
17125
17544
  protected onStopColorChange(event: Event, index: number): void;
17545
+ /** A theme-swatch pick: commits BOTH the resolved hex and the ref. */
17546
+ protected onStopThemePick(commit: ThemeColorPickerCommit, index: number): void;
17126
17547
  protected onStopPositionChange(event: Event, index: number): void;
17127
17548
  protected onStopOpacityChange(event: Event, index: number): void;
17128
17549
  protected onRemoveStop(index: number): void;
@@ -17182,8 +17603,8 @@ declare class TextAdvancedPanelComponent {
17182
17603
  protected readonly elementKey: _angular_core.Signal<string>;
17183
17604
  /** Exposed option arrays for the template. */
17184
17605
  protected readonly alignOptions: [NonNullable<"center" | "left" | "right" | "justify" | "justLow" | "dist" | "thaiDist" | undefined>, string][];
17185
- protected readonly vAlignOptions: [NonNullable<"top" | "bottom" | "middle" | undefined>, string][];
17186
- protected readonly textDirectionOptions: [NonNullable<"eaVert" | "wordArtVert" | "wordArtVertRtl" | "mongolianVert" | "horizontal" | "vertical" | "vertical270" | undefined>, string][];
17606
+ protected readonly vAlignOptions: [NonNullable<"top" | "bottom" | "middle" | "distributed" | "justified" | undefined>, string][];
17607
+ protected readonly textDirectionOptions: [NonNullable<"vertical" | "horizontal" | "eaVert" | "wordArtVert" | "wordArtVertRtl" | "mongolianVert" | "vertical270" | undefined>, string][];
17187
17608
  protected alignLabel(align: NonNullable<TextStyle['align']>): string;
17188
17609
  protected onAlignChange(align: NonNullable<TextStyle['align']>): void;
17189
17610
  protected onVAlignChange(event: Event): void;
@@ -17421,6 +17842,13 @@ declare class TableCellFormattingComponent {
17421
17842
  protected widthOf(key: NumKey): number;
17422
17843
  protected toggle(key: 'bold' | 'italic' | 'underline'): void;
17423
17844
  protected onColor(key: ColorKey, event: Event): void;
17845
+ /**
17846
+ * A `pptx-table-cell-color-field` commit (text colour or fill colour): sets
17847
+ * both the hex and its ref field, so a theme-swatch pick keeps following
17848
+ * the deck's theme after a later theme change, and a native pick clears any
17849
+ * previously-stored ref (the field always emits `ref: undefined` for one).
17850
+ */
17851
+ protected onColorCommit(hexKey: 'color' | 'backgroundColor', refKey: 'colorRef' | 'backgroundColorRef', commit: ThemeColorPickerCommit): void;
17424
17852
  /**
17425
17853
  * Record the committed (native `change`, not the live-preview `input`)
17426
17854
  * colour into the shared "Recent colours" list.
@@ -18416,7 +18844,7 @@ declare class EditorToolbarComponent {
18416
18844
  /** Align needs ≥2 selected elements; distribute needs ≥3. */
18417
18845
  protected readonly canAlign: _angular_core.Signal<boolean>;
18418
18846
  protected readonly canDistribute: _angular_core.Signal<boolean>;
18419
- /** Group needs ≥2 selected; ungroup needs exactly one selected group. */
18847
+ /** Group/ungroup, including the `a:spLocks`/`a:grpSpLocks` `@noGrp` lock (`group-lock-guard.ts`). */
18420
18848
  protected readonly canGroup: _angular_core.Signal<boolean>;
18421
18849
  protected readonly canUngroup: _angular_core.Signal<boolean>;
18422
18850
  protected onInsertText(): void;
@@ -18508,6 +18936,13 @@ declare class EditorContextMenuComponent {
18508
18936
  } | null>;
18509
18937
  /** The single selected element, or null on an empty or multi selection. */
18510
18938
  private readonly selectedElement;
18939
+ /**
18940
+ * Lock-only half of Group/Ungroup gating (`a:spLocks`/`a:grpSpLocks`
18941
+ * `@noGrp`), independent of selection count, mirroring the guard
18942
+ * `EditorStateService.groupSelected`/`ungroupSelected` already enforce on
18943
+ * the commands themselves (`group-lock-guard.ts`).
18944
+ */
18945
+ private readonly selectionGroupable;
18511
18946
  /** The menu, as the shared command list builds it for this right-click. */
18512
18947
  protected readonly entries: _angular_core.Signal<ContextMenuEntry[]>;
18513
18948
  /** Editor operations behind each command id (see the dispatch module). */
@@ -18954,6 +19389,17 @@ declare class MediaPropertiesPanelComponent {
18954
19389
  protected readonly media: _angular_core.Signal<MediaPptxElement>;
18955
19390
  protected readonly mediaDataUrls: _angular_core.Signal<Map<any, any>>;
18956
19391
  protected readonly speeds: readonly [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 3, 4];
19392
+ /**
19393
+ * `trimEndMs` is `p14:trim/@end`, the distance from the clip's TAIL
19394
+ * (COM-verified), not an absolute stop time. The "Trim end" field shows the
19395
+ * user an absolute position and converts back on commit, mirroring React's
19396
+ * `MediaInspector` / Vue's `MediaPropertiesPanel.vue` via the shared
19397
+ * `media-trim-range.ts` (this raw ms field used to bind the tail distance
19398
+ * directly, so typing "the last 5s" required computing duration-minus-5000
19399
+ * by hand).
19400
+ */
19401
+ private readonly durationMs;
19402
+ protected readonly trimEndAbsoluteMs: _angular_core.Signal<number>;
18957
19403
  protected readonly volumePercent: _angular_core.Signal<number>;
18958
19404
  protected readonly toggles: _angular_core.Signal<readonly [{
18959
19405
  readonly key: "autoPlay";
@@ -18977,6 +19423,8 @@ declare class MediaPropertiesPanelComponent {
18977
19423
  readonly value: boolean;
18978
19424
  }]>;
18979
19425
  protected numberPatch(key: keyof MediaPptxElement, event: Event): void;
19426
+ /** Convert the typed absolute end position back to `trimEndMs`'s tail distance. */
19427
+ protected trimEndPatch(event: Event): void;
18980
19428
  protected volumeChange(event: Event): void;
18981
19429
  protected booleanPatch(key: keyof MediaPptxElement, event: Event): void;
18982
19430
  protected addBookmark(): void;
@@ -19899,7 +20347,7 @@ declare class AccountPageComponent {
19899
20347
  readonly accountAuth: _angular_core.InputSignal<AccountAuthConfig | undefined>;
19900
20348
  private readonly translate;
19901
20349
  protected readonly swatches: readonly string[];
19902
- protected readonly version = "3.6.4";
20350
+ protected readonly version = "3.7.0";
19903
20351
  protected readonly profile: _angular_core.WritableSignal<ViewerProfile>;
19904
20352
  protected readonly initial: _angular_core.Signal<string>;
19905
20353
  protected readonly usage: _angular_core.WritableSignal<LocalStorageUsageSummary | null>;
@@ -20413,8 +20861,6 @@ declare class PresentationTransitionOverlayComponent {
20413
20861
  private readonly destroyRef;
20414
20862
  /** Active completion timer handle, so re-running re-arms cleanly. */
20415
20863
  private completeTimer;
20416
- /** Active transition-sound element, paused on teardown. */
20417
- private audio;
20418
20864
  /** Whether `complete` has already fired for the current run. */
20419
20865
  private fired;
20420
20866
  constructor();
@@ -20479,8 +20925,21 @@ declare class PresentationTransitionOverlayComponent {
20479
20925
  protected readonly slideBoxStyle: _angular_core.Signal<StyleMap>;
20480
20926
  private armCompletion;
20481
20927
  private clearTimer;
20482
- private playSound;
20483
- private stopSound;
20928
+ /**
20929
+ * Play or stop this transition's sound action (`p:sndAc/p:stSnd`/`p:endSnd`).
20930
+ *
20931
+ * `transition.soundPath` is a raw in-archive path (e.g. `ppt/media/media3.wav`)
20932
+ * that a bare `Audio` element constructed straight from it cannot fetch; it
20933
+ * must be resolved through `mediaDataUrls()`, the same Blob-URL cache
20934
+ * `load-content.service.ts`
20935
+ * pre-populates via `collectAnimationSoundPaths` (extended to also collect
20936
+ * `slide.transition?.soundPath` alongside per-effect animation sounds).
20937
+ * Reuses the shared per-effect sound singleton (`animation-sound.ts`) rather
20938
+ * than a private `Audio` element, so a transition sound and an animation
20939
+ * sound cannot talk over each other, matching PowerPoint's "one sound plays
20940
+ * at a time" behaviour.
20941
+ */
20942
+ private applyTransitionSound;
20484
20943
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PresentationTransitionOverlayComponent, never>;
20485
20944
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<PresentationTransitionOverlayComponent, "pptx-presentation-transition-overlay", never, { "outgoingSlide": { "alias": "outgoingSlide"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "transition": { "alias": "transition"; "required": true; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "durationMs": { "alias": "durationMs"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "incomingSlide": { "alias": "incomingSlide"; "required": false; "isSignal": true; }; }, { "complete": "complete"; }, never, never, true, never>;
20486
20945
  }
@@ -21710,12 +22169,29 @@ declare class RibbonColorPopoverComponent {
21710
22169
  readonly disabled: _angular_core.InputSignal<boolean>;
21711
22170
  readonly titleKey: _angular_core.InputSignal<string>;
21712
22171
  readonly swatchAriaKey: _angular_core.InputSignal<string>;
22172
+ /** Show the deck's "Theme Colors" grid above the presets (font colour only: highlight
22173
+ * colour has no theme-ref concept on the model). */
22174
+ readonly showThemeColors: _angular_core.InputSignal<boolean>;
22175
+ /** The element's current theme ref, if any (only meaningful with `showThemeColors`). */
22176
+ readonly currentRef: _angular_core.InputSignal<PptxThemeColorRef | undefined>;
22177
+ /** Fired by a preset, recent, or custom-input pick (never by a theme swatch: see `pickThemeColor`). */
21713
22178
  readonly pick: _angular_core.OutputEmitterRef<string>;
22179
+ /**
22180
+ * Fired ONLY by a theme-swatch click, carrying both the hex and the ref.
22181
+ * Kept SEPARATE from `pick` (rather than also firing `pick` for the same
22182
+ * click) so a caller that handles both never commits the hex-only patch
22183
+ * and the ref-bearing patch as two separate edits/undo-steps for one click;
22184
+ * a caller that only binds `(pick)` (the Home ribbon's Shape Fill/Outline
22185
+ * dropdowns, which never set `showThemeColors`) is unaffected either way,
22186
+ * since it never renders the theme grid this fires from.
22187
+ */
22188
+ readonly pickThemeColor: _angular_core.OutputEmitterRef<ThemeColorPickerCommit>;
21714
22189
  protected readonly recentColors: RecentColorsService;
21715
22190
  /** Every commit through this popover both fires `pick` and records the colour as recently used. */
21716
22191
  protected onPick(color: string): void;
22192
+ protected onThemePick(commit: ThemeColorPickerCommit): void;
21717
22193
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonColorPopoverComponent, never>;
21718
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonColorPopoverComponent, "pptx-ribbon-color-popover", never, { "current": { "alias": "current"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "swatchAriaKey": { "alias": "swatchAriaKey"; "required": false; "isSignal": true; }; }, { "pick": "pick"; }, never, ["*"], true, never>;
22194
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonColorPopoverComponent, "pptx-ribbon-color-popover", never, { "current": { "alias": "current"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "titleKey": { "alias": "titleKey"; "required": false; "isSignal": true; }; "swatchAriaKey": { "alias": "swatchAriaKey"; "required": false; "isSignal": true; }; "showThemeColors": { "alias": "showThemeColors"; "required": false; "isSignal": true; }; "currentRef": { "alias": "currentRef"; "required": false; "isSignal": true; }; }, { "pick": "pick"; "pickThemeColor": "pickThemeColor"; }, never, ["*"], true, never>;
21719
22195
  }
21720
22196
 
21721
22197
  declare class RibbonDesignSectionComponent {
@@ -21743,10 +22219,16 @@ declare class RibbonDrawingGroupComponent {
21743
22219
  protected readonly canFormatShape: _angular_core.Signal<boolean>;
21744
22220
  protected readonly fillColor: _angular_core.Signal<string>;
21745
22221
  protected readonly outlineColor: _angular_core.Signal<string>;
21746
- /** Commit a picked Fill swatch through the shared decision function. */
22222
+ protected readonly fillColorRef: _angular_core.Signal<pptx_viewer_core.PptxThemeColorRef | undefined>;
22223
+ protected readonly outlineColorRef: _angular_core.Signal<pptx_viewer_core.PptxThemeColorRef | undefined>;
22224
+ /** Commit a picked Fill swatch through the shared decision function; clears any stored ref. */
21747
22225
  protected onFill(color: string): void;
21748
- /** Commit a picked Outline swatch through the shared decision function. */
22226
+ /** Commit a picked Outline swatch through the shared decision function; clears any stored ref. */
21749
22227
  protected onOutline(color: string): void;
22228
+ /** A theme-swatch Fill pick: commits BOTH the resolved hex and the ref. */
22229
+ protected onFillThemePick(commit: ThemeColorPickerCommit): void;
22230
+ /** A theme-swatch Outline pick: commits BOTH the resolved hex and the ref. */
22231
+ protected onOutlineThemePick(commit: ThemeColorPickerCommit): void;
21750
22232
  /** Merge a Fill/Outline patch into the selection's shape style, if it has one. */
21751
22233
  private patchShapeStyle;
21752
22234
  /** Insert the picked preset immediately (selects it and records history). */
@@ -21878,7 +22360,7 @@ declare class RibbonFontControlsComponent {
21878
22360
  */
21879
22361
  protected readonly fontGroups: _angular_core.Signal<FontCatalogGroup[]>;
21880
22362
  protected readonly fontSizes: readonly number[];
21881
- protected readonly fontColorPresets: string[];
22363
+ protected readonly fontColorPresets: readonly string[];
21882
22364
  protected readonly highlightColorPresets: string[];
21883
22365
  protected readonly charSpacingOptions: {
21884
22366
  labelKey: string;
@@ -21895,6 +22377,8 @@ declare class RibbonFontControlsComponent {
21895
22377
  protected curFontSize(): number;
21896
22378
  /** Current font colour of the selection (for the swatch + active-state ring). */
21897
22379
  protected curColor(): string;
22380
+ /** Current font colour's theme ref, if any (highlights the matching theme swatch). */
22381
+ protected curColorRef(): PptxThemeColorRef | undefined;
21898
22382
  /** Current highlight colour of the selection (for the swatch + active-state ring). */
21899
22383
  protected curHighlight(): string;
21900
22384
  /** Current character spacing of the selection (for dropdown state). */
@@ -21903,7 +22387,10 @@ declare class RibbonFontControlsComponent {
21903
22387
  protected setCharSpacing(event: Event): void;
21904
22388
  protected setChangeCase(event: Event): void;
21905
22389
  protected toggleStyle(key: 'bold' | 'italic' | 'underline' | 'strikethrough'): void;
22390
+ /** Preset/recent/custom pick: always clears any previously-stored theme ref. */
21906
22391
  protected setColor(color: string): void;
22392
+ /** Theme-swatch pick: commits BOTH the resolved hex and the ref. */
22393
+ protected setColorRef(commit: ThemeColorPickerCommit): void;
21907
22394
  protected setHighlight(highlightColor: string): void;
21908
22395
  protected setFontFamily(event: Event): void;
21909
22396
  protected setFontSize(event: Event): void;
@@ -22217,6 +22704,15 @@ declare class RibbonReviewSectionComponent {
22217
22704
  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>;
22218
22705
  }
22219
22706
 
22707
+ /**
22708
+ * The ribbon's Group-button decision for one slide: needs an editable deck,
22709
+ * two or more selected ids (`canGroupSelection`'s own count gate), and
22710
+ * `a:spLocks/@noGrp` allowing every one of them (`group-lock-guard.ts`'s
22711
+ * `canGroupSelected`, the same check `EditorStateService.groupSelected`
22712
+ * enforces on the command itself). Pulled out of the component's `canGroup`
22713
+ * computed so it is testable without an Angular injection context.
22714
+ */
22715
+ declare function resolveRibbonCanGroup(canEdit: boolean, ids: readonly string[], slide: PptxSlide | undefined): boolean;
22220
22716
  declare class RibbonShapeExtrasComponent {
22221
22717
  protected readonly editor: EditorStateService;
22222
22718
  readonly slideIndex: _angular_core.InputSignal<number>;
@@ -22579,9 +23075,18 @@ declare function asMediaElement(el: PptxElement): MediaPptxElement | undefined;
22579
23075
  */
22580
23076
  declare function resolveMediaSrc(el: MediaPptxElement, mediaDataUrls: Map<string, string>): string | undefined;
22581
23077
  /**
22582
- * Build a media-fragment URI component (`#t=start,end`) for trimmed media.
22583
- * Times are stored in milliseconds; the fragment uses seconds. Mirrors React's
22584
- * `buildTrimFragment`.
23078
+ * Build a media-fragment URI component (`#t=start`) for a trimmed clip's
23079
+ * start point. Times are stored in milliseconds; the fragment uses seconds.
23080
+ * Mirrors React's `buildTrimFragment`.
23081
+ *
23082
+ * G19/G20: `el.trimEndMs` is `p14:trim/@end`'s own on-the-wire unit, the
23083
+ * DISTANCE in milliseconds from the clip's END (COM-verified; see
23084
+ * `PptxHandlerRuntimeMediaParsingUtils.ts`), not an absolute stop time. The
23085
+ * Media Fragments URI spec only accepts an absolute `end`, which cannot be
23086
+ * computed here (the clip's real duration is unknown before the browser
23087
+ * fetches this very `src`). An earlier version emitted `trimEndMs` directly
23088
+ * as if it already were that absolute position - exactly backwards. Trim-end
23089
+ * enforcement is `scheduleMediaTrimAndFade`'s job, not this fragment's.
22585
23090
  */
22586
23091
  declare function buildTrimFragment(el: MediaPptxElement): string;
22587
23092
  /** A caption track resolved to a `<track>`-ready `src`. */
@@ -23177,6 +23682,6 @@ declare function thumbnailHeight(canvasW: number, canvasH: number, thumbW: numbe
23177
23682
  */
23178
23683
  declare function gridColumns(containerW: number, thumbW: number, gap: number, maxCols: number): number;
23179
23684
 
23180
- export { AFTER_ANIMATION_VALUES, ALIGN_OPTIONS, ANIMATION_PRESET_CATEGORIES, AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AVATAR_COLOR_SWATCHES, AXIS_LABEL_COLOR, AccessibilityPanelComponent, AccessibilityService, AccountPageComponent, ActionSettingsPanelComponent, AdvancedChartEditorComponent, AiChangeOverlayComponent, AiChatPanelComponent, AiChatService, AiComposerComponent, AiFocusBarComponent, AiFocusHighlightOverlayComponent, AiHistoryMenuComponent, AiHistoryService, AiMessageListComponent, AiPanelStore, AiProposalCardComponent, AiSettingsSectionComponent, AiToolCallCardComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, AutosaveRecoveryDialogComponent, AutosaveService, BroadcastDialogComponent, CHART_EDITOR_STYLES, CURSOR_PALETTE, CanvasFitService, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointMarkerOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartElementViewComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartPartSelectionService, ChartPrimitivesComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, ChartTypeSelectorComponent, CollaborationCursorsComponent, CollaborationService, ColorChangedImageComponent, CommentMarkersOverlayComponent, CommentsPanelComponent, CommentsService, ComparePanelComponent, ConnectorRendererComponent, ConnectorTextOverlayComponent, CustomShowsComponent, DEFAULT_BOUNDS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_COLOR_SCHEME, DEFAULT_FILL_COLOR, DEFAULT_LAYOUT, DEFAULT_PALETTE$1 as DEFAULT_PALETTE, DEFAULT_PATTERN_FILL_PRESET, DEFAULT_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_STYLE, DEFAULT_TABLE_ROW_HEIGHT, DEFAULT_TEXT_COLOR, DEFAULT_VIEWER_PROFILE, DIRECTIONAL_PRESETS, DIRECTION_OPTIONS, DocumentPropertiesCardComponent, EMBEDDED_FONTS_STYLE_ID, EMPHASIS_PRESETS, ENTRANCE_PRESETS, TEMPLATES as EQUATION_TEMPLATES, EXIT_PRESETS, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportProgressModalComponent, ExportService, FieldContextService, FindBarComponent, FindReplaceBarComponent, FollowModeBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GALLERY_THEME_PRESETS, GOOGLE_WEBFONTS_LINK_ID, GRIDLINE_COLOR, GoogleWebfontsService, GradientPickerComponent, HANDOUT_OPTIONS, HeaderFooterDialogComponent, HyperlinkDialogComponent, ImagePropertiesPanelComponent, InkDrawingService, InkRendererComponent, InsertSmartArtDialogComponent, InspectorPaneHeaderComponent, InspectorPanelComponent, IsMobileService, KeepAnnotationsDialogComponent, LOCALE_CATALOG, LONG_PRESS_DURATION_MS, LONG_PRESS_MOVE_TOLERANCE_PX, LoadContentService, LocalPresencePublisher, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MOTION_PATH_COLUMNS, MediaPreviewComponent, MediaPropertiesPanelComponent, MediaRendererComponent, MediaTrimTimelineComponent, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesHandoutCardComponent, NotesPanelComponent, NotesToolbarComponent, OleRendererComponent, OutlineViewOverlayComponent, POWER_POINT_VIEWER_PROVIDERS, PPTX_OPEN_ACCEPT, PRESENTATION_OPEN_EXTENSIONS, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PRESENTER_TIMER_SEGMENT_MS, PX_PER_CM, PX_PER_INCH, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentToolbarAutoHide, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationPropertiesPanelComponent, PresentationSettingsCardComponent, PresentationSubtitleBarComponent, PresentationToolbarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, REPEAT_MODE_OPTIONS, RESIZE_HANDLES, RULER_FONT_SIZE, RULER_THICKNESS, ReadingViewOverlayComponent, RemoteSelectionOverlayComponent, RibbonAnimationGalleryComponent, RibbonAnimationsSectionComponent, RibbonArrangeSectionComponent, RibbonColorPopoverComponent, RibbonComponent, RibbonDesignSectionComponent, RibbonDrawSectionComponent, RibbonDrawingGroupComponent, RibbonEditingSectionComponent, RibbonFileSectionComponent, RibbonFontControlsComponent, RibbonHomeSectionComponent, RibbonHyperlinkButtonComponent, RibbonInsertFieldsComponent, RibbonInsertSectionComponent, RibbonMotionPathGalleryComponent, RibbonParagraphControlsComponent, RibbonPrimaryRowComponent, RibbonReviewSectionComponent, RibbonShapeExtrasComponent, RibbonSlideshowSectionComponent, RibbonTransitionsSectionComponent, RibbonViewSectionComponent, RulerGuidesService, SEQUENCE_OPTIONS, SEVERITY_GROUPS, SEVERITY_LABELS, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, DEFAULT_PALETTE as SMARTART_DEFAULT_PALETTE, PALETTES as SMARTART_PALETTES, SMART_ART_COLOR_SCHEMES, SMART_ART_STYLE_OPTIONS, SUB_ITEM_LABEL, SVG_WARP_PRESETS, SWIPE_MAX_VERTICAL_PX, SWIPE_THRESHOLD_PX, SelectionPaneComponent, SetUpSlideShowDialogComponent, SettingsAppearanceTabComponent, SettingsDialogComponent, SettingsLanguageTabComponent, ShareDialogComponent, ShortcutPanelComponent, ShowOptionsFieldsetComponent, ShowSlidesFieldsetComponent, SignatureStrippedDialogComponent, SignaturesPanelComponent, SignaturesService, SlideBackgroundCardComponent, SlideCanvasComponent, SlideDefaultInspectorComponent, SlideDiffChangesComponent, SlideDiffRowComponent, SlideDiffThumbnailsComponent, SlideSizeCardComponent, SlideSorterOverlayComponent, SlideThemeOverridePanelComponent, SlideTransitionCardComponent, SlidesPanelComponent, SmartArt3DRendererComponent, SmartArt3DService, SmartArtPreviewComponent, SmartArtPropertiesComponent, SmartArtRendererComponent, StatusBarComponent, TABLE_STRUCTURE_TOGGLES, TEXT_3D_BOTTOM_BEVEL_KEYS, TEXT_3D_TOP_BEVEL_KEYS, TEXT_DIRECTION_OPTIONS, THEME_CATALOG, TIMING_CURVE_OPTIONS, TRIGGER_OPTIONS, TYPE_LABELS, TableCellAdvancedFillComponent, TableCellFormattingComponent, TableDataEditorComponent, TablePropertiesComponent, TableRendererComponent, TableResizeOverlayComponent, TableSelectionService, TagsCardComponent, Text3DBevelSectionComponent, Text3DPanelComponent, TextAdvancedPanelComponent, ThemeEditorFieldsComponent, ThemeGalleryComponent, ThemeSelectorCardComponent, TitleBarComponent, TitleBarSearchComponent, TransitionDirectionPickerComponent, TransitionPreviewComponent, VALIGN_OPTIONS, VIEWER_THEME, VersionHistoryPanelComponent, ViewerCanvasEditingService, ViewerCollabCursorService, ViewerCollaborationSessionService, ViewerCompareService, ViewerCustomShowsService, ViewerDialogsService, ViewerDocumentPropertiesService, ViewerExportService, ViewerExtraDialogsComponent, ViewerFileIOService, ViewerFindReplaceService, ViewerFormatPainterService, ViewerInspectorPanelService, ViewerKeyboardService, ViewerMobileSheetService, ViewerPresentationModeService, ViewerThemeGalleryService, ViewerTouchGesturesService, ViewerZoomService, WEBM_MIME_CANDIDATES, WriteBackScheduler, ZERO_LINE_COLOR, ZoomNavigationService, ZoomRendererComponent, ZoomTargetService, addCategory, addCommentToList, addGradientStopPatch, addItem, addSeries, addSubItem, advanceStep, affordanceElements, aiToggleVisible, alignPatch, animationFor, animationPresetLabelKey, annotationMapToInkInserts, applyAcceptedDiff, applyAnimationPreset, applyFindReplacements, applyFormatToElement, applyMove, applyResize, asMediaElement, assignUserColor, attachShowVisibilityPause, attachTouchGestures, axisTickValues, beginNodeEdit, bevelSizePatch, boolFromEvent, bringForward, bringToFront, buildBarActions, buildBroadcastConfig, buildBroadcastViewerUrl, buildCategoryLabels, buildCellParagraphs, buildChartViewModel, buildChatLogExport, buildChatLogMarkdown, buildChromeStyle, buildClearHyperlinkPatch, buildClickGroups, buildColStyles, buildCollaborationConfig, buildComboViewModel, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildEquationElement, buildEquationSegment, buildFallbackViewModel, buildFontFaceRule, buildGradientFillCss, buildGridlinesAndLabels, buildHyperlinkPatch, buildInkContainerStyle, buildInkStrokes, buildLegend, buildMarkTooltip, buildModel3DContainerStyle, buildModel3DViewModel, buildOleActionModel, buildOleInfoRows, buildPatternFillCss, buildPieViewModel, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildRadarViewModel, buildRegionMapViewModel, buildSaveSlides, buildShareUrl, buildSmartArtInsertElement, buildSmartArtNodes, buildStockViewModel, buildSurfaceViewModel, buildTableViewModel, buildTreemapViewModel, buildTrimFragment, buildWaterfallViewModel, buildZeroLine, buildZoomContainerStyle, buildZoomViewModel, bulletIndentPx, canAddTopLevelNode, canGroupSelection, canRemoveTopLevelNode, canSetStrokeWidth, canStartBroadcast, canStartShare, canUngroupSelection, canUseClipboard, captionDisplayText, cellRunStyle, cellStyleToStyleMap, cellTdStyle, changeCountLabel, changeIcon, characterSpacingPatch, chartPreserveAspectRatio, checkFontAvailable, clampCursorPosition, clampGifDimensions, clampIndex, clampNotesFontSize, clampScale, clampStep, clearAllLocalViewerData, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, collectStoredChats, collectUsedFontFamilies, columnWidthStyle, commitNodeText, computeAlign, computeAxisTitlePrimitives, computeBarRects, computeBubbleRadius, computeCornerHandle, computeDistribute, computeDrawingViewBox, computeErrorBarPrimitives, computeFocusTargets, computeGridSpacingPx, computeHandleBoxes, computeHandoutLayout, computeIsMobile, computeIsTablet, computeLinePoints, computeLinearRegression, computePageCount, computePieLayout, computePieSlicePath, computePieSlices, computePlotLayout, computeRSquared, computeRadarPoints, computeResizeHandleBoxes, computeRotateHandleBox, computeScatterDots, computeScatterXDomain, computeSelectionBoxes, computeSingleSelected, computeSlideIndices, computeSnap, computeStackedBarRects, computeStackedValueRange, computeTrendlinePrimitives, computeValueRange, convertOmmlToMathMl, copyFormatFromElement, countAccessibilityIssues, countAnnotationStrokes, createAngularAiBridge, createCustomShow, createSwipeDismissDrag, createWebrtcBundle, createWebsocketBundle, cssObjectToStyleMap, currentColorScheme, currentLayout, currentStyle, defaultCssVars, defaultRadius, defaultThemeColors, deleteElementsByIds, deleteVersion as deleteRecoveryVersion, demoteNode, deriveModel3DBlobUrl, derivePresenceList, describeSmartArtBounds, disableGlowPatch, disableInnerShadowPatch, disableOuterShadowPatch, disableReflectionPatch, disableSoftEdgePatch, duplicateElementById, durationOf, effectsStateOf, enableGlowPatch, enableInnerShadowPatch, enableOuterShadowPatch, enableReflectionPatch, enableSoftEdgePatch, encodeGif, endShowMediaCleanup, estimatePageCount, exitPresentationFullscreen, exportAiChatLogs, extractPathPoints, eyedropperAvailable, fillColorOf, findInSlides, findOwningSlideIndex, findSlideIndexByElementId, firstVisibleIndex, fitPolynomial, fitZoom, focusTargetChips, fontMimeForFormat, fontSizeOf, forgetSessionDeck, formatAxisValue, formatBytes, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, generateCustomShowId, generatePressureCircles, generateTicks, getClrChangeParams, getContainerStyle, getDuotoneFilterDef, getEffectSoundState, getImageSrc, getLocalStorageUsageSummary, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDownloadFileName, getOleTypeColor, getOleTypeLabel, getPasswordStrength, getPatternSvg, getPlaceholderStyle, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getSessionTabId, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getSmartArtNodeBounds, getSpeechRecognitionCtor, getTextBlockStyle, getTextWarp, getTouchDistance, getWarpCategory, getWarpPath, gradientStateFromStyle, gradientStateOf, gradientStatePatch, gridColumns, groupIssuesBySeverity, hasAnimation, hasCopyableFormat, hasExistingLink, hasExitedFullscreen, hasGradientFill, hasPressureVariation, hasVisibleSlideAfter, headerLabel, imageDimensions, inkViewBox, insertTableElementColumn as insertColumn, insertTableElementRow as insertRow, interpolateWidth, isAudienceTab, isBold, isBrowserOpenableMime, isChildNode, isElementInteractive, isInjectableUrl, isItalic, isLegacyBinaryPresentation, isPpactionUrl, isPresenterMessage, isSigned, isSupportedPresentationFile, isTextElement, isTwoTableFocus, isUnderline, isUrlSafe, isValidRoomId, isViewportBackgroundPressTarget, isZoomActivationKey, issueTrackKey, issueTypeLabel, keyToLabel, lastVisibleIndex, latexToMathml, layoutConnectorPaints, layoutNodeLabels, linePointsToSvgString, lineSpacingPatch, loadAudienceContent, loadSessionDeck, mediaFallbackFor, mediaSurfaceFor, mergeCaptionResults, mergeDown, mergeRight, mergeSelection, mergeTablesDirective, moveElementBy, moveNodeDown, moveNodeUp, msToFrameDelayCs, narrowToCircle, narrowToPolygon, narrowToRect, newChartElement, newEquationElement, newPresetShapeElement, newShapeElement, newSmartArtElement, newTableElement, newTextElement, nextVisibleIndex, nodeBold, nodeEditBox, nodeFillColor, nodeFontColor, nodeIdFromKey, nodeItalic, nodeStyle, normalizeFontFormat, normalizeSlidesPerPage, normalizeValue, numFromEvent, ommlToMathml, ooxmlDashToCssBorderStyle, openNativeEyeDropper, overallStatus, paletteColor, parseAudienceNonce, parseNodeTextarea, partitionSlides, patchChartData, patchChartStyle, patchTableData, patchTextStyle, patternPresetOptions, pendingElementStyles, pickColorByClickFallback, pickFile, pickSupportedMimeType, planGifFrames, planVideoSegments, pointsToSvgPathD, presenceToCursors, presentationBaseName, presentationStageStyle, presenterTimerProgress, presetByLayout, presetsForCategory, pressuresToWidths, prevVisibleIndex, projectDrawingShapes, promoteNode, provideViewerTheme, radarAngle, radarRingPoints, readAsDataUrl, recordWebm, registerCrossSlideAudio, rememberSessionDeck, removeAnimation, removeCategory, removeTableElementColumn as removeColumn, removeCommentFromList, removeElementAnimation, removeGradientStopPatch, removeNode, removeTableElementRow as removeRow, removeSeries, renderToCanvas, reorderAnimationDown, reorderAnimationUp, replaceInSlides, replaceMatch, requestPresentationFullscreen, resizeElement, resolveCaptionTracks, resolveChartKind, resolveFontVariant, resolveHyperlinkHref, resolveInteractiveElementId, resolveMediaSrc, resolveOleType, resolveParagraphBullet, resolvePresenterNotes, resolveProfileInitial, resolveRegionCode, resolveSlideAutoAdvanceMs, resolvePalette as resolveSmartArtPalette, resolveThemeCatalogEntry, resolveTransitionDuration, restoreSessionDeck, revealedElementStyles, routeOrthogonalConnector, rowStyle, rulerDragToGuidePosition, rulerHighlight, rulerStripTicks, sampleColorFromSlide, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, saveViewerProfile, savedPresentationFileName, scanAvailableFonts, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, selectValue, sendBackward, sendToBack, sequentialColorScale, serializeWriteBack, seriesColor, setAfterAnimation, setAfterAnimationColor, setAnimationEmphasis, setAnimationEntrance, setAnimationExit, setAxis, setAxisLogScale, setAxisTitleStyle, setCategoryLabel, setCellText, setColorScheme, setDataLabels, setDataPointExplosion, setDataPointFill, setDataPointLabel, setDataPointMarker, setDelay, setDirection, setDuration, setEffectSound, setElementPosition, setGridlineStyle, setLayout, setLegend, setNodeStyle, setNodeText, setRepeatCount, setRepeatMode, setSequence, setSeriesChartType, setSeriesColor, setSeriesErrorBars, setSeriesMarker, setSeriesName, setSeriesTrendline, setSeriesValue, setStyle, setTimingCurve, setTitle, setTrigger, setTriggerShapeId, shapeStylePatch, sheetAfterNavigate, shouldBlockClickAdvance, shouldUseSvgWarp, showDirectionPicker, showsTemplateAffordance, signatureCountLabel, signatureKey, signatureTimestamp, signerName, statusLabel as slideDiffStatusLabel, slideNumberOf, slidesWithReappliedLayout, smartArtNodes, paletteColour as smartArtPaletteColour, snapToGridStep, splitCursorCell, splitMergedCell, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, stringFromEvent, strokeColorOf, strokeToInkElement, strokeWidthOf, styleShadowFilter, surfaceColor, textAdvancedPatch, textAdvancedStateFromStyle, textAdvancedStateOf, textColorOf, textDirectionPatch, textFontSizePatch, textStyleOf, textStylePatch, themeStyle, themeToCssVars, thumbnailHeight, thumbnailZoom, toggleCommentResolvedInList, toggleNodeBold, toggleNodeItalic, toggleSheet, topLevelNodeCount, transformSelectedTextCase, translationsEn, updateElementById, updateGlowPatch, updateGradientStopPatch, updateInnerShadowPatch, updateOuterShadowPatch, updateReflectionPatch, vAlignPatch, validatePassword, validatePrintSettings, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, waypointsToPathD, withManualLayouts, worstStatus, zoomTargetSlideIndex };
23181
- export type { AccessibilityIssueGroup, AccountAuthConfig, ActionDescriptor, ActiveShow, AiCanvasHighlight, AiChatInitState, AiHistoryInitDeps, AiLogChat, AiLogExport, AiLogFormat, AiLogMessage, AiPanelSelectionAccessors, AlignBox, AlignMode, AnimationClickGroup, AnimationGroup, AnimationPresetCategory, AnimationPresetEntry, AnimationPresetPick, AnnotationInkInsert, AnnotationStroke, AttachTouchGesturesConfig, AuthoredRange, AwarenessLike, BarRect, Box, BridgeDeps, BroadcastConfig, BroadcastDefaults, 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, EffectSoundState, EffectsState, EmbeddedFontStyles, EquationTemplate, EyedropperResult, FindOptions, FindResult, FocusChip, FocusSelectionInput, GifFrame, GifFramePlan, GifPlanOptions, GlowState, GradientState, GradientStop$1 as GradientStop, HandleBox, HandoutSlidesPerPage, HyperlinkDraft, InkPoint, InkStroke, InlineEditState, InnerShadowState, LegendEntry, LinePoint, LinearFit, LocalIdentity, LocalStorageUsageSummary, LocaleCatalogEntry, MobileSheetKey, Model3DViewModel, MotionPathColumn, MotionPathEntry, NodeEditBox, NotesSegmentViewModel, ObjectUrlFactory, OleActionModel, OleInfoRow, OuterShadowState, OutlineCommit, OverallSignatureStatus, PartitionedSlides, PathPoint, PieSliceGeometry, PieSliceOptions, PlotLayout, PlotLayoutOptions, PositionUpdate, PowerPointViewerAPI, PptxAiBridge, PptxAiConfig, PptxAiConnection, PptxAiContextStrategy, PptxAiElementUpdate, PptxAiToolName, PptxAiUIMessage, PptxAiWritePolicy, PresentToolbarAction, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, PresenterTimerProgress, PressureCircle, PrintColorMode, PrintHtmlDocumentOptions as PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, ProposalView, ProviderBundle, ProviderLike, RadarPoint, RecordWebmOptions, RecoveryVersion, ReflectionState, RemoteCursor, SanitizedPresence as RemotePresence, RenderedShape, ReplaceResult, ResizeHandle, ResolvedCaptionTrack, ResolvedFontVariant, ResolvedOleType, RulerUnit, SavedPresentationFormat, ScatterDot, ScatterXDomain, SelectionBox, SessionDeck, ShapeStyleChanges, ShareDefaults$1 as ShareDefaults, ShareFormFields, ShortcutReferenceItem, SignatureStatusKind, SlideInspectorTab, SlideTransitionAnimations, SmartArtInsertEvent, SmartArtNodeBounds, SnapBox, SnapGuide, SnapResult, SoftEdgeState, SpeechAlternative, SpeechRecognitionCtor, SpeechRecognitionEventLite, SpeechRecognitionLite, SpeechResult, SpeechResultList, SpeechSupportState, StagedProposal, StrokeToInkElementOpts, StyleMap, SupportedChartKind, SvgAreaGradient, SvgCircle, SvgLine, SvgPath, SvgPolygon, SvgPolyline, SvgPrimitive, SvgRect, SvgText, SwipeDismissDrag, TableBooleanFlag, TableCellSelection, TableCellViewModel, TableRowViewModel, TemplateElementsBySlideId, Text3DBevelKeys, TextAdvancedChanges, TextAdvancedState, TextStyleChanges, TextWarpCssDef, TextWarpDef, TextWarpPathDef, ThemeCatalogEntry, Tick, ToolbarActionId, TouchGestureCallbacks, TranslationKey, ValueRange, VideoPlanOptions, VideoSegmentPlan, ViewerMode, ViewerProfile, ViewerSettings, ViewerTheme, ViewerThemeColors, ZoomTranslate, ZoomViewModel };
23685
+ export { AFTER_ANIMATION_VALUES, ALIGN_OPTIONS, ANIMATION_PRESET_CATEGORIES, AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AVATAR_COLOR_SWATCHES, AXIS_LABEL_COLOR, AccessibilityPanelComponent, AccessibilityService, AccountPageComponent, ActionSettingsPanelComponent, AdvancedChartEditorComponent, AiChangeOverlayComponent, AiChatPanelComponent, AiChatService, AiComposerComponent, AiFocusBarComponent, AiFocusHighlightOverlayComponent, AiHistoryMenuComponent, AiHistoryService, AiMessageListComponent, AiPanelStore, AiProposalCardComponent, AiSettingsSectionComponent, AiToolCallCardComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, AutosaveRecoveryDialogComponent, AutosaveService, BroadcastDialogComponent, CHART_EDITOR_STYLES, CURSOR_PALETTE, CanvasFitService, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointMarkerOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartElementViewComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartPartSelectionService, ChartPrimitivesComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, ChartTypeSelectorComponent, CollaborationCursorsComponent, CollaborationService, ColorChangedImageComponent, CommentMarkersOverlayComponent, CommentsPanelComponent, CommentsService, ComparePanelComponent, ConnectorRendererComponent, ConnectorTextOverlayComponent, CustomShowsComponent, DEFAULT_BOUNDS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_COLOR_SCHEME, DEFAULT_FILL_COLOR, DEFAULT_LAYOUT, DEFAULT_PALETTE$1 as DEFAULT_PALETTE, DEFAULT_PATTERN_FILL_PRESET, DEFAULT_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_STYLE, DEFAULT_TABLE_ROW_HEIGHT, DEFAULT_TEXT_COLOR, DEFAULT_VIEWER_PROFILE, DIRECTIONAL_PRESETS, DIRECTION_OPTIONS, DocumentPropertiesCardComponent, EMBEDDED_FONTS_STYLE_ID, EMPHASIS_PRESETS, ENTRANCE_PRESETS, TEMPLATES as EQUATION_TEMPLATES, EXIT_PRESETS, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportProgressModalComponent, ExportService, FieldContextService, FindBarComponent, FindReplaceBarComponent, FollowModeBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GALLERY_THEME_PRESETS, GOOGLE_WEBFONTS_LINK_ID, GRIDLINE_COLOR, GoogleWebfontsService, GradientPickerComponent, HANDOUT_OPTIONS, HeaderFooterDialogComponent, HyperlinkDialogComponent, ImagePropertiesPanelComponent, InkDrawingService, InkRendererComponent, InsertSmartArtDialogComponent, InspectorPaneHeaderComponent, InspectorPanelComponent, IsMobileService, KeepAnnotationsDialogComponent, LOCALE_CATALOG, LONG_PRESS_DURATION_MS, LONG_PRESS_MOVE_TOLERANCE_PX, LoadContentService, LocalPresencePublisher, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MOTION_PATH_COLUMNS, MediaPreviewComponent, MediaPropertiesPanelComponent, MediaRendererComponent, MediaTrimTimelineComponent, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesHandoutCardComponent, NotesPanelComponent, NotesToolbarComponent, OleRendererComponent, OutlineViewOverlayComponent, POWER_POINT_VIEWER_PROVIDERS, PPTX_OPEN_ACCEPT, PRESENTATION_OPEN_EXTENSIONS, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PRESENTER_TIMER_SEGMENT_MS, PX_PER_CM, PX_PER_INCH, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentToolbarAutoHide, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationPropertiesPanelComponent, PresentationSettingsCardComponent, PresentationSubtitleBarComponent, PresentationToolbarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, REPEAT_MODE_OPTIONS, RESIZE_HANDLES, RULER_FONT_SIZE, RULER_THICKNESS, ReadingViewOverlayComponent, RemoteSelectionOverlayComponent, RibbonAnimationGalleryComponent, RibbonAnimationsSectionComponent, RibbonArrangeSectionComponent, RibbonColorPopoverComponent, RibbonComponent, RibbonDesignSectionComponent, RibbonDrawSectionComponent, RibbonDrawingGroupComponent, RibbonEditingSectionComponent, RibbonFileSectionComponent, RibbonFontControlsComponent, RibbonHomeSectionComponent, RibbonHyperlinkButtonComponent, RibbonInsertFieldsComponent, RibbonInsertSectionComponent, RibbonMotionPathGalleryComponent, RibbonParagraphControlsComponent, RibbonPrimaryRowComponent, RibbonReviewSectionComponent, RibbonShapeExtrasComponent, RibbonSlideshowSectionComponent, RibbonTransitionsSectionComponent, RibbonViewSectionComponent, RulerGuidesService, SEQUENCE_OPTIONS, SEVERITY_GROUPS, SEVERITY_LABELS, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, DEFAULT_PALETTE as SMARTART_DEFAULT_PALETTE, PALETTES as SMARTART_PALETTES, SMART_ART_COLOR_SCHEMES, SMART_ART_STYLE_OPTIONS, SUB_ITEM_LABEL, SVG_WARP_PRESETS, SWIPE_MAX_VERTICAL_PX, SWIPE_THRESHOLD_PX, SelectionPaneComponent, SetUpSlideShowDialogComponent, SettingsAppearanceTabComponent, SettingsDialogComponent, SettingsLanguageTabComponent, ShareDialogComponent, ShortcutPanelComponent, ShowOptionsFieldsetComponent, ShowSlidesFieldsetComponent, SignatureStrippedDialogComponent, SignaturesPanelComponent, SignaturesService, SlideBackgroundCardComponent, SlideCanvasComponent, SlideDefaultInspectorComponent, SlideDiffChangesComponent, SlideDiffRowComponent, SlideDiffThumbnailsComponent, SlideSizeCardComponent, SlideSorterOverlayComponent, SlideThemeOverridePanelComponent, SlideTransitionCardComponent, SlidesPanelComponent, SmartArt3DRendererComponent, SmartArt3DService, SmartArtPreviewComponent, SmartArtPropertiesComponent, SmartArtRendererComponent, StatusBarComponent, TABLE_STRUCTURE_TOGGLES, TEXT_3D_BOTTOM_BEVEL_KEYS, TEXT_3D_TOP_BEVEL_KEYS, TEXT_DIRECTION_OPTIONS, THEME_CATALOG, TIMING_CURVE_OPTIONS, TRIGGER_OPTIONS, TYPE_LABELS, TableCellAdvancedFillComponent, TableCellFormattingComponent, TableDataEditorComponent, TablePropertiesComponent, TableRendererComponent, TableResizeOverlayComponent, TableSelectionService, TagsCardComponent, Text3DBevelSectionComponent, Text3DPanelComponent, TextAdvancedPanelComponent, ThemeEditorFieldsComponent, ThemeGalleryComponent, ThemeSelectorCardComponent, TitleBarComponent, TitleBarSearchComponent, TransitionDirectionPickerComponent, TransitionPreviewComponent, VALIGN_OPTIONS, VIEWER_THEME, VersionHistoryPanelComponent, ViewerCanvasEditingService, ViewerCollabCursorService, ViewerCollaborationSessionService, ViewerCompareService, ViewerCustomShowsService, ViewerDialogsService, ViewerDocumentPropertiesService, ViewerExportService, ViewerExtraDialogsComponent, ViewerFileIOService, ViewerFindReplaceService, ViewerFormatPainterService, ViewerInspectorPanelService, ViewerKeyboardService, ViewerMobileSheetService, ViewerPresentationModeService, ViewerThemeGalleryService, ViewerTouchGesturesService, ViewerZoomService, WEBM_MIME_CANDIDATES, WriteBackScheduler, ZERO_LINE_COLOR, ZoomNavigationService, ZoomRendererComponent, ZoomTargetService, addCategory, addCommentToList, addGradientStopPatch, addItem, addSeries, addSubItem, advanceStep, affordanceElements, aiToggleVisible, alignPatch, animationFor, animationPresetLabelKey, annotationMapToInkInserts, applyAcceptedDiff, applyAnimationPreset, applyFindReplacements, applyFormatToElement, applyMove, applyResize, asMediaElement, assignUserColor, attachShowVisibilityPause, attachTouchGestures, axisTickValues, beginNodeEdit, bevelSizePatch, boolFromEvent, bringForward, bringToFront, buildBarActions, buildBroadcastConfig, buildBroadcastViewerUrl, buildCategoryLabels, buildCellParagraphs, buildChartViewModel, buildChatLogExport, buildChatLogMarkdown, buildChromeStyle, buildClearHyperlinkPatch, buildClickGroups, buildColStyles, buildCollaborationConfig, buildComboViewModel, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildEquationElement, buildEquationSegment, buildFallbackViewModel, buildFontFaceRule, buildGradientFillCss, buildGridlinesAndLabels, buildHyperlinkPatch, buildInkContainerStyle, buildInkStrokes, buildLegend, buildMarkTooltip, buildModel3DContainerStyle, buildModel3DViewModel, buildOleActionModel, buildOleInfoRows, buildPatternFillCss, buildPieViewModel, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildRadarViewModel, buildRegionMapViewModel, buildSaveSlides, buildShareUrl, buildSmartArtInsertElement, buildSmartArtNodes, buildStockViewModel, buildSurfaceViewModel, buildTableViewModel, buildTreemapViewModel, buildTrimFragment, buildWaterfallViewModel, buildZeroLine, buildZoomContainerStyle, buildZoomViewModel, bulletIndentPx, canAddTopLevelNode, canEditSmartArtNodes, canGroupSelection, canRemoveTopLevelNode, canSetStrokeWidth, canStartBroadcast, canStartShare, canUngroupSelection, canUseClipboard, captionDisplayText, cellRunStyle, cellStyleToStyleMap, cellTdStyle, changeCountLabel, changeIcon, characterSpacingPatch, chartPreserveAspectRatio, checkFontAvailable, clampCursorPosition, clampGifDimensions, clampIndex, clampNotesFontSize, clampScale, clampStep, clearAllLocalViewerData, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, collectStoredChats, collectUsedFontFamilies, columnWidthStyle, commitNodeText, computeAlign, computeAxisTitlePrimitives, computeBarRects, computeBubbleRadius, computeCornerHandle, computeDistribute, computeDrawingViewBox, computeErrorBarPrimitives, computeFocusTargets, computeGridSpacingPx, computeHandleBoxes, computeHandoutLayout, computeIsMobile, computeIsTablet, computeLinePoints, computeLinearRegression, computePageCount, computePieLayout, computePieSlicePath, computePieSlices, computePlotLayout, computeRSquared, computeRadarPoints, computeResizeHandleBoxes, computeRotateHandleBox, computeScatterDots, computeScatterXDomain, computeSelectionBoxes, computeSingleSelected, computeSlideIndices, computeSnap, computeStackedBarRects, computeStackedValueRange, computeTrendlinePrimitives, computeValueRange, convertOmmlToMathMl, copyFormatFromElement, countAccessibilityIssues, countAnnotationStrokes, createAngularAiBridge, createCustomShow, createSwipeDismissDrag, createWebrtcBundle, createWebsocketBundle, cssObjectToStyleMap, currentColorScheme, currentLayout, currentStyle, defaultCssVars, defaultRadius, defaultThemeColors, deleteElementsByIds, deleteVersion as deleteRecoveryVersion, demoteNode, deriveModel3DBlobUrl, derivePresenceList, describeSmartArtBounds, disableGlowPatch, disableInnerShadowPatch, disableOuterShadowPatch, disableReflectionPatch, disableSoftEdgePatch, duplicateElementById, durationOf, effectsStateOf, enableGlowPatch, enableInnerShadowPatch, enableOuterShadowPatch, enableReflectionPatch, enableSoftEdgePatch, encodeGif, endShowMediaCleanup, estimatePageCount, exitPresentationFullscreen, exportAiChatLogs, extractPathPoints, eyedropperAvailable, fillColorOf, findInSlides, findOwningSlideIndex, findSlideIndexByElementId, firstVisibleIndex, fitPolynomial, fitZoom, focusTargetChips, fontMimeForFormat, fontSizeOf, forgetSessionDeck, formatAxisValue, formatBytes, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, generateCustomShowId, generatePressureCircles, generateTicks, getClrChangeParams, getContainerStyle, getDuotoneFilterDef, getEffectSoundState, getImageSrc, getLocalStorageUsageSummary, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDownloadFileName, getOleTypeColor, getOleTypeLabel, getPasswordStrength, getPatternSvg, getPlaceholderStyle, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getSessionTabId, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getSmartArtNodeBounds, getSpeechRecognitionCtor, getTextBlockStyle, getTextWarp, getTouchDistance, getWarpCategory, getWarpPath, gradientStateFromStyle, gradientStateOf, gradientStatePatch, gradientStopColorCommitPatch, gridColumns, groupIssuesBySeverity, hasAnimation, hasCopyableFormat, hasExistingLink, hasExitedFullscreen, hasGradientFill, hasPressureVariation, hasVisibleSlideAfter, headerLabel, imageDimensions, inkViewBox, insertTableElementColumn as insertColumn, insertTableElementRow as insertRow, interpolateWidth, isAudienceTab, isBold, isBrowserOpenableMime, isChildNode, isElementInteractive, isInjectableUrl, isItalic, isLegacyBinaryPresentation, isPpactionUrl, isPresenterMessage, isSigned, isSupportedPresentationFile, isTextElement, isTwoTableFocus, isUnderline, isUrlSafe, isValidRoomId, isViewportBackgroundPressTarget, isZoomActivationKey, issueTrackKey, issueTypeLabel, keyToLabel, lastVisibleIndex, latexToMathml, layoutConnectorPaints, layoutNodeLabels, linePointsToSvgString, lineSpacingPatch, loadAudienceContent, loadSessionDeck, mediaFallbackFor, mediaSurfaceFor, mergeCaptionResults, mergeDown, mergeRight, mergeSelection, mergeTablesDirective, moveElementBy, moveNodeDown, moveNodeUp, msToFrameDelayCs, narrowToCircle, narrowToPolygon, narrowToRect, newChartElement, newEquationElement, newPresetShapeElement, newShapeElement, newSmartArtElement, newTableElement, newTextElement, nextVisibleIndex, nodeBold, nodeEditBox, nodeFillColor, nodeFontColor, nodeIdFromKey, nodeItalic, nodeStyle, normalizeFontFormat, normalizeSlidesPerPage, normalizeValue, numFromEvent, ommlToMathml, ooxmlDashToCssBorderStyle, openNativeEyeDropper, overallStatus, paletteColor, parseAudienceNonce, parseNodeTextarea, partitionSlides, patchChartData, patchChartStyle, patchTableData, patchTextStyle, patternPresetOptions, pendingElementStyles, pickColorByClickFallback, pickFile, pickSupportedMimeType, planGifFrames, planVideoSegments, pointsToSvgPathD, presenceToCursors, presentationBaseName, presentationStageStyle, presenterTimerProgress, presetByLayout, presetsForCategory, pressuresToWidths, prevVisibleIndex, projectDrawingShapes, promoteNode, provideViewerTheme, radarAngle, radarRingPoints, readAsDataUrl, recordWebm, registerCrossSlideAudio, rememberSessionDeck, removeAnimation, removeCategory, removeTableElementColumn as removeColumn, removeCommentFromList, removeElementAnimation, removeGradientStopPatch, removeNode, removeTableElementRow as removeRow, removeSeries, renderToCanvas, reorderAnimationDown, reorderAnimationUp, replaceInSlides, replaceMatch, requestPresentationFullscreen, resizeElement, resolveCaptionTracks, resolveChartKind, resolveFontVariant, resolveHyperlinkHref, resolveInteractiveElementId, resolveMediaSrc, resolveOleType, resolveParagraphBullet, resolvePresenterNotes, resolveProfileInitial, resolveRegionCode, resolveRibbonCanGroup, resolveSlideAutoAdvanceMs, resolvePalette as resolveSmartArtPalette, resolveThemeCatalogEntry, resolveTransitionDuration, restoreSessionDeck, revealedElementStyles, routeOrthogonalConnector, rowStyle, rulerDragToGuidePosition, rulerHighlight, rulerStripTicks, sampleColorFromSlide, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, saveViewerProfile, savedPresentationFileName, scanAvailableFonts, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, selectValue, sendBackward, sendToBack, sequentialColorScale, serializeWriteBack, seriesColor, setAfterAnimation, setAfterAnimationColor, setAnimationEmphasis, setAnimationEntrance, setAnimationExit, setAxis, setAxisLogScale, setAxisTitleStyle, setCategoryLabel, setCellText, setColorScheme, setDataLabels, setDataPointExplosion, setDataPointFill, setDataPointLabel, setDataPointMarker, setDelay, setDirection, setDuration, setEffectSound, setElementPosition, setGridlineStyle, setLayout, setLegend, setNodeStyle, setNodeText, setRepeatCount, setRepeatMode, setSequence, setSeriesChartType, setSeriesColor, setSeriesErrorBars, setSeriesMarker, setSeriesName, setSeriesTrendline, setSeriesValue, setStyle, setTimingCurve, setTitle, setTrigger, setTriggerShapeId, shapeStylePatch, sheetAfterNavigate, shouldBlockClickAdvance, shouldUseSvgWarp, showDirectionPicker, showsTemplateAffordance, signatureCountLabel, signatureKey, signatureTimestamp, signerName, statusLabel as slideDiffStatusLabel, slideNumberOf, slidesWithReappliedLayout, smartArtNodes, paletteColour as smartArtPaletteColour, snapToGridStep, splitCursorCell, splitMergedCell, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, stringFromEvent, strokeColorOf, strokeToInkElement, strokeWidthOf, styleShadowFilter, surfaceColor, textAdvancedPatch, textAdvancedStateFromStyle, textAdvancedStateOf, textColorOf, textDirectionPatch, textFontSizePatch, textStyleOf, textStylePatch, themeStyle, themeToCssVars, thumbnailHeight, thumbnailZoom, toggleCommentResolvedInList, toggleNodeBold, toggleNodeItalic, toggleSheet, topLevelNodeCount, transformSelectedTextCase, translationsEn, updateElementById, updateGlowPatch, updateGradientStopPatch, updateInnerShadowPatch, updateOuterShadowPatch, updateReflectionPatch, vAlignPatch, validatePassword, validatePrintSettings, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, waypointsToPathD, withManualLayouts, worstStatus, zoomTargetSlideIndex };
23686
+ export type { AccessibilityIssueGroup, AccountAuthConfig, ActionDescriptor, ActiveShow, AiCanvasHighlight, AiChatInitState, AiHistoryInitDeps, AiLogChat, AiLogExport, AiLogFormat, AiLogMessage, AiPanelSelectionAccessors, AlignBox, AlignMode, AnimationClickGroup, AnimationGroup, AnimationPresetCategory, AnimationPresetEntry, AnimationPresetPick, AnnotationInkInsert, AnnotationStroke, AttachTouchGesturesConfig, AuthoredRange, AwarenessLike, BarRect, Box, BridgeDeps, BroadcastConfig, BroadcastDefaults, BubbleRadiusOptions, CSSProperties, CanvasSize, CellCoord, CellParagraph, CellTextRun, ChartPartRef, ChartPartSelection, ChartSvgDef, ChartSvgPatternDef, ChartValueDrag, ChartViewModel, ClassValue, ClrChangeParams, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, CornerHandleBox, CustomShow, CustomThemeEdit, DestroyableYDoc, DiagonalBorderInfo, DistributeMode, DocumentProperties, DrawingViewBox, DuotoneFilterDef, EffectSoundState, EffectsState, EmbeddedFontStyles, EquationTemplate, EyedropperResult, FindOptions, FindResult, FocusChip, FocusSelectionInput, GifFrame, GifFramePlan, GifPlanOptions, GlowState, GradientState, GradientStop$1 as GradientStop, HandleBox, HandoutSlidesPerPage, HyperlinkDraft, InkPoint, InkStroke, InlineEditState, InnerShadowState, LegendEntry, LinePoint, LinearFit, LocalIdentity, LocalStorageUsageSummary, LocaleCatalogEntry, MobileSheetKey, Model3DViewModel, MotionPathColumn, MotionPathEntry, NodeEditBox, NotesSegmentViewModel, ObjectUrlFactory, OleActionModel, OleInfoRow, OuterShadowState, OutlineCommit, OverallSignatureStatus, PartitionedSlides, PathPoint, PieSliceGeometry, PieSliceOptions, PlotLayout, PlotLayoutOptions, PositionUpdate, PowerPointViewerAPI, PptxAiBridge, PptxAiConfig, PptxAiConnection, PptxAiContextStrategy, PptxAiElementUpdate, PptxAiToolName, PptxAiUIMessage, PptxAiWritePolicy, PresentToolbarAction, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, PresenterTimerProgress, PressureCircle, PrintColorMode, PrintHtmlDocumentOptions as PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, ProposalView, ProviderBundle, ProviderLike, RadarPoint, RecordWebmOptions, RecoveryVersion, ReflectionState, RemoteCursor, SanitizedPresence as RemotePresence, RenderedShape, ReplaceResult, ResizeHandle, ResolvedCaptionTrack, ResolvedFontVariant, ResolvedOleType, RulerUnit, SavedPresentationFormat, ScatterDot, ScatterXDomain, SelectionBox, SessionDeck, ShapeStyleChanges, ShareDefaults$1 as ShareDefaults, ShareFormFields, ShortcutReferenceItem, SignatureStatusKind, SlideInspectorTab, SlideTransitionAnimations, SmartArtInsertEvent, SmartArtNodeBounds, SnapBox, SnapGuide, SnapResult, SoftEdgeState, SpeechAlternative, SpeechRecognitionCtor, SpeechRecognitionEventLite, SpeechRecognitionLite, SpeechResult, SpeechResultList, SpeechSupportState, StagedProposal, StrokeToInkElementOpts, StyleMap, SupportedChartKind, SvgAreaGradient, SvgCircle, SvgLine, SvgPath, SvgPolygon, SvgPolyline, SvgPrimitive, SvgRect, SvgText, SwipeDismissDrag, TableBooleanFlag, TableCellSelection, TableCellViewModel, TableRowViewModel, TemplateElementsBySlideId, Text3DBevelKeys, TextAdvancedChanges, TextAdvancedState, TextStyleChanges, TextWarpCssDef, TextWarpDef, TextWarpPathDef, ThemeCatalogEntry, Tick, ToolbarActionId, TouchGestureCallbacks, TranslationKey, ValueRange, VideoPlanOptions, VideoSegmentPlan, ViewerMode, ViewerProfile, ViewerSettings, ViewerTheme, ViewerThemeColors, ZoomTranslate, ZoomViewModel };
23182
23687
  //# sourceMappingURL=pptx-angular-viewer.d.ts.map