@marimo-team/frontend 0.25.3-dev124 → 0.25.3-dev127
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/assets/{CellStatus-_Aw9_foI.js → CellStatus-FhctFTd5.js} +1 -1
- package/dist/assets/{ErrorBoundary-DxSzjvbx.js → ErrorBoundary-D8cNDEWs.js} +2 -2
- package/dist/assets/{JsonOutput-B7pGj79O.js → JsonOutput-CKF7zS56.js} +1 -1
- package/dist/assets/{MarimoErrorOutput-Bzo6Bkp5.js → MarimoErrorOutput-BzRg-_e8.js} +1 -1
- package/dist/assets/{RenderHTML-D6AC0IhC.js → RenderHTML-BWp2DyZX.js} +1 -1
- package/dist/assets/{RunButton-BjYsPiKa.js → RunButton-Bgk4RWmz.js} +1 -1
- package/dist/assets/{add-cell-with-ai-CFrR1iW4.js → add-cell-with-ai-DdZy8mLi.js} +1 -1
- package/dist/assets/{add-connection-dialog-CyNAB_W2.js → add-connection-dialog-C8jZYKdn.js} +1 -1
- package/dist/assets/{agent-panel-VOrccb5q.js → agent-panel-Ds9Pb9Dq.js} +1 -1
- package/dist/assets/{ai-model-dropdown-Bfxv_zvu.js → ai-model-dropdown-CBDzZx1M.js} +1 -1
- package/dist/assets/{app-config-button-BRcjv8A_.js → app-config-button-D5D_EmY9.js} +1 -1
- package/dist/assets/{blob-DTYOX-m5.js → blob-CJNyvsia.js} +1 -1
- package/dist/assets/{cell-editor-eKgYK8Bd.js → cell-editor-BTr9z5Wp.js} +1 -1
- package/dist/assets/{cell-link-D3rkqgbU.js → cell-link-I5T63SlT.js} +1 -1
- package/dist/assets/{cells-2HETnlvE.js → cells-B3LEgMh1.js} +1 -1
- package/dist/assets/{chat-display-BrT4VJJK.js → chat-display-H16VjlZr.js} +1 -1
- package/dist/assets/{chat-panel-qpPNEwxV.js → chat-panel-DqrzqlCD.js} +1 -1
- package/dist/assets/{chat-ui-SAdJxg-k.js → chat-ui-DySzMqSB.js} +1 -1
- package/dist/assets/{code-visibility-DYDagVy7.js → code-visibility-E6qbtstz.js} +1 -1
- package/dist/assets/{column-preview-yI7-INkZ.js → column-preview-BdBJaVZ4.js} +1 -1
- package/dist/assets/{command-palette-DF-B_YpW.js → command-palette-Dc3C7NM6.js} +1 -1
- package/dist/assets/{common-DgXKwblm.js → common-Cqs8TPV5.js} +1 -1
- package/dist/assets/{components-CuMhY4Sf.js → components-Cwi1jZWr.js} +1 -1
- package/dist/assets/{config-CD1IuZFJ.js → config-BTFDx3Zj.js} +1 -1
- package/dist/assets/{config-DMz7oN0r.js → config-CqfGrErg.js} +1 -1
- package/dist/assets/{datasource-D9JMcEAP.js → datasource-D1_5m7Yd.js} +1 -1
- package/dist/assets/{dependency-graph-panel-BVJWPCvw.js → dependency-graph-panel-C4zXeWSh.js} +1 -1
- package/dist/assets/{documentation-panel--wI4XHso.js → documentation-panel-mAZeRrD1.js} +1 -1
- package/dist/assets/{download-Dod42wfD.js → download-CE9fT9D_.js} +1 -1
- package/dist/assets/{edit-page-Uj9YSRMX.js → edit-page-B85w4NTO.js} +4 -4
- package/dist/assets/{error-entries-D00nWhWE.js → error-entries-Dx8Rtti7.js} +1 -1
- package/dist/assets/{error-panel-CcN_1PWf.js → error-panel-DAXHR0Ch.js} +1 -1
- package/dist/assets/feedback-button-BPkAz7n4.js +1 -0
- package/dist/assets/{feedback-button-ByGgqUsX.js → feedback-button-C62fC5qU.js} +1 -1
- package/dist/assets/{file-explorer-panel-eTEqtMPW.js → file-explorer-panel-BwZcEQr-.js} +1 -1
- package/dist/assets/{file-name-input-D5SfTNWh.js → file-name-input-CmwUD7Hx.js} +1 -1
- package/dist/assets/{floating-outline-B-k3P_AO.js → floating-outline-PAiDriV4.js} +1 -1
- package/dist/assets/{gallery-page-BzbMhDHi.js → gallery-page-C6ayh2RI.js} +1 -1
- package/dist/assets/{glide-data-editor-BMqhUrHI.js → glide-data-editor-C4RmQotP.js} +1 -1
- package/dist/assets/{home-page-DJcYWiga.js → home-page-DKgFJ5fQ.js} +1 -1
- package/dist/assets/{hooks-CGLb_CCz.js → hooks-B3z6BXDe.js} +1 -1
- package/dist/assets/{index-bSIORW11.js → index-Cu7PYFi7.js} +6 -6
- package/dist/assets/{layout-C2XnLAfO.js → layout-BD9wfU32.js} +3 -3
- package/dist/assets/{logs-panel-B3T1GFBk.js → logs-panel-CTdAN6rZ.js} +1 -1
- package/dist/assets/{markdown-renderer-BhiTvxtL.js → markdown-renderer-BbXJkH92.js} +1 -1
- package/dist/assets/{name-cell-input-CgAObR6N.js → name-cell-input-CmZvZAsE.js} +1 -1
- package/dist/assets/{outline-panel-BhBb7Vqw.js → outline-panel-D8aMHyb1.js} +1 -1
- package/dist/assets/{packages-panel-Bt0xNpFl.js → packages-panel-_-hESZFB.js} +1 -1
- package/dist/assets/{panel-accordion-state-ZsUdpAYn.js → panel-accordion-state-DXo4a0Uu.js} +1 -1
- package/dist/assets/panels-RQ6Xn9SS.js +1 -0
- package/dist/assets/{process-output-CeOMwE17.js → process-output-BIrwpJB4.js} +1 -1
- package/dist/assets/{readonly-code-display-TvOC7ESE.js → readonly-code-display-yuks_SYy.js} +1 -1
- package/dist/assets/{readonly-python-code-Cqkfdeyo.js → readonly-python-code-BhBEAP6F.js} +1 -1
- package/dist/assets/{reveal-component-CwE6U9oJ.js → reveal-component-rMF_Gs2J.js} +1 -1
- package/dist/assets/{run-page-CtonWTtJ.js → run-page-BiotN_kV.js} +1 -1
- package/dist/assets/{runtime-details-state-CKqJSfSR.js → runtime-details-state-Bv77N7ch.js} +1 -1
- package/dist/assets/{scratchpad-panel-CwVBedfZ.js → scratchpad-panel-DRp6uxVD.js} +1 -1
- package/dist/assets/{session-panel-CdHdKUCF.js → session-panel-D_AV0U6M.js} +1 -1
- package/dist/assets/{snippets-panel-DYLWOLYw.js → snippets-panel-BPrNsfAG.js} +1 -1
- package/dist/assets/{state-DgECPVFs.js → state-Bvy6oc4o.js} +3 -3
- package/dist/assets/{state-DZN9vZ6z.js → state-DMO2unyy.js} +1 -1
- package/dist/assets/{terminal-Ca-kubKb.js → terminal-B-foRg1j.js} +1 -1
- package/dist/assets/{tracing-B0J2ctTm.js → tracing-DglCQA_A.js} +1 -1
- package/dist/assets/{tracing-panel-C1OCpoeE.js → tracing-panel-Dig-XuOl.js} +2 -2
- package/dist/assets/{tree-actions-sjBxIglc.js → tree-actions-BASXwJd1.js} +1 -1
- package/dist/assets/{useAddCell-CaXnFGki.js → useAddCell-bvRpB5dY.js} +1 -1
- package/dist/assets/{useBoolean-Dd2nWXFJ.js → useBoolean-rA1CzmYl.js} +1 -1
- package/dist/assets/{useCellActionButton-CJ90CMEj.js → useCellActionButton-Cv2-KLlH.js} +1 -1
- package/dist/assets/{useDeleteCell-D9N85822.js → useDeleteCell-B2rRUNeJ.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-CzAE0cm-.js → useDependencyPanelTab-B8jk4N46.js} +1 -1
- package/dist/assets/{useInstallPackage-wcDq9hYT.js → useInstallPackage-DWxYtxn-.js} +1 -1
- package/dist/assets/{useNotebookActions-CAMEQ38y.js → useNotebookActions-HhHejFpc.js} +1 -1
- package/dist/assets/{useRunCells-DGakx8hj.js → useRunCells-Bz-vP8K6.js} +1 -1
- package/dist/assets/{useSplitCell-AK5BKPGM.js → useSplitCell-4bnvSMAx.js} +1 -1
- package/dist/assets/{vega-component-BeyxAJad.js → vega-component-D3px3WTM.js} +1 -1
- package/dist/index.html +24 -24
- package/package.json +1 -1
- package/src/core/host/__tests__/notebook-client.test.ts +18 -6
- package/src/core/host/__tests__/static.test.ts +4 -2
- package/src/core/host/__tests__/wasm.test.ts +12 -10
- package/src/core/host/backend.ts +8 -3
- package/src/core/host/notebook-client.ts +15 -15
- package/src/core/host/static.ts +2 -2
- package/src/core/host/wasm.ts +4 -3
- package/src/core/runtime/__tests__/runtime.test.ts +17 -0
- package/src/core/runtime/runtime.ts +13 -0
- package/src/core/websocket/__tests__/backend.test.ts +111 -0
- package/src/core/websocket/__tests__/useNotebookClient.hook.test.tsx +32 -27
- package/src/core/websocket/__tests__/useNotebookSession.hook.test.tsx +7 -4
- package/src/core/websocket/backend.ts +68 -0
- package/src/core/websocket/transports/__tests__/notebook.test.ts +9 -56
- package/src/core/websocket/transports/notebook.ts +15 -38
- package/src/core/websocket/useNotebookClient.ts +6 -6
- package/src/core/websocket/useNotebookSession.tsx +3 -2
- package/dist/assets/feedback-button-tbWwJ_t6.js +0 -1
- package/dist/assets/panels-DJghvIKo.js +0 -1
|
@@ -8,13 +8,19 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
8
8
|
import type { NotebookTransport } from "@marimo-team/client";
|
|
9
9
|
import { ConnectionState } from "../types";
|
|
10
10
|
import { Deferred } from "@/utils/Deferred";
|
|
11
|
-
import {
|
|
11
|
+
import type { NotebookBackend } from "../../host/backend";
|
|
12
|
+
import { createEditorBackend } from "../backend";
|
|
12
13
|
import { useNotebookClient } from "../useNotebookClient";
|
|
13
14
|
import { fixtureMessages } from "../../host/__tests__/fixtures";
|
|
14
15
|
import { agentAttachmentsAtom } from "../../attachments/state";
|
|
15
16
|
import { notebookClientAtom } from "../state";
|
|
16
17
|
|
|
17
|
-
vi.mock("../
|
|
18
|
+
vi.mock("../backend", () => ({ createEditorBackend: vi.fn() }));
|
|
19
|
+
|
|
20
|
+
/** A backend that follows `transport` and cannot edit. */
|
|
21
|
+
function backend(transport: NotebookTransport): NotebookBackend {
|
|
22
|
+
return { transport, notebook: () => ({ edit: vi.fn() }) };
|
|
23
|
+
}
|
|
18
24
|
|
|
19
25
|
/** A transport whose connections the test drives. */
|
|
20
26
|
function makeTransport() {
|
|
@@ -53,6 +59,7 @@ function setup(
|
|
|
53
59
|
transportType: "websocket" as const,
|
|
54
60
|
url: () => "ws://localhost/ws",
|
|
55
61
|
headers: () => ({}),
|
|
62
|
+
notebookUrl: (id: string) => new URL(`http://localhost/notebooks/${id}`),
|
|
56
63
|
waitUntilReady: async () => undefined,
|
|
57
64
|
checkHealth: async () => true,
|
|
58
65
|
onNotification: vi.fn(),
|
|
@@ -70,7 +77,7 @@ function setup(
|
|
|
70
77
|
}
|
|
71
78
|
|
|
72
79
|
beforeEach(() => {
|
|
73
|
-
vi.mocked(
|
|
80
|
+
vi.mocked(createEditorBackend).mockReset();
|
|
74
81
|
});
|
|
75
82
|
|
|
76
83
|
describe("useNotebookClient", () => {
|
|
@@ -78,16 +85,15 @@ describe("useNotebookClient", () => {
|
|
|
78
85
|
"rechecks health after failed startup (healthy: %s)",
|
|
79
86
|
async (healthy) => {
|
|
80
87
|
const fake = makeTransport();
|
|
81
|
-
vi.mocked(
|
|
82
|
-
(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
},
|
|
88
|
+
vi.mocked(createEditorBackend).mockImplementation(({ url }) =>
|
|
89
|
+
backend(async (attempt, handlers) => {
|
|
90
|
+
if (typeof url === "function") {
|
|
91
|
+
await url();
|
|
92
|
+
}
|
|
93
|
+
if (!attempt.signal.aborted) {
|
|
94
|
+
return fake.transport(attempt, handlers);
|
|
95
|
+
}
|
|
96
|
+
}),
|
|
91
97
|
);
|
|
92
98
|
const waitUntilReady = vi
|
|
93
99
|
.fn()
|
|
@@ -125,14 +131,13 @@ describe("useNotebookClient", () => {
|
|
|
125
131
|
it("waits for initial readiness without reviving an unmounted connection", async () => {
|
|
126
132
|
const ready = new Deferred<void>();
|
|
127
133
|
const resolvedUrl = vi.fn();
|
|
128
|
-
vi.mocked(
|
|
129
|
-
(
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
},
|
|
134
|
+
vi.mocked(createEditorBackend).mockImplementation(({ url }) =>
|
|
135
|
+
backend(async () => {
|
|
136
|
+
if (typeof url === "function") {
|
|
137
|
+
await url();
|
|
138
|
+
resolvedUrl();
|
|
139
|
+
}
|
|
140
|
+
}),
|
|
136
141
|
);
|
|
137
142
|
const { result, store, unmount } = setup(false, {
|
|
138
143
|
waitUntilReady: () => ready.promise,
|
|
@@ -152,7 +157,7 @@ describe("useNotebookClient", () => {
|
|
|
152
157
|
|
|
153
158
|
it("exposes host presence to the UI without waiting for kernel-ready", async () => {
|
|
154
159
|
const fake = makeTransport();
|
|
155
|
-
vi.mocked(
|
|
160
|
+
vi.mocked(createEditorBackend).mockReturnValue(backend(fake.transport));
|
|
156
161
|
const { result, store, unmount } = setup();
|
|
157
162
|
await act(async () => Promise.resolve());
|
|
158
163
|
expect(store.get(notebookClientAtom)).toBe(result.current);
|
|
@@ -177,7 +182,7 @@ describe("useNotebookClient", () => {
|
|
|
177
182
|
|
|
178
183
|
it("uses current callbacks and URL providers without reconnecting on a rerender", async () => {
|
|
179
184
|
const fake = makeTransport();
|
|
180
|
-
vi.mocked(
|
|
185
|
+
vi.mocked(createEditorBackend).mockReturnValue(backend(fake.transport));
|
|
181
186
|
const { rerender, options, unmount } = setup();
|
|
182
187
|
await act(async () => Promise.resolve());
|
|
183
188
|
const onNotification = vi.fn();
|
|
@@ -187,8 +192,8 @@ describe("useNotebookClient", () => {
|
|
|
187
192
|
expect(onNotification).toHaveBeenCalledExactlyOnceWith({
|
|
188
193
|
data: { op: "reconnected" },
|
|
189
194
|
});
|
|
190
|
-
expect(
|
|
191
|
-
const [{ url }] = vi.mocked(
|
|
195
|
+
expect(createEditorBackend).toHaveBeenCalledOnce();
|
|
196
|
+
const [{ url }] = vi.mocked(createEditorBackend).mock.calls[0];
|
|
192
197
|
expect(String(await (url as () => Promise<string>)())).toBe(
|
|
193
198
|
"ws://redirected/ws",
|
|
194
199
|
);
|
|
@@ -197,10 +202,10 @@ describe("useNotebookClient", () => {
|
|
|
197
202
|
|
|
198
203
|
it("closes every stream under Strict Mode and only follows the active lifetime", async () => {
|
|
199
204
|
const fakes: ReturnType<typeof makeTransport>[] = [];
|
|
200
|
-
vi.mocked(
|
|
205
|
+
vi.mocked(createEditorBackend).mockImplementation(() => {
|
|
201
206
|
const next = makeTransport();
|
|
202
207
|
fakes.push(next);
|
|
203
|
-
return next.transport;
|
|
208
|
+
return backend(next.transport);
|
|
204
209
|
});
|
|
205
210
|
const { result, store, options, unmount } = setup(true);
|
|
206
211
|
await act(async () => Promise.resolve());
|
|
@@ -21,8 +21,8 @@ import {
|
|
|
21
21
|
vi,
|
|
22
22
|
} from "vitest";
|
|
23
23
|
|
|
24
|
-
vi.mock("../
|
|
25
|
-
|
|
24
|
+
vi.mock("../backend", () => ({
|
|
25
|
+
createEditorBackend: vi.fn(),
|
|
26
26
|
}));
|
|
27
27
|
|
|
28
28
|
vi.mock("@/core/runtime/config", async () => {
|
|
@@ -51,7 +51,7 @@ import { generateSessionId } from "../../kernel/session";
|
|
|
51
51
|
import { RuntimeManager } from "../../runtime/runtime";
|
|
52
52
|
import { WebSocketClosedReason, ConnectionState } from "../types";
|
|
53
53
|
import { classifyCloseEvent } from "../connection-state";
|
|
54
|
-
import {
|
|
54
|
+
import { createEditorBackend } from "../backend";
|
|
55
55
|
import { useNotebookSession } from "../useNotebookSession";
|
|
56
56
|
import { type NotebookTransport, StreamStopped } from "@marimo-team/client";
|
|
57
57
|
|
|
@@ -85,7 +85,10 @@ type FakeTransport = ReturnType<typeof makeTransport>;
|
|
|
85
85
|
|
|
86
86
|
/** Use a fake transport for the next session the hook follows. */
|
|
87
87
|
function withTransport(fake: FakeTransport = makeTransport()) {
|
|
88
|
-
vi.mocked(
|
|
88
|
+
vi.mocked(createEditorBackend).mockReturnValue({
|
|
89
|
+
transport: fake.transport,
|
|
90
|
+
notebook: () => ({ edit: vi.fn() }),
|
|
91
|
+
});
|
|
89
92
|
return fake;
|
|
90
93
|
}
|
|
91
94
|
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { NotebookClient, type StreamUrl } from "@marimo-team/client";
|
|
4
|
+
import type { NotebookId } from "@marimo-team/client/protocol";
|
|
5
|
+
import type { NotebookBackend } from "../host/backend";
|
|
6
|
+
import { PyodideBridge } from "../wasm/bridge";
|
|
7
|
+
import { isWasm } from "../wasm/utils";
|
|
8
|
+
import {
|
|
9
|
+
idle,
|
|
10
|
+
pyodide,
|
|
11
|
+
sessionSse,
|
|
12
|
+
websocket,
|
|
13
|
+
withHeaders,
|
|
14
|
+
} from "./transports/notebook";
|
|
15
|
+
|
|
16
|
+
/** How the editor follows its notebook. */
|
|
17
|
+
export interface EditorBackendOptions {
|
|
18
|
+
static: boolean;
|
|
19
|
+
transportType: "websocket" | "sse";
|
|
20
|
+
/** The session route, read before each connection. */
|
|
21
|
+
url: StreamUrl;
|
|
22
|
+
/** The runtime's headers, read before each request. */
|
|
23
|
+
headers: () => Record<string, string>;
|
|
24
|
+
/** The host URL of a notebook the stream reported. */
|
|
25
|
+
notebookUrl: (notebookId: NotebookId) => URL;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Commands for a notebook the editor cannot change through its backend. */
|
|
29
|
+
function uneditable(): ReturnType<NotebookBackend["notebook"]> {
|
|
30
|
+
return {
|
|
31
|
+
edit: async () => ({
|
|
32
|
+
ok: false,
|
|
33
|
+
status: 501,
|
|
34
|
+
problem: {
|
|
35
|
+
type: "tag:marimo.io,2026:host/unsupported-operation",
|
|
36
|
+
title: "Document editing is unavailable on this connection",
|
|
37
|
+
status: 501,
|
|
38
|
+
},
|
|
39
|
+
}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Choose the backend for the editor's notebook. */
|
|
44
|
+
export function createEditorBackend(
|
|
45
|
+
options: EditorBackendOptions,
|
|
46
|
+
): NotebookBackend {
|
|
47
|
+
if (options.static) {
|
|
48
|
+
return { transport: idle, notebook: uneditable };
|
|
49
|
+
}
|
|
50
|
+
if (isWasm()) {
|
|
51
|
+
return {
|
|
52
|
+
transport: pyodide((consumer) =>
|
|
53
|
+
PyodideBridge.INSTANCE.attachMessageConsumer(consumer),
|
|
54
|
+
),
|
|
55
|
+
notebook: uneditable,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
transport:
|
|
60
|
+
options.transportType === "sse"
|
|
61
|
+
? sessionSse(options.url, options.headers)
|
|
62
|
+
: websocket(options.url),
|
|
63
|
+
notebook: (id) =>
|
|
64
|
+
new NotebookClient(options.notebookUrl(id), {
|
|
65
|
+
fetch: withHeaders(options.headers),
|
|
66
|
+
}),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -11,18 +11,7 @@ import { createNotebookClient } from "../../../host/notebook-client";
|
|
|
11
11
|
import { fixtureMessages } from "../../../host/__tests__/fixtures";
|
|
12
12
|
import { ConnectionState } from "../../../host/connection";
|
|
13
13
|
import { Deferred } from "@/utils/Deferred";
|
|
14
|
-
import {
|
|
15
|
-
createNotebookTransport,
|
|
16
|
-
pyodide,
|
|
17
|
-
sessionSse,
|
|
18
|
-
websocket,
|
|
19
|
-
} from "../notebook";
|
|
20
|
-
|
|
21
|
-
const wasm = vi.hoisted(() => ({ enabled: false, consumer: vi.fn() }));
|
|
22
|
-
vi.mock("../../../wasm/utils", () => ({ isWasm: () => wasm.enabled }));
|
|
23
|
-
vi.mock("../../../wasm/bridge", () => ({
|
|
24
|
-
PyodideBridge: { INSTANCE: { attachMessageConsumer: wasm.consumer } },
|
|
25
|
-
}));
|
|
14
|
+
import { pyodide, sessionSse, websocket } from "../notebook";
|
|
26
15
|
|
|
27
16
|
const encoder = new TextEncoder();
|
|
28
17
|
|
|
@@ -83,14 +72,14 @@ function network(transportType: "websocket" | "sse", url: StreamUrl) {
|
|
|
83
72
|
);
|
|
84
73
|
const count = () =>
|
|
85
74
|
transportType === "websocket" ? FakeSocket.opened.length : requests.length;
|
|
86
|
-
const transport =
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
});
|
|
75
|
+
const transport =
|
|
76
|
+
transportType === "websocket"
|
|
77
|
+
? websocket(url)
|
|
78
|
+
: sessionSse(url, () => ({}));
|
|
79
|
+
const backend = { transport, notebook: () => ({ edit: vi.fn() }) };
|
|
92
80
|
let index = 0;
|
|
93
81
|
return {
|
|
82
|
+
backend,
|
|
94
83
|
transport,
|
|
95
84
|
count,
|
|
96
85
|
opened: async () => {
|
|
@@ -126,8 +115,6 @@ function network(transportType: "websocket" | "sse", url: StreamUrl) {
|
|
|
126
115
|
|
|
127
116
|
afterEach(() => {
|
|
128
117
|
FakeSocket.opened.length = 0;
|
|
129
|
-
wasm.enabled = false;
|
|
130
|
-
wasm.consumer.mockReset();
|
|
131
118
|
vi.unstubAllGlobals();
|
|
132
119
|
vi.useRealTimers();
|
|
133
120
|
});
|
|
@@ -313,7 +300,7 @@ describe.each(["websocket", "sse"] as const)(
|
|
|
313
300
|
const lifetime = new AbortController();
|
|
314
301
|
onTestFinished(() => lifetime.abort());
|
|
315
302
|
connect({
|
|
316
|
-
|
|
303
|
+
backend: connection.backend,
|
|
317
304
|
signal: lifetime.signal,
|
|
318
305
|
checkHealth: async () => true,
|
|
319
306
|
onNotification: vi.fn(),
|
|
@@ -380,7 +367,7 @@ describe.each(["websocket", "sse"] as const)(
|
|
|
380
367
|
const lifetime = new AbortController();
|
|
381
368
|
onTestFinished(() => lifetime.abort());
|
|
382
369
|
connect({
|
|
383
|
-
|
|
370
|
+
backend: connection.backend,
|
|
384
371
|
signal: lifetime.signal,
|
|
385
372
|
checkHealth: async () => true,
|
|
386
373
|
onNotification: vi.fn(),
|
|
@@ -466,37 +453,3 @@ describe("pyodide", () => {
|
|
|
466
453
|
events.close();
|
|
467
454
|
});
|
|
468
455
|
});
|
|
469
|
-
|
|
470
|
-
describe("createNotebookTransport", () => {
|
|
471
|
-
const options = {
|
|
472
|
-
static: false,
|
|
473
|
-
transportType: "websocket" as const,
|
|
474
|
-
url: () => "ws://localhost/ws",
|
|
475
|
-
headers: () => ({}),
|
|
476
|
-
};
|
|
477
|
-
|
|
478
|
-
it.each([
|
|
479
|
-
["a static notebook", { ...options, static: true }, "idle"],
|
|
480
|
-
["WASM", options, "wasm"],
|
|
481
|
-
["SSE", { ...options, transportType: "sse" as const }, "fetch"],
|
|
482
|
-
["the default", options, "socket"],
|
|
483
|
-
] as const)("follows %s", async (_name, chosen, expected) => {
|
|
484
|
-
wasm.enabled = expected === "wasm";
|
|
485
|
-
const fetch = vi.fn(() => new Promise<Response>(() => undefined));
|
|
486
|
-
vi.stubGlobal("fetch", fetch);
|
|
487
|
-
vi.stubGlobal("WebSocket", FakeSocket);
|
|
488
|
-
const events = new NotebookEvents(createNotebookTransport(chosen));
|
|
489
|
-
await vi.waitFor(() =>
|
|
490
|
-
expect(
|
|
491
|
-
{
|
|
492
|
-
idle:
|
|
493
|
-
events.status === "connected" && !wasm.consumer.mock.calls.length,
|
|
494
|
-
wasm: wasm.consumer.mock.calls.length === 1,
|
|
495
|
-
fetch: fetch.mock.calls.length === 1,
|
|
496
|
-
socket: FakeSocket.opened.length === 1,
|
|
497
|
-
}[expected],
|
|
498
|
-
).toBe(true),
|
|
499
|
-
);
|
|
500
|
-
events.close();
|
|
501
|
-
});
|
|
502
|
-
});
|
|
@@ -7,8 +7,6 @@ import {
|
|
|
7
7
|
type StreamUrl,
|
|
8
8
|
} from "@marimo-team/client";
|
|
9
9
|
import { jsonParseWithSpecialChar } from "@/utils/json/json-parser";
|
|
10
|
-
import { PyodideBridge } from "../../wasm/bridge";
|
|
11
|
-
import { isWasm } from "../../wasm/utils";
|
|
12
10
|
import { classifyCloseEvent } from "../connection-state";
|
|
13
11
|
|
|
14
12
|
/** The server can be slow to accept when many notebooks are open. */
|
|
@@ -40,6 +38,19 @@ async function resolve(url: StreamUrl): Promise<URL | undefined> {
|
|
|
40
38
|
}
|
|
41
39
|
}
|
|
42
40
|
|
|
41
|
+
/** Send each request with the runtime's headers, read before each request. */
|
|
42
|
+
export function withHeaders(
|
|
43
|
+
headers: () => Record<string, string>,
|
|
44
|
+
): typeof globalThis.fetch {
|
|
45
|
+
return (input, init) => {
|
|
46
|
+
const sent = new Headers(init?.headers);
|
|
47
|
+
for (const [name, value] of Object.entries(headers())) {
|
|
48
|
+
sent.set(name, value);
|
|
49
|
+
}
|
|
50
|
+
return globalThis.fetch(input, { ...init, headers: sent });
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
43
54
|
/** A resume cursor and replica belong to the session that produced them. */
|
|
44
55
|
function withSessionIdentity(
|
|
45
56
|
url: StreamUrl,
|
|
@@ -131,13 +142,7 @@ export function sessionSse(
|
|
|
131
142
|
return withSessionIdentity(url, (target) =>
|
|
132
143
|
sse(target, {
|
|
133
144
|
parseData: jsonParseWithSpecialChar,
|
|
134
|
-
fetch: (
|
|
135
|
-
const sent = new Headers(init?.headers);
|
|
136
|
-
for (const [name, value] of Object.entries(headers())) {
|
|
137
|
-
sent.set(name, value);
|
|
138
|
-
}
|
|
139
|
-
return globalThis.fetch(input, { ...init, headers: sent });
|
|
140
|
-
},
|
|
145
|
+
fetch: withHeaders(headers),
|
|
141
146
|
stop: (frame) =>
|
|
142
147
|
frame.event === "close"
|
|
143
148
|
? stopOn(frame.data as { code?: number; reason?: string })
|
|
@@ -147,7 +152,7 @@ export function sessionSse(
|
|
|
147
152
|
}
|
|
148
153
|
|
|
149
154
|
/** A connection that opens and delivers nothing, for static notebooks. */
|
|
150
|
-
const idle: NotebookTransport = ({ signal }, { open }) =>
|
|
155
|
+
export const idle: NotebookTransport = ({ signal }, { open }) =>
|
|
151
156
|
new Promise((settle) => {
|
|
152
157
|
open();
|
|
153
158
|
signal.addEventListener("abort", () => settle(), { once: true });
|
|
@@ -183,31 +188,3 @@ export function pyodide(
|
|
|
183
188
|
signal.addEventListener("abort", () => settle(), { once: true });
|
|
184
189
|
});
|
|
185
190
|
}
|
|
186
|
-
|
|
187
|
-
/** How the editor follows its notebook. */
|
|
188
|
-
export interface NotebookTransportOptions {
|
|
189
|
-
static: boolean;
|
|
190
|
-
transportType: "websocket" | "sse";
|
|
191
|
-
/** The session route, read before each connection. */
|
|
192
|
-
url: StreamUrl;
|
|
193
|
-
/** The runtime's headers, read before each request. */
|
|
194
|
-
headers: () => Record<string, string>;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/** Choose the transport for the editor's notebook. */
|
|
198
|
-
export function createNotebookTransport(
|
|
199
|
-
options: NotebookTransportOptions,
|
|
200
|
-
): NotebookTransport {
|
|
201
|
-
if (options.static) {
|
|
202
|
-
return idle;
|
|
203
|
-
}
|
|
204
|
-
if (isWasm()) {
|
|
205
|
-
return pyodide((consumer) =>
|
|
206
|
-
PyodideBridge.INSTANCE.attachMessageConsumer(consumer),
|
|
207
|
-
);
|
|
208
|
-
}
|
|
209
|
-
if (options.transportType === "sse") {
|
|
210
|
-
return sessionSse(options.url, options.headers);
|
|
211
|
-
}
|
|
212
|
-
return websocket(options.url);
|
|
213
|
-
}
|
|
@@ -13,12 +13,9 @@ import {
|
|
|
13
13
|
type NotebookClient,
|
|
14
14
|
} from "../host/notebook-client";
|
|
15
15
|
import { notebookClientAtom } from "./state";
|
|
16
|
-
import {
|
|
17
|
-
createNotebookTransport,
|
|
18
|
-
type NotebookTransportOptions,
|
|
19
|
-
} from "./transports/notebook";
|
|
16
|
+
import { createEditorBackend, type EditorBackendOptions } from "./backend";
|
|
20
17
|
|
|
21
|
-
type Options = Omit<
|
|
18
|
+
type Options = Omit<EditorBackendOptions, "url"> & {
|
|
22
19
|
/** The session route, read before each connection. */
|
|
23
20
|
url: () => string;
|
|
24
21
|
/** Wait until the host can accept a connection. */
|
|
@@ -33,6 +30,7 @@ export function useNotebookClient(options: Options): NotebookClient {
|
|
|
33
30
|
const controller = useMemo(() => createNotebookClient(store), [store]);
|
|
34
31
|
const url = useEvent(options.url);
|
|
35
32
|
const headers = useEvent(options.headers);
|
|
33
|
+
const notebookUrl = useEvent(options.notebookUrl);
|
|
36
34
|
const waitUntilReady = useEvent(options.waitUntilReady);
|
|
37
35
|
const checkHealth = useEvent(options.checkHealth);
|
|
38
36
|
const onNotification = useEvent(options.onNotification);
|
|
@@ -42,7 +40,7 @@ export function useNotebookClient(options: Options): NotebookClient {
|
|
|
42
40
|
let needsInitialReadiness = true;
|
|
43
41
|
store.set(notebookClientAtom, controller.client);
|
|
44
42
|
controller.connect({
|
|
45
|
-
|
|
43
|
+
backend: createEditorBackend({
|
|
46
44
|
static: isStatic,
|
|
47
45
|
transportType,
|
|
48
46
|
url: async () => {
|
|
@@ -60,6 +58,7 @@ export function useNotebookClient(options: Options): NotebookClient {
|
|
|
60
58
|
return url();
|
|
61
59
|
},
|
|
62
60
|
headers,
|
|
61
|
+
notebookUrl,
|
|
63
62
|
}),
|
|
64
63
|
signal: lifetime.signal,
|
|
65
64
|
checkHealth,
|
|
@@ -80,6 +79,7 @@ export function useNotebookClient(options: Options): NotebookClient {
|
|
|
80
79
|
transportType,
|
|
81
80
|
url,
|
|
82
81
|
headers,
|
|
82
|
+
notebookUrl,
|
|
83
83
|
waitUntilReady,
|
|
84
84
|
checkHealth,
|
|
85
85
|
onNotification,
|
|
@@ -75,7 +75,6 @@ import {
|
|
|
75
75
|
import { useStorageActions } from "../storage/state";
|
|
76
76
|
import { useVariablesActions } from "../variables/state";
|
|
77
77
|
import type { VariableName } from "../variables/types";
|
|
78
|
-
import { isWasm } from "../wasm/utils";
|
|
79
78
|
import { WebSocketClosedReason, ConnectionState } from "./types";
|
|
80
79
|
|
|
81
80
|
const SUPPORTS_LAZY_KERNELS = true;
|
|
@@ -418,8 +417,10 @@ export function useNotebookSession(opts: {
|
|
|
418
417
|
: runtimeManager.getWsURL(sessionId).toString(),
|
|
419
418
|
// SSE uses headers for auth. WebSockets carry the token in the URL.
|
|
420
419
|
headers: () => runtimeManager.headers(),
|
|
420
|
+
notebookUrl: (notebookId) => runtimeManager.getNotebookURL(notebookId),
|
|
421
|
+
// Only the host's transports read the URL, so static and WASM never wait.
|
|
421
422
|
waitUntilReady: async () => {
|
|
422
|
-
if (!
|
|
423
|
+
if (!runtimeManager.isSameOrigin) {
|
|
423
424
|
await runtimeManager.waitForHealthy();
|
|
424
425
|
}
|
|
425
426
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./feedback-button-ByGgqUsX.js";export{e as FeedbackModal};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{c as t,d as n,f as r,l as i,r as a,t as o,u as s}from"./useEvent-BDjgaBtz.js";import{t as c}from"./react-DVplv7_D.js";import{$ as l,B as u,D as d,Dt as f,Et as p,Gn as m,Hr as h,I as g,Ii as ee,Jn as te,Kn as ne,Mr as re,Oo as _,Ot as ie,R as v,So as ae,St as oe,T as y,Vi as se,Wn as ce,b,ei as le,g as ue,h as de,l as fe,mr as pe,pr as me,qn as he,r as x}from"./cells-2HETnlvE.js";import{N as ge,V as _e,z as ve}from"./schemas-ChRqMOTL.js";import{_ as ye,c as be,g as xe,i as Se,n as Ce,o as S,p as C,r as we,s as Te,t as Ee,v as w}from"./state-DgECPVFs.js";import{t as T}from"./compiler-runtime-BrajqUja.js";import{D as E,d as De,w as Oe}from"./config-DpY86_Yq.js";import{g as D,t as ke}from"./useEventListener-CjDeLqFC.js";import{t as Ae}from"./objects-rLPlQ3X_.js";import{i as O}from"./utils-B4K466FK.js";import{a as k,f as je,m as Me,r as Ne,v as A}from"./session-CMLIzZKw.js";import{M as Pe,T as j,_ as Fe,l as Ie,o as Le,w as M,x as Re}from"./config-CD1IuZFJ.js";import{r as ze}from"./state-B_MCKzBL.js";import{i as Be,o as Ve,r as He}from"./state-C5WAeuTu.js";import{r as Ue}from"./ErrorBoundary-DxSzjvbx.js";import{n as N,t as P}from"./cn-ldLVeaqm.js";import{t as We}from"./jsx-runtime-B74pBk57.js";import{i as F,s as Ge}from"./fullscreen-BWTs8pYZ.js";import{a as I,c as L,i as R,l as z,n as Ke,o as B,r as V,s as H}from"./use-restore-focus-DdS7Tl0F.js";import{Dt as U,Et as W,xt as G}from"./JsonOutput-B7pGj79O.js";import{p as K}from"./download-Dod42wfD.js";import{t as q}from"./tooltip-CkGm8X7m.js";import{t as J}from"./button-D8gVKwe-.js";import{t as Y}from"./createLucideIcon-DfJ2oMlA.js";import{P as X,a as qe,c as Je,i as Ye,n as Xe}from"./layout-C2XnLAfO.js";import{d as Ze,n as Qe}from"./markdown-renderer-BhiTvxtL.js";import{v as $e}from"./write-secret-modal-BEx-EUlh.js";import{n as et}from"./spinner-DyNE-o8o.js";import{c as tt,l as nt,s as rt}from"./readonly-python-code-Cqkfdeyo.js";import{s as it}from"./MarimoErrorOutput-Bzo6Bkp5.js";import{t as at}from"./use-toast-Wu434mLr.js";import{i as ot}from"./strings-C25fhMR_.js";import{t as st}from"./requests-BIFR-h4M.js";import{t as ct}from"./useDebounce-DwTQ_1Pu.js";import{n as lt}from"./useAsyncData-qvoPYHtx.js";import{t as ut}from"./RenderHTML-D6AC0IhC.js";import{t as dt}from"./package-data-CKPmBDtg.js";import{f as ft}from"./useInstallPackage-wcDq9hYT.js";import{a as pt}from"./errors-CNsgAw6m.js";import{s as mt}from"./react-icons.esm-D6tfmvq8.js";import{r as ht}from"./events-CbeVJ6OD.js";import{i as gt}from"./cell-link-D3rkqgbU.js";import{t as _t}from"./useDelayElapsed-BlsDT4TV.js";import{t as vt}from"./requests-DuLJN9Tf.js";import{r as yt,s as bt,t as xt}from"./state-Cv2JW3l9.js";import{n as St}from"./runs-C49hleBy.js";var Ct=Y(`hourglass`,[[`path`,{d:`M5 22h14`,key:`ehvnwv`}],[`path`,{d:`M5 2h14`,key:`pdyrp9`}],[`path`,{d:`M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22`,key:`1d314k`}],[`path`,{d:`M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2`,key:`1vvvr6`}]]),wt=Y(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),Tt=Y(`unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]);function Et(e){let t=Object.keys(e);return{initial:Object.fromEntries(t.map(t=>[t,e[t].initial])),reduce(n,r,i){let a=n;for(let n of t){let t=e[n].on[r.event];if(t===void 0)continue;let o=a[n],s=t(o,r,i);s!==o&&(a={...a,[n]:s})}return a}}}function Dt(e){switch(e.event){case`document`:return e.data.document.notebook_id;case`cell`:return e.data.cell.notebook_id;case`analysis`:return e.data.analysis.notebook_id;case`runtime`:return e.data.runtime.notebook_id;case`attachment`:return e.data.attachment.notebook_id;case`run`:return e.data.run.notebook_id;default:return}}function Ot(e){let t=Et(e),n=t.initial,r={phase:`snapshot`,notebookId:null,notebook:null,resources:n};function i(e,t){if(e.notebookId===t)return e;if(e.notebookId!==null)throw Error(`Notebook stream changed identity`);return{...e,notebookId:t}}function a(e){return e.resources===n&&e.notebook===null?e:{...e,notebook:null,resources:n}}function o(e,n){let r=t.reduce(e.resources,n,{phase:e.phase});return r===e.resources?e:{...e,resources:r}}return{initial:r,reduce(e,t){switch(t.event){case`reset`:return r;case`ready`:return{...o(e,t),phase:`live`};case`notebook`:return{...i(e,t.data.notebook.id),notebook:t.data.notebook};case`host`:case`project`:case`project.removed`:return e;case`notebook.removed`:return e.notebookId!==null&&t.data.id!==e.notebookId?e:a(e);default:{let n=Dt(t);return o(n===void 0?e:i(e,n),t)}}}}}var Z=e(c(),1),Q=T(),$=We(),kt=e=>{let{requires:t,fallback:n,delay:r,children:a}=e,o=n===void 0?null:n,s=r===void 0?0:r,c=i(t),l=_t(c?0:s);return c?a:l?o:null},At=e=>{let t=(0,Q.c)(6),{title:n}=e,r=ct(n,300),i=n===r,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,$.jsx)(et,{className:`size-20 animate-spin text-primary`,"data-testid":`large-spinner`,strokeWidth:1}),t[0]=a):a=t[0];let o=i?`opacity-100`:`opacity-0`,s;t[1]===o?s=t[2]:(s=P(`mt-2 text-muted-foreground font-semibold text-lg transition-opacity duration-300`,o),t[1]=o,t[2]=s);let c;return t[3]!==r||t[4]!==s?(c=(0,$.jsxs)(`div`,{className:`flex flex-col h-full flex-1 items-center justify-center p-4`,children:[a,(0,$.jsx)(`div`,{className:s,children:r})]}),t[3]=r,t[4]=s,t[5]=c):c=t[5],c};function jt(e,t){return e===`edit`||e===`home`||e===`gallery`?!0:e===`present`||k(O.includeCode,`false`)||k(O.showCode,`false`)?!1:k(O.showCode,`true`)?!0:t}function Mt(e){let t=jt(e.mode,e.showAppCode),n=e.hasCells&&e.hasCachedOutputs;return{showCode:t,showCachedOutputs:n,canPaint:e.hasCells&&(t||n||e.allCellsIdle)}}var Nt=r(e=>{let t=!1,n=!0;for(let r of Object.values(e(b).cellRuntime))Qe(r.output)||(t=!0),r.status!==`idle`&&(n=!1);return{hasCachedOutputs:t,allCellsIdle:n}}),Pt=r(e=>e(Nt).hasCachedOutputs),Ft=r(e=>e(Nt).allCellsIdle),It=r(e=>Mt({mode:e(je),showAppCode:e(ze),hasCells:e(ue),hasCachedOutputs:e(Pt),allCellsIdle:e(Ft)})),Lt=r(e=>e(It).canPaint),Rt=e=>{let t=(0,Q.c)(2),{children:n}=e;if(!Pe())return n;let r;return t[0]===n?r=t[1]:(r=(0,$.jsx)(zt,{children:n}),t[0]=n,t[1]=r),r},zt=e=>{let t=(0,Q.c)(8),{children:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=[],t[0]=r):r=t[0];let{error:a}=lt(Vt,r),o=i(Lt),s=(0,Z.useRef)(!1),c,l;if(t[1]!==o||t[2]!==a?(c=()=>{a&&o&&!s.current&&(s.current=!0,D.error(`Pyodide failed to initialize`,a),at({title:`Failed to start the notebook runtime`,description:pt(a),variant:`danger`}))},l=[a,o],t[1]=o,t[2]=a,t[3]=c,t[4]=l):(c=t[3],l=t[4]),(0,Z.useEffect)(c,l),a&&!o)throw a;let u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,$.jsx)(Bt,{}),t[5]=u):u=t[5];let d;return t[6]===n?d=t[7]:(d=(0,$.jsx)(kt,{requires:Lt,fallback:u,children:n}),t[6]=n,t[7]=d),d},Bt=()=>{let e=(0,Q.c)(2),t=i(Ve),n=t.kind===`loading`?t.message:`Loading…`,r;return e[0]===n?r=e[1]:(r=(0,$.jsx)(At,{title:n}),e[0]=n,e[1]=r),r};async function Vt(){return await C.INSTANCE.initialized.promise,!0}var Ht={idle:`./favicon.ico`,success:`data:image/x-icon;base64,AAABAAEAMDAAAAEACACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAXXQAAFd3AwBWeAQAVngEAFd4AwBXeAQAVnkEAFh3AwBXdwQAVXcGAFd4BQBXeAQAWHgEAFd6AwBXeAMAVnkEAFZ5AwBXdwQAV3cFAFd4BABYeAQAV3gEAFh4BABXeAQA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAkYGBgSGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAhgYGBgKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAABxgYGA8ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAABGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAACGBgYDBkZGRkZGRkZGRkZGRkXFhYVGRkZGRkZGRkZGRkZGRkZGRkMGBgYAgAAAAADGBgYDRkZGRkZGRkZGRkZGRcYGBgYFxkZGRkZGRkZGRkZGRkZGRkNGBgYAwAAAAAEGBgYDhkZGRkZGRkZGRkZFxgYGBgYGBcZGRkZGRkZGRkZGRkZGRkOGBgYBAAAAAAFGBgYChkZGRkZGRkZGRkXGBgYGBgYGBgXGRkZGRkZGRkZGRkZGRkKGBgYBQAAAAAGGBgYGRkZGRkZGRkZGRUYGBgYGBgYGBgYFxkZGRkZGRkZGRkZGRkZGBgYBgAAAAAYGBgYGRkZGRkZGRkZGRYYGBgYFxcYGBgYGBcZGRkZGRkZGRkZGRkZGBgYGAAAAAAYGBgYGRkZGRkZGRkZGRYYGBgXGRkXGBgYGBgXGRkZGRkZGRkZGRkZGBgYGAAAAAAGGBgYGRkZGRkZGRkZGRUWFhcZGRkZFxgYGBgYFxkZGRkZGRkZGRkZGBgYBgAAAAAFGBgYChkZGRkZGRkZGRkZGRkZGRkZGRcYGBgYGBcZGRkZGRkZGRkKGBgYBQAAAAAEGBgYDhkZGRkZGRkZGRkZGRkZGRkZGRkXGBgYGBYZGRkZGRkZGRkOGBgYBAAAAAADGBgYDRkZGRkZGRkZGRkZGRkZGRkZGRkZFxgYGBYZGRkZGRkZGRkNGBgYAwAAAAACGBgYDBkZGRkZGRkZGRkZGRkZGRkZGRkZGRUWFhUZGRkZGRkZGRkMGBgYAgAAAAABGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAAABxgYGA8ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAAAAhgYGBgKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAAAAkYGBgSGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//gAH//wAA//4AAH//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA8AAAAAAPAADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP/+AAB//wAA//+AAf//AAD///////8AAP///////wAA`,running:`data:image/x-icon;base64,AAABAAEAMDAAAAEACACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAA0YsAAMWEAwDHgwIAx4QBAMeEAgDGhAIAyIUBAMaFAwDGhAIAxoIAAMaFAgDHhAIAx4QCAMiFAwDHhAIAx4YAAMaFAgDHhQEAxoMCAMeEAgDHgwQAx4QDAMeDAgDHhAIA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAkYGBgSGRkZGRkZGRkZFRgWFxkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAhgYGBgKGRkZGRkZGRkZFhgYGBYVGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAABxgYGA8ZGRkZGRkZGRkZGBgYGBgYFxkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAABGBgYGBAZGRkZGRkZGRkZGBgYGBgYGBYVGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAACGBgYDBkZGRkZGRkZGRkZGBgYGBgYGBgYFxkZGRkZGRkZGRkZGRkMGBgYAgAAAAADGBgYDRkZGRkZGRkZGRkZGBgYGBgYGBgYGBYVGRkZGRkZGRkZGRkNGBgYAwAAAAAEGBgYDhkZGRkZGRkZGRkZGBgYGBUWGBgYGBgYFxkZGRkZGRkZGRkOGBgYBAAAAAAFGBgYChkZGRkZGRkZGRkZGBgYGBkZFxgYGBgYGBYVGRkZGRkZGRkKGBgYBQAAAAAGGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRUWGBgYGBgYFxkZGRkZGRkZGBgYBgAAAAAYGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRkZFxgYGBgYFxkZGRkZGRkZGBgYGAAAAAAYGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRkZFxgYGBgYFhkZGRkZGRkZGBgYGAAAAAAGGBgYGRkZGRkZGRkZGRkZGBgYGBkZGRkXGBgYGBgYFRkZGRkZGRkZGBgYBgAAAAAFGBgYChkZGRkZGRkZGRkZGBgYGBkZFxgYGBgYGBcZGRkZGRkZGRkKGBgYBQAAAAAEGBgYDhkZGRkZGRkZGRkZGBgYGBkXGBgYGBgYFxkZGRkZGRkZGRkOGBgYBAAAAAADGBgYDRkZGRkZGRkZGRkZGBgYGBgYGBgYGBcZGRkZGRkZGRkZGRkNGBgYAwAAAAACGBgYDBkZGRkZGRkZGRkZGBgYGBgYGBgYFxkZGRkZGRkZGRkZGRkMGBgYAgAAAAABGBgYGBAZGRkZGRkZGRkZGBgYGBgYGBcZGRkZGRkZGRkZGRkZGRAYGBgYAQAAAAAABxgYGA8ZGRkZGRkZGRkZGBgYGBgYFxkZGRkZGRkZGRkZGRkZGQ8YGBgHAAAAAAAAAhgYGBgKGRkZGRkZGRkZFhgYGBcZGRkZGRkZGRkZGRkZGRkZChgYGBgCAAAAAAAAAAkYGBgSGRkZGRkZGRkZFRYWFxkZGRkZGRkZGRkZGRkZGRkZEhgYGAkAAAAAAAAAAAgYGBgYExkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkTGBgYGAgAAAAAAAAAAAAEGBgYGBAZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRAYGBgYBAAAAAAAAAAAAAAKGBgYGBQKGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZChQYGBgYCgAAAAAAAAAAAAAACxgYGBgUEBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQFBgYGBgLAAAAAAAAAAAAAAAAAAMYGBgYGBMZGRkZGRkZGRkZGRkZGRkZGRkZGRMYGBgYGAMAAAAAAAAAAAAAAAAAAAARGBgYGBgSChkZGRkZGRkZGRkZGRkZGRkKEhgYGBgYEQAAAAAAAAAAAAAAAAAAAAAAAxgYGBgYGA8QGRkZGRkZGRkZGRkZEA8YGBgYGBgDAAAAAAAAAAAAAAAAAAAAAAAAAAsYGBgYGBgYDA0OChkZGRkKDg0MGBgYGBgYGAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGBgYGBgYGBgYGBgYGBgYGBgYCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcYGBgYGBgYGBgYGBgYGAcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYYGAYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//gAH//wAA//4AAH//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA8AAAAAAPAADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP/+AAB//wAA//+AAf//AAD///////8AAP///////wAA`,error:`data:image/x-icon;base64,AAABAAEAMDAAAAEACACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAALi7oACcn2wAlJdsAJibcACYm3AAmJtsAJyfdACUl3QAmJtsAKCjdACUl3AAmJtwAJyfcACYm3AAoKNcAJibcACcn3AAmJt0AJibcACUl3AAmJtwAKCjbACcn3AAmJtsAJibcAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYZGQYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcZGRkZGRkZGRkZGRkZGQcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGRkZGRkZGRkZGRkZGRkZGRkZCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAsZGRkZGRkZDA0ODxoaGhoPDg0MGRkZGRkZGQsAAAAAAAAAAAAAAAAAAAAAAAAAAxkZGRkZGRARGhoaGhoaGhoaGhoaERAZGRkZGRkDAAAAAAAAAAAAAAAAAAAAAAASGRkZGRkTDxoaGhoaGhoaGhoaGhoaGhoPExkZGRkZEgAAAAAAAAAAAAAAAAAAAAMZGRkZGRQaGhoaGhoaGhoaGhoaGhoaGhoaGhQZGRkZGQMAAAAAAAAAAAAAAAAACxkZGRkVERoaGhoaGhoaGhoaGhoaGhoaGhoaGhoRFRkZGRkLAAAAAAAAAAAAAAAKGRkZGRUPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxUZGRkZCgAAAAAAAAAAAAAEGRkZGREaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhEZGRkZBAAAAAAAAAAAAAgZGRkZFBoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoUGRkZGQgAAAAAAAAAAAkZGRkTGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaExkZGQkAAAAAAAAAAhkZGRkPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxkZGRkCAAAAAAAABxkZGRAaGhoaGhoaGhYXFxYaGhoaGhoaGhgXFxYaGhoaGhoaGhAZGRkHAAAAAAABGRkZGREaGhoaGhoaGhcZGRkYGhoaGhoaGBkZGRcaGhoaGhoaGhEZGRkZAQAAAAACGRkZDBoaGhoaGhoaGhcZGRkZGBoaGhoYGRkZGRcaGhoaGhoaGhoMGRkZAgAAAAADGRkZDRoaGhoaGhoaGhgZGRkZGRgaGhgZGRkZGRYaGhoaGhoaGhoNGRkZAwAAAAAEGRkZDhoaGhoaGhoaGhoYGRkZGRkYGBkZGRkZGBoaGhoaGhoaGhoOGRkZBAAAAAAFGRkZDxoaGhoaGhoaGhoaGBkZGRkZGRkZGRkYGhoaGhoaGhoaGhoPGRkZBQAAAAAGGRkZGhoaGhoaGhoaGhoaGhgZGRkZGRkZGRgaGhoaGhoaGhoaGhoaGRkZBgAAAAAZGRkZGhoaGhoaGhoaGhoaGhoYGRkZGRkZGBoaGhoaGhoaGhoaGhoaGRkZGQAAAAAZGRkZGhoaGhoaGhoaGhoaGhoYGRkZGRkZGBoaGhoaGhoaGhoaGhoaGRkZGQAAAAAGGRkZGhoaGhoaGhoaGhoaGhgZGRkZGRkZGRgaGhoaGhoaGhoaGhoaGRkZBgAAAAAFGRkZDxoaGhoaGhoaGhoaGBkZGRkZGRkZGRkYGhoaGhoaGhoaGhoPGRkZBQAAAAAEGRkZDhoaGhoaGhoaGhoYGRkZGRkYGBkZGRkZGBoaGhoaGhoaGhoOGRkZBAAAAAADGRkZDRoaGhoaGhoaGhYZGRkZGRgaGhgZGRkZGRgaGhoaGhoaGhoNGRkZAwAAAAACGRkZDBoaGhoaGhoaGhcZGRkZGBoaGhoYGRkZGRcaGhoaGhoaGhoMGRkZAgAAAAABGRkZGREaGhoaGhoaGhcZGRkYGhoaGhoaGBkZGRcaGhoaGhoaGhEZGRkZAQAAAAAABxkZGRAaGhoaGhoaGhYXFxgaGhoaGhoaGhYXFxYaGhoaGhoaGhAZGRkHAAAAAAAAAhkZGRkPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxkZGRkCAAAAAAAAAAkZGRkTGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaExkZGQkAAAAAAAAAAAgZGRkZFBoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoUGRkZGQgAAAAAAAAAAAAEGRkZGREaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhEZGRkZBAAAAAAAAAAAAAAKGRkZGRUPGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaDxUZGRkZCgAAAAAAAAAAAAAACxkZGRkVERoaGhoaGhoaGhoaGhoaGhoaGhoaGhoRFRkZGRkLAAAAAAAAAAAAAAAAAAMZGRkZGRQaGhoaGhoaGhoaGhoaGhoaGhoaGhQZGRkZGQMAAAAAAAAAAAAAAAAAAAASGRkZGRkTDxoaGhoaGhoaGhoaGhoaGhoPExkZGRkZEgAAAAAAAAAAAAAAAAAAAAAAAxkZGRkZGRARGhoaGhoaGhoaGhoaERAZGRkZGRkDAAAAAAAAAAAAAAAAAAAAAAAAAAsZGRkZGRkZDA0ODxoaGhoPDg0MGRkZGRkZGQsAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgJGRkZGRkZGRkZGRkZGRkZGRkZCQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgcZGRkZGRkZGRkZGRkZGQcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYZGQYFBAMCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//gAH//wAA//4AAH//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADgAAAAAAcAAOAAAAAABwAA8AAAAAAPAADwAAAAAA8AAPgAAAAAHwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/wAAAAD/AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP/+AAB//wAA//+AAf//AAD///////8AAP///////wAA`};function Ut(){let e=document.querySelector(`link[rel~='icon']`);if(e)return e;let t=document.createElement(`link`);return t.rel=`icon`,document.head.append(t),t}function Wt(e){if(document.visibilityState===`visible`)return;let t=()=>{e===0?new Notification(`Execution completed`,{body:`Your notebook run completed successfully.`,icon:Ht.success}):new Notification(`Execution failed`,{body:`Your notebook run encountered ${e} error(s).`,icon:Ht.error})};!(`Notification`in window)||Notification.permission===`denied`||(Notification.permission===`granted`?t():Notification.permission==="default"&&Notification.requestPermission().then(e=>{e===`granted`&&t()}))}var Gt=e=>{let t=(0,Q.c)(11),{isRunning:n}=e,r=i(x),a,o;t[0]!==n||t[1]!==r?(a=()=>{let e=Ut();if(!n&&e.href.includes(`favicon`)||(e.href=Ht[n?`running`:r===0?`success`:`error`],!document.hasFocus()))return;let t=setTimeout(()=>{e.href=Ht.idle},3e3);return()=>clearTimeout(t)},o=[n,r],t[0]=n,t[1]=r,t[2]=a,t[3]=o):(a=t[2],o=t[3]),(0,Z.useEffect)(a,o);let s=X(n)??n,c,l;t[4]!==n||t[5]!==r||t[6]!==s?(c=()=>{s&&!n&&Wt(r)},l=[r,s,n],t[4]=n,t[5]=r,t[6]=s,t[7]=c,t[8]=l):(c=t[7],l=t[8]),(0,Z.useEffect)(c,l);let u;return t[9]===n?u=t[10]:(u=()=>{if(!n){let e=Ut();e.href=Ht.idle}},t[9]=n,t[10]=u),ke(window,`focus`,u),null};function Kt(){let{cellIds:e,cellRuntime:t}=a.get(b),n=e.inOrderIds.find(e=>t[e]?.status===`running`);n&>(n,`focus`)}var qt=e=>{let t=(0,Q.c)(18),{connection:n,isRunning:r,onReconnect:a}=e,{mode:o}=i(A),s=n.state===j.CLOSED&&(o===`read`||n.code!==M.KERNEL_STARTUP_ERROR),c=n.state===j.OPEN,l=s&&n.code===M.KERNEL_DISCONNECTED,u;t[0]===s?u=t[1]:(u=s&&(0,$.jsx)(Zt,{}),t[0]=s,t[1]=u);let d=o===`read`?`fixed`:`absolute`,f;t[2]===d?f=t[3]:(f=P(`z-50 top-4 left-4`,d),t[2]=d,t[3]=f);let p;t[4]!==c||t[5]!==r?(p=c&&r&&(0,$.jsx)(Xt,{}),t[4]=c,t[5]=r,t[6]=p):p=t[6];let m;t[7]!==l||t[8]!==s||t[9]!==a?(m=s&&(0,$.jsx)(Yt,{onReconnect:l?a:void 0}),t[7]=l,t[8]=s,t[9]=a,t[10]=m):m=t[10];let h;t[11]!==f||t[12]!==p||t[13]!==m?(h=(0,$.jsxs)(`div`,{className:f,children:[p,m]}),t[11]=f,t[12]=p,t[13]=m,t[14]=h):h=t[14];let g;return t[15]!==u||t[16]!==h?(g=(0,$.jsxs)($.Fragment,{children:[u,h]}),t[15]=u,t[16]=h,t[17]=g):g=t[17],g},Jt=`print:hidden pointer-events-auto hover:cursor-pointer`,Yt=e=>{let t=(0,Q.c)(12),{onReconnect:n}=e,r=!n,i=r?`App disconnected`:`App disconnected — click to reconnect`,a=r?0:-1,o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=P(Jt,`bg-transparent border-0 p-0`),t[0]=o):o=t[0];let s=r?`App disconnected`:`Reconnect to app`,c;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,$.jsx)(Tt,{className:`w-[25px] h-[25px] text-(--red-11)`}),t[1]=c):c=t[1];let l;t[2]!==r||t[3]!==n||t[4]!==s?(l=(0,$.jsx)(`button`,{type:`button`,className:o,"aria-label":s,"data-testid":`disconnected-indicator`,onClick:n,disabled:r,children:c}),t[2]=r,t[3]=n,t[4]=s,t[5]=l):l=t[5];let u;t[6]!==a||t[7]!==l?(u=(0,$.jsx)(`span`,{tabIndex:a,children:l}),t[6]=a,t[7]=l,t[8]=u):u=t[8];let d;return t[9]!==i||t[10]!==u?(d=(0,$.jsx)(q,{content:i,children:u}),t[9]=i,t[10]=u,t[11]=d):d=t[11],d},Xt=()=>{let e=(0,Q.c)(6),t=i(y),n=t?`Scratchpad is running`:`Jump to running cell`,r=t?void 0:Kt,a;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,$.jsx)(Ct,{className:`running-app-icon`,size:30,strokeWidth:1}),e[0]=a):a=e[0];let o;e[1]===r?o=e[2]:(o=(0,$.jsx)(`div`,{className:Jt,"data-testid":`loading-indicator`,onClick:r,children:a}),e[1]=r,e[2]=o);let s;return e[3]!==o||e[4]!==n?(s=(0,$.jsx)(q,{content:n,side:`right`,children:o}),e[3]=o,e[4]=n,e[5]=s):s=e[5],s},Zt=()=>{let e=(0,Q.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`div`,{className:`noise`}),(0,$.jsx)(`div`,{className:`disconnected-gradient`})]}),e[0]=t):t=e[0],t},Qt=Ke,$t=z,en=F(H),tn=Z.forwardRef((e,t)=>{let n=(0,Q.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=P(`fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,r),n[3]=r,n[4]=a);let o;return n[5]!==i||n[6]!==t||n[7]!==a?(o=(0,$.jsx)(B,{className:a,...i,ref:t}),n[5]=i,n[6]=t,n[7]=a,n[8]=o):o=n[8],o});tn.displayName=B.displayName;var nn=N(`fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500`,{variants:{side:{top:`inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top`,bottom:`inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom`,left:`inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm`,right:`inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm`}},defaultVariants:{side:`right`}}),rn=Z.forwardRef((e,t)=>{let n=(0,Q.c)(15),r,i,a,o;n[0]===e?(r=n[1],i=n[2],a=n[3],o=n[4]):({side:o,className:i,children:r,...a}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=a,n[4]=o);let s=o===void 0?`right`:o,c;n[5]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,$.jsx)(tn,{}),n[5]=c):c=n[5];let l;n[6]!==i||n[7]!==s?(l=P(nn({side:s}),i),n[6]=i,n[7]=s,n[8]=l):l=n[8];let u;n[9]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,$.jsxs)(V,{className:`absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary`,children:[(0,$.jsx)(mt,{className:`h-4 w-4`}),(0,$.jsx)(`span`,{className:`sr-only`,children:`Close`})]}),n[9]=u):u=n[9];let d;return n[10]!==r||n[11]!==a||n[12]!==t||n[13]!==l?(d=(0,$.jsx)(en,{children:(0,$.jsxs)(Ge,{children:[c,(0,$.jsxs)(R,{ref:t,className:l,...a,children:[r,u]})]})}),n[10]=r,n[11]=a,n[12]=t,n[13]=l,n[14]=d):d=n[14],d});rn.displayName=R.displayName;var an=Z.forwardRef((e,t)=>{let n=(0,Q.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=P(`text-lg font-semibold text-foreground`,r),n[3]=r,n[4]=a);let o;return n[5]!==i||n[6]!==t||n[7]!==a?(o=(0,$.jsx)(L,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=o):o=n[8],o});an.displayName=L.displayName;var on=Z.forwardRef((e,t)=>{let n=(0,Q.c)(9),r,i;n[0]===e?(r=n[1],i=n[2]):({className:r,...i}=e,n[0]=e,n[1]=r,n[2]=i);let a;n[3]===r?a=n[4]:(a=P(`text-sm text-muted-foreground`,r),n[3]=r,n[4]=a);let o;return n[5]!==i||n[6]!==t||n[7]!==a?(o=(0,$.jsx)(I,{ref:t,className:a,...i}),n[5]=i,n[6]=t,n[7]=a,n[8]=o):o=n[8],o});on.displayName=I.displayName;var sn=(0,Z.memo)(()=>{let e=(0,Q.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,$.jsx)(W,{name:G.SIDEBAR}),e[0]=t):t=e[0],t});sn.displayName=`SidebarSlot`;var cn=e=>{let t=(0,Q.c)(6),{openWidth:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,$.jsx)($t,{className:`lg:hidden`,asChild:!0,children:(0,$.jsx)(J,{variant:`ghost`,className:`bg-background`,children:(0,$.jsx)(wt,{className:`w-5 h-5`})})}),t[0]=r):r=t[0];let i;t[1]===n?i=t[2]:(i={maxWidth:n},t[1]=n,t[2]=i);let a;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,$.jsx)(sn,{}),t[3]=a):a=t[3];let o;return t[4]===i?o=t[5]:(o=(0,$.jsxs)(Qt,{children:[r,(0,$.jsx)(rn,{className:`w-full px-3 h-full flex flex-col overflow-y-auto`,style:i,side:`left`,children:a})]}),t[4]=i,t[5]=o),o},ln=e=>{let t=(0,Q.c)(8),{isOpen:n,toggle:r}=e,i=n?`Collapse sidebar`:`Expand sidebar`,a=n?`rotate-0`:`rotate-180`,o;t[0]===a?o=t[1]:(o=P(`h-5 w-5 transition-transform ease-in-out duration-700`,a),t[0]=a,t[1]=o);let s;t[2]===o?s=t[3]:(s=(0,$.jsx)(K,{className:o}),t[2]=o,t[3]=s);let c;return t[4]!==i||t[5]!==s||t[6]!==r?(c=(0,$.jsx)(`div`,{className:`invisible lg:visible absolute top-[12px] right-[16px] z-20`,children:(0,$.jsx)(J,{"aria-label":i,onClick:r,className:`w-10 h-8`,variant:`ghost`,size:`icon`,children:s})}),t[4]=i,t[5]=s,t[6]=r,t[7]=c):c=t[7],c},un=e=>{let t=(0,Q.c)(11),{isOpen:n,toggle:r,width:i}=e,a=n?i:Ee,o;t[0]===a?o=t[1]:(o={width:a},t[0]=a,t[1]=o);let s;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=P(`app-sidebar auto-collapse-nav`,`top-0 left-0 z-20 h-full hidden lg:block relative transition-[width] ease-in-out duration-300`),t[2]=s):s=t[2];let c;t[3]!==n||t[4]!==r?(c=(0,$.jsx)(ln,{isOpen:n,toggle:r}),t[3]=n,t[4]=r,t[5]=c):c=t[5];let l;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,$.jsx)(`div`,{className:`relative h-full flex flex-col px-3 pb-16 pt-14 overflow-y-auto shadow-sm border-l`,children:(0,$.jsx)(sn,{})}),t[6]=l):l=t[6];let u;return t[7]!==n||t[8]!==o||t[9]!==c?(u=(0,$.jsxs)(`aside`,{"data-expanded":n,style:o,className:s,children:[c,l]}),t[7]=n,t[8]=o,t[9]=c,t[10]=u):u=t[10],u},dn=e=>{let n=(0,Q.c)(15),{children:r}=e,[i,a]=t(we),{isOpen:o,width:s}=i;if(U(G.SIDEBAR).length===0)return r;let c;n[0]===s?c=n[1]:(c=Ce(s),n[0]=s,n[1]=c);let l=c,u;n[2]!==a||n[3]!==o?(u=()=>a({type:`toggle`,isOpen:!o}),n[2]=a,n[3]=o,n[4]=u):u=n[4];let d;n[5]!==o||n[6]!==l||n[7]!==u?(d=(0,$.jsx)(un,{isOpen:o,width:l,toggle:u}),n[5]=o,n[6]=l,n[7]=u,n[8]=d):d=n[8];let f;n[9]===l?f=n[10]:(f=(0,$.jsx)(`div`,{className:`absolute top-3 left-4 flex items-center z-50`,children:(0,$.jsx)(cn,{openWidth:l})}),n[9]=l,n[10]=f);let p;return n[11]!==r||n[12]!==d||n[13]!==f?(p=(0,$.jsxs)(`div`,{className:`inset-0 absolute flex`,children:[d,f,r]}),n[11]=r,n[12]=d,n[13]=f,n[14]=p):p=n[14],p},fn=e=>{let t=(0,Q.c)(19),{width:n,connection:r,isRunning:i,children:a,onReconnect:o}=e,s=r.state,c;t[0]===i?c=t[1]:(c=(0,$.jsx)(Gt,{isRunning:i}),t[0]=i,t[1]=c);let l;t[2]!==r||t[3]!==i||t[4]!==o?(l=(0,$.jsx)(qt,{connection:r,isRunning:i,onReconnect:o}),t[2]=r,t[3]=i,t[4]=o,t[5]=l):l=t[5];let u=r.state===j.CLOSED&&r.code!==M.KERNEL_STARTUP_ERROR&&`disconnected`,d=n===`full`&&`config-width-full`,f=n===`columns`?`overflow-x-auto`:`overflow-x-auto sm:overflow-x-hidden`,p;t[6]!==u||t[7]!==d||t[8]!==f?(p=P(`mathjax_ignore`,u,`bg-background w-full h-full text-textColor`,`flex flex-col overflow-y-auto`,d,f,`print:height-fit`),t[6]=u,t[7]=d,t[8]=f,t[9]=p):p=t[9];let m;t[10]!==a||t[11]!==s||t[12]!==p||t[13]!==n?(m=(0,$.jsx)(Rt,{children:(0,$.jsx)(dn,{children:(0,$.jsx)(`div`,{id:`App`,"data-config-width":n,"data-connection-state":s,className:p,children:a})})}),t[10]=a,t[11]=s,t[12]=p,t[13]=n,t[14]=m):m=t[14];let h;return t[15]!==c||t[16]!==l||t[17]!==m?(h=(0,$.jsxs)($.Fragment,{children:[c,l,m]}),t[15]=c,t[16]=l,t[17]=m,t[18]=h):h=t[18],h},pn=(0,Z.memo)(e=>{let t=(0,Q.c)(9),{appConfig:n,mode:r,children:a}=e,{selectedLayout:o}=nt();if(!i(Me)&&(r===`edit`||r===`present`&&o===`vertical`))return a;let s=r===`read`,c;t[0]!==o||t[1]!==s?(c=rt({selectedLayout:o,isReading:s,searchParams:new URLSearchParams(window.location.search)}),t[0]=o,t[1]=s,t[2]=c):c=t[2];let l=c,u;t[3]===l?u=t[4]:(u=qe.find(e=>e.type===l),t[3]=l,t[4]=u);let d=u;if(!d)return a;let f;return t[5]!==n||t[6]!==r||t[7]!==d?(f=(0,$.jsx)(mn,{appConfig:n,mode:r,plugin:d}),t[5]=n,t[6]=r,t[7]=d,t[8]=f):f=t[8],f});pn.displayName=`CellsRenderer`;var mn=e=>{let t=(0,Q.c)(12),{appConfig:n,mode:r,plugin:i}=e,a=nt(),o=g(),{setCurrentLayoutData:s}=tt(),c,l;t[0]!==a||t[1]!==o||t[2]!==i?(c=fe(o),l=Ye({state:a,plugin:i,cells:c}),t[0]=a,t[1]=o,t[2]=i,t[3]=c,t[4]=l):(c=t[3],l=t[4]);let u=l,d=i.Component,f;return t[5]!==d||t[6]!==n||t[7]!==c||t[8]!==u||t[9]!==r||t[10]!==s?(f=(0,$.jsx)(d,{appConfig:n,mode:r,cells:c,layout:u,setLayout:s}),t[5]=d,t[6]=n,t[7]=c,t[8]=u,t[9]=r,t[10]=s,t[11]=f):f=t[11],f},hn=class e{hasStarted=!1;static get INSTANCE(){let t=`_marimo_private_RuntimeState`;return window[t]||(window[t]=new e(S)),window[t]}_sendComponentValues;uiElementRegistry;constructor(e){this.uiElementRegistry=e}get sendComponentValues(){if(!this._sendComponentValues)throw Error(`sendComponentValues is not set`);return this._sendComponentValues}start(e){if(this.hasStarted){D.warn(`RuntimeState already started`);return}this._sendComponentValues=e,document.addEventListener(ht.TYPE,this.handleReadyEvent),this.hasStarted=!0}stop(){if(!this.hasStarted){D.warn(`RuntimeState already stopped`);return}document.removeEventListener(ht.TYPE,this.handleReadyEvent),this.hasStarted=!1}handleReadyEvent=e=>{let t=e.detail.objectId;if(!this.uiElementRegistry.has(t))return;let n=this.uiElementRegistry.lookupValue(t);n!==void 0&&this.sendComponentValues({objectIds:[t],values:[n]}).catch(e=>{D.warn(e)})}},gn={initial:[],on:{attachment:(e,{data:{attachment:t}})=>e.some(e=>e.id===t.id)?e.map(e=>e.id===t.id?t:e):[...e,t],"attachment.removed":(e,{data:t})=>e.some(e=>e.id===t.id)?e.filter(e=>e.id!==t.id):e}};function _n(e){return e.pending??{revision:e.current?.revision??null,cells:e.current?.cells??new Map}}function vn(e,t){let n=new Set(e.order);if(n.size!==e.order.length||n.size!==t.size||[...n].some(e=>!t.has(e))||[...t.values()].some(t=>t.version>e.version))throw Error(`Document records do not match its revision and order`);return{current:{revision:e,cells:t},pending:null}}var yn={initial:{current:null,pending:null},on:{cell:(e,{data:t})=>{let n=_n(e);return{...e,pending:{revision:n.revision,cells:new Map(n.cells).set(t.cell.id,t.cell)}}},"cell.removed":(e,{data:t})=>{let n=_n(e);if(!n.cells.has(t.id))return e;let r=new Map(n.cells);return r.delete(t.id),{...e,pending:{...n,cells:r}}},document:(e,{data:t},{phase:n})=>{let{cells:r}=_n(e);return n===`snapshot`?{...e,pending:{revision:t.document,cells:r}}:vn(t.document,r)},ready:(e,t,{phase:n})=>{if(e.pending===null)return e;if(n===`live`)throw Error(`Stream ended with an incomplete document update`);return e.pending.revision===null?{current:null,pending:null}:vn(e.pending.revision,e.pending.cells)}}},bn=[`notebook`,`cell`,`document`,`attachment`,`marimo`],xn=ge({marimo:ve()}),Sn={state:j.CLOSED,code:M.KERNEL_DISCONNECTED,reason:`kernel not found`},Cn={...Sn,reason:`Failed to decode notebook message`};function wn(e){return typeof e==`object`&&!!e&&`state`in e}function Tn(e){return e instanceof w&&wn(e.cause)?e.cause:e instanceof w&&e.cause instanceof _e?Cn:Sn}function En(e,{edit:t}={}){let n=r({state:j.NOT_STARTED}),i=Ot({document:yn,attachments:gn}),a=r(i.initial),o=r(!1),s=r(e=>e(o)&&e(n).state===j.OPEN),c=r(e=>e(s)?e(a).notebook:null),l=r(e=>e(a).resources.document.current),u=r(e=>e(s)?e(a).resources.attachments:gn.initial),d,f={connectionAtom:n,notebookAtom:c,documentAtom:l,edit:async(n,r,i)=>{i.signal.throwIfAborted();let o=e.get(a).notebookId;if(o!==null&&o!==n)throw Error(`The notebook changed before the edit was sent`);return t===void 0?{ok:!1,status:501,problem:{type:`tag:marimo.io,2026:host/unsupported-operation`,title:`Document editing is unavailable on this connection`,status:501}}:t(n,r,i)},attachmentsAtom:u,reconnect:async()=>d?.()};function p(t){e.set(o,!1),e.set(n,t)}function m({transport:t,signal:n,checkHealth:r,onNotification:s}){if(n.aborted)return;let c,l=!1,u=!0;function f(r){r===void 0&&e.set(a,i.initial),u=!0;let o=new xe(t,{types:bn,cursor:r,signal:n,onStatus:e=>{e===`connecting`?p({state:j.CONNECTING}):e===`connected`&&p({state:j.OPEN})}});o.subscribe(e=>h(o,e),e=>{if(!n.aborted&&o===c){D.warn(`Notebook stream stopped`,e);let t=Tn(e);t===Cn?m(o):p(t)}}),c=o}function m(t){t.close(),u=!1,e.set(a,i.initial),p(Cn)}function h(t,n){if(n.event===`marimo`){let e=xn.safeParse(n.data);e.success?s(e.data.marimo):(D.error(`Failed to decode notebook message`,n),m(t));return}try{e.set(a,i.reduce(e.get(a),n))}catch(e){D.error(`Failed to apply notebook event`,e),m(t);return}(n.event===`ready`||n.event===`reset`)&&e.set(o,n.event===`ready`)}d=async()=>{if(!(n.aborted||l||c?.status!==`closed`)){l=!0,p({state:j.CONNECTING});try{let e=await r();if(n.aborted)return;if(!e){p(Sn);return}f(u?c.cursor??void 0:void 0)}catch(e){n.aborted||(D.error(`Notebook health check failed`,e),p(Sn))}finally{l=!1}}},n.addEventListener(`abort`,()=>{d=void 0,e.set(a,i.initial),p({state:j.NOT_STARTED})},{once:!0}),p({state:j.CONNECTING}),f()}return{client:f,connect:m}}function Dn(e){switch(e.reason){case`MARIMO_NO_FILE_KEY`:case`MARIMO_NO_SESSION_ID`:case`MARIMO_NO_SESSION`:case`MARIMO_SHUTDOWN`:return{kind:`terminal`,status:{state:j.CLOSED,code:M.KERNEL_DISCONNECTED,reason:`kernel not found`}};case`MARIMO_UNAUTHORIZED`:return{kind:`terminal`,status:{state:j.CLOSED,code:M.KERNEL_DISCONNECTED,reason:`not authorized`}};case`MARIMO_KIOSK_NOT_ALLOWED`:return{kind:`terminal`,status:{state:j.CLOSED,code:M.KERNEL_DISCONNECTED,reason:`kiosk mode is not available for this session`}};case`MARIMO_KERNEL_STARTUP_ERROR`:return{kind:`terminal`,status:{state:j.CLOSED,code:M.KERNEL_STARTUP_ERROR,reason:`Failed to start kernel sandbox`}};default:e.reason&&D.warn(`Unrecognized connection close reason`,e.reason)}return{kind:`retry`,status:{state:j.CONNECTING}}}var On=1e4;function kn(e){let t=Dn(e);if(t.kind===`retry`)return;let n=`reason`in t.status?t.status.reason:``;return new w(n,{cause:t.status})}async function An(e){try{return new URL(typeof e==`function`?await e():e)}catch(e){if(e instanceof w)throw e;return}}function jn(e,t){let n;return async(r,i)=>{let a=await An(e);if(a===void 0||r.signal.aborted)return;a.searchParams.delete(`cursor`);let o=new URL(a);o.searchParams.delete(`access_token`),o.searchParams.sort(),o.hash=``;let s=o.toString(),{cursor:c}=r;if(n!==void 0&&n!==s&&(i.message({event:`reset`,data:{}}),c=null),n=s,!r.signal.aborted)return t(a)({...r,cursor:c},i)}}function Mn(e){return jn(e,e=>async({cursor:t,signal:n},{open:r,message:i})=>{t!==null&&e.searchParams.set(`cursor`,t),await new Promise((t,a)=>{let o=new WebSocket(e),s=setTimeout(()=>o.close(),On),c=()=>o.close();n.addEventListener(`abort`,c,{once:!0}),o.addEventListener(`open`,()=>{clearTimeout(s),r()}),o.addEventListener(`message`,({data:e})=>i(_(String(e)))),o.addEventListener(`close`,e=>{clearTimeout(s),n.removeEventListener(`abort`,c);let r=n.aborted?void 0:kn(e);r===void 0?t():a(r)})})})}function Nn(e,t){return jn(e,e=>ye(e,{parseData:_,fetch:(e,n)=>{let r=new Headers(n?.headers);for(let[e,n]of Object.entries(t()))r.set(e,n);return globalThis.fetch(e,{...n,headers:r})},stop:e=>e.event===`close`?kn(e.data):void 0}))}var Pn=({signal:e},{open:t})=>new Promise(n=>{t(),e.addEventListener(`abort`,()=>n(),{once:!0})});function Fn(e){return({signal:t},{open:n,message:r})=>new Promise(i=>{n(),e(({data:e})=>{if(t.aborted)return;let n=_(e);r(typeof n==`object`&&n&&!(`event`in n)&&`data`in n?{event:`marimo`,data:{marimo:n.data}}:n)}),t.addEventListener(`abort`,()=>i(),{once:!0})})}function In(e){return e.static?Pn:Pe()?Fn(e=>C.INSTANCE.attachMessageConsumer(e)):e.transportType===`sse`?Nn(e.url,e.headers):Mn(e.url)}function Ln(e){let t=(0,Q.c)(13),r=n(),{static:i,transportType:a}=e,s;t[0]===r?s=t[1]:(s=En(r),t[0]=r,t[1]=s);let c=s,l=o(e.url),u=o(e.headers),d=o(e.waitUntilReady),f=o(e.checkHealth),p=o(e.onNotification),m,h;return t[2]!==f||t[3]!==c||t[4]!==u||t[5]!==i||t[6]!==p||t[7]!==r||t[8]!==a||t[9]!==l||t[10]!==d?(m=()=>{let e=new AbortController,t=!0;return r.set(it,c.client),c.connect({transport:In({static:i,transportType:a,url:async()=>{if(t){t=!1;try{await d()}catch(e){throw new w(`Healthy connection never made`,{cause:e})}}return l()},headers:u}),signal:e.signal,checkHealth:f,onNotification:e=>p({data:e})}),()=>{e.abort(),r.get(it)===c.client&&r.set(it,null)}},h=[c,r,i,a,l,u,d,f,p],t[2]=f,t[3]=c,t[4]=u,t[5]=i,t[6]=p,t[7]=r,t[8]=a,t[9]=l,t[10]=d,t[11]=m,t[12]=h):(m=t[11],h=t[12]),(0,Z.useEffect)(m,h),c.client}function Rn(e){let{codes:t,names:n,configs:r,cell_ids:i,last_executed_code:a,last_execution_time:o}=e,s=a||{},c=o||{};return t.map((e,t)=>{let a=i[t],o=s[a];return v({id:a,code:e,edited:o?o!==e:!1,name:n[t],lastCodeRun:s[a]??null,lastExecutionTime:c[a]??null,config:r[t]})})}function zn(e,t,n){let{layout:r}=e,i=Xe(r,t);return r&&r.type===i.selectedLayout&&n({layoutView:i.selectedLayout,data:i.layoutData[i.selectedLayout]}),i}function Bn(){let e=[],t=[];return S.entries.forEach((n,r)=>{e.push(r),t.push(n.value)}),{objectIds:e,values:t}}function Vn(e,t){let{existingCells:n,autoInstantiate:r,setCells:i,setLayoutData:a,setAppConfig:o,setCapabilities:s,setKernelState:c,onError:l}=t,{resumed:u,ui_values:d,app_config:f,capabilities:p,auto_instantiated:m}=e,h=n&&n.length>0,g=h&&!u?n:Rn(e);i(g,zn(e,g,a));let ee=E.safeParse(f);if(ee.success?o(ee.data):D.error(`Failed to parse app config`,ee.error),s(p),m)return;if(u){for(let[e,t]of Ae.entries(d||{})){let n=e;S.set(n,t)}return}let{objectIds:te,values:ne}=Bn(),re=h?Object.fromEntries(n.map(e=>[e.id,e.code])):void 0;st().sendInstantiate({objectIds:te,values:ne,autoRun:r,codes:re}).then(()=>{c({isInstantiated:!0,error:null})}).catch(e=>{c({isInstantiated:!1,error:e}),l(Error(`Failed to instantiate`,{cause:e}))})}function Hn(e){let t=e.cell_id;S.removeElementsByCell(t),Je.INSTANCE.removeForCellId(t)}function Un(e,t){t(e),Je.INSTANCE.track(e)}var Wn={append:e=>{let t=new URL(window.location.href);t.searchParams.append(e.key,e.value),window.history.pushState({},``,`${t.pathname}${t.search}`)},set:e=>{let t=new URL(window.location.href);Array.isArray(e.value)?(t.searchParams.delete(e.key),e.value.forEach(n=>t.searchParams.append(e.key,n))):t.searchParams.set(e.key,e.value),window.history.pushState({},``,`${t.pathname}${t.search}`)},delete:e=>{let t=new URL(window.location.href);e.value==null?t.searchParams.delete(e.key):t.searchParams.delete(e.key,e.value),window.history.pushState({},``,`${t.pathname}${t.search}`)},clear:()=>{let e=new URL(window.location.href);e.search=``,window.history.pushState({},``,`${e.pathname}${e.search}`)}};function Gn(){return Object.values(de().cellData).filter(e=>e.id!==ae)}function Kn(e){let r=(0,Q.c)(68),{autoInstantiate:a,sessionId:o,setCells:c}=e,{showBoundary:g}=Ue(),{handleCellMessage:_}=d(),v;r[0]===Symbol.for(`react.memo_cache_sentinel`)?(v={skipMiddleware:!0},r[0]=v):v=r[0];let ae=d(v),y;r[1]===ae?y=r[2]:(y=e=>{l(e.changes,ae,Qn)},r[1]=ae,r[2]=y);let b=y,{addCellNotification:ue}=St(),fe=s(Be),x=s(He),ge=Oe(),{setVariables:_e,setMetadata:ve}=le(),{addColumnPreview:ye}=se(),{addDatasets:xe,filterDatasetsFromVariables:Ce}=se(),{addDataSourceConnection:C,filterDataSourcesFromVariables:we}=ee(),{setLayoutData:Ee}=tt(),[w,T]=t(Fe),E=s(Re),{addBanner:ke}=yt(),{addMissingPackageAlert:Ae,updateEnvironment:O,setEnvironment:k,addStartupLog:je}=bt(),A=s(Me),ze=s(Ne),Ve=s(h),N=Le(),P=i(De),We=s(vt),F=s(xt),{setNamespaces:Ge,filterFromVariables:I}=oe(),L;r[3]!==ke||r[4]!==ue||r[5]!==ye||r[6]!==C||r[7]!==xe||r[8]!==Ae||r[9]!==je||r[10]!==a||r[11]!==we||r[12]!==Ce||r[13]!==I||r[14]!==_||r[15]!==b||r[16]!==ge||r[17]!==We||r[18]!==Ve||r[19]!==c||r[20]!==T||r[21]!==k||r[22]!==x||r[23]!==F||r[24]!==fe||r[25]!==A||r[26]!==Ee||r[27]!==ve||r[28]!==ze||r[29]!==Ge||r[30]!==_e||r[31]!==g||r[32]!==O||r[33]!==E?(L=e=>{switch(e.data.op){case`reload`:ft();return;case`startup-progress`:{let{phase:t}=e.data;E(e.data),T(e=>e.state===j.OPEN||e.state===j.CONNECTING&&e.phase===t?e:{state:j.CONNECTING,phase:t});return}case`kernel-ready`:{F(null),T({state:j.OPEN}),x(!!(e.data.resumed||e.data.auto_instantiated));let t=Gn();Vn(e.data,{autoInstantiate:a,setCells:c,setLayoutData:Ee,setAppConfig:ge,setCapabilities:Ve,setKernelState:fe,onError:g,existingCells:t}),e.data.resumed||ie(),A(e.data.kiosk),ze(e.data.stable_session_id??null),pe(null),me();return}case`completed-run`:x(!0);return;case`execution`:return;case`interrupted`:return;case`kernel-startup-error`:F(e.data.error);return;case`send-ui-element-message`:{let t=e.data.ui_element;if(t){let n=Ze(e.data);S.broadcastMessage(t,e.data.message,n)}return}case`model-lifecycle`:be(Te,e.data);return;case`remove-ui-elements`:Hn(e.data);return;case`completion-result`:re.resolve(e.data.completion_id,e.data);return;case`function-call-result`:Se.resolve(e.data.function_call_id,e.data);return;case`cell-op`:{Un(e.data,_);let t=de().cellData[e.data.cell_id];if(!t)return;ue({cellNotification:e.data,code:t.code});return}case`variables`:{let t=e.data.variables.map(Zn);_e(e.data.variables.map(Xn)),Ce(t),we(t),I(t);return}case`variable-values`:ve(e.data.variables.map(Yn));return;case`alert`:at({title:e.data.title,description:ut({html:e.data.description}),variant:e.data.variant});return;case`banner`:ke(e.data);return;case`missing-package-alert`:Ae({...e.data,kind:`missing`});return;case`environment-operation`:e.data.source===`kernel`&&e.data.status.kind!==`running`&&dt(),O(e.data);return;case`environment-state`:k(e.data),e.data.source===`kernel`&&dt();return;case`startup-logs`:je({content:e.data.content,status:e.data.status});return;case`query-params-append`:Wn.append(e.data);return;case`query-params-set`:Wn.set(e.data);return;case`query-params-delete`:Wn.delete(e.data);return;case`query-params-clear`:Wn.clear();return;case`datasets`:xe(e.data);return;case`data-column-preview`:ye(e.data);return;case`sql-table-preview`:ne.resolve(e.data.request_id,e.data);return;case`sql-table-list-preview`:he.resolve(e.data.request_id,e.data);return;case`sql-schema-list-preview`:m.resolve(e.data.request_id,e.data);return;case`validate-sql-result`:te.resolve(e.data.request_id,e.data);return;case`data-source-discovery-result`:ce.resolve(e.data.request_id,e.data);return;case`secret-keys-result`:$e.resolve(e.data.request_id,e.data);return;case`cache-info`:We(e.data);return;case`cache-cleared`:return;case`data-source-connections`:C({connections:e.data.connections.map(Jn)});return;case`storage-namespaces`:Ge(e.data);return;case`storage-entries`:f.resolve(e.data.request_id,e.data);return;case`storage-download-ready`:p.resolve(e.data.request_id,e.data);return;case`reconnected`:F(null),T({state:j.OPEN});return;case`focus-cell`:u(e.data.cell_id);return;case`active-line`:pe(e.data.line==null?null:{cellId:e.data.cell_id,line:e.data.line});return;case`notebook-document-transaction`:b(e.data.transaction);return;case`consumer-capabilities`:A(!e.data.consumer_capabilities.edit);return;default:ot(e.data)}},r[3]=ke,r[4]=ue,r[5]=ye,r[6]=C,r[7]=xe,r[8]=Ae,r[9]=je,r[10]=a,r[11]=we,r[12]=Ce,r[13]=I,r[14]=_,r[15]=b,r[16]=ge,r[17]=We,r[18]=Ve,r[19]=c,r[20]=T,r[21]=k,r[22]=x,r[23]=F,r[24]=fe,r[25]=A,r[26]=Ee,r[27]=ve,r[28]=ze,r[29]=Ge,r[30]=_e,r[31]=g,r[32]=O,r[33]=E,r[34]=L):L=r[34];let R=L,z=n(),Ke=qn,B;r[35]===Symbol.for(`react.memo_cache_sentinel`)?(B=Ie(),r[35]=B):B=r[35];let V;r[36]!==N||r[37]!==o||r[38]!==P?(V=()=>P===`sse`?N.getSseURL(o).toString():N.getWsURL(o).toString(),r[36]=N,r[37]=o,r[38]=P,r[39]=V):V=r[39];let H,U,W;r[40]===N?(H=r[41],U=r[42],W=r[43]):(H=()=>N.headers(),U=async()=>{!Ie()&&!Pe()&&!N.isSameOrigin&&await N.waitForHealthy()},W=()=>N.reconcileFromHealth(),r[40]=N,r[41]=H,r[42]=U,r[43]=W);let G;r[44]===R?G=r[45]:(G=e=>{try{R(e)}catch(t){let n=t;D.error(`Failed to handle notification`,e,n),Ke(n)}},r[44]=R,r[45]=G);let K;r[46]!==V||r[47]!==H||r[48]!==U||r[49]!==W||r[50]!==G||r[51]!==P?(K={static:B,transportType:P,url:V,headers:H,waitUntilReady:U,checkHealth:W,onNotification:G},r[46]=V,r[47]=H,r[48]=U,r[49]=W,r[50]=G,r[51]=P,r[52]=K):K=r[52];let q=Ln(K),J;r[53]!==q.connectionAtom||r[54]!==T||r[55]!==F||r[56]!==z||r[57]!==E?(J=()=>{let e=()=>{let e=z.get(q.connectionAtom);if(e.state!==j.NOT_STARTED){if(e.state===j.OPEN){E(null);return}e.state===j.CONNECTING&&F(null),T(t=>e.state===j.CLOSED&&e.code===M.KERNEL_STARTUP_ERROR&&(t.state===j.CONNECTING||t.state===j.CLOSED)?{...e,phase:t.phase}:e.state===j.CONNECTING&&(t.state===j.OPEN||t.state===j.CONNECTING&&t.phase===`reconnecting`)?{...e,phase:`reconnecting`}:e)}},t=z.sub(q.connectionAtom,e);return e(),t},r[53]=q.connectionAtom,r[54]=T,r[55]=F,r[56]=z,r[57]=E,r[58]=J):J=r[58];let Y;r[59]!==q||r[60]!==T||r[61]!==F||r[62]!==z||r[63]!==E?(Y=[q,z,T,F,E],r[59]=q,r[60]=T,r[61]=F,r[62]=z,r[63]=E,r[64]=Y):Y=r[64],(0,Z.useLayoutEffect)(J,Y);let X;return r[65]!==w||r[66]!==q?(X={notebook:q,connection:w,reconnect:q.reconnect},r[65]=w,r[66]=q,r[67]=X):X=r[67],X}function qn(e){at({title:`Failed to handle message`,description:pt(e),variant:`danger`})}function Jn(e){return{...e,name:e.name}}function Yn(e){return{name:e.name,dataType:e.datatype,value:e.value}}function Xn(e){return{name:e.name,declaredBy:e.declared_by,usedBy:e.used_by}}function Zn(e){return e.name}function Qn(){return de().cellIds.inOrderIds}var $n=e=>{let t=(0,Q.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,$.jsx)(`div`,{"data-testid":`chrome-wrapper`,className:`flex flex-col flex-1 overflow-hidden absolute inset-0 print:relative`,children:n}),t[0]=n,t[1]=r),r};export{fn as a,pn as i,Kn as n,kt as o,hn as r,wt as s,$n as t};
|