@marimo-team/islands 0.22.1-dev8 → 0.22.1
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-Dl1grr8z.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-3c9hT4kT.js → loader-Bd1kgLn7.js} +19 -16
- 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-X7clcrcQ.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-A6unyUJS.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/__tests__/utils.test.ts +68 -0
- 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/impl/vega/utils.ts +14 -5
- package/src/plugins/impl/vega/vega.css +2 -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
|
@@ -33,4 +33,72 @@ describe("getContainerWidth", () => {
|
|
|
33
33
|
it("should return undefined when width is explicitly undefined", () => {
|
|
34
34
|
expect(getContainerWidth({ width: undefined })).toBeUndefined();
|
|
35
35
|
});
|
|
36
|
+
|
|
37
|
+
it("should find width in nested facet spec", () => {
|
|
38
|
+
expect(
|
|
39
|
+
getContainerWidth({
|
|
40
|
+
$schema: "https://vega.github.io/schema/vega-lite/v6.json",
|
|
41
|
+
facet: { column: { field: "Origin", type: "nominal" } },
|
|
42
|
+
spec: {
|
|
43
|
+
mark: "point",
|
|
44
|
+
encoding: {},
|
|
45
|
+
width: "container",
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
48
|
+
).toBe("container");
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("should find width in nested repeat spec", () => {
|
|
52
|
+
expect(
|
|
53
|
+
getContainerWidth({
|
|
54
|
+
$schema: "https://vega.github.io/schema/vega-lite/v6.json",
|
|
55
|
+
repeat: { row: ["A", "B"] },
|
|
56
|
+
spec: {
|
|
57
|
+
mark: "point",
|
|
58
|
+
encoding: {},
|
|
59
|
+
width: "container",
|
|
60
|
+
},
|
|
61
|
+
}),
|
|
62
|
+
).toBe("container");
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("should return undefined for nested spec without width", () => {
|
|
66
|
+
expect(
|
|
67
|
+
getContainerWidth({
|
|
68
|
+
facet: { column: { field: "Origin" } },
|
|
69
|
+
spec: { mark: "point", encoding: {} },
|
|
70
|
+
}),
|
|
71
|
+
).toBeUndefined();
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("should return undefined for hconcat (width on sub-specs)", () => {
|
|
75
|
+
expect(
|
|
76
|
+
getContainerWidth({
|
|
77
|
+
hconcat: [{ width: "container" }, { width: "container" }],
|
|
78
|
+
}),
|
|
79
|
+
).toBeUndefined();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it("should return undefined for vconcat (width on sub-specs)", () => {
|
|
83
|
+
expect(
|
|
84
|
+
getContainerWidth({
|
|
85
|
+
vconcat: [{ width: "container" }, { width: "container" }],
|
|
86
|
+
}),
|
|
87
|
+
).toBeUndefined();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("should return undefined for compiled Vega spec (width as signal)", () => {
|
|
91
|
+
expect(
|
|
92
|
+
getContainerWidth({
|
|
93
|
+
$schema: "https://vega.github.io/schema/vega/v6.json",
|
|
94
|
+
autosize: { contains: "padding", type: "fit-x" },
|
|
95
|
+
signals: [
|
|
96
|
+
{
|
|
97
|
+
name: "width",
|
|
98
|
+
init: "isFinite(containerSize()[0]) ? containerSize()[0] : 300",
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
}),
|
|
102
|
+
).toBeUndefined();
|
|
103
|
+
});
|
|
36
104
|
});
|
|
@@ -40,11 +40,11 @@ function getParamSignature(param: TParams): string {
|
|
|
40
40
|
type: select.type,
|
|
41
41
|
encodings:
|
|
42
42
|
"encodings" in select && select.encodings
|
|
43
|
-
? [...select.encodings].
|
|
43
|
+
? [...select.encodings].toSorted()
|
|
44
44
|
: undefined,
|
|
45
45
|
fields:
|
|
46
46
|
"fields" in select && select.fields
|
|
47
|
-
? [...select.fields].
|
|
47
|
+
? [...select.fields].toSorted()
|
|
48
48
|
: undefined,
|
|
49
49
|
bind: param.bind,
|
|
50
50
|
};
|
|
@@ -160,7 +160,7 @@ function findCommonParams(
|
|
|
160
160
|
if (!signatureCounts.has(signature)) {
|
|
161
161
|
signatureCounts.set(signature, { count: 0, param });
|
|
162
162
|
}
|
|
163
|
-
//
|
|
163
|
+
// oxlint-disable-next-line typescript/no-non-null-assertion
|
|
164
164
|
signatureCounts.get(signature)!.count++;
|
|
165
165
|
}
|
|
166
166
|
}
|
|
@@ -25,7 +25,7 @@ export type {
|
|
|
25
25
|
} from "vega-lite/types_unstable/spec/unit.js";
|
|
26
26
|
|
|
27
27
|
export type VegaLiteUnitSpec = TopLevelUnitSpec<Field>;
|
|
28
|
-
//
|
|
28
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
29
29
|
export type GenericVegaSpec = GenericUnitSpec<any, any, any>;
|
|
30
30
|
export type EncodingType = keyof Encoding<Field>;
|
|
31
31
|
export type Encodings = Encoding<Field>;
|
|
@@ -6,13 +6,22 @@ import type { DataType, FieldTypes, VegaDataType } from "./vega-loader";
|
|
|
6
6
|
export type ContainerWidth = number | "container";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* Get the container width from a
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* Get the container width from a Vega-Lite spec.
|
|
10
|
+
*
|
|
11
|
+
* For unit specs, `width` is at the top level. For facet/repeat specs,
|
|
12
|
+
* `width` is nested inside `spec`. This does not handle hconcat/vconcat and Vega spec
|
|
13
|
+
* where the width may be a signal. These cases are covered by
|
|
14
|
+
* the CSS fallback `.vega-embed:has(> .chart-wrapper.fit-x)`.
|
|
12
15
|
*/
|
|
13
16
|
export function getContainerWidth(spec: unknown): ContainerWidth | undefined {
|
|
14
|
-
if (typeof spec === "object" && spec !== null
|
|
15
|
-
|
|
17
|
+
if (typeof spec === "object" && spec !== null) {
|
|
18
|
+
if ("width" in spec) {
|
|
19
|
+
return spec.width as ContainerWidth | undefined;
|
|
20
|
+
}
|
|
21
|
+
// Faceted/repeated spec
|
|
22
|
+
if ("spec" in spec) {
|
|
23
|
+
return getContainerWidth(spec.spec);
|
|
24
|
+
}
|
|
16
25
|
}
|
|
17
26
|
return undefined;
|
|
18
27
|
}
|
|
@@ -11,9 +11,7 @@ const LazyImageComparisonComponent = React.lazy(
|
|
|
11
11
|
() => import("../impl/image-comparison/ImageComparisonComponent"),
|
|
12
12
|
);
|
|
13
13
|
|
|
14
|
-
export class ImageComparisonPlugin
|
|
15
|
-
implements IStatelessPlugin<ImageComparisonData>
|
|
16
|
-
{
|
|
14
|
+
export class ImageComparisonPlugin implements IStatelessPlugin<ImageComparisonData> {
|
|
17
15
|
tagName = "marimo-image-comparison";
|
|
18
16
|
|
|
19
17
|
validator = z.object({
|
|
@@ -14,7 +14,7 @@ interface Data {
|
|
|
14
14
|
showLoadingIndicator: boolean;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
//
|
|
17
|
+
// oxlint-disable-next-line typescript/consistent-type-definitions
|
|
18
18
|
type PluginFunctions = {
|
|
19
19
|
load: (req: {}) => Promise<{
|
|
20
20
|
html: string;
|
|
@@ -63,7 +63,7 @@ function randomAlpha() {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
const Mermaid: React.FC<Props> = ({ diagram }) => {
|
|
66
|
-
//
|
|
66
|
+
// oxlint-disable-next-line react/hook-use-state
|
|
67
67
|
const [id] = useState(() => randomAlpha());
|
|
68
68
|
|
|
69
69
|
const darkMode = useTheme().theme === "dark";
|
package/src/plugins/plugins.ts
CHANGED
|
@@ -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 { NavigationMenuPlugin } from "@/plugins/layout/NavigationMenuPlugin";
|
|
5
5
|
import { initializeUIElement } from "../core/dom/ui-element";
|
|
@@ -20,8 +20,10 @@ export interface IStatelessPluginProps<D> {
|
|
|
20
20
|
children?: React.ReactNode | undefined;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export interface IStatelessPlugin<D>
|
|
24
|
-
|
|
23
|
+
export interface IStatelessPlugin<D> extends Omit<
|
|
24
|
+
IPlugin<never, D>,
|
|
25
|
+
"render" | "functions"
|
|
26
|
+
> {
|
|
25
27
|
/**
|
|
26
28
|
* Render the plugin.
|
|
27
29
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable react-hooks/rules-of-hooks */
|
|
3
3
|
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
4
4
|
import { useState } from "react";
|
|
5
5
|
import { DataFrameComponent } from "@/plugins/impl/data-frames/DataFramePlugin";
|
|
@@ -52,7 +52,7 @@ const Editor = (opts: { extensions?: Extension[] }): React.ReactNode => {
|
|
|
52
52
|
});
|
|
53
53
|
|
|
54
54
|
return () => view.destroy();
|
|
55
|
-
//
|
|
55
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
|
56
56
|
}, [ref.current]);
|
|
57
57
|
|
|
58
58
|
return <div className="cm" ref={ref} />;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable react-hooks/rules-of-hooks */
|
|
3
3
|
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
4
4
|
import { useState } from "react";
|
|
5
5
|
import { SwitchableMultiSelect } from "@/components/forms/switchable-multi-select";
|
package/src/utils/Logger.ts
CHANGED
|
@@ -124,7 +124,7 @@ describe("arrays", () => {
|
|
|
124
124
|
});
|
|
125
125
|
|
|
126
126
|
it("should handle undefined/null array", () => {
|
|
127
|
-
//
|
|
127
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
128
128
|
expect(arrayToggle(undefined as any, 1)).toEqual([1]);
|
|
129
129
|
});
|
|
130
130
|
|
|
@@ -30,7 +30,7 @@ describe("Blob serialization and deserialization", () => {
|
|
|
30
30
|
const serialized = await serializeBlob(testBlob);
|
|
31
31
|
const deserialized = deserializeBlob(serialized);
|
|
32
32
|
const reader = new FileReader();
|
|
33
|
-
//
|
|
33
|
+
// oxlint-disable-next-line unicorn/prefer-blob-reading-methods
|
|
34
34
|
reader.readAsText(deserialized);
|
|
35
35
|
await new Promise((resolve) => {
|
|
36
36
|
reader.onload = () => {
|
|
@@ -92,27 +92,30 @@ describe("cell-urls utilities", () => {
|
|
|
92
92
|
});
|
|
93
93
|
|
|
94
94
|
describe("edge case cell names with unicode and special characters", () => {
|
|
95
|
-
it.each(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
95
|
+
it.each(EDGE_CASE_CELL_NAMES)(
|
|
96
|
+
"should handle unicode cell names in createCellLink: %s",
|
|
97
|
+
(cellName) => {
|
|
98
|
+
const url = createCellLink(cellName);
|
|
99
|
+
expect(url).toContain("scrollTo=");
|
|
100
|
+
expect(url).toContain(encodeURIComponent(cellName));
|
|
101
|
+
},
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
it.each(EDGE_CASE_CELL_NAMES)(
|
|
105
|
+
"should round-trip unicode cell names correctly: %s",
|
|
106
|
+
(cellName) => {
|
|
107
|
+
const url = createCellLink(cellName);
|
|
108
|
+
const hash = url.split("#")[1];
|
|
109
|
+
const extracted = extractCellNameFromHash(`#${hash}`);
|
|
110
|
+
expect(extracted).toBe(cellName);
|
|
111
|
+
},
|
|
112
|
+
);
|
|
111
113
|
|
|
112
|
-
it.each(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
it.each(EDGE_CASE_CELL_NAMES)(
|
|
115
|
+
"should allow linking to unicode cell names: %s",
|
|
116
|
+
(cellName) => {
|
|
117
|
+
expect(canLinkToCell(cellName)).toBe(true);
|
|
118
|
+
},
|
|
119
|
+
);
|
|
117
120
|
});
|
|
118
121
|
});
|
|
@@ -73,7 +73,7 @@ describe("dates", () => {
|
|
|
73
73
|
|
|
74
74
|
describe("with different locales", () => {
|
|
75
75
|
// Save original implementation
|
|
76
|
-
//
|
|
76
|
+
// oxlint-disable-next-line typescript/unbound-method
|
|
77
77
|
const originalToLocaleDateString = Date.prototype.toLocaleDateString;
|
|
78
78
|
|
|
79
79
|
afterAll(() => {
|
|
@@ -46,7 +46,7 @@ describe("prettyError", () => {
|
|
|
46
46
|
});
|
|
47
47
|
|
|
48
48
|
it("handles circular references", () => {
|
|
49
|
-
//
|
|
49
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
50
50
|
const circular: any = { foo: "bar" };
|
|
51
51
|
circular.self = circular;
|
|
52
52
|
expect(prettyError(circular)).toBe("[object Object]");
|
|
@@ -35,22 +35,23 @@ describe("Filenames", () => {
|
|
|
35
35
|
expect(Filenames.withoutExtension("test.foo.txt")).toEqual("test.foo");
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
-
it.each(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
it.each(EDGE_CASE_FILENAMES)(
|
|
39
|
+
"should handle edge case filenames: %s",
|
|
40
|
+
(filename) => {
|
|
41
|
+
// Test all filename operations with edge cases
|
|
42
|
+
const withoutExt = Filenames.withoutExtension(filename);
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
expect(Filenames.toMarkdown(filename)).toEqual(`${withoutExt}.md`);
|
|
45
|
+
expect(Filenames.toHTML(filename)).toEqual(`${withoutExt}.html`);
|
|
46
|
+
expect(Filenames.toPNG(filename)).toEqual(`${withoutExt}.png`);
|
|
47
|
+
expect(Filenames.toPY(filename)).toEqual(`${withoutExt}.py`);
|
|
48
|
+
expect(Filenames.toIPYNB(filename)).toEqual(`${withoutExt}.ipynb`);
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
// Ensure operations preserve unicode and special characters in base name
|
|
51
|
+
expect(withoutExt).not.toEqual("");
|
|
52
|
+
expect(typeof withoutExt).toBe("string");
|
|
53
|
+
},
|
|
54
|
+
);
|
|
54
55
|
});
|
|
55
56
|
|
|
56
57
|
describe("getImageExtension", () => {
|
|
@@ -184,9 +184,8 @@ it("can convert json to markdown - with URLs", () => {
|
|
|
184
184
|
`);
|
|
185
185
|
|
|
186
186
|
// Mixed content - URL and text in same cell
|
|
187
|
-
expect(
|
|
188
|
-
|
|
189
|
-
).toMatchInlineSnapshot(`
|
|
187
|
+
expect(jsonToMarkdown([{ info: "Visit https://example.com for more" }]))
|
|
188
|
+
.toMatchInlineSnapshot(`
|
|
190
189
|
"| info |
|
|
191
190
|
|---|
|
|
192
191
|
| Visit [https://example.com](https://example.com) for more |"
|
|
@@ -203,9 +202,8 @@ it("can convert json to markdown - with URLs", () => {
|
|
|
203
202
|
});
|
|
204
203
|
|
|
205
204
|
it("can convert json to markdown - handles nulls and undefined", () => {
|
|
206
|
-
expect(
|
|
207
|
-
|
|
208
|
-
).toMatchInlineSnapshot(`
|
|
205
|
+
expect(jsonToMarkdown([{ a: null, b: undefined, c: 1 }]))
|
|
206
|
+
.toMatchInlineSnapshot(`
|
|
209
207
|
"| a | b | c |
|
|
210
208
|
|---|---|---|
|
|
211
209
|
| | | 1 |"
|
|
@@ -226,18 +224,16 @@ it("can convert json to markdown - handles nulls and undefined", () => {
|
|
|
226
224
|
|
|
227
225
|
it("can convert json to markdown - handles special characters", () => {
|
|
228
226
|
// Pipes need to be escaped since they're markdown table delimiters
|
|
229
|
-
expect(
|
|
230
|
-
|
|
231
|
-
).toMatchInlineSnapshot(`
|
|
227
|
+
expect(jsonToMarkdown([{ a: "value|with|pipes", b: "normal" }]))
|
|
228
|
+
.toMatchInlineSnapshot(`
|
|
232
229
|
"| a | b |
|
|
233
230
|
|---|---|
|
|
234
231
|
| value\\|with\\|pipes | normal |"
|
|
235
232
|
`);
|
|
236
233
|
|
|
237
234
|
// Newlines should be replaced with spaces
|
|
238
|
-
expect(
|
|
239
|
-
|
|
240
|
-
).toMatchInlineSnapshot(`
|
|
235
|
+
expect(jsonToMarkdown([{ a: "line1\nline2", b: "normal" }]))
|
|
236
|
+
.toMatchInlineSnapshot(`
|
|
241
237
|
"| a | b |
|
|
242
238
|
|---|---|
|
|
243
239
|
| line1 line2 | normal |"
|
|
@@ -252,9 +248,8 @@ it("can convert json to markdown - handles special characters", () => {
|
|
|
252
248
|
});
|
|
253
249
|
|
|
254
250
|
it("can convert json to markdown - handles different data types", () => {
|
|
255
|
-
expect(
|
|
256
|
-
|
|
257
|
-
).toMatchInlineSnapshot(`
|
|
251
|
+
expect(jsonToMarkdown([{ str: "text", num: 42, bool: true, nil: null }]))
|
|
252
|
+
.toMatchInlineSnapshot(`
|
|
258
253
|
"| str | num | bool | nil |
|
|
259
254
|
|---|---|---|---|
|
|
260
255
|
| text | 42 | true | |"
|
|
@@ -282,9 +277,8 @@ it("can convert json to markdown - handles different data types", () => {
|
|
|
282
277
|
| [1,2,3] |"
|
|
283
278
|
`);
|
|
284
279
|
|
|
285
|
-
expect(
|
|
286
|
-
|
|
287
|
-
).toMatchInlineSnapshot(`
|
|
280
|
+
expect(jsonToMarkdown([{ data: { nested: "value" } }]))
|
|
281
|
+
.toMatchInlineSnapshot(`
|
|
288
282
|
"| data |
|
|
289
283
|
|---|
|
|
290
284
|
| {"nested":"value"} |"
|
|
@@ -293,9 +287,8 @@ it("can convert json to markdown - handles different data types", () => {
|
|
|
293
287
|
|
|
294
288
|
it("can convert json to markdown - handles existing markdown links", () => {
|
|
295
289
|
// When input already contains a markdown link, it should be preserved as-is
|
|
296
|
-
expect(
|
|
297
|
-
|
|
298
|
-
).toMatchInlineSnapshot(`
|
|
290
|
+
expect(jsonToMarkdown([{ link: "[Google](https://google.com)" }]))
|
|
291
|
+
.toMatchInlineSnapshot(`
|
|
299
292
|
"| link |
|
|
300
293
|
|---|
|
|
301
294
|
| [Google](https://google.com) |"
|
|
@@ -132,7 +132,7 @@ describe("MultiMap", () => {
|
|
|
132
132
|
multiMap.add("key2", 2);
|
|
133
133
|
multiMap.add("key3", 3);
|
|
134
134
|
const keys = [...multiMap.keys()];
|
|
135
|
-
expect(keys.
|
|
135
|
+
expect(keys.toSorted()).toEqual(["key1", "key2", "key3"]);
|
|
136
136
|
});
|
|
137
137
|
});
|
|
138
138
|
|
|
@@ -204,7 +204,7 @@ describe("MultiMap", () => {
|
|
|
204
204
|
multiMap.add("key3", 5);
|
|
205
205
|
|
|
206
206
|
const flattened = multiMap.flatValues();
|
|
207
|
-
expect(flattened.
|
|
207
|
+
expect(flattened.toSorted()).toEqual([1, 2, 3, 4, 5]);
|
|
208
208
|
});
|
|
209
209
|
|
|
210
210
|
it("should handle empty arrays in values", () => {
|
|
@@ -213,7 +213,7 @@ describe("MultiMap", () => {
|
|
|
213
213
|
multiMap.add("key2", 2);
|
|
214
214
|
|
|
215
215
|
const flattened = multiMap.flatValues();
|
|
216
|
-
expect(flattened.
|
|
216
|
+
expect(flattened.toSorted()).toEqual([1, 2]);
|
|
217
217
|
});
|
|
218
218
|
});
|
|
219
219
|
|
|
@@ -29,9 +29,9 @@ describe("Objects", () => {
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
it("should return falsy input unchanged", () => {
|
|
32
|
-
//
|
|
32
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
33
33
|
expect(Objects.mapValues(null as any, (v) => v)).toBe(null);
|
|
34
|
-
//
|
|
34
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
35
35
|
expect(Objects.mapValues(undefined as any, (v) => v)).toBe(undefined);
|
|
36
36
|
});
|
|
37
37
|
});
|
|
@@ -249,7 +249,7 @@ describe("Objects", () => {
|
|
|
249
249
|
|
|
250
250
|
it("should handle omitting non-existent keys", () => {
|
|
251
251
|
const obj = { a: 1, b: 2 };
|
|
252
|
-
//
|
|
252
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
253
253
|
const result = Objects.omit(obj, ["c" as any]);
|
|
254
254
|
expect(result).toEqual({ a: 1, b: 2 });
|
|
255
255
|
});
|
|
@@ -170,36 +170,39 @@ describe("PathBuilder", () => {
|
|
|
170
170
|
});
|
|
171
171
|
|
|
172
172
|
describe("edge case filenames", () => {
|
|
173
|
-
it.each(
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
)(
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
173
|
+
it.each(EDGE_CASE_FILENAMES)(
|
|
174
|
+
"should handle unicode and spaces in basename: %s",
|
|
175
|
+
(filename) => {
|
|
176
|
+
const basename = Paths.basename(filename);
|
|
177
|
+
expect(basename).toBe(filename);
|
|
178
|
+
expect(typeof basename).toBe("string");
|
|
179
|
+
expect(basename).not.toBe("");
|
|
180
|
+
},
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
it.each(EDGE_CASE_FILENAMES)(
|
|
184
|
+
"should handle unicode and spaces in dirname: %s",
|
|
185
|
+
(filename) => {
|
|
186
|
+
const fullPath = `/path/to/${filename}`;
|
|
187
|
+
const dirname = Paths.dirname(fullPath);
|
|
188
|
+
expect(dirname).toBe("/path/to");
|
|
189
|
+
},
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
it.each(EDGE_CASE_FILENAMES)(
|
|
193
|
+
"should handle unicode and spaces in path operations: %s",
|
|
194
|
+
(filename) => {
|
|
195
|
+
const baseName = Paths.basename(filename);
|
|
196
|
+
const extension = Paths.extension(filename);
|
|
197
|
+
|
|
198
|
+
// Should preserve unicode characters in basename
|
|
199
|
+
expect(baseName).toContain(filename.split(".")[0]);
|
|
200
|
+
|
|
201
|
+
// Should correctly extract extension
|
|
202
|
+
if (filename.includes(".")) {
|
|
203
|
+
expect(extension).toBe(filename.split(".").pop());
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
);
|
|
204
207
|
});
|
|
205
208
|
});
|