pptx-react-viewer 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{AiChatPanel-S3FWARWG.js → AiChatPanel-HC3CE3TL.js} +23 -23
  3. package/dist/AiChatPanel-HC3CE3TL.js.br +0 -0
  4. package/dist/AiChatPanel-HC3CE3TL.js.gz +0 -0
  5. package/dist/{AiChatPanel-JFCJCR3O.mjs → AiChatPanel-PXZYHJUB.mjs} +4 -4
  6. package/dist/AiChatPanel-PXZYHJUB.mjs.br +0 -0
  7. package/dist/AiChatPanel-PXZYHJUB.mjs.gz +0 -0
  8. package/dist/{Model3DScene-BZK4UHL4.js → Model3DScene-37QZRHV5.js} +3 -3
  9. package/dist/Model3DScene-37QZRHV5.js.br +0 -0
  10. package/dist/Model3DScene-37QZRHV5.js.gz +0 -0
  11. package/dist/{Model3DScene-RCZCBW52.mjs → Model3DScene-ZG4HTMPX.mjs} +2 -2
  12. package/dist/Model3DScene-ZG4HTMPX.mjs.br +0 -0
  13. package/dist/Model3DScene-ZG4HTMPX.mjs.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-EGPAMPX4.js → SurfaceChart3DScene-QIREQ66D.js} +3 -3
  15. package/dist/SurfaceChart3DScene-QIREQ66D.js.br +0 -0
  16. package/dist/SurfaceChart3DScene-QIREQ66D.js.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-IRLH4ADG.mjs → SurfaceChart3DScene-Z7R6DZXN.mjs} +2 -2
  18. package/dist/{SurfaceChart3DScene-IRLH4ADG.mjs.br → SurfaceChart3DScene-Z7R6DZXN.mjs.br} +0 -0
  19. package/dist/SurfaceChart3DScene-Z7R6DZXN.mjs.gz +0 -0
  20. package/dist/{chunk-CLNGAVNH.js → chunk-3TB45PVK.js} +69 -111
  21. package/dist/chunk-3TB45PVK.js.br +0 -0
  22. package/dist/chunk-3TB45PVK.js.gz +0 -0
  23. package/dist/{chunk-RLK72AOU.mjs → chunk-4AAFZFGH.mjs} +36 -7
  24. package/dist/chunk-4AAFZFGH.mjs.br +0 -0
  25. package/dist/chunk-4AAFZFGH.mjs.gz +0 -0
  26. package/dist/{chunk-SYPHGLIB.js → chunk-EUIFPDXZ.js} +3 -3
  27. package/dist/chunk-EUIFPDXZ.js.br +0 -0
  28. package/dist/chunk-EUIFPDXZ.js.gz +0 -0
  29. package/dist/{chunk-L4ETDT4F.mjs → chunk-I5LEMC5C.mjs} +4 -4
  30. package/dist/chunk-I5LEMC5C.mjs.br +0 -0
  31. package/dist/chunk-I5LEMC5C.mjs.gz +0 -0
  32. package/dist/{chunk-6BUR4MJO.mjs → chunk-J5A22DZ7.mjs} +63 -38
  33. package/dist/chunk-J5A22DZ7.mjs.br +0 -0
  34. package/dist/chunk-J5A22DZ7.mjs.gz +0 -0
  35. package/dist/{chunk-6YXLGMTN.mjs → chunk-JFNMD6TM.mjs} +68 -112
  36. package/dist/chunk-JFNMD6TM.mjs.br +0 -0
  37. package/dist/chunk-JFNMD6TM.mjs.gz +0 -0
  38. package/dist/{chunk-UTTXH3GH.js → chunk-KDW3LLG5.js} +77 -47
  39. package/dist/chunk-KDW3LLG5.js.br +0 -0
  40. package/dist/chunk-KDW3LLG5.js.gz +0 -0
  41. package/dist/{chunk-JPJBOVU7.js → chunk-L7JNCVTF.js} +309 -309
  42. package/dist/chunk-L7JNCVTF.js.br +0 -0
  43. package/dist/chunk-L7JNCVTF.js.gz +0 -0
  44. package/dist/{chunk-BHVCED34.mjs → chunk-M5YR3QSB.mjs} +1 -1
  45. package/dist/chunk-M5YR3QSB.mjs.br +0 -0
  46. package/dist/chunk-M5YR3QSB.mjs.gz +0 -0
  47. package/dist/{chunk-RNZJKGA7.js → chunk-P7UVBRFO.js} +257 -241
  48. package/dist/chunk-P7UVBRFO.js.br +0 -0
  49. package/dist/chunk-P7UVBRFO.js.gz +0 -0
  50. package/dist/{chunk-SOHIKHL4.mjs → chunk-VOHTAUN4.mjs} +23 -7
  51. package/dist/chunk-VOHTAUN4.mjs.br +0 -0
  52. package/dist/chunk-VOHTAUN4.mjs.gz +0 -0
  53. package/dist/{chunk-3KD6S6VM.js → chunk-ZLSVW5GP.js} +898 -873
  54. package/dist/chunk-ZLSVW5GP.js.br +0 -0
  55. package/dist/chunk-ZLSVW5GP.js.gz +0 -0
  56. package/dist/{dist-4LUVI3SW.js → dist-FTEVZZPM.js} +576 -568
  57. package/dist/dist-FTEVZZPM.js.br +0 -0
  58. package/dist/dist-FTEVZZPM.js.gz +0 -0
  59. package/dist/{dist-J6PC54PZ.mjs → dist-L7GZVBMG.mjs} +1 -1
  60. package/dist/dist-L7GZVBMG.mjs.br +0 -0
  61. package/dist/dist-L7GZVBMG.mjs.gz +0 -0
  62. package/dist/index.d.ts +13 -0
  63. package/dist/index.js +35 -35
  64. package/dist/index.js.br +0 -0
  65. package/dist/index.js.gz +0 -0
  66. package/dist/index.mjs +6 -6
  67. package/dist/index.mjs.br +0 -0
  68. package/dist/index.mjs.gz +0 -0
  69. package/dist/internals.d.ts +13 -0
  70. package/dist/internals.js +79 -79
  71. package/dist/internals.js.br +0 -0
  72. package/dist/internals.js.gz +0 -0
  73. package/dist/internals.mjs +4 -4
  74. package/dist/internals.mjs.br +0 -0
  75. package/dist/internals.mjs.gz +0 -0
  76. package/dist/viewer/index.d.ts +13 -0
  77. package/dist/viewer/index.js +22 -22
  78. package/dist/viewer/index.js.br +0 -0
  79. package/dist/viewer/index.js.gz +0 -0
  80. package/dist/viewer/index.mjs +6 -6
  81. package/dist/viewer/index.mjs.br +0 -0
  82. package/dist/viewer/index.mjs.gz +0 -0
  83. package/package.json +1 -1
  84. package/dist/AiChatPanel-JFCJCR3O.mjs.br +0 -0
  85. package/dist/AiChatPanel-JFCJCR3O.mjs.gz +0 -0
  86. package/dist/AiChatPanel-S3FWARWG.js.br +0 -0
  87. package/dist/AiChatPanel-S3FWARWG.js.gz +0 -0
  88. package/dist/Model3DScene-BZK4UHL4.js.br +0 -0
  89. package/dist/Model3DScene-BZK4UHL4.js.gz +0 -0
  90. package/dist/Model3DScene-RCZCBW52.mjs.br +0 -0
  91. package/dist/Model3DScene-RCZCBW52.mjs.gz +0 -0
  92. package/dist/SurfaceChart3DScene-EGPAMPX4.js.br +0 -0
  93. package/dist/SurfaceChart3DScene-EGPAMPX4.js.gz +0 -0
  94. package/dist/SurfaceChart3DScene-IRLH4ADG.mjs.gz +0 -0
  95. package/dist/chunk-3KD6S6VM.js.br +0 -0
  96. package/dist/chunk-3KD6S6VM.js.gz +0 -0
  97. package/dist/chunk-6BUR4MJO.mjs.br +0 -0
  98. package/dist/chunk-6BUR4MJO.mjs.gz +0 -0
  99. package/dist/chunk-6YXLGMTN.mjs.br +0 -0
  100. package/dist/chunk-6YXLGMTN.mjs.gz +0 -0
  101. package/dist/chunk-BHVCED34.mjs.br +0 -0
  102. package/dist/chunk-BHVCED34.mjs.gz +0 -0
  103. package/dist/chunk-CLNGAVNH.js.br +0 -0
  104. package/dist/chunk-CLNGAVNH.js.gz +0 -0
  105. package/dist/chunk-JPJBOVU7.js.br +0 -0
  106. package/dist/chunk-JPJBOVU7.js.gz +0 -0
  107. package/dist/chunk-L4ETDT4F.mjs.br +0 -0
  108. package/dist/chunk-L4ETDT4F.mjs.gz +0 -0
  109. package/dist/chunk-RLK72AOU.mjs.br +0 -0
  110. package/dist/chunk-RLK72AOU.mjs.gz +0 -0
  111. package/dist/chunk-RNZJKGA7.js.br +0 -0
  112. package/dist/chunk-RNZJKGA7.js.gz +0 -0
  113. package/dist/chunk-SOHIKHL4.mjs.br +0 -0
  114. package/dist/chunk-SOHIKHL4.mjs.gz +0 -0
  115. package/dist/chunk-SYPHGLIB.js.br +0 -0
  116. package/dist/chunk-SYPHGLIB.js.gz +0 -0
  117. package/dist/chunk-UTTXH3GH.js.br +0 -0
  118. package/dist/chunk-UTTXH3GH.js.gz +0 -0
  119. package/dist/dist-4LUVI3SW.js.br +0 -0
  120. package/dist/dist-4LUVI3SW.js.gz +0 -0
  121. package/dist/dist-J6PC54PZ.mjs.br +0 -0
  122. package/dist/dist-J6PC54PZ.mjs.gz +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.2.1](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-react-viewer@2.2.1) - 2026-07-24
8
+
9
+ ## [2.2.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-react-viewer@2.2.0) - 2026-07-24
10
+
7
11
  ## [2.1.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-react-viewer@2.1.0) - 2026-07-23
8
12
 
9
13
  ### Features
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkSYPHGLIB_js = require('./chunk-SYPHGLIB.js');
4
- var chunkRNZJKGA7_js = require('./chunk-RNZJKGA7.js');
5
- require('./chunk-UTTXH3GH.js');
3
+ var chunkEUIFPDXZ_js = require('./chunk-EUIFPDXZ.js');
4
+ var chunkP7UVBRFO_js = require('./chunk-P7UVBRFO.js');
5
+ require('./chunk-KDW3LLG5.js');
6
6
  require('./chunk-YIFO3WQO.js');
7
- require('./chunk-CLNGAVNH.js');
7
+ require('./chunk-3TB45PVK.js');
8
8
  require('./chunk-4VNS5WPM.js');
9
9
  var react = require('react');
10
10
  var reactI18next = require('react-i18next');
@@ -31,7 +31,7 @@ function useAiChat(bridge, config) {
31
31
  setInitError(void 0);
32
32
  void (async () => {
33
33
  try {
34
- const available = await chunkSYPHGLIB_js.isAiAvailable();
34
+ const available = await chunkEUIFPDXZ_js.isAiAvailable();
35
35
  if (cancelled) {
36
36
  return;
37
37
  }
@@ -39,7 +39,7 @@ function useAiChat(bridge, config) {
39
39
  setState("unavailable");
40
40
  return;
41
41
  }
42
- const built = await chunkSYPHGLIB_js.createAiChatSession(bridge, configRef.current);
42
+ const built = await chunkEUIFPDXZ_js.createAiChatSession(bridge, configRef.current);
43
43
  if (cancelled) {
44
44
  return;
45
45
  }
@@ -145,7 +145,7 @@ function withDeckContext(inner, bridge, strategy) {
145
145
  }
146
146
  let context = "";
147
147
  try {
148
- context = await chunkSYPHGLIB_js.buildDeckContext(bridge, { strategy, focus: {} });
148
+ context = await chunkEUIFPDXZ_js.buildDeckContext(bridge, { strategy, focus: {} });
149
149
  } catch {
150
150
  context = "";
151
151
  }
@@ -208,7 +208,7 @@ function useAiConversation(session, config, bridge, options = {}) {
208
208
  continue;
209
209
  }
210
210
  seen.add(call.toolCallId);
211
- onToolTargetRef.current?.(chunkSYPHGLIB_js.toolCanvasTarget(call.toolName, call.input));
211
+ onToolTargetRef.current?.(chunkEUIFPDXZ_js.toolCanvasTarget(call.toolName, call.input));
212
212
  }
213
213
  }, [chat.messages]);
214
214
  const send = react.useCallback(
@@ -284,7 +284,7 @@ function deriveTitle(messages) {
284
284
  }
285
285
  function useAiHistory(input) {
286
286
  const { deckId, messages, setMessages } = input;
287
- const store = react.useMemo(() => input.store ?? chunkSYPHGLIB_js.createChatHistoryStore(), [input.store]);
287
+ const store = react.useMemo(() => input.store ?? chunkEUIFPDXZ_js.createChatHistoryStore(), [input.store]);
288
288
  const [activeChatId, setActiveChatId] = react.useState(newChatId);
289
289
  const [chats, setChats] = react.useState([]);
290
290
  const createdAtRef = react.useRef(Date.now());
@@ -427,7 +427,7 @@ function AiComposer({
427
427
  disabled: value.trim().length === 0,
428
428
  title: t("pptx.ai.send"),
429
429
  "aria-label": t("pptx.ai.send"),
430
- className: chunkRNZJKGA7_js.cn(
430
+ className: chunkP7UVBRFO_js.cn(
431
431
  "shrink-0 rounded-sm p-1.5 transition-colors",
432
432
  value.trim().length === 0 ? "text-muted-foreground/50" : "bg-primary text-primary-foreground hover:bg-primary/90"
433
433
  ),
@@ -453,15 +453,15 @@ function AiFocusBar({
453
453
  onClearPicks
454
454
  }) {
455
455
  const { t } = reactI18next.useTranslation();
456
- const chips = chunkSYPHGLIB_js.focusTargetChips(targets, slides);
457
- const twoTables = chunkSYPHGLIB_js.isTwoTableFocus(targets, slides);
456
+ const chips = chunkEUIFPDXZ_js.focusTargetChips(targets, slides);
457
+ const twoTables = chunkEUIFPDXZ_js.isTwoTableFocus(targets, slides);
458
458
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-b border-border bg-secondary/30", children: [
459
459
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1 px-2.5 py-1.5", children: [
460
460
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-semibold uppercase tracking-wide text-muted-foreground", children: t("pptx.ai.focusScope") }),
461
461
  chips.map((chip) => /* @__PURE__ */ jsxRuntime.jsx(
462
462
  "span",
463
463
  {
464
- className: chunkRNZJKGA7_js.cn(
464
+ className: chunkP7UVBRFO_js.cn(
465
465
  "inline-flex max-w-[10rem] items-center rounded-full px-2 py-0.5 text-[11px]",
466
466
  hasPicks || isPinned ? "bg-primary/15 text-primary" : "bg-muted text-muted-foreground"
467
467
  ),
@@ -494,7 +494,7 @@ function AiFocusBar({
494
494
  title: t("pptx.ai.pickElement"),
495
495
  "aria-label": t("pptx.ai.pickAria"),
496
496
  "aria-pressed": pickMode,
497
- className: chunkRNZJKGA7_js.cn(
497
+ className: chunkP7UVBRFO_js.cn(
498
498
  "rounded-sm p-1",
499
499
  pickMode ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:bg-accent"
500
500
  ),
@@ -573,7 +573,7 @@ function AiHistoryList({ chats, activeChatId, onResume, onDelete }) {
573
573
  {
574
574
  type: "button",
575
575
  onClick: () => onResume(chat.id),
576
- className: chunkRNZJKGA7_js.cn(
576
+ className: chunkP7UVBRFO_js.cn(
577
577
  "flex min-w-0 flex-1 items-start gap-2 rounded-sm px-2 py-1.5 text-left hover:bg-accent",
578
578
  chat.id === activeChatId && "bg-accent/60"
579
579
  ),
@@ -728,26 +728,26 @@ function AiToolCallCard({ part }) {
728
728
  const failed = part.state === "output-error";
729
729
  const done = part.state === "output-available";
730
730
  const running = !failed && !done;
731
- const activity = chunkSYPHGLIB_js.describeToolActivity(part.toolName, part.input, running ? "present" : "past");
731
+ const activity = chunkEUIFPDXZ_js.describeToolActivity(part.toolName, part.input, running ? "present" : "past");
732
732
  const Icon = ICONS[activity.icon] ?? lu.LuWrench;
733
- const rawSummary = chunkSYPHGLIB_js.summarizeToolArgs(part.input);
733
+ const rawSummary = chunkEUIFPDXZ_js.summarizeToolArgs(part.input);
734
734
  const statusLabel = failed ? t("pptx.ai.toolFailed") : done ? t("pptx.ai.toolDone") : t("pptx.ai.toolRunning");
735
735
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[12px]", children: [
736
736
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
737
737
  /* @__PURE__ */ jsxRuntime.jsx(
738
738
  Icon,
739
739
  {
740
- className: chunkRNZJKGA7_js.cn(
740
+ className: chunkP7UVBRFO_js.cn(
741
741
  "w-3.5 h-3.5 shrink-0",
742
742
  failed ? "text-destructive" : "text-muted-foreground"
743
743
  )
744
744
  }
745
745
  ),
746
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkRNZJKGA7_js.cn("truncate", failed ? "text-destructive" : "text-foreground"), children: activity.label }),
746
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkP7UVBRFO_js.cn("truncate", failed ? "text-destructive" : "text-foreground"), children: activity.label }),
747
747
  /* @__PURE__ */ jsxRuntime.jsxs(
748
748
  "span",
749
749
  {
750
- className: chunkRNZJKGA7_js.cn(
750
+ className: chunkP7UVBRFO_js.cn(
751
751
  "ml-auto inline-flex items-center gap-1 rounded-sm px-1.5 py-0.5 text-[10px]",
752
752
  failed ? "bg-destructive/15 text-destructive" : done ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"
753
753
  ),
@@ -764,7 +764,7 @@ function AiToolCallCard({ part }) {
764
764
  rawSummary && /* @__PURE__ */ jsxRuntime.jsxs("details", { className: "group mt-0.5 pl-5", children: [
765
765
  /* @__PURE__ */ jsxRuntime.jsx("summary", { className: "cursor-pointer list-none text-[10px] text-muted-foreground/70 hover:text-muted-foreground", children: t("pptx.ai.toolDetails") }),
766
766
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-0.5 break-words font-mono text-[10px] text-muted-foreground/80", children: [
767
- chunkSYPHGLIB_js.toolLabel(part.toolName),
767
+ chunkEUIFPDXZ_js.toolLabel(part.toolName),
768
768
  ": ",
769
769
  rawSummary
770
770
  ] })
@@ -795,7 +795,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
795
795
  /* @__PURE__ */ jsxRuntime.jsx(
796
796
  "div",
797
797
  {
798
- className: chunkRNZJKGA7_js.cn(
798
+ className: chunkP7UVBRFO_js.cn(
799
799
  "mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-full",
800
800
  isUser ? "bg-secondary text-muted-foreground" : "bg-primary/15 text-primary"
801
801
  ),
@@ -842,7 +842,7 @@ function AiMessageList({ messages, isStreaming, bridge }) {
842
842
  }
843
843
  function AiProposalCard({ proposal, onAccept, onReject }) {
844
844
  const { t } = reactI18next.useTranslation();
845
- const lines = proposal.summary.map(chunkSYPHGLIB_js.humanizeDiffLine);
845
+ const lines = proposal.summary.map(chunkEUIFPDXZ_js.humanizeDiffLine);
846
846
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-primary/40 bg-primary/5 p-2.5", children: [
847
847
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wide text-primary", children: t("pptx.ai.proposedChange") }),
848
848
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12px] font-medium text-foreground", children: proposal.label }),
Binary file
Binary file
@@ -1,8 +1,8 @@
1
- import { isAiAvailable, createAiChatSession, toolCanvasTarget, createChatHistoryStore, focusTargetChips, isTwoTableFocus, humanizeDiffLine, buildDeckContext, describeToolActivity, summarizeToolArgs, toolLabel } from './chunk-BHVCED34.mjs';
2
- import { cn } from './chunk-SOHIKHL4.mjs';
3
- import './chunk-RLK72AOU.mjs';
1
+ import { isAiAvailable, createAiChatSession, toolCanvasTarget, createChatHistoryStore, focusTargetChips, isTwoTableFocus, humanizeDiffLine, buildDeckContext, describeToolActivity, summarizeToolArgs, toolLabel } from './chunk-M5YR3QSB.mjs';
2
+ import { cn } from './chunk-VOHTAUN4.mjs';
3
+ import './chunk-4AAFZFGH.mjs';
4
4
  import './chunk-PZTPX3HK.mjs';
5
- import './chunk-6YXLGMTN.mjs';
5
+ import './chunk-JFNMD6TM.mjs';
6
6
  import './chunk-XGB3TDIC.mjs';
7
7
  import { useMemo, useRef, useState, useEffect, useReducer, useCallback } from 'react';
8
8
  import { useTranslation } from 'react-i18next';
Binary file
Binary file
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkUTTXH3GH_js = require('./chunk-UTTXH3GH.js');
4
- require('./chunk-CLNGAVNH.js');
3
+ var chunkKDW3LLG5_js = require('./chunk-KDW3LLG5.js');
4
+ require('./chunk-3TB45PVK.js');
5
5
  require('./chunk-4VNS5WPM.js');
6
6
  var react = require('react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
@@ -15,7 +15,7 @@ function Model3DScene({ modelUrl, interactive, width, height }) {
15
15
  return;
16
16
  }
17
17
  let disposed = false;
18
- void chunkUTTXH3GH_js.mountModel3D(container, modelUrl, { width, height, interactive }).then((handle) => {
18
+ void chunkKDW3LLG5_js.mountModel3D(container, modelUrl, { width, height, interactive }).then((handle) => {
19
19
  if (disposed) {
20
20
  handle.dispose();
21
21
  } else {
Binary file
Binary file
@@ -1,5 +1,5 @@
1
- import { mountModel3D } from './chunk-RLK72AOU.mjs';
2
- import './chunk-6YXLGMTN.mjs';
1
+ import { mountModel3D } from './chunk-4AAFZFGH.mjs';
2
+ import './chunk-JFNMD6TM.mjs';
3
3
  import './chunk-XGB3TDIC.mjs';
4
4
  import { useRef, useEffect } from 'react';
5
5
  import { jsx } from 'react/jsx-runtime';
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkUTTXH3GH_js = require('./chunk-UTTXH3GH.js');
4
- require('./chunk-CLNGAVNH.js');
3
+ var chunkKDW3LLG5_js = require('./chunk-KDW3LLG5.js');
4
+ require('./chunk-3TB45PVK.js');
5
5
  require('./chunk-4VNS5WPM.js');
6
6
  var react = require('react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
@@ -26,7 +26,7 @@ function SurfaceChart3DScene({
26
26
  return;
27
27
  }
28
28
  let disposed = false;
29
- void chunkUTTXH3GH_js.mountSurfaceChart3D(container, {
29
+ void chunkKDW3LLG5_js.mountSurfaceChart3D(container, {
30
30
  cols,
31
31
  rows,
32
32
  heightMap,
@@ -1,5 +1,5 @@
1
- import { mountSurfaceChart3D } from './chunk-RLK72AOU.mjs';
2
- import './chunk-6YXLGMTN.mjs';
1
+ import { mountSurfaceChart3D } from './chunk-4AAFZFGH.mjs';
2
+ import './chunk-JFNMD6TM.mjs';
3
3
  import './chunk-XGB3TDIC.mjs';
4
4
  import { useRef, useEffect } from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -11795,6 +11795,19 @@ var PptxColorTransformCodec = class {
11795
11795
  return Math.min(255, Math.max(0, Math.round(value)));
11796
11796
  }
11797
11797
  };
11798
+ var OOXML_TO_CSS_OFFSET_DEG = 90;
11799
+ function normalizeDegrees(deg) {
11800
+ if (!Number.isFinite(deg)) {
11801
+ return 0;
11802
+ }
11803
+ return (deg % 360 + 360) % 360;
11804
+ }
11805
+ function ooxmlGradientAngleToCssDegrees(angleDegrees) {
11806
+ return normalizeDegrees(angleDegrees + OOXML_TO_CSS_OFFSET_DEG);
11807
+ }
11808
+ function cssDegreesToOoxmlGradientAngle(cssDegrees) {
11809
+ return normalizeDegrees(cssDegrees - OOXML_TO_CSS_OFFSET_DEG);
11810
+ }
11798
11811
  var ATTRIBUTE_PREFIX = "@_";
11799
11812
  function drawingChild(node, requestedName) {
11800
11813
  if (!node) {
@@ -11814,6 +11827,20 @@ function drawingChild(node, requestedName) {
11814
11827
  }
11815
11828
  return void 0;
11816
11829
  }
11830
+ function hasDrawingChild(node, requestedName) {
11831
+ if (!node) {
11832
+ return false;
11833
+ }
11834
+ for (const key of Object.keys(node)) {
11835
+ if (key.startsWith(ATTRIBUTE_PREFIX) || key === "#text") {
11836
+ continue;
11837
+ }
11838
+ if (key.split(":").at(-1) === requestedName) {
11839
+ return true;
11840
+ }
11841
+ }
11842
+ return false;
11843
+ }
11817
11844
  function drawingChildren(node, requestedName) {
11818
11845
  if (!node) {
11819
11846
  return [];
@@ -12075,7 +12102,7 @@ var PptxGradientStyleCodec = class {
12075
12102
  }
12076
12103
  return `radial-gradient(circle at ${posX} ${posY}, ${stopStr})`;
12077
12104
  }
12078
- return `linear-gradient(${angle.toFixed(2)}deg, ${stopTokens.join(", ")})`;
12105
+ return `linear-gradient(${ooxmlGradientAngleToCssDegrees(angle).toFixed(2)}deg, ${stopTokens.join(", ")})`;
12079
12106
  }
12080
12107
  extractGradientFillCss(gradFill) {
12081
12108
  const stops = this.extractGradientStops(gradFill);
@@ -13924,24 +13951,11 @@ function applyShape3dStyle(shapeProps, style, context) {
13924
13951
  bevelBottomHeight: bevelBottom !== void 0 && bevelBottom["@_h"] !== void 0 ? parseInt(String(bevelBottom["@_h"]), 10) : void 0
13925
13952
  };
13926
13953
  }
13927
- function applyLineProperties(lineNode, shapeProps, style, context, resolveHiddenLine) {
13928
- if (lineNode["a:noFill"]) {
13929
- const hiddenLineProps = resolveHiddenLine(shapeProps);
13930
- if (hiddenLineProps) {
13931
- if (hiddenLineProps["@_w"]) {
13932
- style.strokeWidth = parseInt(String(hiddenLineProps["@_w"]), 10) / context.emuPerPx;
13933
- }
13934
- const hiddenLineFill = hiddenLineProps["a:solidFill"];
13935
- if (hiddenLineFill) {
13936
- style.strokeFillMode = "solid";
13937
- style.strokeColor = context.parseColor(hiddenLineFill);
13938
- style.strokeOpacity = context.extractColorOpacity(hiddenLineFill);
13939
- }
13940
- } else {
13941
- style.strokeFillMode = "none";
13942
- style.strokeWidth = 0;
13943
- style.strokeColor = "transparent";
13944
- }
13954
+ function applyLineProperties(lineNode, style, context) {
13955
+ if (hasDrawingChild(lineNode, "noFill")) {
13956
+ style.strokeFillMode = "none";
13957
+ style.strokeWidth = 0;
13958
+ style.strokeColor = "transparent";
13945
13959
  return true;
13946
13960
  }
13947
13961
  if (lineNode["@_w"]) {
@@ -14078,7 +14092,7 @@ var PptxShapeStyleExtractor = class {
14078
14092
  const solidFill2 = drawingChild(shapeProps, "solidFill");
14079
14093
  const gradFill = drawingChild(shapeProps, "gradFill");
14080
14094
  const pattFill = drawingChild(shapeProps, "pattFill");
14081
- const noFill = drawingChild(shapeProps, "noFill");
14095
+ const noFill = hasDrawingChild(shapeProps, "noFill");
14082
14096
  const blipFill = drawingChild(shapeProps, "blipFill");
14083
14097
  if (solidFill2) {
14084
14098
  style.fillMode = "solid";
@@ -14138,32 +14152,9 @@ var PptxShapeStyleExtractor = class {
14138
14152
  style.fillPatternBgClrXml = bgClrNode;
14139
14153
  }
14140
14154
  } else if (noFill) {
14141
- const hiddenFillProps = this.extractHiddenFillFromExtLst(shapeProps);
14142
- if (hiddenFillProps) {
14143
- const hiddenSolid = hiddenFillProps["a:solidFill"];
14144
- const hiddenGrad = hiddenFillProps["a:gradFill"];
14145
- if (hiddenSolid) {
14146
- style.fillMode = "solid";
14147
- style.fillColor = this.context.parseColor(hiddenSolid);
14148
- style.fillOpacity = this.context.extractColorOpacity(hiddenSolid);
14149
- } else if (hiddenGrad) {
14150
- style.fillMode = "gradient";
14151
- style.fillColor = this.context.extractGradientFillColor(hiddenGrad);
14152
- style.fillOpacity = this.context.extractGradientOpacity(hiddenGrad);
14153
- style.fillGradient = this.context.extractGradientFillCss(hiddenGrad);
14154
- style.fillGradientStops = this.context.extractGradientStops(hiddenGrad);
14155
- style.fillGradientAngle = this.context.extractGradientAngle(hiddenGrad);
14156
- style.fillGradientType = this.context.extractGradientType(hiddenGrad);
14157
- } else {
14158
- style.fillMode = "none";
14159
- style.fillColor = "transparent";
14160
- style.fillOpacity = 0;
14161
- }
14162
- } else {
14163
- style.fillMode = "none";
14164
- style.fillColor = "transparent";
14165
- style.fillOpacity = 0;
14166
- }
14155
+ style.fillMode = "none";
14156
+ style.fillColor = "transparent";
14157
+ style.fillOpacity = 0;
14167
14158
  } else if (blipFill) {
14168
14159
  style.fillMode = "image";
14169
14160
  style.fillColor = "transparent";
@@ -14175,13 +14166,7 @@ var PptxShapeStyleExtractor = class {
14175
14166
  }
14176
14167
  const lineNode = shapeProps["a:ln"];
14177
14168
  if (lineNode) {
14178
- const earlyReturn = applyLineProperties(
14179
- lineNode,
14180
- shapeProps,
14181
- style,
14182
- this.context,
14183
- (props) => this.extractHiddenLineFromExtLst(props)
14184
- );
14169
+ const earlyReturn = applyLineProperties(lineNode, style, this.context);
14185
14170
  if (earlyReturn) {
14186
14171
  return style;
14187
14172
  }
@@ -14237,50 +14222,6 @@ var PptxShapeStyleExtractor = class {
14237
14222
  }
14238
14223
  return void 0;
14239
14224
  }
14240
- /**
14241
- * Extract p14:hiddenFill from the shape properties extension list.
14242
- * URI: {AF507438-7753-43E0-B8FC-AC1667EBCBE1}
14243
- *
14244
- * The p14:hiddenFill element wraps a standard fill child (a:solidFill,
14245
- * a:gradFill, etc.) that should be applied when the main fill is absent.
14246
- */
14247
- extractHiddenFillFromExtLst(shapeProps) {
14248
- const extLst = shapeProps["a:extLst"];
14249
- if (!extLst) {
14250
- return void 0;
14251
- }
14252
- const exts = this.context.ensureArray(extLst["a:ext"]);
14253
- for (const ext of exts) {
14254
- const extObj = ext;
14255
- const uri = String(extObj?.["@_uri"] || "");
14256
- if (uri === "{AF507438-7753-43E0-B8FC-AC1667EBCBE1}") {
14257
- return extObj["a14:hiddenFill"] ?? extObj["p14:hiddenFill"];
14258
- }
14259
- }
14260
- return void 0;
14261
- }
14262
- /**
14263
- * Extract p14:hiddenLine from the shape properties extension list.
14264
- * URI: {91240B29-F687-4F45-9708-019B960494DF}
14265
- *
14266
- * The p14:hiddenLine element wraps a standard a:ln-like structure
14267
- * that should be applied when the main line is absent.
14268
- */
14269
- extractHiddenLineFromExtLst(shapeProps) {
14270
- const extLst = shapeProps["a:extLst"];
14271
- if (!extLst) {
14272
- return void 0;
14273
- }
14274
- const exts = this.context.ensureArray(extLst["a:ext"]);
14275
- for (const ext of exts) {
14276
- const extObj = ext;
14277
- const uri = String(extObj?.["@_uri"] || "");
14278
- if (uri === "{91240B29-F687-4F45-9708-019B960494DF}") {
14279
- return extObj["a14:hiddenLine"] ?? extObj["p14:hiddenLine"];
14280
- }
14281
- }
14282
- return void 0;
14283
- }
14284
14225
  };
14285
14226
  function applyCell3DStyle(cellProperties, style, context) {
14286
14227
  if (!cellProperties) {
@@ -45975,7 +45916,7 @@ function buildSimpleGradientCss(stops, type, angle) {
45975
45916
  if (type === "radial") {
45976
45917
  return `radial-gradient(circle, ${stopStrs})`;
45977
45918
  }
45978
- return `linear-gradient(${angle}deg, ${stopStrs})`;
45919
+ return `linear-gradient(${ooxmlGradientAngleToCssDegrees(angle)}deg, ${stopStrs})`;
45979
45920
  }
45980
45921
  function remapTextStyleColors(style, remap) {
45981
45922
  if (!style) {
@@ -55689,7 +55630,7 @@ var PptxHandlerRuntime4 = class extends PptxHandlerRuntime3 {
55689
55630
  });
55690
55631
  const angle = gradFill["a:lin"] ? parseInt(String(gradFill["a:lin"]["@_ang"] || "0")) / 6e4 : 0;
55691
55632
  const gradType = gradFill["a:path"] ? "radial" : "linear";
55692
- result.textFillGradient = `linear-gradient(${angle}deg, ${cssStops.join(", ")})`;
55633
+ result.textFillGradient = `linear-gradient(${ooxmlGradientAngleToCssDegrees(angle)}deg, ${cssStops.join(", ")})`;
55693
55634
  const structuredStops = [];
55694
55635
  for (const gs of stops) {
55695
55636
  const gsObj = gs;
@@ -57773,6 +57714,14 @@ var PptxHandlerRuntime12 = class _PptxHandlerRuntime2 extends PptxHandlerRuntime
57773
57714
  }
57774
57715
  };
57775
57716
  var PptxHandlerRuntime13 = class extends PptxHandlerRuntime12 {
57717
+ isRenderedBulletMarker(segment) {
57718
+ const bullet = segment.bulletInfo;
57719
+ if (!bullet) {
57720
+ return false;
57721
+ }
57722
+ const marker = bullet.char ? `${bullet.char} ` : bullet.imageRelId || bullet.imageDataUrl ? "\u{1F4CE} " : bullet.autoNumType ? void 0 : "\u2022 ";
57723
+ return marker ? segment.text === marker : bullet.paragraphIndex !== void 0;
57724
+ }
57776
57725
  createParagraphsFromTextContent(text2, textStyle, textSegments, resolveHyperlinkRelationshipId) {
57777
57726
  const createParagraph = (runs, bulletInfo, level, endParaRunProperties, paragraphProperties2) => {
57778
57727
  const effectiveStyle = paragraphProperties2 ? { ...textStyle, ...paragraphProperties2 } : textStyle;
@@ -57792,9 +57741,10 @@ var PptxHandlerRuntime13 = class extends PptxHandlerRuntime12 {
57792
57741
  );
57793
57742
  return assembleParagraphXml(runs, paragraphProps, endParaRunProperties);
57794
57743
  };
57744
+ const createTextNode = (value) => /^[\t\n\r ]|[\t\n\r ]$/.test(value) ? { "@_xml:space": "preserve", "#text": value } : value;
57795
57745
  const createRun = (runText, style) => ({
57796
57746
  "a:rPr": this.createRunPropertiesFromTextStyle(style, resolveHyperlinkRelationshipId),
57797
- "a:t": runText
57747
+ "a:t": createTextNode(runText)
57798
57748
  });
57799
57749
  const createFieldRun = (runText, style, fieldType, fieldGuid, fieldGuidAttr, fieldParagraphPropertiesXml) => {
57800
57750
  const fld = { "@_type": fieldType };
@@ -57809,7 +57759,7 @@ var PptxHandlerRuntime13 = class extends PptxHandlerRuntime12 {
57809
57759
  if (fieldParagraphPropertiesXml && typeof fieldParagraphPropertiesXml === "object") {
57810
57760
  fld["a:pPr"] = fieldParagraphPropertiesXml;
57811
57761
  }
57812
- fld["a:t"] = runText;
57762
+ fld["a:t"] = createTextNode(runText);
57813
57763
  return fld;
57814
57764
  };
57815
57765
  const createRubyRun = (segment, style) => {
@@ -57826,7 +57776,7 @@ var PptxHandlerRuntime13 = class extends PptxHandlerRuntime12 {
57826
57776
  );
57827
57777
  const rtRun = {
57828
57778
  "a:rPr": rtRunProps,
57829
- "a:t": segment.rubyText ?? ""
57779
+ "a:t": createTextNode(segment.rubyText ?? "")
57830
57780
  };
57831
57781
  const baseRunProps = this.createRunPropertiesFromTextStyle(
57832
57782
  style,
@@ -57834,7 +57784,7 @@ var PptxHandlerRuntime13 = class extends PptxHandlerRuntime12 {
57834
57784
  );
57835
57785
  const baseRun = {
57836
57786
  "a:rPr": baseRunProps,
57837
- "a:t": segment.text
57787
+ "a:t": createTextNode(segment.text)
57838
57788
  };
57839
57789
  return {
57840
57790
  "a:rPr": this.createRunPropertiesFromTextStyle(style, resolveHyperlinkRelationshipId),
@@ -57895,6 +57845,9 @@ var PptxHandlerRuntime13 = class extends PptxHandlerRuntime12 {
57895
57845
  }
57896
57846
  capturedParagraphMeta = true;
57897
57847
  }
57848
+ if (this.isRenderedBulletMarker(segment)) {
57849
+ return;
57850
+ }
57898
57851
  if (segment.isLineBreak) {
57899
57852
  const brNode = {};
57900
57853
  if (segment.breakRunProperties && typeof segment.breakRunProperties === "object") {
@@ -58806,12 +58759,15 @@ var PptxHandlerRuntime17 = class extends PptxHandlerRuntime16 {
58806
58759
  /**
58807
58760
  * Whether a segment carries run-level content that the flat `el.text` string
58808
58761
  * cannot represent: an OOXML field (`a:fld`), an inline equation, or a ruby
58809
- * (phonetic) annotation. Such segments must survive a save: collapsing them
58810
- * to the plain-text path silently downgrades a field to static text (e.g. a
58811
- * slide-number field becomes a frozen number) or drops the equation/ruby.
58762
+ * (phonetic) annotation, or paragraph bullet metadata. Such segments must
58763
+ * survive a save: collapsing them to the plain-text path silently downgrades
58764
+ * a field to static text (e.g. a slide-number field becomes a frozen number)
58765
+ * or drops the equation, ruby, or bullet.
58812
58766
  */
58813
58767
  isStructuralTextSegment(segment) {
58814
- return Boolean(segment.fieldType || segment.equationXml || segment.rubyText);
58768
+ return Boolean(
58769
+ segment.fieldType || segment.equationXml || segment.rubyText || segment.bulletInfo
58770
+ );
58815
58771
  }
58816
58772
  areTextSegmentsUniform(textSegments) {
58817
58773
  if (!textSegments || textSegments.length === 0) {
@@ -70830,14 +70786,14 @@ var PptxHandlerRuntime63 = class extends PptxHandlerRuntime62 {
70830
70786
  return;
70831
70787
  }
70832
70788
  }
70833
- const runText = typeof r["a:t"] === "string" ? r["a:t"] : r["a:t"] !== void 0 ? String(r["a:t"]) : "";
70789
+ const runText = xmlText(r["a:t"]) ?? "";
70834
70790
  appendRun(runText, r["a:rPr"]);
70835
70791
  };
70836
70792
  const processField = (field) => {
70837
70793
  if (!field) {
70838
70794
  return;
70839
70795
  }
70840
- const fieldText = typeof field["a:t"] === "string" ? field["a:t"] : field["a:t"] !== void 0 ? String(field["a:t"]) : "";
70796
+ const fieldText = xmlText(field["a:t"]) ?? "";
70841
70797
  const fieldRunStyle = {
70842
70798
  ...mergedDefaultRunStyle,
70843
70799
  ...this.extractTextRunStyle(
@@ -71033,7 +70989,7 @@ var PptxHandlerRuntime63 = class extends PptxHandlerRuntime62 {
71033
70989
  const rtRunObj = rtRun;
71034
70990
  const t = rtRunObj["a:t"];
71035
70991
  if (t !== void 0) {
71036
- rtParts.push(typeof t === "string" ? t : String(t));
70992
+ rtParts.push(xmlText(t) ?? "");
71037
70993
  }
71038
70994
  if (!rubyStyle) {
71039
70995
  rubyStyle = {
@@ -71064,7 +71020,7 @@ var PptxHandlerRuntime63 = class extends PptxHandlerRuntime62 {
71064
71020
  const baseRunObj = baseRun;
71065
71021
  const t = baseRunObj["a:t"];
71066
71022
  if (t !== void 0) {
71067
- baseParts.push(typeof t === "string" ? t : String(t));
71023
+ baseParts.push(xmlText(t) ?? "");
71068
71024
  }
71069
71025
  if (baseParts.length === 1) {
71070
71026
  baseStyle = {
@@ -93636,6 +93592,7 @@ exports.createTemplateConnectorRawXml = createTemplateConnectorRawXml;
93636
93592
  exports.createTemplateShapeRawXml = createTemplateShapeRawXml;
93637
93593
  exports.createTextElement = createTextElement;
93638
93594
  exports.createUniformTextSegments = createUniformTextSegments;
93595
+ exports.cssDegreesToOoxmlGradientAngle = cssDegreesToOoxmlGradientAngle;
93639
93596
  exports.customGeometryPathsToSvgSubpaths = customGeometryPathsToSvgSubpaths;
93640
93597
  exports.dataUrlToMediaBytes = dataUrlToMediaBytes;
93641
93598
  exports.decodeOle10Native = decodeOle10Native;
@@ -93787,6 +93744,7 @@ exports.normalizeStrokeDashType = normalizeStrokeDashType;
93787
93744
  exports.obfuscateFont = obfuscateFont;
93788
93745
  exports.oleBytesToDataUrl = oleBytesToDataUrl;
93789
93746
  exports.ooxmlArcToSvg = ooxmlArcToSvg;
93747
+ exports.ooxmlGradientAngleToCssDegrees = ooxmlGradientAngleToCssDegrees;
93790
93748
  exports.ooxmlToPresetName = ooxmlToPresetName;
93791
93749
  exports.orderedXmlKey = orderedXmlKey;
93792
93750
  exports.parseActiveXControlsFromSlide = parseActiveXControlsFromSlide;
Binary file
Binary file