pptx-react-viewer 4.73.1 → 4.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +1 -1
  3. package/dist/{AiChatPanel-PLQ3NBTK.js → AiChatPanel-4V7QB5Z3.js} +19 -19
  4. package/dist/AiChatPanel-4V7QB5Z3.js.br +0 -0
  5. package/dist/AiChatPanel-4V7QB5Z3.js.gz +0 -0
  6. package/dist/{AiChatPanel-E7CJSTW7.mjs → AiChatPanel-6ML3VLIX.mjs} +1 -1
  7. package/dist/AiChatPanel-6ML3VLIX.mjs.br +0 -0
  8. package/dist/AiChatPanel-6ML3VLIX.mjs.gz +0 -0
  9. package/dist/ai.js +2 -2
  10. package/dist/ai.js.br +0 -0
  11. package/dist/ai.js.gz +0 -0
  12. package/dist/ai.mjs +1 -1
  13. package/dist/ai.mjs.br +0 -0
  14. package/dist/ai.mjs.gz +0 -0
  15. package/dist/{chunk-XG4WSJ4O.js → chunk-3AZ6ESJU.js} +203 -203
  16. package/dist/chunk-3AZ6ESJU.js.br +0 -0
  17. package/dist/chunk-3AZ6ESJU.js.gz +0 -0
  18. package/dist/{chunk-P2COO2QO.js → chunk-6GFSF2ML.js} +65 -13
  19. package/dist/chunk-6GFSF2ML.js.br +0 -0
  20. package/dist/chunk-6GFSF2ML.js.gz +0 -0
  21. package/dist/{chunk-CRC3V4UG.mjs → chunk-AZLOOFU2.mjs} +1 -1
  22. package/dist/chunk-AZLOOFU2.mjs.br +0 -0
  23. package/dist/chunk-AZLOOFU2.mjs.gz +0 -0
  24. package/dist/{chunk-BGWFZCRX.mjs → chunk-DE4Y5F4T.mjs} +152 -207
  25. package/dist/chunk-DE4Y5F4T.mjs.br +0 -0
  26. package/dist/chunk-DE4Y5F4T.mjs.gz +0 -0
  27. package/dist/chunk-FFTZYNL4.mjs +2 -0
  28. package/dist/chunk-FFTZYNL4.mjs.br +6 -0
  29. package/dist/chunk-FFTZYNL4.mjs.gz +0 -0
  30. package/dist/chunk-LWGPHJHC.js +151 -0
  31. package/dist/chunk-LWGPHJHC.js.br +0 -0
  32. package/dist/chunk-LWGPHJHC.js.gz +0 -0
  33. package/dist/{chunk-LVEFHZ76.js → chunk-MU3BIZ2U.js} +1 -1
  34. package/dist/chunk-MU3BIZ2U.js.br +0 -0
  35. package/dist/chunk-MU3BIZ2U.js.gz +0 -0
  36. package/dist/{chunk-FBSPQYRE.mjs → chunk-N3YK2BCA.mjs} +61 -14
  37. package/dist/chunk-N3YK2BCA.mjs.br +0 -0
  38. package/dist/chunk-N3YK2BCA.mjs.gz +0 -0
  39. package/dist/chunk-P2IEKYVG.js +29 -0
  40. package/dist/chunk-P2IEKYVG.js.br +0 -0
  41. package/dist/chunk-P2IEKYVG.js.gz +0 -0
  42. package/dist/{chunk-YLJSLYQS.js → chunk-RJRDE3C2.js} +702 -757
  43. package/dist/chunk-RJRDE3C2.js.br +0 -0
  44. package/dist/chunk-RJRDE3C2.js.gz +0 -0
  45. package/dist/{chunk-JZE6BORE.mjs → chunk-RMEWSJZU.mjs} +1 -1
  46. package/dist/chunk-RMEWSJZU.mjs.br +0 -0
  47. package/dist/chunk-RMEWSJZU.mjs.gz +0 -0
  48. package/dist/chunk-Y53EC3JU.mjs +27 -0
  49. package/dist/chunk-Y53EC3JU.mjs.br +0 -0
  50. package/dist/chunk-Y53EC3JU.mjs.gz +0 -0
  51. package/dist/index.d.ts +49 -20
  52. package/dist/index.js +128 -124
  53. package/dist/index.js.br +0 -0
  54. package/dist/index.js.gz +0 -0
  55. package/dist/index.mjs +6 -6
  56. package/dist/index.mjs.br +0 -0
  57. package/dist/index.mjs.gz +0 -0
  58. package/dist/internals.js +82 -81
  59. package/dist/internals.js.br +0 -0
  60. package/dist/internals.js.gz +0 -0
  61. package/dist/internals.mjs +3 -2
  62. package/dist/internals.mjs.br +0 -0
  63. package/dist/internals.mjs.gz +0 -0
  64. package/dist/no-i18next.d.ts +1299 -0
  65. package/dist/no-i18next.js +251 -0
  66. package/dist/no-i18next.js.br +0 -0
  67. package/dist/no-i18next.js.gz +0 -0
  68. package/dist/no-i18next.mjs +6 -0
  69. package/dist/no-i18next.mjs.br +0 -0
  70. package/dist/no-i18next.mjs.gz +0 -0
  71. package/dist/pptx-viewer.css +1 -1
  72. package/dist/pptx-viewer.css.br +0 -0
  73. package/dist/pptx-viewer.css.gz +0 -0
  74. package/dist/viewer/index.d.ts +24 -18
  75. package/dist/viewer/index.js +25 -24
  76. package/dist/viewer/index.js.br +0 -0
  77. package/dist/viewer/index.js.gz +0 -0
  78. package/dist/viewer/index.mjs +5 -4
  79. package/dist/viewer/index.mjs.br +0 -0
  80. package/dist/viewer/index.mjs.gz +0 -0
  81. package/package.json +9 -4
  82. package/dist/AiChatPanel-E7CJSTW7.mjs.br +0 -0
  83. package/dist/AiChatPanel-E7CJSTW7.mjs.gz +0 -0
  84. package/dist/AiChatPanel-PLQ3NBTK.js.br +0 -0
  85. package/dist/AiChatPanel-PLQ3NBTK.js.gz +0 -0
  86. package/dist/chunk-BGWFZCRX.mjs.br +0 -0
  87. package/dist/chunk-BGWFZCRX.mjs.gz +0 -0
  88. package/dist/chunk-CRC3V4UG.mjs.br +0 -0
  89. package/dist/chunk-CRC3V4UG.mjs.gz +0 -0
  90. package/dist/chunk-FBSPQYRE.mjs.br +0 -0
  91. package/dist/chunk-FBSPQYRE.mjs.gz +0 -0
  92. package/dist/chunk-JZE6BORE.mjs.br +0 -0
  93. package/dist/chunk-JZE6BORE.mjs.gz +0 -0
  94. package/dist/chunk-LVEFHZ76.js.br +0 -0
  95. package/dist/chunk-LVEFHZ76.js.gz +0 -0
  96. package/dist/chunk-P2COO2QO.js.br +0 -0
  97. package/dist/chunk-P2COO2QO.js.gz +0 -0
  98. package/dist/chunk-XG4WSJ4O.js.br +0 -0
  99. package/dist/chunk-XG4WSJ4O.js.gz +0 -0
  100. package/dist/chunk-YLJSLYQS.js.br +0 -0
  101. package/dist/chunk-YLJSLYQS.js.gz +0 -0
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkLVEFHZ76_js = require('./chunk-LVEFHZ76.js');
4
- var chunkXG4WSJ4O_js = require('./chunk-XG4WSJ4O.js');
5
- var chunkP2COO2QO_js = require('./chunk-P2COO2QO.js');
3
+ var chunkMU3BIZ2U_js = require('./chunk-MU3BIZ2U.js');
4
+ var chunk3AZ6ESJU_js = require('./chunk-3AZ6ESJU.js');
5
+ var chunk6GFSF2ML_js = require('./chunk-6GFSF2ML.js');
6
6
  var pptx = require('ooxml-ui/pptx');
7
7
  var React108 = require('react');
8
8
  var jsxRuntime = require('react/jsx-runtime');
@@ -10,8 +10,8 @@ var lu = require('react-icons/lu');
10
10
  var reactDom = require('react-dom');
11
11
  var pptx$1 = require('ooxml-core/pptx');
12
12
  var host = require('ooxml-ui/pptx/ai/host');
13
- var i18n$1 = require('ooxml-core/i18n');
14
- var i18n = require('ooxml-ui/pptx/i18n');
13
+ var i18n = require('ooxml-core/i18n');
14
+ var i18n$1 = require('ooxml-ui/pptx/i18n');
15
15
 
16
16
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
17
17
 
@@ -36,6 +36,113 @@ function useThemeStyle(theme) {
36
36
  return vars;
37
37
  }, [theme]);
38
38
  }
39
+ function getReactSlideBackgroundStyle(slide, slideSize) {
40
+ const style = pptx.getSlideBackgroundStyle(slide, slideSize);
41
+ return {
42
+ backgroundColor: style["background-color"],
43
+ backgroundImage: slide?.backgroundImage ? void 0 : style["background-image"],
44
+ backgroundSize: style["background-size"],
45
+ backgroundRepeat: style["background-repeat"]
46
+ };
47
+ }
48
+ function SlideThumbnailImpl({
49
+ slide,
50
+ templateElements,
51
+ canvasSize,
52
+ previewWidth,
53
+ fieldContext,
54
+ tableStyleContext
55
+ }) {
56
+ const safeCanvasWidth = Math.max(canvasSize.width, 1);
57
+ const safeCanvasHeight = Math.max(canvasSize.height, 1);
58
+ const layout = pptx.slideThumbnailLayout(
59
+ safeCanvasWidth,
60
+ safeCanvasHeight,
61
+ previewWidth ?? chunk6GFSF2ML_js.SLIDE_NAV_THUMBNAIL_WIDTH
62
+ );
63
+ const { height: previewHeight, scale } = layout;
64
+ const previewElements = pptx.buildPreviewElements(slide, templateElements);
65
+ const slideFieldContext = pptx.deriveSlideFieldContext(fieldContext, slide);
66
+ const { t } = chunk6GFSF2ML_js.useTranslation();
67
+ const transitionBadge = pptx.slideThumbnailTransitionBadge(slide, t);
68
+ return /* @__PURE__ */ jsxRuntime.jsxs(
69
+ "div",
70
+ {
71
+ className: previewWidth === void 0 ? "relative w-full overflow-hidden rounded border border-border bg-white" : "relative w-full overflow-hidden bg-white",
72
+ style: {
73
+ height: previewHeight,
74
+ ...getReactSlideBackgroundStyle(slide, {
75
+ widthPx: safeCanvasWidth,
76
+ heightPx: safeCanvasHeight
77
+ })
78
+ },
79
+ children: [
80
+ /* @__PURE__ */ jsxRuntime.jsxs(
81
+ "div",
82
+ {
83
+ className: "absolute top-0 left-0 origin-top-left",
84
+ style: {
85
+ width: safeCanvasWidth,
86
+ height: safeCanvasHeight,
87
+ transform: `scale(${scale})`,
88
+ transformOrigin: "top left",
89
+ ...pptx.deviceStrokeStageStyle(scale)
90
+ },
91
+ children: [
92
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3AZ6ESJU_js.SlideBackgroundImageLayer, { slide }),
93
+ previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
94
+ chunk3AZ6ESJU_js.StaticElementRenderer,
95
+ {
96
+ element,
97
+ activeSlide: slide,
98
+ allSlides: [slide],
99
+ zIndex: index,
100
+ fieldContext: slideFieldContext,
101
+ tableStyleContext
102
+ },
103
+ element.id
104
+ ))
105
+ ]
106
+ }
107
+ ),
108
+ transitionBadge && /* @__PURE__ */ jsxRuntime.jsx(
109
+ "div",
110
+ {
111
+ "data-pptx-thumbnail-transition": "",
112
+ title: transitionBadge.title,
113
+ style: pptx.slideThumbnailTransitionBadgeStyle(layout),
114
+ children: transitionBadge.label
115
+ }
116
+ )
117
+ ]
118
+ }
119
+ );
120
+ }
121
+ function slideThumbnailPropsEqual(prev, next) {
122
+ if (prev.previewWidth !== next.previewWidth) {
123
+ return false;
124
+ }
125
+ if (prev.slide !== next.slide) {
126
+ return false;
127
+ }
128
+ if (prev.templateElements !== next.templateElements) {
129
+ return false;
130
+ }
131
+ if (prev.fieldContext !== next.fieldContext) {
132
+ return false;
133
+ }
134
+ if (prev.tableStyleContext !== next.tableStyleContext) {
135
+ return false;
136
+ }
137
+ if (prev.canvasSize.width !== next.canvasSize.width || prev.canvasSize.height !== next.canvasSize.height) {
138
+ return false;
139
+ }
140
+ return true;
141
+ }
142
+ var SlideThumbnail = /* @__PURE__ */ React108__default.default.memo(
143
+ SlideThumbnailImpl,
144
+ slideThumbnailPropsEqual
145
+ );
39
146
  function getInitials(name) {
40
147
  const parts = name.trim().split(/\s+/u);
41
148
  if (parts.length >= 2) {
@@ -49,7 +156,7 @@ function AvatarCircle({
49
156
  avatar,
50
157
  isLocal
51
158
  }) {
52
- const { t } = chunkP2COO2QO_js.useTranslation();
159
+ const { t } = chunk6GFSF2ML_js.useTranslation();
53
160
  const initials = getInitials(name);
54
161
  const title = isLocal ? t("pptx.collaboration.youLabel", { name }) : name;
55
162
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -84,7 +191,7 @@ function UserAvatarBar({
84
191
  status,
85
192
  maxVisible = 5
86
193
  }) {
87
- const { t } = chunkP2COO2QO_js.useTranslation();
194
+ const { t } = chunk6GFSF2ML_js.useTranslation();
88
195
  if (status === "disconnected" || status === "error") {
89
196
  return null;
90
197
  }
@@ -158,7 +265,7 @@ function CollaborationStatusIndicator({
158
265
  connectedCount,
159
266
  onRetry
160
267
  }) {
161
- const { t } = chunkP2COO2QO_js.useTranslation();
268
+ const { t } = chunk6GFSF2ML_js.useTranslation();
162
269
  const style = STATUS_STYLES[status];
163
270
  return /* @__PURE__ */ jsxRuntime.jsxs(
164
271
  "div",
@@ -199,7 +306,7 @@ function FollowModeBar({
199
306
  followedClientId,
200
307
  onFollow
201
308
  }) {
202
- const { t } = chunkP2COO2QO_js.useTranslation();
309
+ const { t } = chunk6GFSF2ML_js.useTranslation();
203
310
  if (presences.length === 0) {
204
311
  return null;
205
312
  }
@@ -304,7 +411,7 @@ function SectionContextMenu({
304
411
  onAddSection,
305
412
  onClose
306
413
  }) {
307
- const { t } = chunkP2COO2QO_js.useTranslation();
414
+ const { t } = chunk6GFSF2ML_js.useTranslation();
308
415
  React108.useEffect(() => {
309
416
  const onKeyDown = (event) => {
310
417
  if (event.key === "Escape") {
@@ -405,7 +512,7 @@ function SectionHeader({
405
512
  /* @__PURE__ */ jsxRuntime.jsx(
406
513
  lu.LuChevronDown,
407
514
  {
408
- className: chunkP2COO2QO_js.cn(
515
+ className: chunk6GFSF2ML_js.cn(
409
516
  "h-3 w-3 flex-shrink-0 transition-transform",
410
517
  isCollapsed ? "-rotate-90" : "rotate-0"
411
518
  )
@@ -480,7 +587,7 @@ function SlideContextMenu({
480
587
  onAddSection,
481
588
  onClose
482
589
  }) {
483
- const { t } = chunkP2COO2QO_js.useTranslation();
590
+ const { t } = chunk6GFSF2ML_js.useTranslation();
484
591
  const selected = state.selectedIndexes;
485
592
  const selectedSlides = selected.map((i) => slides[i]).filter((s) => Boolean(s));
486
593
  const entries = pptx.buildSlidePaneContextMenuEntries({
@@ -525,134 +632,6 @@ function SlideContextMenu({
525
632
  }
526
633
  );
527
634
  }
528
- function getReactSlideBackgroundStyle(slide, slideSize) {
529
- const style = pptx.getSlideBackgroundStyle(slide, slideSize);
530
- return {
531
- backgroundColor: style["background-color"],
532
- backgroundImage: slide?.backgroundImage ? void 0 : style["background-image"],
533
- backgroundSize: style["background-size"],
534
- backgroundRepeat: style["background-repeat"]
535
- };
536
- }
537
- function SlideThumbnailImpl({
538
- slide,
539
- templateElements,
540
- canvasSize,
541
- previewWidth,
542
- fieldContext,
543
- tableStyleContext
544
- }) {
545
- const safeCanvasWidth = Math.max(canvasSize.width, 1);
546
- const safeCanvasHeight = Math.max(canvasSize.height, 1);
547
- const width = previewWidth ?? chunkP2COO2QO_js.SLIDE_NAV_THUMBNAIL_WIDTH;
548
- const scale = width / safeCanvasWidth;
549
- const previewHeight = pptx.editorThumbnailHeight(safeCanvasWidth, safeCanvasHeight, width);
550
- const previewElements = pptx.buildPreviewElements(slide, templateElements);
551
- const slideFieldContext = pptx.deriveSlideFieldContext(fieldContext, slide);
552
- const { t } = chunkP2COO2QO_js.useTranslation();
553
- const transitionLabel = slide.transition ? (() => {
554
- const opt = chunkP2COO2QO_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
555
- return opt ? t(opt.i18nKey) : slide.transition.type;
556
- })() : void 0;
557
- return /* @__PURE__ */ jsxRuntime.jsx(
558
- "div",
559
- {
560
- className: previewWidth === void 0 ? "relative w-full overflow-hidden rounded border border-border bg-white" : "relative w-full overflow-hidden bg-white",
561
- style: {
562
- height: previewHeight,
563
- ...getReactSlideBackgroundStyle(slide, {
564
- widthPx: safeCanvasWidth,
565
- heightPx: safeCanvasHeight
566
- })
567
- },
568
- children: /* @__PURE__ */ jsxRuntime.jsxs(
569
- "div",
570
- {
571
- className: "absolute top-0 left-0 origin-top-left",
572
- style: {
573
- width: safeCanvasWidth,
574
- height: safeCanvasHeight,
575
- transform: `scale(${scale})`,
576
- transformOrigin: "top left",
577
- ...pptx.deviceStrokeStageStyle(scale)
578
- },
579
- children: [
580
- /* @__PURE__ */ jsxRuntime.jsx(chunkXG4WSJ4O_js.SlideBackgroundImageLayer, { slide }),
581
- slide.transition && slide.transition.type !== "none" && slide.transition.type !== "cut" && /* @__PURE__ */ jsxRuntime.jsx(
582
- "div",
583
- {
584
- className: "absolute top-0.5 right-0.5 z-10 px-1 py-px rounded bg-primary/80 text-[7px] text-white leading-tight pointer-events-none",
585
- title: t("pptx.slideThumbnail.transitionTooltip", { name: transitionLabel }),
586
- children: transitionLabel
587
- }
588
- ),
589
- previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
590
- chunkXG4WSJ4O_js.StaticElementRenderer,
591
- {
592
- element,
593
- activeSlide: slide,
594
- allSlides: [slide],
595
- zIndex: index,
596
- fieldContext: slideFieldContext,
597
- tableStyleContext
598
- },
599
- element.id
600
- ))
601
- ]
602
- }
603
- )
604
- }
605
- );
606
- }
607
- function slideThumbnailPropsEqual(prev, next) {
608
- if (prev.previewWidth !== next.previewWidth) {
609
- return false;
610
- }
611
- if (prev.slide.id !== next.slide.id) {
612
- return false;
613
- }
614
- if (prev.slide.isDirty !== next.slide.isDirty) {
615
- return false;
616
- }
617
- if (prev.slide.hidden !== next.slide.hidden) {
618
- return false;
619
- }
620
- if (prev.slide.elements !== next.slide.elements) {
621
- return false;
622
- }
623
- if (prev.slide.showMasterShapes !== next.slide.showMasterShapes) {
624
- return false;
625
- }
626
- if (prev.slide.backgroundColor !== next.slide.backgroundColor) {
627
- return false;
628
- }
629
- if (prev.slide.backgroundImage !== next.slide.backgroundImage) {
630
- return false;
631
- }
632
- if (prev.slide.backgroundGradient !== next.slide.backgroundGradient) {
633
- return false;
634
- }
635
- if (prev.slide.backgroundPattern !== next.slide.backgroundPattern) {
636
- return false;
637
- }
638
- if (prev.templateElements !== next.templateElements) {
639
- return false;
640
- }
641
- if (prev.fieldContext !== next.fieldContext) {
642
- return false;
643
- }
644
- if (prev.tableStyleContext !== next.tableStyleContext) {
645
- return false;
646
- }
647
- if (prev.canvasSize.width !== next.canvasSize.width || prev.canvasSize.height !== next.canvasSize.height) {
648
- return false;
649
- }
650
- return true;
651
- }
652
- var SlideThumbnail = /* @__PURE__ */ React108__default.default.memo(
653
- SlideThumbnailImpl,
654
- slideThumbnailPropsEqual
655
- );
656
635
  function LazyThumbnailInner({
657
636
  slide,
658
637
  templateElements,
@@ -713,7 +692,7 @@ function LazyThumbnailInner({
713
692
  }
714
693
  var LazyThumbnail = /* @__PURE__ */ React108__default.default.memo(LazyThumbnailInner);
715
694
  function declaredSectionFacts(groups, sectionId) {
716
- const declared = groups.filter((group) => group.id !== chunkP2COO2QO_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunkP2COO2QO_js.UNGROUPED_SECTION_ID).map((group) => group.id);
695
+ const declared = groups.filter((group) => group.id !== chunk6GFSF2ML_js.DEFAULT_SECTION_GROUP_ID && group.id !== chunk6GFSF2ML_js.UNGROUPED_SECTION_ID).map((group) => group.id);
717
696
  return {
718
697
  isDeclared: declared.includes(sectionId),
719
698
  index: declared.indexOf(sectionId),
@@ -770,7 +749,7 @@ function SlideItemInner({
770
749
  onDrop,
771
750
  slideRef
772
751
  }) {
773
- const { t } = chunkP2COO2QO_js.useTranslation();
752
+ const { t } = chunk6GFSF2ML_js.useTranslation();
774
753
  const isHidden = Boolean(slide.hidden);
775
754
  const cue = pptx.hiddenSlideCue(slide.hidden, "rail", slideIndex);
776
755
  const handleContextMenu = React108.useCallback(
@@ -798,7 +777,7 @@ function SlideItemInner({
798
777
  "data-pptx-chrome": "slide-row",
799
778
  "aria-describedby": cue.labelId,
800
779
  "data-pptx-slide-hidden": cue.marker,
801
- className: chunkP2COO2QO_js.cn(
780
+ className: chunk6GFSF2ML_js.cn(
802
781
  "group relative flex w-full items-center gap-1 cursor-pointer border-0 bg-transparent py-0.5 px-1 text-left transition-all",
803
782
  isActive && "bg-accent/40 before:absolute before:left-0 before:top-1 before:bottom-1 before:w-[3px] before:bg-primary before:rounded-r",
804
783
  isSelected && !isActive && "bg-accent/20 ring-1 ring-inset ring-primary/50",
@@ -820,7 +799,7 @@ function SlideItemInner({
820
799
  /* @__PURE__ */ jsxRuntime.jsx(
821
800
  "span",
822
801
  {
823
- className: chunkP2COO2QO_js.cn(
802
+ className: chunk6GFSF2ML_js.cn(
824
803
  "text-[10px] tabular-nums text-right select-none w-full",
825
804
  isActive ? "text-primary font-medium" : "text-muted-foreground"
826
805
  ),
@@ -843,7 +822,7 @@ function SlideItemInner({
843
822
  /* @__PURE__ */ jsxRuntime.jsxs(
844
823
  "div",
845
824
  {
846
- className: chunkP2COO2QO_js.cn(
825
+ className: chunk6GFSF2ML_js.cn(
847
826
  "relative shrink-0 overflow-hidden border transition-colors bg-white",
848
827
  isActive ? "border-primary/60" : "border-transparent group-hover:border-border/40"
849
828
  ),
@@ -1041,8 +1020,8 @@ function SlidesPaneSidebar({
1041
1020
  fieldContext,
1042
1021
  tableStyleContext
1043
1022
  }) {
1044
- const { t } = chunkP2COO2QO_js.useTranslation();
1045
- const collab = chunkXG4WSJ4O_js.useCollaboration();
1023
+ const { t } = chunk6GFSF2ML_js.useTranslation();
1024
+ const collab = chunk3AZ6ESJU_js.useCollaboration();
1046
1025
  const slideRefs = React108.useRef(/* @__PURE__ */ new Map());
1047
1026
  const renameInputRef = React108.useRef(null);
1048
1027
  const slidePresenceMap = React108.useMemo(() => {
@@ -1067,7 +1046,7 @@ function SlidesPaneSidebar({
1067
1046
  () => estimateSlideItemHeight(canvasSize.width, canvasSize.height, previewWidth),
1068
1047
  [canvasSize.width, canvasSize.height, previewWidth]
1069
1048
  );
1070
- const showSectionHeaders = sectionGroups.some((group) => group.id !== chunkP2COO2QO_js.DEFAULT_SECTION_GROUP_ID);
1049
+ const showSectionHeaders = sectionGroups.some((group) => group.id !== chunk6GFSF2ML_js.DEFAULT_SECTION_GROUP_ID);
1071
1050
  const {
1072
1051
  collapsedSections,
1073
1052
  renamingSectionId,
@@ -1137,7 +1116,7 @@ function SlidesPaneSidebar({
1137
1116
  [sectionGroups, showSectionHeaders, effectiveCollapsed]
1138
1117
  );
1139
1118
  const shouldVirtualize = slides.length >= VIRTUALIZATION_THRESHOLD;
1140
- const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunkXG4WSJ4O_js.useVirtualizedSlides({
1119
+ const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunk3AZ6ESJU_js.useVirtualizedSlides({
1141
1120
  totalItems: shouldVirtualize ? flatItems.length : 0,
1142
1121
  itemHeight: estimatedItemHeight
1143
1122
  });
@@ -1421,7 +1400,7 @@ function SlideTemplatePreview({
1421
1400
  transformOrigin: "top left"
1422
1401
  },
1423
1402
  children: previewSlide.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
1424
- chunkXG4WSJ4O_js.StaticElementRenderer,
1403
+ chunk3AZ6ESJU_js.StaticElementRenderer,
1425
1404
  {
1426
1405
  element,
1427
1406
  activeSlide: previewSlide,
@@ -1489,8 +1468,8 @@ function SlideTemplateGalleryDialog({
1489
1468
  onInsert,
1490
1469
  scheme
1491
1470
  }) {
1492
- const { t } = chunkP2COO2QO_js.useTranslation();
1493
- const { panelStyle, handlers: dragHandlers } = chunkXG4WSJ4O_js.useModalDismissDrag(onClose);
1471
+ const { t } = chunk6GFSF2ML_js.useTranslation();
1472
+ const { panelStyle, handlers: dragHandlers } = chunk3AZ6ESJU_js.useModalDismissDrag(onClose);
1494
1473
  const [selected, setSelected] = React108.useState(null);
1495
1474
  const dialogRef = React108.useRef(null);
1496
1475
  useModalFocus(isOpen, dialogRef, onClose);
@@ -1575,7 +1554,7 @@ function SlideTemplateGalleryDialog({
1575
1554
  onInsert(spec.id);
1576
1555
  onClose();
1577
1556
  },
1578
- className: chunkP2COO2QO_js.cn(
1557
+ className: chunk6GFSF2ML_js.cn(
1579
1558
  "flex flex-col items-center gap-1 p-2 rounded border transition-colors",
1580
1559
  selected === spec.id ? "border-primary bg-primary/20" : "border-border hover:border-border hover:bg-muted/50"
1581
1560
  ),
@@ -1785,7 +1764,7 @@ function nowLocalInputValue() {
1785
1764
  return `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}T${pad(now.getHours())}:${pad(now.getMinutes())}`;
1786
1765
  }
1787
1766
  function DateTimeFieldDialog(p) {
1788
- const { t } = chunkP2COO2QO_js.useTranslation();
1767
+ const { t } = chunk6GFSF2ML_js.useTranslation();
1789
1768
  const [datePickerValue, setDatePickerValue] = React108.useState(nowLocalInputValue);
1790
1769
  const [dateFormat, setDateFormat] = React108.useState("locale");
1791
1770
  const confirmDatePicker = React108.useCallback(() => {
@@ -1891,7 +1870,7 @@ function useViewerCustomizationContext() {
1891
1870
  return React108.useContext(ViewerCustomizationContext);
1892
1871
  }
1893
1872
  function InsertSection(p) {
1894
- const { t } = chunkP2COO2QO_js.useTranslation();
1873
+ const { t } = chunk6GFSF2ML_js.useTranslation();
1895
1874
  const customization = useViewerCustomizationContext();
1896
1875
  const ref = React108.useRef(null);
1897
1876
  const [datePickerOpen, setDatePickerOpen] = React108.useState(false);
@@ -2040,8 +2019,8 @@ function MobileSheet({
2040
2019
  headerRight
2041
2020
  }) {
2042
2021
  const sheetRef = React108.useRef(null);
2043
- const { t } = chunkP2COO2QO_js.useTranslation();
2044
- const { dragY, dragging, handlers } = chunkXG4WSJ4O_js.useSheetDismissDrag(onClose);
2022
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2023
+ const { dragY, dragging, handlers } = chunk3AZ6ESJU_js.useSheetDismissDrag(onClose);
2045
2024
  useModalFocus(open, sheetRef, onClose);
2046
2025
  if (!open) {
2047
2026
  return null;
@@ -2065,7 +2044,7 @@ function MobileSheet({
2065
2044
  "aria-modal": "true",
2066
2045
  "aria-label": typeof title === "string" ? title : t("pptx.mobileSheet.ariaLabel"),
2067
2046
  tabIndex: -1,
2068
- className: chunkP2COO2QO_js.cn(
2047
+ className: chunk6GFSF2ML_js.cn(
2069
2048
  "relative bg-background border-t border-border rounded-t-2xl shadow-2xl flex flex-col overflow-hidden",
2070
2049
  "animate-in slide-in-from-bottom duration-200",
2071
2050
  className
@@ -2112,7 +2091,7 @@ function MobileSheet({
2112
2091
  ] });
2113
2092
  }
2114
2093
  function MobileInsertSheet(p) {
2115
- const { t } = chunkP2COO2QO_js.useTranslation();
2094
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2116
2095
  const close = () => p.onCloseMobileInsert?.();
2117
2096
  const customization = useViewerCustomizationContext();
2118
2097
  const [dateOpen, setDateOpen] = React108.useState(false);
@@ -2188,7 +2167,7 @@ function MobileInsertSheet(p) {
2188
2167
  ] });
2189
2168
  }
2190
2169
  function AnimationsSection(p) {
2191
- const { t } = chunkP2COO2QO_js.useTranslation();
2170
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2192
2171
  const ref = React108.useRef(null);
2193
2172
  const [previewActive, setPreviewActive] = React108.useState(false);
2194
2173
  const timer = React108.useRef(void 0);
@@ -2269,7 +2248,7 @@ function WebHomeControls({
2269
2248
  onPopup,
2270
2249
  layoutArtwork
2271
2250
  }) {
2272
- const { t } = chunkP2COO2QO_js.useTranslation();
2251
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2273
2252
  const ref = React108.useRef(null);
2274
2253
  React108.useEffect(() => {
2275
2254
  if (ref.current) {
@@ -2310,7 +2289,7 @@ function WebHomeControls({
2310
2289
  function ShapeArrangeExtras(p) {
2311
2290
  const commands = useShapeFormatContext();
2312
2291
  const crop = commands?.crop;
2313
- const { isHidden } = chunkXG4WSJ4O_js.useToolbarVisibility(p.hiddenActions);
2292
+ const { isHidden } = chunk3AZ6ESJU_js.useToolbarVisibility(p.hiddenActions);
2314
2293
  const { onGroupElements, onUngroupElement, onUpdateElementStyle } = p;
2315
2294
  const controls = React108.useMemo(
2316
2295
  () => pptx.arrangeShapeHomeControls({
@@ -2361,7 +2340,7 @@ function ShapeArrangeExtras(p) {
2361
2340
  return /* @__PURE__ */ jsxRuntime.jsx(WebHomeControls, { family: "arrange-shape", controls, onRequest: request });
2362
2341
  }
2363
2342
  function ArrangeSection(p) {
2364
- const { t } = chunkP2COO2QO_js.useTranslation();
2343
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2365
2344
  const {
2366
2345
  onAlignElements,
2367
2346
  onDistributeElements,
@@ -2468,7 +2447,7 @@ function RibbonGallery({
2468
2447
  tagControl = true,
2469
2448
  onCommand
2470
2449
  }) {
2471
- const { t } = chunkP2COO2QO_js.useTranslation();
2450
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2472
2451
  const ref = React108.useRef(null);
2473
2452
  const commands = useRibbonGalleryCommands();
2474
2453
  const context = commands?.context;
@@ -2603,7 +2582,7 @@ function WebRibbonToggle({
2603
2582
  );
2604
2583
  }
2605
2584
  function TransitionsSection(p) {
2606
- const { t } = chunkP2COO2QO_js.useTranslation();
2585
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2607
2586
  const ref = React108.useRef(null);
2608
2587
  const draft = React108.useMemo(() => pptx.readRibbonTransitionDraft(p.activeSlide), [p.activeSlide]);
2609
2588
  const transition = p.activeSlide?.transition;
@@ -2645,7 +2624,7 @@ function TransitionsSection(p) {
2645
2624
  case "soundPreview": {
2646
2625
  const url = pptx.ribbonTransitionStockSoundUrl(transition);
2647
2626
  if (url) {
2648
- chunkXG4WSJ4O_js.playAnimationSound(url);
2627
+ chunk3AZ6ESJU_js.playAnimationSound(url);
2649
2628
  }
2650
2629
  break;
2651
2630
  }
@@ -2664,7 +2643,7 @@ function TransitionsSection(p) {
2664
2643
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-ribbon-transitions", { ref });
2665
2644
  }
2666
2645
  function DesignSection(p) {
2667
- const { t } = chunkP2COO2QO_js.useTranslation();
2646
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2668
2647
  const actions = {
2669
2648
  "design.themes.browseThemes": p.onToggleThemeGallery,
2670
2649
  "design.themes.editTheme": p.onToggleThemeEditor,
@@ -2727,7 +2706,7 @@ function useRecentColors() {
2727
2706
  return React108.useContext(RecentColorsContext);
2728
2707
  }
2729
2708
  function DrawSection(p) {
2730
- const { t } = chunkP2COO2QO_js.useTranslation();
2709
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2731
2710
  const { pushColor, recentColors } = useRecentColors();
2732
2711
  const ref = React108.useRef(null);
2733
2712
  React108.useEffect(() => {
@@ -2825,7 +2804,7 @@ var AccountAuthContext = /* @__PURE__ */ React108.createContext(
2825
2804
  );
2826
2805
  var cardClass = "border border-border bg-card p-6 text-card-foreground";
2827
2806
  function AccountPage() {
2828
- const { t } = chunkP2COO2QO_js.useTranslation();
2807
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2829
2808
  const accountAuth = React108.useContext(AccountAuthContext);
2830
2809
  const storage = useViewerStorage();
2831
2810
  const cloud = useViewerCloudFiles();
@@ -2853,7 +2832,7 @@ function AccountPage() {
2853
2832
  refreshUsage();
2854
2833
  setTimeout(() => setCleared(false), 4e3);
2855
2834
  };
2856
- const version = "4.73.1" ;
2835
+ const version = "4.75.0" ;
2857
2836
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
2858
2837
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cardClass, children: [
2859
2838
  /* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -2893,7 +2872,7 @@ function AccountPage() {
2893
2872
  "aria-label": color,
2894
2873
  "aria-pressed": profile.avatarColor === color,
2895
2874
  onClick: () => updateProfile({ avatarColor: color }),
2896
- className: chunkP2COO2QO_js.cn(
2875
+ className: chunk6GFSF2ML_js.cn(
2897
2876
  "size-7 rounded-full border-2 transition-transform",
2898
2877
  profile.avatarColor === color ? "border-foreground scale-110" : "border-transparent hover:scale-105"
2899
2878
  ),
@@ -2968,7 +2947,7 @@ function BackstageAction(props) {
2968
2947
  ] });
2969
2948
  }
2970
2949
  function BackstageNewGallery(props) {
2971
- const { t } = chunkP2COO2QO_js.useTranslation();
2950
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2972
2951
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2973
2952
  /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "mt-7 text-[17px] font-semibold", children: t("pptx.backstage.newHeading") }),
2974
2953
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-5 grid grid-cols-[repeat(auto-fill,minmax(150px,1fr))] gap-6", children: pptx.BACKSTAGE_TEMPLATES.map((template) => /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2994,7 +2973,7 @@ function BackstageNewGallery(props) {
2994
2973
  ] });
2995
2974
  }
2996
2975
  function BackstageRecentList(props) {
2997
- const { t } = chunkP2COO2QO_js.useTranslation();
2976
+ const { t } = chunk6GFSF2ML_js.useTranslation();
2998
2977
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-5 border-t border-border", children: [
2999
2978
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_120px_90px] px-3 py-2 text-[11px] font-semibold text-muted-foreground", children: [
3000
2979
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: t("pptx.backstage.columnName") }),
@@ -3048,7 +3027,7 @@ function BackstageCards({
3048
3027
  props,
3049
3028
  run
3050
3029
  }) {
3051
- const { t } = chunkP2COO2QO_js.useTranslation();
3030
+ const { t } = chunk6GFSF2ML_js.useTranslation();
3052
3031
  const handlers = {
3053
3032
  protect: props.onOpenPasswordProtection,
3054
3033
  inspect: props.onOpenDocumentProperties,
@@ -3110,7 +3089,7 @@ function BackstageNavIcon({ page }) {
3110
3089
  return Icon ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-[17px] shrink-0", "aria-hidden": "true" }) : null;
3111
3090
  }
3112
3091
  function FileSection(p) {
3113
- const { t, locale } = chunkP2COO2QO_js.useTranslation();
3092
+ const { t, locale } = chunk6GFSF2ML_js.useTranslation();
3114
3093
  const [requestedPage, setRequestedPage] = React108.useState("home");
3115
3094
  const customization = useViewerCustomizationContext();
3116
3095
  const nav = pptx.backstageNavEntries(pptx.BACKSTAGE_NAV, customization);
@@ -3118,7 +3097,7 @@ function FileSection(p) {
3118
3097
  const page = offered(requestedPage) ? requestedPage : offered("home") ? "home" : nav.find((item) => item.id !== "save" && item.id !== "close")?.id ?? "home";
3119
3098
  const [query, setQuery] = React108.useState("");
3120
3099
  const [recent, setRecent] = React108.useState([]);
3121
- const { isHidden } = chunkXG4WSJ4O_js.useToolbarVisibility(p.hiddenActions);
3100
+ const { isHidden } = chunk3AZ6ESJU_js.useToolbarVisibility(p.hiddenActions);
3122
3101
  const exportHidden = isHidden("export");
3123
3102
  const storage = useViewerStorage();
3124
3103
  const cloud = useViewerCloudFiles();
@@ -3387,7 +3366,7 @@ function RibbonMenu({
3387
3366
  return /* @__PURE__ */ jsxRuntime.jsx(
3388
3367
  "div",
3389
3368
  {
3390
- className: chunkP2COO2QO_js.cn("fixed z-50", className),
3369
+ className: chunk6GFSF2ML_js.cn("fixed z-50", className),
3391
3370
  style: pos ? { left: pos.left, top: pos.top } : { visibility: "hidden" },
3392
3371
  children
3393
3372
  }
@@ -3397,7 +3376,7 @@ var THUMB_WIDTH = 128;
3397
3376
  var THUMB_HEIGHT = 72;
3398
3377
  var MAX_PREVIEW_ELEMENTS = 100;
3399
3378
  function LayoutGalleryMenu(p) {
3400
- const { t } = chunkP2COO2QO_js.useTranslation();
3379
+ const { t } = chunk6GFSF2ML_js.useTranslation();
3401
3380
  return /* @__PURE__ */ jsxRuntime.jsx(RibbonMenu, { anchorRef: p.anchorRef, className: "flex flex-col w-[620px] pt-1", children: /* @__PURE__ */ jsxRuntime.jsxs(
3402
3381
  "div",
3403
3382
  {
@@ -3413,7 +3392,7 @@ function LayoutGalleryMenu(p) {
3413
3392
  type: "button",
3414
3393
  "aria-current": isCurrent ? "true" : void 0,
3415
3394
  title: isCurrent ? `${layout.name} (${t("pptx.layoutGallery.current")})` : layout.name,
3416
- className: chunkP2COO2QO_js.cn(
3395
+ className: chunk6GFSF2ML_js.cn(
3417
3396
  "relative flex min-w-0 flex-col items-center gap-1 rounded border-2 p-1 text-xs text-foreground transition-colors hover:bg-muted",
3418
3397
  isCurrent ? "border-primary bg-primary/10" : "border-transparent"
3419
3398
  ),
@@ -3487,7 +3466,7 @@ function LayoutArtwork({
3487
3466
  backgroundColor
3488
3467
  };
3489
3468
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: (preview?.elements ?? []).slice(0, MAX_PREVIEW_ELEMENTS).map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
3490
- chunkXG4WSJ4O_js.StaticElementRenderer,
3469
+ chunk3AZ6ESJU_js.StaticElementRenderer,
3491
3470
  {
3492
3471
  element,
3493
3472
  activeSlide: slide,
@@ -3762,7 +3741,7 @@ function WebRibbonSection({
3762
3741
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-ribbon-section", { ref });
3763
3742
  }
3764
3743
  function ReviewSection(p) {
3765
- const { t } = chunkP2COO2QO_js.useTranslation();
3744
+ const { t } = chunk6GFSF2ML_js.useTranslation();
3766
3745
  const [activeCommentId, setActiveCommentId] = React108.useState(null);
3767
3746
  React108.useEffect(() => pptx.trackActiveComment(document, setActiveCommentId), []);
3768
3747
  const host = p.commentsHost;
@@ -3822,7 +3801,7 @@ function SlideShowOptions({
3822
3801
  children
3823
3802
  }) {
3824
3803
  const ref = React108.useRef(null);
3825
- const { t } = chunkP2COO2QO_js.useTranslation();
3804
+ const { t } = chunk6GFSF2ML_js.useTranslation();
3826
3805
  React108.useLayoutEffect(() => {
3827
3806
  if (!ref.current) {
3828
3807
  return;
@@ -3841,8 +3820,8 @@ function SlideShowOptions({
3841
3820
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-slide-show-options", { ref, children });
3842
3821
  }
3843
3822
  function SubtitleSettingsControl() {
3844
- const { t } = chunkP2COO2QO_js.useTranslation();
3845
- const supplied = React108.useContext(chunkXG4WSJ4O_js.ViewerOptionsStoreContext);
3823
+ const { t } = chunk6GFSF2ML_js.useTranslation();
3824
+ const supplied = React108.useContext(chunk3AZ6ESJU_js.ViewerOptionsStoreContext);
3846
3825
  const fallback = React108.useRef(null);
3847
3826
  if (!supplied) {
3848
3827
  fallback.current ??= pptx.createViewerOptionsStore({ persist: false });
@@ -3875,8 +3854,8 @@ function SubtitleSettingsControl() {
3875
3854
  );
3876
3855
  }
3877
3856
  function SlideShowSection(p) {
3878
- const { t } = chunkP2COO2QO_js.useTranslation();
3879
- const { isHidden } = chunkXG4WSJ4O_js.useToolbarVisibility(p.hiddenActions);
3857
+ const { t } = chunk6GFSF2ML_js.useTranslation();
3858
+ const { isHidden } = chunk3AZ6ESJU_js.useToolbarVisibility(p.hiddenActions);
3880
3859
  const actions = {
3881
3860
  "slideShow.startSlideShow.fromBeginning": p.onPresentFromBeginning ?? (() => p.onSetMode("present")),
3882
3861
  "slideShow.startSlideShow.fromCurrent": p.onPresent,
@@ -4120,7 +4099,7 @@ function FontFormatGroup(p) {
4120
4099
  return /* @__PURE__ */ jsxRuntime.jsx(WebHomeControls, { family: "font", controls, onRequest: request });
4121
4100
  }
4122
4101
  function FontPickerGroup(p) {
4123
- const { t } = chunkP2COO2QO_js.useTranslation();
4102
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4124
4103
  const { enabled, fontFamily, fontSize, themeFonts, embeddedFonts, customFonts } = p;
4125
4104
  const { onFamily, onSize } = p;
4126
4105
  const controls = React108.useMemo(
@@ -4143,7 +4122,7 @@ function FontPickerGroup(p) {
4143
4122
  return /* @__PURE__ */ jsxRuntime.jsx(WebHomeControls, { family: "font-picker", controls, onRequest: request });
4144
4123
  }
4145
4124
  function ParagraphGroup(p) {
4146
- const { t } = chunkP2COO2QO_js.useTranslation();
4125
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4147
4126
  const { canMut, canFormat, effectiveTs, onUpdateTextStyle, onToggleBullets } = p;
4148
4127
  const commands = useRibbonGalleryCommands();
4149
4128
  const align = pptx.paragraphHomeAlign(effectiveTs?.align);
@@ -4244,7 +4223,7 @@ function useParagraphListKind(element) {
4244
4223
  return React108.useSyncExternalStore(subscribe, read, readServer);
4245
4224
  }
4246
4225
  function TextSection(p) {
4247
- const { t } = chunkP2COO2QO_js.useTranslation();
4226
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4248
4227
  const hasSel = Boolean(p.selectedElement);
4249
4228
  const canMut = hasSel && p.canEdit;
4250
4229
  const { fontFamily, fontSize } = extractFontInfo(p.selectedElement, p.themeFonts);
@@ -4320,7 +4299,7 @@ function TextSection(p) {
4320
4299
  ] });
4321
4300
  }
4322
4301
  function ViewSection(p) {
4323
- const { t } = chunkP2COO2QO_js.useTranslation();
4302
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4324
4303
  const ref = React108.useRef(null);
4325
4304
  React108.useEffect(() => {
4326
4305
  const host = ref.current;
@@ -4393,10 +4372,10 @@ var MENU_ITEMS = [
4393
4372
  { key: "file", label: "pptx.ribbon.tab.file", icon: lu.LuFile }
4394
4373
  ];
4395
4374
  function MobileMenuSheet(props) {
4396
- const { t } = chunkP2COO2QO_js.useTranslation();
4375
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4397
4376
  const { open, onClose } = props;
4398
4377
  const [active, setActive] = React108.useState("home");
4399
- const { isTabVisible } = chunkXG4WSJ4O_js.useToolbarVisibility(props.hiddenActions);
4378
+ const { isTabVisible } = chunk3AZ6ESJU_js.useToolbarVisibility(props.hiddenActions);
4400
4379
  return /* @__PURE__ */ jsxRuntime.jsx(
4401
4380
  MobileSheet,
4402
4381
  {
@@ -4410,7 +4389,7 @@ function MobileMenuSheet(props) {
4410
4389
  {
4411
4390
  type: "button",
4412
4391
  onClick: () => setActive(active === key ? null : key),
4413
- className: chunkP2COO2QO_js.cn(
4392
+ className: chunk6GFSF2ML_js.cn(
4414
4393
  "inline-flex items-center gap-1.5 shrink-0 px-3 py-2 rounded-full text-[12px] font-medium border transition-colors min-h-[36px]",
4415
4394
  active === key ? "bg-primary text-white border-primary" : "border-border text-muted-foreground hover:text-foreground hover:bg-accent/40"
4416
4395
  ),
@@ -4685,10 +4664,10 @@ function MobileSectionBody({
4685
4664
  }
4686
4665
  }
4687
4666
  function MobileToolbar(props) {
4688
- const { t } = chunkP2COO2QO_js.useTranslation();
4667
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4689
4668
  const { mode, canUndo, canRedo, onUndo, onRedo, onSetMode, onSaveAsPptx } = props;
4690
4669
  const [menuOpen, setMenuOpen] = React108.useState(false);
4691
- const { isHidden } = chunkXG4WSJ4O_js.useToolbarVisibility(props.hiddenActions);
4670
+ const { isHidden } = chunk3AZ6ESJU_js.useToolbarVisibility(props.hiddenActions);
4692
4671
  const showEdit = mode === "edit" || mode === "master";
4693
4672
  const hidden = [];
4694
4673
  if (isHidden("undo")) {
@@ -4734,8 +4713,8 @@ function MobileToolbar(props) {
4734
4713
  ] });
4735
4714
  }
4736
4715
  function ChartSelectionStrip() {
4737
- const { t } = chunkP2COO2QO_js.useTranslation();
4738
- const commands = chunkXG4WSJ4O_js.useChartFormatContext();
4716
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4717
+ const commands = chunk3AZ6ESJU_js.useChartFormatContext();
4739
4718
  const chart = commands?.chart;
4740
4719
  const chartData = chart?.type === "chart" ? chart.chartData : void 0;
4741
4720
  const controls = React108.useMemo(
@@ -4766,7 +4745,7 @@ function PictureSizeStrip({
4766
4745
  hiddenActions
4767
4746
  }) {
4768
4747
  const crop = useShapeFormatContext()?.crop;
4769
- const { isHidden } = chunkXG4WSJ4O_js.useToolbarVisibility(hiddenActions);
4748
+ const { isHidden } = chunk3AZ6ESJU_js.useToolbarVisibility(hiddenActions);
4770
4749
  const controls = React108.useMemo(
4771
4750
  () => pptx.pictureSizeHomeControls({
4772
4751
  editable: Boolean(crop),
@@ -4783,7 +4762,7 @@ function PictureSizeStrip({
4783
4762
  return /* @__PURE__ */ jsxRuntime.jsx(WebHomeControls, { family: "picture-size", controls, onRequest: request });
4784
4763
  }
4785
4764
  function useTranslateOr() {
4786
- const { t } = chunkP2COO2QO_js.useTranslation();
4765
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4787
4766
  return (key, fallback) => pptx.galleryTextLabel(t, key, fallback);
4788
4767
  }
4789
4768
  function ContextualTabSection({
@@ -4806,7 +4785,7 @@ function ContextualTabSection({
4806
4785
  )) });
4807
4786
  }
4808
4787
  function DrawingGroup(p) {
4809
- const { t } = chunkP2COO2QO_js.useTranslation();
4788
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4810
4789
  const { recentColors, pushColor } = useRecentColors();
4811
4790
  const themeColors = useThemeColorMap();
4812
4791
  const commands = useRibbonGalleryCommands();
@@ -4892,7 +4871,7 @@ function DrawingGroup(p) {
4892
4871
  ] });
4893
4872
  }
4894
4873
  function EditingSection(p) {
4895
- const { t } = chunkP2COO2QO_js.useTranslation();
4874
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4896
4875
  const { onToggleFindReplace, onSelectAll } = p;
4897
4876
  const controls = React108.useMemo(
4898
4877
  () => pptx.editingHomeControls({ selectAll: Boolean(onSelectAll) }),
@@ -4938,8 +4917,8 @@ function RibbonAddInSection({ tab }) {
4938
4917
  var TAB_BASE = "relative px-3.5 py-2 text-[12px] font-medium whitespace-nowrap transition-colors max-md:min-h-[36px] max-md:px-3";
4939
4918
  var TAB_UNDERLINE = "after:absolute after:-bottom-px after:left-0 after:right-0 after:h-[2.5px] after:bg-primary";
4940
4919
  function RibbonTabBar(p) {
4941
- const { t } = chunkP2COO2QO_js.useTranslation();
4942
- const viewerOptions = chunkXG4WSJ4O_js.useViewerOptionsContext();
4920
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4921
+ const viewerOptions = chunk3AZ6ESJU_js.useViewerOptionsContext();
4943
4922
  return /* @__PURE__ */ jsxRuntime.jsxs(
4944
4923
  "div",
4945
4924
  {
@@ -4947,7 +4926,7 @@ function RibbonTabBar(p) {
4947
4926
  "data-pptx-chrome": "ribbon-tabs",
4948
4927
  className: "flex items-center border-b border-border/60 px-1 max-md:overflow-x-auto max-md:scrollbar-none",
4949
4928
  children: [
4950
- chunkP2COO2QO_js.TOOLBAR_SECTIONS.filter((s) => p.isTabVisible(s.id)).map((s) => {
4929
+ chunk6GFSF2ML_js.TOOLBAR_SECTIONS.filter((s) => p.isTabVisible(s.id)).map((s) => {
4951
4930
  const selected = p.activeSection === s.id;
4952
4931
  return /* @__PURE__ */ jsxRuntime.jsx(
4953
4932
  "button",
@@ -4957,7 +4936,7 @@ function RibbonTabBar(p) {
4957
4936
  "aria-selected": selected,
4958
4937
  title: pptx.resolveScreenTip(viewerOptions, t(s.labelKey)),
4959
4938
  onClick: () => p.onSelectSection(s.id),
4960
- className: chunkP2COO2QO_js.cn(
4939
+ className: chunk6GFSF2ML_js.cn(
4961
4940
  TAB_BASE,
4962
4941
  selected ? s.id === "file" ? "text-white bg-primary/80 rounded-sm" : `text-foreground ${TAB_UNDERLINE}` : s.id === "file" ? "text-primary hover:bg-primary/15 rounded-sm" : "text-muted-foreground hover:text-foreground hover:bg-accent/30"
4963
4942
  ),
@@ -4977,7 +4956,7 @@ function RibbonTabBar(p) {
4977
4956
  ...{ [pptx.RIBBON_ADD_IN_TAB_ATTR]: tab.id },
4978
4957
  title: pptx.resolveScreenTip(viewerOptions, tab.label),
4979
4958
  onClick: () => p.onSelectAddIn?.(tab.id),
4980
- className: chunkP2COO2QO_js.cn(
4959
+ className: chunk6GFSF2ML_js.cn(
4981
4960
  TAB_BASE,
4982
4961
  selected ? `text-foreground ${TAB_UNDERLINE}` : "text-muted-foreground hover:text-foreground hover:bg-accent/30"
4983
4962
  ),
@@ -4998,7 +4977,7 @@ function RibbonTabBar(p) {
4998
4977
  ...{ [pptx.RIBBON_CONTEXTUAL_TAB_ATTR]: id },
4999
4978
  title: pptx.resolveScreenTip(viewerOptions, label),
5000
4979
  onClick: () => p.onSelectContextual(id),
5001
- className: chunkP2COO2QO_js.cn(
4980
+ className: chunk6GFSF2ML_js.cn(
5002
4981
  TAB_BASE,
5003
4982
  "text-primary",
5004
4983
  selected ? TAB_UNDERLINE : "hover:bg-primary/10"
@@ -5015,10 +4994,10 @@ function RibbonTabBar(p) {
5015
4994
  );
5016
4995
  }
5017
4996
  function TabRowActions(p) {
5018
- const { t } = chunkP2COO2QO_js.useTranslation();
5019
- const collab = chunkXG4WSJ4O_js.useCollaboration();
4997
+ const { t } = chunk6GFSF2ML_js.useTranslation();
4998
+ const collab = chunk3AZ6ESJU_js.useCollaboration();
5020
4999
  const isCollaborating = Boolean(collab && collab.status === "connected");
5021
- const { isHidden } = chunkXG4WSJ4O_js.useToolbarVisibility(p.hiddenActions);
5000
+ const { isHidden } = chunk3AZ6ESJU_js.useToolbarVisibility(p.hiddenActions);
5022
5001
  const customization = useViewerCustomizationContext();
5023
5002
  const ref = React108.useRef(null);
5024
5003
  const handlers = React108.useRef(p);
@@ -5072,8 +5051,8 @@ function TabRowActions(p) {
5072
5051
  ] });
5073
5052
  }
5074
5053
  function TitleBarElement(p) {
5075
- const { t } = chunkP2COO2QO_js.useTranslation();
5076
- const options = chunkXG4WSJ4O_js.useViewerOptionsContext();
5054
+ const { t } = chunk6GFSF2ML_js.useTranslation();
5055
+ const options = chunk3AZ6ESJU_js.useViewerOptionsContext();
5077
5056
  const customization = useViewerCustomizationContext();
5078
5057
  const ref = React108.useRef(null);
5079
5058
  const stripVisible = options.quickAccess.visible && pptx.isPanelVisible(customization, "quickAccessToolbar");
@@ -5138,7 +5117,7 @@ function CustomShowsControls({
5138
5117
  onDeleteActiveCustomShow,
5139
5118
  onToggleCurrentSlideInActiveShow
5140
5119
  }) {
5141
- const { t } = chunkP2COO2QO_js.useTranslation();
5120
+ const { t } = chunk6GFSF2ML_js.useTranslation();
5142
5121
  if (customShows.length > 0) {
5143
5122
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5144
5123
  sep,
@@ -5193,7 +5172,7 @@ function CustomShowsControls({
5193
5172
  {
5194
5173
  type: "button",
5195
5174
  onClick: onToggleCurrentSlideInActiveShow,
5196
- className: chunkP2COO2QO_js.cn(
5175
+ className: chunk6GFSF2ML_js.cn(
5197
5176
  "px-2 py-1 rounded text-[11px] transition-colors",
5198
5177
  isCurrentSlideInActiveShow ? "bg-primary text-white" : "bg-muted hover:bg-accent"
5199
5178
  ),
@@ -5232,7 +5211,7 @@ function PresentDropdown({
5232
5211
  onToggleSubtitles,
5233
5212
  showSubtitles
5234
5213
  }) {
5235
- const { t } = chunkP2COO2QO_js.useTranslation();
5214
+ const { t } = chunk6GFSF2ML_js.useTranslation();
5236
5215
  const [open, setOpen] = React108.useState(false);
5237
5216
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
5238
5217
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-stretch rounded border border-border bg-muted text-xs overflow-hidden", children: [
@@ -5241,7 +5220,7 @@ function PresentDropdown({
5241
5220
  {
5242
5221
  type: "button",
5243
5222
  onClick: onPresent,
5244
- className: chunkP2COO2QO_js.cn(
5223
+ className: chunk6GFSF2ML_js.cn(
5245
5224
  "px-2 py-1 transition-colors",
5246
5225
  isActive ? "bg-primary text-white" : "hover:bg-accent text-foreground"
5247
5226
  ),
@@ -5254,7 +5233,7 @@ function PresentDropdown({
5254
5233
  {
5255
5234
  type: "button",
5256
5235
  onClick: () => setOpen((prev) => !prev),
5257
- className: chunkP2COO2QO_js.cn(
5236
+ className: chunk6GFSF2ML_js.cn(
5258
5237
  "inline-flex items-center px-1 transition-colors border-l border-border",
5259
5238
  open ? "bg-primary text-white" : "hover:bg-accent text-foreground"
5260
5239
  ),
@@ -5382,7 +5361,7 @@ function ModeSwitcher({
5382
5361
  onToggleSubtitles,
5383
5362
  showSubtitles
5384
5363
  }) {
5385
- const { t } = chunkP2COO2QO_js.useTranslation();
5364
+ const { t } = chunk6GFSF2ML_js.useTranslation();
5386
5365
  if (mode === "master") {
5387
5366
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-1.5", children: [
5388
5367
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center px-2 py-0.5 rounded-sm bg-amber-600/90 text-[10px] text-amber-50", children: t("pptx.mode.masterView") }),
@@ -5420,7 +5399,7 @@ var EXPORT_CARD_OF = {
5420
5399
  copyImg: "copyImage"
5421
5400
  };
5422
5401
  function OverflowMenu(p) {
5423
- const { t } = chunkP2COO2QO_js.useTranslation();
5402
+ const { t } = chunk6GFSF2ML_js.useTranslation();
5424
5403
  const customization = useViewerCustomizationContext();
5425
5404
  const offered = (k) => {
5426
5405
  const card = EXPORT_CARD_OF[k];
@@ -5457,7 +5436,7 @@ function OverflowMenu(p) {
5457
5436
  {
5458
5437
  type: "button",
5459
5438
  onClick: () => p.onSetOverflowMenuOpen(!p.isOverflowMenuOpen),
5460
- className: chunkP2COO2QO_js.cn(
5439
+ className: chunk6GFSF2ML_js.cn(
5461
5440
  "p-1.5 rounded transition-colors",
5462
5441
  p.isOverflowMenuOpen ? "bg-primary/80 text-white" : "bg-muted hover:bg-accent"
5463
5442
  ),
@@ -5495,7 +5474,7 @@ function OverflowMenu(p) {
5495
5474
  ] });
5496
5475
  }
5497
5476
  function ToolbarPrimaryRow(p) {
5498
- const { t } = chunkP2COO2QO_js.useTranslation();
5477
+ const { t } = chunk6GFSF2ML_js.useTranslation();
5499
5478
  const {
5500
5479
  mode,
5501
5480
  canEdit,
@@ -5504,7 +5483,7 @@ function ToolbarPrimaryRow(p) {
5504
5483
  onToggleSidebar,
5505
5484
  onToggleInspector
5506
5485
  } = p;
5507
- const collab = chunkXG4WSJ4O_js.useCollaboration();
5486
+ const collab = chunk3AZ6ESJU_js.useCollaboration();
5508
5487
  const customization = useViewerCustomizationContext();
5509
5488
  const showSlidesToggle = pptx.isPanelVisible(customization, "slidesPane");
5510
5489
  const showInspectorToggle = pptx.isPanelVisible(customization, "inspector");
@@ -5524,7 +5503,7 @@ function ToolbarPrimaryRow(p) {
5524
5503
  {
5525
5504
  type: "button",
5526
5505
  onClick: onToggleSidebar,
5527
- className: chunkP2COO2QO_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
5506
+ className: chunk6GFSF2ML_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
5528
5507
  title: t("pptx.toolbar.toggleSlidesPanel"),
5529
5508
  "aria-label": t("pptx.toolbar.toggleSlidesPanel"),
5530
5509
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelLeft, { className: ic })
@@ -5585,7 +5564,7 @@ function ToolbarPrimaryRow(p) {
5585
5564
  {
5586
5565
  type: "button",
5587
5566
  onClick: onToggleInspector,
5588
- className: chunkP2COO2QO_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
5567
+ className: chunk6GFSF2ML_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
5589
5568
  title: t("pptx.toolbar.toggleInspector"),
5590
5569
  "aria-label": t("pptx.toolbar.toggleInspector"),
5591
5570
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelRight, { className: ic })
@@ -5596,7 +5575,7 @@ function ToolbarPrimaryRow(p) {
5596
5575
  {
5597
5576
  type: "button",
5598
5577
  onClick: p.onToggleAiPanel,
5599
- className: chunkP2COO2QO_js.cn(qab, p.isAiPanelOpen ? "text-primary" : "text-muted-foreground"),
5578
+ className: chunk6GFSF2ML_js.cn(qab, p.isAiPanelOpen ? "text-primary" : "text-muted-foreground"),
5600
5579
  title: t("pptx.toolbar.toggleAiAssistant"),
5601
5580
  "aria-label": t("pptx.toolbar.toggleAiAssistant"),
5602
5581
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSparkles, { className: ic })
@@ -5607,7 +5586,7 @@ function ToolbarPrimaryRow(p) {
5607
5586
  {
5608
5587
  type: "button",
5609
5588
  onClick: p.onOpenSettings ?? p.onToggleShortcuts,
5610
- className: chunkP2COO2QO_js.cn(qab, "text-muted-foreground"),
5589
+ className: chunk6GFSF2ML_js.cn(qab, "text-muted-foreground"),
5611
5590
  title: t("pptx.toolbar.settingsShortcuts"),
5612
5591
  "aria-label": t("pptx.toolbar.settings"),
5613
5592
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSettings, { className: ics })
@@ -5651,7 +5630,7 @@ function useContextualRibbonTab(selectedElement, customization, onFallback) {
5651
5630
  return { visible, active, fellBack, select: setChosen };
5652
5631
  }
5653
5632
  function HelpSection(p) {
5654
- const { t } = chunkP2COO2QO_js.useTranslation();
5633
+ const { t } = chunk6GFSF2ML_js.useTranslation();
5655
5634
  const groups = pptx.buildHelpRibbon(t, {
5656
5635
  options: pptx.isDialogAvailable(useViewerCustomizationContext(), "options")
5657
5636
  });
@@ -5671,7 +5650,7 @@ function HelpSection(p) {
5671
5650
  return /* @__PURE__ */ jsxRuntime.jsx(WebRibbonSection, { groups, onCommand: request });
5672
5651
  }
5673
5652
  function RecordSection(props) {
5674
- const { t } = chunkP2COO2QO_js.useTranslation();
5653
+ const { t } = chunk6GFSF2ML_js.useTranslation();
5675
5654
  const request = (id) => {
5676
5655
  if (id === "record.record.fromBeginning") {
5677
5656
  props.onRecordFromBeginning();
@@ -5804,9 +5783,9 @@ function ToolbarLateTabs({
5804
5783
  }
5805
5784
  function Toolbar(p) {
5806
5785
  const { mode, isNarrowViewport, isCompactToolbarOpen, toolbarSection, onSetToolbarSection } = p;
5807
- const { t } = chunkP2COO2QO_js.useTranslation();
5808
- const { isTabVisible } = chunkXG4WSJ4O_js.useToolbarVisibility(p.hiddenActions);
5809
- const viewerOptions = chunkXG4WSJ4O_js.useViewerOptionsContext();
5786
+ const { t } = chunk6GFSF2ML_js.useTranslation();
5787
+ const { isTabVisible } = chunk3AZ6ESJU_js.useToolbarVisibility(p.hiddenActions);
5788
+ const viewerOptions = chunk3AZ6ESJU_js.useViewerOptionsContext();
5810
5789
  const customization = useViewerCustomizationContext();
5811
5790
  const belowInput = React108.useMemo(
5812
5791
  () => ({
@@ -5904,7 +5883,7 @@ function Toolbar(p) {
5904
5883
  {
5905
5884
  type: "button",
5906
5885
  onClick: p.onToggleCompactToolbar,
5907
- className: chunkP2COO2QO_js.cn(
5886
+ className: chunk6GFSF2ML_js.cn(
5908
5887
  "px-2 py-1 rounded text-[11px] transition-colors mr-1",
5909
5888
  isCompactToolbarOpen ? "bg-primary/80 text-white" : "text-muted-foreground hover:text-foreground"
5910
5889
  ),
@@ -5930,7 +5909,7 @@ function Toolbar(p) {
5930
5909
  {
5931
5910
  ref: attachOverflow,
5932
5911
  "data-pptx-chrome": "ribbon-content",
5933
- className: chunkP2COO2QO_js.cn(
5912
+ className: chunk6GFSF2ML_js.cn(
5934
5913
  // Plain controls stay compact; labelled RibbonGroups opt into stretching.
5935
5914
  // `RibbonGroupScope` wraps controls in a `display: contents` div, so its
5936
5915
  // children are this row's flex items too and must not shrink (a shrunk
@@ -6120,7 +6099,7 @@ function Toolbar(p) {
6120
6099
  );
6121
6100
  }
6122
6101
  function CanvasGuides({ guides, onDeleteGuide, onStartGuideDrag }) {
6123
- const { t } = chunkP2COO2QO_js.useTranslation();
6102
+ const { t } = chunk6GFSF2ML_js.useTranslation();
6124
6103
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: guides.map((guide) => /* @__PURE__ */ jsxRuntime.jsx(
6125
6104
  "div",
6126
6105
  {
@@ -6332,7 +6311,7 @@ function ChartQuickActionsOverlay({
6332
6311
  scale: stageScale = 1,
6333
6312
  onUpdateElement
6334
6313
  }) {
6335
- const { t } = chunkP2COO2QO_js.useTranslation();
6314
+ const { t } = chunk6GFSF2ML_js.useTranslation();
6336
6315
  const [open, setOpen] = React108.useState(null);
6337
6316
  const hostRef = React108.useRef(null);
6338
6317
  React108.useEffect(() => {
@@ -6503,7 +6482,7 @@ function CommentMarkersOverlay({
6503
6482
  canvasSize,
6504
6483
  onCommentMarkerClick
6505
6484
  }) {
6506
- const { t } = chunkP2COO2QO_js.useTranslation(), half = pptx.COMMENT_MARKER_SIZE / 2, markers = pptx.buildCommentMarkers(
6485
+ const { t } = chunk6GFSF2ML_js.useTranslation(), half = pptx.COMMENT_MARKER_SIZE / 2, markers = pptx.buildCommentMarkers(
6507
6486
  comments,
6508
6487
  canvasSize.width,
6509
6488
  canvasSize.height,
@@ -6547,7 +6526,7 @@ function ConnectorEndpointOverlay({
6547
6526
  canvasStageRef,
6548
6527
  onUpdateElement
6549
6528
  }) {
6550
- const { t } = chunkP2COO2QO_js.useTranslation();
6529
+ const { t } = chunk6GFSF2ML_js.useTranslation();
6551
6530
  const [drag, setDrag] = React108.useState(null);
6552
6531
  const candidates = React108.useMemo(
6553
6532
  () => pptx.collectConnectorSiteCandidates(elements.filter((el) => el.id !== connector.id)),
@@ -6783,7 +6762,7 @@ function DrawingOverlaySvg({
6783
6762
  onPointerDown,
6784
6763
  onPointerMove,
6785
6764
  onPointerUp,
6786
- children: isStrokeActive && liveStrokeView ? chunkXG4WSJ4O_js.renderStrokeView(liveStrokeView, true, void 0, "ink-live-preview") : isStrokeActive && liveStrokeD && /* @__PURE__ */ jsxRuntime.jsx(
6765
+ children: isStrokeActive && liveStrokeView ? chunk3AZ6ESJU_js.renderStrokeView(liveStrokeView, true, void 0, "ink-live-preview") : isStrokeActive && liveStrokeD && /* @__PURE__ */ jsxRuntime.jsx(
6787
6766
  "path",
6788
6767
  {
6789
6768
  d: liveStrokeD,
@@ -6798,7 +6777,7 @@ function DrawingOverlaySvg({
6798
6777
  }
6799
6778
  );
6800
6779
  }
6801
- function GridOverlay({ canvasSize, gridSpacingPx = chunkP2COO2QO_js.GRID_SIZE, visible }) {
6780
+ function GridOverlay({ canvasSize, gridSpacingPx = chunk6GFSF2ML_js.GRID_SIZE, visible }) {
6802
6781
  const spacing = Math.max(gridSpacingPx, 2);
6803
6782
  const patternId = React108.useMemo(() => `grid-dot-pattern-${Math.random().toString(36).slice(2, 8)}`, []);
6804
6783
  if (!visible) {
@@ -6826,7 +6805,7 @@ function MotionPathOverlay({
6826
6805
  canEdit,
6827
6806
  onChangePath
6828
6807
  }) {
6829
- const { t } = chunkP2COO2QO_js.useTranslation();
6808
+ const { t } = chunk6GFSF2ML_js.useTranslation();
6830
6809
  const dragRef = React108.useRef(null);
6831
6810
  const frame = {
6832
6811
  originX: element.x + element.width / 2,
@@ -6940,7 +6919,7 @@ function MotionPathOverlay({
6940
6919
  );
6941
6920
  }
6942
6921
  function EditPointsMenu({ menu, onRun }) {
6943
- const { t } = chunkP2COO2QO_js.useTranslation();
6922
+ const { t } = chunk6GFSF2ML_js.useTranslation();
6944
6923
  const stop2 = (event) => event.stopPropagation();
6945
6924
  return /* @__PURE__ */ jsxRuntime.jsx(
6946
6925
  "div",
@@ -6986,7 +6965,7 @@ function EditPointsOverlay({
6986
6965
  onCommit,
6987
6966
  onExit
6988
6967
  }) {
6989
- const { t } = chunkP2COO2QO_js.useTranslation();
6968
+ const { t } = chunk6GFSF2ML_js.useTranslation();
6990
6969
  const [, rerender] = React108.useReducer((n) => n + 1, 0);
6991
6970
  const svgRef = React108.useRef(null);
6992
6971
  const latest = React108.useRef({ onCommit, onExit });
@@ -7142,7 +7121,7 @@ function FreeformToolOverlay({
7142
7121
  onCommit,
7143
7122
  onCancel
7144
7123
  }) {
7145
- const { t } = chunkP2COO2QO_js.useTranslation();
7124
+ const { t } = chunk6GFSF2ML_js.useTranslation();
7146
7125
  const [, rerender] = React108.useReducer((n) => n + 1, 0);
7147
7126
  const svgRef = React108.useRef(null);
7148
7127
  const latest = React108.useRef({ onCommit, onCancel });
@@ -7285,7 +7264,7 @@ function PictureCropOverlay({
7285
7264
  onUpdate,
7286
7265
  onContextMenu
7287
7266
  }) {
7288
- const { t } = chunkP2COO2QO_js.useTranslation();
7267
+ const { t } = chunk6GFSF2ML_js.useTranslation();
7289
7268
  const overlay = pptx.buildCropOverlay(element, scale);
7290
7269
  const dragRef = React108.useRef(null);
7291
7270
  const latest = React108.useRef({ scale, onUpdate });
@@ -7333,7 +7312,7 @@ function PictureCropOverlay({
7333
7312
  };
7334
7313
  };
7335
7314
  const { ghost, frame, handles } = overlay;
7336
- const src = chunkXG4WSJ4O_js.imgSrc(element);
7315
+ const src = chunk3AZ6ESJU_js.imgSrc(element);
7337
7316
  return /* @__PURE__ */ jsxRuntime.jsxs(
7338
7317
  "div",
7339
7318
  {
@@ -7509,7 +7488,7 @@ function HorizontalRulerView({ ticks, widthPx, highlight }) {
7509
7488
  }
7510
7489
  );
7511
7490
  }
7512
- var HorizontalRuler = /* @__PURE__ */ chunkXG4WSJ4O_js.withDisplayName(
7491
+ var HorizontalRuler = /* @__PURE__ */ chunk3AZ6ESJU_js.withDisplayName(
7513
7492
  /* @__PURE__ */ React108__default.default.memo(HorizontalRulerView),
7514
7493
  "HorizontalRuler"
7515
7494
  );
@@ -7583,7 +7562,7 @@ function VerticalRulerView({ ticks, heightPx, highlight }) {
7583
7562
  }
7584
7563
  );
7585
7564
  }
7586
- var VerticalRuler = /* @__PURE__ */ chunkXG4WSJ4O_js.withDisplayName(
7565
+ var VerticalRuler = /* @__PURE__ */ chunk3AZ6ESJU_js.withDisplayName(
7587
7566
  /* @__PURE__ */ React108__default.default.memo(VerticalRulerView),
7588
7567
  "VerticalRuler"
7589
7568
  );
@@ -7750,10 +7729,10 @@ function SelectionHandleOverlay({
7750
7729
  position: "absolute",
7751
7730
  left: element.x,
7752
7731
  top: element.y,
7753
- width: Math.max(element.width, chunkP2COO2QO_js.MIN_ELEMENT_SIZE),
7754
- height: Math.max(element.height, chunkP2COO2QO_js.MIN_ELEMENT_SIZE),
7755
- ["--pptx-selection-width"]: `${Math.max(element.width, chunkP2COO2QO_js.MIN_ELEMENT_SIZE)}px`,
7756
- ["--pptx-selection-height"]: `${Math.max(element.height, chunkP2COO2QO_js.MIN_ELEMENT_SIZE)}px`,
7732
+ width: Math.max(element.width, chunk6GFSF2ML_js.MIN_ELEMENT_SIZE),
7733
+ height: Math.max(element.height, chunk6GFSF2ML_js.MIN_ELEMENT_SIZE),
7734
+ ["--pptx-selection-width"]: `${Math.max(element.width, chunk6GFSF2ML_js.MIN_ELEMENT_SIZE)}px`,
7735
+ ["--pptx-selection-height"]: `${Math.max(element.height, chunk6GFSF2ML_js.MIN_ELEMENT_SIZE)}px`,
7757
7736
  // Every slide element carries an explicit numeric `zIndex` (see
7758
7737
  // `getContainerStyle`), so a sibling with no z-index at all paints
7759
7738
  // at the CSS "z-index: 0" level regardless of DOM order: any
@@ -7765,7 +7744,7 @@ function SelectionHandleOverlay({
7765
7744
  // (marquee z-50, connector overlay z-55/56) to match, well clear of
7766
7745
  // any realistic per-slide element count.
7767
7746
  zIndex: 58,
7768
- transform: chunkP2COO2QO_js.getElementTransform(element),
7747
+ transform: chunk6GFSF2ML_js.getElementTransform(element),
7769
7748
  transformOrigin: "center",
7770
7749
  // Transparent everywhere a handle button is not, so a click that
7771
7750
  // misses every handle still reaches the shape (or whatever is
@@ -7777,14 +7756,14 @@ function SelectionHandleOverlay({
7777
7756
  onDoubleClick: (e) => onDoubleClick(element.id, e),
7778
7757
  onContextMenu: (e) => onContextMenu(element.id, e),
7779
7758
  children: /* @__PURE__ */ jsxRuntime.jsx(
7780
- chunkXG4WSJ4O_js.ResizeHandles,
7759
+ chunk3AZ6ESJU_js.ResizeHandles,
7781
7760
  {
7782
7761
  elementId: element.id,
7783
7762
  adjustmentHandles,
7784
7763
  onResizePointerDown,
7785
7764
  onAdjustmentPointerDown,
7786
7765
  rotation: element.rotation,
7787
- nonRotationTransform: chunkP2COO2QO_js.getElementTransformWithoutRotation(element),
7766
+ nonRotationTransform: chunk6GFSF2ML_js.getElementTransformWithoutRotation(element),
7788
7767
  onRotate: allow.rotatable ? onRotate : void 0,
7789
7768
  forcePointerEvents: true
7790
7769
  }
@@ -8488,7 +8467,7 @@ function SlideCanvas(props) {
8488
8467
  props.registerInlineEditReader
8489
8468
  ]
8490
8469
  );
8491
- return /* @__PURE__ */ jsxRuntime.jsx(chunkXG4WSJ4O_js.InlineCollaborationContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(SlideCanvasContent, { ...props }) });
8470
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk3AZ6ESJU_js.InlineCollaborationContext.Provider, { value, children: /* @__PURE__ */ jsxRuntime.jsx(SlideCanvasContent, { ...props }) });
8492
8471
  }
8493
8472
  function SlideCanvasContent({
8494
8473
  imagePaste,
@@ -8761,7 +8740,7 @@ function SlideCanvasContent({
8761
8740
  onPointerMove: handleStagePointerMove,
8762
8741
  onPointerUp: handleStagePointerUp,
8763
8742
  children: [
8764
- /* @__PURE__ */ jsxRuntime.jsx(chunkXG4WSJ4O_js.SlideBackgroundImageLayer, { slide: activeSlide }),
8743
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3AZ6ESJU_js.SlideBackgroundImageLayer, { slide: activeSlide }),
8765
8744
  presentationKeyframesCss && /* @__PURE__ */ jsxRuntime.jsx("style", { children: presentationKeyframesCss }),
8766
8745
  /* @__PURE__ */ jsxRuntime.jsx(GridOverlay, { canvasSize, gridSpacingPx, visible: showGrid }),
8767
8746
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -8773,7 +8752,7 @@ function SlideCanvasContent({
8773
8752
  }
8774
8753
  ),
8775
8754
  templateElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
8776
- chunkXG4WSJ4O_js.ElementRenderer,
8755
+ chunk3AZ6ESJU_js.ElementRenderer,
8777
8756
  {
8778
8757
  element,
8779
8758
  activeSlide,
@@ -8796,7 +8775,7 @@ function SlideCanvasContent({
8796
8775
  ),
8797
8776
  renderInk: false,
8798
8777
  renderGroups: true,
8799
- adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkP2COO2QO_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8778
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunk6GFSF2ML_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8800
8779
  onResizePointerDown: stableResizePointerDown,
8801
8780
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
8802
8781
  onRotate: stableRotate,
@@ -8818,7 +8797,7 @@ function SlideCanvasContent({
8818
8797
  `tpl-${element.id}`
8819
8798
  )),
8820
8799
  activeSlide?.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
8821
- chunkXG4WSJ4O_js.ElementRenderer,
8800
+ chunk3AZ6ESJU_js.ElementRenderer,
8822
8801
  {
8823
8802
  element,
8824
8803
  activeSlide,
@@ -8841,7 +8820,7 @@ function SlideCanvasContent({
8841
8820
  ),
8842
8821
  renderInk: true,
8843
8822
  renderGroups: true,
8844
- adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunkP2COO2QO_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8823
+ adjustmentHandles: isEditableCanvas && selectedElement?.id === element.id ? chunk6GFSF2ML_js.getShapeAdjustmentHandleDescriptors(element) : EMPTY_ADJUSTMENT_HANDLES,
8845
8824
  onResizePointerDown: stableResizePointerDown,
8846
8825
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
8847
8826
  onRotate: stableRotate,
@@ -8885,7 +8864,7 @@ function SlideCanvasContent({
8885
8864
  editingMember && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8886
8865
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: `[data-element-id="${cssAttr(editingMember.parentId)}"] [data-element-id="${cssAttr(editingMember.member.id)}"]{visibility:hidden}` }),
8887
8866
  /* @__PURE__ */ jsxRuntime.jsx(
8888
- chunkXG4WSJ4O_js.ElementRenderer,
8867
+ chunk3AZ6ESJU_js.ElementRenderer,
8889
8868
  {
8890
8869
  element: editingMember.member,
8891
8870
  activeSlide,
@@ -8920,11 +8899,11 @@ function SlideCanvasContent({
8920
8899
  `group-member-edit-${editingMember.member.id}`
8921
8900
  )
8922
8901
  ] }),
8923
- selectedElement && selectedElement.id !== cropElement?.id && pptx.shouldShowElementHandles(isEditableCanvas, true, selectedElementIdSet.size) && !chunkP2COO2QO_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
8902
+ selectedElement && selectedElement.id !== cropElement?.id && pptx.shouldShowElementHandles(isEditableCanvas, true, selectedElementIdSet.size) && !chunk6GFSF2ML_js.isConnectorOrLineElement(selectedElement) && outlineAuthoring?.editPointsElementId !== selectedElement.id && /* @__PURE__ */ jsxRuntime.jsx(
8924
8903
  SelectionHandleOverlay,
8925
8904
  {
8926
8905
  element: selectedElement,
8927
- adjustmentHandles: chunkP2COO2QO_js.getShapeAdjustmentHandleDescriptors(selectedElement),
8906
+ adjustmentHandles: chunk6GFSF2ML_js.getShapeAdjustmentHandleDescriptors(selectedElement),
8928
8907
  onResizePointerDown: stableResizePointerDown,
8929
8908
  onAdjustmentPointerDown: stableAdjustmentPointerDown,
8930
8909
  onRotate: stableRotate,
@@ -9031,14 +9010,14 @@ function SlideCanvasContent({
9031
9010
  );
9032
9011
  }
9033
9012
  function LoadingState({ className, fontProgress }) {
9034
- const { t } = chunkP2COO2QO_js.useTranslation();
9013
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9035
9014
  return /* @__PURE__ */ jsxRuntime.jsx(
9036
9015
  "div",
9037
9016
  {
9038
9017
  role: "status",
9039
9018
  "aria-live": "polite",
9040
9019
  "aria-atomic": "true",
9041
- className: chunkP2COO2QO_js.cn(
9020
+ className: chunk6GFSF2ML_js.cn(
9042
9021
  "h-full w-full flex items-center justify-center text-muted-foreground",
9043
9022
  className
9044
9023
  ),
@@ -9064,7 +9043,7 @@ function ErrorState({ className, error }) {
9064
9043
  {
9065
9044
  role: "alert",
9066
9045
  "aria-live": "assertive",
9067
- className: chunkP2COO2QO_js.cn(
9046
+ className: chunk6GFSF2ML_js.cn(
9068
9047
  "h-full w-full flex items-center justify-center p-6 text-center text-red-400",
9069
9048
  className
9070
9049
  ),
@@ -9073,7 +9052,7 @@ function ErrorState({ className, error }) {
9073
9052
  );
9074
9053
  }
9075
9054
  function ShortcutPanel({ isOpen, onClose }) {
9076
- const { t } = chunkP2COO2QO_js.useTranslation();
9055
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9077
9056
  if (!isOpen) {
9078
9057
  return null;
9079
9058
  }
@@ -9095,7 +9074,7 @@ function ShortcutPanel({ isOpen, onClose }) {
9095
9074
  }
9096
9075
  )
9097
9076
  ] }),
9098
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunkP2COO2QO_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
9077
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunk6GFSF2ML_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
9099
9078
  "div",
9100
9079
  {
9101
9080
  className: "flex items-center justify-between gap-3 rounded bg-muted/80 px-2 py-1.5",
@@ -9117,7 +9096,7 @@ function AccessibilityPanel({
9117
9096
  reducedMotion,
9118
9097
  onToggleReducedMotion
9119
9098
  }) {
9120
- const { t } = chunkP2COO2QO_js.useTranslation();
9099
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9121
9100
  if (!isOpen) {
9122
9101
  return null;
9123
9102
  }
@@ -9155,14 +9134,14 @@ function AccessibilityPanel({
9155
9134
  "aria-label": t("pptx.accessibility.reduceMotion"),
9156
9135
  "aria-checked": reducedMotion ?? false,
9157
9136
  onClick: onToggleReducedMotion,
9158
- className: chunkP2COO2QO_js.cn(
9137
+ className: chunk6GFSF2ML_js.cn(
9159
9138
  "relative inline-flex h-5 w-9 items-center rounded-full transition-colors",
9160
9139
  reducedMotion ? "bg-primary" : "bg-muted-foreground/30"
9161
9140
  ),
9162
9141
  children: /* @__PURE__ */ jsxRuntime.jsx(
9163
9142
  "span",
9164
9143
  {
9165
- className: chunkP2COO2QO_js.cn(
9144
+ className: chunk6GFSF2ML_js.cn(
9166
9145
  "inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",
9167
9146
  reducedMotion ? "translate-x-4" : "translate-x-0.5"
9168
9147
  )
@@ -9181,7 +9160,7 @@ function AccessibilityPanel({
9181
9160
  "div",
9182
9161
  {
9183
9162
  role: "listitem",
9184
- className: chunkP2COO2QO_js.cn(
9163
+ className: chunk6GFSF2ML_js.cn(
9185
9164
  "flex items-start gap-2 rounded px-2 py-1.5 text-xs",
9186
9165
  /* Severity-based background and text colouring */
9187
9166
  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"
@@ -9209,7 +9188,7 @@ function ExportProgressModal({
9209
9188
  statusMessage,
9210
9189
  onCancel
9211
9190
  }) {
9212
- const { t } = chunkP2COO2QO_js.useTranslation();
9191
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9213
9192
  const ref = useWebControl(
9214
9193
  { open: isOpen, title, progress, status: statusMessage, translate: t },
9215
9194
  { "export-cancel": () => onCancel() }
@@ -9217,7 +9196,7 @@ function ExportProgressModal({
9217
9196
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-export-progress", { ref });
9218
9197
  }
9219
9198
  function StatusBar(p) {
9220
- const { t } = chunkP2COO2QO_js.useTranslation();
9199
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9221
9200
  const ref = React108.useRef(null);
9222
9201
  React108.useEffect(() => {
9223
9202
  const host = ref.current;
@@ -9299,7 +9278,7 @@ function ResizeHandle({
9299
9278
  {
9300
9279
  role: "separator",
9301
9280
  "aria-orientation": direction,
9302
- className: chunkP2COO2QO_js.cn(
9281
+ className: chunk6GFSF2ML_js.cn(
9303
9282
  // Outer container: generous hit area for easy clicking.
9304
9283
  // The visible indicator is rendered via the inner pseudo-element (::after).
9305
9284
  "relative flex-shrink-0 z-20 group",
@@ -9310,7 +9289,7 @@ function ResizeHandle({
9310
9289
  children: /* @__PURE__ */ jsxRuntime.jsx(
9311
9290
  "div",
9312
9291
  {
9313
- className: chunkP2COO2QO_js.cn(
9292
+ className: chunk6GFSF2ML_js.cn(
9314
9293
  "absolute transition-colors",
9315
9294
  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"
9316
9295
  )
@@ -9399,10 +9378,10 @@ function contextMenuHandlers(props, shapeFormat = null) {
9399
9378
  }
9400
9379
  function ContextMenu(props) {
9401
9380
  const { contextMenuState, mode, onClose } = props;
9402
- const { t } = chunkP2COO2QO_js.useTranslation();
9381
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9403
9382
  const customization = useViewerCustomizationContext();
9404
9383
  const shapeFormat = useShapeFormatContext();
9405
- const chartFormat = chunkXG4WSJ4O_js.useChartFormatContext();
9384
+ const chartFormat = chunk3AZ6ESJU_js.useChartFormatContext();
9406
9385
  const open = Boolean(contextMenuState) && mode === "edit";
9407
9386
  const handlers = {
9408
9387
  ...contextMenuHandlers(props, shapeFormat),
@@ -9478,7 +9457,7 @@ function canvasContextMenuHandlers(props) {
9478
9457
  }
9479
9458
  function CanvasContextMenu(props) {
9480
9459
  const { canvasContextMenuState, mode, onClose } = props;
9481
- const { t } = chunkP2COO2QO_js.useTranslation();
9460
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9482
9461
  const customization = useViewerCustomizationContext();
9483
9462
  const open = Boolean(canvasContextMenuState) && mode === "edit";
9484
9463
  const handlers = canvasContextMenuHandlers(props);
@@ -9541,7 +9520,7 @@ function FindReplacePanel({
9541
9520
  onReplaceAll,
9542
9521
  onClose
9543
9522
  }) {
9544
- const { t } = chunkP2COO2QO_js.useTranslation();
9523
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9545
9524
  const searchInputRef = React108.useRef(null);
9546
9525
  React108.useEffect(() => {
9547
9526
  searchInputRef.current?.focus();
@@ -9732,7 +9711,7 @@ function HandoutMasterPanel({
9732
9711
  onSlidesPerPageChange,
9733
9712
  onBackgroundChange
9734
9713
  }) {
9735
- const { t } = chunkP2COO2QO_js.useTranslation();
9714
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9736
9715
  if (!handoutMaster) {
9737
9716
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 py-4 text-center text-xs text-muted-foreground", children: t("pptx.master.noHandoutMaster") });
9738
9717
  }
@@ -9744,7 +9723,7 @@ function HandoutMasterPanel({
9744
9723
  {
9745
9724
  type: "button",
9746
9725
  "aria-pressed": slidesPerPage === count,
9747
- className: chunkP2COO2QO_js.cn(
9726
+ className: chunk6GFSF2ML_js.cn(
9748
9727
  "px-2 py-1.5 rounded text-[11px] font-medium transition-colors",
9749
9728
  slidesPerPage === count ? "bg-primary text-white" : "bg-accent/50 text-muted-foreground hover:bg-accent/70 hover:text-foreground"
9750
9729
  ),
@@ -9787,7 +9766,7 @@ function NotesMasterPanel({
9787
9766
  notesMaster,
9788
9767
  onBackgroundChange
9789
9768
  }) {
9790
- const { t } = chunkP2COO2QO_js.useTranslation();
9769
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9791
9770
  const placeholderLabels = React108.useMemo(() => {
9792
9771
  if (!notesMaster?.placeholders) {
9793
9772
  return [];
@@ -9849,7 +9828,7 @@ function SlideMastersList({
9849
9828
  React108.useEffect(() => {
9850
9829
  activeRef.current?.scrollIntoView({ behavior: "smooth", block: "nearest" });
9851
9830
  }, [activeMasterIndex, activeLayoutIndex]);
9852
- const { t } = chunkP2COO2QO_js.useTranslation();
9831
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9853
9832
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9854
9833
  slideMasters.map((master, masterIdx) => {
9855
9834
  const isMasterActive = masterIdx === activeMasterIndex && activeLayoutIndex === null;
@@ -9862,7 +9841,7 @@ function SlideMastersList({
9862
9841
  ref: isMasterActive ? activeRef : void 0,
9863
9842
  "aria-pressed": isMasterActive,
9864
9843
  "aria-label": master.name || t("pptx.master.master"),
9865
- className: chunkP2COO2QO_js.cn(
9844
+ className: chunk6GFSF2ML_js.cn(
9866
9845
  "group relative block w-full cursor-pointer rounded-lg border-2 p-1 text-left transition-all",
9867
9846
  isMasterActive ? "border-amber-500 bg-amber-500/10" : "border-border bg-background/40 hover:border-border"
9868
9847
  ),
@@ -9879,7 +9858,7 @@ function SlideMastersList({
9879
9858
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 px-1", children: /* @__PURE__ */ jsxRuntime.jsx(
9880
9859
  "span",
9881
9860
  {
9882
- className: chunkP2COO2QO_js.cn(
9861
+ className: chunk6GFSF2ML_js.cn(
9883
9862
  "text-[10px] font-medium",
9884
9863
  isMasterActive ? "text-amber-400" : "text-muted-foreground"
9885
9864
  ),
@@ -9898,7 +9877,7 @@ function SlideMastersList({
9898
9877
  ref: isLayoutActive ? activeRef : void 0,
9899
9878
  "aria-pressed": isLayoutActive,
9900
9879
  "aria-label": layout.name || t("pptx.master.layout"),
9901
- className: chunkP2COO2QO_js.cn(
9880
+ className: chunk6GFSF2ML_js.cn(
9902
9881
  "group relative block w-full cursor-pointer rounded-md border-2 p-0.5 text-left transition-all",
9903
9882
  isLayoutActive ? "border-primary bg-primary/10" : "border-border bg-background/40 hover:border-border"
9904
9883
  ),
@@ -9915,7 +9894,7 @@ function SlideMastersList({
9915
9894
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 px-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
9916
9895
  "span",
9917
9896
  {
9918
- className: chunkP2COO2QO_js.cn(
9897
+ className: chunk6GFSF2ML_js.cn(
9919
9898
  "text-[9px]",
9920
9899
  isLayoutActive ? "text-primary" : "text-muted-foreground"
9921
9900
  ),
@@ -9959,7 +9938,7 @@ function MasterViewSidebar({
9959
9938
  onSlidesBackgroundChange
9960
9939
  }) {
9961
9940
  const scrollRef = React108.useRef(null);
9962
- const { t } = chunkP2COO2QO_js.useTranslation();
9941
+ const { t } = chunk6GFSF2ML_js.useTranslation();
9963
9942
  const slidesBackground = pptx.masterViewBackgroundColor(
9964
9943
  { slideMasters },
9965
9944
  { tab: "slides", masterIndex: activeMasterIndex, layoutIndex: activeLayoutIndex }
@@ -10007,7 +9986,7 @@ function MasterViewSidebar({
10007
9986
  type: "button",
10008
9987
  role: "tab",
10009
9988
  "aria-selected": masterViewTab === tab.key,
10010
- className: chunkP2COO2QO_js.cn(
9989
+ className: chunk6GFSF2ML_js.cn(
10011
9990
  "flex-1 px-1 py-1.5 text-[10px] font-medium transition-colors border-b-2",
10012
9991
  masterViewTab === tab.key ? "border-amber-500 text-amber-400" : "border-transparent text-muted-foreground hover:text-foreground"
10013
9992
  ),
@@ -10109,7 +10088,7 @@ function NotesMasterCanvas({
10109
10088
  notesText,
10110
10089
  slideNumber
10111
10090
  }) {
10112
- const { t } = chunkP2COO2QO_js.useTranslation();
10091
+ const { t } = chunk6GFSF2ML_js.useTranslation();
10113
10092
  const pageWidth = notesCanvasSize?.width ?? DEFAULT_NOTES_WIDTH;
10114
10093
  const pageHeight = notesCanvasSize?.height ?? DEFAULT_NOTES_HEIGHT;
10115
10094
  const scale = React108.useMemo(() => {
@@ -10369,7 +10348,7 @@ function HandoutMasterCanvas({
10369
10348
  slideThumbnails,
10370
10349
  pageNumber
10371
10350
  }) {
10372
- const { t } = chunkP2COO2QO_js.useTranslation();
10351
+ const { t } = chunk6GFSF2ML_js.useTranslation();
10373
10352
  const slideAspect = 4 / 3;
10374
10353
  const scale = React108.useMemo(() => {
10375
10354
  const scaleX = canvasSize.width / PAGE_WIDTH;
@@ -10510,7 +10489,7 @@ function SectionBlock({
10510
10489
  /* @__PURE__ */ jsxRuntime.jsx(
10511
10490
  lu.LuChevronDown,
10512
10491
  {
10513
- className: chunkP2COO2QO_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10492
+ className: chunk6GFSF2ML_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
10514
10493
  }
10515
10494
  ),
10516
10495
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-left", children: section.label }),
@@ -10554,12 +10533,12 @@ function SlideCardImpl({
10554
10533
  onDragLeave,
10555
10534
  onDrop
10556
10535
  }) {
10557
- const { t } = chunkP2COO2QO_js.useTranslation();
10536
+ const { t } = chunk6GFSF2ML_js.useTranslation();
10558
10537
  const cue = pptx.hiddenSlideCue(slide.hidden, "sorter", index);
10559
10538
  return /* @__PURE__ */ jsxRuntime.jsxs(
10560
10539
  "div",
10561
10540
  {
10562
- className: chunkP2COO2QO_js.cn(
10541
+ className: chunk6GFSF2ML_js.cn(
10563
10542
  "group relative cursor-pointer rounded-lg border-2 p-1 transition-all",
10564
10543
  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",
10565
10544
  slide.hidden && "opacity-40"
@@ -10582,7 +10561,7 @@ function SlideCardImpl({
10582
10561
  /* @__PURE__ */ jsxRuntime.jsx(
10583
10562
  "span",
10584
10563
  {
10585
- className: chunkP2COO2QO_js.cn(
10564
+ className: chunk6GFSF2ML_js.cn(
10586
10565
  "text-[11px] font-medium px-0.5",
10587
10566
  isSelected ? "text-primary" : isActive ? "text-primary/70" : "text-muted-foreground"
10588
10567
  ),
@@ -10600,17 +10579,8 @@ function SlideCardImpl({
10600
10579
  }
10601
10580
  );
10602
10581
  }
10603
- function arePropsEqual(prev, next) {
10604
- if (prev.slide.id !== next.slide.id) {
10605
- return false;
10606
- }
10607
- if (prev.slide.isDirty !== next.slide.isDirty) {
10608
- return false;
10609
- }
10610
- if (prev.slide.hidden !== next.slide.hidden) {
10611
- return false;
10612
- }
10613
- if (prev.slide.elements !== next.slide.elements) {
10582
+ function slideCardPropsEqual(prev, next) {
10583
+ if (prev.slide !== next.slide) {
10614
10584
  return false;
10615
10585
  }
10616
10586
  if (prev.index !== next.index) {
@@ -10642,7 +10612,7 @@ function arePropsEqual(prev, next) {
10642
10612
  }
10643
10613
  return true;
10644
10614
  }
10645
- var SlideCard = /* @__PURE__ */ React108__default.default.memo(SlideCardImpl, arePropsEqual);
10615
+ var SlideCard = /* @__PURE__ */ React108__default.default.memo(SlideCardImpl, slideCardPropsEqual);
10646
10616
  var ICON_CLASS = "h-3.5 w-3.5 text-muted-foreground";
10647
10617
  function SorterContextMenu({
10648
10618
  x,
@@ -10660,7 +10630,7 @@ function SorterContextMenu({
10660
10630
  onToggleHide,
10661
10631
  onClose
10662
10632
  }) {
10663
- const { t } = chunkP2COO2QO_js.useTranslation();
10633
+ const { t } = chunk6GFSF2ML_js.useTranslation();
10664
10634
  const menuX = Math.max(8, Math.min(x, window.innerWidth - 220));
10665
10635
  const menuY = Math.max(8, Math.min(y, window.innerHeight - 300));
10666
10636
  const entries = pptx.buildSlideSorterContextMenuEntries({
@@ -11015,7 +10985,7 @@ function SlideSorterOverlay({
11015
10985
  onToggleHideSlides,
11016
10986
  onClose
11017
10987
  }) {
11018
- const { t } = chunkP2COO2QO_js.useTranslation();
10988
+ const { t } = chunk6GFSF2ML_js.useTranslation();
11019
10989
  const state = useSlideSorterState({
11020
10990
  slides,
11021
10991
  templateElementsBySlideId,
@@ -11261,7 +11231,7 @@ function OutlineViewOverlay({
11261
11231
  bumpHistory,
11262
11232
  onClose
11263
11233
  }) {
11264
- const { t } = chunkP2COO2QO_js.useTranslation();
11234
+ const { t } = chunk6GFSF2ML_js.useTranslation();
11265
11235
  const { rows, containerRef, run, onRowKeyDown } = useOutlineView({
11266
11236
  slides,
11267
11237
  canvasSize,
@@ -11352,7 +11322,7 @@ function ReadingViewStage({
11352
11322
  "div",
11353
11323
  {
11354
11324
  className: "absolute inset-0",
11355
- style: { backgroundColor: chunkP2COO2QO_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
11325
+ style: { backgroundColor: chunk6GFSF2ML_js.normalizeHexColor(slide.backgroundColor, "#ffffff") }
11356
11326
  }
11357
11327
  ),
11358
11328
  slide.backgroundImage && /* @__PURE__ */ jsxRuntime.jsx(
@@ -11371,7 +11341,7 @@ function ReadingViewStage({
11371
11341
  className: "absolute left-0 top-0 origin-top-left",
11372
11342
  style: { width, height, transform: `scale(${scale})`, ...pptx.deviceStrokeStageStyle(scale) },
11373
11343
  children: elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
11374
- chunkXG4WSJ4O_js.StaticElementRenderer,
11344
+ chunk3AZ6ESJU_js.StaticElementRenderer,
11375
11345
  {
11376
11346
  element,
11377
11347
  activeSlide: slide,
@@ -11452,7 +11422,7 @@ function ReadingViewOverlay({
11452
11422
  activeSlideIndex,
11453
11423
  onExit
11454
11424
  }) {
11455
- const { t } = chunkP2COO2QO_js.useTranslation();
11425
+ const { t } = chunk6GFSF2ML_js.useTranslation();
11456
11426
  const { state, viewportRef, scale, run } = useReadingView({
11457
11427
  slideCount: slides.length,
11458
11428
  canvasSize,
@@ -11583,7 +11553,7 @@ function renderRichNotesSegments(segments) {
11583
11553
  if (segment.style.fontFamily) {
11584
11554
  style.fontFamily = segment.style.fontFamily;
11585
11555
  }
11586
- if (segment.style.hyperlink && chunkP2COO2QO_js.isUrlSafe(segment.style.hyperlink)) {
11556
+ if (segment.style.hyperlink && chunk6GFSF2ML_js.isUrlSafe(segment.style.hyperlink)) {
11587
11557
  const safeHref = segment.style.hyperlink;
11588
11558
  style.color = "#4a9eff";
11589
11559
  style.textDecoration = "underline";
@@ -11596,7 +11566,7 @@ function renderRichNotesSegments(segments) {
11596
11566
  style,
11597
11567
  onClick: (e) => {
11598
11568
  e.preventDefault();
11599
- chunkP2COO2QO_js.safeOpenUrl(safeHref);
11569
+ chunk6GFSF2ML_js.safeOpenUrl(safeHref);
11600
11570
  },
11601
11571
  children: segment.text
11602
11572
  },
@@ -11620,7 +11590,7 @@ function NotesPrintDialog({
11620
11590
  onClose,
11621
11591
  notesStyle
11622
11592
  }) {
11623
- const { t } = chunkP2COO2QO_js.useTranslation();
11593
+ const { t } = chunk6GFSF2ML_js.useTranslation();
11624
11594
  const printFrameRef = React108.useRef(null);
11625
11595
  const handlePrint = React108.useCallback(() => {
11626
11596
  const iframe = printFrameRef.current;
@@ -11678,7 +11648,7 @@ function NotesPrintDialog({
11678
11648
  ] }) });
11679
11649
  }
11680
11650
  function NotesToolbar(p) {
11681
- const { t } = chunkP2COO2QO_js.useTranslation();
11651
+ const { t } = chunk6GFSF2ML_js.useTranslation();
11682
11652
  const ref = React108.useRef(null);
11683
11653
  React108.useEffect(() => {
11684
11654
  const host = ref.current;
@@ -11945,7 +11915,7 @@ function useSlideNotes({
11945
11915
  const href = target.getAttribute("data-hyperlink") || target.getAttribute("href");
11946
11916
  if (href && (e.ctrlKey || e.metaKey)) {
11947
11917
  e.preventDefault();
11948
- chunkP2COO2QO_js.safeOpenUrl(href);
11918
+ chunk6GFSF2ML_js.safeOpenUrl(href);
11949
11919
  }
11950
11920
  }, []);
11951
11921
  return {
@@ -11982,7 +11952,7 @@ function SlideNotesPanel({
11982
11952
  notesStyle,
11983
11953
  onHeightChange
11984
11954
  }) {
11985
- const { t } = chunkP2COO2QO_js.useTranslation();
11955
+ const { t } = chunk6GFSF2ML_js.useTranslation();
11986
11956
  const rootRef = React108__default.default.useRef(null);
11987
11957
  React108__default.default.useEffect(() => {
11988
11958
  const el = rootRef.current;
@@ -12026,7 +11996,7 @@ function SlideNotesPanel({
12026
11996
  });
12027
11997
  const hasNotes = draft.trim().length > 0;
12028
11998
  const slideLabel = activeSlide ? t("pptx.notes.slideN", { n: activeSlide.slideNumber }) : t("pptx.notes.noSlide");
12029
- const { dragY, handlers: dragHandlers } = chunkXG4WSJ4O_js.useSheetDismissDrag(onToggle);
11999
+ const { dragY, handlers: dragHandlers } = chunk3AZ6ESJU_js.useSheetDismissDrag(onToggle);
12030
12000
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
12031
12001
  isExpanded && /* @__PURE__ */ jsxRuntime.jsx(
12032
12002
  "button",
@@ -12042,7 +12012,7 @@ function SlideNotesPanel({
12042
12012
  {
12043
12013
  ref: rootRef,
12044
12014
  "data-pptx-chrome": "notes",
12045
- className: chunkP2COO2QO_js.cn(
12015
+ className: chunk6GFSF2ML_js.cn(
12046
12016
  "flex flex-col border-t border-border/60 bg-background select-none",
12047
12017
  // On mobile, hide the entire notes strip when collapsed: the
12048
12018
  // MobileBottomBar's Notes button is the entry point instead.
@@ -12226,7 +12196,7 @@ function VersionHistoryPanel({
12226
12196
  onClose,
12227
12197
  onRestore
12228
12198
  }) {
12229
- const { t } = chunkP2COO2QO_js.useTranslation();
12199
+ const { t } = chunk6GFSF2ML_js.useTranslation();
12230
12200
  const [versions, setVersions] = React108.useState([]);
12231
12201
  const [loading, setLoading] = React108.useState(false);
12232
12202
  const [restoringKey, setRestoringKey] = React108.useState(null);
@@ -12372,7 +12342,7 @@ function SlideDiffRow({
12372
12342
  onAccept,
12373
12343
  onReject
12374
12344
  }) {
12375
- const { t } = chunkP2COO2QO_js.useTranslation();
12345
+ const { t } = chunk6GFSF2ML_js.useTranslation();
12376
12346
  const [expanded, setExpanded] = React108.useState(diff.status === "changed");
12377
12347
  const statusLabel = (() => {
12378
12348
  switch (diff.status) {
@@ -12406,7 +12376,7 @@ function SlideDiffRow({
12406
12376
  return /* @__PURE__ */ jsxRuntime.jsxs(
12407
12377
  "div",
12408
12378
  {
12409
- className: chunkP2COO2QO_js.cn(
12379
+ className: chunk6GFSF2ML_js.cn(
12410
12380
  "rounded-lg border transition-colors",
12411
12381
  isResolved ? "border-border/60 bg-card/40 opacity-60" : "border-border bg-background/70"
12412
12382
  ),
@@ -12420,7 +12390,7 @@ function SlideDiffRow({
12420
12390
  children: [
12421
12391
  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" }),
12422
12392
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-foreground", children: t("pptx.compare.slideNumber", { number: slideNumber }) }),
12423
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkP2COO2QO_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
12393
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunk6GFSF2ML_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
12424
12394
  diff.changes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-muted-foreground", children: [
12425
12395
  diff.changes.length,
12426
12396
  " ",
@@ -12430,7 +12400,7 @@ function SlideDiffRow({
12430
12400
  isResolved && /* @__PURE__ */ jsxRuntime.jsx(
12431
12401
  "span",
12432
12402
  {
12433
- className: chunkP2COO2QO_js.cn(
12403
+ className: chunk6GFSF2ML_js.cn(
12434
12404
  "text-[10px] font-medium",
12435
12405
  accepted ? "text-green-400" : "text-muted-foreground"
12436
12406
  ),
@@ -12458,7 +12428,7 @@ function SlideDiffRow({
12458
12428
  /* @__PURE__ */ jsxRuntime.jsx(
12459
12429
  "div",
12460
12430
  {
12461
- className: chunkP2COO2QO_js.cn(
12431
+ className: chunk6GFSF2ML_js.cn(
12462
12432
  "rounded border overflow-hidden",
12463
12433
  diff.status === "added" ? "border-green-700/60" : diff.status === "changed" ? "border-amber-700/60" : "border-border"
12464
12434
  ),
@@ -12525,7 +12495,7 @@ function ComparePanel({
12525
12495
  onRejectSlide,
12526
12496
  onAcceptAll
12527
12497
  }) {
12528
- const { t } = chunkP2COO2QO_js.useTranslation();
12498
+ const { t } = chunk6GFSF2ML_js.useTranslation();
12529
12499
  const [accepted, setAccepted] = React108.useState({});
12530
12500
  const [rejected, setRejected] = React108.useState({});
12531
12501
  const handleAccept = React108.useCallback(
@@ -12654,7 +12624,7 @@ function PasswordProtectionDialog({
12654
12624
  onSetPassword,
12655
12625
  onRemovePassword
12656
12626
  }) {
12657
- const { t } = chunkP2COO2QO_js.useTranslation();
12627
+ const { t } = chunk6GFSF2ML_js.useTranslation();
12658
12628
  const [password, setPassword] = React108.useState("");
12659
12629
  const [confirmPassword, setConfirmPassword] = React108.useState("");
12660
12630
  const [showPassword, setShowPassword] = React108.useState(false);
@@ -12870,7 +12840,7 @@ function DocumentPropertiesCustomTab({
12870
12840
  customProperties,
12871
12841
  onUpdate
12872
12842
  }) {
12873
- const { t } = chunkP2COO2QO_js.useTranslation();
12843
+ const { t } = chunk6GFSF2ML_js.useTranslation();
12874
12844
  const handleAdd = React108.useCallback(() => {
12875
12845
  onUpdate([...customProperties, { name: "", value: "", type: "lpwstr" }]);
12876
12846
  }, [customProperties, onUpdate]);
@@ -13072,7 +13042,7 @@ function DocumentPropertiesStatisticsTab({
13072
13042
  onUpdateAppProperties,
13073
13043
  canEdit
13074
13044
  }) {
13075
- const { t } = chunkP2COO2QO_js.useTranslation();
13045
+ const { t } = chunk6GFSF2ML_js.useTranslation();
13076
13046
  const handleEditableChange = React108.useCallback(
13077
13047
  (key, value) => {
13078
13048
  onUpdateAppProperties({ [key]: value });
@@ -13112,7 +13082,7 @@ function DocumentPropertiesDialog({
13112
13082
  onClose,
13113
13083
  onSave
13114
13084
  }) {
13115
- const { t } = chunkP2COO2QO_js.useTranslation();
13085
+ const { t } = chunk6GFSF2ML_js.useTranslation();
13116
13086
  const [activeTab, setActiveTab] = React108.useState("summary");
13117
13087
  const [draftCore, setDraftCore] = React108.useState({});
13118
13088
  const [draftCustom, setDraftCustom] = React108.useState([]);
@@ -13163,7 +13133,7 @@ function DocumentPropertiesDialog({
13163
13133
  const handleClose = React108.useCallback(() => {
13164
13134
  onClose();
13165
13135
  }, [onClose]);
13166
- const { panelStyle, handlers: dragHandlers } = chunkXG4WSJ4O_js.useModalDismissDrag(handleClose);
13136
+ const { panelStyle, handlers: dragHandlers } = chunk3AZ6ESJU_js.useModalDismissDrag(handleClose);
13167
13137
  if (!isOpen) {
13168
13138
  return null;
13169
13139
  }
@@ -13300,7 +13270,7 @@ function FontEmbeddingPanel({
13300
13270
  onClose,
13301
13271
  onToggleEmbedFonts
13302
13272
  }) {
13303
- const { t } = chunkP2COO2QO_js.useTranslation();
13273
+ const { t } = chunk6GFSF2ML_js.useTranslation();
13304
13274
  const [availableFamilies, setAvailableFamilies] = React108.useState(/* @__PURE__ */ new Set());
13305
13275
  const [scanning, setScanning] = React108.useState(false);
13306
13276
  const [scanned, setScanned] = React108.useState(false);
@@ -13428,7 +13398,7 @@ function DigitalSignaturesDialog({
13428
13398
  hasSignatures,
13429
13399
  signatureCount
13430
13400
  }) {
13431
- const { t } = chunkP2COO2QO_js.useTranslation();
13401
+ const { t } = chunk6GFSF2ML_js.useTranslation();
13432
13402
  if (!isOpen) {
13433
13403
  return null;
13434
13404
  }
@@ -13500,7 +13470,7 @@ function SignatureStatusBadge({
13500
13470
  signatureCount,
13501
13471
  onClick
13502
13472
  }) {
13503
- const { t } = chunkP2COO2QO_js.useTranslation();
13473
+ const { t } = chunk6GFSF2ML_js.useTranslation();
13504
13474
  if (!hasSignatures || signatureCount === 0) {
13505
13475
  return null;
13506
13476
  }
@@ -13526,7 +13496,7 @@ function SignatureStrippedDialog({
13526
13496
  onConfirm,
13527
13497
  onCancel
13528
13498
  }) {
13529
- const { t } = chunkP2COO2QO_js.useTranslation();
13499
+ const { t } = chunk6GFSF2ML_js.useTranslation();
13530
13500
  if (!isOpen) {
13531
13501
  return null;
13532
13502
  }
@@ -13595,7 +13565,7 @@ function EncryptedFileDialog({
13595
13565
  isOpen,
13596
13566
  onClose
13597
13567
  }) {
13598
- const { t } = chunkP2COO2QO_js.useTranslation();
13568
+ const { t } = chunk6GFSF2ML_js.useTranslation();
13599
13569
  if (!isOpen) {
13600
13570
  return null;
13601
13571
  }
@@ -13742,7 +13712,7 @@ function PresentationAudienceEffects({ snapshot }) {
13742
13712
  ] });
13743
13713
  }
13744
13714
  function PresentationEndOverlay({ onExit }) {
13745
- const { t } = chunkP2COO2QO_js.useTranslation();
13715
+ const { t } = chunk6GFSF2ML_js.useTranslation();
13746
13716
  return /* @__PURE__ */ jsxRuntime.jsx(
13747
13717
  "button",
13748
13718
  {
@@ -13758,9 +13728,9 @@ function PresentationSubtitleBar({
13758
13728
  visible,
13759
13729
  onCaptionChange
13760
13730
  }) {
13761
- const { t } = chunkP2COO2QO_js.useTranslation();
13731
+ const { t } = chunk6GFSF2ML_js.useTranslation();
13762
13732
  const language = pptx.subtitleRecognitionLanguage(
13763
- pptx.subtitleSettingsFromOptions(chunkXG4WSJ4O_js.useViewerOptionsContext()),
13733
+ pptx.subtitleSettingsFromOptions(chunk3AZ6ESJU_js.useViewerOptionsContext()),
13764
13734
  typeof navigator === "undefined" ? "en-US" : navigator.language
13765
13735
  );
13766
13736
  const [captionText, setCaptionText] = React108.useState("");
@@ -13837,7 +13807,7 @@ function renderNotesSegments(segments) {
13837
13807
  });
13838
13808
  }
13839
13809
  function PresenterConsoleToolbar(p) {
13840
- const { t } = chunkP2COO2QO_js.useTranslation();
13810
+ const { t } = chunk6GFSF2ML_js.useTranslation();
13841
13811
  const ref = useWebControl(
13842
13812
  { ...pptx.presenterConsoleViewState(p.snapshot, p.audienceOpen), translate: t },
13843
13813
  {
@@ -13928,7 +13898,7 @@ function ScaledSlidePreviewImpl({
13928
13898
  {
13929
13899
  className: "absolute inset-0",
13930
13900
  style: {
13931
- backgroundColor: chunkP2COO2QO_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13901
+ backgroundColor: chunk6GFSF2ML_js.normalizeHexColor(slide.backgroundColor, "#ffffff")
13932
13902
  }
13933
13903
  }
13934
13904
  ),
@@ -13954,7 +13924,7 @@ function ScaledSlidePreviewImpl({
13954
13924
  ...pptx.deviceStrokeStageStyle(scale)
13955
13925
  },
13956
13926
  children: previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
13957
- chunkXG4WSJ4O_js.StaticElementRenderer,
13927
+ chunk3AZ6ESJU_js.StaticElementRenderer,
13958
13928
  {
13959
13929
  element,
13960
13930
  activeSlide: slide,
@@ -13970,28 +13940,7 @@ function ScaledSlidePreviewImpl({
13970
13940
  );
13971
13941
  }
13972
13942
  function scaledSlidePreviewPropsEqual(prev, next) {
13973
- if (prev.slide.id !== next.slide.id) {
13974
- return false;
13975
- }
13976
- if (prev.slide.isDirty !== next.slide.isDirty) {
13977
- return false;
13978
- }
13979
- if (prev.slide.hidden !== next.slide.hidden) {
13980
- return false;
13981
- }
13982
- if (prev.slide.elements !== next.slide.elements) {
13983
- return false;
13984
- }
13985
- if (prev.slide.showMasterShapes !== next.slide.showMasterShapes) {
13986
- return false;
13987
- }
13988
- if (prev.slide.backgroundColor !== next.slide.backgroundColor) {
13989
- return false;
13990
- }
13991
- if (prev.slide.backgroundImage !== next.slide.backgroundImage) {
13992
- return false;
13993
- }
13994
- if (prev.slide.backgroundGradient !== next.slide.backgroundGradient) {
13943
+ if (prev.slide !== next.slide) {
13995
13944
  return false;
13996
13945
  }
13997
13946
  if (prev.templateElements !== next.templateElements) {
@@ -14021,7 +13970,7 @@ function PresenterNotesRail({
14021
13970
  onMove,
14022
13971
  onUpdateNotes
14023
13972
  }) {
14024
- const { t } = chunkP2COO2QO_js.useTranslation();
13973
+ const { t } = chunk6GFSF2ML_js.useTranslation();
14025
13974
  const slide = slides[current];
14026
13975
  const nextSlide = pptx.nextPresentedSlide(slides, current, activeCustomShow, authoredRange);
14027
13976
  const notesText = slide?.notes ?? "";
@@ -14146,7 +14095,7 @@ function PresenterNotesRail({
14146
14095
  ] });
14147
14096
  }
14148
14097
  function PresenterSlideNavigator(props) {
14149
- const { t } = chunkP2COO2QO_js.useTranslation();
14098
+ const { t } = chunk6GFSF2ML_js.useTranslation();
14150
14099
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${pptx.PRESENTER_CONSOLE_CLASSES.navigator} text-foreground`, children: [
14151
14100
  /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "mb-4 flex items-center justify-between border-b border-border pb-4", children: [
14152
14101
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -14288,7 +14237,7 @@ function PresenterView({
14288
14237
  onSwapDisplays,
14289
14238
  onUpdateNotes
14290
14239
  }) {
14291
- const { t } = chunkP2COO2QO_js.useTranslation();
14240
+ const { t } = chunk6GFSF2ML_js.useTranslation();
14292
14241
  const [now, setNow] = React108.useState(Date.now());
14293
14242
  React108.useEffect(() => {
14294
14243
  const interval = window.setInterval(() => setNow(Date.now()), 1e3);
@@ -14445,7 +14394,7 @@ function MobilePresenterView({
14445
14394
  onMovePresentationSlide,
14446
14395
  onExit
14447
14396
  }) {
14448
- const { t } = chunkP2COO2QO_js.useTranslation();
14397
+ const { t } = chunk6GFSF2ML_js.useTranslation();
14449
14398
  const [now, setNow] = React108.useState(Date.now());
14450
14399
  React108.useEffect(() => {
14451
14400
  const interval = window.setInterval(() => setNow(Date.now()), 1e3);
@@ -14558,7 +14507,7 @@ function RehearseTimingsHud({
14558
14507
  paused,
14559
14508
  onTogglePause
14560
14509
  }) {
14561
- const { t } = chunkP2COO2QO_js.useTranslation();
14510
+ const { t } = chunk6GFSF2ML_js.useTranslation();
14562
14511
  const [tick, setTick] = React108.useState(0);
14563
14512
  React108.useEffect(() => {
14564
14513
  if (paused) {
@@ -14606,7 +14555,7 @@ function RehearseTimingsSummary({
14606
14555
  onSave,
14607
14556
  onDiscard
14608
14557
  }) {
14609
- const { t } = chunkP2COO2QO_js.useTranslation();
14558
+ const { t } = chunk6GFSF2ML_js.useTranslation();
14610
14559
  const totalMs = Object.values(recordedTimings).reduce((sum, ms) => sum + ms, 0);
14611
14560
  const sortedEntries = Object.entries(recordedTimings).map(([idx, ms]) => ({ slideIndex: Number(idx), ms })).sort((a, b) => a.slideIndex - b.slideIndex);
14612
14561
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 z-[9999] flex items-center justify-center bg-black/60 backdrop-blur-sm", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full max-w-lg rounded-xl border border-border bg-background shadow-2xl", children: [
@@ -14690,7 +14639,7 @@ function SelectionPane({
14690
14639
  markDirty,
14691
14640
  onClose
14692
14641
  }) {
14693
- const { t } = chunkP2COO2QO_js.useTranslation();
14642
+ const { t } = chunk6GFSF2ML_js.useTranslation();
14694
14643
  const activeSlide = slides[activeSlideIndex];
14695
14644
  const elements = activeSlide?.elements ?? [];
14696
14645
  const [editingId, setEditingId] = React108.useState(null);
@@ -14845,7 +14794,7 @@ function SelectionPane({
14845
14794
  setDragIndex(null);
14846
14795
  setDragOverIndex(null);
14847
14796
  },
14848
- className: chunkP2COO2QO_js.cn(
14797
+ className: chunk6GFSF2ML_js.cn(
14849
14798
  "flex items-center gap-1.5 px-2 py-1 text-xs cursor-pointer transition-colors",
14850
14799
  isSelected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground",
14851
14800
  dragOverIndex === realIndex ? "border-t-2 border-primary" : ""
@@ -14899,13 +14848,13 @@ function SelectionPane({
14899
14848
  }
14900
14849
  var INPUT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14901
14850
  var SELECT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px] max-md:min-h-[44px]!";
14902
- var ENTRANCE_PRESETS = /* @__PURE__ */ chunkP2COO2QO_js.ANIMATION_PRESET_OPTIONS.filter(
14851
+ var ENTRANCE_PRESETS = /* @__PURE__ */ chunk6GFSF2ML_js.ANIMATION_PRESET_OPTIONS.filter(
14903
14852
  (o) => o.value === "fadeIn" || o.value === "flyIn" || o.value === "zoomIn"
14904
14853
  );
14905
- var EXIT_PRESETS = /* @__PURE__ */ chunkP2COO2QO_js.ANIMATION_PRESET_OPTIONS.filter(
14854
+ var EXIT_PRESETS = /* @__PURE__ */ chunk6GFSF2ML_js.ANIMATION_PRESET_OPTIONS.filter(
14906
14855
  (o) => o.value === "fadeOut" || o.value === "flyOut" || o.value === "zoomOut"
14907
14856
  );
14908
- var EMPHASIS_PRESETS = /* @__PURE__ */ chunkP2COO2QO_js.ANIMATION_PRESET_OPTIONS.filter(
14857
+ var EMPHASIS_PRESETS = /* @__PURE__ */ chunk6GFSF2ML_js.ANIMATION_PRESET_OPTIONS.filter(
14909
14858
  (o) => o.value === "spin" || o.value === "pulse" || o.value === "colorWave" || o.value === "bounce" || o.value === "flash" || o.value === "growShrink" || o.value === "teeter"
14910
14859
  );
14911
14860
  var TIMING_CURVE_OPTIONS = [
@@ -15006,7 +14955,7 @@ function AfterAnimationRow({
15006
14955
  onActionChange,
15007
14956
  onColorChange
15008
14957
  }) {
15009
- const { t } = chunkP2COO2QO_js.useTranslation();
14958
+ const { t } = chunk6GFSF2ML_js.useTranslation();
15010
14959
  const commitRecentColor = useRecentColorCommit();
15011
14960
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
15012
14961
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15057,7 +15006,7 @@ function AnimationTimelineSection({
15057
15006
  canEdit,
15058
15007
  handlers
15059
15008
  }) {
15060
- const { t } = chunkP2COO2QO_js.useTranslation();
15009
+ const { t } = chunk6GFSF2ML_js.useTranslation();
15061
15010
  const effectLabel = (anim) => pptx.animationEffectLabel(anim, (key) => t(key));
15062
15011
  const {
15063
15012
  sortedAnimations,
@@ -15088,7 +15037,7 @@ function AnimationTimelineSection({
15088
15037
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-6 rounded bg-muted/50 border border-border overflow-hidden", children: timelineBarData.map((bar) => /* @__PURE__ */ jsxRuntime.jsx(
15089
15038
  "div",
15090
15039
  {
15091
- className: chunkP2COO2QO_js.cn(
15040
+ className: chunk6GFSF2ML_js.cn(
15092
15041
  "absolute top-0.5 bottom-0.5 rounded-sm transition-colors",
15093
15042
  animationTypeColor(bar.anim),
15094
15043
  bar.anim.elementId === selectedElementId && "ring-1 ring-primary"
@@ -15117,7 +15066,7 @@ function AnimationTimelineSection({
15117
15066
  onDragLeave: handleDragLeave,
15118
15067
  onDrop: (e) => handleDrop(index, e),
15119
15068
  title: t("pptx.animation.nativeEffectHint"),
15120
- className: chunkP2COO2QO_js.cn(
15069
+ className: chunk6GFSF2ML_js.cn(
15121
15070
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] italic",
15122
15071
  "bg-muted/20 text-muted-foreground/70",
15123
15072
  isDragOver && "border-t-2 border-primary"
@@ -15156,7 +15105,7 @@ function AnimationTimelineSection({
15156
15105
  onDragEnd: handleDragEnd,
15157
15106
  onMouseEnter: () => handleAnimationHover(anim),
15158
15107
  onMouseLeave: handleAnimationHoverEnd,
15159
- className: chunkP2COO2QO_js.cn(
15108
+ className: chunk6GFSF2ML_js.cn(
15160
15109
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] cursor-grab transition-colors",
15161
15110
  isSelected ? "bg-primary/30 text-primary" : "bg-muted/50 text-muted-foreground",
15162
15111
  isDragging && "opacity-40",
@@ -15217,7 +15166,7 @@ function BookmarkTriggerRow({
15217
15166
  style,
15218
15167
  onChange
15219
15168
  }) {
15220
- const { t } = chunkP2COO2QO_js.useTranslation();
15169
+ const { t } = chunk6GFSF2ML_js.useTranslation();
15221
15170
  const options = pptx.listMediaBookmarkOptions(elements);
15222
15171
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
15223
15172
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-[11px]", children: t("pptx.animation.trigger.bookmarkLabel") }),
@@ -15250,7 +15199,7 @@ function EffectSoundRow({
15250
15199
  onPick,
15251
15200
  onPickStock
15252
15201
  }) {
15253
- const { t } = chunkP2COO2QO_js.useTranslation();
15202
+ const { t } = chunk6GFSF2ML_js.useTranslation();
15254
15203
  const fileInputRef = React108__default.default.useRef(null);
15255
15204
  const selectedValue = soundState.catalogueId ?? (soundState.hasSound ? CURRENT_VALUE : NONE_VALUE);
15256
15205
  const handleSelectChange = (event) => {
@@ -15288,7 +15237,7 @@ function EffectSoundRow({
15288
15237
  }
15289
15238
  const asset = pptx.getEffectSoundAsset(soundState.catalogueId);
15290
15239
  if (asset) {
15291
- chunkXG4WSJ4O_js.playAnimationSound(asset.dataUrl);
15240
+ chunk3AZ6ESJU_js.playAnimationSound(asset.dataUrl);
15292
15241
  }
15293
15242
  };
15294
15243
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15341,7 +15290,7 @@ function MotionPathRow({
15341
15290
  canEdit,
15342
15291
  onChange
15343
15292
  }) {
15344
- const { t } = chunkP2COO2QO_js.useTranslation();
15293
+ const { t } = chunk6GFSF2ML_js.useTranslation();
15345
15294
  const presetId = pptx.motionPathPresetIdForPath(motionPath);
15346
15295
  const isCustom = Boolean(motionPath) && !presetId;
15347
15296
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
@@ -15463,7 +15412,7 @@ function useAnimationPreview({
15463
15412
  }) {
15464
15413
  const handleAnimationHover = React108.useCallback((anim) => {
15465
15414
  if (anim.motionPath) {
15466
- chunkP2COO2QO_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
15415
+ chunk6GFSF2ML_js.startMotionPathPreview(anim.elementId, anim.motionPath, {
15467
15416
  durationMs: anim.durationMs,
15468
15417
  delayMs: anim.delayMs,
15469
15418
  timingCurve: anim.timingCurve
@@ -15474,19 +15423,19 @@ function useAnimationPreview({
15474
15423
  if (!preset || preset === "none") {
15475
15424
  return;
15476
15425
  }
15477
- chunkP2COO2QO_js.startPreviewAnimation(anim.elementId, preset, {
15426
+ chunk6GFSF2ML_js.startPreviewAnimation(anim.elementId, preset, {
15478
15427
  direction: anim.direction,
15479
15428
  durationMs: anim.durationMs ?? 500,
15480
15429
  timingCurve: anim.timingCurve
15481
15430
  });
15482
15431
  }, []);
15483
- const handleAnimationHoverEnd = React108.useCallback(() => chunkP2COO2QO_js.stopPreviewAnimation(), []);
15432
+ const handleAnimationHoverEnd = React108.useCallback(() => chunk6GFSF2ML_js.stopPreviewAnimation(), []);
15484
15433
  const handlePreviewClick = React108.useCallback(() => {
15485
15434
  if (!selectedElementAnimation) {
15486
15435
  return;
15487
15436
  }
15488
15437
  if (selectedElementAnimation.motionPath) {
15489
- chunkP2COO2QO_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
15438
+ chunk6GFSF2ML_js.startMotionPathPreview(selectedElementId, selectedElementAnimation.motionPath, {
15490
15439
  durationMs: selectedElementAnimation.durationMs,
15491
15440
  delayMs: selectedElementAnimation.delayMs,
15492
15441
  timingCurve: selectedElementAnimation.timingCurve
@@ -15497,7 +15446,7 @@ function useAnimationPreview({
15497
15446
  if (!preset || preset === "none") {
15498
15447
  return;
15499
15448
  }
15500
- chunkP2COO2QO_js.startPreviewAnimation(selectedElementId, preset, {
15449
+ chunk6GFSF2ML_js.startPreviewAnimation(selectedElementId, preset, {
15501
15450
  direction: selectedElementAnimation.direction,
15502
15451
  durationMs: selectedElementAnimation.durationMs ?? 500,
15503
15452
  timingCurve: selectedElementAnimation.timingCurve
@@ -15732,7 +15681,7 @@ function useAnimationHandlers({
15732
15681
  return anim.elementId.slice(0, 8);
15733
15682
  }
15734
15683
  const text = pptx$1.hasTextProperties(el) ? el.text : void 0;
15735
- return text || chunkP2COO2QO_js.getElementLabel(el);
15684
+ return text || chunk6GFSF2ML_js.getElementLabel(el);
15736
15685
  },
15737
15686
  [activeSlide.elements]
15738
15687
  );
@@ -15743,7 +15692,7 @@ function useAnimationHandlers({
15743
15692
  return id.slice(0, 8);
15744
15693
  }
15745
15694
  const text = pptx$1.hasTextProperties(el) ? el.text : void 0;
15746
- return text || chunkP2COO2QO_js.getElementLabel(el);
15695
+ return text || chunk6GFSF2ML_js.getElementLabel(el);
15747
15696
  }).join(", "),
15748
15697
  [activeSlide.elements]
15749
15698
  );
@@ -15799,8 +15748,8 @@ function AnimationPanel({
15799
15748
  canEdit,
15800
15749
  onUpdateSlide
15801
15750
  }) {
15802
- const { t } = chunkP2COO2QO_js.useTranslation();
15803
- const { viewportWidth } = chunkXG4WSJ4O_js.useIsMobile();
15751
+ const { t } = chunk6GFSF2ML_js.useTranslation();
15752
+ const { viewportWidth } = chunk3AZ6ESJU_js.useIsMobile();
15804
15753
  const directionBtnPx = Math.max(28, pptx.getDensePanelTouchTargetPx(viewportWidth));
15805
15754
  const fieldStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
15806
15755
  const handlers = useAnimationHandlers({
@@ -15928,7 +15877,7 @@ function AnimationPanel({
15928
15877
  type: "button",
15929
15878
  disabled: !canEdit,
15930
15879
  style: { minWidth: directionBtnPx, minHeight: directionBtnPx },
15931
- className: chunkP2COO2QO_js.cn(
15880
+ className: chunk6GFSF2ML_js.cn(
15932
15881
  "flex items-center justify-center rounded border transition-colors",
15933
15882
  isActive ? "border-primary bg-primary/20 text-primary" : "border-border bg-muted text-muted-foreground hover:bg-accent"
15934
15883
  ),
@@ -15994,7 +15943,7 @@ function AnimationPanel({
15994
15943
  style: fieldStyle,
15995
15944
  children: [
15996
15945
  /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: t("pptx.animation.trigger.selectShape") }),
15997
- activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunkP2COO2QO_js.getElementLabel(el) }, el.id))
15946
+ activeSlide.elements.filter((el) => el.id !== selectedElement.id).map((el) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: el.id, children: chunk6GFSF2ML_js.getElementLabel(el) }, el.id))
15998
15947
  ]
15999
15948
  }
16000
15949
  )
@@ -16138,7 +16087,7 @@ function ActionTargetFields({
16138
16087
  returnAfter,
16139
16088
  onChange
16140
16089
  }) {
16141
- const { t } = chunkP2COO2QO_js.useTranslation();
16090
+ const { t } = chunk6GFSF2ML_js.useTranslation();
16142
16091
  const urlLabelKey = URL_LABEL_KEY[type];
16143
16092
  if (urlLabelKey) {
16144
16093
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16147,7 +16096,7 @@ function ActionTargetFields({
16147
16096
  type: "text",
16148
16097
  disabled: !canEdit,
16149
16098
  "aria-label": t(urlLabelKey),
16150
- className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
16099
+ className: chunk6GFSF2ML_js.cn(INPUT2, "w-full"),
16151
16100
  placeholder: "https://...",
16152
16101
  value: url ?? "",
16153
16102
  onChange: (e) => onChange({ url: e.target.value })
@@ -16161,7 +16110,7 @@ function ActionTargetFields({
16161
16110
  type: "number",
16162
16111
  disabled: !canEdit,
16163
16112
  "aria-label": t("pptx.action.gotoSlide"),
16164
- className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
16113
+ className: chunk6GFSF2ML_js.cn(INPUT2, "w-full"),
16165
16114
  placeholder: t("pptx.action.slideNumberPlaceholder"),
16166
16115
  min: 1,
16167
16116
  max: slideCount,
@@ -16183,7 +16132,7 @@ function ActionTargetFields({
16183
16132
  "data-testid": "pptx-action-custom-show",
16184
16133
  disabled: !canEdit,
16185
16134
  "aria-label": t("pptx.hyperlink.customShowLabel"),
16186
- className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
16135
+ className: chunk6GFSF2ML_js.cn(INPUT2, "w-full"),
16187
16136
  value: customShowId ?? "",
16188
16137
  onChange: (e) => onChange({ customShowId: e.target.value, returnAfter }),
16189
16138
  children: [
@@ -16215,7 +16164,7 @@ function ActionSettingsPanel({
16215
16164
  customShows,
16216
16165
  onUpdateElement
16217
16166
  }) {
16218
- const { t } = chunkP2COO2QO_js.useTranslation();
16167
+ const { t } = chunk6GFSF2ML_js.useTranslation();
16219
16168
  const clickAction = selectedElement.actionClick ? pptx$1.pptxActionToElementAction(selectedElement.actionClick, "click") : void 0;
16220
16169
  const hoverAction = selectedElement.actionHover ? pptx$1.pptxActionToElementAction(selectedElement.actionHover, "hover") : void 0;
16221
16170
  const updateAction = (trigger, type, patch) => {
@@ -16291,7 +16240,7 @@ function ActionTriggerSection({
16291
16240
  onChangeType,
16292
16241
  onChangeTarget
16293
16242
  }) {
16294
- const { t } = chunkP2COO2QO_js.useTranslation();
16243
+ const { t } = chunk6GFSF2ML_js.useTranslation();
16295
16244
  const [pendingType, setPendingType] = React108.useState(void 0);
16296
16245
  const effectiveType = pptx.resolveActionType(pendingType, activeType);
16297
16246
  const changeType = (type) => {
@@ -16305,7 +16254,7 @@ function ActionTriggerSection({
16305
16254
  {
16306
16255
  disabled: !canEdit,
16307
16256
  "aria-label": label,
16308
- className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
16257
+ className: chunk6GFSF2ML_js.cn(INPUT2, "w-full"),
16309
16258
  value: effectiveType,
16310
16259
  onChange: (e) => changeType(e.target.value),
16311
16260
  children: pptx.ELEMENT_ACTION_TYPE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.labelKey) }, o.value))
@@ -16333,7 +16282,7 @@ var AXIS_ROWS = [
16333
16282
  { type: "catAx", labelKey: "pptx.chart.categoryAxis", hasScale: false }
16334
16283
  ];
16335
16284
  function ChartAxisOptions({ axes, canEdit, onUpdateAxis }) {
16336
- const { t } = chunkP2COO2QO_js.useTranslation();
16285
+ const { t } = chunk6GFSF2ML_js.useTranslation();
16337
16286
  const rows = AXIS_ROWS.map((row) => ({
16338
16287
  ...row,
16339
16288
  axis: axes?.find((a) => a.axisType === row.type)
@@ -16478,7 +16427,7 @@ function ChartAxisStyleOptions({
16478
16427
  onSetTitleStyle,
16479
16428
  onSetGridlineStyle
16480
16429
  }) {
16481
- const { t } = chunkP2COO2QO_js.useTranslation();
16430
+ const { t } = chunk6GFSF2ML_js.useTranslation();
16482
16431
  const commitRecentColor = useRecentColorCommit();
16483
16432
  const rows = SCALE_AXES.map((row) => ({
16484
16433
  ...row,
@@ -16650,7 +16599,7 @@ function ChartComboTypeOptions({
16650
16599
  canEdit,
16651
16600
  onSetSeriesType
16652
16601
  }) {
16653
- const { t } = chunkP2COO2QO_js.useTranslation();
16602
+ const { t } = chunk6GFSF2ML_js.useTranslation();
16654
16603
  if (!COMBO_SUPPORTED_TYPES.has(chartType) || series.length < 2) {
16655
16604
  return null;
16656
16605
  }
@@ -16679,7 +16628,7 @@ function ChartDataLabelOptions({
16679
16628
  canEdit,
16680
16629
  onUpdateStyle
16681
16630
  }) {
16682
- const { t } = chunkP2COO2QO_js.useTranslation();
16631
+ const { t } = chunk6GFSF2ML_js.useTranslation();
16683
16632
  if (!style?.hasDataLabels) {
16684
16633
  return null;
16685
16634
  }
@@ -16727,7 +16676,7 @@ function ChartDataPointMarkerOptions({
16727
16676
  canEdit,
16728
16677
  onSetPointMarker
16729
16678
  }) {
16730
- const { t } = chunkP2COO2QO_js.useTranslation();
16679
+ const { t } = chunk6GFSF2ML_js.useTranslation();
16731
16680
  const commitRecentColor = useRecentColorCommit();
16732
16681
  const [seriesIndex, setSeriesIndex] = React108.useState(0);
16733
16682
  if (!MARKER_SUPPORTED_TYPES.has(chartType) || series.length === 0 || categories.length === 0) {
@@ -16833,7 +16782,7 @@ function ChartDataPointOptions({
16833
16782
  onSetPointExplosion,
16834
16783
  onSetPointLabel
16835
16784
  }) {
16836
- const { t } = chunkP2COO2QO_js.useTranslation();
16785
+ const { t } = chunk6GFSF2ML_js.useTranslation();
16837
16786
  const commitRecentColor = useRecentColorCommit();
16838
16787
  const [seriesIndex, setSeriesIndex] = React108.useState(0);
16839
16788
  if (series.length === 0 || categories.length === 0) {
@@ -16935,7 +16884,7 @@ function ChartDataSheet({
16935
16884
  highlightCell,
16936
16885
  onChange
16937
16886
  }) {
16938
- const { t } = chunkP2COO2QO_js.useTranslation();
16887
+ const { t } = chunk6GFSF2ML_js.useTranslation();
16939
16888
  const ref = React108.useRef(null);
16940
16889
  React108.useLayoutEffect(() => {
16941
16890
  if (ref.current) {
@@ -16966,7 +16915,7 @@ function ChartDisplayOptions({
16966
16915
  hasGridlines,
16967
16916
  onToggleGridlines
16968
16917
  }) {
16969
- const { t } = chunkP2COO2QO_js.useTranslation();
16918
+ const { t } = chunk6GFSF2ML_js.useTranslation();
16970
16919
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD, children: [
16971
16920
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING, children: t("pptx.chart.display") }),
16972
16921
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -17043,7 +16992,7 @@ function ChartErrorBarOptions({
17043
16992
  canEdit,
17044
16993
  onSetErrorBars
17045
16994
  }) {
17046
- const { t } = chunkP2COO2QO_js.useTranslation();
16995
+ const { t } = chunk6GFSF2ML_js.useTranslation();
17047
16996
  if (!ERROR_BAR_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17048
16997
  return null;
17049
16998
  }
@@ -17123,7 +17072,7 @@ function ChartFilteredSeriesOptions({
17123
17072
  onRestoreSeries,
17124
17073
  onSetDataLabelsRangeCache
17125
17074
  }) {
17126
- const { t } = chunkP2COO2QO_js.useTranslation();
17075
+ const { t } = chunk6GFSF2ML_js.useTranslation();
17127
17076
  const filteredSeries = chartData.filteredSeries ?? [];
17128
17077
  const seriesWithRange = chartData.series.map((series, index) => ({ series, index })).filter(({ series }) => series.dataLabelOptions?.dataLabelsRange);
17129
17078
  if (filteredSeries.length === 0 && seriesWithRange.length === 0 && chartData.series.length <= 1) {
@@ -17203,7 +17152,7 @@ function ChartMarkerOptions({
17203
17152
  canEdit,
17204
17153
  onSetMarker
17205
17154
  }) {
17206
- const { t } = chunkP2COO2QO_js.useTranslation();
17155
+ const { t } = chunk6GFSF2ML_js.useTranslation();
17207
17156
  const commitRecentColor = useRecentColorCommit();
17208
17157
  if (!MARKER_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17209
17158
  return null;
@@ -17312,7 +17261,7 @@ function ChartSeriesColorOptions({
17312
17261
  onSetColor,
17313
17262
  onToggleSecondaryAxis
17314
17263
  }) {
17315
- const { t } = chunkP2COO2QO_js.useTranslation();
17264
+ const { t } = chunk6GFSF2ML_js.useTranslation();
17316
17265
  const series = chartData.series;
17317
17266
  if (series.length === 0) {
17318
17267
  return null;
@@ -17362,7 +17311,7 @@ function ChartSubtypeOptions({
17362
17311
  canEdit,
17363
17312
  onUpdateChartData
17364
17313
  }) {
17365
- const { t } = chunkP2COO2QO_js.useTranslation();
17314
+ const { t } = chunk6GFSF2ML_js.useTranslation();
17366
17315
  if (chartData.chartType !== "bar3D" && chartData.chartType !== "radar" && chartData.chartType !== "surface") {
17367
17316
  return null;
17368
17317
  }
@@ -17428,7 +17377,7 @@ function ChartTrendlineOptions({
17428
17377
  canEdit,
17429
17378
  onSetTrendline
17430
17379
  }) {
17431
- const { t } = chunkP2COO2QO_js.useTranslation();
17380
+ const { t } = chunk6GFSF2ML_js.useTranslation();
17432
17381
  if (!TRENDLINE_SUPPORTED_TYPES.has(chartType) || series.length === 0) {
17433
17382
  return null;
17434
17383
  }
@@ -17501,7 +17450,7 @@ function ChartTypeSelector({
17501
17450
  onUpdateChartData,
17502
17451
  onTitleChange
17503
17452
  }) {
17504
- const { t } = chunkP2COO2QO_js.useTranslation();
17453
+ const { t } = chunk6GFSF2ML_js.useTranslation();
17505
17454
  const supportsGrouping = GROUPING_SUPPORTED_TYPES.has(chartType);
17506
17455
  const displayedType = pptx.resolveDisplayedChartType(chartData);
17507
17456
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD, children: [
@@ -17582,7 +17531,7 @@ function RotationField({
17582
17531
  canEdit,
17583
17532
  onRotationPatch
17584
17533
  }) {
17585
- const { t } = chunkP2COO2QO_js.useTranslation();
17534
+ const { t } = chunk6GFSF2ML_js.useTranslation();
17586
17535
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
17587
17536
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.chart.userShapeRotation") }),
17588
17537
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -17604,7 +17553,7 @@ function FlipFields({
17604
17553
  canEdit,
17605
17554
  onFlipPatch
17606
17555
  }) {
17607
- const { t } = chunkP2COO2QO_js.useTranslation();
17556
+ const { t } = chunk6GFSF2ML_js.useTranslation();
17608
17557
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
17609
17558
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-1 cursor-pointer", children: [
17610
17559
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -17643,7 +17592,7 @@ function ChartUserShapePositionFields({
17643
17592
  onRotationPatch,
17644
17593
  onFlipPatch
17645
17594
  }) {
17646
- const { t } = chunkP2COO2QO_js.useTranslation();
17595
+ const { t } = chunk6GFSF2ML_js.useTranslation();
17647
17596
  const update = (patch) => onPatch(row.path, patch);
17648
17597
  if (row.depth === 0) {
17649
17598
  const from = row.from;
@@ -17767,7 +17716,7 @@ function ChartUserShapeOptions({
17767
17716
  canEdit,
17768
17717
  onUpdateChartData
17769
17718
  }) {
17770
- const { t } = chunkP2COO2QO_js.useTranslation();
17719
+ const { t } = chunk6GFSF2ML_js.useTranslation();
17771
17720
  const shapes = chartData.userShapes;
17772
17721
  const rows = pptx.listChartUserShapeRows(shapes);
17773
17722
  const kindLabel = (kind) => {
@@ -17925,8 +17874,8 @@ function ChartUserShapeOptions({
17925
17874
  }
17926
17875
  function ChartDataPanel({ selectedElement, canEdit, onUpdateElement }) {
17927
17876
  const chartData = selectedElement.chartData;
17928
- const followDataPoint = chunkXG4WSJ4O_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17929
- const { selection: partSelection } = chunkXG4WSJ4O_js.useChartPartSelection();
17877
+ const followDataPoint = chunk3AZ6ESJU_js.useViewerOptionsContext().advanced.chartPropertiesFollowDataPoint;
17878
+ const { selection: partSelection } = chunk3AZ6ESJU_js.useChartPartSelection();
17930
17879
  const canvasPart = partSelection?.elementId === selectedElement.id ? partSelection.part : null;
17931
17880
  const title = chartData?.title;
17932
17881
  const chartType = chartData?.chartType;
@@ -18364,7 +18313,7 @@ function OleEditorDialog({
18364
18313
  element,
18365
18314
  onUpdateElement
18366
18315
  }) {
18367
- const { t } = chunkP2COO2QO_js.useTranslation();
18316
+ const { t } = chunk6GFSF2ML_js.useTranslation();
18368
18317
  const dialogRef = React108.useRef(null);
18369
18318
  const fileInputRef = React108.useRef(null);
18370
18319
  const descriptor = pptx.buildOleEditDialogDescriptor(element);
@@ -18612,7 +18561,7 @@ function ConnectorArrowsSection({
18612
18561
  onUpdateShapeStyle,
18613
18562
  markDirty
18614
18563
  }) {
18615
- const { t } = chunkP2COO2QO_js.useTranslation();
18564
+ const { t } = chunk6GFSF2ML_js.useTranslation();
18616
18565
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
18617
18566
  ["Start", "End"].map((end) => {
18618
18567
  const key = end === "Start" ? "connectorStartArrow" : "connectorEndArrow";
@@ -18631,7 +18580,7 @@ function ConnectorArrowsSection({
18631
18580
  },
18632
18581
  disabled: !canEdit,
18633
18582
  className: SELECT_CLS2,
18634
- children: chunkP2COO2QO_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18583
+ children: chunk6GFSF2ML_js.CONNECTOR_ARROW_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18635
18584
  }
18636
18585
  )
18637
18586
  ] }, end);
@@ -18655,7 +18604,7 @@ function ConnectorArrowsSection({
18655
18604
  },
18656
18605
  disabled: !canEdit,
18657
18606
  className: SELECT_CLS2,
18658
- children: chunkP2COO2QO_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18607
+ children: chunk6GFSF2ML_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18659
18608
  }
18660
18609
  )
18661
18610
  ] }),
@@ -18674,7 +18623,7 @@ function ConnectorArrowsSection({
18674
18623
  },
18675
18624
  disabled: !canEdit,
18676
18625
  className: SELECT_CLS2,
18677
- children: chunkP2COO2QO_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18626
+ children: chunk6GFSF2ML_js.ARROW_SIZE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.i18nKey) }, o.value))
18678
18627
  }
18679
18628
  )
18680
18629
  ] })
@@ -18705,7 +18654,7 @@ function ConnectorPanel({
18705
18654
  function GroupInfoPanel({
18706
18655
  selectedElement
18707
18656
  }) {
18708
- const { t } = chunkP2COO2QO_js.useTranslation();
18657
+ const { t } = chunk6GFSF2ML_js.useTranslation();
18709
18658
  if (selectedElement.type !== "group") {
18710
18659
  return null;
18711
18660
  }
@@ -18720,7 +18669,7 @@ function OlePropertiesPanel({
18720
18669
  canEdit,
18721
18670
  onUpdateElement
18722
18671
  }) {
18723
- const { t } = chunkP2COO2QO_js.useTranslation();
18672
+ const { t } = chunk6GFSF2ML_js.useTranslation();
18724
18673
  const [isEditorOpen, setIsEditorOpen] = React108.useState(false);
18725
18674
  if (selectedElement.type !== "ole") {
18726
18675
  return null;
@@ -18765,7 +18714,7 @@ function OlePropertiesPanel({
18765
18714
  /* @__PURE__ */ jsxRuntime.jsx(
18766
18715
  "span",
18767
18716
  {
18768
- className: chunkP2COO2QO_js.cn(
18717
+ className: chunk6GFSF2ML_js.cn(
18769
18718
  "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium",
18770
18719
  ole.isLinked ? "bg-blue-500/20 text-blue-400" : "bg-green-500/20 text-green-400"
18771
18720
  ),
@@ -18818,7 +18767,7 @@ function LayerOrderButtons({
18818
18767
  "button",
18819
18768
  {
18820
18769
  type: "button",
18821
- className: chunkP2COO2QO_js.cn("flex-1", BTN2),
18770
+ className: chunk6GFSF2ML_js.cn("flex-1", BTN2),
18822
18771
  disabled: !canEdit,
18823
18772
  onClick: () => onMoveLayer("forward"),
18824
18773
  children: "\u2191 Forward"
@@ -18828,7 +18777,7 @@ function LayerOrderButtons({
18828
18777
  "button",
18829
18778
  {
18830
18779
  type: "button",
18831
- className: chunkP2COO2QO_js.cn("flex-1", BTN2),
18780
+ className: chunk6GFSF2ML_js.cn("flex-1", BTN2),
18832
18781
  disabled: !canEdit,
18833
18782
  onClick: () => onMoveLayer("backward"),
18834
18783
  children: "\u2193 Backward"
@@ -18842,7 +18791,7 @@ function ArtisticEffectsGallery({
18842
18791
  canEdit,
18843
18792
  updateEffects
18844
18793
  }) {
18845
- const { t } = chunkP2COO2QO_js.useTranslation();
18794
+ const { t } = chunk6GFSF2ML_js.useTranslation();
18846
18795
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18847
18796
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.image.artisticEffects") }),
18848
18797
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: pptx.ARTISTIC_EFFECTS.map(([effectName, tKey, cssFilter]) => {
@@ -18852,7 +18801,7 @@ function ArtisticEffectsGallery({
18852
18801
  {
18853
18802
  type: "button",
18854
18803
  disabled: !canEdit,
18855
- className: chunkP2COO2QO_js.cn(
18804
+ className: chunk6GFSF2ML_js.cn(
18856
18805
  "flex flex-col items-center gap-0.5 rounded border p-0.5 hover:bg-accent/50",
18857
18806
  isActive ? "border-primary bg-primary/10" : "border-border"
18858
18807
  ),
@@ -18887,7 +18836,7 @@ function ColorChangeSection({
18887
18836
  canEdit,
18888
18837
  updateEffects
18889
18838
  }) {
18890
- const { t } = chunkP2COO2QO_js.useTranslation();
18839
+ const { t } = chunk6GFSF2ML_js.useTranslation();
18891
18840
  const cc = fx?.clrChange;
18892
18841
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18893
18842
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-2", children: [
@@ -18914,7 +18863,7 @@ function ColorChangeSection({
18914
18863
  DebouncedColorInput,
18915
18864
  {
18916
18865
  disabled: !canEdit,
18917
- value: chunkP2COO2QO_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18866
+ value: chunk6GFSF2ML_js.normalizeHexColor(cc.clrFrom, "#ffffff"),
18918
18867
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18919
18868
  onCommit: (hex) => updateEffects({
18920
18869
  clrChange: {
@@ -18932,7 +18881,7 @@ function ColorChangeSection({
18932
18881
  DebouncedColorInput,
18933
18882
  {
18934
18883
  disabled: !canEdit || Boolean(cc.clrToTransparent),
18935
- value: chunkP2COO2QO_js.normalizeHexColor(cc.clrTo, "#000000"),
18884
+ value: chunk6GFSF2ML_js.normalizeHexColor(cc.clrTo, "#000000"),
18936
18885
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18937
18886
  onCommit: (hex) => updateEffects({
18938
18887
  clrChange: {
@@ -18969,7 +18918,7 @@ function ColorWashSection({
18969
18918
  canEdit,
18970
18919
  updateEffects
18971
18920
  }) {
18972
- const { t } = chunkP2COO2QO_js.useTranslation();
18921
+ const { t } = chunk6GFSF2ML_js.useTranslation();
18973
18922
  const wash = fx?.colorWash;
18974
18923
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px]", children: [
18975
18924
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-2", children: [
@@ -18992,7 +18941,7 @@ function ColorWashSection({
18992
18941
  DebouncedColorInput,
18993
18942
  {
18994
18943
  disabled: !canEdit,
18995
- value: chunkP2COO2QO_js.normalizeHexColor(wash.color, "#0066cc"),
18944
+ value: chunk6GFSF2ML_js.normalizeHexColor(wash.color, "#0066cc"),
18996
18945
  className: "h-6 w-8 rounded border border-border bg-transparent cursor-pointer",
18997
18946
  onCommit: (hex) => updateEffects({
18998
18947
  colorWash: { color: hex, opacity: wash.opacity ?? 40 }
@@ -19069,7 +19018,7 @@ function DuotonePanel({
19069
19018
  canEdit,
19070
19019
  onUpdateElement
19071
19020
  }) {
19072
- const { t } = chunkP2COO2QO_js.useTranslation();
19021
+ const { t } = chunk6GFSF2ML_js.useTranslation();
19073
19022
  const effects = "imageEffects" in selectedElement ? selectedElement.imageEffects : void 0;
19074
19023
  const commitDuotone = React108.useCallback(
19075
19024
  (color1, color2) => {
@@ -19090,8 +19039,8 @@ function DuotonePanel({
19090
19039
  }
19091
19040
  });
19092
19041
  }, [effects, onUpdateElement]);
19093
- const shadowColor = chunkP2COO2QO_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
19094
- const highlightColor = chunkP2COO2QO_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
19042
+ const shadowColor = chunk6GFSF2ML_js.normalizeHexColor(effects?.duotone?.color1, "#000000");
19043
+ const highlightColor = chunk6GFSF2ML_js.normalizeHexColor(effects?.duotone?.color2, "#ffffff");
19095
19044
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px]", children: [
19096
19045
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground font-medium", children: t("pptx.image.duotone") }),
19097
19046
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
@@ -19122,7 +19071,7 @@ function DuotonePanel({
19122
19071
  ] }),
19123
19072
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
19124
19073
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-[10px]", children: t("pptx.image.duotonePresets") }),
19125
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunkXG4WSJ4O_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
19074
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-1", children: chunk3AZ6ESJU_js.DUOTONE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
19126
19075
  "button",
19127
19076
  {
19128
19077
  type: "button",
@@ -19158,7 +19107,7 @@ function ImageAdjustmentsPanel({
19158
19107
  canEdit,
19159
19108
  onUpdateElement
19160
19109
  }) {
19161
- const { t } = chunkP2COO2QO_js.useTranslation();
19110
+ const { t } = chunk6GFSF2ML_js.useTranslation();
19162
19111
  const effects = React108.useMemo(
19163
19112
  () => "imageEffects" in selectedElement ? selectedElement.imageEffects : void 0,
19164
19113
  [selectedElement]
@@ -19259,7 +19208,7 @@ function ImageCropSection({
19259
19208
  canEdit,
19260
19209
  onUpdateElement
19261
19210
  }) {
19262
- const { t } = chunkP2COO2QO_js.useTranslation();
19211
+ const { t } = chunk6GFSF2ML_js.useTranslation();
19263
19212
  if (!pptx$1.isImageLikeElement(selectedElement)) {
19264
19213
  return null;
19265
19214
  }
@@ -19277,7 +19226,7 @@ function ImageCropSection({
19277
19226
  max: MAX_CROP_PERCENT,
19278
19227
  disabled: !croppable,
19279
19228
  className: "accent-primary",
19280
- value: Math.round(chunkP2COO2QO_js.clampCropValue(selectedElement[key]) * 100),
19229
+ value: Math.round(chunk6GFSF2ML_js.clampCropValue(selectedElement[key]) * 100),
19281
19230
  onChange: (e) => onUpdateElement({
19282
19231
  [key]: Number(e.target.value) / 100
19283
19232
  })
@@ -19324,7 +19273,7 @@ function ImagePropertiesPanel({
19324
19273
  canEdit,
19325
19274
  onUpdateElement
19326
19275
  }) {
19327
- const { t } = chunkP2COO2QO_js.useTranslation();
19276
+ const { t } = chunk6GFSF2ML_js.useTranslation();
19328
19277
  const fx = selectedElement.imageEffects;
19329
19278
  const updateEffects = (patch) => {
19330
19279
  onUpdateElement({
@@ -19341,7 +19290,7 @@ function ImagePropertiesPanel({
19341
19290
  {
19342
19291
  rows: 2,
19343
19292
  disabled: !canEdit,
19344
- className: chunkP2COO2QO_js.cn(INPUT2, "resize-none text-[11px]"),
19293
+ className: chunk6GFSF2ML_js.cn(INPUT2, "resize-none text-[11px]"),
19345
19294
  value: selectedElement.altText ?? "",
19346
19295
  onChange: (e) => onUpdateElement({
19347
19296
  altText: e.target.value
@@ -19529,7 +19478,7 @@ function InspectorFields({
19529
19478
  liveTarget,
19530
19479
  livePatch
19531
19480
  }) {
19532
- const { t } = chunkP2COO2QO_js.useTranslation();
19481
+ const { t } = chunk6GFSF2ML_js.useTranslation();
19533
19482
  const views = pptx.resolveInspectorSections(sections, target);
19534
19483
  const change = (sectionId, fieldId, raw) => {
19535
19484
  const patch = pptx.inspectorFieldPatch(sections, sectionId, fieldId, target, raw);
@@ -19757,7 +19706,7 @@ function MediaInspector({
19757
19706
  durationSeconds,
19758
19707
  onUpdateElement
19759
19708
  }) {
19760
- const { t } = chunkP2COO2QO_js.useTranslation();
19709
+ const { t } = chunk6GFSF2ML_js.useTranslation();
19761
19710
  const trimStartMs = element.trimStartMs ?? 0;
19762
19711
  const trimEndMs = element.trimEndMs ?? 0;
19763
19712
  const durationMs = durationSeconds * 1e3;
@@ -19987,7 +19936,7 @@ function MediaPlaybackBookmarks({
19987
19936
  onUpdateElement,
19988
19937
  onSeekTo
19989
19938
  }) {
19990
- const { t } = chunkP2COO2QO_js.useTranslation();
19939
+ const { t } = chunk6GFSF2ML_js.useTranslation();
19991
19940
  const [newBookmarkLabel, setNewBookmarkLabel] = React108.useState("");
19992
19941
  const volumePercent = Math.round((element.volume ?? 1) * 100);
19993
19942
  const handleAddBookmark = React108.useCallback(() => {
@@ -20237,7 +20186,7 @@ function MediaPropertiesPanel({
20237
20186
  canEdit,
20238
20187
  onUpdateElement
20239
20188
  }) {
20240
- const { t } = chunkP2COO2QO_js.useTranslation();
20189
+ const { t } = chunk6GFSF2ML_js.useTranslation();
20241
20190
  const mediaRef = React108.useRef(null);
20242
20191
  const [isPlaying, setIsPlaying] = React108.useState(false);
20243
20192
  const [currentTime, setCurrentTime] = React108.useState(0);
@@ -20471,7 +20420,7 @@ function AccessibilityTextSection({
20471
20420
  canEdit,
20472
20421
  onUpdateElement
20473
20422
  }) {
20474
- const { t } = chunkP2COO2QO_js.useTranslation();
20423
+ const { t } = chunk6GFSF2ML_js.useTranslation();
20475
20424
  const fields = pptx.getNonVisualDescriptionFields(selectedElement);
20476
20425
  if (!fields.showAltText && !fields.showTitle) {
20477
20426
  return null;
@@ -20486,7 +20435,7 @@ function AccessibilityTextSection({
20486
20435
  rows: 2,
20487
20436
  disabled: !canEdit,
20488
20437
  placeholder: t("pptx.elementAccessibility.altTextPlaceholder"),
20489
- className: chunkP2COO2QO_js.cn(INPUT2, "resize-none text-[11px]"),
20438
+ className: chunk6GFSF2ML_js.cn(INPUT2, "resize-none text-[11px]"),
20490
20439
  value: fields.altText,
20491
20440
  onChange: (e) => onUpdateElement({ altText: e.target.value })
20492
20441
  }
@@ -20500,7 +20449,7 @@ function AccessibilityTextSection({
20500
20449
  type: "text",
20501
20450
  disabled: !canEdit,
20502
20451
  placeholder: t("pptx.elementAccessibility.titlePlaceholder"),
20503
- className: chunkP2COO2QO_js.cn(INPUT2, "text-[11px]"),
20452
+ className: chunk6GFSF2ML_js.cn(INPUT2, "text-[11px]"),
20504
20453
  value: fields.title,
20505
20454
  onChange: (e) => onUpdateElement({ title: e.target.value })
20506
20455
  }
@@ -20528,7 +20477,7 @@ function RecentColorsRow({
20528
20477
  disabled,
20529
20478
  onCommit
20530
20479
  }) {
20531
- const { t } = chunkP2COO2QO_js.useTranslation();
20480
+ const { t } = chunk6GFSF2ML_js.useTranslation();
20532
20481
  const { recentColors, pushColor } = useRecentColors();
20533
20482
  const shown = recentColors.length > 0;
20534
20483
  const ref = React108.useRef(null);
@@ -20570,7 +20519,7 @@ function ThemeColorSwatchGrid({
20570
20519
  selectedHex,
20571
20520
  onPick
20572
20521
  }) {
20573
- const { t } = chunkP2COO2QO_js.useTranslation();
20522
+ const { t } = chunk6GFSF2ML_js.useTranslation();
20574
20523
  const themeColorMap = useThemeColorMap();
20575
20524
  const columns = React108.useMemo(
20576
20525
  () => pptx.buildThemeColorSwatchGrid(themeColorMap, (key, params) => t(key, params)),
@@ -20617,7 +20566,7 @@ function SelectRow({
20617
20566
  options,
20618
20567
  onChange
20619
20568
  }) {
20620
- const { t } = chunkP2COO2QO_js.useTranslation();
20569
+ const { t } = chunk6GFSF2ML_js.useTranslation();
20621
20570
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: `flex flex-col gap-1 ${span2 ? COL2 : ""}`, children: [
20622
20571
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: label }),
20623
20572
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -20641,14 +20590,14 @@ function ColorPickerRow({
20641
20590
  onChange,
20642
20591
  styleChange
20643
20592
  }) {
20644
- const { t } = chunkP2COO2QO_js.useTranslation();
20593
+ const { t } = chunk6GFSF2ML_js.useTranslation();
20645
20594
  const { pushColor } = useRecentColors();
20646
20595
  const commit = (color, ref) => {
20647
20596
  onChange(color, ref);
20648
20597
  pushColor(color);
20649
20598
  };
20650
20599
  const handleEyedropper = async () => {
20651
- const color = await chunkP2COO2QO_js.openNativeEyeDropper();
20600
+ const color = await chunk6GFSF2ML_js.openNativeEyeDropper();
20652
20601
  if (color) {
20653
20602
  commit(color);
20654
20603
  }
@@ -20721,7 +20670,7 @@ function GradientStopRow({
20721
20670
  onUpdate,
20722
20671
  allStops
20723
20672
  }) {
20724
- const { t } = chunkP2COO2QO_js.useTranslation();
20673
+ const { t } = chunk6GFSF2ML_js.useTranslation();
20725
20674
  const { pushColor } = useRecentColors();
20726
20675
  const commitRecentColor = useRecentColorCommit();
20727
20676
  const patchStop = (patch) => {
@@ -20734,9 +20683,9 @@ function GradientStopRow({
20734
20683
  "input",
20735
20684
  {
20736
20685
  type: "color",
20737
- value: chunkP2COO2QO_js.normalizeHexColor(stop2.color, "#3b82f6"),
20686
+ value: chunk6GFSF2ML_js.normalizeHexColor(stop2.color, "#3b82f6"),
20738
20687
  ref: commitRecentColor,
20739
- onChange: (e) => patchStop({ color: chunkP2COO2QO_js.normalizeHexColor(e.target.value, "#3b82f6"), colorRef: void 0 }),
20688
+ onChange: (e) => patchStop({ color: chunk6GFSF2ML_js.normalizeHexColor(e.target.value, "#3b82f6"), colorRef: void 0 }),
20740
20689
  className: "h-7 w-10 rounded border border-border bg-muted"
20741
20690
  }
20742
20691
  ),
@@ -20811,7 +20760,7 @@ function FillAdvancedControls({
20811
20760
  onUpdateGradientStops,
20812
20761
  onSetFillColor: _onSetFillColor
20813
20762
  }) {
20814
- const { t } = chunkP2COO2QO_js.useTranslation();
20763
+ const { t } = chunk6GFSF2ML_js.useTranslation();
20815
20764
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20816
20765
  showGradient && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20817
20766
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -20865,7 +20814,7 @@ function FillAdvancedControls({
20865
20814
  onClick: () => onUpdateGradientStops([
20866
20815
  ...gradientStops,
20867
20816
  {
20868
- color: chunkP2COO2QO_js.normalizeHexColor(style?.fillColor, chunkP2COO2QO_js.DEFAULT_FILL_COLOR),
20817
+ color: chunk6GFSF2ML_js.normalizeHexColor(style?.fillColor, chunk6GFSF2ML_js.DEFAULT_FILL_COLOR),
20869
20818
  position: 50,
20870
20819
  opacity: 1
20871
20820
  }
@@ -20879,9 +20828,9 @@ function FillAdvancedControls({
20879
20828
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${COL2} flex flex-col gap-2`, children: [
20880
20829
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LBL, children: "Pattern" }),
20881
20830
  /* @__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) => {
20882
- const fgColor = chunkP2COO2QO_js.normalizeHexColor(style?.fillColor, chunkP2COO2QO_js.DEFAULT_FILL_COLOR);
20883
- const bgColor = chunkP2COO2QO_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
20884
- const svgPattern = chunkP2COO2QO_js.getPatternSvg(opt.value, fgColor, bgColor);
20831
+ const fgColor = chunk6GFSF2ML_js.normalizeHexColor(style?.fillColor, chunk6GFSF2ML_js.DEFAULT_FILL_COLOR);
20832
+ const bgColor = chunk6GFSF2ML_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff");
20833
+ const svgPattern = chunk6GFSF2ML_js.getPatternSvg(opt.value, fgColor, bgColor);
20885
20834
  const isSelected = (style.fillPatternPreset || "pct20") === opt.value;
20886
20835
  return /* @__PURE__ */ jsxRuntime.jsx(
20887
20836
  "button",
@@ -20914,7 +20863,7 @@ function FillAdvancedControls({
20914
20863
  {
20915
20864
  label: t("pptx.fillAdvanced.foregroundColor"),
20916
20865
  prefix: "pattern-fg",
20917
- value: chunkP2COO2QO_js.normalizeHexColor(style?.fillColor, chunkP2COO2QO_js.DEFAULT_FILL_COLOR),
20866
+ value: chunk6GFSF2ML_js.normalizeHexColor(style?.fillColor, chunk6GFSF2ML_js.DEFAULT_FILL_COLOR),
20918
20867
  disabled: isLine,
20919
20868
  onChange: (color) => onUpdateShapeStyle(patternForeground(color)),
20920
20869
  styleChange: patternForeground
@@ -20925,7 +20874,7 @@ function FillAdvancedControls({
20925
20874
  {
20926
20875
  label: t("pptx.fillAdvanced.backgroundColor"),
20927
20876
  prefix: "pattern-bg",
20928
- value: chunkP2COO2QO_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
20877
+ value: chunk6GFSF2ML_js.normalizeHexColor(style?.fillPatternBackgroundColor, "#ffffff"),
20929
20878
  disabled: isLine,
20930
20879
  onChange: (color) => onUpdateShapeStyle(patternBackground(color)),
20931
20880
  styleChange: patternBackground
@@ -20990,7 +20939,7 @@ var QUICK_STYLES = pptx.buildQuickStylesGallery();
20990
20939
  function QuickStylesGallery({
20991
20940
  onUpdateShapeStyle
20992
20941
  }) {
20993
- const { t } = chunkP2COO2QO_js.useTranslation();
20942
+ const { t } = chunk6GFSF2ML_js.useTranslation();
20994
20943
  const ref = React108.useRef(null);
20995
20944
  React108.useLayoutEffect(() => {
20996
20945
  const gallery = ref.current;
@@ -21027,14 +20976,14 @@ function StrokeEffectsSection({
21027
20976
  onUpdateShapeStyle,
21028
20977
  onSetStrokeColor
21029
20978
  }) {
21030
- const { t } = chunkP2COO2QO_js.useTranslation();
20979
+ const { t } = chunk6GFSF2ML_js.useTranslation();
21031
20980
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21032
20981
  /* @__PURE__ */ jsxRuntime.jsx(
21033
20982
  ColorPickerRow,
21034
20983
  {
21035
20984
  label: t("pptx.inspector.stroke"),
21036
20985
  prefix: "stroke",
21037
- value: chunkP2COO2QO_js.normalizeHexColor(style?.strokeColor, chunkP2COO2QO_js.DEFAULT_STROKE_COLOR),
20986
+ value: chunk6GFSF2ML_js.normalizeHexColor(style?.strokeColor, chunk6GFSF2ML_js.DEFAULT_STROKE_COLOR),
21038
20987
  selectedRef: style?.strokeColorRef,
21039
20988
  onChange: onSetStrokeColor,
21040
20989
  styleChange: (hex, current) => pptx.shapeOutlineChange(hex, void 0, current)
@@ -21077,7 +21026,7 @@ function FillStrokeProperties({
21077
21026
  onSetFillColor,
21078
21027
  onSetStrokeColor
21079
21028
  }) {
21080
- const { t } = chunkP2COO2QO_js.useTranslation();
21029
+ const { t } = chunk6GFSF2ML_js.useTranslation();
21081
21030
  const line = isLineish(selectedElement, selectedShapeType);
21082
21031
  const style = selectedShapeStyle;
21083
21032
  const handleFillModeChange = (nextMode) => {
@@ -21093,10 +21042,10 @@ function FillStrokeProperties({
21093
21042
  return;
21094
21043
  }
21095
21044
  if (nextMode === "gradient") {
21096
- const existing = chunkP2COO2QO_js.sanitizeGradientStops(style?.fillGradientStops);
21045
+ const existing = chunk6GFSF2ML_js.sanitizeGradientStops(style?.fillGradientStops);
21097
21046
  const stops = existing.length >= 2 ? existing : [
21098
21047
  {
21099
- color: chunkP2COO2QO_js.normalizeHexColor(style?.fillColor, chunkP2COO2QO_js.DEFAULT_FILL_COLOR),
21048
+ color: chunk6GFSF2ML_js.normalizeHexColor(style?.fillColor, chunk6GFSF2ML_js.DEFAULT_FILL_COLOR),
21100
21049
  position: 0,
21101
21050
  opacity: 1
21102
21051
  },
@@ -21121,7 +21070,7 @@ function FillStrokeProperties({
21121
21070
  onUpdateShapeStyle({ fillMode: "solid" });
21122
21071
  };
21123
21072
  const gradientStops = selectedGradientStops.length > 0 ? selectedGradientStops : [
21124
- { color: chunkP2COO2QO_js.DEFAULT_FILL_COLOR, position: 0 },
21073
+ { color: chunk6GFSF2ML_js.DEFAULT_FILL_COLOR, position: 0 },
21125
21074
  { color: "#ffffff", position: 100 }
21126
21075
  ];
21127
21076
  const showGradient = style?.fillMode === "gradient" || selectedGradientStops.length > 0;
@@ -21148,7 +21097,7 @@ function FillStrokeProperties({
21148
21097
  {
21149
21098
  label: t("pptx.fill.fill"),
21150
21099
  prefix: "fill",
21151
- value: chunkP2COO2QO_js.normalizeHexColor(style?.fillColor, chunkP2COO2QO_js.DEFAULT_FILL_COLOR),
21100
+ value: chunk6GFSF2ML_js.normalizeHexColor(style?.fillColor, chunk6GFSF2ML_js.DEFAULT_FILL_COLOR),
21152
21101
  selectedRef: style?.fillColorRef,
21153
21102
  disabled: line,
21154
21103
  onChange: onSetFillColor,
@@ -21186,7 +21135,7 @@ function Text3DProperties({
21186
21135
  ts,
21187
21136
  onUpdateTextStyle
21188
21137
  }) {
21189
- const { t } = chunkP2COO2QO_js.useTranslation();
21138
+ const { t } = chunk6GFSF2ML_js.useTranslation();
21190
21139
  const commitRecentColor = useRecentColorCommit();
21191
21140
  const t3d = ts?.text3d;
21192
21141
  const hasExtrusion = Boolean(t3d?.extrusionHeight && t3d.extrusionHeight > 0);
@@ -21233,7 +21182,7 @@ function Text3DProperties({
21233
21182
  "input",
21234
21183
  {
21235
21184
  type: "color",
21236
- value: chunkP2COO2QO_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21185
+ value: chunk6GFSF2ML_js.normalizeHexColor(t3d?.extrusionColor, "#888888"),
21237
21186
  ref: commitRecentColor,
21238
21187
  onChange: (e) => update3d({ extrusionColor: e.target.value }),
21239
21188
  className: COLOR_CLS
@@ -21400,7 +21349,7 @@ function AdvancedTextFormatting({
21400
21349
  onUpdateTextStyle,
21401
21350
  numChange
21402
21351
  }) {
21403
- const { t } = chunkP2COO2QO_js.useTranslation();
21352
+ const { t } = chunk6GFSF2ML_js.useTranslation();
21404
21353
  const commitRecentColor = useRecentColorCommit();
21405
21354
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 rounded border border-border bg-card p-2 space-y-2", children: [
21406
21355
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] uppercase tracking-wide text-muted-foreground", children: t("pptx.textProperties.advancedTextHeading") }),
@@ -21422,7 +21371,7 @@ function AdvancedTextFormatting({
21422
21371
  "input",
21423
21372
  {
21424
21373
  type: "color",
21425
- value: chunkP2COO2QO_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21374
+ value: chunk6GFSF2ML_js.normalizeHexColor(ts?.highlightColor, "#ffff00"),
21426
21375
  ref: commitRecentColor,
21427
21376
  onChange: (e) => onUpdateTextStyle({ highlightColor: e.target.value }),
21428
21377
  disabled: !canEdit,
@@ -21564,7 +21513,7 @@ function TextReflectionSection({
21564
21513
  onUpdateTextStyle,
21565
21514
  numChange
21566
21515
  }) {
21567
- const { t } = chunkP2COO2QO_js.useTranslation();
21516
+ const { t } = chunk6GFSF2ML_js.useTranslation();
21568
21517
  const hasReflection = Boolean(ts?.textReflection);
21569
21518
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
21570
21519
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "inline-flex items-center gap-2 text-foreground", children: [
@@ -21672,7 +21621,7 @@ function TextEffectsPanel({
21672
21621
  onUpdateTextStyle,
21673
21622
  numChange
21674
21623
  }) {
21675
- const { t } = chunkP2COO2QO_js.useTranslation();
21624
+ const { t } = chunk6GFSF2ML_js.useTranslation();
21676
21625
  const commitRecentColor = useRecentColorCommit();
21677
21626
  const hasShadow = Boolean(
21678
21627
  ts?.textShadowColor || typeof ts?.textShadowBlur === "number" && ts.textShadowBlur > 0
@@ -21718,7 +21667,7 @@ function TextEffectsPanel({
21718
21667
  "input",
21719
21668
  {
21720
21669
  type: "color",
21721
- value: chunkP2COO2QO_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21670
+ value: chunk6GFSF2ML_js.normalizeHexColor(ts?.textShadowColor, "#000000"),
21722
21671
  ref: commitRecentColor,
21723
21672
  onChange: (e) => onUpdateTextStyle({ textShadowColor: e.target.value }),
21724
21673
  className: COLOR_CLS2
@@ -21823,7 +21772,7 @@ function TextEffectsPanel({
21823
21772
  "input",
21824
21773
  {
21825
21774
  type: "color",
21826
- value: chunkP2COO2QO_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
21775
+ value: chunk6GFSF2ML_js.normalizeHexColor(ts?.textGlowColor, "#ffff00"),
21827
21776
  ref: commitRecentColor,
21828
21777
  onChange: (e) => onUpdateTextStyle({ textGlowColor: e.target.value }),
21829
21778
  className: COLOR_CLS2
@@ -21873,7 +21822,7 @@ function TextWarpGallery({
21873
21822
  ts,
21874
21823
  onUpdateTextStyle
21875
21824
  }) {
21876
- const { t } = chunkP2COO2QO_js.useTranslation();
21825
+ const { t } = chunk6GFSF2ML_js.useTranslation();
21877
21826
  const [expanded, setExpanded] = React108__default.default.useState(false);
21878
21827
  const currentPreset = ts?.textWarpPreset || "textNoShape";
21879
21828
  const descriptor = React108.useMemo(() => pptx.buildTextWarpGallery(ts?.textWarpPreset), [ts?.textWarpPreset]);
@@ -21954,7 +21903,7 @@ function ShapeTextPanels({
21954
21903
  onUpdateElementStyle,
21955
21904
  onUpdateTextStyle
21956
21905
  }) {
21957
- const { t } = chunkP2COO2QO_js.useTranslation();
21906
+ const { t } = chunk6GFSF2ML_js.useTranslation();
21958
21907
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21959
21908
  pptx$1.hasShapeProperties(selectedElement) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
21960
21909
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.shape.type", "Shape Type") }),
@@ -21963,11 +21912,11 @@ function ShapeTextPanels({
21963
21912
  {
21964
21913
  value: selectedElement.shapeType || "rect",
21965
21914
  disabled: !canEdit,
21966
- className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
21915
+ className: chunk6GFSF2ML_js.cn(INPUT2, "w-full"),
21967
21916
  onChange: (e) => onUpdateElement({
21968
21917
  shapeType: e.target.value
21969
21918
  }),
21970
- children: chunkP2COO2QO_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
21919
+ children: chunk6GFSF2ML_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
21971
21920
  }
21972
21921
  )
21973
21922
  ] }),
@@ -21979,7 +21928,7 @@ function ShapeTextPanels({
21979
21928
  selectedElement,
21980
21929
  selectedShapeStyle: selectedElement.shapeStyle,
21981
21930
  selectedShapeType: selectedElement.shapeType,
21982
- selectedGradientStops: chunkP2COO2QO_js.sanitizeGradientStops(
21931
+ selectedGradientStops: chunk6GFSF2ML_js.sanitizeGradientStops(
21983
21932
  selectedElement.shapeStyle?.fillGradientStops
21984
21933
  ),
21985
21934
  canEdit,
@@ -22015,7 +21964,7 @@ function ShapeTextPanels({
22015
21964
  {
22016
21965
  disabled: !canEdit,
22017
21966
  "aria-label": "Text Color",
22018
- value: chunkP2COO2QO_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
21967
+ value: chunk6GFSF2ML_js.normalizeHexColor(selectedElement.textStyle?.color, "#000000"),
22019
21968
  className: "w-full h-7 rounded border border-border bg-transparent cursor-pointer",
22020
21969
  onApply: (hex) => onUpdateTextStyle({ color: hex, colorRef: void 0 }),
22021
21970
  patch: textColorPatch
@@ -22106,7 +22055,7 @@ function TextFormatToggle({
22106
22055
  {
22107
22056
  type: "button",
22108
22057
  disabled,
22109
- className: chunkP2COO2QO_js.cn(
22058
+ className: chunk6GFSF2ML_js.cn(
22110
22059
  "px-2 py-1 rounded text-[11px] transition-colors max-md:min-w-[44px]! max-md:min-h-[44px]!",
22111
22060
  italic && "italic",
22112
22061
  underline && "underline",
@@ -22275,7 +22224,7 @@ function SmartArtLayoutSwitcher({
22275
22224
  canEdit,
22276
22225
  onUpdateSmartArt
22277
22226
  }) {
22278
- const { t } = chunkP2COO2QO_js.useTranslation();
22227
+ const { t } = chunk6GFSF2ML_js.useTranslation();
22279
22228
  const currentLayout = smartArtData.resolvedLayoutType ?? "list";
22280
22229
  const handleLayoutSwitch = (newLayout) => {
22281
22230
  if (!canEdit || newLayout === currentLayout) {
@@ -22294,7 +22243,7 @@ function SmartArtLayoutSwitcher({
22294
22243
  type: "button",
22295
22244
  "data-testid": `smartart-layout-${type}`,
22296
22245
  disabled: !canEdit,
22297
- className: chunkP2COO2QO_js.cn(
22246
+ className: chunk6GFSF2ML_js.cn(
22298
22247
  "flex flex-col items-center gap-0.5 rounded border p-1.5 transition-colors",
22299
22248
  "text-[9px] leading-tight",
22300
22249
  isActive ? "border-primary bg-primary/15 text-primary" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground",
@@ -22321,7 +22270,7 @@ function SmartArtStyleControls({
22321
22270
  onChangeColorScheme,
22322
22271
  onChangeStyle
22323
22272
  }) {
22324
- const { t } = chunkP2COO2QO_js.useTranslation();
22273
+ const { t } = chunk6GFSF2ML_js.useTranslation();
22325
22274
  const translate = React108__default.default.useCallback((key) => t(key), [t]);
22326
22275
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22327
22276
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1 text-[11px]", children: [
@@ -22332,7 +22281,7 @@ function SmartArtStyleControls({
22332
22281
  disabled: !canEdit,
22333
22282
  "data-testid": "smartart-color-scheme",
22334
22283
  "aria-label": t("pptx.smartart.colorScheme"),
22335
- className: chunkP2COO2QO_js.cn(INPUT2, "w-full"),
22284
+ className: chunk6GFSF2ML_js.cn(INPUT2, "w-full"),
22336
22285
  value: colorScheme,
22337
22286
  onChange: (e) => onChangeColorScheme(e.target.value),
22338
22287
  children: colorSchemes.map((cs) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: cs, children: pptx.schemaLabel(pptx.SMARTART_COLOR_SCHEME_LABEL_KEYS, cs, translate) }, cs))
@@ -22347,7 +22296,7 @@ function SmartArtStyleControls({
22347
22296
  type: "button",
22348
22297
  disabled: !canEdit,
22349
22298
  "aria-pressed": style === s,
22350
- className: chunkP2COO2QO_js.cn(
22299
+ className: chunk6GFSF2ML_js.cn(
22351
22300
  "flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
22352
22301
  style === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
22353
22302
  ),
@@ -22373,14 +22322,14 @@ function SmartArtPropertiesPanel({
22373
22322
  onUpdateElement,
22374
22323
  box
22375
22324
  }) {
22376
- const { t } = chunkP2COO2QO_js.useTranslation();
22325
+ const { t } = chunk6GFSF2ML_js.useTranslation();
22377
22326
  const { pushColor } = useRecentColors();
22378
22327
  const paneRef = React108__default.default.useRef(null);
22379
22328
  const applySmartArtData = (newData) => {
22380
22329
  const reflowed = box ? pptx.rebuildDrawingShapesIfCleared(
22381
22330
  newData,
22382
22331
  newData.layout,
22383
- chunkXG4WSJ4O_js.resolveSmartArtDataPalette(newData),
22332
+ chunk3AZ6ESJU_js.resolveSmartArtDataPalette(newData),
22384
22333
  newData.style ?? "flat",
22385
22334
  "inspector",
22386
22335
  box
@@ -22451,9 +22400,9 @@ function TableDataGrid({
22451
22400
  canEdit,
22452
22401
  onUpdateElement
22453
22402
  }) {
22454
- const { t } = chunkP2COO2QO_js.useTranslation();
22403
+ const { t } = chunk6GFSF2ML_js.useTranslation();
22455
22404
  const grid = pptx.buildTableDataGrid(tableElement);
22456
- const { viewportWidth } = chunkXG4WSJ4O_js.useIsMobile();
22405
+ const { viewportWidth } = chunk3AZ6ESJU_js.useIsMobile();
22457
22406
  const gridPlan = pptx.getDenseGridLayoutPlan(viewportWidth);
22458
22407
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
22459
22408
  const stickyGutterClass = gridPlan.stickyFirstColumn ? "sticky left-0 z-10" : "";
@@ -22617,7 +22566,7 @@ function TableCellPatternFill({
22617
22566
  canEdit,
22618
22567
  onUpdateCellStyle
22619
22568
  }) {
22620
- const { t } = chunkP2COO2QO_js.useTranslation();
22569
+ const { t } = chunk6GFSF2ML_js.useTranslation();
22621
22570
  const commitRecentColor = useRecentColorCommit();
22622
22571
  const translate = (key) => t(key);
22623
22572
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -22672,7 +22621,7 @@ function TableCellAdvancedFill({
22672
22621
  canEdit,
22673
22622
  onUpdateCellStyle
22674
22623
  }) {
22675
- const { t } = chunkP2COO2QO_js.useTranslation();
22624
+ const { t } = chunk6GFSF2ML_js.useTranslation();
22676
22625
  const fillMode = cellStyle.fillMode ?? "solid";
22677
22626
  const handleFillModeChange = (mode) => {
22678
22627
  const next = mode;
@@ -22760,7 +22709,7 @@ function GradientControls({
22760
22709
  canEdit,
22761
22710
  onUpdateCellStyle
22762
22711
  }) {
22763
- const { t } = chunkP2COO2QO_js.useTranslation();
22712
+ const { t } = chunk6GFSF2ML_js.useTranslation();
22764
22713
  const commitRecentColor = useRecentColorCommit();
22765
22714
  const stops = cellStyle.gradientFillStops ?? [];
22766
22715
  const gradType = cellStyle.gradientFillType ?? "linear";
@@ -22858,7 +22807,7 @@ function TableCellColorField({
22858
22807
  disabled,
22859
22808
  onCommit
22860
22809
  }) {
22861
- const hex = chunkP2COO2QO_js.normalizeHexColor(value, fallback);
22810
+ const hex = chunk6GFSF2ML_js.normalizeHexColor(value, fallback);
22862
22811
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex flex-col gap-1", children: [
22863
22812
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
22864
22813
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -22888,7 +22837,7 @@ function TableCellFormattingPanel({
22888
22837
  onUpdateTableData,
22889
22838
  onUpdateMergeRows
22890
22839
  }) {
22891
- const { t } = chunkP2COO2QO_js.useTranslation();
22840
+ const { t } = chunk6GFSF2ML_js.useTranslation();
22892
22841
  const { rowIndex, columnIndex } = tableEditorState;
22893
22842
  const cell = td.rows[rowIndex]?.cells[columnIndex];
22894
22843
  if (!cell) {
@@ -22966,7 +22915,7 @@ function TableCellFormattingPanel({
22966
22915
  {
22967
22916
  type: "button",
22968
22917
  disabled: !canEdit,
22969
- className: chunkP2COO2QO_js.cn(
22918
+ className: chunk6GFSF2ML_js.cn(
22970
22919
  "px-2 py-1 rounded text-[11px] transition-colors",
22971
22920
  cls,
22972
22921
  cs[key] ? "bg-primary text-white" : "bg-muted hover:bg-accent"
@@ -22985,7 +22934,7 @@ function TableCellFormattingPanel({
22985
22934
  {
22986
22935
  type: "button",
22987
22936
  disabled: !canEdit,
22988
- className: chunkP2COO2QO_js.cn(
22937
+ className: chunk6GFSF2ML_js.cn(
22989
22938
  "px-2 py-1 rounded text-[11px] transition-colors",
22990
22939
  cs.align === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
22991
22940
  ),
@@ -23003,7 +22952,7 @@ function TableCellFormattingPanel({
23003
22952
  {
23004
22953
  type: "button",
23005
22954
  disabled: !canEdit,
23006
- className: chunkP2COO2QO_js.cn(
22955
+ className: chunk6GFSF2ML_js.cn(
23007
22956
  "px-2 py-1 rounded text-[11px] transition-colors",
23008
22957
  cs.vAlign === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
23009
22958
  ),
@@ -23026,7 +22975,7 @@ function TableCellFormattingPanel({
23026
22975
  DebouncedColorInput,
23027
22976
  {
23028
22977
  disabled: !canEdit,
23029
- value: chunkP2COO2QO_js.normalizeHexColor(cs[colorKey], "#374151"),
22978
+ value: chunk6GFSF2ML_js.normalizeHexColor(cs[colorKey], "#374151"),
23030
22979
  className: "w-7 h-6 rounded border border-border bg-transparent cursor-pointer shrink-0",
23031
22980
  onCommit: (hex) => updateCellStyle({ [colorKey]: hex })
23032
22981
  }
@@ -23036,7 +22985,7 @@ function TableCellFormattingPanel({
23036
22985
  {
23037
22986
  type: "number",
23038
22987
  disabled: !canEdit,
23039
- className: chunkP2COO2QO_js.cn(INPUT2, "w-14"),
22988
+ className: chunk6GFSF2ML_js.cn(INPUT2, "w-14"),
23040
22989
  min: 0,
23041
22990
  max: 10,
23042
22991
  value: pptx.inspectorNumber(cs[widthKey], 1),
@@ -23052,7 +23001,7 @@ function TableCellFormattingPanel({
23052
23001
  {
23053
23002
  type: "button",
23054
23003
  disabled: !canEdit,
23055
- className: chunkP2COO2QO_js.cn(BTN2, "text-center"),
23004
+ className: chunk6GFSF2ML_js.cn(BTN2, "text-center"),
23056
23005
  onClick: () => {
23057
23006
  const newRows = pptx.computeMergeCellRight(td, rowIndex, columnIndex);
23058
23007
  if (newRows) {
@@ -23067,7 +23016,7 @@ function TableCellFormattingPanel({
23067
23016
  {
23068
23017
  type: "button",
23069
23018
  disabled: !canEdit,
23070
- className: chunkP2COO2QO_js.cn(BTN2, "text-center"),
23019
+ className: chunk6GFSF2ML_js.cn(BTN2, "text-center"),
23071
23020
  onClick: () => {
23072
23021
  const newRows = pptx.computeMergeCellDown(td, rowIndex, columnIndex);
23073
23022
  if (newRows) {
@@ -23082,7 +23031,7 @@ function TableCellFormattingPanel({
23082
23031
  {
23083
23032
  type: "button",
23084
23033
  disabled: !canEdit,
23085
- className: chunkP2COO2QO_js.cn(BTN2, "text-center"),
23034
+ className: chunk6GFSF2ML_js.cn(BTN2, "text-center"),
23086
23035
  onClick: () => {
23087
23036
  const newRows = pptx.computeSplitCell(td, rowIndex, columnIndex);
23088
23037
  if (newRows) {
@@ -23101,7 +23050,7 @@ function TableStyleEditorFields({
23101
23050
  canEdit,
23102
23051
  onEdit
23103
23052
  }) {
23104
- const { t } = chunkP2COO2QO_js.useTranslation();
23053
+ const { t } = chunk6GFSF2ML_js.useTranslation();
23105
23054
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
23106
23055
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
23107
23056
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.tableStyleEditor.fillSection") }),
@@ -23206,7 +23155,7 @@ function BorderSideRow({
23206
23155
  canEdit,
23207
23156
  onEdit
23208
23157
  }) {
23209
- const { t } = chunkP2COO2QO_js.useTranslation();
23158
+ const { t } = chunk6GFSF2ML_js.useTranslation();
23210
23159
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 text-[11px]", children: [
23211
23160
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-28 shrink-0 text-muted-foreground", children: t(pptx.TABLE_STYLE_BORDER_SIDE_LABEL_KEYS[side]) }),
23212
23161
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -23263,7 +23212,7 @@ function TableStyleEditor({
23263
23212
  onAssignStyle,
23264
23213
  onClose
23265
23214
  }) {
23266
- const { t } = chunkP2COO2QO_js.useTranslation();
23215
+ const { t } = chunk6GFSF2ML_js.useTranslation();
23267
23216
  const themeColorMap = useThemeColorMap();
23268
23217
  const [activeStyleId, setActiveStyleId] = React108.useState(
23269
23218
  styleId ? pptx$1.normalizeTableStyleGuid(styleId) : ""
@@ -23355,7 +23304,7 @@ function TablePropertiesPanel({
23355
23304
  onTableStyleMapChange,
23356
23305
  onDeleteTableStyle
23357
23306
  }) {
23358
- const { t } = chunkP2COO2QO_js.useTranslation();
23307
+ const { t } = chunk6GFSF2ML_js.useTranslation();
23359
23308
  const [showStyleEditor, setShowStyleEditor] = React108.useState(false);
23360
23309
  const td = tableElement.tableData;
23361
23310
  if (!td) {
@@ -23437,7 +23386,7 @@ function TablePropertiesPanel({
23437
23386
  ] }),
23438
23387
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
23439
23388
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.table.stylePresets") }),
23440
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunkP2COO2QO_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23389
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-1.5", children: chunk6GFSF2ML_js.TABLE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx(
23441
23390
  "button",
23442
23391
  {
23443
23392
  type: "button",
@@ -23585,7 +23534,7 @@ function ElementInspectorBody({
23585
23534
  onUpdateTextStyle,
23586
23535
  onMoveLayer
23587
23536
  }) {
23588
- const { t } = chunkP2COO2QO_js.useTranslation();
23537
+ const { t } = chunk6GFSF2ML_js.useTranslation();
23589
23538
  const isLocked = pptx.isElementLocked(selectedElement);
23590
23539
  const handleToggleLock = () => {
23591
23540
  if (!canEdit) {
@@ -23735,7 +23684,7 @@ function CommentMentionTextarea({
23735
23684
  className,
23736
23685
  ariaLabel
23737
23686
  }) {
23738
- const { t } = chunkP2COO2QO_js.useTranslation();
23687
+ const { t } = chunk6GFSF2ML_js.useTranslation();
23739
23688
  const textareaRef = React108.useRef(null);
23740
23689
  const [caret, setCaret] = React108.useState(value.length);
23741
23690
  const [highlighted, setHighlighted] = React108.useState(0);
@@ -23824,7 +23773,7 @@ function CommentMentionTextarea({
23824
23773
  "data-testid": "pptx-comment-mention-option",
23825
23774
  role: "option",
23826
23775
  "aria-selected": index === safeHighlighted,
23827
- className: chunkP2COO2QO_js.cn(
23776
+ className: chunk6GFSF2ML_js.cn(
23828
23777
  "block w-full px-2 py-1 text-left text-[11px] hover:bg-accent",
23829
23778
  index === safeHighlighted && "bg-accent"
23830
23779
  ),
@@ -23871,7 +23820,7 @@ function InspectorCommentReplyForm({
23871
23820
  onSubmit,
23872
23821
  onCancel
23873
23822
  }) {
23874
- const { t } = chunkP2COO2QO_js.useTranslation();
23823
+ const { t } = chunk6GFSF2ML_js.useTranslation();
23875
23824
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 space-y-1.5 pl-3 border-l-2 border-l-primary/40", children: [
23876
23825
  /* @__PURE__ */ jsxRuntime.jsx(
23877
23826
  CommentMentionTextarea,
@@ -23937,7 +23886,7 @@ function InspectorCommentRow({
23937
23886
  onSelectElement,
23938
23887
  depth = 0
23939
23888
  }) {
23940
- const { t } = chunkP2COO2QO_js.useTranslation();
23889
+ const { t } = chunk6GFSF2ML_js.useTranslation();
23941
23890
  const isEditing = editingCommentId === comment.id;
23942
23891
  const isReplying = replyingToCommentId === comment.id;
23943
23892
  const replyDraft = replyDraftByCommentId[comment.id] ?? "";
@@ -23947,7 +23896,7 @@ function InspectorCommentRow({
23947
23896
  return /* @__PURE__ */ jsxRuntime.jsxs(
23948
23897
  "div",
23949
23898
  {
23950
- className: chunkP2COO2QO_js.cn(
23899
+ className: chunk6GFSF2ML_js.cn(
23951
23900
  "rounded border border-border bg-card p-2",
23952
23901
  depth > 0 && "ml-3 border-l-2 border-l-primary/40"
23953
23902
  ),
@@ -23961,7 +23910,7 @@ function InspectorCommentRow({
23961
23910
  t("pptx.comments.resolved")
23962
23911
  ] })
23963
23912
  ] }),
23964
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunkP2COO2QO_js.formatCommentTimestamp(comment.createdAt) })
23913
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-muted-foreground flex-shrink-0", children: chunk6GFSF2ML_js.formatCommentTimestamp(comment.createdAt) })
23965
23914
  ] }),
23966
23915
  comment.elementId && (targetElement ? /* @__PURE__ */ jsxRuntime.jsxs(
23967
23916
  "button",
@@ -23969,12 +23918,12 @@ function InspectorCommentRow({
23969
23918
  type: "button",
23970
23919
  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",
23971
23920
  title: t("pptx.comments.commentingOn", {
23972
- element: chunkP2COO2QO_js.getElementLabel(targetElement)
23921
+ element: chunk6GFSF2ML_js.getElementLabel(targetElement)
23973
23922
  }),
23974
23923
  onClick: () => onSelectElement(targetElement.id),
23975
23924
  children: [
23976
23925
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
23977
- chunkP2COO2QO_js.getElementLabel(targetElement)
23926
+ chunk6GFSF2ML_js.getElementLabel(targetElement)
23978
23927
  ]
23979
23928
  }
23980
23929
  ) : /* @__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") })),
@@ -24043,7 +23992,7 @@ function InspectorCommentRow({
24043
23992
  "button",
24044
23993
  {
24045
23994
  type: "button",
24046
- className: chunkP2COO2QO_js.cn(
23995
+ className: chunk6GFSF2ML_js.cn(
24047
23996
  "inline-flex items-center justify-center p-1.5 border-l border-border transition-colors",
24048
23997
  comment.resolved ? "bg-green-900/40 text-green-300 hover:bg-green-900/60" : "hover:bg-accent text-foreground hover:text-foreground"
24049
23998
  ),
@@ -24149,7 +24098,7 @@ function InspectorCommentsSection({
24149
24098
  onSubmitReply,
24150
24099
  onSelectElement
24151
24100
  }) {
24152
- const { t } = chunkP2COO2QO_js.useTranslation();
24101
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24153
24102
  const HEADING_CLS = "text-[11px] uppercase tracking-wide text-muted-foreground";
24154
24103
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
24155
24104
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
@@ -24186,7 +24135,7 @@ function InspectorCommentsSection({
24186
24135
  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: [
24187
24136
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuType, { className: "h-2.5 w-2.5" }),
24188
24137
  t("pptx.comments.commentingOn", {
24189
- element: chunkP2COO2QO_js.getElementLabel(selectedElement)
24138
+ element: chunk6GFSF2ML_js.getElementLabel(selectedElement)
24190
24139
  })
24191
24140
  ] }),
24192
24141
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -24197,7 +24146,7 @@ function InspectorCommentsSection({
24197
24146
  authors: commentAuthors,
24198
24147
  rows: 2,
24199
24148
  placeholder: selectedElement ? t("pptx.comments.addOnElement", {
24200
- element: chunkP2COO2QO_js.getElementLabel(selectedElement)
24149
+ element: chunk6GFSF2ML_js.getElementLabel(selectedElement)
24201
24150
  }) : t("pptx.comments.addPlaceholder"),
24202
24151
  className: "w-full bg-muted border border-border rounded px-2 py-1 text-xs resize-y outline-none focus:border-primary",
24203
24152
  onChange: onSetCommentDraft,
@@ -24210,7 +24159,7 @@ function InspectorCommentsSection({
24210
24159
  type: "button",
24211
24160
  onClick: onAddComment,
24212
24161
  disabled: !commentDraft.trim(),
24213
- className: chunkP2COO2QO_js.cn(
24162
+ className: chunk6GFSF2ML_js.cn(
24214
24163
  "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]!",
24215
24164
  commentDraft.trim() ? "bg-primary hover:bg-primary/80 text-white" : "bg-muted text-muted-foreground cursor-not-allowed"
24216
24165
  ),
@@ -24235,7 +24184,7 @@ function InspectorElementsTab({
24235
24184
  onSelectElement,
24236
24185
  onUpdateSlide
24237
24186
  }) {
24238
- const { t } = chunkP2COO2QO_js.useTranslation();
24187
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24239
24188
  const toggleHidden = (elementId2) => {
24240
24189
  const elements2 = activeSlide?.elements;
24241
24190
  if (!canEdit || !elements2) {
@@ -24251,13 +24200,13 @@ function InspectorElementsTab({
24251
24200
  };
24252
24201
  if (!activeSlide) {
24253
24202
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
24254
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkP2COO2QO_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24203
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk6GFSF2ML_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24255
24204
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground italic", children: t("pptx.inspector.noSlideSelected") })
24256
24205
  ] });
24257
24206
  }
24258
24207
  const elements = activeSlide.elements || [];
24259
24208
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", "data-pptx-elements-tab": true, children: [
24260
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkP2COO2QO_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24209
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk6GFSF2ML_js.cn(HEADING2, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24261
24210
  [...elements].reverse().map((el, reversedIndex) => {
24262
24211
  const index = elements.length - 1 - reversedIndex;
24263
24212
  const selected = selectedElementId === el.id || selectedElementIds.includes(el.id);
@@ -24265,7 +24214,7 @@ function InspectorElementsTab({
24265
24214
  "div",
24266
24215
  {
24267
24216
  title: `${el.type} - ${el.id}`,
24268
- className: chunkP2COO2QO_js.cn(
24217
+ className: chunk6GFSF2ML_js.cn(
24269
24218
  "flex items-center gap-2 px-2 py-1 rounded cursor-pointer transition-colors",
24270
24219
  selected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground"
24271
24220
  ),
@@ -24301,8 +24250,8 @@ function InspectorPaneHeader({
24301
24250
  onSetActiveTab,
24302
24251
  onClose
24303
24252
  }) {
24304
- const { t } = chunkP2COO2QO_js.useTranslation();
24305
- const { viewportWidth } = chunkXG4WSJ4O_js.useIsMobile();
24253
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24254
+ const { viewportWidth } = chunk3AZ6ESJU_js.useIsMobile();
24306
24255
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
24307
24256
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
24308
24257
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -24325,7 +24274,7 @@ function InspectorPaneHeader({
24325
24274
  type: "button",
24326
24275
  title: t(labelKey),
24327
24276
  style: touchBtnStyle,
24328
- className: chunkP2COO2QO_js.cn(
24277
+ className: chunk6GFSF2ML_js.cn(
24329
24278
  "flex items-center justify-center gap-1 px-2 py-1 rounded text-[11px] transition-colors",
24330
24279
  activeTab === key ? "bg-primary text-white" : "text-muted-foreground hover:text-foreground hover:bg-accent"
24331
24280
  ),
@@ -24385,7 +24334,7 @@ function CustomPropertiesBlock({
24385
24334
  canEdit,
24386
24335
  onUpdate
24387
24336
  }) {
24388
- const { t } = chunkP2COO2QO_js.useTranslation();
24337
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24389
24338
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
24390
24339
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
24391
24340
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: t("pptx.documentProperties.custom.heading") }),
@@ -24439,7 +24388,7 @@ function CustomPropertiesBlock({
24439
24388
  "button",
24440
24389
  {
24441
24390
  type: "button",
24442
- className: chunkP2COO2QO_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24391
+ className: chunk6GFSF2ML_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
24443
24392
  onClick: () => onUpdate(customProperties.filter((_, i) => i !== index)),
24444
24393
  children: "\xD7"
24445
24394
  }
@@ -24452,7 +24401,7 @@ function NotesHandoutCard({
24452
24401
  notesMaster,
24453
24402
  handoutMaster
24454
24403
  }) {
24455
- const { t } = chunkP2COO2QO_js.useTranslation();
24404
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24456
24405
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24457
24406
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.notesHandoutHeading") }),
24458
24407
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 text-[11px] text-muted-foreground", children: [
@@ -24489,7 +24438,7 @@ function DocumentPropertiesCard({
24489
24438
  onUpdateAppProperties,
24490
24439
  onUpdateCustomProperties
24491
24440
  }) {
24492
- const { t } = chunkP2COO2QO_js.useTranslation();
24441
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24493
24442
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24494
24443
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.documentHeading") }),
24495
24444
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px] text-muted-foreground", children: [
@@ -24543,7 +24492,7 @@ function DocumentPropertiesCard({
24543
24492
  function SlideSizeRescalePrompt({
24544
24493
  onChoose
24545
24494
  }) {
24546
- const { t } = chunkP2COO2QO_js.useTranslation();
24495
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24547
24496
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5 rounded border border-border bg-muted/40 p-2 text-[11px]", children: [
24548
24497
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium", children: t("pptx.slideSize.rescaleTitle") }),
24549
24498
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground", children: t("pptx.slideSize.rescaleDescription") }),
@@ -24585,7 +24534,7 @@ function SlideSizeCard({
24585
24534
  onUpdateSlideSize,
24586
24535
  hasContent
24587
24536
  }) {
24588
- const { t } = chunkP2COO2QO_js.useTranslation();
24537
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24589
24538
  const selection = pptx.resolveSlideSizeSelection({ current: slideSizeEmu, canvas: canvasSize });
24590
24539
  const presetDisabled = !canEdit || !onUpdateSlideSize;
24591
24540
  const [pendingSize, setPendingSize] = React108.useState(null);
@@ -24696,7 +24645,7 @@ function PresentationSettingsCard({
24696
24645
  canEdit,
24697
24646
  onUpdate
24698
24647
  }) {
24699
- const { t } = chunkP2COO2QO_js.useTranslation();
24648
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24700
24649
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CARD2} pptx-editor-presentation-card`, children: [
24701
24650
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.slideInspector.presentation") }),
24702
24651
  /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "presentation-fields", className: "space-y-1.5 text-[11px]", children: [
@@ -24767,7 +24716,7 @@ function PresentationSettingsCard({
24767
24716
  min: 1,
24768
24717
  max: 16,
24769
24718
  disabled: !canEdit,
24770
- className: chunkP2COO2QO_js.cn(INPUT2, "w-20"),
24719
+ className: chunk6GFSF2ML_js.cn(INPUT2, "w-20"),
24771
24720
  value: pptx.printPropertiesSlidesPerPage(presentationProperties.printProperties),
24772
24721
  onChange: (e) => onUpdate({
24773
24722
  printProperties: pptx.withSlidesPerPage(
@@ -24788,7 +24737,7 @@ function ThemeSelectorCard({
24788
24737
  canEdit,
24789
24738
  onApplyTheme
24790
24739
  }) {
24791
- const { t } = chunkP2COO2QO_js.useTranslation();
24740
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24792
24741
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CARD2, children: [
24793
24742
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.documentProperties.themeHeading") }),
24794
24743
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 text-[11px]", children: [
@@ -24851,7 +24800,7 @@ function SlideThemeOverridePanel({
24851
24800
  canEdit,
24852
24801
  onUpdateSlide
24853
24802
  }) {
24854
- const { t } = chunkP2COO2QO_js.useTranslation();
24803
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24855
24804
  const translate = React108.useCallback((key) => t(key), [t]);
24856
24805
  const override = activeSlide?.clrMapOverride;
24857
24806
  const isOverrideActive = override !== void 0;
@@ -24958,7 +24907,7 @@ function DirectionPicker({
24958
24907
  disabled,
24959
24908
  onChange
24960
24909
  }) {
24961
- const { t } = chunkP2COO2QO_js.useTranslation();
24910
+ const { t } = chunk6GFSF2ML_js.useTranslation();
24962
24911
  if (directions.length <= 3) {
24963
24912
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-1", children: directions.map((dir) => /* @__PURE__ */ jsxRuntime.jsx(
24964
24913
  "button",
@@ -25000,10 +24949,10 @@ function TransitionPreview({
25000
24949
  const previewRef = React108.useRef(null);
25001
24950
  const [playing, setPlaying] = React108.useState(false);
25002
24951
  const [animKey, setAnimKey] = React108.useState(0);
25003
- const { t } = chunkP2COO2QO_js.useTranslation();
24952
+ const { t } = chunk6GFSF2ML_js.useTranslation();
25004
24953
  const durationMs = transition.durationMs ?? 500;
25005
24954
  const animations = React108.useMemo(
25006
- () => chunkXG4WSJ4O_js.getSlideTransitionAnimations(
24955
+ () => chunk3AZ6ESJU_js.getSlideTransitionAnimations(
25007
24956
  transition.type,
25008
24957
  durationMs,
25009
24958
  transition.direction,
@@ -25072,7 +25021,7 @@ function TransitionPreview({
25072
25021
  ]
25073
25022
  }
25074
25023
  ),
25075
- /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunkXG4WSJ4O_js.SLIDE_TRANSITION_KEYFRAMES })
25024
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: chunk3AZ6ESJU_js.SLIDE_TRANSITION_KEYFRAMES })
25076
25025
  ] });
25077
25026
  }
25078
25027
  var DEFAULT_DURATION_MS = 320;
@@ -25084,7 +25033,7 @@ function SlideTransitionSection({
25084
25033
  canEdit = true,
25085
25034
  onTransitionChange
25086
25035
  }) {
25087
- const { t } = chunkP2COO2QO_js.useTranslation();
25036
+ const { t } = chunk6GFSF2ML_js.useTranslation();
25088
25037
  if (!activeSlide) {
25089
25038
  return null;
25090
25039
  }
@@ -25115,7 +25064,7 @@ function SlideTransitionSection({
25115
25064
  type: e.target.value
25116
25065
  }),
25117
25066
  className: "bg-muted border border-border rounded px-2 py-1 max-md:min-h-[44px]!",
25118
- children: chunkP2COO2QO_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25067
+ children: chunk6GFSF2ML_js.SLIDE_TRANSITION_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: t(option.i18nKey) }, option.value))
25119
25068
  }
25120
25069
  )
25121
25070
  ] }),
@@ -25273,7 +25222,7 @@ function TagsSection({
25273
25222
  onUpdateTagCollections,
25274
25223
  canEdit
25275
25224
  }) {
25276
- const { t } = chunkP2COO2QO_js.useTranslation();
25225
+ const { t } = chunk6GFSF2ML_js.useTranslation();
25277
25226
  const [collapsed, setCollapsed] = React108.useState(true);
25278
25227
  const allTags = pptx.flattenTagCollections(tagCollections);
25279
25228
  const updateTag = (colIdx, tagIdx, field, newValue) => {
@@ -25331,7 +25280,7 @@ function TagsSection({
25331
25280
  "button",
25332
25281
  {
25333
25282
  type: "button",
25334
- className: chunkP2COO2QO_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25283
+ className: chunk6GFSF2ML_js.cn(BTN2, "px-1.5 text-red-400 hover:text-red-300"),
25335
25284
  title: t("pptx.tags.deleteTag"),
25336
25285
  onClick: () => deleteTag(tag.colIdx, tag.tagIdx),
25337
25286
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuTrash2, { className: "w-3 h-3" })
@@ -25373,7 +25322,7 @@ function PresentationPropertiesPanel({
25373
25322
  tagCollections,
25374
25323
  onUpdateTagCollections
25375
25324
  }) {
25376
- const { t } = chunkP2COO2QO_js.useTranslation();
25325
+ const { t } = chunk6GFSF2ML_js.useTranslation();
25377
25326
  const handleTransitionChange = React108__default.default.useCallback(
25378
25327
  (updates) => {
25379
25328
  onUpdateSlide({
@@ -25460,7 +25409,7 @@ function PresentationPropertiesPanel({
25460
25409
  canEdit
25461
25410
  }
25462
25411
  ) }),
25463
- activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-inspector-card": "slide", className: chunkP2COO2QO_js.cn(CARD2, "space-y-1"), children: [
25412
+ activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-inspector-card": "slide", className: chunk6GFSF2ML_js.cn(CARD2, "space-y-1"), children: [
25464
25413
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: "Slide" }),
25465
25414
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[11px] text-muted-foreground", children: [
25466
25415
  activeSlide.elements?.length ?? 0,
@@ -25478,17 +25427,17 @@ function SlideBackgroundPanel({
25478
25427
  onSetTemplateBackground,
25479
25428
  onGetTemplateBackgroundColor
25480
25429
  }) {
25481
- const { t } = chunkP2COO2QO_js.useTranslation();
25430
+ const { t } = chunk6GFSF2ML_js.useTranslation();
25482
25431
  const bgImageInputRef = React108.useRef(null);
25483
25432
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
25484
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkP2COO2QO_js.cn(CARD2, "space-y-2"), children: [
25433
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk6GFSF2ML_js.cn(CARD2, "space-y-2"), children: [
25485
25434
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.viewer.background") }),
25486
25435
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
25487
25436
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-10 shrink-0", children: t("pptx.slideBackground.colour") }),
25488
25437
  /* @__PURE__ */ jsxRuntime.jsx(
25489
25438
  DebouncedColorInput,
25490
25439
  {
25491
- value: chunkP2COO2QO_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
25440
+ value: chunk6GFSF2ML_js.normalizeHexColor(activeSlide.backgroundColor, "#ffffff"),
25492
25441
  disabled: !canEdit,
25493
25442
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25494
25443
  onCommit: (hex) => onUpdateSlide({ backgroundColor: hex })
@@ -25527,7 +25476,7 @@ function SlideBackgroundPanel({
25527
25476
  "button",
25528
25477
  {
25529
25478
  type: "button",
25530
- className: chunkP2COO2QO_js.cn(BTN2, "flex-1 text-center"),
25479
+ className: chunk6GFSF2ML_js.cn(BTN2, "flex-1 text-center"),
25531
25480
  disabled: !canEdit,
25532
25481
  onClick: () => bgImageInputRef.current?.click(),
25533
25482
  children: activeSlide.backgroundImage ? t("pptx.slideBackground.replaceImage") : t("pptx.slideBackground.chooseImage")
@@ -25560,7 +25509,7 @@ function SlideBackgroundPanel({
25560
25509
  "button",
25561
25510
  {
25562
25511
  type: "button",
25563
- className: chunkP2COO2QO_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
25512
+ className: chunk6GFSF2ML_js.cn(BTN2, "w-full text-center text-red-400 hover:text-red-300"),
25564
25513
  disabled: !pptx.slideBackgroundClearState(activeSlide, canEdit).enabled,
25565
25514
  onClick: () => onUpdateSlide(pptx.slideBackgroundClearPatch()),
25566
25515
  children: t("pptx.slideBackground.clearBackground")
@@ -25597,21 +25546,21 @@ function TemplateBackgroundCard({
25597
25546
  onSetTemplateBackground,
25598
25547
  onGetTemplateBackgroundColor
25599
25548
  }) {
25600
- const { t } = chunkP2COO2QO_js.useTranslation();
25549
+ const { t } = chunk6GFSF2ML_js.useTranslation();
25601
25550
  const rows = pptx.resolveTemplateBackgroundRows(
25602
25551
  activeSlide,
25603
25552
  slideMasters,
25604
25553
  t("pptx.master.layout"),
25605
25554
  t("pptx.master.master")
25606
25555
  );
25607
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkP2COO2QO_js.cn(CARD2, "space-y-2"), children: [
25556
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk6GFSF2ML_js.cn(CARD2, "space-y-2"), children: [
25608
25557
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING2, children: t("pptx.slideBackground.templateBackgroundsHeading") }),
25609
25558
  rows.layout && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
25610
25559
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-14 shrink-0 truncate", title: rows.layout.title, children: t("pptx.master.layout") }),
25611
25560
  /* @__PURE__ */ jsxRuntime.jsx(
25612
25561
  DebouncedColorInput,
25613
25562
  {
25614
- value: chunkP2COO2QO_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
25563
+ value: chunk6GFSF2ML_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.layout.path), "#ffffff"),
25615
25564
  disabled: !canEdit,
25616
25565
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25617
25566
  onCommit: (hex) => onSetTemplateBackground(rows.layout.path, hex)
@@ -25624,7 +25573,7 @@ function TemplateBackgroundCard({
25624
25573
  /* @__PURE__ */ jsxRuntime.jsx(
25625
25574
  DebouncedColorInput,
25626
25575
  {
25627
- value: chunkP2COO2QO_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
25576
+ value: chunk6GFSF2ML_js.normalizeHexColor(onGetTemplateBackgroundColor(rows.master.path), "#ffffff"),
25628
25577
  disabled: !canEdit,
25629
25578
  className: "h-6 w-8 rounded border border-border bg-muted cursor-pointer",
25630
25579
  onCommit: (hex) => onSetTemplateBackground(rows.master.path, hex)
@@ -25734,8 +25683,8 @@ function InspectorPane(props) {
25734
25683
  panelWidth
25735
25684
  } = props;
25736
25685
  const hasSelection = selectedElement !== null;
25737
- const { t } = chunkP2COO2QO_js.useTranslation();
25738
- const { dragY, handlers: dragHandlers } = chunkXG4WSJ4O_js.useSheetDismissDrag(onClose);
25686
+ const { t } = chunk6GFSF2ML_js.useTranslation();
25687
+ const { dragY, handlers: dragHandlers } = chunk3AZ6ESJU_js.useSheetDismissDrag(onClose);
25739
25688
  const {
25740
25689
  animationPanelHeight,
25741
25690
  effectiveThemeOptions,
@@ -25757,7 +25706,7 @@ function InspectorPane(props) {
25757
25706
  "div",
25758
25707
  {
25759
25708
  "data-pptx-chrome": "inspector",
25760
- className: chunkP2COO2QO_js.cn(
25709
+ className: chunk6GFSF2ML_js.cn(
25761
25710
  // Shared styles
25762
25711
  "bg-background flex flex-col text-xs text-foreground shadow-xl",
25763
25712
  // Mobile: absolute bottom sheet overlay sized via dvh so it
@@ -26088,7 +26037,7 @@ function PresentationAnnotationOverlay({
26088
26037
  );
26089
26038
  }
26090
26039
  function PresentationToolbar(p) {
26091
- const { t } = chunkP2COO2QO_js.useTranslation();
26040
+ const { t } = chunk6GFSF2ML_js.useTranslation();
26092
26041
  const ref = useWebControl(
26093
26042
  {
26094
26043
  current: p.currentSlideIndex,
@@ -26147,8 +26096,8 @@ function PresentationTouchControls({
26147
26096
  onEndPresentation,
26148
26097
  hideNavigation = false
26149
26098
  }) {
26150
- const { t } = chunkP2COO2QO_js.useTranslation();
26151
- const { isTouchDevice } = chunkXG4WSJ4O_js.useIsMobile();
26099
+ const { t } = chunk6GFSF2ML_js.useTranslation();
26100
+ const { isTouchDevice } = chunk3AZ6ESJU_js.useIsMobile();
26152
26101
  if (!isTouchDevice) {
26153
26102
  return null;
26154
26103
  }
@@ -26230,7 +26179,7 @@ function KeepAnnotationsDialog({
26230
26179
  onKeep,
26231
26180
  onDiscard
26232
26181
  }) {
26233
- const { t } = chunkP2COO2QO_js.useTranslation();
26182
+ const { t } = chunk6GFSF2ML_js.useTranslation();
26234
26183
  if (!isOpen) {
26235
26184
  return null;
26236
26185
  }
@@ -26278,7 +26227,7 @@ function PasteSpecialDialog({
26278
26227
  onCancel,
26279
26228
  onConfirm
26280
26229
  }) {
26281
- const { t } = chunkP2COO2QO_js.useTranslation();
26230
+ const { t } = chunk6GFSF2ML_js.useTranslation();
26282
26231
  const [selected, setSelected] = React108.useState("keep-source-formatting");
26283
26232
  if (!isOpen) {
26284
26233
  return null;
@@ -26336,7 +26285,7 @@ function PasteOptionsToolbar({
26336
26285
  onChoose,
26337
26286
  onDismiss
26338
26287
  }) {
26339
- const { t } = chunkP2COO2QO_js.useTranslation();
26288
+ const { t } = chunk6GFSF2ML_js.useTranslation();
26340
26289
  const [rect, setRect] = React108.useState(null);
26341
26290
  React108.useEffect(() => {
26342
26291
  const node = elementId2 ? pptx.findCanvasElementNode(document, elementId2, { canvasOnly: true }) : null;
@@ -26363,7 +26312,7 @@ function NotesPagePreview({
26363
26312
  frameSlides,
26364
26313
  maxPages = 3
26365
26314
  }) {
26366
- const { t } = chunkP2COO2QO_js.useTranslation();
26315
+ const { t } = chunk6GFSF2ML_js.useTranslation();
26367
26316
  const pages = React108.useMemo(() => pptx.computeAllNotesPages(slideIndices), [slideIndices]);
26368
26317
  const printable = React108.useMemo(() => pptx.getNotesPrintableArea(), []);
26369
26318
  const visiblePages = pages.slice(0, maxPages);
@@ -26451,15 +26400,15 @@ function PrintPreview({
26451
26400
  frameSlides,
26452
26401
  maxPages = 3
26453
26402
  }) {
26454
- const { t } = chunkP2COO2QO_js.useTranslation();
26403
+ const { t } = chunk6GFSF2ML_js.useTranslation();
26455
26404
  const pages = React108.useMemo(
26456
- () => chunkP2COO2QO_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26405
+ () => chunk6GFSF2ML_js.computeHandoutLayout(slideIndices, slidesPerPage, orientation),
26457
26406
  [slideIndices, slidesPerPage, orientation]
26458
26407
  );
26459
- const printable = React108.useMemo(() => chunkP2COO2QO_js.getPrintableArea(orientation), [orientation]);
26408
+ const printable = React108.useMemo(() => chunk6GFSF2ML_js.getPrintableArea(orientation), [orientation]);
26460
26409
  const visiblePages = pages.slice(0, maxPages);
26461
26410
  const isThreePerPage = slidesPerPage === 3;
26462
- const noteLineCount = chunkP2COO2QO_js.generateNoteLineCount();
26411
+ const noteLineCount = chunk6GFSF2ML_js.generateNoteLineCount();
26463
26412
  const scaledW = printable.width * PREVIEW_SCALE3;
26464
26413
  const scaledH = printable.height * PREVIEW_SCALE3;
26465
26414
  const noteAreaFraction = 0.5;
@@ -26557,7 +26506,7 @@ function PrintSettingsPanel({
26557
26506
  totalSlides,
26558
26507
  activeSlideIndex
26559
26508
  }) {
26560
- const { t } = chunkP2COO2QO_js.useTranslation();
26509
+ const { t } = chunk6GFSF2ML_js.useTranslation();
26561
26510
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 space-y-5 min-w-0", children: [
26562
26511
  /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { children: [
26563
26512
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-xs font-medium text-muted-foreground mb-2 uppercase tracking-wide", children: t("pptx.print.printWhat") }),
@@ -26793,13 +26742,13 @@ function PrintDialog({
26793
26742
  defaultSlidesPerPage,
26794
26743
  defaultFrameSlides
26795
26744
  }) {
26796
- const { t } = chunkP2COO2QO_js.useTranslation();
26745
+ const { t } = chunk6GFSF2ML_js.useTranslation();
26797
26746
  const regionRenderer = useRegionRenderer("dialog.print");
26798
- const { panelStyle, handlers: dragHandlers } = chunkXG4WSJ4O_js.useModalDismissDrag(onClose);
26799
- const { viewportWidth } = chunkXG4WSJ4O_js.useIsMobile();
26747
+ const { panelStyle, handlers: dragHandlers } = chunk3AZ6ESJU_js.useModalDismissDrag(onClose);
26748
+ const { viewportWidth } = chunk3AZ6ESJU_js.useIsMobile();
26800
26749
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
26801
26750
  const closeBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
26802
- const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunkXG4WSJ4O_js.useViewerOptionsContext());
26751
+ const printOptionDefaults = pptx.resolveDefaultPrintSettings(chunk3AZ6ESJU_js.useViewerOptionsContext());
26803
26752
  const [printWhat, setPrintWhat] = React108.useState(printOptionDefaults?.printWhat ?? "slides");
26804
26753
  const [orientation, setOrientation] = React108.useState("landscape");
26805
26754
  const [colorMode, setColorMode] = React108.useState(
@@ -26983,7 +26932,7 @@ function ShowOptionsFieldset({
26983
26932
  draft,
26984
26933
  update
26985
26934
  }) {
26986
- const { t } = chunkP2COO2QO_js.useTranslation();
26935
+ const { t } = chunk6GFSF2ML_js.useTranslation();
26987
26936
  return /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "space-y-1.5", children: [
26988
26937
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-[11px] font-medium text-muted-foreground uppercase tracking-wide mb-1", children: t("pptx.slideShow.showOptions") }),
26989
26938
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
@@ -27041,7 +26990,7 @@ function ShowSlidesFieldset({
27041
26990
  slideCount,
27042
26991
  customShows
27043
26992
  }) {
27044
- const { t } = chunkP2COO2QO_js.useTranslation();
26993
+ const { t } = chunk6GFSF2ML_js.useTranslation();
27045
26994
  return /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "space-y-1.5", children: [
27046
26995
  /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "text-[11px] font-medium text-muted-foreground uppercase tracking-wide mb-1", children: t("pptx.slideShow.showSlides") }),
27047
26996
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [
@@ -27151,7 +27100,7 @@ function SetUpSlideShowDialog({
27151
27100
  customShows,
27152
27101
  slideCount
27153
27102
  }) {
27154
- const { t } = chunkP2COO2QO_js.useTranslation();
27103
+ const { t } = chunk6GFSF2ML_js.useTranslation();
27155
27104
  const [draft, setDraft] = React108.useState({
27156
27105
  ...properties
27157
27106
  });
@@ -27287,16 +27236,16 @@ function BroadcastDialog({
27287
27236
  defaultUserName,
27288
27237
  defaultServerUrl
27289
27238
  }) {
27290
- const { t } = chunkP2COO2QO_js.useTranslation();
27239
+ const { t } = chunk6GFSF2ML_js.useTranslation();
27291
27240
  const regionRenderer = useRegionRenderer("dialog.broadcast");
27292
- const collab = chunkXG4WSJ4O_js.useCollaboration();
27241
+ const collab = chunk3AZ6ESJU_js.useCollaboration();
27293
27242
  const isBroadcasting = collab !== null && collab.status !== "disconnected" && collab.status !== "error" && collab.config.role === "owner";
27294
27243
  const [roomId, setRoomId] = React108.useState("");
27295
27244
  const [userName, setUserName] = React108.useState("");
27296
27245
  const [serverUrl, setServerUrl] = React108.useState("");
27297
27246
  const [copied, setCopied] = React108.useState(false);
27298
27247
  const dialogRef = React108.useRef(null);
27299
- const { panelStyle, handlers: dragHandlers } = chunkXG4WSJ4O_js.useModalDismissDrag(onClose);
27248
+ const { panelStyle, handlers: dragHandlers } = chunk3AZ6ESJU_js.useModalDismissDrag(onClose);
27300
27249
  useModalFocus(open, dialogRef, onClose);
27301
27250
  React108.useEffect(() => {
27302
27251
  if (open && !isBroadcasting) {
@@ -27455,7 +27404,7 @@ function StartBroadcastForm({
27455
27404
  onUserNameChange,
27456
27405
  onServerUrlChange
27457
27406
  }) {
27458
- const { t } = chunkP2COO2QO_js.useTranslation();
27407
+ const { t } = chunk6GFSF2ML_js.useTranslation();
27459
27408
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
27460
27409
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] text-muted-foreground leading-relaxed", children: t("pptx.broadcast.description") }),
27461
27410
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
@@ -27531,7 +27480,7 @@ function ActiveBroadcastView({
27531
27480
  onCopyUrl,
27532
27481
  onStopBroadcast
27533
27482
  }) {
27534
- const { t } = chunkP2COO2QO_js.useTranslation();
27483
+ const { t } = chunk6GFSF2ML_js.useTranslation();
27535
27484
  const statusColor = collab.status === "connected" ? "text-green-400" : collab.status === "connecting" ? "text-yellow-400" : "text-red-400";
27536
27485
  const statusIcon = collab.status === "connected" || collab.status === "connecting" ? /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifi, { className: "w-4 h-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lu.LuWifiOff, { className: "w-4 h-4" });
27537
27486
  const viewerCount = collab.remoteUsers.filter((u) => u.role === "viewer").length;
@@ -27612,7 +27561,7 @@ function ActiveSessionView({
27612
27561
  onCopyRoomId,
27613
27562
  onStopCollaboration
27614
27563
  }) {
27615
- const { t } = chunkP2COO2QO_js.useTranslation(), viewerOptions = chunkXG4WSJ4O_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({
27564
+ const { t } = chunk6GFSF2ML_js.useTranslation(), viewerOptions = chunk3AZ6ESJU_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({
27616
27565
  localUserName: activeCollaboration?.userName ?? collab.config.userName,
27617
27566
  localUserInitials: viewerOptions.general.userInitials,
27618
27567
  localUserColor: collab.config.userColor,
@@ -27710,8 +27659,8 @@ function StartSessionForm({
27710
27659
  connectionFailed,
27711
27660
  onRetry
27712
27661
  }) {
27713
- const { t } = chunkP2COO2QO_js.useTranslation();
27714
- const { viewportWidth } = chunkXG4WSJ4O_js.useIsMobile();
27662
+ const { t } = chunk6GFSF2ML_js.useTranslation();
27663
+ const { viewportWidth } = chunk3AZ6ESJU_js.useIsMobile();
27715
27664
  const tabBtnStyle = { minHeight: pptx.getDensePanelTouchTargetPx(viewportWidth) };
27716
27665
  const inputReadOnlyClass = preconfigured ? " opacity-70 cursor-not-allowed" : "";
27717
27666
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
@@ -27845,9 +27794,9 @@ function ShareDialog({
27845
27794
  defaultUserName,
27846
27795
  defaultServerUrl
27847
27796
  }) {
27848
- const collab = chunkXG4WSJ4O_js.useCollaboration();
27797
+ const collab = chunk3AZ6ESJU_js.useCollaboration();
27849
27798
  const isActive = collab !== null && collab.status !== "disconnected" && collab.status !== "error";
27850
- const { t } = chunkP2COO2QO_js.useTranslation();
27799
+ const { t } = chunk6GFSF2ML_js.useTranslation();
27851
27800
  const regionRenderer = useRegionRenderer("dialog.share");
27852
27801
  const [roomId, setRoomId] = React108.useState(defaultRoomId ?? "");
27853
27802
  const [userName, setUserName] = React108.useState(defaultUserName ?? "");
@@ -27856,9 +27805,9 @@ function ShareDialog({
27856
27805
  const [invitation, setInvitation] = React108.useState("");
27857
27806
  const [copied, setCopied] = React108.useState(false);
27858
27807
  const dialogRef = React108.useRef(null);
27859
- const { panelStyle, handlers: dragHandlers } = chunkXG4WSJ4O_js.useModalDismissDrag(onClose);
27808
+ const { panelStyle, handlers: dragHandlers } = chunk3AZ6ESJU_js.useModalDismissDrag(onClose);
27860
27809
  useModalFocus(open, dialogRef, onClose);
27861
- const { viewportWidth, viewportHeight } = chunkXG4WSJ4O_js.useIsMobile();
27810
+ const { viewportWidth, viewportHeight } = chunk3AZ6ESJU_js.useIsMobile();
27862
27811
  const touchTargetPx = pptx.getDensePanelTouchTargetPx(viewportWidth);
27863
27812
  const touchBtnStyle = { minWidth: touchTargetPx, minHeight: touchTargetPx };
27864
27813
  const stickyFooterClass = pptx.shouldStickyActionRow(viewportWidth, viewportHeight) ? "sticky bottom-0 bg-popover" : "";
@@ -28031,7 +27980,7 @@ function HyperlinkTabContent({
28031
27980
  inputCls,
28032
27981
  onEnterConfirm
28033
27982
  }) {
28034
- const { t } = chunkP2COO2QO_js.useTranslation();
27983
+ const { t } = chunk6GFSF2ML_js.useTranslation();
28035
27984
  const handleEnterKey = (e) => {
28036
27985
  if (e.key === "Enter") {
28037
27986
  onEnterConfirm();
@@ -28156,13 +28105,13 @@ function HyperlinkEditDialog({
28156
28105
  onConfirm,
28157
28106
  onCancel
28158
28107
  }) {
28159
- const { t } = chunkP2COO2QO_js.useTranslation();
28160
- const { panelStyle, handlers: dragHandlers } = chunkXG4WSJ4O_js.useModalDismissDrag(onCancel);
28108
+ const { t } = chunk6GFSF2ML_js.useTranslation();
28109
+ const { panelStyle, handlers: dragHandlers } = chunk3AZ6ESJU_js.useModalDismissDrag(onCancel);
28161
28110
  const inputRef = React108.useRef(null);
28162
- const detectedType = chunkXG4WSJ4O_js.detectTargetType(initialUrl, initialAction);
28163
- const emailParts = chunkXG4WSJ4O_js.parseEmailUrl(initialUrl || "");
28164
- const detectedSlide = chunkXG4WSJ4O_js.parseSlideFromUrl(initialUrl, initialAction);
28165
- const detectedVerb = initialAction ? chunkXG4WSJ4O_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28111
+ const detectedType = chunk3AZ6ESJU_js.detectTargetType(initialUrl, initialAction);
28112
+ const emailParts = chunk3AZ6ESJU_js.parseEmailUrl(initialUrl || "");
28113
+ const detectedSlide = chunk3AZ6ESJU_js.parseSlideFromUrl(initialUrl, initialAction);
28114
+ const detectedVerb = initialAction ? chunk3AZ6ESJU_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
28166
28115
  const [targetType, setTargetType] = React108.useState(detectedType);
28167
28116
  const [url, setUrl] = React108.useState(
28168
28117
  detectedType === "email" || detectedType === "slide" || detectedType === "action" ? "" : initialUrl || ""
@@ -28193,7 +28142,7 @@ function HyperlinkEditDialog({
28193
28142
  actionVerb
28194
28143
  });
28195
28144
  };
28196
- const tabCls = (active) => chunkP2COO2QO_js.cn(
28145
+ const tabCls = (active) => chunk6GFSF2ML_js.cn(
28197
28146
  "px-3 py-1.5 text-xs rounded-t border-b-2 transition-colors",
28198
28147
  active ? "border-primary text-primary font-medium" : "border-transparent text-muted-foreground hover:text-foreground hover:border-border"
28199
28148
  );
@@ -28441,7 +28390,7 @@ function ViewerBottomPanels({
28441
28390
  notesStyle,
28442
28391
  onNotesHeightChange
28443
28392
  }) {
28444
- const { isHidden } = chunkXG4WSJ4O_js.useToolbarVisibility(hiddenActions);
28393
+ const { isHidden } = chunk3AZ6ESJU_js.useToolbarVisibility(hiddenActions);
28445
28394
  const customization = useViewerCustomizationContext();
28446
28395
  const showNotes = pptx.isPanelVisible(customization, "notes");
28447
28396
  const notesRenderer = useRegionRenderer("notes");
@@ -28572,7 +28521,7 @@ function ViewerInspector({
28572
28521
  onPreviewElement,
28573
28522
  elementById
28574
28523
  }) {
28575
- const { t } = chunkP2COO2QO_js.useTranslation();
28524
+ const { t } = chunk6GFSF2ML_js.useTranslation();
28576
28525
  const regionRenderer = useRegionRenderer("inspector");
28577
28526
  const liveEdit = onPreviewElement ? {
28578
28527
  element: selectedElement,
@@ -28787,7 +28736,7 @@ function ViewerToolbarSection(props) {
28787
28736
  onSetSnapToShape,
28788
28737
  onSetShowGuides
28789
28738
  } = props;
28790
- const { t } = chunkP2COO2QO_js.useTranslation();
28739
+ const { t } = chunk6GFSF2ML_js.useTranslation();
28791
28740
  const customization = useViewerCustomizationContext();
28792
28741
  const handleAddAnimation = React108.useCallback(
28793
28742
  (preset, group) => {
@@ -28840,7 +28789,7 @@ function ViewerToolbarSection(props) {
28840
28789
  [activeSlide, propertyHandlers]
28841
28790
  );
28842
28791
  const scopedLayoutOptions = React108__default.default.useMemo(
28843
- () => chunkXG4WSJ4O_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
28792
+ () => chunk3AZ6ESJU_js.scopeLayoutOptionsToActiveSlide(s.layoutOptions, activeSlide),
28844
28793
  [s.layoutOptions, activeSlide]
28845
28794
  );
28846
28795
  const handleResetSlide = React108.useCallback(() => {
@@ -29247,14 +29196,14 @@ function ViewerToolbarSection(props) {
29247
29196
  isMobileInsertOpen: s.isMobileInsertOpen,
29248
29197
  onCloseMobileInsert: () => s.setIsMobileInsertOpen(false),
29249
29198
  slideCommentCount: activeSlide?.comments?.length ?? 0,
29250
- reviewComments: chunkXG4WSJ4O_js.createReviewCommentsHost({
29199
+ reviewComments: chunk3AZ6ESJU_js.createReviewCommentsHost({
29251
29200
  state: s,
29252
29201
  activeSlideIndex,
29253
29202
  updateSlides: ops.updateSlides,
29254
29203
  markDirty: history.markDirty
29255
29204
  }),
29256
29205
  formatPainterActive: s.formatPainterActive,
29257
- canActivateFormatPainter: chunkP2COO2QO_js.hasCopyableFormat(selectedElement),
29206
+ canActivateFormatPainter: chunk6GFSF2ML_js.hasCopyableFormat(selectedElement),
29258
29207
  onToggleFormatPainter: onToggleFormatPainterProp ?? (() => s.setFormatPainterActive((p) => !p)),
29259
29208
  isSelectionPaneOpen: s.isSelectionPaneOpen,
29260
29209
  onToggleSelectionPane: () => s.setIsSelectionPaneOpen((p) => !p),
@@ -29363,14 +29312,14 @@ function CustomShowsDialog({
29363
29312
  onRun,
29364
29313
  onClose
29365
29314
  }) {
29366
- const { t } = chunkP2COO2QO_js.useTranslation();
29315
+ const { t } = chunk6GFSF2ML_js.useTranslation();
29367
29316
  const controller = React108.useMemo(
29368
29317
  () => pptx.createCustomShowsController(customShows, activeCustomShowId),
29369
29318
  // A fresh draft per open: the host mounts this only while the dialog is open.
29370
29319
  // eslint-disable-next-line react-hooks/exhaustive-deps
29371
29320
  []
29372
29321
  );
29373
- chunkXG4WSJ4O_js.useController(controller);
29322
+ chunk3AZ6ESJU_js.useController(controller);
29374
29323
  const view = controller.view(slides);
29375
29324
  const [active, setActive] = React108.useState(activeCustomShowId ?? "");
29376
29325
  const pickerValue = view.shows.some(({ id }) => id === active) ? active : "";
@@ -29649,8 +29598,8 @@ function EquationEditorDialog({
29649
29598
  onInsert,
29650
29599
  existingOmml
29651
29600
  }) {
29652
- const { t } = chunkP2COO2QO_js.useTranslation();
29653
- const { panelStyle, handlers: dragHandlers } = chunkXG4WSJ4O_js.useModalDismissDrag(onClose);
29601
+ const { t } = chunk6GFSF2ML_js.useTranslation();
29602
+ const { panelStyle, handlers: dragHandlers } = chunk3AZ6ESJU_js.useModalDismissDrag(onClose);
29654
29603
  const initialLatex = React108.useMemo(() => {
29655
29604
  if (!existingOmml) {
29656
29605
  return "";
@@ -29772,7 +29721,7 @@ function EquationEditorDialog({
29772
29721
  {
29773
29722
  type: "button",
29774
29723
  onClick: () => handleTemplateClick(tmpl.latex),
29775
- className: chunkP2COO2QO_js.cn(
29724
+ className: chunk6GFSF2ML_js.cn(
29776
29725
  "flex flex-col items-center gap-1 p-2 rounded-lg border transition-colors",
29777
29726
  latex === tmpl.latex ? "border-primary bg-primary/10" : "border-border bg-muted/40 hover:bg-accent/60 hover:border-border"
29778
29727
  ),
@@ -29837,7 +29786,7 @@ function InsertSmartArtDialog({
29837
29786
  onInsert
29838
29787
  }) {
29839
29788
  const ref = React108.useRef(null);
29840
- const { t } = chunkP2COO2QO_js.useTranslation();
29789
+ const { t } = chunk6GFSF2ML_js.useTranslation();
29841
29790
  React108.useLayoutEffect(() => {
29842
29791
  if (ref.current) {
29843
29792
  ref.current.translateLabel = t;
@@ -29861,7 +29810,7 @@ function InsertChartDialog({
29861
29810
  onInsert
29862
29811
  }) {
29863
29812
  const ref = React108.useRef(null);
29864
- const { t } = chunkP2COO2QO_js.useTranslation();
29813
+ const { t } = chunk6GFSF2ML_js.useTranslation();
29865
29814
  React108.useLayoutEffect(() => {
29866
29815
  if (ref.current) {
29867
29816
  ref.current.translateLabel = t;
@@ -30368,11 +30317,11 @@ function PresentationStage({
30368
30317
  })
30369
30318
  },
30370
30319
  children: [
30371
- /* @__PURE__ */ jsxRuntime.jsx(chunkXG4WSJ4O_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30320
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3AZ6ESJU_js.SlideBackgroundImageLayer, { slide: activeSlide }),
30372
30321
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: pptx.PRESENTATION_HIT_TEST_CSS }),
30373
30322
  presentationKeyframesCss && /* @__PURE__ */ jsxRuntime.jsx("style", { children: presentationKeyframesCss }),
30374
30323
  templateElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30375
- chunkXG4WSJ4O_js.ElementRenderer,
30324
+ chunk3AZ6ESJU_js.ElementRenderer,
30376
30325
  {
30377
30326
  element,
30378
30327
  activeSlide,
@@ -30410,7 +30359,7 @@ function PresentationStage({
30410
30359
  `tpl-${element.id}`
30411
30360
  )),
30412
30361
  activeSlide?.elements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
30413
- chunkXG4WSJ4O_js.ElementRenderer,
30362
+ chunk3AZ6ESJU_js.ElementRenderer,
30414
30363
  {
30415
30364
  element,
30416
30365
  activeSlide,
@@ -30463,7 +30412,7 @@ function PresentationStage({
30463
30412
  function noop() {
30464
30413
  }
30465
30414
  function PresentationContextMenu(p) {
30466
- const { t } = chunkP2COO2QO_js.useTranslation();
30415
+ const { t } = chunk6GFSF2ML_js.useTranslation();
30467
30416
  const sections = pptx.getPresentationContextMenuSections({
30468
30417
  seeAllSlides: Boolean(p.onSeeAllSlides),
30469
30418
  presenterView: Boolean(p.onShowPresenterView),
@@ -30522,7 +30471,7 @@ function PresentationTransitionMount({
30522
30471
  templateElementsBySlideId
30523
30472
  );
30524
30473
  return /* @__PURE__ */ jsxRuntime.jsx(
30525
- chunkXG4WSJ4O_js.PresentationTransitionOverlay,
30474
+ chunk3AZ6ESJU_js.PresentationTransitionOverlay,
30526
30475
  {
30527
30476
  outgoingSlide,
30528
30477
  templateElements: templates.outgoing,
@@ -30567,9 +30516,9 @@ function ViewerCanvasArea(props) {
30567
30516
  aiHighlightOverlay,
30568
30517
  aiCanvasActive = false
30569
30518
  } = props;
30570
- const { t } = chunkP2COO2QO_js.useTranslation();
30571
- const { isHidden } = chunkXG4WSJ4O_js.useToolbarVisibility(hiddenActions);
30572
- const viewerOptions = chunkXG4WSJ4O_js.useViewerOptionsContext();
30519
+ const { t } = chunk6GFSF2ML_js.useTranslation();
30520
+ const { isHidden } = chunk3AZ6ESJU_js.useToolbarVisibility(hiddenActions);
30521
+ const viewerOptions = chunk3AZ6ESJU_js.useViewerOptionsContext();
30573
30522
  const outlineAuthoring = useOutlineAuthoring({
30574
30523
  state: s,
30575
30524
  updateElement: canvasHandlers.handleUpdateSmartArtElement,
@@ -30615,9 +30564,9 @@ function ViewerCanvasArea(props) {
30615
30564
  );
30616
30565
  const handleHyperlinkClick = React108.useCallback(
30617
30566
  (url) => {
30618
- if (chunkP2COO2QO_js.isPpactionUrl(url)) {
30567
+ if (chunk6GFSF2ML_js.isPpactionUrl(url)) {
30619
30568
  if (mode === "present") {
30620
- const parsed = chunkP2COO2QO_js.parsePpactionUrl(url);
30569
+ const parsed = chunk6GFSF2ML_js.parsePpactionUrl(url);
30621
30570
  if (parsed) {
30622
30571
  const action = {
30623
30572
  action: parsed.action,
@@ -30702,7 +30651,7 @@ function ViewerCanvasArea(props) {
30702
30651
  s.setActiveSlideIndex((i) => Math.max(0, i - 1));
30703
30652
  }
30704
30653
  }, [mode, presentation, s]);
30705
- const swipe = chunkXG4WSJ4O_js.useSwipeNavigation({
30654
+ const swipe = chunk3AZ6ESJU_js.useSwipeNavigation({
30706
30655
  enabled: swipeEnabled,
30707
30656
  onNext: handleSwipeNext,
30708
30657
  onPrev: handleSwipePrev
@@ -30888,14 +30837,14 @@ function ViewerCanvasArea(props) {
30888
30837
  outlineAuthoring,
30889
30838
  collaborationOverlay: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30890
30839
  /* @__PURE__ */ jsxRuntime.jsx(
30891
- chunkXG4WSJ4O_js.RemoteSelectionOverlay,
30840
+ chunk3AZ6ESJU_js.RemoteSelectionOverlay,
30892
30841
  {
30893
30842
  elements: effectiveSlide?.elements ?? [],
30894
30843
  activeSlideIndex
30895
30844
  }
30896
30845
  ),
30897
30846
  /* @__PURE__ */ jsxRuntime.jsx(
30898
- chunkXG4WSJ4O_js.CollaborationCursorOverlay,
30847
+ chunk3AZ6ESJU_js.CollaborationCursorOverlay,
30899
30848
  {
30900
30849
  activeSlideIndex,
30901
30850
  canvasWidth: canvasSize.width,
@@ -31132,8 +31081,8 @@ function AiChangeOverlay({ batch, activeSlideIndex }) {
31132
31081
  ] });
31133
31082
  }
31134
31083
  function ChartFormatPanel() {
31135
- const { t } = chunkP2COO2QO_js.useTranslation();
31136
- const commands = chunkXG4WSJ4O_js.useChartFormatContext();
31084
+ const { t } = chunk6GFSF2ML_js.useTranslation();
31085
+ const commands = chunk3AZ6ESJU_js.useChartFormatContext();
31137
31086
  const ref = React108.useRef(null);
31138
31087
  const chart = commands?.chart;
31139
31088
  const chartData = chart?.type === "chart" ? chart.chartData : void 0;
@@ -31168,7 +31117,7 @@ function ChartFormatPanel() {
31168
31117
  return /* @__PURE__ */ jsxRuntime.jsx("pptx-ui-chart-format-pane", { ref, "data-testid": "chart-format-pane" });
31169
31118
  }
31170
31119
  function ThemeEditorPanel({ theme, canEdit, onApply, onClose }) {
31171
- const { t } = chunkP2COO2QO_js.useTranslation();
31120
+ const { t } = chunk6GFSF2ML_js.useTranslation();
31172
31121
  const ref = React108.useRef(null);
31173
31122
  React108.useEffect(() => {
31174
31123
  const node = ref.current;
@@ -31205,8 +31154,8 @@ function MobileDismissSheet({
31205
31154
  className,
31206
31155
  children
31207
31156
  }) {
31208
- const { t } = chunkP2COO2QO_js.useTranslation();
31209
- const { dragY, handlers } = chunkXG4WSJ4O_js.useSheetDismissDrag(onClose);
31157
+ const { t } = chunk6GFSF2ML_js.useTranslation();
31158
+ const { dragY, handlers } = chunk3AZ6ESJU_js.useSheetDismissDrag(onClose);
31210
31159
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31211
31160
  /* @__PURE__ */ jsxRuntime.jsx(
31212
31161
  "button",
@@ -31475,7 +31424,7 @@ function ThemeThumbnail({
31475
31424
  {
31476
31425
  type: "button",
31477
31426
  onClick,
31478
- className: chunkP2COO2QO_js.cn(
31427
+ className: chunk6GFSF2ML_js.cn(
31479
31428
  "group relative flex flex-col rounded-lg border-2 transition-all overflow-hidden",
31480
31429
  selected ? "border-primary shadow-lg scale-[1.02]" : "border-border hover:border-primary/50 hover:shadow-md"
31481
31430
  ),
@@ -31506,7 +31455,7 @@ function ThemeGallery({
31506
31455
  onApplyTheme,
31507
31456
  onImportTheme
31508
31457
  }) {
31509
- const { t } = chunkP2COO2QO_js.useTranslation();
31458
+ const { t } = chunk6GFSF2ML_js.useTranslation();
31510
31459
  const [selectedTheme, setSelectedTheme] = React108.useState(currentTheme ?? null);
31511
31460
  const fileInputRef = React108.useRef(null);
31512
31461
  React108.useEffect(() => {
@@ -31643,8 +31592,8 @@ function ViewerSidePanels(props) {
31643
31592
  aiBridge,
31644
31593
  aiPanel
31645
31594
  } = props;
31646
- const aiAssistant = chunkLVEFHZ76_js.aiAssistants.resolve(aiConfig);
31647
- const AiPanel = aiAssistant?.panel ?? chunkLVEFHZ76_js.AiChatPanelLazy;
31595
+ const aiAssistant = chunkMU3BIZ2U_js.aiAssistants.resolve(aiConfig);
31596
+ const AiPanel = aiAssistant?.panel ?? chunkMU3BIZ2U_js.AiChatPanelLazy;
31648
31597
  const handleSetSlideSize = (size, rescaleMode) => {
31649
31598
  if (rescaleMode && s.slideSizeEmu) {
31650
31599
  s.setSlides(pptx.scaleSlidesForSizeChange(slides, s.slideSizeEmu, size, rescaleMode));
@@ -31950,7 +31899,7 @@ function ViewerMainContent(props) {
31950
31899
  );
31951
31900
  const layoutGalleryAnchorRef = React108.useRef(null);
31952
31901
  const layoutGalleryPreviews = useLayoutPreviews(loadLayoutPreviews, layoutGalleryAnchor !== null);
31953
- return /* @__PURE__ */ jsxRuntime.jsx(chunkXG4WSJ4O_js.ChartPartSelectionProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "body", className: "relative z-10 flex flex-1 min-h-0", children: [
31902
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk3AZ6ESJU_js.ChartPartSelectionProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-pptx-chrome": "body", className: "relative z-10 flex flex-1 min-h-0", children: [
31954
31903
  showSlidesPane && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31955
31904
  slidesPaneRenderer ? (
31956
31905
  // The rail's slot (width, collapse, resize handle) stays the viewer's.
@@ -32160,7 +32109,7 @@ function AutosaveRecoveryDialog({
32160
32109
  onDiscard,
32161
32110
  busy = false
32162
32111
  }) {
32163
- const { t } = chunkP2COO2QO_js.useTranslation();
32112
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32164
32113
  if (!prompt) {
32165
32114
  return null;
32166
32115
  }
@@ -32216,7 +32165,7 @@ function CompatibilityToasts({
32216
32165
  rightInset = 0,
32217
32166
  bottomInset = 0
32218
32167
  }) {
32219
- const { t } = chunkP2COO2QO_js.useTranslation();
32168
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32220
32169
  const ref = useWebControl(
32221
32170
  { toasts, rightInset, bottomInset, translate: t },
32222
32171
  {
@@ -32261,7 +32210,7 @@ function HeaderFooterPanel({
32261
32210
  onApplyToCurrent,
32262
32211
  onClose
32263
32212
  }) {
32264
- const { t } = chunkP2COO2QO_js.useTranslation();
32213
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32265
32214
  const showDateTime = headerFooter.hasDateTime ?? false;
32266
32215
  const dateTimeAuto = headerFooter.dateTimeAuto ?? false;
32267
32216
  const showDateText = pptx.isHeaderFooterDateTextVisible(headerFooter);
@@ -32402,7 +32351,7 @@ function HeaderFooterPanel({
32402
32351
  ] }) });
32403
32352
  }
32404
32353
  function MobileBottomBar(p) {
32405
- const { t } = chunkP2COO2QO_js.useTranslation();
32354
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32406
32355
  const handlers = {
32407
32356
  slides: p.onOpenSlides,
32408
32357
  insert: p.onOpenInsert,
@@ -32428,7 +32377,7 @@ function MobileSlidesSheet({
32428
32377
  onClose,
32429
32378
  ...sidebar
32430
32379
  }) {
32431
- const { t } = chunkP2COO2QO_js.useTranslation();
32380
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32432
32381
  return /* @__PURE__ */ jsxRuntime.jsx(
32433
32382
  MobileSheet,
32434
32383
  {
@@ -32455,7 +32404,7 @@ function MobileChromeOverlay(props) {
32455
32404
  slideSectionGroups,
32456
32405
  canEdit,
32457
32406
  commentCount
32458
- } = props, { keyboardInset, isKeyboardOpen } = chunkXG4WSJ4O_js.useKeyboardInsets(), activeSheet = s.isMobileInsertOpen ? "insert" : s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null, closeAllSheets = () => {
32407
+ } = props, { keyboardInset, isKeyboardOpen } = chunk3AZ6ESJU_js.useKeyboardInsets(), activeSheet = s.isMobileInsertOpen ? "insert" : s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null, closeAllSheets = () => {
32459
32408
  s.setIsSlidesPaneOpen(false);
32460
32409
  s.setIsMobileInsertOpen(false);
32461
32410
  s.setIsInspectorPaneOpen(false);
@@ -32555,7 +32504,7 @@ function MobileChromeOverlay(props) {
32555
32504
  ] });
32556
32505
  }
32557
32506
  function ReadOnlyBanner(p) {
32558
- const { t } = chunkP2COO2QO_js.useTranslation();
32507
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32559
32508
  const ref = useWebControl(
32560
32509
  pptx.readOnlyBannerState(
32561
32510
  p.recommendation,
@@ -32589,7 +32538,7 @@ function RibbonCustomizationStyle({
32589
32538
  return /* @__PURE__ */ jsxRuntime.jsx("style", { "data-pptx-ribbon-customization": "", children: css });
32590
32539
  }
32591
32540
  function RunProgramNotices({ notices, onDismiss }) {
32592
- const { t } = chunkP2COO2QO_js.useTranslation();
32541
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32593
32542
  if (notices.length === 0) {
32594
32543
  return null;
32595
32544
  }
@@ -32647,14 +32596,14 @@ function AddinTable({
32647
32596
  selectedId,
32648
32597
  onSelect
32649
32598
  }) {
32650
- const { t } = chunkP2COO2QO_js.useTranslation();
32599
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32651
32600
  return /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
32652
32601
  /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "mb-1 text-xs font-semibold text-foreground", children: title }),
32653
32602
  rows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-2 py-1 text-xs italic text-muted-foreground", children: t("pptx.options.addIns.description") }) : /* @__PURE__ */ jsxRuntime.jsx("table", { className: "w-full border-collapse text-left", children: /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((row) => /* @__PURE__ */ jsxRuntime.jsxs(
32654
32603
  "tr",
32655
32604
  {
32656
32605
  onClick: () => onSelect(row.id),
32657
- className: chunkP2COO2QO_js.cn(
32606
+ className: chunk6GFSF2ML_js.cn(
32658
32607
  "cursor-pointer border-b border-border/40 transition-colors",
32659
32608
  selectedId === row.id ? "bg-primary/10" : "hover:bg-accent"
32660
32609
  ),
@@ -32669,7 +32618,7 @@ function AddinTable({
32669
32618
  ] });
32670
32619
  }
32671
32620
  function OptionsAddInsPane({ addinStatus }) {
32672
- const { t } = chunkP2COO2QO_js.useTranslation();
32621
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32673
32622
  const [selectedId, setSelectedId] = React108.useState(null);
32674
32623
  const rows = pptx.resolveViewerAddinRows(addinStatus);
32675
32624
  const active = rows.filter((row) => row.active);
@@ -32712,7 +32661,7 @@ function CommandList({
32712
32661
  selectedId,
32713
32662
  onSelect
32714
32663
  }) {
32715
- const { t } = chunkP2COO2QO_js.useTranslation();
32664
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32716
32665
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
32717
32666
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-1 text-xs font-medium text-muted-foreground", children: title }),
32718
32667
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -32733,7 +32682,7 @@ function CommandList({
32733
32682
  role: "option",
32734
32683
  "aria-selected": selectedId === id,
32735
32684
  onClick: () => onSelect(id),
32736
- className: chunkP2COO2QO_js.cn(
32685
+ className: chunk6GFSF2ML_js.cn(
32737
32686
  "flex w-full items-center rounded px-2 py-1.5 text-left text-sm transition-colors",
32738
32687
  selectedId === id ? "bg-primary/15 text-primary" : "text-foreground hover:bg-accent"
32739
32688
  ),
@@ -32751,7 +32700,7 @@ function OptionsQuickAccessPane({
32751
32700
  onQuickAccessCommandsChange,
32752
32701
  onResetQuickAccess
32753
32702
  }) {
32754
- const { t } = chunkP2COO2QO_js.useTranslation();
32703
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32755
32704
  const [selectedAvailable, setSelectedAvailable] = React108.useState(null);
32756
32705
  const [selectedCurrent, setSelectedCurrent] = React108.useState(null);
32757
32706
  const current = options.quickAccess.commandIds;
@@ -32865,7 +32814,7 @@ function OptionsRibbonPane({
32865
32814
  onRibbonTabHiddenChange,
32866
32815
  onResetRibbon
32867
32816
  }) {
32868
- const { t } = chunkP2COO2QO_js.useTranslation();
32817
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32869
32818
  const hidden = new Set(options.ribbon.hiddenTabIds);
32870
32819
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
32871
32820
  /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
@@ -32877,7 +32826,7 @@ function OptionsRibbonPane({
32877
32826
  return /* @__PURE__ */ jsxRuntime.jsxs(
32878
32827
  "label",
32879
32828
  {
32880
- className: chunkP2COO2QO_js.cn(
32829
+ className: chunk6GFSF2ML_js.cn(
32881
32830
  "flex items-center gap-2 rounded px-2 py-1.5",
32882
32831
  isFile ? "cursor-not-allowed opacity-60" : "cursor-pointer hover:bg-accent"
32883
32832
  ),
@@ -32911,7 +32860,7 @@ function OptionsRibbonPane({
32911
32860
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: pptx.SHORTCUT_REFERENCE_ITEMS.map((shortcut, i) => /* @__PURE__ */ jsxRuntime.jsxs(
32912
32861
  "div",
32913
32862
  {
32914
- className: chunkP2COO2QO_js.cn(
32863
+ className: chunk6GFSF2ML_js.cn(
32915
32864
  "flex items-center justify-between gap-3 rounded px-3 py-2",
32916
32865
  i % 2 === 0 ? "bg-muted/60" : ""
32917
32866
  ),
@@ -32932,12 +32881,12 @@ async function exportAiChatLogs(options) {
32932
32881
  chats,
32933
32882
  { format: options?.format, detailed: options?.detailed, now: options?.now },
32934
32883
  (filename, content, mime) => {
32935
- chunkXG4WSJ4O_js.downloadBlob(new Blob([content], { type: mime }), filename);
32884
+ chunk3AZ6ESJU_js.downloadBlob(new Blob([content], { type: mime }), filename);
32936
32885
  }
32937
32886
  );
32938
32887
  }
32939
32888
  function SettingsAiTab({ store }) {
32940
- const { t } = chunkP2COO2QO_js.useTranslation();
32889
+ const { t } = chunk6GFSF2ML_js.useTranslation();
32941
32890
  const activeStore = React108.useMemo(() => store ?? host.createChatHistoryStore(), [store]);
32942
32891
  const [chatCount, setChatCount] = React108.useState(null);
32943
32892
  const [detailed, setDetailed] = React108.useState(true);
@@ -33029,7 +32978,7 @@ function SettingsAppearanceTab({
33029
32978
  themes,
33030
32979
  onSelectTheme
33031
32980
  }) {
33032
- const { t } = chunkP2COO2QO_js.useTranslation();
32981
+ const { t } = chunk6GFSF2ML_js.useTranslation();
33033
32982
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-3", children: themes.map((entry) => {
33034
32983
  const isActive = entry.key === activeThemeKey;
33035
32984
  const previewBackground = entry.theme?.colors?.background ?? "#0b0f19";
@@ -33040,7 +32989,7 @@ function SettingsAppearanceTab({
33040
32989
  type: "button",
33041
32990
  onClick: () => onSelectTheme(entry.key),
33042
32991
  "aria-pressed": isActive,
33043
- className: chunkP2COO2QO_js.cn(
32992
+ className: chunk6GFSF2ML_js.cn(
33044
32993
  "flex items-center gap-3 rounded-lg border px-3 py-2.5 text-left transition-colors",
33045
32994
  isActive ? "border-primary bg-primary/10" : "border-border hover:border-primary/50 hover:bg-accent"
33046
32995
  ),
@@ -33057,7 +33006,7 @@ function SettingsAppearanceTab({
33057
33006
  /* @__PURE__ */ jsxRuntime.jsx(
33058
33007
  "span",
33059
33008
  {
33060
- className: chunkP2COO2QO_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33009
+ className: chunk6GFSF2ML_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
33061
33010
  children: t(entry.labelKey)
33062
33011
  }
33063
33012
  )
@@ -33072,7 +33021,7 @@ function SettingsCustomFontsSection({
33072
33021
  families,
33073
33022
  onRegistered
33074
33023
  }) {
33075
- const { t } = chunkP2COO2QO_js.useTranslation();
33024
+ const { t } = chunk6GFSF2ML_js.useTranslation();
33076
33025
  const inputRef = React108.useRef(null);
33077
33026
  const [error, setError] = React108.useState(false);
33078
33027
  const handleFile = async (file) => {
@@ -33137,7 +33086,7 @@ function SettingsLanguageTab({
33137
33086
  type: "button",
33138
33087
  onClick: () => onSelectLocale(locale.code),
33139
33088
  "aria-pressed": isActive,
33140
- className: chunkP2COO2QO_js.cn(
33089
+ className: chunk6GFSF2ML_js.cn(
33141
33090
  "flex w-full items-center justify-between rounded px-3 py-2.5 text-left transition-colors",
33142
33091
  isActive ? "bg-primary/10 text-primary" : "text-foreground hover:bg-accent"
33143
33092
  ),
@@ -33176,7 +33125,7 @@ function OpenSettingsDialog({
33176
33125
  customFontFamilies = NO_CUSTOM_FONT_FAMILIES,
33177
33126
  onCustomFontRegistered
33178
33127
  }) {
33179
- const { t } = chunkP2COO2QO_js.useTranslation();
33128
+ const { t } = chunk6GFSF2ML_js.useTranslation();
33180
33129
  const viewerCustomization = useViewerCustomizationContext();
33181
33130
  const customization = React108.useMemo(
33182
33131
  () => languageSelectable ? viewerCustomization : {
@@ -33285,7 +33234,7 @@ function ViewerOptionsProvider({
33285
33234
  store,
33286
33235
  children
33287
33236
  }) {
33288
- return /* @__PURE__ */ jsxRuntime.jsx(chunkXG4WSJ4O_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunkXG4WSJ4O_js.ViewerOptionsContext.Provider, { value: options, children }) });
33237
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk3AZ6ESJU_js.ViewerOptionsStoreContext.Provider, { value: store, children: /* @__PURE__ */ jsxRuntime.jsx(chunk3AZ6ESJU_js.ViewerOptionsContext.Provider, { value: options, children }) });
33289
33238
  }
33290
33239
  function useAiBridge(input) {
33291
33240
  const ref = React108.useRef(input);
@@ -33368,7 +33317,7 @@ function useAiPanelController(input) {
33368
33317
  getSelectedElement: () => inputRef.current.selectedElement
33369
33318
  })
33370
33319
  );
33371
- const state = chunkXG4WSJ4O_js.useController(controller);
33320
+ const state = chunk3AZ6ESJU_js.useController(controller);
33372
33321
  React108.useEffect(() => () => controller.dispose(), [controller]);
33373
33322
  const liveFocusTargets = React108.useMemo(
33374
33323
  () => host.computeFocusTargets({ activeSlideIndex, selectedElementIds, selectedElementId }),
@@ -33601,7 +33550,7 @@ function useMasterViewCrud(input) {
33601
33550
  forgetHistory,
33602
33551
  pushToast
33603
33552
  } = input;
33604
- const { t } = chunkP2COO2QO_js.useTranslation();
33553
+ const { t } = chunk6GFSF2ML_js.useTranslation();
33605
33554
  const data = React108.useMemo(
33606
33555
  () => ({ slides, slideMasters }),
33607
33556
  [slides, slideMasters]
@@ -33988,26 +33937,39 @@ function useViewerCustomization(customization, legacyHiddenActions, optionsStore
33988
33937
  return { resolved, api: controller.api, hiddenActions };
33989
33938
  }
33990
33939
  var NO_LOCALES = [];
33991
- var toCatalogEntry = (code) => i18n.LOCALE_CATALOG.find((entry) => entry.code === code) ?? { code, label: code, nativeLabel: code };
33940
+ var BUILT_IN_CONTROLS = {
33941
+ localeCode: "en",
33942
+ locales: NO_LOCALES,
33943
+ selectLocale: () => {
33944
+ },
33945
+ languageSelectable: false
33946
+ };
33947
+ var toCatalogEntry = (code) => i18n$1.LOCALE_CATALOG.find((entry) => entry.code === code) ?? { code, label: code, nativeLabel: code };
33992
33948
  function useHostLanguage({
33993
33949
  defaultLocale,
33994
33950
  availableLocales,
33995
33951
  onLocaleChange
33996
33952
  }) {
33997
- const { t, i18n } = chunkP2COO2QO_js.useHostI18next();
33953
+ const host = chunk6GFSF2ML_js.useRegisteredHostI18next();
33954
+ const t = host?.t;
33955
+ const i18n = host?.i18n;
33956
+ const readsInstance = i18n !== void 0;
33998
33957
  const [localeCode, setLocaleCode] = React108.useState(
33999
33958
  () => defaultLocale ?? pptx.readStoredViewerPrefs().localeCode ?? "en"
34000
33959
  );
34001
33960
  React108.useEffect(() => {
34002
- if (localeCode !== "en" && !onLocaleChange) {
34003
- void i18n.changeLanguage(localeCode);
33961
+ if (i18n && localeCode !== "en" && !onLocaleChange) {
33962
+ void i18n.changeLanguage?.(localeCode);
34004
33963
  }
34005
- }, []);
33964
+ }, [readsInstance]);
34006
33965
  const locales = React108.useMemo(() => {
34007
33966
  if (availableLocales) {
34008
33967
  return availableLocales;
34009
33968
  }
34010
- const registeredCodes = i18n.options.resources ? Object.keys(i18n.options.resources) : i18n.languages ?? ["en"];
33969
+ if (!i18n) {
33970
+ return NO_LOCALES;
33971
+ }
33972
+ const registeredCodes = i18n.options?.resources ? Object.keys(i18n.options.resources) : Array.isArray(i18n.languages) ? i18n.languages : ["en"];
34011
33973
  return registeredCodes.map(toCatalogEntry);
34012
33974
  }, [availableLocales, i18n]);
34013
33975
  const selectLocale = React108.useCallback(
@@ -34015,18 +33977,21 @@ function useHostLanguage({
34015
33977
  setLocaleCode(code);
34016
33978
  if (onLocaleChange) {
34017
33979
  onLocaleChange(code);
34018
- } else {
34019
- void i18n.changeLanguage(code);
33980
+ } else if (i18n) {
33981
+ void i18n.changeLanguage?.(code);
34020
33982
  pptx.writeStoredViewerPrefs({ localeCode: code });
34021
33983
  }
34022
33984
  },
34023
33985
  [onLocaleChange, i18n]
34024
33986
  );
34025
- const language = i18n.resolvedLanguage ?? i18n.language ?? localeCode;
34026
- const state = React108.useMemo(() => ({ t, locale: language }), [t, language]);
33987
+ const language = i18n ? chunk6GFSF2ML_js.hostInstanceLanguage(i18n) ?? localeCode : "en";
33988
+ const state = React108.useMemo(
33989
+ () => t ? { t, locale: language } : chunk6GFSF2ML_js.BUILT_IN_ENGLISH,
33990
+ [t, language]
33991
+ );
34027
33992
  const controls = React108.useMemo(
34028
- () => ({ localeCode, locales, selectLocale, languageSelectable: true }),
34029
- [localeCode, locales, selectLocale]
33993
+ () => readsInstance ? { localeCode, locales, selectLocale, languageSelectable: true } : BUILT_IN_CONTROLS,
33994
+ [readsInstance, localeCode, locales, selectLocale]
34030
33995
  );
34031
33996
  return { state, controls };
34032
33997
  }
@@ -34034,13 +33999,13 @@ function useProvidedLanguage({
34034
33999
  availableLocales,
34035
34000
  onLocaleChange
34036
34001
  }) {
34037
- const state = React108.useContext(chunkP2COO2QO_js.PptxI18nContext);
34002
+ const state = React108.useContext(chunk6GFSF2ML_js.PptxI18nContext);
34038
34003
  const { locale } = state;
34039
34004
  const locales = availableLocales ?? NO_LOCALES;
34040
34005
  const controls = React108.useMemo(
34041
34006
  () => ({
34042
34007
  // `fr-CA` selects an offered `fr`: the host's locale need not be one of the codes.
34043
- localeCode: i18n$1.normalizeLocale(
34008
+ localeCode: i18n.normalizeLocale(
34044
34009
  locale,
34045
34010
  locales.map((entry) => entry.code),
34046
34011
  locale
@@ -34054,20 +34019,25 @@ function useProvidedLanguage({
34054
34019
  return { state, controls };
34055
34020
  }
34056
34021
  function provideLanguage({ state, controls }, children) {
34057
- return /* @__PURE__ */ jsxRuntime.jsx(chunkP2COO2QO_js.ViewerI18nContext.Provider, { value: state, children: /* @__PURE__ */ jsxRuntime.jsx(chunkP2COO2QO_js.ViewerLocaleControlsContext.Provider, { value: controls, children }) });
34022
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk6GFSF2ML_js.ViewerI18nContext.Provider, { value: state, children: /* @__PURE__ */ jsxRuntime.jsx(chunk6GFSF2ML_js.ViewerLocaleControlsContext.Provider, { value: controls, children }) });
34058
34023
  }
34059
34024
  function HostLanguageRoot({ children, ...props }) {
34060
34025
  return provideLanguage(useHostLanguage(props), children);
34061
34026
  }
34027
+ function BuiltInLanguageRoot({ children }) {
34028
+ return provideLanguage({ state: chunk6GFSF2ML_js.BUILT_IN_ENGLISH, controls: BUILT_IN_CONTROLS }, children);
34029
+ }
34062
34030
  function ProvidedLanguageRoot({ children, ...props }) {
34063
34031
  return provideLanguage(useProvidedLanguage(props), children);
34064
34032
  }
34065
34033
  function ViewerI18nRoot(props) {
34066
- const Root = React108.useContext(chunkP2COO2QO_js.PptxI18nContext) ? ProvidedLanguageRoot : HostLanguageRoot;
34034
+ const [readsHost] = React108.useState(() => chunk6GFSF2ML_js.registeredHostI18next() !== null);
34035
+ const FromHost = readsHost ? HostLanguageRoot : BuiltInLanguageRoot;
34036
+ const Root = React108.useContext(chunk6GFSF2ML_js.PptxI18nContext) ? ProvidedLanguageRoot : FromHost;
34067
34037
  return /* @__PURE__ */ jsxRuntime.jsx(Root, { ...props });
34068
34038
  }
34069
34039
  function useViewerLocaleControls() {
34070
- return React108.useContext(chunkP2COO2QO_js.ViewerLocaleControlsContext);
34040
+ return React108.useContext(chunk6GFSF2ML_js.ViewerLocaleControlsContext);
34071
34041
  }
34072
34042
  var NO_RIBBON_ADD_INS = [];
34073
34043
  var NO_FILE_PROVIDERS = [];
@@ -34146,7 +34116,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34146
34116
  limits
34147
34117
  } = props;
34148
34118
  const cloudDocument = React108.useMemo(() => pptx.createCloudDocumentController(), []);
34149
- const cloudFile = chunkXG4WSJ4O_js.useController(cloudDocument).file;
34119
+ const cloudFile = chunk3AZ6ESJU_js.useController(cloudDocument).file;
34150
34120
  const {
34151
34121
  storage: viewerStorage,
34152
34122
  fileName,
@@ -34160,7 +34130,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34160
34130
  filePath: hostFilePath
34161
34131
  });
34162
34132
  const saveProgress = React108.useMemo(() => pptx.createSaveProgressController(), []);
34163
- const saveProgressState = chunkXG4WSJ4O_js.useController(saveProgress);
34133
+ const saveProgressState = chunk3AZ6ESJU_js.useController(saveProgress);
34164
34134
  const storage = React108.useMemo(
34165
34135
  () => viewerStorage ? saveProgress.wrap(viewerStorage) : viewerStorage,
34166
34136
  [viewerStorage, saveProgress]
@@ -34202,7 +34172,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34202
34172
  (current) => current.includes(family) ? current : [...current, family]
34203
34173
  );
34204
34174
  }, []);
34205
- const { t } = chunkP2COO2QO_js.useTranslation();
34175
+ const { t } = chunk6GFSF2ML_js.useTranslation();
34206
34176
  const {
34207
34177
  localeCode,
34208
34178
  locales: resolvedLocales,
@@ -34259,7 +34229,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34259
34229
  },
34260
34230
  [hostStorage, cloudDocument]
34261
34231
  );
34262
- const { optionsStore, options: viewerOptions } = chunkXG4WSJ4O_js.useViewerOptions();
34232
+ const { optionsStore, options: viewerOptions } = chunk3AZ6ESJU_js.useViewerOptions();
34263
34233
  const custom = useViewerCustomization(
34264
34234
  customization,
34265
34235
  legacyHiddenActions,
@@ -34279,8 +34249,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34279
34249
  const handleEnableEditing = React108.useCallback(() => {
34280
34250
  setProtectedViewOverridden(true);
34281
34251
  }, []);
34282
- const readOnlyRec = chunkXG4WSJ4O_js.useReadOnlyRecommendationState(content);
34283
- const compatToastsState = chunkXG4WSJ4O_js.useCompatibilityToastsState();
34252
+ const readOnlyRec = chunk3AZ6ESJU_js.useReadOnlyRecommendationState(content);
34253
+ const compatToastsState = chunk3AZ6ESJU_js.useCompatibilityToastsState();
34284
34254
  const [notesBarHeight, setNotesBarHeight] = React108.useState(0);
34285
34255
  const runProgramNoticesState = useRunProgramNoticesState();
34286
34256
  const [collaborationReadOnly, setCollaborationReadOnly] = React108.useState(Boolean(collaboration));
@@ -34303,8 +34273,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34303
34273
  filePath
34304
34274
  });
34305
34275
  const [isShareDialogOpen, setIsShareDialogOpen] = React108.useState(false);
34306
- const { reducedMotion, toggleReducedMotion } = chunkXG4WSJ4O_js.useReducedMotion();
34307
- const state = chunkXG4WSJ4O_js.useViewerState({
34276
+ const { reducedMotion, toggleReducedMotion } = chunk3AZ6ESJU_js.useReducedMotion();
34277
+ const state = chunk3AZ6ESJU_js.useViewerState({
34308
34278
  content,
34309
34279
  canEdit,
34310
34280
  inspectorInitiallyOpen: props.inspectorInitiallyOpen
@@ -34431,16 +34401,16 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34431
34401
  }
34432
34402
  }, [settings, optionsStore]);
34433
34403
  const handleClearOptionsCache = useAutosaveCacheMaintenance(viewerOptions, storage);
34434
- const mobile = chunkXG4WSJ4O_js.useIsMobile();
34404
+ const mobile = chunk3AZ6ESJU_js.useIsMobile();
34435
34405
  const { isMobile, isTouchDevice, isVirtualKeyboardOpen } = mobile;
34436
- const resizablePanels = chunkXG4WSJ4O_js.useResizablePanels();
34406
+ const resizablePanels = chunk3AZ6ESJU_js.useResizablePanels();
34437
34407
  const {
34438
34408
  gridSpacingPx,
34439
34409
  visibleSlideIndexes,
34440
34410
  slideSectionGroups,
34441
34411
  masterPseudoSlide,
34442
34412
  authoredRange
34443
- } = chunkXG4WSJ4O_js.useDerivedSlideState({
34413
+ } = chunk3AZ6ESJU_js.useDerivedSlideState({
34444
34414
  slides,
34445
34415
  sections: state.sections,
34446
34416
  customShows: state.customShows,
@@ -34465,7 +34435,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34465
34435
  state.cropSessionRef
34466
34436
  ]
34467
34437
  );
34468
- const zoom = chunkXG4WSJ4O_js.useZoomViewport({
34438
+ const zoom = chunk3AZ6ESJU_js.useZoomViewport({
34469
34439
  canvasSize,
34470
34440
  selectedElements: state.selectedElements,
34471
34441
  fitPadding: props.fitPadding,
@@ -34481,7 +34451,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34481
34451
  onChangeCallback.current?.();
34482
34452
  }, [setIsDirty]);
34483
34453
  const restoreHistoryThemeRef = React108.useRef(void 0);
34484
- const history = chunkXG4WSJ4O_js.useEditorHistory({
34454
+ const history = chunk3AZ6ESJU_js.useEditorHistory({
34485
34455
  slides,
34486
34456
  canvasSize,
34487
34457
  activeSlideIndex,
@@ -34510,7 +34480,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34510
34480
  setEditTemplateMode: state.setEditTemplateMode,
34511
34481
  setHeaderFooter: state.setHeaderFooter
34512
34482
  });
34513
- const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunkXG4WSJ4O_js.usePresentationSetup({
34483
+ const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = chunk3AZ6ESJU_js.usePresentationSetup({
34514
34484
  mode,
34515
34485
  slides,
34516
34486
  visibleSlideIndexes,
@@ -34589,7 +34559,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34589
34559
  loading,
34590
34560
  error
34591
34561
  ]);
34592
- chunkXG4WSJ4O_js.useTouchGestures({
34562
+ chunk3AZ6ESJU_js.useTouchGestures({
34593
34563
  targetRef: zoom.canvasViewportRef,
34594
34564
  currentScale: zoom.scale,
34595
34565
  callbacks: {
@@ -34611,7 +34581,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34611
34581
  },
34612
34582
  enabled: isTouchDevice
34613
34583
  });
34614
- const dialogs = chunkXG4WSJ4O_js.useViewerDialogs({
34584
+ const dialogs = chunk3AZ6ESJU_js.useViewerDialogs({
34615
34585
  mode,
34616
34586
  slides,
34617
34587
  activeSlide,
@@ -34639,7 +34609,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34639
34609
  history,
34640
34610
  embeddedFontFamilies: state.embeddedFonts.map((font) => font.name)
34641
34611
  });
34642
- chunkXG4WSJ4O_js.useClearSelectionOnSlideChange(state, activeSlideIndex);
34612
+ chunk3AZ6ESJU_js.useClearSelectionOnSlideChange(state, activeSlideIndex);
34643
34613
  const zoomBeforePresentRef = React108.useRef(null);
34644
34614
  React108.useEffect(() => {
34645
34615
  if (mode !== "present") {
@@ -34657,7 +34627,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34657
34627
  zoom.handleZoomToFit();
34658
34628
  zoom.canvasViewportRef.current?.scrollTo({ left: 0, top: 0 });
34659
34629
  }, [mode]);
34660
- const editorOps = chunkXG4WSJ4O_js.useEditorOperations({
34630
+ const editorOps = chunk3AZ6ESJU_js.useEditorOperations({
34661
34631
  state,
34662
34632
  history,
34663
34633
  zoom,
@@ -34702,7 +34672,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34702
34672
  handlerRef,
34703
34673
  viewerApi,
34704
34674
  loadVersion
34705
- } = chunkXG4WSJ4O_js.useViewerIntegration({
34675
+ } = chunk3AZ6ESJU_js.useViewerIntegration({
34706
34676
  transformCommittedText: (text, previous) => pptx.applyAutoCorrectToEdit(text, previous, viewerOptions.proofing),
34707
34677
  state,
34708
34678
  zoom,
@@ -34847,7 +34817,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34847
34817
  updateElementById: editorOps.ops.updateElementById
34848
34818
  });
34849
34819
  const ribbonScope = useRibbonScopeToken();
34850
- const viewPreferencesSync = chunkXG4WSJ4O_js.useViewPreferencesSync({
34820
+ const viewPreferencesSync = chunk3AZ6ESJU_js.useViewPreferencesSync({
34851
34821
  loadVersion,
34852
34822
  viewProperties: state.viewProperties,
34853
34823
  setViewProperties: state.setViewProperties,
@@ -34898,7 +34868,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
34898
34868
  },
34899
34869
  [state]
34900
34870
  );
34901
- const layoutSwitching = chunkXG4WSJ4O_js.useLayoutSwitching({
34871
+ const layoutSwitching = chunk3AZ6ESJU_js.useLayoutSwitching({
34902
34872
  handler: handlerRef.current,
34903
34873
  slides,
34904
34874
  activeSlideIndex,
@@ -35017,7 +34987,7 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35017
34987
  "data-pptx-editor-chrome": "",
35018
34988
  ...{ [pptx.RIBBON_SCOPE_ATTR]: ribbonScope },
35019
34989
  "aria-busy": loading,
35020
- className: chunkP2COO2QO_js.cn(
34990
+ className: chunk6GFSF2ML_js.cn(
35021
34991
  "h-full w-full bg-background text-foreground relative",
35022
34992
  ...pptx.resolveOptionRootClasses(viewerOptions, "pptx")
35023
34993
  ),
@@ -35419,8 +35389,8 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35419
35389
  // Nothing previously provided it, so every one of those consumers was
35420
35390
  // silently reading `DEFAULT_VIEWER_OPTIONS` forever, no matter what
35421
35391
  // the user changed in the Options dialog.
35422
- /* @__PURE__ */ jsxRuntime.jsx(ViewerOptionsProvider, { options: viewerOptions, store: optionsStore, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCustomizationContext.Provider, { value: customizationResolved, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerStorageContext.Provider, { value: hostStorage, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCloudFilesContext.Provider, { value: cloudFiles, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerRegionBaseContext.Provider, { value: regionBase, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonAddInsContext.Provider, { value: ribbonAddIns ?? NO_RIBBON_ADD_INS, children: /* @__PURE__ */ jsxRuntime.jsx(AccountAuthContext.Provider, { value: accountAuth, children: /* @__PURE__ */ jsxRuntime.jsx(chunkXG4WSJ4O_js.Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
35423
- chunkXG4WSJ4O_js.CollaborationProvider,
35392
+ /* @__PURE__ */ jsxRuntime.jsx(ViewerOptionsProvider, { options: viewerOptions, store: optionsStore, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCustomizationContext.Provider, { value: customizationResolved, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerStorageContext.Provider, { value: hostStorage, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerCloudFilesContext.Provider, { value: cloudFiles, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerRegionBaseContext.Provider, { value: regionBase, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonAddInsContext.Provider, { value: ribbonAddIns ?? NO_RIBBON_ADD_INS, children: /* @__PURE__ */ jsxRuntime.jsx(AccountAuthContext.Provider, { value: accountAuth, children: /* @__PURE__ */ jsxRuntime.jsx(chunk3AZ6ESJU_js.Rendering3DFlagsContext.Provider, { value: effective3D, children: /* @__PURE__ */ jsxRuntime.jsx(ViewerThemeProvider, { theme: effectiveTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
35393
+ chunk3AZ6ESJU_js.CollaborationProvider,
35424
35394
  {
35425
35395
  config: collaboration,
35426
35396
  canvasWidth: canvasSize.width,
@@ -35477,19 +35447,19 @@ var PowerPointViewerBody = /* @__PURE__ */ React108.forwardRef(
35477
35447
  slideCount: slides.length
35478
35448
  }
35479
35449
  ),
35480
- /* @__PURE__ */ jsxRuntime.jsx(ShapeFormatContext.Provider, { value: shapeFormat, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonGalleryCommandsContext.Provider, { value: ribbonGalleries, children: /* @__PURE__ */ jsxRuntime.jsx(chunkXG4WSJ4O_js.ChartFormatContext.Provider, { value: chartFormat, children: viewerContent }) }) })
35450
+ /* @__PURE__ */ jsxRuntime.jsx(ShapeFormatContext.Provider, { value: shapeFormat, children: /* @__PURE__ */ jsxRuntime.jsx(RibbonGalleryCommandsContext.Provider, { value: ribbonGalleries, children: /* @__PURE__ */ jsxRuntime.jsx(chunk3AZ6ESJU_js.ChartFormatContext.Provider, { value: chartFormat, children: viewerContent }) }) })
35481
35451
  ]
35482
35452
  }
35483
35453
  ) }) }) }) }) }) }) }) }) })
35484
35454
  );
35485
35455
  }
35486
35456
  );
35487
- var PowerPointViewer2 = /* @__PURE__ */ chunkXG4WSJ4O_js.withDisplayName(
35457
+ var PowerPointViewer2 = /* @__PURE__ */ chunk3AZ6ESJU_js.withDisplayName(
35488
35458
  PowerPointViewerComponent,
35489
35459
  "PowerPointViewer"
35490
35460
  );
35491
35461
  function CollaborationStatusStrip() {
35492
- const collab = chunkXG4WSJ4O_js.useCollaboration();
35462
+ const collab = chunk3AZ6ESJU_js.useCollaboration();
35493
35463
  if (!collab) {
35494
35464
  return null;
35495
35465
  }
@@ -35506,9 +35476,9 @@ function CollaborationStateReporter({
35506
35476
  onChange,
35507
35477
  onStatus
35508
35478
  }) {
35509
- const collab = chunkXG4WSJ4O_js.useCollaboration();
35479
+ const collab = chunk3AZ6ESJU_js.useCollaboration();
35510
35480
  useCollaborationStateReport(collab, onChange);
35511
- chunkXG4WSJ4O_js.useReportOnChange(collab?.status ?? "disconnected", onStatus, "disconnected");
35481
+ chunk3AZ6ESJU_js.useReportOnChange(collab?.status ?? "disconnected", onStatus, "disconnected");
35512
35482
  return null;
35513
35483
  }
35514
35484
  function CollaborationDocumentSync({
@@ -35523,8 +35493,8 @@ function CollaborationDocumentSync({
35523
35493
  onReadOnlyChange,
35524
35494
  history
35525
35495
  }) {
35526
- const collab = chunkXG4WSJ4O_js.useCollaboration();
35527
- chunkXG4WSJ4O_js.useCollaborationDocumentSync({
35496
+ const collab = chunk3AZ6ESJU_js.useCollaboration();
35497
+ chunk3AZ6ESJU_js.useCollaborationDocumentSync({
35528
35498
  collaboration: collab,
35529
35499
  history,
35530
35500
  slides,
@@ -35544,14 +35514,14 @@ function CollaborationFollowLayer({
35544
35514
  setActiveSlideIndex,
35545
35515
  slideCount
35546
35516
  }) {
35547
- const collab = chunkXG4WSJ4O_js.useCollaboration();
35548
- const { followedClientId, followUser } = chunkXG4WSJ4O_js.useFollowMode({
35517
+ const collab = chunk3AZ6ESJU_js.useCollaboration();
35518
+ const { followedClientId, followUser } = chunk3AZ6ESJU_js.useFollowMode({
35549
35519
  collab,
35550
35520
  activeSlideIndex,
35551
35521
  setActiveSlideIndex,
35552
35522
  slideCount
35553
35523
  });
35554
- chunkXG4WSJ4O_js.useBroadcastFollower({
35524
+ chunk3AZ6ESJU_js.useBroadcastFollower({
35555
35525
  collab,
35556
35526
  activeSlideIndex,
35557
35527
  setActiveSlideIndex,
@@ -35570,31 +35540,6 @@ function CollaborationFollowLayer({
35570
35540
  }
35571
35541
  ) }) });
35572
35542
  }
35573
- var asMessageParams = (params) => params;
35574
- function withEnglishFallback(translate) {
35575
- return (key, defaultOrParams) => {
35576
- const params = typeof defaultOrParams === "string" ? { defaultValue: defaultOrParams } : defaultOrParams;
35577
- let text;
35578
- try {
35579
- text = params === void 0 ? translate(key) : translate(key, params);
35580
- } catch {
35581
- text = void 0;
35582
- }
35583
- const found = text && text !== key ? text : i18n.translationsEn[key] ?? params?.defaultValue;
35584
- return typeof found === "string" ? i18n$1.interpolate(found, asMessageParams(params), "double") : i18n.keyToLabel(key);
35585
- };
35586
- }
35587
- function PptxI18nProvider({
35588
- translate,
35589
- locale,
35590
- children
35591
- }) {
35592
- const state = React108.useMemo(
35593
- () => ({ t: withEnglishFallback(translate), locale }),
35594
- [translate, locale]
35595
- );
35596
- return /* @__PURE__ */ jsxRuntime.jsx(chunkP2COO2QO_js.PptxI18nContext.Provider, { value: state, children });
35597
- }
35598
35543
 
35599
35544
  Object.defineProperty(exports, "THEME_CATALOG", {
35600
35545
  enumerable: true,
@@ -35642,10 +35587,10 @@ Object.defineProperty(exports, "vermilionRadius", {
35642
35587
  });
35643
35588
  exports.CollaborationStatusIndicator = CollaborationStatusIndicator;
35644
35589
  exports.PowerPointViewer = PowerPointViewer2;
35645
- exports.PptxI18nProvider = PptxI18nProvider;
35646
35590
  exports.SlideCanvas = SlideCanvas;
35647
35591
  exports.SlideTemplateGalleryDialog = SlideTemplateGalleryDialog;
35648
35592
  exports.SlideTemplatePreview = SlideTemplatePreview;
35593
+ exports.SlideThumbnail = SlideThumbnail;
35649
35594
  exports.SlidesPaneSidebar = SlidesPaneSidebar;
35650
35595
  exports.Toolbar = Toolbar;
35651
35596
  exports.UserAvatarBar = UserAvatarBar;