pptx-vanilla-viewer 3.14.0 → 3.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/dist/{ai-panel-UVRFJV5W.js → ai-panel-F3MQVFQM.js} +1 -1
- package/dist/{ai-panel-R4CFN6XG.cjs → ai-panel-PK5HFITC.cjs} +1 -1
- package/dist/{chunk-OBVLNSK5.cjs → chunk-6TALMZ42.cjs} +26 -26
- package/dist/{chunk-HNPNPPFD.js → chunk-ACEQOODH.js} +1075 -433
- package/dist/chunk-LQYP7D76.cjs +4 -0
- package/dist/{chunk-EH7OHOZA.js → chunk-MEXZKL2Q.js} +26 -26
- package/dist/chunk-VFHGFYEN.js +4 -0
- package/dist/{chunk-24B6ZCFG.cjs → chunk-WKWWFY2C.cjs} +1075 -433
- package/dist/i18n/de.cjs +3 -0
- package/dist/i18n/de.mjs +3 -0
- package/dist/i18n/es.cjs +3 -0
- package/dist/i18n/es.mjs +3 -0
- package/dist/i18n/fr.cjs +3 -0
- package/dist/i18n/fr.mjs +3 -0
- package/dist/i18n/zh-CN.cjs +3 -0
- package/dist/i18n/zh-CN.mjs +3 -0
- package/dist/index.cjs +66 -102
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +66 -102
- package/dist/internals.cjs +1 -1
- package/dist/internals.d.ts +1 -1
- package/dist/internals.js +1 -1
- package/dist/styles.css +475 -38
- package/dist/{transition-overlay-C7hI62N0.d.ts → transition-overlay-f0pbzLt7.d.ts} +963 -901
- package/dist/{transition-overlay-C7hI62N0.d.ts.map → transition-overlay-f0pbzLt7.d.ts.map} +1 -1
- package/package.json +2 -2
- package/dist/chunk-W4OVIZLY.js +0 -4
- package/dist/chunk-WBPOPJLC.cjs +0 -4
|
@@ -13691,708 +13691,275 @@ interface RibbonTransitionDraft {
|
|
|
13691
13691
|
/** Advance Slide > After, as the `mm:ss.hh` text the field holds. */
|
|
13692
13692
|
advanceAfterText: string;
|
|
13693
13693
|
}
|
|
13694
|
+
type BackstagePage = 'home' | 'new' | 'open' | 'info' | 'save' | 'saveAs' | 'print' | 'share' | 'export' | 'close' | 'account' | 'options';
|
|
13694
13695
|
//#endregion
|
|
13695
|
-
//#region src/render/
|
|
13696
|
-
/** Part 1: conveyor / doors / ferris / flash / flythrough / gallery / glitter / honeycomb / pan. */
|
|
13697
|
-
declare const P14_TRANSITION_KEYFRAMES = "\n/* ── Conveyor (translate X with staggered timing) ──────────────────── */\n@keyframes pptx-tr-conveyor-in-from-right {\n\tfrom { transform: translateX(100%) rotateY(-30deg); }\n\t60% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-left {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(-100%) rotateY(30deg); }\n}\n@keyframes pptx-tr-conveyor-in-from-left {\n\tfrom { transform: translateX(-100%) rotateY(30deg); }\n\t60% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-right {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(100%) rotateY(-30deg); }\n}\n\n/* ── Doors (clip-path from center split) ──────────────────────────────\n MEASURED via COM CreateVideo: PowerPoint's `dir=\"horz\"` names a\n HORIZONTAL split line (two panels stacked top/bottom, opening upward and\n downward), and `dir=\"vert\"` a VERTICAL split line (panels side by side,\n opening left and right) - the opposite of what \"clips left/right\" vs\n \"clips top/bottom\" would suggest at a glance. Keep the clip-path bodies\n matched to the MEASURED direction, not the intuitive one. */\n@keyframes pptx-tr-doors-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-doors-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n\n/* ── Ferris (rotate elements around center) ───────────────────────── */\n@keyframes pptx-tr-ferris-in-from-right {\n\tfrom { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-left {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n}\n@keyframes pptx-tr-ferris-in-from-left {\n\tfrom { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-right {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n}\n\n/* ── Flash (bright flash opacity burst) ──────────────────────────── */\n@keyframes pptx-tr-flash-white {\n\t0% { opacity: 1; }\n\t30% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n@keyframes pptx-tr-flash-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t70% { opacity: 1; }\n\t100% { opacity: 1; }\n}\n\n/* ── Flythrough (scale + translate Z-axis feel) ──────────────────── */\n@keyframes pptx-tr-flythrough-in {\n\tfrom { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n}\n@keyframes pptx-tr-flythrough-reverse-in {\n\tfrom { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-reverse-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n}\n\n/* ── Gallery (translate with perspective) ─────────────────────────── */\n@keyframes pptx-tr-gallery-in-from-right {\n\tfrom { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-left {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n}\n@keyframes pptx-tr-gallery-in-from-left {\n\tfrom { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-right {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n}\n\n/* ── Glitter (particle dissolve effect) ──────────────────────────── */\n@keyframes pptx-tr-glitter-in {\n\tfrom { opacity: 0; filter: brightness(1.5) contrast(1.3) blur(2px); }\n\t60% { opacity: 0.7; filter: brightness(1.2) contrast(1.1) blur(1px); }\n\tto { opacity: 1; filter: brightness(1) contrast(1) blur(0); }\n}\n\n/* ── Honeycomb (hexagonal reveal) ────────────────────────────────── */\n@keyframes pptx-tr-honeycomb-in {\n\tfrom {\n\t\tclip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%);\n\t\topacity: 0;\n\t}\n\tto {\n\t\tclip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);\n\t\topacity: 1;\n\t}\n}\n@keyframes pptx-tr-honeycomb-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Pan (large-scale translate) ─────────────────────────────────── */\n@keyframes pptx-tr-pan-from-right {\n\tfrom { transform: translateX(100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-pan-from-left {\n\tfrom { transform: translateX(-100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-pan-from-bottom {\n\tfrom { transform: translateY(100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-top {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(-100%); }\n}\n@keyframes pptx-tr-pan-from-top {\n\tfrom { transform: translateY(-100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-bottom {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(100%); }\n}\n";
|
|
13698
|
-
/** Part 2: prism / reveal / ripple / shred / switch / vortex / warp / wheelReverse / window. */
|
|
13699
|
-
declare const P14_TRANSITION_KEYFRAMES_2 = "\n/* ── Prism: see `slide-transition-prism` (split out to keep this module\n under the per-file LOC budget) ─────────────────────────────────────── */\n\n@keyframes pptx-tr-prism-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-bottom {\n\tfrom { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-top {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-top {\n\tfrom { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-bottom {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n}\n\n/* ── Reveal (slide away reveal) ──────────────────────────────────── */\n@keyframes pptx-tr-reveal-out-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-reveal-out-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n/* MEASURED: the incoming layer stays hidden for roughly the first half of the\n transition (a real black/background gap shows through), then fades in -\n not a flat 0.5->1 fade running the whole duration. */\n@keyframes pptx-tr-reveal-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n\n/* ── Ripple (expanding ring clip-path) ───────────────────────────── */\n@keyframes pptx-tr-ripple-in {\n\tfrom { clip-path: circle(0% at 50% 50%); opacity: 0.5; }\n\t30% { clip-path: circle(20% at 50% 50%); opacity: 0.7; }\n\t60% { clip-path: circle(50% at 50% 50%); opacity: 0.9; }\n\tto { clip-path: circle(75% at 50% 50%); opacity: 1; }\n}\n\n/* ── Shred (fragmented clip-path pieces) ─────────────────────────── */\n@keyframes pptx-tr-shred-strips-in {\n\tfrom { clip-path: inset(0 100% 0 0); opacity: 0; }\n\t30% { clip-path: inset(0 60% 0 0); opacity: 0.5; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-rectangles-in {\n\tfrom { clip-path: inset(50%); opacity: 0; }\n\t40% { clip-path: inset(20%); opacity: 0.6; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Switch (flip/rotate swap) ───────────────────────────────────── */\n@keyframes pptx-tr-switch-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n}\n@keyframes pptx-tr-switch-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n}\n\n/* ── Vortex (rotate + scale spiral) ──────────────────────────────── */\n@keyframes pptx-tr-vortex-in {\n\tfrom { transform: rotate(720deg) scale(0); opacity: 0; }\n\tto { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-vortex-out {\n\tfrom { transform: rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: rotate(-720deg) scale(0); opacity: 0; }\n}\n\n/* ── Warp: see `slide-transition-warp` (COM-measured radial zoom blur,\n split out to keep this module under the per-file LOC budget) ────────── */\n\n@keyframes pptx-tr-warp-in {\n\t0% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n}\n@keyframes pptx-tr-warp-reverse-in {\n\t0% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-reverse-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n}\n\n\n/* ── WheelReverse (reverse wheel rotation) ───────────────────────── */\n@keyframes pptx-tr-wheel-reverse-in {\n\tfrom { clip-path: circle(0% at 50% 50%); transform: rotate(180deg); }\n\tto { clip-path: circle(75% at 50% 50%); transform: rotate(0deg); }\n}\n\n/* ── Window (scale from center with border) ──────────────────────────\n Same measured horz/vert meaning as Doors above (horz = horizontal split\n line opening vertically; vert = vertical split line opening horizontally). */\n@keyframes pptx-tr-window-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-out {\n\tfrom { opacity: 1; transform: scale(1); }\n\tto { opacity: 0; transform: scale(0.9); }\n}\n";
|
|
13700
|
-
/** Both p14 keyframe blocks concatenated, for single `<style>` injection. */
|
|
13701
|
-
declare const P14_TRANSITION_KEYFRAMES_ALL = "\n/* ── Conveyor (translate X with staggered timing) ──────────────────── */\n@keyframes pptx-tr-conveyor-in-from-right {\n\tfrom { transform: translateX(100%) rotateY(-30deg); }\n\t60% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-left {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(-100%) rotateY(30deg); }\n}\n@keyframes pptx-tr-conveyor-in-from-left {\n\tfrom { transform: translateX(-100%) rotateY(30deg); }\n\t60% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-right {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(100%) rotateY(-30deg); }\n}\n\n/* ── Doors (clip-path from center split) ──────────────────────────────\n MEASURED via COM CreateVideo: PowerPoint's `dir=\"horz\"` names a\n HORIZONTAL split line (two panels stacked top/bottom, opening upward and\n downward), and `dir=\"vert\"` a VERTICAL split line (panels side by side,\n opening left and right) - the opposite of what \"clips left/right\" vs\n \"clips top/bottom\" would suggest at a glance. Keep the clip-path bodies\n matched to the MEASURED direction, not the intuitive one. */\n@keyframes pptx-tr-doors-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-doors-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n\n/* ── Ferris (rotate elements around center) ───────────────────────── */\n@keyframes pptx-tr-ferris-in-from-right {\n\tfrom { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-left {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n}\n@keyframes pptx-tr-ferris-in-from-left {\n\tfrom { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-right {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n}\n\n/* ── Flash (bright flash opacity burst) ──────────────────────────── */\n@keyframes pptx-tr-flash-white {\n\t0% { opacity: 1; }\n\t30% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n@keyframes pptx-tr-flash-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t70% { opacity: 1; }\n\t100% { opacity: 1; }\n}\n\n/* ── Flythrough (scale + translate Z-axis feel) ──────────────────── */\n@keyframes pptx-tr-flythrough-in {\n\tfrom { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n}\n@keyframes pptx-tr-flythrough-reverse-in {\n\tfrom { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-reverse-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n}\n\n/* ── Gallery (translate with perspective) ─────────────────────────── */\n@keyframes pptx-tr-gallery-in-from-right {\n\tfrom { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-left {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n}\n@keyframes pptx-tr-gallery-in-from-left {\n\tfrom { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-right {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n}\n\n/* ── Glitter (particle dissolve effect) ──────────────────────────── */\n@keyframes pptx-tr-glitter-in {\n\tfrom { opacity: 0; filter: brightness(1.5) contrast(1.3) blur(2px); }\n\t60% { opacity: 0.7; filter: brightness(1.2) contrast(1.1) blur(1px); }\n\tto { opacity: 1; filter: brightness(1) contrast(1) blur(0); }\n}\n\n/* ── Honeycomb (hexagonal reveal) ────────────────────────────────── */\n@keyframes pptx-tr-honeycomb-in {\n\tfrom {\n\t\tclip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%);\n\t\topacity: 0;\n\t}\n\tto {\n\t\tclip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);\n\t\topacity: 1;\n\t}\n}\n@keyframes pptx-tr-honeycomb-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Pan (large-scale translate) ─────────────────────────────────── */\n@keyframes pptx-tr-pan-from-right {\n\tfrom { transform: translateX(100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-pan-from-left {\n\tfrom { transform: translateX(-100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-pan-from-bottom {\n\tfrom { transform: translateY(100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-top {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(-100%); }\n}\n@keyframes pptx-tr-pan-from-top {\n\tfrom { transform: translateY(-100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-bottom {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(100%); }\n}\n\n\n/* ── Prism: see `slide-transition-prism` (split out to keep this module\n under the per-file LOC budget) ─────────────────────────────────────── */\n\n@keyframes pptx-tr-prism-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-bottom {\n\tfrom { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-top {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-top {\n\tfrom { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-bottom {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n}\n\n/* ── Reveal (slide away reveal) ──────────────────────────────────── */\n@keyframes pptx-tr-reveal-out-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-reveal-out-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n/* MEASURED: the incoming layer stays hidden for roughly the first half of the\n transition (a real black/background gap shows through), then fades in -\n not a flat 0.5->1 fade running the whole duration. */\n@keyframes pptx-tr-reveal-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n\n/* ── Ripple (expanding ring clip-path) ───────────────────────────── */\n@keyframes pptx-tr-ripple-in {\n\tfrom { clip-path: circle(0% at 50% 50%); opacity: 0.5; }\n\t30% { clip-path: circle(20% at 50% 50%); opacity: 0.7; }\n\t60% { clip-path: circle(50% at 50% 50%); opacity: 0.9; }\n\tto { clip-path: circle(75% at 50% 50%); opacity: 1; }\n}\n\n/* ── Shred (fragmented clip-path pieces) ─────────────────────────── */\n@keyframes pptx-tr-shred-strips-in {\n\tfrom { clip-path: inset(0 100% 0 0); opacity: 0; }\n\t30% { clip-path: inset(0 60% 0 0); opacity: 0.5; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-rectangles-in {\n\tfrom { clip-path: inset(50%); opacity: 0; }\n\t40% { clip-path: inset(20%); opacity: 0.6; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Switch (flip/rotate swap) ───────────────────────────────────── */\n@keyframes pptx-tr-switch-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n}\n@keyframes pptx-tr-switch-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n}\n\n/* ── Vortex (rotate + scale spiral) ──────────────────────────────── */\n@keyframes pptx-tr-vortex-in {\n\tfrom { transform: rotate(720deg) scale(0); opacity: 0; }\n\tto { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-vortex-out {\n\tfrom { transform: rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: rotate(-720deg) scale(0); opacity: 0; }\n}\n\n/* ── Warp: see `slide-transition-warp` (COM-measured radial zoom blur,\n split out to keep this module under the per-file LOC budget) ────────── */\n\n@keyframes pptx-tr-warp-in {\n\t0% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n}\n@keyframes pptx-tr-warp-reverse-in {\n\t0% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-reverse-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n}\n\n\n/* ── WheelReverse (reverse wheel rotation) ───────────────────────── */\n@keyframes pptx-tr-wheel-reverse-in {\n\tfrom { clip-path: circle(0% at 50% 50%); transform: rotate(180deg); }\n\tto { clip-path: circle(75% at 50% 50%); transform: rotate(0deg); }\n}\n\n/* ── Window (scale from center with border) ──────────────────────────\n Same measured horz/vert meaning as Doors above (horz = horizontal split\n line opening vertically; vert = vertical split line opening horizontally). */\n@keyframes pptx-tr-window-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-out {\n\tfrom { opacity: 1; transform: scale(1); }\n\tto { opacity: 0; transform: scale(0.9); }\n}\n\n\n@keyframes pptx-tr-vortex-in-left { from { transform: translateX(-40%) rotate(720deg) scale(0); opacity: 0; } to { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-left { from { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateX(-40%) rotate(-720deg) scale(0); opacity: 0; } }\n@keyframes pptx-tr-vortex-in-right { from { transform: translateX(40%) rotate(-720deg) scale(0); opacity: 0; } to { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-right { from { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateX(40%) rotate(720deg) scale(0); opacity: 0; } }\n@keyframes pptx-tr-vortex-in-up { from { transform: translateY(-40%) rotate(720deg) scale(0); opacity: 0; } to { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-up { from { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateY(-40%) rotate(-720deg) scale(0); opacity: 0; } }\n@keyframes pptx-tr-vortex-in-down { from { transform: translateY(40%) rotate(-720deg) scale(0); opacity: 0; } to { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-down { from { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateY(40%) rotate(720deg) scale(0); opacity: 0; } }\n\n\n@keyframes pptx-tr-ripple-in-lu { from { clip-path: circle(0% at 0% 0%); opacity: 0.5; } 30% { clip-path: circle(20% at 0% 0%); opacity: 0.7; } 60% { clip-path: circle(55% at 0% 0%); opacity: 0.9; } to { clip-path: circle(150% at 0% 0%); opacity: 1; } }\n@keyframes pptx-tr-ripple-in-ru { from { clip-path: circle(0% at 100% 0%); opacity: 0.5; } 30% { clip-path: circle(20% at 100% 0%); opacity: 0.7; } 60% { clip-path: circle(55% at 100% 0%); opacity: 0.9; } to { clip-path: circle(150% at 100% 0%); opacity: 1; } }\n@keyframes pptx-tr-ripple-in-ld { from { clip-path: circle(0% at 0% 100%); opacity: 0.5; } 30% { clip-path: circle(20% at 0% 100%); opacity: 0.7; } 60% { clip-path: circle(55% at 0% 100%); opacity: 0.9; } to { clip-path: circle(150% at 0% 100%); opacity: 1; } }\n@keyframes pptx-tr-ripple-in-rd { from { clip-path: circle(0% at 100% 100%); opacity: 0.5; } 30% { clip-path: circle(20% at 100% 100%); opacity: 0.7; } 60% { clip-path: circle(55% at 100% 100%); opacity: 0.9; } to { clip-path: circle(150% at 100% 100%); opacity: 1; } }\n\n\n@keyframes pptx-tr-glitter-diamond-in-l { from { opacity: 0; transform: translateX(-6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateX(-2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-diamond-in-r { from { opacity: 0; transform: translateX(6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateX(2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-diamond-in-u { from { opacity: 0; transform: translateY(-6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateY(-2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-diamond-in-d { from { opacity: 0; transform: translateY(6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateY(2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-hexagon-in-l { from { opacity: 0; transform: translateX(-6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateX(-2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n@keyframes pptx-tr-glitter-hexagon-in-r { from { opacity: 0; transform: translateX(6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateX(2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n@keyframes pptx-tr-glitter-hexagon-in-u { from { opacity: 0; transform: translateY(-6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateY(-2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n@keyframes pptx-tr-glitter-hexagon-in-d { from { opacity: 0; transform: translateY(6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateY(2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n";
|
|
13702
|
-
//#endregion
|
|
13703
|
-
//#region src/render/p14-transition-css.d.ts
|
|
13704
|
-
/**
|
|
13705
|
-
* Return CSS animation descriptors for p14 transition types. Returns
|
|
13706
|
-
* `undefined` when the type is not a p14 transition.
|
|
13707
|
-
*/
|
|
13708
|
-
declare function getP14TransitionAnimations(type: PptxTransitionType, durationMs: number, direction: string | undefined, orient?: string | undefined, pattern?: string | undefined): SlideTransitionAnimations | undefined;
|
|
13709
|
-
/**
|
|
13710
|
-
* A font supplied by the host application. The package never ships fonts:
|
|
13711
|
-
* applications provide a licensed URL, data URL, or blob URL for their users.
|
|
13712
|
-
*/
|
|
13713
|
-
interface ViewerFontSource {
|
|
13714
|
-
family: string;
|
|
13715
|
-
src: string;
|
|
13716
|
-
format?: 'truetype' | 'opentype' | 'woff' | 'woff2';
|
|
13717
|
-
weight?: string | number;
|
|
13718
|
-
style?: 'normal' | 'italic';
|
|
13719
|
-
}
|
|
13720
|
-
interface SlideSizeEmu {
|
|
13721
|
-
widthEmu: number;
|
|
13722
|
-
heightEmu: number;
|
|
13723
|
-
/** ST_SlideSizeType token, or `''` for a size with no preset. */
|
|
13724
|
-
type: string;
|
|
13725
|
-
}
|
|
13726
|
-
//#endregion
|
|
13727
|
-
//#region src/render/presentation-file-kinds.d.ts
|
|
13728
|
-
/**
|
|
13729
|
-
* presentation-file-kinds: the one place that answers "can the viewer open
|
|
13730
|
-
* this file?" and "what should the saved copy be called?".
|
|
13731
|
-
*
|
|
13732
|
-
* ## Why this is a shared decision and not five allow-lists
|
|
13733
|
-
*
|
|
13734
|
-
* The loader reads more formats than any single UI advertises. Legacy binary
|
|
13735
|
-
* `.ppt` (PowerPoint 97-2003) is the sharp example: `PptxHandler.load()` has
|
|
13736
|
-
* detected the OLE compound-file container and converted the binary deck
|
|
13737
|
-
* through the regular pptx pipeline for some time, but the product kept saying
|
|
13738
|
-
* it was unsupported, and a picker that filters the extension out makes a
|
|
13739
|
-
* working loader unreachable in practice. Whenever the loader learns a format,
|
|
13740
|
-
* exactly one list has to change.
|
|
13741
|
-
*
|
|
13742
|
-
* ## Read many, write several
|
|
13743
|
-
*
|
|
13744
|
-
* Input is a superset of output. We READ `.pptx`, `.ppsx`, `.pptm`, `.potx`,
|
|
13745
|
-
* legacy binary `.ppt` and portable `pptx-viewer-json`; we WRITE the OpenXML
|
|
13746
|
-
* family plus legacy binary `.ppt` (via `packages/core/src/core/ppt/writer/`,
|
|
13747
|
-
* a real MS-PPT/OLE2 encoder, not a stub). `savedPresentationFileName`
|
|
13748
|
-
* REPLACES the source extension with the extension of the format actually
|
|
13749
|
-
* being written rather than keeping the source's: a deck opened as
|
|
13750
|
-
* `report.pptx` and saved back as `.ppt` (or vice versa) must have its name
|
|
13751
|
-
* agree with its bytes, which is the kind of mismatch PowerPoint itself
|
|
13752
|
-
* refuses to open.
|
|
13753
|
-
*
|
|
13754
|
-
* This module deliberately imports nothing, so any layer (render, export, a
|
|
13755
|
-
* binding, a host app) can depend on it without risking an import cycle.
|
|
13756
|
-
*
|
|
13757
|
-
* @module render/presentation-file-kinds
|
|
13758
|
-
*/
|
|
13696
|
+
//#region src/render/backstage-cards.d.ts
|
|
13759
13697
|
/**
|
|
13760
|
-
*
|
|
13698
|
+
* Every action card the File-tab backstage can show, keyed by the operation it
|
|
13699
|
+
* triggers rather than by its wording.
|
|
13761
13700
|
*
|
|
13762
|
-
*
|
|
13763
|
-
*
|
|
13764
|
-
*
|
|
13765
|
-
*
|
|
13701
|
+
* The five bindings used to hardcode a title and a body string each, which made
|
|
13702
|
+
* the whole backstage untranslatable and let the copy drift: the same card
|
|
13703
|
+
* carried four different descriptions depending on which binding you opened it
|
|
13704
|
+
* in. Both halves now live here as a dictionary key plus an English fallback,
|
|
13705
|
+
* so a wording change lands everywhere at once and a translator only has to
|
|
13706
|
+
* translate it once.
|
|
13766
13707
|
*/
|
|
13767
|
-
|
|
13768
|
-
|
|
13769
|
-
|
|
13708
|
+
type BackstageCardId = 'protect' | 'inspect' | 'embedFonts' | 'signatures' | 'versionHistory' | 'saveAsPptx' | 'saveAsPpsx' | 'saveAsPptm' | 'saveAsPpt' | 'pdf' | 'png' | 'video' | 'gif' | 'json' | 'copyImage' | 'print' | 'share';
|
|
13709
|
+
//#endregion
|
|
13710
|
+
//#region src/render/toolbar-actions.d.ts
|
|
13770
13711
|
/**
|
|
13771
|
-
*
|
|
13772
|
-
*
|
|
13773
|
-
*
|
|
13774
|
-
*
|
|
13712
|
+
* Toolbar action / ribbon-tab visibility: a single, framework-agnostic
|
|
13713
|
+
* catalogue of every top-level toolbar button and ribbon tab a host app can
|
|
13714
|
+
* independently hide. Each binding exposes a `hiddenActions?: ToolbarActionId[]`
|
|
13715
|
+
* prop, threads it down to the relevant render sites, and gates them with
|
|
13716
|
+
* `isActionHidden`. Default (`undefined` / `[]`) hides nothing, matching
|
|
13717
|
+
* today's always-visible behaviour.
|
|
13775
13718
|
*
|
|
13776
|
-
*
|
|
13777
|
-
*
|
|
13778
|
-
*
|
|
13719
|
+
* `TOOLBAR_TABS` is also the canonical ribbon-tab list/order, replacing the
|
|
13720
|
+
* copy hand-duplicated in each binding (React's `TOOLBAR_SECTIONS`, Vue's
|
|
13721
|
+
* `ribbon-constants.ts`, Angular's `RIBBON_TABS`, etc.) so the tab set can't
|
|
13722
|
+
* drift between bindings. Per-tab icons stay in each binding (icon libraries
|
|
13723
|
+
* differ per framework); only id + i18n key + order are shared here.
|
|
13779
13724
|
*/
|
|
13780
|
-
declare function isSupportedPresentationFile(name: string | null | undefined): boolean;
|
|
13781
13725
|
/**
|
|
13782
|
-
*
|
|
13783
|
-
*
|
|
13784
|
-
*
|
|
13726
|
+
* A single toolbar button/control that can be hidden independently of the
|
|
13727
|
+
* ribbon tab it may also appear inside. `zoom` and `navigation` each cover a
|
|
13728
|
+
* whole control cluster (zoom in/out/fit, prev/next) rather than each button
|
|
13729
|
+
* in it, matching how hosts actually want to hide/keep them as a unit.
|
|
13785
13730
|
*/
|
|
13786
|
-
|
|
13787
|
-
/**
|
|
13788
|
-
type
|
|
13731
|
+
type ToolbarButtonId = 'share' | 'broadcast' | 'export' | 'undo' | 'redo' | 'record' | 'notes' | 'fullscreen' | 'zoom' | 'navigation' | 'mergeShapes' | 'crop';
|
|
13732
|
+
/** A top-level ribbon tab. `record` intentionally shares its id with the quick-access Record button above: both surface the same recording feature, so hiding one hides the other. */
|
|
13733
|
+
type ToolbarTabId = 'file' | 'home' | 'insert' | 'draw' | 'design' | 'transitions' | 'animations' | 'slideShow' | 'record' | 'review' | 'view' | 'help';
|
|
13734
|
+
type ToolbarActionId = ToolbarButtonId | ToolbarTabId;
|
|
13789
13735
|
/**
|
|
13790
|
-
*
|
|
13791
|
-
*
|
|
13792
|
-
*
|
|
13793
|
-
*
|
|
13736
|
+
* PowerPoint's contextual tabs: they join the tab row only while the
|
|
13737
|
+
* selection is of their kind (see `contextualTabsForElement` in
|
|
13738
|
+
* `ribbon-galleries/`). Kept apart from `ToolbarTabId` because they are not
|
|
13739
|
+
* part of the fixed tab order every binding renders.
|
|
13794
13740
|
*/
|
|
13795
|
-
|
|
13741
|
+
type RibbonContextualTabId = 'shapeFormat' | 'pictureFormat' | 'tableDesign' | 'chartDesign' | 'smartArtDesign';
|
|
13742
|
+
//#endregion
|
|
13743
|
+
//#region src/render/canvas-context-menu-commands.d.ts
|
|
13796
13744
|
/**
|
|
13797
|
-
* The
|
|
13798
|
-
*
|
|
13745
|
+
* The right-click menu for the empty slide canvas (no element under the
|
|
13746
|
+
* cursor), as distinct from {@link ./context-menu-commands}'s per-element menu.
|
|
13799
13747
|
*
|
|
13800
|
-
*
|
|
13801
|
-
* and
|
|
13802
|
-
*
|
|
13803
|
-
*
|
|
13748
|
+
* Right-clicking empty canvas used to do nothing at all in every binding: React
|
|
13749
|
+
* and Vue both bailed out early (`getElementIdFromEvent` returns `null`, so the
|
|
13750
|
+
* handler just returns) rather than opening a menu, and the other three never
|
|
13751
|
+
* wired a handler for it either. PowerPoint offers Paste, Layout, Reset,
|
|
13752
|
+
* Format Background and view toggles (Grid and Guides, Ruler) from this menu;
|
|
13753
|
+
* this module is the one list every binding renders instead of five omissions.
|
|
13754
|
+
*
|
|
13755
|
+
* @module render/canvas-context-menu-commands
|
|
13804
13756
|
*/
|
|
13805
|
-
|
|
13757
|
+
/** Every command the empty-canvas context menu can offer, in no particular order. */
|
|
13758
|
+
type CanvasContextMenuCommandId = 'paste' | 'layout' | 'reset-slide' | 'format-background' | 'grid-and-guides' | 'ruler';
|
|
13806
13759
|
//#endregion
|
|
13807
|
-
//#region src/render/
|
|
13760
|
+
//#region src/render/merge-shapes/merge-shapes-menu.d.ts
|
|
13761
|
+
/** The right-click command id for each operation. */
|
|
13762
|
+
type MergeShapesCommandId = 'merge-union' | 'merge-combine' | 'merge-fragment' | 'merge-intersect' | 'merge-subtract';
|
|
13763
|
+
/** Every command a canvas context menu can offer, in no particular order. */
|
|
13764
|
+
type ContextMenuCommandId = 'copy' | 'cut' | 'paste' | 'duplicate' | 'edit-text' | 'edit-points' | 'bring-forward' | 'send-backward' | 'bring-front' | 'send-back' | 'ai-ask' | 'ai-fix' | 'comment' | 'hyperlink' | 'table-insert-row-above' | 'table-insert-row-below' | 'table-delete-row' | 'table-insert-col-left' | 'table-insert-col-right' | 'table-delete-col' | 'table-merge-selected' | 'table-merge-right' | 'table-merge-down' | 'table-split' | 'group' | 'ungroup' | 'crop' | MergeShapesCommandId | 'save-as-picture' | 'edit-alt-text' | 'size-and-position' | 'format-shape' | 'delete';
|
|
13765
|
+
/** Every command the Edit Points right-click menu can offer. */
|
|
13766
|
+
type EditPointsCommandId = 'add-point' | 'delete-point' | 'delete-segment' | 'open-path' | 'close-path' | 'smooth-point' | 'straight-point' | 'corner-point' | 'straight-segment' | 'curved-segment' | 'exit';
|
|
13767
|
+
//#endregion
|
|
13768
|
+
//#region src/render/edit-points/freeform-tool-geometry.d.ts
|
|
13769
|
+
/** The two click-to-place drawing tools. */
|
|
13770
|
+
type FreeformToolKind = 'freeformShape' | 'curve';
|
|
13771
|
+
//#endregion
|
|
13772
|
+
//#region src/render/editor-keymap.d.ts
|
|
13773
|
+
/** A logical editor command produced by one key press. */
|
|
13774
|
+
type EditorKeyActionName = 'undo' | 'redo' | 'copy' | 'cut' | 'paste' | 'duplicate' | 'delete' | 'selectAll' | 'group' | 'ungroup' | 'nudge' | 'prevSlide' | 'nextSlide' | 'escape' | 'find' | 'findReplace' | 'toggleShortcuts' | 'alignLeft' | 'alignCenter' | 'alignRight' | 'alignJustify' | 'increaseFontSize' | 'decreaseFontSize' | 'copyFormat' | 'pasteFormat' | 'newSlide' | 'hyperlink' | 'clearFormatting' | 'cycleSelectionNext' | 'cycleSelectionPrev' | 'pasteSpecial';
|
|
13775
|
+
//#endregion
|
|
13776
|
+
//#region src/render/options/viewer-options.d.ts
|
|
13808
13777
|
/**
|
|
13809
|
-
*
|
|
13810
|
-
*
|
|
13811
|
-
* A host (the demo apps, or any embedder) owns the bytes it hands to the
|
|
13812
|
-
* viewer, so a plain reload drops them and the user lands back on the file
|
|
13813
|
-
* dropzone with their presentation gone. This store remembers the open deck in
|
|
13814
|
-
* IndexedDB and hands it back on the next load.
|
|
13815
|
-
*
|
|
13816
|
-
* Scope is deliberately per-tab: the record is keyed by an id kept in
|
|
13817
|
-
* `sessionStorage`, which survives a reload but NOT a new tab. Refreshing
|
|
13818
|
-
* restores the deck this tab had open, while a second tab opened on the same
|
|
13819
|
-
* origin still starts on the landing page, and two tabs holding different decks
|
|
13820
|
-
* never steal each other's content.
|
|
13821
|
-
*
|
|
13822
|
-
* `restoreSessionDeck` additionally prefers a NEWER autosave snapshot for the
|
|
13823
|
-
* same file (see `./autosave-store`), so a refresh mid-edit comes back with the
|
|
13824
|
-
* edited deck rather than the pristine bytes that were first opened.
|
|
13778
|
+
* Full PowerPoint "File > Options" parity model.
|
|
13825
13779
|
*
|
|
13826
|
-
*
|
|
13827
|
-
*
|
|
13828
|
-
*
|
|
13780
|
+
* Groups mirror the ten categories of PowerPoint's Options dialog. Values are
|
|
13781
|
+
* flat primitives per group so the dialog panes can be rendered generically
|
|
13782
|
+
* from `VIEWER_OPTIONS_SCHEMA` in every binding. The legacy six-toggle
|
|
13783
|
+
* `ViewerPreferences` surface stays supported via the mapping helpers below.
|
|
13829
13784
|
*/
|
|
13830
|
-
|
|
13831
|
-
|
|
13832
|
-
|
|
13833
|
-
|
|
13834
|
-
|
|
13835
|
-
|
|
13836
|
-
|
|
13837
|
-
|
|
13785
|
+
type ScreenTipStyle = 'descriptions' | 'plain' | 'off';
|
|
13786
|
+
type DisplayOptimization = 'appearance' | 'compatibility';
|
|
13787
|
+
type ImageResolutionPreset = 'highFidelity' | 'ppi330' | 'ppi220' | 'ppi150' | 'ppi96';
|
|
13788
|
+
type OpenDocumentsView = 'savedView' | 'normal' | 'outline' | 'slideSorter' | 'notes';
|
|
13789
|
+
type DefaultExportFormat = 'pptx' | 'pdf' | 'png';
|
|
13790
|
+
type QuickAccessPosition = 'above' | 'below';
|
|
13791
|
+
type FeedbackSoundScheme = 'modern' | 'classic';
|
|
13792
|
+
type OptionsPrintWhat = 'slides' | 'handouts' | 'notes' | 'outline';
|
|
13793
|
+
type OptionsPrintColorMode = 'color' | 'grayscale' | 'blackAndWhite';
|
|
13794
|
+
interface ViewerGeneralOptions {
|
|
13795
|
+
displayOptimization: DisplayOptimization;
|
|
13796
|
+
showMiniToolbar: boolean;
|
|
13797
|
+
enableLivePreview: boolean;
|
|
13798
|
+
collapseRibbonAutomatically: boolean;
|
|
13799
|
+
collapseSearchByDefault: boolean;
|
|
13800
|
+
screenTipStyle: ScreenTipStyle;
|
|
13801
|
+
userName: string;
|
|
13802
|
+
userInitials: string;
|
|
13803
|
+
showStartScreen: boolean;
|
|
13804
|
+
/**
|
|
13805
|
+
* Lets the user hand a local font file to the viewer so decks authored
|
|
13806
|
+
* with a font the browser lacks render with the real face.
|
|
13807
|
+
*
|
|
13808
|
+
* Off by default. The registration reads a file the user picks and adds it
|
|
13809
|
+
* to the page's font set for the session, which is a capability a host
|
|
13810
|
+
* embedding the viewer should opt into rather than inherit.
|
|
13811
|
+
*/
|
|
13812
|
+
enableCustomFontUpload: boolean;
|
|
13813
|
+
}
|
|
13814
|
+
interface ViewerProofingOptions {
|
|
13815
|
+
autoCorrectTwoInitialCapitals: boolean;
|
|
13816
|
+
autoCorrectCapitalizeFirstLetter: boolean;
|
|
13817
|
+
autoCorrectCapitalizeDayNames: boolean;
|
|
13818
|
+
autoCorrectSmartQuotes: boolean;
|
|
13819
|
+
autoCorrectHyphensToDash: boolean;
|
|
13820
|
+
autoCorrectFractions: boolean;
|
|
13821
|
+
autoCorrectOrdinals: boolean;
|
|
13822
|
+
ignoreUppercase: boolean;
|
|
13823
|
+
ignoreWordsWithNumbers: boolean;
|
|
13824
|
+
ignoreInternetAddresses: boolean;
|
|
13825
|
+
flagRepeatedWords: boolean;
|
|
13826
|
+
checkSpellingAsYouType: boolean;
|
|
13827
|
+
hideSpellingErrors: boolean;
|
|
13838
13828
|
}
|
|
13839
13829
|
/**
|
|
13840
|
-
*
|
|
13841
|
-
* sandboxed iframe, or a browser with storage disabled).
|
|
13830
|
+
* File > Options > Save.
|
|
13842
13831
|
*
|
|
13843
|
-
*
|
|
13844
|
-
*
|
|
13845
|
-
|
|
13846
|
-
|
|
13847
|
-
|
|
13848
|
-
*
|
|
13849
|
-
*
|
|
13850
|
-
*
|
|
13851
|
-
|
|
13852
|
-
|
|
13853
|
-
/** The deck remembered for this tab, or `null` when there is nothing to restore. */
|
|
13854
|
-
declare function loadSessionDeck(): Promise<SessionDeck | null>;
|
|
13855
|
-
/** Forget this tab's deck (the host closed it, or handed the tab to another flow). */
|
|
13856
|
-
declare function forgetSessionDeck(): Promise<void>;
|
|
13857
|
-
/**
|
|
13858
|
-
* The deck to reopen on load: this tab's remembered bytes, upgraded to a newer
|
|
13859
|
-
* autosave snapshot of the same file when the viewer wrote one after they were
|
|
13860
|
-
* remembered. Without that upgrade a refresh mid-edit would silently roll the
|
|
13861
|
-
* presentation back to the state it was opened in.
|
|
13832
|
+
* Font embedding deliberately has NO entry here. It is owned by the File >
|
|
13833
|
+
* Fonts panel, whose toggle is the one the save path reads (see
|
|
13834
|
+
* `render/font-embedding`: `describeFontEmbedding` decides the toggle's start
|
|
13835
|
+
* position and whether it can do anything at all, `embeddedFontSaveOptions`
|
|
13836
|
+
* turns it into the `PptxHandler.save()` slice). This group used to carry a
|
|
13837
|
+
* second `embedFonts` boolean, plus an `embedAllFontCharacters` companion, and
|
|
13838
|
+
* neither was read by anything: the pane moved a switch that changed no saved
|
|
13839
|
+
* byte, while the panel next door moved the real one. Two switches for one
|
|
13840
|
+
* setting, one of them lying, is worse than one switch in a less
|
|
13841
|
+
* PowerPoint-shaped place.
|
|
13862
13842
|
*/
|
|
13863
|
-
|
|
13864
|
-
|
|
13865
|
-
|
|
13866
|
-
|
|
13867
|
-
|
|
13868
|
-
|
|
13843
|
+
interface ViewerSaveOptions {
|
|
13844
|
+
autoSave: boolean;
|
|
13845
|
+
autoRecoverIntervalMinutes: number;
|
|
13846
|
+
keepLastAutoRecoveredVersion: boolean;
|
|
13847
|
+
defaultExportFormat: DefaultExportFormat;
|
|
13848
|
+
cacheRetentionDays: number;
|
|
13849
|
+
clearCacheOnClose: boolean;
|
|
13869
13850
|
}
|
|
13870
|
-
|
|
13871
|
-
|
|
13872
|
-
|
|
13873
|
-
|
|
13874
|
-
|
|
13875
|
-
|
|
13876
|
-
|
|
13877
|
-
|
|
13878
|
-
|
|
13879
|
-
|
|
13880
|
-
|
|
13881
|
-
|
|
13851
|
+
interface ViewerAccessibilityOptions {
|
|
13852
|
+
/** Browser speech-recognition language; automatic follows the browser language. */
|
|
13853
|
+
subtitleLanguage?: string;
|
|
13854
|
+
showAccessibilityStatus: boolean;
|
|
13855
|
+
feedbackWithSound: boolean;
|
|
13856
|
+
soundScheme: FeedbackSoundScheme;
|
|
13857
|
+
showShortcutKeysInScreenTips: boolean;
|
|
13858
|
+
reducedMotion: boolean;
|
|
13859
|
+
}
|
|
13860
|
+
interface ViewerAdvancedOptions {
|
|
13861
|
+
autoSelectEntireWord: boolean;
|
|
13862
|
+
allowTextDragAndDrop: boolean;
|
|
13863
|
+
maximumUndoSteps: number;
|
|
13864
|
+
useSmartCutAndPaste: boolean;
|
|
13865
|
+
showPasteOptionsButton: boolean;
|
|
13866
|
+
imageDefaultResolution: ImageResolutionPreset;
|
|
13867
|
+
doNotCompressImages: boolean;
|
|
13868
|
+
chartPropertiesFollowDataPoint: boolean;
|
|
13869
|
+
recentPresentationsCount: number;
|
|
13870
|
+
showVerticalRuler: boolean;
|
|
13871
|
+
showGrid: boolean;
|
|
13872
|
+
snapToGrid: boolean;
|
|
13873
|
+
disableHardwareAcceleration: boolean;
|
|
13882
13874
|
/**
|
|
13883
|
-
*
|
|
13884
|
-
*
|
|
13885
|
-
*
|
|
13875
|
+
* Force every opt-in interactive 3D scene (SmartArt, bar/line/area/pie/
|
|
13876
|
+
* surface charts) to fall back to its flat 2D rendering, even when the
|
|
13877
|
+
* host has enabled that scene via its own `smartArt3D`/`*Chart3D` prop.
|
|
13878
|
+
* A host opting in says "this deck may want 3D"; this is the viewer
|
|
13879
|
+
* user's own override for when the WebGL scenes it renders are too much
|
|
13880
|
+
* for their machine. See `resolve3DRenderingFlags`.
|
|
13886
13881
|
*/
|
|
13887
|
-
|
|
13888
|
-
|
|
13889
|
-
|
|
13882
|
+
disable3DRendering: boolean;
|
|
13883
|
+
/**
|
|
13884
|
+
* `p:animEffect/@filter="pixelate"` defaults to snapping the element to
|
|
13885
|
+
* its end state (`cutIn`/`cutOut`), matching PowerPoint's own behaviour
|
|
13886
|
+
* (COM `CreateVideo` frame-diffing shows PowerPoint performs no animation
|
|
13887
|
+
* at all for this filter value). This turns on the blocky mosaic reveal
|
|
13888
|
+
* this renderer can build instead, for a viewer that would rather show
|
|
13889
|
+
* something animating than PowerPoint's own instant swap. See
|
|
13890
|
+
* `resolveFilterEffect` in `animation-filter-effects.ts` and
|
|
13891
|
+
* `docs/guide/visual-effects.md`.
|
|
13892
|
+
*/
|
|
13893
|
+
pixelateMosaicAnimation: boolean;
|
|
13894
|
+
openDocumentsView: OpenDocumentsView;
|
|
13895
|
+
slideShowShowMenuOnRightClick: boolean;
|
|
13896
|
+
slideShowShowPopupToolbar: boolean;
|
|
13897
|
+
slideShowPromptKeepInkAnnotations: boolean;
|
|
13898
|
+
slideShowEndWithBlackSlide: boolean;
|
|
13899
|
+
printInBackground: boolean;
|
|
13900
|
+
printHighQuality: boolean;
|
|
13901
|
+
printUseMostRecentSettings: boolean;
|
|
13902
|
+
printWhat: OptionsPrintWhat;
|
|
13903
|
+
printColorMode: OptionsPrintColorMode;
|
|
13904
|
+
printHiddenSlides: boolean;
|
|
13905
|
+
printScaleToFit: boolean;
|
|
13906
|
+
printFrameSlides: boolean;
|
|
13890
13907
|
}
|
|
13891
|
-
interface
|
|
13892
|
-
|
|
13893
|
-
|
|
13894
|
-
originY: number;
|
|
13908
|
+
interface ViewerRibbonOptions {
|
|
13909
|
+
/** Ribbon tabs unticked in Customize Ribbon. The File tab can never be hidden. */
|
|
13910
|
+
hiddenTabIds: ToolbarTabId[];
|
|
13895
13911
|
}
|
|
13896
|
-
|
|
13897
|
-
|
|
13898
|
-
|
|
13899
|
-
|
|
13900
|
-
|
|
13901
|
-
|
|
13912
|
+
interface ViewerQuickAccessOptions {
|
|
13913
|
+
visible: boolean;
|
|
13914
|
+
position: QuickAccessPosition;
|
|
13915
|
+
showCommandLabels: boolean;
|
|
13916
|
+
/** Ordered ids from `QUICK_ACCESS_COMMAND_CATALOG`. */
|
|
13917
|
+
commandIds: string[];
|
|
13902
13918
|
}
|
|
13903
|
-
interface
|
|
13904
|
-
|
|
13905
|
-
|
|
13919
|
+
interface ViewerTrustOptions {
|
|
13920
|
+
openInProtectedView: boolean;
|
|
13921
|
+
allowExternalContent: boolean;
|
|
13922
|
+
confirmExternalHyperlinks: boolean;
|
|
13906
13923
|
}
|
|
13907
|
-
interface
|
|
13908
|
-
|
|
13909
|
-
|
|
13910
|
-
|
|
13911
|
-
|
|
13912
|
-
|
|
13913
|
-
|
|
13924
|
+
interface ViewerOptions {
|
|
13925
|
+
general: ViewerGeneralOptions;
|
|
13926
|
+
proofing: ViewerProofingOptions;
|
|
13927
|
+
save: ViewerSaveOptions;
|
|
13928
|
+
accessibility: ViewerAccessibilityOptions;
|
|
13929
|
+
advanced: ViewerAdvancedOptions;
|
|
13930
|
+
ribbon: ViewerRibbonOptions;
|
|
13931
|
+
quickAccess: ViewerQuickAccessOptions;
|
|
13932
|
+
trust: ViewerTrustOptions;
|
|
13914
13933
|
}
|
|
13915
|
-
|
|
13916
|
-
|
|
13917
|
-
//#endregion
|
|
13918
|
-
//#region src/render/presentation-blackboard.d.ts
|
|
13919
|
-
/** Blackout state, as carried by {@link PresentationSnapshot}. */
|
|
13920
|
-
type PresentationBlackout = PresentationSnapshot['blackout'];
|
|
13921
|
-
//#endregion
|
|
13922
|
-
//#region src/render/editor-keymap.d.ts
|
|
13923
|
-
/** A logical editor command produced by one key press. */
|
|
13924
|
-
type EditorKeyActionName = 'undo' | 'redo' | 'copy' | 'cut' | 'paste' | 'duplicate' | 'delete' | 'selectAll' | 'group' | 'ungroup' | 'nudge' | 'prevSlide' | 'nextSlide' | 'escape' | 'find' | 'findReplace' | 'toggleShortcuts' | 'alignLeft' | 'alignCenter' | 'alignRight' | 'alignJustify' | 'increaseFontSize' | 'decreaseFontSize' | 'copyFormat' | 'pasteFormat' | 'newSlide' | 'hyperlink' | 'clearFormatting' | 'cycleSelectionNext' | 'cycleSelectionPrev' | 'pasteSpecial';
|
|
13925
|
-
//#endregion
|
|
13926
|
-
//#region src/render/merge-shapes/merge-shapes-menu.d.ts
|
|
13927
|
-
/** The right-click command id for each operation. */
|
|
13928
|
-
type MergeShapesCommandId = 'merge-union' | 'merge-combine' | 'merge-fragment' | 'merge-intersect' | 'merge-subtract';
|
|
13929
|
-
/** Every command a canvas context menu can offer, in no particular order. */
|
|
13930
|
-
type ContextMenuCommandId = 'copy' | 'cut' | 'paste' | 'duplicate' | 'edit-text' | 'edit-points' | 'bring-forward' | 'send-backward' | 'bring-front' | 'send-back' | 'ai-ask' | 'ai-fix' | 'comment' | 'hyperlink' | 'table-insert-row-above' | 'table-insert-row-below' | 'table-delete-row' | 'table-insert-col-left' | 'table-insert-col-right' | 'table-delete-col' | 'table-merge-selected' | 'table-merge-right' | 'table-merge-down' | 'table-split' | 'group' | 'ungroup' | 'crop' | MergeShapesCommandId | 'save-as-picture' | 'edit-alt-text' | 'size-and-position' | 'format-shape' | 'delete';
|
|
13934
|
+
type ViewerOptionsGroupId = keyof ViewerOptions;
|
|
13935
|
+
type ViewerOptionPrimitive = boolean | number | string;
|
|
13931
13936
|
//#endregion
|
|
13932
|
-
//#region src/render/
|
|
13937
|
+
//#region src/render/options/viewer-options-controls.d.ts
|
|
13933
13938
|
/**
|
|
13934
|
-
*
|
|
13935
|
-
*
|
|
13936
|
-
*
|
|
13937
|
-
* Right-clicking empty canvas used to do nothing at all in every binding: React
|
|
13938
|
-
* and Vue both bailed out early (`getElementIdFromEvent` returns `null`, so the
|
|
13939
|
-
* handler just returns) rather than opening a menu, and the other three never
|
|
13940
|
-
* wired a handler for it either. PowerPoint offers Paste, Layout, Reset,
|
|
13941
|
-
* Format Background and view toggles (Grid and Guides, Ruler) from this menu;
|
|
13942
|
-
* this module is the one list every binding renders instead of five omissions.
|
|
13943
|
-
*
|
|
13944
|
-
* @module render/canvas-context-menu-commands
|
|
13939
|
+
* Control/section/tab descriptor types for the File > Options schema, plus
|
|
13940
|
+
* the terse constructors the tab-definition modules build panes with.
|
|
13945
13941
|
*/
|
|
13946
|
-
|
|
13947
|
-
type CanvasContextMenuCommandId = 'paste' | 'layout' | 'reset-slide' | 'format-background' | 'grid-and-guides' | 'ruler';
|
|
13948
|
-
//#endregion
|
|
13949
|
-
//#region src/render/paste-special.d.ts
|
|
13950
|
-
/** The four paste formats PowerPoint's Paste Options / Paste Special offer. */
|
|
13951
|
-
type PasteSpecialFormat = 'keep-source-formatting' | 'use-destination-theme' | 'picture' | 'keep-text-only';
|
|
13942
|
+
type ViewerOptionsTabId = 'general' | 'proofing' | 'save' | 'language' | 'accessibility' | 'advanced' | 'ribbon' | 'quickAccess' | 'addIns' | 'trust';
|
|
13952
13943
|
//#endregion
|
|
13953
|
-
//#region src/render/
|
|
13954
|
-
/**
|
|
13955
|
-
interface
|
|
13956
|
-
|
|
13957
|
-
axis: 'h' | 'v';
|
|
13958
|
-
position: number;
|
|
13944
|
+
//#region src/render/customization/host-menu-commands.d.ts
|
|
13945
|
+
/** Snapshot of the slide on which the host command was offered. */
|
|
13946
|
+
interface HostCanvasMenuContext {
|
|
13947
|
+
slideIndex: number;
|
|
13959
13948
|
}
|
|
13960
|
-
|
|
13961
|
-
|
|
13962
|
-
|
|
13963
|
-
interface InkPoint {
|
|
13964
|
-
x: number;
|
|
13965
|
-
y: number;
|
|
13966
|
-
/**
|
|
13967
|
-
* Pointer pressure at this point, from `PointerEvent.pressure` (0..1).
|
|
13968
|
-
* Optional: a binding that has not wired pressure capture simply omits
|
|
13969
|
-
* it, and {@link strokeToInkElement} falls back to
|
|
13970
|
-
* {@link DEFAULT_POINTER_PRESSURE}, the constant value mice and other
|
|
13971
|
-
* non-pressure-aware devices report, which reads as "no real pressure
|
|
13972
|
-
* data".
|
|
13973
|
-
*/
|
|
13974
|
-
pressure?: number;
|
|
13975
|
-
/**
|
|
13976
|
-
* Pen-tilt lean, in degrees, from `PointerEvent.tiltX`/`tiltY` on
|
|
13977
|
-
* supporting hardware (a mouse, or a stylus with no tilt sensor, reports a
|
|
13978
|
-
* constant 0). Optional and always captured as a pair: a binding that has
|
|
13979
|
-
* not wired tilt capture simply omits both, and {@link strokeToInkElement}
|
|
13980
|
-
* treats a constant `(0, 0)` reading the same way it treats a constant
|
|
13981
|
-
* pressure, i.e. as "no real tilt data" rather than authoring a channel
|
|
13982
|
-
* for it.
|
|
13983
|
-
*/
|
|
13984
|
-
tiltX?: number;
|
|
13985
|
-
tiltY?: number;
|
|
13949
|
+
/** Effective selection, including a single right-clicked element. */
|
|
13950
|
+
interface HostElementMenuContext extends HostCanvasMenuContext {
|
|
13951
|
+
elementIds: readonly string[];
|
|
13986
13952
|
}
|
|
13987
|
-
/**
|
|
13988
|
-
interface
|
|
13989
|
-
|
|
13990
|
-
|
|
13991
|
-
|
|
13992
|
-
|
|
13953
|
+
/** Plain text labels work identically in every framework. */
|
|
13954
|
+
interface HostMenuCommand<C> {
|
|
13955
|
+
id: string;
|
|
13956
|
+
label: string;
|
|
13957
|
+
/** Default: a separate group above the built-in commands. */
|
|
13958
|
+
group?: 'top' | 'bottom';
|
|
13959
|
+
disabled?: boolean | ((context: C) => boolean);
|
|
13960
|
+
onSelect: (context: C) => void;
|
|
13993
13961
|
}
|
|
13994
13962
|
//#endregion
|
|
13995
|
-
//#region src/render/mobile-chrome.d.ts
|
|
13996
|
-
/**
|
|
13997
|
-
* Pure helper logic for mobile chrome state, shared by every binding.
|
|
13998
|
-
*
|
|
13999
|
-
* These helpers capture the sheet open/close state machine that governs which
|
|
14000
|
-
* sheet is visible at any given time and which bottom-bar button appears active.
|
|
14001
|
-
* Keeping this logic as pure functions makes it straightforward to test and
|
|
14002
|
-
* trivial to adapt when each binding wires the components together.
|
|
14003
|
-
*/
|
|
14004
|
-
/** All mobile sheets that can be open at one time. */
|
|
14005
|
-
type MobileSheetKey = 'slides' | 'menu' | 'insert' | 'inspector' | 'comments' | 'notes' | null;
|
|
14006
|
-
//#endregion
|
|
14007
|
-
//#region src/render/gradient-picker.d.ts
|
|
14008
|
-
/** A single gradient stop, mirroring the ShapeStyle array item shape. */
|
|
14009
|
-
interface GradientStop {
|
|
14010
|
-
color: string;
|
|
14011
|
-
position: number;
|
|
14012
|
-
opacity?: number;
|
|
14013
|
-
/**
|
|
14014
|
-
* Theme colour identity for this stop, mirroring
|
|
14015
|
-
* `ShapeStyle.fillColorRef`. Set by a theme-swatch pick so the stop keeps
|
|
14016
|
-
* following the theme after a later theme change; cleared by a custom hex
|
|
14017
|
-
* pick, which has no theme identity.
|
|
14018
|
-
*/
|
|
14019
|
-
colorRef?: PptxThemeColorRef;
|
|
14020
|
-
}
|
|
14021
|
-
/** The editable gradient state surfaced to the component. */
|
|
14022
|
-
interface GradientState {
|
|
14023
|
-
type: 'linear' | 'radial';
|
|
14024
|
-
/** Angle in degrees (only meaningful for linear). */
|
|
14025
|
-
angle: number;
|
|
14026
|
-
stops: GradientStop[];
|
|
14027
|
-
}
|
|
14028
|
-
//#endregion
|
|
14029
|
-
//#region src/render/insert-chart.d.ts
|
|
14030
|
-
/**
|
|
14031
|
-
* Dropdown ids for the insert-chart menu. Distinct from `PptxChartType`
|
|
14032
|
-
* because PowerPoint offers Column (vertical) and Bar (horizontal) as two
|
|
14033
|
-
* entries over the same underlying `'bar'` chart type, and because `'pareto'`
|
|
14034
|
-
* has no `PptxChartType` of its own: it is a dropdown entry that resolves to
|
|
14035
|
-
* `type: 'histogram'` (see docs/guide/limitations.md's ChartEx row) with a
|
|
14036
|
-
* frequency-plus-cumulative-percentage default shape. The other six ChartEx
|
|
14037
|
-
* ids (`histogram` through `regionMap`) map one-to-one onto their chart type.
|
|
14038
|
-
*/
|
|
14039
|
-
type InsertChartKind = 'column' | 'bar' | 'line' | 'pie' | 'doughnut' | 'area' | 'scatter' | 'histogram' | 'pareto' | 'funnel' | 'treemap' | 'sunburst' | 'boxWhisker' | 'regionMap';
|
|
14040
|
-
/** In-memory clipboard payload stored when an element is copied or cut. */
|
|
14041
|
-
interface ElementClipboardPayload {
|
|
14042
|
-
element: PptxElement;
|
|
14043
|
-
isTemplate: boolean;
|
|
14044
|
-
}
|
|
14045
|
-
//#endregion
|
|
14046
|
-
//#region src/render/image-file-insertion.d.ts
|
|
14047
|
-
/**
|
|
14048
|
-
* Decode a local image File/Blob into a centred element, fitting the slide
|
|
14049
|
-
* without upscaling. Dimensions are slide pixels; image bytes are preserved.
|
|
14050
|
-
*
|
|
14051
|
-
* Resolves null for unsupported/unreadable images, invalid bounds, cancellation,
|
|
14052
|
-
* or unavailable browser APIs. Importing this module is safe outside a browser.
|
|
14053
|
-
* No slide, selection, history, clipboard, or network state is changed. The
|
|
14054
|
-
* caller must still validate its document/slide destination before committing.
|
|
14055
|
-
*/
|
|
14056
|
-
declare function createImageElementFromFile(file: Blob, canvasSize: CanvasSize, signal?: AbortSignal): Promise<ImagePptxElement | null>;
|
|
14057
|
-
//#endregion
|
|
14058
|
-
//#region src/render/shape-preset-catalog.d.ts
|
|
14059
|
-
/**
|
|
14060
|
-
* shape-preset-catalog.ts: the Insert > Shape picker catalogue shared by every
|
|
14061
|
-
* binding's toolbar/inspector.
|
|
14062
|
-
*
|
|
14063
|
-
* Pure data: each entry carries the preset geometry `type` (OOXML `a:prstGeom`
|
|
14064
|
-
* value the editor can insert), an English fallback `label`, the shared-i18n
|
|
14065
|
-
* `i18nKey`, and a framework-neutral icon descriptor ({@link ShapePresetGlyph}
|
|
14066
|
-
* name + optional utility-class modifier for rotation/skew). Each binding maps
|
|
14067
|
-
* the glyph name onto its own icon component/SVG.
|
|
14068
|
-
*
|
|
14069
|
-
* Order matters: bindings surface the first 12 entries as the quick "top
|
|
14070
|
-
* shapes" row, so new presets should be appended, not inserted.
|
|
14071
|
-
*
|
|
14072
|
-
* @module render/shape-preset-catalog
|
|
14073
|
-
*/
|
|
14074
|
-
/** Shape preset geometry types offered by the insert picker. */
|
|
14075
|
-
type ShapePresetType = 'rect' | 'roundRect' | 'ellipse' | 'cylinder' | 'rtArrow' | 'leftArrow' | 'upArrow' | 'downArrow' | 'triangle' | 'rtTriangle' | 'diamond' | 'parallelogram' | 'trapezoid' | 'pentagon' | 'hexagon' | 'octagon' | 'chevron' | 'star5' | 'star6' | 'star8' | 'plus' | 'heart' | 'cloud' | 'sun' | 'moon' | 'pie' | 'plaque' | 'teardrop' | 'line' | 'connector';
|
|
14076
|
-
//#endregion
|
|
14077
|
-
//#region src/render/zoom-return-navigation.d.ts
|
|
14078
|
-
/**
|
|
14079
|
-
* The navigation-relevant fields of a Zoom click target, independent of
|
|
14080
|
-
* `zoomType`.
|
|
14081
|
-
*
|
|
14082
|
-
* `returnToParent` is already resolved to its EFFECTIVE value here (not the
|
|
14083
|
-
* raw, possibly-`undefined` `ZoomPptxElement`/`SummaryZoomTarget` field):
|
|
14084
|
-
* `CT_ZoomObjectProperties/@returnToParent` (MS-PPTX) is `<xsd:attribute
|
|
14085
|
-
* name="returnToParent" type="xsd:boolean" use="optional" default="true"/>`,
|
|
14086
|
-
* so an ABSENT attribute means true, not false. Core deliberately stores
|
|
14087
|
-
* `undefined` rather than fabricating `true` (so a round-trip never invents
|
|
14088
|
-
* an attribute the source never had), which makes `Boolean(x)` the wrong way
|
|
14089
|
-
* to read it; the two `resolve*NavigationTarget` functions below are the only
|
|
14090
|
-
* place that distinction should be made.
|
|
14091
|
-
*/
|
|
14092
|
-
interface ZoomNavigationTarget {
|
|
14093
|
-
targetSlideIndex: number;
|
|
14094
|
-
targetSectionId?: string;
|
|
14095
|
-
returnToParent: boolean;
|
|
14096
|
-
transitionDurationMs?: number;
|
|
14097
|
-
}
|
|
14098
|
-
interface AutosaveRecord {
|
|
14099
|
-
key: string;
|
|
14100
|
-
data: Uint8Array;
|
|
14101
|
-
timestamp: number;
|
|
14102
|
-
size: number;
|
|
14103
|
-
}
|
|
14104
|
-
type BackstagePage = 'home' | 'new' | 'open' | 'info' | 'save' | 'saveAs' | 'print' | 'share' | 'export' | 'close' | 'account' | 'options';
|
|
14105
|
-
//#endregion
|
|
14106
|
-
//#region src/render/backstage-cards.d.ts
|
|
14107
|
-
/**
|
|
14108
|
-
* Every action card the File-tab backstage can show, keyed by the operation it
|
|
14109
|
-
* triggers rather than by its wording.
|
|
14110
|
-
*
|
|
14111
|
-
* The five bindings used to hardcode a title and a body string each, which made
|
|
14112
|
-
* the whole backstage untranslatable and let the copy drift: the same card
|
|
14113
|
-
* carried four different descriptions depending on which binding you opened it
|
|
14114
|
-
* in. Both halves now live here as a dictionary key plus an English fallback,
|
|
14115
|
-
* so a wording change lands everywhere at once and a translator only has to
|
|
14116
|
-
* translate it once.
|
|
14117
|
-
*/
|
|
14118
|
-
type BackstageCardId = 'protect' | 'inspect' | 'embedFonts' | 'signatures' | 'versionHistory' | 'saveAsPptx' | 'saveAsPpsx' | 'saveAsPptm' | 'saveAsPpt' | 'pdf' | 'png' | 'video' | 'gif' | 'json' | 'copyImage' | 'print' | 'share';
|
|
14119
|
-
//#endregion
|
|
14120
|
-
//#region src/render/master-view-crud.d.ts
|
|
14121
|
-
/** One Slide Master view sidebar command. */
|
|
14122
|
-
type MasterViewCrudActionId = 'addLayout' | 'duplicateLayout' | 'deleteLayout' | 'renameLayout' | 'addMaster' | 'duplicateMaster' | 'deleteMaster' | 'renameMaster';
|
|
14123
|
-
/** A framework-neutral descriptor for one sidebar button. */
|
|
14124
|
-
interface MasterViewCrudAction {
|
|
14125
|
-
id: MasterViewCrudActionId;
|
|
14126
|
-
/** i18n key for the button label (`pptx.masterView.<id>`). */
|
|
14127
|
-
labelKey: string;
|
|
14128
|
-
enabled: boolean;
|
|
14129
|
-
/** i18n key explaining why the button is disabled, set only when it is. */
|
|
14130
|
-
disabledReasonKey?: string;
|
|
14131
|
-
}
|
|
14132
|
-
/**
|
|
14133
|
-
* Optional hook point for hosts that want to wire a real sign-in flow into
|
|
14134
|
-
* File > Account. Disabled by default: the Account page renders nothing
|
|
14135
|
-
* extra unless a host explicitly opts in by passing `enabled: true`.
|
|
14136
|
-
* See docs/guide for wiring instructions.
|
|
14137
|
-
*/
|
|
14138
|
-
interface AccountAuthConfig {
|
|
14139
|
-
enabled: boolean;
|
|
14140
|
-
onSignIn: () => void;
|
|
14141
|
-
signedInUser?: {
|
|
14142
|
-
name: string;
|
|
14143
|
-
email?: string;
|
|
14144
|
-
avatarUrl?: string;
|
|
14145
|
-
};
|
|
14146
|
-
}
|
|
14147
|
-
//#endregion
|
|
14148
|
-
//#region src/render/toolbar-actions.d.ts
|
|
14149
|
-
/**
|
|
14150
|
-
* Toolbar action / ribbon-tab visibility: a single, framework-agnostic
|
|
14151
|
-
* catalogue of every top-level toolbar button and ribbon tab a host app can
|
|
14152
|
-
* independently hide. Each binding exposes a `hiddenActions?: ToolbarActionId[]`
|
|
14153
|
-
* prop, threads it down to the relevant render sites, and gates them with
|
|
14154
|
-
* `isActionHidden`. Default (`undefined` / `[]`) hides nothing, matching
|
|
14155
|
-
* today's always-visible behaviour.
|
|
14156
|
-
*
|
|
14157
|
-
* `TOOLBAR_TABS` is also the canonical ribbon-tab list/order, replacing the
|
|
14158
|
-
* copy hand-duplicated in each binding (React's `TOOLBAR_SECTIONS`, Vue's
|
|
14159
|
-
* `ribbon-constants.ts`, Angular's `RIBBON_TABS`, etc.) so the tab set can't
|
|
14160
|
-
* drift between bindings. Per-tab icons stay in each binding (icon libraries
|
|
14161
|
-
* differ per framework); only id + i18n key + order are shared here.
|
|
14162
|
-
*/
|
|
14163
|
-
/**
|
|
14164
|
-
* A single toolbar button/control that can be hidden independently of the
|
|
14165
|
-
* ribbon tab it may also appear inside. `zoom` and `navigation` each cover a
|
|
14166
|
-
* whole control cluster (zoom in/out/fit, prev/next) rather than each button
|
|
14167
|
-
* in it, matching how hosts actually want to hide/keep them as a unit.
|
|
14168
|
-
*/
|
|
14169
|
-
type ToolbarButtonId = 'share' | 'broadcast' | 'export' | 'undo' | 'redo' | 'record' | 'notes' | 'fullscreen' | 'zoom' | 'navigation' | 'mergeShapes' | 'crop';
|
|
14170
|
-
/** A top-level ribbon tab. `record` intentionally shares its id with the quick-access Record button above: both surface the same recording feature, so hiding one hides the other. */
|
|
14171
|
-
type ToolbarTabId = 'file' | 'home' | 'insert' | 'draw' | 'design' | 'transitions' | 'animations' | 'slideShow' | 'record' | 'review' | 'view' | 'help';
|
|
14172
|
-
type ToolbarActionId = ToolbarButtonId | ToolbarTabId;
|
|
14173
|
-
/**
|
|
14174
|
-
* PowerPoint's contextual tabs: they join the tab row only while the
|
|
14175
|
-
* selection is of their kind (see `contextualTabsForElement` in
|
|
14176
|
-
* `ribbon-galleries/`). Kept apart from `ToolbarTabId` because they are not
|
|
14177
|
-
* part of the fixed tab order every binding renders.
|
|
14178
|
-
*/
|
|
14179
|
-
type RibbonContextualTabId = 'shapeFormat' | 'pictureFormat' | 'tableDesign' | 'chartDesign' | 'smartArtDesign';
|
|
14180
|
-
//#endregion
|
|
14181
|
-
//#region src/render/options/viewer-options.d.ts
|
|
14182
|
-
/**
|
|
14183
|
-
* Full PowerPoint "File > Options" parity model.
|
|
14184
|
-
*
|
|
14185
|
-
* Groups mirror the ten categories of PowerPoint's Options dialog. Values are
|
|
14186
|
-
* flat primitives per group so the dialog panes can be rendered generically
|
|
14187
|
-
* from `VIEWER_OPTIONS_SCHEMA` in every binding. The legacy six-toggle
|
|
14188
|
-
* `ViewerPreferences` surface stays supported via the mapping helpers below.
|
|
14189
|
-
*/
|
|
14190
|
-
type ScreenTipStyle = 'descriptions' | 'plain' | 'off';
|
|
14191
|
-
type DisplayOptimization = 'appearance' | 'compatibility';
|
|
14192
|
-
type ImageResolutionPreset = 'highFidelity' | 'ppi330' | 'ppi220' | 'ppi150' | 'ppi96';
|
|
14193
|
-
type OpenDocumentsView = 'savedView' | 'normal' | 'outline' | 'slideSorter' | 'notes';
|
|
14194
|
-
type DefaultExportFormat = 'pptx' | 'pdf' | 'png';
|
|
14195
|
-
type QuickAccessPosition = 'above' | 'below';
|
|
14196
|
-
type FeedbackSoundScheme = 'modern' | 'classic';
|
|
14197
|
-
type OptionsPrintWhat = 'slides' | 'handouts' | 'notes' | 'outline';
|
|
14198
|
-
type OptionsPrintColorMode = 'color' | 'grayscale' | 'blackAndWhite';
|
|
14199
|
-
interface ViewerGeneralOptions {
|
|
14200
|
-
displayOptimization: DisplayOptimization;
|
|
14201
|
-
showMiniToolbar: boolean;
|
|
14202
|
-
enableLivePreview: boolean;
|
|
14203
|
-
collapseRibbonAutomatically: boolean;
|
|
14204
|
-
collapseSearchByDefault: boolean;
|
|
14205
|
-
screenTipStyle: ScreenTipStyle;
|
|
14206
|
-
userName: string;
|
|
14207
|
-
userInitials: string;
|
|
14208
|
-
showStartScreen: boolean;
|
|
14209
|
-
/**
|
|
14210
|
-
* Lets the user hand a local font file to the viewer so decks authored
|
|
14211
|
-
* with a font the browser lacks render with the real face.
|
|
14212
|
-
*
|
|
14213
|
-
* Off by default. The registration reads a file the user picks and adds it
|
|
14214
|
-
* to the page's font set for the session, which is a capability a host
|
|
14215
|
-
* embedding the viewer should opt into rather than inherit.
|
|
14216
|
-
*/
|
|
14217
|
-
enableCustomFontUpload: boolean;
|
|
14218
|
-
}
|
|
14219
|
-
interface ViewerProofingOptions {
|
|
14220
|
-
autoCorrectTwoInitialCapitals: boolean;
|
|
14221
|
-
autoCorrectCapitalizeFirstLetter: boolean;
|
|
14222
|
-
autoCorrectCapitalizeDayNames: boolean;
|
|
14223
|
-
autoCorrectSmartQuotes: boolean;
|
|
14224
|
-
autoCorrectHyphensToDash: boolean;
|
|
14225
|
-
autoCorrectFractions: boolean;
|
|
14226
|
-
autoCorrectOrdinals: boolean;
|
|
14227
|
-
ignoreUppercase: boolean;
|
|
14228
|
-
ignoreWordsWithNumbers: boolean;
|
|
14229
|
-
ignoreInternetAddresses: boolean;
|
|
14230
|
-
flagRepeatedWords: boolean;
|
|
14231
|
-
checkSpellingAsYouType: boolean;
|
|
14232
|
-
hideSpellingErrors: boolean;
|
|
14233
|
-
}
|
|
14234
|
-
/**
|
|
14235
|
-
* File > Options > Save.
|
|
14236
|
-
*
|
|
14237
|
-
* Font embedding deliberately has NO entry here. It is owned by the File >
|
|
14238
|
-
* Fonts panel, whose toggle is the one the save path reads (see
|
|
14239
|
-
* `render/font-embedding`: `describeFontEmbedding` decides the toggle's start
|
|
14240
|
-
* position and whether it can do anything at all, `embeddedFontSaveOptions`
|
|
14241
|
-
* turns it into the `PptxHandler.save()` slice). This group used to carry a
|
|
14242
|
-
* second `embedFonts` boolean, plus an `embedAllFontCharacters` companion, and
|
|
14243
|
-
* neither was read by anything: the pane moved a switch that changed no saved
|
|
14244
|
-
* byte, while the panel next door moved the real one. Two switches for one
|
|
14245
|
-
* setting, one of them lying, is worse than one switch in a less
|
|
14246
|
-
* PowerPoint-shaped place.
|
|
14247
|
-
*/
|
|
14248
|
-
interface ViewerSaveOptions {
|
|
14249
|
-
autoSave: boolean;
|
|
14250
|
-
autoRecoverIntervalMinutes: number;
|
|
14251
|
-
keepLastAutoRecoveredVersion: boolean;
|
|
14252
|
-
defaultExportFormat: DefaultExportFormat;
|
|
14253
|
-
cacheRetentionDays: number;
|
|
14254
|
-
clearCacheOnClose: boolean;
|
|
14255
|
-
}
|
|
14256
|
-
interface ViewerAccessibilityOptions {
|
|
14257
|
-
showAccessibilityStatus: boolean;
|
|
14258
|
-
feedbackWithSound: boolean;
|
|
14259
|
-
soundScheme: FeedbackSoundScheme;
|
|
14260
|
-
showShortcutKeysInScreenTips: boolean;
|
|
14261
|
-
reducedMotion: boolean;
|
|
14262
|
-
}
|
|
14263
|
-
interface ViewerAdvancedOptions {
|
|
14264
|
-
autoSelectEntireWord: boolean;
|
|
14265
|
-
allowTextDragAndDrop: boolean;
|
|
14266
|
-
maximumUndoSteps: number;
|
|
14267
|
-
useSmartCutAndPaste: boolean;
|
|
14268
|
-
showPasteOptionsButton: boolean;
|
|
14269
|
-
imageDefaultResolution: ImageResolutionPreset;
|
|
14270
|
-
doNotCompressImages: boolean;
|
|
14271
|
-
chartPropertiesFollowDataPoint: boolean;
|
|
14272
|
-
recentPresentationsCount: number;
|
|
14273
|
-
showVerticalRuler: boolean;
|
|
14274
|
-
showGrid: boolean;
|
|
14275
|
-
snapToGrid: boolean;
|
|
14276
|
-
disableHardwareAcceleration: boolean;
|
|
14277
|
-
/**
|
|
14278
|
-
* Force every opt-in interactive 3D scene (SmartArt, bar/line/area/pie/
|
|
14279
|
-
* surface charts) to fall back to its flat 2D rendering, even when the
|
|
14280
|
-
* host has enabled that scene via its own `smartArt3D`/`*Chart3D` prop.
|
|
14281
|
-
* A host opting in says "this deck may want 3D"; this is the viewer
|
|
14282
|
-
* user's own override for when the WebGL scenes it renders are too much
|
|
14283
|
-
* for their machine. See `resolve3DRenderingFlags`.
|
|
14284
|
-
*/
|
|
14285
|
-
disable3DRendering: boolean;
|
|
14286
|
-
/**
|
|
14287
|
-
* `p:animEffect/@filter="pixelate"` defaults to snapping the element to
|
|
14288
|
-
* its end state (`cutIn`/`cutOut`), matching PowerPoint's own behaviour
|
|
14289
|
-
* (COM `CreateVideo` frame-diffing shows PowerPoint performs no animation
|
|
14290
|
-
* at all for this filter value). This turns on the blocky mosaic reveal
|
|
14291
|
-
* this renderer can build instead, for a viewer that would rather show
|
|
14292
|
-
* something animating than PowerPoint's own instant swap. See
|
|
14293
|
-
* `resolveFilterEffect` in `animation-filter-effects.ts` and
|
|
14294
|
-
* `docs/guide/visual-effects.md`.
|
|
14295
|
-
*/
|
|
14296
|
-
pixelateMosaicAnimation: boolean;
|
|
14297
|
-
openDocumentsView: OpenDocumentsView;
|
|
14298
|
-
slideShowShowMenuOnRightClick: boolean;
|
|
14299
|
-
slideShowShowPopupToolbar: boolean;
|
|
14300
|
-
slideShowPromptKeepInkAnnotations: boolean;
|
|
14301
|
-
slideShowEndWithBlackSlide: boolean;
|
|
14302
|
-
printInBackground: boolean;
|
|
14303
|
-
printHighQuality: boolean;
|
|
14304
|
-
printUseMostRecentSettings: boolean;
|
|
14305
|
-
printWhat: OptionsPrintWhat;
|
|
14306
|
-
printColorMode: OptionsPrintColorMode;
|
|
14307
|
-
printHiddenSlides: boolean;
|
|
14308
|
-
printScaleToFit: boolean;
|
|
14309
|
-
printFrameSlides: boolean;
|
|
14310
|
-
}
|
|
14311
|
-
interface ViewerRibbonOptions {
|
|
14312
|
-
/** Ribbon tabs unticked in Customize Ribbon. The File tab can never be hidden. */
|
|
14313
|
-
hiddenTabIds: ToolbarTabId[];
|
|
14314
|
-
}
|
|
14315
|
-
interface ViewerQuickAccessOptions {
|
|
14316
|
-
visible: boolean;
|
|
14317
|
-
position: QuickAccessPosition;
|
|
14318
|
-
showCommandLabels: boolean;
|
|
14319
|
-
/** Ordered ids from `QUICK_ACCESS_COMMAND_CATALOG`. */
|
|
14320
|
-
commandIds: string[];
|
|
14321
|
-
}
|
|
14322
|
-
interface ViewerTrustOptions {
|
|
14323
|
-
openInProtectedView: boolean;
|
|
14324
|
-
allowExternalContent: boolean;
|
|
14325
|
-
confirmExternalHyperlinks: boolean;
|
|
14326
|
-
}
|
|
14327
|
-
interface ViewerOptions {
|
|
14328
|
-
general: ViewerGeneralOptions;
|
|
14329
|
-
proofing: ViewerProofingOptions;
|
|
14330
|
-
save: ViewerSaveOptions;
|
|
14331
|
-
accessibility: ViewerAccessibilityOptions;
|
|
14332
|
-
advanced: ViewerAdvancedOptions;
|
|
14333
|
-
ribbon: ViewerRibbonOptions;
|
|
14334
|
-
quickAccess: ViewerQuickAccessOptions;
|
|
14335
|
-
trust: ViewerTrustOptions;
|
|
14336
|
-
}
|
|
14337
|
-
type ViewerOptionsGroupId = keyof ViewerOptions;
|
|
14338
|
-
type ViewerOptionPrimitive = boolean | number | string;
|
|
14339
|
-
//#endregion
|
|
14340
|
-
//#region src/export/handout-layout.d.ts
|
|
14341
|
-
/**
|
|
14342
|
-
* Pure handout layout calculations, shared by every binding's print path.
|
|
14343
|
-
*
|
|
14344
|
-
* Handles distributing slides across pages, computing grid dimensions, and
|
|
14345
|
-
* positioning cells within A4 page space. No DOM/framework dependency: callers
|
|
14346
|
-
* render the resulting rectangles however their view layer prefers.
|
|
14347
|
-
*/
|
|
14348
|
-
/** Supported slides-per-page values. */
|
|
14349
|
-
type HandoutSlidesPerPage = 1 | 2 | 3 | 4 | 6 | 9;
|
|
14350
|
-
//#endregion
|
|
14351
|
-
//#region src/export/print-document.d.ts
|
|
14352
|
-
/** What to print. */
|
|
14353
|
-
type PrintWhat = 'slides' | 'handouts' | 'notes' | 'outline';
|
|
14354
|
-
/** Page orientation for the printed output. */
|
|
14355
|
-
type PrintOrientation = 'portrait' | 'landscape';
|
|
14356
|
-
/** Colour mode for the printed output. */
|
|
14357
|
-
type PrintColorMode = 'color' | 'grayscale' | 'blackAndWhite';
|
|
14358
|
-
/** Slide range mode. */
|
|
14359
|
-
type PrintSlideRange = 'all' | 'current' | 'custom';
|
|
14360
|
-
/** Resolved print settings emitted on confirm. */
|
|
14361
|
-
interface PrintSettings {
|
|
14362
|
-
printWhat: PrintWhat;
|
|
14363
|
-
orientation: PrintOrientation;
|
|
14364
|
-
colorMode: PrintColorMode;
|
|
14365
|
-
frameSlides: boolean;
|
|
14366
|
-
slidesPerPage: HandoutSlidesPerPage;
|
|
14367
|
-
slideRange: PrintSlideRange;
|
|
14368
|
-
customRangeFrom: number;
|
|
14369
|
-
customRangeTo: number;
|
|
14370
|
-
/**
|
|
14371
|
-
* PowerPoint's Print > "Scale to Fit Paper". `true` (the default, and the
|
|
14372
|
-
* only behavior this printed output ever had before this field existed)
|
|
14373
|
-
* shrinks/grows each slide image to fill its page/cell while preserving
|
|
14374
|
-
* aspect ratio. `false` prints at the slide's native pixel size instead,
|
|
14375
|
-
* which may overflow or under-fill the page, exactly like PowerPoint with
|
|
14376
|
-
* the option off. Optional so existing `Partial<PrintSettings>` literals
|
|
14377
|
-
* across every binding keep compiling; `validatePrintSettings` defaults it
|
|
14378
|
-
* to `true`.
|
|
14379
|
-
*/
|
|
14380
|
-
scaleToFit?: boolean;
|
|
14381
|
-
}
|
|
14382
|
-
/** Every command the Edit Points right-click menu can offer. */
|
|
14383
|
-
type EditPointsCommandId = 'add-point' | 'delete-point' | 'delete-segment' | 'open-path' | 'close-path' | 'smooth-point' | 'straight-point' | 'corner-point' | 'straight-segment' | 'curved-segment' | 'exit';
|
|
14384
|
-
//#endregion
|
|
14385
|
-
//#region src/render/edit-points/freeform-tool-geometry.d.ts
|
|
14386
|
-
/** The two click-to-place drawing tools. */
|
|
14387
|
-
type FreeformToolKind = 'freeformShape' | 'curve';
|
|
14388
|
-
//#endregion
|
|
14389
|
-
//#region src/render/options/viewer-options-controls.d.ts
|
|
14390
|
-
/**
|
|
14391
|
-
* Control/section/tab descriptor types for the File > Options schema, plus
|
|
14392
|
-
* the terse constructors the tab-definition modules build panes with.
|
|
14393
|
-
*/
|
|
14394
|
-
type ViewerOptionsTabId = 'general' | 'proofing' | 'save' | 'language' | 'accessibility' | 'advanced' | 'ribbon' | 'quickAccess' | 'addIns' | 'trust';
|
|
14395
|
-
//#endregion
|
|
14396
13963
|
//#region src/render/customization/ribbon-control-catalog.d.ts
|
|
14397
13964
|
declare const RIBBON_CONTROL_CATALOG: {
|
|
14398
13965
|
readonly home: {
|
|
@@ -14897,151 +14464,716 @@ declare const RIBBON_CONTROL_CATALOG: {
|
|
|
14897
14464
|
};
|
|
14898
14465
|
};
|
|
14899
14466
|
//#endregion
|
|
14900
|
-
//#region src/render/customization/ribbon-control-ids.d.ts
|
|
14901
|
-
type Catalog = typeof RIBBON_CONTROL_CATALOG;
|
|
14902
|
-
/** `<tab>.<group>`, for example `home.font`. */
|
|
14903
|
-
type RibbonGroupId = { [T in keyof Catalog]: { [G in keyof Catalog[T]]: `${T & string}.${G & string}`; }[keyof Catalog[T]]; }[keyof Catalog];
|
|
14904
|
-
/** `<tab>.<group>.<control>`, for example `home.font.bold`. */
|
|
14905
|
-
type RibbonControlId = { [T in keyof Catalog]: { [G in keyof Catalog[T]]: Catalog[T][G] extends {
|
|
14906
|
-
controls: infer C;
|
|
14907
|
-
} ? `${T & string}.${G & string}.${keyof C & string}` : never; }[keyof Catalog[T]]; }[keyof Catalog];
|
|
14467
|
+
//#region src/render/customization/ribbon-control-ids.d.ts
|
|
14468
|
+
type Catalog = typeof RIBBON_CONTROL_CATALOG;
|
|
14469
|
+
/** `<tab>.<group>`, for example `home.font`. */
|
|
14470
|
+
type RibbonGroupId = { [T in keyof Catalog]: { [G in keyof Catalog[T]]: `${T & string}.${G & string}`; }[keyof Catalog[T]]; }[keyof Catalog];
|
|
14471
|
+
/** `<tab>.<group>.<control>`, for example `home.font.bold`. */
|
|
14472
|
+
type RibbonControlId = { [T in keyof Catalog]: { [G in keyof Catalog[T]]: Catalog[T][G] extends {
|
|
14473
|
+
controls: infer C;
|
|
14474
|
+
} ? `${T & string}.${G & string}.${keyof C & string}` : never; }[keyof Catalog[T]]; }[keyof Catalog];
|
|
14475
|
+
//#endregion
|
|
14476
|
+
//#region src/render/customization/customization-types.d.ts
|
|
14477
|
+
/** Keys of an options group whose value is a primitive (not an array). */
|
|
14478
|
+
type PrimitiveKeys<T> = { [K in keyof T]: T[K] extends ViewerOptionPrimitive ? K : never; }[keyof T] & string;
|
|
14479
|
+
/**
|
|
14480
|
+
* One File > Options setting, addressed as `<group>.<key>`, for example
|
|
14481
|
+
* `general.userName` or `advanced.showGrid`. The union is derived from the
|
|
14482
|
+
* `ViewerOptions` model itself, so a typo is a compile error.
|
|
14483
|
+
*/
|
|
14484
|
+
type OptionsSettingId = { [G in ViewerOptionsGroupId]: `${G}.${PrimitiveKeys<ViewerOptions[G]>}`; }[ViewerOptionsGroupId];
|
|
14485
|
+
/**
|
|
14486
|
+
* A File > Options page: the ten PowerPoint categories plus `ai`, the AI
|
|
14487
|
+
* assistant page a binding adds when the host configured an assistant.
|
|
14488
|
+
*/
|
|
14489
|
+
type OptionsPageId = ViewerOptionsTabId | 'ai';
|
|
14490
|
+
/**
|
|
14491
|
+
* One section of an Options page, addressed as `<page>.<section>`, for
|
|
14492
|
+
* example `general.personalize` or `advanced.print`. The full list is
|
|
14493
|
+
* `OPTIONS_SECTION_IDS` (derived from the schema at runtime).
|
|
14494
|
+
*/
|
|
14495
|
+
type OptionsSectionId = `${ViewerOptionsTabId}.${string}`;
|
|
14496
|
+
/** Values a host forces onto settings. */
|
|
14497
|
+
type OptionsSettingValues = Partial<Record<OptionsSettingId, ViewerOptionPrimitive>>;
|
|
14498
|
+
/** Ribbon and toolbar customisation. */
|
|
14499
|
+
interface RibbonCustomization {
|
|
14500
|
+
/**
|
|
14501
|
+
* Ribbon tabs to remove (the File tab included, unlike Customize Ribbon),
|
|
14502
|
+
* and contextual tabs (`shapeFormat`, `pictureFormat`, ...) that should
|
|
14503
|
+
* never appear.
|
|
14504
|
+
*/
|
|
14505
|
+
hiddenTabs?: readonly (ToolbarTabId | RibbonContextualTabId)[];
|
|
14506
|
+
/** Groups inside a tab to remove, as `<tab>.<group>` (`home.font`). */
|
|
14507
|
+
hiddenGroups?: readonly RibbonGroupId[];
|
|
14508
|
+
/**
|
|
14509
|
+
* Controls to remove: a top-level toolbar button / control cluster
|
|
14510
|
+
* (`share`, `zoom`, ...) or any ribbon control as
|
|
14511
|
+
* `<tab>.<group>.<control>` (`home.font.bold`).
|
|
14512
|
+
*/
|
|
14513
|
+
hiddenButtons?: readonly (ToolbarButtonId | RibbonControlId)[];
|
|
14514
|
+
}
|
|
14515
|
+
/** File > Options (the Settings dialog) customisation. */
|
|
14516
|
+
interface OptionsCustomization {
|
|
14517
|
+
/** Whole pages to remove from the dialog's category rail. */
|
|
14518
|
+
hiddenPages?: readonly OptionsPageId[];
|
|
14519
|
+
/** Sections (`<page>.<section>`) to remove from their page. */
|
|
14520
|
+
hiddenSections?: readonly OptionsSectionId[];
|
|
14521
|
+
/** Individual settings (`<group>.<key>`) to remove wherever they appear. */
|
|
14522
|
+
hiddenSettings?: readonly OptionsSettingId[];
|
|
14523
|
+
/**
|
|
14524
|
+
* Settings pinned to a fixed value. The value is forced into the options
|
|
14525
|
+
* store, user edits to it are ignored, and the control renders read-only.
|
|
14526
|
+
* Add the id to `hiddenSettings` too to lock it invisibly.
|
|
14527
|
+
*/
|
|
14528
|
+
locked?: OptionsSettingValues;
|
|
14529
|
+
/**
|
|
14530
|
+
* Host defaults: the value a setting starts at when the user has not saved
|
|
14531
|
+
* a choice of their own. "Reset" returns to these, not to the built-ins.
|
|
14532
|
+
*/
|
|
14533
|
+
defaults?: OptionsSettingValues;
|
|
14534
|
+
}
|
|
14535
|
+
/** File tab (backstage) customisation. */
|
|
14536
|
+
interface BackstageCustomization {
|
|
14537
|
+
/** Navigation entries (pages) to remove from the File tab. */
|
|
14538
|
+
hiddenPages?: readonly BackstagePage[];
|
|
14539
|
+
/** Action cards to remove from the pages that show them. */
|
|
14540
|
+
hiddenCards?: readonly BackstageCardId[];
|
|
14541
|
+
}
|
|
14542
|
+
/** Right-click menu customisation. */
|
|
14543
|
+
interface ContextMenuCustomization {
|
|
14544
|
+
/** Additional host commands, independent of the viewer's AI connection. */
|
|
14545
|
+
extraElementCommands?: readonly HostMenuCommand<HostElementMenuContext>[];
|
|
14546
|
+
extraCanvasCommands?: readonly HostMenuCommand<HostCanvasMenuContext>[];
|
|
14547
|
+
/** Entries to remove from the element (right-click on a shape) menu. */
|
|
14548
|
+
hiddenElementCommands?: readonly ContextMenuCommandId[];
|
|
14549
|
+
/** Entries to remove from the empty-canvas menu. */
|
|
14550
|
+
hiddenCanvasCommands?: readonly CanvasContextMenuCommandId[];
|
|
14551
|
+
/**
|
|
14552
|
+
* Entries to remove from the Edit Points menu (right-click a vertex or a
|
|
14553
|
+
* segment while editing a shape's points).
|
|
14554
|
+
*/
|
|
14555
|
+
hiddenEditPointsCommands?: readonly EditPointsCommandId[];
|
|
14556
|
+
/** Remove the element context menu entirely. */
|
|
14557
|
+
disableElementMenu?: boolean;
|
|
14558
|
+
/** Remove the empty-canvas context menu entirely. */
|
|
14559
|
+
disableCanvasMenu?: boolean;
|
|
14560
|
+
}
|
|
14561
|
+
/**
|
|
14562
|
+
* A shortcut chord in the form `Mod+Shift+D`: modifiers `Mod` (Ctrl on
|
|
14563
|
+
* Windows/Linux, Cmd on macOS), `Ctrl`, `Meta`, `Alt`, `Shift`, joined by `+`,
|
|
14564
|
+
* followed by a `KeyboardEvent.key` value (`D`, `Delete`, `ArrowLeft`, `F2`).
|
|
14565
|
+
*/
|
|
14566
|
+
type ShortcutChord = string;
|
|
14567
|
+
/** Editor keyboard-shortcut customisation. */
|
|
14568
|
+
interface KeyboardCustomization {
|
|
14569
|
+
/** Turn every editor shortcut off (the host owns the keyboard). */
|
|
14570
|
+
disableAll?: boolean;
|
|
14571
|
+
/** Editor commands whose shortcut is turned off. */
|
|
14572
|
+
disabled?: readonly EditorKeyActionName[];
|
|
14573
|
+
/**
|
|
14574
|
+
* Replacement chords per command. A remapped command no longer answers to
|
|
14575
|
+
* its built-in chord; it answers to the chord(s) given here instead.
|
|
14576
|
+
*/
|
|
14577
|
+
remap?: Partial<Record<EditorKeyActionName, ShortcutChord | readonly ShortcutChord[]>>;
|
|
14578
|
+
}
|
|
14579
|
+
/**
|
|
14580
|
+
* Chrome regions a host can remove. Each id maps onto one region in every
|
|
14581
|
+
* binding; see `VIEWER_PANEL_IDS` for the catalogue.
|
|
14582
|
+
*/
|
|
14583
|
+
type ViewerPanelId = 'statusBar' | 'slidesPane' | 'inspector' | 'notes' | 'quickAccessToolbar' | 'titleBar';
|
|
14584
|
+
/** Feature areas that can be switched off as a whole. */
|
|
14585
|
+
type ViewerFeatureId = 'ai' | 'collaboration' | 'comments' | 'presentMode' | 'editPoints';
|
|
14586
|
+
/**
|
|
14587
|
+
* The click-to-place drawing tools of Insert > Shapes > Lines: Freeform:
|
|
14588
|
+
* Shape and Curve.
|
|
14589
|
+
*/
|
|
14590
|
+
type ViewerDrawingToolId = FreeformToolKind;
|
|
14591
|
+
/** Dialogs (and the entry points that open them) a host can remove. */
|
|
14592
|
+
type ViewerDialogId = 'options' | 'share' | 'broadcast' | 'print' | 'export';
|
|
14593
|
+
/** Export formats offered by the File > Export page. */
|
|
14594
|
+
type ViewerExportFormatId = 'pdf' | 'png' | 'video' | 'gif' | 'json' | 'copyImage';
|
|
14595
|
+
/**
|
|
14596
|
+
* The whole customisation object. Every field is optional; omitted fields hide
|
|
14597
|
+
* nothing and lock nothing.
|
|
14598
|
+
*/
|
|
14599
|
+
interface ViewerCustomization {
|
|
14600
|
+
ribbon?: RibbonCustomization;
|
|
14601
|
+
options?: OptionsCustomization;
|
|
14602
|
+
backstage?: BackstageCustomization;
|
|
14603
|
+
contextMenu?: ContextMenuCustomization;
|
|
14604
|
+
keyboard?: KeyboardCustomization;
|
|
14605
|
+
/** Chrome regions to remove (`true` hides). */
|
|
14606
|
+
hiddenPanels?: readonly ViewerPanelId[];
|
|
14607
|
+
/** Feature areas to switch off (their buttons, menus, pages and panels). */
|
|
14608
|
+
disabledFeatures?: readonly ViewerFeatureId[];
|
|
14609
|
+
/** Dialogs to remove, along with every entry point that opens them. */
|
|
14610
|
+
hiddenDialogs?: readonly ViewerDialogId[];
|
|
14611
|
+
/** Export formats to remove from File > Export. */
|
|
14612
|
+
hiddenExportFormats?: readonly ViewerExportFormatId[];
|
|
14613
|
+
/** Drawing tools to remove from the Insert > Shapes gallery. */
|
|
14614
|
+
hiddenDrawingTools?: readonly ViewerDrawingToolId[];
|
|
14615
|
+
}
|
|
14616
|
+
//#endregion
|
|
14617
|
+
//#region src/render/customization/customization-catalog.d.ts
|
|
14618
|
+
declare const RIBBON_TAB_IDS: readonly ToolbarTabId[];
|
|
14619
|
+
declare const TOOLBAR_BUTTON_IDS: readonly ["share", "broadcast", "export", "undo", "redo", "record", "notes", "fullscreen", "zoom", "navigation", "mergeShapes", "crop"];
|
|
14620
|
+
declare const OPTIONS_PAGE_IDS: readonly OptionsPageId[];
|
|
14621
|
+
declare const OPTIONS_SECTION_IDS: readonly OptionsSectionId[];
|
|
14622
|
+
declare const OPTIONS_SETTING_IDS: readonly OptionsSettingId[];
|
|
14623
|
+
declare const BACKSTAGE_PAGE_IDS: readonly BackstagePage[];
|
|
14624
|
+
declare const BACKSTAGE_CARD_IDS: readonly BackstageCardId[];
|
|
14625
|
+
declare const ELEMENT_CONTEXT_MENU_COMMAND_IDS: readonly ["copy", "cut", "paste", "duplicate", "edit-text", "edit-points", "bring-forward", "send-backward", "bring-front", "send-back", "ai-ask", "ai-fix", "comment", "hyperlink", "table-insert-row-above", "table-insert-row-below", "table-delete-row", "table-insert-col-left", "table-insert-col-right", "table-delete-col", "table-merge-selected", "table-merge-right", "table-merge-down", "table-split", "group", "ungroup", "crop", "merge-union", "merge-combine", "merge-fragment", "merge-intersect", "merge-subtract", "save-as-picture", "edit-alt-text", "size-and-position", "format-shape", "delete"];
|
|
14626
|
+
declare const CANVAS_CONTEXT_MENU_COMMAND_IDS: readonly ["paste", "layout", "reset-slide", "format-background", "grid-and-guides", "ruler"];
|
|
14627
|
+
declare const EDITOR_SHORTCUT_ACTION_IDS: readonly ["undo", "redo", "copy", "cut", "paste", "duplicate", "delete", "selectAll", "group", "ungroup", "nudge", "prevSlide", "nextSlide", "escape", "find", "findReplace", "toggleShortcuts", "alignLeft", "alignCenter", "alignRight", "alignJustify", "increaseFontSize", "decreaseFontSize", "copyFormat", "pasteFormat", "newSlide", "hyperlink", "clearFormatting", "cycleSelectionNext", "cycleSelectionPrev", "pasteSpecial"];
|
|
14628
|
+
declare const VIEWER_PANEL_IDS: readonly ["statusBar", "slidesPane", "inspector", "notes", "quickAccessToolbar", "titleBar"];
|
|
14629
|
+
declare const VIEWER_FEATURE_IDS: readonly ["ai", "collaboration", "comments", "presentMode", "editPoints"];
|
|
14630
|
+
declare const VIEWER_DIALOG_IDS: readonly ["options", "share", "broadcast", "print", "export"];
|
|
14631
|
+
declare const VIEWER_EXPORT_FORMAT_IDS: readonly ["pdf", "png", "video", "gif", "json", "copyImage"];
|
|
14632
|
+
//#endregion
|
|
14633
|
+
//#region src/render/customization/customization-keymap.d.ts
|
|
14634
|
+
/** A parsed `Mod+Shift+D` chord. */
|
|
14635
|
+
interface ParsedShortcutChord {
|
|
14636
|
+
key: string;
|
|
14637
|
+
mod: boolean;
|
|
14638
|
+
ctrl: boolean;
|
|
14639
|
+
meta: boolean;
|
|
14640
|
+
alt: boolean;
|
|
14641
|
+
shift: boolean;
|
|
14642
|
+
}
|
|
14643
|
+
/** The normalised keyboard slice of a resolved customisation. */
|
|
14644
|
+
interface ResolvedKeyboardCustomization {
|
|
14645
|
+
disableAll: boolean;
|
|
14646
|
+
disabled: ReadonlySet<EditorKeyActionName>;
|
|
14647
|
+
remap: ReadonlyMap<EditorKeyActionName, readonly ParsedShortcutChord[]>;
|
|
14648
|
+
}
|
|
14649
|
+
//#endregion
|
|
14650
|
+
//#region src/render/customization/customization-resolve.d.ts
|
|
14651
|
+
/** The normalised, set-based view of a customisation. Treat as immutable. */
|
|
14652
|
+
interface ResolvedCustomization {
|
|
14653
|
+
hiddenActions: ReadonlySet<ToolbarActionId>;
|
|
14654
|
+
/** Contextual tabs (`shapeFormat`, ...) the host never wants shown. */
|
|
14655
|
+
hiddenContextualTabs: ReadonlySet<RibbonContextualTabId>;
|
|
14656
|
+
/** Catalogued ribbon groups to hide (`ribbon.hiddenGroups`). */
|
|
14657
|
+
hiddenRibbonGroups: ReadonlySet<RibbonGroupId>;
|
|
14658
|
+
/** Catalogued ribbon controls to hide (the `<tab>.<group>.<control>` part of `ribbon.hiddenButtons`). */
|
|
14659
|
+
hiddenRibbonControls: ReadonlySet<RibbonControlId>;
|
|
14660
|
+
hiddenOptionsPages: ReadonlySet<OptionsPageId>;
|
|
14661
|
+
hiddenOptionsSections: ReadonlySet<OptionsSectionId>;
|
|
14662
|
+
hiddenSettings: ReadonlySet<OptionsSettingId>;
|
|
14663
|
+
lockedSettings: OptionsSettingValues;
|
|
14664
|
+
defaultSettings: OptionsSettingValues;
|
|
14665
|
+
hiddenBackstagePages: ReadonlySet<BackstagePage>;
|
|
14666
|
+
hiddenBackstageCards: ReadonlySet<BackstageCardId>;
|
|
14667
|
+
hiddenElementCommands: ReadonlySet<ContextMenuCommandId>;
|
|
14668
|
+
extraElementCommands: NonNullable<ViewerCustomization['contextMenu']>['extraElementCommands'];
|
|
14669
|
+
extraCanvasCommands: NonNullable<ViewerCustomization['contextMenu']>['extraCanvasCommands'];
|
|
14670
|
+
hiddenCanvasCommands: ReadonlySet<CanvasContextMenuCommandId>;
|
|
14671
|
+
hiddenEditPointsCommands: ReadonlySet<EditPointsCommandId>;
|
|
14672
|
+
hiddenDrawingTools: ReadonlySet<ViewerDrawingToolId>;
|
|
14673
|
+
elementMenuEnabled: boolean;
|
|
14674
|
+
canvasMenuEnabled: boolean;
|
|
14675
|
+
hiddenPanels: ReadonlySet<ViewerPanelId>;
|
|
14676
|
+
disabledFeatures: ReadonlySet<ViewerFeatureId>;
|
|
14677
|
+
hiddenDialogs: ReadonlySet<ViewerDialogId>;
|
|
14678
|
+
keyboard: ResolvedKeyboardCustomization;
|
|
14679
|
+
}
|
|
14908
14680
|
//#endregion
|
|
14909
|
-
//#region src/render/customization/customization-
|
|
14910
|
-
/**
|
|
14911
|
-
|
|
14681
|
+
//#region src/render/customization/customization-controller.d.ts
|
|
14682
|
+
/** The imperative methods every binding's component handle exposes. */
|
|
14683
|
+
interface ViewerCustomizationApi {
|
|
14684
|
+
/** The current customisation object (a snapshot; do not mutate). */
|
|
14685
|
+
getCustomization(): ViewerCustomization;
|
|
14686
|
+
/** Replace the whole customisation. */
|
|
14687
|
+
setCustomization(next: ViewerCustomization): void;
|
|
14688
|
+
/** Merge a partial customisation (see `mergeCustomization`). */
|
|
14689
|
+
updateCustomization(patch: ViewerCustomization): void;
|
|
14690
|
+
/** Drop every customisation, back to the stock UI. */
|
|
14691
|
+
resetCustomization(): void;
|
|
14692
|
+
/** Hide a fixed tab, or stop a contextual tab (`shapeFormat`, ...) from appearing. */
|
|
14693
|
+
hideRibbonTab(tab: ToolbarTabId | RibbonContextualTabId): void;
|
|
14694
|
+
showRibbonTab(tab: ToolbarTabId | RibbonContextualTabId): void;
|
|
14695
|
+
/** Hide a group inside a tab (`home.font`). */
|
|
14696
|
+
hideRibbonGroup(group: RibbonGroupId): void;
|
|
14697
|
+
showRibbonGroup(group: RibbonGroupId): void;
|
|
14698
|
+
/** Hide a top-level toolbar button or any ribbon control (`home.font.bold`). */
|
|
14699
|
+
hideToolbarButton(button: ToolbarButtonId | RibbonControlId): void;
|
|
14700
|
+
showToolbarButton(button: ToolbarButtonId | RibbonControlId): void;
|
|
14701
|
+
/** Alias of `hideToolbarButton` for a ribbon control id. */
|
|
14702
|
+
hideRibbonControl(control: RibbonControlId): void;
|
|
14703
|
+
showRibbonControl(control: RibbonControlId): void;
|
|
14704
|
+
hideOptionsPage(page: OptionsPageId): void;
|
|
14705
|
+
showOptionsPage(page: OptionsPageId): void;
|
|
14706
|
+
hideOptionsSection(section: OptionsSectionId): void;
|
|
14707
|
+
showOptionsSection(section: OptionsSectionId): void;
|
|
14708
|
+
hideSetting(setting: OptionsSettingId): void;
|
|
14709
|
+
showSetting(setting: OptionsSettingId): void;
|
|
14710
|
+
/** Pin a setting to `value`; `hidden` also removes it from the dialog. */
|
|
14711
|
+
lockSetting(setting: OptionsSettingId, value: ViewerOptionPrimitive, hidden?: boolean): void;
|
|
14712
|
+
unlockSetting(setting: OptionsSettingId): void;
|
|
14713
|
+
/** Set (or with `undefined`, clear) the host default for a setting. */
|
|
14714
|
+
setSettingDefault(setting: OptionsSettingId, value: ViewerOptionPrimitive | undefined): void;
|
|
14715
|
+
hideBackstagePage(page: BackstagePage): void;
|
|
14716
|
+
showBackstagePage(page: BackstagePage): void;
|
|
14717
|
+
hideBackstageCard(card: BackstageCardId): void;
|
|
14718
|
+
showBackstageCard(card: BackstageCardId): void;
|
|
14719
|
+
hideContextMenuCommand(command: ContextMenuCommandId): void;
|
|
14720
|
+
showContextMenuCommand(command: ContextMenuCommandId): void;
|
|
14721
|
+
hideCanvasContextMenuCommand(command: CanvasContextMenuCommandId): void;
|
|
14722
|
+
showCanvasContextMenuCommand(command: CanvasContextMenuCommandId): void;
|
|
14723
|
+
disableShortcut(action: EditorKeyActionName): void;
|
|
14724
|
+
enableShortcut(action: EditorKeyActionName): void;
|
|
14725
|
+
/** Move a command onto new chord(s); `undefined` restores the built-in chord. */
|
|
14726
|
+
remapShortcut(action: EditorKeyActionName, chords: ShortcutChord | readonly ShortcutChord[] | undefined): void;
|
|
14727
|
+
setPanelVisible(panel: ViewerPanelId, visible: boolean): void;
|
|
14728
|
+
setFeatureEnabled(feature: ViewerFeatureId, enabled: boolean): void;
|
|
14729
|
+
setDialogAvailable(dialog: ViewerDialogId, available: boolean): void;
|
|
14730
|
+
}
|
|
14731
|
+
interface ViewerCustomizationController {
|
|
14732
|
+
/** The helper methods, ready to spread onto a component handle. */
|
|
14733
|
+
readonly api: ViewerCustomizationApi;
|
|
14734
|
+
/** The normalised view the render sites read. Stable until the next change. */
|
|
14735
|
+
getResolved(): ResolvedCustomization;
|
|
14736
|
+
/** Subscribe to every change; returns the unsubscribe function. */
|
|
14737
|
+
subscribe(listener: () => void): () => void;
|
|
14738
|
+
}
|
|
14739
|
+
//#endregion
|
|
14740
|
+
//#region src/render/p14-transition-keyframes.d.ts
|
|
14741
|
+
/** Part 1: conveyor / doors / ferris / flash / flythrough / gallery / glitter / honeycomb / pan. */
|
|
14742
|
+
declare const P14_TRANSITION_KEYFRAMES = "\n/* ── Conveyor (translate X with staggered timing) ──────────────────── */\n@keyframes pptx-tr-conveyor-in-from-right {\n\tfrom { transform: translateX(100%) rotateY(-30deg); }\n\t60% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-left {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(-100%) rotateY(30deg); }\n}\n@keyframes pptx-tr-conveyor-in-from-left {\n\tfrom { transform: translateX(-100%) rotateY(30deg); }\n\t60% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-right {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(100%) rotateY(-30deg); }\n}\n\n/* ── Doors (clip-path from center split) ──────────────────────────────\n MEASURED via COM CreateVideo: PowerPoint's `dir=\"horz\"` names a\n HORIZONTAL split line (two panels stacked top/bottom, opening upward and\n downward), and `dir=\"vert\"` a VERTICAL split line (panels side by side,\n opening left and right) - the opposite of what \"clips left/right\" vs\n \"clips top/bottom\" would suggest at a glance. Keep the clip-path bodies\n matched to the MEASURED direction, not the intuitive one. */\n@keyframes pptx-tr-doors-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-doors-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n\n/* ── Ferris (rotate elements around center) ───────────────────────── */\n@keyframes pptx-tr-ferris-in-from-right {\n\tfrom { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-left {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n}\n@keyframes pptx-tr-ferris-in-from-left {\n\tfrom { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-right {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n}\n\n/* ── Flash (bright flash opacity burst) ──────────────────────────── */\n@keyframes pptx-tr-flash-white {\n\t0% { opacity: 1; }\n\t30% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n@keyframes pptx-tr-flash-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t70% { opacity: 1; }\n\t100% { opacity: 1; }\n}\n\n/* ── Flythrough (scale + translate Z-axis feel) ──────────────────── */\n@keyframes pptx-tr-flythrough-in {\n\tfrom { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n}\n@keyframes pptx-tr-flythrough-reverse-in {\n\tfrom { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-reverse-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n}\n\n/* ── Gallery (translate with perspective) ─────────────────────────── */\n@keyframes pptx-tr-gallery-in-from-right {\n\tfrom { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-left {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n}\n@keyframes pptx-tr-gallery-in-from-left {\n\tfrom { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-right {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n}\n\n/* ── Glitter (particle dissolve effect) ──────────────────────────── */\n@keyframes pptx-tr-glitter-in {\n\tfrom { opacity: 0; filter: brightness(1.5) contrast(1.3) blur(2px); }\n\t60% { opacity: 0.7; filter: brightness(1.2) contrast(1.1) blur(1px); }\n\tto { opacity: 1; filter: brightness(1) contrast(1) blur(0); }\n}\n\n/* ── Honeycomb (hexagonal reveal) ────────────────────────────────── */\n@keyframes pptx-tr-honeycomb-in {\n\tfrom {\n\t\tclip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%);\n\t\topacity: 0;\n\t}\n\tto {\n\t\tclip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);\n\t\topacity: 1;\n\t}\n}\n@keyframes pptx-tr-honeycomb-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Pan (large-scale translate) ─────────────────────────────────── */\n@keyframes pptx-tr-pan-from-right {\n\tfrom { transform: translateX(100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-pan-from-left {\n\tfrom { transform: translateX(-100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-pan-from-bottom {\n\tfrom { transform: translateY(100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-top {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(-100%); }\n}\n@keyframes pptx-tr-pan-from-top {\n\tfrom { transform: translateY(-100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-bottom {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(100%); }\n}\n";
|
|
14743
|
+
/** Part 2: prism / reveal / ripple / shred / switch / vortex / warp / wheelReverse / window. */
|
|
14744
|
+
declare const P14_TRANSITION_KEYFRAMES_2 = "\n/* ── Prism: see `slide-transition-prism` (split out to keep this module\n under the per-file LOC budget) ─────────────────────────────────────── */\n\n@keyframes pptx-tr-prism-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-bottom {\n\tfrom { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-top {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-top {\n\tfrom { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-bottom {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n}\n\n/* ── Reveal (slide away reveal) ──────────────────────────────────── */\n@keyframes pptx-tr-reveal-out-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-reveal-out-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n/* MEASURED: the incoming layer stays hidden for roughly the first half of the\n transition (a real black/background gap shows through), then fades in -\n not a flat 0.5->1 fade running the whole duration. */\n@keyframes pptx-tr-reveal-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n\n/* ── Ripple (expanding ring clip-path) ───────────────────────────── */\n@keyframes pptx-tr-ripple-in {\n\tfrom { clip-path: circle(0% at 50% 50%); opacity: 0.5; }\n\t30% { clip-path: circle(20% at 50% 50%); opacity: 0.7; }\n\t60% { clip-path: circle(50% at 50% 50%); opacity: 0.9; }\n\tto { clip-path: circle(75% at 50% 50%); opacity: 1; }\n}\n\n/* ── Shred (fragmented clip-path pieces) ─────────────────────────── */\n@keyframes pptx-tr-shred-strips-in {\n\tfrom { clip-path: inset(0 100% 0 0); opacity: 0; }\n\t30% { clip-path: inset(0 60% 0 0); opacity: 0.5; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-rectangles-in {\n\tfrom { clip-path: inset(50%); opacity: 0; }\n\t40% { clip-path: inset(20%); opacity: 0.6; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Switch (flip/rotate swap) ───────────────────────────────────── */\n@keyframes pptx-tr-switch-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n}\n@keyframes pptx-tr-switch-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n}\n\n/* ── Vortex (rotate + scale spiral) ──────────────────────────────── */\n@keyframes pptx-tr-vortex-in {\n\tfrom { transform: rotate(720deg) scale(0); opacity: 0; }\n\tto { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-vortex-out {\n\tfrom { transform: rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: rotate(-720deg) scale(0); opacity: 0; }\n}\n\n/* ── Warp: see `slide-transition-warp` (COM-measured radial zoom blur,\n split out to keep this module under the per-file LOC budget) ────────── */\n\n@keyframes pptx-tr-warp-in {\n\t0% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n}\n@keyframes pptx-tr-warp-reverse-in {\n\t0% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-reverse-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n}\n\n\n/* ── WheelReverse (reverse wheel rotation) ───────────────────────── */\n@keyframes pptx-tr-wheel-reverse-in {\n\tfrom { clip-path: circle(0% at 50% 50%); transform: rotate(180deg); }\n\tto { clip-path: circle(75% at 50% 50%); transform: rotate(0deg); }\n}\n\n/* ── Window (scale from center with border) ──────────────────────────\n Same measured horz/vert meaning as Doors above (horz = horizontal split\n line opening vertically; vert = vertical split line opening horizontally). */\n@keyframes pptx-tr-window-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-out {\n\tfrom { opacity: 1; transform: scale(1); }\n\tto { opacity: 0; transform: scale(0.9); }\n}\n";
|
|
14745
|
+
/** Both p14 keyframe blocks concatenated, for single `<style>` injection. */
|
|
14746
|
+
declare const P14_TRANSITION_KEYFRAMES_ALL = "\n/* ── Conveyor (translate X with staggered timing) ──────────────────── */\n@keyframes pptx-tr-conveyor-in-from-right {\n\tfrom { transform: translateX(100%) rotateY(-30deg); }\n\t60% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-left {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(-100%) rotateY(30deg); }\n}\n@keyframes pptx-tr-conveyor-in-from-left {\n\tfrom { transform: translateX(-100%) rotateY(30deg); }\n\t60% { transform: translateX(-20%) rotateY(10deg); }\n\tto { transform: translateX(0) rotateY(0deg); }\n}\n@keyframes pptx-tr-conveyor-out-to-right {\n\tfrom { transform: translateX(0) rotateY(0deg); }\n\t40% { transform: translateX(20%) rotateY(-10deg); }\n\tto { transform: translateX(100%) rotateY(-30deg); }\n}\n\n/* ── Doors (clip-path from center split) ──────────────────────────────\n MEASURED via COM CreateVideo: PowerPoint's `dir=\"horz\"` names a\n HORIZONTAL split line (two panels stacked top/bottom, opening upward and\n downward), and `dir=\"vert\"` a VERTICAL split line (panels side by side,\n opening left and right) - the opposite of what \"clips left/right\" vs\n \"clips top/bottom\" would suggest at a glance. Keep the clip-path bodies\n matched to the MEASURED direction, not the intuitive one. */\n@keyframes pptx-tr-doors-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-doors-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n\n/* ── Ferris (rotate elements around center) ───────────────────────── */\n@keyframes pptx-tr-ferris-in-from-right {\n\tfrom { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-left {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n}\n@keyframes pptx-tr-ferris-in-from-left {\n\tfrom { transform: translateX(-80%) rotate(-45deg) scale(0.6); opacity: 0; }\n\tto { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-ferris-out-to-right {\n\tfrom { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: translateX(80%) rotate(45deg) scale(0.6); opacity: 0; }\n}\n\n/* ── Flash (bright flash opacity burst) ──────────────────────────── */\n@keyframes pptx-tr-flash-white {\n\t0% { opacity: 1; }\n\t30% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n@keyframes pptx-tr-flash-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t70% { opacity: 1; }\n\t100% { opacity: 1; }\n}\n\n/* ── Flythrough (scale + translate Z-axis feel) ──────────────────── */\n@keyframes pptx-tr-flythrough-in {\n\tfrom { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n}\n@keyframes pptx-tr-flythrough-reverse-in {\n\tfrom { transform: scale(0.1) translateZ(-200px); opacity: 0; filter: blur(8px); }\n\tto { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n}\n@keyframes pptx-tr-flythrough-reverse-out {\n\tfrom { transform: scale(1) translateZ(0); opacity: 1; filter: blur(0); }\n\tto { transform: scale(4) translateZ(200px); opacity: 0; filter: blur(8px); }\n}\n\n/* ── Gallery (translate with perspective) ─────────────────────────── */\n@keyframes pptx-tr-gallery-in-from-right {\n\tfrom { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-left {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n}\n@keyframes pptx-tr-gallery-in-from-left {\n\tfrom { transform: perspective(800px) translateX(-100%) rotateY(45deg); opacity: 0.5; }\n\tto { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-gallery-out-to-right {\n\tfrom { transform: perspective(800px) translateX(0) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) translateX(100%) rotateY(-45deg); opacity: 0.5; }\n}\n\n/* ── Glitter (particle dissolve effect) ──────────────────────────── */\n@keyframes pptx-tr-glitter-in {\n\tfrom { opacity: 0; filter: brightness(1.5) contrast(1.3) blur(2px); }\n\t60% { opacity: 0.7; filter: brightness(1.2) contrast(1.1) blur(1px); }\n\tto { opacity: 1; filter: brightness(1) contrast(1) blur(0); }\n}\n\n/* ── Honeycomb (hexagonal reveal) ────────────────────────────────── */\n@keyframes pptx-tr-honeycomb-in {\n\tfrom {\n\t\tclip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%, 50% 50%);\n\t\topacity: 0;\n\t}\n\tto {\n\t\tclip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);\n\t\topacity: 1;\n\t}\n}\n@keyframes pptx-tr-honeycomb-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Pan (large-scale translate) ─────────────────────────────────── */\n@keyframes pptx-tr-pan-from-right {\n\tfrom { transform: translateX(100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n@keyframes pptx-tr-pan-from-left {\n\tfrom { transform: translateX(-100%); }\n\tto { transform: translateX(0); }\n}\n@keyframes pptx-tr-pan-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-pan-from-bottom {\n\tfrom { transform: translateY(100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-top {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(-100%); }\n}\n@keyframes pptx-tr-pan-from-top {\n\tfrom { transform: translateY(-100%); }\n\tto { transform: translateY(0); }\n}\n@keyframes pptx-tr-pan-to-bottom {\n\tfrom { transform: translateY(0); }\n\tto { transform: translateY(100%); }\n}\n\n\n/* ── Prism: see `slide-transition-prism` (split out to keep this module\n under the per-file LOC budget) ─────────────────────────────────────── */\n\n@keyframes pptx-tr-prism-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(90deg) translateX(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg) translateX(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-90deg) translateX(50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-bottom {\n\tfrom { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-top {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n}\n@keyframes pptx-tr-prism-in-from-top {\n\tfrom { transform: perspective(800px) rotateX(-90deg) translateY(-50%); opacity: 0; }\n\tto { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n}\n@keyframes pptx-tr-prism-out-to-bottom {\n\tfrom { transform: perspective(800px) rotateX(0deg) translateY(0); opacity: 1; }\n\tto { transform: perspective(800px) rotateX(90deg) translateY(50%); opacity: 0; }\n}\n\n/* ── Reveal (slide away reveal) ──────────────────────────────────── */\n@keyframes pptx-tr-reveal-out-to-right {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(100%); }\n}\n@keyframes pptx-tr-reveal-out-to-left {\n\tfrom { transform: translateX(0); }\n\tto { transform: translateX(-100%); }\n}\n/* MEASURED: the incoming layer stays hidden for roughly the first half of the\n transition (a real black/background gap shows through), then fades in -\n not a flat 0.5->1 fade running the whole duration. */\n@keyframes pptx-tr-reveal-in {\n\t0% { opacity: 0; }\n\t50% { opacity: 0; }\n\t100% { opacity: 1; }\n}\n\n/* ── Ripple (expanding ring clip-path) ───────────────────────────── */\n@keyframes pptx-tr-ripple-in {\n\tfrom { clip-path: circle(0% at 50% 50%); opacity: 0.5; }\n\t30% { clip-path: circle(20% at 50% 50%); opacity: 0.7; }\n\t60% { clip-path: circle(50% at 50% 50%); opacity: 0.9; }\n\tto { clip-path: circle(75% at 50% 50%); opacity: 1; }\n}\n\n/* ── Shred (fragmented clip-path pieces) ─────────────────────────── */\n@keyframes pptx-tr-shred-strips-in {\n\tfrom { clip-path: inset(0 100% 0 0); opacity: 0; }\n\t30% { clip-path: inset(0 60% 0 0); opacity: 0.5; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-rectangles-in {\n\tfrom { clip-path: inset(50%); opacity: 0; }\n\t40% { clip-path: inset(20%); opacity: 0.6; }\n\tto { clip-path: inset(0); opacity: 1; }\n}\n@keyframes pptx-tr-shred-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; filter: blur(2px); }\n}\n\n/* ── Switch (flip/rotate swap) ───────────────────────────────────── */\n@keyframes pptx-tr-switch-in-from-right {\n\tfrom { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-left {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n}\n@keyframes pptx-tr-switch-in-from-left {\n\tfrom { transform: perspective(800px) rotateY(180deg); opacity: 0; }\n\tto { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n}\n@keyframes pptx-tr-switch-out-to-right {\n\tfrom { transform: perspective(800px) rotateY(0deg); opacity: 1; }\n\tto { transform: perspective(800px) rotateY(-180deg); opacity: 0; }\n}\n\n/* ── Vortex (rotate + scale spiral) ──────────────────────────────── */\n@keyframes pptx-tr-vortex-in {\n\tfrom { transform: rotate(720deg) scale(0); opacity: 0; }\n\tto { transform: rotate(0deg) scale(1); opacity: 1; }\n}\n@keyframes pptx-tr-vortex-out {\n\tfrom { transform: rotate(0deg) scale(1); opacity: 1; }\n\tto { transform: rotate(-720deg) scale(0); opacity: 0; }\n}\n\n/* ── Warp: see `slide-transition-warp` (COM-measured radial zoom blur,\n split out to keep this module under the per-file LOC budget) ────────── */\n\n@keyframes pptx-tr-warp-in {\n\t0% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(0.85); opacity: 0.7; filter: blur(3px) brightness(1.3); }\n\t100% { transform: scale(0.25); opacity: 0; filter: blur(10px) brightness(1.8); }\n}\n@keyframes pptx-tr-warp-reverse-in {\n\t0% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n}\n@keyframes pptx-tr-warp-reverse-out {\n\t0% { transform: scale(1); opacity: 1; filter: blur(0) brightness(1); }\n\t50% { transform: scale(1.7); opacity: 0.7; filter: blur(6px) brightness(1.5); }\n\t100% { transform: scale(3.2); opacity: 0; filter: blur(14px) brightness(2.2); }\n}\n\n\n/* ── WheelReverse (reverse wheel rotation) ───────────────────────── */\n@keyframes pptx-tr-wheel-reverse-in {\n\tfrom { clip-path: circle(0% at 50% 50%); transform: rotate(180deg); }\n\tto { clip-path: circle(75% at 50% 50%); transform: rotate(0deg); }\n}\n\n/* ── Window (scale from center with border) ──────────────────────────\n Same measured horz/vert meaning as Doors above (horz = horizontal split\n line opening vertically; vert = vertical split line opening horizontally). */\n@keyframes pptx-tr-window-horz {\n\tfrom { clip-path: inset(50% 0); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-vert {\n\tfrom { clip-path: inset(0 50%); }\n\tto { clip-path: inset(0 0); }\n}\n@keyframes pptx-tr-window-out {\n\tfrom { opacity: 1; transform: scale(1); }\n\tto { opacity: 0; transform: scale(0.9); }\n}\n\n\n@keyframes pptx-tr-vortex-in-left { from { transform: translateX(-40%) rotate(720deg) scale(0); opacity: 0; } to { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-left { from { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateX(-40%) rotate(-720deg) scale(0); opacity: 0; } }\n@keyframes pptx-tr-vortex-in-right { from { transform: translateX(40%) rotate(-720deg) scale(0); opacity: 0; } to { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-right { from { transform: translateX(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateX(40%) rotate(720deg) scale(0); opacity: 0; } }\n@keyframes pptx-tr-vortex-in-up { from { transform: translateY(-40%) rotate(720deg) scale(0); opacity: 0; } to { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-up { from { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateY(-40%) rotate(-720deg) scale(0); opacity: 0; } }\n@keyframes pptx-tr-vortex-in-down { from { transform: translateY(40%) rotate(-720deg) scale(0); opacity: 0; } to { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } }\n@keyframes pptx-tr-vortex-out-down { from { transform: translateY(0) rotate(0deg) scale(1); opacity: 1; } to { transform: translateY(40%) rotate(720deg) scale(0); opacity: 0; } }\n\n\n@keyframes pptx-tr-ripple-in-lu { from { clip-path: circle(0% at 0% 0%); opacity: 0.5; } 30% { clip-path: circle(20% at 0% 0%); opacity: 0.7; } 60% { clip-path: circle(55% at 0% 0%); opacity: 0.9; } to { clip-path: circle(150% at 0% 0%); opacity: 1; } }\n@keyframes pptx-tr-ripple-in-ru { from { clip-path: circle(0% at 100% 0%); opacity: 0.5; } 30% { clip-path: circle(20% at 100% 0%); opacity: 0.7; } 60% { clip-path: circle(55% at 100% 0%); opacity: 0.9; } to { clip-path: circle(150% at 100% 0%); opacity: 1; } }\n@keyframes pptx-tr-ripple-in-ld { from { clip-path: circle(0% at 0% 100%); opacity: 0.5; } 30% { clip-path: circle(20% at 0% 100%); opacity: 0.7; } 60% { clip-path: circle(55% at 0% 100%); opacity: 0.9; } to { clip-path: circle(150% at 0% 100%); opacity: 1; } }\n@keyframes pptx-tr-ripple-in-rd { from { clip-path: circle(0% at 100% 100%); opacity: 0.5; } 30% { clip-path: circle(20% at 100% 100%); opacity: 0.7; } 60% { clip-path: circle(55% at 100% 100%); opacity: 0.9; } to { clip-path: circle(150% at 100% 100%); opacity: 1; } }\n\n\n@keyframes pptx-tr-glitter-diamond-in-l { from { opacity: 0; transform: translateX(-6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateX(-2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-diamond-in-r { from { opacity: 0; transform: translateX(6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateX(2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-diamond-in-u { from { opacity: 0; transform: translateY(-6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateY(-2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-diamond-in-d { from { opacity: 0; transform: translateY(6%); filter: brightness(1.5) contrast(1.3) blur(2px); } 60% { opacity: 0.7; transform: translateY(2%); filter: brightness(1.2) contrast(1.1) blur(1px); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0); } }\n@keyframes pptx-tr-glitter-hexagon-in-l { from { opacity: 0; transform: translateX(-6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateX(-2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n@keyframes pptx-tr-glitter-hexagon-in-r { from { opacity: 0; transform: translateX(6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateX(2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateX(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n@keyframes pptx-tr-glitter-hexagon-in-u { from { opacity: 0; transform: translateY(-6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateY(-2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n@keyframes pptx-tr-glitter-hexagon-in-d { from { opacity: 0; transform: translateY(6%); filter: brightness(1.5) contrast(1.3) blur(2px) hue-rotate(20deg); } 60% { opacity: 0.7; transform: translateY(2%); filter: brightness(1.2) contrast(1.1) blur(1px) hue-rotate(8deg); } to { opacity: 1; transform: translateY(0); filter: brightness(1) contrast(1) blur(0) hue-rotate(0deg); } }\n";
|
|
14747
|
+
//#endregion
|
|
14748
|
+
//#region src/render/p14-transition-css.d.ts
|
|
14912
14749
|
/**
|
|
14913
|
-
*
|
|
14914
|
-
* `
|
|
14915
|
-
|
|
14750
|
+
* Return CSS animation descriptors for p14 transition types. Returns
|
|
14751
|
+
* `undefined` when the type is not a p14 transition.
|
|
14752
|
+
*/
|
|
14753
|
+
declare function getP14TransitionAnimations(type: PptxTransitionType, durationMs: number, direction: string | undefined, orient?: string | undefined, pattern?: string | undefined): SlideTransitionAnimations | undefined;
|
|
14754
|
+
/**
|
|
14755
|
+
* A font supplied by the host application. The package never ships fonts:
|
|
14756
|
+
* applications provide a licensed URL, data URL, or blob URL for their users.
|
|
14757
|
+
*/
|
|
14758
|
+
interface ViewerFontSource {
|
|
14759
|
+
family: string;
|
|
14760
|
+
src: string;
|
|
14761
|
+
format?: 'truetype' | 'opentype' | 'woff' | 'woff2';
|
|
14762
|
+
weight?: string | number;
|
|
14763
|
+
style?: 'normal' | 'italic';
|
|
14764
|
+
}
|
|
14765
|
+
interface SlideSizeEmu {
|
|
14766
|
+
widthEmu: number;
|
|
14767
|
+
heightEmu: number;
|
|
14768
|
+
/** ST_SlideSizeType token, or `''` for a size with no preset. */
|
|
14769
|
+
type: string;
|
|
14770
|
+
}
|
|
14771
|
+
//#endregion
|
|
14772
|
+
//#region src/render/presentation-file-kinds.d.ts
|
|
14773
|
+
/**
|
|
14774
|
+
* presentation-file-kinds: the one place that answers "can the viewer open
|
|
14775
|
+
* this file?" and "what should the saved copy be called?".
|
|
14776
|
+
*
|
|
14777
|
+
* ## Why this is a shared decision and not five allow-lists
|
|
14778
|
+
*
|
|
14779
|
+
* The loader reads more formats than any single UI advertises. Legacy binary
|
|
14780
|
+
* `.ppt` (PowerPoint 97-2003) is the sharp example: `PptxHandler.load()` has
|
|
14781
|
+
* detected the OLE compound-file container and converted the binary deck
|
|
14782
|
+
* through the regular pptx pipeline for some time, but the product kept saying
|
|
14783
|
+
* it was unsupported, and a picker that filters the extension out makes a
|
|
14784
|
+
* working loader unreachable in practice. Whenever the loader learns a format,
|
|
14785
|
+
* exactly one list has to change.
|
|
14786
|
+
*
|
|
14787
|
+
* ## Read many, write several
|
|
14788
|
+
*
|
|
14789
|
+
* Input is a superset of output. We READ `.pptx`, `.ppsx`, `.pptm`, `.potx`,
|
|
14790
|
+
* legacy binary `.ppt` and portable `pptx-viewer-json`; we WRITE the OpenXML
|
|
14791
|
+
* family plus legacy binary `.ppt` (via `packages/core/src/core/ppt/writer/`,
|
|
14792
|
+
* a real MS-PPT/OLE2 encoder, not a stub). `savedPresentationFileName`
|
|
14793
|
+
* REPLACES the source extension with the extension of the format actually
|
|
14794
|
+
* being written rather than keeping the source's: a deck opened as
|
|
14795
|
+
* `report.pptx` and saved back as `.ppt` (or vice versa) must have its name
|
|
14796
|
+
* agree with its bytes, which is the kind of mismatch PowerPoint itself
|
|
14797
|
+
* refuses to open.
|
|
14798
|
+
*
|
|
14799
|
+
* This module deliberately imports nothing, so any layer (render, export, a
|
|
14800
|
+
* binding, a host app) can depend on it without risking an import cycle.
|
|
14801
|
+
*
|
|
14802
|
+
* @module render/presentation-file-kinds
|
|
14803
|
+
*/
|
|
14804
|
+
/**
|
|
14805
|
+
* Extensions the built-in file picker offers, in the order it offers them.
|
|
14806
|
+
*
|
|
14807
|
+
* `.ppt` is in the list because the loader genuinely handles it, not as a
|
|
14808
|
+
* courtesy: see `packages/core/src/core/ppt/` and the `ppt-import` integration
|
|
14809
|
+
* suite, which asserts a `.ppt` loads to the same model as the `.pptx` it was
|
|
14810
|
+
* exported from.
|
|
14811
|
+
*/
|
|
14812
|
+
declare const PRESENTATION_OPEN_EXTENSIONS: readonly ['.pptx', '.ppsx', '.pptm', '.potx', '.ppt', '.json'];
|
|
14813
|
+
/** Comma-separated `accept` attribute for a presentation file input. */
|
|
14814
|
+
declare const PPTX_OPEN_ACCEPT: string;
|
|
14815
|
+
/**
|
|
14816
|
+
* True when a picked / dropped file's name looks like something the loader can
|
|
14817
|
+
* open. Use this instead of a hand-rolled `endsWith` chain: a drop handler that
|
|
14818
|
+
* disagrees with the picker's `accept` list is a format that is supported by
|
|
14819
|
+
* mouse but not by drag, which is how `.ppt` stayed invisible.
|
|
14820
|
+
*
|
|
14821
|
+
* Extension-only, by design. The real answer comes from the container sniff in
|
|
14822
|
+
* `PptxHandler.load()`; this is only the cheap pre-filter a drop target needs
|
|
14823
|
+
* before it hands bytes to the loader.
|
|
14824
|
+
*/
|
|
14825
|
+
declare function isSupportedPresentationFile(name: string | null | undefined): boolean;
|
|
14826
|
+
/**
|
|
14827
|
+
* True for the binary PowerPoint 97-2003 family. `.ppt` itself is now also a
|
|
14828
|
+
* SAVE target (see {@link SavedPresentationFormat}); `.pps`/`.pot` (97-2003
|
|
14829
|
+
* show/template) remain read-only siblings sharing the same record format.
|
|
14830
|
+
*/
|
|
14831
|
+
declare function isLegacyBinaryPresentation(name: string | null | undefined): boolean;
|
|
14832
|
+
/** The formats the save path can produce. */
|
|
14833
|
+
type SavedPresentationFormat = 'pptx' | 'ppsx' | 'pptm' | 'ppt';
|
|
14834
|
+
/**
|
|
14835
|
+
* The stem of a presentation file name: directories and any loadable extension
|
|
14836
|
+
* removed. `C:\decks\report.ppt` becomes `report`; a name with no recognised
|
|
14837
|
+
* extension is kept whole, so `Untitled Presentation` survives intact rather
|
|
14838
|
+
* than losing everything after its last dot.
|
|
14839
|
+
*/
|
|
14840
|
+
declare function presentationBaseName(sourceName: string | null | undefined, fallback?: string): string;
|
|
14841
|
+
/**
|
|
14842
|
+
* The name a saved copy should be offered under: the source stem plus the
|
|
14843
|
+
* extension of the format actually being written.
|
|
14844
|
+
*
|
|
14845
|
+
* This is what turns `report.ppt` into `report.pptx` on a regular Save As,
|
|
14846
|
+
* and `report.pptx` into `report.ppt` when the user explicitly picks the
|
|
14847
|
+
* PowerPoint 97-2003 format. Keeping the source extension would mislabel the
|
|
14848
|
+
* bytes either way.
|
|
14849
|
+
*/
|
|
14850
|
+
declare function savedPresentationFileName(sourceName: string | null | undefined, format?: SavedPresentationFormat): string;
|
|
14851
|
+
//#endregion
|
|
14852
|
+
//#region src/render/session-restore.d.ts
|
|
14853
|
+
/**
|
|
14854
|
+
* session-restore: keep the deck a host app has open across a page refresh.
|
|
14855
|
+
*
|
|
14856
|
+
* A host (the demo apps, or any embedder) owns the bytes it hands to the
|
|
14857
|
+
* viewer, so a plain reload drops them and the user lands back on the file
|
|
14858
|
+
* dropzone with their presentation gone. This store remembers the open deck in
|
|
14859
|
+
* IndexedDB and hands it back on the next load.
|
|
14860
|
+
*
|
|
14861
|
+
* Scope is deliberately per-tab: the record is keyed by an id kept in
|
|
14862
|
+
* `sessionStorage`, which survives a reload but NOT a new tab. Refreshing
|
|
14863
|
+
* restores the deck this tab had open, while a second tab opened on the same
|
|
14864
|
+
* origin still starts on the landing page, and two tabs holding different decks
|
|
14865
|
+
* never steal each other's content.
|
|
14866
|
+
*
|
|
14867
|
+
* `restoreSessionDeck` additionally prefers a NEWER autosave snapshot for the
|
|
14868
|
+
* same file (see `./autosave-store`), so a refresh mid-edit comes back with the
|
|
14869
|
+
* edited deck rather than the pristine bytes that were first opened.
|
|
14870
|
+
*
|
|
14871
|
+
* Every operation is best-effort: a blocked IndexedDB, a partitioned
|
|
14872
|
+
* `sessionStorage`, or an exhausted quota degrades to "no restore", never to a
|
|
14873
|
+
* thrown error in the host.
|
|
14874
|
+
*/
|
|
14875
|
+
/** A deck remembered for the current tab. */
|
|
14876
|
+
interface SessionDeck {
|
|
14877
|
+
/** File name the deck was opened under, used as the autosave key. */
|
|
14878
|
+
fileName: string;
|
|
14879
|
+
/** The presentation bytes. */
|
|
14880
|
+
data: Uint8Array;
|
|
14881
|
+
/** When these bytes were remembered (epoch ms). */
|
|
14882
|
+
timestamp: number;
|
|
14883
|
+
}
|
|
14884
|
+
/**
|
|
14885
|
+
* This tab's session id, or `null` when `sessionStorage` is unavailable (a
|
|
14886
|
+
* sandboxed iframe, or a browser with storage disabled).
|
|
14887
|
+
*
|
|
14888
|
+
* @param create Mint and persist an id when the tab does not have one yet.
|
|
14889
|
+
* Reads pass `false` so a fresh tab never claims another tab's record.
|
|
14916
14890
|
*/
|
|
14917
|
-
|
|
14891
|
+
declare function getSessionTabId(create?: boolean): string | null;
|
|
14918
14892
|
/**
|
|
14919
|
-
*
|
|
14920
|
-
*
|
|
14893
|
+
* Remember `data` as the deck this tab has open, so the next load can restore
|
|
14894
|
+
* it. Resolves `false` when the browser refused to store it; callers treat that
|
|
14895
|
+
* as "no restore available later", never as an error.
|
|
14921
14896
|
*/
|
|
14922
|
-
|
|
14897
|
+
declare function rememberSessionDeck(fileName: string, data: Uint8Array): Promise<boolean>;
|
|
14898
|
+
/** The deck remembered for this tab, or `null` when there is nothing to restore. */
|
|
14899
|
+
declare function loadSessionDeck(): Promise<SessionDeck | null>;
|
|
14900
|
+
/** Forget this tab's deck (the host closed it, or handed the tab to another flow). */
|
|
14901
|
+
declare function forgetSessionDeck(): Promise<void>;
|
|
14923
14902
|
/**
|
|
14924
|
-
*
|
|
14925
|
-
*
|
|
14926
|
-
*
|
|
14903
|
+
* The deck to reopen on load: this tab's remembered bytes, upgraded to a newer
|
|
14904
|
+
* autosave snapshot of the same file when the viewer wrote one after they were
|
|
14905
|
+
* remembered. Without that upgrade a refresh mid-edit would silently roll the
|
|
14906
|
+
* presentation back to the state it was opened in.
|
|
14927
14907
|
*/
|
|
14928
|
-
|
|
14929
|
-
/**
|
|
14930
|
-
|
|
14931
|
-
|
|
14932
|
-
|
|
14933
|
-
|
|
14934
|
-
|
|
14935
|
-
|
|
14936
|
-
|
|
14937
|
-
|
|
14938
|
-
|
|
14939
|
-
|
|
14940
|
-
|
|
14908
|
+
declare function restoreSessionDeck(): Promise<SessionDeck | null>;
|
|
14909
|
+
/** Optional seed values for the share start form. */
|
|
14910
|
+
interface ShareDefaults {
|
|
14911
|
+
roomId?: string;
|
|
14912
|
+
userName?: string;
|
|
14913
|
+
serverUrl?: string;
|
|
14914
|
+
}
|
|
14915
|
+
//#endregion
|
|
14916
|
+
//#region src/render/presentation-session-types.d.ts
|
|
14917
|
+
interface PresentationSnapshot {
|
|
14918
|
+
slideIndex: number;
|
|
14919
|
+
buildStep: number;
|
|
14920
|
+
sequence: number;
|
|
14921
|
+
blackout: 'none' | 'black' | 'white';
|
|
14922
|
+
paused: boolean;
|
|
14923
|
+
elapsedMs: number;
|
|
14924
|
+
zoom?: PresentationZoomState;
|
|
14925
|
+
pointer?: PresentationPointerState;
|
|
14926
|
+
inkStrokes?: PresentationInkStroke[];
|
|
14941
14927
|
/**
|
|
14942
|
-
*
|
|
14943
|
-
*
|
|
14944
|
-
*
|
|
14928
|
+
* Whether ink markup is drawn (PowerPoint's Ctrl+M). Undefined means visible,
|
|
14929
|
+
* so existing snapshots keep showing their ink. Hiding never discards the
|
|
14930
|
+
* strokes, which stay in `inkStrokes` and can be kept on exit.
|
|
14945
14931
|
*/
|
|
14946
|
-
|
|
14932
|
+
inkMarkupVisible?: boolean;
|
|
14933
|
+
caption?: string;
|
|
14934
|
+
subtitlesVisible?: boolean;
|
|
14947
14935
|
}
|
|
14948
|
-
|
|
14949
|
-
|
|
14950
|
-
|
|
14951
|
-
|
|
14952
|
-
|
|
14953
|
-
|
|
14954
|
-
|
|
14955
|
-
|
|
14936
|
+
interface PresentationZoomState {
|
|
14937
|
+
scale: number;
|
|
14938
|
+
originX: number;
|
|
14939
|
+
originY: number;
|
|
14940
|
+
}
|
|
14941
|
+
type PresentationPointerTool = 'none' | 'laser' | 'pen' | 'highlighter' | 'eraser';
|
|
14942
|
+
interface PresentationPointerState {
|
|
14943
|
+
tool: PresentationPointerTool;
|
|
14944
|
+
x: number;
|
|
14945
|
+
y: number;
|
|
14946
|
+
color: string;
|
|
14947
|
+
}
|
|
14948
|
+
interface PresentationInkPoint {
|
|
14949
|
+
x: number;
|
|
14950
|
+
y: number;
|
|
14951
|
+
}
|
|
14952
|
+
interface PresentationInkStroke {
|
|
14953
|
+
id: string;
|
|
14954
|
+
slideIndex: number;
|
|
14955
|
+
tool: 'pen' | 'highlighter';
|
|
14956
|
+
color: string;
|
|
14957
|
+
width: number;
|
|
14958
|
+
points: PresentationInkPoint[];
|
|
14959
|
+
}
|
|
14960
|
+
declare function parsePresentationSessionId(hash: string): string | null;
|
|
14961
|
+
declare function loadPresentationDeck(sessionId: string): Promise<Uint8Array | null>;
|
|
14962
|
+
//#endregion
|
|
14963
|
+
//#region src/render/presentation-blackboard.d.ts
|
|
14964
|
+
/** Blackout state, as carried by {@link PresentationSnapshot}. */
|
|
14965
|
+
type PresentationBlackout = PresentationSnapshot['blackout'];
|
|
14966
|
+
//#endregion
|
|
14967
|
+
//#region src/render/paste-special.d.ts
|
|
14968
|
+
/** The four paste formats PowerPoint's Paste Options / Paste Special offer. */
|
|
14969
|
+
type PasteSpecialFormat = 'keep-source-formatting' | 'use-destination-theme' | 'picture' | 'keep-text-only';
|
|
14970
|
+
//#endregion
|
|
14971
|
+
//#region src/render/alignment-guides.d.ts
|
|
14972
|
+
/** A single alignment guide, positioned in authored slide pixels. */
|
|
14973
|
+
interface Guide {
|
|
14974
|
+
id: string;
|
|
14975
|
+
axis: 'h' | 'v';
|
|
14976
|
+
position: number;
|
|
14977
|
+
}
|
|
14978
|
+
//#endregion
|
|
14979
|
+
//#region src/render/ink-drawing.d.ts
|
|
14980
|
+
/** A 2D point in stage-local coordinates. */
|
|
14981
|
+
interface InkPoint {
|
|
14982
|
+
x: number;
|
|
14983
|
+
y: number;
|
|
14956
14984
|
/**
|
|
14957
|
-
*
|
|
14958
|
-
*
|
|
14959
|
-
*
|
|
14985
|
+
* Pointer pressure at this point, from `PointerEvent.pressure` (0..1).
|
|
14986
|
+
* Optional: a binding that has not wired pressure capture simply omits
|
|
14987
|
+
* it, and {@link strokeToInkElement} falls back to
|
|
14988
|
+
* {@link DEFAULT_POINTER_PRESSURE}, the constant value mice and other
|
|
14989
|
+
* non-pressure-aware devices report, which reads as "no real pressure
|
|
14990
|
+
* data".
|
|
14960
14991
|
*/
|
|
14961
|
-
|
|
14992
|
+
pressure?: number;
|
|
14962
14993
|
/**
|
|
14963
|
-
*
|
|
14964
|
-
* a
|
|
14994
|
+
* Pen-tilt lean, in degrees, from `PointerEvent.tiltX`/`tiltY` on
|
|
14995
|
+
* supporting hardware (a mouse, or a stylus with no tilt sensor, reports a
|
|
14996
|
+
* constant 0). Optional and always captured as a pair: a binding that has
|
|
14997
|
+
* not wired tilt capture simply omits both, and {@link strokeToInkElement}
|
|
14998
|
+
* treats a constant `(0, 0)` reading the same way it treats a constant
|
|
14999
|
+
* pressure, i.e. as "no real tilt data" rather than authoring a channel
|
|
15000
|
+
* for it.
|
|
14965
15001
|
*/
|
|
14966
|
-
|
|
15002
|
+
tiltX?: number;
|
|
15003
|
+
tiltY?: number;
|
|
14967
15004
|
}
|
|
14968
|
-
/**
|
|
14969
|
-
interface
|
|
14970
|
-
|
|
14971
|
-
|
|
14972
|
-
|
|
14973
|
-
|
|
15005
|
+
/** Options for {@link strokeToInkElement}. */
|
|
15006
|
+
interface StrokeToInkElementOpts {
|
|
15007
|
+
points: InkPoint[];
|
|
15008
|
+
color: string;
|
|
15009
|
+
width: number;
|
|
15010
|
+
tool: 'pen' | 'highlighter' | 'freeform';
|
|
14974
15011
|
}
|
|
14975
|
-
|
|
14976
|
-
|
|
14977
|
-
|
|
14978
|
-
|
|
14979
|
-
|
|
14980
|
-
|
|
15012
|
+
//#endregion
|
|
15013
|
+
//#region src/render/mobile-chrome.d.ts
|
|
15014
|
+
/**
|
|
15015
|
+
* Pure helper logic for mobile chrome state, shared by every binding.
|
|
15016
|
+
*
|
|
15017
|
+
* These helpers capture the sheet open/close state machine that governs which
|
|
15018
|
+
* sheet is visible at any given time and which bottom-bar button appears active.
|
|
15019
|
+
* Keeping this logic as pure functions makes it straightforward to test and
|
|
15020
|
+
* trivial to adapt when each binding wires the components together.
|
|
15021
|
+
*/
|
|
15022
|
+
/** All mobile sheets that can be open at one time. */
|
|
15023
|
+
type MobileSheetKey = 'slides' | 'menu' | 'insert' | 'inspector' | 'comments' | 'notes' | null;
|
|
15024
|
+
//#endregion
|
|
15025
|
+
//#region src/render/gradient-picker.d.ts
|
|
15026
|
+
/** A single gradient stop, mirroring the ShapeStyle array item shape. */
|
|
15027
|
+
interface GradientStop {
|
|
15028
|
+
color: string;
|
|
15029
|
+
position: number;
|
|
15030
|
+
opacity?: number;
|
|
14981
15031
|
/**
|
|
14982
|
-
*
|
|
14983
|
-
*
|
|
15032
|
+
* Theme colour identity for this stop, mirroring
|
|
15033
|
+
* `ShapeStyle.fillColorRef`. Set by a theme-swatch pick so the stop keeps
|
|
15034
|
+
* following the theme after a later theme change; cleared by a custom hex
|
|
15035
|
+
* pick, which has no theme identity.
|
|
14984
15036
|
*/
|
|
14985
|
-
|
|
14986
|
-
/** Remove the element context menu entirely. */
|
|
14987
|
-
disableElementMenu?: boolean;
|
|
14988
|
-
/** Remove the empty-canvas context menu entirely. */
|
|
14989
|
-
disableCanvasMenu?: boolean;
|
|
15037
|
+
colorRef?: PptxThemeColorRef;
|
|
14990
15038
|
}
|
|
15039
|
+
/** The editable gradient state surfaced to the component. */
|
|
15040
|
+
interface GradientState {
|
|
15041
|
+
type: 'linear' | 'radial';
|
|
15042
|
+
/** Angle in degrees (only meaningful for linear). */
|
|
15043
|
+
angle: number;
|
|
15044
|
+
stops: GradientStop[];
|
|
15045
|
+
}
|
|
15046
|
+
//#endregion
|
|
15047
|
+
//#region src/render/insert-chart.d.ts
|
|
14991
15048
|
/**
|
|
14992
|
-
*
|
|
14993
|
-
*
|
|
14994
|
-
*
|
|
15049
|
+
* Dropdown ids for the insert-chart menu. Distinct from `PptxChartType`
|
|
15050
|
+
* because PowerPoint offers Column (vertical) and Bar (horizontal) as two
|
|
15051
|
+
* entries over the same underlying `'bar'` chart type, and because `'pareto'`
|
|
15052
|
+
* has no `PptxChartType` of its own: it is a dropdown entry that resolves to
|
|
15053
|
+
* `type: 'histogram'` (see docs/guide/limitations.md's ChartEx row) with a
|
|
15054
|
+
* frequency-plus-cumulative-percentage default shape. The other six ChartEx
|
|
15055
|
+
* ids (`histogram` through `regionMap`) map one-to-one onto their chart type.
|
|
14995
15056
|
*/
|
|
14996
|
-
type
|
|
14997
|
-
/**
|
|
14998
|
-
interface
|
|
14999
|
-
|
|
15000
|
-
|
|
15001
|
-
/** Editor commands whose shortcut is turned off. */
|
|
15002
|
-
disabled?: readonly EditorKeyActionName[];
|
|
15003
|
-
/**
|
|
15004
|
-
* Replacement chords per command. A remapped command no longer answers to
|
|
15005
|
-
* its built-in chord; it answers to the chord(s) given here instead.
|
|
15006
|
-
*/
|
|
15007
|
-
remap?: Partial<Record<EditorKeyActionName, ShortcutChord | readonly ShortcutChord[]>>;
|
|
15057
|
+
type InsertChartKind = 'column' | 'bar' | 'line' | 'pie' | 'doughnut' | 'area' | 'scatter' | 'histogram' | 'pareto' | 'funnel' | 'treemap' | 'sunburst' | 'boxWhisker' | 'regionMap';
|
|
15058
|
+
/** In-memory clipboard payload stored when an element is copied or cut. */
|
|
15059
|
+
interface ElementClipboardPayload {
|
|
15060
|
+
element: PptxElement;
|
|
15061
|
+
isTemplate: boolean;
|
|
15008
15062
|
}
|
|
15063
|
+
//#endregion
|
|
15064
|
+
//#region src/render/image-file-insertion.d.ts
|
|
15009
15065
|
/**
|
|
15010
|
-
*
|
|
15011
|
-
*
|
|
15066
|
+
* Decode a local image File/Blob into a centred element, fitting the slide
|
|
15067
|
+
* without upscaling. Dimensions are slide pixels; image bytes are preserved.
|
|
15068
|
+
*
|
|
15069
|
+
* Resolves null for unsupported/unreadable images, invalid bounds, cancellation,
|
|
15070
|
+
* or unavailable browser APIs. Importing this module is safe outside a browser.
|
|
15071
|
+
* No slide, selection, history, clipboard, or network state is changed. The
|
|
15072
|
+
* caller must still validate its document/slide destination before committing.
|
|
15073
|
+
*/
|
|
15074
|
+
declare function createImageElementFromFile(file: Blob, canvasSize: CanvasSize, signal?: AbortSignal): Promise<ImagePptxElement | null>;
|
|
15075
|
+
//#endregion
|
|
15076
|
+
//#region src/render/shape-preset-catalog.d.ts
|
|
15077
|
+
/**
|
|
15078
|
+
* shape-preset-catalog.ts: the Insert > Shape picker catalogue shared by every
|
|
15079
|
+
* binding's toolbar/inspector.
|
|
15080
|
+
*
|
|
15081
|
+
* Pure data: each entry carries the preset geometry `type` (OOXML `a:prstGeom`
|
|
15082
|
+
* value the editor can insert), an English fallback `label`, the shared-i18n
|
|
15083
|
+
* `i18nKey`, and a framework-neutral icon descriptor ({@link ShapePresetGlyph}
|
|
15084
|
+
* name + optional utility-class modifier for rotation/skew). Each binding maps
|
|
15085
|
+
* the glyph name onto its own icon component/SVG.
|
|
15086
|
+
*
|
|
15087
|
+
* Order matters: bindings surface the first 12 entries as the quick "top
|
|
15088
|
+
* shapes" row, so new presets should be appended, not inserted.
|
|
15089
|
+
*
|
|
15090
|
+
* @module render/shape-preset-catalog
|
|
15012
15091
|
*/
|
|
15013
|
-
|
|
15014
|
-
|
|
15015
|
-
|
|
15092
|
+
/** Shape preset geometry types offered by the insert picker. */
|
|
15093
|
+
type ShapePresetType = 'rect' | 'roundRect' | 'ellipse' | 'cylinder' | 'rtArrow' | 'leftArrow' | 'upArrow' | 'downArrow' | 'triangle' | 'rtTriangle' | 'diamond' | 'parallelogram' | 'trapezoid' | 'pentagon' | 'hexagon' | 'octagon' | 'chevron' | 'star5' | 'star6' | 'star8' | 'plus' | 'heart' | 'cloud' | 'sun' | 'moon' | 'pie' | 'plaque' | 'teardrop' | 'line' | 'connector';
|
|
15094
|
+
//#endregion
|
|
15095
|
+
//#region src/render/zoom-return-navigation.d.ts
|
|
15016
15096
|
/**
|
|
15017
|
-
* The
|
|
15018
|
-
*
|
|
15097
|
+
* The navigation-relevant fields of a Zoom click target, independent of
|
|
15098
|
+
* `zoomType`.
|
|
15099
|
+
*
|
|
15100
|
+
* `returnToParent` is already resolved to its EFFECTIVE value here (not the
|
|
15101
|
+
* raw, possibly-`undefined` `ZoomPptxElement`/`SummaryZoomTarget` field):
|
|
15102
|
+
* `CT_ZoomObjectProperties/@returnToParent` (MS-PPTX) is `<xsd:attribute
|
|
15103
|
+
* name="returnToParent" type="xsd:boolean" use="optional" default="true"/>`,
|
|
15104
|
+
* so an ABSENT attribute means true, not false. Core deliberately stores
|
|
15105
|
+
* `undefined` rather than fabricating `true` (so a round-trip never invents
|
|
15106
|
+
* an attribute the source never had), which makes `Boolean(x)` the wrong way
|
|
15107
|
+
* to read it; the two `resolve*NavigationTarget` functions below are the only
|
|
15108
|
+
* place that distinction should be made.
|
|
15019
15109
|
*/
|
|
15020
|
-
|
|
15021
|
-
|
|
15022
|
-
|
|
15023
|
-
|
|
15024
|
-
|
|
15110
|
+
interface ZoomNavigationTarget {
|
|
15111
|
+
targetSlideIndex: number;
|
|
15112
|
+
targetSectionId?: string;
|
|
15113
|
+
returnToParent: boolean;
|
|
15114
|
+
transitionDurationMs?: number;
|
|
15115
|
+
}
|
|
15116
|
+
interface AutosaveRecord {
|
|
15117
|
+
key: string;
|
|
15118
|
+
data: Uint8Array;
|
|
15119
|
+
timestamp: number;
|
|
15120
|
+
size: number;
|
|
15121
|
+
}
|
|
15122
|
+
//#endregion
|
|
15123
|
+
//#region src/render/master-view-crud.d.ts
|
|
15124
|
+
/** One Slide Master view sidebar command. */
|
|
15125
|
+
type MasterViewCrudActionId = 'addLayout' | 'duplicateLayout' | 'deleteLayout' | 'renameLayout' | 'addMaster' | 'duplicateMaster' | 'deleteMaster' | 'renameMaster';
|
|
15126
|
+
/** A framework-neutral descriptor for one sidebar button. */
|
|
15127
|
+
interface MasterViewCrudAction {
|
|
15128
|
+
id: MasterViewCrudActionId;
|
|
15129
|
+
/** i18n key for the button label (`pptx.masterView.<id>`). */
|
|
15130
|
+
labelKey: string;
|
|
15131
|
+
enabled: boolean;
|
|
15132
|
+
/** i18n key explaining why the button is disabled, set only when it is. */
|
|
15133
|
+
disabledReasonKey?: string;
|
|
15134
|
+
}
|
|
15135
|
+
//#endregion
|
|
15136
|
+
//#region src/export/handout-layout.d.ts
|
|
15025
15137
|
/**
|
|
15026
|
-
*
|
|
15027
|
-
*
|
|
15138
|
+
* Pure handout layout calculations, shared by every binding's print path.
|
|
15139
|
+
*
|
|
15140
|
+
* Handles distributing slides across pages, computing grid dimensions, and
|
|
15141
|
+
* positioning cells within A4 page space. No DOM/framework dependency: callers
|
|
15142
|
+
* render the resulting rectangles however their view layer prefers.
|
|
15028
15143
|
*/
|
|
15029
|
-
|
|
15030
|
-
|
|
15031
|
-
|
|
15032
|
-
|
|
15033
|
-
|
|
15034
|
-
|
|
15035
|
-
|
|
15036
|
-
|
|
15037
|
-
|
|
15038
|
-
|
|
15039
|
-
|
|
15040
|
-
|
|
15041
|
-
|
|
15042
|
-
|
|
15043
|
-
|
|
15044
|
-
|
|
15144
|
+
/** Supported slides-per-page values. */
|
|
15145
|
+
type HandoutSlidesPerPage = 1 | 2 | 3 | 4 | 6 | 9;
|
|
15146
|
+
//#endregion
|
|
15147
|
+
//#region src/export/print-document.d.ts
|
|
15148
|
+
/** What to print. */
|
|
15149
|
+
type PrintWhat = 'slides' | 'handouts' | 'notes' | 'outline';
|
|
15150
|
+
/** Page orientation for the printed output. */
|
|
15151
|
+
type PrintOrientation = 'portrait' | 'landscape';
|
|
15152
|
+
/** Colour mode for the printed output. */
|
|
15153
|
+
type PrintColorMode = 'color' | 'grayscale' | 'blackAndWhite';
|
|
15154
|
+
/** Slide range mode. */
|
|
15155
|
+
type PrintSlideRange = 'all' | 'current' | 'custom';
|
|
15156
|
+
/** Resolved print settings emitted on confirm. */
|
|
15157
|
+
interface PrintSettings {
|
|
15158
|
+
printWhat: PrintWhat;
|
|
15159
|
+
orientation: PrintOrientation;
|
|
15160
|
+
colorMode: PrintColorMode;
|
|
15161
|
+
frameSlides: boolean;
|
|
15162
|
+
slidesPerPage: HandoutSlidesPerPage;
|
|
15163
|
+
slideRange: PrintSlideRange;
|
|
15164
|
+
customRangeFrom: number;
|
|
15165
|
+
customRangeTo: number;
|
|
15166
|
+
/**
|
|
15167
|
+
* PowerPoint's Print > "Scale to Fit Paper". `true` (the default, and the
|
|
15168
|
+
* only behavior this printed output ever had before this field existed)
|
|
15169
|
+
* shrinks/grows each slide image to fill its page/cell while preserving
|
|
15170
|
+
* aspect ratio. `false` prints at the slide's native pixel size instead,
|
|
15171
|
+
* which may overflow or under-fill the page, exactly like PowerPoint with
|
|
15172
|
+
* the option off. Optional so existing `Partial<PrintSettings>` literals
|
|
15173
|
+
* across every binding keep compiling; `validatePrintSettings` defaults it
|
|
15174
|
+
* to `true`.
|
|
15175
|
+
*/
|
|
15176
|
+
scaleToFit?: boolean;
|
|
15045
15177
|
}
|
|
15046
15178
|
//#endregion
|
|
15047
15179
|
//#region src/render/options/viewer-options-constraints.d.ts
|
|
@@ -15104,126 +15236,31 @@ interface ViewerOptionsStore {
|
|
|
15104
15236
|
/** True when the host locked `<group>.<key>`. */
|
|
15105
15237
|
isLocked(group: ViewerOptionsGroupId, key: string): boolean;
|
|
15106
15238
|
}
|
|
15107
|
-
|
|
15108
|
-
|
|
15109
|
-
declare const RIBBON_TAB_IDS: readonly ToolbarTabId[];
|
|
15110
|
-
declare const TOOLBAR_BUTTON_IDS: readonly ["share", "broadcast", "export", "undo", "redo", "record", "notes", "fullscreen", "zoom", "navigation", "mergeShapes", "crop"];
|
|
15111
|
-
declare const OPTIONS_PAGE_IDS: readonly OptionsPageId[];
|
|
15112
|
-
declare const OPTIONS_SECTION_IDS: readonly OptionsSectionId[];
|
|
15113
|
-
declare const OPTIONS_SETTING_IDS: readonly OptionsSettingId[];
|
|
15114
|
-
declare const BACKSTAGE_PAGE_IDS: readonly BackstagePage[];
|
|
15115
|
-
declare const BACKSTAGE_CARD_IDS: readonly BackstageCardId[];
|
|
15116
|
-
declare const ELEMENT_CONTEXT_MENU_COMMAND_IDS: readonly ["copy", "cut", "paste", "duplicate", "edit-text", "edit-points", "bring-forward", "send-backward", "bring-front", "send-back", "ai-ask", "ai-fix", "comment", "hyperlink", "table-insert-row-above", "table-insert-row-below", "table-delete-row", "table-insert-col-left", "table-insert-col-right", "table-delete-col", "table-merge-selected", "table-merge-right", "table-merge-down", "table-split", "group", "ungroup", "crop", "merge-union", "merge-combine", "merge-fragment", "merge-intersect", "merge-subtract", "save-as-picture", "edit-alt-text", "size-and-position", "format-shape", "delete"];
|
|
15117
|
-
declare const CANVAS_CONTEXT_MENU_COMMAND_IDS: readonly ["paste", "layout", "reset-slide", "format-background", "grid-and-guides", "ruler"];
|
|
15118
|
-
declare const EDITOR_SHORTCUT_ACTION_IDS: readonly ["undo", "redo", "copy", "cut", "paste", "duplicate", "delete", "selectAll", "group", "ungroup", "nudge", "prevSlide", "nextSlide", "escape", "find", "findReplace", "toggleShortcuts", "alignLeft", "alignCenter", "alignRight", "alignJustify", "increaseFontSize", "decreaseFontSize", "copyFormat", "pasteFormat", "newSlide", "hyperlink", "clearFormatting", "cycleSelectionNext", "cycleSelectionPrev", "pasteSpecial"];
|
|
15119
|
-
declare const VIEWER_PANEL_IDS: readonly ["statusBar", "slidesPane", "inspector", "notes", "quickAccessToolbar", "titleBar"];
|
|
15120
|
-
declare const VIEWER_FEATURE_IDS: readonly ["ai", "collaboration", "comments", "presentMode", "editPoints"];
|
|
15121
|
-
declare const VIEWER_DIALOG_IDS: readonly ["options", "share", "broadcast", "print", "export"];
|
|
15122
|
-
declare const VIEWER_EXPORT_FORMAT_IDS: readonly ["pdf", "png", "video", "gif", "json", "copyImage"];
|
|
15123
|
-
//#endregion
|
|
15124
|
-
//#region src/render/customization/customization-keymap.d.ts
|
|
15125
|
-
/** A parsed `Mod+Shift+D` chord. */
|
|
15126
|
-
interface ParsedShortcutChord {
|
|
15127
|
-
key: string;
|
|
15128
|
-
mod: boolean;
|
|
15129
|
-
ctrl: boolean;
|
|
15130
|
-
meta: boolean;
|
|
15131
|
-
alt: boolean;
|
|
15132
|
-
shift: boolean;
|
|
15133
|
-
}
|
|
15134
|
-
/** The normalised keyboard slice of a resolved customisation. */
|
|
15135
|
-
interface ResolvedKeyboardCustomization {
|
|
15136
|
-
disableAll: boolean;
|
|
15137
|
-
disabled: ReadonlySet<EditorKeyActionName>;
|
|
15138
|
-
remap: ReadonlyMap<EditorKeyActionName, readonly ParsedShortcutChord[]>;
|
|
15139
|
-
}
|
|
15140
|
-
//#endregion
|
|
15141
|
-
//#region src/render/customization/customization-resolve.d.ts
|
|
15142
|
-
/** The normalised, set-based view of a customisation. Treat as immutable. */
|
|
15143
|
-
interface ResolvedCustomization {
|
|
15144
|
-
hiddenActions: ReadonlySet<ToolbarActionId>;
|
|
15145
|
-
/** Contextual tabs (`shapeFormat`, ...) the host never wants shown. */
|
|
15146
|
-
hiddenContextualTabs: ReadonlySet<RibbonContextualTabId>;
|
|
15147
|
-
/** Catalogued ribbon groups to hide (`ribbon.hiddenGroups`). */
|
|
15148
|
-
hiddenRibbonGroups: ReadonlySet<RibbonGroupId>;
|
|
15149
|
-
/** Catalogued ribbon controls to hide (the `<tab>.<group>.<control>` part of `ribbon.hiddenButtons`). */
|
|
15150
|
-
hiddenRibbonControls: ReadonlySet<RibbonControlId>;
|
|
15151
|
-
hiddenOptionsPages: ReadonlySet<OptionsPageId>;
|
|
15152
|
-
hiddenOptionsSections: ReadonlySet<OptionsSectionId>;
|
|
15153
|
-
hiddenSettings: ReadonlySet<OptionsSettingId>;
|
|
15154
|
-
lockedSettings: OptionsSettingValues;
|
|
15155
|
-
defaultSettings: OptionsSettingValues;
|
|
15156
|
-
hiddenBackstagePages: ReadonlySet<BackstagePage>;
|
|
15157
|
-
hiddenBackstageCards: ReadonlySet<BackstageCardId>;
|
|
15158
|
-
hiddenElementCommands: ReadonlySet<ContextMenuCommandId>;
|
|
15159
|
-
hiddenCanvasCommands: ReadonlySet<CanvasContextMenuCommandId>;
|
|
15160
|
-
hiddenEditPointsCommands: ReadonlySet<EditPointsCommandId>;
|
|
15161
|
-
hiddenDrawingTools: ReadonlySet<ViewerDrawingToolId>;
|
|
15162
|
-
elementMenuEnabled: boolean;
|
|
15163
|
-
canvasMenuEnabled: boolean;
|
|
15164
|
-
hiddenPanels: ReadonlySet<ViewerPanelId>;
|
|
15165
|
-
disabledFeatures: ReadonlySet<ViewerFeatureId>;
|
|
15166
|
-
hiddenDialogs: ReadonlySet<ViewerDialogId>;
|
|
15167
|
-
keyboard: ResolvedKeyboardCustomization;
|
|
15239
|
+
interface SubtitleSettings {
|
|
15240
|
+
spokenLanguage: string;
|
|
15168
15241
|
}
|
|
15169
|
-
|
|
15170
|
-
|
|
15171
|
-
|
|
15172
|
-
|
|
15173
|
-
|
|
15174
|
-
|
|
15175
|
-
|
|
15176
|
-
setCustomization(next: ViewerCustomization): void;
|
|
15177
|
-
/** Merge a partial customisation (see `mergeCustomization`). */
|
|
15178
|
-
updateCustomization(patch: ViewerCustomization): void;
|
|
15179
|
-
/** Drop every customisation, back to the stock UI. */
|
|
15180
|
-
resetCustomization(): void;
|
|
15181
|
-
/** Hide a fixed tab, or stop a contextual tab (`shapeFormat`, ...) from appearing. */
|
|
15182
|
-
hideRibbonTab(tab: ToolbarTabId | RibbonContextualTabId): void;
|
|
15183
|
-
showRibbonTab(tab: ToolbarTabId | RibbonContextualTabId): void;
|
|
15184
|
-
/** Hide a group inside a tab (`home.font`). */
|
|
15185
|
-
hideRibbonGroup(group: RibbonGroupId): void;
|
|
15186
|
-
showRibbonGroup(group: RibbonGroupId): void;
|
|
15187
|
-
/** Hide a top-level toolbar button or any ribbon control (`home.font.bold`). */
|
|
15188
|
-
hideToolbarButton(button: ToolbarButtonId | RibbonControlId): void;
|
|
15189
|
-
showToolbarButton(button: ToolbarButtonId | RibbonControlId): void;
|
|
15190
|
-
/** Alias of `hideToolbarButton` for a ribbon control id. */
|
|
15191
|
-
hideRibbonControl(control: RibbonControlId): void;
|
|
15192
|
-
showRibbonControl(control: RibbonControlId): void;
|
|
15193
|
-
hideOptionsPage(page: OptionsPageId): void;
|
|
15194
|
-
showOptionsPage(page: OptionsPageId): void;
|
|
15195
|
-
hideOptionsSection(section: OptionsSectionId): void;
|
|
15196
|
-
showOptionsSection(section: OptionsSectionId): void;
|
|
15197
|
-
hideSetting(setting: OptionsSettingId): void;
|
|
15198
|
-
showSetting(setting: OptionsSettingId): void;
|
|
15199
|
-
/** Pin a setting to `value`; `hidden` also removes it from the dialog. */
|
|
15200
|
-
lockSetting(setting: OptionsSettingId, value: ViewerOptionPrimitive, hidden?: boolean): void;
|
|
15201
|
-
unlockSetting(setting: OptionsSettingId): void;
|
|
15202
|
-
/** Set (or with `undefined`, clear) the host default for a setting. */
|
|
15203
|
-
setSettingDefault(setting: OptionsSettingId, value: ViewerOptionPrimitive | undefined): void;
|
|
15204
|
-
hideBackstagePage(page: BackstagePage): void;
|
|
15205
|
-
showBackstagePage(page: BackstagePage): void;
|
|
15206
|
-
hideBackstageCard(card: BackstageCardId): void;
|
|
15207
|
-
showBackstageCard(card: BackstageCardId): void;
|
|
15208
|
-
hideContextMenuCommand(command: ContextMenuCommandId): void;
|
|
15209
|
-
showContextMenuCommand(command: ContextMenuCommandId): void;
|
|
15210
|
-
hideCanvasContextMenuCommand(command: CanvasContextMenuCommandId): void;
|
|
15211
|
-
showCanvasContextMenuCommand(command: CanvasContextMenuCommandId): void;
|
|
15212
|
-
disableShortcut(action: EditorKeyActionName): void;
|
|
15213
|
-
enableShortcut(action: EditorKeyActionName): void;
|
|
15214
|
-
/** Move a command onto new chord(s); `undefined` restores the built-in chord. */
|
|
15215
|
-
remapShortcut(action: EditorKeyActionName, chords: ShortcutChord | readonly ShortcutChord[] | undefined): void;
|
|
15216
|
-
setPanelVisible(panel: ViewerPanelId, visible: boolean): void;
|
|
15217
|
-
setFeatureEnabled(feature: ViewerFeatureId, enabled: boolean): void;
|
|
15218
|
-
setDialogAvailable(dialog: ViewerDialogId, available: boolean): void;
|
|
15242
|
+
interface SubtitleSettingsLabels {
|
|
15243
|
+
title: string;
|
|
15244
|
+
language: string;
|
|
15245
|
+
browserLanguage: string;
|
|
15246
|
+
description: string;
|
|
15247
|
+
apply: string;
|
|
15248
|
+
cancel: string;
|
|
15219
15249
|
}
|
|
15220
|
-
|
|
15221
|
-
|
|
15222
|
-
|
|
15223
|
-
|
|
15224
|
-
|
|
15225
|
-
|
|
15226
|
-
|
|
15250
|
+
/**
|
|
15251
|
+
* Optional hook point for hosts that want to wire a real sign-in flow into
|
|
15252
|
+
* File > Account. Disabled by default: the Account page renders nothing
|
|
15253
|
+
* extra unless a host explicitly opts in by passing `enabled: true`.
|
|
15254
|
+
* See docs/guide for wiring instructions.
|
|
15255
|
+
*/
|
|
15256
|
+
interface AccountAuthConfig {
|
|
15257
|
+
enabled: boolean;
|
|
15258
|
+
onSignIn: () => void;
|
|
15259
|
+
signedInUser?: {
|
|
15260
|
+
name: string;
|
|
15261
|
+
email?: string;
|
|
15262
|
+
avatarUrl?: string;
|
|
15263
|
+
};
|
|
15227
15264
|
}
|
|
15228
15265
|
/**
|
|
15229
15266
|
* What a gallery needs to know about the deck and the selection. Bindings
|
|
@@ -15381,6 +15418,31 @@ interface CropSession {
|
|
|
15381
15418
|
/** Insets the picture did not carry at all (no `a:srcRect` opinion). */
|
|
15382
15419
|
absentInsets: readonly (keyof CropInsets)[];
|
|
15383
15420
|
}
|
|
15421
|
+
type ThemeEditorLabels = Record<string, string>;
|
|
15422
|
+
//#endregion
|
|
15423
|
+
//#region src/web-components/theme-editor.d.ts
|
|
15424
|
+
interface PptxUiThemeEditorElement extends HTMLElement {
|
|
15425
|
+
theme: PptxTheme | undefined;
|
|
15426
|
+
labels: ThemeEditorLabels;
|
|
15427
|
+
disabled: boolean;
|
|
15428
|
+
}
|
|
15429
|
+
declare global {
|
|
15430
|
+
interface HTMLElementTagNameMap {
|
|
15431
|
+
'pptx-ui-theme-editor': PptxUiThemeEditorElement;
|
|
15432
|
+
}
|
|
15433
|
+
}
|
|
15434
|
+
//#endregion
|
|
15435
|
+
//#region src/web-components/subtitle-settings.d.ts
|
|
15436
|
+
interface PptxUiSubtitleSettingsElement extends HTMLElement {
|
|
15437
|
+
settings: SubtitleSettings;
|
|
15438
|
+
labels: SubtitleSettingsLabels;
|
|
15439
|
+
languageDisabled: boolean;
|
|
15440
|
+
}
|
|
15441
|
+
declare global {
|
|
15442
|
+
interface HTMLElementTagNameMap {
|
|
15443
|
+
'pptx-ui-subtitle-settings': PptxUiSubtitleSettingsElement;
|
|
15444
|
+
}
|
|
15445
|
+
}
|
|
15384
15446
|
//#endregion
|
|
15385
15447
|
//#region src/web-components/select-value.d.ts
|
|
15386
15448
|
/** Public DOM shape used by all bindings; the element is not a native select. */
|
|
@@ -15441,5 +15503,5 @@ interface TransitionOverlayParams {
|
|
|
15441
15503
|
*/
|
|
15442
15504
|
declare function playTransitionOverlay(params: TransitionOverlayParams): () => void;
|
|
15443
15505
|
//#endregion
|
|
15444
|
-
export {
|
|
15445
|
-
//# sourceMappingURL=transition-overlay-
|
|
15506
|
+
export { InlineTextEditSnapshot as $, ViewerTheme as $n, PptxSmartArtNodeStyle as $r, SlideTransitionAnimations as $t, CssStyleMap as A, describeCollaborationShellState as An, PptxCommentAuthor as Ar, ResolvedCustomization as At, ElementUpdateOptions as B, overlayInlineTextSnapshot as Bn, PptxHandoutMaster as Br, RulerUnit as Bt, CollaborationTransport as C, ViewportFitOptions as Cn, PptxAnimationSequence as Cr, PresentationPointerTool as Ct, ContextMenuCustomization as D, buildInlineTextCommitPatch as Dn, PptxAppProperties as Dr, RIBBON_TAB_IDS as Dt, ContextMenuCommandId as E, ZoomNavigationTarget as En, PptxAnimationTrigger as Er, RANDOM_ELIGIBLE_TYPES as Et, ELEMENT_CONTEXT_MENU_COMMAND_IDS as F, getSlideTransitionAnimations as Fn, PptxCustomShow as Fr, RibbonCustomization as Ft, FreeformToolKind as G, resolveDirection8 as Gn, PptxModifyVerifier as Gr, SavedPresentationFormat as Gt, ExternalCollaborationSession as H, presentationBaseName as Hn, PptxImageEffects as Hr, SLIDE_TRANSITION_KEYFRAMES as Ht, EditorKeyActionName as I, isLegacyBinaryPresentation as In, PptxData as Ir, RibbonGalleryApplyResult as It, HostCanvasMenuContext as J, resolveTransitionDurationMs as Jn, PptxSection as Jr, ShareDefaults as Jt, GradientState as K, resolveOrientation as Kn, PptxNotesMaster as Kr, SessionDeck as Kt, ElementAnimationState as L, isSupportedPresentationFile as Ln, PptxElement as Lr, RibbonGalleryContext as Lt, DEFAULT_TRANSITION_DURATION_MS as M, getCinematicTransitionAnimations as Mn, PptxCompatibilityWarning as Mr, ResolvedDirection8 as Mt, EASE as N, getP14TransitionAnimations as Nn, PptxCoreProperties as Nr, RibbonContextualTabId as Nt, CropElementUpdate as O, canInteractWithElement as On, PptxChartData as Or, ReadOnlyRecommendation as Ot, EDITOR_SHORTCUT_ACTION_IDS as P, getSessionTabId as Pn, PptxCustomProperty as Pr, RibbonControlId as Pt, InlineListReadResult as Q, ThemeCatalogEntry as Qn, PptxSmartArtData as Qr, SlideTemplateId as Qt, ElementClipboardPayload as R, loadPresentationDeck as Rn, PptxElementAnimation as Rr, RibbonGroupId as Rt, CollaborationShellState as S, ViewerQuickAccessOptions as Sn, PptxAnimationRepeatMode as Sr, PresentationBlackout as St, ConnectionStatus as T, WHEEL_SPOKE_COUNTS as Tn, PptxAnimationTimingCurve as Tr, PrintSettings as Tt, ExternalCollaborationSnapshot as U, rememberSessionDeck as Un, PptxLayoutPreview as Ur, SLIDE_TRANSITION_KEYFRAMES_CSS as Ut, ExternalCollaborationAwareness as V, parsePresentationSessionId as Vn, PptxHeaderFooter as Vr, RunProgramNotice as Vt, FieldSubstitutionContext as W, resolveDirection as Wn, PptxModernCommentAuthor as Wr, SanitizedPresence as Wt, HostMenuCommand as X, restoreSessionDeck as Xn, PptxSlideMaster as Xr, SlideSizeEmu as Xt, HostElementMenuContext as Y, resolveWheelSpokeCount as Yn, PptxSlide as Yr, ShortcutChord as Yt, INSTANT as Z, savedPresentationFileName as Zn, PptxSlideTransition as Zr, SlideSizeRescaleMode as Zt, ChartPartRef as _, TextStyle as _i, ViewerFontSource as _n, OlePptxElement as _r, P14_TRANSITION_KEYFRAMES_ALL as _t, AnimationGroup as a, PptxThemeColorRef as ai, ToolbarButtonId as an, vermilionDarkTheme as ar, MobileSheetKey as at, CollaborationLivePatcher as b, ViewerOptionsStore as bn, PptxAnimationDirection as br, PasteSpecialFormat as bt, BACKSTAGE_PAGE_IDS as c, PptxThemeOption as ci, VIEWER_EXPORT_FORMAT_IDS as cn, MergeShapeOperation as cr, OPTIONS_SECTION_IDS as ct, BackstagePage as d, ShapeStyle as di, ViewerCustomization as dn, PptxSaveFormat as dr, OptionsPageId as dt, PptxTableCellStyle as ei, StrokeToInkElementOpts as en, ViewerThemeColors as er, InlineTextSelection as et, CANVAS_CONTEXT_MENU_COMMAND_IDS as f, SmartArtColorScheme as fi, ViewerCustomizationApi as fn, SvgExportOptions as fr, OptionsSectionId as ft, ChangeCaseMode as g, TextSegment as gi, ViewerFeatureId as gn, OleObjectType as gr, P14_TRANSITION_KEYFRAMES_2 as gt, CanvasSize as h, TablePptxElement as hi, ViewerExportFormatId as hn, MediaPptxElement as hr, P14_TRANSITION_KEYFRAMES as ht, AlignEdge as i, PptxTheme as ii, ToolbarActionId as in, themeToCssVars as ir, MasterViewCrudActionId as it, DEFAULT_MORPH_DURATION_MS as j, forgetSessionDeck as jn, PptxCommentMention as jr, ResolvedDirection as jt, CropSession as k, createImageElementFromFile as kn, PptxComment as kr, RemoteCursor as kt, BackstageCardId as l, PptxTransitionType as li, VIEWER_FEATURE_IDS as ln, PptxHandler as lr, OPTIONS_SETTING_IDS as lt, CanvasContextMenuCommandId as m, SmartArtLayoutType as mi, ViewerDialogId as mn, MasterViewTab as mr, OptionsSettingValues as mt, playTransitionOverlay as n, PptxTagCollection as ni, TRANSITION_SPEED_DURATION_MS as nn, defaultRadius as nr, KeyboardCustomization as nt, AutosaveRecord as o, PptxThemeColorScheme as oi, ToolbarTabId as on, vermilionLightTheme as or, ModifyPasswordCheckResult as ot, CINEMATIC_TRANSITION_KEYFRAMES as p, SmartArtLayout as pi, ViewerCustomizationController as pn, ElementAction as pr, OptionsSettingId as pt, Guide as q, resolveSlideTransition as qn, PptxPresentationProperties as qr, ShapePresetType as qt, AccountAuthConfig as r, PptxTextStyleLevels as ri, TextAdvancedChanges as rn, defaultThemeColors as rr, MasterViewCrudAction as rt, BACKSTAGE_CARD_IDS as s, PptxThemeFontScheme as si, VIEWER_DIALOG_IDS as sn, AccessibilityIssue as sr, OPTIONS_PAGE_IDS as st, TransitionOverlayParams as t, PptxTableData as ti, TOOLBAR_BUTTON_IDS as tn, defaultCssVars as tr, InsertChartKind as tt, BackstageCustomization as u, PptxViewProperties as ui, VIEWER_PANEL_IDS as un, PptxHandlerSaveOptions as ur, OptionsCustomization as ut, CollabLoadOrigin as v, XmlObject as vi, ViewerMode as vn, ParsedTableStyleMap as vr, PPTX_OPEN_ACCEPT as vt, CompatibilityWarningToast as w, ViewportFitPadding as wn, PptxAnimationTimelineAnchor as wr, PresentationSnapshot as wt, CollaborationRole as x, ViewerPanelId as xn, PptxAnimationPreset as xr, PowerPointViewerAPI as xt, CollaborationConfig as y, ViewerOptionPrimitive as yn, PptxAfterAnimationAction as yr, PRESENTATION_OPEN_EXTENSIONS as yt, ElementUpdate as z, loadSessionDeck as zn, PptxEmbeddedFont as zr, RibbonTransitionDraft as zt };
|
|
15507
|
+
//# sourceMappingURL=transition-overlay-f0pbzLt7.d.ts.map
|