@marimo-team/frontend 0.23.7-dev55 → 0.23.7-dev57
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-DXNmZJpi.js → CellStatus-DGBvmSvq.js} +1 -1
- package/dist/assets/JsonOutput-BEbyS3oG.js +53 -0
- package/dist/assets/{LazyAnyLanguageCodeMirror-B2pl_WA3.js → LazyAnyLanguageCodeMirror-GdhQ07zA.js} +2 -2
- package/dist/assets/{MarimoErrorOutput-YGhIA85d.js → MarimoErrorOutput-XWqnhvJ6.js} +1 -1
- package/dist/assets/{RenderHTML-Dz1OIbOh.js → RenderHTML-B5r25cP5.js} +1 -1
- package/dist/assets/{RunButton-D1IZ1Yr0.js → RunButton-Dbak5hfa.js} +1 -1
- package/dist/assets/{add-cell-with-ai-hIPYl46r.js → add-cell-with-ai-BbZkMqv2.js} +1 -1
- package/dist/assets/{add-connection-dialog-CMR-c9XE.js → add-connection-dialog-Cw6_iYno.js} +1 -1
- package/dist/assets/{agent-panel-DnBAoLsM.js → agent-panel-StLA6gDR.js} +1 -1
- package/dist/assets/{ai-model-dropdown-zvokTxf_.js → ai-model-dropdown-CjhUqXgj.js} +1 -1
- package/dist/assets/{any-language-editor-BgxVFHQ8.js → any-language-editor-Bdhmwznp.js} +1 -1
- package/dist/assets/{app-config-button-BjFAqaTN.js → app-config-button-CCs8Jepz.js} +1 -1
- package/dist/assets/{cell-editor-Dak_jwhB.js → cell-editor-Cgyoqdi5.js} +1 -1
- package/dist/assets/{cell-link-pRI-YfIp.js → cell-link-PQYiMZw1.js} +1 -1
- package/dist/assets/{cells-DbE28H1u.js → cells-Dnu4nDoy.js} +1 -1
- package/dist/assets/{chat-display-D_nDPZek.js → chat-display-DetTBnqK.js} +1 -1
- package/dist/assets/{chat-panel-BktSpl2P.js → chat-panel-CEgw_vg0.js} +1 -1
- package/dist/assets/{chat-ui-C0_KcXrv.js → chat-ui-D-Y7p_cT.js} +1 -1
- package/dist/assets/{chunk-5FQGJX7Z-DILIU9Rm.js → chunk-5FQGJX7Z-BSzccEgu.js} +3 -3
- package/dist/assets/{code-block-37QAKDTI-Bgm-HPiB.js → code-block-37QAKDTI-U2R1jyOo.js} +1 -1
- package/dist/assets/{column-preview-CNeXQtKn.js → column-preview-DA6nf5_Q.js} +1 -1
- package/dist/assets/{command-palette-CcjZs_TG.js → command-palette-n_e11WBA.js} +1 -1
- package/dist/assets/{common-CWRr25jC.js → common-BaBE_ygg.js} +1 -1
- package/dist/assets/{components-DUd0ki0p.js → components-CvGaLA5d.js} +1 -1
- package/dist/assets/{components-Cj3Al1Y6.js → components-zB5yT_R8.js} +1 -1
- package/dist/assets/config-C2lTvbuU.js +1 -0
- package/dist/assets/{datasource-Prn_GWOB.js → datasource-I-LOgxeP.js} +1 -1
- package/dist/assets/{dependency-graph-panel-DUUCij85.js → dependency-graph-panel-BjOeXp74.js} +1 -1
- package/dist/assets/{dist-DxnNQmQo.js → dist-CW3rweKM.js} +1 -1
- package/dist/assets/{documentation-panel-CB8xalFX.js → documentation-panel-DMdFXuBf.js} +1 -1
- package/dist/assets/{download-DEJbA1IY.js → download-BO6T2USS.js} +1 -1
- package/dist/assets/{edit-page-BkHYt2if.js → edit-page-Dos8zz_9.js} +6 -6
- package/dist/assets/{error-panel-DG6AtqLR.js → error-panel-iXznkJZ1.js} +1 -1
- package/dist/assets/{file-explorer-panel-Co6MlwYD.js → file-explorer-panel-_77UepGi.js} +3 -3
- package/dist/assets/{file-icons-BjTIuMQg.js → file-icons-B6DaZdP0.js} +1 -1
- package/dist/assets/{file-name-input-CQVbWhL8.js → file-name-input-g2H2sY2h.js} +1 -1
- package/dist/assets/{floating-outline-uy6dAsIe.js → floating-outline-DbOtUfo-.js} +1 -1
- package/dist/assets/{focus-0RBjdtZw.js → focus-BaOnnMs-.js} +1 -1
- package/dist/assets/{form-DNa2VnwU.js → form-CM8vYbSt.js} +1 -1
- package/dist/assets/{globals-DI5QlXvl.js → globals-CpVAcN9Z.js} +1 -1
- package/dist/assets/{home-page-BSuXANlw.js → home-page-De1W6q6f.js} +1 -1
- package/dist/assets/{hooks-B7pYZHjF.js → hooks-7OHHugrQ.js} +1 -1
- package/dist/assets/{html-to-image-CIu-0LbU.js → html-to-image-D6SgvARi.js} +1 -1
- package/dist/assets/index-1EIgCVR_.js +38 -0
- package/dist/assets/{kiosk-mode-Ch75k65P.js → kiosk-mode-Czvj3vmL.js} +1 -1
- package/dist/assets/{layout-DFhJt7oJ.js → layout-DQGNHEpb.js} +5 -5
- package/dist/assets/{logs-panel-DR-1BC0S.js → logs-panel-BMAfoMJg.js} +1 -1
- package/dist/assets/{markdown-renderer-DGqYztXR.js → markdown-renderer-BQ-BQLiJ.js} +3 -3
- package/dist/assets/mermaid-4DMBBIKO-C0OyyVdo.js +1 -0
- package/dist/assets/{name-cell-input-DwfyLq31.js → name-cell-input-bwfAyC0i.js} +1 -1
- package/dist/assets/{outline-panel-CWunrooQ.js → outline-panel-CkZUQcZ1.js} +1 -1
- package/dist/assets/{packages-panel-BdcXUFQJ.js → packages-panel-B3dRYuRM.js} +1 -1
- package/dist/assets/panels-DvIOAb34.js +1 -0
- package/dist/assets/{process-output-CS4QGJvL.js → process-output-9W-JyYdE.js} +1 -1
- package/dist/assets/{radio-group-BS2PIEzV.js → radio-group-rsi1ibXY.js} +1 -1
- package/dist/assets/{readonly-python-code-C5JNX2fu.js → readonly-python-code-BKYj8PNf.js} +1 -1
- package/dist/assets/{reveal-component-PiSHIrbA.js → reveal-component-ClM8W-TD.js} +1 -1
- package/dist/assets/{run-page-BovrPK0f.js → run-page-DJOwAe2z.js} +1 -1
- package/dist/assets/{scratchpad-panel-CAWFveBD.js → scratchpad-panel-CpM3jVv7.js} +1 -1
- package/dist/assets/{secrets-panel-CEh4Wjfn.js → secrets-panel-DqHGq3V8.js} +1 -1
- package/dist/assets/{session-panel-BR9h5w96.js → session-panel-jVcSUURP.js} +1 -1
- package/dist/assets/{snippets-panel-Y2etH9Qg.js → snippets-panel-DFJd1ui5.js} +1 -1
- package/dist/assets/{state-Fa6RzVTL.js → state-BXNNuw9g.js} +1 -1
- package/dist/assets/{state-1SbOXCLX.js → state-D9EoHCkz.js} +1 -1
- package/dist/assets/{switch-CTn-kJzM.js → switch-BtkQp293.js} +1 -1
- package/dist/assets/{terminal-DI2XRUUH.js → terminal-BSE1Vg5d.js} +1 -1
- package/dist/assets/{textarea-wgoQLrBS.js → textarea-BBTcSr-i.js} +1 -1
- package/dist/assets/{tracing-C9PZ0Pr1.js → tracing-BQU8fBDM.js} +1 -1
- package/dist/assets/{tracing-panel-C20Rk6hU.js → tracing-panel-DEVpyGX3.js} +2 -2
- package/dist/assets/useBoolean-B8LMGUHl.js +1 -0
- package/dist/assets/{useCellActionButton-D_-iAhme.js → useCellActionButton-CpNJthj4.js} +1 -1
- package/dist/assets/{useDeleteCell-41mvwiyA.js → useDeleteCell-DFahVcdW.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-ELdrL73c.js → useDependencyPanelTab-BNbEyT1o.js} +1 -1
- package/dist/assets/{useNotebookActions-CgN-58GN.js → useNotebookActions-DqlAe4Ea.js} +1 -1
- package/dist/assets/{useRunCells-CfHlqXY6.js → useRunCells-C0BPo9m1.js} +1 -1
- package/dist/assets/{useSplitCell-gHtyz873.js → useSplitCell-BN53wD86.js} +1 -1
- package/dist/assets/{vega-component-BPU1T-x7.js → vega-component-C9fDGx86.js} +1 -1
- package/dist/assets/{write-secret-modal-DjVzKit_.js → write-secret-modal-Liv_9MXS.js} +1 -1
- package/dist/index.html +40 -40
- package/package.json +1 -1
- package/src/components/data-table/__tests__/column-header.test.tsx +106 -1
- package/src/components/data-table/__tests__/filter-pill-editor.test.tsx +88 -2
- package/src/components/data-table/__tests__/filters.test.ts +84 -13
- package/src/components/data-table/column-header.tsx +152 -26
- package/src/components/data-table/date-filter-inputs.tsx +325 -0
- package/src/components/data-table/filter-pill-editor.tsx +139 -30
- package/src/components/data-table/filter-pills.tsx +31 -57
- package/src/components/data-table/filters.ts +88 -66
- package/src/components/editor/chrome/wrapper/footer-items/backend-status.tsx +1 -1
- package/src/core/runtime/__tests__/runtime.test.ts +38 -17
- package/src/core/runtime/runtime.ts +57 -34
- package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +5 -4
- package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +18 -54
- package/src/core/websocket/transports/__tests__/ws.test.ts +125 -0
- package/src/core/websocket/transports/basic.ts +1 -3
- package/src/core/websocket/transports/transport.ts +0 -1
- package/src/core/websocket/transports/ws.ts +96 -0
- package/src/core/websocket/useMarimoKernelConnection.tsx +30 -26
- package/src/core/websocket/useWebSocket.tsx +3 -18
- package/dist/assets/JsonOutput-Dxol3ZtH.js +0 -49
- package/dist/assets/config-DGudsRYK.js +0 -1
- package/dist/assets/index-DySiGerD.js +0 -42
- package/dist/assets/mermaid-4DMBBIKO-B-uFGNnk.js +0 -1
- package/dist/assets/panels-CJ1t18_z.js +0 -1
- package/dist/assets/useBoolean-DP3412N2.js +0 -1
- /package/dist/assets/{bundle.esm-DjhGJy4I.js → bundle.esm-BXIlAZ6T.js} +0 -0
- /package/dist/assets/{esm-DLYpPRvw.js → esm-Cb2bnV6o.js} +0 -0
- /package/dist/assets/{field-CQGpbXj3.js → field-DNlzfMKW.js} +0 -0
- /package/dist/assets/{formats-CJQ67TPE.js → formats-BRq458WH.js} +0 -0
- /package/dist/assets/{icons-Ol38nIbL.js → icons-8tfAri2V.js} +0 -0
- /package/dist/assets/{micromark-factory-space-P--XWZhg.js → micromark-factory-space-BUQpMdx2.js} +0 -0
- /package/dist/assets/{react-resizable-panels.browser.esm-CgWOEYeG.js → react-resizable-panels.browser.esm-Ce2ksurd.js} +0 -0
- /package/dist/assets/{renderShortcut-D7FYCtYQ.js → renderShortcut-DK-VjfaX.js} +0 -0
- /package/dist/assets/{table-DUSsaCYD.js → table-DQE9hQzM.js} +0 -0
- /package/dist/assets/{tree-actions-D9i3o3Zk.js → tree-actions-DY8FUp3V.js} +0 -0
- /package/dist/assets/{useDeepCompareMemoize-zUHU--0D.js → useDeepCompareMemoize-CWcgQCbT.js} +0 -0
|
@@ -11,10 +11,8 @@ import type {
|
|
|
11
11
|
NotificationMessageData,
|
|
12
12
|
NotificationPayload,
|
|
13
13
|
} from "@/core/kernel/messages";
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
useConnectionTransport,
|
|
17
|
-
} from "@/core/websocket/useWebSocket";
|
|
14
|
+
import { TRANSPORT_EXHAUSTED_REASON } from "@/core/websocket/transports/ws";
|
|
15
|
+
import { useConnectionTransport } from "@/core/websocket/useWebSocket";
|
|
18
16
|
import { renderHTML } from "@/plugins/core/RenderHTML";
|
|
19
17
|
import {
|
|
20
18
|
handleWidgetMessage,
|
|
@@ -80,16 +78,27 @@ import {
|
|
|
80
78
|
|
|
81
79
|
const SUPPORTS_LAZY_KERNELS = true;
|
|
82
80
|
|
|
81
|
+
// All MARIMO_* reasons except TRANSPORT_EXHAUSTED are emitted by the backend
|
|
82
|
+
// (marimo/_server/api/endpoints/ws_endpoint.py and ws/*.py). Keep in sync with
|
|
83
|
+
// the backend literals.
|
|
84
|
+
export type CloseReason =
|
|
85
|
+
| "MARIMO_ALREADY_CONNECTED"
|
|
86
|
+
| "MARIMO_WRONG_KERNEL_ID"
|
|
87
|
+
| "MARIMO_NO_FILE_KEY"
|
|
88
|
+
| "MARIMO_NO_SESSION_ID"
|
|
89
|
+
| "MARIMO_NO_SESSION"
|
|
90
|
+
| "MARIMO_SHUTDOWN"
|
|
91
|
+
| "MARIMO_MALFORMED_QUERY"
|
|
92
|
+
| "MARIMO_KERNEL_STARTUP_ERROR"
|
|
93
|
+
| typeof TRANSPORT_EXHAUSTED_REASON;
|
|
94
|
+
|
|
83
95
|
export type CloseDecision =
|
|
84
96
|
| { kind: "terminal"; status: ConnectionStatus; closeTransport: boolean }
|
|
85
97
|
| { kind: "gave-up"; status: ConnectionStatus }
|
|
86
98
|
| { kind: "retry"; status: ConnectionStatus };
|
|
87
99
|
|
|
88
|
-
export function classifyCloseEvent(
|
|
89
|
-
event
|
|
90
|
-
context: { retryCount: number; maxRetries: number },
|
|
91
|
-
): CloseDecision {
|
|
92
|
-
switch (event.reason) {
|
|
100
|
+
export function classifyCloseEvent(event: { reason?: string }): CloseDecision {
|
|
101
|
+
switch (event.reason as CloseReason | undefined) {
|
|
93
102
|
case "MARIMO_ALREADY_CONNECTED":
|
|
94
103
|
return {
|
|
95
104
|
kind: "terminal",
|
|
@@ -101,6 +110,15 @@ export function classifyCloseEvent(
|
|
|
101
110
|
},
|
|
102
111
|
closeTransport: true,
|
|
103
112
|
};
|
|
113
|
+
case TRANSPORT_EXHAUSTED_REASON:
|
|
114
|
+
return {
|
|
115
|
+
kind: "gave-up",
|
|
116
|
+
status: {
|
|
117
|
+
state: WebSocketState.CLOSED,
|
|
118
|
+
code: WebSocketClosedReason.KERNEL_DISCONNECTED,
|
|
119
|
+
reason: "kernel not found",
|
|
120
|
+
},
|
|
121
|
+
};
|
|
104
122
|
case "MARIMO_WRONG_KERNEL_ID":
|
|
105
123
|
case "MARIMO_NO_FILE_KEY":
|
|
106
124
|
case "MARIMO_NO_SESSION_ID":
|
|
@@ -144,18 +162,7 @@ export function classifyCloseEvent(
|
|
|
144
162
|
logNever(event.reason as never);
|
|
145
163
|
}
|
|
146
164
|
}
|
|
147
|
-
|
|
148
|
-
// CLOSED so callers can detect the give-up.
|
|
149
|
-
if (context.retryCount >= context.maxRetries) {
|
|
150
|
-
return {
|
|
151
|
-
kind: "gave-up",
|
|
152
|
-
status: {
|
|
153
|
-
state: WebSocketState.CLOSED,
|
|
154
|
-
code: WebSocketClosedReason.KERNEL_DISCONNECTED,
|
|
155
|
-
reason: "kernel not found",
|
|
156
|
-
},
|
|
157
|
-
};
|
|
158
|
-
}
|
|
165
|
+
|
|
159
166
|
return {
|
|
160
167
|
kind: "retry",
|
|
161
168
|
status: { state: WebSocketState.CONNECTING },
|
|
@@ -440,7 +447,7 @@ export function useMarimoKernelConnection(opts: {
|
|
|
440
447
|
}
|
|
441
448
|
shouldTryReconnecting.current = true;
|
|
442
449
|
setConnection({ state: WebSocketState.CONNECTING });
|
|
443
|
-
const healthy = await runtimeManager.
|
|
450
|
+
const healthy = await runtimeManager.reconcileFromHealth();
|
|
444
451
|
if (!healthy) {
|
|
445
452
|
shouldTryReconnecting.current = false;
|
|
446
453
|
setConnection({
|
|
@@ -512,10 +519,7 @@ export function useMarimoKernelConnection(opts: {
|
|
|
512
519
|
*/
|
|
513
520
|
onClose: (e) => {
|
|
514
521
|
Logger.warn("WebSocket closed", e.code, e.reason);
|
|
515
|
-
const decision = classifyCloseEvent(e
|
|
516
|
-
retryCount: ws.retryCount,
|
|
517
|
-
maxRetries: MAX_RETRIES,
|
|
518
|
-
});
|
|
522
|
+
const decision = classifyCloseEvent(e);
|
|
519
523
|
setConnection(decision.status);
|
|
520
524
|
if (decision.kind === "terminal" && decision.closeTransport) {
|
|
521
525
|
ws.close(); // close to prevent reconnecting
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import ReconnectingWebSocket from "partysocket/ws";
|
|
4
3
|
import { useEffect, useState } from "react";
|
|
5
4
|
import { Logger } from "@/utils/Logger";
|
|
6
5
|
import { createPyodideConnection } from "../wasm/bridge";
|
|
7
6
|
import { isWasm } from "../wasm/utils";
|
|
8
7
|
import { BasicTransport } from "./transports/basic";
|
|
8
|
+
import { WsTransport } from "./transports/ws";
|
|
9
9
|
import type { IConnectionTransport } from "./transports/transport";
|
|
10
10
|
|
|
11
11
|
interface UseConnectionTransportOptions {
|
|
@@ -18,10 +18,6 @@ interface UseConnectionTransportOptions {
|
|
|
18
18
|
onError: (event: WebSocketEventMap["error"]) => void;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
// Per-`reconnect()` retry budget for partysocket. After exhaustion, partysocket
|
|
22
|
-
// stops silently; treat `retryCount >= MAX_RETRIES` as the give-up signal.
|
|
23
|
-
export const MAX_RETRIES = 10;
|
|
24
|
-
|
|
25
21
|
function createConnectionTransport(
|
|
26
22
|
options: Pick<UseConnectionTransportOptions, "url" | "static">,
|
|
27
23
|
): IConnectionTransport {
|
|
@@ -31,19 +27,8 @@ function createConnectionTransport(
|
|
|
31
27
|
if (isWasm()) {
|
|
32
28
|
return createPyodideConnection();
|
|
33
29
|
}
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
const urlProvider = options.url; // We don't call the URL provider now since it may change (i.e. if the runtime redirects)
|
|
37
|
-
// Cast needed: ReconnectingWebSocket types readyState as `number`
|
|
38
|
-
// but IConnectionTransport expects `0 | 1 | 2 | 3`
|
|
39
|
-
return new ReconnectingWebSocket(urlProvider, undefined, {
|
|
40
|
-
maxRetries: MAX_RETRIES,
|
|
41
|
-
debug: false,
|
|
42
|
-
startClosed: true,
|
|
43
|
-
// long timeout -- the server can become slow when many notebooks
|
|
44
|
-
// are open.
|
|
45
|
-
connectionTimeout: 10_000,
|
|
46
|
-
}) as unknown as IConnectionTransport;
|
|
30
|
+
// urlProvider is passed lazily; it may change after a runtime redirect.
|
|
31
|
+
return new WsTransport(options.url);
|
|
47
32
|
}
|
|
48
33
|
|
|
49
34
|
/**
|