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.
- package/CHANGELOG.md +8 -0
- package/dist/{AiChatPanel-XLQM4BQJ.js → AiChatPanel-3A42W7RW.js} +25 -25
- package/dist/AiChatPanel-3A42W7RW.js.br +0 -0
- package/dist/AiChatPanel-3A42W7RW.js.gz +0 -0
- package/dist/{AiChatPanel-A5DCEHTO.mjs → AiChatPanel-II6VOOAL.mjs} +4 -4
- package/dist/AiChatPanel-II6VOOAL.mjs.br +0 -0
- package/dist/AiChatPanel-II6VOOAL.mjs.gz +0 -0
- package/dist/{Area3DChartScene-5CMEMIBI.mjs → Area3DChartScene-JM3CQ3WQ.mjs} +21 -4
- package/dist/Area3DChartScene-JM3CQ3WQ.mjs.br +0 -0
- package/dist/Area3DChartScene-JM3CQ3WQ.mjs.gz +0 -0
- package/dist/{Area3DChartScene-RZ3V3WOR.js → Area3DChartScene-XJK4ZA4R.js} +21 -4
- package/dist/Area3DChartScene-XJK4ZA4R.js.br +0 -0
- package/dist/Area3DChartScene-XJK4ZA4R.js.gz +0 -0
- package/dist/{Bar3DChartScene-KHCQ6TEC.js → Bar3DChartScene-RGRZY5P6.js} +21 -4
- package/dist/Bar3DChartScene-RGRZY5P6.js.br +0 -0
- package/dist/Bar3DChartScene-RGRZY5P6.js.gz +0 -0
- package/dist/{Bar3DChartScene-H3MYUJKV.mjs → Bar3DChartScene-VNFWI2QG.mjs} +21 -4
- package/dist/Bar3DChartScene-VNFWI2QG.mjs.br +0 -0
- package/dist/Bar3DChartScene-VNFWI2QG.mjs.gz +0 -0
- package/dist/{Line3DChartScene-YFRPJHDX.mjs → Line3DChartScene-GXOWGIFJ.mjs} +21 -4
- package/dist/Line3DChartScene-GXOWGIFJ.mjs.br +0 -0
- package/dist/Line3DChartScene-GXOWGIFJ.mjs.gz +0 -0
- package/dist/{Line3DChartScene-QEACF3U3.js → Line3DChartScene-MEY42DBF.js} +21 -4
- package/dist/Line3DChartScene-MEY42DBF.js.br +0 -0
- package/dist/Line3DChartScene-MEY42DBF.js.gz +0 -0
- package/dist/{Model3DScene-QQWKGJ3T.js → Model3DScene-MWXTGHDM.js} +2 -2
- package/dist/Model3DScene-MWXTGHDM.js.br +0 -0
- package/dist/Model3DScene-MWXTGHDM.js.gz +0 -0
- package/dist/{Model3DScene-O24KP723.mjs → Model3DScene-WJ3MMIZH.mjs} +1 -1
- package/dist/Model3DScene-WJ3MMIZH.mjs.br +0 -0
- package/dist/Model3DScene-WJ3MMIZH.mjs.gz +0 -0
- package/dist/{PieChart3DScene-L3MHKQHW.js → PieChart3DScene-FJJGOQIS.js} +15 -4
- package/dist/PieChart3DScene-FJJGOQIS.js.br +0 -0
- package/dist/PieChart3DScene-FJJGOQIS.js.gz +0 -0
- package/dist/{PieChart3DScene-CI6CW22C.mjs → PieChart3DScene-WXJEDYMK.mjs} +15 -4
- package/dist/PieChart3DScene-WXJEDYMK.mjs.br +0 -0
- package/dist/PieChart3DScene-WXJEDYMK.mjs.gz +0 -0
- package/dist/{SmartArt3DScene-ZO3KFDI2.js → SmartArt3DScene-BK7QN3WT.js} +85 -23
- package/dist/SmartArt3DScene-BK7QN3WT.js.br +0 -0
- package/dist/SmartArt3DScene-BK7QN3WT.js.gz +0 -0
- package/dist/{SmartArt3DScene-XCFVGCXE.mjs → SmartArt3DScene-ODKCGJBO.mjs} +85 -23
- package/dist/SmartArt3DScene-ODKCGJBO.mjs.br +0 -0
- package/dist/SmartArt3DScene-ODKCGJBO.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-JUXRC3K2.mjs → SurfaceChart3DScene-IKPE2SVE.mjs} +19 -4
- package/dist/SurfaceChart3DScene-IKPE2SVE.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-IKPE2SVE.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-5IER6VFW.js → SurfaceChart3DScene-VDK3F224.js} +19 -4
- package/dist/SurfaceChart3DScene-VDK3F224.js.br +0 -0
- package/dist/SurfaceChart3DScene-VDK3F224.js.gz +0 -0
- package/dist/{chunk-4222CHFH.js → chunk-3NIJ5HIZ.js} +3187 -2514
- package/dist/chunk-3NIJ5HIZ.js.br +0 -0
- package/dist/chunk-3NIJ5HIZ.js.gz +0 -0
- package/dist/{chunk-RNP5HP4L.mjs → chunk-3Y63XPIN.mjs} +1 -1
- package/dist/chunk-3Y63XPIN.mjs.br +0 -0
- package/dist/{chunk-RNP5HP4L.mjs.gz → chunk-3Y63XPIN.mjs.gz} +0 -0
- package/dist/{chunk-DE3S3UHX.js → chunk-5CPGDXD6.js} +518 -442
- package/dist/chunk-5CPGDXD6.js.br +0 -0
- package/dist/chunk-5CPGDXD6.js.gz +0 -0
- package/dist/{chunk-PFPKBNNZ.mjs → chunk-76Z3X6JX.mjs} +1189 -516
- package/dist/chunk-76Z3X6JX.mjs.br +0 -0
- package/dist/chunk-76Z3X6JX.mjs.gz +0 -0
- package/dist/chunk-DNR6CH6I.js +30 -0
- package/dist/chunk-DNR6CH6I.js.br +0 -0
- package/dist/chunk-DNR6CH6I.js.gz +0 -0
- package/dist/{chunk-SN5EUDIT.js → chunk-G3JPCRKN.js} +13644 -7350
- package/dist/chunk-G3JPCRKN.js.br +0 -0
- package/dist/chunk-G3JPCRKN.js.gz +0 -0
- package/dist/{chunk-FRZIBZTE.mjs → chunk-JBSAKP4Z.mjs} +15 -0
- package/dist/chunk-JBSAKP4Z.mjs.br +0 -0
- package/dist/{chunk-FRZIBZTE.mjs.gz → chunk-JBSAKP4Z.mjs.gz} +0 -0
- package/dist/{chunk-F5NPGNMA.js → chunk-K6Q6KLA6.js} +5 -5
- package/dist/chunk-K6Q6KLA6.js.br +0 -0
- package/dist/chunk-K6Q6KLA6.js.gz +0 -0
- package/dist/{chunk-QWA5YEIZ.js → chunk-LBJAVP3H.js} +194 -178
- package/dist/chunk-LBJAVP3H.js.br +0 -0
- package/dist/chunk-LBJAVP3H.js.gz +0 -0
- package/dist/{chunk-RHWQKZLB.mjs → chunk-NTWFXLZX.mjs} +23 -7
- package/dist/chunk-NTWFXLZX.mjs.br +0 -0
- package/dist/chunk-NTWFXLZX.mjs.gz +0 -0
- package/dist/{chunk-UPJW34YG.mjs → chunk-PCCM7NVY.mjs} +85 -9
- package/dist/chunk-PCCM7NVY.mjs.br +0 -0
- package/dist/chunk-PCCM7NVY.mjs.gz +0 -0
- package/dist/chunk-T6GFCLSM.mjs +27 -0
- package/dist/chunk-T6GFCLSM.mjs.br +4 -0
- package/dist/chunk-T6GFCLSM.mjs.gz +0 -0
- package/dist/{chunk-L3ZIBQEB.js → chunk-TEVGDXVW.js} +15 -0
- package/dist/chunk-TEVGDXVW.js.br +0 -0
- package/dist/{chunk-L3ZIBQEB.js.gz → chunk-TEVGDXVW.js.gz} +0 -0
- package/dist/{chunk-6IMB5DNJ.mjs → chunk-VQX7G75Z.mjs} +13621 -7340
- package/dist/chunk-VQX7G75Z.mjs.br +0 -0
- package/dist/chunk-VQX7G75Z.mjs.gz +0 -0
- package/dist/i18n.js +4 -4
- package/dist/i18n.js.br +0 -0
- package/dist/i18n.js.gz +0 -0
- package/dist/i18n.mjs +1 -1
- package/dist/i18n.mjs.br +0 -0
- package/dist/i18n.mjs.gz +0 -0
- package/dist/index.d.ts +388 -80
- package/dist/index.js +47 -47
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.d.ts +445 -81
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +79 -79
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +4 -4
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/pptx-viewer.css +1 -1
- package/dist/pptx-viewer.css.br +0 -0
- package/dist/pptx-viewer.css.gz +0 -0
- package/dist/viewer/index.d.ts +338 -43
- package/dist/viewer/index.js +27 -27
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +6 -6
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +2 -2
- package/dist/AiChatPanel-A5DCEHTO.mjs.br +0 -0
- package/dist/AiChatPanel-A5DCEHTO.mjs.gz +0 -0
- package/dist/AiChatPanel-XLQM4BQJ.js.br +0 -0
- package/dist/AiChatPanel-XLQM4BQJ.js.gz +0 -0
- package/dist/Area3DChartScene-5CMEMIBI.mjs.br +0 -0
- package/dist/Area3DChartScene-5CMEMIBI.mjs.gz +0 -0
- package/dist/Area3DChartScene-RZ3V3WOR.js.br +0 -0
- package/dist/Area3DChartScene-RZ3V3WOR.js.gz +0 -0
- package/dist/Bar3DChartScene-H3MYUJKV.mjs.br +0 -0
- package/dist/Bar3DChartScene-H3MYUJKV.mjs.gz +0 -0
- package/dist/Bar3DChartScene-KHCQ6TEC.js.br +0 -0
- package/dist/Bar3DChartScene-KHCQ6TEC.js.gz +0 -0
- package/dist/Line3DChartScene-QEACF3U3.js.br +0 -0
- package/dist/Line3DChartScene-QEACF3U3.js.gz +0 -0
- package/dist/Line3DChartScene-YFRPJHDX.mjs.br +0 -0
- package/dist/Line3DChartScene-YFRPJHDX.mjs.gz +0 -0
- package/dist/Model3DScene-O24KP723.mjs.br +0 -0
- package/dist/Model3DScene-O24KP723.mjs.gz +0 -0
- package/dist/Model3DScene-QQWKGJ3T.js.br +0 -0
- package/dist/Model3DScene-QQWKGJ3T.js.gz +0 -0
- package/dist/PieChart3DScene-CI6CW22C.mjs.br +0 -0
- package/dist/PieChart3DScene-CI6CW22C.mjs.gz +0 -0
- package/dist/PieChart3DScene-L3MHKQHW.js.br +0 -0
- package/dist/PieChart3DScene-L3MHKQHW.js.gz +0 -0
- package/dist/SmartArt3DScene-XCFVGCXE.mjs.br +0 -0
- package/dist/SmartArt3DScene-XCFVGCXE.mjs.gz +0 -0
- package/dist/SmartArt3DScene-ZO3KFDI2.js.br +0 -0
- package/dist/SmartArt3DScene-ZO3KFDI2.js.gz +0 -0
- package/dist/SurfaceChart3DScene-5IER6VFW.js.br +0 -0
- package/dist/SurfaceChart3DScene-5IER6VFW.js.gz +0 -0
- package/dist/SurfaceChart3DScene-JUXRC3K2.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-JUXRC3K2.mjs.gz +0 -0
- package/dist/chunk-4222CHFH.js.br +0 -0
- package/dist/chunk-4222CHFH.js.gz +0 -0
- package/dist/chunk-6IMB5DNJ.mjs.br +0 -0
- package/dist/chunk-6IMB5DNJ.mjs.gz +0 -0
- package/dist/chunk-DE3S3UHX.js.br +0 -0
- package/dist/chunk-DE3S3UHX.js.gz +0 -0
- package/dist/chunk-F5NPGNMA.js.br +0 -0
- package/dist/chunk-F5NPGNMA.js.gz +0 -0
- package/dist/chunk-FRZIBZTE.mjs.br +0 -0
- package/dist/chunk-L3ZIBQEB.js.br +0 -0
- package/dist/chunk-PFPKBNNZ.mjs.br +0 -0
- package/dist/chunk-PFPKBNNZ.mjs.gz +0 -0
- package/dist/chunk-QWA5YEIZ.js.br +0 -0
- package/dist/chunk-QWA5YEIZ.js.gz +0 -0
- package/dist/chunk-RHWQKZLB.mjs.br +0 -0
- package/dist/chunk-RHWQKZLB.mjs.gz +0 -0
- package/dist/chunk-RNP5HP4L.mjs.br +0 -0
- package/dist/chunk-SN5EUDIT.js.br +0 -0
- package/dist/chunk-SN5EUDIT.js.gz +0 -0
- package/dist/chunk-UPJW34YG.mjs.br +0 -0
- 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-
|
|
2
|
-
import { translationsEn } from './chunk-
|
|
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-
|
|
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-
|
|
3
|
-
import { translationsEn } from './chunk-
|
|
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({
|
|
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
|
|
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 };
|
|
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
|
|
Binary file
|