@marimo-team/islands 0.22.1-dev9 → 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 (481) hide show
  1. package/dist/{ConnectedDataExplorerComponent-iT7t3FxV.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-CMMa6QVT.js → loader-Bd1kgLn7.js} +15 -15
  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-DOzKCTzc.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-BaDgUvQP.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/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/layout/DownloadPlugin.tsx +1 -1
  409. package/src/plugins/layout/ImageComparisonPlugin.tsx +1 -3
  410. package/src/plugins/layout/LazyPlugin.tsx +1 -1
  411. package/src/plugins/layout/RoutesPlugin.tsx +1 -1
  412. package/src/plugins/layout/mermaid/mermaid.tsx +1 -1
  413. package/src/plugins/plugins.ts +1 -1
  414. package/src/plugins/stateless-plugin.ts +4 -2
  415. package/src/stories/data-explorer.stories.tsx +1 -1
  416. package/src/stories/dataframe.stories.tsx +1 -1
  417. package/src/stories/editor.stories.tsx +1 -1
  418. package/src/stories/select.stories.tsx +1 -1
  419. package/src/stories/switchable-multi-select.stories.tsx +1 -1
  420. package/src/utils/Logger.ts +1 -1
  421. package/src/utils/__tests__/arrays.test.ts +1 -1
  422. package/src/utils/__tests__/blob.test.ts +1 -1
  423. package/src/utils/__tests__/cell-urls.test.ts +24 -21
  424. package/src/utils/__tests__/dates.test.ts +1 -1
  425. package/src/utils/__tests__/errors.test.ts +1 -1
  426. package/src/utils/__tests__/filenames.test.ts +15 -14
  427. package/src/utils/__tests__/json-parser.test.ts +14 -21
  428. package/src/utils/__tests__/multi-map.test.ts +3 -3
  429. package/src/utils/__tests__/objects.test.ts +3 -3
  430. package/src/utils/__tests__/path.test.ts +34 -31
  431. package/src/utils/__tests__/urls.test.ts +19 -18
  432. package/src/utils/__tests__/versions.test.ts +5 -5
  433. package/src/utils/__tests__/waitForWs.test.ts +1 -1
  434. package/src/utils/arrays.ts +2 -2
  435. package/src/utils/assertNever.ts +1 -1
  436. package/src/utils/batch-requests.ts +2 -2
  437. package/src/utils/createReducer.ts +2 -2
  438. package/src/utils/id-tree.tsx +2 -2
  439. package/src/utils/idle.ts +1 -1
  440. package/src/utils/invariant.ts +1 -2
  441. package/src/utils/json/base64.ts +2 -5
  442. package/src/utils/maps.ts +1 -1
  443. package/src/utils/math.ts +0 -1
  444. package/src/utils/mime-types.ts +1 -1
  445. package/src/utils/multi-map.ts +1 -1
  446. package/src/utils/objects.ts +1 -1
  447. package/src/utils/once.ts +2 -2
  448. package/src/utils/staticImplements.ts +1 -1
  449. package/src/utils/storage/jotai.ts +1 -1
  450. package/src/utils/tracer.ts +3 -2
  451. package/dist/_basePickBy-QjOmBDRE.js +0 -110
  452. package/dist/_baseSet-xgn1IbGV.js +0 -27
  453. package/dist/architecture-7HQA4BMR-BRyVh_Za.js +0 -6
  454. package/dist/assets/__vite-browser-external-Us1ds95c.js +0 -1
  455. package/dist/dist-B0R_ZM4-.js +0 -6
  456. package/dist/dist-B4a9_9pj.js +0 -5
  457. package/dist/dist-BCSUKEwO.js +0 -5
  458. package/dist/dist-BONIDQq6.js +0 -5
  459. package/dist/dist-BYeRx2hb.js +0 -5
  460. package/dist/dist-D2Rk1j4R.js +0 -1381
  461. package/dist/dist-DZjX5TYv.js +0 -5
  462. package/dist/dist-Dkw9x6kc.js +0 -5
  463. package/dist/dist-Ds6UaXGR.js +0 -6
  464. package/dist/dist-KuEJ1Q53.js +0 -8
  465. package/dist/dist-S72WNyTZ.js +0 -5
  466. package/dist/dist-bTG-yssT.js +0 -5
  467. package/dist/dist-diF0sguc.js +0 -8
  468. package/dist/dist-mJ84BIgu.js +0 -8
  469. package/dist/dist-wSIhFWQz.js +0 -8
  470. package/dist/get-CqrzlV1v.js +0 -68
  471. package/dist/range-CYz5jI--.js +0 -17
  472. package/dist/stex-CZyTRGVB.js +0 -4
  473. package/dist/tooltip-DGHTbHl5.js +0 -404
  474. package/dist/useLifecycle-Dids8BPm.js +0 -173
  475. /package/dist/{dist-KZI_BHqV.js → dist-CxZvoNao.js} +0 -0
  476. /package/dist/{invariant-D4hPsZFI.js → invariant-e8eBgdux.js} +0 -0
  477. /package/dist/{isArrayLikeObject-C-hFPChh.js → isArrayLikeObject-LXbTYiBa.js} +0 -0
  478. /package/dist/{main-CvkAPtaq.js → main-XimWhSi_.js} +0 -0
  479. /package/dist/{purify.es-ukiMXY-F.js → purify.es-hTCfRGdl.js} +0 -0
  480. /package/dist/{react-dom-BKwCWYPW.js → react-dom-BSUuJjCR.js} +0 -0
  481. /package/dist/{stex-Ze8D4R_5.js → stex-D887Ylhf.js} +0 -0
@@ -69,43 +69,39 @@ export const TableTopBar: React.FC<TableTopBarProps> = ({
69
69
  }
70
70
 
71
71
  return (
72
- <div className="flex items-center h-10 px-2 border-b gap-3">
73
- {/* always-visible search */}
72
+ <div className="flex items-center h-10 px-2 border-b gap-2">
74
73
  {onSearchQueryChange && enableSearch && (
75
- <div className="flex items-center">
76
- <div className="flex items-center gap-1 rounded-full border px-2 w-56">
77
- <SearchIcon className="w-4 h-4 text-muted-foreground shrink-0" />
78
- <input
79
- ref={inputRef}
80
- type="text"
81
- className="h-6 border-none bg-transparent focus:outline-hidden text-sm w-full min-w-0"
82
- value={internalValue}
83
- onKeyDown={(e) => {
84
- if (e.key === "Escape") {
85
- setInternalValue("");
86
- inputRef.current?.blur();
87
- }
88
- }}
89
- onChange={(e) => setInternalValue(e.target.value)}
90
- placeholder="Search..."
91
- />
92
- {reloading && <Spinner size="small" />}
93
- {internalValue && (
94
- <Button
95
- variant="text"
96
- size="xs"
97
- className="h-5 w-5 p-0 shrink-0"
98
- onClick={() => setInternalValue("")}
99
- >
100
- <XIcon className="w-3 h-3 text-muted-foreground" />
101
- </Button>
102
- )}
103
- </div>
74
+ <div className="flex flex-1 items-center gap-1 px-2 rounded-sm focus-within:ring-1 focus-within:ring-border transition-shadow">
75
+ <SearchIcon className="w-4 h-4 text-muted-foreground shrink-0" />
76
+ <input
77
+ ref={inputRef}
78
+ type="text"
79
+ className="h-6 border-none bg-transparent focus:outline-hidden text-sm w-full min-w-0"
80
+ value={internalValue}
81
+ onKeyDown={(e) => {
82
+ if (e.key === "Escape") {
83
+ setInternalValue("");
84
+ inputRef.current?.blur();
85
+ }
86
+ }}
87
+ onChange={(e) => setInternalValue(e.target.value)}
88
+ placeholder="Search..."
89
+ />
90
+ {reloading && <Spinner size="small" />}
91
+ {internalValue && (
92
+ <Button
93
+ variant="text"
94
+ size="xs"
95
+ className="h-5 w-5 p-0 shrink-0"
96
+ onClick={() => setInternalValue("")}
97
+ >
98
+ <XIcon className="w-3 h-3 text-muted-foreground" />
99
+ </Button>
100
+ )}
104
101
  </div>
105
102
  )}
106
103
 
107
- {/* actions grouped together */}
108
- <div className="flex items-center gap-1 shrink-0">
104
+ <div className="flex items-center shrink-0">
109
105
  {showChartBuilder && (
110
106
  <Button
111
107
  variant="text"
@@ -117,7 +113,7 @@ export const TableTopBar: React.FC<TableTopBarProps> = ({
117
113
  onClick={toggleDisplayHeader}
118
114
  >
119
115
  <ChartSplineIcon className="w-3.5 h-3.5" />
120
- Chart Builder
116
+ Visualize
121
117
  </Button>
122
118
  )}
123
119
  {showTableExplorer && togglePanel && (
@@ -131,7 +127,7 @@ export const TableTopBar: React.FC<TableTopBarProps> = ({
131
127
  onClick={() => togglePanel(PANEL_TYPES.ROW_VIEWER)}
132
128
  >
133
129
  <PanelRightIcon className="w-3.5 h-3.5" />
134
- Table Explorer
130
+ Explorer
135
131
  </Button>
136
132
  )}
137
133
  {downloadAs && <ExportMenu downloadAs={downloadAs} />}
@@ -230,7 +230,7 @@ describe("generateColumns", () => {
230
230
  });
231
231
 
232
232
  // "age" is a number column — should auto right-align
233
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
233
+ // oxlint-disable-next-line typescript/no-explicit-any
234
234
  const cell = (columns[1].cell as any)({
235
235
  column: {
236
236
  columnDef: columns[1],
@@ -241,7 +241,7 @@ describe("generateColumns", () => {
241
241
  expect(cell?.props.className).toContain("text-right");
242
242
 
243
243
  // "name" is a string column — should remain left-aligned
244
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
244
+ // oxlint-disable-next-line typescript/no-explicit-any
245
245
  const nameCell = (columns[0].cell as any)({
246
246
  column: {
247
247
  columnDef: columns[0],
@@ -261,7 +261,7 @@ describe("generateColumns", () => {
261
261
  });
262
262
 
263
263
  // "age" is numeric but explicitly set to left
264
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
264
+ // oxlint-disable-next-line typescript/no-explicit-any
265
265
  const cell = (columns[1].cell as any)({
266
266
  column: {
267
267
  columnDef: columns[1],
@@ -301,7 +301,7 @@ describe("generateColumns", () => {
301
301
  });
302
302
 
303
303
  // Assuming getCellStyleClass is a function that returns a class name
304
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
304
+ // oxlint-disable-next-line typescript/no-explicit-any
305
305
  const cell = (columns[0].cell as any)({
306
306
  column: {
307
307
  columnDef: columns[0],
@@ -333,7 +333,7 @@ describe("generateColumns", () => {
333
333
  // Right-justified: parent wrapper should have items-end, sort/filter icons should flip to the left
334
334
  const { container: rightContainer } = render(
335
335
  <TooltipProvider>
336
- {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}
336
+ {/* oxlint-disable-next-line typescript/no-explicit-any */}
337
337
  {(columns[0].header as any)({ column: mockColumn(columns[0]) })}
338
338
  </TooltipProvider>,
339
339
  );
@@ -347,7 +347,7 @@ describe("generateColumns", () => {
347
347
  // Center-justified: parent wrapper should have items-center, no flex-row-reverse
348
348
  const { container: centerContainer } = render(
349
349
  <TooltipProvider>
350
- {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}
350
+ {/* oxlint-disable-next-line typescript/no-explicit-any */}
351
351
  {(columns[1].header as any)({ column: mockColumn(columns[1]) })}
352
352
  </TooltipProvider>,
353
353
  );
@@ -572,7 +572,7 @@ describe("LocaleNumber", () => {
572
572
  <LocaleNumber value={1_234_567.89} />
573
573
  </I18nProvider>,
574
574
  );
575
- // eslint-disable-next-line no-irregular-whitespace
575
+ // oxlint-disable-next-line no-irregular-whitespace
576
576
  expect(container.textContent).toMatchInlineSnapshot(`"1 234 567,89"`);
577
577
  });
578
578
 
@@ -1,5 +1,5 @@
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
  export interface CellHoverTemplateTableState {
5
5
  cellHoverTemplate: string | null;
@@ -1,5 +1,5 @@
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
  import type { RowData } from "@tanstack/react-table";
5
5
 
@@ -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 type { Cell, Column, Row, Table } from "@tanstack/react-table";
5
5
  import { describe, expect, it, vi } from "vitest";
@@ -1,5 +1,5 @@
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
  import type { OnChangeFn, RowData, Updater } from "@tanstack/react-table";
4
4
 
5
5
  export interface CellSelectionItem {
@@ -40,8 +40,9 @@ export interface CellSelectionInstance<TData extends RowData> {
40
40
  declare module "@tanstack/react-table" {
41
41
  interface TableState extends CellSelectionTableState {}
42
42
 
43
- interface TableOptionsResolved<TData extends RowData>
44
- extends CellSelectionOptions {}
43
+ interface TableOptionsResolved<
44
+ TData extends RowData,
45
+ > extends CellSelectionOptions {}
45
46
 
46
47
  interface Table<TData extends RowData> extends CellSelectionInstance<TData> {}
47
48
 
@@ -1,5 +1,5 @@
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
  import type { RowData } from "@tanstack/react-table";
4
4
 
5
5
  export type CellStyleState = Record<
@@ -78,7 +78,7 @@ export function generateAltairChart(
78
78
 
79
79
  if (encodings?.tooltip) {
80
80
  const tooltip = encodings.tooltip;
81
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
+ // oxlint-disable-next-line typescript/no-explicit-any
82
82
  const makeTooltip = (t: Record<string, any>) => {
83
83
  const kwargs = makeKwargs(t);
84
84
  return new FunctionCall("alt.Tooltip", kwargs);
@@ -149,7 +149,7 @@ ${variableName}
149
149
  `.trim();
150
150
  }
151
151
 
152
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
+ // oxlint-disable-next-line typescript/no-explicit-any
153
153
  function makeKwargs<T extends Record<string, any>>(obj: T) {
154
154
  const result: Record<string, PythonCode> = {};
155
155
 
@@ -257,7 +257,7 @@ export const TablePanel: React.FC<TablePanelProps> = ({
257
257
  saveTabChartType(tab.tabName, chartType);
258
258
  };
259
259
  return (
260
- <TabsContent key={idx} value={tab.tabName} className="h-[400px] mt-1">
260
+ <TabsContent key={idx} value={tab.tabName} className="h-[400px] mt-0">
261
261
  <ChartPanel
262
262
  tableData={data}
263
263
  chartConfig={tab.config}
@@ -475,7 +475,7 @@ export const ChartPanel: React.FC<{
475
475
  );
476
476
 
477
477
  return (
478
- <div className="flex flex-row gap-2 h-full rounded-md border pr-2">
478
+ <div className="flex flex-row gap-2 h-full rounded-md border-t pr-2">
479
479
  <div
480
480
  className={`relative flex flex-col gap-2 overflow-auto px-2 py-3 scrollbar-thin transition-width duration-200 ${formCollapsed ? "w-8" : "w-[300px]"}`}
481
481
  >
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import * as SelectPrimitive from "@radix-ui/react-select";
4
3
  import { ChevronDown } from "lucide-react";
4
+ import { Select as SelectPrimitive } from "radix-ui";
5
5
  import React from "react";
6
6
  import { useFormContext, useWatch } from "react-hook-form";
7
7
  import type { z } from "zod";
@@ -72,7 +72,7 @@ export const ColumnExplorerPanel = ({
72
72
  });
73
73
 
74
74
  return (
75
- <div className="mt-5 mb-3">
75
+ <div className="mb-3">
76
76
  <span className="text-xs font-semibold ml-2 flex">
77
77
  {prettifyRowColumnCount(totalRows, totalColumns, locale)}
78
78
  <CopyClipboardIcon
@@ -1,5 +1,5 @@
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
  import type { OnChangeFn, RowData } from "@tanstack/react-table";
5
5
  import type { DataType } from "@/core/kernel/messages";
@@ -38,7 +38,7 @@ export interface ColumnFormattingInstance {
38
38
  setColumnFormatting: (value?: FormatOption) => void;
39
39
  getColumnFormatting?: () => FormatOption | undefined;
40
40
  getCanFormat?: () => boolean;
41
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ // oxlint-disable-next-line typescript/no-explicit-any
42
42
  applyColumnFormatting: (value: any) => any;
43
43
  }
44
44
 
@@ -48,8 +48,9 @@ declare module "@tanstack/react-table" {
48
48
  //merge column formatting's state with the existing table state
49
49
  interface TableState extends ColumnFormattingTableState {}
50
50
  //merge column formatting's options with the existing table options
51
- interface TableOptionsResolved<TData extends RowData>
52
- extends ColumnFormattingOptions {}
51
+ interface TableOptionsResolved<
52
+ TData extends RowData,
53
+ > extends ColumnFormattingOptions {}
53
54
  //merge column formatting's instance APIs with the existing table instance APIs
54
55
  interface Column<TData extends RowData> extends ColumnFormattingInstance {}
55
56
  }
@@ -63,8 +63,10 @@ import { stringifyUnknownValue } from "./utils";
63
63
 
64
64
  const TOP_K_ROWS = 30;
65
65
 
66
- interface DataTableColumnHeaderProps<TData, TValue>
67
- extends React.HTMLAttributes<HTMLDivElement> {
66
+ interface DataTableColumnHeaderProps<
67
+ TData,
68
+ TValue,
69
+ > extends React.HTMLAttributes<HTMLDivElement> {
68
70
  column: Column<TData, TValue>;
69
71
  header: React.ReactNode;
70
72
  justify?: "left" | "center" | "right";
@@ -282,7 +282,7 @@ export function getDataSpecAndSourceName<T>(data: string | T[]): {
282
282
  const base64 = extractBase64FromDataURL(data);
283
283
  const decoded = window.atob(base64);
284
284
 
285
- // eslint-disable-next-line unicorn/prefer-ternary
285
+ // oxlint-disable-next-line unicorn/prefer-ternary
286
286
  if (decoded.startsWith(ARROW_MAGIC_NUMBER)) {
287
287
  dataSpec = {
288
288
  values: base64ToUint8Array(base64),
@@ -1,5 +1,5 @@
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
  import type { OnChangeFn, RowData } from "@tanstack/react-table";
4
4
 
5
5
  export type ColumnWrappingState = Record<string, "nowrap" | "wrap" | undefined>;
@@ -22,8 +22,9 @@ export interface ColumnWrappingInstance {
22
22
  declare module "@tanstack/react-table" {
23
23
  interface TableState extends ColumnWrappingTableState {}
24
24
 
25
- interface TableOptionsResolved<TData extends RowData>
26
- extends ColumnWrappingOptions {}
25
+ interface TableOptionsResolved<
26
+ TData extends RowData,
27
+ > extends ColumnWrappingOptions {}
27
28
 
28
29
  interface Column<TData extends RowData> extends ColumnWrappingInstance {}
29
30
  }
@@ -1,7 +1,10 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  "use no memo";
3
3
 
4
- import { PopoverClose } from "@radix-ui/react-popover";
4
+ import { Popover as PopoverPrimitive } from "radix-ui";
5
+
6
+ const PopoverClose = PopoverPrimitive.Close;
7
+
5
8
  import type { Column, ColumnDef } from "@tanstack/react-table";
6
9
  import { formatDate, isValid } from "date-fns";
7
10
  import { useLocale, useNumberFormatter } from "react-aria";
@@ -1,5 +1,5 @@
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
  import type { RowData } from "@tanstack/react-table";
4
4
 
5
5
  export interface CopyColumnOptions {
@@ -12,8 +12,9 @@ export interface CopyColumnInstance {
12
12
 
13
13
  // Use declaration merging to add our new feature APIs
14
14
  declare module "@tanstack/react-table" {
15
- interface TableOptionsResolved<TData extends RowData>
16
- extends CopyColumnOptions {}
15
+ interface TableOptionsResolved<
16
+ TData extends RowData,
17
+ > extends CopyColumnOptions {}
17
18
 
18
19
  interface Column<TData extends RowData> extends CopyColumnInstance {}
19
20
  }
@@ -314,18 +314,19 @@ const DataTableInternal = <TData,>({
314
314
  virtualize={virtualize}
315
315
  />
316
316
  </Table>
317
+ <TableBottomBar
318
+ part="table-footer"
319
+ className="pt-1.5 pb-0.5 border-t border-border"
320
+ totalColumns={totalColumns}
321
+ pagination={pagination}
322
+ selection={selection}
323
+ onRowSelectionChange={onRowSelectionChange}
324
+ table={table}
325
+ getRowIds={getRowIds}
326
+ showPageSizeSelector={showPageSizeSelector}
327
+ tableLoading={reloading}
328
+ />
317
329
  </div>
318
- <TableBottomBar
319
- part="table-footer"
320
- totalColumns={totalColumns}
321
- pagination={pagination}
322
- selection={selection}
323
- onRowSelectionChange={onRowSelectionChange}
324
- table={table}
325
- getRowIds={getRowIds}
326
- showPageSizeSelector={showPageSizeSelector}
327
- tableLoading={reloading}
328
- />
329
330
  </CellSelectionProvider>
330
331
  </div>
331
332
  );
@@ -1,5 +1,5 @@
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
  import type { OnChangeFn, RowData } from "@tanstack/react-table";
5
5
 
@@ -25,8 +25,9 @@ export interface FocusRowInstance {
25
25
  declare module "@tanstack/react-table" {
26
26
  interface TableState extends FocusRowTableState {}
27
27
 
28
- interface TableOptionsResolved<TData extends RowData>
29
- extends FocusRowOptions {}
28
+ interface TableOptionsResolved<
29
+ TData extends RowData,
30
+ > extends FocusRowOptions {}
30
31
 
31
32
  interface Row<TData extends RowData> extends FocusRowInstance {}
32
33
  }
@@ -43,7 +43,7 @@ export const LoadingTable = ({
43
43
  <TableBody>
44
44
  {Array.from({ length: pageSize }).map((_, i) => (
45
45
  <TableRow key={i}>
46
- {Array.from({ length: NUM_COLUMNS }).map((_, j) => (
46
+ {Array.from({ length: NUM_COLUMNS }).map((__, j) => (
47
47
  <TableCell key={j}>
48
48
  <div className="h-4 bg-(--slate-5) animate-pulse rounded-md w-[90%]" />
49
49
  </TableCell>
@@ -71,7 +71,7 @@ export const DataTablePagination = <TData,>({
71
71
 
72
72
  // Ensure unique page sizes
73
73
  const pageSizeSet = new Set([5, 10, 25, 50, 100, pageSize]);
74
- const pageSizes = [...pageSizeSet].sort((a, b) => a - b);
74
+ const pageSizes = [...pageSizeSet].toSorted((a, b) => a - b);
75
75
 
76
76
  const renderPageSizeSelector = () => {
77
77
  return (
@@ -10,7 +10,7 @@ vi.mock("@/utils/copy", () => ({
10
10
  }));
11
11
 
12
12
  vi.mock("../utils", async (importOriginal) => {
13
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ // oxlint-disable-next-line typescript/no-explicit-any
14
14
  const original = (await importOriginal()) as any;
15
15
  return {
16
16
  ...original,
@@ -28,7 +28,7 @@ import {
28
28
  } from "../atoms";
29
29
  import { getCellsBetween, getCellValues } from "../utils";
30
30
 
31
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+ // oxlint-disable-next-line typescript/no-explicit-any
32
32
  type T = any;
33
33
 
34
34
  // Create mock table and cells
@@ -56,18 +56,18 @@ function createMockCell(
56
56
  }
57
57
 
58
58
  function createMockTable(): Table<T> {
59
- const mockToggleSelected = vi.fn().mockImplementation(function (this: {
60
- isSelected: boolean;
61
- }) {
62
- this.isSelected = !this.isSelected;
63
- return { isSelected: this.isSelected };
64
- });
59
+ const mockToggleSelected = vi
60
+ .fn()
61
+ .mockImplementation(function (this: { isSelected: boolean }) {
62
+ this.isSelected = !this.isSelected;
63
+ return { isSelected: this.isSelected };
64
+ });
65
65
 
66
- const mockGetIsSelected = vi.fn().mockImplementation(function (this: {
67
- isSelected: boolean;
68
- }) {
69
- return this.isSelected;
70
- });
66
+ const mockGetIsSelected = vi
67
+ .fn()
68
+ .mockImplementation(function (this: { isSelected: boolean }) {
69
+ return this.isSelected;
70
+ });
71
71
 
72
72
  const rows = [
73
73
  {
@@ -23,17 +23,15 @@ describe("isInteractiveTarget", () => {
23
23
  expect(isInteractiveTarget(createMouseEvent(span, cell))).toBe(false);
24
24
  });
25
25
 
26
- it.each([
27
- "input",
28
- "button",
29
- "select",
30
- "textarea",
31
- ])("returns true when clicking a <%s>", (tag) => {
32
- const cell = document.createElement("td");
33
- const el = document.createElement(tag);
34
- cell.append(el);
35
- expect(isInteractiveTarget(createMouseEvent(el, cell))).toBe(true);
36
- });
26
+ it.each(["input", "button", "select", "textarea"])(
27
+ "returns true when clicking a <%s>",
28
+ (tag) => {
29
+ const cell = document.createElement("td");
30
+ const el = document.createElement(tag);
31
+ cell.append(el);
32
+ expect(isInteractiveTarget(createMouseEvent(el, cell))).toBe(true);
33
+ },
34
+ );
37
35
 
38
36
  it("returns true when clicking an <a> link", () => {
39
37
  const cell = document.createElement("td");
@@ -32,9 +32,9 @@ function initialState(): CellSelectionState {
32
32
  };
33
33
  }
34
34
 
35
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
+ // oxlint-disable-next-line typescript/no-explicit-any
36
36
  type AnyTable = Table<any>;
37
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ // oxlint-disable-next-line typescript/no-explicit-any
38
38
  type AnyCell = Cell<any, unknown>;
39
39
 
40
40
  const {
@@ -34,7 +34,9 @@ export const CellSelectionStats = <TData,>({
34
34
  if (dataCellCount < 2) {
35
35
  return (
36
36
  <Tooltip content="Select multiple cells to see stats">
37
- <span className={cn("text-sm text-muted-foreground italic", className)}>
37
+ <span
38
+ className={cn("text-xs text-muted-foreground/80 italic", className)}
39
+ >
38
40
  No selection
39
41
  </span>
40
42
  </Tooltip>
@@ -9,7 +9,6 @@ import {
9
9
  type HeaderGroup,
10
10
  type Row,
11
11
  type Table,
12
- type Table as TanStackTable,
13
12
  } from "@tanstack/react-table";
14
13
  import { useVirtualizer } from "@tanstack/react-virtual";
15
14
  import { type JSX, useLayoutEffect, useRef, useState } from "react";
@@ -52,7 +51,7 @@ export function renderTableHeader<TData>(
52
51
  )}
53
52
  style={style}
54
53
  ref={(thead) => {
55
- columnSizingHandler(thead, table, header.column);
54
+ columnSizingHandler({ table, column: header.column, thead });
56
55
  }}
57
56
  >
58
57
  {header.isPlaceholder
@@ -323,23 +322,30 @@ function getPinningStyles<TData>(
323
322
 
324
323
  // Update column sizes in table state for column pinning offsets
325
324
  // https://github.com/TanStack/table/discussions/3947#discussioncomment-9564867
326
- function columnSizingHandler<TData>(
327
- thead: HTMLTableCellElement | null,
328
- table: TanStackTable<TData>,
329
- column: Column<TData>,
330
- ) {
325
+ function columnSizingHandler<TData>({
326
+ table,
327
+ column,
328
+ thead,
329
+ }: {
330
+ table: Table<TData>;
331
+ column: Column<TData>;
332
+ thead: HTMLTableCellElement | null;
333
+ }): void {
331
334
  if (!thead) {
332
335
  return;
333
336
  }
334
- if (
335
- table.getState().columnSizing[column.id] ===
336
- thead.getBoundingClientRect().width
337
- ) {
337
+ // Round to avoid infinite re-render loops: the browser's table layout
338
+ // algorithm may render a <th> at a slightly different width than the
339
+ // CSS `width` we set via column.getSize(), so a strict float === float
340
+ // comparison never stabilizes. Rounding to integers ensures convergence
341
+ // after at most one cycle.
342
+ const measuredWidth = Math.round(thead.getBoundingClientRect().width);
343
+ if (table.getState().columnSizing[column.id] === measuredWidth) {
338
344
  return;
339
345
  }
340
346
 
341
347
  table.setColumnSizing((prevSizes) => ({
342
348
  ...prevSizes,
343
- [column.id]: thead.getBoundingClientRect().width,
349
+ [column.id]: measuredWidth,
344
350
  }));
345
351
  }
@@ -247,7 +247,7 @@ export const RowViewerPanel: React.FC<RowViewerPanelProps> = ({
247
247
 
248
248
  return (
249
249
  <div
250
- className="flex flex-col gap-3 mt-4 focus:outline-hidden"
250
+ className="flex flex-col gap-3 focus:outline-hidden"
251
251
  ref={panelRef}
252
252
  tabIndex={-1}
253
253
  onKeyDown={handleKeyDown}
@@ -42,7 +42,7 @@ export interface TableExplorerPanelProps {
42
42
  }
43
43
 
44
44
  const tabTriggerClassName =
45
- "text-xs uppercase tracking-wide font-semibold cursor-pointer transition-colors";
45
+ "text-[13px] uppercase tracking-wide font-semibold cursor-pointer transition-colors";
46
46
  const activeClassName = "text-primary";
47
47
  const inactiveClassName = "hover:text-foreground";
48
48
 
@@ -110,7 +110,7 @@ export const TableExplorerPanel: React.FC<TableExplorerPanelProps> = ({
110
110
  <Tabs
111
111
  value={resolvedTab}
112
112
  onValueChange={(value) => onTabChange(value as PanelType)}
113
- className="h-full flex flex-col min-w-[350px]"
113
+ className="flex flex-col min-w-[350px]"
114
114
  >
115
115
  <Fill name={SlotNames.CONTEXT_AWARE_PANEL_HEADER}>
116
116
  <div className="flex items-center gap-1">
@@ -51,7 +51,7 @@ export const DependencyGraphTree: React.FC<PropsWithChildren<Props>> = ({
51
51
  layoutDirection,
52
52
  settings,
53
53
  }) => {
54
- // eslint-disable-next-line react/hook-use-state
54
+ // oxlint-disable-next-line react/hook-use-state
55
55
  const [initial] = useState(() => {
56
56
  let elements = elementsBuilder.createElements(
57
57
  cellIds,