pptx-react-viewer 2.6.5 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{AiChatPanel-GMP3TU7S.js → AiChatPanel-G6DKXSM3.js} +22 -22
  3. package/dist/AiChatPanel-G6DKXSM3.js.br +0 -0
  4. package/dist/AiChatPanel-G6DKXSM3.js.gz +0 -0
  5. package/dist/{AiChatPanel-5JEL2M7L.mjs → AiChatPanel-J5IGSCYA.mjs} +3 -3
  6. package/dist/AiChatPanel-J5IGSCYA.mjs.br +0 -0
  7. package/dist/AiChatPanel-J5IGSCYA.mjs.gz +0 -0
  8. package/dist/{Model3DScene-LPA4HGFY.mjs → Model3DScene-ID6CQKEJ.mjs} +1 -1
  9. package/dist/Model3DScene-ID6CQKEJ.mjs.br +0 -0
  10. package/dist/Model3DScene-ID6CQKEJ.mjs.gz +0 -0
  11. package/dist/{Model3DScene-E4WWASL7.js → Model3DScene-S7LKZ6IA.js} +2 -2
  12. package/dist/Model3DScene-S7LKZ6IA.js.br +0 -0
  13. package/dist/Model3DScene-S7LKZ6IA.js.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-JT64KYVP.mjs → SurfaceChart3DScene-V5H6MXYW.mjs} +1 -1
  15. package/dist/{SurfaceChart3DScene-JT64KYVP.mjs.br → SurfaceChart3DScene-V5H6MXYW.mjs.br} +0 -0
  16. package/dist/SurfaceChart3DScene-V5H6MXYW.mjs.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-EOJ6FO7H.js → SurfaceChart3DScene-XSJXJM6H.js} +2 -2
  18. package/dist/SurfaceChart3DScene-XSJXJM6H.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-XSJXJM6H.js.gz +0 -0
  20. package/dist/{chunk-Z2ZC5QTJ.js → chunk-2LOBDOTK.js} +165 -22
  21. package/dist/chunk-2LOBDOTK.js.br +0 -0
  22. package/dist/chunk-2LOBDOTK.js.gz +0 -0
  23. package/dist/{chunk-CZPAFVPN.js → chunk-4KMTZLNS.js} +315 -315
  24. package/dist/chunk-4KMTZLNS.js.br +0 -0
  25. package/dist/chunk-4KMTZLNS.js.gz +0 -0
  26. package/dist/{chunk-D754TQ4S.js → chunk-6C4UY7GX.js} +3 -3
  27. package/dist/chunk-6C4UY7GX.js.br +0 -0
  28. package/dist/chunk-6C4UY7GX.js.gz +0 -0
  29. package/dist/{chunk-NZYSI3BL.js → chunk-B4XJTZR4.js} +253 -243
  30. package/dist/chunk-B4XJTZR4.js.br +0 -0
  31. package/dist/chunk-B4XJTZR4.js.gz +0 -0
  32. package/dist/{chunk-FBVQ453Z.js → chunk-GLQFRVAN.js} +851 -845
  33. package/dist/chunk-GLQFRVAN.js.br +0 -0
  34. package/dist/chunk-GLQFRVAN.js.gz +0 -0
  35. package/dist/{chunk-A3WQ6JDW.mjs → chunk-IGKLB7NQ.mjs} +20 -10
  36. package/dist/chunk-IGKLB7NQ.mjs.br +0 -0
  37. package/dist/chunk-IGKLB7NQ.mjs.gz +0 -0
  38. package/dist/{chunk-HHUBO5OD.mjs → chunk-SOLHDKNK.mjs} +1 -1
  39. package/dist/chunk-SOLHDKNK.mjs.br +0 -0
  40. package/dist/chunk-SOLHDKNK.mjs.gz +0 -0
  41. package/dist/{chunk-GMW7VRFD.mjs → chunk-WH46JCNF.mjs} +165 -22
  42. package/dist/chunk-WH46JCNF.mjs.br +0 -0
  43. package/dist/chunk-WH46JCNF.mjs.gz +0 -0
  44. package/dist/{chunk-2QSHMCJH.mjs → chunk-Y4EB65WB.mjs} +15 -9
  45. package/dist/chunk-Y4EB65WB.mjs.br +0 -0
  46. package/dist/chunk-Y4EB65WB.mjs.gz +0 -0
  47. package/dist/{chunk-MVXW7BHH.mjs → chunk-YUHEJWUN.mjs} +2 -2
  48. package/dist/chunk-YUHEJWUN.mjs.br +0 -0
  49. package/dist/chunk-YUHEJWUN.mjs.gz +0 -0
  50. package/dist/index.js +34 -34
  51. package/dist/index.js.br +0 -0
  52. package/dist/index.js.gz +0 -0
  53. package/dist/index.mjs +5 -5
  54. package/dist/index.mjs.br +0 -0
  55. package/dist/index.mjs.gz +0 -0
  56. package/dist/internals.js +78 -78
  57. package/dist/internals.js.br +0 -0
  58. package/dist/internals.js.gz +0 -0
  59. package/dist/internals.mjs +3 -3
  60. package/dist/internals.mjs.br +0 -0
  61. package/dist/internals.mjs.gz +0 -0
  62. package/dist/viewer/index.js +21 -21
  63. package/dist/viewer/index.js.br +0 -0
  64. package/dist/viewer/index.js.gz +0 -0
  65. package/dist/viewer/index.mjs +5 -5
  66. package/dist/viewer/index.mjs.br +0 -0
  67. package/dist/viewer/index.mjs.gz +0 -0
  68. package/package.json +1 -1
  69. package/dist/AiChatPanel-5JEL2M7L.mjs.br +0 -0
  70. package/dist/AiChatPanel-5JEL2M7L.mjs.gz +0 -0
  71. package/dist/AiChatPanel-GMP3TU7S.js.br +0 -0
  72. package/dist/AiChatPanel-GMP3TU7S.js.gz +0 -0
  73. package/dist/Model3DScene-E4WWASL7.js.br +0 -0
  74. package/dist/Model3DScene-E4WWASL7.js.gz +0 -0
  75. package/dist/Model3DScene-LPA4HGFY.mjs.br +0 -0
  76. package/dist/Model3DScene-LPA4HGFY.mjs.gz +0 -0
  77. package/dist/SurfaceChart3DScene-EOJ6FO7H.js.br +0 -0
  78. package/dist/SurfaceChart3DScene-EOJ6FO7H.js.gz +0 -0
  79. package/dist/SurfaceChart3DScene-JT64KYVP.mjs.gz +0 -0
  80. package/dist/chunk-2QSHMCJH.mjs.br +0 -0
  81. package/dist/chunk-2QSHMCJH.mjs.gz +0 -0
  82. package/dist/chunk-A3WQ6JDW.mjs.br +0 -0
  83. package/dist/chunk-A3WQ6JDW.mjs.gz +0 -0
  84. package/dist/chunk-CZPAFVPN.js.br +0 -0
  85. package/dist/chunk-CZPAFVPN.js.gz +0 -0
  86. package/dist/chunk-D754TQ4S.js.br +0 -0
  87. package/dist/chunk-D754TQ4S.js.gz +0 -0
  88. package/dist/chunk-FBVQ453Z.js.br +0 -0
  89. package/dist/chunk-FBVQ453Z.js.gz +0 -0
  90. package/dist/chunk-GMW7VRFD.mjs.br +0 -0
  91. package/dist/chunk-GMW7VRFD.mjs.gz +0 -0
  92. package/dist/chunk-HHUBO5OD.mjs.br +0 -0
  93. package/dist/chunk-HHUBO5OD.mjs.gz +0 -0
  94. package/dist/chunk-MVXW7BHH.mjs.br +0 -0
  95. package/dist/chunk-MVXW7BHH.mjs.gz +0 -0
  96. package/dist/chunk-NZYSI3BL.js.br +0 -0
  97. package/dist/chunk-NZYSI3BL.js.gz +0 -0
  98. package/dist/chunk-Z2ZC5QTJ.js.br +0 -0
  99. package/dist/chunk-Z2ZC5QTJ.js.gz +0 -0
Binary file
Binary file
@@ -1,5 +1,5 @@
1
1
  import { translationsEn } from './chunk-Z6HIZWIQ.mjs';
2
- import { SHAPE_PRESET_DEFS, computeValueRangeForChart, getAnimationInitialStyle, cloneHistorySnapshot, hasShapeProperties, isTemplateElement, isImageLikeElement, clampCropValue, parseMediaCommand, hasTextProperties, normalizeHexColor, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, computeAutoFitTextStyle, resolveLineHeight, getKinsokuLineBreakStyles, buildTextBody3DSceneStyle, resolveParagraphRtl, resolveParagraphAlign, resolveCssTextAlign, resolveParagraphStrutFontSize, colorWithOpacity, build3DExtrusionData, getResolvedShapeClipPath, normalizeStrokeDashType, buildCssGradientFromShapeStyle, buildShadowCssFromShapeStyle, buildInnerShadowCssFromShapeStyle, buildMultiLayerShadowCss, buildGlowBoxShadow, getCompoundLineBoxShadow, getSoftEdgeFilterId, getEffectDagFilter, buildPatternFillCss, buildReflectionCss, getCssBorderDashStyle, getCompoundLineBorderWidth, getSvgStrokeDasharray, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, svgLineCap, getCompoundLineOffsets, getCompoundLineWidths, computeSelectionRect, rectToCells, isCellInRect, buildChartViewModel, buildNotesPdfBytes, buildSlidesPdfBytes, buildPreviewAnimation, getRoundRectRadiusPx, substituteFieldText, resolveUnderlineDecorationStyle, getSubstituteFontFamily, hasDistinctScriptFonts, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, TEXT_BUILD_ID_SEP, buildTextBuildSpec, textBuildSpanStyle, evaluatePresetShape, apply3dEffects, clampUnitInterval, customGeometryPathsToSvgSubpaths, computeColumnBoundaries, parseDrawingColor, parseDrawingColorOpacity, getCellDiagonalBorders, getPatternSvg, ooxmlDashToCssBorderStyle, cell3DBevelCss, getChartStylePalette, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, resolvePictureBullet, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, resolveFontRefIdx, tintColor2, shadeColor2, ooxmlGradientAngleToCssDegrees, segmentByScript, resolveFontForScript, generateLogTicks, formatAxisValueWithUnits, getDisplayUnitLabel, hexToRgbChannels, chartPartToAttrs } from './chunk-GMW7VRFD.mjs';
2
+ import { SHAPE_PRESET_DEFS, computeValueRangeForChart, getAnimationInitialStyle, cloneHistorySnapshot, hasShapeProperties, isTemplateElement, isImageLikeElement, clampCropValue, parseMediaCommand, hasTextProperties, normalizeHexColor, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, computeAutoFitTextStyle, resolveLineHeight, getKinsokuLineBreakStyles, buildTextBody3DSceneStyle, resolveParagraphRtl, resolveParagraphAlign, resolveCssTextAlign, resolveParagraphStrutFontSize, colorWithOpacity, build3DExtrusionData, getResolvedShapeClipPath, normalizeStrokeDashType, buildCssGradientFromShapeStyle, buildShadowCssFromShapeStyle, buildInnerShadowCssFromShapeStyle, buildMultiLayerShadowCss, buildGlowBoxShadow, getCompoundLineBoxShadow, getSoftEdgeFilterId, getEffectDagFilter, buildPatternFillCss, buildReflectionCss, getCssBorderDashStyle, getCompoundLineBorderWidth, getSvgStrokeDasharray, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, svgLineCap, getCompoundLineOffsets, getCompoundLineWidths, computeSelectionRect, rectToCells, isCellInRect, buildChartViewModel, buildNotesPdfBytes, buildSlidesPdfBytes, buildPreviewAnimation, getRoundRectRadiusPx, substituteFieldText, resolveUnderlineDecorationStyle, getSubstituteFontFamily, hasDistinctScriptFonts, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, TEXT_BUILD_ID_SEP, buildTextBuildSpec, textBuildSpanStyle, evaluatePresetShape, apply3dEffects, clampUnitInterval, customGeometryPathsToSvgSubpaths, computeColumnBoundaries, parseDrawingColor, parseDrawingColorOpacity, getCellDiagonalBorders, getPatternSvg, ooxmlDashToCssBorderStyle, cell3DBevelCss, getChartStylePalette, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, resolvePictureBullet, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, resolveFontRefIdx, tintColor2, shadeColor2, ooxmlGradientAngleToCssDegrees, segmentByScript, resolveFontForScript, generateLogTicks, formatAxisValueWithUnits, getDisplayUnitLabel, hexToRgbChannels, chartPartToAttrs } from './chunk-WH46JCNF.mjs';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  import React6, { useState, useEffect, useMemo, Suspense, useRef, useCallback, useLayoutEffect } from 'react';
@@ -1859,7 +1859,7 @@ function renderPictureBullet(elementId, segmentIndex, bulletInfo, baseFontSize)
1859
1859
  `${elementId}-seg-${segmentIndex}-bullet-img`
1860
1860
  );
1861
1861
  }
1862
- function renderSingleSegment(element, segment, segmentIndex, fallbackColor, findHighlights, bulletInfo, onHyperlinkClick, fieldContext, paragraphRtl, requireCtrlClick) {
1862
+ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, findHighlights, bulletInfo, onHyperlinkClick, fieldContext, paragraphRtl, requireCtrlClick, bulletHangPx) {
1863
1863
  if (segment.equationXml) {
1864
1864
  return renderEquationSegment(
1865
1865
  element.id,
@@ -1869,7 +1869,8 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
1869
1869
  );
1870
1870
  }
1871
1871
  const segmentStyle = segment.style || {};
1872
- const textValue = substituteFieldText(segment.text || "", segment.fieldType, fieldContext);
1872
+ const rawText = bulletInfo && typeof bulletHangPx === "number" ? (segment.text || "").trimEnd() : segment.text || "";
1873
+ const textValue = substituteFieldText(rawText, segment.fieldType, fieldContext);
1873
1874
  const lines = textValue.split("\n");
1874
1875
  const textDecorationTokens = [];
1875
1876
  if (segmentStyle.underline || segmentStyle.hyperlink) {
@@ -1951,6 +1952,11 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
1951
1952
  if (bulletInfo.color) {
1952
1953
  spanStyle.color = normalizeHexColor(bulletInfo.color, resolvedSegmentColor);
1953
1954
  }
1955
+ if (typeof bulletHangPx === "number" && bulletHangPx > 0) {
1956
+ spanStyle.display = "inline-block";
1957
+ spanStyle.minWidth = bulletHangPx;
1958
+ spanStyle.textIndent = 0;
1959
+ }
1954
1960
  }
1955
1961
  if (bulletInfo?.imageDataUrl || bulletInfo?.imageRelId) {
1956
1962
  return renderPictureBullet(element.id, segmentIndex, bulletInfo, baseFontSize);
@@ -2072,14 +2078,14 @@ function groupSegmentsIntoParagraphs(segments) {
2072
2078
  for (let i = 0; i < segments.length; i++) {
2073
2079
  const seg = segments[i];
2074
2080
  if (seg.text === "\n") {
2075
- paragraphs.push(current);
2081
+ paragraphs.push({ entries: current, terminator: seg });
2076
2082
  current = [];
2077
2083
  } else {
2078
2084
  current.push({ segment: seg, globalIndex: i });
2079
2085
  }
2080
2086
  }
2081
2087
  if (current.length > 0 || paragraphs.length === 0) {
2082
- paragraphs.push(current);
2088
+ paragraphs.push({ entries: current });
2083
2089
  }
2084
2090
  return paragraphs;
2085
2091
  }
@@ -2110,7 +2116,7 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
2110
2116
  const elementAlign = hasTextProperties(element) ? element.textStyle?.align : void 0;
2111
2117
  const bodyStyle = hasTextProperties(element) ? element.textStyle : void 0;
2112
2118
  const spaceFirstLast = bodyStyle?.spaceFirstLastParagraph !== false;
2113
- return paragraphs.map((paraSegments, paraIndex) => {
2119
+ return paragraphs.map(({ entries: paraSegments, terminator }, paraIndex) => {
2114
2120
  const paraIndent = paragraphIndents?.[paraIndex];
2115
2121
  const rawMarginLeft = typeof paraIndent?.marginLeft === "number" && paraIndent.marginLeft !== 0 ? paraIndent.marginLeft : void 0;
2116
2122
  const rawTextIndent = typeof paraIndent?.indent === "number" && paraIndent.indent !== 0 ? paraIndent.indent : void 0;
@@ -2132,7 +2138,7 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
2132
2138
  const paraTextIndent = rawTextIndent;
2133
2139
  const paraKinsokuStyle = getKinsokuLineBreakStyles(firstSeg?.segment.style);
2134
2140
  const hasParaKinsoku = Object.keys(paraKinsokuStyle).length > 0;
2135
- const paraProps = effectiveSegments[firstSeg?.globalIndex ?? -1]?.paragraphProperties;
2141
+ const paraProps = effectiveSegments[firstSeg?.globalIndex ?? -1]?.paragraphProperties ?? (paraSegments.length === 0 ? terminator?.paragraphProperties : void 0);
2136
2142
  const spacing = resolveParagraphSpacing({
2137
2143
  paraProps,
2138
2144
  bodyStyle,
@@ -2141,7 +2147,7 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
2141
2147
  spaceFirstLast
2142
2148
  });
2143
2149
  const strutFontSize = resolveParagraphStrutFontSize(
2144
- paraSegments.map(({ segment }) => segment),
2150
+ paraSegments.length > 0 ? paraSegments.map(({ segment }) => segment) : terminator ? [terminator] : [],
2145
2151
  bodyStyle?.fontSize
2146
2152
  );
2147
2153
  const hasParaSpacing = spacing.marginTop !== void 0 || spacing.marginBottom !== void 0 || spacing.lineHeight !== void 0;
@@ -2193,7 +2199,11 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
2193
2199
  onHyperlinkClick,
2194
2200
  fieldContext,
2195
2201
  paraRtl,
2196
- requireCtrlClick
2202
+ requireCtrlClick,
2203
+ // Marker box = the hanging distance, so the first line's text
2204
+ // lands on the indent stop (see `bulletHangPx` in
2205
+ // `renderSingleSegment`).
2206
+ hasBullet && globalIndex === firstSeg.globalIndex && typeof paraTextIndent === "number" && paraTextIndent < 0 ? -paraTextIndent : void 0
2197
2207
  )
2198
2208
  );
2199
2209
  const wrappedContent = wrapWithTextBuildAnimation(
@@ -6277,7 +6287,7 @@ function FailedToLoad() {
6277
6287
  var LazySurfaceChart3DScene = React6.lazy(
6278
6288
  async () => {
6279
6289
  try {
6280
- return await import('./SurfaceChart3DScene-JT64KYVP.mjs');
6290
+ return await import('./SurfaceChart3DScene-V5H6MXYW.mjs');
6281
6291
  } catch {
6282
6292
  return { default: FailedToLoad };
6283
6293
  }
Binary file
Binary file
@@ -1,4 +1,4 @@
1
- import { ThemePresets, PptxMarkdownConverter } from './chunk-GMW7VRFD.mjs';
1
+ import { ThemePresets, PptxMarkdownConverter } from './chunk-WH46JCNF.mjs';
2
2
  import { __export } from './chunk-XGB3TDIC.mjs';
3
3
  import * as mcp from 'pptx-viewer-mcp';
4
4
  import * as mcpSchemas from 'pptx-viewer-mcp/schemas';
Binary file
Binary file
@@ -44631,7 +44631,7 @@ function applySeriesDataLabelsToXml(seriesNode, dataLabels, getLocalName2) {
44631
44631
  const dLblsKey = findKey13(seriesNode, "dLbls", getLocalName2);
44632
44632
  const labels = dataLabels ?? [];
44633
44633
  const existingByIdx = /* @__PURE__ */ new Map();
44634
- let groupChildren = [];
44634
+ let groupChildren2 = [];
44635
44635
  if (dLblsKey) {
44636
44636
  const dLbls = seriesNode[dLblsKey];
44637
44637
  const dLblKey = findKey13(dLbls, "dLbl", getLocalName2);
@@ -44646,9 +44646,9 @@ function applySeriesDataLabelsToXml(seriesNode, dataLabels, getLocalName2) {
44646
44646
  }
44647
44647
  }
44648
44648
  }
44649
- groupChildren = Object.keys(dLbls).filter((k) => getLocalName2(k) !== "dLbl").map((k) => [k, dLbls[k]]);
44649
+ groupChildren2 = Object.keys(dLbls).filter((k) => getLocalName2(k) !== "dLbl").map((k) => [k, dLbls[k]]);
44650
44650
  }
44651
- if (labels.length === 0 && groupChildren.length === 0) {
44651
+ if (labels.length === 0 && groupChildren2.length === 0) {
44652
44652
  if (dLblsKey) {
44653
44653
  delete seriesNode[dLblsKey];
44654
44654
  }
@@ -44659,7 +44659,7 @@ function applySeriesDataLabelsToXml(seriesNode, dataLabels, getLocalName2) {
44659
44659
  if (built.length > 0) {
44660
44660
  newDLbls["c:dLbl"] = built.length === 1 ? built[0] : built;
44661
44661
  }
44662
- const ordered32 = [...groupChildren].sort((a, b) => {
44662
+ const ordered32 = [...groupChildren2].sort((a, b) => {
44663
44663
  const ai = DLBLS_GROUP_ORDER.indexOf(getLocalName2(a[0]));
44664
44664
  const bi = DLBLS_GROUP_ORDER.indexOf(getLocalName2(b[0]));
44665
44665
  return (ai === -1 ? DLBLS_GROUP_ORDER.length : ai) - (bi === -1 ? DLBLS_GROUP_ORDER.length : bi);
@@ -63197,8 +63197,16 @@ var PptxHandlerRuntime63 = class extends PptxHandlerRuntime62 {
63197
63197
  }
63198
63198
  }
63199
63199
  if (pIdx < paraCount - 1) {
63200
+ const separatorStyle = { ...mergedDefaultRunStyle };
63201
+ if (segments.length === 0) {
63202
+ const endParaSz = p["a:endParaRPr"]?.["@_sz"];
63203
+ const endParaPoints = endParaSz !== void 0 ? parseInt(String(endParaSz)) / 100 : NaN;
63204
+ if (Number.isFinite(endParaPoints) && endParaPoints > 0) {
63205
+ separatorStyle.fontSize = endParaPoints * (96 / 72);
63206
+ }
63207
+ }
63200
63208
  parts.push("\n");
63201
- segments.push({ text: "\n", style: { ...mergedDefaultRunStyle } });
63209
+ segments.push({ text: "\n", style: separatorStyle });
63202
63210
  }
63203
63211
  const firstSegmentIndex = segments.length === 0 ? -1 : 0;
63204
63212
  if (firstSegmentIndex >= 0) {
@@ -97279,11 +97287,12 @@ function detectOrientation() {
97279
97287
  }
97280
97288
  return window.innerHeight > window.innerWidth ? "portrait" : "landscape";
97281
97289
  }
97290
+ var DEFAULT_LINE_HEIGHT = 1.2;
97282
97291
  function resolveLineHeight(textStyle, hasItalicRuns) {
97283
97292
  if (typeof textStyle?.lineSpacingExactPt === "number" && textStyle.lineSpacingExactPt > 0) {
97284
97293
  return `${textStyle.lineSpacingExactPt}pt`;
97285
97294
  }
97286
- return textStyle?.lineSpacing || (hasItalicRuns ? 1.35 : 1.25);
97295
+ return textStyle?.lineSpacing || DEFAULT_LINE_HEIGHT;
97287
97296
  }
97288
97297
  function toCssWritingMode(textDirection) {
97289
97298
  switch (textDirection) {
@@ -97320,7 +97329,7 @@ function toCssVerticalDirection(textDirection) {
97320
97329
  return void 0;
97321
97330
  }
97322
97331
  function computeAutoFitTextStyle(input) {
97323
- const { textStyle: ts, text: text2, width, height, bodyInsetVertical, hasItalicRuns } = input;
97332
+ const { textStyle: ts, text: text2, width, height, bodyInsetVertical } = input;
97324
97333
  if (!ts?.autoFit) {
97325
97334
  return {};
97326
97335
  }
@@ -97330,7 +97339,7 @@ function computeAutoFitTextStyle(input) {
97330
97339
  result.fontSize = Math.max(6, Math.round(baseFontSize * ts.autoFitFontScale));
97331
97340
  } else if (ts.autoFitMode !== "normal") {
97332
97341
  const textLength = text2.length;
97333
- const lineHeight = ts.lineSpacingExactPt ? ts.lineSpacingExactPt / baseFontSize : ts.lineSpacing || (hasItalicRuns ? 1.35 : 1.25);
97342
+ const lineHeight = ts.lineSpacingExactPt ? ts.lineSpacingExactPt / baseFontSize : ts.lineSpacing || DEFAULT_LINE_HEIGHT;
97334
97343
  const approxCharsPerLine = Math.max(1, Math.floor(width / (baseFontSize * 0.6)));
97335
97344
  const estimatedLines = Math.max(1, Math.ceil(textLength / approxCharsPerLine));
97336
97345
  const requiredHeight = estimatedLines * baseFontSize * lineHeight;
@@ -97341,7 +97350,7 @@ function computeAutoFitTextStyle(input) {
97341
97350
  }
97342
97351
  }
97343
97352
  if (ts.autoFitLineSpacingReduction !== void 0 && ts.autoFitLineSpacingReduction > 0) {
97344
- const baseLineHeight = typeof ts.lineSpacing === "number" ? ts.lineSpacing : hasItalicRuns ? 1.35 : 1.25;
97353
+ const baseLineHeight = typeof ts.lineSpacing === "number" ? ts.lineSpacing : DEFAULT_LINE_HEIGHT;
97345
97354
  result.lineHeight = baseLineHeight * (1 - ts.autoFitLineSpacingReduction);
97346
97355
  }
97347
97356
  return result;
@@ -98318,6 +98327,44 @@ ${body}
98318
98327
  keyframes
98319
98328
  };
98320
98329
  }
98330
+ function groupChildren(element) {
98331
+ if (element.type !== "group") {
98332
+ return void 0;
98333
+ }
98334
+ const children8 = element.children;
98335
+ return Array.isArray(children8) && children8.length > 0 ? children8 : void 0;
98336
+ }
98337
+ function containsMorphNamedDescendant(element) {
98338
+ const children8 = groupChildren(element);
98339
+ if (!children8) {
98340
+ return false;
98341
+ }
98342
+ for (const child22 of children8) {
98343
+ if (getElementMorphName(child22) !== void 0 || containsMorphNamedDescendant(child22)) {
98344
+ return true;
98345
+ }
98346
+ }
98347
+ return false;
98348
+ }
98349
+ function toAbsolute(child22, offsetX, offsetY) {
98350
+ if (offsetX === 0 && offsetY === 0) {
98351
+ return child22;
98352
+ }
98353
+ return { ...child22, x: child22.x + offsetX, y: child22.y + offsetY };
98354
+ }
98355
+ function flattenMorphElements(elements, offsetX = 0, offsetY = 0) {
98356
+ const out = [];
98357
+ for (const element of elements) {
98358
+ const children8 = groupChildren(element);
98359
+ if (children8 && containsMorphNamedDescendant(element)) {
98360
+ out.push(...flattenMorphElements(children8, offsetX + element.x, offsetY + element.y));
98361
+ continue;
98362
+ }
98363
+ out.push(toAbsolute(element, offsetX, offsetY));
98364
+ }
98365
+ return out;
98366
+ }
98367
+ var SAME_BOX_TOLERANCE_PX = 0.5;
98321
98368
  function getElementMorphName(element) {
98322
98369
  if (element.name) {
98323
98370
  const name = element.name.trim();
@@ -98333,16 +98380,49 @@ function getElementMorphName(element) {
98333
98380
  }
98334
98381
  return void 0;
98335
98382
  }
98383
+ var NV_PR_KEYS = [
98384
+ "p:nvSpPr",
98385
+ "p:nvPicPr",
98386
+ "p:nvGrpSpPr",
98387
+ "p:nvCxnSpPr",
98388
+ "p:nvGraphicFramePr"
98389
+ ];
98390
+ function getElementCreationId(element) {
98391
+ const raw = element.rawXml;
98392
+ if (!raw) {
98393
+ return void 0;
98394
+ }
98395
+ for (const nvKey of NV_PR_KEYS) {
98396
+ const nvPr = raw[nvKey];
98397
+ const cNvPr = nvPr?.["p:cNvPr"];
98398
+ const extLst = cNvPr?.["a:extLst"];
98399
+ const extRaw = extLst?.["a:ext"];
98400
+ if (!extRaw) {
98401
+ continue;
98402
+ }
98403
+ const exts = Array.isArray(extRaw) ? extRaw : [extRaw];
98404
+ for (const ext of exts) {
98405
+ const creation = ext?.["a16:creationId"];
98406
+ const guid = creation?.["@_id"];
98407
+ if (typeof guid === "string" && guid.length > 0) {
98408
+ return guid;
98409
+ }
98410
+ }
98411
+ }
98412
+ return void 0;
98413
+ }
98336
98414
  function matchMorphElementsFull(fromSlide, toSlide) {
98337
98415
  const pairs2 = [];
98338
98416
  const usedFrom = /* @__PURE__ */ new Set();
98339
98417
  const usedTo = /* @__PURE__ */ new Set();
98340
- for (const fromEl of fromSlide.elements) {
98418
+ const fromElements = flattenMorphElements(fromSlide.elements);
98419
+ const toElements = flattenMorphElements(toSlide.elements);
98420
+ for (const fromEl of fromElements) {
98341
98421
  const fromName = getElementMorphName(fromEl);
98342
98422
  if (!fromName) {
98343
98423
  continue;
98344
98424
  }
98345
- for (const toEl of toSlide.elements) {
98425
+ for (const toEl of toElements) {
98346
98426
  if (usedTo.has(toEl.id)) {
98347
98427
  continue;
98348
98428
  }
@@ -98355,15 +98435,45 @@ function matchMorphElementsFull(fromSlide, toSlide) {
98355
98435
  }
98356
98436
  }
98357
98437
  }
98358
- for (const fromEl of fromSlide.elements) {
98438
+ const creationIds = /* @__PURE__ */ new Map();
98439
+ const creationIdOf = (el) => {
98440
+ if (!creationIds.has(el.id)) {
98441
+ creationIds.set(el.id, getElementCreationId(el));
98442
+ }
98443
+ return creationIds.get(el.id);
98444
+ };
98445
+ for (const fromEl of fromElements) {
98446
+ if (usedFrom.has(fromEl.id)) {
98447
+ continue;
98448
+ }
98449
+ const fromGuid = creationIdOf(fromEl);
98450
+ if (!fromGuid) {
98451
+ continue;
98452
+ }
98453
+ for (const toEl of toElements) {
98454
+ if (usedTo.has(toEl.id) || fromEl.type !== toEl.type) {
98455
+ continue;
98456
+ }
98457
+ if (creationIdOf(toEl) === fromGuid) {
98458
+ pairs2.push({ fromElement: fromEl, toElement: toEl });
98459
+ usedFrom.add(fromEl.id);
98460
+ usedTo.add(toEl.id);
98461
+ break;
98462
+ }
98463
+ }
98464
+ }
98465
+ for (const fromEl of fromElements) {
98359
98466
  if (usedFrom.has(fromEl.id) || !fromEl.shapeId) {
98360
98467
  continue;
98361
98468
  }
98362
- for (const toEl of toSlide.elements) {
98469
+ for (const toEl of toElements) {
98363
98470
  if (usedTo.has(toEl.id)) {
98364
98471
  continue;
98365
98472
  }
98366
98473
  if (toEl.shapeId && fromEl.shapeId === toEl.shapeId && fromEl.type === toEl.type) {
98474
+ if (creationIdOf(fromEl) && creationIdOf(toEl)) {
98475
+ continue;
98476
+ }
98367
98477
  pairs2.push({ fromElement: fromEl, toElement: toEl });
98368
98478
  usedFrom.add(fromEl.id);
98369
98479
  usedTo.add(toEl.id);
@@ -98371,13 +98481,13 @@ function matchMorphElementsFull(fromSlide, toSlide) {
98371
98481
  }
98372
98482
  }
98373
98483
  }
98374
- for (const fromEl of fromSlide.elements) {
98484
+ for (const fromEl of fromElements) {
98375
98485
  if (usedFrom.has(fromEl.id)) {
98376
98486
  continue;
98377
98487
  }
98378
98488
  let bestMatch = null;
98379
98489
  let bestDist = Infinity;
98380
- for (const toEl of toSlide.elements) {
98490
+ for (const toEl of toElements) {
98381
98491
  if (usedTo.has(toEl.id)) {
98382
98492
  continue;
98383
98493
  }
@@ -98403,8 +98513,24 @@ function matchMorphElementsFull(fromSlide, toSlide) {
98403
98513
  usedTo.add(bestMatch.id);
98404
98514
  }
98405
98515
  }
98406
- const unmatchedFrom = fromSlide.elements.filter((el) => !usedFrom.has(el.id));
98407
- const unmatchedTo = toSlide.elements.filter((el) => !usedTo.has(el.id));
98516
+ for (const fromEl of fromElements) {
98517
+ if (usedFrom.has(fromEl.id)) {
98518
+ continue;
98519
+ }
98520
+ for (const toEl of toElements) {
98521
+ if (usedTo.has(toEl.id)) {
98522
+ continue;
98523
+ }
98524
+ if (Math.abs(fromEl.x - toEl.x) <= SAME_BOX_TOLERANCE_PX && Math.abs(fromEl.y - toEl.y) <= SAME_BOX_TOLERANCE_PX && Math.abs(fromEl.width - toEl.width) <= SAME_BOX_TOLERANCE_PX && Math.abs(fromEl.height - toEl.height) <= SAME_BOX_TOLERANCE_PX) {
98525
+ pairs2.push({ fromElement: fromEl, toElement: toEl });
98526
+ usedFrom.add(fromEl.id);
98527
+ usedTo.add(toEl.id);
98528
+ break;
98529
+ }
98530
+ }
98531
+ }
98532
+ const unmatchedFrom = fromElements.filter((el) => !usedFrom.has(el.id));
98533
+ const unmatchedTo = toElements.filter((el) => !usedTo.has(el.id));
98408
98534
  return { pairs: pairs2, unmatchedFrom, unmatchedTo };
98409
98535
  }
98410
98536
  function tokenizeText(element, mode) {
@@ -98651,13 +98777,12 @@ function generateMorphAnimations(pairs2, durationMs, _mode = "object") {
98651
98777
  const sy = Math.max(fromElement.height, 1) / Math.max(toElement.height, 1);
98652
98778
  const fromOpacity = fromElement.opacity ?? 1;
98653
98779
  const toOpacity = toElement.opacity ?? 1;
98654
- const fromRot = fromElement.rotation ?? 0;
98655
98780
  const toRot = toElement.rotation ?? 0;
98781
+ const fromRot = shortestRotationTarget(toRot, fromElement.rotation ?? 0);
98656
98782
  const flips = `${toElement.flipHorizontal ? " scaleX(-1)" : ""}${toElement.flipVertical ? " scaleY(-1)" : ""}`;
98657
- const crossfades = morphPairNeedsCrossfade(fromElement, toElement);
98658
98783
  const fromProps = [
98659
98784
  ` transform: translate(${dx}px, ${dy}px) scale(${sx}, ${sy}) rotate(${fromRot}deg)${flips};`,
98660
- ` opacity: ${crossfades ? 0 : fromOpacity};`
98785
+ ` opacity: ${fromOpacity};`
98661
98786
  ];
98662
98787
  const toProps = [
98663
98788
  ` transform: translate(0, 0) scale(1, 1) rotate(${toRot}deg)${flips};`,
@@ -98701,7 +98826,7 @@ function generateMorphGhostAnimations(pairs2, durationMs, startIndex) {
98701
98826
  const sx = Math.max(toElement.width, 1) / Math.max(fromElement.width, 1);
98702
98827
  const sy = Math.max(toElement.height, 1) / Math.max(fromElement.height, 1);
98703
98828
  const fromRot = fromElement.rotation ?? 0;
98704
- const toRot = toElement.rotation ?? 0;
98829
+ const toRot = shortestRotationTarget(fromRot, toElement.rotation ?? 0);
98705
98830
  const flips = `${fromElement.flipHorizontal ? " scaleX(-1)" : ""}${fromElement.flipVertical ? " scaleY(-1)" : ""}`;
98706
98831
  const keyframes = `
98707
98832
  @keyframes ${safeName} {
@@ -98724,6 +98849,15 @@ function generateMorphGhostAnimations(pairs2, durationMs, startIndex) {
98724
98849
  }
98725
98850
  return animations;
98726
98851
  }
98852
+ function shortestRotationTarget(fromDeg, toDeg) {
98853
+ let delta = (toDeg - fromDeg) % 360;
98854
+ if (delta > 180) {
98855
+ delta -= 360;
98856
+ } else if (delta <= -180) {
98857
+ delta += 360;
98858
+ }
98859
+ return fromDeg + delta;
98860
+ }
98727
98861
  function staticTransformSuffix(el) {
98728
98862
  const rot = el.rotation ?? 0;
98729
98863
  return ` rotate(${rot}deg)${el.flipHorizontal ? " scaleX(-1)" : ""}${el.flipVertical ? " scaleY(-1)" : ""}`;
@@ -98839,7 +98973,7 @@ function buildMorphTransitionPlan(fromSlide, toSlide, durationMs, mode = "object
98839
98973
  return void 0;
98840
98974
  }
98841
98975
  const animations = generateFullMorphTransition(fromSlide, toSlide, durationMs, mode);
98842
- const outgoingElements = [...fromSlide.elements];
98976
+ const outgoingElements = flattenMorphElements(fromSlide.elements);
98843
98977
  const outgoingIds = new Set(outgoingElements.map((element) => element.id));
98844
98978
  const incomingAnimations = /* @__PURE__ */ new Map();
98845
98979
  const outgoingAnimations = /* @__PURE__ */ new Map();
@@ -101217,6 +101351,11 @@ var INSTANT = {
101217
101351
  };
101218
101352
  var DEFAULT_TRANSITION_DURATION_MS = 1e3;
101219
101353
  var DEFAULT_MORPH_DURATION_MS = 2e3;
101354
+ var TRANSITION_SPEED_DURATION_MS = {
101355
+ fast: 500,
101356
+ med: 750,
101357
+ slow: 1e3
101358
+ };
101220
101359
  var EASE = "ease-in-out";
101221
101360
  var P14_TRANSITION_KEYFRAMES = `
101222
101361
  /* \u2500\u2500 Conveyor (translate X with staggered timing) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
@@ -102427,6 +102566,10 @@ function resolveTransitionDurationMs(transition) {
102427
102566
  if (typeof transition.durationMs === "number" && transition.durationMs > 0) {
102428
102567
  return transition.durationMs;
102429
102568
  }
102569
+ const speedMs = transition.speed ? TRANSITION_SPEED_DURATION_MS[transition.speed] : void 0;
102570
+ if (typeof speedMs === "number") {
102571
+ return speedMs;
102572
+ }
102430
102573
  if (transition.type === "morph") {
102431
102574
  return DEFAULT_MORPH_DURATION_MS;
102432
102575
  }
Binary file
Binary file
@@ -1,8 +1,8 @@
1
- import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-HHUBO5OD.mjs';
2
- import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-MVXW7BHH.mjs';
3
- import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_TRANSITION_OPTIONS, SLIDE_NAV_THUMBNAIL_WIDTH, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, startPreviewAnimation, stopPreviewAnimation } from './chunk-A3WQ6JDW.mjs';
1
+ import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-SOLHDKNK.mjs';
2
+ import { useReducedMotion, useViewerState, useViewerOptions, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useCollaborationLivePatch, useFollowMode, useBroadcastFollower, scopeLayoutOptionsToActiveSlide, useToolbarVisibility, useKeyboardInsets, useModalDismissDrag, useCollaborativeState, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, downloadBlob } from './chunk-YUHEJWUN.mjs';
3
+ import { SHAPE_PRESETS, DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, ANIMATION_PRESET_OPTIONS, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, DEFAULT_FILL_COLOR, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, getTextLayoutStyle, renderTableElement, renderMediaElement, shouldRenderFallbackLabel, getCropShapeClipPath, SLIDE_TRANSITION_OPTIONS, SLIDE_NAV_THUMBNAIL_WIDTH, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, isImageTiled, getImageTilingStyle, getDuotoneColors, getTextWarpStyle, renderTextSegments, buildReactChartViewModel, renderChartElement, buildTextBody3DSceneStyle, TOOLBAR_SECTIONS, SHORTCUT_REFERENCE_ITEMS as SHORTCUT_REFERENCE_ITEMS$1, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, HYPERLINK_COLOR, GRID_SIZE, startPreviewAnimation, stopPreviewAnimation } from './chunk-IGKLB7NQ.mjs';
4
4
  import { LOCALE_CATALOG, translationsEn } from './chunk-Z6HIZWIQ.mjs';
5
- import { RULER_THICKNESS, RULER_FONT_SIZE, hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, SWITCHABLE_LAYOUT_TYPES, EQUATION_TEMPLATES, convertLatexToOmml, convertOmmlToMathMl, sanitizeMathMl, DEFAULT_VIEWER_OPTIONS, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, revealedSmartArtNodeCount, buildSmartArtA11y, buildCssGradientFromShapeStyle, resolveGroupChildFill, getGroupChildParentFill, getComputedEffectStyle, getSoftEdgeSvgFilter, isInkElement, getElementLabel, buildPreviewElements, themeToCssVars, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, isImageLikeElement, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, getLinkedTextBoxSegments, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, themeColorSchemesEqual, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, activateModalFocus, buildCollaborationShareUrl, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, formatElapsed, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, computeSmartArtLayout, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, SLIDE_VIRTUALIZATION_THRESHOLD, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, presentationInkPath, getShapeAdjustmentHandleDescriptor, formatSlideCounter, isUrlSafe, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, groupIntoParagraphs, substituteFieldText, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, getConnectionSites, generateTicks, getCommentMarkerPosition, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_LABELS, buildSmartArtPresetData, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, TABLE_STYLE_PRESETS, chartDataChangeType, chartDataUpdatePoint, chartDataAddCategory, chartDataRemoveCategory, chartDataAddSeries, chartDataRemoveSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, formatCommentTimestamp, DIRECTIONAL_PRESETS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, addSmartArtNodeAsChild, removeSmartArtNode, DUOTONE_PRESETS, ARTISTIC_EFFECTS, elementActionToPptxAction, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS } from './chunk-GMW7VRFD.mjs';
5
+ import { RULER_THICKNESS, RULER_FONT_SIZE, hasShapeProperties, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, hasTextProperties, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, SWITCHABLE_LAYOUT_TYPES, EQUATION_TEMPLATES, convertLatexToOmml, convertOmmlToMathMl, sanitizeMathMl, DEFAULT_VIEWER_OPTIONS, buildUserFontFaceStyles, readStoredViewerPrefs, resolveThemeCatalogEntry, THEME_CATALOG, writeStoredViewerPrefs, openPptxFile, readBackstageRecentFile, viewerOptionsToPreferences, applyPreferenceToOptions, listAutosaveSnapshots, deleteAutosaveSnapshot, revealedSmartArtNodeCount, buildSmartArtA11y, buildCssGradientFromShapeStyle, resolveGroupChildFill, getGroupChildParentFill, getComputedEffectStyle, getSoftEdgeSvgFilter, isInkElement, getElementLabel, buildPreviewElements, themeToCssVars, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, createBackstagePresentation, printPropertiesFrameSlides, printPropertiesSlidesPerPage, VIEWER_OPTIONS_TABS, DEFAULT_QUICK_ACCESS_COMMAND_IDS, buildJoinCollaborationConfig, buildCreateCollaborationConfig, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveTransportForServerUrl, resolveDrawingShapeNodeId, buildSummaryZoomView, getImageColorWashStyle, isImageLikeElement, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, getLinkedTextBoxSegments, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, themeColorSchemesEqual, formatVersionTimestamp, formatRelativeTime, scanAvailableFontFamilies, PRESETS, CATEGORIES, convertOmmlToLatex, clampPercent, HANDOUT_OPTIONS, TOOLBAR_TABS, SHORTCUT_REFERENCE_ITEMS, resolveViewerAddinRows, availableQuickAccessCommands, addQuickAccessCommand, removeQuickAccessCommand, moveQuickAccessCommand, activateModalFocus, buildCollaborationShareUrl, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, presenterPaneAdvancesOnClick, formatElapsed, computeInlineEditorRect, findSmartArtNodeText, setSmartArtNodeStyle, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, updateSmartArtNodeText, getImageSvgFilters, buildDuotoneCacheKey, getDuotoneCachedResult, applyDuotone, setDuotoneCachedResult, buildCacheKey, DEFAULT_COLOR_CHANGE_TOLERANCE, getCachedResult, applyColorChange, setCachedResult, findChartPartTarget, dragValueForPart, withChartPointValue, dragAnchorViewY, withChartTitle, computeSmartArtLayout, buildSmartArt3DModel, extractPathPoints, generatePressureCircles, isBrowserOpenableMime, formatBytes, getOleBadgeLabel, openUrlInNewTab, getSubstituteFontFamily, getWarpPath, TAB_ROW_ACTION_CLASSES, listBackstageRecentFiles, BACKSTAGE_NAV, INSERT_CHART_TYPES, SLIDE_VIRTUALIZATION_THRESHOLD, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, presentationInkPath, getShapeAdjustmentHandleDescriptor, formatSlideCounter, isUrlSafe, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, QUICK_ACCESS_COMMAND_CATALOG, notesSegmentsToSpans, erasePresentationInkAt, movePresenterPointer, appendPresentationInkPoint, NOTES_FONT_SIZE_DEFAULT, formatTime, NOTES_FONT_SIZE_MIN, clampNotesFontSize, NOTES_FONT_SIZE_STEP, NOTES_FONT_SIZE_MAX, groupIntoParagraphs, substituteFieldText, BACKSTAGE_TEMPLATES, formatBackstageDate, formatBackstageSize, DEFAULT_VIEWER_PROFILE, resolveProfileInitial, AVATAR_COLOR_SWATCHES, getConnectionSites, generateTicks, getCommentMarkerPosition, buildThemeColorGrid, THEME_COLOR_SCHEME_KEYS, THEME_COLOR_LABELS, buildSmartArtPresetData, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, TABLE_STYLE_PRESETS, chartDataChangeType, chartDataUpdatePoint, chartDataAddCategory, chartDataRemoveCategory, chartDataAddSeries, chartDataRemoveSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, pptxActionToElementAction, withFrameSlides, withSlidesPerPage, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, formatCommentTimestamp, DIRECTIONAL_PRESETS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, addSmartArtNodeAsChild, removeSmartArtNode, DUOTONE_PRESETS, ARTISTIC_EFFECTS, elementActionToPptxAction, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS } from './chunk-WH46JCNF.mjs';
6
6
  import React32, { createContext, useMemo, useState, useCallback, lazy, forwardRef, useEffect, useRef, useContext, Suspense, useLayoutEffect, useDeferredValue } from 'react';
7
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
8
  import { useTranslation } from 'react-i18next';
@@ -1337,7 +1337,7 @@ function AccountPage() {
1337
1337
  return void 0;
1338
1338
  });
1339
1339
  };
1340
- const version = "2.6.4" ;
1340
+ const version = "2.6.7" ;
1341
1341
  return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
1342
1342
  /* @__PURE__ */ jsxs("section", { className: cardClass, children: [
1343
1343
  /* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -7868,6 +7868,7 @@ function renderGroup(children, parentGroupFill) {
7868
7868
  return /* @__PURE__ */ jsxs(
7869
7869
  "div",
7870
7870
  {
7871
+ "data-element-id": c.id,
7871
7872
  className: "absolute",
7872
7873
  style: {
7873
7874
  left: c.x,
@@ -8345,7 +8346,7 @@ function FailedToLoad() {
8345
8346
  var LazyModel3DScene = React32.lazy(
8346
8347
  async () => {
8347
8348
  try {
8348
- return await import('./Model3DScene-LPA4HGFY.mjs');
8349
+ return await import('./Model3DScene-ID6CQKEJ.mjs');
8349
8350
  } catch {
8350
8351
  return { default: FailedToLoad };
8351
8352
  }
@@ -11158,7 +11159,8 @@ function StaticElementRendererImpl({
11158
11159
  parentGroupFill,
11159
11160
  onActionClick,
11160
11161
  actionRequiresModifier = false,
11161
- animation
11162
+ animation,
11163
+ exposeElementId = false
11162
11164
  }) {
11163
11165
  const style = hasShapeProperties(element) ? element.shapeStyle : void 0;
11164
11166
  const hasFill = style?.fillColor !== void 0 && style.fillColor !== "transparent" || Boolean(buildCssGradientFromShapeStyle(style) || style?.fillGradient) || style?.fillMode === "pattern" && Boolean(style.fillPatternPreset);
@@ -11186,6 +11188,7 @@ function StaticElementRendererImpl({
11186
11188
  "div",
11187
11189
  {
11188
11190
  "data-static-element-type": element.type,
11191
+ "data-element-id": exposeElementId ? element.id : void 0,
11189
11192
  "data-pptx-action": isActionable ? "click" : void 0,
11190
11193
  className: `${positioned ? "absolute" : "relative"} overflow-hidden ${isActionable ? "pointer-events-auto cursor-pointer" : "pointer-events-none"}`,
11191
11194
  role: isActionable ? "button" : void 0,
@@ -11233,7 +11236,8 @@ function StaticElementRendererImpl({
11233
11236
  tableStyleContext,
11234
11237
  parentGroupFill: getGroupChildParentFill(element),
11235
11238
  onActionClick,
11236
- actionRequiresModifier
11239
+ actionRequiresModifier,
11240
+ exposeElementId
11237
11241
  },
11238
11242
  child.id
11239
11243
  )) }) : renderBody({
@@ -11477,6 +11481,8 @@ var ElementRenderer = React32.memo(
11477
11481
  mediaDataUrls,
11478
11482
  sourceSlideIndex,
11479
11483
  zIndex: index,
11484
+ animation: presentationElementStates?.get(child.id)?.cssAnimation,
11485
+ exposeElementId: true,
11480
11486
  parentGroupFill: getGroupChildParentFill(el),
11481
11487
  onActionClick: el.actionClick ? void 0 : onActionClick,
11482
11488
  actionRequiresModifier: effectiveCanInteract
@@ -31626,7 +31632,7 @@ ${url}`)) {
31626
31632
  )
31627
31633
  );
31628
31634
  }
31629
- var AiChatPanel = lazy(() => import('./AiChatPanel-5JEL2M7L.mjs'));
31635
+ var AiChatPanel = lazy(() => import('./AiChatPanel-J5IGSCYA.mjs'));
31630
31636
  function AiChatPanelLazy(props) {
31631
31637
  return /* @__PURE__ */ jsx(
31632
31638
  Suspense,
Binary file
Binary file
@@ -1,6 +1,6 @@
1
- import { cloneHistorySnapshot, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, partitionTemplateElements, UNGROUPED_SECTION_ID, stopAllPersistentAudio, buildSaveSlides, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, executeMediaCommand, buildPdfFromImageData, buildNotesPdf, EMU_PER_PX, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-A3WQ6JDW.mjs';
1
+ import { cloneHistorySnapshot, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, partitionTemplateElements, UNGROUPED_SECTION_ID, stopAllPersistentAudio, buildSaveSlides, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, executeMediaCommand, buildPdfFromImageData, buildNotesPdf, EMU_PER_PX, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-IGKLB7NQ.mjs';
2
2
  import { translationsEn } from './chunk-Z6HIZWIQ.mjs';
3
- import { TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, PresentationAnimationController, computeEntranceAnimationDelay, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, buildMorphTransitionPlan, morphOptionToMode, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, buildInitialGuides, EncryptedFileError, saveAutosaveSnapshot, isTemplateElementId, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, downloadBlob, sanitizeDownloadFilename, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, mayLeaveSlideShow, remapTextToSegments, guidePxToEmu, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createViewerOptionsStore, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, derivePresenceList, mapPresentationKey, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildThemeColorMap, reResolveSlideColors, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, buildPrintHtmlDocument, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, elementActionToPptxAction, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid } from './chunk-GMW7VRFD.mjs';
3
+ import { TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, PresentationAnimationController, computeEntranceAnimationDelay, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, buildMorphTransitionPlan, morphOptionToMode, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, buildInitialGuides, EncryptedFileError, saveAutosaveSnapshot, isTemplateElementId, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, normalizeColorsForCapture, preprocessCssForCapture, downloadBlob, sanitizeDownloadFilename, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, mayLeaveSlideShow, remapTextToSegments, guidePxToEmu, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, createViewerOptionsStore, readSlidesFromYDoc, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, isKeyboardOpen, openPptxFile, readBackstageRecentFile, isActionHidden, buildElementClipboardPayload, generatePackageReadme, groupElements, generateElementId, makeCloneId, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, derivePresenceList, mapPresentationKey, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildThemeColorMap, reResolveSlideColors, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, buildPrintHtmlDocument, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, elementActionToPptxAction, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid } from './chunk-WH46JCNF.mjs';
4
4
  import { useRef, useState, useEffect, useCallback, useMemo, useSyncExternalStore, useImperativeHandle } from 'react';
5
5
  import JSZip from 'jszip';
6
6
  import { useTranslation } from 'react-i18next';
Binary file
Binary file