@arbidocs/blocks 0.5.121 → 0.5.123
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 → ClippingMediaViewer-IEIBT74X.cjs} +8 -8
- package/dist/{ClippingMediaViewer-B6WG7Q64.cjs.map → ClippingMediaViewer-IEIBT74X.cjs.map} +1 -1
- package/dist/{ClippingPdfViewer-6GCVTV3V.cjs → ClippingPdfViewer-OGYLMVCE.cjs} +5 -5
- package/dist/{ClippingPdfViewer-6GCVTV3V.cjs.map → ClippingPdfViewer-OGYLMVCE.cjs.map} +1 -1
- package/dist/{ConnectedCallDock-DC5V5OUJ.cjs → ConnectedCallDock-XJOYVVAH.cjs} +21 -21
- package/dist/{ConnectedCallDock-DC5V5OUJ.cjs.map → ConnectedCallDock-XJOYVVAH.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-FQLXWTFB.cjs → ConnectedCallRoom-CUDYAPQK.cjs} +14 -14
- package/dist/{ConnectedCallRoom-FQLXWTFB.cjs.map → ConnectedCallRoom-CUDYAPQK.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-4Q5S7VLD.cjs → ConnectedNativeDocxComparison-QKHCYD6W.cjs} +15 -15
- package/dist/{ConnectedNativeDocxComparison-4Q5S7VLD.cjs.map → ConnectedNativeDocxComparison-QKHCYD6W.cjs.map} +1 -1
- package/dist/ConnectedPresentation-5DOJ35XL.cjs +321 -0
- package/dist/ConnectedPresentation-5DOJ35XL.cjs.map +1 -0
- package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs → ConnectedProductionSetDialog-LHB4VQWC.cjs} +3 -3
- package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs.map → ConnectedProductionSetDialog-LHB4VQWC.cjs.map} +1 -1
- package/dist/{ConnectedSlidesTab-7QDE2CZD.cjs → ConnectedSlidesTab-7YMEDGUU.cjs} +73 -49
- package/dist/ConnectedSlidesTab-7YMEDGUU.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-FFOQJBOI.cjs → ConnectedStreamedWordArtifact-AG62232A.cjs} +15 -15
- package/dist/{ConnectedStreamedWordArtifact-FFOQJBOI.cjs.map → ConnectedStreamedWordArtifact-AG62232A.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-SNWVEZ7S.cjs → DocumentReviewCard-M53XFLI2.cjs} +15 -15
- package/dist/{DocumentReviewCard-SNWVEZ7S.cjs.map → DocumentReviewCard-M53XFLI2.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-IZI63FOV.cjs → FilesViewerDialog-2QCCRWF2.cjs} +50 -49
- package/dist/FilesViewerDialog-2QCCRWF2.cjs.map +1 -0
- package/dist/{WorkspaceTableView-TEIRB6VJ.cjs → WorkspaceTableView-3XYAV4BV.cjs} +8 -8
- package/dist/{WorkspaceTableView-TEIRB6VJ.cjs.map → WorkspaceTableView-3XYAV4BV.cjs.map} +1 -1
- package/dist/agents/index.cjs +296 -296
- package/dist/{ai-KBYNRNZ6.cjs → ai-IEIR7SC2.cjs} +25 -25
- package/dist/ai-IEIR7SC2.cjs.map +1 -0
- package/dist/calls/index.cjs +121 -121
- package/dist/chat/index.cjs +1 -1
- package/dist/{chunk-NLOETJCB.cjs → chunk-2F57IO7S.cjs} +12 -12
- package/dist/{chunk-NLOETJCB.cjs.map → chunk-2F57IO7S.cjs.map} +1 -1
- package/dist/chunk-2RLA6QO2.cjs +174 -0
- package/dist/chunk-2RLA6QO2.cjs.map +1 -0
- package/dist/{chunk-Q6DQGGP4.cjs → chunk-325GVZE6.cjs} +3 -3
- package/dist/{chunk-Q6DQGGP4.cjs.map → chunk-325GVZE6.cjs.map} +1 -1
- package/dist/{chunk-LHWOKOMP.cjs → chunk-46P7IDBX.cjs} +3 -3
- package/dist/chunk-46P7IDBX.cjs.map +1 -0
- package/dist/{chunk-XTR26TNE.cjs → chunk-4TTX6ZNS.cjs} +20 -4
- package/dist/chunk-4TTX6ZNS.cjs.map +1 -0
- package/dist/{chunk-BVAT4EVC.cjs → chunk-5QERK4PK.cjs} +35 -35
- package/dist/{chunk-BVAT4EVC.cjs.map → chunk-5QERK4PK.cjs.map} +1 -1
- package/dist/{chunk-GX2EBMJW.cjs → chunk-6OK7ESTL.cjs} +7 -6
- package/dist/chunk-6OK7ESTL.cjs.map +1 -0
- package/dist/{chunk-C2OICDMI.cjs → chunk-7557LDAN.cjs} +10 -10
- package/dist/{chunk-C2OICDMI.cjs.map → chunk-7557LDAN.cjs.map} +1 -1
- package/dist/{chunk-474GPLCM.cjs → chunk-7L4X6QN2.cjs} +6 -6
- package/dist/{chunk-474GPLCM.cjs.map → chunk-7L4X6QN2.cjs.map} +1 -1
- package/dist/{chunk-52KGMAO5.cjs → chunk-7NLO7ASW.cjs} +15 -15
- package/dist/{chunk-52KGMAO5.cjs.map → chunk-7NLO7ASW.cjs.map} +1 -1
- package/dist/{chunk-H5OLHP2U.cjs → chunk-7OPOPYV6.cjs} +3 -3
- package/dist/{chunk-H5OLHP2U.cjs.map → chunk-7OPOPYV6.cjs.map} +1 -1
- package/dist/{chunk-W6B3RYTX.cjs → chunk-7PN3YENO.cjs} +4 -4
- package/dist/{chunk-W6B3RYTX.cjs.map → chunk-7PN3YENO.cjs.map} +1 -1
- package/dist/{chunk-734NPQNR.cjs → chunk-ADDQKZ5I.cjs} +4 -4
- package/dist/{chunk-734NPQNR.cjs.map → chunk-ADDQKZ5I.cjs.map} +1 -1
- package/dist/{chunk-JQLWKNJO.cjs → chunk-ALK3PUUB.cjs} +4 -4
- package/dist/{chunk-JQLWKNJO.cjs.map → chunk-ALK3PUUB.cjs.map} +1 -1
- package/dist/{chunk-4VZZWYEC.cjs → chunk-BQ5RIWWT.cjs} +3 -3
- package/dist/{chunk-4VZZWYEC.cjs.map → chunk-BQ5RIWWT.cjs.map} +1 -1
- package/dist/{chunk-Q3XJUXID.cjs → chunk-DWMWEALB.cjs} +499 -409
- package/dist/chunk-DWMWEALB.cjs.map +1 -0
- package/dist/{chunk-3SCNXNHI.cjs → chunk-E3L5DB5F.cjs} +5 -5
- package/dist/{chunk-3SCNXNHI.cjs.map → chunk-E3L5DB5F.cjs.map} +1 -1
- package/dist/{chunk-VJ5ZLRBD.cjs → chunk-GFUOCGY6.cjs} +8 -3
- package/dist/chunk-GFUOCGY6.cjs.map +1 -0
- package/dist/{chunk-7VUJGHMY.cjs → chunk-JD2HX2BR.cjs} +272 -156
- package/dist/chunk-JD2HX2BR.cjs.map +1 -0
- package/dist/{chunk-RYVZDFVO.cjs → chunk-JJZOL5MG.cjs} +3 -3
- package/dist/{chunk-RYVZDFVO.cjs.map → chunk-JJZOL5MG.cjs.map} +1 -1
- package/dist/{chunk-QFXILJMJ.cjs → chunk-K4763GD5.cjs} +17 -174
- package/dist/chunk-K4763GD5.cjs.map +1 -0
- package/dist/{chunk-EHP6OH5D.cjs → chunk-KA3F6TIH.cjs} +11 -11
- package/dist/{chunk-EHP6OH5D.cjs.map → chunk-KA3F6TIH.cjs.map} +1 -1
- package/dist/{chunk-UUENH4BJ.cjs → chunk-KXIRVKCJ.cjs} +3 -3
- package/dist/{chunk-UUENH4BJ.cjs.map → chunk-KXIRVKCJ.cjs.map} +1 -1
- package/dist/{chunk-AY6EZSZB.cjs → chunk-L4CIFLCU.cjs} +4 -4
- package/dist/{chunk-AY6EZSZB.cjs.map → chunk-L4CIFLCU.cjs.map} +1 -1
- package/dist/{chunk-4RBQ44RY.cjs → chunk-MLA2BJ2Y.cjs} +28 -28
- package/dist/{chunk-4RBQ44RY.cjs.map → chunk-MLA2BJ2Y.cjs.map} +1 -1
- package/dist/{chunk-DR2AH7JL.cjs → chunk-NG2EE7HR.cjs} +48 -48
- package/dist/{chunk-DR2AH7JL.cjs.map → chunk-NG2EE7HR.cjs.map} +1 -1
- package/dist/{chunk-ENGL7P3I.cjs → chunk-NQML7IUC.cjs} +26 -26
- package/dist/{chunk-ENGL7P3I.cjs.map → chunk-NQML7IUC.cjs.map} +1 -1
- package/dist/{chunk-4NPCDS2X.cjs → chunk-NY3YUCOW.cjs} +3 -3
- package/dist/{chunk-4NPCDS2X.cjs.map → chunk-NY3YUCOW.cjs.map} +1 -1
- package/dist/{chunk-JZEYHDWJ.cjs → chunk-OHHKBURG.cjs} +76 -76
- package/dist/chunk-OHHKBURG.cjs.map +1 -0
- package/dist/{chunk-5534FYXP.cjs → chunk-SDRYSLOX.cjs} +4 -4
- package/dist/{chunk-5534FYXP.cjs.map → chunk-SDRYSLOX.cjs.map} +1 -1
- package/dist/{chunk-2W5E62EY.cjs → chunk-SGYSDABK.cjs} +6 -6
- package/dist/{chunk-2W5E62EY.cjs.map → chunk-SGYSDABK.cjs.map} +1 -1
- package/dist/{chunk-KP5AITQ4.cjs → chunk-SNPK3R3O.cjs} +7 -7
- package/dist/{chunk-KP5AITQ4.cjs.map → chunk-SNPK3R3O.cjs.map} +1 -1
- package/dist/{chunk-EATIFPKP.cjs → chunk-T73BHNQX.cjs} +4 -4
- package/dist/{chunk-EATIFPKP.cjs.map → chunk-T73BHNQX.cjs.map} +1 -1
- package/dist/{chunk-4IOYQLKG.cjs → chunk-TP5PGWIO.cjs} +3 -3
- package/dist/{chunk-4IOYQLKG.cjs.map → chunk-TP5PGWIO.cjs.map} +1 -1
- package/dist/{chunk-GKVE5JGB.cjs → chunk-UFT22LAB.cjs} +3 -3
- package/dist/{chunk-GKVE5JGB.cjs.map → chunk-UFT22LAB.cjs.map} +1 -1
- package/dist/{chunk-FKFQCK3C.cjs → chunk-V6MW7B4B.cjs} +4 -4
- package/dist/{chunk-FKFQCK3C.cjs.map → chunk-V6MW7B4B.cjs.map} +1 -1
- package/dist/{chunk-2PZT3J34.cjs → chunk-VWBYE3XY.cjs} +6 -6
- package/dist/{chunk-2PZT3J34.cjs.map → chunk-VWBYE3XY.cjs.map} +1 -1
- package/dist/{chunk-GQXPNIRE.cjs → chunk-WAV762GP.cjs} +6 -6
- package/dist/{chunk-GQXPNIRE.cjs.map → chunk-WAV762GP.cjs.map} +1 -1
- package/dist/{chunk-5LTIZ44D.cjs → chunk-WFMWKPGY.cjs} +14 -7
- package/dist/chunk-WFMWKPGY.cjs.map +1 -0
- package/dist/{chunk-GPX5VC57.cjs → chunk-WV7BCGCK.cjs} +50 -50
- package/dist/{chunk-GPX5VC57.cjs.map → chunk-WV7BCGCK.cjs.map} +1 -1
- package/dist/{chunk-MZ2KZXNU.cjs → chunk-WXUU3COI.cjs} +3 -3
- package/dist/{chunk-MZ2KZXNU.cjs.map → chunk-WXUU3COI.cjs.map} +1 -1
- package/dist/{chunk-NAJN32MF.cjs → chunk-XF355M7O.cjs} +13 -13
- package/dist/{chunk-NAJN32MF.cjs.map → chunk-XF355M7O.cjs.map} +1 -1
- package/dist/connect/docx.cjs +18 -18
- package/dist/connect/index.cjs +995 -994
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/viewer.cjs +38 -37
- package/dist/connection/conversation/ConnectedMessage.js +1 -1
- package/dist/connection/conversation/ConnectedMessage.js.map +2 -2
- package/dist/connection/presentation/ConnectedSlidesTab.js +39 -15
- package/dist/connection/presentation/ConnectedSlidesTab.js.map +2 -2
- package/dist/connection/presentation/PresentationPill.js +3 -8
- package/dist/connection/presentation/PresentationPill.js.map +2 -2
- package/dist/connection/presentation/requests.d.ts +5 -0
- package/dist/connection/presentation/requests.js +8 -1
- package/dist/connection/presentation/requests.js.map +2 -2
- package/dist/connection/viewer/ConnectedDocumentViewer.js +51 -60
- package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
- package/dist/connection/viewer/ViewerMoreMenu.d.ts +18 -0
- package/dist/connection/viewer/ViewerMoreMenu.js +45 -0
- package/dist/connection/viewer/ViewerMoreMenu.js.map +7 -0
- package/dist/connection/viewer/ViewerPdfPane.js +4 -1
- package/dist/connection/viewer/ViewerPdfPane.js.map +2 -2
- package/dist/connection/viewer/documentPlace.d.ts +5 -4
- package/dist/connection/viewer/documentPlace.js +2 -2
- package/dist/connection/viewer/documentPlace.js.map +2 -2
- package/dist/connection/viewer/pdf/PdfClipOutlines.d.ts +11 -0
- package/dist/connection/viewer/pdf/PdfClipOutlines.js +42 -0
- package/dist/connection/viewer/pdf/PdfClipOutlines.js.map +7 -0
- package/dist/connection/viewer/pdf/PdfPassageHighlights.js +3 -2
- package/dist/connection/viewer/pdf/PdfPassageHighlights.js.map +2 -2
- package/dist/connection/viewer/pdf/clipOutlines.d.ts +17 -0
- package/dist/connection/viewer/pdf/clipOutlines.js +24 -0
- package/dist/connection/viewer/pdf/clipOutlines.js.map +7 -0
- package/dist/connection/viewer/pdf/passageHighlights.d.ts +2 -0
- package/dist/connection/viewer/pdf/passageHighlights.js +12 -1
- package/dist/connection/viewer/pdf/passageHighlights.js.map +2 -2
- package/dist/connection/viewer/pdf/usePdfClipOutlines.d.ts +7 -0
- package/dist/connection/viewer/pdf/usePdfClipOutlines.js +36 -0
- package/dist/connection/viewer/pdf/usePdfClipOutlines.js.map +7 -0
- package/dist/connection/viewer/pdf/usePdfPassageHighlights.js +11 -2
- package/dist/connection/viewer/pdf/usePdfPassageHighlights.js.map +2 -2
- package/dist/dashboards/index.cjs +1 -1
- package/dist/document-tools/DocumentToolButtons.js +2 -2
- package/dist/document-tools/DocumentToolButtons.js.map +2 -2
- package/dist/document-tools/index.cjs +13 -13
- package/dist/embed/index.cjs +38 -38
- package/dist/files/index.cjs +224 -224
- package/dist/index.cjs +1596 -1595
- package/dist/index.cjs.map +1 -1
- package/dist/presentation/BoxActionBar.d.ts +2 -2
- package/dist/presentation/BoxActionBar.js +62 -30
- package/dist/presentation/BoxActionBar.js.map +2 -2
- package/dist/presentation/ClipActionBar.js +60 -7
- package/dist/presentation/ClipActionBar.js.map +2 -2
- package/dist/presentation/ClipViewControls.d.ts +3 -3
- package/dist/presentation/ClipViewControls.js +59 -64
- package/dist/presentation/ClipViewControls.js.map +2 -2
- package/dist/presentation/PresentControls.d.ts +11 -0
- package/dist/presentation/PresentControls.js +117 -0
- package/dist/presentation/PresentControls.js.map +7 -0
- package/dist/presentation/PresenterView.js +36 -5
- package/dist/presentation/PresenterView.js.map +2 -2
- package/dist/presentation/SlidesEditor.js +73 -43
- package/dist/presentation/SlidesEditor.js.map +2 -2
- package/dist/presentation/StageItem.js +0 -5
- package/dist/presentation/StageItem.js.map +2 -2
- package/dist/presentation/panel-id.d.ts +12 -2
- package/dist/presentation/panel-id.js +6 -1
- package/dist/presentation/panel-id.js.map +2 -2
- package/dist/presentation/slide-layout.d.ts +5 -1
- package/dist/presentation/slide-layout.js +16 -0
- package/dist/presentation/slide-layout.js.map +2 -2
- package/dist/settings/index.cjs +146 -146
- package/dist/shell/PanelPortal.js +13 -4
- package/dist/shell/PanelPortal.js.map +2 -2
- package/dist/shell/index.cjs +92 -91
- package/dist/shell/panel-windows.js +1 -0
- package/dist/shell/panel-windows.js.map +2 -2
- package/dist/studio/index.cjs +28 -28
- package/dist/styles.css +1 -1
- package/dist/workflow-canvas/index.cjs +52 -52
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedPresentation-4HLDZDWV.cjs +0 -183
- package/dist/ConnectedPresentation-4HLDZDWV.cjs.map +0 -1
- package/dist/ConnectedSlidesTab-7QDE2CZD.cjs.map +0 -1
- package/dist/FilesViewerDialog-IZI63FOV.cjs.map +0 -1
- package/dist/ai-KBYNRNZ6.cjs.map +0 -1
- package/dist/chunk-5LTIZ44D.cjs.map +0 -1
- package/dist/chunk-7VUJGHMY.cjs.map +0 -1
- package/dist/chunk-GX2EBMJW.cjs.map +0 -1
- package/dist/chunk-JZEYHDWJ.cjs.map +0 -1
- package/dist/chunk-LHWOKOMP.cjs.map +0 -1
- package/dist/chunk-Q3XJUXID.cjs.map +0 -1
- package/dist/chunk-QFXILJMJ.cjs.map +0 -1
- package/dist/chunk-VJ5ZLRBD.cjs.map +0 -1
- package/dist/chunk-XTR26TNE.cjs.map +0 -1
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var chunkDWMWEALB_cjs = require('./chunk-DWMWEALB.cjs');
|
|
5
|
+
require('./chunk-WOOOMTTA.cjs');
|
|
6
|
+
var chunk6OK7ESTL_cjs = require('./chunk-6OK7ESTL.cjs');
|
|
7
|
+
require('./chunk-5GCCUXMT.cjs');
|
|
8
|
+
require('./chunk-2F57IO7S.cjs');
|
|
9
|
+
require('./chunk-UFT22LAB.cjs');
|
|
10
|
+
var chunkWFMWKPGY_cjs = require('./chunk-WFMWKPGY.cjs');
|
|
11
|
+
var chunk4TTX6ZNS_cjs = require('./chunk-4TTX6ZNS.cjs');
|
|
12
|
+
var chunkPL7HUTM3_cjs = require('./chunk-PL7HUTM3.cjs');
|
|
13
|
+
var chunkGFUOCGY6_cjs = require('./chunk-GFUOCGY6.cjs');
|
|
14
|
+
require('./chunk-HYUKPHCT.cjs');
|
|
15
|
+
require('./chunk-WAV762GP.cjs');
|
|
16
|
+
require('./chunk-K4763GD5.cjs');
|
|
17
|
+
require('./chunk-2RLA6QO2.cjs');
|
|
18
|
+
require('./chunk-7JLJH5CW.cjs');
|
|
19
|
+
require('./chunk-EVZH6Z5O.cjs');
|
|
20
|
+
require('./chunk-WXUU3COI.cjs');
|
|
21
|
+
require('./chunk-AHDJXIUB.cjs');
|
|
22
|
+
require('./chunk-YVCOQHCE.cjs');
|
|
23
|
+
require('./chunk-JV5TVUOU.cjs');
|
|
24
|
+
require('./chunk-VZOOGA47.cjs');
|
|
25
|
+
require('./chunk-HQDR43JC.cjs');
|
|
26
|
+
require('./chunk-JR2YSBD5.cjs');
|
|
27
|
+
require('./chunk-3YZKDCWY.cjs');
|
|
28
|
+
require('./chunk-SJSGSHIT.cjs');
|
|
29
|
+
require('./chunk-XJEXFEWG.cjs');
|
|
30
|
+
require('./chunk-YZSQ7F5K.cjs');
|
|
31
|
+
require('./chunk-FX3K6LNZ.cjs');
|
|
32
|
+
require('./chunk-QRAQZTJE.cjs');
|
|
33
|
+
require('./chunk-UDSHVNU3.cjs');
|
|
34
|
+
require('./chunk-IPSHAMO2.cjs');
|
|
35
|
+
require('./chunk-PPCATBOY.cjs');
|
|
36
|
+
require('./chunk-TKHCIHE2.cjs');
|
|
37
|
+
require('./chunk-JDFBEGQO.cjs');
|
|
38
|
+
require('./chunk-ULWRNGGE.cjs');
|
|
39
|
+
require('./chunk-PLIF5CUV.cjs');
|
|
40
|
+
var react$1 = require('react');
|
|
41
|
+
var lucideReact = require('lucide-react');
|
|
42
|
+
var react = require('@arbidocs/react');
|
|
43
|
+
var ui = require('@arbidocs/react/ui');
|
|
44
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
45
|
+
|
|
46
|
+
var CONTROL = "inline-flex size-8 items-center justify-center rounded-full text-white/85 hover:bg-white/15 hover:text-white disabled:opacity-30 disabled:hover:bg-transparent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60 pointer-coarse:size-11";
|
|
47
|
+
function Control({
|
|
48
|
+
label,
|
|
49
|
+
onClick,
|
|
50
|
+
disabled,
|
|
51
|
+
children,
|
|
52
|
+
testId
|
|
53
|
+
}) {
|
|
54
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
55
|
+
"button",
|
|
56
|
+
{
|
|
57
|
+
type: "button",
|
|
58
|
+
className: CONTROL,
|
|
59
|
+
title: label,
|
|
60
|
+
"aria-label": label,
|
|
61
|
+
disabled,
|
|
62
|
+
onClick: (event) => {
|
|
63
|
+
event.stopPropagation();
|
|
64
|
+
onClick();
|
|
65
|
+
},
|
|
66
|
+
"data-testid": testId,
|
|
67
|
+
children
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
function PresentControls({ view, shown }) {
|
|
72
|
+
const current = chunk4TTX6ZNS_cjs.usePresentation((s) => s.current);
|
|
73
|
+
const count = chunk4TTX6ZNS_cjs.usePresentation((s) => s.slides.length);
|
|
74
|
+
const blank = chunk4TTX6ZNS_cjs.usePresentation((s) => s.blank);
|
|
75
|
+
const actions = chunk4TTX6ZNS_cjs.usePresentation.getState();
|
|
76
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
77
|
+
"div",
|
|
78
|
+
{
|
|
79
|
+
className: ui.cn(
|
|
80
|
+
"absolute bottom-4 left-4 z-30 flex items-center gap-0.5 rounded-full bg-black/60 p-1 text-white shadow-lg backdrop-blur transition-opacity duration-300",
|
|
81
|
+
shown ? "opacity-100" : "pointer-events-none opacity-0"
|
|
82
|
+
),
|
|
83
|
+
onPointerDown: (event) => event.stopPropagation(),
|
|
84
|
+
onDoubleClick: (event) => event.stopPropagation(),
|
|
85
|
+
role: "toolbar",
|
|
86
|
+
"aria-label": "Slideshow",
|
|
87
|
+
"data-testid": "present-controls",
|
|
88
|
+
children: [
|
|
89
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
90
|
+
Control,
|
|
91
|
+
{
|
|
92
|
+
label: "Previous slide (\u2190)",
|
|
93
|
+
onClick: () => actions.goTo(current - 1),
|
|
94
|
+
disabled: current === 0,
|
|
95
|
+
testId: "present-previous",
|
|
96
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "size-4" })
|
|
97
|
+
}
|
|
98
|
+
),
|
|
99
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
100
|
+
"span",
|
|
101
|
+
{
|
|
102
|
+
className: "min-w-12 text-center text-xs tabular-nums text-white/85",
|
|
103
|
+
"data-testid": "present-position",
|
|
104
|
+
children: [
|
|
105
|
+
current + 1,
|
|
106
|
+
" / ",
|
|
107
|
+
count
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
),
|
|
111
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
112
|
+
Control,
|
|
113
|
+
{
|
|
114
|
+
label: "Next slide (\u2192, or click the slide)",
|
|
115
|
+
onClick: () => actions.goTo(current + 1),
|
|
116
|
+
disabled: current >= count - 1,
|
|
117
|
+
testId: "present-next",
|
|
118
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-4" })
|
|
119
|
+
}
|
|
120
|
+
),
|
|
121
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-1 h-4 w-px bg-white/25" }),
|
|
122
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
123
|
+
Control,
|
|
124
|
+
{
|
|
125
|
+
label: blank ? "Show the slide (B)" : "Blank the screen (B)",
|
|
126
|
+
onClick: () => actions.setBlank(!blank),
|
|
127
|
+
testId: "present-blank",
|
|
128
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.EyeOff, { className: ui.cn("size-4", blank && "text-amber-300") })
|
|
129
|
+
}
|
|
130
|
+
),
|
|
131
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
132
|
+
Control,
|
|
133
|
+
{
|
|
134
|
+
label: "Full screen (F)",
|
|
135
|
+
onClick: () => view && chunkWFMWKPGY_cjs.toggleFullscreen(view),
|
|
136
|
+
testId: "present-fullscreen",
|
|
137
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Maximize, { className: "size-4" })
|
|
138
|
+
}
|
|
139
|
+
),
|
|
140
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
141
|
+
Control,
|
|
142
|
+
{
|
|
143
|
+
label: "Stop presenting (Esc)",
|
|
144
|
+
onClick: () => actions.setPresenting(false),
|
|
145
|
+
testId: "present-stop",
|
|
146
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "size-3.5 fill-current" })
|
|
147
|
+
}
|
|
148
|
+
)
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
var PRESENT_WIDTH = 1280;
|
|
154
|
+
function useStageShapedWindow(view, presenting) {
|
|
155
|
+
react$1.useEffect(() => {
|
|
156
|
+
if (!view || !presenting || !view.opener) return;
|
|
157
|
+
const before = { width: view.outerWidth, height: view.outerHeight };
|
|
158
|
+
const chromeWidth = view.outerWidth - view.innerWidth;
|
|
159
|
+
const chromeHeight = view.outerHeight - view.innerHeight;
|
|
160
|
+
const width = Math.max(
|
|
161
|
+
view.innerWidth,
|
|
162
|
+
Math.min(PRESENT_WIDTH, Math.round((view.screen.availWidth - chromeWidth) * 0.6))
|
|
163
|
+
);
|
|
164
|
+
const height = Math.min(
|
|
165
|
+
Math.round(width / chunk4TTX6ZNS_cjs.STAGE_ASPECT),
|
|
166
|
+
view.screen.availHeight - chromeHeight
|
|
167
|
+
);
|
|
168
|
+
try {
|
|
169
|
+
view.resizeTo(Math.round(height * chunk4TTX6ZNS_cjs.STAGE_ASPECT) + chromeWidth, height + chromeHeight);
|
|
170
|
+
} catch {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
return () => {
|
|
174
|
+
try {
|
|
175
|
+
if (!view.closed) view.resizeTo(before.width, before.height);
|
|
176
|
+
} catch {
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}, [view, presenting]);
|
|
180
|
+
}
|
|
181
|
+
var IDLE_MS = 2200;
|
|
182
|
+
function usePointerActive(view) {
|
|
183
|
+
const [active, setActive] = react$1.useState(true);
|
|
184
|
+
react$1.useEffect(() => {
|
|
185
|
+
if (!view) return;
|
|
186
|
+
setActive(true);
|
|
187
|
+
let timer = view.setTimeout(() => setActive(false), IDLE_MS);
|
|
188
|
+
const wake = () => {
|
|
189
|
+
setActive(true);
|
|
190
|
+
view.clearTimeout(timer);
|
|
191
|
+
timer = view.setTimeout(() => setActive(false), IDLE_MS);
|
|
192
|
+
};
|
|
193
|
+
view.addEventListener("pointermove", wake);
|
|
194
|
+
view.addEventListener("keydown", wake);
|
|
195
|
+
return () => {
|
|
196
|
+
view.clearTimeout(timer);
|
|
197
|
+
view.removeEventListener("pointermove", wake);
|
|
198
|
+
view.removeEventListener("keydown", wake);
|
|
199
|
+
};
|
|
200
|
+
}, [view]);
|
|
201
|
+
return active;
|
|
202
|
+
}
|
|
203
|
+
function PresenterView({ onPresent, ...editor }) {
|
|
204
|
+
const presenting = chunk4TTX6ZNS_cjs.usePresentation((s) => s.presenting);
|
|
205
|
+
const [view, setView] = react$1.useState(null);
|
|
206
|
+
const rootRef = react$1.useCallback((node) => {
|
|
207
|
+
if (node) setView(node.ownerDocument.defaultView);
|
|
208
|
+
}, []);
|
|
209
|
+
chunkWFMWKPGY_cjs.usePresenterKeys(presenting ? view : null, true);
|
|
210
|
+
useStageShapedWindow(view, presenting);
|
|
211
|
+
const active = usePointerActive(presenting ? view : null);
|
|
212
|
+
if (presenting) {
|
|
213
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
214
|
+
"div",
|
|
215
|
+
{
|
|
216
|
+
ref: rootRef,
|
|
217
|
+
className: "relative h-full w-full select-none bg-black",
|
|
218
|
+
style: { cursor: active ? "default" : "none" },
|
|
219
|
+
onClick: () => {
|
|
220
|
+
const state = chunk4TTX6ZNS_cjs.usePresentation.getState();
|
|
221
|
+
state.goTo(state.current + 1);
|
|
222
|
+
},
|
|
223
|
+
onDoubleClick: () => view && chunkWFMWKPGY_cjs.toggleFullscreen(view),
|
|
224
|
+
"data-testid": "presentation-present",
|
|
225
|
+
children: [
|
|
226
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkDWMWEALB_cjs.PresentationStage, {}),
|
|
227
|
+
/* @__PURE__ */ jsxRuntime.jsx(PresentControls, { view, shown: active })
|
|
228
|
+
]
|
|
229
|
+
}
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: rootRef, className: "h-full min-h-0", "data-testid": "presenter-view", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
233
|
+
chunkDWMWEALB_cjs.SlidesEditor,
|
|
234
|
+
{
|
|
235
|
+
...editor,
|
|
236
|
+
onPresent: onPresent ?? (() => chunk4TTX6ZNS_cjs.usePresentation.getState().setPresenting(true))
|
|
237
|
+
}
|
|
238
|
+
) });
|
|
239
|
+
}
|
|
240
|
+
function ConnectedPresentation() {
|
|
241
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkPL7HUTM3_cjs.ConnectedDocumentToolsProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(PresentationWindow, {}) });
|
|
242
|
+
}
|
|
243
|
+
function PresentationWindow() {
|
|
244
|
+
const session = react.useArbiSessionStore();
|
|
245
|
+
const notify = chunk4TTX6ZNS_cjs.usePresentation((s) => s.notify);
|
|
246
|
+
const presenting = chunk4TTX6ZNS_cjs.usePresentation((s) => s.presenting);
|
|
247
|
+
const isOpen = react.useArbiSessionState((state) => react.isPanelOpen(state, chunkGFUOCGY6_cjs.PRESENTATION_PANEL));
|
|
248
|
+
const { user } = react.useArbiSession();
|
|
249
|
+
const userId = user?.external_id ?? null;
|
|
250
|
+
const shownFor = react$1.useRef(userId);
|
|
251
|
+
const { downloadFile } = chunkDWMWEALB_cjs.usePresentationFiles();
|
|
252
|
+
const logoId = chunk4TTX6ZNS_cjs.usePresentation((s) => s.theme.logo?.documentId ?? null);
|
|
253
|
+
const controller = chunkDWMWEALB_cjs.usePresentationController(isOpen && !presenting);
|
|
254
|
+
react$1.useEffect(() => {
|
|
255
|
+
if (shownFor.current === userId) return;
|
|
256
|
+
shownFor.current = userId;
|
|
257
|
+
chunk4TTX6ZNS_cjs.usePresentation.getState().reset();
|
|
258
|
+
session.closePanel(chunkGFUOCGY6_cjs.PRESENTATION_PANEL);
|
|
259
|
+
}, [userId, session]);
|
|
260
|
+
react$1.useEffect(() => {
|
|
261
|
+
if (!logoId) return;
|
|
262
|
+
let current = true;
|
|
263
|
+
downloadFile(logoId).then((image) => current && chunk4TTX6ZNS_cjs.usePresentation.getState().setLogoImage(image)).catch(() => current && notify("The logo could not be read", "error"));
|
|
264
|
+
return () => {
|
|
265
|
+
current = false;
|
|
266
|
+
};
|
|
267
|
+
}, [logoId, downloadFile, notify]);
|
|
268
|
+
react$1.useEffect(() => {
|
|
269
|
+
if (!isOpen) chunk4TTX6ZNS_cjs.usePresentation.getState().setPresenting(false);
|
|
270
|
+
}, [isOpen]);
|
|
271
|
+
const wasPresenting = react$1.useRef(presenting);
|
|
272
|
+
react$1.useEffect(() => {
|
|
273
|
+
if (wasPresenting.current && !presenting && isOpen && chunkGFUOCGY6_cjs.presentationWindowOnlyPresents()) {
|
|
274
|
+
session.closePanel(chunkGFUOCGY6_cjs.PRESENTATION_PANEL);
|
|
275
|
+
}
|
|
276
|
+
wasPresenting.current = presenting;
|
|
277
|
+
}, [presenting, isOpen, session]);
|
|
278
|
+
const onClose = react$1.useCallback(() => session.closePanel(chunkGFUOCGY6_cjs.PRESENTATION_PANEL), [session]);
|
|
279
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
280
|
+
chunk6OK7ESTL_cjs.ConnectedPanelHost,
|
|
281
|
+
{
|
|
282
|
+
panelId: chunkGFUOCGY6_cjs.PRESENTATION_PANEL,
|
|
283
|
+
isOpen,
|
|
284
|
+
onClose,
|
|
285
|
+
title: "Presentation",
|
|
286
|
+
defaultMode: "popout",
|
|
287
|
+
defaultWidth: 960,
|
|
288
|
+
closeTestId: "presentation-panel-close",
|
|
289
|
+
children: () => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
290
|
+
!presenting && controller.dialogs,
|
|
291
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
292
|
+
PresenterView,
|
|
293
|
+
{
|
|
294
|
+
...controller.editor,
|
|
295
|
+
actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
296
|
+
controller.editor.actions,
|
|
297
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
298
|
+
ui.Button,
|
|
299
|
+
{
|
|
300
|
+
type: "button",
|
|
301
|
+
size: "icon",
|
|
302
|
+
variant: "ghost",
|
|
303
|
+
className: "size-8 text-muted-foreground hover:text-foreground pointer-coarse:size-11",
|
|
304
|
+
title: "Back into the app's viewer",
|
|
305
|
+
"aria-label": "Back to the viewer",
|
|
306
|
+
onClick: onClose,
|
|
307
|
+
"data-testid": "presentation-pop-in",
|
|
308
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PanelLeftClose, { className: "size-4" })
|
|
309
|
+
}
|
|
310
|
+
)
|
|
311
|
+
] })
|
|
312
|
+
}
|
|
313
|
+
)
|
|
314
|
+
] })
|
|
315
|
+
}
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
exports.ConnectedPresentation = ConnectedPresentation;
|
|
320
|
+
//# sourceMappingURL=ConnectedPresentation-5DOJ35XL.cjs.map
|
|
321
|
+
//# sourceMappingURL=ConnectedPresentation-5DOJ35XL.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/presentation/PresentControls.tsx","../src/presentation/PresenterView.tsx","../src/connection/presentation/ConnectedPresentation.tsx"],"names":["jsx","usePresentation","jsxs","cn","ChevronLeft","ChevronRight","EyeOff","toggleFullscreen","Maximize","Square","useEffect","STAGE_ASPECT","useState","useCallback","usePresenterKeys","PresentationStage","SlidesEditor","ConnectedDocumentToolsProvider","useArbiSessionStore","useArbiSessionState","isPanelOpen","PRESENTATION_PANEL","useArbiSession","useRef","usePresentationFiles","usePresentationController","presentationWindowOnlyPresents","ConnectedPanelHost","Fragment","Button","PanelLeftClose"],"mappings":"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","file":"ConnectedPresentation-5DOJ35XL.cjs","sourcesContent":["/**\n * The presented slides' controls, bottom left: previous and next slide (with where you are),\n * blank, full screen and stop. Like a slideshow's, they show while the pointer moves (or a key is\n * pressed) and fade after a moment, with the pointer, so a shared screen rarely shows them.\n */\n\nimport type { ReactNode } from 'react'\nimport { ChevronLeft, ChevronRight, EyeOff, Maximize, Square } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { usePresentation } from './store'\nimport { toggleFullscreen } from './usePresenterKeys'\n\nconst CONTROL =\n 'inline-flex size-8 items-center justify-center rounded-full text-white/85 hover:bg-white/15 hover:text-white disabled:opacity-30 disabled:hover:bg-transparent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60 pointer-coarse:size-11'\n\nfunction Control({\n label,\n onClick,\n disabled,\n children,\n testId,\n}: {\n label: string\n onClick: () => void\n disabled?: boolean\n children: ReactNode\n testId: string\n}) {\n return (\n <button\n type=\"button\"\n className={CONTROL}\n title={label}\n aria-label={label}\n disabled={disabled}\n onClick={(event) => {\n // A click on the controls is not a click on the slide (which goes to the next one).\n event.stopPropagation()\n onClick()\n }}\n data-testid={testId}\n >\n {children}\n </button>\n )\n}\n\nexport interface PresentControlsProps {\n /** The window presented in (full screen is that window's). */\n view: Window | null\n shown: boolean\n}\n\nexport function PresentControls({ view, shown }: PresentControlsProps) {\n const current = usePresentation((s) => s.current)\n const count = usePresentation((s) => s.slides.length)\n const blank = usePresentation((s) => s.blank)\n const actions = usePresentation.getState()\n return (\n <div\n className={cn(\n 'absolute bottom-4 left-4 z-30 flex items-center gap-0.5 rounded-full bg-black/60 p-1 text-white shadow-lg backdrop-blur transition-opacity duration-300',\n shown ? 'opacity-100' : 'pointer-events-none opacity-0'\n )}\n onPointerDown={(event) => event.stopPropagation()}\n onDoubleClick={(event) => event.stopPropagation()}\n role=\"toolbar\"\n aria-label=\"Slideshow\"\n data-testid=\"present-controls\"\n >\n <Control\n label=\"Previous slide (←)\"\n onClick={() => actions.goTo(current - 1)}\n disabled={current === 0}\n testId=\"present-previous\"\n >\n <ChevronLeft className=\"size-4\" />\n </Control>\n <span\n className=\"min-w-12 text-center text-xs tabular-nums text-white/85\"\n data-testid=\"present-position\"\n >\n {current + 1} / {count}\n </span>\n <Control\n label=\"Next slide (→, or click the slide)\"\n onClick={() => actions.goTo(current + 1)}\n disabled={current >= count - 1}\n testId=\"present-next\"\n >\n <ChevronRight className=\"size-4\" />\n </Control>\n <div className=\"mx-1 h-4 w-px bg-white/25\" />\n <Control\n label={blank ? 'Show the slide (B)' : 'Blank the screen (B)'}\n onClick={() => actions.setBlank(!blank)}\n testId=\"present-blank\"\n >\n <EyeOff className={cn('size-4', blank && 'text-amber-300')} />\n </Control>\n <Control\n label=\"Full screen (F)\"\n onClick={() => view && toggleFullscreen(view)}\n testId=\"present-fullscreen\"\n >\n <Maximize className=\"size-4\" />\n </Control>\n <Control\n label=\"Stop presenting (Esc)\"\n onClick={() => actions.setPresenting(false)}\n testId=\"present-stop\"\n >\n <Square className=\"size-3.5 fill-current\" />\n </Control>\n </div>\n )\n}\n","/**\n * The presentation in a window of its own, in one of two modes.\n *\n * Present: nothing but the stage on black, no controls and no pointer: what is shared in a call or\n * shown on a projector. Keys drive it (arrows / Page Up / Page Down change slide, B blanks, F or\n * double-click toggles full screen, Space plays videos, Escape stops presenting).\n *\n * Edit: the slides editor (`SlidesEditor`), the same as in the viewer's tab, when the presentation\n * is edited in its own window (beside the document its clips come from).\n */\n\nimport { useCallback, useEffect, useState } from 'react'\nimport { PresentationStage } from './PresentationStage'\nimport { SlidesEditor, type SlidesEditorProps } from './SlidesEditor'\nimport { STAGE_ASPECT } from './model'\nimport { usePresentation } from './store'\nimport { toggleFullscreen, usePresenterKeys } from './usePresenterKeys'\nimport { PresentControls } from './PresentControls'\n\n/** The presenting window's page width, at most (smaller on a small screen). */\nconst PRESENT_WIDTH = 1280\n\n/**\n * While presenting in a pop-out, its page is made 16:9 and wide enough to share sharply, so a\n * shared window is all stage with no bars; editing again gives the window back its size. Only a\n * pop-out (a window this app opened) can be resized; the app's own window is left alone.\n */\nfunction useStageShapedWindow(view: Window | null, presenting: boolean) {\n useEffect(() => {\n if (!view || !presenting || !view.opener) return\n const before = { width: view.outerWidth, height: view.outerHeight }\n const chromeWidth = view.outerWidth - view.innerWidth\n const chromeHeight = view.outerHeight - view.innerHeight\n // Wide enough for a sharp share (a call receives about what the window shows), and 16:9.\n const width = Math.max(\n view.innerWidth,\n Math.min(PRESENT_WIDTH, Math.round((view.screen.availWidth - chromeWidth) * 0.6))\n )\n const height = Math.min(\n Math.round(width / STAGE_ASPECT),\n view.screen.availHeight - chromeHeight\n )\n try {\n view.resizeTo(Math.round(height * STAGE_ASPECT) + chromeWidth, height + chromeHeight)\n } catch {\n return // not resizable: the stage letterboxes in black\n }\n return () => {\n try {\n if (!view.closed) view.resizeTo(before.width, before.height)\n } catch {\n // gone or not resizable\n }\n }\n }, [view, presenting])\n}\n\n/** How long the pointer (or a key) has to rest before the controls fade. */\nconst IDLE_MS = 2200\n\n/** The pointer has moved (or a key was pressed) in `view` within the last moment. */\nfunction usePointerActive(view: Window | null): boolean {\n const [active, setActive] = useState(true)\n useEffect(() => {\n if (!view) return\n setActive(true)\n let timer = view.setTimeout(() => setActive(false), IDLE_MS)\n const wake = () => {\n setActive(true)\n view.clearTimeout(timer)\n timer = view.setTimeout(() => setActive(false), IDLE_MS)\n }\n view.addEventListener('pointermove', wake)\n view.addEventListener('keydown', wake)\n return () => {\n view.clearTimeout(timer)\n view.removeEventListener('pointermove', wake)\n view.removeEventListener('keydown', wake)\n }\n }, [view])\n return active\n}\n\nexport type PresenterViewProps = Omit<SlidesEditorProps, 'onPresent'> & {\n /** Present (default: here, in this window). */\n onPresent?: () => void\n}\n\nexport function PresenterView({ onPresent, ...editor }: PresenterViewProps) {\n const presenting = usePresentation((s) => s.presenting)\n const [view, setView] = useState<Window | null>(null)\n // The keys work in whichever window the presenter is in.\n const rootRef = useCallback((node: HTMLDivElement | null) => {\n if (node) setView(node.ownerDocument.defaultView)\n }, [])\n usePresenterKeys(presenting ? view : null, true)\n useStageShapedWindow(view, presenting)\n\n const active = usePointerActive(presenting ? view : null)\n\n if (presenting) {\n return (\n <div\n ref={rootRef}\n className=\"relative h-full w-full select-none bg-black\"\n // The pointer shows while it moves, with the controls; idle, nothing but the slide.\n style={{ cursor: active ? 'default' : 'none' }}\n // A click on the slide goes to the next one, as in a slideshow.\n onClick={() => {\n const state = usePresentation.getState()\n state.goTo(state.current + 1)\n }}\n onDoubleClick={() => view && toggleFullscreen(view)}\n data-testid=\"presentation-present\"\n >\n <PresentationStage />\n <PresentControls view={view} shown={active} />\n </div>\n )\n }\n return (\n <div ref={rootRef} className=\"h-full min-h-0\" data-testid=\"presenter-view\">\n <SlidesEditor\n {...editor}\n onPresent={onPresent ?? (() => usePresentation.getState().setPresenting(true))}\n />\n </div>\n )\n}\n","/**\n * The presentation's own window, mounted once by the app shell (the session's `PRESENTATION_PANEL`,\n * a pop-out). It presents: the slides alone, what is shared in a call or put full screen; or, when\n * the editor is popped out of the viewer's slides tab, it edits there, beside the documents its\n * clips come from. A window opened only to present closes when presenting ends.\n *\n * It also keeps what the presentation needs wherever it is edited: the theme's logo image, read\n * when the logo changes; and a clean slate when the session signs out or another user signs in\n * (the presentation holds decrypted files in memory).\n */\n\nimport { useCallback, useEffect, useRef } from 'react'\nimport { PanelLeftClose } from 'lucide-react'\nimport {\n isPanelOpen,\n useArbiSession,\n useArbiSessionState,\n useArbiSessionStore,\n} from '@arbidocs/react'\nimport { Button } from '@arbidocs/react/ui'\nimport { ConnectedPanelHost } from '../panels/ConnectedPanelHost'\nimport { ConnectedDocumentToolsProvider } from '../viewer/ConnectedDocumentToolsProvider'\nimport { PRESENTATION_PANEL, presentationWindowOnlyPresents } from '../../presentation/panel-id'\nimport { PresenterView } from '../../presentation/PresenterView'\nimport { usePresentation } from '../../presentation/store'\nimport { usePresentationController } from './usePresentationController'\nimport { usePresentationFiles } from './usePresentationFiles'\n\n/** The presentation's window, with the document tools it needs (sources, redactions). */\nexport function ConnectedPresentation() {\n return (\n <ConnectedDocumentToolsProvider>\n <PresentationWindow />\n </ConnectedDocumentToolsProvider>\n )\n}\n\nfunction PresentationWindow() {\n const session = useArbiSessionStore()\n const notify = usePresentation((s) => s.notify)\n const presenting = usePresentation((s) => s.presenting)\n const isOpen = useArbiSessionState((state) => isPanelOpen(state, PRESENTATION_PANEL))\n const { user } = useArbiSession()\n const userId = user?.external_id ?? null\n const shownFor = useRef(userId)\n const { downloadFile } = usePresentationFiles()\n const logoId = usePresentation((s) => s.theme.logo?.documentId ?? null)\n const controller = usePresentationController(isOpen && !presenting)\n\n useEffect(() => {\n if (shownFor.current === userId) return\n shownFor.current = userId\n usePresentation.getState().reset()\n session.closePanel(PRESENTATION_PANEL)\n }, [userId, session])\n\n // The theme's logo image, fetched whenever the logo changes (the theme keeps a reference only).\n useEffect(() => {\n if (!logoId) return\n let current = true\n downloadFile(logoId)\n .then((image) => current && usePresentation.getState().setLogoImage(image))\n .catch(() => current && notify('The logo could not be read', 'error'))\n return () => {\n current = false\n }\n }, [logoId, downloadFile, notify])\n\n // A closed window is not presenting.\n useEffect(() => {\n if (!isOpen) usePresentation.getState().setPresenting(false)\n }, [isOpen])\n\n // Opened only to present: closed when presenting ends (Escape).\n const wasPresenting = useRef(presenting)\n useEffect(() => {\n if (wasPresenting.current && !presenting && isOpen && presentationWindowOnlyPresents()) {\n session.closePanel(PRESENTATION_PANEL)\n }\n wasPresenting.current = presenting\n }, [presenting, isOpen, session])\n\n const onClose = useCallback(() => session.closePanel(PRESENTATION_PANEL), [session])\n\n return (\n <ConnectedPanelHost\n panelId={PRESENTATION_PANEL}\n isOpen={isOpen}\n onClose={onClose}\n title=\"Presentation\"\n defaultMode=\"popout\"\n defaultWidth={960}\n closeTestId=\"presentation-panel-close\"\n >\n {/* Inside the panel, so its dialogs open in its window. */}\n {() => (\n <>\n {!presenting && controller.dialogs}\n <PresenterView\n {...controller.editor}\n actions={\n <>\n {controller.editor.actions}\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-8 text-muted-foreground hover:text-foreground pointer-coarse:size-11\"\n title=\"Back into the app's viewer\"\n aria-label=\"Back to the viewer\"\n onClick={onClose}\n data-testid=\"presentation-pop-in\"\n >\n <PanelLeftClose className=\"size-4\" />\n </Button>\n </>\n }\n />\n </>\n )}\n </ConnectedPanelHost>\n )\n}\n"]}
|
package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs → ConnectedProductionSetDialog-LHB4VQWC.cjs}
RENAMED
|
@@ -7,10 +7,10 @@ var chunkJOUMBLGL_cjs = require('./chunk-JOUMBLGL.cjs');
|
|
|
7
7
|
require('./chunk-JR2YSBD5.cjs');
|
|
8
8
|
require('./chunk-3YZKDCWY.cjs');
|
|
9
9
|
require('./chunk-ZT5MIFLC.cjs');
|
|
10
|
-
require('./chunk-LJJJ6CYH.cjs');
|
|
11
10
|
var chunkTKHCIHE2_cjs = require('./chunk-TKHCIHE2.cjs');
|
|
12
11
|
require('./chunk-JDFBEGQO.cjs');
|
|
13
12
|
require('./chunk-ULWRNGGE.cjs');
|
|
13
|
+
require('./chunk-LJJJ6CYH.cjs');
|
|
14
14
|
require('./chunk-PLIF5CUV.cjs');
|
|
15
15
|
var react$1 = require('react');
|
|
16
16
|
var react = require('@arbidocs/react');
|
|
@@ -45,5 +45,5 @@ function ConnectedProductionSetDialog({
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
module.exports = ConnectedProductionSetDialog;
|
|
48
|
-
//# sourceMappingURL=ConnectedProductionSetDialog-
|
|
49
|
-
//# sourceMappingURL=ConnectedProductionSetDialog-
|
|
48
|
+
//# sourceMappingURL=ConnectedProductionSetDialog-LHB4VQWC.cjs.map
|
|
49
|
+
//# sourceMappingURL=ConnectedProductionSetDialog-LHB4VQWC.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/files/ConnectedProductionSetDialog.tsx"],"names":["useArbiSessionState","useDocuments","hrefFor","useBlocksEnvironment","useMemo","ConnectedDocumentToolsProvider","jsx","ProductionSetDialog"],"mappings":";;;;;;;;;;;;;;;;;AAiBe,SAAR,4BAAA,CAA8C;AAAA,EACnD,KAAA;AAAA,EACA;AACF,CAAA,EAAuC;AACrC,EAAA,MAAM,SAAS,KAAA,KAAU,IAAA;AACzB,EAAA,MAAM,mBAAA,GAAsBA,yBAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,mBAAmB,CAAA;AAC5E,EAAA,MAAM,WAAA,GAAcA,yBAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAC5D,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,GAAe,EAAC,KAAMC,kBAAA,EAAa;AACjD,EAAA,MAAM,EAAE,OAAA,EAAAC,QAAAA,EAAQ,GAAIC,sCAAA,EAAqB;AAGzC,EAAA,MAAM,QAAA,GAAWC,eAAA;AAAA,IACf,MAAM,aAAa,MAAA,CAAO,CAAC,QAAQ,mBAAA,CAAoB,QAAA,CAAS,GAAA,CAAI,WAAW,CAAC,CAAA;AAAA,IAChF,CAAC,cAAc,mBAAmB;AAAA,GACpC;AAEA,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,WAAA,EAAa,OAAO,IAAA;AAEpC,EAAA,sCACGC,gDAAA,EAAA,EACC,QAAA,kBAAAC,cAAA;AAAA,IAACC,qCAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,QAAQ,OAAA,EAAQ;AAAA,MACzC,SAAA,EAAW,QAAA;AAAA,MAGX,WAAA,EAAa,CAAC,EAAA,KAAO;AACnB,QAAA,MAAM,SAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,WAAA,EAAa,YAAY,EAAA,EAAG;AACxE,QAAA,OAAO,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAGL,SAAQ,MAAM,CAAA,IAAKA,yBAAA,CAAU,MAAM,CAAC,CAAA,CAAA;AAAA,MACzE;AAAA;AAAA,GACF,EACF,CAAA;AAEJ","file":"ConnectedProductionSetDialog-
|
|
1
|
+
{"version":3,"sources":["../src/connection/files/ConnectedProductionSetDialog.tsx"],"names":["useArbiSessionState","useDocuments","hrefFor","useBlocksEnvironment","useMemo","ConnectedDocumentToolsProvider","jsx","ProductionSetDialog"],"mappings":";;;;;;;;;;;;;;;;;AAiBe,SAAR,4BAAA,CAA8C;AAAA,EACnD,KAAA;AAAA,EACA;AACF,CAAA,EAAuC;AACrC,EAAA,MAAM,SAAS,KAAA,KAAU,IAAA;AACzB,EAAA,MAAM,mBAAA,GAAsBA,yBAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,mBAAmB,CAAA;AAC5E,EAAA,MAAM,WAAA,GAAcA,yBAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAC5D,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,GAAe,EAAC,KAAMC,kBAAA,EAAa;AACjD,EAAA,MAAM,EAAE,OAAA,EAAAC,QAAAA,EAAQ,GAAIC,sCAAA,EAAqB;AAGzC,EAAA,MAAM,QAAA,GAAWC,eAAA;AAAA,IACf,MAAM,aAAa,MAAA,CAAO,CAAC,QAAQ,mBAAA,CAAoB,QAAA,CAAS,GAAA,CAAI,WAAW,CAAC,CAAA;AAAA,IAChF,CAAC,cAAc,mBAAmB;AAAA,GACpC;AAEA,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,WAAA,EAAa,OAAO,IAAA;AAEpC,EAAA,sCACGC,gDAAA,EAAA,EACC,QAAA,kBAAAC,cAAA;AAAA,IAACC,qCAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,QAAQ,OAAA,EAAQ;AAAA,MACzC,SAAA,EAAW,QAAA;AAAA,MAGX,WAAA,EAAa,CAAC,EAAA,KAAO;AACnB,QAAA,MAAM,SAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,WAAA,EAAa,YAAY,EAAA,EAAG;AACxE,QAAA,OAAO,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAGL,SAAQ,MAAM,CAAA,IAAKA,yBAAA,CAAU,MAAM,CAAC,CAAA,CAAA;AAAA,MACzE;AAAA;AAAA,GACF,EACF,CAAA;AAEJ","file":"ConnectedProductionSetDialog-LHB4VQWC.cjs","sourcesContent":["/**\n * The `productionSet` global dialog: the selected documents (the session's selection, in the order\n * of the documents list) numbered as a production set (`ProductionSetDialog`: Bates labels,\n * optional QR links back to each document, optional index page), downloaded and, unless turned off,\n * saved to the workspace as documents derived from their sources. The API client, uploads, toasts\n * and the list refresh are the connected document tools'; each QR code links to the document\n * through the host's `hrefFor`. Blocks loads it lazily (it brings in pdf-lib when it numbers).\n */\n\nimport { useMemo } from 'react'\nimport { useArbiSessionState, useDocuments } from '@arbidocs/react'\nimport { ProductionSetDialog } from '../../document-tools/production'\nimport { hrefFor as routeHref } from '../../lib/routes'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { ConnectedDocumentToolsProvider } from '../viewer/ConnectedDocumentToolsProvider'\nimport type { GlobalDialogProps } from '../dialogs/ConnectedGlobalDialogs'\n\nexport default function ConnectedProductionSetDialog({\n props,\n onClose,\n}: GlobalDialogProps<'productionSet'>) {\n const isOpen = props !== null\n const selectedDocumentIds = useArbiSessionState((s) => s.selectedDocumentIds)\n const workspaceId = useArbiSessionState((s) => s.workspaceId)\n const { data: allDocuments = [] } = useDocuments()\n const { hrefFor } = useBlocksEnvironment()\n\n // Listed in the order of the documents list; the dialog lets the user reorder them.\n const selected = useMemo(\n () => allDocuments.filter((doc) => selectedDocumentIds.includes(doc.external_id)),\n [allDocuments, selectedDocumentIds]\n )\n\n if (!isOpen || !workspaceId) return null\n\n return (\n <ConnectedDocumentToolsProvider>\n <ProductionSetDialog\n open={isOpen}\n onOpenChange={(open) => !open && onClose()}\n documents={selected}\n // The QR code opens the document on this site: the host's link for it (`hrefFor`), else\n // the deep link of the default routes.\n documentUrl={(id) => {\n const target = { kind: 'document' as const, workspaceId, documentId: id }\n return `${window.location.origin}${hrefFor(target) ?? routeHref(target)}`\n }}\n />\n </ConnectedDocumentToolsProvider>\n )\n}\n"]}
|
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkDWMWEALB_cjs = require('./chunk-DWMWEALB.cjs');
|
|
5
5
|
require('./chunk-WOOOMTTA.cjs');
|
|
6
6
|
require('./chunk-5GCCUXMT.cjs');
|
|
7
|
-
require('./chunk-
|
|
8
|
-
require('./chunk-
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
require('./chunk-
|
|
7
|
+
require('./chunk-2F57IO7S.cjs');
|
|
8
|
+
require('./chunk-UFT22LAB.cjs');
|
|
9
|
+
var chunkWFMWKPGY_cjs = require('./chunk-WFMWKPGY.cjs');
|
|
10
|
+
var chunk4TTX6ZNS_cjs = require('./chunk-4TTX6ZNS.cjs');
|
|
11
|
+
var chunkGFUOCGY6_cjs = require('./chunk-GFUOCGY6.cjs');
|
|
12
|
+
require('./chunk-WAV762GP.cjs');
|
|
13
|
+
var chunk2RLA6QO2_cjs = require('./chunk-2RLA6QO2.cjs');
|
|
13
14
|
require('./chunk-7JLJH5CW.cjs');
|
|
14
15
|
require('./chunk-EVZH6Z5O.cjs');
|
|
15
|
-
require('./chunk-
|
|
16
|
+
require('./chunk-WXUU3COI.cjs');
|
|
16
17
|
require('./chunk-AHDJXIUB.cjs');
|
|
17
18
|
require('./chunk-YVCOQHCE.cjs');
|
|
18
|
-
require('./chunk-QRAQZTJE.cjs');
|
|
19
|
-
require('./chunk-UDSHVNU3.cjs');
|
|
20
19
|
require('./chunk-JV5TVUOU.cjs');
|
|
21
|
-
require('./chunk-IPSHAMO2.cjs');
|
|
22
20
|
require('./chunk-VZOOGA47.cjs');
|
|
23
21
|
require('./chunk-HQDR43JC.cjs');
|
|
24
22
|
require('./chunk-JR2YSBD5.cjs');
|
|
25
23
|
require('./chunk-3YZKDCWY.cjs');
|
|
26
|
-
require('./chunk-PPCATBOY.cjs');
|
|
27
24
|
var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
|
|
25
|
+
require('./chunk-QRAQZTJE.cjs');
|
|
26
|
+
require('./chunk-UDSHVNU3.cjs');
|
|
27
|
+
require('./chunk-IPSHAMO2.cjs');
|
|
28
|
+
require('./chunk-PPCATBOY.cjs');
|
|
28
29
|
var chunkTKHCIHE2_cjs = require('./chunk-TKHCIHE2.cjs');
|
|
29
30
|
require('./chunk-JDFBEGQO.cjs');
|
|
30
31
|
require('./chunk-ULWRNGGE.cjs');
|
|
@@ -36,8 +37,10 @@ var ui = require('@arbidocs/react/ui');
|
|
|
36
37
|
var jsxRuntime = require('react/jsx-runtime');
|
|
37
38
|
|
|
38
39
|
var listOf = (numbers) => numbers.length < 2 ? String(numbers[0] ?? "") : `${numbers.slice(0, -1).join(", ")} and ${numbers[numbers.length - 1]}`;
|
|
40
|
+
var AUTO_SAVE_AFTER_MS = 2500;
|
|
41
|
+
var DEFAULT_NAMES = /^(new|untitled) presentation( \d+)?$/i;
|
|
39
42
|
var STALE = "This presentation was changed outside the editor: Save to draw its slides again.";
|
|
40
|
-
var hasContent = () =>
|
|
43
|
+
var hasContent = () => chunk4TTX6ZNS_cjs.hasUnsavedChanges(chunk4TTX6ZNS_cjs.usePresentation.getState());
|
|
41
44
|
function ConnectedSlidesTab({
|
|
42
45
|
documentId,
|
|
43
46
|
version,
|
|
@@ -45,23 +48,24 @@ function ConnectedSlidesTab({
|
|
|
45
48
|
draftTitle
|
|
46
49
|
}) {
|
|
47
50
|
const session = react.useArbiSessionStore();
|
|
51
|
+
const { windows, popoutTitle } = chunk2RLA6QO2_cjs.usePanelHostSupport();
|
|
48
52
|
const { confirm } = chunkTKHCIHE2_cjs.useBlocksEnvironment();
|
|
49
|
-
const { open, save } =
|
|
50
|
-
const notify =
|
|
51
|
-
const boundTo =
|
|
52
|
-
const savedId =
|
|
53
|
+
const { open, save } = chunkDWMWEALB_cjs.usePresentationFiles();
|
|
54
|
+
const notify = chunk4TTX6ZNS_cjs.usePresentation((s) => s.notify);
|
|
55
|
+
const boundTo = chunk4TTX6ZNS_cjs.usePresentation((s) => s.boundTo);
|
|
56
|
+
const savedId = chunk4TTX6ZNS_cjs.usePresentation((s) => s.savedId);
|
|
53
57
|
const [loading, setLoading] = react$1.useState(false);
|
|
54
58
|
const isDraft = draftTitle !== void 0;
|
|
55
59
|
const target = version ? `${documentId}@v${version}` : documentId;
|
|
56
60
|
const poppedOut = react.useArbiSessionState(
|
|
57
|
-
(state) => react.isPanelOpen(state,
|
|
61
|
+
(state) => react.isPanelOpen(state, chunkGFUOCGY6_cjs.PRESENTATION_PANEL) && !chunkGFUOCGY6_cjs.presentationWindowOnlyPresents()
|
|
58
62
|
);
|
|
59
|
-
const controller =
|
|
63
|
+
const controller = chunkDWMWEALB_cjs.usePresentationController(!poppedOut);
|
|
60
64
|
const asked = react$1.useRef(null);
|
|
61
65
|
const [declined, setDeclined] = react$1.useState(false);
|
|
62
66
|
const [force, setForce] = react$1.useState(0);
|
|
63
67
|
react$1.useEffect(() => {
|
|
64
|
-
const state =
|
|
68
|
+
const state = chunk4TTX6ZNS_cjs.usePresentation.getState();
|
|
65
69
|
if (state.boundTo === target || asked.current === `${target}#${force}`) return;
|
|
66
70
|
asked.current = `${target}#${force}`;
|
|
67
71
|
setDeclined(false);
|
|
@@ -77,15 +81,15 @@ function ConnectedSlidesTab({
|
|
|
77
81
|
}
|
|
78
82
|
if (isDraft) {
|
|
79
83
|
if (state.boundTo !== null) state.reset();
|
|
80
|
-
|
|
81
|
-
|
|
84
|
+
chunk4TTX6ZNS_cjs.usePresentation.getState().bind(target);
|
|
85
|
+
chunk4TTX6ZNS_cjs.usePresentation.getState().setTitle(draftTitle || "Untitled presentation");
|
|
82
86
|
return;
|
|
83
87
|
}
|
|
84
88
|
setLoading(true);
|
|
85
89
|
try {
|
|
86
90
|
const { missing, stale, imported, changedOutside } = await open(documentId, version);
|
|
87
|
-
|
|
88
|
-
if (gathered.length)
|
|
91
|
+
chunk4TTX6ZNS_cjs.usePresentation.getState().bind(target);
|
|
92
|
+
if (gathered.length) chunk4TTX6ZNS_cjs.usePresentation.getState().adoptClips(gathered);
|
|
89
93
|
if (stale) notify(STALE, "error");
|
|
90
94
|
if (imported) {
|
|
91
95
|
notify(
|
|
@@ -116,16 +120,16 @@ function ConnectedSlidesTab({
|
|
|
116
120
|
})();
|
|
117
121
|
}, [target, documentId, version, isDraft, force, open, confirm, notify]);
|
|
118
122
|
react$1.useEffect(() => {
|
|
119
|
-
if (isDraft && boundTo === target && draftTitle)
|
|
123
|
+
if (isDraft && boundTo === target && draftTitle) chunk4TTX6ZNS_cjs.usePresentation.getState().setTitle(draftTitle);
|
|
120
124
|
}, [isDraft, boundTo, target, draftTitle]);
|
|
121
125
|
const wasBound = react$1.useRef(false);
|
|
122
126
|
react$1.useEffect(() => {
|
|
123
127
|
if (boundTo === target) wasBound.current = true;
|
|
124
128
|
if (!wasBound.current || !savedId || boundTo !== savedId || savedId === target) return;
|
|
125
129
|
if (isDraft) session.clearDraftDocument(documentId);
|
|
126
|
-
|
|
130
|
+
chunkWFMWKPGY_cjs.editPresentation(session, { kind: "open", documentId: savedId });
|
|
127
131
|
}, [isDraft, savedId, boundTo, target, documentId, session]);
|
|
128
|
-
const heldVersion =
|
|
132
|
+
const heldVersion = chunk4TTX6ZNS_cjs.usePresentation((s) => s.boundTo === target ? s.version : null);
|
|
129
133
|
const toldNewer = react$1.useRef(null);
|
|
130
134
|
react$1.useEffect(() => {
|
|
131
135
|
if (isDraft || version || !currentVersion || heldVersion === null) return;
|
|
@@ -141,7 +145,7 @@ function ConnectedSlidesTab({
|
|
|
141
145
|
}
|
|
142
146
|
setLoading(true);
|
|
143
147
|
void open(documentId).then(() => {
|
|
144
|
-
|
|
148
|
+
chunk4TTX6ZNS_cjs.usePresentation.getState().bind(target);
|
|
145
149
|
notify(`Updated to version ${currentVersion}.`, "success");
|
|
146
150
|
}).catch(
|
|
147
151
|
(error) => notify(
|
|
@@ -150,17 +154,40 @@ function ConnectedSlidesTab({
|
|
|
150
154
|
)
|
|
151
155
|
).finally(() => setLoading(false));
|
|
152
156
|
}, [currentVersion, heldVersion, isDraft, version, loading, open, documentId, target, notify]);
|
|
157
|
+
const draftHasContent = chunk4TTX6ZNS_cjs.usePresentation(
|
|
158
|
+
(state) => isDraft && state.boundTo === target && state.savedId === null && chunk4TTX6ZNS_cjs.hasUnsavedChanges(state)
|
|
159
|
+
);
|
|
160
|
+
const autoSaved = react$1.useRef(null);
|
|
161
|
+
react$1.useEffect(() => {
|
|
162
|
+
if (!draftHasContent || autoSaved.current === target) return;
|
|
163
|
+
const timer = setTimeout(() => {
|
|
164
|
+
autoSaved.current = target;
|
|
165
|
+
const state = chunk4TTX6ZNS_cjs.usePresentation.getState();
|
|
166
|
+
const firstTitle = state.slides.find((slide) => slide.caption.trim())?.caption.trim();
|
|
167
|
+
const named = state.title && !DEFAULT_NAMES.test(state.title) ? state.title : null;
|
|
168
|
+
const title = named ?? firstTitle ?? (state.title || "Untitled presentation");
|
|
169
|
+
if (title !== state.title) state.setTitle(title);
|
|
170
|
+
void save(title).catch((error) => {
|
|
171
|
+
autoSaved.current = null;
|
|
172
|
+
notify(
|
|
173
|
+
error instanceof Error ? error.message : "The presentation could not be saved",
|
|
174
|
+
"error"
|
|
175
|
+
);
|
|
176
|
+
});
|
|
177
|
+
}, AUTO_SAVE_AFTER_MS);
|
|
178
|
+
return () => clearTimeout(timer);
|
|
179
|
+
}, [draftHasContent, target, save, draftTitle, notify]);
|
|
153
180
|
react$1.useEffect(() => {
|
|
154
181
|
if (isDraft || version || savedId !== documentId || boundTo !== target) return;
|
|
155
182
|
return react.registerDocumentTurnFlush(documentId, async () => {
|
|
156
|
-
const state =
|
|
157
|
-
if (state.savedId === documentId &&
|
|
183
|
+
const state = chunk4TTX6ZNS_cjs.usePresentation.getState();
|
|
184
|
+
if (state.savedId === documentId && chunk4TTX6ZNS_cjs.hasUnsavedChanges(state)) await save(state.title);
|
|
158
185
|
});
|
|
159
186
|
}, [isDraft, version, savedId, boundTo, documentId, target, save]);
|
|
160
187
|
const present = react$1.useCallback(() => {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}, [session]);
|
|
188
|
+
chunkGFUOCGY6_cjs.openPresentation(session, { present: true, windows, title: popoutTitle("Presentation") });
|
|
189
|
+
chunk4TTX6ZNS_cjs.usePresentation.getState().setPresenting(true);
|
|
190
|
+
}, [session, windows, popoutTitle]);
|
|
164
191
|
if (poppedOut) {
|
|
165
192
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full items-center justify-center p-6", "data-testid": "slides-popped-out", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
166
193
|
chunkZW6FPIFC_cjs.EmptyState,
|
|
@@ -173,7 +200,7 @@ function ConnectedSlidesTab({
|
|
|
173
200
|
{
|
|
174
201
|
type: "button",
|
|
175
202
|
variant: "outline",
|
|
176
|
-
onClick: () => session.closePanel(
|
|
203
|
+
onClick: () => session.closePanel(chunkGFUOCGY6_cjs.PRESENTATION_PANEL),
|
|
177
204
|
children: [
|
|
178
205
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.PanelLeftClose, { className: "size-4" }),
|
|
179
206
|
"Bring it back here"
|
|
@@ -203,23 +230,20 @@ function ConnectedSlidesTab({
|
|
|
203
230
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
204
231
|
controller.dialogs,
|
|
205
232
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
206
|
-
|
|
233
|
+
chunkDWMWEALB_cjs.SlidesEditor,
|
|
207
234
|
{
|
|
208
235
|
...controller.editor,
|
|
209
|
-
|
|
210
|
-
controller.editor.
|
|
211
|
-
/* @__PURE__ */ jsxRuntime.
|
|
212
|
-
ui.
|
|
236
|
+
menuItems: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
237
|
+
controller.editor.menuItems,
|
|
238
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
239
|
+
ui.DropdownMenuItem,
|
|
213
240
|
{
|
|
214
|
-
|
|
215
|
-
size: "icon",
|
|
216
|
-
variant: "ghost",
|
|
217
|
-
className: "size-8 text-muted-foreground hover:text-foreground pointer-coarse:size-11",
|
|
218
|
-
title: "Edit in its own window, beside the documents you clip from",
|
|
219
|
-
"aria-label": "Pop out",
|
|
220
|
-
onClick: () => chunkVJ5ZLRBD_cjs.openPresentation(session),
|
|
241
|
+
onSelect: () => chunkGFUOCGY6_cjs.openPresentation(session, { windows, title: popoutTitle("Presentation") }),
|
|
221
242
|
"data-testid": "presentation-pop-out",
|
|
222
|
-
children:
|
|
243
|
+
children: [
|
|
244
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLink, { className: "size-4" }),
|
|
245
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2", children: "Edit in its own window" })
|
|
246
|
+
]
|
|
223
247
|
}
|
|
224
248
|
)
|
|
225
249
|
] }),
|
|
@@ -230,5 +254,5 @@ function ConnectedSlidesTab({
|
|
|
230
254
|
}
|
|
231
255
|
|
|
232
256
|
exports.ConnectedSlidesTab = ConnectedSlidesTab;
|
|
233
|
-
//# sourceMappingURL=ConnectedSlidesTab-
|
|
234
|
-
//# sourceMappingURL=ConnectedSlidesTab-
|
|
257
|
+
//# sourceMappingURL=ConnectedSlidesTab-7YMEDGUU.cjs.map
|
|
258
|
+
//# sourceMappingURL=ConnectedSlidesTab-7YMEDGUU.cjs.map
|