@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.
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkIVCWQLQK_js = require('./chunk-IVCWQLQK.js');
3
+ var chunkDHNQHQ66_js = require('./chunk-DHNQHQ66.js');
4
4
  var chunkCUUYYYC5_js = require('./chunk-CUUYYYC5.js');
5
- var chunkKAP5TS7O_js = require('./chunk-KAP5TS7O.js');
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 chunkIVCWQLQK_js.getAnimationInitialStyle(preset, nativeAnimation);
21
+ return chunkDHNQHQ66_js.getAnimationInitialStyle(preset, nativeAnimation);
22
22
  }
23
23
  function useVirtualizedSlides({
24
24
  totalItems,
25
25
  itemHeight,
26
- overscan = chunkIVCWQLQK_js.DEFAULT_VIRTUAL_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 = chunkIVCWQLQK_js.computeVirtualRange(totalItems, itemHeight, scrollTop, viewportHeight, overscan);
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 >= chunkIVCWQLQK_js.BROADCAST_THROTTLE_MS) {
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
- }, chunkIVCWQLQK_js.BROADCAST_THROTTLE_MS - elapsed);
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 = chunkIVCWQLQK_js.derivePresenceList(
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 = chunkIVCWQLQK_js.createSyncGate(() => setSynced(true));
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(chunkIVCWQLQK_js.validateRoomId(config.roomId), yDoc, opts);
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 = chunkIVCWQLQK_js.validateRoomId(config.roomId);
286
- const transport = config.transport ?? chunkIVCWQLQK_js.resolveTransportForServerUrl(config.serverUrl);
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 (chunkIVCWQLQK_js.isMixedContentBlocked(config.serverUrl)) {
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
- }, chunkIVCWQLQK_js.CONNECTION_TIMEOUT_MS);
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 = chunkIVCWQLQK_js.sanitizeColor(config?.userColor, "#6366f1");
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 chunkIVCWQLQK_js.cloneHistorySnapshot(snapshot);
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(chunkIVCWQLQK_js.cloneSlide),
514
- templateElementsBySlideId: chunkIVCWQLQK_js.cloneTemplateElementsBySlideId(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(chunkIVCWQLQK_js.cloneSlide));
527
+ setSlides(snapshot.slides.map(chunkDHNQHQ66_js.cloneSlide));
528
528
  setTemplateElementsBySlideId(
529
- chunkIVCWQLQK_js.cloneTemplateElementsBySlideId(snapshot.templateElementsBySlideId)
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 = chunkIVCWQLQK_js.SHAPE_PRESET_DEFS.map(
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 = chunkIVCWQLQK_js.parseMediaCommand(command.command);
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
- chunkIVCWQLQK_js.PresentationAnimationController.collectBuildStepIds(group),
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 = chunkIVCWQLQK_js.PresentationAnimationController.fromSlide(slide);
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 = chunkIVCWQLQK_js.computeEntranceAnimationDelay(animation.delayMs, animationIndex);
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 = chunkIVCWQLQK_js.PRESENTATION_CHANNEL_NAME;
1438
- var AUDIENCE_HASH = chunkIVCWQLQK_js.PRESENTATION_HASH;
1439
- var PRESENTER_MSG_ORIGIN = chunkIVCWQLQK_js.PRESENTATION_MESSAGE_ORIGIN;
1440
- var AUDIENCE_NONCE_KEY = chunkIVCWQLQK_js.PRESENTATION_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 chunkIVCWQLQK_js.createPresentationSessionId();
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 ? chunkIVCWQLQK_js.swapPresentationWindows(window, audience) : false;
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 chunkIVCWQLQK_js.clearAudienceContent(closingSessionId);
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 = chunkIVCWQLQK_js.buildPresentationAudienceUrl(window.location.href, sessionId);
1561
- void chunkIVCWQLQK_js.resolveAudienceScreenPlacement(window).then((placement) => {
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
- chunkIVCWQLQK_js.placeAudienceWindow(blankWin, placement);
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 chunkIVCWQLQK_js.storeAudienceContent(content, sessionId).then(() => navigateOrClose(true)).catch(() => navigateOrClose(false));
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 (chunkIVCWQLQK_js.isPresentationSessionMessage(message) && message.type === "audience-ready" && message.sessionId === sessionIdRef.current) {
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 chunkIVCWQLQK_js.clearAudienceContent(sessionIdRef.current);
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 (!chunkIVCWQLQK_js.isPresentationSessionMessage(data) || data.origin !== PRESENTER_MSG_ORIGIN) {
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 chunkIVCWQLQK_js.clearAudienceContent(expectedSessionId);
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: chunkIVCWQLQK_js.PRESENTATION_MESSAGE_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 (chunkIVCWQLQK_js.isUrlSafe(action.url)) {
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 ? chunkIVCWQLQK_js.resolveTransitionDurationMs(transition) : 0;
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(chunkIVCWQLQK_js.createPresenterTimer());
2249
- const [snapshot, setSnapshot] = React4.useState(() => chunkIVCWQLQK_js.createInitialPresentationSnapshot(slideIndex));
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) => chunkIVCWQLQK_js.mergePresentationSnapshot(current, value));
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: chunkIVCWQLQK_js.presenterElapsed(timerRef.current)
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 = chunkIVCWQLQK_js.togglePresenterTimer(timerRef.current);
2268
+ timerRef.current = chunkDHNQHQ66_js.togglePresenterTimer(timerRef.current);
2269
2269
  patch({
2270
2270
  paused: timerRef.current.paused,
2271
- elapsedMs: chunkIVCWQLQK_js.presenterElapsed(timerRef.current)
2271
+ elapsedMs: chunkDHNQHQ66_js.presenterElapsed(timerRef.current)
2272
2272
  });
2273
2273
  },
2274
2274
  resetTimer: () => {
2275
- timerRef.current = chunkIVCWQLQK_js.resetPresenterTimer();
2275
+ timerRef.current = chunkDHNQHQ66_js.resetPresenterTimer();
2276
2276
  patch({ paused: false, elapsedMs: 0 });
2277
2277
  },
2278
2278
  stepZoom: (direction) => setSnapshot(
2279
- (current) => chunkIVCWQLQK_js.mergePresentationSnapshot(current, {
2280
- zoom: chunkIVCWQLQK_js.stepPresenterZoom(
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 (!chunkKAP5TS7O_js.hasTextProperties(element)) {
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 (!chunkKAP5TS7O_js.hasTextProperties(element)) {
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) => chunkIVCWQLQK_js.isTemplateElement(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) => !chunkIVCWQLQK_js.isTemplateElement(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 chunkKAP5TS7O_js.PptxHandler();
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
- chunkIVCWQLQK_js.collectMediaElements(slide.elements, mediaElements);
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 } = chunkIVCWQLQK_js.collectImagePaths(parsed.slides);
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(chunkIVCWQLQK_js.buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
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 chunkKAP5TS7O_js.EncryptedFileError) {
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 chunkIVCWQLQK_js.saveAutosaveSnapshot(filePathRef.current, data);
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 (!chunkKAP5TS7O_js.hasTextProperties(element)) {
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 ? chunkIVCWQLQK_js.normalizeHexColor(element.textStyle?.color, HYPERLINK_COLOR) : chunkIVCWQLQK_js.normalizeHexColor(element.textStyle?.color, fallbackColor);
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 = chunkIVCWQLQK_js.toCssWritingMode(element.textStyle?.textDirection);
4163
- const textOrientation = chunkIVCWQLQK_js.toCssTextOrientation(element.textStyle?.textDirection);
4164
- const verticalDirection = chunkIVCWQLQK_js.toCssVerticalDirection(element.textStyle?.textDirection);
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 ? chunkIVCWQLQK_js.normalizeHexColor(element.textStyle.highlightColor, void 0) : void 0,
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: chunkIVCWQLQK_js.resolveLineHeight(element.textStyle, hasItalicRuns),
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
- ...chunkIVCWQLQK_js.computeAutoFitTextStyle({
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 (!chunkKAP5TS7O_js.hasTextProperties(element)) {
4233
+ if (!chunkHUD73YBT_js.hasTextProperties(element)) {
4234
4234
  return {};
4235
4235
  }
4236
4236
  const verticalAlign = element.textStyle?.vAlign || "top";
4237
- const writingMode = chunkIVCWQLQK_js.toCssWritingMode(element.textStyle?.textDirection);
4238
- const textOrientation = chunkIVCWQLQK_js.toCssTextOrientation(element.textStyle?.textDirection);
4239
- const verticalDirection = chunkIVCWQLQK_js.toCssVerticalDirection(element.textStyle?.textDirection);
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 = chunkKAP5TS7O_js.hasTextProperties(element) && element.paragraphIndents && element.paragraphIndents.length > 0;
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 = chunkIVCWQLQK_js.getKinsokuLineBreakStyles(element.textStyle);
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 chunkIVCWQLQK_js.buildTextFillCss(style);
4303
+ return chunkDHNQHQ66_js.buildTextFillCss(style);
4304
4304
  }
4305
4305
  function buildTextBody3DSceneStyle2(textStyle) {
4306
- return chunkIVCWQLQK_js.buildTextBody3DSceneStyle(textStyle);
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}${chunkIVCWQLQK_js.TEXT_BUILD_ID_SEP}p${paraIndex}`;
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}${chunkIVCWQLQK_js.TEXT_BUILD_ID_SEP}w${paraIndex}-0`;
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}${chunkIVCWQLQK_js.TEXT_BUILD_ID_SEP}c${paraIndex}-0`;
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}${chunkIVCWQLQK_js.TEXT_BUILD_ID_SEP}w${paraIndex}-${wordIdx}`;
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}${chunkIVCWQLQK_js.TEXT_BUILD_ID_SEP}c${paraIndex}-${i}`;
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 = chunkIVCWQLQK_js.segmentByScript(text);
4682
+ const runs = chunkDHNQHQ66_js.segmentByScript(text);
4683
4683
  if (runs.length <= 1) {
4684
4684
  if (runs.length === 1) {
4685
- const font = chunkIVCWQLQK_js.resolveFontForScript(runs[0].script, scriptFonts);
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 = chunkIVCWQLQK_js.resolveFontForScript(run.script, scriptFonts);
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 = chunkIVCWQLQK_js.convertOmmlToMathMl(equationXml);
4766
- const safeMathml = mathml ? chunkIVCWQLQK_js.sanitizeMathMl(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 = chunkIVCWQLQK_js.resolvePictureBullet(bulletInfo, baseFontSize) ?? {
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 = chunkIVCWQLQK_js.substituteFieldText(segment.text || "", segment.fieldType, fieldContext);
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 ? chunkIVCWQLQK_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, HYPERLINK_COLOR) : chunkIVCWQLQK_js.normalizeHexColor(segmentStyle.color || element.textStyle?.color, fallbackColor);
4877
- const underlineDecoration = chunkIVCWQLQK_js.resolveUnderlineDecorationStyle(
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 ? chunkKAP5TS7O_js.getSubstituteFontFamily(rawFontFamily) : DEFAULT_FONT_FAMILY;
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 = chunkIVCWQLQK_js.hasDistinctScriptFonts(scriptFonts);
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 ? chunkIVCWQLQK_js.normalizeHexColor(segmentStyle.highlightColor, "transparent") : void 0,
4918
+ backgroundColor: textFillStyles ? void 0 : segmentStyle.highlightColor ? chunkDHNQHQ66_js.normalizeHexColor(segmentStyle.highlightColor, "transparent") : void 0,
4919
4919
  ...textFillStyles,
4920
- textDecorationColor: segmentStyle.underlineColor ? chunkIVCWQLQK_js.normalizeHexColor(segmentStyle.underlineColor, void 0) : void 0,
4921
- WebkitTextStroke: segmentStyle.textOutlineWidth && segmentStyle.textOutlineColor ? `${segmentStyle.textOutlineWidth}px ${chunkIVCWQLQK_js.normalizeHexColor(segmentStyle.textOutlineColor, "#000000")}` : segmentStyle.textOutlineWidth ? `${segmentStyle.textOutlineWidth}px currentColor` : void 0,
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: chunkIVCWQLQK_js.buildTextShadowCss(segmentStyle),
4924
- filter: chunkIVCWQLQK_js.buildTextRunFilterChain(segmentStyle),
4925
- opacity: chunkIVCWQLQK_js.getTextAlphaOpacity(segmentStyle),
4926
- WebkitBoxReflect: chunkIVCWQLQK_js.buildTextReflectionCss(segmentStyle)
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 = chunkIVCWQLQK_js.normalizeHexColor(bulletInfo.color, resolvedSegmentColor);
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 = chunkIVCWQLQK_js.normalizeHexColor(segment.rubyStyle.color, resolvedSegmentColor);
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 (!chunkKAP5TS7O_js.hasTextProperties(element)) {
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 = chunkKAP5TS7O_js.hasTextProperties(element) ? element.paragraphIndents : void 0;
5109
- const elementRtl = chunkKAP5TS7O_js.hasTextProperties(element) ? element.textStyle?.rtl : void 0;
5110
- const elementAlign = chunkKAP5TS7O_js.hasTextProperties(element) ? element.textStyle?.align : void 0;
5111
- const bodyStyle = chunkKAP5TS7O_js.hasTextProperties(element) ? element.textStyle : void 0;
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 = chunkIVCWQLQK_js.resolveParagraphRtl(paraSegments, elementRtl);
5131
+ const paraRtl = chunkDHNQHQ66_js.resolveParagraphRtl(paraSegments, elementRtl);
5132
5132
  const isRtlParagraph = paraRtl === true;
5133
- const paraAlign = chunkIVCWQLQK_js.resolveParagraphAlign(paraSegments, elementAlign);
5134
- const cssTextAlign = chunkIVCWQLQK_js.resolveCssTextAlign(paraAlign, isRtlParagraph);
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 = chunkIVCWQLQK_js.getKinsokuLineBreakStyles(firstSeg?.segment.style);
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 (!chunkKAP5TS7O_js.hasShapeProperties(element)) {
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 (!chunkKAP5TS7O_js.isImageLikeElement(element)) {
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 (!chunkKAP5TS7O_js.hasShapeProperties(element)) {
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 ${chunkIVCWQLQK_js.colorWithOpacity(
5363
- chunkIVCWQLQK_js.normalizeHexColor(ss.lineShadowColor, "#000000"),
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 (!chunkKAP5TS7O_js.hasShapeProperties(element)) {
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 = chunkIVCWQLQK_js.colorWithOpacity(chunkIVCWQLQK_js.normalizeHexColor(ss.lineGlowColor, "#ffff00"), glowOpacity);
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 (!chunkKAP5TS7O_js.hasShapeProperties(element)) {
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 chunkIVCWQLQK_js.build3DExtrusionData(
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
- chunkIVCWQLQK_js.apply3dEffects(base, scene3d, shape3d, fillColorFallback);
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 = chunkIVCWQLQK_js.hexToRgbChannels(hex);
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" : chunkIVCWQLQK_js.colorWithOpacity(adjustFillForMode(fillColor, subpath.fillMode), fillOpacity),
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" || !chunkKAP5TS7O_js.hasShapeProperties(element)) {
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 = chunkKAP5TS7O_js.evaluatePresetShape(
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 (!chunkKAP5TS7O_js.hasShapeProperties(element)) {
5539
+ if (!chunkHUD73YBT_js.hasShapeProperties(element)) {
5540
5540
  return {};
5541
5541
  }
5542
5542
  const normalizedShapeType = getShapeType(element.shapeType);
5543
- const clipPath = chunkIVCWQLQK_js.getResolvedShapeClipPath(element);
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 = chunkIVCWQLQK_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
5549
- const fillGradient = chunkIVCWQLQK_js.buildCssGradientFromShapeStyle(element.shapeStyle) || element.shapeStyle?.fillGradient;
5550
- const shadowCss = chunkIVCWQLQK_js.buildShadowCssFromShapeStyle(element.shapeStyle);
5551
- const innerShadowCss = chunkIVCWQLQK_js.buildInnerShadowCssFromShapeStyle(element.shapeStyle);
5552
- const resolvedFillColor = chunkIVCWQLQK_js.colorWithOpacity(fillColor, fillOpacity);
5553
- const resolvedStrokeColor = chunkIVCWQLQK_js.colorWithOpacity(strokeColor, strokeOpacity);
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 = chunkIVCWQLQK_js.buildMultiLayerShadowCss(element.shapeStyle);
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 = chunkIVCWQLQK_js.buildGlowBoxShadow(ss?.glowColor, ss?.glowRadius, ss?.glowOpacity);
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 = chunkIVCWQLQK_js.getCompoundLineBoxShadow(
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 = chunkIVCWQLQK_js.colorWithOpacity(chunkIVCWQLQK_js.normalizeHexColor(ss.glowColor, "#ffff00"), glowOpacity);
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(#${chunkIVCWQLQK_js.getSoftEdgeFilterId(element.id)})`);
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 = chunkIVCWQLQK_js.getEffectDagFilter(ss, element.id);
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 = chunkIVCWQLQK_js.buildPatternFillCss(element.shapeStyle);
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 = chunkIVCWQLQK_js.buildReflectionCss(distance, startOpacity, endOpacity, fadeLength, blurRadius);
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 ? chunkIVCWQLQK_js.getCompoundLineBorderWidth(ss?.compoundLine, strokeWidth) : void 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 ? chunkIVCWQLQK_js.getCssBorderDashStyle(strokeDash, ss?.compoundLine) : void 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: chunkIVCWQLQK_js.getCssBorderDashStyle(strokeDash)
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 chunkIVCWQLQK_js.clampUnitInterval(direct / 1e5);
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 chunkIVCWQLQK_js.clampUnitInterval(fallbackKey / 1e5);
5714
+ return chunkDHNQHQ66_js.clampUnitInterval(fallbackKey / 1e5);
5715
5715
  }
5716
- return chunkIVCWQLQK_js.clampUnitInterval(fallback);
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: chunkIVCWQLQK_js.svgLineCap(shapeStyle?.lineCap),
5853
+ lineCap: chunkDHNQHQ66_js.svgLineCap(shapeStyle?.lineCap),
5854
5854
  lineJoin,
5855
5855
  miterLimit,
5856
- offsets: chunkIVCWQLQK_js.getCompoundLineOffsets(shapeStyle?.compoundLine, strokeWidth),
5857
- widths: chunkIVCWQLQK_js.getCompoundLineWidths(shapeStyle?.compoundLine, strokeWidth)
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 ? chunkKAP5TS7O_js.customGeometryPathsToSvgSubpaths(structuredPaths, pathWidth, pathHeight) : void 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 ?? chunkIVCWQLQK_js.colorWithOpacity(fillColor, fillOpacity),
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 (!chunkKAP5TS7O_js.hasShapeProperties(element)) {
5991
+ if (!chunkHUD73YBT_js.hasShapeProperties(element)) {
5992
5992
  return null;
5993
5993
  }
5994
5994
  const normalizedType = (element.shapeType || "").toLowerCase();
5995
- const fillPaint = animatesFill ? "inherit" : chunkIVCWQLQK_js.colorWithOpacity(fillColor, element.shapeStyle?.fillOpacity);
5996
- const strokePaint = animatesStroke ? "inherit" : chunkIVCWQLQK_js.colorWithOpacity(strokeColor, element.shapeStyle?.strokeOpacity);
5997
- const dashType = chunkIVCWQLQK_js.normalizeStrokeDashType(element.shapeStyle?.strokeDash);
5998
- const dashArray = chunkIVCWQLQK_js.getSvgStrokeDasharray(
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 (chunkKAP5TS7O_js.isCalloutShape(normalizedType)) {
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 = chunkKAP5TS7O_js.getCalloutLeaderLineGeometry(
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 = chunkKAP5TS7O_js.buildCalloutLeaderLineSvgPath(geometry);
6088
- const bounds = chunkKAP5TS7O_js.getCalloutViewBoxBounds(width, height, geometry);
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 = chunkIVCWQLQK_js.svgLineCap(element.shapeStyle?.lineCap);
6151
+ const connectorLineCap = chunkDHNQHQ66_js.svgLineCap(element.shapeStyle?.lineCap);
6152
6152
  const hitTargetWidth = Math.max(strokeWidth * 3, 12);
6153
- const offsets = chunkIVCWQLQK_js.getCompoundLineOffsets(compoundLine, strokeWidth);
6154
- const widths = chunkIVCWQLQK_js.getCompoundLineWidths(compoundLine, strokeWidth);
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 (!chunkKAP5TS7O_js.hasShapeProperties(element)) {
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 = chunkIVCWQLQK_js.getRoundRectRadiusPx(element);
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 = chunkIVCWQLQK_js.getResolvedShapeClipPath(element);
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 (!chunkKAP5TS7O_js.isImageLikeElement(element)) {
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 = chunkIVCWQLQK_js.clampCropValue(element.cropLeft);
6258
- const cropTop = chunkIVCWQLQK_js.clampCropValue(element.cropTop);
6259
- const cropRight = chunkIVCWQLQK_js.clampCropValue(element.cropRight);
6260
- const cropBottom = chunkIVCWQLQK_js.clampCropValue(element.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 = chunkIVCWQLQK_js.clampCropValue(cropLeft * safeHorizontalScale);
6273
- const normalizedRight = chunkIVCWQLQK_js.clampCropValue(cropRight * safeHorizontalScale);
6274
- const normalizedTop = chunkIVCWQLQK_js.clampCropValue(cropTop * safeVerticalScale);
6275
- const normalizedBottom = chunkIVCWQLQK_js.clampCropValue(cropBottom * safeVerticalScale);
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 (!chunkKAP5TS7O_js.isImageLikeElement(element)) {
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 (!chunkKAP5TS7O_js.isImageLikeElement(element)) {
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 (!chunkKAP5TS7O_js.isImageLikeElement(element) || !isImageTiled(element)) {
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 = chunkIVCWQLQK_js.parseDrawingColor(gs) ?? "#888888";
6447
- const opacity = chunkIVCWQLQK_js.parseDrawingColorOpacity(gs);
6448
- return { pos, color: chunkIVCWQLQK_js.colorWithOpacity(color, opacity) };
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 = chunkIVCWQLQK_js.parseDrawingColor(pattFill["a:fgClr"]) ?? "#000000";
6490
- const bgColor = chunkIVCWQLQK_js.parseDrawingColor(pattFill["a:bgClr"]) ?? "#ffffff";
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 = chunkIVCWQLQK_js.parseDrawingColor(ln["a:solidFill"]);
6601
+ const color = chunkDHNQHQ66_js.parseDrawingColor(ln["a:solidFill"]);
6602
6602
  if (color) {
6603
- const opacity = chunkIVCWQLQK_js.parseDrawingColorOpacity(ln["a:solidFill"]);
6603
+ const opacity = chunkDHNQHQ66_js.parseDrawingColorOpacity(ln["a:solidFill"]);
6604
6604
  const key = `${edge.prefix}`;
6605
- borderStyle[key] = `${widthPx}px ${cssBorderStyle} ${chunkIVCWQLQK_js.colorWithOpacity(color, opacity)}`;
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 = chunkIVCWQLQK_js.parseDrawingColor(outerShdw);
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 = chunkIVCWQLQK_js.parseDrawingColor(glow);
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 = chunkIVCWQLQK_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkIVCWQLQK_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
6715
+ const runColor = chunkDHNQHQ66_js.parseDrawingColor(runProps?.["a:solidFill"], schemeColorOverrides) || chunkDHNQHQ66_js.parseDrawingColor(runProps?.["a:highlight"], schemeColorOverrides);
6716
6716
  if (runColor) {
6717
- const opacity = chunkIVCWQLQK_js.parseDrawingColorOpacity(runProps?.["a:solidFill"]);
6718
- cellStyle.color = chunkIVCWQLQK_js.colorWithOpacity(runColor, opacity);
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 = chunkIVCWQLQK_js.parseDrawingColor(
6728
+ const cellFill = chunkDHNQHQ66_js.parseDrawingColor(
6729
6729
  cellProperties?.["a:solidFill"],
6730
6730
  schemeColorOverrides
6731
6731
  );
6732
6732
  if (cellFill) {
6733
- const opacity = chunkIVCWQLQK_js.parseDrawingColorOpacity(
6733
+ const opacity = chunkDHNQHQ66_js.parseDrawingColorOpacity(
6734
6734
  cellProperties?.["a:solidFill"]
6735
6735
  );
6736
- cellStyle.backgroundColor = chunkIVCWQLQK_js.colorWithOpacity(cellFill, opacity);
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 = chunkIVCWQLQK_js.parseDrawingColor(
6751
+ const borderColor = chunkDHNQHQ66_js.parseDrawingColor(
6752
6752
  cellProperties?.["a:lnL"]?.["a:solidFill"],
6753
6753
  schemeColorOverrides
6754
- ) || chunkIVCWQLQK_js.parseDrawingColor(
6754
+ ) || chunkDHNQHQ66_js.parseDrawingColor(
6755
6755
  cellProperties?.["a:lnR"]?.["a:solidFill"],
6756
6756
  schemeColorOverrides
6757
- ) || chunkIVCWQLQK_js.parseDrawingColor(
6757
+ ) || chunkDHNQHQ66_js.parseDrawingColor(
6758
6758
  cellProperties?.["a:lnT"]?.["a:solidFill"],
6759
6759
  schemeColorOverrides
6760
- ) || chunkIVCWQLQK_js.parseDrawingColor(
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 = chunkIVCWQLQK_js.tintColor2(color, fill.tint / 1e5);
6839
+ color = chunkDHNQHQ66_js.tintColor2(color, fill.tint / 1e5);
6840
6840
  }
6841
6841
  if (fill.shade !== void 0 && fill.shade > 0) {
6842
- color = chunkIVCWQLQK_js.shadeColor2(color, 1 - fill.shade / 1e5);
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 = chunkIVCWQLQK_js.resolveFontRefIdx(text.fontRefIdx, fontScheme);
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 = chunkIVCWQLQK_js.tintColor2(color, text.fontTint / 1e5);
6878
+ color = chunkDHNQHQ66_js.tintColor2(color, text.fontTint / 1e5);
6879
6879
  }
6880
6880
  if (text.fontShade !== void 0 && text.fontShade > 0) {
6881
- color = chunkIVCWQLQK_js.shadeColor2(color, 1 - text.fontShade / 1e5);
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 chunkIVCWQLQK_js.getCellDiagonalBorders(style, tableData, pos, {
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 = chunkIVCWQLQK_js.normalizeHexColor(style.patternFillForeground, "#000000");
7222
- const bg = chunkIVCWQLQK_js.normalizeHexColor(style.patternFillBackground, "#ffffff");
7223
- const svgPattern = chunkIVCWQLQK_js.getPatternSvg(style.patternFillPreset, fg, bg);
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 = chunkIVCWQLQK_js.ooxmlDashToCssBorderStyle(edge.dash);
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, chunkIVCWQLQK_js.cell3DBevelCss(style.cell3D));
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(() => chunkIVCWQLQK_js.computeColumnBoundaries(columnWidths), [columnWidths]);
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(chunkIVCWQLQK_js.computeResizedColumnWidths(drag.initialWidths, drag.index, deltaProp));
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 = chunkIVCWQLQK_js.computeResizedRowHeight(
7395
- drag.initialRowHeight ?? chunkIVCWQLQK_js.DEFAULT_ROW_HEIGHT,
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 ?? chunkIVCWQLQK_js.DEFAULT_ROW_HEIGHT;
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 chunkIVCWQLQK_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableData);
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 = chunkIVCWQLQK_js.isCellInRect(rowIndex, cellIndex, selectionRect);
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 = chunkIVCWQLQK_js.computeSelectionRect(
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: chunkIVCWQLQK_js.rectToCells(rect)
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 chunkIVCWQLQK_js.computeSelectionRect(first.row, first.col, last.row, last.col, tableEl.tableData);
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
- chunkIVCWQLQK_js.isCellInRect(rowIndex, cellIndex, xmlSelectionRect) && !(selectedCell?.rowIndex === rowIndex && selectedCell?.columnIndex === cellIndex) ? "bg-blue-500/15 ring-1 ring-inset ring-blue-400/50" : null
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 = chunkIVCWQLQK_js.computeSelectionRect(
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: chunkIVCWQLQK_js.rectToCells(rect)
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 ? chunkIVCWQLQK_js.chartPartToAttrs(part) : void 0;
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 [...chunkIVCWQLQK_js.getChartStylePalette(chartData.style?.styleId)];
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 chunkIVCWQLQK_js.buildChartViewModel(element);
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 chunkIVCWQLQK_js.buildChartViewModel(themedElement);
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 = chunkIVCWQLQK_js.resolveRegionCode(cat);
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 = chunkIVCWQLQK_js.normalizeValue(entry.value, minVal, maxVal);
8229
- fill = chunkIVCWQLQK_js.sequentialColorScale(t);
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: chunkIVCWQLQK_js.formatAxisValue(entry.value)
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 ? `: ${chunkIVCWQLQK_js.formatAxisValue(entry.value)}` : ""
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: chunkIVCWQLQK_js.formatAxisValue(minVal)
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: chunkIVCWQLQK_js.formatAxisValue(maxVal)
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: chunkIVCWQLQK_js.formatAxisValue(row.value)
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 chunkIVCWQLQK_js.seriesColor(series, idx);
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: chunkIVCWQLQK_js.seriesColor(s, i, style?.styleId, colorPalette)
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: chunkIVCWQLQK_js.seriesColor(s, i, style?.styleId, colorPalette)
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 = chunkIVCWQLQK_js.generateLogTicks(range);
9021
+ const ticks = chunkDHNQHQ66_js.generateLogTicks(range);
9022
9022
  ticks.forEach((tickVal, i) => {
9023
- const y = chunkIVCWQLQK_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
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 = chunkIVCWQLQK_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
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 = chunkIVCWQLQK_js.generateLogTicks(range);
9068
+ const ticks = chunkDHNQHQ66_js.generateLogTicks(range);
9069
9069
  ticks.forEach((tickVal, i) => {
9070
- const y = chunkIVCWQLQK_js.valueToY(tickVal, range, layout.plotTop, layout.plotBottom);
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 ? chunkIVCWQLQK_js.formatAxisValueWithUnits(tickVal, axisFormatting) : chunkIVCWQLQK_js.formatAxisValue(tickVal)
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 = chunkIVCWQLQK_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
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 ? chunkIVCWQLQK_js.formatAxisValueWithUnits(val, axisFormatting) : chunkIVCWQLQK_js.formatAxisValue(val)
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 = chunkIVCWQLQK_js.getDisplayUnitLabel(
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 = chunkIVCWQLQK_js.valueToY(0, range, layout.plotTop, layout.plotBottom);
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 = chunkIVCWQLQK_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
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 ? chunkIVCWQLQK_js.formatAxisValueWithUnits(val, axisFormatting) : chunkIVCWQLQK_js.formatAxisValue(val)
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 = chunkIVCWQLQK_js.getDisplayUnitLabel(
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 = chunkIVCWQLQK_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
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 = chunkIVCWQLQK_js.valueToY(val, range, layout.plotTop, layout.plotBottom);
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: chunkIVCWQLQK_js.seriesColor(
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 = chunkIVCWQLQK_js.computeValueRangeForChart(chartData.series, chartData.axes);
9503
- const layout = chunkIVCWQLQK_js.computeLayout(element.width, element.height, style, true, legendPos);
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 = chunkIVCWQLQK_js.valueToY(high, range, layout.plotTop, layout.plotBottom);
9525
- const lowY = chunkIVCWQLQK_js.valueToY(low, range, layout.plotTop, layout.plotBottom);
9526
- const openY = chunkIVCWQLQK_js.valueToY(open, range, layout.plotTop, layout.plotBottom);
9527
- const closeY = chunkIVCWQLQK_js.valueToY(close, range, layout.plotTop, layout.plotBottom);
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: chunkIVCWQLQK_js.formatAxisValue(close)
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-BVA2NRED.js');
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 = chunkIVCWQLQK_js.computeValueRangeForChart(chartData.series, chartData.axes);
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 = chunkIVCWQLQK_js.computeLayout(element.width, element.height, style, false, legendPos);
9757
- const range = chunkIVCWQLQK_js.computeValueRangeForChart(chartData.series, chartData.axes);
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 = chunkIVCWQLQK_js.computeLayout(element.width, element.height, style, true, legendPos);
9848
- const range = chunkIVCWQLQK_js.computeValueRangeForChart(chartData.series, chartData.axes);
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 = chunkIVCWQLQK_js.computeLayout(element.width, element.height, style, false, legendPos);
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: chunkIVCWQLQK_js.paletteColor(item.index, chartData.style?.styleId, chartData.colorPalette),
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 = chunkIVCWQLQK_js.computeValueRangeForChart(chartData.series, chartData.axes);
9988
- const layout = chunkIVCWQLQK_js.computeLayout(element.width, element.height, style, true, legendPos);
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 = chunkIVCWQLQK_js.valueToY(startVal, range, layout.plotTop, layout.plotBottom);
10000
- const barEndY = chunkIVCWQLQK_js.valueToY(endVal, range, layout.plotTop, layout.plotBottom);
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: chunkIVCWQLQK_js.formatAxisValue(isLast ? endVal : val)
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 = chunkIVCWQLQK_js.computeLayoutOptions(
10077
+ const layoutOpts = chunkDHNQHQ66_js.computeLayoutOptions(
10078
10078
  chartData.axes,
10079
10079
  chartData.dataTable,
10080
10080
  chartData.series.length
10081
10081
  );
10082
- const layout = chunkIVCWQLQK_js.computeLayout(element.width, element.height, style, true, legendPos, layoutOpts);
10083
- const { primary, secondary } = chunkIVCWQLQK_js.splitSeriesByAxis(chartData.series, chartData.axes);
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 = chunkIVCWQLQK_js.computeValueRangeForChart(primarySeries, chartData.axes);
10087
- const secondaryRange = secondarySeries.length > 0 ? chunkIVCWQLQK_js.computeValueRange(secondarySeries) : void 0;
10088
- const secondaryAxisFmt = chunkIVCWQLQK_js.getSecondaryValueAxis(chartData.axes);
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 = chunkIVCWQLQK_js.valueToY(0, barRange, layout.plotTop, layout.plotBottom);
10105
- const valY = chunkIVCWQLQK_js.valueToY(val, barRange, layout.plotTop, layout.plotBottom);
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: chunkIVCWQLQK_js.seriesColor(barSeries, 0, chartData.style?.styleId, chartData.colorPalette),
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: chunkIVCWQLQK_js.formatAxisValue(val)
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 = chunkIVCWQLQK_js.valueToY(val, activeRange, layout.plotTop, layout.plotBottom);
10149
+ const y = chunkDHNQHQ66_js.valueToY(val, activeRange, layout.plotTop, layout.plotBottom);
10150
10150
  return { x, y, val };
10151
10151
  });
10152
- const c = chunkIVCWQLQK_js.seriesColor(series, seriesIdx, chartData.style?.styleId, chartData.colorPalette);
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: chunkIVCWQLQK_js.formatAxisValue(p.val)
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 = chunkIVCWQLQK_js.buildNotesPdfBytes(images, meta);
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 = chunkIVCWQLQK_js.buildSlidesPdfBytes(images);
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 = chunkIVCWQLQK_js.buildPreviewAnimation(preset, options);
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 (chunkIVCWQLQK_js.isTemplateElementId(elementId)) {
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 || !chunkKAP5TS7O_js.hasShapeProperties(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 || !chunkKAP5TS7O_js.hasTextProperties(selectedElement)) {
12125
+ if (!selectedElement || !chunkHUD73YBT_js.hasTextProperties(selectedElement)) {
12126
12126
  return;
12127
12127
  }
12128
- const inlineSel = chunkIVCWQLQK_js.getInlineEditorSelection(selectedElement.textSegments);
12128
+ const inlineSel = chunkDHNQHQ66_js.getInlineEditorSelection(selectedElement.textSegments);
12129
12129
  if (inlineSel && selectedElement.textSegments) {
12130
- const { newSegments: newSegments2, newSelection } = chunkIVCWQLQK_js.applyStyleToSelectedSegments(
12130
+ const { newSegments: newSegments2, newSelection } = chunkDHNQHQ66_js.applyStyleToSelectedSegments(
12131
12131
  selectedElement.textSegments,
12132
12132
  inlineSel,
12133
12133
  updates
12134
12134
  );
12135
- chunkIVCWQLQK_js.setPendingSelectionRestore(newSelection);
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 || !chunkKAP5TS7O_js.hasTextProperties(selectedElement)) {
12155
+ if (!selectedElement || !chunkHUD73YBT_js.hasTextProperties(selectedElement)) {
12156
12156
  return;
12157
12157
  }
12158
- const inlineSel = chunkIVCWQLQK_js.getInlineEditorSelection(selectedElement.textSegments);
12158
+ const inlineSel = chunkDHNQHQ66_js.getInlineEditorSelection(selectedElement.textSegments);
12159
12159
  if (inlineSel && selectedElement.textSegments) {
12160
- const newSegments = chunkIVCWQLQK_js.applyCaseTransformToSegments(
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 = chunkIVCWQLQK_js.applyCaseTransformToSegments(
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 = chunkIVCWQLQK_js.transformTextCase(selectedElement.text, mode);
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 = chunkIVCWQLQK_js.addSection(sections, slides, name, afterSlideIndex);
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 = chunkIVCWQLQK_js.renameSection(sections, slides, sectionId, newName);
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 = chunkIVCWQLQK_js.deleteSection(sections, slides, sectionId);
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(chunkIVCWQLQK_js.moveSectionUp(sections, sectionId));
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(chunkIVCWQLQK_js.moveSectionDown(sections, sectionId));
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 = chunkIVCWQLQK_js.moveSlidesToSection(sections, slides, slideIndexes, targetSectionId);
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 = chunkIVCWQLQK_js.applyResize(
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 chunkIVCWQLQK_js.snapBoxToGrid(box, handle, gridSpacingPx, MIN_ELEMENT_SIZE);
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 = chunkIVCWQLQK_js.computeSnapToShape(
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 = chunkIVCWQLQK_js.rerouteConnectorsForMovedElements(s.elements, movedIds);
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: chunkIVCWQLQK_js.applyReroutedConnectors(s.elements, rerouted)
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 = chunkIVCWQLQK_js.computeMarqueeHitIds(marquee, sourceElements);
12582
+ const hitIds = chunkDHNQHQ66_js.computeMarqueeHitIds(marquee, sourceElements);
12583
12583
  if (marquee.additive) {
12584
- const merged = chunkIVCWQLQK_js.mergeAdditiveSelection(marquee.baseSelectionIds, hitIds);
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 = chunkIVCWQLQK_js.rerouteConnectorsForMovedElements(movedElements, movedIds);
12608
- return chunkIVCWQLQK_js.applyReroutedConnectors(movedElements, rerouted);
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 && chunkKAP5TS7O_js.hasTextProperties(el)) {
12759
+ if (el && chunkHUD73YBT_js.hasTextProperties(el)) {
12760
12760
  const committedText = transformCommittedText ? transformCommittedText(inlineEditingText) : inlineEditingText;
12761
- const newSegments = chunkIVCWQLQK_js.remapTextToSegments(committedText, el.textSegments, el.textStyle);
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 (!chunkKAP5TS7O_js.hasTextProperties(el)) {
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 && chunkKAP5TS7O_js.hasTextProperties(el) && !el.locks?.noTextEdit) {
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 (chunkKAP5TS7O_js.hasTextProperties(el)) {
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: chunkIVCWQLQK_js.generateElementId(),
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: chunkIVCWQLQK_js.generateElementId(),
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: chunkIVCWQLQK_js.generateElementId(),
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: chunkIVCWQLQK_js.generateElementId(),
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: chunkIVCWQLQK_js.buildSmartArtPresetData(
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: chunkIVCWQLQK_js.generateElementId(),
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: chunkIVCWQLQK_js.generateElementId(),
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 = chunkIVCWQLQK_js.ACTION_BUTTON_PRESETS.find((p) => p.shapeType === shapeType);
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 = chunkKAP5TS7O_js.elementActionToPptxAction({
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: chunkIVCWQLQK_js.generateElementId(),
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: chunkIVCWQLQK_js.generateElementId(),
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: chunkIVCWQLQK_js.generateElementId(),
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
- ...chunkIVCWQLQK_js.newTableElement(DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, 100, 200),
13436
- id: chunkIVCWQLQK_js.generateElementId()
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(chunkIVCWQLQK_js.createDefaultChartElement(chartType));
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(chunkIVCWQLQK_js.buildElementClipboardPayload(selectedElement, editTemplateMode));
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 = chunkIVCWQLQK_js.cloneElementForPaste(source, { intoTemplate: editTemplateMode });
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 = chunkKAP5TS7O_js.getPresetShapeClipPath(el.shapeType);
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 = chunkKAP5TS7O_js.svgPathToPolygons(pathData);
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 chunkKAP5TS7O_js.polygonsToSvgPath(transformed);
13636
+ return chunkHUD73YBT_js.polygonsToSvgPath(transformed);
13637
13637
  }
13638
13638
  function transformPathToLocal(pathData, x, y, _width, _height) {
13639
- const polys = chunkKAP5TS7O_js.svgPathToPolygons(pathData);
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 chunkKAP5TS7O_js.polygonsToSvgPath(transformed);
13649
+ return chunkHUD73YBT_js.polygonsToSvgPath(transformed);
13650
13650
  }
13651
13651
  function pathBounds(pathData) {
13652
- const polys = chunkKAP5TS7O_js.svgPathToPolygons(pathData);
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 = chunkKAP5TS7O_js.mergeShapes("fragment", remaining, globalPaths[i]);
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: chunkIVCWQLQK_js.generateElementId(),
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 = chunkKAP5TS7O_js.mergeShapes(operation, resultPath, globalPaths[i]);
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: chunkIVCWQLQK_js.generateElementId(),
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 } = chunkIVCWQLQK_js.groupElements(ops.activeElements, ids, chunkIVCWQLQK_js.generateElementId());
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 = chunkIVCWQLQK_js.isTemplateElementId(group.id);
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 ? chunkIVCWQLQK_js.makeCloneId(true, child.id || group.id) : child.id || chunkIVCWQLQK_js.generateElementId(),
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 = chunkIVCWQLQK_js.alignElements(selectedElements, edge);
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 = chunkIVCWQLQK_js.distributeElements(selectedElements, distAxis);
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" ? chunkIVCWQLQK_js.bringForward(els, id) : direction === "backward" ? chunkIVCWQLQK_js.sendBackward(els, id) : els
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" ? chunkIVCWQLQK_js.bringToFront(els, id) : chunkIVCWQLQK_js.sendToBack(els, id)
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 = chunkIVCWQLQK_js.createBlankSlide(slides.length + 1);
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: chunkIVCWQLQK_js.makeSlideId(),
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
- ...chunkIVCWQLQK_js.createBlankSlide(slides.length + 1),
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 = chunkIVCWQLQK_js.mergeCells(
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 = chunkKAP5TS7O_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
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 = chunkIVCWQLQK_js.mergeCells(
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 = chunkKAP5TS7O_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
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 = chunkIVCWQLQK_js.mergeCells(ts.selectedCells, td);
14284
+ const newTableData = chunkDHNQHQ66_js.mergeCells(ts.selectedCells, td);
14285
14285
  const updates = { tableData: newTableData };
14286
- const newRawXml = chunkKAP5TS7O_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
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 = chunkIVCWQLQK_js.splitCell(rowIndex, columnIndex, td);
14303
+ const newTableData = chunkDHNQHQ66_js.splitCell(rowIndex, columnIndex, td);
14304
14304
  const updates = { tableData: newTableData };
14305
- const newRawXml = chunkKAP5TS7O_js.updateMergeAttrsInRawXml(selectedElement, newTableData);
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 = chunkKAP5TS7O_js.updateCellTextInRawXml(el, rowIndex, colIndex, text);
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 = chunkKAP5TS7O_js.updateCellTextStyleInRawXml(
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 = chunkIVCWQLQK_js.insertTableRow(selectedElement.tableData, rowIdx, position);
14437
+ const newTableData = chunkDHNQHQ66_js.insertTableRow(selectedElement.tableData, rowIdx, position);
14438
14438
  const updates = { tableData: newTableData };
14439
- const newRawXml = chunkKAP5TS7O_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
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 = chunkIVCWQLQK_js.deleteTableRow(td, rowIdx);
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 = chunkKAP5TS7O_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
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 = chunkIVCWQLQK_js.insertTableColumn(selectedElement.tableData, colIdx, position);
14469
+ const newTableData = chunkDHNQHQ66_js.insertTableColumn(selectedElement.tableData, colIdx, position);
14470
14470
  const updates = { tableData: newTableData };
14471
- const newRawXml = chunkKAP5TS7O_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
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 = chunkIVCWQLQK_js.deleteTableColumn(td, colIdx);
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 = chunkKAP5TS7O_js.rebuildTableStructureInRawXml(selectedElement, newTableData);
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 chunkIVCWQLQK_js.normalizeColorsForCapture(doc, clonedEl);
14526
- chunkIVCWQLQK_js.preprocessCssForCapture(clonedEl);
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
- chunkIVCWQLQK_js.downloadBlob(blob, `slide-${slideIndex + 1}.png`);
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(chunkIVCWQLQK_js.canvasToJpegData(canvas));
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
- chunkIVCWQLQK_js.downloadDataUrl(pdfBlobUrl, filename);
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
- chunkIVCWQLQK_js.downloadDataUrl(pdfDataUrl, filename);
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: chunkIVCWQLQK_js.pickSupportedMimeType([...chunkIVCWQLQK_js.WEBM_MIME_CANDIDATES]),
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 = chunkIVCWQLQK_js.fpsToFrameIntervalMs(fps);
14729
- const framesNeeded = chunkIVCWQLQK_js.segmentFrameCount(duration, fps);
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 = chunkIVCWQLQK_js.encodeGif(frames, Math.round(slideDurationMs / 10));
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 = chunkKAP5TS7O_js.SvgExporter.exportSlide(slide, data.width, data.height, svgOptions);
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 = chunkIVCWQLQK_js.generatePackageReadme(pptxFilename);
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
- chunkIVCWQLQK_js.downloadBlob(zipBlob, `${baseName}-package.zip`);
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
- chunkIVCWQLQK_js.downloadBlob(blob, `${baseName}.${ext}`);
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: chunkKAP5TS7O_js.guidePxToEmu(g.position)
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
- chunkIVCWQLQK_js.downloadBlob(blob, chunkIVCWQLQK_js.sanitizeDownloadFilename(filename));
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(chunkIVCWQLQK_js.slideProgressPercent(current, total));
15105
- setExportStatusMessage(chunkIVCWQLQK_js.slideStatusLabel("Rendering", current, total));
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(chunkIVCWQLQK_js.EXPORT_ASSEMBLING_PERCENT);
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(chunkIVCWQLQK_js.EXPORT_DONE_PERCENT);
15115
+ setExportProgress(chunkDHNQHQ66_js.EXPORT_DONE_PERCENT);
15116
15116
  setExportStatusMessage("Done!");
15117
15117
  } catch (err) {
15118
- if (!chunkIVCWQLQK_js.isExportAbortError(err)) {
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(chunkIVCWQLQK_js.slideProgressPercent(current, total));
15149
- setExportStatusMessage(chunkIVCWQLQK_js.slideStatusLabel("Rendering", current, total));
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(chunkIVCWQLQK_js.EXPORT_ASSEMBLING_PERCENT);
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(chunkIVCWQLQK_js.EXPORT_DONE_PERCENT);
15159
+ setExportProgress(chunkDHNQHQ66_js.EXPORT_DONE_PERCENT);
15160
15160
  setExportStatusMessage("Done!");
15161
15161
  } catch (err) {
15162
- if (!chunkIVCWQLQK_js.isExportAbortError(err)) {
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(chunkIVCWQLQK_js.slideProgressPercent(current, total, 45));
15204
- setExportStatusMessage(chunkIVCWQLQK_js.slideStatusLabel("Capturing", current, total));
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(chunkIVCWQLQK_js.recordProgressPercent(current, total));
15208
- setExportStatusMessage(chunkIVCWQLQK_js.slideStatusLabel("Recording", current, total));
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(chunkIVCWQLQK_js.EXPORT_ASSEMBLING_PERCENT);
15213
+ setExportProgress(chunkDHNQHQ66_js.EXPORT_ASSEMBLING_PERCENT);
15214
15214
  setExportStatusMessage("Saving file...");
15215
15215
  downloadBlob2(blob, "presentation.webm");
15216
- setExportProgress(chunkIVCWQLQK_js.EXPORT_DONE_PERCENT);
15216
+ setExportProgress(chunkDHNQHQ66_js.EXPORT_DONE_PERCENT);
15217
15217
  } catch (err) {
15218
- if (!chunkIVCWQLQK_js.isExportAbortError(err)) {
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(chunkIVCWQLQK_js.slideProgressPercent(current, total));
15247
- setExportStatusMessage(chunkIVCWQLQK_js.slideStatusLabel("Encoding", current, total));
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(chunkIVCWQLQK_js.EXPORT_ASSEMBLING_PERCENT);
15252
+ setExportProgress(chunkDHNQHQ66_js.EXPORT_ASSEMBLING_PERCENT);
15253
15253
  setExportStatusMessage("Saving file...");
15254
15254
  downloadBlob2(blob, "presentation.gif");
15255
- setExportProgress(chunkIVCWQLQK_js.EXPORT_DONE_PERCENT);
15255
+ setExportProgress(chunkDHNQHQ66_js.EXPORT_DONE_PERCENT);
15256
15256
  } catch (err) {
15257
- if (!chunkIVCWQLQK_js.isExportAbortError(err)) {
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
- chunkIVCWQLQK_js.buildPrintHtmlDocument({ title, bodyHtml, orientation, colorFilter, frameSlides })
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 = chunkIVCWQLQK_js.buildPrintDocument(svgs, pptxData.width, pptxData.height, {
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">${chunkIVCWQLQK_js.buildOutlineHtml(slideIndices, slides)}</div>`,
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
- chunkIVCWQLQK_js.buildSlidesHtml(slideImages, slideIndices),
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
- chunkIVCWQLQK_js.buildNotesHtml(slideImages, slideIndices, slides),
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
- chunkIVCWQLQK_js.buildHandoutsHtml(slideImages, slideIndices, spp),
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 ? chunkKAP5TS7O_js.buildThemeColorMap(theme.colorScheme) : {};
15505
- setSlides((prev) => chunkKAP5TS7O_js.reResolveSlideColors(prev, previousMap, colorScheme));
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 = chunkKAP5TS7O_js.applyThemeToData(data, preset.colorScheme, preset.fontScheme, preset.name);
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 = chunkKAP5TS7O_js.applyThemeToData(data, colorScheme, fontScheme, themeName);
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 chunkKAP5TS7O_js.THEME_PRESETS.find(
15640
- (p) => chunkKAP5TS7O_js.themeColorSchemesEqual(data.theme?.colorScheme, p.colorScheme)
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: chunkKAP5TS7O_js.THEME_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 chunkKAP5TS7O_js.PptxHandler();
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(chunkIVCWQLQK_js.comparePresentation(cur, other));
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) => chunkIVCWQLQK_js.applyAcceptSlide(prev, diff));
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) => chunkIVCWQLQK_js.applyAcceptAllSlides(prev, compareResult));
15757
+ setSlides((prev) => chunkDHNQHQ66_js.applyAcceptAllSlides(prev, compareResult));
15758
15758
  setIsDirty(true);
15759
15759
  }, [compareResult, setSlides, setIsDirty]);
15760
- const usedFontFamilies = React4.useMemo(() => chunkIVCWQLQK_js.collectUsedFonts(slides), [slides]);
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
- chunkIVCWQLQK_js.detectTouchDevice,
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(chunkIVCWQLQK_js.detectOrientation);
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(chunkIVCWQLQK_js.detectOrientation());
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 = chunkIVCWQLQK_js.isMobileViewport(containerWidth, containerHeight, isTouchDevice);
15970
- const isTablet = !isMobile && containerWidth >= chunkIVCWQLQK_js.MOBILE_BREAKPOINT && containerWidth < chunkIVCWQLQK_js.TABLET_BREAKPOINT;
15971
- const isDesktop = !isMobile && containerWidth >= chunkIVCWQLQK_js.TABLET_BREAKPOINT;
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" ? chunkIVCWQLQK_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch()) : false
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
- chunkIVCWQLQK_js.isMobileViewport(window.innerWidth, window.innerHeight, viewportIsTouch())
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
- chunkIVCWQLQK_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
16050
+ chunkDHNQHQ66_js.isMobileViewport(entry.contentRect.width, entry.contentRect.height, viewportIsTouch())
16051
16051
  );
16052
16052
  }
16053
16053
  });
16054
16054
  observer.observe(el);
16055
- setIsNarrowViewport(chunkIVCWQLQK_js.isMobileViewport(el.clientWidth, el.clientHeight, viewportIsTouch()));
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 chunkIVCWQLQK_js.groupSlidesBySection(sections, slides).map((group) => ({
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 || !chunkKAP5TS7O_js.hasTextProperties(el)) {
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: chunkIVCWQLQK_js.remapTextToSegments(pendingEditText, el.textSegments, el.textStyle)
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: chunkKAP5TS7O_js.guidePxToEmu(g.position)
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) => chunkIVCWQLQK_js.applyRehearsalTimings(prev, timings));
16725
+ setSlides((prev) => chunkDHNQHQ66_js.applyRehearsalTimings(prev, timings));
16723
16726
  history.markDirty();
16724
16727
  },
16725
- loopContinuously: chunkIVCWQLQK_js.shouldLoopContinuously(presentationProperties),
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 = chunkIVCWQLQK_js.copyFormatFromElement(selectedElement);
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 = chunkIVCWQLQK_js.applyFormatToElement(element, copiedFormatRef.current);
16916
+ const updated = chunkDHNQHQ66_js.applyFormatToElement(element, copiedFormatRef.current);
16914
16917
  const updates = {};
16915
- if (chunkKAP5TS7O_js.hasShapeProperties(updated)) {
16918
+ if (chunkHUD73YBT_js.hasShapeProperties(updated)) {
16916
16919
  updates.shapeStyle = updated.shapeStyle;
16917
16920
  }
16918
- if (chunkKAP5TS7O_js.hasTextProperties(updated)) {
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 (chunkKAP5TS7O_js.hasTextProperties(el) && el.textSegments) {
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 ??= chunkIVCWQLQK_js.createViewerOptionsStore();
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(chunkIVCWQLQK_js.TOOLBAR_TABS.map((tab) => tab.id));
17861
+ var KNOWN_TAB_IDS = new Set(chunkDHNQHQ66_js.TOOLBAR_TABS.map((tab) => tab.id));
17858
17862
  function computeToolbarVisibility(hiddenActions) {
17859
- const isHidden = (id) => chunkIVCWQLQK_js.isActionHidden(id, hiddenActions);
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-VPE4R4KO.js');
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 = chunkIVCWQLQK_js.readSlidesFromYDoc(
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 = chunkIVCWQLQK_js.readSlidesFromYDoc(
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
- chunkIVCWQLQK_js.reconcileSlidesInYDoc(
17991
+ chunkDHNQHQ66_js.reconcileSlidesInYDoc(
17988
17992
  slides,
17989
17993
  doc,
17990
17994
  factories,
17991
- chunkIVCWQLQK_js.LOCAL_SYNC_ORIGIN
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 === chunkIVCWQLQK_js.LOCAL_SYNC_ORIGIN) {
18009
+ if (transaction?.origin === chunkDHNQHQ66_js.LOCAL_SYNC_ORIGIN) {
18006
18010
  return;
18007
18011
  }
18008
- const remoteSlides = chunkIVCWQLQK_js.readSlidesFromYDoc(
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 = chunkIVCWQLQK_js.observeYDocSlides(
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 (!chunkIVCWQLQK_js.shouldAutoFollowBroadcaster({
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 = chunkIVCWQLQK_js.createTouchGestureRecognizer({
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 = chunkIVCWQLQK_js.computeScrollDelta(
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 = chunkIVCWQLQK_js.readViewportMetrics(window);
18261
- const inset = metrics ? chunkIVCWQLQK_js.computeKeyboardInset(metrics) : 0;
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 = chunkIVCWQLQK_js.readViewportMetrics(window);
18273
- const inset = metrics ? chunkIVCWQLQK_js.computeKeyboardInset(metrics) : 0;
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: chunkIVCWQLQK_js.isKeyboardOpen(keyboardInset) };
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
- chunkIVCWQLQK_js.safeOpenUrl(action.url);
18345
+ chunkDHNQHQ66_js.safeOpenUrl(action.url);
18342
18346
  }
18343
18347
  };
18344
18348
  const handleHyperlinkClick = (url) => {
18345
- if (chunkIVCWQLQK_js.isPpactionUrl(url)) {
18349
+ if (chunkDHNQHQ66_js.isPpactionUrl(url)) {
18346
18350
  if (mode === "present") {
18347
- const parsed = chunkIVCWQLQK_js.parsePpactionUrl(url);
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
- chunkIVCWQLQK_js.safeOpenUrl(url);
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(chunkIVCWQLQK_js.createBackstagePresentation(templateId));
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: chunkIVCWQLQK_js.hasCopyableFormat(selectedElement),
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 chunkIVCWQLQK_js.openPptxFile();
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 chunkIVCWQLQK_js.readBackstageRecentFile(key);
19013
+ const bytes = await chunkDHNQHQ66_js.readBackstageRecentFile(key);
19004
19014
  if (bytes) {
19005
19015
  setContent(bytes);
19006
19016
  }