@opengeni/react 4.2.1-canary.39419937372003 → 4.2.1-canary.39435074352001
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/artifacts-document.js +2 -2
- package/dist/artifacts-presentation.js +2 -2
- package/dist/artifacts-spreadsheet.js +2 -2
- package/dist/artifacts.js +40 -40
- package/dist/{browser-viewer-HOIVSRJF.js → browser-viewer-WKN4NJBM.js} +4 -4
- package/dist/{chat-interactive-block-Z6B6M4OF.js → chat-interactive-block-T4UTX5LA.js} +5 -5
- package/dist/{chunk-QUKW3CVS.js → chunk-2RMAZ2HU.js} +4 -4
- package/dist/{chunk-SFLO7XMY.js → chunk-3PGBCUVF.js} +65 -65
- package/dist/{chunk-SFLO7XMY.js.map → chunk-3PGBCUVF.js.map} +1 -1
- package/dist/{chunk-T7KVNEIO.js → chunk-475IS53W.js} +13 -13
- package/dist/{chunk-OLBMMOHM.js → chunk-52KMXC7E.js} +2 -2
- package/dist/{chunk-2HJVWRHY.js → chunk-6SU56JNB.js} +2 -2
- package/dist/{chunk-MJV3GBL5.js → chunk-6USBH4H7.js} +2 -2
- package/dist/{chunk-DPGWYCGR.js → chunk-7DVFZCTG.js} +605 -605
- package/dist/chunk-7DVFZCTG.js.map +1 -0
- package/dist/{chunk-D47K47FK.js → chunk-7KOQHWQL.js} +10 -10
- package/dist/{chunk-ISLYSPT6.js → chunk-7MDPYTDM.js} +10 -10
- package/dist/{chunk-56HWOPRK.js → chunk-GMUXYNMG.js} +2 -2
- package/dist/{chunk-NCLQIXS6.js → chunk-I4GRGY3N.js} +12 -12
- package/dist/{chunk-UOC2MPF6.js → chunk-IRKKKYMV.js} +13 -13
- package/dist/{chunk-LPHGR2E2.js → chunk-OTFNGTAL.js} +11 -11
- package/dist/{chunk-PVBQGFFZ.js → chunk-TGCUL7TL.js} +2 -2
- package/dist/{chunk-6RP5IBEI.js → chunk-UPGJEZGE.js} +2 -2
- package/dist/{chunk-5HWE3NAB.js → chunk-W5MZOUKU.js} +12 -12
- package/dist/{chunk-S7BY4YXE.js → chunk-WGAAF3BA.js} +7 -7
- package/dist/{chunk-TFDPAB2J.js → chunk-YK7ODKEY.js} +105 -105
- package/dist/composer.js +9 -9
- package/dist/{computer-viewer-JZE4F4UP.js → computer-viewer-UDVVW3HJ.js} +5 -5
- package/dist/connect.js +6 -6
- package/dist/{embedded-new-voice-NI54S5ML.js → embedded-new-voice-JUUHK4IB.js} +5 -5
- package/dist/{embedded-voice-PTDD6SPN.js → embedded-voice-3T2BLAW5.js} +5 -5
- package/dist/index.js +167 -167
- package/dist/interaction.js +10 -10
- package/dist/machines.js +2 -2
- package/dist/{model-policy-picker-menu-W4YGESSM.js → model-policy-picker-menu-A3W7SNDY.js} +5 -5
- package/dist/native-previews.js +3 -3
- package/dist/realtime.js +4 -4
- package/dist/{sandbox-files-DEQDRUEV.js → sandbox-files-DN2YPOIC.js} +8 -8
- package/dist/session-list-model.js +3 -3
- package/dist/session-ui.js +42 -42
- package/dist/session.js +13 -13
- package/dist/timeline-model.js +11 -11
- package/package.json +3 -3
- package/dist/chunk-DPGWYCGR.js.map +0 -1
- /package/dist/{browser-viewer-HOIVSRJF.js.map → browser-viewer-WKN4NJBM.js.map} +0 -0
- /package/dist/{chat-interactive-block-Z6B6M4OF.js.map → chat-interactive-block-T4UTX5LA.js.map} +0 -0
- /package/dist/{chunk-QUKW3CVS.js.map → chunk-2RMAZ2HU.js.map} +0 -0
- /package/dist/{chunk-T7KVNEIO.js.map → chunk-475IS53W.js.map} +0 -0
- /package/dist/{chunk-OLBMMOHM.js.map → chunk-52KMXC7E.js.map} +0 -0
- /package/dist/{chunk-2HJVWRHY.js.map → chunk-6SU56JNB.js.map} +0 -0
- /package/dist/{chunk-MJV3GBL5.js.map → chunk-6USBH4H7.js.map} +0 -0
- /package/dist/{chunk-D47K47FK.js.map → chunk-7KOQHWQL.js.map} +0 -0
- /package/dist/{chunk-ISLYSPT6.js.map → chunk-7MDPYTDM.js.map} +0 -0
- /package/dist/{chunk-56HWOPRK.js.map → chunk-GMUXYNMG.js.map} +0 -0
- /package/dist/{chunk-NCLQIXS6.js.map → chunk-I4GRGY3N.js.map} +0 -0
- /package/dist/{chunk-UOC2MPF6.js.map → chunk-IRKKKYMV.js.map} +0 -0
- /package/dist/{chunk-LPHGR2E2.js.map → chunk-OTFNGTAL.js.map} +0 -0
- /package/dist/{chunk-PVBQGFFZ.js.map → chunk-TGCUL7TL.js.map} +0 -0
- /package/dist/{chunk-6RP5IBEI.js.map → chunk-UPGJEZGE.js.map} +0 -0
- /package/dist/{chunk-5HWE3NAB.js.map → chunk-W5MZOUKU.js.map} +0 -0
- /package/dist/{chunk-S7BY4YXE.js.map → chunk-WGAAF3BA.js.map} +0 -0
- /package/dist/{chunk-TFDPAB2J.js.map → chunk-YK7ODKEY.js.map} +0 -0
- /package/dist/{computer-viewer-JZE4F4UP.js.map → computer-viewer-UDVVW3HJ.js.map} +0 -0
- /package/dist/{embedded-new-voice-NI54S5ML.js.map → embedded-new-voice-JUUHK4IB.js.map} +0 -0
- /package/dist/{embedded-voice-PTDD6SPN.js.map → embedded-voice-3T2BLAW5.js.map} +0 -0
- /package/dist/{model-policy-picker-menu-W4YGESSM.js.map → model-policy-picker-menu-A3W7SNDY.js.map} +0 -0
- /package/dist/{sandbox-files-DEQDRUEV.js.map → sandbox-files-DN2YPOIC.js.map} +0 -0
|
@@ -5,9 +5,9 @@ import {
|
|
|
5
5
|
DocumentProjectionArtifactSurface,
|
|
6
6
|
DocumentProjectionEditor,
|
|
7
7
|
EditableDocumentArtifactSurface
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-TGCUL7TL.js";
|
|
9
9
|
import "./chunk-2DDJ6YH6.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-3PGBCUVF.js";
|
|
11
11
|
import "./chunk-VS7OYWSF.js";
|
|
12
12
|
import "./chunk-TXS65BB2.js";
|
|
13
13
|
import "./chunk-OD27LDFO.js";
|
|
@@ -5,9 +5,9 @@ import {
|
|
|
5
5
|
PresentationEditor,
|
|
6
6
|
PresentationProjectionArtifactSurface,
|
|
7
7
|
PresentationProjectionEditor
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-6USBH4H7.js";
|
|
9
9
|
import "./chunk-2DDJ6YH6.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-3PGBCUVF.js";
|
|
11
11
|
import "./chunk-VS7OYWSF.js";
|
|
12
12
|
import "./chunk-TXS65BB2.js";
|
|
13
13
|
import "./chunk-OD27LDFO.js";
|
|
@@ -5,8 +5,8 @@ import {
|
|
|
5
5
|
SpreadsheetArtifactSurface,
|
|
6
6
|
SpreadsheetGrid,
|
|
7
7
|
SpreadsheetProjectionGrid
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-6SU56JNB.js";
|
|
9
|
+
import "./chunk-3PGBCUVF.js";
|
|
10
10
|
import "./chunk-VS7OYWSF.js";
|
|
11
11
|
import "./chunk-TXS65BB2.js";
|
|
12
12
|
import "./chunk-OD27LDFO.js";
|
package/dist/artifacts.js
CHANGED
|
@@ -3,41 +3,62 @@ import {
|
|
|
3
3
|
ArtifactSandbox,
|
|
4
4
|
ChatInteractiveBlock,
|
|
5
5
|
DeferredChatMedia
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-7KOQHWQL.js";
|
|
7
7
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from "./chunk-
|
|
8
|
+
EditablePresentationArtifactSurface,
|
|
9
|
+
PresentationArtifactSurface,
|
|
10
|
+
PresentationEditor,
|
|
11
|
+
PresentationProjectionArtifactSurface,
|
|
12
|
+
PresentationProjectionEditor
|
|
13
|
+
} from "./chunk-6USBH4H7.js";
|
|
14
14
|
import {
|
|
15
15
|
DocumentArtifactSurface,
|
|
16
16
|
DocumentEditor,
|
|
17
17
|
DocumentProjectionArtifactSurface,
|
|
18
18
|
DocumentProjectionEditor,
|
|
19
19
|
EditableDocumentArtifactSurface
|
|
20
|
-
} from "./chunk-
|
|
21
|
-
import {
|
|
22
|
-
EditablePresentationArtifactSurface,
|
|
23
|
-
PresentationArtifactSurface,
|
|
24
|
-
PresentationEditor,
|
|
25
|
-
PresentationProjectionArtifactSurface,
|
|
26
|
-
PresentationProjectionEditor
|
|
27
|
-
} from "./chunk-MJV3GBL5.js";
|
|
20
|
+
} from "./chunk-TGCUL7TL.js";
|
|
28
21
|
import "./chunk-2DDJ6YH6.js";
|
|
29
22
|
import {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
inlineHtmlDocument
|
|
24
|
+
} from "./chunk-IGFZFLI2.js";
|
|
25
|
+
import {
|
|
26
|
+
PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX,
|
|
27
|
+
PublishedHtmlArtifactFrame,
|
|
28
|
+
openGeniSiteBridgePortFromBootstrap,
|
|
29
|
+
publishedHtmlArtifactDocument
|
|
30
|
+
} from "./chunk-HXXF453K.js";
|
|
31
|
+
import {
|
|
32
|
+
loadSiteSnapshot
|
|
33
|
+
} from "./chunk-IOYHDEP3.js";
|
|
33
34
|
import {
|
|
34
35
|
PatchApplyCommand,
|
|
35
36
|
useRetainedImageObjectUrl
|
|
36
37
|
} from "./chunk-VJ7HKEDK.js";
|
|
38
|
+
import "./chunk-VHB3E6PT.js";
|
|
37
39
|
import {
|
|
38
40
|
joinClientConfigRead
|
|
39
41
|
} from "./chunk-IGVL3ELX.js";
|
|
40
|
-
import "./chunk-
|
|
42
|
+
import "./chunk-PEHTX3V7.js";
|
|
43
|
+
import {
|
|
44
|
+
useOpenGeni
|
|
45
|
+
} from "./chunk-ZGFU4LVW.js";
|
|
46
|
+
import {
|
|
47
|
+
isPatchFilename,
|
|
48
|
+
isRetainedImageContentType
|
|
49
|
+
} from "./chunk-TC3B4LEJ.js";
|
|
50
|
+
import "./chunk-4PGSVKPR.js";
|
|
51
|
+
import {
|
|
52
|
+
EditableSpreadsheetArtifactSurface,
|
|
53
|
+
EditableSpreadsheetGrid,
|
|
54
|
+
SpreadsheetArtifactSurface,
|
|
55
|
+
SpreadsheetGrid,
|
|
56
|
+
SpreadsheetProjectionGrid
|
|
57
|
+
} from "./chunk-6SU56JNB.js";
|
|
58
|
+
import {
|
|
59
|
+
ArtifactSurface,
|
|
60
|
+
EditableArtifactMessage
|
|
61
|
+
} from "./chunk-3PGBCUVF.js";
|
|
41
62
|
import {
|
|
42
63
|
ArtifactBadge,
|
|
43
64
|
ArtifactButton,
|
|
@@ -53,27 +74,6 @@ import {
|
|
|
53
74
|
artifactLoadErrorView,
|
|
54
75
|
useArtifactLabels
|
|
55
76
|
} from "./chunk-VS7OYWSF.js";
|
|
56
|
-
import {
|
|
57
|
-
PUBLISHED_HTML_ARTIFACT_IFRAME_SANDBOX,
|
|
58
|
-
PublishedHtmlArtifactFrame,
|
|
59
|
-
openGeniSiteBridgePortFromBootstrap,
|
|
60
|
-
publishedHtmlArtifactDocument
|
|
61
|
-
} from "./chunk-HXXF453K.js";
|
|
62
|
-
import {
|
|
63
|
-
isPatchFilename,
|
|
64
|
-
isRetainedImageContentType
|
|
65
|
-
} from "./chunk-TC3B4LEJ.js";
|
|
66
|
-
import "./chunk-4PGSVKPR.js";
|
|
67
|
-
import {
|
|
68
|
-
inlineHtmlDocument
|
|
69
|
-
} from "./chunk-IGFZFLI2.js";
|
|
70
|
-
import {
|
|
71
|
-
loadSiteSnapshot
|
|
72
|
-
} from "./chunk-IOYHDEP3.js";
|
|
73
|
-
import "./chunk-PEHTX3V7.js";
|
|
74
|
-
import {
|
|
75
|
-
useOpenGeni
|
|
76
|
-
} from "./chunk-ZGFU4LVW.js";
|
|
77
77
|
import {
|
|
78
78
|
cn
|
|
79
79
|
} from "./chunk-TXS65BB2.js";
|
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BrowserViewer,
|
|
4
4
|
staleBrowserEndRetryDelayMs
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-475IS53W.js";
|
|
6
6
|
import "./chunk-NL4NQTZQ.js";
|
|
7
|
-
import "./chunk-PEHTX3V7.js";
|
|
8
7
|
import "./chunk-ZUWF4NF7.js";
|
|
8
|
+
import "./chunk-TNEZNMSN.js";
|
|
9
|
+
import "./chunk-PEHTX3V7.js";
|
|
9
10
|
import "./chunk-NAWXARTY.js";
|
|
10
11
|
import "./chunk-CM7LVUKC.js";
|
|
11
12
|
import "./chunk-ZGFU4LVW.js";
|
|
12
13
|
import "./chunk-XUNI5SSO.js";
|
|
13
|
-
import "./chunk-TNEZNMSN.js";
|
|
14
14
|
import "./chunk-TXS65BB2.js";
|
|
15
15
|
import "./chunk-OD27LDFO.js";
|
|
16
16
|
export {
|
|
17
17
|
BrowserViewer,
|
|
18
18
|
staleBrowserEndRetryDelayMs
|
|
19
19
|
};
|
|
20
|
-
//# sourceMappingURL=browser-viewer-
|
|
20
|
+
//# sourceMappingURL=browser-viewer-WKN4NJBM.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
ChatInteractiveBlock
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-VHB3E6PT.js";
|
|
6
|
-
import "./chunk-VS7OYWSF.js";
|
|
7
|
-
import "./chunk-HXXF453K.js";
|
|
4
|
+
} from "./chunk-7KOQHWQL.js";
|
|
8
5
|
import "./chunk-IGFZFLI2.js";
|
|
6
|
+
import "./chunk-HXXF453K.js";
|
|
9
7
|
import "./chunk-IOYHDEP3.js";
|
|
8
|
+
import "./chunk-VHB3E6PT.js";
|
|
9
|
+
import "./chunk-VS7OYWSF.js";
|
|
10
10
|
import "./chunk-TXS65BB2.js";
|
|
11
11
|
import "./chunk-OD27LDFO.js";
|
|
12
12
|
export {
|
|
13
13
|
ChatInteractiveBlock
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=chat-interactive-block-
|
|
15
|
+
//# sourceMappingURL=chat-interactive-block-T4UTX5LA.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import {
|
|
3
|
+
ToolDetailsProvider
|
|
4
|
+
} from "./chunk-RZLBICR5.js";
|
|
2
5
|
import {
|
|
3
6
|
useRetainedReads
|
|
4
7
|
} from "./chunk-WEY5J52U.js";
|
|
5
8
|
import {
|
|
6
9
|
joinClientConfigRead
|
|
7
10
|
} from "./chunk-IGVL3ELX.js";
|
|
8
|
-
import {
|
|
9
|
-
ToolDetailsProvider
|
|
10
|
-
} from "./chunk-RZLBICR5.js";
|
|
11
11
|
import {
|
|
12
12
|
usePageLiveActivity
|
|
13
13
|
} from "./chunk-NAWXARTY.js";
|
|
@@ -376,4 +376,4 @@ function reloadForContractMismatchOnce(mismatch) {
|
|
|
376
376
|
export {
|
|
377
377
|
OpenGeniProvider
|
|
378
378
|
};
|
|
379
|
-
//# sourceMappingURL=chunk-
|
|
379
|
+
//# sourceMappingURL=chunk-2RMAZ2HU.js.map
|
|
@@ -87,65 +87,11 @@ function ArtifactSurface({
|
|
|
87
87
|
);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
// src/components/artifacts/artifact-submissions.tsx
|
|
91
|
-
import { createContext, useContext, useState } from "react";
|
|
92
|
-
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
93
|
-
function createSubmissionQueue() {
|
|
94
|
-
let pending = 0;
|
|
95
|
-
const listeners = /* @__PURE__ */ new Set();
|
|
96
|
-
const emit = () => {
|
|
97
|
-
for (const listener of listeners) listener();
|
|
98
|
-
};
|
|
99
|
-
return {
|
|
100
|
-
getPending: () => pending,
|
|
101
|
-
subscribe: (listener) => {
|
|
102
|
-
listeners.add(listener);
|
|
103
|
-
return () => {
|
|
104
|
-
listeners.delete(listener);
|
|
105
|
-
};
|
|
106
|
-
},
|
|
107
|
-
async run(invoke) {
|
|
108
|
-
pending++;
|
|
109
|
-
emit();
|
|
110
|
-
try {
|
|
111
|
-
return await invoke();
|
|
112
|
-
} finally {
|
|
113
|
-
pending--;
|
|
114
|
-
emit();
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
var standaloneQueue = {
|
|
120
|
-
getPending: () => 0,
|
|
121
|
-
subscribe: (_listener) => () => {
|
|
122
|
-
},
|
|
123
|
-
run: (invoke) => invoke()
|
|
124
|
-
};
|
|
125
|
-
var SubmissionContext = createContext(null);
|
|
126
|
-
function ArtifactSubmissionProvider({ children }) {
|
|
127
|
-
const [queue] = useState(createSubmissionQueue);
|
|
128
|
-
return /* @__PURE__ */ jsx2(SubmissionContext.Provider, { value: queue, children });
|
|
129
|
-
}
|
|
130
|
-
function useArtifactSubmissions() {
|
|
131
|
-
return useContext(SubmissionContext) ?? standaloneQueue;
|
|
132
|
-
}
|
|
133
|
-
var SESSION_KEYS = /* @__PURE__ */ new WeakMap();
|
|
134
|
-
var nextSessionKey = 0;
|
|
135
|
-
function artifactSubmissionSessionKey(session) {
|
|
136
|
-
let key = SESSION_KEYS.get(session);
|
|
137
|
-
if (key === void 0) {
|
|
138
|
-
key = ++nextSessionKey;
|
|
139
|
-
SESSION_KEYS.set(session, key);
|
|
140
|
-
}
|
|
141
|
-
return key;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
90
|
// src/components/artifacts/editable-artifact-ui.tsx
|
|
145
|
-
import { useEffect, useState
|
|
146
|
-
import { jsx as
|
|
91
|
+
import { useEffect, useState } from "react";
|
|
92
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
147
93
|
function useEditableArtifactView(session) {
|
|
148
|
-
const [view, setView] =
|
|
94
|
+
const [view, setView] = useState(() => session.getView());
|
|
149
95
|
useEffect(() => {
|
|
150
96
|
setView(session.getView());
|
|
151
97
|
return session.subscribe(setView);
|
|
@@ -196,10 +142,10 @@ function EditableArtifactMessage({
|
|
|
196
142
|
}) {
|
|
197
143
|
const t = useOpenGeniText();
|
|
198
144
|
const retryLabel = retryLabelProp === void 0 ? t("artifacts.editableArtifactUi.retry") : retryLabelProp;
|
|
199
|
-
return /* @__PURE__ */
|
|
200
|
-
/* @__PURE__ */
|
|
201
|
-
/* @__PURE__ */
|
|
202
|
-
retry ? /* @__PURE__ */
|
|
145
|
+
return /* @__PURE__ */ jsx2("div", { className: "grid h-full min-h-56 place-items-center bg-og-bg p-6 text-center", children: /* @__PURE__ */ jsxs2("div", { children: [
|
|
146
|
+
/* @__PURE__ */ jsx2("p", { className: "text-og-base font-medium text-og-fg", children: title }),
|
|
147
|
+
/* @__PURE__ */ jsx2("p", { className: "mt-1 max-w-lg text-og-sm text-og-fg-muted", children: detail }),
|
|
148
|
+
retry ? /* @__PURE__ */ jsx2(
|
|
203
149
|
"button",
|
|
204
150
|
{
|
|
205
151
|
type: "button",
|
|
@@ -214,6 +160,60 @@ function asEditableArtifactError(cause, fallback) {
|
|
|
214
160
|
return cause instanceof Error ? cause : new Error(fallback);
|
|
215
161
|
}
|
|
216
162
|
|
|
163
|
+
// src/components/artifacts/artifact-submissions.tsx
|
|
164
|
+
import { createContext, useContext, useState as useState2 } from "react";
|
|
165
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
166
|
+
function createSubmissionQueue() {
|
|
167
|
+
let pending = 0;
|
|
168
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
169
|
+
const emit = () => {
|
|
170
|
+
for (const listener of listeners) listener();
|
|
171
|
+
};
|
|
172
|
+
return {
|
|
173
|
+
getPending: () => pending,
|
|
174
|
+
subscribe: (listener) => {
|
|
175
|
+
listeners.add(listener);
|
|
176
|
+
return () => {
|
|
177
|
+
listeners.delete(listener);
|
|
178
|
+
};
|
|
179
|
+
},
|
|
180
|
+
async run(invoke) {
|
|
181
|
+
pending++;
|
|
182
|
+
emit();
|
|
183
|
+
try {
|
|
184
|
+
return await invoke();
|
|
185
|
+
} finally {
|
|
186
|
+
pending--;
|
|
187
|
+
emit();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
var standaloneQueue = {
|
|
193
|
+
getPending: () => 0,
|
|
194
|
+
subscribe: (_listener) => () => {
|
|
195
|
+
},
|
|
196
|
+
run: (invoke) => invoke()
|
|
197
|
+
};
|
|
198
|
+
var SubmissionContext = createContext(null);
|
|
199
|
+
function ArtifactSubmissionProvider({ children }) {
|
|
200
|
+
const [queue] = useState2(createSubmissionQueue);
|
|
201
|
+
return /* @__PURE__ */ jsx3(SubmissionContext.Provider, { value: queue, children });
|
|
202
|
+
}
|
|
203
|
+
function useArtifactSubmissions() {
|
|
204
|
+
return useContext(SubmissionContext) ?? standaloneQueue;
|
|
205
|
+
}
|
|
206
|
+
var SESSION_KEYS = /* @__PURE__ */ new WeakMap();
|
|
207
|
+
var nextSessionKey = 0;
|
|
208
|
+
function artifactSubmissionSessionKey(session) {
|
|
209
|
+
let key = SESSION_KEYS.get(session);
|
|
210
|
+
if (key === void 0) {
|
|
211
|
+
key = ++nextSessionKey;
|
|
212
|
+
SESSION_KEYS.set(session, key);
|
|
213
|
+
}
|
|
214
|
+
return key;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
217
|
// src/components/artifacts/artifact-download.tsx
|
|
218
218
|
import { DownloadIcon, LoaderCircleIcon as LoaderCircleIcon2 } from "lucide-react";
|
|
219
219
|
import { useEffect as useEffect2, useRef, useState as useState3, useSyncExternalStore } from "react";
|
|
@@ -325,15 +325,15 @@ function downloadFileName(title, format, fallback) {
|
|
|
325
325
|
|
|
326
326
|
export {
|
|
327
327
|
ArtifactSurface,
|
|
328
|
-
ArtifactSubmissionProvider,
|
|
329
|
-
useArtifactSubmissions,
|
|
330
|
-
artifactSubmissionSessionKey,
|
|
331
328
|
useEditableArtifactView,
|
|
332
329
|
editableArtifactProjectionKey,
|
|
333
330
|
editableArtifactStatusLabel,
|
|
334
331
|
editableArtifactAccessRevoked,
|
|
335
332
|
EditableArtifactMessage,
|
|
336
333
|
asEditableArtifactError,
|
|
334
|
+
ArtifactSubmissionProvider,
|
|
335
|
+
useArtifactSubmissions,
|
|
336
|
+
artifactSubmissionSessionKey,
|
|
337
337
|
EditableArtifactDownloadButton
|
|
338
338
|
};
|
|
339
|
-
//# sourceMappingURL=chunk-
|
|
339
|
+
//# sourceMappingURL=chunk-3PGBCUVF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/artifacts/artifact-surface.tsx","../src/components/artifacts/artifact-submissions.tsx","../src/components/artifacts/editable-artifact-ui.tsx","../src/components/artifacts/artifact-download.tsx"],"sourcesContent":["import {\n FileSpreadsheetIcon,\n FileTextIcon,\n LoaderCircleIcon,\n PresentationIcon,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"../../lib/cn\";\nimport { useOpenGeniText, type OpenGeniText } from \"../../messages/runtime\";\n\nexport type ArtifactModality = \"spreadsheet\" | \"document\" | \"presentation\";\n\nexport type ArtifactSurfaceProps = {\n modality: ArtifactModality;\n title: string;\n /** An embedding host may already provide the artifact title and navigation. */\n showHeader?: boolean | undefined;\n subtitle?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n children: ReactNode;\n footer?: ReactNode | undefined;\n busy?: boolean | undefined;\n className?: string | undefined;\n};\n\nconst MODALITY_LABEL = (t: OpenGeniText): Record<ArtifactModality, string> => ({\n spreadsheet: t(\"artifacts.artifactSurface.spreadsheet\"),\n document: t(\"artifacts.artifactSurface.document\"),\n presentation: t(\"artifacts.artifactSurface.presentation\"),\n});\n\nfunction ModalityIcon({ modality }: { modality: ArtifactModality }) {\n switch (modality) {\n case \"spreadsheet\":\n return <FileSpreadsheetIcon className=\"size-4\" />;\n case \"document\":\n return <FileTextIcon className=\"size-4\" />;\n case \"presentation\":\n return <PresentationIcon className=\"size-4\" />;\n }\n}\n\n/**\n * Modality-neutral artifact chrome. It deliberately owns no file, session, or\n * persistence state: hosts can use the same surface for a local draft, a\n * durable Opengeni artifact, or a collaborative projection.\n */\nexport function ArtifactSurface({\n modality,\n title,\n showHeader = true,\n subtitle,\n actions,\n children,\n footer,\n busy = false,\n className,\n}: ArtifactSurfaceProps) {\n const t = useOpenGeniText();\n return (\n <section\n aria-label={`${MODALITY_LABEL(t)[modality]}: ${title}`}\n aria-busy={busy || undefined}\n data-og-artifact-modality={modality}\n className={cn(\n \"og-root flex h-full min-h-0 min-w-0 flex-col overflow-hidden rounded-og-lg border border-og-border bg-og-surface-1 text-og-fg shadow-og-md\",\n className,\n )}\n >\n {showHeader ? (\n <header className=\"flex min-h-11 shrink-0 items-center gap-2 border-b border-og-border bg-og-surface-2 px-3\">\n <span\n aria-hidden\n className=\"grid size-7 shrink-0 place-items-center rounded-og-sm bg-og-surface-3 text-og-fg-muted\"\n >\n <ModalityIcon modality={modality} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-og-base font-medium text-og-fg\">{title}</h2>\n {subtitle ? (\n <div className=\"truncate text-og-xs text-og-fg-muted\">{subtitle}</div>\n ) : null}\n </div>\n {busy ? (\n <LoaderCircleIcon\n aria-label={t(\"artifacts.artifactSurface.updatingArtifact\")}\n className=\"size-4 shrink-0 animate-spin text-og-fg-muted\"\n />\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </header>\n ) : (\n <>\n {typeof subtitle === \"string\" || typeof subtitle === \"number\" ? (\n <span role=\"status\" className=\"sr-only\">\n {subtitle}\n </span>\n ) : null}\n {actions ? (\n <div className=\"flex shrink-0 items-center justify-end gap-1 border-b border-og-border px-3 py-1\">\n {actions}\n </div>\n ) : null}\n </>\n )}\n\n <div className=\"min-h-0 min-w-0 flex-1\">{children}</div>\n\n {footer ? (\n <footer className=\"shrink-0 border-t border-og-border bg-og-surface-2\">{footer}</footer>\n ) : null}\n </section>\n );\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { createContext, useContext, useState, type ReactNode } from \"react\";\n\nfunction createSubmissionQueue() {\n let pending = 0;\n const listeners = new Set<() => void>();\n const emit = () => {\n for (const listener of listeners) listener();\n };\n return {\n getPending: () => pending,\n subscribe: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n async run<T>(invoke: () => Promise<T>): Promise<T> {\n // The SDK's causal queue and Worker authoring precede pendingTransactions.\n // Latch synchronously so a same-event blur/click cannot export an older head.\n pending++;\n emit();\n try {\n return await invoke();\n } finally {\n pending--;\n emit();\n }\n },\n };\n}\n\nexport type ArtifactSubmissions = Readonly<{\n getPending: () => number;\n subscribe: (listener: () => void) => () => void;\n run: <T>(invoke: () => Promise<T>) => Promise<T>;\n}>;\n\nconst standaloneQueue: ArtifactSubmissions = {\n getPending: () => 0,\n subscribe: (_listener: () => void) => () => {},\n run: <T,>(invoke: () => Promise<T>) => invoke(),\n};\nconst SubmissionContext = createContext<ArtifactSubmissions | null>(null);\n\nexport function ArtifactSubmissionProvider({ children }: { children: ReactNode }) {\n const [queue] = useState(createSubmissionQueue);\n return <SubmissionContext.Provider value={queue}>{children}</SubmissionContext.Provider>;\n}\n\n/** UI authoring submissions not yet visible as SDK pending transactions. */\nexport function useArtifactSubmissions(): ArtifactSubmissions {\n return useContext(SubmissionContext) ?? standaloneQueue;\n}\n\nconst SESSION_KEYS = new WeakMap<EditableArtifactSession, number>();\nlet nextSessionKey = 0;\n\n/** Stable per-session React key so a replaced session never inherits queued state. */\nexport function artifactSubmissionSessionKey(session: EditableArtifactSession): number {\n let key = SESSION_KEYS.get(session);\n if (key === undefined) {\n key = ++nextSessionKey;\n SESSION_KEYS.set(session, key);\n }\n return key;\n}\n","import type {\n EditableArtifactSession,\n EditableArtifactSyncView,\n} from \"@opengeni/sdk/editable-artifacts\";\nimport { useEffect, useState } from \"react\";\nimport { type OpenGeniText } from \"../../messages/runtime\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\nexport function useEditableArtifactView(\n session: EditableArtifactSession,\n): EditableArtifactSyncView {\n const [view, setView] = useState(() => session.getView());\n useEffect(() => {\n setView(session.getView());\n return session.subscribe(setView);\n }, [session]);\n return view;\n}\n\n/** Changes whenever the Worker-resident speculative projection may have changed. */\nexport function editableArtifactProjectionKey(view: EditableArtifactSyncView): string {\n return [\n view.state,\n view.cursor,\n view.headSequence,\n view.pendingTransactions,\n view.blockedPending.map((entry) => `${entry.clientTransactionId}:${entry.code}`).join(\",\"),\n ].join(\":\");\n}\n\nexport function editableArtifactStatusLabel(\n t: OpenGeniText,\n view: EditableArtifactSyncView,\n): string {\n switch (view.state) {\n case \"idle\":\n case \"connecting\":\n return t(\"artifacts.editableArtifactUi.connecting\");\n case \"syncing\":\n case \"resyncing\":\n return t(\"artifacts.editableArtifactUi.syncing\");\n case \"reconnecting\":\n return t(\"artifacts.editableArtifactUi.reconnecting\");\n case \"unsupported\":\n return t(\"artifacts.editableArtifactUi.thisArtifactVersionIsNot\");\n case \"failed\":\n if (editableArtifactAccessRevoked(view)) {\n return t(\"artifacts.editableArtifactUi.youNoLongerHaveAccess\");\n }\n return view.lastError?.message ?? t(\"artifacts.editableArtifactUi.couldNotOpenThisArtifact\");\n case \"closed\":\n return t(\"artifacts.editableArtifactUi.artifactSessionClosed\");\n case \"live\":\n return view.writable\n ? t(\"artifacts.editableArtifactUi.live\")\n : t(\"artifacts.editableArtifactUi.liveReadOnly\");\n }\n}\n\n/** Revoked read authority must hide any projection retained before invalidation. */\nexport function editableArtifactAccessRevoked(view: EditableArtifactSyncView): boolean {\n if (view.state !== \"failed\" || !view.lastError) return false;\n return (view.lastError as Error & Readonly<{ code?: unknown }>).code === \"permission_changed\";\n}\n\nexport function EditableArtifactMessage({\n title,\n detail,\n retry,\n retryLabel: retryLabelProp,\n}: {\n title: string;\n detail: string;\n retry?: (() => void) | undefined;\n retryLabel?: string | undefined;\n}) {\n const t = useOpenGeniText();\n const retryLabel =\n retryLabelProp === undefined ? t(\"artifacts.editableArtifactUi.retry\") : retryLabelProp;\n return (\n <div className=\"grid h-full min-h-56 place-items-center bg-og-bg p-6 text-center\">\n <div>\n <p className=\"text-og-base font-medium text-og-fg\">{title}</p>\n <p className=\"mt-1 max-w-lg text-og-sm text-og-fg-muted\">{detail}</p>\n {retry ? (\n <button\n type=\"button\"\n onClick={retry}\n className=\"mt-3 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-1.5 text-og-sm font-medium hover:bg-og-primary-hover outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent\"\n >\n {retryLabel}\n </button>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function asEditableArtifactError(cause: unknown, fallback: string): Error {\n return cause instanceof Error ? cause : new Error(fallback);\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { DownloadIcon, LoaderCircleIcon } from \"lucide-react\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\n\nimport { ArtifactButton } from \"./artifact-chrome\";\nimport { useArtifactSubmissions } from \"./artifact-submissions\";\nimport { useEditableArtifactView } from \"./editable-artifact-ui\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\n/** Host-authenticated export of the saved native head as an Office file. */\nexport type EditableArtifactDownload = (signal: AbortSignal) => Promise<Blob>;\nexport type EditableArtifactDownloadFormat = \"xlsx\" | \"docx\" | \"pptx\";\n\nconst LABELS = {\n xlsx: {\n download: \"artifacts.spreadsheetDownload.download\",\n preparing: \"artifacts.spreadsheetDownload.preparing\",\n failed: \"artifacts.spreadsheetDownload.downloadFailedTryAgain\",\n title: \"artifacts.spreadsheetDownload.downloadWorkbookAsXlsx\",\n wait: \"artifacts.spreadsheetDownload.waitForWorkbookChangesTo\",\n fallbackName: \"artifacts.spreadsheetDownload.workbook\",\n },\n docx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadDocumentAsDocx\",\n wait: \"artifacts.artifactDownload.waitForDocumentChangesTo\",\n fallbackName: \"artifacts.artifactDownload.document\",\n },\n pptx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadPresentationAsPptx\",\n wait: \"artifacts.artifactDownload.waitForPresentationChangesTo\",\n fallbackName: \"artifacts.artifactDownload.presentation\",\n },\n} as const;\n\n/**\n * Download action shared by every editable modality. It waits for live sync\n * with no pending or still-submitting edits, so the export is the latest head.\n */\nexport function EditableArtifactDownloadButton({\n session,\n title,\n download,\n format,\n}: {\n session: EditableArtifactSession;\n title: string;\n download: EditableArtifactDownload;\n format: EditableArtifactDownloadFormat;\n}) {\n const t = useOpenGeniText();\n const labels = LABELS[format];\n const view = useEditableArtifactView(session);\n const submissions = useArtifactSubmissions();\n const submitting = useSyncExternalStore(\n submissions.subscribe,\n submissions.getPending,\n submissions.getPending,\n );\n const active = useRef<AbortController | null>(null);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(false);\n const ready =\n view.state === \"live\" &&\n submitting === 0 &&\n view.pendingTransactions === 0 &&\n view.blockedPending.length === 0 &&\n !view.authoringBlockedReason;\n useEffect(() => () => active.current?.abort(), [session]);\n useEffect(() => {\n if (view.state === \"failed\" || view.state === \"closed\") {\n active.current?.abort();\n active.current = null;\n setBusy(false);\n }\n }, [view.state]);\n\n const start = async () => {\n if (active.current || !ready || submissions.getPending()) return;\n // Re-read the live view: a just-committed edit may precede React's next render.\n const current = session.getView();\n if (\n current.state !== \"live\" ||\n current.pendingTransactions ||\n current.blockedPending.length ||\n current.authoringBlockedReason\n )\n return;\n const controller = new AbortController();\n active.current = controller;\n setBusy(true);\n setError(false);\n try {\n const blob = await download(controller.signal);\n if (controller.signal.aborted) return;\n const url = URL.createObjectURL(blob);\n try {\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = downloadFileName(title, format, t(labels.fallbackName));\n anchor.rel = \"noopener\";\n anchor.click();\n } finally {\n setTimeout(() => URL.revokeObjectURL(url), 0);\n }\n } catch {\n if (!controller.signal.aborted) setError(true);\n } finally {\n if (!controller.signal.aborted) {\n active.current = null;\n setBusy(false);\n }\n }\n };\n\n return (\n <>\n {error ? (\n <span role=\"alert\" className=\"text-og-xs text-og-fg-muted\">\n {t(labels.failed)}\n </span>\n ) : null}\n <ArtifactButton\n onClick={() => void start()}\n disabled={busy || !ready}\n title={ready ? t(labels.title) : t(labels.wait)}\n >\n {busy ? (\n <LoaderCircleIcon className=\"animate-spin\" aria-hidden />\n ) : (\n <DownloadIcon aria-hidden />\n )}\n {busy ? t(labels.preparing) : t(labels.download)}\n </ArtifactButton>\n </>\n );\n}\n\n/** Safe local file name: the artifact title with exactly one matching extension. */\nexport function downloadFileName(\n title: string,\n format: EditableArtifactDownloadFormat,\n fallback: string,\n): string {\n const base =\n title\n .replace(/[\\\\/:*?\"<>|\\u0000-\\u001f]/g, \"_\")\n .replace(new RegExp(`\\\\.${format}$`, \"i\"), \"\")\n .trim() || fallback;\n return `${base}.${format}`;\n}\n"],"mappings":"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","names":["jsx","useState","jsx","jsxs","useState","LoaderCircleIcon","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","LoaderCircleIcon"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/artifacts/artifact-surface.tsx","../src/components/artifacts/editable-artifact-ui.tsx","../src/components/artifacts/artifact-submissions.tsx","../src/components/artifacts/artifact-download.tsx"],"sourcesContent":["import {\n FileSpreadsheetIcon,\n FileTextIcon,\n LoaderCircleIcon,\n PresentationIcon,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"../../lib/cn\";\nimport { useOpenGeniText, type OpenGeniText } from \"../../messages/runtime\";\n\nexport type ArtifactModality = \"spreadsheet\" | \"document\" | \"presentation\";\n\nexport type ArtifactSurfaceProps = {\n modality: ArtifactModality;\n title: string;\n /** An embedding host may already provide the artifact title and navigation. */\n showHeader?: boolean | undefined;\n subtitle?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n children: ReactNode;\n footer?: ReactNode | undefined;\n busy?: boolean | undefined;\n className?: string | undefined;\n};\n\nconst MODALITY_LABEL = (t: OpenGeniText): Record<ArtifactModality, string> => ({\n spreadsheet: t(\"artifacts.artifactSurface.spreadsheet\"),\n document: t(\"artifacts.artifactSurface.document\"),\n presentation: t(\"artifacts.artifactSurface.presentation\"),\n});\n\nfunction ModalityIcon({ modality }: { modality: ArtifactModality }) {\n switch (modality) {\n case \"spreadsheet\":\n return <FileSpreadsheetIcon className=\"size-4\" />;\n case \"document\":\n return <FileTextIcon className=\"size-4\" />;\n case \"presentation\":\n return <PresentationIcon className=\"size-4\" />;\n }\n}\n\n/**\n * Modality-neutral artifact chrome. It deliberately owns no file, session, or\n * persistence state: hosts can use the same surface for a local draft, a\n * durable Opengeni artifact, or a collaborative projection.\n */\nexport function ArtifactSurface({\n modality,\n title,\n showHeader = true,\n subtitle,\n actions,\n children,\n footer,\n busy = false,\n className,\n}: ArtifactSurfaceProps) {\n const t = useOpenGeniText();\n return (\n <section\n aria-label={`${MODALITY_LABEL(t)[modality]}: ${title}`}\n aria-busy={busy || undefined}\n data-og-artifact-modality={modality}\n className={cn(\n \"og-root flex h-full min-h-0 min-w-0 flex-col overflow-hidden rounded-og-lg border border-og-border bg-og-surface-1 text-og-fg shadow-og-md\",\n className,\n )}\n >\n {showHeader ? (\n <header className=\"flex min-h-11 shrink-0 items-center gap-2 border-b border-og-border bg-og-surface-2 px-3\">\n <span\n aria-hidden\n className=\"grid size-7 shrink-0 place-items-center rounded-og-sm bg-og-surface-3 text-og-fg-muted\"\n >\n <ModalityIcon modality={modality} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-og-base font-medium text-og-fg\">{title}</h2>\n {subtitle ? (\n <div className=\"truncate text-og-xs text-og-fg-muted\">{subtitle}</div>\n ) : null}\n </div>\n {busy ? (\n <LoaderCircleIcon\n aria-label={t(\"artifacts.artifactSurface.updatingArtifact\")}\n className=\"size-4 shrink-0 animate-spin text-og-fg-muted\"\n />\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </header>\n ) : (\n <>\n {typeof subtitle === \"string\" || typeof subtitle === \"number\" ? (\n <span role=\"status\" className=\"sr-only\">\n {subtitle}\n </span>\n ) : null}\n {actions ? (\n <div className=\"flex shrink-0 items-center justify-end gap-1 border-b border-og-border px-3 py-1\">\n {actions}\n </div>\n ) : null}\n </>\n )}\n\n <div className=\"min-h-0 min-w-0 flex-1\">{children}</div>\n\n {footer ? (\n <footer className=\"shrink-0 border-t border-og-border bg-og-surface-2\">{footer}</footer>\n ) : null}\n </section>\n );\n}\n","import type {\n EditableArtifactSession,\n EditableArtifactSyncView,\n} from \"@opengeni/sdk/editable-artifacts\";\nimport { useEffect, useState } from \"react\";\nimport { type OpenGeniText } from \"../../messages/runtime\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\nexport function useEditableArtifactView(\n session: EditableArtifactSession,\n): EditableArtifactSyncView {\n const [view, setView] = useState(() => session.getView());\n useEffect(() => {\n setView(session.getView());\n return session.subscribe(setView);\n }, [session]);\n return view;\n}\n\n/** Changes whenever the Worker-resident speculative projection may have changed. */\nexport function editableArtifactProjectionKey(view: EditableArtifactSyncView): string {\n return [\n view.state,\n view.cursor,\n view.headSequence,\n view.pendingTransactions,\n view.blockedPending.map((entry) => `${entry.clientTransactionId}:${entry.code}`).join(\",\"),\n ].join(\":\");\n}\n\nexport function editableArtifactStatusLabel(\n t: OpenGeniText,\n view: EditableArtifactSyncView,\n): string {\n switch (view.state) {\n case \"idle\":\n case \"connecting\":\n return t(\"artifacts.editableArtifactUi.connecting\");\n case \"syncing\":\n case \"resyncing\":\n return t(\"artifacts.editableArtifactUi.syncing\");\n case \"reconnecting\":\n return t(\"artifacts.editableArtifactUi.reconnecting\");\n case \"unsupported\":\n return t(\"artifacts.editableArtifactUi.thisArtifactVersionIsNot\");\n case \"failed\":\n if (editableArtifactAccessRevoked(view)) {\n return t(\"artifacts.editableArtifactUi.youNoLongerHaveAccess\");\n }\n return view.lastError?.message ?? t(\"artifacts.editableArtifactUi.couldNotOpenThisArtifact\");\n case \"closed\":\n return t(\"artifacts.editableArtifactUi.artifactSessionClosed\");\n case \"live\":\n return view.writable\n ? t(\"artifacts.editableArtifactUi.live\")\n : t(\"artifacts.editableArtifactUi.liveReadOnly\");\n }\n}\n\n/** Revoked read authority must hide any projection retained before invalidation. */\nexport function editableArtifactAccessRevoked(view: EditableArtifactSyncView): boolean {\n if (view.state !== \"failed\" || !view.lastError) return false;\n return (view.lastError as Error & Readonly<{ code?: unknown }>).code === \"permission_changed\";\n}\n\nexport function EditableArtifactMessage({\n title,\n detail,\n retry,\n retryLabel: retryLabelProp,\n}: {\n title: string;\n detail: string;\n retry?: (() => void) | undefined;\n retryLabel?: string | undefined;\n}) {\n const t = useOpenGeniText();\n const retryLabel =\n retryLabelProp === undefined ? t(\"artifacts.editableArtifactUi.retry\") : retryLabelProp;\n return (\n <div className=\"grid h-full min-h-56 place-items-center bg-og-bg p-6 text-center\">\n <div>\n <p className=\"text-og-base font-medium text-og-fg\">{title}</p>\n <p className=\"mt-1 max-w-lg text-og-sm text-og-fg-muted\">{detail}</p>\n {retry ? (\n <button\n type=\"button\"\n onClick={retry}\n className=\"mt-3 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-1.5 text-og-sm font-medium hover:bg-og-primary-hover outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent\"\n >\n {retryLabel}\n </button>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function asEditableArtifactError(cause: unknown, fallback: string): Error {\n return cause instanceof Error ? cause : new Error(fallback);\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { createContext, useContext, useState, type ReactNode } from \"react\";\n\nfunction createSubmissionQueue() {\n let pending = 0;\n const listeners = new Set<() => void>();\n const emit = () => {\n for (const listener of listeners) listener();\n };\n return {\n getPending: () => pending,\n subscribe: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n async run<T>(invoke: () => Promise<T>): Promise<T> {\n // The SDK's causal queue and Worker authoring precede pendingTransactions.\n // Latch synchronously so a same-event blur/click cannot export an older head.\n pending++;\n emit();\n try {\n return await invoke();\n } finally {\n pending--;\n emit();\n }\n },\n };\n}\n\nexport type ArtifactSubmissions = Readonly<{\n getPending: () => number;\n subscribe: (listener: () => void) => () => void;\n run: <T>(invoke: () => Promise<T>) => Promise<T>;\n}>;\n\nconst standaloneQueue: ArtifactSubmissions = {\n getPending: () => 0,\n subscribe: (_listener: () => void) => () => {},\n run: <T,>(invoke: () => Promise<T>) => invoke(),\n};\nconst SubmissionContext = createContext<ArtifactSubmissions | null>(null);\n\nexport function ArtifactSubmissionProvider({ children }: { children: ReactNode }) {\n const [queue] = useState(createSubmissionQueue);\n return <SubmissionContext.Provider value={queue}>{children}</SubmissionContext.Provider>;\n}\n\n/** UI authoring submissions not yet visible as SDK pending transactions. */\nexport function useArtifactSubmissions(): ArtifactSubmissions {\n return useContext(SubmissionContext) ?? standaloneQueue;\n}\n\nconst SESSION_KEYS = new WeakMap<EditableArtifactSession, number>();\nlet nextSessionKey = 0;\n\n/** Stable per-session React key so a replaced session never inherits queued state. */\nexport function artifactSubmissionSessionKey(session: EditableArtifactSession): number {\n let key = SESSION_KEYS.get(session);\n if (key === undefined) {\n key = ++nextSessionKey;\n SESSION_KEYS.set(session, key);\n }\n return key;\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { DownloadIcon, LoaderCircleIcon } from \"lucide-react\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\n\nimport { ArtifactButton } from \"./artifact-chrome\";\nimport { useArtifactSubmissions } from \"./artifact-submissions\";\nimport { useEditableArtifactView } from \"./editable-artifact-ui\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\n/** Host-authenticated export of the saved native head as an Office file. */\nexport type EditableArtifactDownload = (signal: AbortSignal) => Promise<Blob>;\nexport type EditableArtifactDownloadFormat = \"xlsx\" | \"docx\" | \"pptx\";\n\nconst LABELS = {\n xlsx: {\n download: \"artifacts.spreadsheetDownload.download\",\n preparing: \"artifacts.spreadsheetDownload.preparing\",\n failed: \"artifacts.spreadsheetDownload.downloadFailedTryAgain\",\n title: \"artifacts.spreadsheetDownload.downloadWorkbookAsXlsx\",\n wait: \"artifacts.spreadsheetDownload.waitForWorkbookChangesTo\",\n fallbackName: \"artifacts.spreadsheetDownload.workbook\",\n },\n docx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadDocumentAsDocx\",\n wait: \"artifacts.artifactDownload.waitForDocumentChangesTo\",\n fallbackName: \"artifacts.artifactDownload.document\",\n },\n pptx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadPresentationAsPptx\",\n wait: \"artifacts.artifactDownload.waitForPresentationChangesTo\",\n fallbackName: \"artifacts.artifactDownload.presentation\",\n },\n} as const;\n\n/**\n * Download action shared by every editable modality. It waits for live sync\n * with no pending or still-submitting edits, so the export is the latest head.\n */\nexport function EditableArtifactDownloadButton({\n session,\n title,\n download,\n format,\n}: {\n session: EditableArtifactSession;\n title: string;\n download: EditableArtifactDownload;\n format: EditableArtifactDownloadFormat;\n}) {\n const t = useOpenGeniText();\n const labels = LABELS[format];\n const view = useEditableArtifactView(session);\n const submissions = useArtifactSubmissions();\n const submitting = useSyncExternalStore(\n submissions.subscribe,\n submissions.getPending,\n submissions.getPending,\n );\n const active = useRef<AbortController | null>(null);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(false);\n const ready =\n view.state === \"live\" &&\n submitting === 0 &&\n view.pendingTransactions === 0 &&\n view.blockedPending.length === 0 &&\n !view.authoringBlockedReason;\n useEffect(() => () => active.current?.abort(), [session]);\n useEffect(() => {\n if (view.state === \"failed\" || view.state === \"closed\") {\n active.current?.abort();\n active.current = null;\n setBusy(false);\n }\n }, [view.state]);\n\n const start = async () => {\n if (active.current || !ready || submissions.getPending()) return;\n // Re-read the live view: a just-committed edit may precede React's next render.\n const current = session.getView();\n if (\n current.state !== \"live\" ||\n current.pendingTransactions ||\n current.blockedPending.length ||\n current.authoringBlockedReason\n )\n return;\n const controller = new AbortController();\n active.current = controller;\n setBusy(true);\n setError(false);\n try {\n const blob = await download(controller.signal);\n if (controller.signal.aborted) return;\n const url = URL.createObjectURL(blob);\n try {\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = downloadFileName(title, format, t(labels.fallbackName));\n anchor.rel = \"noopener\";\n anchor.click();\n } finally {\n setTimeout(() => URL.revokeObjectURL(url), 0);\n }\n } catch {\n if (!controller.signal.aborted) setError(true);\n } finally {\n if (!controller.signal.aborted) {\n active.current = null;\n setBusy(false);\n }\n }\n };\n\n return (\n <>\n {error ? (\n <span role=\"alert\" className=\"text-og-xs text-og-fg-muted\">\n {t(labels.failed)}\n </span>\n ) : null}\n <ArtifactButton\n onClick={() => void start()}\n disabled={busy || !ready}\n title={ready ? t(labels.title) : t(labels.wait)}\n >\n {busy ? (\n <LoaderCircleIcon className=\"animate-spin\" aria-hidden />\n ) : (\n <DownloadIcon aria-hidden />\n )}\n {busy ? t(labels.preparing) : t(labels.download)}\n </ArtifactButton>\n </>\n );\n}\n\n/** Safe local file name: the artifact title with exactly one matching extension. */\nexport function downloadFileName(\n title: string,\n format: EditableArtifactDownloadFormat,\n fallback: string,\n): string {\n const base =\n title\n .replace(/[\\\\/:*?\"<>|\\u0000-\\u001f]/g, \"_\")\n .replace(new RegExp(`\\\\.${format}$`, \"i\"), \"\")\n .trim() || fallback;\n return `${base}.${format}`;\n}\n"],"mappings":"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","names":["jsx","jsxs","useState","jsx","LoaderCircleIcon","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","LoaderCircleIcon"]}
|
|
@@ -8,21 +8,9 @@ import {
|
|
|
8
8
|
useInteractionInvalidation,
|
|
9
9
|
useViewerMenuDismiss
|
|
10
10
|
} from "./chunk-NL4NQTZQ.js";
|
|
11
|
-
import {
|
|
12
|
-
copyTextToClipboard
|
|
13
|
-
} from "./chunk-PEHTX3V7.js";
|
|
14
11
|
import {
|
|
15
12
|
interactionHostPlatform
|
|
16
13
|
} from "./chunk-ZUWF4NF7.js";
|
|
17
|
-
import {
|
|
18
|
-
usePageLiveActivity
|
|
19
|
-
} from "./chunk-NAWXARTY.js";
|
|
20
|
-
import {
|
|
21
|
-
useEmbeddedBrowserInteraction
|
|
22
|
-
} from "./chunk-ZGFU4LVW.js";
|
|
23
|
-
import {
|
|
24
|
-
formatBytes
|
|
25
|
-
} from "./chunk-XUNI5SSO.js";
|
|
26
14
|
import {
|
|
27
15
|
STREAM_CLOSE_REASON_NORMAL,
|
|
28
16
|
STREAM_KIND_BROWSER,
|
|
@@ -32,6 +20,18 @@ import {
|
|
|
32
20
|
encodeStreamClose,
|
|
33
21
|
encodeStreamOpen
|
|
34
22
|
} from "./chunk-TNEZNMSN.js";
|
|
23
|
+
import {
|
|
24
|
+
copyTextToClipboard
|
|
25
|
+
} from "./chunk-PEHTX3V7.js";
|
|
26
|
+
import {
|
|
27
|
+
usePageLiveActivity
|
|
28
|
+
} from "./chunk-NAWXARTY.js";
|
|
29
|
+
import {
|
|
30
|
+
useEmbeddedBrowserInteraction
|
|
31
|
+
} from "./chunk-ZGFU4LVW.js";
|
|
32
|
+
import {
|
|
33
|
+
formatBytes
|
|
34
|
+
} from "./chunk-XUNI5SSO.js";
|
|
35
35
|
import {
|
|
36
36
|
cn
|
|
37
37
|
} from "./chunk-TXS65BB2.js";
|
|
@@ -4810,4 +4810,4 @@ export {
|
|
|
4810
4810
|
staleBrowserEndRetryDelayMs,
|
|
4811
4811
|
BrowserViewer
|
|
4812
4812
|
};
|
|
4813
|
-
//# sourceMappingURL=chunk-
|
|
4813
|
+
//# sourceMappingURL=chunk-475IS53W.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
BillingClassMark,
|
|
4
4
|
ModelMark,
|
|
5
5
|
PickerNavRow
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-OTFNGTAL.js";
|
|
7
7
|
import {
|
|
8
8
|
MENU_CHECK_CLASS,
|
|
9
9
|
MENU_LABEL_CLASS,
|
|
@@ -305,4 +305,4 @@ export {
|
|
|
305
305
|
ModelPolicyPickerMenu,
|
|
306
306
|
ModelPolicyPickerPopover
|
|
307
307
|
};
|
|
308
|
-
//# sourceMappingURL=chunk-
|
|
308
|
+
//# sourceMappingURL=chunk-52KMXC7E.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
editableArtifactStatusLabel,
|
|
9
9
|
useArtifactSubmissions,
|
|
10
10
|
useEditableArtifactView
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-3PGBCUVF.js";
|
|
12
12
|
import {
|
|
13
13
|
cn
|
|
14
14
|
} from "./chunk-TXS65BB2.js";
|
|
@@ -3848,4 +3848,4 @@ export {
|
|
|
3848
3848
|
EditableSpreadsheetGrid,
|
|
3849
3849
|
EditableSpreadsheetArtifactSurface
|
|
3850
3850
|
};
|
|
3851
|
-
//# sourceMappingURL=chunk-
|
|
3851
|
+
//# sourceMappingURL=chunk-6SU56JNB.js.map
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
editableArtifactStatusLabel,
|
|
15
15
|
useArtifactSubmissions,
|
|
16
16
|
useEditableArtifactView
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-3PGBCUVF.js";
|
|
18
18
|
import {
|
|
19
19
|
cn
|
|
20
20
|
} from "./chunk-TXS65BB2.js";
|
|
@@ -3547,4 +3547,4 @@ export {
|
|
|
3547
3547
|
PresentationProjectionArtifactSurface,
|
|
3548
3548
|
EditablePresentationArtifactSurface
|
|
3549
3549
|
};
|
|
3550
|
-
//# sourceMappingURL=chunk-
|
|
3550
|
+
//# sourceMappingURL=chunk-6USBH4H7.js.map
|