pptx-angular-viewer 2.9.0 → 2.10.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 +2 -0
- package/fesm2022/{pptx-angular-viewer-chat-history-idb-_aHj4bRh.mjs → pptx-angular-viewer-chat-history-idb-BqhL79Dq.mjs} +2 -2
- package/fesm2022/{pptx-angular-viewer-chat-history-idb-_aHj4bRh.mjs.map → pptx-angular-viewer-chat-history-idb-BqhL79Dq.mjs.map} +1 -1
- package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-DxH15bh-.mjs → pptx-angular-viewer-pptx-angular-viewer-C20L99Zu.mjs} +1442 -260
- package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-DxH15bh-.mjs.map → pptx-angular-viewer-pptx-angular-viewer-C20L99Zu.mjs.map} +1 -1
- package/fesm2022/pptx-angular-viewer.mjs +1 -1
- package/package.json +1 -1
- package/types/pptx-angular-viewer.d.ts +247 -29
|
@@ -2,7 +2,7 @@ import { NgStyle, NgTemplateOutlet, NgClass } from '@angular/common';
|
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { InjectionToken, input, output, computed, ChangeDetectionStrategy, Component, signal, Injectable, inject, DestroyRef, Injector, effect, viewChild, ElementRef, HostListener, afterNextRender, Renderer2, ViewEncapsulation, forwardRef, untracked } from '@angular/core';
|
|
4
4
|
import { TranslatePipe, TranslateService, translate } from '@ngx-translate/core';
|
|
5
|
-
import { THEME_PRESETS, guideEmuToPx, getShapeClipPath, getAdjustmentAwareClipPath, getShapeClipPathFromPreset, getCloudPathForRendering, ooxmlGradientAngleToCssDegrees, hasShapeProperties, applyDrawingColorTransforms as applyDrawingColorTransforms$1, hslToRgb as hslToRgb$1, PRESET_COLOR_MAP, isImageLikeElement, hasTextProperties, stripXmlOrderSuffix, orderedXmlKey, chartDataAddSeries, chartDataRemoveSeries, chartDataAddCategory, chartDataRemoveCategory, chartDataUpdatePoint, MIN_ELEMENT_SIZE as MIN_ELEMENT_SIZE$2, getLinkedTextBoxSegments, deriveSlideTitle, getSubstituteFontFamily, svgPathToPolygons, THEME_COLOR_SCHEME_KEYS, createBuiltinVariables, resolveCoordinate, PptxHandler, deobfuscateFont, detectFontFormat, checkMissingAltText, checkMissingSlideTitle, checkLowContrast, checkComplexTables, checkBlankSlide, checkDuplicateTitles, createChartElement, PptxMarkdownConverter, ThemePresets, formatCommentTimestamp as formatCommentTimestamp$1, EncryptedFileError, parseSignatureXml, cloneSlide as cloneSlide$1, cloneTemplateElementsBySlideId as cloneTemplateElementsBySlideId$1, cloneElement as cloneElement$1, updateSmartArtNodeText, setSmartArtNodeStyle, isInkElement, parseDataUrlToBytes, isZoomElement, SvgExporter, applyThemeToData, pptxActionToElementAction, elementActionToPptxAction, setChartTitle, setChartLegend, setChartDataLabels, setChartAxis, setChartSeriesTrendline, setChartSeriesErrorBars, setChartDataPointLabel, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, chartDataChangeType, getOleObjectTypeLabel, addSmartArtNodeAsChild, removeSmartArtNode, promoteSmartArtNode, demoteSmartArtNode, reorderSmartArtNode, switchSmartArtLayout, SWITCHABLE_LAYOUT_TYPES, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, applyThemeOverrideToSlide, TRANSITION_VALID_DIRECTIONS, getAnimationPresetInfo } from 'pptx-viewer-core';
|
|
5
|
+
import { THEME_PRESETS, guideEmuToPx, getShapeClipPath, getAdjustmentAwareClipPath, getShapeClipPathFromPreset, getCloudPathForRendering, ooxmlGradientAngleToCssDegrees, hasShapeProperties, applyDrawingColorTransforms as applyDrawingColorTransforms$1, hslToRgb as hslToRgb$1, PRESET_COLOR_MAP, isImageLikeElement, hasTextProperties, stripXmlOrderSuffix, orderedXmlKey, chartDataAddSeries, chartDataRemoveSeries, chartDataAddCategory, chartDataRemoveCategory, chartDataUpdatePoint, rebuildTableStructureInRawXml, updateCellTextInRawXml, MIN_ELEMENT_SIZE as MIN_ELEMENT_SIZE$2, getLinkedTextBoxSegments, deriveSlideTitle, getSubstituteFontFamily, svgPathToPolygons, THEME_COLOR_SCHEME_KEYS, createBuiltinVariables, resolveCoordinate, PptxHandler, deobfuscateFont, detectFontFormat, checkMissingAltText, checkMissingSlideTitle, checkLowContrast, checkComplexTables, checkBlankSlide, checkDuplicateTitles, createChartElement, PptxMarkdownConverter, ThemePresets, formatCommentTimestamp as formatCommentTimestamp$1, EncryptedFileError, parseSignatureXml, cloneSlide as cloneSlide$1, cloneTemplateElementsBySlideId as cloneTemplateElementsBySlideId$1, cloneElement as cloneElement$1, updateSmartArtNodeText, setSmartArtNodeStyle, isInkElement, parseDataUrlToBytes, isZoomElement, SvgExporter, applyThemeToData, pptxActionToElementAction, elementActionToPptxAction, setChartTitle, setChartLegend, setChartDataLabels, setChartAxis, setChartSeriesTrendline, setChartSeriesErrorBars, setChartDataPointLabel, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, chartDataChangeType, getOleObjectTypeLabel, addSmartArtNodeAsChild, removeSmartArtNode, promoteSmartArtNode, demoteSmartArtNode, reorderSmartArtNode, switchSmartArtLayout, SWITCHABLE_LAYOUT_TYPES, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, applyThemeOverrideToSlide, TRANSITION_VALID_DIRECTIONS, getAnimationPresetInfo } from 'pptx-viewer-core';
|
|
6
6
|
import DOMPurify from 'dompurify';
|
|
7
7
|
import { z } from 'zod';
|
|
8
8
|
import * as mcp from 'pptx-viewer-mcp';
|
|
@@ -6226,6 +6226,154 @@ const EQUATION_TEMPLATES = [
|
|
|
6226
6226
|
},
|
|
6227
6227
|
];
|
|
6228
6228
|
|
|
6229
|
+
/**
|
|
6230
|
+
* DOMPurify wrappers shared by every markup-sanitising call site (MathML/SVG
|
|
6231
|
+
* equation rendering, print-document/SVG assembly). DOMPurify's factory has
|
|
6232
|
+
* no working `sanitize` until handed a `window`, so in non-DOM contexts
|
|
6233
|
+
* (node-based tests, SSR without jsdom) these degrade rather than throw.
|
|
6234
|
+
*
|
|
6235
|
+
* Two degradation strategies, picked per call site by how the sanitised
|
|
6236
|
+
* output is used:
|
|
6237
|
+
* - {@link sanitizeMarkupOrRaw}: returns the untouched input outside a DOM.
|
|
6238
|
+
* Safe when the caller only ever renders the result in the browser (e.g.
|
|
6239
|
+
* `dangerouslySetInnerHTML` / `v-html`), so the fallback path never
|
|
6240
|
+
* reaches a real sink.
|
|
6241
|
+
* - {@link sanitizeMarkupOrEmpty}: returns `''` outside a DOM (fail closed).
|
|
6242
|
+
* Used where the sanitised string is unconditionally spliced into a
|
|
6243
|
+
* larger assembled document (print HTML/SVG) with no further gate, so a
|
|
6244
|
+
* silent pass-through of the raw, unsanitised input would defeat the
|
|
6245
|
+
* sanitisation entirely.
|
|
6246
|
+
*/
|
|
6247
|
+
function purifyFn() {
|
|
6248
|
+
const purify = DOMPurify;
|
|
6249
|
+
return typeof purify.sanitize === 'function' ? purify.sanitize : undefined;
|
|
6250
|
+
}
|
|
6251
|
+
/** Sanitise `markup`; outside a DOM, returns the raw input unchanged. */
|
|
6252
|
+
function sanitizeMarkupOrRaw(markup, config) {
|
|
6253
|
+
const sanitize = purifyFn();
|
|
6254
|
+
return sanitize ? sanitize(markup, config) : markup;
|
|
6255
|
+
}
|
|
6256
|
+
/** Sanitise `markup`; outside a DOM, returns `''` (fail closed). */
|
|
6257
|
+
function sanitizeMarkupOrEmpty(markup, config) {
|
|
6258
|
+
const sanitize = purifyFn();
|
|
6259
|
+
return sanitize ? sanitize(markup, config) : '';
|
|
6260
|
+
}
|
|
6261
|
+
|
|
6262
|
+
/**
|
|
6263
|
+
* MathML / SVG markup sanitisation, shared by every binding's equation
|
|
6264
|
+
* renderer.
|
|
6265
|
+
*
|
|
6266
|
+
* Equations are converted from OOXML OMML to a MathML markup string (see
|
|
6267
|
+
* {@link ./omml-to-mathml}) and then injected into the DOM via the binding's
|
|
6268
|
+
* raw-HTML mechanism (`dangerouslySetInnerHTML` / `v-html`). To keep that
|
|
6269
|
+
* injection safe we run the markup through DOMPurify with the MathML + SVG
|
|
6270
|
+
* profiles enabled, so `<math>` / `<mfrac>` / `<msqrt>` / `<svg>` survive while
|
|
6271
|
+
* scriptable content is stripped.
|
|
6272
|
+
*
|
|
6273
|
+
* All five bindings consume this, Angular included: its equation renderer and
|
|
6274
|
+
* editor reach the DOM through `DomSanitizer.bypassSecurityTrustHtml`, which
|
|
6275
|
+
* turns Angular's own sanitiser OFF, so it needs this helper more than the
|
|
6276
|
+
* others rather than less. (An earlier note here claimed the opposite and left
|
|
6277
|
+
* Angular injecting unsanitised equation markup.)
|
|
6278
|
+
*/
|
|
6279
|
+
/**
|
|
6280
|
+
* Safely sanitise a MathML/SVG markup string.
|
|
6281
|
+
*
|
|
6282
|
+
* In browser environments DOMPurify ships with `sanitize` ready to go. In
|
|
6283
|
+
* non-DOM contexts (node-based tests, SSR without jsdom) there is no
|
|
6284
|
+
* sanitizer to run, and the markup can originate from an untrusted OOXML
|
|
6285
|
+
* equation, so this fails closed (empty string) rather than passing raw,
|
|
6286
|
+
* unsanitised markup through to a caller that injects it as HTML.
|
|
6287
|
+
*
|
|
6288
|
+
* @param markup - MathML (optionally with embedded SVG) markup to sanitise.
|
|
6289
|
+
* @returns The sanitised markup, or `''` when no DOM sanitizer is available.
|
|
6290
|
+
*/
|
|
6291
|
+
function sanitizeMathMl(markup) {
|
|
6292
|
+
const sanitized = sanitizeMarkupOrEmpty(markup, { USE_PROFILES: { mathMl: true, svg: true } });
|
|
6293
|
+
// DOMPurify's HTML parser can retain MathML descendants while dropping the
|
|
6294
|
+
// outer namespace-bearing <math> node. Restore that generated, constant
|
|
6295
|
+
// wrapper so browsers keep the fragment in the MathML rendering context.
|
|
6296
|
+
if (/<math(?:\s|>)/iu.test(markup) && !/<math(?:\s|>)/iu.test(sanitized) && sanitized) {
|
|
6297
|
+
return `<math xmlns="http://www.w3.org/1998/Math/MathML" display="inline">${sanitized}</math>`;
|
|
6298
|
+
}
|
|
6299
|
+
return sanitized;
|
|
6300
|
+
}
|
|
6301
|
+
|
|
6302
|
+
/**
|
|
6303
|
+
* `equation-compile` - the LaTeX -> OMML -> sanitised MathML pipeline that backs
|
|
6304
|
+
* every binding's Insert > Equation dialog.
|
|
6305
|
+
*
|
|
6306
|
+
* The three steps it chains already lived in shared
|
|
6307
|
+
* ({@link ./latex-to-omml}, {@link ./omml-to-mathml}, {@link ./mathml-sanitize}),
|
|
6308
|
+
* but each of the five bindings hand-rolled the glue that joins them, and the
|
|
6309
|
+
* copies had drifted: one skipped sanitisation entirely and one carried its own
|
|
6310
|
+
* fail-open DOMPurify wrapper. Chaining them here means the security posture and
|
|
6311
|
+
* the failure behaviour are decided once.
|
|
6312
|
+
*
|
|
6313
|
+
* WHY every failure collapses to an empty result instead of throwing: the editor
|
|
6314
|
+
* recompiles on every keystroke, so most intermediate strings are invalid LaTeX
|
|
6315
|
+
* (`\fra`, `\frac{`, ...). Returning `{ mathml: '', omml: {} }` is what lets the
|
|
6316
|
+
* dialog fall back to its "preview will appear here" placeholder and keep the
|
|
6317
|
+
* Insert button disabled while the user is mid-expression, with no error path.
|
|
6318
|
+
*
|
|
6319
|
+
* WHY the MathML is sanitised here rather than at each injection site: the
|
|
6320
|
+
* markup is fed to `dangerouslySetInnerHTML` / `v-html` / `{@html}` / raw
|
|
6321
|
+
* `innerHTML`, and OMML can arrive from an untrusted deck (edit mode seeds the
|
|
6322
|
+
* textarea from an existing equation). Sanitising at the source means a binding
|
|
6323
|
+
* cannot forget. {@link sanitizeMathMl} fails closed (empty) outside a DOM.
|
|
6324
|
+
*
|
|
6325
|
+
* @module render/equation-compile
|
|
6326
|
+
*/
|
|
6327
|
+
/**
|
|
6328
|
+
* The result every failure path collapses to. Built fresh per call rather than
|
|
6329
|
+
* shared from a module constant: callers hand the `omml` object straight to the
|
|
6330
|
+
* editor as an insert payload, and a shared `{}` would let one dialog's mutation
|
|
6331
|
+
* leak into the next.
|
|
6332
|
+
*/
|
|
6333
|
+
function emptyResult() {
|
|
6334
|
+
return { mathml: '', omml: {} };
|
|
6335
|
+
}
|
|
6336
|
+
/**
|
|
6337
|
+
* Compile a LaTeX source string into `{ mathml, omml }`.
|
|
6338
|
+
*
|
|
6339
|
+
* Never throws: empty, whitespace-only and unparseable input all yield the empty
|
|
6340
|
+
* result, so callers can gate their preview on `Object.keys(omml).length > 0`.
|
|
6341
|
+
*/
|
|
6342
|
+
function compileLatexEquation(source) {
|
|
6343
|
+
const trimmed = source.trim();
|
|
6344
|
+
if (!trimmed) {
|
|
6345
|
+
return emptyResult();
|
|
6346
|
+
}
|
|
6347
|
+
try {
|
|
6348
|
+
const omml = convertLatexToOmml(trimmed);
|
|
6349
|
+
const raw = convertOmmlToMathMl(omml);
|
|
6350
|
+
return { mathml: raw ? sanitizeMathMl(raw) : '', omml };
|
|
6351
|
+
}
|
|
6352
|
+
catch {
|
|
6353
|
+
return emptyResult();
|
|
6354
|
+
}
|
|
6355
|
+
}
|
|
6356
|
+
/**
|
|
6357
|
+
* Convert a LaTeX string straight to sanitised MathML; `''` on empty input or
|
|
6358
|
+
* any failure. The preview-only half of {@link compileLatexEquation}, used by
|
|
6359
|
+
* the template tiles which never need the OMML.
|
|
6360
|
+
*/
|
|
6361
|
+
function latexToMathMl(source) {
|
|
6362
|
+
return compileLatexEquation(source).mathml;
|
|
6363
|
+
}
|
|
6364
|
+
/**
|
|
6365
|
+
* Compile the shared {@link EQUATION_TEMPLATES} catalogue to MathML, index for
|
|
6366
|
+
* index, for the dialog's starter-formula tiles.
|
|
6367
|
+
*
|
|
6368
|
+
* Deliberately NOT memoised: `sanitizeMathMl` fails closed without a DOM, so a
|
|
6369
|
+
* cached result computed during SSR / module evaluation would freeze an array of
|
|
6370
|
+
* empty strings into a page that later hydrates in a real browser. Bindings that
|
|
6371
|
+
* want it computed once do so at their own component scope.
|
|
6372
|
+
*/
|
|
6373
|
+
function compileEquationTemplateMathMl() {
|
|
6374
|
+
return EQUATION_TEMPLATES.map((tmpl) => latexToMathMl(tmpl.latex));
|
|
6375
|
+
}
|
|
6376
|
+
|
|
6229
6377
|
/**
|
|
6230
6378
|
* Framework-agnostic chart helpers, a focused Vue port of the React package's
|
|
6231
6379
|
* `viewer/utils/chart-helpers.ts`, `chart-layout.ts`, and
|
|
@@ -17928,6 +18076,138 @@ class PresentationAnimationController {
|
|
|
17928
18076
|
}
|
|
17929
18077
|
}
|
|
17930
18078
|
|
|
18079
|
+
/**
|
|
18080
|
+
* `animation-media-playback` - the DOM half of OOXML `p:cmd` media commands.
|
|
18081
|
+
*
|
|
18082
|
+
* {@link ./animation-media-commands} recognises and parses a `p:cmd` node into a
|
|
18083
|
+
* {@link ParsedMediaCommand}; this module applies that verb to a real
|
|
18084
|
+
* `<video>` / `<audio>` node during slide-show playback.
|
|
18085
|
+
*
|
|
18086
|
+
* WHY it is shared even though it touches the DOM: only the *lookup* of the
|
|
18087
|
+
* target node is per-binding (React keeps a shapeId -> node registry populated
|
|
18088
|
+
* by its media renderer; the other four query the live stage by
|
|
18089
|
+
* `data-element-id`). The verb mapping itself (play / pause / stop / seek, plus
|
|
18090
|
+
* swallowing the promise rejection from a blocked autoplay and the
|
|
18091
|
+
* `InvalidStateError` from seeking a not-yet-seekable element) is identical
|
|
18092
|
+
* everywhere, and was copied five times before this module existed. Callers
|
|
18093
|
+
* inject their lookup via {@link runMediaCommand}; the common `data-element-id`
|
|
18094
|
+
* lookup is provided here as {@link findMediaElementByElementId}.
|
|
18095
|
+
*
|
|
18096
|
+
* @module render/animation-media-playback
|
|
18097
|
+
*/
|
|
18098
|
+
/**
|
|
18099
|
+
* Apply a parsed media verb to a media element.
|
|
18100
|
+
*
|
|
18101
|
+
* Both side effects are deliberately guarded: `play()` returns a promise that
|
|
18102
|
+
* rejects when autoplay policy blocks it or the element is not ready, and
|
|
18103
|
+
* assigning `currentTime` throws while the element has no seekable range. A
|
|
18104
|
+
* slide show must not surface either as an unhandled error, so both degrade to
|
|
18105
|
+
* a no-op.
|
|
18106
|
+
*
|
|
18107
|
+
* @returns `true` when the verb was applied.
|
|
18108
|
+
*/
|
|
18109
|
+
function applyMediaCommandVerb(el, parsed) {
|
|
18110
|
+
const safePlay = () => {
|
|
18111
|
+
void el.play().catch(() => {
|
|
18112
|
+
/* autoplay blocked or not ready: ignore */
|
|
18113
|
+
});
|
|
18114
|
+
};
|
|
18115
|
+
const safeSeek = (seconds) => {
|
|
18116
|
+
try {
|
|
18117
|
+
el.currentTime = seconds;
|
|
18118
|
+
}
|
|
18119
|
+
catch {
|
|
18120
|
+
/* not seekable yet: ignore */
|
|
18121
|
+
}
|
|
18122
|
+
};
|
|
18123
|
+
switch (parsed.verb) {
|
|
18124
|
+
case 'playFrom':
|
|
18125
|
+
safeSeek(parsed.seekSeconds ?? 0);
|
|
18126
|
+
safePlay();
|
|
18127
|
+
return true;
|
|
18128
|
+
case 'play':
|
|
18129
|
+
safePlay();
|
|
18130
|
+
return true;
|
|
18131
|
+
case 'pause':
|
|
18132
|
+
el.pause();
|
|
18133
|
+
return true;
|
|
18134
|
+
case 'stop':
|
|
18135
|
+
el.pause();
|
|
18136
|
+
safeSeek(0);
|
|
18137
|
+
return true;
|
|
18138
|
+
case 'togglePlay':
|
|
18139
|
+
if (el.paused) {
|
|
18140
|
+
safePlay();
|
|
18141
|
+
}
|
|
18142
|
+
else {
|
|
18143
|
+
el.pause();
|
|
18144
|
+
}
|
|
18145
|
+
return true;
|
|
18146
|
+
default:
|
|
18147
|
+
return false;
|
|
18148
|
+
}
|
|
18149
|
+
}
|
|
18150
|
+
/**
|
|
18151
|
+
* Find the `<video>` / `<audio>` for an element id by walking `data-element-id`
|
|
18152
|
+
* wrappers under `root`.
|
|
18153
|
+
*
|
|
18154
|
+
* The id may sit on the media node itself or on the wrapper a binding renders
|
|
18155
|
+
* around it, so both shapes are accepted. Pass the slide stage as `root` where
|
|
18156
|
+
* possible: the thumbnail rail and the off-screen export stage carry the same
|
|
18157
|
+
* element ids, and a document-wide lookup can therefore hit the wrong copy.
|
|
18158
|
+
*
|
|
18159
|
+
* Returns `undefined` outside a DOM (SSR / node tests) rather than throwing.
|
|
18160
|
+
*/
|
|
18161
|
+
function findMediaElementByElementId(targetId, root) {
|
|
18162
|
+
if (typeof HTMLMediaElement === 'undefined') {
|
|
18163
|
+
return undefined;
|
|
18164
|
+
}
|
|
18165
|
+
const scope = root ?? (typeof document === 'undefined' ? null : document);
|
|
18166
|
+
if (!scope) {
|
|
18167
|
+
return undefined;
|
|
18168
|
+
}
|
|
18169
|
+
for (const wrapper of scope.querySelectorAll('[data-element-id]')) {
|
|
18170
|
+
if (wrapper.dataset['elementId'] !== targetId) {
|
|
18171
|
+
continue;
|
|
18172
|
+
}
|
|
18173
|
+
if (wrapper instanceof HTMLMediaElement) {
|
|
18174
|
+
return wrapper;
|
|
18175
|
+
}
|
|
18176
|
+
const media = wrapper.querySelector('video, audio');
|
|
18177
|
+
if (media instanceof HTMLMediaElement) {
|
|
18178
|
+
return media;
|
|
18179
|
+
}
|
|
18180
|
+
}
|
|
18181
|
+
return undefined;
|
|
18182
|
+
}
|
|
18183
|
+
/**
|
|
18184
|
+
* Run a timeline media command against whatever node `resolve` hands back.
|
|
18185
|
+
*
|
|
18186
|
+
* @returns `false` when the target cannot be resolved or the command string has
|
|
18187
|
+
* no browser mapping, so the caller can treat the step as a no-op.
|
|
18188
|
+
*/
|
|
18189
|
+
function runMediaCommand(command, resolve) {
|
|
18190
|
+
const el = resolve(command.targetId);
|
|
18191
|
+
if (!el) {
|
|
18192
|
+
return false;
|
|
18193
|
+
}
|
|
18194
|
+
const parsed = parseMediaCommand(command.command);
|
|
18195
|
+
if (!parsed) {
|
|
18196
|
+
return false;
|
|
18197
|
+
}
|
|
18198
|
+
return applyMediaCommandVerb(el, parsed);
|
|
18199
|
+
}
|
|
18200
|
+
/**
|
|
18201
|
+
* Run a timeline media command against the live DOM, resolving the target by
|
|
18202
|
+
* `data-element-id`. The default for bindings without an element registry.
|
|
18203
|
+
*
|
|
18204
|
+
* @param frameRoot - Lazily resolves the slide stage to scope the lookup to;
|
|
18205
|
+
* omit to search the whole document.
|
|
18206
|
+
*/
|
|
18207
|
+
function executeMediaCommandInDom(command, frameRoot) {
|
|
18208
|
+
return runMediaCommand(command, (targetId) => findMediaElementByElementId(targetId, frameRoot?.() ?? null));
|
|
18209
|
+
}
|
|
18210
|
+
|
|
17931
18211
|
/**
|
|
17932
18212
|
* `animation-preview` — pure preview-descriptor construction for the editor's
|
|
17933
18213
|
* animation panel: map an editor preset (+ direction / timing) to a CSS
|
|
@@ -20836,6 +21116,200 @@ function setCellText(element, rowIndex, colIndex, text) {
|
|
|
20836
21116
|
return { ...element, tableData: { ...tableData, rows } };
|
|
20837
21117
|
}
|
|
20838
21118
|
|
|
21119
|
+
/**
|
|
21120
|
+
* Build the render model for a table element's inspector data grid.
|
|
21121
|
+
*
|
|
21122
|
+
* Rows are normalised to `colCount` cells, so a deck with ragged rows renders a
|
|
21123
|
+
* rectangular grid instead of dropping cells off the right-hand edge.
|
|
21124
|
+
*
|
|
21125
|
+
* @param element - The table element being inspected (not mutated).
|
|
21126
|
+
* @returns A fully normalised, render-ready grid model.
|
|
21127
|
+
*
|
|
21128
|
+
* @example
|
|
21129
|
+
* ```ts
|
|
21130
|
+
* const grid = buildTableDataGrid(tableElement);
|
|
21131
|
+
* for (const row of grid.rows) {
|
|
21132
|
+
* for (const cell of row.cells) {
|
|
21133
|
+
* // cell.rowIndex / cell.colIndex / cell.text
|
|
21134
|
+
* }
|
|
21135
|
+
* }
|
|
21136
|
+
* ```
|
|
21137
|
+
*/
|
|
21138
|
+
function buildTableDataGrid(element) {
|
|
21139
|
+
const tableData = element.tableData;
|
|
21140
|
+
const sourceRows = tableData?.rows ?? [];
|
|
21141
|
+
const colCount = tableData?.columnWidths.length ?? 0;
|
|
21142
|
+
const colIndices = Array.from({ length: colCount }, (_unused, index) => index);
|
|
21143
|
+
const rows = sourceRows.map((row, rowIndex) => ({
|
|
21144
|
+
rowIndex,
|
|
21145
|
+
cells: colIndices.map((colIndex) => ({
|
|
21146
|
+
rowIndex,
|
|
21147
|
+
colIndex,
|
|
21148
|
+
text: row.cells[colIndex]?.text ?? '',
|
|
21149
|
+
})),
|
|
21150
|
+
}));
|
|
21151
|
+
return {
|
|
21152
|
+
rowCount: sourceRows.length,
|
|
21153
|
+
colCount,
|
|
21154
|
+
colIndices,
|
|
21155
|
+
rows,
|
|
21156
|
+
canRemoveRow: sourceRows.length > 1,
|
|
21157
|
+
canRemoveColumn: colCount > 1,
|
|
21158
|
+
};
|
|
21159
|
+
}
|
|
21160
|
+
|
|
21161
|
+
/**
|
|
21162
|
+
* Apply a pure `PptxTableData` transform to an element, returning a new element.
|
|
21163
|
+
*
|
|
21164
|
+
* Returns the element unchanged when it carries no table data or the transform
|
|
21165
|
+
* was a no-op (returned the same reference), so a rejected edit does not push a
|
|
21166
|
+
* pointless history entry.
|
|
21167
|
+
*
|
|
21168
|
+
* CRITICAL: a table parsed from a real `.pptx` keeps its graphic-frame markup in
|
|
21169
|
+
* `rawXml`, and BOTH the renderers and the save writer read that markup in
|
|
21170
|
+
* preference to `tableData` (`tableData` is only the fallback for tables created
|
|
21171
|
+
* programmatically via Insert > Table). So a `tableData`-only patch is invisible:
|
|
21172
|
+
* the canvas keeps painting the old text and the edit is dropped on save. Every
|
|
21173
|
+
* structural edit therefore rebuilds `rawXml` alongside it, exactly as the
|
|
21174
|
+
* on-canvas cell editor does.
|
|
21175
|
+
*/
|
|
21176
|
+
function withTableData$1(element, transform) {
|
|
21177
|
+
const tableData = element.tableData;
|
|
21178
|
+
if (!tableData) {
|
|
21179
|
+
return element;
|
|
21180
|
+
}
|
|
21181
|
+
const next = transform(tableData);
|
|
21182
|
+
if (next === tableData) {
|
|
21183
|
+
return element;
|
|
21184
|
+
}
|
|
21185
|
+
const updated = { ...element, tableData: next };
|
|
21186
|
+
if (element.rawXml) {
|
|
21187
|
+
const rawXml = rebuildTableStructureInRawXml(element, next);
|
|
21188
|
+
if (rawXml) {
|
|
21189
|
+
updated.rawXml = rawXml;
|
|
21190
|
+
}
|
|
21191
|
+
}
|
|
21192
|
+
return updated;
|
|
21193
|
+
}
|
|
21194
|
+
/**
|
|
21195
|
+
* Set one cell's text, keeping `rawXml` in sync so the edit actually paints and
|
|
21196
|
+
* survives a save. Prefer this over the bare `setCellText` whenever the edit
|
|
21197
|
+
* originates from a UI surface: see the note on {@link withTableData}.
|
|
21198
|
+
*
|
|
21199
|
+
* @param element - The source table element (not mutated).
|
|
21200
|
+
* @param rowIndex - Zero-based row index of the cell.
|
|
21201
|
+
* @param colIndex - Zero-based column index of the cell.
|
|
21202
|
+
* @param text - New plain-text content for the cell.
|
|
21203
|
+
* @returns A new element with the cell text applied to both representations.
|
|
21204
|
+
*/
|
|
21205
|
+
function setTableElementCellText(element, rowIndex, colIndex, text) {
|
|
21206
|
+
const updated = setCellText(element, rowIndex, colIndex, text);
|
|
21207
|
+
if (updated === element || !element.rawXml) {
|
|
21208
|
+
return updated;
|
|
21209
|
+
}
|
|
21210
|
+
const rawXml = updateCellTextInRawXml(element, rowIndex, colIndex, text);
|
|
21211
|
+
return rawXml ? { ...updated, rawXml } : updated;
|
|
21212
|
+
}
|
|
21213
|
+
/**
|
|
21214
|
+
* Insert a blank row above or below `rowIdx`, preserving merge spans.
|
|
21215
|
+
*
|
|
21216
|
+
* @param element - The source table element (not mutated).
|
|
21217
|
+
* @param rowIdx - Zero-based reference row.
|
|
21218
|
+
* @param position - Whether the new row goes above or below the reference row.
|
|
21219
|
+
* @returns A new element with the row inserted.
|
|
21220
|
+
*/
|
|
21221
|
+
function insertTableElementRow(element, rowIdx, position) {
|
|
21222
|
+
return withTableData$1(element, (data) => insertTableRow(data, rowIdx, position));
|
|
21223
|
+
}
|
|
21224
|
+
/**
|
|
21225
|
+
* Remove the row at `rowIdx`, preserving merge spans. No-op on the last row.
|
|
21226
|
+
*
|
|
21227
|
+
* @param element - The source table element (not mutated).
|
|
21228
|
+
* @param rowIdx - Zero-based row to remove.
|
|
21229
|
+
* @returns A new element with the row removed.
|
|
21230
|
+
*/
|
|
21231
|
+
function removeTableElementRow(element, rowIdx) {
|
|
21232
|
+
return withTableData$1(element, (data) => deleteTableRow(data, rowIdx));
|
|
21233
|
+
}
|
|
21234
|
+
/**
|
|
21235
|
+
* Insert a blank column left or right of `colIdx`, preserving merge spans.
|
|
21236
|
+
*
|
|
21237
|
+
* @param element - The source table element (not mutated).
|
|
21238
|
+
* @param colIdx - Zero-based reference column.
|
|
21239
|
+
* @param position - Whether the new column goes left or right of the reference.
|
|
21240
|
+
* @returns A new element with the column inserted.
|
|
21241
|
+
*/
|
|
21242
|
+
function insertTableElementColumn(element, colIdx, position) {
|
|
21243
|
+
return withTableData$1(element, (data) => insertTableColumn(data, colIdx, position));
|
|
21244
|
+
}
|
|
21245
|
+
/**
|
|
21246
|
+
* Remove the column at `colIdx`, preserving merge spans. No-op on the last one.
|
|
21247
|
+
*
|
|
21248
|
+
* @param element - The source table element (not mutated).
|
|
21249
|
+
* @param colIdx - Zero-based column to remove.
|
|
21250
|
+
* @returns A new element with the column removed.
|
|
21251
|
+
*/
|
|
21252
|
+
function removeTableElementColumn(element, colIdx) {
|
|
21253
|
+
return withTableData$1(element, (data) => deleteTableColumn(data, colIdx));
|
|
21254
|
+
}
|
|
21255
|
+
/**
|
|
21256
|
+
* Append a blank row after the last one.
|
|
21257
|
+
*
|
|
21258
|
+
* Clamped to index 0 so an element whose table data is empty is a no-op rather
|
|
21259
|
+
* than an insert at index -1.
|
|
21260
|
+
*
|
|
21261
|
+
* @param element - The source table element (not mutated).
|
|
21262
|
+
* @returns A new element with a trailing row.
|
|
21263
|
+
*/
|
|
21264
|
+
function appendTableElementRow(element) {
|
|
21265
|
+
const rowCount = element.tableData?.rows.length ?? 0;
|
|
21266
|
+
if (rowCount === 0) {
|
|
21267
|
+
return element;
|
|
21268
|
+
}
|
|
21269
|
+
return insertTableElementRow(element, rowCount - 1, 'below');
|
|
21270
|
+
}
|
|
21271
|
+
/**
|
|
21272
|
+
* Remove the trailing row. No-op when the table has one row or none.
|
|
21273
|
+
*
|
|
21274
|
+
* @param element - The source table element (not mutated).
|
|
21275
|
+
* @returns A new element with the last row removed.
|
|
21276
|
+
*/
|
|
21277
|
+
function removeLastTableElementRow(element) {
|
|
21278
|
+
const rowCount = element.tableData?.rows.length ?? 0;
|
|
21279
|
+
if (rowCount === 0) {
|
|
21280
|
+
return element;
|
|
21281
|
+
}
|
|
21282
|
+
return removeTableElementRow(element, rowCount - 1);
|
|
21283
|
+
}
|
|
21284
|
+
/**
|
|
21285
|
+
* Append a blank column after the last one.
|
|
21286
|
+
*
|
|
21287
|
+
* Clamped to index 0 for the same reason as {@link appendTableElementRow}.
|
|
21288
|
+
*
|
|
21289
|
+
* @param element - The source table element (not mutated).
|
|
21290
|
+
* @returns A new element with a trailing column.
|
|
21291
|
+
*/
|
|
21292
|
+
function appendTableElementColumn(element) {
|
|
21293
|
+
const colCount = element.tableData?.columnWidths.length ?? 0;
|
|
21294
|
+
if (colCount === 0) {
|
|
21295
|
+
return element;
|
|
21296
|
+
}
|
|
21297
|
+
return insertTableElementColumn(element, colCount - 1, 'right');
|
|
21298
|
+
}
|
|
21299
|
+
/**
|
|
21300
|
+
* Remove the trailing column. No-op when the table has one column or none.
|
|
21301
|
+
*
|
|
21302
|
+
* @param element - The source table element (not mutated).
|
|
21303
|
+
* @returns A new element with the last column removed.
|
|
21304
|
+
*/
|
|
21305
|
+
function removeLastTableElementColumn(element) {
|
|
21306
|
+
const colCount = element.tableData?.columnWidths.length ?? 0;
|
|
21307
|
+
if (colCount === 0) {
|
|
21308
|
+
return element;
|
|
21309
|
+
}
|
|
21310
|
+
return removeTableElementColumn(element, colCount - 1);
|
|
21311
|
+
}
|
|
21312
|
+
|
|
20839
21313
|
/**
|
|
20840
21314
|
* Merge the cell at `(rowIndex, columnIndex)` with the next cell to its right.
|
|
20841
21315
|
* Returns the new `rows` array, or `null` when there is no mergeable neighbour.
|
|
@@ -25302,12 +25776,73 @@ function computeAutoFitTextStyle(input) {
|
|
|
25302
25776
|
* computing which text segments should render in each box of a linked text box
|
|
25303
25777
|
* chain. Framework-agnostic.
|
|
25304
25778
|
*/
|
|
25779
|
+
/**
|
|
25780
|
+
* Depth cap for the group walk below.
|
|
25781
|
+
*
|
|
25782
|
+
* Mirrors the loader's own `MAX_GROUP_DEPTH`: a deck can nest `p:grpSp` far
|
|
25783
|
+
* deeper than any human authors, and a cyclic tree assembled in memory (an
|
|
25784
|
+
* editor bug, a malformed collaboration patch) would otherwise recurse forever
|
|
25785
|
+
* during a render pass.
|
|
25786
|
+
*/
|
|
25787
|
+
const MAX_GROUP_DEPTH = 64;
|
|
25305
25788
|
/**
|
|
25306
25789
|
* Determine whether an element participates in a linked text box chain.
|
|
25307
25790
|
*/
|
|
25308
25791
|
function isLinkedTextBox(element) {
|
|
25309
25792
|
return hasTextProperties(element) && element.linkedTxbxId !== undefined;
|
|
25310
25793
|
}
|
|
25794
|
+
/**
|
|
25795
|
+
* Flatten a slide's element list so a chain's members can be found wherever
|
|
25796
|
+
* they sit in the shape tree.
|
|
25797
|
+
*
|
|
25798
|
+
* `a:linkedTxbx` carries an `id` that is scoped to the SLIDE PART, not to a
|
|
25799
|
+
* branch of the shape tree: nothing in ECMA-376 ties a chain to a single
|
|
25800
|
+
* `p:grpSp`, and grouping is a manipulation construct with no bearing on how
|
|
25801
|
+
* text flows. So chain resolution walks the whole tree, in document order, and
|
|
25802
|
+
* a chain works identically whether its boxes are top level, inside one group,
|
|
25803
|
+
* inside a nested group, or split across a group boundary. Before this walk the
|
|
25804
|
+
* chain builder only ever saw the top-level list, so a chain authored inside a
|
|
25805
|
+
* group resolved to nothing and its head painted the whole chain's text.
|
|
25806
|
+
*
|
|
25807
|
+
* Coordinate space deliberately needs no correction here. A group's children
|
|
25808
|
+
* are parsed with the group scale (`a:ext / a:chExt`) ALREADY baked into their
|
|
25809
|
+
* `width`/`height`; only `x`/`y` are rebased to be group-relative, and the
|
|
25810
|
+
* capacity estimate that drives the split reads size alone. Passing children
|
|
25811
|
+
* through untouched therefore splits a grouped chain at the same character
|
|
25812
|
+
* PowerPoint does, and rebasing them into slide space here would be wrong.
|
|
25813
|
+
*
|
|
25814
|
+
* Returns the input array unchanged when the slide holds no group, so the
|
|
25815
|
+
* common case allocates nothing.
|
|
25816
|
+
*/
|
|
25817
|
+
function flattenForChainResolution(elements) {
|
|
25818
|
+
if (!elements.some((el) => el.type === 'group')) {
|
|
25819
|
+
return elements;
|
|
25820
|
+
}
|
|
25821
|
+
const flat = [];
|
|
25822
|
+
// Visiting each group at most once makes a cyclic tree terminate exactly,
|
|
25823
|
+
// and keeps a member from being collected twice: the distribution map is
|
|
25824
|
+
// keyed by element ID, so a duplicate would overwrite that box's slice with
|
|
25825
|
+
// a later one and hand it the wrong text.
|
|
25826
|
+
const seen = new Set();
|
|
25827
|
+
const walk = (list, depth) => {
|
|
25828
|
+
for (const el of list) {
|
|
25829
|
+
if (el.type !== 'group') {
|
|
25830
|
+
flat.push(el);
|
|
25831
|
+
continue;
|
|
25832
|
+
}
|
|
25833
|
+
if (seen.has(el)) {
|
|
25834
|
+
continue;
|
|
25835
|
+
}
|
|
25836
|
+
seen.add(el);
|
|
25837
|
+
flat.push(el);
|
|
25838
|
+
if (depth < MAX_GROUP_DEPTH) {
|
|
25839
|
+
walk(el.children ?? [], depth + 1);
|
|
25840
|
+
}
|
|
25841
|
+
}
|
|
25842
|
+
};
|
|
25843
|
+
walk(elements, 0);
|
|
25844
|
+
return flat;
|
|
25845
|
+
}
|
|
25311
25846
|
/**
|
|
25312
25847
|
* Determine whether an element is the head (seq 0) of a linked text box chain.
|
|
25313
25848
|
*/
|
|
@@ -25328,30 +25863,41 @@ function isLinkedTextBoxHead(element) {
|
|
|
25328
25863
|
* its text-render site: a surface that does not (yet) thread the sibling list
|
|
25329
25864
|
* down, or renders an element outside any slide, degrades to the element's own
|
|
25330
25865
|
* authored segments instead of forcing a guard into each view layer.
|
|
25866
|
+
*
|
|
25867
|
+
* `slideElements` is the slide's TOP-LEVEL list in every binding, including at
|
|
25868
|
+
* a group child's render site, so the chain lookup flattens it first. The
|
|
25869
|
+
* not-a-chain guard runs before the flatten because this is a per-element,
|
|
25870
|
+
* per-render call and all but a handful of elements exit here.
|
|
25331
25871
|
*/
|
|
25332
25872
|
function getOverflowSegments(element, slideElements) {
|
|
25333
25873
|
if (!slideElements || slideElements.length === 0) {
|
|
25334
25874
|
return undefined;
|
|
25335
25875
|
}
|
|
25336
|
-
|
|
25876
|
+
if (!isLinkedTextBox(element)) {
|
|
25877
|
+
return undefined;
|
|
25878
|
+
}
|
|
25879
|
+
return getLinkedTextBoxSegments(element, flattenForChainResolution(slideElements));
|
|
25337
25880
|
}
|
|
25338
25881
|
/**
|
|
25339
25882
|
* Build a complete segment distribution map for all linked text box chains on a
|
|
25340
25883
|
* slide.
|
|
25341
25884
|
*
|
|
25342
25885
|
* Returns a map from element ID to the text segments that element should
|
|
25343
|
-
* render. Elements not in any chain are not included.
|
|
25886
|
+
* render. Elements not in any chain are not included. Group children are
|
|
25887
|
+
* included: the map is keyed by element ID, which is unique slide-wide, so a
|
|
25888
|
+
* caller can look up a nested box without knowing where it sits.
|
|
25344
25889
|
*/
|
|
25345
25890
|
function buildSlideOverflowMap(slideElements) {
|
|
25346
25891
|
const result = new Map();
|
|
25347
|
-
|
|
25892
|
+
const flat = flattenForChainResolution(slideElements);
|
|
25893
|
+
if (!flat.some((el) => isLinkedTextBox(el))) {
|
|
25348
25894
|
return result;
|
|
25349
25895
|
}
|
|
25350
|
-
for (const el of
|
|
25896
|
+
for (const el of flat) {
|
|
25351
25897
|
if (!isLinkedTextBox(el)) {
|
|
25352
25898
|
continue;
|
|
25353
25899
|
}
|
|
25354
|
-
const segments = getLinkedTextBoxSegments(el,
|
|
25900
|
+
const segments = getLinkedTextBoxSegments(el, flat);
|
|
25355
25901
|
if (segments !== undefined) {
|
|
25356
25902
|
result.set(el.id, segments);
|
|
25357
25903
|
}
|
|
@@ -26417,76 +26963,6 @@ function buildRunEffectStyle(style) {
|
|
|
26417
26963
|
return css;
|
|
26418
26964
|
}
|
|
26419
26965
|
|
|
26420
|
-
/**
|
|
26421
|
-
* DOMPurify wrappers shared by every markup-sanitising call site (MathML/SVG
|
|
26422
|
-
* equation rendering, print-document/SVG assembly). DOMPurify's factory has
|
|
26423
|
-
* no working `sanitize` until handed a `window`, so in non-DOM contexts
|
|
26424
|
-
* (node-based tests, SSR without jsdom) these degrade rather than throw.
|
|
26425
|
-
*
|
|
26426
|
-
* Two degradation strategies, picked per call site by how the sanitised
|
|
26427
|
-
* output is used:
|
|
26428
|
-
* - {@link sanitizeMarkupOrRaw}: returns the untouched input outside a DOM.
|
|
26429
|
-
* Safe when the caller only ever renders the result in the browser (e.g.
|
|
26430
|
-
* `dangerouslySetInnerHTML` / `v-html`), so the fallback path never
|
|
26431
|
-
* reaches a real sink.
|
|
26432
|
-
* - {@link sanitizeMarkupOrEmpty}: returns `''` outside a DOM (fail closed).
|
|
26433
|
-
* Used where the sanitised string is unconditionally spliced into a
|
|
26434
|
-
* larger assembled document (print HTML/SVG) with no further gate, so a
|
|
26435
|
-
* silent pass-through of the raw, unsanitised input would defeat the
|
|
26436
|
-
* sanitisation entirely.
|
|
26437
|
-
*/
|
|
26438
|
-
function purifyFn() {
|
|
26439
|
-
const purify = DOMPurify;
|
|
26440
|
-
return typeof purify.sanitize === 'function' ? purify.sanitize : undefined;
|
|
26441
|
-
}
|
|
26442
|
-
/** Sanitise `markup`; outside a DOM, returns the raw input unchanged. */
|
|
26443
|
-
function sanitizeMarkupOrRaw(markup, config) {
|
|
26444
|
-
const sanitize = purifyFn();
|
|
26445
|
-
return sanitize ? sanitize(markup, config) : markup;
|
|
26446
|
-
}
|
|
26447
|
-
/** Sanitise `markup`; outside a DOM, returns `''` (fail closed). */
|
|
26448
|
-
function sanitizeMarkupOrEmpty(markup, config) {
|
|
26449
|
-
const sanitize = purifyFn();
|
|
26450
|
-
return sanitize ? sanitize(markup, config) : '';
|
|
26451
|
-
}
|
|
26452
|
-
|
|
26453
|
-
/**
|
|
26454
|
-
* MathML / SVG markup sanitisation, shared by every binding's equation
|
|
26455
|
-
* renderer.
|
|
26456
|
-
*
|
|
26457
|
-
* Equations are converted from OOXML OMML to a MathML markup string (see
|
|
26458
|
-
* {@link ./omml-to-mathml}) and then injected into the DOM via the binding's
|
|
26459
|
-
* raw-HTML mechanism (`dangerouslySetInnerHTML` / `v-html`). To keep that
|
|
26460
|
-
* injection safe we run the markup through DOMPurify with the MathML + SVG
|
|
26461
|
-
* profiles enabled, so `<math>` / `<mfrac>` / `<msqrt>` / `<svg>` survive while
|
|
26462
|
-
* scriptable content is stripped.
|
|
26463
|
-
*
|
|
26464
|
-
* (Angular renders equations through its own `DomSanitizer`, so it does not
|
|
26465
|
-
* consume this helper.)
|
|
26466
|
-
*/
|
|
26467
|
-
/**
|
|
26468
|
-
* Safely sanitise a MathML/SVG markup string.
|
|
26469
|
-
*
|
|
26470
|
-
* In browser environments DOMPurify ships with `sanitize` ready to go. In
|
|
26471
|
-
* non-DOM contexts (node-based tests, SSR without jsdom) there is no
|
|
26472
|
-
* sanitizer to run, and the markup can originate from an untrusted OOXML
|
|
26473
|
-
* equation, so this fails closed (empty string) rather than passing raw,
|
|
26474
|
-
* unsanitised markup through to a caller that injects it as HTML.
|
|
26475
|
-
*
|
|
26476
|
-
* @param markup - MathML (optionally with embedded SVG) markup to sanitise.
|
|
26477
|
-
* @returns The sanitised markup, or `''` when no DOM sanitizer is available.
|
|
26478
|
-
*/
|
|
26479
|
-
function sanitizeMathMl(markup) {
|
|
26480
|
-
const sanitized = sanitizeMarkupOrEmpty(markup, { USE_PROFILES: { mathMl: true, svg: true } });
|
|
26481
|
-
// DOMPurify's HTML parser can retain MathML descendants while dropping the
|
|
26482
|
-
// outer namespace-bearing <math> node. Restore that generated, constant
|
|
26483
|
-
// wrapper so browsers keep the fragment in the MathML rendering context.
|
|
26484
|
-
if (/<math(?:\s|>)/iu.test(markup) && !/<math(?:\s|>)/iu.test(sanitized) && sanitized) {
|
|
26485
|
-
return `<math xmlns="http://www.w3.org/1998/Math/MathML" display="inline">${sanitized}</math>`;
|
|
26486
|
-
}
|
|
26487
|
-
return sanitized;
|
|
26488
|
-
}
|
|
26489
|
-
|
|
26490
26966
|
/**
|
|
26491
26967
|
* Font size (px) that a paragraph's CSS line box should be built from, or
|
|
26492
26968
|
* `undefined` when the paragraph declares nothing of its own.
|
|
@@ -40607,6 +41083,191 @@ function isNavigationAction(action) {
|
|
|
40607
41083
|
action.action === 'goto');
|
|
40608
41084
|
}
|
|
40609
41085
|
|
|
41086
|
+
/**
|
|
41087
|
+
* PowerPoint's Reading View, as a framework-agnostic state machine.
|
|
41088
|
+
*
|
|
41089
|
+
* Reading View is the third of PowerPoint's presentation views, and it is the
|
|
41090
|
+
* one this viewer never shipped: every binding rendered the ribbon button
|
|
41091
|
+
* permanently disabled. It is NOT a second slide show. The distinction the
|
|
41092
|
+
* bindings have to preserve is:
|
|
41093
|
+
*
|
|
41094
|
+
* Normal the editor: ribbon, thumbnails, inspector, canvas chrome
|
|
41095
|
+
* Reading View the deck at full WINDOW size, chrome reduced to a nav bar,
|
|
41096
|
+
* still inside the page, no Fullscreen API, no annotation
|
|
41097
|
+
* tools, no presenter console
|
|
41098
|
+
* Slide Show the deck at full SCREEN size via the Fullscreen API, with
|
|
41099
|
+
* the pointer tools, blackout, rehearsal and presenter console
|
|
41100
|
+
*
|
|
41101
|
+
* Reading View therefore deliberately does not reuse the presentation-session
|
|
41102
|
+
* machinery. Reusing it would drag fullscreen, blackout, ink and the audience
|
|
41103
|
+
* window in with it, which is precisely the weight a reader asked to escape.
|
|
41104
|
+
* What it DOES reuse is {@link mapPresentationKey}: PowerPoint honours the same
|
|
41105
|
+
* navigation keys in both views, and duplicating that table per binding is how
|
|
41106
|
+
* five viewers drift apart.
|
|
41107
|
+
*
|
|
41108
|
+
* Everything here is pure. The bindings own the markup and the event
|
|
41109
|
+
* listeners; they own no navigation rules.
|
|
41110
|
+
*
|
|
41111
|
+
* @module render/reading-view
|
|
41112
|
+
*/
|
|
41113
|
+
// ---------------------------------------------------------------------------
|
|
41114
|
+
// DOM contract
|
|
41115
|
+
// ---------------------------------------------------------------------------
|
|
41116
|
+
/**
|
|
41117
|
+
* Marks the reading-view root in every binding.
|
|
41118
|
+
*
|
|
41119
|
+
* A neutral data attribute rather than a class or a test id: `e2e/` addresses
|
|
41120
|
+
* all five viewers through one selector, and a class name is a styling decision
|
|
41121
|
+
* each binding is entitled to make differently.
|
|
41122
|
+
*/
|
|
41123
|
+
const READING_VIEW_ATTR = 'data-pptx-reading-view';
|
|
41124
|
+
/** Marks the "3 / 12" slide counter inside the reading-view nav bar. */
|
|
41125
|
+
const READING_VIEW_COUNTER_ATTR = 'data-pptx-reading-view-counter';
|
|
41126
|
+
/** Marks the scaled slide surface inside the reading view. */
|
|
41127
|
+
const READING_VIEW_STAGE_ATTR = 'data-pptx-reading-view-stage';
|
|
41128
|
+
/** The reading view closed, showing nothing. */
|
|
41129
|
+
const CLOSED_READING_VIEW = { open: false, slideIndex: 0 };
|
|
41130
|
+
/**
|
|
41131
|
+
* Open the reading view on `slideIndex`.
|
|
41132
|
+
*
|
|
41133
|
+
* Clamped rather than validated: entering from the ribbon while the deck is
|
|
41134
|
+
* empty, or on a stale index after a slide was deleted, should show the first
|
|
41135
|
+
* slide, not throw at the user.
|
|
41136
|
+
*/
|
|
41137
|
+
function openReadingView(slideIndex, slideCount) {
|
|
41138
|
+
return { open: true, slideIndex: clampIndex$1(slideIndex, slideCount) };
|
|
41139
|
+
}
|
|
41140
|
+
/** The reading view closed, discarding its position. */
|
|
41141
|
+
function closeReadingView() {
|
|
41142
|
+
return CLOSED_READING_VIEW;
|
|
41143
|
+
}
|
|
41144
|
+
/**
|
|
41145
|
+
* Translate a key press into a reading-view command.
|
|
41146
|
+
*
|
|
41147
|
+
* Delegates to the slide-show key table so the two views cannot disagree about
|
|
41148
|
+
* what Page Down does, then drops everything Reading View has no surface for.
|
|
41149
|
+
* The slide-show-only keys (pen, laser, blackout, rehearsal, "All Slides") are
|
|
41150
|
+
* mapped to `none` rather than silently falling through to navigation: a reader
|
|
41151
|
+
* pressing Ctrl+P wants their browser's print dialog, and swallowing the chord
|
|
41152
|
+
* to activate a pen that this view does not draw would be worse than ignoring
|
|
41153
|
+
* it.
|
|
41154
|
+
*
|
|
41155
|
+
* `buffer` carries PowerPoint's "type a slide number, then Enter" jump. Pass
|
|
41156
|
+
* one buffer for as long as the view stays open.
|
|
41157
|
+
*/
|
|
41158
|
+
function mapReadingViewKey(input, buffer) {
|
|
41159
|
+
const mapped = mapPresentationKey(input, buffer);
|
|
41160
|
+
switch (mapped.action) {
|
|
41161
|
+
case 'next':
|
|
41162
|
+
return { command: 'next' };
|
|
41163
|
+
case 'previous':
|
|
41164
|
+
return { command: 'previous' };
|
|
41165
|
+
case 'first':
|
|
41166
|
+
return { command: 'first' };
|
|
41167
|
+
case 'last':
|
|
41168
|
+
return { command: 'last' };
|
|
41169
|
+
case 'goto':
|
|
41170
|
+
// The key table speaks in 1-based slide numbers, the state in indexes.
|
|
41171
|
+
return { command: 'goto', slideIndex: mapped.slideNumber - 1 };
|
|
41172
|
+
case 'end':
|
|
41173
|
+
return { command: 'exit' };
|
|
41174
|
+
default:
|
|
41175
|
+
return { command: 'none' };
|
|
41176
|
+
}
|
|
41177
|
+
}
|
|
41178
|
+
/**
|
|
41179
|
+
* Decide how to treat one key press while the reading view is open.
|
|
41180
|
+
*
|
|
41181
|
+
* Modifier chords are deliberately let through untouched: Ctrl+P must still
|
|
41182
|
+
* reach the browser's print dialog and F12 its dev tools. Everything else is
|
|
41183
|
+
* swallowed, because Reading View is modal over the editor and a bare Delete
|
|
41184
|
+
* arriving at the canvas underneath would destroy a shape the reader cannot
|
|
41185
|
+
* even see.
|
|
41186
|
+
*/
|
|
41187
|
+
function handleReadingViewKey(input, buffer) {
|
|
41188
|
+
const command = mapReadingViewKey(input, buffer);
|
|
41189
|
+
if (command.command !== 'none') {
|
|
41190
|
+
return { command, swallow: true, preventDefault: true };
|
|
41191
|
+
}
|
|
41192
|
+
const isChord = Boolean(input.ctrlKey || input.metaKey || input.altKey);
|
|
41193
|
+
// Swallowed but not cancelled: the editor must not see it, yet nothing
|
|
41194
|
+
// browser-native (IME, accessibility) needs to be broken to achieve that.
|
|
41195
|
+
return { command, swallow: !isChord, preventDefault: false };
|
|
41196
|
+
}
|
|
41197
|
+
/**
|
|
41198
|
+
* Apply a command, returning the next state.
|
|
41199
|
+
*
|
|
41200
|
+
* Advancing past the last slide closes the view, which is what PowerPoint does:
|
|
41201
|
+
* Reading View has no "end of slide show" screen, it simply hands the reader
|
|
41202
|
+
* back to Normal. Going back from the first slide holds instead of closing, so
|
|
41203
|
+
* an over-eager Page Up cannot lose someone's place.
|
|
41204
|
+
*/
|
|
41205
|
+
function applyReadingViewCommand(state, command, slideCount) {
|
|
41206
|
+
if (!state.open || slideCount <= 0) {
|
|
41207
|
+
return state.open ? CLOSED_READING_VIEW : state;
|
|
41208
|
+
}
|
|
41209
|
+
const last = slideCount - 1;
|
|
41210
|
+
switch (command.command) {
|
|
41211
|
+
case 'next':
|
|
41212
|
+
return state.slideIndex >= last
|
|
41213
|
+
? CLOSED_READING_VIEW
|
|
41214
|
+
: { open: true, slideIndex: state.slideIndex + 1 };
|
|
41215
|
+
case 'previous':
|
|
41216
|
+
return { open: true, slideIndex: Math.max(0, state.slideIndex - 1) };
|
|
41217
|
+
case 'first':
|
|
41218
|
+
return { open: true, slideIndex: 0 };
|
|
41219
|
+
case 'last':
|
|
41220
|
+
return { open: true, slideIndex: last };
|
|
41221
|
+
case 'goto':
|
|
41222
|
+
return { open: true, slideIndex: clampIndex$1(command.slideIndex, slideCount) };
|
|
41223
|
+
case 'exit':
|
|
41224
|
+
return CLOSED_READING_VIEW;
|
|
41225
|
+
default:
|
|
41226
|
+
return state;
|
|
41227
|
+
}
|
|
41228
|
+
}
|
|
41229
|
+
/** Whether the "previous" control should be available. */
|
|
41230
|
+
function canGoPrevious(state) {
|
|
41231
|
+
return state.open && state.slideIndex > 0;
|
|
41232
|
+
}
|
|
41233
|
+
/**
|
|
41234
|
+
* Whether the "next" control should be available.
|
|
41235
|
+
*
|
|
41236
|
+
* True on the last slide too: there, next means "leave", and PowerPoint keeps
|
|
41237
|
+
* the arrow live for exactly that.
|
|
41238
|
+
*/
|
|
41239
|
+
function canGoNext(state, slideCount) {
|
|
41240
|
+
return state.open && slideCount > 0;
|
|
41241
|
+
}
|
|
41242
|
+
/**
|
|
41243
|
+
* Scale that fits `canvas` inside `viewport` without cropping it.
|
|
41244
|
+
*
|
|
41245
|
+
* Reading View letterboxes rather than fills: a 16:9 deck read in a 4:3 window
|
|
41246
|
+
* must not have its edges cut off, because unlike a slide show there is no
|
|
41247
|
+
* second monitor to blame and the reader cannot scroll. Returns 0 for a
|
|
41248
|
+
* degenerate box so a binding rendering before its first layout pass draws
|
|
41249
|
+
* nothing instead of an element scaled by Infinity.
|
|
41250
|
+
*/
|
|
41251
|
+
function readingViewFitScale(canvas, viewport, padding = 0) {
|
|
41252
|
+
const available = {
|
|
41253
|
+
width: viewport.width - padding * 2,
|
|
41254
|
+
height: viewport.height - padding * 2,
|
|
41255
|
+
};
|
|
41256
|
+
if (canvas.width <= 0 || canvas.height <= 0 || available.width <= 0 || available.height <= 0) {
|
|
41257
|
+
return 0;
|
|
41258
|
+
}
|
|
41259
|
+
return Math.min(available.width / canvas.width, available.height / canvas.height);
|
|
41260
|
+
}
|
|
41261
|
+
// ---------------------------------------------------------------------------
|
|
41262
|
+
// Internals
|
|
41263
|
+
// ---------------------------------------------------------------------------
|
|
41264
|
+
function clampIndex$1(index, slideCount) {
|
|
41265
|
+
if (!Number.isFinite(index) || slideCount <= 0) {
|
|
41266
|
+
return 0;
|
|
41267
|
+
}
|
|
41268
|
+
return Math.min(Math.max(Math.trunc(index), 0), slideCount - 1);
|
|
41269
|
+
}
|
|
41270
|
+
|
|
40610
41271
|
/**
|
|
40611
41272
|
* The editor keymap: one source of truth for "what does this key do".
|
|
40612
41273
|
*
|
|
@@ -53127,6 +53788,7 @@ const translationsEn = {
|
|
|
53127
53788
|
'pptx.tableDataEditor.addRowLabel': '+ Row',
|
|
53128
53789
|
'pptx.tableDataEditor.addRowTitle': 'Add row below last',
|
|
53129
53790
|
'pptx.tableDataEditor.ariaLabel': 'Table data editor',
|
|
53791
|
+
'pptx.tableDataEditor.cellAriaLabel': 'Row {{row}}, column {{column}}',
|
|
53130
53792
|
'pptx.tableDataEditor.removeColumnLabel': '- Col',
|
|
53131
53793
|
'pptx.tableDataEditor.removeColumnN': 'Remove column {{number}}',
|
|
53132
53794
|
'pptx.tableDataEditor.removeColumnTitle': 'Remove last column',
|
|
@@ -55608,7 +56270,7 @@ function createLocalStorageBackend(namespace) {
|
|
|
55608
56270
|
/** Try IndexedDB first; fall back to localStorage on any failure. */
|
|
55609
56271
|
async function resolveBackend(dbName, namespace) {
|
|
55610
56272
|
try {
|
|
55611
|
-
const { openChatDb, createIdbBackend } = await import('./pptx-angular-viewer-chat-history-idb-
|
|
56273
|
+
const { openChatDb, createIdbBackend } = await import('./pptx-angular-viewer-chat-history-idb-BqhL79Dq.mjs');
|
|
55612
56274
|
const db = await openChatDb(dbName);
|
|
55613
56275
|
return createIdbBackend(db);
|
|
55614
56276
|
}
|
|
@@ -59409,37 +60071,6 @@ function withTableData(element, transform) {
|
|
|
59409
60071
|
return { ...element, tableData: next };
|
|
59410
60072
|
}
|
|
59411
60073
|
// ---------------------------------------------------------------------------
|
|
59412
|
-
// Structural row / column operations (merge-aware)
|
|
59413
|
-
// ---------------------------------------------------------------------------
|
|
59414
|
-
/**
|
|
59415
|
-
* Insert a blank row above or below `rowIdx`, growing any vertical merge spans
|
|
59416
|
-
* that straddle the insertion point (delegates to the shared `insertTableRow`).
|
|
59417
|
-
*/
|
|
59418
|
-
function insertRow(element, rowIdx, position) {
|
|
59419
|
-
return withTableData(element, (td) => insertTableRow(td, rowIdx, position));
|
|
59420
|
-
}
|
|
59421
|
-
/**
|
|
59422
|
-
* Delete the row at `rowIdx`, adjusting vertical merge spans. No-op (element
|
|
59423
|
-
* returned unchanged) when the table has a single row.
|
|
59424
|
-
*/
|
|
59425
|
-
function removeRow(element, rowIdx) {
|
|
59426
|
-
return withTableData(element, (td) => deleteTableRow(td, rowIdx));
|
|
59427
|
-
}
|
|
59428
|
-
/**
|
|
59429
|
-
* Insert a blank column left or right of `colIdx`, splitting the source column's
|
|
59430
|
-
* width and growing horizontal merge spans (delegates to `insertTableColumn`).
|
|
59431
|
-
*/
|
|
59432
|
-
function insertColumn(element, colIdx, position) {
|
|
59433
|
-
return withTableData(element, (td) => insertTableColumn(td, colIdx, position));
|
|
59434
|
-
}
|
|
59435
|
-
/**
|
|
59436
|
-
* Delete the column at `colIdx`, adjusting horizontal merge spans and
|
|
59437
|
-
* renormalising widths. No-op when the table has a single column.
|
|
59438
|
-
*/
|
|
59439
|
-
function removeColumn(element, colIdx) {
|
|
59440
|
-
return withTableData(element, (td) => deleteTableColumn(td, colIdx));
|
|
59441
|
-
}
|
|
59442
|
-
// ---------------------------------------------------------------------------
|
|
59443
60074
|
// Merge / split operations
|
|
59444
60075
|
// ---------------------------------------------------------------------------
|
|
59445
60076
|
/** Merge a rectangular selection of cells into their top-left anchor. */
|
|
@@ -59506,12 +60137,12 @@ function patchTableData(element, patch) {
|
|
|
59506
60137
|
* new table out) and one commit path in the component.
|
|
59507
60138
|
*/
|
|
59508
60139
|
const TABLE_OPS = {
|
|
59509
|
-
'table-insert-row-above': (el, sel) =>
|
|
59510
|
-
'table-insert-row-below': (el, sel) =>
|
|
59511
|
-
'table-delete-row': (el, sel) =>
|
|
59512
|
-
'table-insert-col-left': (el, sel) =>
|
|
59513
|
-
'table-insert-col-right': (el, sel) =>
|
|
59514
|
-
'table-delete-col': (el, sel) =>
|
|
60140
|
+
'table-insert-row-above': (el, sel) => insertTableElementRow(el, sel.rowIndex, 'above'),
|
|
60141
|
+
'table-insert-row-below': (el, sel) => insertTableElementRow(el, sel.rowIndex, 'below'),
|
|
60142
|
+
'table-delete-row': (el, sel) => removeTableElementRow(el, sel.rowIndex),
|
|
60143
|
+
'table-insert-col-left': (el, sel) => insertTableElementColumn(el, sel.columnIndex, 'left'),
|
|
60144
|
+
'table-insert-col-right': (el, sel) => insertTableElementColumn(el, sel.columnIndex, 'right'),
|
|
60145
|
+
'table-delete-col': (el, sel) => removeTableElementColumn(el, sel.columnIndex),
|
|
59515
60146
|
'table-merge-selected': (el, sel) => sel.selectedCells ? mergeSelection(el, sel.selectedCells) : el,
|
|
59516
60147
|
'table-merge-right': (el, sel) => mergeRight(el, sel.rowIndex, sel.columnIndex),
|
|
59517
60148
|
'table-merge-down': (el, sel) => mergeDown(el, sel.rowIndex, sel.columnIndex),
|
|
@@ -64867,80 +65498,6 @@ function stopAnimationSound() {
|
|
|
64867
65498
|
* @module viewer/presentation-playback-helpers
|
|
64868
65499
|
*/
|
|
64869
65500
|
// ---------------------------------------------------------------------------
|
|
64870
|
-
// Media commands (p:cmd) - DOM lookup by data-element-id (no registry in Angular)
|
|
64871
|
-
// ---------------------------------------------------------------------------
|
|
64872
|
-
function findMediaElement(targetId, frameRoot) {
|
|
64873
|
-
if (typeof HTMLMediaElement === 'undefined') {
|
|
64874
|
-
return undefined;
|
|
64875
|
-
}
|
|
64876
|
-
const root = frameRoot?.() ?? (typeof document === 'undefined' ? null : document);
|
|
64877
|
-
if (!root) {
|
|
64878
|
-
return undefined;
|
|
64879
|
-
}
|
|
64880
|
-
for (const wrapper of root.querySelectorAll('[data-element-id]')) {
|
|
64881
|
-
if (wrapper.dataset['elementId'] !== targetId) {
|
|
64882
|
-
continue;
|
|
64883
|
-
}
|
|
64884
|
-
if (wrapper instanceof HTMLMediaElement) {
|
|
64885
|
-
return wrapper;
|
|
64886
|
-
}
|
|
64887
|
-
const media = wrapper.querySelector('video, audio');
|
|
64888
|
-
if (media instanceof HTMLMediaElement) {
|
|
64889
|
-
return media;
|
|
64890
|
-
}
|
|
64891
|
-
}
|
|
64892
|
-
return undefined;
|
|
64893
|
-
}
|
|
64894
|
-
/** Apply a parsed `p:cmd` media verb to the target's `<video>` / `<audio>`. */
|
|
64895
|
-
function executeMediaCommand(command, frameRoot) {
|
|
64896
|
-
const el = findMediaElement(command.targetId, frameRoot);
|
|
64897
|
-
if (!el) {
|
|
64898
|
-
return;
|
|
64899
|
-
}
|
|
64900
|
-
const parsed = parseMediaCommand(command.command);
|
|
64901
|
-
if (!parsed) {
|
|
64902
|
-
return;
|
|
64903
|
-
}
|
|
64904
|
-
const safePlay = () => {
|
|
64905
|
-
void el.play().catch(() => {
|
|
64906
|
-
/* autoplay blocked or not ready: ignore */
|
|
64907
|
-
});
|
|
64908
|
-
};
|
|
64909
|
-
const safeSeek = (seconds) => {
|
|
64910
|
-
try {
|
|
64911
|
-
el.currentTime = seconds;
|
|
64912
|
-
}
|
|
64913
|
-
catch {
|
|
64914
|
-
/* not seekable yet: ignore */
|
|
64915
|
-
}
|
|
64916
|
-
};
|
|
64917
|
-
switch (parsed.verb) {
|
|
64918
|
-
case 'playFrom':
|
|
64919
|
-
safeSeek(parsed.seekSeconds ?? 0);
|
|
64920
|
-
safePlay();
|
|
64921
|
-
return;
|
|
64922
|
-
case 'play':
|
|
64923
|
-
safePlay();
|
|
64924
|
-
return;
|
|
64925
|
-
case 'pause':
|
|
64926
|
-
el.pause();
|
|
64927
|
-
return;
|
|
64928
|
-
case 'stop':
|
|
64929
|
-
el.pause();
|
|
64930
|
-
safeSeek(0);
|
|
64931
|
-
return;
|
|
64932
|
-
case 'togglePlay':
|
|
64933
|
-
if (el.paused) {
|
|
64934
|
-
safePlay();
|
|
64935
|
-
}
|
|
64936
|
-
else {
|
|
64937
|
-
el.pause();
|
|
64938
|
-
}
|
|
64939
|
-
break;
|
|
64940
|
-
default:
|
|
64941
|
-
}
|
|
64942
|
-
}
|
|
64943
|
-
// ---------------------------------------------------------------------------
|
|
64944
65501
|
// Click-group step application
|
|
64945
65502
|
// ---------------------------------------------------------------------------
|
|
64946
65503
|
/**
|
|
@@ -64955,7 +65512,7 @@ function applyAnimationGroupSteps(group, ctx) {
|
|
|
64955
65512
|
if (step.command) {
|
|
64956
65513
|
const command = step.command;
|
|
64957
65514
|
const timer = window.setTimeout(() => {
|
|
64958
|
-
|
|
65515
|
+
executeMediaCommandInDom(command, ctx.frameRoot);
|
|
64959
65516
|
}, Math.max(0, step.delayMs));
|
|
64960
65517
|
ctx.timers.push(timer);
|
|
64961
65518
|
continue;
|
|
@@ -67665,11 +68222,16 @@ class EquationRendererComponent {
|
|
|
67665
68222
|
* Converts the OMML input to MathML and wraps it in a `SafeHtml` value so
|
|
67666
68223
|
* Angular's `[innerHTML]` binding renders the `<math>` markup instead of
|
|
67667
68224
|
* stripping it.
|
|
68225
|
+
*
|
|
68226
|
+
* `bypassSecurityTrustHtml` switches Angular's own sanitiser off, and the
|
|
68227
|
+
* OMML comes from an arbitrary deck, so the markup is run through the shared
|
|
68228
|
+
* `sanitizeMathMl` (DOMPurify, MathML + SVG profiles) first. That is the same
|
|
68229
|
+
* guarantee the other four bindings apply at their raw-HTML sinks.
|
|
67668
68230
|
*/
|
|
67669
68231
|
safeMathml = computed(() =>
|
|
67670
68232
|
// `equationXml` is typed `Record<string, unknown>` on the core segment; the
|
|
67671
68233
|
// shared converter walks it as an `OmmlNode` (core's recursive `XmlObject`).
|
|
67672
|
-
this.sanitizer.bypassSecurityTrustHtml(ommlToMathml(this.equationXml())), /* @ts-ignore */
|
|
68234
|
+
this.sanitizer.bypassSecurityTrustHtml(sanitizeMathMl(ommlToMathml(this.equationXml()))), /* @ts-ignore */
|
|
67673
68235
|
...(ngDevMode ? [{ debugName: "safeMathml" }] : /* istanbul ignore next */ []));
|
|
67674
68236
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: EquationRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
67675
68237
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: EquationRendererComponent, isStandalone: true, selector: "pptx-equation-renderer", inputs: { equationXml: { classPropertyName: "equationXml", publicName: "equationXml", isSignal: true, isRequired: true, transformFunction: null }, equationNumber: { classPropertyName: "equationNumber", publicName: "equationNumber", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
@@ -85365,6 +85927,375 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
85365
85927
|
`, styles: [".pptx-ng-props-form{display:flex;flex-direction:column;gap:.75rem}.pptx-ng-props-field{display:flex;flex-direction:column;gap:.375rem}.pptx-ng-props-label{font-size:.75rem;font-weight:500;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-props-input{width:100%;padding:.375rem .75rem;border-radius:.375rem;border:1px solid var(--pptx-border, #2a2a2a);background:var(--pptx-background, #111);color:var(--pptx-foreground, #e5e5e5);font-size:.8125rem}.pptx-ng-props-input:focus{outline:none;border-color:var(--pptx-primary, #6366f1);box-shadow:0 0 0 1px var(--pptx-primary, #6366f1)}.pptx-ng-props-meta{display:flex;flex-direction:column;gap:.375rem;padding-top:.5rem;border-top:1px solid var(--pptx-border, #2a2a2a)}.pptx-ng-props-meta-row{display:flex;justify-content:space-between;font-size:.75rem}.pptx-ng-props-meta-label{color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-props-meta-value{color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-props-btn{padding:.375rem .75rem;border:none;border-radius:.375rem;background:var(--pptx-muted, #2a2a2a);color:var(--pptx-foreground, #e5e5e5);font-size:.75rem;cursor:pointer}.pptx-ng-props-btn-primary{background:var(--pptx-primary, #6366f1);color:var(--pptx-primary-foreground, #fff)}\n"] }]
|
|
85366
85928
|
}], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], properties: [{ type: i0.Input, args: [{ isSignal: true, alias: "properties", required: true }] }], save: [{ type: i0.Output, args: ["save"] }], close: [{ type: i0.Output, args: ["close"] }] } });
|
|
85367
85929
|
|
|
85930
|
+
/**
|
|
85931
|
+
* reading-view-overlay.styles.ts: CSS for PowerPoint's Reading View.
|
|
85932
|
+
*
|
|
85933
|
+
* Lifted out of the component (as `editor-context-menu.styles.ts` was) so that
|
|
85934
|
+
* file stays a template plus its wiring and keeps under this repo's 300-LOC
|
|
85935
|
+
* cap. A plain exported const still compiles AOT: ng-packagr statically
|
|
85936
|
+
* evaluates the imported string.
|
|
85937
|
+
*
|
|
85938
|
+
* @module angular-viewer/reading-view-overlay.styles
|
|
85939
|
+
*/
|
|
85940
|
+
/**
|
|
85941
|
+
* Styles for `pptx-reading-view-overlay`.
|
|
85942
|
+
*
|
|
85943
|
+
* `position: fixed; inset: 0` is the whole point: Reading View fills the
|
|
85944
|
+
* browser WINDOW without the Fullscreen API, which is what separates it from
|
|
85945
|
+
* the slide show.
|
|
85946
|
+
*/
|
|
85947
|
+
const READING_VIEW_OVERLAY_STYLES = `
|
|
85948
|
+
.pptx-ng-reading-root {
|
|
85949
|
+
position: fixed;
|
|
85950
|
+
inset: 0;
|
|
85951
|
+
z-index: 1300;
|
|
85952
|
+
display: flex;
|
|
85953
|
+
flex-direction: column;
|
|
85954
|
+
background: #171717;
|
|
85955
|
+
}
|
|
85956
|
+
|
|
85957
|
+
.pptx-ng-reading-viewport {
|
|
85958
|
+
display: flex;
|
|
85959
|
+
flex: 1 1 0%;
|
|
85960
|
+
min-height: 0;
|
|
85961
|
+
align-items: center;
|
|
85962
|
+
justify-content: center;
|
|
85963
|
+
}
|
|
85964
|
+
|
|
85965
|
+
.pptx-ng-reading-stage {
|
|
85966
|
+
position: relative;
|
|
85967
|
+
overflow: hidden;
|
|
85968
|
+
}
|
|
85969
|
+
|
|
85970
|
+
/*
|
|
85971
|
+
* SlideCanvasComponent centres its stage with a 1rem gutter, which would push
|
|
85972
|
+
* the slide out of the box measured by readingViewFitScale. The sorter
|
|
85973
|
+
* overlay strips the same margin for the same reason.
|
|
85974
|
+
*/
|
|
85975
|
+
.pptx-ng-reading-stage ::ng-deep .pptx-ng-canvas-wrapper {
|
|
85976
|
+
margin: 0 !important;
|
|
85977
|
+
}
|
|
85978
|
+
|
|
85979
|
+
.pptx-ng-reading-nav {
|
|
85980
|
+
display: flex;
|
|
85981
|
+
flex-shrink: 0;
|
|
85982
|
+
align-items: center;
|
|
85983
|
+
justify-content: center;
|
|
85984
|
+
gap: 0.75rem;
|
|
85985
|
+
padding: 0.5rem 1rem;
|
|
85986
|
+
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
|
85987
|
+
}
|
|
85988
|
+
|
|
85989
|
+
.pptx-ng-reading-btn {
|
|
85990
|
+
display: inline-flex;
|
|
85991
|
+
align-items: center;
|
|
85992
|
+
justify-content: center;
|
|
85993
|
+
width: 2rem;
|
|
85994
|
+
height: 2rem;
|
|
85995
|
+
padding: 0;
|
|
85996
|
+
border: none;
|
|
85997
|
+
border-radius: 0.25rem;
|
|
85998
|
+
background: transparent;
|
|
85999
|
+
color: rgba(255, 255, 255, 0.8);
|
|
86000
|
+
cursor: pointer;
|
|
86001
|
+
transition:
|
|
86002
|
+
background 0.15s,
|
|
86003
|
+
color 0.15s;
|
|
86004
|
+
}
|
|
86005
|
+
|
|
86006
|
+
.pptx-ng-reading-btn:hover:not(:disabled) {
|
|
86007
|
+
background: rgba(255, 255, 255, 0.15);
|
|
86008
|
+
color: #ffffff;
|
|
86009
|
+
}
|
|
86010
|
+
|
|
86011
|
+
.pptx-ng-reading-btn:disabled {
|
|
86012
|
+
cursor: default;
|
|
86013
|
+
opacity: 0.3;
|
|
86014
|
+
}
|
|
86015
|
+
|
|
86016
|
+
.pptx-ng-reading-counter {
|
|
86017
|
+
min-width: 4rem;
|
|
86018
|
+
text-align: center;
|
|
86019
|
+
font-size: 0.75rem;
|
|
86020
|
+
font-variant-numeric: tabular-nums;
|
|
86021
|
+
color: rgba(255, 255, 255, 0.7);
|
|
86022
|
+
}
|
|
86023
|
+
`;
|
|
86024
|
+
|
|
86025
|
+
/**
|
|
86026
|
+
* reading-view-overlay.component.ts: PowerPoint's Reading View, Angular binding.
|
|
86027
|
+
*
|
|
86028
|
+
* Deliberately NOT built on {@link PresentationOverlayComponent}. Reading View
|
|
86029
|
+
* is the deck at full WINDOW size with the editor chrome cut back to a nav bar:
|
|
86030
|
+
* reusing the slide-show overlay would drag the Fullscreen API, the pointer
|
|
86031
|
+
* tools, blackout and the presenter console in with it, which is exactly the
|
|
86032
|
+
* weight a reader asked to escape. `position: fixed; inset: 0` fills the browser
|
|
86033
|
+
* window without requesting fullscreen, matching PowerPoint and the sibling
|
|
86034
|
+
* {@link SlideSorterOverlayComponent}.
|
|
86035
|
+
*
|
|
86036
|
+
* Every navigation rule (what Page Down does, when advancing past the last
|
|
86037
|
+
* slide closes the view, whether Previous is live) comes from
|
|
86038
|
+
* `render/reading-view` in `pptx-viewer-shared`, so the five bindings cannot
|
|
86039
|
+
* drift apart. Nothing in this file decides which slide comes next.
|
|
86040
|
+
*
|
|
86041
|
+
* Reference binding: packages/react/src/viewer/components/ReadingViewOverlay.tsx
|
|
86042
|
+
*/
|
|
86043
|
+
/** Breathing room between the slide and the window edge, in CSS pixels. */
|
|
86044
|
+
const READING_VIEW_PADDING = 24;
|
|
86045
|
+
class ReadingViewOverlayComponent {
|
|
86046
|
+
/**
|
|
86047
|
+
* The deck to read, template (master/layout) elements already merged in. The
|
|
86048
|
+
* host passes its merged display deck rather than a separate template layer:
|
|
86049
|
+
* the reader navigates inside this overlay, so a single "active slide's
|
|
86050
|
+
* template elements" array would paint slide 1's master over slide 2.
|
|
86051
|
+
*/
|
|
86052
|
+
slides = input([], /* @ts-ignore */
|
|
86053
|
+
...(ngDevMode ? [{ debugName: "slides" }] : /* istanbul ignore next */ []));
|
|
86054
|
+
canvasSize = input.required(/* @ts-ignore */
|
|
86055
|
+
...(ngDevMode ? [{ debugName: "canvasSize" }] : /* istanbul ignore next */ []));
|
|
86056
|
+
mediaDataUrls = input(new Map(), /* @ts-ignore */
|
|
86057
|
+
...(ngDevMode ? [{ debugName: "mediaDataUrls" }] : /* istanbul ignore next */ []));
|
|
86058
|
+
/** Slide the editor was on when Reading View was entered. */
|
|
86059
|
+
activeSlideIndex = input(0, /* @ts-ignore */
|
|
86060
|
+
...(ngDevMode ? [{ debugName: "activeSlideIndex" }] : /* istanbul ignore next */ []));
|
|
86061
|
+
/** Emits the slide the reader ended on, so the editor lands there. */
|
|
86062
|
+
exit = output();
|
|
86063
|
+
/** Whether the view is on screen and which slide it shows (shared state). */
|
|
86064
|
+
state = signal(CLOSED_READING_VIEW, /* @ts-ignore */
|
|
86065
|
+
...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
|
|
86066
|
+
viewportRef = viewChild('viewport', /* @ts-ignore */
|
|
86067
|
+
...(ngDevMode ? [{ debugName: "viewportRef" }] : /* istanbul ignore next */ []));
|
|
86068
|
+
/** Measured size of the area the slide is fitted into, in CSS pixels. */
|
|
86069
|
+
viewport = signal({ width: 0, height: 0 }, /* @ts-ignore */
|
|
86070
|
+
...(ngDevMode ? [{ debugName: "viewport" }] : /* istanbul ignore next */ []));
|
|
86071
|
+
/**
|
|
86072
|
+
* PowerPoint's "type a slide number, then Enter" jump. One buffer per open
|
|
86073
|
+
* session, and every key mapped through it EXACTLY once: mapping mutates the
|
|
86074
|
+
* buffer, so a second call would swallow the digit it just accumulated.
|
|
86075
|
+
*/
|
|
86076
|
+
keyBuffer = createPresentationKeyBuffer();
|
|
86077
|
+
/** Bound once so the capture-phase listener can be removed again. */
|
|
86078
|
+
keyListener = (event) => this.onKeyDown(event);
|
|
86079
|
+
resizeObserver = null;
|
|
86080
|
+
ngOnInit() {
|
|
86081
|
+
// Inputs are only bound by now, so the opening slide cannot be read in a
|
|
86082
|
+
// field initializer. Clamping lives in the shared opener.
|
|
86083
|
+
this.state.set(openReadingView(this.activeSlideIndex(), this.slides().length));
|
|
86084
|
+
// Capture phase on `window`, which is why this cannot be a @HostListener
|
|
86085
|
+
// (those can only register in the bubble phase). The editor is still mounted
|
|
86086
|
+
// and still listening underneath this overlay, and until the reader's keys
|
|
86087
|
+
// were swallowed first an arrow key both turned the page AND nudged the
|
|
86088
|
+
// selected shape behind it, so merely reading a deck edited it.
|
|
86089
|
+
window.addEventListener('keydown', this.keyListener, true);
|
|
86090
|
+
}
|
|
86091
|
+
ngAfterViewInit() {
|
|
86092
|
+
const element = this.viewportRef()?.nativeElement;
|
|
86093
|
+
if (!element || typeof ResizeObserver === 'undefined') {
|
|
86094
|
+
return;
|
|
86095
|
+
}
|
|
86096
|
+
this.resizeObserver = new ResizeObserver((entries) => {
|
|
86097
|
+
const rect = entries[0]?.contentRect;
|
|
86098
|
+
if (rect) {
|
|
86099
|
+
this.viewport.set({ width: rect.width, height: rect.height });
|
|
86100
|
+
}
|
|
86101
|
+
});
|
|
86102
|
+
this.resizeObserver.observe(element);
|
|
86103
|
+
}
|
|
86104
|
+
ngOnDestroy() {
|
|
86105
|
+
window.removeEventListener('keydown', this.keyListener, true);
|
|
86106
|
+
this.resizeObserver?.disconnect();
|
|
86107
|
+
this.resizeObserver = null;
|
|
86108
|
+
}
|
|
86109
|
+
/** The slide on screen, or undefined when closed or the deck is empty. */
|
|
86110
|
+
visibleSlide = computed(() => {
|
|
86111
|
+
const state = this.state();
|
|
86112
|
+
return state.open ? this.slides()[state.slideIndex] : undefined;
|
|
86113
|
+
}, /* @ts-ignore */
|
|
86114
|
+
...(ngDevMode ? [{ debugName: "visibleSlide" }] : /* istanbul ignore next */ []));
|
|
86115
|
+
/** Fit scale for the slide; 0 before the first layout pass. */
|
|
86116
|
+
scale = computed(() => readingViewFitScale(this.canvasSize(), this.viewport(), READING_VIEW_PADDING), /* @ts-ignore */
|
|
86117
|
+
...(ngDevMode ? [{ debugName: "scale" }] : /* istanbul ignore next */ []));
|
|
86118
|
+
stageWidth = computed(() => this.canvasSize().width * this.scale(), /* @ts-ignore */
|
|
86119
|
+
...(ngDevMode ? [{ debugName: "stageWidth" }] : /* istanbul ignore next */ []));
|
|
86120
|
+
stageHeight = computed(() => this.canvasSize().height * this.scale(), /* @ts-ignore */
|
|
86121
|
+
...(ngDevMode ? [{ debugName: "stageHeight" }] : /* istanbul ignore next */ []));
|
|
86122
|
+
counter = computed(() => formatSlideCounter(this.state().slideIndex, this.slides().length), /* @ts-ignore */
|
|
86123
|
+
...(ngDevMode ? [{ debugName: "counter" }] : /* istanbul ignore next */ []));
|
|
86124
|
+
canPrevious = computed(() => canGoPrevious(this.state()), /* @ts-ignore */
|
|
86125
|
+
...(ngDevMode ? [{ debugName: "canPrevious" }] : /* istanbul ignore next */ []));
|
|
86126
|
+
canNext = computed(() => canGoNext(this.state(), this.slides().length), /* @ts-ignore */
|
|
86127
|
+
...(ngDevMode ? [{ debugName: "canNext" }] : /* istanbul ignore next */ []));
|
|
86128
|
+
/** Apply a navigation intent, handing the reader back to the editor on close. */
|
|
86129
|
+
run(command) {
|
|
86130
|
+
const previous = this.state();
|
|
86131
|
+
const next = applyReadingViewCommand(previous, command, this.slides().length);
|
|
86132
|
+
this.state.set(next);
|
|
86133
|
+
if (previous.open && !next.open) {
|
|
86134
|
+
// Leaving a PowerPoint view returns the editor to the slide that was on
|
|
86135
|
+
// screen, not the one it was on before.
|
|
86136
|
+
this.exit.emit(previous.slideIndex);
|
|
86137
|
+
}
|
|
86138
|
+
}
|
|
86139
|
+
/**
|
|
86140
|
+
* Window-level so no element has to hold focus, matching the slide show.
|
|
86141
|
+
* Writing {@link state} marks this `OnPush` view dirty and notifies Angular's
|
|
86142
|
+
* change-detection scheduler, so no manual `markForCheck` is needed even
|
|
86143
|
+
* though the listener is not a host binding.
|
|
86144
|
+
*/
|
|
86145
|
+
onKeyDown(event) {
|
|
86146
|
+
if (!this.state().open) {
|
|
86147
|
+
return;
|
|
86148
|
+
}
|
|
86149
|
+
// Handled exactly once: the call mutates `keyBuffer` to accumulate a typed
|
|
86150
|
+
// slide number, so handling twice would swallow every digit.
|
|
86151
|
+
const { command, swallow, preventDefault } = handleReadingViewKey(event, this.keyBuffer);
|
|
86152
|
+
if (swallow) {
|
|
86153
|
+
event.stopPropagation();
|
|
86154
|
+
}
|
|
86155
|
+
if (preventDefault) {
|
|
86156
|
+
// Space and the arrows would otherwise scroll the editor underneath.
|
|
86157
|
+
event.preventDefault();
|
|
86158
|
+
}
|
|
86159
|
+
if (command.command !== 'none') {
|
|
86160
|
+
this.run(command);
|
|
86161
|
+
}
|
|
86162
|
+
}
|
|
86163
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReadingViewOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
86164
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: ReadingViewOverlayComponent, isStandalone: true, selector: "pptx-reading-view-overlay", inputs: { slides: { classPropertyName: "slides", publicName: "slides", isSignal: true, isRequired: false, transformFunction: null }, canvasSize: { classPropertyName: "canvasSize", publicName: "canvasSize", isSignal: true, isRequired: true, transformFunction: null }, mediaDataUrls: { classPropertyName: "mediaDataUrls", publicName: "mediaDataUrls", isSignal: true, isRequired: false, transformFunction: null }, activeSlideIndex: { classPropertyName: "activeSlideIndex", publicName: "activeSlideIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { exit: "exit" }, viewQueries: [{ propertyName: "viewportRef", first: true, predicate: ["viewport"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
86165
|
+
@if (visibleSlide(); as slide) {
|
|
86166
|
+
<div
|
|
86167
|
+
class="pptx-ng-reading-root"
|
|
86168
|
+
data-pptx-reading-view="true"
|
|
86169
|
+
role="region"
|
|
86170
|
+
[attr.aria-label]="'pptx.view.readingView' | translate"
|
|
86171
|
+
>
|
|
86172
|
+
<div #viewport class="pptx-ng-reading-viewport">
|
|
86173
|
+
@if (scale() > 0) {
|
|
86174
|
+
<div
|
|
86175
|
+
class="pptx-ng-reading-stage"
|
|
86176
|
+
data-pptx-reading-view-stage="true"
|
|
86177
|
+
aria-roledescription="slide"
|
|
86178
|
+
[style.width.px]="stageWidth()"
|
|
86179
|
+
[style.height.px]="stageHeight()"
|
|
86180
|
+
>
|
|
86181
|
+
<pptx-slide-canvas
|
|
86182
|
+
[slide]="slide"
|
|
86183
|
+
[canvasSize]="canvasSize()"
|
|
86184
|
+
[mediaDataUrls]="mediaDataUrls()"
|
|
86185
|
+
[zoom]="scale()"
|
|
86186
|
+
[autoFit]="false"
|
|
86187
|
+
[interactive]="false"
|
|
86188
|
+
/>
|
|
86189
|
+
</div>
|
|
86190
|
+
}
|
|
86191
|
+
</div>
|
|
86192
|
+
<div class="pptx-ng-reading-nav">
|
|
86193
|
+
<button
|
|
86194
|
+
type="button"
|
|
86195
|
+
class="pptx-ng-reading-btn"
|
|
86196
|
+
[attr.aria-label]="'pptx.common.previous' | translate"
|
|
86197
|
+
[title]="'pptx.common.previous' | translate"
|
|
86198
|
+
[disabled]="!canPrevious()"
|
|
86199
|
+
(click)="run({ command: 'previous' })"
|
|
86200
|
+
>
|
|
86201
|
+
<svg lucideChevronLeft class="h-4 w-4"></svg>
|
|
86202
|
+
</button>
|
|
86203
|
+
<span class="pptx-ng-reading-counter" data-pptx-reading-view-counter="true">{{
|
|
86204
|
+
counter()
|
|
86205
|
+
}}</span>
|
|
86206
|
+
<button
|
|
86207
|
+
type="button"
|
|
86208
|
+
class="pptx-ng-reading-btn"
|
|
86209
|
+
[attr.aria-label]="'pptx.common.next' | translate"
|
|
86210
|
+
[title]="'pptx.common.next' | translate"
|
|
86211
|
+
[disabled]="!canNext()"
|
|
86212
|
+
(click)="run({ command: 'next' })"
|
|
86213
|
+
>
|
|
86214
|
+
<svg lucideChevronRight class="h-4 w-4"></svg>
|
|
86215
|
+
</button>
|
|
86216
|
+
<button
|
|
86217
|
+
type="button"
|
|
86218
|
+
class="pptx-ng-reading-btn"
|
|
86219
|
+
[attr.aria-label]="'pptx.statusBar.normalView' | translate"
|
|
86220
|
+
[title]="'pptx.statusBar.normalView' | translate"
|
|
86221
|
+
(click)="run({ command: 'exit' })"
|
|
86222
|
+
>
|
|
86223
|
+
<svg lucideX class="h-4 w-4"></svg>
|
|
86224
|
+
</button>
|
|
86225
|
+
</div>
|
|
86226
|
+
</div>
|
|
86227
|
+
}
|
|
86228
|
+
`, isInline: true, styles: [".pptx-ng-reading-root{position:fixed;inset:0;z-index:1300;display:flex;flex-direction:column;background:#171717}.pptx-ng-reading-viewport{display:flex;flex:1 1 0%;min-height:0;align-items:center;justify-content:center}.pptx-ng-reading-stage{position:relative;overflow:hidden}.pptx-ng-reading-stage ::ng-deep .pptx-ng-canvas-wrapper{margin:0!important}.pptx-ng-reading-nav{display:flex;flex-shrink:0;align-items:center;justify-content:center;gap:.75rem;padding:.5rem 1rem;border-top:1px solid rgba(255,255,255,.1)}.pptx-ng-reading-btn{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:.25rem;background:transparent;color:#fffc;cursor:pointer;transition:background .15s,color .15s}.pptx-ng-reading-btn:hover:not(:disabled){background:#ffffff26;color:#fff}.pptx-ng-reading-btn:disabled{cursor:default;opacity:.3}.pptx-ng-reading-counter{min-width:4rem;text-align:center;font-size:.75rem;font-variant-numeric:tabular-nums;color:#ffffffb3}\n"], dependencies: [{ kind: "component", type: SlideCanvasComponent, selector: "pptx-slide-canvas", inputs: ["slide", "canvasSize", "mediaDataUrls", "zoom", "editable", "showGrid", "showRulers", "rulerUnit", "showGuides", "snapToGrid", "snapToShape", "guideCommand", "spellCheck", "snapToGuides", "autoFit", "transparentBackground", "interactive", "presenting", "selectedIds", "editingId", "editTemplateMode", "templateElements", "aiHighlights", "aiActive", "aiActiveSlideIndex", "aiChangeBatch", "aiPickMode", "drawTool", "drawColor", "drawWidth"], outputs: ["elementSelect", "backgroundClick", "transformStart", "transformUpdate", "contextMenu", "textEditStart", "textCommit", "textInput", "textCancel", "textFormat", "rotateUpdate", "marqueeSelect", "inkStrokeComplete", "eraserHit", "cellCommit", "tableChange"] }, { kind: "component", type: LucideChevronLeft, selector: "svg[lucideChevronLeft]" }, { kind: "component", type: LucideChevronRight, selector: "svg[lucideChevronRight]" }, { kind: "component", type: LucideX, selector: "svg[lucideX]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
86229
|
+
}
|
|
86230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReadingViewOverlayComponent, decorators: [{
|
|
86231
|
+
type: Component,
|
|
86232
|
+
args: [{ selector: 'pptx-reading-view-overlay', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [SlideCanvasComponent, TranslatePipe, LucideChevronLeft, LucideChevronRight, LucideX], template: `
|
|
86233
|
+
@if (visibleSlide(); as slide) {
|
|
86234
|
+
<div
|
|
86235
|
+
class="pptx-ng-reading-root"
|
|
86236
|
+
data-pptx-reading-view="true"
|
|
86237
|
+
role="region"
|
|
86238
|
+
[attr.aria-label]="'pptx.view.readingView' | translate"
|
|
86239
|
+
>
|
|
86240
|
+
<div #viewport class="pptx-ng-reading-viewport">
|
|
86241
|
+
@if (scale() > 0) {
|
|
86242
|
+
<div
|
|
86243
|
+
class="pptx-ng-reading-stage"
|
|
86244
|
+
data-pptx-reading-view-stage="true"
|
|
86245
|
+
aria-roledescription="slide"
|
|
86246
|
+
[style.width.px]="stageWidth()"
|
|
86247
|
+
[style.height.px]="stageHeight()"
|
|
86248
|
+
>
|
|
86249
|
+
<pptx-slide-canvas
|
|
86250
|
+
[slide]="slide"
|
|
86251
|
+
[canvasSize]="canvasSize()"
|
|
86252
|
+
[mediaDataUrls]="mediaDataUrls()"
|
|
86253
|
+
[zoom]="scale()"
|
|
86254
|
+
[autoFit]="false"
|
|
86255
|
+
[interactive]="false"
|
|
86256
|
+
/>
|
|
86257
|
+
</div>
|
|
86258
|
+
}
|
|
86259
|
+
</div>
|
|
86260
|
+
<div class="pptx-ng-reading-nav">
|
|
86261
|
+
<button
|
|
86262
|
+
type="button"
|
|
86263
|
+
class="pptx-ng-reading-btn"
|
|
86264
|
+
[attr.aria-label]="'pptx.common.previous' | translate"
|
|
86265
|
+
[title]="'pptx.common.previous' | translate"
|
|
86266
|
+
[disabled]="!canPrevious()"
|
|
86267
|
+
(click)="run({ command: 'previous' })"
|
|
86268
|
+
>
|
|
86269
|
+
<svg lucideChevronLeft class="h-4 w-4"></svg>
|
|
86270
|
+
</button>
|
|
86271
|
+
<span class="pptx-ng-reading-counter" data-pptx-reading-view-counter="true">{{
|
|
86272
|
+
counter()
|
|
86273
|
+
}}</span>
|
|
86274
|
+
<button
|
|
86275
|
+
type="button"
|
|
86276
|
+
class="pptx-ng-reading-btn"
|
|
86277
|
+
[attr.aria-label]="'pptx.common.next' | translate"
|
|
86278
|
+
[title]="'pptx.common.next' | translate"
|
|
86279
|
+
[disabled]="!canNext()"
|
|
86280
|
+
(click)="run({ command: 'next' })"
|
|
86281
|
+
>
|
|
86282
|
+
<svg lucideChevronRight class="h-4 w-4"></svg>
|
|
86283
|
+
</button>
|
|
86284
|
+
<button
|
|
86285
|
+
type="button"
|
|
86286
|
+
class="pptx-ng-reading-btn"
|
|
86287
|
+
[attr.aria-label]="'pptx.statusBar.normalView' | translate"
|
|
86288
|
+
[title]="'pptx.statusBar.normalView' | translate"
|
|
86289
|
+
(click)="run({ command: 'exit' })"
|
|
86290
|
+
>
|
|
86291
|
+
<svg lucideX class="h-4 w-4"></svg>
|
|
86292
|
+
</button>
|
|
86293
|
+
</div>
|
|
86294
|
+
</div>
|
|
86295
|
+
}
|
|
86296
|
+
`, styles: [".pptx-ng-reading-root{position:fixed;inset:0;z-index:1300;display:flex;flex-direction:column;background:#171717}.pptx-ng-reading-viewport{display:flex;flex:1 1 0%;min-height:0;align-items:center;justify-content:center}.pptx-ng-reading-stage{position:relative;overflow:hidden}.pptx-ng-reading-stage ::ng-deep .pptx-ng-canvas-wrapper{margin:0!important}.pptx-ng-reading-nav{display:flex;flex-shrink:0;align-items:center;justify-content:center;gap:.75rem;padding:.5rem 1rem;border-top:1px solid rgba(255,255,255,.1)}.pptx-ng-reading-btn{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:.25rem;background:transparent;color:#fffc;cursor:pointer;transition:background .15s,color .15s}.pptx-ng-reading-btn:hover:not(:disabled){background:#ffffff26;color:#fff}.pptx-ng-reading-btn:disabled{cursor:default;opacity:.3}.pptx-ng-reading-counter{min-width:4rem;text-align:center;font-size:.75rem;font-variant-numeric:tabular-nums;color:#ffffffb3}\n"] }]
|
|
86297
|
+
}], propDecorators: { slides: [{ type: i0.Input, args: [{ isSignal: true, alias: "slides", required: false }] }], canvasSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "canvasSize", required: true }] }], mediaDataUrls: [{ type: i0.Input, args: [{ isSignal: true, alias: "mediaDataUrls", required: false }] }], activeSlideIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeSlideIndex", required: false }] }], exit: [{ type: i0.Output, args: ["exit"] }], viewportRef: [{ type: i0.ViewChild, args: ['viewport', { isSignal: true }] }] } });
|
|
86298
|
+
|
|
85368
86299
|
function formatMs(ms) {
|
|
85369
86300
|
const seconds = Math.max(0, Math.floor(ms / 1000));
|
|
85370
86301
|
return `${Math.floor(seconds / 60)}:${String(seconds % 60).padStart(2, '0')}`;
|
|
@@ -87518,8 +88449,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
87518
88449
|
* renders it: a tab whose controls are in a different order, or under
|
|
87519
88450
|
* different names, cannot be scripted or documented once for all five.
|
|
87520
88451
|
*
|
|
87521
|
-
*
|
|
87522
|
-
*
|
|
88452
|
+
* Handout Master, Notes Master, Zoom and Macros render disabled: each is a view
|
|
88453
|
+
* or setting this viewer does not implement yet. Reading View used to sit in
|
|
88454
|
+
* that list; it is now a real view (see {@link ReadingViewOverlayComponent}),
|
|
88455
|
+
* so its pill opens the deck full-window with the chrome cut to a nav bar. Print,
|
|
87523
88456
|
* Shortcuts and the Notes-pane toggle deliberately do NOT live here (PowerPoint
|
|
87524
88457
|
* has none of them on View); they stay reachable from the File tab / overflow
|
|
87525
88458
|
* menu, the Help tab, and the status bar respectively.
|
|
@@ -87549,6 +88482,8 @@ class RibbonViewSectionComponent {
|
|
|
87549
88482
|
eyedropperActive = input(false, /* @ts-ignore */
|
|
87550
88483
|
...(ngDevMode ? [{ debugName: "eyedropperActive" }] : /* istanbul ignore next */ []));
|
|
87551
88484
|
openSorter = output();
|
|
88485
|
+
/** Enter Reading View: the deck full-window, NOT the fullscreen slide show. */
|
|
88486
|
+
openReadingView = output();
|
|
87552
88487
|
openMasterView = output();
|
|
87553
88488
|
toggleGrid = output();
|
|
87554
88489
|
toggleRulers = output();
|
|
@@ -87560,7 +88495,7 @@ class RibbonViewSectionComponent {
|
|
|
87560
88495
|
zoomToFit = output();
|
|
87561
88496
|
toggleEyedropper = output();
|
|
87562
88497
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RibbonViewSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
87563
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.8", type: RibbonViewSectionComponent, isStandalone: true, selector: "pptx-ribbon-view-section", inputs: { canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showRulers: { classPropertyName: "showRulers", publicName: "showRulers", isSignal: true, isRequired: false, transformFunction: null }, showGuides: { classPropertyName: "showGuides", publicName: "showGuides", isSignal: true, isRequired: false, transformFunction: null }, snapToGrid: { classPropertyName: "snapToGrid", publicName: "snapToGrid", isSignal: true, isRequired: false, transformFunction: null }, snapToShape: { classPropertyName: "snapToShape", publicName: "snapToShape", isSignal: true, isRequired: false, transformFunction: null }, eyedropperActive: { classPropertyName: "eyedropperActive", publicName: "eyedropperActive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openSorter: "openSorter", openMasterView: "openMasterView", toggleGrid: "toggleGrid", toggleRulers: "toggleRulers", toggleGuides: "toggleGuides", toggleSelectionPane: "toggleSelectionPane", toggleSnapToGrid: "toggleSnapToGrid", toggleSnapToShape: "toggleSnapToShape", addGuide: "addGuide", zoomToFit: "zoomToFit", toggleEyedropper: "toggleEyedropper" }, host: { classAttribute: "contents" }, ngImport: i0, template: `
|
|
88498
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.8", type: RibbonViewSectionComponent, isStandalone: true, selector: "pptx-ribbon-view-section", inputs: { canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showRulers: { classPropertyName: "showRulers", publicName: "showRulers", isSignal: true, isRequired: false, transformFunction: null }, showGuides: { classPropertyName: "showGuides", publicName: "showGuides", isSignal: true, isRequired: false, transformFunction: null }, snapToGrid: { classPropertyName: "snapToGrid", publicName: "snapToGrid", isSignal: true, isRequired: false, transformFunction: null }, snapToShape: { classPropertyName: "snapToShape", publicName: "snapToShape", isSignal: true, isRequired: false, transformFunction: null }, eyedropperActive: { classPropertyName: "eyedropperActive", publicName: "eyedropperActive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openSorter: "openSorter", openReadingView: "openReadingView", openMasterView: "openMasterView", toggleGrid: "toggleGrid", toggleRulers: "toggleRulers", toggleGuides: "toggleGuides", toggleSelectionPane: "toggleSelectionPane", toggleSnapToGrid: "toggleSnapToGrid", toggleSnapToShape: "toggleSnapToShape", addGuide: "addGuide", zoomToFit: "zoomToFit", toggleEyedropper: "toggleEyedropper" }, host: { classAttribute: "contents" }, ngImport: i0, template: `
|
|
87564
88499
|
<!-- Presentation views -->
|
|
87565
88500
|
<button type="button" class="pptx-rb-pill" [title]="'pptx.view.normal' | translate">
|
|
87566
88501
|
{{ 'pptx.view.normal' | translate }}
|
|
@@ -87573,7 +88508,12 @@ class RibbonViewSectionComponent {
|
|
|
87573
88508
|
>
|
|
87574
88509
|
{{ 'pptx.slideSorter.title' | translate }}
|
|
87575
88510
|
</button>
|
|
87576
|
-
<button
|
|
88511
|
+
<button
|
|
88512
|
+
type="button"
|
|
88513
|
+
class="pptx-rb-pill"
|
|
88514
|
+
[title]="'pptx.view.readingView' | translate"
|
|
88515
|
+
(click)="openReadingView.emit()"
|
|
88516
|
+
>
|
|
87577
88517
|
{{ 'pptx.view.readingView' | translate }}
|
|
87578
88518
|
</button>
|
|
87579
88519
|
<span class="pptx-rb-sep"></span>
|
|
@@ -87729,7 +88669,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
87729
88669
|
>
|
|
87730
88670
|
{{ 'pptx.slideSorter.title' | translate }}
|
|
87731
88671
|
</button>
|
|
87732
|
-
<button
|
|
88672
|
+
<button
|
|
88673
|
+
type="button"
|
|
88674
|
+
class="pptx-rb-pill"
|
|
88675
|
+
[title]="'pptx.view.readingView' | translate"
|
|
88676
|
+
(click)="openReadingView.emit()"
|
|
88677
|
+
>
|
|
87733
88678
|
{{ 'pptx.view.readingView' | translate }}
|
|
87734
88679
|
</button>
|
|
87735
88680
|
<span class="pptx-rb-sep"></span>
|
|
@@ -87864,7 +88809,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
87864
88809
|
</button>
|
|
87865
88810
|
`,
|
|
87866
88811
|
}]
|
|
87867
|
-
}], propDecorators: { canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], showRulers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRulers", required: false }] }], showGuides: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGuides", required: false }] }], snapToGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToGrid", required: false }] }], snapToShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToShape", required: false }] }], eyedropperActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "eyedropperActive", required: false }] }], openSorter: [{ type: i0.Output, args: ["openSorter"] }], openMasterView: [{ type: i0.Output, args: ["openMasterView"] }], toggleGrid: [{ type: i0.Output, args: ["toggleGrid"] }], toggleRulers: [{ type: i0.Output, args: ["toggleRulers"] }], toggleGuides: [{ type: i0.Output, args: ["toggleGuides"] }], toggleSelectionPane: [{ type: i0.Output, args: ["toggleSelectionPane"] }], toggleSnapToGrid: [{ type: i0.Output, args: ["toggleSnapToGrid"] }], toggleSnapToShape: [{ type: i0.Output, args: ["toggleSnapToShape"] }], addGuide: [{ type: i0.Output, args: ["addGuide"] }], zoomToFit: [{ type: i0.Output, args: ["zoomToFit"] }], toggleEyedropper: [{ type: i0.Output, args: ["toggleEyedropper"] }] } });
|
|
88812
|
+
}], propDecorators: { canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], showRulers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRulers", required: false }] }], showGuides: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGuides", required: false }] }], snapToGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToGrid", required: false }] }], snapToShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToShape", required: false }] }], eyedropperActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "eyedropperActive", required: false }] }], openSorter: [{ type: i0.Output, args: ["openSorter"] }], openReadingView: [{ type: i0.Output, args: ["openReadingView"] }], openMasterView: [{ type: i0.Output, args: ["openMasterView"] }], toggleGrid: [{ type: i0.Output, args: ["toggleGrid"] }], toggleRulers: [{ type: i0.Output, args: ["toggleRulers"] }], toggleGuides: [{ type: i0.Output, args: ["toggleGuides"] }], toggleSelectionPane: [{ type: i0.Output, args: ["toggleSelectionPane"] }], toggleSnapToGrid: [{ type: i0.Output, args: ["toggleSnapToGrid"] }], toggleSnapToShape: [{ type: i0.Output, args: ["toggleSnapToShape"] }], addGuide: [{ type: i0.Output, args: ["addGuide"] }], zoomToFit: [{ type: i0.Output, args: ["zoomToFit"] }], toggleEyedropper: [{ type: i0.Output, args: ["toggleEyedropper"] }] } });
|
|
87868
88813
|
|
|
87869
88814
|
/**
|
|
87870
88815
|
* ribbon-content-secondary.component.ts: the ribbon's Slide Show/Review/View/
|
|
@@ -87933,6 +88878,8 @@ class RibbonContentSecondaryComponent {
|
|
|
87933
88878
|
a11y = output();
|
|
87934
88879
|
link = output();
|
|
87935
88880
|
openSorter = output();
|
|
88881
|
+
/** View tab > Reading View: the deck full-window, not the slide show. */
|
|
88882
|
+
openReadingView = output();
|
|
87936
88883
|
openMasterView = output();
|
|
87937
88884
|
toggleNotes = output();
|
|
87938
88885
|
toggleInspector = output();
|
|
@@ -87971,7 +88918,7 @@ class RibbonContentSecondaryComponent {
|
|
|
87971
88918
|
this.drawToolChange.emit(state);
|
|
87972
88919
|
}
|
|
87973
88920
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RibbonContentSecondaryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
87974
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: RibbonContentSecondaryComponent, isStandalone: true, selector: "pptx-ribbon-content-secondary", inputs: { activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: true, transformFunction: null }, slideIndex: { classPropertyName: "slideIndex", publicName: "slideIndex", isSignal: true, isRequired: false, transformFunction: null }, slideCount: { classPropertyName: "slideCount", publicName: "slideCount", isSignal: true, isRequired: false, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: true, isRequired: false, transformFunction: null }, selectedElement: { classPropertyName: "selectedElement", publicName: "selectedElement", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showRulers: { classPropertyName: "showRulers", publicName: "showRulers", isSignal: true, isRequired: false, transformFunction: null }, showGuides: { classPropertyName: "showGuides", publicName: "showGuides", isSignal: true, isRequired: false, transformFunction: null }, snapToGrid: { classPropertyName: "snapToGrid", publicName: "snapToGrid", isSignal: true, isRequired: false, transformFunction: null }, snapToShape: { classPropertyName: "snapToShape", publicName: "snapToShape", isSignal: true, isRequired: false, transformFunction: null }, eyedropperActive: { classPropertyName: "eyedropperActive", publicName: "eyedropperActive", isSignal: true, isRequired: false, transformFunction: null }, themeGalleryOpen: { classPropertyName: "themeGalleryOpen", publicName: "themeGalleryOpen", isSignal: true, isRequired: false, transformFunction: null }, spellCheckEnabled: { classPropertyName: "spellCheckEnabled", publicName: "spellCheckEnabled", isSignal: true, isRequired: false, transformFunction: null }, showSubtitles: { classPropertyName: "showSubtitles", publicName: "showSubtitles", isSignal: true, isRequired: false, transformFunction: null }, hiddenActions: { classPropertyName: "hiddenActions", publicName: "hiddenActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { present: "present", presenter: "presenter", record: "record", presentFromBeginning: "presentFromBeginning", rehearseTimings: "rehearseTimings", toggleSubtitles: "toggleSubtitles", openSubtitleSettings: "openSubtitleSettings", recordFromBeginning: "recordFromBeginning", recordFromCurrent: "recordFromCurrent", spellCheckChange: "spellCheckChange", broadcast: "broadcast", info: "info", print: "print", comments: "comments", a11y: "a11y", link: "link", openSorter: "openSorter", openMasterView: "openMasterView", toggleNotes: "toggleNotes", toggleInspector: "toggleInspector", drawToolChange: "drawToolChange", toggleThemeGallery: "toggleThemeGallery", toggleGrid: "toggleGrid", toggleRulers: "toggleRulers", toggleGuides: "toggleGuides", toggleSelectionPane: "toggleSelectionPane", openCustomShows: "openCustomShows", toggleSnapToGrid: "toggleSnapToGrid", toggleSnapToShape: "toggleSnapToShape", addGuide: "addGuide", zoomToFit: "zoomToFit", toggleEyedropper: "toggleEyedropper", openSetUpSlideShow: "openSetUpSlideShow", openCompare: "openCompare", openShortcuts: "openShortcuts", openSettings: "openSettings" }, host: { classAttribute: "contents" }, ngImport: i0, template: `
|
|
88921
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: RibbonContentSecondaryComponent, isStandalone: true, selector: "pptx-ribbon-content-secondary", inputs: { activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: true, transformFunction: null }, slideIndex: { classPropertyName: "slideIndex", publicName: "slideIndex", isSignal: true, isRequired: false, transformFunction: null }, slideCount: { classPropertyName: "slideCount", publicName: "slideCount", isSignal: true, isRequired: false, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: true, isRequired: false, transformFunction: null }, selectedElement: { classPropertyName: "selectedElement", publicName: "selectedElement", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showRulers: { classPropertyName: "showRulers", publicName: "showRulers", isSignal: true, isRequired: false, transformFunction: null }, showGuides: { classPropertyName: "showGuides", publicName: "showGuides", isSignal: true, isRequired: false, transformFunction: null }, snapToGrid: { classPropertyName: "snapToGrid", publicName: "snapToGrid", isSignal: true, isRequired: false, transformFunction: null }, snapToShape: { classPropertyName: "snapToShape", publicName: "snapToShape", isSignal: true, isRequired: false, transformFunction: null }, eyedropperActive: { classPropertyName: "eyedropperActive", publicName: "eyedropperActive", isSignal: true, isRequired: false, transformFunction: null }, themeGalleryOpen: { classPropertyName: "themeGalleryOpen", publicName: "themeGalleryOpen", isSignal: true, isRequired: false, transformFunction: null }, spellCheckEnabled: { classPropertyName: "spellCheckEnabled", publicName: "spellCheckEnabled", isSignal: true, isRequired: false, transformFunction: null }, showSubtitles: { classPropertyName: "showSubtitles", publicName: "showSubtitles", isSignal: true, isRequired: false, transformFunction: null }, hiddenActions: { classPropertyName: "hiddenActions", publicName: "hiddenActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { present: "present", presenter: "presenter", record: "record", presentFromBeginning: "presentFromBeginning", rehearseTimings: "rehearseTimings", toggleSubtitles: "toggleSubtitles", openSubtitleSettings: "openSubtitleSettings", recordFromBeginning: "recordFromBeginning", recordFromCurrent: "recordFromCurrent", spellCheckChange: "spellCheckChange", broadcast: "broadcast", info: "info", print: "print", comments: "comments", a11y: "a11y", link: "link", openSorter: "openSorter", openReadingView: "openReadingView", openMasterView: "openMasterView", toggleNotes: "toggleNotes", toggleInspector: "toggleInspector", drawToolChange: "drawToolChange", toggleThemeGallery: "toggleThemeGallery", toggleGrid: "toggleGrid", toggleRulers: "toggleRulers", toggleGuides: "toggleGuides", toggleSelectionPane: "toggleSelectionPane", openCustomShows: "openCustomShows", toggleSnapToGrid: "toggleSnapToGrid", toggleSnapToShape: "toggleSnapToShape", addGuide: "addGuide", zoomToFit: "zoomToFit", toggleEyedropper: "toggleEyedropper", openSetUpSlideShow: "openSetUpSlideShow", openCompare: "openCompare", openShortcuts: "openShortcuts", openSettings: "openSettings" }, host: { classAttribute: "contents" }, ngImport: i0, template: `
|
|
87975
88922
|
@switch (activeTab()) {
|
|
87976
88923
|
@case ('slideShow') {
|
|
87977
88924
|
<pptx-ribbon-slideshow-section
|
|
@@ -88012,6 +88959,7 @@ class RibbonContentSecondaryComponent {
|
|
|
88012
88959
|
[snapToShape]="snapToShape()"
|
|
88013
88960
|
[eyedropperActive]="eyedropperActive()"
|
|
88014
88961
|
(openSorter)="openSorter.emit()"
|
|
88962
|
+
(openReadingView)="openReadingView.emit()"
|
|
88015
88963
|
(openMasterView)="openMasterView.emit()"
|
|
88016
88964
|
(toggleGrid)="toggleGrid.emit()"
|
|
88017
88965
|
(toggleRulers)="toggleRulers.emit()"
|
|
@@ -88078,7 +89026,7 @@ class RibbonContentSecondaryComponent {
|
|
|
88078
89026
|
/>
|
|
88079
89027
|
}
|
|
88080
89028
|
}
|
|
88081
|
-
`, isInline: true, dependencies: [{ kind: "component", type: RibbonSlideshowSectionComponent, selector: "pptx-ribbon-slideshow-section", inputs: ["slideCount", "showSubtitles", "hiddenActions"], outputs: ["presentFromBeginning", "presentFromCurrent", "presenter", "broadcast", "openCustomShows", "openSetUpSlideShow", "rehearseTimings", "record", "toggleSubtitles", "openSubtitleSettings"] }, { kind: "component", type: RibbonReviewSectionComponent, selector: "pptx-ribbon-review-section", inputs: ["spellCheckEnabled", "canEdit"], outputs: ["comments", "spellCheckChange", "a11y", "openCompare", "language", "link"] }, { kind: "component", type: RibbonViewSectionComponent, selector: "pptx-ribbon-view-section", inputs: ["canEdit", "showGrid", "showRulers", "showGuides", "snapToGrid", "snapToShape", "eyedropperActive"], outputs: ["openSorter", "openMasterView", "toggleGrid", "toggleRulers", "toggleGuides", "toggleSelectionPane", "toggleSnapToGrid", "toggleSnapToShape", "addGuide", "zoomToFit", "toggleEyedropper"] }, { kind: "component", type: RibbonDrawSectionComponent, selector: "pptx-ribbon-draw-section", inputs: ["activeTool", "drawingColor", "drawingWidth"], outputs: ["drawToolChange"] }, { kind: "component", type: RibbonDesignSectionComponent, selector: "pptx-ribbon-design-section", inputs: ["themeGalleryOpen"], outputs: ["toggleThemeGallery", "info", "toggleInspector"] }, { kind: "component", type: RibbonTransitionsSectionComponent, selector: "pptx-ribbon-transitions-section", inputs: ["slideIndex", "selectedTransition", "transitionDurationSec"], outputs: ["present", "toggleInspector", "transitionChange", "durationChange"] }, { kind: "component", type: RibbonAnimationsSectionComponent, selector: "pptx-ribbon-animations-section", inputs: ["slideIndex", "selectedElement", "canEdit"], outputs: ["present", "toggleInspector"] }, { kind: "component", type: RibbonRecordSectionComponent, selector: "pptx-ribbon-record-section", outputs: ["recordFromBeginning", "recordFromCurrent"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
89029
|
+
`, isInline: true, dependencies: [{ kind: "component", type: RibbonSlideshowSectionComponent, selector: "pptx-ribbon-slideshow-section", inputs: ["slideCount", "showSubtitles", "hiddenActions"], outputs: ["presentFromBeginning", "presentFromCurrent", "presenter", "broadcast", "openCustomShows", "openSetUpSlideShow", "rehearseTimings", "record", "toggleSubtitles", "openSubtitleSettings"] }, { kind: "component", type: RibbonReviewSectionComponent, selector: "pptx-ribbon-review-section", inputs: ["spellCheckEnabled", "canEdit"], outputs: ["comments", "spellCheckChange", "a11y", "openCompare", "language", "link"] }, { kind: "component", type: RibbonViewSectionComponent, selector: "pptx-ribbon-view-section", inputs: ["canEdit", "showGrid", "showRulers", "showGuides", "snapToGrid", "snapToShape", "eyedropperActive"], outputs: ["openSorter", "openReadingView", "openMasterView", "toggleGrid", "toggleRulers", "toggleGuides", "toggleSelectionPane", "toggleSnapToGrid", "toggleSnapToShape", "addGuide", "zoomToFit", "toggleEyedropper"] }, { kind: "component", type: RibbonDrawSectionComponent, selector: "pptx-ribbon-draw-section", inputs: ["activeTool", "drawingColor", "drawingWidth"], outputs: ["drawToolChange"] }, { kind: "component", type: RibbonDesignSectionComponent, selector: "pptx-ribbon-design-section", inputs: ["themeGalleryOpen"], outputs: ["toggleThemeGallery", "info", "toggleInspector"] }, { kind: "component", type: RibbonTransitionsSectionComponent, selector: "pptx-ribbon-transitions-section", inputs: ["slideIndex", "selectedTransition", "transitionDurationSec"], outputs: ["present", "toggleInspector", "transitionChange", "durationChange"] }, { kind: "component", type: RibbonAnimationsSectionComponent, selector: "pptx-ribbon-animations-section", inputs: ["slideIndex", "selectedElement", "canEdit"], outputs: ["present", "toggleInspector"] }, { kind: "component", type: RibbonRecordSectionComponent, selector: "pptx-ribbon-record-section", outputs: ["recordFromBeginning", "recordFromCurrent"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
88082
89030
|
}
|
|
88083
89031
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RibbonContentSecondaryComponent, decorators: [{
|
|
88084
89032
|
type: Component,
|
|
@@ -88139,6 +89087,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
88139
89087
|
[snapToShape]="snapToShape()"
|
|
88140
89088
|
[eyedropperActive]="eyedropperActive()"
|
|
88141
89089
|
(openSorter)="openSorter.emit()"
|
|
89090
|
+
(openReadingView)="openReadingView.emit()"
|
|
88142
89091
|
(openMasterView)="openMasterView.emit()"
|
|
88143
89092
|
(toggleGrid)="toggleGrid.emit()"
|
|
88144
89093
|
(toggleRulers)="toggleRulers.emit()"
|
|
@@ -88207,7 +89156,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
88207
89156
|
}
|
|
88208
89157
|
`,
|
|
88209
89158
|
}]
|
|
88210
|
-
}], propDecorators: { activeTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTab", required: true }] }], slideIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideIndex", required: false }] }], slideCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideCount", required: false }] }], canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], selectedElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedElement", required: false }] }], showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], showRulers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRulers", required: false }] }], showGuides: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGuides", required: false }] }], snapToGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToGrid", required: false }] }], snapToShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToShape", required: false }] }], eyedropperActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "eyedropperActive", required: false }] }], themeGalleryOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "themeGalleryOpen", required: false }] }], spellCheckEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "spellCheckEnabled", required: false }] }], showSubtitles: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSubtitles", required: false }] }], hiddenActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "hiddenActions", required: false }] }], present: [{ type: i0.Output, args: ["present"] }], presenter: [{ type: i0.Output, args: ["presenter"] }], record: [{ type: i0.Output, args: ["record"] }], presentFromBeginning: [{ type: i0.Output, args: ["presentFromBeginning"] }], rehearseTimings: [{ type: i0.Output, args: ["rehearseTimings"] }], toggleSubtitles: [{ type: i0.Output, args: ["toggleSubtitles"] }], openSubtitleSettings: [{ type: i0.Output, args: ["openSubtitleSettings"] }], recordFromBeginning: [{ type: i0.Output, args: ["recordFromBeginning"] }], recordFromCurrent: [{ type: i0.Output, args: ["recordFromCurrent"] }], spellCheckChange: [{ type: i0.Output, args: ["spellCheckChange"] }], broadcast: [{ type: i0.Output, args: ["broadcast"] }], info: [{ type: i0.Output, args: ["info"] }], print: [{ type: i0.Output, args: ["print"] }], comments: [{ type: i0.Output, args: ["comments"] }], a11y: [{ type: i0.Output, args: ["a11y"] }], link: [{ type: i0.Output, args: ["link"] }], openSorter: [{ type: i0.Output, args: ["openSorter"] }], openMasterView: [{ type: i0.Output, args: ["openMasterView"] }], toggleNotes: [{ type: i0.Output, args: ["toggleNotes"] }], toggleInspector: [{ type: i0.Output, args: ["toggleInspector"] }], drawToolChange: [{ type: i0.Output, args: ["drawToolChange"] }], toggleThemeGallery: [{ type: i0.Output, args: ["toggleThemeGallery"] }], toggleGrid: [{ type: i0.Output, args: ["toggleGrid"] }], toggleRulers: [{ type: i0.Output, args: ["toggleRulers"] }], toggleGuides: [{ type: i0.Output, args: ["toggleGuides"] }], toggleSelectionPane: [{ type: i0.Output, args: ["toggleSelectionPane"] }], openCustomShows: [{ type: i0.Output, args: ["openCustomShows"] }], toggleSnapToGrid: [{ type: i0.Output, args: ["toggleSnapToGrid"] }], toggleSnapToShape: [{ type: i0.Output, args: ["toggleSnapToShape"] }], addGuide: [{ type: i0.Output, args: ["addGuide"] }], zoomToFit: [{ type: i0.Output, args: ["zoomToFit"] }], toggleEyedropper: [{ type: i0.Output, args: ["toggleEyedropper"] }], openSetUpSlideShow: [{ type: i0.Output, args: ["openSetUpSlideShow"] }], openCompare: [{ type: i0.Output, args: ["openCompare"] }], openShortcuts: [{ type: i0.Output, args: ["openShortcuts"] }], openSettings: [{ type: i0.Output, args: ["openSettings"] }] } });
|
|
89159
|
+
}], propDecorators: { activeTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTab", required: true }] }], slideIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideIndex", required: false }] }], slideCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideCount", required: false }] }], canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], selectedElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedElement", required: false }] }], showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], showRulers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRulers", required: false }] }], showGuides: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGuides", required: false }] }], snapToGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToGrid", required: false }] }], snapToShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToShape", required: false }] }], eyedropperActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "eyedropperActive", required: false }] }], themeGalleryOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "themeGalleryOpen", required: false }] }], spellCheckEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "spellCheckEnabled", required: false }] }], showSubtitles: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSubtitles", required: false }] }], hiddenActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "hiddenActions", required: false }] }], present: [{ type: i0.Output, args: ["present"] }], presenter: [{ type: i0.Output, args: ["presenter"] }], record: [{ type: i0.Output, args: ["record"] }], presentFromBeginning: [{ type: i0.Output, args: ["presentFromBeginning"] }], rehearseTimings: [{ type: i0.Output, args: ["rehearseTimings"] }], toggleSubtitles: [{ type: i0.Output, args: ["toggleSubtitles"] }], openSubtitleSettings: [{ type: i0.Output, args: ["openSubtitleSettings"] }], recordFromBeginning: [{ type: i0.Output, args: ["recordFromBeginning"] }], recordFromCurrent: [{ type: i0.Output, args: ["recordFromCurrent"] }], spellCheckChange: [{ type: i0.Output, args: ["spellCheckChange"] }], broadcast: [{ type: i0.Output, args: ["broadcast"] }], info: [{ type: i0.Output, args: ["info"] }], print: [{ type: i0.Output, args: ["print"] }], comments: [{ type: i0.Output, args: ["comments"] }], a11y: [{ type: i0.Output, args: ["a11y"] }], link: [{ type: i0.Output, args: ["link"] }], openSorter: [{ type: i0.Output, args: ["openSorter"] }], openReadingView: [{ type: i0.Output, args: ["openReadingView"] }], openMasterView: [{ type: i0.Output, args: ["openMasterView"] }], toggleNotes: [{ type: i0.Output, args: ["toggleNotes"] }], toggleInspector: [{ type: i0.Output, args: ["toggleInspector"] }], drawToolChange: [{ type: i0.Output, args: ["drawToolChange"] }], toggleThemeGallery: [{ type: i0.Output, args: ["toggleThemeGallery"] }], toggleGrid: [{ type: i0.Output, args: ["toggleGrid"] }], toggleRulers: [{ type: i0.Output, args: ["toggleRulers"] }], toggleGuides: [{ type: i0.Output, args: ["toggleGuides"] }], toggleSelectionPane: [{ type: i0.Output, args: ["toggleSelectionPane"] }], openCustomShows: [{ type: i0.Output, args: ["openCustomShows"] }], toggleSnapToGrid: [{ type: i0.Output, args: ["toggleSnapToGrid"] }], toggleSnapToShape: [{ type: i0.Output, args: ["toggleSnapToShape"] }], addGuide: [{ type: i0.Output, args: ["addGuide"] }], zoomToFit: [{ type: i0.Output, args: ["zoomToFit"] }], toggleEyedropper: [{ type: i0.Output, args: ["toggleEyedropper"] }], openSetUpSlideShow: [{ type: i0.Output, args: ["openSetUpSlideShow"] }], openCompare: [{ type: i0.Output, args: ["openCompare"] }], openShortcuts: [{ type: i0.Output, args: ["openShortcuts"] }], openSettings: [{ type: i0.Output, args: ["openSettings"] }] } });
|
|
88211
89160
|
|
|
88212
89161
|
/**
|
|
88213
89162
|
* ribbon-shape-extras.component.ts: the Arrange group's shape-level extras
|
|
@@ -89120,7 +90069,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
89120
90069
|
}], propDecorators: { canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], slideIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideIndex", required: false }] }] } });
|
|
89121
90070
|
|
|
89122
90071
|
// Generated by scripts/inline-shared.mjs from package.json. Do not edit.
|
|
89123
|
-
const PPTX_ANGULAR_VIEWER_VERSION = "2.
|
|
90072
|
+
const PPTX_ANGULAR_VIEWER_VERSION = "2.9.0";
|
|
89124
90073
|
|
|
89125
90074
|
/**
|
|
89126
90075
|
* account-page.component.ts: File > Account content.
|
|
@@ -93181,6 +94130,8 @@ class RibbonComponent {
|
|
|
93181
94130
|
a11y = output();
|
|
93182
94131
|
link = output();
|
|
93183
94132
|
openSorter = output();
|
|
94133
|
+
/** View tab > Reading View: the deck full-window, not the slide show. */
|
|
94134
|
+
openReadingView = output();
|
|
93184
94135
|
openMasterView = output();
|
|
93185
94136
|
toggleNotes = output();
|
|
93186
94137
|
toggleFormatPainter = output();
|
|
@@ -93245,7 +94196,7 @@ class RibbonComponent {
|
|
|
93245
94196
|
this.spellCheckChange.emit(enabled);
|
|
93246
94197
|
}
|
|
93247
94198
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RibbonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
93248
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.8", type: RibbonComponent, isStandalone: true, selector: "pptx-ribbon", inputs: { slideIndex: { classPropertyName: "slideIndex", publicName: "slideIndex", isSignal: true, isRequired: false, transformFunction: null }, slideCount: { classPropertyName: "slideCount", publicName: "slideCount", isSignal: true, isRequired: false, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: true, isRequired: false, transformFunction: null }, selectedElement: { classPropertyName: "selectedElement", publicName: "selectedElement", isSignal: true, isRequired: false, transformFunction: null }, zoomPercent: { classPropertyName: "zoomPercent", publicName: "zoomPercent", isSignal: true, isRequired: false, transformFunction: null }, formatPainterActive: { classPropertyName: "formatPainterActive", publicName: "formatPainterActive", isSignal: true, isRequired: false, transformFunction: null }, canActivateFormatPainter: { classPropertyName: "canActivateFormatPainter", publicName: "canActivateFormatPainter", isSignal: true, isRequired: false, transformFunction: null }, exporting: { classPropertyName: "exporting", publicName: "exporting", isSignal: true, isRequired: false, transformFunction: null }, hasMacros: { classPropertyName: "hasMacros", publicName: "hasMacros", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showRulers: { classPropertyName: "showRulers", publicName: "showRulers", isSignal: true, isRequired: false, transformFunction: null }, showGuides: { classPropertyName: "showGuides", publicName: "showGuides", isSignal: true, isRequired: false, transformFunction: null }, snapToGrid: { classPropertyName: "snapToGrid", publicName: "snapToGrid", isSignal: true, isRequired: false, transformFunction: null }, snapToShape: { classPropertyName: "snapToShape", publicName: "snapToShape", isSignal: true, isRequired: false, transformFunction: null }, eyedropperActive: { classPropertyName: "eyedropperActive", publicName: "eyedropperActive", isSignal: true, isRequired: false, transformFunction: null }, themeGalleryOpen: { classPropertyName: "themeGalleryOpen", publicName: "themeGalleryOpen", isSignal: true, isRequired: false, transformFunction: null }, sidebarCollapsed: { classPropertyName: "sidebarCollapsed", publicName: "sidebarCollapsed", isSignal: true, isRequired: false, transformFunction: null }, inspectorOpen: { classPropertyName: "inspectorOpen", publicName: "inspectorOpen", isSignal: true, isRequired: false, transformFunction: null }, commentsOpen: { classPropertyName: "commentsOpen", publicName: "commentsOpen", isSignal: true, isRequired: false, transformFunction: null }, commentCount: { classPropertyName: "commentCount", publicName: "commentCount", isSignal: true, isRequired: false, transformFunction: null }, findOpen: { classPropertyName: "findOpen", publicName: "findOpen", isSignal: true, isRequired: false, transformFunction: null }, collabConnected: { classPropertyName: "collabConnected", publicName: "collabConnected", isSignal: true, isRequired: false, transformFunction: null }, connectedCount: { classPropertyName: "connectedCount", publicName: "connectedCount", isSignal: true, isRequired: false, transformFunction: null }, spellCheckEnabled: { classPropertyName: "spellCheckEnabled", publicName: "spellCheckEnabled", isSignal: true, isRequired: false, transformFunction: null }, showSubtitles: { classPropertyName: "showSubtitles", publicName: "showSubtitles", isSignal: true, isRequired: false, transformFunction: null }, hiddenActions: { classPropertyName: "hiddenActions", publicName: "hiddenActions", isSignal: true, isRequired: false, transformFunction: null }, aiEnabled: { classPropertyName: "aiEnabled", publicName: "aiEnabled", isSignal: true, isRequired: false, transformFunction: null }, aiPanelOpen: { classPropertyName: "aiPanelOpen", publicName: "aiPanelOpen", isSignal: true, isRequired: false, transformFunction: null }, accountAuth: { classPropertyName: "accountAuth", publicName: "accountAuth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { prev: "prev", next: "next", zoomIn: "zoomIn", zoomOut: "zoomOut", zoomReset: "zoomReset", find: "find", present: "present", presenter: "presenter", record: "record", presentFromBeginning: "presentFromBeginning", rehearseTimings: "rehearseTimings", toggleSubtitles: "toggleSubtitles", openSubtitleSettings: "openSubtitleSettings", recordFromBeginning: "recordFromBeginning", recordFromCurrent: "recordFromCurrent", spellCheckChange: "spellCheckChange", share: "share", broadcast: "broadcast", openFile: "openFile", openRecentFile: "openRecentFile", createPresentation: "createPresentation", save: "save", savePpsx: "savePpsx", savePptm: "savePptm", packageForSharing: "packageForSharing", toggleSidebar: "toggleSidebar", toggleAiPanel: "toggleAiPanel", signatures: "signatures", info: "info", print: "print", comments: "comments", a11y: "a11y", link: "link", openSorter: "openSorter", openMasterView: "openMasterView", toggleNotes: "toggleNotes", toggleFormatPainter: "toggleFormatPainter", exportPng: "exportPng", exportPdf: "exportPdf", exportGif: "exportGif", exportVideo: "exportVideo", copySlideAsImage: "copySlideAsImage", replace: "replace", toggleInspector: "toggleInspector", drawToolChange: "drawToolChange", toggleThemeGallery: "toggleThemeGallery", toggleGrid: "toggleGrid", toggleRulers: "toggleRulers", toggleGuides: "toggleGuides", toggleSelectionPane: "toggleSelectionPane", openCustomShows: "openCustomShows", toggleSnapToGrid: "toggleSnapToGrid", toggleSnapToShape: "toggleSnapToShape", addGuide: "addGuide", zoomToFit: "zoomToFit", toggleEyedropper: "toggleEyedropper", openSmartArtDialog: "openSmartArtDialog", openEquationDialog: "openEquationDialog", openSetUpSlideShow: "openSetUpSlideShow", openCompare: "openCompare", openPassword: "openPassword", openFontEmbedding: "openFontEmbedding", openVersionHistory: "openVersionHistory", openShortcuts: "openShortcuts", openSettings: "openSettings" }, ngImport: i0, template: `
|
|
94199
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.8", type: RibbonComponent, isStandalone: true, selector: "pptx-ribbon", inputs: { slideIndex: { classPropertyName: "slideIndex", publicName: "slideIndex", isSignal: true, isRequired: false, transformFunction: null }, slideCount: { classPropertyName: "slideCount", publicName: "slideCount", isSignal: true, isRequired: false, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: true, isRequired: false, transformFunction: null }, selectedElement: { classPropertyName: "selectedElement", publicName: "selectedElement", isSignal: true, isRequired: false, transformFunction: null }, zoomPercent: { classPropertyName: "zoomPercent", publicName: "zoomPercent", isSignal: true, isRequired: false, transformFunction: null }, formatPainterActive: { classPropertyName: "formatPainterActive", publicName: "formatPainterActive", isSignal: true, isRequired: false, transformFunction: null }, canActivateFormatPainter: { classPropertyName: "canActivateFormatPainter", publicName: "canActivateFormatPainter", isSignal: true, isRequired: false, transformFunction: null }, exporting: { classPropertyName: "exporting", publicName: "exporting", isSignal: true, isRequired: false, transformFunction: null }, hasMacros: { classPropertyName: "hasMacros", publicName: "hasMacros", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showRulers: { classPropertyName: "showRulers", publicName: "showRulers", isSignal: true, isRequired: false, transformFunction: null }, showGuides: { classPropertyName: "showGuides", publicName: "showGuides", isSignal: true, isRequired: false, transformFunction: null }, snapToGrid: { classPropertyName: "snapToGrid", publicName: "snapToGrid", isSignal: true, isRequired: false, transformFunction: null }, snapToShape: { classPropertyName: "snapToShape", publicName: "snapToShape", isSignal: true, isRequired: false, transformFunction: null }, eyedropperActive: { classPropertyName: "eyedropperActive", publicName: "eyedropperActive", isSignal: true, isRequired: false, transformFunction: null }, themeGalleryOpen: { classPropertyName: "themeGalleryOpen", publicName: "themeGalleryOpen", isSignal: true, isRequired: false, transformFunction: null }, sidebarCollapsed: { classPropertyName: "sidebarCollapsed", publicName: "sidebarCollapsed", isSignal: true, isRequired: false, transformFunction: null }, inspectorOpen: { classPropertyName: "inspectorOpen", publicName: "inspectorOpen", isSignal: true, isRequired: false, transformFunction: null }, commentsOpen: { classPropertyName: "commentsOpen", publicName: "commentsOpen", isSignal: true, isRequired: false, transformFunction: null }, commentCount: { classPropertyName: "commentCount", publicName: "commentCount", isSignal: true, isRequired: false, transformFunction: null }, findOpen: { classPropertyName: "findOpen", publicName: "findOpen", isSignal: true, isRequired: false, transformFunction: null }, collabConnected: { classPropertyName: "collabConnected", publicName: "collabConnected", isSignal: true, isRequired: false, transformFunction: null }, connectedCount: { classPropertyName: "connectedCount", publicName: "connectedCount", isSignal: true, isRequired: false, transformFunction: null }, spellCheckEnabled: { classPropertyName: "spellCheckEnabled", publicName: "spellCheckEnabled", isSignal: true, isRequired: false, transformFunction: null }, showSubtitles: { classPropertyName: "showSubtitles", publicName: "showSubtitles", isSignal: true, isRequired: false, transformFunction: null }, hiddenActions: { classPropertyName: "hiddenActions", publicName: "hiddenActions", isSignal: true, isRequired: false, transformFunction: null }, aiEnabled: { classPropertyName: "aiEnabled", publicName: "aiEnabled", isSignal: true, isRequired: false, transformFunction: null }, aiPanelOpen: { classPropertyName: "aiPanelOpen", publicName: "aiPanelOpen", isSignal: true, isRequired: false, transformFunction: null }, accountAuth: { classPropertyName: "accountAuth", publicName: "accountAuth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { prev: "prev", next: "next", zoomIn: "zoomIn", zoomOut: "zoomOut", zoomReset: "zoomReset", find: "find", present: "present", presenter: "presenter", record: "record", presentFromBeginning: "presentFromBeginning", rehearseTimings: "rehearseTimings", toggleSubtitles: "toggleSubtitles", openSubtitleSettings: "openSubtitleSettings", recordFromBeginning: "recordFromBeginning", recordFromCurrent: "recordFromCurrent", spellCheckChange: "spellCheckChange", share: "share", broadcast: "broadcast", openFile: "openFile", openRecentFile: "openRecentFile", createPresentation: "createPresentation", save: "save", savePpsx: "savePpsx", savePptm: "savePptm", packageForSharing: "packageForSharing", toggleSidebar: "toggleSidebar", toggleAiPanel: "toggleAiPanel", signatures: "signatures", info: "info", print: "print", comments: "comments", a11y: "a11y", link: "link", openSorter: "openSorter", openReadingView: "openReadingView", openMasterView: "openMasterView", toggleNotes: "toggleNotes", toggleFormatPainter: "toggleFormatPainter", exportPng: "exportPng", exportPdf: "exportPdf", exportGif: "exportGif", exportVideo: "exportVideo", copySlideAsImage: "copySlideAsImage", replace: "replace", toggleInspector: "toggleInspector", drawToolChange: "drawToolChange", toggleThemeGallery: "toggleThemeGallery", toggleGrid: "toggleGrid", toggleRulers: "toggleRulers", toggleGuides: "toggleGuides", toggleSelectionPane: "toggleSelectionPane", openCustomShows: "openCustomShows", toggleSnapToGrid: "toggleSnapToGrid", toggleSnapToShape: "toggleSnapToShape", addGuide: "addGuide", zoomToFit: "zoomToFit", toggleEyedropper: "toggleEyedropper", openSmartArtDialog: "openSmartArtDialog", openEquationDialog: "openEquationDialog", openSetUpSlideShow: "openSetUpSlideShow", openCompare: "openCompare", openPassword: "openPassword", openFontEmbedding: "openFontEmbedding", openVersionHistory: "openVersionHistory", openShortcuts: "openShortcuts", openSettings: "openSettings" }, ngImport: i0, template: `
|
|
93249
94200
|
<div
|
|
93250
94201
|
role="toolbar"
|
|
93251
94202
|
[attr.aria-label]="'pptx.toolbar.presentationToolbarAria' | translate"
|
|
@@ -93369,6 +94320,7 @@ class RibbonComponent {
|
|
|
93369
94320
|
(a11y)="a11y.emit()"
|
|
93370
94321
|
(link)="link.emit()"
|
|
93371
94322
|
(openSorter)="openSorter.emit()"
|
|
94323
|
+
(openReadingView)="openReadingView.emit()"
|
|
93372
94324
|
(openMasterView)="openMasterView.emit()"
|
|
93373
94325
|
(toggleNotes)="toggleNotes.emit()"
|
|
93374
94326
|
(toggleInspector)="toggleInspector.emit()"
|
|
@@ -93391,7 +94343,7 @@ class RibbonComponent {
|
|
|
93391
94343
|
/>
|
|
93392
94344
|
</div>
|
|
93393
94345
|
</div>
|
|
93394
|
-
`, isInline: true, dependencies: [{ kind: "component", type: RibbonPrimaryRowComponent, selector: "pptx-ribbon-primary-row", inputs: ["slideCount", "sidebarCollapsed", "inspectorOpen", "commentsOpen", "commentCount", "hiddenActions", "aiEnabled", "aiPanelOpen"], outputs: ["toggleSidebar", "toggleAiPanel", "toggleComments", "present", "presenter", "broadcast", "openCustomShows", "toggleInspector", "openSettings", "exportPng", "exportPdf", "exportGif", "exportVideo", "print", "info", "a11y", "save"] }, { kind: "component", type: RibbonTabListComponent, selector: "pptx-ribbon-tab-list", inputs: ["activeTab", "canEdit", "collabConnected", "connectedCount", "ribbonExpanded", "hiddenActions"], outputs: ["selectTab", "record", "share", "toggleRibbonExpanded"] }, { kind: "component", type: RibbonContentComponent, selector: "pptx-ribbon-content", inputs: ["activeTab", "slideIndex", "slideCount", "canEdit", "selectedElement", "formatPainterActive", "canActivateFormatPainter", "exporting", "hasMacros", "hiddenActions", "accountAuth"], outputs: ["selectTab", "find", "share", "openFile", "openRecentFile", "createPresentation", "save", "savePpsx", "savePptm", "packageForSharing", "signatures", "info", "print", "toggleFormatPainter", "exportPng", "exportPdf", "exportGif", "exportVideo", "copySlideAsImage", "replace", "openSmartArtDialog", "openEquationDialog", "link", "openPassword", "openFontEmbedding", "openVersionHistory", "openSettings"] }, { kind: "component", type: RibbonContentSecondaryComponent, selector: "pptx-ribbon-content-secondary", inputs: ["activeTab", "slideIndex", "slideCount", "canEdit", "selectedElement", "showGrid", "showRulers", "showGuides", "snapToGrid", "snapToShape", "eyedropperActive", "themeGalleryOpen", "spellCheckEnabled", "showSubtitles", "hiddenActions"], outputs: ["present", "presenter", "record", "presentFromBeginning", "rehearseTimings", "toggleSubtitles", "openSubtitleSettings", "recordFromBeginning", "recordFromCurrent", "spellCheckChange", "broadcast", "info", "print", "comments", "a11y", "link", "openSorter", "openMasterView", "toggleNotes", "toggleInspector", "drawToolChange", "toggleThemeGallery", "toggleGrid", "toggleRulers", "toggleGuides", "toggleSelectionPane", "openCustomShows", "toggleSnapToGrid", "toggleSnapToShape", "addGuide", "zoomToFit", "toggleEyedropper", "openSetUpSlideShow", "openCompare", "openShortcuts", "openSettings"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
94346
|
+
`, isInline: true, dependencies: [{ kind: "component", type: RibbonPrimaryRowComponent, selector: "pptx-ribbon-primary-row", inputs: ["slideCount", "sidebarCollapsed", "inspectorOpen", "commentsOpen", "commentCount", "hiddenActions", "aiEnabled", "aiPanelOpen"], outputs: ["toggleSidebar", "toggleAiPanel", "toggleComments", "present", "presenter", "broadcast", "openCustomShows", "toggleInspector", "openSettings", "exportPng", "exportPdf", "exportGif", "exportVideo", "print", "info", "a11y", "save"] }, { kind: "component", type: RibbonTabListComponent, selector: "pptx-ribbon-tab-list", inputs: ["activeTab", "canEdit", "collabConnected", "connectedCount", "ribbonExpanded", "hiddenActions"], outputs: ["selectTab", "record", "share", "toggleRibbonExpanded"] }, { kind: "component", type: RibbonContentComponent, selector: "pptx-ribbon-content", inputs: ["activeTab", "slideIndex", "slideCount", "canEdit", "selectedElement", "formatPainterActive", "canActivateFormatPainter", "exporting", "hasMacros", "hiddenActions", "accountAuth"], outputs: ["selectTab", "find", "share", "openFile", "openRecentFile", "createPresentation", "save", "savePpsx", "savePptm", "packageForSharing", "signatures", "info", "print", "toggleFormatPainter", "exportPng", "exportPdf", "exportGif", "exportVideo", "copySlideAsImage", "replace", "openSmartArtDialog", "openEquationDialog", "link", "openPassword", "openFontEmbedding", "openVersionHistory", "openSettings"] }, { kind: "component", type: RibbonContentSecondaryComponent, selector: "pptx-ribbon-content-secondary", inputs: ["activeTab", "slideIndex", "slideCount", "canEdit", "selectedElement", "showGrid", "showRulers", "showGuides", "snapToGrid", "snapToShape", "eyedropperActive", "themeGalleryOpen", "spellCheckEnabled", "showSubtitles", "hiddenActions"], outputs: ["present", "presenter", "record", "presentFromBeginning", "rehearseTimings", "toggleSubtitles", "openSubtitleSettings", "recordFromBeginning", "recordFromCurrent", "spellCheckChange", "broadcast", "info", "print", "comments", "a11y", "link", "openSorter", "openReadingView", "openMasterView", "toggleNotes", "toggleInspector", "drawToolChange", "toggleThemeGallery", "toggleGrid", "toggleRulers", "toggleGuides", "toggleSelectionPane", "openCustomShows", "toggleSnapToGrid", "toggleSnapToShape", "addGuide", "zoomToFit", "toggleEyedropper", "openSetUpSlideShow", "openCompare", "openShortcuts", "openSettings"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
93395
94347
|
}
|
|
93396
94348
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RibbonComponent, decorators: [{
|
|
93397
94349
|
type: Component,
|
|
@@ -93530,6 +94482,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
93530
94482
|
(a11y)="a11y.emit()"
|
|
93531
94483
|
(link)="link.emit()"
|
|
93532
94484
|
(openSorter)="openSorter.emit()"
|
|
94485
|
+
(openReadingView)="openReadingView.emit()"
|
|
93533
94486
|
(openMasterView)="openMasterView.emit()"
|
|
93534
94487
|
(toggleNotes)="toggleNotes.emit()"
|
|
93535
94488
|
(toggleInspector)="toggleInspector.emit()"
|
|
@@ -93554,7 +94507,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
93554
94507
|
</div>
|
|
93555
94508
|
`,
|
|
93556
94509
|
}]
|
|
93557
|
-
}], propDecorators: { slideIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideIndex", required: false }] }], slideCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideCount", required: false }] }], canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], selectedElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedElement", required: false }] }], zoomPercent: [{ type: i0.Input, args: [{ isSignal: true, alias: "zoomPercent", required: false }] }], formatPainterActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatPainterActive", required: false }] }], canActivateFormatPainter: [{ type: i0.Input, args: [{ isSignal: true, alias: "canActivateFormatPainter", required: false }] }], exporting: [{ type: i0.Input, args: [{ isSignal: true, alias: "exporting", required: false }] }], hasMacros: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasMacros", required: false }] }], showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], showRulers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRulers", required: false }] }], showGuides: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGuides", required: false }] }], snapToGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToGrid", required: false }] }], snapToShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToShape", required: false }] }], eyedropperActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "eyedropperActive", required: false }] }], themeGalleryOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "themeGalleryOpen", required: false }] }], sidebarCollapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "sidebarCollapsed", required: false }] }], inspectorOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "inspectorOpen", required: false }] }], commentsOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "commentsOpen", required: false }] }], commentCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "commentCount", required: false }] }], findOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "findOpen", required: false }] }], collabConnected: [{ type: i0.Input, args: [{ isSignal: true, alias: "collabConnected", required: false }] }], connectedCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "connectedCount", required: false }] }], spellCheckEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "spellCheckEnabled", required: false }] }], showSubtitles: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSubtitles", required: false }] }], hiddenActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "hiddenActions", required: false }] }], aiEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "aiEnabled", required: false }] }], aiPanelOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "aiPanelOpen", required: false }] }], accountAuth: [{ type: i0.Input, args: [{ isSignal: true, alias: "accountAuth", required: false }] }], prev: [{ type: i0.Output, args: ["prev"] }], next: [{ type: i0.Output, args: ["next"] }], zoomIn: [{ type: i0.Output, args: ["zoomIn"] }], zoomOut: [{ type: i0.Output, args: ["zoomOut"] }], zoomReset: [{ type: i0.Output, args: ["zoomReset"] }], find: [{ type: i0.Output, args: ["find"] }], present: [{ type: i0.Output, args: ["present"] }], presenter: [{ type: i0.Output, args: ["presenter"] }], record: [{ type: i0.Output, args: ["record"] }], presentFromBeginning: [{ type: i0.Output, args: ["presentFromBeginning"] }], rehearseTimings: [{ type: i0.Output, args: ["rehearseTimings"] }], toggleSubtitles: [{ type: i0.Output, args: ["toggleSubtitles"] }], openSubtitleSettings: [{ type: i0.Output, args: ["openSubtitleSettings"] }], recordFromBeginning: [{ type: i0.Output, args: ["recordFromBeginning"] }], recordFromCurrent: [{ type: i0.Output, args: ["recordFromCurrent"] }], spellCheckChange: [{ type: i0.Output, args: ["spellCheckChange"] }], share: [{ type: i0.Output, args: ["share"] }], broadcast: [{ type: i0.Output, args: ["broadcast"] }], openFile: [{ type: i0.Output, args: ["openFile"] }], openRecentFile: [{ type: i0.Output, args: ["openRecentFile"] }], createPresentation: [{ type: i0.Output, args: ["createPresentation"] }], save: [{ type: i0.Output, args: ["save"] }], savePpsx: [{ type: i0.Output, args: ["savePpsx"] }], savePptm: [{ type: i0.Output, args: ["savePptm"] }], packageForSharing: [{ type: i0.Output, args: ["packageForSharing"] }], toggleSidebar: [{ type: i0.Output, args: ["toggleSidebar"] }], toggleAiPanel: [{ type: i0.Output, args: ["toggleAiPanel"] }], signatures: [{ type: i0.Output, args: ["signatures"] }], info: [{ type: i0.Output, args: ["info"] }], print: [{ type: i0.Output, args: ["print"] }], comments: [{ type: i0.Output, args: ["comments"] }], a11y: [{ type: i0.Output, args: ["a11y"] }], link: [{ type: i0.Output, args: ["link"] }], openSorter: [{ type: i0.Output, args: ["openSorter"] }], openMasterView: [{ type: i0.Output, args: ["openMasterView"] }], toggleNotes: [{ type: i0.Output, args: ["toggleNotes"] }], toggleFormatPainter: [{ type: i0.Output, args: ["toggleFormatPainter"] }], exportPng: [{ type: i0.Output, args: ["exportPng"] }], exportPdf: [{ type: i0.Output, args: ["exportPdf"] }], exportGif: [{ type: i0.Output, args: ["exportGif"] }], exportVideo: [{ type: i0.Output, args: ["exportVideo"] }], copySlideAsImage: [{ type: i0.Output, args: ["copySlideAsImage"] }], replace: [{ type: i0.Output, args: ["replace"] }], toggleInspector: [{ type: i0.Output, args: ["toggleInspector"] }], drawToolChange: [{ type: i0.Output, args: ["drawToolChange"] }], toggleThemeGallery: [{ type: i0.Output, args: ["toggleThemeGallery"] }], toggleGrid: [{ type: i0.Output, args: ["toggleGrid"] }], toggleRulers: [{ type: i0.Output, args: ["toggleRulers"] }], toggleGuides: [{ type: i0.Output, args: ["toggleGuides"] }], toggleSelectionPane: [{ type: i0.Output, args: ["toggleSelectionPane"] }], openCustomShows: [{ type: i0.Output, args: ["openCustomShows"] }], toggleSnapToGrid: [{ type: i0.Output, args: ["toggleSnapToGrid"] }], toggleSnapToShape: [{ type: i0.Output, args: ["toggleSnapToShape"] }], addGuide: [{ type: i0.Output, args: ["addGuide"] }], zoomToFit: [{ type: i0.Output, args: ["zoomToFit"] }], toggleEyedropper: [{ type: i0.Output, args: ["toggleEyedropper"] }], openSmartArtDialog: [{ type: i0.Output, args: ["openSmartArtDialog"] }], openEquationDialog: [{ type: i0.Output, args: ["openEquationDialog"] }], openSetUpSlideShow: [{ type: i0.Output, args: ["openSetUpSlideShow"] }], openCompare: [{ type: i0.Output, args: ["openCompare"] }], openPassword: [{ type: i0.Output, args: ["openPassword"] }], openFontEmbedding: [{ type: i0.Output, args: ["openFontEmbedding"] }], openVersionHistory: [{ type: i0.Output, args: ["openVersionHistory"] }], openShortcuts: [{ type: i0.Output, args: ["openShortcuts"] }], openSettings: [{ type: i0.Output, args: ["openSettings"] }] } });
|
|
94510
|
+
}], propDecorators: { slideIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideIndex", required: false }] }], slideCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideCount", required: false }] }], canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], selectedElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedElement", required: false }] }], zoomPercent: [{ type: i0.Input, args: [{ isSignal: true, alias: "zoomPercent", required: false }] }], formatPainterActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatPainterActive", required: false }] }], canActivateFormatPainter: [{ type: i0.Input, args: [{ isSignal: true, alias: "canActivateFormatPainter", required: false }] }], exporting: [{ type: i0.Input, args: [{ isSignal: true, alias: "exporting", required: false }] }], hasMacros: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasMacros", required: false }] }], showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], showRulers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRulers", required: false }] }], showGuides: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGuides", required: false }] }], snapToGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToGrid", required: false }] }], snapToShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToShape", required: false }] }], eyedropperActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "eyedropperActive", required: false }] }], themeGalleryOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "themeGalleryOpen", required: false }] }], sidebarCollapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "sidebarCollapsed", required: false }] }], inspectorOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "inspectorOpen", required: false }] }], commentsOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "commentsOpen", required: false }] }], commentCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "commentCount", required: false }] }], findOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "findOpen", required: false }] }], collabConnected: [{ type: i0.Input, args: [{ isSignal: true, alias: "collabConnected", required: false }] }], connectedCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "connectedCount", required: false }] }], spellCheckEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "spellCheckEnabled", required: false }] }], showSubtitles: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSubtitles", required: false }] }], hiddenActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "hiddenActions", required: false }] }], aiEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "aiEnabled", required: false }] }], aiPanelOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "aiPanelOpen", required: false }] }], accountAuth: [{ type: i0.Input, args: [{ isSignal: true, alias: "accountAuth", required: false }] }], prev: [{ type: i0.Output, args: ["prev"] }], next: [{ type: i0.Output, args: ["next"] }], zoomIn: [{ type: i0.Output, args: ["zoomIn"] }], zoomOut: [{ type: i0.Output, args: ["zoomOut"] }], zoomReset: [{ type: i0.Output, args: ["zoomReset"] }], find: [{ type: i0.Output, args: ["find"] }], present: [{ type: i0.Output, args: ["present"] }], presenter: [{ type: i0.Output, args: ["presenter"] }], record: [{ type: i0.Output, args: ["record"] }], presentFromBeginning: [{ type: i0.Output, args: ["presentFromBeginning"] }], rehearseTimings: [{ type: i0.Output, args: ["rehearseTimings"] }], toggleSubtitles: [{ type: i0.Output, args: ["toggleSubtitles"] }], openSubtitleSettings: [{ type: i0.Output, args: ["openSubtitleSettings"] }], recordFromBeginning: [{ type: i0.Output, args: ["recordFromBeginning"] }], recordFromCurrent: [{ type: i0.Output, args: ["recordFromCurrent"] }], spellCheckChange: [{ type: i0.Output, args: ["spellCheckChange"] }], share: [{ type: i0.Output, args: ["share"] }], broadcast: [{ type: i0.Output, args: ["broadcast"] }], openFile: [{ type: i0.Output, args: ["openFile"] }], openRecentFile: [{ type: i0.Output, args: ["openRecentFile"] }], createPresentation: [{ type: i0.Output, args: ["createPresentation"] }], save: [{ type: i0.Output, args: ["save"] }], savePpsx: [{ type: i0.Output, args: ["savePpsx"] }], savePptm: [{ type: i0.Output, args: ["savePptm"] }], packageForSharing: [{ type: i0.Output, args: ["packageForSharing"] }], toggleSidebar: [{ type: i0.Output, args: ["toggleSidebar"] }], toggleAiPanel: [{ type: i0.Output, args: ["toggleAiPanel"] }], signatures: [{ type: i0.Output, args: ["signatures"] }], info: [{ type: i0.Output, args: ["info"] }], print: [{ type: i0.Output, args: ["print"] }], comments: [{ type: i0.Output, args: ["comments"] }], a11y: [{ type: i0.Output, args: ["a11y"] }], link: [{ type: i0.Output, args: ["link"] }], openSorter: [{ type: i0.Output, args: ["openSorter"] }], openReadingView: [{ type: i0.Output, args: ["openReadingView"] }], openMasterView: [{ type: i0.Output, args: ["openMasterView"] }], toggleNotes: [{ type: i0.Output, args: ["toggleNotes"] }], toggleFormatPainter: [{ type: i0.Output, args: ["toggleFormatPainter"] }], exportPng: [{ type: i0.Output, args: ["exportPng"] }], exportPdf: [{ type: i0.Output, args: ["exportPdf"] }], exportGif: [{ type: i0.Output, args: ["exportGif"] }], exportVideo: [{ type: i0.Output, args: ["exportVideo"] }], copySlideAsImage: [{ type: i0.Output, args: ["copySlideAsImage"] }], replace: [{ type: i0.Output, args: ["replace"] }], toggleInspector: [{ type: i0.Output, args: ["toggleInspector"] }], drawToolChange: [{ type: i0.Output, args: ["drawToolChange"] }], toggleThemeGallery: [{ type: i0.Output, args: ["toggleThemeGallery"] }], toggleGrid: [{ type: i0.Output, args: ["toggleGrid"] }], toggleRulers: [{ type: i0.Output, args: ["toggleRulers"] }], toggleGuides: [{ type: i0.Output, args: ["toggleGuides"] }], toggleSelectionPane: [{ type: i0.Output, args: ["toggleSelectionPane"] }], openCustomShows: [{ type: i0.Output, args: ["openCustomShows"] }], toggleSnapToGrid: [{ type: i0.Output, args: ["toggleSnapToGrid"] }], toggleSnapToShape: [{ type: i0.Output, args: ["toggleSnapToShape"] }], addGuide: [{ type: i0.Output, args: ["addGuide"] }], zoomToFit: [{ type: i0.Output, args: ["zoomToFit"] }], toggleEyedropper: [{ type: i0.Output, args: ["toggleEyedropper"] }], openSmartArtDialog: [{ type: i0.Output, args: ["openSmartArtDialog"] }], openEquationDialog: [{ type: i0.Output, args: ["openEquationDialog"] }], openSetUpSlideShow: [{ type: i0.Output, args: ["openSetUpSlideShow"] }], openCompare: [{ type: i0.Output, args: ["openCompare"] }], openPassword: [{ type: i0.Output, args: ["openPassword"] }], openFontEmbedding: [{ type: i0.Output, args: ["openFontEmbedding"] }], openVersionHistory: [{ type: i0.Output, args: ["openVersionHistory"] }], openShortcuts: [{ type: i0.Output, args: ["openShortcuts"] }], openSettings: [{ type: i0.Output, args: ["openSettings"] }] } });
|
|
93558
94511
|
|
|
93559
94512
|
/**
|
|
93560
94513
|
* selection-pane.component.ts: Side panel listing all elements on the active slide.
|
|
@@ -103115,6 +104068,153 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
103115
104068
|
`, styles: [".pptx-tcf{display:flex;flex-direction:column;gap:.35rem}.pptx-tcf__heading{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--pptx-inspector-muted, #888)}.pptx-tcf__field{display:flex;align-items:center;gap:.35rem}.pptx-tcf__grid2{display:grid;grid-template-columns:1fr 1fr;gap:.3rem}.pptx-tcf__lbl{font-size:10px;color:var(--pptx-inspector-muted, #888)}.pptx-tcf__num{flex:1;min-width:0;background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;padding:2px 4px;font-size:11px}.pptx-tcf__color{width:28px;height:22px;padding:0;border:1px solid var(--pptx-inspector-border, #444);border-radius:3px;background:transparent;cursor:pointer}.pptx-tcf__btns{display:flex;flex-wrap:wrap;gap:.25rem}.pptx-tcf__toggle,.pptx-tcf__btn{padding:2px 8px;font-size:11px;background:var(--pptx-inspector-input-bg, #2d2d2d);border:1px solid var(--pptx-inspector-border, #444);color:inherit;border-radius:3px;cursor:pointer}.pptx-tcf__toggle.is-active{background:var(--pptx-inspector-accent, #2563eb);color:#fff;border-color:var(--pptx-inspector-accent, #2563eb)}.pptx-tcf__toggle:disabled,.pptx-tcf__btn:disabled{opacity:.4;cursor:not-allowed}\n"] }]
|
|
103116
104069
|
}], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], elementChange: [{ type: i0.Output, args: ["elementChange"] }] } });
|
|
103117
104070
|
|
|
104071
|
+
/**
|
|
104072
|
+
* table-data-editor-styles.ts: CSS string for the inspector's table data editor.
|
|
104073
|
+
*
|
|
104074
|
+
* Extracted from `table-data-editor.component.ts` for the same reason as
|
|
104075
|
+
* `chart-editor-styles.ts`: an inline `styles` block pushed that component well
|
|
104076
|
+
* past the repo's 300 LOC ceiling, and the styling is presentation-only, so it
|
|
104077
|
+
* reads better as its own module than as 120 lines wedged between the template
|
|
104078
|
+
* and the class.
|
|
104079
|
+
*
|
|
104080
|
+
* @module angular-viewer/table-data-editor-styles
|
|
104081
|
+
*/
|
|
104082
|
+
/** Styles for the inspector table data editor grid. */
|
|
104083
|
+
const TABLE_DATA_EDITOR_STYLES = `
|
|
104084
|
+
.pptx-tbl-editor {
|
|
104085
|
+
display: flex;
|
|
104086
|
+
flex-direction: column;
|
|
104087
|
+
gap: 0.35rem;
|
|
104088
|
+
padding: 0.5rem 0;
|
|
104089
|
+
border-bottom: 1px solid var(--pptx-inspector-border, #333);
|
|
104090
|
+
}
|
|
104091
|
+
|
|
104092
|
+
.pptx-tbl-editor__header {
|
|
104093
|
+
display: flex;
|
|
104094
|
+
align-items: center;
|
|
104095
|
+
justify-content: space-between;
|
|
104096
|
+
gap: 0.35rem;
|
|
104097
|
+
}
|
|
104098
|
+
|
|
104099
|
+
.pptx-tbl-editor__heading {
|
|
104100
|
+
font-size: 10px;
|
|
104101
|
+
font-weight: 600;
|
|
104102
|
+
text-transform: uppercase;
|
|
104103
|
+
letter-spacing: 0.05em;
|
|
104104
|
+
color: var(--pptx-inspector-muted, #888);
|
|
104105
|
+
margin: 0;
|
|
104106
|
+
}
|
|
104107
|
+
|
|
104108
|
+
.pptx-tbl-editor__actions {
|
|
104109
|
+
display: flex;
|
|
104110
|
+
gap: 0.2rem;
|
|
104111
|
+
flex-wrap: wrap;
|
|
104112
|
+
}
|
|
104113
|
+
|
|
104114
|
+
.pptx-tbl-editor__btn {
|
|
104115
|
+
padding: 2px 5px;
|
|
104116
|
+
font-size: 10px;
|
|
104117
|
+
background: var(--pptx-inspector-input-bg, #2d2d2d);
|
|
104118
|
+
border: 1px solid var(--pptx-inspector-border, #444);
|
|
104119
|
+
color: inherit;
|
|
104120
|
+
border-radius: 3px;
|
|
104121
|
+
cursor: pointer;
|
|
104122
|
+
white-space: nowrap;
|
|
104123
|
+
}
|
|
104124
|
+
|
|
104125
|
+
.pptx-tbl-editor__btn:disabled {
|
|
104126
|
+
opacity: 0.4;
|
|
104127
|
+
cursor: not-allowed;
|
|
104128
|
+
}
|
|
104129
|
+
|
|
104130
|
+
.pptx-tbl-editor__btn--danger {
|
|
104131
|
+
color: var(--pptx-inspector-danger, #f47c7c);
|
|
104132
|
+
border-color: var(--pptx-inspector-danger-border, #6b2a2a);
|
|
104133
|
+
}
|
|
104134
|
+
|
|
104135
|
+
.pptx-tbl-editor__scroll {
|
|
104136
|
+
overflow-x: auto;
|
|
104137
|
+
}
|
|
104138
|
+
|
|
104139
|
+
.pptx-tbl-editor__grid {
|
|
104140
|
+
display: flex;
|
|
104141
|
+
flex-direction: column;
|
|
104142
|
+
font-size: 11px;
|
|
104143
|
+
min-width: 100%;
|
|
104144
|
+
width: max-content;
|
|
104145
|
+
}
|
|
104146
|
+
|
|
104147
|
+
.pptx-tbl-editor__row {
|
|
104148
|
+
display: flex;
|
|
104149
|
+
}
|
|
104150
|
+
|
|
104151
|
+
.pptx-tbl-editor__corner,
|
|
104152
|
+
.pptx-tbl-editor__col-header,
|
|
104153
|
+
.pptx-tbl-editor__row-header {
|
|
104154
|
+
display: flex;
|
|
104155
|
+
align-items: center;
|
|
104156
|
+
justify-content: center;
|
|
104157
|
+
background: var(--pptx-inspector-input-bg, #2d2d2d);
|
|
104158
|
+
color: var(--pptx-inspector-muted, #888);
|
|
104159
|
+
font-weight: 400;
|
|
104160
|
+
padding: 2px 4px;
|
|
104161
|
+
border: 1px solid var(--pptx-inspector-border, #333);
|
|
104162
|
+
margin: -0.5px;
|
|
104163
|
+
white-space: nowrap;
|
|
104164
|
+
}
|
|
104165
|
+
|
|
104166
|
+
.pptx-tbl-editor__col-header {
|
|
104167
|
+
flex: 1 0 60px;
|
|
104168
|
+
}
|
|
104169
|
+
|
|
104170
|
+
.pptx-tbl-editor__corner,
|
|
104171
|
+
.pptx-tbl-editor__row-header {
|
|
104172
|
+
flex: 0 0 40px;
|
|
104173
|
+
}
|
|
104174
|
+
|
|
104175
|
+
.pptx-tbl-editor__col-label,
|
|
104176
|
+
.pptx-tbl-editor__row-label {
|
|
104177
|
+
margin-right: 2px;
|
|
104178
|
+
}
|
|
104179
|
+
|
|
104180
|
+
.pptx-tbl-editor__remove-btn {
|
|
104181
|
+
padding: 0 2px;
|
|
104182
|
+
font-size: 11px;
|
|
104183
|
+
line-height: 1;
|
|
104184
|
+
background: none;
|
|
104185
|
+
border: none;
|
|
104186
|
+
color: var(--pptx-inspector-danger, #f47c7c);
|
|
104187
|
+
cursor: pointer;
|
|
104188
|
+
}
|
|
104189
|
+
|
|
104190
|
+
.pptx-tbl-editor__cell {
|
|
104191
|
+
display: flex;
|
|
104192
|
+
flex: 1 0 60px;
|
|
104193
|
+
padding: 1px;
|
|
104194
|
+
border: 1px solid var(--pptx-inspector-border, #333);
|
|
104195
|
+
margin: -0.5px;
|
|
104196
|
+
}
|
|
104197
|
+
|
|
104198
|
+
.pptx-tbl-editor__input {
|
|
104199
|
+
width: 100%;
|
|
104200
|
+
box-sizing: border-box;
|
|
104201
|
+
padding: 2px 4px;
|
|
104202
|
+
font-size: 11px;
|
|
104203
|
+
background: var(--pptx-inspector-input-bg, #2d2d2d);
|
|
104204
|
+
color: inherit;
|
|
104205
|
+
border: none;
|
|
104206
|
+
outline: none;
|
|
104207
|
+
}
|
|
104208
|
+
|
|
104209
|
+
.pptx-tbl-editor__input:focus {
|
|
104210
|
+
background: var(--pptx-inspector-active-bg, #1a3a5c);
|
|
104211
|
+
}
|
|
104212
|
+
|
|
104213
|
+
.pptx-tbl-editor__input:disabled {
|
|
104214
|
+
opacity: 0.6;
|
|
104215
|
+
}
|
|
104216
|
+
`;
|
|
104217
|
+
|
|
103118
104218
|
/**
|
|
103119
104219
|
* table-data-editor.component.ts: Presentational table data editor panel.
|
|
103120
104220
|
*
|
|
@@ -103156,53 +104256,55 @@ class TableDataEditorComponent {
|
|
|
103156
104256
|
/** Shared cell selection (drives the cell-formatting panel + context menu). */
|
|
103157
104257
|
selection = inject(TableSelectionService, { optional: true });
|
|
103158
104258
|
// ── Computed helpers ────────────────────────────────────────────────────
|
|
103159
|
-
|
|
104259
|
+
/**
|
|
104260
|
+
* Normalised render model from `pptx-viewer-shared`. Using it (rather than
|
|
104261
|
+
* iterating `tableData.rows` directly) is what keeps ragged rows, which real
|
|
104262
|
+
* decks do contain, from rendering a lopsided grid with cells missing off the
|
|
104263
|
+
* right-hand edge.
|
|
104264
|
+
*/
|
|
104265
|
+
grid = computed(() => buildTableDataGrid(this.element()), /* @ts-ignore */
|
|
104266
|
+
...(ngDevMode ? [{ debugName: "grid" }] : /* istanbul ignore next */ []));
|
|
104267
|
+
rows = computed(() => this.grid().rows, /* @ts-ignore */
|
|
103160
104268
|
...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
103161
|
-
rowCount = computed(() => this.
|
|
104269
|
+
rowCount = computed(() => this.grid().rowCount, /* @ts-ignore */
|
|
103162
104270
|
...(ngDevMode ? [{ debugName: "rowCount" }] : /* istanbul ignore next */ []));
|
|
103163
|
-
colCount = computed(() => this.
|
|
104271
|
+
colCount = computed(() => this.grid().colCount, /* @ts-ignore */
|
|
103164
104272
|
...(ngDevMode ? [{ debugName: "colCount" }] : /* istanbul ignore next */ []));
|
|
103165
|
-
colIndices = computed(() =>
|
|
104273
|
+
colIndices = computed(() => this.grid().colIndices, /* @ts-ignore */
|
|
103166
104274
|
...(ngDevMode ? [{ debugName: "colIndices" }] : /* istanbul ignore next */ []));
|
|
104275
|
+
canRemoveRow = computed(() => this.grid().canRemoveRow, /* @ts-ignore */
|
|
104276
|
+
...(ngDevMode ? [{ debugName: "canRemoveRow" }] : /* istanbul ignore next */ []));
|
|
104277
|
+
canRemoveColumn = computed(() => this.grid().canRemoveColumn, /* @ts-ignore */
|
|
104278
|
+
...(ngDevMode ? [{ debugName: "canRemoveColumn" }] : /* istanbul ignore next */ []));
|
|
103167
104279
|
// ── Event handlers ──────────────────────────────────────────────────────
|
|
103168
104280
|
onCellChange(event, rowIndex, colIndex) {
|
|
103169
104281
|
const text = stringFromEvent$1(event);
|
|
103170
104282
|
if (text === null) {
|
|
103171
104283
|
return;
|
|
103172
104284
|
}
|
|
103173
|
-
this.elementChange.emit(
|
|
104285
|
+
this.elementChange.emit(setTableElementCellText(this.element(), rowIndex, colIndex, text));
|
|
103174
104286
|
}
|
|
103175
104287
|
/** Focusing a cell selects it so the cell-formatting panel targets it. */
|
|
103176
104288
|
onCellFocus(rowIndex, colIndex) {
|
|
103177
104289
|
this.selection?.selectCell(this.element().id, rowIndex, colIndex);
|
|
103178
104290
|
}
|
|
103179
104291
|
onAddRow() {
|
|
103180
|
-
|
|
103181
|
-
this.elementChange.emit(insertRow(this.element(), Math.max(0, last), 'below'));
|
|
104292
|
+
this.elementChange.emit(appendTableElementRow(this.element()));
|
|
103182
104293
|
}
|
|
103183
104294
|
onRemoveLastRow() {
|
|
103184
|
-
|
|
103185
|
-
if (last < 0) {
|
|
103186
|
-
return;
|
|
103187
|
-
}
|
|
103188
|
-
this.elementChange.emit(removeRow(this.element(), last));
|
|
104295
|
+
this.elementChange.emit(removeLastTableElementRow(this.element()));
|
|
103189
104296
|
}
|
|
103190
104297
|
onRemoveRow(rowIndex) {
|
|
103191
|
-
this.elementChange.emit(
|
|
104298
|
+
this.elementChange.emit(removeTableElementRow(this.element(), rowIndex));
|
|
103192
104299
|
}
|
|
103193
104300
|
onAddColumn() {
|
|
103194
|
-
|
|
103195
|
-
this.elementChange.emit(insertColumn(this.element(), Math.max(0, last), 'right'));
|
|
104301
|
+
this.elementChange.emit(appendTableElementColumn(this.element()));
|
|
103196
104302
|
}
|
|
103197
104303
|
onRemoveLastColumn() {
|
|
103198
|
-
|
|
103199
|
-
if (last < 0) {
|
|
103200
|
-
return;
|
|
103201
|
-
}
|
|
103202
|
-
this.elementChange.emit(removeColumn(this.element(), last));
|
|
104304
|
+
this.elementChange.emit(removeLastTableElementColumn(this.element()));
|
|
103203
104305
|
}
|
|
103204
104306
|
onRemoveColumn(colIndex) {
|
|
103205
|
-
this.elementChange.emit(
|
|
104307
|
+
this.elementChange.emit(removeTableElementColumn(this.element(), colIndex));
|
|
103206
104308
|
}
|
|
103207
104309
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: TableDataEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
103208
104310
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: TableDataEditorComponent, isStandalone: true, selector: "pptx-table-data-editor", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { elementChange: "elementChange" }, ngImport: i0, template: `
|
|
@@ -103227,7 +104329,7 @@ class TableDataEditorComponent {
|
|
|
103227
104329
|
<button
|
|
103228
104330
|
type="button"
|
|
103229
104331
|
class="pptx-tbl-editor__btn pptx-tbl-editor__btn--danger"
|
|
103230
|
-
[disabled]="
|
|
104332
|
+
[disabled]="!canRemoveRow()"
|
|
103231
104333
|
[title]="'pptx.tableDataEditor.removeRowTitle' | translate"
|
|
103232
104334
|
(click)="onRemoveLastRow()"
|
|
103233
104335
|
>
|
|
@@ -103245,7 +104347,7 @@ class TableDataEditorComponent {
|
|
|
103245
104347
|
<button
|
|
103246
104348
|
type="button"
|
|
103247
104349
|
class="pptx-tbl-editor__btn pptx-tbl-editor__btn--danger"
|
|
103248
|
-
[disabled]="
|
|
104350
|
+
[disabled]="!canRemoveColumn()"
|
|
103249
104351
|
[title]="'pptx.tableDataEditor.removeColumnTitle' | translate"
|
|
103250
104352
|
(click)="onRemoveLastColumn()"
|
|
103251
104353
|
>
|
|
@@ -103267,10 +104369,13 @@ class TableDataEditorComponent {
|
|
|
103267
104369
|
@for (colIdx of colIndices(); track colIdx) {
|
|
103268
104370
|
<div class="pptx-tbl-editor__col-header" role="columnheader">
|
|
103269
104371
|
<span class="pptx-tbl-editor__col-label">{{ colIdx + 1 }}</span>
|
|
103270
|
-
@if (canEdit() &&
|
|
104372
|
+
@if (canEdit() && canRemoveColumn()) {
|
|
103271
104373
|
<button
|
|
103272
104374
|
type="button"
|
|
103273
104375
|
class="pptx-tbl-editor__remove-btn"
|
|
104376
|
+
[attr.aria-label]="
|
|
104377
|
+
'pptx.tableDataEditor.removeColumnN' | translate: { number: colIdx + 1 }
|
|
104378
|
+
"
|
|
103274
104379
|
[title]="
|
|
103275
104380
|
'pptx.tableDataEditor.removeColumnN' | translate: { number: colIdx + 1 }
|
|
103276
104381
|
"
|
|
@@ -103282,31 +104387,40 @@ class TableDataEditorComponent {
|
|
|
103282
104387
|
</div>
|
|
103283
104388
|
}
|
|
103284
104389
|
</div>
|
|
103285
|
-
@for (row of rows(); track
|
|
104390
|
+
@for (row of rows(); track row.rowIndex) {
|
|
103286
104391
|
<div class="pptx-tbl-editor__row" role="row">
|
|
103287
104392
|
<!-- Row label + remove button -->
|
|
103288
104393
|
<div class="pptx-tbl-editor__row-header" role="rowheader">
|
|
103289
|
-
<span class="pptx-tbl-editor__row-label">{{
|
|
103290
|
-
@if (canEdit() &&
|
|
104394
|
+
<span class="pptx-tbl-editor__row-label">{{ row.rowIndex + 1 }}</span>
|
|
104395
|
+
@if (canEdit() && canRemoveRow()) {
|
|
103291
104396
|
<button
|
|
103292
104397
|
type="button"
|
|
103293
104398
|
class="pptx-tbl-editor__remove-btn"
|
|
103294
|
-
[
|
|
103295
|
-
|
|
104399
|
+
[attr.aria-label]="
|
|
104400
|
+
'pptx.tableDataEditor.removeRowN' | translate: { number: row.rowIndex + 1 }
|
|
104401
|
+
"
|
|
104402
|
+
[title]="
|
|
104403
|
+
'pptx.tableDataEditor.removeRowN' | translate: { number: row.rowIndex + 1 }
|
|
104404
|
+
"
|
|
104405
|
+
(click)="onRemoveRow(row.rowIndex)"
|
|
103296
104406
|
>
|
|
103297
104407
|
×
|
|
103298
104408
|
</button>
|
|
103299
104409
|
}
|
|
103300
104410
|
</div>
|
|
103301
|
-
@for (cell of row.cells; track
|
|
104411
|
+
@for (cell of row.cells; track cell.colIndex) {
|
|
103302
104412
|
<div class="pptx-tbl-editor__cell" role="gridcell">
|
|
103303
104413
|
<input
|
|
103304
104414
|
type="text"
|
|
103305
104415
|
class="pptx-tbl-editor__input"
|
|
103306
104416
|
[disabled]="!canEdit()"
|
|
103307
104417
|
[value]="cell.text"
|
|
103308
|
-
|
|
103309
|
-
|
|
104418
|
+
[attr.aria-label]="
|
|
104419
|
+
'pptx.tableDataEditor.cellAriaLabel'
|
|
104420
|
+
| translate: { row: cell.rowIndex + 1, column: cell.colIndex + 1 }
|
|
104421
|
+
"
|
|
104422
|
+
(focus)="onCellFocus(cell.rowIndex, cell.colIndex)"
|
|
104423
|
+
(change)="onCellChange($event, cell.rowIndex, cell.colIndex)"
|
|
103310
104424
|
/>
|
|
103311
104425
|
</div>
|
|
103312
104426
|
}
|
|
@@ -103341,7 +104455,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
103341
104455
|
<button
|
|
103342
104456
|
type="button"
|
|
103343
104457
|
class="pptx-tbl-editor__btn pptx-tbl-editor__btn--danger"
|
|
103344
|
-
[disabled]="
|
|
104458
|
+
[disabled]="!canRemoveRow()"
|
|
103345
104459
|
[title]="'pptx.tableDataEditor.removeRowTitle' | translate"
|
|
103346
104460
|
(click)="onRemoveLastRow()"
|
|
103347
104461
|
>
|
|
@@ -103359,7 +104473,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
103359
104473
|
<button
|
|
103360
104474
|
type="button"
|
|
103361
104475
|
class="pptx-tbl-editor__btn pptx-tbl-editor__btn--danger"
|
|
103362
|
-
[disabled]="
|
|
104476
|
+
[disabled]="!canRemoveColumn()"
|
|
103363
104477
|
[title]="'pptx.tableDataEditor.removeColumnTitle' | translate"
|
|
103364
104478
|
(click)="onRemoveLastColumn()"
|
|
103365
104479
|
>
|
|
@@ -103381,10 +104495,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
103381
104495
|
@for (colIdx of colIndices(); track colIdx) {
|
|
103382
104496
|
<div class="pptx-tbl-editor__col-header" role="columnheader">
|
|
103383
104497
|
<span class="pptx-tbl-editor__col-label">{{ colIdx + 1 }}</span>
|
|
103384
|
-
@if (canEdit() &&
|
|
104498
|
+
@if (canEdit() && canRemoveColumn()) {
|
|
103385
104499
|
<button
|
|
103386
104500
|
type="button"
|
|
103387
104501
|
class="pptx-tbl-editor__remove-btn"
|
|
104502
|
+
[attr.aria-label]="
|
|
104503
|
+
'pptx.tableDataEditor.removeColumnN' | translate: { number: colIdx + 1 }
|
|
104504
|
+
"
|
|
103388
104505
|
[title]="
|
|
103389
104506
|
'pptx.tableDataEditor.removeColumnN' | translate: { number: colIdx + 1 }
|
|
103390
104507
|
"
|
|
@@ -103396,31 +104513,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
103396
104513
|
</div>
|
|
103397
104514
|
}
|
|
103398
104515
|
</div>
|
|
103399
|
-
@for (row of rows(); track
|
|
104516
|
+
@for (row of rows(); track row.rowIndex) {
|
|
103400
104517
|
<div class="pptx-tbl-editor__row" role="row">
|
|
103401
104518
|
<!-- Row label + remove button -->
|
|
103402
104519
|
<div class="pptx-tbl-editor__row-header" role="rowheader">
|
|
103403
|
-
<span class="pptx-tbl-editor__row-label">{{
|
|
103404
|
-
@if (canEdit() &&
|
|
104520
|
+
<span class="pptx-tbl-editor__row-label">{{ row.rowIndex + 1 }}</span>
|
|
104521
|
+
@if (canEdit() && canRemoveRow()) {
|
|
103405
104522
|
<button
|
|
103406
104523
|
type="button"
|
|
103407
104524
|
class="pptx-tbl-editor__remove-btn"
|
|
103408
|
-
[
|
|
103409
|
-
|
|
104525
|
+
[attr.aria-label]="
|
|
104526
|
+
'pptx.tableDataEditor.removeRowN' | translate: { number: row.rowIndex + 1 }
|
|
104527
|
+
"
|
|
104528
|
+
[title]="
|
|
104529
|
+
'pptx.tableDataEditor.removeRowN' | translate: { number: row.rowIndex + 1 }
|
|
104530
|
+
"
|
|
104531
|
+
(click)="onRemoveRow(row.rowIndex)"
|
|
103410
104532
|
>
|
|
103411
104533
|
×
|
|
103412
104534
|
</button>
|
|
103413
104535
|
}
|
|
103414
104536
|
</div>
|
|
103415
|
-
@for (cell of row.cells; track
|
|
104537
|
+
@for (cell of row.cells; track cell.colIndex) {
|
|
103416
104538
|
<div class="pptx-tbl-editor__cell" role="gridcell">
|
|
103417
104539
|
<input
|
|
103418
104540
|
type="text"
|
|
103419
104541
|
class="pptx-tbl-editor__input"
|
|
103420
104542
|
[disabled]="!canEdit()"
|
|
103421
104543
|
[value]="cell.text"
|
|
103422
|
-
|
|
103423
|
-
|
|
104544
|
+
[attr.aria-label]="
|
|
104545
|
+
'pptx.tableDataEditor.cellAriaLabel'
|
|
104546
|
+
| translate: { row: cell.rowIndex + 1, column: cell.colIndex + 1 }
|
|
104547
|
+
"
|
|
104548
|
+
(focus)="onCellFocus(cell.rowIndex, cell.colIndex)"
|
|
104549
|
+
(change)="onCellChange($event, cell.rowIndex, cell.colIndex)"
|
|
103424
104550
|
/>
|
|
103425
104551
|
</div>
|
|
103426
104552
|
}
|
|
@@ -110663,24 +111789,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
110663
111789
|
* and its template gallery. Kept framework-free (no Angular / DOM) so the
|
|
110664
111790
|
* LaTeX -> MathML conversion and the template catalogue are unit testable in
|
|
110665
111791
|
* isolation.
|
|
111792
|
+
*
|
|
111793
|
+
* The conversion pipeline itself now lives in `pptx-viewer-shared`
|
|
111794
|
+
* (`render/equation-compile`), which every binding shares. This module stays as
|
|
111795
|
+
* a name shim: `latexToMathml` is part of this package's published surface
|
|
111796
|
+
* (re-exported from `viewer/index.ts`), so the spelling is preserved even though
|
|
111797
|
+
* shared uses `latexToMathMl`.
|
|
110666
111798
|
*/
|
|
110667
111799
|
/**
|
|
110668
111800
|
* Pre-defined equation templates covering common mathematical formulas
|
|
110669
111801
|
* (the shared catalogue every binding's equation dialog renders).
|
|
110670
111802
|
*/
|
|
110671
111803
|
const TEMPLATES = EQUATION_TEMPLATES;
|
|
110672
|
-
/**
|
|
111804
|
+
/**
|
|
111805
|
+
* Convert a LaTeX string to a MathML markup string, empty on any failure.
|
|
111806
|
+
*
|
|
111807
|
+
* The result is DOMPurify-sanitised (MathML + SVG profiles) by shared before it
|
|
111808
|
+
* is returned. That matters here specifically: the Angular dialog and gallery
|
|
111809
|
+
* hand this string to `DomSanitizer.bypassSecurityTrustHtml`, which disables
|
|
111810
|
+
* Angular's own sanitiser, so this was previously the one binding injecting
|
|
111811
|
+
* unsanitised equation markup.
|
|
111812
|
+
*/
|
|
110673
111813
|
function latexToMathml(latex) {
|
|
110674
|
-
|
|
110675
|
-
return '';
|
|
110676
|
-
}
|
|
110677
|
-
try {
|
|
110678
|
-
const omml = convertLatexToOmml(latex);
|
|
110679
|
-
return ommlToMathml(omml);
|
|
110680
|
-
}
|
|
110681
|
-
catch {
|
|
110682
|
-
return '';
|
|
110683
|
-
}
|
|
111814
|
+
return latexToMathMl(latex);
|
|
110684
111815
|
}
|
|
110685
111816
|
|
|
110686
111817
|
/**
|
|
@@ -115302,6 +116433,13 @@ class PowerPointViewerComponent {
|
|
|
115302
116433
|
/** Slide-sorter grid overlay visibility. */
|
|
115303
116434
|
showSorter = signal(false, /* @ts-ignore */
|
|
115304
116435
|
...(ngDevMode ? [{ debugName: "showSorter" }] : /* istanbul ignore next */ []));
|
|
116436
|
+
/**
|
|
116437
|
+
* Reading View visibility: the deck at full window size with the editor
|
|
116438
|
+
* chrome cut back to a nav bar. Not the slide show (no fullscreen, no
|
|
116439
|
+
* pointer tools, no presenter console).
|
|
116440
|
+
*/
|
|
116441
|
+
showReadingView = signal(false, /* @ts-ignore */
|
|
116442
|
+
...(ngDevMode ? [{ debugName: "showReadingView" }] : /* istanbul ignore next */ []));
|
|
115305
116443
|
/** Full-canvas master editor visibility and active target. */
|
|
115306
116444
|
showMasterView = signal(false, /* @ts-ignore */
|
|
115307
116445
|
...(ngDevMode ? [{ debugName: "showMasterView" }] : /* istanbul ignore next */ []));
|
|
@@ -115964,6 +117102,15 @@ class PowerPointViewerComponent {
|
|
|
115964
117102
|
}
|
|
115965
117103
|
this.activeSlideIndex.set(index);
|
|
115966
117104
|
}
|
|
117105
|
+
/**
|
|
117106
|
+
* Leave Reading View on the slide the reader ended on, which is what leaving
|
|
117107
|
+
* any PowerPoint view does: the editor should not snap back to wherever it
|
|
117108
|
+
* was when the reader entered.
|
|
117109
|
+
*/
|
|
117110
|
+
closeReadingView(slideIndex) {
|
|
117111
|
+
this.showReadingView.set(false);
|
|
117112
|
+
this.goTo(slideIndex);
|
|
117113
|
+
}
|
|
115967
117114
|
goPrev() {
|
|
115968
117115
|
this.goTo(this.activeSlideIndex() - 1);
|
|
115969
117116
|
}
|
|
@@ -116582,6 +117729,7 @@ class PowerPointViewerComponent {
|
|
|
116582
117729
|
(a11y)="inspectorPanel.togglePanel('accessibility')"
|
|
116583
117730
|
(link)="docProperties.showHyperlink.set(true)"
|
|
116584
117731
|
(openSorter)="showSorter.set(true)"
|
|
117732
|
+
(openReadingView)="showReadingView.set(true)"
|
|
116585
117733
|
(toggleNotes)="mobileSheetSvc.toggleNotes()"
|
|
116586
117734
|
(toggleFormatPainter)="formatPainter.toggle()"
|
|
116587
117735
|
(exportPng)="xport.exportPng()"
|
|
@@ -116937,6 +118085,22 @@ class PowerPointViewerComponent {
|
|
|
116937
118085
|
/>
|
|
116938
118086
|
}
|
|
116939
118087
|
|
|
118088
|
+
@if (showReadingView()) {
|
|
118089
|
+
<!--
|
|
118090
|
+
The merged deck, so each slide carries its own inherited template
|
|
118091
|
+
elements: the reader pages through the deck inside the overlay, and
|
|
118092
|
+
a single active-slide template layer would paint one slide's master
|
|
118093
|
+
over another's.
|
|
118094
|
+
-->
|
|
118095
|
+
<pptx-reading-view-overlay
|
|
118096
|
+
[slides]="displaySlidesMut()"
|
|
118097
|
+
[canvasSize]="loader.canvasSize()"
|
|
118098
|
+
[mediaDataUrls]="loader.mediaDataUrls()"
|
|
118099
|
+
[activeSlideIndex]="activeSlideIndex()"
|
|
118100
|
+
(exit)="closeReadingView($event)"
|
|
118101
|
+
/>
|
|
118102
|
+
}
|
|
118103
|
+
|
|
116940
118104
|
@if (presentationMode.presenting()) {
|
|
116941
118105
|
<pptx-presentation-overlay
|
|
116942
118106
|
[slides]="customShowsCtl.presentationSlides()"
|
|
@@ -117227,7 +118391,7 @@ class PowerPointViewerComponent {
|
|
|
117227
118391
|
/>
|
|
117228
118392
|
}
|
|
117229
118393
|
</div>
|
|
117230
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: SlideCanvasComponent, selector: "pptx-slide-canvas", inputs: ["slide", "canvasSize", "mediaDataUrls", "zoom", "editable", "showGrid", "showRulers", "rulerUnit", "showGuides", "snapToGrid", "snapToShape", "guideCommand", "spellCheck", "snapToGuides", "autoFit", "transparentBackground", "interactive", "presenting", "selectedIds", "editingId", "editTemplateMode", "templateElements", "aiHighlights", "aiActive", "aiActiveSlideIndex", "aiChangeBatch", "aiPickMode", "drawTool", "drawColor", "drawWidth"], outputs: ["elementSelect", "backgroundClick", "transformStart", "transformUpdate", "contextMenu", "textEditStart", "textCommit", "textInput", "textCancel", "textFormat", "rotateUpdate", "marqueeSelect", "inkStrokeComplete", "eraserHit", "cellCommit", "tableChange"] }, { kind: "component", type: PresentationOverlayComponent, selector: "pptx-presentation-overlay", inputs: ["slides", "canvasSize", "mediaDataUrls", "startIndex", "showWithAnimation", "useTimings", "subtitlesVisible", "sessionEnded"], outputs: ["indexChange", "closed", "subtitlesChange", "annotationsExit"] }, { kind: "component", type: PresenterViewComponent, selector: "pptx-presenter-view", inputs: ["slides", "currentSlideIndex", "canvasSize", "templateElements", "mediaDataUrls", "presentationStartTime", "isAudienceWindowOpen"], outputs: ["movePresentationSlide", "exit", "openAudienceWindow", "closeAudienceWindow", "navigateToSlide"] }, { kind: "component", type: MobilePresenterViewComponent, selector: "pptx-mobile-presenter-view", inputs: ["slides", "currentSlideIndex", "canvasSize", "templateElements", "mediaDataUrls", "presentationStartTime"], outputs: ["movePresentationSlide", "exit"] }, { kind: "component", type: SlideSorterOverlayComponent, selector: "pptx-slide-sorter-overlay", inputs: ["slides", "canvasSize", "mediaDataUrls", "activeIndex"], outputs: ["select", "closed"] }, { kind: "component", type: SlideDefaultInspectorComponent, selector: "pptx-slide-default-inspector", inputs: ["slideIndex", "canEdit", "selectedElement", "comments"], outputs: ["commentAdd", "commentRemove", "commentResolve"] }, { kind: "component", type: FindBarComponent, selector: "pptx-find-bar", inputs: ["slides"], outputs: ["navigate", "closed"] }, { kind: "component", type: FindReplaceBarComponent, selector: "pptx-find-replace-bar", inputs: ["matchCount", "matchIndex"], outputs: ["find", "navigate", "replaceOne", "replaceAll", "close"] }, { kind: "component", type: SlidesPanelComponent, selector: "pptx-slides-panel", inputs: ["canvasSize", "mediaDataUrls", "activeIndex"], outputs: ["select"] }, { kind: "component", type: StatusBarComponent, selector: "pptx-status-bar", inputs: ["slideIndex", "slideCount", "canEdit", "dirty", "autosaveStatus", "notesOpen", "zoomPercent", "sorterActive", "presenting", "hiddenActions"], outputs: ["toggleNotes", "normalView", "openSorter", "slideShow", "zoomIn", "zoomOut", "zoomReset"] }, { kind: "component", type: EditorContextMenuComponent, selector: "pptx-editor-context-menu", inputs: ["x", "y", "slideIndex", "showAiActions"], outputs: ["closed", "askAi", "fixAi", "editHyperlink", "addComment"] }, { kind: "component", type: ExportProgressModalComponent, selector: "pptx-export-progress-modal", inputs: ["open", "title", "progress", "statusMessage"], outputs: ["cancel"] }, { kind: "component", type: CommentsPanelComponent, selector: "pptx-comments-panel", inputs: ["comments", "authorName"], outputs: ["add", "remove", "resolve"] }, { kind: "component", type: SignaturesPanelComponent, selector: "pptx-signatures-panel", inputs: ["signatures"] }, { kind: "component", type: AccessibilityPanelComponent, selector: "pptx-accessibility-panel", inputs: ["issues"], outputs: ["selectSlide"] }, { kind: "component", type: CollaborationCursorsComponent, selector: "pptx-collaboration-cursors", inputs: ["cursors", "zoom"] }, { kind: "component", type: RemoteSelectionOverlayComponent, selector: "pptx-remote-selection-overlay", inputs: ["presences", "elements", "activeSlideIndex", "zoom"] }, { kind: "component", type: FollowModeBarComponent, selector: "pptx-follow-mode-bar", inputs: ["presences", "followedClientId"], outputs: ["follow"] }, { kind: "component", type: PropertiesDialogComponent, selector: "pptx-properties-dialog", inputs: ["open", "properties"], outputs: ["save", "close"] }, { kind: "component", type: HyperlinkDialogComponent, selector: "pptx-hyperlink-dialog", inputs: ["open", "element"], outputs: ["save", "close"] }, { kind: "component", type: PrintDialogComponent, selector: "pptx-print-dialog", inputs: ["slides", "activeSlideIndex", "defaultSlidesPerPage", "defaultFrameSlides"], outputs: ["print", "cancel"] }, { kind: "component", type: ShareDialogComponent, selector: "pptx-share-dialog", inputs: ["open", "defaults", "active", "connected", "userCount", "shareUrl", "p2p"], outputs: ["start", "stop", "close"] }, { kind: "component", type: BroadcastDialogComponent, selector: "pptx-broadcast-dialog", inputs: ["open", "defaults", "active", "connected", "viewerCount", "viewerUrl", "p2p"], outputs: ["start", "stop", "close"] }, { kind: "component", type: MobileBottomBarComponent, selector: "pptx-mobile-bottom-bar", inputs: ["slideCount", "commentCount", "activeSheet"], outputs: ["openSlides", "insert", "openFormat", "openComments", "notes"] }, { kind: "component", type: MobileMenuSheetComponent, selector: "pptx-mobile-menu-sheet", inputs: ["open", "slideCount", "exporting", "showNotes", "canEdit", "hiddenActions"], outputs: ["closed", "openFind", "openSorter", "toggleNotes", "insertText", "present", "openFile", "savePptx", "exportPng", "exportPdf", "exportGif", "exportVideo", "print"] }, { kind: "component", type: MobileSlidesSheetComponent, selector: "pptx-mobile-slides-sheet", inputs: ["open", "slides", "canvasSize", "mediaDataUrls", "activeIndex"], outputs: ["closed", "jumpToSlide"] }, { kind: "component", type: MobileToolbarComponent, selector: "pptx-mobile-toolbar", inputs: ["canUndo", "canRedo", "canPresent", "canEdit", "menuOpen", "aiEnabled", "aiPanelOpen", "hiddenActions"], outputs: ["toggleMenu", "toggleAiPanel", "undo", "redo", "share", "save", "present"] }, { kind: "component", type: MasterViewCanvasComponent, selector: "pptx-master-view-canvas", inputs: ["tab", "slideMasters", "activeMasterIndex", "activeLayoutIndex", "notesMaster", "handoutMaster", "canvasSize", "notesCanvasSize", "mediaDataUrls", "editable"], outputs: ["notesMasterChange", "handoutMasterChange"] }, { kind: "component", type: MasterViewSidebarComponent, selector: "pptx-master-view-sidebar", inputs: ["tab", "slideMasters", "notesMaster", "handoutMaster", "activeMasterIndex", "activeLayoutIndex", "handoutSlidesPerPage"], outputs: ["tabChange", "selectMaster", "selectLayout", "slidesPerPageChange", "backgroundChange", "close"] }, { kind: "component", type: NotesPanelComponent, selector: "pptx-notes-panel", inputs: ["slide", "expanded"], outputs: ["update", "notesToggle"] }, { kind: "component", type: RibbonComponent, selector: "pptx-ribbon", inputs: ["slideIndex", "slideCount", "canEdit", "selectedElement", "zoomPercent", "formatPainterActive", "canActivateFormatPainter", "exporting", "hasMacros", "showGrid", "showRulers", "showGuides", "snapToGrid", "snapToShape", "eyedropperActive", "themeGalleryOpen", "sidebarCollapsed", "inspectorOpen", "commentsOpen", "commentCount", "findOpen", "collabConnected", "connectedCount", "spellCheckEnabled", "showSubtitles", "hiddenActions", "aiEnabled", "aiPanelOpen", "accountAuth"], outputs: ["prev", "next", "zoomIn", "zoomOut", "zoomReset", "find", "present", "presenter", "record", "presentFromBeginning", "rehearseTimings", "toggleSubtitles", "openSubtitleSettings", "recordFromBeginning", "recordFromCurrent", "spellCheckChange", "share", "broadcast", "openFile", "openRecentFile", "createPresentation", "save", "savePpsx", "savePptm", "packageForSharing", "toggleSidebar", "toggleAiPanel", "signatures", "info", "print", "comments", "a11y", "link", "openSorter", "openMasterView", "toggleNotes", "toggleFormatPainter", "exportPng", "exportPdf", "exportGif", "exportVideo", "copySlideAsImage", "replace", "toggleInspector", "drawToolChange", "toggleThemeGallery", "toggleGrid", "toggleRulers", "toggleGuides", "toggleSelectionPane", "openCustomShows", "toggleSnapToGrid", "toggleSnapToShape", "addGuide", "zoomToFit", "toggleEyedropper", "openSmartArtDialog", "openEquationDialog", "openSetUpSlideShow", "openCompare", "openPassword", "openFontEmbedding", "openVersionHistory", "openShortcuts", "openSettings"] }, { kind: "component", type: TitleBarComponent, selector: "pptx-title-bar", inputs: ["canEdit", "fileName", "isDirty", "autosaveStatus", "autosaveEnabled", "canUndo", "canRedo", "undoLabel", "redoLabel", "findReplaceOpen", "hiddenActions", "quickAccess"], outputs: ["toggleAutosave", "save", "undo", "redo", "quickCommand", "toggleFindReplace", "commandSearch"] }, { kind: "component", type: ThemeGalleryComponent, selector: "pptx-theme-gallery", inputs: ["open", "activeName", "theme"], outputs: ["applyTheme", "applyCustomTheme", "close"] }, { kind: "component", type: SelectionPaneComponent, selector: "pptx-selection-pane", inputs: ["elements", "selectedIds"], outputs: ["selectElement", "bringForward", "sendBackward", "toggleHidden"] }, { kind: "component", type: CustomShowsComponent, selector: "pptx-custom-shows", inputs: ["open", "slides", "customShows", "activeCustomShowId"], outputs: ["create", "remove", "update", "setActive", "close"] }, { kind: "component", type: InsertSmartArtDialogComponent, selector: "pptx-insert-smart-art-dialog", inputs: ["open"], outputs: ["close", "insert"] }, { kind: "component", type: ViewerExtraDialogsComponent, selector: "pptx-viewer-extra-dialogs", inputs: ["activeSlideIndex", "selectedElementId", "filePath", "customShows", "themeKey", "availableThemes", "localeCode", "availableLocales", "aiExportVisible"], outputs: ["restoreContent", "themeKeySelect", "localeSelect"] }, { kind: "component", type: RehearseTimingsComponent, selector: "pptx-rehearse-timings", inputs: ["summary", "paused", "slideStartedAt", "presentationStartedAt", "timings"], outputs: ["togglePause", "save", "discard"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [/* @ts-ignore */
|
|
118394
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: SlideCanvasComponent, selector: "pptx-slide-canvas", inputs: ["slide", "canvasSize", "mediaDataUrls", "zoom", "editable", "showGrid", "showRulers", "rulerUnit", "showGuides", "snapToGrid", "snapToShape", "guideCommand", "spellCheck", "snapToGuides", "autoFit", "transparentBackground", "interactive", "presenting", "selectedIds", "editingId", "editTemplateMode", "templateElements", "aiHighlights", "aiActive", "aiActiveSlideIndex", "aiChangeBatch", "aiPickMode", "drawTool", "drawColor", "drawWidth"], outputs: ["elementSelect", "backgroundClick", "transformStart", "transformUpdate", "contextMenu", "textEditStart", "textCommit", "textInput", "textCancel", "textFormat", "rotateUpdate", "marqueeSelect", "inkStrokeComplete", "eraserHit", "cellCommit", "tableChange"] }, { kind: "component", type: PresentationOverlayComponent, selector: "pptx-presentation-overlay", inputs: ["slides", "canvasSize", "mediaDataUrls", "startIndex", "showWithAnimation", "useTimings", "subtitlesVisible", "sessionEnded"], outputs: ["indexChange", "closed", "subtitlesChange", "annotationsExit"] }, { kind: "component", type: PresenterViewComponent, selector: "pptx-presenter-view", inputs: ["slides", "currentSlideIndex", "canvasSize", "templateElements", "mediaDataUrls", "presentationStartTime", "isAudienceWindowOpen"], outputs: ["movePresentationSlide", "exit", "openAudienceWindow", "closeAudienceWindow", "navigateToSlide"] }, { kind: "component", type: MobilePresenterViewComponent, selector: "pptx-mobile-presenter-view", inputs: ["slides", "currentSlideIndex", "canvasSize", "templateElements", "mediaDataUrls", "presentationStartTime"], outputs: ["movePresentationSlide", "exit"] }, { kind: "component", type: SlideSorterOverlayComponent, selector: "pptx-slide-sorter-overlay", inputs: ["slides", "canvasSize", "mediaDataUrls", "activeIndex"], outputs: ["select", "closed"] }, { kind: "component", type: ReadingViewOverlayComponent, selector: "pptx-reading-view-overlay", inputs: ["slides", "canvasSize", "mediaDataUrls", "activeSlideIndex"], outputs: ["exit"] }, { kind: "component", type: SlideDefaultInspectorComponent, selector: "pptx-slide-default-inspector", inputs: ["slideIndex", "canEdit", "selectedElement", "comments"], outputs: ["commentAdd", "commentRemove", "commentResolve"] }, { kind: "component", type: FindBarComponent, selector: "pptx-find-bar", inputs: ["slides"], outputs: ["navigate", "closed"] }, { kind: "component", type: FindReplaceBarComponent, selector: "pptx-find-replace-bar", inputs: ["matchCount", "matchIndex"], outputs: ["find", "navigate", "replaceOne", "replaceAll", "close"] }, { kind: "component", type: SlidesPanelComponent, selector: "pptx-slides-panel", inputs: ["canvasSize", "mediaDataUrls", "activeIndex"], outputs: ["select"] }, { kind: "component", type: StatusBarComponent, selector: "pptx-status-bar", inputs: ["slideIndex", "slideCount", "canEdit", "dirty", "autosaveStatus", "notesOpen", "zoomPercent", "sorterActive", "presenting", "hiddenActions"], outputs: ["toggleNotes", "normalView", "openSorter", "slideShow", "zoomIn", "zoomOut", "zoomReset"] }, { kind: "component", type: EditorContextMenuComponent, selector: "pptx-editor-context-menu", inputs: ["x", "y", "slideIndex", "showAiActions"], outputs: ["closed", "askAi", "fixAi", "editHyperlink", "addComment"] }, { kind: "component", type: ExportProgressModalComponent, selector: "pptx-export-progress-modal", inputs: ["open", "title", "progress", "statusMessage"], outputs: ["cancel"] }, { kind: "component", type: CommentsPanelComponent, selector: "pptx-comments-panel", inputs: ["comments", "authorName"], outputs: ["add", "remove", "resolve"] }, { kind: "component", type: SignaturesPanelComponent, selector: "pptx-signatures-panel", inputs: ["signatures"] }, { kind: "component", type: AccessibilityPanelComponent, selector: "pptx-accessibility-panel", inputs: ["issues"], outputs: ["selectSlide"] }, { kind: "component", type: CollaborationCursorsComponent, selector: "pptx-collaboration-cursors", inputs: ["cursors", "zoom"] }, { kind: "component", type: RemoteSelectionOverlayComponent, selector: "pptx-remote-selection-overlay", inputs: ["presences", "elements", "activeSlideIndex", "zoom"] }, { kind: "component", type: FollowModeBarComponent, selector: "pptx-follow-mode-bar", inputs: ["presences", "followedClientId"], outputs: ["follow"] }, { kind: "component", type: PropertiesDialogComponent, selector: "pptx-properties-dialog", inputs: ["open", "properties"], outputs: ["save", "close"] }, { kind: "component", type: HyperlinkDialogComponent, selector: "pptx-hyperlink-dialog", inputs: ["open", "element"], outputs: ["save", "close"] }, { kind: "component", type: PrintDialogComponent, selector: "pptx-print-dialog", inputs: ["slides", "activeSlideIndex", "defaultSlidesPerPage", "defaultFrameSlides"], outputs: ["print", "cancel"] }, { kind: "component", type: ShareDialogComponent, selector: "pptx-share-dialog", inputs: ["open", "defaults", "active", "connected", "userCount", "shareUrl", "p2p"], outputs: ["start", "stop", "close"] }, { kind: "component", type: BroadcastDialogComponent, selector: "pptx-broadcast-dialog", inputs: ["open", "defaults", "active", "connected", "viewerCount", "viewerUrl", "p2p"], outputs: ["start", "stop", "close"] }, { kind: "component", type: MobileBottomBarComponent, selector: "pptx-mobile-bottom-bar", inputs: ["slideCount", "commentCount", "activeSheet"], outputs: ["openSlides", "insert", "openFormat", "openComments", "notes"] }, { kind: "component", type: MobileMenuSheetComponent, selector: "pptx-mobile-menu-sheet", inputs: ["open", "slideCount", "exporting", "showNotes", "canEdit", "hiddenActions"], outputs: ["closed", "openFind", "openSorter", "toggleNotes", "insertText", "present", "openFile", "savePptx", "exportPng", "exportPdf", "exportGif", "exportVideo", "print"] }, { kind: "component", type: MobileSlidesSheetComponent, selector: "pptx-mobile-slides-sheet", inputs: ["open", "slides", "canvasSize", "mediaDataUrls", "activeIndex"], outputs: ["closed", "jumpToSlide"] }, { kind: "component", type: MobileToolbarComponent, selector: "pptx-mobile-toolbar", inputs: ["canUndo", "canRedo", "canPresent", "canEdit", "menuOpen", "aiEnabled", "aiPanelOpen", "hiddenActions"], outputs: ["toggleMenu", "toggleAiPanel", "undo", "redo", "share", "save", "present"] }, { kind: "component", type: MasterViewCanvasComponent, selector: "pptx-master-view-canvas", inputs: ["tab", "slideMasters", "activeMasterIndex", "activeLayoutIndex", "notesMaster", "handoutMaster", "canvasSize", "notesCanvasSize", "mediaDataUrls", "editable"], outputs: ["notesMasterChange", "handoutMasterChange"] }, { kind: "component", type: MasterViewSidebarComponent, selector: "pptx-master-view-sidebar", inputs: ["tab", "slideMasters", "notesMaster", "handoutMaster", "activeMasterIndex", "activeLayoutIndex", "handoutSlidesPerPage"], outputs: ["tabChange", "selectMaster", "selectLayout", "slidesPerPageChange", "backgroundChange", "close"] }, { kind: "component", type: NotesPanelComponent, selector: "pptx-notes-panel", inputs: ["slide", "expanded"], outputs: ["update", "notesToggle"] }, { kind: "component", type: RibbonComponent, selector: "pptx-ribbon", inputs: ["slideIndex", "slideCount", "canEdit", "selectedElement", "zoomPercent", "formatPainterActive", "canActivateFormatPainter", "exporting", "hasMacros", "showGrid", "showRulers", "showGuides", "snapToGrid", "snapToShape", "eyedropperActive", "themeGalleryOpen", "sidebarCollapsed", "inspectorOpen", "commentsOpen", "commentCount", "findOpen", "collabConnected", "connectedCount", "spellCheckEnabled", "showSubtitles", "hiddenActions", "aiEnabled", "aiPanelOpen", "accountAuth"], outputs: ["prev", "next", "zoomIn", "zoomOut", "zoomReset", "find", "present", "presenter", "record", "presentFromBeginning", "rehearseTimings", "toggleSubtitles", "openSubtitleSettings", "recordFromBeginning", "recordFromCurrent", "spellCheckChange", "share", "broadcast", "openFile", "openRecentFile", "createPresentation", "save", "savePpsx", "savePptm", "packageForSharing", "toggleSidebar", "toggleAiPanel", "signatures", "info", "print", "comments", "a11y", "link", "openSorter", "openReadingView", "openMasterView", "toggleNotes", "toggleFormatPainter", "exportPng", "exportPdf", "exportGif", "exportVideo", "copySlideAsImage", "replace", "toggleInspector", "drawToolChange", "toggleThemeGallery", "toggleGrid", "toggleRulers", "toggleGuides", "toggleSelectionPane", "openCustomShows", "toggleSnapToGrid", "toggleSnapToShape", "addGuide", "zoomToFit", "toggleEyedropper", "openSmartArtDialog", "openEquationDialog", "openSetUpSlideShow", "openCompare", "openPassword", "openFontEmbedding", "openVersionHistory", "openShortcuts", "openSettings"] }, { kind: "component", type: TitleBarComponent, selector: "pptx-title-bar", inputs: ["canEdit", "fileName", "isDirty", "autosaveStatus", "autosaveEnabled", "canUndo", "canRedo", "undoLabel", "redoLabel", "findReplaceOpen", "hiddenActions", "quickAccess"], outputs: ["toggleAutosave", "save", "undo", "redo", "quickCommand", "toggleFindReplace", "commandSearch"] }, { kind: "component", type: ThemeGalleryComponent, selector: "pptx-theme-gallery", inputs: ["open", "activeName", "theme"], outputs: ["applyTheme", "applyCustomTheme", "close"] }, { kind: "component", type: SelectionPaneComponent, selector: "pptx-selection-pane", inputs: ["elements", "selectedIds"], outputs: ["selectElement", "bringForward", "sendBackward", "toggleHidden"] }, { kind: "component", type: CustomShowsComponent, selector: "pptx-custom-shows", inputs: ["open", "slides", "customShows", "activeCustomShowId"], outputs: ["create", "remove", "update", "setActive", "close"] }, { kind: "component", type: InsertSmartArtDialogComponent, selector: "pptx-insert-smart-art-dialog", inputs: ["open"], outputs: ["close", "insert"] }, { kind: "component", type: ViewerExtraDialogsComponent, selector: "pptx-viewer-extra-dialogs", inputs: ["activeSlideIndex", "selectedElementId", "filePath", "customShows", "themeKey", "availableThemes", "localeCode", "availableLocales", "aiExportVisible"], outputs: ["restoreContent", "themeKeySelect", "localeSelect"] }, { kind: "component", type: RehearseTimingsComponent, selector: "pptx-rehearse-timings", inputs: ["summary", "paused", "slideStartedAt", "presentationStartedAt", "timings"], outputs: ["togglePause", "save", "discard"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, deferBlockDependencies: [() => [/* @ts-ignore */
|
|
117231
118395
|
Promise.resolve().then(function () { return aiChatPanel_component; }).then(m => m.AiChatPanelComponent)]] });
|
|
117232
118396
|
}
|
|
117233
118397
|
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0.8", ngImport: i0, type: PowerPointViewerComponent, resolveDeferredDeps: () => [/* @ts-ignore */
|
|
@@ -117246,6 +118410,7 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0.8", ng
|
|
|
117246
118410
|
PresenterViewComponent,
|
|
117247
118411
|
MobilePresenterViewComponent,
|
|
117248
118412
|
SlideSorterOverlayComponent,
|
|
118413
|
+
ReadingViewOverlayComponent,
|
|
117249
118414
|
SlideDefaultInspectorComponent,
|
|
117250
118415
|
FindBarComponent,
|
|
117251
118416
|
FindReplaceBarComponent,
|
|
@@ -117380,6 +118545,7 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0.8", ng
|
|
|
117380
118545
|
(a11y)="inspectorPanel.togglePanel('accessibility')"
|
|
117381
118546
|
(link)="docProperties.showHyperlink.set(true)"
|
|
117382
118547
|
(openSorter)="showSorter.set(true)"
|
|
118548
|
+
(openReadingView)="showReadingView.set(true)"
|
|
117383
118549
|
(toggleNotes)="mobileSheetSvc.toggleNotes()"
|
|
117384
118550
|
(toggleFormatPainter)="formatPainter.toggle()"
|
|
117385
118551
|
(exportPng)="xport.exportPng()"
|
|
@@ -117735,6 +118901,22 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0.8", ng
|
|
|
117735
118901
|
/>
|
|
117736
118902
|
}
|
|
117737
118903
|
|
|
118904
|
+
@if (showReadingView()) {
|
|
118905
|
+
<!--
|
|
118906
|
+
The merged deck, so each slide carries its own inherited template
|
|
118907
|
+
elements: the reader pages through the deck inside the overlay, and
|
|
118908
|
+
a single active-slide template layer would paint one slide's master
|
|
118909
|
+
over another's.
|
|
118910
|
+
-->
|
|
118911
|
+
<pptx-reading-view-overlay
|
|
118912
|
+
[slides]="displaySlidesMut()"
|
|
118913
|
+
[canvasSize]="loader.canvasSize()"
|
|
118914
|
+
[mediaDataUrls]="loader.mediaDataUrls()"
|
|
118915
|
+
[activeSlideIndex]="activeSlideIndex()"
|
|
118916
|
+
(exit)="closeReadingView($event)"
|
|
118917
|
+
/>
|
|
118918
|
+
}
|
|
118919
|
+
|
|
117738
118920
|
@if (presentationMode.presenting()) {
|
|
117739
118921
|
<pptx-presentation-overlay
|
|
117740
118922
|
[slides]="customShowsCtl.presentationSlides()"
|
|
@@ -119918,5 +121100,5 @@ function cn(...values) {
|
|
|
119918
121100
|
* Generated bundle index. Do not edit.
|
|
119919
121101
|
*/
|
|
119920
121102
|
|
|
119921
|
-
export { DATA_TABLE_HEADER_H as $, ALIGN_OPTIONS as A, BroadcastDialogComponent as B, CHART_EDITOR_STYLES as C, CanvasFitService as D, ChartAxisOptionsComponent as E, ChartAxisStyleOptionsComponent as F, ChartComboTypeOptionsComponent as G, ChartDataEditorComponent as H, ChartDataLabelOptionsComponent as I, ChartDatapointOptionsComponent as J, ChartDisplayOptionsComponent as K, ChartElementViewComponent as L, ChartErrorBarOptionsComponent as M, ChartMarkerOptionsComponent as N, ChartPartSelectionService as O, ChartPrimitivesComponent as P, ChartRendererComponent as Q, ChartTrendlineOptionsComponent as R, CollaborationCursorsComponent as S, CollaborationService as T, ColorChangedImageComponent as U, CommentsPanelComponent as V, CommentsService as W, ComparePanelComponent as X, ConnectorRendererComponent as Y, ConnectorTextOverlayComponent as Z, CustomShowsComponent as _, ANIMATION_PRESET_CATEGORIES as a, MAX_ZOOM_SCALE as a$, DATA_TABLE_KEY_W as a0, DATA_TABLE_PADDING as a1, DATA_TABLE_ROW_H as a2, DEFAULT_BOUNDS as a3, DEFAULT_BROADCAST_SERVER_URL as a4, DEFAULT_CANVAS_HEIGHT as a5, DEFAULT_CANVAS_WIDTH as a6, DEFAULT_COLOR_SCHEME as a7, DEFAULT_FILL_COLOR as a8, DEFAULT_LAYOUT as a9, EquationTemplateGalleryComponent as aA, ExportProgressModalComponent as aB, ExportService as aC, FieldContextService as aD, FindBarComponent as aE, FindReplaceBarComponent as aF, FollowModeBarComponent as aG, FontEmbeddingListComponent as aH, FontEmbeddingPanelComponent as aI, GALLERY_THEME_PRESETS as aJ, GradientPickerComponent as aK, HANDOUT_OPTIONS as aL, HeaderFooterDialogComponent as aM, HyperlinkDialogComponent as aN, ImagePropertiesPanelComponent as aO, InkDrawingService as aP, InkRendererComponent as aQ, InsertSmartArtDialogComponent as aR, InspectorPaneHeaderComponent as aS, InspectorPanelComponent as aT, IsMobileService as aU, KeepAnnotationsDialogComponent as aV, LOCALE_CATALOG as aW, LONG_PRESS_DURATION_MS as aX, LONG_PRESS_MOVE_TOLERANCE_PX as aY, LoadContentService as aZ, LocalPresencePublisher as a_, DEFAULT_PALETTE$1 as aa, DEFAULT_PRINT_SETTINGS as ab, DEFAULT_SLIDE_BACKGROUND as ac, DEFAULT_STROKE_COLOR as ad, DEFAULT_STYLE as ae, DEFAULT_TABLE_ROW_HEIGHT as af, DEFAULT_TEXT_COLOR$1 as ag, DEFAULT_VIEWER_PROFILE as ah, DIRECTIONAL_PRESETS as ai, DIRECTION_OPTIONS as aj, DocumentPropertiesCardComponent as ak, EMBEDDED_FONTS_STYLE_ID as al, EMPHASIS_PRESETS as am, ENTRANCE_PRESETS as an, TEMPLATES as ao, EXIT_PRESETS as ap, EditorContextMenuComponent as aq, EditorHistory as ar, EditorStateService as as, EditorToolbarComponent as at, EffectsPanelComponent as au, ElementRendererComponent as av, EmbeddedFontsService as aw, EncryptedFileDialogComponent as ax, EquationEditorDialogComponent as ay, EquationRendererComponent as az, AUDIENCE_HASH as b, RibbonTransitionsSectionComponent as b$, MIN_ZOOM_SCALE as b0, MediaPreviewComponent as b1, MediaPropertiesPanelComponent as b2, MediaRendererComponent as b3, MediaTrimTimelineComponent as b4, MobileBottomBarComponent as b5, MobileMenuSheetComponent as b6, MobilePresenterViewComponent as b7, MobileSheetComponent as b8, MobileSlidesSheetComponent as b9, PrintSettingsPanelComponent as bA, PropertiesDialogComponent as bB, REPEAT_MODE_OPTIONS as bC, RESIZE_HANDLES as bD, RULER_FONT_SIZE as bE, RULER_THICKNESS as bF, RemoteSelectionOverlayComponent as bG, RibbonAnimationGalleryComponent as bH, RibbonAnimationsSectionComponent as bI, RibbonArrangeSectionComponent as bJ, RibbonColorPopoverComponent as bK, RibbonComponent as bL, RibbonDesignSectionComponent as bM, RibbonDrawSectionComponent as bN, RibbonDrawingGroupComponent as bO, RibbonEditingSectionComponent as bP, RibbonFileSectionComponent as bQ, RibbonFontControlsComponent as bR, RibbonHomeSectionComponent as bS, RibbonHyperlinkButtonComponent as bT, RibbonInsertFieldsComponent as bU, RibbonInsertSectionComponent as bV, RibbonParagraphControlsComponent as bW, RibbonPrimaryRowComponent as bX, RibbonReviewSectionComponent as bY, RibbonShapeExtrasComponent as bZ, RibbonSlideshowSectionComponent as b_, MobileToolbarComponent as ba, ModalDialogComponent as bb, Model3DRendererComponent as bc, NotesHandoutCardComponent as bd, NotesPanelComponent as be, NotesToolbarComponent as bf, OleRendererComponent as bg, POWER_POINT_VIEWER_PROVIDERS as bh, PRESENTER_CHANNEL_NAME as bi, PRESENTER_MSG_ORIGIN as bj, PX_PER_CM as bk, PX_PER_INCH as bl, PasswordProtectionDialogComponent as bm, PasswordStrengthMeterComponent as bn, PowerPointViewerComponent as bo, PresentationAnnotationOverlayComponent as bp, PresentationAnnotationsService as bq, PresentationOverlayComponent as br, PresentationPropertiesPanelComponent as bs, PresentationSettingsCardComponent as bt, PresentationSubtitleBarComponent as bu, PresentationTransitionOverlayComponent as bv, PresenterViewComponent as bw, PresenterWindowService as bx, PrintDialogComponent as by, PrintService as bz, AUDIENCE_NONCE_KEY as c, ThemeEditorFieldsComponent as c$, RibbonViewSectionComponent as c0, RulerGuidesService as c1, SEQUENCE_OPTIONS as c2, SEVERITY_GROUPS as c3, SEVERITY_LABELS as c4, SHORTCUT_REFERENCE_ITEMS as c5, SLIDE_TRANSITION_KEYFRAMES as c6, DEFAULT_PALETTE as c7, PALETTES$1 as c8, SMART_ART_COLOR_SCHEMES as c9, SlideTransitionCardComponent as cA, SlidesPanelComponent as cB, SmartArt3DRendererComponent as cC, SmartArt3DService as cD, SmartArtPreviewComponent as cE, SmartArtPropertiesComponent as cF, SmartArtRendererComponent as cG, StatusBarComponent as cH, TABLE_STRUCTURE_TOGGLES as cI, TEXT_3D_BOTTOM_BEVEL_KEYS as cJ, TEXT_3D_TOP_BEVEL_KEYS as cK, TEXT_DIRECTION_OPTIONS$1 as cL, THEME_CATALOG as cM, TIMING_CURVE_OPTIONS as cN, TRIGGER_OPTIONS as cO, TYPE_LABELS as cP, TableCellAdvancedFillComponent as cQ, TableCellFormattingComponent as cR, TableDataEditorComponent as cS, TablePropertiesComponent as cT, TableRendererComponent as cU, TableResizeOverlayComponent as cV, TableSelectionService as cW, TagsCardComponent as cX, Text3DBevelSectionComponent as cY, Text3DPanelComponent as cZ, TextAdvancedPanelComponent as c_, SMART_ART_STYLE_OPTIONS as ca, SUB_ITEM_LABEL as cb, SVG_WARP_PRESETS as cc, SWIPE_MAX_VERTICAL_PX as cd, SWIPE_THRESHOLD_PX as ce, SelectionPaneComponent as cf, SetUpSlideShowDialogComponent as cg, SettingsAppearanceTabComponent as ch, SettingsDialogComponent as ci, SettingsLanguageTabComponent as cj, ShareDialogComponent as ck, ShortcutPanelComponent as cl, ShowOptionsFieldsetComponent as cm, ShowSlidesFieldsetComponent as cn, SignatureStrippedDialogComponent as co, SignaturesPanelComponent as cp, SignaturesService as cq, SlideBackgroundCardComponent as cr, SlideCanvasComponent as cs, SlideDefaultInspectorComponent as ct, SlideDiffChangesComponent as cu, SlideDiffRowComponent as cv, SlideDiffThumbnailsComponent as cw, SlideSizeCardComponent as cx, SlideSorterOverlayComponent as cy, SlideThemeOverridePanelComponent as cz, AVATAR_COLOR_SWATCHES as d, buildCategoryLabels as d$, ThemeGalleryComponent as d0, ThemeSelectorCardComponent as d1, TitleBarComponent as d2, TransitionDirectionPickerComponent as d3, TransitionPreviewComponent as d4, VALIGN_OPTIONS as d5, VIEWER_THEME as d6, VersionHistoryPanelComponent as d7, ViewerCanvasEditingService as d8, ViewerCollabCursorService as d9, addItem as dA, addSeries as dB, addSubItem as dC, advanceStep as dD, aiToggleVisible as dE, alignPatch as dF, animationFor as dG, animationPresetLabelKey as dH, annotationMapToInkInserts as dI, applyAcceptedDiff as dJ, applyAnimationPreset as dK, applyFindReplacements as dL, applyFormatToElement as dM, applyMove as dN, applyResize as dO, applyTableStylePreset as dP, asMediaElement as dQ, assignUserColor as dR, attachTouchGestures as dS, beginNodeEdit as dT, bevelSizePatch as dU, boolFromEvent as dV, bringForward as dW, bringToFront as dX, buildBarActions as dY, buildBroadcastConfig as dZ, buildBroadcastViewerUrl as d_, ViewerCollaborationSessionService as da, ViewerCompareService as db, ViewerCustomShowsService as dc, ViewerDialogsService as dd, ViewerDocumentPropertiesService as de, ViewerExportService as df, ViewerExtraDialogsComponent as dg, ViewerFileIOService as dh, ViewerFindReplaceService as di, ViewerFormatPainterService as dj, ViewerInspectorPanelService as dk, ViewerKeyboardService as dl, ViewerMobileSheetService as dm, ViewerPresentationModeService as dn, ViewerThemeGalleryService as dp, ViewerTouchGesturesService as dq, ViewerZoomService as dr, WEBM_MIME_CANDIDATES as ds, WriteBackScheduler as dt, ZoomNavigationService as du, ZoomRendererComponent as dv, ZoomTargetService as dw, addCategory as dx, addCommentToList as dy, addGradientStopPatch as dz, AccessibilityPanelComponent as e, clampGifDimensions as e$, buildCellParagraphs as e0, buildChartViewModel as e1, buildChatLogExport as e2, buildChatLogMarkdown as e3, buildChromeStyle as e4, buildClearHyperlinkPatch as e5, buildClickGroups as e6, buildColStyles as e7, buildCollaborationConfig as e8, buildComboViewModel as e9, buildStockViewModel as eA, buildSurfaceViewModel as eB, buildTableViewModel as eC, buildTreemapViewModel as eD, buildTrimFragment as eE, buildWaterfallViewModel as eF, buildZeroLine as eG, buildZoomContainerStyle as eH, buildZoomViewModel as eI, bulletIndentPx as eJ, canAddTopLevelNode as eK, canGroupSelection as eL, canRemoveTopLevelNode as eM, canSetStrokeWidth as eN, canStartBroadcast as eO, canStartShare as eP, canUngroupSelection as eQ, canUseClipboard as eR, captionDisplayText as eS, cellRunStyle as eT, cellStyleToStyleMap as eU, cellTdStyle as eV, changeCountLabel as eW, changeIcon as eX, characterSpacingPatch as eY, checkFontAvailable as eZ, clampCursorPosition as e_, buildCssGradientFromShapeStyle as ea, buildDuotoneFilter as eb, buildDuotoneFilterId as ec, buildEmbeddedFontStyles as ed, buildEquationElement as ee, buildEquationSegment as ef, buildFallbackViewModel as eg, buildFontFaceRule as eh, buildGradientFillCss as ei, buildGridlinesAndLabels as ej, buildHyperlinkPatch as ek, buildInkContainerStyle as el, buildInkStrokes as em, buildLegend as en, buildModel3DContainerStyle as eo, buildModel3DViewModel as ep, buildOleActionModel as eq, buildOleInfoRows as er, buildPatternFillCss as es, buildPrintHtmlDocument as et, buildPropertiesPatch as eu, buildRegionMapViewModel as ev, buildSaveSlides as ew, buildShareUrl as ex, buildSmartArtInsertElement as ey, buildSmartArtNodes as ez, AccessibilityService as f, defaultThemeColors as f$, clampIndex as f0, clampNotesFontSize as f1, clampScale as f2, clampStep as f3, clearAllLocalViewerData as f4, clearAudienceContent as f5, cn as f6, collectAccessibilityIssues as f7, collectElementText as f8, collectSlideText as f9, computeRadarPoints as fA, computeScatterDots as fB, computeSelectionBoxes as fC, computeSingleSelected as fD, computeSlideIndices as fE, computeSnap as fF, computeStackedBarRects as fG, computeStackedValueRange as fH, computeTextLines as fI, computeTimerProgress as fJ, computeTrendlinePrimitives as fK, computeValueRange as fL, convertOmmlToMathMl as fM, copyFormatFromElement as fN, countAccessibilityIssues as fO, countAnnotationStrokes as fP, createAngularAiBridge as fQ, createCustomShow as fR, createSwipeDismissDrag as fS, createWebrtcBundle as fT, createWebsocketBundle as fU, cssObjectToStyleMap as fV, currentColorScheme as fW, currentLayout as fX, currentStyle as fY, defaultCssVars as fZ, defaultRadius as f_, collectStoredChats as fa, collectUsedFontFamilies as fb, columnWidthStyle as fc, commitNodeText as fd, computeAlign as fe, computeAxisTitlePrimitives as ff, computeBarRects as fg, computeBubbleRadius as fh, computeCornerHandle as fi, computeDataTablePrimitives as fj, computeDistribute as fk, computeDrawingViewBox as fl, computeErrorBarPrimitives as fm, computeFocusTargets as fn, computeHandleBoxes as fo, computeHandoutLayout as fp, computeIsMobile as fq, computeIsTablet as fr, computeLinePoints as fs, computeLinearRegression as ft, computePageCount as fu, computePieLayout as fv, computePieSlicePath as fw, computePieSlices as fx, computePlotLayout as fy, computeRSquared as fz, AccountPageComponent as g, getPlaceholderStyle as g$, deleteElementsByIds as g0, deleteVersion as g1, demoteNode as g2, deriveModel3DBlobUrl as g3, derivePresenceList as g4, describeSmartArtBounds as g5, disableGlowPatch as g6, disableInnerShadowPatch as g7, disableOuterShadowPatch as g8, disableReflectionPatch as g9, formatAutoNumber as gA, formatAxisValue as gB, formatBytes as gC, formatCursorLabel as gD, formatElapsed as gE, formatFileSize as gF, formatPropertyDate as gG, formatTime as gH, fpsToFrameIntervalMs as gI, generateBroadcastRoomId as gJ, generateCommentId as gK, generateCustomShowId as gL, generatePressureCircles as gM, generateTicks as gN, getClrChangeParams as gO, getContainerStyle as gP, getDuotoneFilterDef as gQ, getImageSrc as gR, getLocalStorageUsageSummary as gS, getOleAriaLabel as gT, getOleBadgeLabel as gU, getOleDisplayName as gV, getOleDownloadFileName as gW, getOleTypeColor as gX, getOleTypeLabel as gY, getPasswordStrength as gZ, getPatternSvg as g_, disableSoftEdgePatch as ga, duplicateElementById as gb, durationOf as gc, effectsStateOf as gd, enableGlowPatch as ge, enableInnerShadowPatch as gf, enableOuterShadowPatch as gg, enableReflectionPatch as gh, enableSoftEdgePatch as gi, encodeGif as gj, estimatePageCount as gk, evenColumnWidths as gl, evenRowHeights as gm, exitPresentationFullscreen as gn, exportAiChatLogs as go, extractPathPoints as gp, eyedropperAvailable as gq, fillColorOf as gr, findInSlides as gs, findOwningSlideIndex as gt, findSlideIndexByElementId as gu, fitPolynomial as gv, fitZoom as gw, focusTargetChips as gx, fontMimeForFormat as gy, fontSizeOf as gz, ActionSettingsPanelComponent as h, msToFrameDelayCs as h$, getVersions as h0, getResolvedShapeClipPath as h1, getResolvedShapeClipPathFor as h2, getShapeFillStrokeStyle as h3, getSlideBackgroundStyle as h4, getSlideTransitionAnimations as h5, getSmartArtNodeBounds as h6, getSpeechRecognitionCtor as h7, getTextBlockStyle as h8, getTextWarp as h9, isElementInteractive as hA, isInjectableUrl as hB, isItalic as hC, isPpactionUrl as hD, isPresenterMessage as hE, isSigned as hF, isTextElement as hG, isTwoTableFocus as hH, isUnderline as hI, isUrlSafe as hJ, isValidRoomId as hK, isViewportBackgroundPressTarget as hL, isZoomActivationKey as hM, issueTrackKey as hN, issueTypeLabel as hO, keyToLabel as hP, latexToMathml as hQ, linePointsToSvgString as hR, lineSpacingPatch as hS, loadAudienceContent as hT, mergeCaptionResults as hU, mergeDown as hV, mergeRight as hW, mergeSelection as hX, moveElementBy as hY, moveNodeDown as hZ, moveNodeUp as h_, getTouchDistance as ha, getWarpCategory as hb, getWarpPath as hc, gradientStateFromStyle as hd, gradientStateOf as he, gradientStatePatch as hf, gridColumns as hg, groupElements as hh, groupIssuesBySeverity as hi, hasAnimation as hj, hasCopyableFormat as hk, hasExistingLink as hl, hasExitedFullscreen as hm, hasGradientFill as hn, hasPressureVariation as ho, hasVisibleSlideAfter as hp, headerLabel as hq, imageDimensions as hr, inkViewBox as hs, insertColumn as ht, insertRow as hu, interpolateWidth as hv, isAudienceTab as hw, isBold as hx, isBrowserOpenableMime as hy, isChildNode as hz, AdvancedChartEditorComponent as i, removeRow as i$, narrowToCircle as i0, narrowToPolygon as i1, narrowToRect as i2, newChartElement as i3, newEquationElement as i4, newPresetShapeElement as i5, newShapeElement as i6, newSmartArtElement as i7, newTableElement as i8, newTextElement as i9, pendingElementStyles as iA, pickColorByClickFallback as iB, pickFile as iC, pickSupportedMimeType as iD, planGifFrames as iE, planVideoSegments as iF, pointsToSvgPathD as iG, presenceToCursors as iH, presetByLayout as iI, presetsForCategory as iJ, pressuresToWidths as iK, prevVisibleIndex as iL, projectDrawingShapes as iM, promoteNode as iN, provideViewerTheme as iO, radarAngle as iP, radarRingPoints as iQ, readAsDataUrl as iR, recordWebm as iS, redistributeColumnWidth as iT, removeAnimation as iU, removeCategory as iV, removeColumn as iW, removeCommentFromList as iX, removeElementAnimation as iY, removeGradientStopPatch as iZ, removeNode as i_, nextVisibleIndex as ia, nodeBold as ib, nodeEditBox as ic, nodeFillColor as id, nodeFontColor as ie, nodeIdFromKey as ig, nodeItalic as ih, nodeStyle as ii, normalizeFontFormat as ij, normalizeSlidesPerPage as ik, normalizeValue as il, numFromEvent as im, ommlToMathml as io, ooxmlDashToCssBorderStyle as ip, openNativeEyeDropper as iq, overallStatus as ir, paletteColor as is, parseAudienceNonce as it, parseNodeTextarea as iu, partitionSlides as iv, patchChartData as iw, patchChartStyle as ix, patchTableData as iy, patchTextStyle as iz, AiChangeOverlayComponent as j, setElementPosition as j$, removeSeries as j0, renderToCanvas as j1, reorderAnimationDown as j2, reorderAnimationUp as j3, replaceInSlides as j4, replaceMatch as j5, requestPresentationFullscreen as j6, resizeElement as j7, resolveCaptionTracks as j8, resolveChartKind as j9, seedBroadcastFields as jA, seedHyperlinkDraft as jB, seedPropertiesDraft as jC, seedShareFields as jD, segmentFrameCount as jE, selectValue$2 as jF, sendBackward as jG, sendToBack as jH, sequentialColorScale as jI, serializeWriteBack as jJ, seriesColor as jK, setAnimationEmphasis as jL, setAnimationEntrance as jM, setAnimationExit as jN, setAxis as jO, setAxisLogScale as jP, setAxisTitleStyle as jQ, setCategoryLabel as jR, setCellText as jS, setColorScheme as jT, setDataLabels as jU, setDataPointExplosion as jV, setDataPointFill as jW, setDataPointLabel as jX, setDelay as jY, setDirection as jZ, setDuration as j_, resolveFontVariant as ja, resolveHyperlinkHref as jb, resolveInteractiveElementId as jc, resolveMediaSrc as jd, resolveOleType as je, resolveParagraphBullet as jf, resolvePresenterNotes as jg, resolveProfileInitial as jh, resolveRegionCode as ji, resolveSlideAutoAdvanceMs as jj, resolvePalette as jk, resolveThemeCatalogEntry as jl, resolveTransitionDuration as jm, revealedElementStyles as jn, routeOrthogonalConnector as jo, rowStyle as jp, rulerDragToGuidePosition as jq, rulerHighlight as jr, rulerStripTicks as js, sampleColorFromSlide as jt, sanitizeColor as ju, sanitizeSlideIndex as jv, sanitizeUserName as jw, saveViewerProfile as jx, scanAvailableFonts as jy, searchSlides as jz, AiChatPanelComponent as k, ungroupElements as k$, setGridlineStyle as k0, setLayout as k1, setLegend as k2, setNodeStyle as k3, setNodeText as k4, setRepeatCount as k5, setRepeatMode as k6, setSequence as k7, setSeriesChartType as k8, setSeriesColor as k9, splitMergedCell as kA, statusKind as kB, statusLabel$1 as kC, storeAudienceContent as kD, stringFromEvent$5 as kE, strokeColorOf as kF, strokeToInkElement as kG, strokeWidthOf as kH, styleShadowFilter as kI, textAdvancedPatch as kJ, textAdvancedStateFromStyle as kK, textAdvancedStateOf as kL, textColorOf as kM, textDirectionPatch as kN, textStyleOf as kO, textStylePatch as kP, themeStyle as kQ, themeToCssVars as kR, thumbnailHeight as kS, thumbnailZoom as kT, toggleCommentResolvedInList as kU, toggleNodeBold as kV, toggleNodeItalic as kW, toggleSheet as kX, topLevelNodeCount as kY, transformSelectedTextCase as kZ, translationsEn as k_, setSeriesErrorBars as ka, setSeriesMarker as kb, setSeriesName as kc, setSeriesTrendline as kd, setSeriesValue as ke, setStyle as kf, setTimingCurve as kg, setTitle as kh, setTrigger as ki, setTriggerShapeId as kj, shapeStylePatch as kk, sheetAfterNavigate as kl, shouldBlockClickAdvance as km, shouldUseSvgWarp as kn, showDirectionPicker as ko, showsTemplateAffordance as kp, signatureCountLabel as kq, signatureKey as kr, signatureTimestamp as ks, signerName as kt, statusLabel as ku, slideNumberOf as kv, smartArtNodes as kw, paletteColour as kx, snapToGridStep as ky, splitCursorCell as kz, AiChatService as l, updateElementById as l0, updateGlowPatch as l1, updateGradientStopPatch as l2, updateInnerShadowPatch as l3, updateOuterShadowPatch as l4, updateReflectionPatch as l5, vAlignPatch as l6, validatePassword as l7, validatePrintSettings as l8, validateRoomId as l9, valueToY as la, vermilionDarkColors as lb, vermilionDarkTheme as lc, vermilionLightColors as ld, vermilionLightTheme as le, vermilionRadius as lf, waypointsToPathD as lg, worstStatus as lh, zoomTargetSlideIndex as li, AiComposerComponent as m, AiFocusBarComponent as n, AiFocusHighlightOverlayComponent as o, AiMessageListComponent as p, AiPanelStore as q, AiProposalCardComponent as r, AiSettingsSectionComponent as s, toChatSummary as t, AiToolCallCardComponent as u, AnimationAuthorPanelComponent as v, AnimationPanelComponent as w, AnimationPlaybackService as x, AutosaveService as y, CURSOR_PALETTE as z };
|
|
119922
|
-
//# sourceMappingURL=pptx-angular-viewer-pptx-angular-viewer-
|
|
121103
|
+
export { DATA_TABLE_HEADER_H as $, ALIGN_OPTIONS as A, BroadcastDialogComponent as B, CHART_EDITOR_STYLES as C, CanvasFitService as D, ChartAxisOptionsComponent as E, ChartAxisStyleOptionsComponent as F, ChartComboTypeOptionsComponent as G, ChartDataEditorComponent as H, ChartDataLabelOptionsComponent as I, ChartDatapointOptionsComponent as J, ChartDisplayOptionsComponent as K, ChartElementViewComponent as L, ChartErrorBarOptionsComponent as M, ChartMarkerOptionsComponent as N, ChartPartSelectionService as O, ChartPrimitivesComponent as P, ChartRendererComponent as Q, ChartTrendlineOptionsComponent as R, CollaborationCursorsComponent as S, CollaborationService as T, ColorChangedImageComponent as U, CommentsPanelComponent as V, CommentsService as W, ComparePanelComponent as X, ConnectorRendererComponent as Y, ConnectorTextOverlayComponent as Z, CustomShowsComponent as _, ANIMATION_PRESET_CATEGORIES as a, MAX_ZOOM_SCALE as a$, DATA_TABLE_KEY_W as a0, DATA_TABLE_PADDING as a1, DATA_TABLE_ROW_H as a2, DEFAULT_BOUNDS as a3, DEFAULT_BROADCAST_SERVER_URL as a4, DEFAULT_CANVAS_HEIGHT as a5, DEFAULT_CANVAS_WIDTH as a6, DEFAULT_COLOR_SCHEME as a7, DEFAULT_FILL_COLOR as a8, DEFAULT_LAYOUT as a9, EquationTemplateGalleryComponent as aA, ExportProgressModalComponent as aB, ExportService as aC, FieldContextService as aD, FindBarComponent as aE, FindReplaceBarComponent as aF, FollowModeBarComponent as aG, FontEmbeddingListComponent as aH, FontEmbeddingPanelComponent as aI, GALLERY_THEME_PRESETS as aJ, GradientPickerComponent as aK, HANDOUT_OPTIONS as aL, HeaderFooterDialogComponent as aM, HyperlinkDialogComponent as aN, ImagePropertiesPanelComponent as aO, InkDrawingService as aP, InkRendererComponent as aQ, InsertSmartArtDialogComponent as aR, InspectorPaneHeaderComponent as aS, InspectorPanelComponent as aT, IsMobileService as aU, KeepAnnotationsDialogComponent as aV, LOCALE_CATALOG as aW, LONG_PRESS_DURATION_MS as aX, LONG_PRESS_MOVE_TOLERANCE_PX as aY, LoadContentService as aZ, LocalPresencePublisher as a_, DEFAULT_PALETTE$1 as aa, DEFAULT_PRINT_SETTINGS as ab, DEFAULT_SLIDE_BACKGROUND as ac, DEFAULT_STROKE_COLOR as ad, DEFAULT_STYLE as ae, DEFAULT_TABLE_ROW_HEIGHT as af, DEFAULT_TEXT_COLOR$1 as ag, DEFAULT_VIEWER_PROFILE as ah, DIRECTIONAL_PRESETS as ai, DIRECTION_OPTIONS as aj, DocumentPropertiesCardComponent as ak, EMBEDDED_FONTS_STYLE_ID as al, EMPHASIS_PRESETS as am, ENTRANCE_PRESETS as an, TEMPLATES as ao, EXIT_PRESETS as ap, EditorContextMenuComponent as aq, EditorHistory as ar, EditorStateService as as, EditorToolbarComponent as at, EffectsPanelComponent as au, ElementRendererComponent as av, EmbeddedFontsService as aw, EncryptedFileDialogComponent as ax, EquationEditorDialogComponent as ay, EquationRendererComponent as az, AUDIENCE_HASH as b, RibbonSlideshowSectionComponent as b$, MIN_ZOOM_SCALE as b0, MediaPreviewComponent as b1, MediaPropertiesPanelComponent as b2, MediaRendererComponent as b3, MediaTrimTimelineComponent as b4, MobileBottomBarComponent as b5, MobileMenuSheetComponent as b6, MobilePresenterViewComponent as b7, MobileSheetComponent as b8, MobileSlidesSheetComponent as b9, PrintSettingsPanelComponent as bA, PropertiesDialogComponent as bB, REPEAT_MODE_OPTIONS as bC, RESIZE_HANDLES as bD, RULER_FONT_SIZE as bE, RULER_THICKNESS as bF, ReadingViewOverlayComponent as bG, RemoteSelectionOverlayComponent as bH, RibbonAnimationGalleryComponent as bI, RibbonAnimationsSectionComponent as bJ, RibbonArrangeSectionComponent as bK, RibbonColorPopoverComponent as bL, RibbonComponent as bM, RibbonDesignSectionComponent as bN, RibbonDrawSectionComponent as bO, RibbonDrawingGroupComponent as bP, RibbonEditingSectionComponent as bQ, RibbonFileSectionComponent as bR, RibbonFontControlsComponent as bS, RibbonHomeSectionComponent as bT, RibbonHyperlinkButtonComponent as bU, RibbonInsertFieldsComponent as bV, RibbonInsertSectionComponent as bW, RibbonParagraphControlsComponent as bX, RibbonPrimaryRowComponent as bY, RibbonReviewSectionComponent as bZ, RibbonShapeExtrasComponent as b_, MobileToolbarComponent as ba, ModalDialogComponent as bb, Model3DRendererComponent as bc, NotesHandoutCardComponent as bd, NotesPanelComponent as be, NotesToolbarComponent as bf, OleRendererComponent as bg, POWER_POINT_VIEWER_PROVIDERS as bh, PRESENTER_CHANNEL_NAME as bi, PRESENTER_MSG_ORIGIN as bj, PX_PER_CM as bk, PX_PER_INCH as bl, PasswordProtectionDialogComponent as bm, PasswordStrengthMeterComponent as bn, PowerPointViewerComponent as bo, PresentationAnnotationOverlayComponent as bp, PresentationAnnotationsService as bq, PresentationOverlayComponent as br, PresentationPropertiesPanelComponent as bs, PresentationSettingsCardComponent as bt, PresentationSubtitleBarComponent as bu, PresentationTransitionOverlayComponent as bv, PresenterViewComponent as bw, PresenterWindowService as bx, PrintDialogComponent as by, PrintService as bz, AUDIENCE_NONCE_KEY as c, TextAdvancedPanelComponent as c$, RibbonTransitionsSectionComponent as c0, RibbonViewSectionComponent as c1, RulerGuidesService as c2, SEQUENCE_OPTIONS as c3, SEVERITY_GROUPS as c4, SEVERITY_LABELS as c5, SHORTCUT_REFERENCE_ITEMS as c6, SLIDE_TRANSITION_KEYFRAMES as c7, DEFAULT_PALETTE as c8, PALETTES$1 as c9, SlideThemeOverridePanelComponent as cA, SlideTransitionCardComponent as cB, SlidesPanelComponent as cC, SmartArt3DRendererComponent as cD, SmartArt3DService as cE, SmartArtPreviewComponent as cF, SmartArtPropertiesComponent as cG, SmartArtRendererComponent as cH, StatusBarComponent as cI, TABLE_STRUCTURE_TOGGLES as cJ, TEXT_3D_BOTTOM_BEVEL_KEYS as cK, TEXT_3D_TOP_BEVEL_KEYS as cL, TEXT_DIRECTION_OPTIONS$1 as cM, THEME_CATALOG as cN, TIMING_CURVE_OPTIONS as cO, TRIGGER_OPTIONS as cP, TYPE_LABELS as cQ, TableCellAdvancedFillComponent as cR, TableCellFormattingComponent as cS, TableDataEditorComponent as cT, TablePropertiesComponent as cU, TableRendererComponent as cV, TableResizeOverlayComponent as cW, TableSelectionService as cX, TagsCardComponent as cY, Text3DBevelSectionComponent as cZ, Text3DPanelComponent as c_, SMART_ART_COLOR_SCHEMES as ca, SMART_ART_STYLE_OPTIONS as cb, SUB_ITEM_LABEL as cc, SVG_WARP_PRESETS as cd, SWIPE_MAX_VERTICAL_PX as ce, SWIPE_THRESHOLD_PX as cf, SelectionPaneComponent as cg, SetUpSlideShowDialogComponent as ch, SettingsAppearanceTabComponent as ci, SettingsDialogComponent as cj, SettingsLanguageTabComponent as ck, ShareDialogComponent as cl, ShortcutPanelComponent as cm, ShowOptionsFieldsetComponent as cn, ShowSlidesFieldsetComponent as co, SignatureStrippedDialogComponent as cp, SignaturesPanelComponent as cq, SignaturesService as cr, SlideBackgroundCardComponent as cs, SlideCanvasComponent as ct, SlideDefaultInspectorComponent as cu, SlideDiffChangesComponent as cv, SlideDiffRowComponent as cw, SlideDiffThumbnailsComponent as cx, SlideSizeCardComponent as cy, SlideSorterOverlayComponent as cz, AVATAR_COLOR_SWATCHES as d, buildBroadcastViewerUrl as d$, ThemeEditorFieldsComponent as d0, ThemeGalleryComponent as d1, ThemeSelectorCardComponent as d2, TitleBarComponent as d3, TransitionDirectionPickerComponent as d4, TransitionPreviewComponent as d5, VALIGN_OPTIONS as d6, VIEWER_THEME as d7, VersionHistoryPanelComponent as d8, ViewerCanvasEditingService as d9, addGradientStopPatch as dA, addItem as dB, addSeries as dC, addSubItem as dD, advanceStep as dE, aiToggleVisible as dF, alignPatch as dG, animationFor as dH, animationPresetLabelKey as dI, annotationMapToInkInserts as dJ, applyAcceptedDiff as dK, applyAnimationPreset as dL, applyFindReplacements as dM, applyFormatToElement as dN, applyMove as dO, applyResize as dP, applyTableStylePreset as dQ, asMediaElement as dR, assignUserColor as dS, attachTouchGestures as dT, beginNodeEdit as dU, bevelSizePatch as dV, boolFromEvent as dW, bringForward as dX, bringToFront as dY, buildBarActions as dZ, buildBroadcastConfig as d_, ViewerCollabCursorService as da, ViewerCollaborationSessionService as db, ViewerCompareService as dc, ViewerCustomShowsService as dd, ViewerDialogsService as de, ViewerDocumentPropertiesService as df, ViewerExportService as dg, ViewerExtraDialogsComponent as dh, ViewerFileIOService as di, ViewerFindReplaceService as dj, ViewerFormatPainterService as dk, ViewerInspectorPanelService as dl, ViewerKeyboardService as dm, ViewerMobileSheetService as dn, ViewerPresentationModeService as dp, ViewerThemeGalleryService as dq, ViewerTouchGesturesService as dr, ViewerZoomService as ds, WEBM_MIME_CANDIDATES as dt, WriteBackScheduler as du, ZoomNavigationService as dv, ZoomRendererComponent as dw, ZoomTargetService as dx, addCategory as dy, addCommentToList as dz, AccessibilityPanelComponent as e, clampCursorPosition as e$, buildCategoryLabels as e0, buildCellParagraphs as e1, buildChartViewModel as e2, buildChatLogExport as e3, buildChatLogMarkdown as e4, buildChromeStyle as e5, buildClearHyperlinkPatch as e6, buildClickGroups as e7, buildColStyles as e8, buildCollaborationConfig as e9, buildSmartArtNodes as eA, buildStockViewModel as eB, buildSurfaceViewModel as eC, buildTableViewModel as eD, buildTreemapViewModel as eE, buildTrimFragment as eF, buildWaterfallViewModel as eG, buildZeroLine as eH, buildZoomContainerStyle as eI, buildZoomViewModel as eJ, bulletIndentPx as eK, canAddTopLevelNode as eL, canGroupSelection as eM, canRemoveTopLevelNode as eN, canSetStrokeWidth as eO, canStartBroadcast as eP, canStartShare as eQ, canUngroupSelection as eR, canUseClipboard as eS, captionDisplayText as eT, cellRunStyle as eU, cellStyleToStyleMap as eV, cellTdStyle as eW, changeCountLabel as eX, changeIcon as eY, characterSpacingPatch as eZ, checkFontAvailable as e_, buildComboViewModel as ea, buildCssGradientFromShapeStyle as eb, buildDuotoneFilter as ec, buildDuotoneFilterId as ed, buildEmbeddedFontStyles as ee, buildEquationElement as ef, buildEquationSegment as eg, buildFallbackViewModel as eh, buildFontFaceRule as ei, buildGradientFillCss as ej, buildGridlinesAndLabels as ek, buildHyperlinkPatch as el, buildInkContainerStyle as em, buildInkStrokes as en, buildLegend as eo, buildModel3DContainerStyle as ep, buildModel3DViewModel as eq, buildOleActionModel as er, buildOleInfoRows as es, buildPatternFillCss as et, buildPrintHtmlDocument as eu, buildPropertiesPatch as ev, buildRegionMapViewModel as ew, buildSaveSlides as ex, buildShareUrl as ey, buildSmartArtInsertElement as ez, AccessibilityService as f, defaultRadius as f$, clampGifDimensions as f0, clampIndex as f1, clampNotesFontSize as f2, clampScale as f3, clampStep as f4, clearAllLocalViewerData as f5, clearAudienceContent as f6, cn as f7, collectAccessibilityIssues as f8, collectElementText as f9, computeRSquared as fA, computeRadarPoints as fB, computeScatterDots as fC, computeSelectionBoxes as fD, computeSingleSelected as fE, computeSlideIndices as fF, computeSnap as fG, computeStackedBarRects as fH, computeStackedValueRange as fI, computeTextLines as fJ, computeTimerProgress as fK, computeTrendlinePrimitives as fL, computeValueRange as fM, convertOmmlToMathMl as fN, copyFormatFromElement as fO, countAccessibilityIssues as fP, countAnnotationStrokes as fQ, createAngularAiBridge as fR, createCustomShow as fS, createSwipeDismissDrag as fT, createWebrtcBundle as fU, createWebsocketBundle as fV, cssObjectToStyleMap as fW, currentColorScheme as fX, currentLayout as fY, currentStyle as fZ, defaultCssVars as f_, collectSlideText as fa, collectStoredChats as fb, collectUsedFontFamilies as fc, columnWidthStyle as fd, commitNodeText as fe, computeAlign as ff, computeAxisTitlePrimitives as fg, computeBarRects as fh, computeBubbleRadius as fi, computeCornerHandle as fj, computeDataTablePrimitives as fk, computeDistribute as fl, computeDrawingViewBox as fm, computeErrorBarPrimitives as fn, computeFocusTargets as fo, computeHandleBoxes as fp, computeHandoutLayout as fq, computeIsMobile as fr, computeIsTablet as fs, computeLinePoints as ft, computeLinearRegression as fu, computePageCount as fv, computePieLayout as fw, computePieSlicePath as fx, computePieSlices as fy, computePlotLayout as fz, AccountPageComponent as g, getPatternSvg as g$, defaultThemeColors as g0, deleteElementsByIds as g1, deleteVersion as g2, demoteNode as g3, deriveModel3DBlobUrl as g4, derivePresenceList as g5, describeSmartArtBounds as g6, disableGlowPatch as g7, disableInnerShadowPatch as g8, disableOuterShadowPatch as g9, fontSizeOf as gA, formatAutoNumber as gB, formatAxisValue as gC, formatBytes as gD, formatCursorLabel as gE, formatElapsed as gF, formatFileSize as gG, formatPropertyDate as gH, formatTime as gI, fpsToFrameIntervalMs as gJ, generateBroadcastRoomId as gK, generateCommentId as gL, generateCustomShowId as gM, generatePressureCircles as gN, generateTicks as gO, getClrChangeParams as gP, getContainerStyle as gQ, getDuotoneFilterDef as gR, getImageSrc as gS, getLocalStorageUsageSummary as gT, getOleAriaLabel as gU, getOleBadgeLabel as gV, getOleDisplayName as gW, getOleDownloadFileName as gX, getOleTypeColor as gY, getOleTypeLabel as gZ, getPasswordStrength as g_, disableReflectionPatch as ga, disableSoftEdgePatch as gb, duplicateElementById as gc, durationOf as gd, effectsStateOf as ge, enableGlowPatch as gf, enableInnerShadowPatch as gg, enableOuterShadowPatch as gh, enableReflectionPatch as gi, enableSoftEdgePatch as gj, encodeGif as gk, estimatePageCount as gl, evenColumnWidths as gm, evenRowHeights as gn, exitPresentationFullscreen as go, exportAiChatLogs as gp, extractPathPoints as gq, eyedropperAvailable as gr, fillColorOf as gs, findInSlides as gt, findOwningSlideIndex as gu, findSlideIndexByElementId as gv, fitPolynomial as gw, fitZoom as gx, focusTargetChips as gy, fontMimeForFormat as gz, ActionSettingsPanelComponent as h, moveNodeUp as h$, getPlaceholderStyle as h0, getVersions as h1, getResolvedShapeClipPath as h2, getResolvedShapeClipPathFor as h3, getShapeFillStrokeStyle as h4, getSlideBackgroundStyle as h5, getSlideTransitionAnimations as h6, getSmartArtNodeBounds as h7, getSpeechRecognitionCtor as h8, getTextBlockStyle as h9, isChildNode as hA, isElementInteractive as hB, isInjectableUrl as hC, isItalic as hD, isPpactionUrl as hE, isPresenterMessage as hF, isSigned as hG, isTextElement as hH, isTwoTableFocus as hI, isUnderline as hJ, isUrlSafe as hK, isValidRoomId as hL, isViewportBackgroundPressTarget as hM, isZoomActivationKey as hN, issueTrackKey as hO, issueTypeLabel as hP, keyToLabel as hQ, latexToMathml as hR, linePointsToSvgString as hS, lineSpacingPatch as hT, loadAudienceContent as hU, mergeCaptionResults as hV, mergeDown as hW, mergeRight as hX, mergeSelection as hY, moveElementBy as hZ, moveNodeDown as h_, getTextWarp as ha, getTouchDistance as hb, getWarpCategory as hc, getWarpPath as hd, gradientStateFromStyle as he, gradientStateOf as hf, gradientStatePatch as hg, gridColumns as hh, groupElements as hi, groupIssuesBySeverity as hj, hasAnimation as hk, hasCopyableFormat as hl, hasExistingLink as hm, hasExitedFullscreen as hn, hasGradientFill as ho, hasPressureVariation as hp, hasVisibleSlideAfter as hq, headerLabel as hr, imageDimensions as hs, inkViewBox as ht, insertTableElementColumn as hu, insertTableElementRow as hv, interpolateWidth as hw, isAudienceTab as hx, isBold as hy, isBrowserOpenableMime as hz, AdvancedChartEditorComponent as i, removeNode as i$, msToFrameDelayCs as i0, narrowToCircle as i1, narrowToPolygon as i2, narrowToRect as i3, newChartElement as i4, newEquationElement as i5, newPresetShapeElement as i6, newShapeElement as i7, newSmartArtElement as i8, newTableElement as i9, patchTextStyle as iA, pendingElementStyles as iB, pickColorByClickFallback as iC, pickFile as iD, pickSupportedMimeType as iE, planGifFrames as iF, planVideoSegments as iG, pointsToSvgPathD as iH, presenceToCursors as iI, presetByLayout as iJ, presetsForCategory as iK, pressuresToWidths as iL, prevVisibleIndex as iM, projectDrawingShapes as iN, promoteNode as iO, provideViewerTheme as iP, radarAngle as iQ, radarRingPoints as iR, readAsDataUrl as iS, recordWebm as iT, redistributeColumnWidth as iU, removeAnimation as iV, removeCategory as iW, removeTableElementColumn as iX, removeCommentFromList as iY, removeElementAnimation as iZ, removeGradientStopPatch as i_, newTextElement as ia, nextVisibleIndex as ib, nodeBold as ic, nodeEditBox as id, nodeFillColor as ie, nodeFontColor as ig, nodeIdFromKey as ih, nodeItalic as ii, nodeStyle as ij, normalizeFontFormat as ik, normalizeSlidesPerPage as il, normalizeValue as im, numFromEvent as io, ommlToMathml as ip, ooxmlDashToCssBorderStyle as iq, openNativeEyeDropper as ir, overallStatus as is, paletteColor as it, parseAudienceNonce as iu, parseNodeTextarea as iv, partitionSlides as iw, patchChartData as ix, patchChartStyle as iy, patchTableData as iz, AiChangeOverlayComponent as j, setDuration as j$, removeTableElementRow as j0, removeSeries as j1, renderToCanvas as j2, reorderAnimationDown as j3, reorderAnimationUp as j4, replaceInSlides as j5, replaceMatch as j6, requestPresentationFullscreen as j7, resizeElement as j8, resolveCaptionTracks as j9, searchSlides as jA, seedBroadcastFields as jB, seedHyperlinkDraft as jC, seedPropertiesDraft as jD, seedShareFields as jE, segmentFrameCount as jF, selectValue$2 as jG, sendBackward as jH, sendToBack as jI, sequentialColorScale as jJ, serializeWriteBack as jK, seriesColor as jL, setAnimationEmphasis as jM, setAnimationEntrance as jN, setAnimationExit as jO, setAxis as jP, setAxisLogScale as jQ, setAxisTitleStyle as jR, setCategoryLabel as jS, setCellText as jT, setColorScheme as jU, setDataLabels as jV, setDataPointExplosion as jW, setDataPointFill as jX, setDataPointLabel as jY, setDelay as jZ, setDirection as j_, resolveChartKind as ja, resolveFontVariant as jb, resolveHyperlinkHref as jc, resolveInteractiveElementId as jd, resolveMediaSrc as je, resolveOleType as jf, resolveParagraphBullet as jg, resolvePresenterNotes as jh, resolveProfileInitial as ji, resolveRegionCode as jj, resolveSlideAutoAdvanceMs as jk, resolvePalette as jl, resolveThemeCatalogEntry as jm, resolveTransitionDuration as jn, revealedElementStyles as jo, routeOrthogonalConnector as jp, rowStyle as jq, rulerDragToGuidePosition as jr, rulerHighlight as js, rulerStripTicks as jt, sampleColorFromSlide as ju, sanitizeColor as jv, sanitizeSlideIndex as jw, sanitizeUserName as jx, saveViewerProfile as jy, scanAvailableFonts as jz, AiChatPanelComponent as k, translationsEn as k$, setElementPosition as k0, setGridlineStyle as k1, setLayout as k2, setLegend as k3, setNodeStyle as k4, setNodeText as k5, setRepeatCount as k6, setRepeatMode as k7, setSequence as k8, setSeriesChartType as k9, splitCursorCell as kA, splitMergedCell as kB, statusKind as kC, statusLabel$1 as kD, storeAudienceContent as kE, stringFromEvent$5 as kF, strokeColorOf as kG, strokeToInkElement as kH, strokeWidthOf as kI, styleShadowFilter as kJ, textAdvancedPatch as kK, textAdvancedStateFromStyle as kL, textAdvancedStateOf as kM, textColorOf as kN, textDirectionPatch as kO, textStyleOf as kP, textStylePatch as kQ, themeStyle as kR, themeToCssVars as kS, thumbnailHeight as kT, thumbnailZoom as kU, toggleCommentResolvedInList as kV, toggleNodeBold as kW, toggleNodeItalic as kX, toggleSheet as kY, topLevelNodeCount as kZ, transformSelectedTextCase as k_, setSeriesColor as ka, setSeriesErrorBars as kb, setSeriesMarker as kc, setSeriesName as kd, setSeriesTrendline as ke, setSeriesValue as kf, setStyle as kg, setTimingCurve as kh, setTitle as ki, setTrigger as kj, setTriggerShapeId as kk, shapeStylePatch as kl, sheetAfterNavigate as km, shouldBlockClickAdvance as kn, shouldUseSvgWarp as ko, showDirectionPicker as kp, showsTemplateAffordance as kq, signatureCountLabel as kr, signatureKey as ks, signatureTimestamp as kt, signerName as ku, statusLabel as kv, slideNumberOf as kw, smartArtNodes as kx, paletteColour as ky, snapToGridStep as kz, AiChatService as l, ungroupElements as l0, updateElementById as l1, updateGlowPatch as l2, updateGradientStopPatch as l3, updateInnerShadowPatch as l4, updateOuterShadowPatch as l5, updateReflectionPatch as l6, vAlignPatch as l7, validatePassword as l8, validatePrintSettings as l9, validateRoomId as la, valueToY as lb, vermilionDarkColors as lc, vermilionDarkTheme as ld, vermilionLightColors as le, vermilionLightTheme as lf, vermilionRadius as lg, waypointsToPathD as lh, worstStatus as li, zoomTargetSlideIndex as lj, AiComposerComponent as m, AiFocusBarComponent as n, AiFocusHighlightOverlayComponent as o, AiMessageListComponent as p, AiPanelStore as q, AiProposalCardComponent as r, AiSettingsSectionComponent as s, toChatSummary as t, AiToolCallCardComponent as u, AnimationAuthorPanelComponent as v, AnimationPanelComponent as w, AnimationPlaybackService as x, AutosaveService as y, CURSOR_PALETTE as z };
|
|
121104
|
+
//# sourceMappingURL=pptx-angular-viewer-pptx-angular-viewer-C20L99Zu.mjs.map
|