pptx-angular-viewer 1.31.4 → 2.0.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.
- package/CHANGELOG.md +4 -0
- package/fesm2022/pptx-angular-viewer-chat-history-idb-OWtthCqn.mjs +106 -0
- package/fesm2022/pptx-angular-viewer-chat-history-idb-OWtthCqn.mjs.map +1 -0
- package/fesm2022/pptx-angular-viewer-pptx-angular-viewer-YtlYBdwp.mjs +112056 -0
- package/fesm2022/pptx-angular-viewer-pptx-angular-viewer-YtlYBdwp.mjs.map +1 -0
- package/fesm2022/pptx-angular-viewer.mjs +1 -100959
- package/fesm2022/pptx-angular-viewer.mjs.map +1 -1
- package/package.json +13 -3
- package/pptx-angular-viewer.css +1 -1
- package/types/pptx-angular-viewer.d.ts +1666 -232
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import * as pptx_viewer_core from 'pptx-viewer-core';
|
|
2
|
-
import { PptxSlide, PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartData, PptxElementAnimation, PptxAnimationPreset, PptxAnimationDirection, PptxAnimationRepeatMode, PptxAnimationSequence, PptxAnimationTimingCurve, PptxAnimationTrigger, TablePptxElement, PptxSection, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, InkPptxElement, PptxComment, PptxChartType,
|
|
2
|
+
import { PptxThemePreset, PptxSlide, PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartData, PptxElementAnimation, PptxAnimationPreset, PptxAnimationDirection, PptxAnimationRepeatMode, PptxAnimationSequence, PptxAnimationTimingCurve, PptxAnimationTrigger, ParsedTableStyleMap, PptxThemeColorScheme, PptxThemeFontScheme, TablePptxElement, PptxSection, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, InkPptxElement, PptxComment, PptxChartType, PptxTheme, PptxHandler, PptxData, PptxHeaderFooter, PptxSlideMaster, PptxNotesMaster, PptxHandoutMaster, PptxPresentationProperties, PptxCoreProperties, PptxAppProperties, PptxThemeOption, PptxCustomProperty, ParsedSignature, PptxSaveFormat, PptxTableCell, PptxTableCellStyle, PptxTableRow, PptxTableData, PptxCustomShow, MasterViewTab, SvgExportOptions, Model3DPptxElement, ZoomPptxElement, PptxSlideTransition, ChartPptxElement, MediaPptxElement, SmartArtPptxElement, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, SignatureStatus, ElementActionType, ElementAction, PptxImageEffects, MediaBookmark, ColorMapAliasKey, ChartAxisEdit, ChartDataPointLabelEdit, PptxChartLegendPosition, PptxChartStyle, ChartAxisTitleStyleEdit, ChartGridlineStyleEdit, PptxChartMarkerSymbol, PptxSmartArtNode, SmartArtLayoutType, PptxSmartArtNodeStyle, MediaCaptionTrack, PptxMediaType } from 'pptx-viewer-core';
|
|
3
3
|
export { SWITCHABLE_LAYOUT_TYPES, addSmartArtNode, addSmartArtNodeAsChild, chartDataAddCategory, chartDataAddSeries, chartDataChangeType, chartDataRemoveCategory, chartDataRemoveSeries, chartDataUpdatePoint, demoteSmartArtNode, promoteSmartArtNode, removeSmartArtNode, reorderSmartArtNode, switchSmartArtLayout, updateSmartArtNodeText } from 'pptx-viewer-core';
|
|
4
4
|
import * as _angular_core from '@angular/core';
|
|
5
5
|
import { Signal, WritableSignal, OnDestroy, OnInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
|
|
6
|
+
import * as AiSdk from 'ai';
|
|
7
|
+
import { LanguageModel, ChatTransport, UIMessage, ToolSet } from 'ai';
|
|
6
8
|
import * as pptx_angular_viewer from 'pptx-angular-viewer';
|
|
7
9
|
import { TranslateService } from '@ngx-translate/core';
|
|
8
10
|
import { Options } from 'html2canvas-pro';
|
|
@@ -152,6 +154,29 @@ declare const THEME_CATALOG: readonly ThemeCatalogEntry[];
|
|
|
152
154
|
/** Look up a catalog entry by key, falling back to `undefined` (the built-in default) if not found. */
|
|
153
155
|
declare function resolveThemeCatalogEntry(key: string | undefined, catalog?: readonly ThemeCatalogEntry[]): ViewerTheme | undefined;
|
|
154
156
|
|
|
157
|
+
/**
|
|
158
|
+
* theme-gallery-presets: the exact theme set shown in the Design tab's Browse
|
|
159
|
+
* Themes gallery, shared by every binding.
|
|
160
|
+
*
|
|
161
|
+
* This is a DIFFERENT set from core's `THEME_PRESETS`: it adds Wisp, Berlin,
|
|
162
|
+
* Slice, and Dividend and omits Slate and Metropolitan, in this order:
|
|
163
|
+
*
|
|
164
|
+
* office, facet, integral, ion, retrospect, organic,
|
|
165
|
+
* wisp, berlin, slice, dividend
|
|
166
|
+
*
|
|
167
|
+
* The six themes that also exist in core (office, facet, integral, ion,
|
|
168
|
+
* organic, retrospect) are reused verbatim from core's `THEME_PRESETS` (looked
|
|
169
|
+
* up by id) so their colour/font schemes stay canonical. The four gallery-only
|
|
170
|
+
* themes are defined here as `PptxThemePreset` values with core's nested
|
|
171
|
+
* `{ majorFont: { latin }, minorFont: { latin } }` font-scheme shape.
|
|
172
|
+
*/
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* The gallery theme set, in canonical order. Six canonical core presets plus
|
|
176
|
+
* the four gallery-only additions.
|
|
177
|
+
*/
|
|
178
|
+
declare const GALLERY_THEME_PRESETS: readonly PptxThemePreset[];
|
|
179
|
+
|
|
155
180
|
/**
|
|
156
181
|
* Framework-agnostic public types shared by the viewer bindings.
|
|
157
182
|
*
|
|
@@ -421,6 +446,24 @@ declare function getResolvedShapeClipPath(element: PptxElement, width?: number,
|
|
|
421
446
|
* (ST_PresetPatternVal).
|
|
422
447
|
*/
|
|
423
448
|
|
|
449
|
+
/**
|
|
450
|
+
* Optional geometry context for {@link buildGradientCss}. Supplying it lets the
|
|
451
|
+
* resolver apply the two OOXML linear-gradient attributes that depend on the
|
|
452
|
+
* owning shape:
|
|
453
|
+
* - `a:lin/@scaled` (default true): the angle is measured in the shape's unit
|
|
454
|
+
* square then stretched to the box, so the visual angle depends on the
|
|
455
|
+
* width/height aspect ratio.
|
|
456
|
+
* - `a:gradFill/@rotWithShape=false`: the gradient must stay fixed to the page
|
|
457
|
+
* frame, so it is counter-rotated by the element's own rotation.
|
|
458
|
+
*/
|
|
459
|
+
interface GradientRenderContext {
|
|
460
|
+
/** Element rotation in degrees (`PptxElementBase.rotation`). */
|
|
461
|
+
rotation?: number;
|
|
462
|
+
/** Element width in px. */
|
|
463
|
+
width?: number;
|
|
464
|
+
/** Element height in px. */
|
|
465
|
+
height?: number;
|
|
466
|
+
}
|
|
424
467
|
/**
|
|
425
468
|
* Converts a structured OOXML gradient on a `ShapeStyle` to a CSS
|
|
426
469
|
* `linear-gradient(...)` / `radial-gradient(...)` string.
|
|
@@ -435,9 +478,11 @@ declare function getResolvedShapeClipPath(element: PptxElement, width?: number,
|
|
|
435
478
|
* a radial), matching the React port.
|
|
436
479
|
*
|
|
437
480
|
* @param gradient - The shape style carrying gradient configuration.
|
|
481
|
+
* @param context - Optional element geometry enabling `@scaled` /
|
|
482
|
+
* `@rotWithShape` angle corrections (linear only).
|
|
438
483
|
* @returns A CSS gradient string, or `undefined`.
|
|
439
484
|
*/
|
|
440
|
-
declare function buildGradientCss(gradient: ShapeStyle | undefined): string | undefined;
|
|
485
|
+
declare function buildGradientCss(gradient: ShapeStyle | undefined, context?: GradientRenderContext): string | undefined;
|
|
441
486
|
/**
|
|
442
487
|
* Alias of {@link buildGradientCss} preserved for the per-binding gradient
|
|
443
488
|
* modules (React/Angular `color-gradient.ts`) whose public symbol was named
|
|
@@ -512,6 +557,20 @@ interface LineShadowParams {
|
|
|
512
557
|
color: string;
|
|
513
558
|
opacity: number;
|
|
514
559
|
}
|
|
560
|
+
/**
|
|
561
|
+
* A fill-overlay tint layer: the overlay {@link https://developer.mozilla.org/en-US/docs/Web/CSS/color colour}
|
|
562
|
+
* (an `rgba()` string carrying the overlay's alpha) plus the `mix-blend-mode`
|
|
563
|
+
* used to composite it over the element. Unlike the whole-element
|
|
564
|
+
* {@link getEffectDagBlendMode} proxy, this describes a *separate* coloured
|
|
565
|
+
* layer the integrator should paint on top of the element (e.g. an absolutely
|
|
566
|
+
* positioned pseudo-element / child), so the tint colour is actually rendered.
|
|
567
|
+
*/
|
|
568
|
+
interface FillOverlayCss {
|
|
569
|
+
/** Overlay colour as an `rgba()`/hex string (already includes opacity). */
|
|
570
|
+
color: string;
|
|
571
|
+
/** `mix-blend-mode` for the overlay layer (`normal` for the `over` blend). */
|
|
572
|
+
blendMode: string;
|
|
573
|
+
}
|
|
515
574
|
|
|
516
575
|
/**
|
|
517
576
|
* Text warp / WordArt logic — Vue port of the React
|
|
@@ -913,6 +972,13 @@ interface ChartViewModel {
|
|
|
913
972
|
* hierarchical kinds, where a vertical drag has no single-value meaning.
|
|
914
973
|
*/
|
|
915
974
|
valueDrag?: ChartValueDrag;
|
|
975
|
+
/**
|
|
976
|
+
* Drawing-overlay primitives resolved from the chart's `c:userShapes`
|
|
977
|
+
* (shapes/text drawn on top of the plot). Already appended to `primitives`;
|
|
978
|
+
* surfaced separately so projectors can segregate them if desired. Absent
|
|
979
|
+
* when the chart has no overlay.
|
|
980
|
+
*/
|
|
981
|
+
userShapes?: SvgPrimitive[];
|
|
916
982
|
}
|
|
917
983
|
declare function buildGridlinesAndLabels(range: ValueRange, layout: PlotLayout): {
|
|
918
984
|
gridlines: SvgLine[];
|
|
@@ -959,7 +1025,14 @@ declare function computePieLayout(elementWidth: number, elementHeight: number, c
|
|
|
959
1025
|
innerR: number;
|
|
960
1026
|
size: number;
|
|
961
1027
|
};
|
|
962
|
-
|
|
1028
|
+
/** Options for {@link computePieSlices}: start-angle rotation and per-slice explosion. */
|
|
1029
|
+
interface PieSliceOptions {
|
|
1030
|
+
/** Absolute start angle (radians). Defaults to -PI/2 (12 o'clock). */
|
|
1031
|
+
startAngle?: number;
|
|
1032
|
+
/** Per-slice pull-out distance as a percentage of the outer radius (0-100). */
|
|
1033
|
+
explosions?: ReadonlyArray<number>;
|
|
1034
|
+
}
|
|
1035
|
+
declare function computePieSlices(values: ReadonlyArray<number>, cx: number, cy: number, outerR: number, innerR: number, options?: PieSliceOptions): PieSliceGeometry[];
|
|
963
1036
|
interface ScatterDot {
|
|
964
1037
|
cx: number;
|
|
965
1038
|
cy: number;
|
|
@@ -1432,6 +1505,83 @@ declare function revealedElementStyles(groups: readonly AnimationClickGroup[], s
|
|
|
1432
1505
|
*/
|
|
1433
1506
|
declare function pendingElementStyles(groups: readonly AnimationClickGroup[], step: number): Map<string, CSSProperties>;
|
|
1434
1507
|
|
|
1508
|
+
/**
|
|
1509
|
+
* `animation-timeline-types` — pure interfaces for the native-animation
|
|
1510
|
+
* (OOXML `p:timing` tree) playback engine shared by every binding.
|
|
1511
|
+
*
|
|
1512
|
+
* These describe the *parsed* native animation model (`PptxNativeAnimation`,
|
|
1513
|
+
* driven by `presetClass` / `presetId`), as opposed to the editor-level
|
|
1514
|
+
* {@link import('./animation-css').AnimationCssResult} model in `animation-css`
|
|
1515
|
+
* (driven by `PptxElementAnimation` preset strings). Both coexist in shared.
|
|
1516
|
+
*
|
|
1517
|
+
* @module render/animation-timeline-types
|
|
1518
|
+
*/
|
|
1519
|
+
|
|
1520
|
+
/**
|
|
1521
|
+
* Normalized staged-reveal mode for a chart graphic frame, derived from the
|
|
1522
|
+
* OOXML `a:bldChart/@bld` (or `p:bldOleChart/@bld`) token:
|
|
1523
|
+
* - `asOne` the whole chart appears at once (`allAtOnce`).
|
|
1524
|
+
* - `bySeries` one data series is revealed per stage (`series`).
|
|
1525
|
+
* - `byCategory` one category is revealed per stage (`category`).
|
|
1526
|
+
* - `byElement` one series/category ELEMENT is revealed per stage
|
|
1527
|
+
* (`seriesElement` / `categoryElement`).
|
|
1528
|
+
*/
|
|
1529
|
+
type ChartBuildMode = 'asOne' | 'bySeries' | 'byCategory' | 'byElement';
|
|
1530
|
+
/**
|
|
1531
|
+
* Normalized staged-reveal mode for a SmartArt diagram, derived from the OOXML
|
|
1532
|
+
* `a:bldDgm/@bld` or `p:bldDgm/@bld` token:
|
|
1533
|
+
* - `asOne` the whole diagram appears at once (`whole` / `allAtOnce`).
|
|
1534
|
+
* - `byOne` one node is revealed per stage (`one`, and the assorted
|
|
1535
|
+
* `depthBy*` / `breadthBy*` / directional traversals).
|
|
1536
|
+
* - `byLvl` levels are revealed one element at a time (`lvlOne`).
|
|
1537
|
+
* - `byLvlAtOnce` a whole level is revealed per stage (`lvlAtOnce`).
|
|
1538
|
+
*/
|
|
1539
|
+
type DiagramBuildMode = 'asOne' | 'byOne' | 'byLvl' | 'byLvlAtOnce';
|
|
1540
|
+
/**
|
|
1541
|
+
* Playback-time staged-build state surfaced on {@link ElementAnimationState}.
|
|
1542
|
+
* `progress` is the 0..1 fraction of the build revealed at the current playback
|
|
1543
|
+
* time; a consumer maps it to its own item COUNT (see `revealedStageCount`).
|
|
1544
|
+
*/
|
|
1545
|
+
type ElementBuildState = {
|
|
1546
|
+
kind: 'chart';
|
|
1547
|
+
mode: ChartBuildMode;
|
|
1548
|
+
progress: number;
|
|
1549
|
+
} | {
|
|
1550
|
+
kind: 'diagram';
|
|
1551
|
+
mode: DiagramBuildMode;
|
|
1552
|
+
progress: number;
|
|
1553
|
+
};
|
|
1554
|
+
/** Snapshot of a single element's animation state at a point in the timeline. */
|
|
1555
|
+
interface ElementAnimationState {
|
|
1556
|
+
/** Whether the element should be visible. */
|
|
1557
|
+
visible: boolean;
|
|
1558
|
+
/** CSS animation shorthand to apply (undefined = no active animation). */
|
|
1559
|
+
cssAnimation: string | undefined;
|
|
1560
|
+
/**
|
|
1561
|
+
* Staged-build reveal state, present only when the active animation builds a
|
|
1562
|
+
* chart or SmartArt diagram in stages (`p:bldChart` / `p:bldDgm`) rather than
|
|
1563
|
+
* revealing the whole element at once. A staged renderer multiplies
|
|
1564
|
+
* `build.progress` (0..1) by its own series / category / level COUNT to
|
|
1565
|
+
* decide how many stages are revealed at the current playback time; see
|
|
1566
|
+
* {@link import('./animation-build').revealedStageCount}. Absent for ordinary
|
|
1567
|
+
* whole-element entrances, so existing renderers are unaffected.
|
|
1568
|
+
*/
|
|
1569
|
+
build?: ElementBuildState;
|
|
1570
|
+
/**
|
|
1571
|
+
* True when an active `p:animClr` color animation targets this shape's fill.
|
|
1572
|
+
* A vector renderer should then paint the fill with `fill: inherit` so the
|
|
1573
|
+
* wrapper-level colour keyframes cascade to the SVG path. Absent/false means
|
|
1574
|
+
* no active fill-colour animation.
|
|
1575
|
+
*/
|
|
1576
|
+
animatesFill?: boolean;
|
|
1577
|
+
/**
|
|
1578
|
+
* True when an active `p:animClr` color animation targets this shape's
|
|
1579
|
+
* stroke. A vector renderer should then paint the stroke with
|
|
1580
|
+
* `stroke: inherit`. Absent/false means no active stroke-colour animation.
|
|
1581
|
+
*/
|
|
1582
|
+
animatesStroke?: boolean;
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1435
1585
|
/**
|
|
1436
1586
|
* table-style.ts — framework-agnostic table render helpers.
|
|
1437
1587
|
*
|
|
@@ -1454,6 +1604,25 @@ declare function pendingElementStyles(groups: readonly AnimationClickGroup[], st
|
|
|
1454
1604
|
* passed to {@link getTableCellBandStyle}.
|
|
1455
1605
|
*/
|
|
1456
1606
|
|
|
1607
|
+
/**
|
|
1608
|
+
* Context for resolving table style section fills and text properties from
|
|
1609
|
+
* the PPTX theme's colour scheme.
|
|
1610
|
+
*
|
|
1611
|
+
* Both fields are optional so callers that don't have the theme wired in yet
|
|
1612
|
+
* can omit the context and the function falls back to hardcoded colours.
|
|
1613
|
+
*/
|
|
1614
|
+
interface TableStyleContext {
|
|
1615
|
+
/** Parsed table style map (from `ppt/tableStyles.xml`). */
|
|
1616
|
+
tableStyleMap?: ParsedTableStyleMap;
|
|
1617
|
+
/** Theme colour scheme from the active PPTX theme. */
|
|
1618
|
+
colorScheme?: PptxThemeColorScheme;
|
|
1619
|
+
/**
|
|
1620
|
+
* Theme font scheme from the active PPTX theme. Supplied so a table
|
|
1621
|
+
* style's `a:fontRef@idx` (`minor`/`major`) can resolve to a concrete
|
|
1622
|
+
* font family. Optional: when absent, `fontRefIdx` is left unresolved.
|
|
1623
|
+
*/
|
|
1624
|
+
fontScheme?: PptxThemeFontScheme;
|
|
1625
|
+
}
|
|
1457
1626
|
/** Map an OOXML `a:prstDash/@val` value to a CSS `border-style` keyword. */
|
|
1458
1627
|
declare function ooxmlDashToCssBorderStyle(dashVal: string | undefined): string;
|
|
1459
1628
|
/**
|
|
@@ -2463,6 +2632,14 @@ interface ConnectorRouting {
|
|
|
2463
2632
|
interface MarkerShape {
|
|
2464
2633
|
shape: 'path' | 'circle';
|
|
2465
2634
|
d?: string;
|
|
2635
|
+
/**
|
|
2636
|
+
* Suggested `markerWidth` (along the line: arrow *length*). Derived from the
|
|
2637
|
+
* connector's `@len` size token. Bindings should apply this instead of a
|
|
2638
|
+
* hard-coded value so `sm`/`lg` arrows scale. Defaults to the historical `4`.
|
|
2639
|
+
*/
|
|
2640
|
+
markerWidth: number;
|
|
2641
|
+
/** Suggested `markerHeight` (perpendicular: arrow *width*, from `@w`). */
|
|
2642
|
+
markerHeight: number;
|
|
2466
2643
|
}
|
|
2467
2644
|
/** All derived connector rendering values, computed from a `PptxElement`. */
|
|
2468
2645
|
interface ConnectorGeometry {
|
|
@@ -2825,9 +3002,19 @@ interface SlideTransitionAnimations {
|
|
|
2825
3002
|
* same string — the bindings historically exported it under both names, so the
|
|
2826
3003
|
* alias preserves their public surface.
|
|
2827
3004
|
*
|
|
3005
|
+
* The faithful Office 2010 (`p14`) keyframes are appended (via
|
|
3006
|
+
* {@link P14_TRANSITION_KEYFRAMES_ALL}) so the exotic / 3-D transitions routed
|
|
3007
|
+
* through `getP14TransitionAnimations` animate wherever this block is injected,
|
|
3008
|
+
* with no per-binding wiring.
|
|
3009
|
+
*
|
|
2828
3010
|
* @module render/slide-transition-keyframes
|
|
2829
3011
|
*/
|
|
2830
|
-
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 Wipe (clip-path 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 */\n@keyframes pptx-tr-wipe-from-left {\n\tfrom { clip-path: inset(0 100% 0 0); }\n\tto { clip-path: inset(0 0 0 0); }\n}\n@keyframes pptx-tr-wipe-from-right {\n\tfrom { clip-path: inset(0 0 0 100%); }\n\tto { clip-path: inset(0 0 0 0); }\n}\n@keyframes pptx-tr-wipe-from-top {\n\tfrom { clip-path: inset(0 0 100% 0); }\n\tto { clip-path: inset(0 0 0 0); }\n}\n@keyframes pptx-tr-wipe-from-bottom {\n\tfrom { clip-path: inset(100% 0 0 0); }\n\tto { clip-path: inset(0 0 0 0); }\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";
|
|
3012
|
+
/**
|
|
3013
|
+
* The full slide-transition `@keyframes` block: the classic set plus the
|
|
3014
|
+
* faithful Office 2010 (`p14`) keyframes, so both the classic and exotic / 3-D
|
|
3015
|
+
* transitions animate wherever this single string is injected.
|
|
3016
|
+
*/
|
|
3017
|
+
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 Wipe (clip-path 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 */\n@keyframes pptx-tr-wipe-from-left {\n\tfrom { clip-path: inset(0 100% 0 0); }\n\tto { clip-path: inset(0 0 0 0); }\n}\n@keyframes pptx-tr-wipe-from-right {\n\tfrom { clip-path: inset(0 0 0 100%); }\n\tto { clip-path: inset(0 0 0 0); }\n}\n@keyframes pptx-tr-wipe-from-top {\n\tfrom { clip-path: inset(0 0 100% 0); }\n\tto { clip-path: inset(0 0 0 0); }\n}\n@keyframes pptx-tr-wipe-from-bottom {\n\tfrom { clip-path: inset(100% 0 0 0); }\n\tto { clip-path: inset(0 0 0 0); }\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 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 out / unfold in) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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-origami-out { from { transform: perspective(1600px) rotateY(0deg) scaleX(1); transform-origin: left center; opacity: 1; } to { transform: perspective(1600px) rotateY(75deg) scaleX(.25); transform-origin: left center; opacity: .2; } }\n@keyframes pptx-tr-origami-in { from { transform: perspective(1600px) rotateY(-75deg) scaleX(.25); transform-origin: right center; opacity: .2; } to { transform: perspective(1600px) rotateY(0deg) scaleX(1); transform-origin: right center; opacity: 1; } }\n";
|
|
2831
3018
|
|
|
2832
3019
|
/**
|
|
2833
3020
|
* `slide-transition-css` — pure mapping from a {@link PptxSlideTransition}
|
|
@@ -2847,11 +3034,16 @@ declare const SLIDE_TRANSITION_KEYFRAMES = "\n/* \u2500\u2500 Fade \u2500\u2500\
|
|
|
2847
3034
|
*
|
|
2848
3035
|
* Superset note: the exotic / 3-D transition family (`pan`/`gallery`/
|
|
2849
3036
|
* `conveyor`/`reveal`/`doors`/`switch`/`flythrough`/`ferris`/`prism`/`ripple`/
|
|
2850
|
-
* `honeycomb`/`glitter`/`shred`/`flash`)
|
|
2851
|
-
*
|
|
2852
|
-
*
|
|
2853
|
-
*
|
|
2854
|
-
* `
|
|
3037
|
+
* `honeycomb`/`glitter`/`shred`/`flash`/`vortex`/`warp`/`wheelReverse`/`window`)
|
|
3038
|
+
* is rendered faithfully by delegating to {@link getP14TransitionAnimations}
|
|
3039
|
+
* (its `@keyframes` live in `p14-transition-keyframes` and are folded into
|
|
3040
|
+
* `SLIDE_TRANSITION_KEYFRAMES`). The newer Office 2013+ (p15) cinematic family
|
|
3041
|
+
* (`cube`/`flip`/`rotate`/`orbit`/`fallOver`/`drape`/`curtains`/`wind`/
|
|
3042
|
+
* `prestige`/`fracture`/`crush`/`peelOff`/`pageCurlSingle`/`pageCurlDouble`/
|
|
3043
|
+
* `airplane`/`origami`) is likewise rendered faithfully via
|
|
3044
|
+
* {@link getCinematicTransitionAnimations} (its `@keyframes` live in
|
|
3045
|
+
* `slide-transition-cinematic` as `CINEMATIC_TRANSITION_KEYFRAMES`). Only truly
|
|
3046
|
+
* unknown types fall back to a symmetrical cross-fade.
|
|
2855
3047
|
*
|
|
2856
3048
|
* Everything here is pure and unit-testable: no framework imports, no DOM.
|
|
2857
3049
|
*
|
|
@@ -3424,6 +3616,35 @@ declare function buildBroadcastViewerUrl(roomId: string, serverUrl: string, loca
|
|
|
3424
3616
|
/** Whether the runtime exposes a usable async clipboard write API. */
|
|
3425
3617
|
declare function canUseClipboard(nav: Navigator | undefined): boolean;
|
|
3426
3618
|
|
|
3619
|
+
/**
|
|
3620
|
+
* share-form: framework-free helpers for the Share dialog's start/join form
|
|
3621
|
+
* (field seeding, validity, and CollaborationConfig assembly). Thin sugar over
|
|
3622
|
+
* the neutral session builders in `share-session`, exposing the binding-facing
|
|
3623
|
+
* names the Share dialogs already used. Shared by every binding; each re-exports
|
|
3624
|
+
* these through a thin shim so the SFC/DOM layer stays presentation-only.
|
|
3625
|
+
*/
|
|
3626
|
+
|
|
3627
|
+
/** The share form's editable fields. */
|
|
3628
|
+
interface ShareFormFields {
|
|
3629
|
+
roomId: string;
|
|
3630
|
+
userName: string;
|
|
3631
|
+
serverUrl: string;
|
|
3632
|
+
}
|
|
3633
|
+
/** Optional seed values for the share start form. */
|
|
3634
|
+
interface ShareDefaults$1 {
|
|
3635
|
+
roomId?: string;
|
|
3636
|
+
userName?: string;
|
|
3637
|
+
serverUrl?: string;
|
|
3638
|
+
}
|
|
3639
|
+
/** Seed the form fields from the (optional) host-supplied defaults. */
|
|
3640
|
+
declare function seedShareFields(defaults?: ShareDefaults$1): ShareFormFields;
|
|
3641
|
+
/**
|
|
3642
|
+
* Whether the form can start a session: room id and display name are required
|
|
3643
|
+
* (after trimming); the server URL may be blank, which selects the serverless
|
|
3644
|
+
* webrtc peer-to-peer transport.
|
|
3645
|
+
*/
|
|
3646
|
+
declare function canStartShare(fields: ShareFormFields): boolean;
|
|
3647
|
+
|
|
3427
3648
|
/**
|
|
3428
3649
|
* presenter-view.ts: pure presenter-view helpers shared across bindings.
|
|
3429
3650
|
*
|
|
@@ -3475,6 +3696,82 @@ interface PresentationInkStroke {
|
|
|
3475
3696
|
points: PresentationInkPoint[];
|
|
3476
3697
|
}
|
|
3477
3698
|
|
|
3699
|
+
/**
|
|
3700
|
+
* audience-content-store: IndexedDB-based storage for sharing PPTX content
|
|
3701
|
+
* between the presenter tab and audience tab.
|
|
3702
|
+
*
|
|
3703
|
+
* When the presenter opens an audience window, the PPTX bytes are stored in
|
|
3704
|
+
* IndexedDB. The audience tab retrieves them on load and then cleans up.
|
|
3705
|
+
*
|
|
3706
|
+
* Framework-agnostic: every binding (React/Vue/Angular) re-exports these
|
|
3707
|
+
* symbols through a thin shim. The database, store, and key names are kept
|
|
3708
|
+
* identical across bindings so the cross-tab handoff stays wire-compatible
|
|
3709
|
+
* regardless of which binding opened the presenter window or renders the
|
|
3710
|
+
* audience tab.
|
|
3711
|
+
*/
|
|
3712
|
+
/** URL hash that marks the current tab as the audience display. */
|
|
3713
|
+
declare const AUDIENCE_HASH = "#pptx-audience";
|
|
3714
|
+
/** Returns true if the current page was opened as an audience tab. */
|
|
3715
|
+
declare function isAudienceTab(): boolean;
|
|
3716
|
+
/**
|
|
3717
|
+
* Store PPTX content bytes so the audience tab can retrieve them.
|
|
3718
|
+
* Called by the presenter before opening the audience window.
|
|
3719
|
+
*/
|
|
3720
|
+
declare function storeAudienceContent(content: ArrayBuffer | Uint8Array, sessionId?: string): Promise<void>;
|
|
3721
|
+
/**
|
|
3722
|
+
* Load PPTX content bytes stored by the presenter tab.
|
|
3723
|
+
* Returns `null` if nothing is stored.
|
|
3724
|
+
*/
|
|
3725
|
+
declare function loadAudienceContent(sessionId?: string): Promise<Uint8Array | null>;
|
|
3726
|
+
/**
|
|
3727
|
+
* Remove stored audience content (cleanup).
|
|
3728
|
+
*/
|
|
3729
|
+
declare function clearAudienceContent(sessionId?: string): Promise<void>;
|
|
3730
|
+
|
|
3731
|
+
/**
|
|
3732
|
+
* EyeDropper colour sampler (framework-agnostic).
|
|
3733
|
+
*
|
|
3734
|
+
* Prefers the native browser EyeDropper API (Chrome 95+ / Edge 95+). For
|
|
3735
|
+
* browsers without it (Firefox, Safari) a DOM-sampling fallback reads the
|
|
3736
|
+
* colour under the pointer via `elementFromPoint` + `getComputedStyle`, so the
|
|
3737
|
+
* eyedropper still works everywhere. Shared by every binding; each re-exports
|
|
3738
|
+
* these symbols through a thin shim.
|
|
3739
|
+
*/
|
|
3740
|
+
/** A sampled colour, as hex plus its RGB channels. */
|
|
3741
|
+
interface EyedropperResult {
|
|
3742
|
+
hex: string;
|
|
3743
|
+
r: number;
|
|
3744
|
+
g: number;
|
|
3745
|
+
b: number;
|
|
3746
|
+
}
|
|
3747
|
+
/**
|
|
3748
|
+
* Returns true when the native EyeDropper API is available in this browser.
|
|
3749
|
+
* Guards against SSR / headless environments without `window`.
|
|
3750
|
+
*/
|
|
3751
|
+
declare function eyedropperAvailable(): boolean;
|
|
3752
|
+
/**
|
|
3753
|
+
* Open the native EyeDropper and return the picked sRGB hex colour string
|
|
3754
|
+
* (e.g. `"#a3b4c5"`), or `null` when the user cancels or the API is absent.
|
|
3755
|
+
*/
|
|
3756
|
+
declare function openNativeEyeDropper(): Promise<string | null>;
|
|
3757
|
+
/**
|
|
3758
|
+
* Sample the colour at a client-space point by inspecting the topmost element's
|
|
3759
|
+
* computed paint. Tries, in order: a real `<canvas>` pixel read (sharp for
|
|
3760
|
+
* rasterised content), then the element's `background-color`, SVG `fill`, and
|
|
3761
|
+
* finally text `color`. Returns `null` when nothing paintable is found.
|
|
3762
|
+
*
|
|
3763
|
+
* This is the DOM fallback used when the native EyeDropper API is unavailable;
|
|
3764
|
+
* it needs no canvas plumbing, so it works against the live slide DOM.
|
|
3765
|
+
*/
|
|
3766
|
+
declare function sampleColorFromSlide(clientX: number, clientY: number): EyedropperResult | null;
|
|
3767
|
+
/**
|
|
3768
|
+
* Run the eyedropper fallback: arm a one-shot pointer listener and resolve with
|
|
3769
|
+
* the hex colour of the next click (or `null` if the user presses Escape). Used
|
|
3770
|
+
* only when {@link eyedropperAvailable} is false. The caller is responsible for
|
|
3771
|
+
* any "armed" UI affordance; this just manages the listeners.
|
|
3772
|
+
*/
|
|
3773
|
+
declare function pickColorByClickFallback(): Promise<string | null>;
|
|
3774
|
+
|
|
3478
3775
|
/**
|
|
3479
3776
|
* smart-art-presets.ts: the SmartArt insert-gallery catalogue, shared across
|
|
3480
3777
|
* bindings. Pure data + types; consumed by each binding's insert dialog and
|
|
@@ -4655,6 +4952,466 @@ declare function segmentFrameCount(durationMs: number, fps: number): number;
|
|
|
4655
4952
|
/** DOM id of the managed `<style>` element the service injects into `<head>`. */
|
|
4656
4953
|
declare const EMBEDDED_FONTS_STYLE_ID = "pptx-angular-embedded-fonts";
|
|
4657
4954
|
|
|
4955
|
+
/**
|
|
4956
|
+
* Structured element-level diff for AI change animations. Given the deck's
|
|
4957
|
+
* slides before and after an AI edit, {@link diffChangedElements} returns a flat
|
|
4958
|
+
* list of what changed per element (added / removed / moved / resized /
|
|
4959
|
+
* restyled / text), with the old and new bounds where relevant. A binding turns
|
|
4960
|
+
* that list into on-canvas motion (glide old->new, fade/scale in-out) plus a
|
|
4961
|
+
* glow-pulse highlight, so the user watches the edit happen.
|
|
4962
|
+
*
|
|
4963
|
+
* Pure and framework-agnostic: no DOM, no timing. The animator
|
|
4964
|
+
* ({@link createAiChangeAnimator}) owns timing; the binding owns rendering.
|
|
4965
|
+
*/
|
|
4966
|
+
|
|
4967
|
+
/** What kind of change an element underwent. */
|
|
4968
|
+
type AiChangeKind = 'added' | 'removed' | 'moved' | 'resized' | 'restyled' | 'text';
|
|
4969
|
+
/** Axis-aligned bounds in slide (CSS pixel) coordinates. */
|
|
4970
|
+
interface AiChangeBounds {
|
|
4971
|
+
x: number;
|
|
4972
|
+
y: number;
|
|
4973
|
+
width: number;
|
|
4974
|
+
height: number;
|
|
4975
|
+
}
|
|
4976
|
+
/** One element's change, with old/new bounds for motion. */
|
|
4977
|
+
interface AiElementChange {
|
|
4978
|
+
slideIndex: number;
|
|
4979
|
+
elementId: string;
|
|
4980
|
+
kind: AiChangeKind;
|
|
4981
|
+
/** Bounds before the edit (present for removed / moved / resized). */
|
|
4982
|
+
from?: AiChangeBounds;
|
|
4983
|
+
/** Bounds after the edit (present for added / moved / resized / restyled / text). */
|
|
4984
|
+
to?: AiChangeBounds;
|
|
4985
|
+
}
|
|
4986
|
+
|
|
4987
|
+
/**
|
|
4988
|
+
* The AI change animator: the framework-agnostic bus that carries "these
|
|
4989
|
+
* elements just changed, animate them" from the AI apply path to whichever
|
|
4990
|
+
* binding is rendering the canvas. The AI write choke points call
|
|
4991
|
+
* {@link AiChangeAnimator.publish} with the slides before and after an edit; the
|
|
4992
|
+
* binding subscribes, reveals the affected slide, and plays the motion + glow
|
|
4993
|
+
* for {@link ResolvedAiChangeAnimationConfig.durationMs}, then the batch clears.
|
|
4994
|
+
*
|
|
4995
|
+
* Timing (setTimeout) and the frame clock live here so bindings stay thin. A
|
|
4996
|
+
* `schedule` hook is injectable so tests can drive time deterministically.
|
|
4997
|
+
*/
|
|
4998
|
+
|
|
4999
|
+
/** Host-tunable options for how AI edits are animated on the canvas. */
|
|
5000
|
+
interface AiChangeAnimationConfig {
|
|
5001
|
+
/** Master switch. Default true. */
|
|
5002
|
+
enabled?: boolean;
|
|
5003
|
+
/** How long the motion + glow plays, in ms. Default 900. */
|
|
5004
|
+
durationMs?: number;
|
|
5005
|
+
/** Draw the pulsing glow highlight on changed elements. Default true. */
|
|
5006
|
+
glow?: boolean;
|
|
5007
|
+
/** Glide old->new bounds and cross-fade colours. Default true. */
|
|
5008
|
+
tween?: boolean;
|
|
5009
|
+
/** Accent colour (any CSS colour) for the glow/ghosts. Default a blue. */
|
|
5010
|
+
color?: string;
|
|
5011
|
+
}
|
|
5012
|
+
/** Config with every field resolved to a concrete value. */
|
|
5013
|
+
interface ResolvedAiChangeAnimationConfig {
|
|
5014
|
+
enabled: boolean;
|
|
5015
|
+
durationMs: number;
|
|
5016
|
+
glow: boolean;
|
|
5017
|
+
tween: boolean;
|
|
5018
|
+
color: string;
|
|
5019
|
+
}
|
|
5020
|
+
/** One batch of changes to animate, plus the slide to reveal for it. */
|
|
5021
|
+
interface AiChangeBatch {
|
|
5022
|
+
changes: AiElementChange[];
|
|
5023
|
+
/** Slide index the first change lives on (reveal this to show the edit). */
|
|
5024
|
+
slideIndex: number;
|
|
5025
|
+
/** Monotonic id so a binding can restart its animation on each new batch. */
|
|
5026
|
+
nonce: number;
|
|
5027
|
+
config: ResolvedAiChangeAnimationConfig;
|
|
5028
|
+
}
|
|
5029
|
+
/** Subscribe/publish bus for AI change animations. */
|
|
5030
|
+
interface AiChangeAnimator {
|
|
5031
|
+
/**
|
|
5032
|
+
* Diff `before` -> `after` and, when something visible changed and animations
|
|
5033
|
+
* are enabled, broadcast a batch and schedule its clear. Returns the batch
|
|
5034
|
+
* (so the caller can also navigate to `slideIndex`), or null on a no-op.
|
|
5035
|
+
*/
|
|
5036
|
+
publish(before: PptxSlide[], after: PptxSlide[]): AiChangeBatch | null;
|
|
5037
|
+
subscribe(listener: (batch: AiChangeBatch | null) => void): () => void;
|
|
5038
|
+
current(): AiChangeBatch | null;
|
|
5039
|
+
/** Update the resolved config (e.g. when the host toggles it live). */
|
|
5040
|
+
configure(config?: AiChangeAnimationConfig): void;
|
|
5041
|
+
dispose(): void;
|
|
5042
|
+
}
|
|
5043
|
+
|
|
5044
|
+
/**
|
|
5045
|
+
* Host-facing configuration types for the framework-agnostic AI assistant, plus
|
|
5046
|
+
* {@link resolveChatTransport}, which turns a declarative {@link PptxAiConnection}
|
|
5047
|
+
* into a concrete AI SDK `ChatTransport`.
|
|
5048
|
+
*
|
|
5049
|
+
* All `ai` imports here are type-only; the runtime SDK is threaded in by the
|
|
5050
|
+
* caller (see {@link loadAiSdk}) so this module never forces the optional peer
|
|
5051
|
+
* to be present.
|
|
5052
|
+
*/
|
|
5053
|
+
|
|
5054
|
+
/** The UI message shape exchanged with the assistant. Alias of the SDK type. */
|
|
5055
|
+
type PptxAiUIMessage = UIMessage;
|
|
5056
|
+
/**
|
|
5057
|
+
* Canonical name of every tool the assistant can call. Document tools mirror the
|
|
5058
|
+
* `pptx-viewer-mcp` server exactly (they ARE the same functions, run against the
|
|
5059
|
+
* live deck); the viewer-only tools (navigation, deck outline, element/notes
|
|
5060
|
+
* readers, table merge) have no MCP counterpart.
|
|
5061
|
+
*/
|
|
5062
|
+
type PptxAiToolName = 'get_deck_overview' | 'get_slide' | 'get_element' | 'get_speaker_notes' | 'find_text' | 'get_theme' | 'go_to_slide' | 'select_elements' | 'merge_tables' | 'get_metadata' | 'get_layouts' | 'find_placeholders' | 'get_presentation_properties' | 'run_accessibility_check' | 'convert_to_markdown' | 'add_element' | 'update_element' | 'delete_elements' | 'arrange_elements' | 'clone_element' | 'set_element_animation' | 'group_elements' | 'ungroup_elements' | 'batch_update_elements' | 'update_element_style' | 'replace_geometry' | 'set_element_lock' | 'manage_hyperlinks' | 'replace_text' | 'manage_comments' | 'update_table_cells' | 'manage_table_structure' | 'create_chart' | 'update_chart' | 'add_chart_series' | 'remove_chart_series' | 'update_chart_series_data' | 'manage_smart_art' | 'apply_template' | 'add_slide' | 'duplicate_slide' | 'delete_slides' | 'reorder_slides' | 'update_slide_properties' | 'set_slide_transition' | 'apply_theme_preset' | 'update_theme_colors' | 'update_theme_fonts' | 'set_canvas_size' | 'update_metadata' | 'manage_sections' | 'update_presentation_properties' | 'apply_layout';
|
|
5063
|
+
type Resolvable<T> = T | (() => T | Promise<T>);
|
|
5064
|
+
/** How the assistant reaches a language model. */
|
|
5065
|
+
type PptxAiConnection =
|
|
5066
|
+
/**
|
|
5067
|
+
* Post messages to a host backend route (recommended for production so the
|
|
5068
|
+
* provider API key stays server-side). Maps to `DefaultChatTransport`.
|
|
5069
|
+
*/
|
|
5070
|
+
{
|
|
5071
|
+
kind: 'endpoint';
|
|
5072
|
+
api: string;
|
|
5073
|
+
headers?: Resolvable<Record<string, string>>;
|
|
5074
|
+
body?: Resolvable<Record<string, unknown>>;
|
|
5075
|
+
credentials?: RequestCredentials;
|
|
5076
|
+
fetch?: typeof globalThis.fetch;
|
|
5077
|
+
}
|
|
5078
|
+
/**
|
|
5079
|
+
* Run a language model in-process in the browser (bring-your-own key /
|
|
5080
|
+
* local model). Maps to a `ToolLoopAgent` behind a `DirectChatTransport`.
|
|
5081
|
+
*/
|
|
5082
|
+
| {
|
|
5083
|
+
kind: 'model';
|
|
5084
|
+
model: LanguageModel;
|
|
5085
|
+
system?: string;
|
|
5086
|
+
maxSteps?: number;
|
|
5087
|
+
}
|
|
5088
|
+
/** Provide a fully-constructed transport (advanced / testing escape hatch). */
|
|
5089
|
+
| {
|
|
5090
|
+
kind: 'transport';
|
|
5091
|
+
transport: ChatTransport<PptxAiUIMessage>;
|
|
5092
|
+
};
|
|
5093
|
+
/** How writes proposed by the assistant reach the document. */
|
|
5094
|
+
type PptxAiWritePolicy = 'stage' | 'approve' | 'auto';
|
|
5095
|
+
/** Which deck context is fed to the model with each turn. */
|
|
5096
|
+
type PptxAiContextStrategy = 'outline' | 'current-slide' | 'none';
|
|
5097
|
+
/** Optional per-session history persistence hooks. */
|
|
5098
|
+
interface PptxAiHistoryHooks {
|
|
5099
|
+
load?(id: string): Promise<PptxAiUIMessage[]>;
|
|
5100
|
+
save?(id: string, messages: PptxAiUIMessage[]): Promise<void>;
|
|
5101
|
+
}
|
|
5102
|
+
/** Complete host configuration for an AI chat session. */
|
|
5103
|
+
interface PptxAiConfig {
|
|
5104
|
+
connection: PptxAiConnection;
|
|
5105
|
+
/** Extra host instructions appended to the base system prompt. */
|
|
5106
|
+
systemPromptExtras?: string;
|
|
5107
|
+
tools?: {
|
|
5108
|
+
/** Allowlist. When set, only these tools are exposed. */
|
|
5109
|
+
enabled?: PptxAiToolName[];
|
|
5110
|
+
/** Denylist, applied after `enabled`. */
|
|
5111
|
+
disabled?: PptxAiToolName[];
|
|
5112
|
+
/** Additional host-defined tools merged into the tool set. */
|
|
5113
|
+
extra?: ToolSet;
|
|
5114
|
+
};
|
|
5115
|
+
/** Default `'stage'`. */
|
|
5116
|
+
writePolicy?: PptxAiWritePolicy;
|
|
5117
|
+
/** Default `'outline'`. */
|
|
5118
|
+
contextStrategy?: PptxAiContextStrategy;
|
|
5119
|
+
history?: PptxAiHistoryHooks;
|
|
5120
|
+
/**
|
|
5121
|
+
* How AI edits are animated on the canvas so the user can watch them land
|
|
5122
|
+
* (glide old->new, fade/scale in-out, glow-pulse). Omit for the defaults;
|
|
5123
|
+
* set `{ enabled: false }` to turn it off.
|
|
5124
|
+
*/
|
|
5125
|
+
changeAnimation?: AiChangeAnimationConfig;
|
|
5126
|
+
onError?(error: Error): void;
|
|
5127
|
+
}
|
|
5128
|
+
|
|
5129
|
+
/**
|
|
5130
|
+
* The {@link PptxAiBridge} contract each UI binding (React / Vue / Angular /
|
|
5131
|
+
* Svelte / Vanilla) implements so the framework-agnostic AI core can read the
|
|
5132
|
+
* open deck, navigate it, and route edits through the binding's own history /
|
|
5133
|
+
* undo stack.
|
|
5134
|
+
*
|
|
5135
|
+
* The bridge is the single seam between the AI core and a live editor: every
|
|
5136
|
+
* read goes through a getter, every mutation goes through one of the three
|
|
5137
|
+
* write choke points ({@link PptxAiBridge.applySlidesUpdate},
|
|
5138
|
+
* {@link PptxAiBridge.updateElement}, {@link PptxAiBridge.applyTheme}). Keeping
|
|
5139
|
+
* writes funnelled lets the {@link ProposalStore} commit a batch as a single
|
|
5140
|
+
* undoable history entry.
|
|
5141
|
+
*/
|
|
5142
|
+
|
|
5143
|
+
/** Lightweight, model-friendly summary of the whole deck. */
|
|
5144
|
+
interface PptxAiDeckMeta {
|
|
5145
|
+
/** Total number of slides. */
|
|
5146
|
+
slideCount: number;
|
|
5147
|
+
/** Zero-based index of the currently active slide. */
|
|
5148
|
+
activeSlideIndex: number;
|
|
5149
|
+
/** Deck title, when known (first slide title / core properties). */
|
|
5150
|
+
title?: string;
|
|
5151
|
+
/** Slide canvas width in CSS pixels. */
|
|
5152
|
+
width: number;
|
|
5153
|
+
/** Slide canvas height in CSS pixels. */
|
|
5154
|
+
height: number;
|
|
5155
|
+
}
|
|
5156
|
+
/** Severity hint for {@link PptxAiBridge.notify}. */
|
|
5157
|
+
type PptxAiNotifyLevel = 'info' | 'success' | 'warning' | 'error';
|
|
5158
|
+
/**
|
|
5159
|
+
* A target the user has scoped the assistant to: either a whole slide or a
|
|
5160
|
+
* single element on a slide. Returned by {@link PptxAiBridge.getFocusedTargets}
|
|
5161
|
+
* so the context builder can tell the model exactly what to focus on.
|
|
5162
|
+
*/
|
|
5163
|
+
type PptxAiFocusedTarget = {
|
|
5164
|
+
kind: 'slide';
|
|
5165
|
+
slideIndex: number;
|
|
5166
|
+
} | {
|
|
5167
|
+
kind: 'element';
|
|
5168
|
+
slideIndex: number;
|
|
5169
|
+
elementId: string;
|
|
5170
|
+
};
|
|
5171
|
+
/**
|
|
5172
|
+
* A pure updater over the deck's slides. It receives a deep clone of the
|
|
5173
|
+
* current slides (mutation-safe) and returns the next slides array. The bridge
|
|
5174
|
+
* commits the returned array as ONE history entry.
|
|
5175
|
+
*/
|
|
5176
|
+
type PptxAiSlidesUpdater = (slides: PptxSlide[]) => PptxSlide[];
|
|
5177
|
+
/**
|
|
5178
|
+
* A pure updater over the whole parsed deck ({@link PptxData}). Mirrors the
|
|
5179
|
+
* `pptx-viewer-mcp` tool model (data in, mutated data out) so presentation-level
|
|
5180
|
+
* MCP tools (metadata, sections, canvas size, presentation properties, layouts)
|
|
5181
|
+
* can be committed as ONE undoable history entry through {@link
|
|
5182
|
+
* PptxAiBridge.applyDeckData}. Optional: bindings that only track slide/theme
|
|
5183
|
+
* state can omit it, in which case those presentation-level tools report that
|
|
5184
|
+
* they are unavailable in this viewer while every slide/theme tool still works.
|
|
5185
|
+
*/
|
|
5186
|
+
type PptxAiDataUpdater = (data: PptxData) => PptxData;
|
|
5187
|
+
/** Field-level updates for a single element, mirroring the MCP update vocab. */
|
|
5188
|
+
interface PptxAiElementUpdate {
|
|
5189
|
+
x?: number;
|
|
5190
|
+
y?: number;
|
|
5191
|
+
width?: number;
|
|
5192
|
+
height?: number;
|
|
5193
|
+
rotation?: number;
|
|
5194
|
+
opacity?: number;
|
|
5195
|
+
hidden?: boolean;
|
|
5196
|
+
flipHorizontal?: boolean;
|
|
5197
|
+
flipVertical?: boolean;
|
|
5198
|
+
text?: string;
|
|
5199
|
+
fontSize?: number;
|
|
5200
|
+
fontFamily?: string;
|
|
5201
|
+
fontColor?: string;
|
|
5202
|
+
bold?: boolean;
|
|
5203
|
+
italic?: boolean;
|
|
5204
|
+
underline?: boolean;
|
|
5205
|
+
align?: 'left' | 'center' | 'right' | 'justify';
|
|
5206
|
+
fillColor?: string;
|
|
5207
|
+
strokeColor?: string;
|
|
5208
|
+
strokeWidth?: number;
|
|
5209
|
+
}
|
|
5210
|
+
/**
|
|
5211
|
+
* Implemented by each binding to expose its live editor to the AI core.
|
|
5212
|
+
*
|
|
5213
|
+
* Read methods must be cheap and synchronous. Write methods must route through
|
|
5214
|
+
* the binding's editor-history layer so AI edits are undoable like manual ones.
|
|
5215
|
+
*/
|
|
5216
|
+
interface PptxAiBridge {
|
|
5217
|
+
/** Return a summary of the whole deck. */
|
|
5218
|
+
getDeckMeta(): PptxAiDeckMeta;
|
|
5219
|
+
/** Return the deck's slides. Callers must not mutate the returned array. */
|
|
5220
|
+
getSlides(): PptxSlide[];
|
|
5221
|
+
/** Return the zero-based index of the active slide. */
|
|
5222
|
+
getActiveSlideIndex(): number;
|
|
5223
|
+
/** Return the resolved presentation theme, when available. */
|
|
5224
|
+
getTheme(): PptxTheme | undefined;
|
|
5225
|
+
/** Return the underlying core handler, when the binding exposes one. */
|
|
5226
|
+
getHandler(): PptxHandler | undefined;
|
|
5227
|
+
/** Navigate the viewer to a slide by zero-based index. */
|
|
5228
|
+
goToSlide(index: number): void;
|
|
5229
|
+
/** Select the given elements on a slide (empty array clears selection). */
|
|
5230
|
+
selectElements(slideIndex: number, elementIds: string[]): void;
|
|
5231
|
+
/**
|
|
5232
|
+
* Apply a slides updater as a single, atomic, undoable history entry. The
|
|
5233
|
+
* binding is responsible for cloning current slides before calling
|
|
5234
|
+
* `updater` and for installing the result.
|
|
5235
|
+
*/
|
|
5236
|
+
applySlidesUpdate(updater: PptxAiSlidesUpdater, label: string): void;
|
|
5237
|
+
/** Apply field updates to one element as a single history entry. */
|
|
5238
|
+
updateElement(slideIndex: number, elementId: string, updates: PptxAiElementUpdate): void;
|
|
5239
|
+
/** Apply partial theme updates as a single history entry. */
|
|
5240
|
+
applyTheme(updates: Partial<PptxTheme>): void;
|
|
5241
|
+
/**
|
|
5242
|
+
* Return the full parsed {@link PptxData} for the open deck, with the live
|
|
5243
|
+
* (edited) slides and theme overlaid. Enables `pptx-viewer-mcp` tools that
|
|
5244
|
+
* read presentation-level state (metadata, sections, layouts, presentation
|
|
5245
|
+
* properties). Optional: when absent, the AI core synthesises a minimal
|
|
5246
|
+
* PptxData from slides + dimensions, which is enough for every slide/theme
|
|
5247
|
+
* tool but not for presentation-level reads.
|
|
5248
|
+
*/
|
|
5249
|
+
getDeckData?(): PptxData | undefined;
|
|
5250
|
+
/**
|
|
5251
|
+
* Commit a whole-deck {@link PptxData} mutation as one undoable history entry.
|
|
5252
|
+
* Used to apply presentation-level MCP tool results (metadata, sections,
|
|
5253
|
+
* canvas size, presentation properties, layouts). Optional: when absent,
|
|
5254
|
+
* those tools report they are not supported in this viewer; slide/theme tools
|
|
5255
|
+
* are unaffected (they route through {@link PptxAiBridge.applySlidesUpdate}
|
|
5256
|
+
* and {@link PptxAiBridge.applyTheme}).
|
|
5257
|
+
*/
|
|
5258
|
+
applyDeckData?(updater: PptxAiDataUpdater, label: string): void;
|
|
5259
|
+
/**
|
|
5260
|
+
* Return the slides / elements the user has scoped the assistant to, if any.
|
|
5261
|
+
* When present and non-empty, the context builder tells the model to focus on
|
|
5262
|
+
* exactly these targets. Optional so existing bridges satisfy the contract
|
|
5263
|
+
* without change; a bridge that does not implement it behaves as before (no
|
|
5264
|
+
* focus scoping).
|
|
5265
|
+
*/
|
|
5266
|
+
getFocusedTargets?(): PptxAiFocusedTarget[];
|
|
5267
|
+
/** Surface a transient message in the host UI (toast / status line). */
|
|
5268
|
+
notify?(message: string, level?: PptxAiNotifyLevel): void;
|
|
5269
|
+
}
|
|
5270
|
+
|
|
5271
|
+
/**
|
|
5272
|
+
* {@link ProposalStore} - the staging area for AI-proposed writes.
|
|
5273
|
+
*
|
|
5274
|
+
* When the write policy is `'stage'` / `'approve'`, an edit tool does not touch
|
|
5275
|
+
* the document directly. Instead it registers a {@link PptxAiSlidesUpdater} here
|
|
5276
|
+
* as a {@link StagedProposal}, together with a human-readable diff summary. The
|
|
5277
|
+
* host UI can then present the pending change and, on accept, apply it through
|
|
5278
|
+
* {@link PptxAiBridge.applySlidesUpdate} as ONE undoable history entry (or drop
|
|
5279
|
+
* it on revert). This keeps AI edits reviewable and atomic.
|
|
5280
|
+
*/
|
|
5281
|
+
|
|
5282
|
+
/** A pending, not-yet-applied write. */
|
|
5283
|
+
interface StagedProposal {
|
|
5284
|
+
/** Stable id for accept/revert. */
|
|
5285
|
+
id: string;
|
|
5286
|
+
/** Short label used as the history-entry name when applied. */
|
|
5287
|
+
label: string;
|
|
5288
|
+
/** Human-readable change lines (from {@link diffSlides}). */
|
|
5289
|
+
summary: string[];
|
|
5290
|
+
/** Epoch ms when staged. */
|
|
5291
|
+
createdAt: number;
|
|
5292
|
+
/** The updater to run against the live deck on apply. */
|
|
5293
|
+
updater: PptxAiSlidesUpdater;
|
|
5294
|
+
}
|
|
5295
|
+
/** Public (serialisable) view of a proposal, without the updater closure. */
|
|
5296
|
+
interface ProposalView {
|
|
5297
|
+
id: string;
|
|
5298
|
+
label: string;
|
|
5299
|
+
summary: string[];
|
|
5300
|
+
createdAt: number;
|
|
5301
|
+
}
|
|
5302
|
+
|
|
5303
|
+
/**
|
|
5304
|
+
* Persistent chat-history store for the AI assistant panel.
|
|
5305
|
+
*
|
|
5306
|
+
* The store is IndexedDB-first: {@link createChatHistoryStore} opens IndexedDB
|
|
5307
|
+
* on first use and, when that global is missing or fails to open (private mode,
|
|
5308
|
+
* blocked, or a non-DOM environment), transparently falls back to localStorage.
|
|
5309
|
+
* Both backends expose the identical {@link PptxAiChatStore} surface so callers
|
|
5310
|
+
* never branch on which one is live.
|
|
5311
|
+
*
|
|
5312
|
+
* All browser globals are read lazily from inside methods, so importing this
|
|
5313
|
+
* module in Node (SSR / tests) never throws.
|
|
5314
|
+
*/
|
|
5315
|
+
|
|
5316
|
+
/** A chat conversation persisted for later resumption. */
|
|
5317
|
+
interface PptxAiStoredChat {
|
|
5318
|
+
/** Stable id (also the storage key). */
|
|
5319
|
+
id: string;
|
|
5320
|
+
/** Human-readable title (usually derived from the first user message). */
|
|
5321
|
+
title: string;
|
|
5322
|
+
/** Deck this chat is scoped to, when known. Enables per-deck listing. */
|
|
5323
|
+
deckId?: string;
|
|
5324
|
+
/** Full UI-message transcript. */
|
|
5325
|
+
messages: PptxAiUIMessage[];
|
|
5326
|
+
/** Epoch ms when first saved. */
|
|
5327
|
+
createdAt: number;
|
|
5328
|
+
/** Epoch ms of the most recent save. */
|
|
5329
|
+
updatedAt: number;
|
|
5330
|
+
}
|
|
5331
|
+
/** Lightweight listing entry (no message bodies) for the history sidebar. */
|
|
5332
|
+
interface PptxAiChatSummary {
|
|
5333
|
+
id: string;
|
|
5334
|
+
title: string;
|
|
5335
|
+
deckId?: string;
|
|
5336
|
+
createdAt: number;
|
|
5337
|
+
updatedAt: number;
|
|
5338
|
+
messageCount: number;
|
|
5339
|
+
}
|
|
5340
|
+
/** Storage-agnostic chat history API. */
|
|
5341
|
+
interface PptxAiChatStore {
|
|
5342
|
+
/** List chat summaries newest-first, optionally filtered by deck. */
|
|
5343
|
+
listChats(opts?: {
|
|
5344
|
+
deckId?: string;
|
|
5345
|
+
}): Promise<PptxAiChatSummary[]>;
|
|
5346
|
+
/** Load one full chat, or null when it does not exist. */
|
|
5347
|
+
loadChat(id: string): Promise<PptxAiStoredChat | null>;
|
|
5348
|
+
/** Upsert a chat. Always refreshes `updatedAt` (and `createdAt` if unset). */
|
|
5349
|
+
saveChat(chat: PptxAiStoredChat): Promise<void>;
|
|
5350
|
+
/** Delete one chat by id (no-op when absent). */
|
|
5351
|
+
deleteChat(id: string): Promise<void>;
|
|
5352
|
+
/** Delete every chat, or every chat for one deck when `deckId` is given. */
|
|
5353
|
+
clearChats(opts?: {
|
|
5354
|
+
deckId?: string;
|
|
5355
|
+
}): Promise<void>;
|
|
5356
|
+
}
|
|
5357
|
+
|
|
5358
|
+
/**
|
|
5359
|
+
* Framework-agnostic helpers that flatten an AI SDK `UIMessage` into the small
|
|
5360
|
+
* set of parts a chat panel actually renders: assistant/user text and tool-call
|
|
5361
|
+
* cards. Every binding's panel (React, Vue, Angular, Svelte, Vanilla) consumes
|
|
5362
|
+
* these so the transcript model stays identical across bindings.
|
|
5363
|
+
*
|
|
5364
|
+
* The part-kind checks are pure structural facts of the AI SDK UI message
|
|
5365
|
+
* protocol (a text part has `type === 'text'`; a tool part's `type` is
|
|
5366
|
+
* `tool-<name>`; a dynamic tool part has `type === 'dynamic-tool'`), so this
|
|
5367
|
+
* module needs only a type-only import of `UIMessage` and NEVER pulls the `ai`
|
|
5368
|
+
* runtime. It is therefore safe to expose from the main `pptx-viewer-shared/ai`
|
|
5369
|
+
* barrel without forcing the optional peer to load.
|
|
5370
|
+
*/
|
|
5371
|
+
|
|
5372
|
+
/** A run of assistant/user prose. */
|
|
5373
|
+
interface RenderableTextPart {
|
|
5374
|
+
kind: 'text';
|
|
5375
|
+
text: string;
|
|
5376
|
+
}
|
|
5377
|
+
/** One tool invocation, in any of its streaming states. */
|
|
5378
|
+
interface RenderableToolPart {
|
|
5379
|
+
kind: 'tool';
|
|
5380
|
+
toolName: string;
|
|
5381
|
+
toolCallId: string;
|
|
5382
|
+
state: 'input-streaming' | 'input-available' | 'output-available' | 'output-error' | string;
|
|
5383
|
+
input: unknown;
|
|
5384
|
+
output: unknown;
|
|
5385
|
+
errorText?: string;
|
|
5386
|
+
}
|
|
5387
|
+
type RenderablePart = RenderableTextPart | RenderableToolPart;
|
|
5388
|
+
|
|
5389
|
+
/**
|
|
5390
|
+
* A coarse icon category for a tool activity, so every binding can pick a
|
|
5391
|
+
* matching icon from its own icon set (React uses lucide, etc.) without the
|
|
5392
|
+
* shared layer depending on any icon library.
|
|
5393
|
+
*/
|
|
5394
|
+
type ToolActivityIcon = 'view' | 'text' | 'shape' | 'theme' | 'table' | 'slide' | 'chart' | 'move' | 'delete' | 'search' | 'nav' | 'animation' | 'notes' | 'tool';
|
|
5395
|
+
|
|
5396
|
+
/**
|
|
5397
|
+
* Pure derivation of the on-canvas focus target a running tool refers to, so
|
|
5398
|
+
* the viewer can behave like a live collaborator: as the assistant reads or
|
|
5399
|
+
* edits the deck, the canvas navigates to the relevant slide and highlights the
|
|
5400
|
+
* element(s) the tool is touching.
|
|
5401
|
+
*
|
|
5402
|
+
* The mapping is intentionally structural (it reads well-known input fields:
|
|
5403
|
+
* `slideIndex`, `elementId`, `elementIdA/B`, `elementIds`, `slideIndexes`,
|
|
5404
|
+
* `newOrder`) and framework-agnostic, so every binding drives the same live
|
|
5405
|
+
* focus. It NEVER performs navigation itself; it only says "what to look at".
|
|
5406
|
+
*/
|
|
5407
|
+
/** The slide / element(s) a tool invocation is focused on. */
|
|
5408
|
+
interface ToolCanvasTarget {
|
|
5409
|
+
/** Zero-based slide index to navigate to, when the tool names one. */
|
|
5410
|
+
slideIndex?: number;
|
|
5411
|
+
/** Element ids on that slide to highlight (may be empty for slide-level tools). */
|
|
5412
|
+
elementIds: string[];
|
|
5413
|
+
}
|
|
5414
|
+
|
|
4658
5415
|
/**
|
|
4659
5416
|
* The canonical English UI-string dictionary for pptx-viewer. None of the
|
|
4660
5417
|
* React/Vue/Angular binding packages ship translations themselves - each
|
|
@@ -4721,6 +5478,157 @@ declare class AccessibilityService {
|
|
|
4721
5478
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AccessibilityService>;
|
|
4722
5479
|
}
|
|
4723
5480
|
|
|
5481
|
+
/**
|
|
5482
|
+
* Pure helpers that turn the live canvas selection into AI "focused targets"
|
|
5483
|
+
* (the slides / elements the assistant should scope its work to) and into the
|
|
5484
|
+
* short chip labels shown in the AI panel. Angular replica of React's
|
|
5485
|
+
* `hooks/ai/focus-targets.ts`; kept in-binding (rather than in shared) because
|
|
5486
|
+
* it is a tiny pure helper and the shared package is consumed read-only here.
|
|
5487
|
+
*
|
|
5488
|
+
* Shared by {@link AiPanelStore} (so `getFocusedTargets` reflects live
|
|
5489
|
+
* selection) and by the focus-chip bar, so both agree on "the current focus".
|
|
5490
|
+
*/
|
|
5491
|
+
|
|
5492
|
+
/** The selection inputs the focus derivation reads. */
|
|
5493
|
+
interface FocusSelectionInput {
|
|
5494
|
+
activeSlideIndex: number;
|
|
5495
|
+
selectedElementIds: readonly string[];
|
|
5496
|
+
selectedElementId: string | null;
|
|
5497
|
+
}
|
|
5498
|
+
/** One element ring to draw on the canvas: an explicit pick or a live-tool focus. */
|
|
5499
|
+
interface AiCanvasHighlight {
|
|
5500
|
+
slideIndex: number;
|
|
5501
|
+
elementId: string;
|
|
5502
|
+
/** `pick` = persistent user pick; `active` = transient AI-is-working ring. */
|
|
5503
|
+
variant: 'pick' | 'active';
|
|
5504
|
+
}
|
|
5505
|
+
/**
|
|
5506
|
+
* Derive focused targets from the live selection: one `element` target per
|
|
5507
|
+
* selected element on the active slide, or a single whole-`slide` target when
|
|
5508
|
+
* nothing is selected. Order and multiplicity are preserved (multi-select and
|
|
5509
|
+
* tables included) so callers can detect e.g. "exactly two tables".
|
|
5510
|
+
*/
|
|
5511
|
+
declare function computeFocusTargets(input: FocusSelectionInput): PptxAiFocusedTarget[];
|
|
5512
|
+
/** A renderable focus chip. `title` carries the full element id for hover. */
|
|
5513
|
+
interface FocusChip {
|
|
5514
|
+
key: string;
|
|
5515
|
+
label: string;
|
|
5516
|
+
title: string;
|
|
5517
|
+
}
|
|
5518
|
+
/**
|
|
5519
|
+
* Build display chips for the given targets. Slide targets read `Slide N`;
|
|
5520
|
+
* element targets read `<Type> <n>` (a friendly short label, full id on hover),
|
|
5521
|
+
* or `<Type> (missing)` when the element is no longer on the slide.
|
|
5522
|
+
*/
|
|
5523
|
+
declare function focusTargetChips(targets: readonly PptxAiFocusedTarget[], slides: readonly PptxSlide[]): FocusChip[];
|
|
5524
|
+
/** Whether the focus is exactly two table elements (drives the merge action). */
|
|
5525
|
+
declare function isTwoTableFocus(targets: readonly PptxAiFocusedTarget[], slides: readonly PptxSlide[]): false | {
|
|
5526
|
+
slideIndex: number;
|
|
5527
|
+
elementIdA: string;
|
|
5528
|
+
elementIdB: string;
|
|
5529
|
+
};
|
|
5530
|
+
|
|
5531
|
+
/** Live selection accessors the store reads to derive the follow-selection focus. */
|
|
5532
|
+
interface AiPanelSelectionAccessors {
|
|
5533
|
+
activeSlideIndex(): number;
|
|
5534
|
+
selectedElementIds(): readonly string[];
|
|
5535
|
+
selectedElementId(): string | null;
|
|
5536
|
+
/** The primary selected element, for building the "Fix with AI" directive. */
|
|
5537
|
+
selectedElement(): PptxElement | null;
|
|
5538
|
+
}
|
|
5539
|
+
declare class AiPanelStore {
|
|
5540
|
+
/**
|
|
5541
|
+
* Optional: `inject()` needs an active injection context, which plain
|
|
5542
|
+
* `new AiPanelStore()` (used by this store's unit tests, deliberately
|
|
5543
|
+
* bypassing TestBed for speed) does not provide. Falls back to no automatic
|
|
5544
|
+
* timer cleanup when constructed outside DI, which is fine for tests.
|
|
5545
|
+
*/
|
|
5546
|
+
private readonly destroyRef;
|
|
5547
|
+
private accessors;
|
|
5548
|
+
/** Pinned focus override (null follows the live selection). */
|
|
5549
|
+
readonly pinnedFocus: _angular_core.WritableSignal<PptxAiFocusedTarget[] | null>;
|
|
5550
|
+
/**
|
|
5551
|
+
* One-shot composer prefill. `nonce` bumps on every ask/fix so the composer
|
|
5552
|
+
* applies `text` (and focuses) even when `text` is empty and unchanged.
|
|
5553
|
+
*/
|
|
5554
|
+
readonly prefill: _angular_core.WritableSignal<{
|
|
5555
|
+
text: string;
|
|
5556
|
+
nonce: number;
|
|
5557
|
+
}>;
|
|
5558
|
+
/** True while the user is picking element(s) on the canvas for the assistant. */
|
|
5559
|
+
readonly pickMode: _angular_core.WritableSignal<boolean>;
|
|
5560
|
+
/** The elements the user has explicitly handed to the assistant. */
|
|
5561
|
+
readonly pickTargets: _angular_core.WritableSignal<PptxAiFocusedTarget[]>;
|
|
5562
|
+
/** The element(s) a running tool is currently touching (transient). */
|
|
5563
|
+
private readonly toolFocus;
|
|
5564
|
+
private readonly flashTick;
|
|
5565
|
+
private flashTimer;
|
|
5566
|
+
/**
|
|
5567
|
+
* Canvas change animator: the shared subscribe/publish bus that carries "these
|
|
5568
|
+
* elements just changed, animate them" from the AI apply path (the bridge's
|
|
5569
|
+
* write choke point calls {@link publishAiChange}) to the panel, which reveals
|
|
5570
|
+
* the slide and hands the batch to the on-canvas overlay via
|
|
5571
|
+
* {@link showChangeBatch}. Owned here (viewer-scoped) so it survives the panel
|
|
5572
|
+
* opening/closing while the write path stays alive. Mirrors React's
|
|
5573
|
+
* `session.changeAnimator`; Angular drives the same shared animator from the
|
|
5574
|
+
* bridge because its vanilla-chat controller does not surface the session.
|
|
5575
|
+
*/
|
|
5576
|
+
readonly changeAnimator: AiChangeAnimator;
|
|
5577
|
+
/** The batch of just-applied element changes the canvas overlay should play. */
|
|
5578
|
+
readonly changeBatch: _angular_core.WritableSignal<AiChangeBatch | null>;
|
|
5579
|
+
constructor();
|
|
5580
|
+
/** Wire the live selection accessors (called once by the viewer component). */
|
|
5581
|
+
bind(accessors: AiPanelSelectionAccessors): void;
|
|
5582
|
+
/** Focused targets derived live from the current canvas selection. */
|
|
5583
|
+
readonly liveFocusTargets: _angular_core.Signal<PptxAiFocusedTarget[]>;
|
|
5584
|
+
/** Whether there are explicit picks (they win over a pin / live selection). */
|
|
5585
|
+
readonly hasPicks: _angular_core.Signal<boolean>;
|
|
5586
|
+
/** The targets the panel + bridge should actually scope to. */
|
|
5587
|
+
readonly effectiveTargets: _angular_core.Signal<PptxAiFocusedTarget[]>;
|
|
5588
|
+
/** True when a pin is in force (and no picks override it). */
|
|
5589
|
+
readonly isPinned: _angular_core.Signal<boolean>;
|
|
5590
|
+
/**
|
|
5591
|
+
* Focused targets for the bridge's `getFocusedTargets`: picks beat a pin,
|
|
5592
|
+
* which beats the live selection.
|
|
5593
|
+
*/
|
|
5594
|
+
getFocusedTargets(): PptxAiFocusedTarget[];
|
|
5595
|
+
pinFocus(): void;
|
|
5596
|
+
clearPinnedFocus(): void;
|
|
5597
|
+
/** Open the panel scoped to the current selection, empty composer (focused). */
|
|
5598
|
+
askAboutSelection(): void;
|
|
5599
|
+
/** Open the panel scoped to the current selection, prefilled fix directive. */
|
|
5600
|
+
fixSelection(): void;
|
|
5601
|
+
startPicking(): void;
|
|
5602
|
+
stopPicking(): void;
|
|
5603
|
+
/** Add one clicked canvas element to the pick set (dedupe by id). */
|
|
5604
|
+
addPick(slideIndex: number, elementId: string): void;
|
|
5605
|
+
/** Empty the pick set and leave pick mode. */
|
|
5606
|
+
clearPicks(): void;
|
|
5607
|
+
/**
|
|
5608
|
+
* Flash a transient "the AI is working on this" highlight for a running tool,
|
|
5609
|
+
* and enable colour tweening for a short settle window. Pass `null` to just
|
|
5610
|
+
* enable tweening (e.g. a theme-colour edit with no single element target).
|
|
5611
|
+
*/
|
|
5612
|
+
flashToolTarget(target: ToolCanvasTarget | null): void;
|
|
5613
|
+
/** Element rings the canvas should draw (picks + the live tool focus). */
|
|
5614
|
+
readonly canvasHighlights: _angular_core.Signal<AiCanvasHighlight[]>;
|
|
5615
|
+
/** True while the canvas should tween colour changes (AI is active). */
|
|
5616
|
+
readonly canvasAnimating: _angular_core.Signal<boolean>;
|
|
5617
|
+
/** Apply (or clear) the change batch the panel wants the canvas to animate. */
|
|
5618
|
+
showChangeBatch(batch: AiChangeBatch | null): void;
|
|
5619
|
+
/**
|
|
5620
|
+
* Publish an applied AI edit to the change animator (called from the bridge's
|
|
5621
|
+
* write choke point with the deck slides before + after the edit). The panel's
|
|
5622
|
+
* subscription reveals the slide and plays the overlay; a no-op edit or the
|
|
5623
|
+
* host disabling the animation publishes nothing.
|
|
5624
|
+
*/
|
|
5625
|
+
publishAiChange(before: readonly PptxSlide[], after: readonly PptxSlide[]): void;
|
|
5626
|
+
/** Apply the host's change-animation config (duration / colour / toggles). */
|
|
5627
|
+
configureChangeAnimation(config?: AiChangeAnimationConfig): void;
|
|
5628
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiPanelStore, never>;
|
|
5629
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AiPanelStore>;
|
|
5630
|
+
}
|
|
5631
|
+
|
|
4724
5632
|
/** Lifecycle status of the autosave engine (mirrors React's `AutosaveStatus`). */
|
|
4725
5633
|
type AutosaveStatus = {
|
|
4726
5634
|
state: 'idle';
|
|
@@ -5259,6 +6167,8 @@ declare class LoadContentService {
|
|
|
5259
6167
|
readonly theme: _angular_core.WritableSignal<PptxTheme | undefined>;
|
|
5260
6168
|
/** Resolved colour map for the presentation theme (scheme key → hex). */
|
|
5261
6169
|
readonly themeColorMap: _angular_core.WritableSignal<Record<string, string> | undefined>;
|
|
6170
|
+
/** Parsed table-style definitions from `ppt/tableStyles.xml` (banding/diagonals). */
|
|
6171
|
+
readonly tableStyleMap: _angular_core.WritableSignal<ParsedTableStyleMap | undefined>;
|
|
5262
6172
|
/** Slide masters (for placeholder/background resolution). */
|
|
5263
6173
|
readonly slideMasters: _angular_core.WritableSignal<PptxSlideMaster[]>;
|
|
5264
6174
|
/** Notes master, including its editable element tree. */
|
|
@@ -5305,6 +6215,12 @@ declare class LoadContentService {
|
|
|
5305
6215
|
constructor();
|
|
5306
6216
|
/** Serialise the current (loaded) presentation back to `.pptx` bytes. */
|
|
5307
6217
|
getContent(): Promise<Uint8Array>;
|
|
6218
|
+
/**
|
|
6219
|
+
* The loaded presentation's core handler, or `undefined` before a deck is
|
|
6220
|
+
* loaded. Exposed for the AI bridge ({@link PptxAiBridge.getHandler}) so the
|
|
6221
|
+
* assistant can reach low-level core APIs when needed.
|
|
6222
|
+
*/
|
|
6223
|
+
getHandler(): PptxHandler | undefined;
|
|
5308
6224
|
/**
|
|
5309
6225
|
* Serialise an explicit set of slides back to `.pptx` bytes (e.g. the
|
|
5310
6226
|
* editor's edited deck) using the loaded presentation's handler.
|
|
@@ -5674,8 +6590,15 @@ declare function getContainerStyle(el: PptxElement, zIndex: number): StyleMap;
|
|
|
5674
6590
|
/**
|
|
5675
6591
|
* Fill / stroke / corner-radius for shape-like elements. Returns an empty
|
|
5676
6592
|
* object when the element carries no shape styling.
|
|
6593
|
+
*
|
|
6594
|
+
* `animatesFill` / `animatesStroke` come from an active `p:animClr` colour
|
|
6595
|
+
* animation during presentation playback: when set, the static paint is dropped
|
|
6596
|
+
* so the wrapper's colour keyframes (applied as an `animation` on this same box)
|
|
6597
|
+
* own `background-color` / `border-color`. Mirrors the Vue port's
|
|
6598
|
+
* `getShapeFillStrokeStyle` and React's `getShapeVisualStyle`. Absent/false
|
|
6599
|
+
* keeps the static paint, so editor / read-only rendering is unaffected.
|
|
5677
6600
|
*/
|
|
5678
|
-
declare function getShapeFillStrokeStyle(el: PptxElement): StyleMap;
|
|
6601
|
+
declare function getShapeFillStrokeStyle(el: PptxElement, parentGroupFill?: ShapeStyle, animatesFill?: boolean, animatesStroke?: boolean): StyleMap;
|
|
5679
6602
|
/**
|
|
5680
6603
|
* Text block style for elements that carry text. Mirrors the essentials of the
|
|
5681
6604
|
* React `getTextStyleForElement`.
|
|
@@ -5782,8 +6705,14 @@ interface TableRowViewModel {
|
|
|
5782
6705
|
* resolving spans, applying banding (lowest priority) beneath the explicit cell
|
|
5783
6706
|
* style, and extracting diagonal-border info. Returns an empty array when
|
|
5784
6707
|
* `tableData` is absent.
|
|
6708
|
+
*
|
|
6709
|
+
* `styleCtx` (parsed table-style map + theme colour/font scheme) is threaded
|
|
6710
|
+
* into both the banding resolver and the diagonal-border resolver so
|
|
6711
|
+
* table-style-inherited banding, fonts, and section diagonals apply; per-cell
|
|
6712
|
+
* explicit styles still win. When omitted, both fall back to the hardcoded
|
|
6713
|
+
* defaults (unchanged from before).
|
|
5785
6714
|
*/
|
|
5786
|
-
declare function buildTableViewModel(el: PptxElement): TableRowViewModel[];
|
|
6715
|
+
declare function buildTableViewModel(el: PptxElement, styleCtx?: TableStyleContext): TableRowViewModel[];
|
|
5787
6716
|
/** Compute `<col>` width styles from the column-widths array (0-1 fractions). */
|
|
5788
6717
|
declare function buildColStyles(el: PptxElement): StyleMap[];
|
|
5789
6718
|
|
|
@@ -5812,6 +6741,13 @@ declare class TableRendererComponent {
|
|
|
5812
6741
|
private readonly injector;
|
|
5813
6742
|
/** Shared cell-selection state (present only inside the editor subtree). */
|
|
5814
6743
|
private readonly selectionSvc;
|
|
6744
|
+
/**
|
|
6745
|
+
* Deck load state (present in the viewer subtree). Supplies the parsed
|
|
6746
|
+
* table-style map + theme colour/font scheme so table-style-inherited banding,
|
|
6747
|
+
* fonts, and section diagonals resolve. Absent (optional) in standalone
|
|
6748
|
+
* thumbnail/export renderers, where the hardcoded defaults are used.
|
|
6749
|
+
*/
|
|
6750
|
+
private readonly loader;
|
|
5815
6751
|
/** The table element to render. Must be `type === 'table'`. */
|
|
5816
6752
|
readonly element: _angular_core.InputSignal<PptxElement>;
|
|
5817
6753
|
/** Whether inline cell editing / selection / resize is enabled. */
|
|
@@ -5829,6 +6765,12 @@ declare class TableRendererComponent {
|
|
|
5829
6765
|
private readonly cellInput;
|
|
5830
6766
|
/** Pre-computed `<col>` styles for the colgroup. */
|
|
5831
6767
|
readonly colStyles: _angular_core.Signal<StyleMap[]>;
|
|
6768
|
+
/**
|
|
6769
|
+
* Table-style context (parsed style map + theme colour/font scheme) from the
|
|
6770
|
+
* deck loader, or `undefined` outside the viewer subtree. `fontScheme` lets a
|
|
6771
|
+
* table style's `a:fontRef@idx` resolve to a concrete font family.
|
|
6772
|
+
*/
|
|
6773
|
+
private readonly styleCtx;
|
|
5832
6774
|
/** Projected view-model rows with merged-cell resolution + banding applied. */
|
|
5833
6775
|
readonly rows: _angular_core.Signal<TableRowViewModel[]>;
|
|
5834
6776
|
/** Column widths (0-1 fractions) for the resize overlay. */
|
|
@@ -5979,7 +6921,7 @@ declare class ViewerCollabCursorService {
|
|
|
5979
6921
|
}
|
|
5980
6922
|
|
|
5981
6923
|
/** Seed values for the Share dialog's start form. */
|
|
5982
|
-
interface ShareDefaults
|
|
6924
|
+
interface ShareDefaults {
|
|
5983
6925
|
roomId?: string;
|
|
5984
6926
|
userName?: string;
|
|
5985
6927
|
serverUrl?: string;
|
|
@@ -5987,7 +6929,7 @@ interface ShareDefaults$1 {
|
|
|
5987
6929
|
/** Host accessors/emitters a service cannot own (inputs + outputs). */
|
|
5988
6930
|
interface CollaborationSessionHost {
|
|
5989
6931
|
readonly authorName: () => string | undefined;
|
|
5990
|
-
readonly shareDefaults: () => ShareDefaults
|
|
6932
|
+
readonly shareDefaults: () => ShareDefaults | undefined;
|
|
5991
6933
|
readonly getTemplateElements: () => TemplateElementsBySlideId;
|
|
5992
6934
|
/** Apply a remote peer's slide set to the editable deck (echo-guarded in the service). */
|
|
5993
6935
|
readonly applyRemoteSlides: (slides: PptxSlide[]) => void;
|
|
@@ -6043,7 +6985,7 @@ declare class ViewerCollaborationSessionService {
|
|
|
6043
6985
|
* `userName` falling back to `authorName` (then "You") so the local user's
|
|
6044
6986
|
* name pre-fills the form. Mirrors React/Vue.
|
|
6045
6987
|
*/
|
|
6046
|
-
readonly shareDialogDefaults: _angular_core.Signal<ShareDefaults
|
|
6988
|
+
readonly shareDialogDefaults: _angular_core.Signal<ShareDefaults>;
|
|
6047
6989
|
/**
|
|
6048
6990
|
* Connect / disconnect real-time collaboration when the host `collaboration`
|
|
6049
6991
|
* input changes (called from the component's effect).
|
|
@@ -6848,11 +7790,11 @@ declare class PowerPointViewerComponent {
|
|
|
6848
7790
|
*/
|
|
6849
7791
|
readonly onOpenFile: _angular_core.InputSignal<(() => void) | undefined>;
|
|
6850
7792
|
/**
|
|
6851
|
-
* Opt in to the
|
|
6852
|
-
*
|
|
6853
|
-
*
|
|
6854
|
-
*
|
|
6855
|
-
*
|
|
7793
|
+
* Opt in to the Three.js SmartArt renderer. When `true`, SmartArt diagrams
|
|
7794
|
+
* render as extruded 3D blocks on a WebGL canvas instead of flat SVG.
|
|
7795
|
+
* Requires the optional `three` peer dependency; when it is not installed
|
|
7796
|
+
* (or the diagram has no geometry), the viewer transparently falls back to
|
|
7797
|
+
* the SVG SmartArt renderer. Default `false`.
|
|
6856
7798
|
*/
|
|
6857
7799
|
readonly smartArt3D: _angular_core.InputSignal<boolean>;
|
|
6858
7800
|
/**
|
|
@@ -6861,6 +7803,14 @@ declare class PowerPointViewerComponent {
|
|
|
6861
7803
|
* ribbon tab id). Default `[]` hides nothing, matching prior behaviour.
|
|
6862
7804
|
*/
|
|
6863
7805
|
readonly hiddenActions: _angular_core.InputSignal<ToolbarActionId[]>;
|
|
7806
|
+
/**
|
|
7807
|
+
* Optional AI assistant configuration. When set, a Sparkles toggle appears in
|
|
7808
|
+
* the ribbon and opens a right-rail chat pane wired to the open deck. The
|
|
7809
|
+
* `ai` SDK is an optional peer; when it is not installed the pane shows an
|
|
7810
|
+
* "unavailable" notice instead. Absent by default (no AI UI). Mirrors React's
|
|
7811
|
+
* `ai` prop.
|
|
7812
|
+
*/
|
|
7813
|
+
readonly ai: _angular_core.InputSignal<PptxAiConfig | undefined>;
|
|
6864
7814
|
/** Fired when the active slide changes. */
|
|
6865
7815
|
readonly activeSlideChange: _angular_core.OutputEmitterRef<number>;
|
|
6866
7816
|
/** Fired when the unsaved-changes flag toggles. */
|
|
@@ -6914,6 +7864,8 @@ declare class PowerPointViewerComponent {
|
|
|
6914
7864
|
protected readonly fileIO: ViewerFileIOService;
|
|
6915
7865
|
protected readonly themeGallery: ViewerThemeGalleryService;
|
|
6916
7866
|
protected readonly canvasEditing: ViewerCanvasEditingService;
|
|
7867
|
+
/** Shared AI panel scope + on-canvas highlight store (pick mode, tool focus). */
|
|
7868
|
+
protected readonly aiPanelStore: AiPanelStore;
|
|
6917
7869
|
protected readonly collabCursor: ViewerCollabCursorService;
|
|
6918
7870
|
protected readonly docProperties: ViewerDocumentPropertiesService;
|
|
6919
7871
|
private readonly translateService;
|
|
@@ -7029,6 +7981,18 @@ declare class PowerPointViewerComponent {
|
|
|
7029
7981
|
protected readonly showSmartArtInsert: _angular_core.WritableSignal<boolean>;
|
|
7030
7982
|
/** The single selected element on the active slide (for the inspector). */
|
|
7031
7983
|
protected readonly selectedElement: _angular_core.Signal<PptxElement | null>;
|
|
7984
|
+
/** Whether the AI assistant pane is open (toggled from the ribbon Sparkles). */
|
|
7985
|
+
protected readonly aiPanelOpen: _angular_core.WritableSignal<boolean>;
|
|
7986
|
+
/** Whether the AI assistant toggle is shown (host supplied an `ai` config). */
|
|
7987
|
+
protected readonly aiEnabled: _angular_core.Signal<boolean>;
|
|
7988
|
+
/**
|
|
7989
|
+
* Stable {@link PptxAiBridge} exposing this viewer's live state + editor to
|
|
7990
|
+
* the AI core. Its three write choke points route through
|
|
7991
|
+
* {@link EditorStateService.applyReplacement}, so each AI edit is a single
|
|
7992
|
+
* undoable history entry. Built unconditionally (cheap); only consumed when
|
|
7993
|
+
* the host passes {@link ai}.
|
|
7994
|
+
*/
|
|
7995
|
+
protected readonly aiBridge: PptxAiBridge;
|
|
7032
7996
|
constructor();
|
|
7033
7997
|
/**
|
|
7034
7998
|
* Serialise the current presentation to `.pptx` bytes (imperative handle).
|
|
@@ -7045,6 +8009,13 @@ declare class PowerPointViewerComponent {
|
|
|
7045
8009
|
goTo(index: number): void;
|
|
7046
8010
|
goPrev(): void;
|
|
7047
8011
|
protected onCreatePresentation(templateId: string): void;
|
|
8012
|
+
/**
|
|
8013
|
+
* Route an AI theme edit (partial theme update) through the theme-gallery
|
|
8014
|
+
* service so it re-resolves slide colours and records ONE undoable entry,
|
|
8015
|
+
* mirroring how the Design tab applies a theme. Falls back to the current
|
|
8016
|
+
* colour/font scheme for whichever half the update omits.
|
|
8017
|
+
*/
|
|
8018
|
+
private applyAiTheme;
|
|
7048
8019
|
/**
|
|
7049
8020
|
* File > Options > Appearance selection handler. When a host supplies
|
|
7050
8021
|
* `onThemeChange` it owns persisting the choice; otherwise this falls back
|
|
@@ -7088,6 +8059,19 @@ declare class PowerPointViewerComponent {
|
|
|
7088
8059
|
getSlideCount(): number;
|
|
7089
8060
|
/** Whether the document has unsaved changes. */
|
|
7090
8061
|
isDirty(): boolean;
|
|
8062
|
+
/**
|
|
8063
|
+
* Canvas element press. While the AI panel is picking, the press hands the
|
|
8064
|
+
* element to the assistant (highlighted + added to the pick set) instead of
|
|
8065
|
+
* selecting it; otherwise it routes to the normal editor selection.
|
|
8066
|
+
*/
|
|
8067
|
+
protected onCanvasElementSelect(event: {
|
|
8068
|
+
id: string;
|
|
8069
|
+
additive: boolean;
|
|
8070
|
+
}): void;
|
|
8071
|
+
/** Context-menu "Ask AI about this": scope + open the assistant, empty composer. */
|
|
8072
|
+
protected onContextMenuAskAi(): void;
|
|
8073
|
+
/** Context-menu "Fix with AI": scope + open the assistant with a prefilled directive. */
|
|
8074
|
+
protected onContextMenuFixAi(): void;
|
|
7091
8075
|
/** Get the IDs of currently selected elements. */
|
|
7092
8076
|
getSelectedElementIds(): string[];
|
|
7093
8077
|
/** Programmatically select elements by their IDs. */
|
|
@@ -7181,7 +8165,7 @@ declare class PowerPointViewerComponent {
|
|
|
7181
8165
|
/** Resolve the live slide-stage element within `<main>`. */
|
|
7182
8166
|
private stageElement;
|
|
7183
8167
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PowerPointViewerComponent, never>;
|
|
7184
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PowerPointViewerComponent, "pptx-viewer", never, { "content": { "alias": "content"; "required": false; "isSignal": true; }; "fontsInput": { "alias": "fonts"; "required": false; "isSignal": true; }; "canEditInput": { "alias": "canEdit"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "defaultThemeKey": { "alias": "defaultThemeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "onThemeChange": { "alias": "onThemeChange"; "required": false; "isSignal": true; }; "defaultLocale": { "alias": "defaultLocale"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; "onLocaleChange": { "alias": "onLocaleChange"; "required": false; "isSignal": true; }; "accountAuth": { "alias": "accountAuth"; "required": false; "isSignal": true; }; "filePath": { "alias": "filePath"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "collaboration": { "alias": "collaboration"; "required": false; "isSignal": true; }; "authorName": { "alias": "authorName"; "required": false; "isSignal": true; }; "shareDefaults": { "alias": "shareDefaults"; "required": false; "isSignal": true; }; "onOpenFile": { "alias": "onOpenFile"; "required": false; "isSignal": true; }; "smartArt3D": { "alias": "smartArt3D"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; }, { "activeSlideChange": "activeSlideChange"; "dirtyChange": "dirtyChange"; "contentChange": "contentChange"; "propertiesChange": "propertiesChange"; "modeChange": "modeChange"; "zoomChange": "zoomChange"; "selectionChange": "selectionChange"; "slideCountChange": "slideCountChange"; "startCollaboration": "startCollaboration"; "stopCollaboration": "stopCollaboration"; }, never, never, true, never>;
|
|
8168
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PowerPointViewerComponent, "pptx-viewer", never, { "content": { "alias": "content"; "required": false; "isSignal": true; }; "fontsInput": { "alias": "fonts"; "required": false; "isSignal": true; }; "canEditInput": { "alias": "canEdit"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "defaultThemeKey": { "alias": "defaultThemeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "onThemeChange": { "alias": "onThemeChange"; "required": false; "isSignal": true; }; "defaultLocale": { "alias": "defaultLocale"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; "onLocaleChange": { "alias": "onLocaleChange"; "required": false; "isSignal": true; }; "accountAuth": { "alias": "accountAuth"; "required": false; "isSignal": true; }; "filePath": { "alias": "filePath"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "collaboration": { "alias": "collaboration"; "required": false; "isSignal": true; }; "authorName": { "alias": "authorName"; "required": false; "isSignal": true; }; "shareDefaults": { "alias": "shareDefaults"; "required": false; "isSignal": true; }; "onOpenFile": { "alias": "onOpenFile"; "required": false; "isSignal": true; }; "smartArt3D": { "alias": "smartArt3D"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; "ai": { "alias": "ai"; "required": false; "isSignal": true; }; }, { "activeSlideChange": "activeSlideChange"; "dirtyChange": "dirtyChange"; "contentChange": "contentChange"; "propertiesChange": "propertiesChange"; "modeChange": "modeChange"; "zoomChange": "zoomChange"; "selectionChange": "selectionChange"; "slideCountChange": "slideCountChange"; "startCollaboration": "startCollaboration"; "stopCollaboration": "stopCollaboration"; }, never, never, true, never>;
|
|
7185
8169
|
}
|
|
7186
8170
|
|
|
7187
8171
|
/** A selected chart sub-part, scoped to the chart element that owns it. */
|
|
@@ -7536,7 +8520,395 @@ declare class ZoomTargetService {
|
|
|
7536
8520
|
* `PowerPointViewerComponent`'s children (ribbon, slide canvas, inspector,
|
|
7537
8521
|
* dialogs, ...) rely on via `inject()`.
|
|
7538
8522
|
*/
|
|
7539
|
-
declare const POWER_POINT_VIEWER_PROVIDERS: readonly [typeof LoadContentService, typeof ExportService, typeof EditorStateService, typeof ChartPartSelectionService, typeof TableSelectionService, typeof EmbeddedFontsService, typeof CollaborationService, typeof AccessibilityService, typeof AutosaveService, typeof PrintService, typeof IsMobileService, typeof SmartArt3DService, typeof FieldContextService, typeof ZoomTargetService, typeof ViewerDialogsService, typeof ViewerCompareService, typeof ViewerExportService, typeof ViewerFindReplaceService, typeof ViewerCustomShowsService, typeof ViewerCollaborationSessionService, typeof ViewerCanvasEditingService, typeof ViewerCollabCursorService, typeof ViewerDocumentPropertiesService, typeof ViewerFileIOService, typeof ViewerFormatPainterService, typeof ViewerInspectorPanelService, typeof ViewerKeyboardService, typeof ViewerMobileSheetService, typeof ViewerOptionsService, typeof ViewerPresentationModeService, typeof ViewerThemeGalleryService, typeof ViewerTouchGesturesService, typeof ViewerZoomService];
|
|
8523
|
+
declare const POWER_POINT_VIEWER_PROVIDERS: readonly [typeof LoadContentService, typeof ExportService, typeof EditorStateService, typeof ChartPartSelectionService, typeof TableSelectionService, typeof EmbeddedFontsService, typeof CollaborationService, typeof AccessibilityService, typeof AutosaveService, typeof PrintService, typeof IsMobileService, typeof SmartArt3DService, typeof FieldContextService, typeof ZoomTargetService, typeof AiPanelStore, typeof ViewerDialogsService, typeof ViewerCompareService, typeof ViewerExportService, typeof ViewerFindReplaceService, typeof ViewerCustomShowsService, typeof ViewerCollaborationSessionService, typeof ViewerCanvasEditingService, typeof ViewerCollabCursorService, typeof ViewerDocumentPropertiesService, typeof ViewerFileIOService, typeof ViewerFormatPainterService, typeof ViewerInspectorPanelService, typeof ViewerKeyboardService, typeof ViewerMobileSheetService, typeof ViewerOptionsService, typeof ViewerPresentationModeService, typeof ViewerThemeGalleryService, typeof ViewerTouchGesturesService, typeof ViewerZoomService];
|
|
8524
|
+
|
|
8525
|
+
/** Lifecycle of the AI session bootstrap. */
|
|
8526
|
+
type AiChatInitState = 'checking' | 'unavailable' | 'ready' | 'error';
|
|
8527
|
+
declare class AiChatService {
|
|
8528
|
+
private readonly destroyRef;
|
|
8529
|
+
private controller;
|
|
8530
|
+
private unsubscribe;
|
|
8531
|
+
private started;
|
|
8532
|
+
/**
|
|
8533
|
+
* Tool call ids we have already reported to {@link toolTargetHandler}, so the
|
|
8534
|
+
* live on-canvas focus fires once per call as it first appears (the vanilla
|
|
8535
|
+
* controller has no `onToolCall` hook we can pass, so we derive tool activity
|
|
8536
|
+
* from the streamed snapshot instead).
|
|
8537
|
+
*/
|
|
8538
|
+
private readonly reportedToolCalls;
|
|
8539
|
+
private toolTargetHandler;
|
|
8540
|
+
/** Session bootstrap lifecycle. */
|
|
8541
|
+
readonly state: _angular_core.WritableSignal<AiChatInitState>;
|
|
8542
|
+
/** The current transcript. */
|
|
8543
|
+
readonly messages: _angular_core.WritableSignal<readonly PptxAiUIMessage[]>;
|
|
8544
|
+
/** The chat status (`ready` / `submitted` / `streaming` / `error`). */
|
|
8545
|
+
readonly status: _angular_core.WritableSignal<AiSdk.ChatStatus>;
|
|
8546
|
+
/** The last transport / streaming error, when any. */
|
|
8547
|
+
readonly error: _angular_core.WritableSignal<Error | undefined>;
|
|
8548
|
+
/** The bootstrap error (SDK missing / session build failed). */
|
|
8549
|
+
readonly initError: _angular_core.WritableSignal<Error | undefined>;
|
|
8550
|
+
/** The staged, not-yet-applied write proposals. */
|
|
8551
|
+
readonly proposals: _angular_core.WritableSignal<readonly ProposalView[]>;
|
|
8552
|
+
/** Whether a request is in flight (drives the composer send/stop toggle). */
|
|
8553
|
+
readonly isStreaming: _angular_core.Signal<boolean>;
|
|
8554
|
+
constructor();
|
|
8555
|
+
/**
|
|
8556
|
+
* Bootstrap the session for the given bridge + config. Idempotent: only the
|
|
8557
|
+
* first call takes effect (the panel calls it once when it opens).
|
|
8558
|
+
*/
|
|
8559
|
+
init(bridge: PptxAiBridge, config: PptxAiConfig): void;
|
|
8560
|
+
/**
|
|
8561
|
+
* Register a handler invoked as each tool call first appears, with the slide /
|
|
8562
|
+
* element(s) it references (or `null` for deck-wide tools). Lets the viewer
|
|
8563
|
+
* navigate + highlight the canvas so it mirrors the assistant in real time.
|
|
8564
|
+
*/
|
|
8565
|
+
setToolTargetHandler(handler: (target: ToolCanvasTarget | null) => void): void;
|
|
8566
|
+
/** Send a user message (no-op when empty or not ready). */
|
|
8567
|
+
send(text: string): void;
|
|
8568
|
+
/** Abort the in-flight request. */
|
|
8569
|
+
stop(): void;
|
|
8570
|
+
/** Clear the current error and return to the ready state. */
|
|
8571
|
+
clearError(): void;
|
|
8572
|
+
/** Accept one staged proposal (applies it as one undoable edit). */
|
|
8573
|
+
applyProposal(id: string): void;
|
|
8574
|
+
/** Reject one staged proposal without applying it. */
|
|
8575
|
+
rejectProposal(id: string): void;
|
|
8576
|
+
/** Accept every staged proposal in order (each its own undoable edit). */
|
|
8577
|
+
acceptAllProposals(): void;
|
|
8578
|
+
private applySnapshot;
|
|
8579
|
+
/**
|
|
8580
|
+
* Fire {@link toolTargetHandler} once per tool call as it first appears with a
|
|
8581
|
+
* resolved input, mirroring React's `onToolCall` -> `toolCanvasTarget` path
|
|
8582
|
+
* (the vanilla controller owns `onToolCall`, so we cannot hook it directly).
|
|
8583
|
+
*/
|
|
8584
|
+
private reportNewToolTargets;
|
|
8585
|
+
private refreshProposals;
|
|
8586
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiChatService, never>;
|
|
8587
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AiChatService>;
|
|
8588
|
+
}
|
|
8589
|
+
|
|
8590
|
+
declare class AiChatPanelComponent {
|
|
8591
|
+
readonly bridge: _angular_core.InputSignal<PptxAiBridge>;
|
|
8592
|
+
readonly config: _angular_core.InputSignal<PptxAiConfig>;
|
|
8593
|
+
readonly panelWidth: _angular_core.InputSignal<number | undefined>;
|
|
8594
|
+
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
8595
|
+
protected readonly chat: AiChatService;
|
|
8596
|
+
/** Shared panel scope + on-canvas highlight store (provided by the viewer). */
|
|
8597
|
+
protected readonly store: AiPanelStore;
|
|
8598
|
+
constructor();
|
|
8599
|
+
/**
|
|
8600
|
+
* Apply a suggestion, first enabling the canvas colour tween so the edit fades
|
|
8601
|
+
* in rather than snapping (proposals apply outside the tool loop).
|
|
8602
|
+
*/
|
|
8603
|
+
protected applyProposal(id: string): void;
|
|
8604
|
+
protected acceptAllProposals(): void;
|
|
8605
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiChatPanelComponent, never>;
|
|
8606
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiChatPanelComponent, "pptx-ai-chat-panel", never, { "bridge": { "alias": "bridge"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "panelWidth": { "alias": "panelWidth"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
|
|
8607
|
+
}
|
|
8608
|
+
|
|
8609
|
+
/**
|
|
8610
|
+
* createAngularAiBridge: builds a {@link PptxAiBridge} that lets the
|
|
8611
|
+
* framework-agnostic AI core (`pptx-viewer-shared/ai`) read the open deck,
|
|
8612
|
+
* navigate it, and route edits through the Angular editor-history layer so
|
|
8613
|
+
* every AI change is a single, undoable Ctrl+Z.
|
|
8614
|
+
*
|
|
8615
|
+
* The bridge is a plain object closing over a small set of accessor callbacks
|
|
8616
|
+
* (mirroring React's `useAiBridge` ref indirection): each read pulls the live
|
|
8617
|
+
* value on demand, and each of the three write choke points funnels through
|
|
8618
|
+
* {@link BridgeDeps.applySlides} -> `EditorStateService.applyReplacement`, which
|
|
8619
|
+
* records ONE history snapshot per commit. Keeping writes funnelled is what lets
|
|
8620
|
+
* the {@link ProposalStore} apply a staged batch atomically.
|
|
8621
|
+
*/
|
|
8622
|
+
|
|
8623
|
+
/** Live accessors the bridge closes over, supplied by the viewer component. */
|
|
8624
|
+
interface BridgeDeps {
|
|
8625
|
+
/** The editable (template-free) slide deck. */
|
|
8626
|
+
getSlides(): readonly PptxSlide[];
|
|
8627
|
+
/** Zero-based index of the active slide. */
|
|
8628
|
+
getActiveSlideIndex(): number;
|
|
8629
|
+
/** Slide canvas size in CSS pixels. */
|
|
8630
|
+
getCanvasSize(): {
|
|
8631
|
+
width: number;
|
|
8632
|
+
height: number;
|
|
8633
|
+
};
|
|
8634
|
+
/** The resolved presentation theme, when loaded. */
|
|
8635
|
+
getTheme(): PptxTheme | undefined;
|
|
8636
|
+
/** Host-provided document display name, when set. */
|
|
8637
|
+
getFileName(): string | undefined;
|
|
8638
|
+
/** The loaded core handler, when a deck is open. */
|
|
8639
|
+
getHandler(): PptxHandler | undefined;
|
|
8640
|
+
/** Navigate the viewer to a slide by zero-based index. */
|
|
8641
|
+
goToSlide(index: number): void;
|
|
8642
|
+
/** Select the given elements on a slide (empty clears selection). */
|
|
8643
|
+
selectElements(slideIndex: number, elementIds: readonly string[]): void;
|
|
8644
|
+
/**
|
|
8645
|
+
* Commit a fully-computed next slides array as ONE undoable history entry.
|
|
8646
|
+
* Implemented by the component as `editor.applyReplacement(next, label)`.
|
|
8647
|
+
*/
|
|
8648
|
+
applySlides(next: PptxSlide[], label: string): void;
|
|
8649
|
+
/** Apply partial theme updates through the editor's theme handlers. */
|
|
8650
|
+
applyTheme(updates: Partial<PptxTheme>): void;
|
|
8651
|
+
/** Ordered presentation sections (editor-tracked, saved with the deck). */
|
|
8652
|
+
getSections(): readonly PptxSection[];
|
|
8653
|
+
/** Presentation-level properties (`p:presentationPr`), loader-tracked. */
|
|
8654
|
+
getPresentationProperties(): PptxPresentationProperties;
|
|
8655
|
+
/** Custom document properties (`docProps/custom.xml`), loader-tracked. */
|
|
8656
|
+
getCustomProperties(): readonly PptxCustomProperty[];
|
|
8657
|
+
/** Core document properties (`docProps/core.xml`), loader-tracked. */
|
|
8658
|
+
getCoreProperties(): PptxCoreProperties | undefined;
|
|
8659
|
+
/** Extended application properties (`docProps/app.xml`), loader-tracked. */
|
|
8660
|
+
getAppProperties(): PptxAppProperties | undefined;
|
|
8661
|
+
/** Set the slide canvas size (px) and mark the deck dirty. */
|
|
8662
|
+
setCanvasSize(size: {
|
|
8663
|
+
width: number;
|
|
8664
|
+
height: number;
|
|
8665
|
+
}): void;
|
|
8666
|
+
/** Replace the presentation sections and mark the deck dirty. */
|
|
8667
|
+
setSections(sections: readonly PptxSection[]): void;
|
|
8668
|
+
/** Replace the presentation-level properties and mark the deck dirty. */
|
|
8669
|
+
setPresentationProperties(props: PptxPresentationProperties): void;
|
|
8670
|
+
/** Replace the custom document properties and mark the deck dirty. */
|
|
8671
|
+
setCustomProperties(props: readonly PptxCustomProperty[]): void;
|
|
8672
|
+
/** Replace the core document properties and mark the deck dirty. */
|
|
8673
|
+
setCoreProperties(props: PptxCoreProperties | undefined): void;
|
|
8674
|
+
/** Replace the extended application properties and mark the deck dirty. */
|
|
8675
|
+
setAppProperties(props: PptxAppProperties | undefined): void;
|
|
8676
|
+
/**
|
|
8677
|
+
* The slides / elements the assistant should scope its work to (explicit AI
|
|
8678
|
+
* picks, else a pinned focus, else the live canvas selection). When omitted,
|
|
8679
|
+
* the assistant falls back to the whole active slide.
|
|
8680
|
+
*/
|
|
8681
|
+
getFocusedTargets?(): PptxAiFocusedTarget[];
|
|
8682
|
+
/** Optional transient host notification (toast / status line). */
|
|
8683
|
+
notify?(message: string, level?: PptxAiNotifyLevel): void;
|
|
8684
|
+
}
|
|
8685
|
+
/** Build a stable {@link PptxAiBridge} over the Angular viewer state/editor. */
|
|
8686
|
+
declare function createAngularAiBridge(deps: BridgeDeps): PptxAiBridge;
|
|
8687
|
+
|
|
8688
|
+
/**
|
|
8689
|
+
* Pure gating predicate for the AI assistant UI. The ribbon Sparkles toggle and
|
|
8690
|
+
* the chat pane are shown only when the host supplies an `ai` config; keeping
|
|
8691
|
+
* this a standalone function makes the rule unit-testable without mounting the
|
|
8692
|
+
* component (the Angular test setup is TestBed-free).
|
|
8693
|
+
*/
|
|
8694
|
+
|
|
8695
|
+
/** Whether the AI assistant toggle should be shown for the given config. */
|
|
8696
|
+
declare function aiToggleVisible(config: PptxAiConfig | undefined): boolean;
|
|
8697
|
+
|
|
8698
|
+
declare class AiComposerComponent {
|
|
8699
|
+
readonly isStreaming: _angular_core.InputSignal<boolean>;
|
|
8700
|
+
/**
|
|
8701
|
+
* One-shot composer prefill from "Ask AI" / "Fix with AI". `prefillNonce`
|
|
8702
|
+
* bumps on every request so the composer applies `prefillText` (and focuses)
|
|
8703
|
+
* even when the text is empty and unchanged.
|
|
8704
|
+
*/
|
|
8705
|
+
readonly prefillText: _angular_core.InputSignal<string>;
|
|
8706
|
+
readonly prefillNonce: _angular_core.InputSignal<number>;
|
|
8707
|
+
readonly onSend: _angular_core.OutputEmitterRef<string>;
|
|
8708
|
+
readonly onStop: _angular_core.OutputEmitterRef<void>;
|
|
8709
|
+
protected readonly value: _angular_core.WritableSignal<string>;
|
|
8710
|
+
private readonly textarea;
|
|
8711
|
+
private lastPrefillNonce;
|
|
8712
|
+
constructor();
|
|
8713
|
+
protected submit(): void;
|
|
8714
|
+
protected onKeyDown(event: KeyboardEvent): void;
|
|
8715
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiComposerComponent, never>;
|
|
8716
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiComposerComponent, "pptx-ai-composer", never, { "isStreaming": { "alias": "isStreaming"; "required": false; "isSignal": true; }; "prefillText": { "alias": "prefillText"; "required": false; "isSignal": true; }; "prefillNonce": { "alias": "prefillNonce"; "required": false; "isSignal": true; }; }, { "onSend": "onSend"; "onStop": "onStop"; }, never, never, true, never>;
|
|
8717
|
+
}
|
|
8718
|
+
|
|
8719
|
+
declare class AiFocusBarComponent {
|
|
8720
|
+
/** Live deck, for resolving element chip labels + the two-table detection. */
|
|
8721
|
+
readonly slides: _angular_core.InputSignal<readonly PptxSlide[]>;
|
|
8722
|
+
/** Emitted with a ready-to-send directive (e.g. the merge-tables request). */
|
|
8723
|
+
readonly sendDirective: _angular_core.OutputEmitterRef<string>;
|
|
8724
|
+
protected readonly store: AiPanelStore;
|
|
8725
|
+
protected readonly chips: _angular_core.Signal<pptx_angular_viewer.FocusChip[]>;
|
|
8726
|
+
protected readonly twoTables: _angular_core.Signal<false | {
|
|
8727
|
+
slideIndex: number;
|
|
8728
|
+
elementIdA: string;
|
|
8729
|
+
elementIdB: string;
|
|
8730
|
+
}>;
|
|
8731
|
+
protected onMerge(tt: {
|
|
8732
|
+
slideIndex: number;
|
|
8733
|
+
elementIdA: string;
|
|
8734
|
+
elementIdB: string;
|
|
8735
|
+
}): void;
|
|
8736
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiFocusBarComponent, never>;
|
|
8737
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiFocusBarComponent, "pptx-ai-focus-bar", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; }, { "sendDirective": "sendDirective"; }, never, never, true, never>;
|
|
8738
|
+
}
|
|
8739
|
+
|
|
8740
|
+
/** One tool invocation captured with its full technical detail. */
|
|
8741
|
+
interface AiLogToolCall {
|
|
8742
|
+
toolName: string;
|
|
8743
|
+
toolCallId: string;
|
|
8744
|
+
state: string;
|
|
8745
|
+
input: unknown;
|
|
8746
|
+
output: unknown;
|
|
8747
|
+
errorText?: string;
|
|
8748
|
+
}
|
|
8749
|
+
/** One message: its role, concatenated prose, and any tool calls it made. */
|
|
8750
|
+
interface AiLogMessage {
|
|
8751
|
+
role: string;
|
|
8752
|
+
text: string;
|
|
8753
|
+
toolCalls: AiLogToolCall[];
|
|
8754
|
+
}
|
|
8755
|
+
/** One chat conversation in export form. */
|
|
8756
|
+
interface AiLogChat {
|
|
8757
|
+
id: string;
|
|
8758
|
+
title: string;
|
|
8759
|
+
deckId?: string;
|
|
8760
|
+
createdAt: number;
|
|
8761
|
+
updatedAt: number;
|
|
8762
|
+
createdAtIso: string;
|
|
8763
|
+
updatedAtIso: string;
|
|
8764
|
+
messageCount: number;
|
|
8765
|
+
messages: AiLogMessage[];
|
|
8766
|
+
}
|
|
8767
|
+
/** Top-level detailed export document. */
|
|
8768
|
+
interface AiLogExport {
|
|
8769
|
+
format: 'pptx-ai-chat-log';
|
|
8770
|
+
version: 1;
|
|
8771
|
+
exportedAt: string;
|
|
8772
|
+
/** Whether tool inputs/outputs are included (see `detailed` option). */
|
|
8773
|
+
detailed: boolean;
|
|
8774
|
+
chatCount: number;
|
|
8775
|
+
chats: AiLogChat[];
|
|
8776
|
+
}
|
|
8777
|
+
/** Options controlling how the export document is built. */
|
|
8778
|
+
interface BuildChatLogOptions {
|
|
8779
|
+
/** Include tool-call inputs/outputs. Default `true`. When false, tool calls
|
|
8780
|
+
* still list name + state but omit the (potentially large) payloads. */
|
|
8781
|
+
detailed?: boolean;
|
|
8782
|
+
/** Epoch ms stamped as `exportedAt`. Default `Date.now()`. */
|
|
8783
|
+
now?: number;
|
|
8784
|
+
}
|
|
8785
|
+
/** Build the detailed export document from already-loaded chats (pure). */
|
|
8786
|
+
declare function buildChatLogExport(chats: readonly PptxAiStoredChat[], options?: BuildChatLogOptions): AiLogExport;
|
|
8787
|
+
/** Render the same detailed export as a human-readable Markdown transcript. */
|
|
8788
|
+
declare function buildChatLogMarkdown(doc: AiLogExport): string;
|
|
8789
|
+
/** Load every stored chat (newest first) in full detail from a store. */
|
|
8790
|
+
declare function collectStoredChats(store: PptxAiChatStore): Promise<PptxAiStoredChat[]>;
|
|
8791
|
+
/** File format to download. */
|
|
8792
|
+
type AiLogFormat = 'json' | 'markdown';
|
|
8793
|
+
/** Options for {@link exportAiChatLogs}. */
|
|
8794
|
+
interface ExportAiChatLogsOptions {
|
|
8795
|
+
/** Store to read from. Defaults to the shared `createChatHistoryStore()`. */
|
|
8796
|
+
store?: PptxAiChatStore;
|
|
8797
|
+
/** `'json'` (default) or `'markdown'`. */
|
|
8798
|
+
format?: AiLogFormat;
|
|
8799
|
+
/** Include tool inputs/outputs. Default `true`. */
|
|
8800
|
+
detailed?: boolean;
|
|
8801
|
+
/** Epoch ms for the filename + `exportedAt`. Default `Date.now()`. */
|
|
8802
|
+
now?: number;
|
|
8803
|
+
}
|
|
8804
|
+
/**
|
|
8805
|
+
* Read all stored chats and trigger a browser download of the detailed log.
|
|
8806
|
+
*
|
|
8807
|
+
* @returns the number of chats exported. When `0`, no file is downloaded so the
|
|
8808
|
+
* caller can surface an empty-state message instead.
|
|
8809
|
+
*/
|
|
8810
|
+
declare function exportAiChatLogs(options?: ExportAiChatLogsOptions): Promise<number>;
|
|
8811
|
+
|
|
8812
|
+
declare class AiSettingsSectionComponent {
|
|
8813
|
+
private readonly store;
|
|
8814
|
+
/** Number of stored chats (null while counting). */
|
|
8815
|
+
protected readonly chatCount: _angular_core.WritableSignal<number | null>;
|
|
8816
|
+
/** Include tool inputs/outputs in the export. */
|
|
8817
|
+
protected readonly detailed: _angular_core.WritableSignal<boolean>;
|
|
8818
|
+
protected readonly busy: _angular_core.WritableSignal<boolean>;
|
|
8819
|
+
/** Result of the last export, or null before any export runs. */
|
|
8820
|
+
protected readonly doneCount: _angular_core.WritableSignal<number | null>;
|
|
8821
|
+
constructor();
|
|
8822
|
+
protected onExport(format: AiLogFormat): void;
|
|
8823
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiSettingsSectionComponent, never>;
|
|
8824
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiSettingsSectionComponent, "pptx-ai-settings-section", never, {}, {}, never, never, true, never>;
|
|
8825
|
+
}
|
|
8826
|
+
|
|
8827
|
+
declare class AiChangeOverlayComponent {
|
|
8828
|
+
/** The batch of just-applied changes to animate (null when idle). */
|
|
8829
|
+
readonly batch: _angular_core.InputSignal<AiChangeBatch | null>;
|
|
8830
|
+
/** Zero-based active slide index, so the overlay draws only its own slide. */
|
|
8831
|
+
readonly activeSlideIndex: _angular_core.InputSignal<number>;
|
|
8832
|
+
private readonly host;
|
|
8833
|
+
private readonly renderer;
|
|
8834
|
+
private styleEl;
|
|
8835
|
+
/** `start` (pre-flip) then `end` (post-flip) so the CSS transition runs. */
|
|
8836
|
+
private readonly phase;
|
|
8837
|
+
private outerFrame;
|
|
8838
|
+
private innerFrame;
|
|
8839
|
+
/** Monotonic batch id; keys the ghosts + restarts the phase flip per batch. */
|
|
8840
|
+
protected readonly nonce: _angular_core.Signal<number>;
|
|
8841
|
+
/** The changes on the currently visible slide (bounds map 1:1 to the stage). */
|
|
8842
|
+
protected readonly activeChanges: _angular_core.Signal<AiElementChange[]>;
|
|
8843
|
+
constructor();
|
|
8844
|
+
/** Kebab-cased ghost-rect style for one change at the current phase. */
|
|
8845
|
+
protected ghostStyle(change: AiElementChange): StyleMap;
|
|
8846
|
+
private cancelFrames;
|
|
8847
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiChangeOverlayComponent, never>;
|
|
8848
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiChangeOverlayComponent, "pptx-ai-change-overlay", never, { "batch": { "alias": "batch"; "required": false; "isSignal": true; }; "activeSlideIndex": { "alias": "activeSlideIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8849
|
+
}
|
|
8850
|
+
|
|
8851
|
+
interface HighlightBox extends AiCanvasHighlight {
|
|
8852
|
+
x: number;
|
|
8853
|
+
y: number;
|
|
8854
|
+
width: number;
|
|
8855
|
+
height: number;
|
|
8856
|
+
}
|
|
8857
|
+
declare class AiFocusHighlightOverlayComponent {
|
|
8858
|
+
readonly highlights: _angular_core.InputSignal<readonly AiCanvasHighlight[]>;
|
|
8859
|
+
/** Elements of the currently visible slide, for bounds lookup. */
|
|
8860
|
+
readonly elements: _angular_core.InputSignal<readonly PptxElement[]>;
|
|
8861
|
+
readonly activeSlideIndex: _angular_core.InputSignal<number>;
|
|
8862
|
+
/** Resolve each highlight to a positioned box on the active slide. */
|
|
8863
|
+
protected readonly boxes: _angular_core.Signal<HighlightBox[]>;
|
|
8864
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiFocusHighlightOverlayComponent, never>;
|
|
8865
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiFocusHighlightOverlayComponent, "pptx-ai-focus-highlight-overlay", never, { "highlights": { "alias": "highlights"; "required": false; "isSignal": true; }; "elements": { "alias": "elements"; "required": false; "isSignal": true; }; "activeSlideIndex": { "alias": "activeSlideIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8866
|
+
}
|
|
8867
|
+
|
|
8868
|
+
/** One rendered transcript row: a message flattened to its renderable parts. */
|
|
8869
|
+
interface MessageRow {
|
|
8870
|
+
id: string;
|
|
8871
|
+
isUser: boolean;
|
|
8872
|
+
parts: RenderablePart[];
|
|
8873
|
+
}
|
|
8874
|
+
declare class AiMessageListComponent {
|
|
8875
|
+
readonly messages: _angular_core.InputSignal<readonly PptxAiUIMessage[]>;
|
|
8876
|
+
readonly isStreaming: _angular_core.InputSignal<boolean>;
|
|
8877
|
+
private readonly endRef;
|
|
8878
|
+
/** Flatten each message into renderable parts, dropping empty assistant turns. */
|
|
8879
|
+
protected readonly rows: _angular_core.Signal<MessageRow[]>;
|
|
8880
|
+
constructor();
|
|
8881
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiMessageListComponent, never>;
|
|
8882
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiMessageListComponent, "pptx-ai-message-list", never, { "messages": { "alias": "messages"; "required": true; "isSignal": true; }; "isStreaming": { "alias": "isStreaming"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8883
|
+
}
|
|
8884
|
+
|
|
8885
|
+
declare class AiProposalCardComponent {
|
|
8886
|
+
readonly proposal: _angular_core.InputSignal<ProposalView>;
|
|
8887
|
+
readonly accept: _angular_core.OutputEmitterRef<string>;
|
|
8888
|
+
readonly reject: _angular_core.OutputEmitterRef<string>;
|
|
8889
|
+
/** Plain-language description of every staged change (never truncated). */
|
|
8890
|
+
protected readonly lines: _angular_core.Signal<string[]>;
|
|
8891
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiProposalCardComponent, never>;
|
|
8892
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiProposalCardComponent, "pptx-ai-proposal-card", never, { "proposal": { "alias": "proposal"; "required": true; "isSignal": true; }; }, { "accept": "accept"; "reject": "reject"; }, never, never, true, never>;
|
|
8893
|
+
}
|
|
8894
|
+
|
|
8895
|
+
declare class AiToolCallCardComponent {
|
|
8896
|
+
readonly part: _angular_core.InputSignal<RenderableToolPart>;
|
|
8897
|
+
protected readonly failed: _angular_core.Signal<boolean>;
|
|
8898
|
+
protected readonly done: _angular_core.Signal<boolean>;
|
|
8899
|
+
protected readonly running: _angular_core.Signal<boolean>;
|
|
8900
|
+
/** Friendly, non-technical activity ("Looked at slide 5"); never leaks ids. */
|
|
8901
|
+
private readonly activity;
|
|
8902
|
+
protected readonly icon: _angular_core.Signal<ToolActivityIcon>;
|
|
8903
|
+
protected readonly activityLabel: _angular_core.Signal<string>;
|
|
8904
|
+
/** Raw tool name + arg summary, only shown inside the collapsed disclosure. */
|
|
8905
|
+
protected readonly rawSummary: _angular_core.Signal<string>;
|
|
8906
|
+
protected readonly rawLabel: _angular_core.Signal<string>;
|
|
8907
|
+
protected readonly iconClass: _angular_core.Signal<"h-3.5 w-3.5 shrink-0 text-destructive" | "h-3.5 w-3.5 shrink-0 text-muted-foreground">;
|
|
8908
|
+
protected readonly statusKey: _angular_core.Signal<"pptx.ai.toolFailed" | "pptx.ai.toolDone" | "pptx.ai.toolRunning">;
|
|
8909
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AiToolCallCardComponent, never>;
|
|
8910
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AiToolCallCardComponent, "pptx-ai-tool-call-card", never, { "part": { "alias": "part"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8911
|
+
}
|
|
7540
8912
|
|
|
7541
8913
|
/** Drawing tool IDs (mirrors React DRAW_TOOLS). */
|
|
7542
8914
|
type DrawTool$1 = 'select' | 'pen' | 'highlighter' | 'eraser' | 'freeform';
|
|
@@ -7622,6 +8994,10 @@ declare class RibbonComponent {
|
|
|
7622
8994
|
readonly showSubtitles: _angular_core.InputSignal<boolean>;
|
|
7623
8995
|
/** Toolbar buttons/tabs the host wants hidden. Default `[]` hides nothing. */
|
|
7624
8996
|
readonly hiddenActions: _angular_core.InputSignal<ToolbarActionId[]>;
|
|
8997
|
+
/** Whether the host enabled the AI assistant (shows the Sparkles toggle). */
|
|
8998
|
+
readonly aiEnabled: _angular_core.InputSignal<boolean>;
|
|
8999
|
+
/** Whether the AI assistant panel is currently open (toggle active state). */
|
|
9000
|
+
readonly aiPanelOpen: _angular_core.InputSignal<boolean>;
|
|
7625
9001
|
/** Optional sign-in hook point for File > Account. Absent/disabled by default. */
|
|
7626
9002
|
readonly accountAuth: _angular_core.InputSignal<AccountAuthConfig | undefined>;
|
|
7627
9003
|
readonly prev: _angular_core.OutputEmitterRef<void>;
|
|
@@ -7653,6 +9029,8 @@ declare class RibbonComponent {
|
|
|
7653
9029
|
readonly packageForSharing: _angular_core.OutputEmitterRef<void>;
|
|
7654
9030
|
/** Emitted when the user toggles the slides panel from the top bar. */
|
|
7655
9031
|
readonly toggleSidebar: _angular_core.OutputEmitterRef<void>;
|
|
9032
|
+
/** Emitted when the user clicks the AI assistant Sparkles toggle. */
|
|
9033
|
+
readonly toggleAiPanel: _angular_core.OutputEmitterRef<void>;
|
|
7656
9034
|
/** Emitted when the user opens the Digital Signatures panel from the File tab. */
|
|
7657
9035
|
readonly signatures: _angular_core.OutputEmitterRef<void>;
|
|
7658
9036
|
readonly info: _angular_core.OutputEmitterRef<void>;
|
|
@@ -7719,7 +9097,7 @@ declare class RibbonComponent {
|
|
|
7719
9097
|
/** Forward the Review proofing toggle to the viewer-owned live state. */
|
|
7720
9098
|
protected setSpellCheck(enabled: boolean): void;
|
|
7721
9099
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonComponent, never>;
|
|
7722
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonComponent, "pptx-ribbon", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; "zoomPercent": { "alias": "zoomPercent"; "required": false; "isSignal": true; }; "formatPainterActive": { "alias": "formatPainterActive"; "required": false; "isSignal": true; }; "canActivateFormatPainter": { "alias": "canActivateFormatPainter"; "required": false; "isSignal": true; }; "exporting": { "alias": "exporting"; "required": false; "isSignal": true; }; "hasMacros": { "alias": "hasMacros"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "eyedropperActive": { "alias": "eyedropperActive"; "required": false; "isSignal": true; }; "themeGalleryOpen": { "alias": "themeGalleryOpen"; "required": false; "isSignal": true; }; "sidebarCollapsed": { "alias": "sidebarCollapsed"; "required": false; "isSignal": true; }; "inspectorOpen": { "alias": "inspectorOpen"; "required": false; "isSignal": true; }; "commentsOpen": { "alias": "commentsOpen"; "required": false; "isSignal": true; }; "commentCount": { "alias": "commentCount"; "required": false; "isSignal": true; }; "findOpen": { "alias": "findOpen"; "required": false; "isSignal": true; }; "collabConnected": { "alias": "collabConnected"; "required": false; "isSignal": true; }; "connectedCount": { "alias": "connectedCount"; "required": false; "isSignal": true; }; "spellCheckEnabled": { "alias": "spellCheckEnabled"; "required": false; "isSignal": true; }; "showSubtitles": { "alias": "showSubtitles"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; "accountAuth": { "alias": "accountAuth"; "required": false; "isSignal": true; }; }, { "prev": "prev"; "next": "next"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "zoomReset": "zoomReset"; "find": "find"; "present": "present"; "presenter": "presenter"; "record": "record"; "presentFromBeginning": "presentFromBeginning"; "rehearseTimings": "rehearseTimings"; "toggleSubtitles": "toggleSubtitles"; "openSubtitleSettings": "openSubtitleSettings"; "recordFromBeginning": "recordFromBeginning"; "recordFromCurrent": "recordFromCurrent"; "spellCheckChange": "spellCheckChange"; "share": "share"; "broadcast": "broadcast"; "openFile": "openFile"; "openRecentFile": "openRecentFile"; "createPresentation": "createPresentation"; "save": "save"; "savePpsx": "savePpsx"; "savePptm": "savePptm"; "packageForSharing": "packageForSharing"; "toggleSidebar": "toggleSidebar"; "signatures": "signatures"; "info": "info"; "print": "print"; "comments": "comments"; "a11y": "a11y"; "link": "link"; "openSorter": "openSorter"; "openMasterView": "openMasterView"; "toggleNotes": "toggleNotes"; "toggleFormatPainter": "toggleFormatPainter"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "copySlideAsImage": "copySlideAsImage"; "replace": "replace"; "toggleInspector": "toggleInspector"; "drawToolChange": "drawToolChange"; "toggleThemeGallery": "toggleThemeGallery"; "toggleGrid": "toggleGrid"; "toggleRulers": "toggleRulers"; "toggleGuides": "toggleGuides"; "toggleSelectionPane": "toggleSelectionPane"; "openCustomShows": "openCustomShows"; "toggleSnapToGrid": "toggleSnapToGrid"; "toggleSnapToShape": "toggleSnapToShape"; "addGuide": "addGuide"; "zoomToFit": "zoomToFit"; "toggleEyedropper": "toggleEyedropper"; "openSmartArtDialog": "openSmartArtDialog"; "openEquationDialog": "openEquationDialog"; "openSetUpSlideShow": "openSetUpSlideShow"; "openCompare": "openCompare"; "openPassword": "openPassword"; "openFontEmbedding": "openFontEmbedding"; "openVersionHistory": "openVersionHistory"; "openShortcuts": "openShortcuts"; "openSettings": "openSettings"; }, never, never, true, never>;
|
|
9100
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonComponent, "pptx-ribbon", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; "zoomPercent": { "alias": "zoomPercent"; "required": false; "isSignal": true; }; "formatPainterActive": { "alias": "formatPainterActive"; "required": false; "isSignal": true; }; "canActivateFormatPainter": { "alias": "canActivateFormatPainter"; "required": false; "isSignal": true; }; "exporting": { "alias": "exporting"; "required": false; "isSignal": true; }; "hasMacros": { "alias": "hasMacros"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "eyedropperActive": { "alias": "eyedropperActive"; "required": false; "isSignal": true; }; "themeGalleryOpen": { "alias": "themeGalleryOpen"; "required": false; "isSignal": true; }; "sidebarCollapsed": { "alias": "sidebarCollapsed"; "required": false; "isSignal": true; }; "inspectorOpen": { "alias": "inspectorOpen"; "required": false; "isSignal": true; }; "commentsOpen": { "alias": "commentsOpen"; "required": false; "isSignal": true; }; "commentCount": { "alias": "commentCount"; "required": false; "isSignal": true; }; "findOpen": { "alias": "findOpen"; "required": false; "isSignal": true; }; "collabConnected": { "alias": "collabConnected"; "required": false; "isSignal": true; }; "connectedCount": { "alias": "connectedCount"; "required": false; "isSignal": true; }; "spellCheckEnabled": { "alias": "spellCheckEnabled"; "required": false; "isSignal": true; }; "showSubtitles": { "alias": "showSubtitles"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; "aiEnabled": { "alias": "aiEnabled"; "required": false; "isSignal": true; }; "aiPanelOpen": { "alias": "aiPanelOpen"; "required": false; "isSignal": true; }; "accountAuth": { "alias": "accountAuth"; "required": false; "isSignal": true; }; }, { "prev": "prev"; "next": "next"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "zoomReset": "zoomReset"; "find": "find"; "present": "present"; "presenter": "presenter"; "record": "record"; "presentFromBeginning": "presentFromBeginning"; "rehearseTimings": "rehearseTimings"; "toggleSubtitles": "toggleSubtitles"; "openSubtitleSettings": "openSubtitleSettings"; "recordFromBeginning": "recordFromBeginning"; "recordFromCurrent": "recordFromCurrent"; "spellCheckChange": "spellCheckChange"; "share": "share"; "broadcast": "broadcast"; "openFile": "openFile"; "openRecentFile": "openRecentFile"; "createPresentation": "createPresentation"; "save": "save"; "savePpsx": "savePpsx"; "savePptm": "savePptm"; "packageForSharing": "packageForSharing"; "toggleSidebar": "toggleSidebar"; "toggleAiPanel": "toggleAiPanel"; "signatures": "signatures"; "info": "info"; "print": "print"; "comments": "comments"; "a11y": "a11y"; "link": "link"; "openSorter": "openSorter"; "openMasterView": "openMasterView"; "toggleNotes": "toggleNotes"; "toggleFormatPainter": "toggleFormatPainter"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "copySlideAsImage": "copySlideAsImage"; "replace": "replace"; "toggleInspector": "toggleInspector"; "drawToolChange": "drawToolChange"; "toggleThemeGallery": "toggleThemeGallery"; "toggleGrid": "toggleGrid"; "toggleRulers": "toggleRulers"; "toggleGuides": "toggleGuides"; "toggleSelectionPane": "toggleSelectionPane"; "openCustomShows": "openCustomShows"; "toggleSnapToGrid": "toggleSnapToGrid"; "toggleSnapToShape": "toggleSnapToShape"; "addGuide": "addGuide"; "zoomToFit": "zoomToFit"; "toggleEyedropper": "toggleEyedropper"; "openSmartArtDialog": "openSmartArtDialog"; "openEquationDialog": "openEquationDialog"; "openSetUpSlideShow": "openSetUpSlideShow"; "openCompare": "openCompare"; "openPassword": "openPassword"; "openFontEmbedding": "openFontEmbedding"; "openVersionHistory": "openVersionHistory"; "openShortcuts": "openShortcuts"; "openSettings": "openSettings"; }, never, never, true, never>;
|
|
7723
9101
|
}
|
|
7724
9102
|
|
|
7725
9103
|
/** The eight resize-handle positions around a selection box. */
|
|
@@ -7960,6 +9338,27 @@ declare class SlideCanvasComponent implements SlideContext {
|
|
|
7960
9338
|
* slide's own elements; interactive only while {@link editTemplateMode} is on.
|
|
7961
9339
|
*/
|
|
7962
9340
|
readonly templateElements: _angular_core.InputSignal<readonly PptxElement[]>;
|
|
9341
|
+
/**
|
|
9342
|
+
* On-canvas AI highlight rings (explicit picks + the live tool focus), drawn
|
|
9343
|
+
* inside the scaled stage so element coords map 1:1. Empty on thumbnails.
|
|
9344
|
+
*/
|
|
9345
|
+
readonly aiHighlights: _angular_core.InputSignal<readonly AiCanvasHighlight[]>;
|
|
9346
|
+
/** True while the AI is active: enables the colour tween on slide elements. */
|
|
9347
|
+
readonly aiActive: _angular_core.InputSignal<boolean>;
|
|
9348
|
+
/** Zero-based active slide index, so the overlay draws only its own slide. */
|
|
9349
|
+
readonly aiActiveSlideIndex: _angular_core.InputSignal<number>;
|
|
9350
|
+
/**
|
|
9351
|
+
* The batch of just-applied AI element changes to play on the canvas (glide
|
|
9352
|
+
* old->new, fade/scale in-out, glow), or null when idle. Drawn inside the
|
|
9353
|
+
* scaled stage next to the focus overlay so bounds map 1:1. Empty on thumbnails.
|
|
9354
|
+
*/
|
|
9355
|
+
readonly aiChangeBatch: _angular_core.InputSignal<AiChangeBatch | null>;
|
|
9356
|
+
/**
|
|
9357
|
+
* When true, the next element click(s) become AI picks (emitted via
|
|
9358
|
+
* {@link elementSelect}) instead of selecting / dragging. mousedown never
|
|
9359
|
+
* starts a drag while picking, mirroring React's pick mode.
|
|
9360
|
+
*/
|
|
9361
|
+
readonly aiPickMode: _angular_core.InputSignal<boolean>;
|
|
7963
9362
|
/** Active draw tool. When not 'select', pointer gestures draw ink strokes. */
|
|
7964
9363
|
readonly drawTool: _angular_core.InputSignal<"pen" | "highlighter" | "eraser" | "select" | "freeform">;
|
|
7965
9364
|
/** Active ink stroke colour (CSS colour string). */
|
|
@@ -8172,7 +9571,22 @@ declare class SlideCanvasComponent implements SlideContext {
|
|
|
8172
9571
|
readonly vRulerTicks: _angular_core.Signal<readonly RulerTick[]>;
|
|
8173
9572
|
readonly stageStyle: _angular_core.Signal<StyleMap>;
|
|
8174
9573
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideCanvasComponent, never>;
|
|
8175
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideCanvasComponent, "pptx-slide-canvas", never, { "slide": { "alias": "slide"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "guideCommand": { "alias": "guideCommand"; "required": false; "isSignal": true; }; "spellCheck": { "alias": "spellCheck"; "required": false; "isSignal": true; }; "snapToGuides": { "alias": "snapToGuides"; "required": false; "isSignal": true; }; "autoFit": { "alias": "autoFit"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "editingId": { "alias": "editingId"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "drawTool": { "alias": "drawTool"; "required": false; "isSignal": true; }; "drawColor": { "alias": "drawColor"; "required": false; "isSignal": true; }; "drawWidth": { "alias": "drawWidth"; "required": false; "isSignal": true; }; }, { "elementSelect": "elementSelect"; "backgroundClick": "backgroundClick"; "transformStart": "transformStart"; "transformUpdate": "transformUpdate"; "contextMenu": "contextMenu"; "textEditStart": "textEditStart"; "textCommit": "textCommit"; "textCancel": "textCancel"; "textFormat": "textFormat"; "rotateUpdate": "rotateUpdate"; "marqueeSelect": "marqueeSelect"; "inkStrokeComplete": "inkStrokeComplete"; "eraserHit": "eraserHit"; "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
|
|
9574
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideCanvasComponent, "pptx-slide-canvas", never, { "slide": { "alias": "slide"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "guideCommand": { "alias": "guideCommand"; "required": false; "isSignal": true; }; "spellCheck": { "alias": "spellCheck"; "required": false; "isSignal": true; }; "snapToGuides": { "alias": "snapToGuides"; "required": false; "isSignal": true; }; "autoFit": { "alias": "autoFit"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "editingId": { "alias": "editingId"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "aiHighlights": { "alias": "aiHighlights"; "required": false; "isSignal": true; }; "aiActive": { "alias": "aiActive"; "required": false; "isSignal": true; }; "aiActiveSlideIndex": { "alias": "aiActiveSlideIndex"; "required": false; "isSignal": true; }; "aiChangeBatch": { "alias": "aiChangeBatch"; "required": false; "isSignal": true; }; "aiPickMode": { "alias": "aiPickMode"; "required": false; "isSignal": true; }; "drawTool": { "alias": "drawTool"; "required": false; "isSignal": true; }; "drawColor": { "alias": "drawColor"; "required": false; "isSignal": true; }; "drawWidth": { "alias": "drawWidth"; "required": false; "isSignal": true; }; }, { "elementSelect": "elementSelect"; "backgroundClick": "backgroundClick"; "transformStart": "transformStart"; "transformUpdate": "transformUpdate"; "contextMenu": "contextMenu"; "textEditStart": "textEditStart"; "textCommit": "textCommit"; "textCancel": "textCancel"; "textFormat": "textFormat"; "rotateUpdate": "rotateUpdate"; "marqueeSelect": "marqueeSelect"; "inkStrokeComplete": "inkStrokeComplete"; "eraserHit": "eraserHit"; "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
|
|
9575
|
+
}
|
|
9576
|
+
|
|
9577
|
+
/**
|
|
9578
|
+
* Renderer-injected shape-effect definitions that need a companion DOM node
|
|
9579
|
+
* (a soft-edge `<filter>` def, a DAG fill-overlay tint layer), plus the helper
|
|
9580
|
+
* that strips dangling `url(#…)` filter references.
|
|
9581
|
+
*
|
|
9582
|
+
* Kept out of `element-style.ts` so that module stays focused on producing the
|
|
9583
|
+
* base `[ngStyle]` maps. Mirrors the Vue/Svelte `ShapeEffectOverlay` split.
|
|
9584
|
+
*/
|
|
9585
|
+
|
|
9586
|
+
/** Injectable soft-edge `<filter>` descriptor (id + feather radius in px). */
|
|
9587
|
+
interface SoftEdgeFilterDef {
|
|
9588
|
+
id: string;
|
|
9589
|
+
radius: number;
|
|
8176
9590
|
}
|
|
8177
9591
|
|
|
8178
9592
|
/**
|
|
@@ -8310,6 +9724,16 @@ interface Paragraph {
|
|
|
8310
9724
|
bulletStyle: StyleMap;
|
|
8311
9725
|
/** Left indent in px derived from the paragraph outline level. */
|
|
8312
9726
|
indentPx: number;
|
|
9727
|
+
/**
|
|
9728
|
+
* Per-paragraph `line-height` from this paragraph's own `a:lnSpc`: a unitless
|
|
9729
|
+
* multiplier (`a:spcPct`) or a `"<n>pt"` string (`a:spcPts`). Undefined when
|
|
9730
|
+
* the paragraph does not override the body-level line-height.
|
|
9731
|
+
*/
|
|
9732
|
+
lineHeight?: number | string;
|
|
9733
|
+
/** `margin-top` in px from `a:spcBef` (space before), when overridden. */
|
|
9734
|
+
spaceBeforePx?: number;
|
|
9735
|
+
/** `margin-bottom` in px from `a:spcAft` (space after), when overridden. */
|
|
9736
|
+
spaceAfterPx?: number;
|
|
8313
9737
|
}
|
|
8314
9738
|
/**
|
|
8315
9739
|
* ElementRendererComponent: Angular port of the React `ElementRenderer.tsx`
|
|
@@ -8341,6 +9765,14 @@ declare class ElementRendererComponent {
|
|
|
8341
9765
|
* the viewer subtree (thumbnails, export) default to the SVG renderer.
|
|
8342
9766
|
*/
|
|
8343
9767
|
private readonly smartArt3DService;
|
|
9768
|
+
/**
|
|
9769
|
+
* Native-animation playback (present only inside a running presentation, which
|
|
9770
|
+
* provides {@link AnimationPlaybackService} at the overlay level). Optional so
|
|
9771
|
+
* the same renderer in the editor / thumbnails / export resolves to `null` and
|
|
9772
|
+
* renders with no animation state. Mirrors the Vue `injectPresentationElementStates`
|
|
9773
|
+
* provide/inject and React's threaded `presentationElementStates` prop.
|
|
9774
|
+
*/
|
|
9775
|
+
private readonly playback;
|
|
8344
9776
|
private readonly translate;
|
|
8345
9777
|
readonly smartArt3D: _angular_core.Signal<boolean>;
|
|
8346
9778
|
/** Obstacle rects (absolute slide coords) for connector A* routing. */
|
|
@@ -8378,6 +9810,12 @@ declare class ElementRendererComponent {
|
|
|
8378
9810
|
* no effect at all when false, so default rendering is untouched.
|
|
8379
9811
|
*/
|
|
8380
9812
|
readonly editTemplateMode: _angular_core.InputSignal<boolean>;
|
|
9813
|
+
/**
|
|
9814
|
+
* The enclosing group's fill (`GroupPptxElement.groupFill`), passed down by
|
|
9815
|
+
* the group render branch so a child painted with `a:grpFill`
|
|
9816
|
+
* (`fillMode === 'group'`) inherits the group's resolved fill.
|
|
9817
|
+
*/
|
|
9818
|
+
readonly parentGroupFill: _angular_core.InputSignal<ShapeStyle | undefined>;
|
|
8381
9819
|
/** Emitted when a table cell's text edit is committed. */
|
|
8382
9820
|
readonly cellCommit: _angular_core.OutputEmitterRef<{
|
|
8383
9821
|
id: string;
|
|
@@ -8390,12 +9828,30 @@ declare class ElementRendererComponent {
|
|
|
8390
9828
|
}>;
|
|
8391
9829
|
/** Duotone SVG `<filter>` descriptor for this element, if any. */
|
|
8392
9830
|
readonly duotoneFilter: _angular_core.Signal<pptx_angular_viewer.DuotoneFilterDef | undefined>;
|
|
9831
|
+
/**
|
|
9832
|
+
* Soft-edge feather `<filter>` descriptor (id + radius). The template injects
|
|
9833
|
+
* a matching `<filter>` into a hidden `<defs>` so the `filter:
|
|
9834
|
+
* url(#soft-edge-<id>)` reference on the shape resolves. Undefined otherwise.
|
|
9835
|
+
*/
|
|
9836
|
+
readonly softEdgeFilter: _angular_core.Signal<SoftEdgeFilterDef | undefined>;
|
|
9837
|
+
/**
|
|
9838
|
+
* DAG fill-overlay tint (colour + blend mode) painted as a separate blended
|
|
9839
|
+
* layer over the shape. Undefined when the element has no fill overlay.
|
|
9840
|
+
*/
|
|
9841
|
+
readonly fillOverlay: _angular_core.Signal<FillOverlayCss | undefined>;
|
|
8393
9842
|
/**
|
|
8394
9843
|
* Outline ring + slight transparency applied to inherited template
|
|
8395
9844
|
* (master/layout) elements while editTemplateMode is on. Empty otherwise, so
|
|
8396
9845
|
* normal rendering is never altered.
|
|
8397
9846
|
*/
|
|
8398
9847
|
readonly templateAffordanceStyle: _angular_core.Signal<StyleMap>;
|
|
9848
|
+
/**
|
|
9849
|
+
* This element's native-animation playback state, or `undefined` outside a
|
|
9850
|
+
* running presentation. Drives the staged chart / SmartArt build reveal and the
|
|
9851
|
+
* `p:animClr` fill / stroke relinquish (threaded to the chart / SmartArt /
|
|
9852
|
+
* connector renderers), mirroring React's per-element `animationState`.
|
|
9853
|
+
*/
|
|
9854
|
+
readonly animationState: _angular_core.Signal<ElementAnimationState | undefined>;
|
|
8399
9855
|
readonly containerStyle: _angular_core.Signal<StyleMap>;
|
|
8400
9856
|
readonly shapeContainerStyle: _angular_core.Signal<StyleMap>;
|
|
8401
9857
|
readonly textStyle: _angular_core.Signal<StyleMap>;
|
|
@@ -8412,13 +9868,20 @@ declare class ElementRendererComponent {
|
|
|
8412
9868
|
*/
|
|
8413
9869
|
readonly warpedTextStyle: _angular_core.Signal<StyleMap>;
|
|
8414
9870
|
readonly children: _angular_core.Signal<PptxElement[]>;
|
|
9871
|
+
/**
|
|
9872
|
+
* This group's own fill, handed to `a:grpFill` children as their
|
|
9873
|
+
* `parentGroupFill`. Undefined for non-group elements. Mirrors the shared
|
|
9874
|
+
* `getGroupChildParentFill` helper (inlined here so the Angular binding does
|
|
9875
|
+
* not depend on a shared symbol that is only vendored at build time).
|
|
9876
|
+
*/
|
|
9877
|
+
readonly childParentGroupFill: _angular_core.Signal<ShapeStyle | undefined>;
|
|
8415
9878
|
readonly isShapeLike: _angular_core.Signal<boolean>;
|
|
8416
9879
|
readonly isImageLike: _angular_core.Signal<boolean>;
|
|
8417
9880
|
readonly paragraphs: _angular_core.Signal<Paragraph[]>;
|
|
8418
9881
|
readonly hasText: _angular_core.Signal<boolean>;
|
|
8419
9882
|
readonly placeholderLabel: _angular_core.Signal<any>;
|
|
8420
9883
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementRendererComponent, never>;
|
|
8421
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementRendererComponent, "pptx-element-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "obstacles": { "alias": "obstacles"; "required": false; "isSignal": true; }; "canvasWidth": { "alias": "canvasWidth"; "required": false; "isSignal": true; }; "canvasHeight": { "alias": "canvasHeight"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "fieldContext": { "alias": "fieldContext"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; }, { "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
|
|
9884
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementRendererComponent, "pptx-element-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "obstacles": { "alias": "obstacles"; "required": false; "isSignal": true; }; "canvasWidth": { "alias": "canvasWidth"; "required": false; "isSignal": true; }; "canvasHeight": { "alias": "canvasHeight"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "fieldContext": { "alias": "fieldContext"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "parentGroupFill": { "alias": "parentGroupFill"; "required": false; "isSignal": true; }; }, { "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
|
|
8422
9885
|
}
|
|
8423
9886
|
|
|
8424
9887
|
/**
|
|
@@ -8453,9 +9916,22 @@ declare class ConnectorRendererComponent {
|
|
|
8453
9916
|
readonly canvasHeight: _angular_core.InputSignal<number>;
|
|
8454
9917
|
/** See ElementRenderer.interactive: gates the data-pptx-element contract attr. */
|
|
8455
9918
|
readonly interactive: _angular_core.InputSignal<boolean>;
|
|
9919
|
+
/**
|
|
9920
|
+
* Native-animation playback state. When an active `p:animClr` colour animation
|
|
9921
|
+
* targets the stroke (`animatesStroke`), the SVG stroke + arrowheads paint
|
|
9922
|
+
* `inherit` so the wrapper's animated `stroke` keyframes cascade in. Absent
|
|
9923
|
+
* outside a running presentation.
|
|
9924
|
+
*/
|
|
9925
|
+
readonly animationState: _angular_core.InputSignal<ElementAnimationState | undefined>;
|
|
8456
9926
|
/** All derived geometry, recomputed on every input change. */
|
|
8457
9927
|
readonly geo: _angular_core.Signal<ConnectorGeometry>;
|
|
8458
9928
|
readonly viewBox: _angular_core.Signal<string>;
|
|
9929
|
+
/**
|
|
9930
|
+
* Stroke paint for the line + arrowheads: `inherit` while a `p:animClr` stroke
|
|
9931
|
+
* colour animation is active (so the wrapper keyframes own it), else the
|
|
9932
|
+
* geometry's resolved stroke colour.
|
|
9933
|
+
*/
|
|
9934
|
+
readonly strokeColor: _angular_core.Signal<string>;
|
|
8459
9935
|
private readonly shapeStyle;
|
|
8460
9936
|
readonly lineShadow: _angular_core.Signal<LineShadowParams | undefined>;
|
|
8461
9937
|
readonly lineGlow: _angular_core.Signal<string | undefined>;
|
|
@@ -8473,7 +9949,7 @@ declare class ConnectorRendererComponent {
|
|
|
8473
9949
|
readonly connectorSegments: _angular_core.Signal<TextSegment[] | undefined>;
|
|
8474
9950
|
readonly connectorTextStyle: _angular_core.Signal<TextStyle | undefined>;
|
|
8475
9951
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConnectorRendererComponent, never>;
|
|
8476
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConnectorRendererComponent, "pptx-connector-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "obstacles": { "alias": "obstacles"; "required": false; "isSignal": true; }; "canvasWidth": { "alias": "canvasWidth"; "required": false; "isSignal": true; }; "canvasHeight": { "alias": "canvasHeight"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
9952
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConnectorRendererComponent, "pptx-connector-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "obstacles": { "alias": "obstacles"; "required": false; "isSignal": true; }; "canvasWidth": { "alias": "canvasWidth"; "required": false; "isSignal": true; }; "canvasHeight": { "alias": "canvasHeight"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "animationState": { "alias": "animationState"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8477
9953
|
}
|
|
8478
9954
|
/** One parallel stroke of a (possibly compound) connector line. */
|
|
8479
9955
|
interface ConnectorStrand {
|
|
@@ -8571,6 +10047,13 @@ declare class ChartElementViewComponent {
|
|
|
8571
10047
|
* editing additionally requires the element to be SELECTED ({@link canEdit}).
|
|
8572
10048
|
*/
|
|
8573
10049
|
readonly editable: _angular_core.InputSignal<boolean>;
|
|
10050
|
+
/**
|
|
10051
|
+
* Native-animation playback state. When it carries a staged chart build
|
|
10052
|
+
* (`build.kind === 'chart'`) the chart reveals its series / categories / cells
|
|
10053
|
+
* progressively via the shared `applyChartBuildReveal`. Absent outside a
|
|
10054
|
+
* running presentation, so ordinary rendering is unaffected.
|
|
10055
|
+
*/
|
|
10056
|
+
readonly animationState: _angular_core.InputSignal<ElementAnimationState | undefined>;
|
|
8574
10057
|
/**
|
|
8575
10058
|
* The editor state layer. Optional: the renderer is also used outside the
|
|
8576
10059
|
* editing viewer (thumbnails, export). On-canvas chart edits commit through
|
|
@@ -8600,7 +10083,12 @@ declare class ChartElementViewComponent {
|
|
|
8600
10083
|
protected readonly canEdit: _angular_core.Signal<boolean>;
|
|
8601
10084
|
/** VM of the COMMITTED data: drag geometry must not rescale mid-drag. */
|
|
8602
10085
|
private readonly viewModel;
|
|
8603
|
-
/**
|
|
10086
|
+
/**
|
|
10087
|
+
* The element to render: committed data, or the local drag preview, with its
|
|
10088
|
+
* data trimmed to the stages revealed at the current staged-build progress (the
|
|
10089
|
+
* drag preview wins first). Whole-chart / no-build renders return the element
|
|
10090
|
+
* unchanged. Mirrors the Vue `ChartRenderer`'s `revealedElement`.
|
|
10091
|
+
*/
|
|
8604
10092
|
protected readonly renderedElement: _angular_core.Signal<PptxElement>;
|
|
8605
10093
|
protected readonly dragBadge: _angular_core.Signal<string>;
|
|
8606
10094
|
/** The part selected for THIS chart, or null. */
|
|
@@ -8617,7 +10105,7 @@ declare class ChartElementViewComponent {
|
|
|
8617
10105
|
protected onTitleKeydown(event: KeyboardEvent): void;
|
|
8618
10106
|
protected commitTitle(): void;
|
|
8619
10107
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartElementViewComponent, never>;
|
|
8620
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartElementViewComponent, "pptx-chart-element-view", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
10108
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartElementViewComponent, "pptx-chart-element-view", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "animationState": { "alias": "animationState"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8621
10109
|
}
|
|
8622
10110
|
|
|
8623
10111
|
/**
|
|
@@ -8779,6 +10267,14 @@ declare class SmartArtRendererComponent {
|
|
|
8779
10267
|
* `editable` input). Double-clicking a node only enters edit mode when true.
|
|
8780
10268
|
*/
|
|
8781
10269
|
readonly editable: _angular_core.InputSignal<boolean>;
|
|
10270
|
+
/**
|
|
10271
|
+
* Native-animation playback state. A staged diagram build
|
|
10272
|
+
* (`build.kind === 'diagram'`) reveals the leading nodes / drawing shapes for
|
|
10273
|
+
* the current progress; absent or non-diagram state renders every node. The
|
|
10274
|
+
* view box is still computed from the FULL shape set so the diagram does not
|
|
10275
|
+
* rescale as it builds. Mirrors the Vue `SmartArtRenderer`'s reveal slice.
|
|
10276
|
+
*/
|
|
10277
|
+
readonly animationState: _angular_core.InputSignal<ElementAnimationState | undefined>;
|
|
8782
10278
|
/**
|
|
8783
10279
|
* The editor state layer. Optional: the renderer is also used outside the
|
|
8784
10280
|
* editing viewer (thumbnails, export), where this service is not provided.
|
|
@@ -8821,6 +10317,13 @@ declare class SmartArtRendererComponent {
|
|
|
8821
10317
|
readonly shadowFilter: _angular_core.Signal<string | undefined>;
|
|
8822
10318
|
private readonly rawDrawingShapes;
|
|
8823
10319
|
readonly hasDrawingShapes: _angular_core.Signal<boolean>;
|
|
10320
|
+
private readonly diagramBuild;
|
|
10321
|
+
private readonly shownNodeCount;
|
|
10322
|
+
private readonly isPartialBuild;
|
|
10323
|
+
/** Leading node prefix revealed so far (full list when no partial build). */
|
|
10324
|
+
private readonly revealedNodes;
|
|
10325
|
+
/** Leading drawing-shape prefix revealed so far (proportional to nodes). */
|
|
10326
|
+
private readonly revealedShapeList;
|
|
8824
10327
|
private readonly viewBox;
|
|
8825
10328
|
/** `viewBox` attribute string for the drawing-shapes `<svg>`. */
|
|
8826
10329
|
readonly svgViewBox: _angular_core.Signal<string>;
|
|
@@ -8895,7 +10398,7 @@ declare class SmartArtRendererComponent {
|
|
|
8895
10398
|
private reflow;
|
|
8896
10399
|
readonly isEmpty: _angular_core.Signal<boolean>;
|
|
8897
10400
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartArtRendererComponent, never>;
|
|
8898
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartArtRendererComponent, "pptx-smart-art-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
10401
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartArtRendererComponent, "pptx-smart-art-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "animationState": { "alias": "animationState"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8899
10402
|
}
|
|
8900
10403
|
|
|
8901
10404
|
/**
|
|
@@ -9345,74 +10848,50 @@ declare class ZoomRendererComponent {
|
|
|
9345
10848
|
|
|
9346
10849
|
declare class AnimationPlaybackService {
|
|
9347
10850
|
private readonly destroyRef;
|
|
9348
|
-
/**
|
|
9349
|
-
|
|
9350
|
-
|
|
9351
|
-
|
|
9352
|
-
|
|
9353
|
-
|
|
9354
|
-
|
|
9355
|
-
|
|
9356
|
-
|
|
9357
|
-
|
|
9358
|
-
|
|
9359
|
-
|
|
9360
|
-
|
|
9361
|
-
private
|
|
9362
|
-
|
|
9363
|
-
|
|
9364
|
-
|
|
9365
|
-
readonly groupCount: _angular_core.Signal<number>;
|
|
9366
|
-
/**
|
|
9367
|
-
* The current playback step: how many click groups have been revealed.
|
|
9368
|
-
* Always clamped to the current group count. The manual override wins;
|
|
9369
|
-
* otherwise it follows the external index, defaulting to 0.
|
|
9370
|
-
*/
|
|
9371
|
-
readonly step: _angular_core.Signal<number>;
|
|
9372
|
-
/** True when every click group has been revealed. */
|
|
9373
|
-
readonly isComplete: _angular_core.Signal<boolean>;
|
|
9374
|
-
/**
|
|
9375
|
-
* Reactive map of `elementId → CSS properties` to apply for the current step.
|
|
9376
|
-
* Only elements in revealed click groups appear.
|
|
9377
|
-
*/
|
|
9378
|
-
readonly elementStyles: _angular_core.Signal<Map<string, CSSProperties>>;
|
|
9379
|
-
/**
|
|
9380
|
-
* Reactive map of `elementId → CSS properties` for elements whose entrance
|
|
9381
|
-
* has not yet been revealed (they should be hidden so they don't flash
|
|
9382
|
-
* visible before their group plays).
|
|
9383
|
-
*/
|
|
9384
|
-
readonly pendingStyles: _angular_core.Signal<Map<string, CSSProperties>>;
|
|
9385
|
-
/** Handle of the scheduled rAF auto-advance, or null when idle. */
|
|
9386
|
-
private rafHandle;
|
|
10851
|
+
/** Per-element native-animation state, keyed by element id. */
|
|
10852
|
+
readonly presentationElementStates: _angular_core.WritableSignal<Map<string, ElementAnimationState>>;
|
|
10853
|
+
/** The `@keyframes` CSS to inject once per slide. */
|
|
10854
|
+
readonly keyframesCss: _angular_core.WritableSignal<string>;
|
|
10855
|
+
/** Shape ids that trigger an interactive (`onShapeClick`) sequence. */
|
|
10856
|
+
readonly interactiveTriggerShapeIds: _angular_core.WritableSignal<ReadonlySet<string>>;
|
|
10857
|
+
/** Shape ids that trigger a hover (`onHover`) sequence. */
|
|
10858
|
+
readonly hoverTriggerShapeIds: _angular_core.WritableSignal<ReadonlySet<string>>;
|
|
10859
|
+
/** True when the main timeline has no more click-groups to reveal. */
|
|
10860
|
+
readonly isComplete: _angular_core.WritableSignal<boolean>;
|
|
10861
|
+
private controller;
|
|
10862
|
+
private readonly timers;
|
|
10863
|
+
private readonly buildHandle;
|
|
10864
|
+
private showWithAnimation;
|
|
10865
|
+
private frameRoot;
|
|
10866
|
+
private onPlayActionSound;
|
|
10867
|
+
private readonly ctx;
|
|
9387
10868
|
constructor();
|
|
9388
|
-
/**
|
|
9389
|
-
|
|
9390
|
-
/**
|
|
9391
|
-
|
|
10869
|
+
/** Scope media-command (`p:cmd`) target lookups to a stage root element. */
|
|
10870
|
+
setFrameRoot(root: () => HTMLElement | null): void;
|
|
10871
|
+
/** Register a host-provided action-sound player (embedded-sound resolution). */
|
|
10872
|
+
setActionSoundHandler(handler: ((soundPath: string) => void) | undefined): void;
|
|
10873
|
+
private animationsEnabled;
|
|
10874
|
+
/** Clear all pending timers + the in-flight staged-build RAF. */
|
|
10875
|
+
clearTimers(): void;
|
|
10876
|
+
private syncComplete;
|
|
9392
10877
|
/**
|
|
9393
|
-
*
|
|
9394
|
-
*
|
|
9395
|
-
*
|
|
10878
|
+
* Rebuild the controller for `slide` and seed the initial element state
|
|
10879
|
+
* (entrance-animated elements start hidden). Auto-plays the first click-group
|
|
10880
|
+
* when the slide opens with a withPrevious / afterPrevious / afterDelay build.
|
|
9396
10881
|
*/
|
|
9397
|
-
|
|
9398
|
-
/** Reveal every click group at once (jump to the slide's final state). */
|
|
9399
|
-
play(): void;
|
|
9400
|
-
/** Reset playback to before the first click group. */
|
|
9401
|
-
reset(): void;
|
|
9402
|
-
/**
|
|
9403
|
-
* Jump directly to a given step (clamped to the group count) and take manual
|
|
9404
|
-
* control. Useful for scrubbing.
|
|
9405
|
-
*/
|
|
9406
|
-
setStep(step: number): void;
|
|
10882
|
+
setSlide(slide: PptxSlide | undefined, showWithAnimation?: boolean): void;
|
|
9407
10883
|
/**
|
|
9408
|
-
*
|
|
9409
|
-
*
|
|
9410
|
-
*
|
|
9411
|
-
* `requestAnimationFrame` is unavailable (SSR).
|
|
10884
|
+
* Reveal the next click-group. Returns `true` if a group was revealed, `false`
|
|
10885
|
+
* when playback is complete or animations are disabled (so the caller can fall
|
|
10886
|
+
* through to slide navigation).
|
|
9412
10887
|
*/
|
|
9413
|
-
|
|
9414
|
-
/**
|
|
9415
|
-
|
|
10888
|
+
advance(): boolean;
|
|
10889
|
+
/** Play an interactive shape's sequence; `true` when it triggered one. */
|
|
10890
|
+
handleInteractiveShapeClick(shapeId: string): boolean;
|
|
10891
|
+
/** Play a hover shape's sequence; `true` when it triggered one. */
|
|
10892
|
+
handleHoverStart(shapeId: string): boolean;
|
|
10893
|
+
/** Reset a hover shape's sequence so the next hover replays it. */
|
|
10894
|
+
handleHoverEnd(shapeId: string): void;
|
|
9416
10895
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AnimationPlaybackService, never>;
|
|
9417
10896
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AnimationPlaybackService>;
|
|
9418
10897
|
}
|
|
@@ -9643,13 +11122,34 @@ declare class PresentationOverlayComponent implements OnInit {
|
|
|
9643
11122
|
* both fire for one tap.
|
|
9644
11123
|
*/
|
|
9645
11124
|
private closing;
|
|
11125
|
+
/**
|
|
11126
|
+
* Managed per-slide keyframes `<style>` element (colour animations + staged
|
|
11127
|
+
* text builds). The static preset keyframe library is injected once per
|
|
11128
|
+
* document by {@link ensurePresetAnimationKeyframes}.
|
|
11129
|
+
*/
|
|
11130
|
+
private readonly slideKeyframes;
|
|
11131
|
+
/** The hover-trigger shape the pointer is currently over (fires a sequence once). */
|
|
11132
|
+
private currentHoverTriggerId;
|
|
9646
11133
|
constructor();
|
|
9647
11134
|
/**
|
|
9648
|
-
* Imperatively apply
|
|
9649
|
-
*
|
|
9650
|
-
*
|
|
11135
|
+
* Imperatively apply each tracked element's native-animation state to its DOM
|
|
11136
|
+
* wrapper: visibility (entrance hide-until-revealed / exit), the CSS-animation
|
|
11137
|
+
* shorthand (entrance / emphasis / exit / colour keyframes), and a pointer
|
|
11138
|
+
* cursor on interactive / hover trigger shapes. Mirrors the Vue
|
|
11139
|
+
* `applyAnimationStyles`; every renderer emits a `data-element-id`, so this
|
|
11140
|
+
* needs no per-element renderer plumbing.
|
|
9651
11141
|
*/
|
|
9652
11142
|
private applyAnimationStyles;
|
|
11143
|
+
/** Resolve the nearest element id above a pointer target, if any. */
|
|
11144
|
+
private closestElementId;
|
|
11145
|
+
/**
|
|
11146
|
+
* Pointer moved over the stage: (re)play a hover-trigger shape's sequence once
|
|
11147
|
+
* on entering it (not on every descendant transition that `mouseover` bubbles
|
|
11148
|
+
* up), resetting the previous trigger on leaving it.
|
|
11149
|
+
*/
|
|
11150
|
+
protected onStageHover(event: MouseEvent): void;
|
|
11151
|
+
/** Pointer left the stage subtree entirely: reset any active hover trigger. */
|
|
11152
|
+
protected onStageHoverEnd(event: MouseEvent): void;
|
|
9653
11153
|
/** Viewport dimensions, updated on resize. */
|
|
9654
11154
|
private readonly viewportW;
|
|
9655
11155
|
private readonly viewportH;
|
|
@@ -9705,6 +11205,14 @@ declare class PresentationOverlayComponent implements OnInit {
|
|
|
9705
11205
|
onKeyDown(event: KeyboardEvent): void;
|
|
9706
11206
|
/** Left-click on the slide area advances to the next visible slide. */
|
|
9707
11207
|
protected onBodyClick(event: MouseEvent): void;
|
|
11208
|
+
/**
|
|
11209
|
+
* Click/tap/swipe advance. Like every forward step it first reveals the
|
|
11210
|
+
* current slide's next animation build; only once the builds are exhausted
|
|
11211
|
+
* does it advance the slide, and then only when the slide's transition allows
|
|
11212
|
+
* click-advance (advanceOnClick !== false). Keyboard and the on-screen
|
|
11213
|
+
* next/prev buttons call navigate() directly and are never gated.
|
|
11214
|
+
*/
|
|
11215
|
+
private advanceFromClick;
|
|
9708
11216
|
/** Toggle an annotation tool (clicking the active one disarms it). */
|
|
9709
11217
|
protected selectTool(tool: 'pen' | 'highlighter' | 'eraser' | 'laser'): void;
|
|
9710
11218
|
/** Toggle the live-caption (subtitle) bar. */
|
|
@@ -9998,9 +11506,12 @@ declare class PresentationSettingsCardComponent {
|
|
|
9998
11506
|
private readonly loader;
|
|
9999
11507
|
private readonly editor;
|
|
10000
11508
|
protected readonly props: _angular_core.WritableSignal<PptxPresentationProperties>;
|
|
11509
|
+
protected readonly frameSlides: _angular_core.Signal<boolean>;
|
|
11510
|
+
protected readonly slidesPerPage: _angular_core.Signal<number>;
|
|
10001
11511
|
private patch;
|
|
10002
11512
|
protected onShowTypeChange(event: Event): void;
|
|
10003
|
-
protected onCheckbox(event: Event, key: 'loopContinuously' | 'showWithNarration' | 'showWithAnimation'
|
|
11513
|
+
protected onCheckbox(event: Event, key: 'loopContinuously' | 'showWithNarration' | 'showWithAnimation'): void;
|
|
11514
|
+
protected onFrameSlidesChange(event: Event): void;
|
|
10004
11515
|
protected onSlidesPerPageChange(event: Event): void;
|
|
10005
11516
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PresentationSettingsCardComponent, never>;
|
|
10006
11517
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PresentationSettingsCardComponent, "pptx-presentation-settings-card", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
@@ -10137,7 +11648,7 @@ declare class TextAdvancedPanelComponent {
|
|
|
10137
11648
|
/** Exposed option arrays for the template. */
|
|
10138
11649
|
protected readonly alignOptions: [NonNullable<"center" | "left" | "right" | "justify" | "justLow" | "dist" | "thaiDist" | undefined>, string][];
|
|
10139
11650
|
protected readonly vAlignOptions: [NonNullable<"top" | "bottom" | "middle" | undefined>, string][];
|
|
10140
|
-
protected readonly textDirectionOptions: [NonNullable<"
|
|
11651
|
+
protected readonly textDirectionOptions: [NonNullable<"vertical" | "horizontal" | "eaVert" | "wordArtVert" | "wordArtVertRtl" | "mongolianVert" | "vertical270" | undefined>, string][];
|
|
10141
11652
|
protected alignLabel(align: NonNullable<TextStyle['align']>): string;
|
|
10142
11653
|
protected onAlignChange(align: NonNullable<TextStyle['align']>): void;
|
|
10143
11654
|
protected onVAlignChange(event: Event): void;
|
|
@@ -10879,10 +12390,16 @@ declare class MobileToolbarComponent {
|
|
|
10879
12390
|
readonly canEdit: _angular_core.InputSignal<boolean>;
|
|
10880
12391
|
/** Whether the mobile-menu sheet is currently open (highlights the button). */
|
|
10881
12392
|
readonly menuOpen: _angular_core.InputSignal<boolean>;
|
|
12393
|
+
/** Whether the host opted into the AI assistant (shows the top-right toggle). */
|
|
12394
|
+
readonly aiEnabled: _angular_core.InputSignal<boolean>;
|
|
12395
|
+
/** Whether the AI assistant panel is currently open (highlights the button). */
|
|
12396
|
+
readonly aiPanelOpen: _angular_core.InputSignal<boolean>;
|
|
10882
12397
|
/** Toolbar buttons the host wants hidden (gates Undo/Redo independently). */
|
|
10883
12398
|
readonly hiddenActions: _angular_core.InputSignal<ToolbarActionId[]>;
|
|
10884
12399
|
/** User tapped the Menu (hamburger) button. */
|
|
10885
12400
|
readonly toggleMenu: _angular_core.OutputEmitterRef<void>;
|
|
12401
|
+
/** User tapped the AI assistant toggle. */
|
|
12402
|
+
readonly toggleAiPanel: _angular_core.OutputEmitterRef<void>;
|
|
10886
12403
|
/** User tapped Undo. */
|
|
10887
12404
|
readonly undo: _angular_core.OutputEmitterRef<void>;
|
|
10888
12405
|
/** User tapped Redo. */
|
|
@@ -10893,7 +12410,7 @@ declare class MobileToolbarComponent {
|
|
|
10893
12410
|
readonly present: _angular_core.OutputEmitterRef<void>;
|
|
10894
12411
|
protected readonly toolbar: ToolbarVisibility;
|
|
10895
12412
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileToolbarComponent, never>;
|
|
10896
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileToolbarComponent, "pptx-mobile-toolbar", never, { "canUndo": { "alias": "canUndo"; "required": false; "isSignal": true; }; "canRedo": { "alias": "canRedo"; "required": false; "isSignal": true; }; "canPresent": { "alias": "canPresent"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "menuOpen": { "alias": "menuOpen"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; }, { "toggleMenu": "toggleMenu"; "undo": "undo"; "redo": "redo"; "save": "save"; "present": "present"; }, never, never, true, never>;
|
|
12413
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileToolbarComponent, "pptx-mobile-toolbar", never, { "canUndo": { "alias": "canUndo"; "required": false; "isSignal": true; }; "canRedo": { "alias": "canRedo"; "required": false; "isSignal": true; }; "canPresent": { "alias": "canPresent"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "menuOpen": { "alias": "menuOpen"; "required": false; "isSignal": true; }; "aiEnabled": { "alias": "aiEnabled"; "required": false; "isSignal": true; }; "aiPanelOpen": { "alias": "aiPanelOpen"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; }, { "toggleMenu": "toggleMenu"; "toggleAiPanel": "toggleAiPanel"; "undo": "undo"; "redo": "redo"; "save": "save"; "present": "present"; }, never, never, true, never>;
|
|
10897
12414
|
}
|
|
10898
12415
|
|
|
10899
12416
|
declare class NotesPanelComponent {
|
|
@@ -11062,7 +12579,7 @@ declare class StatusBarComponent {
|
|
|
11062
12579
|
/** Relative age label for a saved timestamp ("just now" / "N min ago"). */
|
|
11063
12580
|
private formatAutosaveAge;
|
|
11064
12581
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatusBarComponent, never>;
|
|
11065
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatusBarComponent, "pptx-status-bar", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "autosaveStatus": { "alias": "autosaveStatus"; "required": false; "isSignal": true; }; "notesOpen": { "alias": "notesOpen"; "required": false; "isSignal": true; }; "zoomPercent": { "alias": "zoomPercent"; "required": false; "isSignal": true; }; "sorterActive": { "alias": "sorterActive"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; }, { "toggleNotes": "toggleNotes"; "normalView": "normalView"; "openSorter": "openSorter"; "slideShow": "slideShow"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "zoomReset": "zoomReset"; }, never,
|
|
12582
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatusBarComponent, "pptx-status-bar", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "autosaveStatus": { "alias": "autosaveStatus"; "required": false; "isSignal": true; }; "notesOpen": { "alias": "notesOpen"; "required": false; "isSignal": true; }; "zoomPercent": { "alias": "zoomPercent"; "required": false; "isSignal": true; }; "sorterActive": { "alias": "sorterActive"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; }, { "toggleNotes": "toggleNotes"; "normalView": "normalView"; "openSorter": "openSorter"; "slideShow": "slideShow"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "zoomReset": "zoomReset"; }, never, ["[pptxCollabStatus]"], true, never>;
|
|
11066
12583
|
}
|
|
11067
12584
|
|
|
11068
12585
|
declare class EditorContextMenuComponent {
|
|
@@ -11072,8 +12589,17 @@ declare class EditorContextMenuComponent {
|
|
|
11072
12589
|
readonly y: _angular_core.InputSignal<number>;
|
|
11073
12590
|
/** Zero-based index of the slide being edited. */
|
|
11074
12591
|
readonly slideIndex: _angular_core.InputSignal<number>;
|
|
12592
|
+
/**
|
|
12593
|
+
* Whether to show the "Ask AI about this" / "Fix with AI" items. Gated by the
|
|
12594
|
+
* host on the `ai` config + a single selected element.
|
|
12595
|
+
*/
|
|
12596
|
+
readonly showAiActions: _angular_core.InputSignal<boolean>;
|
|
11075
12597
|
/** Emitted when the menu should close (Escape or outside click). */
|
|
11076
12598
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
12599
|
+
/** "Ask AI about this": open the assistant scoped to the selection. */
|
|
12600
|
+
readonly askAi: _angular_core.OutputEmitterRef<void>;
|
|
12601
|
+
/** "Fix with AI": open the assistant with a prefilled fix directive. */
|
|
12602
|
+
readonly fixAi: _angular_core.OutputEmitterRef<void>;
|
|
11077
12603
|
protected readonly editor: EditorStateService;
|
|
11078
12604
|
private readonly tableSelection;
|
|
11079
12605
|
private readonly host;
|
|
@@ -11088,6 +12614,8 @@ declare class EditorContextMenuComponent {
|
|
|
11088
12614
|
} | null>;
|
|
11089
12615
|
onEscape(): void;
|
|
11090
12616
|
onDocumentPointerDown(event: PointerEvent): void;
|
|
12617
|
+
protected onAskAi(): void;
|
|
12618
|
+
protected onFixAi(): void;
|
|
11091
12619
|
protected onCut(): void;
|
|
11092
12620
|
protected onCopy(): void;
|
|
11093
12621
|
protected onPaste(): void;
|
|
@@ -11113,7 +12641,7 @@ declare class EditorContextMenuComponent {
|
|
|
11113
12641
|
*/
|
|
11114
12642
|
private applyTable;
|
|
11115
12643
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EditorContextMenuComponent, never>;
|
|
11116
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EditorContextMenuComponent, "pptx-editor-context-menu", never, { "x": { "alias": "x"; "required": true; "isSignal": true; }; "y": { "alias": "y"; "required": true; "isSignal": true; }; "slideIndex": { "alias": "slideIndex"; "required": true; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
|
|
12644
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EditorContextMenuComponent, "pptx-editor-context-menu", never, { "x": { "alias": "x"; "required": true; "isSignal": true; }; "y": { "alias": "y"; "required": true; "isSignal": true; }; "slideIndex": { "alias": "slideIndex"; "required": true; "isSignal": true; }; "showAiActions": { "alias": "showAiActions"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "askAi": "askAi"; "fixAi": "fixAi"; }, never, never, true, never>;
|
|
11117
12645
|
}
|
|
11118
12646
|
|
|
11119
12647
|
/**
|
|
@@ -11776,35 +13304,20 @@ declare class PropertiesDialogComponent {
|
|
|
11776
13304
|
}
|
|
11777
13305
|
|
|
11778
13306
|
/**
|
|
11779
|
-
* share-helpers.ts:
|
|
13307
|
+
* share-helpers.ts: Share dialog helpers for the Angular viewer.
|
|
11780
13308
|
*
|
|
11781
|
-
*
|
|
11782
|
-
*
|
|
13309
|
+
* The shared subset (ShareFormFields / ShareDefaults / seedShareFields /
|
|
13310
|
+
* canStartShare) is re-exported from `pptx-viewer-shared` (`render/share-form`).
|
|
13311
|
+
* Two helpers stay local because they diverge from the shared builders:
|
|
13312
|
+
* - `buildCollaborationConfig` validates with `canStartShare` (non-blank room)
|
|
13313
|
+
* and emits a config WITHOUT `role`/`sessionIntent`, unlike the shared
|
|
13314
|
+
* `buildShareConfig` (which is `buildCreateCollaborationConfig`).
|
|
13315
|
+
* - `buildShareUrl` is Angular-only (no other binding builds a share link).
|
|
11783
13316
|
*
|
|
11784
13317
|
* No `any`; all regexes use the `/u` flag; no `String.prototype.replaceAll`,
|
|
11785
13318
|
* no regex named-capture-groups (ng-packagr lib-target constraints).
|
|
11786
13319
|
*/
|
|
11787
13320
|
|
|
11788
|
-
/** Prefilled values for the Share form fields. */
|
|
11789
|
-
interface ShareDefaults {
|
|
11790
|
-
roomId?: string;
|
|
11791
|
-
userName?: string;
|
|
11792
|
-
serverUrl?: string;
|
|
11793
|
-
}
|
|
11794
|
-
/** The Share form's editable fields. */
|
|
11795
|
-
interface ShareFormFields {
|
|
11796
|
-
roomId: string;
|
|
11797
|
-
userName: string;
|
|
11798
|
-
serverUrl: string;
|
|
11799
|
-
}
|
|
11800
|
-
/** Seed the form fields from the (optional) defaults, coercing absent values. */
|
|
11801
|
-
declare function seedShareFields(defaults?: ShareDefaults): ShareFormFields;
|
|
11802
|
-
/**
|
|
11803
|
-
* Whether the required fields are non-blank (after trimming). The server URL is
|
|
11804
|
-
* optional: a blank server selects the serverless (webrtc) peer-to-peer
|
|
11805
|
-
* transport, so only the room id and display name are required.
|
|
11806
|
-
*/
|
|
11807
|
-
declare function canStartShare(fields: ShareFormFields): boolean;
|
|
11808
13321
|
/**
|
|
11809
13322
|
* Assemble a {@link CollaborationConfig} from the (trimmed) form fields, or
|
|
11810
13323
|
* `null` when the form is incomplete. A blank server URL yields
|
|
@@ -11824,7 +13337,7 @@ declare class ShareDialogComponent {
|
|
|
11824
13337
|
/** Whether the dialog is visible. */
|
|
11825
13338
|
readonly open: _angular_core.InputSignal<boolean>;
|
|
11826
13339
|
/** Prefilled values for the form fields. */
|
|
11827
|
-
readonly defaults: _angular_core.InputSignal<ShareDefaults | undefined>;
|
|
13340
|
+
readonly defaults: _angular_core.InputSignal<ShareDefaults$1 | undefined>;
|
|
11828
13341
|
/** Whether a collaboration session is currently active (provider constructed). */
|
|
11829
13342
|
readonly active: _angular_core.InputSignal<boolean>;
|
|
11830
13343
|
/** Whether the websocket has reported a `connected` status. */
|
|
@@ -11940,6 +13453,8 @@ declare class ViewerExtraDialogsComponent {
|
|
|
11940
13453
|
readonly availableThemes: _angular_core.InputSignal<readonly ThemeCatalogEntry[]>;
|
|
11941
13454
|
readonly localeCode: _angular_core.InputSignal<string>;
|
|
11942
13455
|
readonly availableLocales: _angular_core.InputSignal<readonly LocaleCatalogEntry[]>;
|
|
13456
|
+
/** Whether the Settings dialog shows the bespoke AI chat-log export category. */
|
|
13457
|
+
readonly aiExportVisible: _angular_core.InputSignal<boolean>;
|
|
11943
13458
|
/** Fired with a restored `.pptx` version's bytes; the host swaps the deck. */
|
|
11944
13459
|
readonly restoreContent: _angular_core.OutputEmitterRef<Uint8Array<ArrayBufferLike>>;
|
|
11945
13460
|
readonly themeKeySelect: _angular_core.OutputEmitterRef<string>;
|
|
@@ -11981,7 +13496,7 @@ declare class ViewerExtraDialogsComponent {
|
|
|
11981
13496
|
/** Clear any save password. */
|
|
11982
13497
|
onRemovePassword(): void;
|
|
11983
13498
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerExtraDialogsComponent, never>;
|
|
11984
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ViewerExtraDialogsComponent, "pptx-viewer-extra-dialogs", never, { "activeSlideIndex": { "alias": "activeSlideIndex"; "required": false; "isSignal": true; }; "selectedElementId": { "alias": "selectedElementId"; "required": false; "isSignal": true; }; "filePath": { "alias": "filePath"; "required": false; "isSignal": true; }; "customShows": { "alias": "customShows"; "required": false; "isSignal": true; }; "themeKey": { "alias": "themeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; }, { "restoreContent": "restoreContent"; "themeKeySelect": "themeKeySelect"; "localeSelect": "localeSelect"; }, never, never, true, never>;
|
|
13499
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ViewerExtraDialogsComponent, "pptx-viewer-extra-dialogs", never, { "activeSlideIndex": { "alias": "activeSlideIndex"; "required": false; "isSignal": true; }; "selectedElementId": { "alias": "selectedElementId"; "required": false; "isSignal": true; }; "filePath": { "alias": "filePath"; "required": false; "isSignal": true; }; "customShows": { "alias": "customShows"; "required": false; "isSignal": true; }; "themeKey": { "alias": "themeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; "aiExportVisible": { "alias": "aiExportVisible"; "required": false; "isSignal": true; }; }, { "restoreContent": "restoreContent"; "themeKeySelect": "themeKeySelect"; "localeSelect": "localeSelect"; }, never, never, true, never>;
|
|
11985
13500
|
}
|
|
11986
13501
|
|
|
11987
13502
|
declare class EquationEditorDialogComponent {
|
|
@@ -12051,7 +13566,7 @@ declare class SetUpSlideShowDialogComponent {
|
|
|
12051
13566
|
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
12052
13567
|
/** Working copy of the properties; seeded from `properties` on open. */
|
|
12053
13568
|
readonly draft: _angular_core.WritableSignal<PptxPresentationProperties>;
|
|
12054
|
-
readonly showType: _angular_core.Signal<"kiosk" | "
|
|
13569
|
+
readonly showType: _angular_core.Signal<"kiosk" | "browsed" | "presented">;
|
|
12055
13570
|
readonly showSlidesMode: _angular_core.Signal<"range" | "all" | "customShow">;
|
|
12056
13571
|
constructor();
|
|
12057
13572
|
/** Merge a partial patch into the current draft. */
|
|
@@ -12386,6 +13901,11 @@ declare class SettingsDialogComponent {
|
|
|
12386
13901
|
readonly availableLocales: _angular_core.InputSignal<readonly LocaleCatalogEntry[]>;
|
|
12387
13902
|
/** Availability flags for the Add-ins pane (unset ids default to active). */
|
|
12388
13903
|
readonly addinStatus: _angular_core.InputSignal<ViewerAddinStatus | undefined>;
|
|
13904
|
+
/**
|
|
13905
|
+
* Whether to show the bespoke "AI" category (chat-log export), gated by the
|
|
13906
|
+
* host on the `ai` config. Absent by default (no AI category).
|
|
13907
|
+
*/
|
|
13908
|
+
readonly aiExportVisible: _angular_core.InputSignal<boolean>;
|
|
12389
13909
|
readonly optionChange: _angular_core.OutputEmitterRef<OptionValueChange>;
|
|
12390
13910
|
/** Restore a snapshot wholesale (Cancel semantics). */
|
|
12391
13911
|
readonly restoreOptions: _angular_core.OutputEmitterRef<ViewerOptions>;
|
|
@@ -12398,7 +13918,8 @@ declare class SettingsDialogComponent {
|
|
|
12398
13918
|
readonly localeSelect: _angular_core.OutputEmitterRef<string>;
|
|
12399
13919
|
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
12400
13920
|
protected readonly tabs: readonly ViewerOptionsTabDefinition[];
|
|
12401
|
-
|
|
13921
|
+
/** Active category id, or the bespoke `'ai'` sentinel for the AI export pane. */
|
|
13922
|
+
protected readonly activeTabId: _angular_core.WritableSignal<ViewerOptionsTabId | "ai">;
|
|
12402
13923
|
protected readonly activeTab: _angular_core.Signal<ViewerOptionsTabDefinition>;
|
|
12403
13924
|
/** Snapshot taken when the dialog opens, restored by Cancel. */
|
|
12404
13925
|
private snapshot;
|
|
@@ -12409,7 +13930,7 @@ declare class SettingsDialogComponent {
|
|
|
12409
13930
|
/** Escape confirms (keeps edits), mirroring React's dialog. */
|
|
12410
13931
|
protected onEscape(): void;
|
|
12411
13932
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SettingsDialogComponent, never>;
|
|
12412
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SettingsDialogComponent, "pptx-settings-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "themeKey": { "alias": "themeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; "addinStatus": { "alias": "addinStatus"; "required": false; "isSignal": true; }; }, { "optionChange": "optionChange"; "restoreOptions": "restoreOptions"; "ribbonTabHiddenChange": "ribbonTabHiddenChange"; "quickAccessCommandsChange": "quickAccessCommandsChange"; "resetOptions": "resetOptions"; "clearCache": "clearCache"; "themeKeySelect": "themeKeySelect"; "localeSelect": "localeSelect"; "close": "close"; }, never, never, true, never>;
|
|
13933
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SettingsDialogComponent, "pptx-settings-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "themeKey": { "alias": "themeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; "addinStatus": { "alias": "addinStatus"; "required": false; "isSignal": true; }; "aiExportVisible": { "alias": "aiExportVisible"; "required": false; "isSignal": true; }; }, { "optionChange": "optionChange"; "restoreOptions": "restoreOptions"; "ribbonTabHiddenChange": "ribbonTabHiddenChange"; "quickAccessCommandsChange": "quickAccessCommandsChange"; "resetOptions": "resetOptions"; "clearCache": "clearCache"; "themeKeySelect": "themeKeySelect"; "localeSelect": "localeSelect"; "close": "close"; }, never, never, true, never>;
|
|
12413
13934
|
}
|
|
12414
13935
|
|
|
12415
13936
|
declare class SettingsAppearanceTabComponent {
|
|
@@ -12434,7 +13955,7 @@ declare class AccountPageComponent {
|
|
|
12434
13955
|
readonly accountAuth: _angular_core.InputSignal<AccountAuthConfig | undefined>;
|
|
12435
13956
|
private readonly translate;
|
|
12436
13957
|
protected readonly swatches: readonly string[];
|
|
12437
|
-
protected readonly version = "1.31.
|
|
13958
|
+
protected readonly version = "1.31.5";
|
|
12438
13959
|
protected readonly profile: _angular_core.WritableSignal<ViewerProfile>;
|
|
12439
13960
|
protected readonly initial: _angular_core.Signal<string>;
|
|
12440
13961
|
protected readonly usage: _angular_core.WritableSignal<LocalStorageUsageSummary | null>;
|
|
@@ -12952,38 +14473,6 @@ interface PresenterNotes {
|
|
|
12952
14473
|
*/
|
|
12953
14474
|
declare function resolvePresenterNotes(slide: PptxSlide | undefined): PresenterNotes;
|
|
12954
14475
|
|
|
12955
|
-
/**
|
|
12956
|
-
* audience-content-store: IndexedDB-based storage for sharing PPTX content
|
|
12957
|
-
* between the presenter tab and audience tab.
|
|
12958
|
-
*
|
|
12959
|
-
* When the presenter opens an audience window, the PPTX bytes are stored in
|
|
12960
|
-
* IndexedDB. The audience tab retrieves them on load and then cleans up.
|
|
12961
|
-
*
|
|
12962
|
-
* Framework-agnostic port of the React store
|
|
12963
|
-
* (packages/react/src/viewer/hooks/presentation-mode/audience-content-store.ts).
|
|
12964
|
-
* The database, store, and key names are kept identical to React/Vue so the
|
|
12965
|
-
* cross-tab handoff stays wire-compatible regardless of which binding opened
|
|
12966
|
-
* the presenter window or which one renders the audience tab.
|
|
12967
|
-
*/
|
|
12968
|
-
/** URL hash that marks the current tab as the audience display. */
|
|
12969
|
-
declare const AUDIENCE_HASH = "#pptx-audience";
|
|
12970
|
-
/** Returns true if the current page was opened as an audience tab. */
|
|
12971
|
-
declare function isAudienceTab(): boolean;
|
|
12972
|
-
/**
|
|
12973
|
-
* Store PPTX content bytes so the audience tab can retrieve them.
|
|
12974
|
-
* Called by the presenter before opening the audience window.
|
|
12975
|
-
*/
|
|
12976
|
-
declare function storeAudienceContent(content: ArrayBuffer | Uint8Array, sessionId?: string): Promise<void>;
|
|
12977
|
-
/**
|
|
12978
|
-
* Load PPTX content bytes stored by the presenter tab.
|
|
12979
|
-
* Returns `null` if nothing is stored.
|
|
12980
|
-
*/
|
|
12981
|
-
declare function loadAudienceContent(sessionId?: string): Promise<Uint8Array | null>;
|
|
12982
|
-
/**
|
|
12983
|
-
* Remove stored audience content (cleanup).
|
|
12984
|
-
*/
|
|
12985
|
-
declare function clearAudienceContent(sessionId?: string): Promise<void>;
|
|
12986
|
-
|
|
12987
14476
|
/**
|
|
12988
14477
|
* SVG path generators for WordArt text warp presets.
|
|
12989
14478
|
*
|
|
@@ -14167,7 +15656,13 @@ declare class RibbonPrimaryRowComponent {
|
|
|
14167
15656
|
readonly commentCount: _angular_core.InputSignal<number>;
|
|
14168
15657
|
/** Toolbar buttons the host wants hidden (gates Broadcast + the export overflow items). */
|
|
14169
15658
|
readonly hiddenActions: _angular_core.InputSignal<ToolbarActionId[]>;
|
|
15659
|
+
/** Whether the host enabled the AI assistant (shows the Sparkles toggle). */
|
|
15660
|
+
readonly aiEnabled: _angular_core.InputSignal<boolean>;
|
|
15661
|
+
/** Whether the AI assistant panel is currently open (toggle active state). */
|
|
15662
|
+
readonly aiPanelOpen: _angular_core.InputSignal<boolean>;
|
|
14170
15663
|
readonly toggleSidebar: _angular_core.OutputEmitterRef<void>;
|
|
15664
|
+
/** Emitted when the user clicks the AI assistant Sparkles toggle. */
|
|
15665
|
+
readonly toggleAiPanel: _angular_core.OutputEmitterRef<void>;
|
|
14171
15666
|
readonly toggleComments: _angular_core.OutputEmitterRef<void>;
|
|
14172
15667
|
readonly present: _angular_core.OutputEmitterRef<void>;
|
|
14173
15668
|
readonly presenter: _angular_core.OutputEmitterRef<void>;
|
|
@@ -14200,7 +15695,7 @@ declare class RibbonPrimaryRowComponent {
|
|
|
14200
15695
|
protected onDocumentPointerDown(event: PointerEvent): void;
|
|
14201
15696
|
protected onOverflow(key: string): void;
|
|
14202
15697
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonPrimaryRowComponent, never>;
|
|
14203
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonPrimaryRowComponent, "pptx-ribbon-primary-row", never, { "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "sidebarCollapsed": { "alias": "sidebarCollapsed"; "required": false; "isSignal": true; }; "inspectorOpen": { "alias": "inspectorOpen"; "required": false; "isSignal": true; }; "commentsOpen": { "alias": "commentsOpen"; "required": false; "isSignal": true; }; "commentCount": { "alias": "commentCount"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; }, { "toggleSidebar": "toggleSidebar"; "toggleComments": "toggleComments"; "present": "present"; "presenter": "presenter"; "broadcast": "broadcast"; "openCustomShows": "openCustomShows"; "toggleInspector": "toggleInspector"; "openSettings": "openSettings"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "print": "print"; "info": "info"; "a11y": "a11y"; "save": "save"; }, never, never, true, never>;
|
|
15698
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonPrimaryRowComponent, "pptx-ribbon-primary-row", never, { "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "sidebarCollapsed": { "alias": "sidebarCollapsed"; "required": false; "isSignal": true; }; "inspectorOpen": { "alias": "inspectorOpen"; "required": false; "isSignal": true; }; "commentsOpen": { "alias": "commentsOpen"; "required": false; "isSignal": true; }; "commentCount": { "alias": "commentCount"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; "aiEnabled": { "alias": "aiEnabled"; "required": false; "isSignal": true; }; "aiPanelOpen": { "alias": "aiPanelOpen"; "required": false; "isSignal": true; }; }, { "toggleSidebar": "toggleSidebar"; "toggleAiPanel": "toggleAiPanel"; "toggleComments": "toggleComments"; "present": "present"; "presenter": "presenter"; "broadcast": "broadcast"; "openCustomShows": "openCustomShows"; "toggleInspector": "toggleInspector"; "openSettings": "openSettings"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "print": "print"; "info": "info"; "a11y": "a11y"; "save": "save"; }, never, never, true, never>;
|
|
14204
15699
|
}
|
|
14205
15700
|
|
|
14206
15701
|
declare class RibbonReviewSectionComponent {
|
|
@@ -14346,6 +15841,14 @@ declare function hasExitedFullscreen(doc: Document | null | undefined): boolean;
|
|
|
14346
15841
|
* Exported separately so they can be unit-tested without TestBed.
|
|
14347
15842
|
*/
|
|
14348
15843
|
|
|
15844
|
+
/**
|
|
15845
|
+
* Whether a click/tap/swipe advance must be swallowed instead of moving to the
|
|
15846
|
+
* next slide. A click still steps the current slide's remaining animation
|
|
15847
|
+
* builds, so this only blocks once they are exhausted (`playbackComplete`) and
|
|
15848
|
+
* only when the slide's transition sets advanceOnClick to false. Keyboard and
|
|
15849
|
+
* the on-screen next/prev buttons never consult this.
|
|
15850
|
+
*/
|
|
15851
|
+
declare function shouldBlockClickAdvance(playbackComplete: boolean, slide: PptxSlide | undefined): boolean;
|
|
14349
15852
|
/**
|
|
14350
15853
|
* Clamp `index` to the valid range [0, count - 1].
|
|
14351
15854
|
* Returns 0 when `count` is 0 to avoid -1 states.
|
|
@@ -14699,50 +16202,6 @@ declare class ColorChangedImageComponent {
|
|
|
14699
16202
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ColorChangedImageComponent, "pptx-color-changed-image", never, { "src": { "alias": "src"; "required": true; "isSignal": true; }; "clrChange": { "alias": "clrChange"; "required": true; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "imgClass": { "alias": "imgClass"; "required": false; "isSignal": true; }; "imgStyle": { "alias": "imgStyle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
14700
16203
|
}
|
|
14701
16204
|
|
|
14702
|
-
/**
|
|
14703
|
-
* EyeDropper colour sampler for the Angular viewer.
|
|
14704
|
-
*
|
|
14705
|
-
* Prefers the native browser EyeDropper API (Chrome 95+ / Edge 95+). For
|
|
14706
|
-
* browsers without it (Firefox, Safari) a DOM-sampling fallback reads the
|
|
14707
|
-
* colour under the pointer via `elementFromPoint` + `getComputedStyle`, so the
|
|
14708
|
-
* eyedropper still works everywhere. Mirrors the React viewer's
|
|
14709
|
-
* `viewer/utils/eyedropper.ts`.
|
|
14710
|
-
*/
|
|
14711
|
-
/** A sampled colour, as hex plus its RGB channels. */
|
|
14712
|
-
interface EyedropperResult {
|
|
14713
|
-
hex: string;
|
|
14714
|
-
r: number;
|
|
14715
|
-
g: number;
|
|
14716
|
-
b: number;
|
|
14717
|
-
}
|
|
14718
|
-
/**
|
|
14719
|
-
* Returns true when the native EyeDropper API is available in this browser.
|
|
14720
|
-
* Guards against SSR / headless environments without `window`.
|
|
14721
|
-
*/
|
|
14722
|
-
declare function eyedropperAvailable(): boolean;
|
|
14723
|
-
/**
|
|
14724
|
-
* Open the native EyeDropper and return the picked sRGB hex colour string
|
|
14725
|
-
* (e.g. `"#a3b4c5"`), or `null` when the user cancels or the API is absent.
|
|
14726
|
-
*/
|
|
14727
|
-
declare function openNativeEyeDropper(): Promise<string | null>;
|
|
14728
|
-
/**
|
|
14729
|
-
* Sample the colour at a client-space point by inspecting the topmost element's
|
|
14730
|
-
* computed paint. Tries, in order: a real `<canvas>` pixel read (sharp for
|
|
14731
|
-
* rasterised content), then the element's `background-color`, SVG `fill`, and
|
|
14732
|
-
* finally text `color`. Returns `null` when nothing paintable is found.
|
|
14733
|
-
*
|
|
14734
|
-
* This is the DOM fallback used when the native EyeDropper API is unavailable;
|
|
14735
|
-
* it needs no canvas plumbing, so it works against the live slide DOM.
|
|
14736
|
-
*/
|
|
14737
|
-
declare function sampleColorFromSlide(clientX: number, clientY: number): EyedropperResult | null;
|
|
14738
|
-
/**
|
|
14739
|
-
* Run the eyedropper fallback: arm a one-shot pointer listener and resolve with
|
|
14740
|
-
* the hex colour of the next click (or `null` if the user presses Escape). Used
|
|
14741
|
-
* only when {@link eyedropperAvailable} is false. The caller is responsible for
|
|
14742
|
-
* any "armed" UI affordance; this just manages the listeners.
|
|
14743
|
-
*/
|
|
14744
|
-
declare function pickColorByClickFallback(): Promise<string | null>;
|
|
14745
|
-
|
|
14746
16205
|
declare class CustomShowsComponent {
|
|
14747
16206
|
private readonly translate;
|
|
14748
16207
|
/** Whether the dialog is open. */
|
|
@@ -14953,31 +16412,6 @@ declare class ThemeGalleryComponent {
|
|
|
14953
16412
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ThemeGalleryComponent, "pptx-theme-gallery", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "activeName": { "alias": "activeName"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; }, { "applyTheme": "applyTheme"; "applyCustomTheme": "applyCustomTheme"; "close": "close"; }, never, never, true, never>;
|
|
14954
16413
|
}
|
|
14955
16414
|
|
|
14956
|
-
/**
|
|
14957
|
-
* theme-gallery-presets.ts: the exact theme set shown in the Design tab's
|
|
14958
|
-
* Theme Gallery, at parity with React's `BUILT_IN_THEMES`
|
|
14959
|
-
* (packages/react/src/viewer/components/toolbar/theme-gallery-data.ts).
|
|
14960
|
-
*
|
|
14961
|
-
* This is a DIFFERENT set from core's `THEME_PRESETS`: it adds Wisp, Berlin,
|
|
14962
|
-
* Slice, and Dividend and omits Slate and Metropolitan, in React's order
|
|
14963
|
-
* (office, facet, integral, ion, retrospect, organic, wisp, berlin, slice,
|
|
14964
|
-
* dividend).
|
|
14965
|
-
*
|
|
14966
|
-
* The six themes that also exist in core (`office`, `facet`, `integral`,
|
|
14967
|
-
* `ion`, `organic`, `retrospect`) are reused verbatim from core's
|
|
14968
|
-
* `THEME_PRESETS` (looked up by id) so their colour/font schemes stay
|
|
14969
|
-
* canonical. The four gallery-only themes are defined here, with colour
|
|
14970
|
-
* schemes copied from React's data and React's flat `{ majorFont, minorFont }`
|
|
14971
|
-
* fontScheme converted to core's nested `{ majorFont: { latin }, minorFont:
|
|
14972
|
-
* { latin } }` shape.
|
|
14973
|
-
*/
|
|
14974
|
-
|
|
14975
|
-
/**
|
|
14976
|
-
* The gallery theme set, in React's order. Six canonical core presets plus the
|
|
14977
|
-
* four gallery-only additions.
|
|
14978
|
-
*/
|
|
14979
|
-
declare const GALLERY_THEME_PRESETS: readonly PptxThemePreset[];
|
|
14980
|
-
|
|
14981
16415
|
declare class TitleBarComponent {
|
|
14982
16416
|
/** Whether the deck is editable (gates the autosave/quick-access/search chrome). */
|
|
14983
16417
|
readonly canEdit: _angular_core.InputSignal<boolean>;
|
|
@@ -15171,5 +16605,5 @@ declare const SEQUENCE_OPTIONS: ReadonlyArray<{
|
|
|
15171
16605
|
labelKey: string;
|
|
15172
16606
|
}>;
|
|
15173
16607
|
|
|
15174
|
-
export { ALIGN_OPTIONS, AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AVATAR_COLOR_SWATCHES, AccessibilityPanelComponent, AccessibilityService, AccountPageComponent, ActionSettingsPanelComponent, AdvancedChartEditorComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, AutosaveService, BroadcastDialogComponent, CHART_EDITOR_STYLES, CURSOR_PALETTE, CanvasFitService, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartElementViewComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartPartSelectionService, ChartPrimitivesComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, CollaborationCursorsComponent, CollaborationService, ColorChangedImageComponent, CommentsPanelComponent, CommentsService, ComparePanelComponent, ConnectorRendererComponent, ConnectorTextOverlayComponent, CustomShowsComponent, DATA_TABLE_HEADER_H, DATA_TABLE_KEY_W, DATA_TABLE_PADDING, DATA_TABLE_ROW_H, DEFAULT_BOUNDS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_COLOR_SCHEME, DEFAULT_FILL_COLOR, DEFAULT_LAYOUT, DEFAULT_PALETTE$1 as DEFAULT_PALETTE, DEFAULT_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_STYLE, DEFAULT_TABLE_ROW_HEIGHT, DEFAULT_TEXT_COLOR, DEFAULT_VIEWER_PROFILE, DIRECTIONAL_PRESETS, DIRECTION_OPTIONS, DocumentPropertiesCardComponent, EMBEDDED_FONTS_STYLE_ID, EMPHASIS_PRESETS, ENTRANCE_PRESETS, TEMPLATES as EQUATION_TEMPLATES, EXIT_PRESETS, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportProgressModalComponent, ExportService, FieldContextService, FindBarComponent, FindReplaceBarComponent, FollowModeBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GALLERY_THEME_PRESETS, GradientPickerComponent, HANDOUT_OPTIONS, HeaderFooterDialogComponent, HyperlinkDialogComponent, ImagePropertiesPanelComponent, InkDrawingService, InkRendererComponent, InsertSmartArtDialogComponent, InspectorPaneHeaderComponent, InspectorPanelComponent, IsMobileService, KeepAnnotationsDialogComponent, LOCALE_CATALOG, LONG_PRESS_DURATION_MS, LONG_PRESS_MOVE_TOLERANCE_PX, LoadContentService, LocalPresencePublisher, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MediaPreviewComponent, MediaPropertiesPanelComponent, MediaRendererComponent, MediaTrimTimelineComponent, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesHandoutCardComponent, NotesPanelComponent, NotesToolbarComponent, OleRendererComponent, POWER_POINT_VIEWER_PROVIDERS, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationPropertiesPanelComponent, PresentationSettingsCardComponent, PresentationSubtitleBarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, REPEAT_MODE_OPTIONS, RESIZE_HANDLES, RULER_THICKNESS, RemoteSelectionOverlayComponent, RibbonAnimationsSectionComponent, RibbonArrangeSectionComponent, RibbonColorPopoverComponent, RibbonComponent, RibbonDesignSectionComponent, RibbonDrawSectionComponent, RibbonDrawingGroupComponent, RibbonEditingSectionComponent, RibbonFileSectionComponent, RibbonFontControlsComponent, RibbonHomeSectionComponent, RibbonInsertFieldsComponent, RibbonInsertSectionComponent, RibbonParagraphControlsComponent, RibbonPrimaryRowComponent, RibbonReviewSectionComponent, RibbonSlideshowSectionComponent, RibbonTransitionsSectionComponent, RibbonViewSectionComponent, RulerGuidesService, SEQUENCE_OPTIONS, SEVERITY_GROUPS, SEVERITY_LABELS, SHORTCUT_REFERENCE_ITEMS, SLIDE_PX_PER_INCH, SLIDE_TRANSITION_KEYFRAMES, DEFAULT_PALETTE as SMARTART_DEFAULT_PALETTE, PALETTES as SMARTART_PALETTES, SMART_ART_COLOR_SCHEMES, SMART_ART_STYLE_OPTIONS, SUB_ITEM_LABEL, SVG_WARP_PRESETS, SWIPE_MAX_VERTICAL_PX, SWIPE_THRESHOLD_PX, SelectionPaneComponent, SetUpSlideShowDialogComponent, SettingsAppearanceTabComponent, SettingsDialogComponent, SettingsLanguageTabComponent, ShareDialogComponent, ShortcutPanelComponent, ShowOptionsFieldsetComponent, ShowSlidesFieldsetComponent, SignatureStrippedDialogComponent, SignaturesPanelComponent, SignaturesService, SlideCanvasComponent, SlideDefaultInspectorComponent, SlideDiffChangesComponent, SlideDiffRowComponent, SlideDiffThumbnailsComponent, SlideSizeCardComponent, SlideSorterOverlayComponent, SlideThemeOverridePanelComponent, SlidesPanelComponent, SmartArt3DRendererComponent, SmartArt3DService, SmartArtPreviewComponent, SmartArtPropertiesComponent, SmartArtRendererComponent, StatusBarComponent, TABLE_STRUCTURE_TOGGLES, TEXT_DIRECTION_OPTIONS, THEME_CATALOG, TIMING_CURVE_OPTIONS, TRIGGER_OPTIONS, TYPE_LABELS, TableCellAdvancedFillComponent, TableCellFormattingComponent, TableDataEditorComponent, TablePropertiesComponent, TableRendererComponent, TableResizeOverlayComponent, TableSelectionService, TextAdvancedPanelComponent, ThemeEditorFieldsComponent, ThemeGalleryComponent, ThemeSelectorCardComponent, TitleBarComponent, VALIGN_OPTIONS, VIEWER_THEME, VersionHistoryPanelComponent, ViewerCanvasEditingService, ViewerCollabCursorService, ViewerCollaborationSessionService, ViewerCompareService, ViewerCustomShowsService, ViewerDialogsService, ViewerDocumentPropertiesService, ViewerExportService, ViewerExtraDialogsComponent, ViewerFileIOService, ViewerFindReplaceService, ViewerFormatPainterService, ViewerInspectorPanelService, ViewerKeyboardService, ViewerMobileSheetService, ViewerPresentationModeService, ViewerThemeGalleryService, ViewerTouchGesturesService, ViewerZoomService, WEBM_MIME_CANDIDATES, WriteBackScheduler, ZoomNavigationService, ZoomRendererComponent, ZoomTargetService, addCategory, addCommentToList, addGradientStopPatch, addItem, addSeries, addSubItem, advanceStep, alignPatch, animationFor, annotationMapToInkInserts, applyAcceptedDiff, applyAnimationPreset, applyFindReplacements, applyFormatToElement, applyMove, applyResize, applyTableStylePreset, asMediaElement, assignUserColor, attachTouchGestures, beginNodeEdit, boolFromEvent, bringForward, bringToFront, buildBarActions, buildBroadcastConfig, buildBroadcastViewerUrl, buildCategoryLabels, buildCellParagraphs, buildChartViewModel, buildChromeStyle, buildClearHyperlinkPatch, buildClickGroups, buildColStyles, buildCollaborationConfig, buildComboViewModel, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildEquationElement, buildEquationSegment, buildFallbackViewModel, buildFontFaceRule, buildGradientFillCss, buildGridlinesAndLabels, buildHyperlinkPatch, buildInkContainerStyle, buildInkStrokes, buildLegend, buildModel3DContainerStyle, buildModel3DViewModel, buildOleActionModel, buildOleInfoRows, buildPatternFillCss, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildRegionMapViewModel, buildSaveSlides, buildShareUrl, buildSmartArtInsertElement, buildSmartArtNodes, buildStockViewModel, buildSurfaceViewModel, buildTableViewModel, buildTreemapViewModel, buildTrimFragment, buildWaterfallViewModel, buildZeroLine, buildZoomContainerStyle, buildZoomViewModel, bulletIndentPx, canAddTopLevelNode, canRemoveTopLevelNode, canStartBroadcast, canStartShare, canUseClipboard, captionDisplayText, cellRunStyle, cellStyleToStyleMap, cellTdStyle, changeCountLabel, changeIcon, characterSpacingPatch, checkFontAvailable, clampCursorPosition, clampGifDimensions, clampIndex, clampNotesFontSize, clampScale, clampStep, clearAllLocalViewerData, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, collectUsedFontFamilies, columnWidthStyle, commitNodeText, computeAlign, computeAxisTitlePrimitives, computeBarRects, computeBubbleRadius, computeCornerHandle, computeDataTablePrimitives, computeDistribute, computeDrawingViewBox, computeErrorBarPrimitives, computeHandleBoxes, computeHandoutLayout, computeIsMobile, computeIsTablet, computeLinePoints, computeLinearRegression, computePageCount, computePieLayout, computePieSlicePath, computePieSlices, computePlotLayout, computeRSquared, computeRadarPoints, computeScatterDots, computeSelectionBoxes, computeSingleSelected, computeSlideIndices, computeSnap, computeStackedBarRects, computeStackedValueRange, computeTextLines, computeTimerProgress, computeTrendlinePrimitives, computeValueRange, convertOmmlToMathMl, copyFormatFromElement, countAccessibilityIssues, countAnnotationStrokes, createCustomShow, createSwipeDismissDrag, createWebrtcBundle, createWebsocketBundle, cssObjectToStyleMap, currentColorScheme, currentLayout, currentStyle, defaultCssVars, defaultRadius, defaultThemeColors, deleteElementsByIds, deleteVersion as deleteRecoveryVersion, demoteNode, deriveModel3DBlobUrl, derivePresenceList, describeSmartArtBounds, disableGlowPatch, disableInnerShadowPatch, disableOuterShadowPatch, disableReflectionPatch, disableSoftEdgePatch, duplicateElementById, durationOf, effectsStateOf, enableGlowPatch, enableInnerShadowPatch, enableOuterShadowPatch, enableReflectionPatch, enableSoftEdgePatch, encodeGif, estimatePageCount, evenColumnWidths, evenRowHeights, exitPresentationFullscreen, extractPathPoints, eyedropperAvailable, fillColorOf, findInSlides, findOwningSlideIndex, findSlideIndexByElementId, fitPolynomial, fitZoom, fontMimeForFormat, fontSizeOf, formatAutoNumber, formatAxisValue, formatBytes, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, generateCustomShowId, generatePressureCircles, generateRulerTicks, getClrChangeParams, getContainerStyle, getDuotoneFilterDef, getImageSrc, getLocalStorageUsageSummary, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDownloadFileName, getOleTypeColor, getOleTypeLabel, getPasswordStrength, getPatternSvg, getPlaceholderStyle, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getSmartArtNodeBounds, getSpeechRecognitionCtor, getTextBlockStyle, getTextWarp, getTouchDistance, getWarpCategory, getWarpPath, gradientStateFromStyle, gradientStateOf, gradientStatePatch, gridColumns, groupElements, groupIssuesBySeverity, hasAnimation, hasCopyableFormat, hasExistingLink, hasExitedFullscreen, hasGradientFill, hasPressureVariation, headerLabel, inkViewBox, insertColumn, insertRow, interpolateWidth, isAudienceTab, isBold, isBrowserOpenableMime, isChildNode, isElementInteractive, isInjectableUrl, isItalic, isPpactionUrl, isPresenterMessage, isSigned, isTextElement, isUnderline, isUrlSafe, isValidRoomId, isViewportBackgroundPressTarget, isZoomActivationKey, issueTrackKey, issueTypeLabel, keyToLabel, latexToMathml, linePointsToSvgString, lineSpacingPatch, loadAudienceContent, mergeCaptionResults, mergeDown, mergeRight, mergeSelection, moveElementBy, moveNodeDown, moveNodeUp, msToFrameDelayCs, narrowToCircle, narrowToPolygon, narrowToRect, newChartElement, newEquationElement, newPresetShapeElement, newShapeElement, newSmartArtElement, newTableElement, newTextElement, nextVisibleIndex, nodeBold, nodeEditBox, nodeFillColor, nodeFontColor, nodeIdFromKey, nodeItalic, nodeStyle, normalizeFontFormat, normalizeSlidesPerPage, normalizeValue, numFromEvent, ommlToMathml, ooxmlDashToCssBorderStyle, openNativeEyeDropper, overallStatus, paletteColor, parseAudienceNonce, parseNodeTextarea, partitionSlides, patchChartData, patchChartStyle, patchTableData, patchTextStyle, pendingElementStyles, pickColorByClickFallback, pickSupportedMimeType, planGifFrames, planVideoSegments, pointsToSvgPathD, presenceToCursors, presetByLayout, presetsForCategory, pressuresToWidths, prevVisibleIndex, projectDrawingShapes, promoteNode, provideViewerTheme, radarAngle, radarRingPoints, recordWebm, redistributeColumnWidth, removeAnimation, removeCategory, removeColumn, removeCommentFromList, removeElementAnimation, removeGradientStopPatch, removeNode, removeRow, removeSeries, renderToCanvas, reorderAnimationDown, reorderAnimationUp, replaceInSlides, replaceMatch, requestPresentationFullscreen, resizeElement, resolveCaptionTracks, resolveChartKind, resolveFontVariant, resolveHyperlinkHref, resolveInteractiveElementId, resolveMediaSrc, resolveOleType, resolveParagraphBullet, resolvePresenterNotes, resolveProfileInitial, resolveRegionCode, resolvePalette as resolveSmartArtPalette, resolveThemeCatalogEntry, resolveTransitionDuration, revealedElementStyles, routeOrthogonalConnector, rowStyle, sampleColorFromSlide, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, saveViewerProfile, scanAvailableFonts, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, selectValue, sendBackward, sendToBack, sequentialColorScale, serializeWriteBack, seriesColor, setAnimationEmphasis, setAnimationEntrance, setAnimationExit, setAxis, setAxisLogScale, setAxisTitleStyle, setCategoryLabel, setCellText, setColorScheme, setDataLabels, setDataPointExplosion, setDataPointFill, setDataPointLabel, setDelay, setDirection, setDuration, setElementPosition, setGridlineStyle, setLayout, setLegend, setNodeStyle, setNodeText, setRepeatCount, setRepeatMode, setSequence, setSeriesChartType, setSeriesColor, setSeriesErrorBars, setSeriesMarker, setSeriesName, setSeriesTrendline, setSeriesValue, setStyle, setTimingCurve, setTitle, setTrigger, setTriggerShapeId, shapeStylePatch, sheetAfterNavigate, shouldUseSvgWarp, showDirectionPicker, showsTemplateAffordance, signatureCountLabel, signatureKey, signatureTimestamp, signerName, statusLabel as slideDiffStatusLabel, slideNumberOf, smartArtNodes, paletteColour as smartArtPaletteColour, snapToGridStep, splitCursorCell, splitMergedCell, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, stringFromEvent, strokeColorOf, strokeToInkElement, styleShadowFilter, textAdvancedPatch, textAdvancedStateFromStyle, textAdvancedStateOf, textColorOf, textDirectionPatch, textStyleOf, textStylePatch, themeStyle, themeToCssVars, thumbnailHeight, thumbnailZoom, toggleCommentResolvedInList, toggleNodeBold, toggleNodeItalic, toggleSheet, topLevelNodeCount, transformSelectedTextCase, translationsEn, ungroupElements, updateElementById, updateGlowPatch, updateGradientStopPatch, updateInnerShadowPatch, updateOuterShadowPatch, updateReflectionPatch, vAlignPatch, validatePassword, validatePrintSettings, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, waypointsToPathD, worstStatus, zoomTargetSlideIndex };
|
|
15175
|
-
export type { AccessibilityIssueGroup, AccountAuthConfig, ActionDescriptor, AlignBox, AlignMode, AnimationClickGroup, AnimationGroup, AnnotationInkInsert, AnnotationStroke, AttachTouchGesturesConfig, AwarenessLike, BarRect, Box, BroadcastConfig, BroadcastDefaults, CSSProperties, CanvasSize, CellCoord, CellParagraph, CellTextRun, ChartPartRef, ChartPartSelection, ChartValueDrag, ChartViewModel, ClassValue, ClrChangeParams, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, CornerHandleBox, CustomShow, CustomThemeEdit, DestroyableYDoc, DiagonalBorderInfo, DistributeMode, DocumentProperties, DrawingViewBox, DuotoneFilterDef, EffectsState, EmbeddedFontStyles, EquationTemplate, EyedropperResult, FindOptions, FindResult, GifFrame, GifFramePlan, GifPlanOptions, GlowState, GradientState, GradientStop$1 as GradientStop, GroupResult, HandleBox, HandoutSlidesPerPage, HyperlinkDraft, InkPoint, InkStroke, InlineEditState, InnerShadowState, LegendEntry, LinePoint, LinearFit, LocalIdentity, LocalStorageUsageSummary, LocaleCatalogEntry, MobileSheetKey, Model3DViewModel, NodeEditBox, NotesSegmentViewModel, ObjectUrlFactory, OleActionModel, OleInfoRow, OuterShadowState, OverallSignatureStatus, PartitionedSlides, PathPoint, PieSliceGeometry, PlotLayout, PlotLayoutOptions, PositionUpdate, PowerPointViewerAPI, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, PressureCircle, PrintColorMode, PrintHtmlDocumentOptions as PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, ProviderBundle, ProviderLike, RadarPoint, RecordWebmOptions, RecoveryVersion, ReflectionState, RemoteCursor, SanitizedPresence as RemotePresence, RenderedShape, ReplaceResult, ResizeHandle, ResolvedCaptionTrack, ResolvedFontVariant, ResolvedOleType, RulerTick, ScatterDot, SelectionBox, ShapeStyleChanges, ShareDefaults, ShareFormFields, ShortcutReferenceItem, SignatureStatusKind, SlideInspectorTab, SlideTransitionAnimations, SmartArtInsertEvent, SmartArtNodeBounds, SnapBox, SnapGuide, SnapResult, SoftEdgeState, SpeechAlternative, SpeechRecognitionCtor, SpeechRecognitionEventLite, SpeechRecognitionLite, SpeechResult, SpeechResultList, SpeechSupportState, StrokeToInkElementOpts, StyleMap, SupportedChartKind, SvgAreaGradient, SvgCircle, SvgLine, SvgPath, SvgPolygon, SvgPolyline, SvgPrimitive, SvgRect, SvgText, SwipeDismissDrag, TableBooleanFlag, TableCellSelection, TableCellViewModel, TableRowViewModel, TemplateElementsBySlideId, TextAdvancedChanges, TextAdvancedState, TextStyleChanges, TextWarpCssDef, TextWarpDef, TextWarpPathDef, ThemeCatalogEntry, TimerProgress, ToolbarActionId, TouchGestureCallbacks, TranslationKey, UngroupResult, ValueRange, VideoPlanOptions, VideoSegmentPlan, ViewerMode, ViewerProfile, ViewerSettings, ViewerTheme, ViewerThemeColors, ZoomViewModel };
|
|
16608
|
+
export { ALIGN_OPTIONS, AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AVATAR_COLOR_SWATCHES, AccessibilityPanelComponent, AccessibilityService, AccountPageComponent, ActionSettingsPanelComponent, AdvancedChartEditorComponent, AiChangeOverlayComponent, AiChatPanelComponent, AiChatService, AiComposerComponent, AiFocusBarComponent, AiFocusHighlightOverlayComponent, AiMessageListComponent, AiPanelStore, AiProposalCardComponent, AiSettingsSectionComponent, AiToolCallCardComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, AutosaveService, BroadcastDialogComponent, CHART_EDITOR_STYLES, CURSOR_PALETTE, CanvasFitService, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartElementViewComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartPartSelectionService, ChartPrimitivesComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, CollaborationCursorsComponent, CollaborationService, ColorChangedImageComponent, CommentsPanelComponent, CommentsService, ComparePanelComponent, ConnectorRendererComponent, ConnectorTextOverlayComponent, CustomShowsComponent, DATA_TABLE_HEADER_H, DATA_TABLE_KEY_W, DATA_TABLE_PADDING, DATA_TABLE_ROW_H, DEFAULT_BOUNDS, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_COLOR_SCHEME, DEFAULT_FILL_COLOR, DEFAULT_LAYOUT, DEFAULT_PALETTE$1 as DEFAULT_PALETTE, DEFAULT_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_STYLE, DEFAULT_TABLE_ROW_HEIGHT, DEFAULT_TEXT_COLOR, DEFAULT_VIEWER_PROFILE, DIRECTIONAL_PRESETS, DIRECTION_OPTIONS, DocumentPropertiesCardComponent, EMBEDDED_FONTS_STYLE_ID, EMPHASIS_PRESETS, ENTRANCE_PRESETS, TEMPLATES as EQUATION_TEMPLATES, EXIT_PRESETS, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportProgressModalComponent, ExportService, FieldContextService, FindBarComponent, FindReplaceBarComponent, FollowModeBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GALLERY_THEME_PRESETS, GradientPickerComponent, HANDOUT_OPTIONS, HeaderFooterDialogComponent, HyperlinkDialogComponent, ImagePropertiesPanelComponent, InkDrawingService, InkRendererComponent, InsertSmartArtDialogComponent, InspectorPaneHeaderComponent, InspectorPanelComponent, IsMobileService, KeepAnnotationsDialogComponent, LOCALE_CATALOG, LONG_PRESS_DURATION_MS, LONG_PRESS_MOVE_TOLERANCE_PX, LoadContentService, LocalPresencePublisher, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MediaPreviewComponent, MediaPropertiesPanelComponent, MediaRendererComponent, MediaTrimTimelineComponent, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesHandoutCardComponent, NotesPanelComponent, NotesToolbarComponent, OleRendererComponent, POWER_POINT_VIEWER_PROVIDERS, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationPropertiesPanelComponent, PresentationSettingsCardComponent, PresentationSubtitleBarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, REPEAT_MODE_OPTIONS, RESIZE_HANDLES, RULER_THICKNESS, RemoteSelectionOverlayComponent, RibbonAnimationsSectionComponent, RibbonArrangeSectionComponent, RibbonColorPopoverComponent, RibbonComponent, RibbonDesignSectionComponent, RibbonDrawSectionComponent, RibbonDrawingGroupComponent, RibbonEditingSectionComponent, RibbonFileSectionComponent, RibbonFontControlsComponent, RibbonHomeSectionComponent, RibbonInsertFieldsComponent, RibbonInsertSectionComponent, RibbonParagraphControlsComponent, RibbonPrimaryRowComponent, RibbonReviewSectionComponent, RibbonSlideshowSectionComponent, RibbonTransitionsSectionComponent, RibbonViewSectionComponent, RulerGuidesService, SEQUENCE_OPTIONS, SEVERITY_GROUPS, SEVERITY_LABELS, SHORTCUT_REFERENCE_ITEMS, SLIDE_PX_PER_INCH, SLIDE_TRANSITION_KEYFRAMES, DEFAULT_PALETTE as SMARTART_DEFAULT_PALETTE, PALETTES as SMARTART_PALETTES, SMART_ART_COLOR_SCHEMES, SMART_ART_STYLE_OPTIONS, SUB_ITEM_LABEL, SVG_WARP_PRESETS, SWIPE_MAX_VERTICAL_PX, SWIPE_THRESHOLD_PX, SelectionPaneComponent, SetUpSlideShowDialogComponent, SettingsAppearanceTabComponent, SettingsDialogComponent, SettingsLanguageTabComponent, ShareDialogComponent, ShortcutPanelComponent, ShowOptionsFieldsetComponent, ShowSlidesFieldsetComponent, SignatureStrippedDialogComponent, SignaturesPanelComponent, SignaturesService, SlideCanvasComponent, SlideDefaultInspectorComponent, SlideDiffChangesComponent, SlideDiffRowComponent, SlideDiffThumbnailsComponent, SlideSizeCardComponent, SlideSorterOverlayComponent, SlideThemeOverridePanelComponent, SlidesPanelComponent, SmartArt3DRendererComponent, SmartArt3DService, SmartArtPreviewComponent, SmartArtPropertiesComponent, SmartArtRendererComponent, StatusBarComponent, TABLE_STRUCTURE_TOGGLES, TEXT_DIRECTION_OPTIONS, THEME_CATALOG, TIMING_CURVE_OPTIONS, TRIGGER_OPTIONS, TYPE_LABELS, TableCellAdvancedFillComponent, TableCellFormattingComponent, TableDataEditorComponent, TablePropertiesComponent, TableRendererComponent, TableResizeOverlayComponent, TableSelectionService, TextAdvancedPanelComponent, ThemeEditorFieldsComponent, ThemeGalleryComponent, ThemeSelectorCardComponent, TitleBarComponent, VALIGN_OPTIONS, VIEWER_THEME, VersionHistoryPanelComponent, ViewerCanvasEditingService, ViewerCollabCursorService, ViewerCollaborationSessionService, ViewerCompareService, ViewerCustomShowsService, ViewerDialogsService, ViewerDocumentPropertiesService, ViewerExportService, ViewerExtraDialogsComponent, ViewerFileIOService, ViewerFindReplaceService, ViewerFormatPainterService, ViewerInspectorPanelService, ViewerKeyboardService, ViewerMobileSheetService, ViewerPresentationModeService, ViewerThemeGalleryService, ViewerTouchGesturesService, ViewerZoomService, WEBM_MIME_CANDIDATES, WriteBackScheduler, ZoomNavigationService, ZoomRendererComponent, ZoomTargetService, addCategory, addCommentToList, addGradientStopPatch, addItem, addSeries, addSubItem, advanceStep, aiToggleVisible, alignPatch, animationFor, annotationMapToInkInserts, applyAcceptedDiff, applyAnimationPreset, applyFindReplacements, applyFormatToElement, applyMove, applyResize, applyTableStylePreset, asMediaElement, assignUserColor, attachTouchGestures, beginNodeEdit, boolFromEvent, bringForward, bringToFront, buildBarActions, buildBroadcastConfig, buildBroadcastViewerUrl, buildCategoryLabels, buildCellParagraphs, buildChartViewModel, buildChatLogExport, buildChatLogMarkdown, buildChromeStyle, buildClearHyperlinkPatch, buildClickGroups, buildColStyles, buildCollaborationConfig, buildComboViewModel, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildEquationElement, buildEquationSegment, buildFallbackViewModel, buildFontFaceRule, buildGradientFillCss, buildGridlinesAndLabels, buildHyperlinkPatch, buildInkContainerStyle, buildInkStrokes, buildLegend, buildModel3DContainerStyle, buildModel3DViewModel, buildOleActionModel, buildOleInfoRows, buildPatternFillCss, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildRegionMapViewModel, buildSaveSlides, buildShareUrl, buildSmartArtInsertElement, buildSmartArtNodes, buildStockViewModel, buildSurfaceViewModel, buildTableViewModel, buildTreemapViewModel, buildTrimFragment, buildWaterfallViewModel, buildZeroLine, buildZoomContainerStyle, buildZoomViewModel, bulletIndentPx, canAddTopLevelNode, canRemoveTopLevelNode, canStartBroadcast, canStartShare, canUseClipboard, captionDisplayText, cellRunStyle, cellStyleToStyleMap, cellTdStyle, changeCountLabel, changeIcon, characterSpacingPatch, checkFontAvailable, clampCursorPosition, clampGifDimensions, clampIndex, clampNotesFontSize, clampScale, clampStep, clearAllLocalViewerData, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, collectStoredChats, collectUsedFontFamilies, columnWidthStyle, commitNodeText, computeAlign, computeAxisTitlePrimitives, computeBarRects, computeBubbleRadius, computeCornerHandle, computeDataTablePrimitives, computeDistribute, computeDrawingViewBox, computeErrorBarPrimitives, computeFocusTargets, computeHandleBoxes, computeHandoutLayout, computeIsMobile, computeIsTablet, computeLinePoints, computeLinearRegression, computePageCount, computePieLayout, computePieSlicePath, computePieSlices, computePlotLayout, computeRSquared, computeRadarPoints, computeScatterDots, computeSelectionBoxes, computeSingleSelected, computeSlideIndices, computeSnap, computeStackedBarRects, computeStackedValueRange, computeTextLines, computeTimerProgress, computeTrendlinePrimitives, computeValueRange, convertOmmlToMathMl, copyFormatFromElement, countAccessibilityIssues, countAnnotationStrokes, createAngularAiBridge, createCustomShow, createSwipeDismissDrag, createWebrtcBundle, createWebsocketBundle, cssObjectToStyleMap, currentColorScheme, currentLayout, currentStyle, defaultCssVars, defaultRadius, defaultThemeColors, deleteElementsByIds, deleteVersion as deleteRecoveryVersion, demoteNode, deriveModel3DBlobUrl, derivePresenceList, describeSmartArtBounds, disableGlowPatch, disableInnerShadowPatch, disableOuterShadowPatch, disableReflectionPatch, disableSoftEdgePatch, duplicateElementById, durationOf, effectsStateOf, enableGlowPatch, enableInnerShadowPatch, enableOuterShadowPatch, enableReflectionPatch, enableSoftEdgePatch, encodeGif, estimatePageCount, evenColumnWidths, evenRowHeights, exitPresentationFullscreen, exportAiChatLogs, extractPathPoints, eyedropperAvailable, fillColorOf, findInSlides, findOwningSlideIndex, findSlideIndexByElementId, fitPolynomial, fitZoom, focusTargetChips, fontMimeForFormat, fontSizeOf, formatAutoNumber, formatAxisValue, formatBytes, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, generateCustomShowId, generatePressureCircles, generateRulerTicks, getClrChangeParams, getContainerStyle, getDuotoneFilterDef, getImageSrc, getLocalStorageUsageSummary, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDownloadFileName, getOleTypeColor, getOleTypeLabel, getPasswordStrength, getPatternSvg, getPlaceholderStyle, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getSmartArtNodeBounds, getSpeechRecognitionCtor, getTextBlockStyle, getTextWarp, getTouchDistance, getWarpCategory, getWarpPath, gradientStateFromStyle, gradientStateOf, gradientStatePatch, gridColumns, groupElements, groupIssuesBySeverity, hasAnimation, hasCopyableFormat, hasExistingLink, hasExitedFullscreen, hasGradientFill, hasPressureVariation, headerLabel, inkViewBox, insertColumn, insertRow, interpolateWidth, isAudienceTab, isBold, isBrowserOpenableMime, isChildNode, isElementInteractive, isInjectableUrl, isItalic, isPpactionUrl, isPresenterMessage, isSigned, isTextElement, isTwoTableFocus, isUnderline, isUrlSafe, isValidRoomId, isViewportBackgroundPressTarget, isZoomActivationKey, issueTrackKey, issueTypeLabel, keyToLabel, latexToMathml, linePointsToSvgString, lineSpacingPatch, loadAudienceContent, mergeCaptionResults, mergeDown, mergeRight, mergeSelection, moveElementBy, moveNodeDown, moveNodeUp, msToFrameDelayCs, narrowToCircle, narrowToPolygon, narrowToRect, newChartElement, newEquationElement, newPresetShapeElement, newShapeElement, newSmartArtElement, newTableElement, newTextElement, nextVisibleIndex, nodeBold, nodeEditBox, nodeFillColor, nodeFontColor, nodeIdFromKey, nodeItalic, nodeStyle, normalizeFontFormat, normalizeSlidesPerPage, normalizeValue, numFromEvent, ommlToMathml, ooxmlDashToCssBorderStyle, openNativeEyeDropper, overallStatus, paletteColor, parseAudienceNonce, parseNodeTextarea, partitionSlides, patchChartData, patchChartStyle, patchTableData, patchTextStyle, pendingElementStyles, pickColorByClickFallback, pickSupportedMimeType, planGifFrames, planVideoSegments, pointsToSvgPathD, presenceToCursors, presetByLayout, presetsForCategory, pressuresToWidths, prevVisibleIndex, projectDrawingShapes, promoteNode, provideViewerTheme, radarAngle, radarRingPoints, recordWebm, redistributeColumnWidth, removeAnimation, removeCategory, removeColumn, removeCommentFromList, removeElementAnimation, removeGradientStopPatch, removeNode, removeRow, removeSeries, renderToCanvas, reorderAnimationDown, reorderAnimationUp, replaceInSlides, replaceMatch, requestPresentationFullscreen, resizeElement, resolveCaptionTracks, resolveChartKind, resolveFontVariant, resolveHyperlinkHref, resolveInteractiveElementId, resolveMediaSrc, resolveOleType, resolveParagraphBullet, resolvePresenterNotes, resolveProfileInitial, resolveRegionCode, resolvePalette as resolveSmartArtPalette, resolveThemeCatalogEntry, resolveTransitionDuration, revealedElementStyles, routeOrthogonalConnector, rowStyle, sampleColorFromSlide, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, saveViewerProfile, scanAvailableFonts, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, selectValue, sendBackward, sendToBack, sequentialColorScale, serializeWriteBack, seriesColor, setAnimationEmphasis, setAnimationEntrance, setAnimationExit, setAxis, setAxisLogScale, setAxisTitleStyle, setCategoryLabel, setCellText, setColorScheme, setDataLabels, setDataPointExplosion, setDataPointFill, setDataPointLabel, setDelay, setDirection, setDuration, setElementPosition, setGridlineStyle, setLayout, setLegend, setNodeStyle, setNodeText, setRepeatCount, setRepeatMode, setSequence, setSeriesChartType, setSeriesColor, setSeriesErrorBars, setSeriesMarker, setSeriesName, setSeriesTrendline, setSeriesValue, setStyle, setTimingCurve, setTitle, setTrigger, setTriggerShapeId, shapeStylePatch, sheetAfterNavigate, shouldBlockClickAdvance, shouldUseSvgWarp, showDirectionPicker, showsTemplateAffordance, signatureCountLabel, signatureKey, signatureTimestamp, signerName, statusLabel as slideDiffStatusLabel, slideNumberOf, smartArtNodes, paletteColour as smartArtPaletteColour, snapToGridStep, splitCursorCell, splitMergedCell, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, stringFromEvent, strokeColorOf, strokeToInkElement, styleShadowFilter, textAdvancedPatch, textAdvancedStateFromStyle, textAdvancedStateOf, textColorOf, textDirectionPatch, textStyleOf, textStylePatch, themeStyle, themeToCssVars, thumbnailHeight, thumbnailZoom, toggleCommentResolvedInList, toggleNodeBold, toggleNodeItalic, toggleSheet, topLevelNodeCount, transformSelectedTextCase, translationsEn, ungroupElements, updateElementById, updateGlowPatch, updateGradientStopPatch, updateInnerShadowPatch, updateOuterShadowPatch, updateReflectionPatch, vAlignPatch, validatePassword, validatePrintSettings, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, waypointsToPathD, worstStatus, zoomTargetSlideIndex };
|
|
16609
|
+
export type { AccessibilityIssueGroup, AccountAuthConfig, ActionDescriptor, AiCanvasHighlight, AiChatInitState, AiLogChat, AiLogExport, AiLogFormat, AiLogMessage, AiPanelSelectionAccessors, AlignBox, AlignMode, AnimationClickGroup, AnimationGroup, AnnotationInkInsert, AnnotationStroke, AttachTouchGesturesConfig, AwarenessLike, BarRect, Box, BridgeDeps, BroadcastConfig, BroadcastDefaults, CSSProperties, CanvasSize, CellCoord, CellParagraph, CellTextRun, ChartPartRef, ChartPartSelection, ChartValueDrag, ChartViewModel, ClassValue, ClrChangeParams, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, CornerHandleBox, CustomShow, CustomThemeEdit, DestroyableYDoc, DiagonalBorderInfo, DistributeMode, DocumentProperties, DrawingViewBox, DuotoneFilterDef, EffectsState, EmbeddedFontStyles, EquationTemplate, EyedropperResult, FindOptions, FindResult, FocusChip, FocusSelectionInput, GifFrame, GifFramePlan, GifPlanOptions, GlowState, GradientState, GradientStop$1 as GradientStop, GroupResult, HandleBox, HandoutSlidesPerPage, HyperlinkDraft, InkPoint, InkStroke, InlineEditState, InnerShadowState, LegendEntry, LinePoint, LinearFit, LocalIdentity, LocalStorageUsageSummary, LocaleCatalogEntry, MobileSheetKey, Model3DViewModel, NodeEditBox, NotesSegmentViewModel, ObjectUrlFactory, OleActionModel, OleInfoRow, OuterShadowState, OverallSignatureStatus, PartitionedSlides, PathPoint, PieSliceGeometry, PieSliceOptions, PlotLayout, PlotLayoutOptions, PositionUpdate, PowerPointViewerAPI, PptxAiBridge, PptxAiConfig, PptxAiConnection, PptxAiContextStrategy, PptxAiElementUpdate, PptxAiToolName, PptxAiUIMessage, PptxAiWritePolicy, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, PressureCircle, PrintColorMode, PrintHtmlDocumentOptions as PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, ProposalView, ProviderBundle, ProviderLike, RadarPoint, RecordWebmOptions, RecoveryVersion, ReflectionState, RemoteCursor, SanitizedPresence as RemotePresence, RenderedShape, ReplaceResult, ResizeHandle, ResolvedCaptionTrack, ResolvedFontVariant, ResolvedOleType, RulerTick, ScatterDot, SelectionBox, ShapeStyleChanges, ShareDefaults$1 as ShareDefaults, ShareFormFields, ShortcutReferenceItem, SignatureStatusKind, SlideInspectorTab, SlideTransitionAnimations, SmartArtInsertEvent, SmartArtNodeBounds, SnapBox, SnapGuide, SnapResult, SoftEdgeState, SpeechAlternative, SpeechRecognitionCtor, SpeechRecognitionEventLite, SpeechRecognitionLite, SpeechResult, SpeechResultList, SpeechSupportState, StagedProposal, StrokeToInkElementOpts, StyleMap, SupportedChartKind, SvgAreaGradient, SvgCircle, SvgLine, SvgPath, SvgPolygon, SvgPolyline, SvgPrimitive, SvgRect, SvgText, SwipeDismissDrag, TableBooleanFlag, TableCellSelection, TableCellViewModel, TableRowViewModel, TemplateElementsBySlideId, TextAdvancedChanges, TextAdvancedState, TextStyleChanges, TextWarpCssDef, TextWarpDef, TextWarpPathDef, ThemeCatalogEntry, TimerProgress, ToolbarActionId, TouchGestureCallbacks, TranslationKey, UngroupResult, ValueRange, VideoPlanOptions, VideoSegmentPlan, ViewerMode, ViewerProfile, ViewerSettings, ViewerTheme, ViewerThemeColors, ZoomViewModel };
|