@arbidocs/blocks 0.5.120 → 0.5.121
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ClippingMediaViewer-B6WG7Q64.cjs +156 -0
- package/dist/ClippingMediaViewer-B6WG7Q64.cjs.map +1 -0
- package/dist/ClippingPdfViewer-6GCVTV3V.cjs +79 -0
- package/dist/ClippingPdfViewer-6GCVTV3V.cjs.map +1 -0
- package/dist/{ConnectedCallDock-WER7R222.cjs → ConnectedCallDock-DC5V5OUJ.cjs} +25 -23
- package/dist/ConnectedCallDock-DC5V5OUJ.cjs.map +1 -0
- package/dist/{ConnectedCallRoom-T7OBQTYP.cjs → ConnectedCallRoom-FQLXWTFB.cjs} +18 -16
- package/dist/{ConnectedCallRoom-T7OBQTYP.cjs.map → ConnectedCallRoom-FQLXWTFB.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-SGE4R3M4.cjs → ConnectedNativeDocxComparison-4Q5S7VLD.cjs} +17 -17
- package/dist/{ConnectedNativeDocxComparison-SGE4R3M4.cjs.map → ConnectedNativeDocxComparison-4Q5S7VLD.cjs.map} +1 -1
- package/dist/ConnectedPresentation-4HLDZDWV.cjs +183 -0
- package/dist/ConnectedPresentation-4HLDZDWV.cjs.map +1 -0
- package/dist/{ConnectedProductionSetDialog-LHB4VQWC.cjs → ConnectedProductionSetDialog-4EAY6KAZ.cjs} +3 -3
- package/dist/{ConnectedProductionSetDialog-LHB4VQWC.cjs.map → ConnectedProductionSetDialog-4EAY6KAZ.cjs.map} +1 -1
- package/dist/ConnectedSlidesTab-7QDE2CZD.cjs +234 -0
- package/dist/ConnectedSlidesTab-7QDE2CZD.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-6MCLJRIT.cjs → ConnectedStreamedWordArtifact-FFOQJBOI.cjs} +17 -17
- package/dist/{ConnectedStreamedWordArtifact-6MCLJRIT.cjs.map → ConnectedStreamedWordArtifact-FFOQJBOI.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-BPIAJJED.cjs → DocumentReviewCard-SNWVEZ7S.cjs} +17 -16
- package/dist/DocumentReviewCard-SNWVEZ7S.cjs.map +1 -0
- package/dist/{FilesViewerDialog-67WK3TZC.cjs → FilesViewerDialog-IZI63FOV.cjs} +52 -45
- package/dist/FilesViewerDialog-IZI63FOV.cjs.map +1 -0
- package/dist/{GridViewImpl-ZMJJWTOM.cjs → GridViewImpl-LTYET77Q.cjs} +3 -3
- package/dist/GridViewImpl-LTYET77Q.cjs.map +1 -0
- package/dist/{WorkspaceTableView-J3C6VH4T.cjs → WorkspaceTableView-TEIRB6VJ.cjs} +11 -10
- package/dist/WorkspaceTableView-TEIRB6VJ.cjs.map +1 -0
- package/dist/agents/index.cjs +297 -297
- package/dist/{ai-IM4A23YT.cjs → ai-KBYNRNZ6.cjs} +28 -26
- package/dist/ai-KBYNRNZ6.cjs.map +1 -0
- package/dist/calls/connected/CallControls.d.ts +2 -0
- package/dist/calls/connected/CallControls.js +71 -9
- package/dist/calls/connected/CallControls.js.map +2 -2
- package/dist/calls/connected/ShareDocumentDialog.d.ts +14 -0
- package/dist/calls/connected/ShareDocumentDialog.js +77 -0
- package/dist/calls/connected/ShareDocumentDialog.js.map +7 -0
- package/dist/calls/index.cjs +121 -121
- package/dist/chat/index.cjs +9 -8
- package/dist/{chunk-T23UTIRI.cjs → chunk-2PZT3J34.cjs} +6 -6
- package/dist/{chunk-T23UTIRI.cjs.map → chunk-2PZT3J34.cjs.map} +1 -1
- package/dist/{chunk-SGYSDABK.cjs → chunk-2W5E62EY.cjs} +6 -6
- package/dist/{chunk-SGYSDABK.cjs.map → chunk-2W5E62EY.cjs.map} +1 -1
- package/dist/{chunk-TDO5UWXF.cjs → chunk-3SCNXNHI.cjs} +5 -5
- package/dist/{chunk-TDO5UWXF.cjs.map → chunk-3SCNXNHI.cjs.map} +1 -1
- package/dist/{chunk-KTQOGT2L.cjs → chunk-474GPLCM.cjs} +7 -7
- package/dist/{chunk-KTQOGT2L.cjs.map → chunk-474GPLCM.cjs.map} +1 -1
- package/dist/{chunk-TP5PGWIO.cjs → chunk-4IOYQLKG.cjs} +3 -3
- package/dist/{chunk-TP5PGWIO.cjs.map → chunk-4IOYQLKG.cjs.map} +1 -1
- package/dist/{chunk-NY3YUCOW.cjs → chunk-4NPCDS2X.cjs} +3 -3
- package/dist/{chunk-NY3YUCOW.cjs.map → chunk-4NPCDS2X.cjs.map} +1 -1
- package/dist/{chunk-HA66DHW6.cjs → chunk-4RBQ44RY.cjs} +28 -28
- package/dist/chunk-4RBQ44RY.cjs.map +1 -0
- package/dist/{chunk-BQ5RIWWT.cjs → chunk-4VZZWYEC.cjs} +3 -3
- package/dist/{chunk-BQ5RIWWT.cjs.map → chunk-4VZZWYEC.cjs.map} +1 -1
- package/dist/{chunk-BP3IJ34D.cjs → chunk-52KGMAO5.cjs} +15 -15
- package/dist/{chunk-BP3IJ34D.cjs.map → chunk-52KGMAO5.cjs.map} +1 -1
- package/dist/{chunk-5IZFSAEZ.cjs → chunk-5534FYXP.cjs} +4 -4
- package/dist/{chunk-5IZFSAEZ.cjs.map → chunk-5534FYXP.cjs.map} +1 -1
- package/dist/chunk-5GCCUXMT.cjs +63 -0
- package/dist/chunk-5GCCUXMT.cjs.map +1 -0
- package/dist/chunk-5LTIZ44D.cjs +95 -0
- package/dist/chunk-5LTIZ44D.cjs.map +1 -0
- package/dist/{chunk-DFBDQKGE.cjs → chunk-734NPQNR.cjs} +4 -4
- package/dist/{chunk-DFBDQKGE.cjs.map → chunk-734NPQNR.cjs.map} +1 -1
- package/dist/{chunk-X36UR4A7.cjs → chunk-7VUJGHMY.cjs} +323 -96
- package/dist/chunk-7VUJGHMY.cjs.map +1 -0
- package/dist/chunk-AFQTQC7A.cjs +35 -0
- package/dist/chunk-AFQTQC7A.cjs.map +1 -0
- package/dist/{chunk-YYSBWMDJ.cjs → chunk-AY6EZSZB.cjs} +4 -4
- package/dist/{chunk-YYSBWMDJ.cjs.map → chunk-AY6EZSZB.cjs.map} +1 -1
- package/dist/{chunk-BUVIBHFU.cjs → chunk-BVAT4EVC.cjs} +38 -38
- package/dist/chunk-BVAT4EVC.cjs.map +1 -0
- package/dist/{chunk-ECLUFKYR.cjs → chunk-C2OICDMI.cjs} +10 -10
- package/dist/{chunk-ECLUFKYR.cjs.map → chunk-C2OICDMI.cjs.map} +1 -1
- package/dist/{chunk-CPR6EHG7.cjs → chunk-DR2AH7JL.cjs} +179 -55
- package/dist/chunk-DR2AH7JL.cjs.map +1 -0
- package/dist/{chunk-NJCK6V6U.cjs → chunk-EATIFPKP.cjs} +4 -60
- package/dist/chunk-EATIFPKP.cjs.map +1 -0
- package/dist/{chunk-B3LZITVF.cjs → chunk-EHP6OH5D.cjs} +11 -451
- package/dist/chunk-EHP6OH5D.cjs.map +1 -0
- package/dist/{chunk-775S43W7.cjs → chunk-ENGL7P3I.cjs} +31 -31
- package/dist/{chunk-775S43W7.cjs.map → chunk-ENGL7P3I.cjs.map} +1 -1
- package/dist/{chunk-VZCPMXWC.cjs → chunk-FKFQCK3C.cjs} +4 -4
- package/dist/{chunk-VZCPMXWC.cjs.map → chunk-FKFQCK3C.cjs.map} +1 -1
- package/dist/{chunk-6UTKM5AB.cjs → chunk-GKVE5JGB.cjs} +76 -76
- package/dist/chunk-GKVE5JGB.cjs.map +1 -0
- package/dist/{chunk-Q6CLWOP2.cjs → chunk-GPX5VC57.cjs} +50 -50
- package/dist/{chunk-Q6CLWOP2.cjs.map → chunk-GPX5VC57.cjs.map} +1 -1
- package/dist/{chunk-WAV762GP.cjs → chunk-GQXPNIRE.cjs} +6 -6
- package/dist/{chunk-WAV762GP.cjs.map → chunk-GQXPNIRE.cjs.map} +1 -1
- package/dist/chunk-GX2EBMJW.cjs +133 -0
- package/dist/chunk-GX2EBMJW.cjs.map +1 -0
- package/dist/{chunk-7OPOPYV6.cjs → chunk-H5OLHP2U.cjs} +3 -3
- package/dist/{chunk-7OPOPYV6.cjs.map → chunk-H5OLHP2U.cjs.map} +1 -1
- package/dist/chunk-HYUKPHCT.cjs +66 -0
- package/dist/chunk-HYUKPHCT.cjs.map +1 -0
- package/dist/{chunk-NLSWDP42.cjs → chunk-JQLWKNJO.cjs} +22 -12
- package/dist/chunk-JQLWKNJO.cjs.map +1 -0
- package/dist/{chunk-CKCG4NDB.cjs → chunk-JZEYHDWJ.cjs} +75 -75
- package/dist/{chunk-CKCG4NDB.cjs.map → chunk-JZEYHDWJ.cjs.map} +1 -1
- package/dist/{chunk-PGJYD67F.cjs → chunk-KNGZZC4O.cjs} +7 -6
- package/dist/chunk-KNGZZC4O.cjs.map +1 -0
- package/dist/{chunk-W6INT5GS.cjs → chunk-KP5AITQ4.cjs} +10 -10
- package/dist/{chunk-W6INT5GS.cjs.map → chunk-KP5AITQ4.cjs.map} +1 -1
- package/dist/{chunk-YYPZOEED.cjs → chunk-LHWOKOMP.cjs} +23 -2
- package/dist/chunk-LHWOKOMP.cjs.map +1 -0
- package/dist/{chunk-WXUU3COI.cjs → chunk-MZ2KZXNU.cjs} +3 -3
- package/dist/{chunk-WXUU3COI.cjs.map → chunk-MZ2KZXNU.cjs.map} +1 -1
- package/dist/chunk-NAJN32MF.cjs +154 -0
- package/dist/chunk-NAJN32MF.cjs.map +1 -0
- package/dist/{chunk-557MJ4IH.cjs → chunk-NLOETJCB.cjs} +17 -154
- package/dist/chunk-NLOETJCB.cjs.map +1 -0
- package/dist/{chunk-4XJEHKVZ.cjs → chunk-PIYYBPHH.cjs} +4 -4
- package/dist/{chunk-4XJEHKVZ.cjs.map → chunk-PIYYBPHH.cjs.map} +1 -1
- package/dist/chunk-Q3XJUXID.cjs +4774 -0
- package/dist/chunk-Q3XJUXID.cjs.map +1 -0
- package/dist/{chunk-325GVZE6.cjs → chunk-Q6DQGGP4.cjs} +3 -3
- package/dist/{chunk-325GVZE6.cjs.map → chunk-Q6DQGGP4.cjs.map} +1 -1
- package/dist/chunk-QFXILJMJ.cjs +458 -0
- package/dist/chunk-QFXILJMJ.cjs.map +1 -0
- package/dist/{chunk-QQWHG3KF.cjs → chunk-RYVZDFVO.cjs} +5 -5
- package/dist/{chunk-QQWHG3KF.cjs.map → chunk-RYVZDFVO.cjs.map} +1 -1
- package/dist/{chunk-EOG6OT5I.cjs → chunk-TXP2N3DC.cjs} +4 -4
- package/dist/{chunk-EOG6OT5I.cjs.map → chunk-TXP2N3DC.cjs.map} +1 -1
- package/dist/{chunk-KXIRVKCJ.cjs → chunk-UUENH4BJ.cjs} +3 -3
- package/dist/{chunk-KXIRVKCJ.cjs.map → chunk-UUENH4BJ.cjs.map} +1 -1
- package/dist/chunk-VJ5ZLRBD.cjs +27 -0
- package/dist/chunk-VJ5ZLRBD.cjs.map +1 -0
- package/dist/{chunk-3GWWOYGS.cjs → chunk-W6B3RYTX.cjs} +4 -4
- package/dist/{chunk-3GWWOYGS.cjs.map → chunk-W6B3RYTX.cjs.map} +1 -1
- package/dist/chunk-WOOOMTTA.cjs +19 -0
- package/dist/chunk-WOOOMTTA.cjs.map +1 -0
- package/dist/{chunk-CJYWHUZR.cjs → chunk-XCKHOXRP.cjs} +4 -4
- package/dist/{chunk-CJYWHUZR.cjs.map → chunk-XCKHOXRP.cjs.map} +1 -1
- package/dist/{chunk-6WMMZLEV.cjs → chunk-XJEXFEWG.cjs} +2 -27
- package/dist/chunk-XJEXFEWG.cjs.map +1 -0
- package/dist/chunk-XK4TVJKD.cjs +73 -0
- package/dist/chunk-XK4TVJKD.cjs.map +1 -0
- package/dist/chunk-XTR26TNE.cjs +1358 -0
- package/dist/chunk-XTR26TNE.cjs.map +1 -0
- package/dist/{chunk-E7TE2WVT.cjs → chunk-ZVEW3JBT.cjs} +3 -3
- package/dist/{chunk-E7TE2WVT.cjs.map → chunk-ZVEW3JBT.cjs.map} +1 -1
- package/dist/collaboration/index.cjs +70 -70
- package/dist/components/ZoomSlider.d.ts +25 -0
- package/dist/components/ZoomSlider.js +59 -0
- package/dist/components/ZoomSlider.js.map +7 -0
- package/dist/connect/docx.cjs +20 -20
- package/dist/connect/index.cjs +1150 -1232
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/viewer.cjs +40 -34
- package/dist/connection/ai.d.ts +1 -1
- package/dist/connection/files/ConnectedNewFileMenu.d.ts +2 -1
- package/dist/connection/files/ConnectedNewFileMenu.js +9 -3
- package/dist/connection/files/ConnectedNewFileMenu.js.map +2 -2
- package/dist/connection/files/explorer/ConnectedFilesExplorer.js +1 -1
- package/dist/connection/files/explorer/ConnectedFilesExplorer.js.map +2 -2
- package/dist/connection/files/explorer/FileTiles.js +1 -1
- package/dist/connection/files/explorer/FileTiles.js.map +2 -2
- package/dist/connection/files/fields/documentField.js +1 -1
- package/dist/connection/files/fields/documentField.js.map +2 -2
- package/dist/connection/files/grid/documentColumns.js +1 -1
- package/dist/connection/files/grid/documentColumns.js.map +2 -2
- package/dist/connection/files/page/DocumentsFilterBarActions.js +17 -28
- package/dist/connection/files/page/DocumentsFilterBarActions.js.map +2 -2
- package/dist/connection/mail/useMailboxDefaults.js +1 -1
- package/dist/connection/mail/useMailboxDefaults.js.map +2 -2
- package/dist/connection/panels/useSessionPanelMode.js +3 -2
- package/dist/connection/panels/useSessionPanelMode.js.map +2 -2
- package/dist/connection/presentation/ClippingMediaViewer.d.ts +12 -0
- package/dist/connection/presentation/ClippingMediaViewer.js +153 -0
- package/dist/connection/presentation/ClippingMediaViewer.js.map +7 -0
- package/dist/connection/presentation/ClippingPdfViewer.d.ts +22 -0
- package/dist/connection/presentation/ClippingPdfViewer.js +75 -0
- package/dist/connection/presentation/ClippingPdfViewer.js.map +7 -0
- package/dist/connection/presentation/ConnectedPresentation.d.ts +12 -0
- package/dist/connection/presentation/ConnectedPresentation.js +100 -0
- package/dist/connection/presentation/ConnectedPresentation.js.map +7 -0
- package/dist/connection/presentation/ConnectedSlidesTab.d.ts +20 -0
- package/dist/connection/presentation/ConnectedSlidesTab.js +220 -0
- package/dist/connection/presentation/ConnectedSlidesTab.js.map +7 -0
- package/dist/connection/presentation/CropClipDialog.d.ts +11 -0
- package/dist/connection/presentation/CropClipDialog.js +86 -0
- package/dist/connection/presentation/CropClipDialog.js.map +7 -0
- package/dist/connection/presentation/GenerateTile.d.ts +4 -0
- package/dist/connection/presentation/GenerateTile.js +24 -0
- package/dist/connection/presentation/GenerateTile.js.map +7 -0
- package/dist/connection/presentation/LabelColumnMenu.d.ts +8 -0
- package/dist/connection/presentation/LabelColumnMenu.js +38 -0
- package/dist/connection/presentation/LabelColumnMenu.js.map +7 -0
- package/dist/connection/presentation/PresentationDialogs.d.ts +39 -0
- package/dist/connection/presentation/PresentationDialogs.js +295 -0
- package/dist/connection/presentation/PresentationDialogs.js.map +7 -0
- package/dist/connection/presentation/PresentationFileCard.d.ts +10 -0
- package/dist/connection/presentation/PresentationFileCard.js +35 -0
- package/dist/connection/presentation/PresentationFileCard.js.map +7 -0
- package/dist/connection/presentation/PresentationPill.d.ts +8 -0
- package/dist/connection/presentation/PresentationPill.js +44 -0
- package/dist/connection/presentation/PresentationPill.js.map +7 -0
- package/dist/connection/presentation/PresentationSlot.d.ts +7 -0
- package/dist/connection/presentation/PresentationSlot.js +35 -0
- package/dist/connection/presentation/PresentationSlot.js.map +7 -0
- package/dist/connection/presentation/requests.d.ts +16 -0
- package/dist/connection/presentation/requests.js +20 -0
- package/dist/connection/presentation/requests.js.map +7 -0
- package/dist/connection/presentation/useImageGeneration.d.ts +11 -0
- package/dist/connection/presentation/useImageGeneration.js +66 -0
- package/dist/connection/presentation/useImageGeneration.js.map +7 -0
- package/dist/connection/presentation/useLabelColumns.d.ts +15 -0
- package/dist/connection/presentation/useLabelColumns.js +33 -0
- package/dist/connection/presentation/useLabelColumns.js.map +7 -0
- package/dist/connection/presentation/usePresentationController.d.ts +15 -0
- package/dist/connection/presentation/usePresentationController.js +118 -0
- package/dist/connection/presentation/usePresentationController.js.map +7 -0
- package/dist/connection/presentation/usePresentationFiles.d.ts +44 -0
- package/dist/connection/presentation/usePresentationFiles.js +307 -0
- package/dist/connection/presentation/usePresentationFiles.js.map +7 -0
- package/dist/connection/presentation/useViewerClipping.d.ts +14 -0
- package/dist/connection/presentation/useViewerClipping.js +18 -0
- package/dist/connection/presentation/useViewerClipping.js.map +7 -0
- package/dist/connection/shell/ConnectedAppShell.js +5 -1
- package/dist/connection/shell/ConnectedAppShell.js.map +2 -2
- package/dist/connection/viewer/CleanViewControl.d.ts +8 -0
- package/dist/connection/viewer/CleanViewControl.js +76 -0
- package/dist/connection/viewer/CleanViewControl.js.map +7 -0
- package/dist/connection/viewer/ConnectedDocumentViewer.js +28 -29
- package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
- package/dist/connection/viewer/ViewerCropModal.d.ts +5 -0
- package/dist/connection/viewer/ViewerCropModal.js +22 -0
- package/dist/connection/viewer/ViewerCropModal.js.map +7 -0
- package/dist/connection/viewer/ViewerPdfPane.d.ts +3 -1
- package/dist/connection/viewer/ViewerPdfPane.js +37 -0
- package/dist/connection/viewer/ViewerPdfPane.js.map +2 -2
- package/dist/connection/viewer/drafts.js +6 -4
- package/dist/connection/viewer/drafts.js.map +2 -2
- package/dist/connection/viewer/shareDocument.d.ts +11 -0
- package/dist/connection/viewer/shareDocument.js +11 -0
- package/dist/connection/viewer/shareDocument.js.map +7 -0
- package/dist/connection/viewer/slidesTabChunk.d.ts +2 -0
- package/dist/connection/viewer/slidesTabChunk.js +9 -0
- package/dist/connection/viewer/slidesTabChunk.js.map +7 -0
- package/dist/connection/viewer/useCleanView.d.ts +14 -0
- package/dist/connection/viewer/useCleanView.js +29 -0
- package/dist/connection/viewer/useCleanView.js.map +7 -0
- package/dist/connection/viewer/useViewedDocument.d.ts +1 -0
- package/dist/connection/viewer/useViewedDocument.js +9 -1
- package/dist/connection/viewer/useViewedDocument.js.map +2 -2
- package/dist/connection/viewer/useViewerTabs.js +18 -4
- package/dist/connection/viewer/useViewerTabs.js.map +2 -2
- package/dist/connection/workflows/ConnectedWorkflowStart.d.ts +14 -2
- package/dist/connection/workflows/ConnectedWorkflowStart.js +5 -2
- package/dist/connection/workflows/ConnectedWorkflowStart.js.map +2 -2
- package/dist/dashboards/index.cjs +1 -1
- package/dist/databases/index.cjs +49 -49
- package/dist/document-tools/DocumentToolButtons.d.ts +2 -0
- package/dist/document-tools/DocumentToolButtons.js +22 -1
- package/dist/document-tools/DocumentToolButtons.js.map +2 -2
- package/dist/document-tools/index.cjs +16 -12
- package/dist/document-tools/index.d.ts +1 -1
- package/dist/document-tools/index.js +2 -0
- package/dist/document-tools/index.js.map +2 -2
- package/dist/embed/index.cjs +41 -39
- package/dist/files/GridViewImpl.js +1 -1
- package/dist/files/GridViewImpl.js.map +2 -2
- package/dist/files/ViewerChrome.d.ts +5 -1
- package/dist/files/ViewerChrome.js +16 -6
- package/dist/files/ViewerChrome.js.map +2 -2
- package/dist/files/index.cjs +225 -225
- package/dist/files/navigator/DocumentSearchList.js +1 -1
- package/dist/files/navigator/DocumentSearchList.js.map +2 -2
- package/dist/index.cjs +1666 -1664
- package/dist/index.cjs.map +1 -1
- package/dist/presentation/BoxActionBar.d.ts +11 -0
- package/dist/presentation/BoxActionBar.js +182 -0
- package/dist/presentation/BoxActionBar.js.map +7 -0
- package/dist/presentation/ClipActionBar.d.ts +26 -0
- package/dist/presentation/ClipActionBar.js +103 -0
- package/dist/presentation/ClipActionBar.js.map +7 -0
- package/dist/presentation/ClipCaptureOverlay.d.ts +14 -0
- package/dist/presentation/ClipCaptureOverlay.js +69 -0
- package/dist/presentation/ClipCaptureOverlay.js.map +7 -0
- package/dist/presentation/ClipImage.d.ts +21 -0
- package/dist/presentation/ClipImage.js +119 -0
- package/dist/presentation/ClipImage.js.map +7 -0
- package/dist/presentation/ClipTray.d.ts +11 -0
- package/dist/presentation/ClipTray.js +152 -0
- package/dist/presentation/ClipTray.js.map +7 -0
- package/dist/presentation/ClipViewControls.d.ts +11 -0
- package/dist/presentation/ClipViewControls.js +142 -0
- package/dist/presentation/ClipViewControls.js.map +7 -0
- package/dist/presentation/DesignMenu.d.ts +8 -0
- package/dist/presentation/DesignMenu.js +199 -0
- package/dist/presentation/DesignMenu.js.map +7 -0
- package/dist/presentation/LayoutMenu.d.ts +17 -0
- package/dist/presentation/LayoutMenu.js +122 -0
- package/dist/presentation/LayoutMenu.js.map +7 -0
- package/dist/presentation/MediaClip.d.ts +15 -0
- package/dist/presentation/MediaClip.js +67 -0
- package/dist/presentation/MediaClip.js.map +7 -0
- package/dist/presentation/Notice.d.ts +6 -0
- package/dist/presentation/Notice.js +43 -0
- package/dist/presentation/Notice.js.map +7 -0
- package/dist/presentation/PresentationStage.d.ts +32 -0
- package/dist/presentation/PresentationStage.js +232 -0
- package/dist/presentation/PresentationStage.js.map +7 -0
- package/dist/presentation/PresenterView.d.ts +16 -0
- package/dist/presentation/PresenterView.js +69 -0
- package/dist/presentation/PresenterView.js.map +7 -0
- package/dist/presentation/SlideDecor.d.ts +25 -0
- package/dist/presentation/SlideDecor.js +189 -0
- package/dist/presentation/SlideDecor.js.map +7 -0
- package/dist/presentation/SlidesEditor.d.ts +25 -0
- package/dist/presentation/SlidesEditor.js +359 -0
- package/dist/presentation/SlidesEditor.js.map +7 -0
- package/dist/presentation/StageBox.d.ts +30 -0
- package/dist/presentation/StageBox.js +281 -0
- package/dist/presentation/StageBox.js.map +7 -0
- package/dist/presentation/StageItem.d.ts +37 -0
- package/dist/presentation/StageItem.js +211 -0
- package/dist/presentation/StageItem.js.map +7 -0
- package/dist/presentation/box-style.d.ts +6 -0
- package/dist/presentation/box-style.js +19 -0
- package/dist/presentation/box-style.js.map +7 -0
- package/dist/presentation/boxes.d.ts +105 -0
- package/dist/presentation/boxes.js +103 -0
- package/dist/presentation/boxes.js.map +7 -0
- package/dist/presentation/draw-boxes.d.ts +8 -0
- package/dist/presentation/draw-boxes.js +130 -0
- package/dist/presentation/draw-boxes.js.map +7 -0
- package/dist/presentation/export-boxes.d.ts +10 -0
- package/dist/presentation/export-boxes.js +74 -0
- package/dist/presentation/export-boxes.js.map +7 -0
- package/dist/presentation/export-pptx.d.ts +16 -0
- package/dist/presentation/export-pptx.js +194 -0
- package/dist/presentation/export-pptx.js.map +7 -0
- package/dist/presentation/import-pptx.d.ts +35 -0
- package/dist/presentation/import-pptx.js +659 -0
- package/dist/presentation/import-pptx.js.map +7 -0
- package/dist/presentation/merge-outside-edits.d.ts +12 -0
- package/dist/presentation/merge-outside-edits.js +35 -0
- package/dist/presentation/merge-outside-edits.js.map +7 -0
- package/dist/presentation/model.d.ts +201 -0
- package/dist/presentation/model.js +271 -0
- package/dist/presentation/model.js.map +7 -0
- package/dist/presentation/panel-id.d.ts +34 -0
- package/dist/presentation/panel-id.js +24 -0
- package/dist/presentation/panel-id.js.map +7 -0
- package/dist/presentation/persistence.d.ts +121 -0
- package/dist/presentation/persistence.js +141 -0
- package/dist/presentation/persistence.js.map +7 -0
- package/dist/presentation/pptx-data.d.ts +22 -0
- package/dist/presentation/pptx-data.js +83 -0
- package/dist/presentation/pptx-data.js.map +7 -0
- package/dist/presentation/pptx-xml.d.ts +90 -0
- package/dist/presentation/pptx-xml.js +333 -0
- package/dist/presentation/pptx-xml.js.map +7 -0
- package/dist/presentation/render-slides.d.ts +58 -0
- package/dist/presentation/render-slides.js +309 -0
- package/dist/presentation/render-slides.js.map +7 -0
- package/dist/presentation/saved-boxes.d.ts +11 -0
- package/dist/presentation/saved-boxes.js +80 -0
- package/dist/presentation/saved-boxes.js.map +7 -0
- package/dist/presentation/slide-layout.d.ts +54 -0
- package/dist/presentation/slide-layout.js +117 -0
- package/dist/presentation/slide-layout.js.map +7 -0
- package/dist/presentation/stage-videos.d.ts +5 -0
- package/dist/presentation/stage-videos.js +19 -0
- package/dist/presentation/stage-videos.js.map +7 -0
- package/dist/presentation/store.d.ts +203 -0
- package/dist/presentation/store.js +429 -0
- package/dist/presentation/store.js.map +7 -0
- package/dist/presentation/theme.d.ts +102 -0
- package/dist/presentation/theme.js +276 -0
- package/dist/presentation/theme.js.map +7 -0
- package/dist/presentation/useClipDrag.d.ts +26 -0
- package/dist/presentation/useClipDrag.js +65 -0
- package/dist/presentation/useClipDrag.js.map +7 -0
- package/dist/presentation/useObjectUrl.d.ts +6 -0
- package/dist/presentation/useObjectUrl.js +15 -0
- package/dist/presentation/useObjectUrl.js.map +7 -0
- package/dist/presentation/usePresenterKeys.d.ts +13 -0
- package/dist/presentation/usePresenterKeys.js +62 -0
- package/dist/presentation/usePresenterKeys.js.map +7 -0
- package/dist/settings/index.cjs +151 -150
- package/dist/shell/PanelPortal.js +1 -0
- package/dist/shell/PanelPortal.js.map +2 -2
- package/dist/shell/index.cjs +112 -110
- package/dist/shell/panel-windows.d.ts +2 -0
- package/dist/shell/panel-windows.js +7 -2
- package/dist/shell/panel-windows.js.map +2 -2
- package/dist/studio/index.cjs +28 -26
- package/dist/studio/index.cjs.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/workflow-canvas/index.cjs +55 -54
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +6 -5
- package/dist/ConnectedCallDock-WER7R222.cjs.map +0 -1
- package/dist/DocumentReviewCard-BPIAJJED.cjs.map +0 -1
- package/dist/FilesViewerDialog-67WK3TZC.cjs.map +0 -1
- package/dist/GridViewImpl-ZMJJWTOM.cjs.map +0 -1
- package/dist/WorkspaceTableView-J3C6VH4T.cjs.map +0 -1
- package/dist/ai-IM4A23YT.cjs.map +0 -1
- package/dist/chunk-557MJ4IH.cjs.map +0 -1
- package/dist/chunk-6UTKM5AB.cjs.map +0 -1
- package/dist/chunk-6WMMZLEV.cjs.map +0 -1
- package/dist/chunk-B3LZITVF.cjs.map +0 -1
- package/dist/chunk-BUVIBHFU.cjs.map +0 -1
- package/dist/chunk-CPR6EHG7.cjs.map +0 -1
- package/dist/chunk-HA66DHW6.cjs.map +0 -1
- package/dist/chunk-NJCK6V6U.cjs.map +0 -1
- package/dist/chunk-NLSWDP42.cjs.map +0 -1
- package/dist/chunk-PGJYD67F.cjs.map +0 -1
- package/dist/chunk-X36UR4A7.cjs.map +0 -1
- package/dist/chunk-YYPZOEED.cjs.map +0 -1
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const NS = {
|
|
3
|
+
a: "http://schemas.openxmlformats.org/drawingml/2006/main",
|
|
4
|
+
p: "http://schemas.openxmlformats.org/presentationml/2006/main",
|
|
5
|
+
r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships"
|
|
6
|
+
};
|
|
7
|
+
const EMU_PER_POINT = 12700;
|
|
8
|
+
function kids(element, name) {
|
|
9
|
+
if (!element) return [];
|
|
10
|
+
const found = [];
|
|
11
|
+
for (let child = element.firstElementChild; child; child = child.nextElementSibling) {
|
|
12
|
+
if (!name || child.localName === name) found.push(child);
|
|
13
|
+
}
|
|
14
|
+
return found;
|
|
15
|
+
}
|
|
16
|
+
function kid(element, name) {
|
|
17
|
+
if (!element) return null;
|
|
18
|
+
for (let child = element.firstElementChild; child; child = child.nextElementSibling) {
|
|
19
|
+
if (child.localName === name) return child;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
function path(element, ...names) {
|
|
24
|
+
let at = element ?? null;
|
|
25
|
+
for (const name of names) at = kid(at, name);
|
|
26
|
+
return at;
|
|
27
|
+
}
|
|
28
|
+
function numAttr(element, name, fallback = 0) {
|
|
29
|
+
const value = element?.getAttribute(name);
|
|
30
|
+
if (value === null || value === void 0 || value === "") return fallback;
|
|
31
|
+
const parsed = Number(value);
|
|
32
|
+
return Number.isFinite(parsed) ? parsed : fallback;
|
|
33
|
+
}
|
|
34
|
+
const relAttr = (element, name) => element?.getAttributeNS(NS.r, name) ?? element?.getAttribute(`r:${name}`) ?? null;
|
|
35
|
+
const boolAttr = (element, name) => {
|
|
36
|
+
const value = element?.getAttribute(name);
|
|
37
|
+
if (value === null || value === void 0) return void 0;
|
|
38
|
+
return value === "1" || value === "true";
|
|
39
|
+
};
|
|
40
|
+
class Package {
|
|
41
|
+
constructor(zip) {
|
|
42
|
+
this.zip = zip;
|
|
43
|
+
}
|
|
44
|
+
zip;
|
|
45
|
+
parsed = /* @__PURE__ */ new Map();
|
|
46
|
+
rels = /* @__PURE__ */ new Map();
|
|
47
|
+
async xml(part) {
|
|
48
|
+
if (this.parsed.has(part)) return this.parsed.get(part) ?? null;
|
|
49
|
+
const file = this.zip.file(part);
|
|
50
|
+
const text = file ? await file.async("string") : null;
|
|
51
|
+
const doc = text ? new DOMParser().parseFromString(text, "application/xml") : null;
|
|
52
|
+
const ok = doc && !doc.getElementsByTagName("parsererror").length ? doc : null;
|
|
53
|
+
this.parsed.set(part, ok);
|
|
54
|
+
return ok;
|
|
55
|
+
}
|
|
56
|
+
async bytes(part) {
|
|
57
|
+
const file = this.zip.file(part);
|
|
58
|
+
return file ? file.async("uint8array") : null;
|
|
59
|
+
}
|
|
60
|
+
/** A part's relationships by id, their targets resolved to part names. */
|
|
61
|
+
async relationships(part) {
|
|
62
|
+
const cached = this.rels.get(part);
|
|
63
|
+
if (cached) return cached;
|
|
64
|
+
const slash = part.lastIndexOf("/");
|
|
65
|
+
const dir = part.slice(0, slash + 1);
|
|
66
|
+
const relsPart = `${dir}_rels/${part.slice(slash + 1)}.rels`;
|
|
67
|
+
const doc = await this.xml(relsPart);
|
|
68
|
+
const map = /* @__PURE__ */ new Map();
|
|
69
|
+
for (const rel of kids(doc?.documentElement, "Relationship")) {
|
|
70
|
+
const id = rel.getAttribute("Id");
|
|
71
|
+
const target = rel.getAttribute("Target") ?? "";
|
|
72
|
+
const external = rel.getAttribute("TargetMode") === "External";
|
|
73
|
+
if (!id) continue;
|
|
74
|
+
map.set(id, {
|
|
75
|
+
target: external ? target : resolvePart(dir, target),
|
|
76
|
+
type: rel.getAttribute("Type") ?? "",
|
|
77
|
+
external
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
this.rels.set(part, map);
|
|
81
|
+
return map;
|
|
82
|
+
}
|
|
83
|
+
/** The first relationship of `part` whose type ends with `type` ("/slideLayout"). */
|
|
84
|
+
async related(part, type) {
|
|
85
|
+
for (const rel of (await this.relationships(part)).values()) {
|
|
86
|
+
if (rel.type.endsWith(type) && !rel.external) return rel.target;
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function resolvePart(dir, target) {
|
|
92
|
+
if (target.startsWith("/")) return target.slice(1);
|
|
93
|
+
const parts = (dir + target).split("/");
|
|
94
|
+
const out = [];
|
|
95
|
+
for (const part of parts) {
|
|
96
|
+
if (part === "..") out.pop();
|
|
97
|
+
else if (part !== "." && part !== "") out.push(part);
|
|
98
|
+
}
|
|
99
|
+
return out.join("/");
|
|
100
|
+
}
|
|
101
|
+
const PRESET_COLORS = {
|
|
102
|
+
black: "000000",
|
|
103
|
+
white: "ffffff",
|
|
104
|
+
red: "ff0000",
|
|
105
|
+
green: "008000",
|
|
106
|
+
blue: "0000ff",
|
|
107
|
+
yellow: "ffff00",
|
|
108
|
+
gray: "808080",
|
|
109
|
+
grey: "808080",
|
|
110
|
+
darkGray: "a9a9a9",
|
|
111
|
+
lightGray: "d3d3d3",
|
|
112
|
+
orange: "ffa500",
|
|
113
|
+
navy: "000080"
|
|
114
|
+
};
|
|
115
|
+
const toHex = (r, g, b) => `#${[r, g, b].map(
|
|
116
|
+
(v) => Math.round(Math.min(255, Math.max(0, v))).toString(16).padStart(2, "0")
|
|
117
|
+
).join("")}`;
|
|
118
|
+
function rgbToHsl(r, g, b) {
|
|
119
|
+
r /= 255;
|
|
120
|
+
g /= 255;
|
|
121
|
+
b /= 255;
|
|
122
|
+
const max = Math.max(r, g, b);
|
|
123
|
+
const min = Math.min(r, g, b);
|
|
124
|
+
const l = (max + min) / 2;
|
|
125
|
+
if (max === min) return [0, 0, l];
|
|
126
|
+
const d = max - min;
|
|
127
|
+
const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
128
|
+
let h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;
|
|
129
|
+
h /= 6;
|
|
130
|
+
return [h, s, l];
|
|
131
|
+
}
|
|
132
|
+
function hslToRgb(h, s, l) {
|
|
133
|
+
if (s === 0) return [l * 255, l * 255, l * 255];
|
|
134
|
+
const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
|
135
|
+
const p = 2 * l - q;
|
|
136
|
+
const hue = (t) => {
|
|
137
|
+
if (t < 0) t += 1;
|
|
138
|
+
if (t > 1) t -= 1;
|
|
139
|
+
if (t < 1 / 6) return p + (q - p) * 6 * t;
|
|
140
|
+
if (t < 1 / 2) return q;
|
|
141
|
+
if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
|
|
142
|
+
return p;
|
|
143
|
+
};
|
|
144
|
+
return [hue(h + 1 / 3) * 255, hue(h) * 255, hue(h - 1 / 3) * 255];
|
|
145
|
+
}
|
|
146
|
+
function readColor(element, theme, placeholder) {
|
|
147
|
+
if (!element) return null;
|
|
148
|
+
let hex = null;
|
|
149
|
+
switch (element.localName) {
|
|
150
|
+
case "srgbClr":
|
|
151
|
+
hex = element.getAttribute("val");
|
|
152
|
+
break;
|
|
153
|
+
case "sysClr":
|
|
154
|
+
hex = element.getAttribute("lastClr") ?? (element.getAttribute("val") === "window" ? "ffffff" : "000000");
|
|
155
|
+
break;
|
|
156
|
+
case "prstClr":
|
|
157
|
+
hex = PRESET_COLORS[element.getAttribute("val") ?? ""] ?? "000000";
|
|
158
|
+
break;
|
|
159
|
+
case "scrgbClr": {
|
|
160
|
+
const c = (name) => Math.round(numAttr(element, name) / 1e5 * 255);
|
|
161
|
+
hex = toHex(c("r"), c("g"), c("b")).slice(1);
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
case "schemeClr": {
|
|
165
|
+
const name = element.getAttribute("val") ?? "";
|
|
166
|
+
if (name === "phClr") {
|
|
167
|
+
hex = placeholder?.hex.slice(1) ?? "000000";
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
const mapped = theme.map[name] ?? name;
|
|
171
|
+
hex = theme.scheme[mapped] ?? theme.scheme[name] ?? null;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
default:
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
if (!hex || !/^[0-9a-f]{6}$/i.test(hex)) return null;
|
|
178
|
+
let r = parseInt(hex.slice(0, 2), 16);
|
|
179
|
+
let g = parseInt(hex.slice(2, 4), 16);
|
|
180
|
+
let b = parseInt(hex.slice(4, 6), 16);
|
|
181
|
+
let alpha = 1;
|
|
182
|
+
for (const mod of kids(element)) {
|
|
183
|
+
const val = numAttr(mod, "val") / 1e5;
|
|
184
|
+
switch (mod.localName) {
|
|
185
|
+
case "alpha":
|
|
186
|
+
alpha = val;
|
|
187
|
+
break;
|
|
188
|
+
case "lumMod":
|
|
189
|
+
case "lumOff":
|
|
190
|
+
case "satMod": {
|
|
191
|
+
const [h, s, l] = rgbToHsl(r, g, b);
|
|
192
|
+
const next = mod.localName === "lumMod" ? hslToRgb(h, s, Math.min(1, l * val)) : mod.localName === "lumOff" ? hslToRgb(h, s, Math.min(1, Math.max(0, l + val))) : hslToRgb(h, Math.min(1, s * val), l);
|
|
193
|
+
[r, g, b] = next;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
case "tint":
|
|
197
|
+
r = 255 - (255 - r) * val;
|
|
198
|
+
g = 255 - (255 - g) * val;
|
|
199
|
+
b = 255 - (255 - b) * val;
|
|
200
|
+
break;
|
|
201
|
+
case "shade":
|
|
202
|
+
r *= val;
|
|
203
|
+
g *= val;
|
|
204
|
+
b *= val;
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return { hex: toHex(r, g, b), alpha };
|
|
209
|
+
}
|
|
210
|
+
const COLOR_NAMES = ["srgbClr", "schemeClr", "sysClr", "prstClr", "scrgbClr"];
|
|
211
|
+
function colorIn(element, theme, placeholder) {
|
|
212
|
+
for (const child of kids(element)) {
|
|
213
|
+
if (COLOR_NAMES.includes(child.localName)) return readColor(child, theme, placeholder);
|
|
214
|
+
}
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
function readFill(element, theme, placeholder) {
|
|
218
|
+
for (const child of kids(element)) {
|
|
219
|
+
switch (child.localName) {
|
|
220
|
+
case "noFill":
|
|
221
|
+
return { kind: "none" };
|
|
222
|
+
case "solidFill": {
|
|
223
|
+
const color = colorIn(child, theme, placeholder);
|
|
224
|
+
return color ? { kind: "solid", color } : null;
|
|
225
|
+
}
|
|
226
|
+
case "gradFill": {
|
|
227
|
+
const stops = kids(kid(child, "gsLst"), "gs").map((gs) => ({ pos: numAttr(gs, "pos"), color: colorIn(gs, theme, placeholder) })).filter((stop) => stop.color !== null).sort((x, y) => x.pos - y.pos);
|
|
228
|
+
if (!stops.length) return null;
|
|
229
|
+
const ang = numAttr(kid(child, "lin"), "ang") / 6e4;
|
|
230
|
+
return {
|
|
231
|
+
kind: "gradient",
|
|
232
|
+
from: stops[0].color,
|
|
233
|
+
to: stops[stops.length - 1].color,
|
|
234
|
+
angle: (ang + 90) % 360
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
case "pattFill": {
|
|
238
|
+
const color = colorIn(kid(child, "fgClr"), theme, placeholder);
|
|
239
|
+
return color ? { kind: "solid", color } : null;
|
|
240
|
+
}
|
|
241
|
+
case "blipFill": {
|
|
242
|
+
const blip = kid(child, "blip");
|
|
243
|
+
const embed = relAttr(blip, "embed");
|
|
244
|
+
return embed ? { kind: "image", embed, srcRect: kid(child, "srcRect") } : null;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
function readLine(ln, theme, placeholder) {
|
|
251
|
+
if (!ln) return void 0;
|
|
252
|
+
const fill = readFill(ln, theme, placeholder);
|
|
253
|
+
if (fill?.kind === "none") return null;
|
|
254
|
+
const color = fill?.kind === "solid" ? fill.color : fill?.kind === "gradient" ? fill.from : null;
|
|
255
|
+
if (!color) return void 0;
|
|
256
|
+
const dash = kid(ln, "prstDash")?.getAttribute("val");
|
|
257
|
+
return {
|
|
258
|
+
color,
|
|
259
|
+
width: ln.hasAttribute("w") ? numAttr(ln, "w") / EMU_PER_POINT : 0.75,
|
|
260
|
+
dash: !!dash && dash !== "solid"
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
async function readTheme(pkg, master) {
|
|
264
|
+
const themePart = await pkg.related(master, "/theme");
|
|
265
|
+
const doc = themePart ? await pkg.xml(themePart) : null;
|
|
266
|
+
const elements = path(doc?.documentElement, "themeElements");
|
|
267
|
+
const scheme = {};
|
|
268
|
+
const bare = {
|
|
269
|
+
scheme,
|
|
270
|
+
map: {},
|
|
271
|
+
majorFont: "Calibri",
|
|
272
|
+
minorFont: "Calibri",
|
|
273
|
+
lineWidths: []
|
|
274
|
+
};
|
|
275
|
+
for (const entry of kids(kid(elements, "clrScheme"))) {
|
|
276
|
+
const color = colorIn(entry, bare);
|
|
277
|
+
if (color) scheme[entry.localName] = color.hex.slice(1);
|
|
278
|
+
}
|
|
279
|
+
const fonts = kid(elements, "fontScheme");
|
|
280
|
+
const typeface = (name) => path(fonts, name, "latin")?.getAttribute("typeface") || "Calibri";
|
|
281
|
+
const masterDoc = await pkg.xml(master);
|
|
282
|
+
const clrMap = kid(masterDoc?.documentElement, "clrMap");
|
|
283
|
+
const map = {};
|
|
284
|
+
for (const attr of Array.from(clrMap?.attributes ?? [])) map[attr.name] = attr.value;
|
|
285
|
+
const lineWidths = kids(path(elements, "fmtScheme", "lnStyleLst"), "ln").map(
|
|
286
|
+
(ln) => numAttr(ln, "w", 9525) / EMU_PER_POINT
|
|
287
|
+
);
|
|
288
|
+
return {
|
|
289
|
+
scheme,
|
|
290
|
+
map,
|
|
291
|
+
majorFont: typeface("majorFont"),
|
|
292
|
+
minorFont: typeface("minorFont"),
|
|
293
|
+
lineWidths
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
function typefaceOf(name, theme) {
|
|
297
|
+
if (!name) return void 0;
|
|
298
|
+
if (name.startsWith("+mj")) return theme.majorFont;
|
|
299
|
+
if (name.startsWith("+mn")) return theme.minorFont;
|
|
300
|
+
return name;
|
|
301
|
+
}
|
|
302
|
+
async function mediaDataUrl(pkg, part) {
|
|
303
|
+
const ext = part.split(".").pop()?.toLowerCase() ?? "";
|
|
304
|
+
const mime = ext === "png" ? "image/png" : ext === "jpg" || ext === "jpeg" ? "image/jpeg" : ext === "gif" ? "image/gif" : ext === "svg" ? "image/svg+xml" : ext === "webp" ? "image/webp" : ext === "bmp" ? "image/bmp" : null;
|
|
305
|
+
if (!mime) return null;
|
|
306
|
+
const bytes = await pkg.bytes(part);
|
|
307
|
+
if (!bytes) return null;
|
|
308
|
+
let binary = "";
|
|
309
|
+
for (let i = 0; i < bytes.length; i += 32768) {
|
|
310
|
+
binary += String.fromCharCode(...bytes.subarray(i, i + 32768));
|
|
311
|
+
}
|
|
312
|
+
return `data:${mime};base64,${btoa(binary)}`;
|
|
313
|
+
}
|
|
314
|
+
export {
|
|
315
|
+
EMU_PER_POINT,
|
|
316
|
+
NS,
|
|
317
|
+
Package,
|
|
318
|
+
boolAttr,
|
|
319
|
+
colorIn,
|
|
320
|
+
kid,
|
|
321
|
+
kids,
|
|
322
|
+
mediaDataUrl,
|
|
323
|
+
numAttr,
|
|
324
|
+
path,
|
|
325
|
+
readColor,
|
|
326
|
+
readFill,
|
|
327
|
+
readLine,
|
|
328
|
+
readTheme,
|
|
329
|
+
relAttr,
|
|
330
|
+
resolvePart,
|
|
331
|
+
typefaceOf
|
|
332
|
+
};
|
|
333
|
+
//# sourceMappingURL=pptx-xml.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/presentation/pptx-xml.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Reading a PowerPoint package's XML: its parts and relationships, and DrawingML's colours, fills,\n * outlines and theme (colour scheme, fonts) as PowerPoint resolves them. What `import-pptx` builds\n * slides from.\n */\n\nimport type JSZip from 'jszip'\n\nexport const NS = {\n a: 'http://schemas.openxmlformats.org/drawingml/2006/main',\n p: 'http://schemas.openxmlformats.org/presentationml/2006/main',\n r: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n}\n\n/** EMUs per point. */\nexport const EMU_PER_POINT = 12700\n\n/** The element's child elements named `name` (by local name, any namespace). */\nexport function kids(element: Element | null | undefined, name?: string): Element[] {\n if (!element) return []\n const found: Element[] = []\n for (let child = element.firstElementChild; child; child = child.nextElementSibling) {\n if (!name || child.localName === name) found.push(child)\n }\n return found\n}\n\n/** The first child element named `name`. */\nexport function kid(element: Element | null | undefined, name: string): Element | null {\n if (!element) return null\n for (let child = element.firstElementChild; child; child = child.nextElementSibling) {\n if (child.localName === name) return child\n }\n return null\n}\n\n/** The element at a path of child names (`path(sp, 'spPr', 'xfrm')`). */\nexport function path(element: Element | null | undefined, ...names: string[]): Element | null {\n let at: Element | null = element ?? null\n for (const name of names) at = kid(at, name)\n return at\n}\n\n/** A numeric attribute, or `fallback`. */\nexport function numAttr(element: Element | null | undefined, name: string, fallback = 0): number {\n const value = element?.getAttribute(name)\n if (value === null || value === undefined || value === '') return fallback\n const parsed = Number(value)\n return Number.isFinite(parsed) ? parsed : fallback\n}\n\n/** A relationship id attribute (`r:embed`, `r:id`\u2026). */\nexport const relAttr = (element: Element | null | undefined, name: string): string | null =>\n element?.getAttributeNS(NS.r, name) ?? element?.getAttribute(`r:${name}`) ?? null\n\n/** A truthy OOXML boolean attribute (\"1\", \"true\"). */\nexport const boolAttr = (\n element: Element | null | undefined,\n name: string\n): boolean | undefined => {\n const value = element?.getAttribute(name)\n if (value === null || value === undefined) return undefined\n return value === '1' || value === 'true'\n}\n\n/** A package: its parts parsed on demand and its relationships resolved. */\nexport class Package {\n private parsed = new Map<string, Document | null>()\n private rels = new Map<string, Map<string, { target: string; type: string; external: boolean }>>()\n\n constructor(readonly zip: JSZip) {}\n\n async xml(part: string): Promise<Document | null> {\n if (this.parsed.has(part)) return this.parsed.get(part) ?? null\n const file = this.zip.file(part)\n const text = file ? await file.async('string') : null\n const doc = text ? new DOMParser().parseFromString(text, 'application/xml') : null\n const ok = doc && !doc.getElementsByTagName('parsererror').length ? doc : null\n this.parsed.set(part, ok)\n return ok\n }\n\n async bytes(part: string): Promise<Uint8Array | null> {\n const file = this.zip.file(part)\n return file ? file.async('uint8array') : null\n }\n\n /** A part's relationships by id, their targets resolved to part names. */\n async relationships(part: string) {\n const cached = this.rels.get(part)\n if (cached) return cached\n const slash = part.lastIndexOf('/')\n const dir = part.slice(0, slash + 1)\n const relsPart = `${dir}_rels/${part.slice(slash + 1)}.rels`\n const doc = await this.xml(relsPart)\n const map = new Map<string, { target: string; type: string; external: boolean }>()\n for (const rel of kids(doc?.documentElement, 'Relationship')) {\n const id = rel.getAttribute('Id')\n const target = rel.getAttribute('Target') ?? ''\n const external = rel.getAttribute('TargetMode') === 'External'\n if (!id) continue\n map.set(id, {\n target: external ? target : resolvePart(dir, target),\n type: rel.getAttribute('Type') ?? '',\n external,\n })\n }\n this.rels.set(part, map)\n return map\n }\n\n /** The first relationship of `part` whose type ends with `type` (\"/slideLayout\"). */\n async related(part: string, type: string): Promise<string | null> {\n for (const rel of (await this.relationships(part)).values()) {\n if (rel.type.endsWith(type) && !rel.external) return rel.target\n }\n return null\n }\n}\n\n/** A relationship target resolved against the part's folder (\"../media/a.png\" \u2192 \"ppt/media/a.png\"). */\nexport function resolvePart(dir: string, target: string): string {\n if (target.startsWith('/')) return target.slice(1)\n const parts = (dir + target).split('/')\n const out: string[] = []\n for (const part of parts) {\n if (part === '..') out.pop()\n else if (part !== '.' && part !== '') out.push(part)\n }\n return out.join('/')\n}\n\n// --- Colour -------------------------------------------------------------------------------\n\nexport interface Color {\n hex: string\n alpha: number\n}\n\nexport interface DeckTheme {\n /** Scheme colours by name (dk1, lt1, accent1\u2026), and the master's mapping (bg1 \u2192 lt1\u2026). */\n scheme: Record<string, string>\n map: Record<string, string>\n majorFont: string\n minorFont: string\n /** The theme's line widths (lnStyleLst), in points, by style index (1-based). */\n lineWidths: number[]\n}\n\nconst PRESET_COLORS: Record<string, string> = {\n black: '000000',\n white: 'ffffff',\n red: 'ff0000',\n green: '008000',\n blue: '0000ff',\n yellow: 'ffff00',\n gray: '808080',\n grey: '808080',\n darkGray: 'a9a9a9',\n lightGray: 'd3d3d3',\n orange: 'ffa500',\n navy: '000080',\n}\n\nconst toHex = (r: number, g: number, b: number) =>\n `#${[r, g, b]\n .map((v) =>\n Math.round(Math.min(255, Math.max(0, v)))\n .toString(16)\n .padStart(2, '0')\n )\n .join('')}`\n\nfunction rgbToHsl(r: number, g: number, b: number): [number, number, number] {\n r /= 255\n g /= 255\n b /= 255\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const l = (max + min) / 2\n if (max === min) return [0, 0, l]\n const d = max - min\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n let h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4\n h /= 6\n return [h, s, l]\n}\n\nfunction hslToRgb(h: number, s: number, l: number): [number, number, number] {\n if (s === 0) return [l * 255, l * 255, l * 255]\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n const hue = (t: number) => {\n if (t < 0) t += 1\n if (t > 1) t -= 1\n if (t < 1 / 6) return p + (q - p) * 6 * t\n if (t < 1 / 2) return q\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\n return p\n }\n return [hue(h + 1 / 3) * 255, hue(h) * 255, hue(h - 1 / 3) * 255]\n}\n\n/** The colour a DrawingML colour element names (srgbClr, schemeClr\u2026), its modifiers applied. */\nexport function readColor(\n element: Element | null,\n theme: DeckTheme,\n placeholder?: Color\n): Color | null {\n if (!element) return null\n let hex: string | null = null\n switch (element.localName) {\n case 'srgbClr':\n hex = element.getAttribute('val')\n break\n case 'sysClr':\n hex =\n element.getAttribute('lastClr') ??\n (element.getAttribute('val') === 'window' ? 'ffffff' : '000000')\n break\n case 'prstClr':\n hex = PRESET_COLORS[element.getAttribute('val') ?? ''] ?? '000000'\n break\n case 'scrgbClr': {\n const c = (name: string) => Math.round((numAttr(element, name) / 100000) * 255)\n hex = toHex(c('r'), c('g'), c('b')).slice(1)\n break\n }\n case 'schemeClr': {\n const name = element.getAttribute('val') ?? ''\n if (name === 'phClr') {\n hex = placeholder?.hex.slice(1) ?? '000000'\n break\n }\n const mapped = theme.map[name] ?? name\n hex = theme.scheme[mapped] ?? theme.scheme[name] ?? null\n break\n }\n default:\n return null\n }\n if (!hex || !/^[0-9a-f]{6}$/i.test(hex)) return null\n let r = parseInt(hex.slice(0, 2), 16)\n let g = parseInt(hex.slice(2, 4), 16)\n let b = parseInt(hex.slice(4, 6), 16)\n let alpha = 1\n for (const mod of kids(element)) {\n const val = numAttr(mod, 'val') / 100000\n switch (mod.localName) {\n case 'alpha':\n alpha = val\n break\n case 'lumMod':\n case 'lumOff':\n case 'satMod': {\n const [h, s, l] = rgbToHsl(r, g, b)\n const next =\n mod.localName === 'lumMod'\n ? hslToRgb(h, s, Math.min(1, l * val))\n : mod.localName === 'lumOff'\n ? hslToRgb(h, s, Math.min(1, Math.max(0, l + val)))\n : hslToRgb(h, Math.min(1, s * val), l)\n ;[r, g, b] = next\n break\n }\n case 'tint':\n r = 255 - (255 - r) * val\n g = 255 - (255 - g) * val\n b = 255 - (255 - b) * val\n break\n case 'shade':\n r *= val\n g *= val\n b *= val\n break\n }\n }\n return { hex: toHex(r, g, b), alpha }\n}\n\nconst COLOR_NAMES = ['srgbClr', 'schemeClr', 'sysClr', 'prstClr', 'scrgbClr']\n\n/** The colour inside an element that holds one (solidFill, a style ref\u2026). */\nexport function colorIn(\n element: Element | null,\n theme: DeckTheme,\n placeholder?: Color\n): Color | null {\n for (const child of kids(element)) {\n if (COLOR_NAMES.includes(child.localName)) return readColor(child, theme, placeholder)\n }\n return null\n}\n\nexport type Fill =\n | { kind: 'none' }\n | { kind: 'solid'; color: Color }\n | { kind: 'gradient'; from: Color; to: Color; angle: number }\n | { kind: 'image'; embed: string; srcRect: Element | null }\n\n/** The fill an element holding fill properties (spPr, bgPr, tcPr) sets, if any. */\nexport function readFill(\n element: Element | null,\n theme: DeckTheme,\n placeholder?: Color\n): Fill | null {\n for (const child of kids(element)) {\n switch (child.localName) {\n case 'noFill':\n return { kind: 'none' }\n case 'solidFill': {\n const color = colorIn(child, theme, placeholder)\n return color ? { kind: 'solid', color } : null\n }\n case 'gradFill': {\n const stops = kids(kid(child, 'gsLst'), 'gs')\n .map((gs) => ({ pos: numAttr(gs, 'pos'), color: colorIn(gs, theme, placeholder) }))\n .filter((stop): stop is { pos: number; color: Color } => stop.color !== null)\n .sort((x, y) => x.pos - y.pos)\n if (!stops.length) return null\n // DrawingML's angle runs clockwise from left-to-right; CSS's from bottom-to-top.\n const ang = numAttr(kid(child, 'lin'), 'ang') / 60000\n return {\n kind: 'gradient',\n from: stops[0].color,\n to: stops[stops.length - 1].color,\n angle: (ang + 90) % 360,\n }\n }\n case 'pattFill': {\n const color = colorIn(kid(child, 'fgClr'), theme, placeholder)\n return color ? { kind: 'solid', color } : null\n }\n case 'blipFill': {\n const blip = kid(child, 'blip')\n const embed = relAttr(blip, 'embed')\n return embed ? { kind: 'image', embed, srcRect: kid(child, 'srcRect') } : null\n }\n }\n }\n return null\n}\n\n/** An outline (a:ln), if it draws: its colour, width (points) and dash. */\nexport function readLine(\n ln: Element | null,\n theme: DeckTheme,\n placeholder?: Color\n): { color: Color; width: number; dash: boolean } | null | undefined {\n if (!ln) return undefined\n const fill = readFill(ln, theme, placeholder)\n if (fill?.kind === 'none') return null\n const color = fill?.kind === 'solid' ? fill.color : fill?.kind === 'gradient' ? fill.from : null\n if (!color) return undefined\n const dash = kid(ln, 'prstDash')?.getAttribute('val')\n return {\n color,\n width: ln.hasAttribute('w') ? numAttr(ln, 'w') / EMU_PER_POINT : 0.75,\n dash: !!dash && dash !== 'solid',\n }\n}\n\n/** A deck's theme, from the theme part its master uses, with the master's colour map. */\nexport async function readTheme(pkg: Package, master: string): Promise<DeckTheme> {\n const themePart = await pkg.related(master, '/theme')\n const doc = themePart ? await pkg.xml(themePart) : null\n const elements = path(doc?.documentElement, 'themeElements')\n const scheme: Record<string, string> = {}\n const bare: DeckTheme = {\n scheme,\n map: {},\n majorFont: 'Calibri',\n minorFont: 'Calibri',\n lineWidths: [],\n }\n for (const entry of kids(kid(elements, 'clrScheme'))) {\n const color = colorIn(entry, bare)\n if (color) scheme[entry.localName] = color.hex.slice(1)\n }\n const fonts = kid(elements, 'fontScheme')\n const typeface = (name: string) =>\n path(fonts, name, 'latin')?.getAttribute('typeface') || 'Calibri'\n const masterDoc = await pkg.xml(master)\n const clrMap = kid(masterDoc?.documentElement, 'clrMap')\n const map: Record<string, string> = {}\n for (const attr of Array.from(clrMap?.attributes ?? [])) map[attr.name] = attr.value\n const lineWidths = kids(path(elements, 'fmtScheme', 'lnStyleLst'), 'ln').map(\n (ln) => numAttr(ln, 'w', 9525) / EMU_PER_POINT\n )\n return {\n scheme,\n map,\n majorFont: typeface('majorFont'),\n minorFont: typeface('minorFont'),\n lineWidths,\n }\n}\n\n/** A typeface as named in a run, the theme's fonts resolved. */\nexport function typefaceOf(name: string | null | undefined, theme: DeckTheme): string | undefined {\n if (!name) return undefined\n if (name.startsWith('+mj')) return theme.majorFont\n if (name.startsWith('+mn')) return theme.minorFont\n return name\n}\n\n/** A media part as a data URL (null for formats a browser cannot show: EMF, WMF, TIFF). */\nexport async function mediaDataUrl(pkg: Package, part: string): Promise<string | null> {\n const ext = part.split('.').pop()?.toLowerCase() ?? ''\n const mime =\n ext === 'png'\n ? 'image/png'\n : ext === 'jpg' || ext === 'jpeg'\n ? 'image/jpeg'\n : ext === 'gif'\n ? 'image/gif'\n : ext === 'svg'\n ? 'image/svg+xml'\n : ext === 'webp'\n ? 'image/webp'\n : ext === 'bmp'\n ? 'image/bmp'\n : null\n if (!mime) return null\n const bytes = await pkg.bytes(part)\n if (!bytes) return null\n let binary = ''\n for (let i = 0; i < bytes.length; i += 0x8000) {\n binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000))\n }\n return `data:${mime};base64,${btoa(binary)}`\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A presentation's slides as images, exactly as they are presented: the theme's background, the
|
|
3
|
+
* slide's title, rule and points by its layout, each clip in its frame (a PDF clip drawn from its
|
|
4
|
+
* PDF with its redactions burnt in, an image from its file, a video as its frame at the clip's
|
|
5
|
+
* start), the source labels under them and the logo. For the saved PDF (`imagesToPdf`), where they
|
|
6
|
+
* are the pages; the PowerPoint export draws its parts with the same pieces.
|
|
7
|
+
*/
|
|
8
|
+
import { type Clip, type Slide } from './model';
|
|
9
|
+
import { type Theme } from './theme';
|
|
10
|
+
/** The rendered slide's size in pixels (a 1080p screen). */
|
|
11
|
+
export declare const SLIDE_PIXELS: {
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
};
|
|
15
|
+
export interface RenderedSlide {
|
|
16
|
+
/** A JPEG of the slide. */
|
|
17
|
+
image: Blob;
|
|
18
|
+
/** The slide's words (title, labels), for a searchable PDF. */
|
|
19
|
+
text: string[];
|
|
20
|
+
}
|
|
21
|
+
export declare function drawClip(context: CanvasRenderingContext2D, clip: Clip, box: {
|
|
22
|
+
x: number;
|
|
23
|
+
y: number;
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
}): Promise<void>;
|
|
27
|
+
/** A clip's corner radius, a fraction of the stage width (as the stage's 0.6cqw). */
|
|
28
|
+
export declare const CLIP_RADIUS = 0.006;
|
|
29
|
+
/**
|
|
30
|
+
* A clip as the stage shows it: lifted off the background by a soft shadow, its corners softly
|
|
31
|
+
* rounded, a faint light edge around it.
|
|
32
|
+
*/
|
|
33
|
+
export declare function drawRoundedClip(context: CanvasRenderingContext2D, clip: Clip, box: {
|
|
34
|
+
x: number;
|
|
35
|
+
y: number;
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
}, stageWidth: number, shadow?: boolean): Promise<void>;
|
|
39
|
+
/** What a slide is drawn with besides itself and its clips. */
|
|
40
|
+
export interface SlideLook {
|
|
41
|
+
labels: boolean;
|
|
42
|
+
/** Each document's value in the label column (see `clipLabel`). */
|
|
43
|
+
columnValues: Readonly<Record<string, string>>;
|
|
44
|
+
theme: Theme;
|
|
45
|
+
/** The theme's logo image, if it has one. */
|
|
46
|
+
logo: Blob | null;
|
|
47
|
+
/** Images embedded in the presentation (slide backgrounds, imported pictures), by key. */
|
|
48
|
+
media: Readonly<Record<string, string>>;
|
|
49
|
+
}
|
|
50
|
+
/** The lines of `text` that fit `width` (words wrapped), at most `max`, the last one cut short. */
|
|
51
|
+
export declare function wrapLines(context: CanvasRenderingContext2D, text: string, width: number, max: number): string[];
|
|
52
|
+
/** An image file, decoded (any format the browser shows, SVG included). */
|
|
53
|
+
export declare function loadImage(file: Blob): Promise<HTMLImageElement>;
|
|
54
|
+
/** A slide's title, rule and text, as `drawSlideText` draws them: for the searchable PDF's text. */
|
|
55
|
+
export declare function slideWords(slide: Slide): string[];
|
|
56
|
+
/** The slide's own text (title, rule, points or subtitle) on a `width × height` canvas. */
|
|
57
|
+
export declare function drawSlideText(context: CanvasRenderingContext2D, slide: Slide, look: SlideLook, width: number, height: number): import("./slide-layout").SlideGeometry;
|
|
58
|
+
export declare function renderSlide(slide: Slide, clips: readonly Clip[], look: SlideLook): Promise<RenderedSlide>;
|