@arbidocs/blocks 0.5.125 → 0.5.126
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-ZFEX5A3U.cjs → ClippingMediaViewer-47BAXNLO.cjs} +10 -11
- package/dist/ClippingMediaViewer-47BAXNLO.cjs.map +1 -0
- package/dist/{ClippingPdfViewer-3LRTEPHV.cjs → ClippingPdfViewer-D5BYHEAH.cjs} +16 -14
- package/dist/ClippingPdfViewer-D5BYHEAH.cjs.map +1 -0
- package/dist/{ConnectedCallDock-XJOYVVAH.cjs → ConnectedCallDock-733O5M36.cjs} +11 -11
- package/dist/{ConnectedCallDock-XJOYVVAH.cjs.map → ConnectedCallDock-733O5M36.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-CUDYAPQK.cjs → ConnectedCallRoom-TAUGSRGV.cjs} +11 -11
- package/dist/{ConnectedCallRoom-CUDYAPQK.cjs.map → ConnectedCallRoom-TAUGSRGV.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-7QQ55JIO.cjs → ConnectedNativeDocxComparison-HDE522YC.cjs} +12 -12
- package/dist/{ConnectedNativeDocxComparison-7QQ55JIO.cjs.map → ConnectedNativeDocxComparison-HDE522YC.cjs.map} +1 -1
- package/dist/{ConnectedPresentation-L32JPRFI.cjs → ConnectedPresentation-SI3L77J4.cjs} +36 -37
- package/dist/ConnectedPresentation-SI3L77J4.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-P7GGNUTO.cjs → ConnectedSlidesTab-JSPU6EY5.cjs} +39 -45
- package/dist/ConnectedSlidesTab-JSPU6EY5.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-7NJ3N52V.cjs → ConnectedStreamedWordArtifact-4FHPOAFZ.cjs} +12 -12
- package/dist/{ConnectedStreamedWordArtifact-7NJ3N52V.cjs.map → ConnectedStreamedWordArtifact-4FHPOAFZ.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-BFPOFQXI.cjs → DocumentReviewCard-BDNXP3D4.cjs} +16 -16
- package/dist/{DocumentReviewCard-BFPOFQXI.cjs.map → DocumentReviewCard-BDNXP3D4.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-MHUVEZ7M.cjs → FilesViewerDialog-WQRNSKWM.cjs} +32 -33
- package/dist/FilesViewerDialog-WQRNSKWM.cjs.map +1 -0
- package/dist/{NativeDocxEditor-SIRYPMBN.cjs → NativeDocxEditor-SUDULUN3.cjs} +6 -6
- package/dist/{NativeDocxEditor-SIRYPMBN.cjs.map → NativeDocxEditor-SUDULUN3.cjs.map} +1 -1
- package/dist/{SpotlightStrip-ED22UYTM.cjs → SpotlightStrip-QQ2WUI32.cjs} +28 -29
- package/dist/SpotlightStrip-QQ2WUI32.cjs.map +1 -0
- package/dist/{WorkspaceTableView-MIFYXV3G.cjs → WorkspaceTableView-3XYAV4BV.cjs} +8 -8
- package/dist/{WorkspaceTableView-MIFYXV3G.cjs.map → WorkspaceTableView-3XYAV4BV.cjs.map} +1 -1
- package/dist/agents/index.cjs +215 -215
- package/dist/ai-IEIR7SC2.cjs +4 -4
- package/dist/auth/index.cjs +1 -1
- package/dist/calls/index.cjs +4 -4
- package/dist/chat/index.cjs +6 -6
- package/dist/{chunk-ZZZITHGK.cjs → chunk-26SFI2BH.cjs} +16 -3
- package/dist/chunk-26SFI2BH.cjs.map +1 -0
- package/dist/{chunk-CQ2RJYE2.cjs → chunk-3IH55CDE.cjs} +3 -3
- package/dist/{chunk-CQ2RJYE2.cjs.map → chunk-3IH55CDE.cjs.map} +1 -1
- package/dist/{chunk-NG2EE7HR.cjs → chunk-463QM764.cjs} +3 -3
- package/dist/{chunk-NG2EE7HR.cjs.map → chunk-463QM764.cjs.map} +1 -1
- package/dist/{chunk-7RJZIPLE.cjs → chunk-4KEQ62SL.cjs} +33 -33
- package/dist/{chunk-7RJZIPLE.cjs.map → chunk-4KEQ62SL.cjs.map} +1 -1
- package/dist/{chunk-AS6QZETU.cjs → chunk-5QERK4PK.cjs} +35 -35
- package/dist/{chunk-AS6QZETU.cjs.map → chunk-5QERK4PK.cjs.map} +1 -1
- package/dist/{chunk-UA7HOLAZ.cjs → chunk-6B4CCDDB.cjs} +5 -5
- package/dist/{chunk-UA7HOLAZ.cjs.map → chunk-6B4CCDDB.cjs.map} +1 -1
- package/dist/{chunk-AISYXX4M.cjs → chunk-7NLO7ASW.cjs} +4 -4
- package/dist/{chunk-AISYXX4M.cjs.map → chunk-7NLO7ASW.cjs.map} +1 -1
- package/dist/{chunk-QIK7E6VF.cjs → chunk-7PN3YENO.cjs} +4 -4
- package/dist/{chunk-QIK7E6VF.cjs.map → chunk-7PN3YENO.cjs.map} +1 -1
- package/dist/{chunk-JY7UUZQG.cjs → chunk-7Q46YAX4.cjs} +74 -71
- package/dist/chunk-7Q46YAX4.cjs.map +1 -0
- package/dist/{chunk-J3FFSEKO.cjs → chunk-ADDQKZ5I.cjs} +4 -4
- package/dist/{chunk-J3FFSEKO.cjs.map → chunk-ADDQKZ5I.cjs.map} +1 -1
- package/dist/{chunk-L6HTZIBD.cjs → chunk-ALK3PUUB.cjs} +3 -3
- package/dist/{chunk-L6HTZIBD.cjs.map → chunk-ALK3PUUB.cjs.map} +1 -1
- package/dist/{chunk-3ZZZO4F7.cjs → chunk-BY3QA3S5.cjs} +9 -9
- package/dist/{chunk-3ZZZO4F7.cjs.map → chunk-BY3QA3S5.cjs.map} +1 -1
- package/dist/{chunk-BLIO3B7Z.cjs → chunk-CMPHJRVV.cjs} +3 -3
- package/dist/{chunk-BLIO3B7Z.cjs.map → chunk-CMPHJRVV.cjs.map} +1 -1
- package/dist/{chunk-3UP32FM3.cjs → chunk-CQQQIZU4.cjs} +5 -5
- package/dist/{chunk-3UP32FM3.cjs.map → chunk-CQQQIZU4.cjs.map} +1 -1
- package/dist/{chunk-YOEP3I4V.cjs → chunk-E3L5DB5F.cjs} +5 -5
- package/dist/{chunk-YOEP3I4V.cjs.map → chunk-E3L5DB5F.cjs.map} +1 -1
- package/dist/{chunk-6JMW3IJ2.cjs → chunk-FB3JXSQT.cjs} +103 -100
- package/dist/chunk-FB3JXSQT.cjs.map +1 -0
- package/dist/{chunk-YVO6Z5BS.cjs → chunk-FGOJBOZX.cjs} +10 -10
- package/dist/{chunk-YVO6Z5BS.cjs.map → chunk-FGOJBOZX.cjs.map} +1 -1
- package/dist/{chunk-2K6IMIVL.cjs → chunk-GNZAH6UI.cjs} +3 -3
- package/dist/{chunk-2K6IMIVL.cjs.map → chunk-GNZAH6UI.cjs.map} +1 -1
- package/dist/{chunk-B3R62764.cjs → chunk-I4X72WUT.cjs} +6 -6
- package/dist/{chunk-B3R62764.cjs.map → chunk-I4X72WUT.cjs.map} +1 -1
- package/dist/{chunk-ORNLCBNE.cjs → chunk-JVEDKKNO.cjs} +43 -4
- package/dist/chunk-JVEDKKNO.cjs.map +1 -0
- 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-PWBRE7JA.cjs → chunk-LOB2ATS5.cjs} +24 -11
- package/dist/chunk-LOB2ATS5.cjs.map +1 -0
- package/dist/{chunk-ENOPKX7E.cjs → chunk-LXM5QXII.cjs} +3 -3
- package/dist/{chunk-ENOPKX7E.cjs.map → chunk-LXM5QXII.cjs.map} +1 -1
- package/dist/{chunk-PSB64T43.cjs → chunk-MLA2BJ2Y.cjs} +28 -28
- package/dist/{chunk-PSB64T43.cjs.map → chunk-MLA2BJ2Y.cjs.map} +1 -1
- package/dist/chunk-OALQGO5C.cjs +18 -0
- package/dist/{chunk-IRGRMJPP.cjs.map → chunk-OALQGO5C.cjs.map} +1 -1
- package/dist/{chunk-OGK377NL.cjs → chunk-OHHKBURG.cjs} +33 -33
- package/dist/{chunk-OGK377NL.cjs.map → chunk-OHHKBURG.cjs.map} +1 -1
- package/dist/{chunk-GAMRVB3I.cjs → chunk-Q6N5D3R5.cjs} +32 -7
- package/dist/chunk-Q6N5D3R5.cjs.map +1 -0
- package/dist/{chunk-4LP5MJGQ.cjs → chunk-QG2U2JGX.cjs} +4 -4
- package/dist/{chunk-4LP5MJGQ.cjs.map → chunk-QG2U2JGX.cjs.map} +1 -1
- package/dist/{chunk-MVXHTAJ4.cjs → chunk-QWVUBTW3.cjs} +9 -9
- package/dist/{chunk-MVXHTAJ4.cjs.map → chunk-QWVUBTW3.cjs.map} +1 -1
- package/dist/{chunk-OHWHYVKG.cjs → chunk-T73BHNQX.cjs} +3 -3
- package/dist/{chunk-OHWHYVKG.cjs.map → chunk-T73BHNQX.cjs.map} +1 -1
- package/dist/{chunk-ADPRIBSH.cjs → chunk-X7ALF4MP.cjs} +7 -7
- package/dist/{chunk-ADPRIBSH.cjs.map → chunk-X7ALF4MP.cjs.map} +1 -1
- package/dist/{chunk-PVJ5ODDB.cjs → chunk-XNB27POJ.cjs} +4 -4
- package/dist/{chunk-PVJ5ODDB.cjs.map → chunk-XNB27POJ.cjs.map} +1 -1
- package/dist/{chunk-TSFNLY3K.cjs → chunk-ZCU72Q76.cjs} +192 -166
- package/dist/chunk-ZCU72Q76.cjs.map +1 -0
- package/dist/connect/docx.cjs +16 -16
- package/dist/connect/index.cjs +1062 -1027
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/viewer.cjs +25 -26
- package/dist/connection/ai.d.ts +1 -0
- package/dist/connection/docx/ConnectedNativeDocxEditor.js +4 -5
- package/dist/connection/docx/ConnectedNativeDocxEditor.js.map +2 -2
- package/dist/connection/docx/save-native-version.d.ts +3 -0
- package/dist/connection/docx/save-native-version.js +19 -0
- package/dist/connection/docx/save-native-version.js.map +7 -0
- package/dist/connection/presentation/ClippingPdfViewer.js +8 -5
- package/dist/connection/presentation/ClippingPdfViewer.js.map +2 -2
- package/dist/connection/presentation/ConnectedSlidesTab.js +8 -13
- package/dist/connection/presentation/ConnectedSlidesTab.js.map +2 -2
- package/dist/connection/presentation/usePresentationController.js +24 -15
- package/dist/connection/presentation/usePresentationController.js.map +2 -2
- package/dist/connection/presentation/usePresentationFiles.d.ts +2 -1
- package/dist/connection/presentation/usePresentationFiles.js +15 -6
- package/dist/connection/presentation/usePresentationFiles.js.map +2 -2
- package/dist/connection/search/ConnectedSearchPage.d.ts +0 -11
- package/dist/connection/search/ConnectedSearchPage.js +3 -0
- package/dist/connection/search/ConnectedSearchPage.js.map +2 -2
- package/dist/connection/search/SearchResultRows.js +75 -43
- package/dist/connection/search/SearchResultRows.js.map +2 -2
- package/dist/connection/viewer/CleanViewControl.d.ts +3 -1
- package/dist/connection/viewer/CleanViewControl.js +5 -1
- package/dist/connection/viewer/CleanViewControl.js.map +2 -2
- package/dist/connection/viewer/ConnectedDocumentViewer.js +1 -1
- package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
- package/dist/connection/viewer/useCleanView.d.ts +1 -1
- package/dist/connection/viewer/useCleanView.js +2 -2
- package/dist/connection/viewer/useCleanView.js.map +2 -2
- package/dist/connection/viewer/useViewedDocument.d.ts +1 -0
- package/dist/document-tools/index.cjs +20 -20
- package/dist/docx/NativeDocxEditor.d.ts +2 -1
- package/dist/docx/NativeDocxEditor.js +30 -5
- package/dist/docx/NativeDocxEditor.js.map +2 -2
- package/dist/docx/index.cjs +38 -38
- package/dist/embed/index.cjs +19 -19
- package/dist/facts/index.cjs +64 -64
- package/dist/files/index.cjs +223 -223
- package/dist/index.cjs +523 -523
- package/dist/presentation/ClipCaptureOverlay.js +14 -1
- package/dist/presentation/ClipCaptureOverlay.js.map +2 -2
- package/dist/presentation/ClipImage.js +7 -4
- package/dist/presentation/ClipImage.js.map +2 -2
- package/dist/presentation/ClipTray.js +11 -7
- package/dist/presentation/ClipTray.js.map +2 -2
- package/dist/presentation/SlidesEditor.js +6 -2
- package/dist/presentation/SlidesEditor.js.map +2 -2
- package/dist/presentation/store.d.ts +2 -0
- package/dist/presentation/store.js +15 -0
- package/dist/presentation/store.js.map +3 -3
- package/dist/settings/index.cjs +146 -146
- package/dist/site/index.cjs +6 -6
- package/dist/studio/index.cjs +10 -10
- package/dist/workflow-canvas/index.cjs +33 -33
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ClippingMediaViewer-ZFEX5A3U.cjs.map +0 -1
- package/dist/ClippingPdfViewer-3LRTEPHV.cjs.map +0 -1
- package/dist/ConnectedPresentation-L32JPRFI.cjs.map +0 -1
- package/dist/ConnectedSlidesTab-P7GGNUTO.cjs.map +0 -1
- package/dist/FilesViewerDialog-MHUVEZ7M.cjs.map +0 -1
- package/dist/SpotlightStrip-ED22UYTM.cjs.map +0 -1
- package/dist/chunk-6JMW3IJ2.cjs.map +0 -1
- package/dist/chunk-GAMRVB3I.cjs.map +0 -1
- package/dist/chunk-GFUOCGY6.cjs +0 -32
- package/dist/chunk-GFUOCGY6.cjs.map +0 -1
- package/dist/chunk-IRGRMJPP.cjs +0 -18
- package/dist/chunk-JY7UUZQG.cjs.map +0 -1
- package/dist/chunk-ORNLCBNE.cjs.map +0 -1
- package/dist/chunk-PWBRE7JA.cjs.map +0 -1
- package/dist/chunk-TSFNLY3K.cjs.map +0 -1
- package/dist/chunk-ZZZITHGK.cjs.map +0 -1
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
4
|
+
var chunkZCU72Q76_cjs = require('./chunk-ZCU72Q76.cjs');
|
|
5
|
+
var chunkBY3QA3S5_cjs = require('./chunk-BY3QA3S5.cjs');
|
|
6
|
+
var chunk7Q46YAX4_cjs = require('./chunk-7Q46YAX4.cjs');
|
|
7
7
|
require('./chunk-WOOOMTTA.cjs');
|
|
8
8
|
var chunk6OK7ESTL_cjs = require('./chunk-6OK7ESTL.cjs');
|
|
9
9
|
require('./chunk-5GCCUXMT.cjs');
|
|
10
|
-
require('./chunk-WVZLAAIZ.cjs');
|
|
11
|
-
var chunkADPRIBSH_cjs = require('./chunk-ADPRIBSH.cjs');
|
|
12
|
-
var chunkORNLCBNE_cjs = require('./chunk-ORNLCBNE.cjs');
|
|
13
|
-
var chunkPL7HUTM3_cjs = require('./chunk-PL7HUTM3.cjs');
|
|
14
|
-
var chunkGFUOCGY6_cjs = require('./chunk-GFUOCGY6.cjs');
|
|
15
10
|
require('./chunk-2F57IO7S.cjs');
|
|
16
11
|
require('./chunk-UFT22LAB.cjs');
|
|
12
|
+
require('./chunk-WVZLAAIZ.cjs');
|
|
13
|
+
var chunkX7ALF4MP_cjs = require('./chunk-X7ALF4MP.cjs');
|
|
14
|
+
var chunkPL7HUTM3_cjs = require('./chunk-PL7HUTM3.cjs');
|
|
15
|
+
var chunkJVEDKKNO_cjs = require('./chunk-JVEDKKNO.cjs');
|
|
17
16
|
require('./chunk-HYUKPHCT.cjs');
|
|
18
17
|
require('./chunk-WAV762GP.cjs');
|
|
19
18
|
require('./chunk-K4763GD5.cjs');
|
|
@@ -24,17 +23,17 @@ require('./chunk-WXUU3COI.cjs');
|
|
|
24
23
|
require('./chunk-AHDJXIUB.cjs');
|
|
25
24
|
require('./chunk-YVCOQHCE.cjs');
|
|
26
25
|
require('./chunk-JV5TVUOU.cjs');
|
|
27
|
-
require('./chunk-VZOOGA47.cjs');
|
|
28
26
|
require('./chunk-HQDR43JC.cjs');
|
|
29
27
|
require('./chunk-JR2YSBD5.cjs');
|
|
30
28
|
require('./chunk-3YZKDCWY.cjs');
|
|
31
29
|
require('./chunk-SJSGSHIT.cjs');
|
|
30
|
+
require('./chunk-VZOOGA47.cjs');
|
|
32
31
|
require('./chunk-XJEXFEWG.cjs');
|
|
33
32
|
require('./chunk-YZSQ7F5K.cjs');
|
|
34
33
|
require('./chunk-FX3K6LNZ.cjs');
|
|
35
|
-
require('./chunk-IPSHAMO2.cjs');
|
|
36
34
|
require('./chunk-QRAQZTJE.cjs');
|
|
37
35
|
require('./chunk-UDSHVNU3.cjs');
|
|
36
|
+
require('./chunk-IPSHAMO2.cjs');
|
|
38
37
|
require('./chunk-PPCATBOY.cjs');
|
|
39
38
|
require('./chunk-TKHCIHE2.cjs');
|
|
40
39
|
require('./chunk-JDFBEGQO.cjs');
|
|
@@ -58,11 +57,11 @@ function useStageShapedWindow(view, presenting) {
|
|
|
58
57
|
Math.min(PRESENT_WIDTH, Math.round((view.screen.availWidth - chromeWidth) * 0.6))
|
|
59
58
|
);
|
|
60
59
|
const height = Math.min(
|
|
61
|
-
Math.round(width /
|
|
60
|
+
Math.round(width / chunkJVEDKKNO_cjs.STAGE_ASPECT),
|
|
62
61
|
view.screen.availHeight - chromeHeight
|
|
63
62
|
);
|
|
64
63
|
try {
|
|
65
|
-
view.resizeTo(Math.round(height *
|
|
64
|
+
view.resizeTo(Math.round(height * chunkJVEDKKNO_cjs.STAGE_ASPECT) + chromeWidth, height + chromeHeight);
|
|
66
65
|
} catch {
|
|
67
66
|
return;
|
|
68
67
|
}
|
|
@@ -75,14 +74,14 @@ function useStageShapedWindow(view, presenting) {
|
|
|
75
74
|
}, [view, presenting]);
|
|
76
75
|
}
|
|
77
76
|
function PresenterView({ onPresent, ...editor }) {
|
|
78
|
-
const presenting =
|
|
77
|
+
const presenting = chunkJVEDKKNO_cjs.usePresentation((s) => s.presenting);
|
|
79
78
|
const [view, setView] = react$1.useState(null);
|
|
80
79
|
const rootRef = react$1.useCallback((node) => {
|
|
81
80
|
if (node) setView(node.ownerDocument.defaultView);
|
|
82
81
|
}, []);
|
|
83
|
-
|
|
82
|
+
chunkX7ALF4MP_cjs.usePresenterKeys(presenting ? view : null, true);
|
|
84
83
|
useStageShapedWindow(view, presenting);
|
|
85
|
-
const active =
|
|
84
|
+
const active = chunkBY3QA3S5_cjs.usePointerActive(presenting ? view : null);
|
|
86
85
|
if (presenting) {
|
|
87
86
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
88
87
|
"div",
|
|
@@ -91,23 +90,23 @@ function PresenterView({ onPresent, ...editor }) {
|
|
|
91
90
|
className: "relative h-full w-full select-none bg-black",
|
|
92
91
|
style: { cursor: active ? "default" : "none" },
|
|
93
92
|
onClick: () => {
|
|
94
|
-
const state =
|
|
93
|
+
const state = chunkJVEDKKNO_cjs.usePresentation.getState();
|
|
95
94
|
state.goTo(state.current + 1);
|
|
96
95
|
},
|
|
97
|
-
onDoubleClick: () => view &&
|
|
96
|
+
onDoubleClick: () => view && chunkX7ALF4MP_cjs.toggleFullscreen(view),
|
|
98
97
|
"data-testid": "presentation-present",
|
|
99
98
|
children: [
|
|
100
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
101
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
99
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk7Q46YAX4_cjs.PresentationStage, {}),
|
|
100
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkBY3QA3S5_cjs.PresentControls, { view, shown: active })
|
|
102
101
|
]
|
|
103
102
|
}
|
|
104
103
|
);
|
|
105
104
|
}
|
|
106
105
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: rootRef, className: "h-full min-h-0", "data-testid": "presenter-view", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
107
|
-
|
|
106
|
+
chunkZCU72Q76_cjs.SlidesEditor,
|
|
108
107
|
{
|
|
109
108
|
...editor,
|
|
110
|
-
onPresent: onPresent ?? (() =>
|
|
109
|
+
onPresent: onPresent ?? (() => chunkJVEDKKNO_cjs.usePresentation.getState().setPresenting(true))
|
|
111
110
|
}
|
|
112
111
|
) });
|
|
113
112
|
}
|
|
@@ -116,44 +115,44 @@ function ConnectedPresentation() {
|
|
|
116
115
|
}
|
|
117
116
|
function PresentationWindow() {
|
|
118
117
|
const session = react.useArbiSessionStore();
|
|
119
|
-
const notify =
|
|
120
|
-
const presenting =
|
|
121
|
-
const isOpen = react.useArbiSessionState((state) => react.isPanelOpen(state,
|
|
118
|
+
const notify = chunkJVEDKKNO_cjs.usePresentation((s) => s.notify);
|
|
119
|
+
const presenting = chunkJVEDKKNO_cjs.usePresentation((s) => s.presenting);
|
|
120
|
+
const isOpen = react.useArbiSessionState((state) => react.isPanelOpen(state, chunkJVEDKKNO_cjs.PRESENTATION_PANEL));
|
|
122
121
|
const { user } = react.useArbiSession();
|
|
123
122
|
const userId = user?.external_id ?? null;
|
|
124
123
|
const shownFor = react$1.useRef(userId);
|
|
125
|
-
const { downloadFile } =
|
|
126
|
-
const logoId =
|
|
127
|
-
const controller =
|
|
124
|
+
const { downloadFile } = chunkZCU72Q76_cjs.usePresentationFiles();
|
|
125
|
+
const logoId = chunkJVEDKKNO_cjs.usePresentation((s) => s.theme.logo?.documentId ?? null);
|
|
126
|
+
const controller = chunkZCU72Q76_cjs.usePresentationController(isOpen && !presenting);
|
|
128
127
|
react$1.useEffect(() => {
|
|
129
128
|
if (shownFor.current === userId) return;
|
|
130
129
|
shownFor.current = userId;
|
|
131
|
-
|
|
132
|
-
session.closePanel(
|
|
130
|
+
chunkJVEDKKNO_cjs.usePresentation.getState().reset();
|
|
131
|
+
session.closePanel(chunkJVEDKKNO_cjs.PRESENTATION_PANEL);
|
|
133
132
|
}, [userId, session]);
|
|
134
133
|
react$1.useEffect(() => {
|
|
135
134
|
if (!logoId) return;
|
|
136
135
|
let current = true;
|
|
137
|
-
downloadFile(logoId).then((image) => current &&
|
|
136
|
+
downloadFile(logoId).then((image) => current && chunkJVEDKKNO_cjs.usePresentation.getState().setLogoImage(image)).catch(() => current && notify("The logo could not be read", "error"));
|
|
138
137
|
return () => {
|
|
139
138
|
current = false;
|
|
140
139
|
};
|
|
141
140
|
}, [logoId, downloadFile, notify]);
|
|
142
141
|
react$1.useEffect(() => {
|
|
143
|
-
if (!isOpen)
|
|
142
|
+
if (!isOpen) chunkJVEDKKNO_cjs.usePresentation.getState().setPresenting(false);
|
|
144
143
|
}, [isOpen]);
|
|
145
144
|
const wasPresenting = react$1.useRef(presenting);
|
|
146
145
|
react$1.useEffect(() => {
|
|
147
|
-
if (wasPresenting.current && !presenting && isOpen &&
|
|
148
|
-
session.closePanel(
|
|
146
|
+
if (wasPresenting.current && !presenting && isOpen && chunkJVEDKKNO_cjs.presentationWindowOnlyPresents()) {
|
|
147
|
+
session.closePanel(chunkJVEDKKNO_cjs.PRESENTATION_PANEL);
|
|
149
148
|
}
|
|
150
149
|
wasPresenting.current = presenting;
|
|
151
150
|
}, [presenting, isOpen, session]);
|
|
152
|
-
const onClose = react$1.useCallback(() => session.closePanel(
|
|
151
|
+
const onClose = react$1.useCallback(() => session.closePanel(chunkJVEDKKNO_cjs.PRESENTATION_PANEL), [session]);
|
|
153
152
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
154
153
|
chunk6OK7ESTL_cjs.ConnectedPanelHost,
|
|
155
154
|
{
|
|
156
|
-
panelId:
|
|
155
|
+
panelId: chunkJVEDKKNO_cjs.PRESENTATION_PANEL,
|
|
157
156
|
isOpen,
|
|
158
157
|
onClose,
|
|
159
158
|
title: "Presentation",
|
|
@@ -191,5 +190,5 @@ function PresentationWindow() {
|
|
|
191
190
|
}
|
|
192
191
|
|
|
193
192
|
exports.ConnectedPresentation = ConnectedPresentation;
|
|
194
|
-
//# sourceMappingURL=ConnectedPresentation-
|
|
195
|
-
//# sourceMappingURL=ConnectedPresentation-
|
|
193
|
+
//# sourceMappingURL=ConnectedPresentation-SI3L77J4.cjs.map
|
|
194
|
+
//# sourceMappingURL=ConnectedPresentation-SI3L77J4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/presentation/PresenterView.tsx","../src/connection/presentation/ConnectedPresentation.tsx"],"names":["useEffect","STAGE_ASPECT","usePresentation","useState","useCallback","usePresenterKeys","usePointerActive","jsxs","toggleFullscreen","jsx","PresentationStage","PresentControls","SlidesEditor","ConnectedDocumentToolsProvider","useArbiSessionStore","useArbiSessionState","isPanelOpen","PRESENTATION_PANEL","useArbiSession","useRef","usePresentationFiles","usePresentationController","presentationWindowOnlyPresents","ConnectedPanelHost","Fragment","Button","PanelLeftClose"],"mappings":"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","file":"ConnectedPresentation-SI3L77J4.cjs","sourcesContent":["/**\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'\nimport { usePointerActive } from './usePointerActive'\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\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,16 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('./chunk-
|
|
4
|
+
var chunkZCU72Q76_cjs = require('./chunk-ZCU72Q76.cjs');
|
|
5
|
+
require('./chunk-7Q46YAX4.cjs');
|
|
6
6
|
require('./chunk-WOOOMTTA.cjs');
|
|
7
7
|
require('./chunk-5GCCUXMT.cjs');
|
|
8
|
-
var chunkWVZLAAIZ_cjs = require('./chunk-WVZLAAIZ.cjs');
|
|
9
|
-
require('./chunk-ADPRIBSH.cjs');
|
|
10
|
-
var chunkORNLCBNE_cjs = require('./chunk-ORNLCBNE.cjs');
|
|
11
|
-
var chunkGFUOCGY6_cjs = require('./chunk-GFUOCGY6.cjs');
|
|
12
8
|
require('./chunk-2F57IO7S.cjs');
|
|
13
9
|
require('./chunk-UFT22LAB.cjs');
|
|
10
|
+
var chunkWVZLAAIZ_cjs = require('./chunk-WVZLAAIZ.cjs');
|
|
11
|
+
require('./chunk-X7ALF4MP.cjs');
|
|
12
|
+
var chunkJVEDKKNO_cjs = require('./chunk-JVEDKKNO.cjs');
|
|
14
13
|
require('./chunk-WAV762GP.cjs');
|
|
15
14
|
var chunk2RLA6QO2_cjs = require('./chunk-2RLA6QO2.cjs');
|
|
16
15
|
require('./chunk-7JLJH5CW.cjs');
|
|
@@ -19,14 +18,14 @@ require('./chunk-WXUU3COI.cjs');
|
|
|
19
18
|
require('./chunk-AHDJXIUB.cjs');
|
|
20
19
|
require('./chunk-YVCOQHCE.cjs');
|
|
21
20
|
require('./chunk-JV5TVUOU.cjs');
|
|
22
|
-
require('./chunk-VZOOGA47.cjs');
|
|
23
21
|
require('./chunk-HQDR43JC.cjs');
|
|
24
22
|
require('./chunk-JR2YSBD5.cjs');
|
|
25
23
|
require('./chunk-3YZKDCWY.cjs');
|
|
26
24
|
var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
|
|
27
|
-
require('./chunk-
|
|
25
|
+
require('./chunk-VZOOGA47.cjs');
|
|
28
26
|
require('./chunk-QRAQZTJE.cjs');
|
|
29
27
|
require('./chunk-UDSHVNU3.cjs');
|
|
28
|
+
require('./chunk-IPSHAMO2.cjs');
|
|
30
29
|
require('./chunk-PPCATBOY.cjs');
|
|
31
30
|
var chunkTKHCIHE2_cjs = require('./chunk-TKHCIHE2.cjs');
|
|
32
31
|
require('./chunk-JDFBEGQO.cjs');
|
|
@@ -42,7 +41,7 @@ var listOf = (numbers) => numbers.length < 2 ? String(numbers[0] ?? "") : `${num
|
|
|
42
41
|
var AUTO_SAVE_AFTER_MS = 2500;
|
|
43
42
|
var DEFAULT_NAMES = /^(new|untitled) presentation( \d+)?$/i;
|
|
44
43
|
var STALE = "This presentation was changed outside the editor: Save to draw its slides again.";
|
|
45
|
-
var hasContent = () =>
|
|
44
|
+
var hasContent = () => chunkJVEDKKNO_cjs.hasUnsavedChanges(chunkJVEDKKNO_cjs.usePresentation.getState());
|
|
46
45
|
function ConnectedSlidesTab({
|
|
47
46
|
documentId,
|
|
48
47
|
version,
|
|
@@ -52,22 +51,22 @@ function ConnectedSlidesTab({
|
|
|
52
51
|
const session = react.useArbiSessionStore();
|
|
53
52
|
const { windows, popoutTitle } = chunk2RLA6QO2_cjs.usePanelHostSupport();
|
|
54
53
|
const { confirm } = chunkTKHCIHE2_cjs.useBlocksEnvironment();
|
|
55
|
-
const { open, save } =
|
|
56
|
-
const notify =
|
|
57
|
-
const boundTo =
|
|
58
|
-
const savedId =
|
|
54
|
+
const { open, save } = chunkZCU72Q76_cjs.usePresentationFiles();
|
|
55
|
+
const notify = chunkJVEDKKNO_cjs.usePresentation((s) => s.notify);
|
|
56
|
+
const boundTo = chunkJVEDKKNO_cjs.usePresentation((s) => s.boundTo);
|
|
57
|
+
const savedId = chunkJVEDKKNO_cjs.usePresentation((s) => s.savedId);
|
|
59
58
|
const [loading, setLoading] = react$1.useState(false);
|
|
60
59
|
const isDraft = draftTitle !== void 0;
|
|
61
60
|
const target = version ? `${documentId}@v${version}` : documentId;
|
|
62
61
|
const poppedOut = react.useArbiSessionState(
|
|
63
|
-
(state) => react.isPanelOpen(state,
|
|
62
|
+
(state) => react.isPanelOpen(state, chunkJVEDKKNO_cjs.PRESENTATION_PANEL) && !chunkJVEDKKNO_cjs.presentationWindowOnlyPresents()
|
|
64
63
|
);
|
|
65
|
-
const controller =
|
|
64
|
+
const controller = chunkZCU72Q76_cjs.usePresentationController(!poppedOut);
|
|
66
65
|
const asked = react$1.useRef(null);
|
|
67
66
|
const [declined, setDeclined] = react$1.useState(false);
|
|
68
67
|
const [force, setForce] = react$1.useState(0);
|
|
69
68
|
react$1.useEffect(() => {
|
|
70
|
-
const state =
|
|
69
|
+
const state = chunkJVEDKKNO_cjs.usePresentation.getState();
|
|
71
70
|
if (state.boundTo === target || asked.current === `${target}#${force}`) return;
|
|
72
71
|
asked.current = `${target}#${force}`;
|
|
73
72
|
setDeclined(false);
|
|
@@ -83,15 +82,15 @@ function ConnectedSlidesTab({
|
|
|
83
82
|
}
|
|
84
83
|
if (isDraft) {
|
|
85
84
|
if (state.boundTo !== null) state.reset();
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
chunkJVEDKKNO_cjs.usePresentation.getState().bind(target);
|
|
86
|
+
chunkJVEDKKNO_cjs.usePresentation.getState().setTitle(draftTitle || "Untitled presentation");
|
|
88
87
|
return;
|
|
89
88
|
}
|
|
90
89
|
setLoading(true);
|
|
91
90
|
try {
|
|
92
91
|
const { missing, stale, imported, changedOutside } = await open(documentId, version);
|
|
93
|
-
|
|
94
|
-
if (gathered.length)
|
|
92
|
+
chunkJVEDKKNO_cjs.usePresentation.getState().bind(target);
|
|
93
|
+
if (gathered.length) chunkJVEDKKNO_cjs.usePresentation.getState().adoptClips(gathered);
|
|
95
94
|
if (stale) notify(STALE, "error");
|
|
96
95
|
if (imported) {
|
|
97
96
|
notify(
|
|
@@ -122,7 +121,7 @@ function ConnectedSlidesTab({
|
|
|
122
121
|
})();
|
|
123
122
|
}, [target, documentId, version, isDraft, force, open, confirm, notify]);
|
|
124
123
|
react$1.useEffect(() => {
|
|
125
|
-
if (isDraft && boundTo === target && draftTitle)
|
|
124
|
+
if (isDraft && boundTo === target && draftTitle) chunkJVEDKKNO_cjs.usePresentation.getState().setTitle(draftTitle);
|
|
126
125
|
}, [isDraft, boundTo, target, draftTitle]);
|
|
127
126
|
const wasBound = react$1.useRef(false);
|
|
128
127
|
react$1.useEffect(() => {
|
|
@@ -131,7 +130,7 @@ function ConnectedSlidesTab({
|
|
|
131
130
|
if (isDraft) session.clearDraftDocument(documentId);
|
|
132
131
|
chunkWVZLAAIZ_cjs.editPresentation(session, { kind: "open", documentId: savedId });
|
|
133
132
|
}, [isDraft, savedId, boundTo, target, documentId, session]);
|
|
134
|
-
const heldVersion =
|
|
133
|
+
const heldVersion = chunkJVEDKKNO_cjs.usePresentation((s) => s.boundTo === target ? s.version : null);
|
|
135
134
|
const toldNewer = react$1.useRef(null);
|
|
136
135
|
react$1.useEffect(() => {
|
|
137
136
|
if (isDraft || version || !currentVersion || heldVersion === null) return;
|
|
@@ -147,7 +146,7 @@ function ConnectedSlidesTab({
|
|
|
147
146
|
}
|
|
148
147
|
setLoading(true);
|
|
149
148
|
void open(documentId).then(() => {
|
|
150
|
-
|
|
149
|
+
chunkJVEDKKNO_cjs.usePresentation.getState().bind(target);
|
|
151
150
|
notify(`Updated to version ${currentVersion}.`, "success");
|
|
152
151
|
}).catch(
|
|
153
152
|
(error) => notify(
|
|
@@ -156,21 +155,15 @@ function ConnectedSlidesTab({
|
|
|
156
155
|
)
|
|
157
156
|
).finally(() => setLoading(false));
|
|
158
157
|
}, [currentVersion, heldVersion, isDraft, version, loading, open, documentId, target, notify]);
|
|
159
|
-
const
|
|
160
|
-
(state) => isDraft && state.boundTo === target && state.savedId === null && chunkORNLCBNE_cjs.hasUnsavedChanges(state)
|
|
161
|
-
);
|
|
162
|
-
const autoSaved = react$1.useRef(null);
|
|
158
|
+
const editState = chunkJVEDKKNO_cjs.usePresentation((state) => state);
|
|
163
159
|
react$1.useEffect(() => {
|
|
164
|
-
if (
|
|
160
|
+
if (version || editState.boundTo !== target || !chunkJVEDKKNO_cjs.hasUnsavedChanges(editState)) return;
|
|
165
161
|
const timer = setTimeout(() => {
|
|
166
|
-
|
|
167
|
-
const state = chunkORNLCBNE_cjs.usePresentation.getState();
|
|
162
|
+
const state = chunkJVEDKKNO_cjs.usePresentation.getState();
|
|
168
163
|
const firstTitle = state.slides.find((slide) => slide.caption.trim())?.caption.trim();
|
|
169
|
-
const
|
|
170
|
-
const title = named ?? firstTitle ?? (state.title || "Untitled presentation");
|
|
164
|
+
const title = state.title && !DEFAULT_NAMES.test(state.title) ? state.title : firstTitle ?? (state.title || "Untitled presentation");
|
|
171
165
|
if (title !== state.title) state.setTitle(title);
|
|
172
|
-
void save(title).catch((error) => {
|
|
173
|
-
autoSaved.current = null;
|
|
166
|
+
void save(title, { autosave: true }).catch((error) => {
|
|
174
167
|
notify(
|
|
175
168
|
error instanceof Error ? error.message : "The presentation could not be saved",
|
|
176
169
|
"error"
|
|
@@ -178,17 +171,18 @@ function ConnectedSlidesTab({
|
|
|
178
171
|
});
|
|
179
172
|
}, AUTO_SAVE_AFTER_MS);
|
|
180
173
|
return () => clearTimeout(timer);
|
|
181
|
-
}, [
|
|
174
|
+
}, [editState, target, version, save, notify]);
|
|
182
175
|
react$1.useEffect(() => {
|
|
183
|
-
if (
|
|
176
|
+
if (version || boundTo !== target || !isDraft && savedId !== documentId) return;
|
|
184
177
|
return react.registerDocumentTurnFlush(documentId, async () => {
|
|
185
|
-
const state =
|
|
186
|
-
if (state.savedId === documentId &&
|
|
178
|
+
const state = chunkJVEDKKNO_cjs.usePresentation.getState();
|
|
179
|
+
if ((isDraft || state.savedId === documentId) && chunkJVEDKKNO_cjs.hasUnsavedChanges(state))
|
|
180
|
+
await save(state.title);
|
|
187
181
|
});
|
|
188
182
|
}, [isDraft, version, savedId, boundTo, documentId, target, save]);
|
|
189
183
|
const present = react$1.useCallback(() => {
|
|
190
|
-
|
|
191
|
-
|
|
184
|
+
chunkJVEDKKNO_cjs.openPresentation(session, { present: true, windows, title: popoutTitle("Presentation") });
|
|
185
|
+
chunkJVEDKKNO_cjs.usePresentation.getState().setPresenting(true);
|
|
192
186
|
}, [session, windows, popoutTitle]);
|
|
193
187
|
if (poppedOut) {
|
|
194
188
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full items-center justify-center p-6", "data-testid": "slides-popped-out", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -202,7 +196,7 @@ function ConnectedSlidesTab({
|
|
|
202
196
|
{
|
|
203
197
|
type: "button",
|
|
204
198
|
variant: "outline",
|
|
205
|
-
onClick: () => session.closePanel(
|
|
199
|
+
onClick: () => session.closePanel(chunkJVEDKKNO_cjs.PRESENTATION_PANEL),
|
|
206
200
|
children: [
|
|
207
201
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.PanelLeftClose, { className: "size-4" }),
|
|
208
202
|
"Bring it back here"
|
|
@@ -232,7 +226,7 @@ function ConnectedSlidesTab({
|
|
|
232
226
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
233
227
|
controller.dialogs,
|
|
234
228
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
235
|
-
|
|
229
|
+
chunkZCU72Q76_cjs.SlidesEditor,
|
|
236
230
|
{
|
|
237
231
|
...controller.editor,
|
|
238
232
|
menuItems: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -240,7 +234,7 @@ function ConnectedSlidesTab({
|
|
|
240
234
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
241
235
|
ui.DropdownMenuItem,
|
|
242
236
|
{
|
|
243
|
-
onSelect: () =>
|
|
237
|
+
onSelect: () => chunkJVEDKKNO_cjs.openPresentation(session, { windows, title: popoutTitle("Presentation") }),
|
|
244
238
|
"data-testid": "presentation-pop-out",
|
|
245
239
|
children: [
|
|
246
240
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLink, { className: "size-4" }),
|
|
@@ -256,5 +250,5 @@ function ConnectedSlidesTab({
|
|
|
256
250
|
}
|
|
257
251
|
|
|
258
252
|
exports.ConnectedSlidesTab = ConnectedSlidesTab;
|
|
259
|
-
//# sourceMappingURL=ConnectedSlidesTab-
|
|
260
|
-
//# sourceMappingURL=ConnectedSlidesTab-
|
|
253
|
+
//# sourceMappingURL=ConnectedSlidesTab-JSPU6EY5.cjs.map
|
|
254
|
+
//# sourceMappingURL=ConnectedSlidesTab-JSPU6EY5.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/connection/presentation/ConnectedSlidesTab.tsx"],"names":["hasUnsavedChanges","usePresentation","useArbiSessionStore","usePanelHostSupport","useBlocksEnvironment","usePresentationFiles","useState","useArbiSessionState","isPanelOpen","PRESENTATION_PANEL","presentationWindowOnlyPresents","usePresentationController","useRef","useEffect","editPresentation","registerDocumentTurnFlush","useCallback","openPresentation","jsx","EmptyState","ExternalLink","jsxs","Button","PanelLeftClose","Presentation","Loader2","Fragment","SlidesEditor","DropdownMenuItem"],"mappings":"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","file":"ConnectedSlidesTab-JSPU6EY5.cjs","sourcesContent":["/**\n * A presentation's slides tab in the document viewer: the slides editor, on the presentation the\n * viewer shows. Opening a saved presentation loads it (unless it is the one being edited); a new\n * one (a presentation draft) takes the clips gathered so far. Clips gathered with no presentation\n * open join the one opened next. Saving a draft makes it a document, and the tab moves to it.\n *\n * The editor can also move to the presentation's own window (Pop out), beside the documents its\n * clips come from; the tab then says so. Present opens that window with the slides alone.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { ExternalLink, Loader2, PanelLeftClose, Presentation } from 'lucide-react'\nimport {\n isPanelOpen,\n registerDocumentTurnFlush,\n useArbiSessionState,\n useArbiSessionStore,\n} from '@arbidocs/react'\nimport { Button, DropdownMenuItem } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { usePanelHostSupport } from '../../shell/panel-host'\nimport {\n PRESENTATION_PANEL,\n openPresentation,\n presentationWindowOnlyPresents,\n} from '../../presentation/panel-id'\nimport { SlidesEditor } from '../../presentation/SlidesEditor'\nimport { hasUnsavedChanges, usePresentation } from '../../presentation/store'\nimport { EmptyState } from '../../components/EmptyState'\nimport { editPresentation } from './requests'\nimport { usePresentationController } from './usePresentationController'\nimport { usePresentationFiles } from './usePresentationFiles'\n\nexport interface ConnectedSlidesTabProps {\n /** The viewed document's id, or a presentation draft's (`draft-…`). */\n documentId: string\n /** The version on screen, when an older one. */\n version?: number\n /** The document's current version: a newer one than the one being edited is opened. */\n currentVersion?: number\n /** A new presentation, not saved yet: its draft title. */\n draftTitle?: string\n}\n\n/** \"2, 3 and 5\". */\nconst listOf = (numbers: number[]) =>\n numbers.length < 2\n ? String(numbers[0] ?? '')\n : `${numbers.slice(0, -1).join(', ')} and ${numbers[numbers.length - 1]}`\n\n/** A new presentation saves itself this long after its first content (typing settles first). */\nconst AUTO_SAVE_AFTER_MS = 2500\n/** The names a new presentation starts with (not chosen by anyone). */\nconst DEFAULT_NAMES = /^(new|untitled) presentation( \\d+)?$/i\n\nconst STALE = 'This presentation was changed outside the editor: Save to draw its slides again.'\n\n/** The presentation has anything in it worth asking about before it is replaced. */\nconst hasContent = () => hasUnsavedChanges(usePresentation.getState())\n\nexport function ConnectedSlidesTab({\n documentId,\n version,\n currentVersion,\n draftTitle,\n}: ConnectedSlidesTabProps) {\n const session = useArbiSessionStore()\n const { windows, popoutTitle } = usePanelHostSupport()\n const { confirm } = useBlocksEnvironment()\n const { open, save } = usePresentationFiles()\n const notify = usePresentation((s) => s.notify)\n const boundTo = usePresentation((s) => s.boundTo)\n const savedId = usePresentation((s) => s.savedId)\n const [loading, setLoading] = useState(false)\n const isDraft = draftTitle !== undefined\n const target = version ? `${documentId}@v${version}` : documentId\n const poppedOut = useArbiSessionState(\n (state) => isPanelOpen(state, PRESENTATION_PANEL) && !presentationWindowOnlyPresents()\n )\n const controller = usePresentationController(!poppedOut)\n const asked = useRef<string | null>(null)\n // Another presentation, with changes, is being edited and the user kept it.\n const [declined, setDeclined] = useState(false)\n const [force, setForce] = useState(0)\n\n // Show the presentation this tab is for (once per presentation: a remount does not ask again).\n useEffect(() => {\n const state = usePresentation.getState()\n if (state.boundTo === target || asked.current === `${target}#${force}`) return\n asked.current = `${target}#${force}`\n setDeclined(false)\n void (async () => {\n // Clips gathered with no presentation open join this one.\n const gathered = state.boundTo === null ? state.clips : []\n if (state.boundTo !== null && hasContent() && !force) {\n const ok = await confirm({\n title: 'Open presentation',\n message: 'Replace the presentation being edited? Save it first to keep its changes.',\n kind: 'confirm',\n })\n if (!ok) return setDeclined(true)\n }\n if (isDraft) {\n if (state.boundTo !== null) state.reset()\n usePresentation.getState().bind(target)\n usePresentation.getState().setTitle(draftTitle || 'Untitled presentation')\n return\n }\n setLoading(true)\n try {\n const { missing, stale, imported, changedOutside } = await open(documentId, version)\n usePresentation.getState().bind(target)\n if (gathered.length) usePresentation.getState().adoptClips(gathered)\n if (stale) notify(STALE, 'error')\n if (imported) {\n notify(\n ['Opened from PowerPoint, ready to edit.', ...imported.notes].join(' · '),\n 'success'\n )\n }\n if (changedOutside) {\n notify(\n `${changedOutside.length === 1 ? `Slide ${changedOutside[0]} was` : `Slides ${listOf(changedOutside)} were`} changed in PowerPoint: brought in as changed there.`,\n 'success'\n )\n }\n if (missing) {\n notify(\n `${missing} clip${missing === 1 ? '' : 's'} could not be opened (moved, deleted or not shared with you)`,\n 'error'\n )\n }\n } catch (error) {\n notify(\n error instanceof Error ? error.message : 'The presentation could not be opened',\n 'error'\n )\n } finally {\n setLoading(false)\n }\n })()\n // eslint-disable-next-line react-hooks/exhaustive-deps -- a draft's title changes as it is typed\n }, [target, documentId, version, isDraft, force, open, confirm, notify])\n\n // A draft's title is the presentation's.\n useEffect(() => {\n if (isDraft && boundTo === target && draftTitle) usePresentation.getState().setTitle(draftTitle)\n }, [isDraft, boundTo, target, draftTitle])\n\n // Saved as another document (a draft's first save, Save as, an older file saved as a\n // PowerPoint): the viewer follows it. Only once this tab's presentation was the one edited\n // (another, still bound as the tab opens, is not \"its\" save).\n const wasBound = useRef(false)\n useEffect(() => {\n if (boundTo === target) wasBound.current = true\n if (!wasBound.current || !savedId || boundTo !== savedId || savedId === target) return\n if (isDraft) session.clearDraftDocument(documentId)\n editPresentation(session, { kind: 'open', documentId: savedId })\n }, [isDraft, savedId, boundTo, target, documentId, session])\n\n // A newer version saved meanwhile (by ARBI, asked in the chat beside the deck, or by someone\n // else): shown at once, unless this one has changes of its own, which are never thrown away.\n const heldVersion = usePresentation((s) => (s.boundTo === target ? s.version : null))\n const toldNewer = useRef<number | null>(null)\n useEffect(() => {\n if (isDraft || version || !currentVersion || heldVersion === null) return\n if (currentVersion <= heldVersion || loading) return\n if (hasContent()) {\n if (toldNewer.current === currentVersion) return\n toldNewer.current = currentVersion\n notify(\n `A newer version (${currentVersion}) was saved while you edited. Save as… keeps yours; reopen the presentation to see it.`,\n 'error'\n )\n return\n }\n setLoading(true)\n void open(documentId)\n .then(() => {\n usePresentation.getState().bind(target)\n notify(`Updated to version ${currentVersion}.`, 'success')\n })\n .catch((error: unknown) =>\n notify(\n error instanceof Error ? error.message : 'The new version could not be opened',\n 'error'\n )\n )\n .finally(() => setLoading(false))\n }, [currentVersion, heldVersion, isDraft, version, loading, open, documentId, target, notify])\n\n // A new presentation saves itself once it has something in it (a clip, a title, a point): from\n // then on it is a document of Presentations, which a chat can work in and look at (its PDF), and\n // which is not lost with the tab. Later saves stay the person's (each a version they chose).\n const editState = usePresentation((state) => state)\n useEffect(() => {\n if (version || editState.boundTo !== target || !hasUnsavedChanges(editState)) return\n const timer = setTimeout(() => {\n const state = usePresentation.getState()\n const firstTitle = state.slides.find((slide) => slide.caption.trim())?.caption.trim()\n const title =\n state.title && !DEFAULT_NAMES.test(state.title)\n ? state.title\n : (firstTitle ?? (state.title || 'Untitled presentation'))\n if (title !== state.title) state.setTitle(title)\n void save(title, { autosave: true }).catch((error: unknown) => {\n notify(\n error instanceof Error ? error.message : 'The presentation could not be saved',\n 'error'\n )\n })\n }, AUTO_SAVE_AFTER_MS)\n return () => clearTimeout(timer)\n }, [editState, target, version, save, notify])\n\n // A chat turn about this presentation (the chat beside it) saves its unsaved changes first, so\n // ARBI works on the slides as they are on screen.\n useEffect(() => {\n if (version || boundTo !== target || (!isDraft && savedId !== documentId)) return\n return registerDocumentTurnFlush(documentId, async () => {\n const state = usePresentation.getState()\n if ((isDraft || state.savedId === documentId) && hasUnsavedChanges(state))\n await save(state.title)\n })\n }, [isDraft, version, savedId, boundTo, documentId, target, save])\n\n const present = useCallback(() => {\n openPresentation(session, { present: true, windows, title: popoutTitle('Presentation') })\n usePresentation.getState().setPresenting(true)\n }, [session, windows, popoutTitle])\n\n if (poppedOut) {\n return (\n <div className=\"flex h-full items-center justify-center p-6\" data-testid=\"slides-popped-out\">\n <EmptyState\n icon={ExternalLink}\n title=\"Editing in its own window\"\n description=\"The presentation is open in its own window, beside the documents you clip from.\"\n action={\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => session.closePanel(PRESENTATION_PANEL)}\n >\n <PanelLeftClose className=\"size-4\" />\n Bring it back here\n </Button>\n }\n />\n </div>\n )\n }\n if (declined && boundTo !== target) {\n return (\n <div className=\"flex h-full items-center justify-center p-6\" data-testid=\"slides-declined\">\n <EmptyState\n icon={Presentation}\n title=\"Another presentation is being edited\"\n description=\"It has changes. Save it first, or open this one in its place.\"\n action={\n <Button type=\"button\" variant=\"outline\" onClick={() => setForce((n) => n + 1)}>\n Open this one instead\n </Button>\n }\n />\n </div>\n )\n }\n if (loading || boundTo !== target) {\n return (\n <div className=\"flex h-full items-center justify-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"size-4 animate-spin\" />\n Opening the presentation…\n </div>\n )\n }\n return (\n <>\n {controller.dialogs}\n <SlidesEditor\n {...controller.editor}\n menuItems={\n <>\n {controller.editor.menuItems}\n <DropdownMenuItem\n onSelect={() =>\n openPresentation(session, { windows, title: popoutTitle('Presentation') })\n }\n data-testid=\"presentation-pop-out\"\n >\n <ExternalLink className=\"size-4\" />\n <span className=\"ml-2\">Edit in its own window</span>\n </DropdownMenuItem>\n </>\n }\n onPresent={present}\n />\n </>\n )\n}\n"]}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('./chunk-
|
|
6
|
-
require('./chunk-
|
|
4
|
+
var chunkOALQGO5C_cjs = require('./chunk-OALQGO5C.cjs');
|
|
5
|
+
require('./chunk-6B4CCDDB.cjs');
|
|
6
|
+
require('./chunk-Q6N5D3R5.cjs');
|
|
7
7
|
require('./chunk-GA5ZO4YA.cjs');
|
|
8
8
|
require('./chunk-VG5XNE4H.cjs');
|
|
9
9
|
require('./chunk-DDWLMYRO.cjs');
|
|
10
|
-
require('./chunk-
|
|
10
|
+
require('./chunk-LOB2ATS5.cjs');
|
|
11
11
|
require('./chunk-4ONPEVTP.cjs');
|
|
12
12
|
require('./chunk-V3KLUWQQ.cjs');
|
|
13
|
-
require('./chunk-ZESMRGDV.cjs');
|
|
14
13
|
require('./chunk-P5AQYC4D.cjs');
|
|
15
14
|
require('./chunk-WAV762GP.cjs');
|
|
15
|
+
require('./chunk-ZESMRGDV.cjs');
|
|
16
16
|
require('./chunk-UKOYN2WD.cjs');
|
|
17
17
|
require('./chunk-RC25WMVB.cjs');
|
|
18
|
-
require('./chunk-
|
|
18
|
+
require('./chunk-CMPHJRVV.cjs');
|
|
19
19
|
require('./chunk-JJZOL5MG.cjs');
|
|
20
20
|
require('./chunk-3YEXZX4H.cjs');
|
|
21
21
|
require('./chunk-4PA6VCCR.cjs');
|
|
@@ -25,30 +25,30 @@ require('./chunk-RL2HI6NP.cjs');
|
|
|
25
25
|
require('./chunk-6UZC4XVV.cjs');
|
|
26
26
|
require('./chunk-YVCOQHCE.cjs');
|
|
27
27
|
require('./chunk-JV5TVUOU.cjs');
|
|
28
|
-
require('./chunk-VZOOGA47.cjs');
|
|
29
28
|
require('./chunk-ZVEW3JBT.cjs');
|
|
30
29
|
require('./chunk-HQDR43JC.cjs');
|
|
31
30
|
require('./chunk-JR2YSBD5.cjs');
|
|
32
31
|
require('./chunk-3YZKDCWY.cjs');
|
|
33
32
|
require('./chunk-SJSGSHIT.cjs');
|
|
34
33
|
require('./chunk-ZW6FPIFC.cjs');
|
|
34
|
+
require('./chunk-VZOOGA47.cjs');
|
|
35
35
|
require('./chunk-75BNMCUX.cjs');
|
|
36
36
|
require('./chunk-QGVOT7E4.cjs');
|
|
37
|
-
require('./chunk-IPSHAMO2.cjs');
|
|
38
37
|
require('./chunk-QRAQZTJE.cjs');
|
|
39
38
|
require('./chunk-UDSHVNU3.cjs');
|
|
39
|
+
require('./chunk-IPSHAMO2.cjs');
|
|
40
40
|
require('./chunk-PPCATBOY.cjs');
|
|
41
|
-
require('./chunk-LJJJ6CYH.cjs');
|
|
42
41
|
require('./chunk-TKHCIHE2.cjs');
|
|
43
42
|
require('./chunk-JDFBEGQO.cjs');
|
|
44
43
|
require('./chunk-ULWRNGGE.cjs');
|
|
44
|
+
require('./chunk-LJJJ6CYH.cjs');
|
|
45
45
|
require('./chunk-PLIF5CUV.cjs');
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
Object.defineProperty(exports, "ConnectedStreamedWordArtifact", {
|
|
50
50
|
enumerable: true,
|
|
51
|
-
get: function () { return
|
|
51
|
+
get: function () { return chunkOALQGO5C_cjs.ConnectedStreamedWordArtifact; }
|
|
52
52
|
});
|
|
53
|
-
//# sourceMappingURL=ConnectedStreamedWordArtifact-
|
|
54
|
-
//# sourceMappingURL=ConnectedStreamedWordArtifact-
|
|
53
|
+
//# sourceMappingURL=ConnectedStreamedWordArtifact-4FHPOAFZ.cjs.map
|
|
54
|
+
//# sourceMappingURL=ConnectedStreamedWordArtifact-4FHPOAFZ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedStreamedWordArtifact-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ConnectedStreamedWordArtifact-4FHPOAFZ.cjs"}
|