@aixa-transformation/pptx-viewer 2.0.15 → 2.0.27
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/dist/{Model3DScene-G6X4L2MC.mjs → Model3DScene-QPOSBRM4.mjs} +2 -2
- package/dist/{Model3DScene-2FGHMV5Y.js → Model3DScene-VK4AKXGO.js} +3 -3
- package/dist/{SurfaceChart3DScene-MUHZNFLW.mjs → SurfaceChart3DScene-GIAS6HZ7.mjs} +2 -2
- package/dist/{SurfaceChart3DScene-BVA2NRED.js → SurfaceChart3DScene-LBHZDSGV.js} +3 -3
- package/dist/{chunk-EMNB7YC7.js → chunk-2GATFIDB.js} +493 -483
- package/dist/{chunk-X5ODNG2Q.mjs → chunk-3VKZ7ZNY.mjs} +16 -6
- package/dist/{chunk-4ZF7B5WU.mjs → chunk-45A3IISI.mjs} +2 -2
- package/dist/{chunk-IVCWQLQK.js → chunk-DHNQHQ66.js} +42 -42
- package/dist/{chunk-KAP5TS7O.js → chunk-HUD73YBT.js} +179 -42
- package/dist/{chunk-E52NRFV5.mjs → chunk-KWR2VRGW.mjs} +9487 -9147
- package/dist/{chunk-C36MFNDN.mjs → chunk-LTBO2ZJC.mjs} +179 -42
- package/dist/{chunk-VLQGEXJZ.js → chunk-Z7ZISSMC.js} +10387 -10046
- package/dist/{dist-THKAHR4E.mjs → dist-DPZ5B7L7.mjs} +1 -1
- package/dist/{dist-VPE4R4KO.js → dist-L2EUDG6W.js} +568 -568
- package/dist/index.js +34 -34
- package/dist/index.mjs +4 -4
- package/dist/internals.js +78 -78
- package/dist/internals.mjs +3 -3
- package/dist/pptx-viewer.css +1 -1
- package/dist/presentation.js +2 -2
- package/dist/presentation.mjs +1 -1
- package/dist/viewer/index.js +20 -20
- package/dist/viewer/index.mjs +4 -4
- package/package.json +4 -4
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkDHNQHQ66_js = require('./chunk-DHNQHQ66.js');
|
|
4
4
|
var chunkCUUYYYC5_js = require('./chunk-CUUYYYC5.js');
|
|
5
|
-
var
|
|
5
|
+
var chunkHUD73YBT_js = require('./chunk-HUD73YBT.js');
|
|
6
6
|
var React4 = require('react');
|
|
7
7
|
var lu = require('react-icons/lu');
|
|
8
8
|
var clsx = require('clsx');
|
|
@@ -18,12 +18,12 @@ var JSZip__default = /*#__PURE__*/_interopDefault(JSZip);
|
|
|
18
18
|
|
|
19
19
|
// src/viewer/utils/animation-effects.ts
|
|
20
20
|
function getAnimationInitialStyle2(preset, nativeAnimation) {
|
|
21
|
-
return
|
|
21
|
+
return chunkDHNQHQ66_js.getAnimationInitialStyle(preset, nativeAnimation);
|
|
22
22
|
}
|
|
23
23
|
function useVirtualizedSlides({
|
|
24
24
|
totalItems,
|
|
25
25
|
itemHeight,
|
|
26
|
-
overscan =
|
|
26
|
+
overscan = chunkDHNQHQ66_js.DEFAULT_VIRTUAL_OVERSCAN
|
|
27
27
|
}) {
|
|
28
28
|
const scrollContainerRef = React4.useRef(null);
|
|
29
29
|
const [scrollTop, setScrollTop] = React4.useState(0);
|
|
@@ -53,7 +53,7 @@ function useVirtualizedSlides({
|
|
|
53
53
|
resizeObserver?.disconnect();
|
|
54
54
|
};
|
|
55
55
|
}, []);
|
|
56
|
-
const range =
|
|
56
|
+
const range = chunkDHNQHQ66_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
|
|
57
57
|
const safeItemHeight = Math.max(itemHeight, 1);
|
|
58
58
|
const scrollToIndex = React4.useCallback(
|
|
59
59
|
(index, behavior = "smooth") => {
|
|
@@ -116,7 +116,7 @@ function usePresenceTracking({
|
|
|
116
116
|
awareness.setLocalStateField("presence", state);
|
|
117
117
|
lastBroadcastRef.current = Date.now();
|
|
118
118
|
};
|
|
119
|
-
if (elapsed >=
|
|
119
|
+
if (elapsed >= chunkDHNQHQ66_js.BROADCAST_THROTTLE_MS) {
|
|
120
120
|
if (pendingBroadcastRef.current) {
|
|
121
121
|
clearTimeout(pendingBroadcastRef.current);
|
|
122
122
|
pendingBroadcastRef.current = null;
|
|
@@ -126,7 +126,7 @@ function usePresenceTracking({
|
|
|
126
126
|
pendingBroadcastRef.current = setTimeout(() => {
|
|
127
127
|
pendingBroadcastRef.current = null;
|
|
128
128
|
flush();
|
|
129
|
-
},
|
|
129
|
+
}, chunkDHNQHQ66_js.BROADCAST_THROTTLE_MS - elapsed);
|
|
130
130
|
}
|
|
131
131
|
},
|
|
132
132
|
[awareness, userName, userColor, userAvatar, role]
|
|
@@ -151,7 +151,7 @@ function usePresenceTracking({
|
|
|
151
151
|
return;
|
|
152
152
|
}
|
|
153
153
|
const handleChange = () => {
|
|
154
|
-
const users =
|
|
154
|
+
const users = chunkDHNQHQ66_js.derivePresenceList(
|
|
155
155
|
awareness.getStates(),
|
|
156
156
|
localClientId,
|
|
157
157
|
canvasWidth,
|
|
@@ -202,7 +202,7 @@ function useYjsProvider({ config }) {
|
|
|
202
202
|
const timeoutRef = React4.useRef(null);
|
|
203
203
|
const gateRef = React4.useRef(null);
|
|
204
204
|
if (!gateRef.current) {
|
|
205
|
-
gateRef.current =
|
|
205
|
+
gateRef.current = chunkDHNQHQ66_js.createSyncGate(() => setSynced(true));
|
|
206
206
|
}
|
|
207
207
|
const teardown = React4.useCallback(() => {
|
|
208
208
|
if (timeoutRef.current) {
|
|
@@ -240,7 +240,7 @@ function useYjsProvider({ config }) {
|
|
|
240
240
|
if (config.authToken) {
|
|
241
241
|
opts.password = config.authToken;
|
|
242
242
|
}
|
|
243
|
-
const provider = new WebrtcProvider(
|
|
243
|
+
const provider = new WebrtcProvider(chunkDHNQHQ66_js.validateRoomId(config.roomId), yDoc, opts);
|
|
244
244
|
setDoc(yDoc);
|
|
245
245
|
setAwareness(provider.awareness);
|
|
246
246
|
setClientId(provider.awareness.clientID);
|
|
@@ -282,13 +282,13 @@ function useYjsProvider({ config }) {
|
|
|
282
282
|
if (!config) {
|
|
283
283
|
return;
|
|
284
284
|
}
|
|
285
|
-
const roomId =
|
|
286
|
-
const transport = config.transport ??
|
|
285
|
+
const roomId = chunkDHNQHQ66_js.validateRoomId(config.roomId);
|
|
286
|
+
const transport = config.transport ?? chunkDHNQHQ66_js.resolveTransportForServerUrl(config.serverUrl);
|
|
287
287
|
if (transport === "webrtc") {
|
|
288
288
|
await initWebrtc();
|
|
289
289
|
return;
|
|
290
290
|
}
|
|
291
|
-
if (
|
|
291
|
+
if (chunkDHNQHQ66_js.isMixedContentBlocked(config.serverUrl)) {
|
|
292
292
|
console.warn(
|
|
293
293
|
`[pptx-viewer] Refusing to connect: insecure ws:// server "${config.serverUrl}" is blocked from a secure (https) page. Use a wss:// URL.`
|
|
294
294
|
);
|
|
@@ -348,7 +348,7 @@ function useYjsProvider({ config }) {
|
|
|
348
348
|
cleanupRef.current = null;
|
|
349
349
|
setStatus("error");
|
|
350
350
|
}
|
|
351
|
-
},
|
|
351
|
+
}, chunkDHNQHQ66_js.CONNECTION_TIMEOUT_MS);
|
|
352
352
|
}
|
|
353
353
|
setDoc(yDoc);
|
|
354
354
|
setAwareness(provider.awareness);
|
|
@@ -394,7 +394,7 @@ function useCollaborativeState({
|
|
|
394
394
|
canvasWidth,
|
|
395
395
|
canvasHeight
|
|
396
396
|
}) {
|
|
397
|
-
const userColor =
|
|
397
|
+
const userColor = chunkDHNQHQ66_js.sanitizeColor(config?.userColor, "#6366f1");
|
|
398
398
|
const { status, awareness, doc, clientId, synced, retry } = useYjsProvider({ config });
|
|
399
399
|
const { remoteUsers, broadcastPresence } = usePresenceTracking({
|
|
400
400
|
awareness,
|
|
@@ -461,7 +461,7 @@ function useSheetDismissDrag(onClose, threshold = 120) {
|
|
|
461
461
|
|
|
462
462
|
// src/viewer/utils/clone.ts
|
|
463
463
|
function cloneHistorySnapshot2(snapshot) {
|
|
464
|
-
return
|
|
464
|
+
return chunkDHNQHQ66_js.cloneHistorySnapshot(snapshot);
|
|
465
465
|
}
|
|
466
466
|
|
|
467
467
|
// src/viewer/hooks/useEditorHistory.ts
|
|
@@ -510,8 +510,8 @@ function useEditorHistory(input) {
|
|
|
510
510
|
width: canvasSize.width,
|
|
511
511
|
height: canvasSize.height,
|
|
512
512
|
activeSlideIndex,
|
|
513
|
-
slides: slides.map(
|
|
514
|
-
templateElementsBySlideId:
|
|
513
|
+
slides: slides.map(chunkDHNQHQ66_js.cloneSlide),
|
|
514
|
+
templateElementsBySlideId: chunkDHNQHQ66_js.cloneTemplateElementsBySlideId(templateElementsBySlideId),
|
|
515
515
|
...actionLabel ? { actionLabel } : {}
|
|
516
516
|
};
|
|
517
517
|
},
|
|
@@ -524,9 +524,9 @@ function useEditorHistory(input) {
|
|
|
524
524
|
width: snapshot.width,
|
|
525
525
|
height: snapshot.height
|
|
526
526
|
});
|
|
527
|
-
setSlides(snapshot.slides.map(
|
|
527
|
+
setSlides(snapshot.slides.map(chunkDHNQHQ66_js.cloneSlide));
|
|
528
528
|
setTemplateElementsBySlideId(
|
|
529
|
-
|
|
529
|
+
chunkDHNQHQ66_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
|
|
530
530
|
);
|
|
531
531
|
setActiveSlideIndex(Math.min(snapshot.activeSlideIndex, maxSlideIndex));
|
|
532
532
|
setSelectedElementIds([]);
|
|
@@ -790,7 +790,7 @@ var GLYPH_COMPONENTS = {
|
|
|
790
790
|
plus: lu.LuPlus,
|
|
791
791
|
triangle: lu.LuTriangle
|
|
792
792
|
};
|
|
793
|
-
var SHAPE_PRESETS =
|
|
793
|
+
var SHAPE_PRESETS = chunkDHNQHQ66_js.SHAPE_PRESET_DEFS.map(
|
|
794
794
|
(def) => ({
|
|
795
795
|
type: def.type,
|
|
796
796
|
label: def.label,
|
|
@@ -1035,7 +1035,7 @@ function executeMediaCommand(command) {
|
|
|
1035
1035
|
if (!el) {
|
|
1036
1036
|
return false;
|
|
1037
1037
|
}
|
|
1038
|
-
const parsed =
|
|
1038
|
+
const parsed = chunkDHNQHQ66_js.parseMediaCommand(command.command);
|
|
1039
1039
|
if (!parsed) {
|
|
1040
1040
|
return false;
|
|
1041
1041
|
}
|
|
@@ -1198,7 +1198,7 @@ function useAnimationPlayback(input) {
|
|
|
1198
1198
|
(controller, group) => {
|
|
1199
1199
|
driveBuildReveal(
|
|
1200
1200
|
controller,
|
|
1201
|
-
|
|
1201
|
+
chunkDHNQHQ66_js.PresentationAnimationController.collectBuildStepIds(group),
|
|
1202
1202
|
setPresentationElementStates,
|
|
1203
1203
|
buildRafRef
|
|
1204
1204
|
);
|
|
@@ -1261,7 +1261,7 @@ function useAnimationPlayback(input) {
|
|
|
1261
1261
|
setHoverTriggerShapeIds(/* @__PURE__ */ new Set());
|
|
1262
1262
|
return;
|
|
1263
1263
|
}
|
|
1264
|
-
const controller =
|
|
1264
|
+
const controller = chunkDHNQHQ66_js.PresentationAnimationController.fromSlide(slide);
|
|
1265
1265
|
controllerRef.current = controller;
|
|
1266
1266
|
setPresentationKeyframesCss(controller.keyframesCss);
|
|
1267
1267
|
setInteractiveTriggerShapeIds(controller.interactiveTriggerShapeIds);
|
|
@@ -1398,7 +1398,7 @@ function useAnimationPlayback(input) {
|
|
|
1398
1398
|
}))
|
|
1399
1399
|
);
|
|
1400
1400
|
entranceAnimations.forEach((animation, animationIndex) => {
|
|
1401
|
-
const delay =
|
|
1401
|
+
const delay = chunkDHNQHQ66_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
|
|
1402
1402
|
const timer = window.setTimeout(() => {
|
|
1403
1403
|
setPresentationAnimations(
|
|
1404
1404
|
(previousAnimations) => previousAnimations.map(
|
|
@@ -1434,12 +1434,12 @@ function useAnimationPlayback(input) {
|
|
|
1434
1434
|
presentationTimersRef
|
|
1435
1435
|
};
|
|
1436
1436
|
}
|
|
1437
|
-
var PRESENTER_CHANNEL_NAME =
|
|
1438
|
-
var AUDIENCE_HASH =
|
|
1439
|
-
var PRESENTER_MSG_ORIGIN =
|
|
1440
|
-
var AUDIENCE_NONCE_KEY =
|
|
1437
|
+
var PRESENTER_CHANNEL_NAME = chunkDHNQHQ66_js.PRESENTATION_CHANNEL_NAME;
|
|
1438
|
+
var AUDIENCE_HASH = chunkDHNQHQ66_js.PRESENTATION_HASH;
|
|
1439
|
+
var PRESENTER_MSG_ORIGIN = chunkDHNQHQ66_js.PRESENTATION_MESSAGE_ORIGIN;
|
|
1440
|
+
var AUDIENCE_NONCE_KEY = chunkDHNQHQ66_js.PRESENTATION_NONCE_KEY;
|
|
1441
1441
|
function generateSessionId() {
|
|
1442
|
-
return
|
|
1442
|
+
return chunkDHNQHQ66_js.createPresentationSessionId();
|
|
1443
1443
|
}
|
|
1444
1444
|
function parseAudienceNonce() {
|
|
1445
1445
|
const hash = window.location.hash;
|
|
@@ -1475,7 +1475,7 @@ function usePresenterWindow(input) {
|
|
|
1475
1475
|
}, []);
|
|
1476
1476
|
const swapDisplays = React4.useCallback(async () => {
|
|
1477
1477
|
const audience = audienceWindowRef.current;
|
|
1478
|
-
return audience && !audience.closed ?
|
|
1478
|
+
return audience && !audience.closed ? chunkDHNQHQ66_js.swapPresentationWindows(window, audience) : false;
|
|
1479
1479
|
}, []);
|
|
1480
1480
|
const syncSlideToAudience = React4.useCallback(
|
|
1481
1481
|
(slideIndex) => {
|
|
@@ -1539,7 +1539,7 @@ function usePresenterWindow(input) {
|
|
|
1539
1539
|
pollTimerRef.current = null;
|
|
1540
1540
|
}
|
|
1541
1541
|
if (closingSessionId) {
|
|
1542
|
-
void
|
|
1542
|
+
void chunkDHNQHQ66_js.clearAudienceContent(closingSessionId);
|
|
1543
1543
|
}
|
|
1544
1544
|
}, [getChannel]);
|
|
1545
1545
|
const openAudienceWindow = React4.useCallback(() => {
|
|
@@ -1557,10 +1557,10 @@ function usePresenterWindow(input) {
|
|
|
1557
1557
|
audienceWindowRef.current = blankWin;
|
|
1558
1558
|
const sessionId = generateSessionId();
|
|
1559
1559
|
sessionIdRef.current = sessionId;
|
|
1560
|
-
const audienceUrl =
|
|
1561
|
-
void
|
|
1560
|
+
const audienceUrl = chunkDHNQHQ66_js.buildPresentationAudienceUrl(window.location.href, sessionId);
|
|
1561
|
+
void chunkDHNQHQ66_js.resolveAudienceScreenPlacement(window).then((placement) => {
|
|
1562
1562
|
if (placement && audienceWindowRef.current === blankWin && !blankWin.closed) {
|
|
1563
|
-
|
|
1563
|
+
chunkDHNQHQ66_js.placeAudienceWindow(blankWin, placement);
|
|
1564
1564
|
}
|
|
1565
1565
|
return void 0;
|
|
1566
1566
|
});
|
|
@@ -1590,7 +1590,7 @@ function usePresenterWindow(input) {
|
|
|
1590
1590
|
}
|
|
1591
1591
|
};
|
|
1592
1592
|
if (content) {
|
|
1593
|
-
void
|
|
1593
|
+
void chunkDHNQHQ66_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
|
|
1594
1594
|
} else {
|
|
1595
1595
|
navigateOrClose(true);
|
|
1596
1596
|
}
|
|
@@ -1616,7 +1616,7 @@ function usePresenterWindow(input) {
|
|
|
1616
1616
|
}
|
|
1617
1617
|
const handleMessage = (event) => {
|
|
1618
1618
|
const message = event.data;
|
|
1619
|
-
if (
|
|
1619
|
+
if (chunkDHNQHQ66_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
|
|
1620
1620
|
syncStateToAudience(snapshotRef.current);
|
|
1621
1621
|
}
|
|
1622
1622
|
};
|
|
@@ -1645,7 +1645,7 @@ function usePresenterWindow(input) {
|
|
|
1645
1645
|
React4.useEffect(() => {
|
|
1646
1646
|
const handleBeforeUnload = () => {
|
|
1647
1647
|
if (sessionIdRef.current) {
|
|
1648
|
-
void
|
|
1648
|
+
void chunkDHNQHQ66_js.clearAudienceContent(sessionIdRef.current);
|
|
1649
1649
|
}
|
|
1650
1650
|
};
|
|
1651
1651
|
window.addEventListener("beforeunload", handleBeforeUnload);
|
|
@@ -1698,7 +1698,7 @@ function useAudienceMode(input) {
|
|
|
1698
1698
|
}
|
|
1699
1699
|
channel.onmessage = (event) => {
|
|
1700
1700
|
const data = event.data;
|
|
1701
|
-
if (!
|
|
1701
|
+
if (!chunkDHNQHQ66_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
|
|
1702
1702
|
return;
|
|
1703
1703
|
}
|
|
1704
1704
|
if (expectedSessionId && data.sessionId !== expectedSessionId) {
|
|
@@ -1713,7 +1713,7 @@ function useAudienceMode(input) {
|
|
|
1713
1713
|
}
|
|
1714
1714
|
if (data.type === "presenter-exit") {
|
|
1715
1715
|
if (expectedSessionId) {
|
|
1716
|
-
void
|
|
1716
|
+
void chunkDHNQHQ66_js.clearAudienceContent(expectedSessionId);
|
|
1717
1717
|
}
|
|
1718
1718
|
onSetMode("edit");
|
|
1719
1719
|
try {
|
|
@@ -1724,7 +1724,7 @@ function useAudienceMode(input) {
|
|
|
1724
1724
|
};
|
|
1725
1725
|
if (expectedSessionId) {
|
|
1726
1726
|
channel.postMessage({
|
|
1727
|
-
origin:
|
|
1727
|
+
origin: chunkDHNQHQ66_js.PRESENTATION_MESSAGE_ORIGIN,
|
|
1728
1728
|
type: "audience-ready",
|
|
1729
1729
|
sessionId: expectedSessionId
|
|
1730
1730
|
});
|
|
@@ -1989,7 +1989,7 @@ function handlePresentationActionImpl(action, deps) {
|
|
|
1989
1989
|
return;
|
|
1990
1990
|
}
|
|
1991
1991
|
if (action.url && !actionStr.includes("hlinksldjump")) {
|
|
1992
|
-
if (
|
|
1992
|
+
if (chunkDHNQHQ66_js.isUrlSafe(action.url)) {
|
|
1993
1993
|
window.open(action.url, "_blank", "noopener,noreferrer");
|
|
1994
1994
|
}
|
|
1995
1995
|
}
|
|
@@ -1999,7 +1999,7 @@ function handlePresentationActionImpl(action, deps) {
|
|
|
1999
1999
|
function executeSlideTransition(nextSlideIndex, deps) {
|
|
2000
2000
|
const incomingSlide = deps.slides[nextSlideIndex];
|
|
2001
2001
|
const transition = incomingSlide?.transition;
|
|
2002
|
-
const durationMs = deps.playTransition ?
|
|
2002
|
+
const durationMs = deps.playTransition ? chunkDHNQHQ66_js.resolveTransitionDurationMs(transition) : 0;
|
|
2003
2003
|
deps.clearPresentationTimers();
|
|
2004
2004
|
deps.setPresentationSlideIndex(nextSlideIndex);
|
|
2005
2005
|
deps.onSetActiveSlideIndex(nextSlideIndex);
|
|
@@ -2245,17 +2245,17 @@ function useZoomNavigation(input) {
|
|
|
2245
2245
|
};
|
|
2246
2246
|
}
|
|
2247
2247
|
function usePresenterConsole(slideIndex) {
|
|
2248
|
-
const timerRef = React4.useRef(
|
|
2249
|
-
const [snapshot, setSnapshot] = React4.useState(() =>
|
|
2248
|
+
const timerRef = React4.useRef(chunkDHNQHQ66_js.createPresenterTimer());
|
|
2249
|
+
const [snapshot, setSnapshot] = React4.useState(() => chunkDHNQHQ66_js.createInitialPresentationSnapshot(slideIndex));
|
|
2250
2250
|
const patch = React4.useCallback((value) => {
|
|
2251
|
-
setSnapshot((current) =>
|
|
2251
|
+
setSnapshot((current) => chunkDHNQHQ66_js.mergePresentationSnapshot(current, value));
|
|
2252
2252
|
}, []);
|
|
2253
2253
|
React4.useEffect(() => patch({ slideIndex }), [patch, slideIndex]);
|
|
2254
2254
|
React4.useEffect(() => {
|
|
2255
2255
|
const timer = window.setInterval(() => {
|
|
2256
2256
|
patch({
|
|
2257
2257
|
paused: timerRef.current.paused,
|
|
2258
|
-
elapsedMs:
|
|
2258
|
+
elapsedMs: chunkDHNQHQ66_js.presenterElapsed(timerRef.current)
|
|
2259
2259
|
});
|
|
2260
2260
|
}, 1e3);
|
|
2261
2261
|
return () => window.clearInterval(timer);
|
|
@@ -2265,19 +2265,19 @@ function usePresenterConsole(slideIndex) {
|
|
|
2265
2265
|
applyAudienceSnapshot: setSnapshot,
|
|
2266
2266
|
setBlackout: (blackout) => patch({ blackout }),
|
|
2267
2267
|
toggleTimer: () => {
|
|
2268
|
-
timerRef.current =
|
|
2268
|
+
timerRef.current = chunkDHNQHQ66_js.togglePresenterTimer(timerRef.current);
|
|
2269
2269
|
patch({
|
|
2270
2270
|
paused: timerRef.current.paused,
|
|
2271
|
-
elapsedMs:
|
|
2271
|
+
elapsedMs: chunkDHNQHQ66_js.presenterElapsed(timerRef.current)
|
|
2272
2272
|
});
|
|
2273
2273
|
},
|
|
2274
2274
|
resetTimer: () => {
|
|
2275
|
-
timerRef.current =
|
|
2275
|
+
timerRef.current = chunkDHNQHQ66_js.resetPresenterTimer();
|
|
2276
2276
|
patch({ paused: false, elapsedMs: 0 });
|
|
2277
2277
|
},
|
|
2278
2278
|
stepZoom: (direction) => setSnapshot(
|
|
2279
|
-
(current) =>
|
|
2280
|
-
zoom:
|
|
2279
|
+
(current) => chunkDHNQHQ66_js.mergePresentationSnapshot(current, {
|
|
2280
|
+
zoom: chunkDHNQHQ66_js.stepPresenterZoom(
|
|
2281
2281
|
current.zoom ?? { scale: 1, originX: 0.5, originY: 0.5 },
|
|
2282
2282
|
direction
|
|
2283
2283
|
)
|
|
@@ -2845,7 +2845,7 @@ function findInSlides(slides, findQuery, findMatchCase) {
|
|
|
2845
2845
|
const normalised = findMatchCase ? findQuery : findQuery.toLowerCase();
|
|
2846
2846
|
slides.forEach((slide, slideIndex) => {
|
|
2847
2847
|
for (const element of slide.elements || []) {
|
|
2848
|
-
if (!
|
|
2848
|
+
if (!chunkHUD73YBT_js.hasTextProperties(element)) {
|
|
2849
2849
|
continue;
|
|
2850
2850
|
}
|
|
2851
2851
|
const segments = element.textSegments ?? [];
|
|
@@ -2896,7 +2896,7 @@ function applyFindReplacements(slides, toReplace, replaceQuery) {
|
|
|
2896
2896
|
continue;
|
|
2897
2897
|
}
|
|
2898
2898
|
const element = slide.elements[elIdx];
|
|
2899
|
-
if (!
|
|
2899
|
+
if (!chunkHUD73YBT_js.hasTextProperties(element)) {
|
|
2900
2900
|
continue;
|
|
2901
2901
|
}
|
|
2902
2902
|
const segments = [...element.textSegments ?? []];
|
|
@@ -3784,12 +3784,12 @@ function useViewerState(input) {
|
|
|
3784
3784
|
function partitionTemplateElements(slides) {
|
|
3785
3785
|
const templateElementsBySlideId = {};
|
|
3786
3786
|
const nextSlides = slides.map((slide) => {
|
|
3787
|
-
const template = slide.elements.filter((el) =>
|
|
3787
|
+
const template = slide.elements.filter((el) => chunkDHNQHQ66_js.isTemplateElement(el));
|
|
3788
3788
|
if (template.length === 0) {
|
|
3789
3789
|
return slide;
|
|
3790
3790
|
}
|
|
3791
3791
|
templateElementsBySlideId[slide.id] = template;
|
|
3792
|
-
return { ...slide, elements: slide.elements.filter((el) => !
|
|
3792
|
+
return { ...slide, elements: slide.elements.filter((el) => !chunkDHNQHQ66_js.isTemplateElement(el)) };
|
|
3793
3793
|
});
|
|
3794
3794
|
return { slides: nextSlides, templateElementsBySlideId };
|
|
3795
3795
|
}
|
|
@@ -3863,7 +3863,7 @@ function useLoadContent({
|
|
|
3863
3863
|
);
|
|
3864
3864
|
}
|
|
3865
3865
|
const previousHandler = handlerRef.current;
|
|
3866
|
-
const handler = new
|
|
3866
|
+
const handler = new chunkHUD73YBT_js.PptxHandler();
|
|
3867
3867
|
const parsed = await handler.load(buffer, {
|
|
3868
3868
|
// PowerPoint supports externally linked pictures. The project upload is
|
|
3869
3869
|
// already security-scanned; allow the browser viewer to retain those
|
|
@@ -3880,7 +3880,7 @@ function useLoadContent({
|
|
|
3880
3880
|
handlerRef.current = null;
|
|
3881
3881
|
const mediaElements = [];
|
|
3882
3882
|
for (const slide of parsed.slides) {
|
|
3883
|
-
|
|
3883
|
+
chunkDHNQHQ66_js.collectMediaElements(slide.elements, mediaElements);
|
|
3884
3884
|
}
|
|
3885
3885
|
for (const url of mediaDataUrls.values()) {
|
|
3886
3886
|
if (url.startsWith("blob:")) {
|
|
@@ -3921,7 +3921,7 @@ function useLoadContent({
|
|
|
3921
3921
|
}
|
|
3922
3922
|
})
|
|
3923
3923
|
);
|
|
3924
|
-
const { paths: imagePaths, refs: imageRefs } =
|
|
3924
|
+
const { paths: imagePaths, refs: imageRefs } = chunkDHNQHQ66_js.collectImagePaths(parsed.slides);
|
|
3925
3925
|
let nextSlides = parsed.slides;
|
|
3926
3926
|
if (imagePaths.size > 0) {
|
|
3927
3927
|
const resolvedMap = /* @__PURE__ */ new Map();
|
|
@@ -4010,7 +4010,7 @@ function useLoadContent({
|
|
|
4010
4010
|
setHasMacros(parsed.hasMacros === true);
|
|
4011
4011
|
setHasDigitalSignatures(parsed.hasDigitalSignatures === true);
|
|
4012
4012
|
setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
|
|
4013
|
-
setGuides(
|
|
4013
|
+
setGuides(chunkDHNQHQ66_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
|
|
4014
4014
|
setActiveSlideIndex(0);
|
|
4015
4015
|
clearSelection();
|
|
4016
4016
|
setIsDirty(false);
|
|
@@ -4018,7 +4018,7 @@ function useLoadContent({
|
|
|
4018
4018
|
onContentApplied?.();
|
|
4019
4019
|
} catch (err) {
|
|
4020
4020
|
if (!cancelled && token === renderTokenRef.current) {
|
|
4021
|
-
if (err instanceof
|
|
4021
|
+
if (err instanceof chunkHUD73YBT_js.EncryptedFileError) {
|
|
4022
4022
|
setIsEncrypted(true);
|
|
4023
4023
|
} else {
|
|
4024
4024
|
setError(err instanceof Error ? err.message : String(err));
|
|
@@ -4095,7 +4095,7 @@ function useAutosave(input) {
|
|
|
4095
4095
|
isSavingRef.current = false;
|
|
4096
4096
|
return;
|
|
4097
4097
|
}
|
|
4098
|
-
await
|
|
4098
|
+
await chunkDHNQHQ66_js.saveAutosaveSnapshot(filePathRef.current, data);
|
|
4099
4099
|
setAutosaveStatus({ state: "saved", timestamp: Date.now() });
|
|
4100
4100
|
} catch (err) {
|
|
4101
4101
|
setAutosaveStatus({
|
|
@@ -4136,7 +4136,7 @@ function cn(...inputs) {
|
|
|
4136
4136
|
|
|
4137
4137
|
// src/viewer/utils/text-utils.tsx
|
|
4138
4138
|
function getTextStyleForElement(element, fallbackColor) {
|
|
4139
|
-
if (!
|
|
4139
|
+
if (!chunkHUD73YBT_js.hasTextProperties(element)) {
|
|
4140
4140
|
return { color: fallbackColor };
|
|
4141
4141
|
}
|
|
4142
4142
|
const textDecorationTokens = [];
|
|
@@ -4150,7 +4150,7 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
4150
4150
|
const textDecorationStyle = isDoubleStrike ? "double" : void 0;
|
|
4151
4151
|
const hasItalicRuns = element.textStyle?.italic || Boolean(element.textSegments?.some((segment) => segment.style?.italic));
|
|
4152
4152
|
const isRtl = element.textStyle?.rtl === true;
|
|
4153
|
-
const resolvedTextColor = element.textStyle?.hyperlink ?
|
|
4153
|
+
const resolvedTextColor = element.textStyle?.hyperlink ? chunkDHNQHQ66_js.normalizeHexColor(element.textStyle?.color, HYPERLINK_COLOR) : chunkDHNQHQ66_js.normalizeHexColor(element.textStyle?.color, fallbackColor);
|
|
4154
4154
|
const bodyTop = element.textStyle?.bodyInsetTop ?? DEFAULT_BODY_INSET_TB_PX;
|
|
4155
4155
|
const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
|
|
4156
4156
|
const bodyLeft = element.textStyle?.bodyInsetLeft ?? DEFAULT_BODY_INSET_LR_PX;
|
|
@@ -4159,15 +4159,15 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
4159
4159
|
const bodyParagraphMarginLeft = hasParagraphIndents ? 0 : element.textStyle?.paragraphMarginLeft ?? 0;
|
|
4160
4160
|
const bodyParagraphMarginRight = hasParagraphIndents ? 0 : element.textStyle?.paragraphMarginRight ?? 0;
|
|
4161
4161
|
const bodyParagraphIndent = hasParagraphIndents ? 0 : element.textStyle?.paragraphIndent ?? 0;
|
|
4162
|
-
const writingMode =
|
|
4163
|
-
const textOrientation =
|
|
4164
|
-
const verticalDirection =
|
|
4162
|
+
const writingMode = chunkDHNQHQ66_js.toCssWritingMode(element.textStyle?.textDirection);
|
|
4163
|
+
const textOrientation = chunkDHNQHQ66_js.toCssTextOrientation(element.textStyle?.textDirection);
|
|
4164
|
+
const verticalDirection = chunkDHNQHQ66_js.toCssVerticalDirection(element.textStyle?.textDirection);
|
|
4165
4165
|
const resolvedDirection = verticalDirection || (isRtl ? "rtl" : "ltr");
|
|
4166
4166
|
const resolvedUnicodeBidi = isRtl ? "plaintext" : void 0;
|
|
4167
4167
|
const hasSegments = (element.textSegments?.length ?? 0) > 0;
|
|
4168
4168
|
return {
|
|
4169
4169
|
color: resolvedTextColor,
|
|
4170
|
-
backgroundColor: !hasSegments && element.textStyle?.highlightColor ?
|
|
4170
|
+
backgroundColor: !hasSegments && element.textStyle?.highlightColor ? chunkDHNQHQ66_js.normalizeHexColor(element.textStyle.highlightColor, void 0) : void 0,
|
|
4171
4171
|
textAlign: (() => {
|
|
4172
4172
|
const a = element.textStyle?.align;
|
|
4173
4173
|
if (a === "justLow" || a === "dist" || a === "thaiDist") {
|
|
@@ -4183,7 +4183,7 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
4183
4183
|
textDecorationLine: textDecorationTokens.length > 0 ? textDecorationTokens.join(" ") : "none",
|
|
4184
4184
|
textDecorationStyle,
|
|
4185
4185
|
fontFamily: element.textStyle?.fontFamily || DEFAULT_FONT_FAMILY,
|
|
4186
|
-
lineHeight:
|
|
4186
|
+
lineHeight: chunkDHNQHQ66_js.resolveLineHeight(element.textStyle, hasItalicRuns),
|
|
4187
4187
|
paddingTop: bodyTop + (hasItalicRuns ? 1 : 0),
|
|
4188
4188
|
paddingBottom: bodyBottom + (hasItalicRuns ? 1 : 0),
|
|
4189
4189
|
paddingLeft: bodyLeft + bodyParagraphMarginLeft,
|
|
@@ -4196,7 +4196,7 @@ function getTextStyleForElement(element, fallbackColor) {
|
|
|
4196
4196
|
// Auto-fit: use OOXML-provided fontScale/lnSpcReduction when available,
|
|
4197
4197
|
// otherwise fall back to heuristic estimation. The pure font-scale maths
|
|
4198
4198
|
// now lives in pptx-viewer-shared (computeAutoFitTextStyle).
|
|
4199
|
-
...
|
|
4199
|
+
...chunkDHNQHQ66_js.computeAutoFitTextStyle({
|
|
4200
4200
|
textStyle: element.textStyle,
|
|
4201
4201
|
text: element.text ?? "",
|
|
4202
4202
|
width: element.width,
|
|
@@ -4230,13 +4230,13 @@ function computeTabSize(tabStops, defaultTabSize) {
|
|
|
4230
4230
|
return avgGap > 0 ? `${Math.round(avgGap)}px` : fromDefault;
|
|
4231
4231
|
}
|
|
4232
4232
|
function getTextLayoutStyle(element) {
|
|
4233
|
-
if (!
|
|
4233
|
+
if (!chunkHUD73YBT_js.hasTextProperties(element)) {
|
|
4234
4234
|
return {};
|
|
4235
4235
|
}
|
|
4236
4236
|
const verticalAlign = element.textStyle?.vAlign || "top";
|
|
4237
|
-
const writingMode =
|
|
4238
|
-
const textOrientation =
|
|
4239
|
-
const verticalDirection =
|
|
4237
|
+
const writingMode = chunkDHNQHQ66_js.toCssWritingMode(element.textStyle?.textDirection);
|
|
4238
|
+
const textOrientation = chunkDHNQHQ66_js.toCssTextOrientation(element.textStyle?.textDirection);
|
|
4239
|
+
const verticalDirection = chunkDHNQHQ66_js.toCssVerticalDirection(element.textStyle?.textDirection);
|
|
4240
4240
|
const parsedColumnCount = Number(element.textStyle?.columnCount);
|
|
4241
4241
|
const columnCount = Number.isFinite(parsedColumnCount) ? Math.max(1, Math.min(16, Math.round(parsedColumnCount))) : 1;
|
|
4242
4242
|
const hasColumns = columnCount > 1;
|
|
@@ -4244,7 +4244,7 @@ function getTextLayoutStyle(element) {
|
|
|
4244
4244
|
const tabStops = element.textStyle?.tabStops;
|
|
4245
4245
|
const tabSize = computeTabSize(tabStops, element.textStyle?.defaultTabSize);
|
|
4246
4246
|
const textWrapNone = element.textStyle?.textWrap === "none";
|
|
4247
|
-
const hasParagraphIndents =
|
|
4247
|
+
const hasParagraphIndents = chunkHUD73YBT_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
|
|
4248
4248
|
const paragraphMarginLeft = element.textStyle?.paragraphMarginLeft;
|
|
4249
4249
|
const paragraphIndent = element.textStyle?.paragraphIndent;
|
|
4250
4250
|
const marginLeft = !hasParagraphIndents && typeof paragraphMarginLeft === "number" && paragraphMarginLeft !== 0 ? paragraphMarginLeft : void 0;
|
|
@@ -4253,7 +4253,7 @@ function getTextLayoutStyle(element) {
|
|
|
4253
4253
|
const bodyBottom = element.textStyle?.bodyInsetBottom ?? DEFAULT_BODY_INSET_TB_PX;
|
|
4254
4254
|
const parsedColumnSpacing = Number(element.textStyle?.columnSpacing);
|
|
4255
4255
|
const columnGap = Number.isFinite(parsedColumnSpacing) && parsedColumnSpacing > 0 ? `${parsedColumnSpacing}px` : "0.75em";
|
|
4256
|
-
const kinsokuStyles =
|
|
4256
|
+
const kinsokuStyles = chunkDHNQHQ66_js.getKinsokuLineBreakStyles(element.textStyle);
|
|
4257
4257
|
if (hasColumns) {
|
|
4258
4258
|
return {
|
|
4259
4259
|
display: "block",
|
|
@@ -4300,10 +4300,10 @@ function getTextLayoutStyle(element) {
|
|
|
4300
4300
|
|
|
4301
4301
|
// src/viewer/utils/text-effects.tsx
|
|
4302
4302
|
function buildTextFillCss2(style) {
|
|
4303
|
-
return
|
|
4303
|
+
return chunkDHNQHQ66_js.buildTextFillCss(style);
|
|
4304
4304
|
}
|
|
4305
4305
|
function buildTextBody3DSceneStyle2(textStyle) {
|
|
4306
|
-
return
|
|
4306
|
+
return chunkDHNQHQ66_js.buildTextBody3DSceneStyle(textStyle);
|
|
4307
4307
|
}
|
|
4308
4308
|
|
|
4309
4309
|
// src/viewer/utils/text-warp-css.tsx
|
|
@@ -4488,17 +4488,17 @@ function wrapWithTextBuildAnimation(elementId, paraIndex, renderedSegments, para
|
|
|
4488
4488
|
if (!subElementAnimStates || subElementAnimStates.size === 0) {
|
|
4489
4489
|
return renderedSegments;
|
|
4490
4490
|
}
|
|
4491
|
-
const paraKey = `${elementId}${
|
|
4491
|
+
const paraKey = `${elementId}${chunkDHNQHQ66_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
|
|
4492
4492
|
const paraState = subElementAnimStates.get(paraKey);
|
|
4493
4493
|
if (paraState) {
|
|
4494
4494
|
const style = buildAnimStyle(paraState);
|
|
4495
4495
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { "data-anim-id": paraKey, style: { display: "inline", ...style }, children: renderedSegments }, paraKey);
|
|
4496
4496
|
}
|
|
4497
|
-
const firstWordKey = `${elementId}${
|
|
4497
|
+
const firstWordKey = `${elementId}${chunkDHNQHQ66_js.TEXT_BUILD_ID_SEP}w${paraIndex}-0`;
|
|
4498
4498
|
if (subElementAnimStates.has(firstWordKey)) {
|
|
4499
4499
|
return wrapByWord(elementId, paraIndex, paraSegments, subElementAnimStates);
|
|
4500
4500
|
}
|
|
4501
|
-
const firstCharKey = `${elementId}${
|
|
4501
|
+
const firstCharKey = `${elementId}${chunkDHNQHQ66_js.TEXT_BUILD_ID_SEP}c${paraIndex}-0`;
|
|
4502
4502
|
if (subElementAnimStates.has(firstCharKey)) {
|
|
4503
4503
|
return wrapByChar(elementId, paraIndex, paraSegments, subElementAnimStates);
|
|
4504
4504
|
}
|
|
@@ -4519,7 +4519,7 @@ function wrapByWord(elementId, paraIndex, paraSegments, states) {
|
|
|
4519
4519
|
nodes.push(/* @__PURE__ */ jsxRuntime.jsx(React4__default.default.Fragment, { children: w }, `ws-${i}`));
|
|
4520
4520
|
continue;
|
|
4521
4521
|
}
|
|
4522
|
-
const key = `${elementId}${
|
|
4522
|
+
const key = `${elementId}${chunkDHNQHQ66_js.TEXT_BUILD_ID_SEP}w${paraIndex}-${wordIdx}`;
|
|
4523
4523
|
const state = states.get(key);
|
|
4524
4524
|
const style = buildAnimStyle(state);
|
|
4525
4525
|
nodes.push(
|
|
@@ -4533,7 +4533,7 @@ function wrapByChar(elementId, paraIndex, paraSegments, states) {
|
|
|
4533
4533
|
const fullText = paraSegments.map((e) => e.segment.text).join("");
|
|
4534
4534
|
const nodes = [];
|
|
4535
4535
|
for (let i = 0; i < fullText.length; i++) {
|
|
4536
|
-
const key = `${elementId}${
|
|
4536
|
+
const key = `${elementId}${chunkDHNQHQ66_js.TEXT_BUILD_ID_SEP}c${paraIndex}-${i}`;
|
|
4537
4537
|
const state = states.get(key);
|
|
4538
4538
|
const style = buildAnimStyle(state);
|
|
4539
4539
|
nodes.push(
|
|
@@ -4679,10 +4679,10 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
|
|
|
4679
4679
|
if (!needsScriptFonts || !text) {
|
|
4680
4680
|
return text;
|
|
4681
4681
|
}
|
|
4682
|
-
const runs =
|
|
4682
|
+
const runs = chunkDHNQHQ66_js.segmentByScript(text);
|
|
4683
4683
|
if (runs.length <= 1) {
|
|
4684
4684
|
if (runs.length === 1) {
|
|
4685
|
-
const font =
|
|
4685
|
+
const font = chunkDHNQHQ66_js.resolveFontForScript(runs[0].script, scriptFonts);
|
|
4686
4686
|
if (font && font !== baseFontFamily) {
|
|
4687
4687
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontFamily: font }, children: text });
|
|
4688
4688
|
}
|
|
@@ -4690,7 +4690,7 @@ function renderScriptAwareText(text, needsScriptFonts, scriptFonts, baseFontFami
|
|
|
4690
4690
|
return text;
|
|
4691
4691
|
}
|
|
4692
4692
|
return runs.map((run, i) => {
|
|
4693
|
-
const font =
|
|
4693
|
+
const font = chunkDHNQHQ66_js.resolveFontForScript(run.script, scriptFonts);
|
|
4694
4694
|
if (!font || font === baseFontFamily) {
|
|
4695
4695
|
return /* @__PURE__ */ jsxRuntime.jsx(React4__default.default.Fragment, { children: run.text }, `${keyPrefix}-r${i}`);
|
|
4696
4696
|
}
|
|
@@ -4762,8 +4762,8 @@ function renderSegmentContent(elementId, segmentIndex, textValue, lines, needsSc
|
|
|
4762
4762
|
);
|
|
4763
4763
|
}
|
|
4764
4764
|
function renderEquationSegment(elementId, segmentIndex, equationXml, equationNumber) {
|
|
4765
|
-
const mathml =
|
|
4766
|
-
const safeMathml = mathml ?
|
|
4765
|
+
const mathml = chunkDHNQHQ66_js.convertOmmlToMathMl(equationXml);
|
|
4766
|
+
const safeMathml = mathml ? chunkDHNQHQ66_js.sanitizeMathMl(mathml) : "";
|
|
4767
4767
|
const equationContent = safeMathml ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4768
4768
|
"span",
|
|
4769
4769
|
{
|
|
@@ -4813,7 +4813,7 @@ function renderEquationSegment(elementId, segmentIndex, equationXml, equationNum
|
|
|
4813
4813
|
return /* @__PURE__ */ jsxRuntime.jsx("span", { children: equationContent }, `${elementId}-seg-${segmentIndex}`);
|
|
4814
4814
|
}
|
|
4815
4815
|
function renderPictureBullet(elementId, segmentIndex, bulletInfo, baseFontSize) {
|
|
4816
|
-
const picture =
|
|
4816
|
+
const picture = chunkDHNQHQ66_js.resolvePictureBullet(bulletInfo, baseFontSize) ?? {
|
|
4817
4817
|
sizePx: baseFontSize,
|
|
4818
4818
|
fallbackMarker: "\u2022",
|
|
4819
4819
|
accessibleLabel: "Bullet"
|
|
@@ -4863,7 +4863,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4863
4863
|
);
|
|
4864
4864
|
}
|
|
4865
4865
|
const segmentStyle = segment.style || {};
|
|
4866
|
-
const textValue =
|
|
4866
|
+
const textValue = chunkDHNQHQ66_js.substituteFieldText(segment.text || "", segment.fieldType, fieldContext);
|
|
4867
4867
|
const lines = textValue.split("\n");
|
|
4868
4868
|
const textDecorationTokens = [];
|
|
4869
4869
|
if (segmentStyle.underline || segmentStyle.hyperlink) {
|
|
@@ -4873,8 +4873,8 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4873
4873
|
textDecorationTokens.push("line-through");
|
|
4874
4874
|
}
|
|
4875
4875
|
const isDoubleStrike = segmentStyle.strikethrough && segmentStyle.strikeType === "dblStrike";
|
|
4876
|
-
const resolvedSegmentColor = segmentStyle.hyperlink ?
|
|
4877
|
-
const underlineDecoration =
|
|
4876
|
+
const resolvedSegmentColor = segmentStyle.hyperlink ? chunkDHNQHQ66_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, HYPERLINK_COLOR) : chunkDHNQHQ66_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, fallbackColor);
|
|
4877
|
+
const underlineDecoration = chunkDHNQHQ66_js.resolveUnderlineDecorationStyle(
|
|
4878
4878
|
Boolean(isDoubleStrike),
|
|
4879
4879
|
segmentStyle.underlineStyle
|
|
4880
4880
|
);
|
|
@@ -4890,14 +4890,14 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4890
4890
|
const baseFontSizePt = baseFontSize * (72 / 96);
|
|
4891
4891
|
const fontKerning = typeof segmentStyle.kerning === "number" ? segmentStyle.kerning === 0 ? "none" : baseFontSizePt >= segmentStyle.kerning / 100 ? "normal" : "none" : void 0;
|
|
4892
4892
|
const rawFontFamily = segmentStyle.fontFamily || element.textStyle?.fontFamily;
|
|
4893
|
-
const baseFontFamily = rawFontFamily ?
|
|
4893
|
+
const baseFontFamily = rawFontFamily ? chunkHUD73YBT_js.getSubstituteFontFamily(rawFontFamily) : DEFAULT_FONT_FAMILY;
|
|
4894
4894
|
const scriptFonts = {
|
|
4895
4895
|
latin: baseFontFamily,
|
|
4896
4896
|
eastAsia: segmentStyle.eastAsiaFont || element.textStyle?.eastAsiaFont || baseFontFamily,
|
|
4897
4897
|
complexScript: segmentStyle.complexScriptFont || element.textStyle?.complexScriptFont || baseFontFamily,
|
|
4898
4898
|
symbol: segmentStyle.symbolFont || element.textStyle?.symbolFont || baseFontFamily
|
|
4899
4899
|
};
|
|
4900
|
-
const needsScriptFonts =
|
|
4900
|
+
const needsScriptFonts = chunkDHNQHQ66_js.hasDistinctScriptFonts(scriptFonts);
|
|
4901
4901
|
const spanStyle = {
|
|
4902
4902
|
color: resolvedSegmentColor,
|
|
4903
4903
|
fontSize: baseFontSize * baselineFontScale,
|
|
@@ -4915,15 +4915,15 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4915
4915
|
fontVariantCaps: segmentStyle.textCaps === "small" ? "small-caps" : void 0,
|
|
4916
4916
|
letterSpacing,
|
|
4917
4917
|
fontKerning,
|
|
4918
|
-
backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ?
|
|
4918
|
+
backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ? chunkDHNQHQ66_js.normalizeHexColor(segmentStyle.highlightColor, "transparent") : void 0,
|
|
4919
4919
|
...textFillStyles,
|
|
4920
|
-
textDecorationColor: segmentStyle.underlineColor ?
|
|
4921
|
-
WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${
|
|
4920
|
+
textDecorationColor: segmentStyle.underlineColor ? chunkDHNQHQ66_js.normalizeHexColor(segmentStyle.underlineColor, void 0) : void 0,
|
|
4921
|
+
WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${chunkDHNQHQ66_js.normalizeHexColor(segmentStyle.textOutlineColor, "#000000")}` : segmentStyle.textOutlineWidth ? `${segmentStyle.textOutlineWidth}px currentColor` : void 0,
|
|
4922
4922
|
paintOrder: segmentStyle.textOutlineWidth ? "stroke fill" : void 0,
|
|
4923
|
-
textShadow:
|
|
4924
|
-
filter:
|
|
4925
|
-
opacity:
|
|
4926
|
-
WebkitBoxReflect:
|
|
4923
|
+
textShadow: chunkDHNQHQ66_js.buildTextShadowCss(segmentStyle),
|
|
4924
|
+
filter: chunkDHNQHQ66_js.buildTextRunFilterChain(segmentStyle),
|
|
4925
|
+
opacity: chunkDHNQHQ66_js.getTextAlphaOpacity(segmentStyle),
|
|
4926
|
+
WebkitBoxReflect: chunkDHNQHQ66_js.buildTextReflectionCss(segmentStyle)
|
|
4927
4927
|
};
|
|
4928
4928
|
const runRtl = segmentStyle.rtl;
|
|
4929
4929
|
if (runRtl !== void 0 && runRtl !== paragraphRtl) {
|
|
@@ -4949,7 +4949,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4949
4949
|
spanStyle.fontSize = baseFontSize * (bulletInfo.sizePercent / 100) * baselineFontScale;
|
|
4950
4950
|
}
|
|
4951
4951
|
if (bulletInfo.color) {
|
|
4952
|
-
spanStyle.color =
|
|
4952
|
+
spanStyle.color = chunkDHNQHQ66_js.normalizeHexColor(bulletInfo.color, resolvedSegmentColor);
|
|
4953
4953
|
}
|
|
4954
4954
|
}
|
|
4955
4955
|
if (bulletInfo?.imageDataUrl || bulletInfo?.imageRelId) {
|
|
@@ -4989,7 +4989,7 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
|
|
|
4989
4989
|
textAlign: segment.rubyAlignment === "l" ? "left" : segment.rubyAlignment === "r" ? "right" : segment.rubyAlignment === "dist" || segment.rubyAlignment === "distCat" || segment.rubyAlignment === "distLetter" ? "justify" : "center"
|
|
4990
4990
|
};
|
|
4991
4991
|
if (segment.rubyStyle?.color) {
|
|
4992
|
-
rubyStyle.color =
|
|
4992
|
+
rubyStyle.color = chunkDHNQHQ66_js.normalizeHexColor(segment.rubyStyle.color, resolvedSegmentColor);
|
|
4993
4993
|
}
|
|
4994
4994
|
innerContent = /* @__PURE__ */ jsxRuntime.jsxs("ruby", { children: [
|
|
4995
4995
|
baseContent,
|
|
@@ -5084,7 +5084,7 @@ function groupSegmentsIntoParagraphs(segments) {
|
|
|
5084
5084
|
return paragraphs;
|
|
5085
5085
|
}
|
|
5086
5086
|
function renderTextSegments(element, fallbackColor, emptyFallback, findHighlights, onHyperlinkClick, fieldContext, subElementAnimStates, segmentOverrides, requireCtrlClick) {
|
|
5087
|
-
if (!
|
|
5087
|
+
if (!chunkHUD73YBT_js.hasTextProperties(element)) {
|
|
5088
5088
|
return emptyFallback || null;
|
|
5089
5089
|
}
|
|
5090
5090
|
const effectiveSegments = segmentOverrides ?? element.textSegments;
|
|
@@ -5105,10 +5105,10 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
5105
5105
|
return element.text || emptyFallback || "";
|
|
5106
5106
|
}
|
|
5107
5107
|
const paragraphs = groupSegmentsIntoParagraphs(effectiveSegments);
|
|
5108
|
-
const paragraphIndents =
|
|
5109
|
-
const elementRtl =
|
|
5110
|
-
const elementAlign =
|
|
5111
|
-
const bodyStyle =
|
|
5108
|
+
const paragraphIndents = chunkHUD73YBT_js.hasTextProperties(element) ? element.paragraphIndents : void 0;
|
|
5109
|
+
const elementRtl = chunkHUD73YBT_js.hasTextProperties(element) ? element.textStyle?.rtl : void 0;
|
|
5110
|
+
const elementAlign = chunkHUD73YBT_js.hasTextProperties(element) ? element.textStyle?.align : void 0;
|
|
5111
|
+
const bodyStyle = chunkHUD73YBT_js.hasTextProperties(element) ? element.textStyle : void 0;
|
|
5112
5112
|
const spaceFirstLast = bodyStyle?.spaceFirstLastParagraph === true;
|
|
5113
5113
|
return paragraphs.map((paraSegments, paraIndex) => {
|
|
5114
5114
|
const paraIndent = paragraphIndents?.[paraIndex];
|
|
@@ -5128,14 +5128,14 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
|
|
|
5128
5128
|
return Boolean(segment.text) && segment.text.trim().length > 0;
|
|
5129
5129
|
});
|
|
5130
5130
|
const hasBullet = bulletInfo && !bulletInfo.none && hasVisibleTextContent && !hasDuplicateAuthoredAutoNumber;
|
|
5131
|
-
const paraRtl =
|
|
5131
|
+
const paraRtl = chunkDHNQHQ66_js.resolveParagraphRtl(paraSegments, elementRtl);
|
|
5132
5132
|
const isRtlParagraph = paraRtl === true;
|
|
5133
|
-
const paraAlign =
|
|
5134
|
-
const cssTextAlign =
|
|
5133
|
+
const paraAlign = chunkDHNQHQ66_js.resolveParagraphAlign(paraSegments, elementAlign);
|
|
5134
|
+
const cssTextAlign = chunkDHNQHQ66_js.resolveCssTextAlign(paraAlign, isRtlParagraph);
|
|
5135
5135
|
const paraMarginLeft = isRtlParagraph ? void 0 : rawMarginLeft;
|
|
5136
5136
|
const paraMarginRight = isRtlParagraph ? rawMarginLeft : void 0;
|
|
5137
5137
|
const paraTextIndent = rawTextIndent;
|
|
5138
|
-
const paraKinsokuStyle =
|
|
5138
|
+
const paraKinsokuStyle = chunkDHNQHQ66_js.getKinsokuLineBreakStyles(firstSeg?.segment.style);
|
|
5139
5139
|
const hasParaKinsoku = Object.keys(paraKinsokuStyle).length > 0;
|
|
5140
5140
|
const paraProps = effectiveSegments[firstSeg?.globalIndex ?? -1]?.paragraphProperties;
|
|
5141
5141
|
const effectiveParaProps = {
|
|
@@ -5324,7 +5324,7 @@ function isConnectorOrLineElement(element) {
|
|
|
5324
5324
|
if (element.type === "connector") {
|
|
5325
5325
|
return true;
|
|
5326
5326
|
}
|
|
5327
|
-
if (!
|
|
5327
|
+
if (!chunkHUD73YBT_js.hasShapeProperties(element)) {
|
|
5328
5328
|
return false;
|
|
5329
5329
|
}
|
|
5330
5330
|
const st = getShapeType(element.shapeType);
|
|
@@ -5342,13 +5342,13 @@ function hexToRgbUnit(hex) {
|
|
|
5342
5342
|
};
|
|
5343
5343
|
}
|
|
5344
5344
|
function getDuotoneColors(element) {
|
|
5345
|
-
if (!
|
|
5345
|
+
if (!chunkHUD73YBT_js.isImageLikeElement(element)) {
|
|
5346
5346
|
return void 0;
|
|
5347
5347
|
}
|
|
5348
5348
|
return element.imageEffects?.duotone;
|
|
5349
5349
|
}
|
|
5350
5350
|
function buildLineShadowCss(element) {
|
|
5351
|
-
if (!
|
|
5351
|
+
if (!chunkHUD73YBT_js.hasShapeProperties(element)) {
|
|
5352
5352
|
return void 0;
|
|
5353
5353
|
}
|
|
5354
5354
|
const ss = element.shapeStyle;
|
|
@@ -5359,13 +5359,13 @@ function buildLineShadowCss(element) {
|
|
|
5359
5359
|
const offsetY = typeof ss.lineShadowOffsetY === "number" ? ss.lineShadowOffsetY : 2;
|
|
5360
5360
|
const blur = typeof ss.lineShadowBlur === "number" ? Math.max(0, ss.lineShadowBlur) : 4;
|
|
5361
5361
|
const opacity = typeof ss.lineShadowOpacity === "number" ? Math.max(0, Math.min(1, ss.lineShadowOpacity)) : 0.35;
|
|
5362
|
-
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${
|
|
5363
|
-
|
|
5362
|
+
return `${Math.round(offsetX)}px ${Math.round(offsetY)}px ${Math.round(blur)}px ${chunkDHNQHQ66_js.colorWithOpacity(
|
|
5363
|
+
chunkDHNQHQ66_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
|
|
5364
5364
|
opacity
|
|
5365
5365
|
)}`;
|
|
5366
5366
|
}
|
|
5367
5367
|
function buildLineGlowFilter(element) {
|
|
5368
|
-
if (!
|
|
5368
|
+
if (!chunkHUD73YBT_js.hasShapeProperties(element)) {
|
|
5369
5369
|
return void 0;
|
|
5370
5370
|
}
|
|
5371
5371
|
const ss = element.shapeStyle;
|
|
@@ -5374,7 +5374,7 @@ function buildLineGlowFilter(element) {
|
|
|
5374
5374
|
}
|
|
5375
5375
|
const glowOpacity = typeof ss.lineGlowOpacity === "number" ? ss.lineGlowOpacity : 0.75;
|
|
5376
5376
|
const glowRad = Math.round(Math.max(0, ss.lineGlowRadius));
|
|
5377
|
-
const glowCol =
|
|
5377
|
+
const glowCol = chunkDHNQHQ66_js.colorWithOpacity(chunkDHNQHQ66_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
|
|
5378
5378
|
return `drop-shadow(0 0 ${glowRad}px ${glowCol})`;
|
|
5379
5379
|
}
|
|
5380
5380
|
function mapDagBlendModeToCss(blend) {
|
|
@@ -5398,7 +5398,7 @@ function getDagDuotoneFilterId(elementId) {
|
|
|
5398
5398
|
return `dag-duotone-${elementId}`;
|
|
5399
5399
|
}
|
|
5400
5400
|
function hasDagDuotoneEffect(element) {
|
|
5401
|
-
if (!
|
|
5401
|
+
if (!chunkHUD73YBT_js.hasShapeProperties(element)) {
|
|
5402
5402
|
return false;
|
|
5403
5403
|
}
|
|
5404
5404
|
return Boolean(element.shapeStyle?.dagDuotone);
|
|
@@ -5461,7 +5461,7 @@ function getRoundRectRadiusPx2(element) {
|
|
|
5461
5461
|
|
|
5462
5462
|
// src/viewer/utils/shape-visual-3d.ts
|
|
5463
5463
|
function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elementHeight) {
|
|
5464
|
-
return
|
|
5464
|
+
return chunkDHNQHQ66_js.build3DExtrusionData(
|
|
5465
5465
|
shape3d,
|
|
5466
5466
|
scene3d,
|
|
5467
5467
|
fillColor,
|
|
@@ -5470,7 +5470,7 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
|
|
|
5470
5470
|
);
|
|
5471
5471
|
}
|
|
5472
5472
|
function apply3dEffects2(base, scene3d, shape3d, fillColorFallback) {
|
|
5473
|
-
|
|
5473
|
+
chunkDHNQHQ66_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
|
|
5474
5474
|
}
|
|
5475
5475
|
|
|
5476
5476
|
// src/viewer/utils/vector-subpath-paint.ts
|
|
@@ -5479,7 +5479,7 @@ function toHexByte(value) {
|
|
|
5479
5479
|
return clamped.toString(16).padStart(2, "0");
|
|
5480
5480
|
}
|
|
5481
5481
|
function shiftHex(hex, factor, towardsWhite) {
|
|
5482
|
-
const channels =
|
|
5482
|
+
const channels = chunkDHNQHQ66_js.hexToRgbChannels(hex);
|
|
5483
5483
|
if (!channels) {
|
|
5484
5484
|
return hex;
|
|
5485
5485
|
}
|
|
@@ -5505,13 +5505,13 @@ function buildCustomSubpathPaints(subpaths, hasFill, fillColor, fillOpacity) {
|
|
|
5505
5505
|
const fillOff = subpath.fillMode === "none" || !hasFill;
|
|
5506
5506
|
return {
|
|
5507
5507
|
d: subpath.d,
|
|
5508
|
-
fill: fillOff ? "none" :
|
|
5508
|
+
fill: fillOff ? "none" : chunkDHNQHQ66_js.colorWithOpacity(adjustFillForMode(fillColor, subpath.fillMode), fillOpacity),
|
|
5509
5509
|
stroked: subpath.stroke !== false
|
|
5510
5510
|
};
|
|
5511
5511
|
});
|
|
5512
5512
|
}
|
|
5513
5513
|
function getStrokeOnlyPresetPaths(element) {
|
|
5514
|
-
if (element.type !== "shape" || !
|
|
5514
|
+
if (element.type !== "shape" || !chunkHUD73YBT_js.hasShapeProperties(element)) {
|
|
5515
5515
|
return void 0;
|
|
5516
5516
|
}
|
|
5517
5517
|
const shapeType = element.shapeType;
|
|
@@ -5521,7 +5521,7 @@ function getStrokeOnlyPresetPaths(element) {
|
|
|
5521
5521
|
if (element.pathData) {
|
|
5522
5522
|
return void 0;
|
|
5523
5523
|
}
|
|
5524
|
-
const result =
|
|
5524
|
+
const result = chunkHUD73YBT_js.evaluatePresetShape(
|
|
5525
5525
|
shapeType,
|
|
5526
5526
|
Math.max(element.width, 1),
|
|
5527
5527
|
Math.max(element.height, 1),
|
|
@@ -5536,27 +5536,27 @@ function getStrokeOnlyPresetPaths(element) {
|
|
|
5536
5536
|
|
|
5537
5537
|
// src/viewer/utils/shape-visual-style.ts
|
|
5538
5538
|
function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
|
|
5539
|
-
if (!
|
|
5539
|
+
if (!chunkHUD73YBT_js.hasShapeProperties(element)) {
|
|
5540
5540
|
return {};
|
|
5541
5541
|
}
|
|
5542
5542
|
const normalizedShapeType = getShapeType(element.shapeType);
|
|
5543
|
-
const clipPath =
|
|
5543
|
+
const clipPath = chunkDHNQHQ66_js.getResolvedShapeClipPath(element);
|
|
5544
5544
|
const rendersCustomVectorPath = (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;
|
|
5545
5545
|
const rendersStrokeOnlyPreset = Boolean(getStrokeOnlyPresetPaths(element));
|
|
5546
5546
|
const fillOpacity = element.shapeStyle?.fillOpacity;
|
|
5547
5547
|
const strokeOpacity = element.shapeStyle?.strokeOpacity;
|
|
5548
|
-
const strokeDash =
|
|
5549
|
-
const fillGradient =
|
|
5550
|
-
const shadowCss =
|
|
5551
|
-
const innerShadowCss =
|
|
5552
|
-
const resolvedFillColor =
|
|
5553
|
-
const resolvedStrokeColor =
|
|
5548
|
+
const strokeDash = chunkDHNQHQ66_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
|
|
5549
|
+
const fillGradient = chunkDHNQHQ66_js.buildCssGradientFromShapeStyle(element.shapeStyle) || element.shapeStyle?.fillGradient;
|
|
5550
|
+
const shadowCss = chunkDHNQHQ66_js.buildShadowCssFromShapeStyle(element.shapeStyle);
|
|
5551
|
+
const innerShadowCss = chunkDHNQHQ66_js.buildInnerShadowCssFromShapeStyle(element.shapeStyle);
|
|
5552
|
+
const resolvedFillColor = chunkDHNQHQ66_js.colorWithOpacity(fillColor, fillOpacity);
|
|
5553
|
+
const resolvedStrokeColor = chunkDHNQHQ66_js.colorWithOpacity(strokeColor, strokeOpacity);
|
|
5554
5554
|
const ss = element.shapeStyle;
|
|
5555
5555
|
const hasFillOverlayColor = Boolean(
|
|
5556
5556
|
ss?.dagFillOverlayColor && ss.dagFillOverlayColor !== "transparent"
|
|
5557
5557
|
);
|
|
5558
5558
|
const combinedShadowParts = [];
|
|
5559
|
-
const multiLayerShadow =
|
|
5559
|
+
const multiLayerShadow = chunkDHNQHQ66_js.buildMultiLayerShadowCss(element.shapeStyle);
|
|
5560
5560
|
if (multiLayerShadow) {
|
|
5561
5561
|
combinedShadowParts.push(multiLayerShadow);
|
|
5562
5562
|
} else if (shadowCss) {
|
|
@@ -5565,7 +5565,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
5565
5565
|
if (innerShadowCss) {
|
|
5566
5566
|
combinedShadowParts.push(innerShadowCss);
|
|
5567
5567
|
}
|
|
5568
|
-
const glowBoxShadow =
|
|
5568
|
+
const glowBoxShadow = chunkDHNQHQ66_js.buildGlowBoxShadow(ss?.glowColor, ss?.glowRadius, ss?.glowOpacity);
|
|
5569
5569
|
if (glowBoxShadow) {
|
|
5570
5570
|
combinedShadowParts.push(glowBoxShadow);
|
|
5571
5571
|
}
|
|
@@ -5573,7 +5573,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
5573
5573
|
if (lineShadow) {
|
|
5574
5574
|
combinedShadowParts.push(lineShadow);
|
|
5575
5575
|
}
|
|
5576
|
-
const compoundLineShadow =
|
|
5576
|
+
const compoundLineShadow = chunkDHNQHQ66_js.getCompoundLineBoxShadow(
|
|
5577
5577
|
element.shapeStyle?.compoundLine,
|
|
5578
5578
|
strokeWidth,
|
|
5579
5579
|
resolvedStrokeColor
|
|
@@ -5586,11 +5586,11 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
5586
5586
|
if (ss?.glowColor && ss.glowColor !== "transparent" && ss.glowRadius) {
|
|
5587
5587
|
const glowOpacity = typeof ss.glowOpacity === "number" ? ss.glowOpacity : 0.75;
|
|
5588
5588
|
const glowRad = Math.round(Math.max(0, ss.glowRadius));
|
|
5589
|
-
const glowCol =
|
|
5589
|
+
const glowCol = chunkDHNQHQ66_js.colorWithOpacity(chunkDHNQHQ66_js.normalizeHexColor(ss.glowColor, "#ffff00"), glowOpacity);
|
|
5590
5590
|
filterParts.push(`drop-shadow(0 0 ${glowRad}px ${glowCol})`);
|
|
5591
5591
|
}
|
|
5592
5592
|
if (typeof ss?.softEdgeRadius === "number" && ss.softEdgeRadius > 0) {
|
|
5593
|
-
filterParts.push(`url(#${
|
|
5593
|
+
filterParts.push(`url(#${chunkDHNQHQ66_js.getSoftEdgeFilterId(element.id)})`);
|
|
5594
5594
|
}
|
|
5595
5595
|
if (typeof ss?.blurRadius === "number" && ss.blurRadius > 0) {
|
|
5596
5596
|
filterParts.push(`blur(${Math.round(ss.blurRadius)}px)`);
|
|
@@ -5599,13 +5599,13 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
5599
5599
|
if (lineGlowCss) {
|
|
5600
5600
|
filterParts.push(lineGlowCss);
|
|
5601
5601
|
}
|
|
5602
|
-
const dagFilter =
|
|
5602
|
+
const dagFilter = chunkDHNQHQ66_js.getEffectDagFilter(ss, element.id);
|
|
5603
5603
|
if (dagFilter) {
|
|
5604
5604
|
filterParts.push(dagFilter);
|
|
5605
5605
|
}
|
|
5606
5606
|
const lineJoinCss = ss?.lineJoin === "round" ? "round" : ss?.lineJoin === "bevel" ? "bevel" : ss?.lineJoin === "miter" ? "miter" : void 0;
|
|
5607
5607
|
const miterLimitCss = ss?.lineJoin === "miter" && typeof ss?.miterLimit === "number" ? Math.max(ss.miterLimit / 1e5, 1) : void 0;
|
|
5608
|
-
const patternFill =
|
|
5608
|
+
const patternFill = chunkDHNQHQ66_js.buildPatternFillCss(element.shapeStyle);
|
|
5609
5609
|
const imageFillUrl = ss?.fillMode === "image" && ss.fillImageUrl ? ss.fillImageUrl : void 0;
|
|
5610
5610
|
const imageFillMode = ss?.fillImageMode || "stretch";
|
|
5611
5611
|
let reflectCss;
|
|
@@ -5617,7 +5617,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
5617
5617
|
const endOpacity = typeof ss.reflectionEndOpacity === "number" ? ss.reflectionEndOpacity : 0;
|
|
5618
5618
|
const fadeLength = typeof ss.reflectionEndPosition === "number" ? Math.round(ss.reflectionEndPosition * Math.max(element.height, 1)) : 100;
|
|
5619
5619
|
const blurRadius = typeof ss.reflectionBlurRadius === "number" ? ss.reflectionBlurRadius : 0;
|
|
5620
|
-
reflectCss =
|
|
5620
|
+
reflectCss = chunkDHNQHQ66_js.buildReflectionCss(distance, startOpacity, endOpacity, fadeLength, blurRadius);
|
|
5621
5621
|
}
|
|
5622
5622
|
}
|
|
5623
5623
|
const base = {
|
|
@@ -5635,9 +5635,9 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
5635
5635
|
// is present, `ShapeEffectOverlay` paints a separate blended tint layer so
|
|
5636
5636
|
// the colour is actually rendered (and text/children are not tinted).
|
|
5637
5637
|
mixBlendMode: hasFillOverlayColor ? void 0 : mapDagBlendModeToCss(ss?.dagFillOverlayBlend),
|
|
5638
|
-
borderWidth: strokeWidth > 0 ?
|
|
5638
|
+
borderWidth: strokeWidth > 0 ? chunkDHNQHQ66_js.getCompoundLineBorderWidth(ss?.compoundLine, strokeWidth) : void 0,
|
|
5639
5639
|
borderColor: strokeWidth > 0 ? resolvedStrokeColor : void 0,
|
|
5640
|
-
borderStyle: strokeWidth > 0 ?
|
|
5640
|
+
borderStyle: strokeWidth > 0 ? chunkDHNQHQ66_js.getCssBorderDashStyle(strokeDash, ss?.compoundLine) : void 0,
|
|
5641
5641
|
strokeLinejoin: lineJoinCss,
|
|
5642
5642
|
strokeMiterlimit: miterLimitCss,
|
|
5643
5643
|
strokeLinecap: ss?.lineCap === "rnd" ? "round" : ss?.lineCap === "sq" ? "square" : ss?.lineCap === "flat" ? "butt" : void 0
|
|
@@ -5693,7 +5693,7 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
5693
5693
|
borderWidth: 0,
|
|
5694
5694
|
borderTopWidth: Math.max(strokeWidth, 2),
|
|
5695
5695
|
borderTopColor: resolvedStrokeColor,
|
|
5696
|
-
borderTopStyle:
|
|
5696
|
+
borderTopStyle: chunkDHNQHQ66_js.getCssBorderDashStyle(strokeDash)
|
|
5697
5697
|
};
|
|
5698
5698
|
}
|
|
5699
5699
|
if (normalizedShapeType === "cylinder") {
|
|
@@ -5707,13 +5707,13 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
|
|
|
5707
5707
|
function getConnectorAdjustment(element, key, fallback) {
|
|
5708
5708
|
const direct = element.shapeAdjustments?.[key];
|
|
5709
5709
|
if (typeof direct === "number" && Number.isFinite(direct)) {
|
|
5710
|
-
return
|
|
5710
|
+
return chunkDHNQHQ66_js.clampUnitInterval(direct / 1e5);
|
|
5711
5711
|
}
|
|
5712
5712
|
const fallbackKey = element.shapeAdjustments?.adj;
|
|
5713
5713
|
if (typeof fallbackKey === "number" && Number.isFinite(fallbackKey)) {
|
|
5714
|
-
return
|
|
5714
|
+
return chunkDHNQHQ66_js.clampUnitInterval(fallbackKey / 1e5);
|
|
5715
5715
|
}
|
|
5716
|
-
return
|
|
5716
|
+
return chunkDHNQHQ66_js.clampUnitInterval(fallback);
|
|
5717
5717
|
}
|
|
5718
5718
|
function getConnectorPathGeometry(element) {
|
|
5719
5719
|
const width = Math.max(element.width, 1);
|
|
@@ -5850,11 +5850,11 @@ function strokeContext(shapeStyle, strokePaint, strokeWidth, dashArray) {
|
|
|
5850
5850
|
strokePaint,
|
|
5851
5851
|
strokeWidth,
|
|
5852
5852
|
dashArray,
|
|
5853
|
-
lineCap:
|
|
5853
|
+
lineCap: chunkDHNQHQ66_js.svgLineCap(shapeStyle?.lineCap),
|
|
5854
5854
|
lineJoin,
|
|
5855
5855
|
miterLimit,
|
|
5856
|
-
offsets:
|
|
5857
|
-
widths:
|
|
5856
|
+
offsets: chunkDHNQHQ66_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
|
|
5857
|
+
widths: chunkDHNQHQ66_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
|
|
5858
5858
|
};
|
|
5859
5859
|
}
|
|
5860
5860
|
function strokeStrands(d, keyBase, ctx) {
|
|
@@ -5912,7 +5912,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
|
|
|
5912
5912
|
) });
|
|
5913
5913
|
}
|
|
5914
5914
|
const customFillPaint = gradientId ? `url(#${gradientId})` : void 0;
|
|
5915
|
-
const subpaths = structuredPaths && structuredPaths.length > 0 ?
|
|
5915
|
+
const subpaths = structuredPaths && structuredPaths.length > 0 ? chunkHUD73YBT_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 0;
|
|
5916
5916
|
const needsPerSubpath = subpaths !== void 0 && subpaths.some((sp) => sp.fillMode && sp.fillMode !== "norm" || sp.stroke === false);
|
|
5917
5917
|
const nodes = [];
|
|
5918
5918
|
if (subpaths && needsPerSubpath) {
|
|
@@ -5943,7 +5943,7 @@ function renderCustomGeometryVector(pathData, pathWidth, pathHeight, structuredP
|
|
|
5943
5943
|
"path",
|
|
5944
5944
|
{
|
|
5945
5945
|
d: pathData,
|
|
5946
|
-
fill: animatesFill ? "inherit" : customFillPaint ??
|
|
5946
|
+
fill: animatesFill ? "inherit" : customFillPaint ?? chunkDHNQHQ66_js.colorWithOpacity(fillColor, fillOpacity),
|
|
5947
5947
|
stroke: "none",
|
|
5948
5948
|
vectorEffect: "non-scaling-stroke"
|
|
5949
5949
|
},
|
|
@@ -5988,14 +5988,14 @@ function renderStrokeOnlyPreset(presetPaths, width, height, shapeStyle, strokePa
|
|
|
5988
5988
|
);
|
|
5989
5989
|
}
|
|
5990
5990
|
function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor, animatesFill, animatesStroke) {
|
|
5991
|
-
if (!
|
|
5991
|
+
if (!chunkHUD73YBT_js.hasShapeProperties(element)) {
|
|
5992
5992
|
return null;
|
|
5993
5993
|
}
|
|
5994
5994
|
const normalizedType = (element.shapeType || "").toLowerCase();
|
|
5995
|
-
const fillPaint = animatesFill ? "inherit" :
|
|
5996
|
-
const strokePaint = animatesStroke ? "inherit" :
|
|
5997
|
-
const dashType =
|
|
5998
|
-
const dashArray =
|
|
5995
|
+
const fillPaint = animatesFill ? "inherit" : chunkDHNQHQ66_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
|
|
5996
|
+
const strokePaint = animatesStroke ? "inherit" : chunkDHNQHQ66_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
|
|
5997
|
+
const dashType = chunkDHNQHQ66_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
|
|
5998
|
+
const dashArray = chunkDHNQHQ66_js.getSvgStrokeDasharray(
|
|
5999
5999
|
dashType,
|
|
6000
6000
|
Math.max(strokeWidth, 1),
|
|
6001
6001
|
element.shapeStyle?.customDashSegments
|
|
@@ -6074,18 +6074,18 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
6074
6074
|
Boolean(animatesFill)
|
|
6075
6075
|
);
|
|
6076
6076
|
}
|
|
6077
|
-
if (
|
|
6077
|
+
if (chunkHUD73YBT_js.isCalloutShape(normalizedType)) {
|
|
6078
6078
|
const width = Math.max(element.width, 1);
|
|
6079
6079
|
const height = Math.max(element.height, 1);
|
|
6080
|
-
const geometry =
|
|
6080
|
+
const geometry = chunkHUD73YBT_js.getCalloutLeaderLineGeometry(
|
|
6081
6081
|
normalizedType,
|
|
6082
6082
|
width,
|
|
6083
6083
|
height,
|
|
6084
6084
|
element.shapeAdjustments
|
|
6085
6085
|
);
|
|
6086
6086
|
if (geometry && geometry.points.length >= 2) {
|
|
6087
|
-
const leaderPath =
|
|
6088
|
-
const bounds =
|
|
6087
|
+
const leaderPath = chunkHUD73YBT_js.buildCalloutLeaderLineSvgPath(geometry);
|
|
6088
|
+
const bounds = chunkHUD73YBT_js.getCalloutViewBoxBounds(width, height, geometry);
|
|
6089
6089
|
const lineStroke = Math.max(strokeWidth, 1);
|
|
6090
6090
|
const offsetLeft = bounds.minX;
|
|
6091
6091
|
const offsetTop = bounds.minY;
|
|
@@ -6148,10 +6148,10 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
6148
6148
|
const endArrowW = element.shapeStyle?.connectorEndArrowWidth;
|
|
6149
6149
|
const endArrowL = element.shapeStyle?.connectorEndArrowLength;
|
|
6150
6150
|
const compoundLine = element.shapeStyle?.compoundLine;
|
|
6151
|
-
const connectorLineCap =
|
|
6151
|
+
const connectorLineCap = chunkDHNQHQ66_js.svgLineCap(element.shapeStyle?.lineCap);
|
|
6152
6152
|
const hitTargetWidth = Math.max(strokeWidth * 3, 12);
|
|
6153
|
-
const offsets =
|
|
6154
|
-
const widths =
|
|
6153
|
+
const offsets = chunkDHNQHQ66_js.getCompoundLineOffsets(compoundLine, strokeWidth);
|
|
6154
|
+
const widths = chunkDHNQHQ66_js.getCompoundLineWidths(compoundLine, strokeWidth);
|
|
6155
6155
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6156
6156
|
"svg",
|
|
6157
6157
|
{
|
|
@@ -6217,7 +6217,7 @@ function renderVectorShape(element, hasFill, fillColor, strokeWidth, strokeColor
|
|
|
6217
6217
|
|
|
6218
6218
|
// src/viewer/utils/image-style.ts
|
|
6219
6219
|
function getImageMaskStyle(element) {
|
|
6220
|
-
if (!
|
|
6220
|
+
if (!chunkHUD73YBT_js.hasShapeProperties(element)) {
|
|
6221
6221
|
return void 0;
|
|
6222
6222
|
}
|
|
6223
6223
|
const shapeType = element.shapeType;
|
|
@@ -6226,7 +6226,7 @@ function getImageMaskStyle(element) {
|
|
|
6226
6226
|
}
|
|
6227
6227
|
const normalized = shapeType.toLowerCase();
|
|
6228
6228
|
if (normalized === "roundrect" || normalized === "round1rect" || normalized === "round2samerect" || normalized === "round2diagrect" || normalized === "sniproundrect" || normalized === "snip1rect" || normalized === "snip2diagrect") {
|
|
6229
|
-
const radiusPx =
|
|
6229
|
+
const radiusPx = chunkDHNQHQ66_js.getRoundRectRadiusPx(element);
|
|
6230
6230
|
if (radiusPx <= 0.01) {
|
|
6231
6231
|
return void 0;
|
|
6232
6232
|
}
|
|
@@ -6238,7 +6238,7 @@ function getImageMaskStyle(element) {
|
|
|
6238
6238
|
if (normalized === "can" || normalized === "cylinder") {
|
|
6239
6239
|
return { borderRadius: "48% / 12%" };
|
|
6240
6240
|
}
|
|
6241
|
-
const clipPath =
|
|
6241
|
+
const clipPath = chunkDHNQHQ66_js.getResolvedShapeClipPath(element);
|
|
6242
6242
|
if (!clipPath) {
|
|
6243
6243
|
return void 0;
|
|
6244
6244
|
}
|
|
@@ -6246,7 +6246,7 @@ function getImageMaskStyle(element) {
|
|
|
6246
6246
|
}
|
|
6247
6247
|
function getImageRenderStyle(element) {
|
|
6248
6248
|
const maskStyle = getImageMaskStyle(element) || {};
|
|
6249
|
-
if (!
|
|
6249
|
+
if (!chunkHUD73YBT_js.isImageLikeElement(element)) {
|
|
6250
6250
|
return {
|
|
6251
6251
|
...maskStyle,
|
|
6252
6252
|
width: "100%",
|
|
@@ -6254,10 +6254,10 @@ function getImageRenderStyle(element) {
|
|
|
6254
6254
|
objectFit: "cover"
|
|
6255
6255
|
};
|
|
6256
6256
|
}
|
|
6257
|
-
const cropLeft =
|
|
6258
|
-
const cropTop =
|
|
6259
|
-
const cropRight =
|
|
6260
|
-
const cropBottom =
|
|
6257
|
+
const cropLeft = chunkDHNQHQ66_js.clampCropValue(element.cropLeft);
|
|
6258
|
+
const cropTop = chunkDHNQHQ66_js.clampCropValue(element.cropTop);
|
|
6259
|
+
const cropRight = chunkDHNQHQ66_js.clampCropValue(element.cropRight);
|
|
6260
|
+
const cropBottom = chunkDHNQHQ66_js.clampCropValue(element.cropBottom);
|
|
6261
6261
|
const hasCrop = cropLeft + cropRight > 1e-4 || cropTop + cropBottom > 1e-4;
|
|
6262
6262
|
if (!hasCrop) {
|
|
6263
6263
|
return {
|
|
@@ -6269,10 +6269,10 @@ function getImageRenderStyle(element) {
|
|
|
6269
6269
|
}
|
|
6270
6270
|
const safeHorizontalScale = cropLeft + cropRight >= 0.99 ? 0.99 / (cropLeft + cropRight) : 1;
|
|
6271
6271
|
const safeVerticalScale = cropTop + cropBottom >= 0.99 ? 0.99 / (cropTop + cropBottom) : 1;
|
|
6272
|
-
const normalizedLeft =
|
|
6273
|
-
const normalizedRight =
|
|
6274
|
-
const normalizedTop =
|
|
6275
|
-
const normalizedBottom =
|
|
6272
|
+
const normalizedLeft = chunkDHNQHQ66_js.clampCropValue(cropLeft * safeHorizontalScale);
|
|
6273
|
+
const normalizedRight = chunkDHNQHQ66_js.clampCropValue(cropRight * safeHorizontalScale);
|
|
6274
|
+
const normalizedTop = chunkDHNQHQ66_js.clampCropValue(cropTop * safeVerticalScale);
|
|
6275
|
+
const normalizedBottom = chunkDHNQHQ66_js.clampCropValue(cropBottom * safeVerticalScale);
|
|
6276
6276
|
const remainingWidth = Math.max(0.01, 1 - normalizedLeft - normalizedRight);
|
|
6277
6277
|
const remainingHeight = Math.max(0.01, 1 - normalizedTop - normalizedBottom);
|
|
6278
6278
|
const tx = Math.round(-normalizedLeft / remainingWidth * 1e4) / 100;
|
|
@@ -6301,7 +6301,7 @@ var CROP_SHAPE_CLIP_PATHS = {
|
|
|
6301
6301
|
star: "polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)"
|
|
6302
6302
|
};
|
|
6303
6303
|
function getCropShapeClipPath(element) {
|
|
6304
|
-
if (!
|
|
6304
|
+
if (!chunkHUD73YBT_js.isImageLikeElement(element)) {
|
|
6305
6305
|
return void 0;
|
|
6306
6306
|
}
|
|
6307
6307
|
const shape = element.cropShape;
|
|
@@ -6311,7 +6311,7 @@ function getCropShapeClipPath(element) {
|
|
|
6311
6311
|
return CROP_SHAPE_CLIP_PATHS[shape];
|
|
6312
6312
|
}
|
|
6313
6313
|
function isImageTiled(element) {
|
|
6314
|
-
if (!
|
|
6314
|
+
if (!chunkHUD73YBT_js.isImageLikeElement(element)) {
|
|
6315
6315
|
return false;
|
|
6316
6316
|
}
|
|
6317
6317
|
return typeof element.tileScaleX === "number" || typeof element.tileScaleY === "number";
|
|
@@ -6369,7 +6369,7 @@ function buildMirrorTiledBackground(src, flip, scaleX, scaleY) {
|
|
|
6369
6369
|
};
|
|
6370
6370
|
}
|
|
6371
6371
|
function getImageTilingStyle(element) {
|
|
6372
|
-
if (!
|
|
6372
|
+
if (!chunkHUD73YBT_js.isImageLikeElement(element) || !isImageTiled(element)) {
|
|
6373
6373
|
return void 0;
|
|
6374
6374
|
}
|
|
6375
6375
|
const scaleX = typeof element.tileScaleX === "number" ? element.tileScaleX * 100 : 100;
|
|
@@ -6443,9 +6443,9 @@ function parseGradientFillCss(gradFill) {
|
|
|
6443
6443
|
}
|
|
6444
6444
|
const parsed = stops.map((gs) => {
|
|
6445
6445
|
const pos = Number.parseInt(String(gs["@_pos"] || "0"), 10) / 1e3;
|
|
6446
|
-
const color =
|
|
6447
|
-
const opacity =
|
|
6448
|
-
return { pos, color:
|
|
6446
|
+
const color = chunkDHNQHQ66_js.parseDrawingColor(gs) ?? "#888888";
|
|
6447
|
+
const opacity = chunkDHNQHQ66_js.parseDrawingColorOpacity(gs);
|
|
6448
|
+
return { pos, color: chunkDHNQHQ66_js.colorWithOpacity(color, opacity) };
|
|
6449
6449
|
}).sort((a, b) => a.pos - b.pos);
|
|
6450
6450
|
const stopStrings = parsed.map((s) => `${s.color} ${s.pos.toFixed(1)}%`).join(", ");
|
|
6451
6451
|
const lin = gradFill["a:lin"];
|
|
@@ -6486,8 +6486,8 @@ function parsePatternFillCss(pattFill) {
|
|
|
6486
6486
|
if (!pattFill) {
|
|
6487
6487
|
return void 0;
|
|
6488
6488
|
}
|
|
6489
|
-
const fgColor =
|
|
6490
|
-
const bgColor =
|
|
6489
|
+
const fgColor = chunkDHNQHQ66_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
|
|
6490
|
+
const bgColor = chunkDHNQHQ66_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
|
|
6491
6491
|
const preset = String(pattFill["@_prst"] || "ltDnDiag");
|
|
6492
6492
|
switch (preset) {
|
|
6493
6493
|
case "ltHorz":
|
|
@@ -6598,11 +6598,11 @@ function parseCellBorders(cellProperties) {
|
|
|
6598
6598
|
const prstDash = ln["a:prstDash"];
|
|
6599
6599
|
const dashVal = prstDash ? String(prstDash["@_val"] || "") : void 0;
|
|
6600
6600
|
const cssBorderStyle = ooxmlDashToCss(dashVal);
|
|
6601
|
-
const color =
|
|
6601
|
+
const color = chunkDHNQHQ66_js.parseDrawingColor(ln["a:solidFill"]);
|
|
6602
6602
|
if (color) {
|
|
6603
|
-
const opacity =
|
|
6603
|
+
const opacity = chunkDHNQHQ66_js.parseDrawingColorOpacity(ln["a:solidFill"]);
|
|
6604
6604
|
const key = `${edge.prefix}`;
|
|
6605
|
-
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${
|
|
6605
|
+
borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkDHNQHQ66_js.colorWithOpacity(color, opacity)}`;
|
|
6606
6606
|
}
|
|
6607
6607
|
}
|
|
6608
6608
|
return borderStyle;
|
|
@@ -6615,7 +6615,7 @@ function parseCellTextEffects(runProps) {
|
|
|
6615
6615
|
const textShadowParts = [];
|
|
6616
6616
|
const outerShdw = effectLst["a:outerShdw"];
|
|
6617
6617
|
if (outerShdw) {
|
|
6618
|
-
const shdwColor =
|
|
6618
|
+
const shdwColor = chunkDHNQHQ66_js.parseDrawingColor(outerShdw);
|
|
6619
6619
|
if (shdwColor) {
|
|
6620
6620
|
const blurRad = Number.parseInt(String(outerShdw["@_blurRad"] || "0"), 10);
|
|
6621
6621
|
const blurPx = blurRad > 0 ? Math.round(blurRad / 12700) : 0;
|
|
@@ -6633,7 +6633,7 @@ function parseCellTextEffects(runProps) {
|
|
|
6633
6633
|
}
|
|
6634
6634
|
const glow = effectLst["a:glow"];
|
|
6635
6635
|
if (glow) {
|
|
6636
|
-
const glowColor =
|
|
6636
|
+
const glowColor = chunkDHNQHQ66_js.parseDrawingColor(glow);
|
|
6637
6637
|
if (glowColor) {
|
|
6638
6638
|
const glowRad = Number.parseInt(String(glow["@_rad"] || "0"), 10);
|
|
6639
6639
|
const glowPx = glowRad > 0 ? Math.round(glowRad / 12700) : 2;
|
|
@@ -6712,10 +6712,10 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
6712
6712
|
if (runProps?.["@_u"] !== void 0) {
|
|
6713
6713
|
cellStyle.textDecorationLine = runProps["@_u"] === "sng" ? "underline" : "none";
|
|
6714
6714
|
}
|
|
6715
|
-
const runColor =
|
|
6715
|
+
const runColor = chunkDHNQHQ66_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkDHNQHQ66_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
|
|
6716
6716
|
if (runColor) {
|
|
6717
|
-
const opacity =
|
|
6718
|
-
cellStyle.color =
|
|
6717
|
+
const opacity = chunkDHNQHQ66_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
|
|
6718
|
+
cellStyle.color = chunkDHNQHQ66_js.colorWithOpacity(runColor, opacity);
|
|
6719
6719
|
}
|
|
6720
6720
|
const fontFamily = runProps?.["a:latin"]?.["@_typeface"] || runProps?.["a:ea"]?.["@_typeface"] || runProps?.["a:cs"]?.["@_typeface"];
|
|
6721
6721
|
if (fontFamily) {
|
|
@@ -6725,15 +6725,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
6725
6725
|
cellStyle.textAlign = parseParagraphAlignment(paragraphProperties["@_algn"]);
|
|
6726
6726
|
}
|
|
6727
6727
|
const cellProperties = cellXml["a:tcPr"];
|
|
6728
|
-
const cellFill =
|
|
6728
|
+
const cellFill = chunkDHNQHQ66_js.parseDrawingColor(
|
|
6729
6729
|
cellProperties?.["a:solidFill"],
|
|
6730
6730
|
schemeColorOverrides
|
|
6731
6731
|
);
|
|
6732
6732
|
if (cellFill) {
|
|
6733
|
-
const opacity =
|
|
6733
|
+
const opacity = chunkDHNQHQ66_js.parseDrawingColorOpacity(
|
|
6734
6734
|
cellProperties?.["a:solidFill"]
|
|
6735
6735
|
);
|
|
6736
|
-
cellStyle.backgroundColor =
|
|
6736
|
+
cellStyle.backgroundColor = chunkDHNQHQ66_js.colorWithOpacity(cellFill, opacity);
|
|
6737
6737
|
} else {
|
|
6738
6738
|
const gradCss = parseGradientFillCss(cellProperties?.["a:gradFill"]);
|
|
6739
6739
|
if (gradCss) {
|
|
@@ -6748,16 +6748,16 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
|
|
|
6748
6748
|
const edgeBorders = parseCellBorders(cellProperties);
|
|
6749
6749
|
Object.assign(cellStyle, edgeBorders);
|
|
6750
6750
|
if (!cellStyle.borderLeftColor && !cellStyle.borderRightColor && !cellStyle.borderTopColor && !cellStyle.borderBottomColor) {
|
|
6751
|
-
const borderColor =
|
|
6751
|
+
const borderColor = chunkDHNQHQ66_js.parseDrawingColor(
|
|
6752
6752
|
cellProperties?.["a:lnL"]?.["a:solidFill"],
|
|
6753
6753
|
schemeColorOverrides
|
|
6754
|
-
) ||
|
|
6754
|
+
) || chunkDHNQHQ66_js.parseDrawingColor(
|
|
6755
6755
|
cellProperties?.["a:lnR"]?.["a:solidFill"],
|
|
6756
6756
|
schemeColorOverrides
|
|
6757
|
-
) ||
|
|
6757
|
+
) || chunkDHNQHQ66_js.parseDrawingColor(
|
|
6758
6758
|
cellProperties?.["a:lnT"]?.["a:solidFill"],
|
|
6759
6759
|
schemeColorOverrides
|
|
6760
|
-
) ||
|
|
6760
|
+
) || chunkDHNQHQ66_js.parseDrawingColor(
|
|
6761
6761
|
cellProperties?.["a:lnB"]?.["a:solidFill"],
|
|
6762
6762
|
schemeColorOverrides
|
|
6763
6763
|
);
|
|
@@ -6836,10 +6836,10 @@ function resolveTableStyleFillColor(fill, colorScheme) {
|
|
|
6836
6836
|
}
|
|
6837
6837
|
let color = base;
|
|
6838
6838
|
if (fill.tint !== void 0 && fill.tint > 0) {
|
|
6839
|
-
color =
|
|
6839
|
+
color = chunkDHNQHQ66_js.tintColor2(color, fill.tint / 1e5);
|
|
6840
6840
|
}
|
|
6841
6841
|
if (fill.shade !== void 0 && fill.shade > 0) {
|
|
6842
|
-
color =
|
|
6842
|
+
color = chunkDHNQHQ66_js.shadeColor2(color, 1 - fill.shade / 1e5);
|
|
6843
6843
|
}
|
|
6844
6844
|
return color;
|
|
6845
6845
|
}
|
|
@@ -6864,7 +6864,7 @@ function applyTableStyleText(text, colorScheme, style, fontScheme) {
|
|
|
6864
6864
|
style.fontFamily = text.fontFace;
|
|
6865
6865
|
applied = true;
|
|
6866
6866
|
} else {
|
|
6867
|
-
const refFont =
|
|
6867
|
+
const refFont = chunkDHNQHQ66_js.resolveFontRefIdx(text.fontRefIdx, fontScheme);
|
|
6868
6868
|
if (refFont) {
|
|
6869
6869
|
style.fontFamily = refFont;
|
|
6870
6870
|
applied = true;
|
|
@@ -6875,10 +6875,10 @@ function applyTableStyleText(text, colorScheme, style, fontScheme) {
|
|
|
6875
6875
|
if (base) {
|
|
6876
6876
|
let color = base;
|
|
6877
6877
|
if (text.fontTint !== void 0 && text.fontTint > 0) {
|
|
6878
|
-
color =
|
|
6878
|
+
color = chunkDHNQHQ66_js.tintColor2(color, text.fontTint / 1e5);
|
|
6879
6879
|
}
|
|
6880
6880
|
if (text.fontShade !== void 0 && text.fontShade > 0) {
|
|
6881
|
-
color =
|
|
6881
|
+
color = chunkDHNQHQ66_js.shadeColor2(color, 1 - text.fontShade / 1e5);
|
|
6882
6882
|
}
|
|
6883
6883
|
style.color = color;
|
|
6884
6884
|
applied = true;
|
|
@@ -7070,7 +7070,7 @@ function parseTableElementData(element, fallbackTextStyle) {
|
|
|
7070
7070
|
};
|
|
7071
7071
|
}
|
|
7072
7072
|
function getCellDiagonalBorders2(style, tableData, pos, styleCtx) {
|
|
7073
|
-
return
|
|
7073
|
+
return chunkDHNQHQ66_js.getCellDiagonalBorders(style, tableData, pos, {
|
|
7074
7074
|
tableStyleMap: styleCtx?.tableStyleMap,
|
|
7075
7075
|
colorScheme: styleCtx?.theme?.colorScheme,
|
|
7076
7076
|
fontScheme: styleCtx?.theme?.fontScheme
|
|
@@ -7218,9 +7218,9 @@ function cellStyleToCss(style) {
|
|
|
7218
7218
|
if (style.gradientFillCss) {
|
|
7219
7219
|
css.background = style.gradientFillCss;
|
|
7220
7220
|
} else if (style.fillMode === "pattern" && style.patternFillPreset) {
|
|
7221
|
-
const fg =
|
|
7222
|
-
const bg =
|
|
7223
|
-
const svgPattern =
|
|
7221
|
+
const fg = chunkDHNQHQ66_js.normalizeHexColor(style.patternFillForeground, "#000000");
|
|
7222
|
+
const bg = chunkDHNQHQ66_js.normalizeHexColor(style.patternFillBackground, "#ffffff");
|
|
7223
|
+
const svgPattern = chunkDHNQHQ66_js.getPatternSvg(style.patternFillPreset, fg, bg);
|
|
7224
7224
|
if (svgPattern) {
|
|
7225
7225
|
const encoded = encodeURIComponent(svgPattern);
|
|
7226
7226
|
css.backgroundImage = `url("data:image/svg+xml,${encoded}")`;
|
|
@@ -7296,7 +7296,7 @@ function cellStyleToCss(style) {
|
|
|
7296
7296
|
if (edge.width || edge.color) {
|
|
7297
7297
|
const w = edge.width ?? 1;
|
|
7298
7298
|
const c = edge.color ?? style.borderColor ?? "#000000";
|
|
7299
|
-
const s =
|
|
7299
|
+
const s = chunkDHNQHQ66_js.ooxmlDashToCssBorderStyle(edge.dash);
|
|
7300
7300
|
css[edge.prefix] = `${w}px ${s} ${c}`;
|
|
7301
7301
|
}
|
|
7302
7302
|
}
|
|
@@ -7327,7 +7327,7 @@ function cellStyleToCss(style) {
|
|
|
7327
7327
|
css.textShadow = textShadowParts.join(", ");
|
|
7328
7328
|
}
|
|
7329
7329
|
if (style.cell3D) {
|
|
7330
|
-
Object.assign(css,
|
|
7330
|
+
Object.assign(css, chunkDHNQHQ66_js.cell3DBevelCss(style.cell3D));
|
|
7331
7331
|
}
|
|
7332
7332
|
return css;
|
|
7333
7333
|
}
|
|
@@ -7341,7 +7341,7 @@ function TableResizeOverlay({
|
|
|
7341
7341
|
const containerRef = React4.useRef(null);
|
|
7342
7342
|
const [rowBounds, setRowBounds] = React4.useState([]);
|
|
7343
7343
|
const dragRef = React4.useRef(null);
|
|
7344
|
-
const colBoundaries = React4.useMemo(() =>
|
|
7344
|
+
const colBoundaries = React4.useMemo(() => chunkDHNQHQ66_js.computeColumnBoundaries(columnWidths), [columnWidths]);
|
|
7345
7345
|
const measureRows = React4.useCallback(() => {
|
|
7346
7346
|
const container = containerRef.current;
|
|
7347
7347
|
if (!container) {
|
|
@@ -7388,11 +7388,11 @@ function TableResizeOverlay({
|
|
|
7388
7388
|
const rect = containerRef.current.getBoundingClientRect();
|
|
7389
7389
|
if (drag.type === "col" && drag.initialWidths && onResizeColumns) {
|
|
7390
7390
|
const deltaProp = (e.clientX - drag.startPos) / rect.width;
|
|
7391
|
-
onResizeColumns(
|
|
7391
|
+
onResizeColumns(chunkDHNQHQ66_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
|
|
7392
7392
|
} else if (drag.type === "row" && onResizeRow) {
|
|
7393
7393
|
const deltaY = e.clientY - drag.startPos;
|
|
7394
|
-
const newHeight =
|
|
7395
|
-
drag.initialRowHeight ??
|
|
7394
|
+
const newHeight = chunkDHNQHQ66_js.computeResizedRowHeight(
|
|
7395
|
+
drag.initialRowHeight ?? chunkDHNQHQ66_js.DEFAULT_ROW_HEIGHT,
|
|
7396
7396
|
deltaY
|
|
7397
7397
|
);
|
|
7398
7398
|
onResizeRow(drag.index, newHeight);
|
|
@@ -7430,7 +7430,7 @@ function TableResizeOverlay({
|
|
|
7430
7430
|
e.stopPropagation();
|
|
7431
7431
|
const table = containerRef.current?.querySelector("table");
|
|
7432
7432
|
const tr = table?.querySelectorAll("tbody > tr")[index];
|
|
7433
|
-
const actualHeight = tr?.offsetHeight ??
|
|
7433
|
+
const actualHeight = tr?.offsetHeight ?? chunkDHNQHQ66_js.DEFAULT_ROW_HEIGHT;
|
|
7434
7434
|
document.body.style.cursor = "row-resize";
|
|
7435
7435
|
document.body.style.userSelect = "none";
|
|
7436
7436
|
dragRef.current = {
|
|
@@ -7478,7 +7478,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
7478
7478
|
}
|
|
7479
7479
|
const first = selectedCell.selectedCells[0];
|
|
7480
7480
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
7481
|
-
return
|
|
7481
|
+
return chunkDHNQHQ66_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
|
|
7482
7482
|
})();
|
|
7483
7483
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7484
7484
|
TableResizeOverlay,
|
|
@@ -7511,7 +7511,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
7511
7511
|
return null;
|
|
7512
7512
|
}
|
|
7513
7513
|
const isCellSelected = selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex;
|
|
7514
|
-
const isInMultiSelection =
|
|
7514
|
+
const isInMultiSelection = chunkDHNQHQ66_js.isCellInRect(rowIndex, cellIndex, selectionRect);
|
|
7515
7515
|
const isCellEditing = isCellSelected && selectedCell?.isEditing;
|
|
7516
7516
|
const diag = getCellDiagonalBorders2(
|
|
7517
7517
|
cell.style,
|
|
@@ -7541,7 +7541,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
7541
7541
|
}
|
|
7542
7542
|
event.stopPropagation();
|
|
7543
7543
|
if (event.shiftKey && selectedCell) {
|
|
7544
|
-
const rect =
|
|
7544
|
+
const rect = chunkDHNQHQ66_js.computeSelectionRect(
|
|
7545
7545
|
selectedCell.rowIndex,
|
|
7546
7546
|
selectedCell.columnIndex,
|
|
7547
7547
|
rowIndex,
|
|
@@ -7551,7 +7551,7 @@ function renderTableFromTableData(element, textStyle, options) {
|
|
|
7551
7551
|
options?.onSelectCell?.({
|
|
7552
7552
|
rowIndex: selectedCell.rowIndex,
|
|
7553
7553
|
columnIndex: selectedCell.columnIndex,
|
|
7554
|
-
selectedCells:
|
|
7554
|
+
selectedCells: chunkDHNQHQ66_js.rectToCells(rect)
|
|
7555
7555
|
});
|
|
7556
7556
|
} else {
|
|
7557
7557
|
options?.onSelectCell?.({
|
|
@@ -7628,7 +7628,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
7628
7628
|
}
|
|
7629
7629
|
const first = selectedCell.selectedCells[0];
|
|
7630
7630
|
const last = selectedCell.selectedCells[selectedCell.selectedCells.length - 1];
|
|
7631
|
-
return
|
|
7631
|
+
return chunkDHNQHQ66_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
|
|
7632
7632
|
})();
|
|
7633
7633
|
const schemeOverrides = options?.styleCtx?.theme?.colorScheme ? options.styleCtx.theme.colorScheme : void 0;
|
|
7634
7634
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -7705,7 +7705,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
7705
7705
|
"border px-1 py-0.5 align-top",
|
|
7706
7706
|
isEditable2 && hasCellSelectionHandler ? "border-blue-200/70 cursor-cell" : "border-white/30",
|
|
7707
7707
|
selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex ? "ring-1 ring-inset ring-blue-500" : null,
|
|
7708
|
-
|
|
7708
|
+
chunkDHNQHQ66_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
|
|
7709
7709
|
),
|
|
7710
7710
|
colSpan,
|
|
7711
7711
|
rowSpan: rSpan,
|
|
@@ -7716,7 +7716,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
7716
7716
|
}
|
|
7717
7717
|
event.stopPropagation();
|
|
7718
7718
|
if (event.shiftKey && selectedCell && tableEl.tableData) {
|
|
7719
|
-
const rect =
|
|
7719
|
+
const rect = chunkDHNQHQ66_js.computeSelectionRect(
|
|
7720
7720
|
selectedCell.rowIndex,
|
|
7721
7721
|
selectedCell.columnIndex,
|
|
7722
7722
|
rowIndex,
|
|
@@ -7726,7 +7726,7 @@ function renderTableElement(element, textStyle, options) {
|
|
|
7726
7726
|
options?.onSelectCell?.({
|
|
7727
7727
|
rowIndex: selectedCell.rowIndex,
|
|
7728
7728
|
columnIndex: selectedCell.columnIndex,
|
|
7729
|
-
selectedCells:
|
|
7729
|
+
selectedCells: chunkDHNQHQ66_js.rectToCells(rect)
|
|
7730
7730
|
});
|
|
7731
7731
|
} else {
|
|
7732
7732
|
options?.onSelectCell?.({
|
|
@@ -7781,24 +7781,24 @@ function renderTableElement(element, textStyle, options) {
|
|
|
7781
7781
|
}
|
|
7782
7782
|
var LEGEND_ITEM_WIDTH = 80;
|
|
7783
7783
|
function partAttrs(part) {
|
|
7784
|
-
return part ?
|
|
7784
|
+
return part ? chunkDHNQHQ66_js.chartPartToAttrs(part) : void 0;
|
|
7785
7785
|
}
|
|
7786
7786
|
function resolveReactPalette(chartData) {
|
|
7787
7787
|
if (chartData.colorPalette && chartData.colorPalette.length > 0) {
|
|
7788
7788
|
return chartData.colorPalette;
|
|
7789
7789
|
}
|
|
7790
|
-
return [...
|
|
7790
|
+
return [...chunkDHNQHQ66_js.getChartStylePalette(chartData.style?.styleId)];
|
|
7791
7791
|
}
|
|
7792
7792
|
function buildReactChartViewModel(element) {
|
|
7793
7793
|
if (element.type !== "chart" || !element.chartData) {
|
|
7794
|
-
return
|
|
7794
|
+
return chunkDHNQHQ66_js.buildChartViewModel(element);
|
|
7795
7795
|
}
|
|
7796
7796
|
const palette = resolveReactPalette(element.chartData);
|
|
7797
7797
|
const themedElement = {
|
|
7798
7798
|
...element,
|
|
7799
7799
|
chartData: { ...element.chartData, colorPalette: palette }
|
|
7800
7800
|
};
|
|
7801
|
-
return
|
|
7801
|
+
return chunkDHNQHQ66_js.buildChartViewModel(themedElement);
|
|
7802
7802
|
}
|
|
7803
7803
|
function renderPrimitive(prim, key) {
|
|
7804
7804
|
switch (prim.kind) {
|
|
@@ -8187,7 +8187,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
8187
8187
|
const unmatchedRows = [];
|
|
8188
8188
|
categories.forEach((cat, i) => {
|
|
8189
8189
|
const value = values[i] ?? 0;
|
|
8190
|
-
const code =
|
|
8190
|
+
const code = chunkDHNQHQ66_js.resolveRegionCode(cat);
|
|
8191
8191
|
if (code) {
|
|
8192
8192
|
regionValueMap.set(code, { value, label: cat });
|
|
8193
8193
|
} else {
|
|
@@ -8225,8 +8225,8 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
8225
8225
|
let fill = "#e2e8f0";
|
|
8226
8226
|
let dataLabel = null;
|
|
8227
8227
|
if (entry) {
|
|
8228
|
-
const t =
|
|
8229
|
-
fill =
|
|
8228
|
+
const t = chunkDHNQHQ66_js.normalizeValue(entry.value, minVal, maxVal);
|
|
8229
|
+
fill = chunkDHNQHQ66_js.sequentialColorScale(t);
|
|
8230
8230
|
dataLabel = /* @__PURE__ */ jsxRuntime.jsx(
|
|
8231
8231
|
"text",
|
|
8232
8232
|
{
|
|
@@ -8237,7 +8237,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
8237
8237
|
fontWeight: 600,
|
|
8238
8238
|
fill: "#1e293b",
|
|
8239
8239
|
style: { pointerEvents: "none" },
|
|
8240
|
-
children:
|
|
8240
|
+
children: chunkDHNQHQ66_js.formatAxisValue(entry.value)
|
|
8241
8241
|
},
|
|
8242
8242
|
`${element.id}-map-dl-${region.code}`
|
|
8243
8243
|
);
|
|
@@ -8255,7 +8255,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
8255
8255
|
opacity: 0.9,
|
|
8256
8256
|
children: /* @__PURE__ */ jsxRuntime.jsxs("title", { children: [
|
|
8257
8257
|
region.name,
|
|
8258
|
-
entry ? `: ${
|
|
8258
|
+
entry ? `: ${chunkDHNQHQ66_js.formatAxisValue(entry.value)}` : ""
|
|
8259
8259
|
] })
|
|
8260
8260
|
}
|
|
8261
8261
|
),
|
|
@@ -8293,7 +8293,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
8293
8293
|
fontSize: 7,
|
|
8294
8294
|
fill: "#64748b",
|
|
8295
8295
|
textAnchor: "middle",
|
|
8296
|
-
children:
|
|
8296
|
+
children: chunkDHNQHQ66_js.formatAxisValue(minVal)
|
|
8297
8297
|
},
|
|
8298
8298
|
`${element.id}-map-legend-min`
|
|
8299
8299
|
),
|
|
@@ -8305,7 +8305,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
8305
8305
|
fontSize: 7,
|
|
8306
8306
|
fill: "#64748b",
|
|
8307
8307
|
textAnchor: "middle",
|
|
8308
|
-
children:
|
|
8308
|
+
children: chunkDHNQHQ66_js.formatAxisValue(maxVal)
|
|
8309
8309
|
},
|
|
8310
8310
|
`${element.id}-map-legend-max`
|
|
8311
8311
|
)
|
|
@@ -8371,7 +8371,7 @@ function renderMapChart(element, chartData, categoryLabels) {
|
|
|
8371
8371
|
y,
|
|
8372
8372
|
fontSize,
|
|
8373
8373
|
fill: "#475569",
|
|
8374
|
-
children:
|
|
8374
|
+
children: chunkDHNQHQ66_js.formatAxisValue(row.value)
|
|
8375
8375
|
},
|
|
8376
8376
|
`${element.id}-map-ft-val-${i}`
|
|
8377
8377
|
)
|
|
@@ -8442,7 +8442,7 @@ function renderStackedBarChart(element, _chartData, _categoryLabels) {
|
|
|
8442
8442
|
|
|
8443
8443
|
// src/viewer/utils/chart-overlay-utils.ts
|
|
8444
8444
|
function sColor(series, idx) {
|
|
8445
|
-
return
|
|
8445
|
+
return chunkDHNQHQ66_js.seriesColor(series, idx);
|
|
8446
8446
|
}
|
|
8447
8447
|
function valToY(val, range, topY, bottomY) {
|
|
8448
8448
|
const usable = bottomY - topY;
|
|
@@ -8981,7 +8981,7 @@ function renderLegend(id, style, series, layout, colorPalette) {
|
|
|
8981
8981
|
width: 10,
|
|
8982
8982
|
height: 10,
|
|
8983
8983
|
rx: 2,
|
|
8984
|
-
fill:
|
|
8984
|
+
fill: chunkDHNQHQ66_js.seriesColor(s, i, style?.styleId, colorPalette)
|
|
8985
8985
|
},
|
|
8986
8986
|
`${id}-leg-r-${i}`
|
|
8987
8987
|
)
|
|
@@ -9005,7 +9005,7 @@ function renderLegend(id, style, series, layout, colorPalette) {
|
|
|
9005
9005
|
width: 10,
|
|
9006
9006
|
height: 10,
|
|
9007
9007
|
rx: 2,
|
|
9008
|
-
fill:
|
|
9008
|
+
fill: chunkDHNQHQ66_js.seriesColor(s, i, style?.styleId, colorPalette)
|
|
9009
9009
|
}
|
|
9010
9010
|
),
|
|
9011
9011
|
/* @__PURE__ */ jsxRuntime.jsx("text", { x: x + 14, y: cy + 8, fontSize: 9, fill: "#475569", children: s.name || `Series ${i + 1}` })
|
|
@@ -9018,9 +9018,9 @@ function renderGridlines(id, style, range, layout) {
|
|
|
9018
9018
|
}
|
|
9019
9019
|
const lines = [];
|
|
9020
9020
|
if (range.logScale && range.logBase) {
|
|
9021
|
-
const ticks =
|
|
9021
|
+
const ticks = chunkDHNQHQ66_js.generateLogTicks(range);
|
|
9022
9022
|
ticks.forEach((tickVal, i) => {
|
|
9023
|
-
const y =
|
|
9023
|
+
const y = chunkDHNQHQ66_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
|
|
9024
9024
|
lines.push(
|
|
9025
9025
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9026
9026
|
"line",
|
|
@@ -9041,7 +9041,7 @@ function renderGridlines(id, style, range, layout) {
|
|
|
9041
9041
|
const steps = 4;
|
|
9042
9042
|
for (let i = 0; i <= steps; i++) {
|
|
9043
9043
|
const val = range.min + range.span * i / steps;
|
|
9044
|
-
const y =
|
|
9044
|
+
const y = chunkDHNQHQ66_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
9045
9045
|
lines.push(
|
|
9046
9046
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9047
9047
|
"line",
|
|
@@ -9065,9 +9065,9 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
9065
9065
|
const labels = [];
|
|
9066
9066
|
const hasDisplayUnits = Boolean(axisFormatting?.displayUnits);
|
|
9067
9067
|
if (range.logScale && range.logBase) {
|
|
9068
|
-
const ticks =
|
|
9068
|
+
const ticks = chunkDHNQHQ66_js.generateLogTicks(range);
|
|
9069
9069
|
ticks.forEach((tickVal, i) => {
|
|
9070
|
-
const y =
|
|
9070
|
+
const y = chunkDHNQHQ66_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
|
|
9071
9071
|
labels.push(
|
|
9072
9072
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9073
9073
|
"text",
|
|
@@ -9077,7 +9077,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
9077
9077
|
textAnchor: "end",
|
|
9078
9078
|
fontSize: 8,
|
|
9079
9079
|
fill: "#64748b",
|
|
9080
|
-
children: hasDisplayUnits ?
|
|
9080
|
+
children: hasDisplayUnits ? chunkDHNQHQ66_js.formatAxisValueWithUnits(tickVal, axisFormatting) : chunkDHNQHQ66_js.formatAxisValue(tickVal)
|
|
9081
9081
|
},
|
|
9082
9082
|
`${id}-vaxis-log-${i}`
|
|
9083
9083
|
)
|
|
@@ -9087,7 +9087,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
9087
9087
|
const steps = 4;
|
|
9088
9088
|
for (let i = 0; i <= steps; i++) {
|
|
9089
9089
|
const val = range.min + range.span * i / steps;
|
|
9090
|
-
const y =
|
|
9090
|
+
const y = chunkDHNQHQ66_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
9091
9091
|
labels.push(
|
|
9092
9092
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9093
9093
|
"text",
|
|
@@ -9097,7 +9097,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
9097
9097
|
textAnchor: "end",
|
|
9098
9098
|
fontSize: 8,
|
|
9099
9099
|
fill: "#64748b",
|
|
9100
|
-
children: hasDisplayUnits ?
|
|
9100
|
+
children: hasDisplayUnits ? chunkDHNQHQ66_js.formatAxisValueWithUnits(val, axisFormatting) : chunkDHNQHQ66_js.formatAxisValue(val)
|
|
9101
9101
|
},
|
|
9102
9102
|
`${id}-vaxis-${i}`
|
|
9103
9103
|
)
|
|
@@ -9105,7 +9105,7 @@ function renderValueAxis(id, range, layout, axisFormatting) {
|
|
|
9105
9105
|
}
|
|
9106
9106
|
}
|
|
9107
9107
|
if (hasDisplayUnits) {
|
|
9108
|
-
const unitLabel =
|
|
9108
|
+
const unitLabel = chunkDHNQHQ66_js.getDisplayUnitLabel(
|
|
9109
9109
|
axisFormatting.displayUnits,
|
|
9110
9110
|
axisFormatting.displayUnitsLabel
|
|
9111
9111
|
);
|
|
@@ -9180,7 +9180,7 @@ function renderZeroLine(id, range, layout) {
|
|
|
9180
9180
|
if (range.min >= 0) {
|
|
9181
9181
|
return null;
|
|
9182
9182
|
}
|
|
9183
|
-
const y =
|
|
9183
|
+
const y = chunkDHNQHQ66_js.valueToY(0, range, layout.plotTop, layout.plotBottom);
|
|
9184
9184
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
9185
9185
|
"line",
|
|
9186
9186
|
{
|
|
@@ -9204,7 +9204,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
9204
9204
|
const hasDisplayUnits = Boolean(axisFormatting?.displayUnits);
|
|
9205
9205
|
for (let i = 0; i <= steps; i++) {
|
|
9206
9206
|
const val = range.min + range.span * i / steps;
|
|
9207
|
-
const y =
|
|
9207
|
+
const y = chunkDHNQHQ66_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
9208
9208
|
labels.push(
|
|
9209
9209
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9210
9210
|
"text",
|
|
@@ -9216,7 +9216,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
9216
9216
|
fontFamily,
|
|
9217
9217
|
fontWeight,
|
|
9218
9218
|
fill: fontColor,
|
|
9219
|
-
children: hasDisplayUnits ?
|
|
9219
|
+
children: hasDisplayUnits ? chunkDHNQHQ66_js.formatAxisValueWithUnits(val, axisFormatting) : chunkDHNQHQ66_js.formatAxisValue(val)
|
|
9220
9220
|
},
|
|
9221
9221
|
`${id}-sec-vaxis-${i}`
|
|
9222
9222
|
)
|
|
@@ -9240,7 +9240,7 @@ function renderSecondaryValueAxis(id, range, layout, axisFormatting) {
|
|
|
9240
9240
|
);
|
|
9241
9241
|
}
|
|
9242
9242
|
if (hasDisplayUnits) {
|
|
9243
|
-
const unitLabel =
|
|
9243
|
+
const unitLabel = chunkDHNQHQ66_js.getDisplayUnitLabel(
|
|
9244
9244
|
axisFormatting.displayUnits,
|
|
9245
9245
|
axisFormatting.displayUnitsLabel
|
|
9246
9246
|
);
|
|
@@ -9271,7 +9271,7 @@ function renderSecondaryAxisTicks(id, range, layout) {
|
|
|
9271
9271
|
const ticks = [];
|
|
9272
9272
|
for (let i = 0; i <= steps; i++) {
|
|
9273
9273
|
const val = range.min + range.span * i / steps;
|
|
9274
|
-
const y =
|
|
9274
|
+
const y = chunkDHNQHQ66_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
9275
9275
|
ticks.push(
|
|
9276
9276
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9277
9277
|
"line",
|
|
@@ -9298,7 +9298,7 @@ function renderSecondaryGridlines(id, range, layout, axisFormatting) {
|
|
|
9298
9298
|
const gridColor = axisFormatting.majorGridlinesSpPr?.strokeColor ?? "#e2e8f0";
|
|
9299
9299
|
for (let i = 0; i <= steps; i++) {
|
|
9300
9300
|
const val = range.min + range.span * i / steps;
|
|
9301
|
-
const y =
|
|
9301
|
+
const y = chunkDHNQHQ66_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
|
|
9302
9302
|
lines.push(
|
|
9303
9303
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9304
9304
|
"line",
|
|
@@ -9460,7 +9460,7 @@ function renderChartDataTable(elementId, chartData, svgWidth) {
|
|
|
9460
9460
|
width: 8,
|
|
9461
9461
|
height: 8,
|
|
9462
9462
|
borderRadius: 2,
|
|
9463
|
-
backgroundColor:
|
|
9463
|
+
backgroundColor: chunkDHNQHQ66_js.seriesColor(
|
|
9464
9464
|
s,
|
|
9465
9465
|
si,
|
|
9466
9466
|
chartData.style?.styleId,
|
|
@@ -9499,8 +9499,8 @@ function renderChartDataTable(elementId, chartData, svgWidth) {
|
|
|
9499
9499
|
function renderStockChart(element, chartData, categoryLabels) {
|
|
9500
9500
|
const style = chartData.style;
|
|
9501
9501
|
const legendPos = style?.legendPosition || "b";
|
|
9502
|
-
const range =
|
|
9503
|
-
const layout =
|
|
9502
|
+
const range = chunkDHNQHQ66_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
9503
|
+
const layout = chunkDHNQHQ66_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
9504
9504
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
9505
9505
|
const barGroupWidth = layout.plotWidth / catCount;
|
|
9506
9506
|
const candleWidth = barGroupWidth * 0.5;
|
|
@@ -9521,10 +9521,10 @@ function renderStockChart(element, chartData, categoryLabels) {
|
|
|
9521
9521
|
const close = closeSeries.values[ci] ?? high;
|
|
9522
9522
|
const isUp = close >= open;
|
|
9523
9523
|
const cx = layout.plotLeft + barGroupWidth * ci + barGroupWidth / 2;
|
|
9524
|
-
const highY =
|
|
9525
|
-
const lowY =
|
|
9526
|
-
const openY =
|
|
9527
|
-
const closeY =
|
|
9524
|
+
const highY = chunkDHNQHQ66_js.valueToY(high, range, layout.plotTop, layout.plotBottom);
|
|
9525
|
+
const lowY = chunkDHNQHQ66_js.valueToY(low, range, layout.plotTop, layout.plotBottom);
|
|
9526
|
+
const openY = chunkDHNQHQ66_js.valueToY(open, range, layout.plotTop, layout.plotBottom);
|
|
9527
|
+
const closeY = chunkDHNQHQ66_js.valueToY(close, range, layout.plotTop, layout.plotBottom);
|
|
9528
9528
|
elements.push(
|
|
9529
9529
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9530
9530
|
"line",
|
|
@@ -9567,7 +9567,7 @@ function renderStockChart(element, chartData, categoryLabels) {
|
|
|
9567
9567
|
textAnchor: "middle",
|
|
9568
9568
|
fontSize: 7,
|
|
9569
9569
|
fill: "#334155",
|
|
9570
|
-
children:
|
|
9570
|
+
children: chunkDHNQHQ66_js.formatAxisValue(close)
|
|
9571
9571
|
},
|
|
9572
9572
|
`${element.id}-stock-dl-${ci}`
|
|
9573
9573
|
)
|
|
@@ -9609,7 +9609,7 @@ function FailedToLoad() {
|
|
|
9609
9609
|
var LazySurfaceChart3DScene = React4__default.default.lazy(
|
|
9610
9610
|
async () => {
|
|
9611
9611
|
try {
|
|
9612
|
-
return await import('./SurfaceChart3DScene-
|
|
9612
|
+
return await import('./SurfaceChart3DScene-LBHZDSGV.js');
|
|
9613
9613
|
} catch {
|
|
9614
9614
|
return { default: FailedToLoad };
|
|
9615
9615
|
}
|
|
@@ -9633,7 +9633,7 @@ var SurfaceChart3DErrorBoundary = class extends React4__default.default.Componen
|
|
|
9633
9633
|
function buildSurfaceData(chartData, categoryLabels) {
|
|
9634
9634
|
const rows = chartData.series.length;
|
|
9635
9635
|
const cols = Math.max(categoryLabels.length, 1);
|
|
9636
|
-
const range =
|
|
9636
|
+
const range = chunkDHNQHQ66_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
9637
9637
|
const heightMap = new Float32Array(rows * cols);
|
|
9638
9638
|
const colorMap = new Float32Array(rows * cols * 3);
|
|
9639
9639
|
for (let r = 0; r < rows; r++) {
|
|
@@ -9753,8 +9753,8 @@ function darkenRgb(r, g, b, factor) {
|
|
|
9753
9753
|
function renderIsometricSurfaceChart(element, chartData, categoryLabels) {
|
|
9754
9754
|
const style = chartData.style;
|
|
9755
9755
|
const legendPos = style?.legendPosition || "b";
|
|
9756
|
-
const layout =
|
|
9757
|
-
const range =
|
|
9756
|
+
const layout = chunkDHNQHQ66_js.computeLayout(element.width, element.height, style, false, legendPos);
|
|
9757
|
+
const range = chunkDHNQHQ66_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
9758
9758
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
9759
9759
|
const seriesCount = chartData.series.length;
|
|
9760
9760
|
const cols = catCount - 1;
|
|
@@ -9844,8 +9844,8 @@ function renderIsometricSurfaceChart(element, chartData, categoryLabels) {
|
|
|
9844
9844
|
function renderFlatSurfaceChart(element, chartData, categoryLabels) {
|
|
9845
9845
|
const style = chartData.style;
|
|
9846
9846
|
const legendPos = style?.legendPosition || "b";
|
|
9847
|
-
const layout =
|
|
9848
|
-
const range =
|
|
9847
|
+
const layout = chunkDHNQHQ66_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
9848
|
+
const range = chunkDHNQHQ66_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
9849
9849
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
9850
9850
|
const seriesCount = chartData.series.length;
|
|
9851
9851
|
const cellW = layout.plotWidth / Math.max(catCount - 1, 1);
|
|
@@ -9908,7 +9908,7 @@ function renderSurfaceChart(element, chartData, categoryLabels) {
|
|
|
9908
9908
|
function renderTreemapChart(element, chartData, categoryLabels) {
|
|
9909
9909
|
const style = chartData.style;
|
|
9910
9910
|
const legendPos = style?.legendPosition || "b";
|
|
9911
|
-
const layout =
|
|
9911
|
+
const layout = chunkDHNQHQ66_js.computeLayout(element.width, element.height, style, false, legendPos);
|
|
9912
9912
|
const allValues = chartData.series.flatMap((s) => s.values);
|
|
9913
9913
|
const totalAbs = allValues.reduce((sum, v) => sum + Math.abs(v), 0) || 1;
|
|
9914
9914
|
const rects = [];
|
|
@@ -9931,7 +9931,7 @@ function renderTreemapChart(element, chartData, categoryLabels) {
|
|
|
9931
9931
|
y: curY,
|
|
9932
9932
|
width: Math.max(w - 1, 1),
|
|
9933
9933
|
height: Math.max(h - 1, 1),
|
|
9934
|
-
fill:
|
|
9934
|
+
fill: chunkDHNQHQ66_js.paletteColor(item.index, chartData.style?.styleId, chartData.colorPalette),
|
|
9935
9935
|
rx: 2,
|
|
9936
9936
|
opacity: 0.85
|
|
9937
9937
|
},
|
|
@@ -9984,8 +9984,8 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
9984
9984
|
const style = chartData.style;
|
|
9985
9985
|
const legendPos = style?.legendPosition || "b";
|
|
9986
9986
|
const values = chartData.series[0]?.values ?? [];
|
|
9987
|
-
const range =
|
|
9988
|
-
const layout =
|
|
9987
|
+
const range = chunkDHNQHQ66_js.computeValueRangeForChart(chartData.series, chartData.axes);
|
|
9988
|
+
const layout = chunkDHNQHQ66_js.computeLayout(element.width, element.height, style, true, legendPos);
|
|
9989
9989
|
const catCount = Math.max(categoryLabels.length, values.length, 1);
|
|
9990
9990
|
const barWidth = layout.plotWidth / catCount * 0.6;
|
|
9991
9991
|
const gap = layout.plotWidth / catCount * 0.2;
|
|
@@ -9996,8 +9996,8 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
9996
9996
|
const isLast = i === values.length - 1;
|
|
9997
9997
|
const startVal = isLast ? 0 : runningTotal;
|
|
9998
9998
|
const endVal = isLast ? runningTotal + val : runningTotal + val;
|
|
9999
|
-
const barStartY =
|
|
10000
|
-
const barEndY =
|
|
9999
|
+
const barStartY = chunkDHNQHQ66_js.valueToY(startVal, range, layout.plotTop, layout.plotBottom);
|
|
10000
|
+
const barEndY = chunkDHNQHQ66_js.valueToY(endVal, range, layout.plotTop, layout.plotBottom);
|
|
10001
10001
|
const x = layout.plotLeft + layout.plotWidth / catCount * i + gap;
|
|
10002
10002
|
const y = Math.min(barStartY, barEndY);
|
|
10003
10003
|
const h = Math.max(Math.abs(barEndY - barStartY), 1);
|
|
@@ -10026,7 +10026,7 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
10026
10026
|
textAnchor: "middle",
|
|
10027
10027
|
fontSize: 7,
|
|
10028
10028
|
fill: "#334155",
|
|
10029
|
-
children:
|
|
10029
|
+
children: chunkDHNQHQ66_js.formatAxisValue(isLast ? endVal : val)
|
|
10030
10030
|
},
|
|
10031
10031
|
`${element.id}-wf-dl-${i}`
|
|
10032
10032
|
)
|
|
@@ -10074,18 +10074,18 @@ function renderWaterfallChart(element, chartData, categoryLabels) {
|
|
|
10074
10074
|
function renderComboChart(element, chartData, categoryLabels) {
|
|
10075
10075
|
const style = chartData.style;
|
|
10076
10076
|
const legendPos = style?.legendPosition || "b";
|
|
10077
|
-
const layoutOpts =
|
|
10077
|
+
const layoutOpts = chunkDHNQHQ66_js.computeLayoutOptions(
|
|
10078
10078
|
chartData.axes,
|
|
10079
10079
|
chartData.dataTable,
|
|
10080
10080
|
chartData.series.length
|
|
10081
10081
|
);
|
|
10082
|
-
const layout =
|
|
10083
|
-
const { primary, secondary } =
|
|
10082
|
+
const layout = chunkDHNQHQ66_js.computeLayout(element.width, element.height, style, true, legendPos, layoutOpts);
|
|
10083
|
+
const { primary, secondary } = chunkDHNQHQ66_js.splitSeriesByAxis(chartData.series, chartData.axes);
|
|
10084
10084
|
const primarySeries = primary.length > 0 ? primary.map((e) => e.series) : chartData.series;
|
|
10085
10085
|
const secondarySeries = secondary.map((e) => e.series);
|
|
10086
|
-
const range =
|
|
10087
|
-
const secondaryRange = secondarySeries.length > 0 ?
|
|
10088
|
-
const secondaryAxisFmt =
|
|
10086
|
+
const range = chunkDHNQHQ66_js.computeValueRangeForChart(primarySeries, chartData.axes);
|
|
10087
|
+
const secondaryRange = secondarySeries.length > 0 ? chunkDHNQHQ66_js.computeValueRange(secondarySeries) : void 0;
|
|
10088
|
+
const secondaryAxisFmt = chunkDHNQHQ66_js.getSecondaryValueAxis(chartData.axes);
|
|
10089
10089
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
10090
10090
|
const barSeriesCount = 1;
|
|
10091
10091
|
const barGroupWidth = layout.plotWidth / catCount;
|
|
@@ -10101,8 +10101,8 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
10101
10101
|
const barRange = isBarSecondary && secondaryRange ? secondaryRange : range;
|
|
10102
10102
|
barSeries.values.forEach((val, vi) => {
|
|
10103
10103
|
const x = layout.plotLeft + barGroupWidth * vi + barOffset;
|
|
10104
|
-
const zeroY =
|
|
10105
|
-
const valY =
|
|
10104
|
+
const zeroY = chunkDHNQHQ66_js.valueToY(0, barRange, layout.plotTop, layout.plotBottom);
|
|
10105
|
+
const valY = chunkDHNQHQ66_js.valueToY(val, barRange, layout.plotTop, layout.plotBottom);
|
|
10106
10106
|
const y = Math.min(zeroY, valY);
|
|
10107
10107
|
const h = Math.max(Math.abs(zeroY - valY), 1);
|
|
10108
10108
|
barElements.push(
|
|
@@ -10113,7 +10113,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
10113
10113
|
y,
|
|
10114
10114
|
width: barWidth,
|
|
10115
10115
|
height: h,
|
|
10116
|
-
fill:
|
|
10116
|
+
fill: chunkDHNQHQ66_js.seriesColor(barSeries, 0, chartData.style?.styleId, chartData.colorPalette),
|
|
10117
10117
|
rx: 1
|
|
10118
10118
|
},
|
|
10119
10119
|
`${element.id}-combo-bar-${vi}`
|
|
@@ -10129,7 +10129,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
10129
10129
|
textAnchor: "middle",
|
|
10130
10130
|
fontSize: 7,
|
|
10131
10131
|
fill: "#334155",
|
|
10132
|
-
children:
|
|
10132
|
+
children: chunkDHNQHQ66_js.formatAxisValue(val)
|
|
10133
10133
|
},
|
|
10134
10134
|
`${element.id}-combo-bar-dl-${vi}`
|
|
10135
10135
|
)
|
|
@@ -10146,10 +10146,10 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
10146
10146
|
const activeRange = isSecondary && secondaryRange ? secondaryRange : range;
|
|
10147
10147
|
const points = series.values.map((val, vi) => {
|
|
10148
10148
|
const x = layout.plotLeft + barGroupWidth * vi + barGroupWidth / 2;
|
|
10149
|
-
const y =
|
|
10149
|
+
const y = chunkDHNQHQ66_js.valueToY(val, activeRange, layout.plotTop, layout.plotBottom);
|
|
10150
10150
|
return { x, y, val };
|
|
10151
10151
|
});
|
|
10152
|
-
const c =
|
|
10152
|
+
const c = chunkDHNQHQ66_js.seriesColor(series, seriesIdx, chartData.style?.styleId, chartData.colorPalette);
|
|
10153
10153
|
lineElements.push(
|
|
10154
10154
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10155
10155
|
"polyline",
|
|
@@ -10176,7 +10176,7 @@ function renderComboChart(element, chartData, categoryLabels) {
|
|
|
10176
10176
|
textAnchor: "middle",
|
|
10177
10177
|
fontSize: 7,
|
|
10178
10178
|
fill: "#334155",
|
|
10179
|
-
children:
|
|
10179
|
+
children: chunkDHNQHQ66_js.formatAxisValue(p.val)
|
|
10180
10180
|
},
|
|
10181
10181
|
`${element.id}-combo-line-dl-${si}-${vi}`
|
|
10182
10182
|
)
|
|
@@ -11977,14 +11977,14 @@ function buildNotesPdf(pages) {
|
|
|
11977
11977
|
notes: page.notes,
|
|
11978
11978
|
slideNumber: page.slideNumber
|
|
11979
11979
|
}));
|
|
11980
|
-
const bytes =
|
|
11980
|
+
const bytes = chunkDHNQHQ66_js.buildNotesPdfBytes(images, meta);
|
|
11981
11981
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
11982
11982
|
return URL.createObjectURL(blob);
|
|
11983
11983
|
}
|
|
11984
11984
|
|
|
11985
11985
|
// src/viewer/utils/pdf-builder-slides.ts
|
|
11986
11986
|
function buildPdfFromImageData(images) {
|
|
11987
|
-
const bytes =
|
|
11987
|
+
const bytes = chunkDHNQHQ66_js.buildSlidesPdfBytes(images);
|
|
11988
11988
|
const blob = new Blob([bytes], { type: "application/pdf" });
|
|
11989
11989
|
return URL.createObjectURL(blob);
|
|
11990
11990
|
}
|
|
@@ -11993,7 +11993,7 @@ function buildPdfFromImageData(images) {
|
|
|
11993
11993
|
var activePreview = null;
|
|
11994
11994
|
function startPreviewAnimation(elementId, preset, options) {
|
|
11995
11995
|
stopPreviewAnimation();
|
|
11996
|
-
const descriptor =
|
|
11996
|
+
const descriptor = chunkDHNQHQ66_js.buildPreviewAnimation(preset, options);
|
|
11997
11997
|
if (!descriptor) {
|
|
11998
11998
|
return;
|
|
11999
11999
|
}
|
|
@@ -12071,7 +12071,7 @@ function useElementOperations(input) {
|
|
|
12071
12071
|
}, [applySelection, setInlineEditingElementId, setContextMenuState]);
|
|
12072
12072
|
const updateElementById = React4.useCallback(
|
|
12073
12073
|
(elementId, updates) => {
|
|
12074
|
-
if (
|
|
12074
|
+
if (chunkDHNQHQ66_js.isTemplateElementId(elementId)) {
|
|
12075
12075
|
const slideId = activeSlide?.id;
|
|
12076
12076
|
if (slideId) {
|
|
12077
12077
|
setTemplateElementsBySlideId((prev) => ({
|
|
@@ -12111,7 +12111,7 @@ function useElementOperations(input) {
|
|
|
12111
12111
|
);
|
|
12112
12112
|
const updateSelectedShapeStyle = React4.useCallback(
|
|
12113
12113
|
(updates) => {
|
|
12114
|
-
if (!selectedElement || !
|
|
12114
|
+
if (!selectedElement || !chunkHUD73YBT_js.hasShapeProperties(selectedElement)) {
|
|
12115
12115
|
return;
|
|
12116
12116
|
}
|
|
12117
12117
|
updateSelectedElement({
|
|
@@ -12122,17 +12122,17 @@ function useElementOperations(input) {
|
|
|
12122
12122
|
);
|
|
12123
12123
|
const updateSelectedTextStyle = React4.useCallback(
|
|
12124
12124
|
(updates) => {
|
|
12125
|
-
if (!selectedElement || !
|
|
12125
|
+
if (!selectedElement || !chunkHUD73YBT_js.hasTextProperties(selectedElement)) {
|
|
12126
12126
|
return;
|
|
12127
12127
|
}
|
|
12128
|
-
const inlineSel =
|
|
12128
|
+
const inlineSel = chunkDHNQHQ66_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
12129
12129
|
if (inlineSel && selectedElement.textSegments) {
|
|
12130
|
-
const { newSegments: newSegments2, newSelection } =
|
|
12130
|
+
const { newSegments: newSegments2, newSelection } = chunkDHNQHQ66_js.applyStyleToSelectedSegments(
|
|
12131
12131
|
selectedElement.textSegments,
|
|
12132
12132
|
inlineSel,
|
|
12133
12133
|
updates
|
|
12134
12134
|
);
|
|
12135
|
-
|
|
12135
|
+
chunkDHNQHQ66_js.setPendingSelectionRestore(newSelection);
|
|
12136
12136
|
updateSelectedElement({
|
|
12137
12137
|
textSegments: newSegments2
|
|
12138
12138
|
});
|
|
@@ -12152,12 +12152,12 @@ function useElementOperations(input) {
|
|
|
12152
12152
|
);
|
|
12153
12153
|
const updateSelectedTextCase = React4.useCallback(
|
|
12154
12154
|
(mode) => {
|
|
12155
|
-
if (!selectedElement || !
|
|
12155
|
+
if (!selectedElement || !chunkHUD73YBT_js.hasTextProperties(selectedElement)) {
|
|
12156
12156
|
return;
|
|
12157
12157
|
}
|
|
12158
|
-
const inlineSel =
|
|
12158
|
+
const inlineSel = chunkDHNQHQ66_js.getInlineEditorSelection(selectedElement.textSegments);
|
|
12159
12159
|
if (inlineSel && selectedElement.textSegments) {
|
|
12160
|
-
const newSegments =
|
|
12160
|
+
const newSegments = chunkDHNQHQ66_js.applyCaseTransformToSegments(
|
|
12161
12161
|
selectedElement.textSegments,
|
|
12162
12162
|
inlineSel,
|
|
12163
12163
|
mode
|
|
@@ -12167,14 +12167,14 @@ function useElementOperations(input) {
|
|
|
12167
12167
|
}
|
|
12168
12168
|
const updates = {};
|
|
12169
12169
|
if (selectedElement.textSegments && selectedElement.textSegments.length > 0) {
|
|
12170
|
-
updates.textSegments =
|
|
12170
|
+
updates.textSegments = chunkDHNQHQ66_js.applyCaseTransformToSegments(
|
|
12171
12171
|
selectedElement.textSegments,
|
|
12172
12172
|
null,
|
|
12173
12173
|
mode
|
|
12174
12174
|
);
|
|
12175
12175
|
}
|
|
12176
12176
|
if (typeof selectedElement.text === "string") {
|
|
12177
|
-
updates.text =
|
|
12177
|
+
updates.text = chunkDHNQHQ66_js.transformTextCase(selectedElement.text, mode);
|
|
12178
12178
|
}
|
|
12179
12179
|
updateSelectedElement(updates);
|
|
12180
12180
|
},
|
|
@@ -12229,7 +12229,7 @@ function useSectionOperations(input) {
|
|
|
12229
12229
|
const { sections, setSections, slides, setSlides, markDirty } = input;
|
|
12230
12230
|
const addSection2 = React4.useCallback(
|
|
12231
12231
|
(name, afterSlideIndex) => {
|
|
12232
|
-
const result =
|
|
12232
|
+
const result = chunkDHNQHQ66_js.addSection(sections, slides, name, afterSlideIndex);
|
|
12233
12233
|
setSlides(result.slides);
|
|
12234
12234
|
setSections(result.sections);
|
|
12235
12235
|
markDirty();
|
|
@@ -12238,7 +12238,7 @@ function useSectionOperations(input) {
|
|
|
12238
12238
|
);
|
|
12239
12239
|
const renameSection2 = React4.useCallback(
|
|
12240
12240
|
(sectionId, newName) => {
|
|
12241
|
-
const result =
|
|
12241
|
+
const result = chunkDHNQHQ66_js.renameSection(sections, slides, sectionId, newName);
|
|
12242
12242
|
setSections(result.sections);
|
|
12243
12243
|
setSlides(result.slides);
|
|
12244
12244
|
markDirty();
|
|
@@ -12247,7 +12247,7 @@ function useSectionOperations(input) {
|
|
|
12247
12247
|
);
|
|
12248
12248
|
const deleteSection2 = React4.useCallback(
|
|
12249
12249
|
(sectionId) => {
|
|
12250
|
-
const result =
|
|
12250
|
+
const result = chunkDHNQHQ66_js.deleteSection(sections, slides, sectionId);
|
|
12251
12251
|
setSections(result.sections);
|
|
12252
12252
|
setSlides(result.slides);
|
|
12253
12253
|
markDirty();
|
|
@@ -12256,21 +12256,21 @@ function useSectionOperations(input) {
|
|
|
12256
12256
|
);
|
|
12257
12257
|
const moveSectionUp2 = React4.useCallback(
|
|
12258
12258
|
(sectionId) => {
|
|
12259
|
-
setSections(
|
|
12259
|
+
setSections(chunkDHNQHQ66_js.moveSectionUp(sections, sectionId));
|
|
12260
12260
|
markDirty();
|
|
12261
12261
|
},
|
|
12262
12262
|
[sections, setSections, markDirty]
|
|
12263
12263
|
);
|
|
12264
12264
|
const moveSectionDown2 = React4.useCallback(
|
|
12265
12265
|
(sectionId) => {
|
|
12266
|
-
setSections(
|
|
12266
|
+
setSections(chunkDHNQHQ66_js.moveSectionDown(sections, sectionId));
|
|
12267
12267
|
markDirty();
|
|
12268
12268
|
},
|
|
12269
12269
|
[sections, setSections, markDirty]
|
|
12270
12270
|
);
|
|
12271
12271
|
const moveSlidesToSection2 = React4.useCallback(
|
|
12272
12272
|
(slideIndexes, targetSectionId) => {
|
|
12273
|
-
const result =
|
|
12273
|
+
const result = chunkDHNQHQ66_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
|
|
12274
12274
|
setSlides(result.slides);
|
|
12275
12275
|
setSections(result.sections);
|
|
12276
12276
|
markDirty();
|
|
@@ -12289,7 +12289,7 @@ function useSectionOperations(input) {
|
|
|
12289
12289
|
|
|
12290
12290
|
// src/viewer/hooks/pointer-move-handlers.ts
|
|
12291
12291
|
function computeResizeGeometry(handle, startX, startY, startWidth, startHeight, dx, dy, snapToGrid, gridSpacingPx) {
|
|
12292
|
-
const resized =
|
|
12292
|
+
const resized = chunkDHNQHQ66_js.applyResize(
|
|
12293
12293
|
{ x: startX, y: startY, width: startWidth, height: startHeight },
|
|
12294
12294
|
handle,
|
|
12295
12295
|
dx,
|
|
@@ -12301,7 +12301,7 @@ function computeResizeGeometry(handle, startX, startY, startWidth, startHeight,
|
|
|
12301
12301
|
if (!snapToGrid) {
|
|
12302
12302
|
return box;
|
|
12303
12303
|
}
|
|
12304
|
-
return
|
|
12304
|
+
return chunkDHNQHQ66_js.snapBoxToGrid(box, handle, gridSpacingPx, MIN_ELEMENT_SIZE);
|
|
12305
12305
|
}
|
|
12306
12306
|
function computeAdjustmentValue(startAdjustment, dx, startWidth) {
|
|
12307
12307
|
const range = startWidth || 200;
|
|
@@ -12411,7 +12411,7 @@ function processDragMove(e, drag, editorScale, snapToGrid, snapToShape, gridSpac
|
|
|
12411
12411
|
width: el.width,
|
|
12412
12412
|
height: el.height
|
|
12413
12413
|
}));
|
|
12414
|
-
const snapResult =
|
|
12414
|
+
const snapResult = chunkDHNQHQ66_js.computeSnapToShape(
|
|
12415
12415
|
targetX,
|
|
12416
12416
|
targetY,
|
|
12417
12417
|
primaryEl.width,
|
|
@@ -12554,13 +12554,13 @@ function processPointerUp(input) {
|
|
|
12554
12554
|
if (i !== activeSlideIndex) {
|
|
12555
12555
|
return s;
|
|
12556
12556
|
}
|
|
12557
|
-
const rerouted =
|
|
12557
|
+
const rerouted = chunkDHNQHQ66_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
|
|
12558
12558
|
if (rerouted.length === 0) {
|
|
12559
12559
|
return s;
|
|
12560
12560
|
}
|
|
12561
12561
|
return {
|
|
12562
12562
|
...s,
|
|
12563
|
-
elements:
|
|
12563
|
+
elements: chunkDHNQHQ66_js.applyReroutedConnectors(s.elements, rerouted)
|
|
12564
12564
|
};
|
|
12565
12565
|
})
|
|
12566
12566
|
);
|
|
@@ -12579,9 +12579,9 @@ function processPointerUp(input) {
|
|
|
12579
12579
|
}
|
|
12580
12580
|
function commitMarquee(marquee, editTemplateMode, templateElements, activeSlide, applySelection, clearSelection) {
|
|
12581
12581
|
const sourceElements = editTemplateMode ? templateElements : activeSlide?.elements ?? [];
|
|
12582
|
-
const hitIds =
|
|
12582
|
+
const hitIds = chunkDHNQHQ66_js.computeMarqueeHitIds(marquee, sourceElements);
|
|
12583
12583
|
if (marquee.additive) {
|
|
12584
|
-
const merged =
|
|
12584
|
+
const merged = chunkDHNQHQ66_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
|
|
12585
12585
|
if (merged.length > 0) {
|
|
12586
12586
|
applySelection(merged[0], merged);
|
|
12587
12587
|
} else {
|
|
@@ -12604,8 +12604,8 @@ function commitDrag(drag, editTemplateMode, activeSlide, activeSlideIndex, setTe
|
|
|
12604
12604
|
}
|
|
12605
12605
|
return { ...el, x: start.x + dx, y: start.y + dy };
|
|
12606
12606
|
});
|
|
12607
|
-
const rerouted =
|
|
12608
|
-
return
|
|
12607
|
+
const rerouted = chunkDHNQHQ66_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
|
|
12608
|
+
return chunkDHNQHQ66_js.applyReroutedConnectors(movedElements, rerouted);
|
|
12609
12609
|
};
|
|
12610
12610
|
if (editTemplateMode) {
|
|
12611
12611
|
const slideId = activeSlide?.id;
|
|
@@ -12756,9 +12756,9 @@ function useCanvasInteractions(input) {
|
|
|
12756
12756
|
return;
|
|
12757
12757
|
}
|
|
12758
12758
|
const el = elementLookup.get(editId);
|
|
12759
|
-
if (el &&
|
|
12759
|
+
if (el && chunkHUD73YBT_js.hasTextProperties(el)) {
|
|
12760
12760
|
const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
|
|
12761
|
-
const newSegments =
|
|
12761
|
+
const newSegments = chunkDHNQHQ66_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
|
|
12762
12762
|
ops.updateElementById(editId, {
|
|
12763
12763
|
text: committedText,
|
|
12764
12764
|
textSegments: newSegments
|
|
@@ -12769,7 +12769,7 @@ function useCanvasInteractions(input) {
|
|
|
12769
12769
|
setInlineEditingText("");
|
|
12770
12770
|
};
|
|
12771
12771
|
const openEquationEditorForElement = (el) => {
|
|
12772
|
-
if (!
|
|
12772
|
+
if (!chunkHUD73YBT_js.hasTextProperties(el)) {
|
|
12773
12773
|
return false;
|
|
12774
12774
|
}
|
|
12775
12775
|
const eqSeg = el.textSegments?.find((seg) => seg.equationXml);
|
|
@@ -12798,7 +12798,7 @@ function useCanvasInteractions(input) {
|
|
|
12798
12798
|
justSelectedRef.current = false;
|
|
12799
12799
|
} else {
|
|
12800
12800
|
const el = elementLookup.get(elementId);
|
|
12801
|
-
if (el &&
|
|
12801
|
+
if (el && chunkHUD73YBT_js.hasTextProperties(el) && !el.locks?.noTextEdit) {
|
|
12802
12802
|
if (!openEquationEditorForElement(el)) {
|
|
12803
12803
|
setInlineEditingElementId(elementId);
|
|
12804
12804
|
setInlineEditingText(el.text ?? "");
|
|
@@ -12817,7 +12817,7 @@ function useCanvasInteractions(input) {
|
|
|
12817
12817
|
if (openEquationEditorForElement(el)) {
|
|
12818
12818
|
return;
|
|
12819
12819
|
}
|
|
12820
|
-
if (
|
|
12820
|
+
if (chunkHUD73YBT_js.hasTextProperties(el)) {
|
|
12821
12821
|
setInlineEditingElementId(elementId);
|
|
12822
12822
|
setInlineEditingText(el.text ?? "");
|
|
12823
12823
|
}
|
|
@@ -13007,7 +13007,7 @@ function createFileHandlers(deps) {
|
|
|
13007
13007
|
h = Math.round(h * scale);
|
|
13008
13008
|
}
|
|
13009
13009
|
addElement({
|
|
13010
|
-
id:
|
|
13010
|
+
id: chunkDHNQHQ66_js.generateElementId(),
|
|
13011
13011
|
type: "image",
|
|
13012
13012
|
x: Math.round((canvasSize.width - w) / 2),
|
|
13013
13013
|
y: Math.round((canvasSize.height - h) / 2),
|
|
@@ -13018,7 +13018,7 @@ function createFileHandlers(deps) {
|
|
|
13018
13018
|
};
|
|
13019
13019
|
img.onerror = () => {
|
|
13020
13020
|
addElement({
|
|
13021
|
-
id:
|
|
13021
|
+
id: chunkDHNQHQ66_js.generateElementId(),
|
|
13022
13022
|
type: "image",
|
|
13023
13023
|
x: 100,
|
|
13024
13024
|
y: 100,
|
|
@@ -13044,7 +13044,7 @@ function createFileHandlers(deps) {
|
|
|
13044
13044
|
const elFilePath = file.path;
|
|
13045
13045
|
const insertMediaElement = (mediaSourceUrl, width, height) => {
|
|
13046
13046
|
addElement({
|
|
13047
|
-
id:
|
|
13047
|
+
id: chunkDHNQHQ66_js.generateElementId(),
|
|
13048
13048
|
type: "media",
|
|
13049
13049
|
mediaType,
|
|
13050
13050
|
mediaMimeType: file.type || void 0,
|
|
@@ -13219,13 +13219,13 @@ function createStructuredElementHandlers(deps) {
|
|
|
13219
13219
|
return;
|
|
13220
13220
|
}
|
|
13221
13221
|
addElement({
|
|
13222
|
-
id:
|
|
13222
|
+
id: chunkDHNQHQ66_js.generateElementId(),
|
|
13223
13223
|
type: "smartArt",
|
|
13224
13224
|
x: 100,
|
|
13225
13225
|
y: 120,
|
|
13226
13226
|
width: 600,
|
|
13227
13227
|
height: 340,
|
|
13228
|
-
smartArtData:
|
|
13228
|
+
smartArtData: chunkDHNQHQ66_js.buildSmartArtPresetData(
|
|
13229
13229
|
layout,
|
|
13230
13230
|
defaultItems,
|
|
13231
13231
|
(i) => `node-${Date.now()}-${i}-${Math.random().toString(36).slice(2, 8)}`
|
|
@@ -13237,7 +13237,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
13237
13237
|
return;
|
|
13238
13238
|
}
|
|
13239
13239
|
addElement({
|
|
13240
|
-
id:
|
|
13240
|
+
id: chunkDHNQHQ66_js.generateElementId(),
|
|
13241
13241
|
type: "shape",
|
|
13242
13242
|
x: 120,
|
|
13243
13243
|
y: 200,
|
|
@@ -13296,7 +13296,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
13296
13296
|
const displayText = value || fieldTexts[fieldType] || fieldType;
|
|
13297
13297
|
const fieldGuid = `{${crypto.randomUUID().toUpperCase()}}`;
|
|
13298
13298
|
addElement({
|
|
13299
|
-
id:
|
|
13299
|
+
id: chunkDHNQHQ66_js.generateElementId(),
|
|
13300
13300
|
type: "shape",
|
|
13301
13301
|
x: 120,
|
|
13302
13302
|
y: 200,
|
|
@@ -13318,11 +13318,11 @@ function createStructuredElementHandlers(deps) {
|
|
|
13318
13318
|
if (!activeSlide) {
|
|
13319
13319
|
return;
|
|
13320
13320
|
}
|
|
13321
|
-
const preset =
|
|
13321
|
+
const preset = chunkDHNQHQ66_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
|
|
13322
13322
|
if (!preset) {
|
|
13323
13323
|
return;
|
|
13324
13324
|
}
|
|
13325
|
-
const defaultPptxAction =
|
|
13325
|
+
const defaultPptxAction = chunkHUD73YBT_js.elementActionToPptxAction({
|
|
13326
13326
|
trigger: "click",
|
|
13327
13327
|
type: preset.defaultAction
|
|
13328
13328
|
});
|
|
@@ -13331,7 +13331,7 @@ function createStructuredElementHandlers(deps) {
|
|
|
13331
13331
|
defaultPptxAction.highlightClick = true;
|
|
13332
13332
|
}
|
|
13333
13333
|
addElement({
|
|
13334
|
-
id:
|
|
13334
|
+
id: chunkDHNQHQ66_js.generateElementId(),
|
|
13335
13335
|
type: "shape",
|
|
13336
13336
|
x: 150,
|
|
13337
13337
|
y: 150,
|
|
@@ -13398,7 +13398,7 @@ function useInsertElements(input) {
|
|
|
13398
13398
|
return;
|
|
13399
13399
|
}
|
|
13400
13400
|
addElement({
|
|
13401
|
-
id:
|
|
13401
|
+
id: chunkDHNQHQ66_js.generateElementId(),
|
|
13402
13402
|
type: "text",
|
|
13403
13403
|
x: 100,
|
|
13404
13404
|
y: 100,
|
|
@@ -13413,7 +13413,7 @@ function useInsertElements(input) {
|
|
|
13413
13413
|
return;
|
|
13414
13414
|
}
|
|
13415
13415
|
addElement({
|
|
13416
|
-
id:
|
|
13416
|
+
id: chunkDHNQHQ66_js.generateElementId(),
|
|
13417
13417
|
type: "shape",
|
|
13418
13418
|
x: 150,
|
|
13419
13419
|
y: 150,
|
|
@@ -13432,15 +13432,15 @@ function useInsertElements(input) {
|
|
|
13432
13432
|
return;
|
|
13433
13433
|
}
|
|
13434
13434
|
addElement({
|
|
13435
|
-
...
|
|
13436
|
-
id:
|
|
13435
|
+
...chunkDHNQHQ66_js.newTableElement(DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, 100, 200),
|
|
13436
|
+
id: chunkDHNQHQ66_js.generateElementId()
|
|
13437
13437
|
});
|
|
13438
13438
|
};
|
|
13439
13439
|
const handleAddChart = (chartType) => {
|
|
13440
13440
|
if (!activeSlide) {
|
|
13441
13441
|
return;
|
|
13442
13442
|
}
|
|
13443
|
-
addElement(
|
|
13443
|
+
addElement(chunkDHNQHQ66_js.createDefaultChartElement(chartType));
|
|
13444
13444
|
};
|
|
13445
13445
|
const structured = createStructuredElementHandlers({
|
|
13446
13446
|
activeSlide,
|
|
@@ -13510,7 +13510,7 @@ function useClipboardHandlers(input) {
|
|
|
13510
13510
|
if (!selectedElement) {
|
|
13511
13511
|
return;
|
|
13512
13512
|
}
|
|
13513
|
-
setClipboardPayload(
|
|
13513
|
+
setClipboardPayload(chunkDHNQHQ66_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
|
|
13514
13514
|
};
|
|
13515
13515
|
const handleDelete = () => {
|
|
13516
13516
|
const idsToDelete = effectiveSelectedIds;
|
|
@@ -13527,7 +13527,7 @@ function useClipboardHandlers(input) {
|
|
|
13527
13527
|
handleDelete();
|
|
13528
13528
|
};
|
|
13529
13529
|
const insertClone = (source) => {
|
|
13530
|
-
const clone =
|
|
13530
|
+
const clone = chunkDHNQHQ66_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
|
|
13531
13531
|
ops.updateActiveElements((els) => [...els, clone]);
|
|
13532
13532
|
ops.applySelection(clone.id);
|
|
13533
13533
|
history.markDirty();
|
|
@@ -13562,7 +13562,7 @@ function resolveShapePath(el) {
|
|
|
13562
13562
|
return el.pathData;
|
|
13563
13563
|
}
|
|
13564
13564
|
if ("shapeType" in el && typeof el.shapeType === "string") {
|
|
13565
|
-
const clipPath =
|
|
13565
|
+
const clipPath = chunkHUD73YBT_js.getPresetShapeClipPath(el.shapeType);
|
|
13566
13566
|
if (clipPath) {
|
|
13567
13567
|
const svgPath = clipPathToSvgPath(clipPath, el.width, el.height);
|
|
13568
13568
|
if (svgPath) {
|
|
@@ -13613,7 +13613,7 @@ function clipPathToSvgPath(clipPath, width, height) {
|
|
|
13613
13613
|
return parts.join(" ");
|
|
13614
13614
|
}
|
|
13615
13615
|
function transformPathToGlobal(pathData, el) {
|
|
13616
|
-
const polys =
|
|
13616
|
+
const polys = chunkHUD73YBT_js.svgPathToPolygons(pathData);
|
|
13617
13617
|
if (polys.length === 0) {
|
|
13618
13618
|
return pathData;
|
|
13619
13619
|
}
|
|
@@ -13633,10 +13633,10 @@ function transformPathToGlobal(pathData, el) {
|
|
|
13633
13633
|
y: pt.y * scaleY + el.y
|
|
13634
13634
|
}))
|
|
13635
13635
|
);
|
|
13636
|
-
return
|
|
13636
|
+
return chunkHUD73YBT_js.polygonsToSvgPath(transformed);
|
|
13637
13637
|
}
|
|
13638
13638
|
function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
13639
|
-
const polys =
|
|
13639
|
+
const polys = chunkHUD73YBT_js.svgPathToPolygons(pathData);
|
|
13640
13640
|
if (polys.length === 0) {
|
|
13641
13641
|
return pathData;
|
|
13642
13642
|
}
|
|
@@ -13646,10 +13646,10 @@ function transformPathToLocal(pathData, x, y, _width, _height) {
|
|
|
13646
13646
|
y: pt.y - y
|
|
13647
13647
|
}))
|
|
13648
13648
|
);
|
|
13649
|
-
return
|
|
13649
|
+
return chunkHUD73YBT_js.polygonsToSvgPath(transformed);
|
|
13650
13650
|
}
|
|
13651
13651
|
function pathBounds(pathData) {
|
|
13652
|
-
const polys =
|
|
13652
|
+
const polys = chunkHUD73YBT_js.svgPathToPolygons(pathData);
|
|
13653
13653
|
let minX = Infinity;
|
|
13654
13654
|
let minY = Infinity;
|
|
13655
13655
|
let maxX = -Infinity;
|
|
@@ -13708,7 +13708,7 @@ function useMergeShapesHandler(input) {
|
|
|
13708
13708
|
let allFragments = [];
|
|
13709
13709
|
let remaining = globalPaths[0];
|
|
13710
13710
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
13711
|
-
const frags =
|
|
13711
|
+
const frags = chunkHUD73YBT_js.mergeShapes("fragment", remaining, globalPaths[i]);
|
|
13712
13712
|
if (Array.isArray(frags)) {
|
|
13713
13713
|
allFragments = frags;
|
|
13714
13714
|
}
|
|
@@ -13737,7 +13737,7 @@ function useMergeShapesHandler(input) {
|
|
|
13737
13737
|
bounds.height
|
|
13738
13738
|
);
|
|
13739
13739
|
const newEl = {
|
|
13740
|
-
id:
|
|
13740
|
+
id: chunkDHNQHQ66_js.generateElementId(),
|
|
13741
13741
|
type: "shape",
|
|
13742
13742
|
x: bounds.x,
|
|
13743
13743
|
y: bounds.y,
|
|
@@ -13775,7 +13775,7 @@ function useMergeShapesHandler(input) {
|
|
|
13775
13775
|
} else {
|
|
13776
13776
|
let resultPath = globalPaths[0];
|
|
13777
13777
|
for (let i = 1; i < globalPaths.length; i++) {
|
|
13778
|
-
const result =
|
|
13778
|
+
const result = chunkHUD73YBT_js.mergeShapes(operation, resultPath, globalPaths[i]);
|
|
13779
13779
|
if (typeof result === "string") {
|
|
13780
13780
|
resultPath = result;
|
|
13781
13781
|
}
|
|
@@ -13796,7 +13796,7 @@ function useMergeShapesHandler(input) {
|
|
|
13796
13796
|
);
|
|
13797
13797
|
const primary = targets[0];
|
|
13798
13798
|
const newEl = {
|
|
13799
|
-
id:
|
|
13799
|
+
id: chunkDHNQHQ66_js.generateElementId(),
|
|
13800
13800
|
type: "shape",
|
|
13801
13801
|
x: bounds.x,
|
|
13802
13802
|
y: bounds.y,
|
|
@@ -13859,7 +13859,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
13859
13859
|
if (ids.length < 2 || !activeSlide) {
|
|
13860
13860
|
return;
|
|
13861
13861
|
}
|
|
13862
|
-
const { elements, groupId } =
|
|
13862
|
+
const { elements, groupId } = chunkDHNQHQ66_js.groupElements(ops.activeElements, ids, chunkDHNQHQ66_js.generateElementId());
|
|
13863
13863
|
if (groupId === null) {
|
|
13864
13864
|
return;
|
|
13865
13865
|
}
|
|
@@ -13872,12 +13872,12 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
13872
13872
|
return;
|
|
13873
13873
|
}
|
|
13874
13874
|
const group = selectedElement;
|
|
13875
|
-
const intoTemplate =
|
|
13875
|
+
const intoTemplate = chunkDHNQHQ66_js.isTemplateElementId(group.id);
|
|
13876
13876
|
const ungrouped = group.children.map((child) => ({
|
|
13877
13877
|
...structuredClone(child),
|
|
13878
13878
|
// Keep child ids in the same store as the group so later edits route
|
|
13879
13879
|
// correctly: template groups yield template-prefixed child ids.
|
|
13880
|
-
id: intoTemplate ?
|
|
13880
|
+
id: intoTemplate ? chunkDHNQHQ66_js.makeCloneId(true, child.id || group.id) : child.id || chunkDHNQHQ66_js.generateElementId(),
|
|
13881
13881
|
x: child.x + group.x,
|
|
13882
13882
|
y: child.y + group.y
|
|
13883
13883
|
}));
|
|
@@ -13901,7 +13901,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
13901
13901
|
if (!edge) {
|
|
13902
13902
|
return;
|
|
13903
13903
|
}
|
|
13904
|
-
const positions =
|
|
13904
|
+
const positions = chunkDHNQHQ66_js.alignElements(selectedElements, edge);
|
|
13905
13905
|
for (const [id, pos] of positions) {
|
|
13906
13906
|
const el = elementLookup.get(id);
|
|
13907
13907
|
if (!el) {
|
|
@@ -13919,7 +13919,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
13919
13919
|
if (!distAxis) {
|
|
13920
13920
|
return;
|
|
13921
13921
|
}
|
|
13922
|
-
const positions =
|
|
13922
|
+
const positions = chunkDHNQHQ66_js.distributeElements(selectedElements, distAxis);
|
|
13923
13923
|
for (const [id, pos] of positions) {
|
|
13924
13924
|
const el = elementLookup.get(id);
|
|
13925
13925
|
if (!el) {
|
|
@@ -13936,7 +13936,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
13936
13936
|
}
|
|
13937
13937
|
const id = selectedElement.id;
|
|
13938
13938
|
ops.updateActiveElements(
|
|
13939
|
-
(els) => direction === "forward" ?
|
|
13939
|
+
(els) => direction === "forward" ? chunkDHNQHQ66_js.bringForward(els, id) : direction === "backward" ? chunkDHNQHQ66_js.sendBackward(els, id) : els
|
|
13940
13940
|
);
|
|
13941
13941
|
history.markDirty();
|
|
13942
13942
|
};
|
|
@@ -13946,7 +13946,7 @@ function useGroupAlignLayerHandlers(input) {
|
|
|
13946
13946
|
}
|
|
13947
13947
|
const id = selectedElement.id;
|
|
13948
13948
|
ops.updateActiveElements(
|
|
13949
|
-
(els) => direction === "front" ?
|
|
13949
|
+
(els) => direction === "front" ? chunkDHNQHQ66_js.bringToFront(els, id) : chunkDHNQHQ66_js.sendToBack(els, id)
|
|
13950
13950
|
);
|
|
13951
13951
|
history.markDirty();
|
|
13952
13952
|
};
|
|
@@ -14068,7 +14068,7 @@ function insertSlideFromLayoutUpdater(slides, activeIndex, draft) {
|
|
|
14068
14068
|
function useSlideManagement(input) {
|
|
14069
14069
|
const { slides, activeSlideIndex, setActiveSlideIndex, ops, history, handlerRef } = input;
|
|
14070
14070
|
const handleAddSlide = () => {
|
|
14071
|
-
const newSlide =
|
|
14071
|
+
const newSlide = chunkDHNQHQ66_js.createBlankSlide(slides.length + 1);
|
|
14072
14072
|
ops.updateSlides((prev) => {
|
|
14073
14073
|
const next = [...prev];
|
|
14074
14074
|
next.splice(activeSlideIndex + 1, 0, newSlide);
|
|
@@ -14131,7 +14131,7 @@ function useSlideManagement(input) {
|
|
|
14131
14131
|
}
|
|
14132
14132
|
const clone = {
|
|
14133
14133
|
...src,
|
|
14134
|
-
id:
|
|
14134
|
+
id: chunkDHNQHQ66_js.makeSlideId(),
|
|
14135
14135
|
elements: src.elements.map((el) => ({
|
|
14136
14136
|
...el,
|
|
14137
14137
|
id: `${el.id}-dup-${Math.random().toString(36).slice(2, 6)}`
|
|
@@ -14163,7 +14163,7 @@ function useSlideManagement(input) {
|
|
|
14163
14163
|
const handleInsertSlideFromLayout = (layoutPath, layoutName) => {
|
|
14164
14164
|
const insertAt = activeSlideIndex + 1;
|
|
14165
14165
|
const draft = {
|
|
14166
|
-
...
|
|
14166
|
+
...chunkDHNQHQ66_js.createBlankSlide(slides.length + 1),
|
|
14167
14167
|
layoutPath,
|
|
14168
14168
|
...layoutName ? { layoutName } : {}
|
|
14169
14169
|
};
|
|
@@ -14224,7 +14224,7 @@ function createTableMergeHandlers(input) {
|
|
|
14224
14224
|
if (!nextCell || nextCell.hMerge || nextCell.vMerge) {
|
|
14225
14225
|
return;
|
|
14226
14226
|
}
|
|
14227
|
-
const newTableData =
|
|
14227
|
+
const newTableData = chunkDHNQHQ66_js.mergeCells(
|
|
14228
14228
|
[
|
|
14229
14229
|
{ row: rowIndex, col: columnIndex },
|
|
14230
14230
|
{ row: rowIndex, col: nextColIdx }
|
|
@@ -14232,7 +14232,7 @@ function createTableMergeHandlers(input) {
|
|
|
14232
14232
|
td
|
|
14233
14233
|
);
|
|
14234
14234
|
const updates = { tableData: newTableData };
|
|
14235
|
-
const newRawXml =
|
|
14235
|
+
const newRawXml = chunkHUD73YBT_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
14236
14236
|
if (newRawXml) {
|
|
14237
14237
|
updates.rawXml = newRawXml;
|
|
14238
14238
|
}
|
|
@@ -14258,7 +14258,7 @@ function createTableMergeHandlers(input) {
|
|
|
14258
14258
|
if (!targetNextCell || targetNextCell.hMerge || targetNextCell.vMerge) {
|
|
14259
14259
|
return;
|
|
14260
14260
|
}
|
|
14261
|
-
const newTableData =
|
|
14261
|
+
const newTableData = chunkDHNQHQ66_js.mergeCells(
|
|
14262
14262
|
[
|
|
14263
14263
|
{ row: rowIndex, col: columnIndex },
|
|
14264
14264
|
{ row: targetNextRowIdx, col: columnIndex }
|
|
@@ -14266,7 +14266,7 @@ function createTableMergeHandlers(input) {
|
|
|
14266
14266
|
td
|
|
14267
14267
|
);
|
|
14268
14268
|
const updates = { tableData: newTableData };
|
|
14269
|
-
const newRawXml =
|
|
14269
|
+
const newRawXml = chunkHUD73YBT_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
14270
14270
|
if (newRawXml) {
|
|
14271
14271
|
updates.rawXml = newRawXml;
|
|
14272
14272
|
}
|
|
@@ -14281,9 +14281,9 @@ function createTableMergeHandlers(input) {
|
|
|
14281
14281
|
return;
|
|
14282
14282
|
}
|
|
14283
14283
|
const td = selectedElement.tableData;
|
|
14284
|
-
const newTableData =
|
|
14284
|
+
const newTableData = chunkDHNQHQ66_js.mergeCells(ts.selectedCells, td);
|
|
14285
14285
|
const updates = { tableData: newTableData };
|
|
14286
|
-
const newRawXml =
|
|
14286
|
+
const newRawXml = chunkHUD73YBT_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
14287
14287
|
if (newRawXml) {
|
|
14288
14288
|
updates.rawXml = newRawXml;
|
|
14289
14289
|
}
|
|
@@ -14300,9 +14300,9 @@ function createTableMergeHandlers(input) {
|
|
|
14300
14300
|
}
|
|
14301
14301
|
const { rowIndex, columnIndex } = ts;
|
|
14302
14302
|
const td = selectedElement.tableData;
|
|
14303
|
-
const newTableData =
|
|
14303
|
+
const newTableData = chunkDHNQHQ66_js.splitCell(rowIndex, columnIndex, td);
|
|
14304
14304
|
const updates = { tableData: newTableData };
|
|
14305
|
-
const newRawXml =
|
|
14305
|
+
const newRawXml = chunkHUD73YBT_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
|
|
14306
14306
|
if (newRawXml) {
|
|
14307
14307
|
updates.rawXml = newRawXml;
|
|
14308
14308
|
}
|
|
@@ -14346,7 +14346,7 @@ function createTableStructHandlers(input) {
|
|
|
14346
14346
|
updates.tableData = { ...el.tableData, rows: newRows };
|
|
14347
14347
|
}
|
|
14348
14348
|
if (el.rawXml) {
|
|
14349
|
-
const newRawXml =
|
|
14349
|
+
const newRawXml = chunkHUD73YBT_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
|
|
14350
14350
|
if (newRawXml) {
|
|
14351
14351
|
updates.rawXml = newRawXml;
|
|
14352
14352
|
}
|
|
@@ -14370,7 +14370,7 @@ function createTableStructHandlers(input) {
|
|
|
14370
14370
|
const { rowIndex, columnIndex: colIndex } = ts;
|
|
14371
14371
|
const updates = {};
|
|
14372
14372
|
if (selectedElement.rawXml) {
|
|
14373
|
-
const newRawXml =
|
|
14373
|
+
const newRawXml = chunkHUD73YBT_js.updateCellTextStyleInRawXml(
|
|
14374
14374
|
selectedElement,
|
|
14375
14375
|
rowIndex,
|
|
14376
14376
|
colIndex,
|
|
@@ -14434,9 +14434,9 @@ function createTableStructHandlers(input) {
|
|
|
14434
14434
|
return;
|
|
14435
14435
|
}
|
|
14436
14436
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
14437
|
-
const newTableData =
|
|
14437
|
+
const newTableData = chunkDHNQHQ66_js.insertTableRow(selectedElement.tableData, rowIdx, position);
|
|
14438
14438
|
const updates = { tableData: newTableData };
|
|
14439
|
-
const newRawXml =
|
|
14439
|
+
const newRawXml = chunkHUD73YBT_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
14440
14440
|
if (newRawXml) {
|
|
14441
14441
|
updates.rawXml = newRawXml;
|
|
14442
14442
|
}
|
|
@@ -14449,12 +14449,12 @@ function createTableStructHandlers(input) {
|
|
|
14449
14449
|
}
|
|
14450
14450
|
const td = selectedElement.tableData;
|
|
14451
14451
|
const rowIdx = ts?.rowIndex ?? 0;
|
|
14452
|
-
const newTableData =
|
|
14452
|
+
const newTableData = chunkDHNQHQ66_js.deleteTableRow(td, rowIdx);
|
|
14453
14453
|
if (newTableData === td) {
|
|
14454
14454
|
return;
|
|
14455
14455
|
}
|
|
14456
14456
|
const updates = { tableData: newTableData };
|
|
14457
|
-
const newRawXml =
|
|
14457
|
+
const newRawXml = chunkHUD73YBT_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
14458
14458
|
if (newRawXml) {
|
|
14459
14459
|
updates.rawXml = newRawXml;
|
|
14460
14460
|
}
|
|
@@ -14466,9 +14466,9 @@ function createTableStructHandlers(input) {
|
|
|
14466
14466
|
return;
|
|
14467
14467
|
}
|
|
14468
14468
|
const colIdx = ts?.columnIndex ?? 0;
|
|
14469
|
-
const newTableData =
|
|
14469
|
+
const newTableData = chunkDHNQHQ66_js.insertTableColumn(selectedElement.tableData, colIdx, position);
|
|
14470
14470
|
const updates = { tableData: newTableData };
|
|
14471
|
-
const newRawXml =
|
|
14471
|
+
const newRawXml = chunkHUD73YBT_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
14472
14472
|
if (newRawXml) {
|
|
14473
14473
|
updates.rawXml = newRawXml;
|
|
14474
14474
|
}
|
|
@@ -14481,12 +14481,12 @@ function createTableStructHandlers(input) {
|
|
|
14481
14481
|
}
|
|
14482
14482
|
const td = selectedElement.tableData;
|
|
14483
14483
|
const colIdx = ts?.columnIndex ?? 0;
|
|
14484
|
-
const newTableData =
|
|
14484
|
+
const newTableData = chunkDHNQHQ66_js.deleteTableColumn(td, colIdx);
|
|
14485
14485
|
if (newTableData === td) {
|
|
14486
14486
|
return;
|
|
14487
14487
|
}
|
|
14488
14488
|
const updates = { tableData: newTableData };
|
|
14489
|
-
const newRawXml =
|
|
14489
|
+
const newRawXml = chunkHUD73YBT_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
|
|
14490
14490
|
if (newRawXml) {
|
|
14491
14491
|
updates.rawXml = newRawXml;
|
|
14492
14492
|
}
|
|
@@ -14522,8 +14522,8 @@ async function renderToCanvas(element, options = {}) {
|
|
|
14522
14522
|
return html2canvasPro(element, {
|
|
14523
14523
|
...options,
|
|
14524
14524
|
onclone: async (doc, clonedEl) => {
|
|
14525
|
-
await
|
|
14526
|
-
|
|
14525
|
+
await chunkDHNQHQ66_js.normalizeColorsForCapture(doc, clonedEl);
|
|
14526
|
+
chunkDHNQHQ66_js.preprocessCssForCapture(clonedEl);
|
|
14527
14527
|
if (typeof userOnClone === "function") {
|
|
14528
14528
|
userOnClone(doc, clonedEl);
|
|
14529
14529
|
}
|
|
@@ -14579,7 +14579,7 @@ async function exportSlideToPngBlob(slideElement, options = {}) {
|
|
|
14579
14579
|
}
|
|
14580
14580
|
async function exportSlideAsPng(slideElement, slideIndex, options = {}) {
|
|
14581
14581
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
14582
|
-
|
|
14582
|
+
chunkDHNQHQ66_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
|
|
14583
14583
|
}
|
|
14584
14584
|
async function copySlideToClipboard(slideElement, options = {}) {
|
|
14585
14585
|
const blob = await exportSlideToPngBlob(slideElement, options);
|
|
@@ -14601,7 +14601,7 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
|
|
|
14601
14601
|
continue;
|
|
14602
14602
|
}
|
|
14603
14603
|
const canvas = await renderElementToCanvas(stageEl, scale);
|
|
14604
|
-
images.push(
|
|
14604
|
+
images.push(chunkDHNQHQ66_js.canvasToJpegData(canvas));
|
|
14605
14605
|
}
|
|
14606
14606
|
onProgress?.(totalSlides, totalSlides);
|
|
14607
14607
|
setActiveSlide(currentSlideIndex);
|
|
@@ -14609,7 +14609,7 @@ async function exportAllSlidesAsPdf(slideStageRef, totalSlides, setActiveSlide,
|
|
|
14609
14609
|
throw new Error(chunkCUUYYYC5_js.translationsEn["pptx.export.errorNoSlidesPdf"]);
|
|
14610
14610
|
}
|
|
14611
14611
|
const pdfBlobUrl = buildPdfFromImageData(images);
|
|
14612
|
-
|
|
14612
|
+
chunkDHNQHQ66_js.downloadDataUrl(pdfBlobUrl, filename);
|
|
14613
14613
|
}
|
|
14614
14614
|
async function captureAllSlidesAsPngDataUrls(slideStageRef, totalSlides, setActiveSlide, currentSlideIndex, options = {}) {
|
|
14615
14615
|
const { scale = 2, onProgress } = options;
|
|
@@ -14658,7 +14658,7 @@ async function exportAllSlidesAsNotesPdf(slideStageRef, totalSlides, setActiveSl
|
|
|
14658
14658
|
throw new Error(chunkCUUYYYC5_js.translationsEn["pptx.export.errorNoSlidesNotesPdf"]);
|
|
14659
14659
|
}
|
|
14660
14660
|
const pdfDataUrl = buildNotesPdf(pages);
|
|
14661
|
-
|
|
14661
|
+
chunkDHNQHQ66_js.downloadDataUrl(pdfDataUrl, filename);
|
|
14662
14662
|
}
|
|
14663
14663
|
|
|
14664
14664
|
// src/viewer/utils/export-video.ts
|
|
@@ -14702,7 +14702,7 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
14702
14702
|
const fps = 30;
|
|
14703
14703
|
const stream = recordingCanvas.captureStream(fps);
|
|
14704
14704
|
const recorder = new MediaRecorder(stream, {
|
|
14705
|
-
mimeType:
|
|
14705
|
+
mimeType: chunkDHNQHQ66_js.pickSupportedMimeType([...chunkDHNQHQ66_js.WEBM_MIME_CANDIDATES]),
|
|
14706
14706
|
videoBitsPerSecond: 5e6
|
|
14707
14707
|
});
|
|
14708
14708
|
const chunks = [];
|
|
@@ -14725,8 +14725,8 @@ async function exportAllSlidesAsVideo(slideStageRef, totalSlides, setActiveSlide
|
|
|
14725
14725
|
const duration = slideTimingsMs?.[i] ?? slideDurationMs;
|
|
14726
14726
|
ctx.clearRect(0, 0, recordingCanvas.width, recordingCanvas.height);
|
|
14727
14727
|
ctx.drawImage(slideCanvases[i], 0, 0);
|
|
14728
|
-
const frameInterval =
|
|
14729
|
-
const framesNeeded =
|
|
14728
|
+
const frameInterval = chunkDHNQHQ66_js.fpsToFrameIntervalMs(fps);
|
|
14729
|
+
const framesNeeded = chunkDHNQHQ66_js.segmentFrameCount(duration, fps);
|
|
14730
14730
|
for (let f = 0; f < framesNeeded; f++) {
|
|
14731
14731
|
if (signal?.aborted) {
|
|
14732
14732
|
recorder.stop();
|
|
@@ -14775,7 +14775,7 @@ async function exportAllSlidesAsGif(slideStageRef, totalSlides, setActiveSlide,
|
|
|
14775
14775
|
if (frames.length === 0) {
|
|
14776
14776
|
throw new Error(chunkCUUYYYC5_js.translationsEn["pptx.export.errorNoSlidesGif"]);
|
|
14777
14777
|
}
|
|
14778
|
-
const gifBytes =
|
|
14778
|
+
const gifBytes = chunkDHNQHQ66_js.encodeGif(frames, Math.round(slideDurationMs / 10));
|
|
14779
14779
|
onProgress?.(totalSlides, totalSlides);
|
|
14780
14780
|
const buf = new ArrayBuffer(gifBytes.length);
|
|
14781
14781
|
new Uint8Array(buf).set(gifBytes);
|
|
@@ -14829,7 +14829,7 @@ function exportAllSlidesToSvg(data, options = {}) {
|
|
|
14829
14829
|
continue;
|
|
14830
14830
|
}
|
|
14831
14831
|
onProgress?.(processedCount, data.slides.length);
|
|
14832
|
-
let svg =
|
|
14832
|
+
let svg = chunkHUD73YBT_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
|
|
14833
14833
|
if (embedFonts && fontFaces?.length) {
|
|
14834
14834
|
svg = injectFontFaces(svg, fontFaces);
|
|
14835
14835
|
}
|
|
@@ -14889,7 +14889,7 @@ function useExportSaveAs(input) {
|
|
|
14889
14889
|
}
|
|
14890
14890
|
setExportProgress(70);
|
|
14891
14891
|
setExportStatusMessage("Writing README...");
|
|
14892
|
-
const readme =
|
|
14892
|
+
const readme = chunkDHNQHQ66_js.generatePackageReadme(pptxFilename);
|
|
14893
14893
|
pkgFolder.file("README.txt", readme);
|
|
14894
14894
|
if (abortCtrl.signal.aborted) {
|
|
14895
14895
|
throw new DOMException("Export cancelled", "AbortError");
|
|
@@ -14900,7 +14900,7 @@ function useExportSaveAs(input) {
|
|
|
14900
14900
|
setExportProgress(95);
|
|
14901
14901
|
setExportStatusMessage("Downloading...");
|
|
14902
14902
|
const baseName = pptxFilename.replace(/\.[^.]+$/u, "");
|
|
14903
|
-
|
|
14903
|
+
chunkDHNQHQ66_js.downloadBlob(zipBlob, `${baseName}-package.zip`);
|
|
14904
14904
|
setExportProgress(100);
|
|
14905
14905
|
} catch (err) {
|
|
14906
14906
|
if (err.name !== "AbortError") {
|
|
@@ -14923,7 +14923,7 @@ function useExportSaveAs(input) {
|
|
|
14923
14923
|
const blob = new Blob([data], {
|
|
14924
14924
|
type: "application/vnd.openxmlformats-officedocument.presentationml.presentation"
|
|
14925
14925
|
});
|
|
14926
|
-
|
|
14926
|
+
chunkDHNQHQ66_js.downloadBlob(blob, `${baseName}.${ext}`);
|
|
14927
14927
|
} catch (err) {
|
|
14928
14928
|
console.error(`[PowerPointViewer] Save as .${ext} failed:`, err);
|
|
14929
14929
|
}
|
|
@@ -14936,7 +14936,7 @@ function useExportSaveAs(input) {
|
|
|
14936
14936
|
const pptxGuides = guides.map((g) => ({
|
|
14937
14937
|
id: g.id,
|
|
14938
14938
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
14939
|
-
positionEmu:
|
|
14939
|
+
positionEmu: chunkHUD73YBT_js.guidePxToEmu(g.position)
|
|
14940
14940
|
}));
|
|
14941
14941
|
return {
|
|
14942
14942
|
...slide,
|
|
@@ -15000,7 +15000,7 @@ function safeConfirm(message) {
|
|
|
15000
15000
|
}
|
|
15001
15001
|
}
|
|
15002
15002
|
function downloadBlob2(blob, filename) {
|
|
15003
|
-
|
|
15003
|
+
chunkDHNQHQ66_js.downloadBlob(blob, chunkDHNQHQ66_js.sanitizeDownloadFilename(filename));
|
|
15004
15004
|
}
|
|
15005
15005
|
|
|
15006
15006
|
// src/viewer/hooks/useExportHandlers.ts
|
|
@@ -15101,21 +15101,21 @@ function useExportHandlers(input) {
|
|
|
15101
15101
|
{
|
|
15102
15102
|
scale: 2,
|
|
15103
15103
|
onProgress: (current, total) => {
|
|
15104
|
-
setExportProgress(
|
|
15105
|
-
setExportStatusMessage(
|
|
15104
|
+
setExportProgress(chunkDHNQHQ66_js.slideProgressPercent(current, total));
|
|
15105
|
+
setExportStatusMessage(chunkDHNQHQ66_js.slideStatusLabel("Rendering", current, total));
|
|
15106
15106
|
},
|
|
15107
15107
|
signal: abortCtrl.signal
|
|
15108
15108
|
}
|
|
15109
15109
|
);
|
|
15110
|
-
setExportProgress(
|
|
15110
|
+
setExportProgress(chunkDHNQHQ66_js.EXPORT_ASSEMBLING_PERCENT);
|
|
15111
15111
|
setExportStatusMessage("Building PDF...");
|
|
15112
15112
|
await new Promise((r) => {
|
|
15113
15113
|
setTimeout(r, 100);
|
|
15114
15114
|
});
|
|
15115
|
-
setExportProgress(
|
|
15115
|
+
setExportProgress(chunkDHNQHQ66_js.EXPORT_DONE_PERCENT);
|
|
15116
15116
|
setExportStatusMessage("Done!");
|
|
15117
15117
|
} catch (err) {
|
|
15118
|
-
if (!
|
|
15118
|
+
if (!chunkDHNQHQ66_js.isExportAbortError(err)) {
|
|
15119
15119
|
console.error("[PowerPointViewer] PDF export failed:", err);
|
|
15120
15120
|
}
|
|
15121
15121
|
} finally {
|
|
@@ -15145,21 +15145,21 @@ function useExportHandlers(input) {
|
|
|
15145
15145
|
{
|
|
15146
15146
|
scale: 2,
|
|
15147
15147
|
onProgress: (current, total) => {
|
|
15148
|
-
setExportProgress(
|
|
15149
|
-
setExportStatusMessage(
|
|
15148
|
+
setExportProgress(chunkDHNQHQ66_js.slideProgressPercent(current, total));
|
|
15149
|
+
setExportStatusMessage(chunkDHNQHQ66_js.slideStatusLabel("Rendering", current, total));
|
|
15150
15150
|
},
|
|
15151
15151
|
signal: abortCtrl.signal
|
|
15152
15152
|
}
|
|
15153
15153
|
);
|
|
15154
|
-
setExportProgress(
|
|
15154
|
+
setExportProgress(chunkDHNQHQ66_js.EXPORT_ASSEMBLING_PERCENT);
|
|
15155
15155
|
setExportStatusMessage("Building PDF...");
|
|
15156
15156
|
await new Promise((r) => {
|
|
15157
15157
|
setTimeout(r, 100);
|
|
15158
15158
|
});
|
|
15159
|
-
setExportProgress(
|
|
15159
|
+
setExportProgress(chunkDHNQHQ66_js.EXPORT_DONE_PERCENT);
|
|
15160
15160
|
setExportStatusMessage("Done!");
|
|
15161
15161
|
} catch (err) {
|
|
15162
|
-
if (!
|
|
15162
|
+
if (!chunkDHNQHQ66_js.isExportAbortError(err)) {
|
|
15163
15163
|
console.error("[PowerPointViewer] Notes PDF export failed:", err);
|
|
15164
15164
|
}
|
|
15165
15165
|
} finally {
|
|
@@ -15200,22 +15200,22 @@ function useExportHandlers(input) {
|
|
|
15200
15200
|
scale: 1,
|
|
15201
15201
|
slideDurationMs: 3e3,
|
|
15202
15202
|
onProgress: (current, total) => {
|
|
15203
|
-
setExportProgress(
|
|
15204
|
-
setExportStatusMessage(
|
|
15203
|
+
setExportProgress(chunkDHNQHQ66_js.slideProgressPercent(current, total, 45));
|
|
15204
|
+
setExportStatusMessage(chunkDHNQHQ66_js.slideStatusLabel("Capturing", current, total));
|
|
15205
15205
|
},
|
|
15206
15206
|
onRecordProgress: (current, total) => {
|
|
15207
|
-
setExportProgress(
|
|
15208
|
-
setExportStatusMessage(
|
|
15207
|
+
setExportProgress(chunkDHNQHQ66_js.recordProgressPercent(current, total));
|
|
15208
|
+
setExportStatusMessage(chunkDHNQHQ66_js.slideStatusLabel("Recording", current, total));
|
|
15209
15209
|
},
|
|
15210
15210
|
signal: abortCtrl.signal
|
|
15211
15211
|
}
|
|
15212
15212
|
);
|
|
15213
|
-
setExportProgress(
|
|
15213
|
+
setExportProgress(chunkDHNQHQ66_js.EXPORT_ASSEMBLING_PERCENT);
|
|
15214
15214
|
setExportStatusMessage("Saving file...");
|
|
15215
15215
|
downloadBlob2(blob, "presentation.webm");
|
|
15216
|
-
setExportProgress(
|
|
15216
|
+
setExportProgress(chunkDHNQHQ66_js.EXPORT_DONE_PERCENT);
|
|
15217
15217
|
} catch (err) {
|
|
15218
|
-
if (!
|
|
15218
|
+
if (!chunkDHNQHQ66_js.isExportAbortError(err)) {
|
|
15219
15219
|
console.error("[PowerPointViewer] Video export failed:", err);
|
|
15220
15220
|
}
|
|
15221
15221
|
} finally {
|
|
@@ -15243,18 +15243,18 @@ function useExportHandlers(input) {
|
|
|
15243
15243
|
scale: 0.5,
|
|
15244
15244
|
slideDurationMs: 2e3,
|
|
15245
15245
|
onProgress: (current, total) => {
|
|
15246
|
-
setExportProgress(
|
|
15247
|
-
setExportStatusMessage(
|
|
15246
|
+
setExportProgress(chunkDHNQHQ66_js.slideProgressPercent(current, total));
|
|
15247
|
+
setExportStatusMessage(chunkDHNQHQ66_js.slideStatusLabel("Encoding", current, total));
|
|
15248
15248
|
},
|
|
15249
15249
|
signal: abortCtrl.signal
|
|
15250
15250
|
}
|
|
15251
15251
|
);
|
|
15252
|
-
setExportProgress(
|
|
15252
|
+
setExportProgress(chunkDHNQHQ66_js.EXPORT_ASSEMBLING_PERCENT);
|
|
15253
15253
|
setExportStatusMessage("Saving file...");
|
|
15254
15254
|
downloadBlob2(blob, "presentation.gif");
|
|
15255
|
-
setExportProgress(
|
|
15255
|
+
setExportProgress(chunkDHNQHQ66_js.EXPORT_DONE_PERCENT);
|
|
15256
15256
|
} catch (err) {
|
|
15257
|
-
if (!
|
|
15257
|
+
if (!chunkDHNQHQ66_js.isExportAbortError(err)) {
|
|
15258
15258
|
console.error("[PowerPointViewer] GIF export failed:", err);
|
|
15259
15259
|
}
|
|
15260
15260
|
} finally {
|
|
@@ -15294,7 +15294,7 @@ function openPrintWindow(title, bodyHtml, orientation, colorFilter, frameSlides)
|
|
|
15294
15294
|
}
|
|
15295
15295
|
printWindow.document.open();
|
|
15296
15296
|
printWindow.document.write(
|
|
15297
|
-
|
|
15297
|
+
chunkDHNQHQ66_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
|
|
15298
15298
|
);
|
|
15299
15299
|
printWindow.document.close();
|
|
15300
15300
|
printWindow.focus();
|
|
@@ -15355,7 +15355,7 @@ function usePrintHandlers(input) {
|
|
|
15355
15355
|
if (svgs.length === 0) {
|
|
15356
15356
|
return;
|
|
15357
15357
|
}
|
|
15358
|
-
const printDoc =
|
|
15358
|
+
const printDoc = chunkDHNQHQ66_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
|
|
15359
15359
|
title: "Slides (Vector)",
|
|
15360
15360
|
orientation: settings.orientation,
|
|
15361
15361
|
colorFilter
|
|
@@ -15391,7 +15391,7 @@ function usePrintHandlers(input) {
|
|
|
15391
15391
|
if (settings.printWhat === "outline") {
|
|
15392
15392
|
openPrintWindow(
|
|
15393
15393
|
"Outline",
|
|
15394
|
-
`<div class="outline-page">${
|
|
15394
|
+
`<div class="outline-page">${chunkDHNQHQ66_js.buildOutlineHtml(slideIndices, slides)}</div>`,
|
|
15395
15395
|
settings.orientation,
|
|
15396
15396
|
colorFilter,
|
|
15397
15397
|
settings.frameSlides
|
|
@@ -15416,7 +15416,7 @@ function usePrintHandlers(input) {
|
|
|
15416
15416
|
if (settings.printWhat === "slides") {
|
|
15417
15417
|
openPrintWindow(
|
|
15418
15418
|
"Slides",
|
|
15419
|
-
|
|
15419
|
+
chunkDHNQHQ66_js.buildSlidesHtml(slideImages, slideIndices),
|
|
15420
15420
|
settings.orientation,
|
|
15421
15421
|
colorFilter,
|
|
15422
15422
|
settings.frameSlides
|
|
@@ -15426,7 +15426,7 @@ function usePrintHandlers(input) {
|
|
|
15426
15426
|
if (settings.printWhat === "notes") {
|
|
15427
15427
|
openPrintWindow(
|
|
15428
15428
|
"Notes Pages",
|
|
15429
|
-
|
|
15429
|
+
chunkDHNQHQ66_js.buildNotesHtml(slideImages, slideIndices, slides),
|
|
15430
15430
|
"portrait",
|
|
15431
15431
|
colorFilter,
|
|
15432
15432
|
settings.frameSlides
|
|
@@ -15437,7 +15437,7 @@ function usePrintHandlers(input) {
|
|
|
15437
15437
|
const spp = settings.slidesPerPage;
|
|
15438
15438
|
openPrintWindow(
|
|
15439
15439
|
`Handout ${spp} per page`,
|
|
15440
|
-
|
|
15440
|
+
chunkDHNQHQ66_js.buildHandoutsHtml(slideImages, slideIndices, spp),
|
|
15441
15441
|
"portrait",
|
|
15442
15442
|
colorFilter,
|
|
15443
15443
|
settings.frameSlides
|
|
@@ -15501,8 +15501,8 @@ function useThemeHandlers(input) {
|
|
|
15501
15501
|
return;
|
|
15502
15502
|
}
|
|
15503
15503
|
await handler.updateThemeColorScheme(colorScheme);
|
|
15504
|
-
const previousMap = theme?.colorScheme ?
|
|
15505
|
-
setSlides((prev) =>
|
|
15504
|
+
const previousMap = theme?.colorScheme ? chunkHUD73YBT_js.buildThemeColorMap(theme.colorScheme) : {};
|
|
15505
|
+
setSlides((prev) => chunkHUD73YBT_js.reResolveSlideColors(prev, previousMap, colorScheme));
|
|
15506
15506
|
setTheme((prev) => prev ? { ...prev, colorScheme } : { colorScheme });
|
|
15507
15507
|
bumpHistory();
|
|
15508
15508
|
history.markDirty();
|
|
@@ -15607,7 +15607,7 @@ function useThemeSwitching(input) {
|
|
|
15607
15607
|
}
|
|
15608
15608
|
try {
|
|
15609
15609
|
await handler.applyTheme(preset.colorScheme, preset.fontScheme, preset.name);
|
|
15610
|
-
const newData =
|
|
15610
|
+
const newData = chunkHUD73YBT_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
|
|
15611
15611
|
onDataChange(newData);
|
|
15612
15612
|
onThemeChanged?.(preset);
|
|
15613
15613
|
} catch (error) {
|
|
@@ -15624,7 +15624,7 @@ function useThemeSwitching(input) {
|
|
|
15624
15624
|
}
|
|
15625
15625
|
try {
|
|
15626
15626
|
await handler.applyTheme(colorScheme, fontScheme ?? {}, themeName);
|
|
15627
|
-
const newData =
|
|
15627
|
+
const newData = chunkHUD73YBT_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
|
|
15628
15628
|
onDataChange(newData);
|
|
15629
15629
|
} catch (error) {
|
|
15630
15630
|
console.error("Failed to switch to custom theme:", error);
|
|
@@ -15636,12 +15636,12 @@ function useThemeSwitching(input) {
|
|
|
15636
15636
|
if (!data?.theme?.colorScheme) {
|
|
15637
15637
|
return void 0;
|
|
15638
15638
|
}
|
|
15639
|
-
return
|
|
15640
|
-
(p) =>
|
|
15639
|
+
return chunkHUD73YBT_js.THEME_PRESETS.find(
|
|
15640
|
+
(p) => chunkHUD73YBT_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
|
|
15641
15641
|
);
|
|
15642
15642
|
}, [data?.theme?.colorScheme]);
|
|
15643
15643
|
return {
|
|
15644
|
-
presets:
|
|
15644
|
+
presets: chunkHUD73YBT_js.THEME_PRESETS,
|
|
15645
15645
|
switchToPreset,
|
|
15646
15646
|
switchToCustom,
|
|
15647
15647
|
currentPreset
|
|
@@ -15716,7 +15716,7 @@ function usePropertyHandlers(input) {
|
|
|
15716
15716
|
}
|
|
15717
15717
|
try {
|
|
15718
15718
|
const ab = await file.arrayBuffer();
|
|
15719
|
-
const h = new
|
|
15719
|
+
const h = new chunkHUD73YBT_js.PptxHandler();
|
|
15720
15720
|
const other = await h.load(ab);
|
|
15721
15721
|
if (!other) {
|
|
15722
15722
|
return;
|
|
@@ -15726,7 +15726,7 @@ function usePropertyHandlers(input) {
|
|
|
15726
15726
|
width: canvasSize.width,
|
|
15727
15727
|
height: canvasSize.height
|
|
15728
15728
|
};
|
|
15729
|
-
setCompareResult(
|
|
15729
|
+
setCompareResult(chunkDHNQHQ66_js.comparePresentation(cur, other));
|
|
15730
15730
|
setIsComparePanelOpen(true);
|
|
15731
15731
|
} catch (err) {
|
|
15732
15732
|
console.warn("Compare failed:", err);
|
|
@@ -15743,7 +15743,7 @@ function usePropertyHandlers(input) {
|
|
|
15743
15743
|
if (!diff || diff.status === "unchanged") {
|
|
15744
15744
|
return;
|
|
15745
15745
|
}
|
|
15746
|
-
setSlides((prev) =>
|
|
15746
|
+
setSlides((prev) => chunkDHNQHQ66_js.applyAcceptSlide(prev, diff));
|
|
15747
15747
|
setIsDirty(true);
|
|
15748
15748
|
},
|
|
15749
15749
|
[compareResult, setSlides, setIsDirty]
|
|
@@ -15754,10 +15754,10 @@ function usePropertyHandlers(input) {
|
|
|
15754
15754
|
if (!compareResult) {
|
|
15755
15755
|
return;
|
|
15756
15756
|
}
|
|
15757
|
-
setSlides((prev) =>
|
|
15757
|
+
setSlides((prev) => chunkDHNQHQ66_js.applyAcceptAllSlides(prev, compareResult));
|
|
15758
15758
|
setIsDirty(true);
|
|
15759
15759
|
}, [compareResult, setSlides, setIsDirty]);
|
|
15760
|
-
const usedFontFamilies = React4.useMemo(() =>
|
|
15760
|
+
const usedFontFamilies = React4.useMemo(() => chunkDHNQHQ66_js.collectUsedFonts(slides), [slides]);
|
|
15761
15761
|
return {
|
|
15762
15762
|
handleUpdateNotes,
|
|
15763
15763
|
handleUpdateSlide,
|
|
@@ -15876,7 +15876,7 @@ function useIsMobile(input) {
|
|
|
15876
15876
|
const containerRef = input?.containerRef;
|
|
15877
15877
|
const isTouchDevice = React4.useSyncExternalStore(
|
|
15878
15878
|
subscribeTouchCapability,
|
|
15879
|
-
|
|
15879
|
+
chunkDHNQHQ66_js.detectTouchDevice,
|
|
15880
15880
|
() => false
|
|
15881
15881
|
// server snapshot
|
|
15882
15882
|
);
|
|
@@ -15892,7 +15892,7 @@ function useIsMobile(input) {
|
|
|
15892
15892
|
}
|
|
15893
15893
|
return containerRef?.current?.clientHeight ?? window.innerHeight;
|
|
15894
15894
|
});
|
|
15895
|
-
const [orientation, setOrientation] = React4.useState(
|
|
15895
|
+
const [orientation, setOrientation] = React4.useState(chunkDHNQHQ66_js.detectOrientation);
|
|
15896
15896
|
const [isVirtualKeyboardOpen, setIsVirtualKeyboardOpen] = React4.useState(false);
|
|
15897
15897
|
const [initialViewportHeight] = React4.useState(
|
|
15898
15898
|
() => typeof window !== "undefined" ? window.innerHeight : 800
|
|
@@ -15936,7 +15936,7 @@ function useIsMobile(input) {
|
|
|
15936
15936
|
return;
|
|
15937
15937
|
}
|
|
15938
15938
|
const handleOrientationChange = () => {
|
|
15939
|
-
setOrientation(
|
|
15939
|
+
setOrientation(chunkDHNQHQ66_js.detectOrientation());
|
|
15940
15940
|
};
|
|
15941
15941
|
if (screen.orientation) {
|
|
15942
15942
|
screen.orientation.addEventListener("change", handleOrientationChange);
|
|
@@ -15966,9 +15966,9 @@ function useIsMobile(input) {
|
|
|
15966
15966
|
window.addEventListener("resize", handleResize);
|
|
15967
15967
|
return () => window.removeEventListener("resize", handleResize);
|
|
15968
15968
|
}, [isTouchDevice, initialViewportHeight]);
|
|
15969
|
-
const isMobile =
|
|
15970
|
-
const isTablet = !isMobile && containerWidth >=
|
|
15971
|
-
const isDesktop = !isMobile && containerWidth >=
|
|
15969
|
+
const isMobile = chunkDHNQHQ66_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
|
|
15970
|
+
const isTablet = !isMobile && containerWidth >= chunkDHNQHQ66_js.MOBILE_BREAKPOINT && containerWidth < chunkDHNQHQ66_js.TABLET_BREAKPOINT;
|
|
15971
|
+
const isDesktop = !isMobile && containerWidth >= chunkDHNQHQ66_js.TABLET_BREAKPOINT;
|
|
15972
15972
|
return {
|
|
15973
15973
|
isMobile,
|
|
15974
15974
|
isTablet,
|
|
@@ -16029,11 +16029,11 @@ function useViewerDialogs(input) {
|
|
|
16029
16029
|
);
|
|
16030
16030
|
const [embedFontsEnabled, setEmbedFontsEnabled] = React4.useState(false);
|
|
16031
16031
|
const [isNarrowViewport, setIsNarrowViewport] = React4.useState(
|
|
16032
|
-
() => typeof window !== "undefined" ?
|
|
16032
|
+
() => typeof window !== "undefined" ? chunkDHNQHQ66_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
|
|
16033
16033
|
);
|
|
16034
16034
|
React4.useEffect(() => {
|
|
16035
16035
|
const handleWindow = () => setIsNarrowViewport(
|
|
16036
|
-
|
|
16036
|
+
chunkDHNQHQ66_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
|
|
16037
16037
|
);
|
|
16038
16038
|
let observer = null;
|
|
16039
16039
|
let raf = 0;
|
|
@@ -16047,12 +16047,12 @@ function useViewerDialogs(input) {
|
|
|
16047
16047
|
const entry = entries[0];
|
|
16048
16048
|
if (entry) {
|
|
16049
16049
|
setIsNarrowViewport(
|
|
16050
|
-
|
|
16050
|
+
chunkDHNQHQ66_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
|
|
16051
16051
|
);
|
|
16052
16052
|
}
|
|
16053
16053
|
});
|
|
16054
16054
|
observer.observe(el);
|
|
16055
|
-
setIsNarrowViewport(
|
|
16055
|
+
setIsNarrowViewport(chunkDHNQHQ66_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
|
|
16056
16056
|
};
|
|
16057
16057
|
attach();
|
|
16058
16058
|
window.addEventListener("resize", handleWindow);
|
|
@@ -16229,7 +16229,7 @@ function computeVisibleSlideIndexes(slides, activeCustomShowId, customShows) {
|
|
|
16229
16229
|
return slides.map((_, i) => i).filter((i) => !slides[i]?.hidden);
|
|
16230
16230
|
}
|
|
16231
16231
|
function computeSlideSectionGroups(slides, sections) {
|
|
16232
|
-
return
|
|
16232
|
+
return chunkDHNQHQ66_js.groupSlidesBySection(sections, slides).map((group) => ({
|
|
16233
16233
|
id: group.section?.id ?? (sections.length > 0 ? UNGROUPED_SECTION_ID : "default"),
|
|
16234
16234
|
label: group.section?.name ?? (sections.length > 0 ? "Ungrouped Slides" : "Slides"),
|
|
16235
16235
|
slideIndexes: group.slideIndexes,
|
|
@@ -16450,6 +16450,7 @@ function useSerialize(input) {
|
|
|
16450
16450
|
tagCollections,
|
|
16451
16451
|
notesMaster,
|
|
16452
16452
|
handoutMaster,
|
|
16453
|
+
embeddedFonts,
|
|
16453
16454
|
handlerRef,
|
|
16454
16455
|
inlineEditingElementIdRef,
|
|
16455
16456
|
inlineEditingTextRef,
|
|
@@ -16466,13 +16467,13 @@ function useSerialize(input) {
|
|
|
16466
16467
|
let processedSlide = slide;
|
|
16467
16468
|
if (pendingEditId) {
|
|
16468
16469
|
const updatedElements = slide.elements.map((el) => {
|
|
16469
|
-
if (el.id !== pendingEditId || !
|
|
16470
|
+
if (el.id !== pendingEditId || !chunkHUD73YBT_js.hasTextProperties(el)) {
|
|
16470
16471
|
return el;
|
|
16471
16472
|
}
|
|
16472
16473
|
return {
|
|
16473
16474
|
...el,
|
|
16474
16475
|
text: pendingEditText,
|
|
16475
|
-
textSegments:
|
|
16476
|
+
textSegments: chunkDHNQHQ66_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
|
|
16476
16477
|
};
|
|
16477
16478
|
});
|
|
16478
16479
|
if (updatedElements.some((el, i) => el !== slide.elements[i])) {
|
|
@@ -16485,7 +16486,7 @@ function useSerialize(input) {
|
|
|
16485
16486
|
const pptxGuides = guides.map((g) => ({
|
|
16486
16487
|
id: g.id,
|
|
16487
16488
|
orientation: g.axis === "h" ? "horz" : "vert",
|
|
16488
|
-
positionEmu:
|
|
16489
|
+
positionEmu: chunkHUD73YBT_js.guidePxToEmu(g.position)
|
|
16489
16490
|
}));
|
|
16490
16491
|
return {
|
|
16491
16492
|
...processedSlide,
|
|
@@ -16503,7 +16504,8 @@ function useSerialize(input) {
|
|
|
16503
16504
|
customProperties: customProperties.length > 0 ? customProperties : void 0,
|
|
16504
16505
|
tags: tagCollections.length > 0 ? tagCollections : void 0,
|
|
16505
16506
|
notesMaster,
|
|
16506
|
-
handoutMaster
|
|
16507
|
+
handoutMaster,
|
|
16508
|
+
embeddedFonts: embeddedFonts.length > 0 ? embeddedFonts : void 0
|
|
16507
16509
|
};
|
|
16508
16510
|
if (password) {
|
|
16509
16511
|
return handler.saveEncrypted(slidesToSave, password, saveOptions);
|
|
@@ -16522,6 +16524,7 @@ function useSerialize(input) {
|
|
|
16522
16524
|
tagCollections,
|
|
16523
16525
|
notesMaster,
|
|
16524
16526
|
handoutMaster,
|
|
16527
|
+
embeddedFonts,
|
|
16525
16528
|
guides,
|
|
16526
16529
|
activeSlideIndex,
|
|
16527
16530
|
handlerRef,
|
|
@@ -16719,10 +16722,10 @@ function usePresentationSetup(input) {
|
|
|
16719
16722
|
onToggleEraser: () => annotations.setPresentationTool("eraser"),
|
|
16720
16723
|
onToggleToolbar: () => annotations.setToolbarVisible(!annotations.toolbarVisible),
|
|
16721
16724
|
onSaveRehearsalTimings: (timings) => {
|
|
16722
|
-
setSlides((prev) =>
|
|
16725
|
+
setSlides((prev) => chunkDHNQHQ66_js.applyRehearsalTimings(prev, timings));
|
|
16723
16726
|
history.markDirty();
|
|
16724
16727
|
},
|
|
16725
|
-
loopContinuously:
|
|
16728
|
+
loopContinuously: chunkDHNQHQ66_js.shouldLoopContinuously(presentationProperties),
|
|
16726
16729
|
showWithAnimation: presentationProperties.showWithAnimation,
|
|
16727
16730
|
useTimings: presentationProperties.advanceMode !== "manual",
|
|
16728
16731
|
endWithBlackSlide
|
|
@@ -16884,7 +16887,7 @@ function useEditorOperations(input) {
|
|
|
16884
16887
|
const { formatPainterActive, setFormatPainterActive, elementLookup } = state;
|
|
16885
16888
|
React4.useEffect(() => {
|
|
16886
16889
|
if (formatPainterActive && !prevFormatPainterRef.current && selectedElement) {
|
|
16887
|
-
copiedFormatRef.current =
|
|
16890
|
+
copiedFormatRef.current = chunkDHNQHQ66_js.copyFormatFromElement(selectedElement);
|
|
16888
16891
|
} else if (!formatPainterActive) {
|
|
16889
16892
|
copiedFormatRef.current = null;
|
|
16890
16893
|
}
|
|
@@ -16910,12 +16913,12 @@ function useEditorOperations(input) {
|
|
|
16910
16913
|
e.stopPropagation();
|
|
16911
16914
|
const element = elementLookup.get(elementId);
|
|
16912
16915
|
if (element) {
|
|
16913
|
-
const updated =
|
|
16916
|
+
const updated = chunkDHNQHQ66_js.applyFormatToElement(element, copiedFormatRef.current);
|
|
16914
16917
|
const updates = {};
|
|
16915
|
-
if (
|
|
16918
|
+
if (chunkHUD73YBT_js.hasShapeProperties(updated)) {
|
|
16916
16919
|
updates.shapeStyle = updated.shapeStyle;
|
|
16917
16920
|
}
|
|
16918
|
-
if (
|
|
16921
|
+
if (chunkHUD73YBT_js.hasTextProperties(updated)) {
|
|
16919
16922
|
updates.textStyle = updated.textStyle;
|
|
16920
16923
|
}
|
|
16921
16924
|
ops.updateElementById(elementId, updates);
|
|
@@ -17062,7 +17065,7 @@ function collectReferencedFontFamilies(slides) {
|
|
|
17062
17065
|
const families = /* @__PURE__ */ new Set();
|
|
17063
17066
|
for (const slide of slides) {
|
|
17064
17067
|
for (const el of slide.elements) {
|
|
17065
|
-
if (
|
|
17068
|
+
if (chunkHUD73YBT_js.hasTextProperties(el) && el.textSegments) {
|
|
17066
17069
|
for (const seg of el.textSegments) {
|
|
17067
17070
|
if (seg.style.fontFamily) {
|
|
17068
17071
|
families.add(seg.style.fontFamily);
|
|
@@ -17256,6 +17259,7 @@ function useContentLifecycle(input) {
|
|
|
17256
17259
|
tagCollections: state.tagCollections,
|
|
17257
17260
|
notesMaster: state.notesMaster,
|
|
17258
17261
|
handoutMaster: state.handoutMaster,
|
|
17262
|
+
embeddedFonts: state.embeddedFonts,
|
|
17259
17263
|
handlerRef,
|
|
17260
17264
|
inlineEditingElementIdRef: state.inlineEditingElementIdRef,
|
|
17261
17265
|
inlineEditingTextRef: state.inlineEditingTextRef,
|
|
@@ -17742,7 +17746,7 @@ function useViewerIntegration(input) {
|
|
|
17742
17746
|
if (onDirtyChange) {
|
|
17743
17747
|
onDirtyChange(state.isDirty);
|
|
17744
17748
|
}
|
|
17745
|
-
}, [state.isDirty, onDirtyChange]);
|
|
17749
|
+
}, [state.isDirty, state.slides, state.embeddedFonts, onDirtyChange]);
|
|
17746
17750
|
React4.useEffect(() => {
|
|
17747
17751
|
if (onActiveSlideChange) {
|
|
17748
17752
|
onActiveSlideChange(activeSlideIndex);
|
|
@@ -17845,7 +17849,7 @@ function useReducedMotion() {
|
|
|
17845
17849
|
}
|
|
17846
17850
|
function useViewerOptions() {
|
|
17847
17851
|
const storeRef = React4.useRef(null);
|
|
17848
|
-
storeRef.current ??=
|
|
17852
|
+
storeRef.current ??= chunkDHNQHQ66_js.createViewerOptionsStore();
|
|
17849
17853
|
const store = storeRef.current;
|
|
17850
17854
|
const options = React4.useSyncExternalStore(
|
|
17851
17855
|
(onStoreChange) => store.subscribe(onStoreChange),
|
|
@@ -17854,9 +17858,9 @@ function useViewerOptions() {
|
|
|
17854
17858
|
);
|
|
17855
17859
|
return { optionsStore: store, options };
|
|
17856
17860
|
}
|
|
17857
|
-
var KNOWN_TAB_IDS = new Set(
|
|
17861
|
+
var KNOWN_TAB_IDS = new Set(chunkDHNQHQ66_js.TOOLBAR_TABS.map((tab) => tab.id));
|
|
17858
17862
|
function computeToolbarVisibility(hiddenActions) {
|
|
17859
|
-
const isHidden = (id) =>
|
|
17863
|
+
const isHidden = (id) => chunkDHNQHQ66_js.isActionHidden(id, hiddenActions);
|
|
17860
17864
|
const isTabVisible = (id) => !KNOWN_TAB_IDS.has(id) || !isHidden(id);
|
|
17861
17865
|
return { isHidden, isTabVisible };
|
|
17862
17866
|
}
|
|
@@ -17941,10 +17945,10 @@ function useYjsDocumentSync({
|
|
|
17941
17945
|
return;
|
|
17942
17946
|
}
|
|
17943
17947
|
try {
|
|
17944
|
-
const { PptxHandler: PptxHandler2 } = await import('./dist-
|
|
17948
|
+
const { PptxHandler: PptxHandler2 } = await import('./dist-L2EUDG6W.js');
|
|
17945
17949
|
const handler = new PptxHandler2();
|
|
17946
17950
|
await handler.load(sourceBytes.buffer);
|
|
17947
|
-
const currentSlides =
|
|
17951
|
+
const currentSlides = chunkDHNQHQ66_js.readSlidesFromYDoc(
|
|
17948
17952
|
doc
|
|
17949
17953
|
);
|
|
17950
17954
|
const slidesToSave = buildSaveSlides(currentSlides, templateElementsBySlideId);
|
|
@@ -17962,7 +17966,7 @@ function useYjsDocumentSync({
|
|
|
17962
17966
|
if (!doc || !isConnected) {
|
|
17963
17967
|
return;
|
|
17964
17968
|
}
|
|
17965
|
-
const docSlides =
|
|
17969
|
+
const docSlides = chunkDHNQHQ66_js.readSlidesFromYDoc(
|
|
17966
17970
|
doc
|
|
17967
17971
|
);
|
|
17968
17972
|
if (docSlides.length === 0) {
|
|
@@ -17984,11 +17988,11 @@ function useYjsDocumentSync({
|
|
|
17984
17988
|
lastSyncedRef.current = serialized;
|
|
17985
17989
|
void (async () => {
|
|
17986
17990
|
const factories = await getFactories();
|
|
17987
|
-
|
|
17991
|
+
chunkDHNQHQ66_js.reconcileSlidesInYDoc(
|
|
17988
17992
|
slides,
|
|
17989
17993
|
doc,
|
|
17990
17994
|
factories,
|
|
17991
|
-
|
|
17995
|
+
chunkDHNQHQ66_js.LOCAL_SYNC_ORIGIN
|
|
17992
17996
|
);
|
|
17993
17997
|
scheduleWriteBack();
|
|
17994
17998
|
})();
|
|
@@ -18002,10 +18006,10 @@ function useYjsDocumentSync({
|
|
|
18002
18006
|
return;
|
|
18003
18007
|
}
|
|
18004
18008
|
const handleChange = (_events, transaction) => {
|
|
18005
|
-
if (transaction?.origin ===
|
|
18009
|
+
if (transaction?.origin === chunkDHNQHQ66_js.LOCAL_SYNC_ORIGIN) {
|
|
18006
18010
|
return;
|
|
18007
18011
|
}
|
|
18008
|
-
const remoteSlides =
|
|
18012
|
+
const remoteSlides = chunkDHNQHQ66_js.readSlidesFromYDoc(
|
|
18009
18013
|
doc
|
|
18010
18014
|
);
|
|
18011
18015
|
if (remoteSlides.length === 0) {
|
|
@@ -18021,7 +18025,7 @@ function useYjsDocumentSync({
|
|
|
18021
18025
|
isApplyingRemoteRef.current = false;
|
|
18022
18026
|
scheduleWriteBack();
|
|
18023
18027
|
};
|
|
18024
|
-
const unobserve =
|
|
18028
|
+
const unobserve = chunkDHNQHQ66_js.observeYDocSlides(
|
|
18025
18029
|
doc,
|
|
18026
18030
|
handleChange
|
|
18027
18031
|
);
|
|
@@ -18059,7 +18063,7 @@ function useBroadcastFollower({
|
|
|
18059
18063
|
if (!broadcaster) {
|
|
18060
18064
|
return;
|
|
18061
18065
|
}
|
|
18062
|
-
if (!
|
|
18066
|
+
if (!chunkDHNQHQ66_js.shouldAutoFollowBroadcaster({
|
|
18063
18067
|
localRole: collab.config.role,
|
|
18064
18068
|
broadcasterRole: broadcaster.role
|
|
18065
18069
|
})) {
|
|
@@ -18194,7 +18198,7 @@ function useTouchGestures(input) {
|
|
|
18194
18198
|
if (!el || !enabled) {
|
|
18195
18199
|
return;
|
|
18196
18200
|
}
|
|
18197
|
-
const recognizer =
|
|
18201
|
+
const recognizer = chunkDHNQHQ66_js.createTouchGestureRecognizer({
|
|
18198
18202
|
getScale: () => scaleRef.current,
|
|
18199
18203
|
minScale: MIN_ZOOM_SCALE,
|
|
18200
18204
|
maxScale: MAX_ZOOM_SCALE,
|
|
@@ -18237,7 +18241,7 @@ function scrollFocusedIntoView(keyboardInset) {
|
|
|
18237
18241
|
return;
|
|
18238
18242
|
}
|
|
18239
18243
|
const rect = active.getBoundingClientRect();
|
|
18240
|
-
const delta =
|
|
18244
|
+
const delta = chunkDHNQHQ66_js.computeScrollDelta(
|
|
18241
18245
|
{ top: rect.top, bottom: rect.bottom },
|
|
18242
18246
|
window.innerHeight,
|
|
18243
18247
|
keyboardInset
|
|
@@ -18257,8 +18261,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
18257
18261
|
return;
|
|
18258
18262
|
}
|
|
18259
18263
|
const update = () => {
|
|
18260
|
-
const metrics =
|
|
18261
|
-
const inset = metrics ?
|
|
18264
|
+
const metrics = chunkDHNQHQ66_js.readViewportMetrics(window);
|
|
18265
|
+
const inset = metrics ? chunkDHNQHQ66_js.computeKeyboardInset(metrics) : 0;
|
|
18262
18266
|
setKeyboardInset(inset);
|
|
18263
18267
|
if (inset > 0) {
|
|
18264
18268
|
window.requestAnimationFrame(() => scrollFocusedIntoView(inset));
|
|
@@ -18269,8 +18273,8 @@ function useKeyboardInsets(enabled = true) {
|
|
|
18269
18273
|
vv.addEventListener("scroll", update);
|
|
18270
18274
|
const onFocusIn = () => {
|
|
18271
18275
|
window.requestAnimationFrame(() => {
|
|
18272
|
-
const metrics =
|
|
18273
|
-
const inset = metrics ?
|
|
18276
|
+
const metrics = chunkDHNQHQ66_js.readViewportMetrics(window);
|
|
18277
|
+
const inset = metrics ? chunkDHNQHQ66_js.computeKeyboardInset(metrics) : 0;
|
|
18274
18278
|
if (inset > 0) {
|
|
18275
18279
|
scrollFocusedIntoView(inset);
|
|
18276
18280
|
}
|
|
@@ -18283,7 +18287,7 @@ function useKeyboardInsets(enabled = true) {
|
|
|
18283
18287
|
document.removeEventListener("focusin", onFocusIn);
|
|
18284
18288
|
};
|
|
18285
18289
|
}, [enabled]);
|
|
18286
|
-
return { keyboardInset, isKeyboardOpen:
|
|
18290
|
+
return { keyboardInset, isKeyboardOpen: chunkDHNQHQ66_js.isKeyboardOpen(keyboardInset) };
|
|
18287
18291
|
}
|
|
18288
18292
|
|
|
18289
18293
|
// src/viewer/hooks/useViewerBuildingBlocks-canvas-props.ts
|
|
@@ -18338,13 +18342,13 @@ function buildCanvasProps(input) {
|
|
|
18338
18342
|
if (mode === "present") {
|
|
18339
18343
|
presentation.handlePresentationAction(action);
|
|
18340
18344
|
} else if (action.url) {
|
|
18341
|
-
|
|
18345
|
+
chunkDHNQHQ66_js.safeOpenUrl(action.url);
|
|
18342
18346
|
}
|
|
18343
18347
|
};
|
|
18344
18348
|
const handleHyperlinkClick = (url) => {
|
|
18345
|
-
if (
|
|
18349
|
+
if (chunkDHNQHQ66_js.isPpactionUrl(url)) {
|
|
18346
18350
|
if (mode === "present") {
|
|
18347
|
-
const parsed =
|
|
18351
|
+
const parsed = chunkDHNQHQ66_js.parsePpactionUrl(url);
|
|
18348
18352
|
if (parsed) {
|
|
18349
18353
|
presentation.handlePresentationAction({
|
|
18350
18354
|
action: parsed.action,
|
|
@@ -18354,7 +18358,7 @@ function buildCanvasProps(input) {
|
|
|
18354
18358
|
}
|
|
18355
18359
|
return;
|
|
18356
18360
|
}
|
|
18357
|
-
|
|
18361
|
+
chunkDHNQHQ66_js.safeOpenUrl(url);
|
|
18358
18362
|
};
|
|
18359
18363
|
return {
|
|
18360
18364
|
activeSlide: effectiveSlide,
|
|
@@ -18674,7 +18678,7 @@ function buildToolbarProps(input) {
|
|
|
18674
18678
|
onOpenFile,
|
|
18675
18679
|
onOpenRecentFile,
|
|
18676
18680
|
onCreatePresentation: (templateId) => {
|
|
18677
|
-
s.setSlides(
|
|
18681
|
+
s.setSlides(chunkDHNQHQ66_js.createBackstagePresentation(templateId));
|
|
18678
18682
|
s.setActiveSlideIndex(0);
|
|
18679
18683
|
s.setSelectedElementId(null);
|
|
18680
18684
|
s.setSelectedElementIds([]);
|
|
@@ -18697,6 +18701,12 @@ function buildToolbarProps(input) {
|
|
|
18697
18701
|
isOverflowMenuOpen: s.isOverflowMenuOpen,
|
|
18698
18702
|
onSetOverflowMenuOpen: s.setIsOverflowMenuOpen,
|
|
18699
18703
|
layoutOptions: scopedLayoutOptions,
|
|
18704
|
+
currentLayoutPath: activeSlide?.layoutPath,
|
|
18705
|
+
themeFonts: {
|
|
18706
|
+
heading: s.theme?.fontScheme?.majorFont?.latin,
|
|
18707
|
+
body: s.theme?.fontScheme?.minorFont?.latin
|
|
18708
|
+
},
|
|
18709
|
+
embeddedFontFamilies: Array.from(new Set(s.embeddedFonts.map((font) => font.name))),
|
|
18700
18710
|
onInsertSlideFromLayout: slideOps.handleInsertSlideFromLayout,
|
|
18701
18711
|
customShows: s.customShows,
|
|
18702
18712
|
activeCustomShowId: s.activeCustomShowId,
|
|
@@ -18729,7 +18739,7 @@ function buildToolbarProps(input) {
|
|
|
18729
18739
|
isCommentsPanelOpen: s.isInspectorPaneOpen,
|
|
18730
18740
|
slideCommentCount: activeSlide?.comments?.length ?? 0,
|
|
18731
18741
|
formatPainterActive: s.formatPainterActive,
|
|
18732
|
-
canActivateFormatPainter:
|
|
18742
|
+
canActivateFormatPainter: chunkDHNQHQ66_js.hasCopyableFormat(selectedElement),
|
|
18733
18743
|
onToggleFormatPainter: () => s.setFormatPainterActive((p) => !p),
|
|
18734
18744
|
isSelectionPaneOpen: s.isSelectionPaneOpen,
|
|
18735
18745
|
onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
|
|
@@ -18992,7 +19002,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
18992
19002
|
}, [incomingContent]);
|
|
18993
19003
|
const onOpenFile = React4.useCallback(() => {
|
|
18994
19004
|
void (async () => {
|
|
18995
|
-
const picked = await
|
|
19005
|
+
const picked = await chunkDHNQHQ66_js.openPptxFile();
|
|
18996
19006
|
if (picked) {
|
|
18997
19007
|
setContent(picked.buffer);
|
|
18998
19008
|
}
|
|
@@ -19000,7 +19010,7 @@ function useViewerBuildingBlocks(input) {
|
|
|
19000
19010
|
}, []);
|
|
19001
19011
|
const onOpenRecentFile = React4.useCallback((key) => {
|
|
19002
19012
|
void (async () => {
|
|
19003
|
-
const bytes = await
|
|
19013
|
+
const bytes = await chunkDHNQHQ66_js.readBackstageRecentFile(key);
|
|
19004
19014
|
if (bytes) {
|
|
19005
19015
|
setContent(bytes);
|
|
19006
19016
|
}
|