pptx-react-viewer 1.22.0 → 1.22.2

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 (43) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{chunk-DZUI64SO.mjs → chunk-3MZ7IARF.mjs} +9 -0
  3. package/dist/chunk-3MZ7IARF.mjs.br +0 -0
  4. package/dist/{chunk-DZUI64SO.mjs.gz → chunk-3MZ7IARF.mjs.gz} +0 -0
  5. package/dist/{chunk-A6IFTYB5.js → chunk-JUFGTL2A.js} +405 -395
  6. package/dist/chunk-JUFGTL2A.js.br +0 -0
  7. package/dist/chunk-JUFGTL2A.js.gz +0 -0
  8. package/dist/{chunk-QVQTDWB7.js → chunk-KA7ST7IH.js} +9 -0
  9. package/dist/chunk-KA7ST7IH.js.br +0 -0
  10. package/dist/{chunk-QVQTDWB7.js.gz → chunk-KA7ST7IH.js.gz} +0 -0
  11. package/dist/{chunk-7P7QQGTI.mjs → chunk-OIAKQGMC.mjs} +14 -4
  12. package/dist/chunk-OIAKQGMC.mjs.br +0 -0
  13. package/dist/chunk-OIAKQGMC.mjs.gz +0 -0
  14. package/dist/hooks-unstable.d.ts +3 -0
  15. package/dist/hooks-unstable.d.ts.map +1 -1
  16. package/dist/hooks-unstable.js +71 -71
  17. package/dist/hooks-unstable.js.br +0 -0
  18. package/dist/hooks-unstable.js.gz +0 -0
  19. package/dist/hooks-unstable.mjs +1 -1
  20. package/dist/hooks-unstable.mjs.br +0 -0
  21. package/dist/hooks-unstable.mjs.gz +0 -0
  22. package/dist/index.js +7 -7
  23. package/dist/index.js.br +0 -0
  24. package/dist/index.js.gz +0 -0
  25. package/dist/index.mjs +2 -2
  26. package/dist/index.mjs.br +0 -0
  27. package/dist/index.mjs.gz +0 -0
  28. package/dist/pptx-viewer.css +1 -1
  29. package/dist/pptx-viewer.css.br +0 -0
  30. package/dist/pptx-viewer.css.gz +0 -0
  31. package/dist/viewer/index.js +18 -18
  32. package/dist/viewer/index.js.br +0 -0
  33. package/dist/viewer/index.js.gz +0 -0
  34. package/dist/viewer/index.mjs +2 -2
  35. package/dist/viewer/index.mjs.br +0 -0
  36. package/dist/viewer/index.mjs.gz +0 -0
  37. package/package.json +1 -1
  38. package/dist/chunk-7P7QQGTI.mjs.br +0 -0
  39. package/dist/chunk-7P7QQGTI.mjs.gz +0 -0
  40. package/dist/chunk-A6IFTYB5.js.br +0 -0
  41. package/dist/chunk-A6IFTYB5.js.gz +0 -0
  42. package/dist/chunk-DZUI64SO.mjs.br +0 -0
  43. package/dist/chunk-QVQTDWB7.js.br +0 -0
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkQVQTDWB7_js = require('./chunk-QVQTDWB7.js');
3
+ var chunkKA7ST7IH_js = require('./chunk-KA7ST7IH.js');
4
4
  var chunkVSNXVKJI_js = require('./chunk-VSNXVKJI.js');
5
5
  var chunkZISXRMDJ_js = require('./chunk-ZISXRMDJ.js');
6
6
  var chunkAD3EAEY6_js = require('./chunk-AD3EAEY6.js');
@@ -42,7 +42,7 @@ function CollaborationProvider({
42
42
  canvasHeight,
43
43
  children
44
44
  }) {
45
- const value = chunkQVQTDWB7_js.useCollaborativeState({
45
+ const value = chunkKA7ST7IH_js.useCollaborativeState({
46
46
  config,
47
47
  canvasWidth,
48
48
  canvasHeight
@@ -474,7 +474,7 @@ function LoadingState({ className }) {
474
474
  role: "status",
475
475
  "aria-live": "polite",
476
476
  "aria-atomic": "true",
477
- className: chunkQVQTDWB7_js.cn(
477
+ className: chunkKA7ST7IH_js.cn(
478
478
  "h-full w-full flex items-center justify-center text-muted-foreground",
479
479
  className
480
480
  ),
@@ -497,7 +497,7 @@ function ErrorState({ className, error }) {
497
497
  {
498
498
  role: "alert",
499
499
  "aria-live": "assertive",
500
- className: chunkQVQTDWB7_js.cn(
500
+ className: chunkKA7ST7IH_js.cn(
501
501
  "h-full w-full flex items-center justify-center p-6 text-center text-red-400",
502
502
  className
503
503
  ),
@@ -528,7 +528,7 @@ function ShortcutPanel({ isOpen, onClose }) {
528
528
  }
529
529
  )
530
530
  ] }),
531
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunkQVQTDWB7_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
531
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-h-64 overflow-y-auto p-2 space-y-1", children: chunkKA7ST7IH_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs(
532
532
  "div",
533
533
  {
534
534
  className: "flex items-center justify-between gap-3 rounded bg-muted/80 px-2 py-1.5",
@@ -588,14 +588,14 @@ function AccessibilityPanel({
588
588
  "aria-label": t("pptx.accessibility.reduceMotion"),
589
589
  "aria-checked": reducedMotion ?? false,
590
590
  onClick: onToggleReducedMotion,
591
- className: chunkQVQTDWB7_js.cn(
591
+ className: chunkKA7ST7IH_js.cn(
592
592
  "relative inline-flex h-5 w-9 items-center rounded-full transition-colors",
593
593
  reducedMotion ? "bg-primary" : "bg-muted-foreground/30"
594
594
  ),
595
595
  children: /* @__PURE__ */ jsxRuntime.jsx(
596
596
  "span",
597
597
  {
598
- className: chunkQVQTDWB7_js.cn(
598
+ className: chunkKA7ST7IH_js.cn(
599
599
  "inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",
600
600
  reducedMotion ? "translate-x-4" : "translate-x-0.5"
601
601
  )
@@ -614,7 +614,7 @@ function AccessibilityPanel({
614
614
  "div",
615
615
  {
616
616
  role: "listitem",
617
- className: chunkQVQTDWB7_js.cn(
617
+ className: chunkKA7ST7IH_js.cn(
618
618
  "flex items-start gap-2 rounded px-2 py-1.5 text-xs",
619
619
  /* Severity-based background and text colouring */
620
620
  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"
@@ -738,7 +738,7 @@ function StatusBar({
738
738
  /* @__PURE__ */ jsxRuntime.jsx(
739
739
  "span",
740
740
  {
741
- className: chunkQVQTDWB7_js.cn(
741
+ className: chunkKA7ST7IH_js.cn(
742
742
  "shrink-0 max-md:hidden",
743
743
  autosaveStatus?.state === "error" ? "text-red-400" : autosaveStatus?.state === "saving" ? "text-yellow-400" : ""
744
744
  ),
@@ -751,7 +751,7 @@ function StatusBar({
751
751
  {
752
752
  type: "button",
753
753
  onClick: onToggleNotes,
754
- className: chunkQVQTDWB7_js.cn(
754
+ className: chunkKA7ST7IH_js.cn(
755
755
  vb,
756
756
  "flex items-center gap-1 text-[10px]",
757
757
  isNotesExpanded && "text-primary"
@@ -771,7 +771,7 @@ function StatusBar({
771
771
  {
772
772
  type: "button",
773
773
  onClick: () => onSetMode("edit"),
774
- className: chunkQVQTDWB7_js.cn(vb, mode === "edit" && "text-primary"),
774
+ className: chunkKA7ST7IH_js.cn(vb, mode === "edit" && "text-primary"),
775
775
  title: t("pptx.statusBar.normalView"),
776
776
  "aria-label": t("pptx.statusBar.normalView"),
777
777
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuMonitor, { className: "w-3.5 h-3.5" })
@@ -793,7 +793,7 @@ function StatusBar({
793
793
  {
794
794
  type: "button",
795
795
  onClick: () => onSetMode("present"),
796
- className: chunkQVQTDWB7_js.cn(vb, mode === "present" && "text-primary"),
796
+ className: chunkKA7ST7IH_js.cn(vb, mode === "present" && "text-primary"),
797
797
  title: t("pptx.statusBar.slideShow"),
798
798
  "aria-label": t("pptx.statusBar.slideShow"),
799
799
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPresentation, { className: "w-3.5 h-3.5" })
@@ -883,7 +883,7 @@ function ResizeHandle({
883
883
  {
884
884
  role: "separator",
885
885
  "aria-orientation": direction,
886
- className: chunkQVQTDWB7_js.cn(
886
+ className: chunkKA7ST7IH_js.cn(
887
887
  // Outer container: generous hit area for easy clicking.
888
888
  // The visible indicator is rendered via the inner pseudo-element (::after).
889
889
  "relative flex-shrink-0 z-20 group",
@@ -894,7 +894,7 @@ function ResizeHandle({
894
894
  children: /* @__PURE__ */ jsxRuntime.jsx(
895
895
  "div",
896
896
  {
897
- className: chunkQVQTDWB7_js.cn(
897
+ className: chunkKA7ST7IH_js.cn(
898
898
  "absolute transition-colors",
899
899
  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"
900
900
  )
@@ -961,7 +961,7 @@ function ChartElementView({
961
961
  const selectedPart = selection?.elementId === element.id ? selection.part : null;
962
962
  const canEdit = editable && Boolean(onUpdateElement);
963
963
  const viewModel = React14.useMemo(
964
- () => canEdit ? chunkQVQTDWB7_js.buildReactChartViewModel(element) : null,
964
+ () => canEdit ? chunkKA7ST7IH_js.buildReactChartViewModel(element) : null,
965
965
  [canEdit, element]
966
966
  );
967
967
  React14.useEffect(ensureInteractionStyles, []);
@@ -1107,7 +1107,7 @@ function ChartElementView({
1107
1107
  onPointerUp: handlePointerUp,
1108
1108
  onDoubleClick: handleDoubleClick,
1109
1109
  children: [
1110
- chunkQVQTDWB7_js.renderChartElement(renderedElement),
1110
+ chunkKA7ST7IH_js.renderChartElement(renderedElement),
1111
1111
  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: chunkVSNXVKJI_js.formatAxisValue(dragValue) }),
1112
1112
  titleDraft !== null && /* @__PURE__ */ jsxRuntime.jsx(
1113
1113
  "input",
@@ -1300,7 +1300,7 @@ function renderImg(el, style, filter, alt, opacity) {
1300
1300
  ...filter ? { filter } : {},
1301
1301
  ...opacity !== void 0 ? { opacity } : {}
1302
1302
  };
1303
- if (chunkQVQTDWB7_js.isImageTiled(el)) {
1303
+ if (chunkKA7ST7IH_js.isImageTiled(el)) {
1304
1304
  const tileSrc = imgSrc(el);
1305
1305
  if (!tileSrc) {
1306
1306
  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" });
@@ -1311,7 +1311,7 @@ function renderImg(el, style, filter, alt, opacity) {
1311
1311
  "div",
1312
1312
  {
1313
1313
  className: "pointer-events-none select-none w-full h-full",
1314
- style: { ...chunkQVQTDWB7_js.getImageTilingStyle(el), ...effectStyles }
1314
+ style: { ...chunkKA7ST7IH_js.getImageTilingStyle(el), ...effectStyles }
1315
1315
  }
1316
1316
  )
1317
1317
  ] });
@@ -1320,7 +1320,7 @@ function renderImg(el, style, filter, alt, opacity) {
1320
1320
  chunkAD3EAEY6_js.isImageLikeElement(el) ? el.imageEffects?.colorWash : void 0
1321
1321
  );
1322
1322
  const clrChange = "imageEffects" in el ? el.imageEffects?.clrChange : void 0;
1323
- const duotoneColors = chunkQVQTDWB7_js.getDuotoneColors(el);
1323
+ const duotoneColors = chunkKA7ST7IH_js.getDuotoneColors(el);
1324
1324
  const useDuotoneCanvas = Boolean(duotoneColors && !clrChange);
1325
1325
  const filterForImg = useDuotoneCanvas ? chunkVSNXVKJI_js.getImageEffectsFilter(el, { excludeDuotone: true }) : filter;
1326
1326
  const canvasEffectStyles = {
@@ -1533,7 +1533,7 @@ function ResizeHandles({
1533
1533
  "button",
1534
1534
  {
1535
1535
  type: "button",
1536
- className: chunkQVQTDWB7_js.cn("absolute z-10 group", posClass, cursor),
1536
+ className: chunkKA7ST7IH_js.cn("absolute z-10 group", posClass, cursor),
1537
1537
  style: peStyle,
1538
1538
  onPointerDown: (e) => handleResizePointer(e, handle),
1539
1539
  onMouseDown: (e) => {
@@ -1551,7 +1551,7 @@ function ResizeHandles({
1551
1551
  "button",
1552
1552
  {
1553
1553
  type: "button",
1554
- className: chunkQVQTDWB7_js.cn("absolute z-10", posClass, cursor),
1554
+ className: chunkKA7ST7IH_js.cn("absolute z-10", posClass, cursor),
1555
1555
  style: peStyle,
1556
1556
  onPointerDown: (e) => handleResizePointer(e, handle),
1557
1557
  onMouseDown: (e) => {
@@ -1559,7 +1559,7 @@ function ResizeHandles({
1559
1559
  onResizePointerDown(elementId, e, handle);
1560
1560
  },
1561
1561
  children: [
1562
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkQVQTDWB7_js.cn(sizeClass, "border border-white bg-primary shadow") }),
1562
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkKA7ST7IH_js.cn(sizeClass, "border border-white bg-primary shadow") }),
1563
1563
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -inset-2 max-md:-inset-1" })
1564
1564
  ]
1565
1565
  },
@@ -1570,6 +1570,7 @@ function ResizeHandles({
1570
1570
  {
1571
1571
  type: "button",
1572
1572
  "aria-label": t("pptx.resizeHandles.rotateAria"),
1573
+ "data-pptx-compact": true,
1573
1574
  className: "absolute left-1/2 top-0 -translate-x-1/2 -translate-y-1/2 z-20 flex items-center justify-center w-5 h-5 max-md:w-7 max-md:h-7 rounded-full border border-white bg-primary text-white shadow cursor-grab active:cursor-grabbing",
1574
1575
  style: peStyle,
1575
1576
  onPointerDown: (e) => {
@@ -1594,6 +1595,7 @@ function ResizeHandles({
1594
1595
  {
1595
1596
  type: "button",
1596
1597
  "aria-label": t("pptx.canvas.adjustShape"),
1598
+ "data-pptx-compact": true,
1597
1599
  className: "absolute h-2.5 w-2.5 max-md:h-4 max-md:w-4 rotate-45 border border-amber-700 bg-amber-300 shadow z-10",
1598
1600
  style: {
1599
1601
  left: adjH.left - 5,
@@ -1638,7 +1640,7 @@ var ConnectorElementRenderer = React14__default.default.memo(
1638
1640
  const viewHeight = Math.max(el.height, 1);
1639
1641
  const ss = shapeEl?.shapeStyle;
1640
1642
  const strokeWidth = Math.max(0, ss?.strokeWidth ?? 2);
1641
- const strokeColor = chunkVSNXVKJI_js.normalizeHexColor(ss?.strokeColor, chunkQVQTDWB7_js.DEFAULT_STROKE_COLOR);
1643
+ const strokeColor = chunkVSNXVKJI_js.normalizeHexColor(ss?.strokeColor, chunkKA7ST7IH_js.DEFAULT_STROKE_COLOR);
1642
1644
  const strokePaint = chunkVSNXVKJI_js.colorWithOpacity(strokeColor, ss?.strokeOpacity);
1643
1645
  const dashType = chunkVSNXVKJI_js.normalizeStrokeDashType(ss?.strokeDash);
1644
1646
  const dashArray = chunkVSNXVKJI_js.getSvgStrokeDasharray(
@@ -1659,7 +1661,7 @@ var ConnectorElementRenderer = React14__default.default.memo(
1659
1661
  const connectorText = textEl?.text?.trim() ?? "";
1660
1662
  const connectorTextSegments = textEl?.textSegments;
1661
1663
  const connectorTextStyle = textEl?.textStyle;
1662
- const pathGeometry = shapeEl ? chunkQVQTDWB7_js.getConnectorPathGeometry(shapeEl) : {
1664
+ const pathGeometry = shapeEl ? chunkKA7ST7IH_js.getConnectorPathGeometry(shapeEl) : {
1663
1665
  pathData: `M 0 0 L ${viewWidth} ${viewHeight}`,
1664
1666
  startX: 0,
1665
1667
  startY: 0,
@@ -1668,8 +1670,8 @@ var ConnectorElementRenderer = React14__default.default.memo(
1668
1670
  };
1669
1671
  const hitTargetWidth = Math.max(strokeWidth * 3, 14);
1670
1672
  const selColor = selClr === "blue-400" ? "#60a5fa" : "#3b82f6";
1671
- const lineShadow = chunkQVQTDWB7_js.buildLineShadowCss(el);
1672
- const lineGlow = chunkQVQTDWB7_js.buildLineGlowFilter(el);
1673
+ const lineShadow = chunkKA7ST7IH_js.buildLineShadowCss(el);
1674
+ const lineGlow = chunkKA7ST7IH_js.buildLineGlowFilter(el);
1673
1675
  return /* @__PURE__ */ jsxRuntime.jsxs(
1674
1676
  "div",
1675
1677
  {
@@ -1679,8 +1681,8 @@ var ConnectorElementRenderer = React14__default.default.memo(
1679
1681
  style: {
1680
1682
  left: el.x,
1681
1683
  top: el.y,
1682
- width: Math.max(el.width, chunkQVQTDWB7_js.MIN_ELEMENT_SIZE),
1683
- height: Math.max(el.height, chunkQVQTDWB7_js.MIN_ELEMENT_SIZE),
1684
+ width: Math.max(el.width, chunkKA7ST7IH_js.MIN_ELEMENT_SIZE),
1685
+ height: Math.max(el.height, chunkKA7ST7IH_js.MIN_ELEMENT_SIZE),
1684
1686
  transform: chunkVSNXVKJI_js.getElementTransform(el),
1685
1687
  transformOrigin: "center",
1686
1688
  background: "transparent",
@@ -1702,14 +1704,14 @@ var ConnectorElementRenderer = React14__default.default.memo(
1702
1704
  style: { overflow: "visible", pointerEvents: "none" },
1703
1705
  children: [
1704
1706
  /* @__PURE__ */ jsxRuntime.jsxs("defs", { children: [
1705
- chunkQVQTDWB7_js.renderConnectorMarker(
1707
+ chunkKA7ST7IH_js.renderConnectorMarker(
1706
1708
  startMarkerId,
1707
1709
  startArrow,
1708
1710
  strokePaint,
1709
1711
  ss?.connectorStartArrowWidth,
1710
1712
  ss?.connectorStartArrowLength
1711
1713
  ),
1712
- chunkQVQTDWB7_js.renderConnectorMarker(
1714
+ chunkKA7ST7IH_js.renderConnectorMarker(
1713
1715
  endMarkerId,
1714
1716
  endArrow,
1715
1717
  strokePaint,
@@ -1921,14 +1923,14 @@ function elementHasTextHyperlink(el) {
1921
1923
  return Boolean(el.textSegments?.some((segment) => Boolean(segment.style?.hyperlink)));
1922
1924
  }
1923
1925
  function renderDagDuotoneFilterForElement(el) {
1924
- if (!chunkQVQTDWB7_js.hasDagDuotoneEffect(el)) {
1926
+ if (!chunkKA7ST7IH_js.hasDagDuotoneEffect(el)) {
1925
1927
  return null;
1926
1928
  }
1927
1929
  const duotone = el.shapeStyle?.dagDuotone;
1928
1930
  if (!duotone) {
1929
1931
  return null;
1930
1932
  }
1931
- return chunkQVQTDWB7_js.renderDagDuotoneSvgFilter(el.id, duotone.color1, duotone.color2);
1933
+ return chunkKA7ST7IH_js.renderDagDuotoneSvgFilter(el.id, duotone.color1, duotone.color2);
1932
1934
  }
1933
1935
  function getContainerStyle({
1934
1936
  el,
@@ -1945,12 +1947,12 @@ function getContainerStyle({
1945
1947
  return {
1946
1948
  left: isFullscreenMedia ? 0 : el.x,
1947
1949
  top: isFullscreenMedia ? 0 : el.y,
1948
- width: isFullscreenMedia ? "100%" : Math.max(el.width, chunkQVQTDWB7_js.MIN_ELEMENT_SIZE),
1949
- height: isFullscreenMedia ? "100%" : Math.max(el.height, chunkQVQTDWB7_js.MIN_ELEMENT_SIZE),
1950
+ width: isFullscreenMedia ? "100%" : Math.max(el.width, chunkKA7ST7IH_js.MIN_ELEMENT_SIZE),
1951
+ height: isFullscreenMedia ? "100%" : Math.max(el.height, chunkKA7ST7IH_js.MIN_ELEMENT_SIZE),
1950
1952
  transform: isFullscreenMedia ? "none" : chunkVSNXVKJI_js.getElementTransform(el),
1951
1953
  transformOrigin: "center",
1952
1954
  overflow: overflowValue,
1953
- clipPath: isImg && !has3DExtrusion ? chunkQVQTDWB7_js.getCropShapeClipPath(el) : void 0,
1955
+ clipPath: isImg && !has3DExtrusion ? chunkKA7ST7IH_js.getCropShapeClipPath(el) : void 0,
1954
1956
  zIndex: isFullscreenMedia ? 20 : zIndex,
1955
1957
  opacity,
1956
1958
  visibility: animationState?.visible === false ? "hidden" : "visible",
@@ -1984,8 +1986,8 @@ function ActionIndicator({
1984
1986
  function shapeParams(element) {
1985
1987
  const style = chunkAD3EAEY6_js.hasShapeProperties(element) ? element.shapeStyle : void 0;
1986
1988
  const strokeWidth = Math.max(0, style?.strokeWidth || 0);
1987
- const strokeColor = chunkVSNXVKJI_js.normalizeHexColor(style?.strokeColor, chunkQVQTDWB7_js.DEFAULT_STROKE_COLOR);
1988
- const fillColor = chunkVSNXVKJI_js.normalizeHexColor(style?.fillColor, chunkQVQTDWB7_js.DEFAULT_FILL_COLOR);
1989
+ const strokeColor = chunkVSNXVKJI_js.normalizeHexColor(style?.strokeColor, chunkKA7ST7IH_js.DEFAULT_STROKE_COLOR);
1990
+ const fillColor = chunkVSNXVKJI_js.normalizeHexColor(style?.fillColor, chunkKA7ST7IH_js.DEFAULT_FILL_COLOR);
1989
1991
  const hasFill = style?.fillColor !== void 0 && style.fillColor !== "transparent" || Boolean(chunkVSNXVKJI_js.buildCssGradientFromShapeStyle(style) || style?.fillGradient) || style?.fillMode === "pattern" && Boolean(style.fillPatternPreset);
1990
1992
  return { hf: hasFill, fc: fillColor, sw: strokeWidth, sc: strokeColor };
1991
1993
  }
@@ -2107,15 +2109,15 @@ var ElementRenderer = React14__default.default.memo(
2107
2109
  const elementLocks = el.locks;
2108
2110
  const isTxt = chunkVSNXVKJI_js.isEditableTextElement(el) && !elementLocks?.noTextEdit;
2109
2111
  const txtSE = chunkAD3EAEY6_js.hasTextProperties(el) ? el.textStyle : void 0;
2110
- const ss = chunkQVQTDWB7_js.getShapeVisualStyle(el, hf, fc, sw, sc);
2111
- const ts = chunkQVQTDWB7_js.getTextStyleForElement(el, chunkQVQTDWB7_js.DEFAULT_TEXT_COLOR);
2112
- const vs = chunkQVQTDWB7_js.renderVectorShape(el, hf, fc, sw, sc);
2112
+ const ss = chunkKA7ST7IH_js.getShapeVisualStyle(el, hf, fc, sw, sc);
2113
+ const ts = chunkKA7ST7IH_js.getTextStyleForElement(el, chunkKA7ST7IH_js.DEFAULT_TEXT_COLOR);
2114
+ const vs = chunkKA7ST7IH_js.renderVectorShape(el, hf, fc, sw, sc);
2113
2115
  const isImg = el.type === "picture" || el.type === "image";
2114
2116
  const isModel3D = el.type === "model3d";
2115
- const isConn = chunkQVQTDWB7_js.isConnectorOrLineElement(el);
2117
+ const isConn = chunkKA7ST7IH_js.isConnectorOrLineElement(el);
2116
2118
  const shapeStyle3d = chunkAD3EAEY6_js.hasShapeProperties(el) ? el.shapeStyle : void 0;
2117
2119
  const extrusionData = React14.useMemo(
2118
- () => chunkQVQTDWB7_js.build3DExtrusionData(shapeStyle3d?.shape3d, shapeStyle3d?.scene3d, fc, el.width, el.height),
2120
+ () => chunkKA7ST7IH_js.build3DExtrusionData(shapeStyle3d?.shape3d, shapeStyle3d?.scene3d, fc, el.width, el.height),
2119
2121
  [shapeStyle3d?.shape3d, shapeStyle3d?.scene3d, fc, el.width, el.height]
2120
2122
  );
2121
2123
  const [isMediaPlaying, setIsMediaPlaying] = React14.useState(false);
@@ -2179,7 +2181,7 @@ var ElementRenderer = React14__default.default.memo(
2179
2181
  "aria-roledescription": ariaRoleDescription,
2180
2182
  "aria-selected": isSelected ? true : void 0,
2181
2183
  tabIndex: isFocusable ? 0 : -1,
2182
- className: chunkQVQTDWB7_js.cn(
2184
+ className: chunkKA7ST7IH_js.cn(
2183
2185
  "absolute border",
2184
2186
  "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500",
2185
2187
  cur,
@@ -2212,7 +2214,7 @@ var ElementRenderer = React14__default.default.memo(
2212
2214
  txtSE,
2213
2215
  txtS: ts,
2214
2216
  vecShape: vs,
2215
- imgStyle: chunkQVQTDWB7_js.getImageRenderStyle(el),
2217
+ imgStyle: chunkKA7ST7IH_js.getImageRenderStyle(el),
2216
2218
  imgFilter: chunkVSNXVKJI_js.getImageEffectsFilter(el),
2217
2219
  imgOpacity: chunkVSNXVKJI_js.getImageEffectsOpacity(el),
2218
2220
  imgAlt: imageAltText,
@@ -2356,9 +2358,9 @@ function renderInk(el, options) {
2356
2358
  function renderGroup(children) {
2357
2359
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative w-full h-full pointer-events-none", children: children.map((c, childIndex) => {
2358
2360
  const { hf, fc, sw, sc } = shapeParams(c);
2359
- const ss = chunkQVQTDWB7_js.getShapeVisualStyle(c, hf, fc, sw, sc);
2360
- const vs = chunkQVQTDWB7_js.renderVectorShape(c, hf, fc, sw, sc);
2361
- const ts = chunkQVQTDWB7_js.getTextStyleForElement(c, chunkQVQTDWB7_js.DEFAULT_TEXT_COLOR);
2361
+ const ss = chunkKA7ST7IH_js.getShapeVisualStyle(c, hf, fc, sw, sc);
2362
+ const vs = chunkKA7ST7IH_js.renderVectorShape(c, hf, fc, sw, sc);
2363
+ const ts = chunkKA7ST7IH_js.getTextStyleForElement(c, chunkKA7ST7IH_js.DEFAULT_TEXT_COLOR);
2362
2364
  const isTxt = chunkVSNXVKJI_js.isEditableTextElement(c);
2363
2365
  const isI = c.type === "picture" || c.type === "image";
2364
2366
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -2368,12 +2370,12 @@ function renderGroup(children) {
2368
2370
  style: {
2369
2371
  left: c.x,
2370
2372
  top: c.y,
2371
- width: Math.max(c.width, chunkQVQTDWB7_js.MIN_ELEMENT_SIZE),
2372
- height: Math.max(c.height, chunkQVQTDWB7_js.MIN_ELEMENT_SIZE),
2373
+ width: Math.max(c.width, chunkKA7ST7IH_js.MIN_ELEMENT_SIZE),
2374
+ height: Math.max(c.height, chunkKA7ST7IH_js.MIN_ELEMENT_SIZE),
2373
2375
  transform: chunkVSNXVKJI_js.getElementTransform(c),
2374
2376
  transformOrigin: "center",
2375
2377
  overflow: isI ? "hidden" : void 0,
2376
- clipPath: isI ? chunkQVQTDWB7_js.getCropShapeClipPath(c) : void 0,
2378
+ clipPath: isI ? chunkKA7ST7IH_js.getCropShapeClipPath(c) : void 0,
2377
2379
  ...ss,
2378
2380
  // Explicit z-index preserves document order stacking within the
2379
2381
  // group: later children in the array (= later in p:grpSp XML)
@@ -2381,11 +2383,11 @@ function renderGroup(children) {
2381
2383
  // Placed after ...ss to ensure it is never overwritten.
2382
2384
  zIndex: childIndex
2383
2385
  },
2384
- children: isI && ("svgData" in c && c.svgData || "imageData" in c && c.imageData) ? chunkQVQTDWB7_js.isImageTiled(c) ? /* @__PURE__ */ jsxRuntime.jsx(
2386
+ children: isI && ("svgData" in c && c.svgData || "imageData" in c && c.imageData) ? chunkKA7ST7IH_js.isImageTiled(c) ? /* @__PURE__ */ jsxRuntime.jsx(
2385
2387
  "div",
2386
2388
  {
2387
2389
  className: "pointer-events-none select-none w-full h-full",
2388
- style: chunkQVQTDWB7_js.getImageTilingStyle(c)
2390
+ style: chunkKA7ST7IH_js.getImageTilingStyle(c)
2389
2391
  }
2390
2392
  ) : /* @__PURE__ */ jsxRuntime.jsx(
2391
2393
  "img",
@@ -2393,7 +2395,7 @@ function renderGroup(children) {
2393
2395
  src: "svgData" in c && c.svgData ? c.svgData : c.imageData,
2394
2396
  alt: chunkZISXRMDJ_js.translationsEn["pptx.ink.groupChildAlt"],
2395
2397
  className: "pointer-events-none select-none",
2396
- style: chunkQVQTDWB7_js.getImageRenderStyle(c),
2398
+ style: chunkKA7ST7IH_js.getImageRenderStyle(c),
2397
2399
  draggable: false
2398
2400
  }
2399
2401
  ) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -2403,7 +2405,7 @@ function renderGroup(children) {
2403
2405
  {
2404
2406
  className: "relative z-10 w-full h-full pointer-events-none whitespace-pre-wrap break-words leading-[1.3]",
2405
2407
  style: ts,
2406
- children: chunkQVQTDWB7_js.renderTextSegments(c, chunkQVQTDWB7_js.DEFAULT_TEXT_COLOR)
2408
+ children: chunkKA7ST7IH_js.renderTextSegments(c, chunkKA7ST7IH_js.DEFAULT_TEXT_COLOR)
2407
2409
  }
2408
2410
  ) : null
2409
2411
  ] })
@@ -2752,7 +2754,7 @@ function InlineTextEditor({
2752
2754
  pending.endOffset
2753
2755
  );
2754
2756
  });
2755
- const warpStyle = chunkQVQTDWB7_js.getTextWarpStyle(textStyleRaw);
2757
+ const warpStyle = chunkKA7ST7IH_js.getTextWarpStyle(textStyleRaw);
2756
2758
  const compensationTransform = chunkVSNXVKJI_js.getTextCompensationTransform(element);
2757
2759
  const warpTransform = warpStyle?.transform;
2758
2760
  const mergedTransform = [compensationTransform, warpTransform].filter(Boolean).join(" ") || void 0;
@@ -2828,7 +2830,7 @@ function InlineTextEditor({
2828
2830
  const text = e.clipboardData.getData("text/plain");
2829
2831
  document.execCommand("insertText", false, text);
2830
2832
  },
2831
- children: seed.hasRichSegments ? chunkQVQTDWB7_js.renderTextSegments(element, chunkQVQTDWB7_js.DEFAULT_TEXT_COLOR) : seed.initialText
2833
+ children: seed.hasRichSegments ? chunkKA7ST7IH_js.renderTextSegments(element, chunkKA7ST7IH_js.DEFAULT_TEXT_COLOR) : seed.initialText
2832
2834
  }
2833
2835
  );
2834
2836
  }
@@ -3185,6 +3187,7 @@ function SmartArtNodeStyleBar({
3185
3187
  {
3186
3188
  type: "button",
3187
3189
  "aria-label": `Set fill to ${color}`,
3190
+ "data-pptx-compact": true,
3188
3191
  className: "w-5 h-5 rounded-full border border-black/10 hover:scale-125 transition-transform",
3189
3192
  style: { background: color },
3190
3193
  onClick: () => onPickFill(color)
@@ -3398,8 +3401,8 @@ function DrawingShapeRenderer({
3398
3401
  }
3399
3402
  const drawingW = maxX - minX || 1;
3400
3403
  const drawingH = maxY - minY || 1;
3401
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
3402
- const sw = chunkQVQTDWB7_js.styleStroke(style);
3404
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
3405
+ const sw = chunkKA7ST7IH_js.styleStroke(style);
3403
3406
  return /* @__PURE__ */ jsxRuntime.jsx(
3404
3407
  "svg",
3405
3408
  {
@@ -3408,7 +3411,7 @@ function DrawingShapeRenderer({
3408
3411
  preserveAspectRatio: "xMidYMid meet",
3409
3412
  "data-testid": "smartart-drawing-shapes",
3410
3413
  children: shapes.map((shape, i) => {
3411
- const fill = shape.fillColor ?? chunkQVQTDWB7_js.colour(i, palette);
3414
+ const fill = shape.fillColor ?? chunkKA7ST7IH_js.colour(i, palette);
3412
3415
  const relX = shape.x - minX;
3413
3416
  const relY = shape.y - minY;
3414
3417
  const rx = shape.shapeType === "roundRect" ? Math.min(shape.width, shape.height) * 0.1 : 0;
@@ -3417,10 +3420,10 @@ function DrawingShapeRenderer({
3417
3420
  const rotation = shape.rotation ? `rotate(${shape.rotation} ${relX + shape.width / 2} ${relY + shape.height / 2})` : void 0;
3418
3421
  const strokeCol = shape.strokeColor ?? (sw > 0 ? "rgba(255,255,255,0.3)" : "none");
3419
3422
  const strokeW = shape.strokeWidth ?? sw;
3420
- const fontSize = shape.fontSize ?? chunkQVQTDWB7_js.fitFontSize(shape.text ?? "", shape.width * 0.85, shape.height, 14);
3423
+ const fontSize = shape.fontSize ?? chunkKA7ST7IH_js.fitFontSize(shape.text ?? "", shape.width * 0.85, shape.height, 14);
3421
3424
  const nodeId = nodes ? chunkVSNXVKJI_js.resolveDrawingShapeNodeId(shape, i, shapes, nodes) : void 0;
3422
3425
  const nodeLabel = nodeId ? nodeLabels?.get(nodeId) : void 0;
3423
- const groupProps = nodeId ? chunkQVQTDWB7_js.smartArtNodeGroupProps(nodeId, shadow, nodeLabel) : { style: { filter: shadow } };
3426
+ const groupProps = nodeId ? chunkKA7ST7IH_js.smartArtNodeGroupProps(nodeId, shadow, nodeLabel) : { style: { filter: shadow } };
3424
3427
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { ...groupProps, children: [
3425
3428
  nodeLabel ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: nodeLabel }) : null,
3426
3429
  isEllipse ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -3438,7 +3441,7 @@ function DrawingShapeRenderer({
3438
3441
  ) : isChevron ? /* @__PURE__ */ jsxRuntime.jsx(
3439
3442
  "polygon",
3440
3443
  {
3441
- points: chunkQVQTDWB7_js.chevronPoints(relX, relY, shape.width, shape.height),
3444
+ points: chunkKA7ST7IH_js.chevronPoints(relX, relY, shape.width, shape.height),
3442
3445
  fill,
3443
3446
  stroke: strokeCol,
3444
3447
  strokeWidth: strokeW,
@@ -3459,11 +3462,11 @@ function DrawingShapeRenderer({
3459
3462
  }
3460
3463
  ),
3461
3464
  shape.text ? /* @__PURE__ */ jsxRuntime.jsx(
3462
- chunkQVQTDWB7_js.SmartArtNodeText,
3465
+ chunkKA7ST7IH_js.SmartArtNodeText,
3463
3466
  {
3464
3467
  x: relX + shape.width / 2,
3465
3468
  y: relY + shape.height / 2,
3466
- text: chunkQVQTDWB7_js.truncate(shape.text, 40),
3469
+ text: chunkKA7ST7IH_js.truncate(shape.text, 40),
3467
3470
  fill: shape.fontColor ?? "white",
3468
3471
  fontSize,
3469
3472
  className: "pointer-events-none"
@@ -3479,7 +3482,7 @@ function DrawingShapeRenderer({
3479
3482
  function resolveNodeStyle(node, index, palette) {
3480
3483
  const style = node.style;
3481
3484
  return {
3482
- fill: style?.fillColor ?? chunkQVQTDWB7_js.colour(index, palette),
3485
+ fill: style?.fillColor ?? chunkKA7ST7IH_js.colour(index, palette),
3483
3486
  fontColor: style?.fontColor ?? "white",
3484
3487
  fontWeight: style?.bold ? 700 : void 0,
3485
3488
  fontStyle: style?.italic ? "italic" : void 0,
@@ -3501,8 +3504,8 @@ function ListRenderer({
3501
3504
  const itemH = (usableH - gap * (nodes.length - 1)) / nodes.length;
3502
3505
  const itemW = w - pad * 2;
3503
3506
  const rx = Math.min(6, itemH * 0.15);
3504
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
3505
- const sw = chunkQVQTDWB7_js.styleStroke(style);
3507
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
3508
+ const sw = chunkKA7ST7IH_js.styleStroke(style);
3506
3509
  return /* @__PURE__ */ jsxRuntime.jsx(
3507
3510
  "svg",
3508
3511
  {
@@ -3512,13 +3515,13 @@ function ListRenderer({
3512
3515
  "data-testid": "smartart-list",
3513
3516
  children: nodes.map((node, i) => {
3514
3517
  const y = pad + i * (itemH + gap);
3515
- const fontSize = chunkQVQTDWB7_js.fitFontSize(node.text, itemW * 0.9, itemH, 12);
3518
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(node.text, itemW * 0.9, itemH, 12);
3516
3519
  const ns = resolveNodeStyle(node, i, palette);
3517
3520
  const label = nodeLabels?.get(node.id);
3518
3521
  return /* @__PURE__ */ jsxRuntime.jsxs(
3519
3522
  "g",
3520
3523
  {
3521
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow, label),
3524
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow, label),
3522
3525
  children: [
3523
3526
  label ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: label }) : null,
3524
3527
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -3530,17 +3533,17 @@ function ListRenderer({
3530
3533
  height: itemH,
3531
3534
  rx,
3532
3535
  fill: ns.fill,
3533
- opacity: chunkQVQTDWB7_js.nodeOpacity(i, nodes.length, style),
3536
+ opacity: chunkKA7ST7IH_js.nodeOpacity(i, nodes.length, style),
3534
3537
  stroke: ns.strokeColor ?? (sw > 0 ? "rgba(255,255,255,0.3)" : "none"),
3535
3538
  strokeWidth: sw
3536
3539
  }
3537
3540
  ),
3538
3541
  /* @__PURE__ */ jsxRuntime.jsx(
3539
- chunkQVQTDWB7_js.SmartArtNodeText,
3542
+ chunkKA7ST7IH_js.SmartArtNodeText,
3540
3543
  {
3541
3544
  x: pad + itemW / 2,
3542
3545
  y: y + itemH / 2,
3543
- text: chunkQVQTDWB7_js.truncate(node.text, 40),
3546
+ text: chunkKA7ST7IH_js.truncate(node.text, 40),
3544
3547
  fill: ns.fontColor,
3545
3548
  fontWeight: ns.fontWeight,
3546
3549
  fontStyle: ns.fontStyle,
@@ -3572,8 +3575,8 @@ function ProcessRenderer({
3572
3575
  const itemW = (usableW - gap * (nodes.length - 1)) / nodes.length;
3573
3576
  const itemH = Math.min(h - pad * 2, h * 0.6);
3574
3577
  const yMid = h / 2;
3575
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
3576
- const sw = chunkQVQTDWB7_js.styleStroke(style);
3578
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
3579
+ const sw = chunkKA7ST7IH_js.styleStroke(style);
3577
3580
  return /* @__PURE__ */ jsxRuntime.jsx(
3578
3581
  "svg",
3579
3582
  {
@@ -3587,13 +3590,13 @@ function ProcessRenderer({
3587
3590
  const isFirst = i === 0;
3588
3591
  const isLast = i === nodes.length - 1;
3589
3592
  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}`;
3590
- const fontSize = chunkQVQTDWB7_js.fitFontSize(node.text, itemW * 0.7, itemH, 12);
3593
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(node.text, itemW * 0.7, itemH, 12);
3591
3594
  const ns = resolveNodeStyle(node, i, palette);
3592
3595
  const label = nodeLabels?.get(node.id);
3593
3596
  return /* @__PURE__ */ jsxRuntime.jsxs(
3594
3597
  "g",
3595
3598
  {
3596
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow, label),
3599
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow, label),
3597
3600
  children: [
3598
3601
  label ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: label }) : null,
3599
3602
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -3601,17 +3604,17 @@ function ProcessRenderer({
3601
3604
  {
3602
3605
  points,
3603
3606
  fill: ns.fill,
3604
- opacity: chunkQVQTDWB7_js.nodeOpacity(i, nodes.length, style),
3607
+ opacity: chunkKA7ST7IH_js.nodeOpacity(i, nodes.length, style),
3605
3608
  stroke: ns.strokeColor ?? (sw > 0 ? "rgba(255,255,255,0.3)" : "none"),
3606
3609
  strokeWidth: sw
3607
3610
  }
3608
3611
  ),
3609
3612
  /* @__PURE__ */ jsxRuntime.jsx(
3610
- chunkQVQTDWB7_js.SmartArtNodeText,
3613
+ chunkKA7ST7IH_js.SmartArtNodeText,
3611
3614
  {
3612
3615
  x: x + itemW / 2,
3613
3616
  y: yMid,
3614
- text: chunkQVQTDWB7_js.truncate(node.text, 25),
3617
+ text: chunkKA7ST7IH_js.truncate(node.text, 25),
3615
3618
  fill: ns.fontColor,
3616
3619
  fontWeight: ns.fontWeight,
3617
3620
  fontStyle: ns.fontStyle,
@@ -3641,8 +3644,8 @@ function CycleRenderer({
3641
3644
  const cy = h / 2;
3642
3645
  const radius = size * 0.35;
3643
3646
  const nodeR = Math.max(size * 0.06, Math.min(size * 0.12, 200 / nodes.length));
3644
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
3645
- const sw = chunkQVQTDWB7_js.styleStroke(style);
3647
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
3648
+ const sw = chunkKA7ST7IH_js.styleStroke(style);
3646
3649
  return /* @__PURE__ */ jsxRuntime.jsxs(
3647
3650
  "svg",
3648
3651
  {
@@ -3681,13 +3684,13 @@ function CycleRenderer({
3681
3684
  const angle = i / nodes.length * Math.PI * 2 - Math.PI / 2;
3682
3685
  const nx = cx + radius * Math.cos(angle);
3683
3686
  const ny = cy + radius * Math.sin(angle);
3684
- const fontSize = chunkQVQTDWB7_js.fitFontSize(node.text, nodeR * 1.4, nodeR * 2, 11);
3687
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(node.text, nodeR * 1.4, nodeR * 2, 11);
3685
3688
  const ns = resolveNodeStyle(node, i, palette);
3686
3689
  const label = nodeLabels?.get(node.id);
3687
3690
  return /* @__PURE__ */ jsxRuntime.jsxs(
3688
3691
  "g",
3689
3692
  {
3690
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow, label),
3693
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow, label),
3691
3694
  children: [
3692
3695
  label ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: label }) : null,
3693
3696
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -3697,17 +3700,17 @@ function CycleRenderer({
3697
3700
  cy: ny,
3698
3701
  r: nodeR,
3699
3702
  fill: ns.fill,
3700
- opacity: chunkQVQTDWB7_js.nodeOpacity(i, nodes.length, style),
3703
+ opacity: chunkKA7ST7IH_js.nodeOpacity(i, nodes.length, style),
3701
3704
  stroke: ns.strokeColor ?? (sw > 0 ? "rgba(255,255,255,0.3)" : "none"),
3702
3705
  strokeWidth: sw
3703
3706
  }
3704
3707
  ),
3705
3708
  /* @__PURE__ */ jsxRuntime.jsx(
3706
- chunkQVQTDWB7_js.SmartArtNodeText,
3709
+ chunkKA7ST7IH_js.SmartArtNodeText,
3707
3710
  {
3708
3711
  x: nx,
3709
3712
  y: ny,
3710
- text: chunkQVQTDWB7_js.truncate(node.text, 20),
3713
+ text: chunkKA7ST7IH_js.truncate(node.text, 20),
3711
3714
  fill: ns.fontColor,
3712
3715
  fontWeight: ns.fontWeight,
3713
3716
  fontStyle: ns.fontStyle,
@@ -3742,8 +3745,8 @@ function MatrixRenderer({
3742
3745
  const cellW = (usableW - gap * (cols - 1)) / cols;
3743
3746
  const cellH = (usableH - gap * (rows - 1)) / rows;
3744
3747
  const rx = Math.min(6, Math.min(cellW, cellH) * 0.1);
3745
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
3746
- const sw = chunkQVQTDWB7_js.styleStroke(style);
3748
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
3749
+ const sw = chunkKA7ST7IH_js.styleStroke(style);
3747
3750
  return /* @__PURE__ */ jsxRuntime.jsx(
3748
3751
  "svg",
3749
3752
  {
@@ -3756,13 +3759,13 @@ function MatrixRenderer({
3756
3759
  const row = Math.floor(i / cols);
3757
3760
  const x = pad + col * (cellW + gap);
3758
3761
  const y = pad + row * (cellH + gap);
3759
- const fontSize = chunkQVQTDWB7_js.fitFontSize(node.text, cellW * 0.85, cellH, 12);
3762
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(node.text, cellW * 0.85, cellH, 12);
3760
3763
  const ns = resolveNodeStyle(node, i, palette);
3761
3764
  const label = nodeLabels?.get(node.id);
3762
3765
  return /* @__PURE__ */ jsxRuntime.jsxs(
3763
3766
  "g",
3764
3767
  {
3765
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow, label),
3768
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow, label),
3766
3769
  children: [
3767
3770
  label ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: label }) : null,
3768
3771
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -3774,17 +3777,17 @@ function MatrixRenderer({
3774
3777
  height: cellH,
3775
3778
  rx,
3776
3779
  fill: ns.fill,
3777
- opacity: chunkQVQTDWB7_js.nodeOpacity(i, nodes.length, style),
3780
+ opacity: chunkKA7ST7IH_js.nodeOpacity(i, nodes.length, style),
3778
3781
  stroke: ns.strokeColor ?? (sw > 0 ? "rgba(255,255,255,0.3)" : "none"),
3779
3782
  strokeWidth: sw
3780
3783
  }
3781
3784
  ),
3782
3785
  /* @__PURE__ */ jsxRuntime.jsx(
3783
- chunkQVQTDWB7_js.SmartArtNodeText,
3786
+ chunkKA7ST7IH_js.SmartArtNodeText,
3784
3787
  {
3785
3788
  x: x + cellW / 2,
3786
3789
  y: y + cellH / 2,
3787
- text: chunkQVQTDWB7_js.truncate(node.text, 30),
3790
+ text: chunkKA7ST7IH_js.truncate(node.text, 30),
3788
3791
  fill: ns.fontColor,
3789
3792
  fontWeight: ns.fontWeight ?? 500,
3790
3793
  fontStyle: ns.fontStyle,
@@ -3813,8 +3816,8 @@ function PyramidRenderer({
3813
3816
  const usableH = h - pad * 2;
3814
3817
  const bandH = (usableH - gap * (nodes.length - 1)) / nodes.length;
3815
3818
  const maxW = w - pad * 2;
3816
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
3817
- const sw = chunkQVQTDWB7_js.styleStroke(style);
3819
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
3820
+ const sw = chunkKA7ST7IH_js.styleStroke(style);
3818
3821
  return /* @__PURE__ */ jsxRuntime.jsx(
3819
3822
  "svg",
3820
3823
  {
@@ -3838,28 +3841,28 @@ function PyramidRenderer({
3838
3841
  `${bottomRight},${y + bandH}`,
3839
3842
  `${bottomLeft},${y + bandH}`
3840
3843
  ].join(" ");
3841
- const fontSize = chunkQVQTDWB7_js.fitFontSize(node.text, topW * 0.85, bandH, 12);
3844
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(node.text, topW * 0.85, bandH, 12);
3842
3845
  return /* @__PURE__ */ jsxRuntime.jsxs(
3843
3846
  "g",
3844
3847
  {
3845
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow),
3848
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow),
3846
3849
  children: [
3847
3850
  /* @__PURE__ */ jsxRuntime.jsx(
3848
3851
  "polygon",
3849
3852
  {
3850
3853
  points,
3851
- fill: chunkQVQTDWB7_js.colour(i, palette),
3852
- opacity: chunkQVQTDWB7_js.nodeOpacity(i, nodes.length, style),
3854
+ fill: chunkKA7ST7IH_js.colour(i, palette),
3855
+ opacity: chunkKA7ST7IH_js.nodeOpacity(i, nodes.length, style),
3853
3856
  stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
3854
3857
  strokeWidth: sw
3855
3858
  }
3856
3859
  ),
3857
3860
  /* @__PURE__ */ jsxRuntime.jsx(
3858
- chunkQVQTDWB7_js.SmartArtNodeText,
3861
+ chunkKA7ST7IH_js.SmartArtNodeText,
3859
3862
  {
3860
3863
  x: w / 2,
3861
3864
  y: y + bandH / 2,
3862
- text: chunkQVQTDWB7_js.truncate(node.text, 30),
3865
+ text: chunkKA7ST7IH_js.truncate(node.text, 30),
3863
3866
  fill: "white",
3864
3867
  fontSize,
3865
3868
  className: "pointer-events-none"
@@ -3881,7 +3884,7 @@ function VennRenderer({
3881
3884
  }) {
3882
3885
  const w = element.width;
3883
3886
  const h = element.height;
3884
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
3887
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
3885
3888
  if (nodes.length <= 4) {
3886
3889
  const cx = w / 2;
3887
3890
  const cy2 = h / 2;
@@ -3898,19 +3901,19 @@ function VennRenderer({
3898
3901
  const angle = i / nodes.length * Math.PI * 2 - Math.PI / 2;
3899
3902
  const nx = cx + spread * Math.cos(angle);
3900
3903
  const ny = cy2 + spread * Math.sin(angle);
3901
- const fontSize = chunkQVQTDWB7_js.fitFontSize(node.text, r2 * 1.2, r2 * 2, 11);
3904
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(node.text, r2 * 1.2, r2 * 2, 11);
3902
3905
  return /* @__PURE__ */ jsxRuntime.jsxs(
3903
3906
  "g",
3904
3907
  {
3905
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow),
3908
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow),
3906
3909
  children: [
3907
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: nx, cy: ny, r: r2, fill: chunkQVQTDWB7_js.colour(i, palette), opacity: 0.35 }),
3910
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: nx, cy: ny, r: r2, fill: chunkKA7ST7IH_js.colour(i, palette), opacity: 0.35 }),
3908
3911
  /* @__PURE__ */ jsxRuntime.jsx(
3909
- chunkQVQTDWB7_js.SmartArtNodeText,
3912
+ chunkKA7ST7IH_js.SmartArtNodeText,
3910
3913
  {
3911
3914
  x: nx,
3912
3915
  y: ny,
3913
- text: chunkQVQTDWB7_js.truncate(node.text, 20),
3916
+ text: chunkKA7ST7IH_js.truncate(node.text, 20),
3914
3917
  fill: "white",
3915
3918
  fontSize,
3916
3919
  fontWeight: "bold",
@@ -3939,19 +3942,19 @@ function VennRenderer({
3939
3942
  "data-testid": "smartart-venn",
3940
3943
  children: nodes.map((node, i) => {
3941
3944
  const nx = offsetX + i * (r * 2 - overlap);
3942
- const fontSize = chunkQVQTDWB7_js.fitFontSize(node.text, r * 1.2, r * 2, 10);
3945
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(node.text, r * 1.2, r * 2, 10);
3943
3946
  return /* @__PURE__ */ jsxRuntime.jsxs(
3944
3947
  "g",
3945
3948
  {
3946
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow),
3949
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow),
3947
3950
  children: [
3948
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: nx, cy, r, fill: chunkQVQTDWB7_js.colour(i, palette), opacity: 0.35 }),
3951
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: nx, cy, r, fill: chunkKA7ST7IH_js.colour(i, palette), opacity: 0.35 }),
3949
3952
  /* @__PURE__ */ jsxRuntime.jsx(
3950
- chunkQVQTDWB7_js.SmartArtNodeText,
3953
+ chunkKA7ST7IH_js.SmartArtNodeText,
3951
3954
  {
3952
3955
  x: nx,
3953
3956
  y: cy,
3954
- text: chunkQVQTDWB7_js.truncate(node.text, 20),
3957
+ text: chunkKA7ST7IH_js.truncate(node.text, 20),
3955
3958
  fill: "white",
3956
3959
  fontSize,
3957
3960
  fontWeight: "bold",
@@ -3977,7 +3980,7 @@ function FunnelRenderer({
3977
3980
  const pad = 8;
3978
3981
  const usableW = w - pad * 2;
3979
3982
  const stageH = (h - pad * 2) / nodes.length;
3980
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
3983
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
3981
3984
  return /* @__PURE__ */ jsxRuntime.jsx(
3982
3985
  "svg",
3983
3986
  {
@@ -3999,26 +4002,26 @@ function FunnelRenderer({
3999
4002
  `${bottomRight},${y + stageH}`,
4000
4003
  `${bottomLeft},${y + stageH}`
4001
4004
  ].join(" ");
4002
- const fontSize = chunkQVQTDWB7_js.fitFontSize(node.text, topWidth * 0.85, stageH, 11);
4005
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(node.text, topWidth * 0.85, stageH, 11);
4003
4006
  return /* @__PURE__ */ jsxRuntime.jsxs(
4004
4007
  "g",
4005
4008
  {
4006
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow),
4009
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow),
4007
4010
  children: [
4008
4011
  /* @__PURE__ */ jsxRuntime.jsx(
4009
4012
  "polygon",
4010
4013
  {
4011
4014
  points,
4012
- fill: chunkQVQTDWB7_js.colour(i, palette),
4013
- opacity: chunkQVQTDWB7_js.nodeOpacity(i, nodes.length, style)
4015
+ fill: chunkKA7ST7IH_js.colour(i, palette),
4016
+ opacity: chunkKA7ST7IH_js.nodeOpacity(i, nodes.length, style)
4014
4017
  }
4015
4018
  ),
4016
4019
  /* @__PURE__ */ jsxRuntime.jsx(
4017
- chunkQVQTDWB7_js.SmartArtNodeText,
4020
+ chunkKA7ST7IH_js.SmartArtNodeText,
4018
4021
  {
4019
4022
  x: w / 2,
4020
4023
  y: y + stageH / 2,
4021
- text: chunkQVQTDWB7_js.truncate(node.text, 30),
4024
+ text: chunkKA7ST7IH_js.truncate(node.text, 30),
4022
4025
  fill: "white",
4023
4026
  fontSize,
4024
4027
  className: "pointer-events-none"
@@ -4045,7 +4048,7 @@ function TargetRenderer({
4045
4048
  const maxR = Math.min(cx - 8, cy - 8);
4046
4049
  const fontSize = Math.max(7, Math.min(10, maxR / (nodes.length + 1)));
4047
4050
  const labelX = cx + maxR + 8;
4048
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
4051
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
4049
4052
  return /* @__PURE__ */ jsxRuntime.jsx(
4050
4053
  "svg",
4051
4054
  {
@@ -4058,7 +4061,7 @@ function TargetRenderer({
4058
4061
  return /* @__PURE__ */ jsxRuntime.jsxs(
4059
4062
  "g",
4060
4063
  {
4061
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow),
4064
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow),
4062
4065
  children: [
4063
4066
  /* @__PURE__ */ jsxRuntime.jsx(
4064
4067
  "circle",
@@ -4066,8 +4069,8 @@ function TargetRenderer({
4066
4069
  cx,
4067
4070
  cy,
4068
4071
  r: Math.max(r, 4),
4069
- fill: chunkQVQTDWB7_js.colour(i, palette),
4070
- opacity: chunkQVQTDWB7_js.nodeOpacity(i, nodes.length, style)
4072
+ fill: chunkKA7ST7IH_js.colour(i, palette),
4073
+ opacity: chunkKA7ST7IH_js.nodeOpacity(i, nodes.length, style)
4071
4074
  }
4072
4075
  ),
4073
4076
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4077,7 +4080,7 @@ function TargetRenderer({
4077
4080
  y1: cy,
4078
4081
  x2: labelX - 2,
4079
4082
  y2: 8 + i * (fontSize + 6),
4080
- stroke: chunkQVQTDWB7_js.colour(i, palette),
4083
+ stroke: chunkKA7ST7IH_js.colour(i, palette),
4081
4084
  strokeWidth: 1,
4082
4085
  opacity: 0.6
4083
4086
  }
@@ -4089,10 +4092,10 @@ function TargetRenderer({
4089
4092
  y: 8 + i * (fontSize + 6) + fontSize / 2,
4090
4093
  textAnchor: "start",
4091
4094
  dominantBaseline: "central",
4092
- fill: chunkQVQTDWB7_js.colour(i, palette),
4095
+ fill: chunkKA7ST7IH_js.colour(i, palette),
4093
4096
  fontSize,
4094
4097
  className: "pointer-events-none",
4095
- children: chunkQVQTDWB7_js.truncate(node.text, 30)
4098
+ children: chunkKA7ST7IH_js.truncate(node.text, 30)
4096
4099
  }
4097
4100
  )
4098
4101
  ]
@@ -4109,12 +4112,12 @@ function HierarchyRenderer({
4109
4112
  palette,
4110
4113
  style
4111
4114
  }) {
4112
- const roots = chunkQVQTDWB7_js.buildTree(nodes);
4115
+ const roots = chunkKA7ST7IH_js.buildTree(nodes);
4113
4116
  if (roots.length === 0) {
4114
4117
  return /* @__PURE__ */ jsxRuntime.jsx(ListRenderer, { element, nodes, palette, style });
4115
4118
  }
4116
- const totalLeaves = roots.reduce((s, r) => s + chunkQVQTDWB7_js.treeWidth(r), 0);
4117
- const depth = Math.max(...roots.map(chunkQVQTDWB7_js.treeDepth));
4119
+ const totalLeaves = roots.reduce((s, r) => s + chunkKA7ST7IH_js.treeWidth(r), 0);
4120
+ const depth = Math.max(...roots.map(chunkKA7ST7IH_js.treeDepth));
4118
4121
  const svgW = element.width;
4119
4122
  const svgH = element.height;
4120
4123
  const cellW = svgW / totalLeaves;
@@ -4122,24 +4125,24 @@ function HierarchyRenderer({
4122
4125
  const boxW = Math.min(cellW * 0.8, 140);
4123
4126
  const boxH = Math.min(cellH * 0.4, 36);
4124
4127
  const rx = Math.min(6, boxH * 0.15);
4125
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
4126
- const sw = chunkQVQTDWB7_js.styleStroke(style);
4128
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
4129
+ const sw = chunkKA7ST7IH_js.styleStroke(style);
4127
4130
  const elements = [];
4128
4131
  let colourIdx = 0;
4129
4132
  function renderTreeNode(t, xOffset, level) {
4130
- const w = chunkQVQTDWB7_js.treeWidth(t);
4133
+ const w = chunkKA7ST7IH_js.treeWidth(t);
4131
4134
  const nodeCx = (xOffset + w / 2) * cellW;
4132
4135
  const nodeCy = level * cellH + cellH / 2;
4133
4136
  const ci = colourIdx++;
4134
- const fontSize = chunkQVQTDWB7_js.fitFontSize(t.node.text, boxW * 0.9, boxH, 11);
4137
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(t.node.text, boxW * 0.9, boxH, 11);
4135
4138
  for (const child of t.children) {
4136
- const childW = chunkQVQTDWB7_js.treeWidth(child);
4139
+ const childW = chunkKA7ST7IH_js.treeWidth(child);
4137
4140
  let childOffset2 = xOffset;
4138
4141
  for (const c of t.children) {
4139
4142
  if (c === child) {
4140
4143
  break;
4141
4144
  }
4142
- childOffset2 += chunkQVQTDWB7_js.treeWidth(c);
4145
+ childOffset2 += chunkKA7ST7IH_js.treeWidth(c);
4143
4146
  }
4144
4147
  const childCx = (childOffset2 + childW / 2) * cellW;
4145
4148
  const childCy = (level + 1) * cellH + cellH / 2;
@@ -4162,7 +4165,7 @@ function HierarchyRenderer({
4162
4165
  /* @__PURE__ */ jsxRuntime.jsxs(
4163
4166
  "g",
4164
4167
  {
4165
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(t.node.id, shadow),
4168
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(t.node.id, shadow),
4166
4169
  children: [
4167
4170
  /* @__PURE__ */ jsxRuntime.jsx(
4168
4171
  "rect",
@@ -4172,18 +4175,18 @@ function HierarchyRenderer({
4172
4175
  width: boxW,
4173
4176
  height: boxH,
4174
4177
  rx,
4175
- fill: chunkQVQTDWB7_js.colour(ci, palette),
4176
- opacity: chunkQVQTDWB7_js.nodeOpacity(ci, nodes.length, style),
4178
+ fill: chunkKA7ST7IH_js.colour(ci, palette),
4179
+ opacity: chunkKA7ST7IH_js.nodeOpacity(ci, nodes.length, style),
4177
4180
  stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
4178
4181
  strokeWidth: sw
4179
4182
  }
4180
4183
  ),
4181
4184
  /* @__PURE__ */ jsxRuntime.jsx(
4182
- chunkQVQTDWB7_js.SmartArtNodeText,
4185
+ chunkKA7ST7IH_js.SmartArtNodeText,
4183
4186
  {
4184
4187
  x: nodeCx,
4185
4188
  y: nodeCy,
4186
- text: chunkQVQTDWB7_js.truncate(t.node.text, 40),
4189
+ text: chunkKA7ST7IH_js.truncate(t.node.text, 40),
4187
4190
  fill: "white",
4188
4191
  fontSize,
4189
4192
  className: "pointer-events-none"
@@ -4197,7 +4200,7 @@ function HierarchyRenderer({
4197
4200
  let childOffset = xOffset;
4198
4201
  for (const child of t.children) {
4199
4202
  renderTreeNode(child, childOffset, level + 1);
4200
- childOffset += chunkQVQTDWB7_js.treeWidth(child);
4203
+ childOffset += chunkKA7ST7IH_js.treeWidth(child);
4201
4204
  }
4202
4205
  return w;
4203
4206
  }
@@ -4232,7 +4235,7 @@ function GearRenderer({
4232
4235
  const gearR = Math.min(spacing * 0.4, h * 0.35);
4233
4236
  const innerR = gearR * 0.7;
4234
4237
  const teethCount = 8;
4235
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
4238
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
4236
4239
  return /* @__PURE__ */ jsxRuntime.jsxs(
4237
4240
  "svg",
4238
4241
  {
@@ -4244,27 +4247,27 @@ function GearRenderer({
4244
4247
  gearNodes.map((node, i) => {
4245
4248
  const gx = spacing * (i + 1);
4246
4249
  const gy = h / 2 + (i % 2 === 0 ? 0 : gearR * 0.35);
4247
- const fontSize = chunkQVQTDWB7_js.fitFontSize(node.text, innerR * 1.2, innerR * 2, 11);
4250
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(node.text, innerR * 1.2, innerR * 2, 11);
4248
4251
  return /* @__PURE__ */ jsxRuntime.jsxs(
4249
4252
  "g",
4250
4253
  {
4251
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow),
4254
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow),
4252
4255
  children: [
4253
4256
  /* @__PURE__ */ jsxRuntime.jsx(
4254
4257
  "path",
4255
4258
  {
4256
- d: chunkQVQTDWB7_js.gearPath(gx, gy, gearR, innerR, teethCount),
4257
- fill: chunkQVQTDWB7_js.colour(i, palette),
4258
- opacity: chunkQVQTDWB7_js.nodeOpacity(i, nodes.length, style)
4259
+ d: chunkKA7ST7IH_js.gearPath(gx, gy, gearR, innerR, teethCount),
4260
+ fill: chunkKA7ST7IH_js.colour(i, palette),
4261
+ opacity: chunkKA7ST7IH_js.nodeOpacity(i, nodes.length, style)
4259
4262
  }
4260
4263
  ),
4261
4264
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: gx, cy: gy, r: innerR * 0.5, fill: "white", opacity: 0.25 }),
4262
4265
  /* @__PURE__ */ jsxRuntime.jsx(
4263
- chunkQVQTDWB7_js.SmartArtNodeText,
4266
+ chunkKA7ST7IH_js.SmartArtNodeText,
4264
4267
  {
4265
4268
  x: gx,
4266
4269
  y: gy,
4267
- text: chunkQVQTDWB7_js.truncate(node.text, 20),
4270
+ text: chunkKA7ST7IH_js.truncate(node.text, 20),
4268
4271
  fill: "white",
4269
4272
  fontSize,
4270
4273
  fontWeight: "bold",
@@ -4286,8 +4289,8 @@ function GearRenderer({
4286
4289
  cx: lx,
4287
4290
  cy: ly,
4288
4291
  r: 3,
4289
- fill: chunkQVQTDWB7_js.colour(gearCount + i, palette),
4290
- opacity: chunkQVQTDWB7_js.nodeOpacity(gearCount + i, nodes.length, style)
4292
+ fill: chunkKA7ST7IH_js.colour(gearCount + i, palette),
4293
+ opacity: chunkKA7ST7IH_js.nodeOpacity(gearCount + i, nodes.length, style)
4291
4294
  }
4292
4295
  ),
4293
4296
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4297,10 +4300,10 @@ function GearRenderer({
4297
4300
  y: ly,
4298
4301
  textAnchor: "start",
4299
4302
  dominantBaseline: "central",
4300
- fill: chunkQVQTDWB7_js.colour(gearCount + i, palette),
4303
+ fill: chunkKA7ST7IH_js.colour(gearCount + i, palette),
4301
4304
  fontSize: 10,
4302
4305
  className: "pointer-events-none",
4303
- children: chunkQVQTDWB7_js.truncate(node.text, 30)
4306
+ children: chunkKA7ST7IH_js.truncate(node.text, 30)
4304
4307
  }
4305
4308
  )
4306
4309
  ] }, `${element.id}-gear-extra-${node.id}-${i}`);
@@ -4324,7 +4327,7 @@ function TimelineRenderer({
4324
4327
  const lineLen = lineEndX - lineStartX;
4325
4328
  const dotR = Math.max(4, Math.min(8, lineLen / (nodes.length * 4)));
4326
4329
  const labelOffset = Math.min(h * 0.28, 40);
4327
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
4330
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
4328
4331
  return /* @__PURE__ */ jsxRuntime.jsxs(
4329
4332
  "svg",
4330
4333
  {
@@ -4346,11 +4349,11 @@ function TimelineRenderer({
4346
4349
  const above = i % 2 === 0;
4347
4350
  const textY = above ? lineY - labelOffset : lineY + labelOffset;
4348
4351
  const stemEndY = above ? lineY - dotR - 2 : lineY + dotR + 2;
4349
- const fontSize = chunkQVQTDWB7_js.fitFontSize(node.text, lineLen / nodes.length * 0.9, labelOffset, 10);
4352
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(node.text, lineLen / nodes.length * 0.9, labelOffset, 10);
4350
4353
  return /* @__PURE__ */ jsxRuntime.jsxs(
4351
4354
  "g",
4352
4355
  {
4353
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow),
4356
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow),
4354
4357
  children: [
4355
4358
  /* @__PURE__ */ jsxRuntime.jsx(
4356
4359
  "line",
@@ -4359,7 +4362,7 @@ function TimelineRenderer({
4359
4362
  y1: stemEndY,
4360
4363
  x2: x,
4361
4364
  y2: textY + (above ? fontSize : -fontSize),
4362
- stroke: chunkQVQTDWB7_js.colour(i, palette),
4365
+ stroke: chunkKA7ST7IH_js.colour(i, palette),
4363
4366
  strokeWidth: 1,
4364
4367
  opacity: 0.5
4365
4368
  }
@@ -4370,17 +4373,17 @@ function TimelineRenderer({
4370
4373
  cx: x,
4371
4374
  cy: lineY,
4372
4375
  r: dotR,
4373
- fill: chunkQVQTDWB7_js.colour(i, palette),
4374
- opacity: chunkQVQTDWB7_js.nodeOpacity(i, nodes.length, style)
4376
+ fill: chunkKA7ST7IH_js.colour(i, palette),
4377
+ opacity: chunkKA7ST7IH_js.nodeOpacity(i, nodes.length, style)
4375
4378
  }
4376
4379
  ),
4377
4380
  /* @__PURE__ */ jsxRuntime.jsx(
4378
- chunkQVQTDWB7_js.SmartArtNodeText,
4381
+ chunkKA7ST7IH_js.SmartArtNodeText,
4379
4382
  {
4380
- text: chunkQVQTDWB7_js.truncate(node.text, 20) ?? "",
4383
+ text: chunkKA7ST7IH_js.truncate(node.text, 20) ?? "",
4381
4384
  x,
4382
4385
  y: textY,
4383
- fill: chunkQVQTDWB7_js.colour(i, palette),
4386
+ fill: chunkKA7ST7IH_js.colour(i, palette),
4384
4387
  fontSize,
4385
4388
  anchor: above ? "bottom" : "top",
4386
4389
  className: "pointer-events-none"
@@ -4413,8 +4416,8 @@ function BendingProcessRenderer({
4413
4416
  const boxH = Math.min(cellH * 0.6, 32);
4414
4417
  const rx = Math.min(5, boxH * 0.15);
4415
4418
  const arrowSize = 6;
4416
- const shadow = chunkQVQTDWB7_js.styleShadow(style);
4417
- const sw = chunkQVQTDWB7_js.styleStroke(style);
4419
+ const shadow = chunkKA7ST7IH_js.styleShadow(style);
4420
+ const sw = chunkKA7ST7IH_js.styleStroke(style);
4418
4421
  return /* @__PURE__ */ jsxRuntime.jsx(
4419
4422
  "svg",
4420
4423
  {
@@ -4428,7 +4431,7 @@ function BendingProcessRenderer({
4428
4431
  const col = row % 2 === 0 ? colInRow : COLS - 1 - colInRow;
4429
4432
  const nodeCx = padX + col * cellW + cellW / 2;
4430
4433
  const nodeCy = padY + row * cellH + cellH / 2;
4431
- const fontSize = chunkQVQTDWB7_js.fitFontSize(node.text, boxW * 0.85, boxH, 10);
4434
+ const fontSize = chunkKA7ST7IH_js.fitFontSize(node.text, boxW * 0.85, boxH, 10);
4432
4435
  let arrow = null;
4433
4436
  if (i < nodes.length - 1) {
4434
4437
  const nextRow = Math.floor((i + 1) / COLS);
@@ -4488,7 +4491,7 @@ function BendingProcessRenderer({
4488
4491
  return /* @__PURE__ */ jsxRuntime.jsxs(
4489
4492
  "g",
4490
4493
  {
4491
- ...chunkQVQTDWB7_js.smartArtNodeGroupProps(node.id, shadow),
4494
+ ...chunkKA7ST7IH_js.smartArtNodeGroupProps(node.id, shadow),
4492
4495
  children: [
4493
4496
  arrow,
4494
4497
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4499,18 +4502,18 @@ function BendingProcessRenderer({
4499
4502
  width: boxW,
4500
4503
  height: boxH,
4501
4504
  rx,
4502
- fill: chunkQVQTDWB7_js.colour(i, palette),
4503
- opacity: chunkQVQTDWB7_js.nodeOpacity(i, nodes.length, style),
4505
+ fill: chunkKA7ST7IH_js.colour(i, palette),
4506
+ opacity: chunkKA7ST7IH_js.nodeOpacity(i, nodes.length, style),
4504
4507
  stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
4505
4508
  strokeWidth: sw
4506
4509
  }
4507
4510
  ),
4508
4511
  /* @__PURE__ */ jsxRuntime.jsx(
4509
- chunkQVQTDWB7_js.SmartArtNodeText,
4512
+ chunkKA7ST7IH_js.SmartArtNodeText,
4510
4513
  {
4511
4514
  x: nodeCx,
4512
4515
  y: nodeCy,
4513
- text: chunkQVQTDWB7_js.truncate(node.text, 20),
4516
+ text: chunkKA7ST7IH_js.truncate(node.text, 20),
4514
4517
  fill: "white",
4515
4518
  fontSize,
4516
4519
  className: "pointer-events-none"
@@ -4551,8 +4554,8 @@ function SmartArtRendererImpl({
4551
4554
  }
4552
4555
  );
4553
4556
  }
4554
- const palette = chunkQVQTDWB7_js.resolvePalette(element);
4555
- const style = chunkQVQTDWB7_js.resolveStyle(element);
4557
+ const palette = chunkKA7ST7IH_js.resolvePalette(element);
4558
+ const style = chunkKA7ST7IH_js.resolveStyle(element);
4556
4559
  const a11y = chunkVSNXVKJI_js.buildSmartArtA11y(smartArtData);
4557
4560
  const nodeLabels = new Map(a11y.nodes.map((n) => [n.id, n.label]));
4558
4561
  const editable = canEdit && Boolean(onUpdateElement);
@@ -4565,7 +4568,7 @@ function SmartArtRendererImpl({
4565
4568
  const reflowed = chunkVSNXVKJI_js.rebuildDrawingShapesIfCleared(
4566
4569
  updated,
4567
4570
  smartArtData.layout,
4568
- chunkQVQTDWB7_js.resolveSmartArtDataPalette(updated),
4571
+ chunkKA7ST7IH_js.resolveSmartArtDataPalette(updated),
4569
4572
  style,
4570
4573
  element.id,
4571
4574
  box
@@ -4582,7 +4585,7 @@ function SmartArtRendererImpl({
4582
4585
  const reflowed = chunkVSNXVKJI_js.rebuildDrawingShapesIfCleared(
4583
4586
  next,
4584
4587
  smartArtData.layout,
4585
- chunkQVQTDWB7_js.resolveSmartArtDataPalette(next),
4588
+ chunkKA7ST7IH_js.resolveSmartArtDataPalette(next),
4586
4589
  style,
4587
4590
  element.id,
4588
4591
  box
@@ -4605,7 +4608,7 @@ function SmartArtRendererImpl({
4605
4608
  );
4606
4609
  } else {
4607
4610
  const namedLayout = smartArtData.layout;
4608
- const layoutType = namedLayout ? chunkQVQTDWB7_js.layoutToCategory(namedLayout) : (smartArtData.resolvedLayoutType ?? smartArtData.layoutType ?? "list").toLowerCase();
4611
+ const layoutType = namedLayout ? chunkKA7ST7IH_js.layoutToCategory(namedLayout) : (smartArtData.resolvedLayoutType ?? smartArtData.layoutType ?? "list").toLowerCase();
4609
4612
  content = renderLayout(layoutType, element, nodes, palette, style, nodeLabels);
4610
4613
  }
4611
4614
  const body = editable ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -4619,7 +4622,7 @@ function SmartArtRendererImpl({
4619
4622
  children: content
4620
4623
  }
4621
4624
  ) : content;
4622
- return chunkQVQTDWB7_js.wrapChrome(chrome, body, className, { role: a11y.role, label: a11y.label });
4625
+ return chunkKA7ST7IH_js.wrapChrome(chrome, body, className, { role: a11y.role, label: a11y.label });
4623
4626
  }
4624
4627
  function renderLayout(layoutType, element, nodes, palette, style, nodeLabels) {
4625
4628
  if (layoutType.includes("hierarchy") || layoutType.includes("org")) {
@@ -4683,34 +4686,34 @@ function renderLayout(layoutType, element, nodes, palette, style, nodeLabels) {
4683
4686
  return /* @__PURE__ */ jsxRuntime.jsx(BendingProcessRenderer, { element, nodes, palette, style });
4684
4687
  }
4685
4688
  if (layoutType.includes("stepdown")) {
4686
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkQVQTDWB7_js.renderStepDownProcess(element, nodes, palette, style) });
4689
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkKA7ST7IH_js.renderStepDownProcess(element, nodes, palette, style) });
4687
4690
  }
4688
4691
  if (layoutType.includes("alternatingflow") || layoutType.includes("alternating")) {
4689
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkQVQTDWB7_js.renderAlternatingFlow(element, nodes, palette, style) });
4692
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkKA7ST7IH_js.renderAlternatingFlow(element, nodes, palette, style) });
4690
4693
  }
4691
4694
  if (layoutType.includes("descending")) {
4692
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkQVQTDWB7_js.renderDescendingProcess(element, nodes, palette, style) });
4695
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkKA7ST7IH_js.renderDescendingProcess(element, nodes, palette, style) });
4693
4696
  }
4694
4697
  if (layoutType.includes("pictureaccent")) {
4695
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkQVQTDWB7_js.renderPictureAccentList(element, nodes, palette, style) });
4698
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkKA7ST7IH_js.renderPictureAccentList(element, nodes, palette, style) });
4696
4699
  }
4697
4700
  if (layoutType.includes("verticalblock")) {
4698
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkQVQTDWB7_js.renderVerticalBlockList(element, nodes, palette, style) });
4701
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkKA7ST7IH_js.renderVerticalBlockList(element, nodes, palette, style) });
4699
4702
  }
4700
4703
  if (layoutType.includes("grouped")) {
4701
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkQVQTDWB7_js.renderGroupedList(element, nodes, palette, style) });
4704
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkKA7ST7IH_js.renderGroupedList(element, nodes, palette, style) });
4702
4705
  }
4703
4706
  if (layoutType.includes("pyramidlist")) {
4704
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkQVQTDWB7_js.renderPyramidList(element, nodes, palette, style) });
4707
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkKA7ST7IH_js.renderPyramidList(element, nodes, palette, style) });
4705
4708
  }
4706
4709
  if (layoutType.includes("horizontalpicture")) {
4707
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkQVQTDWB7_js.renderHorizontalPictureList(element, nodes, palette, style) });
4710
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkKA7ST7IH_js.renderHorizontalPictureList(element, nodes, palette, style) });
4708
4711
  }
4709
4712
  if (layoutType.includes("accentprocess")) {
4710
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkQVQTDWB7_js.renderAccentProcess(element, nodes, palette, style) });
4713
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkKA7ST7IH_js.renderAccentProcess(element, nodes, palette, style) });
4711
4714
  }
4712
4715
  if (layoutType.includes("verticalchevron")) {
4713
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkQVQTDWB7_js.renderVerticalChevronList(element, nodes, palette, style) });
4716
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: chunkKA7ST7IH_js.renderVerticalChevronList(element, nodes, palette, style) });
4714
4717
  }
4715
4718
  return /* @__PURE__ */ jsxRuntime.jsx(
4716
4719
  ListRenderer,
@@ -4809,8 +4812,8 @@ function SmartArt3DRenderer({
4809
4812
  if (nodes.length === 0) {
4810
4813
  return null;
4811
4814
  }
4812
- const palette = chunkQVQTDWB7_js.resolvePalette(element);
4813
- const style = chunkQVQTDWB7_js.resolveStyle(element);
4815
+ const palette = chunkKA7ST7IH_js.resolvePalette(element);
4816
+ const style = chunkKA7ST7IH_js.resolveStyle(element);
4814
4817
  const layoutResult = chunkVSNXVKJI_js.computeSmartArtLayout(
4815
4818
  nodes,
4816
4819
  { width: element.width, height: element.height },
@@ -4930,13 +4933,13 @@ function getSegmentTspanProps(segment, element, fallbackColor) {
4930
4933
  if (s.strikethrough) {
4931
4934
  decos.push("line-through");
4932
4935
  }
4933
- const fill = s.hyperlink ? chunkVSNXVKJI_js.normalizeHexColor(s.color || element.textStyle?.color, chunkQVQTDWB7_js.HYPERLINK_COLOR) : chunkVSNXVKJI_js.normalizeHexColor(s.color || element.textStyle?.color, fallbackColor);
4936
+ const fill = s.hyperlink ? chunkVSNXVKJI_js.normalizeHexColor(s.color || element.textStyle?.color, chunkKA7ST7IH_js.HYPERLINK_COLOR) : chunkVSNXVKJI_js.normalizeHexColor(s.color || element.textStyle?.color, fallbackColor);
4934
4937
  return {
4935
4938
  fill,
4936
- fontSize: s.fontSize ?? element.textStyle?.fontSize ?? chunkQVQTDWB7_js.DEFAULT_TEXT_FONT_SIZE,
4939
+ fontSize: s.fontSize ?? element.textStyle?.fontSize ?? chunkKA7ST7IH_js.DEFAULT_TEXT_FONT_SIZE,
4937
4940
  fontWeight: s.bold ? 700 : 400,
4938
4941
  fontStyle: s.italic ? "italic" : void 0,
4939
- fontFamily: s.fontFamily || element.textStyle?.fontFamily ? chunkAD3EAEY6_js.getSubstituteFontFamily(s.fontFamily || element.textStyle?.fontFamily || "") : chunkQVQTDWB7_js.DEFAULT_FONT_FAMILY,
4942
+ fontFamily: s.fontFamily || element.textStyle?.fontFamily ? chunkAD3EAEY6_js.getSubstituteFontFamily(s.fontFamily || element.textStyle?.fontFamily || "") : chunkKA7ST7IH_js.DEFAULT_FONT_FAMILY,
4940
4943
  textDecoration: decos.length > 0 ? decos.join(" ") : void 0
4941
4944
  };
4942
4945
  }
@@ -4965,8 +4968,8 @@ function WarpedText({
4965
4968
  const warpAdj2 = textEl.textStyle?.textWarpAdj2;
4966
4969
  const align = textEl.textStyle?.align ?? "center";
4967
4970
  const { startOffset, textAnchor } = getAlignmentProps(align);
4968
- const baseFontSize = textEl.textStyle?.fontSize ?? chunkQVQTDWB7_js.DEFAULT_TEXT_FONT_SIZE;
4969
- const baseFontFamily = textEl.textStyle?.fontFamily ? chunkAD3EAEY6_js.getSubstituteFontFamily(textEl.textStyle.fontFamily) : chunkQVQTDWB7_js.DEFAULT_FONT_FAMILY;
4971
+ const baseFontSize = textEl.textStyle?.fontSize ?? chunkKA7ST7IH_js.DEFAULT_TEXT_FONT_SIZE;
4972
+ const baseFontFamily = textEl.textStyle?.fontFamily ? chunkAD3EAEY6_js.getSubstituteFontFamily(textEl.textStyle.fontFamily) : chunkKA7ST7IH_js.DEFAULT_FONT_FAMILY;
4970
4973
  const baseFill = chunkVSNXVKJI_js.normalizeHexColor(textEl.textStyle?.color, fallbackColor);
4971
4974
  return /* @__PURE__ */ jsxRuntime.jsxs(
4972
4975
  "svg",
@@ -5095,7 +5098,7 @@ function renderTextElementBody(options) {
5095
5098
  const useSvgWarp = chunkVSNXVKJI_js.shouldUseSvgWarp(
5096
5099
  chunkAD3EAEY6_js.hasTextProperties(el) ? el.textStyle?.textWarpPreset : void 0
5097
5100
  );
5098
- const scene3dStyle = chunkAD3EAEY6_js.hasTextProperties(el) ? chunkQVQTDWB7_js.buildTextBody3DSceneStyle(el.textStyle) : void 0;
5101
+ const scene3dStyle = chunkAD3EAEY6_js.hasTextProperties(el) ? chunkKA7ST7IH_js.buildTextBody3DSceneStyle(el.textStyle) : void 0;
5099
5102
  const composedTransform = [chunkVSNXVKJI_js.getTextCompensationTransform(el), scene3dStyle?.transform].filter(Boolean).join(" ") || void 0;
5100
5103
  const transformStyle = {
5101
5104
  transform: composedTransform,
@@ -5112,18 +5115,18 @@ function renderTextElementBody(options) {
5112
5115
  shouldRenderText && (useSvgWarp ? /* @__PURE__ */ jsxRuntime.jsx(
5113
5116
  "div",
5114
5117
  {
5115
- className: chunkQVQTDWB7_js.cn(
5118
+ className: chunkKA7ST7IH_js.cn(
5116
5119
  "relative z-10 w-full h-full",
5117
5120
  onHyperlinkClick ? "" : "pointer-events-none"
5118
5121
  ),
5119
- style: { ...chunkQVQTDWB7_js.getTextLayoutStyle(el), ...transformStyle },
5122
+ style: { ...chunkKA7ST7IH_js.getTextLayoutStyle(el), ...transformStyle },
5120
5123
  children: /* @__PURE__ */ jsxRuntime.jsx(
5121
5124
  WarpedText,
5122
5125
  {
5123
5126
  element: el,
5124
5127
  width: el.width,
5125
5128
  height: el.height,
5126
- fallbackColor: chunkQVQTDWB7_js.DEFAULT_TEXT_COLOR,
5129
+ fallbackColor: chunkKA7ST7IH_js.DEFAULT_TEXT_COLOR,
5127
5130
  findHighlights: findHl,
5128
5131
  fieldContext
5129
5132
  }
@@ -5132,19 +5135,19 @@ function renderTextElementBody(options) {
5132
5135
  ) : /* @__PURE__ */ jsxRuntime.jsx(
5133
5136
  "div",
5134
5137
  {
5135
- className: chunkQVQTDWB7_js.cn(
5138
+ className: chunkKA7ST7IH_js.cn(
5136
5139
  "relative z-10 w-full h-full whitespace-pre-wrap break-words leading-[1.3]",
5137
5140
  onHyperlinkClick ? "" : "pointer-events-none"
5138
5141
  ),
5139
5142
  style: {
5140
- ...chunkQVQTDWB7_js.getTextLayoutStyle(el),
5143
+ ...chunkKA7ST7IH_js.getTextLayoutStyle(el),
5141
5144
  ...txtS,
5142
- ...chunkQVQTDWB7_js.getTextWarpStyle(txtSE),
5145
+ ...chunkKA7ST7IH_js.getTextWarpStyle(txtSE),
5143
5146
  ...transformStyle
5144
5147
  },
5145
- children: chunkQVQTDWB7_js.renderTextSegments(
5148
+ children: chunkKA7ST7IH_js.renderTextSegments(
5146
5149
  el,
5147
- chunkQVQTDWB7_js.DEFAULT_TEXT_COLOR,
5150
+ chunkKA7ST7IH_js.DEFAULT_TEXT_COLOR,
5148
5151
  void 0,
5149
5152
  findHl,
5150
5153
  onHyperlinkClick,
@@ -5444,7 +5447,7 @@ function renderBody(options) {
5444
5447
  textDirection: txtSE?.textDirection,
5445
5448
  textStyle: txtS,
5446
5449
  textStyleRaw: txtSE,
5447
- layoutStyle: chunkQVQTDWB7_js.getTextLayoutStyle(el),
5450
+ layoutStyle: chunkKA7ST7IH_js.getTextLayoutStyle(el),
5448
5451
  element: el,
5449
5452
  onCommit,
5450
5453
  onCancel,
@@ -5455,7 +5458,7 @@ function renderBody(options) {
5455
5458
  ] });
5456
5459
  }
5457
5460
  if (el.type === "table") {
5458
- return chunkQVQTDWB7_js.renderTableElement(el, txtS, {
5461
+ return chunkKA7ST7IH_js.renderTableElement(el, txtS, {
5459
5462
  editable: isSel,
5460
5463
  selectedCell: isSel ? tableSt : null,
5461
5464
  onSelectCell: onCellSel,
@@ -5486,7 +5489,7 @@ function renderBody(options) {
5486
5489
  );
5487
5490
  }
5488
5491
  if (el.type === "media") {
5489
- return chunkQVQTDWB7_js.renderMediaElement(el, media, {
5492
+ return chunkKA7ST7IH_js.renderMediaElement(el, media, {
5490
5493
  autoPlay: isPresentationPassive,
5491
5494
  fullScreen: isPresentationPassive && Boolean(el.fullScreen),
5492
5495
  isPresentationMode: isPresentationPassive,
@@ -5511,7 +5514,7 @@ function renderBody(options) {
5511
5514
  }
5512
5515
  return renderGroup(el.children);
5513
5516
  }
5514
- if (chunkQVQTDWB7_js.shouldRenderFallbackLabel(el, isTxtEl)) {
5517
+ if (chunkKA7ST7IH_js.shouldRenderFallbackLabel(el, isTxtEl)) {
5515
5518
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center text-[11px] text-white/80 pointer-events-none", children: chunkVSNXVKJI_js.getElementLabel(el) });
5516
5519
  }
5517
5520
  return renderTextElementBody(options);
@@ -5530,13 +5533,13 @@ function StaticElementRenderer({
5530
5533
  }) {
5531
5534
  const style = chunkAD3EAEY6_js.hasShapeProperties(element) ? element.shapeStyle : void 0;
5532
5535
  const hasFill = style?.fillColor !== void 0 && style.fillColor !== "transparent" || Boolean(chunkVSNXVKJI_js.buildCssGradientFromShapeStyle(style) || style?.fillGradient) || style?.fillMode === "pattern" && Boolean(style.fillPatternPreset);
5533
- const fill = chunkVSNXVKJI_js.normalizeHexColor(style?.fillColor, chunkQVQTDWB7_js.DEFAULT_FILL_COLOR);
5536
+ const fill = chunkVSNXVKJI_js.normalizeHexColor(style?.fillColor, chunkKA7ST7IH_js.DEFAULT_FILL_COLOR);
5534
5537
  const strokeWidth = Math.max(0, style?.strokeWidth || 0);
5535
- const stroke = chunkVSNXVKJI_js.normalizeHexColor(style?.strokeColor, chunkQVQTDWB7_js.DEFAULT_STROKE_COLOR);
5536
- const visualStyle = chunkQVQTDWB7_js.getShapeVisualStyle(element, hasFill, fill, strokeWidth, stroke);
5537
- const textStyle = chunkQVQTDWB7_js.getTextStyleForElement(
5538
+ const stroke = chunkVSNXVKJI_js.normalizeHexColor(style?.strokeColor, chunkKA7ST7IH_js.DEFAULT_STROKE_COLOR);
5539
+ const visualStyle = chunkKA7ST7IH_js.getShapeVisualStyle(element, hasFill, fill, strokeWidth, stroke);
5540
+ const textStyle = chunkKA7ST7IH_js.getTextStyleForElement(
5538
5541
  element,
5539
- element.type === "shape" && hasFill ? "#ffffff" : chunkQVQTDWB7_js.DEFAULT_TEXT_COLOR
5542
+ element.type === "shape" && hasFill ? "#ffffff" : chunkKA7ST7IH_js.DEFAULT_TEXT_COLOR
5540
5543
  );
5541
5544
  const isImage = element.type === "picture" || element.type === "image";
5542
5545
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -5573,8 +5576,8 @@ function StaticElementRenderer({
5573
5576
  spellCheck: false,
5574
5577
  txtSE: chunkAD3EAEY6_js.hasTextProperties(element) ? element.textStyle : void 0,
5575
5578
  txtS: textStyle,
5576
- vecShape: chunkQVQTDWB7_js.renderVectorShape(element, hasFill, fill, strokeWidth, stroke),
5577
- imgStyle: chunkQVQTDWB7_js.getImageRenderStyle(element),
5579
+ vecShape: chunkKA7ST7IH_js.renderVectorShape(element, hasFill, fill, strokeWidth, stroke),
5580
+ imgStyle: chunkKA7ST7IH_js.getImageRenderStyle(element),
5578
5581
  imgFilter: chunkVSNXVKJI_js.getImageEffectsFilter(element),
5579
5582
  imgOpacity: chunkVSNXVKJI_js.getImageEffectsOpacity(element),
5580
5583
  imgAlt: "",
@@ -5604,12 +5607,12 @@ function SlideThumbnailImpl({
5604
5607
  }) {
5605
5608
  const safeCanvasWidth = Math.max(canvasSize.width, 1);
5606
5609
  const safeCanvasHeight = Math.max(canvasSize.height, 1);
5607
- const scale = chunkQVQTDWB7_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeCanvasWidth;
5610
+ const scale = chunkKA7ST7IH_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeCanvasWidth;
5608
5611
  const previewHeight = Math.max(56, Math.round(safeCanvasHeight * scale));
5609
5612
  const previewElements = [...templateElements, ...slide.elements].slice(0, 60);
5610
5613
  const { t } = reactI18next.useTranslation();
5611
5614
  const transitionLabel = slide.transition ? (() => {
5612
- const opt = chunkQVQTDWB7_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
5615
+ const opt = chunkKA7ST7IH_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
5613
5616
  return opt ? t(opt.i18nKey) : slide.transition.type;
5614
5617
  })() : void 0;
5615
5618
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -6302,7 +6305,7 @@ function SectionHeader({
6302
6305
  /* @__PURE__ */ jsxRuntime.jsx(
6303
6306
  lu.LuChevronDown,
6304
6307
  {
6305
- className: chunkQVQTDWB7_js.cn(
6308
+ className: chunkKA7ST7IH_js.cn(
6306
6309
  "h-3 w-3 flex-shrink-0 transition-transform",
6307
6310
  isCollapsed ? "-rotate-90" : "rotate-0"
6308
6311
  )
@@ -6404,7 +6407,7 @@ function LazyThumbnailInner({
6404
6407
  className: "relative w-full overflow-hidden rounded border border-border bg-muted/30 animate-pulse",
6405
6408
  style: {
6406
6409
  height: previewHeight,
6407
- minWidth: chunkQVQTDWB7_js.SLIDE_NAV_THUMBNAIL_WIDTH
6410
+ minWidth: chunkKA7ST7IH_js.SLIDE_NAV_THUMBNAIL_WIDTH
6408
6411
  }
6409
6412
  }
6410
6413
  ) });
@@ -6441,7 +6444,7 @@ function buildFlatPaneItems(sectionGroups, showSectionHeaders, collapsedSections
6441
6444
  function estimateSlideItemHeight(canvasWidth, canvasHeight) {
6442
6445
  const safeW = Math.max(canvasWidth, 1);
6443
6446
  const safeH = Math.max(canvasHeight, 1);
6444
- const scale = chunkQVQTDWB7_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeW;
6447
+ const scale = chunkKA7ST7IH_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeW;
6445
6448
  const previewHeight = Math.max(56, Math.round(safeH * scale));
6446
6449
  return previewHeight + 30;
6447
6450
  }
@@ -6478,7 +6481,7 @@ function SlideItemInner({
6478
6481
  );
6479
6482
  const safeCanvasWidth = Math.max(canvasSize.width, 1);
6480
6483
  const safeCanvasHeight = Math.max(canvasSize.height, 1);
6481
- const scale = chunkQVQTDWB7_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeCanvasWidth;
6484
+ const scale = chunkKA7ST7IH_js.SLIDE_NAV_THUMBNAIL_WIDTH / safeCanvasWidth;
6482
6485
  const previewHeight = Math.max(56, Math.round(safeCanvasHeight * scale));
6483
6486
  return /* @__PURE__ */ jsxRuntime.jsxs(
6484
6487
  "button",
@@ -6487,7 +6490,7 @@ function SlideItemInner({
6487
6490
  ref: slideRef,
6488
6491
  "aria-label": `Go to slide ${slideIndex + 1}`,
6489
6492
  "aria-current": isActive ? "true" : void 0,
6490
- className: chunkQVQTDWB7_js.cn(
6493
+ className: chunkKA7ST7IH_js.cn(
6491
6494
  "group relative flex w-full items-center gap-1 cursor-pointer border-0 bg-transparent py-0.5 px-1 text-left transition-all",
6492
6495
  isActive && "bg-accent/40 before:absolute before:left-0 before:top-1 before:bottom-1 before:w-[3px] before:bg-primary before:rounded-r",
6493
6496
  isHidden && "opacity-50"
@@ -6503,7 +6506,7 @@ function SlideItemInner({
6503
6506
  /* @__PURE__ */ jsxRuntime.jsx(
6504
6507
  "span",
6505
6508
  {
6506
- className: chunkQVQTDWB7_js.cn(
6509
+ className: chunkKA7ST7IH_js.cn(
6507
6510
  "text-[10px] tabular-nums text-right select-none w-full",
6508
6511
  isActive ? "text-primary font-medium" : "text-muted-foreground"
6509
6512
  ),
@@ -6523,7 +6526,7 @@ function SlideItemInner({
6523
6526
  /* @__PURE__ */ jsxRuntime.jsxs(
6524
6527
  "div",
6525
6528
  {
6526
- className: chunkQVQTDWB7_js.cn(
6529
+ className: chunkKA7ST7IH_js.cn(
6527
6530
  "relative flex-1 overflow-hidden border transition-colors bg-white",
6528
6531
  isActive ? "border-primary/60" : "border-transparent group-hover:border-border/40"
6529
6532
  ),
@@ -6728,7 +6731,7 @@ function SlidesPaneSidebar({
6728
6731
  [sectionGroups, showSectionHeaders, collapsedSections]
6729
6732
  );
6730
6733
  const shouldVirtualize = slides.length >= VIRTUALIZATION_THRESHOLD;
6731
- const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunkQVQTDWB7_js.useVirtualizedSlides({
6734
+ const { startIndex, endIndex, totalHeight, offsetY, scrollContainerRef, scrollToIndex } = chunkKA7ST7IH_js.useVirtualizedSlides({
6732
6735
  totalItems: shouldVirtualize ? flatItems.length : 0,
6733
6736
  itemHeight: estimatedItemHeight
6734
6737
  });
@@ -6958,7 +6961,7 @@ function HandoutMasterPanel({
6958
6961
  {
6959
6962
  type: "button",
6960
6963
  "aria-pressed": slidesPerPage === count,
6961
- className: chunkQVQTDWB7_js.cn(
6964
+ className: chunkKA7ST7IH_js.cn(
6962
6965
  "px-2 py-1.5 rounded text-[11px] font-medium transition-colors",
6963
6966
  slidesPerPage === count ? "bg-primary text-white" : "bg-accent/50 text-muted-foreground hover:bg-accent/70 hover:text-foreground"
6964
6967
  ),
@@ -7086,7 +7089,7 @@ function SlideMastersList({
7086
7089
  "div",
7087
7090
  {
7088
7091
  ref: isMasterActive ? activeRef : void 0,
7089
- className: chunkQVQTDWB7_js.cn(
7092
+ className: chunkKA7ST7IH_js.cn(
7090
7093
  "group relative cursor-pointer rounded-lg border-2 p-1 transition-all",
7091
7094
  isMasterActive ? "border-amber-500 bg-amber-500/10" : "border-border bg-background/40 hover:border-border"
7092
7095
  ),
@@ -7103,7 +7106,7 @@ function SlideMastersList({
7103
7106
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 px-1", children: /* @__PURE__ */ jsxRuntime.jsx(
7104
7107
  "span",
7105
7108
  {
7106
- className: chunkQVQTDWB7_js.cn(
7109
+ className: chunkKA7ST7IH_js.cn(
7107
7110
  "text-[10px] font-medium",
7108
7111
  isMasterActive ? "text-amber-400" : "text-muted-foreground"
7109
7112
  ),
@@ -7119,7 +7122,7 @@ function SlideMastersList({
7119
7122
  "div",
7120
7123
  {
7121
7124
  ref: isLayoutActive ? activeRef : void 0,
7122
- className: chunkQVQTDWB7_js.cn(
7125
+ className: chunkKA7ST7IH_js.cn(
7123
7126
  "group relative cursor-pointer rounded-md border-2 p-0.5 transition-all",
7124
7127
  isLayoutActive ? "border-primary bg-primary/10" : "border-border bg-background/40 hover:border-border"
7125
7128
  ),
@@ -7136,7 +7139,7 @@ function SlideMastersList({
7136
7139
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 px-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
7137
7140
  "span",
7138
7141
  {
7139
- className: chunkQVQTDWB7_js.cn(
7142
+ className: chunkKA7ST7IH_js.cn(
7140
7143
  "text-[9px]",
7141
7144
  isLayoutActive ? "text-primary" : "text-muted-foreground"
7142
7145
  ),
@@ -7220,7 +7223,7 @@ function MasterViewSidebar({
7220
7223
  type: "button",
7221
7224
  role: "tab",
7222
7225
  "aria-selected": masterViewTab === tab.key,
7223
- className: chunkQVQTDWB7_js.cn(
7226
+ className: chunkKA7ST7IH_js.cn(
7224
7227
  "flex-1 px-1 py-1.5 text-[10px] font-medium transition-colors border-b-2",
7225
7228
  masterViewTab === tab.key ? "border-amber-500 text-amber-400" : "border-transparent text-muted-foreground hover:text-foreground"
7226
7229
  ),
@@ -7692,7 +7695,7 @@ function SectionBlock({
7692
7695
  /* @__PURE__ */ jsxRuntime.jsx(
7693
7696
  lu.LuChevronDown,
7694
7697
  {
7695
- className: chunkQVQTDWB7_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
7698
+ className: chunkKA7ST7IH_js.cn("h-3 w-3 transition-transform", collapsed ? "-rotate-90" : "rotate-0")
7696
7699
  }
7697
7700
  ),
7698
7701
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-left", children: section.label }),
@@ -7739,7 +7742,7 @@ function SlideCardImpl({
7739
7742
  return /* @__PURE__ */ jsxRuntime.jsxs(
7740
7743
  "div",
7741
7744
  {
7742
- className: chunkQVQTDWB7_js.cn(
7745
+ className: chunkKA7ST7IH_js.cn(
7743
7746
  "group relative cursor-pointer rounded-lg border-2 p-1 transition-all",
7744
7747
  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",
7745
7748
  slide.hidden && "opacity-40"
@@ -7758,7 +7761,7 @@ function SlideCardImpl({
7758
7761
  /* @__PURE__ */ jsxRuntime.jsx(
7759
7762
  "span",
7760
7763
  {
7761
- className: chunkQVQTDWB7_js.cn(
7764
+ className: chunkKA7ST7IH_js.cn(
7762
7765
  "text-[11px] font-medium",
7763
7766
  isSelected ? "text-primary" : isActive ? "text-primary/70" : "text-muted-foreground"
7764
7767
  ),
@@ -9493,7 +9496,7 @@ var SlideNotesPanel = ({
9493
9496
  });
9494
9497
  const hasNotes = draft.trim().length > 0;
9495
9498
  const slideLabel = activeSlide ? t("pptx.notes.slideN", { n: activeSlide.slideNumber }) : t("pptx.notes.noSlide");
9496
- const { dragY, handlers: dragHandlers } = chunkQVQTDWB7_js.useSheetDismissDrag(onToggle);
9499
+ const { dragY, handlers: dragHandlers } = chunkKA7ST7IH_js.useSheetDismissDrag(onToggle);
9497
9500
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9498
9501
  isExpanded && /* @__PURE__ */ jsxRuntime.jsx(
9499
9502
  "button",
@@ -9507,7 +9510,7 @@ var SlideNotesPanel = ({
9507
9510
  /* @__PURE__ */ jsxRuntime.jsxs(
9508
9511
  "div",
9509
9512
  {
9510
- className: chunkQVQTDWB7_js.cn(
9513
+ className: chunkKA7ST7IH_js.cn(
9511
9514
  "flex flex-col border-t border-border/60 bg-background select-none",
9512
9515
  // On mobile, hide the entire notes strip when collapsed: the
9513
9516
  // MobileBottomBar's Notes button is the entry point instead.
@@ -9858,7 +9861,7 @@ function SlideDiffRow({
9858
9861
  return /* @__PURE__ */ jsxRuntime.jsxs(
9859
9862
  "div",
9860
9863
  {
9861
- className: chunkQVQTDWB7_js.cn(
9864
+ className: chunkKA7ST7IH_js.cn(
9862
9865
  "rounded-lg border transition-colors",
9863
9866
  isResolved ? "border-border/60 bg-card/40 opacity-60" : "border-border bg-background/70"
9864
9867
  ),
@@ -9872,7 +9875,7 @@ function SlideDiffRow({
9872
9875
  children: [
9873
9876
  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" }),
9874
9877
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-foreground", children: t("pptx.compare.slideNumber", { number: slideNumber }) }),
9875
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkQVQTDWB7_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
9878
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkKA7ST7IH_js.cn("rounded-full px-2 py-0.5 text-[10px] font-medium", statusColor), children: statusLabel }),
9876
9879
  diff.changes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-muted-foreground", children: [
9877
9880
  diff.changes.length,
9878
9881
  " ",
@@ -9882,7 +9885,7 @@ function SlideDiffRow({
9882
9885
  isResolved && /* @__PURE__ */ jsxRuntime.jsx(
9883
9886
  "span",
9884
9887
  {
9885
- className: chunkQVQTDWB7_js.cn(
9888
+ className: chunkKA7ST7IH_js.cn(
9886
9889
  "text-[10px] font-medium",
9887
9890
  accepted ? "text-green-400" : "text-muted-foreground"
9888
9891
  ),
@@ -9910,7 +9913,7 @@ function SlideDiffRow({
9910
9913
  /* @__PURE__ */ jsxRuntime.jsx(
9911
9914
  "div",
9912
9915
  {
9913
- className: chunkQVQTDWB7_js.cn(
9916
+ className: chunkKA7ST7IH_js.cn(
9914
9917
  "rounded border overflow-hidden",
9915
9918
  diff.status === "added" ? "border-green-700/60" : diff.status === "changed" ? "border-amber-700/60" : "border-border"
9916
9919
  ),
@@ -10631,7 +10634,7 @@ function DocumentPropertiesDialog({
10631
10634
  const handleClose = React14.useCallback(() => {
10632
10635
  onClose();
10633
10636
  }, [onClose]);
10634
- const { panelStyle, handlers: dragHandlers } = chunkQVQTDWB7_js.useModalDismissDrag(handleClose);
10637
+ const { panelStyle, handlers: dragHandlers } = chunkKA7ST7IH_js.useModalDismissDrag(handleClose);
10635
10638
  if (!isOpen) {
10636
10639
  return null;
10637
10640
  }
@@ -12250,7 +12253,7 @@ function SelectionPane({
12250
12253
  setDragIndex(null);
12251
12254
  setDragOverIndex(null);
12252
12255
  },
12253
- className: chunkQVQTDWB7_js.cn(
12256
+ className: chunkKA7ST7IH_js.cn(
12254
12257
  "flex items-center gap-1.5 px-2 py-1 text-xs cursor-pointer transition-colors",
12255
12258
  isSelected ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground",
12256
12259
  dragOverIndex === realIndex ? "border-t-2 border-primary" : ""
@@ -12307,7 +12310,7 @@ function RibbonGroup({
12307
12310
  return /* @__PURE__ */ jsxRuntime.jsxs(
12308
12311
  "section",
12309
12312
  {
12310
- className: chunkQVQTDWB7_js.cn(
12313
+ className: chunkKA7ST7IH_js.cn(
12311
12314
  "relative flex min-h-[78px] shrink-0 items-start gap-1 border-r border-border/60 px-2 pb-4 pt-1 last:border-r-0",
12312
12315
  className
12313
12316
  ),
@@ -12335,7 +12338,7 @@ function RibbonCommand({
12335
12338
  onClick,
12336
12339
  disabled,
12337
12340
  title: title ?? label,
12338
- className: chunkQVQTDWB7_js.cn(
12341
+ className: chunkKA7ST7IH_js.cn(
12339
12342
  "inline-flex rounded-sm text-foreground transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-35",
12340
12343
  active && "bg-primary/15 text-primary ring-1 ring-primary/35",
12341
12344
  compact ? "h-[26px] min-w-[88px] items-center gap-1.5 px-1.5 text-left text-[10px] leading-3" : "h-[58px] min-w-[54px] max-w-[72px] flex-col items-center justify-start gap-0.5 px-1 py-1 text-center text-[9px] leading-[11px]"
@@ -12344,7 +12347,7 @@ function RibbonCommand({
12344
12347
  /* @__PURE__ */ jsxRuntime.jsx(
12345
12348
  "span",
12346
12349
  {
12347
- className: chunkQVQTDWB7_js.cn(
12350
+ className: chunkKA7ST7IH_js.cn(
12348
12351
  "grid shrink-0 place-items-center text-primary",
12349
12352
  compact ? "h-4 w-4 [&>svg]:h-4 [&>svg]:w-4" : "h-7 w-7 [&>svg]:h-6 [&>svg]:w-6"
12350
12353
  ),
@@ -12373,7 +12376,7 @@ function RibbonToggle({
12373
12376
  "label",
12374
12377
  {
12375
12378
  title,
12376
- className: chunkQVQTDWB7_js.cn(
12379
+ className: chunkKA7ST7IH_js.cn(
12377
12380
  "flex h-[19px] items-center gap-1 whitespace-nowrap rounded-sm px-1 text-[10px] text-foreground",
12378
12381
  checked && "bg-primary/15 text-primary"
12379
12382
  ),
@@ -12775,7 +12778,7 @@ function ArrangeSection(p) {
12775
12778
  disabled: !p.canEdit || p.canActivateFormatPainter === false && !p.formatPainterActive,
12776
12779
  "data-testid": "format-painter-toggle",
12777
12780
  "data-active": p.formatPainterActive ? "true" : "false",
12778
- className: chunkQVQTDWB7_js.cn(
12781
+ className: chunkKA7ST7IH_js.cn(
12779
12782
  pill,
12780
12783
  p.formatPainterActive ? "bg-amber-600 hover:bg-amber-500 text-amber-50" : ""
12781
12784
  ),
@@ -12888,7 +12891,7 @@ function DesignSection(p) {
12888
12891
  {
12889
12892
  onClick: p.onToggleThemeGallery,
12890
12893
  disabled: !p.canEdit,
12891
- className: chunkQVQTDWB7_js.cn(
12894
+ className: chunkKA7ST7IH_js.cn(
12892
12895
  pill,
12893
12896
  p.isThemeGalleryOpen ? "bg-primary hover:bg-primary/80 text-white" : ""
12894
12897
  ),
@@ -12904,7 +12907,7 @@ function DesignSection(p) {
12904
12907
  {
12905
12908
  onClick: p.onToggleThemeEditor,
12906
12909
  disabled: !p.canEdit,
12907
- className: chunkQVQTDWB7_js.cn(pill, p.isThemeEditorOpen ? "bg-primary hover:bg-primary/80 text-white" : ""),
12910
+ className: chunkKA7ST7IH_js.cn(pill, p.isThemeEditorOpen ? "bg-primary hover:bg-primary/80 text-white" : ""),
12908
12911
  title: t("pptx.ribbon.editThemeTitle"),
12909
12912
  children: [
12910
12913
  /* @__PURE__ */ jsxRuntime.jsx(lu.LuPencil, { className: ics }),
@@ -12929,7 +12932,7 @@ function DesignSection(p) {
12929
12932
  "button",
12930
12933
  {
12931
12934
  onClick: p.onToggleInspector,
12932
- className: chunkQVQTDWB7_js.cn(
12935
+ className: chunkKA7ST7IH_js.cn(
12933
12936
  pill,
12934
12937
  p.isInspectorPaneOpen ? "bg-primary hover:bg-primary/80 text-white" : ""
12935
12938
  ),
@@ -12971,7 +12974,7 @@ function TransitionsSection(p) {
12971
12974
  {
12972
12975
  type: "button",
12973
12976
  onClick: () => setSelected(preset.value),
12974
- className: chunkQVQTDWB7_js.cn(
12977
+ className: chunkKA7ST7IH_js.cn(
12975
12978
  "flex-shrink-0 px-2 py-1 max-md:min-h-[44px] rounded border text-[11px] leading-tight transition-colors",
12976
12979
  selected === preset.value ? "border-primary bg-primary/10 text-primary font-medium" : "border-border bg-muted hover:bg-accent text-foreground"
12977
12980
  ),
@@ -13056,7 +13059,7 @@ function TransitionsSection(p) {
13056
13059
  {
13057
13060
  type: "button",
13058
13061
  onClick: p.onToggleInspector,
13059
- className: chunkQVQTDWB7_js.cn(
13062
+ className: chunkKA7ST7IH_js.cn(
13060
13063
  pill,
13061
13064
  p.isInspectorPaneOpen ? "bg-primary hover:bg-primary/80 text-white" : ""
13062
13065
  ),
@@ -13077,7 +13080,7 @@ function DrawSection(p) {
13077
13080
  {
13078
13081
  type: "button",
13079
13082
  onClick: () => p.onSetActiveTool(tool.id),
13080
- className: chunkQVQTDWB7_js.cn(
13083
+ className: chunkKA7ST7IH_js.cn(
13081
13084
  i < a.length - 1 ? gB : gL,
13082
13085
  p.activeTool === tool.id ? tool.ac ?? "bg-accent text-foreground" : ""
13083
13086
  ),
@@ -13161,7 +13164,7 @@ function AccountPage() {
13161
13164
  return void 0;
13162
13165
  });
13163
13166
  };
13164
- const version = "1.21.0" ;
13167
+ const version = "1.22.1" ;
13165
13168
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
13166
13169
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cardClass, children: [
13167
13170
  /* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -13201,7 +13204,7 @@ function AccountPage() {
13201
13204
  "aria-label": color,
13202
13205
  "aria-pressed": profile.avatarColor === color,
13203
13206
  onClick: () => updateProfile({ avatarColor: color }),
13204
- className: chunkQVQTDWB7_js.cn(
13207
+ className: chunkKA7ST7IH_js.cn(
13205
13208
  "size-7 rounded-full border-2 transition-transform",
13206
13209
  profile.avatarColor === color ? "border-foreground scale-110" : "border-transparent hover:scale-105"
13207
13210
  ),
@@ -13351,7 +13354,7 @@ function FileSection(p) {
13351
13354
  const [page, setPage] = React14.useState("home");
13352
13355
  const [query, setQuery] = React14.useState("");
13353
13356
  const [recent, setRecent] = React14.useState([]);
13354
- const { isHidden } = chunkQVQTDWB7_js.useToolbarVisibility(p.hiddenActions);
13357
+ const { isHidden } = chunkKA7ST7IH_js.useToolbarVisibility(p.hiddenActions);
13355
13358
  const exportHidden = isHidden("export");
13356
13359
  React14.useEffect(() => {
13357
13360
  void chunkVSNXVKJI_js.listBackstageRecentFiles().then(setRecent);
@@ -13682,7 +13685,7 @@ function SlidesGroup(p) {
13682
13685
  type: "button",
13683
13686
  onClick: handleNewSlide,
13684
13687
  disabled: !p.canEdit || p.layoutOptions.length === 0,
13685
- className: chunkQVQTDWB7_js.cn(
13688
+ className: chunkKA7ST7IH_js.cn(
13686
13689
  pill,
13687
13690
  "whitespace-nowrap",
13688
13691
  p.layoutOptions.length > 0 ? "rounded-r-none" : ""
@@ -13872,7 +13875,7 @@ function HomeSection(p) {
13872
13875
  setTimeout(() => setCutFeedback(false), 600);
13873
13876
  },
13874
13877
  disabled: !p.canEdit,
13875
- className: chunkQVQTDWB7_js.cn(gB, cutFeedback && "bg-green-600/20 text-green-400"),
13878
+ className: chunkKA7ST7IH_js.cn(gB, cutFeedback && "bg-green-600/20 text-green-400"),
13876
13879
  title: t("pptx.arrange.cut"),
13877
13880
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuScissors, { className: ic2 })
13878
13881
  }
@@ -13886,7 +13889,7 @@ function HomeSection(p) {
13886
13889
  setCopiedFeedback(true);
13887
13890
  setTimeout(() => setCopiedFeedback(false), 600);
13888
13891
  },
13889
- className: chunkQVQTDWB7_js.cn(gB, copiedFeedback && "bg-green-600/20 text-green-400"),
13892
+ className: chunkKA7ST7IH_js.cn(gB, copiedFeedback && "bg-green-600/20 text-green-400"),
13890
13893
  title: t("pptx.arrange.copy"),
13891
13894
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuCopy, { className: ic2 })
13892
13895
  }
@@ -13899,7 +13902,7 @@ function HomeSection(p) {
13899
13902
  disabled: !p.canEdit || p.canActivateFormatPainter === false && !p.formatPainterActive,
13900
13903
  "data-testid": "format-painter-toggle",
13901
13904
  "data-active": p.formatPainterActive ? "true" : "false",
13902
- className: chunkQVQTDWB7_js.cn(
13905
+ className: chunkKA7ST7IH_js.cn(
13903
13906
  gL,
13904
13907
  p.formatPainterActive ? "bg-amber-600 hover:bg-amber-500 text-amber-50" : ""
13905
13908
  ),
@@ -14074,7 +14077,7 @@ function InsertSection(p) {
14074
14077
  onChange: (e) => p.onSetNewShapeType(e.target.value),
14075
14078
  className: "bg-transparent py-1.5 pl-2 pr-1 outline-none text-xs",
14076
14079
  title: t("pptx.insert.shapeType"),
14077
- children: chunkQVQTDWB7_js.SHAPE_PRESETS.map((sp) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: sp.type, className: "bg-background", children: t(sp.i18nKey) }, sp.type))
14080
+ children: chunkKA7ST7IH_js.SHAPE_PRESETS.map((sp) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: sp.type, className: "bg-background", children: t(sp.i18nKey) }, sp.type))
14078
14081
  }
14079
14082
  ),
14080
14083
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -14085,7 +14088,7 @@ function InsertSection(p) {
14085
14088
  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",
14086
14089
  title: t("pptx.insert.addShape"),
14087
14090
  children: [
14088
- chunkQVQTDWB7_js.SHAPE_PRESETS.find((sp) => sp.type === p.newShapeType)?.icon || /* @__PURE__ */ jsxRuntime.jsx(lu.LuSquare, { className: ic2 }),
14091
+ chunkKA7ST7IH_js.SHAPE_PRESETS.find((sp) => sp.type === p.newShapeType)?.icon || /* @__PURE__ */ jsxRuntime.jsx(lu.LuSquare, { className: ic2 }),
14089
14092
  t("pptx.insert.shape")
14090
14093
  ]
14091
14094
  }
@@ -14568,7 +14571,7 @@ function ReviewSection(p) {
14568
14571
  }
14569
14572
  function SlideShowSection(p) {
14570
14573
  const { t } = reactI18next.useTranslation();
14571
- const { isHidden } = chunkQVQTDWB7_js.useToolbarVisibility(p.hiddenActions);
14574
+ const { isHidden } = chunkKA7ST7IH_js.useToolbarVisibility(p.hiddenActions);
14572
14575
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
14573
14576
  /* @__PURE__ */ jsxRuntime.jsxs(RibbonGroup, { label: t("pptx.slideShow.start", { defaultValue: "Start Slide Show" }), children: [
14574
14577
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -15268,6 +15271,7 @@ function TextSection(p) {
15268
15271
  {
15269
15272
  type: "button",
15270
15273
  "aria-label": c,
15274
+ "data-pptx-compact": true,
15271
15275
  className: `w-5 h-5 rounded-full border transition-transform hover:scale-125 ${currentColor?.toLowerCase() === c ? "border-primary ring-1 ring-primary" : "border-border"}`,
15272
15276
  style: { backgroundColor: c },
15273
15277
  onMouseDown: (e) => e.preventDefault(),
@@ -15325,6 +15329,7 @@ function TextSection(p) {
15325
15329
  {
15326
15330
  type: "button",
15327
15331
  "aria-label": c,
15332
+ "data-pptx-compact": true,
15328
15333
  className: `w-5 h-5 rounded-full border transition-transform hover:scale-125 ${currentHighlight?.toLowerCase() === c ? "border-primary ring-1 ring-primary" : "border-border"}`,
15329
15334
  style: { backgroundColor: c },
15330
15335
  onMouseDown: (e) => e.preventDefault(),
@@ -15635,11 +15640,14 @@ function ViewSection(p) {
15635
15640
  /* @__PURE__ */ jsxRuntime.jsx(
15636
15641
  RibbonCommand,
15637
15642
  {
15638
- label: t("pptx.view.templateEditing", { defaultValue: "Template Editing" }),
15643
+ label: t(p.editTemplateMode ? "pptx.ribbon.templatesOn" : "pptx.ribbon.templatesOff"),
15639
15644
  icon: /* @__PURE__ */ jsxRuntime.jsx(lu.LuRuler, {}),
15640
15645
  onClick: () => p.onSetEditTemplateMode(!p.editTemplateMode),
15641
15646
  active: p.editTemplateMode,
15642
- disabled: !p.canEdit
15647
+ disabled: !p.canEdit,
15648
+ title: t("pptx.view.templateEditingTooltip", {
15649
+ defaultValue: "Toggle template/master element editing"
15650
+ })
15643
15651
  }
15644
15652
  ),
15645
15653
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -15665,7 +15673,7 @@ function MobileSheet({
15665
15673
  headerRight
15666
15674
  }) {
15667
15675
  const sheetRef = React14.useRef(null);
15668
- const { dragY, dragging, handlers } = chunkQVQTDWB7_js.useSheetDismissDrag(onClose);
15676
+ const { dragY, dragging, handlers } = chunkKA7ST7IH_js.useSheetDismissDrag(onClose);
15669
15677
  useModalFocus(open, sheetRef, onClose);
15670
15678
  if (!open) {
15671
15679
  return null;
@@ -15689,7 +15697,7 @@ function MobileSheet({
15689
15697
  "aria-modal": "true",
15690
15698
  "aria-label": typeof title === "string" ? title : "Mobile panel",
15691
15699
  tabIndex: -1,
15692
- className: chunkQVQTDWB7_js.cn(
15700
+ className: chunkKA7ST7IH_js.cn(
15693
15701
  "relative bg-background border-t border-border rounded-t-2xl shadow-2xl flex flex-col overflow-hidden",
15694
15702
  "animate-in slide-in-from-bottom duration-200",
15695
15703
  className
@@ -15752,14 +15760,14 @@ function MobileMenuSheet(props) {
15752
15760
  const { t } = reactI18next.useTranslation();
15753
15761
  const { open, onClose } = props;
15754
15762
  const [active, setActive] = React14.useState("home");
15755
- const { isTabVisible } = chunkQVQTDWB7_js.useToolbarVisibility(props.hiddenActions);
15763
+ const { isTabVisible } = chunkKA7ST7IH_js.useToolbarVisibility(props.hiddenActions);
15756
15764
  return /* @__PURE__ */ jsxRuntime.jsx(MobileSheet, { open, onClose, autoHeight: true, title: t("pptx.mobileToolbar.menu"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
15757
15765
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky top-0 z-10 bg-background border-b border-border", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5 px-3 py-2", children: MENU_ITEMS.filter(({ key }) => isTabVisible(key)).map(({ key, label, icon: Icon }) => /* @__PURE__ */ jsxRuntime.jsxs(
15758
15766
  "button",
15759
15767
  {
15760
15768
  type: "button",
15761
15769
  onClick: () => setActive(active === key ? null : key),
15762
- className: chunkQVQTDWB7_js.cn(
15770
+ className: chunkKA7ST7IH_js.cn(
15763
15771
  "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]",
15764
15772
  active === key ? "bg-primary text-white border-primary" : "border-border text-muted-foreground hover:text-foreground hover:bg-accent/40"
15765
15773
  ),
@@ -15995,7 +16003,7 @@ function MobileToolbar(props) {
15995
16003
  const { t } = reactI18next.useTranslation();
15996
16004
  const { mode, canUndo, canRedo, onUndo, onRedo, onSetMode, onSaveAsPptx } = props;
15997
16005
  const [menuOpen, setMenuOpen] = React14.useState(false);
15998
- const { isHidden } = chunkQVQTDWB7_js.useToolbarVisibility(props.hiddenActions);
16006
+ const { isHidden } = chunkKA7ST7IH_js.useToolbarVisibility(props.hiddenActions);
15999
16007
  const showEdit = mode === "edit" || mode === "master";
16000
16008
  const btn = "inline-flex items-center justify-center min-w-[44px] min-h-[44px] rounded-md text-foreground/80 hover:bg-accent/60 disabled:opacity-40 disabled:cursor-not-allowed active:scale-95 transition-transform";
16001
16009
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -16057,7 +16065,7 @@ function MobileToolbar(props) {
16057
16065
  {
16058
16066
  type: "button",
16059
16067
  onClick: () => onSetMode("present"),
16060
- className: chunkQVQTDWB7_js.cn(btn, "text-primary"),
16068
+ className: chunkKA7ST7IH_js.cn(btn, "text-primary"),
16061
16069
  title: t("pptx.toolbar.present"),
16062
16070
  "aria-label": t("pptx.toolbar.present"),
16063
16071
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPresentation, { className: "w-5 h-5" })
@@ -16068,7 +16076,7 @@ function MobileToolbar(props) {
16068
16076
  {
16069
16077
  type: "button",
16070
16078
  onClick: props.onOpenShareDialog ?? props.onPackageForSharing,
16071
- className: chunkQVQTDWB7_js.cn(btn, "bg-primary text-white hover:bg-primary/90 px-3"),
16079
+ className: chunkKA7ST7IH_js.cn(btn, "bg-primary text-white hover:bg-primary/90 px-3"),
16072
16080
  title: t("pptx.toolbar.share"),
16073
16081
  "aria-label": t("pptx.toolbar.share"),
16074
16082
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuShare2, { className: "w-4 h-4" })
@@ -16093,7 +16101,7 @@ var FILL_COLORS = [
16093
16101
  "#008888",
16094
16102
  "#888888"
16095
16103
  ];
16096
- var TOP_SHAPES = chunkQVQTDWB7_js.SHAPE_PRESETS.slice(0, 12);
16104
+ var TOP_SHAPES = chunkKA7ST7IH_js.SHAPE_PRESETS.slice(0, 12);
16097
16105
  function DrawingGroup(p) {
16098
16106
  const { t } = reactI18next.useTranslation();
16099
16107
  const [shapesOpen, setShapesOpen] = React14.useState(false);
@@ -16174,7 +16182,7 @@ function DrawingGroup(p) {
16174
16182
  "button",
16175
16183
  {
16176
16184
  type: "button",
16177
- className: chunkQVQTDWB7_js.cn(
16185
+ className: chunkKA7ST7IH_js.cn(
16178
16186
  "flex items-center gap-2 w-full px-3 py-1.5 text-xs text-foreground hover:bg-muted transition-colors",
16179
16187
  p.newShapeType === s.type && "bg-accent"
16180
16188
  ),
@@ -16274,6 +16282,7 @@ function DrawingGroup(p) {
16274
16282
  {
16275
16283
  type: "button",
16276
16284
  "aria-label": `Fill colour ${c}`,
16285
+ "data-pptx-compact": true,
16277
16286
  className: "w-5 h-5 rounded border border-border/60 hover:scale-110 transition-transform",
16278
16287
  style: { backgroundColor: c },
16279
16288
  title: c,
@@ -16302,6 +16311,7 @@ function DrawingGroup(p) {
16302
16311
  {
16303
16312
  type: "button",
16304
16313
  "aria-label": `Outline colour ${c}`,
16314
+ "data-pptx-compact": true,
16305
16315
  className: "w-5 h-5 rounded border border-border/60 hover:scale-110 transition-transform",
16306
16316
  style: { backgroundColor: c },
16307
16317
  title: c,
@@ -16318,7 +16328,7 @@ function DrawingGroup(p) {
16318
16328
  {
16319
16329
  type: "button",
16320
16330
  disabled: true,
16321
- className: chunkQVQTDWB7_js.cn(pill, "opacity-50 cursor-not-allowed"),
16331
+ className: chunkKA7ST7IH_js.cn(pill, "opacity-50 cursor-not-allowed"),
16322
16332
  title: t("pptx.drawing.shapeEffectsUnavailable"),
16323
16333
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSparkles, { className: ic2 })
16324
16334
  }
@@ -16425,7 +16435,7 @@ function TabRowActions(p) {
16425
16435
  const { t } = reactI18next.useTranslation();
16426
16436
  const collab = useCollaboration();
16427
16437
  const isCollaborating = collab && collab.status === "connected";
16428
- const { isHidden } = chunkQVQTDWB7_js.useToolbarVisibility(p.hiddenActions);
16438
+ const { isHidden } = chunkKA7ST7IH_js.useToolbarVisibility(p.hiddenActions);
16429
16439
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 pr-1", children: [
16430
16440
  p.onEnterRehearsalMode && !isHidden("record") && /* @__PURE__ */ jsxRuntime.jsxs(
16431
16441
  "button",
@@ -16446,7 +16456,7 @@ function TabRowActions(p) {
16446
16456
  {
16447
16457
  type: "button",
16448
16458
  onClick: p.onOpenShareDialog ?? p.onPackageForSharing,
16449
- className: chunkQVQTDWB7_js.cn(
16459
+ className: chunkKA7ST7IH_js.cn(
16450
16460
  "relative inline-flex items-center gap-1 px-2.5 py-1 rounded-sm text-[11px] font-medium transition-colors whitespace-nowrap",
16451
16461
  isCollaborating ? "bg-green-600 hover:bg-green-500 text-white" : "bg-primary hover:bg-primary/90 text-white"
16452
16462
  ),
@@ -16526,7 +16536,7 @@ function CustomShowsControls({
16526
16536
  {
16527
16537
  type: "button",
16528
16538
  onClick: onToggleCurrentSlideInActiveShow,
16529
- className: chunkQVQTDWB7_js.cn(
16539
+ className: chunkKA7ST7IH_js.cn(
16530
16540
  "px-2 py-1 rounded text-[11px] transition-colors",
16531
16541
  isCurrentSlideInActiveShow ? "bg-primary text-white" : "bg-muted hover:bg-accent"
16532
16542
  ),
@@ -16574,7 +16584,7 @@ function PresentDropdown({
16574
16584
  {
16575
16585
  type: "button",
16576
16586
  onClick: onPresent,
16577
- className: chunkQVQTDWB7_js.cn(
16587
+ className: chunkKA7ST7IH_js.cn(
16578
16588
  "px-2 py-1 transition-colors",
16579
16589
  isActive ? "bg-primary text-white" : "hover:bg-accent text-foreground"
16580
16590
  ),
@@ -16587,7 +16597,7 @@ function PresentDropdown({
16587
16597
  {
16588
16598
  type: "button",
16589
16599
  onClick: () => setOpen((prev) => !prev),
16590
- className: chunkQVQTDWB7_js.cn(
16600
+ className: chunkKA7ST7IH_js.cn(
16591
16601
  "px-1 py-1 transition-colors border-l border-border",
16592
16602
  open ? "bg-primary text-white" : "hover:bg-accent text-foreground"
16593
16603
  ),
@@ -16775,7 +16785,7 @@ function OverflowMenu(p) {
16775
16785
  {
16776
16786
  type: "button",
16777
16787
  onClick: () => p.onSetOverflowMenuOpen(!p.isOverflowMenuOpen),
16778
- className: chunkQVQTDWB7_js.cn(
16788
+ className: chunkKA7ST7IH_js.cn(
16779
16789
  "p-1.5 rounded transition-colors",
16780
16790
  p.isOverflowMenuOpen ? "bg-primary/80 text-white" : "bg-muted hover:bg-accent"
16781
16791
  ),
@@ -16830,7 +16840,7 @@ function ToolbarPrimaryRow(p) {
16830
16840
  {
16831
16841
  type: "button",
16832
16842
  onClick: onToggleSidebar,
16833
- className: chunkQVQTDWB7_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
16843
+ className: chunkKA7ST7IH_js.cn(qab, !isSidebarCollapsed ? "text-foreground" : "text-muted-foreground"),
16834
16844
  title: t("pptx.toolbar.toggleSlidesPanel"),
16835
16845
  "aria-label": t("pptx.toolbar.toggleSlidesPanel"),
16836
16846
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelLeft, { className: ic2 })
@@ -16842,7 +16852,7 @@ function ToolbarPrimaryRow(p) {
16842
16852
  {
16843
16853
  type: "button",
16844
16854
  onClick: p.onToggleComments,
16845
- className: chunkQVQTDWB7_js.cn(
16855
+ className: chunkKA7ST7IH_js.cn(
16846
16856
  qab,
16847
16857
  "relative max-md:hidden",
16848
16858
  p.isCommentsPanelOpen ? "text-foreground" : "text-muted-foreground"
@@ -16909,7 +16919,7 @@ function ToolbarPrimaryRow(p) {
16909
16919
  {
16910
16920
  type: "button",
16911
16921
  onClick: onToggleInspector,
16912
- className: chunkQVQTDWB7_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
16922
+ className: chunkKA7ST7IH_js.cn(qab, isInspectorPaneOpen ? "text-foreground" : "text-muted-foreground"),
16913
16923
  title: t("pptx.toolbar.toggleInspector"),
16914
16924
  "aria-label": t("pptx.toolbar.toggleInspector"),
16915
16925
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPanelRight, { className: ic2 })
@@ -16920,7 +16930,7 @@ function ToolbarPrimaryRow(p) {
16920
16930
  {
16921
16931
  type: "button",
16922
16932
  onClick: p.onOpenSettings ?? p.onToggleShortcuts,
16923
- className: chunkQVQTDWB7_js.cn(qab, "text-muted-foreground"),
16933
+ className: chunkKA7ST7IH_js.cn(qab, "text-muted-foreground"),
16924
16934
  title: t("pptx.toolbar.settingsShortcuts"),
16925
16935
  "aria-label": t("pptx.toolbar.settings"),
16926
16936
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSettings, { className: ics })
@@ -16933,7 +16943,7 @@ function ToolbarPrimaryRow(p) {
16933
16943
  function Toolbar(p) {
16934
16944
  const { mode, isNarrowViewport, isCompactToolbarOpen, toolbarSection, onSetToolbarSection } = p;
16935
16945
  const { t } = reactI18next.useTranslation();
16936
- const { isTabVisible } = chunkQVQTDWB7_js.useToolbarVisibility(p.hiddenActions);
16946
+ const { isTabVisible } = chunkKA7ST7IH_js.useToolbarVisibility(p.hiddenActions);
16937
16947
  if (isNarrowViewport && mode !== "present") {
16938
16948
  return /* @__PURE__ */ jsxRuntime.jsx(MobileToolbar, { ...p });
16939
16949
  }
@@ -16966,14 +16976,14 @@ function Toolbar(p) {
16966
16976
  role: "tablist",
16967
16977
  className: "flex items-center border-b border-border/60 px-1 max-md:overflow-x-auto max-md:scrollbar-none",
16968
16978
  children: [
16969
- chunkQVQTDWB7_js.TOOLBAR_SECTIONS.filter((s) => isTabVisible(s.id)).map((s) => /* @__PURE__ */ jsxRuntime.jsx(
16979
+ chunkKA7ST7IH_js.TOOLBAR_SECTIONS.filter((s) => isTabVisible(s.id)).map((s) => /* @__PURE__ */ jsxRuntime.jsx(
16970
16980
  "button",
16971
16981
  {
16972
16982
  type: "button",
16973
16983
  role: "tab",
16974
16984
  "aria-selected": toolbarSection === s.id,
16975
16985
  onClick: () => onSetToolbarSection(s.id),
16976
- className: chunkQVQTDWB7_js.cn(
16986
+ className: chunkKA7ST7IH_js.cn(
16977
16987
  "relative px-3.5 py-2 text-[12px] font-medium whitespace-nowrap transition-colors max-md:min-h-[36px] max-md:px-3",
16978
16988
  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"
16979
16989
  ),
@@ -16996,7 +17006,7 @@ function Toolbar(p) {
16996
17006
  {
16997
17007
  type: "button",
16998
17008
  onClick: p.onToggleCompactToolbar,
16999
- className: chunkQVQTDWB7_js.cn(
17009
+ className: chunkKA7ST7IH_js.cn(
17000
17010
  "px-2 py-1 rounded text-[11px] transition-colors mr-1",
17001
17011
  isCompactToolbarOpen ? "bg-primary/80 text-white" : "text-muted-foreground hover:text-foreground"
17002
17012
  ),
@@ -17012,7 +17022,7 @@ function Toolbar(p) {
17012
17022
  showRibbon && /* @__PURE__ */ jsxRuntime.jsxs(
17013
17023
  "div",
17014
17024
  {
17015
- className: chunkQVQTDWB7_js.cn(
17025
+ className: chunkKA7ST7IH_js.cn(
17016
17026
  "flex min-h-[82px] items-stretch gap-0 overflow-visible px-1 py-0.5 max-md:min-h-0 max-md:px-1 max-md:py-0.5 flex-nowrap",
17017
17027
  isNarrowViewport && !isCompactToolbarOpen && "hidden"
17018
17028
  ),
@@ -17267,13 +17277,13 @@ function Toolbar(p) {
17267
17277
  }
17268
17278
  var INPUT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px]";
17269
17279
  var SELECT_CLS = "bg-muted border border-border rounded px-2 py-1 w-full text-[11px]";
17270
- var ENTRANCE_PRESETS = chunkQVQTDWB7_js.ANIMATION_PRESET_OPTIONS.filter(
17280
+ var ENTRANCE_PRESETS = chunkKA7ST7IH_js.ANIMATION_PRESET_OPTIONS.filter(
17271
17281
  (o) => o.value === "fadeIn" || o.value === "flyIn" || o.value === "zoomIn"
17272
17282
  );
17273
- var EXIT_PRESETS = chunkQVQTDWB7_js.ANIMATION_PRESET_OPTIONS.filter(
17283
+ var EXIT_PRESETS = chunkKA7ST7IH_js.ANIMATION_PRESET_OPTIONS.filter(
17274
17284
  (o) => o.value === "fadeOut" || o.value === "flyOut" || o.value === "zoomOut"
17275
17285
  );
17276
- var EMPHASIS_PRESETS = chunkQVQTDWB7_js.ANIMATION_PRESET_OPTIONS.filter(
17286
+ var EMPHASIS_PRESETS = chunkKA7ST7IH_js.ANIMATION_PRESET_OPTIONS.filter(
17277
17287
  (o) => o.value === "spin" || o.value === "pulse" || o.value === "colorWave" || o.value === "bounce" || o.value === "flash" || o.value === "growShrink" || o.value === "teeter"
17278
17288
  );
17279
17289
  var TRIGGER_OPTIONS = [
@@ -17375,7 +17385,7 @@ function AnimationTimelineSection({
17375
17385
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-6 rounded bg-muted/50 border border-border overflow-hidden", children: timelineBarData.map((bar) => /* @__PURE__ */ jsxRuntime.jsx(
17376
17386
  "div",
17377
17387
  {
17378
- className: chunkQVQTDWB7_js.cn(
17388
+ className: chunkKA7ST7IH_js.cn(
17379
17389
  "absolute top-0.5 bottom-0.5 rounded-sm transition-colors",
17380
17390
  animationTypeColor(bar.anim),
17381
17391
  bar.anim.elementId === selectedElementId && "ring-1 ring-primary"
@@ -17409,7 +17419,7 @@ function AnimationTimelineSection({
17409
17419
  onDragEnd: handleDragEnd,
17410
17420
  onMouseEnter: () => handleAnimationHover(anim),
17411
17421
  onMouseLeave: handleAnimationHoverEnd,
17412
- className: chunkQVQTDWB7_js.cn(
17422
+ className: chunkKA7ST7IH_js.cn(
17413
17423
  "flex items-center gap-1 px-1 py-0.5 rounded text-[10px] cursor-grab transition-colors",
17414
17424
  isSelected ? "bg-primary/30 text-primary" : "bg-muted/50 text-muted-foreground",
17415
17425
  isDragging && "opacity-40",
@@ -17573,13 +17583,13 @@ function useAnimationPreview({
17573
17583
  if (!preset || preset === "none") {
17574
17584
  return;
17575
17585
  }
17576
- chunkQVQTDWB7_js.startPreviewAnimation(anim.elementId, preset, {
17586
+ chunkKA7ST7IH_js.startPreviewAnimation(anim.elementId, preset, {
17577
17587
  direction: anim.direction,
17578
17588
  durationMs: anim.durationMs ?? 500,
17579
17589
  timingCurve: anim.timingCurve
17580
17590
  });
17581
17591
  }, []);
17582
- const handleAnimationHoverEnd = React14.useCallback(() => chunkQVQTDWB7_js.stopPreviewAnimation(), []);
17592
+ const handleAnimationHoverEnd = React14.useCallback(() => chunkKA7ST7IH_js.stopPreviewAnimation(), []);
17583
17593
  const handlePreviewClick = React14.useCallback(() => {
17584
17594
  if (!selectedElementAnimation) {
17585
17595
  return;
@@ -17588,7 +17598,7 @@ function useAnimationPreview({
17588
17598
  if (!preset || preset === "none") {
17589
17599
  return;
17590
17600
  }
17591
- chunkQVQTDWB7_js.startPreviewAnimation(selectedElementId, preset, {
17601
+ chunkKA7ST7IH_js.startPreviewAnimation(selectedElementId, preset, {
17592
17602
  direction: selectedElementAnimation.direction,
17593
17603
  durationMs: selectedElementAnimation.durationMs ?? 500,
17594
17604
  timingCurve: selectedElementAnimation.timingCurve
@@ -17920,7 +17930,7 @@ function AnimationPanel({
17920
17930
  {
17921
17931
  type: "button",
17922
17932
  disabled: !canEdit,
17923
- className: chunkQVQTDWB7_js.cn(
17933
+ className: chunkKA7ST7IH_js.cn(
17924
17934
  "flex items-center justify-center w-7 h-7 rounded border transition-colors",
17925
17935
  isActive ? "border-primary bg-primary/20 text-primary" : "border-border bg-muted text-muted-foreground hover:bg-accent"
17926
17936
  ),
@@ -18162,7 +18172,7 @@ function ActionTriggerSection({
18162
18172
  "select",
18163
18173
  {
18164
18174
  disabled: !canEdit,
18165
- className: chunkQVQTDWB7_js.cn(INPUT, "w-full"),
18175
+ className: chunkKA7ST7IH_js.cn(INPUT, "w-full"),
18166
18176
  value: activeType,
18167
18177
  onChange: (e) => onChangeType(e.target.value),
18168
18178
  children: ACTION_TYPE_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: t(o.label) }, o.value))
@@ -18173,7 +18183,7 @@ function ActionTriggerSection({
18173
18183
  {
18174
18184
  type: "text",
18175
18185
  disabled: !canEdit,
18176
- className: chunkQVQTDWB7_js.cn(INPUT, "w-full"),
18186
+ className: chunkKA7ST7IH_js.cn(INPUT, "w-full"),
18177
18187
  placeholder: "https://...",
18178
18188
  value: action?.url ?? fallbackUrl ?? "",
18179
18189
  onChange: (e) => onChangeUrl(e.target.value)
@@ -18184,7 +18194,7 @@ function ActionTriggerSection({
18184
18194
  {
18185
18195
  type: "number",
18186
18196
  disabled: !canEdit,
18187
- className: chunkQVQTDWB7_js.cn(INPUT, "w-full"),
18197
+ className: chunkKA7ST7IH_js.cn(INPUT, "w-full"),
18188
18198
  placeholder: t("pptx.action.slideNumberPlaceholder"),
18189
18199
  min: 1,
18190
18200
  max: slideCount,
@@ -19839,7 +19849,7 @@ function ConnectorPanel({
19839
19849
  "select",
19840
19850
  {
19841
19851
  disabled: !canEdit,
19842
- className: chunkQVQTDWB7_js.cn(INPUT, "w-full"),
19852
+ className: chunkKA7ST7IH_js.cn(INPUT, "w-full"),
19843
19853
  value: selectedElement.shapeStyle?.[key] ?? "none",
19844
19854
  onChange: (e) => onUpdateElementStyle({ [key]: e.target.value }),
19845
19855
  children: [
@@ -19891,7 +19901,7 @@ function OlePropertiesPanel({
19891
19901
  /* @__PURE__ */ jsxRuntime.jsx(
19892
19902
  "span",
19893
19903
  {
19894
- className: chunkQVQTDWB7_js.cn(
19904
+ className: chunkKA7ST7IH_js.cn(
19895
19905
  "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium",
19896
19906
  ole.isLinked ? "bg-blue-500/20 text-blue-400" : "bg-green-500/20 text-green-400"
19897
19907
  ),
@@ -19950,7 +19960,7 @@ function LayerOrderButtons({
19950
19960
  "button",
19951
19961
  {
19952
19962
  type: "button",
19953
- className: chunkQVQTDWB7_js.cn("flex-1", BTN),
19963
+ className: chunkKA7ST7IH_js.cn("flex-1", BTN),
19954
19964
  disabled: !canEdit,
19955
19965
  onClick: () => onMoveLayer("forward"),
19956
19966
  children: "\u2191 Forward"
@@ -19960,7 +19970,7 @@ function LayerOrderButtons({
19960
19970
  "button",
19961
19971
  {
19962
19972
  type: "button",
19963
- className: chunkQVQTDWB7_js.cn("flex-1", BTN),
19973
+ className: chunkKA7ST7IH_js.cn("flex-1", BTN),
19964
19974
  disabled: !canEdit,
19965
19975
  onClick: () => onMoveLayer("backward"),
19966
19976
  children: "\u2193 Backward"
@@ -19984,7 +19994,7 @@ function ArtisticEffectsGallery({
19984
19994
  {
19985
19995
  type: "button",
19986
19996
  disabled: !canEdit,
19987
- className: chunkQVQTDWB7_js.cn(
19997
+ className: chunkKA7ST7IH_js.cn(
19988
19998
  "flex flex-col items-center gap-0.5 rounded border p-0.5 hover:bg-accent/50",
19989
19999
  isActive ? "border-primary bg-primary/10" : "border-border"
19990
20000
  ),
@@ -20433,7 +20443,7 @@ function ImagePropertiesPanel({
20433
20443
  {
20434
20444
  rows: 2,
20435
20445
  disabled: !canEdit,
20436
- className: chunkQVQTDWB7_js.cn(INPUT, "resize-none text-[11px]"),
20446
+ className: chunkKA7ST7IH_js.cn(INPUT, "resize-none text-[11px]"),
20437
20447
  value: selectedElement.altText ?? "",
20438
20448
  onChange: (e) => onUpdateElement({
20439
20449
  altText: e.target.value
@@ -21392,11 +21402,11 @@ function ShapeTextPanels({
21392
21402
  {
21393
21403
  value: selectedElement.shapeType || "rect",
21394
21404
  disabled: !canEdit,
21395
- className: chunkQVQTDWB7_js.cn(INPUT, "w-full"),
21405
+ className: chunkKA7ST7IH_js.cn(INPUT, "w-full"),
21396
21406
  onChange: (e) => onUpdateElement({
21397
21407
  shapeType: e.target.value
21398
21408
  }),
21399
- children: chunkQVQTDWB7_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
21409
+ children: chunkKA7ST7IH_js.SHAPE_PRESETS.filter((p) => p.type !== "connector").map((p) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: p.type, children: t(p.i18nKey) }, p.type))
21400
21410
  }
21401
21411
  )
21402
21412
  ] }),
@@ -21526,7 +21536,7 @@ function TextFormatToggle({
21526
21536
  {
21527
21537
  type: "button",
21528
21538
  disabled,
21529
- className: chunkQVQTDWB7_js.cn(
21539
+ className: chunkKA7ST7IH_js.cn(
21530
21540
  "px-2 py-1 rounded text-[11px] transition-colors",
21531
21541
  italic && "italic",
21532
21542
  underline && "underline",
@@ -21818,7 +21828,7 @@ function SmartArtLayoutSwitcher({
21818
21828
  type: "button",
21819
21829
  "data-testid": `smartart-layout-${type}`,
21820
21830
  disabled: !canEdit,
21821
- className: chunkQVQTDWB7_js.cn(
21831
+ className: chunkKA7ST7IH_js.cn(
21822
21832
  "flex flex-col items-center gap-0.5 rounded border p-1.5 transition-colors",
21823
21833
  "text-[9px] leading-tight",
21824
21834
  isActive ? "border-primary bg-primary/15 text-primary" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground",
@@ -21890,7 +21900,7 @@ function SmartArtNodeStyleControls({
21890
21900
  disabled: !canEdit,
21891
21901
  "aria-label": `Bold ${label}`,
21892
21902
  "aria-pressed": bold,
21893
- className: chunkQVQTDWB7_js.cn(
21903
+ className: chunkKA7ST7IH_js.cn(
21894
21904
  EMPHASIS_BTN,
21895
21905
  "font-bold",
21896
21906
  bold ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground"
@@ -21906,7 +21916,7 @@ function SmartArtNodeStyleControls({
21906
21916
  disabled: !canEdit,
21907
21917
  "aria-label": `Italic ${label}`,
21908
21918
  "aria-pressed": italic,
21909
- className: chunkQVQTDWB7_js.cn(
21919
+ className: chunkKA7ST7IH_js.cn(
21910
21920
  EMPHASIS_BTN,
21911
21921
  "italic",
21912
21922
  italic ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground"
@@ -21945,7 +21955,7 @@ function SmartArtNodeRow({
21945
21955
  "div",
21946
21956
  {
21947
21957
  role: "listitem",
21948
- className: chunkQVQTDWB7_js.cn(
21958
+ className: chunkKA7ST7IH_js.cn(
21949
21959
  "rounded border bg-background/60 p-1.5",
21950
21960
  isChild ? "border-border/60 ml-4" : "border-border"
21951
21961
  ),
@@ -21960,7 +21970,7 @@ function SmartArtNodeRow({
21960
21970
  "data-testid": "smartart-node-text",
21961
21971
  disabled: !canEdit,
21962
21972
  "aria-label": label,
21963
- className: chunkQVQTDWB7_js.cn(INPUT, "flex-1 text-[11px] py-0.5"),
21973
+ className: chunkKA7ST7IH_js.cn(INPUT, "flex-1 text-[11px] py-0.5"),
21964
21974
  value: text,
21965
21975
  onChange: (e) => onChangeText(nodeId, e.target.value),
21966
21976
  onKeyDown: (e) => onKeyDown(e, nodeId),
@@ -22009,7 +22019,7 @@ function SmartArtNodeRow({
22009
22019
  {
22010
22020
  type: "button",
22011
22021
  disabled: !canEdit || removeDisabled,
22012
- className: chunkQVQTDWB7_js.cn(MINI_BTN, "hover:text-red-400"),
22022
+ className: chunkKA7ST7IH_js.cn(MINI_BTN, "hover:text-red-400"),
22013
22023
  onClick: () => onRemove(nodeId),
22014
22024
  "aria-label": `Remove ${label}`,
22015
22025
  title: removeDisabled ? t("pptx.smartArt.layoutMinimum") : t("pptx.smartArt.remove"),
@@ -22067,7 +22077,7 @@ function SmartArtPropertiesPanel({
22067
22077
  const reflowed = box ? chunkVSNXVKJI_js.rebuildDrawingShapesIfCleared(
22068
22078
  newData,
22069
22079
  newData.layout,
22070
- chunkQVQTDWB7_js.resolveSmartArtDataPalette(newData),
22080
+ chunkKA7ST7IH_js.resolveSmartArtDataPalette(newData),
22071
22081
  newData.style ?? "flat",
22072
22082
  "inspector",
22073
22083
  box
@@ -22176,7 +22186,7 @@ function SmartArtPropertiesPanel({
22176
22186
  disabled: !canEdit,
22177
22187
  "data-testid": "smartart-color-scheme",
22178
22188
  "aria-label": t("pptx.smartart.colorScheme"),
22179
- className: chunkQVQTDWB7_js.cn(INPUT, "w-full"),
22189
+ className: chunkKA7ST7IH_js.cn(INPUT, "w-full"),
22180
22190
  value: smartArtData.colorScheme ?? "colorful1",
22181
22191
  onChange: (e) => updateSmartArt({ colorScheme: e.target.value }),
22182
22192
  children: COLOR_SCHEMES.map((cs) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: cs, children: cs }, cs))
@@ -22191,7 +22201,7 @@ function SmartArtPropertiesPanel({
22191
22201
  type: "button",
22192
22202
  disabled: !canEdit,
22193
22203
  "aria-pressed": (smartArtData.style ?? "flat") === s,
22194
- className: chunkQVQTDWB7_js.cn(
22204
+ className: chunkKA7ST7IH_js.cn(
22195
22205
  "flex-1 px-2 py-1 text-[10px] rounded border transition-colors",
22196
22206
  (smartArtData.style ?? "flat") === s ? "border-primary bg-primary/20 text-primary" : "border-border text-muted-foreground hover:bg-muted"
22197
22207
  ),
@@ -22595,7 +22605,7 @@ function TableCellFormattingPanel({
22595
22605
  {
22596
22606
  type: "button",
22597
22607
  disabled: !canEdit,
22598
- className: chunkQVQTDWB7_js.cn(
22608
+ className: chunkKA7ST7IH_js.cn(
22599
22609
  "px-2 py-1 rounded text-[11px] transition-colors",
22600
22610
  cls,
22601
22611
  cs[key] ? "bg-primary text-white" : "bg-muted hover:bg-accent"
@@ -22614,7 +22624,7 @@ function TableCellFormattingPanel({
22614
22624
  {
22615
22625
  type: "button",
22616
22626
  disabled: !canEdit,
22617
- className: chunkQVQTDWB7_js.cn(
22627
+ className: chunkKA7ST7IH_js.cn(
22618
22628
  "px-2 py-1 rounded text-[11px] transition-colors",
22619
22629
  cs.align === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
22620
22630
  ),
@@ -22632,7 +22642,7 @@ function TableCellFormattingPanel({
22632
22642
  {
22633
22643
  type: "button",
22634
22644
  disabled: !canEdit,
22635
- className: chunkQVQTDWB7_js.cn(
22645
+ className: chunkKA7ST7IH_js.cn(
22636
22646
  "px-2 py-1 rounded text-[11px] transition-colors",
22637
22647
  cs.vAlign === val ? "bg-primary text-white" : "bg-muted hover:bg-accent"
22638
22648
  ),
@@ -22665,7 +22675,7 @@ function TableCellFormattingPanel({
22665
22675
  {
22666
22676
  type: "number",
22667
22677
  disabled: !canEdit,
22668
- className: chunkQVQTDWB7_js.cn(INPUT, "w-14"),
22678
+ className: chunkKA7ST7IH_js.cn(INPUT, "w-14"),
22669
22679
  min: 0,
22670
22680
  max: 10,
22671
22681
  value: cs[widthKey] ?? 1,
@@ -22681,7 +22691,7 @@ function TableCellFormattingPanel({
22681
22691
  {
22682
22692
  type: "button",
22683
22693
  disabled: !canEdit,
22684
- className: chunkQVQTDWB7_js.cn(BTN, "text-center"),
22694
+ className: chunkKA7ST7IH_js.cn(BTN, "text-center"),
22685
22695
  onClick: () => {
22686
22696
  const newRows = chunkVSNXVKJI_js.computeMergeCellRight(td, rowIndex, columnIndex);
22687
22697
  if (newRows) {
@@ -22696,7 +22706,7 @@ function TableCellFormattingPanel({
22696
22706
  {
22697
22707
  type: "button",
22698
22708
  disabled: !canEdit,
22699
- className: chunkQVQTDWB7_js.cn(BTN, "text-center"),
22709
+ className: chunkKA7ST7IH_js.cn(BTN, "text-center"),
22700
22710
  onClick: () => {
22701
22711
  const newRows = chunkVSNXVKJI_js.computeMergeCellDown(td, rowIndex, columnIndex);
22702
22712
  if (newRows) {
@@ -22711,7 +22721,7 @@ function TableCellFormattingPanel({
22711
22721
  {
22712
22722
  type: "button",
22713
22723
  disabled: !canEdit,
22714
- className: chunkQVQTDWB7_js.cn(BTN, "text-center"),
22724
+ className: chunkKA7ST7IH_js.cn(BTN, "text-center"),
22715
22725
  onClick: () => {
22716
22726
  const newRows = chunkVSNXVKJI_js.computeSplitCell(td, rowIndex, columnIndex);
22717
22727
  if (newRows) {
@@ -23119,7 +23129,7 @@ function InspectorCommentRow({
23119
23129
  return /* @__PURE__ */ jsxRuntime.jsxs(
23120
23130
  "div",
23121
23131
  {
23122
- className: chunkQVQTDWB7_js.cn(
23132
+ className: chunkKA7ST7IH_js.cn(
23123
23133
  "rounded border border-border bg-card p-2",
23124
23134
  depth > 0 && "ml-3 border-l-2 border-l-primary/40"
23125
23135
  ),
@@ -23207,7 +23217,7 @@ function InspectorCommentRow({
23207
23217
  "button",
23208
23218
  {
23209
23219
  type: "button",
23210
- className: chunkQVQTDWB7_js.cn(
23220
+ className: chunkKA7ST7IH_js.cn(
23211
23221
  "inline-flex items-center justify-center p-1.5 border-l border-border transition-colors",
23212
23222
  comment.resolved ? "bg-green-900/40 text-green-300 hover:bg-green-900/60" : "hover:bg-accent text-foreground hover:text-foreground"
23213
23223
  ),
@@ -23401,7 +23411,7 @@ function InspectorCommentsSection({
23401
23411
  type: "button",
23402
23412
  onClick: onAddComment,
23403
23413
  disabled: !commentDraft.trim(),
23404
- className: chunkQVQTDWB7_js.cn(
23414
+ className: chunkKA7ST7IH_js.cn(
23405
23415
  "w-full inline-flex items-center justify-center gap-1 rounded px-2 py-1 text-[11px] font-medium transition-colors",
23406
23416
  commentDraft.trim() ? "bg-primary hover:bg-primary/80 text-white" : "bg-muted text-muted-foreground cursor-not-allowed"
23407
23417
  ),
@@ -23426,7 +23436,7 @@ function InspectorPaneHeader({
23426
23436
  {
23427
23437
  type: "button",
23428
23438
  title: label,
23429
- className: chunkQVQTDWB7_js.cn(
23439
+ className: chunkKA7ST7IH_js.cn(
23430
23440
  "flex items-center gap-1 px-2 py-1 rounded text-[11px] transition-colors",
23431
23441
  activeTab === key ? "bg-primary text-white" : "text-muted-foreground hover:text-foreground hover:bg-accent"
23432
23442
  ),
@@ -23535,7 +23545,7 @@ function CustomPropertiesBlock({
23535
23545
  "button",
23536
23546
  {
23537
23547
  type: "button",
23538
- className: chunkQVQTDWB7_js.cn(BTN, "px-1.5 text-red-400 hover:text-red-300"),
23548
+ className: chunkKA7ST7IH_js.cn(BTN, "px-1.5 text-red-400 hover:text-red-300"),
23539
23549
  onClick: () => onUpdate(customProperties.filter((_, i) => i !== index)),
23540
23550
  children: "\xD7"
23541
23551
  }
@@ -23670,7 +23680,7 @@ function PresentationSettingsCard({
23670
23680
  "select",
23671
23681
  {
23672
23682
  disabled: !canEdit,
23673
- className: chunkQVQTDWB7_js.cn(INPUT, "w-28"),
23683
+ className: chunkKA7ST7IH_js.cn(INPUT, "w-28"),
23674
23684
  value: presentationProperties.showType ?? "presented",
23675
23685
  onChange: (e) => onUpdate({
23676
23686
  showType: e.target.value
@@ -23728,7 +23738,7 @@ function PresentationSettingsCard({
23728
23738
  min: 1,
23729
23739
  max: 16,
23730
23740
  disabled: !canEdit,
23731
- className: chunkQVQTDWB7_js.cn(INPUT, "w-20"),
23741
+ className: chunkKA7ST7IH_js.cn(INPUT, "w-20"),
23732
23742
  value: presentationProperties.printSlidesPerPage ?? 1,
23733
23743
  onChange: (e) => onUpdate({ printSlidesPerPage: Number(e.target.value) })
23734
23744
  }
@@ -24025,7 +24035,7 @@ function TagsSection({
24025
24035
  "button",
24026
24036
  {
24027
24037
  type: "button",
24028
- className: chunkQVQTDWB7_js.cn(BTN, "px-1.5 text-red-400 hover:text-red-300"),
24038
+ className: chunkKA7ST7IH_js.cn(BTN, "px-1.5 text-red-400 hover:text-red-300"),
24029
24039
  title: t("pptx.tags.deleteTag"),
24030
24040
  onClick: () => deleteTag(tag.colIdx, tag.tagIdx),
24031
24041
  children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuTrash2, { className: "w-3 h-3" })
@@ -24125,7 +24135,7 @@ function PresentationPropertiesPanel({
24125
24135
  canEdit
24126
24136
  }
24127
24137
  ),
24128
- activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkQVQTDWB7_js.cn(CARD, "space-y-1"), children: [
24138
+ activeSlide && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkKA7ST7IH_js.cn(CARD, "space-y-1"), children: [
24129
24139
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING, children: "Slide" }),
24130
24140
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[11px] text-muted-foreground", children: [
24131
24141
  activeSlide.elements?.length ?? 0,
@@ -24146,7 +24156,7 @@ function SlideBackgroundPanel({
24146
24156
  const { t } = reactI18next.useTranslation();
24147
24157
  const bgImageInputRef = React14.useRef(null);
24148
24158
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
24149
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkQVQTDWB7_js.cn(CARD, "space-y-2"), children: [
24159
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkKA7ST7IH_js.cn(CARD, "space-y-2"), children: [
24150
24160
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING, children: "Background" }),
24151
24161
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
24152
24162
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-10 shrink-0", children: "Colour" }),
@@ -24192,7 +24202,7 @@ function SlideBackgroundPanel({
24192
24202
  "button",
24193
24203
  {
24194
24204
  type: "button",
24195
- className: chunkQVQTDWB7_js.cn(BTN, "flex-1 text-center"),
24205
+ className: chunkKA7ST7IH_js.cn(BTN, "flex-1 text-center"),
24196
24206
  disabled: !canEdit,
24197
24207
  onClick: () => bgImageInputRef.current?.click(),
24198
24208
  children: activeSlide.backgroundImage ? t("pptx.slideBackground.replaceImage") : t("pptx.slideBackground.chooseImage")
@@ -24225,7 +24235,7 @@ function SlideBackgroundPanel({
24225
24235
  "button",
24226
24236
  {
24227
24237
  type: "button",
24228
- className: chunkQVQTDWB7_js.cn(BTN, "w-full text-center text-red-400 hover:text-red-300"),
24238
+ className: chunkKA7ST7IH_js.cn(BTN, "w-full text-center text-red-400 hover:text-red-300"),
24229
24239
  disabled: !canEdit,
24230
24240
  onClick: () => onUpdateSlide({
24231
24241
  backgroundColor: void 0,
@@ -24256,7 +24266,7 @@ function TemplateBackgroundCard({
24256
24266
  onGetTemplateBackgroundColor
24257
24267
  }) {
24258
24268
  const { t } = reactI18next.useTranslation();
24259
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkQVQTDWB7_js.cn(CARD, "space-y-2"), children: [
24269
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkKA7ST7IH_js.cn(CARD, "space-y-2"), children: [
24260
24270
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: HEADING, children: t("pptx.slideBackground.templateBackgroundsHeading") }),
24261
24271
  activeSlide.layoutPath && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center gap-2 text-[11px]", children: [
24262
24272
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -24403,7 +24413,7 @@ function InspectorPane(props) {
24403
24413
  } = props;
24404
24414
  const hasSelection = selectedElement !== null;
24405
24415
  const { t } = reactI18next.useTranslation();
24406
- const { dragY, handlers: dragHandlers } = chunkQVQTDWB7_js.useSheetDismissDrag(onClose);
24416
+ const { dragY, handlers: dragHandlers } = chunkKA7ST7IH_js.useSheetDismissDrag(onClose);
24407
24417
  const {
24408
24418
  animationPanelHeight,
24409
24419
  effectiveThemeOptions,
@@ -24424,7 +24434,7 @@ function InspectorPane(props) {
24424
24434
  /* @__PURE__ */ jsxRuntime.jsxs(
24425
24435
  "div",
24426
24436
  {
24427
- className: chunkQVQTDWB7_js.cn(
24437
+ className: chunkKA7ST7IH_js.cn(
24428
24438
  // Shared styles
24429
24439
  "bg-background flex flex-col text-xs text-foreground shadow-xl",
24430
24440
  // Mobile: absolute bottom sheet overlay sized via dvh so it
@@ -24462,7 +24472,7 @@ function InspectorPane(props) {
24462
24472
  ),
24463
24473
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 overflow-y-auto p-3 space-y-3", children: [
24464
24474
  activeTab === "elements" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
24465
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkQVQTDWB7_js.cn(HEADING, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24475
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkKA7ST7IH_js.cn(HEADING, "mb-2"), children: t("pptx.inspector.layerOrder") }),
24466
24476
  activeSlide ? [...activeSlide.elements || []].reverse().map((el, ri) => {
24467
24477
  const idx = (activeSlide.elements || []).length - 1 - ri;
24468
24478
  const sel = selectedElement?.id === el.id || selectedElementIds.includes(el.id);
@@ -24471,7 +24481,7 @@ function InspectorPane(props) {
24471
24481
  "div",
24472
24482
  {
24473
24483
  title: `${el.type} \u2014 ${el.id}`,
24474
- className: chunkQVQTDWB7_js.cn(
24484
+ className: chunkKA7ST7IH_js.cn(
24475
24485
  "flex items-center gap-2 px-2 py-1 rounded cursor-pointer transition-colors",
24476
24486
  sel ? "bg-primary/30 text-primary" : "hover:bg-muted text-foreground"
24477
24487
  ),
@@ -25075,7 +25085,7 @@ function PresentationTouchControls({
25075
25085
  hideNavigation = false
25076
25086
  }) {
25077
25087
  const { t } = reactI18next.useTranslation();
25078
- const { isTouchDevice } = chunkQVQTDWB7_js.useIsMobile();
25088
+ const { isTouchDevice } = chunkKA7ST7IH_js.useIsMobile();
25079
25089
  if (!isTouchDevice) {
25080
25090
  return null;
25081
25091
  }
@@ -25776,7 +25786,7 @@ function PrintDialog({
25776
25786
  defaultFrameSlides
25777
25787
  }) {
25778
25788
  const { t } = reactI18next.useTranslation();
25779
- const { panelStyle, handlers: dragHandlers } = chunkQVQTDWB7_js.useModalDismissDrag(onClose);
25789
+ const { panelStyle, handlers: dragHandlers } = chunkKA7ST7IH_js.useModalDismissDrag(onClose);
25780
25790
  const [printWhat, setPrintWhat] = React14.useState("slides");
25781
25791
  const [orientation, setOrientation] = React14.useState("landscape");
25782
25792
  const [colorMode, setColorMode] = React14.useState("color");
@@ -26305,7 +26315,7 @@ function BroadcastDialog({
26305
26315
  const [serverUrl, setServerUrl] = React14.useState("");
26306
26316
  const [copied, setCopied] = React14.useState(false);
26307
26317
  const dialogRef = React14.useRef(null);
26308
- const { panelStyle, handlers: dragHandlers } = chunkQVQTDWB7_js.useModalDismissDrag(onClose);
26318
+ const { panelStyle, handlers: dragHandlers } = chunkKA7ST7IH_js.useModalDismissDrag(onClose);
26309
26319
  useModalFocus(open, dialogRef, onClose);
26310
26320
  React14.useEffect(() => {
26311
26321
  if (open && !isBroadcasting) {
@@ -26868,7 +26878,7 @@ function ShareDialog({
26868
26878
  const [invitation, setInvitation] = React14.useState("");
26869
26879
  const [copied, setCopied] = React14.useState(false);
26870
26880
  const dialogRef = React14.useRef(null);
26871
- const { panelStyle, handlers: dragHandlers } = chunkQVQTDWB7_js.useModalDismissDrag(onClose);
26881
+ const { panelStyle, handlers: dragHandlers } = chunkKA7ST7IH_js.useModalDismissDrag(onClose);
26872
26882
  useModalFocus(open, dialogRef, onClose);
26873
26883
  React14.useEffect(() => {
26874
26884
  if (activeCollaboration) {
@@ -27143,12 +27153,12 @@ function HyperlinkEditDialog({
27143
27153
  onCancel
27144
27154
  }) {
27145
27155
  const { t } = reactI18next.useTranslation();
27146
- const { panelStyle, handlers: dragHandlers } = chunkQVQTDWB7_js.useModalDismissDrag(onCancel);
27156
+ const { panelStyle, handlers: dragHandlers } = chunkKA7ST7IH_js.useModalDismissDrag(onCancel);
27147
27157
  const inputRef = React14.useRef(null);
27148
- const detectedType = chunkQVQTDWB7_js.detectTargetType(initialUrl, initialAction);
27149
- const emailParts = chunkQVQTDWB7_js.parseEmailUrl(initialUrl || "");
27150
- const detectedSlide = chunkQVQTDWB7_js.parseSlideFromUrl(initialUrl, initialAction);
27151
- const detectedVerb = initialAction ? chunkQVQTDWB7_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
27158
+ const detectedType = chunkKA7ST7IH_js.detectTargetType(initialUrl, initialAction);
27159
+ const emailParts = chunkKA7ST7IH_js.parseEmailUrl(initialUrl || "");
27160
+ const detectedSlide = chunkKA7ST7IH_js.parseSlideFromUrl(initialUrl, initialAction);
27161
+ const detectedVerb = initialAction ? chunkKA7ST7IH_js.ACTION_VERB_MAP[initialAction.toLowerCase()] || "nextSlide" : "nextSlide";
27152
27162
  const [targetType, setTargetType] = React14.useState(detectedType);
27153
27163
  const [url, setUrl] = React14.useState(
27154
27164
  detectedType === "email" || detectedType === "slide" || detectedType === "action" ? "" : initialUrl || ""
@@ -27179,7 +27189,7 @@ function HyperlinkEditDialog({
27179
27189
  actionVerb
27180
27190
  });
27181
27191
  };
27182
- const tabCls = (active) => chunkQVQTDWB7_js.cn(
27192
+ const tabCls = (active) => chunkKA7ST7IH_js.cn(
27183
27193
  "px-3 py-1.5 text-xs rounded-t border-b-2 transition-colors",
27184
27194
  active ? "border-primary text-primary font-medium" : "border-transparent text-muted-foreground hover:text-foreground hover:border-border"
27185
27195
  );
@@ -27569,7 +27579,7 @@ function DrawingOverlaySvg({
27569
27579
  }
27570
27580
  );
27571
27581
  }
27572
- function GridOverlay({ canvasSize, gridSpacingPx = chunkQVQTDWB7_js.GRID_SIZE, visible }) {
27582
+ function GridOverlay({ canvasSize, gridSpacingPx = chunkKA7ST7IH_js.GRID_SIZE, visible }) {
27573
27583
  const spacing = Math.max(gridSpacingPx, 2);
27574
27584
  const patternId = React14.useMemo(() => `grid-dot-pattern-${Math.random().toString(36).slice(2, 8)}`, []);
27575
27585
  if (!visible) {
@@ -28850,7 +28860,7 @@ function ViewerBottomPanels({
28850
28860
  hideStatusBar = false,
28851
28861
  hiddenActions
28852
28862
  }) {
28853
- const { isHidden } = chunkQVQTDWB7_js.useToolbarVisibility(hiddenActions);
28863
+ const { isHidden } = chunkKA7ST7IH_js.useToolbarVisibility(hiddenActions);
28854
28864
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
28855
28865
  onResizeBottom && !isSlideNotesCollapsed && /* @__PURE__ */ jsxRuntime.jsx(ResizeHandle, { direction: "vertical", onResize: onResizeBottom }),
28856
28866
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -29069,7 +29079,7 @@ function scopeLayoutOptionsToActiveSlide(options, activeSlide) {
29069
29079
  function TitleBar(p) {
29070
29080
  const { t } = reactI18next.useTranslation();
29071
29081
  const editing = (p.mode === "edit" || p.mode === "master") && p.canEdit;
29072
- const { isHidden } = chunkQVQTDWB7_js.useToolbarVisibility(p.hiddenActions);
29082
+ const { isHidden } = chunkKA7ST7IH_js.useToolbarVisibility(p.hiddenActions);
29073
29083
  const [searchQuery, setSearchQuery] = React14.useState("");
29074
29084
  const [searchFocused, setSearchFocused] = React14.useState(false);
29075
29085
  const searchRef = React14.useRef(null);
@@ -29125,7 +29135,7 @@ function TitleBar(p) {
29125
29135
  role: "switch",
29126
29136
  "aria-checked": p.autosaveEnabled,
29127
29137
  onClick: p.onToggleAutosave,
29128
- className: chunkQVQTDWB7_js.cn(
29138
+ className: chunkKA7ST7IH_js.cn(
29129
29139
  chunkVSNXVKJI_js.TITLE_BAR_CLASSES.toggleTrack,
29130
29140
  p.autosaveEnabled ? chunkVSNXVKJI_js.TITLE_BAR_CLASSES.toggleTrackOn : chunkVSNXVKJI_js.TITLE_BAR_CLASSES.toggleTrackOff
29131
29141
  ),
@@ -29134,7 +29144,7 @@ function TitleBar(p) {
29134
29144
  children: /* @__PURE__ */ jsxRuntime.jsx(
29135
29145
  "span",
29136
29146
  {
29137
- className: chunkQVQTDWB7_js.cn(
29147
+ className: chunkKA7ST7IH_js.cn(
29138
29148
  chunkVSNXVKJI_js.TITLE_BAR_CLASSES.toggleKnob,
29139
29149
  p.autosaveEnabled ? chunkVSNXVKJI_js.TITLE_BAR_CLASSES.toggleKnobOn : chunkVSNXVKJI_js.TITLE_BAR_CLASSES.toggleKnobOff
29140
29150
  )
@@ -29189,7 +29199,7 @@ function TitleBar(p) {
29189
29199
  /* @__PURE__ */ jsxRuntime.jsx(
29190
29200
  "span",
29191
29201
  {
29192
- className: chunkQVQTDWB7_js.cn(
29202
+ className: chunkKA7ST7IH_js.cn(
29193
29203
  chunkVSNXVKJI_js.TITLE_BAR_CLASSES.statusText,
29194
29204
  p.autosaveStatus?.state === "error" && p.autosaveEnabled && chunkVSNXVKJI_js.TITLE_BAR_CLASSES.statusError,
29195
29205
  p.autosaveStatus?.state === "saving" && p.autosaveEnabled && chunkVSNXVKJI_js.TITLE_BAR_CLASSES.statusSaving
@@ -29203,7 +29213,7 @@ function TitleBar(p) {
29203
29213
  /* @__PURE__ */ jsxRuntime.jsxs(
29204
29214
  "div",
29205
29215
  {
29206
- className: chunkQVQTDWB7_js.cn(
29216
+ className: chunkKA7ST7IH_js.cn(
29207
29217
  chunkVSNXVKJI_js.TITLE_BAR_CLASSES.searchBox,
29208
29218
  (searchFocused || p.findReplaceOpen) && "text-foreground bg-background"
29209
29219
  ),
@@ -29803,7 +29813,7 @@ function EquationEditorDialog({
29803
29813
  existingOmml
29804
29814
  }) {
29805
29815
  const { t } = reactI18next.useTranslation();
29806
- const { panelStyle, handlers: dragHandlers } = chunkQVQTDWB7_js.useModalDismissDrag(onClose);
29816
+ const { panelStyle, handlers: dragHandlers } = chunkKA7ST7IH_js.useModalDismissDrag(onClose);
29807
29817
  const initialLatex = React14.useMemo(() => {
29808
29818
  if (!existingOmml) {
29809
29819
  return "";
@@ -29936,7 +29946,7 @@ function EquationEditorDialog({
29936
29946
  {
29937
29947
  type: "button",
29938
29948
  onClick: () => handleTemplateClick(tmpl.latex),
29939
- className: chunkQVQTDWB7_js.cn(
29949
+ className: chunkKA7ST7IH_js.cn(
29940
29950
  "flex flex-col items-center gap-1 p-2 rounded-lg border transition-colors",
29941
29951
  latex === tmpl.latex ? "border-primary bg-primary/10" : "border-border bg-muted/40 hover:bg-accent/60 hover:border-border"
29942
29952
  ),
@@ -30035,7 +30045,7 @@ function InsertSmartArtDialog({
30035
30045
  onInsert
30036
30046
  }) {
30037
30047
  const { t } = reactI18next.useTranslation();
30038
- const { panelStyle, handlers: dragHandlers } = chunkQVQTDWB7_js.useModalDismissDrag(onClose);
30048
+ const { panelStyle, handlers: dragHandlers } = chunkKA7ST7IH_js.useModalDismissDrag(onClose);
30039
30049
  const [activeCategory, setActiveCategory] = React14.useState("list");
30040
30050
  const [selectedLayout, setSelectedLayout] = React14.useState(null);
30041
30051
  const dialogRef = React14.useRef(null);
@@ -30116,7 +30126,7 @@ function InsertSmartArtDialog({
30116
30126
  setActiveCategory(cat.id);
30117
30127
  setSelectedLayout(null);
30118
30128
  },
30119
- className: chunkQVQTDWB7_js.cn(
30129
+ className: chunkKA7ST7IH_js.cn(
30120
30130
  "w-full text-left px-3 py-1.5 text-xs transition-colors",
30121
30131
  activeCategory === cat.id ? "bg-primary text-white" : "text-foreground hover:bg-muted"
30122
30132
  ),
@@ -30144,7 +30154,7 @@ function InsertSmartArtDialog({
30144
30154
  onInsert(preset.layout, preset.defaultItems);
30145
30155
  onClose();
30146
30156
  },
30147
- className: chunkQVQTDWB7_js.cn(
30157
+ className: chunkKA7ST7IH_js.cn(
30148
30158
  "flex flex-col items-center gap-1 p-2 rounded border transition-colors",
30149
30159
  selectedLayout === preset.layout ? "border-primary bg-primary/20" : "border-border hover:border-border hover:bg-muted/50"
30150
30160
  ),
@@ -30174,7 +30184,7 @@ function InsertSmartArtDialog({
30174
30184
  type: "button",
30175
30185
  onClick: handleInsert,
30176
30186
  disabled: !selectedLayout,
30177
- className: chunkQVQTDWB7_js.cn(
30187
+ className: chunkKA7ST7IH_js.cn(
30178
30188
  "px-3 py-1.5 text-xs rounded transition-colors",
30179
30189
  selectedLayout ? "bg-primary hover:bg-primary/80 text-white" : "bg-muted text-muted-foreground cursor-not-allowed"
30180
30190
  ),
@@ -30476,7 +30486,7 @@ function ViewerCanvasArea(props) {
30476
30486
  hiddenActions
30477
30487
  } = props;
30478
30488
  const { t } = reactI18next.useTranslation();
30479
- const { isHidden } = chunkQVQTDWB7_js.useToolbarVisibility(hiddenActions);
30489
+ const { isHidden } = chunkKA7ST7IH_js.useToolbarVisibility(hiddenActions);
30480
30490
  const effectiveSlide = mode === "master" ? masterPseudoSlide : activeSlide;
30481
30491
  const effectiveTemplateElements = mode === "master" ? s.activeLayout ? s.activeMaster?.elements ?? [] : [] : templateElements;
30482
30492
  const fieldContext = React14.useMemo(() => {
@@ -30565,7 +30575,7 @@ function ViewerCanvasArea(props) {
30565
30575
  s.setActiveSlideIndex((i) => Math.max(0, i - 1));
30566
30576
  }
30567
30577
  }, [mode, presentation, s]);
30568
- const swipe = chunkQVQTDWB7_js.useSwipeNavigation({
30578
+ const swipe = chunkKA7ST7IH_js.useSwipeNavigation({
30569
30579
  enabled: swipeEnabled,
30570
30580
  onNext: handleSwipeNext,
30571
30581
  onPrev: handleSwipePrev
@@ -31353,7 +31363,7 @@ function MobileDismissSheet({
31353
31363
  className,
31354
31364
  children
31355
31365
  }) {
31356
- const { dragY, handlers } = chunkQVQTDWB7_js.useSheetDismissDrag(onClose);
31366
+ const { dragY, handlers } = chunkKA7ST7IH_js.useSheetDismissDrag(onClose);
31357
31367
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31358
31368
  /* @__PURE__ */ jsxRuntime.jsx(
31359
31369
  "button",
@@ -31622,7 +31632,7 @@ function ThemeThumbnail({
31622
31632
  {
31623
31633
  type: "button",
31624
31634
  onClick,
31625
- className: chunkQVQTDWB7_js.cn(
31635
+ className: chunkKA7ST7IH_js.cn(
31626
31636
  "group relative flex flex-col rounded-lg border-2 transition-all overflow-hidden",
31627
31637
  selected ? "border-primary shadow-lg scale-[1.02]" : "border-border hover:border-primary/50 hover:shadow-md"
31628
31638
  ),
@@ -32256,7 +32266,7 @@ function MobileBottomBar({
32256
32266
  {
32257
32267
  type: "button",
32258
32268
  onClick,
32259
- className: chunkQVQTDWB7_js.cn(
32269
+ className: chunkKA7ST7IH_js.cn(
32260
32270
  "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",
32261
32271
  active ? "text-primary" : "text-muted-foreground hover:text-foreground"
32262
32272
  ),
@@ -32304,7 +32314,7 @@ function MobileChromeOverlay(props) {
32304
32314
  canEdit,
32305
32315
  commentCount
32306
32316
  } = props;
32307
- const { keyboardInset, isKeyboardOpen } = chunkQVQTDWB7_js.useKeyboardInsets();
32317
+ const { keyboardInset, isKeyboardOpen } = chunkKA7ST7IH_js.useKeyboardInsets();
32308
32318
  const activeSheet = s.isSlidesPaneOpen ? "slides" : s.isInspectorPaneOpen ? s.sidebarPanelMode === "comments" ? "comments" : "inspector" : !s.isSlideNotesCollapsed ? "notes" : null;
32309
32319
  const closeAllSheets = () => {
32310
32320
  s.setIsSlidesPaneOpen(false);
@@ -32404,7 +32414,7 @@ function SettingsAppearanceTab({
32404
32414
  type: "button",
32405
32415
  onClick: () => onSelectTheme(entry.key),
32406
32416
  "aria-pressed": isActive,
32407
- className: chunkQVQTDWB7_js.cn(
32417
+ className: chunkKA7ST7IH_js.cn(
32408
32418
  "flex items-center gap-3 rounded-lg border px-3 py-2.5 text-left transition-colors",
32409
32419
  isActive ? "border-primary bg-primary/10" : "border-border hover:border-primary/50 hover:bg-accent"
32410
32420
  ),
@@ -32421,7 +32431,7 @@ function SettingsAppearanceTab({
32421
32431
  /* @__PURE__ */ jsxRuntime.jsx(
32422
32432
  "span",
32423
32433
  {
32424
- className: chunkQVQTDWB7_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
32434
+ className: chunkKA7ST7IH_js.cn("text-xs font-medium", isActive ? "text-primary" : "text-foreground"),
32425
32435
  children: t(entry.labelKey)
32426
32436
  }
32427
32437
  )
@@ -32444,7 +32454,7 @@ function SettingsLanguageTab({
32444
32454
  type: "button",
32445
32455
  onClick: () => onSelectLocale(locale.code),
32446
32456
  "aria-pressed": isActive,
32447
- className: chunkQVQTDWB7_js.cn(
32457
+ className: chunkKA7ST7IH_js.cn(
32448
32458
  "flex w-full items-center justify-between rounded px-3 py-2.5 text-left transition-colors",
32449
32459
  isActive ? "bg-primary/10 text-primary" : "text-foreground hover:bg-accent"
32450
32460
  ),
@@ -32469,7 +32479,7 @@ function ToggleSwitch({
32469
32479
  {
32470
32480
  type: "button",
32471
32481
  onClick: onToggle,
32472
- className: chunkQVQTDWB7_js.cn(
32482
+ className: chunkKA7ST7IH_js.cn(
32473
32483
  "relative inline-flex h-5 w-9 items-center rounded-full transition-colors",
32474
32484
  enabled ? "bg-primary" : "bg-muted-foreground/30"
32475
32485
  ),
@@ -32479,7 +32489,7 @@ function ToggleSwitch({
32479
32489
  children: /* @__PURE__ */ jsxRuntime.jsx(
32480
32490
  "span",
32481
32491
  {
32482
- className: chunkQVQTDWB7_js.cn(
32492
+ className: chunkKA7ST7IH_js.cn(
32483
32493
  "inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform",
32484
32494
  enabled ? "translate-x-[18px]" : "translate-x-[3px]"
32485
32495
  )
@@ -32503,7 +32513,7 @@ function SettingsDialog({
32503
32513
  }) {
32504
32514
  const [activeTab, setActiveTab] = React14.useState("general");
32505
32515
  const { t } = reactI18next.useTranslation();
32506
- const { panelStyle, handlers: dragHandlers } = chunkQVQTDWB7_js.useModalDismissDrag(onClose);
32516
+ const { panelStyle, handlers: dragHandlers } = chunkKA7ST7IH_js.useModalDismissDrag(onClose);
32507
32517
  const handleKeyDown = React14.useCallback(
32508
32518
  (e) => {
32509
32519
  if (e.key === "Escape") {
@@ -32577,7 +32587,7 @@ function SettingsDialog({
32577
32587
  {
32578
32588
  type: "button",
32579
32589
  onClick: () => setActiveTab(tab.id),
32580
- className: chunkQVQTDWB7_js.cn(
32590
+ className: chunkKA7ST7IH_js.cn(
32581
32591
  "px-3 py-2 text-xs font-medium transition-colors relative",
32582
32592
  activeTab === tab.id ? "text-primary" : "text-muted-foreground hover:text-foreground"
32583
32593
  ),
@@ -32614,10 +32624,10 @@ function SettingsDialog({
32614
32624
  onSelectLocale
32615
32625
  }
32616
32626
  ),
32617
- activeTab === "shortcuts" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: chunkQVQTDWB7_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut, i) => /* @__PURE__ */ jsxRuntime.jsxs(
32627
+ activeTab === "shortcuts" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", children: chunkKA7ST7IH_js.SHORTCUT_REFERENCE_ITEMS.map((shortcut, i) => /* @__PURE__ */ jsxRuntime.jsxs(
32618
32628
  "div",
32619
32629
  {
32620
- className: chunkQVQTDWB7_js.cn(
32630
+ className: chunkKA7ST7IH_js.cn(
32621
32631
  "flex items-center justify-between gap-3 rounded px-3 py-2",
32622
32632
  i % 2 === 0 ? "bg-muted/60" : ""
32623
32633
  ),
@@ -32759,8 +32769,8 @@ var PowerPointViewer = React14.forwardRef(
32759
32769
  const [isHeaderFooterOpen, setIsHeaderFooterOpen] = React14.useState(false);
32760
32770
  const [autosaveEnabled, setAutosaveEnabled] = React14.useState(true);
32761
32771
  const [isShareDialogOpen, setIsShareDialogOpen] = React14.useState(false);
32762
- const { reducedMotion, toggleReducedMotion } = chunkQVQTDWB7_js.useReducedMotion();
32763
- const state = chunkQVQTDWB7_js.useViewerState({ content, canEdit });
32772
+ const { reducedMotion, toggleReducedMotion } = chunkKA7ST7IH_js.useReducedMotion();
32773
+ const state = chunkKA7ST7IH_js.useViewerState({ content, canEdit });
32764
32774
  const {
32765
32775
  containerRef,
32766
32776
  mode,
@@ -32820,10 +32830,10 @@ var PowerPointViewer = React14.forwardRef(
32820
32830
  },
32821
32831
  [state, reducedMotion, toggleReducedMotion]
32822
32832
  );
32823
- const mobile = chunkQVQTDWB7_js.useIsMobile({ containerRef });
32833
+ const mobile = chunkKA7ST7IH_js.useIsMobile({ containerRef });
32824
32834
  const { isMobile, isTouchDevice, isVirtualKeyboardOpen } = mobile;
32825
- const resizablePanels = chunkQVQTDWB7_js.useResizablePanels();
32826
- const { gridSpacingPx, visibleSlideIndexes, slideSectionGroups, masterPseudoSlide } = chunkQVQTDWB7_js.useDerivedSlideState({
32835
+ const resizablePanels = chunkKA7ST7IH_js.useResizablePanels();
32836
+ const { gridSpacingPx, visibleSlideIndexes, slideSectionGroups, masterPseudoSlide } = chunkKA7ST7IH_js.useDerivedSlideState({
32827
32837
  slides,
32828
32838
  sections: state.sections,
32829
32839
  customShows: state.customShows,
@@ -32845,11 +32855,11 @@ var PowerPointViewer = React14.forwardRef(
32845
32855
  state.isDrawingRef
32846
32856
  ]
32847
32857
  );
32848
- const zoom = chunkQVQTDWB7_js.useZoomViewport({
32858
+ const zoom = chunkKA7ST7IH_js.useZoomViewport({
32849
32859
  canvasSize,
32850
32860
  selectedElements: state.selectedElements
32851
32861
  });
32852
- const history = chunkQVQTDWB7_js.useEditorHistory({
32862
+ const history = chunkKA7ST7IH_js.useEditorHistory({
32853
32863
  slides,
32854
32864
  canvasSize,
32855
32865
  activeSlideIndex,
@@ -32871,7 +32881,7 @@ var PowerPointViewer = React14.forwardRef(
32871
32881
  setEditTemplateMode: state.setEditTemplateMode,
32872
32882
  setHeaderFooter: state.setHeaderFooter
32873
32883
  });
32874
- const { presentation, annotations, actionSoundHandlerRef } = chunkQVQTDWB7_js.usePresentationSetup({
32884
+ const { presentation, annotations, actionSoundHandlerRef } = chunkKA7ST7IH_js.usePresentationSetup({
32875
32885
  mode,
32876
32886
  slides,
32877
32887
  visibleSlideIndexes,
@@ -32885,7 +32895,7 @@ var PowerPointViewer = React14.forwardRef(
32885
32895
  setSlides: state.setSlides,
32886
32896
  history
32887
32897
  });
32888
- chunkQVQTDWB7_js.useTouchGestures({
32898
+ chunkKA7ST7IH_js.useTouchGestures({
32889
32899
  targetRef: zoom.canvasViewportRef,
32890
32900
  currentScale: zoom.scale,
32891
32901
  callbacks: {
@@ -32907,7 +32917,7 @@ var PowerPointViewer = React14.forwardRef(
32907
32917
  },
32908
32918
  enabled: isTouchDevice
32909
32919
  });
32910
- const dialogs = chunkQVQTDWB7_js.useViewerDialogs({
32920
+ const dialogs = chunkKA7ST7IH_js.useViewerDialogs({
32911
32921
  mode,
32912
32922
  slides,
32913
32923
  activeSlide,
@@ -32948,7 +32958,7 @@ var PowerPointViewer = React14.forwardRef(
32948
32958
  zoom.handleZoomToFit();
32949
32959
  zoom.canvasViewportRef.current?.scrollTo({ left: 0, top: 0 });
32950
32960
  }, [mode]);
32951
- const editorOps = chunkQVQTDWB7_js.useEditorOperations({
32961
+ const editorOps = chunkKA7ST7IH_js.useEditorOperations({
32952
32962
  state,
32953
32963
  history,
32954
32964
  zoom,
@@ -32980,7 +32990,7 @@ var PowerPointViewer = React14.forwardRef(
32980
32990
  autosaveStatus,
32981
32991
  isEncryptedDialogOpen,
32982
32992
  setIsEncryptedDialogOpen
32983
- } = chunkQVQTDWB7_js.useViewerIntegration({
32993
+ } = chunkKA7ST7IH_js.useViewerIntegration({
32984
32994
  state,
32985
32995
  zoom,
32986
32996
  history,
@@ -33340,7 +33350,7 @@ function CollaborationDocumentSync({
33340
33350
  }
33341
33351
  return bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
33342
33352
  }, []);
33343
- chunkQVQTDWB7_js.useYjsDocumentSync({
33353
+ chunkKA7ST7IH_js.useYjsDocumentSync({
33344
33354
  doc: collab?.doc ?? null,
33345
33355
  slides,
33346
33356
  templateElementsBySlideId,
@@ -33358,13 +33368,13 @@ function CollaborationFollowLayer({
33358
33368
  slideCount
33359
33369
  }) {
33360
33370
  const collab = useCollaboration();
33361
- const { followedClientId, followUser } = chunkQVQTDWB7_js.useFollowMode({
33371
+ const { followedClientId, followUser } = chunkKA7ST7IH_js.useFollowMode({
33362
33372
  collab,
33363
33373
  activeSlideIndex,
33364
33374
  setActiveSlideIndex,
33365
33375
  slideCount
33366
33376
  });
33367
- chunkQVQTDWB7_js.useBroadcastFollower({
33377
+ chunkKA7ST7IH_js.useBroadcastFollower({
33368
33378
  collab,
33369
33379
  activeSlideIndex,
33370
33380
  setActiveSlideIndex,