pptx-angular-viewer 1.1.52 → 1.1.54
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 +7 -0
- package/README.md +1 -1
- package/fesm2022/pptx-angular-viewer.mjs +6777 -836
- package/fesm2022/pptx-angular-viewer.mjs.map +1 -1
- package/package.json +2 -2
- package/types/pptx-angular-viewer.d.ts +1124 -114
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { Signal, OnDestroy, OnInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
|
|
3
3
|
import * as pptx_viewer_core from 'pptx-viewer-core';
|
|
4
|
-
import { PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxElementAnimation, PptxSlide, TextSegment, TextStyle, PptxTransitionType, PptxEmbeddedFont, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, PptxComment, SmartArtLayout, PptxTheme, PptxSlideMaster, PptxCoreProperties, PptxCustomProperty, PptxHeaderFooter, ParsedSignature, PptxTableCell, PptxThemePreset, InkPptxElement, Model3DPptxElement, ZoomPptxElement, PptxSlideTransition, TablePptxElement, ChartPptxElement, SmartArtPptxElement, PptxSmartArtData, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartSeries, PptxChartType, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, PptxAnimationPreset, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, PptxAnimationSequence, SignatureStatus } from 'pptx-viewer-core';
|
|
4
|
+
import { PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxElementAnimation, PptxSlide, TextSegment, TextStyle, PptxTransitionType, PptxEmbeddedFont, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, PptxComment, SmartArtLayout, PptxTheme, PptxSlideMaster, PptxCoreProperties, PptxCustomProperty, PptxHeaderFooter, ParsedSignature, PptxTableCell, PptxTableData, PptxPresentationProperties, PptxCustomShow, PptxThemePreset, InkPptxElement, Model3DPptxElement, ZoomPptxElement, PptxSlideTransition, TablePptxElement, ChartPptxElement, SmartArtPptxElement, PptxSmartArtData, PptxTableCellStyle, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartSeries, PptxChartType, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, PptxAnimationPreset, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, PptxAnimationSequence, SignatureStatus } from 'pptx-viewer-core';
|
|
5
5
|
import * as pptx_angular_viewer from 'pptx-angular-viewer';
|
|
6
6
|
import { Options } from 'html2canvas-pro';
|
|
7
7
|
import { SafeHtml } from '@angular/platform-browser';
|
|
@@ -649,6 +649,81 @@ declare function revealedElementStyles(groups: readonly AnimationClickGroup[], s
|
|
|
649
649
|
*/
|
|
650
650
|
declare function pendingElementStyles(groups: readonly AnimationClickGroup[], step: number): Map<string, CSSProperties>;
|
|
651
651
|
|
|
652
|
+
/**
|
|
653
|
+
* table-style.ts — framework-agnostic table render helpers.
|
|
654
|
+
*
|
|
655
|
+
* A focused port of the React table render helpers that operate on the
|
|
656
|
+
* structured {@link PptxTableData} model (not raw OOXML). The renderer is
|
|
657
|
+
* viewer-first: it consumes the already-parsed cell styles, banding flags,
|
|
658
|
+
* and column widths that `pptx-viewer-core` produces, and maps them to CSS.
|
|
659
|
+
*
|
|
660
|
+
* Returns plain {@link TableCellCss} objects (no framework `CSSProperties`
|
|
661
|
+
* type) so React, Vue, and Angular can each apply them to their own style
|
|
662
|
+
* binding.
|
|
663
|
+
*
|
|
664
|
+
* Ports of:
|
|
665
|
+
* - `viewer/utils/table-render-helpers.ts` → {@link cellStyleToCss}
|
|
666
|
+
* - `viewer/utils/table-band-style.tsx` → {@link getTableCellBandStyle}
|
|
667
|
+
*
|
|
668
|
+
* Pattern fills are rendered as tiled inline SVG using {@link getPatternSvg}
|
|
669
|
+
* from `fill-style.ts`, which is already part of the shared barrel.
|
|
670
|
+
* Scheme-colour band resolution uses the optional {@link TableStyleContext}
|
|
671
|
+
* passed to {@link getTableCellBandStyle}.
|
|
672
|
+
*/
|
|
673
|
+
|
|
674
|
+
/**
|
|
675
|
+
* Diagonal border info derived from a {@link PptxTableCellStyle}, for the SVG
|
|
676
|
+
* overlay drawn inside a cell. Mirrors the React `DiagonalBorderInfo`.
|
|
677
|
+
*/
|
|
678
|
+
interface DiagonalBorderInfo {
|
|
679
|
+
diagDownColor?: string;
|
|
680
|
+
diagDownWidth?: number;
|
|
681
|
+
diagUpColor?: string;
|
|
682
|
+
diagUpWidth?: number;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
/**
|
|
686
|
+
* table-merge.ts — framework-agnostic table cell merge / split / selection math.
|
|
687
|
+
*
|
|
688
|
+
* Pure operations over the structured {@link PptxTableData} model: compute the
|
|
689
|
+
* bounding rectangle of a cell selection, expand it to cover any merge groups
|
|
690
|
+
* it overlaps, validate whether a selection can be merged or a cell split, and
|
|
691
|
+
* produce new (immutable) `PptxTableData` copies with the merge/split applied.
|
|
692
|
+
*
|
|
693
|
+
* Consolidated from the React viewer's:
|
|
694
|
+
* - `viewer/utils/table-merge-core.ts` → merge / split + rect helpers
|
|
695
|
+
* - `viewer/utils/table-selection-utils.ts` → selection rect / enumeration
|
|
696
|
+
*
|
|
697
|
+
* No framework imports — consumed by every binding (each re-exports these
|
|
698
|
+
* symbols through its own thin shim so colocated consumers keep their import
|
|
699
|
+
* paths unchanged).
|
|
700
|
+
*/
|
|
701
|
+
|
|
702
|
+
/** A cell coordinate within a table (0-based). */
|
|
703
|
+
interface CellCoord {
|
|
704
|
+
row: number;
|
|
705
|
+
col: number;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
/**
|
|
709
|
+
* table-style-presets.ts - framework-agnostic table style preset catalogue.
|
|
710
|
+
*
|
|
711
|
+
* Pure data: the quick-style swatches (light / medium / dark families) shown in
|
|
712
|
+
* every binding's table properties panel. Each preset carries the header fill /
|
|
713
|
+
* foreground, banded-row background, and border colour applied when the user
|
|
714
|
+
* picks it. Ported from the React viewer's `constants/table-styles.ts` so React,
|
|
715
|
+
* Vue, and Angular consume one copy.
|
|
716
|
+
*/
|
|
717
|
+
/** A single table quick-style swatch. */
|
|
718
|
+
interface TableStylePreset {
|
|
719
|
+
id: string;
|
|
720
|
+
label: string;
|
|
721
|
+
headerBg: string;
|
|
722
|
+
headerFg: string;
|
|
723
|
+
bandBg: string;
|
|
724
|
+
borderColor: string;
|
|
725
|
+
}
|
|
726
|
+
|
|
652
727
|
/**
|
|
653
728
|
* Framework-agnostic helpers for inline (on-canvas) SmartArt node text editing.
|
|
654
729
|
*
|
|
@@ -1379,6 +1454,51 @@ declare function derivePresenceList(states: Map<number, Record<string, unknown>>
|
|
|
1379
1454
|
*/
|
|
1380
1455
|
declare function presenceToCursors(presence: readonly SanitizedPresence[], activeSlideIndex?: number): RemoteCursor[];
|
|
1381
1456
|
|
|
1457
|
+
/**
|
|
1458
|
+
* slide-compare — pure, framework-agnostic slide-diff engine shared by every
|
|
1459
|
+
* binding (React / Vue / Angular).
|
|
1460
|
+
*
|
|
1461
|
+
* Provides two entry points over the same element-diff core:
|
|
1462
|
+
* - `comparePresentation(base, compare)` — diffs two full `PptxData` documents
|
|
1463
|
+
* (the React surface).
|
|
1464
|
+
* - `compareSlides(base, compare)` — diffs two `PptxSlide[]` arrays directly
|
|
1465
|
+
* (the Vue editor-foundation surface), plus `compareSlide` for a single
|
|
1466
|
+
* slide pair and `diffSlideElements` for the flattened element trees.
|
|
1467
|
+
*
|
|
1468
|
+
* DOM-free and side-effect-free.
|
|
1469
|
+
*/
|
|
1470
|
+
|
|
1471
|
+
type SlideDiffStatus = 'added' | 'removed' | 'changed' | 'unchanged';
|
|
1472
|
+
type ElementChangeKind = 'added' | 'removed' | 'moved' | 'resized' | 'textChanged';
|
|
1473
|
+
interface ElementChange {
|
|
1474
|
+
elementId: string;
|
|
1475
|
+
label: string;
|
|
1476
|
+
kind: ElementChangeKind;
|
|
1477
|
+
description: string;
|
|
1478
|
+
}
|
|
1479
|
+
interface SlideDiff {
|
|
1480
|
+
status: SlideDiffStatus;
|
|
1481
|
+
/** Index in the base (current) presentation, or -1 for added slides. */
|
|
1482
|
+
baseIndex: number;
|
|
1483
|
+
/** Index in the compare (other) presentation, or -1 for removed slides. */
|
|
1484
|
+
compareIndex: number;
|
|
1485
|
+
/** The base slide data (undefined for added slides). */
|
|
1486
|
+
baseSlide?: PptxSlide;
|
|
1487
|
+
/** The compare slide data (undefined for removed slides). */
|
|
1488
|
+
compareSlide?: PptxSlide;
|
|
1489
|
+
/** Per-element changes when status is `changed`. */
|
|
1490
|
+
changes: ElementChange[];
|
|
1491
|
+
}
|
|
1492
|
+
interface CompareResult {
|
|
1493
|
+
diffs: SlideDiff[];
|
|
1494
|
+
baseSlideCount: number;
|
|
1495
|
+
compareSlideCount: number;
|
|
1496
|
+
addedCount: number;
|
|
1497
|
+
removedCount: number;
|
|
1498
|
+
changedCount: number;
|
|
1499
|
+
unchangedCount: number;
|
|
1500
|
+
}
|
|
1501
|
+
|
|
1382
1502
|
/**
|
|
1383
1503
|
* `slide-transition-types` — pure types, direction/orientation resolution, and
|
|
1384
1504
|
* shared constants backing the slide-transition CSS resolver.
|
|
@@ -1807,6 +1927,17 @@ interface CustomShow {
|
|
|
1807
1927
|
slideIds: readonly string[];
|
|
1808
1928
|
}
|
|
1809
1929
|
|
|
1930
|
+
/**
|
|
1931
|
+
* Format an epoch-ms timestamp as a short month / day / time label, e.g.
|
|
1932
|
+
* "Jun 25, 02:14", for the version-history panels.
|
|
1933
|
+
*/
|
|
1934
|
+
declare function formatVersionTimestamp(ts: number): string;
|
|
1935
|
+
/**
|
|
1936
|
+
* Format an epoch-ms timestamp as a coarse relative label ("Just now", "5m
|
|
1937
|
+
* ago", "3h ago", "2d ago").
|
|
1938
|
+
*/
|
|
1939
|
+
declare function formatRelativeTime(ts: number): string;
|
|
1940
|
+
|
|
1810
1941
|
/**
|
|
1811
1942
|
* broadcast-helpers.ts: framework-agnostic helpers for the Broadcast dialog,
|
|
1812
1943
|
* shared by the React, Vue and Angular bindings.
|
|
@@ -2043,7 +2174,7 @@ declare function issueTrackKey(issue: AccessibilityIssue, index: number): string
|
|
|
2043
2174
|
*/
|
|
2044
2175
|
|
|
2045
2176
|
/** A single gradient stop, mirroring the ShapeStyle array item shape. */
|
|
2046
|
-
interface GradientStop {
|
|
2177
|
+
interface GradientStop$1 {
|
|
2047
2178
|
color: string;
|
|
2048
2179
|
position: number;
|
|
2049
2180
|
opacity?: number;
|
|
@@ -2053,7 +2184,7 @@ interface GradientState {
|
|
|
2053
2184
|
type: 'linear' | 'radial';
|
|
2054
2185
|
/** Angle in degrees (only meaningful for linear). */
|
|
2055
2186
|
angle: number;
|
|
2056
|
-
stops: GradientStop[];
|
|
2187
|
+
stops: GradientStop$1[];
|
|
2057
2188
|
}
|
|
2058
2189
|
|
|
2059
2190
|
/**
|
|
@@ -2880,6 +3011,41 @@ declare class MobileBottomBarComponent {
|
|
|
2880
3011
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileBottomBarComponent, "pptx-mobile-bottom-bar", never, { "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "commentCount": { "alias": "commentCount"; "required": false; "isSignal": true; }; "activeSheet": { "alias": "activeSheet"; "required": false; "isSignal": true; }; }, { "openSlides": "openSlides"; "insert": "insert"; "openFormat": "openFormat"; "openComments": "openComments"; "notes": "notes"; }, never, never, true, never>;
|
|
2881
3012
|
}
|
|
2882
3013
|
|
|
3014
|
+
/**
|
|
3015
|
+
* presentation-annotations-helpers.ts: Pure geometry helpers for presentation
|
|
3016
|
+
* ink annotations (pen, highlighter, eraser, laser).
|
|
3017
|
+
*
|
|
3018
|
+
* Ported from React:
|
|
3019
|
+
* packages/react/src/viewer/components/PresentationAnnotationOverlay.tsx
|
|
3020
|
+
* packages/react/src/viewer/hooks/usePresentationAnnotations.ts
|
|
3021
|
+
*
|
|
3022
|
+
* No Angular dependencies; all functions are pure so they can be unit-tested
|
|
3023
|
+
* without TestBed.
|
|
3024
|
+
*/
|
|
3025
|
+
/** A single {x, y} coordinate in slide-space pixels. */
|
|
3026
|
+
interface AnnotationPoint {
|
|
3027
|
+
x: number;
|
|
3028
|
+
y: number;
|
|
3029
|
+
}
|
|
3030
|
+
/** An ink stroke: a sequence of points with visual properties. */
|
|
3031
|
+
interface AnnotationStroke {
|
|
3032
|
+
id: string;
|
|
3033
|
+
points: AnnotationPoint[];
|
|
3034
|
+
color: string;
|
|
3035
|
+
width: number;
|
|
3036
|
+
/** 1 = opaque (pen); 0.4 = semi-transparent (highlighter). */
|
|
3037
|
+
opacity: number;
|
|
3038
|
+
}
|
|
3039
|
+
/** The tool currently armed in presentation mode. */
|
|
3040
|
+
type PresentationTool = 'none' | 'pen' | 'highlighter' | 'eraser' | 'laser';
|
|
3041
|
+
/** Per-slide annotation storage: slide index → strokes. */
|
|
3042
|
+
type SlideAnnotationMap = Map<number, AnnotationStroke[]>;
|
|
3043
|
+
/** Transient laser-pointer position in slide-space pixels. */
|
|
3044
|
+
interface LaserPosition {
|
|
3045
|
+
x: number;
|
|
3046
|
+
y: number;
|
|
3047
|
+
}
|
|
3048
|
+
|
|
2883
3049
|
/** BroadcastChannel name shared between presenter and audience tabs. */
|
|
2884
3050
|
declare const PRESENTER_CHANNEL_NAME = "pptx-viewer-presenter";
|
|
2885
3051
|
/** Unique origin identifier so we only react to our own messages. */
|
|
@@ -3189,74 +3355,55 @@ declare function getTextBlockStyle(el: PptxElement): StyleMap;
|
|
|
3189
3355
|
declare function getImageSrc(el: PptxElement, mediaDataUrls: Map<string, string>): string | undefined;
|
|
3190
3356
|
|
|
3191
3357
|
/**
|
|
3192
|
-
*
|
|
3358
|
+
* table-cell-style.ts: pure cell/run style projection for table rendering.
|
|
3359
|
+
*
|
|
3360
|
+
* Extracted from `table-renderer-helpers.ts` (which now re-exports these for a
|
|
3361
|
+
* stable public surface) to keep each module focused and under the repo's
|
|
3362
|
+
* per-file line budget.
|
|
3193
3363
|
*
|
|
3194
3364
|
* Ported from:
|
|
3195
3365
|
* - packages/react/src/viewer/utils/table-render-helpers.ts (cellStyleToCss,
|
|
3196
3366
|
* ooxmlDashToCssBorderStyle)
|
|
3197
|
-
* - packages/react/src/viewer/utils/table-render-data.tsx (row / cell
|
|
3198
|
-
* view-model projection)
|
|
3199
3367
|
*
|
|
3200
3368
|
* All functions are pure (no Angular dependencies) so they can be unit-tested
|
|
3201
3369
|
* with plain vitest without TestBed or the Angular compiler.
|
|
3202
3370
|
*/
|
|
3203
3371
|
|
|
3204
|
-
/**
|
|
3205
|
-
* A single styled text run inside a cell paragraph.
|
|
3206
|
-
*
|
|
3207
|
-
* The `style` map is an `[ngStyle]`-compatible object derived from the cell's
|
|
3208
|
-
* `PptxTableCellStyle` (bold, italic, underline, color, fontSize). When the
|
|
3209
|
-
* cell has no style the map is empty ({}) and CSS inherits.
|
|
3210
|
-
*
|
|
3211
|
-
* `isLineBreak` is true for soft line-break runs. The template renders them
|
|
3212
|
-
* as `<br>`.
|
|
3213
|
-
*/
|
|
3372
|
+
/** A single styled text run inside a cell paragraph. */
|
|
3214
3373
|
interface CellTextRun {
|
|
3215
3374
|
text: string;
|
|
3216
3375
|
style: StyleMap;
|
|
3217
3376
|
isLineBreak?: true;
|
|
3218
3377
|
}
|
|
3219
|
-
/**
|
|
3220
|
-
* A single paragraph inside a table cell, made up of one or more `CellTextRun`s.
|
|
3221
|
-
*
|
|
3222
|
-
* In the current implementation each paragraph has exactly one run (styled by
|
|
3223
|
-
* the cell-level `PptxTableCellStyle`). When the core later exposes per-run
|
|
3224
|
-
* segments on `PptxTableCell`, additional runs per paragraph will be populated.
|
|
3225
|
-
*/
|
|
3378
|
+
/** A single paragraph inside a table cell, made up of one or more `CellTextRun`s. */
|
|
3226
3379
|
type CellParagraph = CellTextRun[];
|
|
3380
|
+
|
|
3227
3381
|
/**
|
|
3228
|
-
*
|
|
3229
|
-
*
|
|
3230
|
-
*
|
|
3382
|
+
* Pure, framework-agnostic helpers for table rendering (view-model projection).
|
|
3383
|
+
*
|
|
3384
|
+
* Cell/run style projection lives in `table-cell-style.ts`; it is re-exported
|
|
3385
|
+
* here so the public surface (and colocated tests) keep importing the style
|
|
3386
|
+
* helpers from `table-renderer-helpers` unchanged.
|
|
3387
|
+
*
|
|
3388
|
+
* Ported from:
|
|
3389
|
+
* - packages/react/src/viewer/utils/table-render-data.tsx (row / cell
|
|
3390
|
+
* view-model projection)
|
|
3391
|
+
* - packages/react/src/viewer/utils/table-band-style.tsx (banding)
|
|
3392
|
+
* - packages/react/src/viewer/utils/table-diagonal-borders.tsx (diagonals)
|
|
3231
3393
|
*/
|
|
3394
|
+
|
|
3395
|
+
/** A flattened cell descriptor ready for template iteration. */
|
|
3232
3396
|
interface TableCellViewModel {
|
|
3233
3397
|
cell: PptxTableCell;
|
|
3234
|
-
/** Original row index of this cell in `tableData.rows` (for inline edit). */
|
|
3235
3398
|
rowIndex: number;
|
|
3236
|
-
/** Original column index of this cell in its row (for inline edit). */
|
|
3237
3399
|
colIndex: number;
|
|
3238
|
-
/** Resolved colspan from `gridSpan` (>= 2) or undefined. */
|
|
3239
3400
|
colSpan: number | undefined;
|
|
3240
|
-
/** Resolved rowspan from `rowSpan` (>= 2) or undefined. */
|
|
3241
3401
|
rowSpan: number | undefined;
|
|
3242
|
-
/** Pre-computed `[ngStyle]` map for this cell's `<td>`. */
|
|
3243
3402
|
tdStyle: StyleMap;
|
|
3244
|
-
/**
|
|
3245
|
-
* Display text: non-breaking space when the cell is empty to keep the row
|
|
3246
|
-
* height. Used as fallback when `paragraphs` is empty (no text AND no style).
|
|
3247
|
-
*/
|
|
3248
3403
|
displayText: string;
|
|
3249
|
-
/**
|
|
3250
|
-
* Rich-text paragraphs built from the cell's text content and cell-level
|
|
3251
|
-
* style. When non-empty the template renders this instead of `displayText`.
|
|
3252
|
-
* Each entry is a paragraph (array of styled runs); runs with `isLineBreak`
|
|
3253
|
-
* render as `<br>`.
|
|
3254
|
-
*
|
|
3255
|
-
* When this array is empty (cell is completely empty + unstyled) the template
|
|
3256
|
-
* falls back to rendering `displayText` (a non-breaking space) so the row
|
|
3257
|
-
* retains its height.
|
|
3258
|
-
*/
|
|
3259
3404
|
paragraphs: CellParagraph[];
|
|
3405
|
+
/** Diagonal border overlay info, or null when the cell has none. */
|
|
3406
|
+
diagonal: DiagonalBorderInfo | null;
|
|
3260
3407
|
}
|
|
3261
3408
|
interface TableRowViewModel {
|
|
3262
3409
|
rowStyle: StyleMap;
|
|
@@ -3271,56 +3418,116 @@ interface TableCellCommit {
|
|
|
3271
3418
|
}
|
|
3272
3419
|
/**
|
|
3273
3420
|
* TableRendererComponent: Angular port of the React `renderTableFromTableData`
|
|
3274
|
-
* (packages/react/src/viewer/utils/table-render-data.tsx)
|
|
3275
|
-
*
|
|
3276
|
-
*
|
|
3277
|
-
*
|
|
3278
|
-
*
|
|
3279
|
-
*
|
|
3280
|
-
*
|
|
3281
|
-
*
|
|
3282
|
-
*
|
|
3283
|
-
*
|
|
3284
|
-
*
|
|
3285
|
-
*
|
|
3286
|
-
* `PptxTableRow.height` is present.
|
|
3287
|
-
* - Cell fill: solid `backgroundColor` or the parser's pre-built
|
|
3288
|
-
* `gradientFillCss` string (gradient). Pattern fills are deferred.
|
|
3289
|
-
* - Cell borders: per-edge (top/bottom/left/right) width + colour.
|
|
3290
|
-
* - Cell text: rich-text paragraphs of styled `<span>` runs when the cell
|
|
3291
|
-
* carries text or formatting; falls back to a non-breaking-space placeholder
|
|
3292
|
-
* for empty+unstyled cells (preserves row height).
|
|
3293
|
-
*
|
|
3294
|
-
* Pure helpers (view-model projection, style maps) live in
|
|
3295
|
-
* `table-renderer-helpers.ts` so tests can exercise them without TestBed.
|
|
3421
|
+
* (packages/react/src/viewer/utils/table-render-data.tsx) plus the editor
|
|
3422
|
+
* overlays (`table-render.tsx` selection, `table-render-resize.tsx` handles).
|
|
3423
|
+
*
|
|
3424
|
+
* Renders a `<table>` from the typed `PptxTableData` structure. Behaviours:
|
|
3425
|
+
* - Merged cells resolve to `colspan`/`rowspan`; banding is baked into the
|
|
3426
|
+
* per-cell style; diagonal borders render as an SVG overlay.
|
|
3427
|
+
* - Editing (when `editable`): single click selects a cell, Shift+Click extends
|
|
3428
|
+
* a rectangular range (both via {@link TableSelectionService}, shared with the
|
|
3429
|
+
* inspector), double click opens an inline text input, and drag handles on the
|
|
3430
|
+
* column / row boundaries resize the table (emitted through `tableChange`).
|
|
3431
|
+
*
|
|
3432
|
+
* Pure helpers live in `table-renderer-helpers.ts` / `table-cell-style.ts`.
|
|
3296
3433
|
*/
|
|
3297
3434
|
declare class TableRendererComponent {
|
|
3298
3435
|
private readonly injector;
|
|
3436
|
+
/** Shared cell-selection state (present only inside the editor subtree). */
|
|
3437
|
+
private readonly selectionSvc;
|
|
3299
3438
|
/** The table element to render. Must be `type === 'table'`. */
|
|
3300
3439
|
readonly element: _angular_core.InputSignal<PptxElement>;
|
|
3301
|
-
/** Whether inline cell editing
|
|
3440
|
+
/** Whether inline cell editing / selection / resize is enabled. */
|
|
3302
3441
|
readonly editable: _angular_core.InputSignal<boolean>;
|
|
3303
3442
|
/** Emitted when a cell edit is committed (Enter / blur). */
|
|
3304
3443
|
readonly cellCommit: _angular_core.OutputEmitterRef<TableCellCommit>;
|
|
3444
|
+
/** Emitted when a structural table change (resize) should be persisted. */
|
|
3445
|
+
readonly tableChange: _angular_core.OutputEmitterRef<{
|
|
3446
|
+
id: string;
|
|
3447
|
+
tableData: PptxTableData;
|
|
3448
|
+
}>;
|
|
3305
3449
|
/** The cell currently being edited (original grid coords), or null. */
|
|
3306
3450
|
private readonly editingCell;
|
|
3307
3451
|
/** The mounted `<input>` for the active cell edit, if any. */
|
|
3308
3452
|
private readonly cellInput;
|
|
3309
3453
|
/** Pre-computed `<col>` styles for the colgroup. */
|
|
3310
3454
|
readonly colStyles: _angular_core.Signal<StyleMap[]>;
|
|
3311
|
-
/** Projected view-model rows with merged-cell resolution applied. */
|
|
3455
|
+
/** Projected view-model rows with merged-cell resolution + banding applied. */
|
|
3312
3456
|
readonly rows: _angular_core.Signal<TableRowViewModel[]>;
|
|
3457
|
+
/** Column widths (0-1 fractions) for the resize overlay. */
|
|
3458
|
+
readonly columnWidths: _angular_core.Signal<number[]>;
|
|
3313
3459
|
constructor();
|
|
3460
|
+
private tableData;
|
|
3314
3461
|
/** True when the given cell (original grid coords) is being edited. */
|
|
3315
3462
|
isEditing(rowIndex: number, colIndex: number): boolean;
|
|
3316
|
-
/**
|
|
3463
|
+
/** True when the cell is the current selection anchor for this element. */
|
|
3464
|
+
isSelectedAnchor(rowIndex: number, colIndex: number): boolean;
|
|
3465
|
+
/** True when the cell falls inside the active Shift+Click range. */
|
|
3466
|
+
isInRange(rowIndex: number, colIndex: number): boolean;
|
|
3467
|
+
/** Single click selects the cell; Shift+Click extends a rectangular range. */
|
|
3468
|
+
onCellClick(event: MouseEvent, rowIndex: number, colIndex: number): void;
|
|
3469
|
+
/** Double-click on a cell enters inline edit mode. */
|
|
3317
3470
|
onCellDblClick(event: Event, rowIndex: number, colIndex: number): void;
|
|
3318
3471
|
/** Commit the current edit (called on blur). */
|
|
3319
3472
|
commitCellEdit(event: Event): void;
|
|
3320
|
-
/** Enter commits, Escape cancels. Stops propagation so the canvas ignores it. */
|
|
3473
|
+
/** Enter/Tab commits, Escape cancels. Stops propagation so the canvas ignores it. */
|
|
3321
3474
|
onCellInputKeydown(event: KeyboardEvent): void;
|
|
3475
|
+
/** Persist a column-width drag by emitting new table data. */
|
|
3476
|
+
onResizeColumns(newWidths: number[]): void;
|
|
3477
|
+
/** Persist a row-height drag by emitting new table data. */
|
|
3478
|
+
onResizeRow(event: {
|
|
3479
|
+
index: number;
|
|
3480
|
+
height: number;
|
|
3481
|
+
}): void;
|
|
3322
3482
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableRendererComponent, never>;
|
|
3323
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableRendererComponent, "pptx-table-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, { "cellCommit": "cellCommit"; }, never, never, true, never>;
|
|
3483
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableRendererComponent, "pptx-table-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, { "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
|
|
3484
|
+
}
|
|
3485
|
+
|
|
3486
|
+
declare class ViewerDialogsService {
|
|
3487
|
+
/** Equation editor dialog visibility. */
|
|
3488
|
+
readonly showEquation: _angular_core.WritableSignal<boolean>;
|
|
3489
|
+
/** OMML of the equation being edited (null when inserting a fresh one). */
|
|
3490
|
+
readonly editingEquationOmml: _angular_core.WritableSignal<Record<string, unknown> | null>;
|
|
3491
|
+
/** Id of the element whose equation is being edited (null when inserting). */
|
|
3492
|
+
readonly editingEquationElementId: _angular_core.WritableSignal<string | null>;
|
|
3493
|
+
/** Set-up-slide-show dialog visibility. */
|
|
3494
|
+
readonly showSetUpSlideShow: _angular_core.WritableSignal<boolean>;
|
|
3495
|
+
/** In-session presentation properties (advance mode, loop, subtitles, ...). */
|
|
3496
|
+
readonly presentationProperties: _angular_core.WritableSignal<PptxPresentationProperties>;
|
|
3497
|
+
/** Password-protection dialog visibility. */
|
|
3498
|
+
readonly showPassword: _angular_core.WritableSignal<boolean>;
|
|
3499
|
+
/** Whether a save password is currently set. */
|
|
3500
|
+
readonly isPasswordProtected: _angular_core.WritableSignal<boolean>;
|
|
3501
|
+
/** The password applied on the next save (null when none). */
|
|
3502
|
+
readonly presentationPassword: _angular_core.WritableSignal<string | null>;
|
|
3503
|
+
/** Encrypted-file information dialog visibility. */
|
|
3504
|
+
readonly showEncrypted: _angular_core.WritableSignal<boolean>;
|
|
3505
|
+
/** Compare side panel visibility. */
|
|
3506
|
+
readonly showCompare: _angular_core.WritableSignal<boolean>;
|
|
3507
|
+
/** Slide-diff result shown in the compare panel (null when none loaded). */
|
|
3508
|
+
readonly compareResult: _angular_core.WritableSignal<CompareResult | null>;
|
|
3509
|
+
/** Font-embedding panel visibility. */
|
|
3510
|
+
readonly showFontEmbedding: _angular_core.WritableSignal<boolean>;
|
|
3511
|
+
/** Whether embedding used fonts on save is enabled. */
|
|
3512
|
+
readonly embedFontsEnabled: _angular_core.WritableSignal<boolean>;
|
|
3513
|
+
/** Version-history side panel visibility. */
|
|
3514
|
+
readonly showVersionHistory: _angular_core.WritableSignal<boolean>;
|
|
3515
|
+
/** Keyboard-shortcuts help overlay visibility. */
|
|
3516
|
+
readonly showShortcuts: _angular_core.WritableSignal<boolean>;
|
|
3517
|
+
/** Keep-annotations dialog visibility. */
|
|
3518
|
+
readonly showKeepAnnotations: _angular_core.WritableSignal<boolean>;
|
|
3519
|
+
/** Total ink annotation stroke count carried into the prompt. */
|
|
3520
|
+
readonly keepAnnotationCount: _angular_core.WritableSignal<number>;
|
|
3521
|
+
/** Number of slides that carry annotations. */
|
|
3522
|
+
readonly keepSlideCount: _angular_core.WritableSignal<number>;
|
|
3523
|
+
/** Signature-stripped warning dialog visibility. */
|
|
3524
|
+
readonly showSignatureStripped: _angular_core.WritableSignal<boolean>;
|
|
3525
|
+
/** Open the equation editor for a fresh insert. */
|
|
3526
|
+
openEquationInsert(): void;
|
|
3527
|
+
/** Open the equation editor to edit an existing element's equation. */
|
|
3528
|
+
openEquationEdit(elementId: string, omml: Record<string, unknown>): void;
|
|
3529
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerDialogsService, never>;
|
|
3530
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerDialogsService>;
|
|
3324
3531
|
}
|
|
3325
3532
|
|
|
3326
3533
|
/**
|
|
@@ -3349,6 +3556,12 @@ declare class PowerPointViewerComponent {
|
|
|
3349
3556
|
readonly class: _angular_core.InputSignal<string>;
|
|
3350
3557
|
/** Theme configuration for customising the viewer's appearance. */
|
|
3351
3558
|
readonly theme: _angular_core.InputSignal<ViewerTheme | undefined>;
|
|
3559
|
+
/**
|
|
3560
|
+
* Host file path/identifier keying the version-history store. When omitted
|
|
3561
|
+
* the version-history panel shows its empty state. Mirrors React's
|
|
3562
|
+
* `filePath` prop.
|
|
3563
|
+
*/
|
|
3564
|
+
readonly filePath: _angular_core.InputSignal<string | undefined>;
|
|
3352
3565
|
/** Optional real-time collaboration config; when set, connects and shows remote cursors. */
|
|
3353
3566
|
readonly collaboration: _angular_core.InputSignal<CollaborationConfig | undefined>;
|
|
3354
3567
|
/**
|
|
@@ -3409,6 +3622,14 @@ declare class PowerPointViewerComponent {
|
|
|
3409
3622
|
private readonly smartArt3DSvc;
|
|
3410
3623
|
private readonly zoomTarget;
|
|
3411
3624
|
protected readonly presenterWindow: PresenterWindowService;
|
|
3625
|
+
protected readonly dialogs: ViewerDialogsService;
|
|
3626
|
+
private readonly compareSvc;
|
|
3627
|
+
/** Handle on the secondary-dialog host (keep-annotations prompt). */
|
|
3628
|
+
private readonly extraDialogs;
|
|
3629
|
+
/** Surface the encrypted-file notice dialog alongside the inline fallback. */
|
|
3630
|
+
private readonly encryptedNotice;
|
|
3631
|
+
/** Custom shows mapped to the core shape consumed by set-up-slide-show. */
|
|
3632
|
+
protected readonly pptxCustomShows: _angular_core.Signal<PptxCustomShow[]>;
|
|
3412
3633
|
/** The `<main>` host; used to locate the live `.pptx-ng-canvas-stage`. */
|
|
3413
3634
|
private readonly mainEl;
|
|
3414
3635
|
/** True while a PNG/PDF export is in progress (disables the buttons). */
|
|
@@ -3665,6 +3886,22 @@ declare class PowerPointViewerComponent {
|
|
|
3665
3886
|
presentPresenter(): void;
|
|
3666
3887
|
/** Close the presenter view (and any audience overlay/window it opened). */
|
|
3667
3888
|
exitPresenter(): void;
|
|
3889
|
+
/** Review ▸ Compare: pick a `.pptx` and diff it against the current deck. */
|
|
3890
|
+
protected onOpenCompare(): void;
|
|
3891
|
+
/**
|
|
3892
|
+
* Double-click text edit entry: equations open the equation editor instead
|
|
3893
|
+
* of the inline text editor (mirrors React's dbl-click-to-edit-equation).
|
|
3894
|
+
*/
|
|
3895
|
+
protected onTextEditStart(id: string): void;
|
|
3896
|
+
/** Apply a Ctrl/Cmd+B/I/U toggle from the inline editor (undoable). */
|
|
3897
|
+
protected onTextFormat(event: {
|
|
3898
|
+
id: string;
|
|
3899
|
+
updates: Partial<TextStyle>;
|
|
3900
|
+
}): void;
|
|
3901
|
+
/** Presentation exited with ink on it: offer the keep/discard prompt. */
|
|
3902
|
+
protected onPresentationAnnotationsExit(map: SlideAnnotationMap): void;
|
|
3903
|
+
/** Swap the deck for a restored version-history snapshot. */
|
|
3904
|
+
protected onRestoreVersion(bytes: Uint8Array): void;
|
|
3668
3905
|
/** Toggle the speaker-notes strip. */
|
|
3669
3906
|
toggleNotes(): void;
|
|
3670
3907
|
/**
|
|
@@ -3807,6 +4044,14 @@ declare class PowerPointViewerComponent {
|
|
|
3807
4044
|
id: string;
|
|
3808
4045
|
commit: TableCellCommit;
|
|
3809
4046
|
}): void;
|
|
4047
|
+
/**
|
|
4048
|
+
* Persist a structural table change originating on the canvas (column / row
|
|
4049
|
+
* drag-resize) as one undoable history entry.
|
|
4050
|
+
*/
|
|
4051
|
+
protected onTableChange(event: {
|
|
4052
|
+
id: string;
|
|
4053
|
+
tableData: PptxTableData;
|
|
4054
|
+
}): void;
|
|
3810
4055
|
/**
|
|
3811
4056
|
* Editing keyboard shortcuts (only when `canEdit` and not typing in a
|
|
3812
4057
|
* field or presenting): Delete, Ctrl/Cmd+Z/Y undo/redo, Ctrl/Cmd+D
|
|
@@ -3842,7 +4087,7 @@ declare class PowerPointViewerComponent {
|
|
|
3842
4087
|
/** Export every slide as a WebM video (3s per slide) via MediaRecorder. */
|
|
3843
4088
|
exportVideo(): Promise<void>;
|
|
3844
4089
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PowerPointViewerComponent, never>;
|
|
3845
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PowerPointViewerComponent, "pptx-viewer", never, { "content": { "alias": "content"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "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; }; }, { "activeSlideChange": "activeSlideChange"; "dirtyChange": "dirtyChange"; "contentChange": "contentChange"; "propertiesChange": "propertiesChange"; "startCollaboration": "startCollaboration"; "stopCollaboration": "stopCollaboration"; }, never, never, true, never>;
|
|
4090
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PowerPointViewerComponent, "pptx-viewer", never, { "content": { "alias": "content"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "filePath": { "alias": "filePath"; "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; }; }, { "activeSlideChange": "activeSlideChange"; "dirtyChange": "dirtyChange"; "contentChange": "contentChange"; "propertiesChange": "propertiesChange"; "startCollaboration": "startCollaboration"; "stopCollaboration": "stopCollaboration"; }, never, never, true, never>;
|
|
3846
4091
|
}
|
|
3847
4092
|
|
|
3848
4093
|
/** The eight resize-handle positions around a selection box. */
|
|
@@ -3996,6 +4241,11 @@ declare class SlideCanvasComponent {
|
|
|
3996
4241
|
}>;
|
|
3997
4242
|
/** Emitted when an inline edit is cancelled (Escape). */
|
|
3998
4243
|
readonly textCancel: _angular_core.OutputEmitterRef<void>;
|
|
4244
|
+
/** Emitted on Ctrl/Cmd+B/I/U while inline-editing (parity with React/Vue). */
|
|
4245
|
+
readonly textFormat: _angular_core.OutputEmitterRef<{
|
|
4246
|
+
id: string;
|
|
4247
|
+
updates: Partial<TextStyle>;
|
|
4248
|
+
}>;
|
|
3999
4249
|
/** Emitted during a rotate gesture with the new rotation (degrees). */
|
|
4000
4250
|
readonly rotateUpdate: _angular_core.OutputEmitterRef<{
|
|
4001
4251
|
id: string;
|
|
@@ -4012,6 +4262,11 @@ declare class SlideCanvasComponent {
|
|
|
4012
4262
|
id: string;
|
|
4013
4263
|
commit: TableCellCommit;
|
|
4014
4264
|
}>;
|
|
4265
|
+
/** Emitted when a structural table change (drag-resize) should be persisted. */
|
|
4266
|
+
readonly tableChange: _angular_core.OutputEmitterRef<{
|
|
4267
|
+
id: string;
|
|
4268
|
+
tableData: PptxTableData;
|
|
4269
|
+
}>;
|
|
4015
4270
|
private drag;
|
|
4016
4271
|
private editCancelled;
|
|
4017
4272
|
/** Active guide-drag state (id + axis only), or null when nothing is being dragged. */
|
|
@@ -4156,6 +4411,8 @@ declare class SlideCanvasComponent {
|
|
|
4156
4411
|
} | null>;
|
|
4157
4412
|
onDblClick(event: MouseEvent): void;
|
|
4158
4413
|
onEditorKeydown(event: KeyboardEvent): void;
|
|
4414
|
+
/** Toggle bold/italic/underline for the element under inline edit. */
|
|
4415
|
+
private emitTextFormat;
|
|
4159
4416
|
commitText(event: Event, id: string): void;
|
|
4160
4417
|
onContextMenu(event: MouseEvent): void;
|
|
4161
4418
|
onHandlePointerDown(event: PointerEvent, handle: ResizeHandle): void;
|
|
@@ -4191,7 +4448,7 @@ declare class SlideCanvasComponent {
|
|
|
4191
4448
|
readonly vRulerTicks: _angular_core.Signal<readonly RulerTick[]>;
|
|
4192
4449
|
readonly stageStyle: _angular_core.Signal<StyleMap>;
|
|
4193
4450
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideCanvasComponent, never>;
|
|
4194
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideCanvasComponent, "pptx-slide-canvas", never, { "slide": { "alias": "slide"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToGuides": { "alias": "snapToGuides"; "required": false; "isSignal": true; }; "autoFit": { "alias": "autoFit"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "editingId": { "alias": "editingId"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "drawTool": { "alias": "drawTool"; "required": false; "isSignal": true; }; "drawColor": { "alias": "drawColor"; "required": false; "isSignal": true; }; "drawWidth": { "alias": "drawWidth"; "required": false; "isSignal": true; }; }, { "elementSelect": "elementSelect"; "backgroundClick": "backgroundClick"; "transformStart": "transformStart"; "transformUpdate": "transformUpdate"; "contextMenu": "contextMenu"; "textEditStart": "textEditStart"; "textCommit": "textCommit"; "textCancel": "textCancel"; "rotateUpdate": "rotateUpdate"; "marqueeSelect": "marqueeSelect"; "inkStrokeComplete": "inkStrokeComplete"; "eraserHit": "eraserHit"; "cellCommit": "cellCommit"; }, never, never, true, never>;
|
|
4451
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideCanvasComponent, "pptx-slide-canvas", never, { "slide": { "alias": "slide"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "zoom": { "alias": "zoom"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "snapToGuides": { "alias": "snapToGuides"; "required": false; "isSignal": true; }; "autoFit": { "alias": "autoFit"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "editingId": { "alias": "editingId"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "drawTool": { "alias": "drawTool"; "required": false; "isSignal": true; }; "drawColor": { "alias": "drawColor"; "required": false; "isSignal": true; }; "drawWidth": { "alias": "drawWidth"; "required": false; "isSignal": true; }; }, { "elementSelect": "elementSelect"; "backgroundClick": "backgroundClick"; "transformStart": "transformStart"; "transformUpdate": "transformUpdate"; "contextMenu": "contextMenu"; "textEditStart": "textEditStart"; "textCommit": "textCommit"; "textCancel": "textCancel"; "textFormat": "textFormat"; "rotateUpdate": "rotateUpdate"; "marqueeSelect": "marqueeSelect"; "inkStrokeComplete": "inkStrokeComplete"; "eraserHit": "eraserHit"; "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
|
|
4195
4452
|
}
|
|
4196
4453
|
|
|
4197
4454
|
/**
|
|
@@ -4410,6 +4667,11 @@ declare class ElementRendererComponent {
|
|
|
4410
4667
|
id: string;
|
|
4411
4668
|
commit: TableCellCommit;
|
|
4412
4669
|
}>;
|
|
4670
|
+
/** Emitted when a structural table change (drag-resize) should be persisted. */
|
|
4671
|
+
readonly tableChange: _angular_core.OutputEmitterRef<{
|
|
4672
|
+
id: string;
|
|
4673
|
+
tableData: PptxTableData;
|
|
4674
|
+
}>;
|
|
4413
4675
|
/** Duotone SVG `<filter>` descriptor for this element, if any. */
|
|
4414
4676
|
readonly duotoneFilter: _angular_core.Signal<pptx_angular_viewer.DuotoneFilterDef | undefined>;
|
|
4415
4677
|
/**
|
|
@@ -4448,7 +4710,7 @@ declare class ElementRendererComponent {
|
|
|
4448
4710
|
readonly hasText: _angular_core.Signal<boolean>;
|
|
4449
4711
|
readonly placeholderLabel: _angular_core.Signal<string>;
|
|
4450
4712
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementRendererComponent, never>;
|
|
4451
|
-
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; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "fieldContext": { "alias": "fieldContext"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; }, { "cellCommit": "cellCommit"; }, never, never, true, never>;
|
|
4713
|
+
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; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "fieldContext": { "alias": "fieldContext"; "required": false; "isSignal": true; }; "editTemplateMode": { "alias": "editTemplateMode"; "required": false; "isSignal": true; }; }, { "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
|
|
4452
4714
|
}
|
|
4453
4715
|
|
|
4454
4716
|
/**
|
|
@@ -5117,41 +5379,6 @@ declare class AnimationPlaybackService {
|
|
|
5117
5379
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AnimationPlaybackService>;
|
|
5118
5380
|
}
|
|
5119
5381
|
|
|
5120
|
-
/**
|
|
5121
|
-
* presentation-annotations-helpers.ts: Pure geometry helpers for presentation
|
|
5122
|
-
* ink annotations (pen, highlighter, eraser, laser).
|
|
5123
|
-
*
|
|
5124
|
-
* Ported from React:
|
|
5125
|
-
* packages/react/src/viewer/components/PresentationAnnotationOverlay.tsx
|
|
5126
|
-
* packages/react/src/viewer/hooks/usePresentationAnnotations.ts
|
|
5127
|
-
*
|
|
5128
|
-
* No Angular dependencies; all functions are pure so they can be unit-tested
|
|
5129
|
-
* without TestBed.
|
|
5130
|
-
*/
|
|
5131
|
-
/** A single {x, y} coordinate in slide-space pixels. */
|
|
5132
|
-
interface AnnotationPoint {
|
|
5133
|
-
x: number;
|
|
5134
|
-
y: number;
|
|
5135
|
-
}
|
|
5136
|
-
/** An ink stroke: a sequence of points with visual properties. */
|
|
5137
|
-
interface AnnotationStroke {
|
|
5138
|
-
id: string;
|
|
5139
|
-
points: AnnotationPoint[];
|
|
5140
|
-
color: string;
|
|
5141
|
-
width: number;
|
|
5142
|
-
/** 1 = opaque (pen); 0.4 = semi-transparent (highlighter). */
|
|
5143
|
-
opacity: number;
|
|
5144
|
-
}
|
|
5145
|
-
/** The tool currently armed in presentation mode. */
|
|
5146
|
-
type PresentationTool = 'none' | 'pen' | 'highlighter' | 'eraser' | 'laser';
|
|
5147
|
-
/** Per-slide annotation storage: slide index → strokes. */
|
|
5148
|
-
type SlideAnnotationMap = Map<number, AnnotationStroke[]>;
|
|
5149
|
-
/** Transient laser-pointer position in slide-space pixels. */
|
|
5150
|
-
interface LaserPosition {
|
|
5151
|
-
x: number;
|
|
5152
|
-
y: number;
|
|
5153
|
-
}
|
|
5154
|
-
|
|
5155
5382
|
declare class PresentationAnnotationsService {
|
|
5156
5383
|
private readonly destroyRef;
|
|
5157
5384
|
private readonly _tool;
|
|
@@ -5322,6 +5549,11 @@ declare class PresentationOverlayComponent implements OnInit {
|
|
|
5322
5549
|
readonly startIndex: _angular_core.InputSignal<number>;
|
|
5323
5550
|
readonly indexChange: _angular_core.OutputEmitterRef<number>;
|
|
5324
5551
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
5552
|
+
/**
|
|
5553
|
+
* Fired just before `closed` when the show carries ink annotations, so the
|
|
5554
|
+
* host can offer the keep/discard prompt (mirrors React's exit flow).
|
|
5555
|
+
*/
|
|
5556
|
+
readonly annotationsExit: _angular_core.OutputEmitterRef<SlideAnnotationMap>;
|
|
5325
5557
|
/** Zero-based index into `slides()`. */
|
|
5326
5558
|
protected readonly currentIndex: _angular_core.WritableSignal<number>;
|
|
5327
5559
|
/**
|
|
@@ -5419,7 +5651,7 @@ declare class PresentationOverlayComponent implements OnInit {
|
|
|
5419
5651
|
private goToSlide;
|
|
5420
5652
|
private emitClosed;
|
|
5421
5653
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PresentationOverlayComponent, never>;
|
|
5422
|
-
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; }; }, { "indexChange": "indexChange"; "closed": "closed"; }, never, never, true, never>;
|
|
5654
|
+
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; }; }, { "indexChange": "indexChange"; "closed": "closed"; "annotationsExit": "annotationsExit"; }, never, never, true, never>;
|
|
5423
5655
|
}
|
|
5424
5656
|
|
|
5425
5657
|
/**
|
|
@@ -5702,11 +5934,15 @@ declare class TableDataEditorComponent {
|
|
|
5702
5934
|
readonly canEdit: _angular_core.InputSignal<boolean>;
|
|
5703
5935
|
/** Emits the updated element after any edit operation. */
|
|
5704
5936
|
readonly elementChange: _angular_core.OutputEmitterRef<TablePptxElement>;
|
|
5937
|
+
/** Shared cell selection (drives the cell-formatting panel + context menu). */
|
|
5938
|
+
private readonly selection;
|
|
5705
5939
|
protected readonly rows: _angular_core.Signal<pptx_viewer_core.PptxTableRow[]>;
|
|
5706
5940
|
protected readonly rowCount: _angular_core.Signal<number>;
|
|
5707
5941
|
protected readonly colCount: _angular_core.Signal<number>;
|
|
5708
5942
|
protected readonly colIndices: _angular_core.Signal<number[]>;
|
|
5709
5943
|
protected onCellChange(event: Event, rowIndex: number, colIndex: number): void;
|
|
5944
|
+
/** Focusing a cell selects it so the cell-formatting panel targets it. */
|
|
5945
|
+
protected onCellFocus(rowIndex: number, colIndex: number): void;
|
|
5710
5946
|
protected onAddRow(): void;
|
|
5711
5947
|
protected onRemoveLastRow(): void;
|
|
5712
5948
|
protected onRemoveRow(rowIndex: number): void;
|
|
@@ -5717,6 +5953,222 @@ declare class TableDataEditorComponent {
|
|
|
5717
5953
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableDataEditorComponent, "pptx-table-data-editor", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, { "elementChange": "elementChange"; }, never, never, true, never>;
|
|
5718
5954
|
}
|
|
5719
5955
|
|
|
5956
|
+
/**
|
|
5957
|
+
* table-properties-helpers.ts: pure helpers for the table properties inspector.
|
|
5958
|
+
*
|
|
5959
|
+
* The small immutable transforms behind the Angular port of the React
|
|
5960
|
+
* `TablePropertiesPanel` / `TableCellAdvancedFill`: applying a quick-style
|
|
5961
|
+
* preset, redistributing a single column's width across its neighbours,
|
|
5962
|
+
* even-distributing column widths / row heights, and building a CSS gradient
|
|
5963
|
+
* string from structured stops so the renderer shows edited gradients live.
|
|
5964
|
+
*
|
|
5965
|
+
* No Angular imports, so they are unit-testable with plain vitest.
|
|
5966
|
+
*/
|
|
5967
|
+
|
|
5968
|
+
/** The boolean structure/style flags on `PptxTableData` the toggles can flip. */
|
|
5969
|
+
type TableBooleanFlag = 'bandedRows' | 'firstRowHeader' | 'bandedColumns' | 'firstCol' | 'lastCol' | 'lastRow';
|
|
5970
|
+
|
|
5971
|
+
declare class TablePropertiesComponent {
|
|
5972
|
+
/** The table element being edited. */
|
|
5973
|
+
readonly element: _angular_core.InputSignal<TablePptxElement>;
|
|
5974
|
+
/** Whether editing is enabled. */
|
|
5975
|
+
readonly canEdit: _angular_core.InputSignal<boolean>;
|
|
5976
|
+
/** Emits the fully-updated element after any edit. */
|
|
5977
|
+
readonly elementChange: _angular_core.OutputEmitterRef<TablePptxElement>;
|
|
5978
|
+
protected readonly toggles: readonly {
|
|
5979
|
+
key: TableBooleanFlag;
|
|
5980
|
+
label: string;
|
|
5981
|
+
}[];
|
|
5982
|
+
protected readonly presets: TableStylePreset[];
|
|
5983
|
+
protected readonly defaultRowHeight = 32;
|
|
5984
|
+
protected readonly td: _angular_core.Signal<PptxTableData | undefined>;
|
|
5985
|
+
protected readonly colCount: _angular_core.Signal<number>;
|
|
5986
|
+
protected pct(fraction: number): number;
|
|
5987
|
+
protected onToggle(key: TableBooleanFlag, event: Event): void;
|
|
5988
|
+
protected onCycle(key: 'bandRowCycle' | 'bandColCycle', event: Event): void;
|
|
5989
|
+
protected onPreset(preset: TableStylePreset): void;
|
|
5990
|
+
protected onEvenCols(): void;
|
|
5991
|
+
protected onEvenRows(): void;
|
|
5992
|
+
protected onColWidth(index: number, event: Event): void;
|
|
5993
|
+
protected onRowHeight(index: number, event: Event): void;
|
|
5994
|
+
private emit;
|
|
5995
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TablePropertiesComponent, never>;
|
|
5996
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TablePropertiesComponent, "pptx-table-properties", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, { "elementChange": "elementChange"; }, never, never, true, never>;
|
|
5997
|
+
}
|
|
5998
|
+
|
|
5999
|
+
/** A selected table cell (and optional Shift+Click range) on one table element. */
|
|
6000
|
+
interface TableCellSelection {
|
|
6001
|
+
/** Id of the table element the selection belongs to. */
|
|
6002
|
+
elementId: string;
|
|
6003
|
+
/** Anchor cell row (0-based). */
|
|
6004
|
+
rowIndex: number;
|
|
6005
|
+
/** Anchor cell column (0-based). */
|
|
6006
|
+
columnIndex: number;
|
|
6007
|
+
/** When true, the anchor cell has an active inline text input. */
|
|
6008
|
+
isEditing?: boolean;
|
|
6009
|
+
/** Optional multi-cell rectangular selection (Shift+Click range). */
|
|
6010
|
+
selectedCells?: CellCoord[];
|
|
6011
|
+
}
|
|
6012
|
+
declare class TableSelectionService {
|
|
6013
|
+
/** The current table-cell selection, or null when nothing is selected. */
|
|
6014
|
+
readonly selection: _angular_core.WritableSignal<TableCellSelection | null>;
|
|
6015
|
+
/** The element id of the current selection (or undefined). */
|
|
6016
|
+
readonly elementId: _angular_core.Signal<string | undefined>;
|
|
6017
|
+
/**
|
|
6018
|
+
* Select a single cell (clears any range). Passing the element id keeps the
|
|
6019
|
+
* selection scoped so a stale selection from a different table is ignored.
|
|
6020
|
+
*/
|
|
6021
|
+
selectCell(elementId: string, rowIndex: number, columnIndex: number): void;
|
|
6022
|
+
/**
|
|
6023
|
+
* Extend the selection from the current anchor to `(rowIndex, columnIndex)`
|
|
6024
|
+
* as a rectangular range (Shift+Click). Expands to cover any merge groups it
|
|
6025
|
+
* overlaps. When there is no existing anchor on this element it falls back to
|
|
6026
|
+
* a single-cell selection.
|
|
6027
|
+
*/
|
|
6028
|
+
extendTo(elementId: string, rowIndex: number, columnIndex: number, tableData: PptxTableData): void;
|
|
6029
|
+
/** Mark the anchor cell as actively editing (inline text input open). */
|
|
6030
|
+
beginEditing(elementId: string, rowIndex: number, columnIndex: number): void;
|
|
6031
|
+
/** Clear the editing flag while keeping the cell selected. */
|
|
6032
|
+
endEditing(): void;
|
|
6033
|
+
/** Clear the selection entirely. */
|
|
6034
|
+
clear(): void;
|
|
6035
|
+
/** Clear the selection when it belongs to `elementId` (e.g. element deleted). */
|
|
6036
|
+
clearFor(elementId: string): void;
|
|
6037
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableSelectionService, never>;
|
|
6038
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TableSelectionService>;
|
|
6039
|
+
}
|
|
6040
|
+
|
|
6041
|
+
/** Cell-style keys whose value is a colour string (edited via `<input type=color>`). */
|
|
6042
|
+
type ColorKey = 'color' | 'backgroundColor' | 'borderTopColor' | 'borderBottomColor' | 'borderLeftColor' | 'borderRightColor';
|
|
6043
|
+
/** Cell-style keys whose value is a number (edited via `<input type=number>`). */
|
|
6044
|
+
type NumKey = 'fontSize' | 'borderTopWidth' | 'borderBottomWidth' | 'borderLeftWidth' | 'borderRightWidth';
|
|
6045
|
+
declare class TableCellFormattingComponent {
|
|
6046
|
+
/** The table element being edited. */
|
|
6047
|
+
readonly element: _angular_core.InputSignal<TablePptxElement>;
|
|
6048
|
+
/** Whether editing is enabled. */
|
|
6049
|
+
readonly canEdit: _angular_core.InputSignal<boolean>;
|
|
6050
|
+
/** Emits the fully-updated element after any edit. */
|
|
6051
|
+
readonly elementChange: _angular_core.OutputEmitterRef<TablePptxElement>;
|
|
6052
|
+
private readonly selection;
|
|
6053
|
+
protected readonly textToggles: ReadonlyArray<{
|
|
6054
|
+
key: 'bold' | 'italic' | 'underline';
|
|
6055
|
+
label: string;
|
|
6056
|
+
}>;
|
|
6057
|
+
protected readonly hAligns: ReadonlyArray<{
|
|
6058
|
+
value: 'left' | 'center' | 'right';
|
|
6059
|
+
label: string;
|
|
6060
|
+
}>;
|
|
6061
|
+
protected readonly vAligns: ReadonlyArray<{
|
|
6062
|
+
value: 'top' | 'middle' | 'bottom';
|
|
6063
|
+
label: string;
|
|
6064
|
+
}>;
|
|
6065
|
+
protected readonly borderEdges: ReadonlyArray<{
|
|
6066
|
+
label: string;
|
|
6067
|
+
colorKey: 'borderTopColor' | 'borderBottomColor' | 'borderLeftColor' | 'borderRightColor';
|
|
6068
|
+
widthKey: 'borderTopWidth' | 'borderBottomWidth' | 'borderLeftWidth' | 'borderRightWidth';
|
|
6069
|
+
}>;
|
|
6070
|
+
/** The selection when it targets THIS element, else null. */
|
|
6071
|
+
protected readonly sel: _angular_core.Signal<TableCellSelection | null>;
|
|
6072
|
+
/** The selected cell, or undefined when the selection is out of range. */
|
|
6073
|
+
protected readonly cell: _angular_core.Signal<pptx_viewer_core.PptxTableCell | undefined>;
|
|
6074
|
+
protected readonly style: _angular_core.Signal<PptxTableCellStyle>;
|
|
6075
|
+
protected readonly hasRange: _angular_core.Signal<boolean>;
|
|
6076
|
+
protected colorOf(key: ColorKey): string;
|
|
6077
|
+
protected widthOf(key: NumKey): number;
|
|
6078
|
+
protected toggle(key: 'bold' | 'italic' | 'underline'): void;
|
|
6079
|
+
protected onColor(key: ColorKey, event: Event): void;
|
|
6080
|
+
protected onNumber(key: NumKey, event: Event): void;
|
|
6081
|
+
/** Merge a style patch into the selected cell and emit the updated element. */
|
|
6082
|
+
protected updateStyle(patch: Partial<PptxTableCellStyle>): void;
|
|
6083
|
+
protected onMergeRight(): void;
|
|
6084
|
+
protected onMergeDown(): void;
|
|
6085
|
+
protected onSplit(): void;
|
|
6086
|
+
protected onMergeRange(): void;
|
|
6087
|
+
private applyMerge;
|
|
6088
|
+
private commit;
|
|
6089
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCellFormattingComponent, never>;
|
|
6090
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableCellFormattingComponent, "pptx-table-cell-formatting", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, { "elementChange": "elementChange"; }, never, never, true, never>;
|
|
6091
|
+
}
|
|
6092
|
+
|
|
6093
|
+
type GradientStop = {
|
|
6094
|
+
color: string;
|
|
6095
|
+
position: number;
|
|
6096
|
+
};
|
|
6097
|
+
declare class TableCellAdvancedFillComponent {
|
|
6098
|
+
/** The selected cell's style. */
|
|
6099
|
+
readonly cellStyle: _angular_core.InputSignal<PptxTableCellStyle>;
|
|
6100
|
+
/** Whether editing is enabled. */
|
|
6101
|
+
readonly canEdit: _angular_core.InputSignal<boolean>;
|
|
6102
|
+
/** Emits a partial style patch to merge into the cell. */
|
|
6103
|
+
readonly styleChange: _angular_core.OutputEmitterRef<Partial<PptxTableCellStyle>>;
|
|
6104
|
+
protected readonly fillModes: {
|
|
6105
|
+
value: "none" | "solid" | "gradient" | "pattern";
|
|
6106
|
+
label: string;
|
|
6107
|
+
}[];
|
|
6108
|
+
protected readonly gradientTypes: {
|
|
6109
|
+
value: string;
|
|
6110
|
+
label: string;
|
|
6111
|
+
}[];
|
|
6112
|
+
protected readonly patterns: ("horz" | "vert" | "pct5" | "pct10" | "pct20" | "pct25" | "pct30" | "pct40" | "pct50" | "pct60" | "pct70" | "pct75" | "pct80" | "pct90" | "ltHorz" | "dkHorz" | "narHorz" | "wdHorz" | "ltVert" | "dkVert" | "narVert" | "wdVert" | "dashHorz" | "dashVert" | "cross" | "dnDiag" | "ltDnDiag" | "dkDnDiag" | "wdDnDiag" | "dashDnDiag" | "upDiag" | "ltUpDiag" | "dkUpDiag" | "wdUpDiag" | "dashUpDiag" | "diagCross" | "smCheck" | "lgCheck" | "smGrid" | "lgGrid" | "dotGrid" | "smConfetti" | "lgConfetti" | "horzBrick" | "diagBrick" | "solidDmnd" | "openDmnd" | "dotDmnd" | "plaid" | "sphere" | "weave" | "divot" | "shingle" | "wave" | "trellis" | "zigZag")[];
|
|
6113
|
+
protected readonly margins: ReadonlyArray<{
|
|
6114
|
+
key: 'marginTop' | 'marginBottom' | 'marginLeft' | 'marginRight';
|
|
6115
|
+
label: string;
|
|
6116
|
+
}>;
|
|
6117
|
+
protected readonly fillMode: _angular_core.Signal<"none" | "solid" | "gradient" | "pattern">;
|
|
6118
|
+
protected readonly gradType: _angular_core.Signal<"linear" | "radial">;
|
|
6119
|
+
protected readonly stops: _angular_core.Signal<GradientStop[]>;
|
|
6120
|
+
protected marginValue(key: 'marginTop' | 'marginBottom' | 'marginLeft' | 'marginRight'): number;
|
|
6121
|
+
protected onFillModeChange(event: Event): void;
|
|
6122
|
+
protected onGradTypeChange(event: Event): void;
|
|
6123
|
+
protected onAngleChange(event: Event): void;
|
|
6124
|
+
protected onStopColor(index: number, event: Event): void;
|
|
6125
|
+
protected onStopPos(index: number, event: Event): void;
|
|
6126
|
+
protected onAddStop(): void;
|
|
6127
|
+
protected onPatternPreset(event: Event): void;
|
|
6128
|
+
protected onPatternFg(event: Event): void;
|
|
6129
|
+
protected onPatternBg(event: Event): void;
|
|
6130
|
+
protected onMargin(key: 'marginTop' | 'marginBottom' | 'marginLeft' | 'marginRight', event: Event): void;
|
|
6131
|
+
private updateStop;
|
|
6132
|
+
private emitGradient;
|
|
6133
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCellAdvancedFillComponent, never>;
|
|
6134
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableCellAdvancedFillComponent, "pptx-table-cell-advanced-fill", never, { "cellStyle": { "alias": "cellStyle"; "required": true; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, { "styleChange": "styleChange"; }, never, never, true, never>;
|
|
6135
|
+
}
|
|
6136
|
+
|
|
6137
|
+
declare class TableResizeOverlayComponent {
|
|
6138
|
+
/** Column widths as proportions summing to ~1. */
|
|
6139
|
+
readonly columnWidths: _angular_core.InputSignal<number[]>;
|
|
6140
|
+
/** Whether the resize handles are active. */
|
|
6141
|
+
readonly editable: _angular_core.InputSignal<boolean>;
|
|
6142
|
+
/** Emitted on column-boundary drop with the renormalised width array. */
|
|
6143
|
+
readonly resizeColumns: _angular_core.OutputEmitterRef<number[]>;
|
|
6144
|
+
/** Emitted on row-boundary drop with the resized row's index + new height. */
|
|
6145
|
+
readonly resizeRow: _angular_core.OutputEmitterRef<{
|
|
6146
|
+
index: number;
|
|
6147
|
+
height: number;
|
|
6148
|
+
}>;
|
|
6149
|
+
private readonly host;
|
|
6150
|
+
private readonly injector;
|
|
6151
|
+
/** Cumulative internal column-boundary positions as percentages (0-100). */
|
|
6152
|
+
readonly colBoundaries: _angular_core.Signal<number[]>;
|
|
6153
|
+
/** Measured internal row-boundary offsets (px from the table top). */
|
|
6154
|
+
readonly rowBounds: _angular_core.WritableSignal<number[]>;
|
|
6155
|
+
private drag;
|
|
6156
|
+
private readonly onMove;
|
|
6157
|
+
private readonly onUp;
|
|
6158
|
+
constructor();
|
|
6159
|
+
/** Observe the container so row-height changes re-measure the boundaries. */
|
|
6160
|
+
private observeResize;
|
|
6161
|
+
private container;
|
|
6162
|
+
private measureRows;
|
|
6163
|
+
onColDown(event: PointerEvent, index: number): void;
|
|
6164
|
+
onRowDown(event: PointerEvent, index: number): void;
|
|
6165
|
+
private beginDrag;
|
|
6166
|
+
private handleMove;
|
|
6167
|
+
private handleUp;
|
|
6168
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableResizeOverlayComponent, never>;
|
|
6169
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableResizeOverlayComponent, "pptx-table-resize-overlay", never, { "columnWidths": { "alias": "columnWidths"; "required": true; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, { "resizeColumns": "resizeColumns"; "resizeRow": "resizeRow"; }, never, ["*"], true, never>;
|
|
6170
|
+
}
|
|
6171
|
+
|
|
5720
6172
|
declare class ChartDataEditorComponent {
|
|
5721
6173
|
/** The chart element being edited. */
|
|
5722
6174
|
readonly element: _angular_core.InputSignal<ChartPptxElement>;
|
|
@@ -6314,7 +6766,17 @@ declare class EditorContextMenuComponent {
|
|
|
6314
6766
|
/** Emitted when the menu should close (Escape or outside click). */
|
|
6315
6767
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
6316
6768
|
protected readonly editor: EditorStateService;
|
|
6769
|
+
private readonly tableSelection;
|
|
6317
6770
|
private readonly host;
|
|
6771
|
+
/**
|
|
6772
|
+
* The table element + cell selection the menu should act on, or null when the
|
|
6773
|
+
* current selection is not a single table with a selected cell. Drives the
|
|
6774
|
+
* table row/column/merge section of the menu.
|
|
6775
|
+
*/
|
|
6776
|
+
protected readonly tableCtx: _angular_core.Signal<{
|
|
6777
|
+
element: TablePptxElement;
|
|
6778
|
+
sel: TableCellSelection;
|
|
6779
|
+
} | null>;
|
|
6318
6780
|
onEscape(): void;
|
|
6319
6781
|
onDocumentPointerDown(event: PointerEvent): void;
|
|
6320
6782
|
protected onCut(): void;
|
|
@@ -6326,6 +6788,21 @@ declare class EditorContextMenuComponent {
|
|
|
6326
6788
|
protected onSendToBack(): void;
|
|
6327
6789
|
protected onBringForward(): void;
|
|
6328
6790
|
protected onSendBackward(): void;
|
|
6791
|
+
protected onInsertRowAbove(): void;
|
|
6792
|
+
protected onInsertRowBelow(): void;
|
|
6793
|
+
protected onInsertColLeft(): void;
|
|
6794
|
+
protected onInsertColRight(): void;
|
|
6795
|
+
protected onDeleteRow(): void;
|
|
6796
|
+
protected onDeleteColumn(): void;
|
|
6797
|
+
protected onMergeRight(): void;
|
|
6798
|
+
protected onMergeDown(): void;
|
|
6799
|
+
protected onSplitCell(): void;
|
|
6800
|
+
protected onMergeSelected(): void;
|
|
6801
|
+
/**
|
|
6802
|
+
* Run a pure table transform on the current table context and commit the
|
|
6803
|
+
* result through the editor (one undoable history entry), then close the menu.
|
|
6804
|
+
*/
|
|
6805
|
+
private applyTable;
|
|
6329
6806
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EditorContextMenuComponent, never>;
|
|
6330
6807
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EditorContextMenuComponent, "pptx-editor-context-menu", never, { "x": { "alias": "x"; "required": true; "isSignal": true; }; "y": { "alias": "y"; "required": true; "isSignal": true; }; "slideIndex": { "alias": "slideIndex"; "required": true; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
|
|
6331
6808
|
}
|
|
@@ -6609,7 +7086,7 @@ declare function overallStatus(signatures: readonly ParsedSignature[]): OverallS
|
|
|
6609
7086
|
/** Header label for the panel given the overall package status. */
|
|
6610
7087
|
declare function headerLabel(overall: OverallSignatureStatus): string;
|
|
6611
7088
|
/** Human-readable label for a per-signature status. */
|
|
6612
|
-
declare function statusLabel(status: SignatureStatus): string;
|
|
7089
|
+
declare function statusLabel$1(status: SignatureStatus): string;
|
|
6613
7090
|
/** Coarse validity bucket for styling: valid / invalid / unknown. */
|
|
6614
7091
|
declare function statusKind(status: SignatureStatus): SignatureStatusKind;
|
|
6615
7092
|
/** Best-effort signer name: certificate subject, else issuer, else path. */
|
|
@@ -6998,6 +7475,539 @@ declare class BroadcastDialogComponent {
|
|
|
6998
7475
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BroadcastDialogComponent, "pptx-broadcast-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaults": { "alias": "defaults"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "connected": { "alias": "connected"; "required": false; "isSignal": true; }; "viewerCount": { "alias": "viewerCount"; "required": false; "isSignal": true; }; "viewerUrl": { "alias": "viewerUrl"; "required": false; "isSignal": true; }; }, { "start": "start"; "stop": "stop"; "close": "close"; }, never, never, true, never>;
|
|
6999
7476
|
}
|
|
7000
7477
|
|
|
7478
|
+
declare class ViewerCompareService {
|
|
7479
|
+
private readonly svc;
|
|
7480
|
+
private readonly editor;
|
|
7481
|
+
/**
|
|
7482
|
+
* Open a `.pptx` picker and diff it against the current deck, opening the
|
|
7483
|
+
* compare panel with the result. Invoked from the ribbon.
|
|
7484
|
+
*/
|
|
7485
|
+
startCompare(): void;
|
|
7486
|
+
/** Parse the chosen file and compute the slide-level diff. */
|
|
7487
|
+
private runCompare;
|
|
7488
|
+
/** Accept a single slide diff, adopting the incoming slide. */
|
|
7489
|
+
acceptSlide(diffIndex: number): void;
|
|
7490
|
+
/** Reject a diff: keep the current slide (no deck change). */
|
|
7491
|
+
rejectSlide(_diffIndex: number): void;
|
|
7492
|
+
/** Accept every non-trivial diff at once. */
|
|
7493
|
+
acceptAll(): void;
|
|
7494
|
+
private diffAt;
|
|
7495
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerCompareService, never>;
|
|
7496
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerCompareService>;
|
|
7497
|
+
}
|
|
7498
|
+
|
|
7499
|
+
declare class ViewerExtraDialogsComponent {
|
|
7500
|
+
/** Active slide index (equation inserts land on this slide). */
|
|
7501
|
+
readonly activeSlideIndex: _angular_core.InputSignal<number>;
|
|
7502
|
+
/** Id of the single selected element (target for an equation edit). */
|
|
7503
|
+
readonly selectedElementId: _angular_core.InputSignal<string | null>;
|
|
7504
|
+
/** Host file path used by the version-history panel to key IndexedDB. */
|
|
7505
|
+
readonly filePath: _angular_core.InputSignal<string | undefined>;
|
|
7506
|
+
/** Custom shows offered in the set-up-slide-show "show slides" fieldset. */
|
|
7507
|
+
readonly customShows: _angular_core.InputSignal<PptxCustomShow[]>;
|
|
7508
|
+
/** Fired with a restored `.pptx` version's bytes; the host swaps the deck. */
|
|
7509
|
+
readonly restoreContent: _angular_core.OutputEmitterRef<Uint8Array<ArrayBufferLike>>;
|
|
7510
|
+
protected readonly svc: ViewerDialogsService;
|
|
7511
|
+
protected readonly compare: ViewerCompareService;
|
|
7512
|
+
protected readonly editor: EditorStateService;
|
|
7513
|
+
protected readonly loader: LoadContentService;
|
|
7514
|
+
private readonly fonts;
|
|
7515
|
+
/** Distinct font families used across the editable deck. */
|
|
7516
|
+
protected readonly usedFontFamilies: _angular_core.Signal<string[]>;
|
|
7517
|
+
/** Families backed by an embedded @font-face rule. */
|
|
7518
|
+
protected readonly embeddedFamilies: _angular_core.Signal<string[]>;
|
|
7519
|
+
/** Media data-URL map as a plain record for the compare thumbnails. */
|
|
7520
|
+
protected readonly mediaRecord: _angular_core.Signal<Record<string, string>>;
|
|
7521
|
+
/** Guards the one-shot signature-stripped warning on first edit. */
|
|
7522
|
+
private signatureWarningShown;
|
|
7523
|
+
/** Presentation-mode ink pending the keep/discard decision. */
|
|
7524
|
+
private readonly pendingAnnotations;
|
|
7525
|
+
constructor();
|
|
7526
|
+
/**
|
|
7527
|
+
* Offer the keep/discard prompt for ink drawn during a presentation.
|
|
7528
|
+
* Called by the viewer when the presentation overlay exits with annotations.
|
|
7529
|
+
*/
|
|
7530
|
+
promptKeepAnnotations(map: SlideAnnotationMap): void;
|
|
7531
|
+
/** Persist the pending presentation ink as `ink` elements on their slides. */
|
|
7532
|
+
onKeepAnnotations(): void;
|
|
7533
|
+
/** Drop the pending presentation ink. */
|
|
7534
|
+
onDiscardAnnotations(): void;
|
|
7535
|
+
/** Insert a new equation element, or update the one currently being edited. */
|
|
7536
|
+
onEquationInsert(omml: Record<string, unknown>): void;
|
|
7537
|
+
/** Persist the slide-show settings for this session. */
|
|
7538
|
+
onSlideShowSave(properties: PptxPresentationProperties): void;
|
|
7539
|
+
/** Record a save password (applied by the save pipeline). */
|
|
7540
|
+
onSetPassword(password: string): void;
|
|
7541
|
+
/** Clear any save password. */
|
|
7542
|
+
onRemovePassword(): void;
|
|
7543
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerExtraDialogsComponent, never>;
|
|
7544
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ViewerExtraDialogsComponent, "pptx-viewer-extra-dialogs", never, { "activeSlideIndex": { "alias": "activeSlideIndex"; "required": false; "isSignal": true; }; "selectedElementId": { "alias": "selectedElementId"; "required": false; "isSignal": true; }; "filePath": { "alias": "filePath"; "required": false; "isSignal": true; }; "customShows": { "alias": "customShows"; "required": false; "isSignal": true; }; }, { "restoreContent": "restoreContent"; }, never, never, true, never>;
|
|
7545
|
+
}
|
|
7546
|
+
|
|
7547
|
+
declare class EquationEditorDialogComponent {
|
|
7548
|
+
/** Whether the dialog is visible. */
|
|
7549
|
+
readonly open: _angular_core.InputSignal<boolean>;
|
|
7550
|
+
/** When editing an existing equation, its OMML tree (null for a fresh insert). */
|
|
7551
|
+
readonly existingOmml: _angular_core.InputSignal<Record<string, unknown> | null>;
|
|
7552
|
+
/** Fired with the OMML object to insert / update on the slide. */
|
|
7553
|
+
readonly insert: _angular_core.OutputEmitterRef<Record<string, unknown>>;
|
|
7554
|
+
/** Fired when the dialog is dismissed. */
|
|
7555
|
+
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
7556
|
+
private readonly sanitizer;
|
|
7557
|
+
/** Current LaTeX source in the textarea. */
|
|
7558
|
+
readonly latex: _angular_core.WritableSignal<string>;
|
|
7559
|
+
/** True when editing an existing equation (drives the title / button label). */
|
|
7560
|
+
readonly isEditing: _angular_core.Signal<boolean>;
|
|
7561
|
+
/** Header title: edit vs insert. */
|
|
7562
|
+
readonly dialogTitle: _angular_core.Signal<"Edit Equation" | "Insert Equation">;
|
|
7563
|
+
/** Live OMML compiled from the current LaTeX ({} on failure / empty input). */
|
|
7564
|
+
private readonly omml;
|
|
7565
|
+
/** Whether there is a renderable equation (drives preview + insert enabling). */
|
|
7566
|
+
readonly hasContent: _angular_core.Signal<boolean>;
|
|
7567
|
+
/** Sanitized MathML preview for the current LaTeX. */
|
|
7568
|
+
readonly previewMathml: _angular_core.Signal<SafeHtml>;
|
|
7569
|
+
constructor();
|
|
7570
|
+
asValue(event: Event): string;
|
|
7571
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
7572
|
+
onInsert(): void;
|
|
7573
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EquationEditorDialogComponent, never>;
|
|
7574
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EquationEditorDialogComponent, "pptx-equation-editor-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "existingOmml": { "alias": "existingOmml"; "required": false; "isSignal": true; }; }, { "insert": "insert"; "close": "close"; }, never, never, true, never>;
|
|
7575
|
+
}
|
|
7576
|
+
|
|
7577
|
+
/**
|
|
7578
|
+
* equation-editor-helpers.ts: Pure helpers backing the equation editor dialog
|
|
7579
|
+
* and its template gallery. Kept framework-free (no Angular / DOM) so the
|
|
7580
|
+
* LaTeX -> MathML conversion and the template catalogue are unit testable in
|
|
7581
|
+
* isolation.
|
|
7582
|
+
*/
|
|
7583
|
+
/** Describes a pre-built equation template shown in the template gallery. */
|
|
7584
|
+
interface EquationTemplate {
|
|
7585
|
+
/** Human-readable label (English fallback). */
|
|
7586
|
+
label: string;
|
|
7587
|
+
/** LaTeX source for the template equation. */
|
|
7588
|
+
latex: string;
|
|
7589
|
+
}
|
|
7590
|
+
/** Pre-defined equation templates covering common mathematical formulas. */
|
|
7591
|
+
declare const TEMPLATES: EquationTemplate[];
|
|
7592
|
+
/** Convert a LaTeX string to a MathML markup string, empty on any failure. */
|
|
7593
|
+
declare function latexToMathml(latex: string): string;
|
|
7594
|
+
|
|
7595
|
+
declare class EquationTemplateGalleryComponent {
|
|
7596
|
+
/** Current LaTeX source (drives the active-template highlight). */
|
|
7597
|
+
readonly activeLatex: _angular_core.InputSignal<string>;
|
|
7598
|
+
/** Fired with the chosen template's LaTeX when a tile is clicked. */
|
|
7599
|
+
readonly select: _angular_core.OutputEmitterRef<string>;
|
|
7600
|
+
private readonly sanitizer;
|
|
7601
|
+
/** Templates with pre-computed MathML previews (built once). */
|
|
7602
|
+
protected readonly templates: ReadonlyArray<EquationTemplate & {
|
|
7603
|
+
mathml: SafeHtml;
|
|
7604
|
+
}>;
|
|
7605
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EquationTemplateGalleryComponent, never>;
|
|
7606
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EquationTemplateGalleryComponent, "pptx-equation-template-gallery", never, { "activeLatex": { "alias": "activeLatex"; "required": false; "isSignal": true; }; }, { "select": "select"; }, never, never, true, never>;
|
|
7607
|
+
}
|
|
7608
|
+
|
|
7609
|
+
declare class SetUpSlideShowDialogComponent {
|
|
7610
|
+
/** Whether the dialog is visible. */
|
|
7611
|
+
readonly open: _angular_core.InputSignal<boolean>;
|
|
7612
|
+
/** Persisted slide-show properties used to seed the draft on open. */
|
|
7613
|
+
readonly properties: _angular_core.InputSignal<PptxPresentationProperties>;
|
|
7614
|
+
/** Named custom shows defined by the deck (may be empty). */
|
|
7615
|
+
readonly customShows: _angular_core.InputSignal<PptxCustomShow[]>;
|
|
7616
|
+
/** Total number of slides in the deck (clamps the range inputs). */
|
|
7617
|
+
readonly slideCount: _angular_core.InputSignal<number>;
|
|
7618
|
+
/** Fired with the final draft when the user confirms with OK. */
|
|
7619
|
+
readonly save: _angular_core.OutputEmitterRef<PptxPresentationProperties>;
|
|
7620
|
+
/** Fired when the dialog is dismissed (Cancel, backdrop, Escape). */
|
|
7621
|
+
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
7622
|
+
/** Working copy of the properties; seeded from `properties` on open. */
|
|
7623
|
+
readonly draft: _angular_core.WritableSignal<PptxPresentationProperties>;
|
|
7624
|
+
readonly showType: _angular_core.Signal<"presented" | "browsed" | "kiosk">;
|
|
7625
|
+
readonly showSlidesMode: _angular_core.Signal<"all" | "customShow" | "range">;
|
|
7626
|
+
constructor();
|
|
7627
|
+
/** Merge a partial patch into the current draft. */
|
|
7628
|
+
update(patch: Partial<PptxPresentationProperties>): void;
|
|
7629
|
+
onClose(): void;
|
|
7630
|
+
onOk(): void;
|
|
7631
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SetUpSlideShowDialogComponent, never>;
|
|
7632
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SetUpSlideShowDialogComponent, "pptx-set-up-slide-show-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "properties": { "alias": "properties"; "required": false; "isSignal": true; }; "customShows": { "alias": "customShows"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; }, { "save": "save"; "close": "close"; }, never, never, true, never>;
|
|
7633
|
+
}
|
|
7634
|
+
|
|
7635
|
+
declare class ShowOptionsFieldsetComponent {
|
|
7636
|
+
/** Current slide-show properties draft (source of the checkbox states). */
|
|
7637
|
+
readonly draft: _angular_core.InputSignal<PptxPresentationProperties>;
|
|
7638
|
+
/** Emits a partial patch to merge into the host draft. */
|
|
7639
|
+
readonly patch: _angular_core.OutputEmitterRef<Partial<PptxPresentationProperties>>;
|
|
7640
|
+
protected isChecked(event: Event): boolean;
|
|
7641
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShowOptionsFieldsetComponent, never>;
|
|
7642
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShowOptionsFieldsetComponent, "pptx-show-options-fieldset", never, { "draft": { "alias": "draft"; "required": false; "isSignal": true; }; }, { "patch": "patch"; }, never, never, true, never>;
|
|
7643
|
+
}
|
|
7644
|
+
|
|
7645
|
+
declare class ShowSlidesFieldsetComponent {
|
|
7646
|
+
/** Current slide-show properties draft. */
|
|
7647
|
+
readonly draft: _angular_core.InputSignal<PptxPresentationProperties>;
|
|
7648
|
+
/** Derived active mode (falls back to 'all' upstream). */
|
|
7649
|
+
readonly showSlidesMode: _angular_core.InputSignal<"all" | "customShow" | "range">;
|
|
7650
|
+
/** Total number of slides in the deck (clamps the range inputs). */
|
|
7651
|
+
readonly slideCount: _angular_core.InputSignal<number>;
|
|
7652
|
+
/** Named custom shows defined by the deck (may be empty). */
|
|
7653
|
+
readonly customShows: _angular_core.InputSignal<PptxCustomShow[]>;
|
|
7654
|
+
/** Emits a partial patch to merge into the host draft. */
|
|
7655
|
+
readonly patch: _angular_core.OutputEmitterRef<Partial<PptxPresentationProperties>>;
|
|
7656
|
+
protected onSelectRange(): void;
|
|
7657
|
+
protected onFromInput(event: Event): void;
|
|
7658
|
+
protected onToInput(event: Event): void;
|
|
7659
|
+
protected onSelectCustomShow(): void;
|
|
7660
|
+
protected onSelectCustomShowId(event: Event): void;
|
|
7661
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShowSlidesFieldsetComponent, never>;
|
|
7662
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShowSlidesFieldsetComponent, "pptx-show-slides-fieldset", never, { "draft": { "alias": "draft"; "required": false; "isSignal": true; }; "showSlidesMode": { "alias": "showSlidesMode"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "customShows": { "alias": "customShows"; "required": false; "isSignal": true; }; }, { "patch": "patch"; }, never, never, true, never>;
|
|
7663
|
+
}
|
|
7664
|
+
|
|
7665
|
+
declare class PasswordProtectionDialogComponent {
|
|
7666
|
+
/** Whether the dialog is visible. */
|
|
7667
|
+
readonly open: _angular_core.InputSignal<boolean>;
|
|
7668
|
+
/** Whether the presentation already has a password. */
|
|
7669
|
+
readonly isCurrentlyProtected: _angular_core.InputSignal<boolean>;
|
|
7670
|
+
/** Fired with the new password when the user confirms. */
|
|
7671
|
+
readonly setPassword: _angular_core.OutputEmitterRef<string>;
|
|
7672
|
+
/** Fired when the user removes the existing password. */
|
|
7673
|
+
readonly removePassword: _angular_core.OutputEmitterRef<void>;
|
|
7674
|
+
/** Fired when the dialog is dismissed. */
|
|
7675
|
+
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
7676
|
+
readonly password: _angular_core.WritableSignal<string>;
|
|
7677
|
+
readonly confirmPassword: _angular_core.WritableSignal<string>;
|
|
7678
|
+
readonly showPassword: _angular_core.WritableSignal<boolean>;
|
|
7679
|
+
readonly error: _angular_core.WritableSignal<string>;
|
|
7680
|
+
constructor();
|
|
7681
|
+
onPasswordInput(event: Event): void;
|
|
7682
|
+
onConfirmInput(event: Event): void;
|
|
7683
|
+
onSubmit(): void;
|
|
7684
|
+
onRemove(): void;
|
|
7685
|
+
onClose(): void;
|
|
7686
|
+
private resetFields;
|
|
7687
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PasswordProtectionDialogComponent, never>;
|
|
7688
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PasswordProtectionDialogComponent, "pptx-password-protection-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "isCurrentlyProtected": { "alias": "isCurrentlyProtected"; "required": false; "isSignal": true; }; }, { "setPassword": "setPassword"; "removePassword": "removePassword"; "close": "close"; }, never, never, true, never>;
|
|
7689
|
+
}
|
|
7690
|
+
|
|
7691
|
+
declare class PasswordStrengthMeterComponent {
|
|
7692
|
+
/** Current password (source of the derived strength). */
|
|
7693
|
+
readonly password: _angular_core.InputSignal<string>;
|
|
7694
|
+
readonly bars: number[];
|
|
7695
|
+
readonly strength: _angular_core.Signal<number>;
|
|
7696
|
+
readonly strengthColor: _angular_core.Signal<string>;
|
|
7697
|
+
readonly strengthLabel: _angular_core.Signal<string>;
|
|
7698
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PasswordStrengthMeterComponent, never>;
|
|
7699
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PasswordStrengthMeterComponent, "pptx-password-strength-meter", never, { "password": { "alias": "password"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
7700
|
+
}
|
|
7701
|
+
|
|
7702
|
+
/**
|
|
7703
|
+
* password-protection-helpers.ts: Pure helpers backing the password-protection
|
|
7704
|
+
* dialog. Framework-free (no Angular / DOM) so the strength scoring, its
|
|
7705
|
+
* colour/label lookup, and the submit validation are unit testable in
|
|
7706
|
+
* isolation.
|
|
7707
|
+
*/
|
|
7708
|
+
/** Returns a strength score 0-4 for a password. Ported verbatim from React. */
|
|
7709
|
+
declare function getPasswordStrength(password: string): number;
|
|
7710
|
+
/**
|
|
7711
|
+
* Validate the two password fields for the submit action. Returns an English
|
|
7712
|
+
* error message, or the empty string when the pair is acceptable. Mirrors the
|
|
7713
|
+
* React dialog's inline checks (non-empty, matching, >= 4 chars).
|
|
7714
|
+
*/
|
|
7715
|
+
declare function validatePassword(password: string, confirmPassword: string): string;
|
|
7716
|
+
|
|
7717
|
+
declare class EncryptedFileDialogComponent {
|
|
7718
|
+
/** Whether the dialog is visible. */
|
|
7719
|
+
readonly open: _angular_core.InputSignal<boolean>;
|
|
7720
|
+
/** Fired when the dialog is dismissed. */
|
|
7721
|
+
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
7722
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EncryptedFileDialogComponent, never>;
|
|
7723
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EncryptedFileDialogComponent, "pptx-encrypted-file-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, never, true, never>;
|
|
7724
|
+
}
|
|
7725
|
+
|
|
7726
|
+
declare class ComparePanelComponent {
|
|
7727
|
+
readonly open: _angular_core.InputSignal<boolean>;
|
|
7728
|
+
readonly compareResult: _angular_core.InputSignal<CompareResult | null>;
|
|
7729
|
+
readonly canvasSize: _angular_core.InputSignal<CanvasSize>;
|
|
7730
|
+
readonly mediaDataUrls: _angular_core.InputSignal<Record<string, string>>;
|
|
7731
|
+
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
7732
|
+
readonly acceptSlide: _angular_core.OutputEmitterRef<number>;
|
|
7733
|
+
readonly rejectSlide: _angular_core.OutputEmitterRef<number>;
|
|
7734
|
+
readonly acceptAll: _angular_core.OutputEmitterRef<void>;
|
|
7735
|
+
/** Diff indices the user has accepted. */
|
|
7736
|
+
private readonly accepted;
|
|
7737
|
+
/** Diff indices the user has rejected. */
|
|
7738
|
+
private readonly rejected;
|
|
7739
|
+
/** Count of diffs worth reviewing (everything except `unchanged`). */
|
|
7740
|
+
readonly nonTrivialCount: _angular_core.Signal<number>;
|
|
7741
|
+
isAccepted(index: number): boolean;
|
|
7742
|
+
isRejected(index: number): boolean;
|
|
7743
|
+
handleAccept(index: number): void;
|
|
7744
|
+
handleReject(index: number): void;
|
|
7745
|
+
handleAcceptAll(): void;
|
|
7746
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ComparePanelComponent, never>;
|
|
7747
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ComparePanelComponent, "pptx-compare-panel", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "compareResult": { "alias": "compareResult"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; }, { "close": "close"; "acceptSlide": "acceptSlide"; "rejectSlide": "rejectSlide"; "acceptAll": "acceptAll"; }, never, never, true, never>;
|
|
7748
|
+
}
|
|
7749
|
+
|
|
7750
|
+
declare class SlideDiffRowComponent {
|
|
7751
|
+
readonly diff: _angular_core.InputSignal<SlideDiff>;
|
|
7752
|
+
readonly diffIndex: _angular_core.InputSignal<number>;
|
|
7753
|
+
readonly canvasSize: _angular_core.InputSignal<CanvasSize>;
|
|
7754
|
+
readonly mediaDataUrls: _angular_core.InputSignal<Record<string, string>>;
|
|
7755
|
+
readonly accepted: _angular_core.InputSignal<boolean>;
|
|
7756
|
+
readonly rejected: _angular_core.InputSignal<boolean>;
|
|
7757
|
+
readonly accept: _angular_core.OutputEmitterRef<number>;
|
|
7758
|
+
readonly reject: _angular_core.OutputEmitterRef<number>;
|
|
7759
|
+
/** null = follow the default (expanded when status is `changed`). */
|
|
7760
|
+
private readonly expandedOverride;
|
|
7761
|
+
readonly expanded: _angular_core.Signal<boolean>;
|
|
7762
|
+
readonly isResolved: _angular_core.Signal<boolean>;
|
|
7763
|
+
readonly slideNumber: _angular_core.Signal<number>;
|
|
7764
|
+
readonly statusLabel: _angular_core.Signal<string>;
|
|
7765
|
+
readonly changeCountLabel: _angular_core.Signal<string>;
|
|
7766
|
+
toggle(): void;
|
|
7767
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideDiffRowComponent, never>;
|
|
7768
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideDiffRowComponent, "pptx-slide-diff-row", never, { "diff": { "alias": "diff"; "required": true; "isSignal": true; }; "diffIndex": { "alias": "diffIndex"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "accepted": { "alias": "accepted"; "required": false; "isSignal": true; }; "rejected": { "alias": "rejected"; "required": false; "isSignal": true; }; }, { "accept": "accept"; "reject": "reject"; }, never, never, true, never>;
|
|
7769
|
+
}
|
|
7770
|
+
|
|
7771
|
+
declare class SlideDiffThumbnailsComponent {
|
|
7772
|
+
/** Exposed to the template for the fixed thumbnail box width. */
|
|
7773
|
+
protected readonly THUMB_W = 180;
|
|
7774
|
+
readonly diff: _angular_core.InputSignal<SlideDiff>;
|
|
7775
|
+
readonly canvasSize: _angular_core.InputSignal<CanvasSize>;
|
|
7776
|
+
readonly mediaDataUrls: _angular_core.InputSignal<Record<string, string>>;
|
|
7777
|
+
/** SlideCanvas expects a Map; convert the Record input once per change. */
|
|
7778
|
+
readonly mediaMap: _angular_core.Signal<Map<string, string>>;
|
|
7779
|
+
readonly thumbZoom: _angular_core.Signal<number>;
|
|
7780
|
+
readonly thumbH: _angular_core.Signal<number>;
|
|
7781
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideDiffThumbnailsComponent, never>;
|
|
7782
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideDiffThumbnailsComponent, "pptx-slide-diff-thumbnails", never, { "diff": { "alias": "diff"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
7783
|
+
}
|
|
7784
|
+
|
|
7785
|
+
/**
|
|
7786
|
+
* slide-diff-helpers.ts: Pure label / icon helpers for the slide-diff row and
|
|
7787
|
+
* its change list. Framework-free so they are unit testable in isolation.
|
|
7788
|
+
*/
|
|
7789
|
+
|
|
7790
|
+
/** Single-character glyph for a per-element change kind. */
|
|
7791
|
+
declare function changeIcon(kind: ElementChange['kind']): string;
|
|
7792
|
+
/** Human-readable status pill label for a slide diff. */
|
|
7793
|
+
declare function statusLabel(status: SlideDiff['status']): string;
|
|
7794
|
+
/** "N change" / "N changes" summary for a diff's change count. */
|
|
7795
|
+
declare function changeCountLabel(count: number): string;
|
|
7796
|
+
/** 1-based slide number for a diff, preferring the base index when present. */
|
|
7797
|
+
declare function slideNumberOf(diff: SlideDiff): number;
|
|
7798
|
+
|
|
7799
|
+
declare class SlideDiffChangesComponent {
|
|
7800
|
+
readonly changes: _angular_core.InputSignal<readonly ElementChange[]>;
|
|
7801
|
+
protected readonly icon: typeof changeIcon;
|
|
7802
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SlideDiffChangesComponent, never>;
|
|
7803
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SlideDiffChangesComponent, "pptx-slide-diff-changes", never, { "changes": { "alias": "changes"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
7804
|
+
}
|
|
7805
|
+
|
|
7806
|
+
declare class FontEmbeddingPanelComponent {
|
|
7807
|
+
/** Whether the dialog is visible. */
|
|
7808
|
+
readonly open: _angular_core.InputSignal<boolean>;
|
|
7809
|
+
/** Whether font embedding is currently enabled. */
|
|
7810
|
+
readonly embedFontsEnabled: _angular_core.InputSignal<boolean>;
|
|
7811
|
+
/** Font families referenced by the presentation. */
|
|
7812
|
+
readonly usedFontFamilies: _angular_core.InputSignal<string[]>;
|
|
7813
|
+
/** Font families already embedded in the file. */
|
|
7814
|
+
readonly embeddedFonts: _angular_core.InputSignal<string[]>;
|
|
7815
|
+
/** Fired when the dialog is dismissed. */
|
|
7816
|
+
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
7817
|
+
/** Fired when the embed toggle changes; carries the new checked state. */
|
|
7818
|
+
readonly toggleEmbedFonts: _angular_core.OutputEmitterRef<boolean>;
|
|
7819
|
+
/** Families that resolve in the current browser (populated by the scan). */
|
|
7820
|
+
readonly availableFamilies: _angular_core.WritableSignal<Set<string>>;
|
|
7821
|
+
/** True while the font-availability scan is running. */
|
|
7822
|
+
readonly scanning: _angular_core.WritableSignal<boolean>;
|
|
7823
|
+
/** True once a scan has completed for the current open cycle. */
|
|
7824
|
+
readonly scanned: _angular_core.WritableSignal<boolean>;
|
|
7825
|
+
/** Set view of {@link embeddedFonts} for fast membership checks. */
|
|
7826
|
+
readonly embeddedSet: _angular_core.Signal<Set<string>>;
|
|
7827
|
+
/** How many used families failed to resolve in the browser. */
|
|
7828
|
+
readonly missingCount: _angular_core.Signal<number>;
|
|
7829
|
+
constructor();
|
|
7830
|
+
onToggle(event: Event): void;
|
|
7831
|
+
private scanFonts;
|
|
7832
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FontEmbeddingPanelComponent, never>;
|
|
7833
|
+
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>;
|
|
7834
|
+
}
|
|
7835
|
+
|
|
7836
|
+
declare class FontEmbeddingListComponent {
|
|
7837
|
+
/** Font families referenced by the presentation. */
|
|
7838
|
+
readonly usedFontFamilies: _angular_core.InputSignal<string[]>;
|
|
7839
|
+
/** Families that resolve in the current browser. */
|
|
7840
|
+
readonly availableFamilies: _angular_core.InputSignal<Set<string>>;
|
|
7841
|
+
/** Families already embedded in the file. */
|
|
7842
|
+
readonly embeddedSet: _angular_core.InputSignal<Set<string>>;
|
|
7843
|
+
/** True while the font-availability scan is running. */
|
|
7844
|
+
readonly scanning: _angular_core.InputSignal<boolean>;
|
|
7845
|
+
/** How many used families failed to resolve in the browser. */
|
|
7846
|
+
readonly missingCount: _angular_core.InputSignal<number>;
|
|
7847
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FontEmbeddingListComponent, never>;
|
|
7848
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FontEmbeddingListComponent, "pptx-font-embedding-list", never, { "usedFontFamilies": { "alias": "usedFontFamilies"; "required": false; "isSignal": true; }; "availableFamilies": { "alias": "availableFamilies"; "required": false; "isSignal": true; }; "embeddedSet": { "alias": "embeddedSet"; "required": false; "isSignal": true; }; "scanning": { "alias": "scanning"; "required": false; "isSignal": true; }; "missingCount": { "alias": "missingCount"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
7849
|
+
}
|
|
7850
|
+
|
|
7851
|
+
/**
|
|
7852
|
+
* font-embedding-helpers.ts: font-availability probing for the font-embedding
|
|
7853
|
+
* panel. Thin wrappers around `document.fonts` kept in one module so the panel
|
|
7854
|
+
* component stays a thin view + wiring layer.
|
|
7855
|
+
*/
|
|
7856
|
+
/**
|
|
7857
|
+
* Whether a font family resolves in the current browser. Pure guard around
|
|
7858
|
+
* `document.fonts.check`; returns false in non-DOM environments or on error.
|
|
7859
|
+
*/
|
|
7860
|
+
declare function checkFontAvailable(family: string): boolean;
|
|
7861
|
+
/**
|
|
7862
|
+
* Wait for fonts to settle, then return the subset of `families` that resolve
|
|
7863
|
+
* in the current browser. Never throws; returns an empty set on failure.
|
|
7864
|
+
*/
|
|
7865
|
+
declare function scanAvailableFonts(families: readonly string[]): Promise<Set<string>>;
|
|
7866
|
+
|
|
7867
|
+
/**
|
|
7868
|
+
* version-history-helpers.ts: IndexedDB access and formatting for the version-
|
|
7869
|
+
* history panel. Split out of the component so the DOM-free `formatFileSize`
|
|
7870
|
+
* formatter is unit testable and the IndexedDB plumbing (which mirrors the
|
|
7871
|
+
* autosave store) lives in one focused module.
|
|
7872
|
+
*/
|
|
7873
|
+
/** A single autosaved recovery snapshot. */
|
|
7874
|
+
interface RecoveryVersion {
|
|
7875
|
+
key: string;
|
|
7876
|
+
timestamp: number;
|
|
7877
|
+
size: number;
|
|
7878
|
+
data: Uint8Array;
|
|
7879
|
+
}
|
|
7880
|
+
/** Read the recovery snapshots stored for a given file path (empty on error). */
|
|
7881
|
+
declare function getVersions(filePath: string): Promise<RecoveryVersion[]>;
|
|
7882
|
+
/** Delete the recovery snapshot stored under `filePath` (best-effort). */
|
|
7883
|
+
declare function deleteVersion(filePath: string): Promise<void>;
|
|
7884
|
+
/** Format a byte count as a human-readable size (B / KB / MB). */
|
|
7885
|
+
declare function formatFileSize(bytes: number): string;
|
|
7886
|
+
|
|
7887
|
+
declare class VersionHistoryPanelComponent {
|
|
7888
|
+
/** Whether the side panel is visible. */
|
|
7889
|
+
readonly open: _angular_core.InputSignal<boolean>;
|
|
7890
|
+
/** The current file's key into the recovery store. */
|
|
7891
|
+
readonly filePath: _angular_core.InputSignal<string | undefined>;
|
|
7892
|
+
/** Fired when the panel is dismissed. */
|
|
7893
|
+
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
7894
|
+
/** Fired with the restored version's bytes. */
|
|
7895
|
+
readonly restore: _angular_core.OutputEmitterRef<Uint8Array<ArrayBufferLike>>;
|
|
7896
|
+
readonly versions: _angular_core.WritableSignal<RecoveryVersion[]>;
|
|
7897
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
7898
|
+
readonly restoringKey: _angular_core.WritableSignal<string | null>;
|
|
7899
|
+
readonly deletingKey: _angular_core.WritableSignal<string | null>;
|
|
7900
|
+
/** Template-facing bindings for the vendored shared formatters. */
|
|
7901
|
+
protected readonly formatTimestamp: typeof formatVersionTimestamp;
|
|
7902
|
+
protected readonly formatRelative: typeof formatRelativeTime;
|
|
7903
|
+
protected readonly formatSize: typeof formatFileSize;
|
|
7904
|
+
constructor();
|
|
7905
|
+
private fetchVersions;
|
|
7906
|
+
onRestore(version: RecoveryVersion): void;
|
|
7907
|
+
onDelete(version: RecoveryVersion): void;
|
|
7908
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<VersionHistoryPanelComponent, never>;
|
|
7909
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<VersionHistoryPanelComponent, "pptx-version-history-panel", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "filePath": { "alias": "filePath"; "required": false; "isSignal": true; }; }, { "close": "close"; "restore": "restore"; }, never, never, true, never>;
|
|
7910
|
+
}
|
|
7911
|
+
|
|
7912
|
+
/**
|
|
7913
|
+
* shortcut-reference.ts: Keyboard shortcut cheat-sheet data.
|
|
7914
|
+
*
|
|
7915
|
+
* Angular copy of the React constant `SHORTCUT_REFERENCE_ITEMS` from
|
|
7916
|
+
* `packages/react/src/viewer/constants/toolbar.ts`. Kept as a tiny, purely
|
|
7917
|
+
* declarative data module so the `pptx-shortcut-panel` component stays thin.
|
|
7918
|
+
* Entries are copied verbatim from the React source and must stay in sync.
|
|
7919
|
+
*/
|
|
7920
|
+
/** A single row in the keyboard-shortcut reference list. */
|
|
7921
|
+
interface ShortcutReferenceItem {
|
|
7922
|
+
action: string;
|
|
7923
|
+
shortcut: string;
|
|
7924
|
+
}
|
|
7925
|
+
|
|
7926
|
+
declare class ShortcutPanelComponent {
|
|
7927
|
+
/** Whether the popover is visible. */
|
|
7928
|
+
readonly open: _angular_core.InputSignal<boolean>;
|
|
7929
|
+
/** Fired when the Close button is clicked. */
|
|
7930
|
+
readonly close: _angular_core.OutputEmitterRef<void>;
|
|
7931
|
+
/** Static shortcut reference rows. */
|
|
7932
|
+
protected readonly items: ShortcutReferenceItem[];
|
|
7933
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ShortcutPanelComponent, never>;
|
|
7934
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShortcutPanelComponent, "pptx-shortcut-panel", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, never, true, never>;
|
|
7935
|
+
}
|
|
7936
|
+
|
|
7937
|
+
declare class KeepAnnotationsDialogComponent {
|
|
7938
|
+
/** Whether the dialog is visible. */
|
|
7939
|
+
readonly open: _angular_core.InputSignal<boolean>;
|
|
7940
|
+
/** How many ink annotations were drawn. */
|
|
7941
|
+
readonly annotationCount: _angular_core.InputSignal<number>;
|
|
7942
|
+
/** How many slides carry those annotations. */
|
|
7943
|
+
readonly slideCount: _angular_core.InputSignal<number>;
|
|
7944
|
+
/** Fired when the user keeps the annotations as ink on the slides. */
|
|
7945
|
+
readonly keep: _angular_core.OutputEmitterRef<void>;
|
|
7946
|
+
/** Fired when the user discards the annotations (also on dismiss). */
|
|
7947
|
+
readonly discard: _angular_core.OutputEmitterRef<void>;
|
|
7948
|
+
readonly description: _angular_core.Signal<string>;
|
|
7949
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KeepAnnotationsDialogComponent, never>;
|
|
7950
|
+
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>;
|
|
7951
|
+
}
|
|
7952
|
+
|
|
7953
|
+
declare class SignatureStrippedDialogComponent {
|
|
7954
|
+
/** Whether the dialog is visible. */
|
|
7955
|
+
readonly open: _angular_core.InputSignal<boolean>;
|
|
7956
|
+
/** How many digital signatures the document carries. */
|
|
7957
|
+
readonly signatureCount: _angular_core.InputSignal<number>;
|
|
7958
|
+
/** Fired when the user accepts that signatures will be removed. */
|
|
7959
|
+
readonly confirm: _angular_core.OutputEmitterRef<void>;
|
|
7960
|
+
/** Fired when the user backs out (also on dismiss). */
|
|
7961
|
+
readonly cancel: _angular_core.OutputEmitterRef<void>;
|
|
7962
|
+
readonly message: _angular_core.Signal<string>;
|
|
7963
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SignatureStrippedDialogComponent, never>;
|
|
7964
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SignatureStrippedDialogComponent, "pptx-signature-stripped-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "signatureCount": { "alias": "signatureCount"; "required": false; "isSignal": true; }; }, { "confirm": "confirm"; "cancel": "cancel"; }, never, never, true, never>;
|
|
7965
|
+
}
|
|
7966
|
+
|
|
7967
|
+
/**
|
|
7968
|
+
* viewer-extra-dialogs-helpers.ts: Pure helpers backing
|
|
7969
|
+
* {@link ViewerExtraDialogsComponent}. Kept framework-free (no Angular / DOM)
|
|
7970
|
+
* so the container stays a thin view + wiring layer and this logic is unit
|
|
7971
|
+
* testable in isolation.
|
|
7972
|
+
*/
|
|
7973
|
+
|
|
7974
|
+
/**
|
|
7975
|
+
* Build the single equation `TextSegment` carrying the supplied OMML payload.
|
|
7976
|
+
* Mirrors the structure produced by `newEquationElement` / the React equation
|
|
7977
|
+
* insert handler so the equation renderer consumes it identically.
|
|
7978
|
+
*/
|
|
7979
|
+
declare function buildEquationSegment(omml: Record<string, unknown>): TextSegment;
|
|
7980
|
+
/**
|
|
7981
|
+
* Build a fresh equation `shape` element (id left empty for the editor to
|
|
7982
|
+
* assign) whose text segment carries the supplied OMML. Matches the React
|
|
7983
|
+
* `handleInsertEquation` shape.
|
|
7984
|
+
*/
|
|
7985
|
+
declare function buildEquationElement(omml: Record<string, unknown>, x?: number, y?: number): PptxElement;
|
|
7986
|
+
/**
|
|
7987
|
+
* Collect the distinct font families referenced by every element on the deck,
|
|
7988
|
+
* scanning element-level `textStyle` and each `textSegments` entry. Used to
|
|
7989
|
+
* seed the font-embedding panel's "used fonts" list.
|
|
7990
|
+
*/
|
|
7991
|
+
declare function collectUsedFontFamilies(slides: readonly PptxSlide[]): string[];
|
|
7992
|
+
/** Total stroke count across a per-slide annotation map. */
|
|
7993
|
+
declare function countAnnotationStrokes(map: SlideAnnotationMap): number;
|
|
7994
|
+
/** A presentation-ink stroke converted to an ink element on its target slide. */
|
|
7995
|
+
interface AnnotationInkInsert {
|
|
7996
|
+
slideIndex: number;
|
|
7997
|
+
ink: InkPptxElement;
|
|
7998
|
+
}
|
|
7999
|
+
/**
|
|
8000
|
+
* Convert every kept presentation-mode stroke into an `ink` element insert.
|
|
8001
|
+
* Highlighter strokes are recognised by their semi-transparent opacity.
|
|
8002
|
+
*/
|
|
8003
|
+
declare function annotationMapToInkInserts(map: SlideAnnotationMap): AnnotationInkInsert[];
|
|
8004
|
+
/**
|
|
8005
|
+
* Return a new slide array with the accepted diff applied: an `added` slide is
|
|
8006
|
+
* appended, a `changed`/`removed` slide adopts the incoming (`compareSlide`)
|
|
8007
|
+
* version at its base index. Diffs without an incoming slide are ignored.
|
|
8008
|
+
*/
|
|
8009
|
+
declare function applyAcceptedDiff(slides: readonly PptxSlide[], diff: SlideDiff): PptxSlide[];
|
|
8010
|
+
|
|
7001
8011
|
declare class PrintDialogComponent {
|
|
7002
8012
|
/** All slides in the current presentation. */
|
|
7003
8013
|
readonly slides: _angular_core.InputSignal<PptxSlide[]>;
|
|
@@ -7582,5 +8592,5 @@ declare function themeStyle(theme: ViewerTheme | undefined): Record<string, stri
|
|
|
7582
8592
|
type ClassValue = string | number | false | null | undefined;
|
|
7583
8593
|
declare function cn(...values: ClassValue[]): string;
|
|
7584
8594
|
|
|
7585
|
-
export { AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AccessibilityPanelComponent, AccessibilityService, AdvancedChartEditorComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, BroadcastDialogComponent, CURSOR_PALETTE, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, CollaborationCursorsComponent, CollaborationService, CommentsPanelComponent, CommentsService, ConnectorRendererComponent, ConnectorTextOverlayComponent, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_FILL_COLOR, DEFAULT_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, EMBEDDED_FONTS_STYLE_ID, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EquationRendererComponent, ExportService, FindBarComponent, FindReplaceBarComponent, GradientPickerComponent, HANDOUT_OPTIONS, HyperlinkDialogComponent, InkRendererComponent, InspectorPanelComponent, IsMobileService, LoadContentService, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesPanelComponent, OleRendererComponent, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PowerPointViewerComponent, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationSubtitleBarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, RESIZE_HANDLES, SEVERITY_GROUPS, SEVERITY_LABELS, SLIDE_TRANSITION_KEYFRAMES, SVG_WARP_PRESETS, ShareDialogComponent, SignaturesPanelComponent, SignaturesService, SlideCanvasComponent, SlideSorterOverlayComponent, SlidesPanelComponent, SmartArtRendererComponent, StatusBarComponent, TYPE_LABELS, TableDataEditorComponent, TableRendererComponent, TextAdvancedPanelComponent, VIEWER_THEME, WEBM_MIME_CANDIDATES, ZoomRendererComponent, addCommentToList, advanceStep, applyFindReplacements, applyFormatToElement, applyMove, applyResize, assignUserColor, bringForward, bringToFront, buildBroadcastConfig, buildBroadcastViewerUrl, buildClearHyperlinkPatch, buildClickGroups, buildCollaborationConfig, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildFontFaceRule, buildHyperlinkPatch, buildPatternFillCss, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildShareUrl, bulletIndentPx, canStartBroadcast, canStartShare, canUseClipboard, clampCursorPosition, clampGifDimensions, clampNotesFontSize, clampStep, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, computeHandoutLayout, computeIsMobile, computeIsTablet, computePageCount, computeSlideIndices, computeTimerProgress, convertOmmlToMathMl, copyFormatFromElement, countAccessibilityIssues, defaultCssVars, defaultRadius, defaultThemeColors, deleteElementsByIds, derivePresenceList, duplicateElementById, durationOf, encodeGif, estimatePageCount, findInSlides, fontMimeForFormat, formatAutoNumber, formatCursorLabel, formatElapsed, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, getContainerStyle, getDuotoneFilterDef, getImageSrc, getPatternSvg, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getTextBlockStyle, getTextWarp, getWarpCategory, getWarpPath, groupIssuesBySeverity, hasCopyableFormat, hasExistingLink, headerLabel, isAudienceTab, isInjectableUrl, isPpactionUrl, isPresenterMessage, isSigned, isUrlSafe, isValidRoomId, issueTrackKey, issueTypeLabel, loadAudienceContent, moveElementBy, msToFrameDelayCs, normalizeFontFormat, normalizeSlidesPerPage, ommlToMathml, overallStatus, parseAudienceNonce, pendingElementStyles, pickSupportedMimeType, planGifFrames, planVideoSegments, presenceToCursors, provideViewerTheme, recordWebm, removeCommentFromList, renderToCanvas, replaceInSlides, replaceMatch, resizeElement, resolveFontVariant, resolveHyperlinkHref, resolveParagraphBullet, resolvePresenterNotes, resolveTransitionDuration, revealedElementStyles, routeOrthogonalConnector, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, sendBackward, sendToBack, setElementPosition, shouldUseSvgWarp, signatureCountLabel, signatureKey, signatureTimestamp, signerName, statusKind, statusLabel, storeAudienceContent, themeStyle, themeToCssVars, toggleCommentResolvedInList, updateElementById, validatePrintSettings, validateRoomId, waypointsToPathD, worstStatus };
|
|
7586
|
-
export type { AccessibilityIssueGroup, AnimationClickGroup, AnnotationStroke, Box, BroadcastConfig, BroadcastDefaults, CSSProperties, CanvasSize, ClassValue, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, DocumentProperties, DuotoneFilterDef, EmbeddedFontStyles, FindOptions, FindResult, GifFrame, GifFramePlan, GifPlanOptions, HandoutSlidesPerPage, HyperlinkDraft, NotesSegmentViewModel, ObjectUrlFactory, OverallSignatureStatus, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, PrintColorMode, PrintHtmlDocumentOptions as PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, RecordWebmOptions, RemoteCursor, SanitizedPresence as RemotePresence, ReplaceResult, ResizeHandle, ResolvedFontVariant, ShareDefaults, ShareFormFields, SignatureStatusKind, SlideTransitionAnimations, StyleMap, TextWarpCssDef, TextWarpDef, TextWarpPathDef, TimerProgress, VideoPlanOptions, VideoSegmentPlan, ViewerTheme, ViewerThemeColors };
|
|
8595
|
+
export { AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AccessibilityPanelComponent, AccessibilityService, AdvancedChartEditorComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, BroadcastDialogComponent, CURSOR_PALETTE, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, CollaborationCursorsComponent, CollaborationService, CommentsPanelComponent, CommentsService, ComparePanelComponent, ConnectorRendererComponent, ConnectorTextOverlayComponent, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_FILL_COLOR, DEFAULT_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, EMBEDDED_FONTS_STYLE_ID, TEMPLATES as EQUATION_TEMPLATES, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportService, FindBarComponent, FindReplaceBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GradientPickerComponent, HANDOUT_OPTIONS, HyperlinkDialogComponent, InkRendererComponent, InspectorPanelComponent, IsMobileService, KeepAnnotationsDialogComponent, LoadContentService, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesPanelComponent, OleRendererComponent, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationSubtitleBarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, RESIZE_HANDLES, SEVERITY_GROUPS, SEVERITY_LABELS, SLIDE_TRANSITION_KEYFRAMES, SVG_WARP_PRESETS, SetUpSlideShowDialogComponent, ShareDialogComponent, ShortcutPanelComponent, ShowOptionsFieldsetComponent, ShowSlidesFieldsetComponent, SignatureStrippedDialogComponent, SignaturesPanelComponent, SignaturesService, SlideCanvasComponent, SlideDiffChangesComponent, SlideDiffRowComponent, SlideDiffThumbnailsComponent, SlideSorterOverlayComponent, SlidesPanelComponent, SmartArtRendererComponent, StatusBarComponent, TYPE_LABELS, TableCellAdvancedFillComponent, TableCellFormattingComponent, TableDataEditorComponent, TablePropertiesComponent, TableRendererComponent, TableResizeOverlayComponent, TableSelectionService, TextAdvancedPanelComponent, VIEWER_THEME, VersionHistoryPanelComponent, ViewerCompareService, ViewerDialogsService, ViewerExtraDialogsComponent, WEBM_MIME_CANDIDATES, ZoomRendererComponent, addCommentToList, advanceStep, annotationMapToInkInserts, applyAcceptedDiff, applyFindReplacements, applyFormatToElement, applyMove, applyResize, assignUserColor, bringForward, bringToFront, buildBroadcastConfig, buildBroadcastViewerUrl, buildClearHyperlinkPatch, buildClickGroups, buildCollaborationConfig, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildEquationElement, buildEquationSegment, buildFontFaceRule, buildHyperlinkPatch, buildPatternFillCss, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildShareUrl, bulletIndentPx, canStartBroadcast, canStartShare, canUseClipboard, changeCountLabel, changeIcon, checkFontAvailable, clampCursorPosition, clampGifDimensions, clampNotesFontSize, clampStep, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, collectUsedFontFamilies, computeHandoutLayout, computeIsMobile, computeIsTablet, computePageCount, computeSlideIndices, computeTimerProgress, convertOmmlToMathMl, copyFormatFromElement, countAccessibilityIssues, countAnnotationStrokes, defaultCssVars, defaultRadius, defaultThemeColors, deleteElementsByIds, deleteVersion as deleteRecoveryVersion, derivePresenceList, duplicateElementById, durationOf, encodeGif, estimatePageCount, findInSlides, fontMimeForFormat, formatAutoNumber, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, getContainerStyle, getDuotoneFilterDef, getImageSrc, getPasswordStrength, getPatternSvg, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getTextBlockStyle, getTextWarp, getWarpCategory, getWarpPath, groupIssuesBySeverity, hasCopyableFormat, hasExistingLink, headerLabel, isAudienceTab, isInjectableUrl, isPpactionUrl, isPresenterMessage, isSigned, isUrlSafe, isValidRoomId, issueTrackKey, issueTypeLabel, latexToMathml, loadAudienceContent, moveElementBy, msToFrameDelayCs, normalizeFontFormat, normalizeSlidesPerPage, ommlToMathml, overallStatus, parseAudienceNonce, pendingElementStyles, pickSupportedMimeType, planGifFrames, planVideoSegments, presenceToCursors, provideViewerTheme, recordWebm, removeCommentFromList, renderToCanvas, replaceInSlides, replaceMatch, resizeElement, resolveFontVariant, resolveHyperlinkHref, resolveParagraphBullet, resolvePresenterNotes, resolveTransitionDuration, revealedElementStyles, routeOrthogonalConnector, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, scanAvailableFonts, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, sendBackward, sendToBack, setElementPosition, shouldUseSvgWarp, signatureCountLabel, signatureKey, signatureTimestamp, signerName, statusLabel as slideDiffStatusLabel, slideNumberOf, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, themeStyle, themeToCssVars, toggleCommentResolvedInList, updateElementById, validatePassword, validatePrintSettings, validateRoomId, waypointsToPathD, worstStatus };
|
|
8596
|
+
export type { AccessibilityIssueGroup, AnimationClickGroup, AnnotationInkInsert, AnnotationStroke, Box, BroadcastConfig, BroadcastDefaults, CSSProperties, CanvasSize, ClassValue, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, DocumentProperties, DuotoneFilterDef, EmbeddedFontStyles, EquationTemplate, FindOptions, FindResult, GifFrame, GifFramePlan, GifPlanOptions, HandoutSlidesPerPage, HyperlinkDraft, NotesSegmentViewModel, ObjectUrlFactory, OverallSignatureStatus, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, PrintColorMode, PrintHtmlDocumentOptions as PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, RecordWebmOptions, RecoveryVersion, RemoteCursor, SanitizedPresence as RemotePresence, ReplaceResult, ResizeHandle, ResolvedFontVariant, ShareDefaults, ShareFormFields, SignatureStatusKind, SlideTransitionAnimations, StyleMap, TableCellSelection, TextWarpCssDef, TextWarpDef, TextWarpPathDef, TimerProgress, VideoPlanOptions, VideoSegmentPlan, ViewerTheme, ViewerThemeColors };
|