pptx-react-viewer 4.29.0 → 4.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +37 -36
  3. package/dist/{AiChatPanel-AK6X4NJD.js → AiChatPanel-7XZQQZ4P.js} +9 -9
  4. package/dist/AiChatPanel-7XZQQZ4P.js.br +0 -0
  5. package/dist/AiChatPanel-7XZQQZ4P.js.gz +0 -0
  6. package/dist/{AiChatPanel-6EIOUV7J.mjs → AiChatPanel-XI272UTZ.mjs} +1 -1
  7. package/dist/AiChatPanel-XI272UTZ.mjs.br +0 -0
  8. package/dist/AiChatPanel-XI272UTZ.mjs.gz +0 -0
  9. package/dist/{chunk-K3EGXT6W.js → chunk-355ICDU6.js} +262 -258
  10. package/dist/chunk-355ICDU6.js.br +0 -0
  11. package/dist/chunk-355ICDU6.js.gz +0 -0
  12. package/dist/{chunk-VI575UU6.mjs → chunk-ATGP75C4.mjs} +66 -56
  13. package/dist/chunk-ATGP75C4.mjs.br +0 -0
  14. package/dist/chunk-ATGP75C4.mjs.gz +0 -0
  15. package/dist/{chunk-EW45F35P.mjs → chunk-CHZJORUW.mjs} +19 -15
  16. package/dist/chunk-CHZJORUW.mjs.br +0 -0
  17. package/dist/chunk-CHZJORUW.mjs.gz +0 -0
  18. package/dist/{chunk-6YOFWVII.mjs → chunk-FPACF36E.mjs} +16 -15
  19. package/dist/chunk-FPACF36E.mjs.br +0 -0
  20. package/dist/chunk-FPACF36E.mjs.gz +0 -0
  21. package/dist/{chunk-7JMO6R6B.js → chunk-M2AKDETN.js} +396 -395
  22. package/dist/chunk-M2AKDETN.js.br +0 -0
  23. package/dist/chunk-M2AKDETN.js.gz +0 -0
  24. package/dist/{chunk-CTL42ZRR.js → chunk-XRFJ7TAF.js} +65 -55
  25. package/dist/chunk-XRFJ7TAF.js.br +0 -0
  26. package/dist/chunk-XRFJ7TAF.js.gz +0 -0
  27. package/dist/index.d.ts +5 -0
  28. package/dist/index.js +24 -24
  29. package/dist/index.js.br +0 -0
  30. package/dist/index.js.gz +0 -0
  31. package/dist/index.mjs +3 -3
  32. package/dist/index.mjs.br +0 -0
  33. package/dist/index.mjs.gz +0 -0
  34. package/dist/internals.js +81 -81
  35. package/dist/internals.js.br +0 -0
  36. package/dist/internals.js.gz +0 -0
  37. package/dist/internals.mjs +2 -2
  38. package/dist/internals.mjs.br +0 -0
  39. package/dist/internals.mjs.gz +0 -0
  40. package/dist/viewer/index.d.ts +5 -0
  41. package/dist/viewer/index.js +19 -19
  42. package/dist/viewer/index.js.br +0 -0
  43. package/dist/viewer/index.js.gz +0 -0
  44. package/dist/viewer/index.mjs +3 -3
  45. package/dist/viewer/index.mjs.br +0 -0
  46. package/dist/viewer/index.mjs.gz +0 -0
  47. package/package.json +3 -3
  48. package/dist/AiChatPanel-6EIOUV7J.mjs.br +0 -0
  49. package/dist/AiChatPanel-6EIOUV7J.mjs.gz +0 -0
  50. package/dist/AiChatPanel-AK6X4NJD.js.br +0 -0
  51. package/dist/AiChatPanel-AK6X4NJD.js.gz +0 -0
  52. package/dist/chunk-6YOFWVII.mjs.br +0 -0
  53. package/dist/chunk-6YOFWVII.mjs.gz +0 -0
  54. package/dist/chunk-7JMO6R6B.js.br +0 -0
  55. package/dist/chunk-7JMO6R6B.js.gz +0 -0
  56. package/dist/chunk-CTL42ZRR.js.br +0 -0
  57. package/dist/chunk-CTL42ZRR.js.gz +0 -0
  58. package/dist/chunk-EW45F35P.mjs.br +0 -0
  59. package/dist/chunk-EW45F35P.mjs.gz +0 -0
  60. package/dist/chunk-K3EGXT6W.js.br +0 -0
  61. package/dist/chunk-K3EGXT6W.js.gz +0 -0
  62. package/dist/chunk-VI575UU6.mjs.br +0 -0
  63. package/dist/chunk-VI575UU6.mjs.gz +0 -0
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkK3EGXT6W_js = require('./chunk-K3EGXT6W.js');
4
- var chunkCTL42ZRR_js = require('./chunk-CTL42ZRR.js');
3
+ var chunk355ICDU6_js = require('./chunk-355ICDU6.js');
4
+ var chunkXRFJ7TAF_js = require('./chunk-XRFJ7TAF.js');
5
5
  var pptx = require('ooxml-ui/pptx');
6
6
  var React97 = 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
- chunkK3EGXT6W_js.StaticElementRenderer,
310
+ chunk355ICDU6_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 } = chunkK3EGXT6W_js.useModalDismissDrag(onClose);
379
+ const { panelStyle, handlers: dragHandlers } = chunk355ICDU6_js.useModalDismissDrag(onClose);
380
380
  const [selected, setSelected] = React97.useState(null);
381
381
  const dialogRef = React97.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: chunkCTL42ZRR_js.cn(
462
+ className: chunkXRFJ7TAF_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 } = chunkK3EGXT6W_js.useToolbarVisibility(p.hiddenActions);
726
+ const { isHidden } = chunk355ICDU6_js.useToolbarVisibility(p.hiddenActions);
727
727
  const { onGroupElements, onUngroupElement, onUpdateElementStyle } = p;
728
728
  const controls = React97.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
- chunkK3EGXT6W_js.playAnimationSound(url);
1059
+ chunk355ICDU6_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.29.0" ;
1218
+ const version = "4.30.1" ;
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: chunkCTL42ZRR_js.cn(
1258
+ className: chunkXRFJ7TAF_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] = React97.useState("");
1480
1480
  const [recent, setRecent] = React97.useState([]);
1481
- const { isHidden } = chunkK3EGXT6W_js.useToolbarVisibility(p.hiddenActions);
1481
+ const { isHidden } = chunk355ICDU6_js.useToolbarVisibility(p.hiddenActions);
1482
1482
  const exportHidden = isHidden("export");
1483
1483
  React97.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: chunkCTL42ZRR_js.cn("fixed z-50", className),
1711
+ className: chunkXRFJ7TAF_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: chunkCTL42ZRR_js.cn(
1737
+ className: chunkXRFJ7TAF_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
- chunkK3EGXT6W_js.StaticElementRenderer,
1811
+ chunk355ICDU6_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: chunkCTL42ZRR_js.cn(
2373
+ className: chunkXRFJ7TAF_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 = React97.useContext(chunkK3EGXT6W_js.ViewerOptionsStoreContext);
2428
+ const supplied = React97.useContext(chunk355ICDU6_js.ViewerOptionsStoreContext);
2429
2429
  const fallback = React97.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 } = chunkK3EGXT6W_js.useToolbarVisibility(p.hiddenActions);
2462
+ const { isHidden } = chunk355ICDU6_js.useToolbarVisibility(p.hiddenActions);
2463
2463
  const [showsOpen, setShowsOpen] = React97.useState(false);
2464
2464
  const showsRef = React97.useRef(null);
2465
2465
  React97.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, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(element)) {
2543
+ if (!element || !(0, chunkXRFJ7TAF_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, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(element)) {
2564
+ if ((0, chunkXRFJ7TAF_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, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(element)) {
2577
+ if (element && (0, chunkXRFJ7TAF_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, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(element)) {
2593
+ if (element && (0, chunkXRFJ7TAF_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 = React97.useCallback(() => {
2830
- if (!element || !(0, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(element)) {
2830
+ if (!element || !(0, chunkXRFJ7TAF_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, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(p.selectedElement);
2853
+ const isTextEl = hasSel && p.selectedElement !== null && (0, chunkXRFJ7TAF_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, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(p.selectedElement)) {
2863
+ if ((0, chunkXRFJ7TAF_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, chunkCTL42ZRR_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, chunkCTL42ZRR_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, chunkCTL42ZRR_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, chunkXRFJ7TAF_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, chunkXRFJ7TAF_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, chunkXRFJ7TAF_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, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(p.selectedElement) ? pptx.textFontSizePtToPx(size) : size
2886
+ fontSize: p.selectedElement && (0, chunkXRFJ7TAF_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 = React97.useRef(null);
2995
2995
  const { t } = reactI18next.useTranslation();
2996
- const { dragY, dragging, handlers } = chunkK3EGXT6W_js.useSheetDismissDrag(onClose);
2996
+ const { dragY, dragging, handlers } = chunk355ICDU6_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: chunkCTL42ZRR_js.cn(
3020
+ className: chunkXRFJ7TAF_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] = React97.useState("home");
3084
- const { isTabVisible } = chunkK3EGXT6W_js.useToolbarVisibility(props.hiddenActions);
3084
+ const { isTabVisible } = chunk355ICDU6_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: chunkCTL42ZRR_js.cn(
3098
+ className: chunkXRFJ7TAF_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] = React97.useState(false);
3365
- const { isHidden } = chunkK3EGXT6W_js.useToolbarVisibility(props.hiddenActions);
3365
+ const { isHidden } = chunk355ICDU6_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, chunkCTL42ZRR_js.dist_exports.hasShapeProperties)(p.selectedElement) ? p.selectedElement.shapeStyle : void 0;
3430
+ const style = p.selectedElement && (0, chunkXRFJ7TAF_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 = React97.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 = chunkK3EGXT6W_js.useViewerOptionsContext();
3533
+ const viewerOptions = chunk355ICDU6_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
- chunkCTL42ZRR_js.TOOLBAR_SECTIONS.filter((s) => p.isTabVisible(s.id)).map((s) => {
3541
+ chunkXRFJ7TAF_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: chunkCTL42ZRR_js.cn(
3551
+ className: chunkXRFJ7TAF_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: chunkCTL42ZRR_js.cn(
3572
+ className: chunkXRFJ7TAF_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 = chunkK3EGXT6W_js.useCollaboration();
3590
+ const collab = chunk355ICDU6_js.useCollaboration();
3591
3591
  const isCollaborating = collab && collab.status === "connected";
3592
- const { isHidden } = chunkK3EGXT6W_js.useToolbarVisibility(p.hiddenActions);
3592
+ const { isHidden } = chunk355ICDU6_js.useToolbarVisibility(p.hiddenActions);
3593
3593
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 pr-1", children: [
3594
3594
  p.onEnterRehearsalMode && !isHidden("record") && /* @__PURE__ */ jsxRuntime.jsxs(
3595
3595
  "button",
@@ -3610,7 +3610,7 @@ function TabRowActions(p) {
3610
3610
  {
3611
3611
  type: "button",
3612
3612
  onClick: p.onOpenShareDialog,
3613
- className: chunkCTL42ZRR_js.cn(
3613
+ className: chunkXRFJ7TAF_js.cn(
3614
3614
  "relative inline-flex items-center gap-1 px-2.5 py-1 rounded-sm text-[11px] font-medium transition-colors whitespace-nowrap",
3615
3615
  isCollaborating ? "bg-green-600 hover:bg-green-500 text-white" : "bg-primary hover:bg-primary/90 text-white"
3616
3616
  ),
@@ -3626,7 +3626,7 @@ function TabRowActions(p) {
3626
3626
  }
3627
3627
  function TitleBarElement(p) {
3628
3628
  const { t } = reactI18next.useTranslation();
3629
- const options = chunkK3EGXT6W_js.useViewerOptionsContext();
3629
+ const options = chunk355ICDU6_js.useViewerOptionsContext();
3630
3630
  const customization = useViewerCustomizationContext();
3631
3631
  const ref = React97.useRef(null);
3632
3632
  const stripVisible = options.quickAccess.visible && pptx.isPanelVisible(customization, "quickAccessToolbar");
@@ -3699,7 +3699,7 @@ function PresentDropdown({
3699
3699
  {
3700
3700
  type: "button",
3701
3701
  onClick: onPresent,
3702
- className: chunkCTL42ZRR_js.cn(
3702
+ className: chunkXRFJ7TAF_js.cn(
3703
3703
  "px-2 py-1 transition-colors",
3704
3704
  isActive ? "bg-primary text-white" : "hover:bg-accent text-foreground"
3705
3705
  ),
@@ -3712,7 +3712,7 @@ function PresentDropdown({
3712
3712
  {
3713
3713
  type: "button",
3714
3714
  onClick: () => setOpen((prev) => !prev),
3715
- className: chunkCTL42ZRR_js.cn(
3715
+ className: chunkXRFJ7TAF_js.cn(
3716
3716
  "inline-flex items-center px-1 transition-colors border-l border-border",
3717
3717
  open ? "bg-primary text-white" : "hover:bg-accent text-foreground"
3718
3718
  ),
@@ -3915,7 +3915,7 @@ function OverflowMenu(p) {
3915
3915
  {
3916
3916
  type: "button",
3917
3917
  onClick: () => p.onSetOverflowMenuOpen(!p.isOverflowMenuOpen),
3918
- className: chunkCTL42ZRR_js.cn(
3918
+ className: chunkXRFJ7TAF_js.cn(
3919
3919
  "p-1.5 rounded transition-colors",
3920
3920
  p.isOverflowMenuOpen ? "bg-primary/80 text-white" : "bg-muted hover:bg-accent"
3921
3921
  ),
@@ -3962,7 +3962,7 @@ function ToolbarPrimaryRow(p) {
3962
3962
  onToggleSidebar,
3963
3963
  onToggleInspector
3964
3964
  } = p;
3965
- const collab = chunkK3EGXT6W_js.useCollaboration();
3965
+ const collab = chunk355ICDU6_js.useCollaboration();
3966
3966
  const customization = useViewerCustomizationContext();
3967
3967
  const showSlidesToggle = pptx.isPanelVisible(customization, "slidesPane");
3968
3968
  const showInspectorToggle = pptx.isPanelVisible(customization, "inspector");
@@ -3981,7 +3981,7 @@ function ToolbarPrimaryRow(p) {
3981
3981
  {
3982
3982
  type: "button",
3983
3983
  onClick: onToggleSidebar,
3984
- className: chunkCTL42ZRR_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
3984
+ className: chunkXRFJ7TAF_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
3985
3985
  title: t("pptx.toolbar.toggleSlidesPanel"),
3986
3986
  "aria-label": t("pptx.toolbar.toggleSlidesPanel"),
3987
3987
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelLeft, { className: ic })
@@ -3993,7 +3993,7 @@ function ToolbarPrimaryRow(p) {
3993
3993
  {
3994
3994
  type: "button",
3995
3995
  onClick: p.onToggleComments,
3996
- className: chunkCTL42ZRR_js.cn(
3996
+ className: chunkXRFJ7TAF_js.cn(
3997
3997
  qab,
3998
3998
  "relative max-md:hidden",
3999
3999
  p.isCommentsPanelOpen ? "text-foreground" : "text-muted-foreground"
@@ -4060,7 +4060,7 @@ function ToolbarPrimaryRow(p) {
4060
4060
  {
4061
4061
  type: "button",
4062
4062
  onClick: onToggleInspector,
4063
- className: chunkCTL42ZRR_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
4063
+ className: chunkXRFJ7TAF_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
4064
4064
  title: t("pptx.toolbar.toggleInspector"),
4065
4065
  "aria-label": t("pptx.toolbar.toggleInspector"),
4066
4066
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelRight, { className: ic })
@@ -4071,7 +4071,7 @@ function ToolbarPrimaryRow(p) {
4071
4071
  {
4072
4072
  type: "button",
4073
4073
  onClick: p.onToggleAiPanel,
4074
- className: chunkCTL42ZRR_js.cn(qab, p.isAiPanelOpen ? "text-primary" : "text-muted-foreground"),
4074
+ className: chunkXRFJ7TAF_js.cn(qab, p.isAiPanelOpen ? "text-primary" : "text-muted-foreground"),
4075
4075
  title: t("pptx.toolbar.toggleAiAssistant"),
4076
4076
  "aria-label": t("pptx.toolbar.toggleAiAssistant"),
4077
4077
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSparkles, { className: ic })
@@ -4082,7 +4082,7 @@ function ToolbarPrimaryRow(p) {
4082
4082
  {
4083
4083
  type: "button",
4084
4084
  onClick: p.onOpenSettings ?? p.onToggleShortcuts,
4085
- className: chunkCTL42ZRR_js.cn(qab, "text-muted-foreground"),
4085
+ className: chunkXRFJ7TAF_js.cn(qab, "text-muted-foreground"),
4086
4086
  title: t("pptx.toolbar.settingsShortcuts"),
4087
4087
  "aria-label": t("pptx.toolbar.settings"),
4088
4088
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSettings, { className: ics })
@@ -4279,8 +4279,8 @@ function ToolbarLateTabs({
4279
4279
  function Toolbar(p) {
4280
4280
  const { mode, isNarrowViewport, isCompactToolbarOpen, toolbarSection, onSetToolbarSection } = p;
4281
4281
  const { t } = reactI18next.useTranslation();
4282
- const { isTabVisible } = chunkK3EGXT6W_js.useToolbarVisibility(p.hiddenActions);
4283
- const viewerOptions = chunkK3EGXT6W_js.useViewerOptionsContext();
4282
+ const { isTabVisible } = chunk355ICDU6_js.useToolbarVisibility(p.hiddenActions);
4283
+ const viewerOptions = chunk355ICDU6_js.useViewerOptionsContext();
4284
4284
  const customization = useViewerCustomizationContext();
4285
4285
  const belowInput = React97.useMemo(
4286
4286
  () => ({
@@ -4362,7 +4362,7 @@ function Toolbar(p) {
4362
4362
  {
4363
4363
  type: "button",
4364
4364
  onClick: p.onToggleCompactToolbar,
4365
- className: chunkCTL42ZRR_js.cn(
4365
+ className: chunkXRFJ7TAF_js.cn(
4366
4366
  "px-2 py-1 rounded text-[11px] transition-colors mr-1",
4367
4367
  isCompactToolbarOpen ? "bg-primary/80 text-white" : "text-muted-foreground hover:text-foreground"
4368
4368
  ),
@@ -4388,7 +4388,7 @@ function Toolbar(p) {
4388
4388
  {
4389
4389
  ref: attachOverflow,
4390
4390
  "data-pptx-chrome": "ribbon-content",
4391
- className: chunkCTL42ZRR_js.cn(
4391
+ className: chunkXRFJ7TAF_js.cn(
4392
4392
  // Plain controls stay compact; labelled RibbonGroups opt into stretching.
4393
4393
  // `RibbonGroupScope` wraps controls in a `display: contents` div, so its
4394
4394
  // children are this row's flex items too and must not shrink (a shrunk
@@ -5241,7 +5241,7 @@ function DrawingOverlaySvg({
5241
5241
  onPointerDown,
5242
5242
  onPointerMove,
5243
5243
  onPointerUp,
5244
- children: isStrokeActive && liveStrokeView ? chunkK3EGXT6W_js.renderStrokeView(liveStrokeView, true, void 0, "ink-live-preview") : isStrokeActive && liveStrokeD && /* @__PURE__ */ jsxRuntime.jsx(
5244
+ children: isStrokeActive && liveStrokeView ? chunk355ICDU6_js.renderStrokeView(liveStrokeView, true, void 0, "ink-live-preview") : isStrokeActive && liveStrokeD && /* @__PURE__ */ jsxRuntime.jsx(
5245
5245
  "path",
5246
5246
  {
5247
5247
  d: liveStrokeD,
@@ -5256,7 +5256,7 @@ function DrawingOverlaySvg({
5256
5256
  }
5257
5257
  );
5258
5258
  }
5259
- function GridOverlay({ canvasSize, gridSpacingPx = chunkCTL42ZRR_js.GRID_SIZE, visible }) {
5259
+ function GridOverlay({ canvasSize, gridSpacingPx = chunkXRFJ7TAF_js.GRID_SIZE, visible }) {
5260
5260
  const spacing = Math.max(gridSpacingPx, 2);
5261
5261
  const patternId = React97.useMemo(() => `grid-dot-pattern-${Math.random().toString(36).slice(2, 8)}`, []);
5262
5262
  if (!visible) {
@@ -5820,7 +5820,7 @@ function PictureCropOverlay({
5820
5820
  };
5821
5821
  };
5822
5822
  const { ghost, frame, handles } = overlay;
5823
- const src = chunkK3EGXT6W_js.imgSrc(element);
5823
+ const src = chunk355ICDU6_js.imgSrc(element);
5824
5824
  return /* @__PURE__ */ jsxRuntime.jsxs(
5825
5825
  "div",
5826
5826
  {
@@ -6233,10 +6233,10 @@ function SelectionHandleOverlay({
6233
6233
  position: "absolute",
6234
6234
  left: element.x,
6235
6235
  top: element.y,
6236
- width: Math.max(element.width, chunkCTL42ZRR_js.MIN_ELEMENT_SIZE),
6237
- height: Math.max(element.height, chunkCTL42ZRR_js.MIN_ELEMENT_SIZE),
6238
- ["--pptx-selection-width"]: `${Math.max(element.width, chunkCTL42ZRR_js.MIN_ELEMENT_SIZE)}px`,
6239
- ["--pptx-selection-height"]: `${Math.max(element.height, chunkCTL42ZRR_js.MIN_ELEMENT_SIZE)}px`,
6236
+ width: Math.max(element.width, chunkXRFJ7TAF_js.MIN_ELEMENT_SIZE),
6237
+ height: Math.max(element.height, chunkXRFJ7TAF_js.MIN_ELEMENT_SIZE),
6238
+ ["--pptx-selection-width"]: `${Math.max(element.width, chunkXRFJ7TAF_js.MIN_ELEMENT_SIZE)}px`,
6239
+ ["--pptx-selection-height"]: `${Math.max(element.height, chunkXRFJ7TAF_js.MIN_ELEMENT_SIZE)}px`,
6240
6240
  // Every slide element carries an explicit numeric `zIndex` (see
6241
6241
  // `getContainerStyle`), so a sibling with no z-index at all paints
6242
6242
  // at the CSS "z-index: 0" level regardless of DOM order: any
@@ -6248,7 +6248,7 @@ function SelectionHandleOverlay({
6248
6248
  // (marquee z-50, connector overlay z-55/56) to match, well clear of
6249
6249
  // any realistic per-slide element count.
6250
6250
  zIndex: 58,
6251
- transform: chunkCTL42ZRR_js.getElementTransform(element),
6251
+ transform: chunkXRFJ7TAF_js.getElementTransform(element),
6252
6252
  transformOrigin: "center",
6253
6253
  // Transparent everywhere a handle button is not, so a click that
6254
6254
  // misses every handle still reaches the shape (or whatever is
@@ -6260,14 +6260,14 @@ function SelectionHandleOverlay({
6260
6260
  onDoubleClick: (e) => onDoubleClick(element.id, e),
6261
6261
  onContextMenu: (e) => onContextMenu(element.id, e),
6262
6262
  children: /* @__PURE__ */ jsxRuntime.jsx(
6263
- chunkK3EGXT6W_js.ResizeHandles,
6263
+ chunk355ICDU6_js.ResizeHandles,
6264
6264
  {
6265
6265
  elementId: element.id,
6266
6266
  adjustmentHandles,
6267
6267
  onResizePointerDown,
6268
6268
  onAdjustmentPointerDown,
6269
6269
  rotation: element.rotation,
6270
- nonRotationTransform: chunkCTL42ZRR_js.getElementTransformWithoutRotation(element),
6270
+ nonRotationTransform: chunkXRFJ7TAF_js.getElementTransformWithoutRotation(element),
6271
6271
  onRotate: allow.rotatable ? onRotate : void 0,
6272
6272
  forcePointerEvents: true
6273
6273
  }
@@ -6970,7 +6970,7 @@ function SlideCanvas(props) {
6970
6970
  props.registerInlineEditReader
6971
6971
  ]
6972
6972
  );
6973
- return /* @__PURE__ */ jsxRuntime.jsx(chunkK3EGXT6W_js.InlineCollaborationContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(SlideCanvasContent, { ...props }) });
6973
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk355ICDU6_js.InlineCollaborationContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(SlideCanvasContent, { ...props }) });
6974
6974
  }
6975
6975
  function SlideCanvasContent({
6976
6976
  imagePaste,
@@ -7211,6 +7211,8 @@ function SlideCanvasContent({
7211
7211
  width: canvasSize.width,
7212
7212
  height: canvasSize.height,
7213
7213
  transform: `scale(${zoom.editorScale})`,
7214
+ // One device pixel in slide px: thin strokes stay visible on screen.
7215
+ ...pptx.deviceStrokeStageStyle(zoom.editorScale),
7214
7216
  transformOrigin: "top left",
7215
7217
  ["--pptx-handle-inverse-scale"]: 1 / zoom.editorScale,
7216
7218
  // Motion-path keyframes translate by a fraction of the SLIDE, so
@@ -7237,7 +7239,7 @@ function SlideCanvasContent({
7237
7239
  onPointerMove: handleStagePointerMove,
7238
7240
  onPointerUp: handleStagePointerUp,
7239
7241
  children: [
7240
- /* @__PURE__ */ jsxRuntime.jsx(chunkK3EGXT6W_js.SlideBackgroundImageLayer, { slide: activeSlide }),
7242
+ /* @__PURE__ */ jsxRuntime.jsx(chunk355ICDU6_js.SlideBackgroundImageLayer, { slide: activeSlide }),
7241
7243
  presentationKeyframesCss && /* @__PURE__ */ jsxRuntime.jsx("style", { children: presentationKeyframesCss }),
7242
7244
  /* @__PURE__ */ jsxRuntime.jsx(GridOverlay, { canvasSize, gridSpacingPx, visible: showGrid }),
7243
7245
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -7249,7 +7251,7 @@ function SlideCanvasContent({
7249
7251
  }
7250
7252
  ),
7251
7253
  templateElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
7252
- chunkK3EGXT6W_js.ElementRenderer,
7254
+ chunk355ICDU6_js.ElementRenderer,
7253
7255
  {
7254
7256
  element,
7255
7257
  activeSlide,
@@ -7271,7 +7273,7 @@ function SlideCanvasContent({
7271
7273
  ),
7272
7274
  renderInk: false,
7273
7275
  renderGroups: true,
7274
- adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkCTL42ZRR_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
7276
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkXRFJ7TAF_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
7275
7277
  onResizePointerDown: stableResizePointerDown,
7276
7278
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
7277
7279
  onRotate: stableRotate,
@@ -7293,7 +7295,7 @@ function SlideCanvasContent({
7293
7295
  `tpl-${element.id}`
7294
7296
  )),
7295
7297
  activeSlide?.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
7296
- chunkK3EGXT6W_js.ElementRenderer,
7298
+ chunk355ICDU6_js.ElementRenderer,
7297
7299
  {
7298
7300
  element,
7299
7301
  activeSlide,
@@ -7315,7 +7317,7 @@ function SlideCanvasContent({
7315
7317
  ),
7316
7318
  renderInk: true,
7317
7319
  renderGroups: true,
7318
- adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkCTL42ZRR_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
7320
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkXRFJ7TAF_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
7319
7321
  onResizePointerDown: stableResizePointerDown,
7320
7322
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
7321
7323
  onRotate: stableRotate,
@@ -7359,7 +7361,7 @@ function SlideCanvasContent({
7359
7361
  editingMember && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7360
7362
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: `[data-element-id="${cssAttr(editingMember.parentId)}"] [data-element-id="${cssAttr(editingMember.member.id)}"]{visibility:hidden}` }),
7361
7363
  /* @__PURE__ */ jsxRuntime.jsx(
7362
- chunkK3EGXT6W_js.ElementRenderer,
7364
+ chunk355ICDU6_js.ElementRenderer,
7363
7365
  {
7364
7366
  element: editingMember.member,
7365
7367
  activeSlide,
@@ -7394,11 +7396,11 @@ function SlideCanvasContent({
7394
7396
  `group-member-edit-${editingMember.member.id}`
7395
7397
  )
7396
7398
  ] }),
7397
- selectedElement && selectedElement.id !== cropElement?.id && pptx.shouldShowElementHandles(isEditableCanvas, true, selectedElementIdSet.size) && !chunkCTL42ZRR_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
7399
+ selectedElement && selectedElement.id !== cropElement?.id && pptx.shouldShowElementHandles(isEditableCanvas, true, selectedElementIdSet.size) && !chunkXRFJ7TAF_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
7398
7400
  SelectionHandleOverlay,
7399
7401
  {
7400
7402
  element: selectedElement,
7401
- adjustmentHandles: chunkCTL42ZRR_js.getShapeAdjustmentHandleDescriptors(selectedElement),
7403
+ adjustmentHandles: chunkXRFJ7TAF_js.getShapeAdjustmentHandleDescriptors(selectedElement),
7402
7404
  onResizePointerDown: stableResizePointerDown,
7403
7405
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
7404
7406
  onRotate: stableRotate,
@@ -7512,7 +7514,7 @@ function LoadingState({ className }) {
7512
7514
  role: "status",
7513
7515
  "aria-live": "polite",
7514
7516
  "aria-atomic": "true",
7515
- className: chunkCTL42ZRR_js.cn(
7517
+ className: chunkXRFJ7TAF_js.cn(
7516
7518
  "h-full w-full flex items-center justify-center text-muted-foreground",
7517
7519
  className
7518
7520
  ),
@@ -7535,7 +7537,7 @@ function ErrorState({ className, error }) {
7535
7537
  {
7536
7538
  role: "alert",
7537
7539
  "aria-live": "assertive",
7538
- className: chunkCTL42ZRR_js.cn(
7540
+ className: chunkXRFJ7TAF_js.cn(
7539
7541
  "h-full w-full flex items-center justify-center p-6 text-center text-red-400",
7540
7542
  className
7541
7543
  ),
@@ -7566,7 +7568,7 @@ function ShortcutPanel({ isOpen, onClose }) {
7566
7568
  }
7567
7569
  )
7568
7570
  ] }),
7569
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunkCTL42ZRR_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
7571
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunkXRFJ7TAF_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
7570
7572
  "div",
7571
7573
  {
7572
7574
  className: "flex items-center justify-between gap-3 rounded bg-muted/80 px-2 py-1.5",
@@ -7626,14 +7628,14 @@ function AccessibilityPanel({
7626
7628
  "aria-label": t("pptx.accessibility.reduceMotion"),
7627
7629
  "aria-checked": reducedMotion ?? false,
7628
7630
  onClick: onToggleReducedMotion,
7629
- className: chunkCTL42ZRR_js.cn(
7631
+ className: chunkXRFJ7TAF_js.cn(
7630
7632
  "relative inline-flex h-5 w-9 items-center rounded-full transition-colors",
7631
7633
  reducedMotion ? "bg-primary" : "bg-muted-foreground/30"
7632
7634
  ),
7633
7635
  children: /* @__PURE__ */ jsxRuntime.jsx(
7634
7636
  "span",
7635
7637
  {
7636
- className: chunkCTL42ZRR_js.cn(
7638
+ className: chunkXRFJ7TAF_js.cn(
7637
7639
  "inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",
7638
7640
  reducedMotion ? "translate-x-4" : "translate-x-0.5"
7639
7641
  )
@@ -7652,7 +7654,7 @@ function AccessibilityPanel({
7652
7654
  "div",
7653
7655
  {
7654
7656
  role: "listitem",
7655
- className: chunkCTL42ZRR_js.cn(
7657
+ className: chunkXRFJ7TAF_js.cn(
7656
7658
  "flex items-start gap-2 rounded px-2 py-1.5 text-xs",
7657
7659
  /* Severity-based background and text colouring */
7658
7660
  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"
@@ -7812,7 +7814,7 @@ function ResizeHandle({
7812
7814
  {
7813
7815
  role: "separator",
7814
7816
  "aria-orientation": direction,
7815
- className: chunkCTL42ZRR_js.cn(
7817
+ className: chunkXRFJ7TAF_js.cn(
7816
7818
  // Outer container: generous hit area for easy clicking.
7817
7819
  // The visible indicator is rendered via the inner pseudo-element (::after).
7818
7820
  "relative flex-shrink-0 z-20 group",
@@ -7823,7 +7825,7 @@ function ResizeHandle({
7823
7825
  children: /* @__PURE__ */ jsxRuntime.jsx(
7824
7826
  "div",
7825
7827
  {
7826
- className: chunkCTL42ZRR_js.cn(
7828
+ className: chunkXRFJ7TAF_js.cn(
7827
7829
  "absolute transition-colors",
7828
7830
  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"
7829
7831
  )
@@ -7842,14 +7844,14 @@ function SlideThumbnailImpl({
7842
7844
  }) {
7843
7845
  const safeCanvasWidth = Math.max(canvasSize.width, 1);
7844
7846
  const safeCanvasHeight = Math.max(canvasSize.height, 1);
7845
- const width = previewWidth ?? chunkCTL42ZRR_js.SLIDE_NAV_THUMBNAIL_WIDTH;
7847
+ const width = previewWidth ?? chunkXRFJ7TAF_js.SLIDE_NAV_THUMBNAIL_WIDTH;
7846
7848
  const scale = width / safeCanvasWidth;
7847
7849
  const previewHeight = pptx.editorThumbnailHeight(safeCanvasWidth, safeCanvasHeight, width);
7848
7850
  const previewElements = pptx.buildPreviewElements(slide, templateElements);
7849
7851
  const slideFieldContext = pptx.deriveSlideFieldContext(fieldContext, slide);
7850
7852
  const { t } = reactI18next.useTranslation();
7851
7853
  const transitionLabel = slide.transition ? (() => {
7852
- const opt = chunkCTL42ZRR_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
7854
+ const opt = chunkXRFJ7TAF_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
7853
7855
  return opt ? t(opt.i18nKey) : slide.transition.type;
7854
7856
  })() : void 0;
7855
7857
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -7871,10 +7873,11 @@ function SlideThumbnailImpl({
7871
7873
  width: safeCanvasWidth,
7872
7874
  height: safeCanvasHeight,
7873
7875
  transform: `scale(${scale})`,
7874
- transformOrigin: "top left"
7876
+ transformOrigin: "top left",
7877
+ ...pptx.deviceStrokeStageStyle(scale)
7875
7878
  },
7876
7879
  children: [
7877
- /* @__PURE__ */ jsxRuntime.jsx(chunkK3EGXT6W_js.SlideBackgroundImageLayer, { slide }),
7880
+ /* @__PURE__ */ jsxRuntime.jsx(chunk355ICDU6_js.SlideBackgroundImageLayer, { slide }),
7878
7881
  slide.transition && slide.transition.type !== "none" && slide.transition.type !== "cut" && /* @__PURE__ */ jsxRuntime.jsx(
7879
7882
  "div",
7880
7883
  {
@@ -7884,7 +7887,7 @@ function SlideThumbnailImpl({
7884
7887
  }
7885
7888
  ),
7886
7889
  previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
7887
- chunkK3EGXT6W_js.StaticElementRenderer,
7890
+ chunk355ICDU6_js.StaticElementRenderer,
7888
7891
  {
7889
7892
  element,
7890
7893
  activeSlide: slide,
@@ -8440,7 +8443,7 @@ function SectionHeader({
8440
8443
  /* @__PURE__ */ jsxRuntime.jsx(
8441
8444
  lu.LuChevronDown,
8442
8445
  {
8443
- className: chunkCTL42ZRR_js.cn(
8446
+ className: chunkXRFJ7TAF_js.cn(
8444
8447
  "h-3 w-3 flex-shrink-0 transition-transform",
8445
8448
  isCollapsed ? "-rotate-90" : "rotate-0"
8446
8449
  )
@@ -8591,7 +8594,7 @@ function LazyThumbnailInner({
8591
8594
  }
8592
8595
  var LazyThumbnail = React97__default.default.memo(LazyThumbnailInner);
8593
8596
  function declaredSectionFacts(groups, sectionId) {
8594
- const declared = groups.filter((group) => group.id !== chunkCTL42ZRR_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunkCTL42ZRR_js.UNGROUPED_SECTION_ID).map((group) => group.id);
8597
+ const declared = groups.filter((group) => group.id !== chunkXRFJ7TAF_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunkXRFJ7TAF_js.UNGROUPED_SECTION_ID).map((group) => group.id);
8595
8598
  return {
8596
8599
  isDeclared: declared.includes(sectionId),
8597
8600
  index: declared.indexOf(sectionId),
@@ -8676,7 +8679,7 @@ function SlideItemInner({
8676
8679
  "data-pptx-chrome": "slide-row",
8677
8680
  "aria-describedby": cue.labelId,
8678
8681
  "data-pptx-slide-hidden": cue.marker,
8679
- className: chunkCTL42ZRR_js.cn(
8682
+ className: chunkXRFJ7TAF_js.cn(
8680
8683
  "group relative flex w-full items-center gap-1 cursor-pointer border-0 bg-transparent py-0.5 px-1 text-left transition-all",
8681
8684
  isActive && "bg-accent/40 before:absolute before:left-0 before:top-1 before:bottom-1 before:w-[3px] before:bg-primary before:rounded-r",
8682
8685
  isSelected && !isActive && "bg-accent/20 ring-1 ring-inset ring-primary/50",
@@ -8698,7 +8701,7 @@ function SlideItemInner({
8698
8701
  /* @__PURE__ */ jsxRuntime.jsx(
8699
8702
  "span",
8700
8703
  {
8701
- className: chunkCTL42ZRR_js.cn(
8704
+ className: chunkXRFJ7TAF_js.cn(
8702
8705
  "text-[10px] tabular-nums text-right select-none w-full",
8703
8706
  isActive ? "text-primary font-medium" : "text-muted-foreground"
8704
8707
  ),
@@ -8721,7 +8724,7 @@ function SlideItemInner({
8721
8724
  /* @__PURE__ */ jsxRuntime.jsxs(
8722
8725
  "div",
8723
8726
  {
8724
- className: chunkCTL42ZRR_js.cn(
8727
+ className: chunkXRFJ7TAF_js.cn(
8725
8728
  "relative shrink-0 overflow-hidden border transition-colors bg-white",
8726
8729
  isActive ? "border-primary/60" : "border-transparent group-hover:border-border/40"
8727
8730
  ),
@@ -8920,7 +8923,7 @@ function SlidesPaneSidebar({
8920
8923
  tableStyleContext
8921
8924
  }) {
8922
8925
  const { t } = reactI18next.useTranslation();
8923
- const collab = chunkK3EGXT6W_js.useCollaboration();
8926
+ const collab = chunk355ICDU6_js.useCollaboration();
8924
8927
  const slideRefs = React97.useRef(/* @__PURE__ */ new Map());
8925
8928
  const renameInputRef = React97.useRef(null);
8926
8929
  const slidePresenceMap = React97.useMemo(() => {
@@ -8945,7 +8948,7 @@ function SlidesPaneSidebar({
8945
8948
  () => estimateSlideItemHeight(canvasSize.width, canvasSize.height, previewWidth),
8946
8949
  [canvasSize.width, canvasSize.height, previewWidth]
8947
8950
  );
8948
- const showSectionHeaders = sectionGroups.some((group) => group.id !== chunkCTL42ZRR_js.DEFAULT_SECTION_GROUP_ID);
8951
+ const showSectionHeaders = sectionGroups.some((group) => group.id !== chunkXRFJ7TAF_js.DEFAULT_SECTION_GROUP_ID);
8949
8952
  const {
8950
8953
  collapsedSections,
8951
8954
  renamingSectionId,
@@ -9015,7 +9018,7 @@ function SlidesPaneSidebar({
9015
9018
  [sectionGroups, showSectionHeaders, effectiveCollapsed]
9016
9019
  );
9017
9020
  const shouldVirtualize = slides.length >= VIRTUALIZATION_THRESHOLD;
9018
- const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunkK3EGXT6W_js.useVirtualizedSlides({
9021
+ const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunk355ICDU6_js.useVirtualizedSlides({
9019
9022
  totalItems: shouldVirtualize ? flatItems.length : 0,
9020
9023
  itemHeight: estimatedItemHeight
9021
9024
  });
@@ -9272,7 +9275,7 @@ function HandoutMasterPanel({
9272
9275
  {
9273
9276
  type: "button",
9274
9277
  "aria-pressed": slidesPerPage === count,
9275
- className: chunkCTL42ZRR_js.cn(
9278
+ className: chunkXRFJ7TAF_js.cn(
9276
9279
  "px-2 py-1.5 rounded text-[11px] font-medium transition-colors",
9277
9280
  slidesPerPage === count ? "bg-primary text-white" : "bg-accent/50 text-muted-foreground hover:bg-accent/70 hover:text-foreground"
9278
9281
  ),
@@ -9390,7 +9393,7 @@ function SlideMastersList({
9390
9393
  ref: isMasterActive ? activeRef : void 0,
9391
9394
  "aria-pressed": isMasterActive,
9392
9395
  "aria-label": master.name || t("pptx.master.master"),
9393
- className: chunkCTL42ZRR_js.cn(
9396
+ className: chunkXRFJ7TAF_js.cn(
9394
9397
  "group relative block w-full cursor-pointer rounded-lg border-2 p-1 text-left transition-all",
9395
9398
  isMasterActive ? "border-amber-500 bg-amber-500/10" : "border-border bg-background/40 hover:border-border"
9396
9399
  ),
@@ -9407,7 +9410,7 @@ function SlideMastersList({
9407
9410
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 px-1", children: /* @__PURE__ */ jsxRuntime.jsx(
9408
9411
  "span",
9409
9412
  {
9410
- className: chunkCTL42ZRR_js.cn(
9413
+ className: chunkXRFJ7TAF_js.cn(
9411
9414
  "text-[10px] font-medium",
9412
9415
  isMasterActive ? "text-amber-400" : "text-muted-foreground"
9413
9416
  ),
@@ -9426,7 +9429,7 @@ function SlideMastersList({
9426
9429
  ref: isLayoutActive ? activeRef : void 0,
9427
9430
  "aria-pressed": isLayoutActive,
9428
9431
  "aria-label": layout.name || t("pptx.master.layout"),
9429
- className: chunkCTL42ZRR_js.cn(
9432
+ className: chunkXRFJ7TAF_js.cn(
9430
9433
  "group relative block w-full cursor-pointer rounded-md border-2 p-0.5 text-left transition-all",
9431
9434
  isLayoutActive ? "border-primary bg-primary/10" : "border-border bg-background/40 hover:border-border"
9432
9435
  ),
@@ -9443,7 +9446,7 @@ function SlideMastersList({
9443
9446
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 px-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
9444
9447
  "span",
9445
9448
  {
9446
- className: chunkCTL42ZRR_js.cn(
9449
+ className: chunkXRFJ7TAF_js.cn(
9447
9450
  "text-[9px]",
9448
9451
  isLayoutActive ? "text-primary" : "text-muted-foreground"
9449
9452
  ),
@@ -9535,7 +9538,7 @@ function MasterViewSidebar({
9535
9538
  type: "button",
9536
9539
  role: "tab",
9537
9540
  "aria-selected": masterViewTab === tab.key,
9538
- className: chunkCTL42ZRR_js.cn(
9541
+ className: chunkXRFJ7TAF_js.cn(
9539
9542
  "flex-1 px-1 py-1.5 text-[10px] font-medium transition-colors border-b-2",
9540
9543
  masterViewTab === tab.key ? "border-amber-500 text-amber-400" : "border-transparent text-muted-foreground hover:text-foreground"
9541
9544
  ),
@@ -10038,7 +10041,7 @@ function SectionBlock({
10038
10041
  /* @__PURE__ */ jsxRuntime.jsx(
10039
10042
  lu.LuChevronDown,
10040
10043
  {
10041
- className: chunkCTL42ZRR_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10044
+ className: chunkXRFJ7TAF_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10042
10045
  }
10043
10046
  ),
10044
10047
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-left", children: section.label }),
@@ -10087,7 +10090,7 @@ function SlideCardImpl({
10087
10090
  return /* @__PURE__ */ jsxRuntime.jsxs(
10088
10091
  "div",
10089
10092
  {
10090
- className: chunkCTL42ZRR_js.cn(
10093
+ className: chunkXRFJ7TAF_js.cn(
10091
10094
  "group relative cursor-pointer rounded-lg border-2 p-1 transition-all",
10092
10095
  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",
10093
10096
  slide.hidden && "opacity-40"
@@ -10110,7 +10113,7 @@ function SlideCardImpl({
10110
10113
  /* @__PURE__ */ jsxRuntime.jsx(
10111
10114
  "span",
10112
10115
  {
10113
- className: chunkCTL42ZRR_js.cn(
10116
+ className: chunkXRFJ7TAF_js.cn(
10114
10117
  "text-[11px] font-medium px-0.5",
10115
10118
  isSelected ? "text-primary" : isActive ? "text-primary/70" : "text-muted-foreground"
10116
10119
  ),
@@ -10852,7 +10855,7 @@ function ReadingViewStage({
10852
10855
  "div",
10853
10856
  {
10854
10857
  className: "absolute inset-0",
10855
- style: { backgroundColor: chunkCTL42ZRR_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
10858
+ style: { backgroundColor: chunkXRFJ7TAF_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
10856
10859
  }
10857
10860
  ),
10858
10861
  slide.backgroundImage && /* @__PURE__ */ jsxRuntime.jsx(
@@ -10869,9 +10872,9 @@ function ReadingViewStage({
10869
10872
  "div",
10870
10873
  {
10871
10874
  className: "absolute left-0 top-0 origin-top-left",
10872
- style: { width, height, transform: `scale(${scale})` },
10875
+ style: { width, height, transform: `scale(${scale})`, ...pptx.deviceStrokeStageStyle(scale) },
10873
10876
  children: elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
10874
- chunkK3EGXT6W_js.StaticElementRenderer,
10877
+ chunk355ICDU6_js.StaticElementRenderer,
10875
10878
  {
10876
10879
  element,
10877
10880
  activeSlide: slide,
@@ -11083,7 +11086,7 @@ function renderRichNotesSegments(segments) {
11083
11086
  if (segment.style.fontFamily) {
11084
11087
  style.fontFamily = segment.style.fontFamily;
11085
11088
  }
11086
- if (segment.style.hyperlink && chunkCTL42ZRR_js.isUrlSafe(segment.style.hyperlink)) {
11089
+ if (segment.style.hyperlink && chunkXRFJ7TAF_js.isUrlSafe(segment.style.hyperlink)) {
11087
11090
  const safeHref = segment.style.hyperlink;
11088
11091
  style.color = "#4a9eff";
11089
11092
  style.textDecoration = "underline";
@@ -11096,7 +11099,7 @@ function renderRichNotesSegments(segments) {
11096
11099
  style,
11097
11100
  onClick: (e) => {
11098
11101
  e.preventDefault();
11099
- chunkCTL42ZRR_js.safeOpenUrl(safeHref);
11102
+ chunkXRFJ7TAF_js.safeOpenUrl(safeHref);
11100
11103
  },
11101
11104
  children: segment.text
11102
11105
  },
@@ -11445,7 +11448,7 @@ function useSlideNotes({
11445
11448
  const href = target.getAttribute("data-hyperlink") || target.getAttribute("href");
11446
11449
  if (href && (e.ctrlKey || e.metaKey)) {
11447
11450
  e.preventDefault();
11448
- chunkCTL42ZRR_js.safeOpenUrl(href);
11451
+ chunkXRFJ7TAF_js.safeOpenUrl(href);
11449
11452
  }
11450
11453
  }, []);
11451
11454
  return {
@@ -11526,7 +11529,7 @@ function SlideNotesPanel({
11526
11529
  });
11527
11530
  const hasNotes = draft.trim().length > 0;
11528
11531
  const slideLabel = activeSlide ? t("pptx.notes.slideN", { n: activeSlide.slideNumber }) : t("pptx.notes.noSlide");
11529
- const { dragY, handlers: dragHandlers } = chunkK3EGXT6W_js.useSheetDismissDrag(onToggle);
11532
+ const { dragY, handlers: dragHandlers } = chunk355ICDU6_js.useSheetDismissDrag(onToggle);
11530
11533
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11531
11534
  isExpanded && /* @__PURE__ */ jsxRuntime.jsx(
11532
11535
  "button",
@@ -11542,7 +11545,7 @@ function SlideNotesPanel({
11542
11545
  {
11543
11546
  ref: rootRef,
11544
11547
  "data-pptx-chrome": "notes",
11545
- className: chunkCTL42ZRR_js.cn(
11548
+ className: chunkXRFJ7TAF_js.cn(
11546
11549
  "flex flex-col border-t border-border/60 bg-background select-none",
11547
11550
  // On mobile, hide the entire notes strip when collapsed: the
11548
11551
  // MobileBottomBar's Notes button is the entry point instead.
@@ -11906,7 +11909,7 @@ function SlideDiffRow({
11906
11909
  return /* @__PURE__ */ jsxRuntime.jsxs(
11907
11910
  "div",
11908
11911
  {
11909
- className: chunkCTL42ZRR_js.cn(
11912
+ className: chunkXRFJ7TAF_js.cn(
11910
11913
  "rounded-lg border transition-colors",
11911
11914
  isResolved ? "border-border/60 bg-card/40 opacity-60" : "border-border bg-background/70"
11912
11915
  ),
@@ -11920,7 +11923,7 @@ function SlideDiffRow({
11920
11923
  children: [
11921
11924
  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" }),
11922
11925
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-foreground", children: t("pptx.compare.slideNumber", { number: slideNumber }) }),
11923
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkCTL42ZRR_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
11926
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkXRFJ7TAF_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
11924
11927
  diff.changes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-muted-foreground", children: [
11925
11928
  diff.changes.length,
11926
11929
  " ",
@@ -11930,7 +11933,7 @@ function SlideDiffRow({
11930
11933
  isResolved && /* @__PURE__ */ jsxRuntime.jsx(
11931
11934
  "span",
11932
11935
  {
11933
- className: chunkCTL42ZRR_js.cn(
11936
+ className: chunkXRFJ7TAF_js.cn(
11934
11937
  "text-[10px] font-medium",
11935
11938
  accepted ? "text-green-400" : "text-muted-foreground"
11936
11939
  ),
@@ -11958,7 +11961,7 @@ function SlideDiffRow({
11958
11961
  /* @__PURE__ */ jsxRuntime.jsx(
11959
11962
  "div",
11960
11963
  {
11961
- className: chunkCTL42ZRR_js.cn(
11964
+ className: chunkXRFJ7TAF_js.cn(
11962
11965
  "rounded border overflow-hidden",
11963
11966
  diff.status === "added" ? "border-green-700/60" : diff.status === "changed" ? "border-amber-700/60" : "border-border"
11964
11967
  ),
@@ -12663,7 +12666,7 @@ function DocumentPropertiesDialog({
12663
12666
  const handleClose = React97.useCallback(() => {
12664
12667
  onClose();
12665
12668
  }, [onClose]);
12666
- const { panelStyle, handlers: dragHandlers } = chunkK3EGXT6W_js.useModalDismissDrag(handleClose);
12669
+ const { panelStyle, handlers: dragHandlers } = chunk355ICDU6_js.useModalDismissDrag(handleClose);
12667
12670
  if (!isOpen) {
12668
12671
  return null;
12669
12672
  }
@@ -13260,7 +13263,7 @@ function PresentationSubtitleBar({
13260
13263
  }) {
13261
13264
  const { t } = reactI18next.useTranslation();
13262
13265
  const language = pptx.subtitleRecognitionLanguage(
13263
- pptx.subtitleSettingsFromOptions(chunkK3EGXT6W_js.useViewerOptionsContext()),
13266
+ pptx.subtitleSettingsFromOptions(chunk355ICDU6_js.useViewerOptionsContext()),
13264
13267
  typeof navigator === "undefined" ? "en-US" : navigator.language
13265
13268
  );
13266
13269
  const [captionText, setCaptionText] = React97.useState("");
@@ -13428,7 +13431,7 @@ function ScaledSlidePreviewImpl({
13428
13431
  {
13429
13432
  className: "absolute inset-0",
13430
13433
  style: {
13431
- backgroundColor: chunkCTL42ZRR_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13434
+ backgroundColor: chunkXRFJ7TAF_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13432
13435
  }
13433
13436
  }
13434
13437
  ),
@@ -13450,10 +13453,11 @@ function ScaledSlidePreviewImpl({
13450
13453
  width: safeCanvasWidth,
13451
13454
  height: safeCanvasHeight,
13452
13455
  transform: `scale(${scale})`,
13453
- transformOrigin: "top left"
13456
+ transformOrigin: "top left",
13457
+ ...pptx.deviceStrokeStageStyle(scale)
13454
13458
  },
13455
13459
  children: previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
13456
- chunkK3EGXT6W_js.StaticElementRenderer,
13460
+ chunk355ICDU6_js.StaticElementRenderer,
13457
13461
  {
13458
13462
  element,
13459
13463
  activeSlide: slide,
@@ -14170,7 +14174,7 @@ function getElementDisplayName(element, index) {
14170
14174
  if (element.name && element.name.trim().length > 0) {
14171
14175
  return element.name.trim();
14172
14176
  }
14173
- if ((0, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(element) && element.text && element.text.trim().length > 0) {
14177
+ if ((0, chunkXRFJ7TAF_js.dist_exports.hasTextProperties)(element) && element.text && element.text.trim().length > 0) {
14174
14178
  return element.text.trim().slice(0, 32);
14175
14179
  }
14176
14180
  const label = TYPE_LABELS[element.type] ?? "Object";
@@ -14343,7 +14347,7 @@ function SelectionPane({
14343
14347
  setDragIndex(null);
14344
14348
  setDragOverIndex(null);
14345
14349
  },
14346
- className: chunkCTL42ZRR_js.cn(
14350
+ className: chunkXRFJ7TAF_js.cn(
14347
14351
  "flex items-center gap-1.5 px-2 py-1 text-xs cursor-pointer transition-colors",
14348
14352
  isSelected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground",
14349
14353
  dragOverIndex === realIndex ? "border-t-2 border-primary" : ""
@@ -14397,13 +14401,13 @@ function SelectionPane({
14397
14401
  }
14398
14402
  var INPUT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14399
14403
  var SELECT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14400
- var ENTRANCE_PRESETS = chunkCTL42ZRR_js.ANIMATION_PRESET_OPTIONS.filter(
14404
+ var ENTRANCE_PRESETS = chunkXRFJ7TAF_js.ANIMATION_PRESET_OPTIONS.filter(
14401
14405
  (o) => o.value === "fadeIn" || o.value === "flyIn" || o.value === "zoomIn"
14402
14406
  );
14403
- var EXIT_PRESETS = chunkCTL42ZRR_js.ANIMATION_PRESET_OPTIONS.filter(
14407
+ var EXIT_PRESETS = chunkXRFJ7TAF_js.ANIMATION_PRESET_OPTIONS.filter(
14404
14408
  (o) => o.value === "fadeOut" || o.value === "flyOut" || o.value === "zoomOut"
14405
14409
  );
14406
- var EMPHASIS_PRESETS = chunkCTL42ZRR_js.ANIMATION_PRESET_OPTIONS.filter(
14410
+ var EMPHASIS_PRESETS = chunkXRFJ7TAF_js.ANIMATION_PRESET_OPTIONS.filter(
14407
14411
  (o) => o.value === "spin" || o.value === "pulse" || o.value === "colorWave" || o.value === "bounce" || o.value === "flash" || o.value === "growShrink" || o.value === "teeter"
14408
14412
  );
14409
14413
  var TIMING_CURVE_OPTIONS = [
@@ -14569,7 +14573,7 @@ function AnimationTimelineSection({
14569
14573
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-6 rounded bg-muted/50 border border-border overflow-hidden", children: timelineBarData.map((bar) => /* @__PURE__ */ jsxRuntime.jsx(
14570
14574
  "div",
14571
14575
  {
14572
- className: chunkCTL42ZRR_js.cn(
14576
+ className: chunkXRFJ7TAF_js.cn(
14573
14577
  "absolute top-0.5 bottom-0.5 rounded-sm transition-colors",
14574
14578
  animationTypeColor(bar.anim),
14575
14579
  bar.anim.elementId === selectedElementId && "ring-1 ring-primary"
@@ -14598,7 +14602,7 @@ function AnimationTimelineSection({
14598
14602
  onDragLeave: handleDragLeave,
14599
14603
  onDrop: (e) => handleDrop(index, e),
14600
14604
  title: t("pptx.animation.nativeEffectHint"),
14601
- className: chunkCTL42ZRR_js.cn(
14605
+ className: chunkXRFJ7TAF_js.cn(
14602
14606
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] italic",
14603
14607
  "bg-muted/20 text-muted-foreground/70",
14604
14608
  isDragOver && "border-t-2 border-primary"
@@ -14637,7 +14641,7 @@ function AnimationTimelineSection({
14637
14641
  onDragEnd: handleDragEnd,
14638
14642
  onMouseEnter: () => handleAnimationHover(anim),
14639
14643
  onMouseLeave: handleAnimationHoverEnd,
14640
- className: chunkCTL42ZRR_js.cn(
14644
+ className: chunkXRFJ7TAF_js.cn(
14641
14645
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] cursor-grab transition-colors",
14642
14646
  isSelected ? "bg-primary/30 text-primary" : "bg-muted/50 text-muted-foreground",
14643
14647
  isDragging && "opacity-40",
@@ -14769,7 +14773,7 @@ function EffectSoundRow({
14769
14773
  }
14770
14774
  const asset = pptx.getEffectSoundAsset(soundState.catalogueId);
14771
14775
  if (asset) {
14772
- chunkK3EGXT6W_js.playAnimationSound(asset.dataUrl);
14776
+ chunk355ICDU6_js.playAnimationSound(asset.dataUrl);
14773
14777
  }
14774
14778
  };
14775
14779
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -14944,7 +14948,7 @@ function useAnimationPreview({
14944
14948
  }) {
14945
14949
  const handleAnimationHover = React97.useCallback((anim) => {
14946
14950
  if (anim.motionPath) {
14947
- chunkCTL42ZRR_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
14951
+ chunkXRFJ7TAF_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
14948
14952
  durationMs: anim.durationMs,
14949
14953
  delayMs: anim.delayMs,
14950
14954
  timingCurve: anim.timingCurve
@@ -14955,19 +14959,19 @@ function useAnimationPreview({
14955
14959
  if (!preset || preset === "none") {
14956
14960
  return;
14957
14961
  }
14958
- chunkCTL42ZRR_js.startPreviewAnimation(anim.elementId, preset, {
14962
+ chunkXRFJ7TAF_js.startPreviewAnimation(anim.elementId, preset, {
14959
14963
  direction: anim.direction,
14960
14964
  durationMs: anim.durationMs ?? 500,
14961
14965
  timingCurve: anim.timingCurve
14962
14966
  });
14963
14967
  }, []);
14964
- const handleAnimationHoverEnd = React97.useCallback(() => chunkCTL42ZRR_js.stopPreviewAnimation(), []);
14968
+ const handleAnimationHoverEnd = React97.useCallback(() => chunkXRFJ7TAF_js.stopPreviewAnimation(), []);
14965
14969
  const handlePreviewClick = React97.useCallback(() => {
14966
14970
  if (!selectedElementAnimation) {
14967
14971
  return;
14968
14972
  }
14969
14973
  if (selectedElementAnimation.motionPath) {
14970
- chunkCTL42ZRR_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
14974
+ chunkXRFJ7TAF_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
14971
14975
  durationMs: selectedElementAnimation.durationMs,
14972
14976
  delayMs: selectedElementAnimation.delayMs,
14973
14977
  timingCurve: selectedElementAnimation.timingCurve
@@ -14978,7 +14982,7 @@ function useAnimationPreview({
14978
14982
  if (!preset || preset === "none") {
14979
14983
  return;
14980
14984
  }
14981
- chunkCTL42ZRR_js.startPreviewAnimation(selectedElementId, preset, {
14985
+ chunkXRFJ7TAF_js.startPreviewAnimation(selectedElementId, preset, {
14982
14986
  direction: selectedElementAnimation.direction,
14983
14987
  durationMs: selectedElementAnimation.durationMs ?? 500,
14984
14988
  timingCurve: selectedElementAnimation.timingCurve
@@ -15212,8 +15216,8 @@ function useAnimationHandlers({
15212
15216
  if (!el) {
15213
15217
  return anim.elementId.slice(0, 8);
15214
15218
  }
15215
- const text = (0, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(el) ? el.text : void 0;
15216
- return text || chunkCTL42ZRR_js.getElementLabel(el);
15219
+ const text = (0, chunkXRFJ7TAF_js.dist_exports.hasTextProperties)(el) ? el.text : void 0;
15220
+ return text || chunkXRFJ7TAF_js.getElementLabel(el);
15217
15221
  },
15218
15222
  [activeSlide.elements]
15219
15223
  );
@@ -15223,8 +15227,8 @@ function useAnimationHandlers({
15223
15227
  if (!el) {
15224
15228
  return id.slice(0, 8);
15225
15229
  }
15226
- const text = (0, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(el) ? el.text : void 0;
15227
- return text || chunkCTL42ZRR_js.getElementLabel(el);
15230
+ const text = (0, chunkXRFJ7TAF_js.dist_exports.hasTextProperties)(el) ? el.text : void 0;
15231
+ return text || chunkXRFJ7TAF_js.getElementLabel(el);
15228
15232
  }).join(", "),
15229
15233
  [activeSlide.elements]
15230
15234
  );
@@ -15281,7 +15285,7 @@ function AnimationPanel({
15281
15285
  onUpdateSlide
15282
15286
  }) {
15283
15287
  const { t } = reactI18next.useTranslation();
15284
- const { viewportWidth } = chunkK3EGXT6W_js.useIsMobile();
15288
+ const { viewportWidth } = chunk355ICDU6_js.useIsMobile();
15285
15289
  const directionBtnPx = Math.max(28, pptx.getDensePanelTouchTargetPx(viewportWidth));
15286
15290
  const fieldStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
15287
15291
  const handlers = useAnimationHandlers({
@@ -15409,7 +15413,7 @@ function AnimationPanel({
15409
15413
  type: "button",
15410
15414
  disabled: !canEdit,
15411
15415
  style: { minWidth: directionBtnPx, minHeight: directionBtnPx },
15412
- className: chunkCTL42ZRR_js.cn(
15416
+ className: chunkXRFJ7TAF_js.cn(
15413
15417
  "flex items-center justify-center rounded border transition-colors",
15414
15418
  isActive ? "border-primary bg-primary/20 text-primary" : "border-border bg-muted text-muted-foreground hover:bg-accent"
15415
15419
  ),
@@ -15487,7 +15491,7 @@ function AnimationPanel({
15487
15491
  style: fieldStyle,
15488
15492
  children: [
15489
15493
  /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: t("pptx.animation.trigger.selectShape") }),
15490
- activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunkCTL42ZRR_js.getElementLabel(el) }, el.id))
15494
+ activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunkXRFJ7TAF_js.getElementLabel(el) }, el.id))
15491
15495
  ]
15492
15496
  }
15493
15497
  )
@@ -15635,7 +15639,7 @@ function ActionTargetFields({
15635
15639
  type: "text",
15636
15640
  disabled: !canEdit,
15637
15641
  "aria-label": t(urlLabelKey),
15638
- className: chunkCTL42ZRR_js.cn(INPUT2, "w-full"),
15642
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "w-full"),
15639
15643
  placeholder: "https://...",
15640
15644
  value: url ?? "",
15641
15645
  onChange: (e) => onChange({ url: e.target.value })
@@ -15649,7 +15653,7 @@ function ActionTargetFields({
15649
15653
  type: "number",
15650
15654
  disabled: !canEdit,
15651
15655
  "aria-label": t("pptx.action.gotoSlide"),
15652
- className: chunkCTL42ZRR_js.cn(INPUT2, "w-full"),
15656
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "w-full"),
15653
15657
  placeholder: t("pptx.action.slideNumberPlaceholder"),
15654
15658
  min: 1,
15655
15659
  max: slideCount,
@@ -15671,7 +15675,7 @@ function ActionTargetFields({
15671
15675
  "data-testid": "pptx-action-custom-show",
15672
15676
  disabled: !canEdit,
15673
15677
  "aria-label": t("pptx.hyperlink.customShowLabel"),
15674
- className: chunkCTL42ZRR_js.cn(INPUT2, "w-full"),
15678
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "w-full"),
15675
15679
  value: customShowId ?? "",
15676
15680
  onChange: (e) => onChange({ customShowId: e.target.value, returnAfter }),
15677
15681
  children: [
@@ -15704,11 +15708,11 @@ function ActionSettingsPanel({
15704
15708
  onUpdateElement
15705
15709
  }) {
15706
15710
  const { t } = reactI18next.useTranslation();
15707
- const clickAction = selectedElement.actionClick ? (0, chunkCTL42ZRR_js.dist_exports.pptxActionToElementAction)(selectedElement.actionClick, "click") : void 0;
15708
- const hoverAction = selectedElement.actionHover ? (0, chunkCTL42ZRR_js.dist_exports.pptxActionToElementAction)(selectedElement.actionHover, "hover") : void 0;
15711
+ const clickAction = selectedElement.actionClick ? (0, chunkXRFJ7TAF_js.dist_exports.pptxActionToElementAction)(selectedElement.actionClick, "click") : void 0;
15712
+ const hoverAction = selectedElement.actionHover ? (0, chunkXRFJ7TAF_js.dist_exports.pptxActionToElementAction)(selectedElement.actionHover, "hover") : void 0;
15709
15713
  const updateAction = (trigger, type, patch) => {
15710
15714
  const ea = { trigger, type, ...patch };
15711
- const pa = (0, chunkCTL42ZRR_js.dist_exports.elementActionToPptxAction)(ea);
15715
+ const pa = (0, chunkXRFJ7TAF_js.dist_exports.elementActionToPptxAction)(ea);
15712
15716
  if (trigger === "click") {
15713
15717
  onUpdateElement({ actionClick: pa });
15714
15718
  } else {
@@ -15793,7 +15797,7 @@ function ActionTriggerSection({
15793
15797
  {
15794
15798
  disabled: !canEdit,
15795
15799
  "aria-label": label,
15796
- className: chunkCTL42ZRR_js.cn(INPUT2, "w-full"),
15800
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "w-full"),
15797
15801
  value: effectiveType,
15798
15802
  onChange: (e) => changeType(e.target.value),
15799
15803
  children: pptx.ELEMENT_ACTION_TYPE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.labelKey) }, o.value))
@@ -16181,7 +16185,7 @@ function ChartDataGrid({
16181
16185
  }) {
16182
16186
  const { t } = reactI18next.useTranslation();
16183
16187
  const highlightRef = React97.useRef(null);
16184
- const { viewportWidth } = chunkK3EGXT6W_js.useIsMobile();
16188
+ const { viewportWidth } = chunk355ICDU6_js.useIsMobile();
16185
16189
  const gridPlan = pptx.getDenseGridLayoutPlan(viewportWidth);
16186
16190
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
16187
16191
  const rowHeaderClass = gridPlan.stickyFirstColumn ? "sticky left-0 z-10 bg-card" : "";
@@ -17538,8 +17542,8 @@ function ChartUserShapeOptions({
17538
17542
  }
17539
17543
  function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
17540
17544
  const chartData = selectedElement.chartData;
17541
- const followDataPoint = chunkK3EGXT6W_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17542
- const { selection: partSelection } = chunkK3EGXT6W_js.useChartPartSelection();
17545
+ const followDataPoint = chunk355ICDU6_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17546
+ const { selection: partSelection } = chunk355ICDU6_js.useChartPartSelection();
17543
17547
  const canvasPart = partSelection?.elementId === selectedElement.id ? partSelection.part : null;
17544
17548
  const title = chartData?.title;
17545
17549
  const chartType = chartData?.chartType;
@@ -17753,40 +17757,40 @@ function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
17753
17757
  [chartData, selectedElement, replaceChartData]
17754
17758
  );
17755
17759
  const setAxisLogScale = React97.useCallback(
17756
- (axisType, opts) => applyChartOp((el) => (0, chunkCTL42ZRR_js.dist_exports.setChartAxisLogScale)(el, axisType, opts)),
17760
+ (axisType, opts) => applyChartOp((el) => (0, chunkXRFJ7TAF_js.dist_exports.setChartAxisLogScale)(el, axisType, opts)),
17757
17761
  [applyChartOp]
17758
17762
  );
17759
17763
  const setAxisTitleStyle = React97.useCallback(
17760
- (axisType, edit) => applyChartOp((el) => (0, chunkCTL42ZRR_js.dist_exports.setChartAxisTitleStyle)(el, axisType, edit)),
17764
+ (axisType, edit) => applyChartOp((el) => (0, chunkXRFJ7TAF_js.dist_exports.setChartAxisTitleStyle)(el, axisType, edit)),
17761
17765
  [applyChartOp]
17762
17766
  );
17763
17767
  const setGridlineStyle = React97.useCallback(
17764
- (axisType, which, edit) => applyChartOp((el) => (0, chunkCTL42ZRR_js.dist_exports.setChartAxisGridlineStyle)(el, axisType, which, edit)),
17768
+ (axisType, which, edit) => applyChartOp((el) => (0, chunkXRFJ7TAF_js.dist_exports.setChartAxisGridlineStyle)(el, axisType, which, edit)),
17765
17769
  [applyChartOp]
17766
17770
  );
17767
17771
  const setSeriesMarker = React97.useCallback(
17768
- (index, marker) => applyChartOp((el) => (0, chunkCTL42ZRR_js.dist_exports.setChartSeriesMarker)(el, index, marker)),
17772
+ (index, marker) => applyChartOp((el) => (0, chunkXRFJ7TAF_js.dist_exports.setChartSeriesMarker)(el, index, marker)),
17769
17773
  [applyChartOp]
17770
17774
  );
17771
17775
  const setSeriesType = React97.useCallback(
17772
- (index, seriesType) => applyChartOp((el) => (0, chunkCTL42ZRR_js.dist_exports.setChartSeriesChartType)(el, index, seriesType)),
17776
+ (index, seriesType) => applyChartOp((el) => (0, chunkXRFJ7TAF_js.dist_exports.setChartSeriesChartType)(el, index, seriesType)),
17773
17777
  [applyChartOp]
17774
17778
  );
17775
17779
  const setPointFill = React97.useCallback(
17776
- (seriesIndex, pointIndex, color) => applyChartOp((el) => (0, chunkCTL42ZRR_js.dist_exports.setChartDataPointFill)(el, seriesIndex, pointIndex, color)),
17780
+ (seriesIndex, pointIndex, color) => applyChartOp((el) => (0, chunkXRFJ7TAF_js.dist_exports.setChartDataPointFill)(el, seriesIndex, pointIndex, color)),
17777
17781
  [applyChartOp]
17778
17782
  );
17779
17783
  const setPointExplosion = React97.useCallback(
17780
- (seriesIndex, pointIndex, explosion) => applyChartOp((el) => (0, chunkCTL42ZRR_js.dist_exports.setChartDataPointExplosion)(el, seriesIndex, pointIndex, explosion)),
17784
+ (seriesIndex, pointIndex, explosion) => applyChartOp((el) => (0, chunkXRFJ7TAF_js.dist_exports.setChartDataPointExplosion)(el, seriesIndex, pointIndex, explosion)),
17781
17785
  [applyChartOp]
17782
17786
  );
17783
17787
  const setPointMarker = React97.useCallback(
17784
- (seriesIndex, pointIndex, marker) => applyChartOp((el) => (0, chunkCTL42ZRR_js.dist_exports.setChartDataPointMarker)(el, seriesIndex, pointIndex, marker)),
17788
+ (seriesIndex, pointIndex, marker) => applyChartOp((el) => (0, chunkXRFJ7TAF_js.dist_exports.setChartDataPointMarker)(el, seriesIndex, pointIndex, marker)),
17785
17789
  [applyChartOp]
17786
17790
  );
17787
17791
  const setPointLabel = React97.useCallback(
17788
17792
  (seriesIndex, pointIndex, text) => applyChartOp(
17789
- (el) => (0, chunkCTL42ZRR_js.dist_exports.setChartDataPointLabel)(el, seriesIndex, pointIndex, text !== null ? { text } : null)
17793
+ (el) => (0, chunkXRFJ7TAF_js.dist_exports.setChartDataPointLabel)(el, seriesIndex, pointIndex, text !== null ? { text } : null)
17790
17794
  ),
17791
17795
  [applyChartOp]
17792
17796
  );
@@ -18054,17 +18058,17 @@ function OleEditorDialog({
18054
18058
  const kind = descriptor.contentTab.kind;
18055
18059
  const load = async () => {
18056
18060
  if (kind === "sheet") {
18057
- const value = await (0, chunkCTL42ZRR_js.dist_exports.getOleSheetGrid)(element);
18061
+ const value = await (0, chunkXRFJ7TAF_js.dist_exports.getOleSheetGrid)(element);
18058
18062
  if (!cancelled) {
18059
18063
  setGrid(value);
18060
18064
  }
18061
18065
  } else if (kind === "document") {
18062
- const value = await (0, chunkCTL42ZRR_js.dist_exports.getOleDocumentParagraphs)(element);
18066
+ const value = await (0, chunkXRFJ7TAF_js.dist_exports.getOleDocumentParagraphs)(element);
18063
18067
  if (!cancelled) {
18064
18068
  setParagraphs(value);
18065
18069
  }
18066
18070
  } else if (kind === "deck") {
18067
- const value = await (0, chunkCTL42ZRR_js.dist_exports.getOleNestedDeckDetail)(element);
18071
+ const value = await (0, chunkXRFJ7TAF_js.dist_exports.getOleNestedDeckDetail)(element);
18068
18072
  if (!cancelled) {
18069
18073
  setDeckSlides(value);
18070
18074
  }
@@ -18090,9 +18094,9 @@ function OleEditorDialog({
18090
18094
  const handleCellEdit = React97.useCallback(
18091
18095
  async (row, col, value) => {
18092
18096
  try {
18093
- const updated = await (0, chunkCTL42ZRR_js.dist_exports.applyOleSheetCellEdit)(element, { row, col, value });
18097
+ const updated = await (0, chunkXRFJ7TAF_js.dist_exports.applyOleSheetCellEdit)(element, { row, col, value });
18094
18098
  commit(updated);
18095
- const refreshed = await (0, chunkCTL42ZRR_js.dist_exports.getOleSheetGrid)(updated);
18099
+ const refreshed = await (0, chunkXRFJ7TAF_js.dist_exports.getOleSheetGrid)(updated);
18096
18100
  if (mountedRef.current) {
18097
18101
  setGrid(refreshed);
18098
18102
  }
@@ -18107,9 +18111,9 @@ function OleEditorDialog({
18107
18111
  const handleParagraphEdit = React97.useCallback(
18108
18112
  async (index, text) => {
18109
18113
  try {
18110
- const updated = await (0, chunkCTL42ZRR_js.dist_exports.applyOleDocumentParagraphEdit)(element, index, text);
18114
+ const updated = await (0, chunkXRFJ7TAF_js.dist_exports.applyOleDocumentParagraphEdit)(element, index, text);
18111
18115
  commit(updated);
18112
- const refreshed = await (0, chunkCTL42ZRR_js.dist_exports.getOleDocumentParagraphs)(updated);
18116
+ const refreshed = await (0, chunkXRFJ7TAF_js.dist_exports.getOleDocumentParagraphs)(updated);
18113
18117
  if (mountedRef.current) {
18114
18118
  setParagraphs(refreshed);
18115
18119
  }
@@ -18124,14 +18128,14 @@ function OleEditorDialog({
18124
18128
  const handleDeckElementEdit = React97.useCallback(
18125
18129
  async (slideIndex, deckElementId, text) => {
18126
18130
  try {
18127
- const updated = await (0, chunkCTL42ZRR_js.dist_exports.applyOleNestedDeckElementTextEdit)(
18131
+ const updated = await (0, chunkXRFJ7TAF_js.dist_exports.applyOleNestedDeckElementTextEdit)(
18128
18132
  element,
18129
18133
  slideIndex,
18130
18134
  deckElementId,
18131
18135
  text
18132
18136
  );
18133
18137
  commit(updated);
18134
- const refreshed = await (0, chunkCTL42ZRR_js.dist_exports.getOleNestedDeckDetail)(updated);
18138
+ const refreshed = await (0, chunkXRFJ7TAF_js.dist_exports.getOleNestedDeckDetail)(updated);
18135
18139
  if (mountedRef.current) {
18136
18140
  setDeckSlides(refreshed);
18137
18141
  }
@@ -18147,7 +18151,7 @@ function OleEditorDialog({
18147
18151
  async (file) => {
18148
18152
  try {
18149
18153
  const bytes = new Uint8Array(await file.arrayBuffer());
18150
- const updated = await (0, chunkCTL42ZRR_js.dist_exports.replaceOleFile)(element, bytes, file.name);
18154
+ const updated = await (0, chunkXRFJ7TAF_js.dist_exports.replaceOleFile)(element, bytes, file.name);
18151
18155
  commit(updated);
18152
18156
  if (mountedRef.current) {
18153
18157
  onClose();
@@ -18296,7 +18300,7 @@ function ConnectorArrowsSection({
18296
18300
  },
18297
18301
  disabled: !canEdit,
18298
18302
  className: SELECT_CLS2,
18299
- children: chunkCTL42ZRR_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18303
+ children: chunkXRFJ7TAF_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18300
18304
  }
18301
18305
  )
18302
18306
  ] }, end);
@@ -18320,7 +18324,7 @@ function ConnectorArrowsSection({
18320
18324
  },
18321
18325
  disabled: !canEdit,
18322
18326
  className: SELECT_CLS2,
18323
- children: chunkCTL42ZRR_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18327
+ children: chunkXRFJ7TAF_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18324
18328
  }
18325
18329
  )
18326
18330
  ] }),
@@ -18339,7 +18343,7 @@ function ConnectorArrowsSection({
18339
18343
  },
18340
18344
  disabled: !canEdit,
18341
18345
  className: SELECT_CLS2,
18342
- children: chunkCTL42ZRR_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18346
+ children: chunkXRFJ7TAF_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18343
18347
  }
18344
18348
  )
18345
18349
  ] })
@@ -18419,7 +18423,7 @@ function OlePropertiesPanel({
18419
18423
  ] }),
18420
18424
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
18421
18425
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.ole.type") }),
18422
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground truncate", children: (0, chunkCTL42ZRR_js.dist_exports.getOleObjectTypeLabel)(ole.oleObjectType) })
18426
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground truncate", children: (0, chunkXRFJ7TAF_js.dist_exports.getOleObjectTypeLabel)(ole.oleObjectType) })
18423
18427
  ] }),
18424
18428
  ole.fileName && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
18425
18429
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.ole.fileName") }),
@@ -18430,7 +18434,7 @@ function OlePropertiesPanel({
18430
18434
  /* @__PURE__ */ jsxRuntime.jsx(
18431
18435
  "span",
18432
18436
  {
18433
- className: chunkCTL42ZRR_js.cn(
18437
+ className: chunkXRFJ7TAF_js.cn(
18434
18438
  "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium",
18435
18439
  ole.isLinked ? "bg-blue-500/20 text-blue-400" : "bg-green-500/20 text-green-400"
18436
18440
  ),
@@ -18498,7 +18502,7 @@ function LayerOrderButtons({
18498
18502
  "button",
18499
18503
  {
18500
18504
  type: "button",
18501
- className: chunkCTL42ZRR_js.cn("flex-1", BTN2),
18505
+ className: chunkXRFJ7TAF_js.cn("flex-1", BTN2),
18502
18506
  disabled: !canEdit,
18503
18507
  onClick: () => onMoveLayer("forward"),
18504
18508
  children: "\u2191 Forward"
@@ -18508,7 +18512,7 @@ function LayerOrderButtons({
18508
18512
  "button",
18509
18513
  {
18510
18514
  type: "button",
18511
- className: chunkCTL42ZRR_js.cn("flex-1", BTN2),
18515
+ className: chunkXRFJ7TAF_js.cn("flex-1", BTN2),
18512
18516
  disabled: !canEdit,
18513
18517
  onClick: () => onMoveLayer("backward"),
18514
18518
  children: "\u2193 Backward"
@@ -18532,7 +18536,7 @@ function ArtisticEffectsGallery({
18532
18536
  {
18533
18537
  type: "button",
18534
18538
  disabled: !canEdit,
18535
- className: chunkCTL42ZRR_js.cn(
18539
+ className: chunkXRFJ7TAF_js.cn(
18536
18540
  "flex flex-col items-center gap-0.5 rounded border p-0.5 hover:bg-accent/50",
18537
18541
  isActive ? "border-primary bg-primary/10" : "border-border"
18538
18542
  ),
@@ -18594,7 +18598,7 @@ function ColorChangeSection({
18594
18598
  DebouncedColorInput,
18595
18599
  {
18596
18600
  disabled: !canEdit,
18597
- value: chunkCTL42ZRR_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18601
+ value: chunkXRFJ7TAF_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18598
18602
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18599
18603
  onCommit: (hex) => updateEffects({
18600
18604
  clrChange: {
@@ -18612,7 +18616,7 @@ function ColorChangeSection({
18612
18616
  DebouncedColorInput,
18613
18617
  {
18614
18618
  disabled: !canEdit || Boolean(cc.clrToTransparent),
18615
- value: chunkCTL42ZRR_js.normalizeHexColor(cc.clrTo, "#000000"),
18619
+ value: chunkXRFJ7TAF_js.normalizeHexColor(cc.clrTo, "#000000"),
18616
18620
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18617
18621
  onCommit: (hex) => updateEffects({
18618
18622
  clrChange: {
@@ -18672,7 +18676,7 @@ function ColorWashSection({
18672
18676
  DebouncedColorInput,
18673
18677
  {
18674
18678
  disabled: !canEdit,
18675
- value: chunkCTL42ZRR_js.normalizeHexColor(wash.color, "#0066cc"),
18679
+ value: chunkXRFJ7TAF_js.normalizeHexColor(wash.color, "#0066cc"),
18676
18680
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18677
18681
  onCommit: (hex) => updateEffects({
18678
18682
  colorWash: { color: hex, opacity: wash.opacity ?? 40 }
@@ -18775,8 +18779,8 @@ function DuotonePanel({
18775
18779
  }
18776
18780
  });
18777
18781
  }, [effects, onUpdateElement]);
18778
- const shadowColor = chunkCTL42ZRR_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
18779
- const highlightColor = chunkCTL42ZRR_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
18782
+ const shadowColor = chunkXRFJ7TAF_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
18783
+ const highlightColor = chunkXRFJ7TAF_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
18780
18784
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px]", children: [
18781
18785
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground font-medium", children: t("pptx.image.duotone") }),
18782
18786
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
@@ -18807,7 +18811,7 @@ function DuotonePanel({
18807
18811
  ] }),
18808
18812
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
18809
18813
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-[10px]", children: t("pptx.image.duotonePresets") }),
18810
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunkK3EGXT6W_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
18814
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunk355ICDU6_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
18811
18815
  "button",
18812
18816
  {
18813
18817
  type: "button",
@@ -18945,7 +18949,7 @@ function ImageCropSection({
18945
18949
  onUpdateElement
18946
18950
  }) {
18947
18951
  const { t } = reactI18next.useTranslation();
18948
- if (!(0, chunkCTL42ZRR_js.dist_exports.isImageLikeElement)(selectedElement)) {
18952
+ if (!(0, chunkXRFJ7TAF_js.dist_exports.isImageLikeElement)(selectedElement)) {
18949
18953
  return null;
18950
18954
  }
18951
18955
  const croppable = pptx.cropResetState(selectedElement, canEdit, true).enabled;
@@ -18962,7 +18966,7 @@ function ImageCropSection({
18962
18966
  max: MAX_CROP_PERCENT,
18963
18967
  disabled: !croppable,
18964
18968
  className: "accent-primary",
18965
- value: Math.round(chunkCTL42ZRR_js.clampCropValue(selectedElement[key]) * 100),
18969
+ value: Math.round(chunkXRFJ7TAF_js.clampCropValue(selectedElement[key]) * 100),
18966
18970
  onChange: (e) => onUpdateElement({
18967
18971
  [key]: Number(e.target.value) / 100
18968
18972
  })
@@ -19026,7 +19030,7 @@ function ImagePropertiesPanel({
19026
19030
  {
19027
19031
  rows: 2,
19028
19032
  disabled: !canEdit,
19029
- className: chunkCTL42ZRR_js.cn(INPUT2, "resize-none text-[11px]"),
19033
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "resize-none text-[11px]"),
19030
19034
  value: selectedElement.altText ?? "",
19031
19035
  onChange: (e) => onUpdateElement({
19032
19036
  altText: e.target.value
@@ -19966,7 +19970,7 @@ function AccessibilityTextSection({
19966
19970
  rows: 2,
19967
19971
  disabled: !canEdit,
19968
19972
  placeholder: t("pptx.elementAccessibility.altTextPlaceholder"),
19969
- className: chunkCTL42ZRR_js.cn(INPUT2, "resize-none text-[11px]"),
19973
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "resize-none text-[11px]"),
19970
19974
  value: fields.altText,
19971
19975
  onChange: (e) => onUpdateElement({ altText: e.target.value })
19972
19976
  }
@@ -19980,7 +19984,7 @@ function AccessibilityTextSection({
19980
19984
  type: "text",
19981
19985
  disabled: !canEdit,
19982
19986
  placeholder: t("pptx.elementAccessibility.titlePlaceholder"),
19983
- className: chunkCTL42ZRR_js.cn(INPUT2, "text-[11px]"),
19987
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "text-[11px]"),
19984
19988
  value: fields.title,
19985
19989
  onChange: (e) => onUpdateElement({ title: e.target.value })
19986
19990
  }
@@ -20096,7 +20100,7 @@ var SHADOW_EFFECT_CONFIGS = [
20096
20100
  angle = (Math.atan2(offsetY, offsetX) * 180 / Math.PI + 360) % 360;
20097
20101
  }
20098
20102
  return {
20099
- shadowColor: chunkCTL42ZRR_js.normalizeHexColor(s?.shadowColor, "#000000"),
20103
+ shadowColor: chunkXRFJ7TAF_js.normalizeHexColor(s?.shadowColor, "#000000"),
20100
20104
  shadowOpacity: s?.shadowOpacity ?? 0.35,
20101
20105
  shadowBlur: s?.shadowBlur ?? 6,
20102
20106
  shadowAngle: angle,
@@ -20112,7 +20116,7 @@ var SHADOW_EFFECT_CONFIGS = [
20112
20116
  key: "sc",
20113
20117
  label: "Shadow Color",
20114
20118
  type: "color",
20115
- read: (s) => chunkCTL42ZRR_js.normalizeHexColor(s?.shadowColor, "#000000"),
20119
+ read: (s) => chunkXRFJ7TAF_js.normalizeHexColor(s?.shadowColor, "#000000"),
20116
20120
  write: (v) => ({ shadowColor: String(v) })
20117
20121
  },
20118
20122
  {
@@ -20248,7 +20252,7 @@ var SHADOW_EFFECT_CONFIGS = [
20248
20252
  label: "Inner Shadow",
20249
20253
  isOn: (s) => Boolean(s?.innerShadowColor) && s?.innerShadowColor !== "transparent",
20250
20254
  onEnable: (s) => ({
20251
- innerShadowColor: chunkCTL42ZRR_js.normalizeHexColor(s?.innerShadowColor, "#000000"),
20255
+ innerShadowColor: chunkXRFJ7TAF_js.normalizeHexColor(s?.innerShadowColor, "#000000"),
20252
20256
  innerShadowOpacity: s?.innerShadowOpacity ?? 0.5,
20253
20257
  innerShadowBlur: s?.innerShadowBlur ?? 5,
20254
20258
  innerShadowOffsetX: s?.innerShadowOffsetX ?? 0,
@@ -20260,7 +20264,7 @@ var SHADOW_EFFECT_CONFIGS = [
20260
20264
  key: "isc",
20261
20265
  label: "Color",
20262
20266
  type: "color",
20263
- read: (s) => chunkCTL42ZRR_js.normalizeHexColor(s?.innerShadowColor, "#000000"),
20267
+ read: (s) => chunkXRFJ7TAF_js.normalizeHexColor(s?.innerShadowColor, "#000000"),
20264
20268
  write: (v) => ({ innerShadowColor: String(v) })
20265
20269
  },
20266
20270
  {
@@ -20770,7 +20774,7 @@ function ColorPickerRow({
20770
20774
  pushColor(color);
20771
20775
  };
20772
20776
  const handleEyedropper = async () => {
20773
- const color = await chunkCTL42ZRR_js.openNativeEyeDropper();
20777
+ const color = await chunkXRFJ7TAF_js.openNativeEyeDropper();
20774
20778
  if (color) {
20775
20779
  commit(color);
20776
20780
  }
@@ -20853,9 +20857,9 @@ function GradientStopRow({
20853
20857
  "input",
20854
20858
  {
20855
20859
  type: "color",
20856
- value: chunkCTL42ZRR_js.normalizeHexColor(stop2.color, "#3b82f6"),
20860
+ value: chunkXRFJ7TAF_js.normalizeHexColor(stop2.color, "#3b82f6"),
20857
20861
  onChange: (e) => {
20858
- const hex = chunkCTL42ZRR_js.normalizeHexColor(e.target.value, "#3b82f6");
20862
+ const hex = chunkXRFJ7TAF_js.normalizeHexColor(e.target.value, "#3b82f6");
20859
20863
  patchStop({ color: hex, colorRef: void 0 });
20860
20864
  pushColor(hex);
20861
20865
  },
@@ -20980,7 +20984,7 @@ function FillAdvancedControls({
20980
20984
  onClick: () => onUpdateGradientStops([
20981
20985
  ...gradientStops,
20982
20986
  {
20983
- color: chunkCTL42ZRR_js.normalizeHexColor(style?.fillColor, chunkCTL42ZRR_js.DEFAULT_FILL_COLOR),
20987
+ color: chunkXRFJ7TAF_js.normalizeHexColor(style?.fillColor, chunkXRFJ7TAF_js.DEFAULT_FILL_COLOR),
20984
20988
  position: 50,
20985
20989
  opacity: 1
20986
20990
  }
@@ -20994,9 +20998,9 @@ function FillAdvancedControls({
20994
20998
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${COL2} flex flex-col gap-2`, children: [
20995
20999
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: "Pattern" }),
20996
21000
  /* @__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) => {
20997
- const fgColor = chunkCTL42ZRR_js.normalizeHexColor(style?.fillColor, chunkCTL42ZRR_js.DEFAULT_FILL_COLOR);
20998
- const bgColor = chunkCTL42ZRR_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
20999
- const svgPattern = chunkCTL42ZRR_js.getPatternSvg(opt.value, fgColor, bgColor);
21001
+ const fgColor = chunkXRFJ7TAF_js.normalizeHexColor(style?.fillColor, chunkXRFJ7TAF_js.DEFAULT_FILL_COLOR);
21002
+ const bgColor = chunkXRFJ7TAF_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
21003
+ const svgPattern = chunkXRFJ7TAF_js.getPatternSvg(opt.value, fgColor, bgColor);
21000
21004
  const isSelected = (style.fillPatternPreset || "pct20") === opt.value;
21001
21005
  return /* @__PURE__ */ jsxRuntime.jsx(
21002
21006
  "button",
@@ -21029,7 +21033,7 @@ function FillAdvancedControls({
21029
21033
  {
21030
21034
  label: t("pptx.fillAdvanced.foregroundColor"),
21031
21035
  prefix: "pattern-fg",
21032
- value: chunkCTL42ZRR_js.normalizeHexColor(style?.fillColor, chunkCTL42ZRR_js.DEFAULT_FILL_COLOR),
21036
+ value: chunkXRFJ7TAF_js.normalizeHexColor(style?.fillColor, chunkXRFJ7TAF_js.DEFAULT_FILL_COLOR),
21033
21037
  disabled: isLine,
21034
21038
  onChange: (color) => onUpdateShapeStyle({ fillMode: "pattern", fillColor: color })
21035
21039
  }
@@ -21039,7 +21043,7 @@ function FillAdvancedControls({
21039
21043
  {
21040
21044
  label: t("pptx.fillAdvanced.backgroundColor"),
21041
21045
  prefix: "pattern-bg",
21042
- value: chunkCTL42ZRR_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
21046
+ value: chunkXRFJ7TAF_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
21043
21047
  disabled: isLine,
21044
21048
  onChange: (color) => onUpdateShapeStyle({
21045
21049
  fillMode: "pattern",
@@ -21106,11 +21110,11 @@ function QuickStylesGallery({
21106
21110
  onUpdateShapeStyle
21107
21111
  }) {
21108
21112
  const { t } = reactI18next.useTranslation();
21109
- const { viewportWidth } = chunkK3EGXT6W_js.useIsMobile();
21113
+ const { viewportWidth } = chunk355ICDU6_js.useIsMobile();
21110
21114
  const swatchMinHeight = pptx.getDensePanelTouchTargetPx(viewportWidth);
21111
21115
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
21112
21116
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: t("pptx.shape.quickStyles") }),
21113
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-6 gap-1", children: chunkCTL42ZRR_js.SHAPE_QUICK_STYLES.map((qs, idx) => /* @__PURE__ */ jsxRuntime.jsx(
21117
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-6 gap-1", children: chunkXRFJ7TAF_js.SHAPE_QUICK_STYLES.map((qs, idx) => /* @__PURE__ */ jsxRuntime.jsx(
21114
21118
  "button",
21115
21119
  {
21116
21120
  type: "button",
@@ -21137,7 +21141,7 @@ function StrokeEffectsSection({
21137
21141
  {
21138
21142
  label: t("pptx.inspector.stroke"),
21139
21143
  prefix: "stroke",
21140
- value: chunkCTL42ZRR_js.normalizeHexColor(style?.strokeColor, chunkCTL42ZRR_js.DEFAULT_STROKE_COLOR),
21144
+ value: chunkXRFJ7TAF_js.normalizeHexColor(style?.strokeColor, chunkXRFJ7TAF_js.DEFAULT_STROKE_COLOR),
21141
21145
  selectedRef: style?.strokeColorRef,
21142
21146
  onChange: onSetStrokeColor
21143
21147
  }
@@ -21200,7 +21204,7 @@ function StrokeEffectsSection({
21200
21204
  strokeDash: e.target.value
21201
21205
  }),
21202
21206
  className: SEL,
21203
- children: chunkCTL42ZRR_js.STROKE_DASH_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
21207
+ children: chunkXRFJ7TAF_js.STROKE_DASH_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
21204
21208
  }
21205
21209
  )
21206
21210
  ] }),
@@ -21290,10 +21294,10 @@ function FillStrokeProperties({
21290
21294
  return;
21291
21295
  }
21292
21296
  if (nextMode === "gradient") {
21293
- const existing = chunkCTL42ZRR_js.sanitizeGradientStops(style?.fillGradientStops);
21297
+ const existing = chunkXRFJ7TAF_js.sanitizeGradientStops(style?.fillGradientStops);
21294
21298
  const stops = existing.length >= 2 ? existing : [
21295
21299
  {
21296
- color: chunkCTL42ZRR_js.normalizeHexColor(style?.fillColor, chunkCTL42ZRR_js.DEFAULT_FILL_COLOR),
21300
+ color: chunkXRFJ7TAF_js.normalizeHexColor(style?.fillColor, chunkXRFJ7TAF_js.DEFAULT_FILL_COLOR),
21297
21301
  position: 0,
21298
21302
  opacity: 1
21299
21303
  },
@@ -21318,7 +21322,7 @@ function FillStrokeProperties({
21318
21322
  onUpdateShapeStyle({ fillMode: "solid" });
21319
21323
  };
21320
21324
  const gradientStops = selectedGradientStops.length > 0 ? selectedGradientStops : [
21321
- { color: chunkCTL42ZRR_js.DEFAULT_FILL_COLOR, position: 0 },
21325
+ { color: chunkXRFJ7TAF_js.DEFAULT_FILL_COLOR, position: 0 },
21322
21326
  { color: "#ffffff", position: 100 }
21323
21327
  ];
21324
21328
  const showGradient = style?.fillMode === "gradient" || selectedGradientStops.length > 0;
@@ -21345,7 +21349,7 @@ function FillStrokeProperties({
21345
21349
  {
21346
21350
  label: t("pptx.fill.fill"),
21347
21351
  prefix: "fill",
21348
- value: chunkCTL42ZRR_js.normalizeHexColor(style?.fillColor, chunkCTL42ZRR_js.DEFAULT_FILL_COLOR),
21352
+ value: chunkXRFJ7TAF_js.normalizeHexColor(style?.fillColor, chunkXRFJ7TAF_js.DEFAULT_FILL_COLOR),
21349
21353
  selectedRef: style?.fillColorRef,
21350
21354
  disabled: line,
21351
21355
  onChange: onSetFillColor
@@ -21429,7 +21433,7 @@ function Text3DProperties({
21429
21433
  "input",
21430
21434
  {
21431
21435
  type: "color",
21432
- value: chunkCTL42ZRR_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21436
+ value: chunkXRFJ7TAF_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21433
21437
  onChange: (e) => {
21434
21438
  update3d({ extrusionColor: e.target.value });
21435
21439
  pushColor(e.target.value);
@@ -21620,7 +21624,7 @@ function AdvancedTextFormatting({
21620
21624
  "input",
21621
21625
  {
21622
21626
  type: "color",
21623
- value: chunkCTL42ZRR_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21627
+ value: chunkXRFJ7TAF_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21624
21628
  onChange: (e) => {
21625
21629
  onUpdateTextStyle({ highlightColor: e.target.value });
21626
21630
  pushColor(e.target.value);
@@ -21924,7 +21928,7 @@ function TextEffectsPanel({
21924
21928
  "input",
21925
21929
  {
21926
21930
  type: "color",
21927
- value: chunkCTL42ZRR_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21931
+ value: chunkXRFJ7TAF_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21928
21932
  onChange: (e) => {
21929
21933
  onUpdateTextStyle({ textShadowColor: e.target.value });
21930
21934
  pushColor(e.target.value);
@@ -22031,7 +22035,7 @@ function TextEffectsPanel({
22031
22035
  "input",
22032
22036
  {
22033
22037
  type: "color",
22034
- value: chunkCTL42ZRR_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
22038
+ value: chunkXRFJ7TAF_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
22035
22039
  onChange: (e) => {
22036
22040
  onUpdateTextStyle({ textGlowColor: e.target.value });
22037
22041
  pushColor(e.target.value);
@@ -22130,7 +22134,7 @@ function TextAdvancedSections({
22130
22134
  canEdit,
22131
22135
  onUpdateTextStyle
22132
22136
  }) {
22133
- if (!(0, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(selectedElement)) {
22137
+ if (!(0, chunkXRFJ7TAF_js.dist_exports.hasTextProperties)(selectedElement)) {
22134
22138
  return null;
22135
22139
  }
22136
22140
  const ts = selectedElement.textStyle;
@@ -22159,22 +22163,22 @@ function ShapeTextPanels({
22159
22163
  }) {
22160
22164
  const { t } = reactI18next.useTranslation();
22161
22165
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22162
- (0, chunkCTL42ZRR_js.dist_exports.hasShapeProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
22166
+ (0, chunkXRFJ7TAF_js.dist_exports.hasShapeProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
22163
22167
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.shape.type", "Shape Type") }),
22164
22168
  /* @__PURE__ */ jsxRuntime.jsx(
22165
22169
  WebSelect,
22166
22170
  {
22167
22171
  value: selectedElement.shapeType || "rect",
22168
22172
  disabled: !canEdit,
22169
- className: chunkCTL42ZRR_js.cn(INPUT2, "w-full"),
22173
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "w-full"),
22170
22174
  onChange: (e) => onUpdateElement({
22171
22175
  shapeType: e.target.value
22172
22176
  }),
22173
- children: chunkCTL42ZRR_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
22177
+ children: chunkXRFJ7TAF_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
22174
22178
  }
22175
22179
  )
22176
22180
  ] }),
22177
- (0, chunkCTL42ZRR_js.dist_exports.hasShapeProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, "data-pptx-fill-stroke": true, "data-pptx-inspector-section": "fill-stroke", children: [
22181
+ (0, chunkXRFJ7TAF_js.dist_exports.hasShapeProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, "data-pptx-fill-stroke": true, "data-pptx-inspector-section": "fill-stroke", children: [
22178
22182
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.shape.fillStroke", "Fill & Stroke") }),
22179
22183
  /* @__PURE__ */ jsxRuntime.jsx(
22180
22184
  FillStrokeProperties,
@@ -22182,7 +22186,7 @@ function ShapeTextPanels({
22182
22186
  selectedElement,
22183
22187
  selectedShapeStyle: selectedElement.shapeStyle,
22184
22188
  selectedShapeType: selectedElement.shapeType,
22185
- selectedGradientStops: chunkCTL42ZRR_js.sanitizeGradientStops(
22189
+ selectedGradientStops: chunkXRFJ7TAF_js.sanitizeGradientStops(
22186
22190
  selectedElement.shapeStyle?.fillGradientStops
22187
22191
  ),
22188
22192
  canEdit,
@@ -22192,7 +22196,7 @@ function ShapeTextPanels({
22192
22196
  }
22193
22197
  )
22194
22198
  ] }),
22195
- (0, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, "data-pptx-text-card": true, children: [
22199
+ (0, chunkXRFJ7TAF_js.dist_exports.hasTextProperties)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, "data-pptx-text-card": true, children: [
22196
22200
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.text.title", "Text") }),
22197
22201
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-1.5 text-[11px]", children: [
22198
22202
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -22218,7 +22222,7 @@ function ShapeTextPanels({
22218
22222
  {
22219
22223
  disabled: !canEdit,
22220
22224
  ariaLabel: "Text Color",
22221
- value: chunkCTL42ZRR_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
22225
+ value: chunkXRFJ7TAF_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
22222
22226
  className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
22223
22227
  onCommit: (hex) => onUpdateTextStyle({ color: hex, colorRef: void 0 })
22224
22228
  }
@@ -22310,7 +22314,7 @@ function TextFormatToggle({
22310
22314
  {
22311
22315
  type: "button",
22312
22316
  disabled,
22313
- className: chunkCTL42ZRR_js.cn(
22317
+ className: chunkXRFJ7TAF_js.cn(
22314
22318
  "px-2 py-1 rounded text-[11px] transition-colors max-md:min-w-[44px]! max-md:min-h-[44px]!",
22315
22319
  italic && "italic",
22316
22320
  underline && "underline",
@@ -22468,7 +22472,7 @@ var THUMB_COMPONENTS = {
22468
22472
  chevron: ChevronThumb,
22469
22473
  bending: BendingThumb
22470
22474
  };
22471
- var LAYOUT_DESCRIPTORS = chunkCTL42ZRR_js.dist_exports.SWITCHABLE_LAYOUT_TYPES.map((type) => ({
22475
+ var LAYOUT_DESCRIPTORS = chunkXRFJ7TAF_js.dist_exports.SWITCHABLE_LAYOUT_TYPES.map((type) => ({
22472
22476
  type,
22473
22477
  i18nKey: `pptx.smartart.category.${type}`
22474
22478
  }));
@@ -22496,7 +22500,7 @@ function SmartArtLayoutSwitcher({
22496
22500
  type: "button",
22497
22501
  "data-testid": `smartart-layout-${type}`,
22498
22502
  disabled: !canEdit,
22499
- className: chunkCTL42ZRR_js.cn(
22503
+ className: chunkXRFJ7TAF_js.cn(
22500
22504
  "flex flex-col items-center gap-0.5 rounded border p-1.5 transition-colors",
22501
22505
  "text-[9px] leading-tight",
22502
22506
  isActive ? "border-primary bg-primary/15 text-primary" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground",
@@ -22575,7 +22579,7 @@ function SmartArtNodeStyleControls({
22575
22579
  disabled: !canEdit,
22576
22580
  "aria-label": `Bold ${label}`,
22577
22581
  "aria-pressed": bold,
22578
- className: chunkCTL42ZRR_js.cn(
22582
+ className: chunkXRFJ7TAF_js.cn(
22579
22583
  EMPHASIS_BTN,
22580
22584
  "font-bold",
22581
22585
  bold ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground"
@@ -22591,7 +22595,7 @@ function SmartArtNodeStyleControls({
22591
22595
  disabled: !canEdit,
22592
22596
  "aria-label": `Italic ${label}`,
22593
22597
  "aria-pressed": italic,
22594
- className: chunkCTL42ZRR_js.cn(
22598
+ className: chunkXRFJ7TAF_js.cn(
22595
22599
  EMPHASIS_BTN,
22596
22600
  "italic",
22597
22601
  italic ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground"
@@ -22630,7 +22634,7 @@ function SmartArtNodeRow({
22630
22634
  "div",
22631
22635
  {
22632
22636
  role: "listitem",
22633
- className: chunkCTL42ZRR_js.cn(
22637
+ className: chunkXRFJ7TAF_js.cn(
22634
22638
  "rounded border bg-background/60 p-1.5",
22635
22639
  isChild ? "border-border/60 ml-4" : "border-border"
22636
22640
  ),
@@ -22645,7 +22649,7 @@ function SmartArtNodeRow({
22645
22649
  "data-testid": "smartart-node-text",
22646
22650
  disabled: !canEdit,
22647
22651
  "aria-label": label,
22648
- className: chunkCTL42ZRR_js.cn(INPUT2, "flex-1 text-[11px] py-0.5"),
22652
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "flex-1 text-[11px] py-0.5"),
22649
22653
  value: text,
22650
22654
  onChange: (e) => onChangeText(nodeId, e.target.value),
22651
22655
  onKeyDown: (e) => onKeyDown(e, nodeId),
@@ -22694,7 +22698,7 @@ function SmartArtNodeRow({
22694
22698
  {
22695
22699
  type: "button",
22696
22700
  disabled: !canEdit || removeDisabled,
22697
- className: chunkCTL42ZRR_js.cn(MINI_BTN, "hover:text-red-400"),
22701
+ className: chunkXRFJ7TAF_js.cn(MINI_BTN, "hover:text-red-400"),
22698
22702
  onClick: () => onRemove(nodeId),
22699
22703
  "aria-label": `Remove ${label}`,
22700
22704
  title: removeDisabled ? t("pptx.smartArt.layoutMinimum") : t("pptx.smartArt.remove"),
@@ -22737,7 +22741,7 @@ function SmartArtStyleControls({
22737
22741
  disabled: !canEdit,
22738
22742
  "data-testid": "smartart-color-scheme",
22739
22743
  "aria-label": t("pptx.smartart.colorScheme"),
22740
- className: chunkCTL42ZRR_js.cn(INPUT2, "w-full"),
22744
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "w-full"),
22741
22745
  value: colorScheme,
22742
22746
  onChange: (e) => onChangeColorScheme(e.target.value),
22743
22747
  children: colorSchemes.map((cs) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: cs, children: pptx.schemaLabel(pptx.SMARTART_COLOR_SCHEME_LABEL_KEYS, cs, translate) }, cs))
@@ -22752,7 +22756,7 @@ function SmartArtStyleControls({
22752
22756
  type: "button",
22753
22757
  disabled: !canEdit,
22754
22758
  "aria-pressed": style === s,
22755
- className: chunkCTL42ZRR_js.cn(
22759
+ className: chunkXRFJ7TAF_js.cn(
22756
22760
  "flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
22757
22761
  style === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
22758
22762
  ),
@@ -22798,7 +22802,7 @@ function SmartArtPropertiesPanel({
22798
22802
  const reflowed = box ? pptx.rebuildDrawingShapesIfCleared(
22799
22803
  newData,
22800
22804
  newData.layout,
22801
- chunkK3EGXT6W_js.resolveSmartArtDataPalette(newData),
22805
+ chunk355ICDU6_js.resolveSmartArtDataPalette(newData),
22802
22806
  newData.style ?? "flat",
22803
22807
  "inspector",
22804
22808
  box
@@ -22809,10 +22813,10 @@ function SmartArtPropertiesPanel({
22809
22813
  applySmartArtData({ ...smartArtData, ...patch });
22810
22814
  };
22811
22815
  const handleUpdateNodeText = (nodeId, text) => {
22812
- applySmartArtData((0, chunkCTL42ZRR_js.dist_exports.updateSmartArtNodeText)(smartArtData, nodeId, text));
22816
+ applySmartArtData((0, chunkXRFJ7TAF_js.dist_exports.updateSmartArtNodeText)(smartArtData, nodeId, text));
22813
22817
  };
22814
22818
  const handleChangeNodeStyle = (nodeId, patch) => {
22815
- const next = (0, chunkCTL42ZRR_js.dist_exports.setSmartArtNodeStyle)(smartArtData, nodeId, patch);
22819
+ const next = (0, chunkXRFJ7TAF_js.dist_exports.setSmartArtNodeStyle)(smartArtData, nodeId, patch);
22816
22820
  if (next !== smartArtData) {
22817
22821
  applySmartArtData(next);
22818
22822
  }
@@ -22821,17 +22825,17 @@ function SmartArtPropertiesPanel({
22821
22825
  if (!pptx.canAddTopLevelNode(layout, topLevelCount)) {
22822
22826
  return;
22823
22827
  }
22824
- applySmartArtData((0, chunkCTL42ZRR_js.dist_exports.addSmartArtNodeAsChild)(smartArtData));
22828
+ applySmartArtData((0, chunkXRFJ7TAF_js.dist_exports.addSmartArtNodeAsChild)(smartArtData));
22825
22829
  };
22826
22830
  const addSubItem = (parentId) => {
22827
- applySmartArtData((0, chunkCTL42ZRR_js.dist_exports.addSmartArtNodeAsChild)(smartArtData, parentId, "Sub-item"));
22831
+ applySmartArtData((0, chunkXRFJ7TAF_js.dist_exports.addSmartArtNodeAsChild)(smartArtData, parentId, "Sub-item"));
22828
22832
  };
22829
22833
  const removeNode = (nodeId) => {
22830
22834
  const isTopLevel = !nodes.find((n) => n.id === nodeId)?.parentId;
22831
22835
  if (isTopLevel && !pptx.canRemoveTopLevelNode(layout, topLevelCount)) {
22832
22836
  return;
22833
22837
  }
22834
- applySmartArtData((0, chunkCTL42ZRR_js.dist_exports.removeSmartArtNode)(smartArtData, nodeId));
22838
+ applySmartArtData((0, chunkXRFJ7TAF_js.dist_exports.removeSmartArtNode)(smartArtData, nodeId));
22835
22839
  };
22836
22840
  const moveNode = (nodeId, direction) => {
22837
22841
  const next = pptx.reorder(smartArtData, nodeId, direction);
@@ -22987,7 +22991,7 @@ function TableDataGrid({
22987
22991
  }) {
22988
22992
  const { t } = reactI18next.useTranslation();
22989
22993
  const grid = pptx.buildTableDataGrid(tableElement);
22990
- const { viewportWidth } = chunkK3EGXT6W_js.useIsMobile();
22994
+ const { viewportWidth } = chunk355ICDU6_js.useIsMobile();
22991
22995
  const gridPlan = pptx.getDenseGridLayoutPlan(viewportWidth);
22992
22996
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
22993
22997
  const stickyGutterClass = gridPlan.stickyFirstColumn ? "sticky left-0 z-10" : "";
@@ -23399,7 +23403,7 @@ function TableCellColorField({
23399
23403
  disabled,
23400
23404
  onCommit
23401
23405
  }) {
23402
- const hex = chunkCTL42ZRR_js.normalizeHexColor(value, fallback);
23406
+ const hex = chunkXRFJ7TAF_js.normalizeHexColor(value, fallback);
23403
23407
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
23404
23408
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
23405
23409
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -23444,12 +23448,7 @@ function TableCellFormattingPanel({
23444
23448
  }
23445
23449
  return {
23446
23450
  ...row,
23447
- cells: row.cells.map((c, ci) => {
23448
- if (ci !== columnIndex) {
23449
- return c;
23450
- }
23451
- return { ...c, style: { ...cs, ...updates } };
23452
- })
23451
+ cells: row.cells.map((c, ci) => ci === columnIndex ? pptx.withCellStyle(c, updates) : c)
23453
23452
  };
23454
23453
  });
23455
23454
  onUpdateTableData({ rows: newRows });
@@ -23515,7 +23514,7 @@ function TableCellFormattingPanel({
23515
23514
  {
23516
23515
  type: "button",
23517
23516
  disabled: !canEdit,
23518
- className: chunkCTL42ZRR_js.cn(
23517
+ className: chunkXRFJ7TAF_js.cn(
23519
23518
  "px-2 py-1 rounded text-[11px] transition-colors",
23520
23519
  cls,
23521
23520
  cs[key] ? "bg-primary text-white" : "bg-muted hover:bg-accent"
@@ -23534,7 +23533,7 @@ function TableCellFormattingPanel({
23534
23533
  {
23535
23534
  type: "button",
23536
23535
  disabled: !canEdit,
23537
- className: chunkCTL42ZRR_js.cn(
23536
+ className: chunkXRFJ7TAF_js.cn(
23538
23537
  "px-2 py-1 rounded text-[11px] transition-colors",
23539
23538
  cs.align === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
23540
23539
  ),
@@ -23552,7 +23551,7 @@ function TableCellFormattingPanel({
23552
23551
  {
23553
23552
  type: "button",
23554
23553
  disabled: !canEdit,
23555
- className: chunkCTL42ZRR_js.cn(
23554
+ className: chunkXRFJ7TAF_js.cn(
23556
23555
  "px-2 py-1 rounded text-[11px] transition-colors",
23557
23556
  cs.vAlign === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
23558
23557
  ),
@@ -23575,7 +23574,7 @@ function TableCellFormattingPanel({
23575
23574
  DebouncedColorInput,
23576
23575
  {
23577
23576
  disabled: !canEdit,
23578
- value: chunkCTL42ZRR_js.normalizeHexColor(cs[colorKey], "#374151"),
23577
+ value: chunkXRFJ7TAF_js.normalizeHexColor(cs[colorKey], "#374151"),
23579
23578
  className: "w-7 h-6 rounded border border-border bg-transparent cursor-pointer shrink-0",
23580
23579
  onCommit: (hex) => updateCellStyle({ [colorKey]: hex })
23581
23580
  }
@@ -23585,7 +23584,7 @@ function TableCellFormattingPanel({
23585
23584
  {
23586
23585
  type: "number",
23587
23586
  disabled: !canEdit,
23588
- className: chunkCTL42ZRR_js.cn(INPUT2, "w-14"),
23587
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "w-14"),
23589
23588
  min: 0,
23590
23589
  max: 10,
23591
23590
  value: cs[widthKey] ?? 1,
@@ -23601,7 +23600,7 @@ function TableCellFormattingPanel({
23601
23600
  {
23602
23601
  type: "button",
23603
23602
  disabled: !canEdit,
23604
- className: chunkCTL42ZRR_js.cn(BTN2, "text-center"),
23603
+ className: chunkXRFJ7TAF_js.cn(BTN2, "text-center"),
23605
23604
  onClick: () => {
23606
23605
  const newRows = pptx.computeMergeCellRight(td, rowIndex, columnIndex);
23607
23606
  if (newRows) {
@@ -23616,7 +23615,7 @@ function TableCellFormattingPanel({
23616
23615
  {
23617
23616
  type: "button",
23618
23617
  disabled: !canEdit,
23619
- className: chunkCTL42ZRR_js.cn(BTN2, "text-center"),
23618
+ className: chunkXRFJ7TAF_js.cn(BTN2, "text-center"),
23620
23619
  onClick: () => {
23621
23620
  const newRows = pptx.computeMergeCellDown(td, rowIndex, columnIndex);
23622
23621
  if (newRows) {
@@ -23631,7 +23630,7 @@ function TableCellFormattingPanel({
23631
23630
  {
23632
23631
  type: "button",
23633
23632
  disabled: !canEdit,
23634
- className: chunkCTL42ZRR_js.cn(BTN2, "text-center"),
23633
+ className: chunkXRFJ7TAF_js.cn(BTN2, "text-center"),
23635
23634
  onClick: () => {
23636
23635
  const newRows = pptx.computeSplitCell(td, rowIndex, columnIndex);
23637
23636
  if (newRows) {
@@ -23817,7 +23816,7 @@ function TableStyleEditor({
23817
23816
  const { t } = reactI18next.useTranslation();
23818
23817
  const themeColorMap = useThemeColorMap();
23819
23818
  const [activeStyleId, setActiveStyleId] = React97.useState(
23820
- styleId ? (0, chunkCTL42ZRR_js.dist_exports.normalizeTableStyleGuid)(styleId) : ""
23819
+ styleId ? (0, chunkXRFJ7TAF_js.dist_exports.normalizeTableStyleGuid)(styleId) : ""
23821
23820
  );
23822
23821
  const [selectedPart, setSelectedPart] = React97.useState("wholeTbl");
23823
23822
  const entry = activeStyleId ? styleMap?.[activeStyleId] : void 0;
@@ -23838,8 +23837,8 @@ function TableStyleEditor({
23838
23837
  return;
23839
23838
  }
23840
23839
  const nextMap = { ...styleMap ?? {} };
23841
- const created = (0, chunkCTL42ZRR_js.dist_exports.createTableStyleEntry)(nextMap, { styleName: name, basedOn: entry });
23842
- (0, chunkCTL42ZRR_js.dist_exports.addTableStyleToMap)(nextMap, created);
23840
+ const created = (0, chunkXRFJ7TAF_js.dist_exports.createTableStyleEntry)(nextMap, { styleName: name, basedOn: entry });
23841
+ (0, chunkXRFJ7TAF_js.dist_exports.addTableStyleToMap)(nextMap, created);
23843
23842
  onStyleMapChange(nextMap);
23844
23843
  setActiveStyleId(created.styleId);
23845
23844
  onAssignStyle?.(created.styleId);
@@ -23849,7 +23848,7 @@ function TableStyleEditor({
23849
23848
  return;
23850
23849
  }
23851
23850
  const nextMap = { ...styleMap };
23852
- (0, chunkCTL42ZRR_js.dist_exports.deleteTableStyleFromMap)(nextMap, entry.styleId);
23851
+ (0, chunkXRFJ7TAF_js.dist_exports.deleteTableStyleFromMap)(nextMap, entry.styleId);
23853
23852
  onStyleMapChange(nextMap);
23854
23853
  onDeleteStyle(entry.styleId);
23855
23854
  onClose();
@@ -23903,7 +23902,7 @@ function TablePropertiesPanel({
23903
23902
  const updateMergeRows = (rows) => {
23904
23903
  const tableData = { ...td, rows };
23905
23904
  const updates = { tableData };
23906
- const rawXml = (0, chunkCTL42ZRR_js.dist_exports.updateMergeAttrsInRawXml)(tableElement, tableData);
23905
+ const rawXml = (0, chunkXRFJ7TAF_js.dist_exports.updateMergeAttrsInRawXml)(tableElement, tableData);
23907
23906
  if (rawXml) {
23908
23907
  updates.rawXml = rawXml;
23909
23908
  }
@@ -23969,7 +23968,7 @@ function TablePropertiesPanel({
23969
23968
  ] }),
23970
23969
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
23971
23970
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.table.stylePresets") }),
23972
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunkCTL42ZRR_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23971
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunkXRFJ7TAF_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23973
23972
  "button",
23974
23973
  {
23975
23974
  type: "button",
@@ -24197,7 +24196,7 @@ function ElementInspectorBody({
24197
24196
  box: { width: selectedElement.width, height: selectedElement.height }
24198
24197
  }
24199
24198
  ),
24200
- (0, chunkCTL42ZRR_js.dist_exports.isImageLikeElement)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsx(
24199
+ (0, chunkXRFJ7TAF_js.dist_exports.isImageLikeElement)(selectedElement) && /* @__PURE__ */ jsxRuntime.jsx(
24201
24200
  ImagePropertiesPanel,
24202
24201
  {
24203
24202
  selectedElement,
@@ -24362,7 +24361,7 @@ function CommentMentionTextarea({
24362
24361
  "data-testid": "pptx-comment-mention-option",
24363
24362
  role: "option",
24364
24363
  "aria-selected": index === safeHighlighted,
24365
- className: chunkCTL42ZRR_js.cn(
24364
+ className: chunkXRFJ7TAF_js.cn(
24366
24365
  "block w-full px-2 py-1 text-left text-[11px] hover:bg-accent",
24367
24366
  index === safeHighlighted && "bg-accent"
24368
24367
  ),
@@ -24485,7 +24484,7 @@ function InspectorCommentRow({
24485
24484
  return /* @__PURE__ */ jsxRuntime.jsxs(
24486
24485
  "div",
24487
24486
  {
24488
- className: chunkCTL42ZRR_js.cn(
24487
+ className: chunkXRFJ7TAF_js.cn(
24489
24488
  "rounded border border-border bg-card p-2",
24490
24489
  depth > 0 && "ml-3 border-l-2 border-l-primary/40"
24491
24490
  ),
@@ -24498,7 +24497,7 @@ function InspectorCommentRow({
24498
24497
  t("pptx.comments.resolved")
24499
24498
  ] })
24500
24499
  ] }),
24501
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunkCTL42ZRR_js.formatCommentTimestamp(comment.createdAt) })
24500
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunkXRFJ7TAF_js.formatCommentTimestamp(comment.createdAt) })
24502
24501
  ] }),
24503
24502
  comment.elementId && (targetElement ? /* @__PURE__ */ jsxRuntime.jsxs(
24504
24503
  "button",
@@ -24506,12 +24505,12 @@ function InspectorCommentRow({
24506
24505
  type: "button",
24507
24506
  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",
24508
24507
  title: t("pptx.comments.commentingOn", {
24509
- element: chunkCTL42ZRR_js.getElementLabel(targetElement)
24508
+ element: chunkXRFJ7TAF_js.getElementLabel(targetElement)
24510
24509
  }),
24511
24510
  onClick: () => onSelectElement(targetElement.id),
24512
24511
  children: [
24513
24512
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
24514
- chunkCTL42ZRR_js.getElementLabel(targetElement)
24513
+ chunkXRFJ7TAF_js.getElementLabel(targetElement)
24515
24514
  ]
24516
24515
  }
24517
24516
  ) : /* @__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") })),
@@ -24580,7 +24579,7 @@ function InspectorCommentRow({
24580
24579
  "button",
24581
24580
  {
24582
24581
  type: "button",
24583
- className: chunkCTL42ZRR_js.cn(
24582
+ className: chunkXRFJ7TAF_js.cn(
24584
24583
  "inline-flex items-center justify-center p-1.5 border-l border-border transition-colors",
24585
24584
  comment.resolved ? "bg-green-900/40 text-green-300 hover:bg-green-900/60" : "hover:bg-accent text-foreground hover:text-foreground"
24586
24585
  ),
@@ -24723,7 +24722,7 @@ function InspectorCommentsSection({
24723
24722
  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: [
24724
24723
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
24725
24724
  t("pptx.comments.commentingOn", {
24726
- element: chunkCTL42ZRR_js.getElementLabel(selectedElement)
24725
+ element: chunkXRFJ7TAF_js.getElementLabel(selectedElement)
24727
24726
  })
24728
24727
  ] }),
24729
24728
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -24734,7 +24733,7 @@ function InspectorCommentsSection({
24734
24733
  authors: commentAuthors,
24735
24734
  rows: 2,
24736
24735
  placeholder: selectedElement ? t("pptx.comments.addOnElement", {
24737
- element: chunkCTL42ZRR_js.getElementLabel(selectedElement)
24736
+ element: chunkXRFJ7TAF_js.getElementLabel(selectedElement)
24738
24737
  }) : t("pptx.comments.addPlaceholder"),
24739
24738
  className: "w-full bg-muted border border-border rounded px-2 py-1 text-xs resize-y outline-none focus:border-primary",
24740
24739
  onChange: onSetCommentDraft,
@@ -24747,7 +24746,7 @@ function InspectorCommentsSection({
24747
24746
  type: "button",
24748
24747
  onClick: onAddComment,
24749
24748
  disabled: !commentDraft.trim(),
24750
- className: chunkCTL42ZRR_js.cn(
24749
+ className: chunkXRFJ7TAF_js.cn(
24751
24750
  "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]!",
24752
24751
  commentDraft.trim() ? "bg-primary hover:bg-primary/80 text-white" : "bg-muted text-muted-foreground cursor-not-allowed"
24753
24752
  ),
@@ -24761,7 +24760,7 @@ function InspectorCommentsSection({
24761
24760
  ] });
24762
24761
  }
24763
24762
  function elementLabel(element) {
24764
- const text = (0, chunkCTL42ZRR_js.dist_exports.hasTextProperties)(element) ? (element.text || "").slice(0, 24) : void 0;
24763
+ const text = (0, chunkXRFJ7TAF_js.dist_exports.hasTextProperties)(element) ? (element.text || "").slice(0, 24) : void 0;
24765
24764
  return text || element.type;
24766
24765
  }
24767
24766
  function InspectorElementsTab({
@@ -24788,13 +24787,13 @@ function InspectorElementsTab({
24788
24787
  };
24789
24788
  if (!activeSlide) {
24790
24789
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
24791
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkCTL42ZRR_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24790
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkXRFJ7TAF_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24792
24791
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground italic", children: t("pptx.inspector.noSlideSelected") })
24793
24792
  ] });
24794
24793
  }
24795
24794
  const elements = activeSlide.elements || [];
24796
24795
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", "data-pptx-elements-tab": true, children: [
24797
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkCTL42ZRR_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24796
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkXRFJ7TAF_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24798
24797
  [...elements].reverse().map((el, reversedIndex) => {
24799
24798
  const index = elements.length - 1 - reversedIndex;
24800
24799
  const selected = selectedElementId === el.id || selectedElementIds.includes(el.id);
@@ -24802,7 +24801,7 @@ function InspectorElementsTab({
24802
24801
  "div",
24803
24802
  {
24804
24803
  title: `${el.type} - ${el.id}`,
24805
- className: chunkCTL42ZRR_js.cn(
24804
+ className: chunkXRFJ7TAF_js.cn(
24806
24805
  "flex items-center gap-2 px-2 py-1 rounded cursor-pointer transition-colors",
24807
24806
  selected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground"
24808
24807
  ),
@@ -24839,7 +24838,7 @@ function InspectorPaneHeader({
24839
24838
  onClose
24840
24839
  }) {
24841
24840
  const { t } = reactI18next.useTranslation();
24842
- const { viewportWidth } = chunkK3EGXT6W_js.useIsMobile();
24841
+ const { viewportWidth } = chunk355ICDU6_js.useIsMobile();
24843
24842
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
24844
24843
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
24845
24844
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -24862,7 +24861,7 @@ function InspectorPaneHeader({
24862
24861
  type: "button",
24863
24862
  title: t(labelKey),
24864
24863
  style: touchBtnStyle,
24865
- className: chunkCTL42ZRR_js.cn(
24864
+ className: chunkXRFJ7TAF_js.cn(
24866
24865
  "flex items-center justify-center gap-1 px-2 py-1 rounded text-[11px] transition-colors",
24867
24866
  activeTab === key ? "bg-primary text-white" : "text-muted-foreground hover:text-foreground hover:bg-accent"
24868
24867
  ),
@@ -24976,7 +24975,7 @@ function CustomPropertiesBlock({
24976
24975
  "button",
24977
24976
  {
24978
24977
  type: "button",
24979
- className: chunkCTL42ZRR_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24978
+ className: chunkXRFJ7TAF_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24980
24979
  onClick: () => onUpdate(customProperties.filter((_, i) => i !== index)),
24981
24980
  children: "\xD7"
24982
24981
  }
@@ -25304,7 +25303,7 @@ function PresentationSettingsCard({
25304
25303
  min: 1,
25305
25304
  max: 16,
25306
25305
  disabled: !canEdit,
25307
- className: chunkCTL42ZRR_js.cn(INPUT2, "w-20"),
25306
+ className: chunkXRFJ7TAF_js.cn(INPUT2, "w-20"),
25308
25307
  value: pptx.printPropertiesSlidesPerPage(presentationProperties.printProperties),
25309
25308
  onChange: (e) => onUpdate({
25310
25309
  printProperties: pptx.withSlidesPerPage(
@@ -25392,14 +25391,14 @@ function SlideThemeOverridePanel({
25392
25391
  const translate = React97.useCallback((key) => t(key), [t]);
25393
25392
  const override = activeSlide?.clrMapOverride;
25394
25393
  const isOverrideActive = override !== void 0;
25395
- const targetSlotOptions = React97.useMemo(() => [...chunkCTL42ZRR_js.dist_exports.THEME_COLOR_SCHEME_KEYS], []);
25394
+ const targetSlotOptions = React97.useMemo(() => [...chunkXRFJ7TAF_js.dist_exports.THEME_COLOR_SCHEME_KEYS], []);
25396
25395
  const commitOverride = React97.useCallback(
25397
25396
  (nextOverride) => {
25398
25397
  if (!activeSlide || !theme?.colorScheme) {
25399
25398
  onUpdateSlide({ clrMapOverride: nextOverride });
25400
25399
  return;
25401
25400
  }
25402
- const nextSlide = (0, chunkCTL42ZRR_js.dist_exports.applyThemeOverrideToSlide)(activeSlide, theme.colorScheme, nextOverride);
25401
+ const nextSlide = (0, chunkXRFJ7TAF_js.dist_exports.applyThemeOverrideToSlide)(activeSlide, theme.colorScheme, nextOverride);
25403
25402
  onUpdateSlide({
25404
25403
  clrMapOverride: nextSlide.clrMapOverride,
25405
25404
  backgroundColor: nextSlide.backgroundColor,
@@ -25412,8 +25411,8 @@ function SlideThemeOverridePanel({
25412
25411
  (enabled) => {
25413
25412
  if (enabled) {
25414
25413
  const defaultMap = {};
25415
- for (const key of chunkCTL42ZRR_js.dist_exports.COLOR_MAP_ALIAS_KEYS) {
25416
- defaultMap[key] = chunkCTL42ZRR_js.dist_exports.DEFAULT_COLOR_MAP[key];
25414
+ for (const key of chunkXRFJ7TAF_js.dist_exports.COLOR_MAP_ALIAS_KEYS) {
25415
+ defaultMap[key] = chunkXRFJ7TAF_js.dist_exports.DEFAULT_COLOR_MAP[key];
25417
25416
  }
25418
25417
  commitOverride(defaultMap);
25419
25418
  } else {
@@ -25426,9 +25425,9 @@ function SlideThemeOverridePanel({
25426
25425
  (alias, targetSlot) => {
25427
25426
  const current = override ?? {};
25428
25427
  const next = { ...current, [alias]: targetSlot };
25429
- for (const key of chunkCTL42ZRR_js.dist_exports.COLOR_MAP_ALIAS_KEYS) {
25428
+ for (const key of chunkXRFJ7TAF_js.dist_exports.COLOR_MAP_ALIAS_KEYS) {
25430
25429
  if (!next[key]) {
25431
- next[key] = chunkCTL42ZRR_js.dist_exports.DEFAULT_COLOR_MAP[key];
25430
+ next[key] = chunkXRFJ7TAF_js.dist_exports.DEFAULT_COLOR_MAP[key];
25432
25431
  }
25433
25432
  }
25434
25433
  commitOverride(next);
@@ -25460,8 +25459,8 @@ function SlideThemeOverridePanel({
25460
25459
  ),
25461
25460
  t("pptx.themeOverride.enableOverride")
25462
25461
  ] }),
25463
- isOverrideActive && override && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1.5", children: chunkCTL42ZRR_js.dist_exports.COLOR_MAP_ALIAS_KEYS.map((alias) => {
25464
- const currentTarget = override[alias] ?? chunkCTL42ZRR_js.dist_exports.DEFAULT_COLOR_MAP[alias];
25462
+ isOverrideActive && override && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1.5", children: chunkXRFJ7TAF_js.dist_exports.COLOR_MAP_ALIAS_KEYS.map((alias) => {
25463
+ const currentTarget = override[alias] ?? chunkXRFJ7TAF_js.dist_exports.DEFAULT_COLOR_MAP[alias];
25465
25464
  const resolvedHex = resolveSlotColor(currentTarget);
25466
25465
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-[11px]", children: [
25467
25466
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-24 truncate text-muted-foreground", title: ALIAS_LABELS[alias], children: ALIAS_LABELS[alias] }),
@@ -25540,7 +25539,7 @@ function TransitionPreview({
25540
25539
  const { t } = reactI18next.useTranslation();
25541
25540
  const durationMs = transition.durationMs ?? 500;
25542
25541
  const animations = React97.useMemo(
25543
- () => chunkK3EGXT6W_js.getSlideTransitionAnimations(
25542
+ () => chunk355ICDU6_js.getSlideTransitionAnimations(
25544
25543
  transition.type,
25545
25544
  durationMs,
25546
25545
  transition.direction,
@@ -25609,7 +25608,7 @@ function TransitionPreview({
25609
25608
  ]
25610
25609
  }
25611
25610
  ),
25612
- /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunkK3EGXT6W_js.SLIDE_TRANSITION_KEYFRAMES })
25611
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunk355ICDU6_js.SLIDE_TRANSITION_KEYFRAMES })
25613
25612
  ] });
25614
25613
  }
25615
25614
  var DEFAULT_DURATION_MS = 320;
@@ -25626,13 +25625,13 @@ function SlideTransitionSection({
25626
25625
  return null;
25627
25626
  }
25628
25627
  const transitionType = activeSlide.transition?.type ?? "none";
25629
- const validDirections = chunkCTL42ZRR_js.dist_exports.TRANSITION_VALID_DIRECTIONS[transitionType];
25628
+ const validDirections = chunkXRFJ7TAF_js.dist_exports.TRANSITION_VALID_DIRECTIONS[transitionType];
25630
25629
  const hasDirections = validDirections !== void 0 && validDirections.length > 0;
25631
25630
  const usesOrientation = pptx.TRANSITION_ORIENTATION_TYPES.has(transitionType);
25632
25631
  const isWheel = transitionType === "wheel";
25633
25632
  const isMorph = transitionType === "morph";
25634
- const patternOptions = chunkCTL42ZRR_js.dist_exports.TRANSITION_PATTERN_OPTIONS[transitionType];
25635
- const hasThruBlk = chunkCTL42ZRR_js.dist_exports.TRANSITION_THRUBLK_TYPES.has(transitionType);
25633
+ const patternOptions = chunkXRFJ7TAF_js.dist_exports.TRANSITION_PATTERN_OPTIONS[transitionType];
25634
+ const hasThruBlk = chunkXRFJ7TAF_js.dist_exports.TRANSITION_THRUBLK_TYPES.has(transitionType);
25636
25635
  return /* @__PURE__ */ jsxRuntime.jsxs(
25637
25636
  "div",
25638
25637
  {
@@ -25652,7 +25651,7 @@ function SlideTransitionSection({
25652
25651
  type: e.target.value
25653
25652
  }),
25654
25653
  className: "bg-muted border border-border rounded px-2 py-1 max-md:min-h-[44px]!",
25655
- children: chunkCTL42ZRR_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25654
+ children: chunkXRFJ7TAF_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25656
25655
  }
25657
25656
  )
25658
25657
  ] }),
@@ -25868,7 +25867,7 @@ function TagsSection({
25868
25867
  "button",
25869
25868
  {
25870
25869
  type: "button",
25871
- className: chunkCTL42ZRR_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25870
+ className: chunkXRFJ7TAF_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25872
25871
  title: t("pptx.tags.deleteTag"),
25873
25872
  onClick: () => deleteTag(tag.colIdx, tag.tagIdx),
25874
25873
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuTrash2, { className: "w-3 h-3" })
@@ -25997,7 +25996,7 @@ function PresentationPropertiesPanel({
25997
25996
  canEdit
25998
25997
  }
25999
25998
  ),
26000
- activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkCTL42ZRR_js.cn(CARD2, "space-y-1"), children: [
25999
+ activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkXRFJ7TAF_js.cn(CARD2, "space-y-1"), children: [
26001
26000
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: "Slide" }),
26002
26001
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[11px] text-muted-foreground", children: [
26003
26002
  activeSlide.elements?.length ?? 0,
@@ -26018,14 +26017,14 @@ function SlideBackgroundPanel({
26018
26017
  const { t } = reactI18next.useTranslation();
26019
26018
  const bgImageInputRef = React97.useRef(null);
26020
26019
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
26021
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkCTL42ZRR_js.cn(CARD2, "space-y-2"), children: [
26020
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkXRFJ7TAF_js.cn(CARD2, "space-y-2"), children: [
26022
26021
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.viewer.background") }),
26023
26022
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
26024
26023
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-10 shrink-0", children: t("pptx.slideBackground.colour") }),
26025
26024
  /* @__PURE__ */ jsxRuntime.jsx(
26026
26025
  DebouncedColorInput,
26027
26026
  {
26028
- value: chunkCTL42ZRR_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
26027
+ value: chunkXRFJ7TAF_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
26029
26028
  disabled: !canEdit,
26030
26029
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
26031
26030
  onCommit: (hex) => onUpdateSlide({ backgroundColor: hex })
@@ -26064,7 +26063,7 @@ function SlideBackgroundPanel({
26064
26063
  "button",
26065
26064
  {
26066
26065
  type: "button",
26067
- className: chunkCTL42ZRR_js.cn(BTN2, "flex-1 text-center"),
26066
+ className: chunkXRFJ7TAF_js.cn(BTN2, "flex-1 text-center"),
26068
26067
  disabled: !canEdit,
26069
26068
  onClick: () => bgImageInputRef.current?.click(),
26070
26069
  children: activeSlide.backgroundImage ? t("pptx.slideBackground.replaceImage") : t("pptx.slideBackground.chooseImage")
@@ -26097,7 +26096,7 @@ function SlideBackgroundPanel({
26097
26096
  "button",
26098
26097
  {
26099
26098
  type: "button",
26100
- className: chunkCTL42ZRR_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
26099
+ className: chunkXRFJ7TAF_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
26101
26100
  disabled: !pptx.slideBackgroundClearState(activeSlide, canEdit).enabled,
26102
26101
  onClick: () => onUpdateSlide(pptx.slideBackgroundClearPatch()),
26103
26102
  children: t("pptx.slideBackground.clearBackground")
@@ -26141,14 +26140,14 @@ function TemplateBackgroundCard({
26141
26140
  t("pptx.master.layout"),
26142
26141
  t("pptx.master.master")
26143
26142
  );
26144
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkCTL42ZRR_js.cn(CARD2, "space-y-2"), children: [
26143
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkXRFJ7TAF_js.cn(CARD2, "space-y-2"), children: [
26145
26144
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.slideBackground.templateBackgroundsHeading") }),
26146
26145
  rows.layout && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
26147
26146
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-14 shrink-0 truncate", title: rows.layout.title, children: t("pptx.master.layout") }),
26148
26147
  /* @__PURE__ */ jsxRuntime.jsx(
26149
26148
  DebouncedColorInput,
26150
26149
  {
26151
- value: chunkCTL42ZRR_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
26150
+ value: chunkXRFJ7TAF_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
26152
26151
  disabled: !canEdit,
26153
26152
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
26154
26153
  onCommit: (hex) => onSetTemplateBackground(rows.layout.path, hex)
@@ -26161,7 +26160,7 @@ function TemplateBackgroundCard({
26161
26160
  /* @__PURE__ */ jsxRuntime.jsx(
26162
26161
  DebouncedColorInput,
26163
26162
  {
26164
- value: chunkCTL42ZRR_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
26163
+ value: chunkXRFJ7TAF_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
26165
26164
  disabled: !canEdit,
26166
26165
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
26167
26166
  onCommit: (hex) => onSetTemplateBackground(rows.master.path, hex)
@@ -26272,7 +26271,7 @@ function InspectorPane(props) {
26272
26271
  } = props;
26273
26272
  const hasSelection = selectedElement !== null;
26274
26273
  const { t } = reactI18next.useTranslation();
26275
- const { dragY, handlers: dragHandlers } = chunkK3EGXT6W_js.useSheetDismissDrag(onClose);
26274
+ const { dragY, handlers: dragHandlers } = chunk355ICDU6_js.useSheetDismissDrag(onClose);
26276
26275
  const {
26277
26276
  animationPanelHeight,
26278
26277
  effectiveThemeOptions,
@@ -26294,7 +26293,7 @@ function InspectorPane(props) {
26294
26293
  "div",
26295
26294
  {
26296
26295
  "data-pptx-chrome": "inspector",
26297
- className: chunkCTL42ZRR_js.cn(
26296
+ className: chunkXRFJ7TAF_js.cn(
26298
26297
  // Shared styles
26299
26298
  "bg-background flex flex-col text-xs text-foreground shadow-xl",
26300
26299
  // Mobile: absolute bottom sheet overlay sized via dvh so it
@@ -26685,7 +26684,7 @@ function PresentationTouchControls({
26685
26684
  hideNavigation = false
26686
26685
  }) {
26687
26686
  const { t } = reactI18next.useTranslation();
26688
- const { isTouchDevice } = chunkK3EGXT6W_js.useIsMobile();
26687
+ const { isTouchDevice } = chunk355ICDU6_js.useIsMobile();
26689
26688
  if (!isTouchDevice) {
26690
26689
  return null;
26691
26690
  }
@@ -26990,13 +26989,13 @@ function PrintPreview({
26990
26989
  }) {
26991
26990
  const { t } = reactI18next.useTranslation();
26992
26991
  const pages = React97.useMemo(
26993
- () => chunkCTL42ZRR_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26992
+ () => chunkXRFJ7TAF_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26994
26993
  [slideIndices, slidesPerPage, orientation]
26995
26994
  );
26996
- const printable = React97.useMemo(() => chunkCTL42ZRR_js.getPrintableArea(orientation), [orientation]);
26995
+ const printable = React97.useMemo(() => chunkXRFJ7TAF_js.getPrintableArea(orientation), [orientation]);
26997
26996
  const visiblePages = pages.slice(0, maxPages);
26998
26997
  const isThreePerPage = slidesPerPage === 3;
26999
- const noteLineCount = chunkCTL42ZRR_js.generateNoteLineCount();
26998
+ const noteLineCount = chunkXRFJ7TAF_js.generateNoteLineCount();
27000
26999
  const scaledW = printable.width * PREVIEW_SCALE3;
27001
27000
  const scaledH = printable.height * PREVIEW_SCALE3;
27002
27001
  const noteAreaFraction = 0.5;
@@ -27331,11 +27330,11 @@ function PrintDialog({
27331
27330
  defaultFrameSlides
27332
27331
  }) {
27333
27332
  const { t } = reactI18next.useTranslation();
27334
- const { panelStyle, handlers: dragHandlers } = chunkK3EGXT6W_js.useModalDismissDrag(onClose);
27335
- const { viewportWidth } = chunkK3EGXT6W_js.useIsMobile();
27333
+ const { panelStyle, handlers: dragHandlers } = chunk355ICDU6_js.useModalDismissDrag(onClose);
27334
+ const { viewportWidth } = chunk355ICDU6_js.useIsMobile();
27336
27335
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
27337
27336
  const closeBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
27338
- const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunkK3EGXT6W_js.useViewerOptionsContext());
27337
+ const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunk355ICDU6_js.useViewerOptionsContext());
27339
27338
  const [printWhat, setPrintWhat] = React97.useState(printOptionDefaults?.printWhat ?? "slides");
27340
27339
  const [orientation, setOrientation] = React97.useState("landscape");
27341
27340
  const [colorMode, setColorMode] = React97.useState(
@@ -27838,14 +27837,14 @@ function BroadcastDialog({
27838
27837
  defaultServerUrl
27839
27838
  }) {
27840
27839
  const { t } = reactI18next.useTranslation();
27841
- const collab = chunkK3EGXT6W_js.useCollaboration();
27840
+ const collab = chunk355ICDU6_js.useCollaboration();
27842
27841
  const isBroadcasting = collab !== null && collab.status !== "disconnected" && collab.status !== "error" && collab.config.role === "owner";
27843
27842
  const [roomId, setRoomId] = React97.useState("");
27844
27843
  const [userName, setUserName] = React97.useState("");
27845
27844
  const [serverUrl, setServerUrl] = React97.useState("");
27846
27845
  const [copied, setCopied] = React97.useState(false);
27847
27846
  const dialogRef = React97.useRef(null);
27848
- const { panelStyle, handlers: dragHandlers } = chunkK3EGXT6W_js.useModalDismissDrag(onClose);
27847
+ const { panelStyle, handlers: dragHandlers } = chunk355ICDU6_js.useModalDismissDrag(onClose);
27849
27848
  useModalFocus(open, dialogRef, onClose);
27850
27849
  React97.useEffect(() => {
27851
27850
  if (open && !isBroadcasting) {
@@ -28148,7 +28147,7 @@ function ActiveSessionView({
28148
28147
  onCopyRoomId,
28149
28148
  onStopCollaboration
28150
28149
  }) {
28151
- const { t } = reactI18next.useTranslation(), viewerOptions = chunkK3EGXT6W_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({
28150
+ const { t } = reactI18next.useTranslation(), viewerOptions = chunk355ICDU6_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
28151
  localUserName: activeCollaboration?.userName ?? collab.config.userName,
28153
28152
  localUserInitials: viewerOptions.general.userInitials,
28154
28153
  localUserColor: collab.config.userColor,
@@ -28247,7 +28246,7 @@ function StartSessionForm({
28247
28246
  onRetry
28248
28247
  }) {
28249
28248
  const { t } = reactI18next.useTranslation();
28250
- const { viewportWidth } = chunkK3EGXT6W_js.useIsMobile();
28249
+ const { viewportWidth } = chunk355ICDU6_js.useIsMobile();
28251
28250
  const tabBtnStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
28252
28251
  const inputReadOnlyClass = preconfigured ? " opacity-70 cursor-not-allowed" : "";
28253
28252
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
@@ -28381,7 +28380,7 @@ function ShareDialog({
28381
28380
  defaultUserName,
28382
28381
  defaultServerUrl
28383
28382
  }) {
28384
- const collab = chunkK3EGXT6W_js.useCollaboration();
28383
+ const collab = chunk355ICDU6_js.useCollaboration();
28385
28384
  const isActive = collab !== null && collab.status !== "disconnected" && collab.status !== "error";
28386
28385
  const { t } = reactI18next.useTranslation();
28387
28386
  const [roomId, setRoomId] = React97.useState(defaultRoomId ?? "");
@@ -28391,9 +28390,9 @@ function ShareDialog({
28391
28390
  const [invitation, setInvitation] = React97.useState("");
28392
28391
  const [copied, setCopied] = React97.useState(false);
28393
28392
  const dialogRef = React97.useRef(null);
28394
- const { panelStyle, handlers: dragHandlers } = chunkK3EGXT6W_js.useModalDismissDrag(onClose);
28393
+ const { panelStyle, handlers: dragHandlers } = chunk355ICDU6_js.useModalDismissDrag(onClose);
28395
28394
  useModalFocus(open, dialogRef, onClose);
28396
- const { viewportWidth, viewportHeight } = chunkK3EGXT6W_js.useIsMobile();
28395
+ const { viewportWidth, viewportHeight } = chunk355ICDU6_js.useIsMobile();
28397
28396
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
28398
28397
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
28399
28398
  const stickyFooterClass = pptx.shouldStickyActionRow(viewportWidth, viewportHeight) ? "sticky bottom-0 bg-popover" : "";
@@ -28676,12 +28675,12 @@ function HyperlinkEditDialog({
28676
28675
  onCancel
28677
28676
  }) {
28678
28677
  const { t } = reactI18next.useTranslation();
28679
- const { panelStyle, handlers: dragHandlers } = chunkK3EGXT6W_js.useModalDismissDrag(onCancel);
28678
+ const { panelStyle, handlers: dragHandlers } = chunk355ICDU6_js.useModalDismissDrag(onCancel);
28680
28679
  const inputRef = React97.useRef(null);
28681
- const detectedType = chunkK3EGXT6W_js.detectTargetType(initialUrl, initialAction);
28682
- const emailParts = chunkK3EGXT6W_js.parseEmailUrl(initialUrl || "");
28683
- const detectedSlide = chunkK3EGXT6W_js.parseSlideFromUrl(initialUrl, initialAction);
28684
- const detectedVerb = initialAction ? chunkK3EGXT6W_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28680
+ const detectedType = chunk355ICDU6_js.detectTargetType(initialUrl, initialAction);
28681
+ const emailParts = chunk355ICDU6_js.parseEmailUrl(initialUrl || "");
28682
+ const detectedSlide = chunk355ICDU6_js.parseSlideFromUrl(initialUrl, initialAction);
28683
+ const detectedVerb = initialAction ? chunk355ICDU6_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28685
28684
  const [targetType, setTargetType] = React97.useState(detectedType);
28686
28685
  const [url, setUrl] = React97.useState(
28687
28686
  detectedType === "email" || detectedType === "slide" || detectedType === "action" ? "" : initialUrl || ""
@@ -28712,7 +28711,7 @@ function HyperlinkEditDialog({
28712
28711
  actionVerb
28713
28712
  });
28714
28713
  };
28715
- const tabCls = (active) => chunkCTL42ZRR_js.cn(
28714
+ const tabCls = (active) => chunkXRFJ7TAF_js.cn(
28716
28715
  "px-3 py-1.5 text-xs rounded-t border-b-2 transition-colors",
28717
28716
  active ? "border-primary text-primary font-medium" : "border-transparent text-muted-foreground hover:text-foreground hover:border-border"
28718
28717
  );
@@ -28949,7 +28948,7 @@ function ViewerBottomPanels({
28949
28948
  notesStyle,
28950
28949
  onNotesHeightChange
28951
28950
  }) {
28952
- const { isHidden } = chunkK3EGXT6W_js.useToolbarVisibility(hiddenActions);
28951
+ const { isHidden } = chunk355ICDU6_js.useToolbarVisibility(hiddenActions);
28953
28952
  const customization = useViewerCustomizationContext();
28954
28953
  const showNotes = pptx.isPanelVisible(customization, "notes");
28955
28954
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -29295,7 +29294,7 @@ function ViewerToolbarSection(props) {
29295
29294
  [activeSlide, propertyHandlers]
29296
29295
  );
29297
29296
  const scopedLayoutOptions = React97__default.default.useMemo(
29298
- () => chunkK3EGXT6W_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
29297
+ () => chunk355ICDU6_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
29299
29298
  [s.layoutOptions, activeSlide]
29300
29299
  );
29301
29300
  const handleResetSlide = React97.useCallback(() => {
@@ -29699,7 +29698,7 @@ function ViewerToolbarSection(props) {
29699
29698
  isCommentsPanelOpen: s.isInspectorPaneOpen,
29700
29699
  slideCommentCount: activeSlide?.comments?.length ?? 0,
29701
29700
  formatPainterActive: s.formatPainterActive,
29702
- canActivateFormatPainter: chunkCTL42ZRR_js.hasCopyableFormat(selectedElement),
29701
+ canActivateFormatPainter: chunkXRFJ7TAF_js.hasCopyableFormat(selectedElement),
29703
29702
  onToggleFormatPainter: onToggleFormatPainterProp ?? (() => s.setFormatPainterActive((p) => !p)),
29704
29703
  isSelectionPaneOpen: s.isSelectionPaneOpen,
29705
29704
  onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
@@ -29786,7 +29785,7 @@ function EquationEditorDialog({
29786
29785
  existingOmml
29787
29786
  }) {
29788
29787
  const { t } = reactI18next.useTranslation();
29789
- const { panelStyle, handlers: dragHandlers } = chunkK3EGXT6W_js.useModalDismissDrag(onClose);
29788
+ const { panelStyle, handlers: dragHandlers } = chunk355ICDU6_js.useModalDismissDrag(onClose);
29790
29789
  const initialLatex = React97.useMemo(() => {
29791
29790
  if (!existingOmml) {
29792
29791
  return "";
@@ -29908,7 +29907,7 @@ function EquationEditorDialog({
29908
29907
  {
29909
29908
  type: "button",
29910
29909
  onClick: () => handleTemplateClick(tmpl.latex),
29911
- className: chunkCTL42ZRR_js.cn(
29910
+ className: chunkXRFJ7TAF_js.cn(
29912
29911
  "flex flex-col items-center gap-1 p-2 rounded-lg border transition-colors",
29913
29912
  latex === tmpl.latex ? "border-primary bg-primary/10" : "border-border bg-muted/40 hover:bg-accent/60 hover:border-border"
29914
29913
  ),
@@ -29974,7 +29973,7 @@ function getPreviewForLayout(layout) {
29974
29973
  transform: `scale(${scale})`,
29975
29974
  transformOrigin: "top left"
29976
29975
  },
29977
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkK3EGXT6W_js.SmartArtRenderer, { element: pptx.buildSmartArtPreviewElement(layout) })
29976
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunk355ICDU6_js.SmartArtRenderer, { element: pptx.buildSmartArtPreviewElement(layout) })
29978
29977
  }
29979
29978
  )
29980
29979
  }
@@ -29986,7 +29985,7 @@ function InsertSmartArtDialog({
29986
29985
  onInsert
29987
29986
  }) {
29988
29987
  const { t } = reactI18next.useTranslation();
29989
- const { panelStyle, handlers: dragHandlers } = chunkK3EGXT6W_js.useModalDismissDrag(onClose);
29988
+ const { panelStyle, handlers: dragHandlers } = chunk355ICDU6_js.useModalDismissDrag(onClose);
29990
29989
  const [activeCategory, setActiveCategory] = React97.useState("list");
29991
29990
  const [selectedLayout, setSelectedLayout] = React97.useState(null);
29992
29991
  const dialogRef = React97.useRef(null);
@@ -30067,7 +30066,7 @@ function InsertSmartArtDialog({
30067
30066
  setActiveCategory(cat.id);
30068
30067
  setSelectedLayout(null);
30069
30068
  },
30070
- className: chunkCTL42ZRR_js.cn(
30069
+ className: chunkXRFJ7TAF_js.cn(
30071
30070
  "w-full text-left px-3 py-1.5 text-xs transition-colors",
30072
30071
  activeCategory === cat.id ? "bg-primary text-white" : "text-foreground hover:bg-muted"
30073
30072
  ),
@@ -30095,7 +30094,7 @@ function InsertSmartArtDialog({
30095
30094
  onInsert(preset.layout, preset.defaultItems);
30096
30095
  onClose();
30097
30096
  },
30098
- className: chunkCTL42ZRR_js.cn(
30097
+ className: chunkXRFJ7TAF_js.cn(
30099
30098
  "flex flex-col items-center gap-1 p-2 rounded border transition-colors",
30100
30099
  selectedLayout === preset.layout ? "border-primary bg-primary/20" : "border-border hover:border-border hover:bg-muted/50"
30101
30100
  ),
@@ -30580,6 +30579,8 @@ function PresentationStage({
30580
30579
  height: safeHeight,
30581
30580
  transform: `scale(${scale})`,
30582
30581
  transformOrigin: "top left",
30582
+ // One device pixel in slide px: thin strokes stay visible on screen.
30583
+ ...pptx.deviceStrokeStageStyle(scale),
30583
30584
  // Motion-path keyframes translate by a fraction of the SLIDE, so
30584
30585
  // the stage publishes its own size for those calc() offsets.
30585
30586
  "--pptx-slide-w": `${safeWidth}px`,
@@ -30590,11 +30591,11 @@ function PresentationStage({
30590
30591
  })
30591
30592
  },
30592
30593
  children: [
30593
- /* @__PURE__ */ jsxRuntime.jsx(chunkK3EGXT6W_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30594
+ /* @__PURE__ */ jsxRuntime.jsx(chunk355ICDU6_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30594
30595
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: pptx.PRESENTATION_HIT_TEST_CSS }),
30595
30596
  presentationKeyframesCss && /* @__PURE__ */ jsxRuntime.jsx("style", { children: presentationKeyframesCss }),
30596
30597
  templateElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30597
- chunkK3EGXT6W_js.ElementRenderer,
30598
+ chunk355ICDU6_js.ElementRenderer,
30598
30599
  {
30599
30600
  element,
30600
30601
  activeSlide,
@@ -30631,7 +30632,7 @@ function PresentationStage({
30631
30632
  `tpl-${element.id}`
30632
30633
  )),
30633
30634
  activeSlide?.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30634
- chunkK3EGXT6W_js.ElementRenderer,
30635
+ chunk355ICDU6_js.ElementRenderer,
30635
30636
  {
30636
30637
  element,
30637
30638
  activeSlide,
@@ -30752,8 +30753,8 @@ function ViewerCanvasArea(props) {
30752
30753
  aiCanvasActive = false
30753
30754
  } = props;
30754
30755
  const { t } = reactI18next.useTranslation();
30755
- const { isHidden } = chunkK3EGXT6W_js.useToolbarVisibility(hiddenActions);
30756
- const viewerOptions = chunkK3EGXT6W_js.useViewerOptionsContext();
30756
+ const { isHidden } = chunk355ICDU6_js.useToolbarVisibility(hiddenActions);
30757
+ const viewerOptions = chunk355ICDU6_js.useViewerOptionsContext();
30757
30758
  const outlineAuthoring = useOutlineAuthoring({
30758
30759
  state: s,
30759
30760
  updateElement: canvasHandlers.handleUpdateSmartArtElement,
@@ -30782,7 +30783,7 @@ function ViewerCanvasArea(props) {
30782
30783
  ${url}`)) {
30783
30784
  return;
30784
30785
  }
30785
- chunkCTL42ZRR_js.safeOpenUrl(url);
30786
+ chunkXRFJ7TAF_js.safeOpenUrl(url);
30786
30787
  },
30787
30788
  [viewerOptions, t]
30788
30789
  );
@@ -30803,9 +30804,9 @@ ${url}`)) {
30803
30804
  );
30804
30805
  const handleHyperlinkClick = React97.useCallback(
30805
30806
  (url) => {
30806
- if (chunkCTL42ZRR_js.isPpactionUrl(url)) {
30807
+ if (chunkXRFJ7TAF_js.isPpactionUrl(url)) {
30807
30808
  if (mode === "present") {
30808
- const parsed = chunkCTL42ZRR_js.parsePpactionUrl(url);
30809
+ const parsed = chunkXRFJ7TAF_js.parsePpactionUrl(url);
30809
30810
  if (parsed) {
30810
30811
  const action = {
30811
30812
  action: parsed.action,
@@ -30890,7 +30891,7 @@ ${url}`)) {
30890
30891
  s.setActiveSlideIndex((i) => Math.max(0, i - 1));
30891
30892
  }
30892
30893
  }, [mode, presentation, s]);
30893
- const swipe = chunkK3EGXT6W_js.useSwipeNavigation({
30894
+ const swipe = chunk355ICDU6_js.useSwipeNavigation({
30894
30895
  enabled: swipeEnabled,
30895
30896
  onNext: handleSwipeNext,
30896
30897
  onPrev: handleSwipePrev
@@ -30964,7 +30965,7 @@ ${url}`)) {
30964
30965
  ),
30965
30966
  children: (stageScale) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30966
30967
  presentation.transitionOverlay && slides[presentation.transitionOverlay.outgoingSlideIndex] && /* @__PURE__ */ jsxRuntime.jsx(
30967
- chunkK3EGXT6W_js.PresentationTransitionOverlay,
30968
+ chunk355ICDU6_js.PresentationTransitionOverlay,
30968
30969
  {
30969
30970
  outgoingSlide: slides[presentation.transitionOverlay.outgoingSlideIndex],
30970
30971
  templateElements,
@@ -31075,14 +31076,14 @@ ${url}`)) {
31075
31076
  outlineAuthoring,
31076
31077
  collaborationOverlay: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31077
31078
  /* @__PURE__ */ jsxRuntime.jsx(
31078
- chunkK3EGXT6W_js.RemoteSelectionOverlay,
31079
+ chunk355ICDU6_js.RemoteSelectionOverlay,
31079
31080
  {
31080
31081
  elements: effectiveSlide?.elements ?? [],
31081
31082
  activeSlideIndex
31082
31083
  }
31083
31084
  ),
31084
31085
  /* @__PURE__ */ jsxRuntime.jsx(
31085
- chunkK3EGXT6W_js.CollaborationCursorOverlay,
31086
+ chunk355ICDU6_js.CollaborationCursorOverlay,
31086
31087
  {
31087
31088
  activeSlideIndex,
31088
31089
  canvasWidth: canvasSize.width,
@@ -31222,7 +31223,7 @@ function useTableStyleMapHandlers(input) {
31222
31223
  var AiChatPanel = React97.lazy(async () => {
31223
31224
  const [{ useChat }, { default: Panel }] = await Promise.all([
31224
31225
  import('@ai-sdk/react'),
31225
- import('./AiChatPanel-AK6X4NJD.js')
31226
+ import('./AiChatPanel-7XZQQZ4P.js')
31226
31227
  ]);
31227
31228
  function BoundAiChatPanel(props) {
31228
31229
  return /* @__PURE__ */ jsxRuntime.jsx(Panel, { ...props, useChat });
@@ -31383,7 +31384,7 @@ function MobileDismissSheet({
31383
31384
  children
31384
31385
  }) {
31385
31386
  const { t } = reactI18next.useTranslation();
31386
- const { dragY, handlers } = chunkK3EGXT6W_js.useSheetDismissDrag(onClose);
31387
+ const { dragY, handlers } = chunk355ICDU6_js.useSheetDismissDrag(onClose);
31387
31388
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31388
31389
  /* @__PURE__ */ jsxRuntime.jsx(
31389
31390
  "button",
@@ -31652,7 +31653,7 @@ function ThemeThumbnail({
31652
31653
  {
31653
31654
  type: "button",
31654
31655
  onClick,
31655
- className: chunkCTL42ZRR_js.cn(
31656
+ className: chunkXRFJ7TAF_js.cn(
31656
31657
  "group relative flex flex-col rounded-lg border-2 transition-all overflow-hidden",
31657
31658
  selected ? "border-primary shadow-lg scale-[1.02]" : "border-border hover:border-primary/50 hover:shadow-md"
31658
31659
  ),
@@ -31838,7 +31839,7 @@ function ViewerSidePanels(props) {
31838
31839
  const customization = useViewerCustomizationContext();
31839
31840
  const inspectorOpen = (mode === "edit" || mode === "master") && s.isInspectorPaneOpen && pptx.isPanelVisible(customization, "inspector");
31840
31841
  const currentBuiltInTheme = BUILT_IN_THEMES.find(
31841
- (candidate) => (0, chunkCTL42ZRR_js.dist_exports.themeColorSchemesEqual)(s.theme?.colorScheme, candidate.colorScheme)
31842
+ (candidate) => (0, chunkXRFJ7TAF_js.dist_exports.themeColorSchemesEqual)(s.theme?.colorScheme, candidate.colorScheme)
31842
31843
  ) ?? null;
31843
31844
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31844
31845
  inspectorOpen && onResizeRight && /* @__PURE__ */ jsxRuntime.jsx(ResizeHandle, { direction: "horizontal", onResize: onResizeRight }),
@@ -32124,7 +32125,7 @@ function ViewerMainContent(props) {
32124
32125
  );
32125
32126
  const layoutGalleryAnchorRef = React97.useRef(null);
32126
32127
  const layoutGalleryPreviews = useLayoutPreviews(loadLayoutPreviews, layoutGalleryAnchor !== null);
32127
- return /* @__PURE__ */ jsxRuntime.jsx(chunkK3EGXT6W_js.ChartPartSelectionProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "body", className: "relative z-10 flex flex-1 min-h-0", children: [
32128
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk355ICDU6_js.ChartPartSelectionProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "body", className: "relative z-10 flex flex-1 min-h-0", children: [
32128
32129
  showSlidesPane && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
32129
32130
  /* @__PURE__ */ jsxRuntime.jsx(
32130
32131
  SlidesPaneSidebar,
@@ -32614,7 +32615,7 @@ function MobileChromeOverlay(props) {
32614
32615
  slideSectionGroups,
32615
32616
  canEdit,
32616
32617
  commentCount
32617
- } = props, { keyboardInset, isKeyboardOpen } = chunkK3EGXT6W_js.useKeyboardInsets(), activeSheet = s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null, closeAllSheets = () => {
32618
+ } = props, { keyboardInset, isKeyboardOpen } = chunk355ICDU6_js.useKeyboardInsets(), activeSheet = s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null, closeAllSheets = () => {
32618
32619
  s.setIsSlidesPaneOpen(false);
32619
32620
  s.setIsInspectorPaneOpen(false);
32620
32621
  s.setIsSlideNotesCollapsed(true);
@@ -32820,7 +32821,7 @@ function AddinTable({
32820
32821
  "tr",
32821
32822
  {
32822
32823
  onClick: () => onSelect(row.id),
32823
- className: chunkCTL42ZRR_js.cn(
32824
+ className: chunkXRFJ7TAF_js.cn(
32824
32825
  "cursor-pointer border-b border-border/40 transition-colors",
32825
32826
  selectedId === row.id ? "bg-primary/10" : "hover:bg-accent"
32826
32827
  ),
@@ -32887,18 +32888,18 @@ function ControlRow({
32887
32888
  onOptionChange: emitChange
32888
32889
  }) {
32889
32890
  const { t } = reactI18next.useTranslation();
32890
- const { viewportWidth } = chunkK3EGXT6W_js.useIsMobile();
32891
+ const { viewportWidth } = chunk355ICDU6_js.useIsMobile();
32891
32892
  const fieldMinHeight = pptx.getDensePanelTouchTargetPx(viewportWidth);
32892
32893
  const value = readValue(options, control);
32893
32894
  const label = t(control.labelKey);
32894
32895
  const info = control.infoKey ? /* @__PURE__ */ jsxRuntime.jsx(InfoTip, { text: t(control.infoKey) }) : null;
32895
- const rowClass = chunkCTL42ZRR_js.cn("flex items-center justify-between gap-3 py-1.5", control.indent && "pl-6");
32896
+ const rowClass = chunkXRFJ7TAF_js.cn("flex items-center justify-between gap-3 py-1.5", control.indent && "pl-6");
32896
32897
  const rowStyle = { minHeight: fieldMinHeight };
32897
32898
  const locked = control.readOnly === true;
32898
32899
  const lockedTitle = locked ? t("pptx.options.lockedByHost") : void 0;
32899
32900
  const onOptionChange = locked ? IGNORE_CHANGE : emitChange;
32900
32901
  if (control.kind === "toggle") {
32901
- return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: chunkCTL42ZRR_js.cn(rowClass, "cursor-pointer select-none"), style: rowStyle, children: [
32902
+ return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: chunkXRFJ7TAF_js.cn(rowClass, "cursor-pointer select-none"), style: rowStyle, children: [
32902
32903
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-foreground", children: [
32903
32904
  label,
32904
32905
  info
@@ -33050,7 +33051,7 @@ function CommandList({
33050
33051
  role: "option",
33051
33052
  "aria-selected": selectedId === id,
33052
33053
  onClick: () => onSelect(id),
33053
- className: chunkCTL42ZRR_js.cn(
33054
+ className: chunkXRFJ7TAF_js.cn(
33054
33055
  "flex w-full items-center rounded px-2 py-1.5 text-left text-sm transition-colors",
33055
33056
  selectedId === id ? "bg-primary/15 text-primary" : "text-foreground hover:bg-accent"
33056
33057
  ),
@@ -33194,7 +33195,7 @@ function OptionsRibbonPane({
33194
33195
  return /* @__PURE__ */ jsxRuntime.jsxs(
33195
33196
  "label",
33196
33197
  {
33197
- className: chunkCTL42ZRR_js.cn(
33198
+ className: chunkXRFJ7TAF_js.cn(
33198
33199
  "flex items-center gap-2 rounded px-2 py-1.5",
33199
33200
  isFile ? "cursor-not-allowed opacity-60" : "cursor-pointer hover:bg-accent"
33200
33201
  ),
@@ -33228,7 +33229,7 @@ function OptionsRibbonPane({
33228
33229
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: pptx.SHORTCUT_REFERENCE_ITEMS.map((shortcut, i) => /* @__PURE__ */ jsxRuntime.jsxs(
33229
33230
  "div",
33230
33231
  {
33231
- className: chunkCTL42ZRR_js.cn(
33232
+ className: chunkXRFJ7TAF_js.cn(
33232
33233
  "flex items-center justify-between gap-3 rounded px-3 py-2",
33233
33234
  i % 2 === 0 ? "bg-muted/60" : ""
33234
33235
  ),
@@ -33249,7 +33250,7 @@ async function exportAiChatLogs(options) {
33249
33250
  chats,
33250
33251
  { format: options?.format, detailed: options?.detailed, now: options?.now },
33251
33252
  (filename, content, mime) => {
33252
- chunkK3EGXT6W_js.downloadBlob(new Blob([content], { type: mime }), filename);
33253
+ chunk355ICDU6_js.downloadBlob(new Blob([content], { type: mime }), filename);
33253
33254
  }
33254
33255
  );
33255
33256
  }
@@ -33357,7 +33358,7 @@ function SettingsAppearanceTab({
33357
33358
  type: "button",
33358
33359
  onClick: () => onSelectTheme(entry.key),
33359
33360
  "aria-pressed": isActive,
33360
- className: chunkCTL42ZRR_js.cn(
33361
+ className: chunkXRFJ7TAF_js.cn(
33361
33362
  "flex items-center gap-3 rounded-lg border px-3 py-2.5 text-left transition-colors",
33362
33363
  isActive ? "border-primary bg-primary/10" : "border-border hover:border-primary/50 hover:bg-accent"
33363
33364
  ),
@@ -33374,7 +33375,7 @@ function SettingsAppearanceTab({
33374
33375
  /* @__PURE__ */ jsxRuntime.jsx(
33375
33376
  "span",
33376
33377
  {
33377
- className: chunkCTL42ZRR_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33378
+ className: chunkXRFJ7TAF_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33378
33379
  children: t(entry.labelKey)
33379
33380
  }
33380
33381
  )
@@ -33454,7 +33455,7 @@ function SettingsLanguageTab({
33454
33455
  type: "button",
33455
33456
  onClick: () => onSelectLocale(locale.code),
33456
33457
  "aria-pressed": isActive,
33457
- className: chunkCTL42ZRR_js.cn(
33458
+ className: chunkXRFJ7TAF_js.cn(
33458
33459
  "flex w-full items-center justify-between rounded px-3 py-2.5 text-left transition-colors",
33459
33460
  isActive ? "bg-primary/10 text-primary" : "text-foreground hover:bg-accent"
33460
33461
  ),
@@ -33494,8 +33495,8 @@ function SettingsDialog({
33494
33495
  const [activeTabId, setActiveTabId] = React97.useState("general");
33495
33496
  const { t } = reactI18next.useTranslation();
33496
33497
  const customization = useViewerCustomizationContext();
33497
- const { panelStyle, handlers: dragHandlers } = chunkK3EGXT6W_js.useModalDismissDrag(onClose);
33498
- const { viewportWidth, viewportHeight } = chunkK3EGXT6W_js.useIsMobile();
33498
+ const { panelStyle, handlers: dragHandlers } = chunk355ICDU6_js.useModalDismissDrag(onClose);
33499
+ const { viewportWidth, viewportHeight } = chunk355ICDU6_js.useIsMobile();
33499
33500
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
33500
33501
  const navBtnStyle = { minHeight: touchTargetPx, minWidth: touchTargetPx };
33501
33502
  const closeBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
@@ -33603,7 +33604,7 @@ function SettingsDialog({
33603
33604
  onClick: () => setActiveTabId(tab.id),
33604
33605
  "aria-current": currentTabId === tab.id,
33605
33606
  style: navBtnStyle,
33606
- className: chunkCTL42ZRR_js.cn(
33607
+ className: chunkXRFJ7TAF_js.cn(
33607
33608
  "flex w-full items-center whitespace-nowrap rounded px-3 py-2 text-left text-sm transition-colors max-md:w-auto",
33608
33609
  currentTabId === tab.id ? "bg-primary/10 font-medium text-primary" : "text-foreground hover:bg-accent"
33609
33610
  ),
@@ -33618,7 +33619,7 @@ function SettingsDialog({
33618
33619
  onClick: () => setActiveTabId(AI_TAB_ID),
33619
33620
  "aria-current": aiActive,
33620
33621
  style: navBtnStyle,
33621
- className: chunkCTL42ZRR_js.cn(
33622
+ className: chunkXRFJ7TAF_js.cn(
33622
33623
  "flex w-full items-center whitespace-nowrap rounded px-3 py-2 text-left text-sm transition-colors max-md:w-auto",
33623
33624
  aiActive ? "bg-primary/10 font-medium text-primary" : "text-foreground hover:bg-accent"
33624
33625
  ),
@@ -33764,7 +33765,7 @@ function ViewerOptionsProvider({
33764
33765
  store,
33765
33766
  children
33766
33767
  }) {
33767
- return /* @__PURE__ */ jsxRuntime.jsx(chunkK3EGXT6W_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunkK3EGXT6W_js.ViewerOptionsContext.Provider, { value: options, children }) });
33768
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk355ICDU6_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunk355ICDU6_js.ViewerOptionsContext.Provider, { value: options, children }) });
33768
33769
  }
33769
33770
  function useAiBridge(input) {
33770
33771
  const ref = React97.useRef(input);
@@ -34085,7 +34086,7 @@ function useMasterViewCrud(input) {
34085
34086
  if (id === "renameLayout" || id === "renameMaster") {
34086
34087
  const master = slideMasters[target.masterIndex];
34087
34088
  const current = id === "renameLayout" ? master?.layouts?.[target.layoutIndex ?? -1]?.name ?? "" : master?.name ?? "";
34088
- const next = chunkK3EGXT6W_js.safePrompt(t("pptx.masterView.renamePrompt"), current)?.trim();
34089
+ const next = chunk355ICDU6_js.safePrompt(t("pptx.masterView.renamePrompt"), current)?.trim();
34089
34090
  if (!next) {
34090
34091
  return;
34091
34092
  }
@@ -34544,7 +34545,7 @@ var PowerPointViewer = React97.forwardRef(
34544
34545
  }
34545
34546
  })();
34546
34547
  }, []);
34547
- const { optionsStore, options: viewerOptions } = chunkK3EGXT6W_js.useViewerOptions();
34548
+ const { optionsStore, options: viewerOptions } = chunk355ICDU6_js.useViewerOptions();
34548
34549
  const custom = useViewerCustomization(customization, legacyHiddenActions, optionsStore);
34549
34550
  const { resolved: customizationResolved, hiddenActions } = custom;
34550
34551
  const aiEnabled = Boolean(ai) && pptx.isFeatureEnabled(customizationResolved, "ai");
@@ -34558,8 +34559,8 @@ var PowerPointViewer = React97.forwardRef(
34558
34559
  const handleEnableEditing = React97.useCallback(() => {
34559
34560
  setProtectedViewOverridden(true);
34560
34561
  }, []);
34561
- const readOnlyRec = chunkK3EGXT6W_js.useReadOnlyRecommendationState(content);
34562
- const compatToastsState = chunkK3EGXT6W_js.useCompatibilityToastsState();
34562
+ const readOnlyRec = chunk355ICDU6_js.useReadOnlyRecommendationState(content);
34563
+ const compatToastsState = chunk355ICDU6_js.useCompatibilityToastsState();
34563
34564
  const [notesBarHeight, setNotesBarHeight] = React97.useState(0);
34564
34565
  const runProgramNoticesState = useRunProgramNoticesState();
34565
34566
  const [collaborationReadOnly, setCollaborationReadOnly] = React97.useState(Boolean(collaboration));
@@ -34574,8 +34575,8 @@ var PowerPointViewer = React97.forwardRef(
34574
34575
  filePath
34575
34576
  });
34576
34577
  const [isShareDialogOpen, setIsShareDialogOpen] = React97.useState(false);
34577
- const { reducedMotion, toggleReducedMotion } = chunkK3EGXT6W_js.useReducedMotion();
34578
- const state = chunkK3EGXT6W_js.useViewerState({ content, canEdit });
34578
+ const { reducedMotion, toggleReducedMotion } = chunk355ICDU6_js.useReducedMotion();
34579
+ const state = chunk355ICDU6_js.useViewerState({ content, canEdit });
34579
34580
  const {
34580
34581
  containerRef,
34581
34582
  mode,
@@ -34599,7 +34600,7 @@ var PowerPointViewer = React97.forwardRef(
34599
34600
  [state.recentColors, pushColor]
34600
34601
  );
34601
34602
  const themeColorMapValue = React97.useMemo(
34602
- () => state.theme?.colorScheme ? (0, chunkCTL42ZRR_js.dist_exports.buildThemeColorMap)(state.theme.colorScheme) : void 0,
34603
+ () => state.theme?.colorScheme ? (0, chunkXRFJ7TAF_js.dist_exports.buildThemeColorMap)(state.theme.colorScheme) : void 0,
34603
34604
  [state.theme?.colorScheme]
34604
34605
  );
34605
34606
  const settings = React97.useMemo(
@@ -34686,16 +34687,16 @@ var PowerPointViewer = React97.forwardRef(
34686
34687
  }
34687
34688
  }, [settings, optionsStore]);
34688
34689
  const handleClearOptionsCache2 = useAutosaveCacheMaintenance(viewerOptions);
34689
- const mobile = chunkK3EGXT6W_js.useIsMobile();
34690
+ const mobile = chunk355ICDU6_js.useIsMobile();
34690
34691
  const { isMobile, isTouchDevice, isVirtualKeyboardOpen } = mobile;
34691
- const resizablePanels = chunkK3EGXT6W_js.useResizablePanels();
34692
+ const resizablePanels = chunk355ICDU6_js.useResizablePanels();
34692
34693
  const {
34693
34694
  gridSpacingPx,
34694
34695
  visibleSlideIndexes,
34695
34696
  slideSectionGroups,
34696
34697
  masterPseudoSlide,
34697
34698
  authoredRange
34698
- } = chunkK3EGXT6W_js.useDerivedSlideState({
34699
+ } = chunk355ICDU6_js.useDerivedSlideState({
34699
34700
  slides,
34700
34701
  sections: state.sections,
34701
34702
  customShows: state.customShows,
@@ -34720,7 +34721,7 @@ var PowerPointViewer = React97.forwardRef(
34720
34721
  state.cropSessionRef
34721
34722
  ]
34722
34723
  );
34723
- const zoom = chunkK3EGXT6W_js.useZoomViewport({
34724
+ const zoom = chunk355ICDU6_js.useZoomViewport({
34724
34725
  canvasSize,
34725
34726
  selectedElements: state.selectedElements,
34726
34727
  fitPadding: props.fitPadding,
@@ -34730,7 +34731,7 @@ var PowerPointViewer = React97.forwardRef(
34730
34731
  const markDocumentDirty = React97.useCallback(() => {
34731
34732
  setIsDirty(true);
34732
34733
  }, [setIsDirty]);
34733
- const history = chunkK3EGXT6W_js.useEditorHistory({
34734
+ const history = chunk355ICDU6_js.useEditorHistory({
34734
34735
  slides,
34735
34736
  canvasSize,
34736
34737
  activeSlideIndex,
@@ -34756,7 +34757,7 @@ var PowerPointViewer = React97.forwardRef(
34756
34757
  setEditTemplateMode: state.setEditTemplateMode,
34757
34758
  setHeaderFooter: state.setHeaderFooter
34758
34759
  });
34759
- const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunkK3EGXT6W_js.usePresentationSetup({
34760
+ const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunk355ICDU6_js.usePresentationSetup({
34760
34761
  mode,
34761
34762
  slides,
34762
34763
  visibleSlideIndexes,
@@ -34798,7 +34799,7 @@ var PowerPointViewer = React97.forwardRef(
34798
34799
  onSetActiveCustomShowId: state.setActiveCustomShowId,
34799
34800
  onAddRunProgramNotice: runProgramNoticesState.addNotice
34800
34801
  });
34801
- chunkK3EGXT6W_js.useTouchGestures({
34802
+ chunk355ICDU6_js.useTouchGestures({
34802
34803
  targetRef: zoom.canvasViewportRef,
34803
34804
  currentScale: zoom.scale,
34804
34805
  callbacks: {
@@ -34820,7 +34821,7 @@ var PowerPointViewer = React97.forwardRef(
34820
34821
  },
34821
34822
  enabled: isTouchDevice
34822
34823
  });
34823
- const dialogs = chunkK3EGXT6W_js.useViewerDialogs({
34824
+ const dialogs = chunk355ICDU6_js.useViewerDialogs({
34824
34825
  mode,
34825
34826
  slides,
34826
34827
  activeSlide,
@@ -34869,7 +34870,7 @@ var PowerPointViewer = React97.forwardRef(
34869
34870
  zoom.handleZoomToFit();
34870
34871
  zoom.canvasViewportRef.current?.scrollTo({ left: 0, top: 0 });
34871
34872
  }, [mode]);
34872
- const editorOps = chunkK3EGXT6W_js.useEditorOperations({
34873
+ const editorOps = chunk355ICDU6_js.useEditorOperations({
34873
34874
  state,
34874
34875
  history,
34875
34876
  zoom,
@@ -34911,7 +34912,7 @@ var PowerPointViewer = React97.forwardRef(
34911
34912
  setIsEncryptedDialogOpen,
34912
34913
  handlerRef,
34913
34914
  loadVersion
34914
- } = chunkK3EGXT6W_js.useViewerIntegration({
34915
+ } = chunk355ICDU6_js.useViewerIntegration({
34915
34916
  transformCommittedText: (text) => pptx.applyAutoCorrect(text, viewerOptions.proofing),
34916
34917
  state,
34917
34918
  zoom,
@@ -34985,7 +34986,7 @@ var PowerPointViewer = React97.forwardRef(
34985
34986
  updateThemeFontScheme: themeHandlers.handleUpdateThemeFontScheme
34986
34987
  });
34987
34988
  const ribbonScope = useRibbonScopeToken();
34988
- const viewPreferencesSync = chunkK3EGXT6W_js.useViewPreferencesSync({
34989
+ const viewPreferencesSync = chunk355ICDU6_js.useViewPreferencesSync({
34989
34990
  loadVersion,
34990
34991
  viewProperties: state.viewProperties,
34991
34992
  setViewProperties: state.setViewProperties,
@@ -35023,7 +35024,7 @@ var PowerPointViewer = React97.forwardRef(
35023
35024
  },
35024
35025
  [state]
35025
35026
  );
35026
- const layoutSwitching = chunkK3EGXT6W_js.useLayoutSwitching({
35027
+ const layoutSwitching = chunk355ICDU6_js.useLayoutSwitching({
35027
35028
  handler: handlerRef.current,
35028
35029
  slides,
35029
35030
  activeSlideIndex,
@@ -35119,7 +35120,7 @@ var PowerPointViewer = React97.forwardRef(
35119
35120
  "data-pptx-editor-chrome": "",
35120
35121
  ...{ [pptx.RIBBON_SCOPE_ATTR]: ribbonScope },
35121
35122
  "aria-busy": loading,
35122
- className: chunkCTL42ZRR_js.cn(
35123
+ className: chunkXRFJ7TAF_js.cn(
35123
35124
  "h-full w-full bg-background text-foreground relative",
35124
35125
  ...pptx.resolveOptionRootClasses(viewerOptions, "pptx")
35125
35126
  ),
@@ -35303,7 +35304,7 @@ var PowerPointViewer = React97.forwardRef(
35303
35304
  ] }) })
35304
35305
  }
35305
35306
  ),
35306
- mode !== "present" && /* @__PURE__ */ jsxRuntime.jsx(
35307
+ mode !== "present" && rootOptions.showCompatibilityToasts && /* @__PURE__ */ jsxRuntime.jsx(
35307
35308
  CompatibilityToasts,
35308
35309
  {
35309
35310
  toasts: compatToastsState.toasts,
@@ -35510,8 +35511,8 @@ var PowerPointViewer = React97.forwardRef(
35510
35511
  // Nothing previously provided it, so every one of those consumers was
35511
35512
  // silently reading `DEFAULT_VIEWER_OPTIONS` forever, no matter what
35512
35513
  // the user changed in the Options dialog.
35513
- /* @__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(chunkK3EGXT6W_js.Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
35514
- chunkK3EGXT6W_js.CollaborationProvider,
35514
+ /* @__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(chunk355ICDU6_js.Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
35515
+ chunk355ICDU6_js.CollaborationProvider,
35515
35516
  {
35516
35517
  config: collaboration,
35517
35518
  canvasWidth: canvasSize.width,
@@ -35569,7 +35570,7 @@ var PowerPointViewer = React97.forwardRef(
35569
35570
  );
35570
35571
  PowerPointViewer.displayName = "PowerPointViewer";
35571
35572
  function CollaborationStatusStrip() {
35572
- const collab = chunkK3EGXT6W_js.useCollaboration();
35573
+ const collab = chunk355ICDU6_js.useCollaboration();
35573
35574
  if (!collab) {
35574
35575
  return null;
35575
35576
  }
@@ -35593,8 +35594,8 @@ function CollaborationDocumentSync({
35593
35594
  deckSaveState,
35594
35595
  onReadOnlyChange
35595
35596
  }) {
35596
- const collab = chunkK3EGXT6W_js.useCollaboration();
35597
- chunkK3EGXT6W_js.useCollaborationDocumentSync({
35597
+ const collab = chunk355ICDU6_js.useCollaboration();
35598
+ chunk355ICDU6_js.useCollaborationDocumentSync({
35598
35599
  collaboration: collab,
35599
35600
  slides,
35600
35601
  templateElementsBySlideId,
@@ -35613,14 +35614,14 @@ function CollaborationFollowLayer({
35613
35614
  setActiveSlideIndex,
35614
35615
  slideCount
35615
35616
  }) {
35616
- const collab = chunkK3EGXT6W_js.useCollaboration();
35617
- const { followedClientId, followUser } = chunkK3EGXT6W_js.useFollowMode({
35617
+ const collab = chunk355ICDU6_js.useCollaboration();
35618
+ const { followedClientId, followUser } = chunk355ICDU6_js.useFollowMode({
35618
35619
  collab,
35619
35620
  activeSlideIndex,
35620
35621
  setActiveSlideIndex,
35621
35622
  slideCount
35622
35623
  });
35623
- chunkK3EGXT6W_js.useBroadcastFollower({
35624
+ chunk355ICDU6_js.useBroadcastFollower({
35624
35625
  collab,
35625
35626
  activeSlideIndex,
35626
35627
  setActiveSlideIndex,