@marimo-team/frontend 0.23.9-dev10 → 0.23.9-dev11
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-D_-Xs2i2.js → CellStatus-CYnTqpDu.js} +1 -1
- package/dist/assets/{JsonOutput-DYoyBk2A.js → JsonOutput-BEIaEFVx.js} +12 -12
- package/dist/assets/MarimoErrorOutput-BrtF-EJX.js +7 -0
- package/dist/assets/{RenderHTML-IGRZU9wj.js → RenderHTML-ozbWHhKy.js} +1 -1
- package/dist/assets/{add-cell-with-ai-9EyttqGQ.js → add-cell-with-ai-D80JrWq3.js} +1 -1
- package/dist/assets/{add-connection-dialog-CxajI6xY.js → add-connection-dialog-Dit1I7Se.js} +1 -1
- package/dist/assets/{agent-panel-a-A0NVo_.js → agent-panel-C-u_vOoE.js} +1 -1
- package/dist/assets/{ai-model-dropdown-D0tfwqft.js → ai-model-dropdown-2YDLOBgP.js} +1 -1
- package/dist/assets/{app-config-button-Cooknt8P.js → app-config-button-ClcNCSVm.js} +1 -1
- package/dist/assets/{cell-editor-TtRV_DM8.js → cell-editor-n3uoR3fW.js} +1 -1
- package/dist/assets/{cell-link-VlbhstGP.js → cell-link-xmpxJpC6.js} +1 -1
- package/dist/assets/{cells-WW455pbI.js → cells-DfBJ0VnJ.js} +1 -1
- package/dist/assets/{chat-display-0SSKyMkt.js → chat-display-Ddsm0CG8.js} +1 -1
- package/dist/assets/{chat-panel-BC-bG7Ms.js → chat-panel-75Zw468n.js} +1 -1
- package/dist/assets/{chat-ui-B0pCMupQ.js → chat-ui-Dk62XQcq.js} +1 -1
- package/dist/assets/{column-preview-C-xQqzBs.js → column-preview-B0fkY_W8.js} +1 -1
- package/dist/assets/{command-palette-CO8Z9i_v.js → command-palette-B-4BGife.js} +1 -1
- package/dist/assets/{common-Bei_EA1L.js → common-CPsAf0Xi.js} +1 -1
- package/dist/assets/{components-cjKlTr3f.js → components-CRWZ9jxm.js} +1 -1
- package/dist/assets/{components-B-vsJpY6.js → components-DptWjGr1.js} +1 -1
- package/dist/assets/{datasource-CrDfHWto.js → datasource-D1itEHCP.js} +1 -1
- package/dist/assets/{dependency-graph-panel-skSyvOmU.js → dependency-graph-panel-BpJ5fvBf.js} +1 -1
- package/dist/assets/{documentation-panel-BWa3CXAu.js → documentation-panel-CeNyn2VS.js} +1 -1
- package/dist/assets/{download-CKGdZtPf.js → download-BQQnYuPC.js} +1 -1
- package/dist/assets/{edit-page-CxTwv1ds.js → edit-page-OW7p7hhZ.js} +3 -3
- package/dist/assets/{error-panel-BW7R1Ohr.js → error-panel-BqJy7htp.js} +1 -1
- package/dist/assets/{file-explorer-panel-Dqodb_BD.js → file-explorer-panel-T78K2mhI.js} +1 -1
- package/dist/assets/{file-icons-B1JtCN2e.js → file-icons-DUEFtaqk.js} +1 -1
- package/dist/assets/{floating-outline-wGcVRNZu.js → floating-outline-L6NC-sSl.js} +1 -1
- package/dist/assets/{focus-COroLbWe.js → focus-BTk8fi9t.js} +1 -1
- package/dist/assets/{form-BfwTaK_n.js → form-D0jBoXOL.js} +1 -1
- package/dist/assets/{home-page-B8SPyTFn.js → home-page-B79oM4YL.js} +1 -1
- package/dist/assets/{hooks-Dbwh4P5s.js → hooks-C1JamGaP.js} +1 -1
- package/dist/assets/{html-to-image-DB5sfuws.js → html-to-image-BJNmIfR_.js} +1 -1
- package/dist/assets/{index-CStLWKuK.js → index-f36_4Wqc.js} +3 -3
- package/dist/assets/index-pG6JIIR-.css +2 -0
- package/dist/assets/{kiosk-mode-tHwBN3rS.js → kiosk-mode-DObJuod3.js} +1 -1
- package/dist/assets/{layout-Dh9ESpra.js → layout-CURagHSL.js} +3 -3
- package/dist/assets/{logs-panel-DZSPhsIs.js → logs-panel-6wZKPXbW.js} +1 -1
- package/dist/assets/{markdown-renderer-BnUV17Tg.js → markdown-renderer-Bhg3x2dD.js} +1 -1
- package/dist/assets/{name-cell-input-BZQLfDw0.js → name-cell-input-lIZhjdfv.js} +1 -1
- package/dist/assets/{outline-panel-C4q1Ql1i.js → outline-panel-5qkCPv_h.js} +1 -1
- package/dist/assets/{packages-panel-D9p8Tiee.js → packages-panel-PygqATjl.js} +1 -1
- package/dist/assets/{panels-BuZeq6Ss.js → panels-Cmkyo_Ic.js} +1 -1
- package/dist/assets/{process-output-czqgvDia.js → process-output-CnW6OJhK.js} +1 -1
- package/dist/assets/{radio-group-BHzskOrm.js → radio-group-DkjQgwSt.js} +1 -1
- package/dist/assets/{readonly-python-code-u31O1EoO.js → readonly-python-code-CQ2k62cK.js} +1 -1
- package/dist/assets/{reveal-component-DGLXS6XO.js → reveal-component-bk9gf4uY.js} +1 -1
- package/dist/assets/{run-page-DzBzKkQc.js → run-page-BPJqsadV.js} +1 -1
- package/dist/assets/{scratchpad-panel-B9M3Lvza.js → scratchpad-panel-M7BhoesO.js} +1 -1
- package/dist/assets/{session-panel-D3HEtbSO.js → session-panel-DedYL518.js} +1 -1
- package/dist/assets/{snippets-panel-BxEqEAeR.js → snippets-panel-BwG5R102.js} +1 -1
- package/dist/assets/{state-D9_BpRuU.js → state-Ba2SVwFW.js} +1 -1
- package/dist/assets/{state-NqzCpbZn.js → state-BmbZU1Ii.js} +1 -1
- package/dist/assets/{textarea-By_oENlk.js → textarea-DqCLSCio.js} +1 -1
- package/dist/assets/{tracing-D3RHMNJS.js → tracing-eVEFFaeS.js} +1 -1
- package/dist/assets/{tracing-panel-DHbxfRgn.js → tracing-panel-8wrZPouc.js} +2 -2
- package/dist/assets/{useCellActionButton-JqNWxCAc.js → useCellActionButton-qqJPqBNt.js} +1 -1
- package/dist/assets/{useDeleteCell-DhTEQpE6.js → useDeleteCell-CIjjkrUZ.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-BeLaV_28.js → useDependencyPanelTab-DCLj8N8-.js} +1 -1
- package/dist/assets/{useNotebookActions-BhbjfNqU.js → useNotebookActions-DFRxa9MH.js} +1 -1
- package/dist/assets/{useRunCells-DeA7yeHJ.js → useRunCells-CjBIWw0W.js} +1 -1
- package/dist/assets/{useSplitCell-DWx-q9BJ.js → useSplitCell-DrwP_UaG.js} +1 -1
- package/dist/index.html +23 -23
- package/package.json +1 -1
- package/src/components/editor/output/MarimoErrorOutput.tsx +103 -25
- package/src/components/editor/output/MarimoTracebackOutput.tsx +24 -36
- package/src/core/codemirror/cells/traceback-decorations.ts +1 -1
- package/src/css/app/Cell.css +0 -1
- package/dist/assets/MarimoErrorOutput-BXSRPZqF.js +0 -7
- package/dist/assets/index-Cn0RBoFD.css +0 -2
package/dist/index.html
CHANGED
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
<marimo-server-token data-token="{{ server_token }}" hidden></marimo-server-token>
|
|
67
67
|
<!-- /TODO -->
|
|
68
68
|
<title>{{ title }}</title>
|
|
69
|
-
<script type="module" crossorigin src="./assets/index-
|
|
69
|
+
<script type="module" crossorigin src="./assets/index-f36_4Wqc.js"></script>
|
|
70
70
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-BPPi7vOr.js">
|
|
71
71
|
<link rel="modulepreload" crossorigin href="./assets/chunk-LvLJmgfZ.js">
|
|
72
72
|
<link rel="modulepreload" crossorigin href="./assets/react-Bj1aDYRI.js">
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
<link rel="modulepreload" crossorigin href="./assets/debounce-DhnxH9Rh.js">
|
|
134
134
|
<link rel="modulepreload" crossorigin href="./assets/database-zap-kIkTfzTX.js">
|
|
135
135
|
<link rel="modulepreload" crossorigin href="./assets/main-B0OX4z33.js">
|
|
136
|
-
<link rel="modulepreload" crossorigin href="./assets/cells-
|
|
136
|
+
<link rel="modulepreload" crossorigin href="./assets/cells-DfBJ0VnJ.js">
|
|
137
137
|
<link rel="modulepreload" crossorigin href="./assets/ErrorBoundary-DyYDV0HI.js">
|
|
138
138
|
<link rel="modulepreload" crossorigin href="./assets/kbd-CTUAEnEx.js">
|
|
139
139
|
<link rel="modulepreload" crossorigin href="./assets/useInstallPackage-DUF4IRRI.js">
|
|
@@ -147,35 +147,35 @@
|
|
|
147
147
|
<link rel="modulepreload" crossorigin href="./assets/usePress-DQ_tAz5W.js">
|
|
148
148
|
<link rel="modulepreload" crossorigin href="./assets/input-C3Hrdlqq.js">
|
|
149
149
|
<link rel="modulepreload" crossorigin href="./assets/ImperativeModal-B3Th7k4R.js">
|
|
150
|
-
<link rel="modulepreload" crossorigin href="./assets/cell-link-
|
|
150
|
+
<link rel="modulepreload" crossorigin href="./assets/cell-link-xmpxJpC6.js">
|
|
151
151
|
<link rel="modulepreload" crossorigin href="./assets/multi-map-CUuNtzHt.js">
|
|
152
152
|
<link rel="modulepreload" crossorigin href="./assets/alert-yTS3WpF4.js">
|
|
153
153
|
<link rel="modulepreload" crossorigin href="./assets/chevron-right-CG5QYXYk.js">
|
|
154
154
|
<link rel="modulepreload" crossorigin href="./assets/dropdown-menu-CR7cnzLX.js">
|
|
155
155
|
<link rel="modulepreload" crossorigin href="./assets/links-D1JoyKTt.js">
|
|
156
|
-
<link rel="modulepreload" crossorigin href="./assets/useRunCells-
|
|
156
|
+
<link rel="modulepreload" crossorigin href="./assets/useRunCells-CjBIWw0W.js">
|
|
157
157
|
<link rel="modulepreload" crossorigin href="./assets/copy-LK56fFow.js">
|
|
158
158
|
<link rel="modulepreload" crossorigin href="./assets/copy-BwrPA9zQ.js">
|
|
159
159
|
<link rel="modulepreload" crossorigin href="./assets/copy-icon-OjtDb4gO.js">
|
|
160
|
-
<link rel="modulepreload" crossorigin href="./assets/RenderHTML-
|
|
161
|
-
<link rel="modulepreload" crossorigin href="./assets/datasource-
|
|
162
|
-
<link rel="modulepreload" crossorigin href="./assets/state-
|
|
160
|
+
<link rel="modulepreload" crossorigin href="./assets/RenderHTML-ozbWHhKy.js">
|
|
161
|
+
<link rel="modulepreload" crossorigin href="./assets/datasource-D1itEHCP.js">
|
|
162
|
+
<link rel="modulepreload" crossorigin href="./assets/state-BmbZU1Ii.js">
|
|
163
163
|
<link rel="modulepreload" crossorigin href="./assets/package-Tv6ztuzw.js">
|
|
164
164
|
<link rel="modulepreload" crossorigin href="./assets/sparkles-lWUAsPhp.js">
|
|
165
|
-
<link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-
|
|
165
|
+
<link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-BrtF-EJX.js">
|
|
166
166
|
<link rel="modulepreload" crossorigin href="./assets/spinner-Bhir8k53.js">
|
|
167
|
-
<link rel="modulepreload" crossorigin href="./assets/html-to-image-
|
|
168
|
-
<link rel="modulepreload" crossorigin href="./assets/focus-
|
|
167
|
+
<link rel="modulepreload" crossorigin href="./assets/html-to-image-BJNmIfR_.js">
|
|
168
|
+
<link rel="modulepreload" crossorigin href="./assets/focus-BTk8fi9t.js">
|
|
169
169
|
<link rel="modulepreload" crossorigin href="./assets/useAsyncData-bgszE9F0.js">
|
|
170
170
|
<link rel="modulepreload" crossorigin href="./assets/LazyAnyLanguageCodeMirror-DFv3yT20.js">
|
|
171
171
|
<link rel="modulepreload" crossorigin href="./assets/micromark-factory-space-BygYYKhs.js">
|
|
172
172
|
<link rel="modulepreload" crossorigin href="./assets/chunk-5FQGJX7Z-BzXnQz5s.js">
|
|
173
|
-
<link rel="modulepreload" crossorigin href="./assets/markdown-renderer-
|
|
173
|
+
<link rel="modulepreload" crossorigin href="./assets/markdown-renderer-Bhg3x2dD.js">
|
|
174
174
|
<link rel="modulepreload" crossorigin href="./assets/command-KARR7KMq.js">
|
|
175
175
|
<link rel="modulepreload" crossorigin href="./assets/field-zLmMOSA4.js">
|
|
176
176
|
<link rel="modulepreload" crossorigin href="./assets/popover-Bz_0Vkyf.js">
|
|
177
177
|
<link rel="modulepreload" crossorigin href="./assets/errors-vr57w7Ul.js">
|
|
178
|
-
<link rel="modulepreload" crossorigin href="./assets/download-
|
|
178
|
+
<link rel="modulepreload" crossorigin href="./assets/download-BQQnYuPC.js">
|
|
179
179
|
<link rel="modulepreload" crossorigin href="./assets/table-BGPSHfig.js">
|
|
180
180
|
<link rel="modulepreload" crossorigin href="./assets/useIframeCapabilities-CcI1zSdn.js">
|
|
181
181
|
<link rel="modulepreload" crossorigin href="./assets/error-banner-LdWZDbqd.js">
|
|
@@ -196,25 +196,25 @@
|
|
|
196
196
|
<link rel="modulepreload" crossorigin href="./assets/plus-BgB18UzY.js">
|
|
197
197
|
<link rel="modulepreload" crossorigin href="./assets/trash-2-rVklqqFF.js">
|
|
198
198
|
<link rel="modulepreload" crossorigin href="./assets/react-resizable-panels.browser.esm-CV8-hvjx.js">
|
|
199
|
-
<link rel="modulepreload" crossorigin href="./assets/JsonOutput-
|
|
199
|
+
<link rel="modulepreload" crossorigin href="./assets/JsonOutput-BEIaEFVx.js">
|
|
200
200
|
<link rel="modulepreload" crossorigin href="./assets/chart-no-axes-column-nqk474t8.js">
|
|
201
201
|
<link rel="modulepreload" crossorigin href="./assets/square-function-uY_yJr5g.js">
|
|
202
202
|
<link rel="modulepreload" crossorigin href="./assets/spec-CPQR_o92.js">
|
|
203
203
|
<link rel="modulepreload" crossorigin href="./assets/ellipsis-vertical-CkwWkOQL.js">
|
|
204
204
|
<link rel="modulepreload" crossorigin href="./assets/refresh-cw-DHwG4Mac.js">
|
|
205
205
|
<link rel="modulepreload" crossorigin href="./assets/tree-actions-BM_EJr3E.js">
|
|
206
|
-
<link rel="modulepreload" crossorigin href="./assets/components-
|
|
207
|
-
<link rel="modulepreload" crossorigin href="./assets/column-preview-
|
|
206
|
+
<link rel="modulepreload" crossorigin href="./assets/components-DptWjGr1.js">
|
|
207
|
+
<link rel="modulepreload" crossorigin href="./assets/column-preview-B0fkY_W8.js">
|
|
208
208
|
<link rel="modulepreload" crossorigin href="./assets/icons-Ol38nIbL.js">
|
|
209
|
-
<link rel="modulepreload" crossorigin href="./assets/radio-group-
|
|
210
|
-
<link rel="modulepreload" crossorigin href="./assets/floating-outline-
|
|
209
|
+
<link rel="modulepreload" crossorigin href="./assets/radio-group-DkjQgwSt.js">
|
|
210
|
+
<link rel="modulepreload" crossorigin href="./assets/floating-outline-L6NC-sSl.js">
|
|
211
211
|
<link rel="modulepreload" crossorigin href="./assets/objectWithoutPropertiesLoose-DfWeGRFv.js">
|
|
212
212
|
<link rel="modulepreload" crossorigin href="./assets/esm-CqWdmSnV.js">
|
|
213
|
-
<link rel="modulepreload" crossorigin href="./assets/readonly-python-code-
|
|
213
|
+
<link rel="modulepreload" crossorigin href="./assets/readonly-python-code-CQ2k62cK.js">
|
|
214
214
|
<link rel="modulepreload" crossorigin href="./assets/file-headphone-BrQspHac.js">
|
|
215
215
|
<link rel="modulepreload" crossorigin href="./assets/file-BrdxGLRX.js">
|
|
216
216
|
<link rel="modulepreload" crossorigin href="./assets/image-DQHXdEQn.js">
|
|
217
|
-
<link rel="modulepreload" crossorigin href="./assets/file-icons-
|
|
217
|
+
<link rel="modulepreload" crossorigin href="./assets/file-icons-DUEFtaqk.js">
|
|
218
218
|
<link rel="modulepreload" crossorigin href="./assets/switch-C8Pev-_F.js">
|
|
219
219
|
<link rel="modulepreload" crossorigin href="./assets/events-CPoJAfgx.js">
|
|
220
220
|
<link rel="modulepreload" crossorigin href="./assets/globals-DggqXXLE.js">
|
|
@@ -223,11 +223,11 @@
|
|
|
223
223
|
<link rel="modulepreload" crossorigin href="./assets/memoize-Tp7rARFe.js">
|
|
224
224
|
<link rel="modulepreload" crossorigin href="./assets/get-C-qh_et5.js">
|
|
225
225
|
<link rel="modulepreload" crossorigin href="./assets/_baseSet-CxV9N1bc.js">
|
|
226
|
-
<link rel="modulepreload" crossorigin href="./assets/state-
|
|
226
|
+
<link rel="modulepreload" crossorigin href="./assets/state-Ba2SVwFW.js">
|
|
227
227
|
<link rel="modulepreload" crossorigin href="./assets/label-xHqFtfdz.js">
|
|
228
|
-
<link rel="modulepreload" crossorigin href="./assets/textarea-
|
|
228
|
+
<link rel="modulepreload" crossorigin href="./assets/textarea-DqCLSCio.js">
|
|
229
229
|
<link rel="modulepreload" crossorigin href="./assets/refresh-ccw-C-n2VFP5.js">
|
|
230
|
-
<link rel="modulepreload" crossorigin href="./assets/form-
|
|
230
|
+
<link rel="modulepreload" crossorigin href="./assets/form-D0jBoXOL.js">
|
|
231
231
|
<link rel="modulepreload" crossorigin href="./assets/renderShortcut-U2SzoZCS.js">
|
|
232
232
|
<link rel="modulepreload" crossorigin href="./assets/useBoolean-DRITaoFR.js">
|
|
233
233
|
<link rel="modulepreload" crossorigin href="./assets/useDeepCompareMemoize-zUHU--0D.js">
|
|
@@ -248,7 +248,7 @@
|
|
|
248
248
|
<link rel="stylesheet" crossorigin href="./assets/cells-jmgGt1lS.css">
|
|
249
249
|
<link rel="stylesheet" crossorigin href="./assets/markdown-renderer-DdDKmWlR.css">
|
|
250
250
|
<link rel="stylesheet" crossorigin href="./assets/JsonOutput-B7vuddcd.css">
|
|
251
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
251
|
+
<link rel="stylesheet" crossorigin href="./assets/index-pG6JIIR-.css">
|
|
252
252
|
</head>
|
|
253
253
|
<body>
|
|
254
254
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
+
import { useAtomValue } from "jotai";
|
|
3
4
|
import {
|
|
5
|
+
ChevronDown,
|
|
6
|
+
ChevronRight,
|
|
7
|
+
InfoIcon,
|
|
4
8
|
NotebookPenIcon,
|
|
5
9
|
PackageIcon,
|
|
6
10
|
SquareArrowOutUpRightIcon,
|
|
7
11
|
TerminalIcon,
|
|
8
12
|
} from "lucide-react";
|
|
9
|
-
import { Fragment, type JSX } from "react";
|
|
13
|
+
import { Fragment, type JSX, useState } from "react";
|
|
10
14
|
import {
|
|
11
15
|
Accordion,
|
|
12
16
|
AccordionContent,
|
|
@@ -16,7 +20,9 @@ import {
|
|
|
16
20
|
import { Button } from "@/components/ui/button";
|
|
17
21
|
import { Kbd } from "@/components/ui/kbd";
|
|
18
22
|
import { ExternalLink } from "@/components/ui/links";
|
|
23
|
+
import { Tooltip } from "@/components/ui/tooltip";
|
|
19
24
|
import type { CellId } from "@/core/cells/ids";
|
|
25
|
+
import { resolvedMarimoConfigAtom } from "@/core/config/config";
|
|
20
26
|
import { renderHTML } from "@/plugins/core/RenderHTML";
|
|
21
27
|
import { splitMangledLocals } from "@/utils/local-variables";
|
|
22
28
|
import type { MarimoError } from "../../../core/kernel/messages";
|
|
@@ -29,6 +35,39 @@ import { MangledSegments } from "../errors/mangled-local-chip";
|
|
|
29
35
|
import { CellLinkError } from "../links/cell-link";
|
|
30
36
|
import { processTextForUrls } from "./console/text-rendering";
|
|
31
37
|
|
|
38
|
+
const CollapsibleTraceback = ({
|
|
39
|
+
traceback,
|
|
40
|
+
}: {
|
|
41
|
+
traceback: string;
|
|
42
|
+
}): JSX.Element => {
|
|
43
|
+
const [isOpen, setIsOpen] = useState(true);
|
|
44
|
+
return (
|
|
45
|
+
<div className="mt-2">
|
|
46
|
+
<button
|
|
47
|
+
type="button"
|
|
48
|
+
onClick={() => setIsOpen(!isOpen)}
|
|
49
|
+
aria-expanded={isOpen}
|
|
50
|
+
aria-label={isOpen ? "Collapse traceback" : "Expand traceback"}
|
|
51
|
+
className="flex items-center gap-1 text-muted-foreground/70 hover:text-muted-foreground transition-colors"
|
|
52
|
+
>
|
|
53
|
+
{isOpen ? (
|
|
54
|
+
<ChevronDown className="h-3 w-3" />
|
|
55
|
+
) : (
|
|
56
|
+
<ChevronRight className="h-3 w-3" />
|
|
57
|
+
)}
|
|
58
|
+
<span className="text-[0.6875rem] uppercase tracking-wider">
|
|
59
|
+
Traceback
|
|
60
|
+
</span>
|
|
61
|
+
</button>
|
|
62
|
+
{isOpen && (
|
|
63
|
+
<div className="font-code text-sm mt-1 p-3 bg-muted rounded border overflow-auto max-h-[50vh] cursor-text select-text">
|
|
64
|
+
{renderHTML({ html: traceback })}
|
|
65
|
+
</div>
|
|
66
|
+
)}
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
};
|
|
70
|
+
|
|
32
71
|
const Tip = (props: {
|
|
33
72
|
title?: string;
|
|
34
73
|
className?: string;
|
|
@@ -37,10 +76,13 @@ const Tip = (props: {
|
|
|
37
76
|
return (
|
|
38
77
|
<Accordion type="single" collapsible={true} className={props.className}>
|
|
39
78
|
<AccordionItem value="item-1" className="text-muted-foreground">
|
|
40
|
-
<AccordionTrigger className="pt-2 pb-
|
|
79
|
+
<AccordionTrigger className="pt-2 pb-0 font-normal">
|
|
41
80
|
{props.title ?? "Tip"}
|
|
42
81
|
</AccordionTrigger>
|
|
43
|
-
<AccordionContent
|
|
82
|
+
<AccordionContent
|
|
83
|
+
className="mr-24 text-[0.84375rem]"
|
|
84
|
+
wrapperClassName="pt-0 pb-2"
|
|
85
|
+
>
|
|
44
86
|
{props.children}
|
|
45
87
|
</AccordionContent>
|
|
46
88
|
</AccordionItem>
|
|
@@ -63,10 +105,21 @@ export const MarimoErrorOutput = ({
|
|
|
63
105
|
className,
|
|
64
106
|
}: Props): JSX.Element => {
|
|
65
107
|
const chromeActions = useChromeActions();
|
|
66
|
-
|
|
67
|
-
|
|
108
|
+
// The console area (where tracebacks are shown) sits below the cell editor.
|
|
109
|
+
// When cell outputs are also displayed below the editor, the traceback is
|
|
110
|
+
// already adjacent, so the "See the console area" hint is redundant. It is
|
|
111
|
+
// only helpful when outputs are displayed above the editor.
|
|
112
|
+
const showConsoleHint =
|
|
113
|
+
useAtomValue(resolvedMarimoConfigAtom).display.cell_output === "above";
|
|
114
|
+
|
|
115
|
+
let titleContents: string | null =
|
|
116
|
+
"This cell wasn't run because it has errors";
|
|
68
117
|
let alertVariant: "destructive" | "default" = "destructive";
|
|
69
118
|
let titleColor = "text-error";
|
|
119
|
+
// A small muted overline shown above the title for static errors, where
|
|
120
|
+
// the cell genuinely never executes. These errors have no separate title:
|
|
121
|
+
// the body text already describes them, so the overline carries the status.
|
|
122
|
+
let statusOverline: string | null = null;
|
|
70
123
|
const liStyle = "my-0.5 ml-8 text-muted-foreground/40";
|
|
71
124
|
|
|
72
125
|
// Check for certain error types to adjust title and appearance
|
|
@@ -77,7 +130,6 @@ export const MarimoErrorOutput = ({
|
|
|
77
130
|
} else if (errors.some((e) => e.type === "ancestor-prevented")) {
|
|
78
131
|
titleContents = "Ancestor prevented from running";
|
|
79
132
|
alertVariant = "default";
|
|
80
|
-
titleColor = "text-muted-foreground";
|
|
81
133
|
titleColor = "text-secondary-foreground";
|
|
82
134
|
} else if (errors.some((e) => e.type === "ancestor-stopped")) {
|
|
83
135
|
titleContents = "Ancestor stopped";
|
|
@@ -85,6 +137,19 @@ export const MarimoErrorOutput = ({
|
|
|
85
137
|
titleColor = "text-secondary-foreground";
|
|
86
138
|
} else if (errors.some((e) => e.type === "sql-error")) {
|
|
87
139
|
titleContents = "SQL error";
|
|
140
|
+
} else if (
|
|
141
|
+
errors.some(
|
|
142
|
+
(e) =>
|
|
143
|
+
e.type === "multiple-defs" ||
|
|
144
|
+
e.type === "cycle" ||
|
|
145
|
+
e.type === "setup-refs" ||
|
|
146
|
+
e.type === "import-star",
|
|
147
|
+
)
|
|
148
|
+
) {
|
|
149
|
+
// Static errors: the body text describes the problem, so there is no
|
|
150
|
+
// separate title — only the status overline.
|
|
151
|
+
titleContents = null;
|
|
152
|
+
statusOverline = "Cell not run";
|
|
88
153
|
} else {
|
|
89
154
|
// Check for exception type
|
|
90
155
|
const exceptionError = errors.find((e) => e.type === "exception");
|
|
@@ -475,9 +540,11 @@ export const MarimoErrorOutput = ({
|
|
|
475
540
|
</ExternalLink>
|
|
476
541
|
).
|
|
477
542
|
</p>
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
543
|
+
{showConsoleHint && (
|
|
544
|
+
<div className="text-muted-foreground mt-2">
|
|
545
|
+
See the console area for a traceback.
|
|
546
|
+
</div>
|
|
547
|
+
)}
|
|
481
548
|
</div>
|
|
482
549
|
</li>
|
|
483
550
|
);
|
|
@@ -492,13 +559,13 @@ export const MarimoErrorOutput = ({
|
|
|
492
559
|
{processTextForUrls(error.msg, `exception-${idx}`)}
|
|
493
560
|
</p>
|
|
494
561
|
{"traceback" in error && error.traceback ? (
|
|
495
|
-
<
|
|
496
|
-
{renderHTML({ html: error.traceback })}
|
|
497
|
-
</div>
|
|
562
|
+
<CollapsibleTraceback traceback={error.traceback} />
|
|
498
563
|
) : (
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
564
|
+
showConsoleHint && (
|
|
565
|
+
<div className="text-muted-foreground mt-2">
|
|
566
|
+
See the console area for a traceback.
|
|
567
|
+
</div>
|
|
568
|
+
)
|
|
502
569
|
)}
|
|
503
570
|
</div>
|
|
504
571
|
) : (
|
|
@@ -506,9 +573,7 @@ export const MarimoErrorOutput = ({
|
|
|
506
573
|
{processTextForUrls(error.msg, `exception-${idx}`)}
|
|
507
574
|
<CellLinkError cellId={error.raising_cell} />
|
|
508
575
|
{"traceback" in error && error.traceback && (
|
|
509
|
-
<
|
|
510
|
-
{renderHTML({ html: error.traceback })}
|
|
511
|
-
</div>
|
|
576
|
+
<CollapsibleTraceback traceback={error.traceback} />
|
|
512
577
|
)}
|
|
513
578
|
</div>
|
|
514
579
|
)}
|
|
@@ -633,23 +698,36 @@ export const MarimoErrorOutput = ({
|
|
|
633
698
|
};
|
|
634
699
|
|
|
635
700
|
const title = (
|
|
636
|
-
<
|
|
637
|
-
{
|
|
638
|
-
|
|
701
|
+
<div className="space-y-0.5">
|
|
702
|
+
{statusOverline && (
|
|
703
|
+
<div className="flex items-center gap-1 font-code text-[0.6875rem] uppercase tracking-wider text-muted-foreground/70">
|
|
704
|
+
{statusOverline}
|
|
705
|
+
<Tooltip
|
|
706
|
+
content="marimo didn't run this cell because it detected an error."
|
|
707
|
+
delayDuration={200}
|
|
708
|
+
>
|
|
709
|
+
<InfoIcon className="size-3 cursor-help" />
|
|
710
|
+
</Tooltip>
|
|
711
|
+
</div>
|
|
712
|
+
)}
|
|
713
|
+
{titleContents && (
|
|
714
|
+
<AlertTitle className={`font-code font-medium ${titleColor}`}>
|
|
715
|
+
{titleContents}
|
|
716
|
+
</AlertTitle>
|
|
717
|
+
)}
|
|
718
|
+
</div>
|
|
639
719
|
);
|
|
640
720
|
|
|
641
721
|
return (
|
|
642
722
|
<Alert
|
|
643
723
|
variant={alertVariant}
|
|
644
724
|
className={cn(
|
|
645
|
-
"border-none font-code text-sm text-[0.84375rem]
|
|
725
|
+
"border-none font-code text-sm text-[0.84375rem] p-0 text-muted-foreground normal [&:has(svg)]:pl-0 space-y-2",
|
|
646
726
|
className,
|
|
647
727
|
)}
|
|
648
728
|
>
|
|
649
729
|
{title}
|
|
650
|
-
<div>
|
|
651
|
-
<div className="flex flex-col gap-8">{renderMessages()}</div>
|
|
652
|
-
</div>
|
|
730
|
+
<div className="flex flex-col gap-4">{renderMessages()}</div>
|
|
653
731
|
</Alert>
|
|
654
732
|
);
|
|
655
733
|
};
|
|
@@ -5,17 +5,13 @@ import { useAtomValue } from "jotai";
|
|
|
5
5
|
import {
|
|
6
6
|
BugPlayIcon,
|
|
7
7
|
ChevronDown,
|
|
8
|
+
ChevronRight,
|
|
8
9
|
CopyIcon,
|
|
9
10
|
ExternalLinkIcon,
|
|
10
11
|
MessageCircleIcon,
|
|
11
12
|
SearchIcon,
|
|
12
13
|
} from "lucide-react";
|
|
13
14
|
import { type JSX, useState } from "react";
|
|
14
|
-
import {
|
|
15
|
-
Accordion,
|
|
16
|
-
AccordionContent,
|
|
17
|
-
AccordionItem,
|
|
18
|
-
} from "@/components/ui/accordion";
|
|
19
15
|
import { Button } from "@/components/ui/button";
|
|
20
16
|
import {
|
|
21
17
|
DropdownMenu,
|
|
@@ -45,7 +41,6 @@ import {
|
|
|
45
41
|
extractAllTracebackInfo,
|
|
46
42
|
getTracebackInfo,
|
|
47
43
|
} from "@/utils/traceback";
|
|
48
|
-
import { cn } from "../../../utils/cn";
|
|
49
44
|
import { AIFixButton } from "../errors/auto-fix";
|
|
50
45
|
import { MangledSegments } from "../errors/mangled-local-chip";
|
|
51
46
|
import { CellLinkTraceback } from "../links/cell-link";
|
|
@@ -57,8 +52,6 @@ interface Props {
|
|
|
57
52
|
onRefactorWithAI?: OnRefactorWithAI;
|
|
58
53
|
}
|
|
59
54
|
|
|
60
|
-
const KEY = "item";
|
|
61
|
-
|
|
62
55
|
/**
|
|
63
56
|
* List of errors due to violations of Marimo semantics.
|
|
64
57
|
*/
|
|
@@ -75,7 +68,6 @@ export const MarimoTracebackOutput = ({
|
|
|
75
68
|
replaceMangledLocal,
|
|
76
69
|
],
|
|
77
70
|
});
|
|
78
|
-
const [expanded, setExpanded] = useState(true);
|
|
79
71
|
|
|
80
72
|
const lastTracebackLine = lastLine(traceback);
|
|
81
73
|
const aiEnabled = useAtomValue(aiEnabledAtom);
|
|
@@ -95,6 +87,8 @@ export const MarimoTracebackOutput = ({
|
|
|
95
87
|
|
|
96
88
|
const showSearch = !isStaticNotebook();
|
|
97
89
|
|
|
90
|
+
const [isOpen, setIsOpen] = useState(true);
|
|
91
|
+
|
|
98
92
|
const handleRefactorWithAI = (triggerImmediately: boolean) => {
|
|
99
93
|
onRefactorWithAI?.({
|
|
100
94
|
prompt: `My code gives the following error:\n\n${lastTracebackLine}`,
|
|
@@ -102,35 +96,29 @@ export const MarimoTracebackOutput = ({
|
|
|
102
96
|
});
|
|
103
97
|
};
|
|
104
98
|
|
|
105
|
-
const [error, errorMessage] = lastTracebackLine.split(":", 2);
|
|
106
|
-
const errorMessageSegments = errorMessage
|
|
107
|
-
? splitMangledLocals(errorMessage)
|
|
108
|
-
: [];
|
|
109
|
-
|
|
110
99
|
return (
|
|
111
100
|
<div className="flex flex-col gap-2 min-w-full w-fit">
|
|
112
|
-
<
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
</Accordion>
|
|
101
|
+
<button
|
|
102
|
+
type="button"
|
|
103
|
+
onClick={() => setIsOpen(!isOpen)}
|
|
104
|
+
aria-expanded={isOpen}
|
|
105
|
+
aria-label={isOpen ? "Collapse traceback" : "Expand traceback"}
|
|
106
|
+
className="self-start flex items-center gap-1 pt-2 text-muted-foreground/70 hover:text-muted-foreground transition-colors"
|
|
107
|
+
>
|
|
108
|
+
{isOpen ? (
|
|
109
|
+
<ChevronDown className="h-3 w-3" />
|
|
110
|
+
) : (
|
|
111
|
+
<ChevronRight className="h-3 w-3" />
|
|
112
|
+
)}
|
|
113
|
+
<span className="text-[0.6875rem] uppercase tracking-wider">
|
|
114
|
+
Traceback
|
|
115
|
+
</span>
|
|
116
|
+
</button>
|
|
117
|
+
{isOpen && (
|
|
118
|
+
<div className="text-muted-foreground pr-4 text-xs overflow-auto">
|
|
119
|
+
{htmlTraceback}
|
|
120
|
+
</div>
|
|
121
|
+
)}
|
|
134
122
|
<div className="flex gap-2">
|
|
135
123
|
{showAIFix && (
|
|
136
124
|
<AIFixButton
|
|
@@ -147,7 +147,7 @@ export function errorLineHighlighter(
|
|
|
147
147
|
backgroundColor: "color-mix(in srgb, var(--red-4) 40%, transparent)",
|
|
148
148
|
},
|
|
149
149
|
"&.cm-focused .cm-error-line.cm-activeLine": {
|
|
150
|
-
backgroundColor: "color-mix(in srgb, var(--red-
|
|
150
|
+
backgroundColor: "color-mix(in srgb, var(--red-5) 40%, transparent)",
|
|
151
151
|
},
|
|
152
152
|
}),
|
|
153
153
|
];
|
package/src/css/app/Cell.css
CHANGED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{s as K}from"./chunk-LvLJmgfZ.js";import{d as _e,f as $e,l as Fe,u as Te}from"./useEvent-D91BmmQi.js";import{t as Ce}from"./react-Bj1aDYRI.js";import{D as Ae,Dn as Se,Fn as Ee,Oi as Me,b as ze,fr as qe,hi as X,mi as Pe,rt as Le}from"./cells-WW455pbI.js";import{t as T}from"./compiler-runtime-B3qBwwSJ.js";import{t as We}from"./invariant-BUdrueMv.js";import{r as De}from"./utils-Wvjk_Y4h.js";import{t as Y}from"./cn-DCUzRj2J.js";import{t as Be}from"./jsx-runtime-BqBOg78p.js";import{a as Oe,i as Qe,n as Re,r as Ve}from"./multi-map-CUuNtzHt.js";import{a as He,p as Ue,r as Ge,t as Je}from"./dropdown-menu-CR7cnzLX.js";import{t as V}from"./tooltip-DTV9tlSr.js";import{r as Z,t as _}from"./button-BbCh-29a.js";import{t as ee}from"./createLucideIcon-D5guW7EU.js";import{r as Ke}from"./x-C-6liIBr.js";import{t as Xe}from"./package-Tv6ztuzw.js";import{t as Ye}from"./sparkles-lWUAsPhp.js";import{c as te,n as Ze}from"./datasource-CrDfHWto.js";import{a as et}from"./dist-CPczQFlJ.js";import{t as re}from"./RenderHTML-IGRZU9wj.js";import{t as se}from"./kbd-CTUAEnEx.js";import{t as C}from"./links-D1JoyKTt.js";import{r as tt,t as rt}from"./alert-yTS3WpF4.js";import{o as st,t as nt}from"./useInstallPackage-DUF4IRRI.js";import{n as lt}from"./state-NqzCpbZn.js";import{n as b}from"./cell-link-VlbhstGP.js";var A=ee("square-arrow-out-up-right",[["path",{d:"M21 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h6",key:"y09zxi"}],["path",{d:"m21 3-9 9",key:"mpx6sq"}],["path",{d:"M15 3h6v6",key:"1q9fwt"}]]),ne=ee("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]),le=String.raw`_cell_([^\W_][\w-]*?)(_\w*)`,ie=String.raw`(?<!_)${le}`;`${le}`;var it=new RegExp(ie),H=new RegExp(ie,"g");function ae(t){let e=[];H.lastIndex=0;let s=0,n=H.exec(t);for(;n!==null;)n.index>s&&e.push(t.slice(s,n.index)),e.push({cellId:n[1],name:n[2]}),s=n.index+n[0].length,n=H.exec(t);return s<t.length&&e.push(t.slice(s)),e}function at(t){return it.test(t)}function ot(t){let e=null,s=t.cursor();do s.name==="ExpressionStatement"&&(e=s.node);while(s.next());return e}function ct(t){let e=t.split(`
|
|
2
|
-
`),s=" ",n=ot(et.parse(t));if(!n)return["def _():",...U(e,s),`${s}return`,"","","_()"].join(`
|
|
3
|
-
`);let i=t.slice(0,n.from).trim(),l=t.slice(n.from).trim(),a=i.split(`
|
|
4
|
-
`),o=l.split(`
|
|
5
|
-
`);return["def _():",...U(a,s),`${s}return ${o[0]}`,...U(o.slice(1),s),"","","_()"].join(`
|
|
6
|
-
`)}function U(t,e){if(t.length===1&&t[0]==="")return[];let s=[];for(let n of t)n===""?s.push(""):s.push(e+n);return s}function mt(t,e){var s;if(t.type==="multiple-defs")return[{title:"Fix: Wrap in a function",description:"Make this cell's variables local by wrapping the cell in a function.",fixType:"manual",onFix:async n=>{We(n.editor,"Editor is null");let i=ct(n.editor.state.doc.toString());n.editor.dispatch({changes:{from:0,to:n.editor.state.doc.length,insert:i}})}}];if(t.type==="exception"&&t.exception_type==="NameError"){let n=(s=t.msg.match(/name '(.+)' is not defined/))==null?void 0:s[1];if(!n||!(n in oe))return[];let i=dt(n);return[{title:`Fix: Add '${i}'`,description:"Add a new cell for the missing import",fixType:"manual",onFix:async l=>{l.addCodeBelow(i)}}]}return t.type==="sql-error"&&e.aiEnabled?[{title:"Fix with AI",description:"Fix the SQL statement",fixType:"ai",onFix:async n=>{var a;let i=Ze(n.cellId),l=`Fix the SQL statement: ${t.msg}.`;i&&(l+=`
|
|
7
|
-
Database schema: ${i}`),(a=n.aiFix)==null||a.setAiCompletionCell({cellId:n.cellId,initialPrompt:l,triggerImmediately:n.aiFix.triggerFix})}}]:[]}function dt(t){let e=oe[t];return e===t?`import ${e}`:`import ${e} as ${t}`}var oe={mo:"marimo",alt:"altair",bokeh:"bokeh",dask:"dask",np:"numpy",pd:"pandas",pl:"polars",plotly:"plotly",plt:"matplotlib.pyplot",px:"plotly.express",scipy:"scipy",sk:"sklearn",sns:"seaborn",stats:"scipy.stats",tf:"tensorflow",torch:"torch",xr:"xarray",dt:"datetime",json:"json",math:"math",os:"os",re:"re",sys:"sys"},pt=T(),ut=Me("marimo:ai-autofix-mode","autofix",Ee);function xt(){let t=(0,pt.c)(3),[e,s]=Fe(ut),n;return t[0]!==e||t[1]!==s?(n={fixMode:e,setFixMode:s},t[0]=e,t[1]=s,t[2]=n):n=t[2],n}var G=T(),r=K(Be(),1);const N=t=>{let e=(0,G.c)(21),{errors:s,cellId:n,className:i}=t,l=$e(),{createNewCell:a}=Ae(),o=Te(De),c;if(e[0]!==o||e[1]!==s){let h;e[3]===o?h=e[4]:(h=y=>mt(y,{aiEnabled:o}),e[3]=o,e[4]=h),c=s.flatMap(h),e[0]=o,e[1]=s,e[2]=c}else c=e[2];let d=c,p=_e(lt);if(d.length===0)return null;let m=d[0],f;e[5]!==n||e[6]!==a||e[7]!==m||e[8]!==p||e[9]!==l?(f=h=>{var w;let y=(w=l.get(ze).cellHandles[n].current)==null?void 0:w.editorView;m.onFix({addCodeBelow:$=>{a({cellId:n,autoFocus:!1,before:!1,code:$})},editor:y,cellId:n,aiFix:{setAiCompletionCell:p,triggerFix:h}}),y==null||y.focus()},e[5]=n,e[6]=a,e[7]=m,e[8]=p,e[9]=l,e[10]=f):f=e[10];let u=f,j;e[11]===i?j=e[12]:(j=Y("my-2",i),e[11]=i,e[12]=j);let x;e[13]!==m.description||e[14]!==m.fixType||e[15]!==m.title||e[16]!==u?(x=m.fixType==="ai"?(0,r.jsx)(ue,{tooltip:m.description,openPrompt:()=>u(!1),applyAutofix:()=>u(!0)}):(0,r.jsx)(V,{content:m.description,align:"start",children:(0,r.jsxs)(_,{size:"xs",variant:"outline",className:"font-normal",onClick:()=>u(!1),children:[(0,r.jsx)(te,{className:"h-3 w-3 mr-2"}),m.title]})}),e[13]=m.description,e[14]=m.fixType,e[15]=m.title,e[16]=u,e[17]=x):x=e[17];let g;return e[18]!==j||e[19]!==x?(g=(0,r.jsx)("div",{className:j,children:x}),e[18]=j,e[19]=x,e[20]=g):g=e[20],g};var ce=Ye,me=te,de="Suggest a prompt",pe="Fix with AI";const ue=t=>{let e=(0,G.c)(21),{tooltip:s,openPrompt:n,applyAutofix:i}=t,{fixMode:l,setFixMode:a}=xt(),o=l==="prompt"?n:i,c;e[0]===l?c=e[1]:(c=l==="prompt"?(0,r.jsx)(ce,{className:"h-3 w-3 mr-2 mb-0.5"}):(0,r.jsx)(me,{className:"h-3 w-3 mr-2 mb-0.5"}),e[0]=l,e[1]=c);let d=l==="prompt"?de:pe,p;e[2]!==o||e[3]!==c||e[4]!==d?(p=(0,r.jsxs)(_,{size:"xs",variant:"outline",className:"font-normal rounded-r-none border-r-0",onClick:o,children:[c,d]}),e[2]=o,e[3]=c,e[4]=d,e[5]=p):p=e[5];let m;e[6]!==p||e[7]!==s?(m=(0,r.jsx)(V,{content:s,align:"start",children:p}),e[6]=p,e[7]=s,e[8]=m):m=e[8];let f;e[9]===Symbol.for("react.memo_cache_sentinel")?(f=(0,r.jsx)(Ue,{asChild:!0,children:(0,r.jsx)(_,{size:"xs",variant:"outline",className:"rounded-l-none px-2","aria-label":"Fix options",children:(0,r.jsx)(Ke,{className:"h-3 w-3"})})}),e[9]=f):f=e[9];let u;e[10]!==l||e[11]!==a?(u=()=>{a(l==="prompt"?"autofix":"prompt")},e[10]=l,e[11]=a,e[12]=u):u=e[12];let j=l==="prompt"?"autofix":"prompt",x;e[13]===j?x=e[14]:(x=(0,r.jsx)(ht,{mode:j}),e[13]=j,e[14]=x);let g;e[15]!==u||e[16]!==x?(g=(0,r.jsxs)(Je,{children:[f,(0,r.jsx)(Ge,{align:"end",className:"w-56",children:(0,r.jsx)(He,{className:"flex items-center gap-2",onClick:u,children:x})})]}),e[15]=u,e[16]=x,e[17]=g):g=e[17];let h;return e[18]!==g||e[19]!==m?(h=(0,r.jsxs)("div",{className:"flex",children:[m,g]}),e[18]=g,e[19]=m,e[20]=h):h=e[20],h};var ht=t=>{let e=(0,G.c)(12),{mode:s}=t,n;e[0]===s?n=e[1]:(n=s==="prompt"?(0,r.jsx)(ce,{className:"h-4 w-4"}):(0,r.jsx)(me,{className:"h-4 w-4"}),e[0]=s,e[1]=n);let i=n,l=s==="prompt"?de:pe,a=s==="prompt"?"Edit the prompt before applying":"Apply AI fixes automatically",o;e[2]===l?o=e[3]:(o=(0,r.jsx)("span",{className:"font-medium",children:l}),e[2]=l,e[3]=o);let c;e[4]===a?c=e[5]:(c=(0,r.jsx)("span",{className:"text-xs text-muted-foreground",children:a}),e[4]=a,e[5]=c);let d;e[6]!==o||e[7]!==c?(d=(0,r.jsxs)("div",{className:"flex flex-col",children:[o,c]}),e[6]=o,e[7]=c,e[8]=d):d=e[8];let p;return e[9]!==i||e[10]!==d?(p=(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[i,d]}),e[9]=i,e[10]=d,e[11]=p):p=e[11],p},xe=T();const ft=t=>{let e=(0,xe.c)(12),{local:s}=t,n;e[0]===s.name?n=e[1]:(n=(0,r.jsx)("span",{className:"font-code",children:s.name}),e[0]=s.name,e[1]=n);let i;e[2]===s.cellId?i=e[3]:(i=(0,r.jsx)(b,{cellId:s.cellId}),e[2]=s.cellId,e[3]=i);let l;e[4]!==n||e[5]!==i?(l=(0,r.jsxs)("div",{className:"max-w-xs",children:["Local variable ",n," in cell"," ",i,"."]}),e[4]=n,e[5]=i,e[6]=l):l=e[6];let a=l,o;e[7]===s.name?o=e[8]:(o=(0,r.jsx)("span",{className:"font-code cursor-help",children:s.name}),e[7]=s.name,e[8]=o);let c;return e[9]!==o||e[10]!==a?(c=(0,r.jsx)(V,{content:a,children:o}),e[9]=o,e[10]=a,e[11]=c):c=e[11],c},he=t=>{let e=(0,xe.c)(4),{segments:s}=t,n;e[0]===s?n=e[1]:(n=s.map(jt),e[0]=s,e[1]=n);let i;return e[2]===n?i=e[3]:(i=(0,r.jsx)(r.Fragment,{children:n}),e[2]=n,e[3]=i),i};function jt(t,e){return typeof t=="string"?(0,r.jsx)("span",{children:t},e):(0,r.jsx)(ft,{local:t},e)}var fe=/(https?:\/\/\S+)/,gt=/\.(png|jpe?g|gif|webp|svg|ico)(\?.*)?$/i,je=/^data:image\//i,yt=["avatars.githubusercontent.com"];function ge(t){return je.test(t)?[{type:"image",url:t}]:t.split(fe).filter(e=>e!=="").map(e=>fe.test(e)?gt.test(e)||je.test(e)||yt.some(s=>e.includes(s))?{type:"image",url:e}:{type:"url",url:e}:{type:"text",value:e})}var ye=T(),P=K(Ce(),1),vt=new Le;const J=t=>{let e=RegExp("\x1B\\[[0-9;]*m","g");return t.replaceAll(e,"")};var ve=/(pip\s+install|uv\s+add|uv\s+pip\s+install)\s+/gi;function Nt(t){ve.lastIndex=0;let e=ve.exec(t);if(!e)return null;let s=e.index+e[0].length,n=t.slice(s).split(/\s+/),i="",l=0;for(let o of n){let c=o.trim();if(!c)continue;if(c.startsWith("-")){l+=c.length+1;continue}let d=c.match(/^[\w,.[\]-]+/);if(d){i=d[0];break}break}if(!i)return null;let a=s+l+i.length;return{package:i,endIndex:a}}function k(t,e=""){if(!t)return null;if(!/https?:\/\//.test(t))return t;let s=ge(t);return s.length===1&&s[0].type==="text"?t:(0,r.jsx)(r.Fragment,{children:s.map((n,i)=>{let l=e?`${e}-${i}`:i;if(n.type==="url"){let a=J(n.url);return(0,r.jsx)("a",{href:a,target:"_blank",rel:"noopener noreferrer",onClick:Z.stopPropagation(),className:"text-link hover:underline",children:a},l)}if(n.type==="image"){let a=J(n.url);return(0,r.jsx)("a",{href:a,target:"_blank",rel:"noopener noreferrer",onClick:Z.stopPropagation(),className:"text-link hover:underline",children:a},l)}return(0,r.jsx)(P.Fragment,{children:n.value},l)})})}var bt=t=>{let e=(0,ye.c)(6),{packages:s,children:n}=t,{handleInstallPackages:i}=nt(),l;e[0]!==i||e[1]!==s?(l=o=>{i(s),o.preventDefault()},e[0]=i,e[1]=s,e[2]=l):l=e[2];let a;return e[3]!==n||e[4]!==l?(a=(0,r.jsx)("button",{onClick:l,className:"text-link hover:underline",type:"button",children:n}),e[3]=n,e[4]=l,e[5]=a):a=e[5],a};const wt=t=>{if(!(t instanceof X.Text))return;let e=J(t.data);if(!/(pip\s+install|uv\s+add|uv\s+pip\s+install)/i.test(e))return;let s=[],n=/(pip\s+install|uv\s+add|uv\s+pip\s+install)\s+/gi,i;for(;(i=n.exec(e))!==null;){let o=i.index,c=Nt(e.slice(o));c&&s.push({match:i,result:c})}if(s.length===0)return;let l=[],a=0;if(s.forEach((o,c)=>{let{match:d,result:p}=o,m=d.index,f=m+p.endIndex;if(a<m){let j=e.slice(a,m);l.push((0,r.jsx)(P.Fragment,{children:k(j,`before-${c}`)},`before-${c}`))}let u=e.slice(m,f);l.push((0,r.jsx)(bt,{packages:[p.package],children:u},`install-${c}`)),a=f}),a<e.length){let o=e.slice(a);l.push((0,r.jsx)(P.Fragment,{children:k(o,"after")},"after"))}return(0,r.jsx)(r.Fragment,{children:l})},kt=t=>{if(!(t instanceof X.Text))return;let e=t.data;if(!/https?:\/\//.test(e))return;let s=k(e);if(typeof s!="string")return(0,r.jsx)(r.Fragment,{children:s})},It=(...t)=>e=>{for(let s of t){let n=s(e);if(n!==void 0)return n}},_t=(t,e)=>(0,r.jsx)("span",{children:Pe(vt.ansi_to_html(t),{replace:s=>e(s)})}),$t=t=>{let e=(0,ye.c)(4),{text:s}=t,n;e[0]===s?n=e[1]:(n=_t(s,It(wt,kt)),e[0]=s,e[1]=n);let i=n,l;return e[2]===i?l=e[3]:(l=(0,r.jsx)(r.Fragment,{children:i}),e[2]=i,e[3]=l),l};var Ne=T(),I=t=>{let e=(0,Ne.c)(10),s=t.title??"Tip",n;e[0]===s?n=e[1]:(n=(0,r.jsx)(Oe,{className:"pt-2 pb-2 font-normal",children:s}),e[0]=s,e[1]=n);let i;e[2]===t.children?i=e[3]:(i=(0,r.jsx)(Ve,{className:"mr-24 text-[0.84375rem]",children:t.children}),e[2]=t.children,e[3]=i);let l;e[4]!==n||e[5]!==i?(l=(0,r.jsxs)(Qe,{value:"item-1",className:"text-muted-foreground",children:[n,i]}),e[4]=n,e[5]=i,e[6]=l):l=e[6];let a;return e[7]!==t.className||e[8]!==l?(a=(0,r.jsx)(Re,{type:"single",collapsible:!0,className:t.className,children:l}),e[7]=t.className,e[8]=l,e[9]=a):a=e[9],a};const Ft=t=>{let e=(0,Ne.c)(31),{errors:s,cellId:n,className:i}=t,l=Se(),a="This cell wasn't run because it has errors",o="destructive",c="text-error";if(s.some(Tt))a="Interrupted";else if(s.some(Ct))a="An internal error occurred";else if(s.some(At))a="Ancestor prevented from running",o="default",c="text-secondary-foreground";else if(s.some(St))a="Ancestor stopped",o="default",c="text-secondary-foreground";else if(s.some(Et))a="SQL error";else{let h;e[0]===s?h=e[1]:(h=s.find(Mt),e[0]=s,e[1]=h);let y=h;y&&"exception_type"in y&&(a=y.exception_type)}let d,p,m,f,u,j;if(e[2]!==o||e[3]!==n||e[4]!==l||e[5]!==i||e[6]!==s||e[7]!==c||e[8]!==a){let h=s.filter(zt),y=s.filter(qt),w=s.filter(Pt),$=s.filter(Lt),L=s.filter(Wt),S=s.filter(Dt),E=s.filter(Bt),W=s.filter(Ot),D=s.filter(Qt),B=s.filter(Rt),F=s.filter(Vt),O=s.filter(Ht),Q=s.filter(Ut),M;e[15]===l?M=e[16]:(M=()=>{l.openApplication("scratchpad")},e[15]=l,e[16]=M);let be=M,we=()=>{let v=[];if(F.length>0||O.length>0){let q=F.some(Gt),Ie=!q&&F.some(Jt);v.push((0,r.jsxs)("div",{children:[F.map(Kt),O.map(Xt),q&&(0,r.jsxs)(_,{size:"xs",variant:"outline",className:"mt-2 font-normal",onClick:()=>st(l),children:[(0,r.jsx)(Xe,{className:"h-3.5 w-3.5 mr-1.5 mb-0.5"}),(0,r.jsx)("span",{children:"Open package manager"})]}),Ie&&(0,r.jsxs)(_,{size:"xs",variant:"outline",className:"mt-2 font-normal",onClick:()=>l.openApplication("terminal"),children:[(0,r.jsx)(ne,{className:"h-3.5 w-3.5 mr-1.5"}),(0,r.jsx)("span",{children:"Open terminal"})]}),n&&(0,r.jsx)(N,{errors:[...F,...O],cellId:n})]},"syntax-unknown"))}if(h.length>0&&v.push((0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-muted-foreground font-medium",children:"The setup cell cannot be run because it has references."}),(0,r.jsx)("ul",{className:"list-disc",children:h.flatMap(Yt)}),n&&(0,r.jsx)(N,{errors:h,cellId:n}),(0,r.jsxs)(I,{title:"Why can't the setup cell have references?",className:"mb-2",children:[(0,r.jsx)("p",{className:"pb-2",children:"The setup cell contains logic that must be run before any other cell runs, including top-level imports used by top-level functions. For this reason, it can't refer to other cells' variables."}),(0,r.jsx)("p",{className:"py-2",children:"Try simplifying the setup cell to only contain only necessary variables."}),(0,r.jsxs)("p",{className:"py-2",children:[(0,r.jsxs)(C,{href:"https://links.marimo.app/errors-setup",children:["Learn more at our docs"," ",(0,r.jsx)(A,{size:"0.75rem",className:"inline"})]}),"."]})]})]},"setup-refs")),y.length>0&&v.push((0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-muted-foreground font-medium",children:"This cell is in a cycle."}),(0,r.jsx)("ul",{className:"list-disc",children:y.flatMap(Zt)}),n&&(0,r.jsx)(N,{errors:y,cellId:n}),(0,r.jsxs)(I,{title:"What are cycles and how do I resolve them?",className:"mb-2",children:[(0,r.jsx)("p",{className:"pb-2",children:"An example of a cycle is if one cell declares a variable 'a' and reads 'b', and another cell declares 'b' and and reads 'a'. Cycles like this make it impossible for marimo to know how to run your cells, and generally suggest that your code has a bug."}),(0,r.jsx)("p",{className:"py-2",children:"Try merging these cells into a single cell to eliminate the cycle."}),(0,r.jsxs)("p",{className:"py-2",children:[(0,r.jsxs)(C,{href:"https://links.marimo.app/errors-cycles",children:["Learn more at our docs"," ",(0,r.jsx)(A,{size:"0.75rem",className:"inline"})]}),"."]})]})]},"cycle")),w.length>0){let q=w[0].name;v.push((0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-muted-foreground font-medium",children:"This cell redefines variables from other cells."}),w.map(tr),n&&(0,r.jsx)(N,{errors:w,cellId:n}),(0,r.jsxs)(I,{title:"Why can't I redefine variables?",children:[(0,r.jsx)("p",{className:"pb-2",children:"marimo requires that each variable is defined in just one cell. This constraint enables reactive and reproducible execution, arbitrary cell reordering, seamless UI elements, execution as a script, and more."}),(0,r.jsxs)("p",{className:"py-2",children:["Try merging this cell with the mentioned cells or wrapping it in a function. Alternatively, prefix variables with an underscore (e.g., ",(0,r.jsxs)(se,{className:"inline",children:["_",q]}),"). to make them private to this cell."]}),(0,r.jsxs)("p",{className:"py-2",children:[(0,r.jsxs)(C,{href:"https://links.marimo.app/errors-multiple-definitions",children:["Learn more at our docs"," ",(0,r.jsx)(A,{size:"0.75rem",className:"inline"})]}),"."]})]}),(0,r.jsx)(I,{title:"Need a scratchpad?",children:(0,r.jsxs)("div",{className:"flex flex-row gap-2 items-center",children:[(0,r.jsxs)(_,{size:"xs",variant:"link",className:"my-2 font-normal mx-0 px-0",onClick:be,children:[(0,r.jsx)(qe,{className:"h-3"}),(0,r.jsx)("span",{children:"Try the scratchpad"})]}),(0,r.jsx)("span",{children:"to experiment without restrictions on variable names."})]})})]},"multiple-defs"))}return $.length>0&&v.push((0,r.jsxs)("div",{children:[$.map(rr),n&&(0,r.jsx)(N,{errors:$,cellId:n}),(0,r.jsxs)(I,{title:"Why can't I use `import *`?",children:[(0,r.jsx)("p",{className:"pb-2",children:"Star imports are incompatible with marimo's git-friendly file format and reproducible reactive execution."}),(0,r.jsx)("p",{className:"py-2",children:"marimo's Python file format stores code in functions, so notebooks can be imported as regular Python modules without executing all their code. But Python disallows `import *` everywhere except at the top-level of a module."}),(0,r.jsx)("p",{className:"py-2",children:"Star imports would also silently add names to globals, which would be incompatible with reactive execution."}),(0,r.jsxs)("p",{className:"py-2",children:[(0,r.jsxs)(C,{href:"https://links.marimo.app/errors-import-star",children:["Learn more at our docs"," ",(0,r.jsx)(A,{size:"0.75rem",className:"inline"})]}),"."]})]})]},"import-star")),L.length>0&&v.push((0,r.jsxs)("div",{children:[L.map(sr),n&&(0,r.jsx)(N,{errors:L,cellId:n})]},"interruption")),S.length>0&&v.push((0,r.jsxs)("ul",{children:[S.map(nr),S.some(lr)&&(0,r.jsx)(I,{children:"Fix the error in the mentioned cells, or handle the exceptions with try/except blocks."}),n&&(0,r.jsx)(N,{errors:S,cellId:n})]},"exception")),E.length>0&&v.push((0,r.jsxs)("ul",{children:[E.map(ir),n&&(0,r.jsx)(N,{errors:E,cellId:n}),(0,r.jsx)(I,{children:E.some(ar)?"Ensure that the referenced cells define the required variables, or turn off strict execution.":"Something is wrong with your declarations. Fix any discrepancies, or turn off strict execution."})]},"strict-exception")),W.length>0&&v.push((0,r.jsxs)("div",{children:[W.map(or),n&&(0,r.jsx)(N,{errors:W,cellId:n})]},"internal")),D.length>0&&v.push((0,r.jsxs)("div",{children:[D.map(cr),n&&(0,r.jsx)(N,{errors:D,cellId:n})]},"ancestor-prevented")),B.length>0&&v.push((0,r.jsxs)("div",{children:[B.map(mr),n&&(0,r.jsx)(N,{errors:B,cellId:n})]},"ancestor-stopped")),Q.length>0&&v.push((0,r.jsxs)("div",{children:[Q.map(dr),n&&(0,r.jsx)(N,{errors:Q,cellId:n,className:"mt-2.5"})]},"sql-errors")),v},R=`font-code font-medium tracking-wide ${c}`,z;e[17]!==R||e[18]!==a?(z=(0,r.jsx)(tt,{className:R,children:a}),e[17]=R,e[18]=a,e[19]=z):z=e[19];let ke=z;d=rt,f=o,e[20]===i?u=e[21]:(u=Y("border-none font-code text-sm text-[0.84375rem] px-0 text-muted-foreground normal [&:has(svg)]:pl-0 space-y-4",i),e[20]=i,e[21]=u),j=ke,p="flex flex-col gap-8",m=we(),e[2]=o,e[3]=n,e[4]=l,e[5]=i,e[6]=s,e[7]=c,e[8]=a,e[9]=d,e[10]=p,e[11]=m,e[12]=f,e[13]=u,e[14]=j}else d=e[9],p=e[10],m=e[11],f=e[12],u=e[13],j=e[14];let x;e[22]!==p||e[23]!==m?(x=(0,r.jsx)("div",{children:(0,r.jsx)("div",{className:p,children:m})}),e[22]=p,e[23]=m,e[24]=x):x=e[24];let g;return e[25]!==d||e[26]!==f||e[27]!==u||e[28]!==j||e[29]!==x?(g=(0,r.jsxs)(d,{variant:f,className:u,children:[j,x]}),e[25]=d,e[26]=f,e[27]=u,e[28]=j,e[29]=x,e[30]=g):g=e[30],g};function Tt(t){return t.type==="interruption"}function Ct(t){return t.type==="internal"}function At(t){return t.type==="ancestor-prevented"}function St(t){return t.type==="ancestor-stopped"}function Et(t){return t.type==="sql-error"}function Mt(t){return t.type==="exception"}function zt(t){return t.type==="setup-refs"}function qt(t){return t.type==="cycle"}function Pt(t){return t.type==="multiple-defs"}function Lt(t){return t.type==="import-star"}function Wt(t){return t.type==="interruption"}function Dt(t){return t.type==="exception"}function Bt(t){return t.type==="strict-exception"}function Ot(t){return t.type==="internal"}function Qt(t){return t.type==="ancestor-prevented"}function Rt(t){return t.type==="ancestor-stopped"}function Vt(t){return t.type==="syntax"}function Ht(t){return t.type==="unknown"}function Ut(t){return t.type==="sql-error"}function Gt(t){return t.msg.includes("!pip")}function Jt(t){return t.msg.includes("use os.subprocess")}function Kt(t,e){return(0,r.jsx)("pre",{children:k(t.msg,`syntax-${e}`)},`syntax-${e}`)}function Xt(t,e){return(0,r.jsx)("pre",{children:k(t.msg,`unknown-${e}`)},`unknown-${e}`)}function Yt(t,e){return t.edges_with_vars.map((s,n)=>(0,r.jsxs)("li",{className:"my-0.5 ml-8 text-muted-foreground/40",children:[(0,r.jsx)(b,{cellId:s[0]}),(0,r.jsxs)("span",{className:"text-muted-foreground",children:[": "," ",s[1].length===1?s[1][0]:s[1].join(", ")]})]},`setup-refs-${e}-${n}`))}function Zt(t,e){return t.edges_with_vars.map((s,n)=>(0,r.jsxs)("li",{className:"my-0.5 ml-8 text-muted-foreground/40",children:[(0,r.jsx)(b,{cellId:s[0]}),(0,r.jsxs)("span",{className:"text-muted-foreground",children:[" -> ",s[1].length===1?s[1][0]:s[1].join(", ")," -> "]}),(0,r.jsx)(b,{cellId:s[2]})]},`cycle-${e}-${n}`))}function er(t,e){return(0,r.jsx)("li",{className:"my-0.5 ml-8 text-muted-foreground/40",children:(0,r.jsx)(b,{cellId:t})},`cell-${e}`)}function tr(t,e){return(0,r.jsxs)(P.Fragment,{children:[(0,r.jsx)("p",{className:"text-muted-foreground mt-2",children:`'${t.name}' was also defined by:`}),(0,r.jsx)("ul",{className:"list-disc",children:t.cells.map(er)})]},`multiple-defs-${e}`)}function rr(t,e){return(0,r.jsx)("p",{className:"text-muted-foreground",children:t.msg},`import-star-${e}`)}function sr(t,e){return(0,r.jsx)("p",{children:"This cell was interrupted and needs to be re-run."},`interruption-${e}`)}function nr(t,e){return t.exception_type==="NameError"&&t.msg.startsWith("name 'mo'")?(0,r.jsx)("li",{className:"my-2",children:(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-muted-foreground",children:"name 'mo' is not defined."}),(0,r.jsxs)("p",{className:"text-muted-foreground mt-2",children:["The marimo module (imported as"," ",(0,r.jsx)(se,{className:"inline",children:"mo"}),") is required for Markdown, SQL, and UI elements."]})]})},`exception-${e}`):t.exception_type==="NameError"&&t.msg.startsWith("name '_")?(0,r.jsx)("li",{className:"my-2",children:(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-muted-foreground",children:(0,r.jsx)(he,{segments:ae(t.msg)})}),(0,r.jsxs)("p",{className:"text-muted-foreground mt-2",children:["Variables prefixed with an underscore are local to a cell"," ","(",(0,r.jsxs)(C,{href:"https://links.marimo.app/local-variables",children:["docs"," ",(0,r.jsx)(A,{size:"0.75rem",className:"inline"})]}),")."]}),(0,r.jsx)("div",{className:"text-muted-foreground mt-2",children:"See the console area for a traceback."})]})},`exception-${e}`):(0,r.jsx)("li",{className:"my-2",children:t.raising_cell==null?(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-muted-foreground",children:k(t.msg,`exception-${e}`)}),"traceback"in t&&t.traceback?(0,r.jsx)("div",{className:"font-code text-sm mt-2 p-3 bg-muted rounded border overflow-auto max-h-[50vh] cursor-text select-text",children:re({html:t.traceback})}):(0,r.jsx)("div",{className:"text-muted-foreground mt-2",children:"See the console area for a traceback."})]}):(0,r.jsxs)("div",{children:[k(t.msg,`exception-${e}`),(0,r.jsx)(b,{cellId:t.raising_cell}),"traceback"in t&&t.traceback&&(0,r.jsx)("div",{className:"font-code text-sm mt-2 p-3 bg-muted rounded border overflow-auto max-h-[50vh] cursor-text select-text",children:re({html:t.traceback})})]})},`exception-${e}`)}function lr(t){return t.raising_cell!=null}function ir(t,e){return(0,r.jsx)("li",{className:"my-2",children:t.blamed_cell==null?(0,r.jsx)("p",{children:t.msg}):(0,r.jsxs)("div",{children:[t.msg,(0,r.jsx)(b,{cellId:t.blamed_cell})]})},`strict-exception-${e}`)}function ar(t){return t.blamed_cell!=null}function or(t,e){return(0,r.jsx)("p",{children:t.msg},`internal-${e}`)}function cr(t,e){return(0,r.jsxs)("div",{children:[t.msg,t.blamed_cell==null?(0,r.jsxs)("span",{children:["(",(0,r.jsx)(b,{cellId:t.raising_cell}),")"]}):(0,r.jsxs)("span",{children:["(",(0,r.jsx)(b,{cellId:t.raising_cell}),"\xA0blames\xA0",(0,r.jsx)(b,{cellId:t.blamed_cell}),")"]})]},`ancestor-prevented-${e}`)}function mr(t,e){return(0,r.jsxs)("div",{children:[t.msg,(0,r.jsx)(b,{cellId:t.raising_cell})]},`ancestor-stopped-${e}`)}function dr(t,e){return(0,r.jsx)("div",{className:"space-y-2 mt-2",children:(0,r.jsx)("p",{className:"text-muted-foreground whitespace-pre-wrap",children:t.msg})},`sql-error-${e}`)}export{ue as a,ne as c,he as i,$t as n,at as o,ge as r,ae as s,Ft as t};
|