pptx-react-viewer 1.17.0 → 1.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/{chunk-HJQZJ3VE.mjs → chunk-5CD34U2V.mjs} +1 -1
  3. package/dist/chunk-5CD34U2V.mjs.br +0 -0
  4. package/dist/chunk-5CD34U2V.mjs.gz +0 -0
  5. package/dist/{chunk-LLHFNGAF.mjs → chunk-HN7CPQUG.mjs} +1 -1
  6. package/dist/chunk-HN7CPQUG.mjs.br +0 -0
  7. package/dist/chunk-HN7CPQUG.mjs.gz +0 -0
  8. package/dist/{chunk-WGLJ32FW.js → chunk-IZXN663G.js} +1 -1
  9. package/dist/chunk-IZXN663G.js.br +0 -0
  10. package/dist/chunk-IZXN663G.js.gz +0 -0
  11. package/dist/{chunk-LNSHC2Z5.mjs → chunk-PCQH2UBR.mjs} +114 -77
  12. package/dist/chunk-PCQH2UBR.mjs.br +0 -0
  13. package/dist/chunk-PCQH2UBR.mjs.gz +0 -0
  14. package/dist/{chunk-3P6O7ZDM.js → chunk-SXCO5HHN.js} +18 -18
  15. package/dist/chunk-SXCO5HHN.js.br +0 -0
  16. package/dist/chunk-SXCO5HHN.js.gz +0 -0
  17. package/dist/{chunk-XW5OMXW6.js → chunk-WH7YXV3I.js} +569 -532
  18. package/dist/chunk-WH7YXV3I.js.br +0 -0
  19. package/dist/chunk-WH7YXV3I.js.gz +0 -0
  20. package/dist/hooks-unstable.js +71 -71
  21. package/dist/hooks-unstable.js.br +0 -0
  22. package/dist/hooks-unstable.js.gz +0 -0
  23. package/dist/hooks-unstable.mjs +2 -2
  24. package/dist/hooks-unstable.mjs.br +0 -0
  25. package/dist/hooks-unstable.mjs.gz +0 -0
  26. package/dist/i18n.js +3 -3
  27. package/dist/i18n.js.br +1 -1
  28. package/dist/i18n.js.gz +0 -0
  29. package/dist/i18n.mjs +1 -1
  30. package/dist/i18n.mjs.br +0 -0
  31. package/dist/i18n.mjs.gz +0 -0
  32. package/dist/index.js +8 -8
  33. package/dist/index.js.br +0 -0
  34. package/dist/index.js.gz +0 -0
  35. package/dist/index.mjs +3 -3
  36. package/dist/index.mjs.br +0 -0
  37. package/dist/index.mjs.gz +0 -0
  38. package/dist/viewer/index.js +18 -18
  39. package/dist/viewer/index.js.br +0 -0
  40. package/dist/viewer/index.js.gz +0 -0
  41. package/dist/viewer/index.mjs +3 -3
  42. package/dist/viewer/index.mjs.br +0 -0
  43. package/dist/viewer/index.mjs.gz +0 -0
  44. package/package.json +1 -1
  45. package/dist/chunk-3P6O7ZDM.js.br +0 -0
  46. package/dist/chunk-3P6O7ZDM.js.gz +0 -0
  47. package/dist/chunk-HJQZJ3VE.mjs.br +0 -0
  48. package/dist/chunk-HJQZJ3VE.mjs.gz +0 -0
  49. package/dist/chunk-LLHFNGAF.mjs.br +0 -0
  50. package/dist/chunk-LLHFNGAF.mjs.gz +0 -0
  51. package/dist/chunk-LNSHC2Z5.mjs.br +0 -0
  52. package/dist/chunk-LNSHC2Z5.mjs.gz +0 -0
  53. package/dist/chunk-WGLJ32FW.js.br +0 -0
  54. package/dist/chunk-WGLJ32FW.js.gz +0 -0
  55. package/dist/chunk-XW5OMXW6.js.br +0 -0
  56. package/dist/chunk-XW5OMXW6.js.gz +0 -0
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunk3P6O7ZDM_js = require('./chunk-3P6O7ZDM.js');
3
+ var chunkSXCO5HHN_js = require('./chunk-SXCO5HHN.js');
4
4
  var chunkJWS3RQKN_js = require('./chunk-JWS3RQKN.js');
5
- var chunkWGLJ32FW_js = require('./chunk-WGLJ32FW.js');
5
+ var chunkIZXN663G_js = require('./chunk-IZXN663G.js');
6
6
  var chunkMGLRKGCH_js = require('./chunk-MGLRKGCH.js');
7
7
  var React5 = require('react');
8
8
  var jsxRuntime = require('react/jsx-runtime');
@@ -44,7 +44,7 @@ function CollaborationProvider({
44
44
  canvasHeight,
45
45
  children
46
46
  }) {
47
- const value = chunk3P6O7ZDM_js.useCollaborativeState({
47
+ const value = chunkSXCO5HHN_js.useCollaborativeState({
48
48
  config,
49
49
  canvasWidth,
50
50
  canvasHeight
@@ -250,6 +250,7 @@ function CollaborationStatusIndicator({
250
250
  return /* @__PURE__ */ jsxRuntime.jsxs(
251
251
  "div",
252
252
  {
253
+ role: "status",
253
254
  "data-testid": "collaboration-status",
254
255
  className: "flex items-center gap-1.5",
255
256
  "aria-label": t("pptx.collaboration.statusAriaLabel", {
@@ -472,7 +473,7 @@ function LoadingState({ className }) {
472
473
  return /* @__PURE__ */ jsxRuntime.jsx(
473
474
  "div",
474
475
  {
475
- className: chunk3P6O7ZDM_js.cn(
476
+ className: chunkSXCO5HHN_js.cn(
476
477
  "h-full w-full flex items-center justify-center text-muted-foreground",
477
478
  className
478
479
  ),
@@ -487,7 +488,7 @@ function ErrorState({ className, error }) {
487
488
  return /* @__PURE__ */ jsxRuntime.jsx(
488
489
  "div",
489
490
  {
490
- className: chunk3P6O7ZDM_js.cn(
491
+ className: chunkSXCO5HHN_js.cn(
491
492
  "h-full w-full flex items-center justify-center p-6 text-center text-red-400",
492
493
  className
493
494
  ),
@@ -518,7 +519,7 @@ function ShortcutPanel({ isOpen, onClose }) {
518
519
  }
519
520
  )
520
521
  ] }),
521
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunk3P6O7ZDM_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
522
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunkSXCO5HHN_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
522
523
  "div",
523
524
  {
524
525
  className: "flex items-center justify-between gap-3 rounded bg-muted/80 px-2 py-1.5",
@@ -578,14 +579,14 @@ function AccessibilityPanel({
578
579
  "aria-label": t("pptx.accessibility.reduceMotion"),
579
580
  "aria-checked": reducedMotion ?? false,
580
581
  onClick: onToggleReducedMotion,
581
- className: chunk3P6O7ZDM_js.cn(
582
+ className: chunkSXCO5HHN_js.cn(
582
583
  "relative inline-flex h-5 w-9 items-center rounded-full transition-colors",
583
584
  reducedMotion ? "bg-primary" : "bg-muted-foreground/30"
584
585
  ),
585
586
  children: /* @__PURE__ */ jsxRuntime.jsx(
586
587
  "span",
587
588
  {
588
- className: chunk3P6O7ZDM_js.cn(
589
+ className: chunkSXCO5HHN_js.cn(
589
590
  "inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",
590
591
  reducedMotion ? "translate-x-4" : "translate-x-0.5"
591
592
  )
@@ -604,7 +605,7 @@ function AccessibilityPanel({
604
605
  "div",
605
606
  {
606
607
  role: "listitem",
607
- className: chunk3P6O7ZDM_js.cn(
608
+ className: chunkSXCO5HHN_js.cn(
608
609
  "flex items-start gap-2 rounded px-2 py-1.5 text-xs",
609
610
  /* Severity-based background and text colouring */
610
611
  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"
@@ -725,7 +726,7 @@ function StatusBar({
725
726
  /* @__PURE__ */ jsxRuntime.jsx(
726
727
  "span",
727
728
  {
728
- className: chunk3P6O7ZDM_js.cn(
729
+ className: chunkSXCO5HHN_js.cn(
729
730
  "shrink-0 max-md:hidden",
730
731
  autosaveStatus?.state === "error" ? "text-red-400" : autosaveStatus?.state === "saving" ? "text-yellow-400" : ""
731
732
  ),
@@ -738,7 +739,7 @@ function StatusBar({
738
739
  {
739
740
  type: "button",
740
741
  onClick: onToggleNotes,
741
- className: chunk3P6O7ZDM_js.cn(
742
+ className: chunkSXCO5HHN_js.cn(
742
743
  vb,
743
744
  "flex items-center gap-1 text-[10px]",
744
745
  isNotesExpanded && "text-primary"
@@ -758,7 +759,7 @@ function StatusBar({
758
759
  {
759
760
  type: "button",
760
761
  onClick: () => onSetMode("edit"),
761
- className: chunk3P6O7ZDM_js.cn(vb, mode === "edit" && "text-primary"),
762
+ className: chunkSXCO5HHN_js.cn(vb, mode === "edit" && "text-primary"),
762
763
  title: t("pptx.statusBar.normalView"),
763
764
  "aria-label": t("pptx.statusBar.normalView"),
764
765
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuMonitor, { className: "w-3.5 h-3.5" })
@@ -780,7 +781,7 @@ function StatusBar({
780
781
  {
781
782
  type: "button",
782
783
  onClick: () => onSetMode("present"),
783
- className: chunk3P6O7ZDM_js.cn(vb, mode === "present" && "text-primary"),
784
+ className: chunkSXCO5HHN_js.cn(vb, mode === "present" && "text-primary"),
784
785
  title: t("pptx.statusBar.slideShow"),
785
786
  "aria-label": t("pptx.statusBar.slideShow"),
786
787
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPresentation, { className: "w-3.5 h-3.5" })
@@ -870,7 +871,7 @@ function ResizeHandle({
870
871
  {
871
872
  role: "separator",
872
873
  "aria-orientation": direction,
873
- className: chunk3P6O7ZDM_js.cn(
874
+ className: chunkSXCO5HHN_js.cn(
874
875
  // Outer container: generous hit area for easy clicking.
875
876
  // The visible indicator is rendered via the inner pseudo-element (::after).
876
877
  "relative flex-shrink-0 z-20 group",
@@ -881,7 +882,7 @@ function ResizeHandle({
881
882
  children: /* @__PURE__ */ jsxRuntime.jsx(
882
883
  "div",
883
884
  {
884
- className: chunk3P6O7ZDM_js.cn(
885
+ className: chunkSXCO5HHN_js.cn(
885
886
  "absolute transition-colors",
886
887
  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"
887
888
  )
@@ -918,8 +919,8 @@ function DrawingShapeRenderer({
918
919
  }
919
920
  const drawingW = maxX - minX || 1;
920
921
  const drawingH = maxY - minY || 1;
921
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
922
- const sw = chunk3P6O7ZDM_js.styleStroke(style);
922
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
923
+ const sw = chunkSXCO5HHN_js.styleStroke(style);
923
924
  return /* @__PURE__ */ jsxRuntime.jsx(
924
925
  "svg",
925
926
  {
@@ -928,7 +929,7 @@ function DrawingShapeRenderer({
928
929
  preserveAspectRatio: "xMidYMid meet",
929
930
  "data-testid": "smartart-drawing-shapes",
930
931
  children: shapes.map((shape, i) => {
931
- const fill = shape.fillColor ?? chunk3P6O7ZDM_js.colour(i, palette);
932
+ const fill = shape.fillColor ?? chunkSXCO5HHN_js.colour(i, palette);
932
933
  const relX = shape.x - minX;
933
934
  const relY = shape.y - minY;
934
935
  const rx = shape.shapeType === "roundRect" ? Math.min(shape.width, shape.height) * 0.1 : 0;
@@ -937,10 +938,10 @@ function DrawingShapeRenderer({
937
938
  const rotation = shape.rotation ? `rotate(${shape.rotation} ${relX + shape.width / 2} ${relY + shape.height / 2})` : void 0;
938
939
  const strokeCol = shape.strokeColor ?? (sw > 0 ? "rgba(255,255,255,0.3)" : "none");
939
940
  const strokeW = shape.strokeWidth ?? sw;
940
- const fontSize = shape.fontSize ?? chunk3P6O7ZDM_js.fitFontSize(shape.text ?? "", shape.width * 0.85, shape.height, 14);
941
+ const fontSize = shape.fontSize ?? chunkSXCO5HHN_js.fitFontSize(shape.text ?? "", shape.width * 0.85, shape.height, 14);
941
942
  const nodeId = nodes ? chunkJWS3RQKN_js.resolveDrawingShapeNodeId(shape, i, shapes, nodes) : void 0;
942
943
  const nodeLabel = nodeId ? nodeLabels?.get(nodeId) : void 0;
943
- const groupProps = nodeId ? chunk3P6O7ZDM_js.smartArtNodeGroupProps(nodeId, shadow, nodeLabel) : { style: { filter: shadow } };
944
+ const groupProps = nodeId ? chunkSXCO5HHN_js.smartArtNodeGroupProps(nodeId, shadow, nodeLabel) : { style: { filter: shadow } };
944
945
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { ...groupProps, children: [
945
946
  nodeLabel ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: nodeLabel }) : null,
946
947
  isEllipse ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -958,7 +959,7 @@ function DrawingShapeRenderer({
958
959
  ) : isChevron ? /* @__PURE__ */ jsxRuntime.jsx(
959
960
  "polygon",
960
961
  {
961
- points: chunk3P6O7ZDM_js.chevronPoints(relX, relY, shape.width, shape.height),
962
+ points: chunkSXCO5HHN_js.chevronPoints(relX, relY, shape.width, shape.height),
962
963
  fill,
963
964
  stroke: strokeCol,
964
965
  strokeWidth: strokeW,
@@ -979,11 +980,11 @@ function DrawingShapeRenderer({
979
980
  }
980
981
  ),
981
982
  shape.text ? /* @__PURE__ */ jsxRuntime.jsx(
982
- chunk3P6O7ZDM_js.SmartArtNodeText,
983
+ chunkSXCO5HHN_js.SmartArtNodeText,
983
984
  {
984
985
  x: relX + shape.width / 2,
985
986
  y: relY + shape.height / 2,
986
- text: chunk3P6O7ZDM_js.truncate(shape.text, 40),
987
+ text: chunkSXCO5HHN_js.truncate(shape.text, 40),
987
988
  fill: shape.fontColor ?? "white",
988
989
  fontSize,
989
990
  className: "pointer-events-none"
@@ -999,7 +1000,7 @@ function DrawingShapeRenderer({
999
1000
  function resolveNodeStyle(node, index, palette) {
1000
1001
  const style = node.style;
1001
1002
  return {
1002
- fill: style?.fillColor ?? chunk3P6O7ZDM_js.colour(index, palette),
1003
+ fill: style?.fillColor ?? chunkSXCO5HHN_js.colour(index, palette),
1003
1004
  fontColor: style?.fontColor ?? "white",
1004
1005
  fontWeight: style?.bold ? 700 : void 0,
1005
1006
  fontStyle: style?.italic ? "italic" : void 0,
@@ -1021,8 +1022,8 @@ function ListRenderer({
1021
1022
  const itemH = (usableH - gap * (nodes.length - 1)) / nodes.length;
1022
1023
  const itemW = w - pad * 2;
1023
1024
  const rx = Math.min(6, itemH * 0.15);
1024
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1025
- const sw = chunk3P6O7ZDM_js.styleStroke(style);
1025
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1026
+ const sw = chunkSXCO5HHN_js.styleStroke(style);
1026
1027
  return /* @__PURE__ */ jsxRuntime.jsx(
1027
1028
  "svg",
1028
1029
  {
@@ -1032,13 +1033,13 @@ function ListRenderer({
1032
1033
  "data-testid": "smartart-list",
1033
1034
  children: nodes.map((node, i) => {
1034
1035
  const y = pad + i * (itemH + gap);
1035
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(node.text, itemW * 0.9, itemH, 12);
1036
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(node.text, itemW * 0.9, itemH, 12);
1036
1037
  const ns = resolveNodeStyle(node, i, palette);
1037
1038
  const label = nodeLabels?.get(node.id);
1038
1039
  return /* @__PURE__ */ jsxRuntime.jsxs(
1039
1040
  "g",
1040
1041
  {
1041
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow, label),
1042
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow, label),
1042
1043
  children: [
1043
1044
  label ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: label }) : null,
1044
1045
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1050,17 +1051,17 @@ function ListRenderer({
1050
1051
  height: itemH,
1051
1052
  rx,
1052
1053
  fill: ns.fill,
1053
- opacity: chunk3P6O7ZDM_js.nodeOpacity(i, nodes.length, style),
1054
+ opacity: chunkSXCO5HHN_js.nodeOpacity(i, nodes.length, style),
1054
1055
  stroke: ns.strokeColor ?? (sw > 0 ? "rgba(255,255,255,0.3)" : "none"),
1055
1056
  strokeWidth: sw
1056
1057
  }
1057
1058
  ),
1058
1059
  /* @__PURE__ */ jsxRuntime.jsx(
1059
- chunk3P6O7ZDM_js.SmartArtNodeText,
1060
+ chunkSXCO5HHN_js.SmartArtNodeText,
1060
1061
  {
1061
1062
  x: pad + itemW / 2,
1062
1063
  y: y + itemH / 2,
1063
- text: chunk3P6O7ZDM_js.truncate(node.text, 40),
1064
+ text: chunkSXCO5HHN_js.truncate(node.text, 40),
1064
1065
  fill: ns.fontColor,
1065
1066
  fontWeight: ns.fontWeight,
1066
1067
  fontStyle: ns.fontStyle,
@@ -1092,8 +1093,8 @@ function ProcessRenderer({
1092
1093
  const itemW = (usableW - gap * (nodes.length - 1)) / nodes.length;
1093
1094
  const itemH = Math.min(h - pad * 2, h * 0.6);
1094
1095
  const yMid = h / 2;
1095
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1096
- const sw = chunk3P6O7ZDM_js.styleStroke(style);
1096
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1097
+ const sw = chunkSXCO5HHN_js.styleStroke(style);
1097
1098
  return /* @__PURE__ */ jsxRuntime.jsx(
1098
1099
  "svg",
1099
1100
  {
@@ -1107,13 +1108,13 @@ function ProcessRenderer({
1107
1108
  const isFirst = i === 0;
1108
1109
  const isLast = i === nodes.length - 1;
1109
1110
  const points = isFirst ? `${x},${yMid - halfH} ${x + itemW - chevronDepth},${yMid - halfH} ${x + itemW},${yMid} ${x + itemW - chevronDepth},${yMid + halfH} ${x},${yMid + halfH}` : isLast ? `${x},${yMid - halfH} ${x + itemW},${yMid - halfH} ${x + itemW},${yMid + halfH} ${x},${yMid + halfH} ${x + chevronDepth},${yMid}` : `${x},${yMid - halfH} ${x + itemW - chevronDepth},${yMid - halfH} ${x + itemW},${yMid} ${x + itemW - chevronDepth},${yMid + halfH} ${x},${yMid + halfH} ${x + chevronDepth},${yMid}`;
1110
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(node.text, itemW * 0.7, itemH, 12);
1111
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(node.text, itemW * 0.7, itemH, 12);
1111
1112
  const ns = resolveNodeStyle(node, i, palette);
1112
1113
  const label = nodeLabels?.get(node.id);
1113
1114
  return /* @__PURE__ */ jsxRuntime.jsxs(
1114
1115
  "g",
1115
1116
  {
1116
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow, label),
1117
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow, label),
1117
1118
  children: [
1118
1119
  label ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: label }) : null,
1119
1120
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1121,17 +1122,17 @@ function ProcessRenderer({
1121
1122
  {
1122
1123
  points,
1123
1124
  fill: ns.fill,
1124
- opacity: chunk3P6O7ZDM_js.nodeOpacity(i, nodes.length, style),
1125
+ opacity: chunkSXCO5HHN_js.nodeOpacity(i, nodes.length, style),
1125
1126
  stroke: ns.strokeColor ?? (sw > 0 ? "rgba(255,255,255,0.3)" : "none"),
1126
1127
  strokeWidth: sw
1127
1128
  }
1128
1129
  ),
1129
1130
  /* @__PURE__ */ jsxRuntime.jsx(
1130
- chunk3P6O7ZDM_js.SmartArtNodeText,
1131
+ chunkSXCO5HHN_js.SmartArtNodeText,
1131
1132
  {
1132
1133
  x: x + itemW / 2,
1133
1134
  y: yMid,
1134
- text: chunk3P6O7ZDM_js.truncate(node.text, 25),
1135
+ text: chunkSXCO5HHN_js.truncate(node.text, 25),
1135
1136
  fill: ns.fontColor,
1136
1137
  fontWeight: ns.fontWeight,
1137
1138
  fontStyle: ns.fontStyle,
@@ -1161,8 +1162,8 @@ function CycleRenderer({
1161
1162
  const cy = h / 2;
1162
1163
  const radius = size * 0.35;
1163
1164
  const nodeR = Math.max(size * 0.06, Math.min(size * 0.12, 200 / nodes.length));
1164
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1165
- const sw = chunk3P6O7ZDM_js.styleStroke(style);
1165
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1166
+ const sw = chunkSXCO5HHN_js.styleStroke(style);
1166
1167
  return /* @__PURE__ */ jsxRuntime.jsxs(
1167
1168
  "svg",
1168
1169
  {
@@ -1201,13 +1202,13 @@ function CycleRenderer({
1201
1202
  const angle = i / nodes.length * Math.PI * 2 - Math.PI / 2;
1202
1203
  const nx = cx + radius * Math.cos(angle);
1203
1204
  const ny = cy + radius * Math.sin(angle);
1204
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(node.text, nodeR * 1.4, nodeR * 2, 11);
1205
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(node.text, nodeR * 1.4, nodeR * 2, 11);
1205
1206
  const ns = resolveNodeStyle(node, i, palette);
1206
1207
  const label = nodeLabels?.get(node.id);
1207
1208
  return /* @__PURE__ */ jsxRuntime.jsxs(
1208
1209
  "g",
1209
1210
  {
1210
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow, label),
1211
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow, label),
1211
1212
  children: [
1212
1213
  label ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: label }) : null,
1213
1214
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1217,17 +1218,17 @@ function CycleRenderer({
1217
1218
  cy: ny,
1218
1219
  r: nodeR,
1219
1220
  fill: ns.fill,
1220
- opacity: chunk3P6O7ZDM_js.nodeOpacity(i, nodes.length, style),
1221
+ opacity: chunkSXCO5HHN_js.nodeOpacity(i, nodes.length, style),
1221
1222
  stroke: ns.strokeColor ?? (sw > 0 ? "rgba(255,255,255,0.3)" : "none"),
1222
1223
  strokeWidth: sw
1223
1224
  }
1224
1225
  ),
1225
1226
  /* @__PURE__ */ jsxRuntime.jsx(
1226
- chunk3P6O7ZDM_js.SmartArtNodeText,
1227
+ chunkSXCO5HHN_js.SmartArtNodeText,
1227
1228
  {
1228
1229
  x: nx,
1229
1230
  y: ny,
1230
- text: chunk3P6O7ZDM_js.truncate(node.text, 20),
1231
+ text: chunkSXCO5HHN_js.truncate(node.text, 20),
1231
1232
  fill: ns.fontColor,
1232
1233
  fontWeight: ns.fontWeight,
1233
1234
  fontStyle: ns.fontStyle,
@@ -1262,8 +1263,8 @@ function MatrixRenderer({
1262
1263
  const cellW = (usableW - gap * (cols - 1)) / cols;
1263
1264
  const cellH = (usableH - gap * (rows - 1)) / rows;
1264
1265
  const rx = Math.min(6, Math.min(cellW, cellH) * 0.1);
1265
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1266
- const sw = chunk3P6O7ZDM_js.styleStroke(style);
1266
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1267
+ const sw = chunkSXCO5HHN_js.styleStroke(style);
1267
1268
  return /* @__PURE__ */ jsxRuntime.jsx(
1268
1269
  "svg",
1269
1270
  {
@@ -1276,13 +1277,13 @@ function MatrixRenderer({
1276
1277
  const row = Math.floor(i / cols);
1277
1278
  const x = pad + col * (cellW + gap);
1278
1279
  const y = pad + row * (cellH + gap);
1279
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(node.text, cellW * 0.85, cellH, 12);
1280
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(node.text, cellW * 0.85, cellH, 12);
1280
1281
  const ns = resolveNodeStyle(node, i, palette);
1281
1282
  const label = nodeLabels?.get(node.id);
1282
1283
  return /* @__PURE__ */ jsxRuntime.jsxs(
1283
1284
  "g",
1284
1285
  {
1285
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow, label),
1286
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow, label),
1286
1287
  children: [
1287
1288
  label ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: label }) : null,
1288
1289
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1294,17 +1295,17 @@ function MatrixRenderer({
1294
1295
  height: cellH,
1295
1296
  rx,
1296
1297
  fill: ns.fill,
1297
- opacity: chunk3P6O7ZDM_js.nodeOpacity(i, nodes.length, style),
1298
+ opacity: chunkSXCO5HHN_js.nodeOpacity(i, nodes.length, style),
1298
1299
  stroke: ns.strokeColor ?? (sw > 0 ? "rgba(255,255,255,0.3)" : "none"),
1299
1300
  strokeWidth: sw
1300
1301
  }
1301
1302
  ),
1302
1303
  /* @__PURE__ */ jsxRuntime.jsx(
1303
- chunk3P6O7ZDM_js.SmartArtNodeText,
1304
+ chunkSXCO5HHN_js.SmartArtNodeText,
1304
1305
  {
1305
1306
  x: x + cellW / 2,
1306
1307
  y: y + cellH / 2,
1307
- text: chunk3P6O7ZDM_js.truncate(node.text, 30),
1308
+ text: chunkSXCO5HHN_js.truncate(node.text, 30),
1308
1309
  fill: ns.fontColor,
1309
1310
  fontWeight: ns.fontWeight ?? 500,
1310
1311
  fontStyle: ns.fontStyle,
@@ -1333,8 +1334,8 @@ function PyramidRenderer({
1333
1334
  const usableH = h - pad * 2;
1334
1335
  const bandH = (usableH - gap * (nodes.length - 1)) / nodes.length;
1335
1336
  const maxW = w - pad * 2;
1336
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1337
- const sw = chunk3P6O7ZDM_js.styleStroke(style);
1337
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1338
+ const sw = chunkSXCO5HHN_js.styleStroke(style);
1338
1339
  return /* @__PURE__ */ jsxRuntime.jsx(
1339
1340
  "svg",
1340
1341
  {
@@ -1358,28 +1359,28 @@ function PyramidRenderer({
1358
1359
  `${bottomRight},${y + bandH}`,
1359
1360
  `${bottomLeft},${y + bandH}`
1360
1361
  ].join(" ");
1361
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(node.text, topW * 0.85, bandH, 12);
1362
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(node.text, topW * 0.85, bandH, 12);
1362
1363
  return /* @__PURE__ */ jsxRuntime.jsxs(
1363
1364
  "g",
1364
1365
  {
1365
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow),
1366
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow),
1366
1367
  children: [
1367
1368
  /* @__PURE__ */ jsxRuntime.jsx(
1368
1369
  "polygon",
1369
1370
  {
1370
1371
  points,
1371
- fill: chunk3P6O7ZDM_js.colour(i, palette),
1372
- opacity: chunk3P6O7ZDM_js.nodeOpacity(i, nodes.length, style),
1372
+ fill: chunkSXCO5HHN_js.colour(i, palette),
1373
+ opacity: chunkSXCO5HHN_js.nodeOpacity(i, nodes.length, style),
1373
1374
  stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
1374
1375
  strokeWidth: sw
1375
1376
  }
1376
1377
  ),
1377
1378
  /* @__PURE__ */ jsxRuntime.jsx(
1378
- chunk3P6O7ZDM_js.SmartArtNodeText,
1379
+ chunkSXCO5HHN_js.SmartArtNodeText,
1379
1380
  {
1380
1381
  x: w / 2,
1381
1382
  y: y + bandH / 2,
1382
- text: chunk3P6O7ZDM_js.truncate(node.text, 30),
1383
+ text: chunkSXCO5HHN_js.truncate(node.text, 30),
1383
1384
  fill: "white",
1384
1385
  fontSize,
1385
1386
  className: "pointer-events-none"
@@ -1401,7 +1402,7 @@ function VennRenderer({
1401
1402
  }) {
1402
1403
  const w = element.width;
1403
1404
  const h = element.height;
1404
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1405
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1405
1406
  if (nodes.length <= 4) {
1406
1407
  const cx = w / 2;
1407
1408
  const cy2 = h / 2;
@@ -1418,19 +1419,19 @@ function VennRenderer({
1418
1419
  const angle = i / nodes.length * Math.PI * 2 - Math.PI / 2;
1419
1420
  const nx = cx + spread * Math.cos(angle);
1420
1421
  const ny = cy2 + spread * Math.sin(angle);
1421
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(node.text, r2 * 1.2, r2 * 2, 11);
1422
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(node.text, r2 * 1.2, r2 * 2, 11);
1422
1423
  return /* @__PURE__ */ jsxRuntime.jsxs(
1423
1424
  "g",
1424
1425
  {
1425
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow),
1426
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow),
1426
1427
  children: [
1427
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: nx, cy: ny, r: r2, fill: chunk3P6O7ZDM_js.colour(i, palette), opacity: 0.35 }),
1428
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: nx, cy: ny, r: r2, fill: chunkSXCO5HHN_js.colour(i, palette), opacity: 0.35 }),
1428
1429
  /* @__PURE__ */ jsxRuntime.jsx(
1429
- chunk3P6O7ZDM_js.SmartArtNodeText,
1430
+ chunkSXCO5HHN_js.SmartArtNodeText,
1430
1431
  {
1431
1432
  x: nx,
1432
1433
  y: ny,
1433
- text: chunk3P6O7ZDM_js.truncate(node.text, 20),
1434
+ text: chunkSXCO5HHN_js.truncate(node.text, 20),
1434
1435
  fill: "white",
1435
1436
  fontSize,
1436
1437
  fontWeight: "bold",
@@ -1459,19 +1460,19 @@ function VennRenderer({
1459
1460
  "data-testid": "smartart-venn",
1460
1461
  children: nodes.map((node, i) => {
1461
1462
  const nx = offsetX + i * (r * 2 - overlap);
1462
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(node.text, r * 1.2, r * 2, 10);
1463
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(node.text, r * 1.2, r * 2, 10);
1463
1464
  return /* @__PURE__ */ jsxRuntime.jsxs(
1464
1465
  "g",
1465
1466
  {
1466
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow),
1467
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow),
1467
1468
  children: [
1468
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: nx, cy, r, fill: chunk3P6O7ZDM_js.colour(i, palette), opacity: 0.35 }),
1469
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: nx, cy, r, fill: chunkSXCO5HHN_js.colour(i, palette), opacity: 0.35 }),
1469
1470
  /* @__PURE__ */ jsxRuntime.jsx(
1470
- chunk3P6O7ZDM_js.SmartArtNodeText,
1471
+ chunkSXCO5HHN_js.SmartArtNodeText,
1471
1472
  {
1472
1473
  x: nx,
1473
1474
  y: cy,
1474
- text: chunk3P6O7ZDM_js.truncate(node.text, 20),
1475
+ text: chunkSXCO5HHN_js.truncate(node.text, 20),
1475
1476
  fill: "white",
1476
1477
  fontSize,
1477
1478
  fontWeight: "bold",
@@ -1497,7 +1498,7 @@ function FunnelRenderer({
1497
1498
  const pad = 8;
1498
1499
  const usableW = w - pad * 2;
1499
1500
  const stageH = (h - pad * 2) / nodes.length;
1500
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1501
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1501
1502
  return /* @__PURE__ */ jsxRuntime.jsx(
1502
1503
  "svg",
1503
1504
  {
@@ -1519,26 +1520,26 @@ function FunnelRenderer({
1519
1520
  `${bottomRight},${y + stageH}`,
1520
1521
  `${bottomLeft},${y + stageH}`
1521
1522
  ].join(" ");
1522
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(node.text, topWidth * 0.85, stageH, 11);
1523
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(node.text, topWidth * 0.85, stageH, 11);
1523
1524
  return /* @__PURE__ */ jsxRuntime.jsxs(
1524
1525
  "g",
1525
1526
  {
1526
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow),
1527
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow),
1527
1528
  children: [
1528
1529
  /* @__PURE__ */ jsxRuntime.jsx(
1529
1530
  "polygon",
1530
1531
  {
1531
1532
  points,
1532
- fill: chunk3P6O7ZDM_js.colour(i, palette),
1533
- opacity: chunk3P6O7ZDM_js.nodeOpacity(i, nodes.length, style)
1533
+ fill: chunkSXCO5HHN_js.colour(i, palette),
1534
+ opacity: chunkSXCO5HHN_js.nodeOpacity(i, nodes.length, style)
1534
1535
  }
1535
1536
  ),
1536
1537
  /* @__PURE__ */ jsxRuntime.jsx(
1537
- chunk3P6O7ZDM_js.SmartArtNodeText,
1538
+ chunkSXCO5HHN_js.SmartArtNodeText,
1538
1539
  {
1539
1540
  x: w / 2,
1540
1541
  y: y + stageH / 2,
1541
- text: chunk3P6O7ZDM_js.truncate(node.text, 30),
1542
+ text: chunkSXCO5HHN_js.truncate(node.text, 30),
1542
1543
  fill: "white",
1543
1544
  fontSize,
1544
1545
  className: "pointer-events-none"
@@ -1565,7 +1566,7 @@ function TargetRenderer({
1565
1566
  const maxR = Math.min(cx - 8, cy - 8);
1566
1567
  const fontSize = Math.max(7, Math.min(10, maxR / (nodes.length + 1)));
1567
1568
  const labelX = cx + maxR + 8;
1568
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1569
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1569
1570
  return /* @__PURE__ */ jsxRuntime.jsx(
1570
1571
  "svg",
1571
1572
  {
@@ -1578,7 +1579,7 @@ function TargetRenderer({
1578
1579
  return /* @__PURE__ */ jsxRuntime.jsxs(
1579
1580
  "g",
1580
1581
  {
1581
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow),
1582
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow),
1582
1583
  children: [
1583
1584
  /* @__PURE__ */ jsxRuntime.jsx(
1584
1585
  "circle",
@@ -1586,8 +1587,8 @@ function TargetRenderer({
1586
1587
  cx,
1587
1588
  cy,
1588
1589
  r: Math.max(r, 4),
1589
- fill: chunk3P6O7ZDM_js.colour(i, palette),
1590
- opacity: chunk3P6O7ZDM_js.nodeOpacity(i, nodes.length, style)
1590
+ fill: chunkSXCO5HHN_js.colour(i, palette),
1591
+ opacity: chunkSXCO5HHN_js.nodeOpacity(i, nodes.length, style)
1591
1592
  }
1592
1593
  ),
1593
1594
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1597,7 +1598,7 @@ function TargetRenderer({
1597
1598
  y1: cy,
1598
1599
  x2: labelX - 2,
1599
1600
  y2: 8 + i * (fontSize + 6),
1600
- stroke: chunk3P6O7ZDM_js.colour(i, palette),
1601
+ stroke: chunkSXCO5HHN_js.colour(i, palette),
1601
1602
  strokeWidth: 1,
1602
1603
  opacity: 0.6
1603
1604
  }
@@ -1609,10 +1610,10 @@ function TargetRenderer({
1609
1610
  y: 8 + i * (fontSize + 6) + fontSize / 2,
1610
1611
  textAnchor: "start",
1611
1612
  dominantBaseline: "central",
1612
- fill: chunk3P6O7ZDM_js.colour(i, palette),
1613
+ fill: chunkSXCO5HHN_js.colour(i, palette),
1613
1614
  fontSize,
1614
1615
  className: "pointer-events-none",
1615
- children: chunk3P6O7ZDM_js.truncate(node.text, 30)
1616
+ children: chunkSXCO5HHN_js.truncate(node.text, 30)
1616
1617
  }
1617
1618
  )
1618
1619
  ]
@@ -1629,12 +1630,12 @@ function HierarchyRenderer({
1629
1630
  palette,
1630
1631
  style
1631
1632
  }) {
1632
- const roots = chunk3P6O7ZDM_js.buildTree(nodes);
1633
+ const roots = chunkSXCO5HHN_js.buildTree(nodes);
1633
1634
  if (roots.length === 0) {
1634
1635
  return /* @__PURE__ */ jsxRuntime.jsx(ListRenderer, { element, nodes, palette, style });
1635
1636
  }
1636
- const totalLeaves = roots.reduce((s, r) => s + chunk3P6O7ZDM_js.treeWidth(r), 0);
1637
- const depth = Math.max(...roots.map(chunk3P6O7ZDM_js.treeDepth));
1637
+ const totalLeaves = roots.reduce((s, r) => s + chunkSXCO5HHN_js.treeWidth(r), 0);
1638
+ const depth = Math.max(...roots.map(chunkSXCO5HHN_js.treeDepth));
1638
1639
  const svgW = element.width;
1639
1640
  const svgH = element.height;
1640
1641
  const cellW = svgW / totalLeaves;
@@ -1642,24 +1643,24 @@ function HierarchyRenderer({
1642
1643
  const boxW = Math.min(cellW * 0.8, 140);
1643
1644
  const boxH = Math.min(cellH * 0.4, 36);
1644
1645
  const rx = Math.min(6, boxH * 0.15);
1645
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1646
- const sw = chunk3P6O7ZDM_js.styleStroke(style);
1646
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1647
+ const sw = chunkSXCO5HHN_js.styleStroke(style);
1647
1648
  const elements = [];
1648
1649
  let colourIdx = 0;
1649
1650
  function renderTreeNode(t, xOffset, level) {
1650
- const w = chunk3P6O7ZDM_js.treeWidth(t);
1651
+ const w = chunkSXCO5HHN_js.treeWidth(t);
1651
1652
  const nodeCx = (xOffset + w / 2) * cellW;
1652
1653
  const nodeCy = level * cellH + cellH / 2;
1653
1654
  const ci = colourIdx++;
1654
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(t.node.text, boxW * 0.9, boxH, 11);
1655
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(t.node.text, boxW * 0.9, boxH, 11);
1655
1656
  for (const child of t.children) {
1656
- const childW = chunk3P6O7ZDM_js.treeWidth(child);
1657
+ const childW = chunkSXCO5HHN_js.treeWidth(child);
1657
1658
  let childOffset2 = xOffset;
1658
1659
  for (const c of t.children) {
1659
1660
  if (c === child) {
1660
1661
  break;
1661
1662
  }
1662
- childOffset2 += chunk3P6O7ZDM_js.treeWidth(c);
1663
+ childOffset2 += chunkSXCO5HHN_js.treeWidth(c);
1663
1664
  }
1664
1665
  const childCx = (childOffset2 + childW / 2) * cellW;
1665
1666
  const childCy = (level + 1) * cellH + cellH / 2;
@@ -1682,7 +1683,7 @@ function HierarchyRenderer({
1682
1683
  /* @__PURE__ */ jsxRuntime.jsxs(
1683
1684
  "g",
1684
1685
  {
1685
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(t.node.id, shadow),
1686
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(t.node.id, shadow),
1686
1687
  children: [
1687
1688
  /* @__PURE__ */ jsxRuntime.jsx(
1688
1689
  "rect",
@@ -1692,18 +1693,18 @@ function HierarchyRenderer({
1692
1693
  width: boxW,
1693
1694
  height: boxH,
1694
1695
  rx,
1695
- fill: chunk3P6O7ZDM_js.colour(ci, palette),
1696
- opacity: chunk3P6O7ZDM_js.nodeOpacity(ci, nodes.length, style),
1696
+ fill: chunkSXCO5HHN_js.colour(ci, palette),
1697
+ opacity: chunkSXCO5HHN_js.nodeOpacity(ci, nodes.length, style),
1697
1698
  stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
1698
1699
  strokeWidth: sw
1699
1700
  }
1700
1701
  ),
1701
1702
  /* @__PURE__ */ jsxRuntime.jsx(
1702
- chunk3P6O7ZDM_js.SmartArtNodeText,
1703
+ chunkSXCO5HHN_js.SmartArtNodeText,
1703
1704
  {
1704
1705
  x: nodeCx,
1705
1706
  y: nodeCy,
1706
- text: chunk3P6O7ZDM_js.truncate(t.node.text, 40),
1707
+ text: chunkSXCO5HHN_js.truncate(t.node.text, 40),
1707
1708
  fill: "white",
1708
1709
  fontSize,
1709
1710
  className: "pointer-events-none"
@@ -1717,7 +1718,7 @@ function HierarchyRenderer({
1717
1718
  let childOffset = xOffset;
1718
1719
  for (const child of t.children) {
1719
1720
  renderTreeNode(child, childOffset, level + 1);
1720
- childOffset += chunk3P6O7ZDM_js.treeWidth(child);
1721
+ childOffset += chunkSXCO5HHN_js.treeWidth(child);
1721
1722
  }
1722
1723
  return w;
1723
1724
  }
@@ -1752,7 +1753,7 @@ function GearRenderer({
1752
1753
  const gearR = Math.min(spacing * 0.4, h * 0.35);
1753
1754
  const innerR = gearR * 0.7;
1754
1755
  const teethCount = 8;
1755
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1756
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1756
1757
  return /* @__PURE__ */ jsxRuntime.jsxs(
1757
1758
  "svg",
1758
1759
  {
@@ -1764,27 +1765,27 @@ function GearRenderer({
1764
1765
  gearNodes.map((node, i) => {
1765
1766
  const gx = spacing * (i + 1);
1766
1767
  const gy = h / 2 + (i % 2 === 0 ? 0 : gearR * 0.35);
1767
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(node.text, innerR * 1.2, innerR * 2, 11);
1768
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(node.text, innerR * 1.2, innerR * 2, 11);
1768
1769
  return /* @__PURE__ */ jsxRuntime.jsxs(
1769
1770
  "g",
1770
1771
  {
1771
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow),
1772
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow),
1772
1773
  children: [
1773
1774
  /* @__PURE__ */ jsxRuntime.jsx(
1774
1775
  "path",
1775
1776
  {
1776
- d: chunk3P6O7ZDM_js.gearPath(gx, gy, gearR, innerR, teethCount),
1777
- fill: chunk3P6O7ZDM_js.colour(i, palette),
1778
- opacity: chunk3P6O7ZDM_js.nodeOpacity(i, nodes.length, style)
1777
+ d: chunkSXCO5HHN_js.gearPath(gx, gy, gearR, innerR, teethCount),
1778
+ fill: chunkSXCO5HHN_js.colour(i, palette),
1779
+ opacity: chunkSXCO5HHN_js.nodeOpacity(i, nodes.length, style)
1779
1780
  }
1780
1781
  ),
1781
1782
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: gx, cy: gy, r: innerR * 0.5, fill: "white", opacity: 0.25 }),
1782
1783
  /* @__PURE__ */ jsxRuntime.jsx(
1783
- chunk3P6O7ZDM_js.SmartArtNodeText,
1784
+ chunkSXCO5HHN_js.SmartArtNodeText,
1784
1785
  {
1785
1786
  x: gx,
1786
1787
  y: gy,
1787
- text: chunk3P6O7ZDM_js.truncate(node.text, 20),
1788
+ text: chunkSXCO5HHN_js.truncate(node.text, 20),
1788
1789
  fill: "white",
1789
1790
  fontSize,
1790
1791
  fontWeight: "bold",
@@ -1806,8 +1807,8 @@ function GearRenderer({
1806
1807
  cx: lx,
1807
1808
  cy: ly,
1808
1809
  r: 3,
1809
- fill: chunk3P6O7ZDM_js.colour(gearCount + i, palette),
1810
- opacity: chunk3P6O7ZDM_js.nodeOpacity(gearCount + i, nodes.length, style)
1810
+ fill: chunkSXCO5HHN_js.colour(gearCount + i, palette),
1811
+ opacity: chunkSXCO5HHN_js.nodeOpacity(gearCount + i, nodes.length, style)
1811
1812
  }
1812
1813
  ),
1813
1814
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1817,10 +1818,10 @@ function GearRenderer({
1817
1818
  y: ly,
1818
1819
  textAnchor: "start",
1819
1820
  dominantBaseline: "central",
1820
- fill: chunk3P6O7ZDM_js.colour(gearCount + i, palette),
1821
+ fill: chunkSXCO5HHN_js.colour(gearCount + i, palette),
1821
1822
  fontSize: 10,
1822
1823
  className: "pointer-events-none",
1823
- children: chunk3P6O7ZDM_js.truncate(node.text, 30)
1824
+ children: chunkSXCO5HHN_js.truncate(node.text, 30)
1824
1825
  }
1825
1826
  )
1826
1827
  ] }, `${element.id}-gear-extra-${node.id}-${i}`);
@@ -1844,7 +1845,7 @@ function TimelineRenderer({
1844
1845
  const lineLen = lineEndX - lineStartX;
1845
1846
  const dotR = Math.max(4, Math.min(8, lineLen / (nodes.length * 4)));
1846
1847
  const labelOffset = Math.min(h * 0.28, 40);
1847
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1848
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1848
1849
  return /* @__PURE__ */ jsxRuntime.jsxs(
1849
1850
  "svg",
1850
1851
  {
@@ -1866,11 +1867,11 @@ function TimelineRenderer({
1866
1867
  const above = i % 2 === 0;
1867
1868
  const textY = above ? lineY - labelOffset : lineY + labelOffset;
1868
1869
  const stemEndY = above ? lineY - dotR - 2 : lineY + dotR + 2;
1869
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(node.text, lineLen / nodes.length * 0.9, labelOffset, 10);
1870
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(node.text, lineLen / nodes.length * 0.9, labelOffset, 10);
1870
1871
  return /* @__PURE__ */ jsxRuntime.jsxs(
1871
1872
  "g",
1872
1873
  {
1873
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow),
1874
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow),
1874
1875
  children: [
1875
1876
  /* @__PURE__ */ jsxRuntime.jsx(
1876
1877
  "line",
@@ -1879,7 +1880,7 @@ function TimelineRenderer({
1879
1880
  y1: stemEndY,
1880
1881
  x2: x,
1881
1882
  y2: textY + (above ? fontSize : -fontSize),
1882
- stroke: chunk3P6O7ZDM_js.colour(i, palette),
1883
+ stroke: chunkSXCO5HHN_js.colour(i, palette),
1883
1884
  strokeWidth: 1,
1884
1885
  opacity: 0.5
1885
1886
  }
@@ -1890,17 +1891,17 @@ function TimelineRenderer({
1890
1891
  cx: x,
1891
1892
  cy: lineY,
1892
1893
  r: dotR,
1893
- fill: chunk3P6O7ZDM_js.colour(i, palette),
1894
- opacity: chunk3P6O7ZDM_js.nodeOpacity(i, nodes.length, style)
1894
+ fill: chunkSXCO5HHN_js.colour(i, palette),
1895
+ opacity: chunkSXCO5HHN_js.nodeOpacity(i, nodes.length, style)
1895
1896
  }
1896
1897
  ),
1897
1898
  /* @__PURE__ */ jsxRuntime.jsx(
1898
- chunk3P6O7ZDM_js.SmartArtNodeText,
1899
+ chunkSXCO5HHN_js.SmartArtNodeText,
1899
1900
  {
1900
- text: chunk3P6O7ZDM_js.truncate(node.text, 20) ?? "",
1901
+ text: chunkSXCO5HHN_js.truncate(node.text, 20) ?? "",
1901
1902
  x,
1902
1903
  y: textY,
1903
- fill: chunk3P6O7ZDM_js.colour(i, palette),
1904
+ fill: chunkSXCO5HHN_js.colour(i, palette),
1904
1905
  fontSize,
1905
1906
  anchor: above ? "bottom" : "top",
1906
1907
  className: "pointer-events-none"
@@ -1933,8 +1934,8 @@ function BendingProcessRenderer({
1933
1934
  const boxH = Math.min(cellH * 0.6, 32);
1934
1935
  const rx = Math.min(5, boxH * 0.15);
1935
1936
  const arrowSize = 6;
1936
- const shadow = chunk3P6O7ZDM_js.styleShadow(style);
1937
- const sw = chunk3P6O7ZDM_js.styleStroke(style);
1937
+ const shadow = chunkSXCO5HHN_js.styleShadow(style);
1938
+ const sw = chunkSXCO5HHN_js.styleStroke(style);
1938
1939
  return /* @__PURE__ */ jsxRuntime.jsx(
1939
1940
  "svg",
1940
1941
  {
@@ -1948,7 +1949,7 @@ function BendingProcessRenderer({
1948
1949
  const col = row % 2 === 0 ? colInRow : COLS - 1 - colInRow;
1949
1950
  const nodeCx = padX + col * cellW + cellW / 2;
1950
1951
  const nodeCy = padY + row * cellH + cellH / 2;
1951
- const fontSize = chunk3P6O7ZDM_js.fitFontSize(node.text, boxW * 0.85, boxH, 10);
1952
+ const fontSize = chunkSXCO5HHN_js.fitFontSize(node.text, boxW * 0.85, boxH, 10);
1952
1953
  let arrow = null;
1953
1954
  if (i < nodes.length - 1) {
1954
1955
  const nextRow = Math.floor((i + 1) / COLS);
@@ -2008,7 +2009,7 @@ function BendingProcessRenderer({
2008
2009
  return /* @__PURE__ */ jsxRuntime.jsxs(
2009
2010
  "g",
2010
2011
  {
2011
- ...chunk3P6O7ZDM_js.smartArtNodeGroupProps(node.id, shadow),
2012
+ ...chunkSXCO5HHN_js.smartArtNodeGroupProps(node.id, shadow),
2012
2013
  children: [
2013
2014
  arrow,
2014
2015
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -2019,18 +2020,18 @@ function BendingProcessRenderer({
2019
2020
  width: boxW,
2020
2021
  height: boxH,
2021
2022
  rx,
2022
- fill: chunk3P6O7ZDM_js.colour(i, palette),
2023
- opacity: chunk3P6O7ZDM_js.nodeOpacity(i, nodes.length, style),
2023
+ fill: chunkSXCO5HHN_js.colour(i, palette),
2024
+ opacity: chunkSXCO5HHN_js.nodeOpacity(i, nodes.length, style),
2024
2025
  stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
2025
2026
  strokeWidth: sw
2026
2027
  }
2027
2028
  ),
2028
2029
  /* @__PURE__ */ jsxRuntime.jsx(
2029
- chunk3P6O7ZDM_js.SmartArtNodeText,
2030
+ chunkSXCO5HHN_js.SmartArtNodeText,
2030
2031
  {
2031
2032
  x: nodeCx,
2032
2033
  y: nodeCy,
2033
- text: chunk3P6O7ZDM_js.truncate(node.text, 20),
2034
+ text: chunkSXCO5HHN_js.truncate(node.text, 20),
2034
2035
  fill: "white",
2035
2036
  fontSize,
2036
2037
  className: "pointer-events-none"
@@ -2339,8 +2340,8 @@ function SmartArtRendererImpl({
2339
2340
  }
2340
2341
  );
2341
2342
  }
2342
- const palette = chunk3P6O7ZDM_js.resolvePalette(element);
2343
- const style = chunk3P6O7ZDM_js.resolveStyle(element);
2343
+ const palette = chunkSXCO5HHN_js.resolvePalette(element);
2344
+ const style = chunkSXCO5HHN_js.resolveStyle(element);
2344
2345
  const a11y = chunkJWS3RQKN_js.buildSmartArtA11y(smartArtData);
2345
2346
  const nodeLabels = new Map(a11y.nodes.map((n) => [n.id, n.label]));
2346
2347
  const editable = canEdit && Boolean(onUpdateElement);
@@ -2353,7 +2354,7 @@ function SmartArtRendererImpl({
2353
2354
  const reflowed = chunkJWS3RQKN_js.rebuildDrawingShapesIfCleared(
2354
2355
  updated,
2355
2356
  smartArtData.layout,
2356
- chunk3P6O7ZDM_js.resolveSmartArtDataPalette(updated),
2357
+ chunkSXCO5HHN_js.resolveSmartArtDataPalette(updated),
2357
2358
  style,
2358
2359
  element.id,
2359
2360
  box
@@ -2370,7 +2371,7 @@ function SmartArtRendererImpl({
2370
2371
  const reflowed = chunkJWS3RQKN_js.rebuildDrawingShapesIfCleared(
2371
2372
  next,
2372
2373
  smartArtData.layout,
2373
- chunk3P6O7ZDM_js.resolveSmartArtDataPalette(next),
2374
+ chunkSXCO5HHN_js.resolveSmartArtDataPalette(next),
2374
2375
  style,
2375
2376
  element.id,
2376
2377
  box
@@ -2393,7 +2394,7 @@ function SmartArtRendererImpl({
2393
2394
  );
2394
2395
  } else {
2395
2396
  const namedLayout = smartArtData.layout;
2396
- const layoutType = namedLayout ? chunk3P6O7ZDM_js.layoutToCategory(namedLayout) : (smartArtData.resolvedLayoutType ?? smartArtData.layoutType ?? "list").toLowerCase();
2397
+ const layoutType = namedLayout ? chunkSXCO5HHN_js.layoutToCategory(namedLayout) : (smartArtData.resolvedLayoutType ?? smartArtData.layoutType ?? "list").toLowerCase();
2397
2398
  content = renderLayout(layoutType, element, nodes, palette, style, nodeLabels);
2398
2399
  }
2399
2400
  const body = editable ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -2407,7 +2408,7 @@ function SmartArtRendererImpl({
2407
2408
  children: content
2408
2409
  }
2409
2410
  ) : content;
2410
- return chunk3P6O7ZDM_js.wrapChrome(chrome, body, className, { role: a11y.role, label: a11y.label });
2411
+ return chunkSXCO5HHN_js.wrapChrome(chrome, body, className, { role: a11y.role, label: a11y.label });
2411
2412
  }
2412
2413
  function renderLayout(layoutType, element, nodes, palette, style, nodeLabels) {
2413
2414
  if (layoutType.includes("hierarchy") || layoutType.includes("org")) {
@@ -2471,34 +2472,34 @@ function renderLayout(layoutType, element, nodes, palette, style, nodeLabels) {
2471
2472
  return /* @__PURE__ */ jsxRuntime.jsx(BendingProcessRenderer, { element, nodes, palette, style });
2472
2473
  }
2473
2474
  if (layoutType.includes("stepdown")) {
2474
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunk3P6O7ZDM_js.renderStepDownProcess(element, nodes, palette, style) });
2475
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkSXCO5HHN_js.renderStepDownProcess(element, nodes, palette, style) });
2475
2476
  }
2476
2477
  if (layoutType.includes("alternatingflow") || layoutType.includes("alternating")) {
2477
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunk3P6O7ZDM_js.renderAlternatingFlow(element, nodes, palette, style) });
2478
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkSXCO5HHN_js.renderAlternatingFlow(element, nodes, palette, style) });
2478
2479
  }
2479
2480
  if (layoutType.includes("descending")) {
2480
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunk3P6O7ZDM_js.renderDescendingProcess(element, nodes, palette, style) });
2481
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkSXCO5HHN_js.renderDescendingProcess(element, nodes, palette, style) });
2481
2482
  }
2482
2483
  if (layoutType.includes("pictureaccent")) {
2483
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunk3P6O7ZDM_js.renderPictureAccentList(element, nodes, palette, style) });
2484
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkSXCO5HHN_js.renderPictureAccentList(element, nodes, palette, style) });
2484
2485
  }
2485
2486
  if (layoutType.includes("verticalblock")) {
2486
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunk3P6O7ZDM_js.renderVerticalBlockList(element, nodes, palette, style) });
2487
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkSXCO5HHN_js.renderVerticalBlockList(element, nodes, palette, style) });
2487
2488
  }
2488
2489
  if (layoutType.includes("grouped")) {
2489
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunk3P6O7ZDM_js.renderGroupedList(element, nodes, palette, style) });
2490
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkSXCO5HHN_js.renderGroupedList(element, nodes, palette, style) });
2490
2491
  }
2491
2492
  if (layoutType.includes("pyramidlist")) {
2492
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunk3P6O7ZDM_js.renderPyramidList(element, nodes, palette, style) });
2493
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkSXCO5HHN_js.renderPyramidList(element, nodes, palette, style) });
2493
2494
  }
2494
2495
  if (layoutType.includes("horizontalpicture")) {
2495
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunk3P6O7ZDM_js.renderHorizontalPictureList(element, nodes, palette, style) });
2496
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkSXCO5HHN_js.renderHorizontalPictureList(element, nodes, palette, style) });
2496
2497
  }
2497
2498
  if (layoutType.includes("accentprocess")) {
2498
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunk3P6O7ZDM_js.renderAccentProcess(element, nodes, palette, style) });
2499
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkSXCO5HHN_js.renderAccentProcess(element, nodes, palette, style) });
2499
2500
  }
2500
2501
  if (layoutType.includes("verticalchevron")) {
2501
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunk3P6O7ZDM_js.renderVerticalChevronList(element, nodes, palette, style) });
2502
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkSXCO5HHN_js.renderVerticalChevronList(element, nodes, palette, style) });
2502
2503
  }
2503
2504
  return /* @__PURE__ */ jsxRuntime.jsx(
2504
2505
  ListRenderer,
@@ -2548,14 +2549,14 @@ function ThumbnailTable({
2548
2549
  element,
2549
2550
  textStyle
2550
2551
  }) {
2551
- const parsedTable = chunk3P6O7ZDM_js.parseTableElementData(element, textStyle);
2552
+ const parsedTable = chunkSXCO5HHN_js.parseTableElementData(element, textStyle);
2552
2553
  if (parsedTable) {
2553
2554
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full overflow-hidden pointer-events-none", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full h-full border-collapse table-fixed", children: [
2554
2555
  parsedTable.columnPercentages.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((pct, ci) => /* @__PURE__ */ jsxRuntime.jsx("col", { style: { width: `${pct.toFixed(2)}%` } }, `${element.id}-tc-${ci}`)) }),
2555
2556
  /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: parsedTable.rows.map((row, ri) => {
2556
- const cells = chunk3P6O7ZDM_js.ensureArrayValue(row["a:tc"]);
2557
+ const cells = chunkSXCO5HHN_js.ensureArrayValue(row["a:tc"]);
2557
2558
  const rowHeightRaw = Number.parseInt(String(row["@_h"] || ""), 10);
2558
- const rowHeight = Number.isFinite(rowHeightRaw) && rowHeightRaw > 0 ? Math.max(16, rowHeightRaw / chunk3P6O7ZDM_js.EMU_PER_PX) : void 0;
2559
+ const rowHeight = Number.isFinite(rowHeightRaw) && rowHeightRaw > 0 ? Math.max(16, rowHeightRaw / chunkSXCO5HHN_js.EMU_PER_PX) : void 0;
2559
2560
  return /* @__PURE__ */ jsxRuntime.jsx(
2560
2561
  "tr",
2561
2562
  {
@@ -2570,7 +2571,7 @@ function ThumbnailTable({
2570
2571
  const colSpan = Number.isFinite(gridSpanRaw) && gridSpanRaw > 1 ? gridSpanRaw : void 0;
2571
2572
  const rowSpanRaw = Number.parseInt(String(cell["@_rowSpan"] || ""), 10);
2572
2573
  const rSpan = Number.isFinite(rowSpanRaw) && rowSpanRaw > 1 ? rowSpanRaw : void 0;
2573
- const bandStyle = chunk3P6O7ZDM_js.getTableCellBandStyle(
2574
+ const bandStyle = chunkSXCO5HHN_js.getTableCellBandStyle(
2574
2575
  element,
2575
2576
  ri,
2576
2577
  ci,
@@ -2584,10 +2585,10 @@ function ThumbnailTable({
2584
2585
  colSpan,
2585
2586
  rowSpan: rSpan,
2586
2587
  style: {
2587
- ...chunk3P6O7ZDM_js.extractTableCellStyle(cell, textStyle),
2588
+ ...chunkSXCO5HHN_js.extractTableCellStyle(cell, textStyle),
2588
2589
  ...bandStyle
2589
2590
  },
2590
- children: chunk3P6O7ZDM_js.extractCellText(cell) || "\xA0"
2591
+ children: chunkSXCO5HHN_js.extractCellText(cell) || "\xA0"
2591
2592
  },
2592
2593
  `${element.id}-td-${ri}-${ci}`
2593
2594
  );
@@ -2609,7 +2610,7 @@ function ThumbnailTable({
2609
2610
  if (cell.hMerge || cell.vMerge) {
2610
2611
  return null;
2611
2612
  }
2612
- const bandStyle = chunk3P6O7ZDM_js.getTableCellBandStyle(
2613
+ const bandStyle = chunkSXCO5HHN_js.getTableCellBandStyle(
2613
2614
  element,
2614
2615
  ri,
2615
2616
  ci,
@@ -2623,7 +2624,7 @@ function ThumbnailTable({
2623
2624
  colSpan: cell.gridSpan && cell.gridSpan > 1 ? cell.gridSpan : void 0,
2624
2625
  rowSpan: cell.rowSpan && cell.rowSpan > 1 ? cell.rowSpan : void 0,
2625
2626
  style: {
2626
- ...chunk3P6O7ZDM_js.cellStyleToCss(cell.style),
2627
+ ...chunkSXCO5HHN_js.cellStyleToCss(cell.style),
2627
2628
  ...bandStyle
2628
2629
  },
2629
2630
  children: cell.text || "\xA0"
@@ -2651,7 +2652,7 @@ function ThumbnailChart({ element }) {
2651
2652
  if (!chartData || chartData.series.length === 0) {
2652
2653
  return /* @__PURE__ */ jsxRuntime.jsx(ThumbnailFallbackLabel, { label: "Chart" });
2653
2654
  }
2654
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full pointer-events-none", children: chunk3P6O7ZDM_js.renderChartElement(element) });
2655
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full pointer-events-none", children: chunkSXCO5HHN_js.renderChartElement(element) });
2655
2656
  }
2656
2657
  function SlideThumbnailImpl({
2657
2658
  slide,
@@ -2660,12 +2661,12 @@ function SlideThumbnailImpl({
2660
2661
  }) {
2661
2662
  const safeCanvasWidth = Math.max(canvasSize.width, 1);
2662
2663
  const safeCanvasHeight = Math.max(canvasSize.height, 1);
2663
- const scale = chunk3P6O7ZDM_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeCanvasWidth;
2664
+ const scale = chunkSXCO5HHN_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeCanvasWidth;
2664
2665
  const previewHeight = Math.max(56, Math.round(safeCanvasHeight * scale));
2665
2666
  const previewElements = [...templateElements, ...slide.elements].slice(0, 60);
2666
2667
  const { t } = reactI18next.useTranslation();
2667
2668
  const transitionLabel = slide.transition ? (() => {
2668
- const opt = chunk3P6O7ZDM_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
2669
+ const opt = chunkSXCO5HHN_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
2669
2670
  return opt ? t(opt.i18nKey) : slide.transition.type;
2670
2671
  })() : void 0;
2671
2672
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -2697,31 +2698,31 @@ function SlideThumbnailImpl({
2697
2698
  const elementHeight = Math.max(element.height, 1);
2698
2699
  const elShapeStyle = chunkMGLRKGCH_js.hasShapeProperties(element) ? element.shapeStyle : void 0;
2699
2700
  const hasFill = elShapeStyle?.fillColor !== void 0 && elShapeStyle?.fillColor !== "transparent" || Boolean(chunkJWS3RQKN_js.buildCssGradientFromShapeStyle(elShapeStyle) || elShapeStyle?.fillGradient) || elShapeStyle?.fillMode === "pattern" && Boolean(elShapeStyle.fillPatternPreset);
2700
- const fillColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.fillColor, chunk3P6O7ZDM_js.DEFAULT_FILL_COLOR);
2701
+ const fillColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.fillColor, chunkSXCO5HHN_js.DEFAULT_FILL_COLOR);
2701
2702
  const strokeWidth = Math.max(0, elShapeStyle?.strokeWidth || 0);
2702
- const strokeColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.strokeColor, chunk3P6O7ZDM_js.DEFAULT_STROKE_COLOR);
2703
- const shapeVisualStyle = chunk3P6O7ZDM_js.getShapeVisualStyle(
2703
+ const strokeColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.strokeColor, chunkSXCO5HHN_js.DEFAULT_STROKE_COLOR);
2704
+ const shapeVisualStyle = chunkSXCO5HHN_js.getShapeVisualStyle(
2704
2705
  element,
2705
2706
  hasFill,
2706
2707
  fillColor,
2707
2708
  strokeWidth,
2708
2709
  strokeColor
2709
2710
  );
2710
- const vectorShape = chunk3P6O7ZDM_js.renderVectorShape(
2711
+ const vectorShape = chunkSXCO5HHN_js.renderVectorShape(
2711
2712
  element,
2712
2713
  hasFill,
2713
2714
  fillColor,
2714
2715
  strokeWidth,
2715
2716
  strokeColor
2716
2717
  );
2717
- const fallbackTextColor = element.type === "shape" && hasFill ? "#ffffff" : chunk3P6O7ZDM_js.DEFAULT_TEXT_COLOR;
2718
- const textStyle = chunk3P6O7ZDM_js.getTextStyleForElement(element, fallbackTextColor);
2719
- const imageRenderStyle = chunk3P6O7ZDM_js.getImageRenderStyle(element);
2718
+ const fallbackTextColor = element.type === "shape" && hasFill ? "#ffffff" : chunkSXCO5HHN_js.DEFAULT_TEXT_COLOR;
2719
+ const textStyle = chunkSXCO5HHN_js.getTextStyleForElement(element, fallbackTextColor);
2720
+ const imageRenderStyle = chunkSXCO5HHN_js.getImageRenderStyle(element);
2720
2721
  const canRenderText = chunkJWS3RQKN_js.isEditableTextElement(element);
2721
2722
  const elText = chunkMGLRKGCH_js.hasTextProperties(element) ? element.text : void 0;
2722
2723
  const elTextSegments = chunkMGLRKGCH_js.hasTextProperties(element) ? element.textSegments : void 0;
2723
2724
  const hasText = typeof elText === "string" && elText.trim().length > 0 || (elTextSegments?.length ?? 0) > 0;
2724
- const fallbackLabel = chunk3P6O7ZDM_js.shouldRenderFallbackLabel(element, canRenderText) ? chunkJWS3RQKN_js.getElementLabel(element) : "";
2725
+ const fallbackLabel = chunkSXCO5HHN_js.shouldRenderFallbackLabel(element, canRenderText) ? chunkJWS3RQKN_js.getElementLabel(element) : "";
2725
2726
  return /* @__PURE__ */ jsxRuntime.jsx(
2726
2727
  "div",
2727
2728
  {
@@ -2734,11 +2735,11 @@ function SlideThumbnailImpl({
2734
2735
  transform: chunkJWS3RQKN_js.getElementTransform(element),
2735
2736
  transformOrigin: "center"
2736
2737
  },
2737
- children: (element.type === "picture" || element.type === "image") && (element.svgData || element.imageData) ? chunk3P6O7ZDM_js.isImageTiled(element) ? /* @__PURE__ */ jsxRuntime.jsx(
2738
+ children: (element.type === "picture" || element.type === "image") && (element.svgData || element.imageData) ? chunkSXCO5HHN_js.isImageTiled(element) ? /* @__PURE__ */ jsxRuntime.jsx(
2738
2739
  "div",
2739
2740
  {
2740
2741
  className: "pointer-events-none w-full h-full",
2741
- style: chunk3P6O7ZDM_js.getImageTilingStyle(element)
2742
+ style: chunkSXCO5HHN_js.getImageTilingStyle(element)
2742
2743
  }
2743
2744
  ) : /* @__PURE__ */ jsxRuntime.jsx(
2744
2745
  "img",
@@ -2756,12 +2757,12 @@ function SlideThumbnailImpl({
2756
2757
  {
2757
2758
  className: "w-full h-full whitespace-pre-wrap break-words px-1 py-0.5 leading-[1.3]",
2758
2759
  style: {
2759
- ...chunk3P6O7ZDM_js.getTextLayoutStyle(element),
2760
+ ...chunkSXCO5HHN_js.getTextLayoutStyle(element),
2760
2761
  ...textStyle,
2761
2762
  transform: chunkJWS3RQKN_js.getTextCompensationTransform(element),
2762
2763
  transformOrigin: "center"
2763
2764
  },
2764
- children: chunk3P6O7ZDM_js.renderTextSegments(element, fallbackTextColor)
2765
+ children: chunkSXCO5HHN_js.renderTextSegments(element, fallbackTextColor)
2765
2766
  }
2766
2767
  ),
2767
2768
  !hasText && fallbackLabel.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center text-[10px] text-muted-foreground", children: fallbackLabel })
@@ -3289,7 +3290,7 @@ function ResizeHandles({
3289
3290
  "button",
3290
3291
  {
3291
3292
  type: "button",
3292
- className: chunk3P6O7ZDM_js.cn("absolute z-10 group", posClass, cursor),
3293
+ className: chunkSXCO5HHN_js.cn("absolute z-10 group", posClass, cursor),
3293
3294
  style: peStyle,
3294
3295
  onPointerDown: (e) => handleResizePointer(e, handle),
3295
3296
  onMouseDown: (e) => {
@@ -3307,7 +3308,7 @@ function ResizeHandles({
3307
3308
  "button",
3308
3309
  {
3309
3310
  type: "button",
3310
- className: chunk3P6O7ZDM_js.cn("absolute z-10", posClass, cursor),
3311
+ className: chunkSXCO5HHN_js.cn("absolute z-10", posClass, cursor),
3311
3312
  style: peStyle,
3312
3313
  onPointerDown: (e) => handleResizePointer(e, handle),
3313
3314
  onMouseDown: (e) => {
@@ -3315,7 +3316,7 @@ function ResizeHandles({
3315
3316
  onResizePointerDown(elementId, e, handle);
3316
3317
  },
3317
3318
  children: [
3318
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk3P6O7ZDM_js.cn(sizeClass, "border border-white bg-primary shadow") }),
3319
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkSXCO5HHN_js.cn(sizeClass, "border border-white bg-primary shadow") }),
3319
3320
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -inset-2 max-md:-inset-1" })
3320
3321
  ]
3321
3322
  },
@@ -3394,7 +3395,7 @@ var ConnectorElementRenderer = React5__default.default.memo(
3394
3395
  const viewHeight = Math.max(el.height, 1);
3395
3396
  const ss = shapeEl?.shapeStyle;
3396
3397
  const strokeWidth = Math.max(0, ss?.strokeWidth ?? 2);
3397
- const strokeColor = chunkJWS3RQKN_js.normalizeHexColor(ss?.strokeColor, chunk3P6O7ZDM_js.DEFAULT_STROKE_COLOR);
3398
+ const strokeColor = chunkJWS3RQKN_js.normalizeHexColor(ss?.strokeColor, chunkSXCO5HHN_js.DEFAULT_STROKE_COLOR);
3398
3399
  const strokePaint = chunkJWS3RQKN_js.colorWithOpacity(strokeColor, ss?.strokeOpacity);
3399
3400
  const dashType = chunkJWS3RQKN_js.normalizeStrokeDashType(ss?.strokeDash);
3400
3401
  const dashArray = chunkJWS3RQKN_js.getSvgStrokeDasharray(
@@ -3415,7 +3416,7 @@ var ConnectorElementRenderer = React5__default.default.memo(
3415
3416
  const connectorText = textEl?.text?.trim() ?? "";
3416
3417
  const connectorTextSegments = textEl?.textSegments;
3417
3418
  const connectorTextStyle = textEl?.textStyle;
3418
- const pathGeometry = shapeEl ? chunk3P6O7ZDM_js.getConnectorPathGeometry(shapeEl) : {
3419
+ const pathGeometry = shapeEl ? chunkSXCO5HHN_js.getConnectorPathGeometry(shapeEl) : {
3419
3420
  pathData: `M 0 0 L ${viewWidth} ${viewHeight}`,
3420
3421
  startX: 0,
3421
3422
  startY: 0,
@@ -3424,8 +3425,8 @@ var ConnectorElementRenderer = React5__default.default.memo(
3424
3425
  };
3425
3426
  const hitTargetWidth = Math.max(strokeWidth * 3, 14);
3426
3427
  const selColor = selClr === "blue-400" ? "#60a5fa" : "#3b82f6";
3427
- const lineShadow = chunk3P6O7ZDM_js.buildLineShadowCss(el);
3428
- const lineGlow = chunk3P6O7ZDM_js.buildLineGlowFilter(el);
3428
+ const lineShadow = chunkSXCO5HHN_js.buildLineShadowCss(el);
3429
+ const lineGlow = chunkSXCO5HHN_js.buildLineGlowFilter(el);
3429
3430
  return /* @__PURE__ */ jsxRuntime.jsxs(
3430
3431
  "div",
3431
3432
  {
@@ -3435,8 +3436,8 @@ var ConnectorElementRenderer = React5__default.default.memo(
3435
3436
  style: {
3436
3437
  left: el.x,
3437
3438
  top: el.y,
3438
- width: Math.max(el.width, chunk3P6O7ZDM_js.MIN_ELEMENT_SIZE),
3439
- height: Math.max(el.height, chunk3P6O7ZDM_js.MIN_ELEMENT_SIZE),
3439
+ width: Math.max(el.width, chunkSXCO5HHN_js.MIN_ELEMENT_SIZE),
3440
+ height: Math.max(el.height, chunkSXCO5HHN_js.MIN_ELEMENT_SIZE),
3440
3441
  transform: chunkJWS3RQKN_js.getElementTransform(el),
3441
3442
  transformOrigin: "center",
3442
3443
  background: "transparent",
@@ -3458,14 +3459,14 @@ var ConnectorElementRenderer = React5__default.default.memo(
3458
3459
  style: { overflow: "visible", pointerEvents: "none" },
3459
3460
  children: [
3460
3461
  /* @__PURE__ */ jsxRuntime.jsxs("defs", { children: [
3461
- chunk3P6O7ZDM_js.renderConnectorMarker(
3462
+ chunkSXCO5HHN_js.renderConnectorMarker(
3462
3463
  startMarkerId,
3463
3464
  startArrow,
3464
3465
  strokePaint,
3465
3466
  ss?.connectorStartArrowWidth,
3466
3467
  ss?.connectorStartArrowLength
3467
3468
  ),
3468
- chunk3P6O7ZDM_js.renderConnectorMarker(
3469
+ chunkSXCO5HHN_js.renderConnectorMarker(
3469
3470
  endMarkerId,
3470
3471
  endArrow,
3471
3472
  strokePaint,
@@ -3610,14 +3611,14 @@ function elementHasTextHyperlink(el) {
3610
3611
  return Boolean(el.textSegments?.some((segment) => Boolean(segment.style?.hyperlink)));
3611
3612
  }
3612
3613
  function renderDagDuotoneFilterForElement(el) {
3613
- if (!chunk3P6O7ZDM_js.hasDagDuotoneEffect(el)) {
3614
+ if (!chunkSXCO5HHN_js.hasDagDuotoneEffect(el)) {
3614
3615
  return null;
3615
3616
  }
3616
3617
  const duotone = el.shapeStyle?.dagDuotone;
3617
3618
  if (!duotone) {
3618
3619
  return null;
3619
3620
  }
3620
- return chunk3P6O7ZDM_js.renderDagDuotoneSvgFilter(el.id, duotone.color1, duotone.color2);
3621
+ return chunkSXCO5HHN_js.renderDagDuotoneSvgFilter(el.id, duotone.color1, duotone.color2);
3621
3622
  }
3622
3623
  function getContainerStyle({
3623
3624
  el,
@@ -3634,12 +3635,12 @@ function getContainerStyle({
3634
3635
  return {
3635
3636
  left: isFullscreenMedia ? 0 : el.x,
3636
3637
  top: isFullscreenMedia ? 0 : el.y,
3637
- width: isFullscreenMedia ? "100%" : Math.max(el.width, chunk3P6O7ZDM_js.MIN_ELEMENT_SIZE),
3638
- height: isFullscreenMedia ? "100%" : Math.max(el.height, chunk3P6O7ZDM_js.MIN_ELEMENT_SIZE),
3638
+ width: isFullscreenMedia ? "100%" : Math.max(el.width, chunkSXCO5HHN_js.MIN_ELEMENT_SIZE),
3639
+ height: isFullscreenMedia ? "100%" : Math.max(el.height, chunkSXCO5HHN_js.MIN_ELEMENT_SIZE),
3639
3640
  transform: isFullscreenMedia ? "none" : chunkJWS3RQKN_js.getElementTransform(el),
3640
3641
  transformOrigin: "center",
3641
3642
  overflow: overflowValue,
3642
- clipPath: isImg && !has3DExtrusion ? chunk3P6O7ZDM_js.getCropShapeClipPath(el) : void 0,
3643
+ clipPath: isImg && !has3DExtrusion ? chunkSXCO5HHN_js.getCropShapeClipPath(el) : void 0,
3643
3644
  zIndex: isFullscreenMedia ? 20 : zIndex,
3644
3645
  opacity,
3645
3646
  visibility: animationState?.visible === false ? "hidden" : "visible",
@@ -3703,13 +3704,13 @@ function getSegmentTspanProps(segment, element, fallbackColor) {
3703
3704
  if (s.strikethrough) {
3704
3705
  decos.push("line-through");
3705
3706
  }
3706
- const fill = s.hyperlink ? chunkJWS3RQKN_js.normalizeHexColor(s.color || element.textStyle?.color, chunk3P6O7ZDM_js.HYPERLINK_COLOR) : chunkJWS3RQKN_js.normalizeHexColor(s.color || element.textStyle?.color, fallbackColor);
3707
+ const fill = s.hyperlink ? chunkJWS3RQKN_js.normalizeHexColor(s.color || element.textStyle?.color, chunkSXCO5HHN_js.HYPERLINK_COLOR) : chunkJWS3RQKN_js.normalizeHexColor(s.color || element.textStyle?.color, fallbackColor);
3707
3708
  return {
3708
3709
  fill,
3709
- fontSize: s.fontSize ?? element.textStyle?.fontSize ?? chunk3P6O7ZDM_js.DEFAULT_TEXT_FONT_SIZE,
3710
+ fontSize: s.fontSize ?? element.textStyle?.fontSize ?? chunkSXCO5HHN_js.DEFAULT_TEXT_FONT_SIZE,
3710
3711
  fontWeight: s.bold ? 700 : 400,
3711
3712
  fontStyle: s.italic ? "italic" : void 0,
3712
- fontFamily: s.fontFamily || element.textStyle?.fontFamily ? chunkMGLRKGCH_js.getSubstituteFontFamily(s.fontFamily || element.textStyle?.fontFamily || "") : chunk3P6O7ZDM_js.DEFAULT_FONT_FAMILY,
3713
+ fontFamily: s.fontFamily || element.textStyle?.fontFamily ? chunkMGLRKGCH_js.getSubstituteFontFamily(s.fontFamily || element.textStyle?.fontFamily || "") : chunkSXCO5HHN_js.DEFAULT_FONT_FAMILY,
3713
3714
  textDecoration: decos.length > 0 ? decos.join(" ") : void 0
3714
3715
  };
3715
3716
  }
@@ -3738,8 +3739,8 @@ function WarpedText({
3738
3739
  const warpAdj2 = textEl.textStyle?.textWarpAdj2;
3739
3740
  const align = textEl.textStyle?.align ?? "center";
3740
3741
  const { startOffset, textAnchor } = getAlignmentProps(align);
3741
- const baseFontSize = textEl.textStyle?.fontSize ?? chunk3P6O7ZDM_js.DEFAULT_TEXT_FONT_SIZE;
3742
- const baseFontFamily = textEl.textStyle?.fontFamily ? chunkMGLRKGCH_js.getSubstituteFontFamily(textEl.textStyle.fontFamily) : chunk3P6O7ZDM_js.DEFAULT_FONT_FAMILY;
3742
+ const baseFontSize = textEl.textStyle?.fontSize ?? chunkSXCO5HHN_js.DEFAULT_TEXT_FONT_SIZE;
3743
+ const baseFontFamily = textEl.textStyle?.fontFamily ? chunkMGLRKGCH_js.getSubstituteFontFamily(textEl.textStyle.fontFamily) : chunkSXCO5HHN_js.DEFAULT_FONT_FAMILY;
3743
3744
  const baseFill = chunkJWS3RQKN_js.normalizeHexColor(textEl.textStyle?.color, fallbackColor);
3744
3745
  return /* @__PURE__ */ jsxRuntime.jsxs(
3745
3746
  "svg",
@@ -3896,7 +3897,7 @@ function ChartElementView({
3896
3897
  const selectedPart = selection?.elementId === element.id ? selection.part : null;
3897
3898
  const canEdit = editable && Boolean(onUpdateElement);
3898
3899
  const viewModel = React5.useMemo(
3899
- () => canEdit ? chunk3P6O7ZDM_js.buildReactChartViewModel(element) : null,
3900
+ () => canEdit ? chunkSXCO5HHN_js.buildReactChartViewModel(element) : null,
3900
3901
  [canEdit, element]
3901
3902
  );
3902
3903
  React5.useEffect(ensureInteractionStyles, []);
@@ -4042,7 +4043,7 @@ function ChartElementView({
4042
4043
  onPointerUp: handlePointerUp,
4043
4044
  onDoubleClick: handleDoubleClick,
4044
4045
  children: [
4045
- chunk3P6O7ZDM_js.renderChartElement(renderedElement),
4046
+ chunkSXCO5HHN_js.renderChartElement(renderedElement),
4046
4047
  dragValue !== null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1 right-1 z-10 rounded bg-primary/90 px-1.5 py-0.5 text-[10px] font-medium text-white pointer-events-none", children: chunkJWS3RQKN_js.formatAxisValue(dragValue) }),
4047
4048
  titleDraft !== null && /* @__PURE__ */ jsxRuntime.jsx(
4048
4049
  "input",
@@ -4209,7 +4210,7 @@ function renderImg(el, style, filter, alt, opacity) {
4209
4210
  ] });
4210
4211
  }
4211
4212
  }
4212
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-gray-500 bg-gray-100", children: chunkWGLJ32FW_js.translationsEn["pptx.elementType.image"] });
4213
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-gray-500 bg-gray-100", children: chunkIZXN663G_js.translationsEn["pptx.elementType.image"] });
4213
4214
  }
4214
4215
  const effectStyles = {
4215
4216
  ...filter ? { filter } : {},
@@ -4217,28 +4218,28 @@ function renderImg(el, style, filter, alt, opacity) {
4217
4218
  };
4218
4219
  const artisticEffectName = chunkMGLRKGCH_js.isImageLikeElement(el) ? el.imageEffects?.artisticEffect : void 0;
4219
4220
  const artisticRadius = chunkMGLRKGCH_js.isImageLikeElement(el) ? el.imageEffects?.artisticRadius ?? 5 : 5;
4220
- if (chunk3P6O7ZDM_js.isImageTiled(el)) {
4221
+ if (chunkSXCO5HHN_js.isImageTiled(el)) {
4221
4222
  const tileSrc = imgSrc(el);
4222
4223
  if (!tileSrc) {
4223
4224
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-gray-500 bg-gray-100", children: "Image" });
4224
4225
  }
4225
- const tileDuotoneColors = chunk3P6O7ZDM_js.getDuotoneColors(el);
4226
+ const tileDuotoneColors = chunkSXCO5HHN_js.getDuotoneColors(el);
4226
4227
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4227
- tileDuotoneColors && chunk3P6O7ZDM_js.renderDuotoneSvgFilter(el.id, tileDuotoneColors.color1, tileDuotoneColors.color2),
4228
- chunk3P6O7ZDM_js.renderArtisticEffectSvgFilter(el.id, artisticEffectName, artisticRadius),
4229
- chunk3P6O7ZDM_js.renderImageAlphaSvgFilter(el),
4228
+ tileDuotoneColors && chunkSXCO5HHN_js.renderDuotoneSvgFilter(el.id, tileDuotoneColors.color1, tileDuotoneColors.color2),
4229
+ chunkSXCO5HHN_js.renderArtisticEffectSvgFilter(el.id, artisticEffectName, artisticRadius),
4230
+ chunkSXCO5HHN_js.renderImageAlphaSvgFilter(el),
4230
4231
  /* @__PURE__ */ jsxRuntime.jsx(
4231
4232
  "div",
4232
4233
  {
4233
4234
  className: "pointer-events-none select-none w-full h-full",
4234
- style: { ...chunk3P6O7ZDM_js.getImageTilingStyle(el), ...effectStyles }
4235
+ style: { ...chunkSXCO5HHN_js.getImageTilingStyle(el), ...effectStyles }
4235
4236
  }
4236
4237
  )
4237
4238
  ] });
4238
4239
  }
4239
4240
  const colorWash = "imageEffects" in el ? el.imageEffects?.colorWash : void 0;
4240
4241
  const clrChange = "imageEffects" in el ? el.imageEffects?.clrChange : void 0;
4241
- const duotoneColors = chunk3P6O7ZDM_js.getDuotoneColors(el);
4242
+ const duotoneColors = chunkSXCO5HHN_js.getDuotoneColors(el);
4242
4243
  const useDuotoneCanvas = Boolean(duotoneColors && !clrChange);
4243
4244
  const filterForImg = useDuotoneCanvas ? chunkJWS3RQKN_js.getImageEffectsFilter(el, { excludeDuotone: true }) : filter;
4244
4245
  const canvasEffectStyles = {
@@ -4246,9 +4247,9 @@ function renderImg(el, style, filter, alt, opacity) {
4246
4247
  ...opacity !== void 0 ? { opacity } : {}
4247
4248
  };
4248
4249
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4249
- duotoneColors && !useDuotoneCanvas && chunk3P6O7ZDM_js.renderDuotoneSvgFilter(el.id, duotoneColors.color1, duotoneColors.color2),
4250
- chunk3P6O7ZDM_js.renderArtisticEffectSvgFilter(el.id, artisticEffectName, artisticRadius),
4251
- chunk3P6O7ZDM_js.renderImageAlphaSvgFilter(el),
4250
+ duotoneColors && !useDuotoneCanvas && chunkSXCO5HHN_js.renderDuotoneSvgFilter(el.id, duotoneColors.color1, duotoneColors.color2),
4251
+ chunkSXCO5HHN_js.renderArtisticEffectSvgFilter(el.id, artisticEffectName, artisticRadius),
4252
+ chunkSXCO5HHN_js.renderImageAlphaSvgFilter(el),
4252
4253
  useDuotoneCanvas && duotoneColors ? /* @__PURE__ */ jsxRuntime.jsx(
4253
4254
  DuotoneImage,
4254
4255
  {
@@ -4359,9 +4360,9 @@ function renderInk(el, options) {
4359
4360
  function renderGroup(children) {
4360
4361
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative w-full h-full pointer-events-none", children: children.map((c, childIndex) => {
4361
4362
  const { hf, fc, sw, sc } = shapeParams(c);
4362
- const ss = chunk3P6O7ZDM_js.getShapeVisualStyle(c, hf, fc, sw, sc);
4363
- const vs = chunk3P6O7ZDM_js.renderVectorShape(c, hf, fc, sw, sc);
4364
- const ts = chunk3P6O7ZDM_js.getTextStyleForElement(c, chunk3P6O7ZDM_js.DEFAULT_TEXT_COLOR);
4363
+ const ss = chunkSXCO5HHN_js.getShapeVisualStyle(c, hf, fc, sw, sc);
4364
+ const vs = chunkSXCO5HHN_js.renderVectorShape(c, hf, fc, sw, sc);
4365
+ const ts = chunkSXCO5HHN_js.getTextStyleForElement(c, chunkSXCO5HHN_js.DEFAULT_TEXT_COLOR);
4365
4366
  const isTxt = chunkJWS3RQKN_js.isEditableTextElement(c);
4366
4367
  const isI = c.type === "picture" || c.type === "image";
4367
4368
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -4371,12 +4372,12 @@ function renderGroup(children) {
4371
4372
  style: {
4372
4373
  left: c.x,
4373
4374
  top: c.y,
4374
- width: Math.max(c.width, chunk3P6O7ZDM_js.MIN_ELEMENT_SIZE),
4375
- height: Math.max(c.height, chunk3P6O7ZDM_js.MIN_ELEMENT_SIZE),
4375
+ width: Math.max(c.width, chunkSXCO5HHN_js.MIN_ELEMENT_SIZE),
4376
+ height: Math.max(c.height, chunkSXCO5HHN_js.MIN_ELEMENT_SIZE),
4376
4377
  transform: chunkJWS3RQKN_js.getElementTransform(c),
4377
4378
  transformOrigin: "center",
4378
4379
  overflow: isI ? "hidden" : void 0,
4379
- clipPath: isI ? chunk3P6O7ZDM_js.getCropShapeClipPath(c) : void 0,
4380
+ clipPath: isI ? chunkSXCO5HHN_js.getCropShapeClipPath(c) : void 0,
4380
4381
  ...ss,
4381
4382
  // Explicit z-index preserves document order stacking within the
4382
4383
  // group: later children in the array (= later in p:grpSp XML)
@@ -4384,19 +4385,19 @@ function renderGroup(children) {
4384
4385
  // Placed after ...ss to ensure it is never overwritten.
4385
4386
  zIndex: childIndex
4386
4387
  },
4387
- children: isI && ("svgData" in c && c.svgData || "imageData" in c && c.imageData) ? chunk3P6O7ZDM_js.isImageTiled(c) ? /* @__PURE__ */ jsxRuntime.jsx(
4388
+ children: isI && ("svgData" in c && c.svgData || "imageData" in c && c.imageData) ? chunkSXCO5HHN_js.isImageTiled(c) ? /* @__PURE__ */ jsxRuntime.jsx(
4388
4389
  "div",
4389
4390
  {
4390
4391
  className: "pointer-events-none select-none w-full h-full",
4391
- style: chunk3P6O7ZDM_js.getImageTilingStyle(c)
4392
+ style: chunkSXCO5HHN_js.getImageTilingStyle(c)
4392
4393
  }
4393
4394
  ) : /* @__PURE__ */ jsxRuntime.jsx(
4394
4395
  "img",
4395
4396
  {
4396
4397
  src: "svgData" in c && c.svgData ? c.svgData : c.imageData,
4397
- alt: chunkWGLJ32FW_js.translationsEn["pptx.ink.groupChildAlt"],
4398
+ alt: chunkIZXN663G_js.translationsEn["pptx.ink.groupChildAlt"],
4398
4399
  className: "pointer-events-none select-none",
4399
- style: chunk3P6O7ZDM_js.getImageRenderStyle(c),
4400
+ style: chunkSXCO5HHN_js.getImageRenderStyle(c),
4400
4401
  draggable: false
4401
4402
  }
4402
4403
  ) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -4406,7 +4407,7 @@ function renderGroup(children) {
4406
4407
  {
4407
4408
  className: "relative z-10 w-full h-full pointer-events-none whitespace-pre-wrap break-words leading-[1.3]",
4408
4409
  style: ts,
4409
- children: chunk3P6O7ZDM_js.renderTextSegments(c, chunk3P6O7ZDM_js.DEFAULT_TEXT_COLOR)
4410
+ children: chunkSXCO5HHN_js.renderTextSegments(c, chunkSXCO5HHN_js.DEFAULT_TEXT_COLOR)
4410
4411
  }
4411
4412
  ) : null
4412
4413
  ] })
@@ -4468,7 +4469,7 @@ function renderContentPart(el, options) {
4468
4469
  }
4469
4470
  );
4470
4471
  }
4471
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkWGLJ32FW_js.translationsEn["pptx.ink.contentPartFallback"] });
4472
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkIZXN663G_js.translationsEn["pptx.ink.contentPartFallback"] });
4472
4473
  }
4473
4474
  function ExcelIcon(color, size = 32) {
4474
4475
  return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", children: [
@@ -4526,7 +4527,7 @@ function PdfIcon(color, size = 32) {
4526
4527
  fill: "none"
4527
4528
  }
4528
4529
  ),
4529
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: "12", y: "14", textAnchor: "middle", fill: color, fontSize: "7", fontWeight: "bold", children: chunkWGLJ32FW_js.translationsEn["pptx.file.pdf"] })
4530
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: "12", y: "14", textAnchor: "middle", fill: color, fontSize: "7", fontWeight: "bold", children: chunkIZXN663G_js.translationsEn["pptx.file.pdf"] })
4530
4531
  ] });
4531
4532
  }
4532
4533
  function VisioIcon(color, size = 32) {
@@ -4755,7 +4756,7 @@ function InlineTextEditor({
4755
4756
  pending.endOffset
4756
4757
  );
4757
4758
  });
4758
- const warpStyle = chunk3P6O7ZDM_js.getTextWarpStyle(textStyleRaw);
4759
+ const warpStyle = chunkSXCO5HHN_js.getTextWarpStyle(textStyleRaw);
4759
4760
  const compensationTransform = chunkJWS3RQKN_js.getTextCompensationTransform(element);
4760
4761
  const warpTransform = warpStyle?.transform;
4761
4762
  const mergedTransform = [compensationTransform, warpTransform].filter(Boolean).join(" ") || void 0;
@@ -4831,7 +4832,7 @@ function InlineTextEditor({
4831
4832
  const text = e.clipboardData.getData("text/plain");
4832
4833
  document.execCommand("insertText", false, text);
4833
4834
  },
4834
- children: seed.hasRichSegments ? chunk3P6O7ZDM_js.renderTextSegments(element, chunk3P6O7ZDM_js.DEFAULT_TEXT_COLOR) : seed.initialText
4835
+ children: seed.hasRichSegments ? chunkSXCO5HHN_js.renderTextSegments(element, chunkSXCO5HHN_js.DEFAULT_TEXT_COLOR) : seed.initialText
4835
4836
  }
4836
4837
  );
4837
4838
  }
@@ -5161,8 +5162,8 @@ function SmartArt3DRenderer({
5161
5162
  if (nodes.length === 0) {
5162
5163
  return null;
5163
5164
  }
5164
- const palette = chunk3P6O7ZDM_js.resolvePalette(element);
5165
- const style = chunk3P6O7ZDM_js.resolveStyle(element);
5165
+ const palette = chunkSXCO5HHN_js.resolvePalette(element);
5166
+ const style = chunkSXCO5HHN_js.resolveStyle(element);
5166
5167
  const layoutResult = chunkJWS3RQKN_js.computeSmartArtLayout(
5167
5168
  nodes,
5168
5169
  { width: element.width, height: element.height },
@@ -5471,7 +5472,7 @@ function renderBody(options) {
5471
5472
  textDirection: txtSE?.textDirection,
5472
5473
  textStyle: txtS,
5473
5474
  textStyleRaw: txtSE,
5474
- layoutStyle: chunk3P6O7ZDM_js.getTextLayoutStyle(el),
5475
+ layoutStyle: chunkSXCO5HHN_js.getTextLayoutStyle(el),
5475
5476
  element: el,
5476
5477
  onCommit,
5477
5478
  onCancel,
@@ -5482,7 +5483,7 @@ function renderBody(options) {
5482
5483
  ] });
5483
5484
  }
5484
5485
  if (el.type === "table") {
5485
- return chunk3P6O7ZDM_js.renderTableElement(el, txtS, {
5486
+ return chunkSXCO5HHN_js.renderTableElement(el, txtS, {
5486
5487
  editable: isSel,
5487
5488
  selectedCell: isSel ? tableSt : null,
5488
5489
  onSelectCell: onCellSel,
@@ -5513,7 +5514,7 @@ function renderBody(options) {
5513
5514
  );
5514
5515
  }
5515
5516
  if (el.type === "media") {
5516
- return chunk3P6O7ZDM_js.renderMediaElement(el, media, {
5517
+ return chunkSXCO5HHN_js.renderMediaElement(el, media, {
5517
5518
  autoPlay: isPresentationPassive,
5518
5519
  fullScreen: isPresentationPassive && Boolean(el.fullScreen),
5519
5520
  isPresentationMode: isPresentationPassive,
@@ -5535,7 +5536,7 @@ function renderBody(options) {
5535
5536
  if (doGrp && el.type === "group" && el.children) {
5536
5537
  return renderGroup(el.children);
5537
5538
  }
5538
- if (chunk3P6O7ZDM_js.shouldRenderFallbackLabel(el, isTxtEl)) {
5539
+ if (chunkSXCO5HHN_js.shouldRenderFallbackLabel(el, isTxtEl)) {
5539
5540
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkJWS3RQKN_js.getElementLabel(el) });
5540
5541
  }
5541
5542
  const isLinkedTxbx = chunkMGLRKGCH_js.hasTextProperties(el) && el.linkedTxbxId !== void 0;
@@ -5543,7 +5544,7 @@ function renderBody(options) {
5543
5544
  const linkedSegments = isLinkedTxbx && slideElements ? chunkMGLRKGCH_js.getLinkedTextBoxSegments(el, slideElements) : void 0;
5544
5545
  const warpPreset = chunkMGLRKGCH_js.hasTextProperties(el) ? el.textStyle?.textWarpPreset : void 0;
5545
5546
  const useSvgWarp = chunkJWS3RQKN_js.shouldUseSvgWarp(warpPreset);
5546
- const scene3dStyle = chunkMGLRKGCH_js.hasTextProperties(el) ? chunk3P6O7ZDM_js.buildTextBody3DSceneStyle(el.textStyle) : void 0;
5547
+ const scene3dStyle = chunkMGLRKGCH_js.hasTextProperties(el) ? chunkSXCO5HHN_js.buildTextBody3DSceneStyle(el.textStyle) : void 0;
5547
5548
  const compensationTransform = chunkJWS3RQKN_js.getTextCompensationTransform(el);
5548
5549
  const composedTransform = [compensationTransform, scene3dStyle?.transform].filter(Boolean).join(" ") || void 0;
5549
5550
  const scene3dNonTransform = scene3dStyle ? {
@@ -5558,12 +5559,12 @@ function renderBody(options) {
5558
5559
  isTxtEl ? useSvgWarp ? /* @__PURE__ */ jsxRuntime.jsx(
5559
5560
  "div",
5560
5561
  {
5561
- className: chunk3P6O7ZDM_js.cn(
5562
+ className: chunkSXCO5HHN_js.cn(
5562
5563
  "relative z-10 w-full h-full",
5563
5564
  onHyperlinkClick ? "" : "pointer-events-none"
5564
5565
  ),
5565
5566
  style: {
5566
- ...chunk3P6O7ZDM_js.getTextLayoutStyle(el),
5567
+ ...chunkSXCO5HHN_js.getTextLayoutStyle(el),
5567
5568
  transform: composedTransform,
5568
5569
  transformOrigin: "center",
5569
5570
  ...scene3dNonTransform,
@@ -5575,7 +5576,7 @@ function renderBody(options) {
5575
5576
  element: el,
5576
5577
  width: el.width,
5577
5578
  height: el.height,
5578
- fallbackColor: chunk3P6O7ZDM_js.DEFAULT_TEXT_COLOR,
5579
+ fallbackColor: chunkSXCO5HHN_js.DEFAULT_TEXT_COLOR,
5579
5580
  findHighlights: findHl,
5580
5581
  fieldContext
5581
5582
  }
@@ -5584,22 +5585,22 @@ function renderBody(options) {
5584
5585
  ) : /* @__PURE__ */ jsxRuntime.jsx(
5585
5586
  "div",
5586
5587
  {
5587
- className: chunk3P6O7ZDM_js.cn(
5588
+ className: chunkSXCO5HHN_js.cn(
5588
5589
  "relative z-10 w-full h-full whitespace-pre-wrap break-words leading-[1.3]",
5589
5590
  onHyperlinkClick ? "" : "pointer-events-none"
5590
5591
  ),
5591
5592
  style: {
5592
- ...chunk3P6O7ZDM_js.getTextLayoutStyle(el),
5593
+ ...chunkSXCO5HHN_js.getTextLayoutStyle(el),
5593
5594
  ...txtS,
5594
- ...chunk3P6O7ZDM_js.getTextWarpStyle(txtSE),
5595
+ ...chunkSXCO5HHN_js.getTextWarpStyle(txtSE),
5595
5596
  transform: composedTransform,
5596
5597
  transformOrigin: "center",
5597
5598
  ...scene3dNonTransform,
5598
5599
  ...linkedOverflowCss
5599
5600
  },
5600
- children: chunk3P6O7ZDM_js.renderTextSegments(
5601
+ children: chunkSXCO5HHN_js.renderTextSegments(
5601
5602
  el,
5602
- chunk3P6O7ZDM_js.DEFAULT_TEXT_COLOR,
5603
+ chunkSXCO5HHN_js.DEFAULT_TEXT_COLOR,
5603
5604
  void 0,
5604
5605
  findHl,
5605
5606
  onHyperlinkClick,
@@ -5612,12 +5613,12 @@ function renderBody(options) {
5612
5613
  ) : chunkMGLRKGCH_js.hasTextProperties(el) && el.promptText ? useSvgWarp ? /* @__PURE__ */ jsxRuntime.jsx(
5613
5614
  "div",
5614
5615
  {
5615
- className: chunk3P6O7ZDM_js.cn(
5616
+ className: chunkSXCO5HHN_js.cn(
5616
5617
  "relative z-10 w-full h-full",
5617
5618
  onHyperlinkClick ? "" : "pointer-events-none"
5618
5619
  ),
5619
5620
  style: {
5620
- ...chunk3P6O7ZDM_js.getTextLayoutStyle(el),
5621
+ ...chunkSXCO5HHN_js.getTextLayoutStyle(el),
5621
5622
  transform: composedTransform,
5622
5623
  transformOrigin: "center",
5623
5624
  ...scene3dNonTransform,
@@ -5629,7 +5630,7 @@ function renderBody(options) {
5629
5630
  element: el,
5630
5631
  width: el.width,
5631
5632
  height: el.height,
5632
- fallbackColor: chunk3P6O7ZDM_js.DEFAULT_TEXT_COLOR,
5633
+ fallbackColor: chunkSXCO5HHN_js.DEFAULT_TEXT_COLOR,
5633
5634
  findHighlights: findHl,
5634
5635
  fieldContext
5635
5636
  }
@@ -5638,22 +5639,22 @@ function renderBody(options) {
5638
5639
  ) : /* @__PURE__ */ jsxRuntime.jsx(
5639
5640
  "div",
5640
5641
  {
5641
- className: chunk3P6O7ZDM_js.cn(
5642
+ className: chunkSXCO5HHN_js.cn(
5642
5643
  "relative z-10 w-full h-full whitespace-pre-wrap break-words leading-[1.3]",
5643
5644
  onHyperlinkClick ? "" : "pointer-events-none"
5644
5645
  ),
5645
5646
  style: {
5646
- ...chunk3P6O7ZDM_js.getTextLayoutStyle(el),
5647
+ ...chunkSXCO5HHN_js.getTextLayoutStyle(el),
5647
5648
  ...txtS,
5648
- ...chunk3P6O7ZDM_js.getTextWarpStyle(txtSE),
5649
+ ...chunkSXCO5HHN_js.getTextWarpStyle(txtSE),
5649
5650
  transform: composedTransform,
5650
5651
  transformOrigin: "center",
5651
5652
  ...scene3dNonTransform,
5652
5653
  ...linkedOverflowCss
5653
5654
  },
5654
- children: chunk3P6O7ZDM_js.renderTextSegments(
5655
+ children: chunkSXCO5HHN_js.renderTextSegments(
5655
5656
  el,
5656
- chunk3P6O7ZDM_js.DEFAULT_TEXT_COLOR,
5657
+ chunkSXCO5HHN_js.DEFAULT_TEXT_COLOR,
5657
5658
  void 0,
5658
5659
  findHl,
5659
5660
  onHyperlinkClick,
@@ -5708,8 +5709,8 @@ function LinkTooltip({ label, hasUrl }) {
5708
5709
  function shapeParams(el) {
5709
5710
  const ss = chunkMGLRKGCH_js.hasShapeProperties(el) ? el.shapeStyle : void 0;
5710
5711
  const sw = Math.max(0, ss?.strokeWidth || 0);
5711
- const sc = chunkJWS3RQKN_js.normalizeHexColor(ss?.strokeColor, chunk3P6O7ZDM_js.DEFAULT_STROKE_COLOR);
5712
- const fc = chunkJWS3RQKN_js.normalizeHexColor(ss?.fillColor, chunk3P6O7ZDM_js.DEFAULT_FILL_COLOR);
5712
+ const sc = chunkJWS3RQKN_js.normalizeHexColor(ss?.strokeColor, chunkSXCO5HHN_js.DEFAULT_STROKE_COLOR);
5713
+ const fc = chunkJWS3RQKN_js.normalizeHexColor(ss?.fillColor, chunkSXCO5HHN_js.DEFAULT_FILL_COLOR);
5713
5714
  const hf = ss?.fillColor !== void 0 && ss?.fillColor !== "transparent" || Boolean(chunkJWS3RQKN_js.buildCssGradientFromShapeStyle(ss) || ss?.fillGradient) || ss?.fillMode === "pattern" && Boolean(ss.fillPatternPreset);
5714
5715
  return { hf, fc, sw, sc };
5715
5716
  }
@@ -5768,15 +5769,15 @@ var ElementRenderer = React5__default.default.memo(
5768
5769
  const elementLocks = el.locks;
5769
5770
  const isTxt = chunkJWS3RQKN_js.isEditableTextElement(el) && !elementLocks?.noTextEdit;
5770
5771
  const txtSE = chunkMGLRKGCH_js.hasTextProperties(el) ? el.textStyle : void 0;
5771
- const ss = chunk3P6O7ZDM_js.getShapeVisualStyle(el, hf, fc, sw, sc);
5772
- const ts = chunk3P6O7ZDM_js.getTextStyleForElement(el, chunk3P6O7ZDM_js.DEFAULT_TEXT_COLOR);
5773
- const vs = chunk3P6O7ZDM_js.renderVectorShape(el, hf, fc, sw, sc);
5772
+ const ss = chunkSXCO5HHN_js.getShapeVisualStyle(el, hf, fc, sw, sc);
5773
+ const ts = chunkSXCO5HHN_js.getTextStyleForElement(el, chunkSXCO5HHN_js.DEFAULT_TEXT_COLOR);
5774
+ const vs = chunkSXCO5HHN_js.renderVectorShape(el, hf, fc, sw, sc);
5774
5775
  const isImg = el.type === "picture" || el.type === "image";
5775
5776
  const isModel3D = el.type === "model3d";
5776
- const isConn = chunk3P6O7ZDM_js.isConnectorOrLineElement(el);
5777
+ const isConn = chunkSXCO5HHN_js.isConnectorOrLineElement(el);
5777
5778
  const shapeStyle3d = chunkMGLRKGCH_js.hasShapeProperties(el) ? el.shapeStyle : void 0;
5778
5779
  const extrusionData = React5.useMemo(
5779
- () => chunk3P6O7ZDM_js.build3DExtrusionData(shapeStyle3d?.shape3d, shapeStyle3d?.scene3d, fc, el.width, el.height),
5780
+ () => chunkSXCO5HHN_js.build3DExtrusionData(shapeStyle3d?.shape3d, shapeStyle3d?.scene3d, fc, el.width, el.height),
5780
5781
  [shapeStyle3d?.shape3d, shapeStyle3d?.scene3d, fc, el.width, el.height]
5781
5782
  );
5782
5783
  const [isMediaPlaying, setIsMediaPlaying] = React5.useState(false);
@@ -5830,7 +5831,7 @@ var ElementRenderer = React5__default.default.memo(
5830
5831
  "aria-roledescription": ariaRoleDescription,
5831
5832
  "aria-selected": isSelected ? true : void 0,
5832
5833
  tabIndex: isFocusable ? 0 : -1,
5833
- className: chunk3P6O7ZDM_js.cn(
5834
+ className: chunkSXCO5HHN_js.cn(
5834
5835
  "absolute border",
5835
5836
  "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500",
5836
5837
  cur,
@@ -5912,7 +5913,7 @@ var ElementRenderer = React5__default.default.memo(
5912
5913
  txtSE,
5913
5914
  txtS: ts,
5914
5915
  vecShape: vs,
5915
- imgStyle: chunk3P6O7ZDM_js.getImageRenderStyle(el),
5916
+ imgStyle: chunkSXCO5HHN_js.getImageRenderStyle(el),
5916
5917
  imgFilter: chunkJWS3RQKN_js.getImageEffectsFilter(el),
5917
5918
  imgOpacity: chunkJWS3RQKN_js.getImageEffectsOpacity(el),
5918
5919
  imgAlt: imageAltText,
@@ -6275,7 +6276,7 @@ function SectionHeader({
6275
6276
  /* @__PURE__ */ jsxRuntime.jsx(
6276
6277
  lu.LuChevronDown,
6277
6278
  {
6278
- className: chunk3P6O7ZDM_js.cn(
6279
+ className: chunkSXCO5HHN_js.cn(
6279
6280
  "h-3 w-3 flex-shrink-0 transition-transform",
6280
6281
  isCollapsed ? "-rotate-90" : "rotate-0"
6281
6282
  )
@@ -6376,7 +6377,7 @@ function LazyThumbnailInner({
6376
6377
  className: "relative w-full overflow-hidden rounded border border-border bg-muted/30 animate-pulse",
6377
6378
  style: {
6378
6379
  height: previewHeight,
6379
- minWidth: chunk3P6O7ZDM_js.SLIDE_NAV_THUMBNAIL_WIDTH
6380
+ minWidth: chunkSXCO5HHN_js.SLIDE_NAV_THUMBNAIL_WIDTH
6380
6381
  }
6381
6382
  }
6382
6383
  ) });
@@ -6413,7 +6414,7 @@ function buildFlatPaneItems(sectionGroups, showSectionHeaders, collapsedSections
6413
6414
  function estimateSlideItemHeight(canvasWidth, canvasHeight) {
6414
6415
  const safeW = Math.max(canvasWidth, 1);
6415
6416
  const safeH = Math.max(canvasHeight, 1);
6416
- const scale = chunk3P6O7ZDM_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeW;
6417
+ const scale = chunkSXCO5HHN_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeW;
6417
6418
  const previewHeight = Math.max(56, Math.round(safeH * scale));
6418
6419
  return previewHeight + 30;
6419
6420
  }
@@ -6449,14 +6450,17 @@ function SlideItemInner({
6449
6450
  );
6450
6451
  const safeCanvasWidth = Math.max(canvasSize.width, 1);
6451
6452
  const safeCanvasHeight = Math.max(canvasSize.height, 1);
6452
- const scale = chunk3P6O7ZDM_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeCanvasWidth;
6453
+ const scale = chunkSXCO5HHN_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeCanvasWidth;
6453
6454
  const previewHeight = Math.max(56, Math.round(safeCanvasHeight * scale));
6454
6455
  return /* @__PURE__ */ jsxRuntime.jsxs(
6455
- "div",
6456
+ "button",
6456
6457
  {
6458
+ type: "button",
6457
6459
  ref: slideRef,
6458
- className: chunk3P6O7ZDM_js.cn(
6459
- "group relative flex items-center gap-1 cursor-pointer py-0.5 px-1 transition-all",
6460
+ "aria-label": `Go to slide ${slideIndex + 1}`,
6461
+ "aria-current": isActive ? "true" : void 0,
6462
+ className: chunkSXCO5HHN_js.cn(
6463
+ "group relative flex w-full items-center gap-1 cursor-pointer border-0 bg-transparent py-0.5 px-1 text-left transition-all",
6460
6464
  isActive && "bg-accent/40 before:absolute before:left-0 before:top-1 before:bottom-1 before:w-[3px] before:bg-primary before:rounded-r",
6461
6465
  isHidden && "opacity-50"
6462
6466
  ),
@@ -6471,7 +6475,7 @@ function SlideItemInner({
6471
6475
  /* @__PURE__ */ jsxRuntime.jsx(
6472
6476
  "span",
6473
6477
  {
6474
- className: chunk3P6O7ZDM_js.cn(
6478
+ className: chunkSXCO5HHN_js.cn(
6475
6479
  "text-[10px] tabular-nums text-right select-none w-full",
6476
6480
  isActive ? "text-primary font-medium" : "text-muted-foreground"
6477
6481
  ),
@@ -6491,7 +6495,7 @@ function SlideItemInner({
6491
6495
  /* @__PURE__ */ jsxRuntime.jsxs(
6492
6496
  "div",
6493
6497
  {
6494
- className: chunk3P6O7ZDM_js.cn(
6498
+ className: chunkSXCO5HHN_js.cn(
6495
6499
  "relative flex-1 overflow-hidden border transition-colors bg-white",
6496
6500
  isActive ? "border-primary/60" : "border-transparent group-hover:border-border/40"
6497
6501
  ),
@@ -6686,7 +6690,7 @@ function SlidesPaneSidebar({
6686
6690
  [sectionGroups, showSectionHeaders, collapsedSections]
6687
6691
  );
6688
6692
  const shouldVirtualize = slides.length >= VIRTUALIZATION_THRESHOLD;
6689
- const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunk3P6O7ZDM_js.useVirtualizedSlides({
6693
+ const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunkSXCO5HHN_js.useVirtualizedSlides({
6690
6694
  totalItems: shouldVirtualize ? flatItems.length : 0,
6691
6695
  itemHeight: estimatedItemHeight
6692
6696
  });
@@ -6912,7 +6916,7 @@ function HandoutMasterPanel({
6912
6916
  "button",
6913
6917
  {
6914
6918
  type: "button",
6915
- className: chunk3P6O7ZDM_js.cn(
6919
+ className: chunkSXCO5HHN_js.cn(
6916
6920
  "px-2 py-1.5 rounded text-[11px] font-medium transition-colors",
6917
6921
  slidesPerPage === count ? "bg-primary text-white" : "bg-accent/50 text-muted-foreground hover:bg-accent/70 hover:text-foreground"
6918
6922
  ),
@@ -7033,7 +7037,7 @@ function SlideMastersList({
7033
7037
  "div",
7034
7038
  {
7035
7039
  ref: isMasterActive ? activeRef : void 0,
7036
- className: chunk3P6O7ZDM_js.cn(
7040
+ className: chunkSXCO5HHN_js.cn(
7037
7041
  "group relative cursor-pointer rounded-lg border-2 p-1 transition-all",
7038
7042
  isMasterActive ? "border-amber-500 bg-amber-500/10" : "border-border bg-background/40 hover:border-border"
7039
7043
  ),
@@ -7050,7 +7054,7 @@ function SlideMastersList({
7050
7054
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 px-1", children: /* @__PURE__ */ jsxRuntime.jsx(
7051
7055
  "span",
7052
7056
  {
7053
- className: chunk3P6O7ZDM_js.cn(
7057
+ className: chunkSXCO5HHN_js.cn(
7054
7058
  "text-[10px] font-medium",
7055
7059
  isMasterActive ? "text-amber-400" : "text-muted-foreground"
7056
7060
  ),
@@ -7066,7 +7070,7 @@ function SlideMastersList({
7066
7070
  "div",
7067
7071
  {
7068
7072
  ref: isLayoutActive ? activeRef : void 0,
7069
- className: chunk3P6O7ZDM_js.cn(
7073
+ className: chunkSXCO5HHN_js.cn(
7070
7074
  "group relative cursor-pointer rounded-md border-2 p-0.5 transition-all",
7071
7075
  isLayoutActive ? "border-primary bg-primary/10" : "border-border bg-background/40 hover:border-border"
7072
7076
  ),
@@ -7083,7 +7087,7 @@ function SlideMastersList({
7083
7087
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 px-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
7084
7088
  "span",
7085
7089
  {
7086
- className: chunk3P6O7ZDM_js.cn(
7090
+ className: chunkSXCO5HHN_js.cn(
7087
7091
  "text-[9px]",
7088
7092
  isLayoutActive ? "text-primary" : "text-muted-foreground"
7089
7093
  ),
@@ -7152,7 +7156,7 @@ function MasterViewSidebar({
7152
7156
  "button",
7153
7157
  {
7154
7158
  type: "button",
7155
- className: chunk3P6O7ZDM_js.cn(
7159
+ className: chunkSXCO5HHN_js.cn(
7156
7160
  "flex-1 px-1 py-1.5 text-[10px] font-medium transition-colors border-b-2",
7157
7161
  masterViewTab === tab.key ? "border-amber-500 text-amber-400" : "border-transparent text-muted-foreground hover:text-foreground"
7158
7162
  ),
@@ -7567,7 +7571,7 @@ function SectionBlock({
7567
7571
  /* @__PURE__ */ jsxRuntime.jsx(
7568
7572
  lu.LuChevronDown,
7569
7573
  {
7570
- className: chunk3P6O7ZDM_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
7574
+ className: chunkSXCO5HHN_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
7571
7575
  }
7572
7576
  ),
7573
7577
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-left", children: section.label }),
@@ -7614,7 +7618,7 @@ function SlideCardImpl({
7614
7618
  return /* @__PURE__ */ jsxRuntime.jsxs(
7615
7619
  "div",
7616
7620
  {
7617
- className: chunk3P6O7ZDM_js.cn(
7621
+ className: chunkSXCO5HHN_js.cn(
7618
7622
  "group relative cursor-pointer rounded-lg border-2 p-1 transition-all",
7619
7623
  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",
7620
7624
  slide.hidden && "opacity-40"
@@ -7633,7 +7637,7 @@ function SlideCardImpl({
7633
7637
  /* @__PURE__ */ jsxRuntime.jsx(
7634
7638
  "span",
7635
7639
  {
7636
- className: chunk3P6O7ZDM_js.cn(
7640
+ className: chunkSXCO5HHN_js.cn(
7637
7641
  "text-[11px] font-medium",
7638
7642
  isSelected ? "text-primary" : isActive ? "text-primary/70" : "text-muted-foreground"
7639
7643
  ),
@@ -9368,7 +9372,7 @@ var SlideNotesPanel = ({
9368
9372
  });
9369
9373
  const hasNotes = draft.trim().length > 0;
9370
9374
  const slideLabel = activeSlide ? t("pptx.notes.slideN", { n: activeSlide.slideNumber }) : t("pptx.notes.noSlide");
9371
- const { dragY, handlers: dragHandlers } = chunk3P6O7ZDM_js.useSheetDismissDrag(onToggle);
9375
+ const { dragY, handlers: dragHandlers } = chunkSXCO5HHN_js.useSheetDismissDrag(onToggle);
9372
9376
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9373
9377
  isExpanded && /* @__PURE__ */ jsxRuntime.jsx(
9374
9378
  "button",
@@ -9382,7 +9386,7 @@ var SlideNotesPanel = ({
9382
9386
  /* @__PURE__ */ jsxRuntime.jsxs(
9383
9387
  "div",
9384
9388
  {
9385
- className: chunk3P6O7ZDM_js.cn(
9389
+ className: chunkSXCO5HHN_js.cn(
9386
9390
  "flex flex-col border-t border-border/60 bg-background select-none",
9387
9391
  // On mobile, hide the entire notes strip when collapsed: the
9388
9392
  // MobileBottomBar's Notes button is the entry point instead.
@@ -9733,7 +9737,7 @@ function SlideDiffRow({
9733
9737
  return /* @__PURE__ */ jsxRuntime.jsxs(
9734
9738
  "div",
9735
9739
  {
9736
- className: chunk3P6O7ZDM_js.cn(
9740
+ className: chunkSXCO5HHN_js.cn(
9737
9741
  "rounded-lg border transition-colors",
9738
9742
  isResolved ? "border-border/60 bg-card/40 opacity-60" : "border-border bg-background/70"
9739
9743
  ),
@@ -9747,7 +9751,7 @@ function SlideDiffRow({
9747
9751
  children: [
9748
9752
  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" }),
9749
9753
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-foreground", children: t("pptx.compare.slideNumber", { number: slideNumber }) }),
9750
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunk3P6O7ZDM_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
9754
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkSXCO5HHN_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
9751
9755
  diff.changes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-muted-foreground", children: [
9752
9756
  diff.changes.length,
9753
9757
  " ",
@@ -9757,7 +9761,7 @@ function SlideDiffRow({
9757
9761
  isResolved && /* @__PURE__ */ jsxRuntime.jsx(
9758
9762
  "span",
9759
9763
  {
9760
- className: chunk3P6O7ZDM_js.cn(
9764
+ className: chunkSXCO5HHN_js.cn(
9761
9765
  "text-[10px] font-medium",
9762
9766
  accepted ? "text-green-400" : "text-muted-foreground"
9763
9767
  ),
@@ -9785,7 +9789,7 @@ function SlideDiffRow({
9785
9789
  /* @__PURE__ */ jsxRuntime.jsx(
9786
9790
  "div",
9787
9791
  {
9788
- className: chunk3P6O7ZDM_js.cn(
9792
+ className: chunkSXCO5HHN_js.cn(
9789
9793
  "rounded border overflow-hidden",
9790
9794
  diff.status === "added" ? "border-green-700/60" : diff.status === "changed" ? "border-amber-700/60" : "border-border"
9791
9795
  ),
@@ -10460,7 +10464,7 @@ function DocumentPropertiesDialog({
10460
10464
  const handleClose = React5.useCallback(() => {
10461
10465
  onClose();
10462
10466
  }, [onClose]);
10463
- const { panelStyle, handlers: dragHandlers } = chunk3P6O7ZDM_js.useModalDismissDrag(handleClose);
10467
+ const { panelStyle, handlers: dragHandlers } = chunkSXCO5HHN_js.useModalDismissDrag(handleClose);
10464
10468
  if (!isOpen) {
10465
10469
  return null;
10466
10470
  }
@@ -11069,31 +11073,31 @@ function ScaledSlidePreviewImpl({
11069
11073
  const elementHeight = Math.max(element.height, 1);
11070
11074
  const elShapeStyle = chunkMGLRKGCH_js.hasShapeProperties(element) ? element.shapeStyle : void 0;
11071
11075
  const hasFill = elShapeStyle?.fillColor !== void 0 && elShapeStyle?.fillColor !== "transparent" || Boolean(chunkJWS3RQKN_js.buildCssGradientFromShapeStyle(elShapeStyle) || elShapeStyle?.fillGradient) || elShapeStyle?.fillMode === "pattern" && Boolean(elShapeStyle.fillPatternPreset);
11072
- const fillColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.fillColor, chunk3P6O7ZDM_js.DEFAULT_FILL_COLOR);
11076
+ const fillColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.fillColor, chunkSXCO5HHN_js.DEFAULT_FILL_COLOR);
11073
11077
  const strokeWidth = Math.max(0, elShapeStyle?.strokeWidth || 0);
11074
- const strokeColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.strokeColor, chunk3P6O7ZDM_js.DEFAULT_STROKE_COLOR);
11075
- const shapeVisualStyle = chunk3P6O7ZDM_js.getShapeVisualStyle(
11078
+ const strokeColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.strokeColor, chunkSXCO5HHN_js.DEFAULT_STROKE_COLOR);
11079
+ const shapeVisualStyle = chunkSXCO5HHN_js.getShapeVisualStyle(
11076
11080
  element,
11077
11081
  hasFill,
11078
11082
  fillColor,
11079
11083
  strokeWidth,
11080
11084
  strokeColor
11081
11085
  );
11082
- const vectorShape = chunk3P6O7ZDM_js.renderVectorShape(
11086
+ const vectorShape = chunkSXCO5HHN_js.renderVectorShape(
11083
11087
  element,
11084
11088
  hasFill,
11085
11089
  fillColor,
11086
11090
  strokeWidth,
11087
11091
  strokeColor
11088
11092
  );
11089
- const fallbackTextColor = element.type === "shape" && hasFill ? "#ffffff" : chunk3P6O7ZDM_js.DEFAULT_TEXT_COLOR;
11090
- const textStyle = chunk3P6O7ZDM_js.getTextStyleForElement(element, fallbackTextColor);
11091
- const imageRenderStyle = chunk3P6O7ZDM_js.getImageRenderStyle(element);
11093
+ const fallbackTextColor = element.type === "shape" && hasFill ? "#ffffff" : chunkSXCO5HHN_js.DEFAULT_TEXT_COLOR;
11094
+ const textStyle = chunkSXCO5HHN_js.getTextStyleForElement(element, fallbackTextColor);
11095
+ const imageRenderStyle = chunkSXCO5HHN_js.getImageRenderStyle(element);
11092
11096
  const canRenderText = chunkJWS3RQKN_js.isEditableTextElement(element);
11093
11097
  const elText = chunkMGLRKGCH_js.hasTextProperties(element) ? element.text : void 0;
11094
11098
  const elTextSegments = chunkMGLRKGCH_js.hasTextProperties(element) ? element.textSegments : void 0;
11095
11099
  const hasText = typeof elText === "string" && elText.trim().length > 0 || (elTextSegments?.length ?? 0) > 0;
11096
- const fallbackLabel = chunk3P6O7ZDM_js.shouldRenderFallbackLabel(element, canRenderText) ? chunkJWS3RQKN_js.getElementLabel(element) : "";
11100
+ const fallbackLabel = chunkSXCO5HHN_js.shouldRenderFallbackLabel(element, canRenderText) ? chunkJWS3RQKN_js.getElementLabel(element) : "";
11097
11101
  return /* @__PURE__ */ jsxRuntime.jsx(
11098
11102
  "div",
11099
11103
  {
@@ -11106,11 +11110,11 @@ function ScaledSlidePreviewImpl({
11106
11110
  transform: chunkJWS3RQKN_js.getElementTransform(element),
11107
11111
  transformOrigin: "center"
11108
11112
  },
11109
- children: (element.type === "picture" || element.type === "image") && (element.svgData || element.imageData) ? chunk3P6O7ZDM_js.isImageTiled(element) ? /* @__PURE__ */ jsxRuntime.jsx(
11113
+ children: (element.type === "picture" || element.type === "image") && (element.svgData || element.imageData) ? chunkSXCO5HHN_js.isImageTiled(element) ? /* @__PURE__ */ jsxRuntime.jsx(
11110
11114
  "div",
11111
11115
  {
11112
11116
  className: "pointer-events-none w-full h-full",
11113
- style: chunk3P6O7ZDM_js.getImageTilingStyle(element)
11117
+ style: chunkSXCO5HHN_js.getImageTilingStyle(element)
11114
11118
  }
11115
11119
  ) : /* @__PURE__ */ jsxRuntime.jsx(
11116
11120
  "img",
@@ -11128,12 +11132,12 @@ function ScaledSlidePreviewImpl({
11128
11132
  {
11129
11133
  className: "w-full h-full whitespace-pre-wrap break-words px-1 py-0.5 leading-[1.3]",
11130
11134
  style: {
11131
- ...chunk3P6O7ZDM_js.getTextLayoutStyle(element),
11135
+ ...chunkSXCO5HHN_js.getTextLayoutStyle(element),
11132
11136
  ...textStyle,
11133
11137
  transform: chunkJWS3RQKN_js.getTextCompensationTransform(element),
11134
11138
  transformOrigin: "center"
11135
11139
  },
11136
- children: chunk3P6O7ZDM_js.renderTextSegments(element, fallbackTextColor)
11140
+ children: chunkSXCO5HHN_js.renderTextSegments(element, fallbackTextColor)
11137
11141
  }
11138
11142
  ),
11139
11143
  !hasText && fallbackLabel.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center text-[10px] text-muted-foreground", children: fallbackLabel })
@@ -11153,7 +11157,7 @@ function PreviewSmartArt({ element }) {
11153
11157
  if (!data || data.nodes.length === 0) {
11154
11158
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[10px] text-muted-foreground pointer-events-none", children: "SmartArt" });
11155
11159
  }
11156
- const palette = chunk3P6O7ZDM_js.resolvePalette(element);
11160
+ const palette = chunkSXCO5HHN_js.resolvePalette(element);
11157
11161
  const shapes = data.drawingShapes;
11158
11162
  if (shapes && shapes.length > 0) {
11159
11163
  let minX = Infinity;
@@ -11183,7 +11187,7 @@ function PreviewSmartArt({ element }) {
11183
11187
  className: "w-full h-full pointer-events-none",
11184
11188
  preserveAspectRatio: "xMidYMid meet",
11185
11189
  children: shapes.map((shape, i) => {
11186
- const fill = shape.fillColor ?? chunk3P6O7ZDM_js.colour(i, palette);
11190
+ const fill = shape.fillColor ?? chunkSXCO5HHN_js.colour(i, palette);
11187
11191
  const relX = shape.x - minX;
11188
11192
  const relY = shape.y - minY;
11189
11193
  const isEllipse = shape.shapeType === "ellipse";
@@ -11229,7 +11233,7 @@ function PreviewSmartArt({ element }) {
11229
11233
  }
11230
11234
  const nodes = data.nodes;
11231
11235
  const count = nodes.length;
11232
- const category = data.layout ? chunk3P6O7ZDM_js.layoutToCategory(data.layout) : data.resolvedLayoutType ?? "list";
11236
+ const category = data.layout ? chunkSXCO5HHN_js.layoutToCategory(data.layout) : data.resolvedLayoutType ?? "list";
11233
11237
  const useCircles = category === "cycle" || category === "radial" || category === "venn";
11234
11238
  const useChevrons = category === "process" || category === "chevron";
11235
11239
  const gap = 2;
@@ -11241,7 +11245,7 @@ function PreviewSmartArt({ element }) {
11241
11245
  preserveAspectRatio: "xMidYMid meet",
11242
11246
  children: nodes.map((node, i) => {
11243
11247
  const w = (100 - gap * (count - 1)) / count;
11244
- const fill = chunk3P6O7ZDM_js.colour(i, palette);
11248
+ const fill = chunkSXCO5HHN_js.colour(i, palette);
11245
11249
  if (useCircles) {
11246
11250
  const r = Math.min(w, 40) / 2;
11247
11251
  return /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: i * (w + gap) + w / 2, cy: 30, rx: r, ry: r, fill }, node.id);
@@ -11883,7 +11887,7 @@ function SelectionPane({
11883
11887
  setDragIndex(null);
11884
11888
  setDragOverIndex(null);
11885
11889
  },
11886
- className: chunk3P6O7ZDM_js.cn(
11890
+ className: chunkSXCO5HHN_js.cn(
11887
11891
  "flex items-center gap-1.5 px-2 py-1 text-xs cursor-pointer transition-colors",
11888
11892
  isSelected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground",
11889
11893
  dragOverIndex === realIndex ? "border-t-2 border-primary" : ""
@@ -12134,7 +12138,7 @@ function AnimationsSection(p) {
12134
12138
  type: "button",
12135
12139
  onClick: handlePreview,
12136
12140
  disabled,
12137
- className: chunk3P6O7ZDM_js.cn(pill, previewActive ? "bg-primary hover:bg-primary/80 text-white" : ""),
12141
+ className: chunkSXCO5HHN_js.cn(pill, previewActive ? "bg-primary hover:bg-primary/80 text-white" : ""),
12138
12142
  title: t("pptx.animations.previewTooltip"),
12139
12143
  children: [
12140
12144
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuPlay, { className: ic2 }),
@@ -12200,7 +12204,7 @@ function AnimationsSection(p) {
12200
12204
  {
12201
12205
  type: "button",
12202
12206
  onClick: p.onOpenAnimationPanel ?? p.onToggleInspector,
12203
- className: chunk3P6O7ZDM_js.cn(
12207
+ className: chunkSXCO5HHN_js.cn(
12204
12208
  pill,
12205
12209
  p.isInspectorPaneOpen ? "bg-primary hover:bg-primary/80 text-white" : ""
12206
12210
  ),
@@ -12264,7 +12268,7 @@ function ArrangeSection(p) {
12264
12268
  disabled: !p.canEdit || p.canActivateFormatPainter === false && !p.formatPainterActive,
12265
12269
  "data-testid": "format-painter-toggle",
12266
12270
  "data-active": p.formatPainterActive ? "true" : "false",
12267
- className: chunk3P6O7ZDM_js.cn(
12271
+ className: chunkSXCO5HHN_js.cn(
12268
12272
  pill,
12269
12273
  p.formatPainterActive ? "bg-amber-600 hover:bg-amber-500 text-amber-50" : ""
12270
12274
  ),
@@ -12377,7 +12381,7 @@ function DesignSection(p) {
12377
12381
  {
12378
12382
  onClick: p.onToggleThemeGallery,
12379
12383
  disabled: !p.canEdit,
12380
- className: chunk3P6O7ZDM_js.cn(
12384
+ className: chunkSXCO5HHN_js.cn(
12381
12385
  pill,
12382
12386
  p.isThemeGalleryOpen ? "bg-primary hover:bg-primary/80 text-white" : ""
12383
12387
  ),
@@ -12393,7 +12397,7 @@ function DesignSection(p) {
12393
12397
  {
12394
12398
  onClick: p.onToggleThemeEditor,
12395
12399
  disabled: !p.canEdit,
12396
- className: chunk3P6O7ZDM_js.cn(pill, p.isThemeEditorOpen ? "bg-primary hover:bg-primary/80 text-white" : ""),
12400
+ className: chunkSXCO5HHN_js.cn(pill, p.isThemeEditorOpen ? "bg-primary hover:bg-primary/80 text-white" : ""),
12397
12401
  title: t("pptx.ribbon.editThemeTitle"),
12398
12402
  children: [
12399
12403
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuPencil, { className: ics }),
@@ -12418,7 +12422,7 @@ function DesignSection(p) {
12418
12422
  "button",
12419
12423
  {
12420
12424
  onClick: p.onToggleInspector,
12421
- className: chunk3P6O7ZDM_js.cn(
12425
+ className: chunkSXCO5HHN_js.cn(
12422
12426
  pill,
12423
12427
  p.isInspectorPaneOpen ? "bg-primary hover:bg-primary/80 text-white" : ""
12424
12428
  ),
@@ -12460,7 +12464,7 @@ function TransitionsSection(p) {
12460
12464
  {
12461
12465
  type: "button",
12462
12466
  onClick: () => setSelected(preset.value),
12463
- className: chunk3P6O7ZDM_js.cn(
12467
+ className: chunkSXCO5HHN_js.cn(
12464
12468
  "flex-shrink-0 px-2 py-1 max-md:min-h-[44px] rounded border text-[11px] leading-tight transition-colors",
12465
12469
  selected === preset.value ? "border-primary bg-primary/10 text-primary font-medium" : "border-border bg-muted hover:bg-accent text-foreground"
12466
12470
  ),
@@ -12545,7 +12549,7 @@ function TransitionsSection(p) {
12545
12549
  {
12546
12550
  type: "button",
12547
12551
  onClick: p.onToggleInspector,
12548
- className: chunk3P6O7ZDM_js.cn(
12552
+ className: chunkSXCO5HHN_js.cn(
12549
12553
  pill,
12550
12554
  p.isInspectorPaneOpen ? "bg-primary hover:bg-primary/80 text-white" : ""
12551
12555
  ),
@@ -12565,7 +12569,7 @@ function ReviewSection(p) {
12565
12569
  "button",
12566
12570
  {
12567
12571
  onClick: p.onToggleComments,
12568
- className: chunk3P6O7ZDM_js.cn(
12572
+ className: chunkSXCO5HHN_js.cn(
12569
12573
  pill,
12570
12574
  p.isCommentsPanelOpen ? "bg-primary hover:bg-primary/80 text-white" : ""
12571
12575
  ),
@@ -12581,7 +12585,7 @@ function ReviewSection(p) {
12581
12585
  "button",
12582
12586
  {
12583
12587
  onClick: () => p.onSetSpellCheckEnabled(!p.spellCheckEnabled),
12584
- className: chunk3P6O7ZDM_js.cn(pill, p.spellCheckEnabled ? "bg-primary hover:bg-primary/80 text-white" : ""),
12588
+ className: chunkSXCO5HHN_js.cn(pill, p.spellCheckEnabled ? "bg-primary hover:bg-primary/80 text-white" : ""),
12585
12589
  title: t("pptx.review.toggleSpellCheck"),
12586
12590
  children: [
12587
12591
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuSpellCheck, { className: ic2 }),
@@ -12629,7 +12633,7 @@ function DrawSection(p) {
12629
12633
  {
12630
12634
  type: "button",
12631
12635
  onClick: () => p.onSetActiveTool(tool.id),
12632
- className: chunk3P6O7ZDM_js.cn(
12636
+ className: chunkSXCO5HHN_js.cn(
12633
12637
  i < a.length - 1 ? gB : gL,
12634
12638
  p.activeTool === tool.id ? tool.ac ?? "bg-accent text-foreground" : ""
12635
12639
  ),
@@ -12856,7 +12860,7 @@ function SlidesGroup(p) {
12856
12860
  type: "button",
12857
12861
  onClick: handleNewSlide,
12858
12862
  disabled: !p.canEdit || p.layoutOptions.length === 0,
12859
- className: chunk3P6O7ZDM_js.cn(
12863
+ className: chunkSXCO5HHN_js.cn(
12860
12864
  pill,
12861
12865
  "whitespace-nowrap",
12862
12866
  p.layoutOptions.length > 0 ? "rounded-r-none" : ""
@@ -13046,7 +13050,7 @@ function HomeSection(p) {
13046
13050
  setTimeout(() => setCutFeedback(false), 600);
13047
13051
  },
13048
13052
  disabled: !p.canEdit,
13049
- className: chunk3P6O7ZDM_js.cn(gB, cutFeedback && "bg-green-600/20 text-green-400"),
13053
+ className: chunkSXCO5HHN_js.cn(gB, cutFeedback && "bg-green-600/20 text-green-400"),
13050
13054
  title: t("pptx.arrange.cut"),
13051
13055
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuScissors, { className: ic2 })
13052
13056
  }
@@ -13060,7 +13064,7 @@ function HomeSection(p) {
13060
13064
  setCopiedFeedback(true);
13061
13065
  setTimeout(() => setCopiedFeedback(false), 600);
13062
13066
  },
13063
- className: chunk3P6O7ZDM_js.cn(gB, copiedFeedback && "bg-green-600/20 text-green-400"),
13067
+ className: chunkSXCO5HHN_js.cn(gB, copiedFeedback && "bg-green-600/20 text-green-400"),
13064
13068
  title: t("pptx.arrange.copy"),
13065
13069
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuCopy, { className: ic2 })
13066
13070
  }
@@ -13073,7 +13077,7 @@ function HomeSection(p) {
13073
13077
  disabled: !p.canEdit || p.canActivateFormatPainter === false && !p.formatPainterActive,
13074
13078
  "data-testid": "format-painter-toggle",
13075
13079
  "data-active": p.formatPainterActive ? "true" : "false",
13076
- className: chunk3P6O7ZDM_js.cn(
13080
+ className: chunkSXCO5HHN_js.cn(
13077
13081
  gL,
13078
13082
  p.formatPainterActive ? "bg-amber-600 hover:bg-amber-500 text-amber-50" : ""
13079
13083
  ),
@@ -13248,7 +13252,7 @@ function InsertSection(p) {
13248
13252
  onChange: (e) => p.onSetNewShapeType(e.target.value),
13249
13253
  className: "bg-transparent py-1.5 pl-2 pr-1 outline-none text-xs",
13250
13254
  title: t("pptx.insert.shapeType"),
13251
- children: chunk3P6O7ZDM_js.SHAPE_PRESETS.map((sp) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: sp.type, className: "bg-background", children: t(sp.i18nKey) }, sp.type))
13255
+ children: chunkSXCO5HHN_js.SHAPE_PRESETS.map((sp) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: sp.type, className: "bg-background", children: t(sp.i18nKey) }, sp.type))
13252
13256
  }
13253
13257
  ),
13254
13258
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -13259,7 +13263,7 @@ function InsertSection(p) {
13259
13263
  className: "inline-flex items-center gap-1.5 px-2.5 py-1.5 border-l border-border hover:bg-accent transition-colors text-xs",
13260
13264
  title: t("pptx.insert.addShape"),
13261
13265
  children: [
13262
- chunk3P6O7ZDM_js.SHAPE_PRESETS.find((sp) => sp.type === p.newShapeType)?.icon || /* @__PURE__ */ jsxRuntime.jsx(lu.LuSquare, { className: ic2 }),
13266
+ chunkSXCO5HHN_js.SHAPE_PRESETS.find((sp) => sp.type === p.newShapeType)?.icon || /* @__PURE__ */ jsxRuntime.jsx(lu.LuSquare, { className: ic2 }),
13263
13267
  t("pptx.insert.shape")
13264
13268
  ]
13265
13269
  }
@@ -13661,7 +13665,7 @@ function SlideShowSection(p) {
13661
13665
  "button",
13662
13666
  {
13663
13667
  onClick: p.onToggleSubtitles,
13664
- className: chunk3P6O7ZDM_js.cn(pill, p.showSubtitles ? "bg-primary hover:bg-primary/80 text-white" : ""),
13668
+ className: chunkSXCO5HHN_js.cn(pill, p.showSubtitles ? "bg-primary hover:bg-primary/80 text-white" : ""),
13665
13669
  title: t("pptx.slideShow.subtitlesTooltip"),
13666
13670
  children: [
13667
13671
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuCaptions, { className: ic2 }),
@@ -14499,7 +14503,7 @@ function ViewSection(p) {
14499
14503
  {
14500
14504
  onClick: () => p.onSetEditTemplateMode(!p.editTemplateMode),
14501
14505
  disabled: !p.canEdit,
14502
- className: chunk3P6O7ZDM_js.cn(
14506
+ className: chunkSXCO5HHN_js.cn(
14503
14507
  pill,
14504
14508
  p.editTemplateMode ? "bg-amber-600 hover:bg-amber-500 text-amber-50" : ""
14505
14509
  ),
@@ -14512,7 +14516,7 @@ function ViewSection(p) {
14512
14516
  {
14513
14517
  type: "button",
14514
14518
  onClick: p.onToggleSelectionPane,
14515
- className: chunk3P6O7ZDM_js.cn(
14519
+ className: chunkSXCO5HHN_js.cn(
14516
14520
  pill,
14517
14521
  p.isSelectionPaneOpen ? "bg-primary hover:bg-primary/80 text-white" : ""
14518
14522
  ),
@@ -14529,7 +14533,7 @@ function ViewSection(p) {
14529
14533
  type: "button",
14530
14534
  onClick: p.onToggleEyedropper,
14531
14535
  disabled: !p.canEdit,
14532
- className: chunk3P6O7ZDM_js.cn(
14536
+ className: chunkSXCO5HHN_js.cn(
14533
14537
  pill,
14534
14538
  p.eyedropperActive ? "bg-purple-600 hover:bg-purple-500 text-purple-50" : ""
14535
14539
  ),
@@ -14544,7 +14548,7 @@ function ViewSection(p) {
14544
14548
  "button",
14545
14549
  {
14546
14550
  onClick: () => p.onSetShowGrid(!p.showGrid),
14547
- className: chunk3P6O7ZDM_js.cn(pill, p.showGrid ? "bg-primary text-white" : ""),
14551
+ className: chunkSXCO5HHN_js.cn(pill, p.showGrid ? "bg-primary text-white" : ""),
14548
14552
  title: t("pptx.grid.toggleGrid"),
14549
14553
  children: t("pptx.grid.grid")
14550
14554
  }
@@ -14553,7 +14557,7 @@ function ViewSection(p) {
14553
14557
  "button",
14554
14558
  {
14555
14559
  onClick: () => p.onSetShowRulers(!p.showRulers),
14556
- className: chunk3P6O7ZDM_js.cn(pill, p.showRulers ? "bg-primary text-white" : ""),
14560
+ className: chunkSXCO5HHN_js.cn(pill, p.showRulers ? "bg-primary text-white" : ""),
14557
14561
  title: t("pptx.ruler.toggleRulers"),
14558
14562
  children: t("pptx.ruler.rulers")
14559
14563
  }
@@ -14562,7 +14566,7 @@ function ViewSection(p) {
14562
14566
  "button",
14563
14567
  {
14564
14568
  onClick: () => p.onSetSnapToGrid(!p.snapToGrid),
14565
- className: chunk3P6O7ZDM_js.cn(pill, p.snapToGrid ? "bg-primary text-white" : ""),
14569
+ className: chunkSXCO5HHN_js.cn(pill, p.snapToGrid ? "bg-primary text-white" : ""),
14566
14570
  title: t("pptx.grid.snapToGrid"),
14567
14571
  children: t("pptx.grid.snapToGrid")
14568
14572
  }
@@ -14571,7 +14575,7 @@ function ViewSection(p) {
14571
14575
  "button",
14572
14576
  {
14573
14577
  onClick: () => p.onSetSnapToShape(!p.snapToShape),
14574
- className: chunk3P6O7ZDM_js.cn(pill, p.snapToShape ? "bg-primary text-white" : ""),
14578
+ className: chunkSXCO5HHN_js.cn(pill, p.snapToShape ? "bg-primary text-white" : ""),
14575
14579
  title: t("pptx.grid.snapToShape"),
14576
14580
  children: t("pptx.grid.snapToShape")
14577
14581
  }
@@ -14598,7 +14602,7 @@ function ViewSection(p) {
14598
14602
  "button",
14599
14603
  {
14600
14604
  onClick: () => p.onSetSpellCheckEnabled(!p.spellCheckEnabled),
14601
- className: chunk3P6O7ZDM_js.cn(pill, p.spellCheckEnabled ? "bg-primary text-white" : ""),
14605
+ className: chunkSXCO5HHN_js.cn(pill, p.spellCheckEnabled ? "bg-primary text-white" : ""),
14602
14606
  title: t("pptx.view.toggleSpellCheck"),
14603
14607
  children: t("pptx.view.spell")
14604
14608
  }
@@ -14617,7 +14621,7 @@ function MobileSheet({
14617
14621
  headerRight
14618
14622
  }) {
14619
14623
  const sheetRef = React5.useRef(null);
14620
- const { dragY, dragging, handlers } = chunk3P6O7ZDM_js.useSheetDismissDrag(onClose);
14624
+ const { dragY, dragging, handlers } = chunkSXCO5HHN_js.useSheetDismissDrag(onClose);
14621
14625
  React5.useEffect(() => {
14622
14626
  if (!open) {
14623
14627
  return;
@@ -14648,7 +14652,7 @@ function MobileSheet({
14648
14652
  "div",
14649
14653
  {
14650
14654
  ref: sheetRef,
14651
- className: chunk3P6O7ZDM_js.cn(
14655
+ className: chunkSXCO5HHN_js.cn(
14652
14656
  "relative bg-background border-t border-border rounded-t-2xl shadow-2xl flex flex-col overflow-hidden",
14653
14657
  "animate-in slide-in-from-bottom duration-200",
14654
14658
  className
@@ -14706,7 +14710,7 @@ function MobileMenuSheet(props) {
14706
14710
  {
14707
14711
  type: "button",
14708
14712
  onClick: () => setActive(active === key ? null : key),
14709
- className: chunk3P6O7ZDM_js.cn(
14713
+ className: chunkSXCO5HHN_js.cn(
14710
14714
  "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]",
14711
14715
  active === key ? "bg-primary text-white border-primary" : "border-border text-muted-foreground hover:text-foreground hover:bg-accent/40"
14712
14716
  ),
@@ -14997,7 +15001,7 @@ function MobileToolbar(props) {
14997
15001
  {
14998
15002
  type: "button",
14999
15003
  onClick: () => onSetMode("present"),
15000
- className: chunk3P6O7ZDM_js.cn(btn, "text-primary"),
15004
+ className: chunkSXCO5HHN_js.cn(btn, "text-primary"),
15001
15005
  title: t("pptx.toolbar.present"),
15002
15006
  "aria-label": t("pptx.toolbar.present"),
15003
15007
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPresentation, { className: "w-5 h-5" })
@@ -15008,7 +15012,7 @@ function MobileToolbar(props) {
15008
15012
  {
15009
15013
  type: "button",
15010
15014
  onClick: props.onOpenShareDialog ?? props.onPackageForSharing,
15011
- className: chunk3P6O7ZDM_js.cn(btn, "bg-primary text-white hover:bg-primary/90 px-3"),
15015
+ className: chunkSXCO5HHN_js.cn(btn, "bg-primary text-white hover:bg-primary/90 px-3"),
15012
15016
  title: t("pptx.toolbar.share"),
15013
15017
  "aria-label": t("pptx.toolbar.share"),
15014
15018
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuShare2, { className: "w-4 h-4" })
@@ -15033,7 +15037,7 @@ var FILL_COLORS = [
15033
15037
  "#008888",
15034
15038
  "#888888"
15035
15039
  ];
15036
- var TOP_SHAPES = chunk3P6O7ZDM_js.SHAPE_PRESETS.slice(0, 12);
15040
+ var TOP_SHAPES = chunkSXCO5HHN_js.SHAPE_PRESETS.slice(0, 12);
15037
15041
  function DrawingGroup(p) {
15038
15042
  const { t } = reactI18next.useTranslation();
15039
15043
  const [shapesOpen, setShapesOpen] = React5.useState(false);
@@ -15114,7 +15118,7 @@ function DrawingGroup(p) {
15114
15118
  "button",
15115
15119
  {
15116
15120
  type: "button",
15117
- className: chunk3P6O7ZDM_js.cn(
15121
+ className: chunkSXCO5HHN_js.cn(
15118
15122
  "flex items-center gap-2 w-full px-3 py-1.5 text-xs text-foreground hover:bg-muted transition-colors",
15119
15123
  p.newShapeType === s.type && "bg-accent"
15120
15124
  ),
@@ -15258,7 +15262,7 @@ function DrawingGroup(p) {
15258
15262
  {
15259
15263
  type: "button",
15260
15264
  disabled: true,
15261
- className: chunk3P6O7ZDM_js.cn(pill, "opacity-50 cursor-not-allowed"),
15265
+ className: chunkSXCO5HHN_js.cn(pill, "opacity-50 cursor-not-allowed"),
15262
15266
  title: t("pptx.drawing.shapeEffectsUnavailable"),
15263
15267
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSparkles, { className: ic2 })
15264
15268
  }
@@ -15368,7 +15372,7 @@ function TabRowActions(p) {
15368
15372
  {
15369
15373
  type: "button",
15370
15374
  onClick: p.onOpenShareDialog ?? p.onPackageForSharing,
15371
- className: chunk3P6O7ZDM_js.cn(
15375
+ className: chunkSXCO5HHN_js.cn(
15372
15376
  "relative inline-flex items-center gap-1 px-2.5 py-1 rounded-sm text-[11px] font-medium transition-colors whitespace-nowrap",
15373
15377
  isCollaborating ? "bg-green-600 hover:bg-green-500 text-white" : "bg-primary hover:bg-primary/90 text-white"
15374
15378
  ),
@@ -15448,7 +15452,7 @@ function CustomShowsControls({
15448
15452
  {
15449
15453
  type: "button",
15450
15454
  onClick: onToggleCurrentSlideInActiveShow,
15451
- className: chunk3P6O7ZDM_js.cn(
15455
+ className: chunkSXCO5HHN_js.cn(
15452
15456
  "px-2 py-1 rounded text-[11px] transition-colors",
15453
15457
  isCurrentSlideInActiveShow ? "bg-primary text-white" : "bg-muted hover:bg-accent"
15454
15458
  ),
@@ -15496,7 +15500,7 @@ function PresentDropdown({
15496
15500
  {
15497
15501
  type: "button",
15498
15502
  onClick: onPresent,
15499
- className: chunk3P6O7ZDM_js.cn(
15503
+ className: chunkSXCO5HHN_js.cn(
15500
15504
  "px-2 py-1 transition-colors",
15501
15505
  isActive ? "bg-primary text-white" : "hover:bg-accent text-foreground"
15502
15506
  ),
@@ -15509,7 +15513,7 @@ function PresentDropdown({
15509
15513
  {
15510
15514
  type: "button",
15511
15515
  onClick: () => setOpen((prev) => !prev),
15512
- className: chunk3P6O7ZDM_js.cn(
15516
+ className: chunkSXCO5HHN_js.cn(
15513
15517
  "px-1 py-1 transition-colors border-l border-border",
15514
15518
  open ? "bg-primary text-white" : "hover:bg-accent text-foreground"
15515
15519
  ),
@@ -15697,7 +15701,7 @@ function OverflowMenu(p) {
15697
15701
  {
15698
15702
  type: "button",
15699
15703
  onClick: () => p.onSetOverflowMenuOpen(!p.isOverflowMenuOpen),
15700
- className: chunk3P6O7ZDM_js.cn(
15704
+ className: chunkSXCO5HHN_js.cn(
15701
15705
  "p-1.5 rounded transition-colors",
15702
15706
  p.isOverflowMenuOpen ? "bg-primary/80 text-white" : "bg-muted hover:bg-accent"
15703
15707
  ),
@@ -15752,7 +15756,7 @@ function ToolbarPrimaryRow(p) {
15752
15756
  {
15753
15757
  type: "button",
15754
15758
  onClick: onToggleSidebar,
15755
- className: chunk3P6O7ZDM_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
15759
+ className: chunkSXCO5HHN_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
15756
15760
  title: t("pptx.toolbar.toggleSlidesPanel"),
15757
15761
  "aria-label": t("pptx.toolbar.toggleSlidesPanel"),
15758
15762
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelLeft, { className: ic2 })
@@ -15764,7 +15768,7 @@ function ToolbarPrimaryRow(p) {
15764
15768
  {
15765
15769
  type: "button",
15766
15770
  onClick: p.onToggleComments,
15767
- className: chunk3P6O7ZDM_js.cn(
15771
+ className: chunkSXCO5HHN_js.cn(
15768
15772
  qab,
15769
15773
  "relative max-md:hidden",
15770
15774
  p.isCommentsPanelOpen ? "text-foreground" : "text-muted-foreground"
@@ -15831,7 +15835,7 @@ function ToolbarPrimaryRow(p) {
15831
15835
  {
15832
15836
  type: "button",
15833
15837
  onClick: onToggleInspector,
15834
- className: chunk3P6O7ZDM_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
15838
+ className: chunkSXCO5HHN_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
15835
15839
  title: t("pptx.toolbar.toggleInspector"),
15836
15840
  "aria-label": t("pptx.toolbar.toggleInspector"),
15837
15841
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelRight, { className: ic2 })
@@ -15842,7 +15846,7 @@ function ToolbarPrimaryRow(p) {
15842
15846
  {
15843
15847
  type: "button",
15844
15848
  onClick: p.onOpenSettings ?? p.onToggleShortcuts,
15845
- className: chunk3P6O7ZDM_js.cn(qab, "text-muted-foreground"),
15849
+ className: chunkSXCO5HHN_js.cn(qab, "text-muted-foreground"),
15846
15850
  title: t("pptx.toolbar.settingsShortcuts"),
15847
15851
  "aria-label": t("pptx.toolbar.settings"),
15848
15852
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSettings, { className: ics })
@@ -15881,49 +15885,58 @@ function Toolbar(p) {
15881
15885
  className: "relative z-20 border-b border-border bg-secondary/50 overflow-visible",
15882
15886
  children: [
15883
15887
  /* @__PURE__ */ jsxRuntime.jsx(ToolbarPrimaryRow, { ...p }),
15884
- showRibbon && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center border-b border-border/60 px-1 max-md:overflow-x-auto max-md:scrollbar-none", children: [
15885
- chunk3P6O7ZDM_js.TOOLBAR_SECTIONS.map((s) => /* @__PURE__ */ jsxRuntime.jsx(
15886
- "button",
15887
- {
15888
- type: "button",
15889
- onClick: () => onSetToolbarSection(s.id),
15890
- className: chunk3P6O7ZDM_js.cn(
15891
- "relative px-3.5 py-2 text-[12px] font-medium whitespace-nowrap transition-colors max-md:min-h-[36px] max-md:px-3",
15892
- toolbarSection === s.id ? s.id === "file" ? "text-white bg-primary/80 rounded-sm" : "text-foreground after:absolute after:-bottom-px after:left-0 after:right-0 after:h-[2.5px] after:bg-primary" : s.id === "file" ? "text-primary hover:bg-primary/15 rounded-sm" : "text-muted-foreground hover:text-foreground hover:bg-accent/30"
15893
- ),
15894
- children: t(s.labelKey)
15895
- },
15896
- s.id
15897
- )),
15898
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
15899
- /* @__PURE__ */ jsxRuntime.jsx(
15900
- TabRowActions,
15901
- {
15902
- onEnterRehearsalMode: p.canEdit ? p.onEnterRehearsalMode : void 0,
15903
- onOpenShareDialog: p.onOpenShareDialog,
15904
- onPackageForSharing: p.onPackageForSharing
15905
- }
15906
- ),
15907
- isNarrowViewport && /* @__PURE__ */ jsxRuntime.jsx(
15908
- "button",
15909
- {
15910
- type: "button",
15911
- onClick: p.onToggleCompactToolbar,
15912
- className: chunk3P6O7ZDM_js.cn(
15913
- "px-2 py-1 rounded text-[11px] transition-colors mr-1",
15914
- isCompactToolbarOpen ? "bg-primary/80 text-white" : "text-muted-foreground hover:text-foreground"
15915
- ),
15916
- title: t(
15917
- isCompactToolbarOpen ? "pptx.ribbon.collapseRibbon" : "pptx.ribbon.expandRibbon"
15888
+ showRibbon && /* @__PURE__ */ jsxRuntime.jsxs(
15889
+ "div",
15890
+ {
15891
+ role: "tablist",
15892
+ className: "flex items-center border-b border-border/60 px-1 max-md:overflow-x-auto max-md:scrollbar-none",
15893
+ children: [
15894
+ chunkSXCO5HHN_js.TOOLBAR_SECTIONS.map((s) => /* @__PURE__ */ jsxRuntime.jsx(
15895
+ "button",
15896
+ {
15897
+ type: "button",
15898
+ role: "tab",
15899
+ "aria-selected": toolbarSection === s.id,
15900
+ onClick: () => onSetToolbarSection(s.id),
15901
+ className: chunkSXCO5HHN_js.cn(
15902
+ "relative px-3.5 py-2 text-[12px] font-medium whitespace-nowrap transition-colors max-md:min-h-[36px] max-md:px-3",
15903
+ toolbarSection === s.id ? s.id === "file" ? "text-white bg-primary/80 rounded-sm" : "text-foreground after:absolute after:-bottom-px after:left-0 after:right-0 after:h-[2.5px] after:bg-primary" : s.id === "file" ? "text-primary hover:bg-primary/15 rounded-sm" : "text-muted-foreground hover:text-foreground hover:bg-accent/30"
15904
+ ),
15905
+ children: t(s.labelKey)
15906
+ },
15907
+ s.id
15908
+ )),
15909
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1" }),
15910
+ /* @__PURE__ */ jsxRuntime.jsx(
15911
+ TabRowActions,
15912
+ {
15913
+ onEnterRehearsalMode: p.canEdit ? p.onEnterRehearsalMode : void 0,
15914
+ onOpenShareDialog: p.onOpenShareDialog,
15915
+ onPackageForSharing: p.onPackageForSharing
15916
+ }
15918
15917
  ),
15919
- children: t(isCompactToolbarOpen ? "pptx.ribbon.collapseRibbon" : "pptx.ribbon.expandRibbon")
15920
- }
15921
- )
15922
- ] }),
15918
+ isNarrowViewport && /* @__PURE__ */ jsxRuntime.jsx(
15919
+ "button",
15920
+ {
15921
+ type: "button",
15922
+ onClick: p.onToggleCompactToolbar,
15923
+ className: chunkSXCO5HHN_js.cn(
15924
+ "px-2 py-1 rounded text-[11px] transition-colors mr-1",
15925
+ isCompactToolbarOpen ? "bg-primary/80 text-white" : "text-muted-foreground hover:text-foreground"
15926
+ ),
15927
+ title: t(
15928
+ isCompactToolbarOpen ? "pptx.ribbon.collapseRibbon" : "pptx.ribbon.expandRibbon"
15929
+ ),
15930
+ children: t(isCompactToolbarOpen ? "pptx.ribbon.collapseRibbon" : "pptx.ribbon.expandRibbon")
15931
+ }
15932
+ )
15933
+ ]
15934
+ }
15935
+ ),
15923
15936
  showRibbon && /* @__PURE__ */ jsxRuntime.jsxs(
15924
15937
  "div",
15925
15938
  {
15926
- className: chunk3P6O7ZDM_js.cn(
15939
+ className: chunkSXCO5HHN_js.cn(
15927
15940
  "flex items-center gap-1.5 px-2 py-1 max-md:px-1 max-md:py-0.5 overflow-visible flex-nowrap",
15928
15941
  isNarrowViewport && !isCompactToolbarOpen && "hidden"
15929
15942
  ),
@@ -16161,13 +16174,13 @@ function Toolbar(p) {
16161
16174
  }
16162
16175
  var INPUT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px]";
16163
16176
  var SELECT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px]";
16164
- var ENTRANCE_PRESETS = chunk3P6O7ZDM_js.ANIMATION_PRESET_OPTIONS.filter(
16177
+ var ENTRANCE_PRESETS = chunkSXCO5HHN_js.ANIMATION_PRESET_OPTIONS.filter(
16165
16178
  (o) => o.value === "fadeIn" || o.value === "flyIn" || o.value === "zoomIn"
16166
16179
  );
16167
- var EXIT_PRESETS = chunk3P6O7ZDM_js.ANIMATION_PRESET_OPTIONS.filter(
16180
+ var EXIT_PRESETS = chunkSXCO5HHN_js.ANIMATION_PRESET_OPTIONS.filter(
16168
16181
  (o) => o.value === "fadeOut" || o.value === "flyOut" || o.value === "zoomOut"
16169
16182
  );
16170
- var EMPHASIS_PRESETS = chunk3P6O7ZDM_js.ANIMATION_PRESET_OPTIONS.filter(
16183
+ var EMPHASIS_PRESETS = chunkSXCO5HHN_js.ANIMATION_PRESET_OPTIONS.filter(
16171
16184
  (o) => o.value === "spin" || o.value === "pulse" || o.value === "colorWave" || o.value === "bounce" || o.value === "flash" || o.value === "growShrink" || o.value === "teeter"
16172
16185
  );
16173
16186
  var TRIGGER_OPTIONS = [
@@ -16269,7 +16282,7 @@ function AnimationTimelineSection({
16269
16282
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-6 rounded bg-muted/50 border border-border overflow-hidden", children: timelineBarData.map((bar) => /* @__PURE__ */ jsxRuntime.jsx(
16270
16283
  "div",
16271
16284
  {
16272
- className: chunk3P6O7ZDM_js.cn(
16285
+ className: chunkSXCO5HHN_js.cn(
16273
16286
  "absolute top-0.5 bottom-0.5 rounded-sm transition-colors",
16274
16287
  animationTypeColor(bar.anim),
16275
16288
  bar.anim.elementId === selectedElementId && "ring-1 ring-primary"
@@ -16303,7 +16316,7 @@ function AnimationTimelineSection({
16303
16316
  onDragEnd: handleDragEnd,
16304
16317
  onMouseEnter: () => handleAnimationHover(anim),
16305
16318
  onMouseLeave: handleAnimationHoverEnd,
16306
- className: chunk3P6O7ZDM_js.cn(
16319
+ className: chunkSXCO5HHN_js.cn(
16307
16320
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] cursor-grab transition-colors",
16308
16321
  isSelected ? "bg-primary/30 text-primary" : "bg-muted/50 text-muted-foreground",
16309
16322
  isDragging && "opacity-40",
@@ -16467,13 +16480,13 @@ function useAnimationPreview({
16467
16480
  if (!preset || preset === "none") {
16468
16481
  return;
16469
16482
  }
16470
- chunk3P6O7ZDM_js.startPreviewAnimation(anim.elementId, preset, {
16483
+ chunkSXCO5HHN_js.startPreviewAnimation(anim.elementId, preset, {
16471
16484
  direction: anim.direction,
16472
16485
  durationMs: anim.durationMs ?? 500,
16473
16486
  timingCurve: anim.timingCurve
16474
16487
  });
16475
16488
  }, []);
16476
- const handleAnimationHoverEnd = React5.useCallback(() => chunk3P6O7ZDM_js.stopPreviewAnimation(), []);
16489
+ const handleAnimationHoverEnd = React5.useCallback(() => chunkSXCO5HHN_js.stopPreviewAnimation(), []);
16477
16490
  const handlePreviewClick = React5.useCallback(() => {
16478
16491
  if (!selectedElementAnimation) {
16479
16492
  return;
@@ -16482,7 +16495,7 @@ function useAnimationPreview({
16482
16495
  if (!preset || preset === "none") {
16483
16496
  return;
16484
16497
  }
16485
- chunk3P6O7ZDM_js.startPreviewAnimation(selectedElementId, preset, {
16498
+ chunkSXCO5HHN_js.startPreviewAnimation(selectedElementId, preset, {
16486
16499
  direction: selectedElementAnimation.direction,
16487
16500
  durationMs: selectedElementAnimation.durationMs ?? 500,
16488
16501
  timingCurve: selectedElementAnimation.timingCurve
@@ -16814,7 +16827,7 @@ function AnimationPanel({
16814
16827
  {
16815
16828
  type: "button",
16816
16829
  disabled: !canEdit,
16817
- className: chunk3P6O7ZDM_js.cn(
16830
+ className: chunkSXCO5HHN_js.cn(
16818
16831
  "flex items-center justify-center w-7 h-7 rounded border transition-colors",
16819
16832
  isActive ? "border-primary bg-primary/20 text-primary" : "border-border bg-muted text-muted-foreground hover:bg-accent"
16820
16833
  ),
@@ -17056,7 +17069,7 @@ function ActionTriggerSection({
17056
17069
  "select",
17057
17070
  {
17058
17071
  disabled: !canEdit,
17059
- className: chunk3P6O7ZDM_js.cn(INPUT, "w-full"),
17072
+ className: chunkSXCO5HHN_js.cn(INPUT, "w-full"),
17060
17073
  value: activeType,
17061
17074
  onChange: (e) => onChangeType(e.target.value),
17062
17075
  children: ACTION_TYPE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.label) }, o.value))
@@ -17067,7 +17080,7 @@ function ActionTriggerSection({
17067
17080
  {
17068
17081
  type: "text",
17069
17082
  disabled: !canEdit,
17070
- className: chunk3P6O7ZDM_js.cn(INPUT, "w-full"),
17083
+ className: chunkSXCO5HHN_js.cn(INPUT, "w-full"),
17071
17084
  placeholder: "https://...",
17072
17085
  value: action?.url ?? fallbackUrl ?? "",
17073
17086
  onChange: (e) => onChangeUrl(e.target.value)
@@ -17078,7 +17091,7 @@ function ActionTriggerSection({
17078
17091
  {
17079
17092
  type: "number",
17080
17093
  disabled: !canEdit,
17081
- className: chunk3P6O7ZDM_js.cn(INPUT, "w-full"),
17094
+ className: chunkSXCO5HHN_js.cn(INPUT, "w-full"),
17082
17095
  placeholder: t("pptx.action.slideNumberPlaceholder"),
17083
17096
  min: 1,
17084
17097
  max: slideCount,
@@ -18733,7 +18746,7 @@ function ConnectorPanel({
18733
18746
  "select",
18734
18747
  {
18735
18748
  disabled: !canEdit,
18736
- className: chunk3P6O7ZDM_js.cn(INPUT, "w-full"),
18749
+ className: chunkSXCO5HHN_js.cn(INPUT, "w-full"),
18737
18750
  value: selectedElement.shapeStyle?.[key] ?? "none",
18738
18751
  onChange: (e) => onUpdateElementStyle({ [key]: e.target.value }),
18739
18752
  children: [
@@ -18785,7 +18798,7 @@ function OlePropertiesPanel({
18785
18798
  /* @__PURE__ */ jsxRuntime.jsx(
18786
18799
  "span",
18787
18800
  {
18788
- className: chunk3P6O7ZDM_js.cn(
18801
+ className: chunkSXCO5HHN_js.cn(
18789
18802
  "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium",
18790
18803
  ole.isLinked ? "bg-blue-500/20 text-blue-400" : "bg-green-500/20 text-green-400"
18791
18804
  ),
@@ -18844,7 +18857,7 @@ function LayerOrderButtons({
18844
18857
  "button",
18845
18858
  {
18846
18859
  type: "button",
18847
- className: chunk3P6O7ZDM_js.cn("flex-1", BTN),
18860
+ className: chunkSXCO5HHN_js.cn("flex-1", BTN),
18848
18861
  disabled: !canEdit,
18849
18862
  onClick: () => onMoveLayer("forward"),
18850
18863
  children: "\u2191 Forward"
@@ -18854,7 +18867,7 @@ function LayerOrderButtons({
18854
18867
  "button",
18855
18868
  {
18856
18869
  type: "button",
18857
- className: chunk3P6O7ZDM_js.cn("flex-1", BTN),
18870
+ className: chunkSXCO5HHN_js.cn("flex-1", BTN),
18858
18871
  disabled: !canEdit,
18859
18872
  onClick: () => onMoveLayer("backward"),
18860
18873
  children: "\u2193 Backward"
@@ -18878,7 +18891,7 @@ function ArtisticEffectsGallery({
18878
18891
  {
18879
18892
  type: "button",
18880
18893
  disabled: !canEdit,
18881
- className: chunk3P6O7ZDM_js.cn(
18894
+ className: chunkSXCO5HHN_js.cn(
18882
18895
  "flex flex-col items-center gap-0.5 rounded border p-0.5 hover:bg-accent/50",
18883
18896
  isActive ? "border-primary bg-primary/10" : "border-border"
18884
18897
  ),
@@ -19327,7 +19340,7 @@ function ImagePropertiesPanel({
19327
19340
  {
19328
19341
  rows: 2,
19329
19342
  disabled: !canEdit,
19330
- className: chunk3P6O7ZDM_js.cn(INPUT, "resize-none text-[11px]"),
19343
+ className: chunkSXCO5HHN_js.cn(INPUT, "resize-none text-[11px]"),
19331
19344
  value: selectedElement.altText ?? "",
19332
19345
  onChange: (e) => onUpdateElement({
19333
19346
  altText: e.target.value
@@ -20286,11 +20299,11 @@ function ShapeTextPanels({
20286
20299
  {
20287
20300
  value: selectedElement.shapeType || "rect",
20288
20301
  disabled: !canEdit,
20289
- className: chunk3P6O7ZDM_js.cn(INPUT, "w-full"),
20302
+ className: chunkSXCO5HHN_js.cn(INPUT, "w-full"),
20290
20303
  onChange: (e) => onUpdateElement({
20291
20304
  shapeType: e.target.value
20292
20305
  }),
20293
- children: chunk3P6O7ZDM_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
20306
+ children: chunkSXCO5HHN_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
20294
20307
  }
20295
20308
  )
20296
20309
  ] }),
@@ -20420,7 +20433,7 @@ function TextFormatToggle({
20420
20433
  {
20421
20434
  type: "button",
20422
20435
  disabled,
20423
- className: chunk3P6O7ZDM_js.cn(
20436
+ className: chunkSXCO5HHN_js.cn(
20424
20437
  "px-2 py-1 rounded text-[11px] transition-colors",
20425
20438
  italic && "italic",
20426
20439
  underline && "underline",
@@ -20708,8 +20721,9 @@ function SmartArtLayoutSwitcher({
20708
20721
  "button",
20709
20722
  {
20710
20723
  type: "button",
20724
+ "data-testid": `smartart-layout-${type}`,
20711
20725
  disabled: !canEdit,
20712
- className: chunk3P6O7ZDM_js.cn(
20726
+ className: chunkSXCO5HHN_js.cn(
20713
20727
  "flex flex-col items-center gap-0.5 rounded border p-1.5 transition-colors",
20714
20728
  "text-[9px] leading-tight",
20715
20729
  isActive ? "border-primary bg-primary/15 text-primary" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground",
@@ -20781,7 +20795,7 @@ function SmartArtNodeStyleControls({
20781
20795
  disabled: !canEdit,
20782
20796
  "aria-label": `Bold ${label}`,
20783
20797
  "aria-pressed": bold,
20784
- className: chunk3P6O7ZDM_js.cn(
20798
+ className: chunkSXCO5HHN_js.cn(
20785
20799
  EMPHASIS_BTN,
20786
20800
  "font-bold",
20787
20801
  bold ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground"
@@ -20797,7 +20811,7 @@ function SmartArtNodeStyleControls({
20797
20811
  disabled: !canEdit,
20798
20812
  "aria-label": `Italic ${label}`,
20799
20813
  "aria-pressed": italic,
20800
- className: chunk3P6O7ZDM_js.cn(
20814
+ className: chunkSXCO5HHN_js.cn(
20801
20815
  EMPHASIS_BTN,
20802
20816
  "italic",
20803
20817
  italic ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground"
@@ -20836,7 +20850,7 @@ function SmartArtNodeRow({
20836
20850
  "div",
20837
20851
  {
20838
20852
  role: "listitem",
20839
- className: chunk3P6O7ZDM_js.cn(
20853
+ className: chunkSXCO5HHN_js.cn(
20840
20854
  "rounded border bg-background/60 p-1.5",
20841
20855
  isChild ? "border-border/60 ml-4" : "border-border"
20842
20856
  ),
@@ -20848,9 +20862,10 @@ function SmartArtNodeRow({
20848
20862
  {
20849
20863
  ref: inputRef,
20850
20864
  type: "text",
20865
+ "data-testid": "smartart-node-text",
20851
20866
  disabled: !canEdit,
20852
20867
  "aria-label": label,
20853
- className: chunk3P6O7ZDM_js.cn(INPUT, "flex-1 text-[11px] py-0.5"),
20868
+ className: chunkSXCO5HHN_js.cn(INPUT, "flex-1 text-[11px] py-0.5"),
20854
20869
  value: text,
20855
20870
  onChange: (e) => onChangeText(nodeId, e.target.value),
20856
20871
  onKeyDown: (e) => onKeyDown(e, nodeId),
@@ -20899,7 +20914,7 @@ function SmartArtNodeRow({
20899
20914
  {
20900
20915
  type: "button",
20901
20916
  disabled: !canEdit || removeDisabled,
20902
- className: chunk3P6O7ZDM_js.cn(MINI_BTN, "hover:text-red-400"),
20917
+ className: chunkSXCO5HHN_js.cn(MINI_BTN, "hover:text-red-400"),
20903
20918
  onClick: () => onRemove(nodeId),
20904
20919
  "aria-label": `Remove ${label}`,
20905
20920
  title: removeDisabled ? t("pptx.smartArt.layoutMinimum") : t("pptx.smartArt.remove"),
@@ -20957,7 +20972,7 @@ function SmartArtPropertiesPanel({
20957
20972
  const reflowed = box ? chunkJWS3RQKN_js.rebuildDrawingShapesIfCleared(
20958
20973
  newData,
20959
20974
  newData.layout,
20960
- chunk3P6O7ZDM_js.resolveSmartArtDataPalette(newData),
20975
+ chunkSXCO5HHN_js.resolveSmartArtDataPalette(newData),
20961
20976
  newData.style ?? "flat",
20962
20977
  "inspector",
20963
20978
  box
@@ -21064,8 +21079,9 @@ function SmartArtPropertiesPanel({
21064
21079
  "select",
21065
21080
  {
21066
21081
  disabled: !canEdit,
21082
+ "data-testid": "smartart-color-scheme",
21067
21083
  "aria-label": t("pptx.smartart.colorScheme"),
21068
- className: chunk3P6O7ZDM_js.cn(INPUT, "w-full"),
21084
+ className: chunkSXCO5HHN_js.cn(INPUT, "w-full"),
21069
21085
  value: smartArtData.colorScheme ?? "colorful1",
21070
21086
  onChange: (e) => updateSmartArt({ colorScheme: e.target.value }),
21071
21087
  children: COLOR_SCHEMES.map((cs) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: cs, children: cs }, cs))
@@ -21080,7 +21096,7 @@ function SmartArtPropertiesPanel({
21080
21096
  type: "button",
21081
21097
  disabled: !canEdit,
21082
21098
  "aria-pressed": (smartArtData.style ?? "flat") === s,
21083
- className: chunk3P6O7ZDM_js.cn(
21099
+ className: chunkSXCO5HHN_js.cn(
21084
21100
  "flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
21085
21101
  (smartArtData.style ?? "flat") === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
21086
21102
  ),
@@ -21484,7 +21500,7 @@ function TableCellFormattingPanel({
21484
21500
  {
21485
21501
  type: "button",
21486
21502
  disabled: !canEdit,
21487
- className: chunk3P6O7ZDM_js.cn(
21503
+ className: chunkSXCO5HHN_js.cn(
21488
21504
  "px-2 py-1 rounded text-[11px] transition-colors",
21489
21505
  cls,
21490
21506
  cs[key] ? "bg-primary text-white" : "bg-muted hover:bg-accent"
@@ -21503,7 +21519,7 @@ function TableCellFormattingPanel({
21503
21519
  {
21504
21520
  type: "button",
21505
21521
  disabled: !canEdit,
21506
- className: chunk3P6O7ZDM_js.cn(
21522
+ className: chunkSXCO5HHN_js.cn(
21507
21523
  "px-2 py-1 rounded text-[11px] transition-colors",
21508
21524
  cs.align === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
21509
21525
  ),
@@ -21521,7 +21537,7 @@ function TableCellFormattingPanel({
21521
21537
  {
21522
21538
  type: "button",
21523
21539
  disabled: !canEdit,
21524
- className: chunk3P6O7ZDM_js.cn(
21540
+ className: chunkSXCO5HHN_js.cn(
21525
21541
  "px-2 py-1 rounded text-[11px] transition-colors",
21526
21542
  cs.vAlign === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
21527
21543
  ),
@@ -21554,7 +21570,7 @@ function TableCellFormattingPanel({
21554
21570
  {
21555
21571
  type: "number",
21556
21572
  disabled: !canEdit,
21557
- className: chunk3P6O7ZDM_js.cn(INPUT, "w-14"),
21573
+ className: chunkSXCO5HHN_js.cn(INPUT, "w-14"),
21558
21574
  min: 0,
21559
21575
  max: 10,
21560
21576
  value: cs[widthKey] ?? 1,
@@ -21570,7 +21586,7 @@ function TableCellFormattingPanel({
21570
21586
  {
21571
21587
  type: "button",
21572
21588
  disabled: !canEdit,
21573
- className: chunk3P6O7ZDM_js.cn(BTN, "text-center"),
21589
+ className: chunkSXCO5HHN_js.cn(BTN, "text-center"),
21574
21590
  onClick: () => {
21575
21591
  const newRows = chunkJWS3RQKN_js.computeMergeCellRight(td, rowIndex, columnIndex);
21576
21592
  if (newRows) {
@@ -21585,7 +21601,7 @@ function TableCellFormattingPanel({
21585
21601
  {
21586
21602
  type: "button",
21587
21603
  disabled: !canEdit,
21588
- className: chunk3P6O7ZDM_js.cn(BTN, "text-center"),
21604
+ className: chunkSXCO5HHN_js.cn(BTN, "text-center"),
21589
21605
  onClick: () => {
21590
21606
  const newRows = chunkJWS3RQKN_js.computeMergeCellDown(td, rowIndex, columnIndex);
21591
21607
  if (newRows) {
@@ -21600,7 +21616,7 @@ function TableCellFormattingPanel({
21600
21616
  {
21601
21617
  type: "button",
21602
21618
  disabled: !canEdit,
21603
- className: chunk3P6O7ZDM_js.cn(BTN, "text-center"),
21619
+ className: chunkSXCO5HHN_js.cn(BTN, "text-center"),
21604
21620
  onClick: () => {
21605
21621
  const newRows = chunkJWS3RQKN_js.computeSplitCell(td, rowIndex, columnIndex);
21606
21622
  if (newRows) {
@@ -22008,7 +22024,7 @@ function InspectorCommentRow({
22008
22024
  return /* @__PURE__ */ jsxRuntime.jsxs(
22009
22025
  "div",
22010
22026
  {
22011
- className: chunk3P6O7ZDM_js.cn(
22027
+ className: chunkSXCO5HHN_js.cn(
22012
22028
  "rounded border border-border bg-card p-2",
22013
22029
  depth > 0 && "ml-3 border-l-2 border-l-primary/40"
22014
22030
  ),
@@ -22096,7 +22112,7 @@ function InspectorCommentRow({
22096
22112
  "button",
22097
22113
  {
22098
22114
  type: "button",
22099
- className: chunk3P6O7ZDM_js.cn(
22115
+ className: chunkSXCO5HHN_js.cn(
22100
22116
  "inline-flex items-center justify-center p-1.5 border-l border-border transition-colors",
22101
22117
  comment.resolved ? "bg-green-900/40 text-green-300 hover:bg-green-900/60" : "hover:bg-accent text-foreground hover:text-foreground"
22102
22118
  ),
@@ -22290,7 +22306,7 @@ function InspectorCommentsSection({
22290
22306
  type: "button",
22291
22307
  onClick: onAddComment,
22292
22308
  disabled: !commentDraft.trim(),
22293
- className: chunk3P6O7ZDM_js.cn(
22309
+ className: chunkSXCO5HHN_js.cn(
22294
22310
  "w-full inline-flex items-center justify-center gap-1 rounded px-2 py-1 text-[11px] font-medium transition-colors",
22295
22311
  commentDraft.trim() ? "bg-primary hover:bg-primary/80 text-white" : "bg-muted text-muted-foreground cursor-not-allowed"
22296
22312
  ),
@@ -22388,7 +22404,7 @@ function CustomPropertiesBlock({
22388
22404
  "button",
22389
22405
  {
22390
22406
  type: "button",
22391
- className: chunk3P6O7ZDM_js.cn(BTN, "px-1.5 text-red-400 hover:text-red-300"),
22407
+ className: chunkSXCO5HHN_js.cn(BTN, "px-1.5 text-red-400 hover:text-red-300"),
22392
22408
  onClick: () => onUpdate(customProperties.filter((_, i) => i !== index)),
22393
22409
  children: "\xD7"
22394
22410
  }
@@ -22523,7 +22539,7 @@ function PresentationSettingsCard({
22523
22539
  "select",
22524
22540
  {
22525
22541
  disabled: !canEdit,
22526
- className: chunk3P6O7ZDM_js.cn(INPUT, "w-28"),
22542
+ className: chunkSXCO5HHN_js.cn(INPUT, "w-28"),
22527
22543
  value: presentationProperties.showType ?? "presented",
22528
22544
  onChange: (e) => onUpdate({
22529
22545
  showType: e.target.value
@@ -22581,7 +22597,7 @@ function PresentationSettingsCard({
22581
22597
  min: 1,
22582
22598
  max: 16,
22583
22599
  disabled: !canEdit,
22584
- className: chunk3P6O7ZDM_js.cn(INPUT, "w-20"),
22600
+ className: chunkSXCO5HHN_js.cn(INPUT, "w-20"),
22585
22601
  value: presentationProperties.printSlidesPerPage ?? 1,
22586
22602
  onChange: (e) => onUpdate({ printSlidesPerPage: Number(e.target.value) })
22587
22603
  }
@@ -22863,7 +22879,7 @@ function TagsSection({
22863
22879
  "button",
22864
22880
  {
22865
22881
  type: "button",
22866
- className: chunk3P6O7ZDM_js.cn(BTN, "px-1.5 text-red-400 hover:text-red-300"),
22882
+ className: chunkSXCO5HHN_js.cn(BTN, "px-1.5 text-red-400 hover:text-red-300"),
22867
22883
  title: t("pptx.tags.deleteTag"),
22868
22884
  onClick: () => deleteTag(tag.colIdx, tag.tagIdx),
22869
22885
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuTrash2, { className: "w-3 h-3" })
@@ -22963,7 +22979,7 @@ function PresentationPropertiesPanel({
22963
22979
  canEdit
22964
22980
  }
22965
22981
  ),
22966
- activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk3P6O7ZDM_js.cn(CARD, "space-y-1"), children: [
22982
+ activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkSXCO5HHN_js.cn(CARD, "space-y-1"), children: [
22967
22983
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING, children: "Slide" }),
22968
22984
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[11px] text-muted-foreground", children: [
22969
22985
  activeSlide.elements?.length ?? 0,
@@ -22984,7 +23000,7 @@ function SlideBackgroundPanel({
22984
23000
  const { t } = reactI18next.useTranslation();
22985
23001
  const bgImageInputRef = React5.useRef(null);
22986
23002
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
22987
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk3P6O7ZDM_js.cn(CARD, "space-y-2"), children: [
23003
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkSXCO5HHN_js.cn(CARD, "space-y-2"), children: [
22988
23004
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING, children: "Background" }),
22989
23005
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
22990
23006
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-10 shrink-0", children: "Colour" }),
@@ -23030,7 +23046,7 @@ function SlideBackgroundPanel({
23030
23046
  "button",
23031
23047
  {
23032
23048
  type: "button",
23033
- className: chunk3P6O7ZDM_js.cn(BTN, "flex-1 text-center"),
23049
+ className: chunkSXCO5HHN_js.cn(BTN, "flex-1 text-center"),
23034
23050
  disabled: !canEdit,
23035
23051
  onClick: () => bgImageInputRef.current?.click(),
23036
23052
  children: activeSlide.backgroundImage ? t("pptx.slideBackground.replaceImage") : t("pptx.slideBackground.chooseImage")
@@ -23063,7 +23079,7 @@ function SlideBackgroundPanel({
23063
23079
  "button",
23064
23080
  {
23065
23081
  type: "button",
23066
- className: chunk3P6O7ZDM_js.cn(BTN, "w-full text-center text-red-400 hover:text-red-300"),
23082
+ className: chunkSXCO5HHN_js.cn(BTN, "w-full text-center text-red-400 hover:text-red-300"),
23067
23083
  disabled: !canEdit,
23068
23084
  onClick: () => onUpdateSlide({
23069
23085
  backgroundColor: void 0,
@@ -23094,7 +23110,7 @@ function TemplateBackgroundCard({
23094
23110
  onGetTemplateBackgroundColor
23095
23111
  }) {
23096
23112
  const { t } = reactI18next.useTranslation();
23097
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk3P6O7ZDM_js.cn(CARD, "space-y-2"), children: [
23113
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkSXCO5HHN_js.cn(CARD, "space-y-2"), children: [
23098
23114
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING, children: t("pptx.slideBackground.templateBackgroundsHeading") }),
23099
23115
  activeSlide.layoutPath && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
23100
23116
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -23212,7 +23228,7 @@ function InspectorPane(props) {
23212
23228
  } = props;
23213
23229
  const hasSelection = selectedElement !== null;
23214
23230
  const { t } = reactI18next.useTranslation();
23215
- const { dragY, handlers: dragHandlers } = chunk3P6O7ZDM_js.useSheetDismissDrag(onClose);
23231
+ const { dragY, handlers: dragHandlers } = chunkSXCO5HHN_js.useSheetDismissDrag(onClose);
23216
23232
  const [selectedThemePath, setSelectedThemePath] = React5.useState("");
23217
23233
  const ANIM_MIN = 80;
23218
23234
  const ANIM_MAX = 500;
@@ -23243,7 +23259,7 @@ function InspectorPane(props) {
23243
23259
  /* @__PURE__ */ jsxRuntime.jsxs(
23244
23260
  "div",
23245
23261
  {
23246
- className: chunk3P6O7ZDM_js.cn(
23262
+ className: chunkSXCO5HHN_js.cn(
23247
23263
  // Shared styles
23248
23264
  "bg-background flex flex-col text-xs text-foreground shadow-xl",
23249
23265
  // Mobile: absolute bottom sheet overlay sized via dvh so it
@@ -23277,7 +23293,7 @@ function InspectorPane(props) {
23277
23293
  {
23278
23294
  type: "button",
23279
23295
  title: label,
23280
- className: chunk3P6O7ZDM_js.cn(
23296
+ className: chunkSXCO5HHN_js.cn(
23281
23297
  "flex items-center gap-1 px-2 py-1 rounded text-[11px] transition-colors",
23282
23298
  activeTab === key ? "bg-primary text-white" : "text-muted-foreground hover:text-foreground hover:bg-accent"
23283
23299
  ),
@@ -23302,7 +23318,7 @@ function InspectorPane(props) {
23302
23318
  ] }),
23303
23319
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 overflow-y-auto p-3 space-y-3", children: [
23304
23320
  activeTab === "elements" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
23305
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk3P6O7ZDM_js.cn(HEADING, "mb-2"), children: t("pptx.inspector.layerOrder") }),
23321
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkSXCO5HHN_js.cn(HEADING, "mb-2"), children: t("pptx.inspector.layerOrder") }),
23306
23322
  activeSlide ? [...activeSlide.elements || []].reverse().map((el, ri) => {
23307
23323
  const idx = (activeSlide.elements || []).length - 1 - ri;
23308
23324
  const sel = selectedElement?.id === el.id || selectedElementIds.includes(el.id);
@@ -23311,7 +23327,7 @@ function InspectorPane(props) {
23311
23327
  "div",
23312
23328
  {
23313
23329
  title: `${el.type} \u2014 ${el.id}`,
23314
- className: chunk3P6O7ZDM_js.cn(
23330
+ className: chunkSXCO5HHN_js.cn(
23315
23331
  "flex items-center gap-2 px-2 py-1 rounded cursor-pointer transition-colors",
23316
23332
  sel ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground"
23317
23333
  ),
@@ -23914,7 +23930,7 @@ function PresentationTouchControls({
23914
23930
  onEndPresentation
23915
23931
  }) {
23916
23932
  const { t } = reactI18next.useTranslation();
23917
- const { isTouchDevice } = chunk3P6O7ZDM_js.useIsMobile();
23933
+ const { isTouchDevice } = chunkSXCO5HHN_js.useIsMobile();
23918
23934
  if (!isTouchDevice) {
23919
23935
  return null;
23920
23936
  }
@@ -24084,31 +24100,31 @@ function SlideLayer({ slide, templateElements, canvasSize }) {
24084
24100
  const elementHeight = Math.max(element.height, 1);
24085
24101
  const elShapeStyle = chunkMGLRKGCH_js.hasShapeProperties(element) ? element.shapeStyle : void 0;
24086
24102
  const hasFill = elShapeStyle?.fillColor !== void 0 && elShapeStyle?.fillColor !== "transparent" || Boolean(chunkJWS3RQKN_js.buildCssGradientFromShapeStyle(elShapeStyle) || elShapeStyle?.fillGradient) || elShapeStyle?.fillMode === "pattern" && Boolean(elShapeStyle.fillPatternPreset);
24087
- const fillColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.fillColor, chunk3P6O7ZDM_js.DEFAULT_FILL_COLOR);
24103
+ const fillColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.fillColor, chunkSXCO5HHN_js.DEFAULT_FILL_COLOR);
24088
24104
  const strokeWidth = Math.max(0, elShapeStyle?.strokeWidth || 0);
24089
- const strokeColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.strokeColor, chunk3P6O7ZDM_js.DEFAULT_STROKE_COLOR);
24090
- const shapeVisualStyle = chunk3P6O7ZDM_js.getShapeVisualStyle(
24105
+ const strokeColor = chunkJWS3RQKN_js.normalizeHexColor(elShapeStyle?.strokeColor, chunkSXCO5HHN_js.DEFAULT_STROKE_COLOR);
24106
+ const shapeVisualStyle = chunkSXCO5HHN_js.getShapeVisualStyle(
24091
24107
  element,
24092
24108
  hasFill,
24093
24109
  fillColor,
24094
24110
  strokeWidth,
24095
24111
  strokeColor
24096
24112
  );
24097
- const vectorShape = chunk3P6O7ZDM_js.renderVectorShape(
24113
+ const vectorShape = chunkSXCO5HHN_js.renderVectorShape(
24098
24114
  element,
24099
24115
  hasFill,
24100
24116
  fillColor,
24101
24117
  strokeWidth,
24102
24118
  strokeColor
24103
24119
  );
24104
- const fallbackTextColor = element.type === "shape" && hasFill ? "#ffffff" : chunk3P6O7ZDM_js.DEFAULT_TEXT_COLOR;
24105
- const textStyle = chunk3P6O7ZDM_js.getTextStyleForElement(element, fallbackTextColor);
24106
- const imageRenderStyle = chunk3P6O7ZDM_js.getImageRenderStyle(element);
24120
+ const fallbackTextColor = element.type === "shape" && hasFill ? "#ffffff" : chunkSXCO5HHN_js.DEFAULT_TEXT_COLOR;
24121
+ const textStyle = chunkSXCO5HHN_js.getTextStyleForElement(element, fallbackTextColor);
24122
+ const imageRenderStyle = chunkSXCO5HHN_js.getImageRenderStyle(element);
24107
24123
  const canRenderText = chunkJWS3RQKN_js.isEditableTextElement(element);
24108
24124
  const elText = chunkMGLRKGCH_js.hasTextProperties(element) ? element.text : void 0;
24109
24125
  const elTextSegments = chunkMGLRKGCH_js.hasTextProperties(element) ? element.textSegments : void 0;
24110
24126
  const hasText = typeof elText === "string" && elText.trim().length > 0 || (elTextSegments?.length ?? 0) > 0;
24111
- const fallbackLabel = chunk3P6O7ZDM_js.shouldRenderFallbackLabel(element, canRenderText) ? chunkJWS3RQKN_js.getElementLabel(element) : "";
24127
+ const fallbackLabel = chunkSXCO5HHN_js.shouldRenderFallbackLabel(element, canRenderText) ? chunkJWS3RQKN_js.getElementLabel(element) : "";
24112
24128
  return /* @__PURE__ */ jsxRuntime.jsx(
24113
24129
  "div",
24114
24130
  {
@@ -24121,11 +24137,11 @@ function SlideLayer({ slide, templateElements, canvasSize }) {
24121
24137
  transform: chunkJWS3RQKN_js.getElementTransform(element),
24122
24138
  transformOrigin: "center"
24123
24139
  },
24124
- children: (element.type === "picture" || element.type === "image") && (element.svgData || element.imageData) ? chunk3P6O7ZDM_js.isImageTiled(element) ? /* @__PURE__ */ jsxRuntime.jsx(
24140
+ children: (element.type === "picture" || element.type === "image") && (element.svgData || element.imageData) ? chunkSXCO5HHN_js.isImageTiled(element) ? /* @__PURE__ */ jsxRuntime.jsx(
24125
24141
  "div",
24126
24142
  {
24127
24143
  className: "pointer-events-none w-full h-full",
24128
- style: chunk3P6O7ZDM_js.getImageTilingStyle(element)
24144
+ style: chunkSXCO5HHN_js.getImageTilingStyle(element)
24129
24145
  }
24130
24146
  ) : /* @__PURE__ */ jsxRuntime.jsx(
24131
24147
  "img",
@@ -24143,12 +24159,12 @@ function SlideLayer({ slide, templateElements, canvasSize }) {
24143
24159
  {
24144
24160
  className: "w-full h-full whitespace-pre-wrap break-words px-1 py-0.5 leading-[1.3]",
24145
24161
  style: {
24146
- ...chunk3P6O7ZDM_js.getTextLayoutStyle(element),
24162
+ ...chunkSXCO5HHN_js.getTextLayoutStyle(element),
24147
24163
  ...textStyle,
24148
24164
  transform: chunkJWS3RQKN_js.getTextCompensationTransform(element),
24149
24165
  transformOrigin: "center"
24150
24166
  },
24151
- children: chunk3P6O7ZDM_js.renderTextSegments(element, fallbackTextColor)
24167
+ children: chunkSXCO5HHN_js.renderTextSegments(element, fallbackTextColor)
24152
24168
  }
24153
24169
  ),
24154
24170
  !hasText && fallbackLabel.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center text-[10px] text-muted-foreground", children: fallbackLabel })
@@ -24164,14 +24180,14 @@ function TransitionTable({
24164
24180
  element,
24165
24181
  textStyle
24166
24182
  }) {
24167
- const parsedTable = chunk3P6O7ZDM_js.parseTableElementData(element, textStyle);
24183
+ const parsedTable = chunkSXCO5HHN_js.parseTableElementData(element, textStyle);
24168
24184
  if (parsedTable) {
24169
24185
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full overflow-hidden pointer-events-none", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full h-full border-collapse table-fixed", children: [
24170
24186
  parsedTable.columnPercentages.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("colgroup", { children: parsedTable.columnPercentages.map((pct, ci) => /* @__PURE__ */ jsxRuntime.jsx("col", { style: { width: `${pct.toFixed(2)}%` } }, `${element.id}-tc-${ci}`)) }),
24171
24187
  /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: parsedTable.rows.map((row, ri) => {
24172
- const cells = chunk3P6O7ZDM_js.ensureArrayValue(row["a:tc"]);
24188
+ const cells = chunkSXCO5HHN_js.ensureArrayValue(row["a:tc"]);
24173
24189
  const rowHeightRaw = Number.parseInt(String(row["@_h"] || ""), 10);
24174
- const rowHeight = Number.isFinite(rowHeightRaw) && rowHeightRaw > 0 ? Math.max(16, rowHeightRaw / chunk3P6O7ZDM_js.EMU_PER_PX) : void 0;
24190
+ const rowHeight = Number.isFinite(rowHeightRaw) && rowHeightRaw > 0 ? Math.max(16, rowHeightRaw / chunkSXCO5HHN_js.EMU_PER_PX) : void 0;
24175
24191
  return /* @__PURE__ */ jsxRuntime.jsx(
24176
24192
  "tr",
24177
24193
  {
@@ -24186,7 +24202,7 @@ function TransitionTable({
24186
24202
  const colSpan = Number.isFinite(gridSpanRaw) && gridSpanRaw > 1 ? gridSpanRaw : void 0;
24187
24203
  const rowSpanRaw = Number.parseInt(String(cell["@_rowSpan"] || ""), 10);
24188
24204
  const rSpan = Number.isFinite(rowSpanRaw) && rowSpanRaw > 1 ? rowSpanRaw : void 0;
24189
- const bandStyle = chunk3P6O7ZDM_js.getTableCellBandStyle(
24205
+ const bandStyle = chunkSXCO5HHN_js.getTableCellBandStyle(
24190
24206
  element,
24191
24207
  ri,
24192
24208
  ci,
@@ -24200,10 +24216,10 @@ function TransitionTable({
24200
24216
  colSpan,
24201
24217
  rowSpan: rSpan,
24202
24218
  style: {
24203
- ...chunk3P6O7ZDM_js.extractTableCellStyle(cell, textStyle),
24219
+ ...chunkSXCO5HHN_js.extractTableCellStyle(cell, textStyle),
24204
24220
  ...bandStyle
24205
24221
  },
24206
- children: chunk3P6O7ZDM_js.extractCellText(cell) || "\xA0"
24222
+ children: chunkSXCO5HHN_js.extractCellText(cell) || "\xA0"
24207
24223
  },
24208
24224
  `${element.id}-td-${ri}-${ci}`
24209
24225
  );
@@ -24225,7 +24241,7 @@ function TransitionTable({
24225
24241
  if (cell.hMerge || cell.vMerge) {
24226
24242
  return null;
24227
24243
  }
24228
- const bandStyle = chunk3P6O7ZDM_js.getTableCellBandStyle(
24244
+ const bandStyle = chunkSXCO5HHN_js.getTableCellBandStyle(
24229
24245
  element,
24230
24246
  ri,
24231
24247
  ci,
@@ -24239,7 +24255,7 @@ function TransitionTable({
24239
24255
  colSpan: cell.gridSpan && cell.gridSpan > 1 ? cell.gridSpan : void 0,
24240
24256
  rowSpan: cell.rowSpan && cell.rowSpan > 1 ? cell.rowSpan : void 0,
24241
24257
  style: {
24242
- ...chunk3P6O7ZDM_js.cellStyleToCss(cell.style),
24258
+ ...chunkSXCO5HHN_js.cellStyleToCss(cell.style),
24243
24259
  ...bandStyle
24244
24260
  },
24245
24261
  children: cell.text || "\xA0"
@@ -24258,7 +24274,7 @@ function TransitionSmartArt({ element }) {
24258
24274
  if (!data || data.nodes.length === 0) {
24259
24275
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[10px] text-muted-foreground pointer-events-none", children: "SmartArt" });
24260
24276
  }
24261
- const palette = chunk3P6O7ZDM_js.resolvePalette(element);
24277
+ const palette = chunkSXCO5HHN_js.resolvePalette(element);
24262
24278
  const shapes = data.drawingShapes;
24263
24279
  if (shapes && shapes.length > 0) {
24264
24280
  let minX = Infinity;
@@ -24288,7 +24304,7 @@ function TransitionSmartArt({ element }) {
24288
24304
  className: "w-full h-full pointer-events-none",
24289
24305
  preserveAspectRatio: "xMidYMid meet",
24290
24306
  children: shapes.map((shape, i) => {
24291
- const fill = shape.fillColor ?? chunk3P6O7ZDM_js.colour(i, palette);
24307
+ const fill = shape.fillColor ?? chunkSXCO5HHN_js.colour(i, palette);
24292
24308
  const relX = shape.x - minX;
24293
24309
  const relY = shape.y - minY;
24294
24310
  const isEllipse = shape.shapeType === "ellipse";
@@ -24334,7 +24350,7 @@ function TransitionSmartArt({ element }) {
24334
24350
  }
24335
24351
  const nodes = data.nodes;
24336
24352
  const count = nodes.length;
24337
- const category = data.layout ? chunk3P6O7ZDM_js.layoutToCategory(data.layout) : data.resolvedLayoutType ?? "list";
24353
+ const category = data.layout ? chunkSXCO5HHN_js.layoutToCategory(data.layout) : data.resolvedLayoutType ?? "list";
24338
24354
  const useCircles = category === "cycle" || category === "radial" || category === "venn";
24339
24355
  const useChevrons = category === "process" || category === "chevron";
24340
24356
  const gap = 2;
@@ -24346,7 +24362,7 @@ function TransitionSmartArt({ element }) {
24346
24362
  preserveAspectRatio: "xMidYMid meet",
24347
24363
  children: nodes.map((node, i) => {
24348
24364
  const w = (100 - gap * (count - 1)) / count;
24349
- const fill = chunk3P6O7ZDM_js.colour(i, palette);
24365
+ const fill = chunkSXCO5HHN_js.colour(i, palette);
24350
24366
  if (useCircles) {
24351
24367
  const r = Math.min(w, 40) / 2;
24352
24368
  return /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: i * (w + gap) + w / 2, cy: 30, rx: r, ry: r, fill }, node.id);
@@ -24409,6 +24425,7 @@ function PresentationTransitionOverlay({
24409
24425
  "div",
24410
24426
  {
24411
24427
  ref: containerRef,
24428
+ "data-pptx-transition-overlay": true,
24412
24429
  className: "pptx-react-transition-overlay absolute inset-0 pointer-events-none overflow-hidden",
24413
24430
  style: { zIndex: outgoingZIndex },
24414
24431
  children: [
@@ -24416,6 +24433,7 @@ function PresentationTransitionOverlay({
24416
24433
  /* @__PURE__ */ jsxRuntime.jsx(
24417
24434
  "div",
24418
24435
  {
24436
+ "data-pptx-transition-layer": "outgoing",
24419
24437
  className: "pptx-react-transition-layer absolute inset-0 flex items-center justify-center",
24420
24438
  style: {
24421
24439
  animation: animations.outgoing !== "none" ? animations.outgoing : void 0
@@ -24957,7 +24975,7 @@ function PrintDialog({
24957
24975
  defaultFrameSlides
24958
24976
  }) {
24959
24977
  const { t } = reactI18next.useTranslation();
24960
- const { panelStyle, handlers: dragHandlers } = chunk3P6O7ZDM_js.useModalDismissDrag(onClose);
24978
+ const { panelStyle, handlers: dragHandlers } = chunkSXCO5HHN_js.useModalDismissDrag(onClose);
24961
24979
  const [printWhat, setPrintWhat] = React5.useState("slides");
24962
24980
  const [orientation, setOrientation] = React5.useState("landscape");
24963
24981
  const [colorMode, setColorMode] = React5.useState("color");
@@ -25486,7 +25504,7 @@ function BroadcastDialog({
25486
25504
  const [serverUrl, setServerUrl] = React5.useState("");
25487
25505
  const [copied, setCopied] = React5.useState(false);
25488
25506
  const dialogRef = React5.useRef(null);
25489
- const { panelStyle, handlers: dragHandlers } = chunk3P6O7ZDM_js.useModalDismissDrag(onClose);
25507
+ const { panelStyle, handlers: dragHandlers } = chunkSXCO5HHN_js.useModalDismissDrag(onClose);
25490
25508
  React5.useEffect(() => {
25491
25509
  if (open && !isBroadcasting) {
25492
25510
  const broadcastRoom = defaultRoomId ? `broadcast-${defaultRoomId}` : chunkJWS3RQKN_js.generateBroadcastRoomId();
@@ -25835,7 +25853,7 @@ function ShareDialog({
25835
25853
  const [serverUrl, setServerUrl] = React5.useState(defaultServerUrl ?? "");
25836
25854
  const [copied, setCopied] = React5.useState(false);
25837
25855
  const dialogRef = React5.useRef(null);
25838
- const { panelStyle, handlers: dragHandlers } = chunk3P6O7ZDM_js.useModalDismissDrag(onClose);
25856
+ const { panelStyle, handlers: dragHandlers } = chunkSXCO5HHN_js.useModalDismissDrag(onClose);
25839
25857
  React5.useEffect(() => {
25840
25858
  if (activeCollaboration) {
25841
25859
  setRoomId(activeCollaboration.roomId);
@@ -26322,12 +26340,12 @@ function HyperlinkEditDialog({
26322
26340
  onCancel
26323
26341
  }) {
26324
26342
  const { t } = reactI18next.useTranslation();
26325
- const { panelStyle, handlers: dragHandlers } = chunk3P6O7ZDM_js.useModalDismissDrag(onCancel);
26343
+ const { panelStyle, handlers: dragHandlers } = chunkSXCO5HHN_js.useModalDismissDrag(onCancel);
26326
26344
  const inputRef = React5.useRef(null);
26327
- const detectedType = chunk3P6O7ZDM_js.detectTargetType(initialUrl, initialAction);
26328
- const emailParts = chunk3P6O7ZDM_js.parseEmailUrl(initialUrl || "");
26329
- const detectedSlide = chunk3P6O7ZDM_js.parseSlideFromUrl(initialUrl, initialAction);
26330
- const detectedVerb = initialAction ? chunk3P6O7ZDM_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
26345
+ const detectedType = chunkSXCO5HHN_js.detectTargetType(initialUrl, initialAction);
26346
+ const emailParts = chunkSXCO5HHN_js.parseEmailUrl(initialUrl || "");
26347
+ const detectedSlide = chunkSXCO5HHN_js.parseSlideFromUrl(initialUrl, initialAction);
26348
+ const detectedVerb = initialAction ? chunkSXCO5HHN_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
26331
26349
  const [targetType, setTargetType] = React5.useState(detectedType);
26332
26350
  const [url, setUrl] = React5.useState(
26333
26351
  detectedType === "email" || detectedType === "slide" || detectedType === "action" ? "" : initialUrl || ""
@@ -26358,7 +26376,7 @@ function HyperlinkEditDialog({
26358
26376
  actionVerb
26359
26377
  });
26360
26378
  };
26361
- const tabCls = (active) => chunk3P6O7ZDM_js.cn(
26379
+ const tabCls = (active) => chunkSXCO5HHN_js.cn(
26362
26380
  "px-3 py-1.5 text-xs rounded-t border-b-2 transition-colors",
26363
26381
  active ? "border-primary text-primary font-medium" : "border-transparent text-muted-foreground hover:text-foreground hover:border-border"
26364
26382
  );
@@ -26748,7 +26766,7 @@ function DrawingOverlaySvg({
26748
26766
  }
26749
26767
  );
26750
26768
  }
26751
- function GridOverlay({ canvasSize, gridSpacingPx = chunk3P6O7ZDM_js.GRID_SIZE, visible }) {
26769
+ function GridOverlay({ canvasSize, gridSpacingPx = chunkSXCO5HHN_js.GRID_SIZE, visible }) {
26752
26770
  const spacing = Math.max(gridSpacingPx, 2);
26753
26771
  const patternId = React5.useMemo(() => `grid-dot-pattern-${Math.random().toString(36).slice(2, 8)}`, []);
26754
26772
  if (!visible) {
@@ -28124,6 +28142,7 @@ function ViewerInspector({
28124
28142
  return /* @__PURE__ */ jsxRuntime.jsx(
28125
28143
  "div",
28126
28144
  {
28145
+ "data-pptx-inspector": true,
28127
28146
  role: "complementary",
28128
28147
  "aria-label": t("pptx.inspector.properties"),
28129
28148
  className: "h-full flex-shrink-0 max-md:absolute max-md:inset-x-0 max-md:bottom-0 max-md:top-auto max-md:z-30",
@@ -28297,7 +28316,7 @@ function TitleBar(p) {
28297
28316
  role: "switch",
28298
28317
  "aria-checked": p.autosaveEnabled,
28299
28318
  onClick: p.onToggleAutosave,
28300
- className: chunk3P6O7ZDM_js.cn(
28319
+ className: chunkSXCO5HHN_js.cn(
28301
28320
  chunkJWS3RQKN_js.TITLE_BAR_CLASSES.toggleTrack,
28302
28321
  p.autosaveEnabled ? chunkJWS3RQKN_js.TITLE_BAR_CLASSES.toggleTrackOn : chunkJWS3RQKN_js.TITLE_BAR_CLASSES.toggleTrackOff
28303
28322
  ),
@@ -28306,7 +28325,7 @@ function TitleBar(p) {
28306
28325
  children: /* @__PURE__ */ jsxRuntime.jsx(
28307
28326
  "span",
28308
28327
  {
28309
- className: chunk3P6O7ZDM_js.cn(
28328
+ className: chunkSXCO5HHN_js.cn(
28310
28329
  chunkJWS3RQKN_js.TITLE_BAR_CLASSES.toggleKnob,
28311
28330
  p.autosaveEnabled ? chunkJWS3RQKN_js.TITLE_BAR_CLASSES.toggleKnobOn : chunkJWS3RQKN_js.TITLE_BAR_CLASSES.toggleKnobOff
28312
28331
  )
@@ -28361,7 +28380,7 @@ function TitleBar(p) {
28361
28380
  /* @__PURE__ */ jsxRuntime.jsx(
28362
28381
  "span",
28363
28382
  {
28364
- className: chunk3P6O7ZDM_js.cn(
28383
+ className: chunkSXCO5HHN_js.cn(
28365
28384
  chunkJWS3RQKN_js.TITLE_BAR_CLASSES.statusText,
28366
28385
  p.autosaveStatus?.state === "error" && p.autosaveEnabled && chunkJWS3RQKN_js.TITLE_BAR_CLASSES.statusError,
28367
28386
  p.autosaveStatus?.state === "saving" && p.autosaveEnabled && chunkJWS3RQKN_js.TITLE_BAR_CLASSES.statusSaving
@@ -28375,7 +28394,7 @@ function TitleBar(p) {
28375
28394
  /* @__PURE__ */ jsxRuntime.jsxs(
28376
28395
  "div",
28377
28396
  {
28378
- className: chunk3P6O7ZDM_js.cn(
28397
+ className: chunkSXCO5HHN_js.cn(
28379
28398
  chunkJWS3RQKN_js.TITLE_BAR_CLASSES.searchBox,
28380
28399
  (searchFocused || p.findReplaceOpen) && "text-foreground bg-background"
28381
28400
  ),
@@ -28966,7 +28985,7 @@ function EquationEditorDialog({
28966
28985
  existingOmml
28967
28986
  }) {
28968
28987
  const { t } = reactI18next.useTranslation();
28969
- const { panelStyle, handlers: dragHandlers } = chunk3P6O7ZDM_js.useModalDismissDrag(onClose);
28988
+ const { panelStyle, handlers: dragHandlers } = chunkSXCO5HHN_js.useModalDismissDrag(onClose);
28970
28989
  const initialLatex = React5.useMemo(() => {
28971
28990
  if (!existingOmml) {
28972
28991
  return "";
@@ -29095,7 +29114,7 @@ function EquationEditorDialog({
29095
29114
  {
29096
29115
  type: "button",
29097
29116
  onClick: () => handleTemplateClick(tmpl.latex),
29098
- className: chunk3P6O7ZDM_js.cn(
29117
+ className: chunkSXCO5HHN_js.cn(
29099
29118
  "flex flex-col items-center gap-1 p-2 rounded-lg border transition-colors",
29100
29119
  latex === tmpl.latex ? "border-primary bg-primary/10" : "border-border bg-muted/40 hover:bg-accent/60 hover:border-border"
29101
29120
  ),
@@ -29194,7 +29213,7 @@ function InsertSmartArtDialog({
29194
29213
  onInsert
29195
29214
  }) {
29196
29215
  const { t } = reactI18next.useTranslation();
29197
- const { panelStyle, handlers: dragHandlers } = chunk3P6O7ZDM_js.useModalDismissDrag(onClose);
29216
+ const { panelStyle, handlers: dragHandlers } = chunkSXCO5HHN_js.useModalDismissDrag(onClose);
29198
29217
  const [activeCategory, setActiveCategory] = React5.useState("list");
29199
29218
  const [selectedLayout, setSelectedLayout] = React5.useState(null);
29200
29219
  const filteredPresets = chunkJWS3RQKN_js.PRESETS.filter((p) => p.category === activeCategory);
@@ -29258,43 +29277,60 @@ function InsertSmartArtDialog({
29258
29277
  }
29259
29278
  ),
29260
29279
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 overflow-hidden", children: [
29261
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-40 border-r border-border py-2", children: chunkJWS3RQKN_js.CATEGORIES.map((cat) => /* @__PURE__ */ jsxRuntime.jsx(
29262
- "button",
29280
+ /* @__PURE__ */ jsxRuntime.jsx(
29281
+ "nav",
29263
29282
  {
29264
- type: "button",
29265
- onClick: () => {
29266
- setActiveCategory(cat.id);
29267
- setSelectedLayout(null);
29268
- },
29269
- className: chunk3P6O7ZDM_js.cn(
29270
- "w-full text-left px-3 py-1.5 text-xs transition-colors",
29271
- activeCategory === cat.id ? "bg-primary text-white" : "text-foreground hover:bg-muted"
29272
- ),
29273
- children: t(cat.label)
29274
- },
29275
- cat.id
29276
- )) }),
29277
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 p-3 overflow-y-auto", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-3 gap-2", children: filteredPresets.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
29278
- "button",
29283
+ className: "w-40 border-r border-border py-2",
29284
+ "aria-label": t("pptx.insertSmartArt.categories"),
29285
+ children: chunkJWS3RQKN_js.CATEGORIES.map((cat) => /* @__PURE__ */ jsxRuntime.jsx(
29286
+ "button",
29287
+ {
29288
+ type: "button",
29289
+ onClick: () => {
29290
+ setActiveCategory(cat.id);
29291
+ setSelectedLayout(null);
29292
+ },
29293
+ className: chunkSXCO5HHN_js.cn(
29294
+ "w-full text-left px-3 py-1.5 text-xs transition-colors",
29295
+ activeCategory === cat.id ? "bg-primary text-white" : "text-foreground hover:bg-muted"
29296
+ ),
29297
+ children: t(cat.label)
29298
+ },
29299
+ cat.id
29300
+ ))
29301
+ }
29302
+ ),
29303
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 p-3 overflow-y-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
29304
+ "div",
29279
29305
  {
29280
- type: "button",
29281
- onClick: () => setSelectedLayout(preset.layout),
29282
- onDoubleClick: () => {
29283
- setSelectedLayout(preset.layout);
29284
- onInsert(preset.layout, preset.defaultItems);
29285
- onClose();
29286
- },
29287
- className: chunk3P6O7ZDM_js.cn(
29288
- "flex flex-col items-center gap-1 p-2 rounded border transition-colors",
29289
- selectedLayout === preset.layout ? "border-primary bg-primary/20" : "border-border hover:border-border hover:bg-muted/50"
29290
- ),
29291
- children: [
29292
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-16 h-12 flex items-center justify-center bg-muted rounded", children: getPreviewForLayout(preset.layout) }),
29293
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-foreground text-center leading-tight", children: t(preset.labelKey) })
29294
- ]
29295
- },
29296
- preset.layout
29297
- )) }) })
29306
+ className: "grid grid-cols-3 gap-2",
29307
+ role: "listbox",
29308
+ "aria-label": t("pptx.insertSmartArt.layouts"),
29309
+ children: filteredPresets.map((preset) => /* @__PURE__ */ jsxRuntime.jsxs(
29310
+ "button",
29311
+ {
29312
+ type: "button",
29313
+ role: "option",
29314
+ "aria-selected": selectedLayout === preset.layout,
29315
+ onClick: () => setSelectedLayout(preset.layout),
29316
+ onDoubleClick: () => {
29317
+ setSelectedLayout(preset.layout);
29318
+ onInsert(preset.layout, preset.defaultItems);
29319
+ onClose();
29320
+ },
29321
+ className: chunkSXCO5HHN_js.cn(
29322
+ "flex flex-col items-center gap-1 p-2 rounded border transition-colors",
29323
+ selectedLayout === preset.layout ? "border-primary bg-primary/20" : "border-border hover:border-border hover:bg-muted/50"
29324
+ ),
29325
+ children: [
29326
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-16 h-12 flex items-center justify-center bg-muted rounded", children: getPreviewForLayout(preset.layout) }),
29327
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-foreground text-center leading-tight", children: t(preset.labelKey) })
29328
+ ]
29329
+ },
29330
+ preset.layout
29331
+ ))
29332
+ }
29333
+ ) })
29298
29334
  ] }),
29299
29335
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-2 px-4 py-3 border-t border-border", children: [
29300
29336
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -29312,7 +29348,7 @@ function InsertSmartArtDialog({
29312
29348
  type: "button",
29313
29349
  onClick: handleInsert,
29314
29350
  disabled: !selectedLayout,
29315
- className: chunk3P6O7ZDM_js.cn(
29351
+ className: chunkSXCO5HHN_js.cn(
29316
29352
  "px-3 py-1.5 text-xs rounded transition-colors",
29317
29353
  selectedLayout ? "bg-primary hover:bg-primary/80 text-white" : "bg-muted text-muted-foreground cursor-not-allowed"
29318
29354
  ),
@@ -29678,7 +29714,7 @@ function ViewerCanvasArea(props) {
29678
29714
  s.setActiveSlideIndex((i) => Math.max(0, i - 1));
29679
29715
  }
29680
29716
  }, [mode, presentation, s]);
29681
- const swipe = chunk3P6O7ZDM_js.useSwipeNavigation({
29717
+ const swipe = chunkSXCO5HHN_js.useSwipeNavigation({
29682
29718
  enabled: swipeEnabled,
29683
29719
  onNext: handleSwipeNext,
29684
29720
  onPrev: handleSwipePrev
@@ -30465,7 +30501,7 @@ function MobileDismissSheet({
30465
30501
  className,
30466
30502
  children
30467
30503
  }) {
30468
- const { dragY, handlers } = chunk3P6O7ZDM_js.useSheetDismissDrag(onClose);
30504
+ const { dragY, handlers } = chunkSXCO5HHN_js.useSheetDismissDrag(onClose);
30469
30505
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30470
30506
  /* @__PURE__ */ jsxRuntime.jsx(
30471
30507
  "button",
@@ -30734,7 +30770,7 @@ function ThemeThumbnail({
30734
30770
  {
30735
30771
  type: "button",
30736
30772
  onClick,
30737
- className: chunk3P6O7ZDM_js.cn(
30773
+ className: chunkSXCO5HHN_js.cn(
30738
30774
  "group relative flex flex-col rounded-lg border-2 transition-all overflow-hidden",
30739
30775
  selected ? "border-primary shadow-lg scale-[1.02]" : "border-border hover:border-primary/50 hover:shadow-md"
30740
30776
  ),
@@ -31227,11 +31263,12 @@ function MobileBottomBar({
31227
31263
  {
31228
31264
  type: "button",
31229
31265
  onClick,
31230
- className: chunk3P6O7ZDM_js.cn(
31266
+ className: chunkSXCO5HHN_js.cn(
31231
31267
  "relative flex flex-col items-center justify-center gap-0.5 flex-1 min-h-[56px] py-1.5 text-[10px] font-medium transition-colors active:scale-95",
31232
31268
  active ? "text-primary" : "text-muted-foreground hover:text-foreground"
31233
31269
  ),
31234
31270
  "aria-pressed": active,
31271
+ "aria-label": key === "notes" ? t("pptx.statusBar.toggleNotes") : void 0,
31235
31272
  children: [
31236
31273
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "w-5 h-5" }),
31237
31274
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: t(label) }),
@@ -31274,7 +31311,7 @@ function MobileChromeOverlay(props) {
31274
31311
  canEdit,
31275
31312
  commentCount
31276
31313
  } = props;
31277
- const { keyboardInset, isKeyboardOpen } = chunk3P6O7ZDM_js.useKeyboardInsets();
31314
+ const { keyboardInset, isKeyboardOpen } = chunkSXCO5HHN_js.useKeyboardInsets();
31278
31315
  const activeSheet = s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null;
31279
31316
  const closeAllSheets = () => {
31280
31317
  s.setIsSlidesPaneOpen(false);
@@ -31369,7 +31406,7 @@ function ToggleSwitch({
31369
31406
  {
31370
31407
  type: "button",
31371
31408
  onClick: onToggle,
31372
- className: chunk3P6O7ZDM_js.cn(
31409
+ className: chunkSXCO5HHN_js.cn(
31373
31410
  "relative inline-flex h-5 w-9 items-center rounded-full transition-colors",
31374
31411
  enabled ? "bg-primary" : "bg-muted-foreground/30"
31375
31412
  ),
@@ -31379,7 +31416,7 @@ function ToggleSwitch({
31379
31416
  children: /* @__PURE__ */ jsxRuntime.jsx(
31380
31417
  "span",
31381
31418
  {
31382
- className: chunk3P6O7ZDM_js.cn(
31419
+ className: chunkSXCO5HHN_js.cn(
31383
31420
  "inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",
31384
31421
  enabled ? "translate-x-[18px]" : "translate-x-[3px]"
31385
31422
  )
@@ -31406,7 +31443,7 @@ function SettingsDialog({
31406
31443
  const [activeTab, setActiveTab] = React5.useState("general");
31407
31444
  const [autoSave, setAutoSave] = React5.useState(true);
31408
31445
  const { t } = reactI18next.useTranslation();
31409
- const { panelStyle, handlers: dragHandlers } = chunk3P6O7ZDM_js.useModalDismissDrag(onClose);
31446
+ const { panelStyle, handlers: dragHandlers } = chunkSXCO5HHN_js.useModalDismissDrag(onClose);
31410
31447
  const handleKeyDown = React5.useCallback(
31411
31448
  (e) => {
31412
31449
  if (e.key === "Escape") {
@@ -31478,7 +31515,7 @@ function SettingsDialog({
31478
31515
  {
31479
31516
  type: "button",
31480
31517
  onClick: () => setActiveTab(tab.id),
31481
- className: chunk3P6O7ZDM_js.cn(
31518
+ className: chunkSXCO5HHN_js.cn(
31482
31519
  "px-3 py-2 text-xs font-medium transition-colors relative",
31483
31520
  activeTab === tab.id ? "text-primary" : "text-muted-foreground hover:text-foreground"
31484
31521
  ),
@@ -31540,10 +31577,10 @@ function SettingsDialog({
31540
31577
  }
31541
31578
  )
31542
31579
  ] }),
31543
- activeTab === "shortcuts" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: chunk3P6O7ZDM_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut, i) => /* @__PURE__ */ jsxRuntime.jsxs(
31580
+ activeTab === "shortcuts" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: chunkSXCO5HHN_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut, i) => /* @__PURE__ */ jsxRuntime.jsxs(
31544
31581
  "div",
31545
31582
  {
31546
- className: chunk3P6O7ZDM_js.cn(
31583
+ className: chunkSXCO5HHN_js.cn(
31547
31584
  "flex items-center justify-between gap-3 rounded px-3 py-2",
31548
31585
  i % 2 === 0 ? "bg-muted/60" : ""
31549
31586
  ),
@@ -31618,8 +31655,8 @@ var PowerPointViewer = React5.forwardRef(
31618
31655
  const [isSettingsOpen, setIsSettingsOpen] = React5.useState(false);
31619
31656
  const [autosaveEnabled, setAutosaveEnabled] = React5.useState(true);
31620
31657
  const [isShareDialogOpen, setIsShareDialogOpen] = React5.useState(false);
31621
- const { reducedMotion, toggleReducedMotion } = chunk3P6O7ZDM_js.useReducedMotion();
31622
- const state = chunk3P6O7ZDM_js.useViewerState({ content, canEdit });
31658
+ const { reducedMotion, toggleReducedMotion } = chunkSXCO5HHN_js.useReducedMotion();
31659
+ const state = chunkSXCO5HHN_js.useViewerState({ content, canEdit });
31623
31660
  const {
31624
31661
  containerRef,
31625
31662
  mode,
@@ -31634,10 +31671,10 @@ var PowerPointViewer = React5.forwardRef(
31634
31671
  activeSlide,
31635
31672
  selectedElement
31636
31673
  } = state;
31637
- const mobile = chunk3P6O7ZDM_js.useIsMobile({ containerRef });
31674
+ const mobile = chunkSXCO5HHN_js.useIsMobile({ containerRef });
31638
31675
  const { isMobile, isTouchDevice, isVirtualKeyboardOpen } = mobile;
31639
- const resizablePanels = chunk3P6O7ZDM_js.useResizablePanels();
31640
- const { gridSpacingPx, visibleSlideIndexes, slideSectionGroups, masterPseudoSlide } = chunk3P6O7ZDM_js.useDerivedSlideState({
31676
+ const resizablePanels = chunkSXCO5HHN_js.useResizablePanels();
31677
+ const { gridSpacingPx, visibleSlideIndexes, slideSectionGroups, masterPseudoSlide } = chunkSXCO5HHN_js.useDerivedSlideState({
31641
31678
  slides,
31642
31679
  sections: state.sections,
31643
31680
  customShows: state.customShows,
@@ -31659,11 +31696,11 @@ var PowerPointViewer = React5.forwardRef(
31659
31696
  state.isDrawingRef
31660
31697
  ]
31661
31698
  );
31662
- const zoom = chunk3P6O7ZDM_js.useZoomViewport({
31699
+ const zoom = chunkSXCO5HHN_js.useZoomViewport({
31663
31700
  canvasSize,
31664
31701
  selectedElements: state.selectedElements
31665
31702
  });
31666
- const history = chunk3P6O7ZDM_js.useEditorHistory({
31703
+ const history = chunkSXCO5HHN_js.useEditorHistory({
31667
31704
  slides,
31668
31705
  canvasSize,
31669
31706
  activeSlideIndex,
@@ -31685,7 +31722,7 @@ var PowerPointViewer = React5.forwardRef(
31685
31722
  setEditTemplateMode: state.setEditTemplateMode,
31686
31723
  setHeaderFooter: state.setHeaderFooter
31687
31724
  });
31688
- const { presentation, annotations, actionSoundHandlerRef } = chunk3P6O7ZDM_js.usePresentationSetup({
31725
+ const { presentation, annotations, actionSoundHandlerRef } = chunkSXCO5HHN_js.usePresentationSetup({
31689
31726
  mode,
31690
31727
  slides,
31691
31728
  visibleSlideIndexes,
@@ -31699,7 +31736,7 @@ var PowerPointViewer = React5.forwardRef(
31699
31736
  setSlides: state.setSlides,
31700
31737
  history
31701
31738
  });
31702
- chunk3P6O7ZDM_js.useTouchGestures({
31739
+ chunkSXCO5HHN_js.useTouchGestures({
31703
31740
  targetRef: zoom.canvasViewportRef,
31704
31741
  currentScale: zoom.scale,
31705
31742
  callbacks: {
@@ -31721,7 +31758,7 @@ var PowerPointViewer = React5.forwardRef(
31721
31758
  },
31722
31759
  enabled: isTouchDevice
31723
31760
  });
31724
- const dialogs = chunk3P6O7ZDM_js.useViewerDialogs({
31761
+ const dialogs = chunkSXCO5HHN_js.useViewerDialogs({
31725
31762
  mode,
31726
31763
  slides,
31727
31764
  activeSlide,
@@ -31762,7 +31799,7 @@ var PowerPointViewer = React5.forwardRef(
31762
31799
  zoom.handleZoomToFit();
31763
31800
  zoom.canvasViewportRef.current?.scrollTo({ left: 0, top: 0 });
31764
31801
  }, [mode]);
31765
- const editorOps = chunk3P6O7ZDM_js.useEditorOperations({
31802
+ const editorOps = chunkSXCO5HHN_js.useEditorOperations({
31766
31803
  state,
31767
31804
  history,
31768
31805
  zoom,
@@ -31794,7 +31831,7 @@ var PowerPointViewer = React5.forwardRef(
31794
31831
  autosaveStatus,
31795
31832
  isEncryptedDialogOpen,
31796
31833
  setIsEncryptedDialogOpen
31797
- } = chunk3P6O7ZDM_js.useViewerIntegration({
31834
+ } = chunkSXCO5HHN_js.useViewerIntegration({
31798
31835
  state,
31799
31836
  zoom,
31800
31837
  history,
@@ -32127,7 +32164,7 @@ function CollaborationDocumentSync({
32127
32164
  }
32128
32165
  return bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
32129
32166
  }, []);
32130
- chunk3P6O7ZDM_js.useYjsDocumentSync({
32167
+ chunkSXCO5HHN_js.useYjsDocumentSync({
32131
32168
  doc: collab?.doc ?? null,
32132
32169
  slides,
32133
32170
  templateElementsBySlideId,
@@ -32145,13 +32182,13 @@ function CollaborationFollowLayer({
32145
32182
  slideCount
32146
32183
  }) {
32147
32184
  const collab = useCollaboration();
32148
- const { followedClientId, followUser } = chunk3P6O7ZDM_js.useFollowMode({
32185
+ const { followedClientId, followUser } = chunkSXCO5HHN_js.useFollowMode({
32149
32186
  collab,
32150
32187
  activeSlideIndex,
32151
32188
  setActiveSlideIndex,
32152
32189
  slideCount
32153
32190
  });
32154
- chunk3P6O7ZDM_js.useBroadcastFollower({
32191
+ chunkSXCO5HHN_js.useBroadcastFollower({
32155
32192
  collab,
32156
32193
  activeSlideIndex,
32157
32194
  setActiveSlideIndex,