pptx-react-viewer 4.66.0 → 4.68.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 (102) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +10 -0
  3. package/dist/{AiChatPanel-JKWJQX4N.mjs → AiChatPanel-E7CJSTW7.mjs} +1 -1
  4. package/dist/AiChatPanel-E7CJSTW7.mjs.br +0 -0
  5. package/dist/AiChatPanel-E7CJSTW7.mjs.gz +0 -0
  6. package/dist/{AiChatPanel-DL7EBR2V.js → AiChatPanel-PLQ3NBTK.js} +19 -19
  7. package/dist/AiChatPanel-PLQ3NBTK.js.br +0 -0
  8. package/dist/AiChatPanel-PLQ3NBTK.js.gz +0 -0
  9. package/dist/ai.js +2 -2
  10. package/dist/ai.js.br +0 -0
  11. package/dist/ai.js.gz +0 -0
  12. package/dist/ai.mjs +1 -1
  13. package/dist/ai.mjs.br +0 -0
  14. package/dist/ai.mjs.gz +0 -0
  15. package/dist/{chunk-DORVZDQT.mjs → chunk-BJLJJUP3.mjs} +25 -11
  16. package/dist/chunk-BJLJJUP3.mjs.br +0 -0
  17. package/dist/chunk-BJLJJUP3.mjs.gz +0 -0
  18. package/dist/{chunk-A4K2TM2K.mjs → chunk-FBSPQYRE.mjs} +4 -1
  19. package/dist/chunk-FBSPQYRE.mjs.br +0 -0
  20. package/dist/{chunk-A4K2TM2K.mjs.gz → chunk-FBSPQYRE.mjs.gz} +0 -0
  21. package/dist/{chunk-ZRU67AVX.mjs → chunk-GG4I3L2W.mjs} +165 -135
  22. package/dist/chunk-GG4I3L2W.mjs.br +0 -0
  23. package/dist/chunk-GG4I3L2W.mjs.gz +0 -0
  24. package/dist/{chunk-SLFVXZHA.mjs → chunk-JZE6BORE.mjs} +1 -1
  25. package/dist/chunk-JZE6BORE.mjs.br +0 -0
  26. package/dist/chunk-JZE6BORE.mjs.gz +0 -0
  27. package/dist/{chunk-UC57KUGO.js → chunk-LVEFHZ76.js} +1 -1
  28. package/dist/chunk-LVEFHZ76.js.br +0 -0
  29. package/dist/chunk-LVEFHZ76.js.gz +0 -0
  30. package/dist/{chunk-YQ67KAQR.js → chunk-NRTPKXZX.js} +364 -334
  31. package/dist/chunk-NRTPKXZX.js.br +0 -0
  32. package/dist/chunk-NRTPKXZX.js.gz +0 -0
  33. package/dist/{chunk-73S5EOD3.js → chunk-P2COO2QO.js} +4 -1
  34. package/dist/chunk-P2COO2QO.js.br +0 -0
  35. package/dist/{chunk-73S5EOD3.js.gz → chunk-P2COO2QO.js.gz} +0 -0
  36. package/dist/{chunk-QLXYEA54.js → chunk-Q5QEVT54.js} +581 -567
  37. package/dist/chunk-Q5QEVT54.js.br +0 -0
  38. package/dist/chunk-Q5QEVT54.js.gz +0 -0
  39. package/dist/i18n/de.cjs +3 -0
  40. package/dist/i18n/de.cjs.br +0 -0
  41. package/dist/i18n/de.cjs.gz +0 -0
  42. package/dist/i18n/de.mjs +3 -0
  43. package/dist/i18n/de.mjs.br +0 -0
  44. package/dist/i18n/de.mjs.gz +0 -0
  45. package/dist/i18n/es.cjs +3 -0
  46. package/dist/i18n/es.cjs.br +0 -0
  47. package/dist/i18n/es.cjs.gz +0 -0
  48. package/dist/i18n/es.mjs +3 -0
  49. package/dist/i18n/es.mjs.br +0 -0
  50. package/dist/i18n/es.mjs.gz +0 -0
  51. package/dist/i18n/fr.cjs +3 -0
  52. package/dist/i18n/fr.cjs.br +0 -0
  53. package/dist/i18n/fr.cjs.gz +0 -0
  54. package/dist/i18n/fr.mjs +3 -0
  55. package/dist/i18n/fr.mjs.br +0 -0
  56. package/dist/i18n/fr.mjs.gz +0 -0
  57. package/dist/i18n/zh-CN.cjs +3 -0
  58. package/dist/i18n/zh-CN.cjs.br +0 -0
  59. package/dist/i18n/zh-CN.cjs.gz +0 -0
  60. package/dist/i18n/zh-CN.mjs +3 -0
  61. package/dist/i18n/zh-CN.mjs.br +0 -0
  62. package/dist/i18n/zh-CN.mjs.gz +0 -0
  63. package/dist/index.d.ts +4 -1
  64. package/dist/index.js +27 -27
  65. package/dist/index.js.br +0 -0
  66. package/dist/index.js.gz +0 -0
  67. package/dist/index.mjs +4 -4
  68. package/dist/index.mjs.br +0 -0
  69. package/dist/index.mjs.gz +0 -0
  70. package/dist/internals.d.ts +9 -2
  71. package/dist/internals.js +81 -81
  72. package/dist/internals.js.br +0 -0
  73. package/dist/internals.js.gz +0 -0
  74. package/dist/internals.mjs +2 -2
  75. package/dist/internals.mjs.br +0 -0
  76. package/dist/internals.mjs.gz +0 -0
  77. package/dist/viewer/index.d.ts +4 -1
  78. package/dist/viewer/index.js +21 -21
  79. package/dist/viewer/index.js.br +0 -0
  80. package/dist/viewer/index.js.gz +0 -0
  81. package/dist/viewer/index.mjs +4 -4
  82. package/dist/viewer/index.mjs.br +0 -0
  83. package/dist/viewer/index.mjs.gz +0 -0
  84. package/package.json +4 -4
  85. package/dist/AiChatPanel-DL7EBR2V.js.br +0 -0
  86. package/dist/AiChatPanel-DL7EBR2V.js.gz +0 -0
  87. package/dist/AiChatPanel-JKWJQX4N.mjs.br +0 -0
  88. package/dist/AiChatPanel-JKWJQX4N.mjs.gz +0 -0
  89. package/dist/chunk-73S5EOD3.js.br +0 -0
  90. package/dist/chunk-A4K2TM2K.mjs.br +0 -0
  91. package/dist/chunk-DORVZDQT.mjs.br +0 -0
  92. package/dist/chunk-DORVZDQT.mjs.gz +0 -0
  93. package/dist/chunk-QLXYEA54.js.br +0 -0
  94. package/dist/chunk-QLXYEA54.js.gz +0 -0
  95. package/dist/chunk-SLFVXZHA.mjs.br +0 -0
  96. package/dist/chunk-SLFVXZHA.mjs.gz +0 -0
  97. package/dist/chunk-UC57KUGO.js.br +0 -0
  98. package/dist/chunk-UC57KUGO.js.gz +0 -0
  99. package/dist/chunk-YQ67KAQR.js.br +0 -0
  100. package/dist/chunk-YQ67KAQR.js.gz +0 -0
  101. package/dist/chunk-ZRU67AVX.mjs.br +0 -0
  102. package/dist/chunk-ZRU67AVX.mjs.gz +0 -0
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkUC57KUGO_js = require('./chunk-UC57KUGO.js');
4
- var chunkYQ67KAQR_js = require('./chunk-YQ67KAQR.js');
5
- var chunk73S5EOD3_js = require('./chunk-73S5EOD3.js');
3
+ var chunkLVEFHZ76_js = require('./chunk-LVEFHZ76.js');
4
+ var chunkNRTPKXZX_js = require('./chunk-NRTPKXZX.js');
5
+ var chunkP2COO2QO_js = require('./chunk-P2COO2QO.js');
6
6
  var pptx = require('ooxml-ui/pptx');
7
7
  var React108 = require('react');
8
8
  var jsxRuntime = require('react/jsx-runtime');
@@ -49,7 +49,7 @@ function AvatarCircle({
49
49
  avatar,
50
50
  isLocal
51
51
  }) {
52
- const { t } = chunk73S5EOD3_js.useTranslation();
52
+ const { t } = chunkP2COO2QO_js.useTranslation();
53
53
  const initials = getInitials(name);
54
54
  const title = isLocal ? t("pptx.collaboration.youLabel", { name }) : name;
55
55
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -84,7 +84,7 @@ function UserAvatarBar({
84
84
  status,
85
85
  maxVisible = 5
86
86
  }) {
87
- const { t } = chunk73S5EOD3_js.useTranslation();
87
+ const { t } = chunkP2COO2QO_js.useTranslation();
88
88
  if (status === "disconnected" || status === "error") {
89
89
  return null;
90
90
  }
@@ -158,7 +158,7 @@ function CollaborationStatusIndicator({
158
158
  connectedCount,
159
159
  onRetry
160
160
  }) {
161
- const { t } = chunk73S5EOD3_js.useTranslation();
161
+ const { t } = chunkP2COO2QO_js.useTranslation();
162
162
  const style = STATUS_STYLES[status];
163
163
  return /* @__PURE__ */ jsxRuntime.jsxs(
164
164
  "div",
@@ -199,7 +199,7 @@ function FollowModeBar({
199
199
  followedClientId,
200
200
  onFollow
201
201
  }) {
202
- const { t } = chunk73S5EOD3_js.useTranslation();
202
+ const { t } = chunkP2COO2QO_js.useTranslation();
203
203
  if (presences.length === 0) {
204
204
  return null;
205
205
  }
@@ -304,7 +304,7 @@ function SectionContextMenu({
304
304
  onAddSection,
305
305
  onClose
306
306
  }) {
307
- const { t } = chunk73S5EOD3_js.useTranslation();
307
+ const { t } = chunkP2COO2QO_js.useTranslation();
308
308
  React108.useEffect(() => {
309
309
  const onKeyDown = (event) => {
310
310
  if (event.key === "Escape") {
@@ -405,7 +405,7 @@ function SectionHeader({
405
405
  /* @__PURE__ */ jsxRuntime.jsx(
406
406
  lu.LuChevronDown,
407
407
  {
408
- className: chunk73S5EOD3_js.cn(
408
+ className: chunkP2COO2QO_js.cn(
409
409
  "h-3 w-3 flex-shrink-0 transition-transform",
410
410
  isCollapsed ? "-rotate-90" : "rotate-0"
411
411
  )
@@ -480,7 +480,7 @@ function SlideContextMenu({
480
480
  onAddSection,
481
481
  onClose
482
482
  }) {
483
- const { t } = chunk73S5EOD3_js.useTranslation();
483
+ const { t } = chunkP2COO2QO_js.useTranslation();
484
484
  const selected = state.selectedIndexes;
485
485
  const selectedSlides = selected.map((i) => slides[i]).filter((s) => Boolean(s));
486
486
  const entries = pptx.buildSlidePaneContextMenuEntries({
@@ -544,14 +544,14 @@ function SlideThumbnailImpl({
544
544
  }) {
545
545
  const safeCanvasWidth = Math.max(canvasSize.width, 1);
546
546
  const safeCanvasHeight = Math.max(canvasSize.height, 1);
547
- const width = previewWidth ?? chunk73S5EOD3_js.SLIDE_NAV_THUMBNAIL_WIDTH;
547
+ const width = previewWidth ?? chunkP2COO2QO_js.SLIDE_NAV_THUMBNAIL_WIDTH;
548
548
  const scale = width / safeCanvasWidth;
549
549
  const previewHeight = pptx.editorThumbnailHeight(safeCanvasWidth, safeCanvasHeight, width);
550
550
  const previewElements = pptx.buildPreviewElements(slide, templateElements);
551
551
  const slideFieldContext = pptx.deriveSlideFieldContext(fieldContext, slide);
552
- const { t } = chunk73S5EOD3_js.useTranslation();
552
+ const { t } = chunkP2COO2QO_js.useTranslation();
553
553
  const transitionLabel = slide.transition ? (() => {
554
- const opt = chunk73S5EOD3_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
554
+ const opt = chunkP2COO2QO_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
555
555
  return opt ? t(opt.i18nKey) : slide.transition.type;
556
556
  })() : void 0;
557
557
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -577,7 +577,7 @@ function SlideThumbnailImpl({
577
577
  ...pptx.deviceStrokeStageStyle(scale)
578
578
  },
579
579
  children: [
580
- /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.SlideBackgroundImageLayer, { slide }),
580
+ /* @__PURE__ */ jsxRuntime.jsx(chunkNRTPKXZX_js.SlideBackgroundImageLayer, { slide }),
581
581
  slide.transition && slide.transition.type !== "none" && slide.transition.type !== "cut" && /* @__PURE__ */ jsxRuntime.jsx(
582
582
  "div",
583
583
  {
@@ -587,7 +587,7 @@ function SlideThumbnailImpl({
587
587
  }
588
588
  ),
589
589
  previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
590
- chunkYQ67KAQR_js.StaticElementRenderer,
590
+ chunkNRTPKXZX_js.StaticElementRenderer,
591
591
  {
592
592
  element,
593
593
  activeSlide: slide,
@@ -713,7 +713,7 @@ function LazyThumbnailInner({
713
713
  }
714
714
  var LazyThumbnail = /* @__PURE__ */ React108__default.default.memo(LazyThumbnailInner);
715
715
  function declaredSectionFacts(groups, sectionId) {
716
- const declared = groups.filter((group) => group.id !== chunk73S5EOD3_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunk73S5EOD3_js.UNGROUPED_SECTION_ID).map((group) => group.id);
716
+ const declared = groups.filter((group) => group.id !== chunkP2COO2QO_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunkP2COO2QO_js.UNGROUPED_SECTION_ID).map((group) => group.id);
717
717
  return {
718
718
  isDeclared: declared.includes(sectionId),
719
719
  index: declared.indexOf(sectionId),
@@ -770,7 +770,7 @@ function SlideItemInner({
770
770
  onDrop,
771
771
  slideRef
772
772
  }) {
773
- const { t } = chunk73S5EOD3_js.useTranslation();
773
+ const { t } = chunkP2COO2QO_js.useTranslation();
774
774
  const isHidden = Boolean(slide.hidden);
775
775
  const cue = pptx.hiddenSlideCue(slide.hidden, "rail", slideIndex);
776
776
  const handleContextMenu = React108.useCallback(
@@ -798,7 +798,7 @@ function SlideItemInner({
798
798
  "data-pptx-chrome": "slide-row",
799
799
  "aria-describedby": cue.labelId,
800
800
  "data-pptx-slide-hidden": cue.marker,
801
- className: chunk73S5EOD3_js.cn(
801
+ className: chunkP2COO2QO_js.cn(
802
802
  "group relative flex w-full items-center gap-1 cursor-pointer border-0 bg-transparent py-0.5 px-1 text-left transition-all",
803
803
  isActive && "bg-accent/40 before:absolute before:left-0 before:top-1 before:bottom-1 before:w-[3px] before:bg-primary before:rounded-r",
804
804
  isSelected && !isActive && "bg-accent/20 ring-1 ring-inset ring-primary/50",
@@ -820,7 +820,7 @@ function SlideItemInner({
820
820
  /* @__PURE__ */ jsxRuntime.jsx(
821
821
  "span",
822
822
  {
823
- className: chunk73S5EOD3_js.cn(
823
+ className: chunkP2COO2QO_js.cn(
824
824
  "text-[10px] tabular-nums text-right select-none w-full",
825
825
  isActive ? "text-primary font-medium" : "text-muted-foreground"
826
826
  ),
@@ -843,7 +843,7 @@ function SlideItemInner({
843
843
  /* @__PURE__ */ jsxRuntime.jsxs(
844
844
  "div",
845
845
  {
846
- className: chunk73S5EOD3_js.cn(
846
+ className: chunkP2COO2QO_js.cn(
847
847
  "relative shrink-0 overflow-hidden border transition-colors bg-white",
848
848
  isActive ? "border-primary/60" : "border-transparent group-hover:border-border/40"
849
849
  ),
@@ -1041,8 +1041,8 @@ function SlidesPaneSidebar({
1041
1041
  fieldContext,
1042
1042
  tableStyleContext
1043
1043
  }) {
1044
- const { t } = chunk73S5EOD3_js.useTranslation();
1045
- const collab = chunkYQ67KAQR_js.useCollaboration();
1044
+ const { t } = chunkP2COO2QO_js.useTranslation();
1045
+ const collab = chunkNRTPKXZX_js.useCollaboration();
1046
1046
  const slideRefs = React108.useRef(/* @__PURE__ */ new Map());
1047
1047
  const renameInputRef = React108.useRef(null);
1048
1048
  const slidePresenceMap = React108.useMemo(() => {
@@ -1067,7 +1067,7 @@ function SlidesPaneSidebar({
1067
1067
  () => estimateSlideItemHeight(canvasSize.width, canvasSize.height, previewWidth),
1068
1068
  [canvasSize.width, canvasSize.height, previewWidth]
1069
1069
  );
1070
- const showSectionHeaders = sectionGroups.some((group) => group.id !== chunk73S5EOD3_js.DEFAULT_SECTION_GROUP_ID);
1070
+ const showSectionHeaders = sectionGroups.some((group) => group.id !== chunkP2COO2QO_js.DEFAULT_SECTION_GROUP_ID);
1071
1071
  const {
1072
1072
  collapsedSections,
1073
1073
  renamingSectionId,
@@ -1137,7 +1137,7 @@ function SlidesPaneSidebar({
1137
1137
  [sectionGroups, showSectionHeaders, effectiveCollapsed]
1138
1138
  );
1139
1139
  const shouldVirtualize = slides.length >= VIRTUALIZATION_THRESHOLD;
1140
- const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunkYQ67KAQR_js.useVirtualizedSlides({
1140
+ const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunkNRTPKXZX_js.useVirtualizedSlides({
1141
1141
  totalItems: shouldVirtualize ? flatItems.length : 0,
1142
1142
  itemHeight: estimatedItemHeight
1143
1143
  });
@@ -1421,7 +1421,7 @@ function SlideTemplatePreview({
1421
1421
  transformOrigin: "top left"
1422
1422
  },
1423
1423
  children: previewSlide.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
1424
- chunkYQ67KAQR_js.StaticElementRenderer,
1424
+ chunkNRTPKXZX_js.StaticElementRenderer,
1425
1425
  {
1426
1426
  element,
1427
1427
  activeSlide: previewSlide,
@@ -1489,8 +1489,8 @@ function SlideTemplateGalleryDialog({
1489
1489
  onInsert,
1490
1490
  scheme
1491
1491
  }) {
1492
- const { t } = chunk73S5EOD3_js.useTranslation();
1493
- const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(onClose);
1492
+ const { t } = chunkP2COO2QO_js.useTranslation();
1493
+ const { panelStyle, handlers: dragHandlers } = chunkNRTPKXZX_js.useModalDismissDrag(onClose);
1494
1494
  const [selected, setSelected] = React108.useState(null);
1495
1495
  const dialogRef = React108.useRef(null);
1496
1496
  useModalFocus(isOpen, dialogRef, onClose);
@@ -1575,7 +1575,7 @@ function SlideTemplateGalleryDialog({
1575
1575
  onInsert(spec.id);
1576
1576
  onClose();
1577
1577
  },
1578
- className: chunk73S5EOD3_js.cn(
1578
+ className: chunkP2COO2QO_js.cn(
1579
1579
  "flex flex-col items-center gap-1 p-2 rounded border transition-colors",
1580
1580
  selected === spec.id ? "border-primary bg-primary/20" : "border-border hover:border-border hover:bg-muted/50"
1581
1581
  ),
@@ -1785,7 +1785,7 @@ function nowLocalInputValue() {
1785
1785
  return `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}T${pad(now.getHours())}:${pad(now.getMinutes())}`;
1786
1786
  }
1787
1787
  function DateTimeFieldDialog(p) {
1788
- const { t } = chunk73S5EOD3_js.useTranslation();
1788
+ const { t } = chunkP2COO2QO_js.useTranslation();
1789
1789
  const [datePickerValue, setDatePickerValue] = React108.useState(nowLocalInputValue);
1790
1790
  const [dateFormat, setDateFormat] = React108.useState("locale");
1791
1791
  const confirmDatePicker = React108.useCallback(() => {
@@ -1891,7 +1891,7 @@ function useViewerCustomizationContext() {
1891
1891
  return React108.useContext(ViewerCustomizationContext);
1892
1892
  }
1893
1893
  function InsertSection(p) {
1894
- const { t } = chunk73S5EOD3_js.useTranslation();
1894
+ const { t } = chunkP2COO2QO_js.useTranslation();
1895
1895
  const customization = useViewerCustomizationContext();
1896
1896
  const ref = React108.useRef(null);
1897
1897
  const [datePickerOpen, setDatePickerOpen] = React108.useState(false);
@@ -2040,8 +2040,8 @@ function MobileSheet({
2040
2040
  headerRight
2041
2041
  }) {
2042
2042
  const sheetRef = React108.useRef(null);
2043
- const { t } = chunk73S5EOD3_js.useTranslation();
2044
- const { dragY, dragging, handlers } = chunkYQ67KAQR_js.useSheetDismissDrag(onClose);
2043
+ const { t } = chunkP2COO2QO_js.useTranslation();
2044
+ const { dragY, dragging, handlers } = chunkNRTPKXZX_js.useSheetDismissDrag(onClose);
2045
2045
  useModalFocus(open, sheetRef, onClose);
2046
2046
  if (!open) {
2047
2047
  return null;
@@ -2065,7 +2065,7 @@ function MobileSheet({
2065
2065
  "aria-modal": "true",
2066
2066
  "aria-label": typeof title === "string" ? title : t("pptx.mobileSheet.ariaLabel"),
2067
2067
  tabIndex: -1,
2068
- className: chunk73S5EOD3_js.cn(
2068
+ className: chunkP2COO2QO_js.cn(
2069
2069
  "relative bg-background border-t border-border rounded-t-2xl shadow-2xl flex flex-col overflow-hidden",
2070
2070
  "animate-in slide-in-from-bottom duration-200",
2071
2071
  className
@@ -2112,7 +2112,7 @@ function MobileSheet({
2112
2112
  ] });
2113
2113
  }
2114
2114
  function MobileInsertSheet(p) {
2115
- const { t } = chunk73S5EOD3_js.useTranslation();
2115
+ const { t } = chunkP2COO2QO_js.useTranslation();
2116
2116
  const close = () => p.onCloseMobileInsert?.();
2117
2117
  const customization = useViewerCustomizationContext();
2118
2118
  const [dateOpen, setDateOpen] = React108.useState(false);
@@ -2188,7 +2188,7 @@ function MobileInsertSheet(p) {
2188
2188
  ] });
2189
2189
  }
2190
2190
  function AnimationsSection(p) {
2191
- const { t } = chunk73S5EOD3_js.useTranslation();
2191
+ const { t } = chunkP2COO2QO_js.useTranslation();
2192
2192
  const ref = React108.useRef(null);
2193
2193
  const [previewActive, setPreviewActive] = React108.useState(false);
2194
2194
  const timer = React108.useRef(void 0);
@@ -2269,7 +2269,7 @@ function WebHomeControls({
2269
2269
  onPopup,
2270
2270
  layoutArtwork
2271
2271
  }) {
2272
- const { t } = chunk73S5EOD3_js.useTranslation();
2272
+ const { t } = chunkP2COO2QO_js.useTranslation();
2273
2273
  const ref = React108.useRef(null);
2274
2274
  React108.useEffect(() => {
2275
2275
  if (ref.current) {
@@ -2310,7 +2310,7 @@ function WebHomeControls({
2310
2310
  function ShapeArrangeExtras(p) {
2311
2311
  const commands = useShapeFormatContext();
2312
2312
  const crop = commands?.crop;
2313
- const { isHidden } = chunkYQ67KAQR_js.useToolbarVisibility(p.hiddenActions);
2313
+ const { isHidden } = chunkNRTPKXZX_js.useToolbarVisibility(p.hiddenActions);
2314
2314
  const { onGroupElements, onUngroupElement, onUpdateElementStyle } = p;
2315
2315
  const controls = React108.useMemo(
2316
2316
  () => pptx.arrangeShapeHomeControls({
@@ -2361,7 +2361,7 @@ function ShapeArrangeExtras(p) {
2361
2361
  return /* @__PURE__ */ jsxRuntime.jsx(WebHomeControls, { family: "arrange-shape", controls, onRequest: request });
2362
2362
  }
2363
2363
  function ArrangeSection(p) {
2364
- const { t } = chunk73S5EOD3_js.useTranslation();
2364
+ const { t } = chunkP2COO2QO_js.useTranslation();
2365
2365
  const {
2366
2366
  onAlignElements,
2367
2367
  onDistributeElements,
@@ -2468,7 +2468,7 @@ function RibbonGallery({
2468
2468
  tagControl = true,
2469
2469
  onCommand
2470
2470
  }) {
2471
- const { t } = chunk73S5EOD3_js.useTranslation();
2471
+ const { t } = chunkP2COO2QO_js.useTranslation();
2472
2472
  const ref = React108.useRef(null);
2473
2473
  const commands = useRibbonGalleryCommands();
2474
2474
  const context = commands?.context;
@@ -2603,7 +2603,7 @@ function WebRibbonToggle({
2603
2603
  );
2604
2604
  }
2605
2605
  function TransitionsSection(p) {
2606
- const { t } = chunk73S5EOD3_js.useTranslation();
2606
+ const { t } = chunkP2COO2QO_js.useTranslation();
2607
2607
  const ref = React108.useRef(null);
2608
2608
  const draft = React108.useMemo(() => pptx.readRibbonTransitionDraft(p.activeSlide), [p.activeSlide]);
2609
2609
  const transition = p.activeSlide?.transition;
@@ -2645,7 +2645,7 @@ function TransitionsSection(p) {
2645
2645
  case "soundPreview": {
2646
2646
  const url = pptx.ribbonTransitionStockSoundUrl(transition);
2647
2647
  if (url) {
2648
- chunkYQ67KAQR_js.playAnimationSound(url);
2648
+ chunkNRTPKXZX_js.playAnimationSound(url);
2649
2649
  }
2650
2650
  break;
2651
2651
  }
@@ -2664,7 +2664,7 @@ function TransitionsSection(p) {
2664
2664
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-ribbon-transitions", { ref });
2665
2665
  }
2666
2666
  function DesignSection(p) {
2667
- const { t } = chunk73S5EOD3_js.useTranslation();
2667
+ const { t } = chunkP2COO2QO_js.useTranslation();
2668
2668
  const actions = {
2669
2669
  "design.themes.browseThemes": p.onToggleThemeGallery,
2670
2670
  "design.themes.editTheme": p.onToggleThemeEditor,
@@ -2727,7 +2727,7 @@ function useRecentColors() {
2727
2727
  return React108.useContext(RecentColorsContext);
2728
2728
  }
2729
2729
  function DrawSection(p) {
2730
- const { t } = chunk73S5EOD3_js.useTranslation();
2730
+ const { t } = chunkP2COO2QO_js.useTranslation();
2731
2731
  const { pushColor, recentColors } = useRecentColors();
2732
2732
  const ref = React108.useRef(null);
2733
2733
  React108.useEffect(() => {
@@ -2825,7 +2825,7 @@ var AccountAuthContext = /* @__PURE__ */ React108.createContext(
2825
2825
  );
2826
2826
  var cardClass = "border border-border bg-card p-6 text-card-foreground";
2827
2827
  function AccountPage() {
2828
- const { t } = chunk73S5EOD3_js.useTranslation();
2828
+ const { t } = chunkP2COO2QO_js.useTranslation();
2829
2829
  const accountAuth = React108.useContext(AccountAuthContext);
2830
2830
  const storage = useViewerStorage();
2831
2831
  const cloud = useViewerCloudFiles();
@@ -2853,7 +2853,7 @@ function AccountPage() {
2853
2853
  refreshUsage();
2854
2854
  setTimeout(() => setCleared(false), 4e3);
2855
2855
  };
2856
- const version = "4.66.0" ;
2856
+ const version = "4.68.0" ;
2857
2857
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
2858
2858
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cardClass, children: [
2859
2859
  /* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -2893,7 +2893,7 @@ function AccountPage() {
2893
2893
  "aria-label": color,
2894
2894
  "aria-pressed": profile.avatarColor === color,
2895
2895
  onClick: () => updateProfile({ avatarColor: color }),
2896
- className: chunk73S5EOD3_js.cn(
2896
+ className: chunkP2COO2QO_js.cn(
2897
2897
  "size-7 rounded-full border-2 transition-transform",
2898
2898
  profile.avatarColor === color ? "border-foreground scale-110" : "border-transparent hover:scale-105"
2899
2899
  ),
@@ -2968,7 +2968,7 @@ function BackstageAction(props) {
2968
2968
  ] });
2969
2969
  }
2970
2970
  function BackstageNewGallery(props) {
2971
- const { t } = chunk73S5EOD3_js.useTranslation();
2971
+ const { t } = chunkP2COO2QO_js.useTranslation();
2972
2972
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2973
2973
  /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "mt-7 text-[17px] font-semibold", children: t("pptx.backstage.newHeading") }),
2974
2974
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-5 grid grid-cols-[repeat(auto-fill,minmax(150px,1fr))] gap-6", children: pptx.BACKSTAGE_TEMPLATES.map((template) => /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2994,7 +2994,7 @@ function BackstageNewGallery(props) {
2994
2994
  ] });
2995
2995
  }
2996
2996
  function BackstageRecentList(props) {
2997
- const { t } = chunk73S5EOD3_js.useTranslation();
2997
+ const { t } = chunkP2COO2QO_js.useTranslation();
2998
2998
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-5 border-t border-border", children: [
2999
2999
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_120px_90px] px-3 py-2 text-[11px] font-semibold text-muted-foreground", children: [
3000
3000
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: t("pptx.backstage.columnName") }),
@@ -3048,7 +3048,7 @@ function BackstageCards({
3048
3048
  props,
3049
3049
  run
3050
3050
  }) {
3051
- const { t } = chunk73S5EOD3_js.useTranslation();
3051
+ const { t } = chunkP2COO2QO_js.useTranslation();
3052
3052
  const handlers = {
3053
3053
  protect: props.onOpenPasswordProtection,
3054
3054
  inspect: props.onOpenDocumentProperties,
@@ -3110,7 +3110,7 @@ function BackstageNavIcon({ page }) {
3110
3110
  return Icon ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-[17px] shrink-0", "aria-hidden": "true" }) : null;
3111
3111
  }
3112
3112
  function FileSection(p) {
3113
- const { t, locale } = chunk73S5EOD3_js.useTranslation();
3113
+ const { t, locale } = chunkP2COO2QO_js.useTranslation();
3114
3114
  const [requestedPage, setRequestedPage] = React108.useState("home");
3115
3115
  const customization = useViewerCustomizationContext();
3116
3116
  const nav = pptx.backstageNavEntries(pptx.BACKSTAGE_NAV, customization);
@@ -3118,7 +3118,7 @@ function FileSection(p) {
3118
3118
  const page = offered(requestedPage) ? requestedPage : offered("home") ? "home" : nav.find((item) => item.id !== "save" && item.id !== "close")?.id ?? "home";
3119
3119
  const [query, setQuery] = React108.useState("");
3120
3120
  const [recent, setRecent] = React108.useState([]);
3121
- const { isHidden } = chunkYQ67KAQR_js.useToolbarVisibility(p.hiddenActions);
3121
+ const { isHidden } = chunkNRTPKXZX_js.useToolbarVisibility(p.hiddenActions);
3122
3122
  const exportHidden = isHidden("export");
3123
3123
  const storage = useViewerStorage();
3124
3124
  const cloud = useViewerCloudFiles();
@@ -3387,7 +3387,7 @@ function RibbonMenu({
3387
3387
  return /* @__PURE__ */ jsxRuntime.jsx(
3388
3388
  "div",
3389
3389
  {
3390
- className: chunk73S5EOD3_js.cn("fixed z-50", className),
3390
+ className: chunkP2COO2QO_js.cn("fixed z-50", className),
3391
3391
  style: pos ? { left: pos.left, top: pos.top } : { visibility: "hidden" },
3392
3392
  children
3393
3393
  }
@@ -3397,7 +3397,7 @@ var THUMB_WIDTH = 128;
3397
3397
  var THUMB_HEIGHT = 72;
3398
3398
  var MAX_PREVIEW_ELEMENTS = 100;
3399
3399
  function LayoutGalleryMenu(p) {
3400
- const { t } = chunk73S5EOD3_js.useTranslation();
3400
+ const { t } = chunkP2COO2QO_js.useTranslation();
3401
3401
  return /* @__PURE__ */ jsxRuntime.jsx(RibbonMenu, { anchorRef: p.anchorRef, className: "flex flex-col w-[620px] pt-1", children: /* @__PURE__ */ jsxRuntime.jsxs(
3402
3402
  "div",
3403
3403
  {
@@ -3413,7 +3413,7 @@ function LayoutGalleryMenu(p) {
3413
3413
  type: "button",
3414
3414
  "aria-current": isCurrent ? "true" : void 0,
3415
3415
  title: isCurrent ? `${layout.name} (${t("pptx.layoutGallery.current")})` : layout.name,
3416
- className: chunk73S5EOD3_js.cn(
3416
+ className: chunkP2COO2QO_js.cn(
3417
3417
  "relative flex min-w-0 flex-col items-center gap-1 rounded border-2 p-1 text-xs text-foreground transition-colors hover:bg-muted",
3418
3418
  isCurrent ? "border-primary bg-primary/10" : "border-transparent"
3419
3419
  ),
@@ -3487,7 +3487,7 @@ function LayoutArtwork({
3487
3487
  backgroundColor
3488
3488
  };
3489
3489
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: (preview?.elements ?? []).slice(0, MAX_PREVIEW_ELEMENTS).map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
3490
- chunkYQ67KAQR_js.StaticElementRenderer,
3490
+ chunkNRTPKXZX_js.StaticElementRenderer,
3491
3491
  {
3492
3492
  element,
3493
3493
  activeSlide: slide,
@@ -3762,7 +3762,7 @@ function WebRibbonSection({
3762
3762
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-ribbon-section", { ref });
3763
3763
  }
3764
3764
  function ReviewSection(p) {
3765
- const { t } = chunk73S5EOD3_js.useTranslation();
3765
+ const { t } = chunkP2COO2QO_js.useTranslation();
3766
3766
  const [activeCommentId, setActiveCommentId] = React108.useState(null);
3767
3767
  React108.useEffect(() => pptx.trackActiveComment(document, setActiveCommentId), []);
3768
3768
  const host = p.commentsHost;
@@ -3822,7 +3822,7 @@ function SlideShowOptions({
3822
3822
  children
3823
3823
  }) {
3824
3824
  const ref = React108.useRef(null);
3825
- const { t } = chunk73S5EOD3_js.useTranslation();
3825
+ const { t } = chunkP2COO2QO_js.useTranslation();
3826
3826
  React108.useLayoutEffect(() => {
3827
3827
  if (!ref.current) {
3828
3828
  return;
@@ -3841,8 +3841,8 @@ function SlideShowOptions({
3841
3841
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-slide-show-options", { ref, children });
3842
3842
  }
3843
3843
  function SubtitleSettingsControl() {
3844
- const { t } = chunk73S5EOD3_js.useTranslation();
3845
- const supplied = React108.useContext(chunkYQ67KAQR_js.ViewerOptionsStoreContext);
3844
+ const { t } = chunkP2COO2QO_js.useTranslation();
3845
+ const supplied = React108.useContext(chunkNRTPKXZX_js.ViewerOptionsStoreContext);
3846
3846
  const fallback = React108.useRef(null);
3847
3847
  if (!supplied) {
3848
3848
  fallback.current ??= pptx.createViewerOptionsStore({ persist: false });
@@ -3875,8 +3875,8 @@ function SubtitleSettingsControl() {
3875
3875
  );
3876
3876
  }
3877
3877
  function SlideShowSection(p) {
3878
- const { t } = chunk73S5EOD3_js.useTranslation();
3879
- const { isHidden } = chunkYQ67KAQR_js.useToolbarVisibility(p.hiddenActions);
3878
+ const { t } = chunkP2COO2QO_js.useTranslation();
3879
+ const { isHidden } = chunkNRTPKXZX_js.useToolbarVisibility(p.hiddenActions);
3880
3880
  const actions = {
3881
3881
  "slideShow.startSlideShow.fromBeginning": p.onPresentFromBeginning ?? (() => p.onSetMode("present")),
3882
3882
  "slideShow.startSlideShow.fromCurrent": p.onPresent,
@@ -4120,7 +4120,7 @@ function FontFormatGroup(p) {
4120
4120
  return /* @__PURE__ */ jsxRuntime.jsx(WebHomeControls, { family: "font", controls, onRequest: request });
4121
4121
  }
4122
4122
  function FontPickerGroup(p) {
4123
- const { t } = chunk73S5EOD3_js.useTranslation();
4123
+ const { t } = chunkP2COO2QO_js.useTranslation();
4124
4124
  const { enabled, fontFamily, fontSize, themeFonts, embeddedFonts, customFonts } = p;
4125
4125
  const { onFamily, onSize } = p;
4126
4126
  const controls = React108.useMemo(
@@ -4143,7 +4143,7 @@ function FontPickerGroup(p) {
4143
4143
  return /* @__PURE__ */ jsxRuntime.jsx(WebHomeControls, { family: "font-picker", controls, onRequest: request });
4144
4144
  }
4145
4145
  function ParagraphGroup(p) {
4146
- const { t } = chunk73S5EOD3_js.useTranslation();
4146
+ const { t } = chunkP2COO2QO_js.useTranslation();
4147
4147
  const { canMut, canFormat, effectiveTs, onUpdateTextStyle, onToggleBullets } = p;
4148
4148
  const commands = useRibbonGalleryCommands();
4149
4149
  const align = pptx.paragraphHomeAlign(effectiveTs?.align);
@@ -4244,7 +4244,7 @@ function useParagraphListKind(element) {
4244
4244
  return React108.useSyncExternalStore(subscribe, read, readServer);
4245
4245
  }
4246
4246
  function TextSection(p) {
4247
- const { t } = chunk73S5EOD3_js.useTranslation();
4247
+ const { t } = chunkP2COO2QO_js.useTranslation();
4248
4248
  const hasSel = Boolean(p.selectedElement);
4249
4249
  const canMut = hasSel && p.canEdit;
4250
4250
  const { fontFamily, fontSize } = extractFontInfo(p.selectedElement, p.themeFonts);
@@ -4320,7 +4320,7 @@ function TextSection(p) {
4320
4320
  ] });
4321
4321
  }
4322
4322
  function ViewSection(p) {
4323
- const { t } = chunk73S5EOD3_js.useTranslation();
4323
+ const { t } = chunkP2COO2QO_js.useTranslation();
4324
4324
  const ref = React108.useRef(null);
4325
4325
  React108.useEffect(() => {
4326
4326
  const host = ref.current;
@@ -4393,10 +4393,10 @@ var MENU_ITEMS = [
4393
4393
  { key: "file", label: "pptx.ribbon.tab.file", icon: lu.LuFile }
4394
4394
  ];
4395
4395
  function MobileMenuSheet(props) {
4396
- const { t } = chunk73S5EOD3_js.useTranslation();
4396
+ const { t } = chunkP2COO2QO_js.useTranslation();
4397
4397
  const { open, onClose } = props;
4398
4398
  const [active, setActive] = React108.useState("home");
4399
- const { isTabVisible } = chunkYQ67KAQR_js.useToolbarVisibility(props.hiddenActions);
4399
+ const { isTabVisible } = chunkNRTPKXZX_js.useToolbarVisibility(props.hiddenActions);
4400
4400
  return /* @__PURE__ */ jsxRuntime.jsx(
4401
4401
  MobileSheet,
4402
4402
  {
@@ -4410,7 +4410,7 @@ function MobileMenuSheet(props) {
4410
4410
  {
4411
4411
  type: "button",
4412
4412
  onClick: () => setActive(active === key ? null : key),
4413
- className: chunk73S5EOD3_js.cn(
4413
+ className: chunkP2COO2QO_js.cn(
4414
4414
  "inline-flex items-center gap-1.5 shrink-0 px-3 py-2 rounded-full text-[12px] font-medium border transition-colors min-h-[36px]",
4415
4415
  active === key ? "bg-primary text-white border-primary" : "border-border text-muted-foreground hover:text-foreground hover:bg-accent/40"
4416
4416
  ),
@@ -4685,10 +4685,10 @@ function MobileSectionBody({
4685
4685
  }
4686
4686
  }
4687
4687
  function MobileToolbar(props) {
4688
- const { t } = chunk73S5EOD3_js.useTranslation();
4688
+ const { t } = chunkP2COO2QO_js.useTranslation();
4689
4689
  const { mode, canUndo, canRedo, onUndo, onRedo, onSetMode, onSaveAsPptx } = props;
4690
4690
  const [menuOpen, setMenuOpen] = React108.useState(false);
4691
- const { isHidden } = chunkYQ67KAQR_js.useToolbarVisibility(props.hiddenActions);
4691
+ const { isHidden } = chunkNRTPKXZX_js.useToolbarVisibility(props.hiddenActions);
4692
4692
  const showEdit = mode === "edit" || mode === "master";
4693
4693
  const hidden = [];
4694
4694
  if (isHidden("undo")) {
@@ -4734,8 +4734,8 @@ function MobileToolbar(props) {
4734
4734
  ] });
4735
4735
  }
4736
4736
  function ChartSelectionStrip() {
4737
- const { t } = chunk73S5EOD3_js.useTranslation();
4738
- const commands = chunkYQ67KAQR_js.useChartFormatContext();
4737
+ const { t } = chunkP2COO2QO_js.useTranslation();
4738
+ const commands = chunkNRTPKXZX_js.useChartFormatContext();
4739
4739
  const chart = commands?.chart;
4740
4740
  const chartData = chart?.type === "chart" ? chart.chartData : void 0;
4741
4741
  const controls = React108.useMemo(
@@ -4766,7 +4766,7 @@ function PictureSizeStrip({
4766
4766
  hiddenActions
4767
4767
  }) {
4768
4768
  const crop = useShapeFormatContext()?.crop;
4769
- const { isHidden } = chunkYQ67KAQR_js.useToolbarVisibility(hiddenActions);
4769
+ const { isHidden } = chunkNRTPKXZX_js.useToolbarVisibility(hiddenActions);
4770
4770
  const controls = React108.useMemo(
4771
4771
  () => pptx.pictureSizeHomeControls({
4772
4772
  editable: Boolean(crop),
@@ -4783,7 +4783,7 @@ function PictureSizeStrip({
4783
4783
  return /* @__PURE__ */ jsxRuntime.jsx(WebHomeControls, { family: "picture-size", controls, onRequest: request });
4784
4784
  }
4785
4785
  function useTranslateOr() {
4786
- const { t } = chunk73S5EOD3_js.useTranslation();
4786
+ const { t } = chunkP2COO2QO_js.useTranslation();
4787
4787
  return (key, fallback) => pptx.galleryTextLabel(t, key, fallback);
4788
4788
  }
4789
4789
  function ContextualTabSection({
@@ -4806,7 +4806,7 @@ function ContextualTabSection({
4806
4806
  )) });
4807
4807
  }
4808
4808
  function DrawingGroup(p) {
4809
- const { t } = chunk73S5EOD3_js.useTranslation();
4809
+ const { t } = chunkP2COO2QO_js.useTranslation();
4810
4810
  const { recentColors, pushColor } = useRecentColors();
4811
4811
  const themeColors = useThemeColorMap();
4812
4812
  const commands = useRibbonGalleryCommands();
@@ -4892,7 +4892,7 @@ function DrawingGroup(p) {
4892
4892
  ] });
4893
4893
  }
4894
4894
  function EditingSection(p) {
4895
- const { t } = chunk73S5EOD3_js.useTranslation();
4895
+ const { t } = chunkP2COO2QO_js.useTranslation();
4896
4896
  const { onToggleFindReplace, onSelectAll } = p;
4897
4897
  const controls = React108.useMemo(
4898
4898
  () => pptx.editingHomeControls({ selectAll: Boolean(onSelectAll) }),
@@ -4938,8 +4938,8 @@ function RibbonAddInSection({ tab }) {
4938
4938
  var TAB_BASE = "relative px-3.5 py-2 text-[12px] font-medium whitespace-nowrap transition-colors max-md:min-h-[36px] max-md:px-3";
4939
4939
  var TAB_UNDERLINE = "after:absolute after:-bottom-px after:left-0 after:right-0 after:h-[2.5px] after:bg-primary";
4940
4940
  function RibbonTabBar(p) {
4941
- const { t } = chunk73S5EOD3_js.useTranslation();
4942
- const viewerOptions = chunkYQ67KAQR_js.useViewerOptionsContext();
4941
+ const { t } = chunkP2COO2QO_js.useTranslation();
4942
+ const viewerOptions = chunkNRTPKXZX_js.useViewerOptionsContext();
4943
4943
  return /* @__PURE__ */ jsxRuntime.jsxs(
4944
4944
  "div",
4945
4945
  {
@@ -4947,7 +4947,7 @@ function RibbonTabBar(p) {
4947
4947
  "data-pptx-chrome": "ribbon-tabs",
4948
4948
  className: "flex items-center border-b border-border/60 px-1 max-md:overflow-x-auto max-md:scrollbar-none",
4949
4949
  children: [
4950
- chunk73S5EOD3_js.TOOLBAR_SECTIONS.filter((s) => p.isTabVisible(s.id)).map((s) => {
4950
+ chunkP2COO2QO_js.TOOLBAR_SECTIONS.filter((s) => p.isTabVisible(s.id)).map((s) => {
4951
4951
  const selected = p.activeSection === s.id;
4952
4952
  return /* @__PURE__ */ jsxRuntime.jsx(
4953
4953
  "button",
@@ -4957,7 +4957,7 @@ function RibbonTabBar(p) {
4957
4957
  "aria-selected": selected,
4958
4958
  title: pptx.resolveScreenTip(viewerOptions, t(s.labelKey)),
4959
4959
  onClick: () => p.onSelectSection(s.id),
4960
- className: chunk73S5EOD3_js.cn(
4960
+ className: chunkP2COO2QO_js.cn(
4961
4961
  TAB_BASE,
4962
4962
  selected ? s.id === "file" ? "text-white bg-primary/80 rounded-sm" : `text-foreground ${TAB_UNDERLINE}` : s.id === "file" ? "text-primary hover:bg-primary/15 rounded-sm" : "text-muted-foreground hover:text-foreground hover:bg-accent/30"
4963
4963
  ),
@@ -4977,7 +4977,7 @@ function RibbonTabBar(p) {
4977
4977
  ...{ [pptx.RIBBON_ADD_IN_TAB_ATTR]: tab.id },
4978
4978
  title: pptx.resolveScreenTip(viewerOptions, tab.label),
4979
4979
  onClick: () => p.onSelectAddIn?.(tab.id),
4980
- className: chunk73S5EOD3_js.cn(
4980
+ className: chunkP2COO2QO_js.cn(
4981
4981
  TAB_BASE,
4982
4982
  selected ? `text-foreground ${TAB_UNDERLINE}` : "text-muted-foreground hover:text-foreground hover:bg-accent/30"
4983
4983
  ),
@@ -4998,7 +4998,7 @@ function RibbonTabBar(p) {
4998
4998
  ...{ [pptx.RIBBON_CONTEXTUAL_TAB_ATTR]: id },
4999
4999
  title: pptx.resolveScreenTip(viewerOptions, label),
5000
5000
  onClick: () => p.onSelectContextual(id),
5001
- className: chunk73S5EOD3_js.cn(
5001
+ className: chunkP2COO2QO_js.cn(
5002
5002
  TAB_BASE,
5003
5003
  "text-primary",
5004
5004
  selected ? TAB_UNDERLINE : "hover:bg-primary/10"
@@ -5015,10 +5015,10 @@ function RibbonTabBar(p) {
5015
5015
  );
5016
5016
  }
5017
5017
  function TabRowActions(p) {
5018
- const { t } = chunk73S5EOD3_js.useTranslation();
5019
- const collab = chunkYQ67KAQR_js.useCollaboration();
5018
+ const { t } = chunkP2COO2QO_js.useTranslation();
5019
+ const collab = chunkNRTPKXZX_js.useCollaboration();
5020
5020
  const isCollaborating = Boolean(collab && collab.status === "connected");
5021
- const { isHidden } = chunkYQ67KAQR_js.useToolbarVisibility(p.hiddenActions);
5021
+ const { isHidden } = chunkNRTPKXZX_js.useToolbarVisibility(p.hiddenActions);
5022
5022
  const customization = useViewerCustomizationContext();
5023
5023
  const ref = React108.useRef(null);
5024
5024
  const handlers = React108.useRef(p);
@@ -5072,8 +5072,8 @@ function TabRowActions(p) {
5072
5072
  ] });
5073
5073
  }
5074
5074
  function TitleBarElement(p) {
5075
- const { t } = chunk73S5EOD3_js.useTranslation();
5076
- const options = chunkYQ67KAQR_js.useViewerOptionsContext();
5075
+ const { t } = chunkP2COO2QO_js.useTranslation();
5076
+ const options = chunkNRTPKXZX_js.useViewerOptionsContext();
5077
5077
  const customization = useViewerCustomizationContext();
5078
5078
  const ref = React108.useRef(null);
5079
5079
  const stripVisible = options.quickAccess.visible && pptx.isPanelVisible(customization, "quickAccessToolbar");
@@ -5138,7 +5138,7 @@ function CustomShowsControls({
5138
5138
  onDeleteActiveCustomShow,
5139
5139
  onToggleCurrentSlideInActiveShow
5140
5140
  }) {
5141
- const { t } = chunk73S5EOD3_js.useTranslation();
5141
+ const { t } = chunkP2COO2QO_js.useTranslation();
5142
5142
  if (customShows.length > 0) {
5143
5143
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5144
5144
  sep,
@@ -5193,7 +5193,7 @@ function CustomShowsControls({
5193
5193
  {
5194
5194
  type: "button",
5195
5195
  onClick: onToggleCurrentSlideInActiveShow,
5196
- className: chunk73S5EOD3_js.cn(
5196
+ className: chunkP2COO2QO_js.cn(
5197
5197
  "px-2 py-1 rounded text-[11px] transition-colors",
5198
5198
  isCurrentSlideInActiveShow ? "bg-primary text-white" : "bg-muted hover:bg-accent"
5199
5199
  ),
@@ -5232,7 +5232,7 @@ function PresentDropdown({
5232
5232
  onToggleSubtitles,
5233
5233
  showSubtitles
5234
5234
  }) {
5235
- const { t } = chunk73S5EOD3_js.useTranslation();
5235
+ const { t } = chunkP2COO2QO_js.useTranslation();
5236
5236
  const [open, setOpen] = React108.useState(false);
5237
5237
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
5238
5238
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-stretch rounded border border-border bg-muted text-xs overflow-hidden", children: [
@@ -5241,7 +5241,7 @@ function PresentDropdown({
5241
5241
  {
5242
5242
  type: "button",
5243
5243
  onClick: onPresent,
5244
- className: chunk73S5EOD3_js.cn(
5244
+ className: chunkP2COO2QO_js.cn(
5245
5245
  "px-2 py-1 transition-colors",
5246
5246
  isActive ? "bg-primary text-white" : "hover:bg-accent text-foreground"
5247
5247
  ),
@@ -5254,7 +5254,7 @@ function PresentDropdown({
5254
5254
  {
5255
5255
  type: "button",
5256
5256
  onClick: () => setOpen((prev) => !prev),
5257
- className: chunk73S5EOD3_js.cn(
5257
+ className: chunkP2COO2QO_js.cn(
5258
5258
  "inline-flex items-center px-1 transition-colors border-l border-border",
5259
5259
  open ? "bg-primary text-white" : "hover:bg-accent text-foreground"
5260
5260
  ),
@@ -5382,7 +5382,7 @@ function ModeSwitcher({
5382
5382
  onToggleSubtitles,
5383
5383
  showSubtitles
5384
5384
  }) {
5385
- const { t } = chunk73S5EOD3_js.useTranslation();
5385
+ const { t } = chunkP2COO2QO_js.useTranslation();
5386
5386
  if (mode === "master") {
5387
5387
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-1.5", children: [
5388
5388
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center px-2 py-0.5 rounded-sm bg-amber-600/90 text-[10px] text-amber-50", children: t("pptx.mode.masterView") }),
@@ -5420,7 +5420,7 @@ var EXPORT_CARD_OF = {
5420
5420
  copyImg: "copyImage"
5421
5421
  };
5422
5422
  function OverflowMenu(p) {
5423
- const { t } = chunk73S5EOD3_js.useTranslation();
5423
+ const { t } = chunkP2COO2QO_js.useTranslation();
5424
5424
  const customization = useViewerCustomizationContext();
5425
5425
  const offered = (k) => {
5426
5426
  const card = EXPORT_CARD_OF[k];
@@ -5457,7 +5457,7 @@ function OverflowMenu(p) {
5457
5457
  {
5458
5458
  type: "button",
5459
5459
  onClick: () => p.onSetOverflowMenuOpen(!p.isOverflowMenuOpen),
5460
- className: chunk73S5EOD3_js.cn(
5460
+ className: chunkP2COO2QO_js.cn(
5461
5461
  "p-1.5 rounded transition-colors",
5462
5462
  p.isOverflowMenuOpen ? "bg-primary/80 text-white" : "bg-muted hover:bg-accent"
5463
5463
  ),
@@ -5495,7 +5495,7 @@ function OverflowMenu(p) {
5495
5495
  ] });
5496
5496
  }
5497
5497
  function ToolbarPrimaryRow(p) {
5498
- const { t } = chunk73S5EOD3_js.useTranslation();
5498
+ const { t } = chunkP2COO2QO_js.useTranslation();
5499
5499
  const {
5500
5500
  mode,
5501
5501
  canEdit,
@@ -5504,7 +5504,7 @@ function ToolbarPrimaryRow(p) {
5504
5504
  onToggleSidebar,
5505
5505
  onToggleInspector
5506
5506
  } = p;
5507
- const collab = chunkYQ67KAQR_js.useCollaboration();
5507
+ const collab = chunkNRTPKXZX_js.useCollaboration();
5508
5508
  const customization = useViewerCustomizationContext();
5509
5509
  const showSlidesToggle = pptx.isPanelVisible(customization, "slidesPane");
5510
5510
  const showInspectorToggle = pptx.isPanelVisible(customization, "inspector");
@@ -5524,7 +5524,7 @@ function ToolbarPrimaryRow(p) {
5524
5524
  {
5525
5525
  type: "button",
5526
5526
  onClick: onToggleSidebar,
5527
- className: chunk73S5EOD3_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
5527
+ className: chunkP2COO2QO_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
5528
5528
  title: t("pptx.toolbar.toggleSlidesPanel"),
5529
5529
  "aria-label": t("pptx.toolbar.toggleSlidesPanel"),
5530
5530
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelLeft, { className: ic })
@@ -5585,7 +5585,7 @@ function ToolbarPrimaryRow(p) {
5585
5585
  {
5586
5586
  type: "button",
5587
5587
  onClick: onToggleInspector,
5588
- className: chunk73S5EOD3_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
5588
+ className: chunkP2COO2QO_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
5589
5589
  title: t("pptx.toolbar.toggleInspector"),
5590
5590
  "aria-label": t("pptx.toolbar.toggleInspector"),
5591
5591
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelRight, { className: ic })
@@ -5596,7 +5596,7 @@ function ToolbarPrimaryRow(p) {
5596
5596
  {
5597
5597
  type: "button",
5598
5598
  onClick: p.onToggleAiPanel,
5599
- className: chunk73S5EOD3_js.cn(qab, p.isAiPanelOpen ? "text-primary" : "text-muted-foreground"),
5599
+ className: chunkP2COO2QO_js.cn(qab, p.isAiPanelOpen ? "text-primary" : "text-muted-foreground"),
5600
5600
  title: t("pptx.toolbar.toggleAiAssistant"),
5601
5601
  "aria-label": t("pptx.toolbar.toggleAiAssistant"),
5602
5602
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSparkles, { className: ic })
@@ -5607,7 +5607,7 @@ function ToolbarPrimaryRow(p) {
5607
5607
  {
5608
5608
  type: "button",
5609
5609
  onClick: p.onOpenSettings ?? p.onToggleShortcuts,
5610
- className: chunk73S5EOD3_js.cn(qab, "text-muted-foreground"),
5610
+ className: chunkP2COO2QO_js.cn(qab, "text-muted-foreground"),
5611
5611
  title: t("pptx.toolbar.settingsShortcuts"),
5612
5612
  "aria-label": t("pptx.toolbar.settings"),
5613
5613
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSettings, { className: ics })
@@ -5651,7 +5651,7 @@ function useContextualRibbonTab(selectedElement, customization, onFallback) {
5651
5651
  return { visible, active, fellBack, select: setChosen };
5652
5652
  }
5653
5653
  function HelpSection(p) {
5654
- const { t } = chunk73S5EOD3_js.useTranslation();
5654
+ const { t } = chunkP2COO2QO_js.useTranslation();
5655
5655
  const groups = pptx.buildHelpRibbon(t, {
5656
5656
  options: pptx.isDialogAvailable(useViewerCustomizationContext(), "options")
5657
5657
  });
@@ -5671,7 +5671,7 @@ function HelpSection(p) {
5671
5671
  return /* @__PURE__ */ jsxRuntime.jsx(WebRibbonSection, { groups, onCommand: request });
5672
5672
  }
5673
5673
  function RecordSection(props) {
5674
- const { t } = chunk73S5EOD3_js.useTranslation();
5674
+ const { t } = chunkP2COO2QO_js.useTranslation();
5675
5675
  const request = (id) => {
5676
5676
  if (id === "record.record.fromBeginning") {
5677
5677
  props.onRecordFromBeginning();
@@ -5804,9 +5804,9 @@ function ToolbarLateTabs({
5804
5804
  }
5805
5805
  function Toolbar(p) {
5806
5806
  const { mode, isNarrowViewport, isCompactToolbarOpen, toolbarSection, onSetToolbarSection } = p;
5807
- const { t } = chunk73S5EOD3_js.useTranslation();
5808
- const { isTabVisible } = chunkYQ67KAQR_js.useToolbarVisibility(p.hiddenActions);
5809
- const viewerOptions = chunkYQ67KAQR_js.useViewerOptionsContext();
5807
+ const { t } = chunkP2COO2QO_js.useTranslation();
5808
+ const { isTabVisible } = chunkNRTPKXZX_js.useToolbarVisibility(p.hiddenActions);
5809
+ const viewerOptions = chunkNRTPKXZX_js.useViewerOptionsContext();
5810
5810
  const customization = useViewerCustomizationContext();
5811
5811
  const belowInput = React108.useMemo(
5812
5812
  () => ({
@@ -5904,7 +5904,7 @@ function Toolbar(p) {
5904
5904
  {
5905
5905
  type: "button",
5906
5906
  onClick: p.onToggleCompactToolbar,
5907
- className: chunk73S5EOD3_js.cn(
5907
+ className: chunkP2COO2QO_js.cn(
5908
5908
  "px-2 py-1 rounded text-[11px] transition-colors mr-1",
5909
5909
  isCompactToolbarOpen ? "bg-primary/80 text-white" : "text-muted-foreground hover:text-foreground"
5910
5910
  ),
@@ -5930,7 +5930,7 @@ function Toolbar(p) {
5930
5930
  {
5931
5931
  ref: attachOverflow,
5932
5932
  "data-pptx-chrome": "ribbon-content",
5933
- className: chunk73S5EOD3_js.cn(
5933
+ className: chunkP2COO2QO_js.cn(
5934
5934
  // Plain controls stay compact; labelled RibbonGroups opt into stretching.
5935
5935
  // `RibbonGroupScope` wraps controls in a `display: contents` div, so its
5936
5936
  // children are this row's flex items too and must not shrink (a shrunk
@@ -6120,7 +6120,7 @@ function Toolbar(p) {
6120
6120
  );
6121
6121
  }
6122
6122
  function CanvasGuides({ guides, onDeleteGuide, onStartGuideDrag }) {
6123
- const { t } = chunk73S5EOD3_js.useTranslation();
6123
+ const { t } = chunkP2COO2QO_js.useTranslation();
6124
6124
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: guides.map((guide) => /* @__PURE__ */ jsxRuntime.jsx(
6125
6125
  "div",
6126
6126
  {
@@ -6332,7 +6332,7 @@ function ChartQuickActionsOverlay({
6332
6332
  scale: stageScale = 1,
6333
6333
  onUpdateElement
6334
6334
  }) {
6335
- const { t } = chunk73S5EOD3_js.useTranslation();
6335
+ const { t } = chunkP2COO2QO_js.useTranslation();
6336
6336
  const [open, setOpen] = React108.useState(null);
6337
6337
  const hostRef = React108.useRef(null);
6338
6338
  React108.useEffect(() => {
@@ -6503,7 +6503,7 @@ function CommentMarkersOverlay({
6503
6503
  canvasSize,
6504
6504
  onCommentMarkerClick
6505
6505
  }) {
6506
- const { t } = chunk73S5EOD3_js.useTranslation(), half = pptx.COMMENT_MARKER_SIZE / 2, markers = pptx.buildCommentMarkers(
6506
+ const { t } = chunkP2COO2QO_js.useTranslation(), half = pptx.COMMENT_MARKER_SIZE / 2, markers = pptx.buildCommentMarkers(
6507
6507
  comments,
6508
6508
  canvasSize.width,
6509
6509
  canvasSize.height,
@@ -6547,7 +6547,7 @@ function ConnectorEndpointOverlay({
6547
6547
  canvasStageRef,
6548
6548
  onUpdateElement
6549
6549
  }) {
6550
- const { t } = chunk73S5EOD3_js.useTranslation();
6550
+ const { t } = chunkP2COO2QO_js.useTranslation();
6551
6551
  const [drag, setDrag] = React108.useState(null);
6552
6552
  const candidates = React108.useMemo(
6553
6553
  () => pptx.collectConnectorSiteCandidates(elements.filter((el) => el.id !== connector.id)),
@@ -6783,7 +6783,7 @@ function DrawingOverlaySvg({
6783
6783
  onPointerDown,
6784
6784
  onPointerMove,
6785
6785
  onPointerUp,
6786
- children: isStrokeActive && liveStrokeView ? chunkYQ67KAQR_js.renderStrokeView(liveStrokeView, true, void 0, "ink-live-preview") : isStrokeActive && liveStrokeD && /* @__PURE__ */ jsxRuntime.jsx(
6786
+ children: isStrokeActive && liveStrokeView ? chunkNRTPKXZX_js.renderStrokeView(liveStrokeView, true, void 0, "ink-live-preview") : isStrokeActive && liveStrokeD && /* @__PURE__ */ jsxRuntime.jsx(
6787
6787
  "path",
6788
6788
  {
6789
6789
  d: liveStrokeD,
@@ -6798,7 +6798,7 @@ function DrawingOverlaySvg({
6798
6798
  }
6799
6799
  );
6800
6800
  }
6801
- function GridOverlay({ canvasSize, gridSpacingPx = chunk73S5EOD3_js.GRID_SIZE, visible }) {
6801
+ function GridOverlay({ canvasSize, gridSpacingPx = chunkP2COO2QO_js.GRID_SIZE, visible }) {
6802
6802
  const spacing = Math.max(gridSpacingPx, 2);
6803
6803
  const patternId = React108.useMemo(() => `grid-dot-pattern-${Math.random().toString(36).slice(2, 8)}`, []);
6804
6804
  if (!visible) {
@@ -6826,7 +6826,7 @@ function MotionPathOverlay({
6826
6826
  canEdit,
6827
6827
  onChangePath
6828
6828
  }) {
6829
- const { t } = chunk73S5EOD3_js.useTranslation();
6829
+ const { t } = chunkP2COO2QO_js.useTranslation();
6830
6830
  const dragRef = React108.useRef(null);
6831
6831
  const frame = {
6832
6832
  originX: element.x + element.width / 2,
@@ -6940,7 +6940,7 @@ function MotionPathOverlay({
6940
6940
  );
6941
6941
  }
6942
6942
  function EditPointsMenu({ menu, onRun }) {
6943
- const { t } = chunk73S5EOD3_js.useTranslation();
6943
+ const { t } = chunkP2COO2QO_js.useTranslation();
6944
6944
  const stop2 = (event) => event.stopPropagation();
6945
6945
  return /* @__PURE__ */ jsxRuntime.jsx(
6946
6946
  "div",
@@ -6986,7 +6986,7 @@ function EditPointsOverlay({
6986
6986
  onCommit,
6987
6987
  onExit
6988
6988
  }) {
6989
- const { t } = chunk73S5EOD3_js.useTranslation();
6989
+ const { t } = chunkP2COO2QO_js.useTranslation();
6990
6990
  const [, rerender] = React108.useReducer((n) => n + 1, 0);
6991
6991
  const svgRef = React108.useRef(null);
6992
6992
  const latest = React108.useRef({ onCommit, onExit });
@@ -7142,7 +7142,7 @@ function FreeformToolOverlay({
7142
7142
  onCommit,
7143
7143
  onCancel
7144
7144
  }) {
7145
- const { t } = chunk73S5EOD3_js.useTranslation();
7145
+ const { t } = chunkP2COO2QO_js.useTranslation();
7146
7146
  const [, rerender] = React108.useReducer((n) => n + 1, 0);
7147
7147
  const svgRef = React108.useRef(null);
7148
7148
  const latest = React108.useRef({ onCommit, onCancel });
@@ -7285,7 +7285,7 @@ function PictureCropOverlay({
7285
7285
  onUpdate,
7286
7286
  onContextMenu
7287
7287
  }) {
7288
- const { t } = chunk73S5EOD3_js.useTranslation();
7288
+ const { t } = chunkP2COO2QO_js.useTranslation();
7289
7289
  const overlay = pptx.buildCropOverlay(element, scale);
7290
7290
  const dragRef = React108.useRef(null);
7291
7291
  const latest = React108.useRef({ scale, onUpdate });
@@ -7333,7 +7333,7 @@ function PictureCropOverlay({
7333
7333
  };
7334
7334
  };
7335
7335
  const { ghost, frame, handles } = overlay;
7336
- const src = chunkYQ67KAQR_js.imgSrc(element);
7336
+ const src = chunkNRTPKXZX_js.imgSrc(element);
7337
7337
  return /* @__PURE__ */ jsxRuntime.jsxs(
7338
7338
  "div",
7339
7339
  {
@@ -7509,7 +7509,7 @@ function HorizontalRulerView({ ticks, widthPx, highlight }) {
7509
7509
  }
7510
7510
  );
7511
7511
  }
7512
- var HorizontalRuler = /* @__PURE__ */ chunkYQ67KAQR_js.withDisplayName(
7512
+ var HorizontalRuler = /* @__PURE__ */ chunkNRTPKXZX_js.withDisplayName(
7513
7513
  /* @__PURE__ */ React108__default.default.memo(HorizontalRulerView),
7514
7514
  "HorizontalRuler"
7515
7515
  );
@@ -7583,7 +7583,7 @@ function VerticalRulerView({ ticks, heightPx, highlight }) {
7583
7583
  }
7584
7584
  );
7585
7585
  }
7586
- var VerticalRuler = /* @__PURE__ */ chunkYQ67KAQR_js.withDisplayName(
7586
+ var VerticalRuler = /* @__PURE__ */ chunkNRTPKXZX_js.withDisplayName(
7587
7587
  /* @__PURE__ */ React108__default.default.memo(VerticalRulerView),
7588
7588
  "VerticalRuler"
7589
7589
  );
@@ -7750,10 +7750,10 @@ function SelectionHandleOverlay({
7750
7750
  position: "absolute",
7751
7751
  left: element.x,
7752
7752
  top: element.y,
7753
- width: Math.max(element.width, chunk73S5EOD3_js.MIN_ELEMENT_SIZE),
7754
- height: Math.max(element.height, chunk73S5EOD3_js.MIN_ELEMENT_SIZE),
7755
- ["--pptx-selection-width"]: `${Math.max(element.width, chunk73S5EOD3_js.MIN_ELEMENT_SIZE)}px`,
7756
- ["--pptx-selection-height"]: `${Math.max(element.height, chunk73S5EOD3_js.MIN_ELEMENT_SIZE)}px`,
7753
+ width: Math.max(element.width, chunkP2COO2QO_js.MIN_ELEMENT_SIZE),
7754
+ height: Math.max(element.height, chunkP2COO2QO_js.MIN_ELEMENT_SIZE),
7755
+ ["--pptx-selection-width"]: `${Math.max(element.width, chunkP2COO2QO_js.MIN_ELEMENT_SIZE)}px`,
7756
+ ["--pptx-selection-height"]: `${Math.max(element.height, chunkP2COO2QO_js.MIN_ELEMENT_SIZE)}px`,
7757
7757
  // Every slide element carries an explicit numeric `zIndex` (see
7758
7758
  // `getContainerStyle`), so a sibling with no z-index at all paints
7759
7759
  // at the CSS "z-index: 0" level regardless of DOM order: any
@@ -7765,7 +7765,7 @@ function SelectionHandleOverlay({
7765
7765
  // (marquee z-50, connector overlay z-55/56) to match, well clear of
7766
7766
  // any realistic per-slide element count.
7767
7767
  zIndex: 58,
7768
- transform: chunk73S5EOD3_js.getElementTransform(element),
7768
+ transform: chunkP2COO2QO_js.getElementTransform(element),
7769
7769
  transformOrigin: "center",
7770
7770
  // Transparent everywhere a handle button is not, so a click that
7771
7771
  // misses every handle still reaches the shape (or whatever is
@@ -7777,14 +7777,14 @@ function SelectionHandleOverlay({
7777
7777
  onDoubleClick: (e) => onDoubleClick(element.id, e),
7778
7778
  onContextMenu: (e) => onContextMenu(element.id, e),
7779
7779
  children: /* @__PURE__ */ jsxRuntime.jsx(
7780
- chunkYQ67KAQR_js.ResizeHandles,
7780
+ chunkNRTPKXZX_js.ResizeHandles,
7781
7781
  {
7782
7782
  elementId: element.id,
7783
7783
  adjustmentHandles,
7784
7784
  onResizePointerDown,
7785
7785
  onAdjustmentPointerDown,
7786
7786
  rotation: element.rotation,
7787
- nonRotationTransform: chunk73S5EOD3_js.getElementTransformWithoutRotation(element),
7787
+ nonRotationTransform: chunkP2COO2QO_js.getElementTransformWithoutRotation(element),
7788
7788
  onRotate: allow.rotatable ? onRotate : void 0,
7789
7789
  forcePointerEvents: true
7790
7790
  }
@@ -8488,7 +8488,7 @@ function SlideCanvas(props) {
8488
8488
  props.registerInlineEditReader
8489
8489
  ]
8490
8490
  );
8491
- return /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.InlineCollaborationContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(SlideCanvasContent, { ...props }) });
8491
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkNRTPKXZX_js.InlineCollaborationContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(SlideCanvasContent, { ...props }) });
8492
8492
  }
8493
8493
  function SlideCanvasContent({
8494
8494
  imagePaste,
@@ -8761,7 +8761,7 @@ function SlideCanvasContent({
8761
8761
  onPointerMove: handleStagePointerMove,
8762
8762
  onPointerUp: handleStagePointerUp,
8763
8763
  children: [
8764
- /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.SlideBackgroundImageLayer, { slide: activeSlide }),
8764
+ /* @__PURE__ */ jsxRuntime.jsx(chunkNRTPKXZX_js.SlideBackgroundImageLayer, { slide: activeSlide }),
8765
8765
  presentationKeyframesCss && /* @__PURE__ */ jsxRuntime.jsx("style", { children: presentationKeyframesCss }),
8766
8766
  /* @__PURE__ */ jsxRuntime.jsx(GridOverlay, { canvasSize, gridSpacingPx, visible: showGrid }),
8767
8767
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -8773,7 +8773,7 @@ function SlideCanvasContent({
8773
8773
  }
8774
8774
  ),
8775
8775
  templateElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
8776
- chunkYQ67KAQR_js.ElementRenderer,
8776
+ chunkNRTPKXZX_js.ElementRenderer,
8777
8777
  {
8778
8778
  element,
8779
8779
  activeSlide,
@@ -8796,7 +8796,7 @@ function SlideCanvasContent({
8796
8796
  ),
8797
8797
  renderInk: false,
8798
8798
  renderGroups: true,
8799
- adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunk73S5EOD3_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8799
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkP2COO2QO_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8800
8800
  onResizePointerDown: stableResizePointerDown,
8801
8801
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
8802
8802
  onRotate: stableRotate,
@@ -8818,7 +8818,7 @@ function SlideCanvasContent({
8818
8818
  `tpl-${element.id}`
8819
8819
  )),
8820
8820
  activeSlide?.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
8821
- chunkYQ67KAQR_js.ElementRenderer,
8821
+ chunkNRTPKXZX_js.ElementRenderer,
8822
8822
  {
8823
8823
  element,
8824
8824
  activeSlide,
@@ -8841,7 +8841,7 @@ function SlideCanvasContent({
8841
8841
  ),
8842
8842
  renderInk: true,
8843
8843
  renderGroups: true,
8844
- adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunk73S5EOD3_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8844
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkP2COO2QO_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8845
8845
  onResizePointerDown: stableResizePointerDown,
8846
8846
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
8847
8847
  onRotate: stableRotate,
@@ -8885,7 +8885,7 @@ function SlideCanvasContent({
8885
8885
  editingMember && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8886
8886
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: `[data-element-id="${cssAttr(editingMember.parentId)}"] [data-element-id="${cssAttr(editingMember.member.id)}"]{visibility:hidden}` }),
8887
8887
  /* @__PURE__ */ jsxRuntime.jsx(
8888
- chunkYQ67KAQR_js.ElementRenderer,
8888
+ chunkNRTPKXZX_js.ElementRenderer,
8889
8889
  {
8890
8890
  element: editingMember.member,
8891
8891
  activeSlide,
@@ -8920,11 +8920,11 @@ function SlideCanvasContent({
8920
8920
  `group-member-edit-${editingMember.member.id}`
8921
8921
  )
8922
8922
  ] }),
8923
- selectedElement && selectedElement.id !== cropElement?.id && pptx.shouldShowElementHandles(isEditableCanvas, true, selectedElementIdSet.size) && !chunk73S5EOD3_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
8923
+ selectedElement && selectedElement.id !== cropElement?.id && pptx.shouldShowElementHandles(isEditableCanvas, true, selectedElementIdSet.size) && !chunkP2COO2QO_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
8924
8924
  SelectionHandleOverlay,
8925
8925
  {
8926
8926
  element: selectedElement,
8927
- adjustmentHandles: chunk73S5EOD3_js.getShapeAdjustmentHandleDescriptors(selectedElement),
8927
+ adjustmentHandles: chunkP2COO2QO_js.getShapeAdjustmentHandleDescriptors(selectedElement),
8928
8928
  onResizePointerDown: stableResizePointerDown,
8929
8929
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
8930
8930
  onRotate: stableRotate,
@@ -9030,15 +9030,15 @@ function SlideCanvasContent({
9030
9030
  }
9031
9031
  );
9032
9032
  }
9033
- function LoadingState({ className }) {
9034
- const { t } = chunk73S5EOD3_js.useTranslation();
9033
+ function LoadingState({ className, fontProgress }) {
9034
+ const { t } = chunkP2COO2QO_js.useTranslation();
9035
9035
  return /* @__PURE__ */ jsxRuntime.jsx(
9036
9036
  "div",
9037
9037
  {
9038
9038
  role: "status",
9039
9039
  "aria-live": "polite",
9040
9040
  "aria-atomic": "true",
9041
- className: chunk73S5EOD3_js.cn(
9041
+ className: chunkP2COO2QO_js.cn(
9042
9042
  "h-full w-full flex items-center justify-center text-muted-foreground",
9043
9043
  className
9044
9044
  ),
@@ -9050,7 +9050,10 @@ function LoadingState({ className }) {
9050
9050
  "aria-hidden": "true"
9051
9051
  }
9052
9052
  ),
9053
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: t("pptx.viewer.loading") })
9053
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: fontProgress ? t("pptx.viewer.loadingFonts", {
9054
+ loaded: fontProgress.loaded,
9055
+ total: fontProgress.total
9056
+ }) : t("pptx.viewer.loading") })
9054
9057
  ] })
9055
9058
  }
9056
9059
  );
@@ -9061,7 +9064,7 @@ function ErrorState({ className, error }) {
9061
9064
  {
9062
9065
  role: "alert",
9063
9066
  "aria-live": "assertive",
9064
- className: chunk73S5EOD3_js.cn(
9067
+ className: chunkP2COO2QO_js.cn(
9065
9068
  "h-full w-full flex items-center justify-center p-6 text-center text-red-400",
9066
9069
  className
9067
9070
  ),
@@ -9070,7 +9073,7 @@ function ErrorState({ className, error }) {
9070
9073
  );
9071
9074
  }
9072
9075
  function ShortcutPanel({ isOpen, onClose }) {
9073
- const { t } = chunk73S5EOD3_js.useTranslation();
9076
+ const { t } = chunkP2COO2QO_js.useTranslation();
9074
9077
  if (!isOpen) {
9075
9078
  return null;
9076
9079
  }
@@ -9092,7 +9095,7 @@ function ShortcutPanel({ isOpen, onClose }) {
9092
9095
  }
9093
9096
  )
9094
9097
  ] }),
9095
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunk73S5EOD3_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
9098
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunkP2COO2QO_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
9096
9099
  "div",
9097
9100
  {
9098
9101
  className: "flex items-center justify-between gap-3 rounded bg-muted/80 px-2 py-1.5",
@@ -9114,7 +9117,7 @@ function AccessibilityPanel({
9114
9117
  reducedMotion,
9115
9118
  onToggleReducedMotion
9116
9119
  }) {
9117
- const { t } = chunk73S5EOD3_js.useTranslation();
9120
+ const { t } = chunkP2COO2QO_js.useTranslation();
9118
9121
  if (!isOpen) {
9119
9122
  return null;
9120
9123
  }
@@ -9152,14 +9155,14 @@ function AccessibilityPanel({
9152
9155
  "aria-label": t("pptx.accessibility.reduceMotion"),
9153
9156
  "aria-checked": reducedMotion ?? false,
9154
9157
  onClick: onToggleReducedMotion,
9155
- className: chunk73S5EOD3_js.cn(
9158
+ className: chunkP2COO2QO_js.cn(
9156
9159
  "relative inline-flex h-5 w-9 items-center rounded-full transition-colors",
9157
9160
  reducedMotion ? "bg-primary" : "bg-muted-foreground/30"
9158
9161
  ),
9159
9162
  children: /* @__PURE__ */ jsxRuntime.jsx(
9160
9163
  "span",
9161
9164
  {
9162
- className: chunk73S5EOD3_js.cn(
9165
+ className: chunkP2COO2QO_js.cn(
9163
9166
  "inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",
9164
9167
  reducedMotion ? "translate-x-4" : "translate-x-0.5"
9165
9168
  )
@@ -9178,7 +9181,7 @@ function AccessibilityPanel({
9178
9181
  "div",
9179
9182
  {
9180
9183
  role: "listitem",
9181
- className: chunk73S5EOD3_js.cn(
9184
+ className: chunkP2COO2QO_js.cn(
9182
9185
  "flex items-start gap-2 rounded px-2 py-1.5 text-xs",
9183
9186
  /* Severity-based background and text colouring */
9184
9187
  issue.severity === "error" ? "bg-red-900/30 text-red-300" : issue.severity === "warning" ? "bg-amber-900/30 text-amber-300" : "bg-muted/50 text-muted-foreground"
@@ -9206,7 +9209,7 @@ function ExportProgressModal({
9206
9209
  statusMessage,
9207
9210
  onCancel
9208
9211
  }) {
9209
- const { t } = chunk73S5EOD3_js.useTranslation();
9212
+ const { t } = chunkP2COO2QO_js.useTranslation();
9210
9213
  const ref = useWebControl(
9211
9214
  { open: isOpen, title, progress, status: statusMessage, translate: t },
9212
9215
  { "export-cancel": () => onCancel() }
@@ -9214,7 +9217,7 @@ function ExportProgressModal({
9214
9217
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-export-progress", { ref });
9215
9218
  }
9216
9219
  function StatusBar(p) {
9217
- const { t } = chunk73S5EOD3_js.useTranslation();
9220
+ const { t } = chunkP2COO2QO_js.useTranslation();
9218
9221
  const ref = React108.useRef(null);
9219
9222
  React108.useEffect(() => {
9220
9223
  const host = ref.current;
@@ -9227,6 +9230,7 @@ function StatusBar(p) {
9227
9230
  dirty: p.isDirty,
9228
9231
  autosave: p.autosaveStatus,
9229
9232
  saveProgress: p.saveProgress ? pptx.saveProgressStatus(p.saveProgress, t) : void 0,
9233
+ fontProgress: p.fontProgress,
9230
9234
  zoomPercent: p.scale !== void 0 && !p.hideZoomControls ? p.scale * 100 : void 0,
9231
9235
  notesExpanded: p.isNotesExpanded,
9232
9236
  viewMode: pptx.statusBarViewMode(p.mode),
@@ -9295,7 +9299,7 @@ function ResizeHandle({
9295
9299
  {
9296
9300
  role: "separator",
9297
9301
  "aria-orientation": direction,
9298
- className: chunk73S5EOD3_js.cn(
9302
+ className: chunkP2COO2QO_js.cn(
9299
9303
  // Outer container: generous hit area for easy clicking.
9300
9304
  // The visible indicator is rendered via the inner pseudo-element (::after).
9301
9305
  "relative flex-shrink-0 z-20 group",
@@ -9306,7 +9310,7 @@ function ResizeHandle({
9306
9310
  children: /* @__PURE__ */ jsxRuntime.jsx(
9307
9311
  "div",
9308
9312
  {
9309
- className: chunk73S5EOD3_js.cn(
9313
+ className: chunkP2COO2QO_js.cn(
9310
9314
  "absolute transition-colors",
9311
9315
  direction === "horizontal" ? "top-0 bottom-0 left-1/2 -translate-x-1/2 w-0.5 group-hover:w-1 group-hover:bg-primary/40 group-active:w-1 group-active:bg-primary/60" : "left-0 right-0 top-1/2 -translate-y-1/2 h-0.5 group-hover:h-1 group-hover:bg-primary/40 group-active:h-1 group-active:bg-primary/60"
9312
9316
  )
@@ -9395,10 +9399,10 @@ function contextMenuHandlers(props, shapeFormat = null) {
9395
9399
  }
9396
9400
  function ContextMenu(props) {
9397
9401
  const { contextMenuState, mode, onClose } = props;
9398
- const { t } = chunk73S5EOD3_js.useTranslation();
9402
+ const { t } = chunkP2COO2QO_js.useTranslation();
9399
9403
  const customization = useViewerCustomizationContext();
9400
9404
  const shapeFormat = useShapeFormatContext();
9401
- const chartFormat = chunkYQ67KAQR_js.useChartFormatContext();
9405
+ const chartFormat = chunkNRTPKXZX_js.useChartFormatContext();
9402
9406
  const open = Boolean(contextMenuState) && mode === "edit";
9403
9407
  const handlers = {
9404
9408
  ...contextMenuHandlers(props, shapeFormat),
@@ -9474,7 +9478,7 @@ function canvasContextMenuHandlers(props) {
9474
9478
  }
9475
9479
  function CanvasContextMenu(props) {
9476
9480
  const { canvasContextMenuState, mode, onClose } = props;
9477
- const { t } = chunk73S5EOD3_js.useTranslation();
9481
+ const { t } = chunkP2COO2QO_js.useTranslation();
9478
9482
  const customization = useViewerCustomizationContext();
9479
9483
  const open = Boolean(canvasContextMenuState) && mode === "edit";
9480
9484
  const handlers = canvasContextMenuHandlers(props);
@@ -9537,7 +9541,7 @@ function FindReplacePanel({
9537
9541
  onReplaceAll,
9538
9542
  onClose
9539
9543
  }) {
9540
- const { t } = chunk73S5EOD3_js.useTranslation();
9544
+ const { t } = chunkP2COO2QO_js.useTranslation();
9541
9545
  const searchInputRef = React108.useRef(null);
9542
9546
  React108.useEffect(() => {
9543
9547
  searchInputRef.current?.focus();
@@ -9728,7 +9732,7 @@ function HandoutMasterPanel({
9728
9732
  onSlidesPerPageChange,
9729
9733
  onBackgroundChange
9730
9734
  }) {
9731
- const { t } = chunk73S5EOD3_js.useTranslation();
9735
+ const { t } = chunkP2COO2QO_js.useTranslation();
9732
9736
  if (!handoutMaster) {
9733
9737
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-4 text-center text-xs text-muted-foreground", children: t("pptx.master.noHandoutMaster") });
9734
9738
  }
@@ -9740,7 +9744,7 @@ function HandoutMasterPanel({
9740
9744
  {
9741
9745
  type: "button",
9742
9746
  "aria-pressed": slidesPerPage === count,
9743
- className: chunk73S5EOD3_js.cn(
9747
+ className: chunkP2COO2QO_js.cn(
9744
9748
  "px-2 py-1.5 rounded text-[11px] font-medium transition-colors",
9745
9749
  slidesPerPage === count ? "bg-primary text-white" : "bg-accent/50 text-muted-foreground hover:bg-accent/70 hover:text-foreground"
9746
9750
  ),
@@ -9783,7 +9787,7 @@ function NotesMasterPanel({
9783
9787
  notesMaster,
9784
9788
  onBackgroundChange
9785
9789
  }) {
9786
- const { t } = chunk73S5EOD3_js.useTranslation();
9790
+ const { t } = chunkP2COO2QO_js.useTranslation();
9787
9791
  const placeholderLabels = React108.useMemo(() => {
9788
9792
  if (!notesMaster?.placeholders) {
9789
9793
  return [];
@@ -9845,7 +9849,7 @@ function SlideMastersList({
9845
9849
  React108.useEffect(() => {
9846
9850
  activeRef.current?.scrollIntoView({ behavior: "smooth", block: "nearest" });
9847
9851
  }, [activeMasterIndex, activeLayoutIndex]);
9848
- const { t } = chunk73S5EOD3_js.useTranslation();
9852
+ const { t } = chunkP2COO2QO_js.useTranslation();
9849
9853
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9850
9854
  slideMasters.map((master, masterIdx) => {
9851
9855
  const isMasterActive = masterIdx === activeMasterIndex && activeLayoutIndex === null;
@@ -9858,7 +9862,7 @@ function SlideMastersList({
9858
9862
  ref: isMasterActive ? activeRef : void 0,
9859
9863
  "aria-pressed": isMasterActive,
9860
9864
  "aria-label": master.name || t("pptx.master.master"),
9861
- className: chunk73S5EOD3_js.cn(
9865
+ className: chunkP2COO2QO_js.cn(
9862
9866
  "group relative block w-full cursor-pointer rounded-lg border-2 p-1 text-left transition-all",
9863
9867
  isMasterActive ? "border-amber-500 bg-amber-500/10" : "border-border bg-background/40 hover:border-border"
9864
9868
  ),
@@ -9875,7 +9879,7 @@ function SlideMastersList({
9875
9879
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 px-1", children: /* @__PURE__ */ jsxRuntime.jsx(
9876
9880
  "span",
9877
9881
  {
9878
- className: chunk73S5EOD3_js.cn(
9882
+ className: chunkP2COO2QO_js.cn(
9879
9883
  "text-[10px] font-medium",
9880
9884
  isMasterActive ? "text-amber-400" : "text-muted-foreground"
9881
9885
  ),
@@ -9894,7 +9898,7 @@ function SlideMastersList({
9894
9898
  ref: isLayoutActive ? activeRef : void 0,
9895
9899
  "aria-pressed": isLayoutActive,
9896
9900
  "aria-label": layout.name || t("pptx.master.layout"),
9897
- className: chunk73S5EOD3_js.cn(
9901
+ className: chunkP2COO2QO_js.cn(
9898
9902
  "group relative block w-full cursor-pointer rounded-md border-2 p-0.5 text-left transition-all",
9899
9903
  isLayoutActive ? "border-primary bg-primary/10" : "border-border bg-background/40 hover:border-border"
9900
9904
  ),
@@ -9911,7 +9915,7 @@ function SlideMastersList({
9911
9915
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 px-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
9912
9916
  "span",
9913
9917
  {
9914
- className: chunk73S5EOD3_js.cn(
9918
+ className: chunkP2COO2QO_js.cn(
9915
9919
  "text-[9px]",
9916
9920
  isLayoutActive ? "text-primary" : "text-muted-foreground"
9917
9921
  ),
@@ -9955,7 +9959,7 @@ function MasterViewSidebar({
9955
9959
  onSlidesBackgroundChange
9956
9960
  }) {
9957
9961
  const scrollRef = React108.useRef(null);
9958
- const { t } = chunk73S5EOD3_js.useTranslation();
9962
+ const { t } = chunkP2COO2QO_js.useTranslation();
9959
9963
  const slidesBackground = pptx.masterViewBackgroundColor(
9960
9964
  { slideMasters },
9961
9965
  { tab: "slides", masterIndex: activeMasterIndex, layoutIndex: activeLayoutIndex }
@@ -10003,7 +10007,7 @@ function MasterViewSidebar({
10003
10007
  type: "button",
10004
10008
  role: "tab",
10005
10009
  "aria-selected": masterViewTab === tab.key,
10006
- className: chunk73S5EOD3_js.cn(
10010
+ className: chunkP2COO2QO_js.cn(
10007
10011
  "flex-1 px-1 py-1.5 text-[10px] font-medium transition-colors border-b-2",
10008
10012
  masterViewTab === tab.key ? "border-amber-500 text-amber-400" : "border-transparent text-muted-foreground hover:text-foreground"
10009
10013
  ),
@@ -10105,7 +10109,7 @@ function NotesMasterCanvas({
10105
10109
  notesText,
10106
10110
  slideNumber
10107
10111
  }) {
10108
- const { t } = chunk73S5EOD3_js.useTranslation();
10112
+ const { t } = chunkP2COO2QO_js.useTranslation();
10109
10113
  const pageWidth = notesCanvasSize?.width ?? DEFAULT_NOTES_WIDTH;
10110
10114
  const pageHeight = notesCanvasSize?.height ?? DEFAULT_NOTES_HEIGHT;
10111
10115
  const scale = React108.useMemo(() => {
@@ -10365,7 +10369,7 @@ function HandoutMasterCanvas({
10365
10369
  slideThumbnails,
10366
10370
  pageNumber
10367
10371
  }) {
10368
- const { t } = chunk73S5EOD3_js.useTranslation();
10372
+ const { t } = chunkP2COO2QO_js.useTranslation();
10369
10373
  const slideAspect = 4 / 3;
10370
10374
  const scale = React108.useMemo(() => {
10371
10375
  const scaleX = canvasSize.width / PAGE_WIDTH;
@@ -10506,7 +10510,7 @@ function SectionBlock({
10506
10510
  /* @__PURE__ */ jsxRuntime.jsx(
10507
10511
  lu.LuChevronDown,
10508
10512
  {
10509
- className: chunk73S5EOD3_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10513
+ className: chunkP2COO2QO_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10510
10514
  }
10511
10515
  ),
10512
10516
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-left", children: section.label }),
@@ -10550,12 +10554,12 @@ function SlideCardImpl({
10550
10554
  onDragLeave,
10551
10555
  onDrop
10552
10556
  }) {
10553
- const { t } = chunk73S5EOD3_js.useTranslation();
10557
+ const { t } = chunkP2COO2QO_js.useTranslation();
10554
10558
  const cue = pptx.hiddenSlideCue(slide.hidden, "sorter", index);
10555
10559
  return /* @__PURE__ */ jsxRuntime.jsxs(
10556
10560
  "div",
10557
10561
  {
10558
- className: chunk73S5EOD3_js.cn(
10562
+ className: chunkP2COO2QO_js.cn(
10559
10563
  "group relative cursor-pointer rounded-lg border-2 p-1 transition-all",
10560
10564
  isDragTarget ? "border-primary bg-primary/20" : isSelected ? "border-primary bg-primary/10 ring-1 ring-primary/50" : isActive ? "border-primary/50 bg-primary/5" : "border-border bg-background/50 hover:border-border",
10561
10565
  slide.hidden && "opacity-40"
@@ -10578,7 +10582,7 @@ function SlideCardImpl({
10578
10582
  /* @__PURE__ */ jsxRuntime.jsx(
10579
10583
  "span",
10580
10584
  {
10581
- className: chunk73S5EOD3_js.cn(
10585
+ className: chunkP2COO2QO_js.cn(
10582
10586
  "text-[11px] font-medium px-0.5",
10583
10587
  isSelected ? "text-primary" : isActive ? "text-primary/70" : "text-muted-foreground"
10584
10588
  ),
@@ -10656,7 +10660,7 @@ function SorterContextMenu({
10656
10660
  onToggleHide,
10657
10661
  onClose
10658
10662
  }) {
10659
- const { t } = chunk73S5EOD3_js.useTranslation();
10663
+ const { t } = chunkP2COO2QO_js.useTranslation();
10660
10664
  const menuX = Math.max(8, Math.min(x, window.innerWidth - 220));
10661
10665
  const menuY = Math.max(8, Math.min(y, window.innerHeight - 300));
10662
10666
  const entries = pptx.buildSlideSorterContextMenuEntries({
@@ -11011,7 +11015,7 @@ function SlideSorterOverlay({
11011
11015
  onToggleHideSlides,
11012
11016
  onClose
11013
11017
  }) {
11014
- const { t } = chunk73S5EOD3_js.useTranslation();
11018
+ const { t } = chunkP2COO2QO_js.useTranslation();
11015
11019
  const state = useSlideSorterState({
11016
11020
  slides,
11017
11021
  templateElementsBySlideId,
@@ -11257,7 +11261,7 @@ function OutlineViewOverlay({
11257
11261
  bumpHistory,
11258
11262
  onClose
11259
11263
  }) {
11260
- const { t } = chunk73S5EOD3_js.useTranslation();
11264
+ const { t } = chunkP2COO2QO_js.useTranslation();
11261
11265
  const { rows, containerRef, run, onRowKeyDown } = useOutlineView({
11262
11266
  slides,
11263
11267
  canvasSize,
@@ -11348,7 +11352,7 @@ function ReadingViewStage({
11348
11352
  "div",
11349
11353
  {
11350
11354
  className: "absolute inset-0",
11351
- style: { backgroundColor: chunk73S5EOD3_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
11355
+ style: { backgroundColor: chunkP2COO2QO_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
11352
11356
  }
11353
11357
  ),
11354
11358
  slide.backgroundImage && /* @__PURE__ */ jsxRuntime.jsx(
@@ -11367,7 +11371,7 @@ function ReadingViewStage({
11367
11371
  className: "absolute left-0 top-0 origin-top-left",
11368
11372
  style: { width, height, transform: `scale(${scale})`, ...pptx.deviceStrokeStageStyle(scale) },
11369
11373
  children: elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
11370
- chunkYQ67KAQR_js.StaticElementRenderer,
11374
+ chunkNRTPKXZX_js.StaticElementRenderer,
11371
11375
  {
11372
11376
  element,
11373
11377
  activeSlide: slide,
@@ -11448,7 +11452,7 @@ function ReadingViewOverlay({
11448
11452
  activeSlideIndex,
11449
11453
  onExit
11450
11454
  }) {
11451
- const { t } = chunk73S5EOD3_js.useTranslation();
11455
+ const { t } = chunkP2COO2QO_js.useTranslation();
11452
11456
  const { state, viewportRef, scale, run } = useReadingView({
11453
11457
  slideCount: slides.length,
11454
11458
  canvasSize,
@@ -11579,7 +11583,7 @@ function renderRichNotesSegments(segments) {
11579
11583
  if (segment.style.fontFamily) {
11580
11584
  style.fontFamily = segment.style.fontFamily;
11581
11585
  }
11582
- if (segment.style.hyperlink && chunk73S5EOD3_js.isUrlSafe(segment.style.hyperlink)) {
11586
+ if (segment.style.hyperlink && chunkP2COO2QO_js.isUrlSafe(segment.style.hyperlink)) {
11583
11587
  const safeHref = segment.style.hyperlink;
11584
11588
  style.color = "#4a9eff";
11585
11589
  style.textDecoration = "underline";
@@ -11592,7 +11596,7 @@ function renderRichNotesSegments(segments) {
11592
11596
  style,
11593
11597
  onClick: (e) => {
11594
11598
  e.preventDefault();
11595
- chunk73S5EOD3_js.safeOpenUrl(safeHref);
11599
+ chunkP2COO2QO_js.safeOpenUrl(safeHref);
11596
11600
  },
11597
11601
  children: segment.text
11598
11602
  },
@@ -11616,7 +11620,7 @@ function NotesPrintDialog({
11616
11620
  onClose,
11617
11621
  notesStyle
11618
11622
  }) {
11619
- const { t } = chunk73S5EOD3_js.useTranslation();
11623
+ const { t } = chunkP2COO2QO_js.useTranslation();
11620
11624
  const printFrameRef = React108.useRef(null);
11621
11625
  const handlePrint = React108.useCallback(() => {
11622
11626
  const iframe = printFrameRef.current;
@@ -11674,7 +11678,7 @@ function NotesPrintDialog({
11674
11678
  ] }) });
11675
11679
  }
11676
11680
  function NotesToolbar(p) {
11677
- const { t } = chunk73S5EOD3_js.useTranslation();
11681
+ const { t } = chunkP2COO2QO_js.useTranslation();
11678
11682
  const ref = React108.useRef(null);
11679
11683
  React108.useEffect(() => {
11680
11684
  const host = ref.current;
@@ -11941,7 +11945,7 @@ function useSlideNotes({
11941
11945
  const href = target.getAttribute("data-hyperlink") || target.getAttribute("href");
11942
11946
  if (href && (e.ctrlKey || e.metaKey)) {
11943
11947
  e.preventDefault();
11944
- chunk73S5EOD3_js.safeOpenUrl(href);
11948
+ chunkP2COO2QO_js.safeOpenUrl(href);
11945
11949
  }
11946
11950
  }, []);
11947
11951
  return {
@@ -11978,7 +11982,7 @@ function SlideNotesPanel({
11978
11982
  notesStyle,
11979
11983
  onHeightChange
11980
11984
  }) {
11981
- const { t } = chunk73S5EOD3_js.useTranslation();
11985
+ const { t } = chunkP2COO2QO_js.useTranslation();
11982
11986
  const rootRef = React108__default.default.useRef(null);
11983
11987
  React108__default.default.useEffect(() => {
11984
11988
  const el = rootRef.current;
@@ -12022,7 +12026,7 @@ function SlideNotesPanel({
12022
12026
  });
12023
12027
  const hasNotes = draft.trim().length > 0;
12024
12028
  const slideLabel = activeSlide ? t("pptx.notes.slideN", { n: activeSlide.slideNumber }) : t("pptx.notes.noSlide");
12025
- const { dragY, handlers: dragHandlers } = chunkYQ67KAQR_js.useSheetDismissDrag(onToggle);
12029
+ const { dragY, handlers: dragHandlers } = chunkNRTPKXZX_js.useSheetDismissDrag(onToggle);
12026
12030
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
12027
12031
  isExpanded && /* @__PURE__ */ jsxRuntime.jsx(
12028
12032
  "button",
@@ -12038,7 +12042,7 @@ function SlideNotesPanel({
12038
12042
  {
12039
12043
  ref: rootRef,
12040
12044
  "data-pptx-chrome": "notes",
12041
- className: chunk73S5EOD3_js.cn(
12045
+ className: chunkP2COO2QO_js.cn(
12042
12046
  "flex flex-col border-t border-border/60 bg-background select-none",
12043
12047
  // On mobile, hide the entire notes strip when collapsed: the
12044
12048
  // MobileBottomBar's Notes button is the entry point instead.
@@ -12222,7 +12226,7 @@ function VersionHistoryPanel({
12222
12226
  onClose,
12223
12227
  onRestore
12224
12228
  }) {
12225
- const { t } = chunk73S5EOD3_js.useTranslation();
12229
+ const { t } = chunkP2COO2QO_js.useTranslation();
12226
12230
  const [versions, setVersions] = React108.useState([]);
12227
12231
  const [loading, setLoading] = React108.useState(false);
12228
12232
  const [restoringKey, setRestoringKey] = React108.useState(null);
@@ -12368,7 +12372,7 @@ function SlideDiffRow({
12368
12372
  onAccept,
12369
12373
  onReject
12370
12374
  }) {
12371
- const { t } = chunk73S5EOD3_js.useTranslation();
12375
+ const { t } = chunkP2COO2QO_js.useTranslation();
12372
12376
  const [expanded, setExpanded] = React108.useState(diff.status === "changed");
12373
12377
  const statusLabel = (() => {
12374
12378
  switch (diff.status) {
@@ -12402,7 +12406,7 @@ function SlideDiffRow({
12402
12406
  return /* @__PURE__ */ jsxRuntime.jsxs(
12403
12407
  "div",
12404
12408
  {
12405
- className: chunk73S5EOD3_js.cn(
12409
+ className: chunkP2COO2QO_js.cn(
12406
12410
  "rounded-lg border transition-colors",
12407
12411
  isResolved ? "border-border/60 bg-card/40 opacity-60" : "border-border bg-background/70"
12408
12412
  ),
@@ -12416,7 +12420,7 @@ function SlideDiffRow({
12416
12420
  children: [
12417
12421
  expanded ? /* @__PURE__ */ jsxRuntime.jsx(lu.LuChevronDown, { className: "w-3.5 h-3.5 text-muted-foreground flex-shrink-0" }) : /* @__PURE__ */ jsxRuntime.jsx(lu.LuChevronRight, { className: "w-3.5 h-3.5 text-muted-foreground flex-shrink-0" }),
12418
12422
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-foreground", children: t("pptx.compare.slideNumber", { number: slideNumber }) }),
12419
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunk73S5EOD3_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
12423
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkP2COO2QO_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
12420
12424
  diff.changes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-muted-foreground", children: [
12421
12425
  diff.changes.length,
12422
12426
  " ",
@@ -12426,7 +12430,7 @@ function SlideDiffRow({
12426
12430
  isResolved && /* @__PURE__ */ jsxRuntime.jsx(
12427
12431
  "span",
12428
12432
  {
12429
- className: chunk73S5EOD3_js.cn(
12433
+ className: chunkP2COO2QO_js.cn(
12430
12434
  "text-[10px] font-medium",
12431
12435
  accepted ? "text-green-400" : "text-muted-foreground"
12432
12436
  ),
@@ -12454,7 +12458,7 @@ function SlideDiffRow({
12454
12458
  /* @__PURE__ */ jsxRuntime.jsx(
12455
12459
  "div",
12456
12460
  {
12457
- className: chunk73S5EOD3_js.cn(
12461
+ className: chunkP2COO2QO_js.cn(
12458
12462
  "rounded border overflow-hidden",
12459
12463
  diff.status === "added" ? "border-green-700/60" : diff.status === "changed" ? "border-amber-700/60" : "border-border"
12460
12464
  ),
@@ -12521,7 +12525,7 @@ function ComparePanel({
12521
12525
  onRejectSlide,
12522
12526
  onAcceptAll
12523
12527
  }) {
12524
- const { t } = chunk73S5EOD3_js.useTranslation();
12528
+ const { t } = chunkP2COO2QO_js.useTranslation();
12525
12529
  const [accepted, setAccepted] = React108.useState({});
12526
12530
  const [rejected, setRejected] = React108.useState({});
12527
12531
  const handleAccept = React108.useCallback(
@@ -12650,7 +12654,7 @@ function PasswordProtectionDialog({
12650
12654
  onSetPassword,
12651
12655
  onRemovePassword
12652
12656
  }) {
12653
- const { t } = chunk73S5EOD3_js.useTranslation();
12657
+ const { t } = chunkP2COO2QO_js.useTranslation();
12654
12658
  const [password, setPassword] = React108.useState("");
12655
12659
  const [confirmPassword, setConfirmPassword] = React108.useState("");
12656
12660
  const [showPassword, setShowPassword] = React108.useState(false);
@@ -12866,7 +12870,7 @@ function DocumentPropertiesCustomTab({
12866
12870
  customProperties,
12867
12871
  onUpdate
12868
12872
  }) {
12869
- const { t } = chunk73S5EOD3_js.useTranslation();
12873
+ const { t } = chunkP2COO2QO_js.useTranslation();
12870
12874
  const handleAdd = React108.useCallback(() => {
12871
12875
  onUpdate([...customProperties, { name: "", value: "", type: "lpwstr" }]);
12872
12876
  }, [customProperties, onUpdate]);
@@ -13068,7 +13072,7 @@ function DocumentPropertiesStatisticsTab({
13068
13072
  onUpdateAppProperties,
13069
13073
  canEdit
13070
13074
  }) {
13071
- const { t } = chunk73S5EOD3_js.useTranslation();
13075
+ const { t } = chunkP2COO2QO_js.useTranslation();
13072
13076
  const handleEditableChange = React108.useCallback(
13073
13077
  (key, value) => {
13074
13078
  onUpdateAppProperties({ [key]: value });
@@ -13108,7 +13112,7 @@ function DocumentPropertiesDialog({
13108
13112
  onClose,
13109
13113
  onSave
13110
13114
  }) {
13111
- const { t } = chunk73S5EOD3_js.useTranslation();
13115
+ const { t } = chunkP2COO2QO_js.useTranslation();
13112
13116
  const [activeTab, setActiveTab] = React108.useState("summary");
13113
13117
  const [draftCore, setDraftCore] = React108.useState({});
13114
13118
  const [draftCustom, setDraftCustom] = React108.useState([]);
@@ -13159,7 +13163,7 @@ function DocumentPropertiesDialog({
13159
13163
  const handleClose = React108.useCallback(() => {
13160
13164
  onClose();
13161
13165
  }, [onClose]);
13162
- const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(handleClose);
13166
+ const { panelStyle, handlers: dragHandlers } = chunkNRTPKXZX_js.useModalDismissDrag(handleClose);
13163
13167
  if (!isOpen) {
13164
13168
  return null;
13165
13169
  }
@@ -13296,7 +13300,7 @@ function FontEmbeddingPanel({
13296
13300
  onClose,
13297
13301
  onToggleEmbedFonts
13298
13302
  }) {
13299
- const { t } = chunk73S5EOD3_js.useTranslation();
13303
+ const { t } = chunkP2COO2QO_js.useTranslation();
13300
13304
  const [availableFamilies, setAvailableFamilies] = React108.useState(/* @__PURE__ */ new Set());
13301
13305
  const [scanning, setScanning] = React108.useState(false);
13302
13306
  const [scanned, setScanned] = React108.useState(false);
@@ -13424,7 +13428,7 @@ function DigitalSignaturesDialog({
13424
13428
  hasSignatures,
13425
13429
  signatureCount
13426
13430
  }) {
13427
- const { t } = chunk73S5EOD3_js.useTranslation();
13431
+ const { t } = chunkP2COO2QO_js.useTranslation();
13428
13432
  if (!isOpen) {
13429
13433
  return null;
13430
13434
  }
@@ -13496,7 +13500,7 @@ function SignatureStatusBadge({
13496
13500
  signatureCount,
13497
13501
  onClick
13498
13502
  }) {
13499
- const { t } = chunk73S5EOD3_js.useTranslation();
13503
+ const { t } = chunkP2COO2QO_js.useTranslation();
13500
13504
  if (!hasSignatures || signatureCount === 0) {
13501
13505
  return null;
13502
13506
  }
@@ -13522,7 +13526,7 @@ function SignatureStrippedDialog({
13522
13526
  onConfirm,
13523
13527
  onCancel
13524
13528
  }) {
13525
- const { t } = chunk73S5EOD3_js.useTranslation();
13529
+ const { t } = chunkP2COO2QO_js.useTranslation();
13526
13530
  if (!isOpen) {
13527
13531
  return null;
13528
13532
  }
@@ -13591,7 +13595,7 @@ function EncryptedFileDialog({
13591
13595
  isOpen,
13592
13596
  onClose
13593
13597
  }) {
13594
- const { t } = chunk73S5EOD3_js.useTranslation();
13598
+ const { t } = chunkP2COO2QO_js.useTranslation();
13595
13599
  if (!isOpen) {
13596
13600
  return null;
13597
13601
  }
@@ -13738,7 +13742,7 @@ function PresentationAudienceEffects({ snapshot }) {
13738
13742
  ] });
13739
13743
  }
13740
13744
  function PresentationEndOverlay({ onExit }) {
13741
- const { t } = chunk73S5EOD3_js.useTranslation();
13745
+ const { t } = chunkP2COO2QO_js.useTranslation();
13742
13746
  return /* @__PURE__ */ jsxRuntime.jsx(
13743
13747
  "button",
13744
13748
  {
@@ -13754,9 +13758,9 @@ function PresentationSubtitleBar({
13754
13758
  visible,
13755
13759
  onCaptionChange
13756
13760
  }) {
13757
- const { t } = chunk73S5EOD3_js.useTranslation();
13761
+ const { t } = chunkP2COO2QO_js.useTranslation();
13758
13762
  const language = pptx.subtitleRecognitionLanguage(
13759
- pptx.subtitleSettingsFromOptions(chunkYQ67KAQR_js.useViewerOptionsContext()),
13763
+ pptx.subtitleSettingsFromOptions(chunkNRTPKXZX_js.useViewerOptionsContext()),
13760
13764
  typeof navigator === "undefined" ? "en-US" : navigator.language
13761
13765
  );
13762
13766
  const [captionText, setCaptionText] = React108.useState("");
@@ -13833,7 +13837,7 @@ function renderNotesSegments(segments) {
13833
13837
  });
13834
13838
  }
13835
13839
  function PresenterConsoleToolbar(p) {
13836
- const { t } = chunk73S5EOD3_js.useTranslation();
13840
+ const { t } = chunkP2COO2QO_js.useTranslation();
13837
13841
  const ref = useWebControl(
13838
13842
  { ...pptx.presenterConsoleViewState(p.snapshot, p.audienceOpen), translate: t },
13839
13843
  {
@@ -13924,7 +13928,7 @@ function ScaledSlidePreviewImpl({
13924
13928
  {
13925
13929
  className: "absolute inset-0",
13926
13930
  style: {
13927
- backgroundColor: chunk73S5EOD3_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13931
+ backgroundColor: chunkP2COO2QO_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13928
13932
  }
13929
13933
  }
13930
13934
  ),
@@ -13950,7 +13954,7 @@ function ScaledSlidePreviewImpl({
13950
13954
  ...pptx.deviceStrokeStageStyle(scale)
13951
13955
  },
13952
13956
  children: previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
13953
- chunkYQ67KAQR_js.StaticElementRenderer,
13957
+ chunkNRTPKXZX_js.StaticElementRenderer,
13954
13958
  {
13955
13959
  element,
13956
13960
  activeSlide: slide,
@@ -14017,7 +14021,7 @@ function PresenterNotesRail({
14017
14021
  onMove,
14018
14022
  onUpdateNotes
14019
14023
  }) {
14020
- const { t } = chunk73S5EOD3_js.useTranslation();
14024
+ const { t } = chunkP2COO2QO_js.useTranslation();
14021
14025
  const slide = slides[current];
14022
14026
  const nextSlide = pptx.nextPresentedSlide(slides, current, activeCustomShow, authoredRange);
14023
14027
  const notesText = slide?.notes ?? "";
@@ -14142,7 +14146,7 @@ function PresenterNotesRail({
14142
14146
  ] });
14143
14147
  }
14144
14148
  function PresenterSlideNavigator(props) {
14145
- const { t } = chunk73S5EOD3_js.useTranslation();
14149
+ const { t } = chunkP2COO2QO_js.useTranslation();
14146
14150
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${pptx.PRESENTER_CONSOLE_CLASSES.navigator} text-foreground`, children: [
14147
14151
  /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "mb-4 flex items-center justify-between border-b border-border pb-4", children: [
14148
14152
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -14284,7 +14288,7 @@ function PresenterView({
14284
14288
  onSwapDisplays,
14285
14289
  onUpdateNotes
14286
14290
  }) {
14287
- const { t } = chunk73S5EOD3_js.useTranslation();
14291
+ const { t } = chunkP2COO2QO_js.useTranslation();
14288
14292
  const [now, setNow] = React108.useState(Date.now());
14289
14293
  React108.useEffect(() => {
14290
14294
  const interval = window.setInterval(() => setNow(Date.now()), 1e3);
@@ -14441,7 +14445,7 @@ function MobilePresenterView({
14441
14445
  onMovePresentationSlide,
14442
14446
  onExit
14443
14447
  }) {
14444
- const { t } = chunk73S5EOD3_js.useTranslation();
14448
+ const { t } = chunkP2COO2QO_js.useTranslation();
14445
14449
  const [now, setNow] = React108.useState(Date.now());
14446
14450
  React108.useEffect(() => {
14447
14451
  const interval = window.setInterval(() => setNow(Date.now()), 1e3);
@@ -14554,7 +14558,7 @@ function RehearseTimingsHud({
14554
14558
  paused,
14555
14559
  onTogglePause
14556
14560
  }) {
14557
- const { t } = chunk73S5EOD3_js.useTranslation();
14561
+ const { t } = chunkP2COO2QO_js.useTranslation();
14558
14562
  const [tick, setTick] = React108.useState(0);
14559
14563
  React108.useEffect(() => {
14560
14564
  if (paused) {
@@ -14602,7 +14606,7 @@ function RehearseTimingsSummary({
14602
14606
  onSave,
14603
14607
  onDiscard
14604
14608
  }) {
14605
- const { t } = chunk73S5EOD3_js.useTranslation();
14609
+ const { t } = chunkP2COO2QO_js.useTranslation();
14606
14610
  const totalMs = Object.values(recordedTimings).reduce((sum, ms) => sum + ms, 0);
14607
14611
  const sortedEntries = Object.entries(recordedTimings).map(([idx, ms]) => ({ slideIndex: Number(idx), ms })).sort((a, b) => a.slideIndex - b.slideIndex);
14608
14612
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 z-[9999] flex items-center justify-center bg-black/60 backdrop-blur-sm", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full max-w-lg rounded-xl border border-border bg-background shadow-2xl", children: [
@@ -14686,7 +14690,7 @@ function SelectionPane({
14686
14690
  markDirty,
14687
14691
  onClose
14688
14692
  }) {
14689
- const { t } = chunk73S5EOD3_js.useTranslation();
14693
+ const { t } = chunkP2COO2QO_js.useTranslation();
14690
14694
  const activeSlide = slides[activeSlideIndex];
14691
14695
  const elements = activeSlide?.elements ?? [];
14692
14696
  const [editingId, setEditingId] = React108.useState(null);
@@ -14841,7 +14845,7 @@ function SelectionPane({
14841
14845
  setDragIndex(null);
14842
14846
  setDragOverIndex(null);
14843
14847
  },
14844
- className: chunk73S5EOD3_js.cn(
14848
+ className: chunkP2COO2QO_js.cn(
14845
14849
  "flex items-center gap-1.5 px-2 py-1 text-xs cursor-pointer transition-colors",
14846
14850
  isSelected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground",
14847
14851
  dragOverIndex === realIndex ? "border-t-2 border-primary" : ""
@@ -14895,13 +14899,13 @@ function SelectionPane({
14895
14899
  }
14896
14900
  var INPUT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14897
14901
  var SELECT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14898
- var ENTRANCE_PRESETS = /* @__PURE__ */ chunk73S5EOD3_js.ANIMATION_PRESET_OPTIONS.filter(
14902
+ var ENTRANCE_PRESETS = /* @__PURE__ */ chunkP2COO2QO_js.ANIMATION_PRESET_OPTIONS.filter(
14899
14903
  (o) => o.value === "fadeIn" || o.value === "flyIn" || o.value === "zoomIn"
14900
14904
  );
14901
- var EXIT_PRESETS = /* @__PURE__ */ chunk73S5EOD3_js.ANIMATION_PRESET_OPTIONS.filter(
14905
+ var EXIT_PRESETS = /* @__PURE__ */ chunkP2COO2QO_js.ANIMATION_PRESET_OPTIONS.filter(
14902
14906
  (o) => o.value === "fadeOut" || o.value === "flyOut" || o.value === "zoomOut"
14903
14907
  );
14904
- var EMPHASIS_PRESETS = /* @__PURE__ */ chunk73S5EOD3_js.ANIMATION_PRESET_OPTIONS.filter(
14908
+ var EMPHASIS_PRESETS = /* @__PURE__ */ chunkP2COO2QO_js.ANIMATION_PRESET_OPTIONS.filter(
14905
14909
  (o) => o.value === "spin" || o.value === "pulse" || o.value === "colorWave" || o.value === "bounce" || o.value === "flash" || o.value === "growShrink" || o.value === "teeter"
14906
14910
  );
14907
14911
  var TIMING_CURVE_OPTIONS = [
@@ -15002,7 +15006,7 @@ function AfterAnimationRow({
15002
15006
  onActionChange,
15003
15007
  onColorChange
15004
15008
  }) {
15005
- const { t } = chunk73S5EOD3_js.useTranslation();
15009
+ const { t } = chunkP2COO2QO_js.useTranslation();
15006
15010
  const commitRecentColor = useRecentColorCommit();
15007
15011
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
15008
15012
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15053,7 +15057,7 @@ function AnimationTimelineSection({
15053
15057
  canEdit,
15054
15058
  handlers
15055
15059
  }) {
15056
- const { t } = chunk73S5EOD3_js.useTranslation();
15060
+ const { t } = chunkP2COO2QO_js.useTranslation();
15057
15061
  const effectLabel = (anim) => pptx.animationEffectLabel(anim, (key) => t(key));
15058
15062
  const {
15059
15063
  sortedAnimations,
@@ -15084,7 +15088,7 @@ function AnimationTimelineSection({
15084
15088
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-6 rounded bg-muted/50 border border-border overflow-hidden", children: timelineBarData.map((bar) => /* @__PURE__ */ jsxRuntime.jsx(
15085
15089
  "div",
15086
15090
  {
15087
- className: chunk73S5EOD3_js.cn(
15091
+ className: chunkP2COO2QO_js.cn(
15088
15092
  "absolute top-0.5 bottom-0.5 rounded-sm transition-colors",
15089
15093
  animationTypeColor(bar.anim),
15090
15094
  bar.anim.elementId === selectedElementId && "ring-1 ring-primary"
@@ -15113,7 +15117,7 @@ function AnimationTimelineSection({
15113
15117
  onDragLeave: handleDragLeave,
15114
15118
  onDrop: (e) => handleDrop(index, e),
15115
15119
  title: t("pptx.animation.nativeEffectHint"),
15116
- className: chunk73S5EOD3_js.cn(
15120
+ className: chunkP2COO2QO_js.cn(
15117
15121
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] italic",
15118
15122
  "bg-muted/20 text-muted-foreground/70",
15119
15123
  isDragOver && "border-t-2 border-primary"
@@ -15152,7 +15156,7 @@ function AnimationTimelineSection({
15152
15156
  onDragEnd: handleDragEnd,
15153
15157
  onMouseEnter: () => handleAnimationHover(anim),
15154
15158
  onMouseLeave: handleAnimationHoverEnd,
15155
- className: chunk73S5EOD3_js.cn(
15159
+ className: chunkP2COO2QO_js.cn(
15156
15160
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] cursor-grab transition-colors",
15157
15161
  isSelected ? "bg-primary/30 text-primary" : "bg-muted/50 text-muted-foreground",
15158
15162
  isDragging && "opacity-40",
@@ -15213,7 +15217,7 @@ function BookmarkTriggerRow({
15213
15217
  style,
15214
15218
  onChange
15215
15219
  }) {
15216
- const { t } = chunk73S5EOD3_js.useTranslation();
15220
+ const { t } = chunkP2COO2QO_js.useTranslation();
15217
15221
  const options = pptx.listMediaBookmarkOptions(elements);
15218
15222
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
15219
15223
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-[11px]", children: t("pptx.animation.trigger.bookmarkLabel") }),
@@ -15246,7 +15250,7 @@ function EffectSoundRow({
15246
15250
  onPick,
15247
15251
  onPickStock
15248
15252
  }) {
15249
- const { t } = chunk73S5EOD3_js.useTranslation();
15253
+ const { t } = chunkP2COO2QO_js.useTranslation();
15250
15254
  const fileInputRef = React108__default.default.useRef(null);
15251
15255
  const selectedValue = soundState.catalogueId ?? (soundState.hasSound ? CURRENT_VALUE : NONE_VALUE);
15252
15256
  const handleSelectChange = (event) => {
@@ -15284,7 +15288,7 @@ function EffectSoundRow({
15284
15288
  }
15285
15289
  const asset = pptx.getEffectSoundAsset(soundState.catalogueId);
15286
15290
  if (asset) {
15287
- chunkYQ67KAQR_js.playAnimationSound(asset.dataUrl);
15291
+ chunkNRTPKXZX_js.playAnimationSound(asset.dataUrl);
15288
15292
  }
15289
15293
  };
15290
15294
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15337,7 +15341,7 @@ function MotionPathRow({
15337
15341
  canEdit,
15338
15342
  onChange
15339
15343
  }) {
15340
- const { t } = chunk73S5EOD3_js.useTranslation();
15344
+ const { t } = chunkP2COO2QO_js.useTranslation();
15341
15345
  const presetId = pptx.motionPathPresetIdForPath(motionPath);
15342
15346
  const isCustom = Boolean(motionPath) && !presetId;
15343
15347
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15459,7 +15463,7 @@ function useAnimationPreview({
15459
15463
  }) {
15460
15464
  const handleAnimationHover = React108.useCallback((anim) => {
15461
15465
  if (anim.motionPath) {
15462
- chunk73S5EOD3_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
15466
+ chunkP2COO2QO_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
15463
15467
  durationMs: anim.durationMs,
15464
15468
  delayMs: anim.delayMs,
15465
15469
  timingCurve: anim.timingCurve
@@ -15470,19 +15474,19 @@ function useAnimationPreview({
15470
15474
  if (!preset || preset === "none") {
15471
15475
  return;
15472
15476
  }
15473
- chunk73S5EOD3_js.startPreviewAnimation(anim.elementId, preset, {
15477
+ chunkP2COO2QO_js.startPreviewAnimation(anim.elementId, preset, {
15474
15478
  direction: anim.direction,
15475
15479
  durationMs: anim.durationMs ?? 500,
15476
15480
  timingCurve: anim.timingCurve
15477
15481
  });
15478
15482
  }, []);
15479
- const handleAnimationHoverEnd = React108.useCallback(() => chunk73S5EOD3_js.stopPreviewAnimation(), []);
15483
+ const handleAnimationHoverEnd = React108.useCallback(() => chunkP2COO2QO_js.stopPreviewAnimation(), []);
15480
15484
  const handlePreviewClick = React108.useCallback(() => {
15481
15485
  if (!selectedElementAnimation) {
15482
15486
  return;
15483
15487
  }
15484
15488
  if (selectedElementAnimation.motionPath) {
15485
- chunk73S5EOD3_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
15489
+ chunkP2COO2QO_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
15486
15490
  durationMs: selectedElementAnimation.durationMs,
15487
15491
  delayMs: selectedElementAnimation.delayMs,
15488
15492
  timingCurve: selectedElementAnimation.timingCurve
@@ -15493,7 +15497,7 @@ function useAnimationPreview({
15493
15497
  if (!preset || preset === "none") {
15494
15498
  return;
15495
15499
  }
15496
- chunk73S5EOD3_js.startPreviewAnimation(selectedElementId, preset, {
15500
+ chunkP2COO2QO_js.startPreviewAnimation(selectedElementId, preset, {
15497
15501
  direction: selectedElementAnimation.direction,
15498
15502
  durationMs: selectedElementAnimation.durationMs ?? 500,
15499
15503
  timingCurve: selectedElementAnimation.timingCurve
@@ -15728,7 +15732,7 @@ function useAnimationHandlers({
15728
15732
  return anim.elementId.slice(0, 8);
15729
15733
  }
15730
15734
  const text = pptx$1.hasTextProperties(el) ? el.text : void 0;
15731
- return text || chunk73S5EOD3_js.getElementLabel(el);
15735
+ return text || chunkP2COO2QO_js.getElementLabel(el);
15732
15736
  },
15733
15737
  [activeSlide.elements]
15734
15738
  );
@@ -15739,7 +15743,7 @@ function useAnimationHandlers({
15739
15743
  return id.slice(0, 8);
15740
15744
  }
15741
15745
  const text = pptx$1.hasTextProperties(el) ? el.text : void 0;
15742
- return text || chunk73S5EOD3_js.getElementLabel(el);
15746
+ return text || chunkP2COO2QO_js.getElementLabel(el);
15743
15747
  }).join(", "),
15744
15748
  [activeSlide.elements]
15745
15749
  );
@@ -15795,8 +15799,8 @@ function AnimationPanel({
15795
15799
  canEdit,
15796
15800
  onUpdateSlide
15797
15801
  }) {
15798
- const { t } = chunk73S5EOD3_js.useTranslation();
15799
- const { viewportWidth } = chunkYQ67KAQR_js.useIsMobile();
15802
+ const { t } = chunkP2COO2QO_js.useTranslation();
15803
+ const { viewportWidth } = chunkNRTPKXZX_js.useIsMobile();
15800
15804
  const directionBtnPx = Math.max(28, pptx.getDensePanelTouchTargetPx(viewportWidth));
15801
15805
  const fieldStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
15802
15806
  const handlers = useAnimationHandlers({
@@ -15924,7 +15928,7 @@ function AnimationPanel({
15924
15928
  type: "button",
15925
15929
  disabled: !canEdit,
15926
15930
  style: { minWidth: directionBtnPx, minHeight: directionBtnPx },
15927
- className: chunk73S5EOD3_js.cn(
15931
+ className: chunkP2COO2QO_js.cn(
15928
15932
  "flex items-center justify-center rounded border transition-colors",
15929
15933
  isActive ? "border-primary bg-primary/20 text-primary" : "border-border bg-muted text-muted-foreground hover:bg-accent"
15930
15934
  ),
@@ -15990,7 +15994,7 @@ function AnimationPanel({
15990
15994
  style: fieldStyle,
15991
15995
  children: [
15992
15996
  /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: t("pptx.animation.trigger.selectShape") }),
15993
- activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunk73S5EOD3_js.getElementLabel(el) }, el.id))
15997
+ activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunkP2COO2QO_js.getElementLabel(el) }, el.id))
15994
15998
  ]
15995
15999
  }
15996
16000
  )
@@ -16134,7 +16138,7 @@ function ActionTargetFields({
16134
16138
  returnAfter,
16135
16139
  onChange
16136
16140
  }) {
16137
- const { t } = chunk73S5EOD3_js.useTranslation();
16141
+ const { t } = chunkP2COO2QO_js.useTranslation();
16138
16142
  const urlLabelKey = URL_LABEL_KEY[type];
16139
16143
  if (urlLabelKey) {
16140
16144
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16143,7 +16147,7 @@ function ActionTargetFields({
16143
16147
  type: "text",
16144
16148
  disabled: !canEdit,
16145
16149
  "aria-label": t(urlLabelKey),
16146
- className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
16150
+ className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
16147
16151
  placeholder: "https://...",
16148
16152
  value: url ?? "",
16149
16153
  onChange: (e) => onChange({ url: e.target.value })
@@ -16157,7 +16161,7 @@ function ActionTargetFields({
16157
16161
  type: "number",
16158
16162
  disabled: !canEdit,
16159
16163
  "aria-label": t("pptx.action.gotoSlide"),
16160
- className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
16164
+ className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
16161
16165
  placeholder: t("pptx.action.slideNumberPlaceholder"),
16162
16166
  min: 1,
16163
16167
  max: slideCount,
@@ -16179,7 +16183,7 @@ function ActionTargetFields({
16179
16183
  "data-testid": "pptx-action-custom-show",
16180
16184
  disabled: !canEdit,
16181
16185
  "aria-label": t("pptx.hyperlink.customShowLabel"),
16182
- className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
16186
+ className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
16183
16187
  value: customShowId ?? "",
16184
16188
  onChange: (e) => onChange({ customShowId: e.target.value, returnAfter }),
16185
16189
  children: [
@@ -16211,7 +16215,7 @@ function ActionSettingsPanel({
16211
16215
  customShows,
16212
16216
  onUpdateElement
16213
16217
  }) {
16214
- const { t } = chunk73S5EOD3_js.useTranslation();
16218
+ const { t } = chunkP2COO2QO_js.useTranslation();
16215
16219
  const clickAction = selectedElement.actionClick ? pptx$1.pptxActionToElementAction(selectedElement.actionClick, "click") : void 0;
16216
16220
  const hoverAction = selectedElement.actionHover ? pptx$1.pptxActionToElementAction(selectedElement.actionHover, "hover") : void 0;
16217
16221
  const updateAction = (trigger, type, patch) => {
@@ -16287,7 +16291,7 @@ function ActionTriggerSection({
16287
16291
  onChangeType,
16288
16292
  onChangeTarget
16289
16293
  }) {
16290
- const { t } = chunk73S5EOD3_js.useTranslation();
16294
+ const { t } = chunkP2COO2QO_js.useTranslation();
16291
16295
  const [pendingType, setPendingType] = React108.useState(void 0);
16292
16296
  const effectiveType = pptx.resolveActionType(pendingType, activeType);
16293
16297
  const changeType = (type) => {
@@ -16301,7 +16305,7 @@ function ActionTriggerSection({
16301
16305
  {
16302
16306
  disabled: !canEdit,
16303
16307
  "aria-label": label,
16304
- className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
16308
+ className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
16305
16309
  value: effectiveType,
16306
16310
  onChange: (e) => changeType(e.target.value),
16307
16311
  children: pptx.ELEMENT_ACTION_TYPE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.labelKey) }, o.value))
@@ -16329,7 +16333,7 @@ var AXIS_ROWS = [
16329
16333
  { type: "catAx", labelKey: "pptx.chart.categoryAxis", hasScale: false }
16330
16334
  ];
16331
16335
  function ChartAxisOptions({ axes, canEdit, onUpdateAxis }) {
16332
- const { t } = chunk73S5EOD3_js.useTranslation();
16336
+ const { t } = chunkP2COO2QO_js.useTranslation();
16333
16337
  const rows = AXIS_ROWS.map((row) => ({
16334
16338
  ...row,
16335
16339
  axis: axes?.find((a) => a.axisType === row.type)
@@ -16474,7 +16478,7 @@ function ChartAxisStyleOptions({
16474
16478
  onSetTitleStyle,
16475
16479
  onSetGridlineStyle
16476
16480
  }) {
16477
- const { t } = chunk73S5EOD3_js.useTranslation();
16481
+ const { t } = chunkP2COO2QO_js.useTranslation();
16478
16482
  const commitRecentColor = useRecentColorCommit();
16479
16483
  const rows = SCALE_AXES.map((row) => ({
16480
16484
  ...row,
@@ -16646,7 +16650,7 @@ function ChartComboTypeOptions({
16646
16650
  canEdit,
16647
16651
  onSetSeriesType
16648
16652
  }) {
16649
- const { t } = chunk73S5EOD3_js.useTranslation();
16653
+ const { t } = chunkP2COO2QO_js.useTranslation();
16650
16654
  if (!COMBO_SUPPORTED_TYPES.has(chartType) || series.length < 2) {
16651
16655
  return null;
16652
16656
  }
@@ -16675,7 +16679,7 @@ function ChartDataLabelOptions({
16675
16679
  canEdit,
16676
16680
  onUpdateStyle
16677
16681
  }) {
16678
- const { t } = chunk73S5EOD3_js.useTranslation();
16682
+ const { t } = chunkP2COO2QO_js.useTranslation();
16679
16683
  if (!style?.hasDataLabels) {
16680
16684
  return null;
16681
16685
  }
@@ -16723,7 +16727,7 @@ function ChartDataPointMarkerOptions({
16723
16727
  canEdit,
16724
16728
  onSetPointMarker
16725
16729
  }) {
16726
- const { t } = chunk73S5EOD3_js.useTranslation();
16730
+ const { t } = chunkP2COO2QO_js.useTranslation();
16727
16731
  const commitRecentColor = useRecentColorCommit();
16728
16732
  const [seriesIndex, setSeriesIndex] = React108.useState(0);
16729
16733
  if (!MARKER_SUPPORTED_TYPES.has(chartType) || series.length === 0 || categories.length === 0) {
@@ -16829,7 +16833,7 @@ function ChartDataPointOptions({
16829
16833
  onSetPointExplosion,
16830
16834
  onSetPointLabel
16831
16835
  }) {
16832
- const { t } = chunk73S5EOD3_js.useTranslation();
16836
+ const { t } = chunkP2COO2QO_js.useTranslation();
16833
16837
  const commitRecentColor = useRecentColorCommit();
16834
16838
  const [seriesIndex, setSeriesIndex] = React108.useState(0);
16835
16839
  if (series.length === 0 || categories.length === 0) {
@@ -16931,7 +16935,7 @@ function ChartDataSheet({
16931
16935
  highlightCell,
16932
16936
  onChange
16933
16937
  }) {
16934
- const { t } = chunk73S5EOD3_js.useTranslation();
16938
+ const { t } = chunkP2COO2QO_js.useTranslation();
16935
16939
  const ref = React108.useRef(null);
16936
16940
  React108.useLayoutEffect(() => {
16937
16941
  if (ref.current) {
@@ -16962,7 +16966,7 @@ function ChartDisplayOptions({
16962
16966
  hasGridlines,
16963
16967
  onToggleGridlines
16964
16968
  }) {
16965
- const { t } = chunk73S5EOD3_js.useTranslation();
16969
+ const { t } = chunkP2COO2QO_js.useTranslation();
16966
16970
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD, children: [
16967
16971
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING, children: t("pptx.chart.display") }),
16968
16972
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -17039,7 +17043,7 @@ function ChartErrorBarOptions({
17039
17043
  canEdit,
17040
17044
  onSetErrorBars
17041
17045
  }) {
17042
- const { t } = chunk73S5EOD3_js.useTranslation();
17046
+ const { t } = chunkP2COO2QO_js.useTranslation();
17043
17047
  if (!ERROR_BAR_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17044
17048
  return null;
17045
17049
  }
@@ -17119,7 +17123,7 @@ function ChartFilteredSeriesOptions({
17119
17123
  onRestoreSeries,
17120
17124
  onSetDataLabelsRangeCache
17121
17125
  }) {
17122
- const { t } = chunk73S5EOD3_js.useTranslation();
17126
+ const { t } = chunkP2COO2QO_js.useTranslation();
17123
17127
  const filteredSeries = chartData.filteredSeries ?? [];
17124
17128
  const seriesWithRange = chartData.series.map((series, index) => ({ series, index })).filter(({ series }) => series.dataLabelOptions?.dataLabelsRange);
17125
17129
  if (filteredSeries.length === 0 && seriesWithRange.length === 0 && chartData.series.length <= 1) {
@@ -17199,7 +17203,7 @@ function ChartMarkerOptions({
17199
17203
  canEdit,
17200
17204
  onSetMarker
17201
17205
  }) {
17202
- const { t } = chunk73S5EOD3_js.useTranslation();
17206
+ const { t } = chunkP2COO2QO_js.useTranslation();
17203
17207
  const commitRecentColor = useRecentColorCommit();
17204
17208
  if (!MARKER_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17205
17209
  return null;
@@ -17308,7 +17312,7 @@ function ChartSeriesColorOptions({
17308
17312
  onSetColor,
17309
17313
  onToggleSecondaryAxis
17310
17314
  }) {
17311
- const { t } = chunk73S5EOD3_js.useTranslation();
17315
+ const { t } = chunkP2COO2QO_js.useTranslation();
17312
17316
  const series = chartData.series;
17313
17317
  if (series.length === 0) {
17314
17318
  return null;
@@ -17358,7 +17362,7 @@ function ChartSubtypeOptions({
17358
17362
  canEdit,
17359
17363
  onUpdateChartData
17360
17364
  }) {
17361
- const { t } = chunk73S5EOD3_js.useTranslation();
17365
+ const { t } = chunkP2COO2QO_js.useTranslation();
17362
17366
  if (chartData.chartType !== "bar3D" && chartData.chartType !== "radar" && chartData.chartType !== "surface") {
17363
17367
  return null;
17364
17368
  }
@@ -17424,7 +17428,7 @@ function ChartTrendlineOptions({
17424
17428
  canEdit,
17425
17429
  onSetTrendline
17426
17430
  }) {
17427
- const { t } = chunk73S5EOD3_js.useTranslation();
17431
+ const { t } = chunkP2COO2QO_js.useTranslation();
17428
17432
  if (!TRENDLINE_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17429
17433
  return null;
17430
17434
  }
@@ -17497,7 +17501,7 @@ function ChartTypeSelector({
17497
17501
  onUpdateChartData,
17498
17502
  onTitleChange
17499
17503
  }) {
17500
- const { t } = chunk73S5EOD3_js.useTranslation();
17504
+ const { t } = chunkP2COO2QO_js.useTranslation();
17501
17505
  const supportsGrouping = GROUPING_SUPPORTED_TYPES.has(chartType);
17502
17506
  const displayedType = pptx.resolveDisplayedChartType(chartData);
17503
17507
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD, children: [
@@ -17578,7 +17582,7 @@ function RotationField({
17578
17582
  canEdit,
17579
17583
  onRotationPatch
17580
17584
  }) {
17581
- const { t } = chunk73S5EOD3_js.useTranslation();
17585
+ const { t } = chunkP2COO2QO_js.useTranslation();
17582
17586
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
17583
17587
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.chart.userShapeRotation") }),
17584
17588
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -17600,7 +17604,7 @@ function FlipFields({
17600
17604
  canEdit,
17601
17605
  onFlipPatch
17602
17606
  }) {
17603
- const { t } = chunk73S5EOD3_js.useTranslation();
17607
+ const { t } = chunkP2COO2QO_js.useTranslation();
17604
17608
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
17605
17609
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-1 cursor-pointer", children: [
17606
17610
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -17639,7 +17643,7 @@ function ChartUserShapePositionFields({
17639
17643
  onRotationPatch,
17640
17644
  onFlipPatch
17641
17645
  }) {
17642
- const { t } = chunk73S5EOD3_js.useTranslation();
17646
+ const { t } = chunkP2COO2QO_js.useTranslation();
17643
17647
  const update = (patch) => onPatch(row.path, patch);
17644
17648
  if (row.depth === 0) {
17645
17649
  const from = row.from;
@@ -17763,7 +17767,7 @@ function ChartUserShapeOptions({
17763
17767
  canEdit,
17764
17768
  onUpdateChartData
17765
17769
  }) {
17766
- const { t } = chunk73S5EOD3_js.useTranslation();
17770
+ const { t } = chunkP2COO2QO_js.useTranslation();
17767
17771
  const shapes = chartData.userShapes;
17768
17772
  const rows = pptx.listChartUserShapeRows(shapes);
17769
17773
  const kindLabel = (kind) => {
@@ -17921,8 +17925,8 @@ function ChartUserShapeOptions({
17921
17925
  }
17922
17926
  function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
17923
17927
  const chartData = selectedElement.chartData;
17924
- const followDataPoint = chunkYQ67KAQR_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17925
- const { selection: partSelection } = chunkYQ67KAQR_js.useChartPartSelection();
17928
+ const followDataPoint = chunkNRTPKXZX_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17929
+ const { selection: partSelection } = chunkNRTPKXZX_js.useChartPartSelection();
17926
17930
  const canvasPart = partSelection?.elementId === selectedElement.id ? partSelection.part : null;
17927
17931
  const title = chartData?.title;
17928
17932
  const chartType = chartData?.chartType;
@@ -18360,7 +18364,7 @@ function OleEditorDialog({
18360
18364
  element,
18361
18365
  onUpdateElement
18362
18366
  }) {
18363
- const { t } = chunk73S5EOD3_js.useTranslation();
18367
+ const { t } = chunkP2COO2QO_js.useTranslation();
18364
18368
  const dialogRef = React108.useRef(null);
18365
18369
  const fileInputRef = React108.useRef(null);
18366
18370
  const descriptor = pptx.buildOleEditDialogDescriptor(element);
@@ -18608,7 +18612,7 @@ function ConnectorArrowsSection({
18608
18612
  onUpdateShapeStyle,
18609
18613
  markDirty
18610
18614
  }) {
18611
- const { t } = chunk73S5EOD3_js.useTranslation();
18615
+ const { t } = chunkP2COO2QO_js.useTranslation();
18612
18616
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
18613
18617
  ["Start", "End"].map((end) => {
18614
18618
  const key = end === "Start" ? "connectorStartArrow" : "connectorEndArrow";
@@ -18627,7 +18631,7 @@ function ConnectorArrowsSection({
18627
18631
  },
18628
18632
  disabled: !canEdit,
18629
18633
  className: SELECT_CLS2,
18630
- children: chunk73S5EOD3_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18634
+ children: chunkP2COO2QO_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18631
18635
  }
18632
18636
  )
18633
18637
  ] }, end);
@@ -18651,7 +18655,7 @@ function ConnectorArrowsSection({
18651
18655
  },
18652
18656
  disabled: !canEdit,
18653
18657
  className: SELECT_CLS2,
18654
- children: chunk73S5EOD3_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18658
+ children: chunkP2COO2QO_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18655
18659
  }
18656
18660
  )
18657
18661
  ] }),
@@ -18670,7 +18674,7 @@ function ConnectorArrowsSection({
18670
18674
  },
18671
18675
  disabled: !canEdit,
18672
18676
  className: SELECT_CLS2,
18673
- children: chunk73S5EOD3_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18677
+ children: chunkP2COO2QO_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18674
18678
  }
18675
18679
  )
18676
18680
  ] })
@@ -18701,7 +18705,7 @@ function ConnectorPanel({
18701
18705
  function GroupInfoPanel({
18702
18706
  selectedElement
18703
18707
  }) {
18704
- const { t } = chunk73S5EOD3_js.useTranslation();
18708
+ const { t } = chunkP2COO2QO_js.useTranslation();
18705
18709
  if (selectedElement.type !== "group") {
18706
18710
  return null;
18707
18711
  }
@@ -18716,7 +18720,7 @@ function OlePropertiesPanel({
18716
18720
  canEdit,
18717
18721
  onUpdateElement
18718
18722
  }) {
18719
- const { t } = chunk73S5EOD3_js.useTranslation();
18723
+ const { t } = chunkP2COO2QO_js.useTranslation();
18720
18724
  const [isEditorOpen, setIsEditorOpen] = React108.useState(false);
18721
18725
  if (selectedElement.type !== "ole") {
18722
18726
  return null;
@@ -18761,7 +18765,7 @@ function OlePropertiesPanel({
18761
18765
  /* @__PURE__ */ jsxRuntime.jsx(
18762
18766
  "span",
18763
18767
  {
18764
- className: chunk73S5EOD3_js.cn(
18768
+ className: chunkP2COO2QO_js.cn(
18765
18769
  "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium",
18766
18770
  ole.isLinked ? "bg-blue-500/20 text-blue-400" : "bg-green-500/20 text-green-400"
18767
18771
  ),
@@ -18814,7 +18818,7 @@ function LayerOrderButtons({
18814
18818
  "button",
18815
18819
  {
18816
18820
  type: "button",
18817
- className: chunk73S5EOD3_js.cn("flex-1", BTN2),
18821
+ className: chunkP2COO2QO_js.cn("flex-1", BTN2),
18818
18822
  disabled: !canEdit,
18819
18823
  onClick: () => onMoveLayer("forward"),
18820
18824
  children: "\u2191 Forward"
@@ -18824,7 +18828,7 @@ function LayerOrderButtons({
18824
18828
  "button",
18825
18829
  {
18826
18830
  type: "button",
18827
- className: chunk73S5EOD3_js.cn("flex-1", BTN2),
18831
+ className: chunkP2COO2QO_js.cn("flex-1", BTN2),
18828
18832
  disabled: !canEdit,
18829
18833
  onClick: () => onMoveLayer("backward"),
18830
18834
  children: "\u2193 Backward"
@@ -18838,7 +18842,7 @@ function ArtisticEffectsGallery({
18838
18842
  canEdit,
18839
18843
  updateEffects
18840
18844
  }) {
18841
- const { t } = chunk73S5EOD3_js.useTranslation();
18845
+ const { t } = chunkP2COO2QO_js.useTranslation();
18842
18846
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18843
18847
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.image.artisticEffects") }),
18844
18848
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: pptx.ARTISTIC_EFFECTS.map(([effectName, tKey, cssFilter]) => {
@@ -18848,7 +18852,7 @@ function ArtisticEffectsGallery({
18848
18852
  {
18849
18853
  type: "button",
18850
18854
  disabled: !canEdit,
18851
- className: chunk73S5EOD3_js.cn(
18855
+ className: chunkP2COO2QO_js.cn(
18852
18856
  "flex flex-col items-center gap-0.5 rounded border p-0.5 hover:bg-accent/50",
18853
18857
  isActive ? "border-primary bg-primary/10" : "border-border"
18854
18858
  ),
@@ -18883,7 +18887,7 @@ function ColorChangeSection({
18883
18887
  canEdit,
18884
18888
  updateEffects
18885
18889
  }) {
18886
- const { t } = chunk73S5EOD3_js.useTranslation();
18890
+ const { t } = chunkP2COO2QO_js.useTranslation();
18887
18891
  const cc = fx?.clrChange;
18888
18892
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18889
18893
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-2", children: [
@@ -18910,7 +18914,7 @@ function ColorChangeSection({
18910
18914
  DebouncedColorInput,
18911
18915
  {
18912
18916
  disabled: !canEdit,
18913
- value: chunk73S5EOD3_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18917
+ value: chunkP2COO2QO_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18914
18918
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18915
18919
  onCommit: (hex) => updateEffects({
18916
18920
  clrChange: {
@@ -18928,7 +18932,7 @@ function ColorChangeSection({
18928
18932
  DebouncedColorInput,
18929
18933
  {
18930
18934
  disabled: !canEdit || Boolean(cc.clrToTransparent),
18931
- value: chunk73S5EOD3_js.normalizeHexColor(cc.clrTo, "#000000"),
18935
+ value: chunkP2COO2QO_js.normalizeHexColor(cc.clrTo, "#000000"),
18932
18936
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18933
18937
  onCommit: (hex) => updateEffects({
18934
18938
  clrChange: {
@@ -18965,7 +18969,7 @@ function ColorWashSection({
18965
18969
  canEdit,
18966
18970
  updateEffects
18967
18971
  }) {
18968
- const { t } = chunk73S5EOD3_js.useTranslation();
18972
+ const { t } = chunkP2COO2QO_js.useTranslation();
18969
18973
  const wash = fx?.colorWash;
18970
18974
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18971
18975
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-2", children: [
@@ -18988,7 +18992,7 @@ function ColorWashSection({
18988
18992
  DebouncedColorInput,
18989
18993
  {
18990
18994
  disabled: !canEdit,
18991
- value: chunk73S5EOD3_js.normalizeHexColor(wash.color, "#0066cc"),
18995
+ value: chunkP2COO2QO_js.normalizeHexColor(wash.color, "#0066cc"),
18992
18996
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18993
18997
  onCommit: (hex) => updateEffects({
18994
18998
  colorWash: { color: hex, opacity: wash.opacity ?? 40 }
@@ -19065,7 +19069,7 @@ function DuotonePanel({
19065
19069
  canEdit,
19066
19070
  onUpdateElement
19067
19071
  }) {
19068
- const { t } = chunk73S5EOD3_js.useTranslation();
19072
+ const { t } = chunkP2COO2QO_js.useTranslation();
19069
19073
  const effects = "imageEffects" in selectedElement ? selectedElement.imageEffects : void 0;
19070
19074
  const commitDuotone = React108.useCallback(
19071
19075
  (color1, color2) => {
@@ -19086,8 +19090,8 @@ function DuotonePanel({
19086
19090
  }
19087
19091
  });
19088
19092
  }, [effects, onUpdateElement]);
19089
- const shadowColor = chunk73S5EOD3_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
19090
- const highlightColor = chunk73S5EOD3_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
19093
+ const shadowColor = chunkP2COO2QO_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
19094
+ const highlightColor = chunkP2COO2QO_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
19091
19095
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px]", children: [
19092
19096
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground font-medium", children: t("pptx.image.duotone") }),
19093
19097
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
@@ -19118,7 +19122,7 @@ function DuotonePanel({
19118
19122
  ] }),
19119
19123
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
19120
19124
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-[10px]", children: t("pptx.image.duotonePresets") }),
19121
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunkYQ67KAQR_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
19125
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunkNRTPKXZX_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
19122
19126
  "button",
19123
19127
  {
19124
19128
  type: "button",
@@ -19154,7 +19158,7 @@ function ImageAdjustmentsPanel({
19154
19158
  canEdit,
19155
19159
  onUpdateElement
19156
19160
  }) {
19157
- const { t } = chunk73S5EOD3_js.useTranslation();
19161
+ const { t } = chunkP2COO2QO_js.useTranslation();
19158
19162
  const effects = React108.useMemo(
19159
19163
  () => "imageEffects" in selectedElement ? selectedElement.imageEffects : void 0,
19160
19164
  [selectedElement]
@@ -19255,7 +19259,7 @@ function ImageCropSection({
19255
19259
  canEdit,
19256
19260
  onUpdateElement
19257
19261
  }) {
19258
- const { t } = chunk73S5EOD3_js.useTranslation();
19262
+ const { t } = chunkP2COO2QO_js.useTranslation();
19259
19263
  if (!pptx$1.isImageLikeElement(selectedElement)) {
19260
19264
  return null;
19261
19265
  }
@@ -19273,7 +19277,7 @@ function ImageCropSection({
19273
19277
  max: MAX_CROP_PERCENT,
19274
19278
  disabled: !croppable,
19275
19279
  className: "accent-primary",
19276
- value: Math.round(chunk73S5EOD3_js.clampCropValue(selectedElement[key]) * 100),
19280
+ value: Math.round(chunkP2COO2QO_js.clampCropValue(selectedElement[key]) * 100),
19277
19281
  onChange: (e) => onUpdateElement({
19278
19282
  [key]: Number(e.target.value) / 100
19279
19283
  })
@@ -19320,7 +19324,7 @@ function ImagePropertiesPanel({
19320
19324
  canEdit,
19321
19325
  onUpdateElement
19322
19326
  }) {
19323
- const { t } = chunk73S5EOD3_js.useTranslation();
19327
+ const { t } = chunkP2COO2QO_js.useTranslation();
19324
19328
  const fx = selectedElement.imageEffects;
19325
19329
  const updateEffects = (patch) => {
19326
19330
  onUpdateElement({
@@ -19337,7 +19341,7 @@ function ImagePropertiesPanel({
19337
19341
  {
19338
19342
  rows: 2,
19339
19343
  disabled: !canEdit,
19340
- className: chunk73S5EOD3_js.cn(INPUT2, "resize-none text-[11px]"),
19344
+ className: chunkP2COO2QO_js.cn(INPUT2, "resize-none text-[11px]"),
19341
19345
  value: selectedElement.altText ?? "",
19342
19346
  onChange: (e) => onUpdateElement({
19343
19347
  altText: e.target.value
@@ -19525,7 +19529,7 @@ function InspectorFields({
19525
19529
  liveTarget,
19526
19530
  livePatch
19527
19531
  }) {
19528
- const { t } = chunk73S5EOD3_js.useTranslation();
19532
+ const { t } = chunkP2COO2QO_js.useTranslation();
19529
19533
  const views = pptx.resolveInspectorSections(sections, target);
19530
19534
  const change = (sectionId, fieldId, raw) => {
19531
19535
  const patch = pptx.inspectorFieldPatch(sections, sectionId, fieldId, target, raw);
@@ -19753,7 +19757,7 @@ function MediaInspector({
19753
19757
  durationSeconds,
19754
19758
  onUpdateElement
19755
19759
  }) {
19756
- const { t } = chunk73S5EOD3_js.useTranslation();
19760
+ const { t } = chunkP2COO2QO_js.useTranslation();
19757
19761
  const trimStartMs = element.trimStartMs ?? 0;
19758
19762
  const trimEndMs = element.trimEndMs ?? 0;
19759
19763
  const durationMs = durationSeconds * 1e3;
@@ -19983,7 +19987,7 @@ function MediaPlaybackBookmarks({
19983
19987
  onUpdateElement,
19984
19988
  onSeekTo
19985
19989
  }) {
19986
- const { t } = chunk73S5EOD3_js.useTranslation();
19990
+ const { t } = chunkP2COO2QO_js.useTranslation();
19987
19991
  const [newBookmarkLabel, setNewBookmarkLabel] = React108.useState("");
19988
19992
  const volumePercent = Math.round((element.volume ?? 1) * 100);
19989
19993
  const handleAddBookmark = React108.useCallback(() => {
@@ -20233,7 +20237,7 @@ function MediaPropertiesPanel({
20233
20237
  canEdit,
20234
20238
  onUpdateElement
20235
20239
  }) {
20236
- const { t } = chunk73S5EOD3_js.useTranslation();
20240
+ const { t } = chunkP2COO2QO_js.useTranslation();
20237
20241
  const mediaRef = React108.useRef(null);
20238
20242
  const [isPlaying, setIsPlaying] = React108.useState(false);
20239
20243
  const [currentTime, setCurrentTime] = React108.useState(0);
@@ -20467,7 +20471,7 @@ function AccessibilityTextSection({
20467
20471
  canEdit,
20468
20472
  onUpdateElement
20469
20473
  }) {
20470
- const { t } = chunk73S5EOD3_js.useTranslation();
20474
+ const { t } = chunkP2COO2QO_js.useTranslation();
20471
20475
  const fields = pptx.getNonVisualDescriptionFields(selectedElement);
20472
20476
  if (!fields.showAltText && !fields.showTitle) {
20473
20477
  return null;
@@ -20482,7 +20486,7 @@ function AccessibilityTextSection({
20482
20486
  rows: 2,
20483
20487
  disabled: !canEdit,
20484
20488
  placeholder: t("pptx.elementAccessibility.altTextPlaceholder"),
20485
- className: chunk73S5EOD3_js.cn(INPUT2, "resize-none text-[11px]"),
20489
+ className: chunkP2COO2QO_js.cn(INPUT2, "resize-none text-[11px]"),
20486
20490
  value: fields.altText,
20487
20491
  onChange: (e) => onUpdateElement({ altText: e.target.value })
20488
20492
  }
@@ -20496,7 +20500,7 @@ function AccessibilityTextSection({
20496
20500
  type: "text",
20497
20501
  disabled: !canEdit,
20498
20502
  placeholder: t("pptx.elementAccessibility.titlePlaceholder"),
20499
- className: chunk73S5EOD3_js.cn(INPUT2, "text-[11px]"),
20503
+ className: chunkP2COO2QO_js.cn(INPUT2, "text-[11px]"),
20500
20504
  value: fields.title,
20501
20505
  onChange: (e) => onUpdateElement({ title: e.target.value })
20502
20506
  }
@@ -20524,7 +20528,7 @@ function RecentColorsRow({
20524
20528
  disabled,
20525
20529
  onCommit
20526
20530
  }) {
20527
- const { t } = chunk73S5EOD3_js.useTranslation();
20531
+ const { t } = chunkP2COO2QO_js.useTranslation();
20528
20532
  const { recentColors, pushColor } = useRecentColors();
20529
20533
  const shown = recentColors.length > 0;
20530
20534
  const ref = React108.useRef(null);
@@ -20566,7 +20570,7 @@ function ThemeColorSwatchGrid({
20566
20570
  selectedHex,
20567
20571
  onPick
20568
20572
  }) {
20569
- const { t } = chunk73S5EOD3_js.useTranslation();
20573
+ const { t } = chunkP2COO2QO_js.useTranslation();
20570
20574
  const themeColorMap = useThemeColorMap();
20571
20575
  const columns = React108.useMemo(
20572
20576
  () => pptx.buildThemeColorSwatchGrid(themeColorMap, (key, params) => t(key, params)),
@@ -20613,7 +20617,7 @@ function SelectRow({
20613
20617
  options,
20614
20618
  onChange
20615
20619
  }) {
20616
- const { t } = chunk73S5EOD3_js.useTranslation();
20620
+ const { t } = chunkP2COO2QO_js.useTranslation();
20617
20621
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: `flex flex-col gap-1 ${span2 ? COL2 : ""}`, children: [
20618
20622
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: label }),
20619
20623
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -20637,14 +20641,14 @@ function ColorPickerRow({
20637
20641
  onChange,
20638
20642
  styleChange
20639
20643
  }) {
20640
- const { t } = chunk73S5EOD3_js.useTranslation();
20644
+ const { t } = chunkP2COO2QO_js.useTranslation();
20641
20645
  const { pushColor } = useRecentColors();
20642
20646
  const commit = (color, ref) => {
20643
20647
  onChange(color, ref);
20644
20648
  pushColor(color);
20645
20649
  };
20646
20650
  const handleEyedropper = async () => {
20647
- const color = await chunk73S5EOD3_js.openNativeEyeDropper();
20651
+ const color = await chunkP2COO2QO_js.openNativeEyeDropper();
20648
20652
  if (color) {
20649
20653
  commit(color);
20650
20654
  }
@@ -20717,7 +20721,7 @@ function GradientStopRow({
20717
20721
  onUpdate,
20718
20722
  allStops
20719
20723
  }) {
20720
- const { t } = chunk73S5EOD3_js.useTranslation();
20724
+ const { t } = chunkP2COO2QO_js.useTranslation();
20721
20725
  const { pushColor } = useRecentColors();
20722
20726
  const commitRecentColor = useRecentColorCommit();
20723
20727
  const patchStop = (patch) => {
@@ -20730,9 +20734,9 @@ function GradientStopRow({
20730
20734
  "input",
20731
20735
  {
20732
20736
  type: "color",
20733
- value: chunk73S5EOD3_js.normalizeHexColor(stop2.color, "#3b82f6"),
20737
+ value: chunkP2COO2QO_js.normalizeHexColor(stop2.color, "#3b82f6"),
20734
20738
  ref: commitRecentColor,
20735
- onChange: (e) => patchStop({ color: chunk73S5EOD3_js.normalizeHexColor(e.target.value, "#3b82f6"), colorRef: void 0 }),
20739
+ onChange: (e) => patchStop({ color: chunkP2COO2QO_js.normalizeHexColor(e.target.value, "#3b82f6"), colorRef: void 0 }),
20736
20740
  className: "h-7 w-10 rounded border border-border bg-muted"
20737
20741
  }
20738
20742
  ),
@@ -20807,7 +20811,7 @@ function FillAdvancedControls({
20807
20811
  onUpdateGradientStops,
20808
20812
  onSetFillColor: _onSetFillColor
20809
20813
  }) {
20810
- const { t } = chunk73S5EOD3_js.useTranslation();
20814
+ const { t } = chunkP2COO2QO_js.useTranslation();
20811
20815
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20812
20816
  showGradient && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20813
20817
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -20861,7 +20865,7 @@ function FillAdvancedControls({
20861
20865
  onClick: () => onUpdateGradientStops([
20862
20866
  ...gradientStops,
20863
20867
  {
20864
- color: chunk73S5EOD3_js.normalizeHexColor(style?.fillColor, chunk73S5EOD3_js.DEFAULT_FILL_COLOR),
20868
+ color: chunkP2COO2QO_js.normalizeHexColor(style?.fillColor, chunkP2COO2QO_js.DEFAULT_FILL_COLOR),
20865
20869
  position: 50,
20866
20870
  opacity: 1
20867
20871
  }
@@ -20875,9 +20879,9 @@ function FillAdvancedControls({
20875
20879
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${COL2} flex flex-col gap-2`, children: [
20876
20880
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: "Pattern" }),
20877
20881
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-8 gap-1 max-h-48 overflow-y-auto rounded border border-border p-2", children: PATTERN_PRESET_OPTIONS.map((opt) => {
20878
- const fgColor = chunk73S5EOD3_js.normalizeHexColor(style?.fillColor, chunk73S5EOD3_js.DEFAULT_FILL_COLOR);
20879
- const bgColor = chunk73S5EOD3_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
20880
- const svgPattern = chunk73S5EOD3_js.getPatternSvg(opt.value, fgColor, bgColor);
20882
+ const fgColor = chunkP2COO2QO_js.normalizeHexColor(style?.fillColor, chunkP2COO2QO_js.DEFAULT_FILL_COLOR);
20883
+ const bgColor = chunkP2COO2QO_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
20884
+ const svgPattern = chunkP2COO2QO_js.getPatternSvg(opt.value, fgColor, bgColor);
20881
20885
  const isSelected = (style.fillPatternPreset || "pct20") === opt.value;
20882
20886
  return /* @__PURE__ */ jsxRuntime.jsx(
20883
20887
  "button",
@@ -20910,7 +20914,7 @@ function FillAdvancedControls({
20910
20914
  {
20911
20915
  label: t("pptx.fillAdvanced.foregroundColor"),
20912
20916
  prefix: "pattern-fg",
20913
- value: chunk73S5EOD3_js.normalizeHexColor(style?.fillColor, chunk73S5EOD3_js.DEFAULT_FILL_COLOR),
20917
+ value: chunkP2COO2QO_js.normalizeHexColor(style?.fillColor, chunkP2COO2QO_js.DEFAULT_FILL_COLOR),
20914
20918
  disabled: isLine,
20915
20919
  onChange: (color) => onUpdateShapeStyle(patternForeground(color)),
20916
20920
  styleChange: patternForeground
@@ -20921,7 +20925,7 @@ function FillAdvancedControls({
20921
20925
  {
20922
20926
  label: t("pptx.fillAdvanced.backgroundColor"),
20923
20927
  prefix: "pattern-bg",
20924
- value: chunk73S5EOD3_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
20928
+ value: chunkP2COO2QO_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
20925
20929
  disabled: isLine,
20926
20930
  onChange: (color) => onUpdateShapeStyle(patternBackground(color)),
20927
20931
  styleChange: patternBackground
@@ -20986,7 +20990,7 @@ var QUICK_STYLES = pptx.buildQuickStylesGallery();
20986
20990
  function QuickStylesGallery({
20987
20991
  onUpdateShapeStyle
20988
20992
  }) {
20989
- const { t } = chunk73S5EOD3_js.useTranslation();
20993
+ const { t } = chunkP2COO2QO_js.useTranslation();
20990
20994
  const ref = React108.useRef(null);
20991
20995
  React108.useLayoutEffect(() => {
20992
20996
  const gallery = ref.current;
@@ -21023,14 +21027,14 @@ function StrokeEffectsSection({
21023
21027
  onUpdateShapeStyle,
21024
21028
  onSetStrokeColor
21025
21029
  }) {
21026
- const { t } = chunk73S5EOD3_js.useTranslation();
21030
+ const { t } = chunkP2COO2QO_js.useTranslation();
21027
21031
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21028
21032
  /* @__PURE__ */ jsxRuntime.jsx(
21029
21033
  ColorPickerRow,
21030
21034
  {
21031
21035
  label: t("pptx.inspector.stroke"),
21032
21036
  prefix: "stroke",
21033
- value: chunk73S5EOD3_js.normalizeHexColor(style?.strokeColor, chunk73S5EOD3_js.DEFAULT_STROKE_COLOR),
21037
+ value: chunkP2COO2QO_js.normalizeHexColor(style?.strokeColor, chunkP2COO2QO_js.DEFAULT_STROKE_COLOR),
21034
21038
  selectedRef: style?.strokeColorRef,
21035
21039
  onChange: onSetStrokeColor,
21036
21040
  styleChange: (hex, current) => pptx.shapeOutlineChange(hex, void 0, current)
@@ -21073,7 +21077,7 @@ function FillStrokeProperties({
21073
21077
  onSetFillColor,
21074
21078
  onSetStrokeColor
21075
21079
  }) {
21076
- const { t } = chunk73S5EOD3_js.useTranslation();
21080
+ const { t } = chunkP2COO2QO_js.useTranslation();
21077
21081
  const line = isLineish(selectedElement, selectedShapeType);
21078
21082
  const style = selectedShapeStyle;
21079
21083
  const handleFillModeChange = (nextMode) => {
@@ -21089,10 +21093,10 @@ function FillStrokeProperties({
21089
21093
  return;
21090
21094
  }
21091
21095
  if (nextMode === "gradient") {
21092
- const existing = chunk73S5EOD3_js.sanitizeGradientStops(style?.fillGradientStops);
21096
+ const existing = chunkP2COO2QO_js.sanitizeGradientStops(style?.fillGradientStops);
21093
21097
  const stops = existing.length >= 2 ? existing : [
21094
21098
  {
21095
- color: chunk73S5EOD3_js.normalizeHexColor(style?.fillColor, chunk73S5EOD3_js.DEFAULT_FILL_COLOR),
21099
+ color: chunkP2COO2QO_js.normalizeHexColor(style?.fillColor, chunkP2COO2QO_js.DEFAULT_FILL_COLOR),
21096
21100
  position: 0,
21097
21101
  opacity: 1
21098
21102
  },
@@ -21117,7 +21121,7 @@ function FillStrokeProperties({
21117
21121
  onUpdateShapeStyle({ fillMode: "solid" });
21118
21122
  };
21119
21123
  const gradientStops = selectedGradientStops.length > 0 ? selectedGradientStops : [
21120
- { color: chunk73S5EOD3_js.DEFAULT_FILL_COLOR, position: 0 },
21124
+ { color: chunkP2COO2QO_js.DEFAULT_FILL_COLOR, position: 0 },
21121
21125
  { color: "#ffffff", position: 100 }
21122
21126
  ];
21123
21127
  const showGradient = style?.fillMode === "gradient" || selectedGradientStops.length > 0;
@@ -21144,7 +21148,7 @@ function FillStrokeProperties({
21144
21148
  {
21145
21149
  label: t("pptx.fill.fill"),
21146
21150
  prefix: "fill",
21147
- value: chunk73S5EOD3_js.normalizeHexColor(style?.fillColor, chunk73S5EOD3_js.DEFAULT_FILL_COLOR),
21151
+ value: chunkP2COO2QO_js.normalizeHexColor(style?.fillColor, chunkP2COO2QO_js.DEFAULT_FILL_COLOR),
21148
21152
  selectedRef: style?.fillColorRef,
21149
21153
  disabled: line,
21150
21154
  onChange: onSetFillColor,
@@ -21182,7 +21186,7 @@ function Text3DProperties({
21182
21186
  ts,
21183
21187
  onUpdateTextStyle
21184
21188
  }) {
21185
- const { t } = chunk73S5EOD3_js.useTranslation();
21189
+ const { t } = chunkP2COO2QO_js.useTranslation();
21186
21190
  const commitRecentColor = useRecentColorCommit();
21187
21191
  const t3d = ts?.text3d;
21188
21192
  const hasExtrusion = Boolean(t3d?.extrusionHeight && t3d.extrusionHeight > 0);
@@ -21229,7 +21233,7 @@ function Text3DProperties({
21229
21233
  "input",
21230
21234
  {
21231
21235
  type: "color",
21232
- value: chunk73S5EOD3_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21236
+ value: chunkP2COO2QO_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21233
21237
  ref: commitRecentColor,
21234
21238
  onChange: (e) => update3d({ extrusionColor: e.target.value }),
21235
21239
  className: COLOR_CLS
@@ -21396,7 +21400,7 @@ function AdvancedTextFormatting({
21396
21400
  onUpdateTextStyle,
21397
21401
  numChange
21398
21402
  }) {
21399
- const { t } = chunk73S5EOD3_js.useTranslation();
21403
+ const { t } = chunkP2COO2QO_js.useTranslation();
21400
21404
  const commitRecentColor = useRecentColorCommit();
21401
21405
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 rounded border border-border bg-card p-2 space-y-2", children: [
21402
21406
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] uppercase tracking-wide text-muted-foreground", children: t("pptx.textProperties.advancedTextHeading") }),
@@ -21418,7 +21422,7 @@ function AdvancedTextFormatting({
21418
21422
  "input",
21419
21423
  {
21420
21424
  type: "color",
21421
- value: chunk73S5EOD3_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21425
+ value: chunkP2COO2QO_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21422
21426
  ref: commitRecentColor,
21423
21427
  onChange: (e) => onUpdateTextStyle({ highlightColor: e.target.value }),
21424
21428
  disabled: !canEdit,
@@ -21560,7 +21564,7 @@ function TextReflectionSection({
21560
21564
  onUpdateTextStyle,
21561
21565
  numChange
21562
21566
  }) {
21563
- const { t } = chunk73S5EOD3_js.useTranslation();
21567
+ const { t } = chunkP2COO2QO_js.useTranslation();
21564
21568
  const hasReflection = Boolean(ts?.textReflection);
21565
21569
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
21566
21570
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "inline-flex items-center gap-2 text-foreground", children: [
@@ -21668,7 +21672,7 @@ function TextEffectsPanel({
21668
21672
  onUpdateTextStyle,
21669
21673
  numChange
21670
21674
  }) {
21671
- const { t } = chunk73S5EOD3_js.useTranslation();
21675
+ const { t } = chunkP2COO2QO_js.useTranslation();
21672
21676
  const commitRecentColor = useRecentColorCommit();
21673
21677
  const hasShadow = Boolean(
21674
21678
  ts?.textShadowColor || typeof ts?.textShadowBlur === "number" && ts.textShadowBlur > 0
@@ -21714,7 +21718,7 @@ function TextEffectsPanel({
21714
21718
  "input",
21715
21719
  {
21716
21720
  type: "color",
21717
- value: chunk73S5EOD3_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21721
+ value: chunkP2COO2QO_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21718
21722
  ref: commitRecentColor,
21719
21723
  onChange: (e) => onUpdateTextStyle({ textShadowColor: e.target.value }),
21720
21724
  className: COLOR_CLS2
@@ -21819,7 +21823,7 @@ function TextEffectsPanel({
21819
21823
  "input",
21820
21824
  {
21821
21825
  type: "color",
21822
- value: chunk73S5EOD3_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
21826
+ value: chunkP2COO2QO_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
21823
21827
  ref: commitRecentColor,
21824
21828
  onChange: (e) => onUpdateTextStyle({ textGlowColor: e.target.value }),
21825
21829
  className: COLOR_CLS2
@@ -21869,7 +21873,7 @@ function TextWarpGallery({
21869
21873
  ts,
21870
21874
  onUpdateTextStyle
21871
21875
  }) {
21872
- const { t } = chunk73S5EOD3_js.useTranslation();
21876
+ const { t } = chunkP2COO2QO_js.useTranslation();
21873
21877
  const [expanded, setExpanded] = React108__default.default.useState(false);
21874
21878
  const currentPreset = ts?.textWarpPreset || "textNoShape";
21875
21879
  const descriptor = React108.useMemo(() => pptx.buildTextWarpGallery(ts?.textWarpPreset), [ts?.textWarpPreset]);
@@ -21950,7 +21954,7 @@ function ShapeTextPanels({
21950
21954
  onUpdateElementStyle,
21951
21955
  onUpdateTextStyle
21952
21956
  }) {
21953
- const { t } = chunk73S5EOD3_js.useTranslation();
21957
+ const { t } = chunkP2COO2QO_js.useTranslation();
21954
21958
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21955
21959
  pptx$1.hasShapeProperties(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
21956
21960
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.shape.type", "Shape Type") }),
@@ -21959,11 +21963,11 @@ function ShapeTextPanels({
21959
21963
  {
21960
21964
  value: selectedElement.shapeType || "rect",
21961
21965
  disabled: !canEdit,
21962
- className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
21966
+ className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
21963
21967
  onChange: (e) => onUpdateElement({
21964
21968
  shapeType: e.target.value
21965
21969
  }),
21966
- children: chunk73S5EOD3_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
21970
+ children: chunkP2COO2QO_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
21967
21971
  }
21968
21972
  )
21969
21973
  ] }),
@@ -21975,7 +21979,7 @@ function ShapeTextPanels({
21975
21979
  selectedElement,
21976
21980
  selectedShapeStyle: selectedElement.shapeStyle,
21977
21981
  selectedShapeType: selectedElement.shapeType,
21978
- selectedGradientStops: chunk73S5EOD3_js.sanitizeGradientStops(
21982
+ selectedGradientStops: chunkP2COO2QO_js.sanitizeGradientStops(
21979
21983
  selectedElement.shapeStyle?.fillGradientStops
21980
21984
  ),
21981
21985
  canEdit,
@@ -22011,7 +22015,7 @@ function ShapeTextPanels({
22011
22015
  {
22012
22016
  disabled: !canEdit,
22013
22017
  "aria-label": "Text Color",
22014
- value: chunk73S5EOD3_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
22018
+ value: chunkP2COO2QO_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
22015
22019
  className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
22016
22020
  onApply: (hex) => onUpdateTextStyle({ color: hex, colorRef: void 0 }),
22017
22021
  patch: textColorPatch
@@ -22102,7 +22106,7 @@ function TextFormatToggle({
22102
22106
  {
22103
22107
  type: "button",
22104
22108
  disabled,
22105
- className: chunk73S5EOD3_js.cn(
22109
+ className: chunkP2COO2QO_js.cn(
22106
22110
  "px-2 py-1 rounded text-[11px] transition-colors max-md:min-w-[44px]! max-md:min-h-[44px]!",
22107
22111
  italic && "italic",
22108
22112
  underline && "underline",
@@ -22271,7 +22275,7 @@ function SmartArtLayoutSwitcher({
22271
22275
  canEdit,
22272
22276
  onUpdateSmartArt
22273
22277
  }) {
22274
- const { t } = chunk73S5EOD3_js.useTranslation();
22278
+ const { t } = chunkP2COO2QO_js.useTranslation();
22275
22279
  const currentLayout = smartArtData.resolvedLayoutType ?? "list";
22276
22280
  const handleLayoutSwitch = (newLayout) => {
22277
22281
  if (!canEdit || newLayout === currentLayout) {
@@ -22290,7 +22294,7 @@ function SmartArtLayoutSwitcher({
22290
22294
  type: "button",
22291
22295
  "data-testid": `smartart-layout-${type}`,
22292
22296
  disabled: !canEdit,
22293
- className: chunk73S5EOD3_js.cn(
22297
+ className: chunkP2COO2QO_js.cn(
22294
22298
  "flex flex-col items-center gap-0.5 rounded border p-1.5 transition-colors",
22295
22299
  "text-[9px] leading-tight",
22296
22300
  isActive ? "border-primary bg-primary/15 text-primary" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground",
@@ -22317,7 +22321,7 @@ function SmartArtStyleControls({
22317
22321
  onChangeColorScheme,
22318
22322
  onChangeStyle
22319
22323
  }) {
22320
- const { t } = chunk73S5EOD3_js.useTranslation();
22324
+ const { t } = chunkP2COO2QO_js.useTranslation();
22321
22325
  const translate = React108__default.default.useCallback((key) => t(key), [t]);
22322
22326
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22323
22327
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
@@ -22328,7 +22332,7 @@ function SmartArtStyleControls({
22328
22332
  disabled: !canEdit,
22329
22333
  "data-testid": "smartart-color-scheme",
22330
22334
  "aria-label": t("pptx.smartart.colorScheme"),
22331
- className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
22335
+ className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
22332
22336
  value: colorScheme,
22333
22337
  onChange: (e) => onChangeColorScheme(e.target.value),
22334
22338
  children: colorSchemes.map((cs) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: cs, children: pptx.schemaLabel(pptx.SMARTART_COLOR_SCHEME_LABEL_KEYS, cs, translate) }, cs))
@@ -22343,7 +22347,7 @@ function SmartArtStyleControls({
22343
22347
  type: "button",
22344
22348
  disabled: !canEdit,
22345
22349
  "aria-pressed": style === s,
22346
- className: chunk73S5EOD3_js.cn(
22350
+ className: chunkP2COO2QO_js.cn(
22347
22351
  "flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
22348
22352
  style === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
22349
22353
  ),
@@ -22369,14 +22373,14 @@ function SmartArtPropertiesPanel({
22369
22373
  onUpdateElement,
22370
22374
  box
22371
22375
  }) {
22372
- const { t } = chunk73S5EOD3_js.useTranslation();
22376
+ const { t } = chunkP2COO2QO_js.useTranslation();
22373
22377
  const { pushColor } = useRecentColors();
22374
22378
  const paneRef = React108__default.default.useRef(null);
22375
22379
  const applySmartArtData = (newData) => {
22376
22380
  const reflowed = box ? pptx.rebuildDrawingShapesIfCleared(
22377
22381
  newData,
22378
22382
  newData.layout,
22379
- chunkYQ67KAQR_js.resolveSmartArtDataPalette(newData),
22383
+ chunkNRTPKXZX_js.resolveSmartArtDataPalette(newData),
22380
22384
  newData.style ?? "flat",
22381
22385
  "inspector",
22382
22386
  box
@@ -22447,9 +22451,9 @@ function TableDataGrid({
22447
22451
  canEdit,
22448
22452
  onUpdateElement
22449
22453
  }) {
22450
- const { t } = chunk73S5EOD3_js.useTranslation();
22454
+ const { t } = chunkP2COO2QO_js.useTranslation();
22451
22455
  const grid = pptx.buildTableDataGrid(tableElement);
22452
- const { viewportWidth } = chunkYQ67KAQR_js.useIsMobile();
22456
+ const { viewportWidth } = chunkNRTPKXZX_js.useIsMobile();
22453
22457
  const gridPlan = pptx.getDenseGridLayoutPlan(viewportWidth);
22454
22458
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
22455
22459
  const stickyGutterClass = gridPlan.stickyFirstColumn ? "sticky left-0 z-10" : "";
@@ -22613,7 +22617,7 @@ function TableCellPatternFill({
22613
22617
  canEdit,
22614
22618
  onUpdateCellStyle
22615
22619
  }) {
22616
- const { t } = chunk73S5EOD3_js.useTranslation();
22620
+ const { t } = chunkP2COO2QO_js.useTranslation();
22617
22621
  const commitRecentColor = useRecentColorCommit();
22618
22622
  const translate = (key) => t(key);
22619
22623
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -22668,7 +22672,7 @@ function TableCellAdvancedFill({
22668
22672
  canEdit,
22669
22673
  onUpdateCellStyle
22670
22674
  }) {
22671
- const { t } = chunk73S5EOD3_js.useTranslation();
22675
+ const { t } = chunkP2COO2QO_js.useTranslation();
22672
22676
  const fillMode = cellStyle.fillMode ?? "solid";
22673
22677
  const handleFillModeChange = (mode) => {
22674
22678
  const next = mode;
@@ -22756,7 +22760,7 @@ function GradientControls({
22756
22760
  canEdit,
22757
22761
  onUpdateCellStyle
22758
22762
  }) {
22759
- const { t } = chunk73S5EOD3_js.useTranslation();
22763
+ const { t } = chunkP2COO2QO_js.useTranslation();
22760
22764
  const commitRecentColor = useRecentColorCommit();
22761
22765
  const stops = cellStyle.gradientFillStops ?? [];
22762
22766
  const gradType = cellStyle.gradientFillType ?? "linear";
@@ -22854,7 +22858,7 @@ function TableCellColorField({
22854
22858
  disabled,
22855
22859
  onCommit
22856
22860
  }) {
22857
- const hex = chunk73S5EOD3_js.normalizeHexColor(value, fallback);
22861
+ const hex = chunkP2COO2QO_js.normalizeHexColor(value, fallback);
22858
22862
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
22859
22863
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
22860
22864
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -22884,7 +22888,7 @@ function TableCellFormattingPanel({
22884
22888
  onUpdateTableData,
22885
22889
  onUpdateMergeRows
22886
22890
  }) {
22887
- const { t } = chunk73S5EOD3_js.useTranslation();
22891
+ const { t } = chunkP2COO2QO_js.useTranslation();
22888
22892
  const { rowIndex, columnIndex } = tableEditorState;
22889
22893
  const cell = td.rows[rowIndex]?.cells[columnIndex];
22890
22894
  if (!cell) {
@@ -22962,7 +22966,7 @@ function TableCellFormattingPanel({
22962
22966
  {
22963
22967
  type: "button",
22964
22968
  disabled: !canEdit,
22965
- className: chunk73S5EOD3_js.cn(
22969
+ className: chunkP2COO2QO_js.cn(
22966
22970
  "px-2 py-1 rounded text-[11px] transition-colors",
22967
22971
  cls,
22968
22972
  cs[key] ? "bg-primary text-white" : "bg-muted hover:bg-accent"
@@ -22981,7 +22985,7 @@ function TableCellFormattingPanel({
22981
22985
  {
22982
22986
  type: "button",
22983
22987
  disabled: !canEdit,
22984
- className: chunk73S5EOD3_js.cn(
22988
+ className: chunkP2COO2QO_js.cn(
22985
22989
  "px-2 py-1 rounded text-[11px] transition-colors",
22986
22990
  cs.align === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
22987
22991
  ),
@@ -22999,7 +23003,7 @@ function TableCellFormattingPanel({
22999
23003
  {
23000
23004
  type: "button",
23001
23005
  disabled: !canEdit,
23002
- className: chunk73S5EOD3_js.cn(
23006
+ className: chunkP2COO2QO_js.cn(
23003
23007
  "px-2 py-1 rounded text-[11px] transition-colors",
23004
23008
  cs.vAlign === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
23005
23009
  ),
@@ -23022,7 +23026,7 @@ function TableCellFormattingPanel({
23022
23026
  DebouncedColorInput,
23023
23027
  {
23024
23028
  disabled: !canEdit,
23025
- value: chunk73S5EOD3_js.normalizeHexColor(cs[colorKey], "#374151"),
23029
+ value: chunkP2COO2QO_js.normalizeHexColor(cs[colorKey], "#374151"),
23026
23030
  className: "w-7 h-6 rounded border border-border bg-transparent cursor-pointer shrink-0",
23027
23031
  onCommit: (hex) => updateCellStyle({ [colorKey]: hex })
23028
23032
  }
@@ -23032,7 +23036,7 @@ function TableCellFormattingPanel({
23032
23036
  {
23033
23037
  type: "number",
23034
23038
  disabled: !canEdit,
23035
- className: chunk73S5EOD3_js.cn(INPUT2, "w-14"),
23039
+ className: chunkP2COO2QO_js.cn(INPUT2, "w-14"),
23036
23040
  min: 0,
23037
23041
  max: 10,
23038
23042
  value: pptx.inspectorNumber(cs[widthKey], 1),
@@ -23048,7 +23052,7 @@ function TableCellFormattingPanel({
23048
23052
  {
23049
23053
  type: "button",
23050
23054
  disabled: !canEdit,
23051
- className: chunk73S5EOD3_js.cn(BTN2, "text-center"),
23055
+ className: chunkP2COO2QO_js.cn(BTN2, "text-center"),
23052
23056
  onClick: () => {
23053
23057
  const newRows = pptx.computeMergeCellRight(td, rowIndex, columnIndex);
23054
23058
  if (newRows) {
@@ -23063,7 +23067,7 @@ function TableCellFormattingPanel({
23063
23067
  {
23064
23068
  type: "button",
23065
23069
  disabled: !canEdit,
23066
- className: chunk73S5EOD3_js.cn(BTN2, "text-center"),
23070
+ className: chunkP2COO2QO_js.cn(BTN2, "text-center"),
23067
23071
  onClick: () => {
23068
23072
  const newRows = pptx.computeMergeCellDown(td, rowIndex, columnIndex);
23069
23073
  if (newRows) {
@@ -23078,7 +23082,7 @@ function TableCellFormattingPanel({
23078
23082
  {
23079
23083
  type: "button",
23080
23084
  disabled: !canEdit,
23081
- className: chunk73S5EOD3_js.cn(BTN2, "text-center"),
23085
+ className: chunkP2COO2QO_js.cn(BTN2, "text-center"),
23082
23086
  onClick: () => {
23083
23087
  const newRows = pptx.computeSplitCell(td, rowIndex, columnIndex);
23084
23088
  if (newRows) {
@@ -23097,7 +23101,7 @@ function TableStyleEditorFields({
23097
23101
  canEdit,
23098
23102
  onEdit
23099
23103
  }) {
23100
- const { t } = chunk73S5EOD3_js.useTranslation();
23104
+ const { t } = chunkP2COO2QO_js.useTranslation();
23101
23105
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
23102
23106
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
23103
23107
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.tableStyleEditor.fillSection") }),
@@ -23202,7 +23206,7 @@ function BorderSideRow({
23202
23206
  canEdit,
23203
23207
  onEdit
23204
23208
  }) {
23205
- const { t } = chunk73S5EOD3_js.useTranslation();
23209
+ const { t } = chunkP2COO2QO_js.useTranslation();
23206
23210
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-[11px]", children: [
23207
23211
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-28 shrink-0 text-muted-foreground", children: t(pptx.TABLE_STYLE_BORDER_SIDE_LABEL_KEYS[side]) }),
23208
23212
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -23259,7 +23263,7 @@ function TableStyleEditor({
23259
23263
  onAssignStyle,
23260
23264
  onClose
23261
23265
  }) {
23262
- const { t } = chunk73S5EOD3_js.useTranslation();
23266
+ const { t } = chunkP2COO2QO_js.useTranslation();
23263
23267
  const themeColorMap = useThemeColorMap();
23264
23268
  const [activeStyleId, setActiveStyleId] = React108.useState(
23265
23269
  styleId ? pptx$1.normalizeTableStyleGuid(styleId) : ""
@@ -23351,7 +23355,7 @@ function TablePropertiesPanel({
23351
23355
  onTableStyleMapChange,
23352
23356
  onDeleteTableStyle
23353
23357
  }) {
23354
- const { t } = chunk73S5EOD3_js.useTranslation();
23358
+ const { t } = chunkP2COO2QO_js.useTranslation();
23355
23359
  const [showStyleEditor, setShowStyleEditor] = React108.useState(false);
23356
23360
  const td = tableElement.tableData;
23357
23361
  if (!td) {
@@ -23433,7 +23437,7 @@ function TablePropertiesPanel({
23433
23437
  ] }),
23434
23438
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
23435
23439
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.table.stylePresets") }),
23436
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunk73S5EOD3_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23440
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunkP2COO2QO_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23437
23441
  "button",
23438
23442
  {
23439
23443
  type: "button",
@@ -23581,7 +23585,7 @@ function ElementInspectorBody({
23581
23585
  onUpdateTextStyle,
23582
23586
  onMoveLayer
23583
23587
  }) {
23584
- const { t } = chunk73S5EOD3_js.useTranslation();
23588
+ const { t } = chunkP2COO2QO_js.useTranslation();
23585
23589
  const isLocked = pptx.isElementLocked(selectedElement);
23586
23590
  const handleToggleLock = () => {
23587
23591
  if (!canEdit) {
@@ -23731,7 +23735,7 @@ function CommentMentionTextarea({
23731
23735
  className,
23732
23736
  ariaLabel
23733
23737
  }) {
23734
- const { t } = chunk73S5EOD3_js.useTranslation();
23738
+ const { t } = chunkP2COO2QO_js.useTranslation();
23735
23739
  const textareaRef = React108.useRef(null);
23736
23740
  const [caret, setCaret] = React108.useState(value.length);
23737
23741
  const [highlighted, setHighlighted] = React108.useState(0);
@@ -23820,7 +23824,7 @@ function CommentMentionTextarea({
23820
23824
  "data-testid": "pptx-comment-mention-option",
23821
23825
  role: "option",
23822
23826
  "aria-selected": index === safeHighlighted,
23823
- className: chunk73S5EOD3_js.cn(
23827
+ className: chunkP2COO2QO_js.cn(
23824
23828
  "block w-full px-2 py-1 text-left text-[11px] hover:bg-accent",
23825
23829
  index === safeHighlighted && "bg-accent"
23826
23830
  ),
@@ -23867,7 +23871,7 @@ function InspectorCommentReplyForm({
23867
23871
  onSubmit,
23868
23872
  onCancel
23869
23873
  }) {
23870
- const { t } = chunk73S5EOD3_js.useTranslation();
23874
+ const { t } = chunkP2COO2QO_js.useTranslation();
23871
23875
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 space-y-1.5 pl-3 border-l-2 border-l-primary/40", children: [
23872
23876
  /* @__PURE__ */ jsxRuntime.jsx(
23873
23877
  CommentMentionTextarea,
@@ -23933,7 +23937,7 @@ function InspectorCommentRow({
23933
23937
  onSelectElement,
23934
23938
  depth = 0
23935
23939
  }) {
23936
- const { t } = chunk73S5EOD3_js.useTranslation();
23940
+ const { t } = chunkP2COO2QO_js.useTranslation();
23937
23941
  const isEditing = editingCommentId === comment.id;
23938
23942
  const isReplying = replyingToCommentId === comment.id;
23939
23943
  const replyDraft = replyDraftByCommentId[comment.id] ?? "";
@@ -23943,7 +23947,7 @@ function InspectorCommentRow({
23943
23947
  return /* @__PURE__ */ jsxRuntime.jsxs(
23944
23948
  "div",
23945
23949
  {
23946
- className: chunk73S5EOD3_js.cn(
23950
+ className: chunkP2COO2QO_js.cn(
23947
23951
  "rounded border border-border bg-card p-2",
23948
23952
  depth > 0 && "ml-3 border-l-2 border-l-primary/40"
23949
23953
  ),
@@ -23957,7 +23961,7 @@ function InspectorCommentRow({
23957
23961
  t("pptx.comments.resolved")
23958
23962
  ] })
23959
23963
  ] }),
23960
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunk73S5EOD3_js.formatCommentTimestamp(comment.createdAt) })
23964
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunkP2COO2QO_js.formatCommentTimestamp(comment.createdAt) })
23961
23965
  ] }),
23962
23966
  comment.elementId && (targetElement ? /* @__PURE__ */ jsxRuntime.jsxs(
23963
23967
  "button",
@@ -23965,12 +23969,12 @@ function InspectorCommentRow({
23965
23969
  type: "button",
23966
23970
  className: "mt-1 inline-flex items-center gap-1 rounded bg-primary/20 px-1.5 py-0.5 text-[10px] text-primary hover:bg-primary/30 transition-colors",
23967
23971
  title: t("pptx.comments.commentingOn", {
23968
- element: chunk73S5EOD3_js.getElementLabel(targetElement)
23972
+ element: chunkP2COO2QO_js.getElementLabel(targetElement)
23969
23973
  }),
23970
23974
  onClick: () => onSelectElement(targetElement.id),
23971
23975
  children: [
23972
23976
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
23973
- chunk73S5EOD3_js.getElementLabel(targetElement)
23977
+ chunkP2COO2QO_js.getElementLabel(targetElement)
23974
23978
  ]
23975
23979
  }
23976
23980
  ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-1 inline-flex items-center gap-1 rounded bg-muted/60 px-1.5 py-0.5 text-[10px] text-muted-foreground", children: t("pptx.comments.deletedElement") })),
@@ -24039,7 +24043,7 @@ function InspectorCommentRow({
24039
24043
  "button",
24040
24044
  {
24041
24045
  type: "button",
24042
- className: chunk73S5EOD3_js.cn(
24046
+ className: chunkP2COO2QO_js.cn(
24043
24047
  "inline-flex items-center justify-center p-1.5 border-l border-border transition-colors",
24044
24048
  comment.resolved ? "bg-green-900/40 text-green-300 hover:bg-green-900/60" : "hover:bg-accent text-foreground hover:text-foreground"
24045
24049
  ),
@@ -24145,7 +24149,7 @@ function InspectorCommentsSection({
24145
24149
  onSubmitReply,
24146
24150
  onSelectElement
24147
24151
  }) {
24148
- const { t } = chunk73S5EOD3_js.useTranslation();
24152
+ const { t } = chunkP2COO2QO_js.useTranslation();
24149
24153
  const HEADING_CLS = "text-[11px] uppercase tracking-wide text-muted-foreground";
24150
24154
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
24151
24155
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
@@ -24182,7 +24186,7 @@ function InspectorCommentsSection({
24182
24186
  selectedElement && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-1 rounded bg-primary/20 px-1.5 py-0.5 text-[10px] text-primary", children: [
24183
24187
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
24184
24188
  t("pptx.comments.commentingOn", {
24185
- element: chunk73S5EOD3_js.getElementLabel(selectedElement)
24189
+ element: chunkP2COO2QO_js.getElementLabel(selectedElement)
24186
24190
  })
24187
24191
  ] }),
24188
24192
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -24193,7 +24197,7 @@ function InspectorCommentsSection({
24193
24197
  authors: commentAuthors,
24194
24198
  rows: 2,
24195
24199
  placeholder: selectedElement ? t("pptx.comments.addOnElement", {
24196
- element: chunk73S5EOD3_js.getElementLabel(selectedElement)
24200
+ element: chunkP2COO2QO_js.getElementLabel(selectedElement)
24197
24201
  }) : t("pptx.comments.addPlaceholder"),
24198
24202
  className: "w-full bg-muted border border-border rounded px-2 py-1 text-xs resize-y outline-none focus:border-primary",
24199
24203
  onChange: onSetCommentDraft,
@@ -24206,7 +24210,7 @@ function InspectorCommentsSection({
24206
24210
  type: "button",
24207
24211
  onClick: onAddComment,
24208
24212
  disabled: !commentDraft.trim(),
24209
- className: chunk73S5EOD3_js.cn(
24213
+ className: chunkP2COO2QO_js.cn(
24210
24214
  "w-full inline-flex items-center justify-center gap-1 rounded px-2 py-1 text-[11px] font-medium transition-colors max-md:min-h-[44px]!",
24211
24215
  commentDraft.trim() ? "bg-primary hover:bg-primary/80 text-white" : "bg-muted text-muted-foreground cursor-not-allowed"
24212
24216
  ),
@@ -24231,7 +24235,7 @@ function InspectorElementsTab({
24231
24235
  onSelectElement,
24232
24236
  onUpdateSlide
24233
24237
  }) {
24234
- const { t } = chunk73S5EOD3_js.useTranslation();
24238
+ const { t } = chunkP2COO2QO_js.useTranslation();
24235
24239
  const toggleHidden = (elementId2) => {
24236
24240
  const elements2 = activeSlide?.elements;
24237
24241
  if (!canEdit || !elements2) {
@@ -24247,13 +24251,13 @@ function InspectorElementsTab({
24247
24251
  };
24248
24252
  if (!activeSlide) {
24249
24253
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
24250
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk73S5EOD3_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24254
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkP2COO2QO_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24251
24255
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground italic", children: t("pptx.inspector.noSlideSelected") })
24252
24256
  ] });
24253
24257
  }
24254
24258
  const elements = activeSlide.elements || [];
24255
24259
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", "data-pptx-elements-tab": true, children: [
24256
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk73S5EOD3_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24260
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkP2COO2QO_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24257
24261
  [...elements].reverse().map((el, reversedIndex) => {
24258
24262
  const index = elements.length - 1 - reversedIndex;
24259
24263
  const selected = selectedElementId === el.id || selectedElementIds.includes(el.id);
@@ -24261,7 +24265,7 @@ function InspectorElementsTab({
24261
24265
  "div",
24262
24266
  {
24263
24267
  title: `${el.type} - ${el.id}`,
24264
- className: chunk73S5EOD3_js.cn(
24268
+ className: chunkP2COO2QO_js.cn(
24265
24269
  "flex items-center gap-2 px-2 py-1 rounded cursor-pointer transition-colors",
24266
24270
  selected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground"
24267
24271
  ),
@@ -24297,8 +24301,8 @@ function InspectorPaneHeader({
24297
24301
  onSetActiveTab,
24298
24302
  onClose
24299
24303
  }) {
24300
- const { t } = chunk73S5EOD3_js.useTranslation();
24301
- const { viewportWidth } = chunkYQ67KAQR_js.useIsMobile();
24304
+ const { t } = chunkP2COO2QO_js.useTranslation();
24305
+ const { viewportWidth } = chunkNRTPKXZX_js.useIsMobile();
24302
24306
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
24303
24307
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
24304
24308
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -24321,7 +24325,7 @@ function InspectorPaneHeader({
24321
24325
  type: "button",
24322
24326
  title: t(labelKey),
24323
24327
  style: touchBtnStyle,
24324
- className: chunk73S5EOD3_js.cn(
24328
+ className: chunkP2COO2QO_js.cn(
24325
24329
  "flex items-center justify-center gap-1 px-2 py-1 rounded text-[11px] transition-colors",
24326
24330
  activeTab === key ? "bg-primary text-white" : "text-muted-foreground hover:text-foreground hover:bg-accent"
24327
24331
  ),
@@ -24381,7 +24385,7 @@ function CustomPropertiesBlock({
24381
24385
  canEdit,
24382
24386
  onUpdate
24383
24387
  }) {
24384
- const { t } = chunk73S5EOD3_js.useTranslation();
24388
+ const { t } = chunkP2COO2QO_js.useTranslation();
24385
24389
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
24386
24390
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
24387
24391
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.documentProperties.custom.heading") }),
@@ -24435,7 +24439,7 @@ function CustomPropertiesBlock({
24435
24439
  "button",
24436
24440
  {
24437
24441
  type: "button",
24438
- className: chunk73S5EOD3_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24442
+ className: chunkP2COO2QO_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24439
24443
  onClick: () => onUpdate(customProperties.filter((_, i) => i !== index)),
24440
24444
  children: "\xD7"
24441
24445
  }
@@ -24448,7 +24452,7 @@ function NotesHandoutCard({
24448
24452
  notesMaster,
24449
24453
  handoutMaster
24450
24454
  }) {
24451
- const { t } = chunk73S5EOD3_js.useTranslation();
24455
+ const { t } = chunkP2COO2QO_js.useTranslation();
24452
24456
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24453
24457
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.notesHandoutHeading") }),
24454
24458
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px] text-muted-foreground", children: [
@@ -24485,7 +24489,7 @@ function DocumentPropertiesCard({
24485
24489
  onUpdateAppProperties,
24486
24490
  onUpdateCustomProperties
24487
24491
  }) {
24488
- const { t } = chunk73S5EOD3_js.useTranslation();
24492
+ const { t } = chunkP2COO2QO_js.useTranslation();
24489
24493
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24490
24494
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.documentHeading") }),
24491
24495
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px] text-muted-foreground", children: [
@@ -24539,7 +24543,7 @@ function DocumentPropertiesCard({
24539
24543
  function SlideSizeRescalePrompt({
24540
24544
  onChoose
24541
24545
  }) {
24542
- const { t } = chunk73S5EOD3_js.useTranslation();
24546
+ const { t } = chunkP2COO2QO_js.useTranslation();
24543
24547
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5 rounded border border-border bg-muted/40 p-2 text-[11px]", children: [
24544
24548
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium", children: t("pptx.slideSize.rescaleTitle") }),
24545
24549
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground", children: t("pptx.slideSize.rescaleDescription") }),
@@ -24581,7 +24585,7 @@ function SlideSizeCard({
24581
24585
  onUpdateSlideSize,
24582
24586
  hasContent
24583
24587
  }) {
24584
- const { t } = chunk73S5EOD3_js.useTranslation();
24588
+ const { t } = chunkP2COO2QO_js.useTranslation();
24585
24589
  const selection = pptx.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize });
24586
24590
  const presetDisabled = !canEdit || !onUpdateSlideSize;
24587
24591
  const [pendingSize, setPendingSize] = React108.useState(null);
@@ -24692,7 +24696,7 @@ function PresentationSettingsCard({
24692
24696
  canEdit,
24693
24697
  onUpdate
24694
24698
  }) {
24695
- const { t } = chunk73S5EOD3_js.useTranslation();
24699
+ const { t } = chunkP2COO2QO_js.useTranslation();
24696
24700
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CARD2} pptx-editor-presentation-card`, children: [
24697
24701
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.slideInspector.presentation") }),
24698
24702
  /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "presentation-fields", className: "space-y-1.5 text-[11px]", children: [
@@ -24763,7 +24767,7 @@ function PresentationSettingsCard({
24763
24767
  min: 1,
24764
24768
  max: 16,
24765
24769
  disabled: !canEdit,
24766
- className: chunk73S5EOD3_js.cn(INPUT2, "w-20"),
24770
+ className: chunkP2COO2QO_js.cn(INPUT2, "w-20"),
24767
24771
  value: pptx.printPropertiesSlidesPerPage(presentationProperties.printProperties),
24768
24772
  onChange: (e) => onUpdate({
24769
24773
  printProperties: pptx.withSlidesPerPage(
@@ -24784,7 +24788,7 @@ function ThemeSelectorCard({
24784
24788
  canEdit,
24785
24789
  onApplyTheme
24786
24790
  }) {
24787
- const { t } = chunk73S5EOD3_js.useTranslation();
24791
+ const { t } = chunkP2COO2QO_js.useTranslation();
24788
24792
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24789
24793
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.themeHeading") }),
24790
24794
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px]", children: [
@@ -24847,7 +24851,7 @@ function SlideThemeOverridePanel({
24847
24851
  canEdit,
24848
24852
  onUpdateSlide
24849
24853
  }) {
24850
- const { t } = chunk73S5EOD3_js.useTranslation();
24854
+ const { t } = chunkP2COO2QO_js.useTranslation();
24851
24855
  const translate = React108.useCallback((key) => t(key), [t]);
24852
24856
  const override = activeSlide?.clrMapOverride;
24853
24857
  const isOverrideActive = override !== void 0;
@@ -24954,7 +24958,7 @@ function DirectionPicker({
24954
24958
  disabled,
24955
24959
  onChange
24956
24960
  }) {
24957
- const { t } = chunk73S5EOD3_js.useTranslation();
24961
+ const { t } = chunkP2COO2QO_js.useTranslation();
24958
24962
  if (directions.length <= 3) {
24959
24963
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-1", children: directions.map((dir) => /* @__PURE__ */ jsxRuntime.jsx(
24960
24964
  "button",
@@ -24996,10 +25000,10 @@ function TransitionPreview({
24996
25000
  const previewRef = React108.useRef(null);
24997
25001
  const [playing, setPlaying] = React108.useState(false);
24998
25002
  const [animKey, setAnimKey] = React108.useState(0);
24999
- const { t } = chunk73S5EOD3_js.useTranslation();
25003
+ const { t } = chunkP2COO2QO_js.useTranslation();
25000
25004
  const durationMs = transition.durationMs ?? 500;
25001
25005
  const animations = React108.useMemo(
25002
- () => chunkYQ67KAQR_js.getSlideTransitionAnimations(
25006
+ () => chunkNRTPKXZX_js.getSlideTransitionAnimations(
25003
25007
  transition.type,
25004
25008
  durationMs,
25005
25009
  transition.direction,
@@ -25068,7 +25072,7 @@ function TransitionPreview({
25068
25072
  ]
25069
25073
  }
25070
25074
  ),
25071
- /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunkYQ67KAQR_js.SLIDE_TRANSITION_KEYFRAMES })
25075
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunkNRTPKXZX_js.SLIDE_TRANSITION_KEYFRAMES })
25072
25076
  ] });
25073
25077
  }
25074
25078
  var DEFAULT_DURATION_MS = 320;
@@ -25080,7 +25084,7 @@ function SlideTransitionSection({
25080
25084
  canEdit = true,
25081
25085
  onTransitionChange
25082
25086
  }) {
25083
- const { t } = chunk73S5EOD3_js.useTranslation();
25087
+ const { t } = chunkP2COO2QO_js.useTranslation();
25084
25088
  if (!activeSlide) {
25085
25089
  return null;
25086
25090
  }
@@ -25111,7 +25115,7 @@ function SlideTransitionSection({
25111
25115
  type: e.target.value
25112
25116
  }),
25113
25117
  className: "bg-muted border border-border rounded px-2 py-1 max-md:min-h-[44px]!",
25114
- children: chunk73S5EOD3_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25118
+ children: chunkP2COO2QO_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25115
25119
  }
25116
25120
  )
25117
25121
  ] }),
@@ -25269,7 +25273,7 @@ function TagsSection({
25269
25273
  onUpdateTagCollections,
25270
25274
  canEdit
25271
25275
  }) {
25272
- const { t } = chunk73S5EOD3_js.useTranslation();
25276
+ const { t } = chunkP2COO2QO_js.useTranslation();
25273
25277
  const [collapsed, setCollapsed] = React108.useState(true);
25274
25278
  const allTags = pptx.flattenTagCollections(tagCollections);
25275
25279
  const updateTag = (colIdx, tagIdx, field, newValue) => {
@@ -25327,7 +25331,7 @@ function TagsSection({
25327
25331
  "button",
25328
25332
  {
25329
25333
  type: "button",
25330
- className: chunk73S5EOD3_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25334
+ className: chunkP2COO2QO_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25331
25335
  title: t("pptx.tags.deleteTag"),
25332
25336
  onClick: () => deleteTag(tag.colIdx, tag.tagIdx),
25333
25337
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuTrash2, { className: "w-3 h-3" })
@@ -25369,7 +25373,7 @@ function PresentationPropertiesPanel({
25369
25373
  tagCollections,
25370
25374
  onUpdateTagCollections
25371
25375
  }) {
25372
- const { t } = chunk73S5EOD3_js.useTranslation();
25376
+ const { t } = chunkP2COO2QO_js.useTranslation();
25373
25377
  const handleTransitionChange = React108__default.default.useCallback(
25374
25378
  (updates) => {
25375
25379
  onUpdateSlide({
@@ -25456,7 +25460,7 @@ function PresentationPropertiesPanel({
25456
25460
  canEdit
25457
25461
  }
25458
25462
  ) }),
25459
- activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-inspector-card": "slide", className: chunk73S5EOD3_js.cn(CARD2, "space-y-1"), children: [
25463
+ activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-inspector-card": "slide", className: chunkP2COO2QO_js.cn(CARD2, "space-y-1"), children: [
25460
25464
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: "Slide" }),
25461
25465
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[11px] text-muted-foreground", children: [
25462
25466
  activeSlide.elements?.length ?? 0,
@@ -25474,17 +25478,17 @@ function SlideBackgroundPanel({
25474
25478
  onSetTemplateBackground,
25475
25479
  onGetTemplateBackgroundColor
25476
25480
  }) {
25477
- const { t } = chunk73S5EOD3_js.useTranslation();
25481
+ const { t } = chunkP2COO2QO_js.useTranslation();
25478
25482
  const bgImageInputRef = React108.useRef(null);
25479
25483
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
25480
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk73S5EOD3_js.cn(CARD2, "space-y-2"), children: [
25484
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkP2COO2QO_js.cn(CARD2, "space-y-2"), children: [
25481
25485
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.viewer.background") }),
25482
25486
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
25483
25487
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-10 shrink-0", children: t("pptx.slideBackground.colour") }),
25484
25488
  /* @__PURE__ */ jsxRuntime.jsx(
25485
25489
  DebouncedColorInput,
25486
25490
  {
25487
- value: chunk73S5EOD3_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
25491
+ value: chunkP2COO2QO_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
25488
25492
  disabled: !canEdit,
25489
25493
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25490
25494
  onCommit: (hex) => onUpdateSlide({ backgroundColor: hex })
@@ -25523,7 +25527,7 @@ function SlideBackgroundPanel({
25523
25527
  "button",
25524
25528
  {
25525
25529
  type: "button",
25526
- className: chunk73S5EOD3_js.cn(BTN2, "flex-1 text-center"),
25530
+ className: chunkP2COO2QO_js.cn(BTN2, "flex-1 text-center"),
25527
25531
  disabled: !canEdit,
25528
25532
  onClick: () => bgImageInputRef.current?.click(),
25529
25533
  children: activeSlide.backgroundImage ? t("pptx.slideBackground.replaceImage") : t("pptx.slideBackground.chooseImage")
@@ -25556,7 +25560,7 @@ function SlideBackgroundPanel({
25556
25560
  "button",
25557
25561
  {
25558
25562
  type: "button",
25559
- className: chunk73S5EOD3_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
25563
+ className: chunkP2COO2QO_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
25560
25564
  disabled: !pptx.slideBackgroundClearState(activeSlide, canEdit).enabled,
25561
25565
  onClick: () => onUpdateSlide(pptx.slideBackgroundClearPatch()),
25562
25566
  children: t("pptx.slideBackground.clearBackground")
@@ -25593,21 +25597,21 @@ function TemplateBackgroundCard({
25593
25597
  onSetTemplateBackground,
25594
25598
  onGetTemplateBackgroundColor
25595
25599
  }) {
25596
- const { t } = chunk73S5EOD3_js.useTranslation();
25600
+ const { t } = chunkP2COO2QO_js.useTranslation();
25597
25601
  const rows = pptx.resolveTemplateBackgroundRows(
25598
25602
  activeSlide,
25599
25603
  slideMasters,
25600
25604
  t("pptx.master.layout"),
25601
25605
  t("pptx.master.master")
25602
25606
  );
25603
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk73S5EOD3_js.cn(CARD2, "space-y-2"), children: [
25607
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkP2COO2QO_js.cn(CARD2, "space-y-2"), children: [
25604
25608
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.slideBackground.templateBackgroundsHeading") }),
25605
25609
  rows.layout && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
25606
25610
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-14 shrink-0 truncate", title: rows.layout.title, children: t("pptx.master.layout") }),
25607
25611
  /* @__PURE__ */ jsxRuntime.jsx(
25608
25612
  DebouncedColorInput,
25609
25613
  {
25610
- value: chunk73S5EOD3_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
25614
+ value: chunkP2COO2QO_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
25611
25615
  disabled: !canEdit,
25612
25616
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25613
25617
  onCommit: (hex) => onSetTemplateBackground(rows.layout.path, hex)
@@ -25620,7 +25624,7 @@ function TemplateBackgroundCard({
25620
25624
  /* @__PURE__ */ jsxRuntime.jsx(
25621
25625
  DebouncedColorInput,
25622
25626
  {
25623
- value: chunk73S5EOD3_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
25627
+ value: chunkP2COO2QO_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
25624
25628
  disabled: !canEdit,
25625
25629
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25626
25630
  onCommit: (hex) => onSetTemplateBackground(rows.master.path, hex)
@@ -25730,8 +25734,8 @@ function InspectorPane(props) {
25730
25734
  panelWidth
25731
25735
  } = props;
25732
25736
  const hasSelection = selectedElement !== null;
25733
- const { t } = chunk73S5EOD3_js.useTranslation();
25734
- const { dragY, handlers: dragHandlers } = chunkYQ67KAQR_js.useSheetDismissDrag(onClose);
25737
+ const { t } = chunkP2COO2QO_js.useTranslation();
25738
+ const { dragY, handlers: dragHandlers } = chunkNRTPKXZX_js.useSheetDismissDrag(onClose);
25735
25739
  const {
25736
25740
  animationPanelHeight,
25737
25741
  effectiveThemeOptions,
@@ -25753,7 +25757,7 @@ function InspectorPane(props) {
25753
25757
  "div",
25754
25758
  {
25755
25759
  "data-pptx-chrome": "inspector",
25756
- className: chunk73S5EOD3_js.cn(
25760
+ className: chunkP2COO2QO_js.cn(
25757
25761
  // Shared styles
25758
25762
  "bg-background flex flex-col text-xs text-foreground shadow-xl",
25759
25763
  // Mobile: absolute bottom sheet overlay sized via dvh so it
@@ -26084,7 +26088,7 @@ function PresentationAnnotationOverlay({
26084
26088
  );
26085
26089
  }
26086
26090
  function PresentationToolbar(p) {
26087
- const { t } = chunk73S5EOD3_js.useTranslation();
26091
+ const { t } = chunkP2COO2QO_js.useTranslation();
26088
26092
  const ref = useWebControl(
26089
26093
  {
26090
26094
  current: p.currentSlideIndex,
@@ -26143,8 +26147,8 @@ function PresentationTouchControls({
26143
26147
  onEndPresentation,
26144
26148
  hideNavigation = false
26145
26149
  }) {
26146
- const { t } = chunk73S5EOD3_js.useTranslation();
26147
- const { isTouchDevice } = chunkYQ67KAQR_js.useIsMobile();
26150
+ const { t } = chunkP2COO2QO_js.useTranslation();
26151
+ const { isTouchDevice } = chunkNRTPKXZX_js.useIsMobile();
26148
26152
  if (!isTouchDevice) {
26149
26153
  return null;
26150
26154
  }
@@ -26226,7 +26230,7 @@ function KeepAnnotationsDialog({
26226
26230
  onKeep,
26227
26231
  onDiscard
26228
26232
  }) {
26229
- const { t } = chunk73S5EOD3_js.useTranslation();
26233
+ const { t } = chunkP2COO2QO_js.useTranslation();
26230
26234
  if (!isOpen) {
26231
26235
  return null;
26232
26236
  }
@@ -26274,7 +26278,7 @@ function PasteSpecialDialog({
26274
26278
  onCancel,
26275
26279
  onConfirm
26276
26280
  }) {
26277
- const { t } = chunk73S5EOD3_js.useTranslation();
26281
+ const { t } = chunkP2COO2QO_js.useTranslation();
26278
26282
  const [selected, setSelected] = React108.useState("keep-source-formatting");
26279
26283
  if (!isOpen) {
26280
26284
  return null;
@@ -26332,7 +26336,7 @@ function PasteOptionsToolbar({
26332
26336
  onChoose,
26333
26337
  onDismiss
26334
26338
  }) {
26335
- const { t } = chunk73S5EOD3_js.useTranslation();
26339
+ const { t } = chunkP2COO2QO_js.useTranslation();
26336
26340
  const [rect, setRect] = React108.useState(null);
26337
26341
  React108.useEffect(() => {
26338
26342
  const node = elementId2 ? pptx.findCanvasElementNode(document, elementId2, { canvasOnly: true }) : null;
@@ -26359,7 +26363,7 @@ function NotesPagePreview({
26359
26363
  frameSlides,
26360
26364
  maxPages = 3
26361
26365
  }) {
26362
- const { t } = chunk73S5EOD3_js.useTranslation();
26366
+ const { t } = chunkP2COO2QO_js.useTranslation();
26363
26367
  const pages = React108.useMemo(() => pptx.computeAllNotesPages(slideIndices), [slideIndices]);
26364
26368
  const printable = React108.useMemo(() => pptx.getNotesPrintableArea(), []);
26365
26369
  const visiblePages = pages.slice(0, maxPages);
@@ -26447,15 +26451,15 @@ function PrintPreview({
26447
26451
  frameSlides,
26448
26452
  maxPages = 3
26449
26453
  }) {
26450
- const { t } = chunk73S5EOD3_js.useTranslation();
26454
+ const { t } = chunkP2COO2QO_js.useTranslation();
26451
26455
  const pages = React108.useMemo(
26452
- () => chunk73S5EOD3_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26456
+ () => chunkP2COO2QO_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26453
26457
  [slideIndices, slidesPerPage, orientation]
26454
26458
  );
26455
- const printable = React108.useMemo(() => chunk73S5EOD3_js.getPrintableArea(orientation), [orientation]);
26459
+ const printable = React108.useMemo(() => chunkP2COO2QO_js.getPrintableArea(orientation), [orientation]);
26456
26460
  const visiblePages = pages.slice(0, maxPages);
26457
26461
  const isThreePerPage = slidesPerPage === 3;
26458
- const noteLineCount = chunk73S5EOD3_js.generateNoteLineCount();
26462
+ const noteLineCount = chunkP2COO2QO_js.generateNoteLineCount();
26459
26463
  const scaledW = printable.width * PREVIEW_SCALE3;
26460
26464
  const scaledH = printable.height * PREVIEW_SCALE3;
26461
26465
  const noteAreaFraction = 0.5;
@@ -26553,7 +26557,7 @@ function PrintSettingsPanel({
26553
26557
  totalSlides,
26554
26558
  activeSlideIndex
26555
26559
  }) {
26556
- const { t } = chunk73S5EOD3_js.useTranslation();
26560
+ const { t } = chunkP2COO2QO_js.useTranslation();
26557
26561
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 space-y-5 min-w-0", children: [
26558
26562
  /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { children: [
26559
26563
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-xs font-medium text-muted-foreground mb-2 uppercase tracking-wide", children: t("pptx.print.printWhat") }),
@@ -26789,13 +26793,13 @@ function PrintDialog({
26789
26793
  defaultSlidesPerPage,
26790
26794
  defaultFrameSlides
26791
26795
  }) {
26792
- const { t } = chunk73S5EOD3_js.useTranslation();
26796
+ const { t } = chunkP2COO2QO_js.useTranslation();
26793
26797
  const regionRenderer = useRegionRenderer("dialog.print");
26794
- const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(onClose);
26795
- const { viewportWidth } = chunkYQ67KAQR_js.useIsMobile();
26798
+ const { panelStyle, handlers: dragHandlers } = chunkNRTPKXZX_js.useModalDismissDrag(onClose);
26799
+ const { viewportWidth } = chunkNRTPKXZX_js.useIsMobile();
26796
26800
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
26797
26801
  const closeBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
26798
- const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunkYQ67KAQR_js.useViewerOptionsContext());
26802
+ const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunkNRTPKXZX_js.useViewerOptionsContext());
26799
26803
  const [printWhat, setPrintWhat] = React108.useState(printOptionDefaults?.printWhat ?? "slides");
26800
26804
  const [orientation, setOrientation] = React108.useState("landscape");
26801
26805
  const [colorMode, setColorMode] = React108.useState(
@@ -26979,7 +26983,7 @@ function ShowOptionsFieldset({
26979
26983
  draft,
26980
26984
  update
26981
26985
  }) {
26982
- const { t } = chunk73S5EOD3_js.useTranslation();
26986
+ const { t } = chunkP2COO2QO_js.useTranslation();
26983
26987
  return /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "space-y-1.5", children: [
26984
26988
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-[11px] font-medium text-muted-foreground uppercase tracking-wide mb-1", children: t("pptx.slideShow.showOptions") }),
26985
26989
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
@@ -27037,7 +27041,7 @@ function ShowSlidesFieldset({
27037
27041
  slideCount,
27038
27042
  customShows
27039
27043
  }) {
27040
- const { t } = chunk73S5EOD3_js.useTranslation();
27044
+ const { t } = chunkP2COO2QO_js.useTranslation();
27041
27045
  return /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "space-y-1.5", children: [
27042
27046
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-[11px] font-medium text-muted-foreground uppercase tracking-wide mb-1", children: t("pptx.slideShow.showSlides") }),
27043
27047
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
@@ -27147,7 +27151,7 @@ function SetUpSlideShowDialog({
27147
27151
  customShows,
27148
27152
  slideCount
27149
27153
  }) {
27150
- const { t } = chunk73S5EOD3_js.useTranslation();
27154
+ const { t } = chunkP2COO2QO_js.useTranslation();
27151
27155
  const [draft, setDraft] = React108.useState({
27152
27156
  ...properties
27153
27157
  });
@@ -27283,16 +27287,16 @@ function BroadcastDialog({
27283
27287
  defaultUserName,
27284
27288
  defaultServerUrl
27285
27289
  }) {
27286
- const { t } = chunk73S5EOD3_js.useTranslation();
27290
+ const { t } = chunkP2COO2QO_js.useTranslation();
27287
27291
  const regionRenderer = useRegionRenderer("dialog.broadcast");
27288
- const collab = chunkYQ67KAQR_js.useCollaboration();
27292
+ const collab = chunkNRTPKXZX_js.useCollaboration();
27289
27293
  const isBroadcasting = collab !== null && collab.status !== "disconnected" && collab.status !== "error" && collab.config.role === "owner";
27290
27294
  const [roomId, setRoomId] = React108.useState("");
27291
27295
  const [userName, setUserName] = React108.useState("");
27292
27296
  const [serverUrl, setServerUrl] = React108.useState("");
27293
27297
  const [copied, setCopied] = React108.useState(false);
27294
27298
  const dialogRef = React108.useRef(null);
27295
- const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(onClose);
27299
+ const { panelStyle, handlers: dragHandlers } = chunkNRTPKXZX_js.useModalDismissDrag(onClose);
27296
27300
  useModalFocus(open, dialogRef, onClose);
27297
27301
  React108.useEffect(() => {
27298
27302
  if (open && !isBroadcasting) {
@@ -27451,7 +27455,7 @@ function StartBroadcastForm({
27451
27455
  onUserNameChange,
27452
27456
  onServerUrlChange
27453
27457
  }) {
27454
- const { t } = chunk73S5EOD3_js.useTranslation();
27458
+ const { t } = chunkP2COO2QO_js.useTranslation();
27455
27459
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
27456
27460
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] text-muted-foreground leading-relaxed", children: t("pptx.broadcast.description") }),
27457
27461
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -27527,7 +27531,7 @@ function ActiveBroadcastView({
27527
27531
  onCopyUrl,
27528
27532
  onStopBroadcast
27529
27533
  }) {
27530
- const { t } = chunk73S5EOD3_js.useTranslation();
27534
+ const { t } = chunkP2COO2QO_js.useTranslation();
27531
27535
  const statusColor = collab.status === "connected" ? "text-green-400" : collab.status === "connecting" ? "text-yellow-400" : "text-red-400";
27532
27536
  const statusIcon = collab.status === "connected" || collab.status === "connecting" ? /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifi, { className: "w-4 h-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifiOff, { className: "w-4 h-4" });
27533
27537
  const viewerCount = collab.remoteUsers.filter((u) => u.role === "viewer").length;
@@ -27608,7 +27612,7 @@ function ActiveSessionView({
27608
27612
  onCopyRoomId,
27609
27613
  onStopCollaboration
27610
27614
  }) {
27611
- const { t } = chunk73S5EOD3_js.useTranslation(), viewerOptions = chunkYQ67KAQR_js.useViewerOptionsContext(), statusColor = collab.status === "connected" ? "text-green-400" : collab.status === "connecting" ? "text-yellow-400" : "text-red-400", statusIcon = collab.status === "connected" || collab.status === "connecting" ? /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifi, { className: "w-4 h-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifiOff, { className: "w-4 h-4" }), sessionUsers = pptx.buildActiveSessionUsers({
27615
+ const { t } = chunkP2COO2QO_js.useTranslation(), viewerOptions = chunkNRTPKXZX_js.useViewerOptionsContext(), statusColor = collab.status === "connected" ? "text-green-400" : collab.status === "connecting" ? "text-yellow-400" : "text-red-400", statusIcon = collab.status === "connected" || collab.status === "connecting" ? /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifi, { className: "w-4 h-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifiOff, { className: "w-4 h-4" }), sessionUsers = pptx.buildActiveSessionUsers({
27612
27616
  localUserName: activeCollaboration?.userName ?? collab.config.userName,
27613
27617
  localUserInitials: viewerOptions.general.userInitials,
27614
27618
  localUserColor: collab.config.userColor,
@@ -27706,8 +27710,8 @@ function StartSessionForm({
27706
27710
  connectionFailed,
27707
27711
  onRetry
27708
27712
  }) {
27709
- const { t } = chunk73S5EOD3_js.useTranslation();
27710
- const { viewportWidth } = chunkYQ67KAQR_js.useIsMobile();
27713
+ const { t } = chunkP2COO2QO_js.useTranslation();
27714
+ const { viewportWidth } = chunkNRTPKXZX_js.useIsMobile();
27711
27715
  const tabBtnStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
27712
27716
  const inputReadOnlyClass = preconfigured ? " opacity-70 cursor-not-allowed" : "";
27713
27717
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
@@ -27841,9 +27845,9 @@ function ShareDialog({
27841
27845
  defaultUserName,
27842
27846
  defaultServerUrl
27843
27847
  }) {
27844
- const collab = chunkYQ67KAQR_js.useCollaboration();
27848
+ const collab = chunkNRTPKXZX_js.useCollaboration();
27845
27849
  const isActive = collab !== null && collab.status !== "disconnected" && collab.status !== "error";
27846
- const { t } = chunk73S5EOD3_js.useTranslation();
27850
+ const { t } = chunkP2COO2QO_js.useTranslation();
27847
27851
  const regionRenderer = useRegionRenderer("dialog.share");
27848
27852
  const [roomId, setRoomId] = React108.useState(defaultRoomId ?? "");
27849
27853
  const [userName, setUserName] = React108.useState(defaultUserName ?? "");
@@ -27852,9 +27856,9 @@ function ShareDialog({
27852
27856
  const [invitation, setInvitation] = React108.useState("");
27853
27857
  const [copied, setCopied] = React108.useState(false);
27854
27858
  const dialogRef = React108.useRef(null);
27855
- const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(onClose);
27859
+ const { panelStyle, handlers: dragHandlers } = chunkNRTPKXZX_js.useModalDismissDrag(onClose);
27856
27860
  useModalFocus(open, dialogRef, onClose);
27857
- const { viewportWidth, viewportHeight } = chunkYQ67KAQR_js.useIsMobile();
27861
+ const { viewportWidth, viewportHeight } = chunkNRTPKXZX_js.useIsMobile();
27858
27862
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
27859
27863
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
27860
27864
  const stickyFooterClass = pptx.shouldStickyActionRow(viewportWidth, viewportHeight) ? "sticky bottom-0 bg-popover" : "";
@@ -28027,7 +28031,7 @@ function HyperlinkTabContent({
28027
28031
  inputCls,
28028
28032
  onEnterConfirm
28029
28033
  }) {
28030
- const { t } = chunk73S5EOD3_js.useTranslation();
28034
+ const { t } = chunkP2COO2QO_js.useTranslation();
28031
28035
  const handleEnterKey = (e) => {
28032
28036
  if (e.key === "Enter") {
28033
28037
  onEnterConfirm();
@@ -28152,13 +28156,13 @@ function HyperlinkEditDialog({
28152
28156
  onConfirm,
28153
28157
  onCancel
28154
28158
  }) {
28155
- const { t } = chunk73S5EOD3_js.useTranslation();
28156
- const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(onCancel);
28159
+ const { t } = chunkP2COO2QO_js.useTranslation();
28160
+ const { panelStyle, handlers: dragHandlers } = chunkNRTPKXZX_js.useModalDismissDrag(onCancel);
28157
28161
  const inputRef = React108.useRef(null);
28158
- const detectedType = chunkYQ67KAQR_js.detectTargetType(initialUrl, initialAction);
28159
- const emailParts = chunkYQ67KAQR_js.parseEmailUrl(initialUrl || "");
28160
- const detectedSlide = chunkYQ67KAQR_js.parseSlideFromUrl(initialUrl, initialAction);
28161
- const detectedVerb = initialAction ? chunkYQ67KAQR_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28162
+ const detectedType = chunkNRTPKXZX_js.detectTargetType(initialUrl, initialAction);
28163
+ const emailParts = chunkNRTPKXZX_js.parseEmailUrl(initialUrl || "");
28164
+ const detectedSlide = chunkNRTPKXZX_js.parseSlideFromUrl(initialUrl, initialAction);
28165
+ const detectedVerb = initialAction ? chunkNRTPKXZX_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28162
28166
  const [targetType, setTargetType] = React108.useState(detectedType);
28163
28167
  const [url, setUrl] = React108.useState(
28164
28168
  detectedType === "email" || detectedType === "slide" || detectedType === "action" ? "" : initialUrl || ""
@@ -28189,7 +28193,7 @@ function HyperlinkEditDialog({
28189
28193
  actionVerb
28190
28194
  });
28191
28195
  };
28192
- const tabCls = (active) => chunk73S5EOD3_js.cn(
28196
+ const tabCls = (active) => chunkP2COO2QO_js.cn(
28193
28197
  "px-3 py-1.5 text-xs rounded-t border-b-2 transition-colors",
28194
28198
  active ? "border-primary text-primary font-medium" : "border-transparent text-muted-foreground hover:text-foreground hover:border-border"
28195
28199
  );
@@ -28419,6 +28423,7 @@ function ViewerBottomPanels({
28419
28423
  isDirty,
28420
28424
  autosaveStatus,
28421
28425
  saveProgress,
28426
+ fontProgress,
28422
28427
  onToggleNotes,
28423
28428
  onUpdateNotes,
28424
28429
  collaborationSlot,
@@ -28436,7 +28441,7 @@ function ViewerBottomPanels({
28436
28441
  notesStyle,
28437
28442
  onNotesHeightChange
28438
28443
  }) {
28439
- const { isHidden } = chunkYQ67KAQR_js.useToolbarVisibility(hiddenActions);
28444
+ const { isHidden } = chunkNRTPKXZX_js.useToolbarVisibility(hiddenActions);
28440
28445
  const customization = useViewerCustomizationContext();
28441
28446
  const showNotes = pptx.isPanelVisible(customization, "notes");
28442
28447
  const notesRenderer = useRegionRenderer("notes");
@@ -28493,6 +28498,7 @@ function ViewerBottomPanels({
28493
28498
  isDirty,
28494
28499
  autosaveStatus,
28495
28500
  saveProgress,
28501
+ fontProgress,
28496
28502
  scale,
28497
28503
  onZoomIn,
28498
28504
  onZoomOut,
@@ -28566,7 +28572,7 @@ function ViewerInspector({
28566
28572
  onPreviewElement,
28567
28573
  elementById
28568
28574
  }) {
28569
- const { t } = chunk73S5EOD3_js.useTranslation();
28575
+ const { t } = chunkP2COO2QO_js.useTranslation();
28570
28576
  const regionRenderer = useRegionRenderer("inspector");
28571
28577
  const liveEdit = onPreviewElement ? {
28572
28578
  element: selectedElement,
@@ -28781,7 +28787,7 @@ function ViewerToolbarSection(props) {
28781
28787
  onSetSnapToShape,
28782
28788
  onSetShowGuides
28783
28789
  } = props;
28784
- const { t } = chunk73S5EOD3_js.useTranslation();
28790
+ const { t } = chunkP2COO2QO_js.useTranslation();
28785
28791
  const customization = useViewerCustomizationContext();
28786
28792
  const handleAddAnimation = React108.useCallback(
28787
28793
  (preset, group) => {
@@ -28834,7 +28840,7 @@ function ViewerToolbarSection(props) {
28834
28840
  [activeSlide, propertyHandlers]
28835
28841
  );
28836
28842
  const scopedLayoutOptions = React108__default.default.useMemo(
28837
- () => chunkYQ67KAQR_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
28843
+ () => chunkNRTPKXZX_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
28838
28844
  [s.layoutOptions, activeSlide]
28839
28845
  );
28840
28846
  const handleResetSlide = React108.useCallback(() => {
@@ -29241,14 +29247,14 @@ function ViewerToolbarSection(props) {
29241
29247
  isMobileInsertOpen: s.isMobileInsertOpen,
29242
29248
  onCloseMobileInsert: () => s.setIsMobileInsertOpen(false),
29243
29249
  slideCommentCount: activeSlide?.comments?.length ?? 0,
29244
- reviewComments: chunkYQ67KAQR_js.createReviewCommentsHost({
29250
+ reviewComments: chunkNRTPKXZX_js.createReviewCommentsHost({
29245
29251
  state: s,
29246
29252
  activeSlideIndex,
29247
29253
  updateSlides: ops.updateSlides,
29248
29254
  markDirty: history.markDirty
29249
29255
  }),
29250
29256
  formatPainterActive: s.formatPainterActive,
29251
- canActivateFormatPainter: chunk73S5EOD3_js.hasCopyableFormat(selectedElement),
29257
+ canActivateFormatPainter: chunkP2COO2QO_js.hasCopyableFormat(selectedElement),
29252
29258
  onToggleFormatPainter: onToggleFormatPainterProp ?? (() => s.setFormatPainterActive((p) => !p)),
29253
29259
  isSelectionPaneOpen: s.isSelectionPaneOpen,
29254
29260
  onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
@@ -29357,14 +29363,14 @@ function CustomShowsDialog({
29357
29363
  onRun,
29358
29364
  onClose
29359
29365
  }) {
29360
- const { t } = chunk73S5EOD3_js.useTranslation();
29366
+ const { t } = chunkP2COO2QO_js.useTranslation();
29361
29367
  const controller = React108.useMemo(
29362
29368
  () => pptx.createCustomShowsController(customShows, activeCustomShowId),
29363
29369
  // A fresh draft per open: the host mounts this only while the dialog is open.
29364
29370
  // eslint-disable-next-line react-hooks/exhaustive-deps
29365
29371
  []
29366
29372
  );
29367
- chunkYQ67KAQR_js.useController(controller);
29373
+ chunkNRTPKXZX_js.useController(controller);
29368
29374
  const view = controller.view(slides);
29369
29375
  const [active, setActive] = React108.useState(activeCustomShowId ?? "");
29370
29376
  const pickerValue = view.shows.some(({ id }) => id === active) ? active : "";
@@ -29643,8 +29649,8 @@ function EquationEditorDialog({
29643
29649
  onInsert,
29644
29650
  existingOmml
29645
29651
  }) {
29646
- const { t } = chunk73S5EOD3_js.useTranslation();
29647
- const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(onClose);
29652
+ const { t } = chunkP2COO2QO_js.useTranslation();
29653
+ const { panelStyle, handlers: dragHandlers } = chunkNRTPKXZX_js.useModalDismissDrag(onClose);
29648
29654
  const initialLatex = React108.useMemo(() => {
29649
29655
  if (!existingOmml) {
29650
29656
  return "";
@@ -29766,7 +29772,7 @@ function EquationEditorDialog({
29766
29772
  {
29767
29773
  type: "button",
29768
29774
  onClick: () => handleTemplateClick(tmpl.latex),
29769
- className: chunk73S5EOD3_js.cn(
29775
+ className: chunkP2COO2QO_js.cn(
29770
29776
  "flex flex-col items-center gap-1 p-2 rounded-lg border transition-colors",
29771
29777
  latex === tmpl.latex ? "border-primary bg-primary/10" : "border-border bg-muted/40 hover:bg-accent/60 hover:border-border"
29772
29778
  ),
@@ -29831,7 +29837,7 @@ function InsertSmartArtDialog({
29831
29837
  onInsert
29832
29838
  }) {
29833
29839
  const ref = React108.useRef(null);
29834
- const { t } = chunk73S5EOD3_js.useTranslation();
29840
+ const { t } = chunkP2COO2QO_js.useTranslation();
29835
29841
  React108.useLayoutEffect(() => {
29836
29842
  if (ref.current) {
29837
29843
  ref.current.translateLabel = t;
@@ -29855,7 +29861,7 @@ function InsertChartDialog({
29855
29861
  onInsert
29856
29862
  }) {
29857
29863
  const ref = React108.useRef(null);
29858
- const { t } = chunk73S5EOD3_js.useTranslation();
29864
+ const { t } = chunkP2COO2QO_js.useTranslation();
29859
29865
  React108.useLayoutEffect(() => {
29860
29866
  if (ref.current) {
29861
29867
  ref.current.translateLabel = t;
@@ -30362,11 +30368,11 @@ function PresentationStage({
30362
30368
  })
30363
30369
  },
30364
30370
  children: [
30365
- /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30371
+ /* @__PURE__ */ jsxRuntime.jsx(chunkNRTPKXZX_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30366
30372
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: pptx.PRESENTATION_HIT_TEST_CSS }),
30367
30373
  presentationKeyframesCss && /* @__PURE__ */ jsxRuntime.jsx("style", { children: presentationKeyframesCss }),
30368
30374
  templateElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30369
- chunkYQ67KAQR_js.ElementRenderer,
30375
+ chunkNRTPKXZX_js.ElementRenderer,
30370
30376
  {
30371
30377
  element,
30372
30378
  activeSlide,
@@ -30404,7 +30410,7 @@ function PresentationStage({
30404
30410
  `tpl-${element.id}`
30405
30411
  )),
30406
30412
  activeSlide?.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30407
- chunkYQ67KAQR_js.ElementRenderer,
30413
+ chunkNRTPKXZX_js.ElementRenderer,
30408
30414
  {
30409
30415
  element,
30410
30416
  activeSlide,
@@ -30457,7 +30463,7 @@ function PresentationStage({
30457
30463
  function noop() {
30458
30464
  }
30459
30465
  function PresentationContextMenu(p) {
30460
- const { t } = chunk73S5EOD3_js.useTranslation();
30466
+ const { t } = chunkP2COO2QO_js.useTranslation();
30461
30467
  const sections = pptx.getPresentationContextMenuSections({
30462
30468
  seeAllSlides: Boolean(p.onSeeAllSlides),
30463
30469
  presenterView: Boolean(p.onShowPresenterView),
@@ -30516,7 +30522,7 @@ function PresentationTransitionMount({
30516
30522
  templateElementsBySlideId
30517
30523
  );
30518
30524
  return /* @__PURE__ */ jsxRuntime.jsx(
30519
- chunkYQ67KAQR_js.PresentationTransitionOverlay,
30525
+ chunkNRTPKXZX_js.PresentationTransitionOverlay,
30520
30526
  {
30521
30527
  outgoingSlide,
30522
30528
  templateElements: templates.outgoing,
@@ -30561,9 +30567,9 @@ function ViewerCanvasArea(props) {
30561
30567
  aiHighlightOverlay,
30562
30568
  aiCanvasActive = false
30563
30569
  } = props;
30564
- const { t } = chunk73S5EOD3_js.useTranslation();
30565
- const { isHidden } = chunkYQ67KAQR_js.useToolbarVisibility(hiddenActions);
30566
- const viewerOptions = chunkYQ67KAQR_js.useViewerOptionsContext();
30570
+ const { t } = chunkP2COO2QO_js.useTranslation();
30571
+ const { isHidden } = chunkNRTPKXZX_js.useToolbarVisibility(hiddenActions);
30572
+ const viewerOptions = chunkNRTPKXZX_js.useViewerOptionsContext();
30567
30573
  const outlineAuthoring = useOutlineAuthoring({
30568
30574
  state: s,
30569
30575
  updateElement: canvasHandlers.handleUpdateSmartArtElement,
@@ -30609,9 +30615,9 @@ function ViewerCanvasArea(props) {
30609
30615
  );
30610
30616
  const handleHyperlinkClick = React108.useCallback(
30611
30617
  (url) => {
30612
- if (chunk73S5EOD3_js.isPpactionUrl(url)) {
30618
+ if (chunkP2COO2QO_js.isPpactionUrl(url)) {
30613
30619
  if (mode === "present") {
30614
- const parsed = chunk73S5EOD3_js.parsePpactionUrl(url);
30620
+ const parsed = chunkP2COO2QO_js.parsePpactionUrl(url);
30615
30621
  if (parsed) {
30616
30622
  const action = {
30617
30623
  action: parsed.action,
@@ -30696,7 +30702,7 @@ function ViewerCanvasArea(props) {
30696
30702
  s.setActiveSlideIndex((i) => Math.max(0, i - 1));
30697
30703
  }
30698
30704
  }, [mode, presentation, s]);
30699
- const swipe = chunkYQ67KAQR_js.useSwipeNavigation({
30705
+ const swipe = chunkNRTPKXZX_js.useSwipeNavigation({
30700
30706
  enabled: swipeEnabled,
30701
30707
  onNext: handleSwipeNext,
30702
30708
  onPrev: handleSwipePrev
@@ -30882,14 +30888,14 @@ function ViewerCanvasArea(props) {
30882
30888
  outlineAuthoring,
30883
30889
  collaborationOverlay: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30884
30890
  /* @__PURE__ */ jsxRuntime.jsx(
30885
- chunkYQ67KAQR_js.RemoteSelectionOverlay,
30891
+ chunkNRTPKXZX_js.RemoteSelectionOverlay,
30886
30892
  {
30887
30893
  elements: effectiveSlide?.elements ?? [],
30888
30894
  activeSlideIndex
30889
30895
  }
30890
30896
  ),
30891
30897
  /* @__PURE__ */ jsxRuntime.jsx(
30892
- chunkYQ67KAQR_js.CollaborationCursorOverlay,
30898
+ chunkNRTPKXZX_js.CollaborationCursorOverlay,
30893
30899
  {
30894
30900
  activeSlideIndex,
30895
30901
  canvasWidth: canvasSize.width,
@@ -31126,8 +31132,8 @@ function AiChangeOverlay({ batch, activeSlideIndex }) {
31126
31132
  ] });
31127
31133
  }
31128
31134
  function ChartFormatPanel() {
31129
- const { t } = chunk73S5EOD3_js.useTranslation();
31130
- const commands = chunkYQ67KAQR_js.useChartFormatContext();
31135
+ const { t } = chunkP2COO2QO_js.useTranslation();
31136
+ const commands = chunkNRTPKXZX_js.useChartFormatContext();
31131
31137
  const ref = React108.useRef(null);
31132
31138
  const chart = commands?.chart;
31133
31139
  const chartData = chart?.type === "chart" ? chart.chartData : void 0;
@@ -31162,7 +31168,7 @@ function ChartFormatPanel() {
31162
31168
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-chart-format-pane", { ref, "data-testid": "chart-format-pane" });
31163
31169
  }
31164
31170
  function ThemeEditorPanel({ theme, canEdit, onApply, onClose }) {
31165
- const { t } = chunk73S5EOD3_js.useTranslation();
31171
+ const { t } = chunkP2COO2QO_js.useTranslation();
31166
31172
  const ref = React108.useRef(null);
31167
31173
  React108.useEffect(() => {
31168
31174
  const node = ref.current;
@@ -31199,8 +31205,8 @@ function MobileDismissSheet({
31199
31205
  className,
31200
31206
  children
31201
31207
  }) {
31202
- const { t } = chunk73S5EOD3_js.useTranslation();
31203
- const { dragY, handlers } = chunkYQ67KAQR_js.useSheetDismissDrag(onClose);
31208
+ const { t } = chunkP2COO2QO_js.useTranslation();
31209
+ const { dragY, handlers } = chunkNRTPKXZX_js.useSheetDismissDrag(onClose);
31204
31210
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31205
31211
  /* @__PURE__ */ jsxRuntime.jsx(
31206
31212
  "button",
@@ -31469,7 +31475,7 @@ function ThemeThumbnail({
31469
31475
  {
31470
31476
  type: "button",
31471
31477
  onClick,
31472
- className: chunk73S5EOD3_js.cn(
31478
+ className: chunkP2COO2QO_js.cn(
31473
31479
  "group relative flex flex-col rounded-lg border-2 transition-all overflow-hidden",
31474
31480
  selected ? "border-primary shadow-lg scale-[1.02]" : "border-border hover:border-primary/50 hover:shadow-md"
31475
31481
  ),
@@ -31500,7 +31506,7 @@ function ThemeGallery({
31500
31506
  onApplyTheme,
31501
31507
  onImportTheme
31502
31508
  }) {
31503
- const { t } = chunk73S5EOD3_js.useTranslation();
31509
+ const { t } = chunkP2COO2QO_js.useTranslation();
31504
31510
  const [selectedTheme, setSelectedTheme] = React108.useState(currentTheme ?? null);
31505
31511
  const fileInputRef = React108.useRef(null);
31506
31512
  React108.useEffect(() => {
@@ -31637,8 +31643,8 @@ function ViewerSidePanels(props) {
31637
31643
  aiBridge,
31638
31644
  aiPanel
31639
31645
  } = props;
31640
- const aiAssistant = chunkUC57KUGO_js.aiAssistants.resolve(aiConfig);
31641
- const AiPanel = aiAssistant?.panel ?? chunkUC57KUGO_js.AiChatPanelLazy;
31646
+ const aiAssistant = chunkLVEFHZ76_js.aiAssistants.resolve(aiConfig);
31647
+ const AiPanel = aiAssistant?.panel ?? chunkLVEFHZ76_js.AiChatPanelLazy;
31642
31648
  const handleSetSlideSize = (size, rescaleMode) => {
31643
31649
  if (rescaleMode && s.slideSizeEmu) {
31644
31650
  s.setSlides(pptx.scaleSlidesForSizeChange(slides, s.slideSizeEmu, size, rescaleMode));
@@ -31944,7 +31950,7 @@ function ViewerMainContent(props) {
31944
31950
  );
31945
31951
  const layoutGalleryAnchorRef = React108.useRef(null);
31946
31952
  const layoutGalleryPreviews = useLayoutPreviews(loadLayoutPreviews, layoutGalleryAnchor !== null);
31947
- return /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.ChartPartSelectionProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "body", className: "relative z-10 flex flex-1 min-h-0", children: [
31953
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkNRTPKXZX_js.ChartPartSelectionProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "body", className: "relative z-10 flex flex-1 min-h-0", children: [
31948
31954
  showSlidesPane && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31949
31955
  slidesPaneRenderer ? (
31950
31956
  // The rail's slot (width, collapse, resize handle) stays the viewer's.
@@ -32154,7 +32160,7 @@ function AutosaveRecoveryDialog({
32154
32160
  onDiscard,
32155
32161
  busy = false
32156
32162
  }) {
32157
- const { t } = chunk73S5EOD3_js.useTranslation();
32163
+ const { t } = chunkP2COO2QO_js.useTranslation();
32158
32164
  if (!prompt) {
32159
32165
  return null;
32160
32166
  }
@@ -32210,7 +32216,7 @@ function CompatibilityToasts({
32210
32216
  rightInset = 0,
32211
32217
  bottomInset = 0
32212
32218
  }) {
32213
- const { t } = chunk73S5EOD3_js.useTranslation();
32219
+ const { t } = chunkP2COO2QO_js.useTranslation();
32214
32220
  const ref = useWebControl(
32215
32221
  { toasts, rightInset, bottomInset, translate: t },
32216
32222
  {
@@ -32255,7 +32261,7 @@ function HeaderFooterPanel({
32255
32261
  onApplyToCurrent,
32256
32262
  onClose
32257
32263
  }) {
32258
- const { t } = chunk73S5EOD3_js.useTranslation();
32264
+ const { t } = chunkP2COO2QO_js.useTranslation();
32259
32265
  const showDateTime = headerFooter.hasDateTime ?? false;
32260
32266
  const dateTimeAuto = headerFooter.dateTimeAuto ?? false;
32261
32267
  const showDateText = pptx.isHeaderFooterDateTextVisible(headerFooter);
@@ -32396,7 +32402,7 @@ function HeaderFooterPanel({
32396
32402
  ] }) });
32397
32403
  }
32398
32404
  function MobileBottomBar(p) {
32399
- const { t } = chunk73S5EOD3_js.useTranslation();
32405
+ const { t } = chunkP2COO2QO_js.useTranslation();
32400
32406
  const handlers = {
32401
32407
  slides: p.onOpenSlides,
32402
32408
  insert: p.onOpenInsert,
@@ -32422,7 +32428,7 @@ function MobileSlidesSheet({
32422
32428
  onClose,
32423
32429
  ...sidebar
32424
32430
  }) {
32425
- const { t } = chunk73S5EOD3_js.useTranslation();
32431
+ const { t } = chunkP2COO2QO_js.useTranslation();
32426
32432
  return /* @__PURE__ */ jsxRuntime.jsx(
32427
32433
  MobileSheet,
32428
32434
  {
@@ -32449,7 +32455,7 @@ function MobileChromeOverlay(props) {
32449
32455
  slideSectionGroups,
32450
32456
  canEdit,
32451
32457
  commentCount
32452
- } = props, { keyboardInset, isKeyboardOpen } = chunkYQ67KAQR_js.useKeyboardInsets(), activeSheet = s.isMobileInsertOpen ? "insert" : s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null, closeAllSheets = () => {
32458
+ } = props, { keyboardInset, isKeyboardOpen } = chunkNRTPKXZX_js.useKeyboardInsets(), activeSheet = s.isMobileInsertOpen ? "insert" : s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null, closeAllSheets = () => {
32453
32459
  s.setIsSlidesPaneOpen(false);
32454
32460
  s.setIsMobileInsertOpen(false);
32455
32461
  s.setIsInspectorPaneOpen(false);
@@ -32549,7 +32555,7 @@ function MobileChromeOverlay(props) {
32549
32555
  ] });
32550
32556
  }
32551
32557
  function ReadOnlyBanner(p) {
32552
- const { t } = chunk73S5EOD3_js.useTranslation();
32558
+ const { t } = chunkP2COO2QO_js.useTranslation();
32553
32559
  const ref = useWebControl(
32554
32560
  pptx.readOnlyBannerState(
32555
32561
  p.recommendation,
@@ -32583,7 +32589,7 @@ function RibbonCustomizationStyle({
32583
32589
  return /* @__PURE__ */ jsxRuntime.jsx("style", { "data-pptx-ribbon-customization": "", children: css });
32584
32590
  }
32585
32591
  function RunProgramNotices({ notices, onDismiss }) {
32586
- const { t } = chunk73S5EOD3_js.useTranslation();
32592
+ const { t } = chunkP2COO2QO_js.useTranslation();
32587
32593
  if (notices.length === 0) {
32588
32594
  return null;
32589
32595
  }
@@ -32641,14 +32647,14 @@ function AddinTable({
32641
32647
  selectedId,
32642
32648
  onSelect
32643
32649
  }) {
32644
- const { t } = chunk73S5EOD3_js.useTranslation();
32650
+ const { t } = chunkP2COO2QO_js.useTranslation();
32645
32651
  return /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
32646
32652
  /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "mb-1 text-xs font-semibold text-foreground", children: title }),
32647
32653
  rows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-2 py-1 text-xs italic text-muted-foreground", children: t("pptx.options.addIns.description") }) : /* @__PURE__ */ jsxRuntime.jsx("table", { className: "w-full border-collapse text-left", children: /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((row) => /* @__PURE__ */ jsxRuntime.jsxs(
32648
32654
  "tr",
32649
32655
  {
32650
32656
  onClick: () => onSelect(row.id),
32651
- className: chunk73S5EOD3_js.cn(
32657
+ className: chunkP2COO2QO_js.cn(
32652
32658
  "cursor-pointer border-b border-border/40 transition-colors",
32653
32659
  selectedId === row.id ? "bg-primary/10" : "hover:bg-accent"
32654
32660
  ),
@@ -32663,7 +32669,7 @@ function AddinTable({
32663
32669
  ] });
32664
32670
  }
32665
32671
  function OptionsAddInsPane({ addinStatus }) {
32666
- const { t } = chunk73S5EOD3_js.useTranslation();
32672
+ const { t } = chunkP2COO2QO_js.useTranslation();
32667
32673
  const [selectedId, setSelectedId] = React108.useState(null);
32668
32674
  const rows = pptx.resolveViewerAddinRows(addinStatus);
32669
32675
  const active = rows.filter((row) => row.active);
@@ -32706,7 +32712,7 @@ function CommandList({
32706
32712
  selectedId,
32707
32713
  onSelect
32708
32714
  }) {
32709
- const { t } = chunk73S5EOD3_js.useTranslation();
32715
+ const { t } = chunkP2COO2QO_js.useTranslation();
32710
32716
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
32711
32717
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-1 text-xs font-medium text-muted-foreground", children: title }),
32712
32718
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -32727,7 +32733,7 @@ function CommandList({
32727
32733
  role: "option",
32728
32734
  "aria-selected": selectedId === id,
32729
32735
  onClick: () => onSelect(id),
32730
- className: chunk73S5EOD3_js.cn(
32736
+ className: chunkP2COO2QO_js.cn(
32731
32737
  "flex w-full items-center rounded px-2 py-1.5 text-left text-sm transition-colors",
32732
32738
  selectedId === id ? "bg-primary/15 text-primary" : "text-foreground hover:bg-accent"
32733
32739
  ),
@@ -32745,7 +32751,7 @@ function OptionsQuickAccessPane({
32745
32751
  onQuickAccessCommandsChange,
32746
32752
  onResetQuickAccess
32747
32753
  }) {
32748
- const { t } = chunk73S5EOD3_js.useTranslation();
32754
+ const { t } = chunkP2COO2QO_js.useTranslation();
32749
32755
  const [selectedAvailable, setSelectedAvailable] = React108.useState(null);
32750
32756
  const [selectedCurrent, setSelectedCurrent] = React108.useState(null);
32751
32757
  const current = options.quickAccess.commandIds;
@@ -32859,7 +32865,7 @@ function OptionsRibbonPane({
32859
32865
  onRibbonTabHiddenChange,
32860
32866
  onResetRibbon
32861
32867
  }) {
32862
- const { t } = chunk73S5EOD3_js.useTranslation();
32868
+ const { t } = chunkP2COO2QO_js.useTranslation();
32863
32869
  const hidden = new Set(options.ribbon.hiddenTabIds);
32864
32870
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
32865
32871
  /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
@@ -32871,7 +32877,7 @@ function OptionsRibbonPane({
32871
32877
  return /* @__PURE__ */ jsxRuntime.jsxs(
32872
32878
  "label",
32873
32879
  {
32874
- className: chunk73S5EOD3_js.cn(
32880
+ className: chunkP2COO2QO_js.cn(
32875
32881
  "flex items-center gap-2 rounded px-2 py-1.5",
32876
32882
  isFile ? "cursor-not-allowed opacity-60" : "cursor-pointer hover:bg-accent"
32877
32883
  ),
@@ -32905,7 +32911,7 @@ function OptionsRibbonPane({
32905
32911
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: pptx.SHORTCUT_REFERENCE_ITEMS.map((shortcut, i) => /* @__PURE__ */ jsxRuntime.jsxs(
32906
32912
  "div",
32907
32913
  {
32908
- className: chunk73S5EOD3_js.cn(
32914
+ className: chunkP2COO2QO_js.cn(
32909
32915
  "flex items-center justify-between gap-3 rounded px-3 py-2",
32910
32916
  i % 2 === 0 ? "bg-muted/60" : ""
32911
32917
  ),
@@ -32926,12 +32932,12 @@ async function exportAiChatLogs(options) {
32926
32932
  chats,
32927
32933
  { format: options?.format, detailed: options?.detailed, now: options?.now },
32928
32934
  (filename, content, mime) => {
32929
- chunkYQ67KAQR_js.downloadBlob(new Blob([content], { type: mime }), filename);
32935
+ chunkNRTPKXZX_js.downloadBlob(new Blob([content], { type: mime }), filename);
32930
32936
  }
32931
32937
  );
32932
32938
  }
32933
32939
  function SettingsAiTab({ store }) {
32934
- const { t } = chunk73S5EOD3_js.useTranslation();
32940
+ const { t } = chunkP2COO2QO_js.useTranslation();
32935
32941
  const activeStore = React108.useMemo(() => store ?? host.createChatHistoryStore(), [store]);
32936
32942
  const [chatCount, setChatCount] = React108.useState(null);
32937
32943
  const [detailed, setDetailed] = React108.useState(true);
@@ -33023,7 +33029,7 @@ function SettingsAppearanceTab({
33023
33029
  themes,
33024
33030
  onSelectTheme
33025
33031
  }) {
33026
- const { t } = chunk73S5EOD3_js.useTranslation();
33032
+ const { t } = chunkP2COO2QO_js.useTranslation();
33027
33033
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-3", children: themes.map((entry) => {
33028
33034
  const isActive = entry.key === activeThemeKey;
33029
33035
  const previewBackground = entry.theme?.colors?.background ?? "#0b0f19";
@@ -33034,7 +33040,7 @@ function SettingsAppearanceTab({
33034
33040
  type: "button",
33035
33041
  onClick: () => onSelectTheme(entry.key),
33036
33042
  "aria-pressed": isActive,
33037
- className: chunk73S5EOD3_js.cn(
33043
+ className: chunkP2COO2QO_js.cn(
33038
33044
  "flex items-center gap-3 rounded-lg border px-3 py-2.5 text-left transition-colors",
33039
33045
  isActive ? "border-primary bg-primary/10" : "border-border hover:border-primary/50 hover:bg-accent"
33040
33046
  ),
@@ -33051,7 +33057,7 @@ function SettingsAppearanceTab({
33051
33057
  /* @__PURE__ */ jsxRuntime.jsx(
33052
33058
  "span",
33053
33059
  {
33054
- className: chunk73S5EOD3_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33060
+ className: chunkP2COO2QO_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33055
33061
  children: t(entry.labelKey)
33056
33062
  }
33057
33063
  )
@@ -33066,7 +33072,7 @@ function SettingsCustomFontsSection({
33066
33072
  families,
33067
33073
  onRegistered
33068
33074
  }) {
33069
- const { t } = chunk73S5EOD3_js.useTranslation();
33075
+ const { t } = chunkP2COO2QO_js.useTranslation();
33070
33076
  const inputRef = React108.useRef(null);
33071
33077
  const [error, setError] = React108.useState(false);
33072
33078
  const handleFile = async (file) => {
@@ -33131,7 +33137,7 @@ function SettingsLanguageTab({
33131
33137
  type: "button",
33132
33138
  onClick: () => onSelectLocale(locale.code),
33133
33139
  "aria-pressed": isActive,
33134
- className: chunk73S5EOD3_js.cn(
33140
+ className: chunkP2COO2QO_js.cn(
33135
33141
  "flex w-full items-center justify-between rounded px-3 py-2.5 text-left transition-colors",
33136
33142
  isActive ? "bg-primary/10 text-primary" : "text-foreground hover:bg-accent"
33137
33143
  ),
@@ -33170,7 +33176,7 @@ function OpenSettingsDialog({
33170
33176
  customFontFamilies = NO_CUSTOM_FONT_FAMILIES,
33171
33177
  onCustomFontRegistered
33172
33178
  }) {
33173
- const { t } = chunk73S5EOD3_js.useTranslation();
33179
+ const { t } = chunkP2COO2QO_js.useTranslation();
33174
33180
  const viewerCustomization = useViewerCustomizationContext();
33175
33181
  const customization = React108.useMemo(
33176
33182
  () => languageSelectable ? viewerCustomization : {
@@ -33279,7 +33285,7 @@ function ViewerOptionsProvider({
33279
33285
  store,
33280
33286
  children
33281
33287
  }) {
33282
- return /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.ViewerOptionsContext.Provider, { value: options, children }) });
33288
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkNRTPKXZX_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunkNRTPKXZX_js.ViewerOptionsContext.Provider, { value: options, children }) });
33283
33289
  }
33284
33290
  function useAiBridge(input) {
33285
33291
  const ref = React108.useRef(input);
@@ -33362,7 +33368,7 @@ function useAiPanelController(input) {
33362
33368
  getSelectedElement: () => inputRef.current.selectedElement
33363
33369
  })
33364
33370
  );
33365
- const state = chunkYQ67KAQR_js.useController(controller);
33371
+ const state = chunkNRTPKXZX_js.useController(controller);
33366
33372
  React108.useEffect(() => () => controller.dispose(), [controller]);
33367
33373
  const liveFocusTargets = React108.useMemo(
33368
33374
  () => host.computeFocusTargets({ activeSlideIndex, selectedElementIds, selectedElementId }),
@@ -33595,7 +33601,7 @@ function useMasterViewCrud(input) {
33595
33601
  forgetHistory,
33596
33602
  pushToast
33597
33603
  } = input;
33598
- const { t } = chunk73S5EOD3_js.useTranslation();
33604
+ const { t } = chunkP2COO2QO_js.useTranslation();
33599
33605
  const data = React108.useMemo(
33600
33606
  () => ({ slides, slideMasters }),
33601
33607
  [slides, slideMasters]
@@ -33936,16 +33942,20 @@ function useShapeFormatCommands(input) {
33936
33942
  crop
33937
33943
  };
33938
33944
  }
33939
- function useViewerCustomization(customization, legacyHiddenActions, optionsStore, allowExternalContent) {
33945
+ function useViewerCustomization(customization, legacyHiddenActions, optionsStore, allowExternalContent, googleFonts) {
33940
33946
  const controllerRef = React108.useRef(null);
33941
33947
  if (!controllerRef.current) {
33942
33948
  controllerRef.current = pptx.createCustomizationController(customization);
33943
33949
  controllerRef.current.setAllowExternalContent(allowExternalContent);
33950
+ controllerRef.current.setGoogleFonts(googleFonts);
33944
33951
  }
33945
33952
  const controller = controllerRef.current;
33946
33953
  React108.useLayoutEffect(() => {
33947
33954
  controller.setAllowExternalContent(allowExternalContent);
33948
33955
  }, [controller, allowExternalContent]);
33956
+ React108.useLayoutEffect(() => {
33957
+ controller.setGoogleFonts(googleFonts);
33958
+ }, [controller, googleFonts]);
33949
33959
  const appliedRef = React108.useRef(customization);
33950
33960
  React108.useLayoutEffect(() => {
33951
33961
  if (appliedRef.current === customization) {
@@ -33984,7 +33994,7 @@ function useHostLanguage({
33984
33994
  availableLocales,
33985
33995
  onLocaleChange
33986
33996
  }) {
33987
- const { t, i18n } = chunk73S5EOD3_js.useHostI18next();
33997
+ const { t, i18n } = chunkP2COO2QO_js.useHostI18next();
33988
33998
  const [localeCode, setLocaleCode] = React108.useState(
33989
33999
  () => defaultLocale ?? pptx.readStoredViewerPrefs().localeCode ?? "en"
33990
34000
  );
@@ -34024,7 +34034,7 @@ function useProvidedLanguage({
34024
34034
  availableLocales,
34025
34035
  onLocaleChange
34026
34036
  }) {
34027
- const state = React108.useContext(chunk73S5EOD3_js.PptxI18nContext);
34037
+ const state = React108.useContext(chunkP2COO2QO_js.PptxI18nContext);
34028
34038
  const { locale } = state;
34029
34039
  const locales = availableLocales ?? NO_LOCALES;
34030
34040
  const controls = React108.useMemo(
@@ -34044,7 +34054,7 @@ function useProvidedLanguage({
34044
34054
  return { state, controls };
34045
34055
  }
34046
34056
  function provideLanguage({ state, controls }, children) {
34047
- return /* @__PURE__ */ jsxRuntime.jsx(chunk73S5EOD3_js.ViewerI18nContext.Provider, { value: state, children: /* @__PURE__ */ jsxRuntime.jsx(chunk73S5EOD3_js.ViewerLocaleControlsContext.Provider, { value: controls, children }) });
34057
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkP2COO2QO_js.ViewerI18nContext.Provider, { value: state, children: /* @__PURE__ */ jsxRuntime.jsx(chunkP2COO2QO_js.ViewerLocaleControlsContext.Provider, { value: controls, children }) });
34048
34058
  }
34049
34059
  function HostLanguageRoot({ children, ...props }) {
34050
34060
  return provideLanguage(useHostLanguage(props), children);
@@ -34053,11 +34063,11 @@ function ProvidedLanguageRoot({ children, ...props }) {
34053
34063
  return provideLanguage(useProvidedLanguage(props), children);
34054
34064
  }
34055
34065
  function ViewerI18nRoot(props) {
34056
- const Root = React108.useContext(chunk73S5EOD3_js.PptxI18nContext) ? ProvidedLanguageRoot : HostLanguageRoot;
34066
+ const Root = React108.useContext(chunkP2COO2QO_js.PptxI18nContext) ? ProvidedLanguageRoot : HostLanguageRoot;
34057
34067
  return /* @__PURE__ */ jsxRuntime.jsx(Root, { ...props });
34058
34068
  }
34059
34069
  function useViewerLocaleControls() {
34060
- return React108.useContext(chunk73S5EOD3_js.ViewerLocaleControlsContext);
34070
+ return React108.useContext(chunkP2COO2QO_js.ViewerLocaleControlsContext);
34061
34071
  }
34062
34072
  var NO_RIBBON_ADD_INS = [];
34063
34073
  var NO_FILE_PROVIDERS = [];
@@ -34136,7 +34146,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34136
34146
  limits
34137
34147
  } = props;
34138
34148
  const cloudDocument = React108.useMemo(() => pptx.createCloudDocumentController(), []);
34139
- const cloudFile = chunkYQ67KAQR_js.useController(cloudDocument).file;
34149
+ const cloudFile = chunkNRTPKXZX_js.useController(cloudDocument).file;
34140
34150
  const {
34141
34151
  storage: viewerStorage,
34142
34152
  fileName,
@@ -34150,7 +34160,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34150
34160
  filePath: hostFilePath
34151
34161
  });
34152
34162
  const saveProgress = React108.useMemo(() => pptx.createSaveProgressController(), []);
34153
- const saveProgressState = chunkYQ67KAQR_js.useController(saveProgress);
34163
+ const saveProgressState = chunkNRTPKXZX_js.useController(saveProgress);
34154
34164
  const storage = React108.useMemo(
34155
34165
  () => viewerStorage ? saveProgress.wrap(viewerStorage) : viewerStorage,
34156
34166
  [viewerStorage, saveProgress]
@@ -34192,7 +34202,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34192
34202
  (current) => current.includes(family) ? current : [...current, family]
34193
34203
  );
34194
34204
  }, []);
34195
- const { t } = chunk73S5EOD3_js.useTranslation();
34205
+ const { t } = chunkP2COO2QO_js.useTranslation();
34196
34206
  const {
34197
34207
  localeCode,
34198
34208
  locales: resolvedLocales,
@@ -34249,12 +34259,13 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34249
34259
  },
34250
34260
  [hostStorage, cloudDocument]
34251
34261
  );
34252
- const { optionsStore, options: viewerOptions } = chunkYQ67KAQR_js.useViewerOptions();
34262
+ const { optionsStore, options: viewerOptions } = chunkNRTPKXZX_js.useViewerOptions();
34253
34263
  const custom = useViewerCustomization(
34254
34264
  customization,
34255
34265
  legacyHiddenActions,
34256
34266
  optionsStore,
34257
- allowExternalContent
34267
+ allowExternalContent,
34268
+ googleFonts
34258
34269
  );
34259
34270
  const { resolved: customizationResolved, hiddenActions } = custom;
34260
34271
  const aiEnabled = Boolean(ai) && pptx.isFeatureEnabled(customizationResolved, "ai");
@@ -34268,8 +34279,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34268
34279
  const handleEnableEditing = React108.useCallback(() => {
34269
34280
  setProtectedViewOverridden(true);
34270
34281
  }, []);
34271
- const readOnlyRec = chunkYQ67KAQR_js.useReadOnlyRecommendationState(content);
34272
- const compatToastsState = chunkYQ67KAQR_js.useCompatibilityToastsState();
34282
+ const readOnlyRec = chunkNRTPKXZX_js.useReadOnlyRecommendationState(content);
34283
+ const compatToastsState = chunkNRTPKXZX_js.useCompatibilityToastsState();
34273
34284
  const [notesBarHeight, setNotesBarHeight] = React108.useState(0);
34274
34285
  const runProgramNoticesState = useRunProgramNoticesState();
34275
34286
  const [collaborationReadOnly, setCollaborationReadOnly] = React108.useState(Boolean(collaboration));
@@ -34292,8 +34303,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34292
34303
  filePath
34293
34304
  });
34294
34305
  const [isShareDialogOpen, setIsShareDialogOpen] = React108.useState(false);
34295
- const { reducedMotion, toggleReducedMotion } = chunkYQ67KAQR_js.useReducedMotion();
34296
- const state = chunkYQ67KAQR_js.useViewerState({
34306
+ const { reducedMotion, toggleReducedMotion } = chunkNRTPKXZX_js.useReducedMotion();
34307
+ const state = chunkNRTPKXZX_js.useViewerState({
34297
34308
  content,
34298
34309
  canEdit,
34299
34310
  inspectorInitiallyOpen: props.inspectorInitiallyOpen
@@ -34420,16 +34431,16 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34420
34431
  }
34421
34432
  }, [settings, optionsStore]);
34422
34433
  const handleClearOptionsCache = useAutosaveCacheMaintenance(viewerOptions, storage);
34423
- const mobile = chunkYQ67KAQR_js.useIsMobile();
34434
+ const mobile = chunkNRTPKXZX_js.useIsMobile();
34424
34435
  const { isMobile, isTouchDevice, isVirtualKeyboardOpen } = mobile;
34425
- const resizablePanels = chunkYQ67KAQR_js.useResizablePanels();
34436
+ const resizablePanels = chunkNRTPKXZX_js.useResizablePanels();
34426
34437
  const {
34427
34438
  gridSpacingPx,
34428
34439
  visibleSlideIndexes,
34429
34440
  slideSectionGroups,
34430
34441
  masterPseudoSlide,
34431
34442
  authoredRange
34432
- } = chunkYQ67KAQR_js.useDerivedSlideState({
34443
+ } = chunkNRTPKXZX_js.useDerivedSlideState({
34433
34444
  slides,
34434
34445
  sections: state.sections,
34435
34446
  customShows: state.customShows,
@@ -34454,7 +34465,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34454
34465
  state.cropSessionRef
34455
34466
  ]
34456
34467
  );
34457
- const zoom = chunkYQ67KAQR_js.useZoomViewport({
34468
+ const zoom = chunkNRTPKXZX_js.useZoomViewport({
34458
34469
  canvasSize,
34459
34470
  selectedElements: state.selectedElements,
34460
34471
  fitPadding: props.fitPadding,
@@ -34470,7 +34481,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34470
34481
  onChangeCallback.current?.();
34471
34482
  }, [setIsDirty]);
34472
34483
  const restoreHistoryThemeRef = React108.useRef(void 0);
34473
- const history = chunkYQ67KAQR_js.useEditorHistory({
34484
+ const history = chunkNRTPKXZX_js.useEditorHistory({
34474
34485
  slides,
34475
34486
  canvasSize,
34476
34487
  activeSlideIndex,
@@ -34499,7 +34510,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34499
34510
  setEditTemplateMode: state.setEditTemplateMode,
34500
34511
  setHeaderFooter: state.setHeaderFooter
34501
34512
  });
34502
- const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunkYQ67KAQR_js.usePresentationSetup({
34513
+ const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunkNRTPKXZX_js.usePresentationSetup({
34503
34514
  mode,
34504
34515
  slides,
34505
34516
  visibleSlideIndexes,
@@ -34578,7 +34589,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34578
34589
  loading,
34579
34590
  error
34580
34591
  ]);
34581
- chunkYQ67KAQR_js.useTouchGestures({
34592
+ chunkNRTPKXZX_js.useTouchGestures({
34582
34593
  targetRef: zoom.canvasViewportRef,
34583
34594
  currentScale: zoom.scale,
34584
34595
  callbacks: {
@@ -34600,7 +34611,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34600
34611
  },
34601
34612
  enabled: isTouchDevice
34602
34613
  });
34603
- const dialogs = chunkYQ67KAQR_js.useViewerDialogs({
34614
+ const dialogs = chunkNRTPKXZX_js.useViewerDialogs({
34604
34615
  mode,
34605
34616
  slides,
34606
34617
  activeSlide,
@@ -34628,7 +34639,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34628
34639
  history,
34629
34640
  embeddedFontFamilies: state.embeddedFonts.map((font) => font.name)
34630
34641
  });
34631
- chunkYQ67KAQR_js.useClearSelectionOnSlideChange(state, activeSlideIndex);
34642
+ chunkNRTPKXZX_js.useClearSelectionOnSlideChange(state, activeSlideIndex);
34632
34643
  const zoomBeforePresentRef = React108.useRef(null);
34633
34644
  React108.useEffect(() => {
34634
34645
  if (mode !== "present") {
@@ -34646,7 +34657,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34646
34657
  zoom.handleZoomToFit();
34647
34658
  zoom.canvasViewportRef.current?.scrollTo({ left: 0, top: 0 });
34648
34659
  }, [mode]);
34649
- const editorOps = chunkYQ67KAQR_js.useEditorOperations({
34660
+ const editorOps = chunkNRTPKXZX_js.useEditorOperations({
34650
34661
  state,
34651
34662
  history,
34652
34663
  zoom,
@@ -34691,7 +34702,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34691
34702
  handlerRef,
34692
34703
  viewerApi,
34693
34704
  loadVersion
34694
- } = chunkYQ67KAQR_js.useViewerIntegration({
34705
+ } = chunkNRTPKXZX_js.useViewerIntegration({
34695
34706
  transformCommittedText: (text, previous) => pptx.applyAutoCorrectToEdit(text, previous, viewerOptions.proofing),
34696
34707
  state,
34697
34708
  zoom,
@@ -34724,7 +34735,9 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34724
34735
  // http(s) image sources actually load.
34725
34736
  allowExternalImages: pptx.resolveAllowExternalContent(allowExternalContent, viewerOptions),
34726
34737
  initialSlide,
34727
- googleFonts,
34738
+ // Host `googleFonts` first, else Trust Center > "Download fonts"; read per render, so the
34739
+ // managed webfont link follows the option and the next load never sees a stale value.
34740
+ googleFonts: pptx.resolveEffectiveGoogleFonts(googleFonts, viewerOptions),
34728
34741
  limits,
34729
34742
  setReadOnlyRecommendation: readOnlyRec.setRecommendation,
34730
34743
  setModifyVerifier: readOnlyRec.setModifyVerifier,
@@ -34834,7 +34847,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34834
34847
  updateElementById: editorOps.ops.updateElementById
34835
34848
  });
34836
34849
  const ribbonScope = useRibbonScopeToken();
34837
- const viewPreferencesSync = chunkYQ67KAQR_js.useViewPreferencesSync({
34850
+ const viewPreferencesSync = chunkNRTPKXZX_js.useViewPreferencesSync({
34838
34851
  loadVersion,
34839
34852
  viewProperties: state.viewProperties,
34840
34853
  setViewProperties: state.setViewProperties,
@@ -34885,7 +34898,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34885
34898
  },
34886
34899
  [state]
34887
34900
  );
34888
- const layoutSwitching = chunkYQ67KAQR_js.useLayoutSwitching({
34901
+ const layoutSwitching = chunkNRTPKXZX_js.useLayoutSwitching({
34889
34902
  handler: handlerRef.current,
34890
34903
  slides,
34891
34904
  activeSlideIndex,
@@ -35004,7 +35017,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35004
35017
  "data-pptx-editor-chrome": "",
35005
35018
  ...{ [pptx.RIBBON_SCOPE_ATTR]: ribbonScope },
35006
35019
  "aria-busy": loading,
35007
- className: chunk73S5EOD3_js.cn(
35020
+ className: chunkP2COO2QO_js.cn(
35008
35021
  "h-full w-full bg-background text-foreground relative",
35009
35022
  ...pptx.resolveOptionRootClasses(viewerOptions, "pptx")
35010
35023
  ),
@@ -35017,7 +35030,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35017
35030
  ref: containerRef,
35018
35031
  tabIndex: 0,
35019
35032
  className: "h-full w-full flex flex-col overflow-hidden outline-none",
35020
- children: loading ? /* @__PURE__ */ jsxRuntime.jsx(LoadingState, {}) : error ? /* @__PURE__ */ jsxRuntime.jsx(ErrorState, { error }) : /* @__PURE__ */ jsxRuntime.jsx(ThemeColorMapProvider, { value: themeColorMapValue, children: /* @__PURE__ */ jsxRuntime.jsxs(RecentColorsProvider, { value: recentColorsValue, children: [
35033
+ children: loading ? /* @__PURE__ */ jsxRuntime.jsx(LoadingState, { fontProgress: state.fontProgress }) : error ? /* @__PURE__ */ jsxRuntime.jsx(ErrorState, { error }) : /* @__PURE__ */ jsxRuntime.jsx(ThemeColorMapProvider, { value: themeColorMapValue, children: /* @__PURE__ */ jsxRuntime.jsxs(RecentColorsProvider, { value: recentColorsValue, children: [
35021
35034
  mode !== "present" && rootOptions.showToolbar && /* @__PURE__ */ jsxRuntime.jsx(
35022
35035
  ViewerToolbarSection,
35023
35036
  {
@@ -35155,6 +35168,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35155
35168
  isDirty: state.isDirty,
35156
35169
  autosaveStatus,
35157
35170
  saveProgress: saveProgressState,
35171
+ fontProgress: state.fontProgress,
35158
35172
  onToggleNotes: () => state.setIsSlideNotesCollapsed((p) => !p),
35159
35173
  onUpdateNotes: propertyHandlers.handleUpdateNotes,
35160
35174
  collaborationSlot: collaboration && shareAvailable ? /* @__PURE__ */ jsxRuntime.jsx(CollaborationStatusStrip, {}) : void 0,
@@ -35405,8 +35419,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35405
35419
  // Nothing previously provided it, so every one of those consumers was
35406
35420
  // silently reading `DEFAULT_VIEWER_OPTIONS` forever, no matter what
35407
35421
  // the user changed in the Options dialog.
35408
- /* @__PURE__ */ jsxRuntime.jsx(ViewerOptionsProvider, { options: viewerOptions, store: optionsStore, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCustomizationContext.Provider, { value: customizationResolved, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerStorageContext.Provider, { value: hostStorage, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCloudFilesContext.Provider, { value: cloudFiles, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerRegionBaseContext.Provider, { value: regionBase, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonAddInsContext.Provider, { value: ribbonAddIns ?? NO_RIBBON_ADD_INS, children: /* @__PURE__ */ jsxRuntime.jsx(AccountAuthContext.Provider, { value: accountAuth, children: /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
35409
- chunkYQ67KAQR_js.CollaborationProvider,
35422
+ /* @__PURE__ */ jsxRuntime.jsx(ViewerOptionsProvider, { options: viewerOptions, store: optionsStore, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCustomizationContext.Provider, { value: customizationResolved, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerStorageContext.Provider, { value: hostStorage, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCloudFilesContext.Provider, { value: cloudFiles, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerRegionBaseContext.Provider, { value: regionBase, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonAddInsContext.Provider, { value: ribbonAddIns ?? NO_RIBBON_ADD_INS, children: /* @__PURE__ */ jsxRuntime.jsx(AccountAuthContext.Provider, { value: accountAuth, children: /* @__PURE__ */ jsxRuntime.jsx(chunkNRTPKXZX_js.Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
35423
+ chunkNRTPKXZX_js.CollaborationProvider,
35410
35424
  {
35411
35425
  config: collaboration,
35412
35426
  canvasWidth: canvasSize.width,
@@ -35463,19 +35477,19 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35463
35477
  slideCount: slides.length
35464
35478
  }
35465
35479
  ),
35466
- /* @__PURE__ */ jsxRuntime.jsx(ShapeFormatContext.Provider, { value: shapeFormat, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonGalleryCommandsContext.Provider, { value: ribbonGalleries, children: /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.ChartFormatContext.Provider, { value: chartFormat, children: viewerContent }) }) })
35480
+ /* @__PURE__ */ jsxRuntime.jsx(ShapeFormatContext.Provider, { value: shapeFormat, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonGalleryCommandsContext.Provider, { value: ribbonGalleries, children: /* @__PURE__ */ jsxRuntime.jsx(chunkNRTPKXZX_js.ChartFormatContext.Provider, { value: chartFormat, children: viewerContent }) }) })
35467
35481
  ]
35468
35482
  }
35469
35483
  ) }) }) }) }) }) }) }) }) })
35470
35484
  );
35471
35485
  }
35472
35486
  );
35473
- var PowerPointViewer2 = /* @__PURE__ */ chunkYQ67KAQR_js.withDisplayName(
35487
+ var PowerPointViewer2 = /* @__PURE__ */ chunkNRTPKXZX_js.withDisplayName(
35474
35488
  PowerPointViewerComponent,
35475
35489
  "PowerPointViewer"
35476
35490
  );
35477
35491
  function CollaborationStatusStrip() {
35478
- const collab = chunkYQ67KAQR_js.useCollaboration();
35492
+ const collab = chunkNRTPKXZX_js.useCollaboration();
35479
35493
  if (!collab) {
35480
35494
  return null;
35481
35495
  }
@@ -35492,9 +35506,9 @@ function CollaborationStateReporter({
35492
35506
  onChange,
35493
35507
  onStatus
35494
35508
  }) {
35495
- const collab = chunkYQ67KAQR_js.useCollaboration();
35509
+ const collab = chunkNRTPKXZX_js.useCollaboration();
35496
35510
  useCollaborationStateReport(collab, onChange);
35497
- chunkYQ67KAQR_js.useReportOnChange(collab?.status ?? "disconnected", onStatus, "disconnected");
35511
+ chunkNRTPKXZX_js.useReportOnChange(collab?.status ?? "disconnected", onStatus, "disconnected");
35498
35512
  return null;
35499
35513
  }
35500
35514
  function CollaborationDocumentSync({
@@ -35509,8 +35523,8 @@ function CollaborationDocumentSync({
35509
35523
  onReadOnlyChange,
35510
35524
  history
35511
35525
  }) {
35512
- const collab = chunkYQ67KAQR_js.useCollaboration();
35513
- chunkYQ67KAQR_js.useCollaborationDocumentSync({
35526
+ const collab = chunkNRTPKXZX_js.useCollaboration();
35527
+ chunkNRTPKXZX_js.useCollaborationDocumentSync({
35514
35528
  collaboration: collab,
35515
35529
  history,
35516
35530
  slides,
@@ -35530,14 +35544,14 @@ function CollaborationFollowLayer({
35530
35544
  setActiveSlideIndex,
35531
35545
  slideCount
35532
35546
  }) {
35533
- const collab = chunkYQ67KAQR_js.useCollaboration();
35534
- const { followedClientId, followUser } = chunkYQ67KAQR_js.useFollowMode({
35547
+ const collab = chunkNRTPKXZX_js.useCollaboration();
35548
+ const { followedClientId, followUser } = chunkNRTPKXZX_js.useFollowMode({
35535
35549
  collab,
35536
35550
  activeSlideIndex,
35537
35551
  setActiveSlideIndex,
35538
35552
  slideCount
35539
35553
  });
35540
- chunkYQ67KAQR_js.useBroadcastFollower({
35554
+ chunkNRTPKXZX_js.useBroadcastFollower({
35541
35555
  collab,
35542
35556
  activeSlideIndex,
35543
35557
  setActiveSlideIndex,
@@ -35579,7 +35593,7 @@ function PptxI18nProvider({
35579
35593
  () => ({ t: withEnglishFallback(translate), locale }),
35580
35594
  [translate, locale]
35581
35595
  );
35582
- return /* @__PURE__ */ jsxRuntime.jsx(chunk73S5EOD3_js.PptxI18nContext.Provider, { value: state, children });
35596
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkP2COO2QO_js.PptxI18nContext.Provider, { value: state, children });
35583
35597
  }
35584
35598
 
35585
35599
  Object.defineProperty(exports, "THEME_CATALOG", {