@marimo-team/islands 0.25.3-dev17 → 0.25.3-dev170
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/{ConnectedDataExplorerComponent-CNMliVzw.js → ConnectedDataExplorerComponent-BbSXV-Xa.js} +21 -19
- package/dist/{ErrorBoundary-jaGao4LA.js → ErrorBoundary-NE86qEWZ.js} +18 -18
- package/dist/{abnfDiagram-VCTEODGH-D-Ez91gV.js → abnfDiagram-VCTEODGH-D7n07nXf.js} +2 -2
- package/dist/any-language-editor-3E24SnCV.js +75 -0
- package/dist/{architectureDiagram-5GKGNRK7-CTpcNtO8.js → architectureDiagram-5GKGNRK7-D6CjRib5.js} +1 -1
- package/dist/{arrays-CN1djC4k.js → arrays-R6JsImiT.js} +8 -0
- package/dist/assets/__vite-browser-external-DVeFf2e7.js +1 -0
- package/dist/assets/worker-C1pfNBsx.js +113 -0
- package/dist/{button-CvjkwdSk.js → button-BQRdqQi1.js} +199 -192
- package/dist/{capabilities-CQ5IjhzL.js → capabilities-CI4xUPsp.js} +2 -2
- package/dist/{chat-ui-DaHynk8g.js → chat-ui-CC7GekpG.js} +1144 -1143
- package/dist/{check-EDwSwP89.js → check-SpOMoCLP.js} +1 -1
- package/dist/{chunk-IMKFNOWR-DGxi-zeo.js → chunk-IMKFNOWR-6dtPz7uS.js} +1 -1
- package/dist/{chunk-SHT3W25Y-CV9J3rAB.js → chunk-SHT3W25Y-BwnFNKDA.js} +1 -1
- package/dist/{chunk-SVP7TREG-BL-9Fqgg.js → chunk-SVP7TREG-D2eV4vBJ.js} +1 -1
- package/dist/{chunk-TICWLB2K-Cu_XMjDM.js → chunk-TICWLB2K-BDs4-_-r.js} +1 -1
- package/dist/{chunk-YOKDWASO-DPZk8vhS.js → chunk-YOKDWASO-DKplTrBY.js} +20 -20
- package/dist/{classDiagram-ZZMXUADV-BXXV13Hq.js → classDiagram-ZZMXUADV-DCJnf_8v.js} +2 -2
- package/dist/{classDiagram-v2-VYDZK3BY-B7FXJ1Cp.js → classDiagram-v2-VYDZK3BY-BOmSzPBD.js} +2 -2
- package/dist/{code-visibility-Bub8tnaA.js → code-visibility-Bzvc6ajl.js} +25 -25
- package/dist/{common-CdT0nyN1.js → common-Ciw4zkh2.js} +6933 -6754
- package/dist/{copy-icon-Ft7t9bqz.js → copy-icon-C1trdvVt.js} +3 -3
- package/dist/{cynefinDiagram-5FMLGOSQ-CH96rwba.js → cynefinDiagram-5FMLGOSQ-Bln_Soky.js} +1 -1
- package/dist/{dagre-GXQ25YYZ-BD3PmpFY.js → dagre-GXQ25YYZ-D-nf7WzW.js} +1 -1
- package/dist/{data-grid-overlay-editor-Dbcss6_2.js → data-grid-overlay-editor-AQREmxI7.js} +5 -5
- package/dist/{data-grid-types-BH_r7g7l.js → data-grid-types-0PJ-9N5n.js} +1 -1
- package/dist/{diagram-S7CK7UJ4-BsSJJldB.js → diagram-S7CK7UJ4-PsgSMkY2.js} +1 -1
- package/dist/{diagram-UQ7AKVKN-muQtNZc4.js → diagram-UQ7AKVKN-DfwfUuSw.js} +1 -1
- package/dist/{diagram-VX7I27RA-CdhuZAqR.js → diagram-VX7I27RA-C9_e-oMc.js} +1 -1
- package/dist/{diagram-Z3DM3KII-BD8mXjOj.js → diagram-Z3DM3KII-CWLa5tuY.js} +1 -1
- package/dist/{dialog-CEBFZNyc.js → dialog-DgeqyrEZ.js} +3 -3
- package/dist/{dist-DpBpA_n1.js → dist-Lm-D-Vr6.js} +3 -3
- package/dist/{dropdown-menu-CP_qCYHC.js → dropdown-menu-B6ftyzOg.js} +1277 -1229
- package/dist/{ebnfDiagram-PWID7BFC-BIN1sweE.js → ebnfDiagram-PWID7BFC-B1QRM58v.js} +2 -2
- package/dist/{erDiagram-RLTQ6QDP-Ctp5cfoN.js → erDiagram-RLTQ6QDP-DJK_FqvW.js} +1 -1
- package/dist/{error-banner-D-WCIiMt.js → error-banner-D40pmfQQ.js} +83 -83
- package/dist/{error-entries-Bv6bZPF3.js → error-entries-DgK3wUJR.js} +5728 -5638
- package/dist/{feedback-button-B3Wrnsf_.js → feedback-button-8a6SETmT.js} +23 -23
- package/dist/{flowDiagram-HODETNUW-3EfLrlFb.js → flowDiagram-HODETNUW-Uxc25XSJ.js} +2 -2
- package/dist/{formats-27CW_UP4.js → formats-DQCyPd5Z.js} +3 -3
- package/dist/{ganttDiagram-EL5Y4UJY-BQT16JSc.js → ganttDiagram-EL5Y4UJY-Dh_4cBJZ.js} +2 -2
- package/dist/{glide-data-editor-BDYKJdqK.js → glide-data-editor-B70oke_v.js} +370 -368
- package/dist/{glide-utils-DJyqh0EM.js → glide-utils-Dz_F4pAY.js} +16 -16
- package/dist/{globals-DGTE1S0_.js → globals-Cxd5hNlI.js} +3 -3
- package/dist/{highlighted-body-KPVGNVTW-zwjq21tf.js → highlighted-body-KPVGNVTW-3Ziwfz-V.js} +2 -2
- package/dist/{html-to-image-Bf8QMGi4.js → html-to-image-D4yG5Ru0.js} +631 -594
- package/dist/{infoDiagram-27XIBGKW-DipQoHxl.js → infoDiagram-27XIBGKW-DmjxqwL0.js} +1 -1
- package/dist/{ishikawaDiagram-5VMMS53U-DgFMjSGz.js → ishikawaDiagram-5VMMS53U-NgCLHqQi.js} +1 -1
- package/dist/{kanban-definition-UXKFOSKX-w1ACVjgl.js → kanban-definition-UXKFOSKX-CZaG-iam.js} +1 -1
- package/dist/{label-BDKF3Afc.js → label-D9_-zSg-.js} +3 -3
- package/dist/{linear-Cnaq3Tfb.js → linear-DWERh7eI.js} +121 -73
- package/dist/{loader-BQOfjTIJ.js → loader-DOVB0Syl.js} +12 -12
- package/dist/main.js +7689 -7342
- package/dist/{mermaid-CHo49Yv-.js → mermaid-CSvw7c71.js} +38 -38
- package/dist/mermaid-HWGCJPDP-Du3-HPQA.js +2 -0
- package/dist/{mindmap-definition-YA3MSWOX-CrT0KSfX.js → mindmap-definition-YA3MSWOX-DJYQBDH_.js} +1 -1
- package/dist/{number-overlay-editor-S8UJY0i5.js → number-overlay-editor-ChK-SKUk.js} +3 -3
- package/dist/{objects-CzUgoMIF.js → objects-DCmMvZtn.js} +1 -3
- package/dist/{once-BtE-wKRL.js → once-eG8Vmvjd.js} +1 -1
- package/dist/{pegDiagram-XKGWAZYB-BqvywNJA.js → pegDiagram-XKGWAZYB-CHKO_dAe.js} +2 -2
- package/dist/{pieDiagram-E7YTZNPT-BfxJ_XCc.js → pieDiagram-E7YTZNPT-DVevbMAo.js} +1 -1
- package/dist/precisionRound-DhAzeRcm.js +49 -0
- package/dist/{process-output-BZg56CCb.js → process-output-DxvBAeL3.js} +4 -4
- package/dist/{quadrantDiagram-AXDQQJYC-Ccw0xMjN.js → quadrantDiagram-AXDQQJYC-Blrm7V7_.js} +1 -1
- package/dist/{railroadDiagram-O6MQD6OU-8vFLVTPu.js → railroadDiagram-O6MQD6OU-Detj1kcB.js} +2 -2
- package/dist/{react-vega-BED0DjiB.js → react-vega-C4T9Rb_w.js} +12284 -12270
- package/dist/{requirementDiagram-BXWQKSXE-a_MxGvxe.js → requirementDiagram-BXWQKSXE-BLFD0T_Z.js} +1 -1
- package/dist/{reveal-component-De4Pvf4V.js → reveal-component-CXMXeDZD.js} +14 -14
- package/dist/{select-BButFi-d.js → select-CkF_GBxO.js} +537 -458
- package/dist/{sequenceDiagram-WJ2MYXX4-CXFMnxGh.js → sequenceDiagram-WJ2MYXX4-BZBgatQV.js} +1 -1
- package/dist/{spec-BwarBpUJ.js → spec-Mnkn3XEr.js} +41 -11
- package/dist/{stateDiagram-D77RDMKH-DQeA_CwI.js → stateDiagram-D77RDMKH-4BZW9-6_.js} +2 -2
- package/dist/{stateDiagram-v2-MP3YSRHH-BxxQucm1.js → stateDiagram-v2-MP3YSRHH-C4sKC8Iq.js} +2 -2
- package/dist/style.css +1 -1
- package/dist/{swimlanes-42K2YHIH-Do6L-cYg.js → swimlanes-42K2YHIH-SL5yeGe2.js} +1 -1
- package/dist/{swimlanesDiagram-VR7AAH4N-DUzPvSVU.js → swimlanesDiagram-VR7AAH4N-DqPmAYUv.js} +2 -2
- package/dist/{swiper-component-DKntyn8p.js → swiper-component-BkCm-kLg.js} +2 -2
- package/dist/{time-BieKwdYS.js → time-BaMbJs4z.js} +18 -18
- package/dist/{timeline-definition-24CTP7MA-D3c46WM5.js → timeline-definition-24CTP7MA-BfXUMWkq.js} +1 -1
- package/dist/{toDate-UtiwmnH2.js → toDate-TMubKIVL.js} +37 -36
- package/dist/{toast-B9UMEi8u.js → toast-Btbve3Lm.js} +231 -213
- package/dist/{tooltip-BO1REbqs.js → tooltip-CJ4Rqasp.js} +327 -303
- package/dist/{use-restore-focus-BEM7sFWl.js → use-restore-focus-CmGwRNId.js} +1482 -1433
- package/dist/{useAsyncData-Deh5kszT.js → useAsyncData-DjMGFzFy.js} +15 -14
- package/dist/{useDateFormatter-D8XruNGG.js → useDateFormatter-eCL_SdeG.js} +2 -2
- package/dist/{useDeepCompareMemoize-DXwzRINI.js → useDeepCompareMemoize-BQR5TJot.js} +1 -1
- package/dist/{useIframeCapabilities-DBETvvPl.js → useIframeCapabilities-CSdWn6NP.js} +1 -1
- package/dist/{useLifecycle-j7D9uD1o.js → useLifecycle-C_GvKWbQ.js} +28 -25
- package/dist/{useTheme-CRnjkku0.js → useTheme-Bns2gJZ6.js} +224 -220
- package/dist/{vega-component-BeF9dfyO.js → vega-component-BsVptuhz.js} +148 -148
- package/dist/{vega-embed-container-BNHE18G9.js → vega-embed-container--LYZqguO.js} +2 -2
- package/dist/{vega-loader.browser-DNST6uVf.js → vega-loader.browser-B9Pz0EGP.js} +298 -507
- package/dist/{vennDiagram-4TSXK5OY-BSZD8JcZ.js → vennDiagram-4TSXK5OY-CH65znGa.js} +1 -1
- package/dist/{wardleyDiagram-VM6X3IG4-48cUWkfA.js → wardleyDiagram-VM6X3IG4-z9pWKb2_.js} +1 -1
- package/dist/{xychartDiagram-S5SC5T6Z-CswYgYeu.js → xychartDiagram-S5SC5T6Z-MxyaWjjq.js} +2 -2
- package/package.json +16 -16
- package/src/__mocks__/requests.ts +0 -1
- package/src/__tests__/module-entry.test.ts +44 -0
- package/src/__tests__/mount.test.ts +1 -21
- package/src/__tests__/{host-imports.test.ts → replica-imports.test.ts} +12 -11
- package/src/components/ai/__tests__/ai-model-dropdown.test.tsx +63 -0
- package/src/components/ai/ai-model-dropdown.tsx +11 -6
- package/src/components/app-config/ai-config.tsx +7 -2
- package/src/components/app-config/user-config-form.tsx +35 -0
- package/src/components/chat/__tests__/message-queue.test.tsx +17 -0
- package/src/components/chat/acp/__tests__/session-tabs.test.tsx +43 -0
- package/src/components/chat/acp/__tests__/state.test.ts +2 -2
- package/src/components/chat/acp/blocks.tsx +3 -2
- package/src/components/chat/acp/session-tabs.tsx +8 -3
- package/src/components/chat/chat-components.tsx +2 -0
- package/src/components/chat/chat-panel.tsx +9 -8
- package/src/components/chat/chat-utils.ts +4 -8
- package/src/components/data-table/TableBottomBar.tsx +4 -1
- package/src/components/data-table/TableTopBar.tsx +2 -0
- package/src/components/data-table/__tests__/chart-spec-model.test.ts +195 -195
- package/src/components/data-table/__tests__/column-explorer.test.tsx +27 -1
- package/src/components/data-table/__tests__/columns.test.tsx +105 -0
- package/src/components/data-table/__tests__/context-menu-interaction.test.tsx +130 -0
- package/src/components/data-table/__tests__/data-table.test.tsx +1 -0
- package/src/components/data-table/__tests__/date-popover.test.tsx +72 -0
- package/src/components/data-table/__tests__/export-actions.test.tsx +105 -0
- package/src/components/data-table/__tests__/keyboard-selection.test.tsx +188 -0
- package/src/components/data-table/__tests__/pagination.test.tsx +28 -1
- package/src/components/data-table/__tests__/search-highlight.test.tsx +109 -0
- package/src/components/data-table/__tests__/url-detector.test.tsx +74 -0
- package/src/components/data-table/cell-selection/feature.ts +2 -2
- package/src/components/data-table/cell-selection/types.ts +2 -2
- package/src/components/data-table/charts/__tests__/chart-panel.test.tsx +74 -1
- package/src/components/data-table/charts/__tests__/spec-snapshot.test.ts +20 -20
- package/src/components/data-table/charts/__tests__/spec.test.ts +78 -52
- package/src/components/data-table/charts/__tests__/storage.test.ts +4 -1
- package/src/components/data-table/charts/chart-spec/spec.ts +68 -43
- package/src/components/data-table/charts/charts.tsx +40 -30
- package/src/components/data-table/charts/storage.ts +16 -5
- package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
- package/src/components/data-table/column-summary/chart-spec-model.tsx +23 -16
- package/src/components/data-table/column-summary/column-summary.tsx +2 -4
- package/src/components/data-table/column-visibility-dropdown.tsx +8 -13
- package/src/components/data-table/columns.tsx +45 -46
- package/src/components/data-table/context-menu.tsx +36 -20
- package/src/components/data-table/data-table.tsx +17 -1
- package/src/components/data-table/date-popover.tsx +6 -4
- package/src/components/data-table/export-actions.tsx +76 -48
- package/src/components/data-table/pagination.tsx +44 -33
- package/src/components/data-table/range-focus/atoms.ts +4 -6
- package/src/components/data-table/range-focus/use-cell-range-selection.ts +65 -38
- package/src/components/data-table/range-focus/use-scroll-into-view.ts +21 -2
- package/src/components/data-table/renderers.tsx +16 -7
- package/src/components/data-table/row-viewer-panel/__tests__/row-viewer.test.tsx +24 -1
- package/src/components/data-table/row-viewer-panel/row-viewer.tsx +4 -4
- package/src/components/data-table/search-highlight.tsx +79 -0
- package/src/components/data-table/types.ts +1 -0
- package/src/components/data-table/url-detector.tsx +49 -9
- package/src/components/datasources/__tests__/column-actions.test.tsx +97 -0
- package/src/components/datasources/__tests__/column-preview.test.tsx +98 -5
- package/src/components/datasources/__tests__/datasources-interactions.test.tsx +181 -0
- package/src/components/datasources/__tests__/table-list.test.tsx +118 -0
- package/src/components/datasources/__tests__/utils.test.ts +57 -6
- package/src/components/datasources/column-preview.tsx +13 -4
- package/src/components/datasources/datasources.tsx +51 -39
- package/src/components/datasources/utils.ts +32 -23
- package/src/components/debugger/debugger-code.tsx +5 -0
- package/src/components/dependency-graph/dependency-graph-tree.tsx +8 -8
- package/src/components/dependency-graph/elements.ts +24 -21
- package/src/components/dependency-graph/panels.tsx +2 -1
- package/src/components/dependency-graph/utils/__tests__/layout.test.ts +18 -11
- package/src/components/editor/SortableCell.tsx +1 -3
- package/src/{core/attachments/__tests__/toast.test.tsx → components/editor/__tests__/agent-toast.test.tsx} +1 -1
- package/src/components/editor/__tests__/data-attributes.test.tsx +6 -2
- package/src/components/editor/__tests__/dynamic-favicon.test.tsx +111 -18
- package/src/components/editor/__tests__/package-alert.test.tsx +22 -1
- package/src/components/editor/actions/__tests__/pair-with-agent-modal.test.tsx +24 -0
- package/src/components/editor/actions/pair-with-agent-modal.tsx +18 -15
- package/src/components/editor/actions/useRestartKernel.tsx +1 -1
- package/src/components/editor/ai/add-cell-with-ai.tsx +3 -3
- package/src/components/editor/ai/ai-completion-editor.tsx +1 -0
- package/src/components/editor/alerts/__tests__/connection-notice.test.tsx +1 -1
- package/src/components/editor/alerts/connection-notice.tsx +1 -1
- package/src/components/editor/alerts/startup-logs-alert.tsx +1 -0
- package/src/components/editor/app-container.tsx +1 -1
- package/src/components/editor/boundary/__tests__/ErrorBoundary.test.tsx +1 -1
- package/src/components/editor/cell/CreateCellButton.tsx +10 -12
- package/src/components/editor/cell/DeleteButton.tsx +3 -2
- package/src/components/editor/cell/RunButton.tsx +2 -2
- package/src/components/editor/cell/StagedAICell.tsx +10 -2
- package/src/components/editor/cell/StopButton.tsx +2 -2
- package/src/components/editor/cell/__tests__/useShouldShowInterrupt.test.ts +39 -0
- package/src/components/editor/cell/code/__tests__/language-toggle.test.tsx +54 -0
- package/src/components/editor/cell/code/cell-editor.tsx +9 -16
- package/src/components/editor/cell/code/language-toggle.tsx +8 -7
- package/src/components/editor/cell/collapse.tsx +5 -3
- package/src/components/editor/cell/useShouldShowInterrupt.ts +2 -12
- package/src/components/editor/chrome/components/__tests__/feedback-button.test.tsx +1 -1
- package/src/components/editor/chrome/components/feedback-button.tsx +1 -1
- package/src/components/editor/chrome/panels/__tests__/packages-panel.test.tsx +31 -2
- package/src/components/editor/chrome/panels/__tests__/runtime-details.test.tsx +1 -1
- package/src/components/editor/chrome/panels/__tests__/sandbox-recovery.test.tsx +1 -1
- package/src/components/editor/chrome/panels/cache-panel.tsx +1 -0
- package/src/components/editor/chrome/panels/outline/__tests__/outline-keyboard.test.tsx +84 -0
- package/src/components/editor/chrome/panels/outline/floating-outline.tsx +39 -14
- package/src/components/editor/chrome/panels/outline/useActiveOutline.tsx +3 -2
- package/src/components/editor/chrome/panels/packages-panel.tsx +4 -7
- package/src/components/editor/chrome/panels/secrets-panel.tsx +1 -0
- package/src/components/editor/chrome/panels/snippets-panel.tsx +5 -1
- package/src/components/editor/chrome/wrapper/__tests__/attachment-status.test.tsx +9 -18
- package/src/components/editor/chrome/wrapper/__tests__/document-sync-status.test.tsx +92 -0
- package/src/components/editor/chrome/wrapper/__tests__/pending-ai-cells.test.tsx +58 -1
- package/src/components/editor/chrome/wrapper/footer-items/attachment-status.tsx +4 -4
- package/src/components/editor/chrome/wrapper/footer-items/backend-status.tsx +1 -1
- package/src/components/editor/chrome/wrapper/footer-items/document-sync-status.tsx +54 -0
- package/src/components/editor/chrome/wrapper/footer-items/lsp-status.tsx +1 -1
- package/src/components/editor/chrome/wrapper/footer-items/machine-stats.tsx +1 -1
- package/src/components/editor/chrome/wrapper/footer-items/runtime-settings.tsx +1 -7
- package/src/components/editor/chrome/wrapper/footer.tsx +2 -0
- package/src/components/editor/chrome/wrapper/pending-ai-cells.tsx +12 -2
- package/src/components/editor/chrome/wrapper/storage.ts +1 -1
- package/src/components/editor/connections/components.tsx +1 -1
- package/src/components/editor/controls/Controls.tsx +2 -2
- package/src/components/editor/controls/__tests__/command-palette.test.tsx +53 -0
- package/src/components/editor/controls/__tests__/keyboard-shortcuts.test.tsx +61 -0
- package/src/components/editor/controls/__tests__/notebook-menu-dropdown.test.tsx +1 -1
- package/src/components/editor/controls/command-palette.tsx +22 -10
- package/src/components/editor/controls/keyboard-shortcuts.tsx +14 -5
- package/src/components/editor/dynamic-favicon.tsx +21 -40
- package/src/components/editor/errors/__tests__/send-error-report-button.test.tsx +9 -23
- package/src/components/editor/errors/send-error-report-button.tsx +3 -6
- package/src/components/editor/file-tree/__tests__/file-explorer-interactions.test.tsx +6 -0
- package/src/components/editor/file-tree/__tests__/file-explorer-navigation.test.tsx +47 -0
- package/src/components/editor/file-tree/__tests__/use-file-search.test.tsx +91 -0
- package/src/components/editor/file-tree/file-explorer.tsx +45 -8
- package/src/components/editor/file-tree/file-name-input.tsx +1 -0
- package/src/components/editor/file-tree/file-viewer.tsx +4 -2
- package/src/components/editor/file-tree/use-file-search.ts +35 -21
- package/src/components/editor/header/__tests__/status.test.tsx +5 -3
- package/src/components/editor/header/app-header.tsx +1 -1
- package/src/components/editor/header/status.tsx +40 -20
- package/src/components/editor/links/__tests__/cell-link.test.tsx +146 -0
- package/src/components/editor/links/cell-link.tsx +14 -5
- package/src/components/editor/navigation/focus-utils.ts +4 -4
- package/src/components/editor/notebook-banner.tsx +1 -0
- package/src/components/editor/notebook-cell.tsx +12 -3
- package/src/components/editor/output/MarimoErrorOutput.tsx +2 -1
- package/src/components/editor/output/MarimoTracebackOutput.tsx +19 -17
- package/src/components/editor/output/Outputs.css +8 -0
- package/src/components/editor/output/__tests__/traceback.test.tsx +27 -1
- package/src/components/editor/output/ansi-reduce.ts +33 -20
- package/src/components/editor/output/console/ConsoleOutput.tsx +19 -25
- package/src/components/editor/package-alert.tsx +14 -7
- package/src/components/editor/renderers/grid-layout/grid-layout.tsx +12 -6
- package/src/components/editor/renderers/vertical-layout/sidebar/toggle.tsx +7 -1
- package/src/components/home/components.tsx +17 -31
- package/src/components/icons/__tests__/large-spinner.test.tsx +39 -0
- package/src/components/icons/large-spinner.tsx +3 -14
- package/src/components/icons/spinner.tsx +1 -1
- package/src/components/mcp/mcp-status-indicator.tsx +1 -1
- package/src/components/pages/__tests__/home-page.test.tsx +116 -0
- package/src/components/pages/home-page.tsx +164 -91
- package/src/components/scratchpad/scratchpad.test.tsx +95 -0
- package/src/components/scratchpad/scratchpad.tsx +16 -3
- package/src/components/slides/reveal-component.tsx +4 -2
- package/src/components/slides/slide-cell-view.tsx +1 -1
- package/src/components/slides/slide-form.tsx +1 -0
- package/src/components/tracing/tracing-keyboard.test.tsx +85 -0
- package/src/components/tracing/tracing.tsx +45 -41
- package/src/components/ui/__tests__/draggable-popover.test.tsx +24 -0
- package/src/components/ui/__tests__/range-slider.test.tsx +165 -0
- package/src/components/ui/alert-dialog.tsx +1 -1
- package/src/components/ui/draggable-popover.tsx +24 -2
- package/src/components/ui/range-slider.tsx +22 -9
- package/src/core/ai/__tests__/staged-cells.test.ts +8 -5
- package/src/core/ai/context/providers/datasource.ts +6 -2
- package/src/core/ai/staged-cells.ts +7 -2
- package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +3 -15
- package/src/core/ai/tools/base.ts +16 -7
- package/src/core/ai/tools/edit-notebook-tool.ts +61 -48
- package/src/core/ai/tools/registry.ts +13 -8
- package/src/core/ai/tools/sample-tool.ts +6 -7
- package/src/core/cells/__tests__/__snapshots__/cells.test.ts.snap +4 -0
- package/src/core/cells/__tests__/cell.test.ts +39 -0
- package/src/core/cells/__tests__/cells.test.ts +3 -298
- package/src/core/cells/__tests__/collapseConsoleOutputs.test.ts +54 -0
- package/src/core/cells/__tests__/document.test.ts +410 -0
- package/src/core/cells/__tests__/flush-document.test.ts +40 -0
- package/src/core/cells/__tests__/notebook-outline.test.ts +108 -0
- package/src/core/cells/__tests__/session.test.ts +117 -36
- package/src/core/cells/__tests__/with-document-save.test.ts +67 -0
- package/src/core/cells/cell.ts +14 -3
- package/src/core/cells/cells.ts +30 -159
- package/src/core/cells/columns.ts +38 -0
- package/src/core/cells/document.ts +360 -0
- package/src/core/cells/pending-delete-service.ts +2 -6
- package/src/core/cells/session.ts +1 -1
- package/src/core/cells/types.ts +22 -1
- package/src/core/codemirror/__tests__/setup.test.ts +29 -29
- package/src/core/codemirror/ai/__tests__/resources.test.ts +117 -0
- package/src/core/codemirror/ai/resources.ts +1 -1
- package/src/core/codemirror/cells/__tests__/extensions.test.ts +42 -1
- package/src/core/codemirror/cells/extensions.ts +21 -3
- package/src/core/codemirror/format.ts +6 -5
- package/src/core/codemirror/keymaps/vim.ts +2 -6
- package/src/core/codemirror/language/__tests__/sql.test.ts +22 -20
- package/src/core/codemirror/language/__tests__/utils.test.ts +187 -15
- package/src/core/codemirror/language/cell-code.ts +114 -0
- package/src/core/codemirror/language/extension.ts +52 -35
- package/src/core/codemirror/language/languages/markdown.ts +8 -6
- package/src/core/codemirror/language/languages/python.ts +16 -10
- package/src/core/codemirror/language/languages/sql/sql.ts +16 -24
- package/src/core/codemirror/language/panel/panel.tsx +1 -0
- package/src/core/codemirror/language/types.ts +7 -7
- package/src/core/codemirror/language/utils.ts +9 -39
- package/src/core/codemirror/lsp/notebook-lsp.ts +6 -5
- package/src/core/codemirror/readonly/__tests__/extension.test.ts +1 -1
- package/src/core/codemirror/readonly/extension.ts +2 -2
- package/src/core/codemirror/rtc/extension.ts +24 -13
- package/src/core/codemirror/rtc/loro/awareness.ts +34 -19
- package/src/core/codemirror/rtc/loro/sync.ts +1 -0
- package/src/core/codemirror/utils.ts +1 -0
- package/src/core/config/__tests__/config-schema.test.ts +5 -3
- package/src/core/config/config-schema.ts +3 -0
- package/src/core/datasets/__tests__/data-source-discovery.test.ts +5 -5
- package/src/core/datasets/data-source-discovery.ts +4 -6
- package/src/core/edit-app.tsx +6 -5
- package/src/core/errors/error-entries.ts +3 -0
- package/src/core/export/hooks.ts +1 -1
- package/src/core/export/layout.ts +2 -2
- package/src/core/hotkeys/actions.ts +2 -4
- package/src/core/islands/__tests__/bootstrap.test.ts +16 -42
- package/src/core/islands/__tests__/bridge.test.ts +31 -26
- package/src/core/islands/bootstrap.ts +22 -52
- package/src/core/islands/bridge.ts +31 -21
- package/src/core/islands/components/__tests__/IslandControls.test.tsx +7 -5
- package/src/core/islands/worker/__tests__/controller.test.ts +62 -4
- package/src/core/islands/worker/controller.ts +4 -10
- package/src/core/islands/worker/worker.tsx +33 -33
- package/src/core/kernel/__tests__/RuntimeState.test.ts +1 -1
- package/src/core/network/__tests__/connection.test.ts +1 -1
- package/src/core/network/connection-notice.ts +1 -1
- package/src/core/network/connection.ts +5 -3
- package/src/core/network/requests-lazy.ts +1 -2
- package/src/core/network/requests-network.ts +0 -9
- package/src/core/network/requests-static.ts +0 -1
- package/src/core/network/requests-toasting.tsx +0 -1
- package/src/core/network/types.ts +0 -5
- package/src/core/network/useConnectionNotice.ts +8 -2
- package/src/core/notebook/attachments.ts +38 -0
- package/src/core/notebook/document/__tests__/codemirror.test.ts +547 -0
- package/src/core/notebook/document/__tests__/draft.test.ts +322 -0
- package/src/core/notebook/document/__tests__/fixtures.ts +92 -0
- package/src/core/notebook/document/__tests__/hold.test.ts +88 -0
- package/src/core/notebook/document/__tests__/hooks.test.tsx +391 -0
- package/src/core/notebook/document/__tests__/lifecycle-scenarios.test.ts +61 -0
- package/src/core/notebook/document/__tests__/model.test.ts +247 -0
- package/src/core/notebook/document/__tests__/protocol-fixtures.ts +38 -0
- package/src/core/notebook/document/__tests__/recovery-scenarios.test.ts +230 -0
- package/src/core/notebook/document/__tests__/scenario-fixture.ts +43 -0
- package/src/core/notebook/document/__tests__/scenarios.test.ts +205 -0
- package/src/core/notebook/document/__tests__/state.test.ts +438 -0
- package/src/core/notebook/document/__tests__/submission.test.ts +203 -0
- package/src/core/notebook/document/__tests__/test-host.test.ts +92 -0
- package/src/core/notebook/document/__tests__/test-host.ts +247 -0
- package/src/core/notebook/document/__tests__/test-notebook.ts +149 -0
- package/src/core/notebook/document/__tests__/user.ts +61 -0
- package/src/core/notebook/document/codemirror.ts +216 -0
- package/src/core/notebook/document/draft.ts +472 -0
- package/src/core/notebook/document/hooks.tsx +118 -0
- package/src/core/notebook/document/index.ts +23 -0
- package/src/core/notebook/document/model.ts +105 -0
- package/src/core/notebook/document/select.ts +41 -0
- package/src/core/notebook/document/state.ts +374 -0
- package/src/core/notebook/document/sync.ts +418 -0
- package/src/core/notebook/index.ts +18 -0
- package/src/core/notebook/replica/AGENTS.md +11 -0
- package/src/core/notebook/replica/__tests__/attachments.test.ts +56 -0
- package/src/core/notebook/replica/__tests__/document.test.ts +126 -0
- package/src/core/notebook/replica/__tests__/fixtures.ts +79 -0
- package/src/core/notebook/replica/__tests__/replica.test.ts +550 -0
- package/src/core/notebook/replica/backend.ts +19 -0
- package/src/core/notebook/replica/connection.ts +42 -0
- package/src/core/notebook/replica/index.ts +13 -0
- package/src/core/notebook/replica/replica.ts +286 -0
- package/src/core/notebook/replica/resources/attachments.ts +22 -0
- package/src/core/notebook/replica/resources/document.ts +101 -0
- package/src/core/packages/__tests__/useSandboxController.test.tsx +1 -1
- package/src/core/packages/useSandboxController.ts +1 -1
- package/src/core/run-app.tsx +47 -44
- package/src/core/runtime/__tests__/adapter.test.ts +1 -1
- package/src/core/runtime/__tests__/createWsUrl.test.ts +77 -7
- package/src/core/runtime/__tests__/runtime.test.ts +32 -58
- package/src/core/runtime/adapter.ts +1 -1
- package/src/core/runtime/config.ts +2 -2
- package/src/core/runtime/runtime.ts +38 -42
- package/src/core/runtime/types.ts +0 -2
- package/src/core/saving/filename.ts +1 -1
- package/src/core/saving/save-component.tsx +10 -4
- package/src/core/saving/useAutoSave.ts +1 -1
- package/src/core/session/__tests__/backend.test.ts +235 -0
- package/src/core/session/__tests__/useNotebookReplica.hook.test.tsx +183 -0
- package/src/core/session/__tests__/useNotebookSession.hook.test.tsx +669 -0
- package/src/core/session/active-notebook.ts +11 -0
- package/src/core/session/backend.ts +125 -0
- package/src/core/{websocket → session}/types.ts +2 -2
- package/src/core/session/useNotebookReplica.ts +72 -0
- package/src/core/{websocket → session}/useNotebookSession.tsx +56 -43
- package/src/core/state/__tests__/jotai.test.tsx +108 -0
- package/src/core/state/jotai.ts +1 -1
- package/src/core/static/__tests__/files.test.ts +38 -10
- package/src/core/static/files.ts +2 -0
- package/src/core/{websocket → transports}/__tests__/connection-state.test.ts +1 -13
- package/src/core/transports/__tests__/server.test.ts +408 -0
- package/src/core/transports/__tests__/static.test.ts +175 -0
- package/src/core/transports/__tests__/wasm.test.ts +166 -0
- package/src/core/{websocket → transports}/connection-state.ts +9 -16
- package/src/core/transports/server.ts +152 -0
- package/src/core/transports/static.ts +84 -0
- package/src/core/transports/wasm.ts +97 -0
- package/src/core/wasm/__tests__/bridge.test.ts +213 -50
- package/src/core/wasm/__tests__/worker.test.ts +187 -0
- package/src/core/wasm/bridge.ts +75 -53
- package/src/core/wasm/rpc.ts +15 -3
- package/src/core/wasm/store.ts +3 -3
- package/src/core/wasm/worker/bootstrap.ts +55 -51
- package/src/core/wasm/worker/getMarimoWheel.ts +1 -1
- package/src/core/wasm/worker/save-worker.ts +9 -10
- package/src/core/wasm/worker/types.ts +29 -18
- package/src/core/wasm/worker/worker.ts +88 -44
- package/src/css/globals.css +10 -0
- package/src/hooks/__tests__/useAsyncData.test.tsx +148 -0
- package/src/hooks/__tests__/useDebounce.test.tsx +51 -0
- package/src/hooks/__tests__/useDeepCompareMemoize.test.tsx +39 -0
- package/src/hooks/__tests__/useDelayElapsed.test.tsx +28 -0
- package/src/hooks/__tests__/useInternalStateWithSync.test.tsx +20 -0
- package/src/hooks/__tests__/useScript.test.tsx +77 -0
- package/src/hooks/__tests__/useStateForKey.test.tsx +257 -0
- package/src/hooks/useAsyncData.ts +3 -3
- package/src/hooks/useDataSourceDiscovery.ts +6 -4
- package/src/hooks/useDebounce.ts +6 -10
- package/src/hooks/useDeepCompareMemoize.ts +1 -1
- package/src/hooks/useDelayElapsed.ts +14 -10
- package/src/hooks/useElapsedTime.ts +3 -3
- package/src/hooks/useEventListener.ts +1 -2
- package/src/hooks/useInputHistory.ts +4 -7
- package/src/hooks/useInternalStateWithSync.ts +6 -6
- package/src/hooks/useResizeObserver.ts +4 -7
- package/src/hooks/useScript.ts +67 -70
- package/src/hooks/useStateForKey.ts +93 -0
- package/src/mount.tsx +1 -5
- package/src/plugins/__tests__/plugin-object-schemas.test.ts +104 -0
- package/src/plugins/core/registerReactComponent.tsx +1 -1
- package/src/plugins/impl/CodeEditorPlugin.tsx +1 -1
- package/src/plugins/impl/DataEditorPlugin.tsx +1 -1
- package/src/plugins/impl/DataTablePlugin.tsx +69 -37
- package/src/plugins/impl/DropdownPlugin.tsx +2 -6
- package/src/plugins/impl/FileBrowserPlugin.tsx +4 -16
- package/src/plugins/impl/FormPlugin.tsx +1 -1
- package/src/plugins/impl/RangeSliderPlugin.tsx +16 -2
- package/src/plugins/impl/RefreshPlugin.tsx +1 -0
- package/src/plugins/impl/SliderPlugin.tsx +6 -8
- package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +387 -1
- package/src/plugins/impl/__tests__/FileBrowserPlugin.test.tsx +45 -0
- package/src/plugins/impl/__tests__/RangeSliderPlugin.test.tsx +109 -0
- package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +24 -3
- package/src/plugins/impl/anywidget/__tests__/registry.test.ts +153 -0
- package/src/plugins/impl/anywidget/__tests__/widget-binding.test.ts +241 -2
- package/src/plugins/impl/anywidget/model.ts +3 -1
- package/src/plugins/impl/anywidget/registry.ts +18 -14
- package/src/plugins/impl/anywidget/runtime.ts +21 -9
- package/src/plugins/impl/anywidget/widget-binding.ts +160 -82
- package/src/plugins/impl/chat/__tests__/chat-prompts.test.tsx +93 -0
- package/src/plugins/impl/chat/chat-ui.tsx +14 -11
- package/src/plugins/impl/code/any-language-editor.tsx +2 -2
- package/src/plugins/impl/data-editor/glide-data-editor.tsx +8 -5
- package/src/plugins/impl/data-editor/glide-utils.ts +3 -1
- package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +1 -1
- package/src/plugins/impl/data-explorer/components/column-summary.tsx +4 -2
- package/src/plugins/impl/data-explorer/state/reducer.ts +1 -1
- package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -2
- package/src/plugins/impl/data-frames/__tests__/sidebar.test.tsx +160 -0
- package/src/plugins/impl/data-frames/forms/__tests__/__snapshots__/form.test.tsx.snap +66 -66
- package/src/plugins/impl/data-frames/panel.tsx +43 -16
- package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +5 -3
- package/src/plugins/impl/panel/PanelPlugin.tsx +16 -17
- package/src/plugins/impl/panel/__tests__/utils.test.ts +39 -1
- package/src/plugins/impl/panel/utils.ts +17 -0
- package/src/plugins/impl/plotly/PlotlyPlugin.tsx +2 -5
- package/src/plugins/impl/plotly/selection.ts +25 -19
- package/src/plugins/impl/vega/VegaPlugin.tsx +2 -3
- package/src/plugins/impl/vega/make-selectable.ts +4 -7
- package/src/plugins/layout/RoutesPlugin.tsx +1 -1
- package/src/stories/__tests__/editor-story.test.tsx +33 -0
- package/src/stories/button.stories.tsx +1 -0
- package/src/stories/cell.stories.tsx +1 -1
- package/src/stories/data-table.stories.tsx +31 -0
- package/src/stories/editor.stories.tsx +24 -17
- package/src/stories/form-wrapper.stories.tsx +2 -2
- package/src/stories/layout/vertical/one-column.stories.tsx +1 -1
- package/src/stories/runtime-story.tsx +1 -1
- package/src/stories/select.stories.tsx +2 -2
- package/src/stories/switchable-multi-select.stories.tsx +1 -1
- package/src/utils/__tests__/arrays.test.ts +35 -0
- package/src/utils/__tests__/batch-requests.test.ts +3 -3
- package/src/utils/__tests__/{createReducer.test.ts → createReducer.test.tsx} +29 -0
- package/src/utils/__tests__/numbers.test.ts +105 -1
- package/src/utils/__tests__/objects.test.ts +21 -0
- package/src/utils/arrays.ts +11 -2
- package/src/utils/blob.ts +1 -1
- package/src/utils/createReducer.ts +53 -26
- package/src/utils/maps.ts +0 -3
- package/src/utils/numbers.ts +79 -18
- package/src/utils/objects.ts +4 -9
- package/src/utils/once.ts +19 -19
- package/src/utils/tracer.ts +9 -5
- package/src/utils/zod-utils.ts +1 -3
- package/dist/any-language-editor-DZ_YTVus.js +0 -76
- package/dist/assets/__vite-browser-external-BXYkiFsk.js +0 -1
- package/dist/assets/worker-HPY9fbhz.js +0 -114
- package/dist/mermaid-HWGCJPDP-ByCsZnYF.js +0 -2
- package/dist/precisionRound-DMIVQrt2.js +0 -97
- package/src/core/attachments/state.ts +0 -21
- package/src/core/cells/__tests__/apply-transaction.test.ts +0 -991
- package/src/core/cells/__tests__/document-changes.test.ts +0 -1140
- package/src/core/cells/__tests__/document-roundtrip.test.ts +0 -392
- package/src/core/cells/document-changes.ts +0 -944
- package/src/core/host/AGENTS.md +0 -6
- package/src/core/host/__tests__/events.test.ts +0 -46
- package/src/core/host/__tests__/notebook-client.test.ts +0 -191
- package/src/core/host/__tests__/protocol.test.ts +0 -214
- package/src/core/host/connection.ts +0 -81
- package/src/core/host/events.ts +0 -60
- package/src/core/host/notebook-client.ts +0 -226
- package/src/core/host/protocol.ts +0 -1943
- package/src/core/state/__tests__/jotai.test.ts +0 -25
- package/src/core/wasm/worker/message-buffer.ts +0 -33
- package/src/core/websocket/__tests__/createConnectionTransport.test.ts +0 -49
- package/src/core/websocket/__tests__/useNotebookClient.hook.test.tsx +0 -140
- package/src/core/websocket/__tests__/useNotebookSession.hook.test.tsx +0 -883
- package/src/core/websocket/transports/__tests__/basic.test.ts +0 -275
- package/src/core/websocket/transports/__tests__/sse.test.ts +0 -335
- package/src/core/websocket/transports/__tests__/transport.test.ts +0 -308
- package/src/core/websocket/transports/__tests__/ws.test.ts +0 -125
- package/src/core/websocket/transports/basic.ts +0 -102
- package/src/core/websocket/transports/create.ts +0 -31
- package/src/core/websocket/transports/sse.ts +0 -308
- package/src/core/websocket/transports/transport.ts +0 -50
- package/src/core/websocket/transports/ws.ts +0 -98
- package/src/core/websocket/useNotebookClient.ts +0 -80
- /package/src/{core/attachments/toast.ts → components/editor/agent-toast.ts} +0 -0
- /package/src/core/{websocket → session}/connection-utils.ts +0 -0
|
@@ -69,12 +69,14 @@ export class MarkdownLanguageAdapter implements LanguageAdapter<MarkdownLanguage
|
|
|
69
69
|
return this.parser.isSupported(pythonCode);
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
public getExtension(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
public getExtension({
|
|
73
|
+
hotkeys,
|
|
74
|
+
}: {
|
|
75
|
+
cellId: CellId;
|
|
76
|
+
completionConfig: CompletionConfig;
|
|
77
|
+
hotkeys: HotkeyProvider;
|
|
78
|
+
placeholderType: PlaceholderType;
|
|
79
|
+
}): Extension[] {
|
|
78
80
|
const markdownLanguageData = markdown().language.data;
|
|
79
81
|
let view: EditorView | undefined;
|
|
80
82
|
|
|
@@ -157,7 +157,7 @@ const pylspClient = once((lspConfig: LSPConfig) => {
|
|
|
157
157
|
return notebookClient;
|
|
158
158
|
});
|
|
159
159
|
|
|
160
|
-
const tyLspClient = once((
|
|
160
|
+
const tyLspClient = once((_config: LSPConfig) => {
|
|
161
161
|
// oxlint-disable-next-line prefer-const -- reassigned after closure capture
|
|
162
162
|
let resyncCallback: (() => Promise<void>) | undefined;
|
|
163
163
|
|
|
@@ -176,7 +176,7 @@ const tyLspClient = once((_: LSPConfig) => {
|
|
|
176
176
|
const notebookClient = new NotebookLanguageServerClient(
|
|
177
177
|
new LanguageServerClient({
|
|
178
178
|
...lspClientOpts,
|
|
179
|
-
getWorkspaceConfiguration: (
|
|
179
|
+
getWorkspaceConfiguration: () => [{ disableLanguageServices: true }],
|
|
180
180
|
}),
|
|
181
181
|
{},
|
|
182
182
|
);
|
|
@@ -226,7 +226,7 @@ const pyreflyClient = once(
|
|
|
226
226
|
},
|
|
227
227
|
);
|
|
228
228
|
|
|
229
|
-
const pyrightClient = once((
|
|
229
|
+
const pyrightClient = once((_config: LSPConfig) => {
|
|
230
230
|
// oxlint-disable-next-line prefer-const -- reassigned after closure capture
|
|
231
231
|
let resyncCallback: (() => Promise<void>) | undefined;
|
|
232
232
|
|
|
@@ -279,13 +279,19 @@ export class PythonLanguageAdapter implements LanguageAdapter<{}> {
|
|
|
279
279
|
return this.parser.isSupported(code);
|
|
280
280
|
}
|
|
281
281
|
|
|
282
|
-
public getExtension(
|
|
283
|
-
cellId
|
|
284
|
-
completionConfig
|
|
285
|
-
hotkeys
|
|
286
|
-
placeholderType
|
|
287
|
-
lspConfig
|
|
288
|
-
|
|
282
|
+
public getExtension({
|
|
283
|
+
cellId,
|
|
284
|
+
completionConfig,
|
|
285
|
+
hotkeys,
|
|
286
|
+
placeholderType,
|
|
287
|
+
lspConfig,
|
|
288
|
+
}: {
|
|
289
|
+
cellId: CellId;
|
|
290
|
+
completionConfig: CompletionConfig;
|
|
291
|
+
hotkeys: HotkeyProvider;
|
|
292
|
+
placeholderType: PlaceholderType;
|
|
293
|
+
lspConfig: LSPConfig & { diagnostics: DiagnosticsConfig };
|
|
294
|
+
}): Extension[] {
|
|
289
295
|
const getCompletionsExtension = () => {
|
|
290
296
|
const autocompleteOptions = {
|
|
291
297
|
// We remove the default keymap because we use our own which
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { acceptCompletion, autocompletion } from "@codemirror/autocomplete";
|
|
4
4
|
import { insertTab } from "@codemirror/commands";
|
|
5
|
-
import { type
|
|
5
|
+
import { type SQLNamespace, sql } from "@codemirror/lang-sql";
|
|
6
6
|
import type { EditorState, Extension } from "@codemirror/state";
|
|
7
7
|
import { Compartment } from "@codemirror/state";
|
|
8
8
|
import {
|
|
@@ -155,13 +155,15 @@ export class SQLLanguageAdapter implements LanguageAdapter<SQLLanguageAdapterMet
|
|
|
155
155
|
return this.parser.isSupported(pythonCode);
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
public getExtension(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
158
|
+
public getExtension({
|
|
159
|
+
lspConfig,
|
|
160
|
+
}: {
|
|
161
|
+
cellId: CellId;
|
|
162
|
+
completionConfig: CompletionConfig;
|
|
163
|
+
hotkeys: HotkeyProvider;
|
|
164
|
+
placeholderType: PlaceholderType;
|
|
165
|
+
lspConfig: LSPConfig & { diagnostics: DiagnosticsConfig };
|
|
166
|
+
}): Extension[] {
|
|
165
167
|
const analysis = createSQLAnalysis();
|
|
166
168
|
const extensions = [
|
|
167
169
|
// This can be updated with a dispatch effect
|
|
@@ -495,12 +497,12 @@ function isDuckDBConnection(
|
|
|
495
497
|
}
|
|
496
498
|
|
|
497
499
|
/**
|
|
498
|
-
*
|
|
500
|
+
* The effect that reconfigures the SQL language for the connection's dialect.
|
|
501
|
+
* Callers dispatch it, alone or with the change that selected the connection.
|
|
499
502
|
*/
|
|
500
|
-
function
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
});
|
|
503
|
+
export function sqlDialectEffect(connectionName: ConnectionName) {
|
|
504
|
+
const dialect = SCHEMA_CACHE.getDialect(connectionName);
|
|
505
|
+
return sqlConfigCompartment.reconfigure(sql({ dialect }));
|
|
504
506
|
}
|
|
505
507
|
|
|
506
508
|
// Helper functions to update the SQL dialect
|
|
@@ -509,17 +511,7 @@ export function updateSQLDialectFromConnection(
|
|
|
509
511
|
view: EditorView,
|
|
510
512
|
connectionName: ConnectionName,
|
|
511
513
|
) {
|
|
512
|
-
|
|
513
|
-
updateSQLDialect(view, dialect);
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
export function initializeSQLDialect(view: EditorView) {
|
|
517
|
-
// Get current engine and update dialect
|
|
518
|
-
const metadata = getSQLMetadata(view.state);
|
|
519
|
-
const connectionName = metadata.engine;
|
|
520
|
-
const dialect = SCHEMA_CACHE.getDialect(connectionName);
|
|
521
|
-
|
|
522
|
-
updateSQLDialect(view, dialect);
|
|
514
|
+
view.dispatch({ effects: sqlDialectEffect(connectionName) });
|
|
523
515
|
}
|
|
524
516
|
|
|
525
517
|
function getSQLMetadata(state: EditorState): SQLLanguageAdapterMetadata {
|
|
@@ -26,13 +26,13 @@ export interface LanguageAdapter<M = Record<string, any>> {
|
|
|
26
26
|
transformIn(code: string): [string, number, M];
|
|
27
27
|
transformOut(code: string, metadata: M): [string, number];
|
|
28
28
|
isSupported(code: string): boolean;
|
|
29
|
-
getExtension(
|
|
30
|
-
cellId: CellId
|
|
31
|
-
completionConfig: CompletionConfig
|
|
32
|
-
hotkeys: HotkeyProvider
|
|
33
|
-
placeholderType: PlaceholderType
|
|
34
|
-
lspConfig: LSPConfig & { diagnostics?: DiagnosticsConfig }
|
|
35
|
-
): Extension[];
|
|
29
|
+
getExtension(options: {
|
|
30
|
+
cellId: CellId;
|
|
31
|
+
completionConfig: CompletionConfig;
|
|
32
|
+
hotkeys: HotkeyProvider;
|
|
33
|
+
placeholderType: PlaceholderType;
|
|
34
|
+
lspConfig: LSPConfig & { diagnostics?: DiagnosticsConfig };
|
|
35
|
+
}): Extension[];
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export type LanguageMetadataOf<T extends LanguageAdapter> =
|
|
@@ -2,12 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import type { EditorState } from "@codemirror/state";
|
|
4
4
|
import type { EditorView } from "@codemirror/view";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
languageAdapterFromCode,
|
|
8
|
-
languageAdapterState,
|
|
9
|
-
switchLanguage,
|
|
10
|
-
} from "./extension";
|
|
5
|
+
import { getCellCode } from "./cell-code";
|
|
6
|
+
import { languageAdapterState } from "./extension";
|
|
11
7
|
import { languageMetadataField } from "./metadata";
|
|
12
8
|
|
|
13
9
|
/**
|
|
@@ -19,42 +15,16 @@ export function getEditorCodeAsPython(
|
|
|
19
15
|
fromPos?: number,
|
|
20
16
|
toPos?: number,
|
|
21
17
|
): string {
|
|
18
|
+
if (fromPos === undefined) {
|
|
19
|
+
return getCellCode(editor.state);
|
|
20
|
+
}
|
|
22
21
|
const languageAdapter = editor.state.field(languageAdapterState);
|
|
23
22
|
const metadata = editor.state.field(languageMetadataField);
|
|
24
23
|
const editorText = editor.state.doc.toString();
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
)[0];
|
|
30
|
-
}
|
|
31
|
-
return languageAdapter.transformOut(editorText, metadata)[0];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Update the editor code from Python code
|
|
36
|
-
* Handles when the editor is showing a different language (e.g. markdown)
|
|
37
|
-
*/
|
|
38
|
-
export function updateEditorCodeFromPython(
|
|
39
|
-
editor: EditorView,
|
|
40
|
-
pythonCode: string,
|
|
41
|
-
): string {
|
|
42
|
-
const currentAdapter = editor.state.field(languageAdapterState);
|
|
43
|
-
const correctAdapter = languageAdapterFromCode(pythonCode);
|
|
44
|
-
|
|
45
|
-
// If the language type changed (e.g., markdown → python), switch adapters
|
|
46
|
-
if (correctAdapter.type !== currentAdapter.type) {
|
|
47
|
-
switchLanguage(editor, {
|
|
48
|
-
language: correctAdapter.type,
|
|
49
|
-
keepCodeAsIs: true,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const languageAdapter = editor.state.field(languageAdapterState);
|
|
54
|
-
const [code] = languageAdapter.transformIn(pythonCode);
|
|
55
|
-
// Use replaceEditorContent which preserves cursor position when focused
|
|
56
|
-
replaceEditorContent(editor, code);
|
|
57
|
-
return code;
|
|
24
|
+
return languageAdapter.transformOut(
|
|
25
|
+
editorText.slice(fromPos, toPos),
|
|
26
|
+
metadata,
|
|
27
|
+
)[0];
|
|
58
28
|
}
|
|
59
29
|
|
|
60
30
|
/**
|
|
@@ -12,10 +12,8 @@ import { Objects } from "@/utils/objects";
|
|
|
12
12
|
import { isRecord } from "@/utils/records";
|
|
13
13
|
import { getPositionAtWordBounds } from "../completion/hints";
|
|
14
14
|
import { topologicalCodesAtom } from "../copilot/getCodes";
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
updateEditorCodeFromPython,
|
|
18
|
-
} from "../language/utils";
|
|
15
|
+
import { prepareCellCodeUpdate } from "../language/cell-code";
|
|
16
|
+
import { getEditorCodeAsPython } from "../language/utils";
|
|
19
17
|
import { createNotebookLens, type NotebookLens } from "./lens";
|
|
20
18
|
import { normalizeLspDocumentation } from "./normalize-markdown-math";
|
|
21
19
|
import {
|
|
@@ -770,7 +768,10 @@ export class NotebookLanguageServerClient implements ILanguageServerClient {
|
|
|
770
768
|
// Only update if it has changed
|
|
771
769
|
const code = getEditorCodeAsPython(ev);
|
|
772
770
|
if (code !== newCode) {
|
|
773
|
-
|
|
771
|
+
const update = prepareCellCodeUpdate(ev.state, newCode);
|
|
772
|
+
if (update) {
|
|
773
|
+
ev.dispatch(update);
|
|
774
|
+
}
|
|
774
775
|
updatedCount++;
|
|
775
776
|
}
|
|
776
777
|
}
|
|
@@ -4,7 +4,7 @@ import { EditorState } from "@codemirror/state";
|
|
|
4
4
|
import { EditorView } from "@codemirror/view";
|
|
5
5
|
import { createStore } from "jotai";
|
|
6
6
|
import { describe, expect, it } from "vitest";
|
|
7
|
-
import { ConnectionState } from "@/core/
|
|
7
|
+
import { ConnectionState } from "@/core/session/types";
|
|
8
8
|
import { connectionAtom } from "../../../network/connection";
|
|
9
9
|
import { dynamicReadonly, isEditorReadonly } from "../extension";
|
|
10
10
|
|
|
@@ -5,9 +5,9 @@ import type { createStore } from "jotai";
|
|
|
5
5
|
import {
|
|
6
6
|
isAppConnected,
|
|
7
7
|
isAppConnecting,
|
|
8
|
-
} from "@/core/
|
|
8
|
+
} from "@/core/session/connection-utils";
|
|
9
9
|
import { connectionAtom } from "../../network/connection";
|
|
10
|
-
import { ConnectionState } from "../../
|
|
10
|
+
import { ConnectionState } from "../../session/types";
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* State effect for updating readonly status based on connection
|
|
@@ -172,7 +172,6 @@ awareness.addListener((updates, origin) => {
|
|
|
172
172
|
|
|
173
173
|
export function realTimeCollaboration(
|
|
174
174
|
cellId: CellId,
|
|
175
|
-
_updateCellCode: (code: string) => void,
|
|
176
175
|
initialCode = "",
|
|
177
176
|
): { extension: Extension; code: string } {
|
|
178
177
|
if (isWasm()) {
|
|
@@ -207,7 +206,13 @@ export function realTimeCollaboration(
|
|
|
207
206
|
extension: [
|
|
208
207
|
languageObserverExtension(cellId),
|
|
209
208
|
languageListenerExtension(cellId),
|
|
210
|
-
loroAwarenessPlugin(
|
|
209
|
+
loroAwarenessPlugin({
|
|
210
|
+
doc,
|
|
211
|
+
awareness,
|
|
212
|
+
user: userState,
|
|
213
|
+
getTextFromDoc: () => loroText,
|
|
214
|
+
cellId,
|
|
215
|
+
}),
|
|
211
216
|
loroSyncPlugin(doc, ["codes", cellId], () => {
|
|
212
217
|
return loroText;
|
|
213
218
|
}),
|
|
@@ -419,14 +424,21 @@ function languageListenerExtension(cellId: CellId) {
|
|
|
419
424
|
/**
|
|
420
425
|
* Create a plugin to observe awareness changes
|
|
421
426
|
*/
|
|
422
|
-
function loroAwarenessPlugin(
|
|
423
|
-
doc
|
|
424
|
-
awareness
|
|
425
|
-
user
|
|
426
|
-
getTextFromDoc
|
|
427
|
-
cellId
|
|
428
|
-
getUserId
|
|
429
|
-
|
|
427
|
+
function loroAwarenessPlugin({
|
|
428
|
+
doc,
|
|
429
|
+
awareness,
|
|
430
|
+
user,
|
|
431
|
+
getTextFromDoc,
|
|
432
|
+
cellId,
|
|
433
|
+
getUserId,
|
|
434
|
+
}: {
|
|
435
|
+
doc: LoroDoc;
|
|
436
|
+
awareness: Awareness<AwarenessState>;
|
|
437
|
+
user: UserState;
|
|
438
|
+
getTextFromDoc: (doc: LoroDoc) => LoroText;
|
|
439
|
+
cellId: CellId;
|
|
440
|
+
getUserId?: () => Uid;
|
|
441
|
+
}): Extension[] {
|
|
430
442
|
const scopeId = `loro:cell:${cellId}` as ScopeId;
|
|
431
443
|
|
|
432
444
|
return [
|
|
@@ -435,15 +447,14 @@ function loroAwarenessPlugin(
|
|
|
435
447
|
createSelectionLayer(),
|
|
436
448
|
ViewPlugin.define(
|
|
437
449
|
(view) =>
|
|
438
|
-
new AwarenessPlugin(
|
|
439
|
-
view,
|
|
450
|
+
new AwarenessPlugin(view, {
|
|
440
451
|
doc,
|
|
441
452
|
user,
|
|
442
453
|
awareness,
|
|
443
454
|
getTextFromDoc,
|
|
444
455
|
scopeId,
|
|
445
456
|
getUserId,
|
|
446
|
-
),
|
|
457
|
+
}),
|
|
447
458
|
),
|
|
448
459
|
ViewPlugin.define(
|
|
449
460
|
(view) => new RemoteAwarenessPlugin(view, doc, awareness, scopeId),
|
|
@@ -208,13 +208,19 @@ export class RemoteCursorMarker implements LayerMarker {
|
|
|
208
208
|
private name: string;
|
|
209
209
|
private colorClassName: string;
|
|
210
210
|
|
|
211
|
-
public constructor(
|
|
212
|
-
left
|
|
213
|
-
top
|
|
214
|
-
height
|
|
215
|
-
name
|
|
216
|
-
colorClassName
|
|
217
|
-
|
|
211
|
+
public constructor({
|
|
212
|
+
left,
|
|
213
|
+
top,
|
|
214
|
+
height,
|
|
215
|
+
name,
|
|
216
|
+
colorClassName,
|
|
217
|
+
}: {
|
|
218
|
+
left: number;
|
|
219
|
+
top: number;
|
|
220
|
+
height: number;
|
|
221
|
+
name: string;
|
|
222
|
+
colorClassName: string;
|
|
223
|
+
}) {
|
|
218
224
|
this.left = left;
|
|
219
225
|
this.top = top;
|
|
220
226
|
this.height = height;
|
|
@@ -271,13 +277,13 @@ export class RemoteCursorMarker implements LayerMarker {
|
|
|
271
277
|
const baseLeft = left - view.scrollDOM.scrollLeft;
|
|
272
278
|
const baseTop = rect.top - view.scrollDOM.scrollTop;
|
|
273
279
|
return [
|
|
274
|
-
new RemoteCursorMarker(
|
|
275
|
-
absolutePosition.left - baseLeft,
|
|
276
|
-
absolutePosition.top - baseTop,
|
|
277
|
-
absolutePosition.bottom - absolutePosition.top,
|
|
278
|
-
displayName,
|
|
280
|
+
new RemoteCursorMarker({
|
|
281
|
+
left: absolutePosition.left - baseLeft,
|
|
282
|
+
top: absolutePosition.top - baseTop,
|
|
283
|
+
height: absolutePosition.bottom - absolutePosition.top,
|
|
284
|
+
name: displayName,
|
|
279
285
|
colorClassName,
|
|
280
|
-
),
|
|
286
|
+
}),
|
|
281
287
|
];
|
|
282
288
|
}
|
|
283
289
|
|
|
@@ -375,12 +381,21 @@ export class AwarenessPlugin implements PluginValue {
|
|
|
375
381
|
|
|
376
382
|
public constructor(
|
|
377
383
|
view: EditorView,
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
+
{
|
|
385
|
+
doc,
|
|
386
|
+
user,
|
|
387
|
+
awareness,
|
|
388
|
+
getTextFromDoc,
|
|
389
|
+
scopeId,
|
|
390
|
+
getUserId,
|
|
391
|
+
}: {
|
|
392
|
+
doc: LoroDoc;
|
|
393
|
+
user: UserState;
|
|
394
|
+
awareness: Awareness<AwarenessState>;
|
|
395
|
+
getTextFromDoc: (doc: LoroDoc) => LoroText;
|
|
396
|
+
scopeId: ScopeId;
|
|
397
|
+
getUserId?: () => Uid;
|
|
398
|
+
},
|
|
384
399
|
) {
|
|
385
400
|
this.view = view;
|
|
386
401
|
this.doc = doc;
|
|
@@ -148,6 +148,7 @@ export class LoroSyncPluginValue implements PluginValue {
|
|
|
148
148
|
return;
|
|
149
149
|
}
|
|
150
150
|
let adj = 0;
|
|
151
|
+
// oxlint-disable-next-line marimo/prefer-object-params -- CodeMirror supplies positional change ranges and inserted text.
|
|
151
152
|
update.changes.iterChanges((fromA, toA, fromB, toB, insert) => {
|
|
152
153
|
const insertText = insert.sliceString(0, insert.length, "\n");
|
|
153
154
|
if (fromA !== toA) {
|
|
@@ -122,6 +122,7 @@ export function hasNewLines(tr: Transaction | ViewUpdate): boolean {
|
|
|
122
122
|
|
|
123
123
|
let hasNewLines = false;
|
|
124
124
|
// Iterate through all changes in the transaction
|
|
125
|
+
// oxlint-disable-next-line marimo/prefer-object-params -- CodeMirror supplies positional change ranges and inserted text.
|
|
125
126
|
tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) => {
|
|
126
127
|
// Check if the inserted text contains line breaks
|
|
127
128
|
if (inserted.toString().includes("\n")) {
|
|
@@ -79,6 +79,7 @@ test("default UserConfig - empty", () => {
|
|
|
79
79
|
"experimental": {},
|
|
80
80
|
"file_browser": {},
|
|
81
81
|
"formatting": {
|
|
82
|
+
"infer_types": "off",
|
|
82
83
|
"line_length": 79,
|
|
83
84
|
},
|
|
84
85
|
"keymap": {
|
|
@@ -155,6 +156,7 @@ test("default UserConfig - one level", () => {
|
|
|
155
156
|
"experimental": {},
|
|
156
157
|
"file_browser": {},
|
|
157
158
|
"formatting": {
|
|
159
|
+
"infer_types": "off",
|
|
158
160
|
"line_length": 79,
|
|
159
161
|
},
|
|
160
162
|
"keymap": {
|
|
@@ -273,7 +275,7 @@ test("resolvedMarimoConfigAtom overrides correctly and does not mutate the origi
|
|
|
273
275
|
autosave_delay: 1000,
|
|
274
276
|
format_on_save: false,
|
|
275
277
|
},
|
|
276
|
-
formatting: { line_length: 79 },
|
|
278
|
+
formatting: { line_length: 79, infer_types: "off" },
|
|
277
279
|
};
|
|
278
280
|
|
|
279
281
|
const overrides = {
|
|
@@ -299,7 +301,7 @@ test("resolvedMarimoConfigAtom overrides correctly and does not mutate the origi
|
|
|
299
301
|
autosave_delay: 1000,
|
|
300
302
|
format_on_save: false,
|
|
301
303
|
},
|
|
302
|
-
formatting: { line_length: 79 },
|
|
304
|
+
formatting: { line_length: 79, infer_types: "off" },
|
|
303
305
|
display: { theme: "dark" },
|
|
304
306
|
});
|
|
305
307
|
|
|
@@ -314,7 +316,7 @@ test("resolvedMarimoConfigAtom overrides correctly and does not mutate the origi
|
|
|
314
316
|
autosave_delay: 1000,
|
|
315
317
|
format_on_save: false,
|
|
316
318
|
},
|
|
317
|
-
formatting: { line_length: 79 },
|
|
319
|
+
formatting: { line_length: 79, infer_types: "off" },
|
|
318
320
|
});
|
|
319
321
|
});
|
|
320
322
|
|
|
@@ -44,6 +44,8 @@ export const DEFAULT_AI_MODEL = "openai/gpt-4o";
|
|
|
44
44
|
*/
|
|
45
45
|
const AUTO_DOWNLOAD_FORMATS = ["html", "markdown", "ipynb"] as const;
|
|
46
46
|
|
|
47
|
+
export const TYPE_INFERENCE_MODES = ["off", "jedi"] as const;
|
|
48
|
+
|
|
47
49
|
export type CopilotMode = NonNullable<schemas["AiConfig"]["mode"]>;
|
|
48
50
|
export const COPILOT_MODES: CopilotMode[] = [
|
|
49
51
|
"manual",
|
|
@@ -112,6 +114,7 @@ export const UserConfigSchema = z
|
|
|
112
114
|
.nonnegative()
|
|
113
115
|
.prefault(79)
|
|
114
116
|
.transform((n) => Math.min(n, 1000)),
|
|
117
|
+
infer_types: z.enum(TYPE_INFERENCE_MODES).prefault("off"),
|
|
115
118
|
})
|
|
116
119
|
.prefault({}),
|
|
117
120
|
keymap: z
|
|
@@ -4,7 +4,7 @@ import { requestId } from "@/__tests__/branded";
|
|
|
4
4
|
import type { DataSourceDiscoveryResult } from "@/core/kernel/messages";
|
|
5
5
|
import { connectionAtom } from "@/core/network/connection";
|
|
6
6
|
import { store } from "@/core/state/jotai";
|
|
7
|
-
import { ConnectionState } from "@/core/
|
|
7
|
+
import { ConnectionState } from "@/core/session/types";
|
|
8
8
|
import {
|
|
9
9
|
fetchDataSourceDiscovery,
|
|
10
10
|
invalidateDataSourceDiscovery,
|
|
@@ -185,8 +185,8 @@ describe("isDetectedSourceConnected", () => {
|
|
|
185
185
|
});
|
|
186
186
|
const emptySnapshot = {
|
|
187
187
|
dialects: [] as string[],
|
|
188
|
-
storageProtocols:
|
|
189
|
-
storageBackendTypes:
|
|
188
|
+
storageProtocols: new Set<string>(),
|
|
189
|
+
storageBackendTypes: new Set<string>(),
|
|
190
190
|
};
|
|
191
191
|
|
|
192
192
|
it("does not hide a source when nothing is connected", () => {
|
|
@@ -242,7 +242,7 @@ describe("isDetectedSourceConnected", () => {
|
|
|
242
242
|
expect(
|
|
243
243
|
isDetectedSourceConnected(s3, {
|
|
244
244
|
...emptySnapshot,
|
|
245
|
-
storageProtocols: ["s3"],
|
|
245
|
+
storageProtocols: new Set(["s3"]),
|
|
246
246
|
}),
|
|
247
247
|
).toBe(true);
|
|
248
248
|
});
|
|
@@ -262,7 +262,7 @@ describe("isDetectedSourceConnected", () => {
|
|
|
262
262
|
expect(
|
|
263
263
|
isDetectedSourceConnected(hf, {
|
|
264
264
|
...emptySnapshot,
|
|
265
|
-
storageBackendTypes: ["huggingface"],
|
|
265
|
+
storageBackendTypes: new Set(["huggingface"]),
|
|
266
266
|
}),
|
|
267
267
|
).toBe(true);
|
|
268
268
|
});
|
|
@@ -27,8 +27,8 @@ export function matchesDiscoveryGroup(
|
|
|
27
27
|
*/
|
|
28
28
|
export interface LiveConnectionSnapshot {
|
|
29
29
|
dialects: readonly string[];
|
|
30
|
-
storageProtocols:
|
|
31
|
-
storageBackendTypes:
|
|
30
|
+
storageProtocols: ReadonlySet<string>;
|
|
31
|
+
storageBackendTypes: ReadonlySet<string>;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/**
|
|
@@ -47,15 +47,13 @@ export function isDetectedSourceConnected(
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
if (
|
|
50
|
-
match.protocols.some((protocol) =>
|
|
51
|
-
snapshot.storageProtocols.includes(protocol),
|
|
52
|
-
)
|
|
50
|
+
match.protocols.some((protocol) => snapshot.storageProtocols.has(protocol))
|
|
53
51
|
) {
|
|
54
52
|
return true;
|
|
55
53
|
}
|
|
56
54
|
|
|
57
55
|
return match.backendTypes.some((backendType) =>
|
|
58
|
-
snapshot.storageBackendTypes.
|
|
56
|
+
snapshot.storageBackendTypes.has(backendType),
|
|
59
57
|
);
|
|
60
58
|
}
|
|
61
59
|
|
package/src/core/edit-app.tsx
CHANGED
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
useCellActions,
|
|
35
35
|
} from "./cells/cells";
|
|
36
36
|
import type { AppConfig, UserConfig } from "./config/config-schema";
|
|
37
|
+
import { DocumentProvider } from "./notebook/document";
|
|
37
38
|
import { RuntimeState } from "./kernel/RuntimeState";
|
|
38
39
|
import { getSessionId } from "./kernel/session";
|
|
39
40
|
import { useTogglePresenting } from "./layout/useTogglePresenting";
|
|
@@ -41,7 +42,7 @@ import { viewStateAtom } from "./mode";
|
|
|
41
42
|
import { useRequestClient } from "./network/requests";
|
|
42
43
|
import { useFilename } from "./saving/filename";
|
|
43
44
|
import { lastSavedNotebookAtom } from "./saving/state";
|
|
44
|
-
import { useNotebookSession } from "./
|
|
45
|
+
import { useNotebookSession } from "./session/useNotebookSession";
|
|
45
46
|
|
|
46
47
|
interface AppProps {
|
|
47
48
|
/**
|
|
@@ -81,9 +82,9 @@ export const EditApp: React.FC<AppProps> = ({
|
|
|
81
82
|
return () => {
|
|
82
83
|
RuntimeState.INSTANCE.stop();
|
|
83
84
|
};
|
|
84
|
-
}, []);
|
|
85
|
+
}, [sendComponentValues]);
|
|
85
86
|
|
|
86
|
-
const { connection, reconnect } = useNotebookSession({
|
|
87
|
+
const { connection, reconnect, documentModel } = useNotebookSession({
|
|
87
88
|
autoInstantiate: userConfig.runtime.auto_instantiate,
|
|
88
89
|
setCells: (cells, layout) => {
|
|
89
90
|
setCells(cells);
|
|
@@ -174,7 +175,7 @@ export const EditApp: React.FC<AppProps> = ({
|
|
|
174
175
|
);
|
|
175
176
|
|
|
176
177
|
return (
|
|
177
|
-
|
|
178
|
+
<DocumentProvider model={documentModel}>
|
|
178
179
|
<SandboxController onReconnect={reconnect} />
|
|
179
180
|
<AppContainer
|
|
180
181
|
connection={connection}
|
|
@@ -228,6 +229,6 @@ export const EditApp: React.FC<AppProps> = ({
|
|
|
228
229
|
/>
|
|
229
230
|
</TooltipProvider>
|
|
230
231
|
)}
|
|
231
|
-
|
|
232
|
+
</DocumentProvider>
|
|
232
233
|
);
|
|
233
234
|
};
|
|
@@ -122,6 +122,9 @@ export function describeError(error: MarimoError): string {
|
|
|
122
122
|
if (error.type === "import-star") {
|
|
123
123
|
return error.msg;
|
|
124
124
|
}
|
|
125
|
+
if (error.type === "lazy-import") {
|
|
126
|
+
return error.msg;
|
|
127
|
+
}
|
|
125
128
|
if (error.type === "ancestor-stopped") {
|
|
126
129
|
return error.msg;
|
|
127
130
|
}
|
package/src/core/export/hooks.ts
CHANGED
|
@@ -16,7 +16,7 @@ import { connectionAtom } from "../network/connection";
|
|
|
16
16
|
import { useRequestClient } from "../network/requests";
|
|
17
17
|
import type { UpdateCellOutputsRequest } from "../network/types";
|
|
18
18
|
import { VirtualFileTracker } from "../static/virtual-file-tracker";
|
|
19
|
-
import { ConnectionState } from "../
|
|
19
|
+
import { ConnectionState } from "../session/types";
|
|
20
20
|
|
|
21
21
|
const DELAY = 5000; // 5 seconds;
|
|
22
22
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { flushDocument } from "@/core/cells/document";
|
|
4
4
|
import { getSerializedLayout } from "@/core/layout/layout";
|
|
5
5
|
|
|
6
6
|
export async function getExportLayout() {
|
|
7
|
-
await
|
|
7
|
+
await flushDocument();
|
|
8
8
|
return getSerializedLayout();
|
|
9
9
|
}
|