pptx-react-viewer 3.8.0 → 3.9.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 (176) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/{AiChatPanel-XLQM4BQJ.js → AiChatPanel-3A42W7RW.js} +25 -25
  3. package/dist/AiChatPanel-3A42W7RW.js.br +0 -0
  4. package/dist/AiChatPanel-3A42W7RW.js.gz +0 -0
  5. package/dist/{AiChatPanel-A5DCEHTO.mjs → AiChatPanel-II6VOOAL.mjs} +4 -4
  6. package/dist/AiChatPanel-II6VOOAL.mjs.br +0 -0
  7. package/dist/AiChatPanel-II6VOOAL.mjs.gz +0 -0
  8. package/dist/{Area3DChartScene-5CMEMIBI.mjs → Area3DChartScene-JM3CQ3WQ.mjs} +21 -4
  9. package/dist/Area3DChartScene-JM3CQ3WQ.mjs.br +0 -0
  10. package/dist/Area3DChartScene-JM3CQ3WQ.mjs.gz +0 -0
  11. package/dist/{Area3DChartScene-RZ3V3WOR.js → Area3DChartScene-XJK4ZA4R.js} +21 -4
  12. package/dist/Area3DChartScene-XJK4ZA4R.js.br +0 -0
  13. package/dist/Area3DChartScene-XJK4ZA4R.js.gz +0 -0
  14. package/dist/{Bar3DChartScene-KHCQ6TEC.js → Bar3DChartScene-RGRZY5P6.js} +21 -4
  15. package/dist/Bar3DChartScene-RGRZY5P6.js.br +0 -0
  16. package/dist/Bar3DChartScene-RGRZY5P6.js.gz +0 -0
  17. package/dist/{Bar3DChartScene-H3MYUJKV.mjs → Bar3DChartScene-VNFWI2QG.mjs} +21 -4
  18. package/dist/Bar3DChartScene-VNFWI2QG.mjs.br +0 -0
  19. package/dist/Bar3DChartScene-VNFWI2QG.mjs.gz +0 -0
  20. package/dist/{Line3DChartScene-YFRPJHDX.mjs → Line3DChartScene-GXOWGIFJ.mjs} +21 -4
  21. package/dist/Line3DChartScene-GXOWGIFJ.mjs.br +0 -0
  22. package/dist/Line3DChartScene-GXOWGIFJ.mjs.gz +0 -0
  23. package/dist/{Line3DChartScene-QEACF3U3.js → Line3DChartScene-MEY42DBF.js} +21 -4
  24. package/dist/Line3DChartScene-MEY42DBF.js.br +0 -0
  25. package/dist/Line3DChartScene-MEY42DBF.js.gz +0 -0
  26. package/dist/{Model3DScene-QQWKGJ3T.js → Model3DScene-MWXTGHDM.js} +2 -2
  27. package/dist/Model3DScene-MWXTGHDM.js.br +0 -0
  28. package/dist/Model3DScene-MWXTGHDM.js.gz +0 -0
  29. package/dist/{Model3DScene-O24KP723.mjs → Model3DScene-WJ3MMIZH.mjs} +1 -1
  30. package/dist/Model3DScene-WJ3MMIZH.mjs.br +0 -0
  31. package/dist/Model3DScene-WJ3MMIZH.mjs.gz +0 -0
  32. package/dist/{PieChart3DScene-L3MHKQHW.js → PieChart3DScene-FJJGOQIS.js} +15 -4
  33. package/dist/PieChart3DScene-FJJGOQIS.js.br +0 -0
  34. package/dist/PieChart3DScene-FJJGOQIS.js.gz +0 -0
  35. package/dist/{PieChart3DScene-CI6CW22C.mjs → PieChart3DScene-WXJEDYMK.mjs} +15 -4
  36. package/dist/PieChart3DScene-WXJEDYMK.mjs.br +0 -0
  37. package/dist/PieChart3DScene-WXJEDYMK.mjs.gz +0 -0
  38. package/dist/{SmartArt3DScene-ZO3KFDI2.js → SmartArt3DScene-BK7QN3WT.js} +85 -23
  39. package/dist/SmartArt3DScene-BK7QN3WT.js.br +0 -0
  40. package/dist/SmartArt3DScene-BK7QN3WT.js.gz +0 -0
  41. package/dist/{SmartArt3DScene-XCFVGCXE.mjs → SmartArt3DScene-ODKCGJBO.mjs} +85 -23
  42. package/dist/SmartArt3DScene-ODKCGJBO.mjs.br +0 -0
  43. package/dist/SmartArt3DScene-ODKCGJBO.mjs.gz +0 -0
  44. package/dist/{SurfaceChart3DScene-JUXRC3K2.mjs → SurfaceChart3DScene-IKPE2SVE.mjs} +19 -4
  45. package/dist/SurfaceChart3DScene-IKPE2SVE.mjs.br +0 -0
  46. package/dist/SurfaceChart3DScene-IKPE2SVE.mjs.gz +0 -0
  47. package/dist/{SurfaceChart3DScene-5IER6VFW.js → SurfaceChart3DScene-VDK3F224.js} +19 -4
  48. package/dist/SurfaceChart3DScene-VDK3F224.js.br +0 -0
  49. package/dist/SurfaceChart3DScene-VDK3F224.js.gz +0 -0
  50. package/dist/{chunk-4222CHFH.js → chunk-3NIJ5HIZ.js} +3187 -2514
  51. package/dist/chunk-3NIJ5HIZ.js.br +0 -0
  52. package/dist/chunk-3NIJ5HIZ.js.gz +0 -0
  53. package/dist/{chunk-RNP5HP4L.mjs → chunk-3Y63XPIN.mjs} +1 -1
  54. package/dist/chunk-3Y63XPIN.mjs.br +0 -0
  55. package/dist/{chunk-RNP5HP4L.mjs.gz → chunk-3Y63XPIN.mjs.gz} +0 -0
  56. package/dist/{chunk-DE3S3UHX.js → chunk-5CPGDXD6.js} +518 -442
  57. package/dist/chunk-5CPGDXD6.js.br +0 -0
  58. package/dist/chunk-5CPGDXD6.js.gz +0 -0
  59. package/dist/{chunk-PFPKBNNZ.mjs → chunk-76Z3X6JX.mjs} +1189 -516
  60. package/dist/chunk-76Z3X6JX.mjs.br +0 -0
  61. package/dist/chunk-76Z3X6JX.mjs.gz +0 -0
  62. package/dist/chunk-DNR6CH6I.js +30 -0
  63. package/dist/chunk-DNR6CH6I.js.br +0 -0
  64. package/dist/chunk-DNR6CH6I.js.gz +0 -0
  65. package/dist/{chunk-SN5EUDIT.js → chunk-G3JPCRKN.js} +13644 -7350
  66. package/dist/chunk-G3JPCRKN.js.br +0 -0
  67. package/dist/chunk-G3JPCRKN.js.gz +0 -0
  68. package/dist/{chunk-FRZIBZTE.mjs → chunk-JBSAKP4Z.mjs} +15 -0
  69. package/dist/chunk-JBSAKP4Z.mjs.br +0 -0
  70. package/dist/{chunk-FRZIBZTE.mjs.gz → chunk-JBSAKP4Z.mjs.gz} +0 -0
  71. package/dist/{chunk-F5NPGNMA.js → chunk-K6Q6KLA6.js} +5 -5
  72. package/dist/chunk-K6Q6KLA6.js.br +0 -0
  73. package/dist/chunk-K6Q6KLA6.js.gz +0 -0
  74. package/dist/{chunk-QWA5YEIZ.js → chunk-LBJAVP3H.js} +194 -178
  75. package/dist/chunk-LBJAVP3H.js.br +0 -0
  76. package/dist/chunk-LBJAVP3H.js.gz +0 -0
  77. package/dist/{chunk-RHWQKZLB.mjs → chunk-NTWFXLZX.mjs} +23 -7
  78. package/dist/chunk-NTWFXLZX.mjs.br +0 -0
  79. package/dist/chunk-NTWFXLZX.mjs.gz +0 -0
  80. package/dist/{chunk-UPJW34YG.mjs → chunk-PCCM7NVY.mjs} +85 -9
  81. package/dist/chunk-PCCM7NVY.mjs.br +0 -0
  82. package/dist/chunk-PCCM7NVY.mjs.gz +0 -0
  83. package/dist/chunk-T6GFCLSM.mjs +27 -0
  84. package/dist/chunk-T6GFCLSM.mjs.br +4 -0
  85. package/dist/chunk-T6GFCLSM.mjs.gz +0 -0
  86. package/dist/{chunk-L3ZIBQEB.js → chunk-TEVGDXVW.js} +15 -0
  87. package/dist/chunk-TEVGDXVW.js.br +0 -0
  88. package/dist/{chunk-L3ZIBQEB.js.gz → chunk-TEVGDXVW.js.gz} +0 -0
  89. package/dist/{chunk-6IMB5DNJ.mjs → chunk-VQX7G75Z.mjs} +13621 -7340
  90. package/dist/chunk-VQX7G75Z.mjs.br +0 -0
  91. package/dist/chunk-VQX7G75Z.mjs.gz +0 -0
  92. package/dist/i18n.js +4 -4
  93. package/dist/i18n.js.br +0 -0
  94. package/dist/i18n.js.gz +0 -0
  95. package/dist/i18n.mjs +1 -1
  96. package/dist/i18n.mjs.br +0 -0
  97. package/dist/i18n.mjs.gz +0 -0
  98. package/dist/index.d.ts +388 -80
  99. package/dist/index.js +47 -47
  100. package/dist/index.js.br +0 -0
  101. package/dist/index.js.gz +0 -0
  102. package/dist/index.mjs +6 -6
  103. package/dist/index.mjs.br +0 -0
  104. package/dist/index.mjs.gz +0 -0
  105. package/dist/internals.d.ts +445 -81
  106. package/dist/internals.d.ts.map +1 -1
  107. package/dist/internals.js +79 -79
  108. package/dist/internals.js.br +0 -0
  109. package/dist/internals.js.gz +0 -0
  110. package/dist/internals.mjs +4 -4
  111. package/dist/internals.mjs.br +0 -0
  112. package/dist/internals.mjs.gz +0 -0
  113. package/dist/pptx-viewer.css +1 -1
  114. package/dist/pptx-viewer.css.br +0 -0
  115. package/dist/pptx-viewer.css.gz +0 -0
  116. package/dist/viewer/index.d.ts +338 -43
  117. package/dist/viewer/index.js +27 -27
  118. package/dist/viewer/index.js.br +0 -0
  119. package/dist/viewer/index.js.gz +0 -0
  120. package/dist/viewer/index.mjs +6 -6
  121. package/dist/viewer/index.mjs.br +0 -0
  122. package/dist/viewer/index.mjs.gz +0 -0
  123. package/package.json +2 -2
  124. package/dist/AiChatPanel-A5DCEHTO.mjs.br +0 -0
  125. package/dist/AiChatPanel-A5DCEHTO.mjs.gz +0 -0
  126. package/dist/AiChatPanel-XLQM4BQJ.js.br +0 -0
  127. package/dist/AiChatPanel-XLQM4BQJ.js.gz +0 -0
  128. package/dist/Area3DChartScene-5CMEMIBI.mjs.br +0 -0
  129. package/dist/Area3DChartScene-5CMEMIBI.mjs.gz +0 -0
  130. package/dist/Area3DChartScene-RZ3V3WOR.js.br +0 -0
  131. package/dist/Area3DChartScene-RZ3V3WOR.js.gz +0 -0
  132. package/dist/Bar3DChartScene-H3MYUJKV.mjs.br +0 -0
  133. package/dist/Bar3DChartScene-H3MYUJKV.mjs.gz +0 -0
  134. package/dist/Bar3DChartScene-KHCQ6TEC.js.br +0 -0
  135. package/dist/Bar3DChartScene-KHCQ6TEC.js.gz +0 -0
  136. package/dist/Line3DChartScene-QEACF3U3.js.br +0 -0
  137. package/dist/Line3DChartScene-QEACF3U3.js.gz +0 -0
  138. package/dist/Line3DChartScene-YFRPJHDX.mjs.br +0 -0
  139. package/dist/Line3DChartScene-YFRPJHDX.mjs.gz +0 -0
  140. package/dist/Model3DScene-O24KP723.mjs.br +0 -0
  141. package/dist/Model3DScene-O24KP723.mjs.gz +0 -0
  142. package/dist/Model3DScene-QQWKGJ3T.js.br +0 -0
  143. package/dist/Model3DScene-QQWKGJ3T.js.gz +0 -0
  144. package/dist/PieChart3DScene-CI6CW22C.mjs.br +0 -0
  145. package/dist/PieChart3DScene-CI6CW22C.mjs.gz +0 -0
  146. package/dist/PieChart3DScene-L3MHKQHW.js.br +0 -0
  147. package/dist/PieChart3DScene-L3MHKQHW.js.gz +0 -0
  148. package/dist/SmartArt3DScene-XCFVGCXE.mjs.br +0 -0
  149. package/dist/SmartArt3DScene-XCFVGCXE.mjs.gz +0 -0
  150. package/dist/SmartArt3DScene-ZO3KFDI2.js.br +0 -0
  151. package/dist/SmartArt3DScene-ZO3KFDI2.js.gz +0 -0
  152. package/dist/SurfaceChart3DScene-5IER6VFW.js.br +0 -0
  153. package/dist/SurfaceChart3DScene-5IER6VFW.js.gz +0 -0
  154. package/dist/SurfaceChart3DScene-JUXRC3K2.mjs.br +0 -0
  155. package/dist/SurfaceChart3DScene-JUXRC3K2.mjs.gz +0 -0
  156. package/dist/chunk-4222CHFH.js.br +0 -0
  157. package/dist/chunk-4222CHFH.js.gz +0 -0
  158. package/dist/chunk-6IMB5DNJ.mjs.br +0 -0
  159. package/dist/chunk-6IMB5DNJ.mjs.gz +0 -0
  160. package/dist/chunk-DE3S3UHX.js.br +0 -0
  161. package/dist/chunk-DE3S3UHX.js.gz +0 -0
  162. package/dist/chunk-F5NPGNMA.js.br +0 -0
  163. package/dist/chunk-F5NPGNMA.js.gz +0 -0
  164. package/dist/chunk-FRZIBZTE.mjs.br +0 -0
  165. package/dist/chunk-L3ZIBQEB.js.br +0 -0
  166. package/dist/chunk-PFPKBNNZ.mjs.br +0 -0
  167. package/dist/chunk-PFPKBNNZ.mjs.gz +0 -0
  168. package/dist/chunk-QWA5YEIZ.js.br +0 -0
  169. package/dist/chunk-QWA5YEIZ.js.gz +0 -0
  170. package/dist/chunk-RHWQKZLB.mjs.br +0 -0
  171. package/dist/chunk-RHWQKZLB.mjs.gz +0 -0
  172. package/dist/chunk-RNP5HP4L.mjs.br +0 -0
  173. package/dist/chunk-SN5EUDIT.js.br +0 -0
  174. package/dist/chunk-SN5EUDIT.js.gz +0 -0
  175. package/dist/chunk-UPJW34YG.mjs.br +0 -0
  176. package/dist/chunk-UPJW34YG.mjs.gz +0 -0
Binary file
Binary file
@@ -1,5 +1,5 @@
1
- import { SHAPE_PRESET_DEFS, VIEWER_SHORTCUT_REFERENCE, STROKE_DASH_OPTIONS, getAnimationInitialStyle, cloneHistorySnapshot, hasShapeProperties, getImageFitStyle, getComputedFillStyle, isImageLikeElement, getCropShapeClipPath, getImageTilingStyle, mediaPlaybackAttributes, buildTextBlockStyle, hasTextProperties, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, buildTextBodyLayoutStyle, buildTextBody3DSceneStyle, buildParagraphs, colorWithOpacity, normalizeHexColor, hexToRgbUnit, build3DExtrusionData, getComputedEffectStyle, getComputedStrokeStyle, getAnimationColorBaseStyle, isStrokeOnlyPresetElement, resolveShapeGeometry, normalizeStrokeDashType, getSvgStrokeDasharray, buildSvgGradientDef, buildStrokeOutline, getPresetShapeVectorGeometry, isWedgeCalloutPresetShape, svgGradientFillRef, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, svgLineCap, getCompoundLineOffsets, getCompoundLineWidths, canDrillDown, computeSelectionRect, DEFAULT_FONT_FAMILY, cellStyleToCss, rectToCells, isCellInRect, tableContainerCss, buildChartViewModel, resolveChartKind, chartPreserveAspectRatio, buildNotesPdfBytes, buildSlidesPdfBytes, buildPreviewAnimation, buildMotionPathPreview, mediaFallbackVisual, scheduleMediaTrimAndFade, registerCrossSlideAudio, resolveAutoFitFontScale, resolveFontKerning, getSubstituteFontFamily, parsePanoseString, resolveScriptFontSet, hasDistinctScriptFonts, nestedTextDecorationStyle, pieceLetterSpacing, resolveMetricTrackingPx, hollowTextFillStyle, stripUnderlineDecoration, buildTabContext, TEXT_BUILD_ID_SEP, buildTextBuildSpec, textBuildSpanStyle, apply3dEffects, clampUnitInterval, customGeometryPathsToSvgSubpaths, buildSubpathPaints, computeColumnBoundaries, getTableCellBandStyle, parseDrawingColor, parseDrawingColorOpacity, getCellDiagonalBorders, cellRunStyle, getChartStylePalette, computeChartLegendLayout, mediaFallbackIcon, mediaFallbackLabelKey, MEDIA_CHROME_ATTRIBUTE, convertOmmlToMathMl, sanitizeMathMl, tableCellCss, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, ooxmlGradientAngleToCssDegrees, buildRectPathGradient, buildRunTabLines, chartPartToAttrs, splitWordsForUnderline, splitRunForMetrics, splitRunByScriptFont } from './chunk-6IMB5DNJ.mjs';
2
- import { translationsEn } from './chunk-FRZIBZTE.mjs';
1
+ import { SHAPE_PRESET_DEFS, VIEWER_SHORTCUT_REFERENCE, STROKE_DASH_OPTIONS, getAnimationInitialStyle, cloneHistorySnapshot, hasShapeProperties, getImageFitStyle, getComputedFillStyle, isImageLikeElement, getCropShapeClipPath, getImageTilingStyle, mediaPlaybackAttributes, buildTextBlockStyle, hasTextProperties, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, buildTextBodyLayoutStyle, buildTextBody3DSceneStyle, buildParagraphs, colorWithOpacity, normalizeHexColor, hexToRgbUnit, build3DExtrusionData, getComputedEffectStyle, getComputedStrokeStyle, getAnimationColorBaseStyle, isStrokeOnlyPresetElement, resolveShapeGeometry, normalizeStrokeDashType, getSvgStrokeDasharray, buildSvgGradientDef, buildStrokeOutline, getPresetShapeVectorGeometry, isWedgeCalloutPresetShape, svgGradientFillRef, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, svgLineCap, getCompoundLineOffsets, getCompoundLineWidths, canDrillDown, computeSelectionRect, DEFAULT_FONT_FAMILY, cellStyleToCss, rectToCells, isCellInRect, tableContainerCss, buildChartViewModel, resolveChartKind, chartPreserveAspectRatio, buildNotesPdfBytes, buildSlidesPdfBytes, buildPreviewAnimation, buildMotionPathPreview, mediaFallbackVisual, scheduleMediaTrimAndFade, registerCrossSlideAudio, resolveAutoFitFontScale, resolveFontKerning, getSubstituteFontFamily, parsePanoseString, resolveScriptFontSet, hasDistinctScriptFonts, nestedTextDecorationStyle, pieceLetterSpacing, resolveMetricTrackingPx, hollowTextFillStyle, stripUnderlineDecoration, buildTabContext, TEXT_BUILD_ID_SEP, buildTextBuildSpec, textBuildSpanStyle, apply3dEffects, clampUnitInterval, customGeometryPathsToSvgSubpaths, buildSubpathPaints, computeColumnBoundaries, getTableCellBandStyle, parseDrawingColor, parseDrawingColorOpacity, getCellDiagonalBorders, cellRunStyle, getChartStylePalette, computeChartLegendLayout, mediaFallbackIcon, mediaFallbackLabelKey, MEDIA_CHROME_ATTRIBUTE, convertOmmlToMathMl, sanitizeMathMl, tableCellCss, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, ooxmlGradientAngleToCssDegrees, buildRectPathGradient, buildRunTabLines, chartPartToAttrs, splitWordsForUnderline, splitRunForMetrics, splitRunByScriptFont } from './chunk-VQX7G75Z.mjs';
2
+ import { translationsEn } from './chunk-JBSAKP4Z.mjs';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  import React7, { useRef, useState, useEffect, useCallback, useMemo, useLayoutEffect } from 'react';
@@ -820,8 +820,8 @@ function getTextLayoutStyle(element) {
820
820
  }
821
821
 
822
822
  // src/viewer/utils/text-effects.tsx
823
- function buildTextBody3DSceneStyle2(textStyle) {
824
- return buildTextBody3DSceneStyle(textStyle);
823
+ function buildTextBody3DSceneStyle2(textStyle, elementSize) {
824
+ return buildTextBody3DSceneStyle(textStyle, elementSize);
825
825
  }
826
826
 
827
827
  // src/viewer/utils/text-warp-css.tsx
@@ -1662,8 +1662,8 @@ function build3DExtrusionData2(shape3d, scene3d, fillColor, elementWidth, elemen
1662
1662
  elementHeight
1663
1663
  );
1664
1664
  }
1665
- function apply3dEffects2(base, scene3d, shape3d, fillColorFallback) {
1666
- apply3dEffects(base, scene3d, shape3d, fillColorFallback);
1665
+ function apply3dEffects2(base, scene3d, shape3d, fillColorFallback, elementSize) {
1666
+ apply3dEffects(base, scene3d, shape3d, fillColorFallback, elementSize);
1667
1667
  }
1668
1668
 
1669
1669
  // src/viewer/utils/shape-visual-style.ts
@@ -1674,6 +1674,17 @@ function rendersWedgeCalloutVector(element) {
1674
1674
  return element.type === "shape" && isWedgeCalloutPresetShape(element.shapeType);
1675
1675
  }
1676
1676
  function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _strokeColor, animatesFill, animatesStroke, parentGroupFill) {
1677
+ if (element.type === "group") {
1678
+ const fx2 = getComputedEffectStyle(element);
1679
+ const groupStyle = {};
1680
+ if (fx2.filter) {
1681
+ groupStyle.filter = fx2.filter;
1682
+ }
1683
+ if (fx2.overflowVisible) {
1684
+ groupStyle.overflow = "visible";
1685
+ }
1686
+ return groupStyle;
1687
+ }
1677
1688
  if (!hasShapeProperties(element)) {
1678
1689
  return {};
1679
1690
  }
@@ -1730,7 +1741,10 @@ function getShapeVisualStyle(element, _hasFill, fillColor, _strokeWidth, _stroke
1730
1741
  base.borderColor = void 0;
1731
1742
  base.borderStyle = void 0;
1732
1743
  }
1733
- apply3dEffects2(base, ss?.scene3d, ss?.shape3d, ss?.fillColor ?? fillColor);
1744
+ apply3dEffects2(base, ss?.scene3d, ss?.shape3d, ss?.fillColor ?? fillColor, {
1745
+ width: element.width,
1746
+ height: element.height
1747
+ });
1734
1748
  if (rendersCustomVectorPath(element) || rendersWedgeCalloutVector(element) || isStrokeOnlyPresetElement(element)) {
1735
1749
  base.backgroundColor = "transparent";
1736
1750
  base.backgroundImage = void 0;
@@ -3520,6 +3534,7 @@ function renderPrimitive(prim, key) {
3520
3534
  strokeWidth: l.strokeWidth,
3521
3535
  strokeDasharray: l.dashArray,
3522
3536
  opacity: l.opacity ?? 1,
3537
+ transform: l.transform,
3523
3538
  children: l.title !== void 0 ? /* @__PURE__ */ jsx("title", { children: l.title }) : null
3524
3539
  },
3525
3540
  key
@@ -3536,6 +3551,7 @@ function renderPrimitive(prim, key) {
3536
3551
  strokeWidth: p.strokeWidth,
3537
3552
  opacity: p.opacity ?? 1,
3538
3553
  strokeDasharray: p.dashArray,
3554
+ transform: p.transform,
3539
3555
  ...partAttrs(p.part),
3540
3556
  children: p.title !== void 0 ? /* @__PURE__ */ jsx("title", { children: p.title }) : null
3541
3557
  },
Binary file
Binary file
@@ -1,6 +1,6 @@
1
- import { cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, UNGROUPED_SECTION_ID, DEFAULT_SECTION_GROUP_ID, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, buildPdfFromImageData, buildNotesPdf, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-RHWQKZLB.mjs';
2
- import { DEFAULT_VIEWER_OPTIONS, TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createPresenceProjector, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, createWheelStepBuffer, createViewerZoomStore, clampZoomScale, mapEditingWheel, createActiveAnimationGroup, cancelBuildReveal, clearPlaybackTimers, PresentationAnimationController, resolveMediaTimeNodeElementIds, advanceMainSequence, playGroup, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, resolveAutoAdvanceDelayMs, hasShowSlideAfter, nextShowSlideIndex, previousShowSlideIndex, createPresenterShowGuard, firstShowSlideIndex, attachPresentationVisibilityPause, presentationEntrySlideIndex, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, visibleTemplateElements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, resolveMediaElementSource, collectImagePaths, applyImagePathPatches, resolveTableCellImageUrls, resolveTableStyleImageUrls, partitionTemplateElements, seedRecentColors, resolveAuthoredCustomShowId, buildInitialGuides, readOnlyRecommendation, compatibilityWarningToasts, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, hasTextProperties, remapTextToSegments, updateMasterViewElement, isTemplateElementId, updateElement, hasShapeProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, masterViewElements, replaceMasterViewElements, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, canInteractWithElement, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, downloadBlob, resolveImageResolutionScale, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, describeFontEmbedding, isMobileViewport, resolveAuthoredSlideRange, mayLeaveSlideShow, stopAllPersistentAudio, guidePxToEmu, buildSaveSlides, buildDeckSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, collectReferencedFontFamilies, resolveGoogleWebfontHref, mapSlideShowStartKey, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, viewerPreferencesFromViewProperties, DEFAULT_VIEWER_PREFERENCES, viewPropertiesPatchFromPreferences, openPptxFile, readBackstageRecentFile, isActionHidden, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, savedPresentationFileName, exportDeckJson, groupElements, generateElementId, makeCloneId, ungroupElements, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, mapPresentationKey, lastShowSlideIndex, mapPresentationWheel, openPendingPrintWindow, computeColorFilter, filterHiddenSlideIndices, computeSlideIndices, buildPrintDocument, finishPrintWindow, buildPrintHtmlDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, reResolveElementColors, scheduleAutoAdvanceChain, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, resolveTransitionSoundAction, runPresentationAction, safeOpenUrl, toggleStageElementMedia, resolveOleVerbTarget, openUrlInNewTab, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, computeGridSpacingPx, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, resolveHistoryDepth, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, replyToCommentInList, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, setCellText, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, resolvePresentationAction, ACTION_BUTTON_PRESETS, elementActionToPptxAction, isUrlSafe, buildSmartArtPresetData, classifyMediaType, computeSnapToShape, publishLiveGeometry, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, shouldConfirmExternalHyperlink, applyResize, lockResizeAspect, snapBoxToGrid, applyMotionPathPreset } from './chunk-6IMB5DNJ.mjs';
3
- import { translationsEn } from './chunk-FRZIBZTE.mjs';
1
+ import { cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, UNGROUPED_SECTION_ID, DEFAULT_SECTION_GROUP_ID, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, buildPdfFromImageData, buildNotesPdf, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-NTWFXLZX.mjs';
2
+ import { DEFAULT_VIEWER_OPTIONS, TOOLBAR_TABS, computeVirtualRange, DEFAULT_VIRTUAL_OVERSCAN, createPresenceProjector, BROADCAST_THROTTLE_MS, createSyncGate, clearLocalAwareness, validateRoomId, createDepartureChannel, resolveTransportForServerUrl, isMixedContentBlocked, CONNECTION_TIMEOUT_MS, registerCollaborationTeardown, sanitizeColor, cloneTemplateElementsBySlideId, cloneSlide, createWheelStepBuffer, createViewerZoomStore, clampZoomScale, mapEditingWheel, createActiveAnimationGroup, cancelBuildReveal, clearPlaybackTimers, PresentationAnimationController, resolveMediaTimeNodeElementIds, advanceMainSequence, playGroup, PRESENTATION_HASH, PRESENTATION_NONCE_KEY, PRESENTATION_CHANNEL_NAME, swapPresentationWindows, PRESENTATION_MESSAGE_ORIGIN, clearAudienceContent, buildPresentationAudienceUrl, resolveAudienceScreenPlacement, placeAudienceWindow, storeAudienceContent, isPresentationSessionMessage, endAudienceDisplay, createPresentationKeyBuffer, acceptsPresentationInput, resolveAutoAdvanceDelayMs, hasShowSlideAfter, nextShowSlideIndex, previousShowSlideIndex, createPresenterShowGuard, firstShowSlideIndex, attachPresentationVisibilityPause, presentationEntrySlideIndex, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, visibleTemplateElements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, resolveMediaElementSource, collectImagePaths, applyImagePathPatches, resolveTableCellImageUrls, resolveTableStyleImageUrls, partitionTemplateElements, seedRecentColors, resolveAuthoredCustomShowId, buildInitialGuides, readOnlyRecommendation, compatibilityWarningToasts, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, hasTextProperties, remapTextToSegments, updateMasterViewElement, isTemplateElementId, updateElement, hasShapeProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, masterViewElements, replaceMasterViewElements, addSection, renameSection, deleteSection, moveSectionUp, moveSectionDown, moveSlidesToSection, canInteractWithElement, normalizeColorsForCapture, preprocessCssForCapture, slideProgressPercent, slideStatusLabel, EXPORT_ASSEMBLING_PERCENT, EXPORT_DONE_PERCENT, isExportAbortError, recordProgressPercent, downloadBlob, resolveImageResolutionScale, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, describeFontEmbedding, isMobileViewport, resolveAuthoredSlideRange, mayLeaveSlideShow, stopAllPersistentAudio, guidePxToEmu, buildSaveSlides, buildDeckSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, collectReferencedFontFamilies, resolveGoogleWebfontHref, mapSlideShowStartKey, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, detectTouchDevice, detectOrientation, deriveViewportBreakpoints, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, checkModifyPassword, viewerPreferencesFromViewProperties, DEFAULT_VIEWER_PREFERENCES, viewPropertiesPatchFromPreferences, openPptxFile, readBackstageRecentFile, isActionHidden, resolveInlineEditAutoFitHeight, resolveInlineEditNormAutofitShrink, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, savedPresentationFileName, exportDeckJson, groupElements, generateElementId, makeCloneId, ungroupElements, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, mapPresentationKey, lastShowSlideIndex, mapPresentationWheel, openPendingPrintWindow, computeColorFilter, filterHiddenSlideIndices, computeSlideIndices, buildPrintDocument, finishPrintWindow, buildPrintHtmlDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, reResolveElementColors, scheduleAutoAdvanceChain, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, resolveTransitionSoundAction, runPresentationAction, safeOpenUrl, toggleStageElementMedia, resolveOleVerbTarget, openUrlInNewTab, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, computeGridSpacingPx, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, resolveHistoryDepth, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, replyToCommentInList, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, setCellText, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, resolvePresentationAction, ACTION_BUTTON_PRESETS, elementActionToPptxAction, isUrlSafe, buildSmartArtPresetData, classifyMediaType, computeSnapToShape, publishLiveGeometry, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, shouldConfirmExternalHyperlink, applyResize, lockResizeAspect, snapBoxToGrid, applyMotionPathPreset } from './chunk-VQX7G75Z.mjs';
3
+ import { translationsEn } from './chunk-JBSAKP4Z.mjs';
4
4
  import { createContext, useRef, useState, useEffect, useCallback, useMemo, useLayoutEffect, useContext, useImperativeHandle, useSyncExternalStore } from 'react';
5
5
  import { useTranslation } from 'react-i18next';
6
6
 
@@ -1016,7 +1016,7 @@ function scheduleEntranceAnimationTimers(slide, setPresentationAnimations, prese
1016
1016
 
1017
1017
  // src/viewer/hooks/presentation-mode/useAnimationPlayback.ts
1018
1018
  function useAnimationPlayback(input) {
1019
- const { slides, onPlayActionSound, showWithAnimation } = input;
1019
+ const { slides, onPlayActionSound, showWithAnimation, canvasSize, themeColorMap } = input;
1020
1020
  const animationsEnabled = showWithAnimation !== false;
1021
1021
  const [presentationAnimations, setPresentationAnimations] = useState([]);
1022
1022
  const [presentationElementStates, setPresentationElementStates] = useState(/* @__PURE__ */ new Map());
@@ -1064,7 +1064,11 @@ function useAnimationPlayback(input) {
1064
1064
  setHoverTriggerShapeIds(/* @__PURE__ */ new Set());
1065
1065
  return;
1066
1066
  }
1067
- const controller = PresentationAnimationController.fromSlide(slide);
1067
+ const controller = PresentationAnimationController.fromSlide(slide, {
1068
+ slideHeightPx: canvasSize?.height,
1069
+ slideWidthPx: canvasSize?.width,
1070
+ themeColorMap
1071
+ });
1068
1072
  controllerRef.current = controller;
1069
1073
  mediaTimeNodeElementIdsRef.current = resolveMediaTimeNodeElementIds(
1070
1074
  slide.nativeAnimations ?? []
@@ -1074,7 +1078,7 @@ function useAnimationPlayback(input) {
1074
1078
  setHoverTriggerShapeIds(controller.hoverTriggerShapeIds);
1075
1079
  setPresentationElementStates(controller.computeStates());
1076
1080
  },
1077
- [slides]
1081
+ [slides, canvasSize, themeColorMap]
1078
1082
  );
1079
1083
  const playNextAnimationGroup = useCallback(() => {
1080
1084
  if (!animationsEnabled) {
@@ -2233,6 +2237,8 @@ function usePresentationMode(input) {
2233
2237
  slides,
2234
2238
  templateElementsBySlideId,
2235
2239
  visibleSlideIndexes,
2240
+ canvasSize,
2241
+ themeColorMap,
2236
2242
  activeSlideIndex,
2237
2243
  containerRef,
2238
2244
  content,
@@ -2281,7 +2287,13 @@ function usePresentationMode(input) {
2281
2287
  startSlideAnimations,
2282
2288
  isSeededCompleted,
2283
2289
  presentationTimersRef
2284
- } = useAnimationPlayback({ slides, onPlayActionSound, showWithAnimation });
2290
+ } = useAnimationPlayback({
2291
+ slides,
2292
+ onPlayActionSound,
2293
+ showWithAnimation,
2294
+ canvasSize,
2295
+ themeColorMap
2296
+ });
2285
2297
  const {
2286
2298
  rehearsing,
2287
2299
  setRehearsing,
@@ -3956,6 +3968,7 @@ function useLoadContent({
3956
3968
  setDigitalSignatureCount,
3957
3969
  setGuides,
3958
3970
  setReadOnlyRecommendation,
3971
+ setModifyVerifier,
3959
3972
  setCompatToasts,
3960
3973
  setLoading,
3961
3974
  setError,
@@ -4100,6 +4113,7 @@ function useLoadContent({
4100
4113
  setDigitalSignatureCount(parsed.digitalSignatureCount ?? 0);
4101
4114
  setGuides(buildInitialGuides(parsed.presentationGuides, parsed.slides[0]?.guides));
4102
4115
  setReadOnlyRecommendation(readOnlyRecommendation(parsed));
4116
+ setModifyVerifier(parsed.modifyVerifier ?? void 0);
4103
4117
  setCompatToasts(
4104
4118
  compatibilityWarningToasts([
4105
4119
  ...parsed.warnings ?? [],
@@ -8777,6 +8791,8 @@ function usePresentationSetup(input) {
8777
8791
  slides,
8778
8792
  templateElementsBySlideId,
8779
8793
  visibleSlideIndexes,
8794
+ canvasSize,
8795
+ themeColorMap,
8780
8796
  activeSlideIndex,
8781
8797
  containerRef,
8782
8798
  content,
@@ -8806,6 +8822,8 @@ function usePresentationSetup(input) {
8806
8822
  slides,
8807
8823
  templateElementsBySlideId,
8808
8824
  visibleSlideIndexes,
8825
+ canvasSize,
8826
+ themeColorMap,
8809
8827
  activeSlideIndex,
8810
8828
  containerRef,
8811
8829
  content,
@@ -9377,6 +9395,7 @@ function useContentLifecycle(input) {
9377
9395
  onContentApplied,
9378
9396
  allowExternalImages,
9379
9397
  setReadOnlyRecommendation,
9398
+ setModifyVerifier,
9380
9399
  setCompatToasts
9381
9400
  } = input;
9382
9401
  const { handlerRef } = useLoadContent({
@@ -9417,6 +9436,7 @@ function useContentLifecycle(input) {
9417
9436
  setDigitalSignatureCount: state.setDigitalSignatureCount,
9418
9437
  setGuides: state.setGuides,
9419
9438
  setReadOnlyRecommendation,
9439
+ setModifyVerifier,
9420
9440
  setCompatToasts,
9421
9441
  setLoading: state.setLoading,
9422
9442
  setError: state.setError,
@@ -9691,6 +9711,7 @@ function useViewerIntegration(input) {
9691
9711
  autosaveIntervalMs,
9692
9712
  allowExternalImages,
9693
9713
  setReadOnlyRecommendation,
9714
+ setModifyVerifier,
9694
9715
  setCompatToasts,
9695
9716
  canEdit,
9696
9717
  promptKeepInkAnnotations,
@@ -9762,6 +9783,7 @@ function useViewerIntegration(input) {
9762
9783
  onContentApplied: () => setLoadVersion((v) => v + 1),
9763
9784
  allowExternalImages,
9764
9785
  setReadOnlyRecommendation,
9786
+ setModifyVerifier,
9765
9787
  setCompatToasts
9766
9788
  }
9767
9789
  );
@@ -11182,11 +11204,17 @@ function useViewerBuildingBlocksCore(input) {
11182
11204
  activeMaster: state.activeMaster,
11183
11205
  documentGridSpacing: state.viewProperties?.gridSpacing
11184
11206
  });
11207
+ const themeColorMap = useMemo(
11208
+ () => state.theme?.colorScheme ? buildThemeColorMap(state.theme.colorScheme) : void 0,
11209
+ [state.theme?.colorScheme]
11210
+ );
11185
11211
  const { presentation, annotations, actionSoundHandlerRef, setExitModeHandler } = usePresentationSetup({
11186
11212
  mode,
11187
11213
  slides,
11188
11214
  templateElementsBySlideId,
11189
11215
  visibleSlideIndexes,
11216
+ canvasSize,
11217
+ themeColorMap,
11190
11218
  endWithBlackSlide: viewerOptions.advanced.slideShowEndWithBlackSlide,
11191
11219
  // File > Options > Advanced > "Prompt to keep ink annotations when
11192
11220
  // exiting" / "Show popup toolbar" while presenting.
@@ -11244,27 +11272,74 @@ function useReadOnlyRecommendationState(content) {
11244
11272
  const [recommendation, setRecommendation] = useState(
11245
11273
  () => readOnlyRecommendation(void 0)
11246
11274
  );
11275
+ const [modifyVerifier, setModifyVerifier] = useState(void 0);
11247
11276
  const [bannerHidden, setBannerHidden] = useState(false);
11248
11277
  const [editAnywayActive, setEditAnywayActive] = useState(false);
11278
+ const [passwordPromptOpen, setPasswordPromptOpen] = useState(false);
11279
+ const [passwordError, setPasswordError] = useState(null);
11280
+ const [checkingPassword, setCheckingPassword] = useState(false);
11249
11281
  useEffect(() => {
11250
11282
  setBannerHidden(false);
11251
11283
  setEditAnywayActive(false);
11284
+ setPasswordPromptOpen(false);
11285
+ setPasswordError(null);
11286
+ setCheckingPassword(false);
11252
11287
  }, [content]);
11253
- const editAnyway = useCallback(() => {
11288
+ const unlock = useCallback(() => {
11254
11289
  setEditAnywayActive(true);
11255
11290
  setBannerHidden(true);
11291
+ setPasswordPromptOpen(false);
11292
+ setPasswordError(null);
11256
11293
  }, []);
11294
+ const editAnyway = useCallback(() => {
11295
+ if (recommendation.requiresPassword) {
11296
+ setPasswordPromptOpen(true);
11297
+ setPasswordError(null);
11298
+ return;
11299
+ }
11300
+ unlock();
11301
+ }, [recommendation.requiresPassword, unlock]);
11257
11302
  const dismiss = useCallback(() => {
11258
11303
  setBannerHidden(true);
11259
11304
  }, []);
11305
+ const cancelPasswordPrompt = useCallback(() => {
11306
+ setPasswordPromptOpen(false);
11307
+ setPasswordError(null);
11308
+ }, []);
11309
+ const submitPassword = useCallback(
11310
+ async (password) => {
11311
+ setCheckingPassword(true);
11312
+ try {
11313
+ const result = await checkModifyPassword(modifyVerifier, password);
11314
+ if (result.ok) {
11315
+ unlock();
11316
+ } else {
11317
+ setPasswordError(result.reason);
11318
+ }
11319
+ } finally {
11320
+ setCheckingPassword(false);
11321
+ }
11322
+ },
11323
+ // oxlint-disable-next-line react/memo-dependencies -- see comment above
11324
+ [modifyVerifier, unlock]
11325
+ );
11260
11326
  return {
11261
11327
  recommendation,
11262
11328
  setRecommendation,
11329
+ setModifyVerifier,
11263
11330
  /** Whether the viewer's `canEdit` should be forced off. */
11264
11331
  locked: recommendation.defaultReadOnly && !editAnywayActive,
11265
11332
  bannerVisible: recommendation.kind !== null && !bannerHidden,
11266
11333
  editAnyway,
11267
- dismiss
11334
+ dismiss,
11335
+ /** Whether the inline password prompt should render in place of the banner's buttons. */
11336
+ passwordPromptOpen,
11337
+ /** Reason the last password attempt failed, or null before any attempt / after success. */
11338
+ passwordError,
11339
+ /** True while `submitPassword`'s check is in flight (disables the form). */
11340
+ checkingPassword,
11341
+ submitPassword,
11342
+ cancelPasswordPrompt
11268
11343
  };
11269
11344
  }
11270
11345
  function useViewPreferencesSync(input) {
@@ -11442,6 +11517,7 @@ function useViewerBuildingBlocksState(input) {
11442
11517
  // under the same default-off, core-side SSRF/privacy guard.
11443
11518
  allowExternalImages: viewerOptions.trust.allowExternalContent,
11444
11519
  setReadOnlyRecommendation: readOnlyRec.setRecommendation,
11520
+ setModifyVerifier: readOnlyRec.setModifyVerifier,
11445
11521
  setCompatToasts: compatToastsState.setToasts,
11446
11522
  canEdit,
11447
11523
  promptKeepInkAnnotations: viewerOptions.advanced.slideShowPromptKeepInkAnnotations,
Binary file
Binary file
@@ -0,0 +1,27 @@
1
+ import { useRef, useCallback, useMemo } from 'react';
2
+
3
+ // src/viewer/components/elements/chart3d-interaction-hooks.ts
4
+ function useStableChart3DInteraction(interaction) {
5
+ const ref = useRef(interaction);
6
+ ref.current = interaction;
7
+ const onSelect = useCallback((part) => {
8
+ ref.current?.onSelect?.(part);
9
+ }, []);
10
+ const onValueDragPreview = useCallback((part, value) => {
11
+ ref.current?.onValueDragPreview?.(part, value);
12
+ }, []);
13
+ const onValueDragCommit = useCallback((part, value) => {
14
+ ref.current?.onValueDragCommit?.(part, value);
15
+ }, []);
16
+ return useMemo(
17
+ () => ({ onSelect, onValueDragPreview, onValueDragCommit }),
18
+ [onSelect, onValueDragPreview, onValueDragCommit]
19
+ );
20
+ }
21
+ function useLatestRef(value) {
22
+ const ref = useRef(value);
23
+ ref.current = value;
24
+ return ref;
25
+ }
26
+
27
+ export { useLatestRef, useStableChart3DInteraction };
@@ -0,0 +1,4 @@
1
+ ]@�� �V_I����X}��X$���ko|��hn{�,�en��~
2
+ ����\'��*?�*��e������(���x�r��+9�EA���ʕt�^Q��))w��$A!�E�iUX׸���aW����a �/���ecp�Wl�uYL�9�a"�I��棵)M2e�/��X�R�r�rG(��ۃ!����㜞C-�ͫU
3
+ ��91)sb���D�-o���nYO�u�#���`�
4
+ �x��$
Binary file
@@ -3665,6 +3665,13 @@ var translationsEn = {
3665
3665
  "pptx.readOnly.bannerTitle": "Read-only",
3666
3666
  "pptx.readOnly.editAnyway": "Edit anyway",
3667
3667
  "pptx.readOnly.dismiss": "Dismiss",
3668
+ // Modify-password unlock prompt: shown instead of unlocking immediately when
3669
+ // the modifyVerifier carries a hash this viewer can check.
3670
+ "pptx.readOnly.passwordLabel": "Password",
3671
+ "pptx.readOnly.passwordPlaceholder": "Enter password",
3672
+ "pptx.readOnly.unlock": "Unlock",
3673
+ "pptx.readOnly.wrongPassword": "That password isn't correct. The presentation stays read-only.",
3674
+ "pptx.readOnly.unsupportedAlgorithm": "This file's password protection cannot be verified by this viewer.",
3668
3675
  "pptx.compatibility.toastTitle": "Compatibility notice",
3669
3676
  "pptx.compatibility.dismiss": "Dismiss",
3670
3677
  "pptx.compatibility.dismissAll": "Dismiss all",
@@ -3680,6 +3687,7 @@ var translationsEn = {
3680
3687
  "pptx.chart.userShapes": "Overlay shapes",
3681
3688
  "pptx.chart.userShapesEmpty": "No overlay shapes on this chart.",
3682
3689
  "pptx.chart.userShapeAddTextBox": "Add text box",
3690
+ "pptx.chart.userShapeAddIntoGroup": "Add shape here",
3683
3691
  "pptx.chart.userShapeDelete": "Delete overlay shape",
3684
3692
  "pptx.chart.userShapeFrom": "From",
3685
3693
  "pptx.chart.userShapeTo": "To",
@@ -3689,6 +3697,13 @@ var translationsEn = {
3689
3697
  "pptx.chart.userShapeKindPic": "Picture",
3690
3698
  "pptx.chart.userShapeKindGrpSp": "Group",
3691
3699
  "pptx.chart.userShapeKindGraphicFrame": "Embedded object",
3700
+ "pptx.chart.userShapeText": "Text",
3701
+ "pptx.chart.userShapeFill": "Fill",
3702
+ "pptx.chart.userShapeStroke": "Line",
3703
+ "pptx.chart.userShapeAltText": "Alt text",
3704
+ "pptx.chart.userShapePosition": "Position",
3705
+ "pptx.chart.userShapeSize": "Size",
3706
+ "pptx.chart.userShapeRotation": "Rotation",
3692
3707
  "pptx.masterView.addLayout": "Insert Layout",
3693
3708
  "pptx.masterView.duplicateLayout": "Duplicate Layout",
3694
3709
  "pptx.masterView.deleteLayout": "Delete Layout",
Binary file