@marimo-team/frontend 0.21.2-dev37 → 0.21.2-dev40
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-DYdGvia_.js → CellStatus-IHJk0CT8.js} +1 -1
- package/dist/assets/{JsonOutput-CN6rPeEV.js → JsonOutput-BIbkaOuk.js} +9 -9
- package/dist/assets/{MarimoErrorOutput-BhfAlCn4.js → MarimoErrorOutput-hYOXA8Ml.js} +5 -5
- package/dist/assets/{RenderHTML-BS4HOKgA.js → RenderHTML-DduaBOBv.js} +1 -1
- package/dist/assets/{add-cell-with-ai-pEba6oGB.js → add-cell-with-ai-Cbktc1B0.js} +9 -9
- package/dist/assets/{add-connection-dialog-9odisycO.js → add-connection-dialog-BewAq3li.js} +23 -23
- package/dist/assets/{agent-panel-BSEF-vxf.js → agent-panel-CtAqa-P9.js} +5 -5
- package/dist/assets/{ai-model-dropdown-CBQHQst1.js → ai-model-dropdown-DgMZ5T_L.js} +3 -3
- package/dist/assets/{app-config-button-XC0eJuj1.js → app-config-button-BLGBmcfT.js} +1 -1
- package/dist/assets/{azure-Cl-hv4CT.js → azure-BeB26UeM.js} +1 -1
- package/dist/assets/{cell-editor-CtnuCOtA.js → cell-editor-Ti3F6axu.js} +12 -13
- package/dist/assets/{cell-link-D8ZUYcpP.js → cell-link-BEnixmCb.js} +1 -1
- package/dist/assets/{cells-DZyIQGyJ.js → cells-DqKJsMUm.js} +79 -78
- package/dist/assets/{chat-display-CvRHSFG6.js → chat-display-B0hV2K6L.js} +1 -1
- package/dist/assets/{chat-panel-BAGhr_FT.js → chat-panel-CNGIGWIs.js} +2 -2
- package/dist/assets/{column-preview-BuB6sz5V.js → column-preview-CVqBaB8R.js} +1 -1
- package/dist/assets/{command-DxWyVVPx.js → command-DpusMohg.js} +1 -1
- package/dist/assets/{command-palette-BjbqAF2r.js → command-palette-BfuIslSf.js} +1 -1
- package/dist/assets/{common-DJx7lN8H.js → common-CYWtZYKm.js} +1 -1
- package/dist/assets/{components-ENebof0d.js → components-C4dDqD7U.js} +1 -1
- package/dist/assets/{components-DSj55gbq.js → components-DZQ7ndNS.js} +1 -1
- package/dist/assets/{context-aware-panel-C4GJI0g0.js → context-aware-panel-DEVrXLoa.js} +3 -3
- package/dist/assets/{datasource-Be25L0nm.js → datasource-Bo8w993m.js} +2 -2
- package/dist/assets/{dependency-graph-panel-DwIVdeIJ.js → dependency-graph-panel-u9oPy09H.js} +4 -4
- package/dist/assets/{documentation-panel-78VOc9_O.js → documentation-panel-BQRmNRb_.js} +1 -1
- package/dist/assets/{download-BlNsDzA2.js → download-DtyAt8iO.js} +1 -1
- package/dist/assets/{edit-page-vExGqsee.js → edit-page-Cqvk7zWH.js} +7 -7
- package/dist/assets/{error-panel-D8Yl4tpB.js → error-panel-DclemF57.js} +1 -1
- package/dist/assets/{file-explorer-panel-CbIYi1SW.js → file-explorer-panel-D706RRJ-.js} +3 -3
- package/dist/assets/{file-icons-zgA9qh-d.js → file-icons-D4HcGlr_.js} +1 -1
- package/dist/assets/{floating-outline-vyq-JnTK.js → floating-outline-B86gVj23.js} +1 -1
- package/dist/assets/{focus-Cnr-VB8o.js → focus-B85PAbhR.js} +1 -1
- package/dist/assets/{form-LO1BJ8WB.js → form--K3o18rQ.js} +2 -2
- package/dist/assets/{globals-3fE4PBWj.js → globals-C_t1YYpc.js} +1 -1
- package/dist/assets/{home-page-DFcaf-s1.js → home-page-C5LO1JXE.js} +1 -1
- package/dist/assets/{hooks-NxoY-x2K.js → hooks-W-qT5c6l.js} +1 -1
- package/dist/assets/{html-to-image-DDWA96Ex.js → html-to-image-CoMmxXBd.js} +1 -1
- package/dist/assets/{index-OH-GH0bF.js → index-BSzIstPK.js} +14 -14
- package/dist/assets/{kiosk-mode-D4FbpWVp.js → kiosk-mode-zv0zIGqw.js} +1 -1
- package/dist/assets/{layout-qNHT912R.js → layout-C_JVKYrz.js} +3 -3
- package/dist/assets/{logs-panel-14Cp2UUn.js → logs-panel-DowtOCA5.js} +1 -1
- package/dist/assets/{markdown-renderer-CH1ffrUG.js → markdown-renderer-CNaYgTOF.js} +1 -1
- package/dist/assets/{mode-OBdgd6Zz.js → mode-Bn_XF6AW.js} +1 -1
- package/dist/assets/{name-cell-input-BmkGdvnh.js → name-cell-input-CVt9kv6F.js} +1 -1
- package/dist/assets/{outline-panel-Bn1SN1eu.js → outline-panel-ClI23gcy.js} +1 -1
- package/dist/assets/{packages-panel-Cyb4BUmM.js → packages-panel-BW2m-sNe.js} +1 -1
- package/dist/assets/{panels-DfEUpHpA.js → panels-B2DAaT1E.js} +1 -1
- package/dist/assets/{process-output-CC4VhdkC.js → process-output-BewZuQwI.js} +1 -1
- package/dist/assets/{readonly-python-code-Cq9EKL61.js → readonly-python-code-BgTK_w0H.js} +1 -1
- package/dist/assets/{run-page-Df9bi2J7.js → run-page-DMpRvHgf.js} +1 -1
- package/dist/assets/{scratchpad-panel-vKbONRfT.js → scratchpad-panel-ClDi2sdV.js} +1 -1
- package/dist/assets/{session-panel-DPoC2CoL.js → session-panel-C-RbWN-G.js} +1 -1
- package/dist/assets/{snippets-panel-D7W6PE7E.js → snippets-panel-DCdeI2hB.js} +1 -1
- package/dist/assets/{state-Br7baqTT.js → state-CJ2HIW-e.js} +1 -1
- package/dist/assets/{switch-Cds8TleW.js → switch-O_7alg7G.js} +1 -1
- package/dist/assets/tracing-BxcUfhUv.js +1 -0
- package/dist/assets/{tracing-panel-BpKr5n4H.js → tracing-panel-DK4YfdoZ.js} +2 -2
- package/dist/assets/{useAddCell-XcxY_cZw.js → useAddCell-BpBkEpP6.js} +1 -1
- package/dist/assets/{useBoolean-0C18DvVA.js → useBoolean-Cb23qnhy.js} +1 -1
- package/dist/assets/{useCellActionButton-DFNSBzoc.js → useCellActionButton-fJ6SGX-Z.js} +1 -1
- package/dist/assets/{useDeleteCell-DLdqnODD.js → useDeleteCell-B4nKRnTM.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-_E0t8nfy.js → useDependencyPanelTab-BUjZxWnG.js} +1 -1
- package/dist/assets/{useNotebookActions-DlbYUPWD.js → useNotebookActions-CooxVonM.js} +1 -1
- package/dist/assets/{useRunCells-YR_s_yuq.js → useRunCells-D5wCIJdU.js} +1 -1
- package/dist/assets/{useSplitCell-BNkvoKCq.js → useSplitCell-D8kqiCTS.js} +1 -1
- package/dist/index.html +32 -32
- package/package.json +1 -1
- package/src/__mocks__/notebook.ts +9 -9
- package/src/__tests__/branded.ts +20 -0
- package/src/components/data-table/charts/__tests__/storage.test.ts +7 -7
- package/src/components/editor/__tests__/data-attributes.test.tsx +8 -8
- package/src/components/editor/ai/__tests__/completion-utils.test.ts +15 -15
- package/src/components/editor/navigation/__tests__/clipboard.test.ts +2 -2
- package/src/components/editor/navigation/__tests__/selection.test.ts +7 -6
- package/src/components/editor/navigation/__tests__/state.test.ts +8 -7
- package/src/components/editor/output/MarimoErrorOutput.tsx +7 -7
- package/src/components/editor/output/__tests__/traceback.test.tsx +4 -4
- package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +4 -4
- package/src/components/editor/renderers/vertical-layout/useFocusFirstEditor.ts +8 -1
- package/src/components/storage/storage-inspector.tsx +1 -2
- package/src/components/tracing/tracing.tsx +3 -1
- package/src/core/ai/__tests__/staged-cells.test.ts +9 -8
- package/src/core/ai/context/providers/__tests__/cell-output.test.ts +31 -31
- package/src/core/ai/context/providers/__tests__/datasource.test.ts +3 -3
- package/src/core/ai/context/providers/__tests__/tables.test.ts +3 -2
- package/src/core/ai/context/providers/__tests__/variable.test.ts +84 -63
- package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +10 -9
- package/src/core/ai/tools/__tests__/run-cells-tool.test.ts +6 -6
- package/src/core/ai/tools/edit-notebook-tool.ts +3 -3
- package/src/core/cells/__tests__/add-missing-import.test.ts +3 -3
- package/src/core/cells/__tests__/cells.test.ts +192 -135
- package/src/core/cells/__tests__/focus.test.ts +5 -4
- package/src/core/cells/__tests__/logs.test.ts +13 -12
- package/src/core/cells/__tests__/pending-delete-service.test.tsx +3 -3
- package/src/core/cells/__tests__/runs.test.ts +22 -21
- package/src/core/cells/__tests__/scrollCellIntoView.test.ts +8 -7
- package/src/core/cells/__tests__/session.test.ts +23 -22
- package/src/core/cells/cells.ts +1 -1
- package/src/core/cells/ids.ts +5 -5
- package/src/core/cells/logs.ts +2 -2
- package/src/core/cells/runs.ts +6 -8
- package/src/core/codemirror/__tests__/format.test.ts +34 -36
- package/src/core/codemirror/__tests__/setup.test.ts +2 -2
- package/src/core/codemirror/cells/__tests__/extensions.test.ts +114 -0
- package/src/core/codemirror/cells/__tests__/traceback-decorations.test.ts +33 -32
- package/src/core/codemirror/cells/extensions.ts +66 -23
- package/src/core/codemirror/copilot/__tests__/getCodes.test.ts +12 -13
- package/src/core/codemirror/language/__tests__/utils.test.ts +3 -3
- package/src/core/codemirror/language/embedded/__tests__/embedded-python.test.ts +7 -8
- package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +4 -3
- package/src/core/codemirror/reactive-references/__tests__/analyzer.test.ts +7 -6
- package/src/core/codemirror/reactive-references/analyzer.ts +2 -2
- package/src/core/codemirror/rtc/loro/__tests__/sync.test.ts +52 -0
- package/src/core/codemirror/rtc/loro/sync.ts +1 -0
- package/src/core/datasets/__tests__/data-source.test.ts +5 -6
- package/src/core/datasets/state.ts +1 -1
- package/src/core/errors/__tests__/errors.test.ts +2 -1
- package/src/core/export/__tests__/hooks.test.ts +37 -36
- package/src/core/islands/main.ts +2 -7
- package/src/core/kernel/__tests__/handlers.test.ts +5 -4
- package/src/core/kernel/handlers.ts +7 -4
- package/src/core/network/DeferredRequestRegistry.ts +2 -2
- package/src/core/network/__tests__/CachingRequestRegistry.test.ts +9 -10
- package/src/core/network/__tests__/DeferredRequestRegistry.test.ts +4 -6
- package/src/core/static/__tests__/virtual-file-tracker.test.ts +8 -8
- package/src/core/static/virtual-file-tracker.ts +1 -1
- package/src/core/storage/__tests__/state.test.ts +31 -21
- package/src/core/storage/state.ts +1 -1
- package/src/core/variables/__tests__/state.test.ts +6 -6
- package/src/core/variables/types.ts +2 -2
- package/src/core/wasm/__tests__/state.test.ts +8 -8
- package/src/core/websocket/useMarimoKernelConnection.tsx +12 -15
- package/src/plugins/impl/anywidget/model.ts +1 -2
- package/src/stories/cell.stories.tsx +8 -8
- package/src/stories/layout/vertical/one-column.stories.tsx +9 -8
- package/src/stories/log-viewer.stories.tsx +8 -8
- package/src/stories/variables.stories.tsx +2 -2
- package/src/utils/__tests__/download.test.tsx +19 -18
- package/src/utils/json/base64.ts +3 -3
- package/src/utils/traceback.ts +5 -3
- package/dist/assets/tracing-DFGiZoMP.js +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
2
3
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
4
|
import { Mocks } from "@/__mocks__/common";
|
|
4
|
-
import
|
|
5
|
+
import { cellId } from "@/__tests__/branded";
|
|
5
6
|
import { CellOutputId } from "@/core/cells/ids";
|
|
6
7
|
import {
|
|
7
8
|
downloadAsPDF,
|
|
@@ -218,7 +219,7 @@ describe("getImageDataUrlForCell", () => {
|
|
|
218
219
|
beforeEach(() => {
|
|
219
220
|
vi.clearAllMocks();
|
|
220
221
|
mockElement = document.createElement("div");
|
|
221
|
-
mockElement.id = CellOutputId.create("cell-1"
|
|
222
|
+
mockElement.id = CellOutputId.create(cellId("cell-1"));
|
|
222
223
|
document.body.append(mockElement);
|
|
223
224
|
});
|
|
224
225
|
|
|
@@ -227,7 +228,7 @@ describe("getImageDataUrlForCell", () => {
|
|
|
227
228
|
});
|
|
228
229
|
|
|
229
230
|
it("should return undefined if element is not found", async () => {
|
|
230
|
-
const result = await getImageDataUrlForCell("nonexistent"
|
|
231
|
+
const result = await getImageDataUrlForCell(cellId("nonexistent"));
|
|
231
232
|
|
|
232
233
|
expect(result).toBeUndefined();
|
|
233
234
|
expect(Logger.error).toHaveBeenCalledWith(
|
|
@@ -238,7 +239,7 @@ describe("getImageDataUrlForCell", () => {
|
|
|
238
239
|
it("should capture screenshot and return data URL", async () => {
|
|
239
240
|
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
240
241
|
|
|
241
|
-
const result = await getImageDataUrlForCell("cell-1"
|
|
242
|
+
const result = await getImageDataUrlForCell(cellId("cell-1"));
|
|
242
243
|
|
|
243
244
|
expect(result).toBe(mockDataUrl);
|
|
244
245
|
expect(toPng).toHaveBeenCalledWith(
|
|
@@ -253,7 +254,7 @@ describe("getImageDataUrlForCell", () => {
|
|
|
253
254
|
it("should pass style options to prevent clipping", async () => {
|
|
254
255
|
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
255
256
|
|
|
256
|
-
await getImageDataUrlForCell("cell-1"
|
|
257
|
+
await getImageDataUrlForCell(cellId("cell-1"));
|
|
257
258
|
|
|
258
259
|
expect(toPng).toHaveBeenCalledWith(
|
|
259
260
|
mockElement,
|
|
@@ -274,7 +275,7 @@ describe("getImageDataUrlForCell", () => {
|
|
|
274
275
|
});
|
|
275
276
|
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
276
277
|
|
|
277
|
-
await getImageDataUrlForCell("cell-1"
|
|
278
|
+
await getImageDataUrlForCell(cellId("cell-1"));
|
|
278
279
|
|
|
279
280
|
expect(toPng).toHaveBeenCalledWith(
|
|
280
281
|
mockElement,
|
|
@@ -287,7 +288,7 @@ describe("getImageDataUrlForCell", () => {
|
|
|
287
288
|
it("should pass scrollbar hiding styles via extraStyleContent", async () => {
|
|
288
289
|
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
289
290
|
|
|
290
|
-
await getImageDataUrlForCell("cell-1"
|
|
291
|
+
await getImageDataUrlForCell(cellId("cell-1"));
|
|
291
292
|
|
|
292
293
|
expect(toPng).toHaveBeenCalledWith(
|
|
293
294
|
mockElement,
|
|
@@ -302,7 +303,7 @@ describe("getImageDataUrlForCell", () => {
|
|
|
302
303
|
mockElement.style.maxHeight = "100px";
|
|
303
304
|
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
304
305
|
|
|
305
|
-
await getImageDataUrlForCell("cell-1"
|
|
306
|
+
await getImageDataUrlForCell(cellId("cell-1"));
|
|
306
307
|
|
|
307
308
|
// DOM should remain unchanged
|
|
308
309
|
expect(mockElement.style.overflow).toBe("hidden");
|
|
@@ -312,7 +313,7 @@ describe("getImageDataUrlForCell", () => {
|
|
|
312
313
|
it("should throw error on failure", async () => {
|
|
313
314
|
vi.mocked(toPng).mockRejectedValue(new Error("Capture failed"));
|
|
314
315
|
|
|
315
|
-
await expect(getImageDataUrlForCell("cell-1"
|
|
316
|
+
await expect(getImageDataUrlForCell(cellId("cell-1"))).rejects.toThrow(
|
|
316
317
|
"Capture failed",
|
|
317
318
|
);
|
|
318
319
|
});
|
|
@@ -320,13 +321,13 @@ describe("getImageDataUrlForCell", () => {
|
|
|
320
321
|
it("should handle concurrent captures correctly", async () => {
|
|
321
322
|
// Create a second element
|
|
322
323
|
const mockElement2 = document.createElement("div");
|
|
323
|
-
mockElement2.id = CellOutputId.create("cell-2"
|
|
324
|
+
mockElement2.id = CellOutputId.create(cellId("cell-2"));
|
|
324
325
|
document.body.append(mockElement2);
|
|
325
326
|
|
|
326
327
|
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
327
328
|
|
|
328
|
-
const capture1 = getImageDataUrlForCell("cell-1"
|
|
329
|
-
const capture2 = getImageDataUrlForCell("cell-2"
|
|
329
|
+
const capture1 = getImageDataUrlForCell(cellId("cell-1"));
|
|
330
|
+
const capture2 = getImageDataUrlForCell(cellId("cell-2"));
|
|
330
331
|
|
|
331
332
|
await Promise.all([capture1, capture2]);
|
|
332
333
|
|
|
@@ -461,7 +462,7 @@ describe("downloadCellOutputAsImage", () => {
|
|
|
461
462
|
beforeEach(() => {
|
|
462
463
|
vi.clearAllMocks();
|
|
463
464
|
mockElement = document.createElement("div");
|
|
464
|
-
mockElement.id = CellOutputId.create("cell-1"
|
|
465
|
+
mockElement.id = CellOutputId.create(cellId("cell-1"));
|
|
465
466
|
mockAppEl = document.createElement("div");
|
|
466
467
|
mockAppEl.id = "App";
|
|
467
468
|
// Mock scrollTo since jsdom doesn't implement it
|
|
@@ -486,7 +487,7 @@ describe("downloadCellOutputAsImage", () => {
|
|
|
486
487
|
});
|
|
487
488
|
|
|
488
489
|
it("should show error toast if element not found", async () => {
|
|
489
|
-
await downloadCellOutputAsImage("nonexistent"
|
|
490
|
+
await downloadCellOutputAsImage(cellId("nonexistent"), "test");
|
|
490
491
|
|
|
491
492
|
expect(toPng).not.toHaveBeenCalled();
|
|
492
493
|
expect(Logger.error).toHaveBeenCalledWith(
|
|
@@ -502,7 +503,7 @@ describe("downloadCellOutputAsImage", () => {
|
|
|
502
503
|
it("should show error toast if toPng fails", async () => {
|
|
503
504
|
vi.mocked(toPng).mockRejectedValue(new Error("Screenshot failed"));
|
|
504
505
|
|
|
505
|
-
await downloadCellOutputAsImage("cell-1"
|
|
506
|
+
await downloadCellOutputAsImage(cellId("cell-1"), "result");
|
|
506
507
|
|
|
507
508
|
expect(toast).toHaveBeenCalledWith({
|
|
508
509
|
title: "Failed to download PNG",
|
|
@@ -514,7 +515,7 @@ describe("downloadCellOutputAsImage", () => {
|
|
|
514
515
|
it("should download cell output as image", async () => {
|
|
515
516
|
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
516
517
|
|
|
517
|
-
await downloadCellOutputAsImage("cell-1"
|
|
518
|
+
await downloadCellOutputAsImage(cellId("cell-1"), "result");
|
|
518
519
|
|
|
519
520
|
expect(toPng).toHaveBeenCalledWith(
|
|
520
521
|
mockElement,
|
|
@@ -529,7 +530,7 @@ describe("downloadCellOutputAsImage", () => {
|
|
|
529
530
|
it("should pass style options to toPng for full content capture", async () => {
|
|
530
531
|
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
531
532
|
|
|
532
|
-
await downloadCellOutputAsImage("cell-1"
|
|
533
|
+
await downloadCellOutputAsImage(cellId("cell-1"), "result");
|
|
533
534
|
|
|
534
535
|
expect(toPng).toHaveBeenCalledWith(
|
|
535
536
|
mockElement,
|
|
@@ -547,7 +548,7 @@ describe("downloadCellOutputAsImage", () => {
|
|
|
547
548
|
mockElement.style.maxHeight = "100px";
|
|
548
549
|
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
549
550
|
|
|
550
|
-
await downloadCellOutputAsImage("cell-1"
|
|
551
|
+
await downloadCellOutputAsImage(cellId("cell-1"), "result");
|
|
551
552
|
|
|
552
553
|
// DOM should remain unchanged
|
|
553
554
|
expect(mockElement.style.overflow).toBe("hidden");
|
package/src/utils/json/base64.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
+
import type { components } from "@marimo-team/marimo-api";
|
|
3
4
|
import type { NotificationMessageData } from "@/core/kernel/messages";
|
|
4
5
|
import type { TypedString } from "../typed";
|
|
5
6
|
|
|
@@ -11,9 +12,9 @@ export type JsonString<T = unknown> = TypedString<"Json"> & {
|
|
|
11
12
|
};
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
|
-
* A base64-encoded string.
|
|
15
|
+
* A base64-encoded string — derived from the generated OpenAPI schema.
|
|
15
16
|
*/
|
|
16
|
-
export type Base64String =
|
|
17
|
+
export type Base64String = components["schemas"]["Base64String"];
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* A data URL string.
|
|
@@ -120,7 +121,6 @@ export function dataViewToBase64(dataView: DataView): Base64String {
|
|
|
120
121
|
export function safeExtractSetUIElementMessageBuffers(
|
|
121
122
|
notification: NotificationMessageData<"send-ui-element-message">,
|
|
122
123
|
): readonly DataView[] {
|
|
123
|
-
// @ts-expect-error - TypeScript doesn't know that these strings are actually base64 strings
|
|
124
124
|
const strs: Base64String[] = notification.buffers ?? [];
|
|
125
125
|
return strs.map(base64ToDataView);
|
|
126
126
|
}
|
package/src/utils/traceback.ts
CHANGED
|
@@ -98,10 +98,12 @@ export function getTracebackInfo(domNode: DOMNode): TracebackInfo | null {
|
|
|
98
98
|
10,
|
|
99
99
|
);
|
|
100
100
|
if (domNode.firstChild.nodeValue?.includes("__marimo__")) {
|
|
101
|
-
const
|
|
101
|
+
const maybeCellId = /__marimo__cell_(\w+)_/.exec(
|
|
102
102
|
domNode.firstChild.nodeValue,
|
|
103
|
-
)?.[1]
|
|
104
|
-
if (
|
|
103
|
+
)?.[1];
|
|
104
|
+
if (maybeCellId && lineNumber) {
|
|
105
|
+
// @ts-expect-error - Custom parser above will return valid cell ids
|
|
106
|
+
const cellId: CellId = maybeCellId;
|
|
105
107
|
return { kind: "cell", cellId, lineNumber };
|
|
106
108
|
}
|
|
107
109
|
} else {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as F}from"./chunk-LvLJmgfZ.js";import{d as ee,p as te,u as L}from"./useEvent-O0nX5vok.js";import{t as re}from"./react-Bj1aDYRI.js";import{K as A,Qn as le,ir as se,j as ae}from"./cells-DZyIQGyJ.js";import"./react-dom-CSu739Rf.js";import{t as ie}from"./compiler-runtime-B3qBwwSJ.js";import{t as ne}from"./jsx-runtime-icT_Ltz2.js";import{t as oe}from"./cn-BoaCR37F.js";import"./dist-B_cxg-E4.js";import"./cjs-BU2qXMKx.js";import"./main-DrBRErTM.js";import"./useNonce-BtW-rR_1.js";import{t as de}from"./createLucideIcon-Cm-Z7dYr.js";import{n as ce,r as U}from"./CellStatus-DYdGvia_.js";import{r as me}from"./x-BI1M8X_v.js";import{t as pe}from"./chevron-right-D0GQBpTb.js";import{t as ue}from"./circle-check-gLIOLu8x.js";import{t as he}from"./circle-play-DYGULlKZ.js";import"./dist-BNC_tnlW.js";import"./dist-CXLJUPFl.js";import"./dist-CQqv2gQL.js";import"./dist-8UD0A5sU.js";import"./dist-apDpadc4.js";import"./session-BrEm7qNv.js";import{r as fe}from"./useTheme-BYXBU1of.js";import"./Combination-Cs9nbinQ.js";import{t as K}from"./tooltip-D9723Brr.js";import"./purify.es-BBn8CPhf.js";import"./vega-loader.browser-CZV6_g2i.js";import{r as xe,t as ve}from"./react-vega-BZav_-2n.js";import"./defaultLocale-OkOxlkkM.js";import"./defaultLocale-DK1MWd7f.js";import{t as ge}from"./cell-link-D8ZUYcpP.js";import{t as je}from"./bundle.esm-idScn0w0.js";import{n as ye,r as Ie,t as Q}from"./react-resizable-panels.browser.esm-DDRqG5ui.js";import{t as Se}from"./empty-state-B_US46Us.js";import"./multi-icon-DEWnuZs2.js";import{r as be}from"./panel-context-BN0DQXiK.js";import{t as Ne}from"./clear-button-DrIF5o__.js";import{n as Te,t as we}from"./runs-Bhy0tbWr.js";var ke=de("circle-ellipsis",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M17 12h.01",key:"1m0b6t"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M7 12h.01",key:"eqddd0"}]]),H=ie(),C=F(re(),1);const V="hoveredCellId",Y="cellHover";var Re="cellNum",G="cell",O="startTimestamp",J="endTimestamp",W="status";function _e(t,e,r,a){let i="hoursminutessecondsmilliseconds";return{$schema:"https://vega.github.io/schema/vega-lite/v6.json",background:a==="dark"?"black":void 0,mark:{type:"bar",cornerRadius:2},params:[{name:V,bind:{element:`#${e}`}},{name:Y,select:{type:"point",on:"mouseover",fields:[G],clear:"mouseout"}}],height:{step:r==="sideBySide"?26:21},encoding:{y:{field:Re,scale:{paddingInner:.2},sort:{field:"sortPriority"},title:"cell",axis:r==="sideBySide"?null:void 0},x:{field:O,type:"temporal",axis:{orient:"top",title:null}},x2:{field:J,type:"temporal"},tooltip:[{field:O,type:"temporal",timeUnit:i,title:"Start"},{field:J,type:"temporal",timeUnit:i,title:"End"}],size:{value:{expr:`${V} == toString(datum.${G}) ? 19.5 : 18`}},color:{field:W,scale:{domain:["success","error"],range:["#37BE5F","red"]},legend:null}},data:{values:t},transform:[{calculate:`datum.${W} === 'queued' ? 9999999999999 : datum.${O}`,as:"sortPriority"}],config:{view:{stroke:"transparent"}}}}function X(t){try{let e=new Date(t*1e3);return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")} ${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.getSeconds()).padStart(2,"0")}.${String(e.getMilliseconds()).padStart(3,"0")}`}catch{return""}}var l=F(ne(),1),Z=te(new Map);const Me=()=>{let t=(0,H.c)(34),{runIds:e,runMap:r}=L(we),a=L(Z),{clearRuns:i}=Te(),{theme:n}=fe(),[s,w]=(0,C.useState)("above"),N=be(),c;t[0]===s?c=t[1]:(c=()=>{w(s==="above"?"sideBySide":"above")},t[0]=s,t[1]=c);let m=c;if(e.length===0){let p;return t[2]===Symbol.for("react.memo_cache_sentinel")?(p=(0,l.jsx)(Se,{title:"No traces",description:(0,l.jsx)("span",{children:"Cells that have ran will appear here."}),icon:(0,l.jsx)(se,{})}),t[2]=p):p=t[2],p}let u;t[3]===Symbol.for("react.memo_cache_sentinel")?(u=(0,l.jsx)("label",{htmlFor:"chartPosition",className:"text-xs",children:"Inline chart"}),t[3]=u):u=t[3];let y=s==="sideBySide",o;t[4]!==y||t[5]!==m?(o=(0,l.jsxs)("div",{className:"flex flex-row gap-1 items-center",children:[u,(0,l.jsx)("input",{type:"checkbox",name:"chartPosition","data-testid":"chartPosition",onClick:m,defaultChecked:y,className:"h-3 cursor-pointer"})]}),t[4]=y,t[5]=m,t[6]=o):o=t[6];let h;t[7]===i?h=t[8]:(h=(0,l.jsx)(Ne,{dataTestId:"clear-traces-button",onClick:i}),t[7]=i,t[8]=h);let v;t[9]!==o||t[10]!==h?(v=(0,l.jsxs)("div",{className:"flex flex-row justify-start gap-3",children:[o,h]}),t[9]=o,t[10]=h,t[11]=v):v=t[11];let g;if(t[12]!==s||t[13]!==a||t[14]!==e||t[15]!==r||t[16]!==n){let p;t[18]!==s||t[19]!==a||t[20]!==r||t[21]!==n?(p=(_,E)=>{let R=r.get(_);return R?(0,l.jsx)($e,{run:R,isExpanded:a.get(R.runId),isMostRecentRun:E===0,chartPosition:s,theme:n},R.runId):null},t[18]=s,t[19]=a,t[20]=r,t[21]=n,t[22]=p):p=t[22],g=e.map(p),t[12]=s,t[13]=a,t[14]=e,t[15]=r,t[16]=n,t[17]=g}else g=t[17];let j;t[23]===g?j=t[24]:(j=(0,l.jsx)("div",{className:"flex flex-col gap-3",children:g}),t[23]=g,t[24]=j);let T;t[25]!==v||t[26]!==j?(T=(0,l.jsxs)("div",{className:"py-1 px-2 overflow-y-scroll h-full",children:[v,j]}),t[25]=v,t[26]=j,t[27]=T):T=t[27];let f=T;if(N==="sidebar")return f;let x;t[28]===f?x=t[29]:(x=(0,l.jsx)(Q,{defaultSize:50,minSize:30,maxSize:80,children:f}),t[28]=f,t[29]=x);let d;t[30]===Symbol.for("react.memo_cache_sentinel")?(d=(0,l.jsx)(Ie,{className:"w-1 bg-border hover:bg-primary/50 transition-colors"}),t[30]=d):d=t[30];let I;t[31]===Symbol.for("react.memo_cache_sentinel")?(I=(0,l.jsx)(Q,{defaultSize:50,children:(0,l.jsx)("div",{})}),t[31]=I):I=t[31];let S;return t[32]===x?S=t[33]:(S=(0,l.jsxs)(ye,{direction:"horizontal",className:"h-full",children:[x,d,I]}),t[32]=x,t[33]=S),S};var $e=({run:t,isMostRecentRun:e,chartPosition:r,isExpanded:a,theme:i})=>{let n=ee(Z);a??(a=e);let s=()=>{n(c=>{let m=new Map(c);return m.set(t.runId,!a),m})},w=(0,l.jsx)(a?me:pe,{height:16,className:"inline"}),N=(0,l.jsxs)("span",{className:"text-sm cursor-pointer",onClick:s,children:["Run - ",A(t.runStartTime),w]});return a?(0,l.jsx)(ze,{run:t,chartPosition:r,theme:i,title:N},t.runId):(0,l.jsx)("div",{className:"flex flex-col",children:(0,l.jsx)("pre",{className:"font-mono font-semibold",children:N})},t.runId)},ze=t=>{let e=(0,H.c)(40),{run:r,chartPosition:a,theme:i,title:n}=t,[s,w]=(0,C.useState)(),N=(0,C.useRef)(null),{ref:c,width:m}=je(),u=m===void 0?300:m,y=ae(),o,h;if(e[0]!==y||e[1]!==a||e[2]!==r.cellRuns||e[3]!==r.runId||e[4]!==i){let k=[...r.cellRuns.values()].map(b=>{let M=b.elapsedTime??0;return{cell:b.cellId,cellNum:y.inOrderIds.indexOf(b.cellId),startTimestamp:X(b.startTime),endTimestamp:X(b.startTime+M),elapsedTime:U(M*1e3),status:b.status}});o=`hiddenInputElement-${r.runId}`,h=xe(_e(k,o,a,i)),e[0]=y,e[1]=a,e[2]=r.cellRuns,e[3]=r.runId,e[4]=i,e[5]=o,e[6]=h}else o=e[5],h=e[6];let v=h.spec,g=i==="dark"?"dark":void 0,j=u-50,T=a==="above"?120:100,f;e[7]!==g||e[8]!==j||e[9]!==T?(f={theme:g,width:j,height:T,actions:!1,mode:"vega",renderer:"canvas"},e[7]=g,e[8]=j,e[9]=T,e[10]=f):f=e[10];let x;e[11]!==f||e[12]!==v?(x={ref:N,spec:v,options:f},e[11]=f,e[12]=v,e[13]=x):x=e[13];let d=ve(x),I;e[14]===(d==null?void 0:d.view)?I=e[15]:(I=()=>{let k=[{signalName:Y,handler:(b,M)=>{var q;let P=(q=M.cell)==null?void 0:q[0];w(P??null)}}];return k.forEach(b=>{let{signalName:M,handler:P}=b;d==null||d.view.addSignalListener(M,P)}),()=>{k.forEach(b=>{let{signalName:M,handler:P}=b;d==null||d.view.removeSignalListener(M,P)})}},e[14]=d==null?void 0:d.view,e[15]=I);let S;e[16]===d?S=e[17]:(S=[d],e[16]=d,e[17]=S),(0,C.useEffect)(I,S);let p;e[18]!==o||e[19]!==s||e[20]!==r?(p=(0,l.jsx)(Ce,{run:r,hoveredCellId:s,hiddenInputElementId:o}),e[18]=o,e[19]=s,e[20]=r,e[21]=p):p=e[21];let _=p,E=a==="sideBySide"?"-mt-0.5 flex-1":"",R;e[22]===Symbol.for("react.memo_cache_sentinel")?(R=(0,l.jsx)(C.Suspense,{children:(0,l.jsx)("div",{ref:N})}),e[22]=R):R=e[22];let B;e[23]!==c||e[24]!==E?(B=(0,l.jsx)("div",{className:E,ref:c,children:R}),e[23]=c,e[24]=E,e[25]=B):B=e[25];let $=B;if(a==="above"){let k;e[26]!==$||e[27]!==n||e[28]!==_?(k=(0,l.jsxs)("pre",{className:"font-mono font-semibold",children:[n,$,_]}),e[26]=$,e[27]=n,e[28]=_,e[29]=k):k=e[29];let b;return e[30]!==r.runId||e[31]!==k?(b=(0,l.jsx)("div",{className:"flex flex-col",children:k},r.runId),e[30]=r.runId,e[31]=k,e[32]=b):b=e[32],b}let z;e[33]!==n||e[34]!==_?(z=(0,l.jsxs)("pre",{className:"font-mono font-semibold",children:[n,_]}),e[33]=n,e[34]=_,e[35]=z):z=e[35];let D;return e[36]!==$||e[37]!==r.runId||e[38]!==z?(D=(0,l.jsxs)("div",{className:"flex flex-row",children:[z,$]},r.runId),e[36]=$,e[37]=r.runId,e[38]=z,e[39]=D):D=e[39],D},Ce=t=>{let e=(0,H.c)(12),{run:r,hoveredCellId:a,hiddenInputElementId:i}=t,n=(0,C.useRef)(null),s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=o=>{n.current&&(n.current.value=String(o),n.current.dispatchEvent(new Event("input",{bubbles:!0})))},e[0]=s):s=e[0];let w=s,N=a||"",c;e[1]!==i||e[2]!==N?(c=(0,l.jsx)("input",{type:"text",id:i,defaultValue:N,hidden:!0,ref:n}),e[1]=i,e[2]=N,e[3]=c):c=e[3];let m;e[4]===r.cellRuns?m=e[5]:(m=[...r.cellRuns.values()],e[4]=r.cellRuns,e[5]=m);let u;e[6]!==a||e[7]!==m?(u=m.map(o=>(0,l.jsx)(Pe,{cellRun:o,hovered:o.cellId===a,dispatchHoverEvent:w},o.cellId)),e[6]=a,e[7]=m,e[8]=u):u=e[8];let y;return e[9]!==c||e[10]!==u?(y=(0,l.jsxs)("div",{className:"text-xs mt-0.5 ml-3 flex flex-col gap-0.5",children:[c,u]}),e[9]=c,e[10]=u,e[11]=y):y=e[11],y},Ee={success:(0,l.jsx)(ue,{color:"green",size:14}),running:(0,l.jsx)(he,{color:"var(--blue-10)",size:14}),error:(0,l.jsx)(le,{color:"red",size:14}),queued:(0,l.jsx)(ke,{color:"grey",size:14})},Pe=t=>{let e=(0,H.c)(39),{cellRun:r,hovered:a,dispatchHoverEvent:i}=t,n;e[0]===r.elapsedTime?n=e[1]:(n=r.elapsedTime?U(r.elapsedTime*1e3):"-",e[0]=r.elapsedTime,e[1]=n);let s=n,w;e[2]!==r.elapsedTime||e[3]!==s?(w=r.elapsedTime?(0,l.jsxs)("span",{children:["This cell took ",(0,l.jsx)(ce,{elapsedTime:s})," to run"]}):(0,l.jsx)("span",{children:"This cell has not been run"}),e[2]=r.elapsedTime,e[3]=s,e[4]=w):w=e[4];let N=w,c;e[5]!==r.cellId||e[6]!==i?(c=()=>{i(r.cellId)},e[5]=r.cellId,e[6]=i,e[7]=c):c=e[7];let m=c,u;e[8]===i?u=e[9]:(u=()=>{i(null)},e[8]=i,e[9]=u);let y=u,o=a&&"bg-(--gray-3) opacity-100",h;e[10]===o?h=e[11]:(h=oe("flex flex-row gap-2 py-1 px-1 opacity-70 hover:bg-(--gray-3) hover:opacity-100",o),e[10]=o,e[11]=h);let v;e[12]===r.startTime?v=e[13]:(v=A(r.startTime),e[12]=r.startTime,e[13]=v);let g;e[14]===v?g=e[15]:(g=(0,l.jsxs)("span",{className:"text-(--gray-10) dark:text-(--gray-11)",children:["[",v,"]"]}),e[14]=v,e[15]=g);let j;e[16]===r.cellId?j=e[17]:(j=(0,l.jsxs)("span",{className:"text-(--gray-10) w-16 overflow-hidden",children:["(",(0,l.jsx)(ge,{cellId:r.cellId}),")"]}),e[16]=r.cellId,e[17]=j);let T;e[18]===r.code?T=e[19]:(T=(0,l.jsx)("span",{className:"w-40 truncate -ml-1",children:r.code}),e[18]=r.code,e[19]=T);let f;e[20]===s?f=e[21]:(f=(0,l.jsx)("span",{className:"text-(--gray-10) dark:text-(--gray-11)",children:s}),e[20]=s,e[21]=f);let x;e[22]!==N||e[23]!==f?(x=(0,l.jsx)(K,{content:N,children:f}),e[22]=N,e[23]=f,e[24]=x):x=e[24];let d=Ee[r.status],I;e[25]!==r.status||e[26]!==d?(I=(0,l.jsx)(K,{content:r.status,children:d}),e[25]=r.status,e[26]=d,e[27]=I):I=e[27];let S;e[28]!==x||e[29]!==I?(S=(0,l.jsxs)("div",{className:"flex flex-row gap-1 w-16 justify-end -ml-2",children:[x,I]}),e[28]=x,e[29]=I,e[30]=S):S=e[30];let p;return e[31]!==m||e[32]!==y||e[33]!==T||e[34]!==S||e[35]!==h||e[36]!==g||e[37]!==j?(p=(0,l.jsxs)("div",{className:h,onMouseEnter:m,onMouseLeave:y,children:[g,j,T,S]}),e[31]=m,e[32]=y,e[33]=T,e[34]=S,e[35]=h,e[36]=g,e[37]=j,e[38]=p):p=e[38],p};export{Me as Tracing};
|