pptx-react-viewer 2.2.1 → 2.4.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 (152) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{AiChatPanel-O4NYWO3D.js → AiChatPanel-HLLGXBZF.js} +23 -24
  3. package/dist/AiChatPanel-HLLGXBZF.js.br +0 -0
  4. package/dist/AiChatPanel-HLLGXBZF.js.gz +0 -0
  5. package/dist/{AiChatPanel-XRKEPXAM.mjs → AiChatPanel-SXYMXFYS.mjs} +4 -5
  6. package/dist/AiChatPanel-SXYMXFYS.mjs.br +0 -0
  7. package/dist/AiChatPanel-SXYMXFYS.mjs.gz +0 -0
  8. package/dist/{Model3DScene-JN5F5C4Z.mjs → Model3DScene-IECT4RWT.mjs} +1 -2
  9. package/dist/Model3DScene-IECT4RWT.mjs.br +0 -0
  10. package/dist/Model3DScene-IECT4RWT.mjs.gz +0 -0
  11. package/dist/{Model3DScene-HYE6HA2C.js → Model3DScene-ZQBWLAMC.js} +2 -3
  12. package/dist/Model3DScene-ZQBWLAMC.js.br +0 -0
  13. package/dist/Model3DScene-ZQBWLAMC.js.gz +0 -0
  14. package/dist/{PowerPointViewer-gmU5rc7K.d.ts → PowerPointViewer-Cjn1RgSz.d.ts} +2 -2
  15. package/dist/{PowerPointViewer-gmU5rc7K.d.ts.map → PowerPointViewer-Cjn1RgSz.d.ts.map} +1 -1
  16. package/dist/{SurfaceChart3DScene-FDJ6LC4E.js → SurfaceChart3DScene-4KRMRWW6.js} +2 -3
  17. package/dist/SurfaceChart3DScene-4KRMRWW6.js.br +0 -0
  18. package/dist/SurfaceChart3DScene-4KRMRWW6.js.gz +0 -0
  19. package/dist/{SurfaceChart3DScene-V7P3LQVV.mjs → SurfaceChart3DScene-52C3IMPQ.mjs} +1 -2
  20. package/dist/SurfaceChart3DScene-52C3IMPQ.mjs.br +0 -0
  21. package/dist/SurfaceChart3DScene-52C3IMPQ.mjs.gz +0 -0
  22. package/dist/audience-content-store-BMlth_3U.d.ts +386 -0
  23. package/dist/audience-content-store-BMlth_3U.d.ts.map +1 -0
  24. package/dist/{chunk-YIFO3WQO.js → chunk-25VSL2BB.js} +1 -0
  25. package/dist/chunk-25VSL2BB.js.br +0 -0
  26. package/dist/chunk-25VSL2BB.js.gz +0 -0
  27. package/dist/{chunk-XJTWUXXC.js → chunk-5GHLRHBR.js} +3 -3
  28. package/dist/chunk-5GHLRHBR.js.br +0 -0
  29. package/dist/chunk-5GHLRHBR.js.gz +0 -0
  30. package/dist/{chunk-2U243ZEP.js → chunk-5TPQJWEO.js} +267 -252
  31. package/dist/chunk-5TPQJWEO.js.br +0 -0
  32. package/dist/chunk-5TPQJWEO.js.gz +0 -0
  33. package/dist/{chunk-O75FHZQJ.mjs → chunk-G6Q3NXRV.mjs} +23 -8
  34. package/dist/chunk-G6Q3NXRV.mjs.br +0 -0
  35. package/dist/chunk-G6Q3NXRV.mjs.gz +0 -0
  36. package/dist/{chunk-RYHBWTPI.mjs → chunk-KK7FWBGO.mjs} +89 -69
  37. package/dist/chunk-KK7FWBGO.mjs.br +0 -0
  38. package/dist/chunk-KK7FWBGO.mjs.gz +0 -0
  39. package/dist/{chunk-7NSLKNCT.mjs → chunk-LRIXPSVT.mjs} +4 -6
  40. package/dist/chunk-LRIXPSVT.mjs.br +0 -0
  41. package/dist/chunk-LRIXPSVT.mjs.gz +0 -0
  42. package/dist/{chunk-I2HF7ZPO.mjs → chunk-Q6FC2552.mjs} +1 -1
  43. package/dist/chunk-Q6FC2552.mjs.br +0 -0
  44. package/dist/chunk-Q6FC2552.mjs.gz +0 -0
  45. package/dist/{chunk-R2H3FHK6.js → chunk-QBZA2GMB.mjs} +47788 -32364
  46. package/dist/chunk-QBZA2GMB.mjs.br +0 -0
  47. package/dist/chunk-QBZA2GMB.mjs.gz +0 -0
  48. package/dist/{chunk-K2AW5UXT.js → chunk-VEZO33T2.js} +314 -316
  49. package/dist/chunk-VEZO33T2.js.br +0 -0
  50. package/dist/chunk-VEZO33T2.js.gz +0 -0
  51. package/dist/{chunk-PE2I5L6R.mjs → chunk-WK56SFN7.js} +48287 -31794
  52. package/dist/chunk-WK56SFN7.js.br +0 -0
  53. package/dist/chunk-WK56SFN7.js.gz +0 -0
  54. package/dist/{chunk-QULJW7LU.js → chunk-XSBFV6TL.js} +929 -909
  55. package/dist/chunk-XSBFV6TL.js.br +0 -0
  56. package/dist/chunk-XSBFV6TL.js.gz +0 -0
  57. package/dist/{chunk-PZTPX3HK.mjs → chunk-Z6HIZWIQ.mjs} +1 -0
  58. package/dist/chunk-Z6HIZWIQ.mjs.br +0 -0
  59. package/dist/chunk-Z6HIZWIQ.mjs.gz +0 -0
  60. package/dist/i18n.js +4 -4
  61. package/dist/i18n.js.br +0 -0
  62. package/dist/i18n.js.gz +0 -0
  63. package/dist/i18n.mjs +1 -1
  64. package/dist/i18n.mjs.br +0 -0
  65. package/dist/i18n.mjs.gz +0 -0
  66. package/dist/index.d.ts +92 -87
  67. package/dist/index.js +39 -40
  68. package/dist/index.js.br +0 -0
  69. package/dist/index.js.gz +0 -0
  70. package/dist/index.mjs +6 -7
  71. package/dist/index.mjs.br +0 -0
  72. package/dist/index.mjs.gz +0 -0
  73. package/dist/internals.d.ts +519 -514
  74. package/dist/internals.d.ts.map +1 -1
  75. package/dist/internals.js +79 -81
  76. package/dist/internals.js.br +0 -0
  77. package/dist/internals.js.gz +0 -0
  78. package/dist/internals.mjs +4 -6
  79. package/dist/internals.mjs.br +0 -0
  80. package/dist/internals.mjs.gz +0 -0
  81. package/dist/pptx-viewer.css +1 -1
  82. package/dist/pptx-viewer.css.br +0 -0
  83. package/dist/pptx-viewer.css.gz +0 -0
  84. package/dist/{animation-timeline-eb5z0SHW.d.ts → types-DciBT90G.d.ts} +4 -3
  85. package/dist/types-DciBT90G.d.ts.map +1 -0
  86. package/dist/{useViewerBuildingBlocks-CjureTRf.d.ts → useViewerBuildingBlocks-DMDZRawe.d.ts} +4 -4
  87. package/dist/{useViewerBuildingBlocks-CjureTRf.d.ts.map → useViewerBuildingBlocks-DMDZRawe.d.ts.map} +1 -1
  88. package/dist/viewer/index.d.ts +92 -88
  89. package/dist/viewer/index.js +22 -24
  90. package/dist/viewer/index.js.br +0 -0
  91. package/dist/viewer/index.js.gz +0 -0
  92. package/dist/viewer/index.mjs +6 -8
  93. package/dist/viewer/index.mjs.br +0 -0
  94. package/dist/viewer/index.mjs.gz +0 -0
  95. package/package.json +4 -4
  96. package/dist/AiChatPanel-O4NYWO3D.js.br +0 -0
  97. package/dist/AiChatPanel-O4NYWO3D.js.gz +0 -0
  98. package/dist/AiChatPanel-XRKEPXAM.mjs.br +0 -0
  99. package/dist/AiChatPanel-XRKEPXAM.mjs.gz +0 -0
  100. package/dist/Model3DScene-HYE6HA2C.js.br +0 -0
  101. package/dist/Model3DScene-HYE6HA2C.js.gz +0 -0
  102. package/dist/Model3DScene-JN5F5C4Z.mjs.br +0 -0
  103. package/dist/Model3DScene-JN5F5C4Z.mjs.gz +0 -0
  104. package/dist/SurfaceChart3DScene-FDJ6LC4E.js.br +0 -0
  105. package/dist/SurfaceChart3DScene-FDJ6LC4E.js.gz +0 -0
  106. package/dist/SurfaceChart3DScene-V7P3LQVV.mjs.br +0 -0
  107. package/dist/SurfaceChart3DScene-V7P3LQVV.mjs.gz +0 -0
  108. package/dist/animation-timeline-eb5z0SHW.d.ts.map +0 -1
  109. package/dist/chunk-2QHCOESN.js +0 -28037
  110. package/dist/chunk-2QHCOESN.js.br +0 -0
  111. package/dist/chunk-2QHCOESN.js.gz +0 -0
  112. package/dist/chunk-2U243ZEP.js.br +0 -0
  113. package/dist/chunk-2U243ZEP.js.gz +0 -0
  114. package/dist/chunk-6G6S7PEI.mjs +0 -27604
  115. package/dist/chunk-6G6S7PEI.mjs.br +0 -0
  116. package/dist/chunk-6G6S7PEI.mjs.gz +0 -0
  117. package/dist/chunk-7NSLKNCT.mjs.br +0 -0
  118. package/dist/chunk-7NSLKNCT.mjs.gz +0 -0
  119. package/dist/chunk-I2HF7ZPO.mjs.br +0 -0
  120. package/dist/chunk-I2HF7ZPO.mjs.gz +0 -0
  121. package/dist/chunk-IKBO6CZC.js +0 -2
  122. package/dist/chunk-IKBO6CZC.js.br +0 -3
  123. package/dist/chunk-IKBO6CZC.js.gz +0 -0
  124. package/dist/chunk-K2AW5UXT.js.br +0 -0
  125. package/dist/chunk-K2AW5UXT.js.gz +0 -0
  126. package/dist/chunk-O75FHZQJ.mjs.br +0 -0
  127. package/dist/chunk-O75FHZQJ.mjs.gz +0 -0
  128. package/dist/chunk-PE2I5L6R.mjs.br +0 -0
  129. package/dist/chunk-PE2I5L6R.mjs.gz +0 -0
  130. package/dist/chunk-PZTPX3HK.mjs.br +0 -0
  131. package/dist/chunk-PZTPX3HK.mjs.gz +0 -0
  132. package/dist/chunk-QULJW7LU.js.br +0 -0
  133. package/dist/chunk-QULJW7LU.js.gz +0 -0
  134. package/dist/chunk-R2H3FHK6.js.br +0 -0
  135. package/dist/chunk-R2H3FHK6.js.gz +0 -0
  136. package/dist/chunk-RYHBWTPI.mjs.br +0 -0
  137. package/dist/chunk-RYHBWTPI.mjs.gz +0 -0
  138. package/dist/chunk-T5U6P2JH.mjs +0 -1
  139. package/dist/chunk-T5U6P2JH.mjs.br +0 -0
  140. package/dist/chunk-T5U6P2JH.mjs.gz +0 -0
  141. package/dist/chunk-XJTWUXXC.js.br +0 -0
  142. package/dist/chunk-XJTWUXXC.js.gz +0 -0
  143. package/dist/chunk-YIFO3WQO.js.br +0 -0
  144. package/dist/chunk-YIFO3WQO.js.gz +0 -0
  145. package/dist/dist-VEWYRBTB.mjs +0 -2
  146. package/dist/dist-VEWYRBTB.mjs.br +0 -0
  147. package/dist/dist-VEWYRBTB.mjs.gz +0 -0
  148. package/dist/dist-ZCJLIRYG.js +0 -2275
  149. package/dist/dist-ZCJLIRYG.js.br +0 -0
  150. package/dist/dist-ZCJLIRYG.js.gz +0 -0
  151. package/dist/index-CDCSXtK3.d.ts +0 -685
  152. package/dist/index-CDCSXtK3.d.ts.map +0 -1
Binary file
Binary file
@@ -1,6 +1,5 @@
1
- import { SHAPE_PRESET_DEFS, computeValueRangeForChart, getAnimationInitialStyle, cloneHistorySnapshot, isTemplateElement, clampCropValue, parseMediaCommand, normalizeHexColor, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, computeAutoFitTextStyle, resolveLineHeight, getKinsokuLineBreakStyles, buildTextBody3DSceneStyle, resolveParagraphRtl, resolveParagraphAlign, resolveCssTextAlign, colorWithOpacity, build3DExtrusionData, getResolvedShapeClipPath, normalizeStrokeDashType, buildCssGradientFromShapeStyle, buildShadowCssFromShapeStyle, buildInnerShadowCssFromShapeStyle, buildMultiLayerShadowCss, buildGlowBoxShadow, getCompoundLineBoxShadow, getSoftEdgeFilterId, getEffectDagFilter, buildPatternFillCss, buildReflectionCss, getCssBorderDashStyle, getCompoundLineBorderWidth, getSvgStrokeDasharray, svgLineCap, getCompoundLineOffsets, getCompoundLineWidths, computeSelectionRect, rectToCells, isCellInRect, buildChartViewModel, buildNotesPdfBytes, buildSlidesPdfBytes, buildPreviewAnimation, getRoundRectRadiusPx, substituteFieldText, resolveUnderlineDecorationStyle, hasDistinctScriptFonts, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, TEXT_BUILD_ID_SEP, apply3dEffects, clampUnitInterval, 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, segmentByScript, resolveFontForScript, generateLogTicks, formatAxisValueWithUnits, getDisplayUnitLabel, hexToRgbChannels, chartPartToAttrs } from './chunk-6G6S7PEI.mjs';
2
- import { translationsEn } from './chunk-PZTPX3HK.mjs';
3
- import { hasShapeProperties, isImageLikeElement, hasTextProperties, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, getSubstituteFontFamily, evaluatePresetShape, customGeometryPathsToSvgSubpaths } from './chunk-PE2I5L6R.mjs';
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, 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, 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-QBZA2GMB.mjs';
4
3
  import { clsx } from 'clsx';
5
4
  import { twMerge } from 'tailwind-merge';
6
5
  import React6, { useState, useEffect, useMemo, Suspense, useRef, useCallback, useLayoutEffect } from 'react';
@@ -2516,10 +2515,26 @@ function getShapeVisualStyle(element, hasFill, fillColor, strokeWidth, strokeCol
2516
2515
  }
2517
2516
  }
2518
2517
  const base = {
2519
- backgroundColor: imageFillUrl ? "transparent" : patternFill ? patternFill.backgroundColor : hasFill ? resolvedFillColor : "transparent",
2518
+ // A gradient fill REPLACES the solid fill, it does not sit on top of it.
2519
+ // The parser also records a representative `fillColor`/`fillOpacity` for a
2520
+ // `a:gradFill` (used by thumbnails and the inspector), and painting that as
2521
+ // a `backgroundColor` under the gradient washed the whole shape: wherever
2522
+ // the gradient's own stops were transparent the solid still showed, so a
2523
+ // fade-to-transparent overlay dimmed everything behind it and its edge read
2524
+ // as a hard line. Mirrors the fill precedence in shared's
2525
+ // `getComputedFillStyle` (image -> gradient -> pattern -> solid).
2526
+ backgroundColor: imageFillUrl ? "transparent" : patternFill ? patternFill.backgroundColor : hasFill && !fillGradient ? resolvedFillColor : "transparent",
2520
2527
  backgroundImage: imageFillUrl ? `url(${imageFillUrl})` : patternFill ? patternFill.backgroundImage : hasFill && fillGradient ? fillGradient : void 0,
2521
- backgroundRepeat: imageFillUrl ? imageFillMode === "tile" ? "repeat" : "no-repeat" : patternFill ? "repeat" : void 0,
2522
- backgroundSize: imageFillUrl ? imageFillMode === "tile" ? "auto" : "100% 100%" : patternFill ? "auto" : void 0,
2528
+ backgroundRepeat: imageFillUrl ? imageFillMode === "tile" ? "repeat" : "no-repeat" : patternFill ? "repeat" : hasFill && fillGradient ? "no-repeat" : void 0,
2529
+ backgroundSize: imageFillUrl ? imageFillMode === "tile" ? "auto" : "100% 100%" : patternFill ? "auto" : hasFill && fillGradient ? "100% 100%" : void 0,
2530
+ // The container always carries a 1px border (transparent unless the shape
2531
+ // has a stroke or is hovered) and `box-sizing: border-box`, so the default
2532
+ // `background-origin: padding-box` sizes the paint 2px smaller than the
2533
+ // shape. Combined with the default `background-repeat: repeat` that made a
2534
+ // gradient tile wrap, painting a 1px sliver of its opposite end along the
2535
+ // edge - a fade-to-transparent overlay grew a hard opaque line down its
2536
+ // side. Paint from the border box so the fill matches the shape outline.
2537
+ backgroundOrigin: "border-box",
2523
2538
  backgroundPosition: imageFillUrl ? "center" : void 0,
2524
2539
  boxShadow: combinedBoxShadow,
2525
2540
  WebkitBoxReflect: reflectCss,
@@ -3095,7 +3110,7 @@ function parseGradientFillCss(gradFill) {
3095
3110
  const lin = gradFill["a:lin"];
3096
3111
  if (lin) {
3097
3112
  const angRaw = Number.parseInt(String(lin["@_ang"] || "0"), 10);
3098
- const angleDeg = Math.round(angRaw / 6e4);
3113
+ const angleDeg = Math.round(ooxmlGradientAngleToCssDegrees(angRaw / 6e4));
3099
3114
  return `linear-gradient(${angleDeg}deg, ${stopStrings})`;
3100
3115
  }
3101
3116
  const path = gradFill["a:path"];
@@ -6250,7 +6265,7 @@ function FailedToLoad() {
6250
6265
  var LazySurfaceChart3DScene = React6.lazy(
6251
6266
  async () => {
6252
6267
  try {
6253
- return await import('./SurfaceChart3DScene-V7P3LQVV.mjs');
6268
+ return await import('./SurfaceChart3DScene-52C3IMPQ.mjs');
6254
6269
  } catch {
6255
6270
  return { default: FailedToLoad };
6256
6271
  }
Binary file
Binary file
@@ -1,9 +1,8 @@
1
- import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-I2HF7ZPO.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-7NSLKNCT.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-O75FHZQJ.mjs';
4
- import { RULER_THICKNESS, RULER_FONT_SIZE, normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, 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, 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, getPendingSelectionRestore, restoreSegmentSelection, getTextCompensationTransform, applyChartBuildReveal, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, shouldUseSvgWarp, getSlideBackgroundStyle, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, shouldConfirmExternalHyperlink, safeOpenUrl, isPpactionUrl, parsePpactionUrl, 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, formatElapsed, computeInlineEditorRect, findSmartArtNodeText, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, 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, 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_LABELS, buildSmartArtPresetData, getLocalStorageUsageSummary, saveViewerProfile, clearAllLocalViewerData, TABLE_STYLE_PRESETS, withFrameSlides, withSlidesPerPage, formatCommentTimestamp, DIRECTIONAL_PRESETS, computeMergeCellRight, computeMergeCellDown, computeSplitCell, DUOTONE_PRESETS, ARTISTIC_EFFECTS, LBL, SEL, FILL_MODE_OPTIONS, SECTION_HEADING, NUM, GRADIENT_TYPE_OPTIONS, PATTERN_OPTIONS } from './chunk-6G6S7PEI.mjs';
5
- import { LOCALE_CATALOG, translationsEn } from './chunk-PZTPX3HK.mjs';
6
- import { hasShapeProperties, hasTextProperties, SWITCHABLE_LAYOUT_TYPES, isInkElement, isImageLikeElement, getLinkedTextBoxSegments, themeColorSchemesEqual, setSmartArtNodeStyle, updateSmartArtNodeText, getSubstituteFontFamily, THEME_COLOR_SCHEME_KEYS, chartDataChangeType, chartDataUpdatePoint, chartDataAddCategory, chartDataRemoveCategory, chartDataAddSeries, chartDataRemoveSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, pptxActionToElementAction, applyThemeOverrideToSlide, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, addSmartArtNodeAsChild, removeSmartArtNode, elementActionToPptxAction, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode } from './chunk-PE2I5L6R.mjs';
1
+ import { computeFocusTargets, aiChangeAnimationCss, changeGhostStyle, createChatHistoryStore, toRenderableParts } from './chunk-Q6FC2552.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-LRIXPSVT.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-G6Q3NXRV.mjs';
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-QBZA2GMB.mjs';
7
6
  import React32, { createContext, useMemo, useState, useCallback, lazy, forwardRef, useEffect, useRef, useContext, Suspense, useLayoutEffect, useDeferredValue } from 'react';
8
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
9
8
  import { useTranslation } from 'react-i18next';
@@ -1336,7 +1335,7 @@ function AccountPage() {
1336
1335
  return void 0;
1337
1336
  });
1338
1337
  };
1339
- const version = "2.2.0" ;
1338
+ const version = "2.3.0" ;
1340
1339
  return /* @__PURE__ */ jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
1341
1340
  /* @__PURE__ */ jsxs("section", { className: cardClass, children: [
1342
1341
  /* @__PURE__ */ jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
@@ -8340,7 +8339,7 @@ function FailedToLoad() {
8340
8339
  var LazyModel3DScene = React32.lazy(
8341
8340
  async () => {
8342
8341
  try {
8343
- return await import('./Model3DScene-JN5F5C4Z.mjs');
8342
+ return await import('./Model3DScene-IECT4RWT.mjs');
8344
8343
  } catch {
8345
8344
  return { default: FailedToLoad };
8346
8345
  }
@@ -18067,6 +18066,19 @@ function PresentationAudienceEffects({ snapshot }) {
18067
18066
  snapshot.subtitlesVisible && snapshot.caption && /* @__PURE__ */ jsx("div", { className: "absolute inset-x-[10%] bottom-8 rounded-lg bg-black/80 px-6 py-3 text-center text-xl font-medium text-white", children: snapshot.caption })
18068
18067
  ] });
18069
18068
  }
18069
+ function PresentationEndOverlay({ onExit }) {
18070
+ const { t } = useTranslation();
18071
+ return /* @__PURE__ */ jsx(
18072
+ "button",
18073
+ {
18074
+ type: "button",
18075
+ "data-pptx-end-of-show": "",
18076
+ onClick: onExit,
18077
+ className: "absolute inset-0 z-[90] flex cursor-default items-start bg-black text-left",
18078
+ children: /* @__PURE__ */ jsx("span", { className: "px-4 py-3 text-[12px] text-white/70", children: t("pptx.presentation.endOfSlideShow", "End of slide show, click to exit.") })
18079
+ }
18080
+ );
18081
+ }
18070
18082
  function PresentationSubtitleBar({
18071
18083
  visible,
18072
18084
  onCaptionChange
@@ -18157,11 +18169,11 @@ function renderNotesSegments(segments) {
18157
18169
  );
18158
18170
  });
18159
18171
  }
18160
- var toolClass = (active) => `inline-flex h-9 min-w-9 items-center justify-center gap-2 rounded-md px-2 text-xs transition-colors ${active ? "bg-sky-500 text-slate-950" : "bg-white/7 text-slate-200 hover:bg-white/14"}`;
18172
+ var toolClass = (active) => `inline-flex h-9 min-w-9 items-center justify-center gap-2 rounded-md px-2 text-xs transition-colors ${active ? "bg-primary text-primary-foreground" : "bg-muted text-foreground hover:bg-accent"}`;
18161
18173
  function PresenterConsoleToolbar(props) {
18162
18174
  const pointerTool = props.snapshot.pointer?.tool ?? "none";
18163
18175
  const zoom = props.snapshot.zoom?.scale ?? 1;
18164
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1 border-b border-white/10 bg-slate-950 px-3 py-2", children: [
18176
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1 border-b border-border bg-card px-3 py-2", children: [
18165
18177
  /* @__PURE__ */ jsx(
18166
18178
  "button",
18167
18179
  {
@@ -18172,7 +18184,7 @@ function PresenterConsoleToolbar(props) {
18172
18184
  }
18173
18185
  ),
18174
18186
  /* @__PURE__ */ jsx("button", { className: toolClass(false), onClick: props.onResetTimer, title: "Reset timer", children: /* @__PURE__ */ jsx(LuRotateCcw, {}) }),
18175
- /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-white/15" }),
18187
+ /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-border" }),
18176
18188
  /* @__PURE__ */ jsxs("button", { className: toolClass(false), onClick: props.onShowSlides, title: "See all slides", children: [
18177
18189
  /* @__PURE__ */ jsx(LuGrid2X2, {}),
18178
18190
  " Slides"
@@ -18180,7 +18192,7 @@ function PresenterConsoleToolbar(props) {
18180
18192
  /* @__PURE__ */ jsx("button", { className: toolClass(zoom > 1), onClick: () => props.onStepZoom(1), title: "Zoom in", children: /* @__PURE__ */ jsx(LuZoomIn, {}) }),
18181
18193
  /* @__PURE__ */ jsx("button", { className: toolClass(false), onClick: () => props.onStepZoom(-1), title: "Zoom out", children: /* @__PURE__ */ jsx(LuZoomOut, {}) }),
18182
18194
  /* @__PURE__ */ jsx("button", { className: toolClass(false), onClick: props.onResetZoom, title: "Reset zoom", children: /* @__PURE__ */ jsx(LuScan, {}) }),
18183
- /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-white/15" }),
18195
+ /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-border" }),
18184
18196
  ["laser", "pen", "highlighter", "eraser"].map((tool) => /* @__PURE__ */ jsx(
18185
18197
  "button",
18186
18198
  {
@@ -18191,7 +18203,7 @@ function PresenterConsoleToolbar(props) {
18191
18203
  },
18192
18204
  tool
18193
18205
  )),
18194
- /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-white/15" }),
18206
+ /* @__PURE__ */ jsx("span", { className: "mx-1 h-6 w-px bg-border" }),
18195
18207
  /* @__PURE__ */ jsx(
18196
18208
  "button",
18197
18209
  {
@@ -18489,20 +18501,13 @@ function PresenterNotesRail({
18489
18501
  ] });
18490
18502
  }
18491
18503
  function PresenterSlideNavigator(props) {
18492
- return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-[120] flex flex-col bg-slate-950/98 text-slate-100", children: [
18493
- /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between border-b border-white/10 px-6 py-4", children: [
18504
+ return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-[120] flex flex-col bg-card/98 text-foreground", children: [
18505
+ /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between border-b border-border px-6 py-4", children: [
18494
18506
  /* @__PURE__ */ jsxs("div", { children: [
18495
18507
  /* @__PURE__ */ jsx("p", { className: "text-xs uppercase tracking-[0.22em] text-sky-300", children: "Slide navigator" }),
18496
18508
  /* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold", children: "See all slides" })
18497
18509
  ] }),
18498
- /* @__PURE__ */ jsx(
18499
- "button",
18500
- {
18501
- className: "rounded-md bg-white/10 px-4 py-2 hover:bg-white/20",
18502
- onClick: props.onClose,
18503
- children: "Close"
18504
- }
18505
- )
18510
+ /* @__PURE__ */ jsx("button", { className: "rounded-md bg-muted px-4 py-2 hover:bg-accent", onClick: props.onClose, children: "Close" })
18506
18511
  ] }),
18507
18512
  /* @__PURE__ */ jsx("div", { className: "grid flex-1 grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-5 overflow-auto p-6", children: props.slides.map((slide, index) => /* @__PURE__ */ jsxs(
18508
18513
  "button",
@@ -18518,7 +18523,7 @@ function PresenterSlideNavigator(props) {
18518
18523
  canvasSize: props.canvasSize
18519
18524
  }
18520
18525
  ),
18521
- /* @__PURE__ */ jsxs("span", { className: "mt-2 block text-xs tabular-nums text-slate-400", children: [
18526
+ /* @__PURE__ */ jsxs("span", { className: "mt-2 block text-xs tabular-nums text-muted-foreground", children: [
18522
18527
  index + 1,
18523
18528
  slide.hidden ? " - hidden" : ""
18524
18529
  ] })
@@ -18613,6 +18618,7 @@ function PresenterView({
18613
18618
  onOpenAudienceWindow,
18614
18619
  onCloseAudienceWindow,
18615
18620
  isAudienceWindowOpen,
18621
+ endOfShowVisible,
18616
18622
  snapshot,
18617
18623
  onNavigateToSlide,
18618
18624
  onToggleTimer,
@@ -18634,6 +18640,13 @@ function PresenterView({
18634
18640
  const elapsed = snapshot.elapsedMs ?? (presentationStartTime ? now - presentationStartTime : 0);
18635
18641
  const [showSlides, setShowSlides] = useState(false);
18636
18642
  const ink = usePresenterInk(snapshot, onUpdateSnapshot);
18643
+ const paneAdvancesOnClick = presenterPaneAdvancesOnClick(snapshot.pointer?.tool) && !endOfShowVisible;
18644
+ const handleSlidePaneClick = useCallback(() => {
18645
+ if (!paneAdvancesOnClick) {
18646
+ return;
18647
+ }
18648
+ onMovePresentationSlide(1, "click");
18649
+ }, [paneAdvancesOnClick, onMovePresentationSlide]);
18637
18650
  const handleCaptionChange = useCallback(
18638
18651
  (caption) => onUpdateSnapshot({ caption }),
18639
18652
  [onUpdateSnapshot]
@@ -18645,7 +18658,7 @@ function PresenterView({
18645
18658
  const TIMER_SEGMENT_MS = 5 * 60 * 1e3;
18646
18659
  const timerProgress = Math.min(100, elapsed % TIMER_SEGMENT_MS / TIMER_SEGMENT_MS * 100);
18647
18660
  const timerSegment = Math.floor(elapsed / TIMER_SEGMENT_MS);
18648
- return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-50 flex flex-col bg-slate-950 text-slate-100", children: [
18661
+ return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 z-50 flex flex-col bg-card text-foreground", children: [
18649
18662
  /* @__PURE__ */ jsx(
18650
18663
  PresenterConsoleToolbar,
18651
18664
  {
@@ -18667,34 +18680,44 @@ function PresenterView({
18667
18680
  }
18668
18681
  ),
18669
18682
  /* @__PURE__ */ jsxs("div", { className: "flex flex-1 min-h-0", children: [
18670
- /* @__PURE__ */ jsxs("div", { className: "flex-[7] flex flex-col items-center justify-center bg-black p-6 min-w-0 overflow-hidden", children: [
18671
- /* @__PURE__ */ jsxs(
18672
- PresenterSlideFrame,
18673
- {
18674
- canvasSize,
18675
- zoomScale: snapshot.zoom?.scale ?? 1,
18676
- zoomOriginX: snapshot.zoom?.originX ?? 0.5,
18677
- zoomOriginY: snapshot.zoom?.originY ?? 0.5,
18678
- inkProps: ink,
18679
- children: [
18680
- /* @__PURE__ */ jsx(
18681
- ScaledSlidePreview,
18682
- {
18683
- slide: currentSlide,
18684
- templateElements,
18685
- canvasSize
18686
- }
18687
- ),
18688
- /* @__PURE__ */ jsx(PresentationAudienceEffects, { snapshot })
18689
- ]
18690
- }
18691
- ),
18692
- /* @__PURE__ */ jsx("div", { className: "mt-3 text-xs font-mono tabular-nums text-white/50 select-none", children: t("pptx.presenter.slideLabel", {
18693
- current: currentSlideIndex + 1,
18694
- total: slides.length,
18695
- defaultValue: `Slide ${currentSlideIndex + 1} of ${slides.length}`
18696
- }) })
18697
- ] }),
18683
+ /* @__PURE__ */ jsxs(
18684
+ "div",
18685
+ {
18686
+ role: "presentation",
18687
+ "data-pptx-presenter-slide": true,
18688
+ onClick: handleSlidePaneClick,
18689
+ className: `relative flex-[7] flex flex-col items-center justify-center bg-black p-6 min-w-0 overflow-hidden ${paneAdvancesOnClick ? "cursor-pointer" : ""}`,
18690
+ children: [
18691
+ endOfShowVisible && /* @__PURE__ */ jsx(PresentationEndOverlay, { onExit: () => onMovePresentationSlide(1) }),
18692
+ /* @__PURE__ */ jsxs(
18693
+ PresenterSlideFrame,
18694
+ {
18695
+ canvasSize,
18696
+ zoomScale: snapshot.zoom?.scale ?? 1,
18697
+ zoomOriginX: snapshot.zoom?.originX ?? 0.5,
18698
+ zoomOriginY: snapshot.zoom?.originY ?? 0.5,
18699
+ inkProps: ink,
18700
+ children: [
18701
+ /* @__PURE__ */ jsx(
18702
+ ScaledSlidePreview,
18703
+ {
18704
+ slide: currentSlide,
18705
+ templateElements,
18706
+ canvasSize
18707
+ }
18708
+ ),
18709
+ /* @__PURE__ */ jsx(PresentationAudienceEffects, { snapshot })
18710
+ ]
18711
+ }
18712
+ ),
18713
+ /* @__PURE__ */ jsx("div", { className: "mt-3 text-xs font-mono tabular-nums text-white/50 select-none", children: t("pptx.presenter.slideLabel", {
18714
+ current: currentSlideIndex + 1,
18715
+ total: slides.length,
18716
+ defaultValue: `Slide ${currentSlideIndex + 1} of ${slides.length}`
18717
+ }) })
18718
+ ]
18719
+ }
18720
+ ),
18698
18721
  /* @__PURE__ */ jsx(
18699
18722
  PresenterNotesRail,
18700
18723
  {
@@ -27108,18 +27131,23 @@ function PresentationTransitionOverlay({
27108
27131
  canvasSize,
27109
27132
  transition,
27110
27133
  durationMs,
27134
+ scale: stageScale,
27111
27135
  onComplete
27112
27136
  }) {
27113
27137
  const containerRef = useRef(null);
27114
27138
  const [containerSize, setContainerSize] = useState(null);
27139
+ const resolvedStageScale = typeof stageScale === "number" && Number.isFinite(stageScale) && stageScale > 0 ? stageScale : null;
27115
27140
  useEffect(() => {
27141
+ if (resolvedStageScale !== null) {
27142
+ return;
27143
+ }
27116
27144
  const el = containerRef.current;
27117
27145
  if (!el) {
27118
27146
  return;
27119
27147
  }
27120
27148
  const rect = el.getBoundingClientRect();
27121
27149
  setContainerSize({ width: rect.width, height: rect.height });
27122
- }, []);
27150
+ }, [resolvedStageScale]);
27123
27151
  useEffect(() => {
27124
27152
  const timer = window.setTimeout(onComplete, durationMs + 50);
27125
27153
  return () => {
@@ -27137,13 +27165,16 @@ function PresentationTransitionOverlay({
27137
27165
  [transition.type, transition.direction, transition.orient, transition.spokes, durationMs]
27138
27166
  );
27139
27167
  const scale = useMemo(() => {
27168
+ if (resolvedStageScale !== null) {
27169
+ return resolvedStageScale;
27170
+ }
27140
27171
  if (!containerSize) {
27141
27172
  return 1;
27142
27173
  }
27143
27174
  const scaleX = containerSize.width / Math.max(canvasSize.width, 1);
27144
27175
  const scaleY = containerSize.height / Math.max(canvasSize.height, 1);
27145
27176
  return Math.min(scaleX, scaleY);
27146
- }, [containerSize, canvasSize]);
27177
+ }, [resolvedStageScale, containerSize, canvasSize]);
27147
27178
  const outgoingZIndex = animations.outgoingOnTop ? 40 : 20;
27148
27179
  return /* @__PURE__ */ jsxs(
27149
27180
  "div",
@@ -30788,6 +30819,7 @@ function ViewerPresentationLayer(props) {
30788
30819
  onOpenAudienceWindow: presentation.openAudienceWindow,
30789
30820
  onCloseAudienceWindow: presentation.closeAudienceWindow,
30790
30821
  isAudienceWindowOpen: presentation.isAudienceWindowOpen(),
30822
+ endOfShowVisible: presentation.endOfShowVisible,
30791
30823
  snapshot: presentation.presenterSnapshot,
30792
30824
  onNavigateToSlide: presentation.navigateToSlide,
30793
30825
  onToggleTimer: presentation.togglePresenterTimer,
@@ -31065,19 +31097,6 @@ function PresentationContextMenu(p) {
31065
31097
  )
31066
31098
  ] });
31067
31099
  }
31068
- function PresentationEndOverlay({ onExit }) {
31069
- const { t } = useTranslation();
31070
- return /* @__PURE__ */ jsx(
31071
- "button",
31072
- {
31073
- type: "button",
31074
- "data-pptx-end-of-show": "",
31075
- onClick: onExit,
31076
- className: "absolute inset-0 z-[90] flex cursor-default items-start bg-black text-left",
31077
- children: /* @__PURE__ */ jsx("span", { className: "px-4 py-3 text-[12px] text-white/70", children: t("pptx.presentation.endOfSlideShow", "End of slide show, click to exit.") })
31078
- }
31079
- );
31080
- }
31081
31100
  var ViewerOptionsContext = createContext(DEFAULT_VIEWER_OPTIONS);
31082
31101
  function useViewerOptionsContext() {
31083
31102
  return useContext(ViewerOptionsContext);
@@ -31302,6 +31321,7 @@ ${url}`)) {
31302
31321
  canvasSize,
31303
31322
  transition: presentation.transitionOverlay.transition,
31304
31323
  durationMs: presentation.transitionOverlay.durationMs,
31324
+ scale: stageScale,
31305
31325
  onComplete: presentation.handleTransitionOverlayComplete
31306
31326
  },
31307
31327
  `${presentation.transitionOverlay.outgoingSlideIndex}-${presentation.transitionOverlay.incomingSlideIndex}`
@@ -31524,7 +31544,7 @@ ${url}`)) {
31524
31544
  )
31525
31545
  );
31526
31546
  }
31527
- var AiChatPanel = lazy(() => import('./AiChatPanel-XRKEPXAM.mjs'));
31547
+ var AiChatPanel = lazy(() => import('./AiChatPanel-SXYMXFYS.mjs'));
31528
31548
  function AiChatPanelLazy(props) {
31529
31549
  return /* @__PURE__ */ jsx(
31530
31550
  Suspense,
Binary file
Binary file
@@ -1,7 +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-O75FHZQJ.mjs';
2
- 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, createPresentationKeyBuffer, createCollaborationLivePatcher, publishLiveInlineText, collectMediaElements, collectImagePaths, buildInitialGuides, saveAutosaveSnapshot, isTemplateElementId, 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, comparePresentation, applyAcceptSlide, applyAcceptAllSlides, collectUsedFonts, detectTouchDevice, detectOrientation, isMobileViewport, MOBILE_BREAKPOINT, TABLET_BREAKPOINT, remapTextToSegments, 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, derivePresenceList, mapPresentationKey, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, createPresentationSessionId, resolveTransitionDurationMs, isUrlSafe, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, presenterElapsed, stepPresenterZoom, resetPresenterTimer, togglePresenterTimer, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, groupSlidesBySection, hasCopyableFormat, createBackstagePresentation, cloneElementForPaste, computeScrollDelta, rerouteConnectorsForMovedElements, applyReroutedConnectors, buildPrintHtmlDocument, deleteTableColumn, insertTableColumn, deleteTableRow, insertTableRow, splitCell, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid } from './chunk-6G6S7PEI.mjs';
3
- import { translationsEn } from './chunk-PZTPX3HK.mjs';
4
- import { PptxHandler, EncryptedFileError, hasShapeProperties, hasTextProperties, applyThemeToData, THEME_PRESETS, themeColorSchemesEqual, guidePxToEmu, mergeShapes, buildThemeColorMap, reResolveSlideColors, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, SvgExporter, rebuildTableStructureInRawXml, updateCellTextStyleInRawXml, updateCellTextInRawXml, updateMergeAttrsInRawXml, elementActionToPptxAction } from './chunk-PE2I5L6R.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-G6Q3NXRV.mjs';
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, createPresentationKeyBuffer, 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, 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-QBZA2GMB.mjs';
5
4
  import { useRef, useState, useEffect, useCallback, useMemo, useSyncExternalStore, useImperativeHandle } from 'react';
6
5
  import JSZip from 'jszip';
7
6
  import { useTranslation } from 'react-i18next';
@@ -9859,8 +9858,7 @@ function useYjsDocumentSync({
9859
9858
  return;
9860
9859
  }
9861
9860
  try {
9862
- const { PptxHandler: PptxHandler2 } = await import('./dist-VEWYRBTB.mjs');
9863
- const handler = new PptxHandler2();
9861
+ const handler = new PptxHandler();
9864
9862
  await handler.load(sourceBytes.buffer);
9865
9863
  const currentSlides = readSlidesFromYDoc(
9866
9864
  doc
Binary file
Binary file
@@ -1,4 +1,4 @@
1
- import { ThemePresets, PptxMarkdownConverter } from './chunk-PE2I5L6R.mjs';
1
+ import { ThemePresets, PptxMarkdownConverter } from './chunk-QBZA2GMB.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