@marimo-team/frontend 0.24.3-dev10 → 0.24.3-dev13
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-DXkwkuL9.js → CellStatus-LChlPuPv.js} +1 -1
- package/dist/assets/{JsonOutput-izmGhjov.js → JsonOutput-DCgOfk7t.js} +1 -1
- package/dist/assets/{MarimoErrorOutput-CdmP3ZHL.js → MarimoErrorOutput-DwGwWsxV.js} +1 -1
- package/dist/assets/{RenderHTML-DlYXvh8D.js → RenderHTML-B73ExmWb.js} +1 -1
- package/dist/assets/{RunButton-Bieadi9w.js → RunButton-iPopny2V.js} +1 -1
- package/dist/assets/{add-cell-with-ai-ZpV9L4qe.js → add-cell-with-ai-DkDJWJF6.js} +1 -1
- package/dist/assets/{add-connection-dialog-a8mkIeXa.js → add-connection-dialog-1fPdJRRj.js} +1 -1
- package/dist/assets/{agent-panel-rVtDSi07.js → agent-panel-0drx16i_.js} +1 -1
- package/dist/assets/{ai-model-dropdown-C8IztRe2.js → ai-model-dropdown-B3zoJxvO.js} +1 -1
- package/dist/assets/{app-config-button-DLr-6jwI.js → app-config-button-DlhlZpGg.js} +1 -1
- package/dist/assets/{blob-B2Qs47Zi.js → blob-B6ayJpoQ.js} +1 -1
- package/dist/assets/{cell-editor-3VpJI5EQ.js → cell-editor-DHWK9sPz.js} +6 -6
- package/dist/assets/{cell-link-DEXHmwy1.js → cell-link-B7ZVGcSl.js} +1 -1
- package/dist/assets/{cells--Hh9voS5.js → cells-CMLP1Dld.js} +2 -2
- package/dist/assets/{chat-display-DtQ0tOGK.js → chat-display-MSmOss6B.js} +1 -1
- package/dist/assets/{chat-panel-DLgUUTdo.js → chat-panel-g8moS06Y.js} +1 -1
- package/dist/assets/{chat-ui-DIXDoCsM.js → chat-ui-CBqyOE_p.js} +1 -1
- package/dist/assets/{column-preview-H8rmRiii.js → column-preview-oex3TMfq.js} +1 -1
- package/dist/assets/{command-palette-Pmg3QxZ0.js → command-palette-D0CXuYgO.js} +1 -1
- package/dist/assets/{common-CrhvbKbI.js → common-BN-k-WsU.js} +1 -1
- package/dist/assets/{components-rCVlCccf.js → components-BPyy3wXe.js} +1 -1
- package/dist/assets/{datasource-DgkQfSw3.js → datasource-DDYaCFxh.js} +1 -1
- package/dist/assets/{dependency-graph-panel-D1BZdQJH.js → dependency-graph-panel-XotpvJGU.js} +1 -1
- package/dist/assets/{documentation-panel-DzNGB1Zx.js → documentation-panel-pxfRAT4P.js} +1 -1
- package/dist/assets/{download-DtQweFN1.js → download-BRrPmrl5.js} +1 -1
- package/dist/assets/{edit-page-fb5fV9UA.js → edit-page-BopkEdmt.js} +4 -4
- package/dist/assets/{error-entries-CMsalXvZ.js → error-entries-Bc5lubx5.js} +1 -1
- package/dist/assets/{error-panel-D6kqFA9f.js → error-panel-n7jAw6zx.js} +1 -1
- package/dist/assets/{file-explorer-panel-D3APtOiy.js → file-explorer-panel-BOBUXkRd.js} +1 -1
- package/dist/assets/{file-name-input-CdDGwb85.js → file-name-input-Brf4MYj_.js} +1 -1
- package/dist/assets/{floating-outline-D2WpILR-.js → floating-outline-CG-zTB22.js} +1 -1
- package/dist/assets/{home-page-BXgJYrZ5.js → home-page-CB-Br4zp.js} +1 -1
- package/dist/assets/{index-B4Fq20-p.js → index-C2Qgy_xA.js} +6 -6
- package/dist/assets/{layout-VgriO3Ll.js → layout-YlSl0c7f.js} +3 -3
- package/dist/assets/{logs-panel-DsbX3K3h.js → logs-panel-Dpw-vNvJ.js} +1 -1
- package/dist/assets/{markdown-renderer-DD7ui8RW.js → markdown-renderer-C_dn-F0h.js} +1 -1
- package/dist/assets/{name-cell-input-EjA-eGvA.js → name-cell-input-DQ1AN_b1.js} +1 -1
- package/dist/assets/{outline-panel-DeDFCw9s.js → outline-panel-CANEwLJ7.js} +1 -1
- package/dist/assets/{packages-panel-B__MaP9u.js → packages-panel-l2uEMqBg.js} +1 -1
- package/dist/assets/{panel-accordion-state-CwLKISCL.js → panel-accordion-state-CJxJh72n.js} +1 -1
- package/dist/assets/{panels-c3iYYVuV.js → panels-CU5fmJJo.js} +1 -1
- package/dist/assets/{process-output-DQoLxPra.js → process-output-DTlZ_jDn.js} +1 -1
- package/dist/assets/{readonly-code-display-DuFy8860.js → readonly-code-display-DWORkymT.js} +1 -1
- package/dist/assets/{readonly-python-code-yR65TOiM.js → readonly-python-code-Cvz_-5Jh.js} +1 -1
- package/dist/assets/{reveal-component-CgskYNVn.js → reveal-component-B6FIsdxS.js} +1 -1
- package/dist/assets/{run-page-C_mciAdT.js → run-page-DpA2Hz2h.js} +1 -1
- package/dist/assets/{scratchpad-panel-Bj4yxnuS.js → scratchpad-panel-FahrbepP.js} +1 -1
- package/dist/assets/{session-panel-NQyDQouJ.js → session-panel-2w7efICk.js} +1 -1
- package/dist/assets/{skeleton-CUFHwpIk.js → skeleton-CLUBZ15q.js} +1 -1
- package/dist/assets/{snippets-panel-Bx2wFck8.js → snippets-panel-CvdCemOl.js} +1 -1
- package/dist/assets/{state-CdjswcRf.js → state-CJnYkzhz.js} +1 -1
- package/dist/assets/{state-CiPrV156.js → state-DuyHh3Fk.js} +1 -1
- package/dist/assets/{tracing-Qjfb3Qm1.js → tracing-CnQSHm2x.js} +1 -1
- package/dist/assets/{tracing-panel-Cj_-LD2X.js → tracing-panel-BZHx8nXa.js} +2 -2
- package/dist/assets/tree-actions-5rg4Zqxe.js +1 -0
- package/dist/assets/{useAddCell-Bvb-C_H5.js → useAddCell-4vmbxGw5.js} +1 -1
- package/dist/assets/{useCellActionButton-Df4qSnWR.js → useCellActionButton-BQY2nyr_.js} +1 -1
- package/dist/assets/{useDeleteCell-eNMTvg8D.js → useDeleteCell-CM1QzkEs.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-BusYWoB8.js → useDependencyPanelTab-BsALWNfv.js} +1 -1
- package/dist/assets/{useInstallPackage-ClaR_nYb.js → useInstallPackage-Cr0TevQm.js} +1 -1
- package/dist/assets/useNotebookActions-BxNtZieS.js +10 -0
- package/dist/assets/{useRunCells-D8B7UNsg.js → useRunCells-C2e26LhV.js} +1 -1
- package/dist/assets/{useSplitCell-Cy7fCcQW.js → useSplitCell-CJ8nGq_h.js} +1 -1
- package/dist/index.html +19 -19
- package/package.json +1 -1
- package/src/components/data-table/column-explorer-panel/column-explorer.tsx +2 -6
- package/src/components/editor/chrome/components/feedback-button.tsx +10 -9
- package/src/components/editor/code/__tests__/readonly-diff.test.tsx +65 -0
- package/src/components/editor/code/readonly-diff.tsx +1 -1
- package/src/components/editor/file-tree/__tests__/tree-actions.test.tsx +54 -0
- package/src/components/editor/file-tree/tree-actions.tsx +11 -14
- package/src/core/cells/pending-delete-service.ts +12 -16
- package/src/core/codemirror/language/__tests__/sql.test.ts +70 -2
- package/src/core/codemirror/language/languages/sql/sql.ts +16 -1
- package/src/core/datasets/__tests__/data-source.test.ts +2 -0
- package/src/core/datasets/data-source-connections.ts +15 -10
- package/src/plugins/layout/AccordionPlugin.tsx +7 -2
- package/src/plugins/layout/__test__/AccordionPlugin.test.tsx +66 -0
- package/dist/assets/tree-actions-CmY9PFuu.js +0 -1
- package/dist/assets/useNotebookActions-bWJW4dS_.js +0 -10
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { act, fireEvent, render, screen } from "@testing-library/react";
|
|
4
|
+
import type React from "react";
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
|
+
import { RefreshIconButton } from "../tree-actions";
|
|
7
|
+
|
|
8
|
+
vi.mock("@/components/ui/tooltip", () => ({
|
|
9
|
+
Tooltip: ({ children }: { children: React.ReactNode }) => children,
|
|
10
|
+
}));
|
|
11
|
+
|
|
12
|
+
describe("RefreshIconButton", () => {
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
vi.useFakeTimers();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
vi.useRealTimers();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it("spins for at least 500ms after a refresh completes", async () => {
|
|
22
|
+
const onClick = vi.fn().mockResolvedValue(undefined);
|
|
23
|
+
const { container } = render(<RefreshIconButton onClick={onClick} />);
|
|
24
|
+
|
|
25
|
+
fireEvent.click(screen.getByRole("button"));
|
|
26
|
+
|
|
27
|
+
expect(onClick).toHaveBeenCalledOnce();
|
|
28
|
+
expect(container.querySelector("svg")).toHaveClass("animate-[spin_0.5s]");
|
|
29
|
+
|
|
30
|
+
await act(async () => {
|
|
31
|
+
await vi.advanceTimersByTimeAsync(500);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
expect(container.querySelector("svg")).not.toHaveClass(
|
|
35
|
+
"animate-[spin_0.5s]",
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("uses the latest refresh callback after a rerender", async () => {
|
|
40
|
+
const initialOnClick = vi.fn().mockResolvedValue(undefined);
|
|
41
|
+
const updatedOnClick = vi.fn().mockResolvedValue(undefined);
|
|
42
|
+
const { rerender } = render(<RefreshIconButton onClick={initialOnClick} />);
|
|
43
|
+
|
|
44
|
+
rerender(<RefreshIconButton onClick={updatedOnClick} />);
|
|
45
|
+
fireEvent.click(screen.getByRole("button"));
|
|
46
|
+
|
|
47
|
+
expect(initialOnClick).not.toHaveBeenCalled();
|
|
48
|
+
expect(updatedOnClick).toHaveBeenCalledOnce();
|
|
49
|
+
|
|
50
|
+
await act(async () => {
|
|
51
|
+
await vi.advanceTimersByTimeAsync(500);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
MoreVerticalIcon,
|
|
8
8
|
RefreshCwIcon,
|
|
9
9
|
} from "lucide-react";
|
|
10
|
-
import React, {
|
|
10
|
+
import React, { useState } from "react";
|
|
11
11
|
import { Button, type ButtonProps } from "@/components/ui/button";
|
|
12
12
|
import { Tooltip } from "@/components/ui/tooltip";
|
|
13
13
|
import { cn } from "@/utils/cn";
|
|
@@ -41,19 +41,16 @@ export const RefreshIconButton: React.FC<{
|
|
|
41
41
|
}> = ({ onClick, tooltip = "Refresh", className, iconClassName }) => {
|
|
42
42
|
const [isSpinning, setIsSpinning] = useState(false);
|
|
43
43
|
|
|
44
|
-
const handleClick =
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
},
|
|
55
|
-
[onClick],
|
|
56
|
-
);
|
|
44
|
+
const handleClick = async (e: React.MouseEvent) => {
|
|
45
|
+
setIsSpinning(true);
|
|
46
|
+
// Artificially spin for 500ms to show the user that the button is working.
|
|
47
|
+
const minDelay = new Promise<void>((r) => setTimeout(r, 500));
|
|
48
|
+
try {
|
|
49
|
+
await Promise.all([onClick(e), minDelay]);
|
|
50
|
+
} finally {
|
|
51
|
+
setIsSpinning(false);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
57
54
|
|
|
58
55
|
const button = (
|
|
59
56
|
<Button
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
3
|
import { useAtomValue, useStore } from "jotai";
|
|
4
|
-
import { useMemo } from "react";
|
|
5
4
|
import {
|
|
6
5
|
useDeleteCellCallback,
|
|
7
6
|
useDeleteManyCellsCallback,
|
|
@@ -130,21 +129,18 @@ export function usePendingDeleteService() {
|
|
|
130
129
|
const { entries } = useAtomValue(pendingDeleteStateAtom);
|
|
131
130
|
const deleteCell = useDeleteCellCallback();
|
|
132
131
|
const deleteManyCells = useDeleteManyCellsCallback();
|
|
133
|
-
return
|
|
134
|
-
() =>
|
|
135
|
-
submit
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}),
|
|
146
|
-
[store, submit, clear, entries, deleteCell, deleteManyCells],
|
|
147
|
-
);
|
|
132
|
+
return {
|
|
133
|
+
submit: (cellIds: CellId[]) => {
|
|
134
|
+
submit({ cellIds, deleteCell, deleteManyCells, store });
|
|
135
|
+
},
|
|
136
|
+
clear,
|
|
137
|
+
get idle() {
|
|
138
|
+
return entries.size === 0;
|
|
139
|
+
},
|
|
140
|
+
get shouldConfirmDelete() {
|
|
141
|
+
return entries.size > 1;
|
|
142
|
+
},
|
|
143
|
+
};
|
|
148
144
|
}
|
|
149
145
|
|
|
150
146
|
export function usePendingDelete(cellId: CellId) {
|
|
@@ -17,6 +17,7 @@ import type {
|
|
|
17
17
|
import type { DataSourceConnection } from "@/core/datasets/data-source-connections";
|
|
18
18
|
import {
|
|
19
19
|
dataSourceConnectionsAtom,
|
|
20
|
+
exportedForTesting as dataSourceTesting,
|
|
20
21
|
setLatestEngineSelected,
|
|
21
22
|
} from "@/core/datasets/data-source-connections";
|
|
22
23
|
import { type ConnectionName, DUCKDB_ENGINE } from "@/core/datasets/engines";
|
|
@@ -550,8 +551,8 @@ _df = mo.sql(
|
|
|
550
551
|
const getLatestEngine = () =>
|
|
551
552
|
store.get(dataSourceConnectionsAtom).latestEngineSelected;
|
|
552
553
|
|
|
553
|
-
it("should
|
|
554
|
-
expect(getLatestEngine()).
|
|
554
|
+
it("should have no selected engine initially", () => {
|
|
555
|
+
expect(getLatestEngine()).toBeNull();
|
|
555
556
|
});
|
|
556
557
|
|
|
557
558
|
it("should persist the selected engine", () => {
|
|
@@ -622,6 +623,73 @@ _df = mo.sql(
|
|
|
622
623
|
});
|
|
623
624
|
|
|
624
625
|
describe("defaultCode", () => {
|
|
626
|
+
it("should prefer the newest usable connection until an engine is selected", () => {
|
|
627
|
+
const previousState = store.get(dataSourceConnectionsAtom);
|
|
628
|
+
const connection: DataSourceConnection = {
|
|
629
|
+
name: "first_connection" as ConnectionName,
|
|
630
|
+
source: "sqlite",
|
|
631
|
+
display_name: "SQLite",
|
|
632
|
+
dialect: "sqlite",
|
|
633
|
+
databases: [],
|
|
634
|
+
};
|
|
635
|
+
const newestConnection = {
|
|
636
|
+
...connection,
|
|
637
|
+
name: "newest_connection" as ConnectionName,
|
|
638
|
+
};
|
|
639
|
+
const icebergConnection = {
|
|
640
|
+
...connection,
|
|
641
|
+
name: "catalog" as ConnectionName,
|
|
642
|
+
source: "iceberg",
|
|
643
|
+
};
|
|
644
|
+
try {
|
|
645
|
+
store.set(dataSourceConnectionsAtom, {
|
|
646
|
+
latestEngineSelected: null,
|
|
647
|
+
connectionsMap: new Map(),
|
|
648
|
+
});
|
|
649
|
+
expect(adapter.defaultMetadata.engine).toBe(DUCKDB_ENGINE);
|
|
650
|
+
expect(adapter.defaultCode).toBe('_df = mo.sql(f"""SELECT * FROM """)');
|
|
651
|
+
|
|
652
|
+
store.set(dataSourceConnectionsAtom, {
|
|
653
|
+
latestEngineSelected: null,
|
|
654
|
+
connectionsMap: new Map([
|
|
655
|
+
[connection.name, connection],
|
|
656
|
+
[newestConnection.name, newestConnection],
|
|
657
|
+
[icebergConnection.name, icebergConnection],
|
|
658
|
+
[DUCKDB_ENGINE, { ...connection, name: DUCKDB_ENGINE }],
|
|
659
|
+
]),
|
|
660
|
+
});
|
|
661
|
+
expect(adapter.defaultMetadata.engine).toBe(newestConnection.name);
|
|
662
|
+
expect(adapter.defaultCode).toContain("engine=newest_connection");
|
|
663
|
+
expect(
|
|
664
|
+
store.get(dataSourceConnectionsAtom).latestEngineSelected,
|
|
665
|
+
).toBeNull();
|
|
666
|
+
|
|
667
|
+
const refreshConnection = (connection: DataSourceConnection) => {
|
|
668
|
+
store.set(
|
|
669
|
+
dataSourceConnectionsAtom,
|
|
670
|
+
dataSourceTesting.reducer(store.get(dataSourceConnectionsAtom), {
|
|
671
|
+
type: "addDataSourceConnection",
|
|
672
|
+
payload: { connections: [connection] },
|
|
673
|
+
}),
|
|
674
|
+
);
|
|
675
|
+
};
|
|
676
|
+
refreshConnection(connection);
|
|
677
|
+
expect(adapter.defaultMetadata.engine).toBe(connection.name);
|
|
678
|
+
expect(adapter.defaultCode).toContain("engine=first_connection");
|
|
679
|
+
|
|
680
|
+
setLatestEngineSelected(connection.name);
|
|
681
|
+
refreshConnection(newestConnection);
|
|
682
|
+
expect(adapter.defaultCode).toContain("engine=first_connection");
|
|
683
|
+
|
|
684
|
+
setLatestEngineSelected(DUCKDB_ENGINE);
|
|
685
|
+
refreshConnection(connection);
|
|
686
|
+
expect(adapter.defaultMetadata.engine).toBe(DUCKDB_ENGINE);
|
|
687
|
+
expect(adapter.defaultCode).toBe('_df = mo.sql(f"""SELECT * FROM """)');
|
|
688
|
+
} finally {
|
|
689
|
+
store.set(dataSourceConnectionsAtom, previousState);
|
|
690
|
+
}
|
|
691
|
+
});
|
|
692
|
+
|
|
625
693
|
it("should include engine in defaultCode when selected", () => {
|
|
626
694
|
const engine = "postgres_engine" as ConnectionName;
|
|
627
695
|
setLatestEngineSelected(engine);
|
|
@@ -76,7 +76,22 @@ export interface SQLLanguageAdapterMetadata extends SQLMetadata {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
function getLatestEngine(): ConnectionName {
|
|
79
|
-
|
|
79
|
+
const { latestEngineSelected, connectionsMap } = store.get(
|
|
80
|
+
dataSourceConnectionsAtom,
|
|
81
|
+
);
|
|
82
|
+
if (latestEngineSelected !== null) {
|
|
83
|
+
return latestEngineSelected;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Map insertion order prefers the most recently discovered connection.
|
|
87
|
+
const connections = [...connectionsMap.values()].reverse();
|
|
88
|
+
return (
|
|
89
|
+
connections.find(
|
|
90
|
+
(connection) =>
|
|
91
|
+
!INTERNAL_SQL_ENGINES.has(connection.name) &&
|
|
92
|
+
connection.source !== "iceberg",
|
|
93
|
+
)?.name ?? DUCKDB_ENGINE
|
|
94
|
+
);
|
|
80
95
|
}
|
|
81
96
|
|
|
82
97
|
/**
|
|
@@ -106,6 +106,7 @@ describe("data source connections", () => {
|
|
|
106
106
|
|
|
107
107
|
let newState = addConnection(connections, state);
|
|
108
108
|
expect(newState.connectionsMap.size).toBe(defaultConnSize + 2);
|
|
109
|
+
newState = { ...newState, latestEngineSelected: connections[0].name };
|
|
109
110
|
|
|
110
111
|
newState = reducer(newState, {
|
|
111
112
|
type: "removeDataSourceConnection",
|
|
@@ -113,6 +114,7 @@ describe("data source connections", () => {
|
|
|
113
114
|
});
|
|
114
115
|
expect(newState.connectionsMap.size).toBe(defaultConnSize + 1);
|
|
115
116
|
expect(newState.connectionsMap.has("conn2" as ConnectionName)).toBe(true);
|
|
117
|
+
expect(newState.latestEngineSelected).toBeNull();
|
|
116
118
|
});
|
|
117
119
|
|
|
118
120
|
it("can clear all connections", () => {
|
|
@@ -44,7 +44,8 @@ export interface DataSourceConnection extends Omit<
|
|
|
44
44
|
export type ConnectionsMap = ReadonlyMap<ConnectionName, DataSourceConnection>;
|
|
45
45
|
|
|
46
46
|
export interface DataSourceState {
|
|
47
|
-
|
|
47
|
+
// Null permits automatic selection; DuckDB can also be an explicit choice.
|
|
48
|
+
latestEngineSelected: ConnectionName | null;
|
|
48
49
|
connectionsMap: ConnectionsMap;
|
|
49
50
|
}
|
|
50
51
|
|
|
@@ -110,7 +111,7 @@ function tableSchemaPath(sqlTableContext: SQLTableContext): string[] {
|
|
|
110
111
|
|
|
111
112
|
function initialState(): DataSourceState {
|
|
112
113
|
return {
|
|
113
|
-
latestEngineSelected:
|
|
114
|
+
latestEngineSelected: null,
|
|
114
115
|
connectionsMap: initialConnections,
|
|
115
116
|
};
|
|
116
117
|
}
|
|
@@ -136,6 +137,8 @@ const {
|
|
|
136
137
|
// Backend will dedupe by connection name & keep the latest, so we use this as the key
|
|
137
138
|
const newMap = new Map(connectionsMap);
|
|
138
139
|
for (const conn of opts.connections) {
|
|
140
|
+
// Refresh insertion order so automatic selection follows discovery recency.
|
|
141
|
+
newMap.delete(conn.name);
|
|
139
142
|
newMap.set(conn.name, conn);
|
|
140
143
|
}
|
|
141
144
|
|
|
@@ -161,16 +164,17 @@ const {
|
|
|
161
164
|
}),
|
|
162
165
|
);
|
|
163
166
|
return {
|
|
164
|
-
//
|
|
165
|
-
latestEngineSelected:
|
|
166
|
-
|
|
167
|
-
|
|
167
|
+
// Allow automatic selection again when the selected connection disappears.
|
|
168
|
+
latestEngineSelected:
|
|
169
|
+
latestEngineSelected && newMap.has(latestEngineSelected)
|
|
170
|
+
? latestEngineSelected
|
|
171
|
+
: null,
|
|
168
172
|
connectionsMap: newMap,
|
|
169
173
|
};
|
|
170
174
|
},
|
|
171
175
|
|
|
172
176
|
clearDataSourceConnections: (): DataSourceState => ({
|
|
173
|
-
latestEngineSelected:
|
|
177
|
+
latestEngineSelected: null,
|
|
174
178
|
connectionsMap: new Map(),
|
|
175
179
|
}),
|
|
176
180
|
|
|
@@ -183,9 +187,10 @@ const {
|
|
|
183
187
|
const newMap = new Map(connectionsMap);
|
|
184
188
|
newMap.delete(connectionName);
|
|
185
189
|
return {
|
|
186
|
-
latestEngineSelected:
|
|
187
|
-
|
|
188
|
-
|
|
190
|
+
latestEngineSelected:
|
|
191
|
+
latestEngineSelected && newMap.has(latestEngineSelected)
|
|
192
|
+
? latestEngineSelected
|
|
193
|
+
: null,
|
|
189
194
|
connectionsMap: newMap,
|
|
190
195
|
};
|
|
191
196
|
},
|
|
@@ -23,6 +23,7 @@ interface Data {
|
|
|
23
23
|
* Whether to allow multiple tabs to be open.
|
|
24
24
|
*/
|
|
25
25
|
multiple: boolean;
|
|
26
|
+
expanded: string[];
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
export class AccordionPlugin implements IStatelessPlugin<Data> {
|
|
@@ -31,6 +32,7 @@ export class AccordionPlugin implements IStatelessPlugin<Data> {
|
|
|
31
32
|
validator = z.object({
|
|
32
33
|
labels: z.array(z.string()),
|
|
33
34
|
multiple: z.boolean(),
|
|
35
|
+
expanded: z.array(z.string()).default([]),
|
|
34
36
|
});
|
|
35
37
|
|
|
36
38
|
render(props: IStatelessPluginProps<Data>): JSX.Element {
|
|
@@ -43,11 +45,14 @@ export class AccordionPlugin implements IStatelessPlugin<Data> {
|
|
|
43
45
|
const AccordionComponent = ({
|
|
44
46
|
labels,
|
|
45
47
|
multiple,
|
|
48
|
+
expanded,
|
|
46
49
|
children,
|
|
47
50
|
}: PropsWithChildren<Data>): JSX.Element => {
|
|
48
|
-
const
|
|
51
|
+
const expansionProps = multiple
|
|
52
|
+
? { type: "multiple" as const, defaultValue: expanded }
|
|
53
|
+
: { type: "single" as const, defaultValue: expanded[0], collapsible: true };
|
|
49
54
|
return (
|
|
50
|
-
<Accordion
|
|
55
|
+
<Accordion {...expansionProps} className="text-muted-foreground">
|
|
51
56
|
{React.Children.map(children, (child, index) => {
|
|
52
57
|
return (
|
|
53
58
|
<AccordionItem key={index} value={index.toString()}>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
import { cleanup, fireEvent, render } from "@testing-library/react";
|
|
3
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
4
|
+
import { AccordionPlugin } from "../AccordionPlugin";
|
|
5
|
+
|
|
6
|
+
const plugin = new AccordionPlugin();
|
|
7
|
+
|
|
8
|
+
function renderAccordion(multiple: boolean, expanded?: string[]) {
|
|
9
|
+
return plugin.render({
|
|
10
|
+
host: document.createElement("marimo-accordion"),
|
|
11
|
+
data: plugin.validator.parse({
|
|
12
|
+
labels: ["Summary", "Details"],
|
|
13
|
+
multiple,
|
|
14
|
+
expanded,
|
|
15
|
+
}),
|
|
16
|
+
children: [
|
|
17
|
+
<p key="summary">Overview</p>,
|
|
18
|
+
<p key="details">More information</p>,
|
|
19
|
+
],
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
describe("AccordionPlugin", () => {
|
|
24
|
+
afterEach(cleanup);
|
|
25
|
+
|
|
26
|
+
it.each([
|
|
27
|
+
{ multiple: false, expanded: undefined, expected: ["false", "false"] },
|
|
28
|
+
{ multiple: true, expanded: [], expected: ["false", "false"] },
|
|
29
|
+
{ multiple: false, expanded: ["0"], expected: ["true", "false"] },
|
|
30
|
+
{ multiple: false, expanded: ["1"], expected: ["false", "true"] },
|
|
31
|
+
{ multiple: true, expanded: ["0", "1"], expected: ["true", "true"] },
|
|
32
|
+
])(
|
|
33
|
+
"sets initial expansion: $multiple, $expanded",
|
|
34
|
+
({ multiple, expanded, expected }) => {
|
|
35
|
+
const { getAllByRole } = render(renderAccordion(multiple, expanded));
|
|
36
|
+
expect(
|
|
37
|
+
getAllByRole("button").map((button) =>
|
|
38
|
+
button.getAttribute("aria-expanded"),
|
|
39
|
+
),
|
|
40
|
+
).toEqual(expected);
|
|
41
|
+
},
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
it("lets users collapse and switch the initially expanded item", () => {
|
|
45
|
+
const { getAllByRole, rerender } = render(renderAccordion(false, ["1"]));
|
|
46
|
+
const [summary, details] = getAllByRole("button");
|
|
47
|
+
fireEvent.click(details);
|
|
48
|
+
expect(details.getAttribute("aria-expanded")).toBe("false");
|
|
49
|
+
rerender(renderAccordion(false, ["1"]));
|
|
50
|
+
expect(details.getAttribute("aria-expanded")).toBe("false");
|
|
51
|
+
fireEvent.click(details);
|
|
52
|
+
fireEvent.click(summary);
|
|
53
|
+
expect(
|
|
54
|
+
[summary, details].map((button) => button.getAttribute("aria-expanded")),
|
|
55
|
+
).toEqual(["true", "false"]);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("lets users collapse items independently with multiple enabled", () => {
|
|
59
|
+
const { getAllByRole } = render(renderAccordion(true, ["0", "1"]));
|
|
60
|
+
const [summary, details] = getAllByRole("button");
|
|
61
|
+
fireEvent.click(summary);
|
|
62
|
+
expect(
|
|
63
|
+
[summary, details].map((button) => button.getAttribute("aria-expanded")),
|
|
64
|
+
).toEqual(["false", "true"]);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{t}from"./react-CBDbhulC.js";import{$i as n}from"./cells--Hh9voS5.js";import{t as r}from"./compiler-runtime-CYIjoINj.js";import{g as i}from"./useEventListener-92uWqz-P.js";import{t as a}from"./cn-ldLVeaqm.js";import{t as o}from"./jsx-runtime-B74pBk57.js";import{t as s}from"./tooltip-BvU0ko_d.js";import{t as c}from"./button-Dh8EwhsF.js";import{t as l}from"./createLucideIcon-B7HeEoG2.js";import{t as u}from"./chevron-right-CKA5zVsM.js";import{n as d,t as f}from"./eye-off-CFuPxa9F.js";import{t as p}from"./refresh-cw-Bf-rx_aV.js";var m=l(`chevrons-down-up`,[[`path`,{d:`m7 20 5-5 5 5`,key:`13a0gw`}],[`path`,{d:`m7 4 5 5 5-5`,key:`1kwcof`}]]),h={keyBy(e,t){let n=new Map,r=new Set;for(let i of e){let e=t(i);n.has(e)&&r.add(e),n.set(e,i)}return r.size>0&&i.trace(`Duplicate keys: ${[...r].join(`, `)}`),n},collect(e,t,n){return h.mapValues(h.keyBy(e,t),n)},filterMap(e,t){let n=new Map;for(let[r,i]of e)t(i,r)&&n.set(r,i);return n},mapValues(e,t){let n=new Map;for(let[r,i]of e)n.set(r,t(i,r));return n}},g=r(),_=e(t(),1),v=o(),y=e=>{let t=(0,g.c)(5),{isExpanded:n,className:r}=e,i=n&&`rotate-90`,o;t[0]!==r||t[1]!==i?(o=a(`shrink-0 transition-transform`,i,r),t[0]=r,t[1]=i,t[2]=o):o=t[2];let s;return t[3]===o?s=t[4]:(s=(0,v.jsx)(u,{className:o}),t[3]=o,t[4]=s),s},b=({onClick:e,tooltip:t=`Refresh`,className:n,iconClassName:r})=>{let[i,o]=(0,_.useState)(!1),l=(0,_.useCallback)(async t=>{o(!0);let n=new Promise(e=>setTimeout(e,500));try{await Promise.all([e(t),n])}finally{o(!1)}},[e]),u=(0,v.jsx)(c,{variant:`text`,size:`xs`,className:n,onClick:l,children:(0,v.jsx)(p,{className:a(`h-4 w-4`,r,i&&`animate-[spin_0.5s]`)})});return(0,v.jsx)(s,{content:t,children:u})},x=e=>{let t=(0,g.c)(15),{isVisible:r,onToggle:i,showTooltip:o,hideTooltip:l,size:u,className:d,iconClassName:p,"data-testid":m}=e,h=u===void 0?`xs`:u,_=r?n:f,y=r?l:o,b=r&&`text-primary`,x;t[0]!==p||t[1]!==b?(x=a(`h-4 w-4`,b,p),t[0]=p,t[1]=b,t[2]=x):x=t[2];let S;t[3]!==_||t[4]!==x?(S=(0,v.jsx)(_,{className:x}),t[3]=_,t[4]=x,t[5]=S):S=t[5];let C;t[6]!==d||t[7]!==m||t[8]!==i||t[9]!==h||t[10]!==S?(C=(0,v.jsx)(c,{"data-testid":m,variant:`text`,size:h,className:d,onClick:i,children:S}),t[6]=d,t[7]=m,t[8]=i,t[9]=h,t[10]=S,t[11]=C):C=t[11];let w;return t[12]!==y||t[13]!==C?(w=(0,v.jsx)(s,{content:y,children:C}),t[12]=y,t[13]=C,t[14]=w):w=t[14],w},S=_.forwardRef((e,t)=>{let n=(0,g.c)(15),r,i,o;n[0]===e?(r=n[1],i=n[2],o=n[3]):({className:r,iconClassName:i,...o}=e,n[0]=e,n[1]=r,n[2]=i,n[3]=o);let s;n[4]===r?s=n[5]:(s=a(`mb-0 opacity-0 group-hover:opacity-100 transition-opacity`,r),n[4]=r,n[5]=s);let l;n[6]===i?l=n[7]:(l=a(`w-4 h-4`,i),n[6]=i,n[7]=l);let u;n[8]===l?u=n[9]:(u=(0,v.jsx)(d,{className:l}),n[8]=l,n[9]=u);let f;return n[10]!==o||n[11]!==t||n[12]!==s||n[13]!==u?(f=(0,v.jsx)(c,{ref:t,variant:`text`,tabIndex:-1,size:`xs`,className:s,"aria-label":`More options`,...o,children:u}),n[10]=o,n[11]=t,n[12]=s,n[13]=u,n[14]=f):f=n[14],f});S.displayName=`MoreActionsButton`;var C=`h-3.5 w-3.5 mr-2`;export{x as a,y as i,S as n,h as o,b as r,m as s,C as t};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-B0Z9INg1.js";import{c as t,f as n,l as r,r as i,u as a}from"./useEvent-xfs0Sn4r.js";import{t as o}from"./react-CBDbhulC.js";import{$i as s,$r as c,D as l,E as u,Et as d,Hi as f,Pa as p,Ui as m,Yr as h,_ as g,b as _,bo as v,dn as y,do as b,ei as x,fi as S,fn as C,go as w,h as T,ia as E,ii as D,jo as O,na as ee,qn as te,ri as ne,sr as k,t as A,ti as j,zt as M}from"./cells--Hh9voS5.js";import{Cn as N,kt as P,vt as F}from"./schemas-aTUejmFi.js";import{t as I}from"./compiler-runtime-CYIjoINj.js";import{r as re,w as ie}from"./utils-D5Ywm7-q.js";import{C as L,n as ae,r as R}from"./ai-model-dropdown-C8IztRe2.js";import{g as z,n as B}from"./useEventListener-92uWqz-P.js";import{t as V}from"./objects-snlMn4yk.js";import{n as H,t as U}from"./constants-BDbGiS7O.js";import{A as oe,M as se,N as W,O as ce,T as le,j as G,k as K,v as ue}from"./config-BuGkUPaK.js";import{t as q}from"./switch-DhPDzMo3.js";import{g as de,h as fe,m as pe,y as me}from"./readonly-python-code-yR65TOiM.js";import{t as J}from"./cn-ldLVeaqm.js";import{t as he}from"./jsx-runtime-B74pBk57.js";import{i as ge,n as _e,r as ve,t as ye}from"./tabs-Cy1qXLzH.js";import{a as be,c as xe,i as Se,n as Ce,r as we,s as Te,t as Ee}from"./select-C1IYgK48.js";import{$ as De,Lt as Oe}from"./JsonOutput-izmGhjov.js";import{a as ke,c as Ae,o as je,p as Me,t as Ne}from"./download-DtQweFN1.js";import{t as Pe}from"./tooltip-BvU0ko_d.js";import{n as Fe,r as Ie,t as Le}from"./button-Dh8EwhsF.js";import{i as Re,r as ze,t as Be}from"./strings-CReV1AYG.js";import{r as Ve}from"./requests-C6_IaFh7.js";import{t as Y}from"./createLucideIcon-B7HeEoG2.js";import{a as He,i as Ue,n as We,r as Ge,t as Ke}from"./paths-ClYq6Exe.js";import{L as qe,R as Je,c as Ye,l as Xe,t as Ze,z as Qe}from"./layout-VgriO3Ll.js";import{t as $e}from"./check-BoA6XBpj.js";import{r as et}from"./useCellActionButton-Df4qSnWR.js";import{t as tt}from"./code-CF0HKE9K.js";import{t as nt}from"./copy-BMXKNElG.js";import{t as rt}from"./eye-off-CFuPxa9F.js";import{t as it}from"./external-link-Bp3BxyRA.js";import{t as at}from"./file-DF8n85RA.js";import{t as ot}from"./globe-BQf75qV_.js";import{n as st,r as ct,t as lt}from"./youtube-DCJ-ihUU.js";import{n as ut}from"./components-DUYCXngU.js";import{i as dt,n as ft,r as pt}from"./markdown-export-0rLbaq8b.js";import{t as mt}from"./image-ab13yGv4.js";import{D as ht,E as gt,O as _t,T as vt,b as yt,j as bt}from"./write-secret-modal-CSWlDX_Z.js";import{t as xt}from"./link-Cap-MZiw.js";import{t as St}from"./spinner-Ck-Hgfvj.js";import{r as Ct}from"./input-DEbY281O.js";import{t as wt}from"./settings-C-cYas75.js";import{t as Tt}from"./square-B58Ib8Ir.js";import{t as Et}from"./triangle-alert-MihykDYG.js";import{t as Dt}from"./use-toast-DpWHUGuF.js";import{o as Ot}from"./session-Sz5nSFku.js";import{n as kt}from"./useAsyncData-Buhk-UgR.js";import{n as At}from"./copy-DlEomWzI.js";import{t as jt}from"./copy-icon-BUOcnUgJ.js";import{r as Mt}from"./useRunCells-D8B7UNsg.js";import{o as Nt}from"./useInstallPackage-ClaR_nYb.js";import{t as Pt}from"./share-BZW3tzEX.js";import{n as Ft,t as It}from"./alert-dmKwNsrp.js";import{a as Lt}from"./cell-link-DEXHmwy1.js";import{t as Rt}from"./icons-CjLa9BiH.js";import{i as zt,n as Bt}from"./error-entries-CMsalXvZ.js";import{t as Vt}from"./shell-DLpUCctE.js";import{t as Ht}from"./pair-with-agent-modal-DYvcjx3q.js";import{i as Ut,n as Wt,r as Gt}from"./add-connection-dialog-a8mkIeXa.js";import{t as Kt}from"./github-YRgb6LMu.js";import{n as qt}from"./marimo-icons-C3KxMV9A.js";import{t as Jt}from"./links-DLvOXyO_.js";import{i as Yt,n as Xt,t as Zt}from"./skeleton-CUFHwpIk.js";var Qt=Y(`circle-chevron-down`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m16 10-4 4-4-4`,key:`894hmk`}]]),$t=Y(`circle-chevron-right`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m10 8 4 4-4 4`,key:`1wy4r4`}]]),en=Y(`clipboard-copy`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2`,key:`4jdomd`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v4`,key:`3hqy98`}],[`path`,{d:`M21 14H11`,key:`1bme5i`}],[`path`,{d:`m15 10-4 4 4 4`,key:`5dvupr`}]]),tn=Y(`cloud-download`,[[`path`,{d:`M12 13v8l-4-4`,key:`1f5nwf`}],[`path`,{d:`m12 21 4-4`,key:`1lfcce`}],[`path`,{d:`M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284`,key:`ui1hmy`}]]),nn=Y(`command`,[[`path`,{d:`M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3`,key:`11bfej`}]]),rn=Y(`diamond-plus`,[[`path`,{d:`M12 8v8`,key:`napkw2`}],[`path`,{d:`M2.7 10.3a2.41 2.41 0 0 0 0 3.41l7.59 7.59a2.41 2.41 0 0 0 3.41 0l7.59-7.59a2.41 2.41 0 0 0 0-3.41L13.7 2.71a2.41 2.41 0 0 0-3.41 0z`,key:`1ey20j`}],[`path`,{d:`M8 12h8`,key:`1wcyev`}]]),an=Y(`fast-forward`,[[`path`,{d:`M12 6a2 2 0 0 1 3.414-1.414l6 6a2 2 0 0 1 0 2.828l-6 6A2 2 0 0 1 12 18z`,key:`b19h5q`}],[`path`,{d:`M2 6a2 2 0 0 1 3.414-1.414l6 6a2 2 0 0 1 0 2.828l-6 6A2 2 0 0 1 2 18z`,key:`h7h5ge`}]]),on=Y(`files`,[[`path`,{d:`M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8`,key:`14sh0y`}],[`path`,{d:`M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z`,key:`1970lx`}],[`path`,{d:`M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1`,key:`l4dndm`}]]),sn=Y(`list`,[[`path`,{d:`M3 5h.01`,key:`18ugdj`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M3 19h.01`,key:`noohij`}],[`path`,{d:`M8 5h13`,key:`1pao27`}],[`path`,{d:`M8 12h13`,key:`1za7za`}],[`path`,{d:`M8 19h13`,key:`m83p4d`}]]),cn=Y(`message-circle-question-mark`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),ln=Y(`notebook`,[[`path`,{d:`M2 6h4`,key:`aawbzj`}],[`path`,{d:`M2 10h4`,key:`l0bgd4`}],[`path`,{d:`M2 14h4`,key:`1gsvsf`}],[`path`,{d:`M2 18h4`,key:`1bu2t1`}],[`rect`,{width:`16`,height:`20`,x:`4`,y:`2`,rx:`2`,key:`1nb95v`}],[`path`,{d:`M16 2v20`,key:`rotuqe`}]]),un=Y(`panel-left`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}]]),dn=Y(`presentation`,[[`path`,{d:`M2 3h20`,key:`91anmk`}],[`path`,{d:`M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3`,key:`2k9sn8`}],[`path`,{d:`m7 21 5-5 5 5`,key:`bip4we`}]]),fn=Y(`share-2`,[[`circle`,{cx:`18`,cy:`5`,r:`3`,key:`gq8acd`}],[`circle`,{cx:`6`,cy:`12`,r:`3`,key:`w7nqdw`}],[`circle`,{cx:`18`,cy:`19`,r:`3`,key:`1xt0gg`}],[`line`,{x1:`8.59`,x2:`15.42`,y1:`13.51`,y2:`17.49`,key:`47mynk`}],[`line`,{x1:`15.41`,x2:`8.59`,y1:`6.51`,y2:`10.49`,key:`1n3mei`}]]),pn=Y(`square-power`,[[`path`,{d:`M12 7v4`,key:`xawao1`}],[`path`,{d:`M7.998 9.003a5 5 0 1 0 8-.005`,key:`1pek45`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}]]),mn=Y(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]),X=he(),Z=I(),Q=e(o(),1);function hn(e,t){let n=(0,Z.c)(11),r;n[0]===t?r=n[1]:(r=new b(t),n[0]=t,n[1]=r);let i=r,a;n[2]!==e||n[3]!==i?(a=()=>i.get(e),n[2]=e,n[3]=i,n[4]=a):a=n[4];let[o,s]=(0,Q.useState)(a),c;n[5]!==e||n[6]!==i?(c=t=>{s(t),i.set(e,t)},n[5]=e,n[6]=i,n[7]=c):c=n[7];let l=c,u;return n[8]!==l||n[9]!==o?(u=[o,l],n[8]=l,n[9]=o,n[10]=u):u=n[10],u}function gn(e,t){return{...e,Binaries:{...e.Binaries,Browser:t}}}function _n(e,t,n,r){return{marimo:e,Locale:n||void 0,Binaries:{Browser:t},"Environment Collection Error":r}}function vn(e,t){let n=Math.max(2,...Array.from(t.matchAll(/`+/g),e=>e[0].length)),r="`".repeat(n+1);return`${r}${e}\n${t}\n${r}`}function yn(e,t){let n=e.includes(`?`)?`&`:`?`,r=[],i=e,a=0;for(let[e,o]of Object.entries(t)){if(o.length===0)continue;let t=`${e}=${encodeURIComponent(o)}`,s=`${i}${a===0?n:`&`}${t}`;if(s.length>6e3){r.push(e);continue}i=s,a+=1}return{url:i,omitted:r}}function bn(e,t){return[`<details>`,`<summary>${Be.htmlEscape(e)??``}</summary>`,``,t,``,`</details>`].join(`
|
|
2
|
-
`)}function xn(e){return bn(`Environment`,vn(`json`,JSON.stringify(e,null,2)))}function Sn(e){return bn(`Errors`,vn(`text`,e.map(Bt).join(`
|
|
3
|
-
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
`)))}function Cn(e){return bn(`Code`,vn(`python`,e))}var wn=B,Tn=e=>{let t=(0,Z.c)(16),{content:n}=e,[r,i]=(0,Q.useState)(!1),a=!r&&`max-h-24 overflow-hidden`,o;t[0]===a?o=t[1]:(o=J(`text-xs bg-muted rounded p-2 overflow-x-auto whitespace-pre-wrap`,a),t[0]=a,t[1]=o);let s;t[2]!==n||t[3]!==o?(s=(0,X.jsx)(`pre`,{className:o,children:n}),t[2]=n,t[3]=o,t[4]=s):s=t[4];let c;t[5]===r?c=t[6]:(c=!r&&(0,X.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-0 h-10 rounded-b bg-gradient-to-b from-transparent to-muted`}),t[5]=r,t[6]=c);let l;t[7]!==s||t[8]!==c?(l=(0,X.jsxs)(`div`,{className:`relative`,children:[s,c]}),t[7]=s,t[8]=c,t[9]=l):l=t[9];let u;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(u=()=>i(On),t[10]=u):u=t[10];let d=r?`Show less`:`Show more`,f;t[11]===d?f=t[12]:(f=(0,X.jsx)(Le,{type:`button`,variant:`link`,size:`xs`,className:`self-start`,onClick:u,children:d}),t[11]=d,t[12]=f);let p;return t[13]!==l||t[14]!==f?(p=(0,X.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[l,f]}),t[13]=l,t[14]=f,t[15]=p):p=t[15],p},En=e=>{let t=(0,Z.c)(6),{children:n}=e,{openModal:r,closeModal:i}=yt(),a;t[0]!==i||t[1]!==r?(a=()=>r((0,X.jsx)(Dn,{onClose:i})),t[0]=i,t[1]=r,t[2]=a):a=t[2];let o;return t[3]!==n||t[4]!==a?(o=(0,X.jsx)(wn,{onClick:a,children:n}),t[3]=n,t[4]=a,t[5]=o):o=t[5],o},Dn=()=>{let e=(0,Z.c)(84),{getEnvironmentInfo:t,readCode:n}=Ve(),a,o;e[0]===t?(a=e[1],o=e[2]):(a=async()=>t(),o=[t],e[0]=t,e[1]=a,e[2]=o);let s=kt(a,o),c=r(_),l;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(l=zt(i),e[3]=l):l=e[3];let u=l,d;if(e[4]!==c.cellData||e[5]!==c.cellIds.inOrderIds){let t;e[7]===c.cellData?t=e[8]:(t=e=>c.cellData[e],e[7]=c.cellData,e[8]=t),d=c.cellIds.inOrderIds.map(t),e[4]=c.cellData,e[5]=c.cellIds.inOrderIds,e[6]=d}else d=e[6];let f=Xe(d),p=r(w),m=r(ue),h=p!==null&&f&&m.state===le.OPEN,g=h?void 0:p===null?`Save the notebook first.`:f?`Connect the notebook to include its source.`:`Notebook source is hidden in this view.`,[v,y]=hn(`marimo:issue-report:include-errors`,!1),[b,x]=hn(`marimo:issue-report:include-code`,!1),S;e[9]!==s.data||e[10]!==s.status?(S=s.data?gn(s.data,navigator.userAgent):s.status===`error`?_n(me(),navigator.userAgent,navigator.language,`Server environment information unavailable`):void 0,e[9]=s.data,e[10]=s.status,e[11]=S):S=e[11];let C=S,T,E;e[12]!==b||e[13]!==h||e[14]!==n?(T=async()=>{if(!b||!h)return;let{contents:e}=await n();return e},E=[b,h,n],e[12]=b,e[13]=h,e[14]=n,e[15]=T,e[16]=E):(T=e[15],E=e[16]);let D=kt(T,E),O;bb0:{if(!C){let t;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(t=[],e[17]=t):t=e[17];let n;e[18]===Symbol.for(`react.memo_cache_sentinel`)?(n={url:H.bugReportUrl,omitted:t},e[18]=n):n=e[18],O=n;break bb0}let t;if(e[19]!==D.data||e[20]!==C||e[21]!==b||e[22]!==v){let n={env:xn(C)};v&&u.length>0&&(n[`bug-description`]=Sn(u)),b&&D.data&&(n[`reproduction-code`]=Cn(D.data)),t=yn(H.bugReportUrl,n),e[19]=D.data,e[20]=C,e[21]=b,e[22]=v,e[23]=t}else t=e[23];O=t}let{url:ee,omitted:ne}=O,k;e[24]===ne?k=e[25]:(k=ne.map(kn).join(`, `),e[24]=ne,e[25]=k);let A=k,j;e[26]===Symbol.for(`react.memo_cache_sentinel`)?(j=(0,X.jsxs)(_t,{children:[(0,X.jsx)(bt,{children:`Report an issue`}),(0,X.jsx)(gt,{children:`Open a GitHub bug report prefilled with your environment, and optionally your current errors and notebook code. Nothing is uploaded automatically; review the details before posting.`})]}),e[26]=j):j=e[26];let M;e[27]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,X.jsx)(it,{className:`w-4 h-4 mr-2`}),e[27]=M):M=e[27];let N;e[28]===ee?N=e[29]:(N=(0,X.jsx)(Le,{type:`button`,variant:`default`,size:`xs`,asChild:!0,className:`self-start`,children:(0,X.jsxs)(`a`,{href:ee,target:`_blank`,rel:`noreferrer`,children:[M,`Open GitHub issue`]})}),e[28]=ee,e[29]=N);let P;e[30]===y?P=e[31]:(P=e=>y(e===!0),e[30]=y,e[31]=P);let F;e[32]!==v||e[33]!==P?(F=(0,X.jsx)(te,{id:`issue-include-errors`,checked:v,disabled:u.length===0,onCheckedChange:P,"aria-label":`Include errors`}),e[32]=v,e[33]=P,e[34]=F):F=e[34];let I;e[35]===Symbol.for(`react.memo_cache_sentinel`)?(I=(0,X.jsx)(`label`,{htmlFor:`issue-include-errors`,children:`Include errors`}),e[35]=I):I=e[35];let re;e[36]===F?re=e[37]:(re=(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[F,I]}),e[36]=F,e[37]=re);let ie=!h,L;e[38]===x?L=e[39]:(L=e=>x(e===!0),e[38]=x,e[39]=L);let ae;e[40]!==b||e[41]!==ie||e[42]!==L?(ae=(0,X.jsx)(te,{id:`issue-include-code`,checked:b,disabled:ie,onCheckedChange:L,"aria-label":`Include notebook code`}),e[40]=b,e[41]=ie,e[42]=L,e[43]=ae):ae=e[43];let R;e[44]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,X.jsx)(`label`,{htmlFor:`issue-include-code`,children:`Include notebook code`}),e[44]=R):R=e[44];let z;e[45]===ae?z=e[46]:(z=(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[ae,R]}),e[45]=ae,e[46]=z);let B;e[47]===g?B=e[48]:(B=g&&(0,X.jsx)(`span`,{className:`text-xs text-muted-foreground ml-6`,children:g}),e[47]=g,e[48]=B);let V;e[49]!==D.status||e[50]!==b?(V=b&&D.status===`error`&&(0,X.jsx)(`span`,{className:`text-xs text-(--red-11) ml-6`,children:`Notebook source could not be loaded.`}),e[49]=D.status,e[50]=b,e[51]=V):V=e[51];let U;e[52]!==z||e[53]!==B||e[54]!==V?(U=(0,X.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[z,B,V]}),e[52]=z,e[53]=B,e[54]=V,e[55]=U):U=e[55];let oe;e[56]!==re||e[57]!==U?(oe=(0,X.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[re,U]}),e[56]=re,e[57]=U,e[58]=oe):oe=e[58];let se;e[59]===A?se=e[60]:(se=A?(0,X.jsxs)(`div`,{className:`flex items-start gap-2 text-xs text-(--yellow-11)`,children:[(0,X.jsx)(Et,{className:`w-3.5 h-3.5 shrink-0 mt-0.5`}),(0,X.jsxs)(`span`,{children:[`Too large to prefill and left out of the link: `,A,`. Paste them into the issue manually.`]})]}):(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Your environment is always included.`}),e[59]=A,e[60]=se);let W;e[61]!==N||e[62]!==oe||e[63]!==se?(W=(0,X.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[N,oe,se]}),e[61]=N,e[62]=oe,e[63]=se,e[64]=W):W=e[64];let ce;e[65]===s.status?ce=e[66]:(ce=s.status===`pending`&&(0,X.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,X.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Loading environment details…`}),(0,X.jsx)(Zt,{className:`h-4 w-full`}),(0,X.jsx)(Zt,{className:`h-4 w-3/4`}),(0,X.jsx)(Zt,{className:`h-4 w-1/2`})]}),e[65]=s.status,e[66]=ce);let G;e[67]===s?G=e[68]:(G=s.status===`error`&&(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,X.jsx)(Et,{className:`w-4 h-4 text-(--yellow-11) shrink-0`}),(0,X.jsx)(`span`,{children:`Server environment information unavailable`}),(0,X.jsx)(Le,{type:`button`,variant:`link`,size:`xs`,onClick:()=>s.refetch(),children:`Retry`})]}),e[67]=s,e[68]=G);let K;e[69]===C?K=e[70]:(K=C&&(0,X.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,X.jsx)(`span`,{className:`text-sm font-medium`,children:`Environment details`}),(0,X.jsx)(jt,{className:`w-3.5 h-3.5`,value:JSON.stringify(C,null,2),ariaLabel:`Copy environment JSON`,toastTitle:`Environment details copied`})]}),(0,X.jsx)(Tn,{content:JSON.stringify(C,null,2)})]}),e[69]=C,e[70]=K);let q;e[71]===C?q=e[72]:(q=C&&u.length>0&&(0,X.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,X.jsx)(`span`,{className:`text-sm font-medium`,children:`Errors`}),(0,X.jsx)(jt,{className:`w-3.5 h-3.5`,value:Sn(u),ariaLabel:`Copy errors`,toastTitle:`Errors copied`})]}),(0,X.jsx)(Tn,{content:u.map(Bt).join(`
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
`)})]}),e[71]=C,e[72]=q);let de;e[73]===C?de=e[74]:(de=C&&u.length===0&&(0,X.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`No errors detected.`}),e[73]=C,e[74]=de);let fe;e[75]===Symbol.for(`react.memo_cache_sentinel`)?(fe=(0,X.jsx)(`a`,{href:H.feedbackForm,target:`_blank`,rel:`noreferrer`,className:`underline`,children:`two-minute survey`}),e[75]=fe):fe=e[75];let pe;e[76]===Symbol.for(`react.memo_cache_sentinel`)?(pe=(0,X.jsx)(`div`,{className:`border-t pt-3`,children:(0,X.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Other feedback? Take our`,` `,fe,` `,`or chat with us on`,` `,(0,X.jsx)(`a`,{href:H.discordLink,target:`_blank`,rel:`noreferrer`,className:`underline`,children:`Discord`}),`.`]})}),e[76]=pe):pe=e[76];let J;return e[77]!==W||e[78]!==ce||e[79]!==G||e[80]!==K||e[81]!==q||e[82]!==de?(J=(0,X.jsxs)(vt,{className:`w-[540px] max-w-[90vw]`,children:[j,(0,X.jsxs)(`div`,{className:`flex flex-col gap-4 max-h-[60vh] overflow-y-auto`,children:[W,ce,G,K,q,de,pe]})]}),e[77]=W,e[78]=ce,e[79]=G,e[80]=K,e[81]=q,e[82]=de,e[83]=J):J=e[83],J};function On(e){return!e}function kn(e){return e===`bug-description`?`errors`:e===`reproduction-code`?`code`:e}var An=`https://static.marimo.app`,jn=e=>{let t=(0,Z.c)(26),{onClose:n}=e,[r,i]=(0,Q.useState)(``),{exportAsHTML:a}=Ve(),o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=Math.random().toString(36).slice(2,6),t[0]=o):o=t[0];let s=`${r}-${o}`,c=`${An}/static/${s}`,l;t[1]!==a||t[2]!==n||t[3]!==s?(l=async e=>{e.preventDefault(),n();let{contents:t}=await a({download:!1,includeCode:!0,files:Ye.INSTANCE.filenames(),layout:await Ze()}),r=Dt({title:`Uploading static notebook...`,description:`Please wait.`});await fetch(`${An}/api/static`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({html:t,path:s})}).catch(()=>{r.dismiss(),Dt({title:`Error uploading static page`,description:(0,X.jsxs)(`div`,{children:[`Please try again later. If the problem persists, please file a bug report on`,` `,(0,X.jsx)(`a`,{href:H.issuesPage,target:`_blank`,className:`underline`,children:`GitHub`}),`.`]})})}),r.dismiss(),Dt({title:`Static page uploaded!`,description:(0,X.jsxs)(`div`,{children:[`The URL has been copied to your clipboard.`,(0,X.jsx)(`br`,{}),`You can share it with anyone.`]})})},t[1]=a,t[2]=n,t[3]=s,t[4]=l):l=t[4];let u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,X.jsx)(bt,{children:`Share static notebook`}),t[5]=u):u=t[5];let d;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,X.jsxs)(_t,{children:[u,(0,X.jsxs)(gt,{children:[`You can publish a static, non-interactive version of this notebook to the public web. We will create a link for you that lives on`,` `,(0,X.jsx)(`a`,{href:An,target:`_blank`,children:An}),`.`]})]}),t[6]=d):d=t[6];let f;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(f=e=>{let t=e.target.value.toLowerCase().replaceAll(/\s/g,`-`).replaceAll(/[^\da-z-]/g,``);i(t)},t[7]=f):f=t[7];let p;t[8]===r?p=t[9]:(p=(0,X.jsx)(Ct,{"data-testid":`slug-input`,id:`slug`,autoFocus:!0,value:r,placeholder:`Notebook slug`,onChange:f,required:!0,autoComplete:`off`}),t[8]=r,t[9]=p);let m;t[10]===c?m=t[11]:(m=(0,X.jsxs)(`div`,{className:`font-semibold text-sm text-muted-foreground gap-2 flex flex-col`,children:[`Anyone will be able to access your notebook at this URL:`,(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(Mn,{text:c}),(0,X.jsx)(`span`,{className:`text-primary`,children:c})]})]}),t[10]=c,t[11]=m);let h;t[12]!==p||t[13]!==m?(h=(0,X.jsxs)(`div`,{className:`flex flex-col gap-6 py-4`,children:[p,m]}),t[12]=p,t[13]=m,t[14]=h):h=t[14];let g;t[15]===n?g=t[16]:(g=(0,X.jsx)(Le,{"data-testid":`cancel-share-static-notebook-button`,variant:`secondary`,onClick:n,children:`Cancel`}),t[15]=n,t[16]=g);let _;t[17]===c?_=t[18]:(_=(0,X.jsx)(Le,{"data-testid":`share-static-notebook-button`,"aria-label":`Save`,variant:`default`,type:`submit`,onClick:async()=>{await At(c)},children:`Create`}),t[17]=c,t[18]=_);let v;t[19]!==_||t[20]!==g?(v=(0,X.jsxs)(ht,{children:[g,_]}),t[19]=_,t[20]=g,t[21]=v):v=t[21];let y;return t[22]!==v||t[23]!==l||t[24]!==h?(y=(0,X.jsx)(vt,{className:`w-fit`,children:(0,X.jsxs)(`form`,{onSubmit:l,children:[d,h,v]})}),t[22]=v,t[23]=l,t[24]=h,t[25]=y):y=t[25],y},Mn=e=>{let t=(0,Z.c)(8),[n,r]=Q.useState(!1),i;t[0]===e.text?i=t[1]:(i=Ie.stopPropagation(async t=>{t.preventDefault(),await At(e.text),r(!0),setTimeout(()=>r(!1),2e3)}),t[0]=e.text,t[1]=i);let a=i,o;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,X.jsx)(nt,{size:14,strokeWidth:1.5}),t[2]=o):o=t[2];let s;t[3]===a?s=t[4]:(s=(0,X.jsx)(Le,{"data-testid":`copy-static-notebook-url-button`,onClick:a,size:`xs`,variant:`secondary`,children:o}),t[3]=a,t[4]=s);let c;return t[5]!==n||t[6]!==s?(c=(0,X.jsx)(Pe,{content:`Copied!`,open:n,children:s}),t[5]=n,t[6]=s,t[7]=c):c=t[7],c};function Nn(){let e=document.getElementsByClassName(U.outputArea);for(let t of e){let e=t.getBoundingClientRect();if(e.bottom>0&&e.top<window.innerHeight){let e=O.findElement(t);if(!e){z.warn(`Could not find HTMLCellId for visible output area`,t);continue}return{cellId:O.parse(e.id)}}}return z.warn(`No visible output area found for scroll anchor`),null}function Pn(e){if(!e){z.warn(`No scroll anchor provided to restore scroll position`);return}let t=document.getElementById(O.create(e.cellId));if(!t){z.warn(`Could not find cell element to restore scroll position`,e.cellId);return}if(!t.querySelector(`.${U.outputArea}`)){z.warn(`Could not find output area to restore scroll position`,e.cellId);return}t.scrollIntoView({block:`start`,behavior:`auto`})}function Fn(){let e=(0,Z.c)(2),t=a(se),n;return e[0]===t?n=e[1]:(n=()=>{let e=Nn();t(t=>({mode:oe(t.mode),cellAnchor:e?.cellId??null})),requestAnimationFrame(()=>{requestAnimationFrame(()=>{Pn(e)})})},e[0]=t,e[1]=n),n}var In=n(!1),Ln=()=>{let e=(0,Z.c)(7),{selectedLayout:t}=fe(),{setLayoutView:n}=pe();if(W()&&!S(`wasm_layouts`))return null;let r;e[0]===n?r=e[1]:(r=e=>n(e),e[0]=n,e[1]=r);let i;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,X.jsx)(Te,{className:`min-w-[110px] border-border bg-background`,"data-testid":`layout-select`,children:(0,X.jsx)(xe,{placeholder:`Select a view`})}),e[2]=i):i=e[2];let a;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,X.jsx)(Ce,{children:(0,X.jsxs)(we,{children:[(0,X.jsx)(be,{children:`View as`}),de.map(Vn)]})}),e[3]=a):a=e[3];let o;return e[4]!==t||e[5]!==r?(o=(0,X.jsxs)(Ee,{"data-testid":`layout-select`,value:t,onValueChange:r,children:[i,a]}),e[4]=t,e[5]=r,e[6]=o):o=e[6],o};function Rn(e){let t=zn(e);return(0,X.jsx)(t,{className:`h-4 w-4`})}function zn(e){switch(e){case`vertical`:return sn;case`grid`:return ct;case`slides`:return dn;default:return Re(e),Tt}}function Bn(e){return Be.startCase(e)}function Vn(e){return(0,X.jsx)(Se,{value:e,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 leading-5`,children:[Rn(e),(0,X.jsx)(`span`,{children:Bn(e)})]})},e)}var Hn=[`html`,`markdown`,`ipynb`,`pdf`,`script`,`png`],Un=[`pymdown`,`qmd`,`mystmd`,`mdx`],Wn=[`topological`,`top-down`],Gn=[`document`,`slides`],Kn=[`source`,`flat`];function qn(e){return typeof e==`string`&&Hn.some(t=>t===e)}var $={html:{includeCode:!0},markdown:{flavor:null},ipynb:{sortMode:`topological`,includeOutputs:!1},pdf:{preset:`document`,includeInputs:!0,includeOutputs:!0,webpdf:!0},script:{type:`source`}};function Jn(e,t){return e.default(t).catch(t)}function Yn(e){return N(e).optional().catch(void 0)}var Xn=N({html:Yn({includeCode:Jn(P(),$.html.includeCode)}),markdown:Yn({flavor:Jn(F(Un).nullable(),$.markdown.flavor)}),ipynb:Yn({sortMode:Jn(F(Wn),$.ipynb.sortMode),includeOutputs:Jn(P(),$.ipynb.includeOutputs)}),pdf:Yn({preset:Jn(F(Gn),$.pdf.preset),includeInputs:Jn(P(),$.pdf.includeInputs),includeOutputs:Jn(P(),$.pdf.includeOutputs),webpdf:Jn(P(),$.pdf.webpdf)}),script:Yn({type:Jn(F(Kn),$.script.type)})}).catch({});function Zn(e,t){let n={...e},r=r=>{n[r]={...e[r],...t[r]}};for(let e of Object.keys(t))r(e);return n}function Qn(e){return Zn($,Xn.parse(e))}var $n=D({toSerializable:e=>e,fromSerializable:Qn}),er=v(`marimo:export:options:v1`,$,$n,{getOnInit:!0}),tr=v(`marimo:export:last-format:v1`,`html`,D({toSerializable:e=>e,fromSerializable:e=>qn(e)?e:`html`}),{getOnInit:!0}),nr={html:{requiresNamedNotebookOnServer:!0,requiresServerRuntime:!1,checksServerAvailability:!1},markdown:{requiresNamedNotebookOnServer:!0,requiresServerRuntime:!1,checksServerAvailability:!1},ipynb:{requiresNamedNotebookOnServer:!0,requiresServerRuntime:!0,checksServerAvailability:!0},pdf:{requiresNamedNotebookOnServer:!0,requiresServerRuntime:!0,checksServerAvailability:!0},script:{requiresNamedNotebookOnServer:!1,requiresServerRuntime:!1,checksServerAvailability:!1},png:{requiresNamedNotebookOnServer:!1,requiresServerRuntime:!1,checksServerAvailability:!1}};function rr(e,t){return e===`wasm`&&t===`pdf`}function ir({format:e,options:t,runtime:n,filename:r,availability:i}){let a=e===`script`&&t.script.type===`source`?{...nr.script,requiresNamedNotebookOnServer:!0}:nr[e],o=rr(n,e);if(n===`wasm`&&a.requiresServerRuntime)return{available:o,reason:{type:`wasm-runtime`}};if(n===`server`&&a.requiresNamedNotebookOnServer&&!r)return{available:!1,reason:{type:`notebook-must-be-named`}};if(n===`wasm`||!a.checksServerAvailability)return{available:!0};if(i.status===`pending`)return{available:!1,reason:{type:`checking-requirements`}};if(i.status===`error`||!i.data)return{available:!0,availabilityCheckFailed:!0};let s=i.data.formats.find(t=>t.format===e);return s?s.dependenciesAvailable?{available:!0}:s.missingPackages.length>0?{available:!1,reason:{type:`missing-packages`,packages:s.missingPackages}}:s.missingSetup.length>0?{available:!1,reason:{type:`missing-setup`,requirements:s.missingSetup}}:{available:!0,availabilityCheckFailed:!0}:{available:!0,availabilityCheckFailed:!0}}function ar(e,t){return e.map(e=>({value:e,...t[e]}))}var or=ar([`automatic`,...Un],{automatic:{label:`Automatic`,description:`Chooses a format from the notebook filename. Defaults to Markdown (.md).`},pymdown:{label:`Markdown (.md)`,description:`Creates a .md file with Python code blocks.`},qmd:{label:`Quarto (.qmd)`,description:`Creates a .qmd file for Quarto.`},mystmd:{label:`MyST (.myst.md)`,description:`Creates a .myst.md file for MyST.`},mdx:{label:`MDX (.mdx)`,description:`Creates a .mdx file for MDX.`}}),sr=ar(Wn,{"top-down":{label:`Top to bottom`,description:`Keeps cells in the same order as this notebook.`},topological:{label:`Dependency order`,description:`Reorders cells so each cell appears after the cells it depends on.`}}),cr=ar(Gn,{document:{label:`Document`,description:`Creates pages for reading or printing.`},slides:{label:`Slides`,description:`Creates presentation slides from the notebook.`}}),lr=ar([`browser`,`latex`],{browser:{label:`Browser`,description:`Uses browser rendering to preserve the notebook's visual output.`},latex:{label:`LaTeX first`,description:`Uses Pandoc and TeX when available, then falls back to browser rendering.`}}),ur=ar(Kn,{source:{label:`Notebook source`,description:`Downloads the saved notebook source for continued editing in marimo.`},flat:{label:`Flat script`,description:`Reorders cells so the Python script runs from top to bottom.`}}),dr={html:{label:`HTML`,actionLabel:`Export HTML`,description:`Save the current notebook as an HTML page.`,Icon:ot,Options:fr},markdown:{label:`Markdown`,actionLabel:`Export Markdown`,description:`Save code and text in a Markdown-based file. Cell outputs are not included.`,Icon:Ge,Options:pr},ipynb:{label:`Jupyter`,actionLabel:`Export Jupyter notebook`,description:`Open the notebook in Jupyter and other compatible tools.`,Icon:ln,Options:mr},pdf:{label:`PDF`,actionLabel:`Export PDF`,description:`Save the notebook as a PDF for printing or sharing.`,Icon:at,Options:hr},script:{label:`Python`,actionLabel:`Export flat script`,description:`Save the notebook as a Python file.`,Icon:tt,Options:gr},png:{label:`PNG`,actionLabel:`Export PNG`,description:`Capture the current app view as an image.`,Icon:mt,Options:_r}};function fr(e){let t=(0,Z.c)(7),{options:n,updateOptions:r,disabled:i}=e,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a={checked:`Includes code cells in the webpage.`,unchecked:`Leaves code cells out of the webpage.`},t[0]=a):a=t[0];let o;t[1]===r?o=t[2]:(o=e=>r(`html`,{includeCode:e}),t[1]=r,t[2]=o);let s;return t[3]!==i||t[4]!==n.html.includeCode||t[5]!==o?(s=(0,X.jsx)(vr,{children:(0,X.jsx)(yr,{label:`Include code`,descriptions:a,checked:n.html.includeCode,disabled:i,onCheckedChange:o})}),t[3]=i,t[4]=n.html.includeCode,t[5]=o,t[6]=s):s=t[6],s}function pr(e){let t=(0,Z.c)(6),{options:n,updateOptions:r,disabled:i}=e,a=n.markdown.flavor??`automatic`,o;t[0]===r?o=t[1]:(o=e=>r(`markdown`,{flavor:e===`automatic`?null:e}),t[0]=r,t[1]=o);let s;return t[2]!==i||t[3]!==a||t[4]!==o?(s=(0,X.jsx)(vr,{children:(0,X.jsx)(Sr,{label:`Format`,value:a,disabled:i,onValueChange:o,options:or})}),t[2]=i,t[3]=a,t[4]=o,t[5]=s):s=t[5],s}function mr(e){let t=(0,Z.c)(16),{options:n,updateOptions:r,disabled:i}=e,a;t[0]===r?a=t[1]:(a=e=>r(`ipynb`,{sortMode:e}),t[0]=r,t[1]=a);let o;t[2]!==i||t[3]!==n.ipynb.sortMode||t[4]!==a?(o=(0,X.jsx)(br,{label:`Cell order`,value:n.ipynb.sortMode,disabled:i,onValueChange:a,options:sr}),t[2]=i,t[3]=n.ipynb.sortMode,t[4]=a,t[5]=o):o=t[5];let s;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(s={checked:`Keeps the outputs currently shown in the notebook.`,unchecked:`Leaves cell outputs out of the Jupyter notebook.`},t[6]=s):s=t[6];let c;t[7]===r?c=t[8]:(c=e=>r(`ipynb`,{includeOutputs:e}),t[7]=r,t[8]=c);let l;t[9]!==i||t[10]!==n.ipynb.includeOutputs||t[11]!==c?(l=(0,X.jsx)(yr,{label:`Include outputs`,descriptions:s,checked:n.ipynb.includeOutputs,disabled:i,onCheckedChange:c}),t[9]=i,t[10]=n.ipynb.includeOutputs,t[11]=c,t[12]=l):l=t[12];let u;return t[13]!==o||t[14]!==l?(u=(0,X.jsxs)(vr,{children:[o,l]}),t[13]=o,t[14]=l,t[15]=u):u=t[15],u}function hr(e){let t=(0,Z.c)(30),{options:n,updateOptions:r,disabled:i}=e,a;t[0]===r?a=t[1]:(a=e=>r(`pdf`,{preset:e}),t[0]=r,t[1]=a);let o;t[2]!==i||t[3]!==n.pdf.preset||t[4]!==a?(o=(0,X.jsx)(br,{label:`Layout`,value:n.pdf.preset,disabled:i,onValueChange:a,options:cr}),t[2]=i,t[3]=n.pdf.preset,t[4]=a,t[5]=o):o=t[5];let s;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(s={checked:`Includes code cells in the PDF.`,unchecked:`Leaves code cells out of the PDF.`},t[6]=s):s=t[6];let c;t[7]===r?c=t[8]:(c=e=>r(`pdf`,{includeInputs:e}),t[7]=r,t[8]=c);let l;t[9]!==i||t[10]!==n.pdf.includeInputs||t[11]!==c?(l=(0,X.jsx)(yr,{label:`Include code`,descriptions:s,checked:n.pdf.includeInputs,disabled:i,onCheckedChange:c}),t[9]=i,t[10]=n.pdf.includeInputs,t[11]=c,t[12]=l):l=t[12];let u;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(u={checked:`Keeps the outputs currently shown in the notebook.`,unchecked:`Leaves cell outputs out of the PDF.`},t[13]=u):u=t[13];let d;t[14]===r?d=t[15]:(d=e=>r(`pdf`,{includeOutputs:e}),t[14]=r,t[15]=d);let f;t[16]!==i||t[17]!==n.pdf.includeOutputs||t[18]!==d?(f=(0,X.jsx)(yr,{label:`Include outputs`,descriptions:u,checked:n.pdf.includeOutputs,disabled:i,onCheckedChange:d}),t[16]=i,t[17]=n.pdf.includeOutputs,t[18]=d,t[19]=f):f=t[19];let p;t[20]!==i||t[21]!==n.pdf.preset||t[22]!==n.pdf.webpdf||t[23]!==r?(p=n.pdf.preset===`document`?(0,X.jsx)(br,{label:`Method`,value:n.pdf.webpdf?`browser`:`latex`,disabled:i,onValueChange:e=>r(`pdf`,{webpdf:e===`browser`}),options:lr}):null,t[20]=i,t[21]=n.pdf.preset,t[22]=n.pdf.webpdf,t[23]=r,t[24]=p):p=t[24];let m;return t[25]!==o||t[26]!==l||t[27]!==f||t[28]!==p?(m=(0,X.jsxs)(vr,{children:[o,l,f,p]}),t[25]=o,t[26]=l,t[27]=f,t[28]=p,t[29]=m):m=t[29],m}function gr(e){let t=(0,Z.c)(6),{options:n,updateOptions:r,disabled:i}=e,a;t[0]===r?a=t[1]:(a=e=>r(`script`,{type:e}),t[0]=r,t[1]=a);let o;return t[2]!==i||t[3]!==n.script.type||t[4]!==a?(o=(0,X.jsx)(vr,{children:(0,X.jsx)(br,{label:`Format`,value:n.script.type,disabled:i,onValueChange:a,options:ur})}),t[2]=i,t[3]=n.script.type,t[4]=a,t[5]=o):o=t[5],o}function _r(){return null}function vr(e){let t=(0,Z.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,X.jsx)(`div`,{className:`divide-y rounded-md border`,children:n}),t[0]=n,t[1]=r),r}function yr(e){let t=(0,Z.c)(26),{label:n,descriptions:r,descriptionOverride:i,checked:a,disabled:o,onCheckedChange:s}=e,c=(0,Q.useId)(),l=`${c}-description`,u=i??(a?r.checked:r.unchecked),d;t[0]===i?d=t[1]:(d=i?[i]:[],t[0]=i,t[1]=d);let f;t[2]!==r.checked||t[3]!==r.unchecked||t[4]!==d?(f=[r.checked,r.unchecked,...d],t[2]=r.checked,t[3]=r.unchecked,t[4]=d,t[5]=f):f=t[5];let p=f,m;t[6]!==c||t[7]!==n?(m=(0,X.jsx)(`label`,{htmlFor:c,className:`text-sm font-medium leading-5`,children:n}),t[6]=c,t[7]=n,t[8]=m):m=t[8];let h;t[9]!==u||t[10]!==l||t[11]!==p?(h=(0,X.jsx)(Tr,{id:l,description:u,possibleDescriptions:p}),t[9]=u,t[10]=l,t[11]=p,t[12]=h):h=t[12];let g;t[13]!==m||t[14]!==h?(g=(0,X.jsxs)(`div`,{className:`min-w-0`,children:[m,h]}),t[13]=m,t[14]=h,t[15]=g):g=t[15];let _;t[16]!==a||t[17]!==l||t[18]!==o||t[19]!==c||t[20]!==n||t[21]!==s?(_=(0,X.jsx)(q,{id:c,size:`sm`,checked:a,disabled:o,onCheckedChange:s,"aria-label":n,"aria-describedby":l}),t[16]=a,t[17]=l,t[18]=o,t[19]=c,t[20]=n,t[21]=s,t[22]=_):_=t[22];let v;return t[23]!==g||t[24]!==_?(v=(0,X.jsxs)(`div`,{className:`flex min-h-14 items-center justify-between gap-4 px-3 py-2`,children:[g,_]}),t[23]=g,t[24]=_,t[25]=v):v=t[25],v}function br(e){let t=(0,Z.c)(31),{label:n,value:r,disabled:i,onValueChange:a,options:o}=e,s=(0,Q.useId)(),c=`${s}-description`,l;t[0]!==o||t[1]!==r?(l=o.find(e=>e.value===r)?.description,t[0]=o,t[1]=r,t[2]=l):l=t[2];let u=l,d;t[3]===n?d=t[4]:(d=(0,X.jsx)(`div`,{className:`text-sm font-medium leading-5`,children:n}),t[3]=n,t[4]=d);let f=u??``,p;t[5]===o?p=t[6]:(p=o.map(xr),t[5]=o,t[6]=p);let m;t[7]!==c||t[8]!==f||t[9]!==p?(m=(0,X.jsx)(Tr,{id:c,description:f,possibleDescriptions:p}),t[7]=c,t[8]=f,t[9]=p,t[10]=m):m=t[10];let h;t[11]!==d||t[12]!==m?(h=(0,X.jsxs)(`div`,{className:`min-w-0`,children:[d,m]}),t[11]=d,t[12]=m,t[13]=h):h=t[13];let g;t[14]===a?g=t[15]:(g=e=>a(e),t[14]=a,t[15]=g);let _;if(t[16]!==s||t[17]!==o){let e;t[19]===s?e=t[20]:(e=(e,t)=>{let n=`${s}-${t}`;return(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(C,{id:n,value:e.value}),(0,X.jsx)(`label`,{htmlFor:n,className:`text-sm`,children:e.label})]},e.value)},t[19]=s,t[20]=e),_=o.map(e),t[16]=s,t[17]=o,t[18]=_}else _=t[18];let v;t[21]!==c||t[22]!==i||t[23]!==n||t[24]!==g||t[25]!==_||t[26]!==r?(v=(0,X.jsx)(y,{value:r,onValueChange:g,className:`flex shrink-0 flex-wrap gap-x-5 gap-y-2 sm:justify-end`,"aria-label":n,"aria-describedby":c,disabled:i,children:_}),t[21]=c,t[22]=i,t[23]=n,t[24]=g,t[25]=_,t[26]=r,t[27]=v):v=t[27];let b;return t[28]!==h||t[29]!==v?(b=(0,X.jsxs)(`div`,{className:`flex min-h-14 flex-col items-stretch gap-2 px-3 py-2 sm:flex-row sm:items-center sm:justify-between sm:gap-4`,children:[h,v]}),t[28]=h,t[29]=v,t[30]=b):b=t[30],b}function xr(e){return e.description}function Sr(e){let t=(0,Z.c)(34),{label:n,value:r,disabled:i,onValueChange:a,options:o}=e,s=(0,Q.useId)(),c=`${s}-description`,l;t[0]!==o||t[1]!==r?(l=o.find(e=>e.value===r)?.description,t[0]=o,t[1]=r,t[2]=l):l=t[2];let u=l,d;t[3]!==s||t[4]!==n?(d=(0,X.jsx)(`label`,{htmlFor:s,className:`text-sm font-medium leading-5`,children:n}),t[3]=s,t[4]=n,t[5]=d):d=t[5];let f=u??``,p;t[6]===o?p=t[7]:(p=o.map(wr),t[6]=o,t[7]=p);let m;t[8]!==c||t[9]!==f||t[10]!==p?(m=(0,X.jsx)(Tr,{id:c,description:f,possibleDescriptions:p}),t[8]=c,t[9]=f,t[10]=p,t[11]=m):m=t[11];let h;t[12]!==d||t[13]!==m?(h=(0,X.jsxs)(`div`,{className:`min-w-0`,children:[d,m]}),t[12]=d,t[13]=m,t[14]=h):h=t[14];let g;t[15]===a?g=t[16]:(g=e=>a(e),t[15]=a,t[16]=g);let _;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,X.jsx)(xe,{}),t[17]=_):_=t[17];let v;t[18]!==c||t[19]!==s?(v=(0,X.jsx)(Te,{id:s,"aria-describedby":c,className:`h-8 w-full shrink-0 sm:w-44`,children:_}),t[18]=c,t[19]=s,t[20]=v):v=t[20];let y;t[21]===o?y=t[22]:(y=o.map(Cr),t[21]=o,t[22]=y);let b;t[23]===y?b=t[24]:(b=(0,X.jsx)(Ce,{children:y}),t[23]=y,t[24]=b);let x;t[25]!==i||t[26]!==b||t[27]!==g||t[28]!==v||t[29]!==r?(x=(0,X.jsxs)(Ee,{value:r,disabled:i,onValueChange:g,children:[v,b]}),t[25]=i,t[26]=b,t[27]=g,t[28]=v,t[29]=r,t[30]=x):x=t[30];let S;return t[31]!==x||t[32]!==h?(S=(0,X.jsxs)(`div`,{className:`flex min-h-14 flex-col items-stretch gap-2 px-3 py-2 sm:flex-row sm:items-center sm:justify-between sm:gap-4`,children:[h,x]}),t[31]=x,t[32]=h,t[33]=S):S=t[33],S}function Cr(e){return(0,X.jsx)(Se,{value:e.value,children:e.label},e.value)}function wr(e){return e.description}function Tr(e){let t=(0,Z.c)(15),{id:n,description:r,possibleDescriptions:i}=e,a;t[0]===i?a=t[1]:(a=new Set(i),t[0]=i,t[1]=a);let o;t[2]===a?o=t[3]:(o=[...a],t[2]=a,t[3]=o);let s;t[4]!==r||t[5]!==o?(s=o.filter(e=>e!==r),t[4]=r,t[5]=o,t[6]=s):s=t[6];let c=s,l;t[7]!==r||t[8]!==n?(l=(0,X.jsx)(`p`,{id:n,"aria-live":`polite`,className:`col-start-1 row-start-1`,children:r}),t[7]=r,t[8]=n,t[9]=l):l=t[9];let u;t[10]===c?u=t[11]:(u=c.map(Er),t[10]=c,t[11]=u);let d;return t[12]!==l||t[13]!==u?(d=(0,X.jsxs)(`div`,{className:`mt-0.5 grid text-xs leading-4 text-muted-foreground`,children:[l,u]}),t[12]=l,t[13]=u,t[14]=d):d=t[14],d}function Er(e){return(0,X.jsx)(`p`,{"aria-hidden":!0,className:`invisible col-start-1 row-start-1`,children:e},e)}var Dr={"playwright-chromium":{description:`PDF export requires Playwright Chromium.`}};function Or(e){let t=(0,Z.c)(10),{status:n}=e;if(n.available&&!n.availabilityCheckFailed)return null;if(n.reason?.type===`checking-requirements`){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,X.jsxs)(`span`,{className:`ml-auto flex shrink-0`,children:[(0,X.jsx)(St,{size:`small`,className:`size-3`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Checking requirements`})]}),t[0]=e):e=t[0],e}let r=n.availabilityCheckFailed?`Requirements unknown`:`Unavailable`,i=n.availabilityCheckFailed?`text-muted-foreground`:`text-(--yellow-11)`,a;t[1]===i?a=t[2]:(a=J(`size-3`,i),t[1]=i,t[2]=a);let o;t[3]===a?o=t[4]:(o=(0,X.jsx)(E,{className:a}),t[3]=a,t[4]=o);let s;t[5]===r?s=t[6]:(s=(0,X.jsx)(`span`,{className:`sr-only`,children:r}),t[5]=r,t[6]=s);let c;return t[7]!==o||t[8]!==s?(c=(0,X.jsxs)(`span`,{className:`ml-auto flex shrink-0`,children:[o,s]}),t[7]=o,t[8]=s,t[9]=c):c=t[9],c}function kr(e){let t=(0,Z.c)(7),{format:n,formatLabel:r,status:i,onInstall:a,isInstalling:o}=e,s=o!==void 0&&o;if(i.availabilityCheckFailed){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,X.jsx)(`div`,{className:`mb-2.5`,children:(0,X.jsx)(Ar,{children:`Couldn't check whether this export is available. You can still try it.`})}),t[0]=e):e=t[0],e}if(!i.reason)return null;let c;return t[1]!==n||t[2]!==r||t[3]!==s||t[4]!==a||t[5]!==i.reason?(c=(0,X.jsx)(`div`,{className:`mb-2.5`,children:(0,X.jsx)(jr,{format:n,formatLabel:r,reason:i.reason,onInstall:a,isInstalling:s})}),t[1]=n,t[2]=r,t[3]=s,t[4]=a,t[5]=i.reason,t[6]=c):c=t[6],c}function Ar(e){let t=(0,Z.c)(9),{children:n,onInstall:r,isInstalling:i}=e,a=i!==void 0&&i,o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,X.jsx)(E,{className:`size-4 shrink-0`}),t[0]=o):o=t[0];let s;t[1]===n?s=t[2]:(s=(0,X.jsx)(`span`,{className:`min-w-0 flex-1`,children:n}),t[1]=n,t[2]=s);let c;t[3]!==a||t[4]!==r?(c=r?(0,X.jsxs)(Le,{type:`button`,variant:`outline`,size:`xs`,className:`shrink-0 border-input bg-background text-foreground hover:border-input hover:bg-muted hover:text-foreground`,disabled:a,"aria-busy":a,onClick:r,children:[a?(0,X.jsx)(St,{size:`small`,className:`mr-1.5 size-3.5`}):(0,X.jsx)(tn,{className:`mr-1.5 size-3.5`}),`Install`]}):null,t[3]=a,t[4]=r,t[5]=c):c=t[5];let l;return t[6]!==s||t[7]!==c?(l=(0,X.jsxs)(It,{variant:`warning`,className:`flex items-center gap-2.5 px-3 py-2 text-(--yellow-12) has-[svg]:pl-3 [&>svg]:static [&>svg+div]:translate-y-0`,children:[o,(0,X.jsxs)(Ft,{className:`flex min-w-0 flex-1 items-center gap-3 text-sm leading-5`,children:[s,c]})]}),t[6]=s,t[7]=c,t[8]=l):l=t[8],l}function jr(e){let t=(0,Z.c)(22),{format:n,formatLabel:r,reason:i,onInstall:a,isInstalling:o}=e;switch(i.type){case`checking-requirements`:{let e;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,X.jsx)(St,{className:`size-4 shrink-0`,size:`small`}),t[0]=e):e=t[0];let n;return t[1]===r?n=t[2]:(n=(0,X.jsxs)(It,{role:`status`,variant:`info`,className:`flex items-center gap-2.5 p-3 has-[svg]:pl-3 [&>svg]:static [&>svg+div]:translate-y-0`,children:[e,(0,X.jsxs)(Ft,{className:`min-w-0 flex-1 text-sm leading-5`,children:[`Checking `,r,` requirements…`]})]}),t[1]=r,t[2]=n),n}case`notebook-must-be-named`:{let e;return t[3]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,X.jsx)(Ar,{children:`Name and save this notebook before exporting.`}),t[3]=e):e=t[3],e}case`missing-packages`:{let e;t[4]===i.packages?e=t[5]:(e=i.packages.join(`, `),t[4]=i.packages,t[5]=e);let n;t[6]===e?n=t[7]:(n=(0,X.jsx)(`code`,{className:`break-words font-mono`,children:e}),t[6]=e,t[7]=n);let s;return t[8]!==r||t[9]!==o||t[10]!==a||t[11]!==n?(s=(0,X.jsxs)(Ar,{onInstall:a,isInstalling:o,children:[r,` export requires`,` `,n,`.`]}),t[8]=r,t[9]=o,t[10]=a,t[11]=n,t[12]=s):s=t[12],s}case`missing-setup`:{let e;t[13]!==a||t[14]!==i.requirements?(e=a?i.requirements.map(Nr).join(` `):(0,X.jsx)(`span`,{className:`block min-w-0`,children:i.requirements.map(Mr)}),t[13]=a,t[14]=i.requirements,t[15]=e):e=t[15];let n;return t[16]!==o||t[17]!==a||t[18]!==e?(n=(0,X.jsx)(Ar,{onInstall:a,isInstalling:o,children:e}),t[16]=o,t[17]=a,t[18]=e,t[19]=n):n=t[19],n}case`wasm-runtime`:{let e=n===`pdf`?`Use your browser's print dialog to save the current app view as a PDF.`:`Open this notebook in a local marimo session to use this export.`,r;return t[20]===e?r=t[21]:(r=(0,X.jsx)(Ar,{children:e}),t[20]=e,t[21]=r),r}default:ze(i)}}function Mr(e){let t=Dr[e.name];return(0,X.jsxs)(`span`,{className:`block`,children:[t.description,(0,X.jsx)(`code`,{className:`mt-1 block break-all font-mono`,children:e.command})]},e.name)}function Nr(e){return Dr[e.name].description}function Pr(e){return e.endsWith(`.myst.md`)?`mystmd`:e.endsWith(`.qmd`)?`qmd`:e.endsWith(`.mdx`)?`mdx`:`pymdown`}function Fr(e,t){let n=t??Pr(e),r=ft[n],i=pt.find(t=>e.endsWith(t)),a=Me.withoutExtension(e);i&&(a=e.slice(0,-i.length));let o=`${a}.${r}`;return o===e?`${e.slice(0,-(r.length+1))}.export.${r}`:o}function Ir(e){return Object.entries(e).flatMap(([e,t])=>t===null?[]:t===!0?[`--${e}`]:t===!1?[`--no-${e}`]:[`--${e}=${t}`])}function Lr(e){return e.preset===`document`?e.webpdf:null}var Rr={html:{subcommand:`html`,flags:({html:e})=>({"include-code":e.includeCode}),outputFilename:e=>Me.toHTML(e)},markdown:{subcommand:`md`,flags:({markdown:e})=>({flavor:e.flavor}),outputFilename:(e,{markdown:t})=>Fr(e,t.flavor)},ipynb:{subcommand:`ipynb`,flags:({ipynb:e})=>({sort:e.sortMode,"include-outputs":e.includeOutputs}),outputFilename:e=>Me.toIPYNB(e)},pdf:{subcommand:`pdf`,flags:({pdf:e})=>({as:e.preset,"include-inputs":e.includeInputs,"include-outputs":e.includeOutputs,webpdf:Lr(e)}),outputFilename:e=>Me.toPDF(e)},script:{subcommand:`script`,flags:()=>({}),outputFilename:e=>`${Me.withoutExtension(e)}.script.py`}};function zr({format:e,filename:t,options:n}){if(e===`png`||e===`script`&&n.script.type===`source`||!t)return null;let r=Rr[e];return[`marimo`,`export`,r.subcommand,Vt(t),...Ir(r.flags(n)),`-o`,Vt(r.outputFilename(t,n))].join(` `)}async function Br(e){let{exportOptions:t,captureOutputs:n,downloadPDF:r}=e;t.includeOutputs&&await n(),await r(t)}async function Vr({format:e,options:t,requests:n,sourceFilename:r,htmlFiles:i,getLayout:a,captureOutputs:o,capturePNG:s,downloadFile:c}){switch(e){case`html`:c(await n.exportAsHTML({download:!1,files:i,includeCode:t.html.includeCode,layout:await a()}));return;case`markdown`:c(await n.exportAsMarkdown({download:!1,flavor:t.markdown.flavor}));return;case`ipynb`:t.ipynb.includeOutputs&&await o(),c(await n.exportAsIPYNB({download:!1,sortMode:t.ipynb.sortMode,includeOutputs:t.ipynb.includeOutputs}));return;case`pdf`:await Br({exportOptions:t.pdf,captureOutputs:o,downloadPDF:async e=>{c(await n.exportAsPDF(e))}});return;case`script`:if(t.script.type===`source`){c({contents:(await n.readCode()).contents,filename:r,mediaType:`text/plain`});return}c(await n.exportAsScript({download:!1}));return;case`png`:await s();return;default:ze(e)}}var Hr={source:{actionLabel:`Export notebook source`,progressLabel:`notebook source`},flat:{actionLabel:`Export flat script`,progressLabel:`flat script`}};function Ur(e,t){if(e===`wasm`)return{status:`success`,data:null};switch(t.status){case`pending`:case`loading`:return{status:`pending`};case`error`:return{status:`error`};case`success`:return{status:`success`,data:t.data}}}function Wr(e,t){return e===`server`&&t?We.basename(t):Me.toPY(document.title)}function Gr({usesBrowserPrint:e,hasCommand:t,format:n,isNotebookSource:r}){return e?`Uses the browser's print settings for page size and filename.`:t?`Uses the current session state. The copied command exports the saved notebook.`:n!==`png`&&!r?`Save the notebook to copy an equivalent shell command.`:null}function Kr(e){let n=Lt(),[r,i]=t(er),[a,o]=t(tr),[s,c]=(0,Q.useState)(e??a),l=W()?`wasm`:`server`,u=Ve(),d=G(),[f,p]=(0,Q.useState)(!1),m=kt(async()=>l===`wasm`?null:u.getExportAvailability(),[l,u]),h=Ur(l,m),g=e=>ir({format:e,options:r,runtime:l,filename:n,availability:h}),_=g(s),v=d&&(_.reason?.type===`missing-packages`||_.reason?.type===`missing-setup`),y=Hn.map(e=>({format:e,status:g(e)})),b=rr(l,s),x=dr[s],S=s===`script`&&r.script.type===`source`,{actionLabel:C,progressLabel:w}=s===`script`?Hr[r.script.type]:{actionLabel:x.actionLabel,progressLabel:x.label},T=b?null:zr({format:s,filename:n,options:r}),E=Gr({usesBrowserPrint:b,hasCommand:!!T,format:s,isNotebookSource:S});return(0,Q.useEffect)(()=>{e&&o(e)},[e,o]),{formats:y,options:r,selected:{format:s,status:_,usesBrowserPrint:b,actionLabel:C,command:T,footerDescription:E},exportRequest:{format:s,options:r,sourceFilename:Wr(l,n),available:_.available,usesBrowserPrint:b,progressLabel:w},selectFormat:e=>{qn(e)&&(c(e),o(e))},updateOptions:(e,t)=>{i(n=>{let r={...n};return r[e]={...n[e],...t},r})},canInstall:v,isInstalling:f,installRequirements:async()=>{if(!(!v||f||s===`png`)){p(!0);try{let e=await u.installExportRequirements({format:s});m.setData(e)}catch{}finally{p(!1)}}}}}async function qr(e){let t=document.getElementById(`App`);if(!t){let e=`The current app view could not be captured.`;throw Dt({title:`Failed to download as PNG`,description:e,variant:`danger`}),Error(e)}let n=e?.style.visibility,r=e?.classList.contains(`print:hidden`);if(!await je({element:t,filename:document.title,prepare:()=>{let t=Ne();return e&&(e.classList.add(`print:hidden`),e.style.visibility=`hidden`),()=>{t(),e&&(r||e.classList.remove(`print:hidden`),e.style.visibility=n??``)}}}))throw Error(`Failed to capture the current app view.`)}function Jr(e){e(),requestAnimationFrame(()=>{setTimeout(()=>{window.print()},0)})}function Yr({format:e,options:t,sourceFilename:n,available:r,usesBrowserPrint:i,progressLabel:a,onClose:o}){let s=Ve(),c=Yt(),[l,u]=(0,Q.useState)(!1),d=(0,Q.useRef)(null),f=(0,Q.useRef)(!0);(0,Q.useEffect)(()=>(f.current=!0,()=>{f.current=!1}),[]);let p=async e=>{await Xt({takeScreenshots:()=>c({progress:e}),updateCellOutputs:s.updateCellOutputs})},m=async()=>{await K(()=>qr(d.current?.parentElement??null))};return{dialogRef:d,isExporting:l,submit:async()=>{if(!(!r||l)){if(i){Jr(o);return}u(!0);try{await Ae(`Exporting ${a}…`,async r=>{await Vr({format:e,options:t,requests:s,sourceFilename:n,htmlFiles:Ye.INSTANCE.filenames(),getLayout:Ze,captureOutputs:()=>p(r),capturePNG:m,downloadFile:ke})}),f.current&&o()}catch(e){z.error(`Export failed`,e)}finally{f.current&&u(!1)}}}}}function Xr(e){let t=(0,Z.c)(15),{initialFormat:n,onClose:r}=e,i=Kr(n),a,o,s;t[0]===i?(a=t[1],o=t[2],s=t[3]):({exportRequest:a,selectFormat:o,...s}=i,t[0]=i,t[1]=a,t[2]=o,t[3]=s);let c;t[4]!==a||t[5]!==r?(c={...a,onClose:r},t[4]=a,t[5]=r,t[6]=c):c=t[6];let l=Yr(c),u;t[7]!==l||t[8]!==o||t[9]!==s?(u=e=>{!l.isExporting&&!s.isInstalling&&o(e)},t[7]=l,t[8]=o,t[9]=s,t[10]=u):u=t[10];let d;return t[11]!==l||t[12]!==s||t[13]!==u?(d={...s,...l,selectFormat:u},t[11]=l,t[12]=s,t[13]=u,t[14]=d):d=t[14],d}var Zr=`(min-width: 640px)`,Qr=e=>{let t=(0,Z.c)(75),{initialFormat:n,onClose:r,returnFocusRef:i}=e,a;t[0]!==n||t[1]!==r?(a={initialFormat:n,onClose:r},t[0]=n,t[1]=r,t[2]=a):a=t[2];let{dialogRef:o,isExporting:s,isInstalling:c,canInstall:l,formats:u,options:d,selected:f,selectFormat:p,updateOptions:m,installRequirements:h,submit:g}=Xr(a),_=s||c,v=De(Zr),{format:y,status:b,usesBrowserPrint:x,actionLabel:S,command:C,footerDescription:w}=f,T=dr[y],E=T.Options,D;t[3]===i?D=t[4]:(D=i?{onCloseAutoFocus:e=>{e.preventDefault(),i.current?.focus()}}:{},t[3]=i,t[4]=D);let O=D,ee;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(ee=(0,X.jsxs)(_t,{className:`border-b px-5 py-4 pr-12`,children:[(0,X.jsx)(bt,{children:`Export notebook`}),(0,X.jsx)(gt,{children:`Choose a format and adjust its options.`})]}),t[5]=ee):ee=t[5];let te=v?`vertical`:`horizontal`,ne;if(t[6]!==u||t[7]!==_){let e;t[9]===_?e=t[10]:(e=e=>{let{format:t,status:n}=e,r=dr[t];return(0,X.jsxs)(ge,{value:t,disabled:_,className:`min-w-0 justify-start gap-2 px-2.5 py-2 text-xs data-[state=active]:shadow-xs sm:w-full sm:text-sm`,"data-testid":`export-format-${t}`,children:[(0,X.jsx)(r.Icon,{className:`size-3.5 shrink-0`,strokeWidth:1.5}),(0,X.jsx)(`span`,{className:`truncate`,children:r.label}),(0,X.jsx)(Or,{status:n})]},t)},t[9]=_,t[10]=e),ne=u.map(e),t[6]=u,t[7]=_,t[8]=ne}else ne=t[8];let k;t[11]===ne?k=t[12]:(k=(0,X.jsx)(ve,{"aria-label":`Export format`,className:`grid max-h-none shrink-0 grid-cols-2 items-stretch justify-start gap-1 overflow-auto rounded-none border-b bg-muted/20 p-2 min-[360px]:grid-cols-3 sm:flex sm:h-full sm:flex-col sm:border-b-0 sm:border-r`,children:ne}),t[11]=ne,t[12]=k);let A;if(t[13]!==E||t[14]!==l||t[15]!==T.description||t[16]!==T.label||t[17]!==y||t[18]!==u||t[19]!==h||t[20]!==_||t[21]!==c||t[22]!==d||t[23]!==b||t[24]!==m||t[25]!==x){let e;t[27]!==E||t[28]!==l||t[29]!==T.description||t[30]!==T.label||t[31]!==y||t[32]!==h||t[33]!==_||t[34]!==c||t[35]!==d||t[36]!==b||t[37]!==m||t[38]!==x?(e=e=>{let{format:t}=e;return(0,X.jsxs)(_e,{value:t,className:`mt-0 min-h-0 min-w-0 overflow-y-auto px-4 py-3`,children:[(0,X.jsxs)(`div`,{className:`mb-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,children:T.label}),(0,X.jsx)(`p`,{className:`mt-0.5 text-sm text-muted-foreground`,children:T.description})]}),(0,X.jsx)(kr,{format:y,formatLabel:T.label,status:b,onInstall:l?h:void 0,isInstalling:c}),x?null:(0,X.jsx)(E,{options:d,updateOptions:m,disabled:_})]},t)},t[27]=E,t[28]=l,t[29]=T.description,t[30]=T.label,t[31]=y,t[32]=h,t[33]=_,t[34]=c,t[35]=d,t[36]=b,t[37]=m,t[38]=x,t[39]=e):e=t[39],A=u.map(e),t[13]=E,t[14]=l,t[15]=T.description,t[16]=T.label,t[17]=y,t[18]=u,t[19]=h,t[20]=_,t[21]=c,t[22]=d,t[23]=b,t[24]=m,t[25]=x,t[26]=A}else A=t[26];let j;t[40]!==y||t[41]!==p||t[42]!==te||t[43]!==k||t[44]!==A?(j=(0,X.jsxs)(ye,{value:y,onValueChange:p,orientation:te,className:`flex min-h-0 min-w-0 flex-col overflow-hidden sm:grid sm:grid-cols-[168px_minmax(0,1fr)]`,children:[k,A]}),t[40]=y,t[41]=p,t[42]=te,t[43]=k,t[44]=A,t[45]=j):j=t[45];let M;t[46]===C?M=t[47]:(M=C?(0,X.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 rounded-md border bg-background px-2.5 py-2 font-mono text-xs`,children:[(0,X.jsx)(`span`,{className:`select-none text-muted-foreground`,"aria-hidden":!0,children:`$`}),(0,X.jsx)(`code`,{className:`min-w-0 flex-1 overflow-x-auto whitespace-nowrap`,"data-testid":`export-cli-command`,"aria-label":`Equivalent POSIX shell command`,children:C}),(0,X.jsx)(jt,{value:C,className:`size-3.5`,buttonClassName:J(Fe({variant:`ghost`,size:`icon`}),`shrink-0`),tooltip:`Copy POSIX shell command`,ariaLabel:`Copy POSIX shell command`,toastTitle:`Command copied`})]}):null,t[46]=C,t[47]=M);let N=C&&`mt-3`,P;t[48]===N?P=t[49]:(P=J(`flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between`,N),t[48]=N,t[49]=P);let F;t[50]===w?F=t[51]:(F=w?(0,X.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:w}):null,t[50]=w,t[51]=F);let I=!b.available||_,re=!w&&`sm:ml-auto`,ie;t[52]===re?ie=t[53]:(ie=J(`border-(--blue-11) bg-(--blue-11) hover:border-(--blue-12) hover:bg-(--blue-12) sm:min-w-36 dark:border-(--blue-7) dark:bg-(--blue-5) dark:text-(--blue-12) dark:hover:border-(--blue-8) dark:hover:bg-(--blue-6)`,re),t[52]=re,t[53]=ie);let L;t[54]===s?L=t[55]:(L=s&&(0,X.jsx)(St,{size:`small`,className:`mr-2`,"aria-hidden":!0}),t[54]=s,t[55]=L);let ae=x?`Print to PDF`:S,R;t[56]!==s||t[57]!==g||t[58]!==I||t[59]!==ie||t[60]!==L||t[61]!==ae?(R=(0,X.jsxs)(Le,{type:`button`,disabled:I,"aria-busy":s,onClick:g,className:ie,"data-testid":`export-submit`,children:[L,ae]}),t[56]=s,t[57]=g,t[58]=I,t[59]=ie,t[60]=L,t[61]=ae,t[62]=R):R=t[62];let z;t[63]!==P||t[64]!==F||t[65]!==R?(z=(0,X.jsxs)(`div`,{className:P,children:[F,R]}),t[63]=P,t[64]=F,t[65]=R,t[66]=z):z=t[66];let B;t[67]!==z||t[68]!==M?(B=(0,X.jsxs)(`footer`,{className:`min-w-0 border-t bg-muted/20 px-4 py-3`,children:[M,z]}),t[67]=z,t[68]=M,t[69]=B):B=t[69];let V;return t[70]!==o||t[71]!==O||t[72]!==B||t[73]!==j?(V=(0,X.jsxs)(vt,{ref:o,className:`grid h-dvh max-h-[760px] min-w-0 w-[calc(100vw-2rem)] grid-rows-[auto_minmax(0,1fr)_auto] gap-0 overflow-hidden p-0 sm:top-[5vh] sm:h-[90vh] sm:max-h-[640px] sm:max-w-3xl`,"data-testid":`export-dialog`,...O,children:[ee,j,B]}),t[70]=o,t[71]=O,t[72]=B,t[73]=j,t[74]=V):V=t[74],V};function $r(e){let t=(0,Z.c)(5),{openPrompt:n,closeModal:r}=yt(),{sendCopy:i}=Ve(),a;return t[0]!==r||t[1]!==n||t[2]!==i||t[3]!==e?(a=()=>{if(!e)return null;let t=Ke.guessDeliminator(e),a=We.basename(e);n({title:`Copy notebook`,description:`Enter a new filename for the notebook copy.`,defaultValue:`_${a}`,confirmText:`Copy notebook`,spellCheck:!1,onConfirm:n=>{let a=t.join(We.dirname(e),n);i({source:e,destination:a}).then(()=>{r(),Dt({title:`Notebook copied`,description:`A copy of the notebook has been created.`}),Jt(a)})}})},t[0]=r,t[1]=n,t[2]=i,t[3]=e,t[4]=a):a=t[4],a}var ei=new k,ti=e=>ei.isSupported(e)?`markdown`:`code`,ni=()=>{let e=(0,Z.c)(3),{updateCellConfig:t}=l(),{saveCellConfig:n}=Ve(),r;return e[0]!==n||e[1]!==t?(r=async(e,r)=>{let i=T(),a={};for(let t of i.cellIds.inOrderIds){let n=i.cellData[t];n!==void 0&&n.config.hide_code!==e&&ti(n.code)===r&&(a[t]={hide_code:e})}let o=V.entries(a);if(o.length!==0){await n({configs:a});for(let[e,n]of o)t({cellId:e,config:n})}},e[0]=n,e[1]=t,e[2]=r):r=e[2],r},ri=e=>{e?.preventDefault(),e?.stopPropagation()};function ii(e){let n=(0,Z.c)(43),i;n[0]===e?i=n[1]:(i=e===void 0?{}:e,n[0]=e,n[1]=i);let{exportDialogReturnFocusRef:o}=i,_=Lt(),{openModal:v,closeModal:y}=yt(),{toggleApplication:b}=c(),{selectedPanel:S}=x(),[C]=t(se),w=r(ce),E=ni(),[D]=ie(),O=r(h),te=r(re),{updateCellConfig:k,undoDeleteCell:N,clearAllCellOutputs:P,addSetupCellIfDoesntExist:F,collapseAllCells:I,expandAllCells:z}=l(),B=Nt(),U=Mt(),oe=$r(_),le=a(In),G=a(ae),{handleClick:K}=R(),ue=a(L),q=a(er),{readCode:me,saveCellConfig:J}=Ve(),he=d(`database`),ge=d(`storage`),_e=M(),ve=r(g),ye=r(A),be=r(u),{selectedLayout:xe}=fe(),{setLayoutView:Se}=pe(),Ce=Fn(),we=D.sharing?.html??!0,Te=D.sharing?.wasm??!0,Ee=D.sharing?.molab??!0,De=xe===`slides`,ke;if(n[2]!==_e||n[3]!==F||n[4]!==te||n[5]!==ye||n[6]!==O||n[7]!==P||n[8]!==y||n[9]!==I||n[10]!==oe||n[11]!==he||n[12]!==ge||n[13]!==z||n[14]!==o||n[15]!==_||n[16]!==ve||n[17]!==De||n[18]!==w||n[19]!==v||n[20]!==K||n[21]!==me||n[22]!==B||n[23]!==U||n[24]!==J||n[25]!==xe||n[26]!==S||n[27]!==E||n[28]!==le||n[29]!==q||n[30]!==ue||n[31]!==Se||n[32]!==G||n[33]!==we||n[34]!==Ee||n[35]!==Te||n[36]!==b||n[37]!==Ce||n[38]!==N||n[39]!==be||n[40]!==k||n[41]!==C.mode){let e=[`db`,`sql`,...Ut],t=[`bucket`,`object storage`,...Gt],r=yi,i=(e,t)=>{t&&q(e=>Zn(e,t)),v((0,X.jsx)(Qr,{initialFormat:e,onClose:y,returnFocusRef:o}))};ke=[{icon:(0,X.jsx)(Oe,{size:14,strokeWidth:1.5}),label:`Export…`,additionalKeywords:[`download`,`html`,`markdown`,`ipynb`,`pdf`,`script`,`png`],handle:()=>i()},{icon:(0,X.jsx)(Oe,{size:14,strokeWidth:1.5}),label:`Download`,redundant:!0,handle:ri,dropdown:[{icon:(0,X.jsx)(Qe,{size:14,strokeWidth:1.5}),label:`Download as HTML`,handle:()=>i(`html`,{html:{includeCode:!0}})},{icon:(0,X.jsx)(Qe,{size:14,strokeWidth:1.5}),label:`Download as HTML (exclude code)`,handle:()=>i(`html`,{html:{includeCode:!1}})},{icon:(0,X.jsx)(Rt,{strokeWidth:1.5,style:{width:14,height:14}}),label:`Download as Markdown`,handle:()=>i(`markdown`)},{icon:(0,X.jsx)(ln,{size:14,strokeWidth:1.5}),label:`Download as ipynb`,handle:()=>i(`ipynb`)},{icon:(0,X.jsx)(tt,{size:14,strokeWidth:1.5}),label:`Download notebook source`,handle:()=>i(`script`,{script:{type:`source`}})},{icon:(0,X.jsx)(tt,{size:14,strokeWidth:1.5}),label:`Download flat script`,handle:()=>i(`script`,{script:{type:`flat`}})},{divider:!0,icon:(0,X.jsx)(mt,{size:14,strokeWidth:1.5}),label:`Download as PNG`,handle:()=>i(`png`)},De?{divider:!0,icon:(0,X.jsx)(at,{size:14,strokeWidth:1.5}),label:`Download as PDF`,handle:ri,dropdown:[{icon:(0,X.jsx)(at,{size:14,strokeWidth:1.5}),label:`Document Layout`,handle:()=>i(`pdf`,{pdf:{preset:`document`}})},{icon:(0,X.jsx)(at,{size:14,strokeWidth:1.5}),label:`Slides Layout`,hidden:W(),rightElement:(0,X.jsx)(`span`,{className:`ml-3 shrink-0 rounded-full border border-emerald-200 bg-emerald-50 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-emerald-700`,children:`Recommended`}),handle:()=>i(`pdf`,{pdf:{preset:`slides`}})}]}:{divider:!0,icon:(0,X.jsx)(at,{size:14,strokeWidth:1.5}),label:`Download as PDF`,handle:()=>i(`pdf`,{pdf:{preset:`document`}})}]},{icon:(0,X.jsx)(m,{size:14,strokeWidth:1.5}),label:`Pair with an agent`,hidden:W(),handle:async()=>{v((0,X.jsx)(Ht,{onClose:y}))}},{icon:(0,X.jsx)(fn,{size:14,strokeWidth:1.5}),label:`Share`,handle:ri,hidden:!we&&!Te&&!Ee,dropdown:[{icon:(0,X.jsx)(ot,{size:14,strokeWidth:1.5}),label:`Publish HTML to web`,hidden:!we,handle:async()=>{v((0,X.jsx)(jn,{onClose:y}))}},{icon:(0,X.jsx)(xt,{size:14,strokeWidth:1.5}),label:`Create WebAssembly link`,hidden:!Te,handle:async()=>{let e=await me(),t=Pt({code:e.contents});await At(t),Dt({title:`Copied`,description:`Link copied to clipboard.`})}},{icon:(0,X.jsx)(qt,{size:14,strokeWidth:1.5}),label:`Create molab notebook`,hidden:!Ee,handle:async()=>{let e=await me(),t=Pt({code:e.contents,baseUrl:`${H.molab}/new`});window.open(t,`_blank`)}}]},{icon:(0,X.jsx)(un,{size:14,strokeWidth:1.5}),label:`Helper panel`,redundant:!0,handle:ri,dropdown:j.flatMap(e=>{let t=e.type===`ai`&&!te;if(ne({panel:e,capabilities:O,aiEnabled:te})&&!t)return[];let{type:n,Icon:i,additionalKeywords:a}=e;return{label:Be.startCase(n),rightElement:r(S===n),icon:(0,X.jsx)(i,{size:14,strokeWidth:1.5}),handle:()=>{if(t){K(`ai`,`ai-features`);return}b(n)},additionalKeywords:a}})},{icon:(0,X.jsx)(dn,{size:14,strokeWidth:1.5}),label:`Present as`,handle:ri,dropdown:[{icon:C.mode===`present`?(0,X.jsx)(f,{size:14,strokeWidth:1.5}):(0,X.jsx)(qe,{size:14,strokeWidth:1.5}),label:`Toggle app view`,hotkey:`global.hideCode`,handle:()=>{Ce()}},...de.map((e,t)=>{let n=zn(e);return{divider:t===0,label:Bn(e),icon:(0,X.jsx)(n,{size:14,strokeWidth:1.5}),rightElement:(0,X.jsx)(`div`,{className:`w-8 flex justify-end`,children:xe===e&&(0,X.jsx)($e,{size:14})}),handle:()=>{Se(e),C.mode===`edit`&&Ce()}}})]},{icon:(0,X.jsx)(on,{size:14,strokeWidth:1.5}),label:`Duplicate notebook`,hidden:!_||W(),handle:oe},{icon:(0,X.jsx)(en,{size:14,strokeWidth:1.5}),label:`Copy code to clipboard`,hidden:!_,handle:async()=>{let e=await me();await At(e.contents),Dt({title:`Copied`,description:`Code copied to clipboard.`})}},{icon:(0,X.jsx)(et,{size:14,strokeWidth:1.5}),label:`Enable all cells`,hidden:!ve||w,handle:async()=>{let e=T(),t=p(e),n=V.fromEntries(t.map(vi));await J({configs:n});for(let e of t)k({cellId:e,config:{disabled:!1}})}},{divider:!0,icon:(0,X.jsx)(rn,{size:14,strokeWidth:1.5}),label:`Add setup cell`,handle:()=>{F({})}},{icon:(0,X.jsx)(Ue,{size:14,strokeWidth:1.5}),label:`Add database connection`,additionalKeywords:e,handle:()=>{v((0,X.jsx)(Wt,{onClose:y}))},dropdown:he.length===0?void 0:[...he.map(e=>({icon:(0,X.jsx)(m,{size:14,strokeWidth:1.5}),label:`Add ${e.displayName}`,description:`Detected in your environment`,handle:()=>_e(e)})),{divider:!0,icon:(0,X.jsx)(Ue,{size:14,strokeWidth:1.5}),label:`Browse all connections`,additionalKeywords:e,handle:()=>{v((0,X.jsx)(Wt,{onClose:y}))}}]},{icon:(0,X.jsx)(ut,{size:14,strokeWidth:1.5}),label:`Add remote storage`,additionalKeywords:t,handle:()=>{v((0,X.jsx)(Wt,{defaultTab:`storage`,onClose:y}))},dropdown:ge.length===0?void 0:[...ge.map(e=>({icon:(0,X.jsx)(m,{size:14,strokeWidth:1.5}),label:`Add ${e.displayName}`,description:`Detected in your environment`,handle:()=>_e(e)})),{divider:!0,icon:(0,X.jsx)(ut,{size:14,strokeWidth:1.5}),label:`Browse all connections`,additionalKeywords:t,handle:()=>{v((0,X.jsx)(Wt,{defaultTab:`storage`,onClose:y}))}}]},{icon:(0,X.jsx)(mn,{size:14,strokeWidth:1.5}),label:be,hidden:!ye||w,handle:()=>{N()}},{icon:(0,X.jsx)(pn,{size:14,strokeWidth:1.5}),label:`Restart kernel`,variant:`danger`,handle:B,additionalKeywords:[`reset`,`reload`,`restart`]},{icon:(0,X.jsx)(an,{size:14,strokeWidth:1.5}),label:`Re-run all cells`,redundant:!0,hotkey:`global.runAll`,handle:async()=>{U()}},{icon:(0,X.jsx)(ee,{size:14,strokeWidth:1.5}),label:`Clear all outputs`,redundant:!0,handle:()=>{P()}},{icon:(0,X.jsx)(s,{size:14,strokeWidth:1.5}),label:`Show all code`,hotkey:`global.showAllCode`,handle:()=>E(!1,`code`),redundant:!0},{icon:(0,X.jsx)(rt,{size:14,strokeWidth:1.5}),label:`Hide all code`,hotkey:`global.hideAllCode`,handle:()=>E(!0,`code`),redundant:!0},{icon:(0,X.jsx)(s,{size:14,strokeWidth:1.5}),label:`Show all markdown code`,hotkey:`global.showAllMarkdownCode`,handle:()=>E(!1,`markdown`),redundant:!0},{icon:(0,X.jsx)(rt,{size:14,strokeWidth:1.5}),label:`Hide all markdown code`,hotkey:`global.hideAllMarkdownCode`,handle:()=>E(!0,`markdown`),redundant:!0},{icon:(0,X.jsx)($t,{size:14,strokeWidth:1.5}),label:`Collapse all sections`,hotkey:`global.collapseAllSections`,handle:I,redundant:!0},{icon:(0,X.jsx)(Qt,{size:14,strokeWidth:1.5}),label:`Expand all sections`,hotkey:`global.expandAllSections`,handle:z,redundant:!0},{divider:!0,icon:(0,X.jsx)(nn,{size:14,strokeWidth:1.5}),label:`Command palette`,hotkey:`global.commandPalette`,handle:()=>le(_i)},{icon:(0,X.jsx)(Je,{size:14,strokeWidth:1.5}),label:`Keyboard shortcuts`,hotkey:`global.showHelp`,handle:()=>ue(gi)},{icon:(0,X.jsx)(wt,{size:14,strokeWidth:1.5}),label:`User settings`,handle:()=>G(hi),redundant:!0,additionalKeywords:[`preferences`,`options`,`configuration`]},{icon:(0,X.jsx)(cn,{size:14,strokeWidth:1.5}),label:`Report an issue`,additionalKeywords:[`feedback`,`bug`,`issue`,`report`,`diagnostics`],handle:()=>v((0,X.jsx)(Dn,{onClose:y}))},{icon:(0,X.jsx)(it,{size:14,strokeWidth:1.5}),label:`Resources`,handle:ri,dropdown:[{icon:(0,X.jsx)(He,{size:14,strokeWidth:1.5}),label:`Documentation`,handle:mi},{icon:(0,X.jsx)(Kt,{className:`h-3.5 w-3.5`}),label:`GitHub`,handle:pi},{icon:(0,X.jsx)(st,{size:14,strokeWidth:1.5}),label:`Discord Community`,handle:fi},{icon:(0,X.jsx)(lt,{className:`h-3.5 w-3.5`}),label:`YouTube`,handle:di},{icon:(0,X.jsx)(Ge,{size:14,strokeWidth:1.5}),label:`Changelog`,handle:ui}]},{divider:!0,icon:(0,X.jsx)(dt,{size:14,strokeWidth:1.5}),label:`Open home`,hidden:!location.search.includes(`file`),handle:li},{icon:(0,X.jsx)(qt,{size:14,strokeWidth:1.5}),label:`New notebook`,hidden:!location.search.includes(`file`),handle:ci}].filter(si).map(ai),n[2]=_e,n[3]=F,n[4]=te,n[5]=ye,n[6]=O,n[7]=P,n[8]=y,n[9]=I,n[10]=oe,n[11]=he,n[12]=ge,n[13]=z,n[14]=o,n[15]=_,n[16]=ve,n[17]=De,n[18]=w,n[19]=v,n[20]=K,n[21]=me,n[22]=B,n[23]=U,n[24]=J,n[25]=xe,n[26]=S,n[27]=E,n[28]=le,n[29]=q,n[30]=ue,n[31]=Se,n[32]=G,n[33]=we,n[34]=Ee,n[35]=Te,n[36]=b,n[37]=Ce,n[38]=N,n[39]=be,n[40]=k,n[41]=C.mode,n[42]=ke}else ke=n[42];return ke}function ai(e){return e.dropdown?{...e,dropdown:e.dropdown.filter(oi)}:e}function oi(e){return!e.hidden}function si(e){return!e.hidden}function ci(){let e=Ot();window.open(e,`_blank`)}function li(){let e=document.baseURI.split(`?`)[0];window.open(e,`_blank`,`noopener`)}function ui(){window.open(H.releasesPage,`_blank`)}function di(){window.open(H.youtube,`_blank`)}function fi(){window.open(H.discordLink,`_blank`)}function pi(){window.open(H.githubPage,`_blank`)}function mi(){window.open(H.docsPage,`_blank`)}function hi(e){return!e}function gi(e){return!e}function _i(e){return!e}function vi(e){return[e,{disabled:!1}]}function yi(e){return(0,X.jsx)(`div`,{className:`w-8 flex justify-end`,children:e&&(0,X.jsx)($e,{size:14})})}export{Fn as a,mn as c,nn as d,tn as f,In as i,cn as l,ni as n,En as o,en as p,Ln as r,hn as s,ii as t,rn as u};
|