pptx-react-viewer 1.16.2 → 1.17.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 (130) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/{Model3DScene-DI6FSWDL.mjs → Model3DScene-QHDYQXL2.mjs} +2 -2
  3. package/dist/Model3DScene-QHDYQXL2.mjs.br +0 -0
  4. package/dist/Model3DScene-QHDYQXL2.mjs.gz +0 -0
  5. package/dist/{Model3DScene-PE7L24QK.js → Model3DScene-YA4F63DT.js} +3 -3
  6. package/dist/Model3DScene-YA4F63DT.js.br +0 -0
  7. package/dist/Model3DScene-YA4F63DT.js.gz +0 -0
  8. package/dist/PowerPointViewer-C4d7SKZf.d.ts +21 -0
  9. package/dist/PowerPointViewer-C4d7SKZf.d.ts.map +1 -0
  10. package/dist/{SurfaceChart3DScene-NMLG3BQK.mjs → SurfaceChart3DScene-GUAS2NWQ.mjs} +2 -2
  11. package/dist/SurfaceChart3DScene-GUAS2NWQ.mjs.br +0 -0
  12. package/dist/SurfaceChart3DScene-GUAS2NWQ.mjs.gz +0 -0
  13. package/dist/{SurfaceChart3DScene-AJLD3VW6.js → SurfaceChart3DScene-TGNJHTJQ.js} +3 -3
  14. package/dist/SurfaceChart3DScene-TGNJHTJQ.js.br +0 -0
  15. package/dist/SurfaceChart3DScene-TGNJHTJQ.js.gz +0 -0
  16. package/dist/{chunk-HJQZJ3VE.mjs → chunk-5CD34U2V.mjs} +1 -1
  17. package/dist/chunk-5CD34U2V.mjs.br +0 -0
  18. package/dist/chunk-5CD34U2V.mjs.gz +0 -0
  19. package/dist/{chunk-46HNHBHF.mjs → chunk-G22EWPLH.mjs} +134 -4
  20. package/dist/chunk-G22EWPLH.mjs.br +0 -0
  21. package/dist/chunk-G22EWPLH.mjs.gz +0 -0
  22. package/dist/{chunk-JBCVQFWI.mjs → chunk-HN7CPQUG.mjs} +5 -5
  23. package/dist/chunk-HN7CPQUG.mjs.br +0 -0
  24. package/dist/chunk-HN7CPQUG.mjs.gz +0 -0
  25. package/dist/{chunk-WGLJ32FW.js → chunk-IZXN663G.js} +1 -1
  26. package/dist/chunk-IZXN663G.js.br +0 -0
  27. package/dist/chunk-IZXN663G.js.gz +0 -0
  28. package/dist/{chunk-WMRS37KQ.js → chunk-JWS3RQKN.js} +160 -28
  29. package/dist/chunk-JWS3RQKN.js.br +0 -0
  30. package/dist/chunk-JWS3RQKN.js.gz +0 -0
  31. package/dist/{chunk-YAQOTVZT.js → chunk-MGLRKGCH.js} +146 -66
  32. package/dist/chunk-MGLRKGCH.js.br +0 -0
  33. package/dist/chunk-MGLRKGCH.js.gz +0 -0
  34. package/dist/{chunk-DZF4BNRP.mjs → chunk-PCQH2UBR.mjs} +230 -232
  35. package/dist/chunk-PCQH2UBR.mjs.br +0 -0
  36. package/dist/chunk-PCQH2UBR.mjs.gz +0 -0
  37. package/dist/{chunk-MZYQUURK.js → chunk-SXCO5HHN.js} +438 -438
  38. package/dist/chunk-SXCO5HHN.js.br +0 -0
  39. package/dist/chunk-SXCO5HHN.js.gz +0 -0
  40. package/dist/{chunk-VRASDGWX.js → chunk-WH7YXV3I.js} +1026 -1028
  41. package/dist/chunk-WH7YXV3I.js.br +0 -0
  42. package/dist/chunk-WH7YXV3I.js.gz +0 -0
  43. package/dist/{chunk-X7ILBQEY.mjs → chunk-XRYREYXC.mjs} +146 -66
  44. package/dist/chunk-XRYREYXC.mjs.br +0 -0
  45. package/dist/chunk-XRYREYXC.mjs.gz +0 -0
  46. package/dist/{dist-VMFNUFUX.js → dist-2ZAH7U6U.js} +507 -507
  47. package/dist/dist-2ZAH7U6U.js.br +0 -0
  48. package/dist/dist-2ZAH7U6U.js.gz +0 -0
  49. package/dist/{dist-JJ2NI2O3.mjs → dist-MXDC6YTS.mjs} +1 -1
  50. package/dist/dist-MXDC6YTS.mjs.br +0 -0
  51. package/dist/dist-MXDC6YTS.mjs.gz +0 -0
  52. package/dist/hooks-unstable.d.ts +9683 -1886
  53. package/dist/hooks-unstable.d.ts.map +1 -0
  54. package/dist/hooks-unstable.js +75 -75
  55. package/dist/hooks-unstable.js.br +0 -0
  56. package/dist/hooks-unstable.js.gz +0 -0
  57. package/dist/hooks-unstable.mjs +4 -4
  58. package/dist/hooks-unstable.mjs.br +0 -0
  59. package/dist/hooks-unstable.mjs.gz +0 -0
  60. package/dist/i18n.d.ts +27 -1
  61. package/dist/i18n.d.ts.map +1 -0
  62. package/dist/i18n.js +3 -3
  63. package/dist/i18n.js.br +1 -1
  64. package/dist/i18n.js.gz +0 -0
  65. package/dist/i18n.mjs +1 -1
  66. package/dist/i18n.mjs.br +0 -0
  67. package/dist/i18n.mjs.gz +0 -0
  68. package/dist/index-XGt7MZpa.d.ts +607 -0
  69. package/dist/index-XGt7MZpa.d.ts.map +1 -0
  70. package/dist/index.d.ts +4753 -10
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +19 -19
  73. package/dist/index.js.br +0 -0
  74. package/dist/index.js.gz +0 -0
  75. package/dist/index.mjs +5 -5
  76. package/dist/index.mjs.br +0 -0
  77. package/dist/index.mjs.gz +0 -0
  78. package/dist/types-BK7Nt13M.d.ts +483 -0
  79. package/dist/types-BK7Nt13M.d.ts.map +1 -0
  80. package/dist/viewer/index.d.ts +8008 -88
  81. package/dist/viewer/index.d.ts.map +1 -0
  82. package/dist/viewer/index.js +20 -20
  83. package/dist/viewer/index.js.br +0 -0
  84. package/dist/viewer/index.js.gz +0 -0
  85. package/dist/viewer/index.mjs +5 -5
  86. package/dist/viewer/index.mjs.br +0 -0
  87. package/dist/viewer/index.mjs.gz +0 -0
  88. package/package.json +6 -5
  89. package/dist/Model3DScene-DI6FSWDL.mjs.br +0 -0
  90. package/dist/Model3DScene-DI6FSWDL.mjs.gz +0 -0
  91. package/dist/Model3DScene-PE7L24QK.js.br +0 -0
  92. package/dist/Model3DScene-PE7L24QK.js.gz +0 -0
  93. package/dist/PowerPointViewer-BsaUH3ZT.d.ts +0 -26
  94. package/dist/PowerPointViewer-Nxku67uL.d.mts +0 -26
  95. package/dist/SurfaceChart3DScene-AJLD3VW6.js.br +0 -0
  96. package/dist/SurfaceChart3DScene-AJLD3VW6.js.gz +0 -0
  97. package/dist/SurfaceChart3DScene-NMLG3BQK.mjs.br +0 -0
  98. package/dist/SurfaceChart3DScene-NMLG3BQK.mjs.gz +0 -0
  99. package/dist/chunk-46HNHBHF.mjs.br +0 -0
  100. package/dist/chunk-46HNHBHF.mjs.gz +0 -0
  101. package/dist/chunk-DZF4BNRP.mjs.br +0 -0
  102. package/dist/chunk-DZF4BNRP.mjs.gz +0 -0
  103. package/dist/chunk-HJQZJ3VE.mjs.br +0 -0
  104. package/dist/chunk-HJQZJ3VE.mjs.gz +0 -0
  105. package/dist/chunk-JBCVQFWI.mjs.br +0 -0
  106. package/dist/chunk-JBCVQFWI.mjs.gz +0 -0
  107. package/dist/chunk-MZYQUURK.js.br +0 -0
  108. package/dist/chunk-MZYQUURK.js.gz +0 -0
  109. package/dist/chunk-VRASDGWX.js.br +0 -0
  110. package/dist/chunk-VRASDGWX.js.gz +0 -0
  111. package/dist/chunk-WGLJ32FW.js.br +0 -0
  112. package/dist/chunk-WGLJ32FW.js.gz +0 -0
  113. package/dist/chunk-WMRS37KQ.js.br +0 -0
  114. package/dist/chunk-WMRS37KQ.js.gz +0 -0
  115. package/dist/chunk-X7ILBQEY.mjs.br +0 -0
  116. package/dist/chunk-X7ILBQEY.mjs.gz +0 -0
  117. package/dist/chunk-YAQOTVZT.js.br +0 -0
  118. package/dist/chunk-YAQOTVZT.js.gz +0 -0
  119. package/dist/dist-JJ2NI2O3.mjs.br +0 -0
  120. package/dist/dist-JJ2NI2O3.mjs.gz +0 -0
  121. package/dist/dist-VMFNUFUX.js.br +0 -0
  122. package/dist/dist-VMFNUFUX.js.gz +0 -0
  123. package/dist/hooks-unstable.d.mts +0 -2300
  124. package/dist/i18n.d.mts +0 -1
  125. package/dist/index.d.mts +0 -46
  126. package/dist/types-ui-NG29h55h.d.mts +0 -712
  127. package/dist/types-ui-NG29h55h.d.ts +0 -712
  128. package/dist/usePresenterWindow-DToCijGy.d.ts +0 -1619
  129. package/dist/usePresenterWindow-DeTm-unp.d.mts +0 -1619
  130. package/dist/viewer/index.d.mts +0 -129
@@ -1,7 +1,7 @@
1
- import { DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, useReducedMotion, useViewerState, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useFollowMode, useBroadcastFollower, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, SLIDE_TRANSITION_OPTIONS, DEFAULT_FILL_COLOR, shouldRenderFallbackLabel, isImageTiled, getImageTilingStyle, renderTextSegments, getTextLayoutStyle, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, renderTableElement, renderMediaElement, buildTextBody3DSceneStyle, getTextWarpStyle, getCropShapeClipPath, SLIDE_NAV_THUMBNAIL_WIDTH, useKeyboardInsets, useModalDismissDrag, SHORTCUT_REFERENCE_ITEMS, useCollaborativeState, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, parseTableElementData, ensureArrayValue, getTableCellBandStyle, extractCellText, extractTableCellStyle, cellStyleToCss, renderChartElement, getDuotoneColors, renderDuotoneSvgFilter, renderArtisticEffectSvgFilter, renderImageAlphaSvgFilter, buildReactChartViewModel, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, TOOLBAR_SECTIONS, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, EMU_PER_PX, HYPERLINK_COLOR, GRID_SIZE, startPreviewAnimation, stopPreviewAnimation } from './chunk-JBCVQFWI.mjs';
2
- import { normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, RULER_THICKNESS, RULER_FONT_SIZE, convertLatexToOmml, convertOmmlToMathMl, openPptxFile, buildSmartArtA11y, buildCssGradientFromShapeStyle, getElementLabel, getTextCompensationTransform, shouldUseSvgWarp, themeToCssVars, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, resolveTransportForServerUrl, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveDrawingShapeNodeId, getPendingSelectionRestore, restoreSegmentSelection, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, getWarpPath, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, safeOpenUrl, isPpactionUrl, parsePpactionUrl, formatVersionTimestamp, formatRelativeTime, PRESETS, CATEGORIES, convertOmmlToLatex, clampPercent, HANDOUT_OPTIONS, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, NOTES_FONT_SIZE_DEFAULT, clampNotesFontSize, NOTES_FONT_SIZE_STEP, formatTime, formatElapsed, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_MAX, computeInlineEditorRect, findSmartArtNodeText, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, 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, groupIntoParagraphs, substituteFieldText, TAB_ROW_ACTION_CLASSES, INSERT_CHART_TYPES, getShapeAdjustmentHandleDescriptor, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, formatSlideCounter, isUrlSafe, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, notesSegmentsToSpans, getConnectionSites, generateTicks, getCommentMarkerPosition, buildThemeColorGrid, THEME_COLOR_LABELS, buildSmartArtPresetData, TABLE_STYLE_PRESETS, 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-46HNHBHF.mjs';
3
- import { translationsEn } from './chunk-HJQZJ3VE.mjs';
4
- import { hasShapeProperties, hasTextProperties, SWITCHABLE_LAYOUT_TYPES, isInkElement, getLinkedTextBoxSegments, isImageLikeElement, getSubstituteFontFamily, setSmartArtNodeStyle, updateSmartArtNodeText, THEME_COLOR_SCHEME_KEYS, chartDataChangeType, chartDataUpdatePoint, chartDataAddCategory, chartDataRemoveCategory, chartDataAddSeries, chartDataRemoveSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, pptxActionToElementAction, hasNonTrivialOverride, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, addSmartArtNodeAsChild, removeSmartArtNode, elementActionToPptxAction, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode } from './chunk-X7ILBQEY.mjs';
1
+ import { DEFAULT_STROKE_COLOR, getConnectorPathGeometry, buildLineShadowCss, buildLineGlowFilter, renderConnectorMarker, MIN_ELEMENT_SIZE, getShapeVisualStyle, getTextStyleForElement, DEFAULT_TEXT_COLOR, renderVectorShape, isConnectorOrLineElement, build3DExtrusionData, getImageRenderStyle, cn, SHAPE_PRESETS, ANIMATION_PRESET_OPTIONS, useReducedMotion, useViewerState, useIsMobile, useResizablePanels, useDerivedSlideState, useZoomViewport, useEditorHistory, usePresentationSetup, useTouchGestures, useViewerDialogs, useEditorOperations, useViewerIntegration, useYjsDocumentSync, useFollowMode, useBroadcastFollower, resolvePalette, resolveStyle, layoutToCategory, wrapChrome, SLIDE_TRANSITION_OPTIONS, DEFAULT_FILL_COLOR, shouldRenderFallbackLabel, isImageTiled, getImageTilingStyle, renderTextSegments, getTextLayoutStyle, hasDagDuotoneEffect, renderDagDuotoneSvgFilter, renderTableElement, renderMediaElement, buildTextBody3DSceneStyle, getTextWarpStyle, getCropShapeClipPath, SLIDE_NAV_THUMBNAIL_WIDTH, useKeyboardInsets, useModalDismissDrag, SHORTCUT_REFERENCE_ITEMS, useCollaborativeState, styleShadow, styleStroke, colour, fitFontSize, smartArtNodeGroupProps, chevronPoints, SmartArtNodeText, truncate, renderStepDownProcess, renderAlternatingFlow, renderDescendingProcess, renderPictureAccentList, renderVerticalBlockList, renderGroupedList, renderPyramidList, renderHorizontalPictureList, renderAccentProcess, renderVerticalChevronList, parseTableElementData, ensureArrayValue, getTableCellBandStyle, extractCellText, extractTableCellStyle, cellStyleToCss, renderChartElement, getDuotoneColors, renderDuotoneSvgFilter, renderArtisticEffectSvgFilter, renderImageAlphaSvgFilter, buildReactChartViewModel, DEFAULT_TEXT_FONT_SIZE, DEFAULT_FONT_FAMILY, TOOLBAR_SECTIONS, useVirtualizedSlides, useSwipeNavigation, useSheetDismissDrag, detectTargetType, parseEmailUrl, parseSlideFromUrl, ACTION_VERB_MAP, buildTree, treeWidth, treeDepth, nodeOpacity, gearPath, resolveSmartArtDataPalette, EMU_PER_PX, HYPERLINK_COLOR, GRID_SIZE, startPreviewAnimation, stopPreviewAnimation } from './chunk-HN7CPQUG.mjs';
2
+ import { normalizeHexColor, colorWithOpacity, normalizeStrokeDashType, getSvgStrokeDasharray, getCompoundLineOffsets, getCompoundLineWidths, svgLineCap, getElementTransform, ACTION_BUTTON_PRESETS, isEditableTextElement, getAriaRole, getAriaLabel, getAriaRoleDescription, getImageEffectsOpacity, getImageEffectsFilter, getElementTransformWithoutRotation, RULER_THICKNESS, RULER_FONT_SIZE, convertLatexToOmml, convertOmmlToMathMl, buildUserFontFaceStyles, openPptxFile, buildSmartArtA11y, buildCssGradientFromShapeStyle, getElementLabel, getTextCompensationTransform, getSlideBackgroundStyle, shouldUseSvgWarp, themeToCssVars, DEFAULT_INSERT_CHART_TYPE, hasCopyableFormat, resolveTransportForServerUrl, generateBroadcastRoomId, DEFAULT_BROADCAST_SERVER_URL, buildBroadcastViewerUrl, resolveDrawingShapeNodeId, getPendingSelectionRestore, restoreSegmentSelection, formatAxisValue, hasPressureVariation, getInkReplayStyles, INK_REPLAY_KEYFRAMES, resolveInkColor, resolveInkWidth, resolveInkOpacity, pressuresToWidths, getContentPartReplayStyles, resolveOleType, getOleTypeColor, getOleTypeLabel, getWarpPath, filterCommands, resolveTitleBarStatusKey, TITLE_BAR_CLASSES, TITLE_BAR_DEFAULT_FILE_KEY, safeOpenUrl, isPpactionUrl, parsePpactionUrl, formatVersionTimestamp, formatRelativeTime, PRESETS, CATEGORIES, convertOmmlToLatex, clampPercent, HANDOUT_OPTIONS, mobileElapsedSince, isFirstSlide, isLastSlide, formatMobileElapsed, mobileSlideCounter, NOTES_FONT_SIZE_DEFAULT, clampNotesFontSize, NOTES_FONT_SIZE_STEP, formatTime, formatElapsed, NOTES_FONT_SIZE_MIN, NOTES_FONT_SIZE_MAX, computeInlineEditorRect, findSmartArtNodeText, rebuildDrawingShapesIfCleared, shouldCommitSmartArtNodeText, 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, groupIntoParagraphs, substituteFieldText, TAB_ROW_ACTION_CLASSES, INSERT_CHART_TYPES, getShapeAdjustmentHandleDescriptor, getSlideTransitionAnimations, SLIDE_TRANSITION_KEYFRAMES, formatSlideCounter, isUrlSafe, computeHandoutLayout, getPrintableArea, generateNoteLineCount, computeAllNotesPages, getNotesPrintableArea, notesSegmentsToSpans, getConnectionSites, generateTicks, getCommentMarkerPosition, buildThemeColorGrid, THEME_COLOR_LABELS, buildSmartArtPresetData, TABLE_STYLE_PRESETS, 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-G22EWPLH.mjs';
3
+ import { translationsEn } from './chunk-5CD34U2V.mjs';
4
+ import { hasShapeProperties, hasTextProperties, SWITCHABLE_LAYOUT_TYPES, isInkElement, getLinkedTextBoxSegments, isImageLikeElement, getSubstituteFontFamily, setSmartArtNodeStyle, updateSmartArtNodeText, THEME_COLOR_SCHEME_KEYS, chartDataChangeType, chartDataUpdatePoint, chartDataAddCategory, chartDataRemoveCategory, chartDataAddSeries, chartDataRemoveSeries, setChartAxisLogScale, setChartAxisTitleStyle, setChartAxisGridlineStyle, setChartSeriesMarker, setChartSeriesChartType, setChartDataPointFill, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, getOleObjectTypeLabel, pptxActionToElementAction, hasNonTrivialOverride, COLOR_MAP_ALIAS_KEYS, DEFAULT_COLOR_MAP, addSmartArtNodeAsChild, removeSmartArtNode, elementActionToPptxAction, switchSmartArtLayout, addSmartArtNode, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode } from './chunk-XRYREYXC.mjs';
5
5
  import React5, { createContext, useMemo, useState, useCallback, forwardRef, useEffect, useRef, useContext, Suspense, useLayoutEffect, useDeferredValue } from 'react';
6
6
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
7
  import { useTranslation } from 'react-i18next';
@@ -243,6 +243,7 @@ function CollaborationStatusIndicator({
243
243
  return /* @__PURE__ */ jsxs(
244
244
  "div",
245
245
  {
246
+ role: "status",
246
247
  "data-testid": "collaboration-status",
247
248
  className: "flex items-center gap-1.5",
248
249
  "aria-label": t("pptx.collaboration.statusAriaLabel", {
@@ -2661,138 +2662,111 @@ function SlideThumbnailImpl({
2661
2662
  const opt = SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
2662
2663
  return opt ? t(opt.i18nKey) : slide.transition.type;
2663
2664
  })() : void 0;
2664
- return /* @__PURE__ */ jsxs(
2665
+ return /* @__PURE__ */ jsx(
2665
2666
  "div",
2666
2667
  {
2667
2668
  className: "relative w-full overflow-hidden rounded border border-border bg-white",
2668
- style: { height: previewHeight },
2669
- children: [
2670
- slide.backgroundColor && slide.backgroundColor !== "transparent" && /* @__PURE__ */ jsx(
2671
- "div",
2672
- {
2673
- className: "absolute inset-0",
2674
- style: {
2675
- backgroundColor: normalizeHexColor(slide.backgroundColor, "#ffffff")
2676
- }
2677
- }
2678
- ),
2679
- slide.backgroundGradient && /* @__PURE__ */ jsx(
2680
- "div",
2681
- {
2682
- className: "absolute inset-0 pointer-events-none",
2683
- style: { background: slide.backgroundGradient }
2684
- }
2685
- ),
2686
- slide.backgroundImage && /* @__PURE__ */ jsx(
2687
- "img",
2688
- {
2689
- src: slide.backgroundImage,
2690
- alt: "",
2691
- className: "absolute inset-0 w-full h-full object-cover pointer-events-none",
2692
- draggable: false
2693
- }
2694
- ),
2695
- /* @__PURE__ */ jsxs(
2696
- "div",
2697
- {
2698
- className: "absolute top-0 left-0 origin-top-left",
2699
- style: {
2700
- width: safeCanvasWidth,
2701
- height: safeCanvasHeight,
2702
- transform: `scale(${scale})`,
2703
- transformOrigin: "top left"
2704
- },
2705
- children: [
2706
- slide.transition && slide.transition.type !== "none" && slide.transition.type !== "cut" && /* @__PURE__ */ jsx(
2669
+ style: { height: previewHeight, ...getSlideBackgroundStyle(slide) },
2670
+ children: /* @__PURE__ */ jsxs(
2671
+ "div",
2672
+ {
2673
+ className: "absolute top-0 left-0 origin-top-left",
2674
+ style: {
2675
+ width: safeCanvasWidth,
2676
+ height: safeCanvasHeight,
2677
+ transform: `scale(${scale})`,
2678
+ transformOrigin: "top left"
2679
+ },
2680
+ children: [
2681
+ slide.transition && slide.transition.type !== "none" && slide.transition.type !== "cut" && /* @__PURE__ */ jsx(
2682
+ "div",
2683
+ {
2684
+ className: "absolute top-0.5 right-0.5 z-10 px-1 py-px rounded bg-primary/80 text-[7px] text-white leading-tight pointer-events-none",
2685
+ title: t("pptx.slideThumbnail.transitionTooltip", { name: transitionLabel }),
2686
+ children: transitionLabel
2687
+ }
2688
+ ),
2689
+ previewElements.map((element) => {
2690
+ const elementWidth = Math.max(element.width, 1);
2691
+ const elementHeight = Math.max(element.height, 1);
2692
+ const elShapeStyle = hasShapeProperties(element) ? element.shapeStyle : void 0;
2693
+ const hasFill = elShapeStyle?.fillColor !== void 0 && elShapeStyle?.fillColor !== "transparent" || Boolean(buildCssGradientFromShapeStyle(elShapeStyle) || elShapeStyle?.fillGradient) || elShapeStyle?.fillMode === "pattern" && Boolean(elShapeStyle.fillPatternPreset);
2694
+ const fillColor = normalizeHexColor(elShapeStyle?.fillColor, DEFAULT_FILL_COLOR);
2695
+ const strokeWidth = Math.max(0, elShapeStyle?.strokeWidth || 0);
2696
+ const strokeColor = normalizeHexColor(elShapeStyle?.strokeColor, DEFAULT_STROKE_COLOR);
2697
+ const shapeVisualStyle = getShapeVisualStyle(
2698
+ element,
2699
+ hasFill,
2700
+ fillColor,
2701
+ strokeWidth,
2702
+ strokeColor
2703
+ );
2704
+ const vectorShape = renderVectorShape(
2705
+ element,
2706
+ hasFill,
2707
+ fillColor,
2708
+ strokeWidth,
2709
+ strokeColor
2710
+ );
2711
+ const fallbackTextColor = element.type === "shape" && hasFill ? "#ffffff" : DEFAULT_TEXT_COLOR;
2712
+ const textStyle = getTextStyleForElement(element, fallbackTextColor);
2713
+ const imageRenderStyle = getImageRenderStyle(element);
2714
+ const canRenderText = isEditableTextElement(element);
2715
+ const elText = hasTextProperties(element) ? element.text : void 0;
2716
+ const elTextSegments = hasTextProperties(element) ? element.textSegments : void 0;
2717
+ const hasText = typeof elText === "string" && elText.trim().length > 0 || (elTextSegments?.length ?? 0) > 0;
2718
+ const fallbackLabel = shouldRenderFallbackLabel(element, canRenderText) ? getElementLabel(element) : "";
2719
+ return /* @__PURE__ */ jsx(
2707
2720
  "div",
2708
2721
  {
2709
- className: "absolute top-0.5 right-0.5 z-10 px-1 py-px rounded bg-primary/80 text-[7px] text-white leading-tight pointer-events-none",
2710
- title: t("pptx.slideThumbnail.transitionTooltip", { name: transitionLabel }),
2711
- children: transitionLabel
2712
- }
2713
- ),
2714
- previewElements.map((element) => {
2715
- const elementWidth = Math.max(element.width, 1);
2716
- const elementHeight = Math.max(element.height, 1);
2717
- const elShapeStyle = hasShapeProperties(element) ? element.shapeStyle : void 0;
2718
- const hasFill = elShapeStyle?.fillColor !== void 0 && elShapeStyle?.fillColor !== "transparent" || Boolean(buildCssGradientFromShapeStyle(elShapeStyle) || elShapeStyle?.fillGradient) || elShapeStyle?.fillMode === "pattern" && Boolean(elShapeStyle.fillPatternPreset);
2719
- const fillColor = normalizeHexColor(elShapeStyle?.fillColor, DEFAULT_FILL_COLOR);
2720
- const strokeWidth = Math.max(0, elShapeStyle?.strokeWidth || 0);
2721
- const strokeColor = normalizeHexColor(elShapeStyle?.strokeColor, DEFAULT_STROKE_COLOR);
2722
- const shapeVisualStyle = getShapeVisualStyle(
2723
- element,
2724
- hasFill,
2725
- fillColor,
2726
- strokeWidth,
2727
- strokeColor
2728
- );
2729
- const vectorShape = renderVectorShape(
2730
- element,
2731
- hasFill,
2732
- fillColor,
2733
- strokeWidth,
2734
- strokeColor
2735
- );
2736
- const fallbackTextColor = element.type === "shape" && hasFill ? "#ffffff" : DEFAULT_TEXT_COLOR;
2737
- const textStyle = getTextStyleForElement(element, fallbackTextColor);
2738
- const imageRenderStyle = getImageRenderStyle(element);
2739
- const canRenderText = isEditableTextElement(element);
2740
- const elText = hasTextProperties(element) ? element.text : void 0;
2741
- const elTextSegments = hasTextProperties(element) ? element.textSegments : void 0;
2742
- const hasText = typeof elText === "string" && elText.trim().length > 0 || (elTextSegments?.length ?? 0) > 0;
2743
- const fallbackLabel = shouldRenderFallbackLabel(element, canRenderText) ? getElementLabel(element) : "";
2744
- return /* @__PURE__ */ jsx(
2745
- "div",
2746
- {
2747
- className: "absolute overflow-hidden",
2748
- style: {
2749
- left: element.x,
2750
- top: element.y,
2751
- width: elementWidth,
2752
- height: elementHeight,
2753
- transform: getElementTransform(element),
2754
- transformOrigin: "center"
2755
- },
2756
- children: (element.type === "picture" || element.type === "image") && (element.svgData || element.imageData) ? isImageTiled(element) ? /* @__PURE__ */ jsx(
2722
+ className: "absolute overflow-hidden",
2723
+ style: {
2724
+ left: element.x,
2725
+ top: element.y,
2726
+ width: elementWidth,
2727
+ height: elementHeight,
2728
+ transform: getElementTransform(element),
2729
+ transformOrigin: "center"
2730
+ },
2731
+ children: (element.type === "picture" || element.type === "image") && (element.svgData || element.imageData) ? isImageTiled(element) ? /* @__PURE__ */ jsx(
2732
+ "div",
2733
+ {
2734
+ className: "pointer-events-none w-full h-full",
2735
+ style: getImageTilingStyle(element)
2736
+ }
2737
+ ) : /* @__PURE__ */ jsx(
2738
+ "img",
2739
+ {
2740
+ src: element.svgData || element.imageData,
2741
+ alt: "",
2742
+ className: "pointer-events-none",
2743
+ style: imageRenderStyle,
2744
+ draggable: false
2745
+ }
2746
+ ) : element.type === "table" ? /* @__PURE__ */ jsx(ThumbnailTable, { element, textStyle }) : element.type === "smartArt" ? /* @__PURE__ */ jsx(ThumbnailSmartArt, { element }) : element.type === "chart" ? /* @__PURE__ */ jsx(ThumbnailChart, { element }) : /* @__PURE__ */ jsxs("div", { className: "relative w-full h-full overflow-hidden", style: shapeVisualStyle, children: [
2747
+ vectorShape,
2748
+ canRenderText && hasText && /* @__PURE__ */ jsx(
2757
2749
  "div",
2758
2750
  {
2759
- className: "pointer-events-none w-full h-full",
2760
- style: getImageTilingStyle(element)
2761
- }
2762
- ) : /* @__PURE__ */ jsx(
2763
- "img",
2764
- {
2765
- src: element.svgData || element.imageData,
2766
- alt: "",
2767
- className: "pointer-events-none",
2768
- style: imageRenderStyle,
2769
- draggable: false
2751
+ className: "w-full h-full whitespace-pre-wrap break-words px-1 py-0.5 leading-[1.3]",
2752
+ style: {
2753
+ ...getTextLayoutStyle(element),
2754
+ ...textStyle,
2755
+ transform: getTextCompensationTransform(element),
2756
+ transformOrigin: "center"
2757
+ },
2758
+ children: renderTextSegments(element, fallbackTextColor)
2770
2759
  }
2771
- ) : element.type === "table" ? /* @__PURE__ */ jsx(ThumbnailTable, { element, textStyle }) : element.type === "smartArt" ? /* @__PURE__ */ jsx(ThumbnailSmartArt, { element }) : element.type === "chart" ? /* @__PURE__ */ jsx(ThumbnailChart, { element }) : /* @__PURE__ */ jsxs("div", { className: "relative w-full h-full overflow-hidden", style: shapeVisualStyle, children: [
2772
- vectorShape,
2773
- canRenderText && hasText && /* @__PURE__ */ jsx(
2774
- "div",
2775
- {
2776
- className: "w-full h-full whitespace-pre-wrap break-words px-1 py-0.5 leading-[1.3]",
2777
- style: {
2778
- ...getTextLayoutStyle(element),
2779
- ...textStyle,
2780
- transform: getTextCompensationTransform(element),
2781
- transformOrigin: "center"
2782
- },
2783
- children: renderTextSegments(element, fallbackTextColor)
2784
- }
2785
- ),
2786
- !hasText && fallbackLabel.length > 0 && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center text-[10px] text-muted-foreground", children: fallbackLabel })
2787
- ] })
2788
- },
2789
- element.id
2790
- );
2791
- })
2792
- ]
2793
- }
2794
- )
2795
- ]
2760
+ ),
2761
+ !hasText && fallbackLabel.length > 0 && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center text-[10px] text-muted-foreground", children: fallbackLabel })
2762
+ ] })
2763
+ },
2764
+ element.id
2765
+ );
2766
+ })
2767
+ ]
2768
+ }
2769
+ )
2796
2770
  }
2797
2771
  );
2798
2772
  }
@@ -2818,6 +2792,9 @@ function arePropsEqual2(prev, next) {
2818
2792
  if (prev.slide.backgroundGradient !== next.slide.backgroundGradient) {
2819
2793
  return false;
2820
2794
  }
2795
+ if (prev.slide.backgroundPattern !== next.slide.backgroundPattern) {
2796
+ return false;
2797
+ }
2821
2798
  if (prev.templateElements !== next.templateElements) {
2822
2799
  return false;
2823
2800
  }
@@ -4858,7 +4835,7 @@ function FailedToLoad() {
4858
4835
  var LazyModel3DScene = React5.lazy(
4859
4836
  async () => {
4860
4837
  try {
4861
- return await import('./Model3DScene-DI6FSWDL.mjs');
4838
+ return await import('./Model3DScene-QHDYQXL2.mjs');
4862
4839
  } catch {
4863
4840
  return { default: FailedToLoad };
4864
4841
  }
@@ -6469,11 +6446,14 @@ function SlideItemInner({
6469
6446
  const scale = SLIDE_NAV_THUMBNAIL_WIDTH / safeCanvasWidth;
6470
6447
  const previewHeight = Math.max(56, Math.round(safeCanvasHeight * scale));
6471
6448
  return /* @__PURE__ */ jsxs(
6472
- "div",
6449
+ "button",
6473
6450
  {
6451
+ type: "button",
6474
6452
  ref: slideRef,
6453
+ "aria-label": `Go to slide ${slideIndex + 1}`,
6454
+ "aria-current": isActive ? "true" : void 0,
6475
6455
  className: cn(
6476
- "group relative flex items-center gap-1 cursor-pointer py-0.5 px-1 transition-all",
6456
+ "group relative flex w-full items-center gap-1 cursor-pointer border-0 bg-transparent py-0.5 px-1 text-left transition-all",
6477
6457
  isActive && "bg-accent/40 before:absolute before:left-0 before:top-1 before:bottom-1 before:w-[3px] before:bg-primary before:rounded-r",
6478
6458
  isHidden && "opacity-50"
6479
6459
  ),
@@ -15898,45 +15878,54 @@ function Toolbar(p) {
15898
15878
  className: "relative z-20 border-b border-border bg-secondary/50 overflow-visible",
15899
15879
  children: [
15900
15880
  /* @__PURE__ */ jsx(ToolbarPrimaryRow, { ...p }),
15901
- showRibbon && /* @__PURE__ */ jsxs("div", { className: "flex items-center border-b border-border/60 px-1 max-md:overflow-x-auto max-md:scrollbar-none", children: [
15902
- TOOLBAR_SECTIONS.map((s) => /* @__PURE__ */ jsx(
15903
- "button",
15904
- {
15905
- type: "button",
15906
- onClick: () => onSetToolbarSection(s.id),
15907
- className: cn(
15908
- "relative px-3.5 py-2 text-[12px] font-medium whitespace-nowrap transition-colors max-md:min-h-[36px] max-md:px-3",
15909
- toolbarSection === s.id ? s.id === "file" ? "text-white bg-primary/80 rounded-sm" : "text-foreground after:absolute after:-bottom-px after:left-0 after:right-0 after:h-[2.5px] after:bg-primary" : s.id === "file" ? "text-primary hover:bg-primary/15 rounded-sm" : "text-muted-foreground hover:text-foreground hover:bg-accent/30"
15910
- ),
15911
- children: t(s.labelKey)
15912
- },
15913
- s.id
15914
- )),
15915
- /* @__PURE__ */ jsx("div", { className: "flex-1" }),
15916
- /* @__PURE__ */ jsx(
15917
- TabRowActions,
15918
- {
15919
- onEnterRehearsalMode: p.canEdit ? p.onEnterRehearsalMode : void 0,
15920
- onOpenShareDialog: p.onOpenShareDialog,
15921
- onPackageForSharing: p.onPackageForSharing
15922
- }
15923
- ),
15924
- isNarrowViewport && /* @__PURE__ */ jsx(
15925
- "button",
15926
- {
15927
- type: "button",
15928
- onClick: p.onToggleCompactToolbar,
15929
- className: cn(
15930
- "px-2 py-1 rounded text-[11px] transition-colors mr-1",
15931
- isCompactToolbarOpen ? "bg-primary/80 text-white" : "text-muted-foreground hover:text-foreground"
15932
- ),
15933
- title: t(
15934
- isCompactToolbarOpen ? "pptx.ribbon.collapseRibbon" : "pptx.ribbon.expandRibbon"
15881
+ showRibbon && /* @__PURE__ */ jsxs(
15882
+ "div",
15883
+ {
15884
+ role: "tablist",
15885
+ className: "flex items-center border-b border-border/60 px-1 max-md:overflow-x-auto max-md:scrollbar-none",
15886
+ children: [
15887
+ TOOLBAR_SECTIONS.map((s) => /* @__PURE__ */ jsx(
15888
+ "button",
15889
+ {
15890
+ type: "button",
15891
+ role: "tab",
15892
+ "aria-selected": toolbarSection === s.id,
15893
+ onClick: () => onSetToolbarSection(s.id),
15894
+ className: cn(
15895
+ "relative px-3.5 py-2 text-[12px] font-medium whitespace-nowrap transition-colors max-md:min-h-[36px] max-md:px-3",
15896
+ toolbarSection === s.id ? s.id === "file" ? "text-white bg-primary/80 rounded-sm" : "text-foreground after:absolute after:-bottom-px after:left-0 after:right-0 after:h-[2.5px] after:bg-primary" : s.id === "file" ? "text-primary hover:bg-primary/15 rounded-sm" : "text-muted-foreground hover:text-foreground hover:bg-accent/30"
15897
+ ),
15898
+ children: t(s.labelKey)
15899
+ },
15900
+ s.id
15901
+ )),
15902
+ /* @__PURE__ */ jsx("div", { className: "flex-1" }),
15903
+ /* @__PURE__ */ jsx(
15904
+ TabRowActions,
15905
+ {
15906
+ onEnterRehearsalMode: p.canEdit ? p.onEnterRehearsalMode : void 0,
15907
+ onOpenShareDialog: p.onOpenShareDialog,
15908
+ onPackageForSharing: p.onPackageForSharing
15909
+ }
15935
15910
  ),
15936
- children: t(isCompactToolbarOpen ? "pptx.ribbon.collapseRibbon" : "pptx.ribbon.expandRibbon")
15937
- }
15938
- )
15939
- ] }),
15911
+ isNarrowViewport && /* @__PURE__ */ jsx(
15912
+ "button",
15913
+ {
15914
+ type: "button",
15915
+ onClick: p.onToggleCompactToolbar,
15916
+ className: cn(
15917
+ "px-2 py-1 rounded text-[11px] transition-colors mr-1",
15918
+ isCompactToolbarOpen ? "bg-primary/80 text-white" : "text-muted-foreground hover:text-foreground"
15919
+ ),
15920
+ title: t(
15921
+ isCompactToolbarOpen ? "pptx.ribbon.collapseRibbon" : "pptx.ribbon.expandRibbon"
15922
+ ),
15923
+ children: t(isCompactToolbarOpen ? "pptx.ribbon.collapseRibbon" : "pptx.ribbon.expandRibbon")
15924
+ }
15925
+ )
15926
+ ]
15927
+ }
15928
+ ),
15940
15929
  showRibbon && /* @__PURE__ */ jsxs(
15941
15930
  "div",
15942
15931
  {
@@ -20725,6 +20714,7 @@ function SmartArtLayoutSwitcher({
20725
20714
  "button",
20726
20715
  {
20727
20716
  type: "button",
20717
+ "data-testid": `smartart-layout-${type}`,
20728
20718
  disabled: !canEdit,
20729
20719
  className: cn(
20730
20720
  "flex flex-col items-center gap-0.5 rounded border p-1.5 transition-colors",
@@ -20865,6 +20855,7 @@ function SmartArtNodeRow({
20865
20855
  {
20866
20856
  ref: inputRef,
20867
20857
  type: "text",
20858
+ "data-testid": "smartart-node-text",
20868
20859
  disabled: !canEdit,
20869
20860
  "aria-label": label,
20870
20861
  className: cn(INPUT, "flex-1 text-[11px] py-0.5"),
@@ -21081,6 +21072,7 @@ function SmartArtPropertiesPanel({
21081
21072
  "select",
21082
21073
  {
21083
21074
  disabled: !canEdit,
21075
+ "data-testid": "smartart-color-scheme",
21084
21076
  "aria-label": t("pptx.smartart.colorScheme"),
21085
21077
  className: cn(INPUT, "w-full"),
21086
21078
  value: smartArtData.colorScheme ?? "colorful1",
@@ -24426,6 +24418,7 @@ function PresentationTransitionOverlay({
24426
24418
  "div",
24427
24419
  {
24428
24420
  ref: containerRef,
24421
+ "data-pptx-transition-overlay": true,
24429
24422
  className: "pptx-react-transition-overlay absolute inset-0 pointer-events-none overflow-hidden",
24430
24423
  style: { zIndex: outgoingZIndex },
24431
24424
  children: [
@@ -24433,6 +24426,7 @@ function PresentationTransitionOverlay({
24433
24426
  /* @__PURE__ */ jsx(
24434
24427
  "div",
24435
24428
  {
24429
+ "data-pptx-transition-layer": "outgoing",
24436
24430
  className: "pptx-react-transition-layer absolute inset-0 flex items-center justify-center",
24437
24431
  style: {
24438
24432
  animation: animations.outgoing !== "none" ? animations.outgoing : void 0
@@ -26550,26 +26544,6 @@ function CanvasGuides({ guides, onDeleteGuide, onStartGuideDrag }) {
26550
26544
  guide.id
26551
26545
  )) });
26552
26546
  }
26553
- function SlideBackground({ backgroundImage, backgroundGradient }) {
26554
- return /* @__PURE__ */ jsxs(Fragment, { children: [
26555
- backgroundImage && /* @__PURE__ */ jsx(
26556
- "img",
26557
- {
26558
- src: backgroundImage,
26559
- alt: "",
26560
- className: "absolute inset-0 w-full h-full object-cover pointer-events-none",
26561
- draggable: false
26562
- }
26563
- ),
26564
- backgroundGradient && /* @__PURE__ */ jsx(
26565
- "div",
26566
- {
26567
- className: "absolute inset-0 pointer-events-none",
26568
- style: { background: backgroundGradient }
26569
- }
26570
- )
26571
- ] });
26572
- }
26573
26547
  function MarqueeOverlay({ marqueeSelectionState }) {
26574
26548
  if (!marqueeSelectionState) {
26575
26549
  return null;
@@ -27834,7 +27808,7 @@ function SlideCanvas({
27834
27808
  // pinch-zoom. View/present mode keeps the default so the slide can
27835
27809
  // still be scrolled and swipe-navigated.
27836
27810
  touchAction: isEditableCanvas ? "none" : void 0,
27837
- backgroundColor: activeSlide?.backgroundColor && activeSlide.backgroundColor !== "transparent" ? activeSlide.backgroundColor : "#ffffff"
27811
+ ...getSlideBackgroundStyle(activeSlide)
27838
27812
  },
27839
27813
  onClick: handleStageClick,
27840
27814
  onDoubleClick: handleStageDblClick,
@@ -27854,13 +27828,6 @@ function SlideCanvas({
27854
27828
  onStartGuideDrag: setDraggingGuide
27855
27829
  }
27856
27830
  ),
27857
- /* @__PURE__ */ jsx(
27858
- SlideBackground,
27859
- {
27860
- backgroundImage: activeSlide?.backgroundImage,
27861
- backgroundGradient: activeSlide?.backgroundGradient
27862
- }
27863
- ),
27864
27831
  templateElements.map((element, index) => /* @__PURE__ */ jsx(
27865
27832
  ElementRenderer,
27866
27833
  {
@@ -28168,6 +28135,7 @@ function ViewerInspector({
28168
28135
  return /* @__PURE__ */ jsx(
28169
28136
  "div",
28170
28137
  {
28138
+ "data-pptx-inspector": true,
28171
28139
  role: "complementary",
28172
28140
  "aria-label": t("pptx.inspector.properties"),
28173
28141
  className: "h-full flex-shrink-0 max-md:absolute max-md:inset-x-0 max-md:bottom-0 max-md:top-auto max-md:z-30",
@@ -29302,43 +29270,60 @@ function InsertSmartArtDialog({
29302
29270
  }
29303
29271
  ),
29304
29272
  /* @__PURE__ */ jsxs("div", { className: "flex flex-1 overflow-hidden", children: [
29305
- /* @__PURE__ */ jsx("div", { className: "w-40 border-r border-border py-2", children: CATEGORIES.map((cat) => /* @__PURE__ */ jsx(
29306
- "button",
29273
+ /* @__PURE__ */ jsx(
29274
+ "nav",
29307
29275
  {
29308
- type: "button",
29309
- onClick: () => {
29310
- setActiveCategory(cat.id);
29311
- setSelectedLayout(null);
29312
- },
29313
- className: cn(
29314
- "w-full text-left px-3 py-1.5 text-xs transition-colors",
29315
- activeCategory === cat.id ? "bg-primary text-white" : "text-foreground hover:bg-muted"
29316
- ),
29317
- children: t(cat.label)
29318
- },
29319
- cat.id
29320
- )) }),
29321
- /* @__PURE__ */ jsx("div", { className: "flex-1 p-3 overflow-y-auto", children: /* @__PURE__ */ jsx("div", { className: "grid grid-cols-3 gap-2", children: filteredPresets.map((preset) => /* @__PURE__ */ jsxs(
29322
- "button",
29276
+ className: "w-40 border-r border-border py-2",
29277
+ "aria-label": t("pptx.insertSmartArt.categories"),
29278
+ children: CATEGORIES.map((cat) => /* @__PURE__ */ jsx(
29279
+ "button",
29280
+ {
29281
+ type: "button",
29282
+ onClick: () => {
29283
+ setActiveCategory(cat.id);
29284
+ setSelectedLayout(null);
29285
+ },
29286
+ className: cn(
29287
+ "w-full text-left px-3 py-1.5 text-xs transition-colors",
29288
+ activeCategory === cat.id ? "bg-primary text-white" : "text-foreground hover:bg-muted"
29289
+ ),
29290
+ children: t(cat.label)
29291
+ },
29292
+ cat.id
29293
+ ))
29294
+ }
29295
+ ),
29296
+ /* @__PURE__ */ jsx("div", { className: "flex-1 p-3 overflow-y-auto", children: /* @__PURE__ */ jsx(
29297
+ "div",
29323
29298
  {
29324
- type: "button",
29325
- onClick: () => setSelectedLayout(preset.layout),
29326
- onDoubleClick: () => {
29327
- setSelectedLayout(preset.layout);
29328
- onInsert(preset.layout, preset.defaultItems);
29329
- onClose();
29330
- },
29331
- className: cn(
29332
- "flex flex-col items-center gap-1 p-2 rounded border transition-colors",
29333
- selectedLayout === preset.layout ? "border-primary bg-primary/20" : "border-border hover:border-border hover:bg-muted/50"
29334
- ),
29335
- children: [
29336
- /* @__PURE__ */ jsx("div", { className: "w-16 h-12 flex items-center justify-center bg-muted rounded", children: getPreviewForLayout(preset.layout) }),
29337
- /* @__PURE__ */ jsx("span", { className: "text-[10px] text-foreground text-center leading-tight", children: t(preset.labelKey) })
29338
- ]
29339
- },
29340
- preset.layout
29341
- )) }) })
29299
+ className: "grid grid-cols-3 gap-2",
29300
+ role: "listbox",
29301
+ "aria-label": t("pptx.insertSmartArt.layouts"),
29302
+ children: filteredPresets.map((preset) => /* @__PURE__ */ jsxs(
29303
+ "button",
29304
+ {
29305
+ type: "button",
29306
+ role: "option",
29307
+ "aria-selected": selectedLayout === preset.layout,
29308
+ onClick: () => setSelectedLayout(preset.layout),
29309
+ onDoubleClick: () => {
29310
+ setSelectedLayout(preset.layout);
29311
+ onInsert(preset.layout, preset.defaultItems);
29312
+ onClose();
29313
+ },
29314
+ className: cn(
29315
+ "flex flex-col items-center gap-1 p-2 rounded border transition-colors",
29316
+ selectedLayout === preset.layout ? "border-primary bg-primary/20" : "border-border hover:border-border hover:bg-muted/50"
29317
+ ),
29318
+ children: [
29319
+ /* @__PURE__ */ jsx("div", { className: "w-16 h-12 flex items-center justify-center bg-muted rounded", children: getPreviewForLayout(preset.layout) }),
29320
+ /* @__PURE__ */ jsx("span", { className: "text-[10px] text-foreground text-center leading-tight", children: t(preset.labelKey) })
29321
+ ]
29322
+ },
29323
+ preset.layout
29324
+ ))
29325
+ }
29326
+ ) })
29342
29327
  ] }),
29343
29328
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-2 px-4 py-3 border-t border-border", children: [
29344
29329
  /* @__PURE__ */ jsx(
@@ -31276,6 +31261,7 @@ function MobileBottomBar({
31276
31261
  active ? "text-primary" : "text-muted-foreground hover:text-foreground"
31277
31262
  ),
31278
31263
  "aria-pressed": active,
31264
+ "aria-label": key === "notes" ? t("pptx.statusBar.toggleNotes") : void 0,
31279
31265
  children: [
31280
31266
  /* @__PURE__ */ jsx(Icon, { className: "w-5 h-5" }),
31281
31267
  /* @__PURE__ */ jsx("span", { children: t(label) }),
@@ -31611,6 +31597,7 @@ var PowerPointViewer = forwardRef(
31611
31597
  function PowerPointViewer2(props, ref) {
31612
31598
  const {
31613
31599
  content: incomingContent,
31600
+ fonts = [],
31614
31601
  filePath,
31615
31602
  fileName,
31616
31603
  canEdit = false,
@@ -31630,6 +31617,17 @@ var PowerPointViewer = forwardRef(
31630
31617
  shareDefaults,
31631
31618
  smartArt3D = false
31632
31619
  } = props;
31620
+ useEffect(() => {
31621
+ const css = buildUserFontFaceStyles(fonts);
31622
+ if (!css) {
31623
+ return;
31624
+ }
31625
+ const style = document.createElement("style");
31626
+ style.dataset.pptxUserFonts = "true";
31627
+ style.textContent = css;
31628
+ document.head.appendChild(style);
31629
+ return () => style.remove();
31630
+ }, [fonts]);
31633
31631
  const themeStyle = useThemeStyle(theme);
31634
31632
  const [content, setContent] = useState(incomingContent);
31635
31633
  useEffect(() => {
Binary file
Binary file