@marimo-team/frontend 0.25.3-dev13 → 0.25.3-dev134

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 (565) hide show
  1. package/dist/assets/CellStatus-DC6FFQOg.js +1 -0
  2. package/dist/assets/{ConnectedDataExplorerComponent-TprnxZeJ.js → ConnectedDataExplorerComponent-BV1mVpaE.js} +1 -1
  3. package/dist/assets/{ErrorBoundary-CM13wrd8.js → ErrorBoundary-Ce-Ujlwj.js} +2 -2
  4. package/dist/assets/JsonOutput-CfEBzaqW.js +11 -0
  5. package/dist/assets/{LazyAnyLanguageCodeMirror-B4fCknq1.js → LazyAnyLanguageCodeMirror-DoxWX_Wp.js} +2 -2
  6. package/dist/assets/MarimoErrorOutput-Bh6o9zle.js +10 -0
  7. package/dist/assets/{RenderHTML-DX6i99Op.js → RenderHTML-COGZsXQV.js} +1 -1
  8. package/dist/assets/RunButton-DQ51plUv.js +1 -0
  9. package/dist/assets/__vite-browser-external-BynxqS4w.js +1 -0
  10. package/dist/assets/__vite-browser-external-DTOT9NDN.js +1 -0
  11. package/dist/assets/{add-cell-with-ai-BpD_790A.js → add-cell-with-ai-D7gtGUsg.js} +6 -6
  12. package/dist/assets/{add-connection-dialog-B1BXCjex.js → add-connection-dialog-CpMCc97S.js} +1 -1
  13. package/dist/assets/{agent-panel-CDFUc1uu.js → agent-panel-BSFYqJ9B.js} +3 -3
  14. package/dist/assets/ai-model-dropdown-D575Vid8.js +13 -0
  15. package/dist/assets/alert-dialog-8YiYLrfr.js +1 -0
  16. package/dist/assets/any-language-editor-BWmz0P_C.js +1 -0
  17. package/dist/assets/{app-config-button-AdV-QDD7.js → app-config-button-Cfcg_5Bz.js} +1 -1
  18. package/dist/assets/arrays-0R2reF2y.js +1 -0
  19. package/dist/assets/{blob-BG8yoQmx.js → blob-CszMu60N.js} +1 -1
  20. package/dist/assets/{button-COI-NGrx.js → button-Cl7haVNh.js} +1 -1
  21. package/dist/assets/{cache-panel-DTY1dqvi.js → cache-panel-DuBsA6oO.js} +1 -1
  22. package/dist/assets/{capabilities-BJvf-MD4.js → capabilities-DcB-Dd0T.js} +1 -1
  23. package/dist/assets/cell-editor-BLpOlLnM.js +42 -0
  24. package/dist/assets/cell-link-Cj0gGaMV.js +1 -0
  25. package/dist/assets/cells-SvbLY10y.js +220 -0
  26. package/dist/assets/{chat-display-DhgI2MS9.js → chat-display-D43_g3TX.js} +1 -1
  27. package/dist/assets/chat-panel-B_HAJMwx.js +4 -0
  28. package/dist/assets/chat-ui-BEcYCphu.js +4 -0
  29. package/dist/assets/circle-B0vOU-Dh.js +1 -0
  30. package/dist/assets/{code-visibility-BJImdpDi.js → code-visibility-D1Wf7-vD.js} +1 -1
  31. package/dist/assets/column-preview-CrzaJKk8.js +1 -0
  32. package/dist/assets/command-palette-Bm9yIVcD.js +1 -0
  33. package/dist/assets/{common-Sl3uthjg.js → common-BJyUxCzv.js} +1 -1
  34. package/dist/assets/{components-CskjK6xZ.js → components-9p_w2C6e.js} +1 -1
  35. package/dist/assets/components-B6gDDccL.js +1 -0
  36. package/dist/assets/{components-3cou6Mka.js → components-D1f_Cz4i.js} +1 -1
  37. package/dist/assets/config-7IjqNuVp.js +1 -0
  38. package/dist/assets/config-BC32AAdw.js +1 -0
  39. package/dist/assets/{config-CA1V-wjh.js → config-CXnC3MRv.js} +1 -1
  40. package/dist/assets/{copy-D8O_CYCG.js → copy-74EjuZso.js} +1 -1
  41. package/dist/assets/{copy-icon-BIiRXh_3.js → copy-icon-Craaocbu.js} +1 -1
  42. package/dist/assets/{createReducer-DgRODTW6.js → createReducer-B04CIO-e.js} +1 -1
  43. package/dist/assets/{datasource-DfbNb83e.js → datasource-C8KSVfSD.js} +1 -1
  44. package/dist/assets/{dates-CfmdTL6B.js → dates-CaPZVGtm.js} +1 -1
  45. package/dist/assets/{dependency-graph-panel-L5cBE5sl.js → dependency-graph-panel-BhmyJbUl.js} +3 -3
  46. package/dist/assets/dist-gaK_BThd.js +1 -0
  47. package/dist/assets/{documentation-panel-D7S8JIc2.js → documentation-panel-DcVG0Q0d.js} +1 -1
  48. package/dist/assets/download-Bx52VRE4.js +9 -0
  49. package/dist/assets/dropdown-menu-Cwi17BoX.js +1 -0
  50. package/dist/assets/edit-page-DUrwOHR-.js +9 -0
  51. package/dist/assets/{error-banner-COZ7SfYV.js → error-banner-m3mastc-.js} +1 -1
  52. package/dist/assets/{error-entries-CLnPDv7b.js → error-entries-11OuHzUF.js} +1 -1
  53. package/dist/assets/{error-panel-D2xrYLue.js → error-panel-XJy5S25F.js} +1 -1
  54. package/dist/assets/{es-Cqst59WX.js → es-Rg27gAEy.js} +1 -1
  55. package/dist/assets/{feedback-button-DzPunIqU.js → feedback-button-B7jh_B4w.js} +1 -1
  56. package/dist/assets/feedback-button-C-eKtxXE.js +1 -0
  57. package/dist/assets/file-explorer-panel-CnVxbF4A.js +1 -0
  58. package/dist/assets/{file-name-input-B4fRaQkI.js → file-name-input-BJuqjQqH.js} +2 -2
  59. package/dist/assets/floating-outline-8yyZ-MOJ.js +1 -0
  60. package/dist/assets/{formats-yZ06h1Pl.js → formats-CYyvbiZA.js} +1 -1
  61. package/dist/assets/{formatting-BqrP-n49.js → formatting-DW2u7HXI.js} +1 -1
  62. package/dist/assets/fullscreen-D-ldV-19.js +41 -0
  63. package/dist/assets/{gallery-page-BefvdsM7.js → gallery-page-DJvGHePf.js} +1 -1
  64. package/dist/assets/{ganttDiagram-EL5Y4UJY-2n7Ig5Jm.js → ganttDiagram-EL5Y4UJY-CYqkCfFG.js} +1 -1
  65. package/dist/assets/{glide-data-editor-C3eaYlXg.js → glide-data-editor-Cyc8DHZx.js} +2 -2
  66. package/dist/assets/{glide-utils-CIrAxdjv.js → glide-utils-DsTeJ7WA.js} +2 -2
  67. package/dist/assets/home-page-tRZJmSU6.js +1 -0
  68. package/dist/assets/{hooks-DzML9nez.js → hooks-CxGwybGw.js} +1 -1
  69. package/dist/assets/{html-to-image-DK9Zl1lU.js → html-to-image-BW0fcUS8.js} +1 -1
  70. package/dist/assets/index-CoxbqhGH.js +30 -0
  71. package/dist/assets/index-u08m0hQE.css +2 -0
  72. package/dist/assets/{input-BoBxR50a.js → input-DLA5Dhn3.js} +2 -2
  73. package/dist/assets/kiosk-mode-Cbxffiz9.js +1 -0
  74. package/dist/assets/{layout-Ck1RoL1B.js → layout-DvXJxBiL.js} +4 -4
  75. package/dist/assets/linear-Bma8J3iM.js +1 -0
  76. package/dist/assets/links-UwsB2RA1.js +1 -0
  77. package/dist/assets/{logs-panel-BRytaWaO.js → logs-panel-KtsY7TrR.js} +1 -1
  78. package/dist/assets/{markdown-renderer-DX0Xrrfy.js → markdown-renderer-DUgV7_fm.js} +1 -1
  79. package/dist/assets/menu-items-yD7IV3V4.js +1 -0
  80. package/dist/assets/{mermaid-C4EiVqcd.js → mermaid-DmekSy8J.js} +2 -2
  81. package/dist/assets/{name-cell-input-DlpTvPLa.js → name-cell-input-C3-Cj-Ek.js} +1 -1
  82. package/dist/assets/numbers-DJK15_4S.js +1 -0
  83. package/dist/assets/{objects-snlMn4yk.js → objects-rLPlQ3X_.js} +1 -1
  84. package/dist/assets/{once-Haz_uxEL.js → once-6KNTRW0u.js} +1 -1
  85. package/dist/assets/{outline-panel-B2WIpz-1.js → outline-panel-BzyY4JA6.js} +1 -1
  86. package/dist/assets/{package-data-dv4FBHxR.js → package-data-CKPmBDtg.js} +1 -1
  87. package/dist/assets/packages-panel-DxosbWko.js +1 -0
  88. package/dist/assets/{panel-accordion-state-BqSH5ttk.js → panel-accordion-state-BRbTib2B.js} +1 -1
  89. package/dist/assets/panels-Da3071Q4.js +1 -0
  90. package/dist/assets/precisionRound-BxlUs8G4.js +1 -0
  91. package/dist/assets/process-output-CSwx7rvo.js +1 -0
  92. package/dist/assets/{quadrantDiagram-AXDQQJYC-yBhCDI7E.js → quadrantDiagram-AXDQQJYC-D9KH5Zge.js} +1 -1
  93. package/dist/assets/react-vega-BTNeboR2.js +189 -0
  94. package/dist/assets/{readonly-code-display-MnMEoYW5.js → readonly-code-display-B9y9423Y.js} +1 -1
  95. package/dist/assets/{readonly-python-code-ggs4hAzC.js → readonly-python-code-Dgw6trlk.js} +1 -1
  96. package/dist/assets/{renderShortcut-C1JwYcqW.js → renderShortcut-Bxv9ZLnD.js} +1 -1
  97. package/dist/assets/{requests-lt0JK8Jt.js → requests-BIFR-h4M.js} +1 -1
  98. package/dist/assets/requests-DuLJN9Tf.js +1 -0
  99. package/dist/assets/{reveal-component-PiV1eQk9.js → reveal-component-B9A4wkG-.js} +37 -37
  100. package/dist/assets/run-page-C1MQ5b_A.js +1 -0
  101. package/dist/assets/{runs-BLp5jezv.js → runs-C8uOPNAW.js} +1 -1
  102. package/dist/assets/{runtime-details-state-CoL-p0MC.js → runtime-details-state-D_hOQL9T.js} +1 -1
  103. package/dist/assets/{save-worker-BbUSwZRG.js → save-worker-UwdGcNK5.js} +2 -1
  104. package/dist/assets/scratchpad-panel-CBCsPmMW.js +1 -0
  105. package/dist/assets/{scroll-to-bottom-button-1FyowpWV.js → scroll-to-bottom-button-CidjyqiH.js} +1 -1
  106. package/dist/assets/secrets-panel-ConQpchl.js +1 -0
  107. package/dist/assets/select-CgWQvW1F.js +1 -0
  108. package/dist/assets/{session-DqoWmb7X.js → session-BHgGkjDm.js} +1 -1
  109. package/dist/assets/session-panel-CiHCKPlx.js +1 -0
  110. package/dist/assets/snippets-panel-C0VDE_4i.js +1 -0
  111. package/dist/assets/{spec-BfSBcO5B.js → spec-DFtwOyXT.js} +1 -1
  112. package/dist/assets/state-BYETGwDZ.js +1 -0
  113. package/dist/assets/{state-uwRvJLb8.js → state-CZu2E2Lb.js} +1 -1
  114. package/dist/assets/{state-C3oDoyFe.js → state-ClBFtZxn.js} +1 -1
  115. package/dist/assets/{state-DxQnC_1I.js → state-CrLrURYG.js} +1 -1
  116. package/dist/assets/{state-DtGB7xeJ.js → state-DrraMmqz.js} +1 -1
  117. package/dist/assets/state-DvU2AiFx.js +107 -0
  118. package/dist/assets/{strings-B2vv-ENv.js → strings-3lNX212T.js} +1 -1
  119. package/dist/assets/{swiper-component-a07domrZ.js → swiper-component-BwGv-Pu1.js} +1 -1
  120. package/dist/assets/switch-D2gdC_ep.js +1 -0
  121. package/dist/assets/tabs-BLczoY3k.js +1 -0
  122. package/dist/assets/{terminal-wnSHYT8N.js → terminal-DLgGyFIP.js} +1 -1
  123. package/dist/assets/{time-MgToa8VM.js → time-DswSXBDk.js} +1 -1
  124. package/dist/assets/toast-trUlkvx3.js +1 -0
  125. package/dist/assets/tooltip-B5lAA_jn.js +1 -0
  126. package/dist/assets/tooltip-BiQdpXA0.js +61 -0
  127. package/dist/assets/tracing-C5d51Nmi.js +1 -0
  128. package/dist/assets/tracing-panel-B89R8dWE.js +2 -0
  129. package/dist/assets/{tree-actions-DnUokmva.js → tree-actions-Cph8FVzh.js} +1 -1
  130. package/dist/assets/use-restore-focus-DMSzeuUr.js +1 -0
  131. package/dist/assets/{useAddCell-IN24thff.js → useAddCell-VPkB72pn.js} +1 -1
  132. package/dist/assets/useAsyncData-qvoPYHtx.js +1 -0
  133. package/dist/assets/useBoolean-BkeUcn1n.js +1 -0
  134. package/dist/assets/useCellActionButton--zI3GFnt.js +1 -0
  135. package/dist/assets/useDebounce-DwTQ_1Pu.js +1 -0
  136. package/dist/assets/{useDeepCompareMemoize-DFIVN9dn.js → useDeepCompareMemoize-B2DVK2De.js} +1 -1
  137. package/dist/assets/useDelayElapsed-BlsDT4TV.js +1 -0
  138. package/dist/assets/{useDeleteCell-fQlM46Y2.js → useDeleteCell-CjewKeSr.js} +1 -1
  139. package/dist/assets/{useDependencyPanelTab-ImXYINm_.js → useDependencyPanelTab-Bt_ka-wl.js} +1 -1
  140. package/dist/assets/{useEvent-Dfcbgjhg.js → useEvent-BDjgaBtz.js} +1 -1
  141. package/dist/assets/{useEventListener-D9cftcHj.js → useEventListener-DPOTkksd.js} +1 -1
  142. package/dist/assets/{useIframeCapabilities-CwTkczVN.js → useIframeCapabilities-sHeZt_EA.js} +1 -1
  143. package/dist/assets/{useInstallPackage-BW06eter.js → useInstallPackage-BfNKN33w.js} +1 -1
  144. package/dist/assets/{useInterval--x3s1VpI.js → useInterval-BcdwHHB5.js} +1 -1
  145. package/dist/assets/useNotebookActions-DV2S6KaG.js +1 -0
  146. package/dist/assets/{useRunCells-DSJPXE-j.js → useRunCells-BupCZpzk.js} +1 -1
  147. package/dist/assets/{useSplitCell-DQyMF5gd.js → useSplitCell-CaLIR0TS.js} +1 -1
  148. package/dist/assets/useStateForKey-CGMJQT8x.js +1 -0
  149. package/dist/assets/{useTheme-n8Dj1zH7.js → useTheme-C2dnh2vM.js} +1 -1
  150. package/dist/assets/{utils-CaQYvazl.js → utils-DfElfBpz.js} +1 -1
  151. package/dist/assets/vega-component-DJf6ho22.js +1 -0
  152. package/dist/assets/{vega-embed-container-DJPNkHPb.js → vega-embed-container-DtArSJz1.js} +1 -1
  153. package/dist/assets/vega-loader.browser-Bu25TKax.js +6 -0
  154. package/dist/assets/worker-jm2VC7pS.js +159 -0
  155. package/dist/assets/{write-secret-modal-DzKAInL2.js → write-secret-modal-CBi2vNK_.js} +1 -1
  156. package/dist/assets/{xychartDiagram-S5SC5T6Z-KbGzG6-u.js → xychartDiagram-S5SC5T6Z-CeRnBS5e.js} +1 -1
  157. package/dist/index.html +81 -79
  158. package/package.json +14 -14
  159. package/src/__tests__/host-imports.test.ts +1 -0
  160. package/src/__tests__/module-entry.test.ts +32 -0
  161. package/src/__tests__/mount.test.ts +0 -20
  162. package/src/components/ai/__tests__/ai-model-dropdown.test.tsx +63 -0
  163. package/src/components/ai/ai-model-dropdown.tsx +11 -6
  164. package/src/components/app-config/ai-config.tsx +7 -2
  165. package/src/components/chat/__tests__/message-queue.test.tsx +17 -0
  166. package/src/components/chat/acp/__tests__/session-tabs.test.tsx +43 -0
  167. package/src/components/chat/acp/__tests__/state.test.ts +2 -2
  168. package/src/components/chat/acp/blocks.tsx +3 -2
  169. package/src/components/chat/acp/session-tabs.tsx +8 -3
  170. package/src/components/chat/chat-components.tsx +2 -0
  171. package/src/components/chat/chat-panel.tsx +9 -8
  172. package/src/components/chat/chat-utils.ts +4 -8
  173. package/src/components/data-table/TableTopBar.tsx +2 -0
  174. package/src/components/data-table/__tests__/chart-spec-model.test.ts +195 -195
  175. package/src/components/data-table/__tests__/column-explorer.test.tsx +27 -1
  176. package/src/components/data-table/__tests__/columns.test.tsx +105 -0
  177. package/src/components/data-table/__tests__/context-menu-interaction.test.tsx +130 -0
  178. package/src/components/data-table/__tests__/data-table.test.tsx +1 -0
  179. package/src/components/data-table/__tests__/date-popover.test.tsx +72 -0
  180. package/src/components/data-table/__tests__/export-actions.test.tsx +105 -0
  181. package/src/components/data-table/__tests__/keyboard-selection.test.tsx +188 -0
  182. package/src/components/data-table/__tests__/search-highlight.test.tsx +109 -0
  183. package/src/components/data-table/__tests__/url-detector.test.tsx +74 -0
  184. package/src/components/data-table/cell-selection/feature.ts +2 -2
  185. package/src/components/data-table/cell-selection/types.ts +2 -2
  186. package/src/components/data-table/charts/__tests__/chart-panel.test.tsx +74 -1
  187. package/src/components/data-table/charts/__tests__/spec-snapshot.test.ts +20 -20
  188. package/src/components/data-table/charts/__tests__/spec.test.ts +78 -52
  189. package/src/components/data-table/charts/__tests__/storage.test.ts +4 -1
  190. package/src/components/data-table/charts/chart-spec/spec.ts +68 -43
  191. package/src/components/data-table/charts/charts.tsx +40 -30
  192. package/src/components/data-table/charts/storage.ts +16 -5
  193. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
  194. package/src/components/data-table/column-summary/chart-spec-model.tsx +23 -16
  195. package/src/components/data-table/column-summary/column-summary.tsx +2 -4
  196. package/src/components/data-table/column-visibility-dropdown.tsx +8 -13
  197. package/src/components/data-table/columns.tsx +45 -46
  198. package/src/components/data-table/context-menu.tsx +36 -20
  199. package/src/components/data-table/data-table.tsx +13 -1
  200. package/src/components/data-table/date-popover.tsx +6 -4
  201. package/src/components/data-table/export-actions.tsx +76 -48
  202. package/src/components/data-table/range-focus/atoms.ts +4 -6
  203. package/src/components/data-table/range-focus/use-cell-range-selection.ts +65 -38
  204. package/src/components/data-table/range-focus/use-scroll-into-view.ts +21 -2
  205. package/src/components/data-table/renderers.tsx +16 -7
  206. package/src/components/data-table/row-viewer-panel/__tests__/row-viewer.test.tsx +24 -1
  207. package/src/components/data-table/row-viewer-panel/row-viewer.tsx +4 -4
  208. package/src/components/data-table/search-highlight.tsx +79 -0
  209. package/src/components/data-table/types.ts +1 -0
  210. package/src/components/data-table/url-detector.tsx +49 -9
  211. package/src/components/datasources/__tests__/column-actions.test.tsx +97 -0
  212. package/src/components/datasources/__tests__/column-preview.test.tsx +63 -2
  213. package/src/components/datasources/__tests__/table-list.test.tsx +118 -0
  214. package/src/components/datasources/column-preview.tsx +8 -2
  215. package/src/components/datasources/datasources.tsx +48 -35
  216. package/src/components/debugger/debugger-code.tsx +5 -0
  217. package/src/components/dependency-graph/dependency-graph-tree.tsx +8 -8
  218. package/src/components/dependency-graph/elements.ts +24 -21
  219. package/src/components/dependency-graph/panels.tsx +2 -1
  220. package/src/components/dependency-graph/utils/__tests__/layout.test.ts +18 -11
  221. package/src/components/editor/SortableCell.tsx +1 -3
  222. package/src/components/editor/__tests__/dynamic-favicon.test.tsx +111 -18
  223. package/src/components/editor/__tests__/package-alert.test.tsx +22 -1
  224. package/src/components/editor/actions/__tests__/pair-with-agent-modal.test.tsx +24 -0
  225. package/src/components/editor/actions/pair-with-agent-modal.tsx +18 -15
  226. package/src/components/editor/ai/add-cell-with-ai.tsx +3 -3
  227. package/src/components/editor/ai/ai-completion-editor.tsx +1 -0
  228. package/src/components/editor/alerts/startup-logs-alert.tsx +1 -0
  229. package/src/components/editor/cell/CreateCellButton.tsx +8 -10
  230. package/src/components/editor/cell/DeleteButton.tsx +1 -0
  231. package/src/components/editor/cell/__tests__/useShouldShowInterrupt.test.ts +39 -0
  232. package/src/components/editor/cell/code/__tests__/language-toggle.test.tsx +54 -0
  233. package/src/components/editor/cell/code/cell-editor.tsx +1 -1
  234. package/src/components/editor/cell/code/language-toggle.tsx +8 -7
  235. package/src/components/editor/cell/collapse.tsx +5 -3
  236. package/src/components/editor/cell/useShouldShowInterrupt.ts +2 -12
  237. package/src/components/editor/chrome/panels/__tests__/packages-panel.test.tsx +30 -1
  238. package/src/components/editor/chrome/panels/cache-panel.tsx +1 -0
  239. package/src/components/editor/chrome/panels/outline/__tests__/outline-keyboard.test.tsx +84 -0
  240. package/src/components/editor/chrome/panels/outline/floating-outline.tsx +39 -14
  241. package/src/components/editor/chrome/panels/outline/useActiveOutline.tsx +3 -2
  242. package/src/components/editor/chrome/panels/packages-panel.tsx +4 -7
  243. package/src/components/editor/chrome/panels/secrets-panel.tsx +1 -0
  244. package/src/components/editor/chrome/panels/snippets-panel.tsx +5 -1
  245. package/src/components/editor/chrome/wrapper/__tests__/attachment-status.test.tsx +12 -18
  246. package/src/components/editor/chrome/wrapper/__tests__/pending-ai-cells.test.tsx +58 -1
  247. package/src/components/editor/chrome/wrapper/footer-items/runtime-settings.tsx +1 -7
  248. package/src/components/editor/chrome/wrapper/pending-ai-cells.tsx +12 -2
  249. package/src/components/editor/chrome/wrapper/storage.ts +1 -1
  250. package/src/components/editor/connections/components.tsx +1 -1
  251. package/src/components/editor/controls/__tests__/command-palette.test.tsx +53 -0
  252. package/src/components/editor/controls/__tests__/keyboard-shortcuts.test.tsx +61 -0
  253. package/src/components/editor/controls/command-palette.tsx +22 -10
  254. package/src/components/editor/controls/keyboard-shortcuts.tsx +14 -5
  255. package/src/components/editor/dynamic-favicon.tsx +21 -40
  256. package/src/components/editor/errors/__tests__/send-error-report-button.test.tsx +12 -23
  257. package/src/components/editor/file-tree/__tests__/file-explorer-interactions.test.tsx +6 -0
  258. package/src/components/editor/file-tree/__tests__/file-explorer-navigation.test.tsx +47 -0
  259. package/src/components/editor/file-tree/__tests__/use-file-search.test.tsx +91 -0
  260. package/src/components/editor/file-tree/file-explorer.tsx +45 -8
  261. package/src/components/editor/file-tree/file-name-input.tsx +1 -0
  262. package/src/components/editor/file-tree/file-viewer.tsx +4 -2
  263. package/src/components/editor/file-tree/use-file-search.ts +35 -21
  264. package/src/components/editor/header/status.tsx +28 -5
  265. package/src/components/editor/links/__tests__/cell-link.test.tsx +146 -0
  266. package/src/components/editor/links/cell-link.tsx +14 -5
  267. package/src/components/editor/navigation/focus-utils.ts +4 -4
  268. package/src/components/editor/notebook-banner.tsx +1 -0
  269. package/src/components/editor/notebook-cell.tsx +11 -2
  270. package/src/components/editor/output/MarimoTracebackOutput.tsx +19 -17
  271. package/src/components/editor/output/__tests__/traceback.test.tsx +27 -1
  272. package/src/components/editor/output/ansi-reduce.ts +33 -20
  273. package/src/components/editor/output/console/ConsoleOutput.tsx +19 -25
  274. package/src/components/editor/package-alert.tsx +14 -7
  275. package/src/components/editor/renderers/grid-layout/grid-layout.tsx +12 -6
  276. package/src/components/editor/renderers/vertical-layout/sidebar/toggle.tsx +7 -1
  277. package/src/components/home/components.tsx +17 -31
  278. package/src/components/icons/__tests__/large-spinner.test.tsx +39 -0
  279. package/src/components/icons/large-spinner.tsx +3 -14
  280. package/src/components/icons/spinner.tsx +1 -1
  281. package/src/components/mcp/mcp-status-indicator.tsx +1 -1
  282. package/src/components/pages/__tests__/home-page.test.tsx +116 -0
  283. package/src/components/pages/home-page.tsx +164 -91
  284. package/src/components/scratchpad/scratchpad.test.tsx +95 -0
  285. package/src/components/scratchpad/scratchpad.tsx +16 -3
  286. package/src/components/slides/reveal-component.tsx +4 -2
  287. package/src/components/slides/slide-cell-view.tsx +1 -1
  288. package/src/components/slides/slide-form.tsx +1 -0
  289. package/src/components/tracing/tracing-keyboard.test.tsx +85 -0
  290. package/src/components/tracing/tracing.tsx +45 -41
  291. package/src/components/ui/__tests__/draggable-popover.test.tsx +24 -0
  292. package/src/components/ui/alert-dialog.tsx +1 -1
  293. package/src/components/ui/draggable-popover.tsx +24 -2
  294. package/src/core/ai/context/providers/datasource.ts +6 -2
  295. package/src/core/ai/tools/base.ts +16 -7
  296. package/src/core/ai/tools/edit-notebook-tool.ts +47 -45
  297. package/src/core/ai/tools/registry.ts +13 -8
  298. package/src/core/ai/tools/sample-tool.ts +6 -7
  299. package/src/core/attachments/state.ts +5 -8
  300. package/src/core/cells/__tests__/__snapshots__/cells.test.ts.snap +4 -0
  301. package/src/core/cells/__tests__/cell.test.ts +39 -0
  302. package/src/core/cells/__tests__/cells.test.ts +3 -1
  303. package/src/core/cells/__tests__/collapseConsoleOutputs.test.ts +54 -0
  304. package/src/core/cells/__tests__/notebook-outline.test.ts +113 -0
  305. package/src/core/cells/__tests__/session.test.ts +117 -36
  306. package/src/core/cells/cell.ts +14 -3
  307. package/src/core/cells/cells.ts +3 -1
  308. package/src/core/cells/pending-delete-service.ts +2 -6
  309. package/src/core/cells/session.ts +1 -1
  310. package/src/core/cells/types.ts +10 -1
  311. package/src/core/codemirror/__tests__/setup.test.ts +29 -29
  312. package/src/core/codemirror/cells/__tests__/extensions.test.ts +15 -0
  313. package/src/core/codemirror/cells/extensions.ts +7 -3
  314. package/src/core/codemirror/keymaps/vim.ts +2 -6
  315. package/src/core/codemirror/language/__tests__/sql.test.ts +22 -20
  316. package/src/core/codemirror/language/extension.ts +8 -8
  317. package/src/core/codemirror/language/languages/markdown.ts +8 -6
  318. package/src/core/codemirror/language/languages/python.ts +16 -10
  319. package/src/core/codemirror/language/languages/sql/sql.ts +9 -7
  320. package/src/core/codemirror/language/panel/panel.tsx +1 -0
  321. package/src/core/codemirror/language/types.ts +7 -7
  322. package/src/core/codemirror/rtc/extension.ts +24 -12
  323. package/src/core/codemirror/rtc/loro/awareness.ts +34 -19
  324. package/src/core/codemirror/rtc/loro/sync.ts +1 -0
  325. package/src/core/codemirror/utils.ts +1 -0
  326. package/src/core/datasets/__tests__/data-source-discovery.test.ts +4 -4
  327. package/src/core/datasets/data-source-discovery.ts +4 -6
  328. package/src/core/document/__tests__/codemirror.test.ts +485 -0
  329. package/src/core/document/__tests__/draft.test.ts +322 -0
  330. package/src/core/document/__tests__/fixtures.ts +92 -0
  331. package/src/core/document/__tests__/hooks.test.tsx +386 -0
  332. package/src/core/document/__tests__/lifecycle-scenarios.test.ts +61 -0
  333. package/src/core/document/__tests__/model.test.ts +191 -0
  334. package/src/core/document/__tests__/protocol-fixtures.ts +38 -0
  335. package/src/core/document/__tests__/recovery-scenarios.test.ts +230 -0
  336. package/src/core/document/__tests__/scenario-fixture.ts +43 -0
  337. package/src/core/document/__tests__/scenarios.test.ts +205 -0
  338. package/src/core/document/__tests__/state.test.ts +438 -0
  339. package/src/core/document/__tests__/submission.test.ts +203 -0
  340. package/src/core/document/__tests__/test-host.test.ts +92 -0
  341. package/src/core/document/__tests__/test-host.ts +247 -0
  342. package/src/core/document/__tests__/test-notebook.ts +149 -0
  343. package/src/core/document/__tests__/user.ts +61 -0
  344. package/src/core/document/codemirror.ts +311 -0
  345. package/src/core/document/draft.ts +472 -0
  346. package/src/core/document/hooks.tsx +118 -0
  347. package/src/core/document/index.ts +15 -0
  348. package/src/core/document/model.ts +55 -0
  349. package/src/core/document/select.ts +41 -0
  350. package/src/core/document/state.ts +374 -0
  351. package/src/core/document/sync.ts +369 -0
  352. package/src/core/host/AGENTS.md +8 -2
  353. package/src/core/host/__tests__/attachments.test.ts +56 -0
  354. package/src/core/host/__tests__/document.test.ts +126 -0
  355. package/src/core/host/__tests__/fixtures.ts +71 -0
  356. package/src/core/host/__tests__/replica.test.ts +550 -0
  357. package/src/core/host/__tests__/static.test.ts +169 -0
  358. package/src/core/host/__tests__/wasm.test.ts +162 -0
  359. package/src/core/host/backend.ts +19 -0
  360. package/src/core/host/connection.ts +1 -40
  361. package/src/core/host/index.ts +14 -0
  362. package/src/core/host/replica.ts +286 -0
  363. package/src/core/host/resources/attachments.ts +22 -0
  364. package/src/core/host/resources/document.ts +101 -0
  365. package/src/core/host/static.ts +72 -0
  366. package/src/core/host/wasm.ts +102 -0
  367. package/src/core/hotkeys/actions.ts +2 -4
  368. package/src/core/islands/__tests__/bootstrap.test.ts +0 -26
  369. package/src/core/islands/bootstrap.ts +0 -1
  370. package/src/core/islands/components/__tests__/IslandControls.test.tsx +7 -5
  371. package/src/core/kernel/__tests__/RuntimeState.test.ts +1 -1
  372. package/src/core/network/connection.ts +4 -2
  373. package/src/core/network/useConnectionNotice.ts +8 -2
  374. package/src/core/runtime/__tests__/createWsUrl.test.ts +77 -7
  375. package/src/core/runtime/__tests__/runtime.test.ts +32 -58
  376. package/src/core/runtime/runtime.ts +38 -42
  377. package/src/core/runtime/types.ts +0 -2
  378. package/src/core/state/__tests__/jotai.test.tsx +108 -0
  379. package/src/core/state/jotai.ts +1 -1
  380. package/src/core/static/__tests__/files.test.ts +38 -10
  381. package/src/core/static/files.ts +2 -0
  382. package/src/core/wasm/bridge.ts +38 -10
  383. package/src/core/wasm/store.ts +3 -3
  384. package/src/core/wasm/worker/bootstrap.ts +2 -1
  385. package/src/core/wasm/worker/getMarimoWheel.ts +1 -1
  386. package/src/core/wasm/worker/types.ts +11 -0
  387. package/src/core/wasm/worker/worker.ts +48 -0
  388. package/src/core/websocket/__tests__/backend.test.ts +200 -0
  389. package/src/core/websocket/__tests__/connection-state.test.ts +0 -12
  390. package/src/core/websocket/__tests__/useNotebookReplica.hook.test.tsx +141 -0
  391. package/src/core/websocket/__tests__/useNotebookSession.hook.test.tsx +154 -428
  392. package/src/core/websocket/backend.ts +106 -0
  393. package/src/core/websocket/connection-state.ts +1 -11
  394. package/src/core/websocket/state.ts +7 -0
  395. package/src/core/websocket/transports/__tests__/notebook.test.ts +445 -0
  396. package/src/core/websocket/transports/notebook.ts +190 -0
  397. package/src/core/websocket/types.ts +2 -2
  398. package/src/core/websocket/useNotebookReplica.ts +69 -0
  399. package/src/core/websocket/useNotebookSession.tsx +10 -22
  400. package/src/css/globals.css +5 -0
  401. package/src/hooks/__tests__/useAsyncData.test.tsx +148 -0
  402. package/src/hooks/__tests__/useDebounce.test.tsx +51 -0
  403. package/src/hooks/__tests__/useDeepCompareMemoize.test.tsx +39 -0
  404. package/src/hooks/__tests__/useDelayElapsed.test.tsx +28 -0
  405. package/src/hooks/__tests__/useInternalStateWithSync.test.tsx +20 -0
  406. package/src/hooks/__tests__/useScript.test.tsx +77 -0
  407. package/src/hooks/__tests__/useStateForKey.test.tsx +257 -0
  408. package/src/hooks/useAsyncData.ts +3 -3
  409. package/src/hooks/useDataSourceDiscovery.ts +6 -4
  410. package/src/hooks/useDebounce.ts +6 -10
  411. package/src/hooks/useDeepCompareMemoize.ts +1 -1
  412. package/src/hooks/useDelayElapsed.ts +14 -10
  413. package/src/hooks/useElapsedTime.ts +3 -3
  414. package/src/hooks/useEventListener.ts +1 -2
  415. package/src/hooks/useInputHistory.ts +4 -7
  416. package/src/hooks/useInternalStateWithSync.ts +6 -6
  417. package/src/hooks/useResizeObserver.ts +4 -7
  418. package/src/hooks/useScript.ts +67 -70
  419. package/src/hooks/useStateForKey.ts +93 -0
  420. package/src/mount.tsx +0 -4
  421. package/src/plugins/__tests__/plugin-object-schemas.test.ts +104 -0
  422. package/src/plugins/core/registerReactComponent.tsx +1 -1
  423. package/src/plugins/impl/CodeEditorPlugin.tsx +1 -1
  424. package/src/plugins/impl/DataEditorPlugin.tsx +1 -1
  425. package/src/plugins/impl/DataTablePlugin.tsx +29 -33
  426. package/src/plugins/impl/DropdownPlugin.tsx +2 -6
  427. package/src/plugins/impl/FileBrowserPlugin.tsx +4 -16
  428. package/src/plugins/impl/FormPlugin.tsx +1 -1
  429. package/src/plugins/impl/RangeSliderPlugin.tsx +0 -1
  430. package/src/plugins/impl/RefreshPlugin.tsx +1 -0
  431. package/src/plugins/impl/SliderPlugin.tsx +6 -8
  432. package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +117 -1
  433. package/src/plugins/impl/__tests__/FileBrowserPlugin.test.tsx +45 -0
  434. package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +24 -3
  435. package/src/plugins/impl/anywidget/__tests__/registry.test.ts +2 -0
  436. package/src/plugins/impl/anywidget/__tests__/widget-binding.test.ts +241 -2
  437. package/src/plugins/impl/anywidget/runtime.ts +21 -9
  438. package/src/plugins/impl/anywidget/widget-binding.ts +160 -82
  439. package/src/plugins/impl/chat/__tests__/chat-prompts.test.tsx +93 -0
  440. package/src/plugins/impl/chat/chat-ui.tsx +14 -11
  441. package/src/plugins/impl/code/any-language-editor.tsx +2 -2
  442. package/src/plugins/impl/data-editor/glide-data-editor.tsx +8 -5
  443. package/src/plugins/impl/data-editor/glide-utils.ts +3 -1
  444. package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +1 -1
  445. package/src/plugins/impl/data-explorer/components/column-summary.tsx +4 -2
  446. package/src/plugins/impl/data-explorer/state/reducer.ts +1 -1
  447. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -2
  448. package/src/plugins/impl/data-frames/__tests__/sidebar.test.tsx +160 -0
  449. package/src/plugins/impl/data-frames/forms/__tests__/__snapshots__/form.test.tsx.snap +66 -66
  450. package/src/plugins/impl/data-frames/panel.tsx +43 -16
  451. package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +5 -3
  452. package/src/plugins/impl/panel/PanelPlugin.tsx +16 -17
  453. package/src/plugins/impl/panel/__tests__/utils.test.ts +39 -1
  454. package/src/plugins/impl/panel/utils.ts +17 -0
  455. package/src/plugins/impl/plotly/PlotlyPlugin.tsx +2 -5
  456. package/src/plugins/impl/plotly/selection.ts +25 -19
  457. package/src/plugins/impl/vega/VegaPlugin.tsx +2 -3
  458. package/src/plugins/impl/vega/make-selectable.ts +4 -7
  459. package/src/plugins/layout/RoutesPlugin.tsx +1 -1
  460. package/src/stories/__tests__/editor-story.test.tsx +33 -0
  461. package/src/stories/button.stories.tsx +1 -0
  462. package/src/stories/editor.stories.tsx +24 -17
  463. package/src/stories/form-wrapper.stories.tsx +2 -2
  464. package/src/stories/select.stories.tsx +2 -2
  465. package/src/stories/switchable-multi-select.stories.tsx +1 -1
  466. package/src/utils/__tests__/arrays.test.ts +35 -0
  467. package/src/utils/__tests__/batch-requests.test.ts +3 -3
  468. package/src/utils/__tests__/numbers.test.ts +48 -1
  469. package/src/utils/__tests__/objects.test.ts +21 -0
  470. package/src/utils/arrays.ts +10 -0
  471. package/src/utils/blob.ts +1 -1
  472. package/src/utils/numbers.ts +28 -17
  473. package/src/utils/objects.ts +3 -7
  474. package/src/utils/once.ts +19 -19
  475. package/src/utils/tracer.ts +9 -5
  476. package/src/utils/zod-utils.ts +1 -3
  477. package/dist/assets/CellStatus-DVOHpdeJ.js +0 -1
  478. package/dist/assets/JsonOutput-Cx1iyibB.js +0 -11
  479. package/dist/assets/MarimoErrorOutput-s_5GOX8k.js +0 -10
  480. package/dist/assets/RunButton-BKoh0zYG.js +0 -1
  481. package/dist/assets/__vite-browser-external-CYO_P3S8.js +0 -1
  482. package/dist/assets/__vite-browser-external-FeDVGZU8.js +0 -1
  483. package/dist/assets/ai-model-dropdown-i1vfGeVi.js +0 -13
  484. package/dist/assets/alert-dialog-BaPGzeOK.js +0 -1
  485. package/dist/assets/any-language-editor-BdTWdMCI.js +0 -1
  486. package/dist/assets/arrays-BqUx5USx.js +0 -1
  487. package/dist/assets/cell-editor-BKJ06H5F.js +0 -21
  488. package/dist/assets/cell-link-8Auigi8P.js +0 -1
  489. package/dist/assets/cells-C6YGYGdi.js +0 -220
  490. package/dist/assets/chat-panel-Cau71Ygr.js +0 -4
  491. package/dist/assets/chat-ui-C5ql1Up-.js +0 -4
  492. package/dist/assets/circle-DXf-VWZG.js +0 -1
  493. package/dist/assets/circle-play-CYIb0qT6.js +0 -1
  494. package/dist/assets/column-preview-BZ_iNhtJ.js +0 -1
  495. package/dist/assets/command-palette-DDC3kBet.js +0 -1
  496. package/dist/assets/components-YBmtV0p6.js +0 -1
  497. package/dist/assets/config-DRIpOKqh.js +0 -1
  498. package/dist/assets/config-Dy28fDwn.js +0 -1
  499. package/dist/assets/dist-iaThVDkA.js +0 -1
  500. package/dist/assets/download-C03FOElq.js +0 -9
  501. package/dist/assets/dropdown-menu-C1rnl-0o.js +0 -1
  502. package/dist/assets/edit-page-D_Rg0gQO.js +0 -9
  503. package/dist/assets/feedback-button-Kla7i5RT.js +0 -1
  504. package/dist/assets/file-explorer-panel-Uk4_QIJQ.js +0 -1
  505. package/dist/assets/floating-outline-B5MaM1JS.js +0 -1
  506. package/dist/assets/fullscreen-B9tHcfpV.js +0 -41
  507. package/dist/assets/home-page-hmvKlc1w.js +0 -4
  508. package/dist/assets/index-6b4mf8Ai.css +0 -2
  509. package/dist/assets/index-ptK1gxmo.js +0 -30
  510. package/dist/assets/kiosk-mode-BZECfg9k.js +0 -1
  511. package/dist/assets/linear-0eij_aAG.js +0 -1
  512. package/dist/assets/link-NuFVR7G9.js +0 -1
  513. package/dist/assets/links-DkkL9DVa.js +0 -1
  514. package/dist/assets/menu-items-BrwnTgyK.js +0 -1
  515. package/dist/assets/numbers-Mk3-CcoU.js +0 -1
  516. package/dist/assets/packages-panel-CI5ff9b-.js +0 -1
  517. package/dist/assets/panels-BCcZ_yLK.js +0 -107
  518. package/dist/assets/precisionRound-Bq_nmf5u.js +0 -1
  519. package/dist/assets/process-output-f3C3PD0Z.js +0 -1
  520. package/dist/assets/react-vega-C3rYGtP6.js +0 -189
  521. package/dist/assets/requests-CgSY1X4a.js +0 -1
  522. package/dist/assets/run-page-AfZhtEh1.js +0 -1
  523. package/dist/assets/scratchpad-panel-D2rWg4k8.js +0 -1
  524. package/dist/assets/secrets-panel-D7KN4tVs.js +0 -1
  525. package/dist/assets/select-DTBn5eTb.js +0 -1
  526. package/dist/assets/session-panel-CnANhcTo.js +0 -1
  527. package/dist/assets/snippets-panel-ClGHtEKQ.js +0 -1
  528. package/dist/assets/state-BAJYRhmO.js +0 -1
  529. package/dist/assets/state-CbjBtkdd.js +0 -3
  530. package/dist/assets/switch-CTaiAjrz.js +0 -1
  531. package/dist/assets/tabs-BuQlZFbt.js +0 -1
  532. package/dist/assets/toast-BGzLGnvw.js +0 -1
  533. package/dist/assets/tooltip-C9TuY18o.js +0 -1
  534. package/dist/assets/tooltip-mT3CGest.js +0 -61
  535. package/dist/assets/tracing-Dz2rYOFL.js +0 -1
  536. package/dist/assets/tracing-panel-DqQY9V91.js +0 -2
  537. package/dist/assets/use-restore-focus-BxEGwIbk.js +0 -1
  538. package/dist/assets/useAsyncData-C7aJJz0Y.js +0 -1
  539. package/dist/assets/useBoolean-d0Tty94N.js +0 -1
  540. package/dist/assets/useCellActionButton-DmaFZ4oF.js +0 -1
  541. package/dist/assets/useDebounce-B_ccBZTp.js +0 -1
  542. package/dist/assets/useNotebookActions-DHt3s-ia.js +0 -1
  543. package/dist/assets/vega-component-IouMe13t.js +0 -1
  544. package/dist/assets/vega-loader.browser-CLRkNgm7.js +0 -6
  545. package/dist/assets/worker-DTQ7oH2A.js +0 -158
  546. package/dist/assets/ws-BXWY541V.js +0 -22
  547. package/src/core/host/__tests__/events.test.ts +0 -46
  548. package/src/core/host/__tests__/notebook-client.test.ts +0 -191
  549. package/src/core/host/__tests__/protocol.test.ts +0 -214
  550. package/src/core/host/events.ts +0 -60
  551. package/src/core/host/notebook-client.ts +0 -226
  552. package/src/core/host/protocol.ts +0 -1943
  553. package/src/core/state/__tests__/jotai.test.ts +0 -25
  554. package/src/core/websocket/__tests__/createConnectionTransport.test.ts +0 -49
  555. package/src/core/websocket/__tests__/useNotebookClient.hook.test.tsx +0 -140
  556. package/src/core/websocket/transports/__tests__/basic.test.ts +0 -275
  557. package/src/core/websocket/transports/__tests__/sse.test.ts +0 -335
  558. package/src/core/websocket/transports/__tests__/transport.test.ts +0 -308
  559. package/src/core/websocket/transports/__tests__/ws.test.ts +0 -125
  560. package/src/core/websocket/transports/basic.ts +0 -102
  561. package/src/core/websocket/transports/create.ts +0 -31
  562. package/src/core/websocket/transports/sse.ts +0 -308
  563. package/src/core/websocket/transports/transport.ts +0 -50
  564. package/src/core/websocket/transports/ws.ts +0 -98
  565. package/src/core/websocket/useNotebookClient.ts +0 -80
package/dist/index.html CHANGED
@@ -66,11 +66,11 @@
66
66
  <marimo-server-token data-token="{{ server_token }}" hidden></marimo-server-token>
67
67
  <!-- /TODO -->
68
68
  <title>{{ title }}</title>
69
- <script type="module" crossorigin src="./assets/index-ptK1gxmo.js"></script>
69
+ <script type="module" crossorigin src="./assets/index-CoxbqhGH.js"></script>
70
70
  <link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-B0Z9INg1.js">
71
71
  <link rel="modulepreload" crossorigin href="./assets/react-DVplv7_D.js">
72
72
  <link rel="modulepreload" crossorigin href="./assets/compiler-runtime-BrajqUja.js">
73
- <link rel="modulepreload" crossorigin href="./assets/useEvent-Dfcbgjhg.js">
73
+ <link rel="modulepreload" crossorigin href="./assets/useEvent-BDjgaBtz.js">
74
74
  <link rel="modulepreload" crossorigin href="./assets/react-dom-_LrxgvjW.js">
75
75
  <link rel="modulepreload" crossorigin href="./assets/schemas-ChRqMOTL.js">
76
76
  <link rel="modulepreload" crossorigin href="./assets/isObject-BCaOs5rp.js">
@@ -79,55 +79,55 @@
79
79
  <link rel="modulepreload" crossorigin href="./assets/debounce-aFmHgJZY.js">
80
80
  <link rel="modulepreload" crossorigin href="./assets/isArrayLikeObject-DnwgSs_Z.js">
81
81
  <link rel="modulepreload" crossorigin href="./assets/_baseMerge-CQpUq7ep.js">
82
- <link rel="modulepreload" crossorigin href="./assets/objects-snlMn4yk.js">
83
- <link rel="modulepreload" crossorigin href="./assets/useEventListener-D9cftcHj.js">
82
+ <link rel="modulepreload" crossorigin href="./assets/objects-rLPlQ3X_.js">
83
+ <link rel="modulepreload" crossorigin href="./assets/useEventListener-DPOTkksd.js">
84
84
  <link rel="modulepreload" crossorigin href="./assets/invariant-Ci2dTZ72.js">
85
- <link rel="modulepreload" crossorigin href="./assets/config-CA1V-wjh.js">
85
+ <link rel="modulepreload" crossorigin href="./assets/config-CXnC3MRv.js">
86
86
  <link rel="modulepreload" crossorigin href="./assets/utils-B4K466FK.js">
87
- <link rel="modulepreload" crossorigin href="./assets/session-DqoWmb7X.js">
87
+ <link rel="modulepreload" crossorigin href="./assets/session-BHgGkjDm.js">
88
88
  <link rel="modulepreload" crossorigin href="./assets/Deferred-CrTnjj37.js">
89
- <link rel="modulepreload" crossorigin href="./assets/config-Dy28fDwn.js">
89
+ <link rel="modulepreload" crossorigin href="./assets/config-7IjqNuVp.js">
90
90
  <link rel="modulepreload" crossorigin href="./assets/clsx-DB0hHKMi.js">
91
91
  <link rel="modulepreload" crossorigin href="./assets/cn-ldLVeaqm.js">
92
92
  <link rel="modulepreload" crossorigin href="./assets/jsx-runtime-B74pBk57.js">
93
- <link rel="modulepreload" crossorigin href="./assets/fullscreen-B9tHcfpV.js">
94
- <link rel="modulepreload" crossorigin href="./assets/dist-iaThVDkA.js">
95
- <link rel="modulepreload" crossorigin href="./assets/menu-items-BrwnTgyK.js">
96
- <link rel="modulepreload" crossorigin href="./assets/use-restore-focus-BxEGwIbk.js">
93
+ <link rel="modulepreload" crossorigin href="./assets/fullscreen-D-ldV-19.js">
94
+ <link rel="modulepreload" crossorigin href="./assets/dist-gaK_BThd.js">
95
+ <link rel="modulepreload" crossorigin href="./assets/menu-items-yD7IV3V4.js">
96
+ <link rel="modulepreload" crossorigin href="./assets/use-restore-focus-DMSzeuUr.js">
97
97
  <link rel="modulepreload" crossorigin href="./assets/createLucideIcon-DfJ2oMlA.js">
98
- <link rel="modulepreload" crossorigin href="./assets/circle-DXf-VWZG.js">
99
- <link rel="modulepreload" crossorigin href="./assets/button-COI-NGrx.js">
98
+ <link rel="modulepreload" crossorigin href="./assets/circle-B0vOU-Dh.js">
99
+ <link rel="modulepreload" crossorigin href="./assets/button-Cl7haVNh.js">
100
100
  <link rel="modulepreload" crossorigin href="./assets/check-BQNapYaf.js">
101
101
  <link rel="modulepreload" crossorigin href="./assets/I18nProvider-Cg2I_s1_.js">
102
102
  <link rel="modulepreload" crossorigin href="./assets/useNumberFormatter-D7O_26UI.js">
103
- <link rel="modulepreload" crossorigin href="./assets/select-DTBn5eTb.js">
104
- <link rel="modulepreload" crossorigin href="./assets/toast-BGzLGnvw.js">
105
- <link rel="modulepreload" crossorigin href="./assets/tooltip-C9TuY18o.js">
103
+ <link rel="modulepreload" crossorigin href="./assets/select-CgWQvW1F.js">
104
+ <link rel="modulepreload" crossorigin href="./assets/toast-trUlkvx3.js">
105
+ <link rel="modulepreload" crossorigin href="./assets/tooltip-B5lAA_jn.js">
106
106
  <link rel="modulepreload" crossorigin href="./assets/paths-bkIFVj8h.js">
107
107
  <link rel="modulepreload" crossorigin href="./assets/useLifecycle-Mq4gc5kS.js">
108
108
  <link rel="modulepreload" crossorigin href="./assets/toDate-DOj9Q6uC.js">
109
109
  <link rel="modulepreload" crossorigin href="./assets/database-zap-B_PMVg8T.js">
110
- <link rel="modulepreload" crossorigin href="./assets/alert-dialog-BaPGzeOK.js">
111
- <link rel="modulepreload" crossorigin href="./assets/arrays-BqUx5USx.js">
112
- <link rel="modulepreload" crossorigin href="./assets/once-Haz_uxEL.js">
113
- <link rel="modulepreload" crossorigin href="./assets/numbers-Mk3-CcoU.js">
114
- <link rel="modulepreload" crossorigin href="./assets/useDebounce-B_ccBZTp.js">
115
- <link rel="modulepreload" crossorigin href="./assets/input-BoBxR50a.js">
110
+ <link rel="modulepreload" crossorigin href="./assets/alert-dialog-8YiYLrfr.js">
111
+ <link rel="modulepreload" crossorigin href="./assets/arrays-0R2reF2y.js">
112
+ <link rel="modulepreload" crossorigin href="./assets/once-6KNTRW0u.js">
113
+ <link rel="modulepreload" crossorigin href="./assets/numbers-DJK15_4S.js">
114
+ <link rel="modulepreload" crossorigin href="./assets/useDebounce-DwTQ_1Pu.js">
115
+ <link rel="modulepreload" crossorigin href="./assets/input-DLA5Dhn3.js">
116
116
  <link rel="modulepreload" crossorigin href="./assets/use-toast-Wu434mLr.js">
117
- <link rel="modulepreload" crossorigin href="./assets/requests-lt0JK8Jt.js">
117
+ <link rel="modulepreload" crossorigin href="./assets/requests-BIFR-h4M.js">
118
118
  <link rel="modulepreload" crossorigin href="./assets/uuid-k9DpjH68.js">
119
- <link rel="modulepreload" crossorigin href="./assets/write-secret-modal-DzKAInL2.js">
119
+ <link rel="modulepreload" crossorigin href="./assets/write-secret-modal-CBi2vNK_.js">
120
120
  <link rel="modulepreload" crossorigin href="./assets/plus-C5silF6g.js">
121
121
  <link rel="modulepreload" crossorigin href="./assets/trash-2-DcgaW8fn.js">
122
122
  <link rel="modulepreload" crossorigin href="./assets/preload-helper-uBIymjUX.js">
123
123
  <link rel="modulepreload" crossorigin href="./assets/dist-Cny7_yZb.js">
124
124
  <link rel="modulepreload" crossorigin href="./assets/dist-DBMV4gqt.js">
125
- <link rel="modulepreload" crossorigin href="./assets/capabilities-BJvf-MD4.js">
125
+ <link rel="modulepreload" crossorigin href="./assets/capabilities-DcB-Dd0T.js">
126
126
  <link rel="modulepreload" crossorigin href="./assets/cjs-C49f7GXV.js">
127
- <link rel="modulepreload" crossorigin href="./assets/createReducer-DgRODTW6.js">
127
+ <link rel="modulepreload" crossorigin href="./assets/createReducer-B04CIO-e.js">
128
128
  <link rel="modulepreload" crossorigin href="./assets/dist-qhAY4L2r.js">
129
129
  <link rel="modulepreload" crossorigin href="./assets/marked.esm-B_3iMIUq.js">
130
- <link rel="modulepreload" crossorigin href="./assets/strings-B2vv-ENv.js">
130
+ <link rel="modulepreload" crossorigin href="./assets/strings-3lNX212T.js">
131
131
  <link rel="modulepreload" crossorigin href="./assets/dist-BOfh4hMd.js">
132
132
  <link rel="modulepreload" crossorigin href="./assets/badge-crT3E0Rm.js">
133
133
  <link rel="modulepreload" crossorigin href="./assets/dist-DtH-7lot.js">
@@ -136,83 +136,84 @@
136
136
  <link rel="modulepreload" crossorigin href="./assets/dist-LSsCJjA3.js">
137
137
  <link rel="modulepreload" crossorigin href="./assets/dist-DusFODSa.js">
138
138
  <link rel="modulepreload" crossorigin href="./assets/stex-Dc5bKD4z.js">
139
- <link rel="modulepreload" crossorigin href="./assets/useTheme-n8Dj1zH7.js">
140
- <link rel="modulepreload" crossorigin href="./assets/useAsyncData-C7aJJz0Y.js">
139
+ <link rel="modulepreload" crossorigin href="./assets/useTheme-C2dnh2vM.js">
140
+ <link rel="modulepreload" crossorigin href="./assets/useAsyncData-qvoPYHtx.js">
141
141
  <link rel="modulepreload" crossorigin href="./assets/purify.es--06brOip.js">
142
- <link rel="modulepreload" crossorigin href="./assets/cells-C6YGYGdi.js">
143
- <link rel="modulepreload" crossorigin href="./assets/coerce-DWjFeXOY.js">
142
+ <link rel="modulepreload" crossorigin href="./assets/cells-SvbLY10y.js">
144
143
  <link rel="modulepreload" crossorigin href="./assets/get-DjNf4SIX.js">
145
- <link rel="modulepreload" crossorigin href="./assets/_hasPath-BmRQipI0.js">
146
- <link rel="modulepreload" crossorigin href="./assets/hasIn-yw4sIeJR.js">
147
144
  <link rel="modulepreload" crossorigin href="./assets/_baseSet-Bpdo9AvU.js">
148
- <link rel="modulepreload" crossorigin href="./assets/pick-DKIID_Mo.js">
149
145
  <link rel="modulepreload" crossorigin href="./assets/errors-CNsgAw6m.js">
150
- <link rel="modulepreload" crossorigin href="./assets/config-DRIpOKqh.js">
151
- <link rel="modulepreload" crossorigin href="./assets/state-BAJYRhmO.js">
152
- <link rel="modulepreload" crossorigin href="./assets/state-C3oDoyFe.js">
153
- <link rel="modulepreload" crossorigin href="./assets/LazyAnyLanguageCodeMirror-B4fCknq1.js">
154
- <link rel="modulepreload" crossorigin href="./assets/copy-D8O_CYCG.js">
146
+ <link rel="modulepreload" crossorigin href="./assets/config-BC32AAdw.js">
147
+ <link rel="modulepreload" crossorigin href="./assets/state-BYETGwDZ.js">
148
+ <link rel="modulepreload" crossorigin href="./assets/state-ClBFtZxn.js">
149
+ <link rel="modulepreload" crossorigin href="./assets/LazyAnyLanguageCodeMirror-DoxWX_Wp.js">
150
+ <link rel="modulepreload" crossorigin href="./assets/copy-74EjuZso.js">
155
151
  <link rel="modulepreload" crossorigin href="./assets/micromark-factory-space-D9Dr-k4J.js">
156
152
  <link rel="modulepreload" crossorigin href="./assets/chunk-YOKDWASO-BIpRENEC.js">
157
- <link rel="modulepreload" crossorigin href="./assets/markdown-renderer-DX0Xrrfy.js">
153
+ <link rel="modulepreload" crossorigin href="./assets/markdown-renderer-DUgV7_fm.js">
158
154
  <link rel="modulepreload" crossorigin href="./assets/copy-Djr5m5ac.js">
159
- <link rel="modulepreload" crossorigin href="./assets/copy-icon-BIiRXh_3.js">
160
- <link rel="modulepreload" crossorigin href="./assets/useRunCells-DSJPXE-j.js">
161
- <link rel="modulepreload" crossorigin href="./assets/RenderHTML-DX6i99Op.js">
162
- <link rel="modulepreload" crossorigin href="./assets/blob-BG8yoQmx.js">
155
+ <link rel="modulepreload" crossorigin href="./assets/copy-icon-Craaocbu.js">
156
+ <link rel="modulepreload" crossorigin href="./assets/useRunCells-BupCZpzk.js">
157
+ <link rel="modulepreload" crossorigin href="./assets/RenderHTML-COGZsXQV.js">
158
+ <link rel="modulepreload" crossorigin href="./assets/blob-CszMu60N.js">
163
159
  <link rel="modulepreload" crossorigin href="./assets/kbd-pdKBv96t.js">
164
- <link rel="modulepreload" crossorigin href="./assets/useInstallPackage-BW06eter.js">
160
+ <link rel="modulepreload" crossorigin href="./assets/useInstallPackage-BfNKN33w.js">
165
161
  <link rel="modulepreload" crossorigin href="./assets/share-BZW3tzEX.js">
166
162
  <link rel="modulepreload" crossorigin href="./assets/events-CbeVJ6OD.js">
167
- <link rel="modulepreload" crossorigin href="./assets/state-CbjBtkdd.js">
168
- <link rel="modulepreload" crossorigin href="./assets/ErrorBoundary-CM13wrd8.js">
163
+ <link rel="modulepreload" crossorigin href="./assets/state-DvU2AiFx.js">
164
+ <link rel="modulepreload" crossorigin href="./assets/coerce-DWjFeXOY.js">
165
+ <link rel="modulepreload" crossorigin href="./assets/_hasPath-BmRQipI0.js">
166
+ <link rel="modulepreload" crossorigin href="./assets/hasIn-yw4sIeJR.js">
167
+ <link rel="modulepreload" crossorigin href="./assets/pick-DKIID_Mo.js">
168
+ <link rel="modulepreload" crossorigin href="./assets/ErrorBoundary-Ce-Ujlwj.js">
169
169
  <link rel="modulepreload" crossorigin href="./assets/chevron-right-eAtVhbNZ.js">
170
- <link rel="modulepreload" crossorigin href="./assets/dropdown-menu-C1rnl-0o.js">
171
- <link rel="modulepreload" crossorigin href="./assets/html-to-image-DK9Zl1lU.js">
172
- <link rel="modulepreload" crossorigin href="./assets/download-C03FOElq.js">
173
- <link rel="modulepreload" crossorigin href="./assets/switch-CTaiAjrz.js">
174
- <link rel="modulepreload" crossorigin href="./assets/tabs-BuQlZFbt.js">
170
+ <link rel="modulepreload" crossorigin href="./assets/dropdown-menu-Cwi17BoX.js">
171
+ <link rel="modulepreload" crossorigin href="./assets/html-to-image-BW0fcUS8.js">
172
+ <link rel="modulepreload" crossorigin href="./assets/download-Bx52VRE4.js">
173
+ <link rel="modulepreload" crossorigin href="./assets/switch-D2gdC_ep.js">
174
+ <link rel="modulepreload" crossorigin href="./assets/tabs-BLczoY3k.js">
175
175
  <link rel="modulepreload" crossorigin href="./assets/table-DG7Ap4H4.js">
176
176
  <link rel="modulepreload" crossorigin href="./assets/eye-off-CxVozGAC.js">
177
177
  <link rel="modulepreload" crossorigin href="./assets/refresh-cw-Qw1f8Jhy.js">
178
- <link rel="modulepreload" crossorigin href="./assets/tree-actions-DnUokmva.js">
178
+ <link rel="modulepreload" crossorigin href="./assets/tree-actions-Cph8FVzh.js">
179
179
  <link rel="modulepreload" crossorigin href="./assets/ellipsis-63DyBLHQ.js">
180
180
  <link rel="modulepreload" crossorigin href="./assets/external-link-UrX9KO36.js">
181
181
  <link rel="modulepreload" crossorigin href="./assets/spinner-DyNE-o8o.js">
182
182
  <link rel="modulepreload" crossorigin href="./assets/message-circle-C3rKm8_a.js">
183
183
  <link rel="modulepreload" crossorigin href="./assets/hat-glasses-C8RhSVii.js">
184
184
  <link rel="modulepreload" crossorigin href="./assets/package-GSoSTiIK.js">
185
- <link rel="modulepreload" crossorigin href="./assets/datasource-DfbNb83e.js">
186
- <link rel="modulepreload" crossorigin href="./assets/error-entries-CLnPDv7b.js">
185
+ <link rel="modulepreload" crossorigin href="./assets/datasource-C8KSVfSD.js">
186
+ <link rel="modulepreload" crossorigin href="./assets/error-entries-11OuHzUF.js">
187
187
  <link rel="modulepreload" crossorigin href="./assets/alert-DTaqCu_d.js">
188
- <link rel="modulepreload" crossorigin href="./assets/state-DtGB7xeJ.js">
189
- <link rel="modulepreload" crossorigin href="./assets/cell-link-8Auigi8P.js">
190
- <link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-s_5GOX8k.js">
188
+ <link rel="modulepreload" crossorigin href="./assets/state-DrraMmqz.js">
189
+ <link rel="modulepreload" crossorigin href="./assets/cell-link-Cj0gGaMV.js">
190
+ <link rel="modulepreload" crossorigin href="./assets/MarimoErrorOutput-Bh6o9zle.js">
191
191
  <link rel="modulepreload" crossorigin href="./assets/useDateFormatter-DA-62E-Y.js">
192
192
  <link rel="modulepreload" crossorigin href="./assets/en-US-Buu61juQ.js">
193
193
  <link rel="modulepreload" crossorigin href="./assets/isValid-q_Ad80ug.js">
194
- <link rel="modulepreload" crossorigin href="./assets/dates-CfmdTL6B.js">
194
+ <link rel="modulepreload" crossorigin href="./assets/dates-CaPZVGtm.js">
195
195
  <link rel="modulepreload" crossorigin href="./assets/defaultLocale-CNPGWpMu.js">
196
- <link rel="modulepreload" crossorigin href="./assets/precisionRound-Bq_nmf5u.js">
196
+ <link rel="modulepreload" crossorigin href="./assets/precisionRound-BxlUs8G4.js">
197
197
  <link rel="modulepreload" crossorigin href="./assets/defaultLocale-D5bOh7g6.js">
198
- <link rel="modulepreload" crossorigin href="./assets/vega-loader.browser-CLRkNgm7.js">
199
- <link rel="modulepreload" crossorigin href="./assets/tooltip-mT3CGest.js">
198
+ <link rel="modulepreload" crossorigin href="./assets/vega-loader.browser-Bu25TKax.js">
199
+ <link rel="modulepreload" crossorigin href="./assets/tooltip-BiQdpXA0.js">
200
200
  <link rel="modulepreload" crossorigin href="./assets/react-icons.esm-D6tfmvq8.js">
201
201
  <link rel="modulepreload" crossorigin href="./assets/extends-CvVTau-c.js">
202
202
  <link rel="modulepreload" crossorigin href="./assets/objectWithoutPropertiesLoose-Do6ywDBO.js">
203
- <link rel="modulepreload" crossorigin href="./assets/useIframeCapabilities-CwTkczVN.js">
204
- <link rel="modulepreload" crossorigin href="./assets/error-banner-COZ7SfYV.js">
205
- <link rel="modulepreload" crossorigin href="./assets/utils-CaQYvazl.js">
206
- <link rel="modulepreload" crossorigin href="./assets/formats-yZ06h1Pl.js">
203
+ <link rel="modulepreload" crossorigin href="./assets/useIframeCapabilities-sHeZt_EA.js">
204
+ <link rel="modulepreload" crossorigin href="./assets/error-banner-m3mastc-.js">
205
+ <link rel="modulepreload" crossorigin href="./assets/utils-DfElfBpz.js">
206
+ <link rel="modulepreload" crossorigin href="./assets/formats-CYyvbiZA.js">
207
207
  <link rel="modulepreload" crossorigin href="./assets/table-vrvqpuKJ.js">
208
208
  <link rel="modulepreload" crossorigin href="./assets/react-resizable-panels.browser.esm-Dbe0MrFr.js">
209
- <link rel="modulepreload" crossorigin href="./assets/JsonOutput-Cx1iyibB.js">
209
+ <link rel="modulepreload" crossorigin href="./assets/useStateForKey-CGMJQT8x.js">
210
+ <link rel="modulepreload" crossorigin href="./assets/JsonOutput-CfEBzaqW.js">
210
211
  <link rel="modulepreload" crossorigin href="./assets/chart-no-axes-column-C4_v6fQW.js">
211
212
  <link rel="modulepreload" crossorigin href="./assets/square-function-_W_Lo0P4.js">
212
- <link rel="modulepreload" crossorigin href="./assets/spec-BfSBcO5B.js">
213
+ <link rel="modulepreload" crossorigin href="./assets/spec-DFtwOyXT.js">
213
214
  <link rel="modulepreload" crossorigin href="./assets/semaphore-BjoL5P0h.js">
214
215
  <link rel="modulepreload" crossorigin href="./assets/fileToBase64-BgBraYAr.js">
215
- <link rel="modulepreload" crossorigin href="./assets/useBoolean-d0Tty94N.js">
216
+ <link rel="modulepreload" crossorigin href="./assets/useBoolean-BkeUcn1n.js">
216
217
  <link rel="modulepreload" crossorigin href="./assets/code-xml-SQaZqvcO.js">
217
218
  <link rel="modulepreload" crossorigin href="./assets/file-headphone-Dl35U6h3.js">
218
219
  <link rel="modulepreload" crossorigin href="./assets/file-BPBVl9pl.js">
@@ -220,27 +221,28 @@
220
221
  <link rel="modulepreload" crossorigin href="./assets/file-icons-CdJgUy-I.js">
221
222
  <link rel="modulepreload" crossorigin href="./assets/globe-UdPdIbF7.js">
222
223
  <link rel="modulepreload" crossorigin href="./assets/esm-CI_o7NhW.js">
223
- <link rel="modulepreload" crossorigin href="./assets/useAddCell-IN24thff.js">
224
- <link rel="modulepreload" crossorigin href="./assets/readonly-python-code-ggs4hAzC.js">
224
+ <link rel="modulepreload" crossorigin href="./assets/useAddCell-VPkB72pn.js">
225
+ <link rel="modulepreload" crossorigin href="./assets/readonly-python-code-Dgw6trlk.js">
225
226
  <link rel="modulepreload" crossorigin href="./assets/data-grid-types-DgHVN_Zz.js">
226
- <link rel="modulepreload" crossorigin href="./assets/glide-utils-CIrAxdjv.js">
227
- <link rel="modulepreload" crossorigin href="./assets/column-preview-BZ_iNhtJ.js">
227
+ <link rel="modulepreload" crossorigin href="./assets/glide-utils-DsTeJ7WA.js">
228
+ <link rel="modulepreload" crossorigin href="./assets/column-preview-CrzaJKk8.js">
228
229
  <link rel="modulepreload" crossorigin href="./assets/square-BPmgQFnh.js">
229
230
  <link rel="modulepreload" crossorigin href="./assets/triangle-alert-DmIqR8sY.js">
230
231
  <link rel="modulepreload" crossorigin href="./assets/prop-types-Djf4O40e.js">
231
- <link rel="modulepreload" crossorigin href="./assets/es-Cqst59WX.js">
232
- <link rel="modulepreload" crossorigin href="./assets/package-data-dv4FBHxR.js">
232
+ <link rel="modulepreload" crossorigin href="./assets/es-Rg27gAEy.js">
233
+ <link rel="modulepreload" crossorigin href="./assets/package-data-CKPmBDtg.js">
233
234
  <link rel="modulepreload" crossorigin href="./assets/markdown-export-DzhB1FrN.js">
234
- <link rel="modulepreload" crossorigin href="./assets/renderShortcut-C1JwYcqW.js">
235
+ <link rel="modulepreload" crossorigin href="./assets/renderShortcut-Bxv9ZLnD.js">
235
236
  <link rel="modulepreload" crossorigin href="./assets/bundle.esm-D3tw5rqW.js">
236
237
  <link rel="modulepreload" crossorigin href="./assets/icons-CiZ_8zS-.js">
237
- <link rel="modulepreload" crossorigin href="./assets/useDeepCompareMemoize-DFIVN9dn.js">
238
+ <link rel="modulepreload" crossorigin href="./assets/useDeepCompareMemoize-B2DVK2De.js">
239
+ <link rel="modulepreload" crossorigin href="./assets/useDelayElapsed-BlsDT4TV.js">
238
240
  <link rel="modulepreload" crossorigin href="./assets/pathUtils-DPmlLd-r.js">
239
- <link rel="modulepreload" crossorigin href="./assets/floating-outline-B5MaM1JS.js">
241
+ <link rel="modulepreload" crossorigin href="./assets/floating-outline-8yyZ-MOJ.js">
240
242
  <link rel="stylesheet" crossorigin href="./assets/cells-0PFKL3SH.css">
241
243
  <link rel="stylesheet" crossorigin href="./assets/markdown-renderer-DjIHoF9Z.css">
242
244
  <link rel="stylesheet" crossorigin href="./assets/JsonOutput-B0GmlMnR.css">
243
- <link rel="stylesheet" crossorigin href="./assets/index-6b4mf8Ai.css">
245
+ <link rel="stylesheet" crossorigin href="./assets/index-u08m0hQE.css">
244
246
  </head>
245
247
  <body>
246
248
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marimo-team/frontend",
3
- "version": "0.25.3-dev13",
3
+ "version": "0.25.3-dev134",
4
4
  "main": "dist/main.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -57,13 +57,14 @@
57
57
  "@marimo-team/codemirror-mcp": "^0.1.7",
58
58
  "@marimo-team/codemirror-sql": "^0.3.0",
59
59
  "@marimo-team/llm-info": "workspace:*",
60
+ "@marimo-team/client": "workspace:*",
60
61
  "@marimo-team/marimo-api": "workspace:*",
61
62
  "@marimo-team/react-slotz": "^0.2.0",
62
63
  "@marimo-team/smart-cells": "workspace:*",
63
64
  "@paralleldrive/cuid2": "^2.3.1",
64
65
  "@radix-ui/colors": "^3.0.0",
65
66
  "@radix-ui/react-icons": "~1.3.2",
66
- "@radix-ui/react-use-controllable-state": "~1.2.6",
67
+ "@radix-ui/react-use-controllable-state": "~1.3.0",
67
68
  "@replit/codemirror-vim": "^6.4.0",
68
69
  "@revealjs/react": "^0.2.2",
69
70
  "@streamdown/math": "^1.0.2",
@@ -120,7 +121,7 @@
120
121
  "path-to-regexp": "^8.4.2",
121
122
  "plotly.js": "^3.7.0",
122
123
  "pyodide": "314.0.0",
123
- "radix-ui": "1.6.7",
124
+ "radix-ui": "1.8.1",
124
125
  "react-arborist": "^3.16.0",
125
126
  "react-aria": "3.52.1",
126
127
  "react-aria-components": "1.21.1",
@@ -152,6 +153,7 @@
152
153
  "typescript-memoize": "^1.1.1",
153
154
  "use-acp": "0.2.6",
154
155
  "use-resize-observer": "^9.1.0",
156
+ "vega": "6.2.0",
155
157
  "vega-lite": "6.4.3",
156
158
  "vega-loader": "^5.1.3",
157
159
  "vega-parser": "^7.1.3",
@@ -184,8 +186,7 @@
184
186
  "storybook": "storybook dev -p 6006",
185
187
  "build-storybook": "storybook build",
186
188
  "sync-katex-css": "node --experimental-strip-types scripts/sync-katex-css.ts",
187
- "codegen": "node --experimental-strip-types scripts/generate-host-protocol.ts",
188
- "codegen:check": "node --experimental-strip-types scripts/generate-host-protocol.ts --check"
189
+ "doctor": "npx react-doctor@latest"
189
190
  },
190
191
  "peerDependencies": {
191
192
  "react": "^17 || ^18 || ^19",
@@ -194,10 +195,10 @@
194
195
  "devDependencies": {
195
196
  "@codecov/vite-plugin": "^1.9.1",
196
197
  "@csstools/postcss-light-dark-function": "^2.0.11",
197
- "@playwright/test": "^1.63.0",
198
- "@storybook/addon-docs": "^10.6.0",
199
- "@storybook/addon-links": "^10.6.0",
200
- "@storybook/react-vite": "^10.6.0",
198
+ "@playwright/test": "^1.64.0",
199
+ "@storybook/addon-docs": "^10.6.2",
200
+ "@storybook/addon-links": "^10.6.2",
201
+ "@storybook/react-vite": "^10.6.2",
201
202
  "@testing-library/jest-dom": "^7.0.1",
202
203
  "@testing-library/react": "^16.3.3",
203
204
  "@types/dompurify": "^3.2.0",
@@ -207,27 +208,26 @@
207
208
  "@types/react": "^19.3.0",
208
209
  "@types/react-dom": "^19.3.0",
209
210
  "@types/timestring": "^6.0.5",
210
- "@vitejs/plugin-react": "^6.1.1",
211
+ "@vitejs/plugin-react": "^6.1.2",
211
212
  "@vitest/coverage-v8": "4.1.11",
212
213
  "blob-polyfill": "^7.0.20220408",
213
214
  "cross-env": "^7.0.3",
214
215
  "jsdom": "^24.1.3",
215
216
  "msw": "^2.15.0",
216
217
  "npm-run-all2": "^6.2.6",
217
- "orval": "8.40.0",
218
218
  "oxc-transform-react": "0.145.0",
219
219
  "oxfmt": "^0.68.0",
220
220
  "oxlint": "^1.83.0",
221
- "postcss": "^8.5.28",
221
+ "postcss": "^8.5.29",
222
222
  "postcss-prefix-selector": "^2.2.1",
223
223
  "react": "^19.3.0",
224
224
  "react-dom": "^19.3.0",
225
- "storybook": "^10.6.0",
225
+ "storybook": "^10.6.2",
226
226
  "stylelint": "^16.26.1",
227
227
  "stylelint-config-standard": "^36.0.1",
228
228
  "tailwindcss": "^4.3.3",
229
229
  "vega-typings": "^2.3.0",
230
- "vite": "^8.3.0",
230
+ "vite": "^8.3.4",
231
231
  "vite-plugin-wasm": "^3.6.0",
232
232
  "vitest": "^4.1.11",
233
233
  "yaml": "^2.9.1"
@@ -19,6 +19,7 @@ it("enforces host dependencies for runtime and type imports", () => {
19
19
  "src/core/host/allowed.ts": `
20
20
  import { atom } from "jotai/vanilla";
21
21
  import { z } from "zod";
22
+ import * as Protocol from "@marimo-team/client/protocol";
22
23
  import { Logger } from "@/utils/Logger";
23
24
  import type { Document } from "./document";
24
25
  export * from "@/core/host/events";
@@ -0,0 +1,32 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { expect, it } from "vitest";
4
+ import { moduleEntry } from "../../lint/module-entry.js";
5
+
6
+ /** Whether the rule reports importing `source` from `file`. */
7
+ function reports(file: string, source: string): boolean {
8
+ let reported = false;
9
+ const visitors = moduleEntry.createOnce({
10
+ filename: `/repo/frontend/src/${file}`,
11
+ report: () => {
12
+ reported = true;
13
+ },
14
+ });
15
+ visitors.ImportDeclaration({ source: { value: source } });
16
+ return reported;
17
+ }
18
+
19
+ it.each([
20
+ ["core/websocket/state.ts", "@/core/host", false],
21
+ ["core/websocket/state.ts", "../host", false],
22
+ ["core/websocket/state.ts", "@/core/document", false],
23
+ ["core/host/replica.ts", "./resources/document", false],
24
+ ["core/host/replica.ts", "@/core/host/backend", false],
25
+ ["core/websocket/__tests__/a.test.ts", "../../host/replica", false],
26
+ ["core/websocket/fixtures.ts", "../host/__tests__/fixtures", false],
27
+ ["core/websocket/state.ts", "@/core/host/replica", true],
28
+ ["core/websocket/state.ts", "../host/resources/document", true],
29
+ ["core/websocket/state.ts", "../document/hooks", true],
30
+ ])("from %s, importing %s reports %s", (file, source, expected) => {
31
+ expect(reports(file, source)).toBe(expected);
32
+ });
@@ -6,7 +6,6 @@ import { initialLayoutState, layoutStateAtom } from "@/core/layout/state";
6
6
  import { kioskModeAtom } from "@/core/mode";
7
7
  import { connectionAtom } from "@/core/network/connection";
8
8
  import { store } from "@/core/state/jotai";
9
- import { runtimeConfigAtom } from "@/core/runtime/config";
10
9
  import { isStaticNotebook } from "@/core/static/static-state";
11
10
  import { ConnectionState } from "@/core/websocket/types";
12
11
  import { pairConfigAtom } from "@/core/config/pair";
@@ -102,25 +101,6 @@ describe("mount", () => {
102
101
  });
103
102
 
104
103
  describe("connection state initialization", () => {
105
- it("passes the host notebook identity to the local runtime", () => {
106
- mount({ ...baseOptions, notebookId: "nb_local" }, mockElement);
107
- expect(store.get(runtimeConfigAtom).notebookId).toBe("nb_local");
108
- });
109
-
110
- it("uses a remote runtime's own notebook identity", () => {
111
- mount(
112
- {
113
- ...baseOptions,
114
- notebookId: "nb_local",
115
- runtimeConfig: [
116
- { url: "https://remote.example", notebookId: "nb_remote" },
117
- ],
118
- },
119
- mockElement,
120
- );
121
- expect(store.get(runtimeConfigAtom).notebookId).toBe("nb_remote");
122
- });
123
-
124
104
  it("should set connection to CONNECTING when runtimeConfig has lazy=false", () => {
125
105
  mount(
126
106
  {
@@ -0,0 +1,63 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { fireEvent, render, screen } from "@testing-library/react";
4
+ import { createStore, Provider } from "jotai";
5
+ import { expect, it, vi } from "vitest";
6
+ import { TooltipProvider } from "@/components/ui/tooltip";
7
+ import { getKnownModelMaps } from "@/core/ai/model-registry";
8
+ import { AIModelDropdown } from "../ai-model-dropdown";
9
+ import * as aiUtils from "../ai-utils";
10
+
11
+ vi.mock("@/core/ai/config", () => ({
12
+ useAIConfigActions: () => ({ saveModelChange: vi.fn() }),
13
+ }));
14
+ vi.mock("@/components/app-config/state", () => ({
15
+ useOpenSettingsToTab: () => ({ handleClick: vi.fn() }),
16
+ }));
17
+
18
+ it.each(["Enter", " "])(
19
+ "selects a model with %j while ArrowRight retains information access",
20
+ async (key) => {
21
+ const knownModel = [...getKnownModelMaps().modelMap.values()].find(
22
+ (model) => model.provider === "openai",
23
+ );
24
+ if (!knownModel) {
25
+ throw new Error("Expected a known OpenAI model");
26
+ }
27
+ const model = { ...knownModel, capabilities: [] };
28
+ vi.spyOn(aiUtils, "listModelsForAiSettings").mockReturnValue([
29
+ [model.provider, [model]],
30
+ ]);
31
+ const onSelect = vi.fn();
32
+ render(
33
+ <Provider store={createStore()}>
34
+ <TooltipProvider>
35
+ <AIModelDropdown
36
+ forRole="chat"
37
+ placeholder="Choose model"
38
+ onSelect={onSelect}
39
+ />
40
+ </TooltipProvider>
41
+ </Provider>,
42
+ );
43
+ fireEvent.keyDown(screen.getByRole("button", { name: "Choose model" }), {
44
+ key: "ArrowDown",
45
+ });
46
+ fireEvent.keyDown(
47
+ await screen.findByRole("menuitem", { name: /OpenAI$/ }),
48
+ { key: "ArrowRight" },
49
+ );
50
+ const option = await screen.findByRole("menuitem", {
51
+ name: (name) => name.endsWith(model.name),
52
+ });
53
+ fireEvent.keyDown(option, { key: "ArrowRight" });
54
+ expect(
55
+ await screen.findByRole("heading", { name: model.name }),
56
+ ).toBeInTheDocument();
57
+ expect(onSelect).not.toHaveBeenCalled();
58
+ fireEvent.keyDown(option, { key });
59
+ expect(onSelect).toHaveBeenCalledExactlyOnceWith(
60
+ `${model.provider}/${model.model}`,
61
+ );
62
+ },
63
+ );
@@ -276,13 +276,18 @@ const ProviderDropdownContent = ({
276
276
  const qualifiedModelId: QualifiedModelId = `${provider}/${model.model}`;
277
277
  return (
278
278
  <DropdownMenuSub key={qualifiedModelId}>
279
- <DropdownMenuSubTrigger showChevron={false} className="py-2">
280
- <div
281
- className="flex items-center gap-2 w-full cursor-pointer"
282
- onClick={() => {
279
+ <DropdownMenuSubTrigger
280
+ showChevron={false}
281
+ className="py-2"
282
+ onClick={() => onSelect(qualifiedModelId)}
283
+ onKeyDown={(e) => {
284
+ if (e.key === "Enter" || e.key === " ") {
285
+ e.preventDefault();
283
286
  onSelect(qualifiedModelId);
284
- }}
285
- >
287
+ }
288
+ }}
289
+ >
290
+ <div className="flex items-center gap-2 w-full cursor-pointer">
286
291
  <AiModelDropdownItem model={model} provider={provider} />
287
292
  </div>
288
293
  </DropdownMenuSubTrigger>
@@ -48,6 +48,7 @@ import { DEFAULT_AI_MODEL, type UserConfig } from "@/core/config/config-schema";
48
48
  import { isWasm } from "@/core/wasm/utils";
49
49
  import { cn } from "@/utils/cn";
50
50
  import { Events } from "@/utils/events";
51
+ import { Objects } from "@/utils/objects";
51
52
  import { Strings } from "@/utils/strings";
52
53
  import { AIModelDropdown, getProviderLabel } from "../ai/ai-model-dropdown";
53
54
  import {
@@ -501,6 +502,7 @@ const ModelListItem: React.FC<ModelListItemProps> = ({
501
502
  <ModelInfoCard model={model} />
502
503
  {model.custom && (
503
504
  <Button
505
+ aria-label={`Delete model ${model.name}`}
504
506
  variant="ghost"
505
507
  size="icon"
506
508
  onClick={handleDelete}
@@ -681,7 +683,10 @@ export const CustomProvidersConfig: React.FC<AiConfigProps> = ({
681
683
  };
682
684
 
683
685
  const removeProvider = (providerName: string) => {
684
- const { [providerName]: _, ...rest } = customProviders;
686
+ const rest = Objects.filter(
687
+ customProviders,
688
+ (_, name) => name !== providerName,
689
+ );
685
690
  // Reset to clear nested dirty state, then set new value
686
691
  form.resetField("ai.custom_providers");
687
692
  form.setValue("ai.custom_providers", rest, { shouldDirty: true });
@@ -1846,7 +1851,7 @@ export const AddModelForm: React.FC<{
1846
1851
  id={modelNameInputId}
1847
1852
  value={modelName}
1848
1853
  onChange={(e) => setModelName(e.target.value)}
1849
- placeholder="gpt-4"
1854
+ placeholder="gpt-5.6-sol"
1850
1855
  className="text-xs mb-0"
1851
1856
  />
1852
1857
  </div>
@@ -77,6 +77,23 @@ describe("useMessageQueue", () => {
77
77
  expect(result.current.messages).toEqual([]);
78
78
  });
79
79
 
80
+ it("preserves multiple enqueues and flushes before React renders", () => {
81
+ const { result } = renderHook(() => useMessageQueue());
82
+ const send = vi.fn();
83
+
84
+ act(() => {
85
+ result.current.enqueue([textPart("first")]);
86
+ result.current.enqueue([textPart("second")]);
87
+ result.current.flushNext(send);
88
+ result.current.flushNext(send);
89
+ });
90
+
91
+ expect(send).toHaveBeenNthCalledWith(1, [textPart("first")]);
92
+ expect(send).toHaveBeenNthCalledWith(2, [textPart("second")]);
93
+ expect(result.current.messages).toEqual([]);
94
+ expect(result.current.hasQueuedRef.current).toBe(false);
95
+ });
96
+
80
97
  it("flushNext on an empty queue is a no-op", () => {
81
98
  const { result } = renderHook(() => useMessageQueue());
82
99
  const send = vi.fn();