pptx-react-viewer 4.64.0 → 4.64.1

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 (81) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/{AiChatPanel-DRY6JUQE.js → AiChatPanel-7AFFNYEN.js} +19 -19
  3. package/dist/AiChatPanel-7AFFNYEN.js.br +0 -0
  4. package/dist/AiChatPanel-7AFFNYEN.js.gz +0 -0
  5. package/dist/{AiChatPanel-KBSDSD5Y.mjs → AiChatPanel-7U7IJRNY.mjs} +1 -1
  6. package/dist/AiChatPanel-7U7IJRNY.mjs.br +0 -0
  7. package/dist/AiChatPanel-7U7IJRNY.mjs.gz +0 -0
  8. package/dist/ai.js +2 -2
  9. package/dist/ai.js.br +0 -0
  10. package/dist/ai.js.gz +0 -0
  11. package/dist/ai.mjs +1 -1
  12. package/dist/ai.mjs.br +0 -0
  13. package/dist/ai.mjs.gz +0 -0
  14. package/dist/{chunk-JKSUB7DR.js → chunk-5DBKW7F3.js} +3 -3
  15. package/dist/chunk-5DBKW7F3.js.br +0 -0
  16. package/dist/{chunk-JKSUB7DR.js.gz → chunk-5DBKW7F3.js.gz} +0 -0
  17. package/dist/{chunk-46VMP4EH.mjs → chunk-5ZW3GP6C.mjs} +4 -4
  18. package/dist/chunk-5ZW3GP6C.mjs.br +0 -0
  19. package/dist/chunk-5ZW3GP6C.mjs.gz +0 -0
  20. package/dist/{chunk-FYYQ4OGF.mjs → chunk-G5JGUSBL.mjs} +12 -5
  21. package/dist/chunk-G5JGUSBL.mjs.br +0 -0
  22. package/dist/chunk-G5JGUSBL.mjs.gz +0 -0
  23. package/dist/{chunk-PX46BOMQ.js → chunk-GXL2XMST.js} +560 -560
  24. package/dist/chunk-GXL2XMST.js.br +0 -0
  25. package/dist/chunk-GXL2XMST.js.gz +0 -0
  26. package/dist/{chunk-SHI3PQ5F.mjs → chunk-HZBEKG5R.mjs} +4 -4
  27. package/dist/chunk-HZBEKG5R.mjs.br +0 -0
  28. package/dist/chunk-HZBEKG5R.mjs.gz +0 -0
  29. package/dist/{chunk-7UFO4OZQ.js → chunk-PNDORR6S.js} +1 -1
  30. package/dist/chunk-PNDORR6S.js.br +0 -0
  31. package/dist/chunk-PNDORR6S.js.gz +0 -0
  32. package/dist/{chunk-73SDWM6K.js → chunk-VGU5S37T.js} +212 -205
  33. package/dist/chunk-VGU5S37T.js.br +0 -0
  34. package/dist/chunk-VGU5S37T.js.gz +0 -0
  35. package/dist/{chunk-SGWF6GUX.mjs → chunk-WAIX4VJ2.mjs} +1 -1
  36. package/dist/chunk-WAIX4VJ2.mjs.br +0 -0
  37. package/dist/chunk-WAIX4VJ2.mjs.gz +0 -0
  38. package/dist/index.js +27 -27
  39. package/dist/index.js.br +0 -0
  40. package/dist/index.js.gz +0 -0
  41. package/dist/index.mjs +4 -4
  42. package/dist/index.mjs.br +0 -0
  43. package/dist/index.mjs.gz +0 -0
  44. package/dist/internals.js +81 -81
  45. package/dist/internals.js.br +0 -0
  46. package/dist/internals.js.gz +0 -0
  47. package/dist/internals.mjs +2 -2
  48. package/dist/internals.mjs.br +0 -0
  49. package/dist/internals.mjs.gz +0 -0
  50. package/dist/pptx-viewer-canvas.css +1 -1
  51. package/dist/pptx-viewer-canvas.css.br +0 -0
  52. package/dist/pptx-viewer-canvas.css.gz +0 -0
  53. package/dist/pptx-viewer.css +1 -1
  54. package/dist/pptx-viewer.css.br +0 -0
  55. package/dist/pptx-viewer.css.gz +0 -0
  56. package/dist/viewer/index.js +21 -21
  57. package/dist/viewer/index.js.br +0 -0
  58. package/dist/viewer/index.js.gz +0 -0
  59. package/dist/viewer/index.mjs +4 -4
  60. package/dist/viewer/index.mjs.br +0 -0
  61. package/dist/viewer/index.mjs.gz +0 -0
  62. package/package.json +3 -3
  63. package/dist/AiChatPanel-DRY6JUQE.js.br +0 -0
  64. package/dist/AiChatPanel-DRY6JUQE.js.gz +0 -0
  65. package/dist/AiChatPanel-KBSDSD5Y.mjs.br +0 -0
  66. package/dist/AiChatPanel-KBSDSD5Y.mjs.gz +0 -0
  67. package/dist/chunk-46VMP4EH.mjs.br +0 -0
  68. package/dist/chunk-46VMP4EH.mjs.gz +0 -0
  69. package/dist/chunk-73SDWM6K.js.br +0 -0
  70. package/dist/chunk-73SDWM6K.js.gz +0 -0
  71. package/dist/chunk-7UFO4OZQ.js.br +0 -0
  72. package/dist/chunk-7UFO4OZQ.js.gz +0 -0
  73. package/dist/chunk-FYYQ4OGF.mjs.br +0 -0
  74. package/dist/chunk-FYYQ4OGF.mjs.gz +0 -0
  75. package/dist/chunk-JKSUB7DR.js.br +0 -0
  76. package/dist/chunk-PX46BOMQ.js.br +0 -0
  77. package/dist/chunk-PX46BOMQ.js.gz +0 -0
  78. package/dist/chunk-SGWF6GUX.mjs.br +0 -0
  79. package/dist/chunk-SGWF6GUX.mjs.gz +0 -0
  80. package/dist/chunk-SHI3PQ5F.mjs.br +0 -0
  81. package/dist/chunk-SHI3PQ5F.mjs.gz +0 -0
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunk7UFO4OZQ_js = require('./chunk-7UFO4OZQ.js');
4
- var chunk73SDWM6K_js = require('./chunk-73SDWM6K.js');
5
- var chunkJKSUB7DR_js = require('./chunk-JKSUB7DR.js');
3
+ var chunkPNDORR6S_js = require('./chunk-PNDORR6S.js');
4
+ var chunkVGU5S37T_js = require('./chunk-VGU5S37T.js');
5
+ var chunk5DBKW7F3_js = require('./chunk-5DBKW7F3.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 } = chunkJKSUB7DR_js.useTranslation();
52
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
87
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
161
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
202
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
307
+ const { t } = chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
408
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
483
+ const { t } = chunk5DBKW7F3_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 ?? chunkJKSUB7DR_js.SLIDE_NAV_THUMBNAIL_WIDTH;
547
+ const width = previewWidth ?? chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
552
+ const { t } = chunk5DBKW7F3_js.useTranslation();
553
553
  const transitionLabel = slide.transition ? (() => {
554
- const opt = chunkJKSUB7DR_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
554
+ const opt = chunk5DBKW7F3_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(chunk73SDWM6K_js.SlideBackgroundImageLayer, { slide }),
580
+ /* @__PURE__ */ jsxRuntime.jsx(chunkVGU5S37T_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
- chunk73SDWM6K_js.StaticElementRenderer,
590
+ chunkVGU5S37T_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 !== chunkJKSUB7DR_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunkJKSUB7DR_js.UNGROUPED_SECTION_ID).map((group) => group.id);
716
+ const declared = groups.filter((group) => group.id !== chunk5DBKW7F3_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
773
+ const { t } = chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
801
+ className: chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
823
+ className: chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
846
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
1045
- const collab = chunk73SDWM6K_js.useCollaboration();
1044
+ const { t } = chunk5DBKW7F3_js.useTranslation();
1045
+ const collab = chunkVGU5S37T_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 !== chunkJKSUB7DR_js.DEFAULT_SECTION_GROUP_ID);
1070
+ const showSectionHeaders = sectionGroups.some((group) => group.id !== chunk5DBKW7F3_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 } = chunk73SDWM6K_js.useVirtualizedSlides({
1140
+ const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunkVGU5S37T_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
- chunk73SDWM6K_js.StaticElementRenderer,
1424
+ chunkVGU5S37T_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 } = chunkJKSUB7DR_js.useTranslation();
1493
- const { panelStyle, handlers: dragHandlers } = chunk73SDWM6K_js.useModalDismissDrag(onClose);
1492
+ const { t } = chunk5DBKW7F3_js.useTranslation();
1493
+ const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_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: chunkJKSUB7DR_js.cn(
1578
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
1788
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
1894
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
2044
- const { dragY, dragging, handlers } = chunk73SDWM6K_js.useSheetDismissDrag(onClose);
2043
+ const { t } = chunk5DBKW7F3_js.useTranslation();
2044
+ const { dragY, dragging, handlers } = chunkVGU5S37T_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: chunkJKSUB7DR_js.cn(
2068
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
2115
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
2191
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
2272
+ const { t } = chunk5DBKW7F3_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 } = chunk73SDWM6K_js.useToolbarVisibility(p.hiddenActions);
2313
+ const { isHidden } = chunkVGU5S37T_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 } = chunkJKSUB7DR_js.useTranslation();
2364
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
2471
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
2606
+ const { t } = chunk5DBKW7F3_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
- chunk73SDWM6K_js.playAnimationSound(url);
2648
+ chunkVGU5S37T_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 } = chunkJKSUB7DR_js.useTranslation();
2667
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
2730
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
2828
+ const { t } = chunk5DBKW7F3_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.64.0" ;
2856
+ const version = "4.64.1" ;
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: chunkJKSUB7DR_js.cn(
2896
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
2971
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
2997
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
3051
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
3113
+ const { t, locale } = chunk5DBKW7F3_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 } = chunk73SDWM6K_js.useToolbarVisibility(p.hiddenActions);
3121
+ const { isHidden } = chunkVGU5S37T_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: chunkJKSUB7DR_js.cn("fixed z-50", className),
3390
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
3400
+ const { t } = chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
3416
+ className: chunk5DBKW7F3_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
- chunk73SDWM6K_js.StaticElementRenderer,
3490
+ chunkVGU5S37T_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 } = chunkJKSUB7DR_js.useTranslation();
3765
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
3825
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
3845
- const supplied = React108.useContext(chunk73SDWM6K_js.ViewerOptionsStoreContext);
3844
+ const { t } = chunk5DBKW7F3_js.useTranslation();
3845
+ const supplied = React108.useContext(chunkVGU5S37T_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 } = chunkJKSUB7DR_js.useTranslation();
3879
- const { isHidden } = chunk73SDWM6K_js.useToolbarVisibility(p.hiddenActions);
3878
+ const { t } = chunk5DBKW7F3_js.useTranslation();
3879
+ const { isHidden } = chunkVGU5S37T_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 } = chunkJKSUB7DR_js.useTranslation();
4123
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
4146
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
4247
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
4323
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
4396
+ const { t } = chunk5DBKW7F3_js.useTranslation();
4397
4397
  const { open, onClose } = props;
4398
4398
  const [active, setActive] = React108.useState("home");
4399
- const { isTabVisible } = chunk73SDWM6K_js.useToolbarVisibility(props.hiddenActions);
4399
+ const { isTabVisible } = chunkVGU5S37T_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: chunkJKSUB7DR_js.cn(
4413
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
4688
+ const { t } = chunk5DBKW7F3_js.useTranslation();
4689
4689
  const { mode, canUndo, canRedo, onUndo, onRedo, onSetMode, onSaveAsPptx } = props;
4690
4690
  const [menuOpen, setMenuOpen] = React108.useState(false);
4691
- const { isHidden } = chunk73SDWM6K_js.useToolbarVisibility(props.hiddenActions);
4691
+ const { isHidden } = chunkVGU5S37T_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 } = chunkJKSUB7DR_js.useTranslation();
4738
- const commands = chunk73SDWM6K_js.useChartFormatContext();
4737
+ const { t } = chunk5DBKW7F3_js.useTranslation();
4738
+ const commands = chunkVGU5S37T_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 } = chunk73SDWM6K_js.useToolbarVisibility(hiddenActions);
4769
+ const { isHidden } = chunkVGU5S37T_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 } = chunkJKSUB7DR_js.useTranslation();
4786
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
4809
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
4895
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
4942
- const viewerOptions = chunk73SDWM6K_js.useViewerOptionsContext();
4941
+ const { t } = chunk5DBKW7F3_js.useTranslation();
4942
+ const viewerOptions = chunkVGU5S37T_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
- chunkJKSUB7DR_js.TOOLBAR_SECTIONS.filter((s) => p.isTabVisible(s.id)).map((s) => {
4950
+ chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
4960
+ className: chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
4980
+ className: chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
5001
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
5019
- const collab = chunk73SDWM6K_js.useCollaboration();
5018
+ const { t } = chunk5DBKW7F3_js.useTranslation();
5019
+ const collab = chunkVGU5S37T_js.useCollaboration();
5020
5020
  const isCollaborating = Boolean(collab && collab.status === "connected");
5021
- const { isHidden } = chunk73SDWM6K_js.useToolbarVisibility(p.hiddenActions);
5021
+ const { isHidden } = chunkVGU5S37T_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 } = chunkJKSUB7DR_js.useTranslation();
5076
- const options = chunk73SDWM6K_js.useViewerOptionsContext();
5075
+ const { t } = chunk5DBKW7F3_js.useTranslation();
5076
+ const options = chunkVGU5S37T_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 } = chunkJKSUB7DR_js.useTranslation();
5141
+ const { t } = chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
5196
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
5235
+ const { t } = chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
5244
+ className: chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
5257
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
5385
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
5423
+ const { t } = chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
5460
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
5498
+ const { t } = chunk5DBKW7F3_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 = chunk73SDWM6K_js.useCollaboration();
5507
+ const collab = chunkVGU5S37T_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: chunkJKSUB7DR_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
5527
+ className: chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
5588
+ className: chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(qab, p.isAiPanelOpen ? "text-primary" : "text-muted-foreground"),
5599
+ className: chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(qab, "text-muted-foreground"),
5610
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
5654
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
5674
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
5808
- const { isTabVisible } = chunk73SDWM6K_js.useToolbarVisibility(p.hiddenActions);
5809
- const viewerOptions = chunk73SDWM6K_js.useViewerOptionsContext();
5807
+ const { t } = chunk5DBKW7F3_js.useTranslation();
5808
+ const { isTabVisible } = chunkVGU5S37T_js.useToolbarVisibility(p.hiddenActions);
5809
+ const viewerOptions = chunkVGU5S37T_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: chunkJKSUB7DR_js.cn(
5907
+ className: chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
5933
+ className: chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
6123
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
6335
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation(), half = pptx.COMMENT_MARKER_SIZE / 2, markers = pptx.buildCommentMarkers(
6506
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
6550
+ const { t } = chunk5DBKW7F3_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 ? chunk73SDWM6K_js.renderStrokeView(liveStrokeView, true, void 0, "ink-live-preview") : isStrokeActive && liveStrokeD && /* @__PURE__ */ jsxRuntime.jsx(
6786
+ children: isStrokeActive && liveStrokeView ? chunkVGU5S37T_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 = chunkJKSUB7DR_js.GRID_SIZE, visible }) {
6801
+ function GridOverlay({ canvasSize, gridSpacingPx = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
6829
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
6943
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
6989
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
7145
+ const { t } = chunk5DBKW7F3_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 } = chunkJKSUB7DR_js.useTranslation();
7288
+ const { t } = chunk5DBKW7F3_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 = chunk73SDWM6K_js.imgSrc(element);
7336
+ const src = chunkVGU5S37T_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__ */ chunk73SDWM6K_js.withDisplayName(
7512
+ var HorizontalRuler = /* @__PURE__ */ chunkVGU5S37T_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__ */ chunk73SDWM6K_js.withDisplayName(
7586
+ var VerticalRuler = /* @__PURE__ */ chunkVGU5S37T_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, chunkJKSUB7DR_js.MIN_ELEMENT_SIZE),
7754
- height: Math.max(element.height, chunkJKSUB7DR_js.MIN_ELEMENT_SIZE),
7755
- ["--pptx-selection-width"]: `${Math.max(element.width, chunkJKSUB7DR_js.MIN_ELEMENT_SIZE)}px`,
7756
- ["--pptx-selection-height"]: `${Math.max(element.height, chunkJKSUB7DR_js.MIN_ELEMENT_SIZE)}px`,
7753
+ width: Math.max(element.width, chunk5DBKW7F3_js.MIN_ELEMENT_SIZE),
7754
+ height: Math.max(element.height, chunk5DBKW7F3_js.MIN_ELEMENT_SIZE),
7755
+ ["--pptx-selection-width"]: `${Math.max(element.width, chunk5DBKW7F3_js.MIN_ELEMENT_SIZE)}px`,
7756
+ ["--pptx-selection-height"]: `${Math.max(element.height, chunk5DBKW7F3_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: chunkJKSUB7DR_js.getElementTransform(element),
7768
+ transform: chunk5DBKW7F3_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
- chunk73SDWM6K_js.ResizeHandles,
7780
+ chunkVGU5S37T_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: chunkJKSUB7DR_js.getElementTransformWithoutRotation(element),
7787
+ nonRotationTransform: chunk5DBKW7F3_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(chunk73SDWM6K_js.InlineCollaborationContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(SlideCanvasContent, { ...props }) });
8491
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkVGU5S37T_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(chunk73SDWM6K_js.SlideBackgroundImageLayer, { slide: activeSlide }),
8764
+ /* @__PURE__ */ jsxRuntime.jsx(chunkVGU5S37T_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
- chunk73SDWM6K_js.ElementRenderer,
8776
+ chunkVGU5S37T_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 ? chunkJKSUB7DR_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8799
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunk5DBKW7F3_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
- chunk73SDWM6K_js.ElementRenderer,
8821
+ chunkVGU5S37T_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 ? chunkJKSUB7DR_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8844
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunk5DBKW7F3_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
- chunk73SDWM6K_js.ElementRenderer,
8888
+ chunkVGU5S37T_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) && !chunkJKSUB7DR_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
8923
+ selectedElement && selectedElement.id !== cropElement?.id && pptx.shouldShowElementHandles(isEditableCanvas, true, selectedElementIdSet.size) && !chunk5DBKW7F3_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
8924
8924
  SelectionHandleOverlay,
8925
8925
  {
8926
8926
  element: selectedElement,
8927
- adjustmentHandles: chunkJKSUB7DR_js.getShapeAdjustmentHandleDescriptors(selectedElement),
8927
+ adjustmentHandles: chunk5DBKW7F3_js.getShapeAdjustmentHandleDescriptors(selectedElement),
8928
8928
  onResizePointerDown: stableResizePointerDown,
8929
8929
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
8930
8930
  onRotate: stableRotate,
@@ -9031,14 +9031,14 @@ function SlideCanvasContent({
9031
9031
  );
9032
9032
  }
9033
9033
  function LoadingState({ className }) {
9034
- const { t } = chunkJKSUB7DR_js.useTranslation();
9034
+ const { t } = chunk5DBKW7F3_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: chunkJKSUB7DR_js.cn(
9041
+ className: chunk5DBKW7F3_js.cn(
9042
9042
  "h-full w-full flex items-center justify-center text-muted-foreground",
9043
9043
  className
9044
9044
  ),
@@ -9061,7 +9061,7 @@ function ErrorState({ className, error }) {
9061
9061
  {
9062
9062
  role: "alert",
9063
9063
  "aria-live": "assertive",
9064
- className: chunkJKSUB7DR_js.cn(
9064
+ className: chunk5DBKW7F3_js.cn(
9065
9065
  "h-full w-full flex items-center justify-center p-6 text-center text-red-400",
9066
9066
  className
9067
9067
  ),
@@ -9070,7 +9070,7 @@ function ErrorState({ className, error }) {
9070
9070
  );
9071
9071
  }
9072
9072
  function ShortcutPanel({ isOpen, onClose }) {
9073
- const { t } = chunkJKSUB7DR_js.useTranslation();
9073
+ const { t } = chunk5DBKW7F3_js.useTranslation();
9074
9074
  if (!isOpen) {
9075
9075
  return null;
9076
9076
  }
@@ -9092,7 +9092,7 @@ function ShortcutPanel({ isOpen, onClose }) {
9092
9092
  }
9093
9093
  )
9094
9094
  ] }),
9095
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunkJKSUB7DR_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
9095
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunk5DBKW7F3_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
9096
9096
  "div",
9097
9097
  {
9098
9098
  className: "flex items-center justify-between gap-3 rounded bg-muted/80 px-2 py-1.5",
@@ -9114,7 +9114,7 @@ function AccessibilityPanel({
9114
9114
  reducedMotion,
9115
9115
  onToggleReducedMotion
9116
9116
  }) {
9117
- const { t } = chunkJKSUB7DR_js.useTranslation();
9117
+ const { t } = chunk5DBKW7F3_js.useTranslation();
9118
9118
  if (!isOpen) {
9119
9119
  return null;
9120
9120
  }
@@ -9152,14 +9152,14 @@ function AccessibilityPanel({
9152
9152
  "aria-label": t("pptx.accessibility.reduceMotion"),
9153
9153
  "aria-checked": reducedMotion ?? false,
9154
9154
  onClick: onToggleReducedMotion,
9155
- className: chunkJKSUB7DR_js.cn(
9155
+ className: chunk5DBKW7F3_js.cn(
9156
9156
  "relative inline-flex h-5 w-9 items-center rounded-full transition-colors",
9157
9157
  reducedMotion ? "bg-primary" : "bg-muted-foreground/30"
9158
9158
  ),
9159
9159
  children: /* @__PURE__ */ jsxRuntime.jsx(
9160
9160
  "span",
9161
9161
  {
9162
- className: chunkJKSUB7DR_js.cn(
9162
+ className: chunk5DBKW7F3_js.cn(
9163
9163
  "inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",
9164
9164
  reducedMotion ? "translate-x-4" : "translate-x-0.5"
9165
9165
  )
@@ -9178,7 +9178,7 @@ function AccessibilityPanel({
9178
9178
  "div",
9179
9179
  {
9180
9180
  role: "listitem",
9181
- className: chunkJKSUB7DR_js.cn(
9181
+ className: chunk5DBKW7F3_js.cn(
9182
9182
  "flex items-start gap-2 rounded px-2 py-1.5 text-xs",
9183
9183
  /* Severity-based background and text colouring */
9184
9184
  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 +9206,7 @@ function ExportProgressModal({
9206
9206
  statusMessage,
9207
9207
  onCancel
9208
9208
  }) {
9209
- const { t } = chunkJKSUB7DR_js.useTranslation();
9209
+ const { t } = chunk5DBKW7F3_js.useTranslation();
9210
9210
  const ref = useWebControl(
9211
9211
  { open: isOpen, title, progress, status: statusMessage, translate: t },
9212
9212
  { "export-cancel": () => onCancel() }
@@ -9214,7 +9214,7 @@ function ExportProgressModal({
9214
9214
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-export-progress", { ref });
9215
9215
  }
9216
9216
  function StatusBar(p) {
9217
- const { t } = chunkJKSUB7DR_js.useTranslation();
9217
+ const { t } = chunk5DBKW7F3_js.useTranslation();
9218
9218
  const ref = React108.useRef(null);
9219
9219
  React108.useEffect(() => {
9220
9220
  const host = ref.current;
@@ -9294,7 +9294,7 @@ function ResizeHandle({
9294
9294
  {
9295
9295
  role: "separator",
9296
9296
  "aria-orientation": direction,
9297
- className: chunkJKSUB7DR_js.cn(
9297
+ className: chunk5DBKW7F3_js.cn(
9298
9298
  // Outer container: generous hit area for easy clicking.
9299
9299
  // The visible indicator is rendered via the inner pseudo-element (::after).
9300
9300
  "relative flex-shrink-0 z-20 group",
@@ -9305,7 +9305,7 @@ function ResizeHandle({
9305
9305
  children: /* @__PURE__ */ jsxRuntime.jsx(
9306
9306
  "div",
9307
9307
  {
9308
- className: chunkJKSUB7DR_js.cn(
9308
+ className: chunk5DBKW7F3_js.cn(
9309
9309
  "absolute transition-colors",
9310
9310
  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"
9311
9311
  )
@@ -9394,10 +9394,10 @@ function contextMenuHandlers(props, shapeFormat = null) {
9394
9394
  }
9395
9395
  function ContextMenu(props) {
9396
9396
  const { contextMenuState, mode, onClose } = props;
9397
- const { t } = chunkJKSUB7DR_js.useTranslation();
9397
+ const { t } = chunk5DBKW7F3_js.useTranslation();
9398
9398
  const customization = useViewerCustomizationContext();
9399
9399
  const shapeFormat = useShapeFormatContext();
9400
- const chartFormat = chunk73SDWM6K_js.useChartFormatContext();
9400
+ const chartFormat = chunkVGU5S37T_js.useChartFormatContext();
9401
9401
  const open = Boolean(contextMenuState) && mode === "edit";
9402
9402
  const handlers = {
9403
9403
  ...contextMenuHandlers(props, shapeFormat),
@@ -9473,7 +9473,7 @@ function canvasContextMenuHandlers(props) {
9473
9473
  }
9474
9474
  function CanvasContextMenu(props) {
9475
9475
  const { canvasContextMenuState, mode, onClose } = props;
9476
- const { t } = chunkJKSUB7DR_js.useTranslation();
9476
+ const { t } = chunk5DBKW7F3_js.useTranslation();
9477
9477
  const customization = useViewerCustomizationContext();
9478
9478
  const open = Boolean(canvasContextMenuState) && mode === "edit";
9479
9479
  const handlers = canvasContextMenuHandlers(props);
@@ -9536,7 +9536,7 @@ function FindReplacePanel({
9536
9536
  onReplaceAll,
9537
9537
  onClose
9538
9538
  }) {
9539
- const { t } = chunkJKSUB7DR_js.useTranslation();
9539
+ const { t } = chunk5DBKW7F3_js.useTranslation();
9540
9540
  const searchInputRef = React108.useRef(null);
9541
9541
  React108.useEffect(() => {
9542
9542
  searchInputRef.current?.focus();
@@ -9727,7 +9727,7 @@ function HandoutMasterPanel({
9727
9727
  onSlidesPerPageChange,
9728
9728
  onBackgroundChange
9729
9729
  }) {
9730
- const { t } = chunkJKSUB7DR_js.useTranslation();
9730
+ const { t } = chunk5DBKW7F3_js.useTranslation();
9731
9731
  if (!handoutMaster) {
9732
9732
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-4 text-center text-xs text-muted-foreground", children: t("pptx.master.noHandoutMaster") });
9733
9733
  }
@@ -9739,7 +9739,7 @@ function HandoutMasterPanel({
9739
9739
  {
9740
9740
  type: "button",
9741
9741
  "aria-pressed": slidesPerPage === count,
9742
- className: chunkJKSUB7DR_js.cn(
9742
+ className: chunk5DBKW7F3_js.cn(
9743
9743
  "px-2 py-1.5 rounded text-[11px] font-medium transition-colors",
9744
9744
  slidesPerPage === count ? "bg-primary text-white" : "bg-accent/50 text-muted-foreground hover:bg-accent/70 hover:text-foreground"
9745
9745
  ),
@@ -9782,7 +9782,7 @@ function NotesMasterPanel({
9782
9782
  notesMaster,
9783
9783
  onBackgroundChange
9784
9784
  }) {
9785
- const { t } = chunkJKSUB7DR_js.useTranslation();
9785
+ const { t } = chunk5DBKW7F3_js.useTranslation();
9786
9786
  const placeholderLabels = React108.useMemo(() => {
9787
9787
  if (!notesMaster?.placeholders) {
9788
9788
  return [];
@@ -9844,7 +9844,7 @@ function SlideMastersList({
9844
9844
  React108.useEffect(() => {
9845
9845
  activeRef.current?.scrollIntoView({ behavior: "smooth", block: "nearest" });
9846
9846
  }, [activeMasterIndex, activeLayoutIndex]);
9847
- const { t } = chunkJKSUB7DR_js.useTranslation();
9847
+ const { t } = chunk5DBKW7F3_js.useTranslation();
9848
9848
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9849
9849
  slideMasters.map((master, masterIdx) => {
9850
9850
  const isMasterActive = masterIdx === activeMasterIndex && activeLayoutIndex === null;
@@ -9857,7 +9857,7 @@ function SlideMastersList({
9857
9857
  ref: isMasterActive ? activeRef : void 0,
9858
9858
  "aria-pressed": isMasterActive,
9859
9859
  "aria-label": master.name || t("pptx.master.master"),
9860
- className: chunkJKSUB7DR_js.cn(
9860
+ className: chunk5DBKW7F3_js.cn(
9861
9861
  "group relative block w-full cursor-pointer rounded-lg border-2 p-1 text-left transition-all",
9862
9862
  isMasterActive ? "border-amber-500 bg-amber-500/10" : "border-border bg-background/40 hover:border-border"
9863
9863
  ),
@@ -9874,7 +9874,7 @@ function SlideMastersList({
9874
9874
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 px-1", children: /* @__PURE__ */ jsxRuntime.jsx(
9875
9875
  "span",
9876
9876
  {
9877
- className: chunkJKSUB7DR_js.cn(
9877
+ className: chunk5DBKW7F3_js.cn(
9878
9878
  "text-[10px] font-medium",
9879
9879
  isMasterActive ? "text-amber-400" : "text-muted-foreground"
9880
9880
  ),
@@ -9893,7 +9893,7 @@ function SlideMastersList({
9893
9893
  ref: isLayoutActive ? activeRef : void 0,
9894
9894
  "aria-pressed": isLayoutActive,
9895
9895
  "aria-label": layout.name || t("pptx.master.layout"),
9896
- className: chunkJKSUB7DR_js.cn(
9896
+ className: chunk5DBKW7F3_js.cn(
9897
9897
  "group relative block w-full cursor-pointer rounded-md border-2 p-0.5 text-left transition-all",
9898
9898
  isLayoutActive ? "border-primary bg-primary/10" : "border-border bg-background/40 hover:border-border"
9899
9899
  ),
@@ -9910,7 +9910,7 @@ function SlideMastersList({
9910
9910
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 px-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
9911
9911
  "span",
9912
9912
  {
9913
- className: chunkJKSUB7DR_js.cn(
9913
+ className: chunk5DBKW7F3_js.cn(
9914
9914
  "text-[9px]",
9915
9915
  isLayoutActive ? "text-primary" : "text-muted-foreground"
9916
9916
  ),
@@ -9954,7 +9954,7 @@ function MasterViewSidebar({
9954
9954
  onSlidesBackgroundChange
9955
9955
  }) {
9956
9956
  const scrollRef = React108.useRef(null);
9957
- const { t } = chunkJKSUB7DR_js.useTranslation();
9957
+ const { t } = chunk5DBKW7F3_js.useTranslation();
9958
9958
  const slidesBackground = pptx.masterViewBackgroundColor(
9959
9959
  { slideMasters },
9960
9960
  { tab: "slides", masterIndex: activeMasterIndex, layoutIndex: activeLayoutIndex }
@@ -10002,7 +10002,7 @@ function MasterViewSidebar({
10002
10002
  type: "button",
10003
10003
  role: "tab",
10004
10004
  "aria-selected": masterViewTab === tab.key,
10005
- className: chunkJKSUB7DR_js.cn(
10005
+ className: chunk5DBKW7F3_js.cn(
10006
10006
  "flex-1 px-1 py-1.5 text-[10px] font-medium transition-colors border-b-2",
10007
10007
  masterViewTab === tab.key ? "border-amber-500 text-amber-400" : "border-transparent text-muted-foreground hover:text-foreground"
10008
10008
  ),
@@ -10104,7 +10104,7 @@ function NotesMasterCanvas({
10104
10104
  notesText,
10105
10105
  slideNumber
10106
10106
  }) {
10107
- const { t } = chunkJKSUB7DR_js.useTranslation();
10107
+ const { t } = chunk5DBKW7F3_js.useTranslation();
10108
10108
  const pageWidth = notesCanvasSize?.width ?? DEFAULT_NOTES_WIDTH;
10109
10109
  const pageHeight = notesCanvasSize?.height ?? DEFAULT_NOTES_HEIGHT;
10110
10110
  const scale = React108.useMemo(() => {
@@ -10364,7 +10364,7 @@ function HandoutMasterCanvas({
10364
10364
  slideThumbnails,
10365
10365
  pageNumber
10366
10366
  }) {
10367
- const { t } = chunkJKSUB7DR_js.useTranslation();
10367
+ const { t } = chunk5DBKW7F3_js.useTranslation();
10368
10368
  const slideAspect = 4 / 3;
10369
10369
  const scale = React108.useMemo(() => {
10370
10370
  const scaleX = canvasSize.width / PAGE_WIDTH;
@@ -10505,7 +10505,7 @@ function SectionBlock({
10505
10505
  /* @__PURE__ */ jsxRuntime.jsx(
10506
10506
  lu.LuChevronDown,
10507
10507
  {
10508
- className: chunkJKSUB7DR_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10508
+ className: chunk5DBKW7F3_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10509
10509
  }
10510
10510
  ),
10511
10511
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-left", children: section.label }),
@@ -10549,12 +10549,12 @@ function SlideCardImpl({
10549
10549
  onDragLeave,
10550
10550
  onDrop
10551
10551
  }) {
10552
- const { t } = chunkJKSUB7DR_js.useTranslation();
10552
+ const { t } = chunk5DBKW7F3_js.useTranslation();
10553
10553
  const cue = pptx.hiddenSlideCue(slide.hidden, "sorter", index);
10554
10554
  return /* @__PURE__ */ jsxRuntime.jsxs(
10555
10555
  "div",
10556
10556
  {
10557
- className: chunkJKSUB7DR_js.cn(
10557
+ className: chunk5DBKW7F3_js.cn(
10558
10558
  "group relative cursor-pointer rounded-lg border-2 p-1 transition-all",
10559
10559
  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",
10560
10560
  slide.hidden && "opacity-40"
@@ -10577,7 +10577,7 @@ function SlideCardImpl({
10577
10577
  /* @__PURE__ */ jsxRuntime.jsx(
10578
10578
  "span",
10579
10579
  {
10580
- className: chunkJKSUB7DR_js.cn(
10580
+ className: chunk5DBKW7F3_js.cn(
10581
10581
  "text-[11px] font-medium px-0.5",
10582
10582
  isSelected ? "text-primary" : isActive ? "text-primary/70" : "text-muted-foreground"
10583
10583
  ),
@@ -10655,7 +10655,7 @@ function SorterContextMenu({
10655
10655
  onToggleHide,
10656
10656
  onClose
10657
10657
  }) {
10658
- const { t } = chunkJKSUB7DR_js.useTranslation();
10658
+ const { t } = chunk5DBKW7F3_js.useTranslation();
10659
10659
  const menuX = Math.max(8, Math.min(x, window.innerWidth - 220));
10660
10660
  const menuY = Math.max(8, Math.min(y, window.innerHeight - 300));
10661
10661
  const entries = pptx.buildSlideSorterContextMenuEntries({
@@ -11010,7 +11010,7 @@ function SlideSorterOverlay({
11010
11010
  onToggleHideSlides,
11011
11011
  onClose
11012
11012
  }) {
11013
- const { t } = chunkJKSUB7DR_js.useTranslation();
11013
+ const { t } = chunk5DBKW7F3_js.useTranslation();
11014
11014
  const state = useSlideSorterState({
11015
11015
  slides,
11016
11016
  templateElementsBySlideId,
@@ -11256,7 +11256,7 @@ function OutlineViewOverlay({
11256
11256
  bumpHistory,
11257
11257
  onClose
11258
11258
  }) {
11259
- const { t } = chunkJKSUB7DR_js.useTranslation();
11259
+ const { t } = chunk5DBKW7F3_js.useTranslation();
11260
11260
  const { rows, containerRef, run, onRowKeyDown } = useOutlineView({
11261
11261
  slides,
11262
11262
  canvasSize,
@@ -11347,7 +11347,7 @@ function ReadingViewStage({
11347
11347
  "div",
11348
11348
  {
11349
11349
  className: "absolute inset-0",
11350
- style: { backgroundColor: chunkJKSUB7DR_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
11350
+ style: { backgroundColor: chunk5DBKW7F3_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
11351
11351
  }
11352
11352
  ),
11353
11353
  slide.backgroundImage && /* @__PURE__ */ jsxRuntime.jsx(
@@ -11366,7 +11366,7 @@ function ReadingViewStage({
11366
11366
  className: "absolute left-0 top-0 origin-top-left",
11367
11367
  style: { width, height, transform: `scale(${scale})`, ...pptx.deviceStrokeStageStyle(scale) },
11368
11368
  children: elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
11369
- chunk73SDWM6K_js.StaticElementRenderer,
11369
+ chunkVGU5S37T_js.StaticElementRenderer,
11370
11370
  {
11371
11371
  element,
11372
11372
  activeSlide: slide,
@@ -11447,7 +11447,7 @@ function ReadingViewOverlay({
11447
11447
  activeSlideIndex,
11448
11448
  onExit
11449
11449
  }) {
11450
- const { t } = chunkJKSUB7DR_js.useTranslation();
11450
+ const { t } = chunk5DBKW7F3_js.useTranslation();
11451
11451
  const { state, viewportRef, scale, run } = useReadingView({
11452
11452
  slideCount: slides.length,
11453
11453
  canvasSize,
@@ -11578,7 +11578,7 @@ function renderRichNotesSegments(segments) {
11578
11578
  if (segment.style.fontFamily) {
11579
11579
  style.fontFamily = segment.style.fontFamily;
11580
11580
  }
11581
- if (segment.style.hyperlink && chunkJKSUB7DR_js.isUrlSafe(segment.style.hyperlink)) {
11581
+ if (segment.style.hyperlink && chunk5DBKW7F3_js.isUrlSafe(segment.style.hyperlink)) {
11582
11582
  const safeHref = segment.style.hyperlink;
11583
11583
  style.color = "#4a9eff";
11584
11584
  style.textDecoration = "underline";
@@ -11591,7 +11591,7 @@ function renderRichNotesSegments(segments) {
11591
11591
  style,
11592
11592
  onClick: (e) => {
11593
11593
  e.preventDefault();
11594
- chunkJKSUB7DR_js.safeOpenUrl(safeHref);
11594
+ chunk5DBKW7F3_js.safeOpenUrl(safeHref);
11595
11595
  },
11596
11596
  children: segment.text
11597
11597
  },
@@ -11615,7 +11615,7 @@ function NotesPrintDialog({
11615
11615
  onClose,
11616
11616
  notesStyle
11617
11617
  }) {
11618
- const { t } = chunkJKSUB7DR_js.useTranslation();
11618
+ const { t } = chunk5DBKW7F3_js.useTranslation();
11619
11619
  const printFrameRef = React108.useRef(null);
11620
11620
  const handlePrint = React108.useCallback(() => {
11621
11621
  const iframe = printFrameRef.current;
@@ -11673,7 +11673,7 @@ function NotesPrintDialog({
11673
11673
  ] }) });
11674
11674
  }
11675
11675
  function NotesToolbar(p) {
11676
- const { t } = chunkJKSUB7DR_js.useTranslation();
11676
+ const { t } = chunk5DBKW7F3_js.useTranslation();
11677
11677
  const ref = React108.useRef(null);
11678
11678
  React108.useEffect(() => {
11679
11679
  const host = ref.current;
@@ -11940,7 +11940,7 @@ function useSlideNotes({
11940
11940
  const href = target.getAttribute("data-hyperlink") || target.getAttribute("href");
11941
11941
  if (href && (e.ctrlKey || e.metaKey)) {
11942
11942
  e.preventDefault();
11943
- chunkJKSUB7DR_js.safeOpenUrl(href);
11943
+ chunk5DBKW7F3_js.safeOpenUrl(href);
11944
11944
  }
11945
11945
  }, []);
11946
11946
  return {
@@ -11977,7 +11977,7 @@ function SlideNotesPanel({
11977
11977
  notesStyle,
11978
11978
  onHeightChange
11979
11979
  }) {
11980
- const { t } = chunkJKSUB7DR_js.useTranslation();
11980
+ const { t } = chunk5DBKW7F3_js.useTranslation();
11981
11981
  const rootRef = React108__default.default.useRef(null);
11982
11982
  React108__default.default.useEffect(() => {
11983
11983
  const el = rootRef.current;
@@ -12021,7 +12021,7 @@ function SlideNotesPanel({
12021
12021
  });
12022
12022
  const hasNotes = draft.trim().length > 0;
12023
12023
  const slideLabel = activeSlide ? t("pptx.notes.slideN", { n: activeSlide.slideNumber }) : t("pptx.notes.noSlide");
12024
- const { dragY, handlers: dragHandlers } = chunk73SDWM6K_js.useSheetDismissDrag(onToggle);
12024
+ const { dragY, handlers: dragHandlers } = chunkVGU5S37T_js.useSheetDismissDrag(onToggle);
12025
12025
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
12026
12026
  isExpanded && /* @__PURE__ */ jsxRuntime.jsx(
12027
12027
  "button",
@@ -12037,7 +12037,7 @@ function SlideNotesPanel({
12037
12037
  {
12038
12038
  ref: rootRef,
12039
12039
  "data-pptx-chrome": "notes",
12040
- className: chunkJKSUB7DR_js.cn(
12040
+ className: chunk5DBKW7F3_js.cn(
12041
12041
  "flex flex-col border-t border-border/60 bg-background select-none",
12042
12042
  // On mobile, hide the entire notes strip when collapsed: the
12043
12043
  // MobileBottomBar's Notes button is the entry point instead.
@@ -12221,7 +12221,7 @@ function VersionHistoryPanel({
12221
12221
  onClose,
12222
12222
  onRestore
12223
12223
  }) {
12224
- const { t } = chunkJKSUB7DR_js.useTranslation();
12224
+ const { t } = chunk5DBKW7F3_js.useTranslation();
12225
12225
  const [versions, setVersions] = React108.useState([]);
12226
12226
  const [loading, setLoading] = React108.useState(false);
12227
12227
  const [restoringKey, setRestoringKey] = React108.useState(null);
@@ -12367,7 +12367,7 @@ function SlideDiffRow({
12367
12367
  onAccept,
12368
12368
  onReject
12369
12369
  }) {
12370
- const { t } = chunkJKSUB7DR_js.useTranslation();
12370
+ const { t } = chunk5DBKW7F3_js.useTranslation();
12371
12371
  const [expanded, setExpanded] = React108.useState(diff.status === "changed");
12372
12372
  const statusLabel = (() => {
12373
12373
  switch (diff.status) {
@@ -12401,7 +12401,7 @@ function SlideDiffRow({
12401
12401
  return /* @__PURE__ */ jsxRuntime.jsxs(
12402
12402
  "div",
12403
12403
  {
12404
- className: chunkJKSUB7DR_js.cn(
12404
+ className: chunk5DBKW7F3_js.cn(
12405
12405
  "rounded-lg border transition-colors",
12406
12406
  isResolved ? "border-border/60 bg-card/40 opacity-60" : "border-border bg-background/70"
12407
12407
  ),
@@ -12415,7 +12415,7 @@ function SlideDiffRow({
12415
12415
  children: [
12416
12416
  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" }),
12417
12417
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-foreground", children: t("pptx.compare.slideNumber", { number: slideNumber }) }),
12418
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkJKSUB7DR_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
12418
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunk5DBKW7F3_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
12419
12419
  diff.changes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-muted-foreground", children: [
12420
12420
  diff.changes.length,
12421
12421
  " ",
@@ -12425,7 +12425,7 @@ function SlideDiffRow({
12425
12425
  isResolved && /* @__PURE__ */ jsxRuntime.jsx(
12426
12426
  "span",
12427
12427
  {
12428
- className: chunkJKSUB7DR_js.cn(
12428
+ className: chunk5DBKW7F3_js.cn(
12429
12429
  "text-[10px] font-medium",
12430
12430
  accepted ? "text-green-400" : "text-muted-foreground"
12431
12431
  ),
@@ -12453,7 +12453,7 @@ function SlideDiffRow({
12453
12453
  /* @__PURE__ */ jsxRuntime.jsx(
12454
12454
  "div",
12455
12455
  {
12456
- className: chunkJKSUB7DR_js.cn(
12456
+ className: chunk5DBKW7F3_js.cn(
12457
12457
  "rounded border overflow-hidden",
12458
12458
  diff.status === "added" ? "border-green-700/60" : diff.status === "changed" ? "border-amber-700/60" : "border-border"
12459
12459
  ),
@@ -12520,7 +12520,7 @@ function ComparePanel({
12520
12520
  onRejectSlide,
12521
12521
  onAcceptAll
12522
12522
  }) {
12523
- const { t } = chunkJKSUB7DR_js.useTranslation();
12523
+ const { t } = chunk5DBKW7F3_js.useTranslation();
12524
12524
  const [accepted, setAccepted] = React108.useState({});
12525
12525
  const [rejected, setRejected] = React108.useState({});
12526
12526
  const handleAccept = React108.useCallback(
@@ -12649,7 +12649,7 @@ function PasswordProtectionDialog({
12649
12649
  onSetPassword,
12650
12650
  onRemovePassword
12651
12651
  }) {
12652
- const { t } = chunkJKSUB7DR_js.useTranslation();
12652
+ const { t } = chunk5DBKW7F3_js.useTranslation();
12653
12653
  const [password, setPassword] = React108.useState("");
12654
12654
  const [confirmPassword, setConfirmPassword] = React108.useState("");
12655
12655
  const [showPassword, setShowPassword] = React108.useState(false);
@@ -12865,7 +12865,7 @@ function DocumentPropertiesCustomTab({
12865
12865
  customProperties,
12866
12866
  onUpdate
12867
12867
  }) {
12868
- const { t } = chunkJKSUB7DR_js.useTranslation();
12868
+ const { t } = chunk5DBKW7F3_js.useTranslation();
12869
12869
  const handleAdd = React108.useCallback(() => {
12870
12870
  onUpdate([...customProperties, { name: "", value: "", type: "lpwstr" }]);
12871
12871
  }, [customProperties, onUpdate]);
@@ -13067,7 +13067,7 @@ function DocumentPropertiesStatisticsTab({
13067
13067
  onUpdateAppProperties,
13068
13068
  canEdit
13069
13069
  }) {
13070
- const { t } = chunkJKSUB7DR_js.useTranslation();
13070
+ const { t } = chunk5DBKW7F3_js.useTranslation();
13071
13071
  const handleEditableChange = React108.useCallback(
13072
13072
  (key, value) => {
13073
13073
  onUpdateAppProperties({ [key]: value });
@@ -13107,7 +13107,7 @@ function DocumentPropertiesDialog({
13107
13107
  onClose,
13108
13108
  onSave
13109
13109
  }) {
13110
- const { t } = chunkJKSUB7DR_js.useTranslation();
13110
+ const { t } = chunk5DBKW7F3_js.useTranslation();
13111
13111
  const [activeTab, setActiveTab] = React108.useState("summary");
13112
13112
  const [draftCore, setDraftCore] = React108.useState({});
13113
13113
  const [draftCustom, setDraftCustom] = React108.useState([]);
@@ -13158,7 +13158,7 @@ function DocumentPropertiesDialog({
13158
13158
  const handleClose = React108.useCallback(() => {
13159
13159
  onClose();
13160
13160
  }, [onClose]);
13161
- const { panelStyle, handlers: dragHandlers } = chunk73SDWM6K_js.useModalDismissDrag(handleClose);
13161
+ const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(handleClose);
13162
13162
  if (!isOpen) {
13163
13163
  return null;
13164
13164
  }
@@ -13295,7 +13295,7 @@ function FontEmbeddingPanel({
13295
13295
  onClose,
13296
13296
  onToggleEmbedFonts
13297
13297
  }) {
13298
- const { t } = chunkJKSUB7DR_js.useTranslation();
13298
+ const { t } = chunk5DBKW7F3_js.useTranslation();
13299
13299
  const [availableFamilies, setAvailableFamilies] = React108.useState(/* @__PURE__ */ new Set());
13300
13300
  const [scanning, setScanning] = React108.useState(false);
13301
13301
  const [scanned, setScanned] = React108.useState(false);
@@ -13423,7 +13423,7 @@ function DigitalSignaturesDialog({
13423
13423
  hasSignatures,
13424
13424
  signatureCount
13425
13425
  }) {
13426
- const { t } = chunkJKSUB7DR_js.useTranslation();
13426
+ const { t } = chunk5DBKW7F3_js.useTranslation();
13427
13427
  if (!isOpen) {
13428
13428
  return null;
13429
13429
  }
@@ -13495,7 +13495,7 @@ function SignatureStatusBadge({
13495
13495
  signatureCount,
13496
13496
  onClick
13497
13497
  }) {
13498
- const { t } = chunkJKSUB7DR_js.useTranslation();
13498
+ const { t } = chunk5DBKW7F3_js.useTranslation();
13499
13499
  if (!hasSignatures || signatureCount === 0) {
13500
13500
  return null;
13501
13501
  }
@@ -13521,7 +13521,7 @@ function SignatureStrippedDialog({
13521
13521
  onConfirm,
13522
13522
  onCancel
13523
13523
  }) {
13524
- const { t } = chunkJKSUB7DR_js.useTranslation();
13524
+ const { t } = chunk5DBKW7F3_js.useTranslation();
13525
13525
  if (!isOpen) {
13526
13526
  return null;
13527
13527
  }
@@ -13590,7 +13590,7 @@ function EncryptedFileDialog({
13590
13590
  isOpen,
13591
13591
  onClose
13592
13592
  }) {
13593
- const { t } = chunkJKSUB7DR_js.useTranslation();
13593
+ const { t } = chunk5DBKW7F3_js.useTranslation();
13594
13594
  if (!isOpen) {
13595
13595
  return null;
13596
13596
  }
@@ -13737,7 +13737,7 @@ function PresentationAudienceEffects({ snapshot }) {
13737
13737
  ] });
13738
13738
  }
13739
13739
  function PresentationEndOverlay({ onExit }) {
13740
- const { t } = chunkJKSUB7DR_js.useTranslation();
13740
+ const { t } = chunk5DBKW7F3_js.useTranslation();
13741
13741
  return /* @__PURE__ */ jsxRuntime.jsx(
13742
13742
  "button",
13743
13743
  {
@@ -13753,9 +13753,9 @@ function PresentationSubtitleBar({
13753
13753
  visible,
13754
13754
  onCaptionChange
13755
13755
  }) {
13756
- const { t } = chunkJKSUB7DR_js.useTranslation();
13756
+ const { t } = chunk5DBKW7F3_js.useTranslation();
13757
13757
  const language = pptx.subtitleRecognitionLanguage(
13758
- pptx.subtitleSettingsFromOptions(chunk73SDWM6K_js.useViewerOptionsContext()),
13758
+ pptx.subtitleSettingsFromOptions(chunkVGU5S37T_js.useViewerOptionsContext()),
13759
13759
  typeof navigator === "undefined" ? "en-US" : navigator.language
13760
13760
  );
13761
13761
  const [captionText, setCaptionText] = React108.useState("");
@@ -13832,7 +13832,7 @@ function renderNotesSegments(segments) {
13832
13832
  });
13833
13833
  }
13834
13834
  function PresenterConsoleToolbar(p) {
13835
- const { t } = chunkJKSUB7DR_js.useTranslation();
13835
+ const { t } = chunk5DBKW7F3_js.useTranslation();
13836
13836
  const ref = useWebControl(
13837
13837
  { ...pptx.presenterConsoleViewState(p.snapshot, p.audienceOpen), translate: t },
13838
13838
  {
@@ -13923,7 +13923,7 @@ function ScaledSlidePreviewImpl({
13923
13923
  {
13924
13924
  className: "absolute inset-0",
13925
13925
  style: {
13926
- backgroundColor: chunkJKSUB7DR_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13926
+ backgroundColor: chunk5DBKW7F3_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13927
13927
  }
13928
13928
  }
13929
13929
  ),
@@ -13949,7 +13949,7 @@ function ScaledSlidePreviewImpl({
13949
13949
  ...pptx.deviceStrokeStageStyle(scale)
13950
13950
  },
13951
13951
  children: previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
13952
- chunk73SDWM6K_js.StaticElementRenderer,
13952
+ chunkVGU5S37T_js.StaticElementRenderer,
13953
13953
  {
13954
13954
  element,
13955
13955
  activeSlide: slide,
@@ -14016,7 +14016,7 @@ function PresenterNotesRail({
14016
14016
  onMove,
14017
14017
  onUpdateNotes
14018
14018
  }) {
14019
- const { t } = chunkJKSUB7DR_js.useTranslation();
14019
+ const { t } = chunk5DBKW7F3_js.useTranslation();
14020
14020
  const slide = slides[current];
14021
14021
  const nextSlide = pptx.nextPresentedSlide(slides, current, activeCustomShow, authoredRange);
14022
14022
  const notesText = slide?.notes ?? "";
@@ -14141,7 +14141,7 @@ function PresenterNotesRail({
14141
14141
  ] });
14142
14142
  }
14143
14143
  function PresenterSlideNavigator(props) {
14144
- const { t } = chunkJKSUB7DR_js.useTranslation();
14144
+ const { t } = chunk5DBKW7F3_js.useTranslation();
14145
14145
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${pptx.PRESENTER_CONSOLE_CLASSES.navigator} text-foreground`, children: [
14146
14146
  /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "mb-4 flex items-center justify-between border-b border-border pb-4", children: [
14147
14147
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -14283,7 +14283,7 @@ function PresenterView({
14283
14283
  onSwapDisplays,
14284
14284
  onUpdateNotes
14285
14285
  }) {
14286
- const { t } = chunkJKSUB7DR_js.useTranslation();
14286
+ const { t } = chunk5DBKW7F3_js.useTranslation();
14287
14287
  const [now, setNow] = React108.useState(Date.now());
14288
14288
  React108.useEffect(() => {
14289
14289
  const interval = window.setInterval(() => setNow(Date.now()), 1e3);
@@ -14440,7 +14440,7 @@ function MobilePresenterView({
14440
14440
  onMovePresentationSlide,
14441
14441
  onExit
14442
14442
  }) {
14443
- const { t } = chunkJKSUB7DR_js.useTranslation();
14443
+ const { t } = chunk5DBKW7F3_js.useTranslation();
14444
14444
  const [now, setNow] = React108.useState(Date.now());
14445
14445
  React108.useEffect(() => {
14446
14446
  const interval = window.setInterval(() => setNow(Date.now()), 1e3);
@@ -14553,7 +14553,7 @@ function RehearseTimingsHud({
14553
14553
  paused,
14554
14554
  onTogglePause
14555
14555
  }) {
14556
- const { t } = chunkJKSUB7DR_js.useTranslation();
14556
+ const { t } = chunk5DBKW7F3_js.useTranslation();
14557
14557
  const [tick, setTick] = React108.useState(0);
14558
14558
  React108.useEffect(() => {
14559
14559
  if (paused) {
@@ -14601,7 +14601,7 @@ function RehearseTimingsSummary({
14601
14601
  onSave,
14602
14602
  onDiscard
14603
14603
  }) {
14604
- const { t } = chunkJKSUB7DR_js.useTranslation();
14604
+ const { t } = chunk5DBKW7F3_js.useTranslation();
14605
14605
  const totalMs = Object.values(recordedTimings).reduce((sum, ms) => sum + ms, 0);
14606
14606
  const sortedEntries = Object.entries(recordedTimings).map(([idx, ms]) => ({ slideIndex: Number(idx), ms })).sort((a, b) => a.slideIndex - b.slideIndex);
14607
14607
  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: [
@@ -14685,7 +14685,7 @@ function SelectionPane({
14685
14685
  markDirty,
14686
14686
  onClose
14687
14687
  }) {
14688
- const { t } = chunkJKSUB7DR_js.useTranslation();
14688
+ const { t } = chunk5DBKW7F3_js.useTranslation();
14689
14689
  const activeSlide = slides[activeSlideIndex];
14690
14690
  const elements = activeSlide?.elements ?? [];
14691
14691
  const [editingId, setEditingId] = React108.useState(null);
@@ -14840,7 +14840,7 @@ function SelectionPane({
14840
14840
  setDragIndex(null);
14841
14841
  setDragOverIndex(null);
14842
14842
  },
14843
- className: chunkJKSUB7DR_js.cn(
14843
+ className: chunk5DBKW7F3_js.cn(
14844
14844
  "flex items-center gap-1.5 px-2 py-1 text-xs cursor-pointer transition-colors",
14845
14845
  isSelected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground",
14846
14846
  dragOverIndex === realIndex ? "border-t-2 border-primary" : ""
@@ -14894,13 +14894,13 @@ function SelectionPane({
14894
14894
  }
14895
14895
  var INPUT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14896
14896
  var SELECT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14897
- var ENTRANCE_PRESETS = /* @__PURE__ */ chunkJKSUB7DR_js.ANIMATION_PRESET_OPTIONS.filter(
14897
+ var ENTRANCE_PRESETS = /* @__PURE__ */ chunk5DBKW7F3_js.ANIMATION_PRESET_OPTIONS.filter(
14898
14898
  (o) => o.value === "fadeIn" || o.value === "flyIn" || o.value === "zoomIn"
14899
14899
  );
14900
- var EXIT_PRESETS = /* @__PURE__ */ chunkJKSUB7DR_js.ANIMATION_PRESET_OPTIONS.filter(
14900
+ var EXIT_PRESETS = /* @__PURE__ */ chunk5DBKW7F3_js.ANIMATION_PRESET_OPTIONS.filter(
14901
14901
  (o) => o.value === "fadeOut" || o.value === "flyOut" || o.value === "zoomOut"
14902
14902
  );
14903
- var EMPHASIS_PRESETS = /* @__PURE__ */ chunkJKSUB7DR_js.ANIMATION_PRESET_OPTIONS.filter(
14903
+ var EMPHASIS_PRESETS = /* @__PURE__ */ chunk5DBKW7F3_js.ANIMATION_PRESET_OPTIONS.filter(
14904
14904
  (o) => o.value === "spin" || o.value === "pulse" || o.value === "colorWave" || o.value === "bounce" || o.value === "flash" || o.value === "growShrink" || o.value === "teeter"
14905
14905
  );
14906
14906
  var TIMING_CURVE_OPTIONS = [
@@ -15001,7 +15001,7 @@ function AfterAnimationRow({
15001
15001
  onActionChange,
15002
15002
  onColorChange
15003
15003
  }) {
15004
- const { t } = chunkJKSUB7DR_js.useTranslation();
15004
+ const { t } = chunk5DBKW7F3_js.useTranslation();
15005
15005
  const commitRecentColor = useRecentColorCommit();
15006
15006
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
15007
15007
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15052,7 +15052,7 @@ function AnimationTimelineSection({
15052
15052
  canEdit,
15053
15053
  handlers
15054
15054
  }) {
15055
- const { t } = chunkJKSUB7DR_js.useTranslation();
15055
+ const { t } = chunk5DBKW7F3_js.useTranslation();
15056
15056
  const effectLabel = (anim) => pptx.animationEffectLabel(anim, (key) => t(key));
15057
15057
  const {
15058
15058
  sortedAnimations,
@@ -15083,7 +15083,7 @@ function AnimationTimelineSection({
15083
15083
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-6 rounded bg-muted/50 border border-border overflow-hidden", children: timelineBarData.map((bar) => /* @__PURE__ */ jsxRuntime.jsx(
15084
15084
  "div",
15085
15085
  {
15086
- className: chunkJKSUB7DR_js.cn(
15086
+ className: chunk5DBKW7F3_js.cn(
15087
15087
  "absolute top-0.5 bottom-0.5 rounded-sm transition-colors",
15088
15088
  animationTypeColor(bar.anim),
15089
15089
  bar.anim.elementId === selectedElementId && "ring-1 ring-primary"
@@ -15112,7 +15112,7 @@ function AnimationTimelineSection({
15112
15112
  onDragLeave: handleDragLeave,
15113
15113
  onDrop: (e) => handleDrop(index, e),
15114
15114
  title: t("pptx.animation.nativeEffectHint"),
15115
- className: chunkJKSUB7DR_js.cn(
15115
+ className: chunk5DBKW7F3_js.cn(
15116
15116
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] italic",
15117
15117
  "bg-muted/20 text-muted-foreground/70",
15118
15118
  isDragOver && "border-t-2 border-primary"
@@ -15151,7 +15151,7 @@ function AnimationTimelineSection({
15151
15151
  onDragEnd: handleDragEnd,
15152
15152
  onMouseEnter: () => handleAnimationHover(anim),
15153
15153
  onMouseLeave: handleAnimationHoverEnd,
15154
- className: chunkJKSUB7DR_js.cn(
15154
+ className: chunk5DBKW7F3_js.cn(
15155
15155
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] cursor-grab transition-colors",
15156
15156
  isSelected ? "bg-primary/30 text-primary" : "bg-muted/50 text-muted-foreground",
15157
15157
  isDragging && "opacity-40",
@@ -15212,7 +15212,7 @@ function BookmarkTriggerRow({
15212
15212
  style,
15213
15213
  onChange
15214
15214
  }) {
15215
- const { t } = chunkJKSUB7DR_js.useTranslation();
15215
+ const { t } = chunk5DBKW7F3_js.useTranslation();
15216
15216
  const options = pptx.listMediaBookmarkOptions(elements);
15217
15217
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
15218
15218
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-[11px]", children: t("pptx.animation.trigger.bookmarkLabel") }),
@@ -15245,7 +15245,7 @@ function EffectSoundRow({
15245
15245
  onPick,
15246
15246
  onPickStock
15247
15247
  }) {
15248
- const { t } = chunkJKSUB7DR_js.useTranslation();
15248
+ const { t } = chunk5DBKW7F3_js.useTranslation();
15249
15249
  const fileInputRef = React108__default.default.useRef(null);
15250
15250
  const selectedValue = soundState.catalogueId ?? (soundState.hasSound ? CURRENT_VALUE : NONE_VALUE);
15251
15251
  const handleSelectChange = (event) => {
@@ -15283,7 +15283,7 @@ function EffectSoundRow({
15283
15283
  }
15284
15284
  const asset = pptx.getEffectSoundAsset(soundState.catalogueId);
15285
15285
  if (asset) {
15286
- chunk73SDWM6K_js.playAnimationSound(asset.dataUrl);
15286
+ chunkVGU5S37T_js.playAnimationSound(asset.dataUrl);
15287
15287
  }
15288
15288
  };
15289
15289
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15336,7 +15336,7 @@ function MotionPathRow({
15336
15336
  canEdit,
15337
15337
  onChange
15338
15338
  }) {
15339
- const { t } = chunkJKSUB7DR_js.useTranslation();
15339
+ const { t } = chunk5DBKW7F3_js.useTranslation();
15340
15340
  const presetId = pptx.motionPathPresetIdForPath(motionPath);
15341
15341
  const isCustom = Boolean(motionPath) && !presetId;
15342
15342
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15458,7 +15458,7 @@ function useAnimationPreview({
15458
15458
  }) {
15459
15459
  const handleAnimationHover = React108.useCallback((anim) => {
15460
15460
  if (anim.motionPath) {
15461
- chunkJKSUB7DR_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
15461
+ chunk5DBKW7F3_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
15462
15462
  durationMs: anim.durationMs,
15463
15463
  delayMs: anim.delayMs,
15464
15464
  timingCurve: anim.timingCurve
@@ -15469,19 +15469,19 @@ function useAnimationPreview({
15469
15469
  if (!preset || preset === "none") {
15470
15470
  return;
15471
15471
  }
15472
- chunkJKSUB7DR_js.startPreviewAnimation(anim.elementId, preset, {
15472
+ chunk5DBKW7F3_js.startPreviewAnimation(anim.elementId, preset, {
15473
15473
  direction: anim.direction,
15474
15474
  durationMs: anim.durationMs ?? 500,
15475
15475
  timingCurve: anim.timingCurve
15476
15476
  });
15477
15477
  }, []);
15478
- const handleAnimationHoverEnd = React108.useCallback(() => chunkJKSUB7DR_js.stopPreviewAnimation(), []);
15478
+ const handleAnimationHoverEnd = React108.useCallback(() => chunk5DBKW7F3_js.stopPreviewAnimation(), []);
15479
15479
  const handlePreviewClick = React108.useCallback(() => {
15480
15480
  if (!selectedElementAnimation) {
15481
15481
  return;
15482
15482
  }
15483
15483
  if (selectedElementAnimation.motionPath) {
15484
- chunkJKSUB7DR_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
15484
+ chunk5DBKW7F3_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
15485
15485
  durationMs: selectedElementAnimation.durationMs,
15486
15486
  delayMs: selectedElementAnimation.delayMs,
15487
15487
  timingCurve: selectedElementAnimation.timingCurve
@@ -15492,7 +15492,7 @@ function useAnimationPreview({
15492
15492
  if (!preset || preset === "none") {
15493
15493
  return;
15494
15494
  }
15495
- chunkJKSUB7DR_js.startPreviewAnimation(selectedElementId, preset, {
15495
+ chunk5DBKW7F3_js.startPreviewAnimation(selectedElementId, preset, {
15496
15496
  direction: selectedElementAnimation.direction,
15497
15497
  durationMs: selectedElementAnimation.durationMs ?? 500,
15498
15498
  timingCurve: selectedElementAnimation.timingCurve
@@ -15727,7 +15727,7 @@ function useAnimationHandlers({
15727
15727
  return anim.elementId.slice(0, 8);
15728
15728
  }
15729
15729
  const text = pptx$1.hasTextProperties(el) ? el.text : void 0;
15730
- return text || chunkJKSUB7DR_js.getElementLabel(el);
15730
+ return text || chunk5DBKW7F3_js.getElementLabel(el);
15731
15731
  },
15732
15732
  [activeSlide.elements]
15733
15733
  );
@@ -15738,7 +15738,7 @@ function useAnimationHandlers({
15738
15738
  return id.slice(0, 8);
15739
15739
  }
15740
15740
  const text = pptx$1.hasTextProperties(el) ? el.text : void 0;
15741
- return text || chunkJKSUB7DR_js.getElementLabel(el);
15741
+ return text || chunk5DBKW7F3_js.getElementLabel(el);
15742
15742
  }).join(", "),
15743
15743
  [activeSlide.elements]
15744
15744
  );
@@ -15794,8 +15794,8 @@ function AnimationPanel({
15794
15794
  canEdit,
15795
15795
  onUpdateSlide
15796
15796
  }) {
15797
- const { t } = chunkJKSUB7DR_js.useTranslation();
15798
- const { viewportWidth } = chunk73SDWM6K_js.useIsMobile();
15797
+ const { t } = chunk5DBKW7F3_js.useTranslation();
15798
+ const { viewportWidth } = chunkVGU5S37T_js.useIsMobile();
15799
15799
  const directionBtnPx = Math.max(28, pptx.getDensePanelTouchTargetPx(viewportWidth));
15800
15800
  const fieldStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
15801
15801
  const handlers = useAnimationHandlers({
@@ -15923,7 +15923,7 @@ function AnimationPanel({
15923
15923
  type: "button",
15924
15924
  disabled: !canEdit,
15925
15925
  style: { minWidth: directionBtnPx, minHeight: directionBtnPx },
15926
- className: chunkJKSUB7DR_js.cn(
15926
+ className: chunk5DBKW7F3_js.cn(
15927
15927
  "flex items-center justify-center rounded border transition-colors",
15928
15928
  isActive ? "border-primary bg-primary/20 text-primary" : "border-border bg-muted text-muted-foreground hover:bg-accent"
15929
15929
  ),
@@ -15989,7 +15989,7 @@ function AnimationPanel({
15989
15989
  style: fieldStyle,
15990
15990
  children: [
15991
15991
  /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: t("pptx.animation.trigger.selectShape") }),
15992
- activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunkJKSUB7DR_js.getElementLabel(el) }, el.id))
15992
+ activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunk5DBKW7F3_js.getElementLabel(el) }, el.id))
15993
15993
  ]
15994
15994
  }
15995
15995
  )
@@ -16133,7 +16133,7 @@ function ActionTargetFields({
16133
16133
  returnAfter,
16134
16134
  onChange
16135
16135
  }) {
16136
- const { t } = chunkJKSUB7DR_js.useTranslation();
16136
+ const { t } = chunk5DBKW7F3_js.useTranslation();
16137
16137
  const urlLabelKey = URL_LABEL_KEY[type];
16138
16138
  if (urlLabelKey) {
16139
16139
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16142,7 +16142,7 @@ function ActionTargetFields({
16142
16142
  type: "text",
16143
16143
  disabled: !canEdit,
16144
16144
  "aria-label": t(urlLabelKey),
16145
- className: chunkJKSUB7DR_js.cn(INPUT2, "w-full"),
16145
+ className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
16146
16146
  placeholder: "https://...",
16147
16147
  value: url ?? "",
16148
16148
  onChange: (e) => onChange({ url: e.target.value })
@@ -16156,7 +16156,7 @@ function ActionTargetFields({
16156
16156
  type: "number",
16157
16157
  disabled: !canEdit,
16158
16158
  "aria-label": t("pptx.action.gotoSlide"),
16159
- className: chunkJKSUB7DR_js.cn(INPUT2, "w-full"),
16159
+ className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
16160
16160
  placeholder: t("pptx.action.slideNumberPlaceholder"),
16161
16161
  min: 1,
16162
16162
  max: slideCount,
@@ -16178,7 +16178,7 @@ function ActionTargetFields({
16178
16178
  "data-testid": "pptx-action-custom-show",
16179
16179
  disabled: !canEdit,
16180
16180
  "aria-label": t("pptx.hyperlink.customShowLabel"),
16181
- className: chunkJKSUB7DR_js.cn(INPUT2, "w-full"),
16181
+ className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
16182
16182
  value: customShowId ?? "",
16183
16183
  onChange: (e) => onChange({ customShowId: e.target.value, returnAfter }),
16184
16184
  children: [
@@ -16210,7 +16210,7 @@ function ActionSettingsPanel({
16210
16210
  customShows,
16211
16211
  onUpdateElement
16212
16212
  }) {
16213
- const { t } = chunkJKSUB7DR_js.useTranslation();
16213
+ const { t } = chunk5DBKW7F3_js.useTranslation();
16214
16214
  const clickAction = selectedElement.actionClick ? pptx$1.pptxActionToElementAction(selectedElement.actionClick, "click") : void 0;
16215
16215
  const hoverAction = selectedElement.actionHover ? pptx$1.pptxActionToElementAction(selectedElement.actionHover, "hover") : void 0;
16216
16216
  const updateAction = (trigger, type, patch) => {
@@ -16286,7 +16286,7 @@ function ActionTriggerSection({
16286
16286
  onChangeType,
16287
16287
  onChangeTarget
16288
16288
  }) {
16289
- const { t } = chunkJKSUB7DR_js.useTranslation();
16289
+ const { t } = chunk5DBKW7F3_js.useTranslation();
16290
16290
  const [pendingType, setPendingType] = React108.useState(void 0);
16291
16291
  const effectiveType = pptx.resolveActionType(pendingType, activeType);
16292
16292
  const changeType = (type) => {
@@ -16300,7 +16300,7 @@ function ActionTriggerSection({
16300
16300
  {
16301
16301
  disabled: !canEdit,
16302
16302
  "aria-label": label,
16303
- className: chunkJKSUB7DR_js.cn(INPUT2, "w-full"),
16303
+ className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
16304
16304
  value: effectiveType,
16305
16305
  onChange: (e) => changeType(e.target.value),
16306
16306
  children: pptx.ELEMENT_ACTION_TYPE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.labelKey) }, o.value))
@@ -16328,7 +16328,7 @@ var AXIS_ROWS = [
16328
16328
  { type: "catAx", labelKey: "pptx.chart.categoryAxis", hasScale: false }
16329
16329
  ];
16330
16330
  function ChartAxisOptions({ axes, canEdit, onUpdateAxis }) {
16331
- const { t } = chunkJKSUB7DR_js.useTranslation();
16331
+ const { t } = chunk5DBKW7F3_js.useTranslation();
16332
16332
  const rows = AXIS_ROWS.map((row) => ({
16333
16333
  ...row,
16334
16334
  axis: axes?.find((a) => a.axisType === row.type)
@@ -16473,7 +16473,7 @@ function ChartAxisStyleOptions({
16473
16473
  onSetTitleStyle,
16474
16474
  onSetGridlineStyle
16475
16475
  }) {
16476
- const { t } = chunkJKSUB7DR_js.useTranslation();
16476
+ const { t } = chunk5DBKW7F3_js.useTranslation();
16477
16477
  const commitRecentColor = useRecentColorCommit();
16478
16478
  const rows = SCALE_AXES.map((row) => ({
16479
16479
  ...row,
@@ -16645,7 +16645,7 @@ function ChartComboTypeOptions({
16645
16645
  canEdit,
16646
16646
  onSetSeriesType
16647
16647
  }) {
16648
- const { t } = chunkJKSUB7DR_js.useTranslation();
16648
+ const { t } = chunk5DBKW7F3_js.useTranslation();
16649
16649
  if (!COMBO_SUPPORTED_TYPES.has(chartType) || series.length < 2) {
16650
16650
  return null;
16651
16651
  }
@@ -16674,7 +16674,7 @@ function ChartDataLabelOptions({
16674
16674
  canEdit,
16675
16675
  onUpdateStyle
16676
16676
  }) {
16677
- const { t } = chunkJKSUB7DR_js.useTranslation();
16677
+ const { t } = chunk5DBKW7F3_js.useTranslation();
16678
16678
  if (!style?.hasDataLabels) {
16679
16679
  return null;
16680
16680
  }
@@ -16722,7 +16722,7 @@ function ChartDataPointMarkerOptions({
16722
16722
  canEdit,
16723
16723
  onSetPointMarker
16724
16724
  }) {
16725
- const { t } = chunkJKSUB7DR_js.useTranslation();
16725
+ const { t } = chunk5DBKW7F3_js.useTranslation();
16726
16726
  const commitRecentColor = useRecentColorCommit();
16727
16727
  const [seriesIndex, setSeriesIndex] = React108.useState(0);
16728
16728
  if (!MARKER_SUPPORTED_TYPES.has(chartType) || series.length === 0 || categories.length === 0) {
@@ -16828,7 +16828,7 @@ function ChartDataPointOptions({
16828
16828
  onSetPointExplosion,
16829
16829
  onSetPointLabel
16830
16830
  }) {
16831
- const { t } = chunkJKSUB7DR_js.useTranslation();
16831
+ const { t } = chunk5DBKW7F3_js.useTranslation();
16832
16832
  const commitRecentColor = useRecentColorCommit();
16833
16833
  const [seriesIndex, setSeriesIndex] = React108.useState(0);
16834
16834
  if (series.length === 0 || categories.length === 0) {
@@ -16930,7 +16930,7 @@ function ChartDataSheet({
16930
16930
  highlightCell,
16931
16931
  onChange
16932
16932
  }) {
16933
- const { t } = chunkJKSUB7DR_js.useTranslation();
16933
+ const { t } = chunk5DBKW7F3_js.useTranslation();
16934
16934
  const ref = React108.useRef(null);
16935
16935
  React108.useLayoutEffect(() => {
16936
16936
  if (ref.current) {
@@ -16961,7 +16961,7 @@ function ChartDisplayOptions({
16961
16961
  hasGridlines,
16962
16962
  onToggleGridlines
16963
16963
  }) {
16964
- const { t } = chunkJKSUB7DR_js.useTranslation();
16964
+ const { t } = chunk5DBKW7F3_js.useTranslation();
16965
16965
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD, children: [
16966
16966
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING, children: t("pptx.chart.display") }),
16967
16967
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -17038,7 +17038,7 @@ function ChartErrorBarOptions({
17038
17038
  canEdit,
17039
17039
  onSetErrorBars
17040
17040
  }) {
17041
- const { t } = chunkJKSUB7DR_js.useTranslation();
17041
+ const { t } = chunk5DBKW7F3_js.useTranslation();
17042
17042
  if (!ERROR_BAR_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17043
17043
  return null;
17044
17044
  }
@@ -17118,7 +17118,7 @@ function ChartFilteredSeriesOptions({
17118
17118
  onRestoreSeries,
17119
17119
  onSetDataLabelsRangeCache
17120
17120
  }) {
17121
- const { t } = chunkJKSUB7DR_js.useTranslation();
17121
+ const { t } = chunk5DBKW7F3_js.useTranslation();
17122
17122
  const filteredSeries = chartData.filteredSeries ?? [];
17123
17123
  const seriesWithRange = chartData.series.map((series, index) => ({ series, index })).filter(({ series }) => series.dataLabelOptions?.dataLabelsRange);
17124
17124
  if (filteredSeries.length === 0 && seriesWithRange.length === 0 && chartData.series.length <= 1) {
@@ -17198,7 +17198,7 @@ function ChartMarkerOptions({
17198
17198
  canEdit,
17199
17199
  onSetMarker
17200
17200
  }) {
17201
- const { t } = chunkJKSUB7DR_js.useTranslation();
17201
+ const { t } = chunk5DBKW7F3_js.useTranslation();
17202
17202
  const commitRecentColor = useRecentColorCommit();
17203
17203
  if (!MARKER_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17204
17204
  return null;
@@ -17307,7 +17307,7 @@ function ChartSeriesColorOptions({
17307
17307
  onSetColor,
17308
17308
  onToggleSecondaryAxis
17309
17309
  }) {
17310
- const { t } = chunkJKSUB7DR_js.useTranslation();
17310
+ const { t } = chunk5DBKW7F3_js.useTranslation();
17311
17311
  const series = chartData.series;
17312
17312
  if (series.length === 0) {
17313
17313
  return null;
@@ -17357,7 +17357,7 @@ function ChartSubtypeOptions({
17357
17357
  canEdit,
17358
17358
  onUpdateChartData
17359
17359
  }) {
17360
- const { t } = chunkJKSUB7DR_js.useTranslation();
17360
+ const { t } = chunk5DBKW7F3_js.useTranslation();
17361
17361
  if (chartData.chartType !== "bar3D" && chartData.chartType !== "radar" && chartData.chartType !== "surface") {
17362
17362
  return null;
17363
17363
  }
@@ -17423,7 +17423,7 @@ function ChartTrendlineOptions({
17423
17423
  canEdit,
17424
17424
  onSetTrendline
17425
17425
  }) {
17426
- const { t } = chunkJKSUB7DR_js.useTranslation();
17426
+ const { t } = chunk5DBKW7F3_js.useTranslation();
17427
17427
  if (!TRENDLINE_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17428
17428
  return null;
17429
17429
  }
@@ -17496,7 +17496,7 @@ function ChartTypeSelector({
17496
17496
  onUpdateChartData,
17497
17497
  onTitleChange
17498
17498
  }) {
17499
- const { t } = chunkJKSUB7DR_js.useTranslation();
17499
+ const { t } = chunk5DBKW7F3_js.useTranslation();
17500
17500
  const supportsGrouping = GROUPING_SUPPORTED_TYPES.has(chartType);
17501
17501
  const displayedType = pptx.resolveDisplayedChartType(chartData);
17502
17502
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD, children: [
@@ -17577,7 +17577,7 @@ function RotationField({
17577
17577
  canEdit,
17578
17578
  onRotationPatch
17579
17579
  }) {
17580
- const { t } = chunkJKSUB7DR_js.useTranslation();
17580
+ const { t } = chunk5DBKW7F3_js.useTranslation();
17581
17581
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
17582
17582
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.chart.userShapeRotation") }),
17583
17583
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -17599,7 +17599,7 @@ function FlipFields({
17599
17599
  canEdit,
17600
17600
  onFlipPatch
17601
17601
  }) {
17602
- const { t } = chunkJKSUB7DR_js.useTranslation();
17602
+ const { t } = chunk5DBKW7F3_js.useTranslation();
17603
17603
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
17604
17604
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-1 cursor-pointer", children: [
17605
17605
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -17638,7 +17638,7 @@ function ChartUserShapePositionFields({
17638
17638
  onRotationPatch,
17639
17639
  onFlipPatch
17640
17640
  }) {
17641
- const { t } = chunkJKSUB7DR_js.useTranslation();
17641
+ const { t } = chunk5DBKW7F3_js.useTranslation();
17642
17642
  const update = (patch) => onPatch(row.path, patch);
17643
17643
  if (row.depth === 0) {
17644
17644
  const from = row.from;
@@ -17762,7 +17762,7 @@ function ChartUserShapeOptions({
17762
17762
  canEdit,
17763
17763
  onUpdateChartData
17764
17764
  }) {
17765
- const { t } = chunkJKSUB7DR_js.useTranslation();
17765
+ const { t } = chunk5DBKW7F3_js.useTranslation();
17766
17766
  const shapes = chartData.userShapes;
17767
17767
  const rows = pptx.listChartUserShapeRows(shapes);
17768
17768
  const kindLabel = (kind) => {
@@ -17920,8 +17920,8 @@ function ChartUserShapeOptions({
17920
17920
  }
17921
17921
  function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
17922
17922
  const chartData = selectedElement.chartData;
17923
- const followDataPoint = chunk73SDWM6K_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17924
- const { selection: partSelection } = chunk73SDWM6K_js.useChartPartSelection();
17923
+ const followDataPoint = chunkVGU5S37T_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17924
+ const { selection: partSelection } = chunkVGU5S37T_js.useChartPartSelection();
17925
17925
  const canvasPart = partSelection?.elementId === selectedElement.id ? partSelection.part : null;
17926
17926
  const title = chartData?.title;
17927
17927
  const chartType = chartData?.chartType;
@@ -18359,7 +18359,7 @@ function OleEditorDialog({
18359
18359
  element,
18360
18360
  onUpdateElement
18361
18361
  }) {
18362
- const { t } = chunkJKSUB7DR_js.useTranslation();
18362
+ const { t } = chunk5DBKW7F3_js.useTranslation();
18363
18363
  const dialogRef = React108.useRef(null);
18364
18364
  const fileInputRef = React108.useRef(null);
18365
18365
  const descriptor = pptx.buildOleEditDialogDescriptor(element);
@@ -18607,7 +18607,7 @@ function ConnectorArrowsSection({
18607
18607
  onUpdateShapeStyle,
18608
18608
  markDirty
18609
18609
  }) {
18610
- const { t } = chunkJKSUB7DR_js.useTranslation();
18610
+ const { t } = chunk5DBKW7F3_js.useTranslation();
18611
18611
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
18612
18612
  ["Start", "End"].map((end) => {
18613
18613
  const key = end === "Start" ? "connectorStartArrow" : "connectorEndArrow";
@@ -18626,7 +18626,7 @@ function ConnectorArrowsSection({
18626
18626
  },
18627
18627
  disabled: !canEdit,
18628
18628
  className: SELECT_CLS2,
18629
- children: chunkJKSUB7DR_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18629
+ children: chunk5DBKW7F3_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18630
18630
  }
18631
18631
  )
18632
18632
  ] }, end);
@@ -18650,7 +18650,7 @@ function ConnectorArrowsSection({
18650
18650
  },
18651
18651
  disabled: !canEdit,
18652
18652
  className: SELECT_CLS2,
18653
- children: chunkJKSUB7DR_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18653
+ children: chunk5DBKW7F3_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18654
18654
  }
18655
18655
  )
18656
18656
  ] }),
@@ -18669,7 +18669,7 @@ function ConnectorArrowsSection({
18669
18669
  },
18670
18670
  disabled: !canEdit,
18671
18671
  className: SELECT_CLS2,
18672
- children: chunkJKSUB7DR_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18672
+ children: chunk5DBKW7F3_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18673
18673
  }
18674
18674
  )
18675
18675
  ] })
@@ -18700,7 +18700,7 @@ function ConnectorPanel({
18700
18700
  function GroupInfoPanel({
18701
18701
  selectedElement
18702
18702
  }) {
18703
- const { t } = chunkJKSUB7DR_js.useTranslation();
18703
+ const { t } = chunk5DBKW7F3_js.useTranslation();
18704
18704
  if (selectedElement.type !== "group") {
18705
18705
  return null;
18706
18706
  }
@@ -18715,7 +18715,7 @@ function OlePropertiesPanel({
18715
18715
  canEdit,
18716
18716
  onUpdateElement
18717
18717
  }) {
18718
- const { t } = chunkJKSUB7DR_js.useTranslation();
18718
+ const { t } = chunk5DBKW7F3_js.useTranslation();
18719
18719
  const [isEditorOpen, setIsEditorOpen] = React108.useState(false);
18720
18720
  if (selectedElement.type !== "ole") {
18721
18721
  return null;
@@ -18760,7 +18760,7 @@ function OlePropertiesPanel({
18760
18760
  /* @__PURE__ */ jsxRuntime.jsx(
18761
18761
  "span",
18762
18762
  {
18763
- className: chunkJKSUB7DR_js.cn(
18763
+ className: chunk5DBKW7F3_js.cn(
18764
18764
  "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium",
18765
18765
  ole.isLinked ? "bg-blue-500/20 text-blue-400" : "bg-green-500/20 text-green-400"
18766
18766
  ),
@@ -18813,7 +18813,7 @@ function LayerOrderButtons({
18813
18813
  "button",
18814
18814
  {
18815
18815
  type: "button",
18816
- className: chunkJKSUB7DR_js.cn("flex-1", BTN2),
18816
+ className: chunk5DBKW7F3_js.cn("flex-1", BTN2),
18817
18817
  disabled: !canEdit,
18818
18818
  onClick: () => onMoveLayer("forward"),
18819
18819
  children: "\u2191 Forward"
@@ -18823,7 +18823,7 @@ function LayerOrderButtons({
18823
18823
  "button",
18824
18824
  {
18825
18825
  type: "button",
18826
- className: chunkJKSUB7DR_js.cn("flex-1", BTN2),
18826
+ className: chunk5DBKW7F3_js.cn("flex-1", BTN2),
18827
18827
  disabled: !canEdit,
18828
18828
  onClick: () => onMoveLayer("backward"),
18829
18829
  children: "\u2193 Backward"
@@ -18837,7 +18837,7 @@ function ArtisticEffectsGallery({
18837
18837
  canEdit,
18838
18838
  updateEffects
18839
18839
  }) {
18840
- const { t } = chunkJKSUB7DR_js.useTranslation();
18840
+ const { t } = chunk5DBKW7F3_js.useTranslation();
18841
18841
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18842
18842
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.image.artisticEffects") }),
18843
18843
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: pptx.ARTISTIC_EFFECTS.map(([effectName, tKey, cssFilter]) => {
@@ -18847,7 +18847,7 @@ function ArtisticEffectsGallery({
18847
18847
  {
18848
18848
  type: "button",
18849
18849
  disabled: !canEdit,
18850
- className: chunkJKSUB7DR_js.cn(
18850
+ className: chunk5DBKW7F3_js.cn(
18851
18851
  "flex flex-col items-center gap-0.5 rounded border p-0.5 hover:bg-accent/50",
18852
18852
  isActive ? "border-primary bg-primary/10" : "border-border"
18853
18853
  ),
@@ -18882,7 +18882,7 @@ function ColorChangeSection({
18882
18882
  canEdit,
18883
18883
  updateEffects
18884
18884
  }) {
18885
- const { t } = chunkJKSUB7DR_js.useTranslation();
18885
+ const { t } = chunk5DBKW7F3_js.useTranslation();
18886
18886
  const cc = fx?.clrChange;
18887
18887
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18888
18888
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-2", children: [
@@ -18909,7 +18909,7 @@ function ColorChangeSection({
18909
18909
  DebouncedColorInput,
18910
18910
  {
18911
18911
  disabled: !canEdit,
18912
- value: chunkJKSUB7DR_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18912
+ value: chunk5DBKW7F3_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18913
18913
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18914
18914
  onCommit: (hex) => updateEffects({
18915
18915
  clrChange: {
@@ -18927,7 +18927,7 @@ function ColorChangeSection({
18927
18927
  DebouncedColorInput,
18928
18928
  {
18929
18929
  disabled: !canEdit || Boolean(cc.clrToTransparent),
18930
- value: chunkJKSUB7DR_js.normalizeHexColor(cc.clrTo, "#000000"),
18930
+ value: chunk5DBKW7F3_js.normalizeHexColor(cc.clrTo, "#000000"),
18931
18931
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18932
18932
  onCommit: (hex) => updateEffects({
18933
18933
  clrChange: {
@@ -18964,7 +18964,7 @@ function ColorWashSection({
18964
18964
  canEdit,
18965
18965
  updateEffects
18966
18966
  }) {
18967
- const { t } = chunkJKSUB7DR_js.useTranslation();
18967
+ const { t } = chunk5DBKW7F3_js.useTranslation();
18968
18968
  const wash = fx?.colorWash;
18969
18969
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18970
18970
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-2", children: [
@@ -18987,7 +18987,7 @@ function ColorWashSection({
18987
18987
  DebouncedColorInput,
18988
18988
  {
18989
18989
  disabled: !canEdit,
18990
- value: chunkJKSUB7DR_js.normalizeHexColor(wash.color, "#0066cc"),
18990
+ value: chunk5DBKW7F3_js.normalizeHexColor(wash.color, "#0066cc"),
18991
18991
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18992
18992
  onCommit: (hex) => updateEffects({
18993
18993
  colorWash: { color: hex, opacity: wash.opacity ?? 40 }
@@ -19064,7 +19064,7 @@ function DuotonePanel({
19064
19064
  canEdit,
19065
19065
  onUpdateElement
19066
19066
  }) {
19067
- const { t } = chunkJKSUB7DR_js.useTranslation();
19067
+ const { t } = chunk5DBKW7F3_js.useTranslation();
19068
19068
  const effects = "imageEffects" in selectedElement ? selectedElement.imageEffects : void 0;
19069
19069
  const commitDuotone = React108.useCallback(
19070
19070
  (color1, color2) => {
@@ -19085,8 +19085,8 @@ function DuotonePanel({
19085
19085
  }
19086
19086
  });
19087
19087
  }, [effects, onUpdateElement]);
19088
- const shadowColor = chunkJKSUB7DR_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
19089
- const highlightColor = chunkJKSUB7DR_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
19088
+ const shadowColor = chunk5DBKW7F3_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
19089
+ const highlightColor = chunk5DBKW7F3_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
19090
19090
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px]", children: [
19091
19091
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground font-medium", children: t("pptx.image.duotone") }),
19092
19092
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
@@ -19117,7 +19117,7 @@ function DuotonePanel({
19117
19117
  ] }),
19118
19118
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
19119
19119
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-[10px]", children: t("pptx.image.duotonePresets") }),
19120
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunk73SDWM6K_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
19120
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunkVGU5S37T_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
19121
19121
  "button",
19122
19122
  {
19123
19123
  type: "button",
@@ -19153,7 +19153,7 @@ function ImageAdjustmentsPanel({
19153
19153
  canEdit,
19154
19154
  onUpdateElement
19155
19155
  }) {
19156
- const { t } = chunkJKSUB7DR_js.useTranslation();
19156
+ const { t } = chunk5DBKW7F3_js.useTranslation();
19157
19157
  const effects = React108.useMemo(
19158
19158
  () => "imageEffects" in selectedElement ? selectedElement.imageEffects : void 0,
19159
19159
  [selectedElement]
@@ -19254,7 +19254,7 @@ function ImageCropSection({
19254
19254
  canEdit,
19255
19255
  onUpdateElement
19256
19256
  }) {
19257
- const { t } = chunkJKSUB7DR_js.useTranslation();
19257
+ const { t } = chunk5DBKW7F3_js.useTranslation();
19258
19258
  if (!pptx$1.isImageLikeElement(selectedElement)) {
19259
19259
  return null;
19260
19260
  }
@@ -19272,7 +19272,7 @@ function ImageCropSection({
19272
19272
  max: MAX_CROP_PERCENT,
19273
19273
  disabled: !croppable,
19274
19274
  className: "accent-primary",
19275
- value: Math.round(chunkJKSUB7DR_js.clampCropValue(selectedElement[key]) * 100),
19275
+ value: Math.round(chunk5DBKW7F3_js.clampCropValue(selectedElement[key]) * 100),
19276
19276
  onChange: (e) => onUpdateElement({
19277
19277
  [key]: Number(e.target.value) / 100
19278
19278
  })
@@ -19319,7 +19319,7 @@ function ImagePropertiesPanel({
19319
19319
  canEdit,
19320
19320
  onUpdateElement
19321
19321
  }) {
19322
- const { t } = chunkJKSUB7DR_js.useTranslation();
19322
+ const { t } = chunk5DBKW7F3_js.useTranslation();
19323
19323
  const fx = selectedElement.imageEffects;
19324
19324
  const updateEffects = (patch) => {
19325
19325
  onUpdateElement({
@@ -19336,7 +19336,7 @@ function ImagePropertiesPanel({
19336
19336
  {
19337
19337
  rows: 2,
19338
19338
  disabled: !canEdit,
19339
- className: chunkJKSUB7DR_js.cn(INPUT2, "resize-none text-[11px]"),
19339
+ className: chunk5DBKW7F3_js.cn(INPUT2, "resize-none text-[11px]"),
19340
19340
  value: selectedElement.altText ?? "",
19341
19341
  onChange: (e) => onUpdateElement({
19342
19342
  altText: e.target.value
@@ -19524,7 +19524,7 @@ function InspectorFields({
19524
19524
  liveTarget,
19525
19525
  livePatch
19526
19526
  }) {
19527
- const { t } = chunkJKSUB7DR_js.useTranslation();
19527
+ const { t } = chunk5DBKW7F3_js.useTranslation();
19528
19528
  const views = pptx.resolveInspectorSections(sections, target);
19529
19529
  const change = (sectionId, fieldId, raw) => {
19530
19530
  const patch = pptx.inspectorFieldPatch(sections, sectionId, fieldId, target, raw);
@@ -19752,7 +19752,7 @@ function MediaInspector({
19752
19752
  durationSeconds,
19753
19753
  onUpdateElement
19754
19754
  }) {
19755
- const { t } = chunkJKSUB7DR_js.useTranslation();
19755
+ const { t } = chunk5DBKW7F3_js.useTranslation();
19756
19756
  const trimStartMs = element.trimStartMs ?? 0;
19757
19757
  const trimEndMs = element.trimEndMs ?? 0;
19758
19758
  const durationMs = durationSeconds * 1e3;
@@ -19982,7 +19982,7 @@ function MediaPlaybackBookmarks({
19982
19982
  onUpdateElement,
19983
19983
  onSeekTo
19984
19984
  }) {
19985
- const { t } = chunkJKSUB7DR_js.useTranslation();
19985
+ const { t } = chunk5DBKW7F3_js.useTranslation();
19986
19986
  const [newBookmarkLabel, setNewBookmarkLabel] = React108.useState("");
19987
19987
  const volumePercent = Math.round((element.volume ?? 1) * 100);
19988
19988
  const handleAddBookmark = React108.useCallback(() => {
@@ -20232,7 +20232,7 @@ function MediaPropertiesPanel({
20232
20232
  canEdit,
20233
20233
  onUpdateElement
20234
20234
  }) {
20235
- const { t } = chunkJKSUB7DR_js.useTranslation();
20235
+ const { t } = chunk5DBKW7F3_js.useTranslation();
20236
20236
  const mediaRef = React108.useRef(null);
20237
20237
  const [isPlaying, setIsPlaying] = React108.useState(false);
20238
20238
  const [currentTime, setCurrentTime] = React108.useState(0);
@@ -20466,7 +20466,7 @@ function AccessibilityTextSection({
20466
20466
  canEdit,
20467
20467
  onUpdateElement
20468
20468
  }) {
20469
- const { t } = chunkJKSUB7DR_js.useTranslation();
20469
+ const { t } = chunk5DBKW7F3_js.useTranslation();
20470
20470
  const fields = pptx.getNonVisualDescriptionFields(selectedElement);
20471
20471
  if (!fields.showAltText && !fields.showTitle) {
20472
20472
  return null;
@@ -20481,7 +20481,7 @@ function AccessibilityTextSection({
20481
20481
  rows: 2,
20482
20482
  disabled: !canEdit,
20483
20483
  placeholder: t("pptx.elementAccessibility.altTextPlaceholder"),
20484
- className: chunkJKSUB7DR_js.cn(INPUT2, "resize-none text-[11px]"),
20484
+ className: chunk5DBKW7F3_js.cn(INPUT2, "resize-none text-[11px]"),
20485
20485
  value: fields.altText,
20486
20486
  onChange: (e) => onUpdateElement({ altText: e.target.value })
20487
20487
  }
@@ -20495,7 +20495,7 @@ function AccessibilityTextSection({
20495
20495
  type: "text",
20496
20496
  disabled: !canEdit,
20497
20497
  placeholder: t("pptx.elementAccessibility.titlePlaceholder"),
20498
- className: chunkJKSUB7DR_js.cn(INPUT2, "text-[11px]"),
20498
+ className: chunk5DBKW7F3_js.cn(INPUT2, "text-[11px]"),
20499
20499
  value: fields.title,
20500
20500
  onChange: (e) => onUpdateElement({ title: e.target.value })
20501
20501
  }
@@ -20523,7 +20523,7 @@ function RecentColorsRow({
20523
20523
  disabled,
20524
20524
  onCommit
20525
20525
  }) {
20526
- const { t } = chunkJKSUB7DR_js.useTranslation();
20526
+ const { t } = chunk5DBKW7F3_js.useTranslation();
20527
20527
  const { recentColors, pushColor } = useRecentColors();
20528
20528
  const shown = recentColors.length > 0;
20529
20529
  const ref = React108.useRef(null);
@@ -20565,7 +20565,7 @@ function ThemeColorSwatchGrid({
20565
20565
  selectedHex,
20566
20566
  onPick
20567
20567
  }) {
20568
- const { t } = chunkJKSUB7DR_js.useTranslation();
20568
+ const { t } = chunk5DBKW7F3_js.useTranslation();
20569
20569
  const themeColorMap = useThemeColorMap();
20570
20570
  const columns = React108.useMemo(
20571
20571
  () => pptx.buildThemeColorSwatchGrid(themeColorMap, (key, params) => t(key, params)),
@@ -20612,7 +20612,7 @@ function SelectRow({
20612
20612
  options,
20613
20613
  onChange
20614
20614
  }) {
20615
- const { t } = chunkJKSUB7DR_js.useTranslation();
20615
+ const { t } = chunk5DBKW7F3_js.useTranslation();
20616
20616
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: `flex flex-col gap-1 ${span2 ? COL2 : ""}`, children: [
20617
20617
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: label }),
20618
20618
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -20636,14 +20636,14 @@ function ColorPickerRow({
20636
20636
  onChange,
20637
20637
  styleChange
20638
20638
  }) {
20639
- const { t } = chunkJKSUB7DR_js.useTranslation();
20639
+ const { t } = chunk5DBKW7F3_js.useTranslation();
20640
20640
  const { pushColor } = useRecentColors();
20641
20641
  const commit = (color, ref) => {
20642
20642
  onChange(color, ref);
20643
20643
  pushColor(color);
20644
20644
  };
20645
20645
  const handleEyedropper = async () => {
20646
- const color = await chunkJKSUB7DR_js.openNativeEyeDropper();
20646
+ const color = await chunk5DBKW7F3_js.openNativeEyeDropper();
20647
20647
  if (color) {
20648
20648
  commit(color);
20649
20649
  }
@@ -20716,7 +20716,7 @@ function GradientStopRow({
20716
20716
  onUpdate,
20717
20717
  allStops
20718
20718
  }) {
20719
- const { t } = chunkJKSUB7DR_js.useTranslation();
20719
+ const { t } = chunk5DBKW7F3_js.useTranslation();
20720
20720
  const { pushColor } = useRecentColors();
20721
20721
  const commitRecentColor = useRecentColorCommit();
20722
20722
  const patchStop = (patch) => {
@@ -20729,9 +20729,9 @@ function GradientStopRow({
20729
20729
  "input",
20730
20730
  {
20731
20731
  type: "color",
20732
- value: chunkJKSUB7DR_js.normalizeHexColor(stop2.color, "#3b82f6"),
20732
+ value: chunk5DBKW7F3_js.normalizeHexColor(stop2.color, "#3b82f6"),
20733
20733
  ref: commitRecentColor,
20734
- onChange: (e) => patchStop({ color: chunkJKSUB7DR_js.normalizeHexColor(e.target.value, "#3b82f6"), colorRef: void 0 }),
20734
+ onChange: (e) => patchStop({ color: chunk5DBKW7F3_js.normalizeHexColor(e.target.value, "#3b82f6"), colorRef: void 0 }),
20735
20735
  className: "h-7 w-10 rounded border border-border bg-muted"
20736
20736
  }
20737
20737
  ),
@@ -20806,7 +20806,7 @@ function FillAdvancedControls({
20806
20806
  onUpdateGradientStops,
20807
20807
  onSetFillColor: _onSetFillColor
20808
20808
  }) {
20809
- const { t } = chunkJKSUB7DR_js.useTranslation();
20809
+ const { t } = chunk5DBKW7F3_js.useTranslation();
20810
20810
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20811
20811
  showGradient && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20812
20812
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -20860,7 +20860,7 @@ function FillAdvancedControls({
20860
20860
  onClick: () => onUpdateGradientStops([
20861
20861
  ...gradientStops,
20862
20862
  {
20863
- color: chunkJKSUB7DR_js.normalizeHexColor(style?.fillColor, chunkJKSUB7DR_js.DEFAULT_FILL_COLOR),
20863
+ color: chunk5DBKW7F3_js.normalizeHexColor(style?.fillColor, chunk5DBKW7F3_js.DEFAULT_FILL_COLOR),
20864
20864
  position: 50,
20865
20865
  opacity: 1
20866
20866
  }
@@ -20874,9 +20874,9 @@ function FillAdvancedControls({
20874
20874
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${COL2} flex flex-col gap-2`, children: [
20875
20875
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: "Pattern" }),
20876
20876
  /* @__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) => {
20877
- const fgColor = chunkJKSUB7DR_js.normalizeHexColor(style?.fillColor, chunkJKSUB7DR_js.DEFAULT_FILL_COLOR);
20878
- const bgColor = chunkJKSUB7DR_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
20879
- const svgPattern = chunkJKSUB7DR_js.getPatternSvg(opt.value, fgColor, bgColor);
20877
+ const fgColor = chunk5DBKW7F3_js.normalizeHexColor(style?.fillColor, chunk5DBKW7F3_js.DEFAULT_FILL_COLOR);
20878
+ const bgColor = chunk5DBKW7F3_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
20879
+ const svgPattern = chunk5DBKW7F3_js.getPatternSvg(opt.value, fgColor, bgColor);
20880
20880
  const isSelected = (style.fillPatternPreset || "pct20") === opt.value;
20881
20881
  return /* @__PURE__ */ jsxRuntime.jsx(
20882
20882
  "button",
@@ -20909,7 +20909,7 @@ function FillAdvancedControls({
20909
20909
  {
20910
20910
  label: t("pptx.fillAdvanced.foregroundColor"),
20911
20911
  prefix: "pattern-fg",
20912
- value: chunkJKSUB7DR_js.normalizeHexColor(style?.fillColor, chunkJKSUB7DR_js.DEFAULT_FILL_COLOR),
20912
+ value: chunk5DBKW7F3_js.normalizeHexColor(style?.fillColor, chunk5DBKW7F3_js.DEFAULT_FILL_COLOR),
20913
20913
  disabled: isLine,
20914
20914
  onChange: (color) => onUpdateShapeStyle(patternForeground(color)),
20915
20915
  styleChange: patternForeground
@@ -20920,7 +20920,7 @@ function FillAdvancedControls({
20920
20920
  {
20921
20921
  label: t("pptx.fillAdvanced.backgroundColor"),
20922
20922
  prefix: "pattern-bg",
20923
- value: chunkJKSUB7DR_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
20923
+ value: chunk5DBKW7F3_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
20924
20924
  disabled: isLine,
20925
20925
  onChange: (color) => onUpdateShapeStyle(patternBackground(color)),
20926
20926
  styleChange: patternBackground
@@ -20985,7 +20985,7 @@ var QUICK_STYLES = pptx.buildQuickStylesGallery();
20985
20985
  function QuickStylesGallery({
20986
20986
  onUpdateShapeStyle
20987
20987
  }) {
20988
- const { t } = chunkJKSUB7DR_js.useTranslation();
20988
+ const { t } = chunk5DBKW7F3_js.useTranslation();
20989
20989
  const ref = React108.useRef(null);
20990
20990
  React108.useLayoutEffect(() => {
20991
20991
  const gallery = ref.current;
@@ -21022,14 +21022,14 @@ function StrokeEffectsSection({
21022
21022
  onUpdateShapeStyle,
21023
21023
  onSetStrokeColor
21024
21024
  }) {
21025
- const { t } = chunkJKSUB7DR_js.useTranslation();
21025
+ const { t } = chunk5DBKW7F3_js.useTranslation();
21026
21026
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21027
21027
  /* @__PURE__ */ jsxRuntime.jsx(
21028
21028
  ColorPickerRow,
21029
21029
  {
21030
21030
  label: t("pptx.inspector.stroke"),
21031
21031
  prefix: "stroke",
21032
- value: chunkJKSUB7DR_js.normalizeHexColor(style?.strokeColor, chunkJKSUB7DR_js.DEFAULT_STROKE_COLOR),
21032
+ value: chunk5DBKW7F3_js.normalizeHexColor(style?.strokeColor, chunk5DBKW7F3_js.DEFAULT_STROKE_COLOR),
21033
21033
  selectedRef: style?.strokeColorRef,
21034
21034
  onChange: onSetStrokeColor,
21035
21035
  styleChange: (hex, current) => pptx.shapeOutlineChange(hex, void 0, current)
@@ -21072,7 +21072,7 @@ function FillStrokeProperties({
21072
21072
  onSetFillColor,
21073
21073
  onSetStrokeColor
21074
21074
  }) {
21075
- const { t } = chunkJKSUB7DR_js.useTranslation();
21075
+ const { t } = chunk5DBKW7F3_js.useTranslation();
21076
21076
  const line = isLineish(selectedElement, selectedShapeType);
21077
21077
  const style = selectedShapeStyle;
21078
21078
  const handleFillModeChange = (nextMode) => {
@@ -21088,10 +21088,10 @@ function FillStrokeProperties({
21088
21088
  return;
21089
21089
  }
21090
21090
  if (nextMode === "gradient") {
21091
- const existing = chunkJKSUB7DR_js.sanitizeGradientStops(style?.fillGradientStops);
21091
+ const existing = chunk5DBKW7F3_js.sanitizeGradientStops(style?.fillGradientStops);
21092
21092
  const stops = existing.length >= 2 ? existing : [
21093
21093
  {
21094
- color: chunkJKSUB7DR_js.normalizeHexColor(style?.fillColor, chunkJKSUB7DR_js.DEFAULT_FILL_COLOR),
21094
+ color: chunk5DBKW7F3_js.normalizeHexColor(style?.fillColor, chunk5DBKW7F3_js.DEFAULT_FILL_COLOR),
21095
21095
  position: 0,
21096
21096
  opacity: 1
21097
21097
  },
@@ -21116,7 +21116,7 @@ function FillStrokeProperties({
21116
21116
  onUpdateShapeStyle({ fillMode: "solid" });
21117
21117
  };
21118
21118
  const gradientStops = selectedGradientStops.length > 0 ? selectedGradientStops : [
21119
- { color: chunkJKSUB7DR_js.DEFAULT_FILL_COLOR, position: 0 },
21119
+ { color: chunk5DBKW7F3_js.DEFAULT_FILL_COLOR, position: 0 },
21120
21120
  { color: "#ffffff", position: 100 }
21121
21121
  ];
21122
21122
  const showGradient = style?.fillMode === "gradient" || selectedGradientStops.length > 0;
@@ -21143,7 +21143,7 @@ function FillStrokeProperties({
21143
21143
  {
21144
21144
  label: t("pptx.fill.fill"),
21145
21145
  prefix: "fill",
21146
- value: chunkJKSUB7DR_js.normalizeHexColor(style?.fillColor, chunkJKSUB7DR_js.DEFAULT_FILL_COLOR),
21146
+ value: chunk5DBKW7F3_js.normalizeHexColor(style?.fillColor, chunk5DBKW7F3_js.DEFAULT_FILL_COLOR),
21147
21147
  selectedRef: style?.fillColorRef,
21148
21148
  disabled: line,
21149
21149
  onChange: onSetFillColor,
@@ -21181,7 +21181,7 @@ function Text3DProperties({
21181
21181
  ts,
21182
21182
  onUpdateTextStyle
21183
21183
  }) {
21184
- const { t } = chunkJKSUB7DR_js.useTranslation();
21184
+ const { t } = chunk5DBKW7F3_js.useTranslation();
21185
21185
  const commitRecentColor = useRecentColorCommit();
21186
21186
  const t3d = ts?.text3d;
21187
21187
  const hasExtrusion = Boolean(t3d?.extrusionHeight && t3d.extrusionHeight > 0);
@@ -21228,7 +21228,7 @@ function Text3DProperties({
21228
21228
  "input",
21229
21229
  {
21230
21230
  type: "color",
21231
- value: chunkJKSUB7DR_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21231
+ value: chunk5DBKW7F3_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21232
21232
  ref: commitRecentColor,
21233
21233
  onChange: (e) => update3d({ extrusionColor: e.target.value }),
21234
21234
  className: COLOR_CLS
@@ -21395,7 +21395,7 @@ function AdvancedTextFormatting({
21395
21395
  onUpdateTextStyle,
21396
21396
  numChange
21397
21397
  }) {
21398
- const { t } = chunkJKSUB7DR_js.useTranslation();
21398
+ const { t } = chunk5DBKW7F3_js.useTranslation();
21399
21399
  const commitRecentColor = useRecentColorCommit();
21400
21400
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 rounded border border-border bg-card p-2 space-y-2", children: [
21401
21401
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] uppercase tracking-wide text-muted-foreground", children: t("pptx.textProperties.advancedTextHeading") }),
@@ -21417,7 +21417,7 @@ function AdvancedTextFormatting({
21417
21417
  "input",
21418
21418
  {
21419
21419
  type: "color",
21420
- value: chunkJKSUB7DR_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21420
+ value: chunk5DBKW7F3_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21421
21421
  ref: commitRecentColor,
21422
21422
  onChange: (e) => onUpdateTextStyle({ highlightColor: e.target.value }),
21423
21423
  disabled: !canEdit,
@@ -21559,7 +21559,7 @@ function TextReflectionSection({
21559
21559
  onUpdateTextStyle,
21560
21560
  numChange
21561
21561
  }) {
21562
- const { t } = chunkJKSUB7DR_js.useTranslation();
21562
+ const { t } = chunk5DBKW7F3_js.useTranslation();
21563
21563
  const hasReflection = Boolean(ts?.textReflection);
21564
21564
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
21565
21565
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "inline-flex items-center gap-2 text-foreground", children: [
@@ -21667,7 +21667,7 @@ function TextEffectsPanel({
21667
21667
  onUpdateTextStyle,
21668
21668
  numChange
21669
21669
  }) {
21670
- const { t } = chunkJKSUB7DR_js.useTranslation();
21670
+ const { t } = chunk5DBKW7F3_js.useTranslation();
21671
21671
  const commitRecentColor = useRecentColorCommit();
21672
21672
  const hasShadow = Boolean(
21673
21673
  ts?.textShadowColor || typeof ts?.textShadowBlur === "number" && ts.textShadowBlur > 0
@@ -21713,7 +21713,7 @@ function TextEffectsPanel({
21713
21713
  "input",
21714
21714
  {
21715
21715
  type: "color",
21716
- value: chunkJKSUB7DR_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21716
+ value: chunk5DBKW7F3_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21717
21717
  ref: commitRecentColor,
21718
21718
  onChange: (e) => onUpdateTextStyle({ textShadowColor: e.target.value }),
21719
21719
  className: COLOR_CLS2
@@ -21818,7 +21818,7 @@ function TextEffectsPanel({
21818
21818
  "input",
21819
21819
  {
21820
21820
  type: "color",
21821
- value: chunkJKSUB7DR_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
21821
+ value: chunk5DBKW7F3_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
21822
21822
  ref: commitRecentColor,
21823
21823
  onChange: (e) => onUpdateTextStyle({ textGlowColor: e.target.value }),
21824
21824
  className: COLOR_CLS2
@@ -21868,7 +21868,7 @@ function TextWarpGallery({
21868
21868
  ts,
21869
21869
  onUpdateTextStyle
21870
21870
  }) {
21871
- const { t } = chunkJKSUB7DR_js.useTranslation();
21871
+ const { t } = chunk5DBKW7F3_js.useTranslation();
21872
21872
  const [expanded, setExpanded] = React108__default.default.useState(false);
21873
21873
  const currentPreset = ts?.textWarpPreset || "textNoShape";
21874
21874
  const descriptor = React108.useMemo(() => pptx.buildTextWarpGallery(ts?.textWarpPreset), [ts?.textWarpPreset]);
@@ -21949,7 +21949,7 @@ function ShapeTextPanels({
21949
21949
  onUpdateElementStyle,
21950
21950
  onUpdateTextStyle
21951
21951
  }) {
21952
- const { t } = chunkJKSUB7DR_js.useTranslation();
21952
+ const { t } = chunk5DBKW7F3_js.useTranslation();
21953
21953
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21954
21954
  pptx$1.hasShapeProperties(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
21955
21955
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.shape.type", "Shape Type") }),
@@ -21958,11 +21958,11 @@ function ShapeTextPanels({
21958
21958
  {
21959
21959
  value: selectedElement.shapeType || "rect",
21960
21960
  disabled: !canEdit,
21961
- className: chunkJKSUB7DR_js.cn(INPUT2, "w-full"),
21961
+ className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
21962
21962
  onChange: (e) => onUpdateElement({
21963
21963
  shapeType: e.target.value
21964
21964
  }),
21965
- children: chunkJKSUB7DR_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
21965
+ children: chunk5DBKW7F3_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
21966
21966
  }
21967
21967
  )
21968
21968
  ] }),
@@ -21974,7 +21974,7 @@ function ShapeTextPanels({
21974
21974
  selectedElement,
21975
21975
  selectedShapeStyle: selectedElement.shapeStyle,
21976
21976
  selectedShapeType: selectedElement.shapeType,
21977
- selectedGradientStops: chunkJKSUB7DR_js.sanitizeGradientStops(
21977
+ selectedGradientStops: chunk5DBKW7F3_js.sanitizeGradientStops(
21978
21978
  selectedElement.shapeStyle?.fillGradientStops
21979
21979
  ),
21980
21980
  canEdit,
@@ -22010,7 +22010,7 @@ function ShapeTextPanels({
22010
22010
  {
22011
22011
  disabled: !canEdit,
22012
22012
  "aria-label": "Text Color",
22013
- value: chunkJKSUB7DR_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
22013
+ value: chunk5DBKW7F3_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
22014
22014
  className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
22015
22015
  onApply: (hex) => onUpdateTextStyle({ color: hex, colorRef: void 0 }),
22016
22016
  patch: textColorPatch
@@ -22101,7 +22101,7 @@ function TextFormatToggle({
22101
22101
  {
22102
22102
  type: "button",
22103
22103
  disabled,
22104
- className: chunkJKSUB7DR_js.cn(
22104
+ className: chunk5DBKW7F3_js.cn(
22105
22105
  "px-2 py-1 rounded text-[11px] transition-colors max-md:min-w-[44px]! max-md:min-h-[44px]!",
22106
22106
  italic && "italic",
22107
22107
  underline && "underline",
@@ -22270,7 +22270,7 @@ function SmartArtLayoutSwitcher({
22270
22270
  canEdit,
22271
22271
  onUpdateSmartArt
22272
22272
  }) {
22273
- const { t } = chunkJKSUB7DR_js.useTranslation();
22273
+ const { t } = chunk5DBKW7F3_js.useTranslation();
22274
22274
  const currentLayout = smartArtData.resolvedLayoutType ?? "list";
22275
22275
  const handleLayoutSwitch = (newLayout) => {
22276
22276
  if (!canEdit || newLayout === currentLayout) {
@@ -22289,7 +22289,7 @@ function SmartArtLayoutSwitcher({
22289
22289
  type: "button",
22290
22290
  "data-testid": `smartart-layout-${type}`,
22291
22291
  disabled: !canEdit,
22292
- className: chunkJKSUB7DR_js.cn(
22292
+ className: chunk5DBKW7F3_js.cn(
22293
22293
  "flex flex-col items-center gap-0.5 rounded border p-1.5 transition-colors",
22294
22294
  "text-[9px] leading-tight",
22295
22295
  isActive ? "border-primary bg-primary/15 text-primary" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground",
@@ -22316,7 +22316,7 @@ function SmartArtStyleControls({
22316
22316
  onChangeColorScheme,
22317
22317
  onChangeStyle
22318
22318
  }) {
22319
- const { t } = chunkJKSUB7DR_js.useTranslation();
22319
+ const { t } = chunk5DBKW7F3_js.useTranslation();
22320
22320
  const translate = React108__default.default.useCallback((key) => t(key), [t]);
22321
22321
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22322
22322
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
@@ -22327,7 +22327,7 @@ function SmartArtStyleControls({
22327
22327
  disabled: !canEdit,
22328
22328
  "data-testid": "smartart-color-scheme",
22329
22329
  "aria-label": t("pptx.smartart.colorScheme"),
22330
- className: chunkJKSUB7DR_js.cn(INPUT2, "w-full"),
22330
+ className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
22331
22331
  value: colorScheme,
22332
22332
  onChange: (e) => onChangeColorScheme(e.target.value),
22333
22333
  children: colorSchemes.map((cs) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: cs, children: pptx.schemaLabel(pptx.SMARTART_COLOR_SCHEME_LABEL_KEYS, cs, translate) }, cs))
@@ -22342,7 +22342,7 @@ function SmartArtStyleControls({
22342
22342
  type: "button",
22343
22343
  disabled: !canEdit,
22344
22344
  "aria-pressed": style === s,
22345
- className: chunkJKSUB7DR_js.cn(
22345
+ className: chunk5DBKW7F3_js.cn(
22346
22346
  "flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
22347
22347
  style === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
22348
22348
  ),
@@ -22368,14 +22368,14 @@ function SmartArtPropertiesPanel({
22368
22368
  onUpdateElement,
22369
22369
  box
22370
22370
  }) {
22371
- const { t } = chunkJKSUB7DR_js.useTranslation();
22371
+ const { t } = chunk5DBKW7F3_js.useTranslation();
22372
22372
  const { pushColor } = useRecentColors();
22373
22373
  const paneRef = React108__default.default.useRef(null);
22374
22374
  const applySmartArtData = (newData) => {
22375
22375
  const reflowed = box ? pptx.rebuildDrawingShapesIfCleared(
22376
22376
  newData,
22377
22377
  newData.layout,
22378
- chunk73SDWM6K_js.resolveSmartArtDataPalette(newData),
22378
+ chunkVGU5S37T_js.resolveSmartArtDataPalette(newData),
22379
22379
  newData.style ?? "flat",
22380
22380
  "inspector",
22381
22381
  box
@@ -22446,9 +22446,9 @@ function TableDataGrid({
22446
22446
  canEdit,
22447
22447
  onUpdateElement
22448
22448
  }) {
22449
- const { t } = chunkJKSUB7DR_js.useTranslation();
22449
+ const { t } = chunk5DBKW7F3_js.useTranslation();
22450
22450
  const grid = pptx.buildTableDataGrid(tableElement);
22451
- const { viewportWidth } = chunk73SDWM6K_js.useIsMobile();
22451
+ const { viewportWidth } = chunkVGU5S37T_js.useIsMobile();
22452
22452
  const gridPlan = pptx.getDenseGridLayoutPlan(viewportWidth);
22453
22453
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
22454
22454
  const stickyGutterClass = gridPlan.stickyFirstColumn ? "sticky left-0 z-10" : "";
@@ -22612,7 +22612,7 @@ function TableCellPatternFill({
22612
22612
  canEdit,
22613
22613
  onUpdateCellStyle
22614
22614
  }) {
22615
- const { t } = chunkJKSUB7DR_js.useTranslation();
22615
+ const { t } = chunk5DBKW7F3_js.useTranslation();
22616
22616
  const commitRecentColor = useRecentColorCommit();
22617
22617
  const translate = (key) => t(key);
22618
22618
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -22667,7 +22667,7 @@ function TableCellAdvancedFill({
22667
22667
  canEdit,
22668
22668
  onUpdateCellStyle
22669
22669
  }) {
22670
- const { t } = chunkJKSUB7DR_js.useTranslation();
22670
+ const { t } = chunk5DBKW7F3_js.useTranslation();
22671
22671
  const fillMode = cellStyle.fillMode ?? "solid";
22672
22672
  const handleFillModeChange = (mode) => {
22673
22673
  const next = mode;
@@ -22755,7 +22755,7 @@ function GradientControls({
22755
22755
  canEdit,
22756
22756
  onUpdateCellStyle
22757
22757
  }) {
22758
- const { t } = chunkJKSUB7DR_js.useTranslation();
22758
+ const { t } = chunk5DBKW7F3_js.useTranslation();
22759
22759
  const commitRecentColor = useRecentColorCommit();
22760
22760
  const stops = cellStyle.gradientFillStops ?? [];
22761
22761
  const gradType = cellStyle.gradientFillType ?? "linear";
@@ -22853,7 +22853,7 @@ function TableCellColorField({
22853
22853
  disabled,
22854
22854
  onCommit
22855
22855
  }) {
22856
- const hex = chunkJKSUB7DR_js.normalizeHexColor(value, fallback);
22856
+ const hex = chunk5DBKW7F3_js.normalizeHexColor(value, fallback);
22857
22857
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
22858
22858
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
22859
22859
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -22883,7 +22883,7 @@ function TableCellFormattingPanel({
22883
22883
  onUpdateTableData,
22884
22884
  onUpdateMergeRows
22885
22885
  }) {
22886
- const { t } = chunkJKSUB7DR_js.useTranslation();
22886
+ const { t } = chunk5DBKW7F3_js.useTranslation();
22887
22887
  const { rowIndex, columnIndex } = tableEditorState;
22888
22888
  const cell = td.rows[rowIndex]?.cells[columnIndex];
22889
22889
  if (!cell) {
@@ -22961,7 +22961,7 @@ function TableCellFormattingPanel({
22961
22961
  {
22962
22962
  type: "button",
22963
22963
  disabled: !canEdit,
22964
- className: chunkJKSUB7DR_js.cn(
22964
+ className: chunk5DBKW7F3_js.cn(
22965
22965
  "px-2 py-1 rounded text-[11px] transition-colors",
22966
22966
  cls,
22967
22967
  cs[key] ? "bg-primary text-white" : "bg-muted hover:bg-accent"
@@ -22980,7 +22980,7 @@ function TableCellFormattingPanel({
22980
22980
  {
22981
22981
  type: "button",
22982
22982
  disabled: !canEdit,
22983
- className: chunkJKSUB7DR_js.cn(
22983
+ className: chunk5DBKW7F3_js.cn(
22984
22984
  "px-2 py-1 rounded text-[11px] transition-colors",
22985
22985
  cs.align === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
22986
22986
  ),
@@ -22998,7 +22998,7 @@ function TableCellFormattingPanel({
22998
22998
  {
22999
22999
  type: "button",
23000
23000
  disabled: !canEdit,
23001
- className: chunkJKSUB7DR_js.cn(
23001
+ className: chunk5DBKW7F3_js.cn(
23002
23002
  "px-2 py-1 rounded text-[11px] transition-colors",
23003
23003
  cs.vAlign === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
23004
23004
  ),
@@ -23021,7 +23021,7 @@ function TableCellFormattingPanel({
23021
23021
  DebouncedColorInput,
23022
23022
  {
23023
23023
  disabled: !canEdit,
23024
- value: chunkJKSUB7DR_js.normalizeHexColor(cs[colorKey], "#374151"),
23024
+ value: chunk5DBKW7F3_js.normalizeHexColor(cs[colorKey], "#374151"),
23025
23025
  className: "w-7 h-6 rounded border border-border bg-transparent cursor-pointer shrink-0",
23026
23026
  onCommit: (hex) => updateCellStyle({ [colorKey]: hex })
23027
23027
  }
@@ -23031,7 +23031,7 @@ function TableCellFormattingPanel({
23031
23031
  {
23032
23032
  type: "number",
23033
23033
  disabled: !canEdit,
23034
- className: chunkJKSUB7DR_js.cn(INPUT2, "w-14"),
23034
+ className: chunk5DBKW7F3_js.cn(INPUT2, "w-14"),
23035
23035
  min: 0,
23036
23036
  max: 10,
23037
23037
  value: pptx.inspectorNumber(cs[widthKey], 1),
@@ -23047,7 +23047,7 @@ function TableCellFormattingPanel({
23047
23047
  {
23048
23048
  type: "button",
23049
23049
  disabled: !canEdit,
23050
- className: chunkJKSUB7DR_js.cn(BTN2, "text-center"),
23050
+ className: chunk5DBKW7F3_js.cn(BTN2, "text-center"),
23051
23051
  onClick: () => {
23052
23052
  const newRows = pptx.computeMergeCellRight(td, rowIndex, columnIndex);
23053
23053
  if (newRows) {
@@ -23062,7 +23062,7 @@ function TableCellFormattingPanel({
23062
23062
  {
23063
23063
  type: "button",
23064
23064
  disabled: !canEdit,
23065
- className: chunkJKSUB7DR_js.cn(BTN2, "text-center"),
23065
+ className: chunk5DBKW7F3_js.cn(BTN2, "text-center"),
23066
23066
  onClick: () => {
23067
23067
  const newRows = pptx.computeMergeCellDown(td, rowIndex, columnIndex);
23068
23068
  if (newRows) {
@@ -23077,7 +23077,7 @@ function TableCellFormattingPanel({
23077
23077
  {
23078
23078
  type: "button",
23079
23079
  disabled: !canEdit,
23080
- className: chunkJKSUB7DR_js.cn(BTN2, "text-center"),
23080
+ className: chunk5DBKW7F3_js.cn(BTN2, "text-center"),
23081
23081
  onClick: () => {
23082
23082
  const newRows = pptx.computeSplitCell(td, rowIndex, columnIndex);
23083
23083
  if (newRows) {
@@ -23096,7 +23096,7 @@ function TableStyleEditorFields({
23096
23096
  canEdit,
23097
23097
  onEdit
23098
23098
  }) {
23099
- const { t } = chunkJKSUB7DR_js.useTranslation();
23099
+ const { t } = chunk5DBKW7F3_js.useTranslation();
23100
23100
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
23101
23101
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
23102
23102
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.tableStyleEditor.fillSection") }),
@@ -23201,7 +23201,7 @@ function BorderSideRow({
23201
23201
  canEdit,
23202
23202
  onEdit
23203
23203
  }) {
23204
- const { t } = chunkJKSUB7DR_js.useTranslation();
23204
+ const { t } = chunk5DBKW7F3_js.useTranslation();
23205
23205
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-[11px]", children: [
23206
23206
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-28 shrink-0 text-muted-foreground", children: t(pptx.TABLE_STYLE_BORDER_SIDE_LABEL_KEYS[side]) }),
23207
23207
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -23258,7 +23258,7 @@ function TableStyleEditor({
23258
23258
  onAssignStyle,
23259
23259
  onClose
23260
23260
  }) {
23261
- const { t } = chunkJKSUB7DR_js.useTranslation();
23261
+ const { t } = chunk5DBKW7F3_js.useTranslation();
23262
23262
  const themeColorMap = useThemeColorMap();
23263
23263
  const [activeStyleId, setActiveStyleId] = React108.useState(
23264
23264
  styleId ? pptx$1.normalizeTableStyleGuid(styleId) : ""
@@ -23350,7 +23350,7 @@ function TablePropertiesPanel({
23350
23350
  onTableStyleMapChange,
23351
23351
  onDeleteTableStyle
23352
23352
  }) {
23353
- const { t } = chunkJKSUB7DR_js.useTranslation();
23353
+ const { t } = chunk5DBKW7F3_js.useTranslation();
23354
23354
  const [showStyleEditor, setShowStyleEditor] = React108.useState(false);
23355
23355
  const td = tableElement.tableData;
23356
23356
  if (!td) {
@@ -23432,7 +23432,7 @@ function TablePropertiesPanel({
23432
23432
  ] }),
23433
23433
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
23434
23434
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.table.stylePresets") }),
23435
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunkJKSUB7DR_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23435
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunk5DBKW7F3_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23436
23436
  "button",
23437
23437
  {
23438
23438
  type: "button",
@@ -23580,7 +23580,7 @@ function ElementInspectorBody({
23580
23580
  onUpdateTextStyle,
23581
23581
  onMoveLayer
23582
23582
  }) {
23583
- const { t } = chunkJKSUB7DR_js.useTranslation();
23583
+ const { t } = chunk5DBKW7F3_js.useTranslation();
23584
23584
  const isLocked = pptx.isElementLocked(selectedElement);
23585
23585
  const handleToggleLock = () => {
23586
23586
  if (!canEdit) {
@@ -23730,7 +23730,7 @@ function CommentMentionTextarea({
23730
23730
  className,
23731
23731
  ariaLabel
23732
23732
  }) {
23733
- const { t } = chunkJKSUB7DR_js.useTranslation();
23733
+ const { t } = chunk5DBKW7F3_js.useTranslation();
23734
23734
  const textareaRef = React108.useRef(null);
23735
23735
  const [caret, setCaret] = React108.useState(value.length);
23736
23736
  const [highlighted, setHighlighted] = React108.useState(0);
@@ -23819,7 +23819,7 @@ function CommentMentionTextarea({
23819
23819
  "data-testid": "pptx-comment-mention-option",
23820
23820
  role: "option",
23821
23821
  "aria-selected": index === safeHighlighted,
23822
- className: chunkJKSUB7DR_js.cn(
23822
+ className: chunk5DBKW7F3_js.cn(
23823
23823
  "block w-full px-2 py-1 text-left text-[11px] hover:bg-accent",
23824
23824
  index === safeHighlighted && "bg-accent"
23825
23825
  ),
@@ -23866,7 +23866,7 @@ function InspectorCommentReplyForm({
23866
23866
  onSubmit,
23867
23867
  onCancel
23868
23868
  }) {
23869
- const { t } = chunkJKSUB7DR_js.useTranslation();
23869
+ const { t } = chunk5DBKW7F3_js.useTranslation();
23870
23870
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 space-y-1.5 pl-3 border-l-2 border-l-primary/40", children: [
23871
23871
  /* @__PURE__ */ jsxRuntime.jsx(
23872
23872
  CommentMentionTextarea,
@@ -23932,7 +23932,7 @@ function InspectorCommentRow({
23932
23932
  onSelectElement,
23933
23933
  depth = 0
23934
23934
  }) {
23935
- const { t } = chunkJKSUB7DR_js.useTranslation();
23935
+ const { t } = chunk5DBKW7F3_js.useTranslation();
23936
23936
  const isEditing = editingCommentId === comment.id;
23937
23937
  const isReplying = replyingToCommentId === comment.id;
23938
23938
  const replyDraft = replyDraftByCommentId[comment.id] ?? "";
@@ -23942,7 +23942,7 @@ function InspectorCommentRow({
23942
23942
  return /* @__PURE__ */ jsxRuntime.jsxs(
23943
23943
  "div",
23944
23944
  {
23945
- className: chunkJKSUB7DR_js.cn(
23945
+ className: chunk5DBKW7F3_js.cn(
23946
23946
  "rounded border border-border bg-card p-2",
23947
23947
  depth > 0 && "ml-3 border-l-2 border-l-primary/40"
23948
23948
  ),
@@ -23956,7 +23956,7 @@ function InspectorCommentRow({
23956
23956
  t("pptx.comments.resolved")
23957
23957
  ] })
23958
23958
  ] }),
23959
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunkJKSUB7DR_js.formatCommentTimestamp(comment.createdAt) })
23959
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunk5DBKW7F3_js.formatCommentTimestamp(comment.createdAt) })
23960
23960
  ] }),
23961
23961
  comment.elementId && (targetElement ? /* @__PURE__ */ jsxRuntime.jsxs(
23962
23962
  "button",
@@ -23964,12 +23964,12 @@ function InspectorCommentRow({
23964
23964
  type: "button",
23965
23965
  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",
23966
23966
  title: t("pptx.comments.commentingOn", {
23967
- element: chunkJKSUB7DR_js.getElementLabel(targetElement)
23967
+ element: chunk5DBKW7F3_js.getElementLabel(targetElement)
23968
23968
  }),
23969
23969
  onClick: () => onSelectElement(targetElement.id),
23970
23970
  children: [
23971
23971
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
23972
- chunkJKSUB7DR_js.getElementLabel(targetElement)
23972
+ chunk5DBKW7F3_js.getElementLabel(targetElement)
23973
23973
  ]
23974
23974
  }
23975
23975
  ) : /* @__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") })),
@@ -24038,7 +24038,7 @@ function InspectorCommentRow({
24038
24038
  "button",
24039
24039
  {
24040
24040
  type: "button",
24041
- className: chunkJKSUB7DR_js.cn(
24041
+ className: chunk5DBKW7F3_js.cn(
24042
24042
  "inline-flex items-center justify-center p-1.5 border-l border-border transition-colors",
24043
24043
  comment.resolved ? "bg-green-900/40 text-green-300 hover:bg-green-900/60" : "hover:bg-accent text-foreground hover:text-foreground"
24044
24044
  ),
@@ -24144,7 +24144,7 @@ function InspectorCommentsSection({
24144
24144
  onSubmitReply,
24145
24145
  onSelectElement
24146
24146
  }) {
24147
- const { t } = chunkJKSUB7DR_js.useTranslation();
24147
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24148
24148
  const HEADING_CLS = "text-[11px] uppercase tracking-wide text-muted-foreground";
24149
24149
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
24150
24150
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
@@ -24181,7 +24181,7 @@ function InspectorCommentsSection({
24181
24181
  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: [
24182
24182
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
24183
24183
  t("pptx.comments.commentingOn", {
24184
- element: chunkJKSUB7DR_js.getElementLabel(selectedElement)
24184
+ element: chunk5DBKW7F3_js.getElementLabel(selectedElement)
24185
24185
  })
24186
24186
  ] }),
24187
24187
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -24192,7 +24192,7 @@ function InspectorCommentsSection({
24192
24192
  authors: commentAuthors,
24193
24193
  rows: 2,
24194
24194
  placeholder: selectedElement ? t("pptx.comments.addOnElement", {
24195
- element: chunkJKSUB7DR_js.getElementLabel(selectedElement)
24195
+ element: chunk5DBKW7F3_js.getElementLabel(selectedElement)
24196
24196
  }) : t("pptx.comments.addPlaceholder"),
24197
24197
  className: "w-full bg-muted border border-border rounded px-2 py-1 text-xs resize-y outline-none focus:border-primary",
24198
24198
  onChange: onSetCommentDraft,
@@ -24205,7 +24205,7 @@ function InspectorCommentsSection({
24205
24205
  type: "button",
24206
24206
  onClick: onAddComment,
24207
24207
  disabled: !commentDraft.trim(),
24208
- className: chunkJKSUB7DR_js.cn(
24208
+ className: chunk5DBKW7F3_js.cn(
24209
24209
  "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]!",
24210
24210
  commentDraft.trim() ? "bg-primary hover:bg-primary/80 text-white" : "bg-muted text-muted-foreground cursor-not-allowed"
24211
24211
  ),
@@ -24230,7 +24230,7 @@ function InspectorElementsTab({
24230
24230
  onSelectElement,
24231
24231
  onUpdateSlide
24232
24232
  }) {
24233
- const { t } = chunkJKSUB7DR_js.useTranslation();
24233
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24234
24234
  const toggleHidden = (elementId2) => {
24235
24235
  const elements2 = activeSlide?.elements;
24236
24236
  if (!canEdit || !elements2) {
@@ -24246,13 +24246,13 @@ function InspectorElementsTab({
24246
24246
  };
24247
24247
  if (!activeSlide) {
24248
24248
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
24249
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkJKSUB7DR_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24249
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk5DBKW7F3_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24250
24250
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground italic", children: t("pptx.inspector.noSlideSelected") })
24251
24251
  ] });
24252
24252
  }
24253
24253
  const elements = activeSlide.elements || [];
24254
24254
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", "data-pptx-elements-tab": true, children: [
24255
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkJKSUB7DR_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24255
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk5DBKW7F3_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24256
24256
  [...elements].reverse().map((el, reversedIndex) => {
24257
24257
  const index = elements.length - 1 - reversedIndex;
24258
24258
  const selected = selectedElementId === el.id || selectedElementIds.includes(el.id);
@@ -24260,7 +24260,7 @@ function InspectorElementsTab({
24260
24260
  "div",
24261
24261
  {
24262
24262
  title: `${el.type} - ${el.id}`,
24263
- className: chunkJKSUB7DR_js.cn(
24263
+ className: chunk5DBKW7F3_js.cn(
24264
24264
  "flex items-center gap-2 px-2 py-1 rounded cursor-pointer transition-colors",
24265
24265
  selected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground"
24266
24266
  ),
@@ -24296,8 +24296,8 @@ function InspectorPaneHeader({
24296
24296
  onSetActiveTab,
24297
24297
  onClose
24298
24298
  }) {
24299
- const { t } = chunkJKSUB7DR_js.useTranslation();
24300
- const { viewportWidth } = chunk73SDWM6K_js.useIsMobile();
24299
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24300
+ const { viewportWidth } = chunkVGU5S37T_js.useIsMobile();
24301
24301
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
24302
24302
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
24303
24303
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -24320,7 +24320,7 @@ function InspectorPaneHeader({
24320
24320
  type: "button",
24321
24321
  title: t(labelKey),
24322
24322
  style: touchBtnStyle,
24323
- className: chunkJKSUB7DR_js.cn(
24323
+ className: chunk5DBKW7F3_js.cn(
24324
24324
  "flex items-center justify-center gap-1 px-2 py-1 rounded text-[11px] transition-colors",
24325
24325
  activeTab === key ? "bg-primary text-white" : "text-muted-foreground hover:text-foreground hover:bg-accent"
24326
24326
  ),
@@ -24380,7 +24380,7 @@ function CustomPropertiesBlock({
24380
24380
  canEdit,
24381
24381
  onUpdate
24382
24382
  }) {
24383
- const { t } = chunkJKSUB7DR_js.useTranslation();
24383
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24384
24384
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
24385
24385
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
24386
24386
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.documentProperties.custom.heading") }),
@@ -24434,7 +24434,7 @@ function CustomPropertiesBlock({
24434
24434
  "button",
24435
24435
  {
24436
24436
  type: "button",
24437
- className: chunkJKSUB7DR_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24437
+ className: chunk5DBKW7F3_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24438
24438
  onClick: () => onUpdate(customProperties.filter((_, i) => i !== index)),
24439
24439
  children: "\xD7"
24440
24440
  }
@@ -24447,7 +24447,7 @@ function NotesHandoutCard({
24447
24447
  notesMaster,
24448
24448
  handoutMaster
24449
24449
  }) {
24450
- const { t } = chunkJKSUB7DR_js.useTranslation();
24450
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24451
24451
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24452
24452
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.notesHandoutHeading") }),
24453
24453
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px] text-muted-foreground", children: [
@@ -24484,7 +24484,7 @@ function DocumentPropertiesCard({
24484
24484
  onUpdateAppProperties,
24485
24485
  onUpdateCustomProperties
24486
24486
  }) {
24487
- const { t } = chunkJKSUB7DR_js.useTranslation();
24487
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24488
24488
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24489
24489
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.documentHeading") }),
24490
24490
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px] text-muted-foreground", children: [
@@ -24538,7 +24538,7 @@ function DocumentPropertiesCard({
24538
24538
  function SlideSizeRescalePrompt({
24539
24539
  onChoose
24540
24540
  }) {
24541
- const { t } = chunkJKSUB7DR_js.useTranslation();
24541
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24542
24542
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5 rounded border border-border bg-muted/40 p-2 text-[11px]", children: [
24543
24543
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium", children: t("pptx.slideSize.rescaleTitle") }),
24544
24544
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground", children: t("pptx.slideSize.rescaleDescription") }),
@@ -24580,7 +24580,7 @@ function SlideSizeCard({
24580
24580
  onUpdateSlideSize,
24581
24581
  hasContent
24582
24582
  }) {
24583
- const { t } = chunkJKSUB7DR_js.useTranslation();
24583
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24584
24584
  const selection = pptx.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize });
24585
24585
  const presetDisabled = !canEdit || !onUpdateSlideSize;
24586
24586
  const [pendingSize, setPendingSize] = React108.useState(null);
@@ -24691,7 +24691,7 @@ function PresentationSettingsCard({
24691
24691
  canEdit,
24692
24692
  onUpdate
24693
24693
  }) {
24694
- const { t } = chunkJKSUB7DR_js.useTranslation();
24694
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24695
24695
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CARD2} pptx-editor-presentation-card`, children: [
24696
24696
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.slideInspector.presentation") }),
24697
24697
  /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "presentation-fields", className: "space-y-1.5 text-[11px]", children: [
@@ -24762,7 +24762,7 @@ function PresentationSettingsCard({
24762
24762
  min: 1,
24763
24763
  max: 16,
24764
24764
  disabled: !canEdit,
24765
- className: chunkJKSUB7DR_js.cn(INPUT2, "w-20"),
24765
+ className: chunk5DBKW7F3_js.cn(INPUT2, "w-20"),
24766
24766
  value: pptx.printPropertiesSlidesPerPage(presentationProperties.printProperties),
24767
24767
  onChange: (e) => onUpdate({
24768
24768
  printProperties: pptx.withSlidesPerPage(
@@ -24783,7 +24783,7 @@ function ThemeSelectorCard({
24783
24783
  canEdit,
24784
24784
  onApplyTheme
24785
24785
  }) {
24786
- const { t } = chunkJKSUB7DR_js.useTranslation();
24786
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24787
24787
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24788
24788
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.themeHeading") }),
24789
24789
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px]", children: [
@@ -24846,7 +24846,7 @@ function SlideThemeOverridePanel({
24846
24846
  canEdit,
24847
24847
  onUpdateSlide
24848
24848
  }) {
24849
- const { t } = chunkJKSUB7DR_js.useTranslation();
24849
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24850
24850
  const translate = React108.useCallback((key) => t(key), [t]);
24851
24851
  const override = activeSlide?.clrMapOverride;
24852
24852
  const isOverrideActive = override !== void 0;
@@ -24953,7 +24953,7 @@ function DirectionPicker({
24953
24953
  disabled,
24954
24954
  onChange
24955
24955
  }) {
24956
- const { t } = chunkJKSUB7DR_js.useTranslation();
24956
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24957
24957
  if (directions.length <= 3) {
24958
24958
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-1", children: directions.map((dir) => /* @__PURE__ */ jsxRuntime.jsx(
24959
24959
  "button",
@@ -24995,10 +24995,10 @@ function TransitionPreview({
24995
24995
  const previewRef = React108.useRef(null);
24996
24996
  const [playing, setPlaying] = React108.useState(false);
24997
24997
  const [animKey, setAnimKey] = React108.useState(0);
24998
- const { t } = chunkJKSUB7DR_js.useTranslation();
24998
+ const { t } = chunk5DBKW7F3_js.useTranslation();
24999
24999
  const durationMs = transition.durationMs ?? 500;
25000
25000
  const animations = React108.useMemo(
25001
- () => chunk73SDWM6K_js.getSlideTransitionAnimations(
25001
+ () => chunkVGU5S37T_js.getSlideTransitionAnimations(
25002
25002
  transition.type,
25003
25003
  durationMs,
25004
25004
  transition.direction,
@@ -25067,7 +25067,7 @@ function TransitionPreview({
25067
25067
  ]
25068
25068
  }
25069
25069
  ),
25070
- /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunk73SDWM6K_js.SLIDE_TRANSITION_KEYFRAMES })
25070
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunkVGU5S37T_js.SLIDE_TRANSITION_KEYFRAMES })
25071
25071
  ] });
25072
25072
  }
25073
25073
  var DEFAULT_DURATION_MS = 320;
@@ -25079,7 +25079,7 @@ function SlideTransitionSection({
25079
25079
  canEdit = true,
25080
25080
  onTransitionChange
25081
25081
  }) {
25082
- const { t } = chunkJKSUB7DR_js.useTranslation();
25082
+ const { t } = chunk5DBKW7F3_js.useTranslation();
25083
25083
  if (!activeSlide) {
25084
25084
  return null;
25085
25085
  }
@@ -25110,7 +25110,7 @@ function SlideTransitionSection({
25110
25110
  type: e.target.value
25111
25111
  }),
25112
25112
  className: "bg-muted border border-border rounded px-2 py-1 max-md:min-h-[44px]!",
25113
- children: chunkJKSUB7DR_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25113
+ children: chunk5DBKW7F3_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25114
25114
  }
25115
25115
  )
25116
25116
  ] }),
@@ -25268,7 +25268,7 @@ function TagsSection({
25268
25268
  onUpdateTagCollections,
25269
25269
  canEdit
25270
25270
  }) {
25271
- const { t } = chunkJKSUB7DR_js.useTranslation();
25271
+ const { t } = chunk5DBKW7F3_js.useTranslation();
25272
25272
  const [collapsed, setCollapsed] = React108.useState(true);
25273
25273
  const allTags = pptx.flattenTagCollections(tagCollections);
25274
25274
  const updateTag = (colIdx, tagIdx, field, newValue) => {
@@ -25326,7 +25326,7 @@ function TagsSection({
25326
25326
  "button",
25327
25327
  {
25328
25328
  type: "button",
25329
- className: chunkJKSUB7DR_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25329
+ className: chunk5DBKW7F3_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25330
25330
  title: t("pptx.tags.deleteTag"),
25331
25331
  onClick: () => deleteTag(tag.colIdx, tag.tagIdx),
25332
25332
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuTrash2, { className: "w-3 h-3" })
@@ -25368,7 +25368,7 @@ function PresentationPropertiesPanel({
25368
25368
  tagCollections,
25369
25369
  onUpdateTagCollections
25370
25370
  }) {
25371
- const { t } = chunkJKSUB7DR_js.useTranslation();
25371
+ const { t } = chunk5DBKW7F3_js.useTranslation();
25372
25372
  const handleTransitionChange = React108__default.default.useCallback(
25373
25373
  (updates) => {
25374
25374
  onUpdateSlide({
@@ -25455,7 +25455,7 @@ function PresentationPropertiesPanel({
25455
25455
  canEdit
25456
25456
  }
25457
25457
  ) }),
25458
- activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-inspector-card": "slide", className: chunkJKSUB7DR_js.cn(CARD2, "space-y-1"), children: [
25458
+ activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-inspector-card": "slide", className: chunk5DBKW7F3_js.cn(CARD2, "space-y-1"), children: [
25459
25459
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: "Slide" }),
25460
25460
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[11px] text-muted-foreground", children: [
25461
25461
  activeSlide.elements?.length ?? 0,
@@ -25473,17 +25473,17 @@ function SlideBackgroundPanel({
25473
25473
  onSetTemplateBackground,
25474
25474
  onGetTemplateBackgroundColor
25475
25475
  }) {
25476
- const { t } = chunkJKSUB7DR_js.useTranslation();
25476
+ const { t } = chunk5DBKW7F3_js.useTranslation();
25477
25477
  const bgImageInputRef = React108.useRef(null);
25478
25478
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
25479
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkJKSUB7DR_js.cn(CARD2, "space-y-2"), children: [
25479
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk5DBKW7F3_js.cn(CARD2, "space-y-2"), children: [
25480
25480
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.viewer.background") }),
25481
25481
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
25482
25482
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-10 shrink-0", children: t("pptx.slideBackground.colour") }),
25483
25483
  /* @__PURE__ */ jsxRuntime.jsx(
25484
25484
  DebouncedColorInput,
25485
25485
  {
25486
- value: chunkJKSUB7DR_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
25486
+ value: chunk5DBKW7F3_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
25487
25487
  disabled: !canEdit,
25488
25488
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25489
25489
  onCommit: (hex) => onUpdateSlide({ backgroundColor: hex })
@@ -25522,7 +25522,7 @@ function SlideBackgroundPanel({
25522
25522
  "button",
25523
25523
  {
25524
25524
  type: "button",
25525
- className: chunkJKSUB7DR_js.cn(BTN2, "flex-1 text-center"),
25525
+ className: chunk5DBKW7F3_js.cn(BTN2, "flex-1 text-center"),
25526
25526
  disabled: !canEdit,
25527
25527
  onClick: () => bgImageInputRef.current?.click(),
25528
25528
  children: activeSlide.backgroundImage ? t("pptx.slideBackground.replaceImage") : t("pptx.slideBackground.chooseImage")
@@ -25555,7 +25555,7 @@ function SlideBackgroundPanel({
25555
25555
  "button",
25556
25556
  {
25557
25557
  type: "button",
25558
- className: chunkJKSUB7DR_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
25558
+ className: chunk5DBKW7F3_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
25559
25559
  disabled: !pptx.slideBackgroundClearState(activeSlide, canEdit).enabled,
25560
25560
  onClick: () => onUpdateSlide(pptx.slideBackgroundClearPatch()),
25561
25561
  children: t("pptx.slideBackground.clearBackground")
@@ -25592,21 +25592,21 @@ function TemplateBackgroundCard({
25592
25592
  onSetTemplateBackground,
25593
25593
  onGetTemplateBackgroundColor
25594
25594
  }) {
25595
- const { t } = chunkJKSUB7DR_js.useTranslation();
25595
+ const { t } = chunk5DBKW7F3_js.useTranslation();
25596
25596
  const rows = pptx.resolveTemplateBackgroundRows(
25597
25597
  activeSlide,
25598
25598
  slideMasters,
25599
25599
  t("pptx.master.layout"),
25600
25600
  t("pptx.master.master")
25601
25601
  );
25602
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkJKSUB7DR_js.cn(CARD2, "space-y-2"), children: [
25602
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk5DBKW7F3_js.cn(CARD2, "space-y-2"), children: [
25603
25603
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.slideBackground.templateBackgroundsHeading") }),
25604
25604
  rows.layout && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
25605
25605
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-14 shrink-0 truncate", title: rows.layout.title, children: t("pptx.master.layout") }),
25606
25606
  /* @__PURE__ */ jsxRuntime.jsx(
25607
25607
  DebouncedColorInput,
25608
25608
  {
25609
- value: chunkJKSUB7DR_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
25609
+ value: chunk5DBKW7F3_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
25610
25610
  disabled: !canEdit,
25611
25611
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25612
25612
  onCommit: (hex) => onSetTemplateBackground(rows.layout.path, hex)
@@ -25619,7 +25619,7 @@ function TemplateBackgroundCard({
25619
25619
  /* @__PURE__ */ jsxRuntime.jsx(
25620
25620
  DebouncedColorInput,
25621
25621
  {
25622
- value: chunkJKSUB7DR_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
25622
+ value: chunk5DBKW7F3_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
25623
25623
  disabled: !canEdit,
25624
25624
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25625
25625
  onCommit: (hex) => onSetTemplateBackground(rows.master.path, hex)
@@ -25729,8 +25729,8 @@ function InspectorPane(props) {
25729
25729
  panelWidth
25730
25730
  } = props;
25731
25731
  const hasSelection = selectedElement !== null;
25732
- const { t } = chunkJKSUB7DR_js.useTranslation();
25733
- const { dragY, handlers: dragHandlers } = chunk73SDWM6K_js.useSheetDismissDrag(onClose);
25732
+ const { t } = chunk5DBKW7F3_js.useTranslation();
25733
+ const { dragY, handlers: dragHandlers } = chunkVGU5S37T_js.useSheetDismissDrag(onClose);
25734
25734
  const {
25735
25735
  animationPanelHeight,
25736
25736
  effectiveThemeOptions,
@@ -25752,7 +25752,7 @@ function InspectorPane(props) {
25752
25752
  "div",
25753
25753
  {
25754
25754
  "data-pptx-chrome": "inspector",
25755
- className: chunkJKSUB7DR_js.cn(
25755
+ className: chunk5DBKW7F3_js.cn(
25756
25756
  // Shared styles
25757
25757
  "bg-background flex flex-col text-xs text-foreground shadow-xl",
25758
25758
  // Mobile: absolute bottom sheet overlay sized via dvh so it
@@ -26083,7 +26083,7 @@ function PresentationAnnotationOverlay({
26083
26083
  );
26084
26084
  }
26085
26085
  function PresentationToolbar(p) {
26086
- const { t } = chunkJKSUB7DR_js.useTranslation();
26086
+ const { t } = chunk5DBKW7F3_js.useTranslation();
26087
26087
  const ref = useWebControl(
26088
26088
  {
26089
26089
  current: p.currentSlideIndex,
@@ -26142,8 +26142,8 @@ function PresentationTouchControls({
26142
26142
  onEndPresentation,
26143
26143
  hideNavigation = false
26144
26144
  }) {
26145
- const { t } = chunkJKSUB7DR_js.useTranslation();
26146
- const { isTouchDevice } = chunk73SDWM6K_js.useIsMobile();
26145
+ const { t } = chunk5DBKW7F3_js.useTranslation();
26146
+ const { isTouchDevice } = chunkVGU5S37T_js.useIsMobile();
26147
26147
  if (!isTouchDevice) {
26148
26148
  return null;
26149
26149
  }
@@ -26225,7 +26225,7 @@ function KeepAnnotationsDialog({
26225
26225
  onKeep,
26226
26226
  onDiscard
26227
26227
  }) {
26228
- const { t } = chunkJKSUB7DR_js.useTranslation();
26228
+ const { t } = chunk5DBKW7F3_js.useTranslation();
26229
26229
  if (!isOpen) {
26230
26230
  return null;
26231
26231
  }
@@ -26273,7 +26273,7 @@ function PasteSpecialDialog({
26273
26273
  onCancel,
26274
26274
  onConfirm
26275
26275
  }) {
26276
- const { t } = chunkJKSUB7DR_js.useTranslation();
26276
+ const { t } = chunk5DBKW7F3_js.useTranslation();
26277
26277
  const [selected, setSelected] = React108.useState("keep-source-formatting");
26278
26278
  if (!isOpen) {
26279
26279
  return null;
@@ -26331,7 +26331,7 @@ function PasteOptionsToolbar({
26331
26331
  onChoose,
26332
26332
  onDismiss
26333
26333
  }) {
26334
- const { t } = chunkJKSUB7DR_js.useTranslation();
26334
+ const { t } = chunk5DBKW7F3_js.useTranslation();
26335
26335
  const [rect, setRect] = React108.useState(null);
26336
26336
  React108.useEffect(() => {
26337
26337
  const node = elementId2 ? pptx.findCanvasElementNode(document, elementId2, { canvasOnly: true }) : null;
@@ -26358,7 +26358,7 @@ function NotesPagePreview({
26358
26358
  frameSlides,
26359
26359
  maxPages = 3
26360
26360
  }) {
26361
- const { t } = chunkJKSUB7DR_js.useTranslation();
26361
+ const { t } = chunk5DBKW7F3_js.useTranslation();
26362
26362
  const pages = React108.useMemo(() => pptx.computeAllNotesPages(slideIndices), [slideIndices]);
26363
26363
  const printable = React108.useMemo(() => pptx.getNotesPrintableArea(), []);
26364
26364
  const visiblePages = pages.slice(0, maxPages);
@@ -26446,15 +26446,15 @@ function PrintPreview({
26446
26446
  frameSlides,
26447
26447
  maxPages = 3
26448
26448
  }) {
26449
- const { t } = chunkJKSUB7DR_js.useTranslation();
26449
+ const { t } = chunk5DBKW7F3_js.useTranslation();
26450
26450
  const pages = React108.useMemo(
26451
- () => chunkJKSUB7DR_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26451
+ () => chunk5DBKW7F3_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26452
26452
  [slideIndices, slidesPerPage, orientation]
26453
26453
  );
26454
- const printable = React108.useMemo(() => chunkJKSUB7DR_js.getPrintableArea(orientation), [orientation]);
26454
+ const printable = React108.useMemo(() => chunk5DBKW7F3_js.getPrintableArea(orientation), [orientation]);
26455
26455
  const visiblePages = pages.slice(0, maxPages);
26456
26456
  const isThreePerPage = slidesPerPage === 3;
26457
- const noteLineCount = chunkJKSUB7DR_js.generateNoteLineCount();
26457
+ const noteLineCount = chunk5DBKW7F3_js.generateNoteLineCount();
26458
26458
  const scaledW = printable.width * PREVIEW_SCALE3;
26459
26459
  const scaledH = printable.height * PREVIEW_SCALE3;
26460
26460
  const noteAreaFraction = 0.5;
@@ -26552,7 +26552,7 @@ function PrintSettingsPanel({
26552
26552
  totalSlides,
26553
26553
  activeSlideIndex
26554
26554
  }) {
26555
- const { t } = chunkJKSUB7DR_js.useTranslation();
26555
+ const { t } = chunk5DBKW7F3_js.useTranslation();
26556
26556
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 space-y-5 min-w-0", children: [
26557
26557
  /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { children: [
26558
26558
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-xs font-medium text-muted-foreground mb-2 uppercase tracking-wide", children: t("pptx.print.printWhat") }),
@@ -26788,13 +26788,13 @@ function PrintDialog({
26788
26788
  defaultSlidesPerPage,
26789
26789
  defaultFrameSlides
26790
26790
  }) {
26791
- const { t } = chunkJKSUB7DR_js.useTranslation();
26791
+ const { t } = chunk5DBKW7F3_js.useTranslation();
26792
26792
  const regionRenderer = useRegionRenderer("dialog.print");
26793
- const { panelStyle, handlers: dragHandlers } = chunk73SDWM6K_js.useModalDismissDrag(onClose);
26794
- const { viewportWidth } = chunk73SDWM6K_js.useIsMobile();
26793
+ const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(onClose);
26794
+ const { viewportWidth } = chunkVGU5S37T_js.useIsMobile();
26795
26795
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
26796
26796
  const closeBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
26797
- const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunk73SDWM6K_js.useViewerOptionsContext());
26797
+ const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunkVGU5S37T_js.useViewerOptionsContext());
26798
26798
  const [printWhat, setPrintWhat] = React108.useState(printOptionDefaults?.printWhat ?? "slides");
26799
26799
  const [orientation, setOrientation] = React108.useState("landscape");
26800
26800
  const [colorMode, setColorMode] = React108.useState(
@@ -26978,7 +26978,7 @@ function ShowOptionsFieldset({
26978
26978
  draft,
26979
26979
  update
26980
26980
  }) {
26981
- const { t } = chunkJKSUB7DR_js.useTranslation();
26981
+ const { t } = chunk5DBKW7F3_js.useTranslation();
26982
26982
  return /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "space-y-1.5", children: [
26983
26983
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-[11px] font-medium text-muted-foreground uppercase tracking-wide mb-1", children: t("pptx.slideShow.showOptions") }),
26984
26984
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
@@ -27036,7 +27036,7 @@ function ShowSlidesFieldset({
27036
27036
  slideCount,
27037
27037
  customShows
27038
27038
  }) {
27039
- const { t } = chunkJKSUB7DR_js.useTranslation();
27039
+ const { t } = chunk5DBKW7F3_js.useTranslation();
27040
27040
  return /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "space-y-1.5", children: [
27041
27041
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-[11px] font-medium text-muted-foreground uppercase tracking-wide mb-1", children: t("pptx.slideShow.showSlides") }),
27042
27042
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
@@ -27146,7 +27146,7 @@ function SetUpSlideShowDialog({
27146
27146
  customShows,
27147
27147
  slideCount
27148
27148
  }) {
27149
- const { t } = chunkJKSUB7DR_js.useTranslation();
27149
+ const { t } = chunk5DBKW7F3_js.useTranslation();
27150
27150
  const [draft, setDraft] = React108.useState({
27151
27151
  ...properties
27152
27152
  });
@@ -27282,16 +27282,16 @@ function BroadcastDialog({
27282
27282
  defaultUserName,
27283
27283
  defaultServerUrl
27284
27284
  }) {
27285
- const { t } = chunkJKSUB7DR_js.useTranslation();
27285
+ const { t } = chunk5DBKW7F3_js.useTranslation();
27286
27286
  const regionRenderer = useRegionRenderer("dialog.broadcast");
27287
- const collab = chunk73SDWM6K_js.useCollaboration();
27287
+ const collab = chunkVGU5S37T_js.useCollaboration();
27288
27288
  const isBroadcasting = collab !== null && collab.status !== "disconnected" && collab.status !== "error" && collab.config.role === "owner";
27289
27289
  const [roomId, setRoomId] = React108.useState("");
27290
27290
  const [userName, setUserName] = React108.useState("");
27291
27291
  const [serverUrl, setServerUrl] = React108.useState("");
27292
27292
  const [copied, setCopied] = React108.useState(false);
27293
27293
  const dialogRef = React108.useRef(null);
27294
- const { panelStyle, handlers: dragHandlers } = chunk73SDWM6K_js.useModalDismissDrag(onClose);
27294
+ const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(onClose);
27295
27295
  useModalFocus(open, dialogRef, onClose);
27296
27296
  React108.useEffect(() => {
27297
27297
  if (open && !isBroadcasting) {
@@ -27450,7 +27450,7 @@ function StartBroadcastForm({
27450
27450
  onUserNameChange,
27451
27451
  onServerUrlChange
27452
27452
  }) {
27453
- const { t } = chunkJKSUB7DR_js.useTranslation();
27453
+ const { t } = chunk5DBKW7F3_js.useTranslation();
27454
27454
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
27455
27455
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] text-muted-foreground leading-relaxed", children: t("pptx.broadcast.description") }),
27456
27456
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -27526,7 +27526,7 @@ function ActiveBroadcastView({
27526
27526
  onCopyUrl,
27527
27527
  onStopBroadcast
27528
27528
  }) {
27529
- const { t } = chunkJKSUB7DR_js.useTranslation();
27529
+ const { t } = chunk5DBKW7F3_js.useTranslation();
27530
27530
  const statusColor = collab.status === "connected" ? "text-green-400" : collab.status === "connecting" ? "text-yellow-400" : "text-red-400";
27531
27531
  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" });
27532
27532
  const viewerCount = collab.remoteUsers.filter((u) => u.role === "viewer").length;
@@ -27607,7 +27607,7 @@ function ActiveSessionView({
27607
27607
  onCopyRoomId,
27608
27608
  onStopCollaboration
27609
27609
  }) {
27610
- const { t } = chunkJKSUB7DR_js.useTranslation(), viewerOptions = chunk73SDWM6K_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({
27610
+ const { t } = chunk5DBKW7F3_js.useTranslation(), viewerOptions = chunkVGU5S37T_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({
27611
27611
  localUserName: activeCollaboration?.userName ?? collab.config.userName,
27612
27612
  localUserInitials: viewerOptions.general.userInitials,
27613
27613
  localUserColor: collab.config.userColor,
@@ -27705,8 +27705,8 @@ function StartSessionForm({
27705
27705
  connectionFailed,
27706
27706
  onRetry
27707
27707
  }) {
27708
- const { t } = chunkJKSUB7DR_js.useTranslation();
27709
- const { viewportWidth } = chunk73SDWM6K_js.useIsMobile();
27708
+ const { t } = chunk5DBKW7F3_js.useTranslation();
27709
+ const { viewportWidth } = chunkVGU5S37T_js.useIsMobile();
27710
27710
  const tabBtnStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
27711
27711
  const inputReadOnlyClass = preconfigured ? " opacity-70 cursor-not-allowed" : "";
27712
27712
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
@@ -27840,9 +27840,9 @@ function ShareDialog({
27840
27840
  defaultUserName,
27841
27841
  defaultServerUrl
27842
27842
  }) {
27843
- const collab = chunk73SDWM6K_js.useCollaboration();
27843
+ const collab = chunkVGU5S37T_js.useCollaboration();
27844
27844
  const isActive = collab !== null && collab.status !== "disconnected" && collab.status !== "error";
27845
- const { t } = chunkJKSUB7DR_js.useTranslation();
27845
+ const { t } = chunk5DBKW7F3_js.useTranslation();
27846
27846
  const regionRenderer = useRegionRenderer("dialog.share");
27847
27847
  const [roomId, setRoomId] = React108.useState(defaultRoomId ?? "");
27848
27848
  const [userName, setUserName] = React108.useState(defaultUserName ?? "");
@@ -27851,9 +27851,9 @@ function ShareDialog({
27851
27851
  const [invitation, setInvitation] = React108.useState("");
27852
27852
  const [copied, setCopied] = React108.useState(false);
27853
27853
  const dialogRef = React108.useRef(null);
27854
- const { panelStyle, handlers: dragHandlers } = chunk73SDWM6K_js.useModalDismissDrag(onClose);
27854
+ const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(onClose);
27855
27855
  useModalFocus(open, dialogRef, onClose);
27856
- const { viewportWidth, viewportHeight } = chunk73SDWM6K_js.useIsMobile();
27856
+ const { viewportWidth, viewportHeight } = chunkVGU5S37T_js.useIsMobile();
27857
27857
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
27858
27858
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
27859
27859
  const stickyFooterClass = pptx.shouldStickyActionRow(viewportWidth, viewportHeight) ? "sticky bottom-0 bg-popover" : "";
@@ -28026,7 +28026,7 @@ function HyperlinkTabContent({
28026
28026
  inputCls,
28027
28027
  onEnterConfirm
28028
28028
  }) {
28029
- const { t } = chunkJKSUB7DR_js.useTranslation();
28029
+ const { t } = chunk5DBKW7F3_js.useTranslation();
28030
28030
  const handleEnterKey = (e) => {
28031
28031
  if (e.key === "Enter") {
28032
28032
  onEnterConfirm();
@@ -28151,13 +28151,13 @@ function HyperlinkEditDialog({
28151
28151
  onConfirm,
28152
28152
  onCancel
28153
28153
  }) {
28154
- const { t } = chunkJKSUB7DR_js.useTranslation();
28155
- const { panelStyle, handlers: dragHandlers } = chunk73SDWM6K_js.useModalDismissDrag(onCancel);
28154
+ const { t } = chunk5DBKW7F3_js.useTranslation();
28155
+ const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(onCancel);
28156
28156
  const inputRef = React108.useRef(null);
28157
- const detectedType = chunk73SDWM6K_js.detectTargetType(initialUrl, initialAction);
28158
- const emailParts = chunk73SDWM6K_js.parseEmailUrl(initialUrl || "");
28159
- const detectedSlide = chunk73SDWM6K_js.parseSlideFromUrl(initialUrl, initialAction);
28160
- const detectedVerb = initialAction ? chunk73SDWM6K_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28157
+ const detectedType = chunkVGU5S37T_js.detectTargetType(initialUrl, initialAction);
28158
+ const emailParts = chunkVGU5S37T_js.parseEmailUrl(initialUrl || "");
28159
+ const detectedSlide = chunkVGU5S37T_js.parseSlideFromUrl(initialUrl, initialAction);
28160
+ const detectedVerb = initialAction ? chunkVGU5S37T_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28161
28161
  const [targetType, setTargetType] = React108.useState(detectedType);
28162
28162
  const [url, setUrl] = React108.useState(
28163
28163
  detectedType === "email" || detectedType === "slide" || detectedType === "action" ? "" : initialUrl || ""
@@ -28188,7 +28188,7 @@ function HyperlinkEditDialog({
28188
28188
  actionVerb
28189
28189
  });
28190
28190
  };
28191
- const tabCls = (active) => chunkJKSUB7DR_js.cn(
28191
+ const tabCls = (active) => chunk5DBKW7F3_js.cn(
28192
28192
  "px-3 py-1.5 text-xs rounded-t border-b-2 transition-colors",
28193
28193
  active ? "border-primary text-primary font-medium" : "border-transparent text-muted-foreground hover:text-foreground hover:border-border"
28194
28194
  );
@@ -28434,7 +28434,7 @@ function ViewerBottomPanels({
28434
28434
  notesStyle,
28435
28435
  onNotesHeightChange
28436
28436
  }) {
28437
- const { isHidden } = chunk73SDWM6K_js.useToolbarVisibility(hiddenActions);
28437
+ const { isHidden } = chunkVGU5S37T_js.useToolbarVisibility(hiddenActions);
28438
28438
  const customization = useViewerCustomizationContext();
28439
28439
  const showNotes = pptx.isPanelVisible(customization, "notes");
28440
28440
  const notesRenderer = useRegionRenderer("notes");
@@ -28563,7 +28563,7 @@ function ViewerInspector({
28563
28563
  onPreviewElement,
28564
28564
  elementById
28565
28565
  }) {
28566
- const { t } = chunkJKSUB7DR_js.useTranslation();
28566
+ const { t } = chunk5DBKW7F3_js.useTranslation();
28567
28567
  const regionRenderer = useRegionRenderer("inspector");
28568
28568
  const liveEdit = onPreviewElement ? {
28569
28569
  element: selectedElement,
@@ -28778,7 +28778,7 @@ function ViewerToolbarSection(props) {
28778
28778
  onSetSnapToShape,
28779
28779
  onSetShowGuides
28780
28780
  } = props;
28781
- const { t } = chunkJKSUB7DR_js.useTranslation();
28781
+ const { t } = chunk5DBKW7F3_js.useTranslation();
28782
28782
  const customization = useViewerCustomizationContext();
28783
28783
  const handleAddAnimation = React108.useCallback(
28784
28784
  (preset, group) => {
@@ -28831,7 +28831,7 @@ function ViewerToolbarSection(props) {
28831
28831
  [activeSlide, propertyHandlers]
28832
28832
  );
28833
28833
  const scopedLayoutOptions = React108__default.default.useMemo(
28834
- () => chunk73SDWM6K_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
28834
+ () => chunkVGU5S37T_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
28835
28835
  [s.layoutOptions, activeSlide]
28836
28836
  );
28837
28837
  const handleResetSlide = React108.useCallback(() => {
@@ -29238,14 +29238,14 @@ function ViewerToolbarSection(props) {
29238
29238
  isMobileInsertOpen: s.isMobileInsertOpen,
29239
29239
  onCloseMobileInsert: () => s.setIsMobileInsertOpen(false),
29240
29240
  slideCommentCount: activeSlide?.comments?.length ?? 0,
29241
- reviewComments: chunk73SDWM6K_js.createReviewCommentsHost({
29241
+ reviewComments: chunkVGU5S37T_js.createReviewCommentsHost({
29242
29242
  state: s,
29243
29243
  activeSlideIndex,
29244
29244
  updateSlides: ops.updateSlides,
29245
29245
  markDirty: history.markDirty
29246
29246
  }),
29247
29247
  formatPainterActive: s.formatPainterActive,
29248
- canActivateFormatPainter: chunkJKSUB7DR_js.hasCopyableFormat(selectedElement),
29248
+ canActivateFormatPainter: chunk5DBKW7F3_js.hasCopyableFormat(selectedElement),
29249
29249
  onToggleFormatPainter: onToggleFormatPainterProp ?? (() => s.setFormatPainterActive((p) => !p)),
29250
29250
  isSelectionPaneOpen: s.isSelectionPaneOpen,
29251
29251
  onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
@@ -29354,14 +29354,14 @@ function CustomShowsDialog({
29354
29354
  onRun,
29355
29355
  onClose
29356
29356
  }) {
29357
- const { t } = chunkJKSUB7DR_js.useTranslation();
29357
+ const { t } = chunk5DBKW7F3_js.useTranslation();
29358
29358
  const controller = React108.useMemo(
29359
29359
  () => pptx.createCustomShowsController(customShows, activeCustomShowId),
29360
29360
  // A fresh draft per open: the host mounts this only while the dialog is open.
29361
29361
  // eslint-disable-next-line react-hooks/exhaustive-deps
29362
29362
  []
29363
29363
  );
29364
- chunk73SDWM6K_js.useController(controller);
29364
+ chunkVGU5S37T_js.useController(controller);
29365
29365
  const view = controller.view(slides);
29366
29366
  const [active, setActive] = React108.useState(activeCustomShowId ?? "");
29367
29367
  const pickerValue = view.shows.some(({ id }) => id === active) ? active : "";
@@ -29640,8 +29640,8 @@ function EquationEditorDialog({
29640
29640
  onInsert,
29641
29641
  existingOmml
29642
29642
  }) {
29643
- const { t } = chunkJKSUB7DR_js.useTranslation();
29644
- const { panelStyle, handlers: dragHandlers } = chunk73SDWM6K_js.useModalDismissDrag(onClose);
29643
+ const { t } = chunk5DBKW7F3_js.useTranslation();
29644
+ const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(onClose);
29645
29645
  const initialLatex = React108.useMemo(() => {
29646
29646
  if (!existingOmml) {
29647
29647
  return "";
@@ -29763,7 +29763,7 @@ function EquationEditorDialog({
29763
29763
  {
29764
29764
  type: "button",
29765
29765
  onClick: () => handleTemplateClick(tmpl.latex),
29766
- className: chunkJKSUB7DR_js.cn(
29766
+ className: chunk5DBKW7F3_js.cn(
29767
29767
  "flex flex-col items-center gap-1 p-2 rounded-lg border transition-colors",
29768
29768
  latex === tmpl.latex ? "border-primary bg-primary/10" : "border-border bg-muted/40 hover:bg-accent/60 hover:border-border"
29769
29769
  ),
@@ -29828,7 +29828,7 @@ function InsertSmartArtDialog({
29828
29828
  onInsert
29829
29829
  }) {
29830
29830
  const ref = React108.useRef(null);
29831
- const { t } = chunkJKSUB7DR_js.useTranslation();
29831
+ const { t } = chunk5DBKW7F3_js.useTranslation();
29832
29832
  React108.useLayoutEffect(() => {
29833
29833
  if (ref.current) {
29834
29834
  ref.current.translateLabel = t;
@@ -29852,7 +29852,7 @@ function InsertChartDialog({
29852
29852
  onInsert
29853
29853
  }) {
29854
29854
  const ref = React108.useRef(null);
29855
- const { t } = chunkJKSUB7DR_js.useTranslation();
29855
+ const { t } = chunk5DBKW7F3_js.useTranslation();
29856
29856
  React108.useLayoutEffect(() => {
29857
29857
  if (ref.current) {
29858
29858
  ref.current.translateLabel = t;
@@ -30359,11 +30359,11 @@ function PresentationStage({
30359
30359
  })
30360
30360
  },
30361
30361
  children: [
30362
- /* @__PURE__ */ jsxRuntime.jsx(chunk73SDWM6K_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30362
+ /* @__PURE__ */ jsxRuntime.jsx(chunkVGU5S37T_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30363
30363
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: pptx.PRESENTATION_HIT_TEST_CSS }),
30364
30364
  presentationKeyframesCss && /* @__PURE__ */ jsxRuntime.jsx("style", { children: presentationKeyframesCss }),
30365
30365
  templateElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30366
- chunk73SDWM6K_js.ElementRenderer,
30366
+ chunkVGU5S37T_js.ElementRenderer,
30367
30367
  {
30368
30368
  element,
30369
30369
  activeSlide,
@@ -30401,7 +30401,7 @@ function PresentationStage({
30401
30401
  `tpl-${element.id}`
30402
30402
  )),
30403
30403
  activeSlide?.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30404
- chunk73SDWM6K_js.ElementRenderer,
30404
+ chunkVGU5S37T_js.ElementRenderer,
30405
30405
  {
30406
30406
  element,
30407
30407
  activeSlide,
@@ -30454,7 +30454,7 @@ function PresentationStage({
30454
30454
  function noop() {
30455
30455
  }
30456
30456
  function PresentationContextMenu(p) {
30457
- const { t } = chunkJKSUB7DR_js.useTranslation();
30457
+ const { t } = chunk5DBKW7F3_js.useTranslation();
30458
30458
  const sections = pptx.getPresentationContextMenuSections({
30459
30459
  seeAllSlides: Boolean(p.onSeeAllSlides),
30460
30460
  presenterView: Boolean(p.onShowPresenterView),
@@ -30513,7 +30513,7 @@ function PresentationTransitionMount({
30513
30513
  templateElementsBySlideId
30514
30514
  );
30515
30515
  return /* @__PURE__ */ jsxRuntime.jsx(
30516
- chunk73SDWM6K_js.PresentationTransitionOverlay,
30516
+ chunkVGU5S37T_js.PresentationTransitionOverlay,
30517
30517
  {
30518
30518
  outgoingSlide,
30519
30519
  templateElements: templates.outgoing,
@@ -30558,9 +30558,9 @@ function ViewerCanvasArea(props) {
30558
30558
  aiHighlightOverlay,
30559
30559
  aiCanvasActive = false
30560
30560
  } = props;
30561
- const { t } = chunkJKSUB7DR_js.useTranslation();
30562
- const { isHidden } = chunk73SDWM6K_js.useToolbarVisibility(hiddenActions);
30563
- const viewerOptions = chunk73SDWM6K_js.useViewerOptionsContext();
30561
+ const { t } = chunk5DBKW7F3_js.useTranslation();
30562
+ const { isHidden } = chunkVGU5S37T_js.useToolbarVisibility(hiddenActions);
30563
+ const viewerOptions = chunkVGU5S37T_js.useViewerOptionsContext();
30564
30564
  const outlineAuthoring = useOutlineAuthoring({
30565
30565
  state: s,
30566
30566
  updateElement: canvasHandlers.handleUpdateSmartArtElement,
@@ -30606,9 +30606,9 @@ function ViewerCanvasArea(props) {
30606
30606
  );
30607
30607
  const handleHyperlinkClick = React108.useCallback(
30608
30608
  (url) => {
30609
- if (chunkJKSUB7DR_js.isPpactionUrl(url)) {
30609
+ if (chunk5DBKW7F3_js.isPpactionUrl(url)) {
30610
30610
  if (mode === "present") {
30611
- const parsed = chunkJKSUB7DR_js.parsePpactionUrl(url);
30611
+ const parsed = chunk5DBKW7F3_js.parsePpactionUrl(url);
30612
30612
  if (parsed) {
30613
30613
  const action = {
30614
30614
  action: parsed.action,
@@ -30693,7 +30693,7 @@ function ViewerCanvasArea(props) {
30693
30693
  s.setActiveSlideIndex((i) => Math.max(0, i - 1));
30694
30694
  }
30695
30695
  }, [mode, presentation, s]);
30696
- const swipe = chunk73SDWM6K_js.useSwipeNavigation({
30696
+ const swipe = chunkVGU5S37T_js.useSwipeNavigation({
30697
30697
  enabled: swipeEnabled,
30698
30698
  onNext: handleSwipeNext,
30699
30699
  onPrev: handleSwipePrev
@@ -30879,14 +30879,14 @@ function ViewerCanvasArea(props) {
30879
30879
  outlineAuthoring,
30880
30880
  collaborationOverlay: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30881
30881
  /* @__PURE__ */ jsxRuntime.jsx(
30882
- chunk73SDWM6K_js.RemoteSelectionOverlay,
30882
+ chunkVGU5S37T_js.RemoteSelectionOverlay,
30883
30883
  {
30884
30884
  elements: effectiveSlide?.elements ?? [],
30885
30885
  activeSlideIndex
30886
30886
  }
30887
30887
  ),
30888
30888
  /* @__PURE__ */ jsxRuntime.jsx(
30889
- chunk73SDWM6K_js.CollaborationCursorOverlay,
30889
+ chunkVGU5S37T_js.CollaborationCursorOverlay,
30890
30890
  {
30891
30891
  activeSlideIndex,
30892
30892
  canvasWidth: canvasSize.width,
@@ -31123,8 +31123,8 @@ function AiChangeOverlay({ batch, activeSlideIndex }) {
31123
31123
  ] });
31124
31124
  }
31125
31125
  function ChartFormatPanel() {
31126
- const { t } = chunkJKSUB7DR_js.useTranslation();
31127
- const commands = chunk73SDWM6K_js.useChartFormatContext();
31126
+ const { t } = chunk5DBKW7F3_js.useTranslation();
31127
+ const commands = chunkVGU5S37T_js.useChartFormatContext();
31128
31128
  const ref = React108.useRef(null);
31129
31129
  const chart = commands?.chart;
31130
31130
  const chartData = chart?.type === "chart" ? chart.chartData : void 0;
@@ -31159,7 +31159,7 @@ function ChartFormatPanel() {
31159
31159
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-chart-format-pane", { ref, "data-testid": "chart-format-pane" });
31160
31160
  }
31161
31161
  function ThemeEditorPanel({ theme, canEdit, onApply, onClose }) {
31162
- const { t } = chunkJKSUB7DR_js.useTranslation();
31162
+ const { t } = chunk5DBKW7F3_js.useTranslation();
31163
31163
  const ref = React108.useRef(null);
31164
31164
  React108.useEffect(() => {
31165
31165
  const node = ref.current;
@@ -31196,8 +31196,8 @@ function MobileDismissSheet({
31196
31196
  className,
31197
31197
  children
31198
31198
  }) {
31199
- const { t } = chunkJKSUB7DR_js.useTranslation();
31200
- const { dragY, handlers } = chunk73SDWM6K_js.useSheetDismissDrag(onClose);
31199
+ const { t } = chunk5DBKW7F3_js.useTranslation();
31200
+ const { dragY, handlers } = chunkVGU5S37T_js.useSheetDismissDrag(onClose);
31201
31201
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31202
31202
  /* @__PURE__ */ jsxRuntime.jsx(
31203
31203
  "button",
@@ -31466,7 +31466,7 @@ function ThemeThumbnail({
31466
31466
  {
31467
31467
  type: "button",
31468
31468
  onClick,
31469
- className: chunkJKSUB7DR_js.cn(
31469
+ className: chunk5DBKW7F3_js.cn(
31470
31470
  "group relative flex flex-col rounded-lg border-2 transition-all overflow-hidden",
31471
31471
  selected ? "border-primary shadow-lg scale-[1.02]" : "border-border hover:border-primary/50 hover:shadow-md"
31472
31472
  ),
@@ -31497,7 +31497,7 @@ function ThemeGallery({
31497
31497
  onApplyTheme,
31498
31498
  onImportTheme
31499
31499
  }) {
31500
- const { t } = chunkJKSUB7DR_js.useTranslation();
31500
+ const { t } = chunk5DBKW7F3_js.useTranslation();
31501
31501
  const [selectedTheme, setSelectedTheme] = React108.useState(currentTheme ?? null);
31502
31502
  const fileInputRef = React108.useRef(null);
31503
31503
  React108.useEffect(() => {
@@ -31634,8 +31634,8 @@ function ViewerSidePanels(props) {
31634
31634
  aiBridge,
31635
31635
  aiPanel
31636
31636
  } = props;
31637
- const aiAssistant = chunk7UFO4OZQ_js.aiAssistants.resolve(aiConfig);
31638
- const AiPanel = aiAssistant?.panel ?? chunk7UFO4OZQ_js.AiChatPanelLazy;
31637
+ const aiAssistant = chunkPNDORR6S_js.aiAssistants.resolve(aiConfig);
31638
+ const AiPanel = aiAssistant?.panel ?? chunkPNDORR6S_js.AiChatPanelLazy;
31639
31639
  const handleSetSlideSize = (size, rescaleMode) => {
31640
31640
  if (rescaleMode && s.slideSizeEmu) {
31641
31641
  s.setSlides(pptx.scaleSlidesForSizeChange(slides, s.slideSizeEmu, size, rescaleMode));
@@ -31941,7 +31941,7 @@ function ViewerMainContent(props) {
31941
31941
  );
31942
31942
  const layoutGalleryAnchorRef = React108.useRef(null);
31943
31943
  const layoutGalleryPreviews = useLayoutPreviews(loadLayoutPreviews, layoutGalleryAnchor !== null);
31944
- return /* @__PURE__ */ jsxRuntime.jsx(chunk73SDWM6K_js.ChartPartSelectionProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "body", className: "relative z-10 flex flex-1 min-h-0", children: [
31944
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkVGU5S37T_js.ChartPartSelectionProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "body", className: "relative z-10 flex flex-1 min-h-0", children: [
31945
31945
  showSlidesPane && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31946
31946
  slidesPaneRenderer ? (
31947
31947
  // The rail's slot (width, collapse, resize handle) stays the viewer's.
@@ -32151,7 +32151,7 @@ function AutosaveRecoveryDialog({
32151
32151
  onDiscard,
32152
32152
  busy = false
32153
32153
  }) {
32154
- const { t } = chunkJKSUB7DR_js.useTranslation();
32154
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32155
32155
  if (!prompt) {
32156
32156
  return null;
32157
32157
  }
@@ -32207,7 +32207,7 @@ function CompatibilityToasts({
32207
32207
  rightInset = 0,
32208
32208
  bottomInset = 0
32209
32209
  }) {
32210
- const { t } = chunkJKSUB7DR_js.useTranslation();
32210
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32211
32211
  const ref = useWebControl(
32212
32212
  { toasts, rightInset, bottomInset, translate: t },
32213
32213
  {
@@ -32252,7 +32252,7 @@ function HeaderFooterPanel({
32252
32252
  onApplyToCurrent,
32253
32253
  onClose
32254
32254
  }) {
32255
- const { t } = chunkJKSUB7DR_js.useTranslation();
32255
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32256
32256
  const showDateTime = headerFooter.hasDateTime ?? false;
32257
32257
  const dateTimeAuto = headerFooter.dateTimeAuto ?? false;
32258
32258
  const showDateText = pptx.isHeaderFooterDateTextVisible(headerFooter);
@@ -32393,7 +32393,7 @@ function HeaderFooterPanel({
32393
32393
  ] }) });
32394
32394
  }
32395
32395
  function MobileBottomBar(p) {
32396
- const { t } = chunkJKSUB7DR_js.useTranslation();
32396
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32397
32397
  const handlers = {
32398
32398
  slides: p.onOpenSlides,
32399
32399
  insert: p.onOpenInsert,
@@ -32419,7 +32419,7 @@ function MobileSlidesSheet({
32419
32419
  onClose,
32420
32420
  ...sidebar
32421
32421
  }) {
32422
- const { t } = chunkJKSUB7DR_js.useTranslation();
32422
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32423
32423
  return /* @__PURE__ */ jsxRuntime.jsx(
32424
32424
  MobileSheet,
32425
32425
  {
@@ -32446,7 +32446,7 @@ function MobileChromeOverlay(props) {
32446
32446
  slideSectionGroups,
32447
32447
  canEdit,
32448
32448
  commentCount
32449
- } = props, { keyboardInset, isKeyboardOpen } = chunk73SDWM6K_js.useKeyboardInsets(), activeSheet = s.isMobileInsertOpen ? "insert" : s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null, closeAllSheets = () => {
32449
+ } = props, { keyboardInset, isKeyboardOpen } = chunkVGU5S37T_js.useKeyboardInsets(), activeSheet = s.isMobileInsertOpen ? "insert" : s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null, closeAllSheets = () => {
32450
32450
  s.setIsSlidesPaneOpen(false);
32451
32451
  s.setIsMobileInsertOpen(false);
32452
32452
  s.setIsInspectorPaneOpen(false);
@@ -32546,7 +32546,7 @@ function MobileChromeOverlay(props) {
32546
32546
  ] });
32547
32547
  }
32548
32548
  function ReadOnlyBanner(p) {
32549
- const { t } = chunkJKSUB7DR_js.useTranslation();
32549
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32550
32550
  const ref = useWebControl(
32551
32551
  pptx.readOnlyBannerState(
32552
32552
  p.recommendation,
@@ -32580,7 +32580,7 @@ function RibbonCustomizationStyle({
32580
32580
  return /* @__PURE__ */ jsxRuntime.jsx("style", { "data-pptx-ribbon-customization": "", children: css });
32581
32581
  }
32582
32582
  function RunProgramNotices({ notices, onDismiss }) {
32583
- const { t } = chunkJKSUB7DR_js.useTranslation();
32583
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32584
32584
  if (notices.length === 0) {
32585
32585
  return null;
32586
32586
  }
@@ -32638,14 +32638,14 @@ function AddinTable({
32638
32638
  selectedId,
32639
32639
  onSelect
32640
32640
  }) {
32641
- const { t } = chunkJKSUB7DR_js.useTranslation();
32641
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32642
32642
  return /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
32643
32643
  /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "mb-1 text-xs font-semibold text-foreground", children: title }),
32644
32644
  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(
32645
32645
  "tr",
32646
32646
  {
32647
32647
  onClick: () => onSelect(row.id),
32648
- className: chunkJKSUB7DR_js.cn(
32648
+ className: chunk5DBKW7F3_js.cn(
32649
32649
  "cursor-pointer border-b border-border/40 transition-colors",
32650
32650
  selectedId === row.id ? "bg-primary/10" : "hover:bg-accent"
32651
32651
  ),
@@ -32660,7 +32660,7 @@ function AddinTable({
32660
32660
  ] });
32661
32661
  }
32662
32662
  function OptionsAddInsPane({ addinStatus }) {
32663
- const { t } = chunkJKSUB7DR_js.useTranslation();
32663
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32664
32664
  const [selectedId, setSelectedId] = React108.useState(null);
32665
32665
  const rows = pptx.resolveViewerAddinRows(addinStatus);
32666
32666
  const active = rows.filter((row) => row.active);
@@ -32703,7 +32703,7 @@ function CommandList({
32703
32703
  selectedId,
32704
32704
  onSelect
32705
32705
  }) {
32706
- const { t } = chunkJKSUB7DR_js.useTranslation();
32706
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32707
32707
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
32708
32708
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-1 text-xs font-medium text-muted-foreground", children: title }),
32709
32709
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -32724,7 +32724,7 @@ function CommandList({
32724
32724
  role: "option",
32725
32725
  "aria-selected": selectedId === id,
32726
32726
  onClick: () => onSelect(id),
32727
- className: chunkJKSUB7DR_js.cn(
32727
+ className: chunk5DBKW7F3_js.cn(
32728
32728
  "flex w-full items-center rounded px-2 py-1.5 text-left text-sm transition-colors",
32729
32729
  selectedId === id ? "bg-primary/15 text-primary" : "text-foreground hover:bg-accent"
32730
32730
  ),
@@ -32742,7 +32742,7 @@ function OptionsQuickAccessPane({
32742
32742
  onQuickAccessCommandsChange,
32743
32743
  onResetQuickAccess
32744
32744
  }) {
32745
- const { t } = chunkJKSUB7DR_js.useTranslation();
32745
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32746
32746
  const [selectedAvailable, setSelectedAvailable] = React108.useState(null);
32747
32747
  const [selectedCurrent, setSelectedCurrent] = React108.useState(null);
32748
32748
  const current = options.quickAccess.commandIds;
@@ -32856,7 +32856,7 @@ function OptionsRibbonPane({
32856
32856
  onRibbonTabHiddenChange,
32857
32857
  onResetRibbon
32858
32858
  }) {
32859
- const { t } = chunkJKSUB7DR_js.useTranslation();
32859
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32860
32860
  const hidden = new Set(options.ribbon.hiddenTabIds);
32861
32861
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
32862
32862
  /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
@@ -32868,7 +32868,7 @@ function OptionsRibbonPane({
32868
32868
  return /* @__PURE__ */ jsxRuntime.jsxs(
32869
32869
  "label",
32870
32870
  {
32871
- className: chunkJKSUB7DR_js.cn(
32871
+ className: chunk5DBKW7F3_js.cn(
32872
32872
  "flex items-center gap-2 rounded px-2 py-1.5",
32873
32873
  isFile ? "cursor-not-allowed opacity-60" : "cursor-pointer hover:bg-accent"
32874
32874
  ),
@@ -32902,7 +32902,7 @@ function OptionsRibbonPane({
32902
32902
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: pptx.SHORTCUT_REFERENCE_ITEMS.map((shortcut, i) => /* @__PURE__ */ jsxRuntime.jsxs(
32903
32903
  "div",
32904
32904
  {
32905
- className: chunkJKSUB7DR_js.cn(
32905
+ className: chunk5DBKW7F3_js.cn(
32906
32906
  "flex items-center justify-between gap-3 rounded px-3 py-2",
32907
32907
  i % 2 === 0 ? "bg-muted/60" : ""
32908
32908
  ),
@@ -32923,12 +32923,12 @@ async function exportAiChatLogs(options) {
32923
32923
  chats,
32924
32924
  { format: options?.format, detailed: options?.detailed, now: options?.now },
32925
32925
  (filename, content, mime) => {
32926
- chunk73SDWM6K_js.downloadBlob(new Blob([content], { type: mime }), filename);
32926
+ chunkVGU5S37T_js.downloadBlob(new Blob([content], { type: mime }), filename);
32927
32927
  }
32928
32928
  );
32929
32929
  }
32930
32930
  function SettingsAiTab({ store }) {
32931
- const { t } = chunkJKSUB7DR_js.useTranslation();
32931
+ const { t } = chunk5DBKW7F3_js.useTranslation();
32932
32932
  const activeStore = React108.useMemo(() => store ?? host.createChatHistoryStore(), [store]);
32933
32933
  const [chatCount, setChatCount] = React108.useState(null);
32934
32934
  const [detailed, setDetailed] = React108.useState(true);
@@ -33020,7 +33020,7 @@ function SettingsAppearanceTab({
33020
33020
  themes,
33021
33021
  onSelectTheme
33022
33022
  }) {
33023
- const { t } = chunkJKSUB7DR_js.useTranslation();
33023
+ const { t } = chunk5DBKW7F3_js.useTranslation();
33024
33024
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-3", children: themes.map((entry) => {
33025
33025
  const isActive = entry.key === activeThemeKey;
33026
33026
  const previewBackground = entry.theme?.colors?.background ?? "#0b0f19";
@@ -33031,7 +33031,7 @@ function SettingsAppearanceTab({
33031
33031
  type: "button",
33032
33032
  onClick: () => onSelectTheme(entry.key),
33033
33033
  "aria-pressed": isActive,
33034
- className: chunkJKSUB7DR_js.cn(
33034
+ className: chunk5DBKW7F3_js.cn(
33035
33035
  "flex items-center gap-3 rounded-lg border px-3 py-2.5 text-left transition-colors",
33036
33036
  isActive ? "border-primary bg-primary/10" : "border-border hover:border-primary/50 hover:bg-accent"
33037
33037
  ),
@@ -33048,7 +33048,7 @@ function SettingsAppearanceTab({
33048
33048
  /* @__PURE__ */ jsxRuntime.jsx(
33049
33049
  "span",
33050
33050
  {
33051
- className: chunkJKSUB7DR_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33051
+ className: chunk5DBKW7F3_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33052
33052
  children: t(entry.labelKey)
33053
33053
  }
33054
33054
  )
@@ -33063,7 +33063,7 @@ function SettingsCustomFontsSection({
33063
33063
  families,
33064
33064
  onRegistered
33065
33065
  }) {
33066
- const { t } = chunkJKSUB7DR_js.useTranslation();
33066
+ const { t } = chunk5DBKW7F3_js.useTranslation();
33067
33067
  const inputRef = React108.useRef(null);
33068
33068
  const [error, setError] = React108.useState(false);
33069
33069
  const handleFile = async (file) => {
@@ -33128,7 +33128,7 @@ function SettingsLanguageTab({
33128
33128
  type: "button",
33129
33129
  onClick: () => onSelectLocale(locale.code),
33130
33130
  "aria-pressed": isActive,
33131
- className: chunkJKSUB7DR_js.cn(
33131
+ className: chunk5DBKW7F3_js.cn(
33132
33132
  "flex w-full items-center justify-between rounded px-3 py-2.5 text-left transition-colors",
33133
33133
  isActive ? "bg-primary/10 text-primary" : "text-foreground hover:bg-accent"
33134
33134
  ),
@@ -33167,7 +33167,7 @@ function OpenSettingsDialog({
33167
33167
  customFontFamilies = NO_CUSTOM_FONT_FAMILIES,
33168
33168
  onCustomFontRegistered
33169
33169
  }) {
33170
- const { t } = chunkJKSUB7DR_js.useTranslation();
33170
+ const { t } = chunk5DBKW7F3_js.useTranslation();
33171
33171
  const viewerCustomization = useViewerCustomizationContext();
33172
33172
  const customization = React108.useMemo(
33173
33173
  () => languageSelectable ? viewerCustomization : {
@@ -33276,7 +33276,7 @@ function ViewerOptionsProvider({
33276
33276
  store,
33277
33277
  children
33278
33278
  }) {
33279
- return /* @__PURE__ */ jsxRuntime.jsx(chunk73SDWM6K_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunk73SDWM6K_js.ViewerOptionsContext.Provider, { value: options, children }) });
33279
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkVGU5S37T_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunkVGU5S37T_js.ViewerOptionsContext.Provider, { value: options, children }) });
33280
33280
  }
33281
33281
  function useAiBridge(input) {
33282
33282
  const ref = React108.useRef(input);
@@ -33359,7 +33359,7 @@ function useAiPanelController(input) {
33359
33359
  getSelectedElement: () => inputRef.current.selectedElement
33360
33360
  })
33361
33361
  );
33362
- const state = chunk73SDWM6K_js.useController(controller);
33362
+ const state = chunkVGU5S37T_js.useController(controller);
33363
33363
  React108.useEffect(() => () => controller.dispose(), [controller]);
33364
33364
  const liveFocusTargets = React108.useMemo(
33365
33365
  () => host.computeFocusTargets({ activeSlideIndex, selectedElementIds, selectedElementId }),
@@ -33592,7 +33592,7 @@ function useMasterViewCrud(input) {
33592
33592
  forgetHistory,
33593
33593
  pushToast
33594
33594
  } = input;
33595
- const { t } = chunkJKSUB7DR_js.useTranslation();
33595
+ const { t } = chunk5DBKW7F3_js.useTranslation();
33596
33596
  const data = React108.useMemo(
33597
33597
  () => ({ slides, slideMasters }),
33598
33598
  [slides, slideMasters]
@@ -33981,7 +33981,7 @@ function useHostLanguage({
33981
33981
  availableLocales,
33982
33982
  onLocaleChange
33983
33983
  }) {
33984
- const { t, i18n } = chunkJKSUB7DR_js.useHostI18next();
33984
+ const { t, i18n } = chunk5DBKW7F3_js.useHostI18next();
33985
33985
  const [localeCode, setLocaleCode] = React108.useState(
33986
33986
  () => defaultLocale ?? pptx.readStoredViewerPrefs().localeCode ?? "en"
33987
33987
  );
@@ -34021,7 +34021,7 @@ function useProvidedLanguage({
34021
34021
  availableLocales,
34022
34022
  onLocaleChange
34023
34023
  }) {
34024
- const state = React108.useContext(chunkJKSUB7DR_js.PptxI18nContext);
34024
+ const state = React108.useContext(chunk5DBKW7F3_js.PptxI18nContext);
34025
34025
  const { locale } = state;
34026
34026
  const locales = availableLocales ?? NO_LOCALES;
34027
34027
  const controls = React108.useMemo(
@@ -34041,7 +34041,7 @@ function useProvidedLanguage({
34041
34041
  return { state, controls };
34042
34042
  }
34043
34043
  function provideLanguage({ state, controls }, children) {
34044
- return /* @__PURE__ */ jsxRuntime.jsx(chunkJKSUB7DR_js.ViewerI18nContext.Provider, { value: state, children: /* @__PURE__ */ jsxRuntime.jsx(chunkJKSUB7DR_js.ViewerLocaleControlsContext.Provider, { value: controls, children }) });
34044
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk5DBKW7F3_js.ViewerI18nContext.Provider, { value: state, children: /* @__PURE__ */ jsxRuntime.jsx(chunk5DBKW7F3_js.ViewerLocaleControlsContext.Provider, { value: controls, children }) });
34045
34045
  }
34046
34046
  function HostLanguageRoot({ children, ...props }) {
34047
34047
  return provideLanguage(useHostLanguage(props), children);
@@ -34050,11 +34050,11 @@ function ProvidedLanguageRoot({ children, ...props }) {
34050
34050
  return provideLanguage(useProvidedLanguage(props), children);
34051
34051
  }
34052
34052
  function ViewerI18nRoot(props) {
34053
- const Root = React108.useContext(chunkJKSUB7DR_js.PptxI18nContext) ? ProvidedLanguageRoot : HostLanguageRoot;
34053
+ const Root = React108.useContext(chunk5DBKW7F3_js.PptxI18nContext) ? ProvidedLanguageRoot : HostLanguageRoot;
34054
34054
  return /* @__PURE__ */ jsxRuntime.jsx(Root, { ...props });
34055
34055
  }
34056
34056
  function useViewerLocaleControls() {
34057
- return React108.useContext(chunkJKSUB7DR_js.ViewerLocaleControlsContext);
34057
+ return React108.useContext(chunk5DBKW7F3_js.ViewerLocaleControlsContext);
34058
34058
  }
34059
34059
  var NO_RIBBON_ADD_INS = [];
34060
34060
  var NO_FILE_PROVIDERS = [];
@@ -34133,7 +34133,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34133
34133
  limits
34134
34134
  } = props;
34135
34135
  const cloudDocument = React108.useMemo(() => pptx.createCloudDocumentController(), []);
34136
- const cloudFile = chunk73SDWM6K_js.useController(cloudDocument).file;
34136
+ const cloudFile = chunkVGU5S37T_js.useController(cloudDocument).file;
34137
34137
  const {
34138
34138
  storage,
34139
34139
  fileName,
@@ -34182,7 +34182,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34182
34182
  (current) => current.includes(family) ? current : [...current, family]
34183
34183
  );
34184
34184
  }, []);
34185
- const { t } = chunkJKSUB7DR_js.useTranslation();
34185
+ const { t } = chunk5DBKW7F3_js.useTranslation();
34186
34186
  const {
34187
34187
  localeCode,
34188
34188
  locales: resolvedLocales,
@@ -34239,7 +34239,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34239
34239
  },
34240
34240
  [hostStorage, cloudDocument]
34241
34241
  );
34242
- const { optionsStore, options: viewerOptions } = chunk73SDWM6K_js.useViewerOptions();
34242
+ const { optionsStore, options: viewerOptions } = chunkVGU5S37T_js.useViewerOptions();
34243
34243
  const custom = useViewerCustomization(
34244
34244
  customization,
34245
34245
  legacyHiddenActions,
@@ -34258,8 +34258,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34258
34258
  const handleEnableEditing = React108.useCallback(() => {
34259
34259
  setProtectedViewOverridden(true);
34260
34260
  }, []);
34261
- const readOnlyRec = chunk73SDWM6K_js.useReadOnlyRecommendationState(content);
34262
- const compatToastsState = chunk73SDWM6K_js.useCompatibilityToastsState();
34261
+ const readOnlyRec = chunkVGU5S37T_js.useReadOnlyRecommendationState(content);
34262
+ const compatToastsState = chunkVGU5S37T_js.useCompatibilityToastsState();
34263
34263
  const [notesBarHeight, setNotesBarHeight] = React108.useState(0);
34264
34264
  const runProgramNoticesState = useRunProgramNoticesState();
34265
34265
  const [collaborationReadOnly, setCollaborationReadOnly] = React108.useState(Boolean(collaboration));
@@ -34282,8 +34282,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34282
34282
  filePath
34283
34283
  });
34284
34284
  const [isShareDialogOpen, setIsShareDialogOpen] = React108.useState(false);
34285
- const { reducedMotion, toggleReducedMotion } = chunk73SDWM6K_js.useReducedMotion();
34286
- const state = chunk73SDWM6K_js.useViewerState({
34285
+ const { reducedMotion, toggleReducedMotion } = chunkVGU5S37T_js.useReducedMotion();
34286
+ const state = chunkVGU5S37T_js.useViewerState({
34287
34287
  content,
34288
34288
  canEdit,
34289
34289
  inspectorInitiallyOpen: props.inspectorInitiallyOpen
@@ -34410,16 +34410,16 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34410
34410
  }
34411
34411
  }, [settings, optionsStore]);
34412
34412
  const handleClearOptionsCache = useAutosaveCacheMaintenance(viewerOptions, storage);
34413
- const mobile = chunk73SDWM6K_js.useIsMobile();
34413
+ const mobile = chunkVGU5S37T_js.useIsMobile();
34414
34414
  const { isMobile, isTouchDevice, isVirtualKeyboardOpen } = mobile;
34415
- const resizablePanels = chunk73SDWM6K_js.useResizablePanels();
34415
+ const resizablePanels = chunkVGU5S37T_js.useResizablePanels();
34416
34416
  const {
34417
34417
  gridSpacingPx,
34418
34418
  visibleSlideIndexes,
34419
34419
  slideSectionGroups,
34420
34420
  masterPseudoSlide,
34421
34421
  authoredRange
34422
- } = chunk73SDWM6K_js.useDerivedSlideState({
34422
+ } = chunkVGU5S37T_js.useDerivedSlideState({
34423
34423
  slides,
34424
34424
  sections: state.sections,
34425
34425
  customShows: state.customShows,
@@ -34444,7 +34444,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34444
34444
  state.cropSessionRef
34445
34445
  ]
34446
34446
  );
34447
- const zoom = chunk73SDWM6K_js.useZoomViewport({
34447
+ const zoom = chunkVGU5S37T_js.useZoomViewport({
34448
34448
  canvasSize,
34449
34449
  selectedElements: state.selectedElements,
34450
34450
  fitPadding: props.fitPadding,
@@ -34460,7 +34460,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34460
34460
  onChangeCallback.current?.();
34461
34461
  }, [setIsDirty]);
34462
34462
  const restoreHistoryThemeRef = React108.useRef(void 0);
34463
- const history = chunk73SDWM6K_js.useEditorHistory({
34463
+ const history = chunkVGU5S37T_js.useEditorHistory({
34464
34464
  slides,
34465
34465
  canvasSize,
34466
34466
  activeSlideIndex,
@@ -34489,7 +34489,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34489
34489
  setEditTemplateMode: state.setEditTemplateMode,
34490
34490
  setHeaderFooter: state.setHeaderFooter
34491
34491
  });
34492
- const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunk73SDWM6K_js.usePresentationSetup({
34492
+ const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunkVGU5S37T_js.usePresentationSetup({
34493
34493
  mode,
34494
34494
  slides,
34495
34495
  visibleSlideIndexes,
@@ -34568,7 +34568,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34568
34568
  loading,
34569
34569
  error
34570
34570
  ]);
34571
- chunk73SDWM6K_js.useTouchGestures({
34571
+ chunkVGU5S37T_js.useTouchGestures({
34572
34572
  targetRef: zoom.canvasViewportRef,
34573
34573
  currentScale: zoom.scale,
34574
34574
  callbacks: {
@@ -34590,7 +34590,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34590
34590
  },
34591
34591
  enabled: isTouchDevice
34592
34592
  });
34593
- const dialogs = chunk73SDWM6K_js.useViewerDialogs({
34593
+ const dialogs = chunkVGU5S37T_js.useViewerDialogs({
34594
34594
  mode,
34595
34595
  slides,
34596
34596
  activeSlide,
@@ -34618,7 +34618,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34618
34618
  history,
34619
34619
  embeddedFontFamilies: state.embeddedFonts.map((font) => font.name)
34620
34620
  });
34621
- chunk73SDWM6K_js.useClearSelectionOnSlideChange(state, activeSlideIndex);
34621
+ chunkVGU5S37T_js.useClearSelectionOnSlideChange(state, activeSlideIndex);
34622
34622
  const zoomBeforePresentRef = React108.useRef(null);
34623
34623
  React108.useEffect(() => {
34624
34624
  if (mode !== "present") {
@@ -34636,7 +34636,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34636
34636
  zoom.handleZoomToFit();
34637
34637
  zoom.canvasViewportRef.current?.scrollTo({ left: 0, top: 0 });
34638
34638
  }, [mode]);
34639
- const editorOps = chunk73SDWM6K_js.useEditorOperations({
34639
+ const editorOps = chunkVGU5S37T_js.useEditorOperations({
34640
34640
  state,
34641
34641
  history,
34642
34642
  zoom,
@@ -34681,7 +34681,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34681
34681
  handlerRef,
34682
34682
  viewerApi,
34683
34683
  loadVersion
34684
- } = chunk73SDWM6K_js.useViewerIntegration({
34684
+ } = chunkVGU5S37T_js.useViewerIntegration({
34685
34685
  transformCommittedText: (text, previous) => pptx.applyAutoCorrectToEdit(text, previous, viewerOptions.proofing),
34686
34686
  state,
34687
34687
  zoom,
@@ -34824,7 +34824,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34824
34824
  updateElementById: editorOps.ops.updateElementById
34825
34825
  });
34826
34826
  const ribbonScope = useRibbonScopeToken();
34827
- const viewPreferencesSync = chunk73SDWM6K_js.useViewPreferencesSync({
34827
+ const viewPreferencesSync = chunkVGU5S37T_js.useViewPreferencesSync({
34828
34828
  loadVersion,
34829
34829
  viewProperties: state.viewProperties,
34830
34830
  setViewProperties: state.setViewProperties,
@@ -34875,7 +34875,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34875
34875
  },
34876
34876
  [state]
34877
34877
  );
34878
- const layoutSwitching = chunk73SDWM6K_js.useLayoutSwitching({
34878
+ const layoutSwitching = chunkVGU5S37T_js.useLayoutSwitching({
34879
34879
  handler: handlerRef.current,
34880
34880
  slides,
34881
34881
  activeSlideIndex,
@@ -34994,7 +34994,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34994
34994
  "data-pptx-editor-chrome": "",
34995
34995
  ...{ [pptx.RIBBON_SCOPE_ATTR]: ribbonScope },
34996
34996
  "aria-busy": loading,
34997
- className: chunkJKSUB7DR_js.cn(
34997
+ className: chunk5DBKW7F3_js.cn(
34998
34998
  "h-full w-full bg-background text-foreground relative",
34999
34999
  ...pptx.resolveOptionRootClasses(viewerOptions, "pptx")
35000
35000
  ),
@@ -35394,8 +35394,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35394
35394
  // Nothing previously provided it, so every one of those consumers was
35395
35395
  // silently reading `DEFAULT_VIEWER_OPTIONS` forever, no matter what
35396
35396
  // the user changed in the Options dialog.
35397
- /* @__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(chunk73SDWM6K_js.Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
35398
- chunk73SDWM6K_js.CollaborationProvider,
35397
+ /* @__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(chunkVGU5S37T_js.Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
35398
+ chunkVGU5S37T_js.CollaborationProvider,
35399
35399
  {
35400
35400
  config: collaboration,
35401
35401
  canvasWidth: canvasSize.width,
@@ -35452,19 +35452,19 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35452
35452
  slideCount: slides.length
35453
35453
  }
35454
35454
  ),
35455
- /* @__PURE__ */ jsxRuntime.jsx(ShapeFormatContext.Provider, { value: shapeFormat, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonGalleryCommandsContext.Provider, { value: ribbonGalleries, children: /* @__PURE__ */ jsxRuntime.jsx(chunk73SDWM6K_js.ChartFormatContext.Provider, { value: chartFormat, children: viewerContent }) }) })
35455
+ /* @__PURE__ */ jsxRuntime.jsx(ShapeFormatContext.Provider, { value: shapeFormat, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonGalleryCommandsContext.Provider, { value: ribbonGalleries, children: /* @__PURE__ */ jsxRuntime.jsx(chunkVGU5S37T_js.ChartFormatContext.Provider, { value: chartFormat, children: viewerContent }) }) })
35456
35456
  ]
35457
35457
  }
35458
35458
  ) }) }) }) }) }) }) }) }) })
35459
35459
  );
35460
35460
  }
35461
35461
  );
35462
- var PowerPointViewer2 = /* @__PURE__ */ chunk73SDWM6K_js.withDisplayName(
35462
+ var PowerPointViewer2 = /* @__PURE__ */ chunkVGU5S37T_js.withDisplayName(
35463
35463
  PowerPointViewerComponent,
35464
35464
  "PowerPointViewer"
35465
35465
  );
35466
35466
  function CollaborationStatusStrip() {
35467
- const collab = chunk73SDWM6K_js.useCollaboration();
35467
+ const collab = chunkVGU5S37T_js.useCollaboration();
35468
35468
  if (!collab) {
35469
35469
  return null;
35470
35470
  }
@@ -35481,9 +35481,9 @@ function CollaborationStateReporter({
35481
35481
  onChange,
35482
35482
  onStatus
35483
35483
  }) {
35484
- const collab = chunk73SDWM6K_js.useCollaboration();
35484
+ const collab = chunkVGU5S37T_js.useCollaboration();
35485
35485
  useCollaborationStateReport(collab, onChange);
35486
- chunk73SDWM6K_js.useReportOnChange(collab?.status ?? "disconnected", onStatus, "disconnected");
35486
+ chunkVGU5S37T_js.useReportOnChange(collab?.status ?? "disconnected", onStatus, "disconnected");
35487
35487
  return null;
35488
35488
  }
35489
35489
  function CollaborationDocumentSync({
@@ -35498,8 +35498,8 @@ function CollaborationDocumentSync({
35498
35498
  onReadOnlyChange,
35499
35499
  history
35500
35500
  }) {
35501
- const collab = chunk73SDWM6K_js.useCollaboration();
35502
- chunk73SDWM6K_js.useCollaborationDocumentSync({
35501
+ const collab = chunkVGU5S37T_js.useCollaboration();
35502
+ chunkVGU5S37T_js.useCollaborationDocumentSync({
35503
35503
  collaboration: collab,
35504
35504
  history,
35505
35505
  slides,
@@ -35519,14 +35519,14 @@ function CollaborationFollowLayer({
35519
35519
  setActiveSlideIndex,
35520
35520
  slideCount
35521
35521
  }) {
35522
- const collab = chunk73SDWM6K_js.useCollaboration();
35523
- const { followedClientId, followUser } = chunk73SDWM6K_js.useFollowMode({
35522
+ const collab = chunkVGU5S37T_js.useCollaboration();
35523
+ const { followedClientId, followUser } = chunkVGU5S37T_js.useFollowMode({
35524
35524
  collab,
35525
35525
  activeSlideIndex,
35526
35526
  setActiveSlideIndex,
35527
35527
  slideCount
35528
35528
  });
35529
- chunk73SDWM6K_js.useBroadcastFollower({
35529
+ chunkVGU5S37T_js.useBroadcastFollower({
35530
35530
  collab,
35531
35531
  activeSlideIndex,
35532
35532
  setActiveSlideIndex,
@@ -35568,7 +35568,7 @@ function PptxI18nProvider({
35568
35568
  () => ({ t: withEnglishFallback(translate), locale }),
35569
35569
  [translate, locale]
35570
35570
  );
35571
- return /* @__PURE__ */ jsxRuntime.jsx(chunkJKSUB7DR_js.PptxI18nContext.Provider, { value: state, children });
35571
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk5DBKW7F3_js.PptxI18nContext.Provider, { value: state, children });
35572
35572
  }
35573
35573
 
35574
35574
  Object.defineProperty(exports, "THEME_CATALOG", {