pptx-react-viewer 4.7.0 → 4.8.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 +68 -0
- package/dist/{AiChatPanel-3YILWCBX.js → AiChatPanel-4LMJIJUU.js} +28 -28
- package/dist/AiChatPanel-4LMJIJUU.js.br +0 -0
- package/dist/AiChatPanel-4LMJIJUU.js.gz +0 -0
- package/dist/{AiChatPanel-X2MVL5UP.mjs → AiChatPanel-XWYLYN26.mjs} +4 -4
- package/dist/AiChatPanel-XWYLYN26.mjs.br +0 -0
- package/dist/AiChatPanel-XWYLYN26.mjs.gz +0 -0
- package/dist/{Model3DScene-QFWI5CEE.mjs → Model3DScene-N6IZ7Q57.mjs} +1 -1
- package/dist/Model3DScene-N6IZ7Q57.mjs.br +0 -0
- package/dist/Model3DScene-N6IZ7Q57.mjs.gz +0 -0
- package/dist/{Model3DScene-G7P6ZAIO.js → Model3DScene-YAPQ5BCI.js} +2 -2
- package/dist/{Model3DScene-G7P6ZAIO.js.br → Model3DScene-YAPQ5BCI.js.br} +0 -0
- package/dist/Model3DScene-YAPQ5BCI.js.gz +0 -0
- package/dist/{chunk-UBYFLXAU.mjs → chunk-KHEJXP4I.mjs} +8 -8
- package/dist/chunk-KHEJXP4I.mjs.br +0 -0
- package/dist/chunk-KHEJXP4I.mjs.gz +0 -0
- package/dist/{chunk-UIAU3NR2.js → chunk-LTBTG2QB.js} +64 -96
- package/dist/chunk-LTBTG2QB.js.br +0 -0
- package/dist/chunk-LTBTG2QB.js.gz +0 -0
- package/dist/{chunk-QLDHUKH2.mjs → chunk-NPZOVIHG.mjs} +32146 -11875
- package/dist/chunk-NPZOVIHG.mjs.br +0 -0
- package/dist/chunk-NPZOVIHG.mjs.gz +0 -0
- package/dist/{chunk-VF4RA27Q.js → chunk-NV2H57Q4.js} +1156 -1156
- package/dist/chunk-NV2H57Q4.js.br +0 -0
- package/dist/chunk-NV2H57Q4.js.gz +0 -0
- package/dist/{chunk-E5OIDWHO.mjs → chunk-Q4XJSJYI.mjs} +1 -1
- package/dist/chunk-Q4XJSJYI.mjs.br +0 -0
- package/dist/chunk-Q4XJSJYI.mjs.gz +0 -0
- package/dist/{chunk-SR7ETIBF.js → chunk-Q7NWWIPQ.js} +819 -818
- package/dist/chunk-Q7NWWIPQ.js.br +0 -0
- package/dist/chunk-Q7NWWIPQ.js.gz +0 -0
- package/dist/{chunk-FYAOOACZ.js → chunk-SAYZSUNQ.js} +263 -249
- package/dist/chunk-SAYZSUNQ.js.br +0 -0
- package/dist/chunk-SAYZSUNQ.js.gz +0 -0
- package/dist/{chunk-OECUSL2B.mjs → chunk-SOMUGI3Y.mjs} +8 -7
- package/dist/chunk-SOMUGI3Y.mjs.br +0 -0
- package/dist/chunk-SOMUGI3Y.mjs.gz +0 -0
- package/dist/{chunk-5J6NW3YS.mjs → chunk-SSXGPYBF.mjs} +56 -42
- package/dist/chunk-SSXGPYBF.mjs.br +0 -0
- package/dist/chunk-SSXGPYBF.mjs.gz +0 -0
- package/dist/{chunk-2BM4GBFZ.js → chunk-UTP22QYH.js} +5 -5
- package/dist/chunk-UTP22QYH.js.br +0 -0
- package/dist/chunk-UTP22QYH.js.gz +0 -0
- package/dist/{chunk-AQIXKTAT.js → chunk-YF2BQIW3.js} +32149 -11877
- package/dist/chunk-YF2BQIW3.js.br +0 -0
- package/dist/chunk-YF2BQIW3.js.gz +0 -0
- package/dist/{chunk-WIEBQGQI.mjs → chunk-YPDPSXPK.mjs} +64 -96
- package/dist/chunk-YPDPSXPK.mjs.br +0 -0
- package/dist/chunk-YPDPSXPK.mjs.gz +0 -0
- package/dist/i18n/de.cjs +64 -96
- package/dist/i18n/de.cjs.br +0 -0
- package/dist/i18n/de.cjs.gz +0 -0
- package/dist/i18n/de.mjs +64 -96
- package/dist/i18n/de.mjs.br +0 -0
- package/dist/i18n/de.mjs.gz +0 -0
- package/dist/i18n/es.cjs +64 -96
- package/dist/i18n/es.cjs.br +0 -0
- package/dist/i18n/es.cjs.gz +0 -0
- package/dist/i18n/es.mjs +64 -96
- package/dist/i18n/es.mjs.br +0 -0
- package/dist/i18n/es.mjs.gz +0 -0
- package/dist/i18n/fr.cjs +64 -96
- package/dist/i18n/fr.cjs.br +0 -0
- package/dist/i18n/fr.cjs.gz +0 -0
- package/dist/i18n/fr.mjs +64 -96
- package/dist/i18n/fr.mjs.br +0 -0
- package/dist/i18n/fr.mjs.gz +0 -0
- package/dist/i18n/zh-CN.cjs +63 -95
- package/dist/i18n/zh-CN.cjs.br +0 -0
- package/dist/i18n/zh-CN.cjs.gz +0 -0
- package/dist/i18n/zh-CN.mjs +63 -95
- package/dist/i18n/zh-CN.mjs.br +0 -0
- package/dist/i18n/zh-CN.mjs.gz +0 -0
- package/dist/i18n.js +4 -4
- package/dist/i18n.js.br +0 -0
- package/dist/i18n.js.gz +0 -0
- package/dist/i18n.mjs +1 -1
- package/dist/i18n.mjs.br +0 -0
- package/dist/i18n.mjs.gz +0 -0
- package/dist/index.d.ts +99 -3
- package/dist/index.js +63 -63
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.d.ts +99 -3
- package/dist/internals.js +105 -105
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +4 -4
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/viewer/index.d.ts +82 -3
- package/dist/viewer/index.js +27 -27
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +6 -6
- package/dist/viewer/index.mjs.br +2 -3
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +1 -1
- package/dist/AiChatPanel-3YILWCBX.js.br +0 -0
- package/dist/AiChatPanel-3YILWCBX.js.gz +0 -0
- package/dist/AiChatPanel-X2MVL5UP.mjs.br +0 -0
- package/dist/AiChatPanel-X2MVL5UP.mjs.gz +0 -0
- package/dist/Model3DScene-G7P6ZAIO.js.gz +0 -0
- package/dist/Model3DScene-QFWI5CEE.mjs.br +0 -0
- package/dist/Model3DScene-QFWI5CEE.mjs.gz +0 -0
- package/dist/chunk-2BM4GBFZ.js.br +0 -0
- package/dist/chunk-2BM4GBFZ.js.gz +0 -0
- package/dist/chunk-5J6NW3YS.mjs.br +0 -0
- package/dist/chunk-5J6NW3YS.mjs.gz +0 -0
- package/dist/chunk-AQIXKTAT.js.br +0 -0
- package/dist/chunk-AQIXKTAT.js.gz +0 -0
- package/dist/chunk-E5OIDWHO.mjs.br +0 -0
- package/dist/chunk-E5OIDWHO.mjs.gz +0 -0
- package/dist/chunk-FYAOOACZ.js.br +0 -0
- package/dist/chunk-FYAOOACZ.js.gz +0 -0
- package/dist/chunk-OECUSL2B.mjs.br +0 -0
- package/dist/chunk-OECUSL2B.mjs.gz +0 -0
- package/dist/chunk-QLDHUKH2.mjs.br +0 -0
- package/dist/chunk-QLDHUKH2.mjs.gz +0 -0
- package/dist/chunk-SR7ETIBF.js.br +0 -0
- package/dist/chunk-SR7ETIBF.js.gz +0 -0
- package/dist/chunk-UBYFLXAU.mjs.br +0 -0
- package/dist/chunk-UBYFLXAU.mjs.gz +0 -0
- package/dist/chunk-UIAU3NR2.js.br +0 -0
- package/dist/chunk-UIAU3NR2.js.gz +0 -0
- package/dist/chunk-VF4RA27Q.js.br +0 -0
- package/dist/chunk-VF4RA27Q.js.gz +0 -0
- package/dist/chunk-WIEBQGQI.mjs.br +0 -0
- package/dist/chunk-WIEBQGQI.mjs.gz +0 -0
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkYF2BQIW3_js = require('./chunk-YF2BQIW3.js');
|
|
4
|
+
var chunkLTBTG2QB_js = require('./chunk-LTBTG2QB.js');
|
|
5
5
|
var clsx = require('clsx');
|
|
6
6
|
var tailwindMerge = require('tailwind-merge');
|
|
7
|
-
var
|
|
7
|
+
var React8 = require('react');
|
|
8
8
|
var lu = require('react-icons/lu');
|
|
9
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
10
10
|
var reactI18next = require('react-i18next');
|
|
11
11
|
|
|
12
12
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var React8__default = /*#__PURE__*/_interopDefault(React8);
|
|
15
15
|
|
|
16
16
|
// src/viewer/utils/animation-effects.ts
|
|
17
17
|
function getAnimationInitialStyle2(preset, nativeAnimation) {
|
|
18
|
-
return
|
|
18
|
+
return chunkYF2BQIW3_js.getAnimationInitialStyle(preset, nativeAnimation);
|
|
19
19
|
}
|
|
20
20
|
function cn(...inputs) {
|
|
21
21
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
@@ -23,7 +23,7 @@ function cn(...inputs) {
|
|
|
23
23
|
|
|
24
24
|
// src/viewer/utils/clone.ts
|
|
25
25
|
function cloneHistorySnapshot2(snapshot) {
|
|
26
|
-
return
|
|
26
|
+
return chunkYF2BQIW3_js.cloneHistorySnapshot(snapshot);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
// src/viewer/constants/scalar.ts
|
|
@@ -61,7 +61,7 @@ var TOOLBAR_SECTIONS = [
|
|
|
61
61
|
{ id: "view", labelKey: "pptx.ribbon.tab.view" },
|
|
62
62
|
{ id: "help", labelKey: "pptx.ribbon.tab.help" }
|
|
63
63
|
];
|
|
64
|
-
var SHORTCUT_REFERENCE_ITEMS =
|
|
64
|
+
var SHORTCUT_REFERENCE_ITEMS = chunkYF2BQIW3_js.VIEWER_SHORTCUT_REFERENCE;
|
|
65
65
|
|
|
66
66
|
// src/viewer/constants/transitions-animations.ts
|
|
67
67
|
var ANIMATION_PRESET_OPTIONS = [
|
|
@@ -89,12 +89,12 @@ var GLYPH_COMPONENTS = {
|
|
|
89
89
|
plus: lu.LuPlus,
|
|
90
90
|
triangle: lu.LuTriangle
|
|
91
91
|
};
|
|
92
|
-
var SHAPE_PRESETS =
|
|
92
|
+
var SHAPE_PRESETS = chunkYF2BQIW3_js.SHAPE_PRESET_DEFS.map(
|
|
93
93
|
(def) => ({
|
|
94
94
|
type: def.type,
|
|
95
95
|
label: def.label,
|
|
96
96
|
i18nKey: def.i18nKey,
|
|
97
|
-
icon:
|
|
97
|
+
icon: React8__default.default.createElement(GLYPH_COMPONENTS[def.glyph], {
|
|
98
98
|
className: def.glyphClass ? `w-3.5 h-3.5 ${def.glyphClass}` : "w-3.5 h-3.5"
|
|
99
99
|
})
|
|
100
100
|
})
|
|
@@ -114,7 +114,7 @@ var ARROW_SIZE_OPTIONS = [
|
|
|
114
114
|
{ value: "med", label: "Medium", i18nKey: "pptx.connectorOptions.sizeMedium" },
|
|
115
115
|
{ value: "lg", label: "Large", i18nKey: "pptx.connectorOptions.sizeLarge" }
|
|
116
116
|
];
|
|
117
|
-
var STROKE_DASH_OPTIONS2 =
|
|
117
|
+
var STROKE_DASH_OPTIONS2 = chunkYF2BQIW3_js.STROKE_DASH_OPTIONS;
|
|
118
118
|
|
|
119
119
|
// src/viewer/utils/shape-types.tsx
|
|
120
120
|
function getShapeType(shapeType) {
|
|
@@ -223,7 +223,7 @@ function isConnectorOrLineElement(element) {
|
|
|
223
223
|
if (element.type === "connector") {
|
|
224
224
|
return true;
|
|
225
225
|
}
|
|
226
|
-
if (!
|
|
226
|
+
if (!chunkYF2BQIW3_js.hasShapeProperties(element)) {
|
|
227
227
|
return false;
|
|
228
228
|
}
|
|
229
229
|
const st = getShapeType(element.shapeType);
|
|
@@ -232,18 +232,18 @@ function isConnectorOrLineElement(element) {
|
|
|
232
232
|
|
|
233
233
|
// src/viewer/utils/image-style.ts
|
|
234
234
|
function getImageMaskStyle(element) {
|
|
235
|
-
if (!
|
|
235
|
+
if (!chunkYF2BQIW3_js.hasShapeProperties(element)) {
|
|
236
236
|
return void 0;
|
|
237
237
|
}
|
|
238
|
-
const geometry =
|
|
238
|
+
const geometry = chunkYF2BQIW3_js.resolveShapeGeometry(element);
|
|
239
239
|
if (geometry.kind === "borderRadius") {
|
|
240
240
|
return { borderRadius: geometry.radius };
|
|
241
241
|
}
|
|
242
242
|
return geometry.kind === "clipPath" ? { clipPath: geometry.clipPath } : void 0;
|
|
243
243
|
}
|
|
244
244
|
function getImageRenderStyle(element) {
|
|
245
|
-
const fit =
|
|
246
|
-
const counterTransform =
|
|
245
|
+
const fit = chunkYF2BQIW3_js.getImageFitStyle(element);
|
|
246
|
+
const counterTransform = chunkYF2BQIW3_js.getImageFillCounterTransform(element, Boolean(fit.transform));
|
|
247
247
|
return {
|
|
248
248
|
// A translated/scaled crop, or a rotWithShape=false counter-transform,
|
|
249
249
|
// must be masked by the stationary wrapper, not by the moving/counter-
|
|
@@ -262,7 +262,7 @@ function getImageSurfaceMaskStyle(element) {
|
|
|
262
262
|
};
|
|
263
263
|
}
|
|
264
264
|
function getImageSurfaceStyle(element) {
|
|
265
|
-
const fill =
|
|
265
|
+
const fill = chunkYF2BQIW3_js.hasShapeProperties(element) ? chunkYF2BQIW3_js.getComputedFillStyle(element) : void 0;
|
|
266
266
|
return {
|
|
267
267
|
position: "absolute",
|
|
268
268
|
inset: 0,
|
|
@@ -275,13 +275,13 @@ function getImageSurfaceStyle(element) {
|
|
|
275
275
|
};
|
|
276
276
|
}
|
|
277
277
|
function getCropShapeClipPath2(element) {
|
|
278
|
-
if (!
|
|
278
|
+
if (!chunkYF2BQIW3_js.isImageLikeElement(element)) {
|
|
279
279
|
return void 0;
|
|
280
280
|
}
|
|
281
|
-
return
|
|
281
|
+
return chunkYF2BQIW3_js.getCropShapeClipPath(element.cropShape, element.width, element.height);
|
|
282
282
|
}
|
|
283
283
|
function getImageTilingStyle2(element, nativeSize) {
|
|
284
|
-
return
|
|
284
|
+
return chunkYF2BQIW3_js.getImageTilingStyle(element, nativeSize);
|
|
285
285
|
}
|
|
286
286
|
|
|
287
287
|
// src/viewer/utils/geometry-image.ts
|
|
@@ -329,8 +329,8 @@ function buildTrimFragment(element) {
|
|
|
329
329
|
return `#t=${(start / 1e3).toFixed(3)}`;
|
|
330
330
|
}
|
|
331
331
|
function useMediaMetadataExtraction(mediaRef, element) {
|
|
332
|
-
const [metadata, setMetadata] =
|
|
333
|
-
|
|
332
|
+
const [metadata, setMetadata] = React8.useState(element.metadata);
|
|
333
|
+
React8.useEffect(() => {
|
|
334
334
|
const el = mediaRef.current;
|
|
335
335
|
if (!el) {
|
|
336
336
|
return;
|
|
@@ -413,7 +413,7 @@ function VideoWithMetadata({
|
|
|
413
413
|
{
|
|
414
414
|
ref: mediaRef,
|
|
415
415
|
className: "w-full h-full pointer-events-auto",
|
|
416
|
-
style: isFullScreen ? { objectFit: "cover" } :
|
|
416
|
+
style: isFullScreen ? { objectFit: "cover" } : chunkYF2BQIW3_js.getImageFitStyle(element),
|
|
417
417
|
controls: showTransport,
|
|
418
418
|
preload: "metadata",
|
|
419
419
|
playsInline: true,
|
|
@@ -466,28 +466,28 @@ function PresentationMediaController({
|
|
|
466
466
|
children
|
|
467
467
|
}) {
|
|
468
468
|
const { t } = reactI18next.useTranslation();
|
|
469
|
-
const mediaRef =
|
|
470
|
-
const [isMediaPlaying, setIsMediaPlaying] =
|
|
469
|
+
const mediaRef = React8.useRef(null);
|
|
470
|
+
const [isMediaPlaying, setIsMediaPlaying] = React8.useState(false);
|
|
471
471
|
const trimStartSec = element.trimStartMs !== void 0 ? element.trimStartMs / 1e3 : 0;
|
|
472
472
|
const hideWhenNotPlaying = isPresentationMode && element.hideWhenNotPlaying === true;
|
|
473
|
-
const { volume: playbackVolume, playbackRate } =
|
|
473
|
+
const { volume: playbackVolume, playbackRate } = chunkYF2BQIW3_js.mediaPlaybackAttributes({
|
|
474
474
|
loop: element.loop,
|
|
475
475
|
volume: element.volume,
|
|
476
476
|
playbackSpeed: element.playbackSpeed
|
|
477
477
|
});
|
|
478
|
-
|
|
478
|
+
React8.useEffect(() => {
|
|
479
479
|
const el = mediaRef.current;
|
|
480
480
|
if (el) {
|
|
481
481
|
el.volume = playbackVolume;
|
|
482
482
|
}
|
|
483
483
|
}, [playbackVolume]);
|
|
484
|
-
|
|
484
|
+
React8.useEffect(() => {
|
|
485
485
|
const el = mediaRef.current;
|
|
486
486
|
if (el) {
|
|
487
487
|
el.playbackRate = playbackRate;
|
|
488
488
|
}
|
|
489
489
|
}, [playbackRate]);
|
|
490
|
-
|
|
490
|
+
React8.useEffect(() => {
|
|
491
491
|
const el = mediaRef.current;
|
|
492
492
|
if (!el) {
|
|
493
493
|
return;
|
|
@@ -513,12 +513,12 @@ function PresentationMediaController({
|
|
|
513
513
|
el.removeEventListener("ended", handleEnded);
|
|
514
514
|
};
|
|
515
515
|
}, [onPlayStateChange]);
|
|
516
|
-
|
|
516
|
+
React8.useEffect(() => {
|
|
517
517
|
const el = mediaRef.current;
|
|
518
518
|
if (!el || !isPresentationMode) {
|
|
519
519
|
return;
|
|
520
520
|
}
|
|
521
|
-
return
|
|
521
|
+
return chunkYF2BQIW3_js.scheduleMediaTrimAndFade(el, {
|
|
522
522
|
trimStartMs: element.trimStartMs,
|
|
523
523
|
trimEndMs: element.trimEndMs,
|
|
524
524
|
fadeInDuration: element.fadeInDuration,
|
|
@@ -533,13 +533,13 @@ function PresentationMediaController({
|
|
|
533
533
|
element.fadeOutDuration,
|
|
534
534
|
playbackVolume
|
|
535
535
|
]);
|
|
536
|
-
|
|
536
|
+
React8.useEffect(() => {
|
|
537
537
|
if (!isPresentationMode || !shouldAutoPlay) {
|
|
538
538
|
return;
|
|
539
539
|
}
|
|
540
540
|
if (element.playAcrossSlides && element.mediaType === "audio") {
|
|
541
541
|
const dataUrl = element.mediaData ?? resolvedDataUrl;
|
|
542
|
-
if (
|
|
542
|
+
if (chunkYF2BQIW3_js.registerCrossSlideAudio(element, dataUrl)) {
|
|
543
543
|
return;
|
|
544
544
|
}
|
|
545
545
|
}
|
|
@@ -561,17 +561,17 @@ function PresentationMediaController({
|
|
|
561
561
|
transition: "opacity 0.3s ease",
|
|
562
562
|
pointerEvents: isMediaPlaying ? "auto" : "none"
|
|
563
563
|
} : {};
|
|
564
|
-
const handleStopFullScreen =
|
|
564
|
+
const handleStopFullScreen = React8.useCallback(() => {
|
|
565
565
|
const el = mediaRef.current;
|
|
566
566
|
if (el && !el.paused) {
|
|
567
567
|
el.pause();
|
|
568
568
|
}
|
|
569
569
|
}, []);
|
|
570
|
-
const noopOnPlay =
|
|
570
|
+
const noopOnPlay = React8.useCallback(() => {
|
|
571
571
|
}, []);
|
|
572
572
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full h-full", style: wrapperStyle, children: [
|
|
573
573
|
children({ mediaRef, onPlay: noopOnPlay, isMediaPlaying }),
|
|
574
|
-
|
|
574
|
+
chunkYF2BQIW3_js.shouldShowMediaFullscreenStopButton({
|
|
575
575
|
fullScreen: isFullScreen,
|
|
576
576
|
presenting: isPresentationMode,
|
|
577
577
|
playing: isMediaPlaying
|
|
@@ -588,7 +588,7 @@ function PresentationMediaController({
|
|
|
588
588
|
] });
|
|
589
589
|
}
|
|
590
590
|
function label(key) {
|
|
591
|
-
return key === void 0 ? void 0 :
|
|
591
|
+
return key === void 0 ? void 0 : chunkLTBTG2QB_js.translationsEn[key];
|
|
592
592
|
}
|
|
593
593
|
function FallbackIcon({
|
|
594
594
|
paths,
|
|
@@ -624,17 +624,17 @@ function Badge({
|
|
|
624
624
|
"div",
|
|
625
625
|
{
|
|
626
626
|
className: `absolute inset-0 flex flex-col items-center justify-center ${isMissing ? "gap-1" : ""}`,
|
|
627
|
-
...{ [
|
|
627
|
+
...{ [chunkYF2BQIW3_js.MEDIA_CHROME_ATTRIBUTE]: visual.badge },
|
|
628
628
|
children: [
|
|
629
629
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
630
630
|
FallbackIcon,
|
|
631
631
|
{
|
|
632
|
-
paths:
|
|
632
|
+
paths: chunkYF2BQIW3_js.mediaFallbackIcon(visual, element.mediaType),
|
|
633
633
|
size: isMissing ? 32 : 48,
|
|
634
634
|
className: isMissing ? "text-white/60" : "text-white/80 drop-shadow-md"
|
|
635
635
|
}
|
|
636
636
|
),
|
|
637
|
-
isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(
|
|
637
|
+
isMissing && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-white/60", children: label(chunkYF2BQIW3_js.mediaFallbackLabelKey(visual, element.mediaType)) })
|
|
638
638
|
]
|
|
639
639
|
}
|
|
640
640
|
);
|
|
@@ -651,17 +651,17 @@ function Placeholder({
|
|
|
651
651
|
"div",
|
|
652
652
|
{
|
|
653
653
|
className: `w-full h-full flex flex-col items-center justify-center gap-1 pointer-events-none rounded ${isMissing ? "bg-black/30 border border-dashed border-white/20" : element.mediaType === "audio" ? "bg-black/10" : "bg-black/20"}`,
|
|
654
|
-
...{ [
|
|
654
|
+
...{ [chunkYF2BQIW3_js.MEDIA_CHROME_ATTRIBUTE]: visual.placeholder },
|
|
655
655
|
children: [
|
|
656
656
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
657
657
|
FallbackIcon,
|
|
658
658
|
{
|
|
659
|
-
paths:
|
|
659
|
+
paths: chunkYF2BQIW3_js.mediaFallbackIcon(visual, element.mediaType),
|
|
660
660
|
size: isMissing ? 36 : element.mediaType === "audio" ? 24 : 32,
|
|
661
661
|
className: isMissing ? "text-white/50" : "text-white/70"
|
|
662
662
|
}
|
|
663
663
|
),
|
|
664
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(
|
|
664
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[10px] ${isMissing ? "text-white/50" : "text-white/70"}`, children: label(chunkYF2BQIW3_js.mediaFallbackLabelKey(visual, element.mediaType)) })
|
|
665
665
|
]
|
|
666
666
|
}
|
|
667
667
|
);
|
|
@@ -671,7 +671,7 @@ function renderMediaFallback({
|
|
|
671
671
|
posterUrl,
|
|
672
672
|
surface
|
|
673
673
|
}) {
|
|
674
|
-
const visual =
|
|
674
|
+
const visual = chunkYF2BQIW3_js.mediaFallbackVisual(surface, {
|
|
675
675
|
hasPoster: Boolean(posterUrl),
|
|
676
676
|
missing: element.mediaMissing === true
|
|
677
677
|
});
|
|
@@ -681,9 +681,9 @@ function renderMediaFallback({
|
|
|
681
681
|
"img",
|
|
682
682
|
{
|
|
683
683
|
src: posterUrl,
|
|
684
|
-
alt: visual.dimPoster ?
|
|
684
|
+
alt: visual.dimPoster ? chunkLTBTG2QB_js.translationsEn["pptx.media.posterAlt"] : chunkLTBTG2QB_js.translationsEn["pptx.media.videoPosterAlt"],
|
|
685
685
|
className: `w-full h-full${visual.dimPoster ? " opacity-50" : ""}`,
|
|
686
|
-
style:
|
|
686
|
+
style: chunkYF2BQIW3_js.getImageFitStyle(element)
|
|
687
687
|
}
|
|
688
688
|
),
|
|
689
689
|
/* @__PURE__ */ jsxRuntime.jsx(Badge, { visual, element })
|
|
@@ -693,7 +693,7 @@ function renderMediaFallback({
|
|
|
693
693
|
}
|
|
694
694
|
function renderMediaElement(element, mediaDataUrls, options) {
|
|
695
695
|
if (element.type !== "media") {
|
|
696
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children:
|
|
696
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkLTBTG2QB_js.translationsEn["pptx.media.title"] });
|
|
697
697
|
}
|
|
698
698
|
const mediaType = element.mediaType;
|
|
699
699
|
const mediaPath = element.mediaPath;
|
|
@@ -701,7 +701,7 @@ function renderMediaElement(element, mediaDataUrls, options) {
|
|
|
701
701
|
const dataUrl = element.mediaData ?? (mediaPath ? mediaDataUrls.get(mediaPath) : void 0);
|
|
702
702
|
const trimFragment = buildTrimFragment(element);
|
|
703
703
|
const posterUrl = element.posterFrameData ?? void 0;
|
|
704
|
-
const shouldLoop =
|
|
704
|
+
const shouldLoop = chunkYF2BQIW3_js.mediaPlaybackAttributes(element).loop;
|
|
705
705
|
const shouldAutoPlay = options?.autoPlay === true || element.autoPlay === true;
|
|
706
706
|
const isFullScreen = options?.fullScreen === true;
|
|
707
707
|
const isPresentationMode = options?.isPresentationMode === true;
|
|
@@ -714,17 +714,17 @@ function renderMediaElement(element, mediaDataUrls, options) {
|
|
|
714
714
|
return renderMediaFallback({ element, posterUrl, surface });
|
|
715
715
|
}
|
|
716
716
|
if (mediaType === "video") {
|
|
717
|
-
const onlineVideo =
|
|
717
|
+
const onlineVideo = chunkYF2BQIW3_js.getOnlineVideoEmbed(element);
|
|
718
718
|
if (onlineVideo) {
|
|
719
719
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
720
720
|
"iframe",
|
|
721
721
|
{
|
|
722
722
|
src: onlineVideo.embedUrl,
|
|
723
|
-
title:
|
|
723
|
+
title: chunkLTBTG2QB_js.translationsEn["pptx.media.onlineVideoTitle"],
|
|
724
724
|
className: "w-full h-full border-0 pointer-events-auto",
|
|
725
|
-
allow:
|
|
725
|
+
allow: chunkYF2BQIW3_js.ONLINE_VIDEO_IFRAME_ALLOW,
|
|
726
726
|
allowFullScreen: true,
|
|
727
|
-
sandbox:
|
|
727
|
+
sandbox: chunkYF2BQIW3_js.ONLINE_VIDEO_IFRAME_SANDBOX
|
|
728
728
|
}
|
|
729
729
|
);
|
|
730
730
|
}
|
|
@@ -793,32 +793,32 @@ function renderMediaElement(element, mediaDataUrls, options) {
|
|
|
793
793
|
if (surface.presenting || surface.preview) {
|
|
794
794
|
return null;
|
|
795
795
|
}
|
|
796
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children:
|
|
796
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkLTBTG2QB_js.translationsEn["pptx.media.title"] });
|
|
797
797
|
}
|
|
798
798
|
|
|
799
799
|
// src/viewer/utils/text-utils.tsx
|
|
800
800
|
function getTextStyleForElement(element, fallbackColor) {
|
|
801
|
-
return
|
|
801
|
+
return chunkYF2BQIW3_js.buildTextBlockStyle(element, { fallbackColor });
|
|
802
802
|
}
|
|
803
803
|
|
|
804
804
|
// src/viewer/utils/text-layout.tsx
|
|
805
805
|
function getTextLayoutStyle(element) {
|
|
806
|
-
if (!
|
|
806
|
+
if (!chunkYF2BQIW3_js.hasTextProperties(element)) {
|
|
807
807
|
return {};
|
|
808
808
|
}
|
|
809
|
-
const writingMode =
|
|
810
|
-
const textOrientation =
|
|
811
|
-
const verticalDirection =
|
|
809
|
+
const writingMode = chunkYF2BQIW3_js.toCssWritingMode(element.textStyle?.textDirection);
|
|
810
|
+
const textOrientation = chunkYF2BQIW3_js.toCssTextOrientation(element.textStyle?.textDirection);
|
|
811
|
+
const verticalDirection = chunkYF2BQIW3_js.toCssVerticalDirection(element.textStyle?.textDirection);
|
|
812
812
|
const textWrapNone = element.textStyle?.textWrap === "none";
|
|
813
813
|
const shapeAutoFitTextBox = element.textStyle?.autoFitMode === "shrink" && (element.type === "text" || element.locks?.txBox === true);
|
|
814
|
-
const hasParagraphIndents =
|
|
814
|
+
const hasParagraphIndents = chunkYF2BQIW3_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
|
|
815
815
|
const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
|
|
816
816
|
const paragraphIndent = element.textStyle?.paragraphIndent;
|
|
817
817
|
const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
|
|
818
818
|
const textIndent = !hasParagraphIndents && typeof paragraphIndent === "number" && paragraphIndent !== 0 ? paragraphIndent : void 0;
|
|
819
819
|
const bodyTop = element.textStyle?.bodyInsetTop ?? DEFAULT_BODY_INSET_TB_PX;
|
|
820
820
|
const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
|
|
821
|
-
const bodyLayoutStyle =
|
|
821
|
+
const bodyLayoutStyle = chunkYF2BQIW3_js.buildTextBodyLayoutStyle(element);
|
|
822
822
|
return {
|
|
823
823
|
...bodyLayoutStyle,
|
|
824
824
|
// Body inset only. Paragraph spacing (spcBef/spcAft) is applied
|
|
@@ -848,7 +848,7 @@ function getTextLayoutStyle(element) {
|
|
|
848
848
|
|
|
849
849
|
// src/viewer/utils/text-effects.tsx
|
|
850
850
|
function buildTextBody3DSceneStyle2(textStyle, elementSize) {
|
|
851
|
-
return
|
|
851
|
+
return chunkYF2BQIW3_js.buildTextBody3DSceneStyle(textStyle, elementSize);
|
|
852
852
|
}
|
|
853
853
|
|
|
854
854
|
// src/viewer/utils/text-warp-css.tsx
|
|
@@ -1033,13 +1033,13 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
|
|
|
1033
1033
|
if (!subElementAnimStates || subElementAnimStates.size === 0) {
|
|
1034
1034
|
return renderedSegments;
|
|
1035
1035
|
}
|
|
1036
|
-
const paraKey = `${elementId}${
|
|
1036
|
+
const paraKey = `${elementId}${chunkYF2BQIW3_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
|
|
1037
1037
|
const paraState = subElementAnimStates.get(paraKey);
|
|
1038
1038
|
if (paraState) {
|
|
1039
1039
|
const style = buildAnimStyle(paraState);
|
|
1040
1040
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
|
|
1041
1041
|
}
|
|
1042
|
-
const spec =
|
|
1042
|
+
const spec = chunkYF2BQIW3_js.buildTextBuildSpec(
|
|
1043
1043
|
elementId,
|
|
1044
1044
|
paraIndex,
|
|
1045
1045
|
paraRuns.map((run) => ({ text: run.text, style: run })),
|
|
@@ -1051,13 +1051,13 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
|
|
|
1051
1051
|
return spec.spans.map((span, index) => {
|
|
1052
1052
|
const content = span.style && renderPiece ? renderPiece(span.style, span.text, String(index)) : span.text;
|
|
1053
1053
|
if (!span.animId) {
|
|
1054
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1054
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React8__default.default.Fragment, { children: content }, `ws-${index}`);
|
|
1055
1055
|
}
|
|
1056
1056
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1057
1057
|
"span",
|
|
1058
1058
|
{
|
|
1059
1059
|
"data-anim-id": span.animId,
|
|
1060
|
-
style:
|
|
1060
|
+
style: chunkYF2BQIW3_js.textBuildSpanStyle(span),
|
|
1061
1061
|
children: content
|
|
1062
1062
|
},
|
|
1063
1063
|
span.animId
|
|
@@ -1068,18 +1068,18 @@ function renderUnderlineWords(text, isUnderlineWords, wordDecoration, metric, ke
|
|
|
1068
1068
|
if (!isUnderlineWords || !text) {
|
|
1069
1069
|
return inner(text, keyPrefix, metric);
|
|
1070
1070
|
}
|
|
1071
|
-
const pieces =
|
|
1071
|
+
const pieces = chunkYF2BQIW3_js.splitWordsForUnderline(text);
|
|
1072
1072
|
if (pieces.length === 0) {
|
|
1073
1073
|
return inner(text, keyPrefix, metric);
|
|
1074
1074
|
}
|
|
1075
1075
|
const gapMetric = metric ? {
|
|
1076
1076
|
...metric,
|
|
1077
|
-
nestedStyle: metric.nestedStyle ?
|
|
1077
|
+
nestedStyle: metric.nestedStyle ? chunkYF2BQIW3_js.stripUnderlineDecoration(metric.nestedStyle) : void 0
|
|
1078
1078
|
} : void 0;
|
|
1079
1079
|
return pieces.map((piece, i) => {
|
|
1080
1080
|
const key = `${keyPrefix}-u${i}`;
|
|
1081
1081
|
if (!piece.underline) {
|
|
1082
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1082
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React8__default.default.Fragment, { children: inner(piece.text, key, gapMetric) }, key);
|
|
1083
1083
|
}
|
|
1084
1084
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: wordDecoration, children: inner(piece.text, key, metric) }, key);
|
|
1085
1085
|
});
|
|
@@ -1107,7 +1107,7 @@ function makeSegmentPieceRenderer(needsScriptFonts, scriptFonts, baseFontFamily,
|
|
|
1107
1107
|
);
|
|
1108
1108
|
}
|
|
1109
1109
|
function renderTabbedLine(line, ctx, keyPrefix, renderPiece, nestedStyle, underlineWords = false) {
|
|
1110
|
-
const [lineLayout] =
|
|
1110
|
+
const [lineLayout] = chunkYF2BQIW3_js.buildRunTabLines(
|
|
1111
1111
|
line,
|
|
1112
1112
|
ctx,
|
|
1113
1113
|
nestedStyle,
|
|
@@ -1116,17 +1116,44 @@ function renderTabbedLine(line, ctx, keyPrefix, renderPiece, nestedStyle, underl
|
|
|
1116
1116
|
);
|
|
1117
1117
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block", whiteSpace: "nowrap" }, children: lineLayout.pieces.map((piece, i) => {
|
|
1118
1118
|
const key = `${keyPrefix}-tab-${i}`;
|
|
1119
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1119
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React8__default.default.Fragment, { children: [
|
|
1120
1120
|
piece.leaderStyle ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", style: piece.leaderStyle, children: piece.leaderText }) : null,
|
|
1121
1121
|
piece.words ? piece.words.map((word, w) => /* @__PURE__ */ jsxRuntime.jsx("span", { style: word.style, children: renderPiece(word.text, `${key}-w${w}`) }, `${key}-w${w}`)) : /* @__PURE__ */ jsxRuntime.jsx("span", { style: piece.style, children: renderPiece(piece.text, key) })
|
|
1122
1122
|
] }, key);
|
|
1123
1123
|
}) });
|
|
1124
1124
|
}
|
|
1125
|
+
function renderEastAsianPieces(text, metric, keyPrefix, inner, baseStyle) {
|
|
1126
|
+
const parts = chunkYF2BQIW3_js.splitEastAsianBreaks(text, metric.eastAsian, metric.font);
|
|
1127
|
+
if (parts.length === 1 && !parts[0].style) {
|
|
1128
|
+
return inner(parts[0].text, keyPrefix);
|
|
1129
|
+
}
|
|
1130
|
+
return parts.map((part, i) => {
|
|
1131
|
+
const key = `${keyPrefix}-e${i}`;
|
|
1132
|
+
return part.style ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: { ...baseStyle ?? metric.nestedStyle, ...part.style }, children: inner(part.text, key) }, key) : /* @__PURE__ */ jsxRuntime.jsx(React8__default.default.Fragment, { children: inner(part.text, key) }, key);
|
|
1133
|
+
});
|
|
1134
|
+
}
|
|
1135
|
+
function renderMetricPieces(text, metric, keyPrefix, inner) {
|
|
1136
|
+
if (!metric || !text) {
|
|
1137
|
+
return inner(text, keyPrefix);
|
|
1138
|
+
}
|
|
1139
|
+
const pieces = chunkYF2BQIW3_js.splitRunForMetrics(text, metric.font);
|
|
1140
|
+
if (pieces.length <= 1) {
|
|
1141
|
+
return renderEastAsianPieces(text, metric, keyPrefix, inner, void 0);
|
|
1142
|
+
}
|
|
1143
|
+
return pieces.map((piece, i) => {
|
|
1144
|
+
const key = `${keyPrefix}-w${i}`;
|
|
1145
|
+
const style = {
|
|
1146
|
+
...metric.nestedStyle,
|
|
1147
|
+
letterSpacing: chunkYF2BQIW3_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
|
|
1148
|
+
};
|
|
1149
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { style, children: renderEastAsianPieces(piece.text, metric, key, inner, style) }, key);
|
|
1150
|
+
});
|
|
1151
|
+
}
|
|
1125
1152
|
function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFamily, keyPrefix, nestedStyle) {
|
|
1126
1153
|
if (!needsScriptFonts || !text) {
|
|
1127
1154
|
return text;
|
|
1128
1155
|
}
|
|
1129
|
-
const pieces =
|
|
1156
|
+
const pieces = chunkYF2BQIW3_js.splitRunByScriptFont(
|
|
1130
1157
|
text,
|
|
1131
1158
|
scriptFonts,
|
|
1132
1159
|
baseFontFamily,
|
|
@@ -1136,29 +1163,9 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
|
|
|
1136
1163
|
return text;
|
|
1137
1164
|
}
|
|
1138
1165
|
return pieces.map(
|
|
1139
|
-
(piece, i) => piece.style ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: piece.style, children: piece.text }, `${keyPrefix}-r${i}`) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1166
|
+
(piece, i) => piece.style ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: piece.style, children: piece.text }, `${keyPrefix}-r${i}`) : /* @__PURE__ */ jsxRuntime.jsx(React8__default.default.Fragment, { children: piece.text }, `${keyPrefix}-r${i}`)
|
|
1140
1167
|
);
|
|
1141
1168
|
}
|
|
1142
|
-
function renderMetricPieces(text, metric, keyPrefix, inner) {
|
|
1143
|
-
if (!metric || !text) {
|
|
1144
|
-
return inner(text, keyPrefix);
|
|
1145
|
-
}
|
|
1146
|
-
const pieces = chunkAQIXKTAT_js.splitRunForMetrics(text, metric.font);
|
|
1147
|
-
if (pieces.length <= 1) {
|
|
1148
|
-
return inner(text, keyPrefix);
|
|
1149
|
-
}
|
|
1150
|
-
return pieces.map((piece, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1151
|
-
"span",
|
|
1152
|
-
{
|
|
1153
|
-
style: {
|
|
1154
|
-
...metric.nestedStyle,
|
|
1155
|
-
letterSpacing: chunkAQIXKTAT_js.pieceLetterSpacing(metric.authoredPx, piece.tracking)
|
|
1156
|
-
},
|
|
1157
|
-
children: inner(piece.text, `${keyPrefix}-w${i}`)
|
|
1158
|
-
},
|
|
1159
|
-
`${keyPrefix}-w${i}`
|
|
1160
|
-
));
|
|
1161
|
-
}
|
|
1162
1169
|
function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsScriptFonts, scriptFonts, baseFontFamily, findHighlights, tabContext, metric, isUnderlineWords = false, wordDecoration) {
|
|
1163
1170
|
const segHl = findHighlights?.get(segmentIndex);
|
|
1164
1171
|
const renderLeaf = makeSegmentPieceRenderer(
|
|
@@ -1172,7 +1179,7 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
|
|
|
1172
1179
|
if (!segHl || segHl.length === 0) {
|
|
1173
1180
|
return lines.map((line, lineIndex) => {
|
|
1174
1181
|
const lineKey = `${elementId}-seg-${segmentIndex}-line-${lineIndex}`;
|
|
1175
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1182
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React8__default.default.Fragment, { children: [
|
|
1176
1183
|
tabContext && line.includes(" ") ? renderTabbedLine(
|
|
1177
1184
|
line,
|
|
1178
1185
|
tabContext,
|
|
@@ -1224,12 +1231,12 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
|
|
|
1224
1231
|
children: renderLeaf(chunk.text, chunkKey)
|
|
1225
1232
|
},
|
|
1226
1233
|
chunkKey
|
|
1227
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1234
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(React8__default.default.Fragment, { children: renderLeaf(chunk.text, chunkKey) }, chunkKey);
|
|
1228
1235
|
});
|
|
1229
1236
|
}
|
|
1230
1237
|
function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber, fontSize) {
|
|
1231
|
-
const mathml =
|
|
1232
|
-
const safeMathml = mathml ?
|
|
1238
|
+
const mathml = chunkYF2BQIW3_js.convertOmmlToMathMl(equationXml);
|
|
1239
|
+
const safeMathml = mathml ? chunkYF2BQIW3_js.sanitizeMathMl(mathml) : "";
|
|
1233
1240
|
const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1234
1241
|
"span",
|
|
1235
1242
|
{
|
|
@@ -1239,7 +1246,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
|
|
|
1239
1246
|
},
|
|
1240
1247
|
dangerouslySetInnerHTML: { __html: safeMathml }
|
|
1241
1248
|
}
|
|
1242
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-1 py-0.5 rounded text-xs bg-gray-200/20 text-gray-400 italic", children:
|
|
1249
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block px-1 py-0.5 rounded text-xs bg-gray-200/20 text-gray-400 italic", children: chunkLTBTG2QB_js.translationsEn["pptx.textSegment.equationFallback"] });
|
|
1243
1250
|
if (equationNumber) {
|
|
1244
1251
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1245
1252
|
"span",
|
|
@@ -1369,7 +1376,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1369
1376
|
const segmentStyle = segment?.style ?? {};
|
|
1370
1377
|
const textValue = run.text;
|
|
1371
1378
|
const lines = textValue.split("\n");
|
|
1372
|
-
const resolvedSegmentColor =
|
|
1379
|
+
const resolvedSegmentColor = chunkYF2BQIW3_js.normalizeHexColor(
|
|
1373
1380
|
segmentStyle.color || element.textStyle?.color,
|
|
1374
1381
|
run.hyperlink ? HYPERLINK_COLOR : fallbackColor
|
|
1375
1382
|
);
|
|
@@ -1377,42 +1384,47 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1377
1384
|
const baselineFraction = rawBaseline === 0 ? 0 : Math.abs(rawBaseline) >= 1e3 ? rawBaseline / 1e5 : rawBaseline / 100;
|
|
1378
1385
|
const baselineFontScale = baselineFraction !== 0 ? BASELINE_FONT_SCALE : 1;
|
|
1379
1386
|
const rawFontSize = segmentStyle.fontSize || element.textStyle?.fontSize || DEFAULT_TEXT_FONT_SIZE;
|
|
1380
|
-
const baseFontSize =
|
|
1387
|
+
const baseFontSize = chunkYF2BQIW3_js.scaleFontSizeForAutoFit(
|
|
1381
1388
|
rawFontSize,
|
|
1382
|
-
|
|
1389
|
+
chunkYF2BQIW3_js.resolveAutoFitFontScale(element.textStyle)
|
|
1383
1390
|
);
|
|
1384
1391
|
const baselineShift = baselineFraction !== 0 ? `${baselineFraction * baseFontSize}px` : void 0;
|
|
1385
|
-
const fontKerning =
|
|
1392
|
+
const fontKerning = chunkYF2BQIW3_js.resolveFontKerning(segmentStyle.kerning, baseFontSize);
|
|
1386
1393
|
const scriptFallbackWins = Boolean(
|
|
1387
1394
|
segmentStyle.scriptFallbackFont && segmentStyle.fontFamilyIsCascadeDefault
|
|
1388
1395
|
);
|
|
1389
1396
|
const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
|
|
1390
|
-
const baseFontFamily = scriptFallbackWins ?
|
|
1397
|
+
const baseFontFamily = scriptFallbackWins ? chunkYF2BQIW3_js.getSubstituteFontFamily(segmentStyle.scriptFallbackFont) : rawFontFamily ? chunkYF2BQIW3_js.getSubstituteFontFamily(
|
|
1391
1398
|
rawFontFamily,
|
|
1392
|
-
|
|
1399
|
+
chunkYF2BQIW3_js.parsePanoseString(segmentStyle.latinFontPanose ?? element.textStyle?.latinFontPanose)
|
|
1393
1400
|
) : DEFAULT_FONT_FAMILY2;
|
|
1394
|
-
const scriptFonts =
|
|
1395
|
-
const needsScriptFonts =
|
|
1396
|
-
const authoredLetterSpacing =
|
|
1401
|
+
const scriptFonts = chunkYF2BQIW3_js.resolveScriptFontSet(segmentStyle, element.textStyle, baseFontFamily);
|
|
1402
|
+
const needsScriptFonts = chunkYF2BQIW3_js.hasDistinctScriptFonts(scriptFonts);
|
|
1403
|
+
const authoredLetterSpacing = chunkYF2BQIW3_js.authoredLetterSpacingPx(segmentStyle);
|
|
1397
1404
|
const metricFont = {
|
|
1398
1405
|
fontFamily: baseFontFamily,
|
|
1399
1406
|
fontSizePx: baseFontSize * baselineFontScale,
|
|
1400
1407
|
bold: Boolean(segmentStyle.bold),
|
|
1401
1408
|
italic: Boolean(segmentStyle.italic)
|
|
1402
1409
|
};
|
|
1403
|
-
const nestedStyle =
|
|
1404
|
-
const metricContext = {
|
|
1410
|
+
const nestedStyle = chunkYF2BQIW3_js.nestedTextDecorationStyle(run.style);
|
|
1411
|
+
const metricContext = {
|
|
1412
|
+
font: metricFont,
|
|
1413
|
+
authoredPx: authoredLetterSpacing,
|
|
1414
|
+
nestedStyle,
|
|
1415
|
+
eastAsian: ctx.eastAsianBreaks
|
|
1416
|
+
};
|
|
1405
1417
|
const spanStyle = { ...run.style };
|
|
1406
1418
|
spanStyle.color = resolvedSegmentColor;
|
|
1407
1419
|
spanStyle.fontSize = baseFontSize * baselineFontScale;
|
|
1408
1420
|
spanStyle.fontFamily = baseFontFamily;
|
|
1409
1421
|
spanStyle.verticalAlign = baselineShift;
|
|
1410
1422
|
spanStyle.fontKerning = fontKerning;
|
|
1411
|
-
spanStyle.letterSpacing =
|
|
1423
|
+
spanStyle.letterSpacing = chunkYF2BQIW3_js.pieceLetterSpacing(
|
|
1412
1424
|
authoredLetterSpacing,
|
|
1413
|
-
|
|
1425
|
+
chunkYF2BQIW3_js.resolveMetricTrackingPx(textValue, metricFont)
|
|
1414
1426
|
);
|
|
1415
|
-
const hollow =
|
|
1427
|
+
const hollow = chunkYF2BQIW3_js.hollowTextFillStyle(segmentStyle, {
|
|
1416
1428
|
color: resolvedSegmentColor,
|
|
1417
1429
|
textStroke: typeof spanStyle.WebkitTextStroke === "string" ? spanStyle.WebkitTextStroke : void 0
|
|
1418
1430
|
});
|
|
@@ -1424,10 +1436,10 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1424
1436
|
spanStyle.direction = runRtl ? "rtl" : "ltr";
|
|
1425
1437
|
spanStyle.unicodeBidi = runRtl !== ctx.paragraphRtl ? "bidi-override" : "embed";
|
|
1426
1438
|
}
|
|
1427
|
-
const isUnderlineWords =
|
|
1439
|
+
const isUnderlineWords = chunkYF2BQIW3_js.splitsUnderlineIntoWords(segmentStyle);
|
|
1428
1440
|
const wordDecoration = isUnderlineWords ? nestedStyle ?? run.underlineWordPieces?.find((piece) => piece.style)?.style : void 0;
|
|
1429
1441
|
if (isUnderlineWords) {
|
|
1430
|
-
const stripped =
|
|
1442
|
+
const stripped = chunkYF2BQIW3_js.stripUnderlineDecoration(spanStyle);
|
|
1431
1443
|
spanStyle.textDecoration = stripped.textDecoration;
|
|
1432
1444
|
delete spanStyle.textDecorationStyle;
|
|
1433
1445
|
delete spanStyle.textDecorationThickness;
|
|
@@ -1443,7 +1455,7 @@ function renderParagraphRun(run, segment, ctx, keySuffix = "") {
|
|
|
1443
1455
|
scriptFonts,
|
|
1444
1456
|
baseFontFamily,
|
|
1445
1457
|
findHighlights,
|
|
1446
|
-
|
|
1458
|
+
chunkYF2BQIW3_js.buildTabContext(
|
|
1447
1459
|
element.textStyle?.tabStops,
|
|
1448
1460
|
element.textStyle?.defaultTabSize,
|
|
1449
1461
|
baseFontSize,
|
|
@@ -1476,29 +1488,29 @@ function renderSeededListRun(seed, runs, segments, context) {
|
|
|
1476
1488
|
const segment = sourceRun ? segments[seed.segmentIndex] : { text: seed.text, style: seed.style };
|
|
1477
1489
|
const resolvedSegment = {
|
|
1478
1490
|
...segment,
|
|
1479
|
-
style:
|
|
1491
|
+
style: chunkYF2BQIW3_js.withInlineListDecorationDefaults(segment.style, context.element.textStyle)
|
|
1480
1492
|
};
|
|
1481
|
-
const decorationCss =
|
|
1493
|
+
const decorationCss = chunkYF2BQIW3_js.segmentStyleToCss(
|
|
1482
1494
|
resolvedSegment,
|
|
1483
|
-
|
|
1495
|
+
chunkYF2BQIW3_js.resolveAutoFitFontScale(context.element.textStyle)
|
|
1484
1496
|
);
|
|
1485
|
-
|
|
1486
|
-
const run = sourceRun ? { ...sourceRun, style: { ...sourceRun.style, ...
|
|
1497
|
+
chunkYF2BQIW3_js.applyUnderlineVariant(decorationCss, resolvedSegment);
|
|
1498
|
+
const run = sourceRun ? { ...sourceRun, style: { ...sourceRun.style, ...chunkYF2BQIW3_js.nestedTextDecorationStyle(decorationCss) } } : {
|
|
1487
1499
|
text: seed.text,
|
|
1488
1500
|
style: decorationCss,
|
|
1489
1501
|
segmentIndex: seed.segmentIndex
|
|
1490
1502
|
};
|
|
1491
1503
|
const rendered = renderParagraphRun(run, resolvedSegment, context);
|
|
1492
|
-
if (!
|
|
1504
|
+
if (!React8__default.default.isValidElement(rendered)) {
|
|
1493
1505
|
return rendered;
|
|
1494
1506
|
}
|
|
1495
|
-
return
|
|
1507
|
+
return React8__default.default.cloneElement(rendered, {
|
|
1496
1508
|
"data-pptx-list-run": seed.token,
|
|
1497
1509
|
...seed.text === "" ? { children: /* @__PURE__ */ jsxRuntime.jsx("br", {}) } : {}
|
|
1498
1510
|
});
|
|
1499
1511
|
}
|
|
1500
1512
|
function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick, placeholderPrompt, inlineListSeed) {
|
|
1501
|
-
if (!
|
|
1513
|
+
if (!chunkYF2BQIW3_js.hasTextProperties(element)) {
|
|
1502
1514
|
return emptyFallback || null;
|
|
1503
1515
|
}
|
|
1504
1516
|
const segments = segmentOverrides ?? element.textSegments;
|
|
@@ -1508,12 +1520,10 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
1508
1520
|
}
|
|
1509
1521
|
return element.text || emptyFallback || "";
|
|
1510
1522
|
}
|
|
1511
|
-
const paragraphs =
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
inlineListSeed ? { preserveTrailingEmpty: true } : void 0
|
|
1516
|
-
);
|
|
1523
|
+
const paragraphs = chunkYF2BQIW3_js.buildParagraphs(element, fieldContext, segmentOverrides, {
|
|
1524
|
+
preserveTrailingEmpty: inlineListSeed ? true : void 0,
|
|
1525
|
+
eastAsianRunPieces: false
|
|
1526
|
+
});
|
|
1517
1527
|
const ctx = {
|
|
1518
1528
|
element,
|
|
1519
1529
|
fallbackColor,
|
|
@@ -1547,7 +1557,11 @@ function joinRunsBySegment(runs) {
|
|
|
1547
1557
|
}
|
|
1548
1558
|
function renderParagraph(para, paraIndex, paraCount, segments, ctx, subElementAnimStates, inlineListSeed) {
|
|
1549
1559
|
const element = ctx.element;
|
|
1550
|
-
const runCtx = {
|
|
1560
|
+
const runCtx = {
|
|
1561
|
+
...ctx,
|
|
1562
|
+
paragraphRtl: para.rtl,
|
|
1563
|
+
eastAsianBreaks: para.eastAsianBreaks
|
|
1564
|
+
};
|
|
1551
1565
|
const runs = joinRunsBySegment(para.runs);
|
|
1552
1566
|
const listParagraph = inlineListSeed?.paragraphs[paraIndex];
|
|
1553
1567
|
const renderedRuns = listParagraph ? listParagraph.runs.map((run) => renderSeededListRun(run, runs, segments, runCtx)) : runs.map((run) => renderParagraphRun(run, segments[run.segmentIndex ?? -1], runCtx));
|
|
@@ -1597,7 +1611,7 @@ function renderParagraph(para, paraIndex, paraCount, segments, ctx, subElementAn
|
|
|
1597
1611
|
);
|
|
1598
1612
|
const needsWrapper = Boolean(listParagraph) || Object.keys(paraStyle).length > 0 || marker !== null;
|
|
1599
1613
|
if (!needsWrapper) {
|
|
1600
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1614
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React8__default.default.Fragment, { children: [
|
|
1601
1615
|
wrappedContent,
|
|
1602
1616
|
paraIndex < paraCount - 1 ? /* @__PURE__ */ jsxRuntime.jsx("br", {}) : null
|
|
1603
1617
|
] }, `${element.id}-para-${paraIndex}`);
|
|
@@ -1654,13 +1668,13 @@ function renderBulletMarker(para, paraIndex, elementId) {
|
|
|
1654
1668
|
);
|
|
1655
1669
|
}
|
|
1656
1670
|
function getDuotoneColors(element) {
|
|
1657
|
-
if (!
|
|
1671
|
+
if (!chunkYF2BQIW3_js.isImageLikeElement(element)) {
|
|
1658
1672
|
return void 0;
|
|
1659
1673
|
}
|
|
1660
1674
|
return element.imageEffects?.duotone;
|
|
1661
1675
|
}
|
|
1662
1676
|
function buildLineShadowCss(element) {
|
|
1663
|
-
if (!
|
|
1677
|
+
if (!chunkYF2BQIW3_js.hasShapeProperties(element)) {
|
|
1664
1678
|
return void 0;
|
|
1665
1679
|
}
|
|
1666
1680
|
const ss = element.shapeStyle;
|
|
@@ -1671,13 +1685,13 @@ function buildLineShadowCss(element) {
|
|
|
1671
1685
|
const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
|
|
1672
1686
|
const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
|
|
1673
1687
|
const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
|
|
1674
|
-
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${
|
|
1675
|
-
|
|
1688
|
+
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkYF2BQIW3_js.colorWithOpacity(
|
|
1689
|
+
chunkYF2BQIW3_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
|
|
1676
1690
|
opacity
|
|
1677
1691
|
)}`;
|
|
1678
1692
|
}
|
|
1679
1693
|
function buildLineGlowFilter(element) {
|
|
1680
|
-
if (!
|
|
1694
|
+
if (!chunkYF2BQIW3_js.hasShapeProperties(element)) {
|
|
1681
1695
|
return void 0;
|
|
1682
1696
|
}
|
|
1683
1697
|
const ss = element.shapeStyle;
|
|
@@ -1686,22 +1700,22 @@ function buildLineGlowFilter(element) {
|
|
|
1686
1700
|
}
|
|
1687
1701
|
const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
|
|
1688
1702
|
const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
|
|
1689
|
-
const glowCol =
|
|
1703
|
+
const glowCol = chunkYF2BQIW3_js.colorWithOpacity(chunkYF2BQIW3_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
|
|
1690
1704
|
return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
|
|
1691
1705
|
}
|
|
1692
1706
|
function getDagDuotoneFilterId(elementId) {
|
|
1693
1707
|
return `dag-duotone-${elementId}`;
|
|
1694
1708
|
}
|
|
1695
1709
|
function hasDagDuotoneEffect(element) {
|
|
1696
|
-
if (!
|
|
1710
|
+
if (!chunkYF2BQIW3_js.hasShapeProperties(element)) {
|
|
1697
1711
|
return false;
|
|
1698
1712
|
}
|
|
1699
1713
|
return Boolean(element.shapeStyle?.dagDuotone);
|
|
1700
1714
|
}
|
|
1701
1715
|
function renderDagDuotoneSvgFilter(elementId, color1, color2) {
|
|
1702
1716
|
const filterId = getDagDuotoneFilterId(elementId);
|
|
1703
|
-
const c1 =
|
|
1704
|
-
const c2 =
|
|
1717
|
+
const c1 = chunkYF2BQIW3_js.hexToRgbUnit(color1);
|
|
1718
|
+
const c2 = chunkYF2BQIW3_js.hexToRgbUnit(color2);
|
|
1705
1719
|
const grayscaleMatrix = [
|
|
1706
1720
|
0.2126,
|
|
1707
1721
|
0.7152,
|
|
@@ -1745,7 +1759,7 @@ function renderDagDuotoneSvgFilter(elementId, color1, color2) {
|
|
|
1745
1759
|
|
|
1746
1760
|
// src/viewer/utils/shape-visual-3d.ts
|
|
1747
1761
|
function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
|
|
1748
|
-
return
|
|
1762
|
+
return chunkYF2BQIW3_js.build3DExtrusionData(
|
|
1749
1763
|
shape3d,
|
|
1750
1764
|
scene3d,
|
|
1751
1765
|
fillColor,
|
|
@@ -1754,7 +1768,7 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
|
|
|
1754
1768
|
);
|
|
1755
1769
|
}
|
|
1756
1770
|
function apply3dEffects2(base, scene3d, shape3d, fillColorFallback, elementSize, elementId) {
|
|
1757
|
-
|
|
1771
|
+
chunkYF2BQIW3_js.apply3dEffects(
|
|
1758
1772
|
base,
|
|
1759
1773
|
scene3d,
|
|
1760
1774
|
shape3d,
|
|
@@ -1769,11 +1783,11 @@ function rendersCustomVectorPath(element) {
|
|
|
1769
1783
|
return (element.type === "shape" || element.type === "image" || element.type === "picture") && Boolean(element.pathData) && typeof element.pathWidth === "number" && element.pathWidth > 0 && typeof element.pathHeight === "number" && element.pathHeight > 0;
|
|
1770
1784
|
}
|
|
1771
1785
|
function rendersWedgeCalloutVector(element) {
|
|
1772
|
-
return element.type === "shape" &&
|
|
1786
|
+
return element.type === "shape" && chunkYF2BQIW3_js.isWedgeCalloutPresetShape(element.shapeType);
|
|
1773
1787
|
}
|
|
1774
1788
|
function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _strokeColor, animatesFill, animatesStroke, parentGroupFill) {
|
|
1775
1789
|
if (element.type === "group") {
|
|
1776
|
-
const fx2 =
|
|
1790
|
+
const fx2 = chunkYF2BQIW3_js.getComputedEffectStyle(element);
|
|
1777
1791
|
const groupStyle = {};
|
|
1778
1792
|
if (fx2.filter) {
|
|
1779
1793
|
groupStyle.filter = fx2.filter;
|
|
@@ -1783,13 +1797,13 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
1783
1797
|
}
|
|
1784
1798
|
return groupStyle;
|
|
1785
1799
|
}
|
|
1786
|
-
if (!
|
|
1800
|
+
if (!chunkYF2BQIW3_js.hasShapeProperties(element)) {
|
|
1787
1801
|
return {};
|
|
1788
1802
|
}
|
|
1789
1803
|
const ss = element.shapeStyle;
|
|
1790
|
-
const fill = animatesFill ? void 0 :
|
|
1791
|
-
const fx =
|
|
1792
|
-
const stroke =
|
|
1804
|
+
const fill = animatesFill ? void 0 : chunkYF2BQIW3_js.getComputedFillStyle(element, parentGroupFill);
|
|
1805
|
+
const fx = chunkYF2BQIW3_js.getComputedEffectStyle(element);
|
|
1806
|
+
const stroke = chunkYF2BQIW3_js.getComputedStrokeStyle(element);
|
|
1793
1807
|
const base = {
|
|
1794
1808
|
// A gradient fill REPLACES the solid fill, it does not sit on top of it;
|
|
1795
1809
|
// the whole precedence lives in shared's `getComputedFillStyle`.
|
|
@@ -1828,7 +1842,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
1828
1842
|
};
|
|
1829
1843
|
Object.assign(
|
|
1830
1844
|
base,
|
|
1831
|
-
|
|
1845
|
+
chunkYF2BQIW3_js.getAnimationColorBaseStyle(element, {
|
|
1832
1846
|
animatesFill,
|
|
1833
1847
|
animatesStroke,
|
|
1834
1848
|
parentGroupFill
|
|
@@ -1850,7 +1864,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
1850
1864
|
},
|
|
1851
1865
|
element.id
|
|
1852
1866
|
);
|
|
1853
|
-
if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) ||
|
|
1867
|
+
if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || chunkYF2BQIW3_js.isStrokeOnlyPresetElement(element)) {
|
|
1854
1868
|
base.backgroundColor = "transparent";
|
|
1855
1869
|
base.backgroundImage = void 0;
|
|
1856
1870
|
base.borderWidth = void 0;
|
|
@@ -1864,7 +1878,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
1864
1878
|
if (rendersWedgeCalloutVector(element)) {
|
|
1865
1879
|
return base;
|
|
1866
1880
|
}
|
|
1867
|
-
const geometry =
|
|
1881
|
+
const geometry = chunkYF2BQIW3_js.resolveShapeGeometry(element);
|
|
1868
1882
|
switch (geometry.kind) {
|
|
1869
1883
|
case "bare":
|
|
1870
1884
|
return { backgroundColor: "transparent", borderWidth: 0, borderStyle: "none" };
|
|
@@ -1888,7 +1902,7 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
|
|
|
1888
1902
|
}
|
|
1889
1903
|
}
|
|
1890
1904
|
function getConnectorPathGeometry2(element) {
|
|
1891
|
-
return
|
|
1905
|
+
return chunkYF2BQIW3_js.getConnectorPathGeometry(element);
|
|
1892
1906
|
}
|
|
1893
1907
|
var ARROW_SIZE_SCALE = {
|
|
1894
1908
|
sm: 0.6,
|
|
@@ -1957,11 +1971,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
|
|
|
1957
1971
|
strokePaint,
|
|
1958
1972
|
strokeWidth,
|
|
1959
1973
|
dashArray,
|
|
1960
|
-
lineCap:
|
|
1974
|
+
lineCap: chunkYF2BQIW3_js.svgLineCap(shapeStyle?.lineCap),
|
|
1961
1975
|
lineJoin,
|
|
1962
1976
|
miterLimit,
|
|
1963
|
-
offsets:
|
|
1964
|
-
widths:
|
|
1977
|
+
offsets: chunkYF2BQIW3_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
|
|
1978
|
+
widths: chunkYF2BQIW3_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
|
|
1965
1979
|
};
|
|
1966
1980
|
}
|
|
1967
1981
|
function strokeStrands(d, keyBase, ctx) {
|
|
@@ -1984,12 +1998,12 @@ function strokeStrands(d, keyBase, ctx) {
|
|
|
1984
1998
|
}
|
|
1985
1999
|
function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredPaths, shapeStyle, hasFill, fillColor, fillOpacity, strokePaint, strokeWidth, dashArray, animatesFill = false, gradient) {
|
|
1986
2000
|
const ctx = strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray);
|
|
1987
|
-
const subpaths = structuredPaths && structuredPaths.length > 0 ?
|
|
2001
|
+
const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkYF2BQIW3_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
|
|
1988
2002
|
const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
|
|
1989
|
-
const gradientPaint = gradient ?
|
|
2003
|
+
const gradientPaint = gradient ? chunkYF2BQIW3_js.svgGradientFillRef(gradient) : void 0;
|
|
1990
2004
|
const nodes = [];
|
|
1991
2005
|
if (subpaths && needsPerSubpath) {
|
|
1992
|
-
const paints =
|
|
2006
|
+
const paints = chunkYF2BQIW3_js.buildSubpathPaints(subpaths, hasFill, fillColor, fillOpacity);
|
|
1993
2007
|
paints.forEach((paint, idx) => {
|
|
1994
2008
|
if (paint.fill !== "none") {
|
|
1995
2009
|
const mode = subpaths[idx]?.fillMode;
|
|
@@ -2018,7 +2032,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
|
|
|
2018
2032
|
"path",
|
|
2019
2033
|
{
|
|
2020
2034
|
d: pathData,
|
|
2021
|
-
fill: animatesFill ? "inherit" : gradientPaint ??
|
|
2035
|
+
fill: animatesFill ? "inherit" : gradientPaint ?? chunkYF2BQIW3_js.colorWithOpacity(fillColor, fillOpacity),
|
|
2022
2036
|
stroke: "none",
|
|
2023
2037
|
vectorEffect: "non-scaling-stroke"
|
|
2024
2038
|
},
|
|
@@ -2044,14 +2058,14 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
|
|
|
2044
2058
|
);
|
|
2045
2059
|
}
|
|
2046
2060
|
function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
|
|
2047
|
-
if (!
|
|
2061
|
+
if (!chunkYF2BQIW3_js.hasShapeProperties(element)) {
|
|
2048
2062
|
return null;
|
|
2049
2063
|
}
|
|
2050
2064
|
const normalizedType = (element.shapeType || "").toLowerCase();
|
|
2051
|
-
const fillPaint = animatesFill ? "inherit" :
|
|
2052
|
-
const strokePaint = animatesStroke ? "inherit" :
|
|
2053
|
-
const dashType =
|
|
2054
|
-
const dashArray =
|
|
2065
|
+
const fillPaint = animatesFill ? "inherit" : chunkYF2BQIW3_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
|
|
2066
|
+
const strokePaint = animatesStroke ? "inherit" : chunkYF2BQIW3_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
|
|
2067
|
+
const dashType = chunkYF2BQIW3_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
|
|
2068
|
+
const dashArray = chunkYF2BQIW3_js.getSvgStrokeDasharray(
|
|
2055
2069
|
dashType,
|
|
2056
2070
|
Math.max(strokeWidth, 1),
|
|
2057
2071
|
element.shapeStyle?.customDashSegments
|
|
@@ -2132,13 +2146,13 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
2132
2146
|
// container's `background-image` is suppressed for custom geometry, so
|
|
2133
2147
|
// without this the shape fell back to the parser's representative solid
|
|
2134
2148
|
// and lost every fade (issue #132).
|
|
2135
|
-
|
|
2149
|
+
chunkYF2BQIW3_js.buildSvgGradientDef(element.shapeStyle, element.id)
|
|
2136
2150
|
);
|
|
2137
2151
|
}
|
|
2138
|
-
if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !
|
|
2152
|
+
if ((element.type === "image" || element.type === "picture") && strokeWidth > 0 && !chunkYF2BQIW3_js.buildStrokeOutline(element)) {
|
|
2139
2153
|
const width = Math.max(element.width, 1);
|
|
2140
2154
|
const height = Math.max(element.height, 1);
|
|
2141
|
-
const geometry =
|
|
2155
|
+
const geometry = chunkYF2BQIW3_js.getPresetShapeVectorGeometry(
|
|
2142
2156
|
element.shapeType || "rect",
|
|
2143
2157
|
width,
|
|
2144
2158
|
height,
|
|
@@ -2166,18 +2180,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
2166
2180
|
);
|
|
2167
2181
|
}
|
|
2168
2182
|
}
|
|
2169
|
-
if (element.type === "shape" &&
|
|
2183
|
+
if (element.type === "shape" && chunkYF2BQIW3_js.isWedgeCalloutPresetShape(element.shapeType)) {
|
|
2170
2184
|
const width = Math.max(element.width, 1);
|
|
2171
2185
|
const height = Math.max(element.height, 1);
|
|
2172
|
-
const geometry =
|
|
2186
|
+
const geometry = chunkYF2BQIW3_js.getPresetShapeVectorGeometry(
|
|
2173
2187
|
element.shapeType,
|
|
2174
2188
|
width,
|
|
2175
2189
|
height,
|
|
2176
2190
|
element.shapeAdjustments
|
|
2177
2191
|
);
|
|
2178
2192
|
if (geometry) {
|
|
2179
|
-
const gradient =
|
|
2180
|
-
const gradientPaint = gradient ?
|
|
2193
|
+
const gradient = chunkYF2BQIW3_js.buildSvgGradientDef(element.shapeStyle, element.id);
|
|
2194
|
+
const gradientPaint = gradient ? chunkYF2BQIW3_js.svgGradientFillRef(gradient) : void 0;
|
|
2181
2195
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2182
2196
|
"svg",
|
|
2183
2197
|
{
|
|
@@ -2210,18 +2224,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
2210
2224
|
);
|
|
2211
2225
|
}
|
|
2212
2226
|
}
|
|
2213
|
-
if (
|
|
2227
|
+
if (chunkYF2BQIW3_js.isCalloutShape(normalizedType)) {
|
|
2214
2228
|
const width = Math.max(element.width, 1);
|
|
2215
2229
|
const height = Math.max(element.height, 1);
|
|
2216
|
-
const geometry =
|
|
2230
|
+
const geometry = chunkYF2BQIW3_js.getCalloutLeaderLineGeometry(
|
|
2217
2231
|
normalizedType,
|
|
2218
2232
|
width,
|
|
2219
2233
|
height,
|
|
2220
2234
|
element.shapeAdjustments
|
|
2221
2235
|
);
|
|
2222
2236
|
if (geometry && geometry.points.length >= 2) {
|
|
2223
|
-
const leaderPath =
|
|
2224
|
-
const bounds =
|
|
2237
|
+
const leaderPath = chunkYF2BQIW3_js.buildCalloutLeaderLineSvgPath(geometry);
|
|
2238
|
+
const bounds = chunkYF2BQIW3_js.getCalloutViewBoxBounds(width, height, geometry);
|
|
2225
2239
|
const lineStroke = Math.max(strokeWidth, 1);
|
|
2226
2240
|
const offsetLeft = bounds.minX;
|
|
2227
2241
|
const offsetTop = bounds.minY;
|
|
@@ -2284,10 +2298,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
2284
2298
|
const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
|
|
2285
2299
|
const endArrowL = element.shapeStyle?.connectorEndArrowLength;
|
|
2286
2300
|
const compoundLine = element.shapeStyle?.compoundLine;
|
|
2287
|
-
const connectorLineCap =
|
|
2301
|
+
const connectorLineCap = chunkYF2BQIW3_js.svgLineCap(element.shapeStyle?.lineCap);
|
|
2288
2302
|
const hitTargetWidth = Math.max(strokeWidth * 3, 12);
|
|
2289
|
-
const offsets =
|
|
2290
|
-
const widths =
|
|
2303
|
+
const offsets = chunkYF2BQIW3_js.getCompoundLineOffsets(compoundLine, strokeWidth);
|
|
2304
|
+
const widths = chunkYF2BQIW3_js.getCompoundLineWidths(compoundLine, strokeWidth);
|
|
2291
2305
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2292
2306
|
"svg",
|
|
2293
2307
|
{
|
|
@@ -2354,15 +2368,15 @@ function parseGradientFillCss(gradFill) {
|
|
|
2354
2368
|
}
|
|
2355
2369
|
const rawStops = stops.map((gs) => {
|
|
2356
2370
|
const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
|
|
2357
|
-
const color =
|
|
2358
|
-
const opacity =
|
|
2371
|
+
const color = chunkYF2BQIW3_js.parseDrawingColor(gs) ?? "#888888";
|
|
2372
|
+
const opacity = chunkYF2BQIW3_js.parseDrawingColorOpacity(gs);
|
|
2359
2373
|
return { position: pos, color, opacity };
|
|
2360
2374
|
}).sort((a, b) => a.position - b.position);
|
|
2361
|
-
const stopStrings = rawStops.map((s) => `${
|
|
2375
|
+
const stopStrings = rawStops.map((s) => `${chunkYF2BQIW3_js.colorWithOpacity(s.color, s.opacity)} ${s.position.toFixed(1)}%`).join(", ");
|
|
2362
2376
|
const lin = gradFill["a:lin"];
|
|
2363
2377
|
if (lin) {
|
|
2364
2378
|
const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
|
|
2365
|
-
const angleDeg = Math.round(
|
|
2379
|
+
const angleDeg = Math.round(chunkYF2BQIW3_js.ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
|
|
2366
2380
|
return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
|
|
2367
2381
|
}
|
|
2368
2382
|
const path = gradFill["a:path"];
|
|
@@ -2376,7 +2390,7 @@ function parseGradientFillCss(gradFill) {
|
|
|
2376
2390
|
b: Number.parseInt(String(fillToRectXml["@_b"] || "0"), 10) / 1e5
|
|
2377
2391
|
} : void 0;
|
|
2378
2392
|
if (pathType === "rect") {
|
|
2379
|
-
return
|
|
2393
|
+
return chunkYF2BQIW3_js.buildRectPathGradient(rawStops, void 0, fillToRect);
|
|
2380
2394
|
}
|
|
2381
2395
|
let cx = 50;
|
|
2382
2396
|
let cy = 50;
|
|
@@ -2398,8 +2412,8 @@ function parsePatternFillCss(pattFill) {
|
|
|
2398
2412
|
if (!pattFill) {
|
|
2399
2413
|
return void 0;
|
|
2400
2414
|
}
|
|
2401
|
-
const fgColor =
|
|
2402
|
-
const bgColor =
|
|
2415
|
+
const fgColor = chunkYF2BQIW3_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
|
|
2416
|
+
const bgColor = chunkYF2BQIW3_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
|
|
2403
2417
|
const preset = String(pattFill["@_prst"] || "ltDnDiag");
|
|
2404
2418
|
switch (preset) {
|
|
2405
2419
|
case "ltHorz":
|
|
@@ -2510,11 +2524,11 @@ function parseCellBorders(cellProperties) {
|
|
|
2510
2524
|
const prstDash = ln["a:prstDash"];
|
|
2511
2525
|
const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
|
|
2512
2526
|
const cssBorderStyle = ooxmlDashToCss(dashVal);
|
|
2513
|
-
const color =
|
|
2527
|
+
const color = chunkYF2BQIW3_js.parseDrawingColor(ln["a:solidFill"]);
|
|
2514
2528
|
if (color) {
|
|
2515
|
-
const opacity =
|
|
2529
|
+
const opacity = chunkYF2BQIW3_js.parseDrawingColorOpacity(ln["a:solidFill"]);
|
|
2516
2530
|
const key = `${edge.prefix}`;
|
|
2517
|
-
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${
|
|
2531
|
+
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkYF2BQIW3_js.colorWithOpacity(color, opacity)}`;
|
|
2518
2532
|
}
|
|
2519
2533
|
}
|
|
2520
2534
|
return borderStyle;
|
|
@@ -2527,7 +2541,7 @@ function parseCellTextEffects(runProps) {
|
|
|
2527
2541
|
const textShadowParts = [];
|
|
2528
2542
|
const outerShdw = effectLst["a:outerShdw"];
|
|
2529
2543
|
if (outerShdw) {
|
|
2530
|
-
const shdwColor =
|
|
2544
|
+
const shdwColor = chunkYF2BQIW3_js.parseDrawingColor(outerShdw);
|
|
2531
2545
|
if (shdwColor) {
|
|
2532
2546
|
const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
|
|
2533
2547
|
const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
|
|
@@ -2545,7 +2559,7 @@ function parseCellTextEffects(runProps) {
|
|
|
2545
2559
|
}
|
|
2546
2560
|
const glow = effectLst["a:glow"];
|
|
2547
2561
|
if (glow) {
|
|
2548
|
-
const glowColor =
|
|
2562
|
+
const glowColor = chunkYF2BQIW3_js.parseDrawingColor(glow);
|
|
2549
2563
|
if (glowColor) {
|
|
2550
2564
|
const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
|
|
2551
2565
|
const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
|
|
@@ -2567,11 +2581,11 @@ function extractCellText(cellXml) {
|
|
|
2567
2581
|
const textParts = [];
|
|
2568
2582
|
const runs = ensureArrayValue(paragraph["a:r"]);
|
|
2569
2583
|
runs.forEach((run) => {
|
|
2570
|
-
textParts.push(
|
|
2584
|
+
textParts.push(chunkYF2BQIW3_js.xmlText(run["a:t"]) ?? "");
|
|
2571
2585
|
});
|
|
2572
2586
|
const fields = ensureArrayValue(paragraph["a:fld"]);
|
|
2573
2587
|
fields.forEach((field) => {
|
|
2574
|
-
textParts.push(
|
|
2588
|
+
textParts.push(chunkYF2BQIW3_js.xmlText(field["a:t"]) ?? "");
|
|
2575
2589
|
});
|
|
2576
2590
|
paragraphTexts.push(textParts.join(""));
|
|
2577
2591
|
});
|
|
@@ -2615,10 +2629,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
2615
2629
|
if (runProps?.["@_u"] !== void 0) {
|
|
2616
2630
|
cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
|
|
2617
2631
|
}
|
|
2618
|
-
const runColor =
|
|
2632
|
+
const runColor = chunkYF2BQIW3_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkYF2BQIW3_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
|
|
2619
2633
|
if (runColor) {
|
|
2620
|
-
const opacity =
|
|
2621
|
-
cellStyle.color =
|
|
2634
|
+
const opacity = chunkYF2BQIW3_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
|
|
2635
|
+
cellStyle.color = chunkYF2BQIW3_js.colorWithOpacity(runColor, opacity);
|
|
2622
2636
|
}
|
|
2623
2637
|
const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
|
|
2624
2638
|
if (fontFamily) {
|
|
@@ -2628,15 +2642,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
2628
2642
|
cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
|
|
2629
2643
|
}
|
|
2630
2644
|
const cellProperties = cellXml["a:tcPr"];
|
|
2631
|
-
const cellFill =
|
|
2645
|
+
const cellFill = chunkYF2BQIW3_js.parseDrawingColor(
|
|
2632
2646
|
cellProperties?.["a:solidFill"],
|
|
2633
2647
|
schemeColorOverrides
|
|
2634
2648
|
);
|
|
2635
2649
|
if (cellFill) {
|
|
2636
|
-
const opacity =
|
|
2650
|
+
const opacity = chunkYF2BQIW3_js.parseDrawingColorOpacity(
|
|
2637
2651
|
cellProperties?.["a:solidFill"]
|
|
2638
2652
|
);
|
|
2639
|
-
cellStyle.backgroundColor =
|
|
2653
|
+
cellStyle.backgroundColor = chunkYF2BQIW3_js.colorWithOpacity(cellFill, opacity);
|
|
2640
2654
|
} else {
|
|
2641
2655
|
const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
|
|
2642
2656
|
if (gradCss) {
|
|
@@ -2651,16 +2665,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
2651
2665
|
const edgeBorders = parseCellBorders(cellProperties);
|
|
2652
2666
|
Object.assign(cellStyle, edgeBorders);
|
|
2653
2667
|
if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
|
|
2654
|
-
const borderColor =
|
|
2668
|
+
const borderColor = chunkYF2BQIW3_js.parseDrawingColor(
|
|
2655
2669
|
cellProperties?.["a:lnL"]?.["a:solidFill"],
|
|
2656
2670
|
schemeColorOverrides
|
|
2657
|
-
) ||
|
|
2671
|
+
) || chunkYF2BQIW3_js.parseDrawingColor(
|
|
2658
2672
|
cellProperties?.["a:lnR"]?.["a:solidFill"],
|
|
2659
2673
|
schemeColorOverrides
|
|
2660
|
-
) ||
|
|
2674
|
+
) || chunkYF2BQIW3_js.parseDrawingColor(
|
|
2661
2675
|
cellProperties?.["a:lnT"]?.["a:solidFill"],
|
|
2662
2676
|
schemeColorOverrides
|
|
2663
|
-
) ||
|
|
2677
|
+
) || chunkYF2BQIW3_js.parseDrawingColor(
|
|
2664
2678
|
cellProperties?.["a:lnB"]?.["a:solidFill"],
|
|
2665
2679
|
schemeColorOverrides
|
|
2666
2680
|
);
|
|
@@ -2732,7 +2746,7 @@ function getTableCellBandStyle2(element, rowIndex, cellIndex, rowCount, columnCo
|
|
|
2732
2746
|
if (element.type !== "table") {
|
|
2733
2747
|
return void 0;
|
|
2734
2748
|
}
|
|
2735
|
-
return
|
|
2749
|
+
return chunkYF2BQIW3_js.getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
|
|
2736
2750
|
tableStyleMap: styleCtx?.tableStyleMap,
|
|
2737
2751
|
colorScheme: styleCtx?.theme?.colorScheme,
|
|
2738
2752
|
fontScheme: styleCtx?.theme?.fontScheme
|
|
@@ -2812,7 +2826,7 @@ function renderTableCellContent(cell, fallbackText) {
|
|
|
2812
2826
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2813
2827
|
"span",
|
|
2814
2828
|
{
|
|
2815
|
-
style: { position: "relative", ...
|
|
2829
|
+
style: { position: "relative", ...chunkYF2BQIW3_js.cellRunStyle(run) },
|
|
2816
2830
|
children: run.text
|
|
2817
2831
|
},
|
|
2818
2832
|
`r-${index}`
|
|
@@ -2820,7 +2834,7 @@ function renderTableCellContent(cell, fallbackText) {
|
|
|
2820
2834
|
});
|
|
2821
2835
|
}
|
|
2822
2836
|
function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
|
|
2823
|
-
return
|
|
2837
|
+
return chunkYF2BQIW3_js.getCellDiagonalBorders(style, tableData, pos, {
|
|
2824
2838
|
tableStyleMap: styleCtx?.tableStyleMap,
|
|
2825
2839
|
colorScheme: styleCtx?.theme?.colorScheme,
|
|
2826
2840
|
fontScheme: styleCtx?.theme?.fontScheme
|
|
@@ -2879,18 +2893,18 @@ function TableCellInput({
|
|
|
2879
2893
|
onCommit,
|
|
2880
2894
|
onCancel
|
|
2881
2895
|
}) {
|
|
2882
|
-
const inputRef =
|
|
2883
|
-
const committedRef =
|
|
2884
|
-
const onCommitRef =
|
|
2896
|
+
const inputRef = React8.useRef(null);
|
|
2897
|
+
const committedRef = React8.useRef(false);
|
|
2898
|
+
const onCommitRef = React8.useRef(onCommit);
|
|
2885
2899
|
onCommitRef.current = onCommit;
|
|
2886
|
-
|
|
2900
|
+
React8.useEffect(() => {
|
|
2887
2901
|
const el = inputRef.current;
|
|
2888
2902
|
if (el) {
|
|
2889
2903
|
el.focus();
|
|
2890
2904
|
el.select();
|
|
2891
2905
|
}
|
|
2892
2906
|
}, []);
|
|
2893
|
-
|
|
2907
|
+
React8.useEffect(() => {
|
|
2894
2908
|
const input = inputRef.current;
|
|
2895
2909
|
return () => {
|
|
2896
2910
|
if (!committedRef.current && input) {
|
|
@@ -2950,11 +2964,11 @@ function TableResizeOverlay({
|
|
|
2950
2964
|
onResizeColumns,
|
|
2951
2965
|
onResizeRow
|
|
2952
2966
|
}) {
|
|
2953
|
-
const containerRef =
|
|
2954
|
-
const [rowBounds, setRowBounds] =
|
|
2955
|
-
const dragRef =
|
|
2956
|
-
const colBoundaries =
|
|
2957
|
-
const measureRows =
|
|
2967
|
+
const containerRef = React8.useRef(null);
|
|
2968
|
+
const [rowBounds, setRowBounds] = React8.useState([]);
|
|
2969
|
+
const dragRef = React8.useRef(null);
|
|
2970
|
+
const colBoundaries = React8.useMemo(() => chunkYF2BQIW3_js.computeColumnBoundaries(columnWidths), [columnWidths]);
|
|
2971
|
+
const measureRows = React8.useCallback(() => {
|
|
2958
2972
|
const container = containerRef.current;
|
|
2959
2973
|
if (!container) {
|
|
2960
2974
|
return;
|
|
@@ -2979,10 +2993,10 @@ function TableResizeOverlay({
|
|
|
2979
2993
|
return bounds;
|
|
2980
2994
|
});
|
|
2981
2995
|
}, []);
|
|
2982
|
-
|
|
2996
|
+
React8.useLayoutEffect(() => {
|
|
2983
2997
|
measureRows();
|
|
2984
2998
|
});
|
|
2985
|
-
|
|
2999
|
+
React8.useEffect(() => {
|
|
2986
3000
|
const handleMouseMove = (e) => {
|
|
2987
3001
|
const drag = dragRef.current;
|
|
2988
3002
|
if (!drag) {
|
|
@@ -3000,11 +3014,11 @@ function TableResizeOverlay({
|
|
|
3000
3014
|
const rect = containerRef.current.getBoundingClientRect();
|
|
3001
3015
|
if (e.clientX !== drag.startPos && drag.type === "col" && drag.initialWidths && onResizeColumns) {
|
|
3002
3016
|
const deltaProp = (e.clientX - drag.startPos) / rect.width;
|
|
3003
|
-
onResizeColumns(
|
|
3017
|
+
onResizeColumns(chunkYF2BQIW3_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
|
|
3004
3018
|
} else if (e.clientY !== drag.startPos && drag.type === "row" && onResizeRow) {
|
|
3005
3019
|
const deltaY = e.clientY - drag.startPos;
|
|
3006
|
-
const newHeight =
|
|
3007
|
-
drag.initialRowHeight ??
|
|
3020
|
+
const newHeight = chunkYF2BQIW3_js.computeResizedRowHeight(
|
|
3021
|
+
drag.initialRowHeight ?? chunkYF2BQIW3_js.DEFAULT_ROW_HEIGHT,
|
|
3008
3022
|
deltaY
|
|
3009
3023
|
);
|
|
3010
3024
|
onResizeRow(drag.index, newHeight);
|
|
@@ -3042,7 +3056,7 @@ function TableResizeOverlay({
|
|
|
3042
3056
|
e.stopPropagation();
|
|
3043
3057
|
const table = containerRef.current?.querySelector("table");
|
|
3044
3058
|
const tr = table?.querySelectorAll("tbody > tr")[index];
|
|
3045
|
-
const actualHeight = tr?.offsetHeight ??
|
|
3059
|
+
const actualHeight = tr?.offsetHeight ?? chunkYF2BQIW3_js.DEFAULT_ROW_HEIGHT;
|
|
3046
3060
|
document.body.style.cursor = "row-resize";
|
|
3047
3061
|
document.body.style.userSelect = "none";
|
|
3048
3062
|
dragRef.current = {
|
|
@@ -3082,14 +3096,14 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3082
3096
|
const rowCount = tableData.rows.length;
|
|
3083
3097
|
const columnCount = tableData.columnWidths.length;
|
|
3084
3098
|
const selectedCell = options?.selectedCell || null;
|
|
3085
|
-
const isEditable = Boolean(options?.editable) &&
|
|
3099
|
+
const isEditable = Boolean(options?.editable) && chunkYF2BQIW3_js.canDrillDown(element);
|
|
3086
3100
|
const hasCellSelectionHandler = typeof options?.onSelectCell === "function";
|
|
3087
3101
|
const sharedCtx = {
|
|
3088
3102
|
tableStyleMap: options?.styleCtx?.tableStyleMap,
|
|
3089
3103
|
colorScheme: options?.styleCtx?.theme?.colorScheme,
|
|
3090
3104
|
fontScheme: options?.styleCtx?.theme?.fontScheme
|
|
3091
3105
|
};
|
|
3092
|
-
const cellCss = (cell, rowIndex, cellIndex) =>
|
|
3106
|
+
const cellCss = (cell, rowIndex, cellIndex) => chunkYF2BQIW3_js.tableCellCss(
|
|
3093
3107
|
tableData,
|
|
3094
3108
|
cell,
|
|
3095
3109
|
{ rowIndex, cellIndex, rowCount, columnCount },
|
|
@@ -3102,7 +3116,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3102
3116
|
}
|
|
3103
3117
|
const first = selectedCell.selectedCells[0];
|
|
3104
3118
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
3105
|
-
return
|
|
3119
|
+
return chunkYF2BQIW3_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
|
|
3106
3120
|
})();
|
|
3107
3121
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3108
3122
|
TableResizeOverlay,
|
|
@@ -3123,9 +3137,9 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3123
3137
|
{
|
|
3124
3138
|
className: "w-full h-full border-collapse table-fixed",
|
|
3125
3139
|
style: {
|
|
3126
|
-
fontFamily:
|
|
3140
|
+
fontFamily: chunkYF2BQIW3_js.DEFAULT_FONT_FAMILY,
|
|
3127
3141
|
// `a:tblPr@rtl` mirrors the column order for RTL decks.
|
|
3128
|
-
...
|
|
3142
|
+
...chunkYF2BQIW3_js.tableContainerCss(tableData)
|
|
3129
3143
|
},
|
|
3130
3144
|
children: [
|
|
3131
3145
|
tableData.columnWidths.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: tableData.columnWidths.map((w, ci) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3144,7 +3158,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3144
3158
|
return null;
|
|
3145
3159
|
}
|
|
3146
3160
|
const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
|
|
3147
|
-
const isInMultiSelection =
|
|
3161
|
+
const isInMultiSelection = chunkYF2BQIW3_js.isCellInRect(rowIndex, cellIndex, selectionRect);
|
|
3148
3162
|
const isCellEditing = isCellSelected && selectedCell?.isEditing;
|
|
3149
3163
|
const diag = getCellDiagonalBorders2(
|
|
3150
3164
|
cell.style,
|
|
@@ -3173,7 +3187,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3173
3187
|
}
|
|
3174
3188
|
event.stopPropagation();
|
|
3175
3189
|
if (event.shiftKey && selectedCell) {
|
|
3176
|
-
const rect =
|
|
3190
|
+
const rect = chunkYF2BQIW3_js.computeSelectionRect(
|
|
3177
3191
|
selectedCell.rowIndex,
|
|
3178
3192
|
selectedCell.columnIndex,
|
|
3179
3193
|
rowIndex,
|
|
@@ -3183,7 +3197,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
3183
3197
|
options?.onSelectCell?.({
|
|
3184
3198
|
rowIndex: selectedCell.rowIndex,
|
|
3185
3199
|
columnIndex: selectedCell.columnIndex,
|
|
3186
|
-
selectedCells:
|
|
3200
|
+
selectedCells: chunkYF2BQIW3_js.rectToCells(rect)
|
|
3187
3201
|
});
|
|
3188
3202
|
} else {
|
|
3189
3203
|
options?.onSelectCell?.({
|
|
@@ -3244,10 +3258,10 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3244
3258
|
if (tableEl2.tableData && tableEl2.tableData.rows.length > 0) {
|
|
3245
3259
|
return renderTableFromTableData(tableEl2, textStyle, options);
|
|
3246
3260
|
}
|
|
3247
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children:
|
|
3261
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkLTBTG2QB_js.translationsEn["pptx.table.title"] });
|
|
3248
3262
|
}
|
|
3249
3263
|
const selectedCell = options?.selectedCell || null;
|
|
3250
|
-
const isEditable = Boolean(options?.editable) &&
|
|
3264
|
+
const isEditable = Boolean(options?.editable) && chunkYF2BQIW3_js.canDrillDown(element);
|
|
3251
3265
|
const hasCellSelectionHandler = typeof options?.onSelectCell === "function";
|
|
3252
3266
|
const tableEl = element;
|
|
3253
3267
|
const xmlSelectionRect = (() => {
|
|
@@ -3259,7 +3273,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3259
3273
|
}
|
|
3260
3274
|
const first = selectedCell.selectedCells[0];
|
|
3261
3275
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
3262
|
-
return
|
|
3276
|
+
return chunkYF2BQIW3_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
|
|
3263
3277
|
})();
|
|
3264
3278
|
const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
|
|
3265
3279
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3281,9 +3295,9 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3281
3295
|
{
|
|
3282
3296
|
className: "w-full h-full border-collapse table-fixed",
|
|
3283
3297
|
style: {
|
|
3284
|
-
fontFamily:
|
|
3298
|
+
fontFamily: chunkYF2BQIW3_js.DEFAULT_FONT_FAMILY,
|
|
3285
3299
|
// `a:tblPr@rtl` mirrors the column order for RTL decks.
|
|
3286
|
-
...
|
|
3300
|
+
...chunkYF2BQIW3_js.tableContainerCss(tableEl.tableData)
|
|
3287
3301
|
},
|
|
3288
3302
|
children: [
|
|
3289
3303
|
parsedTable.columnPercentages.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((percentage, columnIndex) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -3340,7 +3354,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3340
3354
|
color: textStyle.color,
|
|
3341
3355
|
...bandStyle,
|
|
3342
3356
|
...xmlCellStyle,
|
|
3343
|
-
...tdCellOverride ?
|
|
3357
|
+
...tdCellOverride ? chunkYF2BQIW3_js.cellStyleToCss(tdCellOverride) : void 0,
|
|
3344
3358
|
...diag ? { position: "relative" } : void 0
|
|
3345
3359
|
};
|
|
3346
3360
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -3350,7 +3364,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3350
3364
|
"border px-1 py-0.5 align-top",
|
|
3351
3365
|
isEditable && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
|
|
3352
3366
|
selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
|
|
3353
|
-
|
|
3367
|
+
chunkYF2BQIW3_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
|
|
3354
3368
|
),
|
|
3355
3369
|
colSpan,
|
|
3356
3370
|
rowSpan: rSpan,
|
|
@@ -3361,7 +3375,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3361
3375
|
}
|
|
3362
3376
|
event.stopPropagation();
|
|
3363
3377
|
if (event.shiftKey && selectedCell && tableEl.tableData) {
|
|
3364
|
-
const rect =
|
|
3378
|
+
const rect = chunkYF2BQIW3_js.computeSelectionRect(
|
|
3365
3379
|
selectedCell.rowIndex,
|
|
3366
3380
|
selectedCell.columnIndex,
|
|
3367
3381
|
rowIndex,
|
|
@@ -3371,7 +3385,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
3371
3385
|
options?.onSelectCell?.({
|
|
3372
3386
|
rowIndex: selectedCell.rowIndex,
|
|
3373
3387
|
columnIndex: selectedCell.columnIndex,
|
|
3374
|
-
selectedCells:
|
|
3388
|
+
selectedCells: chunkYF2BQIW3_js.rectToCells(rect)
|
|
3375
3389
|
});
|
|
3376
3390
|
} else {
|
|
3377
3391
|
options?.onSelectCell?.({
|
|
@@ -3433,23 +3447,23 @@ function renderGradientStops(stops) {
|
|
|
3433
3447
|
return stops.map((stop, i) => /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: stop.offset, stopColor: stop.color, stopOpacity: stop.opacity }, i));
|
|
3434
3448
|
}
|
|
3435
3449
|
function partAttrs(part) {
|
|
3436
|
-
return part ?
|
|
3450
|
+
return part ? chunkYF2BQIW3_js.chartPartToAttrs(part) : void 0;
|
|
3437
3451
|
}
|
|
3438
3452
|
function resolveReactPalette(chartData) {
|
|
3439
3453
|
if (chartData.colorPalette && chartData.colorPalette.length > 0) {
|
|
3440
3454
|
return chartData.colorPalette;
|
|
3441
3455
|
}
|
|
3442
|
-
return [...
|
|
3456
|
+
return [...chunkYF2BQIW3_js.getChartStylePalette(chartData.style?.styleId)];
|
|
3443
3457
|
}
|
|
3444
3458
|
function buildReactChartViewModel(element) {
|
|
3445
3459
|
if (element.type !== "chart" || !element.chartData) {
|
|
3446
|
-
return
|
|
3460
|
+
return chunkYF2BQIW3_js.buildChartViewModel(element);
|
|
3447
3461
|
}
|
|
3448
3462
|
const palette = resolveReactPalette(element.chartData), themedElement = {
|
|
3449
3463
|
...element,
|
|
3450
3464
|
chartData: { ...element.chartData, colorPalette: palette }
|
|
3451
3465
|
};
|
|
3452
|
-
return
|
|
3466
|
+
return chunkYF2BQIW3_js.buildChartViewModel(themedElement);
|
|
3453
3467
|
}
|
|
3454
3468
|
function renderPrimitive(prim, key) {
|
|
3455
3469
|
switch (prim.kind) {
|
|
@@ -3601,7 +3615,7 @@ function renderText(t, key) {
|
|
|
3601
3615
|
);
|
|
3602
3616
|
}
|
|
3603
3617
|
function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
|
|
3604
|
-
const legendItems =
|
|
3618
|
+
const legendItems = chunkYF2BQIW3_js.computeChartLegendLayout(vm);
|
|
3605
3619
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3606
3620
|
"svg",
|
|
3607
3621
|
{
|
|
@@ -3764,17 +3778,17 @@ function renderChartViewModel(elementId, vm, preserveAspectRatio = "none") {
|
|
|
3764
3778
|
}
|
|
3765
3779
|
function renderChartElement(element) {
|
|
3766
3780
|
if (element.type !== "chart") {
|
|
3767
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children:
|
|
3781
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkLTBTG2QB_js.translationsEn["pptx.chart.heading"] });
|
|
3768
3782
|
}
|
|
3769
3783
|
const chartData = element.chartData;
|
|
3770
3784
|
if (!chartData || chartData.series.length === 0) {
|
|
3771
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children:
|
|
3785
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkLTBTG2QB_js.translationsEn["pptx.chart.heading"] });
|
|
3772
3786
|
}
|
|
3773
|
-
const kind =
|
|
3787
|
+
const kind = chunkYF2BQIW3_js.resolveChartKind(chartData.chartType ?? "bar");
|
|
3774
3788
|
return renderChartViewModel(
|
|
3775
3789
|
element.id,
|
|
3776
3790
|
buildReactChartViewModel(element),
|
|
3777
|
-
|
|
3791
|
+
chunkYF2BQIW3_js.chartPreserveAspectRatio(kind)
|
|
3778
3792
|
);
|
|
3779
3793
|
}
|
|
3780
3794
|
|
|
@@ -3794,14 +3808,14 @@ function buildNotesPdf(pages) {
|
|
|
3794
3808
|
notes: page.notes,
|
|
3795
3809
|
slideNumber: page.slideNumber
|
|
3796
3810
|
}));
|
|
3797
|
-
const bytes =
|
|
3811
|
+
const bytes = chunkYF2BQIW3_js.buildNotesPdfBytes(images, meta);
|
|
3798
3812
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
3799
3813
|
return URL.createObjectURL(blob);
|
|
3800
3814
|
}
|
|
3801
3815
|
|
|
3802
3816
|
// src/viewer/utils/pdf-builder-slides.ts
|
|
3803
3817
|
function buildPdfFromTiledImageData(pages) {
|
|
3804
|
-
const bytes =
|
|
3818
|
+
const bytes = chunkYF2BQIW3_js.buildTiledSlidesPdfBytes(pages);
|
|
3805
3819
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
3806
3820
|
return URL.createObjectURL(blob);
|
|
3807
3821
|
}
|
|
@@ -3810,7 +3824,7 @@ function buildPdfFromTiledImageData(pages) {
|
|
|
3810
3824
|
var activePreview = null;
|
|
3811
3825
|
function startPreviewAnimation(elementId, preset, options) {
|
|
3812
3826
|
stopPreviewAnimation();
|
|
3813
|
-
const descriptor =
|
|
3827
|
+
const descriptor = chunkYF2BQIW3_js.buildPreviewAnimation(preset, options);
|
|
3814
3828
|
if (!descriptor) {
|
|
3815
3829
|
return;
|
|
3816
3830
|
}
|
|
@@ -3823,7 +3837,7 @@ function startMotionPathPreview(elementId, path, options) {
|
|
|
3823
3837
|
return;
|
|
3824
3838
|
}
|
|
3825
3839
|
const stage = domEl.offsetParent;
|
|
3826
|
-
const descriptor =
|
|
3840
|
+
const descriptor = chunkYF2BQIW3_js.buildMotionPathPreview({
|
|
3827
3841
|
path,
|
|
3828
3842
|
slideWidth: stage?.offsetWidth || DEFAULT_PREVIEW_SLIDE_WIDTH,
|
|
3829
3843
|
slideHeight: stage?.offsetHeight || DEFAULT_PREVIEW_SLIDE_HEIGHT,
|