pptx-angular-viewer 2.17.9 → 2.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +690 -0
- package/fesm2022/{pptx-angular-viewer-chat-history-idb-BlZB9Hud.mjs → pptx-angular-viewer-chat-history-idb-C0GIYHCu.mjs} +2 -2
- package/fesm2022/{pptx-angular-viewer-chat-history-idb-BlZB9Hud.mjs.map → pptx-angular-viewer-chat-history-idb-C0GIYHCu.mjs.map} +1 -1
- package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-DU7u7IGX.mjs → pptx-angular-viewer-pptx-angular-viewer-h8WcCkyN.mjs} +21313 -13380
- package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-DU7u7IGX.mjs.map → pptx-angular-viewer-pptx-angular-viewer-h8WcCkyN.mjs.map} +1 -1
- package/fesm2022/pptx-angular-viewer.mjs +2 -2
- package/package.json +3 -3
- package/pptx-angular-viewer.css +1 -1
- package/types/pptx-angular-viewer.d.ts +1887 -372
- package/types/pptx-angular-viewer.d.ts.map +1 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as pptx_viewer_core from 'pptx-viewer-core';
|
|
2
|
-
import { PptxThemePreset, PptxSlide, PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartData, PptxElementAnimation, PptxAnimationPreset, PptxAnimationSequence, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, ParsedTableStyleMap, PptxThemeColorScheme, PptxThemeFontScheme, TablePptxElement, PptxSection, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, PptxSlideTransition, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, ElementActionType, InkPptxElement, PptxComment, PptxChartType, PptxChartBarDirection, PptxTheme, PptxHandler, PptxData, PptxHeaderFooter, PptxSlideMaster, PptxNotesMaster, PptxHandoutMaster, PptxPresentationProperties, PptxCoreProperties, PptxAppProperties, PptxThemeOption, PptxCustomProperty, PptxTagCollection, ParsedSignature, PptxSaveFormat, PptxTableCell, PptxTableCellStyle, PptxTableRow, PptxTableData,
|
|
3
|
-
export { SWITCHABLE_LAYOUT_TYPES, addSmartArtNode, addSmartArtNodeAsChild, chartDataAddCategory, chartDataAddSeries, chartDataChangeType, chartDataRemoveCategory, chartDataRemoveSeries, chartDataUpdatePoint, demoteSmartArtNode, promoteSmartArtNode, removeSmartArtNode, reorderSmartArtNode, switchSmartArtLayout, updateSmartArtNodeText } from 'pptx-viewer-core';
|
|
2
|
+
import { PptxThemePreset, PptxSlide, PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartData, PptxElementAnimation, PptxAnimationPreset, PptxAnimationSequence, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, ParsedTableStyleMap, PptxThemeColorScheme, PptxThemeFontScheme, TablePptxElement, PptxSection, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, PptxSlideTransition, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, ElementActionType, InkPptxElement, PptxComment, PptxChartType, PptxChartBarDirection, PptxTheme, PptxHandler, PptxData, PptxHeaderFooter, PptxCustomShow, PptxSlideMaster, PptxNotesMaster, PptxHandoutMaster, PptxPresentationProperties, PptxCoreProperties, PptxAppProperties, PptxThemeOption, PptxCustomProperty, PptxTagCollection, ParsedSignature, PptxSaveFormat, PptxTableCell, PptxTableCellStyle, PptxTableRow, PptxTableData, MasterViewTab, SvgExportOptions, Model3DPptxElement, ZoomPptxElement, ChartPptxElement, MediaPptxElement, SmartArtPptxElement, MaterialPresetType, Text3DStyle, BevelPresetType, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartMarker, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, SignatureStatus, ElementAction, PptxImageEffects, MediaBookmark, ColorMapAliasKey, ChartAxisEdit, ChartDataPointLabelEdit, PptxChartLegendPosition, PptxChartStyle, ChartAxisTitleStyleEdit, PptxChartMarkerSymbol, ChartGridlineStyleEdit, PptxSmartArtNode, SmartArtLayoutType, PptxSmartArtNodeStyle, PptxLayoutPreview, MediaCaptionTrack, PptxMediaType } from 'pptx-viewer-core';
|
|
3
|
+
export { GroupResult, SWITCHABLE_LAYOUT_TYPES, UngroupResult, addSmartArtNode, addSmartArtNodeAsChild, chartDataAddCategory, chartDataAddSeries, chartDataChangeType, chartDataRemoveCategory, chartDataRemoveSeries, chartDataUpdatePoint, demoteSmartArtNode, formatAutoNumberMarker as formatAutoNumber, groupElements, promoteSmartArtNode, removeSmartArtNode, reorderSmartArtNode, switchSmartArtLayout, ungroupElements, updateSmartArtNodeText } from 'pptx-viewer-core';
|
|
4
4
|
import * as _angular_core from '@angular/core';
|
|
5
5
|
import { Signal, WritableSignal, OnDestroy, OnInit, AfterViewInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
|
|
6
6
|
import * as AiSdk from 'ai';
|
|
@@ -903,7 +903,7 @@ interface ChartOption<V> {
|
|
|
903
903
|
* area / area3D -> polygon fill + polyline
|
|
904
904
|
* pie / doughnut / pie3D / ofPie -> arc paths
|
|
905
905
|
* scatter -> circle dots
|
|
906
|
-
* bubble -> circle dots sized by
|
|
906
|
+
* bubble -> circle dots sized by each series' own c:bubbleSize
|
|
907
907
|
* radar / radar3D -> polar polygons + spokes
|
|
908
908
|
* combo / stock / surface / treemap / waterfall / regionMap -> sibling modules
|
|
909
909
|
* funnel / sunburst / histogram / boxWhisker -> sibling modules
|
|
@@ -914,7 +914,7 @@ interface ChartOption<V> {
|
|
|
914
914
|
* area / area3D -> polygon fill + polyline
|
|
915
915
|
* pie / doughnut / pie3D / ofPie -> arc paths
|
|
916
916
|
* scatter -> circle dots
|
|
917
|
-
* bubble -> circle dots sized by
|
|
917
|
+
* bubble -> circle dots sized by each series' own c:bubbleSize
|
|
918
918
|
* radar / radar3D -> polar polygons + spokes
|
|
919
919
|
*
|
|
920
920
|
* Deferred (fallback box rendered instead):
|
|
@@ -1049,6 +1049,14 @@ interface SvgPath {
|
|
|
1049
1049
|
strokeWidth?: number;
|
|
1050
1050
|
opacity?: number;
|
|
1051
1051
|
part?: ChartPartRef;
|
|
1052
|
+
/**
|
|
1053
|
+
* Hover tooltip / accessible name, projected as an SVG `<title>` child.
|
|
1054
|
+
*
|
|
1055
|
+
* Only the region map sets it today: a choropleth patch carries no label of
|
|
1056
|
+
* its own, so without a tooltip the reader cannot tell which region a colour
|
|
1057
|
+
* belongs to. Projectors that ignore the field simply render no tooltip.
|
|
1058
|
+
*/
|
|
1059
|
+
title?: string;
|
|
1052
1060
|
}
|
|
1053
1061
|
interface SvgPolyline {
|
|
1054
1062
|
kind: 'polyline';
|
|
@@ -1241,7 +1249,25 @@ interface ScatterDot {
|
|
|
1241
1249
|
cx: number;
|
|
1242
1250
|
cy: number;
|
|
1243
1251
|
}
|
|
1244
|
-
|
|
1252
|
+
/**
|
|
1253
|
+
* The x extent a scatter / bubble plot is drawn against.
|
|
1254
|
+
*
|
|
1255
|
+
* Every `CT_ScatterSer` / `CT_BubbleSer` carries its own `c:xVal`, so the
|
|
1256
|
+
* domain has to be computed ACROSS series before any of them is projected;
|
|
1257
|
+
* letting each series derive its own min/span would stretch every series to
|
|
1258
|
+
* fill the plot and destroy the relationship between them.
|
|
1259
|
+
*/
|
|
1260
|
+
interface ScatterXDomain {
|
|
1261
|
+
min: number;
|
|
1262
|
+
span: number;
|
|
1263
|
+
}
|
|
1264
|
+
/**
|
|
1265
|
+
* Union x domain of several series' x values. Returns `undefined` when no
|
|
1266
|
+
* series declares a finite x value, in which case callers fall back to
|
|
1267
|
+
* positioning points by index.
|
|
1268
|
+
*/
|
|
1269
|
+
declare function computeScatterXDomain(seriesXValues: ReadonlyArray<ReadonlyArray<number> | undefined>): ScatterXDomain | undefined;
|
|
1270
|
+
declare function computeScatterDots(values: ReadonlyArray<number>, maxXIndex: number, layout: PlotLayout, range: ValueRange, xValues?: ReadonlyArray<number>, xDomain?: ScatterXDomain): ScatterDot[];
|
|
1245
1271
|
/**
|
|
1246
1272
|
* Radius of a bubble given its size value, the max size in the chart, and a
|
|
1247
1273
|
* median radius derived from the plot area. Mirrors `renderBubbleChart` in
|
|
@@ -1260,6 +1286,18 @@ declare function computeRadarPoints(values: ReadonlyArray<number>, maxVal: numbe
|
|
|
1260
1286
|
/** Points string for a radar gridline ring at radius `rr`. */
|
|
1261
1287
|
declare function radarRingPoints(cx: number, cy: number, rr: number, catCount: number): string;
|
|
1262
1288
|
type SupportedChartKind = 'bar' | 'line' | 'area' | 'pie' | 'doughnut' | 'scatter' | 'bubble' | 'radar' | 'combo' | 'stock' | 'surface' | 'treemap' | 'waterfall' | 'regionMap' | 'funnel' | 'sunburst' | 'histogram' | 'boxWhisker';
|
|
1289
|
+
/**
|
|
1290
|
+
* The `preserveAspectRatio` a chart kind's `<svg>` must carry.
|
|
1291
|
+
*
|
|
1292
|
+
* Cartesian charts stretch to fill the element box (`none`); the kinds whose
|
|
1293
|
+
* geometry is round or laid out on a fixed-ratio canvas (pie, doughnut, radar,
|
|
1294
|
+
* and the region map's 1000x500 world outline) keep their proportions instead.
|
|
1295
|
+
*
|
|
1296
|
+
* A pure decision function because all five bindings need the same answer and
|
|
1297
|
+
* four of them had written their own copy of the `kind === 'pie' || ...` chain;
|
|
1298
|
+
* one of the copies (React's) disagreed with the rest.
|
|
1299
|
+
*/
|
|
1300
|
+
declare function chartPreserveAspectRatio(kind: SupportedChartKind | 'unsupported'): 'none' | 'xMidYMid meet';
|
|
1263
1301
|
declare function resolveChartKind(chartType: string): SupportedChartKind | 'unsupported';
|
|
1264
1302
|
declare function buildChartViewModel(element: PptxElement): ChartViewModel;
|
|
1265
1303
|
declare function buildFallbackViewModel(width: number, height: number, label: string): ChartViewModel;
|
|
@@ -2198,67 +2236,6 @@ declare function computeDistribute(boxes: readonly AlignBox[], mode: DistributeM
|
|
|
2198
2236
|
/** The eight resize handles, named by compass direction. */
|
|
2199
2237
|
type ResizeHandleId = 'nw' | 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w';
|
|
2200
2238
|
|
|
2201
|
-
/**
|
|
2202
|
-
* group-ops: Pure, immutable group/ungroup operations for the slide element tree.
|
|
2203
|
-
*
|
|
2204
|
-
* No framework imports. No mutation of inputs. No `any` types. Shared by every
|
|
2205
|
-
* binding's editor.
|
|
2206
|
-
*
|
|
2207
|
-
* Coordinate system (verified from the renderer):
|
|
2208
|
-
* - The group <div> is positioned at (group.x, group.y) in slide space.
|
|
2209
|
-
* - Each child is positioned at (child.x, child.y) RELATIVE to the group's
|
|
2210
|
-
* top-left corner inside that div.
|
|
2211
|
-
*
|
|
2212
|
-
* Therefore:
|
|
2213
|
-
* - grouping -> child slide-absolute -> child group-relative:
|
|
2214
|
-
* childRelX = childAbsX - groupX
|
|
2215
|
-
* - ungrouping -> child group-relative -> child slide-absolute:
|
|
2216
|
-
* childAbsX = childRelX + groupX
|
|
2217
|
-
*/
|
|
2218
|
-
|
|
2219
|
-
interface GroupResult {
|
|
2220
|
-
/** New element array for the slide (same length - N + 1). */
|
|
2221
|
-
elements: PptxElement[];
|
|
2222
|
-
/**
|
|
2223
|
-
* The id of the newly-created group element, or `null` when the operation
|
|
2224
|
-
* was a no-op (fewer than 2 matching ids found).
|
|
2225
|
-
*/
|
|
2226
|
-
groupId: string | null;
|
|
2227
|
-
}
|
|
2228
|
-
interface UngroupResult {
|
|
2229
|
-
/** New element array for the slide. */
|
|
2230
|
-
elements: PptxElement[];
|
|
2231
|
-
/** The child ids that were actually applied (one per child, in order). */
|
|
2232
|
-
childIds: string[];
|
|
2233
|
-
}
|
|
2234
|
-
/**
|
|
2235
|
-
* Gather the elements whose `id` is in `ids` (preserving their existing array
|
|
2236
|
-
* order), compute the union bounding box, build a new `group` element whose
|
|
2237
|
-
* `children` are positioned relative to the group's top-left corner, remove
|
|
2238
|
-
* the originals, and insert the group where the topmost (lowest-index) grouped
|
|
2239
|
-
* element was.
|
|
2240
|
-
*
|
|
2241
|
-
* Requires >= 2 ids that actually exist in `elements`; otherwise returns the
|
|
2242
|
-
* original array unchanged and `groupId: null`.
|
|
2243
|
-
*
|
|
2244
|
-
* The caller supplies `groupId` for determinism (the service passes its
|
|
2245
|
-
* `newId()` result).
|
|
2246
|
-
*/
|
|
2247
|
-
declare function groupElements(elements: readonly PptxElement[], ids: readonly string[], groupId: string): GroupResult;
|
|
2248
|
-
/**
|
|
2249
|
-
* Find the group element identified by `groupId` in `elements`. If found and
|
|
2250
|
-
* it is a `group`, replace it in-place with its children, each converted back
|
|
2251
|
-
* to slide-absolute coordinates (childX + groupX, childY + groupY) and
|
|
2252
|
-
* assigned a fresh id from the `childIds` array (one per child, in order).
|
|
2253
|
-
*
|
|
2254
|
-
* If the element is not found or is not a group, returns the original inputs
|
|
2255
|
-
* unchanged.
|
|
2256
|
-
*
|
|
2257
|
-
* The caller supplies `childIds` for determinism (the service passes one
|
|
2258
|
-
* `newId()` result per child).
|
|
2259
|
-
*/
|
|
2260
|
-
declare function ungroupElements(elements: readonly PptxElement[], groupId: string, childIds: readonly string[]): UngroupResult;
|
|
2261
|
-
|
|
2262
2239
|
/**
|
|
2263
2240
|
* Slide-background style resolution.
|
|
2264
2241
|
*
|
|
@@ -2785,15 +2762,6 @@ declare function generateTicks(slideLengthPx: number, scale: number, unit: Ruler
|
|
|
2785
2762
|
*/
|
|
2786
2763
|
declare function rulerDragToGuidePosition(pointerOffsetPx: number, scale: number, slideLengthPx: number): number | null;
|
|
2787
2764
|
|
|
2788
|
-
/**
|
|
2789
|
-
* Render the n-th (1-based) marker for an OOXML auto-numbering scheme.
|
|
2790
|
-
*
|
|
2791
|
-
* Suffix conventions: `…Period` → `label.`, `…ParenR` → `label)`,
|
|
2792
|
-
* `…ParenBoth` → `(label)`, `…Plain` → bare numeral. Unrecognised schemes
|
|
2793
|
-
* fall back to `"<n>."`.
|
|
2794
|
-
*/
|
|
2795
|
-
declare function formatAutoNumber(autoNumType: string | undefined, n: number): string;
|
|
2796
|
-
|
|
2797
2765
|
/**
|
|
2798
2766
|
* Pure paragraph bullet / list-marker + indent helpers (framework-agnostic).
|
|
2799
2767
|
*
|
|
@@ -3177,6 +3145,31 @@ declare function routeOrthogonalConnector(start: RouterPoint, end: RouterPoint,
|
|
|
3177
3145
|
/** Convert an array of waypoints to an SVG path `d` string (comma-separated). */
|
|
3178
3146
|
declare function waypointsToPathD(waypoints: ReadonlyArray<RouterPoint>): string;
|
|
3179
3147
|
|
|
3148
|
+
/**
|
|
3149
|
+
* `connector-endpoints`: attaching and detaching a connector's ends on canvas.
|
|
3150
|
+
*
|
|
3151
|
+
* `connector-reroute` keeps a BOUND connector following its shapes and
|
|
3152
|
+
* `connector-authoring` turns a site-to-site drag into a new connector. Neither
|
|
3153
|
+
* lets the user change an existing connector's bindings, which is what
|
|
3154
|
+
* PowerPoint's two endpoint handles do: drag one onto a shape and it gains an
|
|
3155
|
+
* `a:stCxn` / `a:endCxn` and starts following that shape; drag it onto empty
|
|
3156
|
+
* canvas and the binding is removed and the end stays where it is dropped.
|
|
3157
|
+
*
|
|
3158
|
+
* That was implemented in no binding at all. React shipped a `ConnectorOverlay`
|
|
3159
|
+
* for the site-to-site creation gesture, but nothing ever passed the
|
|
3160
|
+
* `connectorCreationMode` / `onCreateConnector` props that mount it, so the
|
|
3161
|
+
* whole path was unreachable; the other four had no overlay in the first place.
|
|
3162
|
+
*
|
|
3163
|
+
* Everything here is slide-pixel space and free of framework imports: a binding
|
|
3164
|
+
* supplies pointer positions already converted out of screen space, and applies
|
|
3165
|
+
* the returned descriptor.
|
|
3166
|
+
*
|
|
3167
|
+
* @module render/connector-endpoints
|
|
3168
|
+
*/
|
|
3169
|
+
|
|
3170
|
+
/** Which end of a connector a gesture is moving. */
|
|
3171
|
+
type ConnectorEndpointKind = 'start' | 'end';
|
|
3172
|
+
|
|
3180
3173
|
/**
|
|
3181
3174
|
* Arrow-head marker shapes for connectors.
|
|
3182
3175
|
*
|
|
@@ -3295,6 +3288,84 @@ declare function applyFormatToElement(element: PptxElement, format: CopiedFormat
|
|
|
3295
3288
|
/** True when an element exposes formatting fields the painter can copy. */
|
|
3296
3289
|
declare function hasCopyableFormat(element: PptxElement | null | undefined): boolean;
|
|
3297
3290
|
|
|
3291
|
+
/**
|
|
3292
|
+
* `shape-adjustment-model`: the vocabulary the adjust-handle modules share.
|
|
3293
|
+
*
|
|
3294
|
+
* The `a:ahLst` work is split three ways for the repo's file-size budget:
|
|
3295
|
+
* `shape-adjustment-probe` measures the geometry, `shape-adjustment-handles`
|
|
3296
|
+
* derives the handles from those measurements, and `shape-adjustment-solver`
|
|
3297
|
+
* turns a pointer position back into guide values. All three need these types
|
|
3298
|
+
* and the one rule that operates purely on them, so they live here and the
|
|
3299
|
+
* dependency graph stays a DAG rather than a cycle.
|
|
3300
|
+
*
|
|
3301
|
+
* @module render/shape-adjustment-model
|
|
3302
|
+
*/
|
|
3303
|
+
/**
|
|
3304
|
+
* How a pointer position becomes a guide value, captured once when the gesture
|
|
3305
|
+
* starts so `pointermove` stays pure arithmetic.
|
|
3306
|
+
*/
|
|
3307
|
+
interface ShapeAdjustmentSolver {
|
|
3308
|
+
/** `linear`: the handle slides. `angular`: it swings about {@link centerX}. */
|
|
3309
|
+
kind: 'linear' | 'angular';
|
|
3310
|
+
/** Handle position in element-local px at {@link startValue}. */
|
|
3311
|
+
anchorX: number;
|
|
3312
|
+
anchorY: number;
|
|
3313
|
+
/** Element-local px the handle travels per ONE unit of guide value. */
|
|
3314
|
+
dirX: number;
|
|
3315
|
+
dirY: number;
|
|
3316
|
+
/** Pivot for an angular handle (the shape centre). */
|
|
3317
|
+
centerX: number;
|
|
3318
|
+
centerY: number;
|
|
3319
|
+
/** The guide value the anchor was measured at. */
|
|
3320
|
+
startValue: number;
|
|
3321
|
+
/** Guide-space bounds, taken from the preset's own `pin` clamp. */
|
|
3322
|
+
min: number;
|
|
3323
|
+
max: number;
|
|
3324
|
+
}
|
|
3325
|
+
/** One guide a handle drives. */
|
|
3326
|
+
interface AdjustmentAxisSolver {
|
|
3327
|
+
key: string;
|
|
3328
|
+
solver: ShapeAdjustmentSolver;
|
|
3329
|
+
}
|
|
3330
|
+
|
|
3331
|
+
/**
|
|
3332
|
+
* Shape-adjustment handles: PowerPoint's yellow `a:avLst` diamonds. Pure,
|
|
3333
|
+
* framework-agnostic math shared by all five bindings.
|
|
3334
|
+
*
|
|
3335
|
+
* Owns the adjustment scalar constants and the handle/drag descriptor types so
|
|
3336
|
+
* each binding consumes one copy rather than re-declaring them.
|
|
3337
|
+
*
|
|
3338
|
+
* A preset has ONE handle per adjustable parameter and many presets have
|
|
3339
|
+
* several (`callout3` has eight), so the entry point is
|
|
3340
|
+
* {@link getShapeAdjustmentHandleDescriptors}, returning an array. Placement and
|
|
3341
|
+
* drag scale are measured off the preset geometry by
|
|
3342
|
+
* `shape-adjustment-handles`; this module is the element-level policy around
|
|
3343
|
+
* it (lock check, element type, custom geometry) plus the round-rect helpers
|
|
3344
|
+
* the renderers use for `border-radius`.
|
|
3345
|
+
*/
|
|
3346
|
+
|
|
3347
|
+
/** Descriptor for one draggable adjustment handle (the amber diamond). */
|
|
3348
|
+
interface ShapeAdjustmentHandleDescriptor {
|
|
3349
|
+
/** The `a:avLst` guide name this handle writes (`adj`, `adj1`, ...). */
|
|
3350
|
+
key: string;
|
|
3351
|
+
/** Handle x offset in element-local px (origin = element top-left). */
|
|
3352
|
+
left: number;
|
|
3353
|
+
/** Handle y offset in element-local px. */
|
|
3354
|
+
top: number;
|
|
3355
|
+
/**
|
|
3356
|
+
* Current adjustment value in GUIDE units, not a 0-1 fraction. Most presets
|
|
3357
|
+
* range 0..50000 or 0..100000 and the angular ones run to 21,600,000.
|
|
3358
|
+
*/
|
|
3359
|
+
value: number;
|
|
3360
|
+
cursor: string;
|
|
3361
|
+
/**
|
|
3362
|
+
* How this handle's drag resolves, measured off the preset geometry: one
|
|
3363
|
+
* entry per `a:avLst` guide it drives (callouts drive two). Absent only for
|
|
3364
|
+
* a caller that built a descriptor by hand.
|
|
3365
|
+
*/
|
|
3366
|
+
solvers?: AdjustmentAxisSolver[];
|
|
3367
|
+
}
|
|
3368
|
+
|
|
3298
3369
|
/**
|
|
3299
3370
|
* Hyperlink security utilities — URL validation, sanitization, and slide-jump
|
|
3300
3371
|
* resolution for hyperlink click actions in the viewer. Pure, framework-agnostic
|
|
@@ -3757,8 +3828,99 @@ interface SlideTransitionOptionEntry {
|
|
|
3757
3828
|
i18nKey: string;
|
|
3758
3829
|
}
|
|
3759
3830
|
|
|
3831
|
+
/**
|
|
3832
|
+
* `ribbon-transitions` - the Transitions ribbon tab expressed as a pure
|
|
3833
|
+
* decision function, so a click on a preset means the same thing in all five
|
|
3834
|
+
* bindings.
|
|
3835
|
+
*
|
|
3836
|
+
* WHY shared: the tab is a set of MODIFIERS (duration, advance-on-click,
|
|
3837
|
+
* advance-after, apply-to-all) that only make sense combined with the preset
|
|
3838
|
+
* the user clicked. Every binding had re-decided that combination for itself,
|
|
3839
|
+
* and two of them (react, vue) never decided it at all: their controls wrote
|
|
3840
|
+
* component-local state and nothing reached the deck, so a picked transition
|
|
3841
|
+
* highlighted in the gallery and the saved `.pptx` carried no `p:transition`.
|
|
3842
|
+
* The preset list itself was five hand-copied arrays.
|
|
3843
|
+
*
|
|
3844
|
+
* The shape here is the repo's standard one: shared owns the DRAFT (what the
|
|
3845
|
+
* controls currently say), the READ (what a slide's transition says the
|
|
3846
|
+
* controls should show) and the CHANGE (the `PptxSlideTransition` fields a
|
|
3847
|
+
* commit writes). A binding renders the draft and hands the change to whatever
|
|
3848
|
+
* slide-mutation path it already has.
|
|
3849
|
+
*
|
|
3850
|
+
* @module render/ribbon-transitions
|
|
3851
|
+
*/
|
|
3852
|
+
|
|
3853
|
+
/** One entry of the ribbon's transition gallery. */
|
|
3854
|
+
interface RibbonTransitionPreset {
|
|
3855
|
+
type: PptxTransitionType;
|
|
3856
|
+
labelKey: string;
|
|
3857
|
+
}
|
|
3858
|
+
/** Everything the Transitions tab's controls currently say. */
|
|
3859
|
+
interface RibbonTransitionDraft {
|
|
3860
|
+
/** The highlighted gallery entry. */
|
|
3861
|
+
type: PptxTransitionType;
|
|
3862
|
+
/** Duration field, in seconds. */
|
|
3863
|
+
durationSec: number;
|
|
3864
|
+
/** Advance Slide > On Mouse Click. */
|
|
3865
|
+
advanceOnClick: boolean;
|
|
3866
|
+
/** Advance Slide > After (whether the timed advance is armed at all). */
|
|
3867
|
+
advanceAfter: boolean;
|
|
3868
|
+
/** Advance Slide > After, as the `mm:ss.hh` text the field holds. */
|
|
3869
|
+
advanceAfterText: string;
|
|
3870
|
+
}
|
|
3871
|
+
|
|
3872
|
+
/**
|
|
3873
|
+
* `ribbon-slide-show-options` - the Slide Show tab's Options cluster as a pure
|
|
3874
|
+
* decision function over `PptxPresentationProperties`.
|
|
3875
|
+
*
|
|
3876
|
+
* WHY shared: all five bindings rendered these four checkboxes hard-coded
|
|
3877
|
+
* `checked` with no change handler, so "Use Timings" claimed to be on whether
|
|
3878
|
+
* or not the deck's `p:showPr/@useTimings` said so, and unticking it did
|
|
3879
|
+
* nothing. Two of them (`@useTimings`, `@showNarration`) are real, saved OOXML
|
|
3880
|
+
* attributes that the playback path already reads; deciding the mapping here
|
|
3881
|
+
* means the checkbox state and the show's behaviour cannot disagree.
|
|
3882
|
+
*
|
|
3883
|
+
* Two entries are declared UNSUPPORTED rather than quietly inert. "Keep Slides
|
|
3884
|
+
* Updated" is a co-authoring/Broadcast feature no binding implements, and
|
|
3885
|
+
* "Show Media Controls" is an application preference PowerPoint does not store
|
|
3886
|
+
* in the package at all and nothing in this viewer reads. A control that cannot
|
|
3887
|
+
* do anything renders disabled, because a checkbox that toggles and changes
|
|
3888
|
+
* nothing is worse than one that admits it is unavailable.
|
|
3889
|
+
*
|
|
3890
|
+
* @module render/ribbon-slide-show-options
|
|
3891
|
+
*/
|
|
3892
|
+
|
|
3893
|
+
/** The four checkboxes in the Slide Show tab's Options group. */
|
|
3894
|
+
type SlideShowOptionId = 'keepUpdated' | 'useTimings' | 'playNarrations' | 'mediaControls';
|
|
3895
|
+
/** How a binding should render one Options checkbox. */
|
|
3896
|
+
interface SlideShowOptionDescriptor {
|
|
3897
|
+
id: SlideShowOptionId;
|
|
3898
|
+
labelKey: string;
|
|
3899
|
+
/**
|
|
3900
|
+
* No backing state exists, so the control renders disabled. See the module
|
|
3901
|
+
* doc for why each one is here.
|
|
3902
|
+
*/
|
|
3903
|
+
unsupported: boolean;
|
|
3904
|
+
}
|
|
3905
|
+
|
|
3906
|
+
/**
|
|
3907
|
+
* Per-node label styling resolved from `PptxSmartArtNode.style` (the overrides
|
|
3908
|
+
* the inspector's node style bar writes).
|
|
3909
|
+
*
|
|
3910
|
+
* Every field is optional and every field has a documented binding default, so
|
|
3911
|
+
* a renderer that ignores them keeps its historic output:
|
|
3912
|
+
* `fontColor` -> `white`, `fontWeight` / `fontStyle` -> unset.
|
|
3913
|
+
*/
|
|
3914
|
+
interface RenderedNodeTextStyle {
|
|
3915
|
+
/** Label colour. Default `white`. */
|
|
3916
|
+
fontColor?: string;
|
|
3917
|
+
/** SVG `font-weight` (`700` when the node is bold). Default unset. */
|
|
3918
|
+
fontWeight?: number;
|
|
3919
|
+
/** SVG `font-style`. Default unset. */
|
|
3920
|
+
fontStyle?: 'italic';
|
|
3921
|
+
}
|
|
3760
3922
|
/** A node rendered as an SVG rect (rounded or flat). */
|
|
3761
|
-
interface RenderedRectNode {
|
|
3923
|
+
interface RenderedRectNode extends RenderedNodeTextStyle {
|
|
3762
3924
|
kind: 'rect';
|
|
3763
3925
|
key: string;
|
|
3764
3926
|
x: number;
|
|
@@ -3778,7 +3940,7 @@ interface RenderedRectNode {
|
|
|
3778
3940
|
textY: number;
|
|
3779
3941
|
}
|
|
3780
3942
|
/** A node rendered as an SVG circle. */
|
|
3781
|
-
interface RenderedCircleNode {
|
|
3943
|
+
interface RenderedCircleNode extends RenderedNodeTextStyle {
|
|
3782
3944
|
kind: 'circle';
|
|
3783
3945
|
key: string;
|
|
3784
3946
|
cx: number;
|
|
@@ -3790,9 +3952,24 @@ interface RenderedCircleNode {
|
|
|
3790
3952
|
opacity: number;
|
|
3791
3953
|
text: string;
|
|
3792
3954
|
fontSize: number;
|
|
3955
|
+
/**
|
|
3956
|
+
* Label anchor x. Defaults to `cx`; set when the label sits away from the
|
|
3957
|
+
* circle (target leader labels, timeline captions).
|
|
3958
|
+
*/
|
|
3959
|
+
textX?: number;
|
|
3960
|
+
/** Label anchor y. Defaults to `cy`. */
|
|
3961
|
+
textY?: number;
|
|
3962
|
+
/** SVG `text-anchor` for the label. Defaults to `middle`. */
|
|
3963
|
+
textAnchor?: 'start' | 'middle' | 'end';
|
|
3964
|
+
/**
|
|
3965
|
+
* How the label block sits relative to `textY`: `middle` centres it (the
|
|
3966
|
+
* default), `bottom` puts the last baseline on `textY` (label above the
|
|
3967
|
+
* node), `top` puts the first line's top on `textY` (label below).
|
|
3968
|
+
*/
|
|
3969
|
+
textBaseline?: 'top' | 'middle' | 'bottom';
|
|
3793
3970
|
}
|
|
3794
3971
|
/** A node rendered as an SVG polygon (chevron, trapezoid, etc.). */
|
|
3795
|
-
interface RenderedPolygonNode {
|
|
3972
|
+
interface RenderedPolygonNode extends RenderedNodeTextStyle {
|
|
3796
3973
|
kind: 'polygon';
|
|
3797
3974
|
key: string;
|
|
3798
3975
|
points: string;
|
|
@@ -3808,14 +3985,29 @@ interface RenderedPolygonNode {
|
|
|
3808
3985
|
textY: number;
|
|
3809
3986
|
}
|
|
3810
3987
|
type RenderedNode = RenderedRectNode | RenderedCircleNode | RenderedPolygonNode;
|
|
3811
|
-
/**
|
|
3988
|
+
/**
|
|
3989
|
+
* A connector line between two rendered nodes.
|
|
3990
|
+
*
|
|
3991
|
+
* The paint fields are optional and carry the values every binding already
|
|
3992
|
+
* hardcodes, so a renderer that ignores them is unchanged:
|
|
3993
|
+
* `stroke` -> `#94a3b8`, `strokeWidth` -> `1.5`, `opacity` -> `0.5`,
|
|
3994
|
+
* `dash` -> solid.
|
|
3995
|
+
*/
|
|
3812
3996
|
interface RenderedConnector {
|
|
3813
3997
|
key: string;
|
|
3814
3998
|
/** SVG path data string. */
|
|
3815
3999
|
d: string;
|
|
4000
|
+
/** Stroke colour. Default `#94a3b8`. */
|
|
4001
|
+
stroke?: string;
|
|
4002
|
+
/** Stroke width. Default `1.5`. */
|
|
4003
|
+
strokeWidth?: number;
|
|
4004
|
+
/** Stroke opacity. Default `0.5`. */
|
|
4005
|
+
opacity?: number;
|
|
4006
|
+
/** SVG `stroke-dasharray`. Default solid. */
|
|
4007
|
+
dash?: string;
|
|
3816
4008
|
}
|
|
3817
4009
|
/** The layout family applied to a SmartArt element. */
|
|
3818
|
-
type LayoutFamily = 'list' | 'process' | 'cycle' | 'hierarchy' | 'matrix' | 'radial' | 'pyramid' | 'venn' | 'funnel' | 'target';
|
|
4010
|
+
type LayoutFamily = 'list' | 'process' | 'cycle' | 'hierarchy' | 'matrix' | 'radial' | 'pyramid' | 'venn' | 'funnel' | 'target' | 'gear' | 'timeline' | 'bending';
|
|
3819
4011
|
/** Complete layout output for a single SmartArt family. */
|
|
3820
4012
|
interface SmartArtLayoutResult {
|
|
3821
4013
|
/** Rendered geometry nodes. */
|
|
@@ -3879,26 +4071,6 @@ interface SvgTextLine {
|
|
|
3879
4071
|
text: string;
|
|
3880
4072
|
y: number;
|
|
3881
4073
|
}
|
|
3882
|
-
/** Options for {@link centeredSvgTextLines}. */
|
|
3883
|
-
interface CenteredSvgTextOptions {
|
|
3884
|
-
/**
|
|
3885
|
-
* Available width. When given, long lines are wrapped to fit it; when
|
|
3886
|
-
* omitted, only authored line breaks split the label.
|
|
3887
|
-
*/
|
|
3888
|
-
maxWidth?: number;
|
|
3889
|
-
/** Baseline the block is centred on. Defaults to 0, giving relative offsets. */
|
|
3890
|
-
centerY?: number;
|
|
3891
|
-
}
|
|
3892
|
-
/**
|
|
3893
|
-
* Split a label into lines and centre the block vertically.
|
|
3894
|
-
*
|
|
3895
|
-
* @param text - The label text; `\n` breaks are always honoured.
|
|
3896
|
-
* @param fontSize - Font size in the same user units as the result.
|
|
3897
|
-
* @param options - See {@link CenteredSvgTextOptions}.
|
|
3898
|
-
* @returns One entry per line. Empty text yields a single empty line so callers
|
|
3899
|
-
* that always emit a `<tspan>` keep their previous single-line geometry.
|
|
3900
|
-
*/
|
|
3901
|
-
declare function centeredSvgTextLines(text: string, fontSize: number, options?: CenteredSvgTextOptions): SvgTextLine[];
|
|
3902
4074
|
|
|
3903
4075
|
/**
|
|
3904
4076
|
* smartart-drawing.ts: Drawing-shape view-model helpers for the SmartArt
|
|
@@ -4026,6 +4198,58 @@ declare function projectDrawingShapes(elementId: string, shapes: PptxSmartArtDra
|
|
|
4026
4198
|
/** Drop-shadow filter string for the given style intensity. */
|
|
4027
4199
|
declare function styleShadowFilter(style: SmartArtStyle): string | undefined;
|
|
4028
4200
|
|
|
4201
|
+
/**
|
|
4202
|
+
* SmartArt fallback-layout paint decisions: where a node's label sits and how a
|
|
4203
|
+
* connector is stroked.
|
|
4204
|
+
*
|
|
4205
|
+
* `RenderedNode` / `RenderedConnector` carry a set of OPTIONAL paint and
|
|
4206
|
+
* placement fields (`fontColor`, `fontWeight`, `fontStyle`, `textX`, `textY`,
|
|
4207
|
+
* `textAnchor`, `textBaseline`; `stroke`, `strokeWidth`, `opacity`, `dash`).
|
|
4208
|
+
* Every one has a documented binding default, so a renderer that ignored them
|
|
4209
|
+
* kept its historic output - which is exactly what four of the five bindings
|
|
4210
|
+
* did, hardcoding `fill="white"` and parking circle labels on `cx`/`cy`. Target
|
|
4211
|
+
* captions and timeline captions then sat on top of their dot instead of beside
|
|
4212
|
+
* or above it.
|
|
4213
|
+
*
|
|
4214
|
+
* Applying those defaults, and stacking a multi-line label for the three
|
|
4215
|
+
* baseline modes, is arithmetic no binding should own a copy of. This module is
|
|
4216
|
+
* the single pure decision function: it returns a framework-neutral descriptor
|
|
4217
|
+
* and each binding does nothing but map it onto `<text>` / `<tspan>` / `<path>`
|
|
4218
|
+
* attributes.
|
|
4219
|
+
*
|
|
4220
|
+
* @module smartart-node-label
|
|
4221
|
+
*/
|
|
4222
|
+
|
|
4223
|
+
/** Resolved paint for one fallback-layout connector path. */
|
|
4224
|
+
interface SmartArtConnectorPaint {
|
|
4225
|
+
/** SVG path data, copied straight from the descriptor. */
|
|
4226
|
+
d: string;
|
|
4227
|
+
stroke: string;
|
|
4228
|
+
strokeWidth: number;
|
|
4229
|
+
opacity: number;
|
|
4230
|
+
/** SVG `stroke-dasharray`, or `undefined` for a solid line. */
|
|
4231
|
+
dash: string | undefined;
|
|
4232
|
+
}
|
|
4233
|
+
/** Everything a binding needs to draw one node's label, already decided. */
|
|
4234
|
+
interface SmartArtNodeLabel {
|
|
4235
|
+
/** Whether the node has any label at all; `false` means draw no `<text>`. */
|
|
4236
|
+
visible: boolean;
|
|
4237
|
+
/** X of the text block (also the x of every `<tspan>`). */
|
|
4238
|
+
x: number;
|
|
4239
|
+
/** SVG `text-anchor`. */
|
|
4240
|
+
textAnchor: 'start' | 'middle' | 'end';
|
|
4241
|
+
/** SVG `dominant-baseline` for the block. */
|
|
4242
|
+
dominantBaseline: 'auto' | 'hanging' | 'central';
|
|
4243
|
+
/** Absolute-positioned lines: one `<tspan>` per entry, at its own `y`. */
|
|
4244
|
+
lines: SvgTextLine[];
|
|
4245
|
+
fill: string;
|
|
4246
|
+
fontSize: number;
|
|
4247
|
+
/** SVG `font-weight`, or `undefined` to leave it unset. */
|
|
4248
|
+
fontWeight: number | undefined;
|
|
4249
|
+
/** SVG `font-style`, or `undefined` to leave it unset. */
|
|
4250
|
+
fontStyle: 'italic' | undefined;
|
|
4251
|
+
}
|
|
4252
|
+
|
|
4029
4253
|
/**
|
|
4030
4254
|
* inspector-helpers.ts: Pure (no framework) helpers for the inspector panel.
|
|
4031
4255
|
*
|
|
@@ -4337,6 +4561,134 @@ interface CustomShow {
|
|
|
4337
4561
|
declare function generateCustomShowId(): string;
|
|
4338
4562
|
declare function createCustomShow(name: string, slideIds: readonly string[]): CustomShow;
|
|
4339
4563
|
|
|
4564
|
+
/**
|
|
4565
|
+
* slide-size.ts: the Design > Slide Size decision function.
|
|
4566
|
+
*
|
|
4567
|
+
* Framework-agnostic: no React, Vue, Angular, Svelte or DOM imports.
|
|
4568
|
+
*
|
|
4569
|
+
* ## Why the dimensions, not the `type`, are the source of truth
|
|
4570
|
+
*
|
|
4571
|
+
* `p:sldSz` carries `@cx`, `@cy` and an optional `@type` (ST_SlideSizeType).
|
|
4572
|
+
* It is tempting to treat `@type` as the selection and the dimensions as a
|
|
4573
|
+
* derived detail. PowerPoint does the opposite. Measured through COM: a deck
|
|
4574
|
+
* whose `p:sldSz` said `type="A4"` while carrying 4:3 dimensions reported
|
|
4575
|
+
* `PageSetup.SlideSize = ppSlideSizeCustom`, and the same deck with A4
|
|
4576
|
+
* dimensions and NO `@type` at all reported `ppSlideSizeA4Paper`. So every
|
|
4577
|
+
* preset below is defined by its EMU pair, and `@type` is written alongside
|
|
4578
|
+
* for fidelity only.
|
|
4579
|
+
*
|
|
4580
|
+
* Each `emuWidth`/`emuHeight` pair here was confirmed by writing it into a
|
|
4581
|
+
* real package and asking PowerPoint what preset it saw (the `ppSlideSize*`
|
|
4582
|
+
* value in the `comValue` field). Two entries are exceptions and say so.
|
|
4583
|
+
*/
|
|
4584
|
+
type SlideSizeOrientation = 'landscape' | 'portrait';
|
|
4585
|
+
interface SlideSizeEmu {
|
|
4586
|
+
widthEmu: number;
|
|
4587
|
+
heightEmu: number;
|
|
4588
|
+
/** ST_SlideSizeType token, or `''` for a size with no preset. */
|
|
4589
|
+
type: string;
|
|
4590
|
+
}
|
|
4591
|
+
interface SlideSizePreset {
|
|
4592
|
+
/** `p:sldSz/@type` (ST_SlideSizeType). `custom` is the schema default. */
|
|
4593
|
+
readonly type: string;
|
|
4594
|
+
/** i18n key under `pptx.slideSize.presets`. */
|
|
4595
|
+
readonly labelKey: string;
|
|
4596
|
+
/** Landscape width in EMU. Portrait swaps the pair. */
|
|
4597
|
+
readonly widthEmu: number;
|
|
4598
|
+
/** Landscape height in EMU. */
|
|
4599
|
+
readonly heightEmu: number;
|
|
4600
|
+
/**
|
|
4601
|
+
* The `PpSlideSizeType` value PowerPoint reports for these dimensions,
|
|
4602
|
+
* or `undefined` where that could not be confirmed.
|
|
4603
|
+
*/
|
|
4604
|
+
readonly comValue?: number;
|
|
4605
|
+
}
|
|
4606
|
+
interface SlideSizeSelectionDescriptor {
|
|
4607
|
+
/** The effective size, in EMU, that a save should persist. */
|
|
4608
|
+
readonly size: SlideSizeEmu;
|
|
4609
|
+
/** The matching preset, or `undefined` for a custom size. */
|
|
4610
|
+
readonly preset: SlideSizePreset | undefined;
|
|
4611
|
+
readonly orientation: SlideSizeOrientation;
|
|
4612
|
+
/** The canvas size the stage should use for this selection. */
|
|
4613
|
+
readonly canvas: {
|
|
4614
|
+
width: number;
|
|
4615
|
+
height: number;
|
|
4616
|
+
};
|
|
4617
|
+
}
|
|
4618
|
+
|
|
4619
|
+
/**
|
|
4620
|
+
* presentation-file-kinds: the one place that answers "can the viewer open
|
|
4621
|
+
* this file?" and "what should the saved copy be called?".
|
|
4622
|
+
*
|
|
4623
|
+
* ## Why this is a shared decision and not five allow-lists
|
|
4624
|
+
*
|
|
4625
|
+
* The loader reads more formats than any single UI advertises. Legacy binary
|
|
4626
|
+
* `.ppt` (PowerPoint 97-2003) is the sharp example: `PptxHandler.load()` has
|
|
4627
|
+
* detected the OLE compound-file container and converted the binary deck
|
|
4628
|
+
* through the regular pptx pipeline for some time, but the product kept saying
|
|
4629
|
+
* it was unsupported, and a picker that filters the extension out makes a
|
|
4630
|
+
* working loader unreachable in practice. Whenever the loader learns a format,
|
|
4631
|
+
* exactly one list has to change.
|
|
4632
|
+
*
|
|
4633
|
+
* ## Read many, write one
|
|
4634
|
+
*
|
|
4635
|
+
* Input is a superset of output. We READ `.pptx`, `.ppsx`, `.pptm`, `.potx`,
|
|
4636
|
+
* legacy binary `.ppt` and portable `pptx-viewer-json`; we WRITE only the
|
|
4637
|
+
* OpenXML family. That asymmetry is deliberate (PowerPoint itself does the
|
|
4638
|
+
* same: open a 97-2003 deck and Save As offers `.pptx`), and it is why
|
|
4639
|
+
* {@link savedPresentationFileName} always REPLACES the source extension
|
|
4640
|
+
* rather than keeping it. A deck opened as `report.ppt` and saved as
|
|
4641
|
+
* `report.ppt` would be a file whose bytes and whose name disagree, which is
|
|
4642
|
+
* the kind of thing PowerPoint refuses to open.
|
|
4643
|
+
*
|
|
4644
|
+
* This module deliberately imports nothing, so any layer (render, export, a
|
|
4645
|
+
* binding, a host app) can depend on it without risking an import cycle.
|
|
4646
|
+
*
|
|
4647
|
+
* @module render/presentation-file-kinds
|
|
4648
|
+
*/
|
|
4649
|
+
/**
|
|
4650
|
+
* Extensions the built-in file picker offers, in the order it offers them.
|
|
4651
|
+
*
|
|
4652
|
+
* `.ppt` is in the list because the loader genuinely handles it, not as a
|
|
4653
|
+
* courtesy: see `packages/core/src/core/ppt/` and the `ppt-import` integration
|
|
4654
|
+
* suite, which asserts a `.ppt` loads to the same model as the `.pptx` it was
|
|
4655
|
+
* exported from.
|
|
4656
|
+
*/
|
|
4657
|
+
declare const PRESENTATION_OPEN_EXTENSIONS: readonly [".pptx", ".ppsx", ".pptm", ".potx", ".ppt", ".json"];
|
|
4658
|
+
/** Comma-separated `accept` attribute for a presentation file input. */
|
|
4659
|
+
declare const PPTX_OPEN_ACCEPT: string;
|
|
4660
|
+
/**
|
|
4661
|
+
* True when a picked / dropped file's name looks like something the loader can
|
|
4662
|
+
* open. Use this instead of a hand-rolled `endsWith` chain: a drop handler that
|
|
4663
|
+
* disagrees with the picker's `accept` list is a format that is supported by
|
|
4664
|
+
* mouse but not by drag, which is how `.ppt` stayed invisible.
|
|
4665
|
+
*
|
|
4666
|
+
* Extension-only, by design. The real answer comes from the container sniff in
|
|
4667
|
+
* `PptxHandler.load()`; this is only the cheap pre-filter a drop target needs
|
|
4668
|
+
* before it hands bytes to the loader.
|
|
4669
|
+
*/
|
|
4670
|
+
declare function isSupportedPresentationFile(name: string | null | undefined): boolean;
|
|
4671
|
+
/** True for the binary PowerPoint 97-2003 family, which we read but never write. */
|
|
4672
|
+
declare function isLegacyBinaryPresentation(name: string | null | undefined): boolean;
|
|
4673
|
+
/** The formats the save path can produce. Binary `.ppt` is deliberately absent. */
|
|
4674
|
+
type SavedPresentationFormat = 'pptx' | 'ppsx' | 'pptm';
|
|
4675
|
+
/**
|
|
4676
|
+
* The stem of a presentation file name: directories and any loadable extension
|
|
4677
|
+
* removed. `C:\decks\report.ppt` becomes `report`; a name with no recognised
|
|
4678
|
+
* extension is kept whole, so `Untitled Presentation` survives intact rather
|
|
4679
|
+
* than losing everything after its last dot.
|
|
4680
|
+
*/
|
|
4681
|
+
declare function presentationBaseName(sourceName: string | null | undefined, fallback?: string): string;
|
|
4682
|
+
/**
|
|
4683
|
+
* The name a saved copy should be offered under: the source stem plus the
|
|
4684
|
+
* extension of the format actually being written.
|
|
4685
|
+
*
|
|
4686
|
+
* This is what turns `report.ppt` into `report.pptx` on Save As. Output is
|
|
4687
|
+
* always an OpenXML package, so keeping the source extension would mislabel
|
|
4688
|
+
* the bytes.
|
|
4689
|
+
*/
|
|
4690
|
+
declare function savedPresentationFileName(sourceName: string | null | undefined, format?: SavedPresentationFormat): string;
|
|
4691
|
+
|
|
4340
4692
|
/**
|
|
4341
4693
|
* Format an epoch-ms timestamp as a short month / day / time label, e.g.
|
|
4342
4694
|
* "Jun 25, 02:14", for the version-history panels.
|
|
@@ -5535,6 +5887,46 @@ interface ShapePresetDef {
|
|
|
5535
5887
|
glyphClass: string;
|
|
5536
5888
|
}
|
|
5537
5889
|
|
|
5890
|
+
/** Identifies a group so bindings can label and style it. */
|
|
5891
|
+
type FontCatalogGroupId = 'theme' | 'embedded' | 'custom' | 'all';
|
|
5892
|
+
/** One selectable font. */
|
|
5893
|
+
interface FontCatalogEntry {
|
|
5894
|
+
/** The family name written into the run's `fontFamily`. */
|
|
5895
|
+
family: string;
|
|
5896
|
+
/**
|
|
5897
|
+
* Which theme slot this family fills, for the "(Headings)" / "(Body)" hint
|
|
5898
|
+
* PowerPoint shows beside its two theme fonts. Absent for other entries.
|
|
5899
|
+
*/
|
|
5900
|
+
themeRole?: 'heading' | 'body';
|
|
5901
|
+
}
|
|
5902
|
+
/** A headed group of fonts. */
|
|
5903
|
+
interface FontCatalogGroup {
|
|
5904
|
+
id: FontCatalogGroupId;
|
|
5905
|
+
/** i18n key for the group heading. */
|
|
5906
|
+
labelKey: string;
|
|
5907
|
+
entries: FontCatalogEntry[];
|
|
5908
|
+
}
|
|
5909
|
+
|
|
5910
|
+
/** What the "Embed fonts in the file" toggle should look like and do. */
|
|
5911
|
+
interface FontEmbeddingDescriptor {
|
|
5912
|
+
/** Distinct typeface names the loaded deck currently embeds. */
|
|
5913
|
+
embeddedFamilies: string[];
|
|
5914
|
+
/**
|
|
5915
|
+
* Whether the toggle accepts input. False when the deck embeds nothing,
|
|
5916
|
+
* because turning it on could not produce an embedded font.
|
|
5917
|
+
*/
|
|
5918
|
+
interactive: boolean;
|
|
5919
|
+
/**
|
|
5920
|
+
* The position the toggle must START in so that it describes the file that
|
|
5921
|
+
* would be written right now. A deck that arrived with embedded fonts keeps
|
|
5922
|
+
* them on save, so the switch has to read "on" from the outset; the previous
|
|
5923
|
+
* hardcoded `false` said the opposite of what save actually did.
|
|
5924
|
+
*/
|
|
5925
|
+
initialEnabled: boolean;
|
|
5926
|
+
/** Present only when `interactive` is false. */
|
|
5927
|
+
disabledReasonKey?: string;
|
|
5928
|
+
}
|
|
5929
|
+
|
|
5538
5930
|
/**
|
|
5539
5931
|
* Command-search data for the PowerPoint-style "Tell me what you want to do"
|
|
5540
5932
|
* search bar. Provides searchable command entries grouped by category, each
|
|
@@ -5552,6 +5944,138 @@ interface CommandSearchEntry {
|
|
|
5552
5944
|
category: 'format' | 'insert' | 'view' | 'slideShow' | 'design' | 'arrange';
|
|
5553
5945
|
}
|
|
5554
5946
|
|
|
5947
|
+
/**
|
|
5948
|
+
* @fileoverview Who decides whether recovery autosave runs, and how often.
|
|
5949
|
+
*
|
|
5950
|
+
* ## The rule: the host prop is a ceiling, the toggle is a preference
|
|
5951
|
+
*
|
|
5952
|
+
* Two things can speak about autosave, and until now each binding invented its
|
|
5953
|
+
* own answer for what happens when both do:
|
|
5954
|
+
*
|
|
5955
|
+
* - the **host** passes an `autosave` prop. That is a POLICY: the embedder is
|
|
5956
|
+
* stating what its application permits.
|
|
5957
|
+
* - the **user** flips the title-bar AutoSave switch, or File > Options > Save
|
|
5958
|
+
* > AutoSave. That is a PREFERENCE, expressed inside whatever the host allows.
|
|
5959
|
+
*
|
|
5960
|
+
* A preference can never exceed a policy, so:
|
|
5961
|
+
*
|
|
5962
|
+
* - `autosave={false}` turns recovery autosave OFF and takes the toggle away
|
|
5963
|
+
* (`toggleAvailable: false`). A user cannot switch on what the application
|
|
5964
|
+
* forbade, and a switch that silently does nothing is worse than no switch.
|
|
5965
|
+
* - `autosave={true}`, or the prop omitted entirely, PERMITS autosave. The
|
|
5966
|
+
* user's toggle then decides, and it defaults to on.
|
|
5967
|
+
*
|
|
5968
|
+
* The prop is therefore only load-bearing when it is `false`. That is
|
|
5969
|
+
* deliberate: crash recovery that is off by default is crash recovery nobody
|
|
5970
|
+
* has, and the shared options schema already declares `save.autoSave: true` as
|
|
5971
|
+
* the user default, so any other prop default would contradict it. Vue, Svelte
|
|
5972
|
+
* and Vanilla previously defaulted to `false` and React and Angular to `true`;
|
|
5973
|
+
* `true` is the answer, and the three that defaulted off now write recovery
|
|
5974
|
+
* snapshots for hosts that never opted in. Pass `autosave={false}` to opt out.
|
|
5975
|
+
*
|
|
5976
|
+
* Two further gates are not negotiable by anyone, because without them there is
|
|
5977
|
+
* nothing to write or nowhere to write it: editing must be possible at all, and
|
|
5978
|
+
* a `filePath` must be set to key the IndexedDB record.
|
|
5979
|
+
*
|
|
5980
|
+
* ## Cadence follows the same rule
|
|
5981
|
+
*
|
|
5982
|
+
* An explicit `autosaveIntervalMs` prop is a policy and is honoured as given.
|
|
5983
|
+
* Otherwise the cadence is the user's own File > Options > Save > "Save
|
|
5984
|
+
* AutoRecover information every N minutes" (default two minutes), which React
|
|
5985
|
+
* and Angular already respected and the other three ignored.
|
|
5986
|
+
*
|
|
5987
|
+
* ## What the two engine shapes must agree on
|
|
5988
|
+
*
|
|
5989
|
+
* React and Angular POLL on a fixed interval; Vue, Svelte and Vanilla DEBOUNCE
|
|
5990
|
+
* on the edit. Both are legitimate, but a plain debounce has a failure mode a
|
|
5991
|
+
* poll does not: a user who keeps editing keeps re-arming the timer, so it can
|
|
5992
|
+
* defer a snapshot forever, and at the two-minute cadence that is an entire
|
|
5993
|
+
* session of lost work. {@link nextAutosaveDelayMs} caps the debounce so both
|
|
5994
|
+
* shapes make the same promise:
|
|
5995
|
+
*
|
|
5996
|
+
* **a snapshot lands no later than one interval after the first unsaved edit,
|
|
5997
|
+
* and no more often than once per interval.**
|
|
5998
|
+
*
|
|
5999
|
+
* @module render/autosave-policy
|
|
6000
|
+
*/
|
|
6001
|
+
/**
|
|
6002
|
+
* Why autosave is not running. `autosave_toggle_off` and `no_file_path` are the
|
|
6003
|
+
* codes the title bar has always understood; the other two are new and fall
|
|
6004
|
+
* back to the generic message in bindings that do not map them.
|
|
6005
|
+
*/
|
|
6006
|
+
type AutosaveDisabledReason = 'autosave_host_off' | 'autosave_toggle_off' | 'no_file_path' | 'read_only';
|
|
6007
|
+
interface AutosaveActivation {
|
|
6008
|
+
/** Whether recovery snapshots should actually be written. */
|
|
6009
|
+
readonly active: boolean;
|
|
6010
|
+
/**
|
|
6011
|
+
* Whether the user's AutoSave toggle can change anything. False only when
|
|
6012
|
+
* the host passed `autosave={false}`; the toggle must then render off and
|
|
6013
|
+
* inert rather than pretending to work.
|
|
6014
|
+
*/
|
|
6015
|
+
readonly toggleAvailable: boolean;
|
|
6016
|
+
/** Why it is inactive, for the title bar. `undefined` when active. */
|
|
6017
|
+
readonly reason?: AutosaveDisabledReason;
|
|
6018
|
+
}
|
|
6019
|
+
|
|
6020
|
+
/**
|
|
6021
|
+
* @fileoverview "Is there a recoverable snapshot for this deck, and what should
|
|
6022
|
+
* the prompt say?"
|
|
6023
|
+
*
|
|
6024
|
+
* Every binding writes crash-recovery snapshots into the shared IndexedDB store
|
|
6025
|
+
* (`./autosave-store`). Until now only React ever looked for one again, and
|
|
6026
|
+
* even it merely popped the Version History panel open, which never says the
|
|
6027
|
+
* word "recover". In the other four the data was there and nothing surfaced it,
|
|
6028
|
+
* so the feature was invisible: the user closed a crashed tab, reopened the
|
|
6029
|
+
* deck, and silently got the pre-crash version back.
|
|
6030
|
+
*
|
|
6031
|
+
* The decision lives here as one pure function so all five ask the same
|
|
6032
|
+
* questions in the same order, and each binding does nothing but render the
|
|
6033
|
+
* descriptor as its own dialog.
|
|
6034
|
+
*
|
|
6035
|
+
* ## Why a "consumed" marker exists
|
|
6036
|
+
*
|
|
6037
|
+
* A host can restore the snapshot itself: `restoreSessionDeck` prefers a newer
|
|
6038
|
+
* autosave snapshot over the bytes a tab was opened with, which is exactly what
|
|
6039
|
+
* the demo apps do on reload. The viewer is then handed the snapshot's own
|
|
6040
|
+
* bytes and must NOT turn round and offer to recover them, or every refresh
|
|
6041
|
+
* mid-edit would raise a dialog about the content already on screen.
|
|
6042
|
+
*
|
|
6043
|
+
* Timestamps cannot settle that on their own: after a genuine crash the fresh
|
|
6044
|
+
* load is also newer than the snapshot, so "the snapshot is older than this
|
|
6045
|
+
* load" would suppress the one prompt that matters. Instead the consumer of a
|
|
6046
|
+
* snapshot records it, per tab, in `sessionStorage`: surviving a reload (where
|
|
6047
|
+
* the host already restored) but not a new tab (where a crash recovery is
|
|
6048
|
+
* exactly what the user wants to be asked about).
|
|
6049
|
+
*
|
|
6050
|
+
* @module render/autosave-recovery
|
|
6051
|
+
*/
|
|
6052
|
+
|
|
6053
|
+
/** Everything a binding needs to render the recovery dialog, and nothing else. */
|
|
6054
|
+
interface AutosaveRecoveryPrompt {
|
|
6055
|
+
/** IndexedDB key the snapshot is stored under (the deck's file path/name). */
|
|
6056
|
+
readonly filePath: string;
|
|
6057
|
+
/** When the snapshot was written (epoch ms). */
|
|
6058
|
+
readonly timestamp: number;
|
|
6059
|
+
/** Snapshot size in bytes. */
|
|
6060
|
+
readonly size: number;
|
|
6061
|
+
/** Whole minutes since it was written, floored at 0. */
|
|
6062
|
+
readonly ageMinutes: number;
|
|
6063
|
+
readonly titleKey: string;
|
|
6064
|
+
readonly messageKey: string;
|
|
6065
|
+
/** `size` is pre-formatted here because byte units are not translated. */
|
|
6066
|
+
readonly messageParams: {
|
|
6067
|
+
readonly file: string;
|
|
6068
|
+
readonly size: string;
|
|
6069
|
+
};
|
|
6070
|
+
/** Relative age, reusing the existing autosave age keys. */
|
|
6071
|
+
readonly ageKey: string;
|
|
6072
|
+
readonly ageParams: {
|
|
6073
|
+
readonly count: number;
|
|
6074
|
+
};
|
|
6075
|
+
readonly restoreKey: string;
|
|
6076
|
+
readonly discardKey: string;
|
|
6077
|
+
}
|
|
6078
|
+
|
|
5555
6079
|
type BackstagePage = 'home' | 'new' | 'open' | 'info' | 'save' | 'saveAs' | 'print' | 'share' | 'export' | 'close' | 'account' | 'options';
|
|
5556
6080
|
interface BackstageRecentFile {
|
|
5557
6081
|
key: string;
|
|
@@ -5587,6 +6111,92 @@ interface VirtualizedRange {
|
|
|
5587
6111
|
/** Score a presentation password from 0 (very weak) to 4 (very strong). */
|
|
5588
6112
|
declare function getPasswordStrength(password: string): number;
|
|
5589
6113
|
|
|
6114
|
+
/**
|
|
6115
|
+
* deck-save-encryption: the single place that decides whether a deck save
|
|
6116
|
+
* produces a plain OOXML ZIP or an encrypted OLE/CFB container.
|
|
6117
|
+
*
|
|
6118
|
+
* "Encrypt with Password" (File > Info > Protect Presentation) captures a
|
|
6119
|
+
* secret in every binding. Whether that secret reaches the serialiser used to
|
|
6120
|
+
* be re-decided per binding, and four of the five never decided it at all:
|
|
6121
|
+
* they stored the password, showed a "protected" badge, and wrote a plaintext
|
|
6122
|
+
* `.pptx`. That is a security-facing lie, so the decision now lives here as a
|
|
6123
|
+
* pure function and every binding routes its save through
|
|
6124
|
+
* {@link saveDeckWithPassword}.
|
|
6125
|
+
*
|
|
6126
|
+
* The rule is deliberately trivial: a non-empty password means
|
|
6127
|
+
* `PptxHandler.saveEncrypted` (ECMA-376 agile encryption inside an OLE2
|
|
6128
|
+
* compound file with `EncryptionInfo` + `EncryptedPackage` streams), anything
|
|
6129
|
+
* else means `PptxHandler.save` (a `PK\x03\x04` ZIP). What matters is that it
|
|
6130
|
+
* is decided ONCE.
|
|
6131
|
+
*
|
|
6132
|
+
* The one exception is the save PURPOSE (see {@link DeckSavePurpose}): bytes the
|
|
6133
|
+
* viewer writes only so it can read them back itself - the crash-recovery
|
|
6134
|
+
* autosave snapshot, and the re-serialise-then-reload cycle behind "apply
|
|
6135
|
+
* theme" - are never encrypted, because nothing on the way back in has a
|
|
6136
|
+
* password to offer.
|
|
6137
|
+
*/
|
|
6138
|
+
|
|
6139
|
+
/**
|
|
6140
|
+
* Why the deck is being serialised, which is a separate question from whether
|
|
6141
|
+
* the user protected it.
|
|
6142
|
+
*
|
|
6143
|
+
* - `user-file` (the default): the bytes leave the viewer as a file. Save,
|
|
6144
|
+
* Save As, Export, the host-facing `getContent()`. Protection applies.
|
|
6145
|
+
* - `recovery-snapshot`: the bytes exist only so the viewer can read them back.
|
|
6146
|
+
* The autosave crash-recovery snapshot in IndexedDB, and the internal
|
|
6147
|
+
* re-serialise-then-reload cycle behind "apply theme". Protection does NOT
|
|
6148
|
+
* apply: these are always written in the clear.
|
|
6149
|
+
*
|
|
6150
|
+
* ## Why a recovery snapshot must stay plaintext
|
|
6151
|
+
*
|
|
6152
|
+
* Nothing that reads a snapshot back has a password to give it.
|
|
6153
|
+
* `readBackstageRecentFile`, `restoreSessionDeck` and the Version History
|
|
6154
|
+
* panel's Restore all hand `record.data` straight to `PptxHandler.load()` with
|
|
6155
|
+
* no `password` option, and an encrypted package refuses to open without one
|
|
6156
|
+
* (`EncryptedFileError`). So an encrypted snapshot is not an inconvenience, it
|
|
6157
|
+
* is unreadable: the moment the user turns on protection their crash-recovery
|
|
6158
|
+
* data is silently destroyed, which is the exact opposite of what autosave is
|
|
6159
|
+
* for.
|
|
6160
|
+
*
|
|
6161
|
+
* Encrypting it "properly" is not available either. Decrypting on recovery
|
|
6162
|
+
* means the key has to outlive the crash the snapshot exists for, so it would
|
|
6163
|
+
* have to sit in the same IndexedDB / localStorage as the snapshot itself,
|
|
6164
|
+
* next to the ciphertext it unlocks. That is not a security boundary, it is
|
|
6165
|
+
* theatre. Prompting the user instead only works if they remember the password
|
|
6166
|
+
* of a deck they lost, which is precisely the moment they will not.
|
|
6167
|
+
*
|
|
6168
|
+
* ## The tradeoff this accepts (deliberately, not by omission)
|
|
6169
|
+
*
|
|
6170
|
+
* A password-protected deck DOES leave its content in cleartext at rest in the
|
|
6171
|
+
* origin's IndexedDB. Anyone with the browser profile, or any script running on
|
|
6172
|
+
* the origin, can read it. What limits the exposure: snapshots are scoped to
|
|
6173
|
+
* the origin and profile, aged out by the store, and clearable from
|
|
6174
|
+
* File > Account > Storage & Privacy (`clearLocalStorageData`). A user who
|
|
6175
|
+
* cannot accept plaintext at rest should switch AutoSave off, which stops the
|
|
6176
|
+
* snapshot being written at all.
|
|
6177
|
+
*
|
|
6178
|
+
* The rejected alternative was "skip autosave entirely while a password is
|
|
6179
|
+
* set". It removes the plaintext, but it also removes crash recovery without
|
|
6180
|
+
* telling anyone, so a crash loses the whole editing session. Losing data
|
|
6181
|
+
* quietly is the failure mode we are fixing, not a fix for it.
|
|
6182
|
+
*/
|
|
6183
|
+
type DeckSavePurpose = 'user-file' | 'recovery-snapshot';
|
|
6184
|
+
/**
|
|
6185
|
+
* What the Protect-Presentation UI knows at save time. `password` is the secret
|
|
6186
|
+
* the dialog captured; `passwordProtected` is the separate "is protected" flag
|
|
6187
|
+
* some bindings track for the badge. When the flag is explicitly `false` the
|
|
6188
|
+
* deck saves in the clear even if a stale secret is still around, so removing
|
|
6189
|
+
* a password can never leave the next save encrypted.
|
|
6190
|
+
*
|
|
6191
|
+
* `purpose` defaults to `'user-file'`; see {@link DeckSavePurpose} for why
|
|
6192
|
+
* `'recovery-snapshot'` overrides the password.
|
|
6193
|
+
*/
|
|
6194
|
+
interface DeckSaveIntent {
|
|
6195
|
+
password?: string | null;
|
|
6196
|
+
passwordProtected?: boolean;
|
|
6197
|
+
purpose?: DeckSavePurpose;
|
|
6198
|
+
}
|
|
6199
|
+
|
|
5590
6200
|
/** Framework-neutral viewer preferences surfaced by Settings dialogs. */
|
|
5591
6201
|
interface ViewerPreferences {
|
|
5592
6202
|
autoSave: boolean;
|
|
@@ -5603,6 +6213,15 @@ interface ShortcutReferenceItem {
|
|
|
5603
6213
|
}
|
|
5604
6214
|
declare const SHORTCUT_REFERENCE_ITEMS: readonly ShortcutReferenceItem[];
|
|
5605
6215
|
|
|
6216
|
+
/**
|
|
6217
|
+
* An active custom show's membership. Accepts either key the bindings carry:
|
|
6218
|
+
* `slideRIds` (core's parsed `p:custShow`) or `slideIds`.
|
|
6219
|
+
*/
|
|
6220
|
+
interface ShowOrderCustomShow {
|
|
6221
|
+
readonly slideRIds?: readonly string[];
|
|
6222
|
+
readonly slideIds?: readonly string[];
|
|
6223
|
+
}
|
|
6224
|
+
|
|
5606
6225
|
/** Everything a binding needs to mark one tile. Inert when the slide is visible. */
|
|
5607
6226
|
interface HiddenSlideCue {
|
|
5608
6227
|
/** Whether the slide is hidden, for `v-if` / `@if` / `{#if}` gating. */
|
|
@@ -5747,6 +6366,15 @@ interface ViewerGeneralOptions {
|
|
|
5747
6366
|
userName: string;
|
|
5748
6367
|
userInitials: string;
|
|
5749
6368
|
showStartScreen: boolean;
|
|
6369
|
+
/**
|
|
6370
|
+
* Lets the user hand a local font file to the viewer so decks authored
|
|
6371
|
+
* with a font the browser lacks render with the real face.
|
|
6372
|
+
*
|
|
6373
|
+
* Off by default. The registration reads a file the user picks and adds it
|
|
6374
|
+
* to the page's font set for the session, which is a capability a host
|
|
6375
|
+
* embedding the viewer should opt into rather than inherit.
|
|
6376
|
+
*/
|
|
6377
|
+
enableCustomFontUpload: boolean;
|
|
5750
6378
|
}
|
|
5751
6379
|
interface ViewerProofingOptions {
|
|
5752
6380
|
autoCorrectTwoInitialCapitals: boolean;
|
|
@@ -5763,13 +6391,25 @@ interface ViewerProofingOptions {
|
|
|
5763
6391
|
checkSpellingAsYouType: boolean;
|
|
5764
6392
|
hideSpellingErrors: boolean;
|
|
5765
6393
|
}
|
|
6394
|
+
/**
|
|
6395
|
+
* File > Options > Save.
|
|
6396
|
+
*
|
|
6397
|
+
* Font embedding deliberately has NO entry here. It is owned by the File >
|
|
6398
|
+
* Fonts panel, whose toggle is the one the save path reads (see
|
|
6399
|
+
* `render/font-embedding`: `describeFontEmbedding` decides the toggle's start
|
|
6400
|
+
* position and whether it can do anything at all, `embeddedFontSaveOptions`
|
|
6401
|
+
* turns it into the `PptxHandler.save()` slice). This group used to carry a
|
|
6402
|
+
* second `embedFonts` boolean, plus an `embedAllFontCharacters` companion, and
|
|
6403
|
+
* neither was read by anything: the pane moved a switch that changed no saved
|
|
6404
|
+
* byte, while the panel next door moved the real one. Two switches for one
|
|
6405
|
+
* setting, one of them lying, is worse than one switch in a less
|
|
6406
|
+
* PowerPoint-shaped place.
|
|
6407
|
+
*/
|
|
5766
6408
|
interface ViewerSaveOptions {
|
|
5767
6409
|
autoSave: boolean;
|
|
5768
6410
|
autoRecoverIntervalMinutes: number;
|
|
5769
6411
|
keepLastAutoRecoveredVersion: boolean;
|
|
5770
6412
|
defaultExportFormat: DefaultExportFormat;
|
|
5771
|
-
embedFonts: boolean;
|
|
5772
|
-
embedAllFontCharacters: boolean;
|
|
5773
6413
|
cacheRetentionDays: number;
|
|
5774
6414
|
clearCacheOnClose: boolean;
|
|
5775
6415
|
}
|
|
@@ -6007,7 +6647,7 @@ interface ViewerOptionsSection {
|
|
|
6007
6647
|
/** Optional explanatory paragraph under the section title. */
|
|
6008
6648
|
descriptionKey?: string;
|
|
6009
6649
|
/** Marks a bespoke block a binding renders itself (e.g. the theme picker). */
|
|
6010
|
-
special?: 'themePicker' | 'clearCache' | 'shortcutReference';
|
|
6650
|
+
special?: 'themePicker' | 'clearCache' | 'shortcutReference' | 'customFonts';
|
|
6011
6651
|
controls: readonly ViewerOptionsControl[];
|
|
6012
6652
|
}
|
|
6013
6653
|
interface ViewerOptionsTabDefinition {
|
|
@@ -6926,6 +7566,43 @@ declare class AiPanelStore {
|
|
|
6926
7566
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AiPanelStore>;
|
|
6927
7567
|
}
|
|
6928
7568
|
|
|
7569
|
+
/** Live host accessors the recovery probe reads (all reactive). */
|
|
7570
|
+
interface AutosaveRecoveryHost {
|
|
7571
|
+
/** IndexedDB key of the open deck. Nothing to look up without one. */
|
|
7572
|
+
readonly filePath: () => string | undefined;
|
|
7573
|
+
/** True while the load pipeline is running. */
|
|
7574
|
+
readonly loading: () => boolean;
|
|
7575
|
+
/** Load error, if any. */
|
|
7576
|
+
readonly error: () => string | null | undefined;
|
|
7577
|
+
/** Slides currently rendered. */
|
|
7578
|
+
readonly slideCount: () => number;
|
|
7579
|
+
/**
|
|
7580
|
+
* Whether the host permits autosave at all (`autosave` input not `false`). A
|
|
7581
|
+
* user who merely switched the toggle off is still offered a pre-crash
|
|
7582
|
+
* snapshot; a host that forbade the feature is not.
|
|
7583
|
+
*/
|
|
7584
|
+
readonly autosaveAllowed: () => boolean;
|
|
7585
|
+
/** Load the recovered bytes into the viewer. */
|
|
7586
|
+
readonly restore: (bytes: Uint8Array) => void;
|
|
7587
|
+
}
|
|
7588
|
+
declare class AutosaveRecoveryService {
|
|
7589
|
+
private readonly injector;
|
|
7590
|
+
private readonly destroyRef;
|
|
7591
|
+
/** What the dialog should say, or null when there is nothing to offer. */
|
|
7592
|
+
readonly prompt: _angular_core.WritableSignal<AutosaveRecoveryPrompt | null>;
|
|
7593
|
+
private host;
|
|
7594
|
+
private record;
|
|
7595
|
+
private checked;
|
|
7596
|
+
private destroyed;
|
|
7597
|
+
bind(host: AutosaveRecoveryHost): void;
|
|
7598
|
+
/** The user accepted: load the snapshot bytes. */
|
|
7599
|
+
restore(): void;
|
|
7600
|
+
/** The user declined: drop the snapshot. */
|
|
7601
|
+
discard(): void;
|
|
7602
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AutosaveRecoveryService, never>;
|
|
7603
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AutosaveRecoveryService>;
|
|
7604
|
+
}
|
|
7605
|
+
|
|
6929
7606
|
/** Lifecycle status of the autosave engine (mirrors React's `AutosaveStatus`). */
|
|
6930
7607
|
type AutosaveStatus = {
|
|
6931
7608
|
state: 'idle';
|
|
@@ -6943,7 +7620,11 @@ type AutosaveStatus = {
|
|
|
6943
7620
|
};
|
|
6944
7621
|
/** Live host accessors the autosave engine reads (all reactive). */
|
|
6945
7622
|
interface AutosaveHost {
|
|
6946
|
-
/**
|
|
7623
|
+
/**
|
|
7624
|
+
* Whether autosave actually runs: the shared `resolveAutosaveActivation`
|
|
7625
|
+
* verdict (the host's `autosave` input as a ceiling, the title-bar toggle as
|
|
7626
|
+
* the user preference inside it), not the raw toggle.
|
|
7627
|
+
*/
|
|
6947
7628
|
readonly enabled: () => boolean;
|
|
6948
7629
|
/** File path/name keying the recovery snapshot. Autosave is inert when unset. */
|
|
6949
7630
|
readonly filePath: () => string | undefined;
|
|
@@ -6951,8 +7632,28 @@ interface AutosaveHost {
|
|
|
6951
7632
|
readonly isDirty: () => boolean;
|
|
6952
7633
|
/** Serialise the current edited deck to `.pptx` bytes (null skips the write). */
|
|
6953
7634
|
readonly serialize: () => Promise<Uint8Array | null>;
|
|
6954
|
-
/**
|
|
6955
|
-
|
|
7635
|
+
/**
|
|
7636
|
+
* The resolved cadence in milliseconds (shared `resolveAutosaveIntervalMs`:
|
|
7637
|
+
* host `autosaveIntervalMs` input > File > Options > Save AutoRecover
|
|
7638
|
+
* cadence > 120s default).
|
|
7639
|
+
*/
|
|
7640
|
+
readonly intervalMs?: () => number;
|
|
7641
|
+
/**
|
|
7642
|
+
* Why autosave is inactive, straight from the shared activation verdict, so
|
|
7643
|
+
* the title bar names the condition the user would have to change first
|
|
7644
|
+
* instead of always blaming the toggle.
|
|
7645
|
+
*/
|
|
7646
|
+
readonly disabledReason?: () => AutosaveDisabledReason | undefined;
|
|
7647
|
+
/**
|
|
7648
|
+
* The values a snapshot is built from, read fresh on each tick.
|
|
7649
|
+
*
|
|
7650
|
+
* The dirty flag stays true from the first edit until the user performs a
|
|
7651
|
+
* real save, so on its own it made this timer re-serialize and rewrite an
|
|
7652
|
+
* identical deck every N seconds forever. Vue, Svelte and Vanilla never had
|
|
7653
|
+
* that problem because they debounce on the slides signal being reassigned;
|
|
7654
|
+
* this is the same trigger. Omit it and every tick writes, as before.
|
|
7655
|
+
*/
|
|
7656
|
+
readonly changeSources?: () => readonly unknown[];
|
|
6956
7657
|
}
|
|
6957
7658
|
declare class AutosaveService {
|
|
6958
7659
|
private readonly injector;
|
|
@@ -6963,6 +7664,7 @@ declare class AutosaveService {
|
|
|
6963
7664
|
private host;
|
|
6964
7665
|
private timer;
|
|
6965
7666
|
private saving;
|
|
7667
|
+
private lastSnapshot;
|
|
6966
7668
|
/**
|
|
6967
7669
|
* Wire the host accessors (called once from the component constructor). An
|
|
6968
7670
|
* effect re-establishes the interval whenever `enabled`, `filePath`, or the
|
|
@@ -6971,6 +7673,11 @@ declare class AutosaveService {
|
|
|
6971
7673
|
bind(host: AutosaveHost): void;
|
|
6972
7674
|
/** Manually trigger an autosave right now (mirrors React's `triggerAutosave`). */
|
|
6973
7675
|
triggerAutosave(): Promise<void>;
|
|
7676
|
+
/**
|
|
7677
|
+
* `polled` marks the interval tick, which may be skipped as redundant. An
|
|
7678
|
+
* explicit {@link triggerAutosave} is a request, not a poll, and always
|
|
7679
|
+
* writes.
|
|
7680
|
+
*/
|
|
6974
7681
|
private doAutosave;
|
|
6975
7682
|
private clearTimer;
|
|
6976
7683
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AutosaveService, never>;
|
|
@@ -7142,6 +7849,11 @@ declare function buildSaveSlides(slides: readonly PptxSlide[], templateElementsB
|
|
|
7142
7849
|
* - Normal slide elements: follow `baseInteractive` unchanged.
|
|
7143
7850
|
* - Template (master/layout) elements: interactive only when `baseInteractive`
|
|
7144
7851
|
* is set AND `editTemplateMode` is on.
|
|
7852
|
+
* - An element whose authored `a:spLocks/@noSelect` is set is NEVER interactive:
|
|
7853
|
+
* PowerPoint treats a no-select shape as part of the backdrop, so it must not
|
|
7854
|
+
* answer a click hit-test nor be swept up by a marquee. Routing that through
|
|
7855
|
+
* the shared {@link canInteractWithElement} keeps the composition rule
|
|
7856
|
+
* (`noSelect` subsumes every other lock) in one place for all five bindings.
|
|
7145
7857
|
*/
|
|
7146
7858
|
declare function isElementInteractive(element: PptxElement, baseInteractive: boolean, editTemplateMode: boolean): boolean;
|
|
7147
7859
|
/**
|
|
@@ -7379,6 +8091,44 @@ declare class EditorStateService {
|
|
|
7379
8091
|
height?: number;
|
|
7380
8092
|
rotation?: number;
|
|
7381
8093
|
}): void;
|
|
8094
|
+
/**
|
|
8095
|
+
* Recompute the endpoints of every connector bound to one of `movedIds` and
|
|
8096
|
+
* write them back, WITHOUT recording history.
|
|
8097
|
+
*
|
|
8098
|
+
* Called at the end of a drag/resize gesture, whose single history snapshot
|
|
8099
|
+
* was already taken by {@link beginTransform}; routing this through `commit()`
|
|
8100
|
+
* instead would push a second, spurious undo step so undoing a move would
|
|
8101
|
+
* take two presses. Both shared helpers no-op on empty input, and
|
|
8102
|
+
* `applyReroutedConnectors` returns the same array reference when there is
|
|
8103
|
+
* nothing to apply, so calling this unconditionally at every gesture end is
|
|
8104
|
+
* free.
|
|
8105
|
+
*/
|
|
8106
|
+
rerouteConnectors(slideIndex: number, movedIds: Iterable<string>): void;
|
|
8107
|
+
/**
|
|
8108
|
+
* Set one `a:avLst` adjustment guide on an element during a live
|
|
8109
|
+
* shape-adjustment drag. Non-history for the same reason as
|
|
8110
|
+
* {@link applyTransform}: the gesture's snapshot was taken at its start.
|
|
8111
|
+
*
|
|
8112
|
+
* Merges into any existing `shapeAdjustments` rather than replacing the map,
|
|
8113
|
+
* so a multi-parameter geometry does not lose its other guides to a drag of
|
|
8114
|
+
* one handle.
|
|
8115
|
+
*/
|
|
8116
|
+
applyShapeAdjustment(slideIndex: number, id: string, key: string, value: number): void;
|
|
8117
|
+
/**
|
|
8118
|
+
* Merge a whole `a:avLst` patch. A callout's single diamond drives two
|
|
8119
|
+
* guides, so the drag emits a MAP rather than one key/value pair.
|
|
8120
|
+
*/
|
|
8121
|
+
applyShapeAdjustments(slideIndex: number, id: string, adjustments: Record<string, number>): void;
|
|
8122
|
+
/**
|
|
8123
|
+
* Commit a connector whose endpoint was re-bound (or unbound) on canvas.
|
|
8124
|
+
*
|
|
8125
|
+
* The WHOLE element is written, not a patch: a DETACHED end has had its
|
|
8126
|
+
* `a:stCxn` / `a:endCxn` key deleted, and merging only the surviving keys
|
|
8127
|
+
* would leave the stale binding behind and the connector would keep chasing
|
|
8128
|
+
* a shape it no longer touches. Takes a history entry, because unlike the
|
|
8129
|
+
* live drag branches this fires once, on release.
|
|
8130
|
+
*/
|
|
8131
|
+
applyConnectorEndpoint(slideIndex: number, id: string, element: PptxElement): void;
|
|
7382
8132
|
undo(): void;
|
|
7383
8133
|
redo(): void;
|
|
7384
8134
|
/** Align the selected elements within their group bounds (one history entry). */
|
|
@@ -7586,6 +8336,33 @@ declare class LoadContentService {
|
|
|
7586
8336
|
readonly parsedData: _angular_core.WritableSignal<PptxData | undefined>;
|
|
7587
8337
|
/** Slide canvas size in pixels. */
|
|
7588
8338
|
readonly canvasSize: _angular_core.WritableSignal<CanvasSize>;
|
|
8339
|
+
/**
|
|
8340
|
+
* `p:sldSz` in EMU, seeded from the loaded deck and rewritten by the SLIDE
|
|
8341
|
+
* SIZE card's preset/orientation controls.
|
|
8342
|
+
*
|
|
8343
|
+
* It is deliberately NOT derived from {@link canvasSize}: the pixel size is
|
|
8344
|
+
* an integer, and Ledger (12179300 EMU = 1278.5px) loses its
|
|
8345
|
+
* `ppSlideSizeLedgerPaper` identity the moment it round-trips through one.
|
|
8346
|
+
* The shared `resolveSlideSizeSelection` decides which of the two wins; see
|
|
8347
|
+
* {@link slideSizeSelection}.
|
|
8348
|
+
*/
|
|
8349
|
+
readonly slideSizeEmu: _angular_core.WritableSignal<SlideSizeEmu | undefined>;
|
|
8350
|
+
/**
|
|
8351
|
+
* The deck's custom shows (`p:custShow`), in the package's own key space
|
|
8352
|
+
* (`slideRIds` are RELATIONSHIP ids). Seeded on load and carried through
|
|
8353
|
+
* {@link saveSlides}; {@link ViewerCustomShowsService} is the editing surface
|
|
8354
|
+
* over it. Angular used to start this list empty and never write it back, so
|
|
8355
|
+
* the dialog opened blank on a deck with shows and lost anything created in
|
|
8356
|
+
* it.
|
|
8357
|
+
*/
|
|
8358
|
+
readonly customShows: _angular_core.WritableSignal<PptxCustomShow[]>;
|
|
8359
|
+
/**
|
|
8360
|
+
* The shared Slide Size decision for the deck as it stands: the EMU size a
|
|
8361
|
+
* save must persist, the preset it matches (if any), its orientation and the
|
|
8362
|
+
* canvas size the stage should use. Read by the SLIDE SIZE inspector card and
|
|
8363
|
+
* by {@link saveSlides}.
|
|
8364
|
+
*/
|
|
8365
|
+
readonly slideSizeSelection: _angular_core.Signal<SlideSizeSelectionDescriptor>;
|
|
7589
8366
|
/** Resolved presentation theme. */
|
|
7590
8367
|
readonly theme: _angular_core.WritableSignal<PptxTheme | undefined>;
|
|
7591
8368
|
/** Resolved colour map for the presentation theme (scheme key → hex). */
|
|
@@ -7606,6 +8383,24 @@ declare class LoadContentService {
|
|
|
7606
8383
|
readonly mediaDataUrls: _angular_core.WritableSignal<Map<string, string>>;
|
|
7607
8384
|
/** Embedded font data (name + binary) extracted from the presentation. */
|
|
7608
8385
|
readonly embeddedFonts: _angular_core.WritableSignal<PptxEmbeddedFont[]>;
|
|
8386
|
+
/**
|
|
8387
|
+
* Shared decision behind File > Fonts > "Embed fonts in the file": whether
|
|
8388
|
+
* the toggle accepts input at all, and which position describes the deck
|
|
8389
|
+
* that is loaded. Surfaced by {@link ViewerDialogsService} to the panel.
|
|
8390
|
+
*/
|
|
8391
|
+
readonly fontEmbedding: _angular_core.Signal<FontEmbeddingDescriptor>;
|
|
8392
|
+
/**
|
|
8393
|
+
* The toggle's live position, read by {@link saveSlides}. `false` strips
|
|
8394
|
+
* `p:embeddedFontLst`, the `/font` relationships and the `.fntdata` parts;
|
|
8395
|
+
* `true` keeps whatever the deck arrived with (core's default).
|
|
8396
|
+
*
|
|
8397
|
+
* It lives here, next to the fonts it decides the fate of, rather than in
|
|
8398
|
+
* the dialogs service, so the value save reads is seeded by the LOAD and
|
|
8399
|
+
* cannot depend on whether the Fonts panel was ever rendered. Seeded in
|
|
8400
|
+
* {@link load}; the initial `true` covers "no deck yet", where there is
|
|
8401
|
+
* nothing to strip.
|
|
8402
|
+
*/
|
|
8403
|
+
readonly embedFonts: _angular_core.WritableSignal<boolean>;
|
|
7609
8404
|
/** Core document properties from `docProps/core.xml`. */
|
|
7610
8405
|
readonly coreProperties: _angular_core.WritableSignal<PptxCoreProperties | undefined>;
|
|
7611
8406
|
/** Extended application properties from `docProps/app.xml`. */
|
|
@@ -7643,8 +8438,13 @@ declare class LoadContentService {
|
|
|
7643
8438
|
private renderToken;
|
|
7644
8439
|
private activeBlobUrls;
|
|
7645
8440
|
constructor();
|
|
7646
|
-
/**
|
|
7647
|
-
|
|
8441
|
+
/**
|
|
8442
|
+
* Serialise the current (loaded) presentation back to `.pptx` bytes.
|
|
8443
|
+
*
|
|
8444
|
+
* `password` carries the File > Info > Protect Presentation state; when set
|
|
8445
|
+
* the bytes are an encrypted OLE2 container rather than a plain ZIP.
|
|
8446
|
+
*/
|
|
8447
|
+
getContent(password?: DeckSaveIntent | string | null): Promise<Uint8Array>;
|
|
7648
8448
|
/**
|
|
7649
8449
|
* The loaded presentation's core handler, or `undefined` before a deck is
|
|
7650
8450
|
* loaded. Exposed for the AI bridge ({@link PptxAiBridge.getHandler}) so the
|
|
@@ -7660,7 +8460,7 @@ declare class LoadContentService {
|
|
|
7660
8460
|
* survive the save, mirroring React's `useSerialize` save options; core's
|
|
7661
8461
|
* `PptxDocumentPropertiesUpdater` writes them back into the package.
|
|
7662
8462
|
*/
|
|
7663
|
-
saveSlides(slides: readonly PptxSlide[], outputFormat?: PptxSaveFormat, sections?: readonly PptxSection[]): Promise<Uint8Array>;
|
|
8463
|
+
saveSlides(slides: readonly PptxSlide[], outputFormat?: PptxSaveFormat, sections?: readonly PptxSection[], password?: DeckSaveIntent | string | null): Promise<Uint8Array>;
|
|
7664
8464
|
/** Parse the supplied `.pptx` bytes into the reactive signals. */
|
|
7665
8465
|
load(raw: Uint8Array | ArrayBuffer | null | undefined): Promise<void>;
|
|
7666
8466
|
/**
|
|
@@ -8098,6 +8898,13 @@ declare function getImageSrc(el: PptxElement, mediaDataUrls: Map<string, string>
|
|
|
8098
8898
|
* with plain vitest without TestBed or the Angular compiler.
|
|
8099
8899
|
*/
|
|
8100
8900
|
|
|
8901
|
+
/**
|
|
8902
|
+
* Convert a shared `TableCellCss` object (camelCase keys, e.g. from
|
|
8903
|
+
* `cellStyleToCss` or `getTableCellBandStyle`) into an `[ngStyle]`-compatible
|
|
8904
|
+
* kebab-case {@link StyleMap}. Values are stringified so numbers (e.g.
|
|
8905
|
+
* `fontWeight: 700`) apply correctly.
|
|
8906
|
+
*/
|
|
8907
|
+
declare function cssObjectToStyleMap(css: Record<string, string | number>): StyleMap;
|
|
8101
8908
|
/** A single styled text run inside a cell paragraph. */
|
|
8102
8909
|
interface CellTextRun {
|
|
8103
8910
|
text: string;
|
|
@@ -8107,11 +8914,24 @@ interface CellTextRun {
|
|
|
8107
8914
|
/** A single paragraph inside a table cell, made up of one or more `CellTextRun`s. */
|
|
8108
8915
|
type CellParagraph = CellTextRun[];
|
|
8109
8916
|
/**
|
|
8110
|
-
* Convert a `PptxTableCellStyle`
|
|
8917
|
+
* Convert a `PptxTableCellStyle` to an `[ngStyle]`-compatible map.
|
|
8111
8918
|
*
|
|
8112
|
-
*
|
|
8113
|
-
*
|
|
8114
|
-
*
|
|
8919
|
+
* A thin adapter over the shared `cellStyleToCss`, which React, Vue, Svelte
|
|
8920
|
+
* and Vanilla all render tables from; only the key spelling (kebab-case, for
|
|
8921
|
+
* this binding's `StyleMap`) differs, so nothing but the conversion lives
|
|
8922
|
+
* here.
|
|
8923
|
+
*
|
|
8924
|
+
* This used to be a hand-ported copy of that function, and the copy had
|
|
8925
|
+
* silently lost four of its features: preset PATTERN fills (a hatched cell
|
|
8926
|
+
* painted a flat colour instead of the tile), `a:tcPr/@anchorCtr`
|
|
8927
|
+
* block-centring, `a:tcPr/@horzOverflow="clip"`, and the `a:cell3D` bevel.
|
|
8928
|
+
* All four render in the other four bindings and now render here too.
|
|
8929
|
+
*
|
|
8930
|
+
* One deliberate behaviour change comes with the swap: shared treats a ZERO
|
|
8931
|
+
* cell margin as "nothing authored" (`if (style.marginLeft)`) where the copy
|
|
8932
|
+
* tested `!== undefined`, so a cell authored `marL="0"` now keeps the
|
|
8933
|
+
* renderer's default 4px padding instead of collapsing to 0. That is what the
|
|
8934
|
+
* other four bindings already did.
|
|
8115
8935
|
*/
|
|
8116
8936
|
declare function cellStyleToStyleMap(style: PptxTableCellStyle | undefined): StyleMap;
|
|
8117
8937
|
/** Compute the `[ngStyle]` map for a `<col>` from its width fraction (0-1). */
|
|
@@ -8131,10 +8951,17 @@ declare function cellRunStyle(style: PptxTableCellStyle | undefined): StyleMap;
|
|
|
8131
8951
|
/**
|
|
8132
8952
|
* Build a list of `CellParagraph` arrays from a `PptxTableCell`.
|
|
8133
8953
|
*
|
|
8134
|
-
*
|
|
8135
|
-
*
|
|
8136
|
-
*
|
|
8137
|
-
*
|
|
8954
|
+
* Prefers `cell.textRuns`, the per-run model core parses out of the cell's
|
|
8955
|
+
* `a:txBody`: a cell reading "Revenue **grew 42%**" is two runs with different
|
|
8956
|
+
* weight, size, colour and typeface, and `cell.text` + the single cell-level
|
|
8957
|
+
* `cell.style` cannot express that. Paragraph markers close the current
|
|
8958
|
+
* paragraph; line-break markers become a `<br>` inside it.
|
|
8959
|
+
*
|
|
8960
|
+
* Falls back to splitting the flat `cell.text` on `\n` for cells the parser
|
|
8961
|
+
* produced no runs for (an empty cell, or a programmatically built table).
|
|
8962
|
+
* Returns an empty array when the cell is completely empty AND unstyled,
|
|
8963
|
+
* signalling the template to fall back to the non-breaking-space placeholder
|
|
8964
|
+
* (which keeps the row height).
|
|
8138
8965
|
*/
|
|
8139
8966
|
declare function buildCellParagraphs(cell: PptxTableCell): CellParagraph[];
|
|
8140
8967
|
|
|
@@ -8152,13 +8979,6 @@ declare function buildCellParagraphs(cell: PptxTableCell): CellParagraph[];
|
|
|
8152
8979
|
* - packages/react/src/viewer/utils/table-diagonal-borders.tsx (diagonals)
|
|
8153
8980
|
*/
|
|
8154
8981
|
|
|
8155
|
-
/**
|
|
8156
|
-
* Convert a shared `TableCellCss` object (camelCase keys, e.g. from
|
|
8157
|
-
* {@link getTableCellBandStyle}) into an `[ngStyle]`-compatible kebab-case
|
|
8158
|
-
* {@link StyleMap}. Values are stringified so numbers (e.g. `fontWeight: 700`)
|
|
8159
|
-
* apply correctly.
|
|
8160
|
-
*/
|
|
8161
|
-
declare function cssObjectToStyleMap(css: Record<string, string | number>): StyleMap;
|
|
8162
8982
|
/** A flattened cell descriptor ready for template iteration. */
|
|
8163
8983
|
interface TableCellViewModel {
|
|
8164
8984
|
cell: PptxTableCell;
|
|
@@ -8246,6 +9066,12 @@ declare class TableRendererComponent {
|
|
|
8246
9066
|
private readonly editingCell;
|
|
8247
9067
|
/** The mounted `<input>` for the active cell edit, if any. */
|
|
8248
9068
|
private readonly cellInput;
|
|
9069
|
+
/**
|
|
9070
|
+
* `<table>`-level style beyond the font stack: `a:tblPr@rtl` mirrors the
|
|
9071
|
+
* column order for right-to-left decks. Decided in shared so all five
|
|
9072
|
+
* bindings honour the flag identically.
|
|
9073
|
+
*/
|
|
9074
|
+
readonly tableRootStyle: _angular_core.Signal<StyleMap>;
|
|
8249
9075
|
/** Pre-computed `<col>` styles for the colgroup. */
|
|
8250
9076
|
readonly colStyles: _angular_core.Signal<StyleMap[]>;
|
|
8251
9077
|
/**
|
|
@@ -8364,12 +9190,19 @@ declare class ViewerCanvasEditingService {
|
|
|
8364
9190
|
onToggleElementHidden(id: string): void;
|
|
8365
9191
|
/**
|
|
8366
9192
|
* Commit a selection-pane inline rename through the history-integrated
|
|
8367
|
-
* update path.
|
|
8368
|
-
*
|
|
9193
|
+
* update path.
|
|
9194
|
+
*
|
|
9195
|
+
* The name is never `undefined`. The save writer reads `undefined` as "the
|
|
9196
|
+
* model has no opinion" and skips `cNvPr/@name` entirely, which is what
|
|
9197
|
+
* stops a plain round-trip from wiping the names of chart / SmartArt /
|
|
9198
|
+
* graphic frames that parse without one - and which also meant a cleared
|
|
9199
|
+
* box did nothing at all. `@name` is required on
|
|
9200
|
+
* `CT_NonVisualDrawingProps`, so it is never dropped; a clear arrives here
|
|
9201
|
+
* as `''` and is written as `name=""`.
|
|
8369
9202
|
*/
|
|
8370
9203
|
onSelectionPaneRename(event: {
|
|
8371
9204
|
id: string;
|
|
8372
|
-
name: string
|
|
9205
|
+
name: string;
|
|
8373
9206
|
}): void;
|
|
8374
9207
|
/**
|
|
8375
9208
|
* Commit a table cell's inline text edit. Finds the table element on the
|
|
@@ -8520,8 +9353,6 @@ declare class ViewerCustomShowsService {
|
|
|
8520
9353
|
private readonly loader;
|
|
8521
9354
|
/** Whether the custom-shows dialog is open. */
|
|
8522
9355
|
readonly showDialog: _angular_core.WritableSignal<boolean>;
|
|
8523
|
-
/** The list of user-defined custom shows for this session. */
|
|
8524
|
-
readonly shows: _angular_core.WritableSignal<readonly CustomShow[]>;
|
|
8525
9356
|
/** The id of the currently active custom show, or null. */
|
|
8526
9357
|
readonly activeId: _angular_core.WritableSignal<string | null>;
|
|
8527
9358
|
/** Active-slide index of the host viewer (bound from the component). */
|
|
@@ -8539,12 +9370,51 @@ declare class ViewerCustomShowsService {
|
|
|
8539
9370
|
activeSlideIndex: () => number;
|
|
8540
9371
|
liveSlides: () => readonly PptxSlide[];
|
|
8541
9372
|
}): void;
|
|
8542
|
-
/**
|
|
9373
|
+
/** The deck's shows in the dialog's key space (slide ids, not relationship ids). */
|
|
9374
|
+
readonly shows: _angular_core.Signal<readonly CustomShow[]>;
|
|
9375
|
+
/** Custom shows in the core shape consumed by set-up-slide-show and by save. */
|
|
8543
9376
|
readonly pptxCustomShows: _angular_core.Signal<PptxCustomShow[]>;
|
|
8544
|
-
/**
|
|
9377
|
+
/**
|
|
9378
|
+
* The running show's membership for the shared show-order rule, or `null`
|
|
9379
|
+
* when the whole deck is playing.
|
|
9380
|
+
*/
|
|
9381
|
+
readonly activeCustomShow: _angular_core.Signal<ShowOrderCustomShow | null>;
|
|
9382
|
+
/**
|
|
9383
|
+
* Slides handed to the presentation overlay: always the whole (live) deck.
|
|
9384
|
+
* The custom-show subset is applied by the shared show-order rule, which the
|
|
9385
|
+
* overlay runs against {@link activeCustomShow}.
|
|
9386
|
+
*/
|
|
8545
9387
|
readonly presentationSlides: _angular_core.Signal<PptxSlide[]>;
|
|
8546
|
-
/**
|
|
9388
|
+
/**
|
|
9389
|
+
* Start index into {@link presentationSlides}: always the editor's active
|
|
9390
|
+
* slide, which the show itself keeps up to date through `indexChange`.
|
|
9391
|
+
*
|
|
9392
|
+
* It must NOT be pinned to the custom show's first slide. `startIndex` is a
|
|
9393
|
+
* live input, not a constructor argument: the overlay re-adopts it whenever
|
|
9394
|
+
* it changes, and an audience display mirrors the presenter through it. While
|
|
9395
|
+
* this returned the show's first slide it never changed, so the overlay's
|
|
9396
|
+
* "adopt a host-pushed index" effect - which re-runs on the overlay's OWN
|
|
9397
|
+
* index too - snapped every advance straight back to slide 1, and Angular
|
|
9398
|
+
* alone could not leave the first slide of a custom show.
|
|
9399
|
+
*
|
|
9400
|
+
* Where a custom show STARTS is a one-shot seed instead, taken as the show
|
|
9401
|
+
* opens; see {@link showEntryIndex}.
|
|
9402
|
+
*/
|
|
8547
9403
|
readonly presentationStartIndex: _angular_core.Signal<number>;
|
|
9404
|
+
/**
|
|
9405
|
+
* The slide a show should OPEN on: the first slide the active custom show
|
|
9406
|
+
* visits, else the active slide. Read once, when the show starts.
|
|
9407
|
+
*/
|
|
9408
|
+
showEntryIndex(): number;
|
|
9409
|
+
/**
|
|
9410
|
+
* Adopt the loaded deck's authored show selection.
|
|
9411
|
+
*
|
|
9412
|
+
* `p:showPr/p:custShow/@id` is PowerPoint's "Set Up Slide Show > Custom show"
|
|
9413
|
+
* radio, and it is authored intent. Every binding parsed it and then played
|
|
9414
|
+
* the whole deck anyway. Called once per load; a manual pick made afterwards
|
|
9415
|
+
* simply overwrites {@link activeId} and wins until the next deck arrives.
|
|
9416
|
+
*/
|
|
9417
|
+
seedFromDeck(): void;
|
|
8548
9418
|
onCreate(show: {
|
|
8549
9419
|
name: string;
|
|
8550
9420
|
slideIds: string[];
|
|
@@ -8555,11 +9425,8 @@ declare class ViewerCustomShowsService {
|
|
|
8555
9425
|
name: string;
|
|
8556
9426
|
slideIds: string[];
|
|
8557
9427
|
}): void;
|
|
8558
|
-
/**
|
|
8559
|
-
|
|
8560
|
-
* is active (or it resolves to nothing). Used to filter the presentation.
|
|
8561
|
-
*/
|
|
8562
|
-
private resolveActiveShowSlides;
|
|
9428
|
+
/** Write an edited list back into the deck's key space (relationship ids). */
|
|
9429
|
+
private commit;
|
|
8563
9430
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerCustomShowsService, never>;
|
|
8564
9431
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerCustomShowsService>;
|
|
8565
9432
|
}
|
|
@@ -8589,8 +9456,29 @@ declare class ViewerDialogsService {
|
|
|
8589
9456
|
readonly compareResult: _angular_core.WritableSignal<CompareResult | null>;
|
|
8590
9457
|
/** Font-embedding panel visibility. */
|
|
8591
9458
|
readonly showFontEmbedding: _angular_core.WritableSignal<boolean>;
|
|
8592
|
-
/**
|
|
9459
|
+
/**
|
|
9460
|
+
* The deck this viewer loaded, when one is provided alongside this service
|
|
9461
|
+
* (it always is on the viewer host). Optional so the isolated service tests
|
|
9462
|
+
* and stubbed injectors keep working.
|
|
9463
|
+
*/
|
|
9464
|
+
private readonly loader;
|
|
9465
|
+
/**
|
|
9466
|
+
* Whether the save keeps the deck's embedded font data.
|
|
9467
|
+
*
|
|
9468
|
+
* Deliberately the loader's OWN signal rather than a copy: the flag is read
|
|
9469
|
+
* by `LoadContentService.saveSlides`, and it is seeded there from the loaded
|
|
9470
|
+
* deck, so a second source of truth here would let the panel and the save
|
|
9471
|
+
* path disagree. Previously this was a standalone `signal(false)` that
|
|
9472
|
+
* nothing ever read; wiring THAT to save would have stripped the embedded
|
|
9473
|
+
* fonts of every deck that had them.
|
|
9474
|
+
*/
|
|
8593
9475
|
readonly embedFontsEnabled: _angular_core.WritableSignal<boolean>;
|
|
9476
|
+
/**
|
|
9477
|
+
* Whether the toggle accepts input, plus the reason when it does not: the
|
|
9478
|
+
* viewer can keep or strip embedded font data, but cannot manufacture it for
|
|
9479
|
+
* a deck that embeds nothing.
|
|
9480
|
+
*/
|
|
9481
|
+
readonly fontEmbedding: _angular_core.Signal<FontEmbeddingDescriptor>;
|
|
8594
9482
|
/** Version-history side panel visibility. */
|
|
8595
9483
|
readonly showVersionHistory: _angular_core.WritableSignal<boolean>;
|
|
8596
9484
|
/** Keyboard-shortcuts help overlay visibility. */
|
|
@@ -8719,6 +9607,12 @@ interface FileIOHost {
|
|
|
8719
9607
|
readonly sections: () => readonly PptxSection[];
|
|
8720
9608
|
readonly templateElementsBySlideId: () => TemplateElementsBySlideId;
|
|
8721
9609
|
readonly emitContentChange: (bytes: Uint8Array) => void;
|
|
9610
|
+
/**
|
|
9611
|
+
* File > Info > Protect Presentation state. When it carries a password every
|
|
9612
|
+
* save below serialises through `saveEncrypted`, so the downloaded file is an
|
|
9613
|
+
* encrypted OLE2 container instead of a plain ZIP.
|
|
9614
|
+
*/
|
|
9615
|
+
readonly saveIntent: () => DeckSaveIntent;
|
|
8722
9616
|
}
|
|
8723
9617
|
declare class ViewerFileIOService {
|
|
8724
9618
|
private readonly loader;
|
|
@@ -9122,7 +10016,6 @@ interface PresentationModeHost {
|
|
|
9122
10016
|
readonly applyRehearsalTimings: (timings: Record<number, number>) => void;
|
|
9123
10017
|
}
|
|
9124
10018
|
declare class ViewerPresentationModeService {
|
|
9125
|
-
private readonly loader;
|
|
9126
10019
|
private readonly presenterWindow;
|
|
9127
10020
|
private readonly customShowsCtl;
|
|
9128
10021
|
/** Fullscreen presentation-mode overlay visibility. */
|
|
@@ -9158,10 +10051,14 @@ declare class ViewerPresentationModeService {
|
|
|
9158
10051
|
startRehearsalFromCurrent(): void;
|
|
9159
10052
|
private startRehearsal;
|
|
9160
10053
|
/**
|
|
9161
|
-
*
|
|
9162
|
-
*
|
|
9163
|
-
*
|
|
9164
|
-
*
|
|
10054
|
+
* Adopt a presentation-overlay index as the editor's `activeSlideIndex`.
|
|
10055
|
+
*
|
|
10056
|
+
* No remap is needed (and none may be done): the overlay is handed the WHOLE
|
|
10057
|
+
* live deck and applies custom-show membership as a navigation rule, so its
|
|
10058
|
+
* index is already a deck index. The id-lookup this used to perform existed
|
|
10059
|
+
* only because Angular pre-filtered the slide array to the show's members,
|
|
10060
|
+
* and it resolved against the PRISTINE loaded deck, so it mislanded whenever
|
|
10061
|
+
* the session had inserted or deleted a slide.
|
|
9165
10062
|
*/
|
|
9166
10063
|
onPresentationIndexChange(index: number): void;
|
|
9167
10064
|
toggleRehearsalPause(): void;
|
|
@@ -9251,7 +10148,7 @@ declare class ViewerZoomService {
|
|
|
9251
10148
|
* - React theme context / Vue provide-inject → `themeStyle` CSS vars applied to
|
|
9252
10149
|
* the root element (app-wide sharing via `provideViewerTheme`).
|
|
9253
10150
|
*/
|
|
9254
|
-
declare class PowerPointViewerComponent {
|
|
10151
|
+
declare class PowerPointViewerComponent implements PowerPointViewerAPI {
|
|
9255
10152
|
/** PowerPoint content as Uint8Array (or ArrayBuffer). */
|
|
9256
10153
|
readonly content: _angular_core.InputSignal<ArrayBuffer | Uint8Array<ArrayBufferLike> | null>;
|
|
9257
10154
|
/** Licensed fonts supplied by the host application. No fonts are bundled. */
|
|
@@ -9306,6 +10203,29 @@ declare class PowerPointViewerComponent {
|
|
|
9306
10203
|
* Mirrors React's `fileName` prop.
|
|
9307
10204
|
*/
|
|
9308
10205
|
readonly fileName: _angular_core.InputSignal<string | undefined>;
|
|
10206
|
+
/**
|
|
10207
|
+
* Recovery autosave: after an edit the deck is re-serialised (always as a
|
|
10208
|
+
* plain, unencrypted package, because recovery has no password) and stashed
|
|
10209
|
+
* in the shared IndexedDB store keyed by {@link filePath}. It is a crash-
|
|
10210
|
+
* safety net and never replaces the user's real Save: the document stays
|
|
10211
|
+
* dirty. On load, a newer snapshot is offered back through a recovery prompt.
|
|
10212
|
+
*
|
|
10213
|
+
* **The input is a policy ceiling; the title-bar AutoSave toggle is the
|
|
10214
|
+
* user's preference inside it.** `false` turns autosave off and makes the
|
|
10215
|
+
* toggle inert (a user cannot switch on what the application forbade).
|
|
10216
|
+
* `true` or omitted permits it, and the toggle decides, defaulting to on.
|
|
10217
|
+
* Identical in all five bindings; see `resolveAutosaveActivation` in
|
|
10218
|
+
* `pptx-viewer-shared`.
|
|
10219
|
+
*
|
|
10220
|
+
* @default true
|
|
10221
|
+
*/
|
|
10222
|
+
readonly autosaveInput: _angular_core.InputSignal<boolean | undefined>;
|
|
10223
|
+
/**
|
|
10224
|
+
* Recovery cadence in milliseconds. An explicit value is a host policy and is
|
|
10225
|
+
* honoured as given; omit it to follow the user's File > Options > Save >
|
|
10226
|
+
* "Save AutoRecover information every N minutes" (two minutes by default).
|
|
10227
|
+
*/
|
|
10228
|
+
readonly autosaveIntervalMs: _angular_core.InputSignal<number | undefined>;
|
|
9309
10229
|
/** Optional real-time collaboration config; when set, connects and shows remote cursors. */
|
|
9310
10230
|
readonly collaboration: _angular_core.InputSignal<CollaborationConfig | undefined>;
|
|
9311
10231
|
/**
|
|
@@ -9362,7 +10282,7 @@ declare class PowerPointViewerComponent {
|
|
|
9362
10282
|
/** Fired when the user edits document properties in the Info dialog. */
|
|
9363
10283
|
readonly propertiesChange: _angular_core.OutputEmitterRef<Partial<PptxCoreProperties>>;
|
|
9364
10284
|
/** Fired when the viewer mode changes (preview, edit, present, master). */
|
|
9365
|
-
readonly modeChange: _angular_core.OutputEmitterRef<
|
|
10285
|
+
readonly modeChange: _angular_core.OutputEmitterRef<ViewerMode>;
|
|
9366
10286
|
/** Fired when the zoom level changes. */
|
|
9367
10287
|
readonly zoomChange: _angular_core.OutputEmitterRef<number>;
|
|
9368
10288
|
/** Fired when element selection changes. */
|
|
@@ -9383,6 +10303,7 @@ declare class PowerPointViewerComponent {
|
|
|
9383
10303
|
protected readonly collab: CollaborationService;
|
|
9384
10304
|
protected readonly accessibility: AccessibilityService;
|
|
9385
10305
|
protected readonly autosave: AutosaveService;
|
|
10306
|
+
protected readonly autosaveRecovery: AutosaveRecoveryService;
|
|
9386
10307
|
protected readonly print: PrintService;
|
|
9387
10308
|
protected readonly mobile: IsMobileService;
|
|
9388
10309
|
private readonly smartArt3DSvc;
|
|
@@ -9471,6 +10392,11 @@ declare class PowerPointViewerComponent {
|
|
|
9471
10392
|
protected readonly rootStyle: _angular_core.Signal<Record<string, string>>;
|
|
9472
10393
|
/** Slide-sorter grid overlay visibility. */
|
|
9473
10394
|
protected readonly showSorter: _angular_core.WritableSignal<boolean>;
|
|
10395
|
+
/**
|
|
10396
|
+
* Which face the theme gallery opens on: its preset grid, or the theme
|
|
10397
|
+
* editor that Design > Edit Theme names. Set by the two Design commands.
|
|
10398
|
+
*/
|
|
10399
|
+
protected readonly themeEditorRequested: _angular_core.WritableSignal<boolean>;
|
|
9474
10400
|
/**
|
|
9475
10401
|
* Reading View visibility: the deck at full window size with the editor
|
|
9476
10402
|
* chrome cut back to a nav bar. Not the slide show (no fullscreen, no
|
|
@@ -9485,8 +10411,32 @@ declare class PowerPointViewerComponent {
|
|
|
9485
10411
|
protected readonly activeLayoutIndex: _angular_core.WritableSignal<number | null>;
|
|
9486
10412
|
/** Whether the left slides panel is collapsed (top-bar sidebar toggle). */
|
|
9487
10413
|
protected readonly slidesPanelCollapsed: _angular_core.WritableSignal<boolean>;
|
|
9488
|
-
/**
|
|
10414
|
+
/**
|
|
10415
|
+
* Whether the editor chrome renders at all.
|
|
10416
|
+
*
|
|
10417
|
+
* A running slide show has no editing chrome, exactly as PowerPoint's does
|
|
10418
|
+
* not: no ribbon, no title bar, no slide rail, no inspector, no notes pane
|
|
10419
|
+
* and no status bar. The show overlay is `position: fixed`, so leaving them
|
|
10420
|
+
* mounted LOOKS the same while keeping every one of those controls in the
|
|
10421
|
+
* tab order and the accessibility tree underneath it - a screen-reader user
|
|
10422
|
+
* would still be walked through the whole editor mid-presentation, and the
|
|
10423
|
+
* "Slide Show" button would still be reachable during the show it starts.
|
|
10424
|
+
* React, Svelte and Vanilla already suppress theirs; `e2e/present-mode.spec.ts`
|
|
10425
|
+
* pins the rule for all five.
|
|
10426
|
+
*/
|
|
10427
|
+
protected readonly chromeVisible: _angular_core.Signal<boolean>;
|
|
10428
|
+
/**
|
|
10429
|
+
* The user PREFERENCE (title-bar AutoSave toggle; default on). What actually
|
|
10430
|
+
* runs is {@link autosaveActivation}, which folds in the host's `autosave`
|
|
10431
|
+
* input as a ceiling the preference cannot exceed.
|
|
10432
|
+
*/
|
|
9489
10433
|
protected readonly autosaveEnabled: _angular_core.WritableSignal<boolean>;
|
|
10434
|
+
/** The shared verdict: does autosave run, may the toggle move, and if not why. */
|
|
10435
|
+
protected readonly autosaveActivation: _angular_core.Signal<AutosaveActivation>;
|
|
10436
|
+
/** The recovery offer, or null while a slide show is running. */
|
|
10437
|
+
protected readonly visibleRecoveryPrompt: _angular_core.Signal<AutosaveRecoveryPrompt | null>;
|
|
10438
|
+
/** Flip the AutoSave preference, unless the host forbade autosave outright. */
|
|
10439
|
+
protected toggleAutosave(): void;
|
|
9490
10440
|
/** Active drawing tool (from the ribbon Draw tab). */
|
|
9491
10441
|
protected readonly activeDrawTool: _angular_core.WritableSignal<"select" | "pen" | "highlighter" | "eraser" | "freeform">;
|
|
9492
10442
|
/** Active ink stroke colour. */
|
|
@@ -9558,11 +10508,37 @@ declare class PowerPointViewerComponent {
|
|
|
9558
10508
|
* When editing, this serialises the editor's edited deck so changes persist.
|
|
9559
10509
|
*/
|
|
9560
10510
|
getContent(): Promise<Uint8Array>;
|
|
10511
|
+
/**
|
|
10512
|
+
* Design > Browse Themes: toggle the gallery on its preset grid. Clearing
|
|
10513
|
+
* the editor request matters when the theme editor was the last face shown.
|
|
10514
|
+
*/
|
|
10515
|
+
protected onBrowseThemes(): void;
|
|
10516
|
+
/**
|
|
10517
|
+
* Design > Edit Theme: the real theme editor lives inside the gallery
|
|
10518
|
+
* overlay, so open the gallery already switched to it (it used to open the
|
|
10519
|
+
* Document Properties dialog, which has nothing to do with themes).
|
|
10520
|
+
*/
|
|
10521
|
+
protected onEditTheme(): void;
|
|
10522
|
+
/**
|
|
10523
|
+
* Design > Slide Size: the size control is the inspector's SLIDE SIZE card,
|
|
10524
|
+
* which the deck (no-selection) panel renders. Drop the element selection so
|
|
10525
|
+
* that panel is what the format pane shows, then make sure it is open.
|
|
10526
|
+
*/
|
|
10527
|
+
protected onOpenSlideSize(): void;
|
|
9561
10528
|
protected openMasterView(): void;
|
|
9562
10529
|
protected closeMasterView(): void;
|
|
9563
10530
|
protected selectMasterTab(tab: MasterViewTab): void;
|
|
10531
|
+
/**
|
|
10532
|
+
* Format Background for whichever master-view part is selected.
|
|
10533
|
+
*
|
|
10534
|
+
* This used to be a hand-rolled tab/layout walk; the routing decision now
|
|
10535
|
+
* lives in `pptx-viewer-shared` alongside the element write path, so the
|
|
10536
|
+
* five bindings cannot disagree about which part a colour lands on.
|
|
10537
|
+
*/
|
|
9564
10538
|
protected setMasterBackground(backgroundColor: string): void;
|
|
9565
10539
|
protected setHandoutSlidesPerPage(slidesPerPage: number): void;
|
|
10540
|
+
/** Shape-tree edits made on the Slide Master view's Slides tab. */
|
|
10541
|
+
protected updateSlideMasters(masters: PptxSlideMaster[]): void;
|
|
9566
10542
|
protected updateNotesMaster(master: PptxNotesMaster): void;
|
|
9567
10543
|
protected updateHandoutMaster(master: PptxHandoutMaster): void;
|
|
9568
10544
|
goTo(index: number): void;
|
|
@@ -9623,9 +10599,9 @@ declare class PowerPointViewerComponent {
|
|
|
9623
10599
|
/** Reset zoom to 100%. */
|
|
9624
10600
|
zoomReset(): void;
|
|
9625
10601
|
/** Get the current viewer mode. */
|
|
9626
|
-
getMode():
|
|
10602
|
+
getMode(): ViewerMode;
|
|
9627
10603
|
/** Switch the viewer mode (e.g. 'edit', 'preview', 'present'). */
|
|
9628
|
-
setMode(mode:
|
|
10604
|
+
setMode(mode: ViewerMode): void;
|
|
9629
10605
|
/** Get the zero-based active slide index. */
|
|
9630
10606
|
getActiveSlideIndex(): number;
|
|
9631
10607
|
/** Get the total number of slides. */
|
|
@@ -9711,6 +10687,12 @@ declare class PowerPointViewerComponent {
|
|
|
9711
10687
|
* autosave engine skips the write. Distinct from {@link getContent}, this does
|
|
9712
10688
|
* NOT emit `contentChange` (autosave is a background recovery write, not a
|
|
9713
10689
|
* host-visible save).
|
|
10690
|
+
*
|
|
10691
|
+
* The `recoverySnapshotIntent` is load-bearing, not decoration: it keeps the
|
|
10692
|
+
* snapshot a plain ZIP even when the deck is password protected, because
|
|
10693
|
+
* recovery reopens it with no password. Angular used to get that right only
|
|
10694
|
+
* by omitting the argument, which is one refactor away from silently writing
|
|
10695
|
+
* an unrecoverable encrypted snapshot (the bug React and Vue shipped).
|
|
9714
10696
|
*/
|
|
9715
10697
|
private serializeForAutosave;
|
|
9716
10698
|
/** Review ▸ Compare: pick a `.pptx` and diff it against the current deck. */
|
|
@@ -9767,7 +10749,7 @@ declare class PowerPointViewerComponent {
|
|
|
9767
10749
|
/** Resolve the live slide-stage element within `<main>`. */
|
|
9768
10750
|
private stageElement;
|
|
9769
10751
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PowerPointViewerComponent, never>;
|
|
9770
|
-
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>;
|
|
10752
|
+
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; }; "autosaveInput": { "alias": "autosave"; "required": false; "isSignal": true; }; "autosaveIntervalMs": { "alias": "autosaveIntervalMs"; "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>;
|
|
9771
10753
|
}
|
|
9772
10754
|
|
|
9773
10755
|
/** A selected chart sub-part, scoped to the chart element that owns it. */
|
|
@@ -9788,6 +10770,28 @@ declare class ChartPartSelectionService {
|
|
|
9788
10770
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ChartPartSelectionService>;
|
|
9789
10771
|
}
|
|
9790
10772
|
|
|
10773
|
+
/**
|
|
10774
|
+
* Families the user registered from a local font file this session
|
|
10775
|
+
* (File > Options > Fonts, off by default).
|
|
10776
|
+
*
|
|
10777
|
+
* A service rather than a chain of inputs because two unrelated parts of the
|
|
10778
|
+
* UI need the same list: the Options pane that adds to it and the Home tab's
|
|
10779
|
+
* font dropdown that offers it. It is also deliberately not persisted, so
|
|
10780
|
+
* nothing survives a reload; the font binary is the user's, not ours to store.
|
|
10781
|
+
*
|
|
10782
|
+
* Provided per viewer instance (alongside the other viewer services), so two
|
|
10783
|
+
* viewers on one page keep their own lists.
|
|
10784
|
+
*/
|
|
10785
|
+
declare class CustomFontsService {
|
|
10786
|
+
private readonly families;
|
|
10787
|
+
/** The registered families, in the order they were added. */
|
|
10788
|
+
readonly registeredFamilies: _angular_core.Signal<readonly string[]>;
|
|
10789
|
+
/** Record a newly registered family, ignoring one already present. */
|
|
10790
|
+
register(family: string): void;
|
|
10791
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CustomFontsService, never>;
|
|
10792
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<CustomFontsService>;
|
|
10793
|
+
}
|
|
10794
|
+
|
|
9791
10795
|
declare class EmbeddedFontsService {
|
|
9792
10796
|
/** The generated `@font-face` stylesheet text (also injected into `<head>`). */
|
|
9793
10797
|
readonly fontFaceCss: _angular_core.WritableSignal<string>;
|
|
@@ -10017,6 +11021,13 @@ interface KeyboardHost {
|
|
|
10017
11021
|
readonly canEdit: () => boolean;
|
|
10018
11022
|
readonly presenting: () => boolean;
|
|
10019
11023
|
readonly activeSlideIndex: () => number;
|
|
11024
|
+
/**
|
|
11025
|
+
* A Draw-tab tool other than the selection arrow is armed. The shared keymap
|
|
11026
|
+
* stands its whole editing set down while one is, so a pen stroke is not also
|
|
11027
|
+
* a Delete: every other binding passes this flag and Angular did not, which
|
|
11028
|
+
* left Delete, Ctrl+D and the arrow nudges live over an armed pen.
|
|
11029
|
+
*/
|
|
11030
|
+
readonly isDrawing?: () => boolean;
|
|
10020
11031
|
/** Go back one slide (the arrows page the deck when nothing is selected). */
|
|
10021
11032
|
readonly goPrev?: () => void;
|
|
10022
11033
|
/** Go forward one slide. */
|
|
@@ -10026,10 +11037,21 @@ declare class ViewerKeyboardService {
|
|
|
10026
11037
|
private readonly editor;
|
|
10027
11038
|
private readonly dialogs;
|
|
10028
11039
|
private readonly formatPainter;
|
|
11040
|
+
private readonly findReplace;
|
|
10029
11041
|
private host;
|
|
10030
11042
|
/** Wire the host accessors (called once from the component constructor). */
|
|
10031
11043
|
bind(host: KeyboardHost): void;
|
|
10032
11044
|
handleKeyDown(event: KeyboardEvent): void;
|
|
11045
|
+
/**
|
|
11046
|
+
* Ctrl/Cmd+F toggles the find bar. Angular has shipped the bar since the
|
|
11047
|
+
* find-replace port but had no shortcut for it at all, because the chord was
|
|
11048
|
+
* hand-wired in React and Vue instead of living in the shared keymap.
|
|
11049
|
+
*
|
|
11050
|
+
* The full find-and-replace bar counts as "open" for the toggle: pressing the
|
|
11051
|
+
* chord while it is up closes it rather than swapping it for the smaller find
|
|
11052
|
+
* bar, which is what every other binding's single-panel toggle does.
|
|
11053
|
+
*/
|
|
11054
|
+
private toggleFind;
|
|
10033
11055
|
/**
|
|
10034
11056
|
* Escape unwinds the transient chrome one layer at a time: an armed format
|
|
10035
11057
|
* painter first (it is modal over the pointer), then the shortcut cheat
|
|
@@ -10138,7 +11160,7 @@ declare class ZoomTargetService {
|
|
|
10138
11160
|
* `PowerPointViewerComponent`'s children (ribbon, slide canvas, inspector,
|
|
10139
11161
|
* dialogs, ...) rely on via `inject()`.
|
|
10140
11162
|
*/
|
|
10141
|
-
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];
|
|
11163
|
+
declare const POWER_POINT_VIEWER_PROVIDERS: readonly [typeof LoadContentService, typeof ExportService, typeof EditorStateService, typeof ChartPartSelectionService, typeof TableSelectionService, typeof EmbeddedFontsService, typeof CollaborationService, typeof CustomFontsService, typeof AccessibilityService, typeof AutosaveService, typeof AutosaveRecoveryService, 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];
|
|
10142
11164
|
|
|
10143
11165
|
/** Lifecycle of the AI session bootstrap. */
|
|
10144
11166
|
type AiChatInitState = 'checking' | 'unavailable' | 'ready' | 'error';
|
|
@@ -10724,6 +11746,16 @@ declare class RibbonComponent {
|
|
|
10724
11746
|
readonly drawToolChange: _angular_core.OutputEmitterRef<DrawToolState>;
|
|
10725
11747
|
/** Emitted when the user clicks "Browse Themes" in the Design tab. */
|
|
10726
11748
|
readonly toggleThemeGallery: _angular_core.OutputEmitterRef<void>;
|
|
11749
|
+
/**
|
|
11750
|
+
* Emitted when the user clicks "Edit Theme" in the Design tab. The host
|
|
11751
|
+
* opens the theme gallery straight in its theme-editor (customise) mode.
|
|
11752
|
+
*/
|
|
11753
|
+
readonly editTheme: _angular_core.OutputEmitterRef<void>;
|
|
11754
|
+
/**
|
|
11755
|
+
* Emitted when the user clicks "Slide Size" in the Design tab. The host
|
|
11756
|
+
* surfaces the inspector's deck panel, which owns the slide-size card.
|
|
11757
|
+
*/
|
|
11758
|
+
readonly openSlideSize: _angular_core.OutputEmitterRef<void>;
|
|
10727
11759
|
/** Emitted when the user toggles the grid overlay in the View tab. */
|
|
10728
11760
|
readonly toggleGrid: _angular_core.OutputEmitterRef<void>;
|
|
10729
11761
|
/** Emitted when the user toggles rulers in the View tab. */
|
|
@@ -10773,7 +11805,7 @@ declare class RibbonComponent {
|
|
|
10773
11805
|
/** Forward the Review proofing toggle to the viewer-owned live state. */
|
|
10774
11806
|
protected setSpellCheck(enabled: boolean): void;
|
|
10775
11807
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonComponent, never>;
|
|
10776
|
-
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; }; "activeSlideHidden": { "alias": "activeSlideHidden"; "required": false; "isSignal": true; }; }, { "prev": "prev"; "next": "next"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "zoomReset": "zoomReset"; "find": "find"; "present": "present"; "presenter": "presenter"; "record": "record"; "presentFromBeginning": "presentFromBeginning"; "rehearseTimings": "rehearseTimings"; "toggleSubtitles": "toggleSubtitles"; "openSubtitleSettings": "openSubtitleSettings"; "recordFromBeginning": "recordFromBeginning"; "recordFromCurrent": "recordFromCurrent"; "spellCheckChange": "spellCheckChange"; "share": "share"; "broadcast": "broadcast"; "openFile": "openFile"; "openRecentFile": "openRecentFile"; "createPresentation": "createPresentation"; "save": "save"; "savePpsx": "savePpsx"; "savePptm": "savePptm"; "packageForSharing": "packageForSharing"; "toggleSidebar": "toggleSidebar"; "toggleAiPanel": "toggleAiPanel"; "signatures": "signatures"; "info": "info"; "print": "print"; "comments": "comments"; "a11y": "a11y"; "link": "link"; "openSorter": "openSorter"; "openReadingView": "openReadingView"; "openOutlineView": "openOutlineView"; "openMasterView": "openMasterView"; "toggleNotes": "toggleNotes"; "toggleFormatPainter": "toggleFormatPainter"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "exportJson": "exportJson"; "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"; "openTemplateGallery": "openTemplateGallery"; "openEquationDialog": "openEquationDialog"; "openSetUpSlideShow": "openSetUpSlideShow"; "toggleHideSlide": "toggleHideSlide"; "openCompare": "openCompare"; "openPassword": "openPassword"; "openFontEmbedding": "openFontEmbedding"; "openVersionHistory": "openVersionHistory"; "openShortcuts": "openShortcuts"; "openSettings": "openSettings"; }, never, never, true, never>;
|
|
11808
|
+
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; }; "activeSlideHidden": { "alias": "activeSlideHidden"; "required": false; "isSignal": true; }; }, { "prev": "prev"; "next": "next"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "zoomReset": "zoomReset"; "find": "find"; "present": "present"; "presenter": "presenter"; "record": "record"; "presentFromBeginning": "presentFromBeginning"; "rehearseTimings": "rehearseTimings"; "toggleSubtitles": "toggleSubtitles"; "openSubtitleSettings": "openSubtitleSettings"; "recordFromBeginning": "recordFromBeginning"; "recordFromCurrent": "recordFromCurrent"; "spellCheckChange": "spellCheckChange"; "share": "share"; "broadcast": "broadcast"; "openFile": "openFile"; "openRecentFile": "openRecentFile"; "createPresentation": "createPresentation"; "save": "save"; "savePpsx": "savePpsx"; "savePptm": "savePptm"; "packageForSharing": "packageForSharing"; "toggleSidebar": "toggleSidebar"; "toggleAiPanel": "toggleAiPanel"; "signatures": "signatures"; "info": "info"; "print": "print"; "comments": "comments"; "a11y": "a11y"; "link": "link"; "openSorter": "openSorter"; "openReadingView": "openReadingView"; "openOutlineView": "openOutlineView"; "openMasterView": "openMasterView"; "toggleNotes": "toggleNotes"; "toggleFormatPainter": "toggleFormatPainter"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "exportJson": "exportJson"; "copySlideAsImage": "copySlideAsImage"; "replace": "replace"; "toggleInspector": "toggleInspector"; "drawToolChange": "drawToolChange"; "toggleThemeGallery": "toggleThemeGallery"; "editTheme": "editTheme"; "openSlideSize": "openSlideSize"; "toggleGrid": "toggleGrid"; "toggleRulers": "toggleRulers"; "toggleGuides": "toggleGuides"; "toggleSelectionPane": "toggleSelectionPane"; "openCustomShows": "openCustomShows"; "toggleSnapToGrid": "toggleSnapToGrid"; "toggleSnapToShape": "toggleSnapToShape"; "addGuide": "addGuide"; "zoomToFit": "zoomToFit"; "toggleEyedropper": "toggleEyedropper"; "openSmartArtDialog": "openSmartArtDialog"; "openTemplateGallery": "openTemplateGallery"; "openEquationDialog": "openEquationDialog"; "openSetUpSlideShow": "openSetUpSlideShow"; "toggleHideSlide": "toggleHideSlide"; "openCompare": "openCompare"; "openPassword": "openPassword"; "openFontEmbedding": "openFontEmbedding"; "openVersionHistory": "openVersionHistory"; "openShortcuts": "openShortcuts"; "openSettings": "openSettings"; }, never, never, true, never>;
|
|
10777
11809
|
}
|
|
10778
11810
|
|
|
10779
11811
|
/** The eight resize-handle positions around a selection box. */
|
|
@@ -10897,6 +11929,41 @@ declare class RulerGuidesService {
|
|
|
10897
11929
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<RulerGuidesService>;
|
|
10898
11930
|
}
|
|
10899
11931
|
|
|
11932
|
+
/**
|
|
11933
|
+
* shape-adjust-handle.ts: the Angular view-mapping for the SHARED shape
|
|
11934
|
+
* adjustment (`a:avLst`) affordance.
|
|
11935
|
+
*
|
|
11936
|
+
* Angular used to render a generic top-left corner handle for EVERY selected
|
|
11937
|
+
* element whose pointerdown just resized from the south-east corner: a decoy
|
|
11938
|
+
* that neither appeared where an adjustment handle belongs nor adjusted
|
|
11939
|
+
* anything. React, Vue, Svelte and Vanilla all consume
|
|
11940
|
+
* `getShapeAdjustmentHandleDescriptors` instead, which answers an EMPTY list
|
|
11941
|
+
* for any geometry with no adjustable parameter (and for a shape whose
|
|
11942
|
+
* `a:spLocks/@noAdjustHandles` is set), so a handle only exists where
|
|
11943
|
+
* PowerPoint puts one, and a preset with several adjustable parameters gets
|
|
11944
|
+
* one diamond for each.
|
|
11945
|
+
*
|
|
11946
|
+
* This module is the thin descriptor -> stage-box mapping, kept out of
|
|
11947
|
+
* `slide-canvas.component.ts` so the component stays view wiring and the maths
|
|
11948
|
+
* stays unit-testable without Angular.
|
|
11949
|
+
*
|
|
11950
|
+
* @module viewer/shape-adjust-handle
|
|
11951
|
+
*/
|
|
11952
|
+
|
|
11953
|
+
/** One adjustment handle's render box in STAGE (unscaled slide) coordinates. */
|
|
11954
|
+
interface AdjustHandleBox {
|
|
11955
|
+
/** The `a:avLst` guide name the drag writes (`shapeAdjustments[key]`). */
|
|
11956
|
+
key: string;
|
|
11957
|
+
left: number;
|
|
11958
|
+
top: number;
|
|
11959
|
+
size: number;
|
|
11960
|
+
cursor: string;
|
|
11961
|
+
/** The element's current adjustment value (guide units), seeding a drag. */
|
|
11962
|
+
value: number;
|
|
11963
|
+
/** The descriptor this box came from; the drag needs its solver. */
|
|
11964
|
+
descriptor: ShapeAdjustmentHandleDescriptor;
|
|
11965
|
+
}
|
|
11966
|
+
|
|
10900
11967
|
/**
|
|
10901
11968
|
* Slide-scoped DI context: lets leaf renderers (chart, SmartArt) resolve which
|
|
10902
11969
|
* slide their canvas is displaying without threading an input through every
|
|
@@ -11002,6 +12069,18 @@ declare class SlideCanvasComponent implements SlideContext {
|
|
|
11002
12069
|
* e2e selectors from matching multiple elements.
|
|
11003
12070
|
*/
|
|
11004
12071
|
readonly interactive: _angular_core.InputSignal<boolean>;
|
|
12072
|
+
/**
|
|
12073
|
+
* When true (default), this canvas's elements carry `data-element-id`.
|
|
12074
|
+
*
|
|
12075
|
+
* The miniature surfaces that paint EVERY slide at once (thumbnail rail,
|
|
12076
|
+
* mobile slide sheet, slide sorter, presenter navigator, layout gallery, diff
|
|
12077
|
+
* strip) pass `false`: they otherwise put one node per element PER SLIDE into
|
|
12078
|
+
* the document, so a `[data-element-id]` query resolved a slide that is not
|
|
12079
|
+
* on screen. It is deliberately separate from {@link interactive}, because
|
|
12080
|
+
* the presentation stage is not interactive and still needs its ids (the
|
|
12081
|
+
* morph engine generates keyframe CSS that selects on them).
|
|
12082
|
+
*/
|
|
12083
|
+
readonly exposeElementIds: _angular_core.InputSignal<boolean>;
|
|
11005
12084
|
/**
|
|
11006
12085
|
* True only for the live presentation stage: slide-content media autoplays.
|
|
11007
12086
|
* Left false for thumbnails, the sorter and the editor canvas so their media
|
|
@@ -11074,6 +12153,34 @@ declare class SlideCanvasComponent implements SlideContext {
|
|
|
11074
12153
|
id: string;
|
|
11075
12154
|
box: Box;
|
|
11076
12155
|
}>;
|
|
12156
|
+
/**
|
|
12157
|
+
* Emitted once a drag/resize gesture RELEASES, carrying every element id the
|
|
12158
|
+
* gesture moved. The parent uses it to reroute the connectors bound to those
|
|
12159
|
+
* shapes; without it a connector kept pointing at where its shape used to be,
|
|
12160
|
+
* because the drag end simply discarded its state with no model write.
|
|
12161
|
+
*/
|
|
12162
|
+
readonly transformEnd: _angular_core.OutputEmitterRef<{
|
|
12163
|
+
ids: readonly string[];
|
|
12164
|
+
}>;
|
|
12165
|
+
/**
|
|
12166
|
+
* Emitted while the shape-adjustment (amber diamond) handle is dragged, with
|
|
12167
|
+
* the `a:avLst` guide name and its new 0..50000 value. Deliberately separate
|
|
12168
|
+
* from {@link transformUpdate}: an adjustment changes the shape's geometry
|
|
12169
|
+
* parameter, never its box.
|
|
12170
|
+
*/
|
|
12171
|
+
readonly adjustUpdate: _angular_core.OutputEmitterRef<{
|
|
12172
|
+
id: string;
|
|
12173
|
+
adjustments: Record<string, number>;
|
|
12174
|
+
}>;
|
|
12175
|
+
/**
|
|
12176
|
+
* Emitted when a connector endpoint drag lands: the whole rebuilt connector,
|
|
12177
|
+
* because a DETACHED end has had its `a:stCxn` / `a:endCxn` key deleted and a
|
|
12178
|
+
* merge of the surviving keys would leave the stale one behind.
|
|
12179
|
+
*/
|
|
12180
|
+
readonly connectorEndpointUpdate: _angular_core.OutputEmitterRef<{
|
|
12181
|
+
id: string;
|
|
12182
|
+
element: PptxElement;
|
|
12183
|
+
}>;
|
|
11077
12184
|
/** Emitted on right-click with the element under the cursor (or null). */
|
|
11078
12185
|
readonly contextMenu: _angular_core.OutputEmitterRef<{
|
|
11079
12186
|
id: string | null;
|
|
@@ -11127,6 +12234,14 @@ declare class SlideCanvasComponent implements SlideContext {
|
|
|
11127
12234
|
tableData: PptxTableData;
|
|
11128
12235
|
}>;
|
|
11129
12236
|
private drag;
|
|
12237
|
+
/** Live shape-adjustment gesture (amber diamond), or null when idle. */
|
|
12238
|
+
private adjustDrag;
|
|
12239
|
+
/** Live connector-endpoint gesture, in SLIDE px, or null when idle. */
|
|
12240
|
+
protected readonly connectorEndpointDrag: _angular_core.WritableSignal<{
|
|
12241
|
+
kind: ConnectorEndpointKind;
|
|
12242
|
+
x: number;
|
|
12243
|
+
y: number;
|
|
12244
|
+
} | null>;
|
|
11130
12245
|
private editCancelled;
|
|
11131
12246
|
private marquee;
|
|
11132
12247
|
/** Live marquee rectangle (stage coords) while rubber-band selecting. */
|
|
@@ -11192,17 +12307,60 @@ declare class SlideCanvasComponent implements SlideContext {
|
|
|
11192
12307
|
readonly singleSelected: _angular_core.Signal<(Box & {
|
|
11193
12308
|
id: string;
|
|
11194
12309
|
}) | null>;
|
|
11195
|
-
/**
|
|
12310
|
+
/** Look an element up by id across the slide + template layers. */
|
|
12311
|
+
private elementById;
|
|
12312
|
+
/** The single selected element itself (not just its box), or null. */
|
|
12313
|
+
private readonly singleSelectedElement;
|
|
12314
|
+
/**
|
|
12315
|
+
* Resize-handle render boxes (stage coords) for the single selection. Empty
|
|
12316
|
+
* for an element whose authored `a:spLocks/@noResize` pins its size.
|
|
12317
|
+
*/
|
|
11196
12318
|
readonly handleBoxes: _angular_core.Signal<pptx_angular_viewer.HandleBox[]>;
|
|
11197
|
-
/**
|
|
12319
|
+
/**
|
|
12320
|
+
* Rotation-handle box (stage coords) above the single selection, or null (also
|
|
12321
|
+
* null when `a:spLocks/@noRotation` is authored on the element).
|
|
12322
|
+
*/
|
|
11198
12323
|
readonly rotateHandle: _angular_core.Signal<pptx_angular_viewer.CornerHandleBox | null>;
|
|
11199
12324
|
/**
|
|
11200
|
-
* Shape-adjustment-handle
|
|
11201
|
-
*
|
|
11202
|
-
*
|
|
11203
|
-
*
|
|
12325
|
+
* Shape-adjustment-handle boxes (stage coords) for the single selection.
|
|
12326
|
+
* Position, existence and cursor all come from the SHARED
|
|
12327
|
+
* `getShapeAdjustmentHandleDescriptors`, so a handle appears only for a
|
|
12328
|
+
* geometry that actually has an adjustable parameter, there is ONE per
|
|
12329
|
+
* `a:avLst` guide, and each sits exactly where the other four bindings put
|
|
12330
|
+
* it. Selection-only + editable-only, so they vanish in presentation with
|
|
12331
|
+
* the rest of the chrome.
|
|
11204
12332
|
*/
|
|
11205
|
-
readonly
|
|
12333
|
+
readonly adjustHandles: _angular_core.Signal<AdjustHandleBox[]>;
|
|
12334
|
+
/** The selected connector, when exactly one connector is selected. */
|
|
12335
|
+
private readonly selectedConnector;
|
|
12336
|
+
/**
|
|
12337
|
+
* The two endpoint handles of the selected connector, in stage coords.
|
|
12338
|
+
*
|
|
12339
|
+
* Angular could DRAW a connector but never bind one: nothing in this binding
|
|
12340
|
+
* ever wrote `a:stCxn` / `a:endCxn`, so `connector-reroute` only ever fired
|
|
12341
|
+
* for connectors that arrived already bound from a `.pptx`.
|
|
12342
|
+
*/
|
|
12343
|
+
readonly connectorEndpoints: _angular_core.Signal<{
|
|
12344
|
+
left: number;
|
|
12345
|
+
top: number;
|
|
12346
|
+
size: number;
|
|
12347
|
+
kind: ConnectorEndpointKind;
|
|
12348
|
+
x: number;
|
|
12349
|
+
y: number;
|
|
12350
|
+
attached: boolean;
|
|
12351
|
+
}[]>;
|
|
12352
|
+
/** Candidate connection sites, resolved only while an end is in flight. */
|
|
12353
|
+
readonly connectorSiteCandidates: _angular_core.Signal<{
|
|
12354
|
+
key: string;
|
|
12355
|
+
left: number;
|
|
12356
|
+
top: number;
|
|
12357
|
+
size: number;
|
|
12358
|
+
snapped: boolean;
|
|
12359
|
+
}[]>;
|
|
12360
|
+
/** Begin dragging one end of the selected connector. */
|
|
12361
|
+
onConnectorEndpointPointerDown(event: PointerEvent, kind: ConnectorEndpointKind): void;
|
|
12362
|
+
/** Pointer position in SLIDE px (the stage carries the scale as a transform). */
|
|
12363
|
+
private stagePoint;
|
|
11206
12364
|
/**
|
|
11207
12365
|
* Resolve the id of the interactive element under a pointer target, or null.
|
|
11208
12366
|
* See {@link resolveInteractiveElementId}.
|
|
@@ -11227,6 +12385,12 @@ declare class SlideCanvasComponent implements SlideContext {
|
|
|
11227
12385
|
height: number;
|
|
11228
12386
|
text: string;
|
|
11229
12387
|
} | null>;
|
|
12388
|
+
/**
|
|
12389
|
+
* May inline text editing begin on this element? Honours the authored
|
|
12390
|
+
* `a:spLocks/@noTextEdit`, which Angular ignored entirely while the other four
|
|
12391
|
+
* bindings enforced it: a locked caption opened an editable textarea here.
|
|
12392
|
+
*/
|
|
12393
|
+
private canTextEdit;
|
|
11230
12394
|
onDblClick(event: MouseEvent): void;
|
|
11231
12395
|
onEditorKeydown(event: KeyboardEvent): void;
|
|
11232
12396
|
/**
|
|
@@ -11249,6 +12413,23 @@ declare class SlideCanvasComponent implements SlideContext {
|
|
|
11249
12413
|
onContextMenu(event: MouseEvent): void;
|
|
11250
12414
|
onHandlePointerDown(event: PointerEvent, handle: ResizeHandle): void;
|
|
11251
12415
|
onRotatePointerDown(event: PointerEvent): void;
|
|
12416
|
+
/**
|
|
12417
|
+
* Begin a shape-adjustment gesture on the amber diamond. Captures the shared
|
|
12418
|
+
* {@link ShapeAdjustmentDragState} so every subsequent pointer move resolves
|
|
12419
|
+
* through `getDraggedShapeAdjustmentValue` rather than the resize pipeline
|
|
12420
|
+
* this handle used to be wired to.
|
|
12421
|
+
*/
|
|
12422
|
+
onAdjustPointerDown(event: PointerEvent, handle: AdjustHandleBox): void;
|
|
12423
|
+
/**
|
|
12424
|
+
* Keyboard resize from a focused handle.
|
|
12425
|
+
*
|
|
12426
|
+
* The step comes from the shared `editorNudgeDelta`, the same function the
|
|
12427
|
+
* arrow keys nudge with, because a hand-rolled copy of it here is how the two
|
|
12428
|
+
* gestures end up disagreeing: this one carried its own `shiftKey ? 10 : 1`
|
|
12429
|
+
* literal, so a change to the shared step (which has already been wrong once,
|
|
12430
|
+
* at 2/20 in two bindings) would have moved the nudge and left the keyboard
|
|
12431
|
+
* resize behind.
|
|
12432
|
+
*/
|
|
11252
12433
|
onResizeHandleKeydown(event: KeyboardEvent, handle: ResizeHandle): void;
|
|
11253
12434
|
onRotateHandleKeydown(event: KeyboardEvent): void;
|
|
11254
12435
|
onPointerMove(event: PointerEvent): void;
|
|
@@ -11301,7 +12482,7 @@ declare class SlideCanvasComponent implements SlideContext {
|
|
|
11301
12482
|
} | null>;
|
|
11302
12483
|
readonly stageStyle: _angular_core.Signal<StyleMap>;
|
|
11303
12484
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideCanvasComponent, never>;
|
|
11304
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideCanvasComponent, "pptx-slide-canvas", never, { "slide": { "alias": "slide"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "rulerUnit": { "alias": "rulerUnit"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "guideCommand": { "alias": "guideCommand"; "required": false; "isSignal": true; }; "spellCheck": { "alias": "spellCheck"; "required": false; "isSignal": true; }; "snapToGuides": { "alias": "snapToGuides"; "required": false; "isSignal": true; }; "autoFit": { "alias": "autoFit"; "required": false; "isSignal": true; }; "transparentBackground": { "alias": "transparentBackground"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "editingId": { "alias": "editingId"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "aiHighlights": { "alias": "aiHighlights"; "required": false; "isSignal": true; }; "aiActive": { "alias": "aiActive"; "required": false; "isSignal": true; }; "aiActiveSlideIndex": { "alias": "aiActiveSlideIndex"; "required": false; "isSignal": true; }; "aiChangeBatch": { "alias": "aiChangeBatch"; "required": false; "isSignal": true; }; "aiPickMode": { "alias": "aiPickMode"; "required": false; "isSignal": true; }; "drawTool": { "alias": "drawTool"; "required": false; "isSignal": true; }; "drawColor": { "alias": "drawColor"; "required": false; "isSignal": true; }; "drawWidth": { "alias": "drawWidth"; "required": false; "isSignal": true; }; }, { "elementSelect": "elementSelect"; "backgroundClick": "backgroundClick"; "transformStart": "transformStart"; "transformUpdate": "transformUpdate"; "contextMenu": "contextMenu"; "textEditStart": "textEditStart"; "textCommit": "textCommit"; "textInput": "textInput"; "textCancel": "textCancel"; "textFormat": "textFormat"; "rotateUpdate": "rotateUpdate"; "marqueeSelect": "marqueeSelect"; "inkStrokeComplete": "inkStrokeComplete"; "eraserHit": "eraserHit"; "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, ["*"], true, never>;
|
|
12485
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideCanvasComponent, "pptx-slide-canvas", never, { "slide": { "alias": "slide"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "rulerUnit": { "alias": "rulerUnit"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToShape": { "alias": "snapToShape"; "required": false; "isSignal": true; }; "guideCommand": { "alias": "guideCommand"; "required": false; "isSignal": true; }; "spellCheck": { "alias": "spellCheck"; "required": false; "isSignal": true; }; "snapToGuides": { "alias": "snapToGuides"; "required": false; "isSignal": true; }; "autoFit": { "alias": "autoFit"; "required": false; "isSignal": true; }; "transparentBackground": { "alias": "transparentBackground"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "exposeElementIds": { "alias": "exposeElementIds"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "editingId": { "alias": "editingId"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "aiHighlights": { "alias": "aiHighlights"; "required": false; "isSignal": true; }; "aiActive": { "alias": "aiActive"; "required": false; "isSignal": true; }; "aiActiveSlideIndex": { "alias": "aiActiveSlideIndex"; "required": false; "isSignal": true; }; "aiChangeBatch": { "alias": "aiChangeBatch"; "required": false; "isSignal": true; }; "aiPickMode": { "alias": "aiPickMode"; "required": false; "isSignal": true; }; "drawTool": { "alias": "drawTool"; "required": false; "isSignal": true; }; "drawColor": { "alias": "drawColor"; "required": false; "isSignal": true; }; "drawWidth": { "alias": "drawWidth"; "required": false; "isSignal": true; }; }, { "elementSelect": "elementSelect"; "backgroundClick": "backgroundClick"; "transformStart": "transformStart"; "transformUpdate": "transformUpdate"; "transformEnd": "transformEnd"; "adjustUpdate": "adjustUpdate"; "connectorEndpointUpdate": "connectorEndpointUpdate"; "contextMenu": "contextMenu"; "textEditStart": "textEditStart"; "textCommit": "textCommit"; "textInput": "textInput"; "textCancel": "textCancel"; "textFormat": "textFormat"; "rotateUpdate": "rotateUpdate"; "marqueeSelect": "marqueeSelect"; "inkStrokeComplete": "inkStrokeComplete"; "eraserHit": "eraserHit"; "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, ["*"], true, never>;
|
|
11305
12486
|
}
|
|
11306
12487
|
|
|
11307
12488
|
/**
|
|
@@ -11319,6 +12500,77 @@ interface SoftEdgeFilterDef {
|
|
|
11319
12500
|
radius: number;
|
|
11320
12501
|
}
|
|
11321
12502
|
|
|
12503
|
+
/**
|
|
12504
|
+
* Angular's paragraph view model, built from the SHARED `buildParagraphs`.
|
|
12505
|
+
*
|
|
12506
|
+
* This module replaces the ~190-line hand-ported paragraph builder that used to
|
|
12507
|
+
* live inside `element-renderer.component.ts` (self-documented as "hand-ported
|
|
12508
|
+
* from `buildParagraphs`"). That copy had already drifted: it applied a
|
|
12509
|
+
* paragraph's bullet unconditionally, with none of shared's "suppress the
|
|
12510
|
+
* bullet on a paragraph with no visible text" rule, so a whitespace-only or
|
|
12511
|
+
* marker-only paragraph painted a stray bullet here and nothing elsewhere.
|
|
12512
|
+
*
|
|
12513
|
+
* It also replaces the segment walk that used to follow the shared call. Runs
|
|
12514
|
+
* carry their own `hyperlink` and `equation` now (see `text-run-meta`), so the
|
|
12515
|
+
* walk that re-attached those two facts by matching each run's characters back
|
|
12516
|
+
* onto the segment it came from is gone, and Vue, Svelte and Vanilla render
|
|
12517
|
+
* both from the same model instead of dropping them.
|
|
12518
|
+
*
|
|
12519
|
+
* What is left here is a pure rename: shared's neutral field names onto the
|
|
12520
|
+
* ones this binding's template already binds.
|
|
12521
|
+
*/
|
|
12522
|
+
/** A single rendered run inside an Angular paragraph. */
|
|
12523
|
+
interface TextRun {
|
|
12524
|
+
text: string;
|
|
12525
|
+
style: StyleMap;
|
|
12526
|
+
/** Safe `href` when this run carries a renderable hyperlink. */
|
|
12527
|
+
href?: string;
|
|
12528
|
+
/** Hyperlink tooltip / title text. */
|
|
12529
|
+
tooltip?: string;
|
|
12530
|
+
/** Parsed OMML for an inline equation run (rendered as MathML). */
|
|
12531
|
+
equationXml?: Record<string, unknown>;
|
|
12532
|
+
/** Optional equation number for numbered equations. */
|
|
12533
|
+
equationNumber?: string;
|
|
12534
|
+
/** `a:ruby` phonetic guide (furigana / pinyin) rendered above this run. */
|
|
12535
|
+
rubyText?: string;
|
|
12536
|
+
/** `[ngStyle]` map for the `<rt>` annotation (size / family / alignment). */
|
|
12537
|
+
rubyStyle?: StyleMap;
|
|
12538
|
+
}
|
|
12539
|
+
/** A rendered paragraph: runs plus bullet + indent + spacing metadata. */
|
|
12540
|
+
interface Paragraph {
|
|
12541
|
+
runs: TextRun[];
|
|
12542
|
+
/** Bullet / number marker text, when this paragraph is a list item. */
|
|
12543
|
+
bulletMarker?: string;
|
|
12544
|
+
/** Resolved picture marker, or metadata for its accessible glyph fallback. */
|
|
12545
|
+
bulletPicture?: PictureBulletMarker;
|
|
12546
|
+
/** `[ngStyle]` map for the bullet marker (colour / font / hang width). */
|
|
12547
|
+
bulletStyle: StyleMap;
|
|
12548
|
+
/** Left indent in px (hanging-indent layout). */
|
|
12549
|
+
indentPx: number;
|
|
12550
|
+
/** `text-indent` in px (first-line / hanging indent), when authored. */
|
|
12551
|
+
textIndentPx?: number;
|
|
12552
|
+
/**
|
|
12553
|
+
* True when the paragraph has no runs and no bullet: an authored blank line
|
|
12554
|
+
* (`<a:p><a:endParaRPr/></a:p>`), which PowerPoint gives a full line box.
|
|
12555
|
+
* The template renders a `<br>` for it so the gap survives (issue #131).
|
|
12556
|
+
*/
|
|
12557
|
+
isEmpty?: boolean;
|
|
12558
|
+
/** Per-paragraph `line-height` from this paragraph's own `a:lnSpc`. */
|
|
12559
|
+
lineHeight?: number | string;
|
|
12560
|
+
/** `margin-top` in px from `a:spcBef` (space before), when overridden. */
|
|
12561
|
+
spaceBeforePx?: number;
|
|
12562
|
+
/** `margin-bottom` in px from `a:spcAft` (space after), when overridden. */
|
|
12563
|
+
spaceAfterPx?: number;
|
|
12564
|
+
/** `font-size` in px re-basing the paragraph's CSS line boxes onto its runs. */
|
|
12565
|
+
strutFontSizePx?: number;
|
|
12566
|
+
/**
|
|
12567
|
+
* This paragraph's own `text-align` / BiDi `direction` / kinsoku line-break
|
|
12568
|
+
* rules, when it overrides the body's. Bound with `[ngStyle]` under the
|
|
12569
|
+
* explicit geometry bindings, which win.
|
|
12570
|
+
*/
|
|
12571
|
+
paragraphStyle?: StyleMap;
|
|
12572
|
+
}
|
|
12573
|
+
|
|
11322
12574
|
/**
|
|
11323
12575
|
* Text-warp (WordArt) descriptor resolver for the Angular viewer.
|
|
11324
12576
|
*
|
|
@@ -11432,53 +12684,6 @@ type TextWarpDef = TextWarpPathDef | TextWarpCssDef;
|
|
|
11432
12684
|
*/
|
|
11433
12685
|
declare function getTextWarp(element: PptxElement, fieldContext?: FieldSubstitutionContext): TextWarpDef | undefined;
|
|
11434
12686
|
|
|
11435
|
-
interface TextRun {
|
|
11436
|
-
text: string;
|
|
11437
|
-
style: StyleMap;
|
|
11438
|
-
/** Safe `href` when this run carries a renderable hyperlink. */
|
|
11439
|
-
href?: string;
|
|
11440
|
-
/** Hyperlink tooltip / title text. */
|
|
11441
|
-
tooltip?: string;
|
|
11442
|
-
/** Parsed OMML for an inline equation run (rendered as MathML). */
|
|
11443
|
-
equationXml?: Record<string, unknown>;
|
|
11444
|
-
/** Optional equation number for numbered equations. */
|
|
11445
|
-
equationNumber?: string;
|
|
11446
|
-
}
|
|
11447
|
-
interface Paragraph {
|
|
11448
|
-
runs: TextRun[];
|
|
11449
|
-
/** Bullet / number marker text, when this paragraph is a list item. */
|
|
11450
|
-
bulletMarker?: string;
|
|
11451
|
-
/** Resolved picture marker, or metadata for its accessible glyph fallback. */
|
|
11452
|
-
bulletPicture?: PictureBulletMarker;
|
|
11453
|
-
/** `[ngStyle]` map for the bullet marker (colour / font). */
|
|
11454
|
-
bulletStyle: StyleMap;
|
|
11455
|
-
/** Left indent in px derived from the paragraph outline level. */
|
|
11456
|
-
indentPx: number;
|
|
11457
|
-
/** `text-indent` in px (first-line / hanging indent), when authored. */
|
|
11458
|
-
textIndentPx?: number;
|
|
11459
|
-
/**
|
|
11460
|
-
* True when the paragraph has no runs and no bullet: an authored blank line
|
|
11461
|
-
* (`<a:p><a:endParaRPr/></a:p>`), which PowerPoint gives a full line box.
|
|
11462
|
-
* The template renders a `<br>` for it so the gap survives (issue #131).
|
|
11463
|
-
*/
|
|
11464
|
-
isEmpty?: boolean;
|
|
11465
|
-
/**
|
|
11466
|
-
* Per-paragraph `line-height` from this paragraph's own `a:lnSpc`: a unitless
|
|
11467
|
-
* multiplier (`a:spcPct`) or a `"<n>pt"` string (`a:spcPts`). Undefined when
|
|
11468
|
-
* the paragraph does not override the body-level line-height.
|
|
11469
|
-
*/
|
|
11470
|
-
lineHeight?: number | string;
|
|
11471
|
-
/** `margin-top` in px from `a:spcBef` (space before), when overridden. */
|
|
11472
|
-
spaceBeforePx?: number;
|
|
11473
|
-
/** `margin-bottom` in px from `a:spcAft` (space after), when overridden. */
|
|
11474
|
-
spaceAfterPx?: number;
|
|
11475
|
-
/**
|
|
11476
|
-
* `font-size` in px set on the paragraph so its CSS line boxes are built
|
|
11477
|
-
* from its own runs rather than the text body default. Mirrors the shared
|
|
11478
|
-
* `RenderParagraph.strutFontSizePx`; see `resolveParagraphStrutFontSize`.
|
|
11479
|
-
*/
|
|
11480
|
-
strutFontSizePx?: number;
|
|
11481
|
-
}
|
|
11482
12687
|
/**
|
|
11483
12688
|
* ElementRendererComponent: Angular port of the React `ElementRenderer.tsx`
|
|
11484
12689
|
* and the Vue `ElementRenderer.vue`.
|
|
@@ -11546,6 +12751,27 @@ declare class ElementRendererComponent {
|
|
|
11546
12751
|
* element contract", not "editable right now"), matching the other bindings.
|
|
11547
12752
|
*/
|
|
11548
12753
|
readonly marked: _angular_core.InputSignal<boolean>;
|
|
12754
|
+
/**
|
|
12755
|
+
* When true (default), the rendered node carries `data-element-id`.
|
|
12756
|
+
*
|
|
12757
|
+
* Turned OFF by the miniature surfaces that paint EVERY slide at once
|
|
12758
|
+
* (thumbnail rail, mobile slide sheet, slide sorter, presenter navigator,
|
|
12759
|
+
* layout gallery, diff strip). Those put one node per element per slide into
|
|
12760
|
+
* the document, so the id of an element on slide 1 was addressable while
|
|
12761
|
+
* slide 3 was on screen, and every framework-neutral `[data-element-id]`
|
|
12762
|
+
* query resolved the wrong slide. React solved the same hazard by giving
|
|
12763
|
+
* thumbnails a separate `StaticElementRenderer` that stamps no id at all
|
|
12764
|
+
* ("exposing their ids there would put two nodes with the same id in the
|
|
12765
|
+
* document"); this input is Angular's equivalent, since it reuses the live
|
|
12766
|
+
* renderer for its miniatures.
|
|
12767
|
+
*
|
|
12768
|
+
* Distinct from {@link interactive}: the presentation stage is not
|
|
12769
|
+
* interactive but MUST keep its ids, because the morph engine's generated
|
|
12770
|
+
* keyframe CSS selects on them.
|
|
12771
|
+
*/
|
|
12772
|
+
readonly exposeElementId: _angular_core.InputSignal<boolean>;
|
|
12773
|
+
/** `data-element-id` for this element, or null on a miniature surface. */
|
|
12774
|
+
readonly elementIdAttr: _angular_core.Signal<string | null>;
|
|
11549
12775
|
/** Whether this element's root carries `data-pptx-element="true"`. */
|
|
11550
12776
|
readonly elementMarked: _angular_core.Signal<boolean>;
|
|
11551
12777
|
/**
|
|
@@ -11685,10 +12911,15 @@ declare class ElementRendererComponent {
|
|
|
11685
12911
|
readonly warpedTextStyle: _angular_core.Signal<StyleMap>;
|
|
11686
12912
|
readonly children: _angular_core.Signal<PptxElement[]>;
|
|
11687
12913
|
/**
|
|
11688
|
-
*
|
|
11689
|
-
* `parentGroupFill
|
|
11690
|
-
*
|
|
11691
|
-
*
|
|
12914
|
+
* The fill handed to this group's `a:grpFill` children as their
|
|
12915
|
+
* `parentGroupFill`; undefined for non-group elements.
|
|
12916
|
+
*
|
|
12917
|
+
* The shared helper, not a hand-inlined copy: the inlined one returned this
|
|
12918
|
+
* group's own fill only, and `a:grpFill` resolves against the nearest
|
|
12919
|
+
* ANCESTOR that has a fill, so a shape inside a fill-less nested group came
|
|
12920
|
+
* out transparent. (The old copy justified itself with "shared is only
|
|
12921
|
+
* vendored at build time", but this component already imports a dozen shared
|
|
12922
|
+
* symbols from the vendored barrel.)
|
|
11692
12923
|
*/
|
|
11693
12924
|
readonly childParentGroupFill: _angular_core.Signal<ShapeStyle | undefined>;
|
|
11694
12925
|
readonly isShapeLike: _angular_core.Signal<boolean>;
|
|
@@ -11697,7 +12928,7 @@ declare class ElementRendererComponent {
|
|
|
11697
12928
|
readonly hasText: _angular_core.Signal<boolean>;
|
|
11698
12929
|
readonly placeholderLabel: _angular_core.Signal<any>;
|
|
11699
12930
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementRendererComponent, never>;
|
|
11700
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementRendererComponent, "pptx-element-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "obstacles": { "alias": "obstacles"; "required": false; "isSignal": true; }; "canvasWidth": { "alias": "canvasWidth"; "required": false; "isSignal": true; }; "canvasHeight": { "alias": "canvasHeight"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "marked": { "alias": "marked"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "fieldContext": { "alias": "fieldContext"; "required": false; "isSignal": true; }; "slideElements": { "alias": "slideElements"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "parentGroupFill": { "alias": "parentGroupFill"; "required": false; "isSignal": true; }; }, { "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
|
|
12931
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementRendererComponent, "pptx-element-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "obstacles": { "alias": "obstacles"; "required": false; "isSignal": true; }; "canvasWidth": { "alias": "canvasWidth"; "required": false; "isSignal": true; }; "canvasHeight": { "alias": "canvasHeight"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "marked": { "alias": "marked"; "required": false; "isSignal": true; }; "exposeElementId": { "alias": "exposeElementId"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "fieldContext": { "alias": "fieldContext"; "required": false; "isSignal": true; }; "slideElements": { "alias": "slideElements"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "parentGroupFill": { "alias": "parentGroupFill"; "required": false; "isSignal": true; }; }, { "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
|
|
11701
12932
|
}
|
|
11702
12933
|
|
|
11703
12934
|
/**
|
|
@@ -11734,6 +12965,15 @@ declare class ConnectorRendererComponent {
|
|
|
11734
12965
|
readonly interactive: _angular_core.InputSignal<boolean>;
|
|
11735
12966
|
/** Keep the data-pptx-element marker on interaction-locked template elements. */
|
|
11736
12967
|
readonly marked: _angular_core.InputSignal<boolean>;
|
|
12968
|
+
/**
|
|
12969
|
+
* When true (default), the rendered node carries `data-element-id`. The
|
|
12970
|
+
* miniature surfaces that paint every slide at once turn it off so one
|
|
12971
|
+
* element id resolves to exactly one node in the document; see
|
|
12972
|
+
* `ElementRendererComponent.exposeElementId`.
|
|
12973
|
+
*/
|
|
12974
|
+
readonly exposeElementId: _angular_core.InputSignal<boolean>;
|
|
12975
|
+
/** `data-element-id` for this element, or null on a miniature surface. */
|
|
12976
|
+
readonly elementIdAttr: _angular_core.Signal<string | null>;
|
|
11737
12977
|
/**
|
|
11738
12978
|
* Native-animation playback state. When an active `p:animClr` colour animation
|
|
11739
12979
|
* targets the stroke (`animatesStroke`), the SVG stroke + arrowheads paint
|
|
@@ -11767,7 +13007,7 @@ declare class ConnectorRendererComponent {
|
|
|
11767
13007
|
readonly connectorSegments: _angular_core.Signal<TextSegment[] | undefined>;
|
|
11768
13008
|
readonly connectorTextStyle: _angular_core.Signal<TextStyle | undefined>;
|
|
11769
13009
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConnectorRendererComponent, never>;
|
|
11770
|
-
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; }; "marked": { "alias": "marked"; "required": false; "isSignal": true; }; "animationState": { "alias": "animationState"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
13010
|
+
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; }; "marked": { "alias": "marked"; "required": false; "isSignal": true; }; "exposeElementId": { "alias": "exposeElementId"; "required": false; "isSignal": true; }; "animationState": { "alias": "animationState"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
11771
13011
|
}
|
|
11772
13012
|
/** One parallel stroke of a (possibly compound) connector line. */
|
|
11773
13013
|
interface ConnectorStrand {
|
|
@@ -11998,7 +13238,7 @@ declare function nodeEditBox(node: RenderedNode): NodeEditBox;
|
|
|
11998
13238
|
* text). When omitted, falls back to the rendered text.
|
|
11999
13239
|
* @returns The edit state, or `null` when the node id cannot be resolved.
|
|
12000
13240
|
*/
|
|
12001
|
-
declare function beginNodeEdit(node: RenderedNode, elementId: string, rawText?: string): InlineEditState | null;
|
|
13241
|
+
declare function beginNodeEdit(node: RenderedNode, elementId: string, rawText?: string, resolvedNodeId?: string | null): InlineEditState | null;
|
|
12002
13242
|
/**
|
|
12003
13243
|
* Commit an edited node's text into the SmartArt data model.
|
|
12004
13244
|
*
|
|
@@ -12036,19 +13276,28 @@ declare function findSlideIndexByElementId(slides: readonly PptxSlide[], id: str
|
|
|
12036
13276
|
*/
|
|
12037
13277
|
declare function findOwningSlideIndex(slides: readonly PptxSlide[], id: string, templateSlideId: string | null | undefined): number;
|
|
12038
13278
|
|
|
12039
|
-
/**
|
|
12040
|
-
* Pure narrowing and text-layout helpers for SmartArtRendererComponent.
|
|
12041
|
-
* Extracted to keep the component file within the per-file line budget.
|
|
12042
|
-
* Re-imported as class-property function references so Angular template
|
|
12043
|
-
* type-checking continues to work without changes to the template.
|
|
12044
|
-
*/
|
|
12045
|
-
|
|
12046
13279
|
/** Narrow a RenderedNode to a circle, or undefined. */
|
|
12047
13280
|
declare function narrowToCircle(node: RenderedNode): RenderedCircleNode | undefined;
|
|
12048
13281
|
/** Narrow a RenderedNode to a polygon, or undefined. */
|
|
12049
13282
|
declare function narrowToPolygon(node: RenderedNode): RenderedPolygonNode | undefined;
|
|
12050
13283
|
/** Narrow a RenderedNode to a rect, or undefined. */
|
|
12051
13284
|
declare function narrowToRect(node: RenderedNode): RenderedRectNode | undefined;
|
|
13285
|
+
/**
|
|
13286
|
+
* Resolved label descriptors for a layout, index-aligned with `layout.nodes`.
|
|
13287
|
+
*
|
|
13288
|
+
* The template used to hardcode `fill="white"` and anchor circle labels on
|
|
13289
|
+
* `cx`/`cy`, ignoring the descriptor's optional `fontColor` / `fontWeight` /
|
|
13290
|
+
* `fontStyle` / `textX` / `textY` / `textAnchor` / `textBaseline`. The shared
|
|
13291
|
+
* `smartArtNodeLabel` decides all of it; this only maps the array so the
|
|
13292
|
+
* component can expose it as a single `computed()`.
|
|
13293
|
+
*/
|
|
13294
|
+
declare function layoutNodeLabels(layout: SmartArtLayoutResult): SmartArtNodeLabel[];
|
|
13295
|
+
/**
|
|
13296
|
+
* Resolved connector paint for a layout, index-aligned with
|
|
13297
|
+
* `layout.connectors`. The template used to hardcode the grey default, which
|
|
13298
|
+
* flattened the per-node colours target leaders and timeline stems carry.
|
|
13299
|
+
*/
|
|
13300
|
+
declare function layoutConnectorPaints(layout: SmartArtLayoutResult): SmartArtConnectorPaint[];
|
|
12052
13301
|
|
|
12053
13302
|
/**
|
|
12054
13303
|
* SmartArtRendererComponent: Angular SmartArt renderer.
|
|
@@ -12149,6 +13398,10 @@ declare class SmartArtRendererComponent {
|
|
|
12149
13398
|
readonly drawingShapeNodeIds: _angular_core.Signal<(string | undefined)[]>;
|
|
12150
13399
|
readonly layout: _angular_core.Signal<SmartArtLayoutResult>;
|
|
12151
13400
|
readonly hasLayout: _angular_core.Signal<boolean>;
|
|
13401
|
+
/** Label descriptors, index-aligned with `layout().nodes`. */
|
|
13402
|
+
readonly layoutLabels: _angular_core.Signal<SmartArtNodeLabel[]>;
|
|
13403
|
+
/** Connector paint, index-aligned with `layout().connectors`. */
|
|
13404
|
+
readonly layoutConnectors: _angular_core.Signal<SmartArtConnectorPaint[]>;
|
|
12152
13405
|
/**
|
|
12153
13406
|
* Screen-reader metadata for the whole diagram, derived by the shared
|
|
12154
13407
|
* `buildSmartArtA11y`. The container SVG gets `role="img"` + this `label`;
|
|
@@ -12158,13 +13411,25 @@ declare class SmartArtRendererComponent {
|
|
|
12158
13411
|
/** Map of node id -> accessibility label (for per-node `<title>` lookup). */
|
|
12159
13412
|
private readonly a11yLabelById;
|
|
12160
13413
|
/**
|
|
12161
|
-
*
|
|
12162
|
-
*
|
|
12163
|
-
*
|
|
13414
|
+
* Source node ids in fallback render order, index-aligned with
|
|
13415
|
+
* `layout().nodes`. The layout engine walks the node tree depth-first, so
|
|
13416
|
+
* flattening it is the mapping every binding uses.
|
|
13417
|
+
*
|
|
13418
|
+
* This component used to parse the id back out of the rendered node's `key`
|
|
13419
|
+
* instead, which broke on any family whose key carries an extra segment: the
|
|
13420
|
+
* gear legend's `<id>-gear-extra-<nodeId>-<i>` resolved to `extra-<nodeId>`,
|
|
13421
|
+
* so its `data-smartart-node-id` did not match any model node and an inline
|
|
13422
|
+
* edit on a legend row committed nowhere.
|
|
13423
|
+
*/
|
|
13424
|
+
readonly layoutNodeIds: _angular_core.Signal<(string | undefined)[]>;
|
|
13425
|
+
/**
|
|
13426
|
+
* Data-model node id for the rendered node at `index` (or `null`). Exposed
|
|
13427
|
+
* as a method so the template can use it: Angular AOT templates can only
|
|
13428
|
+
* call component members, not imported functions.
|
|
12164
13429
|
*/
|
|
12165
|
-
|
|
12166
|
-
/** Resolve the accessibility label for
|
|
12167
|
-
nodeAriaLabel(
|
|
13430
|
+
nodeIdAt(index: number): string | null;
|
|
13431
|
+
/** Resolve the accessibility label for the rendered node at `index`. */
|
|
13432
|
+
nodeAriaLabel(index: number): string | null;
|
|
12168
13433
|
/**
|
|
12169
13434
|
* Polite live-region message announcing the most recent node-text commit.
|
|
12170
13435
|
* Empty between commits so assistive tech only speaks on change.
|
|
@@ -12176,11 +13441,10 @@ declare class SmartArtRendererComponent {
|
|
|
12176
13441
|
protected readonly asCircle: typeof narrowToCircle;
|
|
12177
13442
|
protected readonly asPolygon: typeof narrowToPolygon;
|
|
12178
13443
|
protected readonly asRect: typeof narrowToRect;
|
|
12179
|
-
protected readonly textLines: typeof centeredSvgTextLines;
|
|
12180
13444
|
/** Double-click a node enters inline edit mode (when editable). */
|
|
12181
|
-
onNodeDblClick(event: Event, node: RenderedNode): void;
|
|
13445
|
+
onNodeDblClick(event: Event, node: RenderedNode, index: number): void;
|
|
12182
13446
|
/** Enter / F2 on a focused node enters inline edit mode (when editable). */
|
|
12183
|
-
onNodeKeydown(event: KeyboardEvent, node: RenderedNode): void;
|
|
13447
|
+
onNodeKeydown(event: KeyboardEvent, node: RenderedNode, index: number): void;
|
|
12184
13448
|
/** Commit the current edit (called on blur). */
|
|
12185
13449
|
commitEdit(event: Event): void;
|
|
12186
13450
|
/** Enter commits (Shift+Enter inserts a newline); Escape cancels. */
|
|
@@ -12275,13 +13539,22 @@ declare class InkRendererComponent {
|
|
|
12275
13539
|
* hit-testing slide elements by the marker skips it.
|
|
12276
13540
|
*/
|
|
12277
13541
|
readonly markElement: _angular_core.InputSignal<boolean>;
|
|
13542
|
+
/**
|
|
13543
|
+
* When true (default), the rendered node carries `data-element-id`. The
|
|
13544
|
+
* miniature surfaces that paint every slide at once turn it off so one
|
|
13545
|
+
* element id resolves to exactly one node in the document; see
|
|
13546
|
+
* `ElementRendererComponent.exposeElementId`.
|
|
13547
|
+
*/
|
|
13548
|
+
readonly exposeElementId: _angular_core.InputSignal<boolean>;
|
|
13549
|
+
/** `data-element-id` for this element, or null on a miniature surface. */
|
|
13550
|
+
readonly elementIdAttr: _angular_core.Signal<string | null>;
|
|
12278
13551
|
readonly replayKeyframes = "@keyframes pptx-ink-replay {\n from { stroke-dashoffset: var(--ink-path-length); }\n to { stroke-dashoffset: 0; }\n}";
|
|
12279
13552
|
readonly containerStyle: _angular_core.Signal<StyleMap>;
|
|
12280
13553
|
readonly strokes: _angular_core.Signal<InkStroke[]>;
|
|
12281
13554
|
readonly replayStyles: _angular_core.Signal<InkStrokeAnimationStyle[]>;
|
|
12282
13555
|
readonly viewBox: _angular_core.Signal<string>;
|
|
12283
13556
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<InkRendererComponent, never>;
|
|
12284
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<InkRendererComponent, "pptx-ink-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "replay": { "alias": "replay"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
13557
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<InkRendererComponent, "pptx-ink-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "replay": { "alias": "replay"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; "exposeElementId": { "alias": "exposeElementId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
12285
13558
|
}
|
|
12286
13559
|
|
|
12287
13560
|
/**
|
|
@@ -12487,6 +13760,15 @@ declare class Model3DRendererComponent implements OnDestroy {
|
|
|
12487
13760
|
* controls and defaults to `true` even on a thumbnail.
|
|
12488
13761
|
*/
|
|
12489
13762
|
readonly markElement: _angular_core.InputSignal<boolean>;
|
|
13763
|
+
/**
|
|
13764
|
+
* When true (default), the rendered node carries `data-element-id`. The
|
|
13765
|
+
* miniature surfaces that paint every slide at once turn it off so one
|
|
13766
|
+
* element id resolves to exactly one node in the document; see
|
|
13767
|
+
* `ElementRendererComponent.exposeElementId`.
|
|
13768
|
+
*/
|
|
13769
|
+
readonly exposeElementId: _angular_core.InputSignal<boolean>;
|
|
13770
|
+
/** `data-element-id` for this element, or null on a miniature surface. */
|
|
13771
|
+
readonly elementIdAttr: _angular_core.Signal<string | null>;
|
|
12490
13772
|
private readonly sceneRef;
|
|
12491
13773
|
readonly containerStyle: _angular_core.Signal<StyleMap>;
|
|
12492
13774
|
readonly vm: _angular_core.Signal<Model3DViewModel>;
|
|
@@ -12508,7 +13790,7 @@ declare class Model3DRendererComponent implements OnDestroy {
|
|
|
12508
13790
|
private teardownHandle;
|
|
12509
13791
|
ngOnDestroy(): void;
|
|
12510
13792
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Model3DRendererComponent, never>;
|
|
12511
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Model3DRendererComponent, "pptx-model3d-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
13793
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Model3DRendererComponent, "pptx-model3d-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "markElement": { "alias": "markElement"; "required": false; "isSignal": true; }; "exposeElementId": { "alias": "exposeElementId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
12512
13794
|
}
|
|
12513
13795
|
|
|
12514
13796
|
/** Resolves a `pptx.*` key, interpolating `{{...}}` params when given. */
|
|
@@ -12685,12 +13967,22 @@ declare class AnimationPlaybackService {
|
|
|
12685
13967
|
private showWithAnimation;
|
|
12686
13968
|
private frameRoot;
|
|
12687
13969
|
private onPlayActionSound;
|
|
13970
|
+
private applyStyles;
|
|
12688
13971
|
private readonly ctx;
|
|
12689
13972
|
constructor();
|
|
12690
13973
|
/** Scope media-command (`p:cmd`) target lookups to a stage root element. */
|
|
12691
13974
|
setFrameRoot(root: () => HTMLElement | null): void;
|
|
12692
13975
|
/** Register a host-provided action-sound player (embedded-sound resolution). */
|
|
12693
13976
|
setActionSoundHandler(handler: ((soundPath: string) => void) | undefined): void;
|
|
13977
|
+
/**
|
|
13978
|
+
* Register the DOM applier that stamps the element states onto the rendered
|
|
13979
|
+
* stage ({@link PresentationStageAnimator.applyAnimationStyles}). It is run
|
|
13980
|
+
* SYNCHRONOUSLY on every playback state change, so a click-advance starts its
|
|
13981
|
+
* entrance in the same task as the key press instead of waiting for Angular's
|
|
13982
|
+
* next change-detection + render pass. Pass an applier that no-ops while the
|
|
13983
|
+
* stage still shows another slide (`onlyWhenStaged`).
|
|
13984
|
+
*/
|
|
13985
|
+
setStyleApplier(apply: () => void): void;
|
|
12694
13986
|
private animationsEnabled;
|
|
12695
13987
|
/** Clear all pending timers + the in-flight staged-build RAF. */
|
|
12696
13988
|
clearTimers(): void;
|
|
@@ -12860,6 +14152,119 @@ declare class PresentationAnnotationsService {
|
|
|
12860
14152
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<PresentationAnnotationsService>;
|
|
12861
14153
|
}
|
|
12862
14154
|
|
|
14155
|
+
/**
|
|
14156
|
+
* presentation-overlay-helpers.ts
|
|
14157
|
+
*
|
|
14158
|
+
* Pure functions used by PresentationOverlayComponent.
|
|
14159
|
+
* Exported separately so they can be unit-tested without TestBed.
|
|
14160
|
+
*/
|
|
14161
|
+
|
|
14162
|
+
/**
|
|
14163
|
+
* The running custom show, when one is active. Every navigation helper below
|
|
14164
|
+
* takes it and forwards it to `resolveShowSlideIndexes`, because "which slide
|
|
14165
|
+
* comes next" is one rule (membership AND hidden slides), not two: Angular used
|
|
14166
|
+
* to pre-filter the slide array to the show's membership and then ask the
|
|
14167
|
+
* shared rule about the filtered array, which is how a hidden slide inside a
|
|
14168
|
+
* custom show still got presented.
|
|
14169
|
+
*/
|
|
14170
|
+
type ActiveShow = ShowOrderCustomShow | null | undefined;
|
|
14171
|
+
/**
|
|
14172
|
+
* Whether a click/tap/swipe advance must be swallowed instead of moving to the
|
|
14173
|
+
* next slide. A click still steps the current slide's remaining animation
|
|
14174
|
+
* builds, so this only blocks once they are exhausted (`playbackComplete`) and
|
|
14175
|
+
* only when the slide's transition sets advanceOnClick to false. Keyboard and
|
|
14176
|
+
* the on-screen next/prev buttons never consult this.
|
|
14177
|
+
*/
|
|
14178
|
+
declare function shouldBlockClickAdvance(playbackComplete: boolean, slide: PptxSlide | undefined): boolean;
|
|
14179
|
+
/**
|
|
14180
|
+
* Delay in ms before the show steps to the next slide on its own, or
|
|
14181
|
+
* `undefined` when the current slide waits for input.
|
|
14182
|
+
*
|
|
14183
|
+
* The counterpart to {@link shouldBlockClickAdvance}: PowerPoint's
|
|
14184
|
+
* `p:transition/@advTm` ("Advance slide: After <n>"). A slide authored
|
|
14185
|
+
* `advClick="0" advTm="…"` is advanced ONLY by this timer, so honouring the
|
|
14186
|
+
* click gate without also arming the timer strands the show on that slide with
|
|
14187
|
+
* no visible response to any input. Nothing is scheduled once the end-of-show
|
|
14188
|
+
* screen is up, or when the show is set to advance manually.
|
|
14189
|
+
*/
|
|
14190
|
+
declare function resolveSlideAutoAdvanceMs(slide: PptxSlide | undefined, useTimings: boolean, endOfShow: boolean): number | undefined;
|
|
14191
|
+
/**
|
|
14192
|
+
* Attach the show's visibility pause: while the tab is hidden the shared
|
|
14193
|
+
* handler pauses the stage's playing media and the cross-slide persistent
|
|
14194
|
+
* audio, and the binding-provided callbacks cancel / re-arm the timed
|
|
14195
|
+
* auto-advance so the deck does not run on unseen. Returns the detach
|
|
14196
|
+
* function. Kept TestBed-free so the wiring can be unit-tested directly.
|
|
14197
|
+
*/
|
|
14198
|
+
declare function attachShowVisibilityPause(deps: {
|
|
14199
|
+
/** The overlay root containing the stage; only media inside it is paused. */
|
|
14200
|
+
root: ParentNode | undefined;
|
|
14201
|
+
/** Cancel the pending auto-advance timer (the tab was hidden). */
|
|
14202
|
+
cancelAutoAdvance: () => void;
|
|
14203
|
+
/** Re-arm the auto-advance timer for the current slide (tab visible again). */
|
|
14204
|
+
rearmAutoAdvance: () => void;
|
|
14205
|
+
}): () => void;
|
|
14206
|
+
/**
|
|
14207
|
+
* The show has ENDED (never a slide change): stop and remove all cross-slide
|
|
14208
|
+
* "play across slides" persistent audio. Called by the host's exit paths
|
|
14209
|
+
* (`closePresentation` / `exitPresenter`), not by the overlay's own destroy,
|
|
14210
|
+
* because swapping to the presenter console destroys the overlay while the
|
|
14211
|
+
* show, and its background audio, carry on.
|
|
14212
|
+
*/
|
|
14213
|
+
declare function endShowMediaCleanup(): void;
|
|
14214
|
+
/**
|
|
14215
|
+
* Clamp `index` to the valid range [0, count - 1].
|
|
14216
|
+
* Returns 0 when `count` is 0 to avoid -1 states.
|
|
14217
|
+
*/
|
|
14218
|
+
declare function clampIndex(index: number, count: number): number;
|
|
14219
|
+
/**
|
|
14220
|
+
* Return the next visible (non-hidden) slide index after `current`.
|
|
14221
|
+
* Wraps around to `current` if no subsequent visible slide exists.
|
|
14222
|
+
*
|
|
14223
|
+
* Thin adapter over the shared show-order rule: Angular used to own this logic
|
|
14224
|
+
* outright, which is exactly why the other four bindings presented hidden
|
|
14225
|
+
* slides. Kept as a named export because the overlay's tests and the navigator
|
|
14226
|
+
* read better in terms of "next visible slide" than raw index lists.
|
|
14227
|
+
*/
|
|
14228
|
+
declare function nextVisibleIndex(current: number, slides: readonly PptxSlide[], activeShow?: ActiveShow): number;
|
|
14229
|
+
/**
|
|
14230
|
+
* Return the previous visible (non-hidden) slide index before `current`.
|
|
14231
|
+
* Returns `current` when no earlier visible slide exists: PowerPoint never
|
|
14232
|
+
* wraps backward off the first slide.
|
|
14233
|
+
*/
|
|
14234
|
+
declare function prevVisibleIndex(current: number, slides: readonly PptxSlide[], activeShow?: ActiveShow): number;
|
|
14235
|
+
/**
|
|
14236
|
+
* Compute the zoom level that fits a canvas of `canvasW × canvasH` pixels
|
|
14237
|
+
* into a viewport of `vw × vh` pixels, preserving aspect ratio.
|
|
14238
|
+
*
|
|
14239
|
+
* Returns 1 as a safe fallback when any dimension is zero or negative.
|
|
14240
|
+
*/
|
|
14241
|
+
declare function fitZoom(canvasW: number, canvasH: number, vw: number, vh: number): number;
|
|
14242
|
+
/**
|
|
14243
|
+
* Whether a visible (non-hidden) slide exists strictly AFTER `current`.
|
|
14244
|
+
*
|
|
14245
|
+
* `nextVisibleIndex` wraps, which would make a show loop for ever. PowerPoint
|
|
14246
|
+
* only loops when "Loop continuously until Esc" is set; otherwise running past
|
|
14247
|
+
* the last slide ends the show. Callers use this to tell "there is a next
|
|
14248
|
+
* slide" from "we just wrapped".
|
|
14249
|
+
*/
|
|
14250
|
+
declare function hasVisibleSlideAfter(current: number, slides: readonly PptxSlide[], activeShow?: ActiveShow): boolean;
|
|
14251
|
+
/** The show's first visible slide (Home), or 0 for an empty deck. */
|
|
14252
|
+
declare function firstVisibleIndex(slides: readonly PptxSlide[], activeShow?: ActiveShow): number;
|
|
14253
|
+
/** The show's last visible slide (End), or 0 for an empty deck. */
|
|
14254
|
+
declare function lastVisibleIndex(slides: readonly PptxSlide[], activeShow?: ActiveShow): number;
|
|
14255
|
+
/**
|
|
14256
|
+
* Style record centring the scaled slide stage in the viewport.
|
|
14257
|
+
*
|
|
14258
|
+
* The offsets are computed numerically ((viewport - scaled size) / 2, exactly
|
|
14259
|
+
* how React's PresentationStage centres) rather than with the historical
|
|
14260
|
+
* `left/top: 50%` + `translate(-50%, -50%)`: a transform makes the stage a
|
|
14261
|
+
* stacking context, which trapped every z-index inside it (the ink annotation
|
|
14262
|
+
* overlay in particular) BELOW the sibling blackout sheet, so blackboard
|
|
14263
|
+
* strokes painted invisibly under the black screen. See the shared
|
|
14264
|
+
* `render/presentation-blackboard` module for the layering rules.
|
|
14265
|
+
*/
|
|
14266
|
+
declare function presentationStageStyle(size: CanvasSize, zoom: number, viewportW: number, viewportH: number): Record<string, string>;
|
|
14267
|
+
|
|
12863
14268
|
/** Where a navigation request wants to go. */
|
|
12864
14269
|
type ShowDirection = 'next' | 'prev' | 'first' | 'last';
|
|
12865
14270
|
/**
|
|
@@ -12873,6 +14278,13 @@ interface ActiveSlideTransition {
|
|
|
12873
14278
|
/** Everything the navigator needs from its host component. */
|
|
12874
14279
|
interface ShowNavigatorDeps {
|
|
12875
14280
|
slides: () => readonly PptxSlide[];
|
|
14281
|
+
/**
|
|
14282
|
+
* The running custom show, when one is active. `slides()` is always the whole
|
|
14283
|
+
* deck: the subset is a navigation rule, not a different slide array, so that
|
|
14284
|
+
* a hidden slide inside the show is still skipped and the editor's index
|
|
14285
|
+
* space never has to be translated.
|
|
14286
|
+
*/
|
|
14287
|
+
activeCustomShow?: () => ActiveShow;
|
|
12876
14288
|
/** The slide at the CURRENT index (a computed over `currentIndex`). */
|
|
12877
14289
|
currentSlide: () => PptxSlide | undefined;
|
|
12878
14290
|
showWithAnimation: () => boolean | undefined;
|
|
@@ -12982,6 +14394,12 @@ interface PresentationInputDeps {
|
|
|
12982
14394
|
presenterWindow: PresenterWindowService;
|
|
12983
14395
|
/** PowerPoint's Ctrl+M: hide ink markup without discarding the strokes. */
|
|
12984
14396
|
toggleInkMarkup: () => void;
|
|
14397
|
+
/** PowerPoint's bare `J`: show or hide the live-caption bar. */
|
|
14398
|
+
toggleSubtitles: () => void;
|
|
14399
|
+
/** PowerPoint's Ctrl+H: show or hide the running show's own chrome. */
|
|
14400
|
+
toggleChrome: () => void;
|
|
14401
|
+
/** PowerPoint's Ctrl+S: raise the "See All Slides" navigator. */
|
|
14402
|
+
showAllSlides: () => void;
|
|
12985
14403
|
/** End the show; the component guards against double-closing. */
|
|
12986
14404
|
requestClose: () => void;
|
|
12987
14405
|
}
|
|
@@ -13046,6 +14464,13 @@ declare class PresentationOverlayComponent implements OnInit {
|
|
|
13046
14464
|
readonly canvasSize: _angular_core.InputSignal<CanvasSize>;
|
|
13047
14465
|
readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
|
|
13048
14466
|
readonly startIndex: _angular_core.InputSignal<number>;
|
|
14467
|
+
/**
|
|
14468
|
+
* The running custom show, or null for the whole deck. `slides` stays the
|
|
14469
|
+
* FULL deck either way: membership is applied by the shared show-order rule
|
|
14470
|
+
* (see `presentation-overlay-helpers.ts`), so indexes remain deck indexes and
|
|
14471
|
+
* hidden slides inside a show are still skipped.
|
|
14472
|
+
*/
|
|
14473
|
+
readonly activeCustomShow: _angular_core.InputSignal<ShowOrderCustomShow | null>;
|
|
13049
14474
|
readonly showWithAnimation: _angular_core.InputSignal<boolean | undefined>;
|
|
13050
14475
|
/**
|
|
13051
14476
|
* Whether authored slide timings (`p:transition/@advTm`) advance the show on
|
|
@@ -13100,13 +14525,24 @@ declare class PresentationOverlayComponent implements OnInit {
|
|
|
13100
14525
|
* `presentation-input-controller.ts`.
|
|
13101
14526
|
*/
|
|
13102
14527
|
protected readonly input: PresentationInputController;
|
|
14528
|
+
/** Whether PowerPoint's "See All Slides" navigator is up (Ctrl+S). */
|
|
14529
|
+
protected readonly allSlidesOpen: _angular_core.WritableSignal<boolean>;
|
|
13103
14530
|
/** Template aliases for the navigator's state. */
|
|
13104
14531
|
protected readonly currentIndex: _angular_core.WritableSignal<number>;
|
|
13105
14532
|
protected readonly endOfShow: _angular_core.WritableSignal<boolean>;
|
|
13106
14533
|
protected readonly activeTransition: _angular_core.WritableSignal<ActiveSlideTransition | null>;
|
|
13107
14534
|
/** Mirror the host's audience "session ended" flag onto the end screen. */
|
|
13108
14535
|
private readonly syncSessionEnded;
|
|
13109
|
-
/**
|
|
14536
|
+
/**
|
|
14537
|
+
* Adopt an index the host PUSHED in (an audience display mirrors one).
|
|
14538
|
+
*
|
|
14539
|
+
* `startIndex` is this effect's only dependency, deliberately. `syncFromHost`
|
|
14540
|
+
* reads the navigator's own `currentIndex` to decide whether anything
|
|
14541
|
+
* changed, and tracking that read made the effect re-run on the show's own
|
|
14542
|
+
* advances: any host whose `startIndex` did not follow the show then re-armed
|
|
14543
|
+
* itself and yanked the slide straight back. That is exactly what a running
|
|
14544
|
+
* custom show used to do, and why Angular alone never left its first slide.
|
|
14545
|
+
*/
|
|
13110
14546
|
private readonly syncExternalIndex;
|
|
13111
14547
|
/**
|
|
13112
14548
|
* Zoom-navigation context (provided at this component level). The handler is
|
|
@@ -13128,6 +14564,8 @@ declare class PresentationOverlayComponent implements OnInit {
|
|
|
13128
14564
|
* {@link setupFullscreen}).
|
|
13129
14565
|
*/
|
|
13130
14566
|
private readonly rootRef;
|
|
14567
|
+
/** The show toolbar, so Ctrl+H can flip the visibility flag it already owns. */
|
|
14568
|
+
private readonly toolbarRef;
|
|
13131
14569
|
/**
|
|
13132
14570
|
* Guards against handling the same exit twice: e.g. Escape both reaches our
|
|
13133
14571
|
* own `keydown` handler AND causes the browser to natively exit fullscreen
|
|
@@ -13208,6 +14646,8 @@ declare class PresentationOverlayComponent implements OnInit {
|
|
|
13208
14646
|
protected onEndScreenClick(event: MouseEvent): void;
|
|
13209
14647
|
/** The show toolbar's end button: same exit path as Escape / the close button. */
|
|
13210
14648
|
protected onToolbarEnd(): void;
|
|
14649
|
+
/** A "See All Slides" tile: jump there and drop the navigator. */
|
|
14650
|
+
protected onNavigatorSelect(index: number): void;
|
|
13211
14651
|
/**
|
|
13212
14652
|
* Overlay-chrome buttons (close / previous / next). Each is bound for both
|
|
13213
14653
|
* `click` and `touchend`: the touch path additionally prevents the browser's
|
|
@@ -13220,7 +14660,7 @@ declare class PresentationOverlayComponent implements OnInit {
|
|
|
13220
14660
|
private runChromeAction;
|
|
13221
14661
|
private emitClosed;
|
|
13222
14662
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PresentationOverlayComponent, never>;
|
|
13223
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PresentationOverlayComponent, "pptx-presentation-overlay", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "startIndex": { "alias": "startIndex"; "required": false; "isSignal": true; }; "showWithAnimation": { "alias": "showWithAnimation"; "required": false; "isSignal": true; }; "useTimings": { "alias": "useTimings"; "required": false; "isSignal": true; }; "subtitlesVisible": { "alias": "subtitlesVisible"; "required": false; "isSignal": true; }; "sessionEnded": { "alias": "sessionEnded"; "required": false; "isSignal": true; }; "endWithBlackSlide": { "alias": "endWithBlackSlide"; "required": false; "isSignal": true; }; "presenterMode": { "alias": "presenterMode"; "required": false; "isSignal": true; }; }, { "indexChange": "indexChange"; "closed": "closed"; "subtitlesChange": "subtitlesChange"; "presenterViewToggle": "presenterViewToggle"; "annotationsExit": "annotationsExit"; }, never, never, true, never>;
|
|
14663
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PresentationOverlayComponent, "pptx-presentation-overlay", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "startIndex": { "alias": "startIndex"; "required": false; "isSignal": true; }; "activeCustomShow": { "alias": "activeCustomShow"; "required": false; "isSignal": true; }; "showWithAnimation": { "alias": "showWithAnimation"; "required": false; "isSignal": true; }; "useTimings": { "alias": "useTimings"; "required": false; "isSignal": true; }; "subtitlesVisible": { "alias": "subtitlesVisible"; "required": false; "isSignal": true; }; "sessionEnded": { "alias": "sessionEnded"; "required": false; "isSignal": true; }; "endWithBlackSlide": { "alias": "endWithBlackSlide"; "required": false; "isSignal": true; }; "presenterMode": { "alias": "presenterMode"; "required": false; "isSignal": true; }; }, { "indexChange": "indexChange"; "closed": "closed"; "subtitlesChange": "subtitlesChange"; "presenterViewToggle": "presenterViewToggle"; "annotationsExit": "annotationsExit"; }, never, never, true, never>;
|
|
13224
14664
|
}
|
|
13225
14665
|
|
|
13226
14666
|
/**
|
|
@@ -13253,10 +14693,16 @@ declare class SlideSorterOverlayComponent {
|
|
|
13253
14693
|
readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
|
|
13254
14694
|
/** Zero-based index of the currently active slide (highlighted in blue). */
|
|
13255
14695
|
readonly activeIndex: _angular_core.InputSignal<number>;
|
|
14696
|
+
/** Whether the host allows edits; gates the deck-writing shortcuts. */
|
|
14697
|
+
readonly canEdit: _angular_core.InputSignal<boolean>;
|
|
13256
14698
|
/** Emits the zero-based index of the thumbnail the user clicked. */
|
|
13257
14699
|
readonly select: _angular_core.OutputEmitterRef<number>;
|
|
13258
14700
|
/** Emits when the user closes the overlay (✕ button or Escape key). */
|
|
13259
14701
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
14702
|
+
/** Delete the active slide (Delete / Backspace). */
|
|
14703
|
+
readonly deleteSlide: _angular_core.OutputEmitterRef<number>;
|
|
14704
|
+
/** Duplicate the active slide (Ctrl/Cmd+D). */
|
|
14705
|
+
readonly duplicateSlide: _angular_core.OutputEmitterRef<number>;
|
|
13260
14706
|
/** Zoom level that fits the full canvas width into THUMB_W pixels. */
|
|
13261
14707
|
readonly thumbZoom: _angular_core.Signal<number>;
|
|
13262
14708
|
/** Pixel height of the clipping box (aspect-correct). */
|
|
@@ -13265,7 +14711,15 @@ declare class SlideSorterOverlayComponent {
|
|
|
13265
14711
|
readonly clipStyle: _angular_core.Signal<Record<string, string>>;
|
|
13266
14712
|
/** ngStyle object for the grid: responsive auto-fill columns. */
|
|
13267
14713
|
readonly gridStyle: _angular_core.Signal<Record<string, string>>;
|
|
13268
|
-
/**
|
|
14714
|
+
/**
|
|
14715
|
+
* Keyboard handler, resolved by the shared sorter keymap.
|
|
14716
|
+
*
|
|
14717
|
+
* This used to test for `Escape` and nothing else, so the sorter's Delete and
|
|
14718
|
+
* Ctrl+D were dead in Angular alone. Only the commands this overlay can
|
|
14719
|
+
* perform are dispatched: there is no slide clipboard, no multi-selection and
|
|
14720
|
+
* no thumbnail zoom here, so those chords are left to the host instead of
|
|
14721
|
+
* being swallowed by a branch that would do nothing.
|
|
14722
|
+
*/
|
|
13269
14723
|
onKeydown(event: KeyboardEvent): void;
|
|
13270
14724
|
/** Clicking the backdrop (outside the panel) closes the overlay. */
|
|
13271
14725
|
onBackdropClick(event: MouseEvent): void;
|
|
@@ -13284,7 +14738,7 @@ declare class SlideSorterOverlayComponent {
|
|
|
13284
14738
|
*/
|
|
13285
14739
|
hiddenCue(slide: PptxSlide, index: number): HiddenSlideCue;
|
|
13286
14740
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideSorterOverlayComponent, never>;
|
|
13287
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideSorterOverlayComponent, "pptx-slide-sorter-overlay", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; }, { "select": "select"; "closed": "closed"; }, never, never, true, never>;
|
|
14741
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideSorterOverlayComponent, "pptx-slide-sorter-overlay", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, { "select": "select"; "closed": "closed"; "deleteSlide": "deleteSlide"; "duplicateSlide": "duplicateSlide"; }, never, never, true, never>;
|
|
13288
14742
|
}
|
|
13289
14743
|
|
|
13290
14744
|
declare class ReadingViewOverlayComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
@@ -13424,7 +14878,12 @@ declare class InspectorPanelComponent {
|
|
|
13424
14878
|
textColor: string;
|
|
13425
14879
|
fontSize: number;
|
|
13426
14880
|
}>;
|
|
13427
|
-
/**
|
|
14881
|
+
/**
|
|
14882
|
+
* Whether the element carries a lock that stops a canvas gesture, resolved by
|
|
14883
|
+
* the SHARED predicate so all five bindings agree on what "locked" means
|
|
14884
|
+
* (previously a hand-rolled `noMove || noSelect` that omitted `noResize`, so a
|
|
14885
|
+
* resize-locked shape showed as unlocked while the canvas refused the drag).
|
|
14886
|
+
*/
|
|
13428
14887
|
protected readonly isLocked: _angular_core.Signal<boolean>;
|
|
13429
14888
|
/** Whether the element supports shape-style (fill/stroke) editing. */
|
|
13430
14889
|
protected readonly hasShape: _angular_core.Signal<boolean>;
|
|
@@ -13450,7 +14909,7 @@ declare class InspectorPanelComponent {
|
|
|
13450
14909
|
* identically.
|
|
13451
14910
|
*/
|
|
13452
14911
|
protected onSmartArtDataChange(smartArtData: PptxSmartArtData): void;
|
|
13453
|
-
/** Toggle element lock
|
|
14912
|
+
/** Toggle element lock. Shared owns which flags that writes. */
|
|
13454
14913
|
protected onLockToggle(): void;
|
|
13455
14914
|
/** Commit a partial-element patch from an advanced sub-panel as one history entry. */
|
|
13456
14915
|
protected onPatch(patch: Partial<PptxElement>): void;
|
|
@@ -13590,8 +15049,17 @@ declare class SlideSizeCardComponent {
|
|
|
13590
15049
|
readonly canEdit: _angular_core.InputSignal<boolean>;
|
|
13591
15050
|
private readonly loader;
|
|
13592
15051
|
private readonly editor;
|
|
15052
|
+
protected readonly CUSTOM_PRESET_VALUE = "";
|
|
15053
|
+
protected readonly presets: readonly SlideSizePreset[];
|
|
15054
|
+
protected readonly orientations: readonly SlideSizeOrientation[];
|
|
13593
15055
|
protected readonly size: _angular_core.WritableSignal<pptx_angular_viewer.CanvasSize>;
|
|
15056
|
+
protected readonly selection: _angular_core.Signal<SlideSizeSelectionDescriptor>;
|
|
15057
|
+
protected readonly selectedPresetValue: _angular_core.Signal<string>;
|
|
15058
|
+
protected onPresetChange(event: Event): void;
|
|
15059
|
+
protected onOrientation(orientation: SlideSizeOrientation): void;
|
|
13594
15060
|
protected onChange(event: Event, dim: 'width' | 'height'): void;
|
|
15061
|
+
/** Commit an EMU size and the canvas size it implies, together. */
|
|
15062
|
+
private apply;
|
|
13595
15063
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideSizeCardComponent, never>;
|
|
13596
15064
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideSizeCardComponent, "pptx-slide-size-card", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
13597
15065
|
}
|
|
@@ -15971,6 +17439,7 @@ declare class ViewerExtraDialogsComponent {
|
|
|
15971
17439
|
readonly themeKeySelect: _angular_core.OutputEmitterRef<string>;
|
|
15972
17440
|
readonly localeSelect: _angular_core.OutputEmitterRef<string>;
|
|
15973
17441
|
protected readonly svc: ViewerDialogsService;
|
|
17442
|
+
protected readonly customFonts: CustomFontsService;
|
|
15974
17443
|
protected readonly viewerOpts: ViewerOptionsService;
|
|
15975
17444
|
protected readonly compare: ViewerCompareService;
|
|
15976
17445
|
protected readonly editor: EditorStateService;
|
|
@@ -16285,6 +17754,15 @@ declare class FontEmbeddingPanelComponent {
|
|
|
16285
17754
|
readonly usedFontFamilies: _angular_core.InputSignal<string[]>;
|
|
16286
17755
|
/** Font families already embedded in the file. */
|
|
16287
17756
|
readonly embeddedFonts: _angular_core.InputSignal<string[]>;
|
|
17757
|
+
/**
|
|
17758
|
+
* False when the deck embeds nothing, in which case the switch is inert and
|
|
17759
|
+
* says why. The viewer can keep or strip embedded font data on save, but it
|
|
17760
|
+
* cannot manufacture it: a browser will not hand over the bytes of an
|
|
17761
|
+
* installed system face.
|
|
17762
|
+
*/
|
|
17763
|
+
readonly canEmbedFonts: _angular_core.InputSignal<boolean>;
|
|
17764
|
+
/** i18n key for the explanation shown when `canEmbedFonts` is false. */
|
|
17765
|
+
readonly embedUnavailableKey: _angular_core.InputSignal<string | undefined>;
|
|
16288
17766
|
/** Fired when the dialog is dismissed. */
|
|
16289
17767
|
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
16290
17768
|
/** Fired when the embed toggle changes; carries the new checked state. */
|
|
@@ -16297,13 +17775,15 @@ declare class FontEmbeddingPanelComponent {
|
|
|
16297
17775
|
readonly scanned: _angular_core.WritableSignal<boolean>;
|
|
16298
17776
|
/** Set view of {@link embeddedFonts} for fast membership checks. */
|
|
16299
17777
|
readonly embeddedSet: _angular_core.Signal<Set<string>>;
|
|
17778
|
+
/** Line of copy under the switch: what it does, or why it cannot. */
|
|
17779
|
+
readonly toggleNoteKey: _angular_core.Signal<string>;
|
|
16300
17780
|
/** How many used families failed to resolve in the browser. */
|
|
16301
17781
|
readonly missingCount: _angular_core.Signal<number>;
|
|
16302
17782
|
constructor();
|
|
16303
17783
|
onToggle(event: Event): void;
|
|
16304
17784
|
private scanFonts;
|
|
16305
17785
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FontEmbeddingPanelComponent, never>;
|
|
16306
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FontEmbeddingPanelComponent, "pptx-font-embedding-panel", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "embedFontsEnabled": { "alias": "embedFontsEnabled"; "required": false; "isSignal": true; }; "usedFontFamilies": { "alias": "usedFontFamilies"; "required": false; "isSignal": true; }; "embeddedFonts": { "alias": "embeddedFonts"; "required": false; "isSignal": true; }; }, { "close": "close"; "toggleEmbedFonts": "toggleEmbedFonts"; }, never, never, true, never>;
|
|
17786
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FontEmbeddingPanelComponent, "pptx-font-embedding-panel", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "embedFontsEnabled": { "alias": "embedFontsEnabled"; "required": false; "isSignal": true; }; "usedFontFamilies": { "alias": "usedFontFamilies"; "required": false; "isSignal": true; }; "embeddedFonts": { "alias": "embeddedFonts"; "required": false; "isSignal": true; }; "canEmbedFonts": { "alias": "canEmbedFonts"; "required": false; "isSignal": true; }; "embedUnavailableKey": { "alias": "embedUnavailableKey"; "required": false; "isSignal": true; }; }, { "close": "close"; "toggleEmbedFonts": "toggleEmbedFonts"; }, never, never, true, never>;
|
|
16307
17787
|
}
|
|
16308
17788
|
|
|
16309
17789
|
declare class FontEmbeddingListComponent {
|
|
@@ -16432,6 +17912,10 @@ declare class SettingsDialogComponent {
|
|
|
16432
17912
|
readonly resetOptions: _angular_core.OutputEmitterRef<keyof ViewerOptions | undefined>;
|
|
16433
17913
|
readonly clearCache: _angular_core.OutputEmitterRef<void>;
|
|
16434
17914
|
readonly themeKeySelect: _angular_core.OutputEmitterRef<string>;
|
|
17915
|
+
/** Families registered this session via the Fonts section. */
|
|
17916
|
+
readonly customFontFamilies: _angular_core.InputSignal<readonly string[]>;
|
|
17917
|
+
/** A font file was registered; the ribbon adds the family to its list. */
|
|
17918
|
+
readonly customFontRegistered: _angular_core.OutputEmitterRef<string>;
|
|
16435
17919
|
readonly localeSelect: _angular_core.OutputEmitterRef<string>;
|
|
16436
17920
|
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
16437
17921
|
protected readonly tabs: readonly ViewerOptionsTabDefinition[];
|
|
@@ -16447,7 +17931,7 @@ declare class SettingsDialogComponent {
|
|
|
16447
17931
|
/** Escape confirms (keeps edits), mirroring React's dialog. */
|
|
16448
17932
|
protected onEscape(): void;
|
|
16449
17933
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SettingsDialogComponent, never>;
|
|
16450
|
-
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>;
|
|
17934
|
+
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; }; "customFontFamilies": { "alias": "customFontFamilies"; "required": false; "isSignal": true; }; }, { "optionChange": "optionChange"; "restoreOptions": "restoreOptions"; "ribbonTabHiddenChange": "ribbonTabHiddenChange"; "quickAccessCommandsChange": "quickAccessCommandsChange"; "resetOptions": "resetOptions"; "clearCache": "clearCache"; "themeKeySelect": "themeKeySelect"; "customFontRegistered": "customFontRegistered"; "localeSelect": "localeSelect"; "close": "close"; }, never, never, true, never>;
|
|
16451
17935
|
}
|
|
16452
17936
|
|
|
16453
17937
|
declare class SettingsAppearanceTabComponent {
|
|
@@ -16472,7 +17956,7 @@ declare class AccountPageComponent {
|
|
|
16472
17956
|
readonly accountAuth: _angular_core.InputSignal<AccountAuthConfig | undefined>;
|
|
16473
17957
|
private readonly translate;
|
|
16474
17958
|
protected readonly swatches: readonly string[];
|
|
16475
|
-
protected readonly version = "2.
|
|
17959
|
+
protected readonly version = "2.18.0";
|
|
16476
17960
|
protected readonly profile: _angular_core.WritableSignal<ViewerProfile>;
|
|
16477
17961
|
protected readonly initial: _angular_core.Signal<string>;
|
|
16478
17962
|
protected readonly usage: _angular_core.WritableSignal<LocalStorageUsageSummary | null>;
|
|
@@ -16502,6 +17986,20 @@ declare class KeepAnnotationsDialogComponent {
|
|
|
16502
17986
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KeepAnnotationsDialogComponent, "pptx-keep-annotations-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "annotationCount": { "alias": "annotationCount"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; }, { "keep": "keep"; "discard": "discard"; }, never, never, true, never>;
|
|
16503
17987
|
}
|
|
16504
17988
|
|
|
17989
|
+
declare class AutosaveRecoveryDialogComponent {
|
|
17990
|
+
private readonly translate;
|
|
17991
|
+
/** The shared descriptor to render, or null to render nothing. */
|
|
17992
|
+
readonly prompt: _angular_core.InputSignal<AutosaveRecoveryPrompt | null>;
|
|
17993
|
+
/** The user accepted: load the snapshot. */
|
|
17994
|
+
readonly restore: _angular_core.OutputEmitterRef<void>;
|
|
17995
|
+
/** The user declined (also on dismiss): drop the snapshot. */
|
|
17996
|
+
readonly discard: _angular_core.OutputEmitterRef<void>;
|
|
17997
|
+
/** "Autosaved 5 min ago", built from the two keys the descriptor names. */
|
|
17998
|
+
protected readonly savedLabel: _angular_core.Signal<any>;
|
|
17999
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AutosaveRecoveryDialogComponent, never>;
|
|
18000
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AutosaveRecoveryDialogComponent, "pptx-autosave-recovery-dialog", never, { "prompt": { "alias": "prompt"; "required": false; "isSignal": true; }; }, { "restore": "restore"; "discard": "discard"; }, never, never, true, never>;
|
|
18001
|
+
}
|
|
18002
|
+
|
|
16505
18003
|
declare class SignatureStrippedDialogComponent {
|
|
16506
18004
|
/** Whether the dialog is visible. */
|
|
16507
18005
|
readonly open: _angular_core.InputSignal<boolean>;
|
|
@@ -16811,7 +18309,13 @@ declare class PresentationToolbarComponent {
|
|
|
16811
18309
|
readonly swatchBar: "absolute bottom-0.5 left-1/2 -translate-x-1/2 w-3 h-0.5 rounded-full";
|
|
16812
18310
|
};
|
|
16813
18311
|
protected readonly openPalette: _angular_core.WritableSignal<OpenPalette>;
|
|
16814
|
-
|
|
18312
|
+
/**
|
|
18313
|
+
* Whether the bar is faded in. Public because PowerPoint's Ctrl+H toggles it
|
|
18314
|
+
* from the show's key handler, which owns no visibility state of its own:
|
|
18315
|
+
* auto-hide and the shortcut have to drive ONE flag or the bar disagrees with
|
|
18316
|
+
* itself the moment the presenter moves the mouse.
|
|
18317
|
+
*/
|
|
18318
|
+
readonly visible: _angular_core.WritableSignal<boolean>;
|
|
16815
18319
|
private readonly mountedAt;
|
|
16816
18320
|
private readonly now;
|
|
16817
18321
|
protected readonly counterLabel: _angular_core.Signal<string>;
|
|
@@ -16831,6 +18335,8 @@ declare class PresentationToolbarComponent {
|
|
|
16831
18335
|
* back on the next twitch.
|
|
16832
18336
|
*/
|
|
16833
18337
|
protected onDocumentMouseMove(event: MouseEvent): void;
|
|
18338
|
+
/** PowerPoint's Ctrl+H: flip the show chrome, auto-hide countdown and all. */
|
|
18339
|
+
toggleVisible(): void;
|
|
16834
18340
|
protected onMouseEnter(): void;
|
|
16835
18341
|
protected onMouseLeave(): void;
|
|
16836
18342
|
/** A press outside the bar dismisses whichever colour palette is open. */
|
|
@@ -17026,6 +18532,12 @@ declare class PresenterViewComponent {
|
|
|
17026
18532
|
protected readonly NOTES_FONT_SIZE_MAX = 32;
|
|
17027
18533
|
readonly slides: _angular_core.InputSignal<PptxSlide[]>;
|
|
17028
18534
|
readonly currentSlideIndex: _angular_core.InputSignal<number>;
|
|
18535
|
+
/**
|
|
18536
|
+
* The running custom show, or null for the whole deck. The "next slide"
|
|
18537
|
+
* preview MUST honour it: while a show is playing, the slide the next
|
|
18538
|
+
* forward press lands on is the show's next member, not `index + 1`.
|
|
18539
|
+
*/
|
|
18540
|
+
readonly activeCustomShow: _angular_core.InputSignal<ShowOrderCustomShow | null>;
|
|
17029
18541
|
readonly canvasSize: _angular_core.InputSignal<CanvasSize>;
|
|
17030
18542
|
readonly templateElements: _angular_core.InputSignal<readonly PptxElement[]>;
|
|
17031
18543
|
readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
|
|
@@ -17100,7 +18612,7 @@ declare class PresenterViewComponent {
|
|
|
17100
18612
|
protected onSwapDisplays(): void;
|
|
17101
18613
|
private withTemplate;
|
|
17102
18614
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PresenterViewComponent, never>;
|
|
17103
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PresenterViewComponent, "pptx-presenter-view", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "currentSlideIndex": { "alias": "currentSlideIndex"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "presentationStartTime": { "alias": "presentationStartTime"; "required": false; "isSignal": true; }; "isAudienceWindowOpen": { "alias": "isAudienceWindowOpen"; "required": false; "isSignal": true; }; }, { "movePresentationSlide": "movePresentationSlide"; "exit": "exit"; "openAudienceWindow": "openAudienceWindow"; "closeAudienceWindow": "closeAudienceWindow"; "navigateToSlide": "navigateToSlide"; }, never, never, true, never>;
|
|
18615
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PresenterViewComponent, "pptx-presenter-view", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "currentSlideIndex": { "alias": "currentSlideIndex"; "required": true; "isSignal": true; }; "activeCustomShow": { "alias": "activeCustomShow"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "presentationStartTime": { "alias": "presentationStartTime"; "required": false; "isSignal": true; }; "isAudienceWindowOpen": { "alias": "isAudienceWindowOpen"; "required": false; "isSignal": true; }; }, { "movePresentationSlide": "movePresentationSlide"; "exit": "exit"; "openAudienceWindow": "openAudienceWindow"; "closeAudienceWindow": "closeAudienceWindow"; "navigateToSlide": "navigateToSlide"; }, never, never, true, never>;
|
|
17104
18616
|
}
|
|
17105
18617
|
|
|
17106
18618
|
/**
|
|
@@ -17123,6 +18635,12 @@ declare class PresenterViewComponent {
|
|
|
17123
18635
|
declare class MobilePresenterViewComponent {
|
|
17124
18636
|
readonly slides: _angular_core.InputSignal<PptxSlide[]>;
|
|
17125
18637
|
readonly currentSlideIndex: _angular_core.InputSignal<number>;
|
|
18638
|
+
/**
|
|
18639
|
+
* The running custom show, or null for the whole deck. The "next slide"
|
|
18640
|
+
* preview MUST honour it: while a show is playing, the slide the next
|
|
18641
|
+
* forward press lands on is the show's next member, not `index + 1`.
|
|
18642
|
+
*/
|
|
18643
|
+
readonly activeCustomShow: _angular_core.InputSignal<ShowOrderCustomShow | null>;
|
|
17126
18644
|
readonly canvasSize: _angular_core.InputSignal<CanvasSize>;
|
|
17127
18645
|
readonly templateElements: _angular_core.InputSignal<readonly PptxElement[]>;
|
|
17128
18646
|
readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
|
|
@@ -17148,7 +18666,7 @@ declare class MobilePresenterViewComponent {
|
|
|
17148
18666
|
}>;
|
|
17149
18667
|
private withTemplate;
|
|
17150
18668
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobilePresenterViewComponent, never>;
|
|
17151
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobilePresenterViewComponent, "pptx-mobile-presenter-view", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "currentSlideIndex": { "alias": "currentSlideIndex"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "presentationStartTime": { "alias": "presentationStartTime"; "required": false; "isSignal": true; }; }, { "movePresentationSlide": "movePresentationSlide"; "exit": "exit"; }, never, never, true, never>;
|
|
18669
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobilePresenterViewComponent, "pptx-mobile-presenter-view", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "currentSlideIndex": { "alias": "currentSlideIndex"; "required": true; "isSignal": true; }; "activeCustomShow": { "alias": "activeCustomShow"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "presentationStartTime": { "alias": "presentationStartTime"; "required": false; "isSignal": true; }; }, { "movePresentationSlide": "movePresentationSlide"; "exit": "exit"; }, never, never, true, never>;
|
|
17152
18670
|
}
|
|
17153
18671
|
|
|
17154
18672
|
/**
|
|
@@ -17426,6 +18944,18 @@ declare function computeSingleSelected(elements: readonly PptxElement[], selecte
|
|
|
17426
18944
|
declare function computeHandleBoxes(box: (Box & {
|
|
17427
18945
|
id: string;
|
|
17428
18946
|
}) | null, editable: boolean, handleScreenPx: number, zoom: number): HandleBox[];
|
|
18947
|
+
/**
|
|
18948
|
+
* Resize-handle boxes for the single selection, suppressed entirely when the
|
|
18949
|
+
* element's authored `a:spLocks` forbids resizing.
|
|
18950
|
+
*
|
|
18951
|
+
* The lock question is asked HERE rather than in the component so the rule is
|
|
18952
|
+
* unit-testable without Angular, and so the render gate and the pointer-down
|
|
18953
|
+
* gate ({@link canInteractWithElement}) can never disagree: a handle the user
|
|
18954
|
+
* cannot see is also a handle the pointer path refuses.
|
|
18955
|
+
*/
|
|
18956
|
+
declare function computeResizeHandleBoxes(element: PptxElement | null | undefined, box: (Box & {
|
|
18957
|
+
id: string;
|
|
18958
|
+
}) | null, editable: boolean, handleScreenPx: number, zoom: number): HandleBox[];
|
|
17429
18959
|
/**
|
|
17430
18960
|
* A corner handle box (rotate or shape-adjust) offset above/outside the
|
|
17431
18961
|
* single selection's box by `offsetPx` (screen pixels, scaled by zoom).
|
|
@@ -17433,6 +18963,15 @@ declare function computeHandleBoxes(box: (Box & {
|
|
|
17433
18963
|
declare function computeCornerHandle(box: (Box & {
|
|
17434
18964
|
id: string;
|
|
17435
18965
|
}) | null, editable: boolean, handleScreenPx: number, offsetPx: number, zoom: number, corner: 'top-center' | 'top-left'): CornerHandleBox | null;
|
|
18966
|
+
/**
|
|
18967
|
+
* The rotate-knob box for the single selection, or null when the element's
|
|
18968
|
+
* authored `a:spLocks/@noRotation` forbids the gesture. Companion to
|
|
18969
|
+
* {@link computeResizeHandleBoxes}; see that function for why the lock check
|
|
18970
|
+
* lives in this module.
|
|
18971
|
+
*/
|
|
18972
|
+
declare function computeRotateHandleBox(element: PptxElement | null | undefined, box: (Box & {
|
|
18973
|
+
id: string;
|
|
18974
|
+
}) | null, editable: boolean, handleScreenPx: number, offsetPx: number, zoom: number): CornerHandleBox | null;
|
|
17436
18975
|
/**
|
|
17437
18976
|
* Resolve the id of the interactive element under a pointer target, or null.
|
|
17438
18977
|
*
|
|
@@ -18178,10 +19717,13 @@ declare class RibbonColorPopoverComponent {
|
|
|
18178
19717
|
declare class RibbonDesignSectionComponent {
|
|
18179
19718
|
readonly themeGalleryOpen: _angular_core.InputSignal<boolean>;
|
|
18180
19719
|
readonly toggleThemeGallery: _angular_core.OutputEmitterRef<void>;
|
|
18181
|
-
|
|
19720
|
+
/** "Edit Theme": open the theme gallery already in its customise mode. */
|
|
19721
|
+
readonly editTheme: _angular_core.OutputEmitterRef<void>;
|
|
19722
|
+
/** "Slide Size": surface the inspector deck panel that owns the size card. */
|
|
19723
|
+
readonly openSlideSize: _angular_core.OutputEmitterRef<void>;
|
|
18182
19724
|
readonly toggleInspector: _angular_core.OutputEmitterRef<void>;
|
|
18183
19725
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonDesignSectionComponent, never>;
|
|
18184
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonDesignSectionComponent, "pptx-ribbon-design-section", never, { "themeGalleryOpen": { "alias": "themeGalleryOpen"; "required": false; "isSignal": true; }; }, { "toggleThemeGallery": "toggleThemeGallery"; "
|
|
19726
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonDesignSectionComponent, "pptx-ribbon-design-section", never, { "themeGalleryOpen": { "alias": "themeGalleryOpen"; "required": false; "isSignal": true; }; }, { "toggleThemeGallery": "toggleThemeGallery"; "editTheme": "editTheme"; "openSlideSize": "openSlideSize"; "toggleInspector": "toggleInspector"; }, never, never, true, never>;
|
|
18185
19727
|
}
|
|
18186
19728
|
|
|
18187
19729
|
declare class RibbonDrawingGroupComponent {
|
|
@@ -18300,7 +19842,25 @@ declare class RibbonFontControlsComponent {
|
|
|
18300
19842
|
private readonly editor;
|
|
18301
19843
|
readonly slideIndex: _angular_core.InputSignal<number>;
|
|
18302
19844
|
readonly selectedElement: _angular_core.InputSignal<PptxElement | null>;
|
|
18303
|
-
|
|
19845
|
+
private readonly loader;
|
|
19846
|
+
private readonly customFonts;
|
|
19847
|
+
/**
|
|
19848
|
+
* Theme major/minor latin faces. Read from DI rather than taken as inputs
|
|
19849
|
+
* because this component renders in two different ribbon hosts, and both
|
|
19850
|
+
* would otherwise have to thread the same three values down.
|
|
19851
|
+
*/
|
|
19852
|
+
protected readonly themeFonts: _angular_core.Signal<{
|
|
19853
|
+
heading: string | undefined;
|
|
19854
|
+
body: string | undefined;
|
|
19855
|
+
}>;
|
|
19856
|
+
/**
|
|
19857
|
+
* The dropdown's contents, grouped the way PowerPoint groups them.
|
|
19858
|
+
*
|
|
19859
|
+
* This component used to carry its own eight-entry family list, so Angular
|
|
19860
|
+
* offered a different set of fonts from the other four bindings. The
|
|
19861
|
+
* grouping and de-duplication now come from `pptx-viewer-shared`.
|
|
19862
|
+
*/
|
|
19863
|
+
protected readonly fontGroups: _angular_core.Signal<FontCatalogGroup[]>;
|
|
18304
19864
|
protected readonly fontSizes: number[];
|
|
18305
19865
|
protected readonly fontColorPresets: string[];
|
|
18306
19866
|
protected readonly highlightColorPresets: string[];
|
|
@@ -18364,6 +19924,17 @@ declare class RibbonHomeSectionComponent {
|
|
|
18364
19924
|
private readonly loader;
|
|
18365
19925
|
/** Layouts offered by the New Slide split button and the Layout menu. */
|
|
18366
19926
|
protected readonly layoutOptions: _angular_core.Signal<RibbonLayoutOption[]>;
|
|
19927
|
+
/** `layoutPath` of the active slide, marking the current gallery tile. */
|
|
19928
|
+
protected readonly currentLayoutPath: _angular_core.Signal<string | undefined>;
|
|
19929
|
+
/**
|
|
19930
|
+
* Layout artwork for the gallery thumbnails, keyed by layout path.
|
|
19931
|
+
*
|
|
19932
|
+
* Parsing every layout part is only worth doing once a gallery is opened,
|
|
19933
|
+
* so this stays empty until {@link loadLayoutPreviews} runs. Core memoises
|
|
19934
|
+
* the parse, so reopening a menu costs nothing.
|
|
19935
|
+
*/
|
|
19936
|
+
protected readonly layoutPreviews: _angular_core.WritableSignal<ReadonlyMap<string, PptxLayoutPreview>>;
|
|
19937
|
+
constructor();
|
|
18367
19938
|
readonly slideIndex: _angular_core.InputSignal<number>;
|
|
18368
19939
|
readonly selectedElement: _angular_core.InputSignal<PptxElement | null>;
|
|
18369
19940
|
readonly canEdit: _angular_core.InputSignal<boolean>;
|
|
@@ -18660,6 +20231,23 @@ declare class RibbonSlideshowSectionComponent {
|
|
|
18660
20231
|
readonly toggleSubtitles: _angular_core.OutputEmitterRef<void>;
|
|
18661
20232
|
readonly openSubtitleSettings: _angular_core.OutputEmitterRef<void>;
|
|
18662
20233
|
protected readonly toolbar: ToolbarVisibility;
|
|
20234
|
+
private readonly loader;
|
|
20235
|
+
/**
|
|
20236
|
+
* The Options cluster, split across the two columns PowerPoint uses. Both
|
|
20237
|
+
* halves come from the shared descriptor list, so the set and its order stay
|
|
20238
|
+
* identical across bindings.
|
|
20239
|
+
*/
|
|
20240
|
+
protected readonly primaryOptions: SlideShowOptionDescriptor[];
|
|
20241
|
+
protected readonly secondaryOptions: SlideShowOptionDescriptor[];
|
|
20242
|
+
/** Whether an Options checkbox reads as ticked for the loaded deck. */
|
|
20243
|
+
protected isOptionChecked(id: SlideShowOptionId): boolean;
|
|
20244
|
+
/**
|
|
20245
|
+
* Commit a tick/untick onto the deck's presentation properties, the same
|
|
20246
|
+
* signal the inspector's PRESENTATION card patches and the show path reads.
|
|
20247
|
+
* Unsupported options return no change from shared and are rendered disabled,
|
|
20248
|
+
* so this is a no-op for them even if a click somehow arrives.
|
|
20249
|
+
*/
|
|
20250
|
+
protected onOptionChange(id: SlideShowOptionId, event: Event): void;
|
|
18663
20251
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonSlideshowSectionComponent, never>;
|
|
18664
20252
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonSlideshowSectionComponent, "pptx-ribbon-slideshow-section", never, { "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "showSubtitles": { "alias": "showSubtitles"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; "activeSlideHidden": { "alias": "activeSlideHidden"; "required": false; "isSignal": true; }; }, { "presentFromBeginning": "presentFromBeginning"; "presentFromCurrent": "presentFromCurrent"; "presenter": "presenter"; "broadcast": "broadcast"; "openCustomShows": "openCustomShows"; "openSetUpSlideShow": "openSetUpSlideShow"; "toggleHideSlide": "toggleHideSlide"; "rehearseTimings": "rehearseTimings"; "record": "record"; "toggleSubtitles": "toggleSubtitles"; "openSubtitleSettings": "openSubtitleSettings"; }, never, never, true, never>;
|
|
18665
20253
|
}
|
|
@@ -18679,26 +20267,39 @@ declare function transformSelectedTextCase(editor: EditorStateService, slideInde
|
|
|
18679
20267
|
declare class RibbonTransitionsSectionComponent {
|
|
18680
20268
|
private readonly editor;
|
|
18681
20269
|
readonly slideIndex: _angular_core.InputSignal<number>;
|
|
18682
|
-
readonly selectedTransition: _angular_core.InputSignal<PptxTransitionType>;
|
|
18683
|
-
readonly transitionDurationSec: _angular_core.InputSignal<number>;
|
|
18684
|
-
readonly present: _angular_core.OutputEmitterRef<void>;
|
|
18685
20270
|
readonly toggleInspector: _angular_core.OutputEmitterRef<void>;
|
|
18686
|
-
readonly
|
|
18687
|
-
|
|
18688
|
-
|
|
18689
|
-
|
|
18690
|
-
|
|
18691
|
-
|
|
18692
|
-
|
|
18693
|
-
|
|
18694
|
-
|
|
18695
|
-
|
|
20271
|
+
protected readonly transitionPresets: readonly RibbonTransitionPreset[];
|
|
20272
|
+
/**
|
|
20273
|
+
* The draft the user is editing, tagged with the slide it belongs to. Null
|
|
20274
|
+
* until a control is touched, and abandoned as soon as the active slide
|
|
20275
|
+
* changes, which is what makes the tab re-read the new slide.
|
|
20276
|
+
*/
|
|
20277
|
+
private readonly edited;
|
|
20278
|
+
/**
|
|
20279
|
+
* What the tab's controls say: the live draft for THIS slide, otherwise the
|
|
20280
|
+
* slide's own transition read back through shared. Keeping the untouched
|
|
20281
|
+
* case derived from the deck is what stops the tab reporting the last preset
|
|
20282
|
+
* the user clicked after they navigate away.
|
|
20283
|
+
*/
|
|
20284
|
+
protected readonly draft: _angular_core.Signal<RibbonTransitionDraft>;
|
|
20285
|
+
/** Replay the active slide's transition on the stage. Never writes. */
|
|
20286
|
+
protected preview(): void;
|
|
20287
|
+
/** Apply the chosen preset to the active slide. */
|
|
18696
20288
|
protected setTransition(type: PptxTransitionType): void;
|
|
18697
20289
|
protected onDurationChange(event: Event): void;
|
|
18698
|
-
|
|
20290
|
+
protected onAdvanceOnClick(event: Event): void;
|
|
20291
|
+
protected onAdvanceAfter(event: Event): void;
|
|
20292
|
+
protected onAdvanceAfterText(event: Event): void;
|
|
20293
|
+
/** Apply the current draft to every slide in the deck. */
|
|
18699
20294
|
protected applyToAll(): void;
|
|
20295
|
+
/**
|
|
20296
|
+
* Merge a control's change into the draft and write the resulting transition
|
|
20297
|
+
* onto every targeted slide, preserving each slide's own direction / spokes /
|
|
20298
|
+
* sound / raw XML through the shared merge.
|
|
20299
|
+
*/
|
|
20300
|
+
private commit;
|
|
18700
20301
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonTransitionsSectionComponent, never>;
|
|
18701
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonTransitionsSectionComponent, "pptx-ribbon-transitions-section", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; };
|
|
20302
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonTransitionsSectionComponent, "pptx-ribbon-transitions-section", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; }, { "toggleInspector": "toggleInspector"; }, never, never, true, never>;
|
|
18702
20303
|
}
|
|
18703
20304
|
|
|
18704
20305
|
declare class RibbonViewSectionComponent {
|
|
@@ -18767,110 +20368,6 @@ declare function exitPresentationFullscreen(doc: Document | null | undefined): v
|
|
|
18767
20368
|
*/
|
|
18768
20369
|
declare function hasExitedFullscreen(doc: Document | null | undefined): boolean;
|
|
18769
20370
|
|
|
18770
|
-
/**
|
|
18771
|
-
* presentation-overlay-helpers.ts
|
|
18772
|
-
*
|
|
18773
|
-
* Pure functions used by PresentationOverlayComponent.
|
|
18774
|
-
* Exported separately so they can be unit-tested without TestBed.
|
|
18775
|
-
*/
|
|
18776
|
-
|
|
18777
|
-
/**
|
|
18778
|
-
* Whether a click/tap/swipe advance must be swallowed instead of moving to the
|
|
18779
|
-
* next slide. A click still steps the current slide's remaining animation
|
|
18780
|
-
* builds, so this only blocks once they are exhausted (`playbackComplete`) and
|
|
18781
|
-
* only when the slide's transition sets advanceOnClick to false. Keyboard and
|
|
18782
|
-
* the on-screen next/prev buttons never consult this.
|
|
18783
|
-
*/
|
|
18784
|
-
declare function shouldBlockClickAdvance(playbackComplete: boolean, slide: PptxSlide | undefined): boolean;
|
|
18785
|
-
/**
|
|
18786
|
-
* Delay in ms before the show steps to the next slide on its own, or
|
|
18787
|
-
* `undefined` when the current slide waits for input.
|
|
18788
|
-
*
|
|
18789
|
-
* The counterpart to {@link shouldBlockClickAdvance}: PowerPoint's
|
|
18790
|
-
* `p:transition/@advTm` ("Advance slide: After <n>"). A slide authored
|
|
18791
|
-
* `advClick="0" advTm="…"` is advanced ONLY by this timer, so honouring the
|
|
18792
|
-
* click gate without also arming the timer strands the show on that slide with
|
|
18793
|
-
* no visible response to any input. Nothing is scheduled once the end-of-show
|
|
18794
|
-
* screen is up, or when the show is set to advance manually.
|
|
18795
|
-
*/
|
|
18796
|
-
declare function resolveSlideAutoAdvanceMs(slide: PptxSlide | undefined, useTimings: boolean, endOfShow: boolean): number | undefined;
|
|
18797
|
-
/**
|
|
18798
|
-
* Attach the show's visibility pause: while the tab is hidden the shared
|
|
18799
|
-
* handler pauses the stage's playing media and the cross-slide persistent
|
|
18800
|
-
* audio, and the binding-provided callbacks cancel / re-arm the timed
|
|
18801
|
-
* auto-advance so the deck does not run on unseen. Returns the detach
|
|
18802
|
-
* function. Kept TestBed-free so the wiring can be unit-tested directly.
|
|
18803
|
-
*/
|
|
18804
|
-
declare function attachShowVisibilityPause(deps: {
|
|
18805
|
-
/** The overlay root containing the stage; only media inside it is paused. */
|
|
18806
|
-
root: ParentNode | undefined;
|
|
18807
|
-
/** Cancel the pending auto-advance timer (the tab was hidden). */
|
|
18808
|
-
cancelAutoAdvance: () => void;
|
|
18809
|
-
/** Re-arm the auto-advance timer for the current slide (tab visible again). */
|
|
18810
|
-
rearmAutoAdvance: () => void;
|
|
18811
|
-
}): () => void;
|
|
18812
|
-
/**
|
|
18813
|
-
* The show has ENDED (never a slide change): stop and remove all cross-slide
|
|
18814
|
-
* "play across slides" persistent audio. Called by the host's exit paths
|
|
18815
|
-
* (`closePresentation` / `exitPresenter`), not by the overlay's own destroy,
|
|
18816
|
-
* because swapping to the presenter console destroys the overlay while the
|
|
18817
|
-
* show, and its background audio, carry on.
|
|
18818
|
-
*/
|
|
18819
|
-
declare function endShowMediaCleanup(): void;
|
|
18820
|
-
/**
|
|
18821
|
-
* Clamp `index` to the valid range [0, count - 1].
|
|
18822
|
-
* Returns 0 when `count` is 0 to avoid -1 states.
|
|
18823
|
-
*/
|
|
18824
|
-
declare function clampIndex(index: number, count: number): number;
|
|
18825
|
-
/**
|
|
18826
|
-
* Return the next visible (non-hidden) slide index after `current`.
|
|
18827
|
-
* Wraps around to `current` if no subsequent visible slide exists.
|
|
18828
|
-
*
|
|
18829
|
-
* Thin adapter over the shared show-order rule: Angular used to own this logic
|
|
18830
|
-
* outright, which is exactly why the other four bindings presented hidden
|
|
18831
|
-
* slides. Kept as a named export because the overlay's tests and the navigator
|
|
18832
|
-
* read better in terms of "next visible slide" than raw index lists.
|
|
18833
|
-
*/
|
|
18834
|
-
declare function nextVisibleIndex(current: number, slides: readonly PptxSlide[]): number;
|
|
18835
|
-
/**
|
|
18836
|
-
* Return the previous visible (non-hidden) slide index before `current`.
|
|
18837
|
-
* Returns `current` when no earlier visible slide exists: PowerPoint never
|
|
18838
|
-
* wraps backward off the first slide.
|
|
18839
|
-
*/
|
|
18840
|
-
declare function prevVisibleIndex(current: number, slides: readonly PptxSlide[]): number;
|
|
18841
|
-
/**
|
|
18842
|
-
* Compute the zoom level that fits a canvas of `canvasW × canvasH` pixels
|
|
18843
|
-
* into a viewport of `vw × vh` pixels, preserving aspect ratio.
|
|
18844
|
-
*
|
|
18845
|
-
* Returns 1 as a safe fallback when any dimension is zero or negative.
|
|
18846
|
-
*/
|
|
18847
|
-
declare function fitZoom(canvasW: number, canvasH: number, vw: number, vh: number): number;
|
|
18848
|
-
/**
|
|
18849
|
-
* Whether a visible (non-hidden) slide exists strictly AFTER `current`.
|
|
18850
|
-
*
|
|
18851
|
-
* `nextVisibleIndex` wraps, which would make a show loop for ever. PowerPoint
|
|
18852
|
-
* only loops when "Loop continuously until Esc" is set; otherwise running past
|
|
18853
|
-
* the last slide ends the show. Callers use this to tell "there is a next
|
|
18854
|
-
* slide" from "we just wrapped".
|
|
18855
|
-
*/
|
|
18856
|
-
declare function hasVisibleSlideAfter(current: number, slides: readonly PptxSlide[]): boolean;
|
|
18857
|
-
/** The show's first visible slide (Home), or 0 for an empty deck. */
|
|
18858
|
-
declare function firstVisibleIndex(slides: readonly PptxSlide[]): number;
|
|
18859
|
-
/** The show's last visible slide (End), or 0 for an empty deck. */
|
|
18860
|
-
declare function lastVisibleIndex(slides: readonly PptxSlide[]): number;
|
|
18861
|
-
/**
|
|
18862
|
-
* Style record centring the scaled slide stage in the viewport.
|
|
18863
|
-
*
|
|
18864
|
-
* The offsets are computed numerically ((viewport - scaled size) / 2, exactly
|
|
18865
|
-
* how React's PresentationStage centres) rather than with the historical
|
|
18866
|
-
* `left/top: 50%` + `translate(-50%, -50%)`: a transform makes the stage a
|
|
18867
|
-
* stacking context, which trapped every z-index inside it (the ink annotation
|
|
18868
|
-
* overlay in particular) BELOW the sibling blackout sheet, so blackboard
|
|
18869
|
-
* strokes painted invisibly under the black screen. See the shared
|
|
18870
|
-
* `render/presentation-blackboard` module for the layering rules.
|
|
18871
|
-
*/
|
|
18872
|
-
declare function presentationStageStyle(size: CanvasSize, zoom: number, viewportW: number, viewportH: number): Record<string, string>;
|
|
18873
|
-
|
|
18874
20371
|
/**
|
|
18875
20372
|
* touch-gestures.ts: thin Angular adapter over the framework-agnostic
|
|
18876
20373
|
* `createTouchGestureRecognizer` from `pptx-viewer-shared`.
|
|
@@ -19117,6 +20614,15 @@ declare class MediaRendererComponent {
|
|
|
19117
20614
|
readonly interactive: _angular_core.InputSignal<boolean>;
|
|
19118
20615
|
/** Keep the data-pptx-element marker on interaction-locked template elements. */
|
|
19119
20616
|
readonly marked: _angular_core.InputSignal<boolean>;
|
|
20617
|
+
/**
|
|
20618
|
+
* When true (default), the rendered node carries `data-element-id`. The
|
|
20619
|
+
* miniature surfaces that paint every slide at once turn it off so one
|
|
20620
|
+
* element id resolves to exactly one node in the document; see
|
|
20621
|
+
* `ElementRendererComponent.exposeElementId`.
|
|
20622
|
+
*/
|
|
20623
|
+
readonly exposeElementId: _angular_core.InputSignal<boolean>;
|
|
20624
|
+
/** `data-element-id` for this element, or null on a miniature surface. */
|
|
20625
|
+
readonly elementIdAttr: _angular_core.Signal<string | null>;
|
|
19120
20626
|
/**
|
|
19121
20627
|
* `pointer-events: none` while not interactive, mirroring React's
|
|
19122
20628
|
* `pointer-events-none` class. {@link marked} keeps the element findable via
|
|
@@ -19178,7 +20684,7 @@ declare class MediaRendererComponent {
|
|
|
19178
20684
|
readonly captionTracks: _angular_core.Signal<ResolvedCaptionTrack[]>;
|
|
19179
20685
|
readonly clrChangeParams: _angular_core.Signal<ClrChangeParams | undefined>;
|
|
19180
20686
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MediaRendererComponent, never>;
|
|
19181
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MediaRendererComponent, "pptx-media-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "marked": { "alias": "marked"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "placeholderLabel": { "alias": "placeholderLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
20687
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MediaRendererComponent, "pptx-media-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "marked": { "alias": "marked"; "required": false; "isSignal": true; }; "exposeElementId": { "alias": "exposeElementId"; "required": false; "isSignal": true; }; "presenting": { "alias": "presenting"; "required": false; "isSignal": true; }; "placeholderLabel": { "alias": "placeholderLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
19182
20688
|
}
|
|
19183
20689
|
|
|
19184
20690
|
/**
|
|
@@ -19388,10 +20894,10 @@ declare class RemoteSelectionOverlayComponent {
|
|
|
19388
20894
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RemoteSelectionOverlayComponent, "pptx-remote-selection-overlay", never, { "presences": { "alias": "presences"; "required": false; "isSignal": true; }; "elements": { "alias": "elements"; "required": false; "isSignal": true; }; "activeSlideIndex": { "alias": "activeSlideIndex"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
19389
20895
|
}
|
|
19390
20896
|
|
|
19391
|
-
/** Payload of `renameElement`: `
|
|
20897
|
+
/** Payload of `renameElement`: an empty `name` clears the element's name. */
|
|
19392
20898
|
interface SelectionPaneRename {
|
|
19393
20899
|
id: string;
|
|
19394
|
-
name: string
|
|
20900
|
+
name: string;
|
|
19395
20901
|
}
|
|
19396
20902
|
declare class SelectionPaneComponent {
|
|
19397
20903
|
/** All elements on the active slide. */
|
|
@@ -19406,7 +20912,7 @@ declare class SelectionPaneComponent {
|
|
|
19406
20912
|
readonly sendBackward: _angular_core.OutputEmitterRef<string>;
|
|
19407
20913
|
/** Emits the id of the element whose hidden flag should be toggled. */
|
|
19408
20914
|
readonly toggleHidden: _angular_core.OutputEmitterRef<string>;
|
|
19409
|
-
/** Emits the rename commit; `name
|
|
20915
|
+
/** Emits the rename commit; an empty `name` clears the element's name. */
|
|
19410
20916
|
readonly renameElement: _angular_core.OutputEmitterRef<SelectionPaneRename>;
|
|
19411
20917
|
/** Elements reversed so the topmost (last in array) appears first in the list. */
|
|
19412
20918
|
protected readonly reversedElements: _angular_core.Signal<readonly PptxElement[]>;
|
|
@@ -19439,6 +20945,13 @@ declare class ThemeGalleryComponent {
|
|
|
19439
20945
|
*/
|
|
19440
20946
|
readonly activeName: _angular_core.InputSignal<string | undefined>;
|
|
19441
20947
|
readonly theme: _angular_core.InputSignal<PptxTheme | undefined>;
|
|
20948
|
+
/**
|
|
20949
|
+
* Which face the gallery opens on: the preset grid (false) or the theme
|
|
20950
|
+
* editor (true). Design > Edit Theme names the editor, so it opens straight
|
|
20951
|
+
* into it rather than making the user find the footer's customise button.
|
|
20952
|
+
* Only consulted as the overlay opens; the footer button still flips freely.
|
|
20953
|
+
*/
|
|
20954
|
+
readonly startCustomizing: _angular_core.InputSignal<boolean>;
|
|
19442
20955
|
/** Emitted when the user confirms a selection. */
|
|
19443
20956
|
readonly applyTheme: _angular_core.OutputEmitterRef<PptxThemePreset>;
|
|
19444
20957
|
readonly applyCustomTheme: _angular_core.OutputEmitterRef<CustomThemeEdit>;
|
|
@@ -19448,11 +20961,12 @@ declare class ThemeGalleryComponent {
|
|
|
19448
20961
|
/** The currently highlighted (not yet applied) preset, or null. */
|
|
19449
20962
|
protected readonly selected: _angular_core.WritableSignal<PptxThemePreset | null>;
|
|
19450
20963
|
protected readonly customizing: _angular_core.WritableSignal<boolean>;
|
|
20964
|
+
constructor();
|
|
19451
20965
|
protected selectPreset(preset: PptxThemePreset): void;
|
|
19452
20966
|
protected applySelected(): void;
|
|
19453
20967
|
protected onBackdropClick(event: MouseEvent): void;
|
|
19454
20968
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeGalleryComponent, never>;
|
|
19455
|
-
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>;
|
|
20969
|
+
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; }; "startCustomizing": { "alias": "startCustomizing"; "required": false; "isSignal": true; }; }, { "applyTheme": "applyTheme"; "applyCustomTheme": "applyCustomTheme"; "close": "close"; }, never, never, true, never>;
|
|
19456
20970
|
}
|
|
19457
20971
|
|
|
19458
20972
|
declare class TitleBarComponent {
|
|
@@ -19633,5 +21147,6 @@ declare function thumbnailHeight(canvasW: number, canvasH: number, thumbW: numbe
|
|
|
19633
21147
|
*/
|
|
19634
21148
|
declare function gridColumns(containerW: number, thumbW: number, gap: number, maxCols: number): number;
|
|
19635
21149
|
|
|
19636
|
-
export { ALIGN_OPTIONS, ANIMATION_PRESET_CATEGORIES, AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AVATAR_COLOR_SWATCHES, AXIS_LABEL_COLOR, AccessibilityPanelComponent, AccessibilityService, AccountPageComponent, ActionSettingsPanelComponent, AdvancedChartEditorComponent, AiChangeOverlayComponent, AiChatPanelComponent, AiChatService, AiComposerComponent, AiFocusBarComponent, AiFocusHighlightOverlayComponent, AiHistoryMenuComponent, AiHistoryService, AiMessageListComponent, AiPanelStore, AiProposalCardComponent, AiSettingsSectionComponent, AiToolCallCardComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, AutosaveService, BroadcastDialogComponent, CHART_EDITOR_STYLES, CURSOR_PALETTE, CanvasFitService, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointMarkerOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartElementViewComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartPartSelectionService, ChartPrimitivesComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, CollaborationCursorsComponent, CollaborationService, ColorChangedImageComponent, CommentMarkersOverlayComponent, 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_PATTERN_FILL_PRESET, DEFAULT_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_STYLE, DEFAULT_TABLE_ROW_HEIGHT, DEFAULT_TEXT_COLOR, DEFAULT_VIEWER_PROFILE, DIRECTIONAL_PRESETS, DIRECTION_OPTIONS, DocumentPropertiesCardComponent, EMBEDDED_FONTS_STYLE_ID, EMPHASIS_PRESETS, ENTRANCE_PRESETS, TEMPLATES as EQUATION_TEMPLATES, EXIT_PRESETS, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportProgressModalComponent, ExportService, FieldContextService, FindBarComponent, FindReplaceBarComponent, FollowModeBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GALLERY_THEME_PRESETS, GRIDLINE_COLOR, GradientPickerComponent, HANDOUT_OPTIONS, HeaderFooterDialogComponent, HyperlinkDialogComponent, ImagePropertiesPanelComponent, InkDrawingService, InkRendererComponent, InsertSmartArtDialogComponent, InspectorPaneHeaderComponent, InspectorPanelComponent, IsMobileService, KeepAnnotationsDialogComponent, LOCALE_CATALOG, LONG_PRESS_DURATION_MS, LONG_PRESS_MOVE_TOLERANCE_PX, LoadContentService, LocalPresencePublisher, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MOTION_PATH_COLUMNS, MediaPreviewComponent, MediaPropertiesPanelComponent, MediaRendererComponent, MediaTrimTimelineComponent, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesHandoutCardComponent, NotesPanelComponent, NotesToolbarComponent, OleRendererComponent, OutlineViewOverlayComponent, POWER_POINT_VIEWER_PROVIDERS, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PRESENTER_TIMER_SEGMENT_MS, PX_PER_CM, PX_PER_INCH, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentToolbarAutoHide, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationPropertiesPanelComponent, PresentationSettingsCardComponent, PresentationSubtitleBarComponent, PresentationToolbarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, REPEAT_MODE_OPTIONS, RESIZE_HANDLES, RULER_FONT_SIZE, RULER_THICKNESS, ReadingViewOverlayComponent, RemoteSelectionOverlayComponent, RibbonAnimationGalleryComponent, RibbonAnimationsSectionComponent, RibbonArrangeSectionComponent, RibbonColorPopoverComponent, RibbonComponent, RibbonDesignSectionComponent, RibbonDrawSectionComponent, RibbonDrawingGroupComponent, RibbonEditingSectionComponent, RibbonFileSectionComponent, RibbonFontControlsComponent, RibbonHomeSectionComponent, RibbonHyperlinkButtonComponent, RibbonInsertFieldsComponent, RibbonInsertSectionComponent, RibbonMotionPathGalleryComponent, RibbonParagraphControlsComponent, RibbonPrimaryRowComponent, RibbonReviewSectionComponent, RibbonShapeExtrasComponent, RibbonSlideshowSectionComponent, RibbonTransitionsSectionComponent, RibbonViewSectionComponent, RulerGuidesService, SEQUENCE_OPTIONS, SEVERITY_GROUPS, SEVERITY_LABELS, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, DEFAULT_PALETTE as SMARTART_DEFAULT_PALETTE, PALETTES as SMARTART_PALETTES, SMART_ART_COLOR_SCHEMES, SMART_ART_STYLE_OPTIONS, SUB_ITEM_LABEL, SVG_WARP_PRESETS, SWIPE_MAX_VERTICAL_PX, SWIPE_THRESHOLD_PX, SelectionPaneComponent, SetUpSlideShowDialogComponent, SettingsAppearanceTabComponent, SettingsDialogComponent, SettingsLanguageTabComponent, ShareDialogComponent, ShortcutPanelComponent, ShowOptionsFieldsetComponent, ShowSlidesFieldsetComponent, SignatureStrippedDialogComponent, SignaturesPanelComponent, SignaturesService, SlideBackgroundCardComponent, SlideCanvasComponent, SlideDefaultInspectorComponent, SlideDiffChangesComponent, SlideDiffRowComponent, SlideDiffThumbnailsComponent, SlideSizeCardComponent, SlideSorterOverlayComponent, SlideThemeOverridePanelComponent, SlideTransitionCardComponent, SlidesPanelComponent, SmartArt3DRendererComponent, SmartArt3DService, SmartArtPreviewComponent, SmartArtPropertiesComponent, SmartArtRendererComponent, StatusBarComponent, TABLE_STRUCTURE_TOGGLES, TEXT_3D_BOTTOM_BEVEL_KEYS, TEXT_3D_TOP_BEVEL_KEYS, TEXT_DIRECTION_OPTIONS, THEME_CATALOG, TIMING_CURVE_OPTIONS, TRIGGER_OPTIONS, TYPE_LABELS, TableCellAdvancedFillComponent, TableCellFormattingComponent, TableDataEditorComponent, TablePropertiesComponent, TableRendererComponent, TableResizeOverlayComponent, TableSelectionService, TagsCardComponent, Text3DBevelSectionComponent, Text3DPanelComponent, TextAdvancedPanelComponent, ThemeEditorFieldsComponent, ThemeGalleryComponent, ThemeSelectorCardComponent, TitleBarComponent, TitleBarSearchComponent, TransitionDirectionPickerComponent, TransitionPreviewComponent, VALIGN_OPTIONS, VIEWER_THEME, VersionHistoryPanelComponent, ViewerCanvasEditingService, ViewerCollabCursorService, ViewerCollaborationSessionService, ViewerCompareService, ViewerCustomShowsService, ViewerDialogsService, ViewerDocumentPropertiesService, ViewerExportService, ViewerExtraDialogsComponent, ViewerFileIOService, ViewerFindReplaceService, ViewerFormatPainterService, ViewerInspectorPanelService, ViewerKeyboardService, ViewerMobileSheetService, ViewerPresentationModeService, ViewerThemeGalleryService, ViewerTouchGesturesService, ViewerZoomService, WEBM_MIME_CANDIDATES, WriteBackScheduler, ZERO_LINE_COLOR, ZoomNavigationService, ZoomRendererComponent, ZoomTargetService, addCategory, addCommentToList, addGradientStopPatch, addItem, addSeries, addSubItem, advanceStep, affordanceElements, aiToggleVisible, alignPatch, animationFor, animationPresetLabelKey, annotationMapToInkInserts, applyAcceptedDiff, applyAnimationPreset, applyFindReplacements, applyFormatToElement, applyMove, applyResize, applyTableStylePreset, asMediaElement, assignUserColor, attachShowVisibilityPause, attachTouchGestures, axisTickValues, beginNodeEdit, bevelSizePatch, boolFromEvent, bringForward, bringToFront, buildBarActions, buildBroadcastConfig, buildBroadcastViewerUrl, buildCategoryLabels, buildCellParagraphs, buildChartViewModel, buildChatLogExport, buildChatLogMarkdown, buildChromeStyle, buildClearHyperlinkPatch, buildClickGroups, buildColStyles, buildCollaborationConfig, buildComboViewModel, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildEquationElement, buildEquationSegment, buildFallbackViewModel, buildFontFaceRule, buildGradientFillCss, buildGridlinesAndLabels, buildHyperlinkPatch, buildInkContainerStyle, buildInkStrokes, buildLegend, buildModel3DContainerStyle, buildModel3DViewModel, buildOleActionModel, buildOleInfoRows, buildPatternFillCss, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildRegionMapViewModel, buildSaveSlides, buildShareUrl, buildSmartArtInsertElement, buildSmartArtNodes, buildStockViewModel, buildSurfaceViewModel, buildTableViewModel, buildTreemapViewModel, buildTrimFragment, buildWaterfallViewModel, buildZeroLine, buildZoomContainerStyle, buildZoomViewModel, bulletIndentPx, canAddTopLevelNode, canGroupSelection, canRemoveTopLevelNode, canSetStrokeWidth, canStartBroadcast, canStartShare, canUngroupSelection, canUseClipboard, captionDisplayText, cellRunStyle, cellStyleToStyleMap, cellTdStyle, changeCountLabel, changeIcon, characterSpacingPatch, checkFontAvailable, clampCursorPosition, clampGifDimensions, clampIndex, clampNotesFontSize, clampScale, clampStep, clearAllLocalViewerData, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, collectStoredChats, collectUsedFontFamilies, columnWidthStyle, commitNodeText, computeAlign, computeAxisTitlePrimitives, computeBarRects, computeBubbleRadius, computeCornerHandle, computeDataTablePrimitives, computeDistribute, computeDrawingViewBox, computeErrorBarPrimitives, computeFocusTargets, computeHandleBoxes, computeHandoutLayout, computeIsMobile, computeIsTablet, computeLinePoints, computeLinearRegression, computePageCount, computePieLayout, computePieSlicePath, computePieSlices, computePlotLayout, computeRSquared, computeRadarPoints, computeScatterDots, computeSelectionBoxes, computeSingleSelected, computeSlideIndices, computeSnap, computeStackedBarRects, computeStackedValueRange, computeTrendlinePrimitives, computeValueRange, convertOmmlToMathMl, copyFormatFromElement, countAccessibilityIssues, countAnnotationStrokes, createAngularAiBridge, createCustomShow, createSwipeDismissDrag, createWebrtcBundle, createWebsocketBundle, cssObjectToStyleMap, currentColorScheme, currentLayout, currentStyle, defaultCssVars, defaultRadius, defaultThemeColors, deleteElementsByIds, deleteVersion as deleteRecoveryVersion, demoteNode, deriveModel3DBlobUrl, derivePresenceList, describeSmartArtBounds, disableGlowPatch, disableInnerShadowPatch, disableOuterShadowPatch, disableReflectionPatch, disableSoftEdgePatch, duplicateElementById, durationOf, effectsStateOf, enableGlowPatch, enableInnerShadowPatch, enableOuterShadowPatch, enableReflectionPatch, enableSoftEdgePatch, encodeGif, endShowMediaCleanup, estimatePageCount, evenColumnWidths, evenRowHeights, exitPresentationFullscreen, exportAiChatLogs, extractPathPoints, eyedropperAvailable, fillColorOf, findInSlides, findOwningSlideIndex, findSlideIndexByElementId, firstVisibleIndex, fitPolynomial, fitZoom, focusTargetChips, fontMimeForFormat, fontSizeOf, forgetSessionDeck, formatAutoNumber, formatAxisValue, formatBytes, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, generateCustomShowId, generatePressureCircles, generateTicks, getClrChangeParams, getContainerStyle, getDuotoneFilterDef, getImageSrc, getLocalStorageUsageSummary, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDownloadFileName, getOleTypeColor, getOleTypeLabel, getPasswordStrength, getPatternSvg, getPlaceholderStyle, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getSessionTabId, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getSmartArtNodeBounds, getSpeechRecognitionCtor, getTextBlockStyle, getTextWarp, getTouchDistance, getWarpCategory, getWarpPath, gradientStateFromStyle, gradientStateOf, gradientStatePatch, gridColumns, groupElements, groupIssuesBySeverity, hasAnimation, hasCopyableFormat, hasExistingLink, hasExitedFullscreen, hasGradientFill, hasPressureVariation, hasVisibleSlideAfter, headerLabel, imageDimensions, inkViewBox, insertTableElementColumn as insertColumn, insertTableElementRow as insertRow, interpolateWidth, isAudienceTab, isBold, isBrowserOpenableMime, isChildNode, isElementInteractive, isInjectableUrl, isItalic, isPpactionUrl, isPresenterMessage, isSigned, isTextElement, isTwoTableFocus, isUnderline, isUrlSafe, isValidRoomId, isViewportBackgroundPressTarget, isZoomActivationKey, issueTrackKey, issueTypeLabel, keyToLabel, lastVisibleIndex, latexToMathml, linePointsToSvgString, lineSpacingPatch, loadAudienceContent, loadSessionDeck, mediaFallbackFor, mediaSurfaceFor, 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, patternPresetOptions, pendingElementStyles, pickColorByClickFallback, pickFile, pickSupportedMimeType, planGifFrames, planVideoSegments, pointsToSvgPathD, presenceToCursors, presentationStageStyle, presenterTimerProgress, presetByLayout, presetsForCategory, pressuresToWidths, prevVisibleIndex, projectDrawingShapes, promoteNode, provideViewerTheme, radarAngle, radarRingPoints, readAsDataUrl, recordWebm, redistributeColumnWidth, registerCrossSlideAudio, rememberSessionDeck, removeAnimation, removeCategory, removeTableElementColumn as removeColumn, removeCommentFromList, removeElementAnimation, removeGradientStopPatch, removeNode, removeTableElementRow as removeRow, removeSeries, renderToCanvas, reorderAnimationDown, reorderAnimationUp, replaceInSlides, replaceMatch, requestPresentationFullscreen, resizeElement, resolveCaptionTracks, resolveChartKind, resolveFontVariant, resolveHyperlinkHref, resolveInteractiveElementId, resolveMediaSrc, resolveOleType, resolveParagraphBullet, resolvePresenterNotes, resolveProfileInitial, resolveRegionCode, resolveSlideAutoAdvanceMs, resolvePalette as resolveSmartArtPalette, resolveThemeCatalogEntry, resolveTransitionDuration, restoreSessionDeck, revealedElementStyles, routeOrthogonalConnector, rowStyle, rulerDragToGuidePosition, rulerHighlight, rulerStripTicks, sampleColorFromSlide, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, saveViewerProfile, 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, setDataPointMarker, 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, slidesWithReappliedLayout, smartArtNodes, paletteColour as smartArtPaletteColour, snapToGridStep, splitCursorCell, splitMergedCell, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, stringFromEvent, strokeColorOf, strokeToInkElement, strokeWidthOf, styleShadowFilter, textAdvancedPatch, textAdvancedStateFromStyle, textAdvancedStateOf, textColorOf, textDirectionPatch, textStyleOf, textStylePatch, themeStyle, themeToCssVars, thumbnailHeight, thumbnailZoom, toggleCommentResolvedInList, toggleNodeBold, toggleNodeItalic, toggleSheet, topLevelNodeCount, transformSelectedTextCase, translationsEn, ungroupElements, updateElementById, updateGlowPatch, updateGradientStopPatch, updateInnerShadowPatch, updateOuterShadowPatch, updateReflectionPatch, vAlignPatch, validatePassword, validatePrintSettings, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, waypointsToPathD, worstStatus, zoomTargetSlideIndex };
|
|
19637
|
-
export type { AccessibilityIssueGroup, AccountAuthConfig, ActionDescriptor, AiCanvasHighlight, AiChatInitState, AiHistoryInitDeps, AiLogChat, AiLogExport, AiLogFormat, AiLogMessage, AiPanelSelectionAccessors, AlignBox, AlignMode, AnimationClickGroup, AnimationGroup, AnimationPresetCategory, AnimationPresetEntry, AnimationPresetPick, AnnotationInkInsert, AnnotationStroke, AttachTouchGesturesConfig, AwarenessLike, BarRect, Box, BridgeDeps, BroadcastConfig, BroadcastDefaults, CSSProperties, CanvasSize, CellCoord, CellParagraph, CellTextRun, ChartPartRef, ChartPartSelection, ChartValueDrag, ChartViewModel, ClassValue, ClrChangeParams, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, CornerHandleBox, CustomShow, CustomThemeEdit, DestroyableYDoc, DiagonalBorderInfo, DistributeMode, DocumentProperties, DrawingViewBox, DuotoneFilterDef, EffectsState, EmbeddedFontStyles, EquationTemplate, EyedropperResult, FindOptions, FindResult, FocusChip, FocusSelectionInput, GifFrame, GifFramePlan, GifPlanOptions, GlowState, GradientState, GradientStop$1 as GradientStop,
|
|
21150
|
+
export { ALIGN_OPTIONS, ANIMATION_PRESET_CATEGORIES, AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AVATAR_COLOR_SWATCHES, AXIS_LABEL_COLOR, AccessibilityPanelComponent, AccessibilityService, AccountPageComponent, ActionSettingsPanelComponent, AdvancedChartEditorComponent, AiChangeOverlayComponent, AiChatPanelComponent, AiChatService, AiComposerComponent, AiFocusBarComponent, AiFocusHighlightOverlayComponent, AiHistoryMenuComponent, AiHistoryService, AiMessageListComponent, AiPanelStore, AiProposalCardComponent, AiSettingsSectionComponent, AiToolCallCardComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, AutosaveRecoveryDialogComponent, AutosaveService, BroadcastDialogComponent, CHART_EDITOR_STYLES, CURSOR_PALETTE, CanvasFitService, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointMarkerOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartElementViewComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartPartSelectionService, ChartPrimitivesComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, CollaborationCursorsComponent, CollaborationService, ColorChangedImageComponent, CommentMarkersOverlayComponent, 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_PATTERN_FILL_PRESET, DEFAULT_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_STYLE, DEFAULT_TABLE_ROW_HEIGHT, DEFAULT_TEXT_COLOR, DEFAULT_VIEWER_PROFILE, DIRECTIONAL_PRESETS, DIRECTION_OPTIONS, DocumentPropertiesCardComponent, EMBEDDED_FONTS_STYLE_ID, EMPHASIS_PRESETS, ENTRANCE_PRESETS, TEMPLATES as EQUATION_TEMPLATES, EXIT_PRESETS, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportProgressModalComponent, ExportService, FieldContextService, FindBarComponent, FindReplaceBarComponent, FollowModeBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GALLERY_THEME_PRESETS, GRIDLINE_COLOR, GradientPickerComponent, HANDOUT_OPTIONS, HeaderFooterDialogComponent, HyperlinkDialogComponent, ImagePropertiesPanelComponent, InkDrawingService, InkRendererComponent, InsertSmartArtDialogComponent, InspectorPaneHeaderComponent, InspectorPanelComponent, IsMobileService, KeepAnnotationsDialogComponent, LOCALE_CATALOG, LONG_PRESS_DURATION_MS, LONG_PRESS_MOVE_TOLERANCE_PX, LoadContentService, LocalPresencePublisher, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MOTION_PATH_COLUMNS, MediaPreviewComponent, MediaPropertiesPanelComponent, MediaRendererComponent, MediaTrimTimelineComponent, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesHandoutCardComponent, NotesPanelComponent, NotesToolbarComponent, OleRendererComponent, OutlineViewOverlayComponent, POWER_POINT_VIEWER_PROVIDERS, PPTX_OPEN_ACCEPT, PRESENTATION_OPEN_EXTENSIONS, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PRESENTER_TIMER_SEGMENT_MS, PX_PER_CM, PX_PER_INCH, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentToolbarAutoHide, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationPropertiesPanelComponent, PresentationSettingsCardComponent, PresentationSubtitleBarComponent, PresentationToolbarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, REPEAT_MODE_OPTIONS, RESIZE_HANDLES, RULER_FONT_SIZE, RULER_THICKNESS, ReadingViewOverlayComponent, RemoteSelectionOverlayComponent, RibbonAnimationGalleryComponent, RibbonAnimationsSectionComponent, RibbonArrangeSectionComponent, RibbonColorPopoverComponent, RibbonComponent, RibbonDesignSectionComponent, RibbonDrawSectionComponent, RibbonDrawingGroupComponent, RibbonEditingSectionComponent, RibbonFileSectionComponent, RibbonFontControlsComponent, RibbonHomeSectionComponent, RibbonHyperlinkButtonComponent, RibbonInsertFieldsComponent, RibbonInsertSectionComponent, RibbonMotionPathGalleryComponent, RibbonParagraphControlsComponent, RibbonPrimaryRowComponent, RibbonReviewSectionComponent, RibbonShapeExtrasComponent, RibbonSlideshowSectionComponent, RibbonTransitionsSectionComponent, RibbonViewSectionComponent, RulerGuidesService, SEQUENCE_OPTIONS, SEVERITY_GROUPS, SEVERITY_LABELS, SHORTCUT_REFERENCE_ITEMS, SLIDE_TRANSITION_KEYFRAMES, DEFAULT_PALETTE as SMARTART_DEFAULT_PALETTE, PALETTES as SMARTART_PALETTES, SMART_ART_COLOR_SCHEMES, SMART_ART_STYLE_OPTIONS, SUB_ITEM_LABEL, SVG_WARP_PRESETS, SWIPE_MAX_VERTICAL_PX, SWIPE_THRESHOLD_PX, SelectionPaneComponent, SetUpSlideShowDialogComponent, SettingsAppearanceTabComponent, SettingsDialogComponent, SettingsLanguageTabComponent, ShareDialogComponent, ShortcutPanelComponent, ShowOptionsFieldsetComponent, ShowSlidesFieldsetComponent, SignatureStrippedDialogComponent, SignaturesPanelComponent, SignaturesService, SlideBackgroundCardComponent, SlideCanvasComponent, SlideDefaultInspectorComponent, SlideDiffChangesComponent, SlideDiffRowComponent, SlideDiffThumbnailsComponent, SlideSizeCardComponent, SlideSorterOverlayComponent, SlideThemeOverridePanelComponent, SlideTransitionCardComponent, SlidesPanelComponent, SmartArt3DRendererComponent, SmartArt3DService, SmartArtPreviewComponent, SmartArtPropertiesComponent, SmartArtRendererComponent, StatusBarComponent, TABLE_STRUCTURE_TOGGLES, TEXT_3D_BOTTOM_BEVEL_KEYS, TEXT_3D_TOP_BEVEL_KEYS, TEXT_DIRECTION_OPTIONS, THEME_CATALOG, TIMING_CURVE_OPTIONS, TRIGGER_OPTIONS, TYPE_LABELS, TableCellAdvancedFillComponent, TableCellFormattingComponent, TableDataEditorComponent, TablePropertiesComponent, TableRendererComponent, TableResizeOverlayComponent, TableSelectionService, TagsCardComponent, Text3DBevelSectionComponent, Text3DPanelComponent, TextAdvancedPanelComponent, ThemeEditorFieldsComponent, ThemeGalleryComponent, ThemeSelectorCardComponent, TitleBarComponent, TitleBarSearchComponent, TransitionDirectionPickerComponent, TransitionPreviewComponent, VALIGN_OPTIONS, VIEWER_THEME, VersionHistoryPanelComponent, ViewerCanvasEditingService, ViewerCollabCursorService, ViewerCollaborationSessionService, ViewerCompareService, ViewerCustomShowsService, ViewerDialogsService, ViewerDocumentPropertiesService, ViewerExportService, ViewerExtraDialogsComponent, ViewerFileIOService, ViewerFindReplaceService, ViewerFormatPainterService, ViewerInspectorPanelService, ViewerKeyboardService, ViewerMobileSheetService, ViewerPresentationModeService, ViewerThemeGalleryService, ViewerTouchGesturesService, ViewerZoomService, WEBM_MIME_CANDIDATES, WriteBackScheduler, ZERO_LINE_COLOR, ZoomNavigationService, ZoomRendererComponent, ZoomTargetService, addCategory, addCommentToList, addGradientStopPatch, addItem, addSeries, addSubItem, advanceStep, affordanceElements, aiToggleVisible, alignPatch, animationFor, animationPresetLabelKey, annotationMapToInkInserts, applyAcceptedDiff, applyAnimationPreset, applyFindReplacements, applyFormatToElement, applyMove, applyResize, applyTableStylePreset, asMediaElement, assignUserColor, attachShowVisibilityPause, attachTouchGestures, axisTickValues, beginNodeEdit, bevelSizePatch, boolFromEvent, bringForward, bringToFront, buildBarActions, buildBroadcastConfig, buildBroadcastViewerUrl, buildCategoryLabels, buildCellParagraphs, buildChartViewModel, buildChatLogExport, buildChatLogMarkdown, buildChromeStyle, buildClearHyperlinkPatch, buildClickGroups, buildColStyles, buildCollaborationConfig, buildComboViewModel, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildEquationElement, buildEquationSegment, buildFallbackViewModel, buildFontFaceRule, buildGradientFillCss, buildGridlinesAndLabels, buildHyperlinkPatch, buildInkContainerStyle, buildInkStrokes, buildLegend, buildModel3DContainerStyle, buildModel3DViewModel, buildOleActionModel, buildOleInfoRows, buildPatternFillCss, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildRegionMapViewModel, buildSaveSlides, buildShareUrl, buildSmartArtInsertElement, buildSmartArtNodes, buildStockViewModel, buildSurfaceViewModel, buildTableViewModel, buildTreemapViewModel, buildTrimFragment, buildWaterfallViewModel, buildZeroLine, buildZoomContainerStyle, buildZoomViewModel, bulletIndentPx, canAddTopLevelNode, canGroupSelection, canRemoveTopLevelNode, canSetStrokeWidth, canStartBroadcast, canStartShare, canUngroupSelection, canUseClipboard, captionDisplayText, cellRunStyle, cellStyleToStyleMap, cellTdStyle, changeCountLabel, changeIcon, characterSpacingPatch, chartPreserveAspectRatio, 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, computeResizeHandleBoxes, computeRotateHandleBox, computeScatterDots, computeScatterXDomain, computeSelectionBoxes, computeSingleSelected, computeSlideIndices, computeSnap, computeStackedBarRects, computeStackedValueRange, computeTrendlinePrimitives, computeValueRange, convertOmmlToMathMl, copyFormatFromElement, countAccessibilityIssues, countAnnotationStrokes, createAngularAiBridge, createCustomShow, createSwipeDismissDrag, createWebrtcBundle, createWebsocketBundle, cssObjectToStyleMap, currentColorScheme, currentLayout, currentStyle, defaultCssVars, defaultRadius, defaultThemeColors, deleteElementsByIds, deleteVersion as deleteRecoveryVersion, demoteNode, deriveModel3DBlobUrl, derivePresenceList, describeSmartArtBounds, disableGlowPatch, disableInnerShadowPatch, disableOuterShadowPatch, disableReflectionPatch, disableSoftEdgePatch, duplicateElementById, durationOf, effectsStateOf, enableGlowPatch, enableInnerShadowPatch, enableOuterShadowPatch, enableReflectionPatch, enableSoftEdgePatch, encodeGif, endShowMediaCleanup, estimatePageCount, evenColumnWidths, evenRowHeights, exitPresentationFullscreen, exportAiChatLogs, extractPathPoints, eyedropperAvailable, fillColorOf, findInSlides, findOwningSlideIndex, findSlideIndexByElementId, firstVisibleIndex, fitPolynomial, fitZoom, focusTargetChips, fontMimeForFormat, fontSizeOf, forgetSessionDeck, formatAxisValue, formatBytes, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, generateCustomShowId, generatePressureCircles, generateTicks, getClrChangeParams, getContainerStyle, getDuotoneFilterDef, getImageSrc, getLocalStorageUsageSummary, getOleAriaLabel, getOleBadgeLabel, getOleDisplayName, getOleDownloadFileName, getOleTypeColor, getOleTypeLabel, getPasswordStrength, getPatternSvg, getPlaceholderStyle, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getSessionTabId, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getSmartArtNodeBounds, getSpeechRecognitionCtor, getTextBlockStyle, getTextWarp, getTouchDistance, getWarpCategory, getWarpPath, gradientStateFromStyle, gradientStateOf, gradientStatePatch, gridColumns, groupIssuesBySeverity, hasAnimation, hasCopyableFormat, hasExistingLink, hasExitedFullscreen, hasGradientFill, hasPressureVariation, hasVisibleSlideAfter, headerLabel, imageDimensions, inkViewBox, insertTableElementColumn as insertColumn, insertTableElementRow as insertRow, interpolateWidth, isAudienceTab, isBold, isBrowserOpenableMime, isChildNode, isElementInteractive, isInjectableUrl, isItalic, isLegacyBinaryPresentation, isPpactionUrl, isPresenterMessage, isSigned, isSupportedPresentationFile, isTextElement, isTwoTableFocus, isUnderline, isUrlSafe, isValidRoomId, isViewportBackgroundPressTarget, isZoomActivationKey, issueTrackKey, issueTypeLabel, keyToLabel, lastVisibleIndex, latexToMathml, layoutConnectorPaints, layoutNodeLabels, linePointsToSvgString, lineSpacingPatch, loadAudienceContent, loadSessionDeck, mediaFallbackFor, mediaSurfaceFor, mergeCaptionResults, mergeDown, mergeRight, mergeSelection, moveElementBy, moveNodeDown, moveNodeUp, msToFrameDelayCs, narrowToCircle, narrowToPolygon, narrowToRect, newChartElement, newEquationElement, newPresetShapeElement, newShapeElement, newSmartArtElement, newTableElement, newTextElement, nextVisibleIndex, nodeBold, nodeEditBox, nodeFillColor, nodeFontColor, nodeIdFromKey, nodeItalic, nodeStyle, normalizeFontFormat, normalizeSlidesPerPage, normalizeValue, numFromEvent, ommlToMathml, ooxmlDashToCssBorderStyle, openNativeEyeDropper, overallStatus, paletteColor, parseAudienceNonce, parseNodeTextarea, partitionSlides, patchChartData, patchChartStyle, patchTableData, patchTextStyle, patternPresetOptions, pendingElementStyles, pickColorByClickFallback, pickFile, pickSupportedMimeType, planGifFrames, planVideoSegments, pointsToSvgPathD, presenceToCursors, presentationBaseName, presentationStageStyle, presenterTimerProgress, presetByLayout, presetsForCategory, pressuresToWidths, prevVisibleIndex, projectDrawingShapes, promoteNode, provideViewerTheme, radarAngle, radarRingPoints, readAsDataUrl, recordWebm, redistributeColumnWidth, registerCrossSlideAudio, rememberSessionDeck, removeAnimation, removeCategory, removeTableElementColumn as removeColumn, removeCommentFromList, removeElementAnimation, removeGradientStopPatch, removeNode, removeTableElementRow as removeRow, removeSeries, renderToCanvas, reorderAnimationDown, reorderAnimationUp, replaceInSlides, replaceMatch, requestPresentationFullscreen, resizeElement, resolveCaptionTracks, resolveChartKind, resolveFontVariant, resolveHyperlinkHref, resolveInteractiveElementId, resolveMediaSrc, resolveOleType, resolveParagraphBullet, resolvePresenterNotes, resolveProfileInitial, resolveRegionCode, resolveSlideAutoAdvanceMs, resolvePalette as resolveSmartArtPalette, resolveThemeCatalogEntry, resolveTransitionDuration, restoreSessionDeck, revealedElementStyles, routeOrthogonalConnector, rowStyle, rulerDragToGuidePosition, rulerHighlight, rulerStripTicks, sampleColorFromSlide, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, saveViewerProfile, savedPresentationFileName, scanAvailableFonts, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, selectValue, sendBackward, sendToBack, sequentialColorScale, serializeWriteBack, seriesColor, setAnimationEmphasis, setAnimationEntrance, setAnimationExit, setAxis, setAxisLogScale, setAxisTitleStyle, setCategoryLabel, setCellText, setColorScheme, setDataLabels, setDataPointExplosion, setDataPointFill, setDataPointLabel, setDataPointMarker, 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, slidesWithReappliedLayout, smartArtNodes, paletteColour as smartArtPaletteColour, snapToGridStep, splitCursorCell, splitMergedCell, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, stringFromEvent, strokeColorOf, strokeToInkElement, strokeWidthOf, styleShadowFilter, textAdvancedPatch, textAdvancedStateFromStyle, textAdvancedStateOf, textColorOf, textDirectionPatch, textStyleOf, textStylePatch, themeStyle, themeToCssVars, thumbnailHeight, thumbnailZoom, toggleCommentResolvedInList, toggleNodeBold, toggleNodeItalic, toggleSheet, topLevelNodeCount, transformSelectedTextCase, translationsEn, updateElementById, updateGlowPatch, updateGradientStopPatch, updateInnerShadowPatch, updateOuterShadowPatch, updateReflectionPatch, vAlignPatch, validatePassword, validatePrintSettings, validateRoomId, valueToY, vermilionDarkColors, vermilionDarkTheme, vermilionLightColors, vermilionLightTheme, vermilionRadius, waypointsToPathD, worstStatus, zoomTargetSlideIndex };
|
|
21151
|
+
export type { AccessibilityIssueGroup, AccountAuthConfig, ActionDescriptor, ActiveShow, AiCanvasHighlight, AiChatInitState, AiHistoryInitDeps, AiLogChat, AiLogExport, AiLogFormat, AiLogMessage, AiPanelSelectionAccessors, AlignBox, AlignMode, AnimationClickGroup, AnimationGroup, AnimationPresetCategory, AnimationPresetEntry, AnimationPresetPick, AnnotationInkInsert, AnnotationStroke, AttachTouchGesturesConfig, AwarenessLike, BarRect, Box, BridgeDeps, BroadcastConfig, BroadcastDefaults, CSSProperties, CanvasSize, CellCoord, CellParagraph, CellTextRun, ChartPartRef, ChartPartSelection, ChartValueDrag, ChartViewModel, ClassValue, ClrChangeParams, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, CornerHandleBox, CustomShow, CustomThemeEdit, DestroyableYDoc, DiagonalBorderInfo, DistributeMode, DocumentProperties, DrawingViewBox, DuotoneFilterDef, EffectsState, EmbeddedFontStyles, EquationTemplate, EyedropperResult, FindOptions, FindResult, FocusChip, FocusSelectionInput, GifFrame, GifFramePlan, GifPlanOptions, GlowState, GradientState, GradientStop$1 as GradientStop, HandleBox, HandoutSlidesPerPage, HyperlinkDraft, InkPoint, InkStroke, InlineEditState, InnerShadowState, LegendEntry, LinePoint, LinearFit, LocalIdentity, LocalStorageUsageSummary, LocaleCatalogEntry, MobileSheetKey, Model3DViewModel, MotionPathColumn, MotionPathEntry, NodeEditBox, NotesSegmentViewModel, ObjectUrlFactory, OleActionModel, OleInfoRow, OuterShadowState, OutlineCommit, OverallSignatureStatus, PartitionedSlides, PathPoint, PieSliceGeometry, PieSliceOptions, PlotLayout, PlotLayoutOptions, PositionUpdate, PowerPointViewerAPI, PptxAiBridge, PptxAiConfig, PptxAiConnection, PptxAiContextStrategy, PptxAiElementUpdate, PptxAiToolName, PptxAiUIMessage, PptxAiWritePolicy, PresentToolbarAction, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, PresenterTimerProgress, PressureCircle, PrintColorMode, PrintHtmlDocumentOptions as PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, ProposalView, ProviderBundle, ProviderLike, RadarPoint, RecordWebmOptions, RecoveryVersion, ReflectionState, RemoteCursor, SanitizedPresence as RemotePresence, RenderedShape, ReplaceResult, ResizeHandle, ResolvedCaptionTrack, ResolvedFontVariant, ResolvedOleType, RulerUnit, SavedPresentationFormat, ScatterDot, ScatterXDomain, SelectionBox, SessionDeck, ShapeStyleChanges, ShareDefaults$1 as ShareDefaults, ShareFormFields, ShortcutReferenceItem, SignatureStatusKind, SlideInspectorTab, SlideTransitionAnimations, SmartArtInsertEvent, SmartArtNodeBounds, SnapBox, SnapGuide, SnapResult, SoftEdgeState, SpeechAlternative, SpeechRecognitionCtor, SpeechRecognitionEventLite, SpeechRecognitionLite, SpeechResult, SpeechResultList, SpeechSupportState, StagedProposal, StrokeToInkElementOpts, StyleMap, SupportedChartKind, SvgAreaGradient, SvgCircle, SvgLine, SvgPath, SvgPolygon, SvgPolyline, SvgPrimitive, SvgRect, SvgText, SwipeDismissDrag, TableBooleanFlag, TableCellSelection, TableCellViewModel, TableRowViewModel, TemplateElementsBySlideId, Text3DBevelKeys, TextAdvancedChanges, TextAdvancedState, TextStyleChanges, TextWarpCssDef, TextWarpDef, TextWarpPathDef, ThemeCatalogEntry, Tick, ToolbarActionId, TouchGestureCallbacks, TranslationKey, ValueRange, VideoPlanOptions, VideoSegmentPlan, ViewerMode, ViewerProfile, ViewerSettings, ViewerTheme, ViewerThemeColors, ZoomTranslate, ZoomViewModel };
|
|
21152
|
+
//# sourceMappingURL=pptx-angular-viewer.d.ts.map
|