@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.
Files changed (484) hide show
  1. package/dist/{ConnectedDataExplorerComponent-Dl1grr8z.js → ConnectedDataExplorerComponent-DuD8BVl6.js} +54 -54
  2. package/dist/{Plot-WhbJAbBh.js → Plot-BxlSHo0G.js} +47 -38
  3. package/dist/_basePickBy-Sow3pJjS.js +41 -0
  4. package/dist/{_baseUniq-B4eL5sTC.js → _baseUniq-C87CckHL.js} +15 -54
  5. package/dist/{any-language-editor-CT_9yBde.js → any-language-editor-BHH_pQ6M.js} +21 -21
  6. package/dist/architecture-7HQA4BMR-BHdkAMvZ.js +6 -0
  7. package/dist/{architectureDiagram-VXUJARFQ-vxgYGIMP.js → architectureDiagram-VXUJARFQ-B3YQo9At.js} +15 -15
  8. package/dist/{arrays-Du-jRBAy.js → arrays-beUWo8RF.js} +1 -1
  9. package/dist/assets/__vite-browser-external-WSlCcXn_.js +1 -0
  10. package/dist/assets/{worker-D10K3OOz.js → worker-DUYMdbtA.js} +2 -2
  11. package/dist/{blockDiagram-VD42YOAC-C7x6YTH7.js → blockDiagram-VD42YOAC-CpQ3TKEN.js} +7 -7
  12. package/dist/{button-qsiIHncQ.js → button-DNlNlZY_.js} +82 -84
  13. package/dist/{c4Diagram-YG6GDRKO-Cx4oseGg.js → c4Diagram-YG6GDRKO-CZSU4uqU.js} +4 -4
  14. package/dist/{capabilities-26mwv03y.js → capabilities-Coe9eM9T.js} +2 -2
  15. package/dist/{channel-C_50jIAn.js → channel-X3JKk8gE.js} +1 -1
  16. package/dist/{chat-ui-CtqUthFR.js → chat-ui-Cel1kBfc.js} +147 -146
  17. package/dist/{check-D_YwHEgY.js → check-CWUkiHmb.js} +1 -1
  18. package/dist/{chunk-4F5CHEZ2-Dvo_CFnR.js → chunk-4F5CHEZ2-D5mClyDv.js} +1 -1
  19. package/dist/{chunk-ABZYJK2D-D5YIs71w.js → chunk-ABZYJK2D-CZYCCtLy.js} +1 -1
  20. package/dist/{chunk-ATLVNIR6-CyOjzOcf.js → chunk-ATLVNIR6-DaOzLLgN.js} +1 -1
  21. package/dist/{chunk-B2363JML-BzZqINRO.js → chunk-B2363JML-Br0eA2T3.js} +1 -1
  22. package/dist/{chunk-B4BG7PRW-ZJeV3KdD.js → chunk-B4BG7PRW-4BjV11Br.js} +4 -4
  23. package/dist/{chunk-DI55MBZ5-Dx_wwX6l.js → chunk-DI55MBZ5-DITY3EyP.js} +4 -4
  24. package/dist/{chunk-EXTU4WIE-CgefpSXQ.js → chunk-EXTU4WIE-jUPSAk3i.js} +1 -1
  25. package/dist/{chunk-FRFDVMJY-Derq8UzY.js → chunk-FRFDVMJY-DnEvEFRR.js} +1 -1
  26. package/dist/{chunk-JA3XYJ7Z-CcIOIFpc.js → chunk-JA3XYJ7Z-BcPEfxk_.js} +2 -2
  27. package/dist/{chunk-JZLCHNYA-CgO0GG1p.js → chunk-JZLCHNYA-2bnLL3xL.js} +4 -4
  28. package/dist/{chunk-N4CR4FBY-2qzGzAxT.js → chunk-N4CR4FBY-CpZSuGSU.js} +5 -5
  29. package/dist/{chunk-PL6DKKU2-KoG71Zin.js → chunk-PL6DKKU2-DnId6G-x.js} +1 -1
  30. package/dist/{chunk-QN33PNHL-Dp1qBo28.js → chunk-QN33PNHL-B9p5ojHB.js} +1 -1
  31. package/dist/{chunk-QXUST7PY-BxmmeIwf.js → chunk-QXUST7PY-Ch6F5Obl.js} +5 -5
  32. package/dist/{chunk-S3R3BYOJ-D3Rys9ZW.js → chunk-S3R3BYOJ-B0UOFJwq.js} +3 -3
  33. package/dist/{chunk-SJTYNZTY-Co-DhKAG.js → chunk-SJTYNZTY-BsBZnJUj.js} +1 -1
  34. package/dist/{chunk-TCCFYFTB-BAhzIqBO.js → chunk-TCCFYFTB-Clbl-fTg.js} +8 -7
  35. package/dist/{chunk-TQ3KTPDO-DxYI735Z.js → chunk-TQ3KTPDO-CFkSQ30e.js} +1 -1
  36. package/dist/{chunk-TZMSLE5B-Dxumt0wv.js → chunk-TZMSLE5B-D45397J2.js} +1 -1
  37. package/dist/{chunk-UMXZTB3W-CuahpKin.js → chunk-UMXZTB3W-D-A834Bq.js} +1 -1
  38. package/dist/{classDiagram-v2-WZHVMYZB-CYoFMQKE.js → classDiagram-2ON5EDUG-C8-zE3Zv.js} +10 -10
  39. package/dist/{classDiagram-2ON5EDUG-DkOvXRlx.js → classDiagram-v2-WZHVMYZB-DrmbGANl.js} +10 -10
  40. package/dist/{clone-DDndUqI0.js → clone-DZFQCtFJ.js} +1 -1
  41. package/dist/{constants-D1Am36hX.js → constants-CvyfaCvs.js} +3 -3
  42. package/dist/{copy-CBo9JcJW.js → copy-B7781WJ3.js} +2 -2
  43. package/dist/{dagre-6UL2VRFP-BXBaU8PB.js → dagre-6UL2VRFP-OMItEBnY.js} +12 -12
  44. package/dist/{dagre-D3dlYz-r.js → dagre-QVd-lCXU.js} +13 -23
  45. package/dist/{data-grid-overlay-editor-nZux6_d2.js → data-grid-overlay-editor-lKF301ME.js} +1 -1
  46. package/dist/{diagram-PSM6KHXK-CJxjk4LG.js → diagram-PSM6KHXK-CkKbohWI.js} +16 -16
  47. package/dist/{diagram-QEK2KX5R-IMILPh_p.js → diagram-QEK2KX5R-DjUMpVcx.js} +14 -14
  48. package/dist/{diagram-S2PKOQOG-6O0g6Boj.js → diagram-S2PKOQOG-b-c0d-wZ.js} +14 -14
  49. package/dist/{dist-BkXs8bw0.js → dist--6TSlp8H.js} +1 -1
  50. package/dist/dist-7K5doRvB.js +6 -0
  51. package/dist/{dist-CQidOwep.js → dist-B43sbpd0.js} +3 -3
  52. package/dist/dist-B6I_A2-E.js +8 -0
  53. package/dist/dist-BEQsmaZY.js +5 -0
  54. package/dist/dist-BasY2RHp.js +8 -0
  55. package/dist/{dist-BemtTYzN.js → dist-Bfp1XXWt.js} +5 -5
  56. package/dist/{dist-v-1kgqZ3.js → dist-BjDuO5JW.js} +1 -1
  57. package/dist/dist-Bosc00dY.js +5 -0
  58. package/dist/{dist-DLNKBPsk.js → dist-BrxqmS9Q.js} +4 -4
  59. package/dist/{dist-DBYL08Lu.js → dist-BvhGByxL.js} +4 -4
  60. package/dist/{dist-CVqlhD3M.js → dist-C4bq5Ioy.js} +2 -2
  61. package/dist/{dist-DwmxBUOe.js → dist-CFKdzOIu.js} +2 -2
  62. package/dist/{dist-5nTQE2yt.js → dist-CIB8w0Fl.js} +2 -2
  63. package/dist/{dist-C-EcLtO9.js → dist-CNF0QBLR.js} +1 -1
  64. package/dist/dist-CQMZOn-_.js +8 -0
  65. package/dist/dist-CViQhWZ8.js +5 -0
  66. package/dist/{dist-Dg65j0em.js → dist-CcMfr7jD.js} +1 -1
  67. package/dist/{dist-C0XYIHKJ.js → dist-Ci0CXEFt.js} +1 -1
  68. package/dist/dist-Cz6rLfwY.js +5 -0
  69. package/dist/dist-D8eq8st3.js +6 -0
  70. package/dist/{dist-qoCY8giM.js → dist-DAfcmt-d.js} +2 -2
  71. package/dist/{dist-B6Op2ogv.js → dist-DD_cYHOl.js} +2 -2
  72. package/dist/{dist-BUSLKXcu.js → dist-DFK94vuS.js} +2 -2
  73. package/dist/{dist-DBXPlQ0D.js → dist-DGNtjMZu.js} +1 -1
  74. package/dist/{dist-C9qF7MRB.js → dist-DJ9F1eHs.js} +2 -2
  75. package/dist/{dist-Ci_jEudG.js → dist-DJKubHDd.js} +1 -1
  76. package/dist/{dist-CnFp2Kcl.js → dist-DLafRu9s.js} +2 -2
  77. package/dist/dist-DM1UDXdl.js +5 -0
  78. package/dist/dist-DNrtWPgS.js +5 -0
  79. package/dist/dist-D_UjpfOY.js +1381 -0
  80. package/dist/{dist-DmFS6KZW.js → dist-DbnBiLNH.js} +3 -3
  81. package/dist/{dist-BiZZAo22.js → dist-DlSUOIm9.js} +1 -1
  82. package/dist/{dist-DStU8He1.js → dist-Doy0mQDg.js} +2 -2
  83. package/dist/{dist-CxAX99oC.js → dist-DpkJHKB8.js} +2 -2
  84. package/dist/{dist-DjaZNkZ7.js → dist-LhQNUe5A.js} +3 -3
  85. package/dist/dist-V7q2qnpA.js +5 -0
  86. package/dist/{dist-BJ3fhRYu.js → dist-VqF3W_ue.js} +2 -2
  87. package/dist/dist-a5_hPgu2.js +8 -0
  88. package/dist/{dist-B9KLrfoh.js → dist-ej6AQKaS.js} +1 -1
  89. package/dist/{dist-Brb6VNc4.js → dist-m9tsXsFf.js} +2 -2
  90. package/dist/{dist-CBwMSFDu.js → dist-tGk0aZ--.js} +2 -2
  91. package/dist/dist-uVyZcV1-.js +5 -0
  92. package/dist/{erDiagram-Q2GNP2WA-sho7Cl9f.js → erDiagram-Q2GNP2WA-CDhLaOZ1.js} +10 -10
  93. package/dist/{error-banner-Bx9kIgrs.js → error-banner-Cjf0RU9I.js} +79 -79
  94. package/dist/{esm-CMg2ABu6.js → esm-4wmsH2lp.js} +6 -6
  95. package/dist/{esm-cqK9POGH.js → esm-CD1iby2n.js} +23 -23
  96. package/dist/{flowDiagram-NV44I4VS-C4nY4Fbz.js → flowDiagram-NV44I4VS-BDi4O4CL.js} +10 -10
  97. package/dist/{ganttDiagram-JELNMOA3-CtxNcCM2.js → ganttDiagram-JELNMOA3-BpZE6kVp.js} +3 -3
  98. package/dist/{gitGraph-G5XIXVHT-SL6TDof6.js → gitGraph-G5XIXVHT-B_c6xFJv.js} +3 -3
  99. package/dist/{gitGraphDiagram-V2S2FVAM-D9885mxd.js → gitGraphDiagram-V2S2FVAM-iQnXzbPM.js} +13 -13
  100. package/dist/{glide-data-editor-CkVEV-Gk.js → glide-data-editor-BqnvTmDo.js} +1739 -1708
  101. package/dist/{graphlib-CxWdvYQt.js → graphlib-BV1_gi0C.js} +4 -3
  102. package/dist/hasIn-DnfJcYpY.js +108 -0
  103. package/dist/{info-VBDWY6EO-6MXPTSmi.js → info-VBDWY6EO-BTyzxmhr.js} +3 -3
  104. package/dist/{infoDiagram-HS3SLOUP-Bw2FlRwF.js → infoDiagram-HS3SLOUP-OYrX6uO3.js} +13 -13
  105. package/dist/{input-BSde8uV4.js → input-CFY9gApZ.js} +5055 -5055
  106. package/dist/{isEmpty-BQtUinxJ.js → isEmpty-B7FX9wKt.js} +1 -1
  107. package/dist/{isSymbol-DFp8040B.js → isSymbol-DCbjQG_U.js} +1 -1
  108. package/dist/{journeyDiagram-XKPGCS4Q-BXlCEth8.js → journeyDiagram-XKPGCS4Q-ClPC94aN.js} +3 -3
  109. package/dist/{kanban-definition-3W4ZIXB7-CorxzSYm.js → kanban-definition-3W4ZIXB7-DHEAKdZt.js} +7 -7
  110. package/dist/{label-DTNqw9tv.js → label-DbZGAoCH.js} +538 -569
  111. package/dist/{loader-3c9hT4kT.js → loader-Bd1kgLn7.js} +19 -16
  112. package/dist/main.js +35011 -34898
  113. package/dist/{memoize-CuHciEBb.js → memoize-CSTI9eOX.js} +1 -1
  114. package/dist/{merge-CA_buyY3.js → merge-CVhG7q_o.js} +1 -1
  115. package/dist/{mermaid-CEKslOkI.js → mermaid-B2HDLx2g.js} +54 -54
  116. package/dist/{mermaid-parser.core-cq4YDee-.js → mermaid-parser.core-ntCgyx0x.js} +8 -8
  117. package/dist/min-Ds3gG0Ff.js +96 -0
  118. package/dist/{mindmap-definition-VGOIOE7T-DRsT8UaN.js → mindmap-definition-VGOIOE7T-CxEUZZvY.js} +9 -9
  119. package/dist/{now-CXAdKY5k.js → now-nrrrOr01.js} +1 -1
  120. package/dist/{once-CZno0h-b.js → once-C_TIu-kR.js} +1 -1
  121. package/dist/{packet-DYOGHKS2-Dw08gMaZ.js → packet-DYOGHKS2-BhvnpoGi.js} +3 -3
  122. package/dist/{pie-VRWISCQL-C5SPSvT8.js → pie-VRWISCQL-dILuA3iG.js} +3 -3
  123. package/dist/{pieDiagram-ADFJNKIX-DhJ1Cx2O.js → pieDiagram-ADFJNKIX-U3LrUqAS.js} +14 -14
  124. package/dist/{process-output-KyzWazB-.js → process-output-DC1TOnIl.js} +3184 -3207
  125. package/dist/{quadrantDiagram-AYHSOK5B-DXUFIWlz.js → quadrantDiagram-AYHSOK5B-BVWuq-3R.js} +2 -2
  126. package/dist/{radar-ZZBFDIW7-BvY0bgSg.js → radar-ZZBFDIW7-DwFrOJDj.js} +3 -3
  127. package/dist/range-fJeId9Ri.js +30 -0
  128. package/dist/{requirementDiagram-UZGBJVZJ-DO_gtQIb.js → requirementDiagram-UZGBJVZJ-D0zpQnKC.js} +9 -9
  129. package/dist/{sankeyDiagram-TZEHDZUN-OZzXEkuG.js → sankeyDiagram-TZEHDZUN-CExy1joT.js} +2 -2
  130. package/dist/{sequenceDiagram-WL72ISMW-K7nZRifV.js → sequenceDiagram-WL72ISMW-D1BJxLjH.js} +4 -4
  131. package/dist/{slides-component-CIcSvFh7.js → slides-component-CX2JC-Ws.js} +2 -2
  132. package/dist/{spec-DYaR1rJh.js → spec-CD7QaCV-.js} +3 -3
  133. package/dist/{stateDiagram-FKZM4ZOC-DzXJZAq7.js → stateDiagram-FKZM4ZOC-B1S8jGMn.js} +12 -12
  134. package/dist/{stateDiagram-v2-4FDKWEC3-BZBPUmyF.js → stateDiagram-v2-4FDKWEC3-BH5ozUbc.js} +10 -10
  135. package/dist/stex-CQDv3aS8.js +4 -0
  136. package/dist/style.css +1 -1
  137. package/dist/{timeline-definition-IT6M3QCI-DNoLAh-i.js → timeline-definition-IT6M3QCI-BDT9JAmn.js} +2 -2
  138. package/dist/{toDate-D6VXexnV.js → toDate-CUqpEbBS.js} +5 -5
  139. package/dist/{toNumber-xFPoy1OI.js → toNumber-55tjPCWr.js} +2 -2
  140. package/dist/tooltip-BXEpXV3R.js +404 -0
  141. package/dist/{treemap-GDKQZRPO-C5OoxpmV.js → treemap-GDKQZRPO-bx2ngsgN.js} +3 -3
  142. package/dist/{types-CQ-RbYxp.js → types-D_ntCXg0.js} +3 -3
  143. package/dist/{useAsyncData-Cd4Urlww.js → useAsyncData-rN1nzPaS.js} +2 -2
  144. package/dist/{useDeepCompareMemoize-X7clcrcQ.js → useDeepCompareMemoize-Ch-7Rk2x.js} +4 -4
  145. package/dist/{useIframeCapabilities-BVQrlRBd.js → useIframeCapabilities-CqhrVue6.js} +1 -1
  146. package/dist/useLifecycle-4fA1pHoh.js +177 -0
  147. package/dist/{useTheme-Dm1WaAGy.js → useTheme-MWfxn4oz.js} +4 -5
  148. package/dist/{vega-component-A6unyUJS.js → vega-component-CPhNLfZZ.js} +25 -25
  149. package/dist/{xychartDiagram-PRI3JC2R-ehVeySMW.js → xychartDiagram-PRI3JC2R-CuAZiqHS.js} +5 -5
  150. package/dist/{Combination-B--d1_LV.js → zod-C6UGQ3fz.js} +8085 -8151
  151. package/package.json +8 -41
  152. package/src/__mocks__/common.ts +4 -4
  153. package/src/__tests__/main.test.tsx +12 -14
  154. package/src/components/ai/ai-provider-icon.tsx +3 -2
  155. package/src/components/app-config/user-config-form.tsx +0 -27
  156. package/src/components/chat/acp/agent-docs.tsx +3 -3
  157. package/src/components/chat/acp/agent-panel.tsx +71 -24
  158. package/src/components/chat/acp/agent-selector.tsx +2 -11
  159. package/src/components/chat/acp/state.ts +15 -3
  160. package/src/components/chat/chat-history-popover.tsx +1 -1
  161. package/src/components/chat/chat-panel.tsx +2 -1
  162. package/src/components/data-table/TableBottomBar.tsx +7 -1
  163. package/src/components/data-table/TableTopBar.tsx +31 -35
  164. package/src/components/data-table/__tests__/columns.test.tsx +7 -7
  165. package/src/components/data-table/cell-hover-template/types.ts +1 -1
  166. package/src/components/data-table/cell-hover-text/types.ts +1 -1
  167. package/src/components/data-table/cell-selection/__tests__/feature.test.ts +1 -1
  168. package/src/components/data-table/cell-selection/types.ts +4 -3
  169. package/src/components/data-table/cell-styling/types.ts +1 -1
  170. package/src/components/data-table/charts/chart-spec/altair-generator.ts +2 -2
  171. package/src/components/data-table/charts/charts.tsx +2 -2
  172. package/src/components/data-table/charts/components/chart-items.tsx +1 -1
  173. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
  174. package/src/components/data-table/column-formatting/types.ts +5 -4
  175. package/src/components/data-table/column-header.tsx +4 -2
  176. package/src/components/data-table/column-summary/legacy-chart-spec.ts +1 -1
  177. package/src/components/data-table/column-wrapping/types.ts +4 -3
  178. package/src/components/data-table/columns.tsx +4 -1
  179. package/src/components/data-table/copy-column/types.ts +4 -3
  180. package/src/components/data-table/data-table.tsx +12 -11
  181. package/src/components/data-table/focus-row/types.ts +4 -3
  182. package/src/components/data-table/loading-table.tsx +1 -1
  183. package/src/components/data-table/pagination.tsx +1 -1
  184. package/src/components/data-table/range-focus/__tests__/atoms.test.ts +13 -13
  185. package/src/components/data-table/range-focus/__tests__/use-cell-range-selection.test.ts +9 -11
  186. package/src/components/data-table/range-focus/atoms.ts +2 -2
  187. package/src/components/data-table/range-focus/cell-selection-stats.tsx +3 -1
  188. package/src/components/data-table/renderers.tsx +18 -12
  189. package/src/components/data-table/row-viewer-panel/row-viewer.tsx +1 -1
  190. package/src/components/data-table/table-explorer-panel/table-explorer-panel.tsx +2 -2
  191. package/src/components/dependency-graph/dependency-graph-tree.tsx +1 -1
  192. package/src/components/editor/__tests__/data-attributes.test.tsx +93 -94
  193. package/src/components/editor/__tests__/dynamic-favicon.test.tsx +1 -1
  194. package/src/components/editor/actions/name-cell-input.tsx +4 -2
  195. package/src/components/editor/actions/pair-with-agent-modal.tsx +179 -0
  196. package/src/components/editor/actions/useCellActionButton.tsx +4 -2
  197. package/src/components/editor/actions/useNotebookActions.tsx +10 -0
  198. package/src/components/editor/ai/add-cell-with-ai.tsx +2 -1
  199. package/src/components/editor/ai/ai-completion-editor.tsx +1 -1
  200. package/src/components/editor/app-container.tsx +1 -1
  201. package/src/components/editor/cell/CellStatus.tsx +4 -5
  202. package/src/components/editor/cell/cell-context-menu.tsx +4 -2
  203. package/src/components/editor/cell/code/cell-editor.tsx +3 -2
  204. package/src/components/editor/cell/toolbar.tsx +2 -1
  205. package/src/components/editor/chrome/components/contribute-snippet-button.tsx +4 -1
  206. package/src/components/editor/chrome/components/feedback-button.tsx +4 -1
  207. package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +1 -1
  208. package/src/components/editor/chrome/panels/empty-state.tsx +1 -0
  209. package/src/components/editor/chrome/panels/file-explorer-panel.tsx +0 -10
  210. package/src/components/editor/chrome/panels/snippets-panel.tsx +1 -1
  211. package/src/components/editor/chrome/panels/write-secret-modal.tsx +1 -1
  212. package/src/components/editor/chrome/wrapper/app-chrome.tsx +4 -1
  213. package/src/components/editor/chrome/wrapper/footer-items/lsp-status.tsx +2 -1
  214. package/src/components/editor/chrome/wrapper/storage.ts +2 -2
  215. package/src/components/editor/connections/database/as-code.ts +1 -1
  216. package/src/components/editor/connections/form-renderers.tsx +1 -1
  217. package/src/components/editor/connections/storage/as-code.ts +1 -1
  218. package/src/components/editor/controls/keyboard-shortcuts.tsx +1 -1
  219. package/src/components/editor/header/filename-input.tsx +4 -1
  220. package/src/components/editor/links/cell-link-list.tsx +1 -1
  221. package/src/components/editor/navigation/__tests__/navigation.test.ts +1 -1
  222. package/src/components/editor/navigation/clipboard.ts +1 -1
  223. package/src/components/editor/navigation/multi-cell-action-toolbar.tsx +2 -2
  224. package/src/components/editor/navigation/navigation.ts +3 -3
  225. package/src/components/editor/notebook-cell.tsx +1 -1
  226. package/src/components/editor/output/JsonOutput.tsx +6 -6
  227. package/src/components/editor/output/ansi-reduce.ts +2 -2
  228. package/src/components/editor/output/console/ConsoleOutput.tsx +2 -2
  229. package/src/components/editor/renderers/cells-renderer.tsx +1 -1
  230. package/src/components/editor/renderers/grid-layout/grid-layout.tsx +1 -1
  231. package/src/components/editor/renderers/plugins.ts +1 -1
  232. package/src/components/editor/renderers/slides-layout/types.ts +2 -2
  233. package/src/components/editor/renderers/vertical-layout/__tests__/useFocusFirstEditor.test.ts +2 -2
  234. package/src/components/editor/renderers/vertical-layout/__tests__/vertical-layout.test.ts +1 -1
  235. package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +12 -13
  236. package/src/components/find-replace/find-replace.tsx +3 -1
  237. package/src/components/forms/form.tsx +1 -1
  238. package/src/components/forms/options.ts +1 -1
  239. package/src/components/pages/gallery-page.tsx +1 -1
  240. package/src/components/static-html/static-banner.tsx +2 -2
  241. package/src/components/storage/__tests__/storage-snippets.test.ts +4 -6
  242. package/src/components/terminal/terminal.tsx +4 -4
  243. package/src/components/tracing/tracing.test.tsx +30 -30
  244. package/src/components/ui/accordion.tsx +1 -1
  245. package/src/components/ui/alert-dialog.tsx +1 -1
  246. package/src/components/ui/badge.tsx +2 -1
  247. package/src/components/ui/button.tsx +5 -4
  248. package/src/components/ui/calendar.tsx +3 -2
  249. package/src/components/ui/checkbox.tsx +1 -1
  250. package/src/components/ui/combobox.tsx +2 -1
  251. package/src/components/ui/command.tsx +5 -2
  252. package/src/components/ui/context-menu.tsx +1 -1
  253. package/src/components/ui/date-input.tsx +7 -6
  254. package/src/components/ui/date-picker.tsx +6 -4
  255. package/src/components/ui/dialog.tsx +1 -1
  256. package/src/components/ui/draggable-popover.tsx +1 -1
  257. package/src/components/ui/dropdown-menu.tsx +2 -1
  258. package/src/components/ui/field.tsx +1 -2
  259. package/src/components/ui/form.tsx +4 -5
  260. package/src/components/ui/fullscreen.tsx +4 -1
  261. package/src/components/ui/label.tsx +1 -1
  262. package/src/components/ui/navigation.tsx +1 -1
  263. package/src/components/ui/popover.tsx +1 -1
  264. package/src/components/ui/progress.tsx +4 -3
  265. package/src/components/ui/query-param-preserving-link.tsx +4 -2
  266. package/src/components/ui/radio-group.tsx +1 -1
  267. package/src/components/ui/range-slider.tsx +1 -1
  268. package/src/components/ui/scroll-area.tsx +1 -1
  269. package/src/components/ui/select.tsx +1 -1
  270. package/src/components/ui/sheet.tsx +3 -2
  271. package/src/components/ui/slider.tsx +1 -1
  272. package/src/components/ui/switch.tsx +1 -1
  273. package/src/components/ui/tabs.tsx +1 -1
  274. package/src/components/ui/textarea.tsx +1 -2
  275. package/src/components/ui/toast.tsx +1 -1
  276. package/src/components/ui/toggle.tsx +1 -1
  277. package/src/components/ui/tooltip.tsx +1 -1
  278. package/src/components/variables/variables-table.tsx +1 -1
  279. package/src/core/ai/context/providers/__tests__/datasource.test.ts +1 -1
  280. package/src/core/ai/context/providers/__tests__/error.test.ts +1 -1
  281. package/src/core/ai/context/providers/__tests__/variable.test.ts +1 -1
  282. package/src/core/ai/context/providers/cell-output.ts +1 -2
  283. package/src/core/ai/context/registry.ts +2 -2
  284. package/src/core/ai/tools/edit-notebook-tool.ts +4 -3
  285. package/src/core/ai/tools/registry.ts +1 -1
  286. package/src/core/ai/tools/run-cells-tool.ts +4 -3
  287. package/src/core/cells/__tests__/add-missing-import.test.ts +23 -22
  288. package/src/core/cells/__tests__/cell.test.ts +14 -13
  289. package/src/core/cells/__tests__/cells.test.ts +2 -2
  290. package/src/core/cells/__tests__/scrollCellIntoView.test.ts +1 -1
  291. package/src/core/cells/__tests__/session.test.ts +1 -1
  292. package/src/core/cells/__tests__/utils.test.ts +1 -1
  293. package/src/core/cells/cells.ts +2 -2
  294. package/src/core/cells/ids.ts +1 -1
  295. package/src/core/cells/logs.ts +1 -1
  296. package/src/core/codemirror/ai/request.ts +1 -1
  297. package/src/core/codemirror/cells/__tests__/extensions.test.ts +15 -17
  298. package/src/core/codemirror/cells/traceback-decorations.ts +1 -1
  299. package/src/core/codemirror/copilot/__tests__/language-server.test.ts +1 -1
  300. package/src/core/codemirror/copilot/__tests__/transport.test.ts +129 -3
  301. package/src/core/codemirror/copilot/client.ts +9 -2
  302. package/src/core/codemirror/copilot/getCodes.ts +1 -1
  303. package/src/core/codemirror/copilot/language-server.ts +12 -1
  304. package/src/core/codemirror/copilot/transport.ts +34 -8
  305. package/src/core/codemirror/copilot/types.ts +1 -1
  306. package/src/core/codemirror/facet.ts +1 -1
  307. package/src/core/codemirror/language/__tests__/sql.test.ts +4 -4
  308. package/src/core/codemirror/language/languages/markdown.ts +1 -3
  309. package/src/core/codemirror/language/languages/python.ts +4 -0
  310. package/src/core/codemirror/language/languages/sql/completion-builder.ts +1 -1
  311. package/src/core/codemirror/language/languages/sql/completion-sources.tsx +4 -6
  312. package/src/core/codemirror/language/languages/sql/sql.ts +1 -3
  313. package/src/core/codemirror/language/metadata.ts +1 -1
  314. package/src/core/codemirror/language/panel/sql.tsx +4 -1
  315. package/src/core/codemirror/language/types.ts +1 -1
  316. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +1 -1
  317. package/src/core/codemirror/lsp/notebook-lsp.ts +1 -1
  318. package/src/core/codemirror/misc/__tests__/dnd.test.ts +1 -1
  319. package/src/core/codemirror/reactive-references/__tests__/analyzer.test.ts +28 -42
  320. package/src/core/codemirror/rtc/loro/awareness.ts +1 -1
  321. package/src/core/config/__tests__/config-schema.test.ts +2 -6
  322. package/src/core/config/config-schema.ts +0 -1
  323. package/src/core/config/feature-flag.tsx +1 -3
  324. package/src/core/datasets/data-source-connections.ts +4 -2
  325. package/src/core/datasets/state.ts +1 -1
  326. package/src/core/dom/__tests__/htmlUtils.test.ts +8 -14
  327. package/src/core/dom/__tests__/outline.test.ts +2 -3
  328. package/src/core/dom/outline.ts +1 -1
  329. package/src/core/dom/uiregistry.ts +42 -8
  330. package/src/core/edit-app.tsx +4 -1
  331. package/src/core/export/__tests__/hooks.test.ts +1 -1
  332. package/src/core/hotkeys/__tests__/hotkeys.test.ts +1 -1
  333. package/src/core/hotkeys/shortcuts.ts +1 -1
  334. package/src/core/islands/__tests__/bridge.test.ts +2 -2
  335. package/src/core/islands/__tests__/parse.test.ts +8 -7
  336. package/src/core/islands/bridge.ts +2 -2
  337. package/src/core/islands/components/output-wrapper.tsx +1 -1
  338. package/src/core/islands/parse.ts +1 -1
  339. package/src/core/lsp/__tests__/transport.test.ts +1 -1
  340. package/src/core/network/CachingRequestRegistry.ts +1 -1
  341. package/src/core/network/DeferredRequestRegistry.ts +1 -1
  342. package/src/core/network/__tests__/requests-network.test.ts +1 -1
  343. package/src/core/network/api.ts +2 -2
  344. package/src/core/network/requests-lazy.ts +1 -1
  345. package/src/core/network/requests-toasting.tsx +1 -1
  346. package/src/core/runtime/runtime.ts +1 -0
  347. package/src/core/saving/__tests__/filename.test.ts +7 -6
  348. package/src/core/static/__tests__/download-html.test.ts +16 -15
  349. package/src/core/static/__tests__/files.test.ts +30 -28
  350. package/src/core/static/files.ts +1 -1
  351. package/src/core/vscode/vscode-bindings.ts +1 -1
  352. package/src/core/wasm/bridge.ts +3 -3
  353. package/src/core/wasm/worker/tracer.ts +1 -1
  354. package/src/core/websocket/useWebSocket.tsx +5 -3
  355. package/src/css/app/Cell.css +5 -2
  356. package/src/css/globals.css +18 -16
  357. package/src/custom.d.ts +1 -1
  358. package/src/hooks/__tests__/useDuplicateShortcuts.test.ts +3 -3
  359. package/src/hooks/debug.ts +3 -3
  360. package/src/hooks/useDebounce.ts +1 -1
  361. package/src/hooks/useEventListener.ts +1 -1
  362. package/src/hooks/useHotkey.ts +1 -1
  363. package/src/hooks/useLifecycle.ts +2 -2
  364. package/src/hooks/useNonce.ts +1 -1
  365. package/src/hooks/useResizeObserver.ts +2 -2
  366. package/src/main.tsx +1 -1
  367. package/src/plugins/core/BadPlugin.tsx +7 -6
  368. package/src/plugins/core/RenderHTML.tsx +3 -3
  369. package/src/plugins/core/__test__/registerReactComponent.test.ts +1 -1
  370. package/src/plugins/core/registerReactComponent.tsx +4 -4
  371. package/src/plugins/core/rpc.ts +1 -1
  372. package/src/plugins/impl/CheckboxPlugin.tsx +4 -1
  373. package/src/plugins/impl/DataEditorPlugin.tsx +8 -3
  374. package/src/plugins/impl/DataTablePlugin.tsx +5 -2
  375. package/src/plugins/impl/FileBrowserPlugin.tsx +1 -1
  376. package/src/plugins/impl/FormPlugin.tsx +2 -3
  377. package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +4 -1
  378. package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +1 -1
  379. package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +43 -15
  380. package/src/plugins/impl/anywidget/AnyWidgetPlugin.tsx +3 -12
  381. package/src/plugins/impl/anywidget/__tests__/model.test.ts +2 -2
  382. package/src/plugins/impl/anywidget/model.ts +1 -1
  383. package/src/plugins/impl/anywidget/types.ts +2 -2
  384. package/src/plugins/impl/anywidget/widget-binding.ts +1 -1
  385. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
  386. package/src/plugins/impl/chat/chat-ui.tsx +5 -2
  387. package/src/plugins/impl/data-editor/glide-data-editor.tsx +2 -2
  388. package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +2 -2
  389. package/src/plugins/impl/data-explorer/components/query-form.tsx +1 -1
  390. package/src/plugins/impl/data-explorer/functions/function.ts +1 -1
  391. package/src/plugins/impl/data-explorer/queries/types.ts +1 -1
  392. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -1
  393. package/src/plugins/impl/data-frames/forms/__tests__/form.test.tsx +7 -9
  394. package/src/plugins/impl/data-frames/forms/renderers.tsx +1 -1
  395. package/src/plugins/impl/data-frames/utils/operators.ts +1 -1
  396. package/src/plugins/impl/matplotlib/MatplotlibPlugin.tsx +1 -1
  397. package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +1 -1
  398. package/src/plugins/impl/panel/PanelPlugin.tsx +2 -2
  399. package/src/plugins/impl/plotly/Plot.tsx +3 -3
  400. package/src/plugins/impl/plotly/PlotlyPlugin.tsx +65 -103
  401. package/src/plugins/impl/plotly/__tests__/PlotlyPlugin.test.tsx +114 -0
  402. package/src/plugins/impl/plotly/__tests__/selection.test.ts +199 -0
  403. package/src/plugins/impl/plotly/selection.ts +333 -0
  404. package/src/plugins/impl/vega/__tests__/make-selectable.test.ts +13 -14
  405. package/src/plugins/impl/vega/__tests__/utils.test.ts +68 -0
  406. package/src/plugins/impl/vega/batched.ts +1 -1
  407. package/src/plugins/impl/vega/make-selectable.ts +3 -3
  408. package/src/plugins/impl/vega/types.ts +1 -1
  409. package/src/plugins/impl/vega/utils.ts +14 -5
  410. package/src/plugins/impl/vega/vega.css +2 -1
  411. package/src/plugins/layout/DownloadPlugin.tsx +1 -1
  412. package/src/plugins/layout/ImageComparisonPlugin.tsx +1 -3
  413. package/src/plugins/layout/LazyPlugin.tsx +1 -1
  414. package/src/plugins/layout/RoutesPlugin.tsx +1 -1
  415. package/src/plugins/layout/mermaid/mermaid.tsx +1 -1
  416. package/src/plugins/plugins.ts +1 -1
  417. package/src/plugins/stateless-plugin.ts +4 -2
  418. package/src/stories/data-explorer.stories.tsx +1 -1
  419. package/src/stories/dataframe.stories.tsx +1 -1
  420. package/src/stories/editor.stories.tsx +1 -1
  421. package/src/stories/select.stories.tsx +1 -1
  422. package/src/stories/switchable-multi-select.stories.tsx +1 -1
  423. package/src/utils/Logger.ts +1 -1
  424. package/src/utils/__tests__/arrays.test.ts +1 -1
  425. package/src/utils/__tests__/blob.test.ts +1 -1
  426. package/src/utils/__tests__/cell-urls.test.ts +24 -21
  427. package/src/utils/__tests__/dates.test.ts +1 -1
  428. package/src/utils/__tests__/errors.test.ts +1 -1
  429. package/src/utils/__tests__/filenames.test.ts +15 -14
  430. package/src/utils/__tests__/json-parser.test.ts +14 -21
  431. package/src/utils/__tests__/multi-map.test.ts +3 -3
  432. package/src/utils/__tests__/objects.test.ts +3 -3
  433. package/src/utils/__tests__/path.test.ts +34 -31
  434. package/src/utils/__tests__/urls.test.ts +19 -18
  435. package/src/utils/__tests__/versions.test.ts +5 -5
  436. package/src/utils/__tests__/waitForWs.test.ts +1 -1
  437. package/src/utils/arrays.ts +2 -2
  438. package/src/utils/assertNever.ts +1 -1
  439. package/src/utils/batch-requests.ts +2 -2
  440. package/src/utils/createReducer.ts +2 -2
  441. package/src/utils/id-tree.tsx +2 -2
  442. package/src/utils/idle.ts +1 -1
  443. package/src/utils/invariant.ts +1 -2
  444. package/src/utils/json/base64.ts +2 -5
  445. package/src/utils/maps.ts +1 -1
  446. package/src/utils/math.ts +0 -1
  447. package/src/utils/mime-types.ts +1 -1
  448. package/src/utils/multi-map.ts +1 -1
  449. package/src/utils/objects.ts +1 -1
  450. package/src/utils/once.ts +2 -2
  451. package/src/utils/staticImplements.ts +1 -1
  452. package/src/utils/storage/jotai.ts +1 -1
  453. package/src/utils/tracer.ts +3 -2
  454. package/dist/_basePickBy-QjOmBDRE.js +0 -110
  455. package/dist/_baseSet-xgn1IbGV.js +0 -27
  456. package/dist/architecture-7HQA4BMR-BRyVh_Za.js +0 -6
  457. package/dist/assets/__vite-browser-external-Us1ds95c.js +0 -1
  458. package/dist/dist-B0R_ZM4-.js +0 -6
  459. package/dist/dist-B4a9_9pj.js +0 -5
  460. package/dist/dist-BCSUKEwO.js +0 -5
  461. package/dist/dist-BONIDQq6.js +0 -5
  462. package/dist/dist-BYeRx2hb.js +0 -5
  463. package/dist/dist-D2Rk1j4R.js +0 -1381
  464. package/dist/dist-DZjX5TYv.js +0 -5
  465. package/dist/dist-Dkw9x6kc.js +0 -5
  466. package/dist/dist-Ds6UaXGR.js +0 -6
  467. package/dist/dist-KuEJ1Q53.js +0 -8
  468. package/dist/dist-S72WNyTZ.js +0 -5
  469. package/dist/dist-bTG-yssT.js +0 -5
  470. package/dist/dist-diF0sguc.js +0 -8
  471. package/dist/dist-mJ84BIgu.js +0 -8
  472. package/dist/dist-wSIhFWQz.js +0 -8
  473. package/dist/get-CqrzlV1v.js +0 -68
  474. package/dist/range-CYz5jI--.js +0 -17
  475. package/dist/stex-CZyTRGVB.js +0 -4
  476. package/dist/tooltip-DGHTbHl5.js +0 -404
  477. package/dist/useLifecycle-Dids8BPm.js +0 -173
  478. /package/dist/{dist-KZI_BHqV.js → dist-CxZvoNao.js} +0 -0
  479. /package/dist/{invariant-D4hPsZFI.js → invariant-e8eBgdux.js} +0 -0
  480. /package/dist/{isArrayLikeObject-C-hFPChh.js → isArrayLikeObject-LXbTYiBa.js} +0 -0
  481. /package/dist/{main-CvkAPtaq.js → main-XimWhSi_.js} +0 -0
  482. /package/dist/{purify.es-ukiMXY-F.js → purify.es-hTCfRGdl.js} +0 -0
  483. /package/dist/{react-dom-BKwCWYPW.js → react-dom-BSUuJjCR.js} +0 -0
  484. /package/dist/{stex-Ze8D4R_5.js → stex-D887Ylhf.js} +0 -0
@@ -13,6 +13,7 @@ import type {
13
13
  LspRestartRequest,
14
14
  LspRestartResponse,
15
15
  } from "@/core/network/types";
16
+ import { isWasm } from "@/core/wasm/utils";
16
17
  import { isAppConnected } from "@/core/websocket/connection-utils";
17
18
  import { useAsyncData } from "@/hooks/useAsyncData";
18
19
  import { useInterval } from "@/hooks/useInterval";
@@ -26,7 +27,7 @@ export const LspStatus: React.FC = () => {
26
27
  const setLspHealth = useSetAtom(lspHealthAtom);
27
28
 
28
29
  const { isFetching, data, refetch } = useAsyncData(async () => {
29
- if (!isAppConnected(connection)) {
30
+ if (isWasm() || !isAppConnected(connection)) {
30
31
  return null;
31
32
  }
32
33
 
@@ -28,7 +28,7 @@ export function createStorage(location: "left" | "bottom"): PanelGroupStorage {
28
28
  const parsed = schema.parse(JSON.parse(storedValue));
29
29
  return JSON.stringify(
30
30
  Objects.mapValues(parsed, (value) => {
31
- return value.reverse();
31
+ return value.toReversed();
32
32
  }),
33
33
  );
34
34
  } catch {
@@ -42,7 +42,7 @@ export function createStorage(location: "left" | "bottom"): PanelGroupStorage {
42
42
  const parsed = schema.parse(JSON.parse(value));
43
43
  value = JSON.stringify(
44
44
  Objects.mapValues(parsed, (value) => {
45
- return value.reverse();
45
+ return value.toReversed();
46
46
  }),
47
47
  );
48
48
  } catch {
@@ -964,7 +964,7 @@ export function generateDatabaseCode(
964
964
  ...generator.imports,
965
965
  ]);
966
966
 
967
- const lines = [...imports].sort();
967
+ const lines = [...imports].toSorted();
968
968
  lines.push("");
969
969
  const secrets = secretsContainer.formatSecrets();
970
970
  if (secrets) {
@@ -72,7 +72,7 @@ export const SecretsProvider = ({ children }: SecretsProviderProps) => {
72
72
  .map((provider) => provider.name);
73
73
 
74
74
  return {
75
- secretKeys: result.secrets.flatMap((secret) => secret.keys).sort(),
75
+ secretKeys: result.secrets.flatMap((secret) => secret.keys).toSorted(),
76
76
  providerNames: providerNames,
77
77
  };
78
78
  }, []);
@@ -214,7 +214,7 @@ export function generateStorageCode(
214
214
  }
215
215
 
216
216
  const allImports = new Set([...secrets.imports, ...result.imports]);
217
- const lines = [...allImports].sort();
217
+ const lines = [...allImports].toSorted();
218
218
  lines.push("");
219
219
  const secretsStr = secrets.formatSecrets();
220
220
  if (secretsStr) {
@@ -90,7 +90,7 @@ export const KeyboardShortcuts: React.FC = () => {
90
90
  },
91
91
  };
92
92
 
93
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
93
+ // oxlint-disable-next-line typescript/no-dynamic-delete
94
94
  delete newConfig.keymap.overrides[editingShortcut];
95
95
 
96
96
  setEditingShortcut(null);
@@ -1,6 +1,9 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { PopoverAnchor } from "@radix-ui/react-popover";
3
+ import { Popover as PopoverPrimitive } from "radix-ui";
4
+
5
+ const PopoverAnchor = PopoverPrimitive.Anchor;
6
+
4
7
  import { FilePenIcon } from "lucide-react";
5
8
  import { type JSX, useEffect, useRef, useState } from "react";
6
9
  import {
@@ -24,7 +24,7 @@ export const CellLinkList: React.FC<Props> = ({
24
24
  skipScroll,
25
25
  }) => {
26
26
  const cellIndex = useCellIds();
27
- const sortedCellIds = [...cellIds].sort((a, b) => {
27
+ const sortedCellIds = cellIds.toSorted((a, b) => {
28
28
  return cellIndex.inOrderIds.indexOf(a) - cellIndex.inOrderIds.indexOf(b);
29
29
  });
30
30
 
@@ -134,7 +134,7 @@ const mockRequestClient = MockRequestClient.create();
134
134
  // Helper to setup selection
135
135
  const setupSelection = () => {
136
136
  const { reducer, cellSelectionAtom } = selectionTesting;
137
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
137
+ // oxlint-disable-next-line typescript/no-explicit-any
138
138
  const dispatch = (action: any) => {
139
139
  store.set(cellSelectionAtom, (prev: CellSelectionState) =>
140
140
  reducer(prev, action),
@@ -106,7 +106,7 @@ export function useCellClipboard() {
106
106
 
107
107
  // Create new cells with the copied data before/after the current cell
108
108
  const currentCellId = cellId;
109
- const reversedCells = clipboardData.cells.reverse();
109
+ const reversedCells = clipboardData.cells.toReversed();
110
110
  for (const cell of reversedCells) {
111
111
  actions.createNewCell({
112
112
  cellId: currentCellId,
@@ -167,7 +167,7 @@ export function useMultiCellActionButtons(cellIds: CellId[]) {
167
167
  }
168
168
 
169
169
  // Move cells in the appropriate order to maintain relative positions
170
- const sortedCells = direction === "up" ? cellIds : [...cellIds].reverse();
170
+ const sortedCells = direction === "up" ? cellIds : cellIds.toReversed();
171
171
  sortedCells.forEach((cellId) => {
172
172
  moveCell({ cellId, before: direction === "up" });
173
173
  });
@@ -176,7 +176,7 @@ export function useMultiCellActionButtons(cellIds: CellId[]) {
176
176
 
177
177
  const sendSelectedCellsToTop = useEvent((cellIds: CellId[]) => {
178
178
  // Send in reverse order to maintain relative positions
179
- [...cellIds].reverse().forEach((cellId) => {
179
+ cellIds.toReversed().forEach((cellId) => {
180
180
  sendToTop({ cellId });
181
181
  });
182
182
  });
@@ -401,7 +401,7 @@ export function useCellNavigationProps(
401
401
  }
402
402
 
403
403
  // Move cells in the appropriate order to maintain relative positions
404
- [...cellIds].reverse().forEach((cellId) => {
404
+ cellIds.toReversed().forEach((cellId) => {
405
405
  actions.moveCell({ cellId, before: false });
406
406
  });
407
407
  return true;
@@ -480,7 +480,7 @@ export function useCellNavigationProps(
480
480
  }),
481
481
  "cell.sendToTop": addSingleHandler((cellIds) => {
482
482
  // Send in reverse order to maintain relative positions
483
- [...cellIds].reverse().forEach((cellId) => {
483
+ cellIds.toReversed().forEach((cellId) => {
484
484
  actions.sendToTop({ cellId });
485
485
  });
486
486
  return true;
@@ -614,7 +614,7 @@ export function useCellNavigationProps(
614
614
  if (isShortcutPressed(shortcut as HotkeyAction, evt)) {
615
615
  // If the handler is a function, it's a single-cell handler
616
616
  // and we only operate on the currently focused cell.
617
- if (handler instanceof Function) {
617
+ if (typeof handler === "function") {
618
618
  const success = handler(cellId);
619
619
  if (success) {
620
620
  evt.preventDefault();
@@ -704,7 +704,7 @@ const EditableCellComponent = ({
704
704
  <a
705
705
  href="https://links.marimo.app/reusable-definitions"
706
706
  target="_blank"
707
- rel="noopener"
707
+ rel="noreferrer"
708
708
  >
709
709
  <SquareFunctionIcon
710
710
  size={16}
@@ -46,7 +46,7 @@ interface Props {
46
46
  valueTypes?: "json" | "python";
47
47
  }
48
48
 
49
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ // oxlint-disable-next-line typescript/no-explicit-any
50
50
  const CopyButton: React.FC<DataItemProps<any>> = ({ value }) => {
51
51
  const skipCopy =
52
52
  typeof value === "string" &&
@@ -83,13 +83,13 @@ const CopyButton: React.FC<DataItemProps<any>> = ({ value }) => {
83
83
  );
84
84
  };
85
85
 
86
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
+ // oxlint-disable-next-line typescript/no-explicit-any
87
87
  const JSONCopyButton: React.FC<DataItemProps<any>> = (props) => {
88
88
  // if
89
89
  return <CopyButton {...props} value={JSON.stringify(props.value, null, 2)} />;
90
90
  };
91
91
 
92
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
92
+ // oxlint-disable-next-line typescript/no-explicit-any
93
93
  const PyCopyButton: React.FC<DataItemProps<any>> = (props) => {
94
94
  return <CopyButton {...props} value={getCopyValue(props.value)} />;
95
95
  };
@@ -233,7 +233,7 @@ const LEAF_RENDERERS: Record<string, LeafRenderer> = {
233
233
  },
234
234
  };
235
235
 
236
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
236
+ // oxlint-disable-next-line typescript/no-explicit-any
237
237
  const MIME_TYPES: DataType<any>[] = Object.entries(LEAF_RENDERERS).map(
238
238
  ([leafType, render]) => ({
239
239
  is: (value) => typeof value === "string" && value.startsWith(leafType),
@@ -329,7 +329,7 @@ const PYTHON_VALUE_TYPES = [
329
329
  URL_TYPE,
330
330
  OBJECT_TYPE,
331
331
  FALLBACK_RENDERER,
332
- ].reverse();
332
+ ].toReversed();
333
333
  // Last one wins, so we reverse the array.
334
334
 
335
335
  const JSON_VALUE_TYPES = [
@@ -339,7 +339,7 @@ const JSON_VALUE_TYPES = [
339
339
  JSON_NONE_TYPE,
340
340
  JSON_OBJECT_TYPE,
341
341
  JSON_FALLBACK_RENDERER,
342
- ].reverse();
342
+ ].toReversed();
343
343
 
344
344
  function leafData(leaf: string): string {
345
345
  return leafDataAndMimeType(leaf)[0];
@@ -13,7 +13,7 @@ export interface Cursor {
13
13
  export class TerminalBuffer {
14
14
  private lines: string[] = [""];
15
15
  private cursor: Cursor = { row: 0, col: 0 };
16
- // biome-ignore lint/suspicious/noControlCharactersInRegex: Needed for ANSI parsing
16
+ // oxlint-ignore-next-line no-control-regex -- Needed for ANSI escape sequence parsing
17
17
  private static readonly ESCAPE_REGEX = /\u001B\[([0-9;]*)([A-DJKH])/u;
18
18
 
19
19
  /** Ensure the internal lines array is large enough. */
@@ -185,7 +185,7 @@ export class TerminalBuffer {
185
185
  */
186
186
  export class AnsiParser {
187
187
  // Matches both CSI sequences (ESC[...letter) and other escape sequences like character set selection (ESC(B)
188
- // biome-ignore lint/suspicious/noControlCharactersInRegex: Needed for ANSI parsing
188
+ // oxlint-ignore-next-line no-control-regex -- Needed for ANSI parsing
189
189
  private ESC_REGEX = /\u001B(?:\[[0-9;]*[A-Za-z]|\([0-9A-Za-z])/gu;
190
190
 
191
191
  parse(input: string): { type: "text" | "escape"; value: string }[] {
@@ -167,7 +167,7 @@ const ConsoleOutputInternal = (props: Props): React.ReactNode => {
167
167
  return null;
168
168
  }
169
169
 
170
- const reversedOutputs = [...consoleOutputs].reverse();
170
+ const reversedOutputs = consoleOutputs.toReversed();
171
171
  const isPdb = reversedOutputs.some(
172
172
  (output) =>
173
173
  typeof output.data === "string" && output.data.includes("(Pdb)"),
@@ -234,7 +234,7 @@ const ConsoleOutputInternal = (props: Props): React.ReactNode => {
234
234
  data-testid="console-output-area"
235
235
  ref={ref}
236
236
  {...selectAllProps}
237
- // biome-ignore lint/a11y/noNoninteractiveTabindex: Needed to capture keypress events
237
+ // oxlint-ignore-next-line jsx-a11y/no-noninteractive-tabindex -- Needed to capture keypress events
238
238
  tabIndex={0}
239
239
  className={cn(
240
240
  "console-output-area overflow-hidden rounded-b-lg flex flex-col-reverse w-full gap-1 focus:outline-hidden",
@@ -69,7 +69,7 @@ CellsRenderer.displayName = "CellsRenderer";
69
69
  interface PluginCellRendererProps extends PropsWithChildren<Props> {
70
70
  appConfig: AppConfig;
71
71
  mode: AppMode;
72
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
72
+ // oxlint-disable-next-line typescript/no-explicit-any
73
73
  plugin: ICellRendererPlugin<any, any>;
74
74
  layoutData: Partial<Record<LayoutType, LayoutData>>;
75
75
  finalLayout: LayoutType;
@@ -329,7 +329,7 @@ export const GridLayoutRenderer: React.FC<Props> = ({
329
329
  <div
330
330
  key={cell.id}
331
331
  draggable={true}
332
- // eslint-disable-next-line react/no-unknown-property
332
+ // oxlint-disable-next-line react/no-unknown-property
333
333
  unselectable="on"
334
334
  data-cell-id={cell.id}
335
335
  // Firefox requires some kind of initialization which we can do by adding this attribute
@@ -7,7 +7,7 @@ import type { ICellRendererPlugin, LayoutType } from "./types";
7
7
  import { VerticalLayoutPlugin } from "./vertical-layout/vertical-layout";
8
8
 
9
9
  // If more renderers are added, we may want to consider lazy loading them.
10
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ // oxlint-disable-next-line typescript/no-explicit-any
11
11
  export const cellRendererPlugins: ICellRendererPlugin<any, any>[] = [
12
12
  GridLayoutPlugin,
13
13
  SlidesLayoutPlugin,
@@ -1,11 +1,11 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-empty-interface */
2
+ /* oxlint-disable typescript/no-empty-object-type */
3
3
 
4
4
  /**
5
5
  * The serialized form of a slides layout.
6
6
  * This must be backwards-compatible as it is stored on the user's disk.
7
7
  */
8
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
8
+ // oxlint-disable-next-line typescript/consistent-type-definitions
9
9
  export type SerializedSlidesLayout = {};
10
10
 
11
11
  export interface SlidesLayout extends SerializedSlidesLayout {
@@ -110,9 +110,9 @@ describe("useFocusFirstEditor", () => {
110
110
  expect(querySelectorSpy).toHaveBeenCalledWith(
111
111
  '[data-cell-name="testCell"]',
112
112
  );
113
- // eslint-disable-next-line @typescript-eslint/unbound-method
113
+ // oxlint-disable-next-line typescript/unbound-method
114
114
  expect(mockElement.scrollIntoView).toHaveBeenCalled();
115
- // eslint-disable-next-line @typescript-eslint/unbound-method
115
+ // oxlint-disable-next-line typescript/unbound-method
116
116
  expect(mockElement.focus).toHaveBeenCalled();
117
117
  expect(mockEditor.focus).toHaveBeenCalled();
118
118
 
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* oxlint-disable typescript/no-explicit-any */
3
3
  import { describe, expect, it } from "vitest";
4
4
  import type { OutputMessage } from "@/core/kernel/messages";
5
5
  import { groupCellsByColumn, shouldHideCode } from "../vertical-layout";
@@ -311,18 +311,17 @@ const ActionButtons: React.FC<{
311
311
  );
312
312
  };
313
313
 
314
- interface VerticalCellProps
315
- extends Pick<
316
- CellRuntimeState,
317
- | "output"
318
- | "consoleOutputs"
319
- | "status"
320
- | "stopped"
321
- | "errored"
322
- | "interrupted"
323
- | "staleInputs"
324
- | "runStartTimestamp"
325
- > {
314
+ interface VerticalCellProps extends Pick<
315
+ CellRuntimeState,
316
+ | "output"
317
+ | "consoleOutputs"
318
+ | "status"
319
+ | "stopped"
320
+ | "errored"
321
+ | "interrupted"
322
+ | "staleInputs"
323
+ | "runStartTimestamp"
324
+ > {
326
325
  cellOutputArea: "above" | "below";
327
326
  cellId: CellId;
328
327
  config: CellConfig;
@@ -483,7 +482,7 @@ export function groupCellsByColumn(
483
482
  });
484
483
 
485
484
  // Sort columns by index
486
- return [...cellsByColumn.entries()].sort(([a], [b]) => a - b);
485
+ return [...cellsByColumn.entries()].toSorted(([a], [b]) => a - b);
487
486
  }
488
487
 
489
488
  /**
@@ -221,7 +221,9 @@ export const FindReplace: React.FC = () => {
221
221
  variant="outline"
222
222
  className="h-6 text-xs"
223
223
  onClick={() => {
224
- replaceNext() && resetMatches();
224
+ if (replaceNext()) {
225
+ resetMatches();
226
+ }
225
227
  }}
226
228
  disabled={state.findText === ""}
227
229
  >
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* oxlint-disable typescript/no-explicit-any */
3
3
 
4
4
  import { PlusIcon, RefreshCcw, Trash2Icon } from "lucide-react";
5
5
  import React from "react";
@@ -35,7 +35,7 @@ export interface FieldOptions {
35
35
  optionRegex?: string;
36
36
  }
37
37
 
38
- // eslint-disable-next-line @typescript-eslint/no-redeclare
38
+ // oxlint-disable-next-line typescript/no-redeclare
39
39
  export const FieldOptions = {
40
40
  of(options: FieldOptions): string {
41
41
  return JSON.stringify(options);
@@ -83,7 +83,7 @@ const GalleryPage: React.FC = () => {
83
83
  thumbnailUrl,
84
84
  };
85
85
  })
86
- .sort((a, b) => a.relativePath.localeCompare(b.relativePath));
86
+ .toSorted((a, b) => a.relativePath.localeCompare(b.relativePath));
87
87
  }, [workspace?.files, workspace?.root]);
88
88
 
89
89
  const filteredFiles = useMemo(() => {
@@ -1,6 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable react/jsx-no-comment-textnodes */
3
- /* eslint-disable react/jsx-no-target-blank */
2
+ /* oxlint-disable react/jsx-no-comment-textnodes */
3
+ /* oxlint-disable react/jsx-no-target-blank */
4
4
 
5
5
  import { useAtomValue } from "jotai";
6
6
  import { CopyIcon, DownloadIcon } from "lucide-react";
@@ -147,9 +147,8 @@ describe("download-file snippet", () => {
147
147
  });
148
148
 
149
149
  it("obstore gcs backend", () => {
150
- expect(
151
- downloadSnippet.getCode(makeCtx({ protocol: "gcs" })),
152
- ).toMatchInlineSnapshot(`
150
+ expect(downloadSnippet.getCode(makeCtx({ protocol: "gcs" })))
151
+ .toMatchInlineSnapshot(`
153
152
  "from datetime import timedelta
154
153
  from obstore import sign
155
154
 
@@ -162,9 +161,8 @@ describe("download-file snippet", () => {
162
161
  });
163
162
 
164
163
  it("obstore cloudflare backend", () => {
165
- expect(
166
- downloadSnippet.getCode(makeCtx({ protocol: "cloudflare" })),
167
- ).toMatchInlineSnapshot(`
164
+ expect(downloadSnippet.getCode(makeCtx({ protocol: "cloudflare" })))
165
+ .toMatchInlineSnapshot(`
168
166
  "from datetime import timedelta
169
167
  from obstore import sign
170
168
 
@@ -143,7 +143,7 @@ const TerminalComponent: React.FC<TerminalComponentProps> = ({
143
143
  const terminalRef = useRef<HTMLDivElement>(null);
144
144
  const wsRef = useRef<WebSocket | null>(null);
145
145
 
146
- // eslint-disable-next-line react/hook-use-state
146
+ // oxlint-disable-next-line react/hook-use-state
147
147
  const [{ terminal, fitAddon, searchAddon }] = useState(() => {
148
148
  // Create a new terminal instance
149
149
  const term = new Terminal({
@@ -300,7 +300,7 @@ const TerminalComponent: React.FC<TerminalComponentProps> = ({
300
300
  return () => {
301
301
  // noop
302
302
  };
303
- // eslint-disable-next-line react-hooks/exhaustive-deps
303
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
304
304
  }, [initialized]);
305
305
 
306
306
  // Process pending commands when terminal is ready
@@ -335,7 +335,7 @@ const TerminalComponent: React.FC<TerminalComponentProps> = ({
335
335
  }
336
336
 
337
337
  return;
338
- // eslint-disable-next-line react-hooks/exhaustive-deps
338
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
339
339
  }, [visible]);
340
340
 
341
341
  // On mount
@@ -373,7 +373,7 @@ const TerminalComponent: React.FC<TerminalComponentProps> = ({
373
373
  return () => {
374
374
  abortController.abort();
375
375
  };
376
- // eslint-disable-next-line react-hooks/exhaustive-deps
376
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
377
377
  }, []);
378
378
 
379
379
  return (
@@ -5,36 +5,36 @@ import { formatChartTime } from "./utils";
5
5
  describe("formatChartTime", () => {
6
6
  beforeAll(() => {
7
7
  // Mock Date to always use UTC
8
- vi.spyOn(global.Date.prototype, "getFullYear").mockImplementation(function (
9
- this: Date,
10
- ) {
11
- return this.getUTCFullYear();
12
- });
13
- vi.spyOn(global.Date.prototype, "getMonth").mockImplementation(function (
14
- this: Date,
15
- ) {
16
- return this.getUTCMonth();
17
- });
18
- vi.spyOn(global.Date.prototype, "getDate").mockImplementation(function (
19
- this: Date,
20
- ) {
21
- return this.getUTCDate();
22
- });
23
- vi.spyOn(global.Date.prototype, "getHours").mockImplementation(function (
24
- this: Date,
25
- ) {
26
- return this.getUTCHours();
27
- });
28
- vi.spyOn(global.Date.prototype, "getMinutes").mockImplementation(function (
29
- this: Date,
30
- ) {
31
- return this.getUTCMinutes();
32
- });
33
- vi.spyOn(global.Date.prototype, "getSeconds").mockImplementation(function (
34
- this: Date,
35
- ) {
36
- return this.getUTCSeconds();
37
- });
8
+ vi.spyOn(global.Date.prototype, "getFullYear").mockImplementation(
9
+ function (this: Date) {
10
+ return this.getUTCFullYear();
11
+ },
12
+ );
13
+ vi.spyOn(global.Date.prototype, "getMonth").mockImplementation(
14
+ function (this: Date) {
15
+ return this.getUTCMonth();
16
+ },
17
+ );
18
+ vi.spyOn(global.Date.prototype, "getDate").mockImplementation(
19
+ function (this: Date) {
20
+ return this.getUTCDate();
21
+ },
22
+ );
23
+ vi.spyOn(global.Date.prototype, "getHours").mockImplementation(
24
+ function (this: Date) {
25
+ return this.getUTCHours();
26
+ },
27
+ );
28
+ vi.spyOn(global.Date.prototype, "getMinutes").mockImplementation(
29
+ function (this: Date) {
30
+ return this.getUTCMinutes();
31
+ },
32
+ );
33
+ vi.spyOn(global.Date.prototype, "getSeconds").mockImplementation(
34
+ function (this: Date) {
35
+ return this.getUTCSeconds();
36
+ },
37
+ );
38
38
  vi.spyOn(global.Date.prototype, "getMilliseconds").mockImplementation(
39
39
  function (this: Date) {
40
40
  return this.getUTCMilliseconds();
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import * as AccordionPrimitive from "@radix-ui/react-accordion";
4
3
  import { ChevronDown } from "lucide-react";
4
+ import { Accordion as AccordionPrimitive } from "radix-ui";
5
5
  import * as React from "react";
6
6
 
7
7
  import { cn } from "@/utils/cn";
@@ -1,6 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
3
+ import { AlertDialog as AlertDialogPrimitive } from "radix-ui";
4
4
  import * as React from "react";
5
5
  import { buttonVariants } from "@/components/ui/button";
6
6
  import { StyleNamespace } from "@/theme/namespace";
@@ -29,7 +29,8 @@ const badgeVariants = cva(
29
29
  );
30
30
 
31
31
  export interface BadgeProps
32
- extends React.HTMLAttributes<HTMLDivElement>,
32
+ extends
33
+ React.HTMLAttributes<HTMLDivElement>,
33
34
  VariantProps<typeof badgeVariants> {}
34
35
 
35
36
  const Badge = ({ className, variant, ...props }: BadgeProps) => {
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { Slot } from "@radix-ui/react-slot";
4
3
  import { cva, type VariantProps } from "class-variance-authority";
4
+ import { Slot as SlotPrimitive } from "radix-ui";
5
5
  import * as React from "react";
6
6
  import { parseShortcut } from "@/core/hotkeys/shortcuts";
7
7
  import { useEventListener } from "@/hooks/useEventListener";
@@ -92,7 +92,8 @@ const buttonVariants = cva(
92
92
  );
93
93
 
94
94
  export interface ButtonProps
95
- extends React.ButtonHTMLAttributes<HTMLButtonElement>,
95
+ extends
96
+ React.ButtonHTMLAttributes<HTMLButtonElement>,
96
97
  Omit<VariantProps<typeof buttonVariants>, "disabled"> {
97
98
  asChild?: boolean;
98
99
  keyboardShortcut?: string;
@@ -107,7 +108,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
107
108
 
108
109
  React.useImperativeHandle(
109
110
  ref,
110
- // eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style
111
+ // oxlint-disable-next-line typescript/non-nullable-type-assertion-style
111
112
  () => buttonRef.current as HTMLButtonElement,
112
113
  );
113
114
 
@@ -135,7 +136,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
135
136
 
136
137
  useEventListener(document, "keydown", handleKeyPress);
137
138
 
138
- const Comp = asChild ? Slot : "button";
139
+ const Comp = asChild ? SlotPrimitive.Slot : "button";
139
140
  return (
140
141
  <Comp
141
142
  className={cn(
@@ -183,8 +183,9 @@ const Calendar = <T extends AriaDateValue>({
183
183
  );
184
184
  };
185
185
 
186
- interface RangeCalendarProps<T extends AriaDateValue>
187
- extends AriaRangeCalendarProps<T> {
186
+ interface RangeCalendarProps<
187
+ T extends AriaDateValue,
188
+ > extends AriaRangeCalendarProps<T> {
188
189
  errorMessage?: string;
189
190
  }
190
191
 
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
4
3
  import { Check } from "lucide-react";
4
+ import { Checkbox as CheckboxPrimitive } from "radix-ui";
5
5
  import * as React from "react";
6
6
 
7
7
  import { cn } from "@/utils/cn";