@marimo-team/islands 0.22.1-dev4 → 0.22.1-dev40

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 (483) 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 +3203 -3105
  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 +12 -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 +42 -13
  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 +16 -11
  181. package/src/components/data-table/focus-row/types.ts +4 -3
  182. package/src/components/data-table/loading-table.tsx +5 -2
  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/row-viewer-panel/row-viewer.tsx +1 -1
  189. package/src/components/data-table/table-explorer-panel/table-explorer-panel.tsx +2 -2
  190. package/src/components/dependency-graph/dependency-graph-tree.tsx +1 -1
  191. package/src/components/editor/__tests__/data-attributes.test.tsx +93 -94
  192. package/src/components/editor/__tests__/dynamic-favicon.test.tsx +1 -1
  193. package/src/components/editor/actions/name-cell-input.tsx +4 -2
  194. package/src/components/editor/actions/pair-with-agent-modal.tsx +142 -0
  195. package/src/components/editor/actions/useCellActionButton.tsx +4 -2
  196. package/src/components/editor/actions/useNotebookActions.tsx +10 -0
  197. package/src/components/editor/ai/add-cell-with-ai.tsx +2 -1
  198. package/src/components/editor/ai/ai-completion-editor.tsx +1 -1
  199. package/src/components/editor/app-container.tsx +1 -1
  200. package/src/components/editor/cell/CellStatus.tsx +4 -5
  201. package/src/components/editor/cell/cell-context-menu.tsx +4 -2
  202. package/src/components/editor/cell/code/cell-editor.tsx +3 -2
  203. package/src/components/editor/cell/toolbar.tsx +2 -1
  204. package/src/components/editor/chrome/components/contribute-snippet-button.tsx +4 -1
  205. package/src/components/editor/chrome/components/feedback-button.tsx +4 -1
  206. package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +1 -1
  207. package/src/components/editor/chrome/panels/empty-state.tsx +1 -0
  208. package/src/components/editor/chrome/panels/file-explorer-panel.tsx +0 -10
  209. package/src/components/editor/chrome/panels/snippets-panel.tsx +1 -1
  210. package/src/components/editor/chrome/panels/write-secret-modal.tsx +1 -1
  211. package/src/components/editor/chrome/wrapper/app-chrome.tsx +4 -1
  212. package/src/components/editor/chrome/wrapper/footer-items/lsp-status.tsx +2 -1
  213. package/src/components/editor/chrome/wrapper/storage.ts +2 -2
  214. package/src/components/editor/connections/database/as-code.ts +1 -1
  215. package/src/components/editor/connections/form-renderers.tsx +1 -1
  216. package/src/components/editor/connections/storage/as-code.ts +1 -1
  217. package/src/components/editor/controls/keyboard-shortcuts.tsx +1 -1
  218. package/src/components/editor/header/filename-input.tsx +4 -1
  219. package/src/components/editor/links/cell-link-list.tsx +1 -1
  220. package/src/components/editor/navigation/__tests__/navigation.test.ts +1 -1
  221. package/src/components/editor/navigation/clipboard.ts +1 -1
  222. package/src/components/editor/navigation/multi-cell-action-toolbar.tsx +2 -2
  223. package/src/components/editor/navigation/navigation.ts +3 -3
  224. package/src/components/editor/notebook-cell.tsx +1 -1
  225. package/src/components/editor/output/JsonOutput.tsx +6 -6
  226. package/src/components/editor/output/ansi-reduce.ts +2 -2
  227. package/src/components/editor/output/console/ConsoleOutput.tsx +2 -2
  228. package/src/components/editor/renderers/cells-renderer.tsx +1 -1
  229. package/src/components/editor/renderers/grid-layout/grid-layout.tsx +1 -1
  230. package/src/components/editor/renderers/plugins.ts +1 -1
  231. package/src/components/editor/renderers/slides-layout/types.ts +2 -2
  232. package/src/components/editor/renderers/vertical-layout/__tests__/useFocusFirstEditor.test.ts +2 -2
  233. package/src/components/editor/renderers/vertical-layout/__tests__/vertical-layout.test.ts +1 -1
  234. package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +12 -13
  235. package/src/components/find-replace/find-replace.tsx +3 -1
  236. package/src/components/forms/form.tsx +1 -1
  237. package/src/components/forms/options.ts +1 -1
  238. package/src/components/pages/gallery-page.tsx +1 -1
  239. package/src/components/static-html/static-banner.tsx +2 -2
  240. package/src/components/storage/__tests__/storage-snippets.test.ts +4 -6
  241. package/src/components/terminal/terminal.tsx +4 -4
  242. package/src/components/tracing/tracing.test.tsx +30 -30
  243. package/src/components/ui/accordion.tsx +1 -1
  244. package/src/components/ui/alert-dialog.tsx +1 -1
  245. package/src/components/ui/badge.tsx +2 -1
  246. package/src/components/ui/button.tsx +5 -4
  247. package/src/components/ui/calendar.tsx +3 -2
  248. package/src/components/ui/checkbox.tsx +1 -1
  249. package/src/components/ui/combobox.tsx +2 -1
  250. package/src/components/ui/command.tsx +5 -2
  251. package/src/components/ui/context-menu.tsx +1 -1
  252. package/src/components/ui/date-input.tsx +7 -6
  253. package/src/components/ui/date-picker.tsx +6 -4
  254. package/src/components/ui/dialog.tsx +1 -1
  255. package/src/components/ui/draggable-popover.tsx +1 -1
  256. package/src/components/ui/dropdown-menu.tsx +2 -1
  257. package/src/components/ui/field.tsx +1 -2
  258. package/src/components/ui/form.tsx +4 -5
  259. package/src/components/ui/fullscreen.tsx +4 -1
  260. package/src/components/ui/label.tsx +1 -1
  261. package/src/components/ui/navigation.tsx +1 -1
  262. package/src/components/ui/popover.tsx +1 -1
  263. package/src/components/ui/progress.tsx +4 -3
  264. package/src/components/ui/query-param-preserving-link.tsx +4 -2
  265. package/src/components/ui/radio-group.tsx +1 -1
  266. package/src/components/ui/range-slider.tsx +1 -1
  267. package/src/components/ui/scroll-area.tsx +1 -1
  268. package/src/components/ui/select.tsx +1 -1
  269. package/src/components/ui/sheet.tsx +3 -2
  270. package/src/components/ui/slider.tsx +1 -1
  271. package/src/components/ui/switch.tsx +1 -1
  272. package/src/components/ui/tabs.tsx +1 -1
  273. package/src/components/ui/textarea.tsx +1 -2
  274. package/src/components/ui/toast.tsx +1 -1
  275. package/src/components/ui/toggle.tsx +1 -1
  276. package/src/components/ui/tooltip.tsx +1 -1
  277. package/src/components/variables/variables-table.tsx +1 -1
  278. package/src/core/ai/context/providers/__tests__/datasource.test.ts +1 -1
  279. package/src/core/ai/context/providers/__tests__/error.test.ts +1 -1
  280. package/src/core/ai/context/providers/__tests__/variable.test.ts +1 -1
  281. package/src/core/ai/context/providers/cell-output.ts +1 -2
  282. package/src/core/ai/context/registry.ts +2 -2
  283. package/src/core/ai/tools/edit-notebook-tool.ts +4 -3
  284. package/src/core/ai/tools/registry.ts +1 -1
  285. package/src/core/ai/tools/run-cells-tool.ts +4 -3
  286. package/src/core/cells/__tests__/add-missing-import.test.ts +23 -22
  287. package/src/core/cells/__tests__/cell.test.ts +14 -13
  288. package/src/core/cells/__tests__/cells.test.ts +2 -2
  289. package/src/core/cells/__tests__/scrollCellIntoView.test.ts +1 -1
  290. package/src/core/cells/__tests__/session.test.ts +1 -1
  291. package/src/core/cells/__tests__/utils.test.ts +1 -1
  292. package/src/core/cells/cells.ts +2 -2
  293. package/src/core/cells/ids.ts +1 -1
  294. package/src/core/cells/logs.ts +1 -1
  295. package/src/core/codemirror/ai/request.ts +1 -1
  296. package/src/core/codemirror/cells/__tests__/extensions.test.ts +15 -17
  297. package/src/core/codemirror/cells/traceback-decorations.ts +1 -1
  298. package/src/core/codemirror/copilot/__tests__/language-server.test.ts +1 -1
  299. package/src/core/codemirror/copilot/__tests__/transport.test.ts +129 -3
  300. package/src/core/codemirror/copilot/client.ts +9 -2
  301. package/src/core/codemirror/copilot/getCodes.ts +1 -1
  302. package/src/core/codemirror/copilot/language-server.ts +12 -1
  303. package/src/core/codemirror/copilot/transport.ts +34 -8
  304. package/src/core/codemirror/copilot/types.ts +1 -1
  305. package/src/core/codemirror/facet.ts +1 -1
  306. package/src/core/codemirror/language/__tests__/sql.test.ts +4 -4
  307. package/src/core/codemirror/language/languages/markdown.ts +1 -3
  308. package/src/core/codemirror/language/languages/python.ts +4 -0
  309. package/src/core/codemirror/language/languages/sql/completion-builder.ts +1 -1
  310. package/src/core/codemirror/language/languages/sql/completion-sources.tsx +4 -6
  311. package/src/core/codemirror/language/languages/sql/sql.ts +1 -3
  312. package/src/core/codemirror/language/metadata.ts +1 -1
  313. package/src/core/codemirror/language/panel/sql.tsx +4 -1
  314. package/src/core/codemirror/language/types.ts +1 -1
  315. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +1 -1
  316. package/src/core/codemirror/lsp/notebook-lsp.ts +1 -1
  317. package/src/core/codemirror/misc/__tests__/dnd.test.ts +1 -1
  318. package/src/core/codemirror/reactive-references/__tests__/analyzer.test.ts +28 -42
  319. package/src/core/codemirror/rtc/loro/awareness.ts +1 -1
  320. package/src/core/config/__tests__/config-schema.test.ts +2 -6
  321. package/src/core/config/config-schema.ts +0 -1
  322. package/src/core/config/feature-flag.tsx +1 -3
  323. package/src/core/datasets/data-source-connections.ts +4 -2
  324. package/src/core/datasets/state.ts +1 -1
  325. package/src/core/dom/__tests__/htmlUtils.test.ts +8 -14
  326. package/src/core/dom/__tests__/outline.test.ts +2 -3
  327. package/src/core/dom/outline.ts +1 -1
  328. package/src/core/edit-app.tsx +4 -1
  329. package/src/core/export/__tests__/hooks.test.ts +1 -1
  330. package/src/core/hotkeys/__tests__/hotkeys.test.ts +1 -1
  331. package/src/core/hotkeys/shortcuts.ts +1 -1
  332. package/src/core/islands/__tests__/bridge.test.ts +2 -2
  333. package/src/core/islands/__tests__/parse.test.ts +8 -7
  334. package/src/core/islands/bridge.ts +2 -2
  335. package/src/core/islands/components/output-wrapper.tsx +1 -1
  336. package/src/core/islands/parse.ts +1 -1
  337. package/src/core/lsp/__tests__/transport.test.ts +1 -1
  338. package/src/core/network/CachingRequestRegistry.ts +1 -1
  339. package/src/core/network/DeferredRequestRegistry.ts +1 -1
  340. package/src/core/network/__tests__/requests-network.test.ts +1 -1
  341. package/src/core/network/api.ts +2 -2
  342. package/src/core/network/requests-lazy.ts +1 -1
  343. package/src/core/network/requests-toasting.tsx +1 -1
  344. package/src/core/runtime/runtime.ts +1 -0
  345. package/src/core/saving/__tests__/filename.test.ts +7 -6
  346. package/src/core/static/__tests__/download-html.test.ts +16 -15
  347. package/src/core/static/__tests__/files.test.ts +30 -28
  348. package/src/core/static/files.ts +1 -1
  349. package/src/core/vscode/vscode-bindings.ts +1 -1
  350. package/src/core/wasm/bridge.ts +3 -3
  351. package/src/core/wasm/worker/tracer.ts +1 -1
  352. package/src/core/websocket/useWebSocket.tsx +5 -3
  353. package/src/css/app/Cell.css +25 -1
  354. package/src/css/globals.css +18 -16
  355. package/src/css/table.css +17 -0
  356. package/src/custom.d.ts +1 -1
  357. package/src/hooks/__tests__/useDuplicateShortcuts.test.ts +3 -3
  358. package/src/hooks/debug.ts +3 -3
  359. package/src/hooks/useDebounce.ts +1 -1
  360. package/src/hooks/useEventListener.ts +1 -1
  361. package/src/hooks/useHotkey.ts +1 -1
  362. package/src/hooks/useLifecycle.ts +2 -2
  363. package/src/hooks/useNonce.ts +1 -1
  364. package/src/hooks/useResizeObserver.ts +2 -2
  365. package/src/main.tsx +1 -1
  366. package/src/plugins/core/BadPlugin.tsx +7 -6
  367. package/src/plugins/core/RenderHTML.tsx +3 -3
  368. package/src/plugins/core/__test__/registerReactComponent.test.ts +1 -1
  369. package/src/plugins/core/registerReactComponent.tsx +4 -4
  370. package/src/plugins/core/rpc.ts +1 -1
  371. package/src/plugins/impl/CheckboxPlugin.tsx +4 -1
  372. package/src/plugins/impl/DataEditorPlugin.tsx +8 -3
  373. package/src/plugins/impl/DataTablePlugin.tsx +6 -2
  374. package/src/plugins/impl/FileBrowserPlugin.tsx +1 -1
  375. package/src/plugins/impl/FormPlugin.tsx +2 -3
  376. package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +4 -1
  377. package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +1 -1
  378. package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +43 -15
  379. package/src/plugins/impl/anywidget/AnyWidgetPlugin.tsx +3 -12
  380. package/src/plugins/impl/anywidget/__tests__/model.test.ts +2 -2
  381. package/src/plugins/impl/anywidget/model.ts +1 -1
  382. package/src/plugins/impl/anywidget/types.ts +2 -2
  383. package/src/plugins/impl/anywidget/widget-binding.ts +1 -1
  384. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
  385. package/src/plugins/impl/chat/chat-ui.tsx +5 -2
  386. package/src/plugins/impl/data-editor/glide-data-editor.tsx +2 -2
  387. package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +2 -2
  388. package/src/plugins/impl/data-explorer/components/query-form.tsx +1 -1
  389. package/src/plugins/impl/data-explorer/functions/function.ts +1 -1
  390. package/src/plugins/impl/data-explorer/queries/types.ts +1 -1
  391. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -1
  392. package/src/plugins/impl/data-frames/forms/__tests__/form.test.tsx +7 -9
  393. package/src/plugins/impl/data-frames/forms/renderers.tsx +1 -1
  394. package/src/plugins/impl/data-frames/utils/operators.ts +1 -1
  395. package/src/plugins/impl/matplotlib/MatplotlibPlugin.tsx +1 -1
  396. package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +1 -1
  397. package/src/plugins/impl/panel/PanelPlugin.tsx +2 -2
  398. package/src/plugins/impl/plotly/Plot.tsx +3 -3
  399. package/src/plugins/impl/plotly/PlotlyPlugin.tsx +65 -103
  400. package/src/plugins/impl/plotly/__tests__/PlotlyPlugin.test.tsx +114 -0
  401. package/src/plugins/impl/plotly/__tests__/selection.test.ts +199 -0
  402. package/src/plugins/impl/plotly/selection.ts +333 -0
  403. package/src/plugins/impl/vega/__tests__/make-selectable.test.ts +13 -14
  404. package/src/plugins/impl/vega/__tests__/utils.test.ts +68 -0
  405. package/src/plugins/impl/vega/batched.ts +1 -1
  406. package/src/plugins/impl/vega/make-selectable.ts +3 -3
  407. package/src/plugins/impl/vega/types.ts +1 -1
  408. package/src/plugins/impl/vega/utils.ts +14 -5
  409. package/src/plugins/impl/vega/vega.css +2 -1
  410. package/src/plugins/layout/DownloadPlugin.tsx +1 -1
  411. package/src/plugins/layout/ImageComparisonPlugin.tsx +1 -3
  412. package/src/plugins/layout/LazyPlugin.tsx +1 -1
  413. package/src/plugins/layout/RoutesPlugin.tsx +1 -1
  414. package/src/plugins/layout/mermaid/mermaid.tsx +1 -1
  415. package/src/plugins/plugins.ts +1 -1
  416. package/src/plugins/stateless-plugin.ts +4 -2
  417. package/src/stories/data-explorer.stories.tsx +1 -1
  418. package/src/stories/dataframe.stories.tsx +1 -1
  419. package/src/stories/editor.stories.tsx +1 -1
  420. package/src/stories/select.stories.tsx +1 -1
  421. package/src/stories/switchable-multi-select.stories.tsx +1 -1
  422. package/src/utils/Logger.ts +1 -1
  423. package/src/utils/__tests__/arrays.test.ts +1 -1
  424. package/src/utils/__tests__/blob.test.ts +1 -1
  425. package/src/utils/__tests__/cell-urls.test.ts +24 -21
  426. package/src/utils/__tests__/dates.test.ts +1 -1
  427. package/src/utils/__tests__/errors.test.ts +1 -1
  428. package/src/utils/__tests__/filenames.test.ts +15 -14
  429. package/src/utils/__tests__/json-parser.test.ts +14 -21
  430. package/src/utils/__tests__/multi-map.test.ts +3 -3
  431. package/src/utils/__tests__/objects.test.ts +3 -3
  432. package/src/utils/__tests__/path.test.ts +34 -31
  433. package/src/utils/__tests__/urls.test.ts +19 -18
  434. package/src/utils/__tests__/versions.test.ts +5 -5
  435. package/src/utils/__tests__/waitForWs.test.ts +1 -1
  436. package/src/utils/arrays.ts +2 -2
  437. package/src/utils/assertNever.ts +1 -1
  438. package/src/utils/batch-requests.ts +2 -2
  439. package/src/utils/createReducer.ts +2 -2
  440. package/src/utils/id-tree.tsx +2 -2
  441. package/src/utils/idle.ts +1 -1
  442. package/src/utils/invariant.ts +1 -2
  443. package/src/utils/json/base64.ts +2 -5
  444. package/src/utils/maps.ts +1 -1
  445. package/src/utils/math.ts +0 -1
  446. package/src/utils/mime-types.ts +1 -1
  447. package/src/utils/multi-map.ts +1 -1
  448. package/src/utils/objects.ts +1 -1
  449. package/src/utils/once.ts +2 -2
  450. package/src/utils/staticImplements.ts +1 -1
  451. package/src/utils/storage/jotai.ts +1 -1
  452. package/src/utils/tracer.ts +3 -2
  453. package/dist/_basePickBy-QjOmBDRE.js +0 -110
  454. package/dist/_baseSet-xgn1IbGV.js +0 -27
  455. package/dist/architecture-7HQA4BMR-BRyVh_Za.js +0 -6
  456. package/dist/assets/__vite-browser-external-Us1ds95c.js +0 -1
  457. package/dist/dist-B0R_ZM4-.js +0 -6
  458. package/dist/dist-B4a9_9pj.js +0 -5
  459. package/dist/dist-BCSUKEwO.js +0 -5
  460. package/dist/dist-BONIDQq6.js +0 -5
  461. package/dist/dist-BYeRx2hb.js +0 -5
  462. package/dist/dist-D2Rk1j4R.js +0 -1381
  463. package/dist/dist-DZjX5TYv.js +0 -5
  464. package/dist/dist-Dkw9x6kc.js +0 -5
  465. package/dist/dist-Ds6UaXGR.js +0 -6
  466. package/dist/dist-KuEJ1Q53.js +0 -8
  467. package/dist/dist-S72WNyTZ.js +0 -5
  468. package/dist/dist-bTG-yssT.js +0 -5
  469. package/dist/dist-diF0sguc.js +0 -8
  470. package/dist/dist-mJ84BIgu.js +0 -8
  471. package/dist/dist-wSIhFWQz.js +0 -8
  472. package/dist/get-CqrzlV1v.js +0 -68
  473. package/dist/range-CYz5jI--.js +0 -17
  474. package/dist/stex-CZyTRGVB.js +0 -4
  475. package/dist/tooltip-DGHTbHl5.js +0 -404
  476. package/dist/useLifecycle-Dids8BPm.js +0 -173
  477. /package/dist/{dist-KZI_BHqV.js → dist-CxZvoNao.js} +0 -0
  478. /package/dist/{invariant-D4hPsZFI.js → invariant-e8eBgdux.js} +0 -0
  479. /package/dist/{isArrayLikeObject-C-hFPChh.js → isArrayLikeObject-LXbTYiBa.js} +0 -0
  480. /package/dist/{main-CvkAPtaq.js → main-XimWhSi_.js} +0 -0
  481. /package/dist/{purify.es-ukiMXY-F.js → purify.es-hTCfRGdl.js} +0 -0
  482. /package/dist/{react-dom-BKwCWYPW.js → react-dom-BSUuJjCR.js} +0 -0
  483. /package/dist/{stex-Ze8D4R_5.js → stex-D887Ylhf.js} +0 -0
@@ -33,4 +33,72 @@ describe("getContainerWidth", () => {
33
33
  it("should return undefined when width is explicitly undefined", () => {
34
34
  expect(getContainerWidth({ width: undefined })).toBeUndefined();
35
35
  });
36
+
37
+ it("should find width in nested facet spec", () => {
38
+ expect(
39
+ getContainerWidth({
40
+ $schema: "https://vega.github.io/schema/vega-lite/v6.json",
41
+ facet: { column: { field: "Origin", type: "nominal" } },
42
+ spec: {
43
+ mark: "point",
44
+ encoding: {},
45
+ width: "container",
46
+ },
47
+ }),
48
+ ).toBe("container");
49
+ });
50
+
51
+ it("should find width in nested repeat spec", () => {
52
+ expect(
53
+ getContainerWidth({
54
+ $schema: "https://vega.github.io/schema/vega-lite/v6.json",
55
+ repeat: { row: ["A", "B"] },
56
+ spec: {
57
+ mark: "point",
58
+ encoding: {},
59
+ width: "container",
60
+ },
61
+ }),
62
+ ).toBe("container");
63
+ });
64
+
65
+ it("should return undefined for nested spec without width", () => {
66
+ expect(
67
+ getContainerWidth({
68
+ facet: { column: { field: "Origin" } },
69
+ spec: { mark: "point", encoding: {} },
70
+ }),
71
+ ).toBeUndefined();
72
+ });
73
+
74
+ it("should return undefined for hconcat (width on sub-specs)", () => {
75
+ expect(
76
+ getContainerWidth({
77
+ hconcat: [{ width: "container" }, { width: "container" }],
78
+ }),
79
+ ).toBeUndefined();
80
+ });
81
+
82
+ it("should return undefined for vconcat (width on sub-specs)", () => {
83
+ expect(
84
+ getContainerWidth({
85
+ vconcat: [{ width: "container" }, { width: "container" }],
86
+ }),
87
+ ).toBeUndefined();
88
+ });
89
+
90
+ it("should return undefined for compiled Vega spec (width as signal)", () => {
91
+ expect(
92
+ getContainerWidth({
93
+ $schema: "https://vega.github.io/schema/vega/v6.json",
94
+ autosize: { contains: "padding", type: "fit-x" },
95
+ signals: [
96
+ {
97
+ name: "width",
98
+ init: "isFinite(containerSize()[0]) ? containerSize()[0] : 300",
99
+ },
100
+ ],
101
+ }),
102
+ ).toBeUndefined();
103
+ });
36
104
  });
@@ -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 { tableFromIPC } from "@uwdata/flechette";
5
5
  import { batch } from "@/utils/batch-requests";
@@ -40,11 +40,11 @@ function getParamSignature(param: TParams): string {
40
40
  type: select.type,
41
41
  encodings:
42
42
  "encodings" in select && select.encodings
43
- ? [...select.encodings].sort()
43
+ ? [...select.encodings].toSorted()
44
44
  : undefined,
45
45
  fields:
46
46
  "fields" in select && select.fields
47
- ? [...select.fields].sort()
47
+ ? [...select.fields].toSorted()
48
48
  : undefined,
49
49
  bind: param.bind,
50
50
  };
@@ -160,7 +160,7 @@ function findCommonParams(
160
160
  if (!signatureCounts.has(signature)) {
161
161
  signatureCounts.set(signature, { count: 0, param });
162
162
  }
163
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
163
+ // oxlint-disable-next-line typescript/no-non-null-assertion
164
164
  signatureCounts.get(signature)!.count++;
165
165
  }
166
166
  }
@@ -25,7 +25,7 @@ export type {
25
25
  } from "vega-lite/types_unstable/spec/unit.js";
26
26
 
27
27
  export type VegaLiteUnitSpec = TopLevelUnitSpec<Field>;
28
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ // oxlint-disable-next-line typescript/no-explicit-any
29
29
  export type GenericVegaSpec = GenericUnitSpec<any, any, any>;
30
30
  export type EncodingType = keyof Encoding<Field>;
31
31
  export type Encodings = Encoding<Field>;
@@ -6,13 +6,22 @@ import type { DataType, FieldTypes, VegaDataType } from "./vega-loader";
6
6
  export type ContainerWidth = number | "container";
7
7
 
8
8
  /**
9
- * Get the container width from a VegaLite spec.
10
- * @param spec - The VegaLite spec.
11
- * @returns The container width.
9
+ * Get the container width from a Vega-Lite spec.
10
+ *
11
+ * For unit specs, `width` is at the top level. For facet/repeat specs,
12
+ * `width` is nested inside `spec`. This does not handle hconcat/vconcat and Vega spec
13
+ * where the width may be a signal. These cases are covered by
14
+ * the CSS fallback `.vega-embed:has(> .chart-wrapper.fit-x)`.
12
15
  */
13
16
  export function getContainerWidth(spec: unknown): ContainerWidth | undefined {
14
- if (typeof spec === "object" && spec !== null && "width" in spec) {
15
- return spec.width as ContainerWidth | undefined;
17
+ if (typeof spec === "object" && spec !== null) {
18
+ if ("width" in spec) {
19
+ return spec.width as ContainerWidth | undefined;
20
+ }
21
+ // Faceted/repeated spec
22
+ if ("spec" in spec) {
23
+ return getContainerWidth(spec.spec);
24
+ }
16
25
  }
17
26
  return undefined;
18
27
  }
@@ -4,7 +4,8 @@
4
4
  max-width: 100%;
5
5
  }
6
6
 
7
- .vega-embed[data-container-width="container"] {
7
+ .vega-embed[data-container-width="container"],
8
+ .vega-embed:has(> .chart-wrapper.fit-x) {
8
9
  width: 100%;
9
10
  }
10
11
 
@@ -35,7 +35,7 @@ interface Data {
35
35
  lazy?: boolean;
36
36
  }
37
37
 
38
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
38
+ // oxlint-disable-next-line typescript/consistent-type-definitions
39
39
  type Functions = {
40
40
  /**
41
41
  * Function to call for lazy loading
@@ -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
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
17
+ // oxlint-disable-next-line typescript/consistent-type-definitions
18
18
  type PluginFunctions = {
19
19
  load: (req: {}) => Promise<{
20
20
  html: string;
@@ -69,7 +69,7 @@ const RoutesComponent = ({
69
69
  }, [handleFindMatch]);
70
70
 
71
71
  if (!matched) {
72
- // biome-ignore lint/complexity/noUselessFragments: this is intentional
72
+ // oxlint-disable-next-line react/jsx-no-useless-fragment
73
73
  return <></>;
74
74
  }
75
75
 
@@ -63,7 +63,7 @@ function randomAlpha() {
63
63
  }
64
64
 
65
65
  const Mermaid: React.FC<Props> = ({ diagram }) => {
66
- // eslint-disable-next-line react/hook-use-state
66
+ // oxlint-disable-next-line react/hook-use-state
67
67
  const [id] = useState(() => randomAlpha());
68
68
 
69
69
  const darkMode = useTheme().theme === "dark";
@@ -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 { 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
- extends Omit<IPlugin<never, D>, "render" | "functions"> {
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
- /* eslint-disable react-hooks/rules-of-hooks */
2
+ /* oxlint-disable react-hooks/rules-of-hooks */
3
3
 
4
4
  import type { Meta, StoryObj } from "@storybook/react-vite";
5
5
  import { useState } from "react";
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable react-hooks/rules-of-hooks */
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
- // eslint-disable-next-line react-hooks/exhaustive-deps
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
- /* eslint-disable react-hooks/rules-of-hooks */
2
+ /* oxlint-disable react-hooks/rules-of-hooks */
3
3
 
4
4
  import type { Meta, StoryObj } from "@storybook/react-vite";
5
5
  import { useState } from "react";
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* eslint-disable react-hooks/rules-of-hooks */
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";
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /** biome-ignore-all lint/suspicious/noConsole: For console logging */
2
+ /* oxlint-disable no-console -- For console logging */
3
3
 
4
4
  import { Functions } from "./functions";
5
5
 
@@ -124,7 +124,7 @@ describe("arrays", () => {
124
124
  });
125
125
 
126
126
  it("should handle undefined/null array", () => {
127
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
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
- // eslint-disable-next-line unicorn/prefer-blob-reading-methods
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
- EDGE_CASE_CELL_NAMES,
97
- )("should handle unicode cell names in createCellLink: %s", (cellName) => {
98
- const url = createCellLink(cellName);
99
- expect(url).toContain("scrollTo=");
100
- expect(url).toContain(encodeURIComponent(cellName));
101
- });
102
-
103
- it.each(
104
- EDGE_CASE_CELL_NAMES,
105
- )("should round-trip unicode cell names correctly: %s", (cellName) => {
106
- const url = createCellLink(cellName);
107
- const hash = url.split("#")[1];
108
- const extracted = extractCellNameFromHash(`#${hash}`);
109
- expect(extracted).toBe(cellName);
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
- EDGE_CASE_CELL_NAMES,
114
- )("should allow linking to unicode cell names: %s", (cellName) => {
115
- expect(canLinkToCell(cellName)).toBe(true);
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
- // eslint-disable-next-line @typescript-eslint/unbound-method
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
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
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
- EDGE_CASE_FILENAMES,
40
- )("should handle edge case filenames: %s", (filename) => {
41
- // Test all filename operations with edge cases
42
- const withoutExt = Filenames.withoutExtension(filename);
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
- 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`);
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
- // Ensure operations preserve unicode and special characters in base name
51
- expect(withoutExt).not.toEqual("");
52
- expect(typeof withoutExt).toBe("string");
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
- jsonToMarkdown([{ info: "Visit https://example.com for more" }]),
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
- jsonToMarkdown([{ a: null, b: undefined, c: 1 }]),
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
- jsonToMarkdown([{ a: "value|with|pipes", b: "normal" }]),
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
- jsonToMarkdown([{ a: "line1\nline2", b: "normal" }]),
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
- jsonToMarkdown([{ str: "text", num: 42, bool: true, nil: null }]),
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
- jsonToMarkdown([{ data: { nested: "value" } }]),
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
- jsonToMarkdown([{ link: "[Google](https://google.com)" }]),
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.sort()).toEqual(["key1", "key2", "key3"]);
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.sort()).toEqual([1, 2, 3, 4, 5]);
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.sort()).toEqual([1, 2]);
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
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ // oxlint-disable-next-line typescript/no-explicit-any
33
33
  expect(Objects.mapValues(null as any, (v) => v)).toBe(null);
34
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
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
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
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
- EDGE_CASE_FILENAMES,
175
- )("should handle unicode and spaces in basename: %s", (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
- it.each(
183
- EDGE_CASE_FILENAMES,
184
- )("should handle unicode and spaces in dirname: %s", (filename) => {
185
- const fullPath = `/path/to/${filename}`;
186
- const dirname = Paths.dirname(fullPath);
187
- expect(dirname).toBe("/path/to");
188
- });
189
-
190
- it.each(
191
- EDGE_CASE_FILENAMES,
192
- )("should handle unicode and spaces in path operations: %s", (filename) => {
193
- const baseName = Paths.basename(filename);
194
- const extension = Paths.extension(filename);
195
-
196
- // Should preserve unicode characters in basename
197
- expect(baseName).toContain(filename.split(".")[0]);
198
-
199
- // Should correctly extract extension
200
- if (filename.includes(".")) {
201
- expect(extension).toBe(filename.split(".").pop());
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
  });