@marimo-team/islands 0.25.3-dev14 → 0.25.3-dev140
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-BAiSVaHj.js} +17 -15
- package/dist/{ErrorBoundary-S_edj6VQ.js → ErrorBoundary-CTJ1U1fx.js} +16 -16
- package/dist/{abnfDiagram-VCTEODGH-D-Ez91gV.js → abnfDiagram-VCTEODGH-BBHN92-F.js} +2 -2
- package/dist/any-language-editor-3E24SnCV.js +75 -0
- package/dist/{architectureDiagram-5GKGNRK7-CTpcNtO8.js → architectureDiagram-5GKGNRK7-C0Rd64qh.js} +1 -1
- package/dist/{arrays-CN1djC4k.js → arrays-R6JsImiT.js} +8 -0
- package/dist/assets/__vite-browser-external-BgQNn4dS.js +1 -0
- package/dist/assets/worker-FKe3RHT4.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-CvB8Map3.js} +1142 -1141
- package/dist/{check-EDwSwP89.js → check-SpOMoCLP.js} +1 -1
- package/dist/{chunk-IMKFNOWR-DGxi-zeo.js → chunk-IMKFNOWR-hJXey5p2.js} +1 -1
- package/dist/{chunk-SHT3W25Y-CV9J3rAB.js → chunk-SHT3W25Y-JMzTmmVW.js} +1 -1
- package/dist/{chunk-SVP7TREG-BL-9Fqgg.js → chunk-SVP7TREG-BIyoHTXi.js} +1 -1
- package/dist/{chunk-TICWLB2K-Cu_XMjDM.js → chunk-TICWLB2K-CCzH2Uwa.js} +1 -1
- package/dist/{chunk-YOKDWASO-DPZk8vhS.js → chunk-YOKDWASO-DKplTrBY.js} +20 -20
- package/dist/{classDiagram-ZZMXUADV-BXXV13Hq.js → classDiagram-ZZMXUADV-DB1kOPS6.js} +2 -2
- package/dist/{classDiagram-v2-VYDZK3BY-B7FXJ1Cp.js → classDiagram-v2-VYDZK3BY-CPaFL0OB.js} +2 -2
- package/dist/{code-visibility-BBdICLTP.js → code-visibility-C1jZfwPW.js} +6 -6
- package/dist/{common-7r9HNiTn.js → common-CNv_7gvI.js} +6766 -6590
- package/dist/{copy-icon-Ft7t9bqz.js → copy-icon-C1trdvVt.js} +3 -3
- package/dist/{cynefinDiagram-5FMLGOSQ-CH96rwba.js → cynefinDiagram-5FMLGOSQ-CF93uliH.js} +1 -1
- package/dist/{dagre-GXQ25YYZ-BD3PmpFY.js → dagre-GXQ25YYZ-BBB-_p9D.js} +1 -1
- package/dist/{data-grid-overlay-editor-Bz1FTAfW.js → data-grid-overlay-editor-t0t17DPI.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-BynCnbyt.js} +1 -1
- package/dist/{diagram-UQ7AKVKN-muQtNZc4.js → diagram-UQ7AKVKN-svOxikMa.js} +1 -1
- package/dist/{diagram-VX7I27RA-CdhuZAqR.js → diagram-VX7I27RA-BVQSnPx0.js} +1 -1
- package/dist/{diagram-Z3DM3KII-BD8mXjOj.js → diagram-Z3DM3KII-nR1J0BH5.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-GWcGCcxE.js} +1277 -1229
- package/dist/{ebnfDiagram-PWID7BFC-BIN1sweE.js → ebnfDiagram-PWID7BFC-C9tq9-Qo.js} +2 -2
- package/dist/{erDiagram-RLTQ6QDP-Ctp5cfoN.js → erDiagram-RLTQ6QDP-BiaeB7Fi.js} +1 -1
- package/dist/{error-banner-D-WCIiMt.js → error-banner-D40pmfQQ.js} +83 -83
- package/dist/{error-entries-Bv6bZPF3.js → error-entries-CmFDQ9CA.js} +1018 -977
- package/dist/{feedback-button-BAheGhdl.js → feedback-button-JzaiyZZm.js} +23 -23
- package/dist/{flowDiagram-HODETNUW-3EfLrlFb.js → flowDiagram-HODETNUW-f-sLm87k.js} +2 -2
- package/dist/{formats-27CW_UP4.js → formats-CCxaLPNs.js} +3 -3
- package/dist/{ganttDiagram-EL5Y4UJY-BQT16JSc.js → ganttDiagram-EL5Y4UJY-Dh_4cBJZ.js} +2 -2
- package/dist/{glide-data-editor-CAvrTnyB.js → glide-data-editor-B3eq-1SC.js} +370 -368
- package/dist/{glide-utils-DJyqh0EM.js → glide-utils-Dz_F4pAY.js} +16 -16
- package/dist/{globals-C03jB5fY.js → globals-BW8TOLYQ.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-BrC8OJcj.js} +632 -595
- package/dist/{infoDiagram-27XIBGKW-DipQoHxl.js → infoDiagram-27XIBGKW-BHrWywBe.js} +1 -1
- package/dist/{ishikawaDiagram-5VMMS53U-DgFMjSGz.js → ishikawaDiagram-5VMMS53U-Da4s0Reg.js} +1 -1
- package/dist/{kanban-definition-UXKFOSKX-w1ACVjgl.js → kanban-definition-UXKFOSKX-DDf1GVLj.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 +7551 -7231
- package/dist/{mermaid-CHo49Yv-.js → mermaid-ClwTt7OD.js} +38 -38
- package/dist/mermaid-HWGCJPDP-Du3-HPQA.js +2 -0
- package/dist/{mindmap-definition-YA3MSWOX-CrT0KSfX.js → mindmap-definition-YA3MSWOX-D60oMZtT.js} +1 -1
- package/dist/{number-overlay-editor-DRF7iVLO.js → number-overlay-editor-DoUnDbPE.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-B9wFpMga.js} +2 -2
- package/dist/{pieDiagram-E7YTZNPT-BfxJ_XCc.js → pieDiagram-E7YTZNPT-BZwvMuBT.js} +1 -1
- package/dist/precisionRound-DhAzeRcm.js +49 -0
- package/dist/{process-output-BZg56CCb.js → process-output-Bw-vzyoy.js} +5 -5
- package/dist/{quadrantDiagram-AXDQQJYC-Ccw0xMjN.js → quadrantDiagram-AXDQQJYC-Blrm7V7_.js} +1 -1
- package/dist/{railroadDiagram-O6MQD6OU-8vFLVTPu.js → railroadDiagram-O6MQD6OU-DqhZGsN2.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-CL5dYARV.js} +1 -1
- package/dist/{reveal-component-QSvE6jwa.js → reveal-component-ClNn1CDl.js} +14 -14
- package/dist/{select-BButFi-d.js → select-CkF_GBxO.js} +537 -458
- package/dist/{sequenceDiagram-WJ2MYXX4-CXFMnxGh.js → sequenceDiagram-WJ2MYXX4-BSUCRd2x.js} +1 -1
- package/dist/{spec-BwarBpUJ.js → spec-DiSh_qJC.js} +41 -11
- package/dist/{stateDiagram-D77RDMKH-DQeA_CwI.js → stateDiagram-D77RDMKH-B-1Hvyb0.js} +2 -2
- package/dist/{stateDiagram-v2-MP3YSRHH-BxxQucm1.js → stateDiagram-v2-MP3YSRHH--HtiR4yB.js} +2 -2
- package/dist/style.css +1 -1
- package/dist/{swimlanes-42K2YHIH-Do6L-cYg.js → swimlanes-42K2YHIH-Bdfhrd-2.js} +1 -1
- package/dist/{swimlanesDiagram-VR7AAH4N-DUzPvSVU.js → swimlanesDiagram-VR7AAH4N-BJIfxSz0.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-Cs4EfFD3.js} +1 -1
- package/dist/{toDate-UtiwmnH2.js → toDate-DGvRHwTk.js} +19 -18
- 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-BmVgnMP5.js} +15 -14
- package/dist/{useDateFormatter-D8XruNGG.js → useDateFormatter-eCL_SdeG.js} +2 -2
- package/dist/{useDeepCompareMemoize-DXwzRINI.js → useDeepCompareMemoize-Ch_AeGu6.js} +1 -1
- package/dist/{useIframeCapabilities-DBETvvPl.js → useIframeCapabilities-CSdWn6NP.js} +1 -1
- package/dist/{useLifecycle-j7D9uD1o.js → useLifecycle-B5BX921H.js} +3 -3
- package/dist/{useTheme-CRnjkku0.js → useTheme-Bq9pi_vz.js} +6 -6
- package/dist/{vega-component-BeF9dfyO.js → vega-component-BgyZ-COt.js} +147 -147
- 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-DRu0vRjO.js} +1 -1
- package/dist/{wardleyDiagram-VM6X3IG4-48cUWkfA.js → wardleyDiagram-VM6X3IG4-DzbDxwDY.js} +1 -1
- package/dist/{xychartDiagram-S5SC5T6Z-CswYgYeu.js → xychartDiagram-S5SC5T6Z-CLWj6ZFQ.js} +2 -2
- package/package.json +14 -14
- package/src/__tests__/host-imports.test.ts +1 -0
- package/src/__tests__/module-entry.test.ts +32 -0
- package/src/__tests__/mount.test.ts +0 -20
- 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/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/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__/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 +13 -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/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/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/ai/add-cell-with-ai.tsx +3 -3
- package/src/components/editor/ai/ai-completion-editor.tsx +1 -0
- package/src/components/editor/alerts/startup-logs-alert.tsx +1 -0
- package/src/components/editor/cell/CreateCellButton.tsx +8 -10
- package/src/components/editor/cell/DeleteButton.tsx +1 -0
- 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 +1 -1
- 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/panels/__tests__/packages-panel.test.tsx +30 -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 +12 -18
- package/src/components/editor/chrome/wrapper/__tests__/pending-ai-cells.test.tsx +58 -1
- package/src/components/editor/chrome/wrapper/footer-items/runtime-settings.tsx +1 -7
- 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/__tests__/command-palette.test.tsx +53 -0
- package/src/components/editor/controls/__tests__/keyboard-shortcuts.test.tsx +61 -0
- 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 +12 -23
- 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/status.tsx +28 -5
- 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 +11 -2
- package/src/components/editor/output/MarimoTracebackOutput.tsx +19 -17
- 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/context/providers/datasource.ts +6 -2
- package/src/core/ai/tools/base.ts +16 -7
- package/src/core/ai/tools/edit-notebook-tool.ts +47 -45
- package/src/core/ai/tools/registry.ts +13 -8
- package/src/core/ai/tools/sample-tool.ts +6 -7
- package/src/core/attachments/state.ts +5 -8
- 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 -1
- package/src/core/cells/__tests__/collapseConsoleOutputs.test.ts +54 -0
- package/src/core/cells/__tests__/notebook-outline.test.ts +113 -0
- package/src/core/cells/__tests__/session.test.ts +117 -36
- package/src/core/cells/cell.ts +14 -3
- package/src/core/cells/cells.ts +3 -1
- package/src/core/cells/pending-delete-service.ts +2 -6
- package/src/core/cells/session.ts +1 -1
- package/src/core/cells/types.ts +10 -1
- package/src/core/codemirror/__tests__/setup.test.ts +29 -29
- package/src/core/codemirror/cells/__tests__/extensions.test.ts +15 -0
- package/src/core/codemirror/cells/extensions.ts +7 -3
- 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/extension.ts +8 -8
- 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 +9 -7
- package/src/core/codemirror/language/panel/panel.tsx +1 -0
- package/src/core/codemirror/language/types.ts +7 -7
- package/src/core/codemirror/rtc/extension.ts +24 -12
- 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/datasets/__tests__/data-source-discovery.test.ts +4 -4
- package/src/core/datasets/data-source-discovery.ts +4 -6
- package/src/core/document/__tests__/codemirror.test.ts +485 -0
- package/src/core/document/__tests__/draft.test.ts +322 -0
- package/src/core/document/__tests__/fixtures.ts +92 -0
- package/src/core/document/__tests__/hooks.test.tsx +386 -0
- package/src/core/document/__tests__/lifecycle-scenarios.test.ts +61 -0
- package/src/core/document/__tests__/model.test.ts +191 -0
- package/src/core/document/__tests__/protocol-fixtures.ts +38 -0
- package/src/core/document/__tests__/recovery-scenarios.test.ts +230 -0
- package/src/core/document/__tests__/scenario-fixture.ts +43 -0
- package/src/core/document/__tests__/scenarios.test.ts +205 -0
- package/src/core/document/__tests__/state.test.ts +438 -0
- package/src/core/document/__tests__/submission.test.ts +203 -0
- package/src/core/document/__tests__/test-host.test.ts +92 -0
- package/src/core/document/__tests__/test-host.ts +247 -0
- package/src/core/document/__tests__/test-notebook.ts +149 -0
- package/src/core/document/__tests__/user.ts +61 -0
- package/src/core/document/codemirror.ts +311 -0
- package/src/core/document/draft.ts +472 -0
- package/src/core/document/hooks.tsx +118 -0
- package/src/core/document/index.ts +15 -0
- package/src/core/document/model.ts +55 -0
- package/src/core/document/select.ts +41 -0
- package/src/core/document/state.ts +374 -0
- package/src/core/document/sync.ts +369 -0
- package/src/core/host/AGENTS.md +8 -2
- package/src/core/host/__tests__/attachments.test.ts +56 -0
- package/src/core/host/__tests__/document.test.ts +126 -0
- package/src/core/host/__tests__/fixtures.ts +71 -0
- package/src/core/host/__tests__/replica.test.ts +550 -0
- package/src/core/host/__tests__/static.test.ts +169 -0
- package/src/core/host/__tests__/wasm.test.ts +163 -0
- package/src/core/host/backend.ts +19 -0
- package/src/core/host/connection.ts +1 -40
- package/src/core/host/index.ts +14 -0
- package/src/core/host/replica.ts +286 -0
- package/src/core/host/resources/attachments.ts +22 -0
- package/src/core/host/resources/document.ts +101 -0
- package/src/core/host/static.ts +72 -0
- package/src/core/host/wasm.ts +107 -0
- 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 -20
- 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/connection.ts +4 -2
- package/src/core/network/useConnectionNotice.ts +8 -2
- package/src/core/runtime/__tests__/createWsUrl.test.ts +77 -7
- package/src/core/runtime/__tests__/runtime.test.ts +32 -58
- package/src/core/runtime/runtime.ts +38 -42
- package/src/core/runtime/types.ts +0 -2
- 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/wasm/__tests__/bridge.test.ts +42 -1
- package/src/core/wasm/__tests__/worker.test.ts +182 -0
- package/src/core/wasm/bridge.ts +40 -21
- package/src/core/wasm/rpc.ts +0 -1
- 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/types.ts +23 -14
- package/src/core/wasm/worker/worker.ts +77 -36
- package/src/core/websocket/__tests__/backend.test.ts +228 -0
- package/src/core/websocket/__tests__/connection-state.test.ts +0 -12
- package/src/core/websocket/__tests__/useNotebookReplica.hook.test.tsx +141 -0
- package/src/core/websocket/__tests__/useNotebookSession.hook.test.tsx +154 -428
- package/src/core/websocket/backend.ts +130 -0
- package/src/core/websocket/connection-state.ts +1 -11
- package/src/core/websocket/state.ts +7 -0
- package/src/core/websocket/transports/__tests__/notebook.test.ts +405 -0
- package/src/core/websocket/transports/notebook.ts +159 -0
- package/src/core/websocket/types.ts +2 -2
- package/src/core/websocket/useNotebookReplica.ts +69 -0
- package/src/core/websocket/useNotebookSession.tsx +18 -25
- package/src/css/globals.css +5 -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 +0 -4
- 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 +29 -33
- 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 +117 -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 +2 -0
- package/src/plugins/impl/anywidget/__tests__/widget-binding.test.ts +241 -2
- 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/editor.stories.tsx +24 -17
- package/src/stories/form-wrapper.stories.tsx +2 -2
- 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__/numbers.test.ts +105 -1
- package/src/utils/__tests__/objects.test.ts +21 -0
- package/src/utils/arrays.ts +10 -0
- package/src/utils/blob.ts +1 -1
- package/src/utils/numbers.ts +79 -18
- package/src/utils/objects.ts +3 -7
- 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/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/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/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
|
@@ -100,7 +100,7 @@ function getDuplicateKeymaps(state: EditorState) {
|
|
|
100
100
|
(keymap) => keymap,
|
|
101
101
|
);
|
|
102
102
|
const duplicates = Objects.fromEntries(
|
|
103
|
-
Object.entries(groupBy).filter(([
|
|
103
|
+
Object.entries(groupBy).filter(([_key, value]) => value.length > 1),
|
|
104
104
|
);
|
|
105
105
|
return duplicates;
|
|
106
106
|
}
|
|
@@ -198,22 +198,22 @@ test("go to definition falls through to lower-priority LSP keymap", () => {
|
|
|
198
198
|
test("placeholder adds another extension", () => {
|
|
199
199
|
const opts = getOpts();
|
|
200
200
|
const withAI = new PythonLanguageAdapter()
|
|
201
|
-
.getExtension(
|
|
202
|
-
opts.cellId,
|
|
203
|
-
opts.completionConfig,
|
|
204
|
-
opts.hotkeys,
|
|
205
|
-
"marimo-import",
|
|
206
|
-
opts.lspConfig,
|
|
207
|
-
)
|
|
201
|
+
.getExtension({
|
|
202
|
+
cellId: opts.cellId,
|
|
203
|
+
completionConfig: opts.completionConfig,
|
|
204
|
+
hotkeys: opts.hotkeys,
|
|
205
|
+
placeholderType: "marimo-import",
|
|
206
|
+
lspConfig: opts.lspConfig,
|
|
207
|
+
})
|
|
208
208
|
.flat();
|
|
209
209
|
const withoutAI = new PythonLanguageAdapter()
|
|
210
|
-
.getExtension(
|
|
211
|
-
opts.cellId,
|
|
212
|
-
opts.completionConfig,
|
|
213
|
-
opts.hotkeys,
|
|
214
|
-
"none",
|
|
215
|
-
opts.lspConfig,
|
|
216
|
-
)
|
|
210
|
+
.getExtension({
|
|
211
|
+
cellId: opts.cellId,
|
|
212
|
+
completionConfig: opts.completionConfig,
|
|
213
|
+
hotkeys: opts.hotkeys,
|
|
214
|
+
placeholderType: "none",
|
|
215
|
+
lspConfig: opts.lspConfig,
|
|
216
|
+
})
|
|
217
217
|
.flat();
|
|
218
218
|
expect(withAI.length - 1).toBe(withoutAI.length);
|
|
219
219
|
});
|
|
@@ -221,22 +221,22 @@ test("placeholder adds another extension", () => {
|
|
|
221
221
|
test("ai adds more extensions", () => {
|
|
222
222
|
const opts = getOpts();
|
|
223
223
|
const withAI = new PythonLanguageAdapter()
|
|
224
|
-
.getExtension(
|
|
225
|
-
opts.cellId,
|
|
226
|
-
opts.completionConfig,
|
|
227
|
-
opts.hotkeys,
|
|
228
|
-
"ai",
|
|
229
|
-
opts.lspConfig,
|
|
230
|
-
)
|
|
224
|
+
.getExtension({
|
|
225
|
+
cellId: opts.cellId,
|
|
226
|
+
completionConfig: opts.completionConfig,
|
|
227
|
+
hotkeys: opts.hotkeys,
|
|
228
|
+
placeholderType: "ai",
|
|
229
|
+
lspConfig: opts.lspConfig,
|
|
230
|
+
})
|
|
231
231
|
.flat();
|
|
232
232
|
const withoutAI = new PythonLanguageAdapter()
|
|
233
|
-
.getExtension(
|
|
234
|
-
opts.cellId,
|
|
235
|
-
opts.completionConfig,
|
|
236
|
-
opts.hotkeys,
|
|
237
|
-
"none",
|
|
238
|
-
opts.lspConfig,
|
|
239
|
-
)
|
|
233
|
+
.getExtension({
|
|
234
|
+
cellId: opts.cellId,
|
|
235
|
+
completionConfig: opts.completionConfig,
|
|
236
|
+
hotkeys: opts.hotkeys,
|
|
237
|
+
placeholderType: "none",
|
|
238
|
+
lspConfig: opts.lspConfig,
|
|
239
|
+
})
|
|
240
240
|
.flat();
|
|
241
241
|
expect(withAI.length - 2).toBe(withoutAI.length);
|
|
242
242
|
});
|
|
@@ -68,6 +68,21 @@ describe("shouldAutorunMarkdownUpdate", () => {
|
|
|
68
68
|
).toBe(false);
|
|
69
69
|
});
|
|
70
70
|
|
|
71
|
+
it("ignores remote transactions while focused", () => {
|
|
72
|
+
const transaction = createTransaction({
|
|
73
|
+
changes: { from: 0, insert: "#" },
|
|
74
|
+
annotations: [Transaction.remote.of(true)],
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
expect(
|
|
78
|
+
shouldAutorunMarkdownUpdate({
|
|
79
|
+
docChanged: transaction.docChanged,
|
|
80
|
+
transactions: [transaction],
|
|
81
|
+
hasFocus: true,
|
|
82
|
+
}),
|
|
83
|
+
).toBe(false);
|
|
84
|
+
});
|
|
85
|
+
|
|
71
86
|
it("ignores programmatic doc changes without a user event", () => {
|
|
72
87
|
const transaction = createTransaction({
|
|
73
88
|
changes: { from: 0, insert: "#" },
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
3
|
import { closeCompletion, completionStatus } from "@codemirror/autocomplete";
|
|
4
|
-
import { type Extension, Prec } from "@codemirror/state";
|
|
4
|
+
import { type Extension, Prec, Transaction } from "@codemirror/state";
|
|
5
5
|
import {
|
|
6
6
|
EditorView,
|
|
7
7
|
type KeyBinding,
|
|
@@ -382,8 +382,12 @@ function shouldAutorunMarkdownUpdate({
|
|
|
382
382
|
}
|
|
383
383
|
|
|
384
384
|
return transactions.some((tr) => {
|
|
385
|
-
// Ignore
|
|
386
|
-
|
|
385
|
+
// Ignore remote changes to avoid duplicate runs. The client that made the
|
|
386
|
+
// edit runs it.
|
|
387
|
+
if (
|
|
388
|
+
tr.annotation(Transaction.remote) ||
|
|
389
|
+
tr.annotation(loroSyncAnnotation) !== undefined
|
|
390
|
+
) {
|
|
387
391
|
return false;
|
|
388
392
|
}
|
|
389
393
|
|
|
@@ -369,7 +369,7 @@ class CodeMirrorVimSync {
|
|
|
369
369
|
// We use onIdle to keep the focused editor snappy
|
|
370
370
|
onIdle(() => {
|
|
371
371
|
if (!skipBroadcast) {
|
|
372
|
-
this.broadcastModeChange(instance, e.mode
|
|
372
|
+
this.broadcastModeChange(instance, e.mode);
|
|
373
373
|
}
|
|
374
374
|
this.isBroadcasting = false;
|
|
375
375
|
});
|
|
@@ -380,11 +380,7 @@ class CodeMirrorVimSync {
|
|
|
380
380
|
this.instances.delete(instance);
|
|
381
381
|
}
|
|
382
382
|
|
|
383
|
-
public broadcastModeChange(
|
|
384
|
-
originInstance: EditorView,
|
|
385
|
-
mode: string,
|
|
386
|
-
subMode?: string,
|
|
387
|
-
) {
|
|
383
|
+
public broadcastModeChange(originInstance: EditorView, mode: string) {
|
|
388
384
|
invariant(
|
|
389
385
|
"exitInsertMode" in Vim,
|
|
390
386
|
"Vim does not have an exitInsertMode method",
|
|
@@ -42,12 +42,14 @@ const adapter = new SQLLanguageAdapter();
|
|
|
42
42
|
const TEST_ENGINE = "test_engine" as ConnectionName;
|
|
43
43
|
|
|
44
44
|
const TEST_EXTENSION_ARGS = [
|
|
45
|
-
{
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
{
|
|
46
|
+
cellId: {} as CellId,
|
|
47
|
+
completionConfig: {} as CompletionConfig,
|
|
48
|
+
hotkeys: {} as HotkeyProvider,
|
|
49
|
+
placeholderType: {} as PlaceholderType,
|
|
50
|
+
lspConfig: {} as LSPConfig & {
|
|
51
|
+
diagnostics: DiagnosticsConfig;
|
|
52
|
+
},
|
|
51
53
|
},
|
|
52
54
|
] as const;
|
|
53
55
|
|
|
@@ -930,15 +932,15 @@ describe("SQL analysis features", () => {
|
|
|
930
932
|
|
|
931
933
|
it("reports semantic diagnostics as warnings", async () => {
|
|
932
934
|
const adapter = new SQLLanguageAdapter();
|
|
933
|
-
const extensions = adapter.getExtension(
|
|
934
|
-
{} as CellId,
|
|
935
|
-
{} as CompletionConfig,
|
|
936
|
-
{} as HotkeyProvider,
|
|
937
|
-
{} as PlaceholderType,
|
|
938
|
-
{
|
|
935
|
+
const extensions = adapter.getExtension({
|
|
936
|
+
cellId: {} as CellId,
|
|
937
|
+
completionConfig: {} as CompletionConfig,
|
|
938
|
+
hotkeys: {} as HotkeyProvider,
|
|
939
|
+
placeholderType: {} as PlaceholderType,
|
|
940
|
+
lspConfig: {
|
|
939
941
|
diagnostics: { sql_linter: true },
|
|
940
942
|
} as LSPConfig & { diagnostics: DiagnosticsConfig },
|
|
941
|
-
);
|
|
943
|
+
});
|
|
942
944
|
const state = EditorState.create({
|
|
943
945
|
doc: "SELECT missing FROM users",
|
|
944
946
|
extensions: [languageMetadataField.init(() => metadata), ...extensions],
|
|
@@ -963,15 +965,15 @@ describe("SQL analysis features", () => {
|
|
|
963
965
|
|
|
964
966
|
it("does not report unknown tables", async () => {
|
|
965
967
|
const adapter = new SQLLanguageAdapter();
|
|
966
|
-
const extensions = adapter.getExtension(
|
|
967
|
-
{} as CellId,
|
|
968
|
-
{} as CompletionConfig,
|
|
969
|
-
{} as HotkeyProvider,
|
|
970
|
-
{} as PlaceholderType,
|
|
971
|
-
{
|
|
968
|
+
const extensions = adapter.getExtension({
|
|
969
|
+
cellId: {} as CellId,
|
|
970
|
+
completionConfig: {} as CompletionConfig,
|
|
971
|
+
hotkeys: {} as HotkeyProvider,
|
|
972
|
+
placeholderType: {} as PlaceholderType,
|
|
973
|
+
lspConfig: {
|
|
972
974
|
diagnostics: { sql_linter: true },
|
|
973
975
|
} as LSPConfig & { diagnostics: DiagnosticsConfig },
|
|
974
|
-
);
|
|
976
|
+
});
|
|
975
977
|
const state = EditorState.create({
|
|
976
978
|
doc: "SELECT missing FROM users; SELECT * FROM unknown_table",
|
|
977
979
|
extensions: [languageMetadataField.init(() => metadata), ...extensions],
|
|
@@ -167,13 +167,13 @@ function updateLanguageAdapterAndCode({
|
|
|
167
167
|
setLanguageAdapter.of(nextLanguage),
|
|
168
168
|
setLanguageMetadata.of(metadata),
|
|
169
169
|
languageCompartment.reconfigure(
|
|
170
|
-
nextLanguage.getExtension(
|
|
170
|
+
nextLanguage.getExtension({
|
|
171
171
|
cellId,
|
|
172
172
|
completionConfig,
|
|
173
|
-
hotkeysProvider,
|
|
173
|
+
hotkeys: hotkeysProvider,
|
|
174
174
|
placeholderType,
|
|
175
175
|
lspConfig,
|
|
176
|
-
),
|
|
176
|
+
}),
|
|
177
177
|
),
|
|
178
178
|
// Clear history
|
|
179
179
|
historyCompartment.reconfigure([]),
|
|
@@ -218,13 +218,13 @@ export function adaptiveLanguageConfiguration(opts: {
|
|
|
218
218
|
// Language adapter
|
|
219
219
|
languageToggleKeymaps(),
|
|
220
220
|
languageCompartment.of(
|
|
221
|
-
LanguageAdapters.python.getExtension(
|
|
221
|
+
LanguageAdapters.python.getExtension({
|
|
222
222
|
cellId,
|
|
223
223
|
completionConfig,
|
|
224
224
|
hotkeys,
|
|
225
225
|
placeholderType,
|
|
226
226
|
lspConfig,
|
|
227
|
-
),
|
|
227
|
+
}),
|
|
228
228
|
),
|
|
229
229
|
languageAdapterState,
|
|
230
230
|
languageMetadataField,
|
|
@@ -323,12 +323,12 @@ export function reconfigureLanguageEffect(
|
|
|
323
323
|
}
|
|
324
324
|
|
|
325
325
|
return languageCompartment.reconfigure(
|
|
326
|
-
language.getExtension(
|
|
326
|
+
language.getExtension({
|
|
327
327
|
cellId,
|
|
328
328
|
completionConfig,
|
|
329
|
-
hotkeysProvider,
|
|
329
|
+
hotkeys: hotkeysProvider,
|
|
330
330
|
placeholderType,
|
|
331
331
|
lspConfig,
|
|
332
|
-
),
|
|
332
|
+
}),
|
|
333
333
|
);
|
|
334
334
|
}
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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> =
|
|
@@ -207,7 +207,13 @@ export function realTimeCollaboration(
|
|
|
207
207
|
extension: [
|
|
208
208
|
languageObserverExtension(cellId),
|
|
209
209
|
languageListenerExtension(cellId),
|
|
210
|
-
loroAwarenessPlugin(
|
|
210
|
+
loroAwarenessPlugin({
|
|
211
|
+
doc,
|
|
212
|
+
awareness,
|
|
213
|
+
user: userState,
|
|
214
|
+
getTextFromDoc: () => loroText,
|
|
215
|
+
cellId,
|
|
216
|
+
}),
|
|
211
217
|
loroSyncPlugin(doc, ["codes", cellId], () => {
|
|
212
218
|
return loroText;
|
|
213
219
|
}),
|
|
@@ -419,14 +425,21 @@ function languageListenerExtension(cellId: CellId) {
|
|
|
419
425
|
/**
|
|
420
426
|
* Create a plugin to observe awareness changes
|
|
421
427
|
*/
|
|
422
|
-
function loroAwarenessPlugin(
|
|
423
|
-
doc
|
|
424
|
-
awareness
|
|
425
|
-
user
|
|
426
|
-
getTextFromDoc
|
|
427
|
-
cellId
|
|
428
|
-
getUserId
|
|
429
|
-
|
|
428
|
+
function loroAwarenessPlugin({
|
|
429
|
+
doc,
|
|
430
|
+
awareness,
|
|
431
|
+
user,
|
|
432
|
+
getTextFromDoc,
|
|
433
|
+
cellId,
|
|
434
|
+
getUserId,
|
|
435
|
+
}: {
|
|
436
|
+
doc: LoroDoc;
|
|
437
|
+
awareness: Awareness<AwarenessState>;
|
|
438
|
+
user: UserState;
|
|
439
|
+
getTextFromDoc: (doc: LoroDoc) => LoroText;
|
|
440
|
+
cellId: CellId;
|
|
441
|
+
getUserId?: () => Uid;
|
|
442
|
+
}): Extension[] {
|
|
430
443
|
const scopeId = `loro:cell:${cellId}` as ScopeId;
|
|
431
444
|
|
|
432
445
|
return [
|
|
@@ -435,15 +448,14 @@ function loroAwarenessPlugin(
|
|
|
435
448
|
createSelectionLayer(),
|
|
436
449
|
ViewPlugin.define(
|
|
437
450
|
(view) =>
|
|
438
|
-
new AwarenessPlugin(
|
|
439
|
-
view,
|
|
451
|
+
new AwarenessPlugin(view, {
|
|
440
452
|
doc,
|
|
441
453
|
user,
|
|
442
454
|
awareness,
|
|
443
455
|
getTextFromDoc,
|
|
444
456
|
scopeId,
|
|
445
457
|
getUserId,
|
|
446
|
-
),
|
|
458
|
+
}),
|
|
447
459
|
),
|
|
448
460
|
ViewPlugin.define(
|
|
449
461
|
(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")) {
|
|
@@ -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
|
|