@marimo-team/islands 0.22.1-dev9 → 0.22.2
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-iT7t3FxV.js → ConnectedDataExplorerComponent-DuD8BVl6.js} +54 -54
- package/dist/{Plot-WhbJAbBh.js → Plot-BxlSHo0G.js} +47 -38
- package/dist/_basePickBy-Sow3pJjS.js +41 -0
- package/dist/{_baseUniq-B4eL5sTC.js → _baseUniq-C87CckHL.js} +15 -54
- package/dist/{any-language-editor-CT_9yBde.js → any-language-editor-BHH_pQ6M.js} +21 -21
- package/dist/architecture-7HQA4BMR-BHdkAMvZ.js +6 -0
- package/dist/{architectureDiagram-VXUJARFQ-vxgYGIMP.js → architectureDiagram-VXUJARFQ-B3YQo9At.js} +15 -15
- package/dist/{arrays-Du-jRBAy.js → arrays-beUWo8RF.js} +1 -1
- package/dist/assets/__vite-browser-external-WSlCcXn_.js +1 -0
- package/dist/assets/{worker-D10K3OOz.js → worker-DUYMdbtA.js} +2 -2
- package/dist/{blockDiagram-VD42YOAC-C7x6YTH7.js → blockDiagram-VD42YOAC-CpQ3TKEN.js} +7 -7
- package/dist/{button-qsiIHncQ.js → button-DNlNlZY_.js} +82 -84
- package/dist/{c4Diagram-YG6GDRKO-Cx4oseGg.js → c4Diagram-YG6GDRKO-CZSU4uqU.js} +4 -4
- package/dist/{capabilities-26mwv03y.js → capabilities-Coe9eM9T.js} +2 -2
- package/dist/{channel-C_50jIAn.js → channel-X3JKk8gE.js} +1 -1
- package/dist/{chat-ui-CtqUthFR.js → chat-ui-Cel1kBfc.js} +147 -146
- package/dist/{check-D_YwHEgY.js → check-CWUkiHmb.js} +1 -1
- package/dist/{chunk-4F5CHEZ2-Dvo_CFnR.js → chunk-4F5CHEZ2-D5mClyDv.js} +1 -1
- package/dist/{chunk-ABZYJK2D-D5YIs71w.js → chunk-ABZYJK2D-CZYCCtLy.js} +1 -1
- package/dist/{chunk-ATLVNIR6-CyOjzOcf.js → chunk-ATLVNIR6-DaOzLLgN.js} +1 -1
- package/dist/{chunk-B2363JML-BzZqINRO.js → chunk-B2363JML-Br0eA2T3.js} +1 -1
- package/dist/{chunk-B4BG7PRW-ZJeV3KdD.js → chunk-B4BG7PRW-4BjV11Br.js} +4 -4
- package/dist/{chunk-DI55MBZ5-Dx_wwX6l.js → chunk-DI55MBZ5-DITY3EyP.js} +4 -4
- package/dist/{chunk-EXTU4WIE-CgefpSXQ.js → chunk-EXTU4WIE-jUPSAk3i.js} +1 -1
- package/dist/{chunk-FRFDVMJY-Derq8UzY.js → chunk-FRFDVMJY-DnEvEFRR.js} +1 -1
- package/dist/{chunk-JA3XYJ7Z-CcIOIFpc.js → chunk-JA3XYJ7Z-BcPEfxk_.js} +2 -2
- package/dist/{chunk-JZLCHNYA-CgO0GG1p.js → chunk-JZLCHNYA-2bnLL3xL.js} +4 -4
- package/dist/{chunk-N4CR4FBY-2qzGzAxT.js → chunk-N4CR4FBY-CpZSuGSU.js} +5 -5
- package/dist/{chunk-PL6DKKU2-KoG71Zin.js → chunk-PL6DKKU2-DnId6G-x.js} +1 -1
- package/dist/{chunk-QN33PNHL-Dp1qBo28.js → chunk-QN33PNHL-B9p5ojHB.js} +1 -1
- package/dist/{chunk-QXUST7PY-BxmmeIwf.js → chunk-QXUST7PY-Ch6F5Obl.js} +5 -5
- package/dist/{chunk-S3R3BYOJ-D3Rys9ZW.js → chunk-S3R3BYOJ-B0UOFJwq.js} +3 -3
- package/dist/{chunk-SJTYNZTY-Co-DhKAG.js → chunk-SJTYNZTY-BsBZnJUj.js} +1 -1
- package/dist/{chunk-TCCFYFTB-BAhzIqBO.js → chunk-TCCFYFTB-Clbl-fTg.js} +8 -7
- package/dist/{chunk-TQ3KTPDO-DxYI735Z.js → chunk-TQ3KTPDO-CFkSQ30e.js} +1 -1
- package/dist/{chunk-TZMSLE5B-Dxumt0wv.js → chunk-TZMSLE5B-D45397J2.js} +1 -1
- package/dist/{chunk-UMXZTB3W-CuahpKin.js → chunk-UMXZTB3W-D-A834Bq.js} +1 -1
- package/dist/{classDiagram-v2-WZHVMYZB-CYoFMQKE.js → classDiagram-2ON5EDUG-C8-zE3Zv.js} +10 -10
- package/dist/{classDiagram-2ON5EDUG-DkOvXRlx.js → classDiagram-v2-WZHVMYZB-DrmbGANl.js} +10 -10
- package/dist/{clone-DDndUqI0.js → clone-DZFQCtFJ.js} +1 -1
- package/dist/{constants-D1Am36hX.js → constants-CvyfaCvs.js} +3 -3
- package/dist/{copy-CBo9JcJW.js → copy-B7781WJ3.js} +2 -2
- package/dist/{dagre-6UL2VRFP-BXBaU8PB.js → dagre-6UL2VRFP-OMItEBnY.js} +12 -12
- package/dist/{dagre-D3dlYz-r.js → dagre-QVd-lCXU.js} +13 -23
- package/dist/{data-grid-overlay-editor-nZux6_d2.js → data-grid-overlay-editor-lKF301ME.js} +1 -1
- package/dist/{diagram-PSM6KHXK-CJxjk4LG.js → diagram-PSM6KHXK-CkKbohWI.js} +16 -16
- package/dist/{diagram-QEK2KX5R-IMILPh_p.js → diagram-QEK2KX5R-DjUMpVcx.js} +14 -14
- package/dist/{diagram-S2PKOQOG-6O0g6Boj.js → diagram-S2PKOQOG-b-c0d-wZ.js} +14 -14
- package/dist/{dist-BkXs8bw0.js → dist--6TSlp8H.js} +1 -1
- package/dist/dist-7K5doRvB.js +6 -0
- package/dist/{dist-CQidOwep.js → dist-B43sbpd0.js} +3 -3
- package/dist/dist-B6I_A2-E.js +8 -0
- package/dist/dist-BEQsmaZY.js +5 -0
- package/dist/dist-BasY2RHp.js +8 -0
- package/dist/{dist-BemtTYzN.js → dist-Bfp1XXWt.js} +5 -5
- package/dist/{dist-v-1kgqZ3.js → dist-BjDuO5JW.js} +1 -1
- package/dist/dist-Bosc00dY.js +5 -0
- package/dist/{dist-DLNKBPsk.js → dist-BrxqmS9Q.js} +4 -4
- package/dist/{dist-DBYL08Lu.js → dist-BvhGByxL.js} +4 -4
- package/dist/{dist-CVqlhD3M.js → dist-C4bq5Ioy.js} +2 -2
- package/dist/{dist-DwmxBUOe.js → dist-CFKdzOIu.js} +2 -2
- package/dist/{dist-5nTQE2yt.js → dist-CIB8w0Fl.js} +2 -2
- package/dist/{dist-C-EcLtO9.js → dist-CNF0QBLR.js} +1 -1
- package/dist/dist-CQMZOn-_.js +8 -0
- package/dist/dist-CViQhWZ8.js +5 -0
- package/dist/{dist-Dg65j0em.js → dist-CcMfr7jD.js} +1 -1
- package/dist/{dist-C0XYIHKJ.js → dist-Ci0CXEFt.js} +1 -1
- package/dist/dist-Cz6rLfwY.js +5 -0
- package/dist/dist-D8eq8st3.js +6 -0
- package/dist/{dist-qoCY8giM.js → dist-DAfcmt-d.js} +2 -2
- package/dist/{dist-B6Op2ogv.js → dist-DD_cYHOl.js} +2 -2
- package/dist/{dist-BUSLKXcu.js → dist-DFK94vuS.js} +2 -2
- package/dist/{dist-DBXPlQ0D.js → dist-DGNtjMZu.js} +1 -1
- package/dist/{dist-C9qF7MRB.js → dist-DJ9F1eHs.js} +2 -2
- package/dist/{dist-Ci_jEudG.js → dist-DJKubHDd.js} +1 -1
- package/dist/{dist-CnFp2Kcl.js → dist-DLafRu9s.js} +2 -2
- package/dist/dist-DM1UDXdl.js +5 -0
- package/dist/dist-DNrtWPgS.js +5 -0
- package/dist/dist-D_UjpfOY.js +1381 -0
- package/dist/{dist-DmFS6KZW.js → dist-DbnBiLNH.js} +3 -3
- package/dist/{dist-BiZZAo22.js → dist-DlSUOIm9.js} +1 -1
- package/dist/{dist-DStU8He1.js → dist-Doy0mQDg.js} +2 -2
- package/dist/{dist-CxAX99oC.js → dist-DpkJHKB8.js} +2 -2
- package/dist/{dist-DjaZNkZ7.js → dist-LhQNUe5A.js} +3 -3
- package/dist/dist-V7q2qnpA.js +5 -0
- package/dist/{dist-BJ3fhRYu.js → dist-VqF3W_ue.js} +2 -2
- package/dist/dist-a5_hPgu2.js +8 -0
- package/dist/{dist-B9KLrfoh.js → dist-ej6AQKaS.js} +1 -1
- package/dist/{dist-Brb6VNc4.js → dist-m9tsXsFf.js} +2 -2
- package/dist/{dist-CBwMSFDu.js → dist-tGk0aZ--.js} +2 -2
- package/dist/dist-uVyZcV1-.js +5 -0
- package/dist/{erDiagram-Q2GNP2WA-sho7Cl9f.js → erDiagram-Q2GNP2WA-CDhLaOZ1.js} +10 -10
- package/dist/{error-banner-Bx9kIgrs.js → error-banner-Cjf0RU9I.js} +79 -79
- package/dist/{esm-CMg2ABu6.js → esm-4wmsH2lp.js} +6 -6
- package/dist/{esm-cqK9POGH.js → esm-CD1iby2n.js} +23 -23
- package/dist/{flowDiagram-NV44I4VS-C4nY4Fbz.js → flowDiagram-NV44I4VS-BDi4O4CL.js} +10 -10
- package/dist/{ganttDiagram-JELNMOA3-CtxNcCM2.js → ganttDiagram-JELNMOA3-BpZE6kVp.js} +3 -3
- package/dist/{gitGraph-G5XIXVHT-SL6TDof6.js → gitGraph-G5XIXVHT-B_c6xFJv.js} +3 -3
- package/dist/{gitGraphDiagram-V2S2FVAM-D9885mxd.js → gitGraphDiagram-V2S2FVAM-iQnXzbPM.js} +13 -13
- package/dist/{glide-data-editor-CkVEV-Gk.js → glide-data-editor-BqnvTmDo.js} +1739 -1708
- package/dist/{graphlib-CxWdvYQt.js → graphlib-BV1_gi0C.js} +4 -3
- package/dist/hasIn-DnfJcYpY.js +108 -0
- package/dist/{info-VBDWY6EO-6MXPTSmi.js → info-VBDWY6EO-BTyzxmhr.js} +3 -3
- package/dist/{infoDiagram-HS3SLOUP-Bw2FlRwF.js → infoDiagram-HS3SLOUP-OYrX6uO3.js} +13 -13
- package/dist/{input-BSde8uV4.js → input-CFY9gApZ.js} +5055 -5055
- package/dist/{isEmpty-BQtUinxJ.js → isEmpty-B7FX9wKt.js} +1 -1
- package/dist/{isSymbol-DFp8040B.js → isSymbol-DCbjQG_U.js} +1 -1
- package/dist/{journeyDiagram-XKPGCS4Q-BXlCEth8.js → journeyDiagram-XKPGCS4Q-ClPC94aN.js} +3 -3
- package/dist/{kanban-definition-3W4ZIXB7-CorxzSYm.js → kanban-definition-3W4ZIXB7-DHEAKdZt.js} +7 -7
- package/dist/{label-DTNqw9tv.js → label-DbZGAoCH.js} +538 -569
- package/dist/{loader-CMMa6QVT.js → loader-Bd1kgLn7.js} +15 -15
- package/dist/main.js +35011 -34898
- package/dist/{memoize-CuHciEBb.js → memoize-CSTI9eOX.js} +1 -1
- package/dist/{merge-CA_buyY3.js → merge-CVhG7q_o.js} +1 -1
- package/dist/{mermaid-CEKslOkI.js → mermaid-B2HDLx2g.js} +54 -54
- package/dist/{mermaid-parser.core-cq4YDee-.js → mermaid-parser.core-ntCgyx0x.js} +8 -8
- package/dist/min-Ds3gG0Ff.js +96 -0
- package/dist/{mindmap-definition-VGOIOE7T-DRsT8UaN.js → mindmap-definition-VGOIOE7T-CxEUZZvY.js} +9 -9
- package/dist/{now-CXAdKY5k.js → now-nrrrOr01.js} +1 -1
- package/dist/{once-CZno0h-b.js → once-C_TIu-kR.js} +1 -1
- package/dist/{packet-DYOGHKS2-Dw08gMaZ.js → packet-DYOGHKS2-BhvnpoGi.js} +3 -3
- package/dist/{pie-VRWISCQL-C5SPSvT8.js → pie-VRWISCQL-dILuA3iG.js} +3 -3
- package/dist/{pieDiagram-ADFJNKIX-DhJ1Cx2O.js → pieDiagram-ADFJNKIX-U3LrUqAS.js} +14 -14
- package/dist/{process-output-KyzWazB-.js → process-output-DC1TOnIl.js} +3184 -3207
- package/dist/{quadrantDiagram-AYHSOK5B-DXUFIWlz.js → quadrantDiagram-AYHSOK5B-BVWuq-3R.js} +2 -2
- package/dist/{radar-ZZBFDIW7-BvY0bgSg.js → radar-ZZBFDIW7-DwFrOJDj.js} +3 -3
- package/dist/range-fJeId9Ri.js +30 -0
- package/dist/{requirementDiagram-UZGBJVZJ-DO_gtQIb.js → requirementDiagram-UZGBJVZJ-D0zpQnKC.js} +9 -9
- package/dist/{sankeyDiagram-TZEHDZUN-OZzXEkuG.js → sankeyDiagram-TZEHDZUN-CExy1joT.js} +2 -2
- package/dist/{sequenceDiagram-WL72ISMW-K7nZRifV.js → sequenceDiagram-WL72ISMW-D1BJxLjH.js} +4 -4
- package/dist/{slides-component-CIcSvFh7.js → slides-component-CX2JC-Ws.js} +2 -2
- package/dist/{spec-DYaR1rJh.js → spec-CD7QaCV-.js} +3 -3
- package/dist/{stateDiagram-FKZM4ZOC-DzXJZAq7.js → stateDiagram-FKZM4ZOC-B1S8jGMn.js} +12 -12
- package/dist/{stateDiagram-v2-4FDKWEC3-BZBPUmyF.js → stateDiagram-v2-4FDKWEC3-BH5ozUbc.js} +10 -10
- package/dist/stex-CQDv3aS8.js +4 -0
- package/dist/style.css +1 -1
- package/dist/{timeline-definition-IT6M3QCI-DNoLAh-i.js → timeline-definition-IT6M3QCI-BDT9JAmn.js} +2 -2
- package/dist/{toDate-D6VXexnV.js → toDate-CUqpEbBS.js} +5 -5
- package/dist/{toNumber-xFPoy1OI.js → toNumber-55tjPCWr.js} +2 -2
- package/dist/tooltip-BXEpXV3R.js +404 -0
- package/dist/{treemap-GDKQZRPO-C5OoxpmV.js → treemap-GDKQZRPO-bx2ngsgN.js} +3 -3
- package/dist/{types-CQ-RbYxp.js → types-D_ntCXg0.js} +3 -3
- package/dist/{useAsyncData-Cd4Urlww.js → useAsyncData-rN1nzPaS.js} +2 -2
- package/dist/{useDeepCompareMemoize-DOzKCTzc.js → useDeepCompareMemoize-Ch-7Rk2x.js} +4 -4
- package/dist/{useIframeCapabilities-BVQrlRBd.js → useIframeCapabilities-CqhrVue6.js} +1 -1
- package/dist/useLifecycle-4fA1pHoh.js +177 -0
- package/dist/{useTheme-Dm1WaAGy.js → useTheme-MWfxn4oz.js} +4 -5
- package/dist/{vega-component-BaDgUvQP.js → vega-component-CPhNLfZZ.js} +25 -25
- package/dist/{xychartDiagram-PRI3JC2R-ehVeySMW.js → xychartDiagram-PRI3JC2R-CuAZiqHS.js} +5 -5
- package/dist/{Combination-B--d1_LV.js → zod-C6UGQ3fz.js} +8085 -8151
- package/package.json +8 -41
- package/src/__mocks__/common.ts +4 -4
- package/src/__tests__/main.test.tsx +12 -14
- package/src/components/ai/ai-provider-icon.tsx +3 -2
- package/src/components/app-config/user-config-form.tsx +0 -27
- package/src/components/chat/acp/agent-docs.tsx +3 -3
- package/src/components/chat/acp/agent-panel.tsx +71 -24
- package/src/components/chat/acp/agent-selector.tsx +2 -11
- package/src/components/chat/acp/state.ts +15 -3
- package/src/components/chat/chat-history-popover.tsx +1 -1
- package/src/components/chat/chat-panel.tsx +2 -1
- package/src/components/data-table/TableBottomBar.tsx +7 -1
- package/src/components/data-table/TableTopBar.tsx +31 -35
- package/src/components/data-table/__tests__/columns.test.tsx +7 -7
- package/src/components/data-table/cell-hover-template/types.ts +1 -1
- package/src/components/data-table/cell-hover-text/types.ts +1 -1
- package/src/components/data-table/cell-selection/__tests__/feature.test.ts +1 -1
- package/src/components/data-table/cell-selection/types.ts +4 -3
- package/src/components/data-table/cell-styling/types.ts +1 -1
- package/src/components/data-table/charts/chart-spec/altair-generator.ts +2 -2
- package/src/components/data-table/charts/charts.tsx +2 -2
- package/src/components/data-table/charts/components/chart-items.tsx +1 -1
- package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
- package/src/components/data-table/column-formatting/types.ts +5 -4
- package/src/components/data-table/column-header.tsx +4 -2
- package/src/components/data-table/column-summary/legacy-chart-spec.ts +1 -1
- package/src/components/data-table/column-wrapping/types.ts +4 -3
- package/src/components/data-table/columns.tsx +4 -1
- package/src/components/data-table/copy-column/types.ts +4 -3
- package/src/components/data-table/data-table.tsx +12 -11
- package/src/components/data-table/focus-row/types.ts +4 -3
- package/src/components/data-table/loading-table.tsx +1 -1
- package/src/components/data-table/pagination.tsx +1 -1
- package/src/components/data-table/range-focus/__tests__/atoms.test.ts +13 -13
- package/src/components/data-table/range-focus/__tests__/use-cell-range-selection.test.ts +9 -11
- package/src/components/data-table/range-focus/atoms.ts +2 -2
- package/src/components/data-table/range-focus/cell-selection-stats.tsx +3 -1
- package/src/components/data-table/renderers.tsx +18 -12
- package/src/components/data-table/row-viewer-panel/row-viewer.tsx +1 -1
- package/src/components/data-table/table-explorer-panel/table-explorer-panel.tsx +2 -2
- package/src/components/dependency-graph/dependency-graph-tree.tsx +1 -1
- package/src/components/editor/__tests__/data-attributes.test.tsx +93 -94
- package/src/components/editor/__tests__/dynamic-favicon.test.tsx +1 -1
- package/src/components/editor/actions/name-cell-input.tsx +4 -2
- package/src/components/editor/actions/pair-with-agent-modal.tsx +179 -0
- package/src/components/editor/actions/useCellActionButton.tsx +4 -2
- package/src/components/editor/actions/useNotebookActions.tsx +10 -0
- package/src/components/editor/ai/add-cell-with-ai.tsx +2 -1
- package/src/components/editor/ai/ai-completion-editor.tsx +1 -1
- package/src/components/editor/app-container.tsx +1 -1
- package/src/components/editor/cell/CellStatus.tsx +4 -5
- package/src/components/editor/cell/cell-context-menu.tsx +4 -2
- package/src/components/editor/cell/code/cell-editor.tsx +3 -2
- package/src/components/editor/cell/toolbar.tsx +2 -1
- package/src/components/editor/chrome/components/contribute-snippet-button.tsx +4 -1
- package/src/components/editor/chrome/components/feedback-button.tsx +4 -1
- package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +1 -1
- package/src/components/editor/chrome/panels/empty-state.tsx +1 -0
- package/src/components/editor/chrome/panels/file-explorer-panel.tsx +0 -10
- package/src/components/editor/chrome/panels/snippets-panel.tsx +1 -1
- package/src/components/editor/chrome/panels/write-secret-modal.tsx +1 -1
- package/src/components/editor/chrome/wrapper/app-chrome.tsx +4 -1
- package/src/components/editor/chrome/wrapper/footer-items/lsp-status.tsx +2 -1
- package/src/components/editor/chrome/wrapper/storage.ts +2 -2
- package/src/components/editor/connections/database/as-code.ts +1 -1
- package/src/components/editor/connections/form-renderers.tsx +1 -1
- package/src/components/editor/connections/storage/as-code.ts +1 -1
- package/src/components/editor/controls/keyboard-shortcuts.tsx +1 -1
- package/src/components/editor/header/filename-input.tsx +4 -1
- package/src/components/editor/links/cell-link-list.tsx +1 -1
- package/src/components/editor/navigation/__tests__/navigation.test.ts +1 -1
- package/src/components/editor/navigation/clipboard.ts +1 -1
- package/src/components/editor/navigation/multi-cell-action-toolbar.tsx +2 -2
- package/src/components/editor/navigation/navigation.ts +3 -3
- package/src/components/editor/notebook-cell.tsx +1 -1
- package/src/components/editor/output/JsonOutput.tsx +6 -6
- package/src/components/editor/output/ansi-reduce.ts +2 -2
- package/src/components/editor/output/console/ConsoleOutput.tsx +2 -2
- package/src/components/editor/renderers/cells-renderer.tsx +1 -1
- package/src/components/editor/renderers/grid-layout/grid-layout.tsx +1 -1
- package/src/components/editor/renderers/plugins.ts +1 -1
- package/src/components/editor/renderers/slides-layout/types.ts +2 -2
- package/src/components/editor/renderers/vertical-layout/__tests__/useFocusFirstEditor.test.ts +2 -2
- package/src/components/editor/renderers/vertical-layout/__tests__/vertical-layout.test.ts +1 -1
- package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +12 -13
- package/src/components/find-replace/find-replace.tsx +3 -1
- package/src/components/forms/form.tsx +1 -1
- package/src/components/forms/options.ts +1 -1
- package/src/components/pages/gallery-page.tsx +1 -1
- package/src/components/static-html/static-banner.tsx +2 -2
- package/src/components/storage/__tests__/storage-snippets.test.ts +4 -6
- package/src/components/terminal/terminal.tsx +4 -4
- package/src/components/tracing/tracing.test.tsx +30 -30
- package/src/components/ui/accordion.tsx +1 -1
- package/src/components/ui/alert-dialog.tsx +1 -1
- package/src/components/ui/badge.tsx +2 -1
- package/src/components/ui/button.tsx +5 -4
- package/src/components/ui/calendar.tsx +3 -2
- package/src/components/ui/checkbox.tsx +1 -1
- package/src/components/ui/combobox.tsx +2 -1
- package/src/components/ui/command.tsx +5 -2
- package/src/components/ui/context-menu.tsx +1 -1
- package/src/components/ui/date-input.tsx +7 -6
- package/src/components/ui/date-picker.tsx +6 -4
- package/src/components/ui/dialog.tsx +1 -1
- package/src/components/ui/draggable-popover.tsx +1 -1
- package/src/components/ui/dropdown-menu.tsx +2 -1
- package/src/components/ui/field.tsx +1 -2
- package/src/components/ui/form.tsx +4 -5
- package/src/components/ui/fullscreen.tsx +4 -1
- package/src/components/ui/label.tsx +1 -1
- package/src/components/ui/navigation.tsx +1 -1
- package/src/components/ui/popover.tsx +1 -1
- package/src/components/ui/progress.tsx +4 -3
- package/src/components/ui/query-param-preserving-link.tsx +4 -2
- package/src/components/ui/radio-group.tsx +1 -1
- package/src/components/ui/range-slider.tsx +1 -1
- package/src/components/ui/scroll-area.tsx +1 -1
- package/src/components/ui/select.tsx +1 -1
- package/src/components/ui/sheet.tsx +3 -2
- package/src/components/ui/slider.tsx +1 -1
- package/src/components/ui/switch.tsx +1 -1
- package/src/components/ui/tabs.tsx +1 -1
- package/src/components/ui/textarea.tsx +1 -2
- package/src/components/ui/toast.tsx +1 -1
- package/src/components/ui/toggle.tsx +1 -1
- package/src/components/ui/tooltip.tsx +1 -1
- package/src/components/variables/variables-table.tsx +1 -1
- package/src/core/ai/context/providers/__tests__/datasource.test.ts +1 -1
- package/src/core/ai/context/providers/__tests__/error.test.ts +1 -1
- package/src/core/ai/context/providers/__tests__/variable.test.ts +1 -1
- package/src/core/ai/context/providers/cell-output.ts +1 -2
- package/src/core/ai/context/registry.ts +2 -2
- package/src/core/ai/tools/edit-notebook-tool.ts +4 -3
- package/src/core/ai/tools/registry.ts +1 -1
- package/src/core/ai/tools/run-cells-tool.ts +4 -3
- package/src/core/cells/__tests__/add-missing-import.test.ts +23 -22
- package/src/core/cells/__tests__/cell.test.ts +14 -13
- package/src/core/cells/__tests__/cells.test.ts +2 -2
- package/src/core/cells/__tests__/scrollCellIntoView.test.ts +1 -1
- package/src/core/cells/__tests__/session.test.ts +1 -1
- package/src/core/cells/__tests__/utils.test.ts +1 -1
- package/src/core/cells/cells.ts +2 -2
- package/src/core/cells/ids.ts +1 -1
- package/src/core/cells/logs.ts +1 -1
- package/src/core/codemirror/ai/request.ts +1 -1
- package/src/core/codemirror/cells/__tests__/extensions.test.ts +15 -17
- package/src/core/codemirror/cells/traceback-decorations.ts +1 -1
- package/src/core/codemirror/copilot/__tests__/language-server.test.ts +1 -1
- package/src/core/codemirror/copilot/__tests__/transport.test.ts +129 -3
- package/src/core/codemirror/copilot/client.ts +9 -2
- package/src/core/codemirror/copilot/getCodes.ts +1 -1
- package/src/core/codemirror/copilot/language-server.ts +12 -1
- package/src/core/codemirror/copilot/transport.ts +34 -8
- package/src/core/codemirror/copilot/types.ts +1 -1
- package/src/core/codemirror/facet.ts +1 -1
- package/src/core/codemirror/language/__tests__/sql.test.ts +4 -4
- package/src/core/codemirror/language/languages/markdown.ts +1 -3
- package/src/core/codemirror/language/languages/python.ts +4 -0
- package/src/core/codemirror/language/languages/sql/completion-builder.ts +1 -1
- package/src/core/codemirror/language/languages/sql/completion-sources.tsx +4 -6
- package/src/core/codemirror/language/languages/sql/sql.ts +1 -3
- package/src/core/codemirror/language/metadata.ts +1 -1
- package/src/core/codemirror/language/panel/sql.tsx +4 -1
- package/src/core/codemirror/language/types.ts +1 -1
- package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +1 -1
- package/src/core/codemirror/lsp/notebook-lsp.ts +1 -1
- package/src/core/codemirror/misc/__tests__/dnd.test.ts +1 -1
- package/src/core/codemirror/reactive-references/__tests__/analyzer.test.ts +28 -42
- package/src/core/codemirror/rtc/loro/awareness.ts +1 -1
- package/src/core/config/__tests__/config-schema.test.ts +2 -6
- package/src/core/config/config-schema.ts +0 -1
- package/src/core/config/feature-flag.tsx +1 -3
- package/src/core/datasets/data-source-connections.ts +4 -2
- package/src/core/datasets/state.ts +1 -1
- package/src/core/dom/__tests__/htmlUtils.test.ts +8 -14
- package/src/core/dom/__tests__/outline.test.ts +2 -3
- package/src/core/dom/outline.ts +1 -1
- package/src/core/dom/uiregistry.ts +42 -8
- package/src/core/edit-app.tsx +4 -1
- package/src/core/export/__tests__/hooks.test.ts +1 -1
- package/src/core/hotkeys/__tests__/hotkeys.test.ts +1 -1
- package/src/core/hotkeys/shortcuts.ts +1 -1
- package/src/core/islands/__tests__/bridge.test.ts +2 -2
- package/src/core/islands/__tests__/parse.test.ts +8 -7
- package/src/core/islands/bridge.ts +2 -2
- package/src/core/islands/components/output-wrapper.tsx +1 -1
- package/src/core/islands/parse.ts +1 -1
- package/src/core/lsp/__tests__/transport.test.ts +1 -1
- package/src/core/network/CachingRequestRegistry.ts +1 -1
- package/src/core/network/DeferredRequestRegistry.ts +1 -1
- package/src/core/network/__tests__/requests-network.test.ts +1 -1
- package/src/core/network/api.ts +2 -2
- package/src/core/network/requests-lazy.ts +1 -1
- package/src/core/network/requests-toasting.tsx +1 -1
- package/src/core/runtime/runtime.ts +1 -0
- package/src/core/saving/__tests__/filename.test.ts +7 -6
- package/src/core/static/__tests__/download-html.test.ts +16 -15
- package/src/core/static/__tests__/files.test.ts +30 -28
- package/src/core/static/files.ts +1 -1
- package/src/core/vscode/vscode-bindings.ts +1 -1
- package/src/core/wasm/bridge.ts +3 -3
- package/src/core/wasm/worker/tracer.ts +1 -1
- package/src/core/websocket/useWebSocket.tsx +5 -3
- package/src/css/app/Cell.css +5 -2
- package/src/css/globals.css +18 -16
- package/src/custom.d.ts +1 -1
- package/src/hooks/__tests__/useDuplicateShortcuts.test.ts +3 -3
- package/src/hooks/debug.ts +3 -3
- package/src/hooks/useDebounce.ts +1 -1
- package/src/hooks/useEventListener.ts +1 -1
- package/src/hooks/useHotkey.ts +1 -1
- package/src/hooks/useLifecycle.ts +2 -2
- package/src/hooks/useNonce.ts +1 -1
- package/src/hooks/useResizeObserver.ts +2 -2
- package/src/main.tsx +1 -1
- package/src/plugins/core/BadPlugin.tsx +7 -6
- package/src/plugins/core/RenderHTML.tsx +3 -3
- package/src/plugins/core/__test__/registerReactComponent.test.ts +1 -1
- package/src/plugins/core/registerReactComponent.tsx +4 -4
- package/src/plugins/core/rpc.ts +1 -1
- package/src/plugins/impl/CheckboxPlugin.tsx +4 -1
- package/src/plugins/impl/DataEditorPlugin.tsx +8 -3
- package/src/plugins/impl/DataTablePlugin.tsx +5 -2
- package/src/plugins/impl/FileBrowserPlugin.tsx +1 -1
- package/src/plugins/impl/FormPlugin.tsx +2 -3
- package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +4 -1
- package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +1 -1
- package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +43 -15
- package/src/plugins/impl/anywidget/AnyWidgetPlugin.tsx +3 -12
- package/src/plugins/impl/anywidget/__tests__/model.test.ts +2 -2
- package/src/plugins/impl/anywidget/model.ts +1 -1
- package/src/plugins/impl/anywidget/types.ts +2 -2
- package/src/plugins/impl/anywidget/widget-binding.ts +1 -1
- package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
- package/src/plugins/impl/chat/chat-ui.tsx +5 -2
- package/src/plugins/impl/data-editor/glide-data-editor.tsx +2 -2
- package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +2 -2
- package/src/plugins/impl/data-explorer/components/query-form.tsx +1 -1
- package/src/plugins/impl/data-explorer/functions/function.ts +1 -1
- package/src/plugins/impl/data-explorer/queries/types.ts +1 -1
- package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -1
- package/src/plugins/impl/data-frames/forms/__tests__/form.test.tsx +7 -9
- package/src/plugins/impl/data-frames/forms/renderers.tsx +1 -1
- package/src/plugins/impl/data-frames/utils/operators.ts +1 -1
- package/src/plugins/impl/matplotlib/MatplotlibPlugin.tsx +1 -1
- package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +1 -1
- package/src/plugins/impl/panel/PanelPlugin.tsx +2 -2
- package/src/plugins/impl/plotly/Plot.tsx +3 -3
- package/src/plugins/impl/plotly/PlotlyPlugin.tsx +65 -103
- package/src/plugins/impl/plotly/__tests__/PlotlyPlugin.test.tsx +114 -0
- package/src/plugins/impl/plotly/__tests__/selection.test.ts +199 -0
- package/src/plugins/impl/plotly/selection.ts +333 -0
- package/src/plugins/impl/vega/__tests__/make-selectable.test.ts +13 -14
- package/src/plugins/impl/vega/batched.ts +1 -1
- package/src/plugins/impl/vega/make-selectable.ts +3 -3
- package/src/plugins/impl/vega/types.ts +1 -1
- package/src/plugins/layout/DownloadPlugin.tsx +1 -1
- package/src/plugins/layout/ImageComparisonPlugin.tsx +1 -3
- package/src/plugins/layout/LazyPlugin.tsx +1 -1
- package/src/plugins/layout/RoutesPlugin.tsx +1 -1
- package/src/plugins/layout/mermaid/mermaid.tsx +1 -1
- package/src/plugins/plugins.ts +1 -1
- package/src/plugins/stateless-plugin.ts +4 -2
- package/src/stories/data-explorer.stories.tsx +1 -1
- package/src/stories/dataframe.stories.tsx +1 -1
- package/src/stories/editor.stories.tsx +1 -1
- package/src/stories/select.stories.tsx +1 -1
- package/src/stories/switchable-multi-select.stories.tsx +1 -1
- package/src/utils/Logger.ts +1 -1
- package/src/utils/__tests__/arrays.test.ts +1 -1
- package/src/utils/__tests__/blob.test.ts +1 -1
- package/src/utils/__tests__/cell-urls.test.ts +24 -21
- package/src/utils/__tests__/dates.test.ts +1 -1
- package/src/utils/__tests__/errors.test.ts +1 -1
- package/src/utils/__tests__/filenames.test.ts +15 -14
- package/src/utils/__tests__/json-parser.test.ts +14 -21
- package/src/utils/__tests__/multi-map.test.ts +3 -3
- package/src/utils/__tests__/objects.test.ts +3 -3
- package/src/utils/__tests__/path.test.ts +34 -31
- package/src/utils/__tests__/urls.test.ts +19 -18
- package/src/utils/__tests__/versions.test.ts +5 -5
- package/src/utils/__tests__/waitForWs.test.ts +1 -1
- package/src/utils/arrays.ts +2 -2
- package/src/utils/assertNever.ts +1 -1
- package/src/utils/batch-requests.ts +2 -2
- package/src/utils/createReducer.ts +2 -2
- package/src/utils/id-tree.tsx +2 -2
- package/src/utils/idle.ts +1 -1
- package/src/utils/invariant.ts +1 -2
- package/src/utils/json/base64.ts +2 -5
- package/src/utils/maps.ts +1 -1
- package/src/utils/math.ts +0 -1
- package/src/utils/mime-types.ts +1 -1
- package/src/utils/multi-map.ts +1 -1
- package/src/utils/objects.ts +1 -1
- package/src/utils/once.ts +2 -2
- package/src/utils/staticImplements.ts +1 -1
- package/src/utils/storage/jotai.ts +1 -1
- package/src/utils/tracer.ts +3 -2
- package/dist/_basePickBy-QjOmBDRE.js +0 -110
- package/dist/_baseSet-xgn1IbGV.js +0 -27
- package/dist/architecture-7HQA4BMR-BRyVh_Za.js +0 -6
- package/dist/assets/__vite-browser-external-Us1ds95c.js +0 -1
- package/dist/dist-B0R_ZM4-.js +0 -6
- package/dist/dist-B4a9_9pj.js +0 -5
- package/dist/dist-BCSUKEwO.js +0 -5
- package/dist/dist-BONIDQq6.js +0 -5
- package/dist/dist-BYeRx2hb.js +0 -5
- package/dist/dist-D2Rk1j4R.js +0 -1381
- package/dist/dist-DZjX5TYv.js +0 -5
- package/dist/dist-Dkw9x6kc.js +0 -5
- package/dist/dist-Ds6UaXGR.js +0 -6
- package/dist/dist-KuEJ1Q53.js +0 -8
- package/dist/dist-S72WNyTZ.js +0 -5
- package/dist/dist-bTG-yssT.js +0 -5
- package/dist/dist-diF0sguc.js +0 -8
- package/dist/dist-mJ84BIgu.js +0 -8
- package/dist/dist-wSIhFWQz.js +0 -8
- package/dist/get-CqrzlV1v.js +0 -68
- package/dist/range-CYz5jI--.js +0 -17
- package/dist/stex-CZyTRGVB.js +0 -4
- package/dist/tooltip-DGHTbHl5.js +0 -404
- package/dist/useLifecycle-Dids8BPm.js +0 -173
- /package/dist/{dist-KZI_BHqV.js → dist-CxZvoNao.js} +0 -0
- /package/dist/{invariant-D4hPsZFI.js → invariant-e8eBgdux.js} +0 -0
- /package/dist/{isArrayLikeObject-C-hFPChh.js → isArrayLikeObject-LXbTYiBa.js} +0 -0
- /package/dist/{main-CvkAPtaq.js → main-XimWhSi_.js} +0 -0
- /package/dist/{purify.es-ukiMXY-F.js → purify.es-hTCfRGdl.js} +0 -0
- /package/dist/{react-dom-BKwCWYPW.js → react-dom-BSUuJjCR.js} +0 -0
- /package/dist/{stex-Ze8D4R_5.js → stex-D887Ylhf.js} +0 -0
|
@@ -45,9 +45,8 @@ def foo(x):
|
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
test("should handle lambda parameters", () => {
|
|
48
|
-
expect(
|
|
49
|
-
|
|
50
|
-
).toMatchInlineSnapshot(`
|
|
48
|
+
expect(runHighlight(["a", "b"], "result = lambda a: a + b"))
|
|
49
|
+
.toMatchInlineSnapshot(`
|
|
51
50
|
"
|
|
52
51
|
result = lambda a: a + b
|
|
53
52
|
^
|
|
@@ -56,9 +55,8 @@ def foo(x):
|
|
|
56
55
|
});
|
|
57
56
|
|
|
58
57
|
test("should handle comprehension variables", () => {
|
|
59
|
-
expect(
|
|
60
|
-
|
|
61
|
-
).toMatchInlineSnapshot(`
|
|
58
|
+
expect(runHighlight(["a", "data"], "result = [a for a in data]"))
|
|
59
|
+
.toMatchInlineSnapshot(`
|
|
62
60
|
"
|
|
63
61
|
result = [a for a in data]
|
|
64
62
|
^^^^
|
|
@@ -146,9 +144,8 @@ def factorial(n):
|
|
|
146
144
|
});
|
|
147
145
|
|
|
148
146
|
test("function param vs global", () => {
|
|
149
|
-
expect(
|
|
150
|
-
|
|
151
|
-
).toMatchInlineSnapshot(`
|
|
147
|
+
expect(runHighlight(["a", "b"], "def foo(a): return a + b"))
|
|
148
|
+
.toMatchInlineSnapshot(`
|
|
152
149
|
"
|
|
153
150
|
def foo(a): return a + b
|
|
154
151
|
^
|
|
@@ -157,9 +154,8 @@ def factorial(n):
|
|
|
157
154
|
});
|
|
158
155
|
|
|
159
156
|
test("lambda param vs global", () => {
|
|
160
|
-
expect(
|
|
161
|
-
|
|
162
|
-
).toMatchInlineSnapshot(`
|
|
157
|
+
expect(runHighlight(["x", "b"], "func = lambda x: x + b"))
|
|
158
|
+
.toMatchInlineSnapshot(`
|
|
163
159
|
"
|
|
164
160
|
func = lambda x: x + b
|
|
165
161
|
^
|
|
@@ -168,9 +164,8 @@ def factorial(n):
|
|
|
168
164
|
});
|
|
169
165
|
|
|
170
166
|
test("lambda with multiple params", () => {
|
|
171
|
-
expect(
|
|
172
|
-
|
|
173
|
-
).toMatchInlineSnapshot(`
|
|
167
|
+
expect(runHighlight(["x", "y", "z"], "f = lambda x, y: x + y + z"))
|
|
168
|
+
.toMatchInlineSnapshot(`
|
|
174
169
|
"
|
|
175
170
|
f = lambda x, y: x + y + z
|
|
176
171
|
^
|
|
@@ -187,9 +182,8 @@ def factorial(n):
|
|
|
187
182
|
});
|
|
188
183
|
|
|
189
184
|
test("nested comprehension", () => {
|
|
190
|
-
expect(
|
|
191
|
-
|
|
192
|
-
).toMatchInlineSnapshot(`
|
|
185
|
+
expect(runHighlight(["a", "b"], "[(a + b) for a, b in [(1,2), (3,4)]]"))
|
|
186
|
+
.toMatchInlineSnapshot(`
|
|
193
187
|
"
|
|
194
188
|
[(a + b) for a, b in [(1,2), (3,4)]]
|
|
195
189
|
"
|
|
@@ -225,9 +219,8 @@ def factorial(n):
|
|
|
225
219
|
});
|
|
226
220
|
|
|
227
221
|
test("class body using globals", () => {
|
|
228
|
-
expect(
|
|
229
|
-
|
|
230
|
-
).toMatchInlineSnapshot(`
|
|
222
|
+
expect(runHighlight(["a", "b"], "class MyClass:\n value = a + b"))
|
|
223
|
+
.toMatchInlineSnapshot(`
|
|
231
224
|
"
|
|
232
225
|
class MyClass:
|
|
233
226
|
value = a + b
|
|
@@ -237,9 +230,8 @@ def factorial(n):
|
|
|
237
230
|
});
|
|
238
231
|
|
|
239
232
|
test("decorator using global", () => {
|
|
240
|
-
expect(
|
|
241
|
-
|
|
242
|
-
).toMatchInlineSnapshot(`
|
|
233
|
+
expect(runHighlight(["logger"], "@logger\ndef decorated(): pass"))
|
|
234
|
+
.toMatchInlineSnapshot(`
|
|
243
235
|
"
|
|
244
236
|
@logger
|
|
245
237
|
^^^^^^
|
|
@@ -317,9 +309,8 @@ ${" ".repeat(8)}
|
|
|
317
309
|
});
|
|
318
310
|
|
|
319
311
|
test("multiple assignment", () => {
|
|
320
|
-
expect(
|
|
321
|
-
|
|
322
|
-
).toMatchInlineSnapshot(`
|
|
312
|
+
expect(runHighlight(["x", "y", "z", "a"], "x = y = z + a"))
|
|
313
|
+
.toMatchInlineSnapshot(`
|
|
323
314
|
"
|
|
324
315
|
x = y = z + a
|
|
325
316
|
^ ^
|
|
@@ -353,9 +344,8 @@ ${" ".repeat(8)}
|
|
|
353
344
|
});
|
|
354
345
|
|
|
355
346
|
test("global in return", () => {
|
|
356
|
-
expect(
|
|
357
|
-
|
|
358
|
-
).toMatchInlineSnapshot(`
|
|
347
|
+
expect(runHighlight(["config"], "def get_config(): return config"))
|
|
348
|
+
.toMatchInlineSnapshot(`
|
|
359
349
|
"
|
|
360
350
|
def get_config(): return config
|
|
361
351
|
^^^^^^
|
|
@@ -410,9 +400,8 @@ class Configurable:
|
|
|
410
400
|
});
|
|
411
401
|
|
|
412
402
|
test("comprehension shadows global 2", () => {
|
|
413
|
-
expect(
|
|
414
|
-
|
|
415
|
-
).toMatchInlineSnapshot(`
|
|
403
|
+
expect(runHighlight(["i"], "squares = [i**2 for i in range(10)]"))
|
|
404
|
+
.toMatchInlineSnapshot(`
|
|
416
405
|
"
|
|
417
406
|
squares = [i**2 for i in range(10)]
|
|
418
407
|
"
|
|
@@ -420,9 +409,8 @@ class Configurable:
|
|
|
420
409
|
});
|
|
421
410
|
|
|
422
411
|
test("comprehension with global in condition", () => {
|
|
423
|
-
expect(
|
|
424
|
-
|
|
425
|
-
).toMatchInlineSnapshot(`
|
|
412
|
+
expect(runHighlight(["x", "z"], "filtered = [x for x in [] if x > z]"))
|
|
413
|
+
.toMatchInlineSnapshot(`
|
|
426
414
|
"
|
|
427
415
|
filtered = [x for x in [] if x > z]
|
|
428
416
|
^
|
|
@@ -459,9 +447,8 @@ def make_adder(x):
|
|
|
459
447
|
});
|
|
460
448
|
|
|
461
449
|
test("rebinding in list comprehension", () => {
|
|
462
|
-
expect(
|
|
463
|
-
|
|
464
|
-
).toMatchInlineSnapshot(`
|
|
450
|
+
expect(runHighlight(["x"], "rebinding = [x for x in range(5)]"))
|
|
451
|
+
.toMatchInlineSnapshot(`
|
|
465
452
|
"
|
|
466
453
|
rebinding = [x for x in range(5)]
|
|
467
454
|
"
|
|
@@ -644,9 +631,8 @@ def run(polars):
|
|
|
644
631
|
});
|
|
645
632
|
|
|
646
633
|
test("mixed comprehension and outer globals", () => {
|
|
647
|
-
expect(
|
|
648
|
-
|
|
649
|
-
).toMatchInlineSnapshot(`
|
|
634
|
+
expect(runHighlight(["y", "z"], "values = [y + z for y in range(5)]"))
|
|
635
|
+
.toMatchInlineSnapshot(`
|
|
650
636
|
"
|
|
651
637
|
values = [y + z for y in range(5)]
|
|
652
638
|
^
|
|
@@ -185,7 +185,7 @@ export const createSelectionLayer = (): Extension =>
|
|
|
185
185
|
.flatMap(([, state]) => {
|
|
186
186
|
const selectionRange = EditorSelection.range(
|
|
187
187
|
state.cursor.anchor,
|
|
188
|
-
//
|
|
188
|
+
// oxlint-disable-next-line typescript/no-non-null-assertion
|
|
189
189
|
state.cursor.head!,
|
|
190
190
|
);
|
|
191
191
|
const markers = RectangleMarker.forRange(
|
|
@@ -70,9 +70,7 @@ test("default UserConfig - empty", () => {
|
|
|
70
70
|
"reference_highlighting": true,
|
|
71
71
|
"theme": "light",
|
|
72
72
|
},
|
|
73
|
-
"experimental": {
|
|
74
|
-
"storage_inspector": true,
|
|
75
|
-
},
|
|
73
|
+
"experimental": {},
|
|
76
74
|
"formatting": {
|
|
77
75
|
"line_length": 79,
|
|
78
76
|
},
|
|
@@ -142,9 +140,7 @@ test("default UserConfig - one level", () => {
|
|
|
142
140
|
"reference_highlighting": true,
|
|
143
141
|
"theme": "light",
|
|
144
142
|
},
|
|
145
|
-
"experimental": {
|
|
146
|
-
"storage_inspector": true,
|
|
147
|
-
},
|
|
143
|
+
"experimental": {},
|
|
148
144
|
"formatting": {
|
|
149
145
|
"line_length": 79,
|
|
150
146
|
},
|
|
@@ -186,7 +186,6 @@ export const UserConfigSchema = z
|
|
|
186
186
|
.looseObject({
|
|
187
187
|
markdown: z.boolean().optional(),
|
|
188
188
|
rtc: z.boolean().optional(),
|
|
189
|
-
storage_inspector: z.boolean().prefault(true),
|
|
190
189
|
// Add new experimental features here
|
|
191
190
|
})
|
|
192
191
|
// Pass through so that we don't remove any extra keys that the user has added.
|
|
@@ -4,14 +4,13 @@ import { repl } from "@/utils/repl";
|
|
|
4
4
|
import { getRequestClient } from "../network/requests";
|
|
5
5
|
import { getResolvedMarimoConfig } from "./config";
|
|
6
6
|
|
|
7
|
-
//
|
|
7
|
+
// oxlint-disable-next-line typescript/no-empty-object-type
|
|
8
8
|
export interface ExperimentalFeatures {
|
|
9
9
|
markdown: boolean; // Used in playground (community cloud)
|
|
10
10
|
wasm_layouts: boolean; // Used in playground (community cloud)
|
|
11
11
|
rtc_v2: boolean;
|
|
12
12
|
cache_panel: boolean;
|
|
13
13
|
external_agents: boolean;
|
|
14
|
-
storage_inspector: boolean;
|
|
15
14
|
// Add new feature flags here
|
|
16
15
|
}
|
|
17
16
|
|
|
@@ -21,7 +20,6 @@ const defaultValues: ExperimentalFeatures = {
|
|
|
21
20
|
rtc_v2: false,
|
|
22
21
|
cache_panel: false,
|
|
23
22
|
external_agents: import.meta.env.DEV,
|
|
24
|
-
storage_inspector: true,
|
|
25
23
|
};
|
|
26
24
|
|
|
27
25
|
export function getFeatureFlag<T extends keyof ExperimentalFeatures>(
|
|
@@ -32,8 +32,10 @@ const initialConnections: ConnectionsMap = new Map([
|
|
|
32
32
|
]);
|
|
33
33
|
|
|
34
34
|
// Extend the backend type but override the name property with the strongly typed ConnectionName
|
|
35
|
-
export interface DataSourceConnection
|
|
36
|
-
|
|
35
|
+
export interface DataSourceConnection extends Omit<
|
|
36
|
+
DataSourceConnectionType,
|
|
37
|
+
"name"
|
|
38
|
+
> {
|
|
37
39
|
name: ConnectionName;
|
|
38
40
|
}
|
|
39
41
|
|
|
@@ -6,20 +6,14 @@ import { UIElementRegistry } from "../uiregistry";
|
|
|
6
6
|
const registry = UIElementRegistry.INSTANCE;
|
|
7
7
|
|
|
8
8
|
describe("htmlUtils", () => {
|
|
9
|
-
it.each([
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"",
|
|
18
|
-
])("can parse element.dataset.initialValue", (initialValue) => {
|
|
19
|
-
const div = document.createElement("div");
|
|
20
|
-
div.dataset.initialValue = JSON.stringify(initialValue);
|
|
21
|
-
expect(parseInitialValue(div, registry)).toEqual(initialValue);
|
|
22
|
-
});
|
|
9
|
+
it.each([false, { a: 1 }, true, 0, 1, [{ a: 1 }, { b: 2 }], "hello", ""])(
|
|
10
|
+
"can parse element.dataset.initialValue",
|
|
11
|
+
(initialValue) => {
|
|
12
|
+
const div = document.createElement("div");
|
|
13
|
+
div.dataset.initialValue = JSON.stringify(initialValue);
|
|
14
|
+
expect(parseInitialValue(div, registry)).toEqual(initialValue);
|
|
15
|
+
},
|
|
16
|
+
);
|
|
23
17
|
|
|
24
18
|
it("can parse an element with no initialValue", () => {
|
|
25
19
|
const div = document.createElement("div");
|
|
@@ -439,9 +439,8 @@ const OUTLINE_2: Outline = {
|
|
|
439
439
|
};
|
|
440
440
|
|
|
441
441
|
it("mergeOutlines", () => {
|
|
442
|
-
expect(
|
|
443
|
-
|
|
444
|
-
).toMatchInlineSnapshot(`
|
|
442
|
+
expect(mergeOutlines([OUTLINE_1, null, OUTLINE_2, null]))
|
|
443
|
+
.toMatchInlineSnapshot(`
|
|
445
444
|
{
|
|
446
445
|
"items": [
|
|
447
446
|
{
|
package/src/core/dom/outline.ts
CHANGED
|
@@ -39,7 +39,7 @@ function getOutline(html: string): Outline | null {
|
|
|
39
39
|
const document = parser.parseFromString(html, "text/html");
|
|
40
40
|
|
|
41
41
|
const headings = document.querySelectorAll(HEADER_TAGS);
|
|
42
|
-
//
|
|
42
|
+
// oxlint-disable-next-line unicorn/prefer-spread
|
|
43
43
|
for (const heading of Array.from(headings)) {
|
|
44
44
|
const name = heading.textContent;
|
|
45
45
|
// Check if the heading is within any of the excluded tags
|
|
@@ -10,6 +10,23 @@ import {
|
|
|
10
10
|
} from "./events";
|
|
11
11
|
import { parseInitialValue } from "./htmlUtils";
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Kernel-initiated UI value update, sent via the existing
|
|
15
|
+
* `send-ui-element-message` channel when `set_ui_value` (code_mode)
|
|
16
|
+
* changes a widget's value so the frontend can reflect the new state.
|
|
17
|
+
*/
|
|
18
|
+
interface UIValueUpdateMessage {
|
|
19
|
+
type: "marimo-ui-value-update";
|
|
20
|
+
value: ValueType;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function isUIValueUpdateMessage(msg: unknown): msg is UIValueUpdateMessage {
|
|
24
|
+
if (typeof msg !== "object" || msg === null) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return "type" in msg && msg.type === "marimo-ui-value-update";
|
|
28
|
+
}
|
|
29
|
+
|
|
13
30
|
interface UIElementEntry {
|
|
14
31
|
objectId: string;
|
|
15
32
|
value: ValueType;
|
|
@@ -141,21 +158,38 @@ export class UIElementRegistry {
|
|
|
141
158
|
const entry = this.entries.get(objectId);
|
|
142
159
|
if (entry === undefined) {
|
|
143
160
|
Logger.warn("UIElementRegistry missing entry", objectId);
|
|
144
|
-
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Kernel-initiated value update — push into DOM elements without
|
|
165
|
+
// dispatching MarimoValueReadyEvent to avoid a round-trip.
|
|
166
|
+
if (isUIValueUpdateMessage(message)) {
|
|
167
|
+
entry.value = message.value;
|
|
145
168
|
entry.elements.forEach((element) => {
|
|
146
169
|
element.dispatchEvent(
|
|
147
|
-
|
|
148
|
-
bubbles: false,
|
|
170
|
+
MarimoValueUpdateEvent.create({
|
|
171
|
+
bubbles: false,
|
|
149
172
|
composed: true,
|
|
150
|
-
detail: {
|
|
151
|
-
objectId: objectId,
|
|
152
|
-
message: message,
|
|
153
|
-
buffers: buffers,
|
|
154
|
-
},
|
|
173
|
+
detail: { value: message.value, element: element },
|
|
155
174
|
}),
|
|
156
175
|
);
|
|
157
176
|
});
|
|
177
|
+
return;
|
|
158
178
|
}
|
|
179
|
+
|
|
180
|
+
entry.elements.forEach((element) => {
|
|
181
|
+
element.dispatchEvent(
|
|
182
|
+
MarimoIncomingMessageEvent.create({
|
|
183
|
+
bubbles: false, // only the intended target gets the message
|
|
184
|
+
composed: true,
|
|
185
|
+
detail: {
|
|
186
|
+
objectId: objectId,
|
|
187
|
+
message: message,
|
|
188
|
+
buffers: buffers,
|
|
189
|
+
},
|
|
190
|
+
}),
|
|
191
|
+
);
|
|
192
|
+
});
|
|
159
193
|
}
|
|
160
194
|
|
|
161
195
|
/**
|
package/src/core/edit-app.tsx
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
3
|
import { usePrevious } from "@dnd-kit/utilities";
|
|
4
|
-
import {
|
|
4
|
+
import { Tooltip } from "radix-ui";
|
|
5
|
+
|
|
6
|
+
const TooltipProvider = Tooltip.Provider;
|
|
7
|
+
|
|
5
8
|
import { useAtomValue, useSetAtom } from "jotai";
|
|
6
9
|
import { useEffect } from "react";
|
|
7
10
|
import { NotStartedConnectionAlert } from "@/components/editor/alerts/connecting-alert";
|
|
@@ -55,7 +55,7 @@ describe("useEnrichCellOutputs", () => {
|
|
|
55
55
|
|
|
56
56
|
// Helper to set the mocked atom (cast to any to work around type mismatch)
|
|
57
57
|
const setCellsRuntime = (value: Record<CellId, CellRuntimeState>) => {
|
|
58
|
-
//
|
|
58
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
59
59
|
store.set(cellsRuntimeAtom as any, value);
|
|
60
60
|
};
|
|
61
61
|
|
|
@@ -15,7 +15,7 @@ function createHotkeys(
|
|
|
15
15
|
keys: Partial<Record<HotkeyAction, Hotkey>>,
|
|
16
16
|
): Record<HotkeyAction, Hotkey> {
|
|
17
17
|
return new Proxy(keys as Record<HotkeyAction, Hotkey>, {
|
|
18
|
-
//
|
|
18
|
+
// oxlint-ignore-next-line -- ok to have three arguments here (It's a web API)
|
|
19
19
|
get(target, p, receiver) {
|
|
20
20
|
const key = Reflect.get(target, p, receiver);
|
|
21
21
|
if (key === "undefined") {
|
|
@@ -73,7 +73,7 @@ function areKeysPressed(keys: string[], e: IKeyboardEvent): boolean {
|
|
|
73
73
|
// - US keyboards: "&"
|
|
74
74
|
// - Some layouts: "7"
|
|
75
75
|
// Using e.code (physical key) instead of e.key (produced character)
|
|
76
|
-
//
|
|
76
|
+
// oxlint-disable-next-line unicorn/prefer-ternary
|
|
77
77
|
if (/^\d$/.test(key) && e.shiftKey) {
|
|
78
78
|
satisfied &&= e.code === `Digit${key}`;
|
|
79
79
|
} else {
|
|
@@ -84,7 +84,7 @@ describe("IslandsPyodideBridge", () => {
|
|
|
84
84
|
beforeEach(() => {
|
|
85
85
|
vi.clearAllMocks();
|
|
86
86
|
// Reset the singleton by clearing the window property
|
|
87
|
-
//
|
|
87
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
88
88
|
delete (window as any)._marimo_private_IslandsPyodideBridge;
|
|
89
89
|
// Access the singleton - creates a fresh instance
|
|
90
90
|
bridge = IslandsPyodideBridge.INSTANCE;
|
|
@@ -92,7 +92,7 @@ describe("IslandsPyodideBridge", () => {
|
|
|
92
92
|
|
|
93
93
|
afterEach(() => {
|
|
94
94
|
// Clean up singleton
|
|
95
|
-
//
|
|
95
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
96
96
|
delete (window as any)._marimo_private_IslandsPyodideBridge;
|
|
97
97
|
});
|
|
98
98
|
|
|
@@ -78,11 +78,12 @@ describe("parseIslandCode", () => {
|
|
|
78
78
|
|
|
79
79
|
codes = [...codes, ...codes.map(encodeURIComponent)];
|
|
80
80
|
|
|
81
|
-
it.each(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
81
|
+
it.each(codes)(
|
|
82
|
+
"should return the code without leading or trailing whitespace",
|
|
83
|
+
(code) => {
|
|
84
|
+
const result = parseIslandCode(code);
|
|
85
|
+
const expected = 'def __():\n print("Hello, World!")\n return';
|
|
86
|
+
expect(result).toBe(expected);
|
|
87
|
+
},
|
|
88
|
+
);
|
|
88
89
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-explicit-any */
|
|
3
3
|
|
|
4
4
|
import { getWorkerRPC } from "@/core/wasm/rpc";
|
|
5
5
|
import { Deferred } from "@/utils/Deferred";
|
|
@@ -47,7 +47,7 @@ export class IslandsPyodideBridge implements RunRequests, EditRequests {
|
|
|
47
47
|
const blob = new Blob([js], { type: "application/javascript" });
|
|
48
48
|
const objURL = URL.createObjectURL(blob);
|
|
49
49
|
const worker = new Worker(
|
|
50
|
-
//
|
|
50
|
+
// oxlint-disable-next-line unicorn/relative-url-style
|
|
51
51
|
objURL,
|
|
52
52
|
{
|
|
53
53
|
type: "module",
|
|
@@ -65,7 +65,7 @@ export const MarimoOutputWrapper: React.FC<Props> = ({
|
|
|
65
65
|
// Lint still wants use to have the same event listeners per instance (which
|
|
66
66
|
// makes sense), so noop is used.
|
|
67
67
|
const maybeNoop = (fn: (e: KeyboardEvent) => void) =>
|
|
68
|
-
//
|
|
68
|
+
// oxlint-disable-next-line typescript/no-empty-function
|
|
69
69
|
alwaysShowRun ? () => {} : fn;
|
|
70
70
|
|
|
71
71
|
useEventListener(
|
|
@@ -72,7 +72,7 @@ export function parseMarimoIslandApps(): MarimoIslandApp[] {
|
|
|
72
72
|
if (!apps.has(id)) {
|
|
73
73
|
apps.set(id, { id, cells: [] });
|
|
74
74
|
}
|
|
75
|
-
//
|
|
75
|
+
// oxlint-disable-next-line typescript/no-non-null-assertion
|
|
76
76
|
const app = apps.get(id)!;
|
|
77
77
|
const idx = app.cells.length;
|
|
78
78
|
app.cells.push({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-explicit-any */
|
|
3
3
|
|
|
4
4
|
import { WebSocketTransport } from "@open-rpc/client-js";
|
|
5
5
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-redeclare */
|
|
3
3
|
import type { components } from "@marimo-team/marimo-api";
|
|
4
4
|
import { Deferred } from "@/utils/Deferred";
|
|
5
5
|
import { generateUUID } from "@/utils/uuid";
|
package/src/core/network/api.ts
CHANGED
|
@@ -108,7 +108,7 @@ export const API = {
|
|
|
108
108
|
response: Response;
|
|
109
109
|
}): Promise<T> => {
|
|
110
110
|
if (response.error) {
|
|
111
|
-
//
|
|
111
|
+
// oxlint-disable-next-line typescript/prefer-promise-reject-errors
|
|
112
112
|
return Promise.reject(response.error);
|
|
113
113
|
}
|
|
114
114
|
return Promise.resolve(response.data as T);
|
|
@@ -118,7 +118,7 @@ export const API = {
|
|
|
118
118
|
response: Response;
|
|
119
119
|
}): Promise<null> => {
|
|
120
120
|
if (response.error) {
|
|
121
|
-
//
|
|
121
|
+
// oxlint-disable-next-line typescript/prefer-promise-reject-errors
|
|
122
122
|
return Promise.reject(response.error);
|
|
123
123
|
}
|
|
124
124
|
return Promise.resolve(null);
|
|
@@ -138,7 +138,7 @@ export function createLazyRequests(
|
|
|
138
138
|
await runtimeManager.init();
|
|
139
139
|
});
|
|
140
140
|
|
|
141
|
-
//
|
|
141
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
142
142
|
function wrapRequest<T extends (...args: any[]) => Promise<any>>(
|
|
143
143
|
request: T,
|
|
144
144
|
key: keyof AllRequests,
|
|
@@ -5,12 +5,13 @@ import { EDGE_CASE_FILENAMES } from "../../../__tests__/mocks";
|
|
|
5
5
|
import { Paths } from "../../../utils/paths";
|
|
6
6
|
|
|
7
7
|
describe("filename handling logic", () => {
|
|
8
|
-
it.each(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
it.each(EDGE_CASE_FILENAMES)(
|
|
9
|
+
"should extract basename correctly for document title: %s",
|
|
10
|
+
(filename) => {
|
|
11
|
+
const basename = Paths.basename(filename);
|
|
12
|
+
expect(basename).toBe(filename); // Since no path separator
|
|
13
|
+
},
|
|
14
|
+
);
|
|
14
15
|
|
|
15
16
|
it("should handle full paths with unicode filenames", () => {
|
|
16
17
|
EDGE_CASE_FILENAMES.forEach((filename) => {
|
|
@@ -44,23 +44,24 @@ describe("updateAssetUrl", () => {
|
|
|
44
44
|
});
|
|
45
45
|
|
|
46
46
|
describe("filename handling for downloads", () => {
|
|
47
|
-
it.each(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
it.each(EDGE_CASE_FILENAMES)(
|
|
48
|
+
"should handle edge case filenames in download operations: %s",
|
|
49
|
+
(filename) => {
|
|
50
|
+
// Test that basename extraction works correctly for downloads
|
|
51
|
+
const basename = Paths.basename(filename);
|
|
52
|
+
expect(basename).toBe(filename);
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
// Test filename conversion for HTML downloads
|
|
55
|
+
const htmlFilename = Filenames.toHTML(filename);
|
|
56
|
+
expect(htmlFilename).toMatch(/\.html$/);
|
|
57
|
+
expect(htmlFilename).toContain(Filenames.withoutExtension(filename));
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
// Ensure unicode and spaces are preserved in basename
|
|
60
|
+
const withoutExt = Filenames.withoutExtension(filename);
|
|
61
|
+
expect(withoutExt).not.toBe("");
|
|
62
|
+
expect(typeof withoutExt).toBe("string");
|
|
63
|
+
},
|
|
64
|
+
);
|
|
64
65
|
|
|
65
66
|
it("should handle blob download filename generation", () => {
|
|
66
67
|
// Mock URL.createObjectURL for blob testing
|