pptx-angular-viewer 1.1.17 → 1.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal, OnInit, OnDestroy, InjectionToken, Provider } from '@angular/core';
3
3
  import * as pptx_viewer_core from 'pptx-viewer-core';
4
- import { PptxSlide, AccessibilityCheckOptions, AccessibilityIssue, PptxElement, PptxTheme, PptxSlideMaster, PptxEmbeddedFont, PptxCoreProperties, ParsedSignature, PptxComment, TextSegment, TextStyle, PptxTableCell, Model3DPptxElement, ZoomPptxElement, PptxSlideTransition, TablePptxElement, ChartPptxElement, XmlObject, SignatureStatus, AccessibilityIssueSeverity, AccessibilityIssueType, PptxElementAnimation, PptxTransitionType, ShapeStyle } from 'pptx-viewer-core';
4
+ import { PptxSlide, AccessibilityCheckOptions, AccessibilityIssue, PptxElement, PptxTheme, PptxSlideMaster, PptxEmbeddedFont, PptxCoreProperties, ParsedSignature, PptxComment, TextSegment, TextStyle, PptxTableCell, Model3DPptxElement, ZoomPptxElement, PptxElementAnimation, PptxSlideTransition, TablePptxElement, ChartPptxElement, PptxAnimationPreset, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, PptxAnimationSequence, XmlObject, SignatureStatus, AccessibilityIssueSeverity, AccessibilityIssueType, PptxTransitionType, ShapeStyle } 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';
@@ -657,6 +657,62 @@ declare function replaceMatch(slides: readonly PptxSlide[], allResults: readonly
657
657
  */
658
658
  declare function replaceInSlides(slides: readonly PptxSlide[], query: string, replacement: string, opts?: FindOptions): ReplaceResult;
659
659
 
660
+ /**
661
+ * Decide whether the current environment is "mobile" based on two signals:
662
+ * - `width` is the viewport / container width in pixels
663
+ * - `coarsePointer` is true when `(pointer: coarse)` matches
664
+ *
665
+ * Either condition alone is sufficient (narrow viewport OR touch device).
666
+ *
667
+ * @pure — no side effects, fully testable without a DOM.
668
+ */
669
+ declare function computeIsMobile(width: number, coarsePointer: boolean): boolean;
670
+ /**
671
+ * Decide whether the current environment is "tablet" based on width only.
672
+ * A coarse-pointer device at tablet width is still treated as mobile
673
+ * (handled by `computeIsMobile`).
674
+ *
675
+ * @pure
676
+ */
677
+ declare function computeIsTablet(width: number, coarsePointer: boolean): boolean;
678
+ /**
679
+ * `IsMobileService` — provides reactive signals for the current viewport /
680
+ * pointer kind so components can switch between mobile and desktop chrome
681
+ * without subscribing to resize events themselves.
682
+ *
683
+ * Inject at the component level (or provide at root) — the service cleans up
684
+ * its `MediaQueryList` listeners automatically via `DestroyRef`.
685
+ *
686
+ * ```ts
687
+ * providers: [IsMobileService]
688
+ * // or globally:
689
+ * // provideIsMobile() (see factory below)
690
+ * ```
691
+ *
692
+ * ```ts
693
+ * protected readonly mobile = inject(IsMobileService);
694
+ * // in template: @if (mobile.isMobile()) { … }
695
+ * ```
696
+ */
697
+ declare class IsMobileService {
698
+ /** True when the primary pointer is coarse (touch / stylus). */
699
+ readonly isCoarsePointer: _angular_core.WritableSignal<boolean>;
700
+ /** True when the viewport width is below {@link MOBILE_BREAKPOINT}. */
701
+ readonly isNarrowViewport: _angular_core.WritableSignal<boolean>;
702
+ /**
703
+ * True when either the pointer is coarse OR the viewport is narrow.
704
+ * Use this as the single gate for showing mobile chrome.
705
+ */
706
+ readonly isMobile: _angular_core.WritableSignal<boolean>;
707
+ /** True when the viewport is in the tablet range (desktop pointer only). */
708
+ readonly isTablet: _angular_core.WritableSignal<boolean>;
709
+ constructor();
710
+ /** Recompute derived `isMobile` signal from the two raw conditions. */
711
+ private _update;
712
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<IsMobileService, never>;
713
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<IsMobileService>;
714
+ }
715
+
660
716
  /**
661
717
  * `LoadContentService` — Angular port of the React `useLoadContent` hook and
662
718
  * the Vue `useLoadContent` composable.
@@ -922,6 +978,7 @@ declare class PowerPointViewerComponent {
922
978
  protected readonly collab: CollaborationService;
923
979
  protected readonly accessibility: AccessibilityService;
924
980
  protected readonly print: PrintService;
981
+ protected readonly mobile: IsMobileService;
925
982
  /** The `<main>` host; used to locate the live `.pptx-ng-canvas-stage`. */
926
983
  private readonly mainEl;
927
984
  /** True while a PNG/PDF export is in progress (disables the buttons). */
@@ -944,6 +1001,8 @@ declare class PowerPointViewerComponent {
944
1001
  protected readonly presenterStartTime: _angular_core.WritableSignal<number | null>;
945
1002
  /** Slide-sorter grid overlay visibility. */
946
1003
  protected readonly showSorter: _angular_core.WritableSignal<boolean>;
1004
+ /** Open mobile bottom-sheet (slides / menu), or null. */
1005
+ protected readonly mobileSheet: _angular_core.WritableSignal<"slides" | "menu" | null>;
947
1006
  /** Speaker-notes strip visibility. */
948
1007
  protected readonly showNotes: _angular_core.WritableSignal<boolean>;
949
1008
  /** Find-in-slides bar visibility. */
@@ -2448,6 +2507,137 @@ declare class ZoomRendererComponent {
2448
2507
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZoomRendererComponent, "pptx-zoom-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2449
2508
  }
2450
2509
 
2510
+ /**
2511
+ * animation-playback-helpers.ts
2512
+ *
2513
+ * Pure functions backing {@link AnimationPlaybackService} and
2514
+ * {@link AnimationPanelComponent}. Exported separately so they can be
2515
+ * unit-tested without TestBed (vitest + happy-dom).
2516
+ *
2517
+ * A slide carries an ordered list of {@link PptxElementAnimation}s. PowerPoint
2518
+ * groups them into "click groups": an animation triggered `onClick` /
2519
+ * `onShapeClick` / `onHover` starts a new group, while `withPrevious` /
2520
+ * `afterPrevious` / `afterDelay` animations fold into the group that precedes
2521
+ * them (running together or sequentially within that group). Advancing the
2522
+ * presentation one step reveals one more click group.
2523
+ *
2524
+ * Everything here is framework-light: only the preset → CSS mapping is
2525
+ * delegated to {@link resolveAnimationCss} / {@link initialHiddenStyle} from
2526
+ * the shared render layer.
2527
+ */
2528
+
2529
+ /** Minimal CSS-properties shape: kebab-case property → value. */
2530
+ type CSSProperties = Record<string, string>;
2531
+ /** A single click-triggered group of animations that play as one step. */
2532
+ interface AnimationClickGroup {
2533
+ /** Animations belonging to this group, in document order. */
2534
+ animations: PptxElementAnimation[];
2535
+ }
2536
+ /**
2537
+ * Splits an ordered animation list into click groups. The first animation
2538
+ * always begins a group even if it isn't explicitly `onClick` (PowerPoint shows
2539
+ * the first build on the first advance). Subsequent `withPrevious` /
2540
+ * `afterPrevious` animations attach to the group in progress.
2541
+ */
2542
+ declare function buildClickGroups(animations: readonly PptxElementAnimation[]): AnimationClickGroup[];
2543
+ /** Clamp a step into `[0, count]`. */
2544
+ declare function clampStep(value: number, count: number): number;
2545
+ /**
2546
+ * Reveal the next click group. Returns the next step, clamped to `count`.
2547
+ * Equivalent to `clampStep(step + 1, count)`.
2548
+ */
2549
+ declare function advanceStep(step: number, count: number): number;
2550
+ /** Parse the numeric ms duration out of a resolved style's `animation-duration`. */
2551
+ declare function durationOf(style: CSSProperties): number;
2552
+ /**
2553
+ * Resolve the CSS for every animation in the revealed groups (the first `step`
2554
+ * groups). Within a group, `afterPrevious` animations are pushed back by the
2555
+ * accumulated duration of the preceding animations so sequential chains play in
2556
+ * order; `withPrevious` shares the running delay. The last write for an element
2557
+ * id wins (a later emphasis/exit overrides an earlier entrance), matching how a
2558
+ * single CSS `animation` shorthand can only hold one running effect.
2559
+ */
2560
+ declare function revealedElementStyles(groups: readonly AnimationClickGroup[], step: number): Map<string, CSSProperties>;
2561
+ /**
2562
+ * Elements with a pending entrance (in a not-yet-revealed group, i.e. groups at
2563
+ * or beyond `step`) that should be hidden until their group plays. An element
2564
+ * an already-revealed group made visible is never re-hidden.
2565
+ */
2566
+ declare function pendingElementStyles(groups: readonly AnimationClickGroup[], step: number): Map<string, CSSProperties>;
2567
+
2568
+ declare class AnimationPlaybackService {
2569
+ private readonly destroyRef;
2570
+ /** The current slide's animations, in document/timeline order. */
2571
+ private readonly animations;
2572
+ /**
2573
+ * Externally-controlled playback step (e.g. derived from a parent click
2574
+ * counter). `undefined` means there is no external driver. The internal
2575
+ * manual step (set via advance/play/reset) takes precedence when present.
2576
+ */
2577
+ private readonly externalIndex;
2578
+ /**
2579
+ * Internal, unclamped step. `null` means "follow the external index"; any
2580
+ * number means the host has taken manual control via advance/play/reset.
2581
+ */
2582
+ private readonly manualStep;
2583
+ /** Click groups for the current slide's animations. */
2584
+ readonly groups: _angular_core.Signal<AnimationClickGroup[]>;
2585
+ /** Number of click groups on this slide (i.e. how many `advance()` steps). */
2586
+ readonly groupCount: _angular_core.Signal<number>;
2587
+ /**
2588
+ * The current playback step: how many click groups have been revealed.
2589
+ * Always clamped to the current group count. The manual override wins;
2590
+ * otherwise it follows the external index, defaulting to 0.
2591
+ */
2592
+ readonly step: _angular_core.Signal<number>;
2593
+ /** True when every click group has been revealed. */
2594
+ readonly isComplete: _angular_core.Signal<boolean>;
2595
+ /**
2596
+ * Reactive map of `elementId → CSS properties` to apply for the current step.
2597
+ * Only elements in revealed click groups appear.
2598
+ */
2599
+ readonly elementStyles: _angular_core.Signal<Map<string, CSSProperties>>;
2600
+ /**
2601
+ * Reactive map of `elementId → CSS properties` for elements whose entrance
2602
+ * has not yet been revealed (they should be hidden so they don't flash
2603
+ * visible before their group plays).
2604
+ */
2605
+ readonly pendingStyles: _angular_core.Signal<Map<string, CSSProperties>>;
2606
+ /** Handle of the scheduled rAF auto-advance, or null when idle. */
2607
+ private rafHandle;
2608
+ constructor();
2609
+ /** Feed the current slide's animation list. Resets manual control. */
2610
+ setAnimations(animations: readonly PptxElementAnimation[] | undefined): void;
2611
+ /** Update the external playback index (parent-driven build counter). */
2612
+ setExternalIndex(index: number | undefined): void;
2613
+ /**
2614
+ * Reveal the next click group. Returns `true` if a group was revealed,
2615
+ * `false` if playback was already complete (so the caller can fall through
2616
+ * to slide navigation).
2617
+ */
2618
+ advance(): boolean;
2619
+ /** Reveal every click group at once (jump to the slide's final state). */
2620
+ play(): void;
2621
+ /** Reset playback to before the first click group. */
2622
+ reset(): void;
2623
+ /**
2624
+ * Jump directly to a given step (clamped to the group count) and take manual
2625
+ * control. Useful for scrubbing.
2626
+ */
2627
+ setStep(step: number): void;
2628
+ /**
2629
+ * Auto-advance through every remaining click group on the animation frame,
2630
+ * one group per frame. Stops automatically once playback completes or the
2631
+ * service is destroyed. A no-op when already complete or when
2632
+ * `requestAnimationFrame` is unavailable (SSR).
2633
+ */
2634
+ autoPlay(): void;
2635
+ /** Cancel any in-flight rAF auto-advance. */
2636
+ cancelAutoPlay(): void;
2637
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AnimationPlaybackService, never>;
2638
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AnimationPlaybackService>;
2639
+ }
2640
+
2451
2641
  /**
2452
2642
  * PresentationOverlayComponent — full-viewport black overlay that renders
2453
2643
  * slides in presentation (kiosk) mode.
@@ -2495,6 +2685,17 @@ declare class PresentationOverlayComponent implements OnInit, OnDestroy {
2495
2685
  outgoing: PptxSlide;
2496
2686
  transition: PptxSlideTransition;
2497
2687
  } | null>;
2688
+ /** Click-stepped element-animation playback for the current slide. */
2689
+ protected readonly playback: AnimationPlaybackService;
2690
+ /** The slide stage root — animation styles are applied to its elements. */
2691
+ private readonly stageRef;
2692
+ constructor();
2693
+ /**
2694
+ * Imperatively apply animation reveal / pending CSS to the slide's element
2695
+ * nodes (mirrors the Vue `applyAnimationStyles`). Every renderer emits a
2696
+ * `data-element-id`, so this needs no per-element renderer plumbing.
2697
+ */
2698
+ private applyAnimationStyles;
2498
2699
  /** Viewport dimensions — updated on resize. */
2499
2700
  private readonly viewportW;
2500
2701
  private readonly viewportH;
@@ -2741,6 +2942,10 @@ declare class InspectorPanelComponent {
2741
2942
  protected onPatch(patch: Partial<PptxElement>): void;
2742
2943
  /** Commit a fully-replaced element (table/chart data editors) as one history entry. */
2743
2944
  protected onElementReplace(updated: PptxElement): void;
2945
+ /** The active slide's element-animation list (animations live on the slide). */
2946
+ protected readonly slideAnimations: _angular_core.Signal<readonly PptxElementAnimation[]>;
2947
+ /** Commit an updated slide-level animation list as one history entry. */
2948
+ protected onAnimationsChange(animations: PptxElementAnimation[]): void;
2744
2949
  protected onPositionChange(event: Event, axis: 'x' | 'y'): void;
2745
2950
  protected onSizeChange(event: Event, dim: 'width' | 'height'): void;
2746
2951
  protected onRotationChange(event: Event): void;
@@ -3031,6 +3236,271 @@ declare class ChartDataEditorComponent {
3031
3236
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartDataEditorComponent, "pptx-chart-data-editor", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, { "elementChange": "elementChange"; }, never, never, true, never>;
3032
3237
  }
3033
3238
 
3239
+ declare class AnimationAuthorPanelComponent {
3240
+ /** The selected element whose animation settings are being authored. */
3241
+ readonly element: _angular_core.InputSignal<PptxElement>;
3242
+ /** Zero-based index of the active slide (used by the orchestrator to commit). */
3243
+ readonly slideIndex: _angular_core.InputSignal<number>;
3244
+ /**
3245
+ * The active slide's full `PptxElementAnimation[]` array. Animations are
3246
+ * stored on the slide, NOT on the element — this component reads and
3247
+ * emits the entire array.
3248
+ */
3249
+ readonly animations: _angular_core.InputSignal<readonly PptxElementAnimation[]>;
3250
+ /**
3251
+ * Whether editing controls are enabled. When `false` all selects/inputs are
3252
+ * disabled. Defaults to `true`.
3253
+ */
3254
+ readonly canEdit: _angular_core.InputSignal<boolean>;
3255
+ /**
3256
+ * Emits the full updated `PptxElementAnimation[]` whenever a change is made.
3257
+ * The orchestrator should apply this via:
3258
+ * `EditorStateService.updateSlide(slideIndex(), { animations: $event })`
3259
+ */
3260
+ readonly animationsChange: _angular_core.OutputEmitterRef<PptxElementAnimation[]>;
3261
+ protected readonly entrancePresets: readonly {
3262
+ value: PptxAnimationPreset;
3263
+ label: string;
3264
+ }[];
3265
+ protected readonly exitPresets: readonly {
3266
+ value: PptxAnimationPreset;
3267
+ label: string;
3268
+ }[];
3269
+ protected readonly emphasisPresets: readonly {
3270
+ value: PptxAnimationPreset;
3271
+ label: string;
3272
+ }[];
3273
+ protected readonly triggerOptions: readonly {
3274
+ value: PptxAnimationTrigger;
3275
+ label: string;
3276
+ }[];
3277
+ protected readonly timingCurveOptions: readonly {
3278
+ value: PptxAnimationTimingCurve;
3279
+ label: string;
3280
+ }[];
3281
+ protected readonly repeatModeOptions: readonly {
3282
+ value: "none" | PptxAnimationRepeatMode;
3283
+ label: string;
3284
+ }[];
3285
+ protected readonly directionOptions: readonly {
3286
+ value: PptxAnimationDirection;
3287
+ label: string;
3288
+ arrow: string;
3289
+ }[];
3290
+ protected readonly sequenceOptions: readonly {
3291
+ value: PptxAnimationSequence;
3292
+ label: string;
3293
+ }[];
3294
+ /**
3295
+ * Changes only when a *different* element is selected. Used as the
3296
+ * `data-el-key` attribute to key number inputs so Angular's [value]
3297
+ * binding is never rewritten mid-edit.
3298
+ */
3299
+ protected readonly elementKey: _angular_core.Signal<string>;
3300
+ /** The animation entry for the currently selected element, if any. */
3301
+ protected readonly current: _angular_core.Signal<PptxElementAnimation | undefined>;
3302
+ /** True when the element has at least one effect (entrance/exit/emphasis). */
3303
+ protected readonly currentHasAnimation: _angular_core.Signal<boolean>;
3304
+ /** True when the active preset exposes a direction picker. */
3305
+ protected readonly currentShowDirection: _angular_core.Signal<boolean>;
3306
+ /**
3307
+ * Stable seed for number inputs — recomputed only on element change so
3308
+ * live typing does not reset the input value while the user is mid-edit.
3309
+ */
3310
+ protected readonly seed: _angular_core.Signal<{
3311
+ durationMs: number;
3312
+ delayMs: number;
3313
+ repeatCount: number;
3314
+ }>;
3315
+ /** Human-readable order label (1-based, e.g. "2 of 4"). */
3316
+ protected readonly orderLabel: _angular_core.Signal<string>;
3317
+ /**
3318
+ * Elements on the slide excluding the selected element — used to populate
3319
+ * the trigger-shape selector. The slide's elements are not available in this
3320
+ * component's inputs, so the orchestrator must pass them in via
3321
+ * `[animations]` indirectly; here we surface only what we have access to.
3322
+ *
3323
+ * NOTE: The trigger-shape dropdown is limited to element ids because this
3324
+ * panel does not receive the full slide element list. The orchestrator can
3325
+ * replace this with a richer element label by wrapping the component or
3326
+ * projecting content. This matches the React implementation which used
3327
+ * `activeSlide.elements`.
3328
+ */
3329
+ protected readonly otherElements: _angular_core.Signal<{
3330
+ id: string;
3331
+ }[]>;
3332
+ private emit;
3333
+ protected onEntranceChange(event: Event): void;
3334
+ protected onExitChange(event: Event): void;
3335
+ protected onEmphasisChange(event: Event): void;
3336
+ protected onTriggerChange(event: Event): void;
3337
+ protected onTriggerShapeChange(event: Event): void;
3338
+ protected onDurationChange(event: Event): void;
3339
+ protected onDelayChange(event: Event): void;
3340
+ protected onTimingCurveChange(event: Event): void;
3341
+ protected onRepeatCountChange(event: Event): void;
3342
+ protected onRepeatModeChange(event: Event): void;
3343
+ protected onDirectionChange(dir: PptxAnimationDirection): void;
3344
+ protected onSequenceChange(event: Event): void;
3345
+ protected onMoveUp(): void;
3346
+ protected onMoveDown(): void;
3347
+ protected onRemove(): void;
3348
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AnimationAuthorPanelComponent, never>;
3349
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AnimationAuthorPanelComponent, "pptx-animation-author-panel", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "slideIndex": { "alias": "slideIndex"; "required": true; "isSignal": true; }; "animations": { "alias": "animations"; "required": true; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, { "animationsChange": "animationsChange"; }, never, never, true, never>;
3350
+ }
3351
+
3352
+ /** Internal action descriptor used to build the bar. */
3353
+ interface BarAction {
3354
+ key: string;
3355
+ label: string;
3356
+ /** SVG path data for the icon (24 × 24 view-box). */
3357
+ svgPath: string;
3358
+ disabled: boolean;
3359
+ active?: boolean;
3360
+ badge?: number;
3361
+ emit: () => void;
3362
+ }
3363
+ declare class MobileBottomBarComponent {
3364
+ /** Zero-based index of the currently displayed slide. */
3365
+ readonly activeIndex: _angular_core.InputSignal<number>;
3366
+ /** Total number of slides in the presentation. */
3367
+ readonly slideCount: _angular_core.InputSignal<number>;
3368
+ /** Whether the "Present" action should be available. */
3369
+ readonly canPresent: _angular_core.InputSignal<boolean>;
3370
+ /** Whether the mobile-menu sheet is currently open (highlights the button). */
3371
+ readonly menuOpen: _angular_core.InputSignal<boolean>;
3372
+ /** Whether the slides thumbnail sheet is currently open. */
3373
+ readonly slidesOpen: _angular_core.InputSignal<boolean>;
3374
+ /** User tapped the previous-slide button. */
3375
+ readonly prev: _angular_core.OutputEmitterRef<void>;
3376
+ /** User tapped the next-slide button. */
3377
+ readonly next: _angular_core.OutputEmitterRef<void>;
3378
+ /** User tapped the Present button. */
3379
+ readonly present: _angular_core.OutputEmitterRef<void>;
3380
+ /** User tapped the Slide Sorter button. */
3381
+ readonly openSorter: _angular_core.OutputEmitterRef<void>;
3382
+ /** User tapped the Find button. */
3383
+ readonly openFind: _angular_core.OutputEmitterRef<void>;
3384
+ /** User tapped the Slides thumbnail strip button. */
3385
+ readonly openSlides: _angular_core.OutputEmitterRef<void>;
3386
+ /** User tapped the menu (⋯) button. */
3387
+ readonly toggleMenu: _angular_core.OutputEmitterRef<void>;
3388
+ readonly actions: _angular_core.Signal<BarAction[]>;
3389
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileBottomBarComponent, never>;
3390
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileBottomBarComponent, "pptx-mobile-bottom-bar", never, { "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "canPresent": { "alias": "canPresent"; "required": false; "isSignal": true; }; "menuOpen": { "alias": "menuOpen"; "required": false; "isSignal": true; }; "slidesOpen": { "alias": "slidesOpen"; "required": false; "isSignal": true; }; }, { "prev": "prev"; "next": "next"; "present": "present"; "openSorter": "openSorter"; "openFind": "openFind"; "openSlides": "openSlides"; "toggleMenu": "toggleMenu"; }, never, never, true, never>;
3391
+ }
3392
+
3393
+ /** Descriptor for a single menu row. */
3394
+ interface MenuRow {
3395
+ key: string;
3396
+ label: string;
3397
+ sublabel?: string;
3398
+ /** SVG path data (24 × 24 view-box). */
3399
+ svgPath: string;
3400
+ disabled?: boolean;
3401
+ active?: boolean;
3402
+ danger?: boolean;
3403
+ emit: () => void;
3404
+ }
3405
+ declare class MobileMenuSheetComponent {
3406
+ /** Whether the sheet is visible. */
3407
+ readonly open: _angular_core.InputSignal<boolean>;
3408
+ /** Total slide count — gates export/present actions. */
3409
+ readonly slideCount: _angular_core.InputSignal<number>;
3410
+ /** True while an export is running (labels update, actions are disabled). */
3411
+ readonly exporting: _angular_core.InputSignal<boolean>;
3412
+ /** Whether the speaker-notes panel is currently open. */
3413
+ readonly showNotes: _angular_core.InputSignal<boolean>;
3414
+ /** Whether editor-only actions (find-replace etc.) are available. */
3415
+ readonly canEdit: _angular_core.InputSignal<boolean>;
3416
+ /** Sheet dismissed (backdrop tap, swipe, or Escape). */
3417
+ readonly closed: _angular_core.OutputEmitterRef<void>;
3418
+ /** Open the find-in-slides bar. */
3419
+ readonly openFind: _angular_core.OutputEmitterRef<void>;
3420
+ /** Open the slide-sorter overlay. */
3421
+ readonly openSorter: _angular_core.OutputEmitterRef<void>;
3422
+ /** Toggle the speaker-notes panel. */
3423
+ readonly toggleNotes: _angular_core.OutputEmitterRef<void>;
3424
+ /** Start the fullscreen presentation mode. */
3425
+ readonly present: _angular_core.OutputEmitterRef<void>;
3426
+ /** Export the current slide as PNG. */
3427
+ readonly exportPng: _angular_core.OutputEmitterRef<void>;
3428
+ /** Export the deck as PDF. */
3429
+ readonly exportPdf: _angular_core.OutputEmitterRef<void>;
3430
+ /** Export the deck as an animated GIF. */
3431
+ readonly exportGif: _angular_core.OutputEmitterRef<void>;
3432
+ /** Export the deck as a video. */
3433
+ readonly exportVideo: _angular_core.OutputEmitterRef<void>;
3434
+ /** Open the print dialog. */
3435
+ readonly print: _angular_core.OutputEmitterRef<void>;
3436
+ readonly rows: _angular_core.Signal<MenuRow[]>;
3437
+ /**
3438
+ * Emit the row's action and close the sheet so the user returns to the
3439
+ * presentation immediately.
3440
+ */
3441
+ onRowClick(row: MenuRow): void;
3442
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileMenuSheetComponent, never>;
3443
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileMenuSheetComponent, "pptx-mobile-menu-sheet", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "exporting": { "alias": "exporting"; "required": false; "isSignal": true; }; "showNotes": { "alias": "showNotes"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "openFind": "openFind"; "openSorter": "openSorter"; "toggleNotes": "toggleNotes"; "present": "present"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "print": "print"; }, never, never, true, never>;
3444
+ }
3445
+
3446
+ declare class MobileSlidesSheetComponent {
3447
+ /** Whether the sheet is visible. */
3448
+ readonly open: _angular_core.InputSignal<boolean>;
3449
+ /** The full slide array to display as thumbnails. */
3450
+ readonly slides: _angular_core.InputSignal<readonly PptxSlide[]>;
3451
+ /** Natural (100 %) canvas dimensions forwarded to each SlideCanvasComponent. */
3452
+ readonly canvasSize: _angular_core.InputSignal<CanvasSize>;
3453
+ /** Media asset lookup table forwarded to each SlideCanvasComponent. */
3454
+ readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
3455
+ /** Zero-based index of the currently active slide (highlighted). */
3456
+ readonly activeIndex: _angular_core.InputSignal<number>;
3457
+ /** Emits when the user dismisses the sheet without selecting a slide. */
3458
+ readonly closed: _angular_core.OutputEmitterRef<void>;
3459
+ /**
3460
+ * Emits the zero-based index of the slide the user tapped. The orchestrator
3461
+ * should call `goTo(index)` and then close this sheet.
3462
+ */
3463
+ readonly jumpToSlide: _angular_core.OutputEmitterRef<number>;
3464
+ /** Zoom level that fits THUMB_W pixels wide. */
3465
+ readonly thumbZoom: _angular_core.Signal<number>;
3466
+ /** Pixel height for the clip box (aspect-correct). */
3467
+ readonly thumbH: _angular_core.Signal<number>;
3468
+ /** ngStyle for the clipping wrapper. */
3469
+ readonly clipStyle: _angular_core.Signal<Record<string, string>>;
3470
+ onThumbClick(index: number): void;
3471
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileSlidesSheetComponent, never>;
3472
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileSlidesSheetComponent, "pptx-mobile-slides-sheet", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "slides": { "alias": "slides"; "required": false; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "jumpToSlide": "jumpToSlide"; }, never, never, true, never>;
3473
+ }
3474
+
3475
+ declare class MobileSheetComponent {
3476
+ /** Controls whether the sheet is visible. */
3477
+ readonly open: _angular_core.InputSignal<boolean>;
3478
+ /** Optional header text displayed above the body. */
3479
+ readonly title: _angular_core.InputSignal<string>;
3480
+ /**
3481
+ * Height of the sheet as a fraction of the viewport height (0–1).
3482
+ * Ignored when `fullScreen` is true.
3483
+ */
3484
+ readonly heightFraction: _angular_core.InputSignal<number>;
3485
+ /** When true, the sheet occupies the full viewport height. */
3486
+ readonly fullScreen: _angular_core.InputSignal<boolean>;
3487
+ /** Emits when the user closes the sheet (backdrop tap, swipe, or Escape). */
3488
+ readonly closed: _angular_core.OutputEmitterRef<void>;
3489
+ private _dragStartY;
3490
+ private _dragPointerId;
3491
+ /** Current translateY applied during an active drag (px). */
3492
+ readonly dragY: _angular_core.WritableSignal<number>;
3493
+ /** Whether a drag is in progress (suppresses CSS transition during drag). */
3494
+ readonly isDragging: _angular_core.WritableSignal<boolean>;
3495
+ readonly panelStyle: _angular_core.Signal<Record<string, string>>;
3496
+ onDocumentKeydown(event: KeyboardEvent): void;
3497
+ onPointerDown(event: PointerEvent): void;
3498
+ onPointerMove(event: PointerEvent): void;
3499
+ onPointerUp(event: PointerEvent): void;
3500
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MobileSheetComponent, never>;
3501
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MobileSheetComponent, "pptx-mobile-sheet", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "heightFraction": { "alias": "heightFraction"; "required": false; "isSignal": true; }; "fullScreen": { "alias": "fullScreen"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, ["*"], true, never>;
3502
+ }
3503
+
3034
3504
  /**
3035
3505
  * SlidesPanelComponent — vertical slide-strip for the editor sidebar.
3036
3506
  *
@@ -4228,64 +4698,6 @@ interface EmbeddedFontStyles {
4228
4698
  */
4229
4699
  declare function buildEmbeddedFontStyles(fonts: readonly PptxEmbeddedFont[] | null | undefined, mintObjectUrl: ObjectUrlFactory): EmbeddedFontStyles;
4230
4700
 
4231
- /**
4232
- * animation-playback-helpers.ts
4233
- *
4234
- * Pure functions backing {@link AnimationPlaybackService} and
4235
- * {@link AnimationPanelComponent}. Exported separately so they can be
4236
- * unit-tested without TestBed (vitest + happy-dom).
4237
- *
4238
- * A slide carries an ordered list of {@link PptxElementAnimation}s. PowerPoint
4239
- * groups them into "click groups": an animation triggered `onClick` /
4240
- * `onShapeClick` / `onHover` starts a new group, while `withPrevious` /
4241
- * `afterPrevious` / `afterDelay` animations fold into the group that precedes
4242
- * them (running together or sequentially within that group). Advancing the
4243
- * presentation one step reveals one more click group.
4244
- *
4245
- * Everything here is framework-light: only the preset → CSS mapping is
4246
- * delegated to {@link resolveAnimationCss} / {@link initialHiddenStyle} from
4247
- * the shared render layer.
4248
- */
4249
-
4250
- /** Minimal CSS-properties shape: kebab-case property → value. */
4251
- type CSSProperties = Record<string, string>;
4252
- /** A single click-triggered group of animations that play as one step. */
4253
- interface AnimationClickGroup {
4254
- /** Animations belonging to this group, in document order. */
4255
- animations: PptxElementAnimation[];
4256
- }
4257
- /**
4258
- * Splits an ordered animation list into click groups. The first animation
4259
- * always begins a group even if it isn't explicitly `onClick` (PowerPoint shows
4260
- * the first build on the first advance). Subsequent `withPrevious` /
4261
- * `afterPrevious` animations attach to the group in progress.
4262
- */
4263
- declare function buildClickGroups(animations: readonly PptxElementAnimation[]): AnimationClickGroup[];
4264
- /** Clamp a step into `[0, count]`. */
4265
- declare function clampStep(value: number, count: number): number;
4266
- /**
4267
- * Reveal the next click group. Returns the next step, clamped to `count`.
4268
- * Equivalent to `clampStep(step + 1, count)`.
4269
- */
4270
- declare function advanceStep(step: number, count: number): number;
4271
- /** Parse the numeric ms duration out of a resolved style's `animation-duration`. */
4272
- declare function durationOf(style: CSSProperties): number;
4273
- /**
4274
- * Resolve the CSS for every animation in the revealed groups (the first `step`
4275
- * groups). Within a group, `afterPrevious` animations are pushed back by the
4276
- * accumulated duration of the preceding animations so sequential chains play in
4277
- * order; `withPrevious` shares the running delay. The last write for an element
4278
- * id wins (a later emphasis/exit overrides an earlier entrance), matching how a
4279
- * single CSS `animation` shorthand can only hold one running effect.
4280
- */
4281
- declare function revealedElementStyles(groups: readonly AnimationClickGroup[], step: number): Map<string, CSSProperties>;
4282
- /**
4283
- * Elements with a pending entrance (in a not-yet-revealed group, i.e. groups at
4284
- * or beyond `step`) that should be hidden until their group plays. An element
4285
- * an already-revealed group made visible is never re-hidden.
4286
- */
4287
- declare function pendingElementStyles(groups: readonly AnimationClickGroup[], step: number): Map<string, CSSProperties>;
4288
-
4289
4701
  /** A single rendered playback step (one click group). */
4290
4702
  interface AnimationStepView {
4291
4703
  /** 1-based step number for display. */
@@ -4314,79 +4726,6 @@ declare class AnimationPanelComponent {
4314
4726
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AnimationPanelComponent, "pptx-animation-panel", never, { "groups": { "alias": "groups"; "required": true; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "isPlaying": { "alias": "isPlaying"; "required": false; "isSignal": true; }; }, { "playRequested": "playRequested"; "pauseRequested": "pauseRequested"; "stepRequested": "stepRequested"; "resetRequested": "resetRequested"; "seek": "seek"; }, never, never, true, never>;
4315
4727
  }
4316
4728
 
4317
- declare class AnimationPlaybackService {
4318
- private readonly destroyRef;
4319
- /** The current slide's animations, in document/timeline order. */
4320
- private readonly animations;
4321
- /**
4322
- * Externally-controlled playback step (e.g. derived from a parent click
4323
- * counter). `undefined` means there is no external driver. The internal
4324
- * manual step (set via advance/play/reset) takes precedence when present.
4325
- */
4326
- private readonly externalIndex;
4327
- /**
4328
- * Internal, unclamped step. `null` means "follow the external index"; any
4329
- * number means the host has taken manual control via advance/play/reset.
4330
- */
4331
- private readonly manualStep;
4332
- /** Click groups for the current slide's animations. */
4333
- readonly groups: _angular_core.Signal<AnimationClickGroup[]>;
4334
- /** Number of click groups on this slide (i.e. how many `advance()` steps). */
4335
- readonly groupCount: _angular_core.Signal<number>;
4336
- /**
4337
- * The current playback step: how many click groups have been revealed.
4338
- * Always clamped to the current group count. The manual override wins;
4339
- * otherwise it follows the external index, defaulting to 0.
4340
- */
4341
- readonly step: _angular_core.Signal<number>;
4342
- /** True when every click group has been revealed. */
4343
- readonly isComplete: _angular_core.Signal<boolean>;
4344
- /**
4345
- * Reactive map of `elementId → CSS properties` to apply for the current step.
4346
- * Only elements in revealed click groups appear.
4347
- */
4348
- readonly elementStyles: _angular_core.Signal<Map<string, CSSProperties>>;
4349
- /**
4350
- * Reactive map of `elementId → CSS properties` for elements whose entrance
4351
- * has not yet been revealed (they should be hidden so they don't flash
4352
- * visible before their group plays).
4353
- */
4354
- readonly pendingStyles: _angular_core.Signal<Map<string, CSSProperties>>;
4355
- /** Handle of the scheduled rAF auto-advance, or null when idle. */
4356
- private rafHandle;
4357
- constructor();
4358
- /** Feed the current slide's animation list. Resets manual control. */
4359
- setAnimations(animations: readonly PptxElementAnimation[] | undefined): void;
4360
- /** Update the external playback index (parent-driven build counter). */
4361
- setExternalIndex(index: number | undefined): void;
4362
- /**
4363
- * Reveal the next click group. Returns `true` if a group was revealed,
4364
- * `false` if playback was already complete (so the caller can fall through
4365
- * to slide navigation).
4366
- */
4367
- advance(): boolean;
4368
- /** Reveal every click group at once (jump to the slide's final state). */
4369
- play(): void;
4370
- /** Reset playback to before the first click group. */
4371
- reset(): void;
4372
- /**
4373
- * Jump directly to a given step (clamped to the group count) and take manual
4374
- * control. Useful for scrubbing.
4375
- */
4376
- setStep(step: number): void;
4377
- /**
4378
- * Auto-advance through every remaining click group on the animation frame,
4379
- * one group per frame. Stops automatically once playback completes or the
4380
- * service is destroyed. A no-op when already complete or when
4381
- * `requestAnimationFrame` is unavailable (SSR).
4382
- */
4383
- autoPlay(): void;
4384
- /** Cancel any in-flight rAF auto-advance. */
4385
- cancelAutoPlay(): void;
4386
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AnimationPlaybackService, never>;
4387
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AnimationPlaybackService>;
4388
- }
4389
-
4390
4729
  /** A positioned cursor view-model used by the template. */
4391
4730
  interface PositionedCursor {
4392
4731
  clientId: number | string;
@@ -5178,5 +5517,5 @@ declare function themeStyle(theme: ViewerTheme | undefined): Record<string, stri
5178
5517
  type ClassValue = string | number | false | null | undefined;
5179
5518
  declare function cn(...values: ClassValue[]): string;
5180
5519
 
5181
- export { AccessibilityPanelComponent, AccessibilityService, AnimationPanelComponent, AnimationPlaybackService, BroadcastDialogComponent, CURSOR_PALETTE, ChartDataEditorComponent, ChartRendererComponent, 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, LoadContentService, ModalDialogComponent, Model3DRendererComponent, OleRendererComponent, PowerPointViewerComponent, PresentationOverlayComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, RESIZE_HANDLES, SEVERITY_GROUPS, SEVERITY_LABELS, SLIDE_TRANSITION_KEYFRAMES, ShareDialogComponent, SignaturesPanelComponent, SignaturesService, SlideCanvasComponent, SlideSorterOverlayComponent, SlidesPanelComponent, SmartArtRendererComponent, TYPE_LABELS, TableDataEditorComponent, TableRendererComponent, TextAdvancedPanelComponent, VIEWER_THEME, WEBM_MIME_CANDIDATES, ZoomRendererComponent, addCommentToList, advanceStep, applyFindReplacements, applyMove, applyResize, assignUserColor, bringForward, bringToFront, buildBroadcastConfig, buildBroadcastViewerUrl, buildClearHyperlinkPatch, buildClickGroups, buildCollaborationConfig, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildFontFaceRule, buildHyperlinkPatch, buildPatternFillCss, buildPrintDocument, buildPropertiesPatch, buildShareUrl, bulletIndentPx, canStartBroadcast, canStartShare, canUseClipboard, clampCursorPosition, clampGifDimensions, clampNotesFontSize, clampStep, cn, collectAccessibilityIssues, collectElementText, collectSlideText, computeHandoutLayout, computePageCount, computeSlideIndices, computeTimerProgress, convertOmmlToMathMl, 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, groupIssuesBySeverity, hasExistingLink, headerLabel, isInjectableUrl, isPpactionUrl, isSigned, isUrlSafe, isValidRoomId, issueTrackKey, issueTypeLabel, moveElementBy, msToFrameDelayCs, normalizeFontFormat, normalizeSlidesPerPage, ommlToMathml, overallStatus, 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, signatureCountLabel, signatureKey, signatureTimestamp, signerName, statusKind, statusLabel, themeStyle, themeToCssVars, toggleCommentResolvedInList, updateElementById, validatePrintSettings, validateRoomId, waypointsToPathD, worstStatus };
5520
+ export { AccessibilityPanelComponent, AccessibilityService, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, BroadcastDialogComponent, CURSOR_PALETTE, ChartDataEditorComponent, ChartRendererComponent, 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, MobileSheetComponent, MobileSlidesSheetComponent, ModalDialogComponent, Model3DRendererComponent, OleRendererComponent, PowerPointViewerComponent, PresentationOverlayComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, RESIZE_HANDLES, SEVERITY_GROUPS, SEVERITY_LABELS, SLIDE_TRANSITION_KEYFRAMES, ShareDialogComponent, SignaturesPanelComponent, SignaturesService, SlideCanvasComponent, SlideSorterOverlayComponent, SlidesPanelComponent, SmartArtRendererComponent, TYPE_LABELS, TableDataEditorComponent, TableRendererComponent, TextAdvancedPanelComponent, VIEWER_THEME, WEBM_MIME_CANDIDATES, ZoomRendererComponent, addCommentToList, advanceStep, applyFindReplacements, applyMove, applyResize, assignUserColor, bringForward, bringToFront, buildBroadcastConfig, buildBroadcastViewerUrl, buildClearHyperlinkPatch, buildClickGroups, buildCollaborationConfig, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildFontFaceRule, buildHyperlinkPatch, buildPatternFillCss, buildPrintDocument, buildPropertiesPatch, buildShareUrl, bulletIndentPx, canStartBroadcast, canStartShare, canUseClipboard, clampCursorPosition, clampGifDimensions, clampNotesFontSize, clampStep, cn, collectAccessibilityIssues, collectElementText, collectSlideText, computeHandoutLayout, computeIsMobile, computeIsTablet, computePageCount, computeSlideIndices, computeTimerProgress, convertOmmlToMathMl, 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, groupIssuesBySeverity, hasExistingLink, headerLabel, isInjectableUrl, isPpactionUrl, isSigned, isUrlSafe, isValidRoomId, issueTrackKey, issueTypeLabel, moveElementBy, msToFrameDelayCs, normalizeFontFormat, normalizeSlidesPerPage, ommlToMathml, overallStatus, 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, signatureCountLabel, signatureKey, signatureTimestamp, signerName, statusKind, statusLabel, themeStyle, themeToCssVars, toggleCommentResolvedInList, updateElementById, validatePrintSettings, validateRoomId, waypointsToPathD, worstStatus };
5182
5521
  export type { AccessibilityIssueGroup, AnimationClickGroup, Box, BroadcastConfig, BroadcastDefaults, CSSProperties, CanvasSize, ClassValue, CollaborationConfig, CollaborationRole, Rect as ConnectorObstacle, Point as ConnectorPoint, ConnectorRouting, DocumentProperties, DuotoneFilterDef, EmbeddedFontStyles, FindOptions, FindResult, GifFrame, GifFramePlan, GifPlanOptions, HandoutSlidesPerPage, HyperlinkDraft, NotesSegmentViewModel, ObjectUrlFactory, OverallSignatureStatus, PresenterNotes, PrintColorMode, PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, RecordWebmOptions, RemoteCursor, RemotePresence, ReplaceResult, ResizeHandle, ResolvedFontVariant, ShareDefaults, ShareFormFields, SignatureStatusKind, SlideTransitionAnimations, StyleMap, TimerProgress, VideoPlanOptions, VideoSegmentPlan, ViewerTheme, ViewerThemeColors };