pptx-react-viewer 2.6.0 → 2.6.2

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.
Files changed (97) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{AiChatPanel-L5IOO72H.mjs → AiChatPanel-5IAXQYGH.mjs} +3 -3
  3. package/dist/AiChatPanel-5IAXQYGH.mjs.br +0 -0
  4. package/dist/AiChatPanel-5IAXQYGH.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-53W2JG6G.js → AiChatPanel-IC2Q3H3N.js} +22 -22
  6. package/dist/AiChatPanel-IC2Q3H3N.js.br +0 -0
  7. package/dist/AiChatPanel-IC2Q3H3N.js.gz +0 -0
  8. package/dist/{Model3DScene-E7JGXNJN.js → Model3DScene-GOFY2PQS.js} +2 -2
  9. package/dist/Model3DScene-GOFY2PQS.js.br +0 -0
  10. package/dist/Model3DScene-GOFY2PQS.js.gz +0 -0
  11. package/dist/{Model3DScene-EW7OWRJK.mjs → Model3DScene-UEU7L4QY.mjs} +1 -1
  12. package/dist/Model3DScene-UEU7L4QY.mjs.br +0 -0
  13. package/dist/Model3DScene-UEU7L4QY.mjs.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-3QB6NVKD.js → SurfaceChart3DScene-5TILKZMY.js} +2 -2
  15. package/dist/SurfaceChart3DScene-5TILKZMY.js.br +0 -0
  16. package/dist/SurfaceChart3DScene-5TILKZMY.js.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-64HI3U7Y.mjs → SurfaceChart3DScene-KCJUDJUK.mjs} +1 -1
  18. package/dist/{SurfaceChart3DScene-64HI3U7Y.mjs.br → SurfaceChart3DScene-KCJUDJUK.mjs.br} +0 -0
  19. package/dist/SurfaceChart3DScene-KCJUDJUK.mjs.gz +0 -0
  20. package/dist/{chunk-UVA55CRK.js → chunk-G7PJSVUS.js} +76 -19
  21. package/dist/chunk-G7PJSVUS.js.br +0 -0
  22. package/dist/{chunk-UVA55CRK.js.gz → chunk-G7PJSVUS.js.gz} +0 -0
  23. package/dist/{chunk-VBWWICDF.js → chunk-IGYK3NK5.js} +3 -3
  24. package/dist/chunk-IGYK3NK5.js.br +0 -0
  25. package/dist/chunk-IGYK3NK5.js.gz +0 -0
  26. package/dist/{chunk-UO55N46T.mjs → chunk-LJPRMPNA.mjs} +11 -9
  27. package/dist/chunk-LJPRMPNA.mjs.br +0 -0
  28. package/dist/chunk-LJPRMPNA.mjs.gz +0 -0
  29. package/dist/{chunk-WCO3NEH5.mjs → chunk-MQYNBEOY.mjs} +2 -2
  30. package/dist/chunk-MQYNBEOY.mjs.br +0 -0
  31. package/dist/{chunk-WCO3NEH5.mjs.gz → chunk-MQYNBEOY.mjs.gz} +0 -0
  32. package/dist/{chunk-V5XVTKFS.js → chunk-TMU7Z3CU.js} +847 -845
  33. package/dist/chunk-TMU7Z3CU.js.br +0 -0
  34. package/dist/chunk-TMU7Z3CU.js.gz +0 -0
  35. package/dist/{chunk-DWQJW3UM.mjs → chunk-UV5R7IQY.mjs} +11 -6
  36. package/dist/chunk-UV5R7IQY.mjs.br +0 -0
  37. package/dist/chunk-UV5R7IQY.mjs.gz +0 -0
  38. package/dist/{chunk-EJ24IFPL.js → chunk-W27U3GQS.js} +315 -315
  39. package/dist/chunk-W27U3GQS.js.br +0 -0
  40. package/dist/chunk-W27U3GQS.js.gz +0 -0
  41. package/dist/{chunk-NXSAYLYI.js → chunk-XROVGBFQ.js} +245 -240
  42. package/dist/chunk-XROVGBFQ.js.br +0 -0
  43. package/dist/chunk-XROVGBFQ.js.gz +0 -0
  44. package/dist/{chunk-PENV7S7Z.mjs → chunk-Y4TIW2MM.mjs} +1 -1
  45. package/dist/chunk-Y4TIW2MM.mjs.br +0 -0
  46. package/dist/chunk-Y4TIW2MM.mjs.gz +0 -0
  47. package/dist/{chunk-34ZW32XK.mjs → chunk-Y6H2RSLB.mjs} +76 -19
  48. package/dist/chunk-Y6H2RSLB.mjs.br +0 -0
  49. package/dist/{chunk-34ZW32XK.mjs.gz → chunk-Y6H2RSLB.mjs.gz} +0 -0
  50. package/dist/index.js +34 -34
  51. package/dist/index.js.br +0 -0
  52. package/dist/index.js.gz +0 -0
  53. package/dist/index.mjs +5 -5
  54. package/dist/index.mjs.br +0 -0
  55. package/dist/index.mjs.gz +0 -0
  56. package/dist/internals.d.ts +5 -3
  57. package/dist/internals.js +78 -78
  58. package/dist/internals.js.br +0 -0
  59. package/dist/internals.js.gz +0 -0
  60. package/dist/internals.mjs +3 -3
  61. package/dist/internals.mjs.br +0 -0
  62. package/dist/internals.mjs.gz +0 -0
  63. package/dist/viewer/index.js +21 -21
  64. package/dist/viewer/index.js.br +0 -0
  65. package/dist/viewer/index.js.gz +0 -0
  66. package/dist/viewer/index.mjs +5 -5
  67. package/dist/viewer/index.mjs.br +0 -0
  68. package/dist/viewer/index.mjs.gz +0 -0
  69. package/package.json +1 -1
  70. package/dist/AiChatPanel-53W2JG6G.js.br +0 -0
  71. package/dist/AiChatPanel-53W2JG6G.js.gz +0 -0
  72. package/dist/AiChatPanel-L5IOO72H.mjs.br +0 -0
  73. package/dist/AiChatPanel-L5IOO72H.mjs.gz +0 -0
  74. package/dist/Model3DScene-E7JGXNJN.js.br +0 -0
  75. package/dist/Model3DScene-E7JGXNJN.js.gz +0 -0
  76. package/dist/Model3DScene-EW7OWRJK.mjs.br +0 -0
  77. package/dist/Model3DScene-EW7OWRJK.mjs.gz +0 -0
  78. package/dist/SurfaceChart3DScene-3QB6NVKD.js.br +0 -0
  79. package/dist/SurfaceChart3DScene-3QB6NVKD.js.gz +0 -0
  80. package/dist/SurfaceChart3DScene-64HI3U7Y.mjs.gz +0 -0
  81. package/dist/chunk-34ZW32XK.mjs.br +0 -0
  82. package/dist/chunk-DWQJW3UM.mjs.br +0 -0
  83. package/dist/chunk-DWQJW3UM.mjs.gz +0 -0
  84. package/dist/chunk-EJ24IFPL.js.br +0 -0
  85. package/dist/chunk-EJ24IFPL.js.gz +0 -0
  86. package/dist/chunk-NXSAYLYI.js.br +0 -0
  87. package/dist/chunk-NXSAYLYI.js.gz +0 -0
  88. package/dist/chunk-PENV7S7Z.mjs.br +0 -0
  89. package/dist/chunk-PENV7S7Z.mjs.gz +0 -0
  90. package/dist/chunk-UO55N46T.mjs.br +0 -0
  91. package/dist/chunk-UO55N46T.mjs.gz +0 -0
  92. package/dist/chunk-UVA55CRK.js.br +0 -0
  93. package/dist/chunk-V5XVTKFS.js.br +0 -0
  94. package/dist/chunk-V5XVTKFS.js.gz +0 -0
  95. package/dist/chunk-VBWWICDF.js.br +0 -0
  96. package/dist/chunk-VBWWICDF.js.gz +0 -0
  97. package/dist/chunk-WCO3NEH5.mjs.br +0 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ All notable changes to this project are documented here.
4
4
  This file is generated from [Conventional Commits](https://www.conventionalcommits.org)
5
5
  by [git-cliff](https://git-cliff.org); do not edit it by hand.
6
6
 
7
+ ## [2.6.1](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-react-viewer@2.6.1) - 2026-07-29
8
+
9
+ ## [2.6.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-react-viewer@2.6.0) - 2026-07-27
10
+
7
11
  ## [2.5.3](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-react-viewer@2.5.3) - 2026-07-27
8
12
 
9
13
  ### Dependencies
@@ -1,7 +1,7 @@
1
- import { isAiAvailable, createAiChatSession, toolCanvasTarget, createChatHistoryStore, focusTargetChips, isTwoTableFocus, humanizeDiffLine, buildDeckContext, describeToolActivity, summarizeToolArgs, toolLabel } from './chunk-PENV7S7Z.mjs';
2
- import { cn } from './chunk-DWQJW3UM.mjs';
1
+ import { isAiAvailable, createAiChatSession, toolCanvasTarget, createChatHistoryStore, focusTargetChips, isTwoTableFocus, humanizeDiffLine, buildDeckContext, describeToolActivity, summarizeToolArgs, toolLabel } from './chunk-Y4TIW2MM.mjs';
2
+ import { cn } from './chunk-UV5R7IQY.mjs';
3
3
  import './chunk-Z6HIZWIQ.mjs';
4
- import './chunk-34ZW32XK.mjs';
4
+ import './chunk-Y6H2RSLB.mjs';
5
5
  import './chunk-XGB3TDIC.mjs';
6
6
  import { useMemo, useRef, useState, useEffect, useReducer, useCallback } from 'react';
7
7
  import { useTranslation } from 'react-i18next';
Binary file
Binary file
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkVBWWICDF_js = require('./chunk-VBWWICDF.js');
4
- var chunkNXSAYLYI_js = require('./chunk-NXSAYLYI.js');
3
+ var chunkIGYK3NK5_js = require('./chunk-IGYK3NK5.js');
4
+ var chunkXROVGBFQ_js = require('./chunk-XROVGBFQ.js');
5
5
  require('./chunk-25VSL2BB.js');
6
- require('./chunk-UVA55CRK.js');
6
+ require('./chunk-G7PJSVUS.js');
7
7
  require('./chunk-4VNS5WPM.js');
8
8
  var react = require('react');
9
9
  var reactI18next = require('react-i18next');
@@ -30,7 +30,7 @@ function useAiChat(bridge, config) {
30
30
  setInitError(void 0);
31
31
  void (async () => {
32
32
  try {
33
- const available = await chunkVBWWICDF_js.isAiAvailable();
33
+ const available = await chunkIGYK3NK5_js.isAiAvailable();
34
34
  if (cancelled) {
35
35
  return;
36
36
  }
@@ -38,7 +38,7 @@ function useAiChat(bridge, config) {
38
38
  setState("unavailable");
39
39
  return;
40
40
  }
41
- const built = await chunkVBWWICDF_js.createAiChatSession(bridge, configRef.current);
41
+ const built = await chunkIGYK3NK5_js.createAiChatSession(bridge, configRef.current);
42
42
  if (cancelled) {
43
43
  return;
44
44
  }
@@ -144,7 +144,7 @@ function withDeckContext(inner, bridge, strategy) {
144
144
  }
145
145
  let context = "";
146
146
  try {
147
- context = await chunkVBWWICDF_js.buildDeckContext(bridge, { strategy, focus: {} });
147
+ context = await chunkIGYK3NK5_js.buildDeckContext(bridge, { strategy, focus: {} });
148
148
  } catch {
149
149
  context = "";
150
150
  }
@@ -207,7 +207,7 @@ function useAiConversation(session, config, bridge, options = {}) {
207
207
  continue;
208
208
  }
209
209
  seen.add(call.toolCallId);
210
- onToolTargetRef.current?.(chunkVBWWICDF_js.toolCanvasTarget(call.toolName, call.input));
210
+ onToolTargetRef.current?.(chunkIGYK3NK5_js.toolCanvasTarget(call.toolName, call.input));
211
211
  }
212
212
  }, [chat.messages]);
213
213
  const send = react.useCallback(
@@ -283,7 +283,7 @@ function deriveTitle(messages) {
283
283
  }
284
284
  function useAiHistory(input) {
285
285
  const { deckId, messages, setMessages } = input;
286
- const store = react.useMemo(() => input.store ?? chunkVBWWICDF_js.createChatHistoryStore(), [input.store]);
286
+ const store = react.useMemo(() => input.store ?? chunkIGYK3NK5_js.createChatHistoryStore(), [input.store]);
287
287
  const [activeChatId, setActiveChatId] = react.useState(newChatId);
288
288
  const [chats, setChats] = react.useState([]);
289
289
  const createdAtRef = react.useRef(Date.now());
@@ -426,7 +426,7 @@ function AiComposer({
426
426
  disabled: value.trim().length === 0,
427
427
  title: t("pptx.ai.send"),
428
428
  "aria-label": t("pptx.ai.send"),
429
- className: chunkNXSAYLYI_js.cn(
429
+ className: chunkXROVGBFQ_js.cn(
430
430
  "shrink-0 rounded-sm p-1.5 transition-colors",
431
431
  value.trim().length === 0 ? "text-muted-foreground/50" : "bg-primary text-primary-foreground hover:bg-primary/90"
432
432
  ),
@@ -452,15 +452,15 @@ function AiFocusBar({
452
452
  onClearPicks
453
453
  }) {
454
454
  const { t } = reactI18next.useTranslation();
455
- const chips = chunkVBWWICDF_js.focusTargetChips(targets, slides);
456
- const twoTables = chunkVBWWICDF_js.isTwoTableFocus(targets, slides);
455
+ const chips = chunkIGYK3NK5_js.focusTargetChips(targets, slides);
456
+ const twoTables = chunkIGYK3NK5_js.isTwoTableFocus(targets, slides);
457
457
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-border bg-secondary/30", children: [
458
458
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1 px-2.5 py-1.5", children: [
459
459
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-semibold uppercase tracking-wide text-muted-foreground", children: t("pptx.ai.focusScope") }),
460
460
  chips.map((chip) => /* @__PURE__ */ jsxRuntime.jsx(
461
461
  "span",
462
462
  {
463
- className: chunkNXSAYLYI_js.cn(
463
+ className: chunkXROVGBFQ_js.cn(
464
464
  "inline-flex max-w-[10rem] items-center rounded-full px-2 py-0.5 text-[11px]",
465
465
  hasPicks || isPinned ? "bg-primary/15 text-primary" : "bg-muted text-muted-foreground"
466
466
  ),
@@ -493,7 +493,7 @@ function AiFocusBar({
493
493
  title: t("pptx.ai.pickElement"),
494
494
  "aria-label": t("pptx.ai.pickAria"),
495
495
  "aria-pressed": pickMode,
496
- className: chunkNXSAYLYI_js.cn(
496
+ className: chunkXROVGBFQ_js.cn(
497
497
  "rounded-sm p-1",
498
498
  pickMode ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-accent"
499
499
  ),
@@ -572,7 +572,7 @@ function AiHistoryList({ chats, activeChatId, onResume, onDelete }) {
572
572
  {
573
573
  type: "button",
574
574
  onClick: () => onResume(chat.id),
575
- className: chunkNXSAYLYI_js.cn(
575
+ className: chunkXROVGBFQ_js.cn(
576
576
  "flex min-w-0 flex-1 items-start gap-2 rounded-sm px-2 py-1.5 text-left hover:bg-accent",
577
577
  chat.id === activeChatId && "bg-accent/60"
578
578
  ),
@@ -727,26 +727,26 @@ function AiToolCallCard({ part }) {
727
727
  const failed = part.state === "output-error";
728
728
  const done = part.state === "output-available";
729
729
  const running = !failed && !done;
730
- const activity = chunkVBWWICDF_js.describeToolActivity(part.toolName, part.input, running ? "present" : "past");
730
+ const activity = chunkIGYK3NK5_js.describeToolActivity(part.toolName, part.input, running ? "present" : "past");
731
731
  const Icon = ICONS[activity.icon] ?? lu.LuWrench;
732
- const rawSummary = chunkVBWWICDF_js.summarizeToolArgs(part.input);
732
+ const rawSummary = chunkIGYK3NK5_js.summarizeToolArgs(part.input);
733
733
  const statusLabel = failed ? t("pptx.ai.toolFailed") : done ? t("pptx.ai.toolDone") : t("pptx.ai.toolRunning");
734
734
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[12px]", children: [
735
735
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
736
736
  /* @__PURE__ */ jsxRuntime.jsx(
737
737
  Icon,
738
738
  {
739
- className: chunkNXSAYLYI_js.cn(
739
+ className: chunkXROVGBFQ_js.cn(
740
740
  "w-3.5 h-3.5 shrink-0",
741
741
  failed ? "text-destructive" : "text-muted-foreground"
742
742
  )
743
743
  }
744
744
  ),
745
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkNXSAYLYI_js.cn("truncate", failed ? "text-destructive" : "text-foreground"), children: activity.label }),
745
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkXROVGBFQ_js.cn("truncate", failed ? "text-destructive" : "text-foreground"), children: activity.label }),
746
746
  /* @__PURE__ */ jsxRuntime.jsxs(
747
747
  "span",
748
748
  {
749
- className: chunkNXSAYLYI_js.cn(
749
+ className: chunkXROVGBFQ_js.cn(
750
750
  "ml-auto inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5 text-[10px]",
751
751
  failed ? "bg-destructive/15 text-destructive" : done ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"
752
752
  ),
@@ -763,7 +763,7 @@ function AiToolCallCard({ part }) {
763
763
  rawSummary && /* @__PURE__ */ jsxRuntime.jsxs("details", { className: "group mt-0.5 pl-5", children: [
764
764
  /* @__PURE__ */ jsxRuntime.jsx("summary", { className: "cursor-pointer list-none text-[10px] text-muted-foreground/70 hover:text-muted-foreground", children: t("pptx.ai.toolDetails") }),
765
765
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-0.5 break-words font-mono text-[10px] text-muted-foreground/80", children: [
766
- chunkVBWWICDF_js.toolLabel(part.toolName),
766
+ chunkIGYK3NK5_js.toolLabel(part.toolName),
767
767
  ": ",
768
768
  rawSummary
769
769
  ] })
@@ -794,7 +794,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
794
794
  /* @__PURE__ */ jsxRuntime.jsx(
795
795
  "div",
796
796
  {
797
- className: chunkNXSAYLYI_js.cn(
797
+ className: chunkXROVGBFQ_js.cn(
798
798
  "mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-full",
799
799
  isUser ? "bg-secondary text-muted-foreground" : "bg-primary/15 text-primary"
800
800
  ),
@@ -841,7 +841,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
841
841
  }
842
842
  function AiProposalCard({ proposal, onAccept, onReject }) {
843
843
  const { t } = reactI18next.useTranslation();
844
- const lines = proposal.summary.map(chunkVBWWICDF_js.humanizeDiffLine);
844
+ const lines = proposal.summary.map(chunkIGYK3NK5_js.humanizeDiffLine);
845
845
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-primary/40 bg-primary/5 p-2.5", children: [
846
846
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wide text-primary", children: t("pptx.ai.proposedChange") }),
847
847
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12px] font-medium text-foreground", children: proposal.label }),
Binary file
Binary file
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkUVA55CRK_js = require('./chunk-UVA55CRK.js');
3
+ var chunkG7PJSVUS_js = require('./chunk-G7PJSVUS.js');
4
4
  require('./chunk-4VNS5WPM.js');
5
5
  var react = require('react');
6
6
  var jsxRuntime = require('react/jsx-runtime');
@@ -14,7 +14,7 @@ function Model3DScene({ modelUrl, interactive, width, height }) {
14
14
  return;
15
15
  }
16
16
  let disposed = false;
17
- void chunkUVA55CRK_js.mountModel3D(container, modelUrl, { width, height, interactive }).then((handle) => {
17
+ void chunkG7PJSVUS_js.mountModel3D(container, modelUrl, { width, height, interactive }).then((handle) => {
18
18
  if (disposed) {
19
19
  handle.dispose();
20
20
  } else {
Binary file
Binary file
@@ -1,4 +1,4 @@
1
- import { mountModel3D } from './chunk-34ZW32XK.mjs';
1
+ import { mountModel3D } from './chunk-Y6H2RSLB.mjs';
2
2
  import './chunk-XGB3TDIC.mjs';
3
3
  import { useRef, useEffect } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkUVA55CRK_js = require('./chunk-UVA55CRK.js');
3
+ var chunkG7PJSVUS_js = require('./chunk-G7PJSVUS.js');
4
4
  require('./chunk-4VNS5WPM.js');
5
5
  var react = require('react');
6
6
  var jsxRuntime = require('react/jsx-runtime');
@@ -25,7 +25,7 @@ function SurfaceChart3DScene({
25
25
  return;
26
26
  }
27
27
  let disposed = false;
28
- void chunkUVA55CRK_js.mountSurfaceChart3D(container, {
28
+ void chunkG7PJSVUS_js.mountSurfaceChart3D(container, {
29
29
  cols,
30
30
  rows,
31
31
  heightMap,
@@ -1,4 +1,4 @@
1
- import { mountSurfaceChart3D } from './chunk-34ZW32XK.mjs';
1
+ import { mountSurfaceChart3D } from './chunk-Y6H2RSLB.mjs';
2
2
  import './chunk-XGB3TDIC.mjs';
3
3
  import { useRef, useEffect } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -64366,18 +64366,6 @@ var PptxHandlerRuntime67 = class _PptxHandlerRuntime30 extends PptxHandlerRuntim
64366
64366
  if (hasShapeProperties(el) && el.shapeStyle?.strokeWidth) {
64367
64367
  el.shapeStyle.strokeWidth *= avgScale;
64368
64368
  }
64369
- if (hasTextProperties(el)) {
64370
- if (el.textStyle?.fontSize) {
64371
- el.textStyle.fontSize *= Math.abs(scaleY);
64372
- }
64373
- if (el.textSegments) {
64374
- el.textSegments.forEach((seg) => {
64375
- if (seg.style.fontSize) {
64376
- seg.style.fontSize *= Math.abs(scaleY);
64377
- }
64378
- });
64379
- }
64380
- }
64381
64369
  return el;
64382
64370
  };
64383
64371
  this.unwrapAlternateContent(group);
@@ -98374,14 +98362,14 @@ function matchMorphElementsFull(fromSlide, toSlide) {
98374
98362
  }
98375
98363
  }
98376
98364
  for (const fromEl of fromSlide.elements) {
98377
- if (usedFrom.has(fromEl.id)) {
98365
+ if (usedFrom.has(fromEl.id) || !fromEl.shapeId) {
98378
98366
  continue;
98379
98367
  }
98380
98368
  for (const toEl of toSlide.elements) {
98381
98369
  if (usedTo.has(toEl.id)) {
98382
98370
  continue;
98383
98371
  }
98384
- if (fromEl.id === toEl.id) {
98372
+ if (toEl.shapeId && fromEl.shapeId === toEl.shapeId && fromEl.type === toEl.type) {
98385
98373
  pairs2.push({ fromElement: fromEl, toElement: toEl });
98386
98374
  usedFrom.add(fromEl.id);
98387
98375
  usedTo.add(toEl.id);
@@ -98622,6 +98610,37 @@ function buildStrokeInterpolationProps(fromElement, toElement) {
98622
98610
  toWidth
98623
98611
  };
98624
98612
  }
98613
+ var SIGNATURE_MAX_DEPTH = 8;
98614
+ function appearanceSignature(element, depth = 0) {
98615
+ const parts = [element.type];
98616
+ if (hasShapeProperties(element)) {
98617
+ const style = element.shapeStyle;
98618
+ parts.push(
98619
+ element.shapeType ?? "",
98620
+ style?.fillMode ?? "",
98621
+ style?.fillColor ?? "",
98622
+ style?.fillGradient ?? "",
98623
+ String(style?.fillOpacity ?? ""),
98624
+ style?.strokeColor ?? "",
98625
+ String(style?.strokeWidth ?? "")
98626
+ );
98627
+ }
98628
+ const image = element;
98629
+ parts.push(image.imagePath ?? "", image.svgPath ?? "");
98630
+ if (hasTextProperties(element)) {
98631
+ parts.push(element.text ?? "", element.textStyle?.color ?? "");
98632
+ }
98633
+ const children8 = element.children;
98634
+ if (children8 && depth < SIGNATURE_MAX_DEPTH) {
98635
+ for (const child22 of children8) {
98636
+ parts.push(appearanceSignature(child22, depth + 1));
98637
+ }
98638
+ }
98639
+ return parts.join("");
98640
+ }
98641
+ function morphPairNeedsCrossfade(fromElement, toElement) {
98642
+ return appearanceSignature(fromElement) !== appearanceSignature(toElement);
98643
+ }
98625
98644
  function generateMorphAnimations(pairs2, durationMs, _mode = "object") {
98626
98645
  const animations = [];
98627
98646
  for (let index = 0; index < pairs2.length; index++) {
@@ -98634,9 +98653,10 @@ function generateMorphAnimations(pairs2, durationMs, _mode = "object") {
98634
98653
  const dr = (fromElement.rotation ?? 0) - (toElement.rotation ?? 0);
98635
98654
  const fromOpacity = fromElement.opacity ?? 1;
98636
98655
  const toOpacity = toElement.opacity ?? 1;
98656
+ const crossfades = morphPairNeedsCrossfade(fromElement, toElement);
98637
98657
  const fromProps = [
98638
98658
  ` transform: translate(${dx}px, ${dy}px) scale(${sx}, ${sy}) rotate(${dr}deg);`,
98639
- ` opacity: ${fromOpacity};`
98659
+ ` opacity: ${crossfades ? 0 : fromOpacity};`
98640
98660
  ];
98641
98661
  const toProps = [
98642
98662
  " transform: translate(0, 0) scale(1, 1) rotate(0deg);",
@@ -98669,6 +98689,40 @@ ${toProps.join("\n")}
98669
98689
  }
98670
98690
  return animations;
98671
98691
  }
98692
+ function generateMorphGhostAnimations(pairs2, durationMs, startIndex) {
98693
+ const animations = [];
98694
+ for (let index = 0; index < pairs2.length; index++) {
98695
+ const { fromElement, toElement } = pairs2[index];
98696
+ const fadesOut = morphPairNeedsCrossfade(fromElement, toElement);
98697
+ const safeName = `pptx-morph-ghost-${startIndex + index}-${fromElement.id.replace(/[^a-zA-Z0-9]/gu, "")}`;
98698
+ const dx = toElement.x - fromElement.x;
98699
+ const dy = toElement.y - fromElement.y;
98700
+ const sx = Math.max(toElement.width, 1) / Math.max(fromElement.width, 1);
98701
+ const sy = Math.max(toElement.height, 1) / Math.max(fromElement.height, 1);
98702
+ const dr = (toElement.rotation ?? 0) - (fromElement.rotation ?? 0);
98703
+ const originX = fromElement.x + fromElement.width / 2;
98704
+ const originY = fromElement.y + fromElement.height / 2;
98705
+ const keyframes = `
98706
+ @keyframes ${safeName} {
98707
+ from {
98708
+ transform-origin: ${originX}px ${originY}px;
98709
+ transform: translate(0, 0) scale(1, 1) rotate(0deg);
98710
+ opacity: ${fromElement.opacity ?? 1};
98711
+ }
98712
+ to {
98713
+ transform-origin: ${originX}px ${originY}px;
98714
+ transform: translate(${dx}px, ${dy}px) scale(${sx}, ${sy}) rotate(${dr}deg);
98715
+ opacity: ${fadesOut ? 0 : fromElement.opacity ?? 1};
98716
+ }
98717
+ }`;
98718
+ animations.push({
98719
+ elementId: fromElement.id,
98720
+ animation: `${safeName} ${durationMs}ms ${MORPH_EASING} forwards`,
98721
+ keyframes
98722
+ });
98723
+ }
98724
+ return animations;
98725
+ }
98672
98726
  function generateUnmatchedFadeOutAnimations(elements, durationMs, startIndex) {
98673
98727
  return elements.map((el, i) => {
98674
98728
  const safeName = `pptx-morph-fadeout-${startIndex + i}-${el.id.replace(/[^a-zA-Z0-9]/gu, "")}`;
@@ -98746,16 +98800,18 @@ function generateFullMorphTransition(fromSlide, toSlide, durationMs, mode = "obj
98746
98800
  }
98747
98801
  }
98748
98802
  }
98803
+ const ghosts = generateMorphGhostAnimations(matchResult.pairs, durationMs, pairAnims.length);
98804
+ allAnimations.push(...ghosts);
98749
98805
  const fadeOuts = generateUnmatchedFadeOutAnimations(
98750
98806
  matchResult.unmatchedFrom,
98751
98807
  durationMs,
98752
- pairAnims.length
98808
+ pairAnims.length + ghosts.length
98753
98809
  );
98754
98810
  allAnimations.push(...fadeOuts);
98755
98811
  const fadeIns = generateUnmatchedFadeInAnimations(
98756
98812
  matchResult.unmatchedTo,
98757
98813
  durationMs,
98758
- pairAnims.length + fadeOuts.length
98814
+ pairAnims.length + ghosts.length + fadeOuts.length
98759
98815
  );
98760
98816
  allAnimations.push(...fadeIns);
98761
98817
  return allAnimations;
@@ -98778,7 +98834,8 @@ function buildMorphTransitionPlan(fromSlide, toSlide, durationMs, mode = "object
98778
98834
  return void 0;
98779
98835
  }
98780
98836
  const animations = generateFullMorphTransition(fromSlide, toSlide, durationMs, mode);
98781
- const outgoingIds = new Set(match.unmatchedFrom.map((element) => element.id));
98837
+ const outgoingElements = [...fromSlide.elements];
98838
+ const outgoingIds = new Set(outgoingElements.map((element) => element.id));
98782
98839
  const incomingAnimations = /* @__PURE__ */ new Map();
98783
98840
  const outgoingAnimations = /* @__PURE__ */ new Map();
98784
98841
  const keyframes = [];
@@ -98794,7 +98851,7 @@ function buildMorphTransitionPlan(fromSlide, toSlide, durationMs, mode = "object
98794
98851
  keyframesCss: keyframes.join("\n"),
98795
98852
  incomingAnimations,
98796
98853
  outgoingAnimations,
98797
- outgoingElements: match.unmatchedFrom,
98854
+ outgoingElements,
98798
98855
  durationMs
98799
98856
  };
98800
98857
  }
Binary file
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkUVA55CRK_js = require('./chunk-UVA55CRK.js');
3
+ var chunkG7PJSVUS_js = require('./chunk-G7PJSVUS.js');
4
4
  var chunk4VNS5WPM_js = require('./chunk-4VNS5WPM.js');
5
5
  var mcp = require('pptx-viewer-mcp');
6
6
  var mcpSchemas = require('pptx-viewer-mcp/schemas');
@@ -14879,7 +14879,7 @@ async function buildSlideMarkdown(slides, slideIndex2, meta3, options = {}) {
14879
14879
  };
14880
14880
  let markdown;
14881
14881
  try {
14882
- const converter = new chunkUVA55CRK_js.PptxMarkdownConverter(
14882
+ const converter = new chunkG7PJSVUS_js.PptxMarkdownConverter(
14883
14883
  "",
14884
14884
  {
14885
14885
  sourceName: meta3.title ?? "deck.pptx",
@@ -15470,7 +15470,7 @@ var getTheme = (ctx) => {
15470
15470
  name: theme?.name,
15471
15471
  colorScheme: theme?.colorScheme,
15472
15472
  fontScheme: theme?.fontScheme,
15473
- availablePresets: Object.keys(chunkUVA55CRK_js.ThemePresets)
15473
+ availablePresets: Object.keys(chunkG7PJSVUS_js.ThemePresets)
15474
15474
  };
15475
15475
  };
15476
15476
  var readExecutors = {
Binary file
Binary file
@@ -1,8 +1,8 @@
1
- import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-PENV7S7Z.mjs';
2
- import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-WCO3NEH5.mjs';
3
- import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_TRANSITION_OPTIONS, SLIDE_NAV_THUMBNAIL_WIDTH, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, startPreviewAnimation, stopPreviewAnimation } from './chunk-DWQJW3UM.mjs';
1
+ import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-Y4TIW2MM.mjs';
2
+ import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-MQYNBEOY.mjs';
3
+ import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_TRANSITION_OPTIONS, SLIDE_NAV_THUMBNAIL_WIDTH, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, startPreviewAnimation, stopPreviewAnimation } from './chunk-UV5R7IQY.mjs';
4
4
  import { LOCALE_CATALOG, translationsEn } from './chunk-Z6HIZWIQ.mjs';
5
- import { RULER_THICKNESS, RULER_FONT_SIZE, hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, SWITCHABLE_LAYOUT_TYPES, EQUATION_TEMPLATES, convertLatexToOmml, convertOmmlToMathMl, sanitizeMathMl, DEFAULT_VIEWER_OPTIONS, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, revealedSmartArtNodeCount, buildSmartArtA11y, buildCssGradientFromShapeStyle, resolveGroupChildFill, getGroupChildParentFill, getComputedEffectStyle, getSoftEdgeSvgFilter, isInkElement, getElementLabel, buildPreviewElements, themeToCssVars, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, isImageLikeElement, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, getLinkedTextBoxSegments, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, themeColorSchemesEqual, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, activateModalFocus, buildCollaborationShareUrl, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, formatElapsed, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, computeSmartArtLayout, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, SLIDE_VIRTUALIZATION_THRESHOLD, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, presentationInkPath, getShapeAdjustmentHandleDescriptor, formatSlideCounter, isUrlSafe, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, groupIntoParagraphs, substituteFieldText, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, getConnectionSites, generateTicks, getCommentMarkerPosition, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_LABELS, buildSmartArtPresetData, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, TABLE_STYLE_PRESETS, chartDataChangeType, chartDataUpdatePoint, chartDataAddCategory, chartDataRemoveCategory, chartDataAddSeries, chartDataRemoveSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, formatCommentTimestamp, DIRECTIONAL_PRESETS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, addSmartArtNodeAsChild, removeSmartArtNode, DUOTONE_PRESETS, ARTISTIC_EFFECTS, elementActionToPptxAction, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS } from './chunk-34ZW32XK.mjs';
5
+ import { RULER_THICKNESS, RULER_FONT_SIZE, hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, SWITCHABLE_LAYOUT_TYPES, EQUATION_TEMPLATES, convertLatexToOmml, convertOmmlToMathMl, sanitizeMathMl, DEFAULT_VIEWER_OPTIONS, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, revealedSmartArtNodeCount, buildSmartArtA11y, buildCssGradientFromShapeStyle, resolveGroupChildFill, getGroupChildParentFill, getComputedEffectStyle, getSoftEdgeSvgFilter, isInkElement, getElementLabel, buildPreviewElements, themeToCssVars, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, isImageLikeElement, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, getLinkedTextBoxSegments, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, themeColorSchemesEqual, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, activateModalFocus, buildCollaborationShareUrl, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, formatElapsed, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, computeSmartArtLayout, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, SLIDE_VIRTUALIZATION_THRESHOLD, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, presentationInkPath, getShapeAdjustmentHandleDescriptor, formatSlideCounter, isUrlSafe, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, groupIntoParagraphs, substituteFieldText, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, getConnectionSites, generateTicks, getCommentMarkerPosition, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_LABELS, buildSmartArtPresetData, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, TABLE_STYLE_PRESETS, chartDataChangeType, chartDataUpdatePoint, chartDataAddCategory, chartDataRemoveCategory, chartDataAddSeries, chartDataRemoveSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, formatCommentTimestamp, DIRECTIONAL_PRESETS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, addSmartArtNodeAsChild, removeSmartArtNode, DUOTONE_PRESETS, ARTISTIC_EFFECTS, elementActionToPptxAction, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS } from './chunk-Y6H2RSLB.mjs';
6
6
  import React32, { createContext, useMemo, useState, useCallback, lazy, forwardRef, useEffect, useRef, useContext, Suspense, useLayoutEffect, useDeferredValue } from 'react';
7
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
8
  import { useTranslation } from 'react-i18next';
@@ -1337,7 +1337,7 @@ function AccountPage() {
1337
1337
  return void 0;
1338
1338
  });
1339
1339
  };
1340
- const version = "2.5.3" ;
1340
+ const version = "2.6.1" ;
1341
1341
  return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
1342
1342
  /* @__PURE__ */ jsxs("section", { className: cardClass, children: [
1343
1343
  /* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -8341,7 +8341,7 @@ function FailedToLoad() {
8341
8341
  var LazyModel3DScene = React32.lazy(
8342
8342
  async () => {
8343
8343
  try {
8344
- return await import('./Model3DScene-EW7OWRJK.mjs');
8344
+ return await import('./Model3DScene-UEU7L4QY.mjs');
8345
8345
  } catch {
8346
8346
  return { default: FailedToLoad };
8347
8347
  }
@@ -31623,7 +31623,7 @@ ${url}`)) {
31623
31623
  )
31624
31624
  );
31625
31625
  }
31626
- var AiChatPanel = lazy(() => import('./AiChatPanel-L5IOO72H.mjs'));
31626
+ var AiChatPanel = lazy(() => import('./AiChatPanel-5IAXQYGH.mjs'));
31627
31627
  function AiChatPanelLazy(props) {
31628
31628
  return /* @__PURE__ */ jsx(
31629
31629
  Suspense,
@@ -34887,6 +34887,8 @@ var PowerPointViewer = forwardRef(
34887
34887
  const { optionsStore, options: viewerOptions } = useViewerOptions();
34888
34888
  const settingsRef = useRef(settings);
34889
34889
  settingsRef.current = settings;
34890
+ const handleSettingsChangeRef = useRef(handleSettingsChange);
34891
+ handleSettingsChangeRef.current = handleSettingsChange;
34890
34892
  const syncingFromOptionsRef = useRef(false);
34891
34893
  useEffect(() => {
34892
34894
  const mapped = viewerOptionsToPreferences(viewerOptions);
@@ -34894,13 +34896,13 @@ var PowerPointViewer = forwardRef(
34894
34896
  for (const key of Object.keys(mapped)) {
34895
34897
  if (mapped[key] !== settingsRef.current[key]) {
34896
34898
  changed = true;
34897
- handleSettingsChange(key, mapped[key]);
34899
+ handleSettingsChangeRef.current(key, mapped[key]);
34898
34900
  }
34899
34901
  }
34900
34902
  if (changed) {
34901
34903
  syncingFromOptionsRef.current = true;
34902
34904
  }
34903
- }, [viewerOptions, handleSettingsChange]);
34905
+ }, [viewerOptions]);
34904
34906
  useEffect(() => {
34905
34907
  const current = optionsStore.getOptions();
34906
34908
  const mapped = viewerOptionsToPreferences(current);
Binary file
Binary file
@@ -1,6 +1,6 @@
1
- import { cloneHistorySnapshot, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, partitionTemplateElements, UNGROUPED_SECTION_ID, stopAllPersistentAudio, buildSaveSlides, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, executeMediaCommand, buildPdfFromImageData, buildNotesPdf, EMU_PER_PX, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-DWQJW3UM.mjs';
1
+ import { cloneHistorySnapshot, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, partitionTemplateElements, UNGROUPED_SECTION_ID, stopAllPersistentAudio, buildSaveSlides, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, executeMediaCommand, buildPdfFromImageData, buildNotesPdf, EMU_PER_PX, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-UV5R7IQY.mjs';
2
2
  import { translationsEn } from './chunk-Z6HIZWIQ.mjs';
3
- import { TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, PresentationAnimationController, computeEntranceAnimationDelay, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, buildMorphTransitionPlan, morphOptionToMode, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, buildInitialGuides, EncryptedFileError, saveAutosaveSnapshot, isTemplateElementId, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, downloadBlob, sanitizeDownloadFilename, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, mayLeaveSlideShow, remapTextToSegments, guidePxToEmu, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createViewerOptionsStore, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, derivePresenceList, mapPresentationKey, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildThemeColorMap, reResolveSlideColors, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, buildPrintHtmlDocument, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, elementActionToPptxAction, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid } from './chunk-34ZW32XK.mjs';
3
+ import { TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, PresentationAnimationController, computeEntranceAnimationDelay, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, buildMorphTransitionPlan, morphOptionToMode, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, buildInitialGuides, EncryptedFileError, saveAutosaveSnapshot, isTemplateElementId, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, downloadBlob, sanitizeDownloadFilename, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, mayLeaveSlideShow, remapTextToSegments, guidePxToEmu, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createViewerOptionsStore, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, derivePresenceList, mapPresentationKey, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildThemeColorMap, reResolveSlideColors, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, buildPrintHtmlDocument, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, elementActionToPptxAction, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid } from './chunk-Y6H2RSLB.mjs';
4
4
  import { useRef, useState, useEffect, useCallback, useMemo, useSyncExternalStore, useImperativeHandle } from 'react';
5
5
  import JSZip from 'jszip';
6
6
  import { useTranslation } from 'react-i18next';
Binary file