@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
|
@@ -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>;
|
|
@@ -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
|
});
|
|
@@ -14,24 +14,25 @@ describe("isUrl", () => {
|
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
describe("URL parameter handling with edge case filenames", () => {
|
|
17
|
-
it.each(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
17
|
+
it.each(EDGE_CASE_FILENAMES)(
|
|
18
|
+
"should handle unicode filenames in URL parameters: %s",
|
|
19
|
+
(filename) => {
|
|
20
|
+
// Test that updateQueryParams can handle unicode filenames
|
|
21
|
+
updateQueryParams((params) => {
|
|
22
|
+
params.set("file", filename);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Verify URL encoding/decoding works with unicode
|
|
26
|
+
const encoded = encodeURIComponent(filename);
|
|
27
|
+
const decoded = decodeURIComponent(encoded);
|
|
28
|
+
expect(decoded).toBe(filename);
|
|
29
|
+
|
|
30
|
+
// Verify filename can be safely added to URL parameters
|
|
31
|
+
const url = new URL("https://example.com");
|
|
32
|
+
url.searchParams.set("file", filename);
|
|
33
|
+
expect(url.searchParams.get("file")).toBe(filename);
|
|
34
|
+
},
|
|
35
|
+
);
|
|
35
36
|
|
|
36
37
|
it("should preserve unicode in query string round-trip", () => {
|
|
37
38
|
EDGE_CASE_FILENAMES.forEach((filename) => {
|
|
@@ -9,13 +9,13 @@ import {
|
|
|
9
9
|
describe("semverSort", () => {
|
|
10
10
|
it("should sort versions correctly", () => {
|
|
11
11
|
const versions = ["1.0.0", "1.0.1", "1.0.10", "1.0.2"];
|
|
12
|
-
const sortedVersions = versions.
|
|
12
|
+
const sortedVersions = versions.toSorted(semverSort);
|
|
13
13
|
expect(sortedVersions).toEqual(["1.0.0", "1.0.1", "1.0.2", "1.0.10"]);
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
it("should handle pre-release versions correctly", () => {
|
|
17
17
|
const versions = ["1.0.0-alpha", "1.0.0", "1.0.0-beta", "1.0.0-rc.1"];
|
|
18
|
-
const sortedVersions = versions.
|
|
18
|
+
const sortedVersions = versions.toSorted(semverSort);
|
|
19
19
|
expect(sortedVersions).toEqual([
|
|
20
20
|
"1.0.0-alpha",
|
|
21
21
|
"1.0.0-beta",
|
|
@@ -26,7 +26,7 @@ describe("semverSort", () => {
|
|
|
26
26
|
|
|
27
27
|
it("should handle versions with different number of segments", () => {
|
|
28
28
|
const versions = ["1.0", "1.0.0", "1.0.1", "1.0.10"];
|
|
29
|
-
const sortedVersions = versions.
|
|
29
|
+
const sortedVersions = versions.toSorted(semverSort);
|
|
30
30
|
expect(sortedVersions).toEqual(["1.0", "1.0.0", "1.0.1", "1.0.10"]);
|
|
31
31
|
});
|
|
32
32
|
|
|
@@ -36,7 +36,7 @@ describe("semverSort", () => {
|
|
|
36
36
|
"1.0.0+20130313144700",
|
|
37
37
|
"1.0.0+exp.sha.5114f85",
|
|
38
38
|
];
|
|
39
|
-
const sortedVersions = versions.
|
|
39
|
+
const sortedVersions = versions.toSorted(semverSort);
|
|
40
40
|
expect(sortedVersions).toEqual([
|
|
41
41
|
"1.0.0+001",
|
|
42
42
|
"1.0.0+20130313144700",
|
|
@@ -46,7 +46,7 @@ describe("semverSort", () => {
|
|
|
46
46
|
|
|
47
47
|
it("reverseSemverSort", () => {
|
|
48
48
|
const versions = ["1.0.0", "1.0.1", "1.0.10", "1.0.2"];
|
|
49
|
-
const sortedVersions = versions.
|
|
49
|
+
const sortedVersions = versions.toSorted(reverseSemverSort);
|
|
50
50
|
expect(sortedVersions).toEqual(["1.0.10", "1.0.2", "1.0.1", "1.0.0"]);
|
|
51
51
|
});
|
|
52
52
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-explicit-any */
|
|
3
3
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
4
4
|
import { waitForWs } from "../waitForWs";
|
|
5
5
|
|
package/src/utils/arrays.ts
CHANGED
|
@@ -53,7 +53,7 @@ export function arrayShallowEquals<T>(a: T[], b: T[]): boolean {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
export const Arrays = {
|
|
56
|
-
//
|
|
56
|
+
// oxlint-disable-next-line typescript/no-explicit-any
|
|
57
57
|
EMPTY: [] as any,
|
|
58
58
|
zip: <T, U>(a: T[], b: U[]): [T, U][] => {
|
|
59
59
|
invariant(a.length === b.length, "Arrays must be the same length");
|
|
@@ -85,7 +85,7 @@ export function sortBy<T>(
|
|
|
85
85
|
// Decorate/sort/undecorate to compute keys once per element
|
|
86
86
|
return arr
|
|
87
87
|
.map((item) => [key(item), item] as const)
|
|
88
|
-
.
|
|
88
|
+
.toSorted(([ka], [kb]) => {
|
|
89
89
|
// Nullish values sort last
|
|
90
90
|
if (ka == null && kb == null) {
|
|
91
91
|
return 0;
|
package/src/utils/assertNever.ts
CHANGED
|
@@ -15,6 +15,6 @@ export function assertNever(x: never): never {
|
|
|
15
15
|
*/
|
|
16
16
|
export function logNever(x: never): void {
|
|
17
17
|
Logger.warn(`Unexpected object: ${JSON.stringify(x)}`);
|
|
18
|
-
//
|
|
18
|
+
// oxlint-ignore-next-line -- noVoidTypeReturn: function returns void but value is needed for exhaustiveness
|
|
19
19
|
return x;
|
|
20
20
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
/*
|
|
2
|
+
/* oxlint-disable typescript/no-explicit-any */
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Debounces multiple calls to a loader function, returning the same promise for
|
|
@@ -14,7 +14,7 @@ export function batch<T, REQ extends unknown[]>(
|
|
|
14
14
|
return (...args: REQ): Promise<T> => {
|
|
15
15
|
const key = toKey(...args);
|
|
16
16
|
if (requestCache.has(key)) {
|
|
17
|
-
//
|
|
17
|
+
// oxlint-disable-next-line typescript/no-non-null-assertion
|
|
18
18
|
return requestCache.get(key)!;
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -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 { atom, useSetAtom } from "jotai";
|
|
5
5
|
import type { Reducer } from "react";
|
|
@@ -139,7 +139,7 @@ export function createReducerAndAtoms<
|
|
|
139
139
|
);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
//
|
|
142
|
+
// oxlint-disable-next-line typescript/no-non-null-assertion
|
|
143
143
|
return actionsMap.get(setState)!;
|
|
144
144
|
}
|
|
145
145
|
|