pptx-react-viewer 4.65.0 → 4.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/dist/{AiChatPanel-7AFFNYEN.js → AiChatPanel-DL7EBR2V.js} +19 -19
  3. package/dist/AiChatPanel-DL7EBR2V.js.br +0 -0
  4. package/dist/AiChatPanel-DL7EBR2V.js.gz +0 -0
  5. package/dist/{AiChatPanel-7U7IJRNY.mjs → AiChatPanel-JKWJQX4N.mjs} +1 -1
  6. package/dist/AiChatPanel-JKWJQX4N.mjs.br +0 -0
  7. package/dist/AiChatPanel-JKWJQX4N.mjs.gz +0 -0
  8. package/dist/ai.js +2 -2
  9. package/dist/ai.js.br +2 -1
  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-5DBKW7F3.js → chunk-73S5EOD3.js} +67 -735
  15. package/dist/chunk-73S5EOD3.js.br +0 -0
  16. package/dist/chunk-73S5EOD3.js.gz +0 -0
  17. package/dist/{chunk-5ZW3GP6C.mjs → chunk-A4K2TM2K.mjs} +68 -737
  18. package/dist/chunk-A4K2TM2K.mjs.br +0 -0
  19. package/dist/chunk-A4K2TM2K.mjs.gz +0 -0
  20. package/dist/{chunk-VMX3IDQB.mjs → chunk-DORVZDQT.mjs} +6 -5
  21. package/dist/chunk-DORVZDQT.mjs.br +0 -0
  22. package/dist/chunk-DORVZDQT.mjs.gz +0 -0
  23. package/dist/{chunk-LUKGXRHZ.js → chunk-QLXYEA54.js} +562 -561
  24. package/dist/chunk-QLXYEA54.js.br +0 -0
  25. package/dist/chunk-QLXYEA54.js.gz +0 -0
  26. package/dist/{chunk-WAIX4VJ2.mjs → chunk-SLFVXZHA.mjs} +1 -1
  27. package/dist/chunk-SLFVXZHA.mjs.br +0 -0
  28. package/dist/chunk-SLFVXZHA.mjs.gz +0 -0
  29. package/dist/{chunk-PNDORR6S.js → chunk-UC57KUGO.js} +1 -1
  30. package/dist/chunk-UC57KUGO.js.br +0 -0
  31. package/dist/chunk-UC57KUGO.js.gz +0 -0
  32. package/dist/{chunk-VGU5S37T.js → chunk-YQ67KAQR.js} +318 -329
  33. package/dist/chunk-YQ67KAQR.js.br +0 -0
  34. package/dist/chunk-YQ67KAQR.js.gz +0 -0
  35. package/dist/{chunk-G5JGUSBL.mjs → chunk-ZRU67AVX.mjs} +122 -133
  36. package/dist/chunk-ZRU67AVX.mjs.br +0 -0
  37. package/dist/chunk-ZRU67AVX.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/viewer/index.js +21 -21
  51. package/dist/viewer/index.js.br +0 -0
  52. package/dist/viewer/index.js.gz +0 -0
  53. package/dist/viewer/index.mjs +4 -4
  54. package/dist/viewer/index.mjs.br +0 -0
  55. package/dist/viewer/index.mjs.gz +0 -0
  56. package/package.json +3 -3
  57. package/dist/AiChatPanel-7AFFNYEN.js.br +0 -0
  58. package/dist/AiChatPanel-7AFFNYEN.js.gz +0 -0
  59. package/dist/AiChatPanel-7U7IJRNY.mjs.br +0 -0
  60. package/dist/AiChatPanel-7U7IJRNY.mjs.gz +0 -0
  61. package/dist/chunk-5DBKW7F3.js.br +0 -0
  62. package/dist/chunk-5DBKW7F3.js.gz +0 -0
  63. package/dist/chunk-5ZW3GP6C.mjs.br +0 -0
  64. package/dist/chunk-5ZW3GP6C.mjs.gz +0 -0
  65. package/dist/chunk-G5JGUSBL.mjs.br +0 -0
  66. package/dist/chunk-G5JGUSBL.mjs.gz +0 -0
  67. package/dist/chunk-LUKGXRHZ.js.br +0 -0
  68. package/dist/chunk-LUKGXRHZ.js.gz +0 -0
  69. package/dist/chunk-PNDORR6S.js.br +0 -0
  70. package/dist/chunk-PNDORR6S.js.gz +0 -0
  71. package/dist/chunk-VGU5S37T.js.br +0 -0
  72. package/dist/chunk-VGU5S37T.js.gz +0 -0
  73. package/dist/chunk-VMX3IDQB.mjs.br +0 -0
  74. package/dist/chunk-VMX3IDQB.mjs.gz +0 -0
  75. package/dist/chunk-WAIX4VJ2.mjs.br +0 -0
  76. package/dist/chunk-WAIX4VJ2.mjs.gz +0 -0
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkPNDORR6S_js = require('./chunk-PNDORR6S.js');
4
- var chunkVGU5S37T_js = require('./chunk-VGU5S37T.js');
5
- var chunk5DBKW7F3_js = require('./chunk-5DBKW7F3.js');
3
+ var chunkUC57KUGO_js = require('./chunk-UC57KUGO.js');
4
+ var chunkYQ67KAQR_js = require('./chunk-YQ67KAQR.js');
5
+ var chunk73S5EOD3_js = require('./chunk-73S5EOD3.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 } = chunk5DBKW7F3_js.useTranslation();
52
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
87
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
161
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
202
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
307
+ const { t } = chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
408
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
483
+ const { t } = chunk73S5EOD3_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 ?? chunk5DBKW7F3_js.SLIDE_NAV_THUMBNAIL_WIDTH;
547
+ const width = previewWidth ?? chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
552
+ const { t } = chunk73S5EOD3_js.useTranslation();
553
553
  const transitionLabel = slide.transition ? (() => {
554
- const opt = chunk5DBKW7F3_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
554
+ const opt = chunk73S5EOD3_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(chunkVGU5S37T_js.SlideBackgroundImageLayer, { slide }),
580
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_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
- chunkVGU5S37T_js.StaticElementRenderer,
590
+ chunkYQ67KAQR_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 !== chunk5DBKW7F3_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunk5DBKW7F3_js.UNGROUPED_SECTION_ID).map((group) => group.id);
716
+ const declared = groups.filter((group) => group.id !== chunk73S5EOD3_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunk73S5EOD3_js.UNGROUPED_SECTION_ID).map((group) => group.id);
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 } = chunk5DBKW7F3_js.useTranslation();
773
+ const { t } = chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
801
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
823
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
846
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
1045
- const collab = chunkVGU5S37T_js.useCollaboration();
1044
+ const { t } = chunk73S5EOD3_js.useTranslation();
1045
+ const collab = chunkYQ67KAQR_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 !== chunk5DBKW7F3_js.DEFAULT_SECTION_GROUP_ID);
1070
+ const showSectionHeaders = sectionGroups.some((group) => group.id !== chunk73S5EOD3_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 } = chunkVGU5S37T_js.useVirtualizedSlides({
1140
+ const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunkYQ67KAQR_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
- chunkVGU5S37T_js.StaticElementRenderer,
1424
+ chunkYQ67KAQR_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 } = chunk5DBKW7F3_js.useTranslation();
1493
- const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(onClose);
1492
+ const { t } = chunk73S5EOD3_js.useTranslation();
1493
+ const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_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: chunk5DBKW7F3_js.cn(
1578
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
1788
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
1894
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
2044
- const { dragY, dragging, handlers } = chunkVGU5S37T_js.useSheetDismissDrag(onClose);
2043
+ const { t } = chunk73S5EOD3_js.useTranslation();
2044
+ const { dragY, dragging, handlers } = chunkYQ67KAQR_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: chunk5DBKW7F3_js.cn(
2068
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
2115
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
2191
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
2272
+ const { t } = chunk73S5EOD3_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 } = chunkVGU5S37T_js.useToolbarVisibility(p.hiddenActions);
2313
+ const { isHidden } = chunkYQ67KAQR_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 } = chunk5DBKW7F3_js.useTranslation();
2364
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
2471
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
2606
+ const { t } = chunk73S5EOD3_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
- chunkVGU5S37T_js.playAnimationSound(url);
2648
+ chunkYQ67KAQR_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 } = chunk5DBKW7F3_js.useTranslation();
2667
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
2730
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
2828
+ const { t } = chunk73S5EOD3_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.65.0" ;
2856
+ const version = "4.66.0" ;
2857
2857
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
2858
2858
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cardClass, children: [
2859
2859
  /* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -2893,7 +2893,7 @@ function AccountPage() {
2893
2893
  "aria-label": color,
2894
2894
  "aria-pressed": profile.avatarColor === color,
2895
2895
  onClick: () => updateProfile({ avatarColor: color }),
2896
- className: chunk5DBKW7F3_js.cn(
2896
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
2971
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
2997
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
3051
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
3113
+ const { t, locale } = chunk73S5EOD3_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 } = chunkVGU5S37T_js.useToolbarVisibility(p.hiddenActions);
3121
+ const { isHidden } = chunkYQ67KAQR_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: chunk5DBKW7F3_js.cn("fixed z-50", className),
3390
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
3400
+ const { t } = chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
3416
+ className: chunk73S5EOD3_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
- chunkVGU5S37T_js.StaticElementRenderer,
3490
+ chunkYQ67KAQR_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 } = chunk5DBKW7F3_js.useTranslation();
3765
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
3825
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
3845
- const supplied = React108.useContext(chunkVGU5S37T_js.ViewerOptionsStoreContext);
3844
+ const { t } = chunk73S5EOD3_js.useTranslation();
3845
+ const supplied = React108.useContext(chunkYQ67KAQR_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 } = chunk5DBKW7F3_js.useTranslation();
3879
- const { isHidden } = chunkVGU5S37T_js.useToolbarVisibility(p.hiddenActions);
3878
+ const { t } = chunk73S5EOD3_js.useTranslation();
3879
+ const { isHidden } = chunkYQ67KAQR_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 } = chunk5DBKW7F3_js.useTranslation();
4123
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
4146
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
4247
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
4323
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
4396
+ const { t } = chunk73S5EOD3_js.useTranslation();
4397
4397
  const { open, onClose } = props;
4398
4398
  const [active, setActive] = React108.useState("home");
4399
- const { isTabVisible } = chunkVGU5S37T_js.useToolbarVisibility(props.hiddenActions);
4399
+ const { isTabVisible } = chunkYQ67KAQR_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: chunk5DBKW7F3_js.cn(
4413
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
4688
+ const { t } = chunk73S5EOD3_js.useTranslation();
4689
4689
  const { mode, canUndo, canRedo, onUndo, onRedo, onSetMode, onSaveAsPptx } = props;
4690
4690
  const [menuOpen, setMenuOpen] = React108.useState(false);
4691
- const { isHidden } = chunkVGU5S37T_js.useToolbarVisibility(props.hiddenActions);
4691
+ const { isHidden } = chunkYQ67KAQR_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 } = chunk5DBKW7F3_js.useTranslation();
4738
- const commands = chunkVGU5S37T_js.useChartFormatContext();
4737
+ const { t } = chunk73S5EOD3_js.useTranslation();
4738
+ const commands = chunkYQ67KAQR_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 } = chunkVGU5S37T_js.useToolbarVisibility(hiddenActions);
4769
+ const { isHidden } = chunkYQ67KAQR_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 } = chunk5DBKW7F3_js.useTranslation();
4786
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
4809
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
4895
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
4942
- const viewerOptions = chunkVGU5S37T_js.useViewerOptionsContext();
4941
+ const { t } = chunk73S5EOD3_js.useTranslation();
4942
+ const viewerOptions = chunkYQ67KAQR_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
- chunk5DBKW7F3_js.TOOLBAR_SECTIONS.filter((s) => p.isTabVisible(s.id)).map((s) => {
4950
+ chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
4960
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
4980
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
5001
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
5019
- const collab = chunkVGU5S37T_js.useCollaboration();
5018
+ const { t } = chunk73S5EOD3_js.useTranslation();
5019
+ const collab = chunkYQ67KAQR_js.useCollaboration();
5020
5020
  const isCollaborating = Boolean(collab && collab.status === "connected");
5021
- const { isHidden } = chunkVGU5S37T_js.useToolbarVisibility(p.hiddenActions);
5021
+ const { isHidden } = chunkYQ67KAQR_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 } = chunk5DBKW7F3_js.useTranslation();
5076
- const options = chunkVGU5S37T_js.useViewerOptionsContext();
5075
+ const { t } = chunk73S5EOD3_js.useTranslation();
5076
+ const options = chunkYQ67KAQR_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 } = chunk5DBKW7F3_js.useTranslation();
5141
+ const { t } = chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
5196
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
5235
+ const { t } = chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
5244
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
5257
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
5385
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
5423
+ const { t } = chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
5460
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
5498
+ const { t } = chunk73S5EOD3_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 = chunkVGU5S37T_js.useCollaboration();
5507
+ const collab = chunkYQ67KAQR_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: chunk5DBKW7F3_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
5527
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
5588
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(qab, p.isAiPanelOpen ? "text-primary" : "text-muted-foreground"),
5599
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(qab, "text-muted-foreground"),
5610
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
5654
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
5674
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
5808
- const { isTabVisible } = chunkVGU5S37T_js.useToolbarVisibility(p.hiddenActions);
5809
- const viewerOptions = chunkVGU5S37T_js.useViewerOptionsContext();
5807
+ const { t } = chunk73S5EOD3_js.useTranslation();
5808
+ const { isTabVisible } = chunkYQ67KAQR_js.useToolbarVisibility(p.hiddenActions);
5809
+ const viewerOptions = chunkYQ67KAQR_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: chunk5DBKW7F3_js.cn(
5907
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
5933
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
6123
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
6335
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation(), half = pptx.COMMENT_MARKER_SIZE / 2, markers = pptx.buildCommentMarkers(
6506
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
6550
+ const { t } = chunk73S5EOD3_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 ? chunkVGU5S37T_js.renderStrokeView(liveStrokeView, true, void 0, "ink-live-preview") : isStrokeActive && liveStrokeD && /* @__PURE__ */ jsxRuntime.jsx(
6786
+ children: isStrokeActive && liveStrokeView ? chunkYQ67KAQR_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 = chunk5DBKW7F3_js.GRID_SIZE, visible }) {
6801
+ function GridOverlay({ canvasSize, gridSpacingPx = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
6829
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
6943
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
6989
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
7145
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
7288
+ const { t } = chunk73S5EOD3_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 = chunkVGU5S37T_js.imgSrc(element);
7336
+ const src = chunkYQ67KAQR_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__ */ chunkVGU5S37T_js.withDisplayName(
7512
+ var HorizontalRuler = /* @__PURE__ */ chunkYQ67KAQR_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__ */ chunkVGU5S37T_js.withDisplayName(
7586
+ var VerticalRuler = /* @__PURE__ */ chunkYQ67KAQR_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, 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`,
7753
+ width: Math.max(element.width, chunk73S5EOD3_js.MIN_ELEMENT_SIZE),
7754
+ height: Math.max(element.height, chunk73S5EOD3_js.MIN_ELEMENT_SIZE),
7755
+ ["--pptx-selection-width"]: `${Math.max(element.width, chunk73S5EOD3_js.MIN_ELEMENT_SIZE)}px`,
7756
+ ["--pptx-selection-height"]: `${Math.max(element.height, chunk73S5EOD3_js.MIN_ELEMENT_SIZE)}px`,
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: chunk5DBKW7F3_js.getElementTransform(element),
7768
+ transform: chunk73S5EOD3_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
- chunkVGU5S37T_js.ResizeHandles,
7780
+ chunkYQ67KAQR_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: chunk5DBKW7F3_js.getElementTransformWithoutRotation(element),
7787
+ nonRotationTransform: chunk73S5EOD3_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(chunkVGU5S37T_js.InlineCollaborationContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(SlideCanvasContent, { ...props }) });
8491
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_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(chunkVGU5S37T_js.SlideBackgroundImageLayer, { slide: activeSlide }),
8764
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_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
- chunkVGU5S37T_js.ElementRenderer,
8776
+ chunkYQ67KAQR_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 ? chunk5DBKW7F3_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8799
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunk73S5EOD3_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
- chunkVGU5S37T_js.ElementRenderer,
8821
+ chunkYQ67KAQR_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 ? chunk5DBKW7F3_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8844
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunk73S5EOD3_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
- chunkVGU5S37T_js.ElementRenderer,
8888
+ chunkYQ67KAQR_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) && !chunk5DBKW7F3_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
8923
+ selectedElement && selectedElement.id !== cropElement?.id && pptx.shouldShowElementHandles(isEditableCanvas, true, selectedElementIdSet.size) && !chunk73S5EOD3_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
8924
8924
  SelectionHandleOverlay,
8925
8925
  {
8926
8926
  element: selectedElement,
8927
- adjustmentHandles: chunk5DBKW7F3_js.getShapeAdjustmentHandleDescriptors(selectedElement),
8927
+ adjustmentHandles: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
9034
+ const { t } = chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
9041
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
9064
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
9073
+ const { t } = chunk73S5EOD3_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: chunk5DBKW7F3_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: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
9117
+ const { t } = chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
9155
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
9162
+ className: chunk73S5EOD3_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: chunk5DBKW7F3_js.cn(
9181
+ className: chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
9209
+ const { t } = chunk73S5EOD3_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 } = chunk5DBKW7F3_js.useTranslation();
9217
+ const { t } = chunk73S5EOD3_js.useTranslation();
9218
9218
  const ref = React108.useRef(null);
9219
9219
  React108.useEffect(() => {
9220
9220
  const host = ref.current;
@@ -9295,7 +9295,7 @@ function ResizeHandle({
9295
9295
  {
9296
9296
  role: "separator",
9297
9297
  "aria-orientation": direction,
9298
- className: chunk5DBKW7F3_js.cn(
9298
+ className: chunk73S5EOD3_js.cn(
9299
9299
  // Outer container: generous hit area for easy clicking.
9300
9300
  // The visible indicator is rendered via the inner pseudo-element (::after).
9301
9301
  "relative flex-shrink-0 z-20 group",
@@ -9306,7 +9306,7 @@ function ResizeHandle({
9306
9306
  children: /* @__PURE__ */ jsxRuntime.jsx(
9307
9307
  "div",
9308
9308
  {
9309
- className: chunk5DBKW7F3_js.cn(
9309
+ className: chunk73S5EOD3_js.cn(
9310
9310
  "absolute transition-colors",
9311
9311
  direction === "horizontal" ? "top-0 bottom-0 left-1/2 -translate-x-1/2 w-0.5 group-hover:w-1 group-hover:bg-primary/40 group-active:w-1 group-active:bg-primary/60" : "left-0 right-0 top-1/2 -translate-y-1/2 h-0.5 group-hover:h-1 group-hover:bg-primary/40 group-active:h-1 group-active:bg-primary/60"
9312
9312
  )
@@ -9395,10 +9395,10 @@ function contextMenuHandlers(props, shapeFormat = null) {
9395
9395
  }
9396
9396
  function ContextMenu(props) {
9397
9397
  const { contextMenuState, mode, onClose } = props;
9398
- const { t } = chunk5DBKW7F3_js.useTranslation();
9398
+ const { t } = chunk73S5EOD3_js.useTranslation();
9399
9399
  const customization = useViewerCustomizationContext();
9400
9400
  const shapeFormat = useShapeFormatContext();
9401
- const chartFormat = chunkVGU5S37T_js.useChartFormatContext();
9401
+ const chartFormat = chunkYQ67KAQR_js.useChartFormatContext();
9402
9402
  const open = Boolean(contextMenuState) && mode === "edit";
9403
9403
  const handlers = {
9404
9404
  ...contextMenuHandlers(props, shapeFormat),
@@ -9474,7 +9474,7 @@ function canvasContextMenuHandlers(props) {
9474
9474
  }
9475
9475
  function CanvasContextMenu(props) {
9476
9476
  const { canvasContextMenuState, mode, onClose } = props;
9477
- const { t } = chunk5DBKW7F3_js.useTranslation();
9477
+ const { t } = chunk73S5EOD3_js.useTranslation();
9478
9478
  const customization = useViewerCustomizationContext();
9479
9479
  const open = Boolean(canvasContextMenuState) && mode === "edit";
9480
9480
  const handlers = canvasContextMenuHandlers(props);
@@ -9537,7 +9537,7 @@ function FindReplacePanel({
9537
9537
  onReplaceAll,
9538
9538
  onClose
9539
9539
  }) {
9540
- const { t } = chunk5DBKW7F3_js.useTranslation();
9540
+ const { t } = chunk73S5EOD3_js.useTranslation();
9541
9541
  const searchInputRef = React108.useRef(null);
9542
9542
  React108.useEffect(() => {
9543
9543
  searchInputRef.current?.focus();
@@ -9728,7 +9728,7 @@ function HandoutMasterPanel({
9728
9728
  onSlidesPerPageChange,
9729
9729
  onBackgroundChange
9730
9730
  }) {
9731
- const { t } = chunk5DBKW7F3_js.useTranslation();
9731
+ const { t } = chunk73S5EOD3_js.useTranslation();
9732
9732
  if (!handoutMaster) {
9733
9733
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-4 text-center text-xs text-muted-foreground", children: t("pptx.master.noHandoutMaster") });
9734
9734
  }
@@ -9740,7 +9740,7 @@ function HandoutMasterPanel({
9740
9740
  {
9741
9741
  type: "button",
9742
9742
  "aria-pressed": slidesPerPage === count,
9743
- className: chunk5DBKW7F3_js.cn(
9743
+ className: chunk73S5EOD3_js.cn(
9744
9744
  "px-2 py-1.5 rounded text-[11px] font-medium transition-colors",
9745
9745
  slidesPerPage === count ? "bg-primary text-white" : "bg-accent/50 text-muted-foreground hover:bg-accent/70 hover:text-foreground"
9746
9746
  ),
@@ -9783,7 +9783,7 @@ function NotesMasterPanel({
9783
9783
  notesMaster,
9784
9784
  onBackgroundChange
9785
9785
  }) {
9786
- const { t } = chunk5DBKW7F3_js.useTranslation();
9786
+ const { t } = chunk73S5EOD3_js.useTranslation();
9787
9787
  const placeholderLabels = React108.useMemo(() => {
9788
9788
  if (!notesMaster?.placeholders) {
9789
9789
  return [];
@@ -9845,7 +9845,7 @@ function SlideMastersList({
9845
9845
  React108.useEffect(() => {
9846
9846
  activeRef.current?.scrollIntoView({ behavior: "smooth", block: "nearest" });
9847
9847
  }, [activeMasterIndex, activeLayoutIndex]);
9848
- const { t } = chunk5DBKW7F3_js.useTranslation();
9848
+ const { t } = chunk73S5EOD3_js.useTranslation();
9849
9849
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9850
9850
  slideMasters.map((master, masterIdx) => {
9851
9851
  const isMasterActive = masterIdx === activeMasterIndex && activeLayoutIndex === null;
@@ -9858,7 +9858,7 @@ function SlideMastersList({
9858
9858
  ref: isMasterActive ? activeRef : void 0,
9859
9859
  "aria-pressed": isMasterActive,
9860
9860
  "aria-label": master.name || t("pptx.master.master"),
9861
- className: chunk5DBKW7F3_js.cn(
9861
+ className: chunk73S5EOD3_js.cn(
9862
9862
  "group relative block w-full cursor-pointer rounded-lg border-2 p-1 text-left transition-all",
9863
9863
  isMasterActive ? "border-amber-500 bg-amber-500/10" : "border-border bg-background/40 hover:border-border"
9864
9864
  ),
@@ -9875,7 +9875,7 @@ function SlideMastersList({
9875
9875
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 px-1", children: /* @__PURE__ */ jsxRuntime.jsx(
9876
9876
  "span",
9877
9877
  {
9878
- className: chunk5DBKW7F3_js.cn(
9878
+ className: chunk73S5EOD3_js.cn(
9879
9879
  "text-[10px] font-medium",
9880
9880
  isMasterActive ? "text-amber-400" : "text-muted-foreground"
9881
9881
  ),
@@ -9894,7 +9894,7 @@ function SlideMastersList({
9894
9894
  ref: isLayoutActive ? activeRef : void 0,
9895
9895
  "aria-pressed": isLayoutActive,
9896
9896
  "aria-label": layout.name || t("pptx.master.layout"),
9897
- className: chunk5DBKW7F3_js.cn(
9897
+ className: chunk73S5EOD3_js.cn(
9898
9898
  "group relative block w-full cursor-pointer rounded-md border-2 p-0.5 text-left transition-all",
9899
9899
  isLayoutActive ? "border-primary bg-primary/10" : "border-border bg-background/40 hover:border-border"
9900
9900
  ),
@@ -9911,7 +9911,7 @@ function SlideMastersList({
9911
9911
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 px-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
9912
9912
  "span",
9913
9913
  {
9914
- className: chunk5DBKW7F3_js.cn(
9914
+ className: chunk73S5EOD3_js.cn(
9915
9915
  "text-[9px]",
9916
9916
  isLayoutActive ? "text-primary" : "text-muted-foreground"
9917
9917
  ),
@@ -9955,7 +9955,7 @@ function MasterViewSidebar({
9955
9955
  onSlidesBackgroundChange
9956
9956
  }) {
9957
9957
  const scrollRef = React108.useRef(null);
9958
- const { t } = chunk5DBKW7F3_js.useTranslation();
9958
+ const { t } = chunk73S5EOD3_js.useTranslation();
9959
9959
  const slidesBackground = pptx.masterViewBackgroundColor(
9960
9960
  { slideMasters },
9961
9961
  { tab: "slides", masterIndex: activeMasterIndex, layoutIndex: activeLayoutIndex }
@@ -10003,7 +10003,7 @@ function MasterViewSidebar({
10003
10003
  type: "button",
10004
10004
  role: "tab",
10005
10005
  "aria-selected": masterViewTab === tab.key,
10006
- className: chunk5DBKW7F3_js.cn(
10006
+ className: chunk73S5EOD3_js.cn(
10007
10007
  "flex-1 px-1 py-1.5 text-[10px] font-medium transition-colors border-b-2",
10008
10008
  masterViewTab === tab.key ? "border-amber-500 text-amber-400" : "border-transparent text-muted-foreground hover:text-foreground"
10009
10009
  ),
@@ -10105,7 +10105,7 @@ function NotesMasterCanvas({
10105
10105
  notesText,
10106
10106
  slideNumber
10107
10107
  }) {
10108
- const { t } = chunk5DBKW7F3_js.useTranslation();
10108
+ const { t } = chunk73S5EOD3_js.useTranslation();
10109
10109
  const pageWidth = notesCanvasSize?.width ?? DEFAULT_NOTES_WIDTH;
10110
10110
  const pageHeight = notesCanvasSize?.height ?? DEFAULT_NOTES_HEIGHT;
10111
10111
  const scale = React108.useMemo(() => {
@@ -10365,7 +10365,7 @@ function HandoutMasterCanvas({
10365
10365
  slideThumbnails,
10366
10366
  pageNumber
10367
10367
  }) {
10368
- const { t } = chunk5DBKW7F3_js.useTranslation();
10368
+ const { t } = chunk73S5EOD3_js.useTranslation();
10369
10369
  const slideAspect = 4 / 3;
10370
10370
  const scale = React108.useMemo(() => {
10371
10371
  const scaleX = canvasSize.width / PAGE_WIDTH;
@@ -10506,7 +10506,7 @@ function SectionBlock({
10506
10506
  /* @__PURE__ */ jsxRuntime.jsx(
10507
10507
  lu.LuChevronDown,
10508
10508
  {
10509
- className: chunk5DBKW7F3_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10509
+ className: chunk73S5EOD3_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10510
10510
  }
10511
10511
  ),
10512
10512
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-left", children: section.label }),
@@ -10550,12 +10550,12 @@ function SlideCardImpl({
10550
10550
  onDragLeave,
10551
10551
  onDrop
10552
10552
  }) {
10553
- const { t } = chunk5DBKW7F3_js.useTranslation();
10553
+ const { t } = chunk73S5EOD3_js.useTranslation();
10554
10554
  const cue = pptx.hiddenSlideCue(slide.hidden, "sorter", index);
10555
10555
  return /* @__PURE__ */ jsxRuntime.jsxs(
10556
10556
  "div",
10557
10557
  {
10558
- className: chunk5DBKW7F3_js.cn(
10558
+ className: chunk73S5EOD3_js.cn(
10559
10559
  "group relative cursor-pointer rounded-lg border-2 p-1 transition-all",
10560
10560
  isDragTarget ? "border-primary bg-primary/20" : isSelected ? "border-primary bg-primary/10 ring-1 ring-primary/50" : isActive ? "border-primary/50 bg-primary/5" : "border-border bg-background/50 hover:border-border",
10561
10561
  slide.hidden && "opacity-40"
@@ -10578,7 +10578,7 @@ function SlideCardImpl({
10578
10578
  /* @__PURE__ */ jsxRuntime.jsx(
10579
10579
  "span",
10580
10580
  {
10581
- className: chunk5DBKW7F3_js.cn(
10581
+ className: chunk73S5EOD3_js.cn(
10582
10582
  "text-[11px] font-medium px-0.5",
10583
10583
  isSelected ? "text-primary" : isActive ? "text-primary/70" : "text-muted-foreground"
10584
10584
  ),
@@ -10656,7 +10656,7 @@ function SorterContextMenu({
10656
10656
  onToggleHide,
10657
10657
  onClose
10658
10658
  }) {
10659
- const { t } = chunk5DBKW7F3_js.useTranslation();
10659
+ const { t } = chunk73S5EOD3_js.useTranslation();
10660
10660
  const menuX = Math.max(8, Math.min(x, window.innerWidth - 220));
10661
10661
  const menuY = Math.max(8, Math.min(y, window.innerHeight - 300));
10662
10662
  const entries = pptx.buildSlideSorterContextMenuEntries({
@@ -11011,7 +11011,7 @@ function SlideSorterOverlay({
11011
11011
  onToggleHideSlides,
11012
11012
  onClose
11013
11013
  }) {
11014
- const { t } = chunk5DBKW7F3_js.useTranslation();
11014
+ const { t } = chunk73S5EOD3_js.useTranslation();
11015
11015
  const state = useSlideSorterState({
11016
11016
  slides,
11017
11017
  templateElementsBySlideId,
@@ -11257,7 +11257,7 @@ function OutlineViewOverlay({
11257
11257
  bumpHistory,
11258
11258
  onClose
11259
11259
  }) {
11260
- const { t } = chunk5DBKW7F3_js.useTranslation();
11260
+ const { t } = chunk73S5EOD3_js.useTranslation();
11261
11261
  const { rows, containerRef, run, onRowKeyDown } = useOutlineView({
11262
11262
  slides,
11263
11263
  canvasSize,
@@ -11348,7 +11348,7 @@ function ReadingViewStage({
11348
11348
  "div",
11349
11349
  {
11350
11350
  className: "absolute inset-0",
11351
- style: { backgroundColor: chunk5DBKW7F3_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
11351
+ style: { backgroundColor: chunk73S5EOD3_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
11352
11352
  }
11353
11353
  ),
11354
11354
  slide.backgroundImage && /* @__PURE__ */ jsxRuntime.jsx(
@@ -11367,7 +11367,7 @@ function ReadingViewStage({
11367
11367
  className: "absolute left-0 top-0 origin-top-left",
11368
11368
  style: { width, height, transform: `scale(${scale})`, ...pptx.deviceStrokeStageStyle(scale) },
11369
11369
  children: elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
11370
- chunkVGU5S37T_js.StaticElementRenderer,
11370
+ chunkYQ67KAQR_js.StaticElementRenderer,
11371
11371
  {
11372
11372
  element,
11373
11373
  activeSlide: slide,
@@ -11448,7 +11448,7 @@ function ReadingViewOverlay({
11448
11448
  activeSlideIndex,
11449
11449
  onExit
11450
11450
  }) {
11451
- const { t } = chunk5DBKW7F3_js.useTranslation();
11451
+ const { t } = chunk73S5EOD3_js.useTranslation();
11452
11452
  const { state, viewportRef, scale, run } = useReadingView({
11453
11453
  slideCount: slides.length,
11454
11454
  canvasSize,
@@ -11579,7 +11579,7 @@ function renderRichNotesSegments(segments) {
11579
11579
  if (segment.style.fontFamily) {
11580
11580
  style.fontFamily = segment.style.fontFamily;
11581
11581
  }
11582
- if (segment.style.hyperlink && chunk5DBKW7F3_js.isUrlSafe(segment.style.hyperlink)) {
11582
+ if (segment.style.hyperlink && chunk73S5EOD3_js.isUrlSafe(segment.style.hyperlink)) {
11583
11583
  const safeHref = segment.style.hyperlink;
11584
11584
  style.color = "#4a9eff";
11585
11585
  style.textDecoration = "underline";
@@ -11592,7 +11592,7 @@ function renderRichNotesSegments(segments) {
11592
11592
  style,
11593
11593
  onClick: (e) => {
11594
11594
  e.preventDefault();
11595
- chunk5DBKW7F3_js.safeOpenUrl(safeHref);
11595
+ chunk73S5EOD3_js.safeOpenUrl(safeHref);
11596
11596
  },
11597
11597
  children: segment.text
11598
11598
  },
@@ -11616,7 +11616,7 @@ function NotesPrintDialog({
11616
11616
  onClose,
11617
11617
  notesStyle
11618
11618
  }) {
11619
- const { t } = chunk5DBKW7F3_js.useTranslation();
11619
+ const { t } = chunk73S5EOD3_js.useTranslation();
11620
11620
  const printFrameRef = React108.useRef(null);
11621
11621
  const handlePrint = React108.useCallback(() => {
11622
11622
  const iframe = printFrameRef.current;
@@ -11674,7 +11674,7 @@ function NotesPrintDialog({
11674
11674
  ] }) });
11675
11675
  }
11676
11676
  function NotesToolbar(p) {
11677
- const { t } = chunk5DBKW7F3_js.useTranslation();
11677
+ const { t } = chunk73S5EOD3_js.useTranslation();
11678
11678
  const ref = React108.useRef(null);
11679
11679
  React108.useEffect(() => {
11680
11680
  const host = ref.current;
@@ -11941,7 +11941,7 @@ function useSlideNotes({
11941
11941
  const href = target.getAttribute("data-hyperlink") || target.getAttribute("href");
11942
11942
  if (href && (e.ctrlKey || e.metaKey)) {
11943
11943
  e.preventDefault();
11944
- chunk5DBKW7F3_js.safeOpenUrl(href);
11944
+ chunk73S5EOD3_js.safeOpenUrl(href);
11945
11945
  }
11946
11946
  }, []);
11947
11947
  return {
@@ -11978,7 +11978,7 @@ function SlideNotesPanel({
11978
11978
  notesStyle,
11979
11979
  onHeightChange
11980
11980
  }) {
11981
- const { t } = chunk5DBKW7F3_js.useTranslation();
11981
+ const { t } = chunk73S5EOD3_js.useTranslation();
11982
11982
  const rootRef = React108__default.default.useRef(null);
11983
11983
  React108__default.default.useEffect(() => {
11984
11984
  const el = rootRef.current;
@@ -12022,7 +12022,7 @@ function SlideNotesPanel({
12022
12022
  });
12023
12023
  const hasNotes = draft.trim().length > 0;
12024
12024
  const slideLabel = activeSlide ? t("pptx.notes.slideN", { n: activeSlide.slideNumber }) : t("pptx.notes.noSlide");
12025
- const { dragY, handlers: dragHandlers } = chunkVGU5S37T_js.useSheetDismissDrag(onToggle);
12025
+ const { dragY, handlers: dragHandlers } = chunkYQ67KAQR_js.useSheetDismissDrag(onToggle);
12026
12026
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
12027
12027
  isExpanded && /* @__PURE__ */ jsxRuntime.jsx(
12028
12028
  "button",
@@ -12038,7 +12038,7 @@ function SlideNotesPanel({
12038
12038
  {
12039
12039
  ref: rootRef,
12040
12040
  "data-pptx-chrome": "notes",
12041
- className: chunk5DBKW7F3_js.cn(
12041
+ className: chunk73S5EOD3_js.cn(
12042
12042
  "flex flex-col border-t border-border/60 bg-background select-none",
12043
12043
  // On mobile, hide the entire notes strip when collapsed: the
12044
12044
  // MobileBottomBar's Notes button is the entry point instead.
@@ -12222,7 +12222,7 @@ function VersionHistoryPanel({
12222
12222
  onClose,
12223
12223
  onRestore
12224
12224
  }) {
12225
- const { t } = chunk5DBKW7F3_js.useTranslation();
12225
+ const { t } = chunk73S5EOD3_js.useTranslation();
12226
12226
  const [versions, setVersions] = React108.useState([]);
12227
12227
  const [loading, setLoading] = React108.useState(false);
12228
12228
  const [restoringKey, setRestoringKey] = React108.useState(null);
@@ -12368,7 +12368,7 @@ function SlideDiffRow({
12368
12368
  onAccept,
12369
12369
  onReject
12370
12370
  }) {
12371
- const { t } = chunk5DBKW7F3_js.useTranslation();
12371
+ const { t } = chunk73S5EOD3_js.useTranslation();
12372
12372
  const [expanded, setExpanded] = React108.useState(diff.status === "changed");
12373
12373
  const statusLabel = (() => {
12374
12374
  switch (diff.status) {
@@ -12402,7 +12402,7 @@ function SlideDiffRow({
12402
12402
  return /* @__PURE__ */ jsxRuntime.jsxs(
12403
12403
  "div",
12404
12404
  {
12405
- className: chunk5DBKW7F3_js.cn(
12405
+ className: chunk73S5EOD3_js.cn(
12406
12406
  "rounded-lg border transition-colors",
12407
12407
  isResolved ? "border-border/60 bg-card/40 opacity-60" : "border-border bg-background/70"
12408
12408
  ),
@@ -12416,7 +12416,7 @@ function SlideDiffRow({
12416
12416
  children: [
12417
12417
  expanded ? /* @__PURE__ */ jsxRuntime.jsx(lu.LuChevronDown, { className: "w-3.5 h-3.5 text-muted-foreground flex-shrink-0" }) : /* @__PURE__ */ jsxRuntime.jsx(lu.LuChevronRight, { className: "w-3.5 h-3.5 text-muted-foreground flex-shrink-0" }),
12418
12418
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-foreground", children: t("pptx.compare.slideNumber", { number: slideNumber }) }),
12419
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunk5DBKW7F3_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
12419
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunk73S5EOD3_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
12420
12420
  diff.changes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-muted-foreground", children: [
12421
12421
  diff.changes.length,
12422
12422
  " ",
@@ -12426,7 +12426,7 @@ function SlideDiffRow({
12426
12426
  isResolved && /* @__PURE__ */ jsxRuntime.jsx(
12427
12427
  "span",
12428
12428
  {
12429
- className: chunk5DBKW7F3_js.cn(
12429
+ className: chunk73S5EOD3_js.cn(
12430
12430
  "text-[10px] font-medium",
12431
12431
  accepted ? "text-green-400" : "text-muted-foreground"
12432
12432
  ),
@@ -12454,7 +12454,7 @@ function SlideDiffRow({
12454
12454
  /* @__PURE__ */ jsxRuntime.jsx(
12455
12455
  "div",
12456
12456
  {
12457
- className: chunk5DBKW7F3_js.cn(
12457
+ className: chunk73S5EOD3_js.cn(
12458
12458
  "rounded border overflow-hidden",
12459
12459
  diff.status === "added" ? "border-green-700/60" : diff.status === "changed" ? "border-amber-700/60" : "border-border"
12460
12460
  ),
@@ -12521,7 +12521,7 @@ function ComparePanel({
12521
12521
  onRejectSlide,
12522
12522
  onAcceptAll
12523
12523
  }) {
12524
- const { t } = chunk5DBKW7F3_js.useTranslation();
12524
+ const { t } = chunk73S5EOD3_js.useTranslation();
12525
12525
  const [accepted, setAccepted] = React108.useState({});
12526
12526
  const [rejected, setRejected] = React108.useState({});
12527
12527
  const handleAccept = React108.useCallback(
@@ -12650,7 +12650,7 @@ function PasswordProtectionDialog({
12650
12650
  onSetPassword,
12651
12651
  onRemovePassword
12652
12652
  }) {
12653
- const { t } = chunk5DBKW7F3_js.useTranslation();
12653
+ const { t } = chunk73S5EOD3_js.useTranslation();
12654
12654
  const [password, setPassword] = React108.useState("");
12655
12655
  const [confirmPassword, setConfirmPassword] = React108.useState("");
12656
12656
  const [showPassword, setShowPassword] = React108.useState(false);
@@ -12866,7 +12866,7 @@ function DocumentPropertiesCustomTab({
12866
12866
  customProperties,
12867
12867
  onUpdate
12868
12868
  }) {
12869
- const { t } = chunk5DBKW7F3_js.useTranslation();
12869
+ const { t } = chunk73S5EOD3_js.useTranslation();
12870
12870
  const handleAdd = React108.useCallback(() => {
12871
12871
  onUpdate([...customProperties, { name: "", value: "", type: "lpwstr" }]);
12872
12872
  }, [customProperties, onUpdate]);
@@ -13068,7 +13068,7 @@ function DocumentPropertiesStatisticsTab({
13068
13068
  onUpdateAppProperties,
13069
13069
  canEdit
13070
13070
  }) {
13071
- const { t } = chunk5DBKW7F3_js.useTranslation();
13071
+ const { t } = chunk73S5EOD3_js.useTranslation();
13072
13072
  const handleEditableChange = React108.useCallback(
13073
13073
  (key, value) => {
13074
13074
  onUpdateAppProperties({ [key]: value });
@@ -13108,7 +13108,7 @@ function DocumentPropertiesDialog({
13108
13108
  onClose,
13109
13109
  onSave
13110
13110
  }) {
13111
- const { t } = chunk5DBKW7F3_js.useTranslation();
13111
+ const { t } = chunk73S5EOD3_js.useTranslation();
13112
13112
  const [activeTab, setActiveTab] = React108.useState("summary");
13113
13113
  const [draftCore, setDraftCore] = React108.useState({});
13114
13114
  const [draftCustom, setDraftCustom] = React108.useState([]);
@@ -13159,7 +13159,7 @@ function DocumentPropertiesDialog({
13159
13159
  const handleClose = React108.useCallback(() => {
13160
13160
  onClose();
13161
13161
  }, [onClose]);
13162
- const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(handleClose);
13162
+ const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(handleClose);
13163
13163
  if (!isOpen) {
13164
13164
  return null;
13165
13165
  }
@@ -13296,7 +13296,7 @@ function FontEmbeddingPanel({
13296
13296
  onClose,
13297
13297
  onToggleEmbedFonts
13298
13298
  }) {
13299
- const { t } = chunk5DBKW7F3_js.useTranslation();
13299
+ const { t } = chunk73S5EOD3_js.useTranslation();
13300
13300
  const [availableFamilies, setAvailableFamilies] = React108.useState(/* @__PURE__ */ new Set());
13301
13301
  const [scanning, setScanning] = React108.useState(false);
13302
13302
  const [scanned, setScanned] = React108.useState(false);
@@ -13424,7 +13424,7 @@ function DigitalSignaturesDialog({
13424
13424
  hasSignatures,
13425
13425
  signatureCount
13426
13426
  }) {
13427
- const { t } = chunk5DBKW7F3_js.useTranslation();
13427
+ const { t } = chunk73S5EOD3_js.useTranslation();
13428
13428
  if (!isOpen) {
13429
13429
  return null;
13430
13430
  }
@@ -13496,7 +13496,7 @@ function SignatureStatusBadge({
13496
13496
  signatureCount,
13497
13497
  onClick
13498
13498
  }) {
13499
- const { t } = chunk5DBKW7F3_js.useTranslation();
13499
+ const { t } = chunk73S5EOD3_js.useTranslation();
13500
13500
  if (!hasSignatures || signatureCount === 0) {
13501
13501
  return null;
13502
13502
  }
@@ -13522,7 +13522,7 @@ function SignatureStrippedDialog({
13522
13522
  onConfirm,
13523
13523
  onCancel
13524
13524
  }) {
13525
- const { t } = chunk5DBKW7F3_js.useTranslation();
13525
+ const { t } = chunk73S5EOD3_js.useTranslation();
13526
13526
  if (!isOpen) {
13527
13527
  return null;
13528
13528
  }
@@ -13591,7 +13591,7 @@ function EncryptedFileDialog({
13591
13591
  isOpen,
13592
13592
  onClose
13593
13593
  }) {
13594
- const { t } = chunk5DBKW7F3_js.useTranslation();
13594
+ const { t } = chunk73S5EOD3_js.useTranslation();
13595
13595
  if (!isOpen) {
13596
13596
  return null;
13597
13597
  }
@@ -13738,7 +13738,7 @@ function PresentationAudienceEffects({ snapshot }) {
13738
13738
  ] });
13739
13739
  }
13740
13740
  function PresentationEndOverlay({ onExit }) {
13741
- const { t } = chunk5DBKW7F3_js.useTranslation();
13741
+ const { t } = chunk73S5EOD3_js.useTranslation();
13742
13742
  return /* @__PURE__ */ jsxRuntime.jsx(
13743
13743
  "button",
13744
13744
  {
@@ -13754,9 +13754,9 @@ function PresentationSubtitleBar({
13754
13754
  visible,
13755
13755
  onCaptionChange
13756
13756
  }) {
13757
- const { t } = chunk5DBKW7F3_js.useTranslation();
13757
+ const { t } = chunk73S5EOD3_js.useTranslation();
13758
13758
  const language = pptx.subtitleRecognitionLanguage(
13759
- pptx.subtitleSettingsFromOptions(chunkVGU5S37T_js.useViewerOptionsContext()),
13759
+ pptx.subtitleSettingsFromOptions(chunkYQ67KAQR_js.useViewerOptionsContext()),
13760
13760
  typeof navigator === "undefined" ? "en-US" : navigator.language
13761
13761
  );
13762
13762
  const [captionText, setCaptionText] = React108.useState("");
@@ -13833,7 +13833,7 @@ function renderNotesSegments(segments) {
13833
13833
  });
13834
13834
  }
13835
13835
  function PresenterConsoleToolbar(p) {
13836
- const { t } = chunk5DBKW7F3_js.useTranslation();
13836
+ const { t } = chunk73S5EOD3_js.useTranslation();
13837
13837
  const ref = useWebControl(
13838
13838
  { ...pptx.presenterConsoleViewState(p.snapshot, p.audienceOpen), translate: t },
13839
13839
  {
@@ -13924,7 +13924,7 @@ function ScaledSlidePreviewImpl({
13924
13924
  {
13925
13925
  className: "absolute inset-0",
13926
13926
  style: {
13927
- backgroundColor: chunk5DBKW7F3_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13927
+ backgroundColor: chunk73S5EOD3_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13928
13928
  }
13929
13929
  }
13930
13930
  ),
@@ -13950,7 +13950,7 @@ function ScaledSlidePreviewImpl({
13950
13950
  ...pptx.deviceStrokeStageStyle(scale)
13951
13951
  },
13952
13952
  children: previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
13953
- chunkVGU5S37T_js.StaticElementRenderer,
13953
+ chunkYQ67KAQR_js.StaticElementRenderer,
13954
13954
  {
13955
13955
  element,
13956
13956
  activeSlide: slide,
@@ -14017,7 +14017,7 @@ function PresenterNotesRail({
14017
14017
  onMove,
14018
14018
  onUpdateNotes
14019
14019
  }) {
14020
- const { t } = chunk5DBKW7F3_js.useTranslation();
14020
+ const { t } = chunk73S5EOD3_js.useTranslation();
14021
14021
  const slide = slides[current];
14022
14022
  const nextSlide = pptx.nextPresentedSlide(slides, current, activeCustomShow, authoredRange);
14023
14023
  const notesText = slide?.notes ?? "";
@@ -14142,7 +14142,7 @@ function PresenterNotesRail({
14142
14142
  ] });
14143
14143
  }
14144
14144
  function PresenterSlideNavigator(props) {
14145
- const { t } = chunk5DBKW7F3_js.useTranslation();
14145
+ const { t } = chunk73S5EOD3_js.useTranslation();
14146
14146
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${pptx.PRESENTER_CONSOLE_CLASSES.navigator} text-foreground`, children: [
14147
14147
  /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "mb-4 flex items-center justify-between border-b border-border pb-4", children: [
14148
14148
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -14284,7 +14284,7 @@ function PresenterView({
14284
14284
  onSwapDisplays,
14285
14285
  onUpdateNotes
14286
14286
  }) {
14287
- const { t } = chunk5DBKW7F3_js.useTranslation();
14287
+ const { t } = chunk73S5EOD3_js.useTranslation();
14288
14288
  const [now, setNow] = React108.useState(Date.now());
14289
14289
  React108.useEffect(() => {
14290
14290
  const interval = window.setInterval(() => setNow(Date.now()), 1e3);
@@ -14441,7 +14441,7 @@ function MobilePresenterView({
14441
14441
  onMovePresentationSlide,
14442
14442
  onExit
14443
14443
  }) {
14444
- const { t } = chunk5DBKW7F3_js.useTranslation();
14444
+ const { t } = chunk73S5EOD3_js.useTranslation();
14445
14445
  const [now, setNow] = React108.useState(Date.now());
14446
14446
  React108.useEffect(() => {
14447
14447
  const interval = window.setInterval(() => setNow(Date.now()), 1e3);
@@ -14554,7 +14554,7 @@ function RehearseTimingsHud({
14554
14554
  paused,
14555
14555
  onTogglePause
14556
14556
  }) {
14557
- const { t } = chunk5DBKW7F3_js.useTranslation();
14557
+ const { t } = chunk73S5EOD3_js.useTranslation();
14558
14558
  const [tick, setTick] = React108.useState(0);
14559
14559
  React108.useEffect(() => {
14560
14560
  if (paused) {
@@ -14602,7 +14602,7 @@ function RehearseTimingsSummary({
14602
14602
  onSave,
14603
14603
  onDiscard
14604
14604
  }) {
14605
- const { t } = chunk5DBKW7F3_js.useTranslation();
14605
+ const { t } = chunk73S5EOD3_js.useTranslation();
14606
14606
  const totalMs = Object.values(recordedTimings).reduce((sum, ms) => sum + ms, 0);
14607
14607
  const sortedEntries = Object.entries(recordedTimings).map(([idx, ms]) => ({ slideIndex: Number(idx), ms })).sort((a, b) => a.slideIndex - b.slideIndex);
14608
14608
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 z-[9999] flex items-center justify-center bg-black/60 backdrop-blur-sm", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full max-w-lg rounded-xl border border-border bg-background shadow-2xl", children: [
@@ -14686,7 +14686,7 @@ function SelectionPane({
14686
14686
  markDirty,
14687
14687
  onClose
14688
14688
  }) {
14689
- const { t } = chunk5DBKW7F3_js.useTranslation();
14689
+ const { t } = chunk73S5EOD3_js.useTranslation();
14690
14690
  const activeSlide = slides[activeSlideIndex];
14691
14691
  const elements = activeSlide?.elements ?? [];
14692
14692
  const [editingId, setEditingId] = React108.useState(null);
@@ -14841,7 +14841,7 @@ function SelectionPane({
14841
14841
  setDragIndex(null);
14842
14842
  setDragOverIndex(null);
14843
14843
  },
14844
- className: chunk5DBKW7F3_js.cn(
14844
+ className: chunk73S5EOD3_js.cn(
14845
14845
  "flex items-center gap-1.5 px-2 py-1 text-xs cursor-pointer transition-colors",
14846
14846
  isSelected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground",
14847
14847
  dragOverIndex === realIndex ? "border-t-2 border-primary" : ""
@@ -14895,13 +14895,13 @@ function SelectionPane({
14895
14895
  }
14896
14896
  var INPUT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14897
14897
  var SELECT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14898
- var ENTRANCE_PRESETS = /* @__PURE__ */ chunk5DBKW7F3_js.ANIMATION_PRESET_OPTIONS.filter(
14898
+ var ENTRANCE_PRESETS = /* @__PURE__ */ chunk73S5EOD3_js.ANIMATION_PRESET_OPTIONS.filter(
14899
14899
  (o) => o.value === "fadeIn" || o.value === "flyIn" || o.value === "zoomIn"
14900
14900
  );
14901
- var EXIT_PRESETS = /* @__PURE__ */ chunk5DBKW7F3_js.ANIMATION_PRESET_OPTIONS.filter(
14901
+ var EXIT_PRESETS = /* @__PURE__ */ chunk73S5EOD3_js.ANIMATION_PRESET_OPTIONS.filter(
14902
14902
  (o) => o.value === "fadeOut" || o.value === "flyOut" || o.value === "zoomOut"
14903
14903
  );
14904
- var EMPHASIS_PRESETS = /* @__PURE__ */ chunk5DBKW7F3_js.ANIMATION_PRESET_OPTIONS.filter(
14904
+ var EMPHASIS_PRESETS = /* @__PURE__ */ chunk73S5EOD3_js.ANIMATION_PRESET_OPTIONS.filter(
14905
14905
  (o) => o.value === "spin" || o.value === "pulse" || o.value === "colorWave" || o.value === "bounce" || o.value === "flash" || o.value === "growShrink" || o.value === "teeter"
14906
14906
  );
14907
14907
  var TIMING_CURVE_OPTIONS = [
@@ -15002,7 +15002,7 @@ function AfterAnimationRow({
15002
15002
  onActionChange,
15003
15003
  onColorChange
15004
15004
  }) {
15005
- const { t } = chunk5DBKW7F3_js.useTranslation();
15005
+ const { t } = chunk73S5EOD3_js.useTranslation();
15006
15006
  const commitRecentColor = useRecentColorCommit();
15007
15007
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
15008
15008
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15053,7 +15053,7 @@ function AnimationTimelineSection({
15053
15053
  canEdit,
15054
15054
  handlers
15055
15055
  }) {
15056
- const { t } = chunk5DBKW7F3_js.useTranslation();
15056
+ const { t } = chunk73S5EOD3_js.useTranslation();
15057
15057
  const effectLabel = (anim) => pptx.animationEffectLabel(anim, (key) => t(key));
15058
15058
  const {
15059
15059
  sortedAnimations,
@@ -15084,7 +15084,7 @@ function AnimationTimelineSection({
15084
15084
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-6 rounded bg-muted/50 border border-border overflow-hidden", children: timelineBarData.map((bar) => /* @__PURE__ */ jsxRuntime.jsx(
15085
15085
  "div",
15086
15086
  {
15087
- className: chunk5DBKW7F3_js.cn(
15087
+ className: chunk73S5EOD3_js.cn(
15088
15088
  "absolute top-0.5 bottom-0.5 rounded-sm transition-colors",
15089
15089
  animationTypeColor(bar.anim),
15090
15090
  bar.anim.elementId === selectedElementId && "ring-1 ring-primary"
@@ -15113,7 +15113,7 @@ function AnimationTimelineSection({
15113
15113
  onDragLeave: handleDragLeave,
15114
15114
  onDrop: (e) => handleDrop(index, e),
15115
15115
  title: t("pptx.animation.nativeEffectHint"),
15116
- className: chunk5DBKW7F3_js.cn(
15116
+ className: chunk73S5EOD3_js.cn(
15117
15117
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] italic",
15118
15118
  "bg-muted/20 text-muted-foreground/70",
15119
15119
  isDragOver && "border-t-2 border-primary"
@@ -15152,7 +15152,7 @@ function AnimationTimelineSection({
15152
15152
  onDragEnd: handleDragEnd,
15153
15153
  onMouseEnter: () => handleAnimationHover(anim),
15154
15154
  onMouseLeave: handleAnimationHoverEnd,
15155
- className: chunk5DBKW7F3_js.cn(
15155
+ className: chunk73S5EOD3_js.cn(
15156
15156
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] cursor-grab transition-colors",
15157
15157
  isSelected ? "bg-primary/30 text-primary" : "bg-muted/50 text-muted-foreground",
15158
15158
  isDragging && "opacity-40",
@@ -15213,7 +15213,7 @@ function BookmarkTriggerRow({
15213
15213
  style,
15214
15214
  onChange
15215
15215
  }) {
15216
- const { t } = chunk5DBKW7F3_js.useTranslation();
15216
+ const { t } = chunk73S5EOD3_js.useTranslation();
15217
15217
  const options = pptx.listMediaBookmarkOptions(elements);
15218
15218
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
15219
15219
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-[11px]", children: t("pptx.animation.trigger.bookmarkLabel") }),
@@ -15246,7 +15246,7 @@ function EffectSoundRow({
15246
15246
  onPick,
15247
15247
  onPickStock
15248
15248
  }) {
15249
- const { t } = chunk5DBKW7F3_js.useTranslation();
15249
+ const { t } = chunk73S5EOD3_js.useTranslation();
15250
15250
  const fileInputRef = React108__default.default.useRef(null);
15251
15251
  const selectedValue = soundState.catalogueId ?? (soundState.hasSound ? CURRENT_VALUE : NONE_VALUE);
15252
15252
  const handleSelectChange = (event) => {
@@ -15284,7 +15284,7 @@ function EffectSoundRow({
15284
15284
  }
15285
15285
  const asset = pptx.getEffectSoundAsset(soundState.catalogueId);
15286
15286
  if (asset) {
15287
- chunkVGU5S37T_js.playAnimationSound(asset.dataUrl);
15287
+ chunkYQ67KAQR_js.playAnimationSound(asset.dataUrl);
15288
15288
  }
15289
15289
  };
15290
15290
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15337,7 +15337,7 @@ function MotionPathRow({
15337
15337
  canEdit,
15338
15338
  onChange
15339
15339
  }) {
15340
- const { t } = chunk5DBKW7F3_js.useTranslation();
15340
+ const { t } = chunk73S5EOD3_js.useTranslation();
15341
15341
  const presetId = pptx.motionPathPresetIdForPath(motionPath);
15342
15342
  const isCustom = Boolean(motionPath) && !presetId;
15343
15343
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15459,7 +15459,7 @@ function useAnimationPreview({
15459
15459
  }) {
15460
15460
  const handleAnimationHover = React108.useCallback((anim) => {
15461
15461
  if (anim.motionPath) {
15462
- chunk5DBKW7F3_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
15462
+ chunk73S5EOD3_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
15463
15463
  durationMs: anim.durationMs,
15464
15464
  delayMs: anim.delayMs,
15465
15465
  timingCurve: anim.timingCurve
@@ -15470,19 +15470,19 @@ function useAnimationPreview({
15470
15470
  if (!preset || preset === "none") {
15471
15471
  return;
15472
15472
  }
15473
- chunk5DBKW7F3_js.startPreviewAnimation(anim.elementId, preset, {
15473
+ chunk73S5EOD3_js.startPreviewAnimation(anim.elementId, preset, {
15474
15474
  direction: anim.direction,
15475
15475
  durationMs: anim.durationMs ?? 500,
15476
15476
  timingCurve: anim.timingCurve
15477
15477
  });
15478
15478
  }, []);
15479
- const handleAnimationHoverEnd = React108.useCallback(() => chunk5DBKW7F3_js.stopPreviewAnimation(), []);
15479
+ const handleAnimationHoverEnd = React108.useCallback(() => chunk73S5EOD3_js.stopPreviewAnimation(), []);
15480
15480
  const handlePreviewClick = React108.useCallback(() => {
15481
15481
  if (!selectedElementAnimation) {
15482
15482
  return;
15483
15483
  }
15484
15484
  if (selectedElementAnimation.motionPath) {
15485
- chunk5DBKW7F3_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
15485
+ chunk73S5EOD3_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
15486
15486
  durationMs: selectedElementAnimation.durationMs,
15487
15487
  delayMs: selectedElementAnimation.delayMs,
15488
15488
  timingCurve: selectedElementAnimation.timingCurve
@@ -15493,7 +15493,7 @@ function useAnimationPreview({
15493
15493
  if (!preset || preset === "none") {
15494
15494
  return;
15495
15495
  }
15496
- chunk5DBKW7F3_js.startPreviewAnimation(selectedElementId, preset, {
15496
+ chunk73S5EOD3_js.startPreviewAnimation(selectedElementId, preset, {
15497
15497
  direction: selectedElementAnimation.direction,
15498
15498
  durationMs: selectedElementAnimation.durationMs ?? 500,
15499
15499
  timingCurve: selectedElementAnimation.timingCurve
@@ -15728,7 +15728,7 @@ function useAnimationHandlers({
15728
15728
  return anim.elementId.slice(0, 8);
15729
15729
  }
15730
15730
  const text = pptx$1.hasTextProperties(el) ? el.text : void 0;
15731
- return text || chunk5DBKW7F3_js.getElementLabel(el);
15731
+ return text || chunk73S5EOD3_js.getElementLabel(el);
15732
15732
  },
15733
15733
  [activeSlide.elements]
15734
15734
  );
@@ -15739,7 +15739,7 @@ function useAnimationHandlers({
15739
15739
  return id.slice(0, 8);
15740
15740
  }
15741
15741
  const text = pptx$1.hasTextProperties(el) ? el.text : void 0;
15742
- return text || chunk5DBKW7F3_js.getElementLabel(el);
15742
+ return text || chunk73S5EOD3_js.getElementLabel(el);
15743
15743
  }).join(", "),
15744
15744
  [activeSlide.elements]
15745
15745
  );
@@ -15795,8 +15795,8 @@ function AnimationPanel({
15795
15795
  canEdit,
15796
15796
  onUpdateSlide
15797
15797
  }) {
15798
- const { t } = chunk5DBKW7F3_js.useTranslation();
15799
- const { viewportWidth } = chunkVGU5S37T_js.useIsMobile();
15798
+ const { t } = chunk73S5EOD3_js.useTranslation();
15799
+ const { viewportWidth } = chunkYQ67KAQR_js.useIsMobile();
15800
15800
  const directionBtnPx = Math.max(28, pptx.getDensePanelTouchTargetPx(viewportWidth));
15801
15801
  const fieldStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
15802
15802
  const handlers = useAnimationHandlers({
@@ -15924,7 +15924,7 @@ function AnimationPanel({
15924
15924
  type: "button",
15925
15925
  disabled: !canEdit,
15926
15926
  style: { minWidth: directionBtnPx, minHeight: directionBtnPx },
15927
- className: chunk5DBKW7F3_js.cn(
15927
+ className: chunk73S5EOD3_js.cn(
15928
15928
  "flex items-center justify-center rounded border transition-colors",
15929
15929
  isActive ? "border-primary bg-primary/20 text-primary" : "border-border bg-muted text-muted-foreground hover:bg-accent"
15930
15930
  ),
@@ -15990,7 +15990,7 @@ function AnimationPanel({
15990
15990
  style: fieldStyle,
15991
15991
  children: [
15992
15992
  /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: t("pptx.animation.trigger.selectShape") }),
15993
- activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunk5DBKW7F3_js.getElementLabel(el) }, el.id))
15993
+ activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunk73S5EOD3_js.getElementLabel(el) }, el.id))
15994
15994
  ]
15995
15995
  }
15996
15996
  )
@@ -16134,7 +16134,7 @@ function ActionTargetFields({
16134
16134
  returnAfter,
16135
16135
  onChange
16136
16136
  }) {
16137
- const { t } = chunk5DBKW7F3_js.useTranslation();
16137
+ const { t } = chunk73S5EOD3_js.useTranslation();
16138
16138
  const urlLabelKey = URL_LABEL_KEY[type];
16139
16139
  if (urlLabelKey) {
16140
16140
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16143,7 +16143,7 @@ function ActionTargetFields({
16143
16143
  type: "text",
16144
16144
  disabled: !canEdit,
16145
16145
  "aria-label": t(urlLabelKey),
16146
- className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
16146
+ className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
16147
16147
  placeholder: "https://...",
16148
16148
  value: url ?? "",
16149
16149
  onChange: (e) => onChange({ url: e.target.value })
@@ -16157,7 +16157,7 @@ function ActionTargetFields({
16157
16157
  type: "number",
16158
16158
  disabled: !canEdit,
16159
16159
  "aria-label": t("pptx.action.gotoSlide"),
16160
- className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
16160
+ className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
16161
16161
  placeholder: t("pptx.action.slideNumberPlaceholder"),
16162
16162
  min: 1,
16163
16163
  max: slideCount,
@@ -16179,7 +16179,7 @@ function ActionTargetFields({
16179
16179
  "data-testid": "pptx-action-custom-show",
16180
16180
  disabled: !canEdit,
16181
16181
  "aria-label": t("pptx.hyperlink.customShowLabel"),
16182
- className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
16182
+ className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
16183
16183
  value: customShowId ?? "",
16184
16184
  onChange: (e) => onChange({ customShowId: e.target.value, returnAfter }),
16185
16185
  children: [
@@ -16211,7 +16211,7 @@ function ActionSettingsPanel({
16211
16211
  customShows,
16212
16212
  onUpdateElement
16213
16213
  }) {
16214
- const { t } = chunk5DBKW7F3_js.useTranslation();
16214
+ const { t } = chunk73S5EOD3_js.useTranslation();
16215
16215
  const clickAction = selectedElement.actionClick ? pptx$1.pptxActionToElementAction(selectedElement.actionClick, "click") : void 0;
16216
16216
  const hoverAction = selectedElement.actionHover ? pptx$1.pptxActionToElementAction(selectedElement.actionHover, "hover") : void 0;
16217
16217
  const updateAction = (trigger, type, patch) => {
@@ -16287,7 +16287,7 @@ function ActionTriggerSection({
16287
16287
  onChangeType,
16288
16288
  onChangeTarget
16289
16289
  }) {
16290
- const { t } = chunk5DBKW7F3_js.useTranslation();
16290
+ const { t } = chunk73S5EOD3_js.useTranslation();
16291
16291
  const [pendingType, setPendingType] = React108.useState(void 0);
16292
16292
  const effectiveType = pptx.resolveActionType(pendingType, activeType);
16293
16293
  const changeType = (type) => {
@@ -16301,7 +16301,7 @@ function ActionTriggerSection({
16301
16301
  {
16302
16302
  disabled: !canEdit,
16303
16303
  "aria-label": label,
16304
- className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
16304
+ className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
16305
16305
  value: effectiveType,
16306
16306
  onChange: (e) => changeType(e.target.value),
16307
16307
  children: pptx.ELEMENT_ACTION_TYPE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.labelKey) }, o.value))
@@ -16329,7 +16329,7 @@ var AXIS_ROWS = [
16329
16329
  { type: "catAx", labelKey: "pptx.chart.categoryAxis", hasScale: false }
16330
16330
  ];
16331
16331
  function ChartAxisOptions({ axes, canEdit, onUpdateAxis }) {
16332
- const { t } = chunk5DBKW7F3_js.useTranslation();
16332
+ const { t } = chunk73S5EOD3_js.useTranslation();
16333
16333
  const rows = AXIS_ROWS.map((row) => ({
16334
16334
  ...row,
16335
16335
  axis: axes?.find((a) => a.axisType === row.type)
@@ -16474,7 +16474,7 @@ function ChartAxisStyleOptions({
16474
16474
  onSetTitleStyle,
16475
16475
  onSetGridlineStyle
16476
16476
  }) {
16477
- const { t } = chunk5DBKW7F3_js.useTranslation();
16477
+ const { t } = chunk73S5EOD3_js.useTranslation();
16478
16478
  const commitRecentColor = useRecentColorCommit();
16479
16479
  const rows = SCALE_AXES.map((row) => ({
16480
16480
  ...row,
@@ -16646,7 +16646,7 @@ function ChartComboTypeOptions({
16646
16646
  canEdit,
16647
16647
  onSetSeriesType
16648
16648
  }) {
16649
- const { t } = chunk5DBKW7F3_js.useTranslation();
16649
+ const { t } = chunk73S5EOD3_js.useTranslation();
16650
16650
  if (!COMBO_SUPPORTED_TYPES.has(chartType) || series.length < 2) {
16651
16651
  return null;
16652
16652
  }
@@ -16675,7 +16675,7 @@ function ChartDataLabelOptions({
16675
16675
  canEdit,
16676
16676
  onUpdateStyle
16677
16677
  }) {
16678
- const { t } = chunk5DBKW7F3_js.useTranslation();
16678
+ const { t } = chunk73S5EOD3_js.useTranslation();
16679
16679
  if (!style?.hasDataLabels) {
16680
16680
  return null;
16681
16681
  }
@@ -16723,7 +16723,7 @@ function ChartDataPointMarkerOptions({
16723
16723
  canEdit,
16724
16724
  onSetPointMarker
16725
16725
  }) {
16726
- const { t } = chunk5DBKW7F3_js.useTranslation();
16726
+ const { t } = chunk73S5EOD3_js.useTranslation();
16727
16727
  const commitRecentColor = useRecentColorCommit();
16728
16728
  const [seriesIndex, setSeriesIndex] = React108.useState(0);
16729
16729
  if (!MARKER_SUPPORTED_TYPES.has(chartType) || series.length === 0 || categories.length === 0) {
@@ -16829,7 +16829,7 @@ function ChartDataPointOptions({
16829
16829
  onSetPointExplosion,
16830
16830
  onSetPointLabel
16831
16831
  }) {
16832
- const { t } = chunk5DBKW7F3_js.useTranslation();
16832
+ const { t } = chunk73S5EOD3_js.useTranslation();
16833
16833
  const commitRecentColor = useRecentColorCommit();
16834
16834
  const [seriesIndex, setSeriesIndex] = React108.useState(0);
16835
16835
  if (series.length === 0 || categories.length === 0) {
@@ -16931,7 +16931,7 @@ function ChartDataSheet({
16931
16931
  highlightCell,
16932
16932
  onChange
16933
16933
  }) {
16934
- const { t } = chunk5DBKW7F3_js.useTranslation();
16934
+ const { t } = chunk73S5EOD3_js.useTranslation();
16935
16935
  const ref = React108.useRef(null);
16936
16936
  React108.useLayoutEffect(() => {
16937
16937
  if (ref.current) {
@@ -16962,7 +16962,7 @@ function ChartDisplayOptions({
16962
16962
  hasGridlines,
16963
16963
  onToggleGridlines
16964
16964
  }) {
16965
- const { t } = chunk5DBKW7F3_js.useTranslation();
16965
+ const { t } = chunk73S5EOD3_js.useTranslation();
16966
16966
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD, children: [
16967
16967
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING, children: t("pptx.chart.display") }),
16968
16968
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -17039,7 +17039,7 @@ function ChartErrorBarOptions({
17039
17039
  canEdit,
17040
17040
  onSetErrorBars
17041
17041
  }) {
17042
- const { t } = chunk5DBKW7F3_js.useTranslation();
17042
+ const { t } = chunk73S5EOD3_js.useTranslation();
17043
17043
  if (!ERROR_BAR_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17044
17044
  return null;
17045
17045
  }
@@ -17119,7 +17119,7 @@ function ChartFilteredSeriesOptions({
17119
17119
  onRestoreSeries,
17120
17120
  onSetDataLabelsRangeCache
17121
17121
  }) {
17122
- const { t } = chunk5DBKW7F3_js.useTranslation();
17122
+ const { t } = chunk73S5EOD3_js.useTranslation();
17123
17123
  const filteredSeries = chartData.filteredSeries ?? [];
17124
17124
  const seriesWithRange = chartData.series.map((series, index) => ({ series, index })).filter(({ series }) => series.dataLabelOptions?.dataLabelsRange);
17125
17125
  if (filteredSeries.length === 0 && seriesWithRange.length === 0 && chartData.series.length <= 1) {
@@ -17199,7 +17199,7 @@ function ChartMarkerOptions({
17199
17199
  canEdit,
17200
17200
  onSetMarker
17201
17201
  }) {
17202
- const { t } = chunk5DBKW7F3_js.useTranslation();
17202
+ const { t } = chunk73S5EOD3_js.useTranslation();
17203
17203
  const commitRecentColor = useRecentColorCommit();
17204
17204
  if (!MARKER_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17205
17205
  return null;
@@ -17308,7 +17308,7 @@ function ChartSeriesColorOptions({
17308
17308
  onSetColor,
17309
17309
  onToggleSecondaryAxis
17310
17310
  }) {
17311
- const { t } = chunk5DBKW7F3_js.useTranslation();
17311
+ const { t } = chunk73S5EOD3_js.useTranslation();
17312
17312
  const series = chartData.series;
17313
17313
  if (series.length === 0) {
17314
17314
  return null;
@@ -17358,7 +17358,7 @@ function ChartSubtypeOptions({
17358
17358
  canEdit,
17359
17359
  onUpdateChartData
17360
17360
  }) {
17361
- const { t } = chunk5DBKW7F3_js.useTranslation();
17361
+ const { t } = chunk73S5EOD3_js.useTranslation();
17362
17362
  if (chartData.chartType !== "bar3D" && chartData.chartType !== "radar" && chartData.chartType !== "surface") {
17363
17363
  return null;
17364
17364
  }
@@ -17424,7 +17424,7 @@ function ChartTrendlineOptions({
17424
17424
  canEdit,
17425
17425
  onSetTrendline
17426
17426
  }) {
17427
- const { t } = chunk5DBKW7F3_js.useTranslation();
17427
+ const { t } = chunk73S5EOD3_js.useTranslation();
17428
17428
  if (!TRENDLINE_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17429
17429
  return null;
17430
17430
  }
@@ -17497,7 +17497,7 @@ function ChartTypeSelector({
17497
17497
  onUpdateChartData,
17498
17498
  onTitleChange
17499
17499
  }) {
17500
- const { t } = chunk5DBKW7F3_js.useTranslation();
17500
+ const { t } = chunk73S5EOD3_js.useTranslation();
17501
17501
  const supportsGrouping = GROUPING_SUPPORTED_TYPES.has(chartType);
17502
17502
  const displayedType = pptx.resolveDisplayedChartType(chartData);
17503
17503
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD, children: [
@@ -17578,7 +17578,7 @@ function RotationField({
17578
17578
  canEdit,
17579
17579
  onRotationPatch
17580
17580
  }) {
17581
- const { t } = chunk5DBKW7F3_js.useTranslation();
17581
+ const { t } = chunk73S5EOD3_js.useTranslation();
17582
17582
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
17583
17583
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.chart.userShapeRotation") }),
17584
17584
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -17600,7 +17600,7 @@ function FlipFields({
17600
17600
  canEdit,
17601
17601
  onFlipPatch
17602
17602
  }) {
17603
- const { t } = chunk5DBKW7F3_js.useTranslation();
17603
+ const { t } = chunk73S5EOD3_js.useTranslation();
17604
17604
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
17605
17605
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-1 cursor-pointer", children: [
17606
17606
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -17639,7 +17639,7 @@ function ChartUserShapePositionFields({
17639
17639
  onRotationPatch,
17640
17640
  onFlipPatch
17641
17641
  }) {
17642
- const { t } = chunk5DBKW7F3_js.useTranslation();
17642
+ const { t } = chunk73S5EOD3_js.useTranslation();
17643
17643
  const update = (patch) => onPatch(row.path, patch);
17644
17644
  if (row.depth === 0) {
17645
17645
  const from = row.from;
@@ -17763,7 +17763,7 @@ function ChartUserShapeOptions({
17763
17763
  canEdit,
17764
17764
  onUpdateChartData
17765
17765
  }) {
17766
- const { t } = chunk5DBKW7F3_js.useTranslation();
17766
+ const { t } = chunk73S5EOD3_js.useTranslation();
17767
17767
  const shapes = chartData.userShapes;
17768
17768
  const rows = pptx.listChartUserShapeRows(shapes);
17769
17769
  const kindLabel = (kind) => {
@@ -17921,8 +17921,8 @@ function ChartUserShapeOptions({
17921
17921
  }
17922
17922
  function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
17923
17923
  const chartData = selectedElement.chartData;
17924
- const followDataPoint = chunkVGU5S37T_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17925
- const { selection: partSelection } = chunkVGU5S37T_js.useChartPartSelection();
17924
+ const followDataPoint = chunkYQ67KAQR_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17925
+ const { selection: partSelection } = chunkYQ67KAQR_js.useChartPartSelection();
17926
17926
  const canvasPart = partSelection?.elementId === selectedElement.id ? partSelection.part : null;
17927
17927
  const title = chartData?.title;
17928
17928
  const chartType = chartData?.chartType;
@@ -18360,7 +18360,7 @@ function OleEditorDialog({
18360
18360
  element,
18361
18361
  onUpdateElement
18362
18362
  }) {
18363
- const { t } = chunk5DBKW7F3_js.useTranslation();
18363
+ const { t } = chunk73S5EOD3_js.useTranslation();
18364
18364
  const dialogRef = React108.useRef(null);
18365
18365
  const fileInputRef = React108.useRef(null);
18366
18366
  const descriptor = pptx.buildOleEditDialogDescriptor(element);
@@ -18608,7 +18608,7 @@ function ConnectorArrowsSection({
18608
18608
  onUpdateShapeStyle,
18609
18609
  markDirty
18610
18610
  }) {
18611
- const { t } = chunk5DBKW7F3_js.useTranslation();
18611
+ const { t } = chunk73S5EOD3_js.useTranslation();
18612
18612
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
18613
18613
  ["Start", "End"].map((end) => {
18614
18614
  const key = end === "Start" ? "connectorStartArrow" : "connectorEndArrow";
@@ -18627,7 +18627,7 @@ function ConnectorArrowsSection({
18627
18627
  },
18628
18628
  disabled: !canEdit,
18629
18629
  className: SELECT_CLS2,
18630
- children: chunk5DBKW7F3_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18630
+ children: chunk73S5EOD3_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18631
18631
  }
18632
18632
  )
18633
18633
  ] }, end);
@@ -18651,7 +18651,7 @@ function ConnectorArrowsSection({
18651
18651
  },
18652
18652
  disabled: !canEdit,
18653
18653
  className: SELECT_CLS2,
18654
- children: chunk5DBKW7F3_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18654
+ children: chunk73S5EOD3_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18655
18655
  }
18656
18656
  )
18657
18657
  ] }),
@@ -18670,7 +18670,7 @@ function ConnectorArrowsSection({
18670
18670
  },
18671
18671
  disabled: !canEdit,
18672
18672
  className: SELECT_CLS2,
18673
- children: chunk5DBKW7F3_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18673
+ children: chunk73S5EOD3_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18674
18674
  }
18675
18675
  )
18676
18676
  ] })
@@ -18701,7 +18701,7 @@ function ConnectorPanel({
18701
18701
  function GroupInfoPanel({
18702
18702
  selectedElement
18703
18703
  }) {
18704
- const { t } = chunk5DBKW7F3_js.useTranslation();
18704
+ const { t } = chunk73S5EOD3_js.useTranslation();
18705
18705
  if (selectedElement.type !== "group") {
18706
18706
  return null;
18707
18707
  }
@@ -18716,7 +18716,7 @@ function OlePropertiesPanel({
18716
18716
  canEdit,
18717
18717
  onUpdateElement
18718
18718
  }) {
18719
- const { t } = chunk5DBKW7F3_js.useTranslation();
18719
+ const { t } = chunk73S5EOD3_js.useTranslation();
18720
18720
  const [isEditorOpen, setIsEditorOpen] = React108.useState(false);
18721
18721
  if (selectedElement.type !== "ole") {
18722
18722
  return null;
@@ -18761,7 +18761,7 @@ function OlePropertiesPanel({
18761
18761
  /* @__PURE__ */ jsxRuntime.jsx(
18762
18762
  "span",
18763
18763
  {
18764
- className: chunk5DBKW7F3_js.cn(
18764
+ className: chunk73S5EOD3_js.cn(
18765
18765
  "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium",
18766
18766
  ole.isLinked ? "bg-blue-500/20 text-blue-400" : "bg-green-500/20 text-green-400"
18767
18767
  ),
@@ -18814,7 +18814,7 @@ function LayerOrderButtons({
18814
18814
  "button",
18815
18815
  {
18816
18816
  type: "button",
18817
- className: chunk5DBKW7F3_js.cn("flex-1", BTN2),
18817
+ className: chunk73S5EOD3_js.cn("flex-1", BTN2),
18818
18818
  disabled: !canEdit,
18819
18819
  onClick: () => onMoveLayer("forward"),
18820
18820
  children: "\u2191 Forward"
@@ -18824,7 +18824,7 @@ function LayerOrderButtons({
18824
18824
  "button",
18825
18825
  {
18826
18826
  type: "button",
18827
- className: chunk5DBKW7F3_js.cn("flex-1", BTN2),
18827
+ className: chunk73S5EOD3_js.cn("flex-1", BTN2),
18828
18828
  disabled: !canEdit,
18829
18829
  onClick: () => onMoveLayer("backward"),
18830
18830
  children: "\u2193 Backward"
@@ -18838,7 +18838,7 @@ function ArtisticEffectsGallery({
18838
18838
  canEdit,
18839
18839
  updateEffects
18840
18840
  }) {
18841
- const { t } = chunk5DBKW7F3_js.useTranslation();
18841
+ const { t } = chunk73S5EOD3_js.useTranslation();
18842
18842
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18843
18843
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.image.artisticEffects") }),
18844
18844
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: pptx.ARTISTIC_EFFECTS.map(([effectName, tKey, cssFilter]) => {
@@ -18848,7 +18848,7 @@ function ArtisticEffectsGallery({
18848
18848
  {
18849
18849
  type: "button",
18850
18850
  disabled: !canEdit,
18851
- className: chunk5DBKW7F3_js.cn(
18851
+ className: chunk73S5EOD3_js.cn(
18852
18852
  "flex flex-col items-center gap-0.5 rounded border p-0.5 hover:bg-accent/50",
18853
18853
  isActive ? "border-primary bg-primary/10" : "border-border"
18854
18854
  ),
@@ -18883,7 +18883,7 @@ function ColorChangeSection({
18883
18883
  canEdit,
18884
18884
  updateEffects
18885
18885
  }) {
18886
- const { t } = chunk5DBKW7F3_js.useTranslation();
18886
+ const { t } = chunk73S5EOD3_js.useTranslation();
18887
18887
  const cc = fx?.clrChange;
18888
18888
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18889
18889
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-2", children: [
@@ -18910,7 +18910,7 @@ function ColorChangeSection({
18910
18910
  DebouncedColorInput,
18911
18911
  {
18912
18912
  disabled: !canEdit,
18913
- value: chunk5DBKW7F3_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18913
+ value: chunk73S5EOD3_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18914
18914
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18915
18915
  onCommit: (hex) => updateEffects({
18916
18916
  clrChange: {
@@ -18928,7 +18928,7 @@ function ColorChangeSection({
18928
18928
  DebouncedColorInput,
18929
18929
  {
18930
18930
  disabled: !canEdit || Boolean(cc.clrToTransparent),
18931
- value: chunk5DBKW7F3_js.normalizeHexColor(cc.clrTo, "#000000"),
18931
+ value: chunk73S5EOD3_js.normalizeHexColor(cc.clrTo, "#000000"),
18932
18932
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18933
18933
  onCommit: (hex) => updateEffects({
18934
18934
  clrChange: {
@@ -18965,7 +18965,7 @@ function ColorWashSection({
18965
18965
  canEdit,
18966
18966
  updateEffects
18967
18967
  }) {
18968
- const { t } = chunk5DBKW7F3_js.useTranslation();
18968
+ const { t } = chunk73S5EOD3_js.useTranslation();
18969
18969
  const wash = fx?.colorWash;
18970
18970
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18971
18971
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-2", children: [
@@ -18988,7 +18988,7 @@ function ColorWashSection({
18988
18988
  DebouncedColorInput,
18989
18989
  {
18990
18990
  disabled: !canEdit,
18991
- value: chunk5DBKW7F3_js.normalizeHexColor(wash.color, "#0066cc"),
18991
+ value: chunk73S5EOD3_js.normalizeHexColor(wash.color, "#0066cc"),
18992
18992
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18993
18993
  onCommit: (hex) => updateEffects({
18994
18994
  colorWash: { color: hex, opacity: wash.opacity ?? 40 }
@@ -19065,7 +19065,7 @@ function DuotonePanel({
19065
19065
  canEdit,
19066
19066
  onUpdateElement
19067
19067
  }) {
19068
- const { t } = chunk5DBKW7F3_js.useTranslation();
19068
+ const { t } = chunk73S5EOD3_js.useTranslation();
19069
19069
  const effects = "imageEffects" in selectedElement ? selectedElement.imageEffects : void 0;
19070
19070
  const commitDuotone = React108.useCallback(
19071
19071
  (color1, color2) => {
@@ -19086,8 +19086,8 @@ function DuotonePanel({
19086
19086
  }
19087
19087
  });
19088
19088
  }, [effects, onUpdateElement]);
19089
- const shadowColor = chunk5DBKW7F3_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
19090
- const highlightColor = chunk5DBKW7F3_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
19089
+ const shadowColor = chunk73S5EOD3_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
19090
+ const highlightColor = chunk73S5EOD3_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
19091
19091
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px]", children: [
19092
19092
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground font-medium", children: t("pptx.image.duotone") }),
19093
19093
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
@@ -19118,7 +19118,7 @@ function DuotonePanel({
19118
19118
  ] }),
19119
19119
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
19120
19120
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-[10px]", children: t("pptx.image.duotonePresets") }),
19121
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunkVGU5S37T_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
19121
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunkYQ67KAQR_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
19122
19122
  "button",
19123
19123
  {
19124
19124
  type: "button",
@@ -19154,7 +19154,7 @@ function ImageAdjustmentsPanel({
19154
19154
  canEdit,
19155
19155
  onUpdateElement
19156
19156
  }) {
19157
- const { t } = chunk5DBKW7F3_js.useTranslation();
19157
+ const { t } = chunk73S5EOD3_js.useTranslation();
19158
19158
  const effects = React108.useMemo(
19159
19159
  () => "imageEffects" in selectedElement ? selectedElement.imageEffects : void 0,
19160
19160
  [selectedElement]
@@ -19255,7 +19255,7 @@ function ImageCropSection({
19255
19255
  canEdit,
19256
19256
  onUpdateElement
19257
19257
  }) {
19258
- const { t } = chunk5DBKW7F3_js.useTranslation();
19258
+ const { t } = chunk73S5EOD3_js.useTranslation();
19259
19259
  if (!pptx$1.isImageLikeElement(selectedElement)) {
19260
19260
  return null;
19261
19261
  }
@@ -19273,7 +19273,7 @@ function ImageCropSection({
19273
19273
  max: MAX_CROP_PERCENT,
19274
19274
  disabled: !croppable,
19275
19275
  className: "accent-primary",
19276
- value: Math.round(chunk5DBKW7F3_js.clampCropValue(selectedElement[key]) * 100),
19276
+ value: Math.round(chunk73S5EOD3_js.clampCropValue(selectedElement[key]) * 100),
19277
19277
  onChange: (e) => onUpdateElement({
19278
19278
  [key]: Number(e.target.value) / 100
19279
19279
  })
@@ -19320,7 +19320,7 @@ function ImagePropertiesPanel({
19320
19320
  canEdit,
19321
19321
  onUpdateElement
19322
19322
  }) {
19323
- const { t } = chunk5DBKW7F3_js.useTranslation();
19323
+ const { t } = chunk73S5EOD3_js.useTranslation();
19324
19324
  const fx = selectedElement.imageEffects;
19325
19325
  const updateEffects = (patch) => {
19326
19326
  onUpdateElement({
@@ -19337,7 +19337,7 @@ function ImagePropertiesPanel({
19337
19337
  {
19338
19338
  rows: 2,
19339
19339
  disabled: !canEdit,
19340
- className: chunk5DBKW7F3_js.cn(INPUT2, "resize-none text-[11px]"),
19340
+ className: chunk73S5EOD3_js.cn(INPUT2, "resize-none text-[11px]"),
19341
19341
  value: selectedElement.altText ?? "",
19342
19342
  onChange: (e) => onUpdateElement({
19343
19343
  altText: e.target.value
@@ -19525,7 +19525,7 @@ function InspectorFields({
19525
19525
  liveTarget,
19526
19526
  livePatch
19527
19527
  }) {
19528
- const { t } = chunk5DBKW7F3_js.useTranslation();
19528
+ const { t } = chunk73S5EOD3_js.useTranslation();
19529
19529
  const views = pptx.resolveInspectorSections(sections, target);
19530
19530
  const change = (sectionId, fieldId, raw) => {
19531
19531
  const patch = pptx.inspectorFieldPatch(sections, sectionId, fieldId, target, raw);
@@ -19753,7 +19753,7 @@ function MediaInspector({
19753
19753
  durationSeconds,
19754
19754
  onUpdateElement
19755
19755
  }) {
19756
- const { t } = chunk5DBKW7F3_js.useTranslation();
19756
+ const { t } = chunk73S5EOD3_js.useTranslation();
19757
19757
  const trimStartMs = element.trimStartMs ?? 0;
19758
19758
  const trimEndMs = element.trimEndMs ?? 0;
19759
19759
  const durationMs = durationSeconds * 1e3;
@@ -19983,7 +19983,7 @@ function MediaPlaybackBookmarks({
19983
19983
  onUpdateElement,
19984
19984
  onSeekTo
19985
19985
  }) {
19986
- const { t } = chunk5DBKW7F3_js.useTranslation();
19986
+ const { t } = chunk73S5EOD3_js.useTranslation();
19987
19987
  const [newBookmarkLabel, setNewBookmarkLabel] = React108.useState("");
19988
19988
  const volumePercent = Math.round((element.volume ?? 1) * 100);
19989
19989
  const handleAddBookmark = React108.useCallback(() => {
@@ -20233,7 +20233,7 @@ function MediaPropertiesPanel({
20233
20233
  canEdit,
20234
20234
  onUpdateElement
20235
20235
  }) {
20236
- const { t } = chunk5DBKW7F3_js.useTranslation();
20236
+ const { t } = chunk73S5EOD3_js.useTranslation();
20237
20237
  const mediaRef = React108.useRef(null);
20238
20238
  const [isPlaying, setIsPlaying] = React108.useState(false);
20239
20239
  const [currentTime, setCurrentTime] = React108.useState(0);
@@ -20467,7 +20467,7 @@ function AccessibilityTextSection({
20467
20467
  canEdit,
20468
20468
  onUpdateElement
20469
20469
  }) {
20470
- const { t } = chunk5DBKW7F3_js.useTranslation();
20470
+ const { t } = chunk73S5EOD3_js.useTranslation();
20471
20471
  const fields = pptx.getNonVisualDescriptionFields(selectedElement);
20472
20472
  if (!fields.showAltText && !fields.showTitle) {
20473
20473
  return null;
@@ -20482,7 +20482,7 @@ function AccessibilityTextSection({
20482
20482
  rows: 2,
20483
20483
  disabled: !canEdit,
20484
20484
  placeholder: t("pptx.elementAccessibility.altTextPlaceholder"),
20485
- className: chunk5DBKW7F3_js.cn(INPUT2, "resize-none text-[11px]"),
20485
+ className: chunk73S5EOD3_js.cn(INPUT2, "resize-none text-[11px]"),
20486
20486
  value: fields.altText,
20487
20487
  onChange: (e) => onUpdateElement({ altText: e.target.value })
20488
20488
  }
@@ -20496,7 +20496,7 @@ function AccessibilityTextSection({
20496
20496
  type: "text",
20497
20497
  disabled: !canEdit,
20498
20498
  placeholder: t("pptx.elementAccessibility.titlePlaceholder"),
20499
- className: chunk5DBKW7F3_js.cn(INPUT2, "text-[11px]"),
20499
+ className: chunk73S5EOD3_js.cn(INPUT2, "text-[11px]"),
20500
20500
  value: fields.title,
20501
20501
  onChange: (e) => onUpdateElement({ title: e.target.value })
20502
20502
  }
@@ -20524,7 +20524,7 @@ function RecentColorsRow({
20524
20524
  disabled,
20525
20525
  onCommit
20526
20526
  }) {
20527
- const { t } = chunk5DBKW7F3_js.useTranslation();
20527
+ const { t } = chunk73S5EOD3_js.useTranslation();
20528
20528
  const { recentColors, pushColor } = useRecentColors();
20529
20529
  const shown = recentColors.length > 0;
20530
20530
  const ref = React108.useRef(null);
@@ -20566,7 +20566,7 @@ function ThemeColorSwatchGrid({
20566
20566
  selectedHex,
20567
20567
  onPick
20568
20568
  }) {
20569
- const { t } = chunk5DBKW7F3_js.useTranslation();
20569
+ const { t } = chunk73S5EOD3_js.useTranslation();
20570
20570
  const themeColorMap = useThemeColorMap();
20571
20571
  const columns = React108.useMemo(
20572
20572
  () => pptx.buildThemeColorSwatchGrid(themeColorMap, (key, params) => t(key, params)),
@@ -20613,7 +20613,7 @@ function SelectRow({
20613
20613
  options,
20614
20614
  onChange
20615
20615
  }) {
20616
- const { t } = chunk5DBKW7F3_js.useTranslation();
20616
+ const { t } = chunk73S5EOD3_js.useTranslation();
20617
20617
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: `flex flex-col gap-1 ${span2 ? COL2 : ""}`, children: [
20618
20618
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: label }),
20619
20619
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -20637,14 +20637,14 @@ function ColorPickerRow({
20637
20637
  onChange,
20638
20638
  styleChange
20639
20639
  }) {
20640
- const { t } = chunk5DBKW7F3_js.useTranslation();
20640
+ const { t } = chunk73S5EOD3_js.useTranslation();
20641
20641
  const { pushColor } = useRecentColors();
20642
20642
  const commit = (color, ref) => {
20643
20643
  onChange(color, ref);
20644
20644
  pushColor(color);
20645
20645
  };
20646
20646
  const handleEyedropper = async () => {
20647
- const color = await chunk5DBKW7F3_js.openNativeEyeDropper();
20647
+ const color = await chunk73S5EOD3_js.openNativeEyeDropper();
20648
20648
  if (color) {
20649
20649
  commit(color);
20650
20650
  }
@@ -20717,7 +20717,7 @@ function GradientStopRow({
20717
20717
  onUpdate,
20718
20718
  allStops
20719
20719
  }) {
20720
- const { t } = chunk5DBKW7F3_js.useTranslation();
20720
+ const { t } = chunk73S5EOD3_js.useTranslation();
20721
20721
  const { pushColor } = useRecentColors();
20722
20722
  const commitRecentColor = useRecentColorCommit();
20723
20723
  const patchStop = (patch) => {
@@ -20730,9 +20730,9 @@ function GradientStopRow({
20730
20730
  "input",
20731
20731
  {
20732
20732
  type: "color",
20733
- value: chunk5DBKW7F3_js.normalizeHexColor(stop2.color, "#3b82f6"),
20733
+ value: chunk73S5EOD3_js.normalizeHexColor(stop2.color, "#3b82f6"),
20734
20734
  ref: commitRecentColor,
20735
- onChange: (e) => patchStop({ color: chunk5DBKW7F3_js.normalizeHexColor(e.target.value, "#3b82f6"), colorRef: void 0 }),
20735
+ onChange: (e) => patchStop({ color: chunk73S5EOD3_js.normalizeHexColor(e.target.value, "#3b82f6"), colorRef: void 0 }),
20736
20736
  className: "h-7 w-10 rounded border border-border bg-muted"
20737
20737
  }
20738
20738
  ),
@@ -20807,7 +20807,7 @@ function FillAdvancedControls({
20807
20807
  onUpdateGradientStops,
20808
20808
  onSetFillColor: _onSetFillColor
20809
20809
  }) {
20810
- const { t } = chunk5DBKW7F3_js.useTranslation();
20810
+ const { t } = chunk73S5EOD3_js.useTranslation();
20811
20811
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20812
20812
  showGradient && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20813
20813
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -20861,7 +20861,7 @@ function FillAdvancedControls({
20861
20861
  onClick: () => onUpdateGradientStops([
20862
20862
  ...gradientStops,
20863
20863
  {
20864
- color: chunk5DBKW7F3_js.normalizeHexColor(style?.fillColor, chunk5DBKW7F3_js.DEFAULT_FILL_COLOR),
20864
+ color: chunk73S5EOD3_js.normalizeHexColor(style?.fillColor, chunk73S5EOD3_js.DEFAULT_FILL_COLOR),
20865
20865
  position: 50,
20866
20866
  opacity: 1
20867
20867
  }
@@ -20875,9 +20875,9 @@ function FillAdvancedControls({
20875
20875
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${COL2} flex flex-col gap-2`, children: [
20876
20876
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: "Pattern" }),
20877
20877
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-8 gap-1 max-h-48 overflow-y-auto rounded border border-border p-2", children: PATTERN_PRESET_OPTIONS.map((opt) => {
20878
- const fgColor = chunk5DBKW7F3_js.normalizeHexColor(style?.fillColor, chunk5DBKW7F3_js.DEFAULT_FILL_COLOR);
20879
- const bgColor = chunk5DBKW7F3_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
20880
- const svgPattern = chunk5DBKW7F3_js.getPatternSvg(opt.value, fgColor, bgColor);
20878
+ const fgColor = chunk73S5EOD3_js.normalizeHexColor(style?.fillColor, chunk73S5EOD3_js.DEFAULT_FILL_COLOR);
20879
+ const bgColor = chunk73S5EOD3_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
20880
+ const svgPattern = chunk73S5EOD3_js.getPatternSvg(opt.value, fgColor, bgColor);
20881
20881
  const isSelected = (style.fillPatternPreset || "pct20") === opt.value;
20882
20882
  return /* @__PURE__ */ jsxRuntime.jsx(
20883
20883
  "button",
@@ -20910,7 +20910,7 @@ function FillAdvancedControls({
20910
20910
  {
20911
20911
  label: t("pptx.fillAdvanced.foregroundColor"),
20912
20912
  prefix: "pattern-fg",
20913
- value: chunk5DBKW7F3_js.normalizeHexColor(style?.fillColor, chunk5DBKW7F3_js.DEFAULT_FILL_COLOR),
20913
+ value: chunk73S5EOD3_js.normalizeHexColor(style?.fillColor, chunk73S5EOD3_js.DEFAULT_FILL_COLOR),
20914
20914
  disabled: isLine,
20915
20915
  onChange: (color) => onUpdateShapeStyle(patternForeground(color)),
20916
20916
  styleChange: patternForeground
@@ -20921,7 +20921,7 @@ function FillAdvancedControls({
20921
20921
  {
20922
20922
  label: t("pptx.fillAdvanced.backgroundColor"),
20923
20923
  prefix: "pattern-bg",
20924
- value: chunk5DBKW7F3_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
20924
+ value: chunk73S5EOD3_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
20925
20925
  disabled: isLine,
20926
20926
  onChange: (color) => onUpdateShapeStyle(patternBackground(color)),
20927
20927
  styleChange: patternBackground
@@ -20986,7 +20986,7 @@ var QUICK_STYLES = pptx.buildQuickStylesGallery();
20986
20986
  function QuickStylesGallery({
20987
20987
  onUpdateShapeStyle
20988
20988
  }) {
20989
- const { t } = chunk5DBKW7F3_js.useTranslation();
20989
+ const { t } = chunk73S5EOD3_js.useTranslation();
20990
20990
  const ref = React108.useRef(null);
20991
20991
  React108.useLayoutEffect(() => {
20992
20992
  const gallery = ref.current;
@@ -21023,14 +21023,14 @@ function StrokeEffectsSection({
21023
21023
  onUpdateShapeStyle,
21024
21024
  onSetStrokeColor
21025
21025
  }) {
21026
- const { t } = chunk5DBKW7F3_js.useTranslation();
21026
+ const { t } = chunk73S5EOD3_js.useTranslation();
21027
21027
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21028
21028
  /* @__PURE__ */ jsxRuntime.jsx(
21029
21029
  ColorPickerRow,
21030
21030
  {
21031
21031
  label: t("pptx.inspector.stroke"),
21032
21032
  prefix: "stroke",
21033
- value: chunk5DBKW7F3_js.normalizeHexColor(style?.strokeColor, chunk5DBKW7F3_js.DEFAULT_STROKE_COLOR),
21033
+ value: chunk73S5EOD3_js.normalizeHexColor(style?.strokeColor, chunk73S5EOD3_js.DEFAULT_STROKE_COLOR),
21034
21034
  selectedRef: style?.strokeColorRef,
21035
21035
  onChange: onSetStrokeColor,
21036
21036
  styleChange: (hex, current) => pptx.shapeOutlineChange(hex, void 0, current)
@@ -21073,7 +21073,7 @@ function FillStrokeProperties({
21073
21073
  onSetFillColor,
21074
21074
  onSetStrokeColor
21075
21075
  }) {
21076
- const { t } = chunk5DBKW7F3_js.useTranslation();
21076
+ const { t } = chunk73S5EOD3_js.useTranslation();
21077
21077
  const line = isLineish(selectedElement, selectedShapeType);
21078
21078
  const style = selectedShapeStyle;
21079
21079
  const handleFillModeChange = (nextMode) => {
@@ -21089,10 +21089,10 @@ function FillStrokeProperties({
21089
21089
  return;
21090
21090
  }
21091
21091
  if (nextMode === "gradient") {
21092
- const existing = chunk5DBKW7F3_js.sanitizeGradientStops(style?.fillGradientStops);
21092
+ const existing = chunk73S5EOD3_js.sanitizeGradientStops(style?.fillGradientStops);
21093
21093
  const stops = existing.length >= 2 ? existing : [
21094
21094
  {
21095
- color: chunk5DBKW7F3_js.normalizeHexColor(style?.fillColor, chunk5DBKW7F3_js.DEFAULT_FILL_COLOR),
21095
+ color: chunk73S5EOD3_js.normalizeHexColor(style?.fillColor, chunk73S5EOD3_js.DEFAULT_FILL_COLOR),
21096
21096
  position: 0,
21097
21097
  opacity: 1
21098
21098
  },
@@ -21117,7 +21117,7 @@ function FillStrokeProperties({
21117
21117
  onUpdateShapeStyle({ fillMode: "solid" });
21118
21118
  };
21119
21119
  const gradientStops = selectedGradientStops.length > 0 ? selectedGradientStops : [
21120
- { color: chunk5DBKW7F3_js.DEFAULT_FILL_COLOR, position: 0 },
21120
+ { color: chunk73S5EOD3_js.DEFAULT_FILL_COLOR, position: 0 },
21121
21121
  { color: "#ffffff", position: 100 }
21122
21122
  ];
21123
21123
  const showGradient = style?.fillMode === "gradient" || selectedGradientStops.length > 0;
@@ -21144,7 +21144,7 @@ function FillStrokeProperties({
21144
21144
  {
21145
21145
  label: t("pptx.fill.fill"),
21146
21146
  prefix: "fill",
21147
- value: chunk5DBKW7F3_js.normalizeHexColor(style?.fillColor, chunk5DBKW7F3_js.DEFAULT_FILL_COLOR),
21147
+ value: chunk73S5EOD3_js.normalizeHexColor(style?.fillColor, chunk73S5EOD3_js.DEFAULT_FILL_COLOR),
21148
21148
  selectedRef: style?.fillColorRef,
21149
21149
  disabled: line,
21150
21150
  onChange: onSetFillColor,
@@ -21182,7 +21182,7 @@ function Text3DProperties({
21182
21182
  ts,
21183
21183
  onUpdateTextStyle
21184
21184
  }) {
21185
- const { t } = chunk5DBKW7F3_js.useTranslation();
21185
+ const { t } = chunk73S5EOD3_js.useTranslation();
21186
21186
  const commitRecentColor = useRecentColorCommit();
21187
21187
  const t3d = ts?.text3d;
21188
21188
  const hasExtrusion = Boolean(t3d?.extrusionHeight && t3d.extrusionHeight > 0);
@@ -21229,7 +21229,7 @@ function Text3DProperties({
21229
21229
  "input",
21230
21230
  {
21231
21231
  type: "color",
21232
- value: chunk5DBKW7F3_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21232
+ value: chunk73S5EOD3_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21233
21233
  ref: commitRecentColor,
21234
21234
  onChange: (e) => update3d({ extrusionColor: e.target.value }),
21235
21235
  className: COLOR_CLS
@@ -21396,7 +21396,7 @@ function AdvancedTextFormatting({
21396
21396
  onUpdateTextStyle,
21397
21397
  numChange
21398
21398
  }) {
21399
- const { t } = chunk5DBKW7F3_js.useTranslation();
21399
+ const { t } = chunk73S5EOD3_js.useTranslation();
21400
21400
  const commitRecentColor = useRecentColorCommit();
21401
21401
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 rounded border border-border bg-card p-2 space-y-2", children: [
21402
21402
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] uppercase tracking-wide text-muted-foreground", children: t("pptx.textProperties.advancedTextHeading") }),
@@ -21418,7 +21418,7 @@ function AdvancedTextFormatting({
21418
21418
  "input",
21419
21419
  {
21420
21420
  type: "color",
21421
- value: chunk5DBKW7F3_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21421
+ value: chunk73S5EOD3_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21422
21422
  ref: commitRecentColor,
21423
21423
  onChange: (e) => onUpdateTextStyle({ highlightColor: e.target.value }),
21424
21424
  disabled: !canEdit,
@@ -21560,7 +21560,7 @@ function TextReflectionSection({
21560
21560
  onUpdateTextStyle,
21561
21561
  numChange
21562
21562
  }) {
21563
- const { t } = chunk5DBKW7F3_js.useTranslation();
21563
+ const { t } = chunk73S5EOD3_js.useTranslation();
21564
21564
  const hasReflection = Boolean(ts?.textReflection);
21565
21565
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
21566
21566
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "inline-flex items-center gap-2 text-foreground", children: [
@@ -21668,7 +21668,7 @@ function TextEffectsPanel({
21668
21668
  onUpdateTextStyle,
21669
21669
  numChange
21670
21670
  }) {
21671
- const { t } = chunk5DBKW7F3_js.useTranslation();
21671
+ const { t } = chunk73S5EOD3_js.useTranslation();
21672
21672
  const commitRecentColor = useRecentColorCommit();
21673
21673
  const hasShadow = Boolean(
21674
21674
  ts?.textShadowColor || typeof ts?.textShadowBlur === "number" && ts.textShadowBlur > 0
@@ -21714,7 +21714,7 @@ function TextEffectsPanel({
21714
21714
  "input",
21715
21715
  {
21716
21716
  type: "color",
21717
- value: chunk5DBKW7F3_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21717
+ value: chunk73S5EOD3_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21718
21718
  ref: commitRecentColor,
21719
21719
  onChange: (e) => onUpdateTextStyle({ textShadowColor: e.target.value }),
21720
21720
  className: COLOR_CLS2
@@ -21819,7 +21819,7 @@ function TextEffectsPanel({
21819
21819
  "input",
21820
21820
  {
21821
21821
  type: "color",
21822
- value: chunk5DBKW7F3_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
21822
+ value: chunk73S5EOD3_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
21823
21823
  ref: commitRecentColor,
21824
21824
  onChange: (e) => onUpdateTextStyle({ textGlowColor: e.target.value }),
21825
21825
  className: COLOR_CLS2
@@ -21869,7 +21869,7 @@ function TextWarpGallery({
21869
21869
  ts,
21870
21870
  onUpdateTextStyle
21871
21871
  }) {
21872
- const { t } = chunk5DBKW7F3_js.useTranslation();
21872
+ const { t } = chunk73S5EOD3_js.useTranslation();
21873
21873
  const [expanded, setExpanded] = React108__default.default.useState(false);
21874
21874
  const currentPreset = ts?.textWarpPreset || "textNoShape";
21875
21875
  const descriptor = React108.useMemo(() => pptx.buildTextWarpGallery(ts?.textWarpPreset), [ts?.textWarpPreset]);
@@ -21950,7 +21950,7 @@ function ShapeTextPanels({
21950
21950
  onUpdateElementStyle,
21951
21951
  onUpdateTextStyle
21952
21952
  }) {
21953
- const { t } = chunk5DBKW7F3_js.useTranslation();
21953
+ const { t } = chunk73S5EOD3_js.useTranslation();
21954
21954
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21955
21955
  pptx$1.hasShapeProperties(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
21956
21956
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.shape.type", "Shape Type") }),
@@ -21959,11 +21959,11 @@ function ShapeTextPanels({
21959
21959
  {
21960
21960
  value: selectedElement.shapeType || "rect",
21961
21961
  disabled: !canEdit,
21962
- className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
21962
+ className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
21963
21963
  onChange: (e) => onUpdateElement({
21964
21964
  shapeType: e.target.value
21965
21965
  }),
21966
- 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
+ children: chunk73S5EOD3_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
21967
21967
  }
21968
21968
  )
21969
21969
  ] }),
@@ -21975,7 +21975,7 @@ function ShapeTextPanels({
21975
21975
  selectedElement,
21976
21976
  selectedShapeStyle: selectedElement.shapeStyle,
21977
21977
  selectedShapeType: selectedElement.shapeType,
21978
- selectedGradientStops: chunk5DBKW7F3_js.sanitizeGradientStops(
21978
+ selectedGradientStops: chunk73S5EOD3_js.sanitizeGradientStops(
21979
21979
  selectedElement.shapeStyle?.fillGradientStops
21980
21980
  ),
21981
21981
  canEdit,
@@ -22011,7 +22011,7 @@ function ShapeTextPanels({
22011
22011
  {
22012
22012
  disabled: !canEdit,
22013
22013
  "aria-label": "Text Color",
22014
- value: chunk5DBKW7F3_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
22014
+ value: chunk73S5EOD3_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
22015
22015
  className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
22016
22016
  onApply: (hex) => onUpdateTextStyle({ color: hex, colorRef: void 0 }),
22017
22017
  patch: textColorPatch
@@ -22102,7 +22102,7 @@ function TextFormatToggle({
22102
22102
  {
22103
22103
  type: "button",
22104
22104
  disabled,
22105
- className: chunk5DBKW7F3_js.cn(
22105
+ className: chunk73S5EOD3_js.cn(
22106
22106
  "px-2 py-1 rounded text-[11px] transition-colors max-md:min-w-[44px]! max-md:min-h-[44px]!",
22107
22107
  italic && "italic",
22108
22108
  underline && "underline",
@@ -22271,7 +22271,7 @@ function SmartArtLayoutSwitcher({
22271
22271
  canEdit,
22272
22272
  onUpdateSmartArt
22273
22273
  }) {
22274
- const { t } = chunk5DBKW7F3_js.useTranslation();
22274
+ const { t } = chunk73S5EOD3_js.useTranslation();
22275
22275
  const currentLayout = smartArtData.resolvedLayoutType ?? "list";
22276
22276
  const handleLayoutSwitch = (newLayout) => {
22277
22277
  if (!canEdit || newLayout === currentLayout) {
@@ -22290,7 +22290,7 @@ function SmartArtLayoutSwitcher({
22290
22290
  type: "button",
22291
22291
  "data-testid": `smartart-layout-${type}`,
22292
22292
  disabled: !canEdit,
22293
- className: chunk5DBKW7F3_js.cn(
22293
+ className: chunk73S5EOD3_js.cn(
22294
22294
  "flex flex-col items-center gap-0.5 rounded border p-1.5 transition-colors",
22295
22295
  "text-[9px] leading-tight",
22296
22296
  isActive ? "border-primary bg-primary/15 text-primary" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground",
@@ -22317,7 +22317,7 @@ function SmartArtStyleControls({
22317
22317
  onChangeColorScheme,
22318
22318
  onChangeStyle
22319
22319
  }) {
22320
- const { t } = chunk5DBKW7F3_js.useTranslation();
22320
+ const { t } = chunk73S5EOD3_js.useTranslation();
22321
22321
  const translate = React108__default.default.useCallback((key) => t(key), [t]);
22322
22322
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22323
22323
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
@@ -22328,7 +22328,7 @@ function SmartArtStyleControls({
22328
22328
  disabled: !canEdit,
22329
22329
  "data-testid": "smartart-color-scheme",
22330
22330
  "aria-label": t("pptx.smartart.colorScheme"),
22331
- className: chunk5DBKW7F3_js.cn(INPUT2, "w-full"),
22331
+ className: chunk73S5EOD3_js.cn(INPUT2, "w-full"),
22332
22332
  value: colorScheme,
22333
22333
  onChange: (e) => onChangeColorScheme(e.target.value),
22334
22334
  children: colorSchemes.map((cs) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: cs, children: pptx.schemaLabel(pptx.SMARTART_COLOR_SCHEME_LABEL_KEYS, cs, translate) }, cs))
@@ -22343,7 +22343,7 @@ function SmartArtStyleControls({
22343
22343
  type: "button",
22344
22344
  disabled: !canEdit,
22345
22345
  "aria-pressed": style === s,
22346
- className: chunk5DBKW7F3_js.cn(
22346
+ className: chunk73S5EOD3_js.cn(
22347
22347
  "flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
22348
22348
  style === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
22349
22349
  ),
@@ -22369,14 +22369,14 @@ function SmartArtPropertiesPanel({
22369
22369
  onUpdateElement,
22370
22370
  box
22371
22371
  }) {
22372
- const { t } = chunk5DBKW7F3_js.useTranslation();
22372
+ const { t } = chunk73S5EOD3_js.useTranslation();
22373
22373
  const { pushColor } = useRecentColors();
22374
22374
  const paneRef = React108__default.default.useRef(null);
22375
22375
  const applySmartArtData = (newData) => {
22376
22376
  const reflowed = box ? pptx.rebuildDrawingShapesIfCleared(
22377
22377
  newData,
22378
22378
  newData.layout,
22379
- chunkVGU5S37T_js.resolveSmartArtDataPalette(newData),
22379
+ chunkYQ67KAQR_js.resolveSmartArtDataPalette(newData),
22380
22380
  newData.style ?? "flat",
22381
22381
  "inspector",
22382
22382
  box
@@ -22447,9 +22447,9 @@ function TableDataGrid({
22447
22447
  canEdit,
22448
22448
  onUpdateElement
22449
22449
  }) {
22450
- const { t } = chunk5DBKW7F3_js.useTranslation();
22450
+ const { t } = chunk73S5EOD3_js.useTranslation();
22451
22451
  const grid = pptx.buildTableDataGrid(tableElement);
22452
- const { viewportWidth } = chunkVGU5S37T_js.useIsMobile();
22452
+ const { viewportWidth } = chunkYQ67KAQR_js.useIsMobile();
22453
22453
  const gridPlan = pptx.getDenseGridLayoutPlan(viewportWidth);
22454
22454
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
22455
22455
  const stickyGutterClass = gridPlan.stickyFirstColumn ? "sticky left-0 z-10" : "";
@@ -22613,7 +22613,7 @@ function TableCellPatternFill({
22613
22613
  canEdit,
22614
22614
  onUpdateCellStyle
22615
22615
  }) {
22616
- const { t } = chunk5DBKW7F3_js.useTranslation();
22616
+ const { t } = chunk73S5EOD3_js.useTranslation();
22617
22617
  const commitRecentColor = useRecentColorCommit();
22618
22618
  const translate = (key) => t(key);
22619
22619
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -22668,7 +22668,7 @@ function TableCellAdvancedFill({
22668
22668
  canEdit,
22669
22669
  onUpdateCellStyle
22670
22670
  }) {
22671
- const { t } = chunk5DBKW7F3_js.useTranslation();
22671
+ const { t } = chunk73S5EOD3_js.useTranslation();
22672
22672
  const fillMode = cellStyle.fillMode ?? "solid";
22673
22673
  const handleFillModeChange = (mode) => {
22674
22674
  const next = mode;
@@ -22756,7 +22756,7 @@ function GradientControls({
22756
22756
  canEdit,
22757
22757
  onUpdateCellStyle
22758
22758
  }) {
22759
- const { t } = chunk5DBKW7F3_js.useTranslation();
22759
+ const { t } = chunk73S5EOD3_js.useTranslation();
22760
22760
  const commitRecentColor = useRecentColorCommit();
22761
22761
  const stops = cellStyle.gradientFillStops ?? [];
22762
22762
  const gradType = cellStyle.gradientFillType ?? "linear";
@@ -22854,7 +22854,7 @@ function TableCellColorField({
22854
22854
  disabled,
22855
22855
  onCommit
22856
22856
  }) {
22857
- const hex = chunk5DBKW7F3_js.normalizeHexColor(value, fallback);
22857
+ const hex = chunk73S5EOD3_js.normalizeHexColor(value, fallback);
22858
22858
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
22859
22859
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
22860
22860
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -22884,7 +22884,7 @@ function TableCellFormattingPanel({
22884
22884
  onUpdateTableData,
22885
22885
  onUpdateMergeRows
22886
22886
  }) {
22887
- const { t } = chunk5DBKW7F3_js.useTranslation();
22887
+ const { t } = chunk73S5EOD3_js.useTranslation();
22888
22888
  const { rowIndex, columnIndex } = tableEditorState;
22889
22889
  const cell = td.rows[rowIndex]?.cells[columnIndex];
22890
22890
  if (!cell) {
@@ -22962,7 +22962,7 @@ function TableCellFormattingPanel({
22962
22962
  {
22963
22963
  type: "button",
22964
22964
  disabled: !canEdit,
22965
- className: chunk5DBKW7F3_js.cn(
22965
+ className: chunk73S5EOD3_js.cn(
22966
22966
  "px-2 py-1 rounded text-[11px] transition-colors",
22967
22967
  cls,
22968
22968
  cs[key] ? "bg-primary text-white" : "bg-muted hover:bg-accent"
@@ -22981,7 +22981,7 @@ function TableCellFormattingPanel({
22981
22981
  {
22982
22982
  type: "button",
22983
22983
  disabled: !canEdit,
22984
- className: chunk5DBKW7F3_js.cn(
22984
+ className: chunk73S5EOD3_js.cn(
22985
22985
  "px-2 py-1 rounded text-[11px] transition-colors",
22986
22986
  cs.align === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
22987
22987
  ),
@@ -22999,7 +22999,7 @@ function TableCellFormattingPanel({
22999
22999
  {
23000
23000
  type: "button",
23001
23001
  disabled: !canEdit,
23002
- className: chunk5DBKW7F3_js.cn(
23002
+ className: chunk73S5EOD3_js.cn(
23003
23003
  "px-2 py-1 rounded text-[11px] transition-colors",
23004
23004
  cs.vAlign === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
23005
23005
  ),
@@ -23022,7 +23022,7 @@ function TableCellFormattingPanel({
23022
23022
  DebouncedColorInput,
23023
23023
  {
23024
23024
  disabled: !canEdit,
23025
- value: chunk5DBKW7F3_js.normalizeHexColor(cs[colorKey], "#374151"),
23025
+ value: chunk73S5EOD3_js.normalizeHexColor(cs[colorKey], "#374151"),
23026
23026
  className: "w-7 h-6 rounded border border-border bg-transparent cursor-pointer shrink-0",
23027
23027
  onCommit: (hex) => updateCellStyle({ [colorKey]: hex })
23028
23028
  }
@@ -23032,7 +23032,7 @@ function TableCellFormattingPanel({
23032
23032
  {
23033
23033
  type: "number",
23034
23034
  disabled: !canEdit,
23035
- className: chunk5DBKW7F3_js.cn(INPUT2, "w-14"),
23035
+ className: chunk73S5EOD3_js.cn(INPUT2, "w-14"),
23036
23036
  min: 0,
23037
23037
  max: 10,
23038
23038
  value: pptx.inspectorNumber(cs[widthKey], 1),
@@ -23048,7 +23048,7 @@ function TableCellFormattingPanel({
23048
23048
  {
23049
23049
  type: "button",
23050
23050
  disabled: !canEdit,
23051
- className: chunk5DBKW7F3_js.cn(BTN2, "text-center"),
23051
+ className: chunk73S5EOD3_js.cn(BTN2, "text-center"),
23052
23052
  onClick: () => {
23053
23053
  const newRows = pptx.computeMergeCellRight(td, rowIndex, columnIndex);
23054
23054
  if (newRows) {
@@ -23063,7 +23063,7 @@ function TableCellFormattingPanel({
23063
23063
  {
23064
23064
  type: "button",
23065
23065
  disabled: !canEdit,
23066
- className: chunk5DBKW7F3_js.cn(BTN2, "text-center"),
23066
+ className: chunk73S5EOD3_js.cn(BTN2, "text-center"),
23067
23067
  onClick: () => {
23068
23068
  const newRows = pptx.computeMergeCellDown(td, rowIndex, columnIndex);
23069
23069
  if (newRows) {
@@ -23078,7 +23078,7 @@ function TableCellFormattingPanel({
23078
23078
  {
23079
23079
  type: "button",
23080
23080
  disabled: !canEdit,
23081
- className: chunk5DBKW7F3_js.cn(BTN2, "text-center"),
23081
+ className: chunk73S5EOD3_js.cn(BTN2, "text-center"),
23082
23082
  onClick: () => {
23083
23083
  const newRows = pptx.computeSplitCell(td, rowIndex, columnIndex);
23084
23084
  if (newRows) {
@@ -23097,7 +23097,7 @@ function TableStyleEditorFields({
23097
23097
  canEdit,
23098
23098
  onEdit
23099
23099
  }) {
23100
- const { t } = chunk5DBKW7F3_js.useTranslation();
23100
+ const { t } = chunk73S5EOD3_js.useTranslation();
23101
23101
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
23102
23102
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
23103
23103
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.tableStyleEditor.fillSection") }),
@@ -23202,7 +23202,7 @@ function BorderSideRow({
23202
23202
  canEdit,
23203
23203
  onEdit
23204
23204
  }) {
23205
- const { t } = chunk5DBKW7F3_js.useTranslation();
23205
+ const { t } = chunk73S5EOD3_js.useTranslation();
23206
23206
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-[11px]", children: [
23207
23207
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-28 shrink-0 text-muted-foreground", children: t(pptx.TABLE_STYLE_BORDER_SIDE_LABEL_KEYS[side]) }),
23208
23208
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -23259,7 +23259,7 @@ function TableStyleEditor({
23259
23259
  onAssignStyle,
23260
23260
  onClose
23261
23261
  }) {
23262
- const { t } = chunk5DBKW7F3_js.useTranslation();
23262
+ const { t } = chunk73S5EOD3_js.useTranslation();
23263
23263
  const themeColorMap = useThemeColorMap();
23264
23264
  const [activeStyleId, setActiveStyleId] = React108.useState(
23265
23265
  styleId ? pptx$1.normalizeTableStyleGuid(styleId) : ""
@@ -23351,7 +23351,7 @@ function TablePropertiesPanel({
23351
23351
  onTableStyleMapChange,
23352
23352
  onDeleteTableStyle
23353
23353
  }) {
23354
- const { t } = chunk5DBKW7F3_js.useTranslation();
23354
+ const { t } = chunk73S5EOD3_js.useTranslation();
23355
23355
  const [showStyleEditor, setShowStyleEditor] = React108.useState(false);
23356
23356
  const td = tableElement.tableData;
23357
23357
  if (!td) {
@@ -23433,7 +23433,7 @@ function TablePropertiesPanel({
23433
23433
  ] }),
23434
23434
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
23435
23435
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.table.stylePresets") }),
23436
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunk5DBKW7F3_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23436
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunk73S5EOD3_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23437
23437
  "button",
23438
23438
  {
23439
23439
  type: "button",
@@ -23581,7 +23581,7 @@ function ElementInspectorBody({
23581
23581
  onUpdateTextStyle,
23582
23582
  onMoveLayer
23583
23583
  }) {
23584
- const { t } = chunk5DBKW7F3_js.useTranslation();
23584
+ const { t } = chunk73S5EOD3_js.useTranslation();
23585
23585
  const isLocked = pptx.isElementLocked(selectedElement);
23586
23586
  const handleToggleLock = () => {
23587
23587
  if (!canEdit) {
@@ -23731,7 +23731,7 @@ function CommentMentionTextarea({
23731
23731
  className,
23732
23732
  ariaLabel
23733
23733
  }) {
23734
- const { t } = chunk5DBKW7F3_js.useTranslation();
23734
+ const { t } = chunk73S5EOD3_js.useTranslation();
23735
23735
  const textareaRef = React108.useRef(null);
23736
23736
  const [caret, setCaret] = React108.useState(value.length);
23737
23737
  const [highlighted, setHighlighted] = React108.useState(0);
@@ -23820,7 +23820,7 @@ function CommentMentionTextarea({
23820
23820
  "data-testid": "pptx-comment-mention-option",
23821
23821
  role: "option",
23822
23822
  "aria-selected": index === safeHighlighted,
23823
- className: chunk5DBKW7F3_js.cn(
23823
+ className: chunk73S5EOD3_js.cn(
23824
23824
  "block w-full px-2 py-1 text-left text-[11px] hover:bg-accent",
23825
23825
  index === safeHighlighted && "bg-accent"
23826
23826
  ),
@@ -23867,7 +23867,7 @@ function InspectorCommentReplyForm({
23867
23867
  onSubmit,
23868
23868
  onCancel
23869
23869
  }) {
23870
- const { t } = chunk5DBKW7F3_js.useTranslation();
23870
+ const { t } = chunk73S5EOD3_js.useTranslation();
23871
23871
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 space-y-1.5 pl-3 border-l-2 border-l-primary/40", children: [
23872
23872
  /* @__PURE__ */ jsxRuntime.jsx(
23873
23873
  CommentMentionTextarea,
@@ -23933,7 +23933,7 @@ function InspectorCommentRow({
23933
23933
  onSelectElement,
23934
23934
  depth = 0
23935
23935
  }) {
23936
- const { t } = chunk5DBKW7F3_js.useTranslation();
23936
+ const { t } = chunk73S5EOD3_js.useTranslation();
23937
23937
  const isEditing = editingCommentId === comment.id;
23938
23938
  const isReplying = replyingToCommentId === comment.id;
23939
23939
  const replyDraft = replyDraftByCommentId[comment.id] ?? "";
@@ -23943,7 +23943,7 @@ function InspectorCommentRow({
23943
23943
  return /* @__PURE__ */ jsxRuntime.jsxs(
23944
23944
  "div",
23945
23945
  {
23946
- className: chunk5DBKW7F3_js.cn(
23946
+ className: chunk73S5EOD3_js.cn(
23947
23947
  "rounded border border-border bg-card p-2",
23948
23948
  depth > 0 && "ml-3 border-l-2 border-l-primary/40"
23949
23949
  ),
@@ -23957,7 +23957,7 @@ function InspectorCommentRow({
23957
23957
  t("pptx.comments.resolved")
23958
23958
  ] })
23959
23959
  ] }),
23960
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunk5DBKW7F3_js.formatCommentTimestamp(comment.createdAt) })
23960
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunk73S5EOD3_js.formatCommentTimestamp(comment.createdAt) })
23961
23961
  ] }),
23962
23962
  comment.elementId && (targetElement ? /* @__PURE__ */ jsxRuntime.jsxs(
23963
23963
  "button",
@@ -23965,12 +23965,12 @@ function InspectorCommentRow({
23965
23965
  type: "button",
23966
23966
  className: "mt-1 inline-flex items-center gap-1 rounded bg-primary/20 px-1.5 py-0.5 text-[10px] text-primary hover:bg-primary/30 transition-colors",
23967
23967
  title: t("pptx.comments.commentingOn", {
23968
- element: chunk5DBKW7F3_js.getElementLabel(targetElement)
23968
+ element: chunk73S5EOD3_js.getElementLabel(targetElement)
23969
23969
  }),
23970
23970
  onClick: () => onSelectElement(targetElement.id),
23971
23971
  children: [
23972
23972
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
23973
- chunk5DBKW7F3_js.getElementLabel(targetElement)
23973
+ chunk73S5EOD3_js.getElementLabel(targetElement)
23974
23974
  ]
23975
23975
  }
23976
23976
  ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mt-1 inline-flex items-center gap-1 rounded bg-muted/60 px-1.5 py-0.5 text-[10px] text-muted-foreground", children: t("pptx.comments.deletedElement") })),
@@ -24039,7 +24039,7 @@ function InspectorCommentRow({
24039
24039
  "button",
24040
24040
  {
24041
24041
  type: "button",
24042
- className: chunk5DBKW7F3_js.cn(
24042
+ className: chunk73S5EOD3_js.cn(
24043
24043
  "inline-flex items-center justify-center p-1.5 border-l border-border transition-colors",
24044
24044
  comment.resolved ? "bg-green-900/40 text-green-300 hover:bg-green-900/60" : "hover:bg-accent text-foreground hover:text-foreground"
24045
24045
  ),
@@ -24145,7 +24145,7 @@ function InspectorCommentsSection({
24145
24145
  onSubmitReply,
24146
24146
  onSelectElement
24147
24147
  }) {
24148
- const { t } = chunk5DBKW7F3_js.useTranslation();
24148
+ const { t } = chunk73S5EOD3_js.useTranslation();
24149
24149
  const HEADING_CLS = "text-[11px] uppercase tracking-wide text-muted-foreground";
24150
24150
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
24151
24151
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
@@ -24182,7 +24182,7 @@ function InspectorCommentsSection({
24182
24182
  selectedElement && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-1 rounded bg-primary/20 px-1.5 py-0.5 text-[10px] text-primary", children: [
24183
24183
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
24184
24184
  t("pptx.comments.commentingOn", {
24185
- element: chunk5DBKW7F3_js.getElementLabel(selectedElement)
24185
+ element: chunk73S5EOD3_js.getElementLabel(selectedElement)
24186
24186
  })
24187
24187
  ] }),
24188
24188
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -24193,7 +24193,7 @@ function InspectorCommentsSection({
24193
24193
  authors: commentAuthors,
24194
24194
  rows: 2,
24195
24195
  placeholder: selectedElement ? t("pptx.comments.addOnElement", {
24196
- element: chunk5DBKW7F3_js.getElementLabel(selectedElement)
24196
+ element: chunk73S5EOD3_js.getElementLabel(selectedElement)
24197
24197
  }) : t("pptx.comments.addPlaceholder"),
24198
24198
  className: "w-full bg-muted border border-border rounded px-2 py-1 text-xs resize-y outline-none focus:border-primary",
24199
24199
  onChange: onSetCommentDraft,
@@ -24206,7 +24206,7 @@ function InspectorCommentsSection({
24206
24206
  type: "button",
24207
24207
  onClick: onAddComment,
24208
24208
  disabled: !commentDraft.trim(),
24209
- className: chunk5DBKW7F3_js.cn(
24209
+ className: chunk73S5EOD3_js.cn(
24210
24210
  "w-full inline-flex items-center justify-center gap-1 rounded px-2 py-1 text-[11px] font-medium transition-colors max-md:min-h-[44px]!",
24211
24211
  commentDraft.trim() ? "bg-primary hover:bg-primary/80 text-white" : "bg-muted text-muted-foreground cursor-not-allowed"
24212
24212
  ),
@@ -24231,7 +24231,7 @@ function InspectorElementsTab({
24231
24231
  onSelectElement,
24232
24232
  onUpdateSlide
24233
24233
  }) {
24234
- const { t } = chunk5DBKW7F3_js.useTranslation();
24234
+ const { t } = chunk73S5EOD3_js.useTranslation();
24235
24235
  const toggleHidden = (elementId2) => {
24236
24236
  const elements2 = activeSlide?.elements;
24237
24237
  if (!canEdit || !elements2) {
@@ -24247,13 +24247,13 @@ function InspectorElementsTab({
24247
24247
  };
24248
24248
  if (!activeSlide) {
24249
24249
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
24250
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk5DBKW7F3_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24250
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk73S5EOD3_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24251
24251
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground italic", children: t("pptx.inspector.noSlideSelected") })
24252
24252
  ] });
24253
24253
  }
24254
24254
  const elements = activeSlide.elements || [];
24255
24255
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", "data-pptx-elements-tab": true, children: [
24256
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk5DBKW7F3_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24256
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk73S5EOD3_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24257
24257
  [...elements].reverse().map((el, reversedIndex) => {
24258
24258
  const index = elements.length - 1 - reversedIndex;
24259
24259
  const selected = selectedElementId === el.id || selectedElementIds.includes(el.id);
@@ -24261,7 +24261,7 @@ function InspectorElementsTab({
24261
24261
  "div",
24262
24262
  {
24263
24263
  title: `${el.type} - ${el.id}`,
24264
- className: chunk5DBKW7F3_js.cn(
24264
+ className: chunk73S5EOD3_js.cn(
24265
24265
  "flex items-center gap-2 px-2 py-1 rounded cursor-pointer transition-colors",
24266
24266
  selected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground"
24267
24267
  ),
@@ -24297,8 +24297,8 @@ function InspectorPaneHeader({
24297
24297
  onSetActiveTab,
24298
24298
  onClose
24299
24299
  }) {
24300
- const { t } = chunk5DBKW7F3_js.useTranslation();
24301
- const { viewportWidth } = chunkVGU5S37T_js.useIsMobile();
24300
+ const { t } = chunk73S5EOD3_js.useTranslation();
24301
+ const { viewportWidth } = chunkYQ67KAQR_js.useIsMobile();
24302
24302
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
24303
24303
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
24304
24304
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -24321,7 +24321,7 @@ function InspectorPaneHeader({
24321
24321
  type: "button",
24322
24322
  title: t(labelKey),
24323
24323
  style: touchBtnStyle,
24324
- className: chunk5DBKW7F3_js.cn(
24324
+ className: chunk73S5EOD3_js.cn(
24325
24325
  "flex items-center justify-center gap-1 px-2 py-1 rounded text-[11px] transition-colors",
24326
24326
  activeTab === key ? "bg-primary text-white" : "text-muted-foreground hover:text-foreground hover:bg-accent"
24327
24327
  ),
@@ -24381,7 +24381,7 @@ function CustomPropertiesBlock({
24381
24381
  canEdit,
24382
24382
  onUpdate
24383
24383
  }) {
24384
- const { t } = chunk5DBKW7F3_js.useTranslation();
24384
+ const { t } = chunk73S5EOD3_js.useTranslation();
24385
24385
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
24386
24386
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
24387
24387
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.documentProperties.custom.heading") }),
@@ -24435,7 +24435,7 @@ function CustomPropertiesBlock({
24435
24435
  "button",
24436
24436
  {
24437
24437
  type: "button",
24438
- className: chunk5DBKW7F3_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24438
+ className: chunk73S5EOD3_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24439
24439
  onClick: () => onUpdate(customProperties.filter((_, i) => i !== index)),
24440
24440
  children: "\xD7"
24441
24441
  }
@@ -24448,7 +24448,7 @@ function NotesHandoutCard({
24448
24448
  notesMaster,
24449
24449
  handoutMaster
24450
24450
  }) {
24451
- const { t } = chunk5DBKW7F3_js.useTranslation();
24451
+ const { t } = chunk73S5EOD3_js.useTranslation();
24452
24452
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24453
24453
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.notesHandoutHeading") }),
24454
24454
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px] text-muted-foreground", children: [
@@ -24485,7 +24485,7 @@ function DocumentPropertiesCard({
24485
24485
  onUpdateAppProperties,
24486
24486
  onUpdateCustomProperties
24487
24487
  }) {
24488
- const { t } = chunk5DBKW7F3_js.useTranslation();
24488
+ const { t } = chunk73S5EOD3_js.useTranslation();
24489
24489
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24490
24490
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.documentHeading") }),
24491
24491
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px] text-muted-foreground", children: [
@@ -24539,7 +24539,7 @@ function DocumentPropertiesCard({
24539
24539
  function SlideSizeRescalePrompt({
24540
24540
  onChoose
24541
24541
  }) {
24542
- const { t } = chunk5DBKW7F3_js.useTranslation();
24542
+ const { t } = chunk73S5EOD3_js.useTranslation();
24543
24543
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5 rounded border border-border bg-muted/40 p-2 text-[11px]", children: [
24544
24544
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium", children: t("pptx.slideSize.rescaleTitle") }),
24545
24545
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground", children: t("pptx.slideSize.rescaleDescription") }),
@@ -24581,7 +24581,7 @@ function SlideSizeCard({
24581
24581
  onUpdateSlideSize,
24582
24582
  hasContent
24583
24583
  }) {
24584
- const { t } = chunk5DBKW7F3_js.useTranslation();
24584
+ const { t } = chunk73S5EOD3_js.useTranslation();
24585
24585
  const selection = pptx.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize });
24586
24586
  const presetDisabled = !canEdit || !onUpdateSlideSize;
24587
24587
  const [pendingSize, setPendingSize] = React108.useState(null);
@@ -24692,7 +24692,7 @@ function PresentationSettingsCard({
24692
24692
  canEdit,
24693
24693
  onUpdate
24694
24694
  }) {
24695
- const { t } = chunk5DBKW7F3_js.useTranslation();
24695
+ const { t } = chunk73S5EOD3_js.useTranslation();
24696
24696
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CARD2} pptx-editor-presentation-card`, children: [
24697
24697
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.slideInspector.presentation") }),
24698
24698
  /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "presentation-fields", className: "space-y-1.5 text-[11px]", children: [
@@ -24763,7 +24763,7 @@ function PresentationSettingsCard({
24763
24763
  min: 1,
24764
24764
  max: 16,
24765
24765
  disabled: !canEdit,
24766
- className: chunk5DBKW7F3_js.cn(INPUT2, "w-20"),
24766
+ className: chunk73S5EOD3_js.cn(INPUT2, "w-20"),
24767
24767
  value: pptx.printPropertiesSlidesPerPage(presentationProperties.printProperties),
24768
24768
  onChange: (e) => onUpdate({
24769
24769
  printProperties: pptx.withSlidesPerPage(
@@ -24784,7 +24784,7 @@ function ThemeSelectorCard({
24784
24784
  canEdit,
24785
24785
  onApplyTheme
24786
24786
  }) {
24787
- const { t } = chunk5DBKW7F3_js.useTranslation();
24787
+ const { t } = chunk73S5EOD3_js.useTranslation();
24788
24788
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24789
24789
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.themeHeading") }),
24790
24790
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px]", children: [
@@ -24847,7 +24847,7 @@ function SlideThemeOverridePanel({
24847
24847
  canEdit,
24848
24848
  onUpdateSlide
24849
24849
  }) {
24850
- const { t } = chunk5DBKW7F3_js.useTranslation();
24850
+ const { t } = chunk73S5EOD3_js.useTranslation();
24851
24851
  const translate = React108.useCallback((key) => t(key), [t]);
24852
24852
  const override = activeSlide?.clrMapOverride;
24853
24853
  const isOverrideActive = override !== void 0;
@@ -24954,7 +24954,7 @@ function DirectionPicker({
24954
24954
  disabled,
24955
24955
  onChange
24956
24956
  }) {
24957
- const { t } = chunk5DBKW7F3_js.useTranslation();
24957
+ const { t } = chunk73S5EOD3_js.useTranslation();
24958
24958
  if (directions.length <= 3) {
24959
24959
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-1", children: directions.map((dir) => /* @__PURE__ */ jsxRuntime.jsx(
24960
24960
  "button",
@@ -24996,10 +24996,10 @@ function TransitionPreview({
24996
24996
  const previewRef = React108.useRef(null);
24997
24997
  const [playing, setPlaying] = React108.useState(false);
24998
24998
  const [animKey, setAnimKey] = React108.useState(0);
24999
- const { t } = chunk5DBKW7F3_js.useTranslation();
24999
+ const { t } = chunk73S5EOD3_js.useTranslation();
25000
25000
  const durationMs = transition.durationMs ?? 500;
25001
25001
  const animations = React108.useMemo(
25002
- () => chunkVGU5S37T_js.getSlideTransitionAnimations(
25002
+ () => chunkYQ67KAQR_js.getSlideTransitionAnimations(
25003
25003
  transition.type,
25004
25004
  durationMs,
25005
25005
  transition.direction,
@@ -25068,7 +25068,7 @@ function TransitionPreview({
25068
25068
  ]
25069
25069
  }
25070
25070
  ),
25071
- /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunkVGU5S37T_js.SLIDE_TRANSITION_KEYFRAMES })
25071
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunkYQ67KAQR_js.SLIDE_TRANSITION_KEYFRAMES })
25072
25072
  ] });
25073
25073
  }
25074
25074
  var DEFAULT_DURATION_MS = 320;
@@ -25080,7 +25080,7 @@ function SlideTransitionSection({
25080
25080
  canEdit = true,
25081
25081
  onTransitionChange
25082
25082
  }) {
25083
- const { t } = chunk5DBKW7F3_js.useTranslation();
25083
+ const { t } = chunk73S5EOD3_js.useTranslation();
25084
25084
  if (!activeSlide) {
25085
25085
  return null;
25086
25086
  }
@@ -25111,7 +25111,7 @@ function SlideTransitionSection({
25111
25111
  type: e.target.value
25112
25112
  }),
25113
25113
  className: "bg-muted border border-border rounded px-2 py-1 max-md:min-h-[44px]!",
25114
- children: chunk5DBKW7F3_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25114
+ children: chunk73S5EOD3_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25115
25115
  }
25116
25116
  )
25117
25117
  ] }),
@@ -25269,7 +25269,7 @@ function TagsSection({
25269
25269
  onUpdateTagCollections,
25270
25270
  canEdit
25271
25271
  }) {
25272
- const { t } = chunk5DBKW7F3_js.useTranslation();
25272
+ const { t } = chunk73S5EOD3_js.useTranslation();
25273
25273
  const [collapsed, setCollapsed] = React108.useState(true);
25274
25274
  const allTags = pptx.flattenTagCollections(tagCollections);
25275
25275
  const updateTag = (colIdx, tagIdx, field, newValue) => {
@@ -25327,7 +25327,7 @@ function TagsSection({
25327
25327
  "button",
25328
25328
  {
25329
25329
  type: "button",
25330
- className: chunk5DBKW7F3_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25330
+ className: chunk73S5EOD3_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25331
25331
  title: t("pptx.tags.deleteTag"),
25332
25332
  onClick: () => deleteTag(tag.colIdx, tag.tagIdx),
25333
25333
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuTrash2, { className: "w-3 h-3" })
@@ -25369,7 +25369,7 @@ function PresentationPropertiesPanel({
25369
25369
  tagCollections,
25370
25370
  onUpdateTagCollections
25371
25371
  }) {
25372
- const { t } = chunk5DBKW7F3_js.useTranslation();
25372
+ const { t } = chunk73S5EOD3_js.useTranslation();
25373
25373
  const handleTransitionChange = React108__default.default.useCallback(
25374
25374
  (updates) => {
25375
25375
  onUpdateSlide({
@@ -25456,7 +25456,7 @@ function PresentationPropertiesPanel({
25456
25456
  canEdit
25457
25457
  }
25458
25458
  ) }),
25459
- activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-inspector-card": "slide", className: chunk5DBKW7F3_js.cn(CARD2, "space-y-1"), children: [
25459
+ activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-inspector-card": "slide", className: chunk73S5EOD3_js.cn(CARD2, "space-y-1"), children: [
25460
25460
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: "Slide" }),
25461
25461
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[11px] text-muted-foreground", children: [
25462
25462
  activeSlide.elements?.length ?? 0,
@@ -25474,17 +25474,17 @@ function SlideBackgroundPanel({
25474
25474
  onSetTemplateBackground,
25475
25475
  onGetTemplateBackgroundColor
25476
25476
  }) {
25477
- const { t } = chunk5DBKW7F3_js.useTranslation();
25477
+ const { t } = chunk73S5EOD3_js.useTranslation();
25478
25478
  const bgImageInputRef = React108.useRef(null);
25479
25479
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
25480
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk5DBKW7F3_js.cn(CARD2, "space-y-2"), children: [
25480
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk73S5EOD3_js.cn(CARD2, "space-y-2"), children: [
25481
25481
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.viewer.background") }),
25482
25482
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
25483
25483
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-10 shrink-0", children: t("pptx.slideBackground.colour") }),
25484
25484
  /* @__PURE__ */ jsxRuntime.jsx(
25485
25485
  DebouncedColorInput,
25486
25486
  {
25487
- value: chunk5DBKW7F3_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
25487
+ value: chunk73S5EOD3_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
25488
25488
  disabled: !canEdit,
25489
25489
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25490
25490
  onCommit: (hex) => onUpdateSlide({ backgroundColor: hex })
@@ -25523,7 +25523,7 @@ function SlideBackgroundPanel({
25523
25523
  "button",
25524
25524
  {
25525
25525
  type: "button",
25526
- className: chunk5DBKW7F3_js.cn(BTN2, "flex-1 text-center"),
25526
+ className: chunk73S5EOD3_js.cn(BTN2, "flex-1 text-center"),
25527
25527
  disabled: !canEdit,
25528
25528
  onClick: () => bgImageInputRef.current?.click(),
25529
25529
  children: activeSlide.backgroundImage ? t("pptx.slideBackground.replaceImage") : t("pptx.slideBackground.chooseImage")
@@ -25556,7 +25556,7 @@ function SlideBackgroundPanel({
25556
25556
  "button",
25557
25557
  {
25558
25558
  type: "button",
25559
- className: chunk5DBKW7F3_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
25559
+ className: chunk73S5EOD3_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
25560
25560
  disabled: !pptx.slideBackgroundClearState(activeSlide, canEdit).enabled,
25561
25561
  onClick: () => onUpdateSlide(pptx.slideBackgroundClearPatch()),
25562
25562
  children: t("pptx.slideBackground.clearBackground")
@@ -25593,21 +25593,21 @@ function TemplateBackgroundCard({
25593
25593
  onSetTemplateBackground,
25594
25594
  onGetTemplateBackgroundColor
25595
25595
  }) {
25596
- const { t } = chunk5DBKW7F3_js.useTranslation();
25596
+ const { t } = chunk73S5EOD3_js.useTranslation();
25597
25597
  const rows = pptx.resolveTemplateBackgroundRows(
25598
25598
  activeSlide,
25599
25599
  slideMasters,
25600
25600
  t("pptx.master.layout"),
25601
25601
  t("pptx.master.master")
25602
25602
  );
25603
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk5DBKW7F3_js.cn(CARD2, "space-y-2"), children: [
25603
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk73S5EOD3_js.cn(CARD2, "space-y-2"), children: [
25604
25604
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.slideBackground.templateBackgroundsHeading") }),
25605
25605
  rows.layout && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
25606
25606
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-14 shrink-0 truncate", title: rows.layout.title, children: t("pptx.master.layout") }),
25607
25607
  /* @__PURE__ */ jsxRuntime.jsx(
25608
25608
  DebouncedColorInput,
25609
25609
  {
25610
- value: chunk5DBKW7F3_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
25610
+ value: chunk73S5EOD3_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
25611
25611
  disabled: !canEdit,
25612
25612
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25613
25613
  onCommit: (hex) => onSetTemplateBackground(rows.layout.path, hex)
@@ -25620,7 +25620,7 @@ function TemplateBackgroundCard({
25620
25620
  /* @__PURE__ */ jsxRuntime.jsx(
25621
25621
  DebouncedColorInput,
25622
25622
  {
25623
- value: chunk5DBKW7F3_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
25623
+ value: chunk73S5EOD3_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
25624
25624
  disabled: !canEdit,
25625
25625
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25626
25626
  onCommit: (hex) => onSetTemplateBackground(rows.master.path, hex)
@@ -25730,8 +25730,8 @@ function InspectorPane(props) {
25730
25730
  panelWidth
25731
25731
  } = props;
25732
25732
  const hasSelection = selectedElement !== null;
25733
- const { t } = chunk5DBKW7F3_js.useTranslation();
25734
- const { dragY, handlers: dragHandlers } = chunkVGU5S37T_js.useSheetDismissDrag(onClose);
25733
+ const { t } = chunk73S5EOD3_js.useTranslation();
25734
+ const { dragY, handlers: dragHandlers } = chunkYQ67KAQR_js.useSheetDismissDrag(onClose);
25735
25735
  const {
25736
25736
  animationPanelHeight,
25737
25737
  effectiveThemeOptions,
@@ -25753,7 +25753,7 @@ function InspectorPane(props) {
25753
25753
  "div",
25754
25754
  {
25755
25755
  "data-pptx-chrome": "inspector",
25756
- className: chunk5DBKW7F3_js.cn(
25756
+ className: chunk73S5EOD3_js.cn(
25757
25757
  // Shared styles
25758
25758
  "bg-background flex flex-col text-xs text-foreground shadow-xl",
25759
25759
  // Mobile: absolute bottom sheet overlay sized via dvh so it
@@ -26084,7 +26084,7 @@ function PresentationAnnotationOverlay({
26084
26084
  );
26085
26085
  }
26086
26086
  function PresentationToolbar(p) {
26087
- const { t } = chunk5DBKW7F3_js.useTranslation();
26087
+ const { t } = chunk73S5EOD3_js.useTranslation();
26088
26088
  const ref = useWebControl(
26089
26089
  {
26090
26090
  current: p.currentSlideIndex,
@@ -26143,8 +26143,8 @@ function PresentationTouchControls({
26143
26143
  onEndPresentation,
26144
26144
  hideNavigation = false
26145
26145
  }) {
26146
- const { t } = chunk5DBKW7F3_js.useTranslation();
26147
- const { isTouchDevice } = chunkVGU5S37T_js.useIsMobile();
26146
+ const { t } = chunk73S5EOD3_js.useTranslation();
26147
+ const { isTouchDevice } = chunkYQ67KAQR_js.useIsMobile();
26148
26148
  if (!isTouchDevice) {
26149
26149
  return null;
26150
26150
  }
@@ -26226,7 +26226,7 @@ function KeepAnnotationsDialog({
26226
26226
  onKeep,
26227
26227
  onDiscard
26228
26228
  }) {
26229
- const { t } = chunk5DBKW7F3_js.useTranslation();
26229
+ const { t } = chunk73S5EOD3_js.useTranslation();
26230
26230
  if (!isOpen) {
26231
26231
  return null;
26232
26232
  }
@@ -26274,7 +26274,7 @@ function PasteSpecialDialog({
26274
26274
  onCancel,
26275
26275
  onConfirm
26276
26276
  }) {
26277
- const { t } = chunk5DBKW7F3_js.useTranslation();
26277
+ const { t } = chunk73S5EOD3_js.useTranslation();
26278
26278
  const [selected, setSelected] = React108.useState("keep-source-formatting");
26279
26279
  if (!isOpen) {
26280
26280
  return null;
@@ -26332,7 +26332,7 @@ function PasteOptionsToolbar({
26332
26332
  onChoose,
26333
26333
  onDismiss
26334
26334
  }) {
26335
- const { t } = chunk5DBKW7F3_js.useTranslation();
26335
+ const { t } = chunk73S5EOD3_js.useTranslation();
26336
26336
  const [rect, setRect] = React108.useState(null);
26337
26337
  React108.useEffect(() => {
26338
26338
  const node = elementId2 ? pptx.findCanvasElementNode(document, elementId2, { canvasOnly: true }) : null;
@@ -26359,7 +26359,7 @@ function NotesPagePreview({
26359
26359
  frameSlides,
26360
26360
  maxPages = 3
26361
26361
  }) {
26362
- const { t } = chunk5DBKW7F3_js.useTranslation();
26362
+ const { t } = chunk73S5EOD3_js.useTranslation();
26363
26363
  const pages = React108.useMemo(() => pptx.computeAllNotesPages(slideIndices), [slideIndices]);
26364
26364
  const printable = React108.useMemo(() => pptx.getNotesPrintableArea(), []);
26365
26365
  const visiblePages = pages.slice(0, maxPages);
@@ -26447,15 +26447,15 @@ function PrintPreview({
26447
26447
  frameSlides,
26448
26448
  maxPages = 3
26449
26449
  }) {
26450
- const { t } = chunk5DBKW7F3_js.useTranslation();
26450
+ const { t } = chunk73S5EOD3_js.useTranslation();
26451
26451
  const pages = React108.useMemo(
26452
- () => chunk5DBKW7F3_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26452
+ () => chunk73S5EOD3_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26453
26453
  [slideIndices, slidesPerPage, orientation]
26454
26454
  );
26455
- const printable = React108.useMemo(() => chunk5DBKW7F3_js.getPrintableArea(orientation), [orientation]);
26455
+ const printable = React108.useMemo(() => chunk73S5EOD3_js.getPrintableArea(orientation), [orientation]);
26456
26456
  const visiblePages = pages.slice(0, maxPages);
26457
26457
  const isThreePerPage = slidesPerPage === 3;
26458
- const noteLineCount = chunk5DBKW7F3_js.generateNoteLineCount();
26458
+ const noteLineCount = chunk73S5EOD3_js.generateNoteLineCount();
26459
26459
  const scaledW = printable.width * PREVIEW_SCALE3;
26460
26460
  const scaledH = printable.height * PREVIEW_SCALE3;
26461
26461
  const noteAreaFraction = 0.5;
@@ -26553,7 +26553,7 @@ function PrintSettingsPanel({
26553
26553
  totalSlides,
26554
26554
  activeSlideIndex
26555
26555
  }) {
26556
- const { t } = chunk5DBKW7F3_js.useTranslation();
26556
+ const { t } = chunk73S5EOD3_js.useTranslation();
26557
26557
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 space-y-5 min-w-0", children: [
26558
26558
  /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { children: [
26559
26559
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-xs font-medium text-muted-foreground mb-2 uppercase tracking-wide", children: t("pptx.print.printWhat") }),
@@ -26789,13 +26789,13 @@ function PrintDialog({
26789
26789
  defaultSlidesPerPage,
26790
26790
  defaultFrameSlides
26791
26791
  }) {
26792
- const { t } = chunk5DBKW7F3_js.useTranslation();
26792
+ const { t } = chunk73S5EOD3_js.useTranslation();
26793
26793
  const regionRenderer = useRegionRenderer("dialog.print");
26794
- const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(onClose);
26795
- const { viewportWidth } = chunkVGU5S37T_js.useIsMobile();
26794
+ const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(onClose);
26795
+ const { viewportWidth } = chunkYQ67KAQR_js.useIsMobile();
26796
26796
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
26797
26797
  const closeBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
26798
- const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunkVGU5S37T_js.useViewerOptionsContext());
26798
+ const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunkYQ67KAQR_js.useViewerOptionsContext());
26799
26799
  const [printWhat, setPrintWhat] = React108.useState(printOptionDefaults?.printWhat ?? "slides");
26800
26800
  const [orientation, setOrientation] = React108.useState("landscape");
26801
26801
  const [colorMode, setColorMode] = React108.useState(
@@ -26979,7 +26979,7 @@ function ShowOptionsFieldset({
26979
26979
  draft,
26980
26980
  update
26981
26981
  }) {
26982
- const { t } = chunk5DBKW7F3_js.useTranslation();
26982
+ const { t } = chunk73S5EOD3_js.useTranslation();
26983
26983
  return /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "space-y-1.5", children: [
26984
26984
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-[11px] font-medium text-muted-foreground uppercase tracking-wide mb-1", children: t("pptx.slideShow.showOptions") }),
26985
26985
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
@@ -27037,7 +27037,7 @@ function ShowSlidesFieldset({
27037
27037
  slideCount,
27038
27038
  customShows
27039
27039
  }) {
27040
- const { t } = chunk5DBKW7F3_js.useTranslation();
27040
+ const { t } = chunk73S5EOD3_js.useTranslation();
27041
27041
  return /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "space-y-1.5", children: [
27042
27042
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-[11px] font-medium text-muted-foreground uppercase tracking-wide mb-1", children: t("pptx.slideShow.showSlides") }),
27043
27043
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
@@ -27147,7 +27147,7 @@ function SetUpSlideShowDialog({
27147
27147
  customShows,
27148
27148
  slideCount
27149
27149
  }) {
27150
- const { t } = chunk5DBKW7F3_js.useTranslation();
27150
+ const { t } = chunk73S5EOD3_js.useTranslation();
27151
27151
  const [draft, setDraft] = React108.useState({
27152
27152
  ...properties
27153
27153
  });
@@ -27283,16 +27283,16 @@ function BroadcastDialog({
27283
27283
  defaultUserName,
27284
27284
  defaultServerUrl
27285
27285
  }) {
27286
- const { t } = chunk5DBKW7F3_js.useTranslation();
27286
+ const { t } = chunk73S5EOD3_js.useTranslation();
27287
27287
  const regionRenderer = useRegionRenderer("dialog.broadcast");
27288
- const collab = chunkVGU5S37T_js.useCollaboration();
27288
+ const collab = chunkYQ67KAQR_js.useCollaboration();
27289
27289
  const isBroadcasting = collab !== null && collab.status !== "disconnected" && collab.status !== "error" && collab.config.role === "owner";
27290
27290
  const [roomId, setRoomId] = React108.useState("");
27291
27291
  const [userName, setUserName] = React108.useState("");
27292
27292
  const [serverUrl, setServerUrl] = React108.useState("");
27293
27293
  const [copied, setCopied] = React108.useState(false);
27294
27294
  const dialogRef = React108.useRef(null);
27295
- const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(onClose);
27295
+ const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(onClose);
27296
27296
  useModalFocus(open, dialogRef, onClose);
27297
27297
  React108.useEffect(() => {
27298
27298
  if (open && !isBroadcasting) {
@@ -27451,7 +27451,7 @@ function StartBroadcastForm({
27451
27451
  onUserNameChange,
27452
27452
  onServerUrlChange
27453
27453
  }) {
27454
- const { t } = chunk5DBKW7F3_js.useTranslation();
27454
+ const { t } = chunk73S5EOD3_js.useTranslation();
27455
27455
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
27456
27456
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] text-muted-foreground leading-relaxed", children: t("pptx.broadcast.description") }),
27457
27457
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -27527,7 +27527,7 @@ function ActiveBroadcastView({
27527
27527
  onCopyUrl,
27528
27528
  onStopBroadcast
27529
27529
  }) {
27530
- const { t } = chunk5DBKW7F3_js.useTranslation();
27530
+ const { t } = chunk73S5EOD3_js.useTranslation();
27531
27531
  const statusColor = collab.status === "connected" ? "text-green-400" : collab.status === "connecting" ? "text-yellow-400" : "text-red-400";
27532
27532
  const statusIcon = collab.status === "connected" || collab.status === "connecting" ? /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifi, { className: "w-4 h-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifiOff, { className: "w-4 h-4" });
27533
27533
  const viewerCount = collab.remoteUsers.filter((u) => u.role === "viewer").length;
@@ -27608,7 +27608,7 @@ function ActiveSessionView({
27608
27608
  onCopyRoomId,
27609
27609
  onStopCollaboration
27610
27610
  }) {
27611
- 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
+ const { t } = chunk73S5EOD3_js.useTranslation(), viewerOptions = chunkYQ67KAQR_js.useViewerOptionsContext(), statusColor = collab.status === "connected" ? "text-green-400" : collab.status === "connecting" ? "text-yellow-400" : "text-red-400", statusIcon = collab.status === "connected" || collab.status === "connecting" ? /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifi, { className: "w-4 h-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifiOff, { className: "w-4 h-4" }), sessionUsers = pptx.buildActiveSessionUsers({
27612
27612
  localUserName: activeCollaboration?.userName ?? collab.config.userName,
27613
27613
  localUserInitials: viewerOptions.general.userInitials,
27614
27614
  localUserColor: collab.config.userColor,
@@ -27706,8 +27706,8 @@ function StartSessionForm({
27706
27706
  connectionFailed,
27707
27707
  onRetry
27708
27708
  }) {
27709
- const { t } = chunk5DBKW7F3_js.useTranslation();
27710
- const { viewportWidth } = chunkVGU5S37T_js.useIsMobile();
27709
+ const { t } = chunk73S5EOD3_js.useTranslation();
27710
+ const { viewportWidth } = chunkYQ67KAQR_js.useIsMobile();
27711
27711
  const tabBtnStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
27712
27712
  const inputReadOnlyClass = preconfigured ? " opacity-70 cursor-not-allowed" : "";
27713
27713
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
@@ -27841,9 +27841,9 @@ function ShareDialog({
27841
27841
  defaultUserName,
27842
27842
  defaultServerUrl
27843
27843
  }) {
27844
- const collab = chunkVGU5S37T_js.useCollaboration();
27844
+ const collab = chunkYQ67KAQR_js.useCollaboration();
27845
27845
  const isActive = collab !== null && collab.status !== "disconnected" && collab.status !== "error";
27846
- const { t } = chunk5DBKW7F3_js.useTranslation();
27846
+ const { t } = chunk73S5EOD3_js.useTranslation();
27847
27847
  const regionRenderer = useRegionRenderer("dialog.share");
27848
27848
  const [roomId, setRoomId] = React108.useState(defaultRoomId ?? "");
27849
27849
  const [userName, setUserName] = React108.useState(defaultUserName ?? "");
@@ -27852,9 +27852,9 @@ function ShareDialog({
27852
27852
  const [invitation, setInvitation] = React108.useState("");
27853
27853
  const [copied, setCopied] = React108.useState(false);
27854
27854
  const dialogRef = React108.useRef(null);
27855
- const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(onClose);
27855
+ const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(onClose);
27856
27856
  useModalFocus(open, dialogRef, onClose);
27857
- const { viewportWidth, viewportHeight } = chunkVGU5S37T_js.useIsMobile();
27857
+ const { viewportWidth, viewportHeight } = chunkYQ67KAQR_js.useIsMobile();
27858
27858
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
27859
27859
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
27860
27860
  const stickyFooterClass = pptx.shouldStickyActionRow(viewportWidth, viewportHeight) ? "sticky bottom-0 bg-popover" : "";
@@ -28027,7 +28027,7 @@ function HyperlinkTabContent({
28027
28027
  inputCls,
28028
28028
  onEnterConfirm
28029
28029
  }) {
28030
- const { t } = chunk5DBKW7F3_js.useTranslation();
28030
+ const { t } = chunk73S5EOD3_js.useTranslation();
28031
28031
  const handleEnterKey = (e) => {
28032
28032
  if (e.key === "Enter") {
28033
28033
  onEnterConfirm();
@@ -28152,13 +28152,13 @@ function HyperlinkEditDialog({
28152
28152
  onConfirm,
28153
28153
  onCancel
28154
28154
  }) {
28155
- const { t } = chunk5DBKW7F3_js.useTranslation();
28156
- const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(onCancel);
28155
+ const { t } = chunk73S5EOD3_js.useTranslation();
28156
+ const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(onCancel);
28157
28157
  const inputRef = React108.useRef(null);
28158
- const detectedType = chunkVGU5S37T_js.detectTargetType(initialUrl, initialAction);
28159
- const emailParts = chunkVGU5S37T_js.parseEmailUrl(initialUrl || "");
28160
- const detectedSlide = chunkVGU5S37T_js.parseSlideFromUrl(initialUrl, initialAction);
28161
- const detectedVerb = initialAction ? chunkVGU5S37T_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28158
+ const detectedType = chunkYQ67KAQR_js.detectTargetType(initialUrl, initialAction);
28159
+ const emailParts = chunkYQ67KAQR_js.parseEmailUrl(initialUrl || "");
28160
+ const detectedSlide = chunkYQ67KAQR_js.parseSlideFromUrl(initialUrl, initialAction);
28161
+ const detectedVerb = initialAction ? chunkYQ67KAQR_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28162
28162
  const [targetType, setTargetType] = React108.useState(detectedType);
28163
28163
  const [url, setUrl] = React108.useState(
28164
28164
  detectedType === "email" || detectedType === "slide" || detectedType === "action" ? "" : initialUrl || ""
@@ -28189,7 +28189,7 @@ function HyperlinkEditDialog({
28189
28189
  actionVerb
28190
28190
  });
28191
28191
  };
28192
- const tabCls = (active) => chunk5DBKW7F3_js.cn(
28192
+ const tabCls = (active) => chunk73S5EOD3_js.cn(
28193
28193
  "px-3 py-1.5 text-xs rounded-t border-b-2 transition-colors",
28194
28194
  active ? "border-primary text-primary font-medium" : "border-transparent text-muted-foreground hover:text-foreground hover:border-border"
28195
28195
  );
@@ -28436,7 +28436,7 @@ function ViewerBottomPanels({
28436
28436
  notesStyle,
28437
28437
  onNotesHeightChange
28438
28438
  }) {
28439
- const { isHidden } = chunkVGU5S37T_js.useToolbarVisibility(hiddenActions);
28439
+ const { isHidden } = chunkYQ67KAQR_js.useToolbarVisibility(hiddenActions);
28440
28440
  const customization = useViewerCustomizationContext();
28441
28441
  const showNotes = pptx.isPanelVisible(customization, "notes");
28442
28442
  const notesRenderer = useRegionRenderer("notes");
@@ -28566,7 +28566,7 @@ function ViewerInspector({
28566
28566
  onPreviewElement,
28567
28567
  elementById
28568
28568
  }) {
28569
- const { t } = chunk5DBKW7F3_js.useTranslation();
28569
+ const { t } = chunk73S5EOD3_js.useTranslation();
28570
28570
  const regionRenderer = useRegionRenderer("inspector");
28571
28571
  const liveEdit = onPreviewElement ? {
28572
28572
  element: selectedElement,
@@ -28781,7 +28781,7 @@ function ViewerToolbarSection(props) {
28781
28781
  onSetSnapToShape,
28782
28782
  onSetShowGuides
28783
28783
  } = props;
28784
- const { t } = chunk5DBKW7F3_js.useTranslation();
28784
+ const { t } = chunk73S5EOD3_js.useTranslation();
28785
28785
  const customization = useViewerCustomizationContext();
28786
28786
  const handleAddAnimation = React108.useCallback(
28787
28787
  (preset, group) => {
@@ -28834,7 +28834,7 @@ function ViewerToolbarSection(props) {
28834
28834
  [activeSlide, propertyHandlers]
28835
28835
  );
28836
28836
  const scopedLayoutOptions = React108__default.default.useMemo(
28837
- () => chunkVGU5S37T_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
28837
+ () => chunkYQ67KAQR_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
28838
28838
  [s.layoutOptions, activeSlide]
28839
28839
  );
28840
28840
  const handleResetSlide = React108.useCallback(() => {
@@ -29241,14 +29241,14 @@ function ViewerToolbarSection(props) {
29241
29241
  isMobileInsertOpen: s.isMobileInsertOpen,
29242
29242
  onCloseMobileInsert: () => s.setIsMobileInsertOpen(false),
29243
29243
  slideCommentCount: activeSlide?.comments?.length ?? 0,
29244
- reviewComments: chunkVGU5S37T_js.createReviewCommentsHost({
29244
+ reviewComments: chunkYQ67KAQR_js.createReviewCommentsHost({
29245
29245
  state: s,
29246
29246
  activeSlideIndex,
29247
29247
  updateSlides: ops.updateSlides,
29248
29248
  markDirty: history.markDirty
29249
29249
  }),
29250
29250
  formatPainterActive: s.formatPainterActive,
29251
- canActivateFormatPainter: chunk5DBKW7F3_js.hasCopyableFormat(selectedElement),
29251
+ canActivateFormatPainter: chunk73S5EOD3_js.hasCopyableFormat(selectedElement),
29252
29252
  onToggleFormatPainter: onToggleFormatPainterProp ?? (() => s.setFormatPainterActive((p) => !p)),
29253
29253
  isSelectionPaneOpen: s.isSelectionPaneOpen,
29254
29254
  onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
@@ -29357,14 +29357,14 @@ function CustomShowsDialog({
29357
29357
  onRun,
29358
29358
  onClose
29359
29359
  }) {
29360
- const { t } = chunk5DBKW7F3_js.useTranslation();
29360
+ const { t } = chunk73S5EOD3_js.useTranslation();
29361
29361
  const controller = React108.useMemo(
29362
29362
  () => pptx.createCustomShowsController(customShows, activeCustomShowId),
29363
29363
  // A fresh draft per open: the host mounts this only while the dialog is open.
29364
29364
  // eslint-disable-next-line react-hooks/exhaustive-deps
29365
29365
  []
29366
29366
  );
29367
- chunkVGU5S37T_js.useController(controller);
29367
+ chunkYQ67KAQR_js.useController(controller);
29368
29368
  const view = controller.view(slides);
29369
29369
  const [active, setActive] = React108.useState(activeCustomShowId ?? "");
29370
29370
  const pickerValue = view.shows.some(({ id }) => id === active) ? active : "";
@@ -29643,8 +29643,8 @@ function EquationEditorDialog({
29643
29643
  onInsert,
29644
29644
  existingOmml
29645
29645
  }) {
29646
- const { t } = chunk5DBKW7F3_js.useTranslation();
29647
- const { panelStyle, handlers: dragHandlers } = chunkVGU5S37T_js.useModalDismissDrag(onClose);
29646
+ const { t } = chunk73S5EOD3_js.useTranslation();
29647
+ const { panelStyle, handlers: dragHandlers } = chunkYQ67KAQR_js.useModalDismissDrag(onClose);
29648
29648
  const initialLatex = React108.useMemo(() => {
29649
29649
  if (!existingOmml) {
29650
29650
  return "";
@@ -29766,7 +29766,7 @@ function EquationEditorDialog({
29766
29766
  {
29767
29767
  type: "button",
29768
29768
  onClick: () => handleTemplateClick(tmpl.latex),
29769
- className: chunk5DBKW7F3_js.cn(
29769
+ className: chunk73S5EOD3_js.cn(
29770
29770
  "flex flex-col items-center gap-1 p-2 rounded-lg border transition-colors",
29771
29771
  latex === tmpl.latex ? "border-primary bg-primary/10" : "border-border bg-muted/40 hover:bg-accent/60 hover:border-border"
29772
29772
  ),
@@ -29831,7 +29831,7 @@ function InsertSmartArtDialog({
29831
29831
  onInsert
29832
29832
  }) {
29833
29833
  const ref = React108.useRef(null);
29834
- const { t } = chunk5DBKW7F3_js.useTranslation();
29834
+ const { t } = chunk73S5EOD3_js.useTranslation();
29835
29835
  React108.useLayoutEffect(() => {
29836
29836
  if (ref.current) {
29837
29837
  ref.current.translateLabel = t;
@@ -29855,7 +29855,7 @@ function InsertChartDialog({
29855
29855
  onInsert
29856
29856
  }) {
29857
29857
  const ref = React108.useRef(null);
29858
- const { t } = chunk5DBKW7F3_js.useTranslation();
29858
+ const { t } = chunk73S5EOD3_js.useTranslation();
29859
29859
  React108.useLayoutEffect(() => {
29860
29860
  if (ref.current) {
29861
29861
  ref.current.translateLabel = t;
@@ -30362,11 +30362,11 @@ function PresentationStage({
30362
30362
  })
30363
30363
  },
30364
30364
  children: [
30365
- /* @__PURE__ */ jsxRuntime.jsx(chunkVGU5S37T_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30365
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30366
30366
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: pptx.PRESENTATION_HIT_TEST_CSS }),
30367
30367
  presentationKeyframesCss && /* @__PURE__ */ jsxRuntime.jsx("style", { children: presentationKeyframesCss }),
30368
30368
  templateElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30369
- chunkVGU5S37T_js.ElementRenderer,
30369
+ chunkYQ67KAQR_js.ElementRenderer,
30370
30370
  {
30371
30371
  element,
30372
30372
  activeSlide,
@@ -30404,7 +30404,7 @@ function PresentationStage({
30404
30404
  `tpl-${element.id}`
30405
30405
  )),
30406
30406
  activeSlide?.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30407
- chunkVGU5S37T_js.ElementRenderer,
30407
+ chunkYQ67KAQR_js.ElementRenderer,
30408
30408
  {
30409
30409
  element,
30410
30410
  activeSlide,
@@ -30457,7 +30457,7 @@ function PresentationStage({
30457
30457
  function noop() {
30458
30458
  }
30459
30459
  function PresentationContextMenu(p) {
30460
- const { t } = chunk5DBKW7F3_js.useTranslation();
30460
+ const { t } = chunk73S5EOD3_js.useTranslation();
30461
30461
  const sections = pptx.getPresentationContextMenuSections({
30462
30462
  seeAllSlides: Boolean(p.onSeeAllSlides),
30463
30463
  presenterView: Boolean(p.onShowPresenterView),
@@ -30516,7 +30516,7 @@ function PresentationTransitionMount({
30516
30516
  templateElementsBySlideId
30517
30517
  );
30518
30518
  return /* @__PURE__ */ jsxRuntime.jsx(
30519
- chunkVGU5S37T_js.PresentationTransitionOverlay,
30519
+ chunkYQ67KAQR_js.PresentationTransitionOverlay,
30520
30520
  {
30521
30521
  outgoingSlide,
30522
30522
  templateElements: templates.outgoing,
@@ -30561,9 +30561,9 @@ function ViewerCanvasArea(props) {
30561
30561
  aiHighlightOverlay,
30562
30562
  aiCanvasActive = false
30563
30563
  } = props;
30564
- const { t } = chunk5DBKW7F3_js.useTranslation();
30565
- const { isHidden } = chunkVGU5S37T_js.useToolbarVisibility(hiddenActions);
30566
- const viewerOptions = chunkVGU5S37T_js.useViewerOptionsContext();
30564
+ const { t } = chunk73S5EOD3_js.useTranslation();
30565
+ const { isHidden } = chunkYQ67KAQR_js.useToolbarVisibility(hiddenActions);
30566
+ const viewerOptions = chunkYQ67KAQR_js.useViewerOptionsContext();
30567
30567
  const outlineAuthoring = useOutlineAuthoring({
30568
30568
  state: s,
30569
30569
  updateElement: canvasHandlers.handleUpdateSmartArtElement,
@@ -30609,9 +30609,9 @@ function ViewerCanvasArea(props) {
30609
30609
  );
30610
30610
  const handleHyperlinkClick = React108.useCallback(
30611
30611
  (url) => {
30612
- if (chunk5DBKW7F3_js.isPpactionUrl(url)) {
30612
+ if (chunk73S5EOD3_js.isPpactionUrl(url)) {
30613
30613
  if (mode === "present") {
30614
- const parsed = chunk5DBKW7F3_js.parsePpactionUrl(url);
30614
+ const parsed = chunk73S5EOD3_js.parsePpactionUrl(url);
30615
30615
  if (parsed) {
30616
30616
  const action = {
30617
30617
  action: parsed.action,
@@ -30696,7 +30696,7 @@ function ViewerCanvasArea(props) {
30696
30696
  s.setActiveSlideIndex((i) => Math.max(0, i - 1));
30697
30697
  }
30698
30698
  }, [mode, presentation, s]);
30699
- const swipe = chunkVGU5S37T_js.useSwipeNavigation({
30699
+ const swipe = chunkYQ67KAQR_js.useSwipeNavigation({
30700
30700
  enabled: swipeEnabled,
30701
30701
  onNext: handleSwipeNext,
30702
30702
  onPrev: handleSwipePrev
@@ -30882,14 +30882,14 @@ function ViewerCanvasArea(props) {
30882
30882
  outlineAuthoring,
30883
30883
  collaborationOverlay: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30884
30884
  /* @__PURE__ */ jsxRuntime.jsx(
30885
- chunkVGU5S37T_js.RemoteSelectionOverlay,
30885
+ chunkYQ67KAQR_js.RemoteSelectionOverlay,
30886
30886
  {
30887
30887
  elements: effectiveSlide?.elements ?? [],
30888
30888
  activeSlideIndex
30889
30889
  }
30890
30890
  ),
30891
30891
  /* @__PURE__ */ jsxRuntime.jsx(
30892
- chunkVGU5S37T_js.CollaborationCursorOverlay,
30892
+ chunkYQ67KAQR_js.CollaborationCursorOverlay,
30893
30893
  {
30894
30894
  activeSlideIndex,
30895
30895
  canvasWidth: canvasSize.width,
@@ -31126,8 +31126,8 @@ function AiChangeOverlay({ batch, activeSlideIndex }) {
31126
31126
  ] });
31127
31127
  }
31128
31128
  function ChartFormatPanel() {
31129
- const { t } = chunk5DBKW7F3_js.useTranslation();
31130
- const commands = chunkVGU5S37T_js.useChartFormatContext();
31129
+ const { t } = chunk73S5EOD3_js.useTranslation();
31130
+ const commands = chunkYQ67KAQR_js.useChartFormatContext();
31131
31131
  const ref = React108.useRef(null);
31132
31132
  const chart = commands?.chart;
31133
31133
  const chartData = chart?.type === "chart" ? chart.chartData : void 0;
@@ -31162,7 +31162,7 @@ function ChartFormatPanel() {
31162
31162
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-chart-format-pane", { ref, "data-testid": "chart-format-pane" });
31163
31163
  }
31164
31164
  function ThemeEditorPanel({ theme, canEdit, onApply, onClose }) {
31165
- const { t } = chunk5DBKW7F3_js.useTranslation();
31165
+ const { t } = chunk73S5EOD3_js.useTranslation();
31166
31166
  const ref = React108.useRef(null);
31167
31167
  React108.useEffect(() => {
31168
31168
  const node = ref.current;
@@ -31199,8 +31199,8 @@ function MobileDismissSheet({
31199
31199
  className,
31200
31200
  children
31201
31201
  }) {
31202
- const { t } = chunk5DBKW7F3_js.useTranslation();
31203
- const { dragY, handlers } = chunkVGU5S37T_js.useSheetDismissDrag(onClose);
31202
+ const { t } = chunk73S5EOD3_js.useTranslation();
31203
+ const { dragY, handlers } = chunkYQ67KAQR_js.useSheetDismissDrag(onClose);
31204
31204
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31205
31205
  /* @__PURE__ */ jsxRuntime.jsx(
31206
31206
  "button",
@@ -31469,7 +31469,7 @@ function ThemeThumbnail({
31469
31469
  {
31470
31470
  type: "button",
31471
31471
  onClick,
31472
- className: chunk5DBKW7F3_js.cn(
31472
+ className: chunk73S5EOD3_js.cn(
31473
31473
  "group relative flex flex-col rounded-lg border-2 transition-all overflow-hidden",
31474
31474
  selected ? "border-primary shadow-lg scale-[1.02]" : "border-border hover:border-primary/50 hover:shadow-md"
31475
31475
  ),
@@ -31500,7 +31500,7 @@ function ThemeGallery({
31500
31500
  onApplyTheme,
31501
31501
  onImportTheme
31502
31502
  }) {
31503
- const { t } = chunk5DBKW7F3_js.useTranslation();
31503
+ const { t } = chunk73S5EOD3_js.useTranslation();
31504
31504
  const [selectedTheme, setSelectedTheme] = React108.useState(currentTheme ?? null);
31505
31505
  const fileInputRef = React108.useRef(null);
31506
31506
  React108.useEffect(() => {
@@ -31637,8 +31637,8 @@ function ViewerSidePanels(props) {
31637
31637
  aiBridge,
31638
31638
  aiPanel
31639
31639
  } = props;
31640
- const aiAssistant = chunkPNDORR6S_js.aiAssistants.resolve(aiConfig);
31641
- const AiPanel = aiAssistant?.panel ?? chunkPNDORR6S_js.AiChatPanelLazy;
31640
+ const aiAssistant = chunkUC57KUGO_js.aiAssistants.resolve(aiConfig);
31641
+ const AiPanel = aiAssistant?.panel ?? chunkUC57KUGO_js.AiChatPanelLazy;
31642
31642
  const handleSetSlideSize = (size, rescaleMode) => {
31643
31643
  if (rescaleMode && s.slideSizeEmu) {
31644
31644
  s.setSlides(pptx.scaleSlidesForSizeChange(slides, s.slideSizeEmu, size, rescaleMode));
@@ -31944,7 +31944,7 @@ function ViewerMainContent(props) {
31944
31944
  );
31945
31945
  const layoutGalleryAnchorRef = React108.useRef(null);
31946
31946
  const layoutGalleryPreviews = useLayoutPreviews(loadLayoutPreviews, layoutGalleryAnchor !== null);
31947
- 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: [
31947
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.ChartPartSelectionProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "body", className: "relative z-10 flex flex-1 min-h-0", children: [
31948
31948
  showSlidesPane && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31949
31949
  slidesPaneRenderer ? (
31950
31950
  // The rail's slot (width, collapse, resize handle) stays the viewer's.
@@ -32154,7 +32154,7 @@ function AutosaveRecoveryDialog({
32154
32154
  onDiscard,
32155
32155
  busy = false
32156
32156
  }) {
32157
- const { t } = chunk5DBKW7F3_js.useTranslation();
32157
+ const { t } = chunk73S5EOD3_js.useTranslation();
32158
32158
  if (!prompt) {
32159
32159
  return null;
32160
32160
  }
@@ -32210,7 +32210,7 @@ function CompatibilityToasts({
32210
32210
  rightInset = 0,
32211
32211
  bottomInset = 0
32212
32212
  }) {
32213
- const { t } = chunk5DBKW7F3_js.useTranslation();
32213
+ const { t } = chunk73S5EOD3_js.useTranslation();
32214
32214
  const ref = useWebControl(
32215
32215
  { toasts, rightInset, bottomInset, translate: t },
32216
32216
  {
@@ -32255,7 +32255,7 @@ function HeaderFooterPanel({
32255
32255
  onApplyToCurrent,
32256
32256
  onClose
32257
32257
  }) {
32258
- const { t } = chunk5DBKW7F3_js.useTranslation();
32258
+ const { t } = chunk73S5EOD3_js.useTranslation();
32259
32259
  const showDateTime = headerFooter.hasDateTime ?? false;
32260
32260
  const dateTimeAuto = headerFooter.dateTimeAuto ?? false;
32261
32261
  const showDateText = pptx.isHeaderFooterDateTextVisible(headerFooter);
@@ -32396,7 +32396,7 @@ function HeaderFooterPanel({
32396
32396
  ] }) });
32397
32397
  }
32398
32398
  function MobileBottomBar(p) {
32399
- const { t } = chunk5DBKW7F3_js.useTranslation();
32399
+ const { t } = chunk73S5EOD3_js.useTranslation();
32400
32400
  const handlers = {
32401
32401
  slides: p.onOpenSlides,
32402
32402
  insert: p.onOpenInsert,
@@ -32422,7 +32422,7 @@ function MobileSlidesSheet({
32422
32422
  onClose,
32423
32423
  ...sidebar
32424
32424
  }) {
32425
- const { t } = chunk5DBKW7F3_js.useTranslation();
32425
+ const { t } = chunk73S5EOD3_js.useTranslation();
32426
32426
  return /* @__PURE__ */ jsxRuntime.jsx(
32427
32427
  MobileSheet,
32428
32428
  {
@@ -32449,7 +32449,7 @@ function MobileChromeOverlay(props) {
32449
32449
  slideSectionGroups,
32450
32450
  canEdit,
32451
32451
  commentCount
32452
- } = 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 = () => {
32452
+ } = props, { keyboardInset, isKeyboardOpen } = chunkYQ67KAQR_js.useKeyboardInsets(), activeSheet = s.isMobileInsertOpen ? "insert" : s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null, closeAllSheets = () => {
32453
32453
  s.setIsSlidesPaneOpen(false);
32454
32454
  s.setIsMobileInsertOpen(false);
32455
32455
  s.setIsInspectorPaneOpen(false);
@@ -32549,7 +32549,7 @@ function MobileChromeOverlay(props) {
32549
32549
  ] });
32550
32550
  }
32551
32551
  function ReadOnlyBanner(p) {
32552
- const { t } = chunk5DBKW7F3_js.useTranslation();
32552
+ const { t } = chunk73S5EOD3_js.useTranslation();
32553
32553
  const ref = useWebControl(
32554
32554
  pptx.readOnlyBannerState(
32555
32555
  p.recommendation,
@@ -32583,7 +32583,7 @@ function RibbonCustomizationStyle({
32583
32583
  return /* @__PURE__ */ jsxRuntime.jsx("style", { "data-pptx-ribbon-customization": "", children: css });
32584
32584
  }
32585
32585
  function RunProgramNotices({ notices, onDismiss }) {
32586
- const { t } = chunk5DBKW7F3_js.useTranslation();
32586
+ const { t } = chunk73S5EOD3_js.useTranslation();
32587
32587
  if (notices.length === 0) {
32588
32588
  return null;
32589
32589
  }
@@ -32641,14 +32641,14 @@ function AddinTable({
32641
32641
  selectedId,
32642
32642
  onSelect
32643
32643
  }) {
32644
- const { t } = chunk5DBKW7F3_js.useTranslation();
32644
+ const { t } = chunk73S5EOD3_js.useTranslation();
32645
32645
  return /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
32646
32646
  /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "mb-1 text-xs font-semibold text-foreground", children: title }),
32647
32647
  rows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-2 py-1 text-xs italic text-muted-foreground", children: t("pptx.options.addIns.description") }) : /* @__PURE__ */ jsxRuntime.jsx("table", { className: "w-full border-collapse text-left", children: /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((row) => /* @__PURE__ */ jsxRuntime.jsxs(
32648
32648
  "tr",
32649
32649
  {
32650
32650
  onClick: () => onSelect(row.id),
32651
- className: chunk5DBKW7F3_js.cn(
32651
+ className: chunk73S5EOD3_js.cn(
32652
32652
  "cursor-pointer border-b border-border/40 transition-colors",
32653
32653
  selectedId === row.id ? "bg-primary/10" : "hover:bg-accent"
32654
32654
  ),
@@ -32663,7 +32663,7 @@ function AddinTable({
32663
32663
  ] });
32664
32664
  }
32665
32665
  function OptionsAddInsPane({ addinStatus }) {
32666
- const { t } = chunk5DBKW7F3_js.useTranslation();
32666
+ const { t } = chunk73S5EOD3_js.useTranslation();
32667
32667
  const [selectedId, setSelectedId] = React108.useState(null);
32668
32668
  const rows = pptx.resolveViewerAddinRows(addinStatus);
32669
32669
  const active = rows.filter((row) => row.active);
@@ -32706,7 +32706,7 @@ function CommandList({
32706
32706
  selectedId,
32707
32707
  onSelect
32708
32708
  }) {
32709
- const { t } = chunk5DBKW7F3_js.useTranslation();
32709
+ const { t } = chunk73S5EOD3_js.useTranslation();
32710
32710
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
32711
32711
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-1 text-xs font-medium text-muted-foreground", children: title }),
32712
32712
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -32727,7 +32727,7 @@ function CommandList({
32727
32727
  role: "option",
32728
32728
  "aria-selected": selectedId === id,
32729
32729
  onClick: () => onSelect(id),
32730
- className: chunk5DBKW7F3_js.cn(
32730
+ className: chunk73S5EOD3_js.cn(
32731
32731
  "flex w-full items-center rounded px-2 py-1.5 text-left text-sm transition-colors",
32732
32732
  selectedId === id ? "bg-primary/15 text-primary" : "text-foreground hover:bg-accent"
32733
32733
  ),
@@ -32745,7 +32745,7 @@ function OptionsQuickAccessPane({
32745
32745
  onQuickAccessCommandsChange,
32746
32746
  onResetQuickAccess
32747
32747
  }) {
32748
- const { t } = chunk5DBKW7F3_js.useTranslation();
32748
+ const { t } = chunk73S5EOD3_js.useTranslation();
32749
32749
  const [selectedAvailable, setSelectedAvailable] = React108.useState(null);
32750
32750
  const [selectedCurrent, setSelectedCurrent] = React108.useState(null);
32751
32751
  const current = options.quickAccess.commandIds;
@@ -32859,7 +32859,7 @@ function OptionsRibbonPane({
32859
32859
  onRibbonTabHiddenChange,
32860
32860
  onResetRibbon
32861
32861
  }) {
32862
- const { t } = chunk5DBKW7F3_js.useTranslation();
32862
+ const { t } = chunk73S5EOD3_js.useTranslation();
32863
32863
  const hidden = new Set(options.ribbon.hiddenTabIds);
32864
32864
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
32865
32865
  /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
@@ -32871,7 +32871,7 @@ function OptionsRibbonPane({
32871
32871
  return /* @__PURE__ */ jsxRuntime.jsxs(
32872
32872
  "label",
32873
32873
  {
32874
- className: chunk5DBKW7F3_js.cn(
32874
+ className: chunk73S5EOD3_js.cn(
32875
32875
  "flex items-center gap-2 rounded px-2 py-1.5",
32876
32876
  isFile ? "cursor-not-allowed opacity-60" : "cursor-pointer hover:bg-accent"
32877
32877
  ),
@@ -32905,7 +32905,7 @@ function OptionsRibbonPane({
32905
32905
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: pptx.SHORTCUT_REFERENCE_ITEMS.map((shortcut, i) => /* @__PURE__ */ jsxRuntime.jsxs(
32906
32906
  "div",
32907
32907
  {
32908
- className: chunk5DBKW7F3_js.cn(
32908
+ className: chunk73S5EOD3_js.cn(
32909
32909
  "flex items-center justify-between gap-3 rounded px-3 py-2",
32910
32910
  i % 2 === 0 ? "bg-muted/60" : ""
32911
32911
  ),
@@ -32926,12 +32926,12 @@ async function exportAiChatLogs(options) {
32926
32926
  chats,
32927
32927
  { format: options?.format, detailed: options?.detailed, now: options?.now },
32928
32928
  (filename, content, mime) => {
32929
- chunkVGU5S37T_js.downloadBlob(new Blob([content], { type: mime }), filename);
32929
+ chunkYQ67KAQR_js.downloadBlob(new Blob([content], { type: mime }), filename);
32930
32930
  }
32931
32931
  );
32932
32932
  }
32933
32933
  function SettingsAiTab({ store }) {
32934
- const { t } = chunk5DBKW7F3_js.useTranslation();
32934
+ const { t } = chunk73S5EOD3_js.useTranslation();
32935
32935
  const activeStore = React108.useMemo(() => store ?? host.createChatHistoryStore(), [store]);
32936
32936
  const [chatCount, setChatCount] = React108.useState(null);
32937
32937
  const [detailed, setDetailed] = React108.useState(true);
@@ -33023,7 +33023,7 @@ function SettingsAppearanceTab({
33023
33023
  themes,
33024
33024
  onSelectTheme
33025
33025
  }) {
33026
- const { t } = chunk5DBKW7F3_js.useTranslation();
33026
+ const { t } = chunk73S5EOD3_js.useTranslation();
33027
33027
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-3", children: themes.map((entry) => {
33028
33028
  const isActive = entry.key === activeThemeKey;
33029
33029
  const previewBackground = entry.theme?.colors?.background ?? "#0b0f19";
@@ -33034,7 +33034,7 @@ function SettingsAppearanceTab({
33034
33034
  type: "button",
33035
33035
  onClick: () => onSelectTheme(entry.key),
33036
33036
  "aria-pressed": isActive,
33037
- className: chunk5DBKW7F3_js.cn(
33037
+ className: chunk73S5EOD3_js.cn(
33038
33038
  "flex items-center gap-3 rounded-lg border px-3 py-2.5 text-left transition-colors",
33039
33039
  isActive ? "border-primary bg-primary/10" : "border-border hover:border-primary/50 hover:bg-accent"
33040
33040
  ),
@@ -33051,7 +33051,7 @@ function SettingsAppearanceTab({
33051
33051
  /* @__PURE__ */ jsxRuntime.jsx(
33052
33052
  "span",
33053
33053
  {
33054
- className: chunk5DBKW7F3_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33054
+ className: chunk73S5EOD3_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33055
33055
  children: t(entry.labelKey)
33056
33056
  }
33057
33057
  )
@@ -33066,7 +33066,7 @@ function SettingsCustomFontsSection({
33066
33066
  families,
33067
33067
  onRegistered
33068
33068
  }) {
33069
- const { t } = chunk5DBKW7F3_js.useTranslation();
33069
+ const { t } = chunk73S5EOD3_js.useTranslation();
33070
33070
  const inputRef = React108.useRef(null);
33071
33071
  const [error, setError] = React108.useState(false);
33072
33072
  const handleFile = async (file) => {
@@ -33131,7 +33131,7 @@ function SettingsLanguageTab({
33131
33131
  type: "button",
33132
33132
  onClick: () => onSelectLocale(locale.code),
33133
33133
  "aria-pressed": isActive,
33134
- className: chunk5DBKW7F3_js.cn(
33134
+ className: chunk73S5EOD3_js.cn(
33135
33135
  "flex w-full items-center justify-between rounded px-3 py-2.5 text-left transition-colors",
33136
33136
  isActive ? "bg-primary/10 text-primary" : "text-foreground hover:bg-accent"
33137
33137
  ),
@@ -33170,7 +33170,7 @@ function OpenSettingsDialog({
33170
33170
  customFontFamilies = NO_CUSTOM_FONT_FAMILIES,
33171
33171
  onCustomFontRegistered
33172
33172
  }) {
33173
- const { t } = chunk5DBKW7F3_js.useTranslation();
33173
+ const { t } = chunk73S5EOD3_js.useTranslation();
33174
33174
  const viewerCustomization = useViewerCustomizationContext();
33175
33175
  const customization = React108.useMemo(
33176
33176
  () => languageSelectable ? viewerCustomization : {
@@ -33279,7 +33279,7 @@ function ViewerOptionsProvider({
33279
33279
  store,
33280
33280
  children
33281
33281
  }) {
33282
- return /* @__PURE__ */ jsxRuntime.jsx(chunkVGU5S37T_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunkVGU5S37T_js.ViewerOptionsContext.Provider, { value: options, children }) });
33282
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.ViewerOptionsContext.Provider, { value: options, children }) });
33283
33283
  }
33284
33284
  function useAiBridge(input) {
33285
33285
  const ref = React108.useRef(input);
@@ -33362,7 +33362,7 @@ function useAiPanelController(input) {
33362
33362
  getSelectedElement: () => inputRef.current.selectedElement
33363
33363
  })
33364
33364
  );
33365
- const state = chunkVGU5S37T_js.useController(controller);
33365
+ const state = chunkYQ67KAQR_js.useController(controller);
33366
33366
  React108.useEffect(() => () => controller.dispose(), [controller]);
33367
33367
  const liveFocusTargets = React108.useMemo(
33368
33368
  () => host.computeFocusTargets({ activeSlideIndex, selectedElementIds, selectedElementId }),
@@ -33595,7 +33595,7 @@ function useMasterViewCrud(input) {
33595
33595
  forgetHistory,
33596
33596
  pushToast
33597
33597
  } = input;
33598
- const { t } = chunk5DBKW7F3_js.useTranslation();
33598
+ const { t } = chunk73S5EOD3_js.useTranslation();
33599
33599
  const data = React108.useMemo(
33600
33600
  () => ({ slides, slideMasters }),
33601
33601
  [slides, slideMasters]
@@ -33984,7 +33984,7 @@ function useHostLanguage({
33984
33984
  availableLocales,
33985
33985
  onLocaleChange
33986
33986
  }) {
33987
- const { t, i18n } = chunk5DBKW7F3_js.useHostI18next();
33987
+ const { t, i18n } = chunk73S5EOD3_js.useHostI18next();
33988
33988
  const [localeCode, setLocaleCode] = React108.useState(
33989
33989
  () => defaultLocale ?? pptx.readStoredViewerPrefs().localeCode ?? "en"
33990
33990
  );
@@ -34024,7 +34024,7 @@ function useProvidedLanguage({
34024
34024
  availableLocales,
34025
34025
  onLocaleChange
34026
34026
  }) {
34027
- const state = React108.useContext(chunk5DBKW7F3_js.PptxI18nContext);
34027
+ const state = React108.useContext(chunk73S5EOD3_js.PptxI18nContext);
34028
34028
  const { locale } = state;
34029
34029
  const locales = availableLocales ?? NO_LOCALES;
34030
34030
  const controls = React108.useMemo(
@@ -34044,7 +34044,7 @@ function useProvidedLanguage({
34044
34044
  return { state, controls };
34045
34045
  }
34046
34046
  function provideLanguage({ state, controls }, children) {
34047
- return /* @__PURE__ */ jsxRuntime.jsx(chunk5DBKW7F3_js.ViewerI18nContext.Provider, { value: state, children: /* @__PURE__ */ jsxRuntime.jsx(chunk5DBKW7F3_js.ViewerLocaleControlsContext.Provider, { value: controls, children }) });
34047
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk73S5EOD3_js.ViewerI18nContext.Provider, { value: state, children: /* @__PURE__ */ jsxRuntime.jsx(chunk73S5EOD3_js.ViewerLocaleControlsContext.Provider, { value: controls, children }) });
34048
34048
  }
34049
34049
  function HostLanguageRoot({ children, ...props }) {
34050
34050
  return provideLanguage(useHostLanguage(props), children);
@@ -34053,11 +34053,11 @@ function ProvidedLanguageRoot({ children, ...props }) {
34053
34053
  return provideLanguage(useProvidedLanguage(props), children);
34054
34054
  }
34055
34055
  function ViewerI18nRoot(props) {
34056
- const Root = React108.useContext(chunk5DBKW7F3_js.PptxI18nContext) ? ProvidedLanguageRoot : HostLanguageRoot;
34056
+ const Root = React108.useContext(chunk73S5EOD3_js.PptxI18nContext) ? ProvidedLanguageRoot : HostLanguageRoot;
34057
34057
  return /* @__PURE__ */ jsxRuntime.jsx(Root, { ...props });
34058
34058
  }
34059
34059
  function useViewerLocaleControls() {
34060
- return React108.useContext(chunk5DBKW7F3_js.ViewerLocaleControlsContext);
34060
+ return React108.useContext(chunk73S5EOD3_js.ViewerLocaleControlsContext);
34061
34061
  }
34062
34062
  var NO_RIBBON_ADD_INS = [];
34063
34063
  var NO_FILE_PROVIDERS = [];
@@ -34136,7 +34136,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34136
34136
  limits
34137
34137
  } = props;
34138
34138
  const cloudDocument = React108.useMemo(() => pptx.createCloudDocumentController(), []);
34139
- const cloudFile = chunkVGU5S37T_js.useController(cloudDocument).file;
34139
+ const cloudFile = chunkYQ67KAQR_js.useController(cloudDocument).file;
34140
34140
  const {
34141
34141
  storage: viewerStorage,
34142
34142
  fileName,
@@ -34150,13 +34150,14 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34150
34150
  filePath: hostFilePath
34151
34151
  });
34152
34152
  const saveProgress = React108.useMemo(() => pptx.createSaveProgressController(), []);
34153
- const saveProgressState = chunkVGU5S37T_js.useController(saveProgress);
34153
+ const saveProgressState = chunkYQ67KAQR_js.useController(saveProgress);
34154
34154
  const storage = React108.useMemo(
34155
34155
  () => viewerStorage ? saveProgress.wrap(viewerStorage) : viewerStorage,
34156
34156
  [viewerStorage, saveProgress]
34157
34157
  );
34158
34158
  const collaboration = pptx.resolveCollaborationConfig(collaborationInput);
34159
34159
  const rootOptions = pptx.resolveViewerRootOptions(props);
34160
+ React108.useEffect(() => pptx.installSvgIdScope(), []);
34160
34161
  React108.useEffect(() => {
34161
34162
  const css = pptx.buildUserFontFaceStyles(fonts);
34162
34163
  if (!css) {
@@ -34191,7 +34192,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34191
34192
  (current) => current.includes(family) ? current : [...current, family]
34192
34193
  );
34193
34194
  }, []);
34194
- const { t } = chunk5DBKW7F3_js.useTranslation();
34195
+ const { t } = chunk73S5EOD3_js.useTranslation();
34195
34196
  const {
34196
34197
  localeCode,
34197
34198
  locales: resolvedLocales,
@@ -34248,7 +34249,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34248
34249
  },
34249
34250
  [hostStorage, cloudDocument]
34250
34251
  );
34251
- const { optionsStore, options: viewerOptions } = chunkVGU5S37T_js.useViewerOptions();
34252
+ const { optionsStore, options: viewerOptions } = chunkYQ67KAQR_js.useViewerOptions();
34252
34253
  const custom = useViewerCustomization(
34253
34254
  customization,
34254
34255
  legacyHiddenActions,
@@ -34267,8 +34268,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34267
34268
  const handleEnableEditing = React108.useCallback(() => {
34268
34269
  setProtectedViewOverridden(true);
34269
34270
  }, []);
34270
- const readOnlyRec = chunkVGU5S37T_js.useReadOnlyRecommendationState(content);
34271
- const compatToastsState = chunkVGU5S37T_js.useCompatibilityToastsState();
34271
+ const readOnlyRec = chunkYQ67KAQR_js.useReadOnlyRecommendationState(content);
34272
+ const compatToastsState = chunkYQ67KAQR_js.useCompatibilityToastsState();
34272
34273
  const [notesBarHeight, setNotesBarHeight] = React108.useState(0);
34273
34274
  const runProgramNoticesState = useRunProgramNoticesState();
34274
34275
  const [collaborationReadOnly, setCollaborationReadOnly] = React108.useState(Boolean(collaboration));
@@ -34291,8 +34292,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34291
34292
  filePath
34292
34293
  });
34293
34294
  const [isShareDialogOpen, setIsShareDialogOpen] = React108.useState(false);
34294
- const { reducedMotion, toggleReducedMotion } = chunkVGU5S37T_js.useReducedMotion();
34295
- const state = chunkVGU5S37T_js.useViewerState({
34295
+ const { reducedMotion, toggleReducedMotion } = chunkYQ67KAQR_js.useReducedMotion();
34296
+ const state = chunkYQ67KAQR_js.useViewerState({
34296
34297
  content,
34297
34298
  canEdit,
34298
34299
  inspectorInitiallyOpen: props.inspectorInitiallyOpen
@@ -34419,16 +34420,16 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34419
34420
  }
34420
34421
  }, [settings, optionsStore]);
34421
34422
  const handleClearOptionsCache = useAutosaveCacheMaintenance(viewerOptions, storage);
34422
- const mobile = chunkVGU5S37T_js.useIsMobile();
34423
+ const mobile = chunkYQ67KAQR_js.useIsMobile();
34423
34424
  const { isMobile, isTouchDevice, isVirtualKeyboardOpen } = mobile;
34424
- const resizablePanels = chunkVGU5S37T_js.useResizablePanels();
34425
+ const resizablePanels = chunkYQ67KAQR_js.useResizablePanels();
34425
34426
  const {
34426
34427
  gridSpacingPx,
34427
34428
  visibleSlideIndexes,
34428
34429
  slideSectionGroups,
34429
34430
  masterPseudoSlide,
34430
34431
  authoredRange
34431
- } = chunkVGU5S37T_js.useDerivedSlideState({
34432
+ } = chunkYQ67KAQR_js.useDerivedSlideState({
34432
34433
  slides,
34433
34434
  sections: state.sections,
34434
34435
  customShows: state.customShows,
@@ -34453,7 +34454,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34453
34454
  state.cropSessionRef
34454
34455
  ]
34455
34456
  );
34456
- const zoom = chunkVGU5S37T_js.useZoomViewport({
34457
+ const zoom = chunkYQ67KAQR_js.useZoomViewport({
34457
34458
  canvasSize,
34458
34459
  selectedElements: state.selectedElements,
34459
34460
  fitPadding: props.fitPadding,
@@ -34469,7 +34470,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34469
34470
  onChangeCallback.current?.();
34470
34471
  }, [setIsDirty]);
34471
34472
  const restoreHistoryThemeRef = React108.useRef(void 0);
34472
- const history = chunkVGU5S37T_js.useEditorHistory({
34473
+ const history = chunkYQ67KAQR_js.useEditorHistory({
34473
34474
  slides,
34474
34475
  canvasSize,
34475
34476
  activeSlideIndex,
@@ -34498,7 +34499,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34498
34499
  setEditTemplateMode: state.setEditTemplateMode,
34499
34500
  setHeaderFooter: state.setHeaderFooter
34500
34501
  });
34501
- const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunkVGU5S37T_js.usePresentationSetup({
34502
+ const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunkYQ67KAQR_js.usePresentationSetup({
34502
34503
  mode,
34503
34504
  slides,
34504
34505
  visibleSlideIndexes,
@@ -34577,7 +34578,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34577
34578
  loading,
34578
34579
  error
34579
34580
  ]);
34580
- chunkVGU5S37T_js.useTouchGestures({
34581
+ chunkYQ67KAQR_js.useTouchGestures({
34581
34582
  targetRef: zoom.canvasViewportRef,
34582
34583
  currentScale: zoom.scale,
34583
34584
  callbacks: {
@@ -34599,7 +34600,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34599
34600
  },
34600
34601
  enabled: isTouchDevice
34601
34602
  });
34602
- const dialogs = chunkVGU5S37T_js.useViewerDialogs({
34603
+ const dialogs = chunkYQ67KAQR_js.useViewerDialogs({
34603
34604
  mode,
34604
34605
  slides,
34605
34606
  activeSlide,
@@ -34627,7 +34628,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34627
34628
  history,
34628
34629
  embeddedFontFamilies: state.embeddedFonts.map((font) => font.name)
34629
34630
  });
34630
- chunkVGU5S37T_js.useClearSelectionOnSlideChange(state, activeSlideIndex);
34631
+ chunkYQ67KAQR_js.useClearSelectionOnSlideChange(state, activeSlideIndex);
34631
34632
  const zoomBeforePresentRef = React108.useRef(null);
34632
34633
  React108.useEffect(() => {
34633
34634
  if (mode !== "present") {
@@ -34645,7 +34646,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34645
34646
  zoom.handleZoomToFit();
34646
34647
  zoom.canvasViewportRef.current?.scrollTo({ left: 0, top: 0 });
34647
34648
  }, [mode]);
34648
- const editorOps = chunkVGU5S37T_js.useEditorOperations({
34649
+ const editorOps = chunkYQ67KAQR_js.useEditorOperations({
34649
34650
  state,
34650
34651
  history,
34651
34652
  zoom,
@@ -34690,7 +34691,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34690
34691
  handlerRef,
34691
34692
  viewerApi,
34692
34693
  loadVersion
34693
- } = chunkVGU5S37T_js.useViewerIntegration({
34694
+ } = chunkYQ67KAQR_js.useViewerIntegration({
34694
34695
  transformCommittedText: (text, previous) => pptx.applyAutoCorrectToEdit(text, previous, viewerOptions.proofing),
34695
34696
  state,
34696
34697
  zoom,
@@ -34833,7 +34834,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34833
34834
  updateElementById: editorOps.ops.updateElementById
34834
34835
  });
34835
34836
  const ribbonScope = useRibbonScopeToken();
34836
- const viewPreferencesSync = chunkVGU5S37T_js.useViewPreferencesSync({
34837
+ const viewPreferencesSync = chunkYQ67KAQR_js.useViewPreferencesSync({
34837
34838
  loadVersion,
34838
34839
  viewProperties: state.viewProperties,
34839
34840
  setViewProperties: state.setViewProperties,
@@ -34884,7 +34885,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34884
34885
  },
34885
34886
  [state]
34886
34887
  );
34887
- const layoutSwitching = chunkVGU5S37T_js.useLayoutSwitching({
34888
+ const layoutSwitching = chunkYQ67KAQR_js.useLayoutSwitching({
34888
34889
  handler: handlerRef.current,
34889
34890
  slides,
34890
34891
  activeSlideIndex,
@@ -35003,7 +35004,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35003
35004
  "data-pptx-editor-chrome": "",
35004
35005
  ...{ [pptx.RIBBON_SCOPE_ATTR]: ribbonScope },
35005
35006
  "aria-busy": loading,
35006
- className: chunk5DBKW7F3_js.cn(
35007
+ className: chunk73S5EOD3_js.cn(
35007
35008
  "h-full w-full bg-background text-foreground relative",
35008
35009
  ...pptx.resolveOptionRootClasses(viewerOptions, "pptx")
35009
35010
  ),
@@ -35404,8 +35405,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35404
35405
  // Nothing previously provided it, so every one of those consumers was
35405
35406
  // silently reading `DEFAULT_VIEWER_OPTIONS` forever, no matter what
35406
35407
  // the user changed in the Options dialog.
35407
- /* @__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(
35408
- chunkVGU5S37T_js.CollaborationProvider,
35408
+ /* @__PURE__ */ jsxRuntime.jsx(ViewerOptionsProvider, { options: viewerOptions, store: optionsStore, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCustomizationContext.Provider, { value: customizationResolved, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerStorageContext.Provider, { value: hostStorage, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCloudFilesContext.Provider, { value: cloudFiles, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerRegionBaseContext.Provider, { value: regionBase, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonAddInsContext.Provider, { value: ribbonAddIns ?? NO_RIBBON_ADD_INS, children: /* @__PURE__ */ jsxRuntime.jsx(AccountAuthContext.Provider, { value: accountAuth, children: /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
35409
+ chunkYQ67KAQR_js.CollaborationProvider,
35409
35410
  {
35410
35411
  config: collaboration,
35411
35412
  canvasWidth: canvasSize.width,
@@ -35462,19 +35463,19 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35462
35463
  slideCount: slides.length
35463
35464
  }
35464
35465
  ),
35465
- /* @__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 }) }) })
35466
+ /* @__PURE__ */ jsxRuntime.jsx(ShapeFormatContext.Provider, { value: shapeFormat, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonGalleryCommandsContext.Provider, { value: ribbonGalleries, children: /* @__PURE__ */ jsxRuntime.jsx(chunkYQ67KAQR_js.ChartFormatContext.Provider, { value: chartFormat, children: viewerContent }) }) })
35466
35467
  ]
35467
35468
  }
35468
35469
  ) }) }) }) }) }) }) }) }) })
35469
35470
  );
35470
35471
  }
35471
35472
  );
35472
- var PowerPointViewer2 = /* @__PURE__ */ chunkVGU5S37T_js.withDisplayName(
35473
+ var PowerPointViewer2 = /* @__PURE__ */ chunkYQ67KAQR_js.withDisplayName(
35473
35474
  PowerPointViewerComponent,
35474
35475
  "PowerPointViewer"
35475
35476
  );
35476
35477
  function CollaborationStatusStrip() {
35477
- const collab = chunkVGU5S37T_js.useCollaboration();
35478
+ const collab = chunkYQ67KAQR_js.useCollaboration();
35478
35479
  if (!collab) {
35479
35480
  return null;
35480
35481
  }
@@ -35491,9 +35492,9 @@ function CollaborationStateReporter({
35491
35492
  onChange,
35492
35493
  onStatus
35493
35494
  }) {
35494
- const collab = chunkVGU5S37T_js.useCollaboration();
35495
+ const collab = chunkYQ67KAQR_js.useCollaboration();
35495
35496
  useCollaborationStateReport(collab, onChange);
35496
- chunkVGU5S37T_js.useReportOnChange(collab?.status ?? "disconnected", onStatus, "disconnected");
35497
+ chunkYQ67KAQR_js.useReportOnChange(collab?.status ?? "disconnected", onStatus, "disconnected");
35497
35498
  return null;
35498
35499
  }
35499
35500
  function CollaborationDocumentSync({
@@ -35508,8 +35509,8 @@ function CollaborationDocumentSync({
35508
35509
  onReadOnlyChange,
35509
35510
  history
35510
35511
  }) {
35511
- const collab = chunkVGU5S37T_js.useCollaboration();
35512
- chunkVGU5S37T_js.useCollaborationDocumentSync({
35512
+ const collab = chunkYQ67KAQR_js.useCollaboration();
35513
+ chunkYQ67KAQR_js.useCollaborationDocumentSync({
35513
35514
  collaboration: collab,
35514
35515
  history,
35515
35516
  slides,
@@ -35529,14 +35530,14 @@ function CollaborationFollowLayer({
35529
35530
  setActiveSlideIndex,
35530
35531
  slideCount
35531
35532
  }) {
35532
- const collab = chunkVGU5S37T_js.useCollaboration();
35533
- const { followedClientId, followUser } = chunkVGU5S37T_js.useFollowMode({
35533
+ const collab = chunkYQ67KAQR_js.useCollaboration();
35534
+ const { followedClientId, followUser } = chunkYQ67KAQR_js.useFollowMode({
35534
35535
  collab,
35535
35536
  activeSlideIndex,
35536
35537
  setActiveSlideIndex,
35537
35538
  slideCount
35538
35539
  });
35539
- chunkVGU5S37T_js.useBroadcastFollower({
35540
+ chunkYQ67KAQR_js.useBroadcastFollower({
35540
35541
  collab,
35541
35542
  activeSlideIndex,
35542
35543
  setActiveSlideIndex,
@@ -35578,7 +35579,7 @@ function PptxI18nProvider({
35578
35579
  () => ({ t: withEnglishFallback(translate), locale }),
35579
35580
  [translate, locale]
35580
35581
  );
35581
- return /* @__PURE__ */ jsxRuntime.jsx(chunk5DBKW7F3_js.PptxI18nContext.Provider, { value: state, children });
35582
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk73S5EOD3_js.PptxI18nContext.Provider, { value: state, children });
35582
35583
  }
35583
35584
 
35584
35585
  Object.defineProperty(exports, "THEME_CATALOG", {