pptx-react-viewer 2.20.0 → 2.20.1

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 (89) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/{AiChatPanel-S5UYFWT2.mjs → AiChatPanel-NRWACXJ7.mjs} +3 -3
  3. package/dist/AiChatPanel-NRWACXJ7.mjs.br +0 -0
  4. package/dist/AiChatPanel-NRWACXJ7.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-KOKEVIOQ.js → AiChatPanel-ZSVNVRM5.js} +23 -23
  6. package/dist/AiChatPanel-ZSVNVRM5.js.br +0 -0
  7. package/dist/AiChatPanel-ZSVNVRM5.js.gz +0 -0
  8. package/dist/{Model3DScene-T5372GIJ.js → Model3DScene-3HGARMTA.js} +2 -2
  9. package/dist/Model3DScene-3HGARMTA.js.br +0 -0
  10. package/dist/Model3DScene-3HGARMTA.js.gz +0 -0
  11. package/dist/{Model3DScene-T6QOOVLN.mjs → Model3DScene-IFYFOD6F.mjs} +1 -1
  12. package/dist/Model3DScene-IFYFOD6F.mjs.br +0 -0
  13. package/dist/Model3DScene-IFYFOD6F.mjs.gz +0 -0
  14. package/dist/{chunk-QLELFH7A.mjs → chunk-2MENHAYJ.mjs} +229 -1
  15. package/dist/chunk-2MENHAYJ.mjs.br +0 -0
  16. package/dist/{chunk-QLELFH7A.mjs.gz → chunk-2MENHAYJ.mjs.gz} +0 -0
  17. package/dist/{chunk-J56DMNSD.js → chunk-4Z4HEIP5.js} +243 -4
  18. package/dist/chunk-4Z4HEIP5.js.br +0 -0
  19. package/dist/{chunk-J56DMNSD.js.gz → chunk-4Z4HEIP5.js.gz} +0 -0
  20. package/dist/{chunk-SAKMXLW2.js → chunk-GKOJO67G.js} +472 -502
  21. package/dist/chunk-GKOJO67G.js.br +0 -0
  22. package/dist/chunk-GKOJO67G.js.gz +0 -0
  23. package/dist/{chunk-XWCN4TGE.mjs → chunk-HZ2PAL7P.mjs} +93 -117
  24. package/dist/chunk-HZ2PAL7P.mjs.br +0 -0
  25. package/dist/chunk-HZ2PAL7P.mjs.gz +0 -0
  26. package/dist/{chunk-BW3ZS73U.js → chunk-LLZ25OVR.js} +147 -147
  27. package/dist/chunk-LLZ25OVR.js.br +0 -0
  28. package/dist/chunk-LLZ25OVR.js.gz +0 -0
  29. package/dist/{chunk-U2UIJRSW.mjs → chunk-O5BR276S.mjs} +1 -1
  30. package/dist/chunk-O5BR276S.mjs.br +0 -0
  31. package/dist/chunk-O5BR276S.mjs.gz +0 -0
  32. package/dist/{chunk-T7OUKBWK.js → chunk-QJJX2E6I.js} +3 -3
  33. package/dist/chunk-QJJX2E6I.js.br +0 -0
  34. package/dist/chunk-QJJX2E6I.js.gz +0 -0
  35. package/dist/{chunk-2T7J57AC.mjs → chunk-RJ26DQIM.mjs} +1 -1
  36. package/dist/chunk-RJ26DQIM.mjs.br +0 -0
  37. package/dist/chunk-RJ26DQIM.mjs.gz +0 -0
  38. package/dist/{chunk-YMNURZ22.mjs → chunk-SZJLZWEX.mjs} +100 -130
  39. package/dist/chunk-SZJLZWEX.mjs.br +0 -0
  40. package/dist/chunk-SZJLZWEX.mjs.gz +0 -0
  41. package/dist/{chunk-AFAAKYYB.js → chunk-WCJ3HF4C.js} +1119 -1143
  42. package/dist/chunk-WCJ3HF4C.js.br +0 -0
  43. package/dist/chunk-WCJ3HF4C.js.gz +0 -0
  44. package/dist/index.js +45 -45
  45. package/dist/index.js.br +0 -0
  46. package/dist/index.js.gz +0 -0
  47. package/dist/index.mjs +5 -5
  48. package/dist/index.mjs.br +0 -0
  49. package/dist/index.mjs.gz +0 -0
  50. package/dist/internals.d.ts.map +1 -1
  51. package/dist/internals.js +78 -78
  52. package/dist/internals.js.br +0 -0
  53. package/dist/internals.js.gz +0 -0
  54. package/dist/internals.mjs +3 -3
  55. package/dist/internals.mjs.br +0 -0
  56. package/dist/internals.mjs.gz +0 -0
  57. package/dist/viewer/index.js +26 -26
  58. package/dist/viewer/index.js.br +0 -0
  59. package/dist/viewer/index.js.gz +0 -0
  60. package/dist/viewer/index.mjs +5 -5
  61. package/dist/viewer/index.mjs.br +0 -0
  62. package/dist/viewer/index.mjs.gz +0 -0
  63. package/package.json +1 -1
  64. package/dist/AiChatPanel-KOKEVIOQ.js.br +0 -0
  65. package/dist/AiChatPanel-KOKEVIOQ.js.gz +0 -0
  66. package/dist/AiChatPanel-S5UYFWT2.mjs.br +0 -0
  67. package/dist/AiChatPanel-S5UYFWT2.mjs.gz +0 -0
  68. package/dist/Model3DScene-T5372GIJ.js.br +0 -0
  69. package/dist/Model3DScene-T5372GIJ.js.gz +0 -0
  70. package/dist/Model3DScene-T6QOOVLN.mjs.br +0 -0
  71. package/dist/Model3DScene-T6QOOVLN.mjs.gz +0 -0
  72. package/dist/chunk-2T7J57AC.mjs.br +0 -0
  73. package/dist/chunk-2T7J57AC.mjs.gz +0 -0
  74. package/dist/chunk-AFAAKYYB.js.br +0 -0
  75. package/dist/chunk-AFAAKYYB.js.gz +0 -0
  76. package/dist/chunk-BW3ZS73U.js.br +0 -0
  77. package/dist/chunk-BW3ZS73U.js.gz +0 -0
  78. package/dist/chunk-J56DMNSD.js.br +0 -0
  79. package/dist/chunk-QLELFH7A.mjs.br +0 -0
  80. package/dist/chunk-SAKMXLW2.js.br +0 -0
  81. package/dist/chunk-SAKMXLW2.js.gz +0 -0
  82. package/dist/chunk-T7OUKBWK.js.br +0 -0
  83. package/dist/chunk-T7OUKBWK.js.gz +0 -0
  84. package/dist/chunk-U2UIJRSW.mjs.br +0 -0
  85. package/dist/chunk-U2UIJRSW.mjs.gz +0 -0
  86. package/dist/chunk-XWCN4TGE.mjs.br +0 -0
  87. package/dist/chunk-XWCN4TGE.mjs.gz +0 -0
  88. package/dist/chunk-YMNURZ22.mjs.br +0 -0
  89. package/dist/chunk-YMNURZ22.mjs.gz +0 -0
Binary file
Binary file
@@ -1,5 +1,5 @@
1
1
  import { translationsEn } from './chunk-MZOZNBRO.mjs';
2
- import { SHAPE_PRESET_DEFS, VIEWER_SHORTCUT_REFERENCE, getAnimationInitialStyle, cloneHistorySnapshot, hasShapeProperties, getImageFitStyle, isImageLikeElement, getImageTilingStyle, runMediaCommand, findMediaElementByElementId, mediaPlaybackAttributes, buildTextBlockStyle, hasTextProperties, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, buildTextBodyLayoutStyle, buildTextBody3DSceneStyle, buildParagraphs, colorWithOpacity, normalizeHexColor, build3DExtrusionData, getComputedFillStyle, getComputedEffectStyle, getComputedStrokeStyle, isStrokeOnlyPresetElement, resolveShapeGeometry, normalizeStrokeDashType, getSvgStrokeDasharray, buildSvgGradientDef, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, svgLineCap, getCompoundLineOffsets, getCompoundLineWidths, computeSelectionRect, DEFAULT_FONT_FAMILY, cellStyleToCss, rectToCells, isCellInRect, tableContainerCss, buildChartViewModel, resolveChartKind, chartPreserveAspectRatio, buildNotesPdfBytes, buildSlidesPdfBytes, buildPreviewAnimation, buildMotionPathPreview, getRoundRectRadiusPx2, getResolvedShapeClipPath, mediaFallbackVisual, registerPersistentAudio, resolveAutoFitFontScale, getSubstituteFontFamily, parsePanoseString, hasDistinctScriptFonts, nestedTextDecorationStyle, pieceLetterSpacing, resolveMetricTrackingPx, hollowTextFillStyle, TEXT_BUILD_ID_SEP, buildTextBuildSpec, textBuildSpanStyle, apply3dEffects, clampUnitInterval, customGeometryPathsToSvgSubpaths, svgGradientFillRef, computeColumnBoundaries, getTableCellBandStyle, parseDrawingColor, parseDrawingColorOpacity, getCellDiagonalBorders, cellRunStyle, getChartStylePalette, computeChartLegendLayout, mediaFallbackIcon, mediaFallbackLabelKey, MEDIA_CHROME_ATTRIBUTE, convertOmmlToMathMl, sanitizeMathMl, tableCellCss, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, ooxmlGradientAngleToCssDegrees, chartPartToAttrs, splitRunForMetrics, hexToRgbChannels, segmentByScript, resolveFontForScript } from './chunk-QLELFH7A.mjs';
2
+ import { SHAPE_PRESET_DEFS, VIEWER_SHORTCUT_REFERENCE, getAnimationInitialStyle, cloneHistorySnapshot, hasShapeProperties, getImageFitStyle, isImageLikeElement, getImageTilingStyle, runMediaCommand, findMediaElementByElementId, mediaPlaybackAttributes, buildTextBlockStyle, hasTextProperties, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, buildTextBodyLayoutStyle, buildTextBody3DSceneStyle, buildParagraphs, colorWithOpacity, normalizeHexColor, build3DExtrusionData, getComputedFillStyle, getComputedEffectStyle, getComputedStrokeStyle, isStrokeOnlyPresetElement, resolveShapeGeometry, normalizeStrokeDashType, getSvgStrokeDasharray, buildSvgGradientDef, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, svgLineCap, getCompoundLineOffsets, getCompoundLineWidths, computeSelectionRect, DEFAULT_FONT_FAMILY, cellStyleToCss, rectToCells, isCellInRect, tableContainerCss, buildChartViewModel, resolveChartKind, chartPreserveAspectRatio, buildNotesPdfBytes, buildSlidesPdfBytes, buildPreviewAnimation, buildMotionPathPreview, getRoundRectRadiusPx2, getResolvedShapeClipPath, mediaFallbackVisual, registerPersistentAudio, resolveAutoFitFontScale, getSubstituteFontFamily, parsePanoseString, hasDistinctScriptFonts, nestedTextDecorationStyle, pieceLetterSpacing, resolveMetricTrackingPx, hollowTextFillStyle, TEXT_BUILD_ID_SEP, buildTextBuildSpec, textBuildSpanStyle, apply3dEffects, clampUnitInterval, customGeometryPathsToSvgSubpaths, svgGradientFillRef, computeColumnBoundaries, getTableCellBandStyle, parseDrawingColor, parseDrawingColorOpacity, getCellDiagonalBorders, cellRunStyle, getChartStylePalette, computeChartLegendLayout, mediaFallbackIcon, mediaFallbackLabelKey, MEDIA_CHROME_ATTRIBUTE, convertOmmlToMathMl, sanitizeMathMl, tableCellCss, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, ooxmlGradientAngleToCssDegrees, chartPartToAttrs, splitRunForMetrics, hexToRgbChannels, segmentByScript, resolveFontForScript } from './chunk-2MENHAYJ.mjs';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  import React6, { useRef, useState, useEffect, useCallback, useMemo, useLayoutEffect } from 'react';
Binary file
Binary file
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkJ56DMNSD_js = require('./chunk-J56DMNSD.js');
3
+ var chunk4Z4HEIP5_js = require('./chunk-4Z4HEIP5.js');
4
4
  var chunk4VNS5WPM_js = require('./chunk-4VNS5WPM.js');
5
5
  var mcp = require('pptx-viewer-mcp');
6
6
  var mcpSchemas = require('pptx-viewer-mcp/schemas');
@@ -14879,7 +14879,7 @@ async function buildSlideMarkdown(slides, slideIndex2, meta3, options = {}) {
14879
14879
  };
14880
14880
  let markdown;
14881
14881
  try {
14882
- const converter = new chunkJ56DMNSD_js.PptxMarkdownConverter(
14882
+ const converter = new chunk4Z4HEIP5_js.PptxMarkdownConverter(
14883
14883
  "",
14884
14884
  {
14885
14885
  sourceName: meta3.title ?? "deck.pptx",
@@ -15471,7 +15471,7 @@ var getTheme = (ctx) => {
15471
15471
  name: theme?.name,
15472
15472
  colorScheme: theme?.colorScheme,
15473
15473
  fontScheme: theme?.fontScheme,
15474
- availablePresets: Object.keys(chunkJ56DMNSD_js.ThemePresets)
15474
+ availablePresets: Object.keys(chunk4Z4HEIP5_js.ThemePresets)
15475
15475
  };
15476
15476
  };
15477
15477
  var readExecutors = {
Binary file
Binary file
@@ -1,4 +1,4 @@
1
- import { ThemePresets, PptxMarkdownConverter } from './chunk-QLELFH7A.mjs';
1
+ import { ThemePresets, PptxMarkdownConverter } from './chunk-2MENHAYJ.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
@@ -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, executeMediaCommand, buildPdfFromImageData, buildNotesPdf, EMU_PER_PX, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-U2UIJRSW.mjs';
1
+ import { cloneHistorySnapshot, MIN_ELEMENT_SIZE, ZOOM_TO_SELECTION_PADDING, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, UNGROUPED_SECTION_ID, DEFAULT_SECTION_GROUP_ID, DEFAULT_TABLE_ROWS, DEFAULT_TABLE_COLUMNS, executeMediaCommand, buildPdfFromImageData, buildNotesPdf, EMU_PER_PX, GRID_SIZE, DEFAULT_TEXT_FONT_SIZE } from './chunk-O5BR276S.mjs';
2
2
  import { translationsEn } from './chunk-MZOZNBRO.mjs';
3
- import { 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, PresentationAnimationController, 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, attachPresentationVisibilityPause, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, partitionTemplateElements, resolveAuthoredCustomShowId, buildInitialGuides, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, updateMasterViewElement, isTemplateElementId, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, masterViewElements, replaceMasterViewElements, 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, describeFontEmbedding, mayLeaveSlideShow, stopAllPersistentAudio, remapTextToSegments, guidePxToEmu, buildSaveSlides, embeddedFontSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, openPptxFile, readBackstageRecentFile, isActionHidden, canInteractWithElement, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, savedPresentationFileName, generatePackageReadme, presentationBaseName, exportDeckJson, groupElements, generateElementId, makeCloneId, ungroupElements, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, mapPresentationKey, lastShowSlideIndex, firstShowSlideIndex, mapPresentationWheel, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, runPresentationAction, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, buildPrintHtmlDocument, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, setCellText, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, elementActionToPptxAction, isUrlSafe, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid, applyMotionPathPreset } from './chunk-QLELFH7A.mjs';
3
+ import { 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, PresentationAnimationController, 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, attachPresentationVisibilityPause, buildMorphTransitionPlan, morphOptionToMode, buildMorphAnimationRules, findInSlides, applyFindReplacements, createCollaborationLivePatcher, publishLiveInlineText, PptxHandler, collectMediaElements, collectImagePaths, partitionTemplateElements, resolveAuthoredCustomShowId, buildInitialGuides, EncryptedFileError, resolveAutosaveIntervalMs, shouldWriteAutosaveSnapshot, saveAutosaveSnapshot, autosaveSnapshotMark, updateMasterViewElement, isTemplateElementId, hasShapeProperties, hasTextProperties, getInlineEditorSelection, applyStyleToSelectedSegments, setPendingSelectionRestore, applyCaseTransformToSegments, transformTextCase, masterViewElements, replaceMasterViewElements, 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, describeFontEmbedding, mayLeaveSlideShow, stopAllPersistentAudio, remapTextToSegments, guidePxToEmu, buildSaveSlides, embeddedFontSaveOptions, resolveSlideSizeSelection, saveDeckWithPassword, shouldProbeAutosaveRecovery, probeAutosaveRecovery, acceptAutosaveRecovery, discardAutosaveRecovery, shouldLoopContinuously, applyRehearsalTimings, copyFormatFromElement, applyFormatToElement, mapEditorKey, isEditorTextInputTarget, createViewerOptionsStore, readSlidesFromYDoc, shouldRoomSlidesReplaceLoad, reconcileSlidesInYDoc, LOCAL_SYNC_ORIGIN, observeYDocSlides, shouldAutoFollowBroadcaster, createTouchGestureRecognizer, MAX_ZOOM_SCALE, MIN_ZOOM_SCALE, isKeyboardOpen, scopeLayoutOptionsToSlide, openPptxFile, readBackstageRecentFile, isActionHidden, canInteractWithElement, filterInteractableIds, beginShapeAdjustment, buildElementClipboardPayload, savedPresentationFileName, generatePackageReadme, presentationBaseName, exportDeckJson, groupElements, generateElementId, makeCloneId, ungroupElements, alignElements, distributeElements, bringForward, sendBackward, bringToFront, sendToBack, newTableElement, createDefaultChartElement, readViewportMetrics, computeKeyboardInset, mergeShapes, mapPresentationKey, lastShowSlideIndex, firstShowSlideIndex, mapPresentationWheel, computeColorFilter, computeSlideIndices, buildPrintDocument, buildOutlineHtml, buildSlidesHtml, buildNotesHtml, buildHandoutsHtml, createBlankSlide, makeSlideId, buildSlideTemplateSlide, templateSchemeFromTheme, buildThemeColorMap, reResolveSlideColors, computeEntranceAnimationDelay, createPresentationSessionId, resolveTransitionDurationMs, runPresentationAction, createPresenterTimer, createInitialPresentationSnapshot, mergePresentationSnapshot, resetPresenterTimer, presenterElapsed, stepPresenterZoom, togglePresenterTimer, addCommentToList, removeCommentFromList, editCommentInList, toggleCommentResolvedInList, replyToCommentInList, canvasToJpegData, downloadDataUrl, pickSupportedMimeType, WEBM_MIME_CANDIDATES, fpsToFrameIntervalMs, segmentFrameCount, encodeGif, resolveShowSlideIndexes, groupSlidesBySection, masterViewPseudoSlide, hasCopyableFormat, createBackstagePresentation, buildFieldSubstitutionContext, cloneElementForPaste, computeScrollDelta, getPresetShapeClipPath, svgPathToPolygons, polygonsToSvgPath, rerouteConnectorsForMovedElements, applyReroutedConnectors, SvgExporter, buildPrintHtmlDocument, deleteTableColumn, rebuildTableStructureInRawXml, insertTableColumn, deleteTableRow, insertTableRow, updateCellTextStyleInRawXml, setCellText, updateCellTextInRawXml, splitCell, updateMergeAttrsInRawXml, mergeCells, isPpactionUrl, parsePpactionUrl, safeOpenUrl, ACTION_BUTTON_PRESETS, elementActionToPptxAction, isUrlSafe, buildSmartArtPresetData, computeSnapToShape, publishLiveGeometry, getDraggedShapeAdjustments, computeMarqueeHitIds, mergeAdditiveSelection, applyResize, snapBoxToGrid, applyMotionPathPreset } from './chunk-2MENHAYJ.mjs';
4
4
  import { useRef, useState, useEffect, useCallback, useMemo, useLayoutEffect, useSyncExternalStore, useImperativeHandle } from 'react';
5
5
  import JSZip from 'jszip';
6
6
  import { useTranslation } from 'react-i18next';
@@ -3002,65 +3002,72 @@ function useModalDismissDrag(onClose, threshold = 120) {
3002
3002
  }
3003
3003
 
3004
3004
  // src/viewer/hooks/useComments-helpers.ts
3005
- function generateCommentId() {
3006
- return `comment-${crypto.randomUUID()}`;
3007
- }
3008
- function addCommentToSlide(slides, slideIndex, comment) {
3005
+ function replaceCommentsOnSlide(slides, slideIndex, next) {
3009
3006
  return slides.map(
3010
- (entry, index) => index === slideIndex ? { ...entry, comments: [...entry.comments || [], comment] } : entry
3007
+ (entry, index) => index === slideIndex ? { ...entry, comments: next } : entry
3008
+ );
3009
+ }
3010
+ function addCommentToSlide(slides, slideIndex, text, authorName, elementId) {
3011
+ const slide = slides[slideIndex];
3012
+ if (!slide) {
3013
+ return { slides, didAdd: false };
3014
+ }
3015
+ const next = addCommentToList(
3016
+ slide.comments || [],
3017
+ text,
3018
+ authorName,
3019
+ void 0,
3020
+ void 0,
3021
+ elementId
3011
3022
  );
3023
+ if (!next) {
3024
+ return { slides, didAdd: false };
3025
+ }
3026
+ return { slides: replaceCommentsOnSlide(slides, slideIndex, next), didAdd: true };
3012
3027
  }
3013
3028
  function removeCommentFromSlide(slides, slideIndex, commentId) {
3014
- let didDelete = false;
3015
- const updated = slides.map((entry, index) => {
3016
- if (index !== slideIndex) {
3017
- return entry;
3018
- }
3019
- const existing = entry.comments || [];
3020
- const next = existing.filter((c) => {
3021
- const keep = c.id !== commentId;
3022
- if (!keep) {
3023
- didDelete = true;
3024
- }
3025
- return keep;
3026
- });
3027
- return next.length === existing.length ? entry : { ...entry, comments: next };
3028
- });
3029
- return { slides: updated, didDelete };
3029
+ const slide = slides[slideIndex];
3030
+ if (!slide) {
3031
+ return { slides, didDelete: false };
3032
+ }
3033
+ const next = removeCommentFromList(slide.comments || [], commentId);
3034
+ if (!next) {
3035
+ return { slides, didDelete: false };
3036
+ }
3037
+ return { slides: replaceCommentsOnSlide(slides, slideIndex, next), didDelete: true };
3030
3038
  }
3031
3039
  function editCommentInSlide(slides, slideIndex, commentId, newText) {
3032
- let didUpdate = false;
3033
- const updated = slides.map((entry, index) => {
3034
- if (index !== slideIndex) {
3035
- return entry;
3036
- }
3037
- const next = (entry.comments || []).map((c) => {
3038
- if (c.id !== commentId) {
3039
- return c;
3040
- }
3041
- didUpdate = true;
3042
- return { ...c, text: newText };
3043
- });
3044
- return didUpdate ? { ...entry, comments: next } : entry;
3045
- });
3046
- return { slides: updated, didUpdate };
3040
+ const slide = slides[slideIndex];
3041
+ if (!slide) {
3042
+ return { slides, didUpdate: false };
3043
+ }
3044
+ const next = editCommentInList(slide.comments || [], commentId, newText);
3045
+ if (!next) {
3046
+ return { slides, didUpdate: false };
3047
+ }
3048
+ return { slides: replaceCommentsOnSlide(slides, slideIndex, next), didUpdate: true };
3047
3049
  }
3048
3050
  function toggleResolvedInSlide(slides, slideIndex, commentId) {
3049
- let didUpdate = false;
3050
- const updated = slides.map((entry, index) => {
3051
- if (index !== slideIndex) {
3052
- return entry;
3053
- }
3054
- const next = (entry.comments || []).map((c) => {
3055
- if (c.id !== commentId) {
3056
- return c;
3057
- }
3058
- didUpdate = true;
3059
- return { ...c, resolved: !c.resolved };
3060
- });
3061
- return didUpdate ? { ...entry, comments: next } : entry;
3062
- });
3063
- return { slides: updated, didUpdate };
3051
+ const slide = slides[slideIndex];
3052
+ if (!slide) {
3053
+ return { slides, didUpdate: false };
3054
+ }
3055
+ const next = toggleCommentResolvedInList(slide.comments || [], commentId);
3056
+ if (!next) {
3057
+ return { slides, didUpdate: false };
3058
+ }
3059
+ return { slides: replaceCommentsOnSlide(slides, slideIndex, next), didUpdate: true };
3060
+ }
3061
+ function addReplyToSlide(slides, slideIndex, parentId, text, authorName) {
3062
+ const slide = slides[slideIndex];
3063
+ if (!slide) {
3064
+ return { slides, didAdd: false };
3065
+ }
3066
+ const next = replyToCommentInList(slide.comments || [], parentId, text, authorName);
3067
+ if (!next) {
3068
+ return { slides, didAdd: false };
3069
+ }
3070
+ return { slides: replaceCommentsOnSlide(slides, slideIndex, next), didAdd: true };
3064
3071
  }
3065
3072
  function pruneSlideDrafts(drafts, slideIds) {
3066
3073
  const next = {};
@@ -3111,14 +3118,21 @@ function useComments({
3111
3118
  if (draft.length === 0) {
3112
3119
  return;
3113
3120
  }
3114
- const newComment = {
3115
- id: generateCommentId(),
3116
- text: draft,
3117
- author: userName,
3118
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
3119
- elementId: selectedElementId ?? void 0
3120
- };
3121
- onUpdateSlides((prev) => addCommentToSlide(prev, slideIndex, newComment));
3121
+ let didAdd = false;
3122
+ onUpdateSlides((prev) => {
3123
+ const result = addCommentToSlide(
3124
+ prev,
3125
+ slideIndex,
3126
+ draft,
3127
+ userName,
3128
+ selectedElementId ?? void 0
3129
+ );
3130
+ didAdd = result.didAdd;
3131
+ return result.slides;
3132
+ });
3133
+ if (!didAdd) {
3134
+ return;
3135
+ }
3122
3136
  setCommentDraftBySlideId((prev) => ({
3123
3137
  ...prev,
3124
3138
  [slide.id]: ""
@@ -3258,39 +3272,19 @@ function useComments({
3258
3272
  if (!slide) {
3259
3273
  return;
3260
3274
  }
3261
- const parentComment = (slide.comments || []).find((c) => c.id === commentId);
3262
- if (!parentComment) {
3263
- return;
3264
- }
3265
3275
  const replyText = String(replyDraftByCommentId[commentId] || "").trim();
3266
3276
  if (replyText.length === 0) {
3267
3277
  return;
3268
3278
  }
3269
- const replyComment = {
3270
- id: generateCommentId(),
3271
- text: replyText,
3272
- author: userName,
3273
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
3274
- threadId: commentId,
3275
- elementId: parentComment.elementId
3276
- };
3277
- onUpdateSlides(
3278
- (prev) => prev.map((entry, index) => {
3279
- if (index !== slideIndex) {
3280
- return entry;
3281
- }
3282
- const updatedComments = (entry.comments || []).map((c) => {
3283
- if (c.id !== commentId) {
3284
- return c;
3285
- }
3286
- return {
3287
- ...c,
3288
- replies: [...c.replies || [], replyComment]
3289
- };
3290
- });
3291
- return { ...entry, comments: updatedComments };
3292
- })
3293
- );
3279
+ let didAdd = false;
3280
+ onUpdateSlides((prev) => {
3281
+ const result = addReplyToSlide(prev, slideIndex, commentId, replyText, userName);
3282
+ didAdd = result.didAdd;
3283
+ return result.slides;
3284
+ });
3285
+ if (!didAdd) {
3286
+ return;
3287
+ }
3294
3288
  setReplyingToCommentId(null);
3295
3289
  setReplyDraftByCommentId((prev) => {
3296
3290
  const next = { ...prev };
@@ -7521,26 +7515,14 @@ function usePrintHandlers(input) {
7521
7515
  if (!pptxData || settings.printWhat !== "slides") {
7522
7516
  return handlePrintWithSettings(settings);
7523
7517
  }
7524
- const colorFilter = (() => {
7525
- if (settings.colorMode === "grayscale") {
7526
- return "filter: grayscale(1);";
7527
- }
7528
- if (settings.colorMode === "blackAndWhite") {
7529
- return "filter: grayscale(1) contrast(2);";
7530
- }
7531
- return "";
7532
- })();
7533
- const slideIndices = (() => {
7534
- if (settings.slideRange === "current") {
7535
- return [activeSlideIndex];
7536
- }
7537
- if (settings.slideRange === "custom") {
7538
- const from = Math.max(0, settings.customRangeFrom - 1);
7539
- const to = Math.min(slides.length - 1, settings.customRangeTo - 1);
7540
- return Array.from({ length: to - from + 1 }, (_, i) => from + i);
7541
- }
7542
- return Array.from({ length: slides.length }, (_, i) => i);
7543
- })();
7518
+ const colorFilter = computeColorFilter(settings.colorMode);
7519
+ const slideIndices = computeSlideIndices(
7520
+ settings.slideRange,
7521
+ activeSlideIndex,
7522
+ slides.length,
7523
+ settings.customRangeFrom,
7524
+ settings.customRangeTo
7525
+ );
7544
7526
  try {
7545
7527
  const svgs = exportAllSlidesToSvg(pptxData, {
7546
7528
  slideIndices
@@ -7561,26 +7543,14 @@ function usePrintHandlers(input) {
7561
7543
  };
7562
7544
  const handlePrintWithSettings = async (settings) => {
7563
7545
  setIsPrintDialogOpen(false);
7564
- const colorFilter = (() => {
7565
- if (settings.colorMode === "grayscale") {
7566
- return "filter: grayscale(1);";
7567
- }
7568
- if (settings.colorMode === "blackAndWhite") {
7569
- return "filter: grayscale(1) contrast(2);";
7570
- }
7571
- return "";
7572
- })();
7573
- const slideIndices = (() => {
7574
- if (settings.slideRange === "current") {
7575
- return [activeSlideIndex];
7576
- }
7577
- if (settings.slideRange === "custom") {
7578
- const from = Math.max(0, settings.customRangeFrom - 1);
7579
- const to = Math.min(slides.length - 1, settings.customRangeTo - 1);
7580
- return Array.from({ length: to - from + 1 }, (_, i) => from + i);
7581
- }
7582
- return Array.from({ length: slides.length }, (_, i) => i);
7583
- })();
7546
+ const colorFilter = computeColorFilter(settings.colorMode);
7547
+ const slideIndices = computeSlideIndices(
7548
+ settings.slideRange,
7549
+ activeSlideIndex,
7550
+ slides.length,
7551
+ settings.customRangeFrom,
7552
+ settings.customRangeTo
7553
+ );
7584
7554
  if (settings.printWhat === "outline") {
7585
7555
  openPrintWindow(
7586
7556
  "Outline",
Binary file
Binary file