pptx-react-viewer 4.30.3 → 4.31.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 (62) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{AiChatPanel-STFWEZCZ.mjs → AiChatPanel-3QCMPFEK.mjs} +1 -1
  3. package/dist/AiChatPanel-3QCMPFEK.mjs.br +0 -0
  4. package/dist/AiChatPanel-3QCMPFEK.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-6VWW4FHG.js → AiChatPanel-ER4CGJRD.js} +9 -9
  6. package/dist/AiChatPanel-ER4CGJRD.js.br +0 -0
  7. package/dist/AiChatPanel-ER4CGJRD.js.gz +0 -0
  8. package/dist/{chunk-IS76G64B.mjs → chunk-BXCZ7W5I.mjs} +3 -0
  9. package/dist/chunk-BXCZ7W5I.mjs.br +0 -0
  10. package/dist/chunk-BXCZ7W5I.mjs.gz +0 -0
  11. package/dist/{chunk-RDT4I7MA.mjs → chunk-EAO6H5TU.mjs} +1 -1
  12. package/dist/chunk-EAO6H5TU.mjs.br +0 -0
  13. package/dist/chunk-EAO6H5TU.mjs.gz +0 -0
  14. package/dist/{chunk-FTNLOQ2T.mjs → chunk-FWM7KRYY.mjs} +40 -6
  15. package/dist/chunk-FWM7KRYY.mjs.br +0 -0
  16. package/dist/chunk-FWM7KRYY.mjs.gz +0 -0
  17. package/dist/{chunk-QO2AMZPA.js → chunk-KCOXJJBZ.js} +3 -0
  18. package/dist/chunk-KCOXJJBZ.js.br +0 -0
  19. package/dist/chunk-KCOXJJBZ.js.gz +0 -0
  20. package/dist/{chunk-BOQCAJIA.js → chunk-MCU3FDOV.js} +245 -245
  21. package/dist/chunk-MCU3FDOV.js.br +0 -0
  22. package/dist/chunk-MCU3FDOV.js.gz +0 -0
  23. package/dist/{chunk-3NIBDU4D.js → chunk-MX4RABHR.js} +418 -384
  24. package/dist/chunk-MX4RABHR.js.br +0 -0
  25. package/dist/chunk-MX4RABHR.js.gz +0 -0
  26. package/dist/index.d.ts +2 -0
  27. package/dist/index.js +24 -24
  28. package/dist/index.js.br +0 -0
  29. package/dist/index.js.gz +0 -0
  30. package/dist/index.mjs +3 -3
  31. package/dist/index.mjs.br +0 -0
  32. package/dist/index.mjs.gz +0 -0
  33. package/dist/internals.js +81 -81
  34. package/dist/internals.js.br +0 -0
  35. package/dist/internals.js.gz +0 -0
  36. package/dist/internals.mjs +2 -2
  37. package/dist/internals.mjs.br +0 -0
  38. package/dist/internals.mjs.gz +0 -0
  39. package/dist/viewer/index.d.ts +2 -0
  40. package/dist/viewer/index.js +19 -19
  41. package/dist/viewer/index.js.br +0 -0
  42. package/dist/viewer/index.js.gz +0 -0
  43. package/dist/viewer/index.mjs +3 -3
  44. package/dist/viewer/index.mjs.br +0 -0
  45. package/dist/viewer/index.mjs.gz +0 -0
  46. package/package.json +3 -3
  47. package/dist/AiChatPanel-6VWW4FHG.js.br +0 -0
  48. package/dist/AiChatPanel-6VWW4FHG.js.gz +0 -0
  49. package/dist/AiChatPanel-STFWEZCZ.mjs.br +0 -0
  50. package/dist/AiChatPanel-STFWEZCZ.mjs.gz +0 -0
  51. package/dist/chunk-3NIBDU4D.js.br +0 -0
  52. package/dist/chunk-3NIBDU4D.js.gz +0 -0
  53. package/dist/chunk-BOQCAJIA.js.br +0 -0
  54. package/dist/chunk-BOQCAJIA.js.gz +0 -0
  55. package/dist/chunk-FTNLOQ2T.mjs.br +0 -0
  56. package/dist/chunk-FTNLOQ2T.mjs.gz +0 -0
  57. package/dist/chunk-IS76G64B.mjs.br +0 -0
  58. package/dist/chunk-IS76G64B.mjs.gz +0 -0
  59. package/dist/chunk-QO2AMZPA.js.br +0 -0
  60. package/dist/chunk-QO2AMZPA.js.gz +0 -0
  61. package/dist/chunk-RDT4I7MA.mjs.br +0 -0
  62. package/dist/chunk-RDT4I7MA.mjs.gz +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkBOQCAJIA_js = require('./chunk-BOQCAJIA.js');
4
- var chunkQO2AMZPA_js = require('./chunk-QO2AMZPA.js');
3
+ var chunkMCU3FDOV_js = require('./chunk-MCU3FDOV.js');
4
+ var chunkKCOXJJBZ_js = require('./chunk-KCOXJJBZ.js');
5
5
  var pptx = require('ooxml-ui/pptx');
6
6
  var React98 = require('react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
@@ -307,7 +307,7 @@ function SlideTemplatePreview({
307
307
  transformOrigin: "top left"
308
308
  },
309
309
  children: previewSlide.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
310
- chunkBOQCAJIA_js.StaticElementRenderer,
310
+ chunkMCU3FDOV_js.StaticElementRenderer,
311
311
  {
312
312
  element,
313
313
  activeSlide: previewSlide,
@@ -376,7 +376,7 @@ function SlideTemplateGalleryDialog({
376
376
  scheme
377
377
  }) {
378
378
  const { t } = reactI18next.useTranslation();
379
- const { panelStyle, handlers: dragHandlers } = chunkBOQCAJIA_js.useModalDismissDrag(onClose);
379
+ const { panelStyle, handlers: dragHandlers } = chunkMCU3FDOV_js.useModalDismissDrag(onClose);
380
380
  const [selected, setSelected] = React98.useState(null);
381
381
  const dialogRef = React98.useRef(null);
382
382
  useModalFocus(isOpen, dialogRef, onClose);
@@ -459,7 +459,7 @@ function SlideTemplateGalleryDialog({
459
459
  onInsert(spec.id);
460
460
  onClose();
461
461
  },
462
- className: chunkQO2AMZPA_js.cn(
462
+ className: chunkKCOXJJBZ_js.cn(
463
463
  "flex flex-col items-center gap-1 p-2 rounded border transition-colors",
464
464
  selected === spec.id ? "border-primary bg-primary/20" : "border-border hover:border-border hover:bg-muted/50"
465
465
  ),
@@ -723,7 +723,7 @@ function WebHomeControls({
723
723
  function ShapeArrangeExtras(p) {
724
724
  const commands = useShapeFormatContext();
725
725
  const crop = commands?.crop;
726
- const { isHidden } = chunkBOQCAJIA_js.useToolbarVisibility(p.hiddenActions);
726
+ const { isHidden } = chunkMCU3FDOV_js.useToolbarVisibility(p.hiddenActions);
727
727
  const { onGroupElements, onUngroupElement, onUpdateElementStyle } = p;
728
728
  const controls = React98.useMemo(
729
729
  () => pptx.arrangeShapeHomeControls({
@@ -1056,7 +1056,7 @@ function TransitionsSection(p) {
1056
1056
  case "soundPreview": {
1057
1057
  const url = pptx.ribbonTransitionStockSoundUrl(transition);
1058
1058
  if (url) {
1059
- chunkBOQCAJIA_js.playAnimationSound(url);
1059
+ chunkMCU3FDOV_js.playAnimationSound(url);
1060
1060
  }
1061
1061
  break;
1062
1062
  }
@@ -1215,7 +1215,7 @@ function AccountPage() {
1215
1215
  return void 0;
1216
1216
  });
1217
1217
  };
1218
- const version = "4.30.3" ;
1218
+ const version = "4.31.0" ;
1219
1219
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
1220
1220
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cardClass, children: [
1221
1221
  /* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -1255,7 +1255,7 @@ function AccountPage() {
1255
1255
  "aria-label": color,
1256
1256
  "aria-pressed": profile.avatarColor === color,
1257
1257
  onClick: () => updateProfile({ avatarColor: color }),
1258
- className: chunkQO2AMZPA_js.cn(
1258
+ className: chunkKCOXJJBZ_js.cn(
1259
1259
  "size-7 rounded-full border-2 transition-transform",
1260
1260
  profile.avatarColor === color ? "border-foreground scale-110" : "border-transparent hover:scale-105"
1261
1261
  ),
@@ -1478,7 +1478,7 @@ function FileSection(p) {
1478
1478
  const page = offered(requestedPage) ? requestedPage : offered("home") ? "home" : nav.find((item) => item.id !== "save" && item.id !== "close")?.id ?? "home";
1479
1479
  const [query, setQuery] = React98.useState("");
1480
1480
  const [recent, setRecent] = React98.useState([]);
1481
- const { isHidden } = chunkBOQCAJIA_js.useToolbarVisibility(p.hiddenActions);
1481
+ const { isHidden } = chunkMCU3FDOV_js.useToolbarVisibility(p.hiddenActions);
1482
1482
  const exportHidden = isHidden("export");
1483
1483
  React98.useEffect(() => {
1484
1484
  void pptx.listBackstageRecentFiles(t, p.recentPresentationsCount).then(setRecent);
@@ -1708,7 +1708,7 @@ function RibbonMenu({
1708
1708
  return /* @__PURE__ */ jsxRuntime.jsx(
1709
1709
  "div",
1710
1710
  {
1711
- className: chunkQO2AMZPA_js.cn("fixed z-50", className),
1711
+ className: chunkKCOXJJBZ_js.cn("fixed z-50", className),
1712
1712
  style: pos ? { left: pos.left, top: pos.top } : { visibility: "hidden" },
1713
1713
  children
1714
1714
  }
@@ -1734,7 +1734,7 @@ function LayoutGalleryMenu(p) {
1734
1734
  type: "button",
1735
1735
  "aria-current": isCurrent ? "true" : void 0,
1736
1736
  title: isCurrent ? `${layout.name} (${t("pptx.layoutGallery.current")})` : layout.name,
1737
- className: chunkQO2AMZPA_js.cn(
1737
+ className: chunkKCOXJJBZ_js.cn(
1738
1738
  "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",
1739
1739
  isCurrent ? "border-primary bg-primary/10" : "border-transparent"
1740
1740
  ),
@@ -1808,7 +1808,7 @@ function LayoutArtwork({
1808
1808
  backgroundColor
1809
1809
  };
1810
1810
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: (preview?.elements ?? []).slice(0, MAX_PREVIEW_ELEMENTS).map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
1811
- chunkBOQCAJIA_js.StaticElementRenderer,
1811
+ chunkMCU3FDOV_js.StaticElementRenderer,
1812
1812
  {
1813
1813
  element,
1814
1814
  activeSlide: slide,
@@ -2370,7 +2370,7 @@ function CustomShowsControls({
2370
2370
  {
2371
2371
  type: "button",
2372
2372
  onClick: onToggleCurrentSlideInActiveShow,
2373
- className: chunkQO2AMZPA_js.cn(
2373
+ className: chunkKCOXJJBZ_js.cn(
2374
2374
  "px-2 py-1 rounded text-[11px] transition-colors",
2375
2375
  isCurrentSlideInActiveShow ? "bg-primary text-white" : "bg-muted hover:bg-accent"
2376
2376
  ),
@@ -2425,7 +2425,7 @@ function SlideShowOptions({
2425
2425
  }
2426
2426
  function SubtitleSettingsControl() {
2427
2427
  const { t } = reactI18next.useTranslation();
2428
- const supplied = React98.useContext(chunkBOQCAJIA_js.ViewerOptionsStoreContext);
2428
+ const supplied = React98.useContext(chunkMCU3FDOV_js.ViewerOptionsStoreContext);
2429
2429
  const fallback = React98.useRef(null);
2430
2430
  if (!supplied) {
2431
2431
  fallback.current ??= pptx.createViewerOptionsStore({ persist: false });
@@ -2459,7 +2459,7 @@ function SubtitleSettingsControl() {
2459
2459
  }
2460
2460
  function SlideShowSection(p) {
2461
2461
  const { t } = reactI18next.useTranslation();
2462
- const { isHidden } = chunkBOQCAJIA_js.useToolbarVisibility(p.hiddenActions);
2462
+ const { isHidden } = chunkMCU3FDOV_js.useToolbarVisibility(p.hiddenActions);
2463
2463
  const [showsOpen, setShowsOpen] = React98.useState(false);
2464
2464
  const showsRef = React98.useRef(null);
2465
2465
  React98.useEffect(() => {
@@ -2540,7 +2540,7 @@ function extractFontInfo(element, themeFonts) {
2540
2540
  fontFamily: pptx.resolveDefaultFontFamily(placeholderType, themeFonts),
2541
2541
  fontSize: "24"
2542
2542
  };
2543
- if (!element || !(0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(element)) {
2543
+ if (!element || !(0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(element)) {
2544
2544
  return defaults;
2545
2545
  }
2546
2546
  const segStyle = element.textSegments?.[0]?.style;
@@ -2561,7 +2561,7 @@ function getEffectiveTextStyle(element, tableEditorState) {
2561
2561
  if (!element) {
2562
2562
  return void 0;
2563
2563
  }
2564
- if ((0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(element)) {
2564
+ if ((0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(element)) {
2565
2565
  return element.textStyle;
2566
2566
  }
2567
2567
  if (element.type === "table" && tableEditorState && element.tableData) {
@@ -2574,7 +2574,7 @@ function isTextDecorationFlag(id) {
2574
2574
  return pptx.TEXT_DECORATION_FLAGS.includes(id);
2575
2575
  }
2576
2576
  function textSectionFlags(element, tableEditorState, readSelection) {
2577
- if (element && (0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(element)) {
2577
+ if (element && (0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(element)) {
2578
2578
  const result = readSelection ? pptx.getInlineEditorSelectionResult(element.textSegments) : null;
2579
2579
  const current = result?.kind === "supported" && (!result.snapshot || result.snapshot.elementId === element.id) ? result : null;
2580
2580
  return pptx.getSelectionTextStyleFlags(
@@ -2590,7 +2590,7 @@ function textSectionFlags(element, tableEditorState, readSelection) {
2590
2590
  );
2591
2591
  }
2592
2592
  function textSectionBulletKind(element, tableEditorState) {
2593
- if (element && (0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(element)) {
2593
+ if (element && (0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(element)) {
2594
2594
  const result = pptx.getInlineEditorSelectionResult(element.textSegments, { preserveCaret: true });
2595
2595
  return result.kind === "supported" && (!result.snapshot || result.snapshot.elementId === element.id) ? pptx.selectionBulletKind(element, result.selection, result.snapshot?.textSegments) : pptx.elementBulletKind(element);
2596
2596
  }
@@ -2827,7 +2827,7 @@ function subscribe(onChange) {
2827
2827
  }
2828
2828
  function useParagraphListKind(element) {
2829
2829
  const read = React98.useCallback(() => {
2830
- if (!element || !(0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(element)) {
2830
+ if (!element || !(0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(element)) {
2831
2831
  return "none";
2832
2832
  }
2833
2833
  const result = pptx.getInlineEditorSelectionResult(element.textSegments, { preserveCaret: true });
@@ -2850,7 +2850,7 @@ function TextSection(p) {
2850
2850
  const hasSel = Boolean(p.selectedElement);
2851
2851
  const canMut = hasSel && p.canEdit;
2852
2852
  const { fontFamily, fontSize } = extractFontInfo(p.selectedElement, p.themeFonts);
2853
- const isTextEl = hasSel && p.selectedElement !== null && (0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(p.selectedElement);
2853
+ const isTextEl = hasSel && p.selectedElement !== null && (0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(p.selectedElement);
2854
2854
  const isTable = hasSel && p.selectedElement?.type === "table";
2855
2855
  const canFormat = isTextEl || isTable;
2856
2856
  const effectiveTs = getEffectiveTextStyle(p.selectedElement, p.tableEditorState);
@@ -2860,15 +2860,15 @@ function TextSection(p) {
2860
2860
  if (!p.canEdit || !canFormat || !p.selectedElement) {
2861
2861
  return;
2862
2862
  }
2863
- if ((0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(p.selectedElement)) {
2863
+ if ((0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(p.selectedElement)) {
2864
2864
  p.onToggleBullets(kind);
2865
2865
  return;
2866
2866
  }
2867
2867
  p.onUpdateTextStyle({ listType: effectiveTs?.listType === kind ? "none" : kind });
2868
2868
  };
2869
- const currentColor = isTextEl && p.selectedElement && (0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.color ?? p.selectedElement.textStyle?.color ?? "#000000" : effectiveTs?.color ?? "#000000";
2870
- const currentColorThemeRef = isTextEl && p.selectedElement && (0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.colorRef ?? p.selectedElement.textStyle?.colorRef : void 0;
2871
- const currentHighlight = isTextEl && p.selectedElement && (0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.highlightColor ?? p.selectedElement.textStyle?.highlightColor ?? "#ffff00" : "#ffff00";
2869
+ const currentColor = isTextEl && p.selectedElement && (0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.color ?? p.selectedElement.textStyle?.color ?? "#000000" : effectiveTs?.color ?? "#000000";
2870
+ const currentColorThemeRef = isTextEl && p.selectedElement && (0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.colorRef ?? p.selectedElement.textStyle?.colorRef : void 0;
2871
+ const currentHighlight = isTextEl && p.selectedElement && (0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(p.selectedElement) ? p.selectedElement.textSegments?.[0]?.style?.highlightColor ?? p.selectedElement.textStyle?.highlightColor ?? "#ffff00" : "#ffff00";
2872
2872
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2873
2873
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-0.5", ...groupAttr("home.font"), children: [
2874
2874
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", "data-pptx-chrome": "font-controls", children: [
@@ -2883,7 +2883,7 @@ function TextSection(p) {
2883
2883
  customFonts: p.customFontFamilies,
2884
2884
  onFamily: (family) => p.onUpdateTextStyle({ fontFamily: family }),
2885
2885
  onSize: (size) => p.onUpdateTextStyle({
2886
- fontSize: p.selectedElement && (0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(p.selectedElement) ? pptx.textFontSizePtToPx(size) : size
2886
+ fontSize: p.selectedElement && (0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(p.selectedElement) ? pptx.textFontSizePtToPx(size) : size
2887
2887
  })
2888
2888
  }
2889
2889
  ),
@@ -2993,7 +2993,7 @@ function MobileSheet({
2993
2993
  }) {
2994
2994
  const sheetRef = React98.useRef(null);
2995
2995
  const { t } = reactI18next.useTranslation();
2996
- const { dragY, dragging, handlers } = chunkBOQCAJIA_js.useSheetDismissDrag(onClose);
2996
+ const { dragY, dragging, handlers } = chunkMCU3FDOV_js.useSheetDismissDrag(onClose);
2997
2997
  useModalFocus(open, sheetRef, onClose);
2998
2998
  if (!open) {
2999
2999
  return null;
@@ -3017,7 +3017,7 @@ function MobileSheet({
3017
3017
  "aria-modal": "true",
3018
3018
  "aria-label": typeof title === "string" ? title : t("pptx.mobileSheet.ariaLabel"),
3019
3019
  tabIndex: -1,
3020
- className: chunkQO2AMZPA_js.cn(
3020
+ className: chunkKCOXJJBZ_js.cn(
3021
3021
  "relative bg-background border-t border-border rounded-t-2xl shadow-2xl flex flex-col overflow-hidden",
3022
3022
  "animate-in slide-in-from-bottom duration-200",
3023
3023
  className
@@ -3081,7 +3081,7 @@ function MobileMenuSheet(props) {
3081
3081
  const { t } = reactI18next.useTranslation();
3082
3082
  const { open, onClose } = props;
3083
3083
  const [active, setActive] = React98.useState("home");
3084
- const { isTabVisible } = chunkBOQCAJIA_js.useToolbarVisibility(props.hiddenActions);
3084
+ const { isTabVisible } = chunkMCU3FDOV_js.useToolbarVisibility(props.hiddenActions);
3085
3085
  return /* @__PURE__ */ jsxRuntime.jsx(
3086
3086
  MobileSheet,
3087
3087
  {
@@ -3095,7 +3095,7 @@ function MobileMenuSheet(props) {
3095
3095
  {
3096
3096
  type: "button",
3097
3097
  onClick: () => setActive(active === key ? null : key),
3098
- className: chunkQO2AMZPA_js.cn(
3098
+ className: chunkKCOXJJBZ_js.cn(
3099
3099
  "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]",
3100
3100
  active === key ? "bg-primary text-white border-primary" : "border-border text-muted-foreground hover:text-foreground hover:bg-accent/40"
3101
3101
  ),
@@ -3362,7 +3362,7 @@ function MobileToolbar(props) {
3362
3362
  const { t } = reactI18next.useTranslation();
3363
3363
  const { mode, canUndo, canRedo, onUndo, onRedo, onSetMode, onSaveAsPptx } = props;
3364
3364
  const [menuOpen, setMenuOpen] = React98.useState(false);
3365
- const { isHidden } = chunkBOQCAJIA_js.useToolbarVisibility(props.hiddenActions);
3365
+ const { isHidden } = chunkMCU3FDOV_js.useToolbarVisibility(props.hiddenActions);
3366
3366
  const showEdit = mode === "edit" || mode === "master";
3367
3367
  const hidden = [];
3368
3368
  if (isHidden("undo")) {
@@ -3427,7 +3427,7 @@ function DrawingGroup(p) {
3427
3427
  const { recentColors, pushColor } = useRecentColors();
3428
3428
  const themeColors = useThemeColorMap();
3429
3429
  const commands = useRibbonGalleryCommands();
3430
- const style = p.selectedElement && (0, chunkQO2AMZPA_js.dist_exports.hasShapeProperties)(p.selectedElement) ? p.selectedElement.shapeStyle : void 0;
3430
+ const style = p.selectedElement && (0, chunkKCOXJJBZ_js.dist_exports.hasShapeProperties)(p.selectedElement) ? p.selectedElement.shapeStyle : void 0;
3431
3431
  const { onMoveLayer, onMoveLayerToEdge, onSetNewShapeType, onAddShape, onUpdateElementStyle } = p;
3432
3432
  const hasSelection = Boolean(p.selectedElement);
3433
3433
  const controls = React98.useMemo(
@@ -3530,7 +3530,7 @@ var TAB_BASE = "relative px-3.5 py-2 text-[12px] font-medium whitespace-nowrap t
3530
3530
  var TAB_UNDERLINE = "after:absolute after:-bottom-px after:left-0 after:right-0 after:h-[2.5px] after:bg-primary";
3531
3531
  function RibbonTabBar(p) {
3532
3532
  const { t } = reactI18next.useTranslation();
3533
- const viewerOptions = chunkBOQCAJIA_js.useViewerOptionsContext();
3533
+ const viewerOptions = chunkMCU3FDOV_js.useViewerOptionsContext();
3534
3534
  return /* @__PURE__ */ jsxRuntime.jsxs(
3535
3535
  "div",
3536
3536
  {
@@ -3538,7 +3538,7 @@ function RibbonTabBar(p) {
3538
3538
  "data-pptx-chrome": "ribbon-tabs",
3539
3539
  className: "flex items-center border-b border-border/60 px-1 max-md:overflow-x-auto max-md:scrollbar-none",
3540
3540
  children: [
3541
- chunkQO2AMZPA_js.TOOLBAR_SECTIONS.filter((s) => p.isTabVisible(s.id)).map((s) => {
3541
+ chunkKCOXJJBZ_js.TOOLBAR_SECTIONS.filter((s) => p.isTabVisible(s.id)).map((s) => {
3542
3542
  const selected = p.activeSection === s.id;
3543
3543
  return /* @__PURE__ */ jsxRuntime.jsx(
3544
3544
  "button",
@@ -3548,7 +3548,7 @@ function RibbonTabBar(p) {
3548
3548
  "aria-selected": selected,
3549
3549
  title: pptx.resolveScreenTip(viewerOptions, t(s.labelKey)),
3550
3550
  onClick: () => p.onSelectSection(s.id),
3551
- className: chunkQO2AMZPA_js.cn(
3551
+ className: chunkKCOXJJBZ_js.cn(
3552
3552
  TAB_BASE,
3553
3553
  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"
3554
3554
  ),
@@ -3569,7 +3569,7 @@ function RibbonTabBar(p) {
3569
3569
  ...{ [pptx.RIBBON_CONTEXTUAL_TAB_ATTR]: id },
3570
3570
  title: pptx.resolveScreenTip(viewerOptions, label),
3571
3571
  onClick: () => p.onSelectContextual(id),
3572
- className: chunkQO2AMZPA_js.cn(
3572
+ className: chunkKCOXJJBZ_js.cn(
3573
3573
  TAB_BASE,
3574
3574
  "text-primary",
3575
3575
  selected ? TAB_UNDERLINE : "hover:bg-primary/10"
@@ -3587,9 +3587,9 @@ function RibbonTabBar(p) {
3587
3587
  }
3588
3588
  function TabRowActions(p) {
3589
3589
  const { t } = reactI18next.useTranslation();
3590
- const collab = chunkBOQCAJIA_js.useCollaboration();
3590
+ const collab = chunkMCU3FDOV_js.useCollaboration();
3591
3591
  const isCollaborating = Boolean(collab && collab.status === "connected");
3592
- const { isHidden } = chunkBOQCAJIA_js.useToolbarVisibility(p.hiddenActions);
3592
+ const { isHidden } = chunkMCU3FDOV_js.useToolbarVisibility(p.hiddenActions);
3593
3593
  const customization = useViewerCustomizationContext();
3594
3594
  const ref = React98.useRef(null);
3595
3595
  const handlers = React98.useRef(p);
@@ -3644,7 +3644,7 @@ function TabRowActions(p) {
3644
3644
  }
3645
3645
  function TitleBarElement(p) {
3646
3646
  const { t } = reactI18next.useTranslation();
3647
- const options = chunkBOQCAJIA_js.useViewerOptionsContext();
3647
+ const options = chunkMCU3FDOV_js.useViewerOptionsContext();
3648
3648
  const customization = useViewerCustomizationContext();
3649
3649
  const ref = React98.useRef(null);
3650
3650
  const stripVisible = options.quickAccess.visible && pptx.isPanelVisible(customization, "quickAccessToolbar");
@@ -3717,7 +3717,7 @@ function PresentDropdown({
3717
3717
  {
3718
3718
  type: "button",
3719
3719
  onClick: onPresent,
3720
- className: chunkQO2AMZPA_js.cn(
3720
+ className: chunkKCOXJJBZ_js.cn(
3721
3721
  "px-2 py-1 transition-colors",
3722
3722
  isActive ? "bg-primary text-white" : "hover:bg-accent text-foreground"
3723
3723
  ),
@@ -3730,7 +3730,7 @@ function PresentDropdown({
3730
3730
  {
3731
3731
  type: "button",
3732
3732
  onClick: () => setOpen((prev) => !prev),
3733
- className: chunkQO2AMZPA_js.cn(
3733
+ className: chunkKCOXJJBZ_js.cn(
3734
3734
  "inline-flex items-center px-1 transition-colors border-l border-border",
3735
3735
  open ? "bg-primary text-white" : "hover:bg-accent text-foreground"
3736
3736
  ),
@@ -3933,7 +3933,7 @@ function OverflowMenu(p) {
3933
3933
  {
3934
3934
  type: "button",
3935
3935
  onClick: () => p.onSetOverflowMenuOpen(!p.isOverflowMenuOpen),
3936
- className: chunkQO2AMZPA_js.cn(
3936
+ className: chunkKCOXJJBZ_js.cn(
3937
3937
  "p-1.5 rounded transition-colors",
3938
3938
  p.isOverflowMenuOpen ? "bg-primary/80 text-white" : "bg-muted hover:bg-accent"
3939
3939
  ),
@@ -3980,7 +3980,7 @@ function ToolbarPrimaryRow(p) {
3980
3980
  onToggleSidebar,
3981
3981
  onToggleInspector
3982
3982
  } = p;
3983
- const collab = chunkBOQCAJIA_js.useCollaboration();
3983
+ const collab = chunkMCU3FDOV_js.useCollaboration();
3984
3984
  const customization = useViewerCustomizationContext();
3985
3985
  const showSlidesToggle = pptx.isPanelVisible(customization, "slidesPane");
3986
3986
  const showInspectorToggle = pptx.isPanelVisible(customization, "inspector");
@@ -3998,7 +3998,7 @@ function ToolbarPrimaryRow(p) {
3998
3998
  {
3999
3999
  type: "button",
4000
4000
  onClick: onToggleSidebar,
4001
- className: chunkQO2AMZPA_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
4001
+ className: chunkKCOXJJBZ_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
4002
4002
  title: t("pptx.toolbar.toggleSlidesPanel"),
4003
4003
  "aria-label": t("pptx.toolbar.toggleSlidesPanel"),
4004
4004
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelLeft, { className: ic })
@@ -4059,7 +4059,7 @@ function ToolbarPrimaryRow(p) {
4059
4059
  {
4060
4060
  type: "button",
4061
4061
  onClick: onToggleInspector,
4062
- className: chunkQO2AMZPA_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
4062
+ className: chunkKCOXJJBZ_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
4063
4063
  title: t("pptx.toolbar.toggleInspector"),
4064
4064
  "aria-label": t("pptx.toolbar.toggleInspector"),
4065
4065
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelRight, { className: ic })
@@ -4070,7 +4070,7 @@ function ToolbarPrimaryRow(p) {
4070
4070
  {
4071
4071
  type: "button",
4072
4072
  onClick: p.onToggleAiPanel,
4073
- className: chunkQO2AMZPA_js.cn(qab, p.isAiPanelOpen ? "text-primary" : "text-muted-foreground"),
4073
+ className: chunkKCOXJJBZ_js.cn(qab, p.isAiPanelOpen ? "text-primary" : "text-muted-foreground"),
4074
4074
  title: t("pptx.toolbar.toggleAiAssistant"),
4075
4075
  "aria-label": t("pptx.toolbar.toggleAiAssistant"),
4076
4076
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSparkles, { className: ic })
@@ -4081,7 +4081,7 @@ function ToolbarPrimaryRow(p) {
4081
4081
  {
4082
4082
  type: "button",
4083
4083
  onClick: p.onOpenSettings ?? p.onToggleShortcuts,
4084
- className: chunkQO2AMZPA_js.cn(qab, "text-muted-foreground"),
4084
+ className: chunkKCOXJJBZ_js.cn(qab, "text-muted-foreground"),
4085
4085
  title: t("pptx.toolbar.settingsShortcuts"),
4086
4086
  "aria-label": t("pptx.toolbar.settings"),
4087
4087
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSettings, { className: ics })
@@ -4278,8 +4278,8 @@ function ToolbarLateTabs({
4278
4278
  function Toolbar(p) {
4279
4279
  const { mode, isNarrowViewport, isCompactToolbarOpen, toolbarSection, onSetToolbarSection } = p;
4280
4280
  const { t } = reactI18next.useTranslation();
4281
- const { isTabVisible } = chunkBOQCAJIA_js.useToolbarVisibility(p.hiddenActions);
4282
- const viewerOptions = chunkBOQCAJIA_js.useViewerOptionsContext();
4281
+ const { isTabVisible } = chunkMCU3FDOV_js.useToolbarVisibility(p.hiddenActions);
4282
+ const viewerOptions = chunkMCU3FDOV_js.useViewerOptionsContext();
4283
4283
  const customization = useViewerCustomizationContext();
4284
4284
  const belowInput = React98.useMemo(
4285
4285
  () => ({
@@ -4364,7 +4364,7 @@ function Toolbar(p) {
4364
4364
  {
4365
4365
  type: "button",
4366
4366
  onClick: p.onToggleCompactToolbar,
4367
- className: chunkQO2AMZPA_js.cn(
4367
+ className: chunkKCOXJJBZ_js.cn(
4368
4368
  "px-2 py-1 rounded text-[11px] transition-colors mr-1",
4369
4369
  isCompactToolbarOpen ? "bg-primary/80 text-white" : "text-muted-foreground hover:text-foreground"
4370
4370
  ),
@@ -4390,7 +4390,7 @@ function Toolbar(p) {
4390
4390
  {
4391
4391
  ref: attachOverflow,
4392
4392
  "data-pptx-chrome": "ribbon-content",
4393
- className: chunkQO2AMZPA_js.cn(
4393
+ className: chunkKCOXJJBZ_js.cn(
4394
4394
  // Plain controls stay compact; labelled RibbonGroups opt into stretching.
4395
4395
  // `RibbonGroupScope` wraps controls in a `display: contents` div, so its
4396
4396
  // children are this row's flex items too and must not shrink (a shrunk
@@ -5243,7 +5243,7 @@ function DrawingOverlaySvg({
5243
5243
  onPointerDown,
5244
5244
  onPointerMove,
5245
5245
  onPointerUp,
5246
- children: isStrokeActive && liveStrokeView ? chunkBOQCAJIA_js.renderStrokeView(liveStrokeView, true, void 0, "ink-live-preview") : isStrokeActive && liveStrokeD && /* @__PURE__ */ jsxRuntime.jsx(
5246
+ children: isStrokeActive && liveStrokeView ? chunkMCU3FDOV_js.renderStrokeView(liveStrokeView, true, void 0, "ink-live-preview") : isStrokeActive && liveStrokeD && /* @__PURE__ */ jsxRuntime.jsx(
5247
5247
  "path",
5248
5248
  {
5249
5249
  d: liveStrokeD,
@@ -5258,7 +5258,7 @@ function DrawingOverlaySvg({
5258
5258
  }
5259
5259
  );
5260
5260
  }
5261
- function GridOverlay({ canvasSize, gridSpacingPx = chunkQO2AMZPA_js.GRID_SIZE, visible }) {
5261
+ function GridOverlay({ canvasSize, gridSpacingPx = chunkKCOXJJBZ_js.GRID_SIZE, visible }) {
5262
5262
  const spacing = Math.max(gridSpacingPx, 2);
5263
5263
  const patternId = React98.useMemo(() => `grid-dot-pattern-${Math.random().toString(36).slice(2, 8)}`, []);
5264
5264
  if (!visible) {
@@ -5822,7 +5822,7 @@ function PictureCropOverlay({
5822
5822
  };
5823
5823
  };
5824
5824
  const { ghost, frame, handles } = overlay;
5825
- const src = chunkBOQCAJIA_js.imgSrc(element);
5825
+ const src = chunkMCU3FDOV_js.imgSrc(element);
5826
5826
  return /* @__PURE__ */ jsxRuntime.jsxs(
5827
5827
  "div",
5828
5828
  {
@@ -6235,10 +6235,10 @@ function SelectionHandleOverlay({
6235
6235
  position: "absolute",
6236
6236
  left: element.x,
6237
6237
  top: element.y,
6238
- width: Math.max(element.width, chunkQO2AMZPA_js.MIN_ELEMENT_SIZE),
6239
- height: Math.max(element.height, chunkQO2AMZPA_js.MIN_ELEMENT_SIZE),
6240
- ["--pptx-selection-width"]: `${Math.max(element.width, chunkQO2AMZPA_js.MIN_ELEMENT_SIZE)}px`,
6241
- ["--pptx-selection-height"]: `${Math.max(element.height, chunkQO2AMZPA_js.MIN_ELEMENT_SIZE)}px`,
6238
+ width: Math.max(element.width, chunkKCOXJJBZ_js.MIN_ELEMENT_SIZE),
6239
+ height: Math.max(element.height, chunkKCOXJJBZ_js.MIN_ELEMENT_SIZE),
6240
+ ["--pptx-selection-width"]: `${Math.max(element.width, chunkKCOXJJBZ_js.MIN_ELEMENT_SIZE)}px`,
6241
+ ["--pptx-selection-height"]: `${Math.max(element.height, chunkKCOXJJBZ_js.MIN_ELEMENT_SIZE)}px`,
6242
6242
  // Every slide element carries an explicit numeric `zIndex` (see
6243
6243
  // `getContainerStyle`), so a sibling with no z-index at all paints
6244
6244
  // at the CSS "z-index: 0" level regardless of DOM order: any
@@ -6250,7 +6250,7 @@ function SelectionHandleOverlay({
6250
6250
  // (marquee z-50, connector overlay z-55/56) to match, well clear of
6251
6251
  // any realistic per-slide element count.
6252
6252
  zIndex: 58,
6253
- transform: chunkQO2AMZPA_js.getElementTransform(element),
6253
+ transform: chunkKCOXJJBZ_js.getElementTransform(element),
6254
6254
  transformOrigin: "center",
6255
6255
  // Transparent everywhere a handle button is not, so a click that
6256
6256
  // misses every handle still reaches the shape (or whatever is
@@ -6262,14 +6262,14 @@ function SelectionHandleOverlay({
6262
6262
  onDoubleClick: (e) => onDoubleClick(element.id, e),
6263
6263
  onContextMenu: (e) => onContextMenu(element.id, e),
6264
6264
  children: /* @__PURE__ */ jsxRuntime.jsx(
6265
- chunkBOQCAJIA_js.ResizeHandles,
6265
+ chunkMCU3FDOV_js.ResizeHandles,
6266
6266
  {
6267
6267
  elementId: element.id,
6268
6268
  adjustmentHandles,
6269
6269
  onResizePointerDown,
6270
6270
  onAdjustmentPointerDown,
6271
6271
  rotation: element.rotation,
6272
- nonRotationTransform: chunkQO2AMZPA_js.getElementTransformWithoutRotation(element),
6272
+ nonRotationTransform: chunkKCOXJJBZ_js.getElementTransformWithoutRotation(element),
6273
6273
  onRotate: allow.rotatable ? onRotate : void 0,
6274
6274
  forcePointerEvents: true
6275
6275
  }
@@ -6972,7 +6972,7 @@ function SlideCanvas(props) {
6972
6972
  props.registerInlineEditReader
6973
6973
  ]
6974
6974
  );
6975
- return /* @__PURE__ */ jsxRuntime.jsx(chunkBOQCAJIA_js.InlineCollaborationContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(SlideCanvasContent, { ...props }) });
6975
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkMCU3FDOV_js.InlineCollaborationContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(SlideCanvasContent, { ...props }) });
6976
6976
  }
6977
6977
  function SlideCanvasContent({
6978
6978
  imagePaste,
@@ -7241,7 +7241,7 @@ function SlideCanvasContent({
7241
7241
  onPointerMove: handleStagePointerMove,
7242
7242
  onPointerUp: handleStagePointerUp,
7243
7243
  children: [
7244
- /* @__PURE__ */ jsxRuntime.jsx(chunkBOQCAJIA_js.SlideBackgroundImageLayer, { slide: activeSlide }),
7244
+ /* @__PURE__ */ jsxRuntime.jsx(chunkMCU3FDOV_js.SlideBackgroundImageLayer, { slide: activeSlide }),
7245
7245
  presentationKeyframesCss && /* @__PURE__ */ jsxRuntime.jsx("style", { children: presentationKeyframesCss }),
7246
7246
  /* @__PURE__ */ jsxRuntime.jsx(GridOverlay, { canvasSize, gridSpacingPx, visible: showGrid }),
7247
7247
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -7253,7 +7253,7 @@ function SlideCanvasContent({
7253
7253
  }
7254
7254
  ),
7255
7255
  templateElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
7256
- chunkBOQCAJIA_js.ElementRenderer,
7256
+ chunkMCU3FDOV_js.ElementRenderer,
7257
7257
  {
7258
7258
  element,
7259
7259
  activeSlide,
@@ -7275,7 +7275,7 @@ function SlideCanvasContent({
7275
7275
  ),
7276
7276
  renderInk: false,
7277
7277
  renderGroups: true,
7278
- adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkQO2AMZPA_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
7278
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkKCOXJJBZ_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
7279
7279
  onResizePointerDown: stableResizePointerDown,
7280
7280
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
7281
7281
  onRotate: stableRotate,
@@ -7297,7 +7297,7 @@ function SlideCanvasContent({
7297
7297
  `tpl-${element.id}`
7298
7298
  )),
7299
7299
  activeSlide?.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
7300
- chunkBOQCAJIA_js.ElementRenderer,
7300
+ chunkMCU3FDOV_js.ElementRenderer,
7301
7301
  {
7302
7302
  element,
7303
7303
  activeSlide,
@@ -7319,7 +7319,7 @@ function SlideCanvasContent({
7319
7319
  ),
7320
7320
  renderInk: true,
7321
7321
  renderGroups: true,
7322
- adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkQO2AMZPA_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
7322
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkKCOXJJBZ_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
7323
7323
  onResizePointerDown: stableResizePointerDown,
7324
7324
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
7325
7325
  onRotate: stableRotate,
@@ -7363,7 +7363,7 @@ function SlideCanvasContent({
7363
7363
  editingMember && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7364
7364
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: `[data-element-id="${cssAttr(editingMember.parentId)}"] [data-element-id="${cssAttr(editingMember.member.id)}"]{visibility:hidden}` }),
7365
7365
  /* @__PURE__ */ jsxRuntime.jsx(
7366
- chunkBOQCAJIA_js.ElementRenderer,
7366
+ chunkMCU3FDOV_js.ElementRenderer,
7367
7367
  {
7368
7368
  element: editingMember.member,
7369
7369
  activeSlide,
@@ -7398,11 +7398,11 @@ function SlideCanvasContent({
7398
7398
  `group-member-edit-${editingMember.member.id}`
7399
7399
  )
7400
7400
  ] }),
7401
- selectedElement && selectedElement.id !== cropElement?.id && pptx.shouldShowElementHandles(isEditableCanvas, true, selectedElementIdSet.size) && !chunkQO2AMZPA_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
7401
+ selectedElement && selectedElement.id !== cropElement?.id && pptx.shouldShowElementHandles(isEditableCanvas, true, selectedElementIdSet.size) && !chunkKCOXJJBZ_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
7402
7402
  SelectionHandleOverlay,
7403
7403
  {
7404
7404
  element: selectedElement,
7405
- adjustmentHandles: chunkQO2AMZPA_js.getShapeAdjustmentHandleDescriptors(selectedElement),
7405
+ adjustmentHandles: chunkKCOXJJBZ_js.getShapeAdjustmentHandleDescriptors(selectedElement),
7406
7406
  onResizePointerDown: stableResizePointerDown,
7407
7407
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
7408
7408
  onRotate: stableRotate,
@@ -7516,7 +7516,7 @@ function LoadingState({ className }) {
7516
7516
  role: "status",
7517
7517
  "aria-live": "polite",
7518
7518
  "aria-atomic": "true",
7519
- className: chunkQO2AMZPA_js.cn(
7519
+ className: chunkKCOXJJBZ_js.cn(
7520
7520
  "h-full w-full flex items-center justify-center text-muted-foreground",
7521
7521
  className
7522
7522
  ),
@@ -7539,7 +7539,7 @@ function ErrorState({ className, error }) {
7539
7539
  {
7540
7540
  role: "alert",
7541
7541
  "aria-live": "assertive",
7542
- className: chunkQO2AMZPA_js.cn(
7542
+ className: chunkKCOXJJBZ_js.cn(
7543
7543
  "h-full w-full flex items-center justify-center p-6 text-center text-red-400",
7544
7544
  className
7545
7545
  ),
@@ -7570,7 +7570,7 @@ function ShortcutPanel({ isOpen, onClose }) {
7570
7570
  }
7571
7571
  )
7572
7572
  ] }),
7573
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunkQO2AMZPA_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
7573
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunkKCOXJJBZ_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
7574
7574
  "div",
7575
7575
  {
7576
7576
  className: "flex items-center justify-between gap-3 rounded bg-muted/80 px-2 py-1.5",
@@ -7630,14 +7630,14 @@ function AccessibilityPanel({
7630
7630
  "aria-label": t("pptx.accessibility.reduceMotion"),
7631
7631
  "aria-checked": reducedMotion ?? false,
7632
7632
  onClick: onToggleReducedMotion,
7633
- className: chunkQO2AMZPA_js.cn(
7633
+ className: chunkKCOXJJBZ_js.cn(
7634
7634
  "relative inline-flex h-5 w-9 items-center rounded-full transition-colors",
7635
7635
  reducedMotion ? "bg-primary" : "bg-muted-foreground/30"
7636
7636
  ),
7637
7637
  children: /* @__PURE__ */ jsxRuntime.jsx(
7638
7638
  "span",
7639
7639
  {
7640
- className: chunkQO2AMZPA_js.cn(
7640
+ className: chunkKCOXJJBZ_js.cn(
7641
7641
  "inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",
7642
7642
  reducedMotion ? "translate-x-4" : "translate-x-0.5"
7643
7643
  )
@@ -7656,7 +7656,7 @@ function AccessibilityPanel({
7656
7656
  "div",
7657
7657
  {
7658
7658
  role: "listitem",
7659
- className: chunkQO2AMZPA_js.cn(
7659
+ className: chunkKCOXJJBZ_js.cn(
7660
7660
  "flex items-start gap-2 rounded px-2 py-1.5 text-xs",
7661
7661
  /* Severity-based background and text colouring */
7662
7662
  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"
@@ -7816,7 +7816,7 @@ function ResizeHandle({
7816
7816
  {
7817
7817
  role: "separator",
7818
7818
  "aria-orientation": direction,
7819
- className: chunkQO2AMZPA_js.cn(
7819
+ className: chunkKCOXJJBZ_js.cn(
7820
7820
  // Outer container: generous hit area for easy clicking.
7821
7821
  // The visible indicator is rendered via the inner pseudo-element (::after).
7822
7822
  "relative flex-shrink-0 z-20 group",
@@ -7827,7 +7827,7 @@ function ResizeHandle({
7827
7827
  children: /* @__PURE__ */ jsxRuntime.jsx(
7828
7828
  "div",
7829
7829
  {
7830
- className: chunkQO2AMZPA_js.cn(
7830
+ className: chunkKCOXJJBZ_js.cn(
7831
7831
  "absolute transition-colors",
7832
7832
  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"
7833
7833
  )
@@ -7846,14 +7846,14 @@ function SlideThumbnailImpl({
7846
7846
  }) {
7847
7847
  const safeCanvasWidth = Math.max(canvasSize.width, 1);
7848
7848
  const safeCanvasHeight = Math.max(canvasSize.height, 1);
7849
- const width = previewWidth ?? chunkQO2AMZPA_js.SLIDE_NAV_THUMBNAIL_WIDTH;
7849
+ const width = previewWidth ?? chunkKCOXJJBZ_js.SLIDE_NAV_THUMBNAIL_WIDTH;
7850
7850
  const scale = width / safeCanvasWidth;
7851
7851
  const previewHeight = pptx.editorThumbnailHeight(safeCanvasWidth, safeCanvasHeight, width);
7852
7852
  const previewElements = pptx.buildPreviewElements(slide, templateElements);
7853
7853
  const slideFieldContext = pptx.deriveSlideFieldContext(fieldContext, slide);
7854
7854
  const { t } = reactI18next.useTranslation();
7855
7855
  const transitionLabel = slide.transition ? (() => {
7856
- const opt = chunkQO2AMZPA_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
7856
+ const opt = chunkKCOXJJBZ_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
7857
7857
  return opt ? t(opt.i18nKey) : slide.transition.type;
7858
7858
  })() : void 0;
7859
7859
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -7879,7 +7879,7 @@ function SlideThumbnailImpl({
7879
7879
  ...pptx.deviceStrokeStageStyle(scale)
7880
7880
  },
7881
7881
  children: [
7882
- /* @__PURE__ */ jsxRuntime.jsx(chunkBOQCAJIA_js.SlideBackgroundImageLayer, { slide }),
7882
+ /* @__PURE__ */ jsxRuntime.jsx(chunkMCU3FDOV_js.SlideBackgroundImageLayer, { slide }),
7883
7883
  slide.transition && slide.transition.type !== "none" && slide.transition.type !== "cut" && /* @__PURE__ */ jsxRuntime.jsx(
7884
7884
  "div",
7885
7885
  {
@@ -7889,7 +7889,7 @@ function SlideThumbnailImpl({
7889
7889
  }
7890
7890
  ),
7891
7891
  previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
7892
- chunkBOQCAJIA_js.StaticElementRenderer,
7892
+ chunkMCU3FDOV_js.StaticElementRenderer,
7893
7893
  {
7894
7894
  element,
7895
7895
  activeSlide: slide,
@@ -8445,7 +8445,7 @@ function SectionHeader({
8445
8445
  /* @__PURE__ */ jsxRuntime.jsx(
8446
8446
  lu.LuChevronDown,
8447
8447
  {
8448
- className: chunkQO2AMZPA_js.cn(
8448
+ className: chunkKCOXJJBZ_js.cn(
8449
8449
  "h-3 w-3 flex-shrink-0 transition-transform",
8450
8450
  isCollapsed ? "-rotate-90" : "rotate-0"
8451
8451
  )
@@ -8596,7 +8596,7 @@ function LazyThumbnailInner({
8596
8596
  }
8597
8597
  var LazyThumbnail = React98__default.default.memo(LazyThumbnailInner);
8598
8598
  function declaredSectionFacts(groups, sectionId) {
8599
- const declared = groups.filter((group) => group.id !== chunkQO2AMZPA_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunkQO2AMZPA_js.UNGROUPED_SECTION_ID).map((group) => group.id);
8599
+ const declared = groups.filter((group) => group.id !== chunkKCOXJJBZ_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunkKCOXJJBZ_js.UNGROUPED_SECTION_ID).map((group) => group.id);
8600
8600
  return {
8601
8601
  isDeclared: declared.includes(sectionId),
8602
8602
  index: declared.indexOf(sectionId),
@@ -8681,7 +8681,7 @@ function SlideItemInner({
8681
8681
  "data-pptx-chrome": "slide-row",
8682
8682
  "aria-describedby": cue.labelId,
8683
8683
  "data-pptx-slide-hidden": cue.marker,
8684
- className: chunkQO2AMZPA_js.cn(
8684
+ className: chunkKCOXJJBZ_js.cn(
8685
8685
  "group relative flex w-full items-center gap-1 cursor-pointer border-0 bg-transparent py-0.5 px-1 text-left transition-all",
8686
8686
  isActive && "bg-accent/40 before:absolute before:left-0 before:top-1 before:bottom-1 before:w-[3px] before:bg-primary before:rounded-r",
8687
8687
  isSelected && !isActive && "bg-accent/20 ring-1 ring-inset ring-primary/50",
@@ -8703,7 +8703,7 @@ function SlideItemInner({
8703
8703
  /* @__PURE__ */ jsxRuntime.jsx(
8704
8704
  "span",
8705
8705
  {
8706
- className: chunkQO2AMZPA_js.cn(
8706
+ className: chunkKCOXJJBZ_js.cn(
8707
8707
  "text-[10px] tabular-nums text-right select-none w-full",
8708
8708
  isActive ? "text-primary font-medium" : "text-muted-foreground"
8709
8709
  ),
@@ -8726,7 +8726,7 @@ function SlideItemInner({
8726
8726
  /* @__PURE__ */ jsxRuntime.jsxs(
8727
8727
  "div",
8728
8728
  {
8729
- className: chunkQO2AMZPA_js.cn(
8729
+ className: chunkKCOXJJBZ_js.cn(
8730
8730
  "relative shrink-0 overflow-hidden border transition-colors bg-white",
8731
8731
  isActive ? "border-primary/60" : "border-transparent group-hover:border-border/40"
8732
8732
  ),
@@ -8925,7 +8925,7 @@ function SlidesPaneSidebar({
8925
8925
  tableStyleContext
8926
8926
  }) {
8927
8927
  const { t } = reactI18next.useTranslation();
8928
- const collab = chunkBOQCAJIA_js.useCollaboration();
8928
+ const collab = chunkMCU3FDOV_js.useCollaboration();
8929
8929
  const slideRefs = React98.useRef(/* @__PURE__ */ new Map());
8930
8930
  const renameInputRef = React98.useRef(null);
8931
8931
  const slidePresenceMap = React98.useMemo(() => {
@@ -8950,7 +8950,7 @@ function SlidesPaneSidebar({
8950
8950
  () => estimateSlideItemHeight(canvasSize.width, canvasSize.height, previewWidth),
8951
8951
  [canvasSize.width, canvasSize.height, previewWidth]
8952
8952
  );
8953
- const showSectionHeaders = sectionGroups.some((group) => group.id !== chunkQO2AMZPA_js.DEFAULT_SECTION_GROUP_ID);
8953
+ const showSectionHeaders = sectionGroups.some((group) => group.id !== chunkKCOXJJBZ_js.DEFAULT_SECTION_GROUP_ID);
8954
8954
  const {
8955
8955
  collapsedSections,
8956
8956
  renamingSectionId,
@@ -9020,7 +9020,7 @@ function SlidesPaneSidebar({
9020
9020
  [sectionGroups, showSectionHeaders, effectiveCollapsed]
9021
9021
  );
9022
9022
  const shouldVirtualize = slides.length >= VIRTUALIZATION_THRESHOLD;
9023
- const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunkBOQCAJIA_js.useVirtualizedSlides({
9023
+ const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunkMCU3FDOV_js.useVirtualizedSlides({
9024
9024
  totalItems: shouldVirtualize ? flatItems.length : 0,
9025
9025
  itemHeight: estimatedItemHeight
9026
9026
  });
@@ -9277,7 +9277,7 @@ function HandoutMasterPanel({
9277
9277
  {
9278
9278
  type: "button",
9279
9279
  "aria-pressed": slidesPerPage === count,
9280
- className: chunkQO2AMZPA_js.cn(
9280
+ className: chunkKCOXJJBZ_js.cn(
9281
9281
  "px-2 py-1.5 rounded text-[11px] font-medium transition-colors",
9282
9282
  slidesPerPage === count ? "bg-primary text-white" : "bg-accent/50 text-muted-foreground hover:bg-accent/70 hover:text-foreground"
9283
9283
  ),
@@ -9395,7 +9395,7 @@ function SlideMastersList({
9395
9395
  ref: isMasterActive ? activeRef : void 0,
9396
9396
  "aria-pressed": isMasterActive,
9397
9397
  "aria-label": master.name || t("pptx.master.master"),
9398
- className: chunkQO2AMZPA_js.cn(
9398
+ className: chunkKCOXJJBZ_js.cn(
9399
9399
  "group relative block w-full cursor-pointer rounded-lg border-2 p-1 text-left transition-all",
9400
9400
  isMasterActive ? "border-amber-500 bg-amber-500/10" : "border-border bg-background/40 hover:border-border"
9401
9401
  ),
@@ -9412,7 +9412,7 @@ function SlideMastersList({
9412
9412
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 px-1", children: /* @__PURE__ */ jsxRuntime.jsx(
9413
9413
  "span",
9414
9414
  {
9415
- className: chunkQO2AMZPA_js.cn(
9415
+ className: chunkKCOXJJBZ_js.cn(
9416
9416
  "text-[10px] font-medium",
9417
9417
  isMasterActive ? "text-amber-400" : "text-muted-foreground"
9418
9418
  ),
@@ -9431,7 +9431,7 @@ function SlideMastersList({
9431
9431
  ref: isLayoutActive ? activeRef : void 0,
9432
9432
  "aria-pressed": isLayoutActive,
9433
9433
  "aria-label": layout.name || t("pptx.master.layout"),
9434
- className: chunkQO2AMZPA_js.cn(
9434
+ className: chunkKCOXJJBZ_js.cn(
9435
9435
  "group relative block w-full cursor-pointer rounded-md border-2 p-0.5 text-left transition-all",
9436
9436
  isLayoutActive ? "border-primary bg-primary/10" : "border-border bg-background/40 hover:border-border"
9437
9437
  ),
@@ -9448,7 +9448,7 @@ function SlideMastersList({
9448
9448
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 px-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
9449
9449
  "span",
9450
9450
  {
9451
- className: chunkQO2AMZPA_js.cn(
9451
+ className: chunkKCOXJJBZ_js.cn(
9452
9452
  "text-[9px]",
9453
9453
  isLayoutActive ? "text-primary" : "text-muted-foreground"
9454
9454
  ),
@@ -9540,7 +9540,7 @@ function MasterViewSidebar({
9540
9540
  type: "button",
9541
9541
  role: "tab",
9542
9542
  "aria-selected": masterViewTab === tab.key,
9543
- className: chunkQO2AMZPA_js.cn(
9543
+ className: chunkKCOXJJBZ_js.cn(
9544
9544
  "flex-1 px-1 py-1.5 text-[10px] font-medium transition-colors border-b-2",
9545
9545
  masterViewTab === tab.key ? "border-amber-500 text-amber-400" : "border-transparent text-muted-foreground hover:text-foreground"
9546
9546
  ),
@@ -10043,7 +10043,7 @@ function SectionBlock({
10043
10043
  /* @__PURE__ */ jsxRuntime.jsx(
10044
10044
  lu.LuChevronDown,
10045
10045
  {
10046
- className: chunkQO2AMZPA_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10046
+ className: chunkKCOXJJBZ_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10047
10047
  }
10048
10048
  ),
10049
10049
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-left", children: section.label }),
@@ -10092,7 +10092,7 @@ function SlideCardImpl({
10092
10092
  return /* @__PURE__ */ jsxRuntime.jsxs(
10093
10093
  "div",
10094
10094
  {
10095
- className: chunkQO2AMZPA_js.cn(
10095
+ className: chunkKCOXJJBZ_js.cn(
10096
10096
  "group relative cursor-pointer rounded-lg border-2 p-1 transition-all",
10097
10097
  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",
10098
10098
  slide.hidden && "opacity-40"
@@ -10115,7 +10115,7 @@ function SlideCardImpl({
10115
10115
  /* @__PURE__ */ jsxRuntime.jsx(
10116
10116
  "span",
10117
10117
  {
10118
- className: chunkQO2AMZPA_js.cn(
10118
+ className: chunkKCOXJJBZ_js.cn(
10119
10119
  "text-[11px] font-medium px-0.5",
10120
10120
  isSelected ? "text-primary" : isActive ? "text-primary/70" : "text-muted-foreground"
10121
10121
  ),
@@ -10857,7 +10857,7 @@ function ReadingViewStage({
10857
10857
  "div",
10858
10858
  {
10859
10859
  className: "absolute inset-0",
10860
- style: { backgroundColor: chunkQO2AMZPA_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
10860
+ style: { backgroundColor: chunkKCOXJJBZ_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
10861
10861
  }
10862
10862
  ),
10863
10863
  slide.backgroundImage && /* @__PURE__ */ jsxRuntime.jsx(
@@ -10876,7 +10876,7 @@ function ReadingViewStage({
10876
10876
  className: "absolute left-0 top-0 origin-top-left",
10877
10877
  style: { width, height, transform: `scale(${scale})`, ...pptx.deviceStrokeStageStyle(scale) },
10878
10878
  children: elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
10879
- chunkBOQCAJIA_js.StaticElementRenderer,
10879
+ chunkMCU3FDOV_js.StaticElementRenderer,
10880
10880
  {
10881
10881
  element,
10882
10882
  activeSlide: slide,
@@ -11088,7 +11088,7 @@ function renderRichNotesSegments(segments) {
11088
11088
  if (segment.style.fontFamily) {
11089
11089
  style.fontFamily = segment.style.fontFamily;
11090
11090
  }
11091
- if (segment.style.hyperlink && chunkQO2AMZPA_js.isUrlSafe(segment.style.hyperlink)) {
11091
+ if (segment.style.hyperlink && chunkKCOXJJBZ_js.isUrlSafe(segment.style.hyperlink)) {
11092
11092
  const safeHref = segment.style.hyperlink;
11093
11093
  style.color = "#4a9eff";
11094
11094
  style.textDecoration = "underline";
@@ -11101,7 +11101,7 @@ function renderRichNotesSegments(segments) {
11101
11101
  style,
11102
11102
  onClick: (e) => {
11103
11103
  e.preventDefault();
11104
- chunkQO2AMZPA_js.safeOpenUrl(safeHref);
11104
+ chunkKCOXJJBZ_js.safeOpenUrl(safeHref);
11105
11105
  },
11106
11106
  children: segment.text
11107
11107
  },
@@ -11450,7 +11450,7 @@ function useSlideNotes({
11450
11450
  const href = target.getAttribute("data-hyperlink") || target.getAttribute("href");
11451
11451
  if (href && (e.ctrlKey || e.metaKey)) {
11452
11452
  e.preventDefault();
11453
- chunkQO2AMZPA_js.safeOpenUrl(href);
11453
+ chunkKCOXJJBZ_js.safeOpenUrl(href);
11454
11454
  }
11455
11455
  }, []);
11456
11456
  return {
@@ -11531,7 +11531,7 @@ function SlideNotesPanel({
11531
11531
  });
11532
11532
  const hasNotes = draft.trim().length > 0;
11533
11533
  const slideLabel = activeSlide ? t("pptx.notes.slideN", { n: activeSlide.slideNumber }) : t("pptx.notes.noSlide");
11534
- const { dragY, handlers: dragHandlers } = chunkBOQCAJIA_js.useSheetDismissDrag(onToggle);
11534
+ const { dragY, handlers: dragHandlers } = chunkMCU3FDOV_js.useSheetDismissDrag(onToggle);
11535
11535
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11536
11536
  isExpanded && /* @__PURE__ */ jsxRuntime.jsx(
11537
11537
  "button",
@@ -11547,7 +11547,7 @@ function SlideNotesPanel({
11547
11547
  {
11548
11548
  ref: rootRef,
11549
11549
  "data-pptx-chrome": "notes",
11550
- className: chunkQO2AMZPA_js.cn(
11550
+ className: chunkKCOXJJBZ_js.cn(
11551
11551
  "flex flex-col border-t border-border/60 bg-background select-none",
11552
11552
  // On mobile, hide the entire notes strip when collapsed: the
11553
11553
  // MobileBottomBar's Notes button is the entry point instead.
@@ -11911,7 +11911,7 @@ function SlideDiffRow({
11911
11911
  return /* @__PURE__ */ jsxRuntime.jsxs(
11912
11912
  "div",
11913
11913
  {
11914
- className: chunkQO2AMZPA_js.cn(
11914
+ className: chunkKCOXJJBZ_js.cn(
11915
11915
  "rounded-lg border transition-colors",
11916
11916
  isResolved ? "border-border/60 bg-card/40 opacity-60" : "border-border bg-background/70"
11917
11917
  ),
@@ -11925,7 +11925,7 @@ function SlideDiffRow({
11925
11925
  children: [
11926
11926
  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" }),
11927
11927
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-foreground", children: t("pptx.compare.slideNumber", { number: slideNumber }) }),
11928
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkQO2AMZPA_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
11928
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkKCOXJJBZ_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
11929
11929
  diff.changes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-muted-foreground", children: [
11930
11930
  diff.changes.length,
11931
11931
  " ",
@@ -11935,7 +11935,7 @@ function SlideDiffRow({
11935
11935
  isResolved && /* @__PURE__ */ jsxRuntime.jsx(
11936
11936
  "span",
11937
11937
  {
11938
- className: chunkQO2AMZPA_js.cn(
11938
+ className: chunkKCOXJJBZ_js.cn(
11939
11939
  "text-[10px] font-medium",
11940
11940
  accepted ? "text-green-400" : "text-muted-foreground"
11941
11941
  ),
@@ -11963,7 +11963,7 @@ function SlideDiffRow({
11963
11963
  /* @__PURE__ */ jsxRuntime.jsx(
11964
11964
  "div",
11965
11965
  {
11966
- className: chunkQO2AMZPA_js.cn(
11966
+ className: chunkKCOXJJBZ_js.cn(
11967
11967
  "rounded border overflow-hidden",
11968
11968
  diff.status === "added" ? "border-green-700/60" : diff.status === "changed" ? "border-amber-700/60" : "border-border"
11969
11969
  ),
@@ -12668,7 +12668,7 @@ function DocumentPropertiesDialog({
12668
12668
  const handleClose = React98.useCallback(() => {
12669
12669
  onClose();
12670
12670
  }, [onClose]);
12671
- const { panelStyle, handlers: dragHandlers } = chunkBOQCAJIA_js.useModalDismissDrag(handleClose);
12671
+ const { panelStyle, handlers: dragHandlers } = chunkMCU3FDOV_js.useModalDismissDrag(handleClose);
12672
12672
  if (!isOpen) {
12673
12673
  return null;
12674
12674
  }
@@ -13265,7 +13265,7 @@ function PresentationSubtitleBar({
13265
13265
  }) {
13266
13266
  const { t } = reactI18next.useTranslation();
13267
13267
  const language = pptx.subtitleRecognitionLanguage(
13268
- pptx.subtitleSettingsFromOptions(chunkBOQCAJIA_js.useViewerOptionsContext()),
13268
+ pptx.subtitleSettingsFromOptions(chunkMCU3FDOV_js.useViewerOptionsContext()),
13269
13269
  typeof navigator === "undefined" ? "en-US" : navigator.language
13270
13270
  );
13271
13271
  const [captionText, setCaptionText] = React98.useState("");
@@ -13433,7 +13433,7 @@ function ScaledSlidePreviewImpl({
13433
13433
  {
13434
13434
  className: "absolute inset-0",
13435
13435
  style: {
13436
- backgroundColor: chunkQO2AMZPA_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13436
+ backgroundColor: chunkKCOXJJBZ_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13437
13437
  }
13438
13438
  }
13439
13439
  ),
@@ -13459,7 +13459,7 @@ function ScaledSlidePreviewImpl({
13459
13459
  ...pptx.deviceStrokeStageStyle(scale)
13460
13460
  },
13461
13461
  children: previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
13462
- chunkBOQCAJIA_js.StaticElementRenderer,
13462
+ chunkMCU3FDOV_js.StaticElementRenderer,
13463
13463
  {
13464
13464
  element,
13465
13465
  activeSlide: slide,
@@ -14176,7 +14176,7 @@ function getElementDisplayName(element, index) {
14176
14176
  if (element.name && element.name.trim().length > 0) {
14177
14177
  return element.name.trim();
14178
14178
  }
14179
- if ((0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(element) && element.text && element.text.trim().length > 0) {
14179
+ if ((0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(element) && element.text && element.text.trim().length > 0) {
14180
14180
  return element.text.trim().slice(0, 32);
14181
14181
  }
14182
14182
  const label = TYPE_LABELS[element.type] ?? "Object";
@@ -14349,7 +14349,7 @@ function SelectionPane({
14349
14349
  setDragIndex(null);
14350
14350
  setDragOverIndex(null);
14351
14351
  },
14352
- className: chunkQO2AMZPA_js.cn(
14352
+ className: chunkKCOXJJBZ_js.cn(
14353
14353
  "flex items-center gap-1.5 px-2 py-1 text-xs cursor-pointer transition-colors",
14354
14354
  isSelected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground",
14355
14355
  dragOverIndex === realIndex ? "border-t-2 border-primary" : ""
@@ -14403,13 +14403,13 @@ function SelectionPane({
14403
14403
  }
14404
14404
  var INPUT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14405
14405
  var SELECT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14406
- var ENTRANCE_PRESETS = chunkQO2AMZPA_js.ANIMATION_PRESET_OPTIONS.filter(
14406
+ var ENTRANCE_PRESETS = chunkKCOXJJBZ_js.ANIMATION_PRESET_OPTIONS.filter(
14407
14407
  (o) => o.value === "fadeIn" || o.value === "flyIn" || o.value === "zoomIn"
14408
14408
  );
14409
- var EXIT_PRESETS = chunkQO2AMZPA_js.ANIMATION_PRESET_OPTIONS.filter(
14409
+ var EXIT_PRESETS = chunkKCOXJJBZ_js.ANIMATION_PRESET_OPTIONS.filter(
14410
14410
  (o) => o.value === "fadeOut" || o.value === "flyOut" || o.value === "zoomOut"
14411
14411
  );
14412
- var EMPHASIS_PRESETS = chunkQO2AMZPA_js.ANIMATION_PRESET_OPTIONS.filter(
14412
+ var EMPHASIS_PRESETS = chunkKCOXJJBZ_js.ANIMATION_PRESET_OPTIONS.filter(
14413
14413
  (o) => o.value === "spin" || o.value === "pulse" || o.value === "colorWave" || o.value === "bounce" || o.value === "flash" || o.value === "growShrink" || o.value === "teeter"
14414
14414
  );
14415
14415
  var TIMING_CURVE_OPTIONS = [
@@ -14575,7 +14575,7 @@ function AnimationTimelineSection({
14575
14575
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-6 rounded bg-muted/50 border border-border overflow-hidden", children: timelineBarData.map((bar) => /* @__PURE__ */ jsxRuntime.jsx(
14576
14576
  "div",
14577
14577
  {
14578
- className: chunkQO2AMZPA_js.cn(
14578
+ className: chunkKCOXJJBZ_js.cn(
14579
14579
  "absolute top-0.5 bottom-0.5 rounded-sm transition-colors",
14580
14580
  animationTypeColor(bar.anim),
14581
14581
  bar.anim.elementId === selectedElementId && "ring-1 ring-primary"
@@ -14604,7 +14604,7 @@ function AnimationTimelineSection({
14604
14604
  onDragLeave: handleDragLeave,
14605
14605
  onDrop: (e) => handleDrop(index, e),
14606
14606
  title: t("pptx.animation.nativeEffectHint"),
14607
- className: chunkQO2AMZPA_js.cn(
14607
+ className: chunkKCOXJJBZ_js.cn(
14608
14608
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] italic",
14609
14609
  "bg-muted/20 text-muted-foreground/70",
14610
14610
  isDragOver && "border-t-2 border-primary"
@@ -14643,7 +14643,7 @@ function AnimationTimelineSection({
14643
14643
  onDragEnd: handleDragEnd,
14644
14644
  onMouseEnter: () => handleAnimationHover(anim),
14645
14645
  onMouseLeave: handleAnimationHoverEnd,
14646
- className: chunkQO2AMZPA_js.cn(
14646
+ className: chunkKCOXJJBZ_js.cn(
14647
14647
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] cursor-grab transition-colors",
14648
14648
  isSelected ? "bg-primary/30 text-primary" : "bg-muted/50 text-muted-foreground",
14649
14649
  isDragging && "opacity-40",
@@ -14775,7 +14775,7 @@ function EffectSoundRow({
14775
14775
  }
14776
14776
  const asset = pptx.getEffectSoundAsset(soundState.catalogueId);
14777
14777
  if (asset) {
14778
- chunkBOQCAJIA_js.playAnimationSound(asset.dataUrl);
14778
+ chunkMCU3FDOV_js.playAnimationSound(asset.dataUrl);
14779
14779
  }
14780
14780
  };
14781
14781
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -14950,7 +14950,7 @@ function useAnimationPreview({
14950
14950
  }) {
14951
14951
  const handleAnimationHover = React98.useCallback((anim) => {
14952
14952
  if (anim.motionPath) {
14953
- chunkQO2AMZPA_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
14953
+ chunkKCOXJJBZ_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
14954
14954
  durationMs: anim.durationMs,
14955
14955
  delayMs: anim.delayMs,
14956
14956
  timingCurve: anim.timingCurve
@@ -14961,19 +14961,19 @@ function useAnimationPreview({
14961
14961
  if (!preset || preset === "none") {
14962
14962
  return;
14963
14963
  }
14964
- chunkQO2AMZPA_js.startPreviewAnimation(anim.elementId, preset, {
14964
+ chunkKCOXJJBZ_js.startPreviewAnimation(anim.elementId, preset, {
14965
14965
  direction: anim.direction,
14966
14966
  durationMs: anim.durationMs ?? 500,
14967
14967
  timingCurve: anim.timingCurve
14968
14968
  });
14969
14969
  }, []);
14970
- const handleAnimationHoverEnd = React98.useCallback(() => chunkQO2AMZPA_js.stopPreviewAnimation(), []);
14970
+ const handleAnimationHoverEnd = React98.useCallback(() => chunkKCOXJJBZ_js.stopPreviewAnimation(), []);
14971
14971
  const handlePreviewClick = React98.useCallback(() => {
14972
14972
  if (!selectedElementAnimation) {
14973
14973
  return;
14974
14974
  }
14975
14975
  if (selectedElementAnimation.motionPath) {
14976
- chunkQO2AMZPA_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
14976
+ chunkKCOXJJBZ_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
14977
14977
  durationMs: selectedElementAnimation.durationMs,
14978
14978
  delayMs: selectedElementAnimation.delayMs,
14979
14979
  timingCurve: selectedElementAnimation.timingCurve
@@ -14984,7 +14984,7 @@ function useAnimationPreview({
14984
14984
  if (!preset || preset === "none") {
14985
14985
  return;
14986
14986
  }
14987
- chunkQO2AMZPA_js.startPreviewAnimation(selectedElementId, preset, {
14987
+ chunkKCOXJJBZ_js.startPreviewAnimation(selectedElementId, preset, {
14988
14988
  direction: selectedElementAnimation.direction,
14989
14989
  durationMs: selectedElementAnimation.durationMs ?? 500,
14990
14990
  timingCurve: selectedElementAnimation.timingCurve
@@ -15218,8 +15218,8 @@ function useAnimationHandlers({
15218
15218
  if (!el) {
15219
15219
  return anim.elementId.slice(0, 8);
15220
15220
  }
15221
- const text = (0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(el) ? el.text : void 0;
15222
- return text || chunkQO2AMZPA_js.getElementLabel(el);
15221
+ const text = (0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(el) ? el.text : void 0;
15222
+ return text || chunkKCOXJJBZ_js.getElementLabel(el);
15223
15223
  },
15224
15224
  [activeSlide.elements]
15225
15225
  );
@@ -15229,8 +15229,8 @@ function useAnimationHandlers({
15229
15229
  if (!el) {
15230
15230
  return id.slice(0, 8);
15231
15231
  }
15232
- const text = (0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(el) ? el.text : void 0;
15233
- return text || chunkQO2AMZPA_js.getElementLabel(el);
15232
+ const text = (0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(el) ? el.text : void 0;
15233
+ return text || chunkKCOXJJBZ_js.getElementLabel(el);
15234
15234
  }).join(", "),
15235
15235
  [activeSlide.elements]
15236
15236
  );
@@ -15287,7 +15287,7 @@ function AnimationPanel({
15287
15287
  onUpdateSlide
15288
15288
  }) {
15289
15289
  const { t } = reactI18next.useTranslation();
15290
- const { viewportWidth } = chunkBOQCAJIA_js.useIsMobile();
15290
+ const { viewportWidth } = chunkMCU3FDOV_js.useIsMobile();
15291
15291
  const directionBtnPx = Math.max(28, pptx.getDensePanelTouchTargetPx(viewportWidth));
15292
15292
  const fieldStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
15293
15293
  const handlers = useAnimationHandlers({
@@ -15415,7 +15415,7 @@ function AnimationPanel({
15415
15415
  type: "button",
15416
15416
  disabled: !canEdit,
15417
15417
  style: { minWidth: directionBtnPx, minHeight: directionBtnPx },
15418
- className: chunkQO2AMZPA_js.cn(
15418
+ className: chunkKCOXJJBZ_js.cn(
15419
15419
  "flex items-center justify-center rounded border transition-colors",
15420
15420
  isActive ? "border-primary bg-primary/20 text-primary" : "border-border bg-muted text-muted-foreground hover:bg-accent"
15421
15421
  ),
@@ -15493,7 +15493,7 @@ function AnimationPanel({
15493
15493
  style: fieldStyle,
15494
15494
  children: [
15495
15495
  /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: t("pptx.animation.trigger.selectShape") }),
15496
- activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunkQO2AMZPA_js.getElementLabel(el) }, el.id))
15496
+ activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunkKCOXJJBZ_js.getElementLabel(el) }, el.id))
15497
15497
  ]
15498
15498
  }
15499
15499
  )
@@ -15641,7 +15641,7 @@ function ActionTargetFields({
15641
15641
  type: "text",
15642
15642
  disabled: !canEdit,
15643
15643
  "aria-label": t(urlLabelKey),
15644
- className: chunkQO2AMZPA_js.cn(INPUT2, "w-full"),
15644
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "w-full"),
15645
15645
  placeholder: "https://...",
15646
15646
  value: url ?? "",
15647
15647
  onChange: (e) => onChange({ url: e.target.value })
@@ -15655,7 +15655,7 @@ function ActionTargetFields({
15655
15655
  type: "number",
15656
15656
  disabled: !canEdit,
15657
15657
  "aria-label": t("pptx.action.gotoSlide"),
15658
- className: chunkQO2AMZPA_js.cn(INPUT2, "w-full"),
15658
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "w-full"),
15659
15659
  placeholder: t("pptx.action.slideNumberPlaceholder"),
15660
15660
  min: 1,
15661
15661
  max: slideCount,
@@ -15677,7 +15677,7 @@ function ActionTargetFields({
15677
15677
  "data-testid": "pptx-action-custom-show",
15678
15678
  disabled: !canEdit,
15679
15679
  "aria-label": t("pptx.hyperlink.customShowLabel"),
15680
- className: chunkQO2AMZPA_js.cn(INPUT2, "w-full"),
15680
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "w-full"),
15681
15681
  value: customShowId ?? "",
15682
15682
  onChange: (e) => onChange({ customShowId: e.target.value, returnAfter }),
15683
15683
  children: [
@@ -15710,11 +15710,11 @@ function ActionSettingsPanel({
15710
15710
  onUpdateElement
15711
15711
  }) {
15712
15712
  const { t } = reactI18next.useTranslation();
15713
- const clickAction = selectedElement.actionClick ? (0, chunkQO2AMZPA_js.dist_exports.pptxActionToElementAction)(selectedElement.actionClick, "click") : void 0;
15714
- const hoverAction = selectedElement.actionHover ? (0, chunkQO2AMZPA_js.dist_exports.pptxActionToElementAction)(selectedElement.actionHover, "hover") : void 0;
15713
+ const clickAction = selectedElement.actionClick ? (0, chunkKCOXJJBZ_js.dist_exports.pptxActionToElementAction)(selectedElement.actionClick, "click") : void 0;
15714
+ const hoverAction = selectedElement.actionHover ? (0, chunkKCOXJJBZ_js.dist_exports.pptxActionToElementAction)(selectedElement.actionHover, "hover") : void 0;
15715
15715
  const updateAction = (trigger, type, patch) => {
15716
15716
  const ea = { trigger, type, ...patch };
15717
- const pa = (0, chunkQO2AMZPA_js.dist_exports.elementActionToPptxAction)(ea);
15717
+ const pa = (0, chunkKCOXJJBZ_js.dist_exports.elementActionToPptxAction)(ea);
15718
15718
  if (trigger === "click") {
15719
15719
  onUpdateElement({ actionClick: pa });
15720
15720
  } else {
@@ -15799,7 +15799,7 @@ function ActionTriggerSection({
15799
15799
  {
15800
15800
  disabled: !canEdit,
15801
15801
  "aria-label": label,
15802
- className: chunkQO2AMZPA_js.cn(INPUT2, "w-full"),
15802
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "w-full"),
15803
15803
  value: effectiveType,
15804
15804
  onChange: (e) => changeType(e.target.value),
15805
15805
  children: pptx.ELEMENT_ACTION_TYPE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.labelKey) }, o.value))
@@ -16187,7 +16187,7 @@ function ChartDataGrid({
16187
16187
  }) {
16188
16188
  const { t } = reactI18next.useTranslation();
16189
16189
  const highlightRef = React98.useRef(null);
16190
- const { viewportWidth } = chunkBOQCAJIA_js.useIsMobile();
16190
+ const { viewportWidth } = chunkMCU3FDOV_js.useIsMobile();
16191
16191
  const gridPlan = pptx.getDenseGridLayoutPlan(viewportWidth);
16192
16192
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
16193
16193
  const rowHeaderClass = gridPlan.stickyFirstColumn ? "sticky left-0 z-10 bg-card" : "";
@@ -17544,8 +17544,8 @@ function ChartUserShapeOptions({
17544
17544
  }
17545
17545
  function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
17546
17546
  const chartData = selectedElement.chartData;
17547
- const followDataPoint = chunkBOQCAJIA_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17548
- const { selection: partSelection } = chunkBOQCAJIA_js.useChartPartSelection();
17547
+ const followDataPoint = chunkMCU3FDOV_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17548
+ const { selection: partSelection } = chunkMCU3FDOV_js.useChartPartSelection();
17549
17549
  const canvasPart = partSelection?.elementId === selectedElement.id ? partSelection.part : null;
17550
17550
  const title = chartData?.title;
17551
17551
  const chartType = chartData?.chartType;
@@ -17759,40 +17759,40 @@ function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
17759
17759
  [chartData, selectedElement, replaceChartData]
17760
17760
  );
17761
17761
  const setAxisLogScale = React98.useCallback(
17762
- (axisType, opts) => applyChartOp((el) => (0, chunkQO2AMZPA_js.dist_exports.setChartAxisLogScale)(el, axisType, opts)),
17762
+ (axisType, opts) => applyChartOp((el) => (0, chunkKCOXJJBZ_js.dist_exports.setChartAxisLogScale)(el, axisType, opts)),
17763
17763
  [applyChartOp]
17764
17764
  );
17765
17765
  const setAxisTitleStyle = React98.useCallback(
17766
- (axisType, edit) => applyChartOp((el) => (0, chunkQO2AMZPA_js.dist_exports.setChartAxisTitleStyle)(el, axisType, edit)),
17766
+ (axisType, edit) => applyChartOp((el) => (0, chunkKCOXJJBZ_js.dist_exports.setChartAxisTitleStyle)(el, axisType, edit)),
17767
17767
  [applyChartOp]
17768
17768
  );
17769
17769
  const setGridlineStyle = React98.useCallback(
17770
- (axisType, which, edit) => applyChartOp((el) => (0, chunkQO2AMZPA_js.dist_exports.setChartAxisGridlineStyle)(el, axisType, which, edit)),
17770
+ (axisType, which, edit) => applyChartOp((el) => (0, chunkKCOXJJBZ_js.dist_exports.setChartAxisGridlineStyle)(el, axisType, which, edit)),
17771
17771
  [applyChartOp]
17772
17772
  );
17773
17773
  const setSeriesMarker = React98.useCallback(
17774
- (index, marker) => applyChartOp((el) => (0, chunkQO2AMZPA_js.dist_exports.setChartSeriesMarker)(el, index, marker)),
17774
+ (index, marker) => applyChartOp((el) => (0, chunkKCOXJJBZ_js.dist_exports.setChartSeriesMarker)(el, index, marker)),
17775
17775
  [applyChartOp]
17776
17776
  );
17777
17777
  const setSeriesType = React98.useCallback(
17778
- (index, seriesType) => applyChartOp((el) => (0, chunkQO2AMZPA_js.dist_exports.setChartSeriesChartType)(el, index, seriesType)),
17778
+ (index, seriesType) => applyChartOp((el) => (0, chunkKCOXJJBZ_js.dist_exports.setChartSeriesChartType)(el, index, seriesType)),
17779
17779
  [applyChartOp]
17780
17780
  );
17781
17781
  const setPointFill = React98.useCallback(
17782
- (seriesIndex, pointIndex, color) => applyChartOp((el) => (0, chunkQO2AMZPA_js.dist_exports.setChartDataPointFill)(el, seriesIndex, pointIndex, color)),
17782
+ (seriesIndex, pointIndex, color) => applyChartOp((el) => (0, chunkKCOXJJBZ_js.dist_exports.setChartDataPointFill)(el, seriesIndex, pointIndex, color)),
17783
17783
  [applyChartOp]
17784
17784
  );
17785
17785
  const setPointExplosion = React98.useCallback(
17786
- (seriesIndex, pointIndex, explosion) => applyChartOp((el) => (0, chunkQO2AMZPA_js.dist_exports.setChartDataPointExplosion)(el, seriesIndex, pointIndex, explosion)),
17786
+ (seriesIndex, pointIndex, explosion) => applyChartOp((el) => (0, chunkKCOXJJBZ_js.dist_exports.setChartDataPointExplosion)(el, seriesIndex, pointIndex, explosion)),
17787
17787
  [applyChartOp]
17788
17788
  );
17789
17789
  const setPointMarker = React98.useCallback(
17790
- (seriesIndex, pointIndex, marker) => applyChartOp((el) => (0, chunkQO2AMZPA_js.dist_exports.setChartDataPointMarker)(el, seriesIndex, pointIndex, marker)),
17790
+ (seriesIndex, pointIndex, marker) => applyChartOp((el) => (0, chunkKCOXJJBZ_js.dist_exports.setChartDataPointMarker)(el, seriesIndex, pointIndex, marker)),
17791
17791
  [applyChartOp]
17792
17792
  );
17793
17793
  const setPointLabel = React98.useCallback(
17794
17794
  (seriesIndex, pointIndex, text) => applyChartOp(
17795
- (el) => (0, chunkQO2AMZPA_js.dist_exports.setChartDataPointLabel)(el, seriesIndex, pointIndex, text !== null ? { text } : null)
17795
+ (el) => (0, chunkKCOXJJBZ_js.dist_exports.setChartDataPointLabel)(el, seriesIndex, pointIndex, text !== null ? { text } : null)
17796
17796
  ),
17797
17797
  [applyChartOp]
17798
17798
  );
@@ -18060,17 +18060,17 @@ function OleEditorDialog({
18060
18060
  const kind = descriptor.contentTab.kind;
18061
18061
  const load = async () => {
18062
18062
  if (kind === "sheet") {
18063
- const value = await (0, chunkQO2AMZPA_js.dist_exports.getOleSheetGrid)(element);
18063
+ const value = await (0, chunkKCOXJJBZ_js.dist_exports.getOleSheetGrid)(element);
18064
18064
  if (!cancelled) {
18065
18065
  setGrid(value);
18066
18066
  }
18067
18067
  } else if (kind === "document") {
18068
- const value = await (0, chunkQO2AMZPA_js.dist_exports.getOleDocumentParagraphs)(element);
18068
+ const value = await (0, chunkKCOXJJBZ_js.dist_exports.getOleDocumentParagraphs)(element);
18069
18069
  if (!cancelled) {
18070
18070
  setParagraphs(value);
18071
18071
  }
18072
18072
  } else if (kind === "deck") {
18073
- const value = await (0, chunkQO2AMZPA_js.dist_exports.getOleNestedDeckDetail)(element);
18073
+ const value = await (0, chunkKCOXJJBZ_js.dist_exports.getOleNestedDeckDetail)(element);
18074
18074
  if (!cancelled) {
18075
18075
  setDeckSlides(value);
18076
18076
  }
@@ -18096,9 +18096,9 @@ function OleEditorDialog({
18096
18096
  const handleCellEdit = React98.useCallback(
18097
18097
  async (row, col, value) => {
18098
18098
  try {
18099
- const updated = await (0, chunkQO2AMZPA_js.dist_exports.applyOleSheetCellEdit)(element, { row, col, value });
18099
+ const updated = await (0, chunkKCOXJJBZ_js.dist_exports.applyOleSheetCellEdit)(element, { row, col, value });
18100
18100
  commit(updated);
18101
- const refreshed = await (0, chunkQO2AMZPA_js.dist_exports.getOleSheetGrid)(updated);
18101
+ const refreshed = await (0, chunkKCOXJJBZ_js.dist_exports.getOleSheetGrid)(updated);
18102
18102
  if (mountedRef.current) {
18103
18103
  setGrid(refreshed);
18104
18104
  }
@@ -18113,9 +18113,9 @@ function OleEditorDialog({
18113
18113
  const handleParagraphEdit = React98.useCallback(
18114
18114
  async (index, text) => {
18115
18115
  try {
18116
- const updated = await (0, chunkQO2AMZPA_js.dist_exports.applyOleDocumentParagraphEdit)(element, index, text);
18116
+ const updated = await (0, chunkKCOXJJBZ_js.dist_exports.applyOleDocumentParagraphEdit)(element, index, text);
18117
18117
  commit(updated);
18118
- const refreshed = await (0, chunkQO2AMZPA_js.dist_exports.getOleDocumentParagraphs)(updated);
18118
+ const refreshed = await (0, chunkKCOXJJBZ_js.dist_exports.getOleDocumentParagraphs)(updated);
18119
18119
  if (mountedRef.current) {
18120
18120
  setParagraphs(refreshed);
18121
18121
  }
@@ -18130,14 +18130,14 @@ function OleEditorDialog({
18130
18130
  const handleDeckElementEdit = React98.useCallback(
18131
18131
  async (slideIndex, deckElementId, text) => {
18132
18132
  try {
18133
- const updated = await (0, chunkQO2AMZPA_js.dist_exports.applyOleNestedDeckElementTextEdit)(
18133
+ const updated = await (0, chunkKCOXJJBZ_js.dist_exports.applyOleNestedDeckElementTextEdit)(
18134
18134
  element,
18135
18135
  slideIndex,
18136
18136
  deckElementId,
18137
18137
  text
18138
18138
  );
18139
18139
  commit(updated);
18140
- const refreshed = await (0, chunkQO2AMZPA_js.dist_exports.getOleNestedDeckDetail)(updated);
18140
+ const refreshed = await (0, chunkKCOXJJBZ_js.dist_exports.getOleNestedDeckDetail)(updated);
18141
18141
  if (mountedRef.current) {
18142
18142
  setDeckSlides(refreshed);
18143
18143
  }
@@ -18153,7 +18153,7 @@ function OleEditorDialog({
18153
18153
  async (file) => {
18154
18154
  try {
18155
18155
  const bytes = new Uint8Array(await file.arrayBuffer());
18156
- const updated = await (0, chunkQO2AMZPA_js.dist_exports.replaceOleFile)(element, bytes, file.name);
18156
+ const updated = await (0, chunkKCOXJJBZ_js.dist_exports.replaceOleFile)(element, bytes, file.name);
18157
18157
  commit(updated);
18158
18158
  if (mountedRef.current) {
18159
18159
  onClose();
@@ -18302,7 +18302,7 @@ function ConnectorArrowsSection({
18302
18302
  },
18303
18303
  disabled: !canEdit,
18304
18304
  className: SELECT_CLS2,
18305
- children: chunkQO2AMZPA_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18305
+ children: chunkKCOXJJBZ_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18306
18306
  }
18307
18307
  )
18308
18308
  ] }, end);
@@ -18326,7 +18326,7 @@ function ConnectorArrowsSection({
18326
18326
  },
18327
18327
  disabled: !canEdit,
18328
18328
  className: SELECT_CLS2,
18329
- children: chunkQO2AMZPA_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18329
+ children: chunkKCOXJJBZ_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18330
18330
  }
18331
18331
  )
18332
18332
  ] }),
@@ -18345,7 +18345,7 @@ function ConnectorArrowsSection({
18345
18345
  },
18346
18346
  disabled: !canEdit,
18347
18347
  className: SELECT_CLS2,
18348
- children: chunkQO2AMZPA_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18348
+ children: chunkKCOXJJBZ_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18349
18349
  }
18350
18350
  )
18351
18351
  ] })
@@ -18425,7 +18425,7 @@ function OlePropertiesPanel({
18425
18425
  ] }),
18426
18426
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
18427
18427
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.ole.type") }),
18428
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground truncate", children: (0, chunkQO2AMZPA_js.dist_exports.getOleObjectTypeLabel)(ole.oleObjectType) })
18428
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground truncate", children: (0, chunkKCOXJJBZ_js.dist_exports.getOleObjectTypeLabel)(ole.oleObjectType) })
18429
18429
  ] }),
18430
18430
  ole.fileName && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
18431
18431
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.ole.fileName") }),
@@ -18436,7 +18436,7 @@ function OlePropertiesPanel({
18436
18436
  /* @__PURE__ */ jsxRuntime.jsx(
18437
18437
  "span",
18438
18438
  {
18439
- className: chunkQO2AMZPA_js.cn(
18439
+ className: chunkKCOXJJBZ_js.cn(
18440
18440
  "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium",
18441
18441
  ole.isLinked ? "bg-blue-500/20 text-blue-400" : "bg-green-500/20 text-green-400"
18442
18442
  ),
@@ -18504,7 +18504,7 @@ function LayerOrderButtons({
18504
18504
  "button",
18505
18505
  {
18506
18506
  type: "button",
18507
- className: chunkQO2AMZPA_js.cn("flex-1", BTN2),
18507
+ className: chunkKCOXJJBZ_js.cn("flex-1", BTN2),
18508
18508
  disabled: !canEdit,
18509
18509
  onClick: () => onMoveLayer("forward"),
18510
18510
  children: "\u2191 Forward"
@@ -18514,7 +18514,7 @@ function LayerOrderButtons({
18514
18514
  "button",
18515
18515
  {
18516
18516
  type: "button",
18517
- className: chunkQO2AMZPA_js.cn("flex-1", BTN2),
18517
+ className: chunkKCOXJJBZ_js.cn("flex-1", BTN2),
18518
18518
  disabled: !canEdit,
18519
18519
  onClick: () => onMoveLayer("backward"),
18520
18520
  children: "\u2193 Backward"
@@ -18538,7 +18538,7 @@ function ArtisticEffectsGallery({
18538
18538
  {
18539
18539
  type: "button",
18540
18540
  disabled: !canEdit,
18541
- className: chunkQO2AMZPA_js.cn(
18541
+ className: chunkKCOXJJBZ_js.cn(
18542
18542
  "flex flex-col items-center gap-0.5 rounded border p-0.5 hover:bg-accent/50",
18543
18543
  isActive ? "border-primary bg-primary/10" : "border-border"
18544
18544
  ),
@@ -18600,7 +18600,7 @@ function ColorChangeSection({
18600
18600
  DebouncedColorInput,
18601
18601
  {
18602
18602
  disabled: !canEdit,
18603
- value: chunkQO2AMZPA_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18603
+ value: chunkKCOXJJBZ_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18604
18604
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18605
18605
  onCommit: (hex) => updateEffects({
18606
18606
  clrChange: {
@@ -18618,7 +18618,7 @@ function ColorChangeSection({
18618
18618
  DebouncedColorInput,
18619
18619
  {
18620
18620
  disabled: !canEdit || Boolean(cc.clrToTransparent),
18621
- value: chunkQO2AMZPA_js.normalizeHexColor(cc.clrTo, "#000000"),
18621
+ value: chunkKCOXJJBZ_js.normalizeHexColor(cc.clrTo, "#000000"),
18622
18622
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18623
18623
  onCommit: (hex) => updateEffects({
18624
18624
  clrChange: {
@@ -18678,7 +18678,7 @@ function ColorWashSection({
18678
18678
  DebouncedColorInput,
18679
18679
  {
18680
18680
  disabled: !canEdit,
18681
- value: chunkQO2AMZPA_js.normalizeHexColor(wash.color, "#0066cc"),
18681
+ value: chunkKCOXJJBZ_js.normalizeHexColor(wash.color, "#0066cc"),
18682
18682
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18683
18683
  onCommit: (hex) => updateEffects({
18684
18684
  colorWash: { color: hex, opacity: wash.opacity ?? 40 }
@@ -18781,8 +18781,8 @@ function DuotonePanel({
18781
18781
  }
18782
18782
  });
18783
18783
  }, [effects, onUpdateElement]);
18784
- const shadowColor = chunkQO2AMZPA_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
18785
- const highlightColor = chunkQO2AMZPA_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
18784
+ const shadowColor = chunkKCOXJJBZ_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
18785
+ const highlightColor = chunkKCOXJJBZ_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
18786
18786
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px]", children: [
18787
18787
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground font-medium", children: t("pptx.image.duotone") }),
18788
18788
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
@@ -18813,7 +18813,7 @@ function DuotonePanel({
18813
18813
  ] }),
18814
18814
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
18815
18815
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-[10px]", children: t("pptx.image.duotonePresets") }),
18816
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunkBOQCAJIA_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
18816
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunkMCU3FDOV_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
18817
18817
  "button",
18818
18818
  {
18819
18819
  type: "button",
@@ -18951,7 +18951,7 @@ function ImageCropSection({
18951
18951
  onUpdateElement
18952
18952
  }) {
18953
18953
  const { t } = reactI18next.useTranslation();
18954
- if (!(0, chunkQO2AMZPA_js.dist_exports.isImageLikeElement)(selectedElement)) {
18954
+ if (!(0, chunkKCOXJJBZ_js.dist_exports.isImageLikeElement)(selectedElement)) {
18955
18955
  return null;
18956
18956
  }
18957
18957
  const croppable = pptx.cropResetState(selectedElement, canEdit, true).enabled;
@@ -18968,7 +18968,7 @@ function ImageCropSection({
18968
18968
  max: MAX_CROP_PERCENT,
18969
18969
  disabled: !croppable,
18970
18970
  className: "accent-primary",
18971
- value: Math.round(chunkQO2AMZPA_js.clampCropValue(selectedElement[key]) * 100),
18971
+ value: Math.round(chunkKCOXJJBZ_js.clampCropValue(selectedElement[key]) * 100),
18972
18972
  onChange: (e) => onUpdateElement({
18973
18973
  [key]: Number(e.target.value) / 100
18974
18974
  })
@@ -19032,7 +19032,7 @@ function ImagePropertiesPanel({
19032
19032
  {
19033
19033
  rows: 2,
19034
19034
  disabled: !canEdit,
19035
- className: chunkQO2AMZPA_js.cn(INPUT2, "resize-none text-[11px]"),
19035
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "resize-none text-[11px]"),
19036
19036
  value: selectedElement.altText ?? "",
19037
19037
  onChange: (e) => onUpdateElement({
19038
19038
  altText: e.target.value
@@ -19972,7 +19972,7 @@ function AccessibilityTextSection({
19972
19972
  rows: 2,
19973
19973
  disabled: !canEdit,
19974
19974
  placeholder: t("pptx.elementAccessibility.altTextPlaceholder"),
19975
- className: chunkQO2AMZPA_js.cn(INPUT2, "resize-none text-[11px]"),
19975
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "resize-none text-[11px]"),
19976
19976
  value: fields.altText,
19977
19977
  onChange: (e) => onUpdateElement({ altText: e.target.value })
19978
19978
  }
@@ -19986,7 +19986,7 @@ function AccessibilityTextSection({
19986
19986
  type: "text",
19987
19987
  disabled: !canEdit,
19988
19988
  placeholder: t("pptx.elementAccessibility.titlePlaceholder"),
19989
- className: chunkQO2AMZPA_js.cn(INPUT2, "text-[11px]"),
19989
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "text-[11px]"),
19990
19990
  value: fields.title,
19991
19991
  onChange: (e) => onUpdateElement({ title: e.target.value })
19992
19992
  }
@@ -20102,7 +20102,7 @@ var SHADOW_EFFECT_CONFIGS = [
20102
20102
  angle = (Math.atan2(offsetY, offsetX) * 180 / Math.PI + 360) % 360;
20103
20103
  }
20104
20104
  return {
20105
- shadowColor: chunkQO2AMZPA_js.normalizeHexColor(s?.shadowColor, "#000000"),
20105
+ shadowColor: chunkKCOXJJBZ_js.normalizeHexColor(s?.shadowColor, "#000000"),
20106
20106
  shadowOpacity: s?.shadowOpacity ?? 0.35,
20107
20107
  shadowBlur: s?.shadowBlur ?? 6,
20108
20108
  shadowAngle: angle,
@@ -20118,7 +20118,7 @@ var SHADOW_EFFECT_CONFIGS = [
20118
20118
  key: "sc",
20119
20119
  label: "Shadow Color",
20120
20120
  type: "color",
20121
- read: (s) => chunkQO2AMZPA_js.normalizeHexColor(s?.shadowColor, "#000000"),
20121
+ read: (s) => chunkKCOXJJBZ_js.normalizeHexColor(s?.shadowColor, "#000000"),
20122
20122
  write: (v) => ({ shadowColor: String(v) })
20123
20123
  },
20124
20124
  {
@@ -20254,7 +20254,7 @@ var SHADOW_EFFECT_CONFIGS = [
20254
20254
  label: "Inner Shadow",
20255
20255
  isOn: (s) => Boolean(s?.innerShadowColor) && s?.innerShadowColor !== "transparent",
20256
20256
  onEnable: (s) => ({
20257
- innerShadowColor: chunkQO2AMZPA_js.normalizeHexColor(s?.innerShadowColor, "#000000"),
20257
+ innerShadowColor: chunkKCOXJJBZ_js.normalizeHexColor(s?.innerShadowColor, "#000000"),
20258
20258
  innerShadowOpacity: s?.innerShadowOpacity ?? 0.5,
20259
20259
  innerShadowBlur: s?.innerShadowBlur ?? 5,
20260
20260
  innerShadowOffsetX: s?.innerShadowOffsetX ?? 0,
@@ -20266,7 +20266,7 @@ var SHADOW_EFFECT_CONFIGS = [
20266
20266
  key: "isc",
20267
20267
  label: "Color",
20268
20268
  type: "color",
20269
- read: (s) => chunkQO2AMZPA_js.normalizeHexColor(s?.innerShadowColor, "#000000"),
20269
+ read: (s) => chunkKCOXJJBZ_js.normalizeHexColor(s?.innerShadowColor, "#000000"),
20270
20270
  write: (v) => ({ innerShadowColor: String(v) })
20271
20271
  },
20272
20272
  {
@@ -20776,7 +20776,7 @@ function ColorPickerRow({
20776
20776
  pushColor(color);
20777
20777
  };
20778
20778
  const handleEyedropper = async () => {
20779
- const color = await chunkQO2AMZPA_js.openNativeEyeDropper();
20779
+ const color = await chunkKCOXJJBZ_js.openNativeEyeDropper();
20780
20780
  if (color) {
20781
20781
  commit(color);
20782
20782
  }
@@ -20859,9 +20859,9 @@ function GradientStopRow({
20859
20859
  "input",
20860
20860
  {
20861
20861
  type: "color",
20862
- value: chunkQO2AMZPA_js.normalizeHexColor(stop2.color, "#3b82f6"),
20862
+ value: chunkKCOXJJBZ_js.normalizeHexColor(stop2.color, "#3b82f6"),
20863
20863
  onChange: (e) => {
20864
- const hex = chunkQO2AMZPA_js.normalizeHexColor(e.target.value, "#3b82f6");
20864
+ const hex = chunkKCOXJJBZ_js.normalizeHexColor(e.target.value, "#3b82f6");
20865
20865
  patchStop({ color: hex, colorRef: void 0 });
20866
20866
  pushColor(hex);
20867
20867
  },
@@ -20986,7 +20986,7 @@ function FillAdvancedControls({
20986
20986
  onClick: () => onUpdateGradientStops([
20987
20987
  ...gradientStops,
20988
20988
  {
20989
- color: chunkQO2AMZPA_js.normalizeHexColor(style?.fillColor, chunkQO2AMZPA_js.DEFAULT_FILL_COLOR),
20989
+ color: chunkKCOXJJBZ_js.normalizeHexColor(style?.fillColor, chunkKCOXJJBZ_js.DEFAULT_FILL_COLOR),
20990
20990
  position: 50,
20991
20991
  opacity: 1
20992
20992
  }
@@ -21000,9 +21000,9 @@ function FillAdvancedControls({
21000
21000
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${COL2} flex flex-col gap-2`, children: [
21001
21001
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: "Pattern" }),
21002
21002
  /* @__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) => {
21003
- const fgColor = chunkQO2AMZPA_js.normalizeHexColor(style?.fillColor, chunkQO2AMZPA_js.DEFAULT_FILL_COLOR);
21004
- const bgColor = chunkQO2AMZPA_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
21005
- const svgPattern = chunkQO2AMZPA_js.getPatternSvg(opt.value, fgColor, bgColor);
21003
+ const fgColor = chunkKCOXJJBZ_js.normalizeHexColor(style?.fillColor, chunkKCOXJJBZ_js.DEFAULT_FILL_COLOR);
21004
+ const bgColor = chunkKCOXJJBZ_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
21005
+ const svgPattern = chunkKCOXJJBZ_js.getPatternSvg(opt.value, fgColor, bgColor);
21006
21006
  const isSelected = (style.fillPatternPreset || "pct20") === opt.value;
21007
21007
  return /* @__PURE__ */ jsxRuntime.jsx(
21008
21008
  "button",
@@ -21035,7 +21035,7 @@ function FillAdvancedControls({
21035
21035
  {
21036
21036
  label: t("pptx.fillAdvanced.foregroundColor"),
21037
21037
  prefix: "pattern-fg",
21038
- value: chunkQO2AMZPA_js.normalizeHexColor(style?.fillColor, chunkQO2AMZPA_js.DEFAULT_FILL_COLOR),
21038
+ value: chunkKCOXJJBZ_js.normalizeHexColor(style?.fillColor, chunkKCOXJJBZ_js.DEFAULT_FILL_COLOR),
21039
21039
  disabled: isLine,
21040
21040
  onChange: (color) => onUpdateShapeStyle({ fillMode: "pattern", fillColor: color })
21041
21041
  }
@@ -21045,7 +21045,7 @@ function FillAdvancedControls({
21045
21045
  {
21046
21046
  label: t("pptx.fillAdvanced.backgroundColor"),
21047
21047
  prefix: "pattern-bg",
21048
- value: chunkQO2AMZPA_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
21048
+ value: chunkKCOXJJBZ_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
21049
21049
  disabled: isLine,
21050
21050
  onChange: (color) => onUpdateShapeStyle({
21051
21051
  fillMode: "pattern",
@@ -21112,11 +21112,11 @@ function QuickStylesGallery({
21112
21112
  onUpdateShapeStyle
21113
21113
  }) {
21114
21114
  const { t } = reactI18next.useTranslation();
21115
- const { viewportWidth } = chunkBOQCAJIA_js.useIsMobile();
21115
+ const { viewportWidth } = chunkMCU3FDOV_js.useIsMobile();
21116
21116
  const swatchMinHeight = pptx.getDensePanelTouchTargetPx(viewportWidth);
21117
21117
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
21118
21118
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: t("pptx.shape.quickStyles") }),
21119
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-6 gap-1", children: chunkQO2AMZPA_js.SHAPE_QUICK_STYLES.map((qs, idx) => /* @__PURE__ */ jsxRuntime.jsx(
21119
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-6 gap-1", children: chunkKCOXJJBZ_js.SHAPE_QUICK_STYLES.map((qs, idx) => /* @__PURE__ */ jsxRuntime.jsx(
21120
21120
  "button",
21121
21121
  {
21122
21122
  type: "button",
@@ -21143,7 +21143,7 @@ function StrokeEffectsSection({
21143
21143
  {
21144
21144
  label: t("pptx.inspector.stroke"),
21145
21145
  prefix: "stroke",
21146
- value: chunkQO2AMZPA_js.normalizeHexColor(style?.strokeColor, chunkQO2AMZPA_js.DEFAULT_STROKE_COLOR),
21146
+ value: chunkKCOXJJBZ_js.normalizeHexColor(style?.strokeColor, chunkKCOXJJBZ_js.DEFAULT_STROKE_COLOR),
21147
21147
  selectedRef: style?.strokeColorRef,
21148
21148
  onChange: onSetStrokeColor
21149
21149
  }
@@ -21206,7 +21206,7 @@ function StrokeEffectsSection({
21206
21206
  strokeDash: e.target.value
21207
21207
  }),
21208
21208
  className: SEL,
21209
- children: chunkQO2AMZPA_js.STROKE_DASH_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
21209
+ children: chunkKCOXJJBZ_js.STROKE_DASH_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
21210
21210
  }
21211
21211
  )
21212
21212
  ] }),
@@ -21296,10 +21296,10 @@ function FillStrokeProperties({
21296
21296
  return;
21297
21297
  }
21298
21298
  if (nextMode === "gradient") {
21299
- const existing = chunkQO2AMZPA_js.sanitizeGradientStops(style?.fillGradientStops);
21299
+ const existing = chunkKCOXJJBZ_js.sanitizeGradientStops(style?.fillGradientStops);
21300
21300
  const stops = existing.length >= 2 ? existing : [
21301
21301
  {
21302
- color: chunkQO2AMZPA_js.normalizeHexColor(style?.fillColor, chunkQO2AMZPA_js.DEFAULT_FILL_COLOR),
21302
+ color: chunkKCOXJJBZ_js.normalizeHexColor(style?.fillColor, chunkKCOXJJBZ_js.DEFAULT_FILL_COLOR),
21303
21303
  position: 0,
21304
21304
  opacity: 1
21305
21305
  },
@@ -21324,7 +21324,7 @@ function FillStrokeProperties({
21324
21324
  onUpdateShapeStyle({ fillMode: "solid" });
21325
21325
  };
21326
21326
  const gradientStops = selectedGradientStops.length > 0 ? selectedGradientStops : [
21327
- { color: chunkQO2AMZPA_js.DEFAULT_FILL_COLOR, position: 0 },
21327
+ { color: chunkKCOXJJBZ_js.DEFAULT_FILL_COLOR, position: 0 },
21328
21328
  { color: "#ffffff", position: 100 }
21329
21329
  ];
21330
21330
  const showGradient = style?.fillMode === "gradient" || selectedGradientStops.length > 0;
@@ -21351,7 +21351,7 @@ function FillStrokeProperties({
21351
21351
  {
21352
21352
  label: t("pptx.fill.fill"),
21353
21353
  prefix: "fill",
21354
- value: chunkQO2AMZPA_js.normalizeHexColor(style?.fillColor, chunkQO2AMZPA_js.DEFAULT_FILL_COLOR),
21354
+ value: chunkKCOXJJBZ_js.normalizeHexColor(style?.fillColor, chunkKCOXJJBZ_js.DEFAULT_FILL_COLOR),
21355
21355
  selectedRef: style?.fillColorRef,
21356
21356
  disabled: line,
21357
21357
  onChange: onSetFillColor
@@ -21435,7 +21435,7 @@ function Text3DProperties({
21435
21435
  "input",
21436
21436
  {
21437
21437
  type: "color",
21438
- value: chunkQO2AMZPA_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21438
+ value: chunkKCOXJJBZ_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21439
21439
  onChange: (e) => {
21440
21440
  update3d({ extrusionColor: e.target.value });
21441
21441
  pushColor(e.target.value);
@@ -21626,7 +21626,7 @@ function AdvancedTextFormatting({
21626
21626
  "input",
21627
21627
  {
21628
21628
  type: "color",
21629
- value: chunkQO2AMZPA_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21629
+ value: chunkKCOXJJBZ_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21630
21630
  onChange: (e) => {
21631
21631
  onUpdateTextStyle({ highlightColor: e.target.value });
21632
21632
  pushColor(e.target.value);
@@ -21930,7 +21930,7 @@ function TextEffectsPanel({
21930
21930
  "input",
21931
21931
  {
21932
21932
  type: "color",
21933
- value: chunkQO2AMZPA_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21933
+ value: chunkKCOXJJBZ_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21934
21934
  onChange: (e) => {
21935
21935
  onUpdateTextStyle({ textShadowColor: e.target.value });
21936
21936
  pushColor(e.target.value);
@@ -22037,7 +22037,7 @@ function TextEffectsPanel({
22037
22037
  "input",
22038
22038
  {
22039
22039
  type: "color",
22040
- value: chunkQO2AMZPA_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
22040
+ value: chunkKCOXJJBZ_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
22041
22041
  onChange: (e) => {
22042
22042
  onUpdateTextStyle({ textGlowColor: e.target.value });
22043
22043
  pushColor(e.target.value);
@@ -22136,7 +22136,7 @@ function TextAdvancedSections({
22136
22136
  canEdit,
22137
22137
  onUpdateTextStyle
22138
22138
  }) {
22139
- if (!(0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(selectedElement)) {
22139
+ if (!(0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(selectedElement)) {
22140
22140
  return null;
22141
22141
  }
22142
22142
  const ts = selectedElement.textStyle;
@@ -22165,22 +22165,22 @@ function ShapeTextPanels({
22165
22165
  }) {
22166
22166
  const { t } = reactI18next.useTranslation();
22167
22167
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22168
- (0, chunkQO2AMZPA_js.dist_exports.hasShapeProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
22168
+ (0, chunkKCOXJJBZ_js.dist_exports.hasShapeProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
22169
22169
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.shape.type", "Shape Type") }),
22170
22170
  /* @__PURE__ */ jsxRuntime.jsx(
22171
22171
  WebSelect,
22172
22172
  {
22173
22173
  value: selectedElement.shapeType || "rect",
22174
22174
  disabled: !canEdit,
22175
- className: chunkQO2AMZPA_js.cn(INPUT2, "w-full"),
22175
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "w-full"),
22176
22176
  onChange: (e) => onUpdateElement({
22177
22177
  shapeType: e.target.value
22178
22178
  }),
22179
- children: chunkQO2AMZPA_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
22179
+ children: chunkKCOXJJBZ_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
22180
22180
  }
22181
22181
  )
22182
22182
  ] }),
22183
- (0, chunkQO2AMZPA_js.dist_exports.hasShapeProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, "data-pptx-fill-stroke": true, "data-pptx-inspector-section": "fill-stroke", children: [
22183
+ (0, chunkKCOXJJBZ_js.dist_exports.hasShapeProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, "data-pptx-fill-stroke": true, "data-pptx-inspector-section": "fill-stroke", children: [
22184
22184
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.shape.fillStroke", "Fill & Stroke") }),
22185
22185
  /* @__PURE__ */ jsxRuntime.jsx(
22186
22186
  FillStrokeProperties,
@@ -22188,7 +22188,7 @@ function ShapeTextPanels({
22188
22188
  selectedElement,
22189
22189
  selectedShapeStyle: selectedElement.shapeStyle,
22190
22190
  selectedShapeType: selectedElement.shapeType,
22191
- selectedGradientStops: chunkQO2AMZPA_js.sanitizeGradientStops(
22191
+ selectedGradientStops: chunkKCOXJJBZ_js.sanitizeGradientStops(
22192
22192
  selectedElement.shapeStyle?.fillGradientStops
22193
22193
  ),
22194
22194
  canEdit,
@@ -22198,7 +22198,7 @@ function ShapeTextPanels({
22198
22198
  }
22199
22199
  )
22200
22200
  ] }),
22201
- (0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, "data-pptx-text-card": true, children: [
22201
+ (0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, "data-pptx-text-card": true, children: [
22202
22202
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.text.title", "Text") }),
22203
22203
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-1.5 text-[11px]", children: [
22204
22204
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -22224,7 +22224,7 @@ function ShapeTextPanels({
22224
22224
  {
22225
22225
  disabled: !canEdit,
22226
22226
  ariaLabel: "Text Color",
22227
- value: chunkQO2AMZPA_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
22227
+ value: chunkKCOXJJBZ_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
22228
22228
  className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
22229
22229
  onCommit: (hex) => onUpdateTextStyle({ color: hex, colorRef: void 0 })
22230
22230
  }
@@ -22316,7 +22316,7 @@ function TextFormatToggle({
22316
22316
  {
22317
22317
  type: "button",
22318
22318
  disabled,
22319
- className: chunkQO2AMZPA_js.cn(
22319
+ className: chunkKCOXJJBZ_js.cn(
22320
22320
  "px-2 py-1 rounded text-[11px] transition-colors max-md:min-w-[44px]! max-md:min-h-[44px]!",
22321
22321
  italic && "italic",
22322
22322
  underline && "underline",
@@ -22474,7 +22474,7 @@ var THUMB_COMPONENTS = {
22474
22474
  chevron: ChevronThumb,
22475
22475
  bending: BendingThumb
22476
22476
  };
22477
- var LAYOUT_DESCRIPTORS = chunkQO2AMZPA_js.dist_exports.SWITCHABLE_LAYOUT_TYPES.map((type) => ({
22477
+ var LAYOUT_DESCRIPTORS = chunkKCOXJJBZ_js.dist_exports.SWITCHABLE_LAYOUT_TYPES.map((type) => ({
22478
22478
  type,
22479
22479
  i18nKey: `pptx.smartart.category.${type}`
22480
22480
  }));
@@ -22502,7 +22502,7 @@ function SmartArtLayoutSwitcher({
22502
22502
  type: "button",
22503
22503
  "data-testid": `smartart-layout-${type}`,
22504
22504
  disabled: !canEdit,
22505
- className: chunkQO2AMZPA_js.cn(
22505
+ className: chunkKCOXJJBZ_js.cn(
22506
22506
  "flex flex-col items-center gap-0.5 rounded border p-1.5 transition-colors",
22507
22507
  "text-[9px] leading-tight",
22508
22508
  isActive ? "border-primary bg-primary/15 text-primary" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground",
@@ -22581,7 +22581,7 @@ function SmartArtNodeStyleControls({
22581
22581
  disabled: !canEdit,
22582
22582
  "aria-label": `Bold ${label}`,
22583
22583
  "aria-pressed": bold,
22584
- className: chunkQO2AMZPA_js.cn(
22584
+ className: chunkKCOXJJBZ_js.cn(
22585
22585
  EMPHASIS_BTN,
22586
22586
  "font-bold",
22587
22587
  bold ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground"
@@ -22597,7 +22597,7 @@ function SmartArtNodeStyleControls({
22597
22597
  disabled: !canEdit,
22598
22598
  "aria-label": `Italic ${label}`,
22599
22599
  "aria-pressed": italic,
22600
- className: chunkQO2AMZPA_js.cn(
22600
+ className: chunkKCOXJJBZ_js.cn(
22601
22601
  EMPHASIS_BTN,
22602
22602
  "italic",
22603
22603
  italic ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground"
@@ -22636,7 +22636,7 @@ function SmartArtNodeRow({
22636
22636
  "div",
22637
22637
  {
22638
22638
  role: "listitem",
22639
- className: chunkQO2AMZPA_js.cn(
22639
+ className: chunkKCOXJJBZ_js.cn(
22640
22640
  "rounded border bg-background/60 p-1.5",
22641
22641
  isChild ? "border-border/60 ml-4" : "border-border"
22642
22642
  ),
@@ -22651,7 +22651,7 @@ function SmartArtNodeRow({
22651
22651
  "data-testid": "smartart-node-text",
22652
22652
  disabled: !canEdit,
22653
22653
  "aria-label": label,
22654
- className: chunkQO2AMZPA_js.cn(INPUT2, "flex-1 text-[11px] py-0.5"),
22654
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "flex-1 text-[11px] py-0.5"),
22655
22655
  value: text,
22656
22656
  onChange: (e) => onChangeText(nodeId, e.target.value),
22657
22657
  onKeyDown: (e) => onKeyDown(e, nodeId),
@@ -22700,7 +22700,7 @@ function SmartArtNodeRow({
22700
22700
  {
22701
22701
  type: "button",
22702
22702
  disabled: !canEdit || removeDisabled,
22703
- className: chunkQO2AMZPA_js.cn(MINI_BTN, "hover:text-red-400"),
22703
+ className: chunkKCOXJJBZ_js.cn(MINI_BTN, "hover:text-red-400"),
22704
22704
  onClick: () => onRemove(nodeId),
22705
22705
  "aria-label": `Remove ${label}`,
22706
22706
  title: removeDisabled ? t("pptx.smartArt.layoutMinimum") : t("pptx.smartArt.remove"),
@@ -22743,7 +22743,7 @@ function SmartArtStyleControls({
22743
22743
  disabled: !canEdit,
22744
22744
  "data-testid": "smartart-color-scheme",
22745
22745
  "aria-label": t("pptx.smartart.colorScheme"),
22746
- className: chunkQO2AMZPA_js.cn(INPUT2, "w-full"),
22746
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "w-full"),
22747
22747
  value: colorScheme,
22748
22748
  onChange: (e) => onChangeColorScheme(e.target.value),
22749
22749
  children: colorSchemes.map((cs) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: cs, children: pptx.schemaLabel(pptx.SMARTART_COLOR_SCHEME_LABEL_KEYS, cs, translate) }, cs))
@@ -22758,7 +22758,7 @@ function SmartArtStyleControls({
22758
22758
  type: "button",
22759
22759
  disabled: !canEdit,
22760
22760
  "aria-pressed": style === s,
22761
- className: chunkQO2AMZPA_js.cn(
22761
+ className: chunkKCOXJJBZ_js.cn(
22762
22762
  "flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
22763
22763
  style === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
22764
22764
  ),
@@ -22804,7 +22804,7 @@ function SmartArtPropertiesPanel({
22804
22804
  const reflowed = box ? pptx.rebuildDrawingShapesIfCleared(
22805
22805
  newData,
22806
22806
  newData.layout,
22807
- chunkBOQCAJIA_js.resolveSmartArtDataPalette(newData),
22807
+ chunkMCU3FDOV_js.resolveSmartArtDataPalette(newData),
22808
22808
  newData.style ?? "flat",
22809
22809
  "inspector",
22810
22810
  box
@@ -22815,10 +22815,10 @@ function SmartArtPropertiesPanel({
22815
22815
  applySmartArtData({ ...smartArtData, ...patch });
22816
22816
  };
22817
22817
  const handleUpdateNodeText = (nodeId, text) => {
22818
- applySmartArtData((0, chunkQO2AMZPA_js.dist_exports.updateSmartArtNodeText)(smartArtData, nodeId, text));
22818
+ applySmartArtData((0, chunkKCOXJJBZ_js.dist_exports.updateSmartArtNodeText)(smartArtData, nodeId, text));
22819
22819
  };
22820
22820
  const handleChangeNodeStyle = (nodeId, patch) => {
22821
- const next = (0, chunkQO2AMZPA_js.dist_exports.setSmartArtNodeStyle)(smartArtData, nodeId, patch);
22821
+ const next = (0, chunkKCOXJJBZ_js.dist_exports.setSmartArtNodeStyle)(smartArtData, nodeId, patch);
22822
22822
  if (next !== smartArtData) {
22823
22823
  applySmartArtData(next);
22824
22824
  }
@@ -22827,17 +22827,17 @@ function SmartArtPropertiesPanel({
22827
22827
  if (!pptx.canAddTopLevelNode(layout, topLevelCount)) {
22828
22828
  return;
22829
22829
  }
22830
- applySmartArtData((0, chunkQO2AMZPA_js.dist_exports.addSmartArtNodeAsChild)(smartArtData));
22830
+ applySmartArtData((0, chunkKCOXJJBZ_js.dist_exports.addSmartArtNodeAsChild)(smartArtData));
22831
22831
  };
22832
22832
  const addSubItem = (parentId) => {
22833
- applySmartArtData((0, chunkQO2AMZPA_js.dist_exports.addSmartArtNodeAsChild)(smartArtData, parentId, "Sub-item"));
22833
+ applySmartArtData((0, chunkKCOXJJBZ_js.dist_exports.addSmartArtNodeAsChild)(smartArtData, parentId, "Sub-item"));
22834
22834
  };
22835
22835
  const removeNode = (nodeId) => {
22836
22836
  const isTopLevel = !nodes.find((n) => n.id === nodeId)?.parentId;
22837
22837
  if (isTopLevel && !pptx.canRemoveTopLevelNode(layout, topLevelCount)) {
22838
22838
  return;
22839
22839
  }
22840
- applySmartArtData((0, chunkQO2AMZPA_js.dist_exports.removeSmartArtNode)(smartArtData, nodeId));
22840
+ applySmartArtData((0, chunkKCOXJJBZ_js.dist_exports.removeSmartArtNode)(smartArtData, nodeId));
22841
22841
  };
22842
22842
  const moveNode = (nodeId, direction) => {
22843
22843
  const next = pptx.reorder(smartArtData, nodeId, direction);
@@ -22993,7 +22993,7 @@ function TableDataGrid({
22993
22993
  }) {
22994
22994
  const { t } = reactI18next.useTranslation();
22995
22995
  const grid = pptx.buildTableDataGrid(tableElement);
22996
- const { viewportWidth } = chunkBOQCAJIA_js.useIsMobile();
22996
+ const { viewportWidth } = chunkMCU3FDOV_js.useIsMobile();
22997
22997
  const gridPlan = pptx.getDenseGridLayoutPlan(viewportWidth);
22998
22998
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
22999
22999
  const stickyGutterClass = gridPlan.stickyFirstColumn ? "sticky left-0 z-10" : "";
@@ -23405,7 +23405,7 @@ function TableCellColorField({
23405
23405
  disabled,
23406
23406
  onCommit
23407
23407
  }) {
23408
- const hex = chunkQO2AMZPA_js.normalizeHexColor(value, fallback);
23408
+ const hex = chunkKCOXJJBZ_js.normalizeHexColor(value, fallback);
23409
23409
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
23410
23410
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
23411
23411
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -23516,7 +23516,7 @@ function TableCellFormattingPanel({
23516
23516
  {
23517
23517
  type: "button",
23518
23518
  disabled: !canEdit,
23519
- className: chunkQO2AMZPA_js.cn(
23519
+ className: chunkKCOXJJBZ_js.cn(
23520
23520
  "px-2 py-1 rounded text-[11px] transition-colors",
23521
23521
  cls,
23522
23522
  cs[key] ? "bg-primary text-white" : "bg-muted hover:bg-accent"
@@ -23535,7 +23535,7 @@ function TableCellFormattingPanel({
23535
23535
  {
23536
23536
  type: "button",
23537
23537
  disabled: !canEdit,
23538
- className: chunkQO2AMZPA_js.cn(
23538
+ className: chunkKCOXJJBZ_js.cn(
23539
23539
  "px-2 py-1 rounded text-[11px] transition-colors",
23540
23540
  cs.align === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
23541
23541
  ),
@@ -23553,7 +23553,7 @@ function TableCellFormattingPanel({
23553
23553
  {
23554
23554
  type: "button",
23555
23555
  disabled: !canEdit,
23556
- className: chunkQO2AMZPA_js.cn(
23556
+ className: chunkKCOXJJBZ_js.cn(
23557
23557
  "px-2 py-1 rounded text-[11px] transition-colors",
23558
23558
  cs.vAlign === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
23559
23559
  ),
@@ -23576,7 +23576,7 @@ function TableCellFormattingPanel({
23576
23576
  DebouncedColorInput,
23577
23577
  {
23578
23578
  disabled: !canEdit,
23579
- value: chunkQO2AMZPA_js.normalizeHexColor(cs[colorKey], "#374151"),
23579
+ value: chunkKCOXJJBZ_js.normalizeHexColor(cs[colorKey], "#374151"),
23580
23580
  className: "w-7 h-6 rounded border border-border bg-transparent cursor-pointer shrink-0",
23581
23581
  onCommit: (hex) => updateCellStyle({ [colorKey]: hex })
23582
23582
  }
@@ -23586,7 +23586,7 @@ function TableCellFormattingPanel({
23586
23586
  {
23587
23587
  type: "number",
23588
23588
  disabled: !canEdit,
23589
- className: chunkQO2AMZPA_js.cn(INPUT2, "w-14"),
23589
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "w-14"),
23590
23590
  min: 0,
23591
23591
  max: 10,
23592
23592
  value: cs[widthKey] ?? 1,
@@ -23602,7 +23602,7 @@ function TableCellFormattingPanel({
23602
23602
  {
23603
23603
  type: "button",
23604
23604
  disabled: !canEdit,
23605
- className: chunkQO2AMZPA_js.cn(BTN2, "text-center"),
23605
+ className: chunkKCOXJJBZ_js.cn(BTN2, "text-center"),
23606
23606
  onClick: () => {
23607
23607
  const newRows = pptx.computeMergeCellRight(td, rowIndex, columnIndex);
23608
23608
  if (newRows) {
@@ -23617,7 +23617,7 @@ function TableCellFormattingPanel({
23617
23617
  {
23618
23618
  type: "button",
23619
23619
  disabled: !canEdit,
23620
- className: chunkQO2AMZPA_js.cn(BTN2, "text-center"),
23620
+ className: chunkKCOXJJBZ_js.cn(BTN2, "text-center"),
23621
23621
  onClick: () => {
23622
23622
  const newRows = pptx.computeMergeCellDown(td, rowIndex, columnIndex);
23623
23623
  if (newRows) {
@@ -23632,7 +23632,7 @@ function TableCellFormattingPanel({
23632
23632
  {
23633
23633
  type: "button",
23634
23634
  disabled: !canEdit,
23635
- className: chunkQO2AMZPA_js.cn(BTN2, "text-center"),
23635
+ className: chunkKCOXJJBZ_js.cn(BTN2, "text-center"),
23636
23636
  onClick: () => {
23637
23637
  const newRows = pptx.computeSplitCell(td, rowIndex, columnIndex);
23638
23638
  if (newRows) {
@@ -23818,7 +23818,7 @@ function TableStyleEditor({
23818
23818
  const { t } = reactI18next.useTranslation();
23819
23819
  const themeColorMap = useThemeColorMap();
23820
23820
  const [activeStyleId, setActiveStyleId] = React98.useState(
23821
- styleId ? (0, chunkQO2AMZPA_js.dist_exports.normalizeTableStyleGuid)(styleId) : ""
23821
+ styleId ? (0, chunkKCOXJJBZ_js.dist_exports.normalizeTableStyleGuid)(styleId) : ""
23822
23822
  );
23823
23823
  const [selectedPart, setSelectedPart] = React98.useState("wholeTbl");
23824
23824
  const entry = activeStyleId ? styleMap?.[activeStyleId] : void 0;
@@ -23839,8 +23839,8 @@ function TableStyleEditor({
23839
23839
  return;
23840
23840
  }
23841
23841
  const nextMap = { ...styleMap ?? {} };
23842
- const created = (0, chunkQO2AMZPA_js.dist_exports.createTableStyleEntry)(nextMap, { styleName: name, basedOn: entry });
23843
- (0, chunkQO2AMZPA_js.dist_exports.addTableStyleToMap)(nextMap, created);
23842
+ const created = (0, chunkKCOXJJBZ_js.dist_exports.createTableStyleEntry)(nextMap, { styleName: name, basedOn: entry });
23843
+ (0, chunkKCOXJJBZ_js.dist_exports.addTableStyleToMap)(nextMap, created);
23844
23844
  onStyleMapChange(nextMap);
23845
23845
  setActiveStyleId(created.styleId);
23846
23846
  onAssignStyle?.(created.styleId);
@@ -23850,7 +23850,7 @@ function TableStyleEditor({
23850
23850
  return;
23851
23851
  }
23852
23852
  const nextMap = { ...styleMap };
23853
- (0, chunkQO2AMZPA_js.dist_exports.deleteTableStyleFromMap)(nextMap, entry.styleId);
23853
+ (0, chunkKCOXJJBZ_js.dist_exports.deleteTableStyleFromMap)(nextMap, entry.styleId);
23854
23854
  onStyleMapChange(nextMap);
23855
23855
  onDeleteStyle(entry.styleId);
23856
23856
  onClose();
@@ -23904,7 +23904,7 @@ function TablePropertiesPanel({
23904
23904
  const updateMergeRows = (rows) => {
23905
23905
  const tableData = { ...td, rows };
23906
23906
  const updates = { tableData };
23907
- const rawXml = (0, chunkQO2AMZPA_js.dist_exports.updateMergeAttrsInRawXml)(tableElement, tableData);
23907
+ const rawXml = (0, chunkKCOXJJBZ_js.dist_exports.updateMergeAttrsInRawXml)(tableElement, tableData);
23908
23908
  if (rawXml) {
23909
23909
  updates.rawXml = rawXml;
23910
23910
  }
@@ -23970,7 +23970,7 @@ function TablePropertiesPanel({
23970
23970
  ] }),
23971
23971
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
23972
23972
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.table.stylePresets") }),
23973
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunkQO2AMZPA_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23973
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunkKCOXJJBZ_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23974
23974
  "button",
23975
23975
  {
23976
23976
  type: "button",
@@ -24198,7 +24198,7 @@ function ElementInspectorBody({
24198
24198
  box: { width: selectedElement.width, height: selectedElement.height }
24199
24199
  }
24200
24200
  ),
24201
- (0, chunkQO2AMZPA_js.dist_exports.isImageLikeElement)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsx(
24201
+ (0, chunkKCOXJJBZ_js.dist_exports.isImageLikeElement)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsx(
24202
24202
  ImagePropertiesPanel,
24203
24203
  {
24204
24204
  selectedElement,
@@ -24363,7 +24363,7 @@ function CommentMentionTextarea({
24363
24363
  "data-testid": "pptx-comment-mention-option",
24364
24364
  role: "option",
24365
24365
  "aria-selected": index === safeHighlighted,
24366
- className: chunkQO2AMZPA_js.cn(
24366
+ className: chunkKCOXJJBZ_js.cn(
24367
24367
  "block w-full px-2 py-1 text-left text-[11px] hover:bg-accent",
24368
24368
  index === safeHighlighted && "bg-accent"
24369
24369
  ),
@@ -24486,7 +24486,7 @@ function InspectorCommentRow({
24486
24486
  return /* @__PURE__ */ jsxRuntime.jsxs(
24487
24487
  "div",
24488
24488
  {
24489
- className: chunkQO2AMZPA_js.cn(
24489
+ className: chunkKCOXJJBZ_js.cn(
24490
24490
  "rounded border border-border bg-card p-2",
24491
24491
  depth > 0 && "ml-3 border-l-2 border-l-primary/40"
24492
24492
  ),
@@ -24499,7 +24499,7 @@ function InspectorCommentRow({
24499
24499
  t("pptx.comments.resolved")
24500
24500
  ] })
24501
24501
  ] }),
24502
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunkQO2AMZPA_js.formatCommentTimestamp(comment.createdAt) })
24502
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunkKCOXJJBZ_js.formatCommentTimestamp(comment.createdAt) })
24503
24503
  ] }),
24504
24504
  comment.elementId && (targetElement ? /* @__PURE__ */ jsxRuntime.jsxs(
24505
24505
  "button",
@@ -24507,12 +24507,12 @@ function InspectorCommentRow({
24507
24507
  type: "button",
24508
24508
  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",
24509
24509
  title: t("pptx.comments.commentingOn", {
24510
- element: chunkQO2AMZPA_js.getElementLabel(targetElement)
24510
+ element: chunkKCOXJJBZ_js.getElementLabel(targetElement)
24511
24511
  }),
24512
24512
  onClick: () => onSelectElement(targetElement.id),
24513
24513
  children: [
24514
24514
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
24515
- chunkQO2AMZPA_js.getElementLabel(targetElement)
24515
+ chunkKCOXJJBZ_js.getElementLabel(targetElement)
24516
24516
  ]
24517
24517
  }
24518
24518
  ) : /* @__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") })),
@@ -24581,7 +24581,7 @@ function InspectorCommentRow({
24581
24581
  "button",
24582
24582
  {
24583
24583
  type: "button",
24584
- className: chunkQO2AMZPA_js.cn(
24584
+ className: chunkKCOXJJBZ_js.cn(
24585
24585
  "inline-flex items-center justify-center p-1.5 border-l border-border transition-colors",
24586
24586
  comment.resolved ? "bg-green-900/40 text-green-300 hover:bg-green-900/60" : "hover:bg-accent text-foreground hover:text-foreground"
24587
24587
  ),
@@ -24724,7 +24724,7 @@ function InspectorCommentsSection({
24724
24724
  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: [
24725
24725
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
24726
24726
  t("pptx.comments.commentingOn", {
24727
- element: chunkQO2AMZPA_js.getElementLabel(selectedElement)
24727
+ element: chunkKCOXJJBZ_js.getElementLabel(selectedElement)
24728
24728
  })
24729
24729
  ] }),
24730
24730
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -24735,7 +24735,7 @@ function InspectorCommentsSection({
24735
24735
  authors: commentAuthors,
24736
24736
  rows: 2,
24737
24737
  placeholder: selectedElement ? t("pptx.comments.addOnElement", {
24738
- element: chunkQO2AMZPA_js.getElementLabel(selectedElement)
24738
+ element: chunkKCOXJJBZ_js.getElementLabel(selectedElement)
24739
24739
  }) : t("pptx.comments.addPlaceholder"),
24740
24740
  className: "w-full bg-muted border border-border rounded px-2 py-1 text-xs resize-y outline-none focus:border-primary",
24741
24741
  onChange: onSetCommentDraft,
@@ -24748,7 +24748,7 @@ function InspectorCommentsSection({
24748
24748
  type: "button",
24749
24749
  onClick: onAddComment,
24750
24750
  disabled: !commentDraft.trim(),
24751
- className: chunkQO2AMZPA_js.cn(
24751
+ className: chunkKCOXJJBZ_js.cn(
24752
24752
  "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]!",
24753
24753
  commentDraft.trim() ? "bg-primary hover:bg-primary/80 text-white" : "bg-muted text-muted-foreground cursor-not-allowed"
24754
24754
  ),
@@ -24762,7 +24762,7 @@ function InspectorCommentsSection({
24762
24762
  ] });
24763
24763
  }
24764
24764
  function elementLabel(element) {
24765
- const text = (0, chunkQO2AMZPA_js.dist_exports.hasTextProperties)(element) ? (element.text || "").slice(0, 24) : void 0;
24765
+ const text = (0, chunkKCOXJJBZ_js.dist_exports.hasTextProperties)(element) ? (element.text || "").slice(0, 24) : void 0;
24766
24766
  return text || element.type;
24767
24767
  }
24768
24768
  function InspectorElementsTab({
@@ -24789,13 +24789,13 @@ function InspectorElementsTab({
24789
24789
  };
24790
24790
  if (!activeSlide) {
24791
24791
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
24792
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkQO2AMZPA_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24792
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkKCOXJJBZ_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24793
24793
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground italic", children: t("pptx.inspector.noSlideSelected") })
24794
24794
  ] });
24795
24795
  }
24796
24796
  const elements = activeSlide.elements || [];
24797
24797
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", "data-pptx-elements-tab": true, children: [
24798
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkQO2AMZPA_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24798
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkKCOXJJBZ_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24799
24799
  [...elements].reverse().map((el, reversedIndex) => {
24800
24800
  const index = elements.length - 1 - reversedIndex;
24801
24801
  const selected = selectedElementId === el.id || selectedElementIds.includes(el.id);
@@ -24803,7 +24803,7 @@ function InspectorElementsTab({
24803
24803
  "div",
24804
24804
  {
24805
24805
  title: `${el.type} - ${el.id}`,
24806
- className: chunkQO2AMZPA_js.cn(
24806
+ className: chunkKCOXJJBZ_js.cn(
24807
24807
  "flex items-center gap-2 px-2 py-1 rounded cursor-pointer transition-colors",
24808
24808
  selected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground"
24809
24809
  ),
@@ -24840,7 +24840,7 @@ function InspectorPaneHeader({
24840
24840
  onClose
24841
24841
  }) {
24842
24842
  const { t } = reactI18next.useTranslation();
24843
- const { viewportWidth } = chunkBOQCAJIA_js.useIsMobile();
24843
+ const { viewportWidth } = chunkMCU3FDOV_js.useIsMobile();
24844
24844
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
24845
24845
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
24846
24846
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -24863,7 +24863,7 @@ function InspectorPaneHeader({
24863
24863
  type: "button",
24864
24864
  title: t(labelKey),
24865
24865
  style: touchBtnStyle,
24866
- className: chunkQO2AMZPA_js.cn(
24866
+ className: chunkKCOXJJBZ_js.cn(
24867
24867
  "flex items-center justify-center gap-1 px-2 py-1 rounded text-[11px] transition-colors",
24868
24868
  activeTab === key ? "bg-primary text-white" : "text-muted-foreground hover:text-foreground hover:bg-accent"
24869
24869
  ),
@@ -24977,7 +24977,7 @@ function CustomPropertiesBlock({
24977
24977
  "button",
24978
24978
  {
24979
24979
  type: "button",
24980
- className: chunkQO2AMZPA_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24980
+ className: chunkKCOXJJBZ_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24981
24981
  onClick: () => onUpdate(customProperties.filter((_, i) => i !== index)),
24982
24982
  children: "\xD7"
24983
24983
  }
@@ -25305,7 +25305,7 @@ function PresentationSettingsCard({
25305
25305
  min: 1,
25306
25306
  max: 16,
25307
25307
  disabled: !canEdit,
25308
- className: chunkQO2AMZPA_js.cn(INPUT2, "w-20"),
25308
+ className: chunkKCOXJJBZ_js.cn(INPUT2, "w-20"),
25309
25309
  value: pptx.printPropertiesSlidesPerPage(presentationProperties.printProperties),
25310
25310
  onChange: (e) => onUpdate({
25311
25311
  printProperties: pptx.withSlidesPerPage(
@@ -25393,14 +25393,14 @@ function SlideThemeOverridePanel({
25393
25393
  const translate = React98.useCallback((key) => t(key), [t]);
25394
25394
  const override = activeSlide?.clrMapOverride;
25395
25395
  const isOverrideActive = override !== void 0;
25396
- const targetSlotOptions = React98.useMemo(() => [...chunkQO2AMZPA_js.dist_exports.THEME_COLOR_SCHEME_KEYS], []);
25396
+ const targetSlotOptions = React98.useMemo(() => [...chunkKCOXJJBZ_js.dist_exports.THEME_COLOR_SCHEME_KEYS], []);
25397
25397
  const commitOverride = React98.useCallback(
25398
25398
  (nextOverride) => {
25399
25399
  if (!activeSlide || !theme?.colorScheme) {
25400
25400
  onUpdateSlide({ clrMapOverride: nextOverride });
25401
25401
  return;
25402
25402
  }
25403
- const nextSlide = (0, chunkQO2AMZPA_js.dist_exports.applyThemeOverrideToSlide)(activeSlide, theme.colorScheme, nextOverride);
25403
+ const nextSlide = (0, chunkKCOXJJBZ_js.dist_exports.applyThemeOverrideToSlide)(activeSlide, theme.colorScheme, nextOverride);
25404
25404
  onUpdateSlide({
25405
25405
  clrMapOverride: nextSlide.clrMapOverride,
25406
25406
  backgroundColor: nextSlide.backgroundColor,
@@ -25413,8 +25413,8 @@ function SlideThemeOverridePanel({
25413
25413
  (enabled) => {
25414
25414
  if (enabled) {
25415
25415
  const defaultMap = {};
25416
- for (const key of chunkQO2AMZPA_js.dist_exports.COLOR_MAP_ALIAS_KEYS) {
25417
- defaultMap[key] = chunkQO2AMZPA_js.dist_exports.DEFAULT_COLOR_MAP[key];
25416
+ for (const key of chunkKCOXJJBZ_js.dist_exports.COLOR_MAP_ALIAS_KEYS) {
25417
+ defaultMap[key] = chunkKCOXJJBZ_js.dist_exports.DEFAULT_COLOR_MAP[key];
25418
25418
  }
25419
25419
  commitOverride(defaultMap);
25420
25420
  } else {
@@ -25427,9 +25427,9 @@ function SlideThemeOverridePanel({
25427
25427
  (alias, targetSlot) => {
25428
25428
  const current = override ?? {};
25429
25429
  const next = { ...current, [alias]: targetSlot };
25430
- for (const key of chunkQO2AMZPA_js.dist_exports.COLOR_MAP_ALIAS_KEYS) {
25430
+ for (const key of chunkKCOXJJBZ_js.dist_exports.COLOR_MAP_ALIAS_KEYS) {
25431
25431
  if (!next[key]) {
25432
- next[key] = chunkQO2AMZPA_js.dist_exports.DEFAULT_COLOR_MAP[key];
25432
+ next[key] = chunkKCOXJJBZ_js.dist_exports.DEFAULT_COLOR_MAP[key];
25433
25433
  }
25434
25434
  }
25435
25435
  commitOverride(next);
@@ -25461,8 +25461,8 @@ function SlideThemeOverridePanel({
25461
25461
  ),
25462
25462
  t("pptx.themeOverride.enableOverride")
25463
25463
  ] }),
25464
- isOverrideActive && override && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1.5", children: chunkQO2AMZPA_js.dist_exports.COLOR_MAP_ALIAS_KEYS.map((alias) => {
25465
- const currentTarget = override[alias] ?? chunkQO2AMZPA_js.dist_exports.DEFAULT_COLOR_MAP[alias];
25464
+ isOverrideActive && override && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1.5", children: chunkKCOXJJBZ_js.dist_exports.COLOR_MAP_ALIAS_KEYS.map((alias) => {
25465
+ const currentTarget = override[alias] ?? chunkKCOXJJBZ_js.dist_exports.DEFAULT_COLOR_MAP[alias];
25466
25466
  const resolvedHex = resolveSlotColor(currentTarget);
25467
25467
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-[11px]", children: [
25468
25468
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-24 truncate text-muted-foreground", title: ALIAS_LABELS[alias], children: ALIAS_LABELS[alias] }),
@@ -25541,7 +25541,7 @@ function TransitionPreview({
25541
25541
  const { t } = reactI18next.useTranslation();
25542
25542
  const durationMs = transition.durationMs ?? 500;
25543
25543
  const animations = React98.useMemo(
25544
- () => chunkBOQCAJIA_js.getSlideTransitionAnimations(
25544
+ () => chunkMCU3FDOV_js.getSlideTransitionAnimations(
25545
25545
  transition.type,
25546
25546
  durationMs,
25547
25547
  transition.direction,
@@ -25610,7 +25610,7 @@ function TransitionPreview({
25610
25610
  ]
25611
25611
  }
25612
25612
  ),
25613
- /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunkBOQCAJIA_js.SLIDE_TRANSITION_KEYFRAMES })
25613
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunkMCU3FDOV_js.SLIDE_TRANSITION_KEYFRAMES })
25614
25614
  ] });
25615
25615
  }
25616
25616
  var DEFAULT_DURATION_MS = 320;
@@ -25627,13 +25627,13 @@ function SlideTransitionSection({
25627
25627
  return null;
25628
25628
  }
25629
25629
  const transitionType = activeSlide.transition?.type ?? "none";
25630
- const validDirections = chunkQO2AMZPA_js.dist_exports.TRANSITION_VALID_DIRECTIONS[transitionType];
25630
+ const validDirections = chunkKCOXJJBZ_js.dist_exports.TRANSITION_VALID_DIRECTIONS[transitionType];
25631
25631
  const hasDirections = validDirections !== void 0 && validDirections.length > 0;
25632
25632
  const usesOrientation = pptx.TRANSITION_ORIENTATION_TYPES.has(transitionType);
25633
25633
  const isWheel = transitionType === "wheel";
25634
25634
  const isMorph = transitionType === "morph";
25635
- const patternOptions = chunkQO2AMZPA_js.dist_exports.TRANSITION_PATTERN_OPTIONS[transitionType];
25636
- const hasThruBlk = chunkQO2AMZPA_js.dist_exports.TRANSITION_THRUBLK_TYPES.has(transitionType);
25635
+ const patternOptions = chunkKCOXJJBZ_js.dist_exports.TRANSITION_PATTERN_OPTIONS[transitionType];
25636
+ const hasThruBlk = chunkKCOXJJBZ_js.dist_exports.TRANSITION_THRUBLK_TYPES.has(transitionType);
25637
25637
  return /* @__PURE__ */ jsxRuntime.jsxs(
25638
25638
  "div",
25639
25639
  {
@@ -25653,7 +25653,7 @@ function SlideTransitionSection({
25653
25653
  type: e.target.value
25654
25654
  }),
25655
25655
  className: "bg-muted border border-border rounded px-2 py-1 max-md:min-h-[44px]!",
25656
- children: chunkQO2AMZPA_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25656
+ children: chunkKCOXJJBZ_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25657
25657
  }
25658
25658
  )
25659
25659
  ] }),
@@ -25869,7 +25869,7 @@ function TagsSection({
25869
25869
  "button",
25870
25870
  {
25871
25871
  type: "button",
25872
- className: chunkQO2AMZPA_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25872
+ className: chunkKCOXJJBZ_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25873
25873
  title: t("pptx.tags.deleteTag"),
25874
25874
  onClick: () => deleteTag(tag.colIdx, tag.tagIdx),
25875
25875
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuTrash2, { className: "w-3 h-3" })
@@ -25998,7 +25998,7 @@ function PresentationPropertiesPanel({
25998
25998
  canEdit
25999
25999
  }
26000
26000
  ),
26001
- activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkQO2AMZPA_js.cn(CARD2, "space-y-1"), children: [
26001
+ activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkKCOXJJBZ_js.cn(CARD2, "space-y-1"), children: [
26002
26002
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: "Slide" }),
26003
26003
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[11px] text-muted-foreground", children: [
26004
26004
  activeSlide.elements?.length ?? 0,
@@ -26019,14 +26019,14 @@ function SlideBackgroundPanel({
26019
26019
  const { t } = reactI18next.useTranslation();
26020
26020
  const bgImageInputRef = React98.useRef(null);
26021
26021
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
26022
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkQO2AMZPA_js.cn(CARD2, "space-y-2"), children: [
26022
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkKCOXJJBZ_js.cn(CARD2, "space-y-2"), children: [
26023
26023
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.viewer.background") }),
26024
26024
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
26025
26025
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-10 shrink-0", children: t("pptx.slideBackground.colour") }),
26026
26026
  /* @__PURE__ */ jsxRuntime.jsx(
26027
26027
  DebouncedColorInput,
26028
26028
  {
26029
- value: chunkQO2AMZPA_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
26029
+ value: chunkKCOXJJBZ_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
26030
26030
  disabled: !canEdit,
26031
26031
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
26032
26032
  onCommit: (hex) => onUpdateSlide({ backgroundColor: hex })
@@ -26065,7 +26065,7 @@ function SlideBackgroundPanel({
26065
26065
  "button",
26066
26066
  {
26067
26067
  type: "button",
26068
- className: chunkQO2AMZPA_js.cn(BTN2, "flex-1 text-center"),
26068
+ className: chunkKCOXJJBZ_js.cn(BTN2, "flex-1 text-center"),
26069
26069
  disabled: !canEdit,
26070
26070
  onClick: () => bgImageInputRef.current?.click(),
26071
26071
  children: activeSlide.backgroundImage ? t("pptx.slideBackground.replaceImage") : t("pptx.slideBackground.chooseImage")
@@ -26098,7 +26098,7 @@ function SlideBackgroundPanel({
26098
26098
  "button",
26099
26099
  {
26100
26100
  type: "button",
26101
- className: chunkQO2AMZPA_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
26101
+ className: chunkKCOXJJBZ_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
26102
26102
  disabled: !pptx.slideBackgroundClearState(activeSlide, canEdit).enabled,
26103
26103
  onClick: () => onUpdateSlide(pptx.slideBackgroundClearPatch()),
26104
26104
  children: t("pptx.slideBackground.clearBackground")
@@ -26142,14 +26142,14 @@ function TemplateBackgroundCard({
26142
26142
  t("pptx.master.layout"),
26143
26143
  t("pptx.master.master")
26144
26144
  );
26145
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkQO2AMZPA_js.cn(CARD2, "space-y-2"), children: [
26145
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkKCOXJJBZ_js.cn(CARD2, "space-y-2"), children: [
26146
26146
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.slideBackground.templateBackgroundsHeading") }),
26147
26147
  rows.layout && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
26148
26148
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-14 shrink-0 truncate", title: rows.layout.title, children: t("pptx.master.layout") }),
26149
26149
  /* @__PURE__ */ jsxRuntime.jsx(
26150
26150
  DebouncedColorInput,
26151
26151
  {
26152
- value: chunkQO2AMZPA_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
26152
+ value: chunkKCOXJJBZ_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
26153
26153
  disabled: !canEdit,
26154
26154
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
26155
26155
  onCommit: (hex) => onSetTemplateBackground(rows.layout.path, hex)
@@ -26162,7 +26162,7 @@ function TemplateBackgroundCard({
26162
26162
  /* @__PURE__ */ jsxRuntime.jsx(
26163
26163
  DebouncedColorInput,
26164
26164
  {
26165
- value: chunkQO2AMZPA_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
26165
+ value: chunkKCOXJJBZ_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
26166
26166
  disabled: !canEdit,
26167
26167
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
26168
26168
  onCommit: (hex) => onSetTemplateBackground(rows.master.path, hex)
@@ -26273,7 +26273,7 @@ function InspectorPane(props) {
26273
26273
  } = props;
26274
26274
  const hasSelection = selectedElement !== null;
26275
26275
  const { t } = reactI18next.useTranslation();
26276
- const { dragY, handlers: dragHandlers } = chunkBOQCAJIA_js.useSheetDismissDrag(onClose);
26276
+ const { dragY, handlers: dragHandlers } = chunkMCU3FDOV_js.useSheetDismissDrag(onClose);
26277
26277
  const {
26278
26278
  animationPanelHeight,
26279
26279
  effectiveThemeOptions,
@@ -26295,7 +26295,7 @@ function InspectorPane(props) {
26295
26295
  "div",
26296
26296
  {
26297
26297
  "data-pptx-chrome": "inspector",
26298
- className: chunkQO2AMZPA_js.cn(
26298
+ className: chunkKCOXJJBZ_js.cn(
26299
26299
  // Shared styles
26300
26300
  "bg-background flex flex-col text-xs text-foreground shadow-xl",
26301
26301
  // Mobile: absolute bottom sheet overlay sized via dvh so it
@@ -26686,7 +26686,7 @@ function PresentationTouchControls({
26686
26686
  hideNavigation = false
26687
26687
  }) {
26688
26688
  const { t } = reactI18next.useTranslation();
26689
- const { isTouchDevice } = chunkBOQCAJIA_js.useIsMobile();
26689
+ const { isTouchDevice } = chunkMCU3FDOV_js.useIsMobile();
26690
26690
  if (!isTouchDevice) {
26691
26691
  return null;
26692
26692
  }
@@ -26991,13 +26991,13 @@ function PrintPreview({
26991
26991
  }) {
26992
26992
  const { t } = reactI18next.useTranslation();
26993
26993
  const pages = React98.useMemo(
26994
- () => chunkQO2AMZPA_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26994
+ () => chunkKCOXJJBZ_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26995
26995
  [slideIndices, slidesPerPage, orientation]
26996
26996
  );
26997
- const printable = React98.useMemo(() => chunkQO2AMZPA_js.getPrintableArea(orientation), [orientation]);
26997
+ const printable = React98.useMemo(() => chunkKCOXJJBZ_js.getPrintableArea(orientation), [orientation]);
26998
26998
  const visiblePages = pages.slice(0, maxPages);
26999
26999
  const isThreePerPage = slidesPerPage === 3;
27000
- const noteLineCount = chunkQO2AMZPA_js.generateNoteLineCount();
27000
+ const noteLineCount = chunkKCOXJJBZ_js.generateNoteLineCount();
27001
27001
  const scaledW = printable.width * PREVIEW_SCALE3;
27002
27002
  const scaledH = printable.height * PREVIEW_SCALE3;
27003
27003
  const noteAreaFraction = 0.5;
@@ -27332,11 +27332,11 @@ function PrintDialog({
27332
27332
  defaultFrameSlides
27333
27333
  }) {
27334
27334
  const { t } = reactI18next.useTranslation();
27335
- const { panelStyle, handlers: dragHandlers } = chunkBOQCAJIA_js.useModalDismissDrag(onClose);
27336
- const { viewportWidth } = chunkBOQCAJIA_js.useIsMobile();
27335
+ const { panelStyle, handlers: dragHandlers } = chunkMCU3FDOV_js.useModalDismissDrag(onClose);
27336
+ const { viewportWidth } = chunkMCU3FDOV_js.useIsMobile();
27337
27337
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
27338
27338
  const closeBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
27339
- const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunkBOQCAJIA_js.useViewerOptionsContext());
27339
+ const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunkMCU3FDOV_js.useViewerOptionsContext());
27340
27340
  const [printWhat, setPrintWhat] = React98.useState(printOptionDefaults?.printWhat ?? "slides");
27341
27341
  const [orientation, setOrientation] = React98.useState("landscape");
27342
27342
  const [colorMode, setColorMode] = React98.useState(
@@ -27839,14 +27839,14 @@ function BroadcastDialog({
27839
27839
  defaultServerUrl
27840
27840
  }) {
27841
27841
  const { t } = reactI18next.useTranslation();
27842
- const collab = chunkBOQCAJIA_js.useCollaboration();
27842
+ const collab = chunkMCU3FDOV_js.useCollaboration();
27843
27843
  const isBroadcasting = collab !== null && collab.status !== "disconnected" && collab.status !== "error" && collab.config.role === "owner";
27844
27844
  const [roomId, setRoomId] = React98.useState("");
27845
27845
  const [userName, setUserName] = React98.useState("");
27846
27846
  const [serverUrl, setServerUrl] = React98.useState("");
27847
27847
  const [copied, setCopied] = React98.useState(false);
27848
27848
  const dialogRef = React98.useRef(null);
27849
- const { panelStyle, handlers: dragHandlers } = chunkBOQCAJIA_js.useModalDismissDrag(onClose);
27849
+ const { panelStyle, handlers: dragHandlers } = chunkMCU3FDOV_js.useModalDismissDrag(onClose);
27850
27850
  useModalFocus(open, dialogRef, onClose);
27851
27851
  React98.useEffect(() => {
27852
27852
  if (open && !isBroadcasting) {
@@ -28149,7 +28149,7 @@ function ActiveSessionView({
28149
28149
  onCopyRoomId,
28150
28150
  onStopCollaboration
28151
28151
  }) {
28152
- const { t } = reactI18next.useTranslation(), viewerOptions = chunkBOQCAJIA_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({
28152
+ const { t } = reactI18next.useTranslation(), viewerOptions = chunkMCU3FDOV_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({
28153
28153
  localUserName: activeCollaboration?.userName ?? collab.config.userName,
28154
28154
  localUserInitials: viewerOptions.general.userInitials,
28155
28155
  localUserColor: collab.config.userColor,
@@ -28248,7 +28248,7 @@ function StartSessionForm({
28248
28248
  onRetry
28249
28249
  }) {
28250
28250
  const { t } = reactI18next.useTranslation();
28251
- const { viewportWidth } = chunkBOQCAJIA_js.useIsMobile();
28251
+ const { viewportWidth } = chunkMCU3FDOV_js.useIsMobile();
28252
28252
  const tabBtnStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
28253
28253
  const inputReadOnlyClass = preconfigured ? " opacity-70 cursor-not-allowed" : "";
28254
28254
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
@@ -28382,7 +28382,7 @@ function ShareDialog({
28382
28382
  defaultUserName,
28383
28383
  defaultServerUrl
28384
28384
  }) {
28385
- const collab = chunkBOQCAJIA_js.useCollaboration();
28385
+ const collab = chunkMCU3FDOV_js.useCollaboration();
28386
28386
  const isActive = collab !== null && collab.status !== "disconnected" && collab.status !== "error";
28387
28387
  const { t } = reactI18next.useTranslation();
28388
28388
  const [roomId, setRoomId] = React98.useState(defaultRoomId ?? "");
@@ -28392,9 +28392,9 @@ function ShareDialog({
28392
28392
  const [invitation, setInvitation] = React98.useState("");
28393
28393
  const [copied, setCopied] = React98.useState(false);
28394
28394
  const dialogRef = React98.useRef(null);
28395
- const { panelStyle, handlers: dragHandlers } = chunkBOQCAJIA_js.useModalDismissDrag(onClose);
28395
+ const { panelStyle, handlers: dragHandlers } = chunkMCU3FDOV_js.useModalDismissDrag(onClose);
28396
28396
  useModalFocus(open, dialogRef, onClose);
28397
- const { viewportWidth, viewportHeight } = chunkBOQCAJIA_js.useIsMobile();
28397
+ const { viewportWidth, viewportHeight } = chunkMCU3FDOV_js.useIsMobile();
28398
28398
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
28399
28399
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
28400
28400
  const stickyFooterClass = pptx.shouldStickyActionRow(viewportWidth, viewportHeight) ? "sticky bottom-0 bg-popover" : "";
@@ -28677,12 +28677,12 @@ function HyperlinkEditDialog({
28677
28677
  onCancel
28678
28678
  }) {
28679
28679
  const { t } = reactI18next.useTranslation();
28680
- const { panelStyle, handlers: dragHandlers } = chunkBOQCAJIA_js.useModalDismissDrag(onCancel);
28680
+ const { panelStyle, handlers: dragHandlers } = chunkMCU3FDOV_js.useModalDismissDrag(onCancel);
28681
28681
  const inputRef = React98.useRef(null);
28682
- const detectedType = chunkBOQCAJIA_js.detectTargetType(initialUrl, initialAction);
28683
- const emailParts = chunkBOQCAJIA_js.parseEmailUrl(initialUrl || "");
28684
- const detectedSlide = chunkBOQCAJIA_js.parseSlideFromUrl(initialUrl, initialAction);
28685
- const detectedVerb = initialAction ? chunkBOQCAJIA_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28682
+ const detectedType = chunkMCU3FDOV_js.detectTargetType(initialUrl, initialAction);
28683
+ const emailParts = chunkMCU3FDOV_js.parseEmailUrl(initialUrl || "");
28684
+ const detectedSlide = chunkMCU3FDOV_js.parseSlideFromUrl(initialUrl, initialAction);
28685
+ const detectedVerb = initialAction ? chunkMCU3FDOV_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28686
28686
  const [targetType, setTargetType] = React98.useState(detectedType);
28687
28687
  const [url, setUrl] = React98.useState(
28688
28688
  detectedType === "email" || detectedType === "slide" || detectedType === "action" ? "" : initialUrl || ""
@@ -28713,7 +28713,7 @@ function HyperlinkEditDialog({
28713
28713
  actionVerb
28714
28714
  });
28715
28715
  };
28716
- const tabCls = (active) => chunkQO2AMZPA_js.cn(
28716
+ const tabCls = (active) => chunkKCOXJJBZ_js.cn(
28717
28717
  "px-3 py-1.5 text-xs rounded-t border-b-2 transition-colors",
28718
28718
  active ? "border-primary text-primary font-medium" : "border-transparent text-muted-foreground hover:text-foreground hover:border-border"
28719
28719
  );
@@ -28950,7 +28950,7 @@ function ViewerBottomPanels({
28950
28950
  notesStyle,
28951
28951
  onNotesHeightChange
28952
28952
  }) {
28953
- const { isHidden } = chunkBOQCAJIA_js.useToolbarVisibility(hiddenActions);
28953
+ const { isHidden } = chunkMCU3FDOV_js.useToolbarVisibility(hiddenActions);
28954
28954
  const customization = useViewerCustomizationContext();
28955
28955
  const showNotes = pptx.isPanelVisible(customization, "notes");
28956
28956
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -29296,7 +29296,7 @@ function ViewerToolbarSection(props) {
29296
29296
  [activeSlide, propertyHandlers]
29297
29297
  );
29298
29298
  const scopedLayoutOptions = React98__default.default.useMemo(
29299
- () => chunkBOQCAJIA_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
29299
+ () => chunkMCU3FDOV_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
29300
29300
  [s.layoutOptions, activeSlide]
29301
29301
  );
29302
29302
  const handleResetSlide = React98.useCallback(() => {
@@ -29700,7 +29700,7 @@ function ViewerToolbarSection(props) {
29700
29700
  isCommentsPanelOpen: s.isInspectorPaneOpen,
29701
29701
  slideCommentCount: activeSlide?.comments?.length ?? 0,
29702
29702
  formatPainterActive: s.formatPainterActive,
29703
- canActivateFormatPainter: chunkQO2AMZPA_js.hasCopyableFormat(selectedElement),
29703
+ canActivateFormatPainter: chunkKCOXJJBZ_js.hasCopyableFormat(selectedElement),
29704
29704
  onToggleFormatPainter: onToggleFormatPainterProp ?? (() => s.setFormatPainterActive((p) => !p)),
29705
29705
  isSelectionPaneOpen: s.isSelectionPaneOpen,
29706
29706
  onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
@@ -29787,7 +29787,7 @@ function EquationEditorDialog({
29787
29787
  existingOmml
29788
29788
  }) {
29789
29789
  const { t } = reactI18next.useTranslation();
29790
- const { panelStyle, handlers: dragHandlers } = chunkBOQCAJIA_js.useModalDismissDrag(onClose);
29790
+ const { panelStyle, handlers: dragHandlers } = chunkMCU3FDOV_js.useModalDismissDrag(onClose);
29791
29791
  const initialLatex = React98.useMemo(() => {
29792
29792
  if (!existingOmml) {
29793
29793
  return "";
@@ -29909,7 +29909,7 @@ function EquationEditorDialog({
29909
29909
  {
29910
29910
  type: "button",
29911
29911
  onClick: () => handleTemplateClick(tmpl.latex),
29912
- className: chunkQO2AMZPA_js.cn(
29912
+ className: chunkKCOXJJBZ_js.cn(
29913
29913
  "flex flex-col items-center gap-1 p-2 rounded-lg border transition-colors",
29914
29914
  latex === tmpl.latex ? "border-primary bg-primary/10" : "border-border bg-muted/40 hover:bg-accent/60 hover:border-border"
29915
29915
  ),
@@ -29975,7 +29975,7 @@ function getPreviewForLayout(layout) {
29975
29975
  transform: `scale(${scale})`,
29976
29976
  transformOrigin: "top left"
29977
29977
  },
29978
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkBOQCAJIA_js.SmartArtRenderer, { element: pptx.buildSmartArtPreviewElement(layout) })
29978
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkMCU3FDOV_js.SmartArtRenderer, { element: pptx.buildSmartArtPreviewElement(layout) })
29979
29979
  }
29980
29980
  )
29981
29981
  }
@@ -29987,7 +29987,7 @@ function InsertSmartArtDialog({
29987
29987
  onInsert
29988
29988
  }) {
29989
29989
  const { t } = reactI18next.useTranslation();
29990
- const { panelStyle, handlers: dragHandlers } = chunkBOQCAJIA_js.useModalDismissDrag(onClose);
29990
+ const { panelStyle, handlers: dragHandlers } = chunkMCU3FDOV_js.useModalDismissDrag(onClose);
29991
29991
  const [activeCategory, setActiveCategory] = React98.useState("list");
29992
29992
  const [selectedLayout, setSelectedLayout] = React98.useState(null);
29993
29993
  const dialogRef = React98.useRef(null);
@@ -30068,7 +30068,7 @@ function InsertSmartArtDialog({
30068
30068
  setActiveCategory(cat.id);
30069
30069
  setSelectedLayout(null);
30070
30070
  },
30071
- className: chunkQO2AMZPA_js.cn(
30071
+ className: chunkKCOXJJBZ_js.cn(
30072
30072
  "w-full text-left px-3 py-1.5 text-xs transition-colors",
30073
30073
  activeCategory === cat.id ? "bg-primary text-white" : "text-foreground hover:bg-muted"
30074
30074
  ),
@@ -30096,7 +30096,7 @@ function InsertSmartArtDialog({
30096
30096
  onInsert(preset.layout, preset.defaultItems);
30097
30097
  onClose();
30098
30098
  },
30099
- className: chunkQO2AMZPA_js.cn(
30099
+ className: chunkKCOXJJBZ_js.cn(
30100
30100
  "flex flex-col items-center gap-1 p-2 rounded border transition-colors",
30101
30101
  selectedLayout === preset.layout ? "border-primary bg-primary/20" : "border-border hover:border-border hover:bg-muted/50"
30102
30102
  ),
@@ -30593,11 +30593,11 @@ function PresentationStage({
30593
30593
  })
30594
30594
  },
30595
30595
  children: [
30596
- /* @__PURE__ */ jsxRuntime.jsx(chunkBOQCAJIA_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30596
+ /* @__PURE__ */ jsxRuntime.jsx(chunkMCU3FDOV_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30597
30597
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: pptx.PRESENTATION_HIT_TEST_CSS }),
30598
30598
  presentationKeyframesCss && /* @__PURE__ */ jsxRuntime.jsx("style", { children: presentationKeyframesCss }),
30599
30599
  templateElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30600
- chunkBOQCAJIA_js.ElementRenderer,
30600
+ chunkMCU3FDOV_js.ElementRenderer,
30601
30601
  {
30602
30602
  element,
30603
30603
  activeSlide,
@@ -30634,7 +30634,7 @@ function PresentationStage({
30634
30634
  `tpl-${element.id}`
30635
30635
  )),
30636
30636
  activeSlide?.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30637
- chunkBOQCAJIA_js.ElementRenderer,
30637
+ chunkMCU3FDOV_js.ElementRenderer,
30638
30638
  {
30639
30639
  element,
30640
30640
  activeSlide,
@@ -30755,8 +30755,8 @@ function ViewerCanvasArea(props) {
30755
30755
  aiCanvasActive = false
30756
30756
  } = props;
30757
30757
  const { t } = reactI18next.useTranslation();
30758
- const { isHidden } = chunkBOQCAJIA_js.useToolbarVisibility(hiddenActions);
30759
- const viewerOptions = chunkBOQCAJIA_js.useViewerOptionsContext();
30758
+ const { isHidden } = chunkMCU3FDOV_js.useToolbarVisibility(hiddenActions);
30759
+ const viewerOptions = chunkMCU3FDOV_js.useViewerOptionsContext();
30760
30760
  const outlineAuthoring = useOutlineAuthoring({
30761
30761
  state: s,
30762
30762
  updateElement: canvasHandlers.handleUpdateSmartArtElement,
@@ -30785,7 +30785,7 @@ function ViewerCanvasArea(props) {
30785
30785
  ${url}`)) {
30786
30786
  return;
30787
30787
  }
30788
- chunkQO2AMZPA_js.safeOpenUrl(url);
30788
+ chunkKCOXJJBZ_js.safeOpenUrl(url);
30789
30789
  },
30790
30790
  [viewerOptions, t]
30791
30791
  );
@@ -30806,9 +30806,9 @@ ${url}`)) {
30806
30806
  );
30807
30807
  const handleHyperlinkClick = React98.useCallback(
30808
30808
  (url) => {
30809
- if (chunkQO2AMZPA_js.isPpactionUrl(url)) {
30809
+ if (chunkKCOXJJBZ_js.isPpactionUrl(url)) {
30810
30810
  if (mode === "present") {
30811
- const parsed = chunkQO2AMZPA_js.parsePpactionUrl(url);
30811
+ const parsed = chunkKCOXJJBZ_js.parsePpactionUrl(url);
30812
30812
  if (parsed) {
30813
30813
  const action = {
30814
30814
  action: parsed.action,
@@ -30893,7 +30893,7 @@ ${url}`)) {
30893
30893
  s.setActiveSlideIndex((i) => Math.max(0, i - 1));
30894
30894
  }
30895
30895
  }, [mode, presentation, s]);
30896
- const swipe = chunkBOQCAJIA_js.useSwipeNavigation({
30896
+ const swipe = chunkMCU3FDOV_js.useSwipeNavigation({
30897
30897
  enabled: swipeEnabled,
30898
30898
  onNext: handleSwipeNext,
30899
30899
  onPrev: handleSwipePrev
@@ -30967,7 +30967,7 @@ ${url}`)) {
30967
30967
  ),
30968
30968
  children: (stageScale) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30969
30969
  presentation.transitionOverlay && slides[presentation.transitionOverlay.outgoingSlideIndex] && /* @__PURE__ */ jsxRuntime.jsx(
30970
- chunkBOQCAJIA_js.PresentationTransitionOverlay,
30970
+ chunkMCU3FDOV_js.PresentationTransitionOverlay,
30971
30971
  {
30972
30972
  outgoingSlide: slides[presentation.transitionOverlay.outgoingSlideIndex],
30973
30973
  templateElements,
@@ -31078,14 +31078,14 @@ ${url}`)) {
31078
31078
  outlineAuthoring,
31079
31079
  collaborationOverlay: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31080
31080
  /* @__PURE__ */ jsxRuntime.jsx(
31081
- chunkBOQCAJIA_js.RemoteSelectionOverlay,
31081
+ chunkMCU3FDOV_js.RemoteSelectionOverlay,
31082
31082
  {
31083
31083
  elements: effectiveSlide?.elements ?? [],
31084
31084
  activeSlideIndex
31085
31085
  }
31086
31086
  ),
31087
31087
  /* @__PURE__ */ jsxRuntime.jsx(
31088
- chunkBOQCAJIA_js.CollaborationCursorOverlay,
31088
+ chunkMCU3FDOV_js.CollaborationCursorOverlay,
31089
31089
  {
31090
31090
  activeSlideIndex,
31091
31091
  canvasWidth: canvasSize.width,
@@ -31225,7 +31225,7 @@ function useTableStyleMapHandlers(input) {
31225
31225
  var AiChatPanel = React98.lazy(async () => {
31226
31226
  const [{ useChat }, { default: Panel }] = await Promise.all([
31227
31227
  import('@ai-sdk/react'),
31228
- import('./AiChatPanel-6VWW4FHG.js')
31228
+ import('./AiChatPanel-ER4CGJRD.js')
31229
31229
  ]);
31230
31230
  function BoundAiChatPanel(props) {
31231
31231
  return /* @__PURE__ */ jsxRuntime.jsx(Panel, { ...props, useChat });
@@ -31386,7 +31386,7 @@ function MobileDismissSheet({
31386
31386
  children
31387
31387
  }) {
31388
31388
  const { t } = reactI18next.useTranslation();
31389
- const { dragY, handlers } = chunkBOQCAJIA_js.useSheetDismissDrag(onClose);
31389
+ const { dragY, handlers } = chunkMCU3FDOV_js.useSheetDismissDrag(onClose);
31390
31390
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31391
31391
  /* @__PURE__ */ jsxRuntime.jsx(
31392
31392
  "button",
@@ -31655,7 +31655,7 @@ function ThemeThumbnail({
31655
31655
  {
31656
31656
  type: "button",
31657
31657
  onClick,
31658
- className: chunkQO2AMZPA_js.cn(
31658
+ className: chunkKCOXJJBZ_js.cn(
31659
31659
  "group relative flex flex-col rounded-lg border-2 transition-all overflow-hidden",
31660
31660
  selected ? "border-primary shadow-lg scale-[1.02]" : "border-border hover:border-primary/50 hover:shadow-md"
31661
31661
  ),
@@ -31841,7 +31841,7 @@ function ViewerSidePanels(props) {
31841
31841
  const customization = useViewerCustomizationContext();
31842
31842
  const inspectorOpen = (mode === "edit" || mode === "master") && s.isInspectorPaneOpen && pptx.isPanelVisible(customization, "inspector");
31843
31843
  const currentBuiltInTheme = BUILT_IN_THEMES.find(
31844
- (candidate) => (0, chunkQO2AMZPA_js.dist_exports.themeColorSchemesEqual)(s.theme?.colorScheme, candidate.colorScheme)
31844
+ (candidate) => (0, chunkKCOXJJBZ_js.dist_exports.themeColorSchemesEqual)(s.theme?.colorScheme, candidate.colorScheme)
31845
31845
  ) ?? null;
31846
31846
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31847
31847
  inspectorOpen && onResizeRight && /* @__PURE__ */ jsxRuntime.jsx(ResizeHandle, { direction: "horizontal", onResize: onResizeRight }),
@@ -32127,7 +32127,7 @@ function ViewerMainContent(props) {
32127
32127
  );
32128
32128
  const layoutGalleryAnchorRef = React98.useRef(null);
32129
32129
  const layoutGalleryPreviews = useLayoutPreviews(loadLayoutPreviews, layoutGalleryAnchor !== null);
32130
- return /* @__PURE__ */ jsxRuntime.jsx(chunkBOQCAJIA_js.ChartPartSelectionProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "body", className: "relative z-10 flex flex-1 min-h-0", children: [
32130
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkMCU3FDOV_js.ChartPartSelectionProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "body", className: "relative z-10 flex flex-1 min-h-0", children: [
32131
32131
  showSlidesPane && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
32132
32132
  /* @__PURE__ */ jsxRuntime.jsx(
32133
32133
  SlidesPaneSidebar,
@@ -32617,7 +32617,7 @@ function MobileChromeOverlay(props) {
32617
32617
  slideSectionGroups,
32618
32618
  canEdit,
32619
32619
  commentCount
32620
- } = props, { keyboardInset, isKeyboardOpen } = chunkBOQCAJIA_js.useKeyboardInsets(), activeSheet = s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null, closeAllSheets = () => {
32620
+ } = props, { keyboardInset, isKeyboardOpen } = chunkMCU3FDOV_js.useKeyboardInsets(), activeSheet = s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null, closeAllSheets = () => {
32621
32621
  s.setIsSlidesPaneOpen(false);
32622
32622
  s.setIsInspectorPaneOpen(false);
32623
32623
  s.setIsSlideNotesCollapsed(true);
@@ -32823,7 +32823,7 @@ function AddinTable({
32823
32823
  "tr",
32824
32824
  {
32825
32825
  onClick: () => onSelect(row.id),
32826
- className: chunkQO2AMZPA_js.cn(
32826
+ className: chunkKCOXJJBZ_js.cn(
32827
32827
  "cursor-pointer border-b border-border/40 transition-colors",
32828
32828
  selectedId === row.id ? "bg-primary/10" : "hover:bg-accent"
32829
32829
  ),
@@ -32890,18 +32890,18 @@ function ControlRow({
32890
32890
  onOptionChange: emitChange
32891
32891
  }) {
32892
32892
  const { t } = reactI18next.useTranslation();
32893
- const { viewportWidth } = chunkBOQCAJIA_js.useIsMobile();
32893
+ const { viewportWidth } = chunkMCU3FDOV_js.useIsMobile();
32894
32894
  const fieldMinHeight = pptx.getDensePanelTouchTargetPx(viewportWidth);
32895
32895
  const value = readValue(options, control);
32896
32896
  const label = t(control.labelKey);
32897
32897
  const info = control.infoKey ? /* @__PURE__ */ jsxRuntime.jsx(InfoTip, { text: t(control.infoKey) }) : null;
32898
- const rowClass = chunkQO2AMZPA_js.cn("flex items-center justify-between gap-3 py-1.5", control.indent && "pl-6");
32898
+ const rowClass = chunkKCOXJJBZ_js.cn("flex items-center justify-between gap-3 py-1.5", control.indent && "pl-6");
32899
32899
  const rowStyle = { minHeight: fieldMinHeight };
32900
32900
  const locked = control.readOnly === true;
32901
32901
  const lockedTitle = locked ? t("pptx.options.lockedByHost") : void 0;
32902
32902
  const onOptionChange = locked ? IGNORE_CHANGE : emitChange;
32903
32903
  if (control.kind === "toggle") {
32904
- return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: chunkQO2AMZPA_js.cn(rowClass, "cursor-pointer select-none"), style: rowStyle, children: [
32904
+ return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: chunkKCOXJJBZ_js.cn(rowClass, "cursor-pointer select-none"), style: rowStyle, children: [
32905
32905
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-foreground", children: [
32906
32906
  label,
32907
32907
  info
@@ -33053,7 +33053,7 @@ function CommandList({
33053
33053
  role: "option",
33054
33054
  "aria-selected": selectedId === id,
33055
33055
  onClick: () => onSelect(id),
33056
- className: chunkQO2AMZPA_js.cn(
33056
+ className: chunkKCOXJJBZ_js.cn(
33057
33057
  "flex w-full items-center rounded px-2 py-1.5 text-left text-sm transition-colors",
33058
33058
  selectedId === id ? "bg-primary/15 text-primary" : "text-foreground hover:bg-accent"
33059
33059
  ),
@@ -33197,7 +33197,7 @@ function OptionsRibbonPane({
33197
33197
  return /* @__PURE__ */ jsxRuntime.jsxs(
33198
33198
  "label",
33199
33199
  {
33200
- className: chunkQO2AMZPA_js.cn(
33200
+ className: chunkKCOXJJBZ_js.cn(
33201
33201
  "flex items-center gap-2 rounded px-2 py-1.5",
33202
33202
  isFile ? "cursor-not-allowed opacity-60" : "cursor-pointer hover:bg-accent"
33203
33203
  ),
@@ -33231,7 +33231,7 @@ function OptionsRibbonPane({
33231
33231
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: pptx.SHORTCUT_REFERENCE_ITEMS.map((shortcut, i) => /* @__PURE__ */ jsxRuntime.jsxs(
33232
33232
  "div",
33233
33233
  {
33234
- className: chunkQO2AMZPA_js.cn(
33234
+ className: chunkKCOXJJBZ_js.cn(
33235
33235
  "flex items-center justify-between gap-3 rounded px-3 py-2",
33236
33236
  i % 2 === 0 ? "bg-muted/60" : ""
33237
33237
  ),
@@ -33252,7 +33252,7 @@ async function exportAiChatLogs(options) {
33252
33252
  chats,
33253
33253
  { format: options?.format, detailed: options?.detailed, now: options?.now },
33254
33254
  (filename, content, mime) => {
33255
- chunkBOQCAJIA_js.downloadBlob(new Blob([content], { type: mime }), filename);
33255
+ chunkMCU3FDOV_js.downloadBlob(new Blob([content], { type: mime }), filename);
33256
33256
  }
33257
33257
  );
33258
33258
  }
@@ -33360,7 +33360,7 @@ function SettingsAppearanceTab({
33360
33360
  type: "button",
33361
33361
  onClick: () => onSelectTheme(entry.key),
33362
33362
  "aria-pressed": isActive,
33363
- className: chunkQO2AMZPA_js.cn(
33363
+ className: chunkKCOXJJBZ_js.cn(
33364
33364
  "flex items-center gap-3 rounded-lg border px-3 py-2.5 text-left transition-colors",
33365
33365
  isActive ? "border-primary bg-primary/10" : "border-border hover:border-primary/50 hover:bg-accent"
33366
33366
  ),
@@ -33377,7 +33377,7 @@ function SettingsAppearanceTab({
33377
33377
  /* @__PURE__ */ jsxRuntime.jsx(
33378
33378
  "span",
33379
33379
  {
33380
- className: chunkQO2AMZPA_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33380
+ className: chunkKCOXJJBZ_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33381
33381
  children: t(entry.labelKey)
33382
33382
  }
33383
33383
  )
@@ -33457,7 +33457,7 @@ function SettingsLanguageTab({
33457
33457
  type: "button",
33458
33458
  onClick: () => onSelectLocale(locale.code),
33459
33459
  "aria-pressed": isActive,
33460
- className: chunkQO2AMZPA_js.cn(
33460
+ className: chunkKCOXJJBZ_js.cn(
33461
33461
  "flex w-full items-center justify-between rounded px-3 py-2.5 text-left transition-colors",
33462
33462
  isActive ? "bg-primary/10 text-primary" : "text-foreground hover:bg-accent"
33463
33463
  ),
@@ -33497,8 +33497,8 @@ function SettingsDialog({
33497
33497
  const [activeTabId, setActiveTabId] = React98.useState("general");
33498
33498
  const { t } = reactI18next.useTranslation();
33499
33499
  const customization = useViewerCustomizationContext();
33500
- const { panelStyle, handlers: dragHandlers } = chunkBOQCAJIA_js.useModalDismissDrag(onClose);
33501
- const { viewportWidth, viewportHeight } = chunkBOQCAJIA_js.useIsMobile();
33500
+ const { panelStyle, handlers: dragHandlers } = chunkMCU3FDOV_js.useModalDismissDrag(onClose);
33501
+ const { viewportWidth, viewportHeight } = chunkMCU3FDOV_js.useIsMobile();
33502
33502
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
33503
33503
  const navBtnStyle = { minHeight: touchTargetPx, minWidth: touchTargetPx };
33504
33504
  const closeBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
@@ -33606,7 +33606,7 @@ function SettingsDialog({
33606
33606
  onClick: () => setActiveTabId(tab.id),
33607
33607
  "aria-current": currentTabId === tab.id,
33608
33608
  style: navBtnStyle,
33609
- className: chunkQO2AMZPA_js.cn(
33609
+ className: chunkKCOXJJBZ_js.cn(
33610
33610
  "flex w-full items-center whitespace-nowrap rounded px-3 py-2 text-left text-sm transition-colors max-md:w-auto",
33611
33611
  currentTabId === tab.id ? "bg-primary/10 font-medium text-primary" : "text-foreground hover:bg-accent"
33612
33612
  ),
@@ -33621,7 +33621,7 @@ function SettingsDialog({
33621
33621
  onClick: () => setActiveTabId(AI_TAB_ID),
33622
33622
  "aria-current": aiActive,
33623
33623
  style: navBtnStyle,
33624
- className: chunkQO2AMZPA_js.cn(
33624
+ className: chunkKCOXJJBZ_js.cn(
33625
33625
  "flex w-full items-center whitespace-nowrap rounded px-3 py-2 text-left text-sm transition-colors max-md:w-auto",
33626
33626
  aiActive ? "bg-primary/10 font-medium text-primary" : "text-foreground hover:bg-accent"
33627
33627
  ),
@@ -33767,7 +33767,7 @@ function ViewerOptionsProvider({
33767
33767
  store,
33768
33768
  children
33769
33769
  }) {
33770
- return /* @__PURE__ */ jsxRuntime.jsx(chunkBOQCAJIA_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunkBOQCAJIA_js.ViewerOptionsContext.Provider, { value: options, children }) });
33770
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkMCU3FDOV_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunkMCU3FDOV_js.ViewerOptionsContext.Provider, { value: options, children }) });
33771
33771
  }
33772
33772
  function useAiBridge(input) {
33773
33773
  const ref = React98.useRef(input);
@@ -34088,7 +34088,7 @@ function useMasterViewCrud(input) {
34088
34088
  if (id === "renameLayout" || id === "renameMaster") {
34089
34089
  const master = slideMasters[target.masterIndex];
34090
34090
  const current = id === "renameLayout" ? master?.layouts?.[target.layoutIndex ?? -1]?.name ?? "" : master?.name ?? "";
34091
- const next = chunkBOQCAJIA_js.safePrompt(t("pptx.masterView.renamePrompt"), current)?.trim();
34091
+ const next = chunkMCU3FDOV_js.safePrompt(t("pptx.masterView.renamePrompt"), current)?.trim();
34092
34092
  if (!next) {
34093
34093
  return;
34094
34094
  }
@@ -34485,7 +34485,7 @@ var PowerPointViewer = React98.forwardRef(
34485
34485
  (current) => current.includes(family) ? current : [...current, family]
34486
34486
  );
34487
34487
  }, []);
34488
- const { i18n: i18n$1 } = reactI18next.useTranslation();
34488
+ const { t, i18n: i18n$1 } = reactI18next.useTranslation();
34489
34489
  const [localeCode, setLocaleCode] = React98.useState(
34490
34490
  () => defaultLocale ?? pptx.readStoredViewerPrefs().localeCode ?? "en"
34491
34491
  );
@@ -34547,7 +34547,7 @@ var PowerPointViewer = React98.forwardRef(
34547
34547
  }
34548
34548
  })();
34549
34549
  }, []);
34550
- const { optionsStore, options: viewerOptions } = chunkBOQCAJIA_js.useViewerOptions();
34550
+ const { optionsStore, options: viewerOptions } = chunkMCU3FDOV_js.useViewerOptions();
34551
34551
  const custom = useViewerCustomization(customization, legacyHiddenActions, optionsStore);
34552
34552
  const { resolved: customizationResolved, hiddenActions } = custom;
34553
34553
  const aiEnabled = Boolean(ai) && pptx.isFeatureEnabled(customizationResolved, "ai");
@@ -34561,8 +34561,8 @@ var PowerPointViewer = React98.forwardRef(
34561
34561
  const handleEnableEditing = React98.useCallback(() => {
34562
34562
  setProtectedViewOverridden(true);
34563
34563
  }, []);
34564
- const readOnlyRec = chunkBOQCAJIA_js.useReadOnlyRecommendationState(content);
34565
- const compatToastsState = chunkBOQCAJIA_js.useCompatibilityToastsState();
34564
+ const readOnlyRec = chunkMCU3FDOV_js.useReadOnlyRecommendationState(content);
34565
+ const compatToastsState = chunkMCU3FDOV_js.useCompatibilityToastsState();
34566
34566
  const [notesBarHeight, setNotesBarHeight] = React98.useState(0);
34567
34567
  const runProgramNoticesState = useRunProgramNoticesState();
34568
34568
  const [collaborationReadOnly, setCollaborationReadOnly] = React98.useState(Boolean(collaboration));
@@ -34577,8 +34577,8 @@ var PowerPointViewer = React98.forwardRef(
34577
34577
  filePath
34578
34578
  });
34579
34579
  const [isShareDialogOpen, setIsShareDialogOpen] = React98.useState(false);
34580
- const { reducedMotion, toggleReducedMotion } = chunkBOQCAJIA_js.useReducedMotion();
34581
- const state = chunkBOQCAJIA_js.useViewerState({ content, canEdit });
34580
+ const { reducedMotion, toggleReducedMotion } = chunkMCU3FDOV_js.useReducedMotion();
34581
+ const state = chunkMCU3FDOV_js.useViewerState({ content, canEdit });
34582
34582
  const {
34583
34583
  containerRef,
34584
34584
  mode,
@@ -34587,6 +34587,7 @@ var PowerPointViewer = React98.forwardRef(
34587
34587
  loading,
34588
34588
  error,
34589
34589
  activeSlideIndex,
34590
+ setActiveSlideIndex,
34590
34591
  selectedElementId,
34591
34592
  selectedElementIds,
34592
34593
  templateElementsBySlideId,
@@ -34602,7 +34603,7 @@ var PowerPointViewer = React98.forwardRef(
34602
34603
  [state.recentColors, pushColor]
34603
34604
  );
34604
34605
  const themeColorMapValue = React98.useMemo(
34605
- () => state.theme?.colorScheme ? (0, chunkQO2AMZPA_js.dist_exports.buildThemeColorMap)(state.theme.colorScheme) : void 0,
34606
+ () => state.theme?.colorScheme ? (0, chunkKCOXJJBZ_js.dist_exports.buildThemeColorMap)(state.theme.colorScheme) : void 0,
34606
34607
  [state.theme?.colorScheme]
34607
34608
  );
34608
34609
  const settings = React98.useMemo(
@@ -34689,16 +34690,16 @@ var PowerPointViewer = React98.forwardRef(
34689
34690
  }
34690
34691
  }, [settings, optionsStore]);
34691
34692
  const handleClearOptionsCache2 = useAutosaveCacheMaintenance(viewerOptions);
34692
- const mobile = chunkBOQCAJIA_js.useIsMobile();
34693
+ const mobile = chunkMCU3FDOV_js.useIsMobile();
34693
34694
  const { isMobile, isTouchDevice, isVirtualKeyboardOpen } = mobile;
34694
- const resizablePanels = chunkBOQCAJIA_js.useResizablePanels();
34695
+ const resizablePanels = chunkMCU3FDOV_js.useResizablePanels();
34695
34696
  const {
34696
34697
  gridSpacingPx,
34697
34698
  visibleSlideIndexes,
34698
34699
  slideSectionGroups,
34699
34700
  masterPseudoSlide,
34700
34701
  authoredRange
34701
- } = chunkBOQCAJIA_js.useDerivedSlideState({
34702
+ } = chunkMCU3FDOV_js.useDerivedSlideState({
34702
34703
  slides,
34703
34704
  sections: state.sections,
34704
34705
  customShows: state.customShows,
@@ -34723,7 +34724,7 @@ var PowerPointViewer = React98.forwardRef(
34723
34724
  state.cropSessionRef
34724
34725
  ]
34725
34726
  );
34726
- const zoom = chunkBOQCAJIA_js.useZoomViewport({
34727
+ const zoom = chunkMCU3FDOV_js.useZoomViewport({
34727
34728
  canvasSize,
34728
34729
  selectedElements: state.selectedElements,
34729
34730
  fitPadding: props.fitPadding,
@@ -34733,7 +34734,7 @@ var PowerPointViewer = React98.forwardRef(
34733
34734
  const markDocumentDirty = React98.useCallback(() => {
34734
34735
  setIsDirty(true);
34735
34736
  }, [setIsDirty]);
34736
- const history = chunkBOQCAJIA_js.useEditorHistory({
34737
+ const history = chunkMCU3FDOV_js.useEditorHistory({
34737
34738
  slides,
34738
34739
  canvasSize,
34739
34740
  activeSlideIndex,
@@ -34759,7 +34760,7 @@ var PowerPointViewer = React98.forwardRef(
34759
34760
  setEditTemplateMode: state.setEditTemplateMode,
34760
34761
  setHeaderFooter: state.setHeaderFooter
34761
34762
  });
34762
- const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunkBOQCAJIA_js.usePresentationSetup({
34763
+ const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunkMCU3FDOV_js.usePresentationSetup({
34763
34764
  mode,
34764
34765
  slides,
34765
34766
  visibleSlideIndexes,
@@ -34801,7 +34802,40 @@ var PowerPointViewer = React98.forwardRef(
34801
34802
  onSetActiveCustomShowId: state.setActiveCustomShowId,
34802
34803
  onAddRunProgramNotice: runProgramNoticesState.addNotice
34803
34804
  });
34804
- chunkBOQCAJIA_js.useTouchGestures({
34805
+ React98.useEffect(() => {
34806
+ const root = containerRef.current;
34807
+ if (!root) {
34808
+ return;
34809
+ }
34810
+ return pptx.attachViewerHyperlinks(root, {
34811
+ getState: () => ({
34812
+ slide: slides[activeSlideIndex],
34813
+ slideCount: slides.length,
34814
+ currentSlideIndex: activeSlideIndex,
34815
+ editable: canEdit && mode !== "preview",
34816
+ presenting: mode === "present"
34817
+ }),
34818
+ goToSlide: (index) => mode === "present" ? presentation.navigateToSlide(index) : setActiveSlideIndex(index),
34819
+ onHyperlinkClick: props.onHyperlinkClick,
34820
+ confirmExternalHyperlink: (url) => !pptx.shouldConfirmExternalHyperlink(viewerOptions, url) || window.confirm(`${t("pptx.options.trust.confirmHyperlinks")}
34821
+
34822
+ ${url}`)
34823
+ });
34824
+ }, [
34825
+ containerRef,
34826
+ slides,
34827
+ activeSlideIndex,
34828
+ canEdit,
34829
+ mode,
34830
+ presentation,
34831
+ setActiveSlideIndex,
34832
+ props.onHyperlinkClick,
34833
+ viewerOptions,
34834
+ t,
34835
+ loading,
34836
+ error
34837
+ ]);
34838
+ chunkMCU3FDOV_js.useTouchGestures({
34805
34839
  targetRef: zoom.canvasViewportRef,
34806
34840
  currentScale: zoom.scale,
34807
34841
  callbacks: {
@@ -34823,7 +34857,7 @@ var PowerPointViewer = React98.forwardRef(
34823
34857
  },
34824
34858
  enabled: isTouchDevice
34825
34859
  });
34826
- const dialogs = chunkBOQCAJIA_js.useViewerDialogs({
34860
+ const dialogs = chunkMCU3FDOV_js.useViewerDialogs({
34827
34861
  mode,
34828
34862
  slides,
34829
34863
  activeSlide,
@@ -34872,7 +34906,7 @@ var PowerPointViewer = React98.forwardRef(
34872
34906
  zoom.handleZoomToFit();
34873
34907
  zoom.canvasViewportRef.current?.scrollTo({ left: 0, top: 0 });
34874
34908
  }, [mode]);
34875
- const editorOps = chunkBOQCAJIA_js.useEditorOperations({
34909
+ const editorOps = chunkMCU3FDOV_js.useEditorOperations({
34876
34910
  state,
34877
34911
  history,
34878
34912
  zoom,
@@ -34914,7 +34948,7 @@ var PowerPointViewer = React98.forwardRef(
34914
34948
  setIsEncryptedDialogOpen,
34915
34949
  handlerRef,
34916
34950
  loadVersion
34917
- } = chunkBOQCAJIA_js.useViewerIntegration({
34951
+ } = chunkMCU3FDOV_js.useViewerIntegration({
34918
34952
  transformCommittedText: (text) => pptx.applyAutoCorrect(text, viewerOptions.proofing),
34919
34953
  state,
34920
34954
  zoom,
@@ -34988,7 +35022,7 @@ var PowerPointViewer = React98.forwardRef(
34988
35022
  updateThemeFontScheme: themeHandlers.handleUpdateThemeFontScheme
34989
35023
  });
34990
35024
  const ribbonScope = useRibbonScopeToken();
34991
- const viewPreferencesSync = chunkBOQCAJIA_js.useViewPreferencesSync({
35025
+ const viewPreferencesSync = chunkMCU3FDOV_js.useViewPreferencesSync({
34992
35026
  loadVersion,
34993
35027
  viewProperties: state.viewProperties,
34994
35028
  setViewProperties: state.setViewProperties,
@@ -35026,7 +35060,7 @@ var PowerPointViewer = React98.forwardRef(
35026
35060
  },
35027
35061
  [state]
35028
35062
  );
35029
- const layoutSwitching = chunkBOQCAJIA_js.useLayoutSwitching({
35063
+ const layoutSwitching = chunkMCU3FDOV_js.useLayoutSwitching({
35030
35064
  handler: handlerRef.current,
35031
35065
  slides,
35032
35066
  activeSlideIndex,
@@ -35122,7 +35156,7 @@ var PowerPointViewer = React98.forwardRef(
35122
35156
  "data-pptx-editor-chrome": "",
35123
35157
  ...{ [pptx.RIBBON_SCOPE_ATTR]: ribbonScope },
35124
35158
  "aria-busy": loading,
35125
- className: chunkQO2AMZPA_js.cn(
35159
+ className: chunkKCOXJJBZ_js.cn(
35126
35160
  "h-full w-full bg-background text-foreground relative",
35127
35161
  ...pptx.resolveOptionRootClasses(viewerOptions, "pptx")
35128
35162
  ),
@@ -35513,8 +35547,8 @@ var PowerPointViewer = React98.forwardRef(
35513
35547
  // Nothing previously provided it, so every one of those consumers was
35514
35548
  // silently reading `DEFAULT_VIEWER_OPTIONS` forever, no matter what
35515
35549
  // the user changed in the Options dialog.
35516
- /* @__PURE__ */ jsxRuntime.jsx(ViewerOptionsProvider, { options: viewerOptions, store: optionsStore, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCustomizationContext.Provider, { value: customizationResolved, children: /* @__PURE__ */ jsxRuntime.jsx(AccountAuthContext.Provider, { value: accountAuth, children: /* @__PURE__ */ jsxRuntime.jsx(chunkBOQCAJIA_js.Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
35517
- chunkBOQCAJIA_js.CollaborationProvider,
35550
+ /* @__PURE__ */ jsxRuntime.jsx(ViewerOptionsProvider, { options: viewerOptions, store: optionsStore, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCustomizationContext.Provider, { value: customizationResolved, children: /* @__PURE__ */ jsxRuntime.jsx(AccountAuthContext.Provider, { value: accountAuth, children: /* @__PURE__ */ jsxRuntime.jsx(chunkMCU3FDOV_js.Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
35551
+ chunkMCU3FDOV_js.CollaborationProvider,
35518
35552
  {
35519
35553
  config: collaboration,
35520
35554
  canvasWidth: canvasSize.width,
@@ -35572,7 +35606,7 @@ var PowerPointViewer = React98.forwardRef(
35572
35606
  );
35573
35607
  PowerPointViewer.displayName = "PowerPointViewer";
35574
35608
  function CollaborationStatusStrip() {
35575
- const collab = chunkBOQCAJIA_js.useCollaboration();
35609
+ const collab = chunkMCU3FDOV_js.useCollaboration();
35576
35610
  if (!collab) {
35577
35611
  return null;
35578
35612
  }
@@ -35596,8 +35630,8 @@ function CollaborationDocumentSync({
35596
35630
  deckSaveState,
35597
35631
  onReadOnlyChange
35598
35632
  }) {
35599
- const collab = chunkBOQCAJIA_js.useCollaboration();
35600
- chunkBOQCAJIA_js.useCollaborationDocumentSync({
35633
+ const collab = chunkMCU3FDOV_js.useCollaboration();
35634
+ chunkMCU3FDOV_js.useCollaborationDocumentSync({
35601
35635
  collaboration: collab,
35602
35636
  slides,
35603
35637
  templateElementsBySlideId,
@@ -35616,14 +35650,14 @@ function CollaborationFollowLayer({
35616
35650
  setActiveSlideIndex,
35617
35651
  slideCount
35618
35652
  }) {
35619
- const collab = chunkBOQCAJIA_js.useCollaboration();
35620
- const { followedClientId, followUser } = chunkBOQCAJIA_js.useFollowMode({
35653
+ const collab = chunkMCU3FDOV_js.useCollaboration();
35654
+ const { followedClientId, followUser } = chunkMCU3FDOV_js.useFollowMode({
35621
35655
  collab,
35622
35656
  activeSlideIndex,
35623
35657
  setActiveSlideIndex,
35624
35658
  slideCount
35625
35659
  });
35626
- chunkBOQCAJIA_js.useBroadcastFollower({
35660
+ chunkMCU3FDOV_js.useBroadcastFollower({
35627
35661
  collab,
35628
35662
  activeSlideIndex,
35629
35663
  setActiveSlideIndex,