@marimo-team/islands 0.25.1-dev90 → 0.25.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 (294) hide show
  1. package/dist/{ConnectedDataExplorerComponent-KVhjDMSe.js → ConnectedDataExplorerComponent-C2d9ysUI.js} +8 -9
  2. package/dist/{ErrorBoundary-D7_peFI9.js → ErrorBoundary-1wHWKFoG.js} +1 -1
  3. package/dist/{ImageComparisonComponent-Dlm5aWnH.js → ImageComparisonComponent-Cpfz30OZ.js} +51 -52
  4. package/dist/{abnfDiagram-VCTEODGH-CpN0FRda.js → abnfDiagram-VCTEODGH-AFhOQTt8.js} +3 -3
  5. package/dist/{architectureDiagram-5GKGNRK7-DDyj5SRB.js → architectureDiagram-5GKGNRK7-BngksAAQ.js} +5 -5
  6. package/dist/{blockDiagram-I7D4REHJ-BbXEXJRu.js → blockDiagram-I7D4REHJ-CvBmppdy.js} +9 -9
  7. package/dist/{c4Diagram-7LVT6UL2-DcLsbQmR.js → c4Diagram-7LVT6UL2-EceL4_jH.js} +7 -7
  8. package/dist/{cells-DYIkSxs6.js → cells-Cv93oav_.js} +4124 -4151
  9. package/dist/{channel-B5XnTarr.js → channel-z7HZXHwv.js} +1 -1
  10. package/dist/{chat-ui-BXj3uYjy.js → chat-ui-fVyVOhYN.js} +47 -47
  11. package/dist/{chunk-4HAMMTFA-D2qv8E0X.js → chunk-4HAMMTFA-BPTTOOC5.js} +5 -5
  12. package/dist/{chunk-75Z2AOVW-5_HsvXwr.js → chunk-75Z2AOVW-C4AOleKf.js} +1 -1
  13. package/dist/{chunk-DU6HZSFF-BUgAHvnM.js → chunk-DU6HZSFF-1TwWR6gh.js} +1 -1
  14. package/dist/{chunk-F27PBJKO-DHmYWZXr.js → chunk-F27PBJKO-DMI1PBe4.js} +1 -1
  15. package/dist/{chunk-GMAD6QVW-Czynz8aA.js → chunk-GMAD6QVW-vStrMz2P.js} +3 -3
  16. package/dist/{chunk-GVQU2GXP-yQEdulRS.js → chunk-GVQU2GXP-2HwWgs4u.js} +2 -2
  17. package/dist/{chunk-IMKFNOWR-BfwTebD0.js → chunk-IMKFNOWR-UOVZuZVn.js} +5 -5
  18. package/dist/{chunk-L3NEJ4N5-DwRWnDDK.js → chunk-L3NEJ4N5-RhC7i0I2.js} +5 -5
  19. package/dist/{chunk-OSK3NFVY-BBKU_Ign.js → chunk-OSK3NFVY-CZV09N-U.js} +6 -6
  20. package/dist/{chunk-P2QGCYS3-C0iGU29N.js → chunk-P2QGCYS3-0TAWai9C.js} +1 -1
  21. package/dist/{chunk-POPQ4Y6H-BCbS3Ozc.js → chunk-POPQ4Y6H-Cc3_56GX.js} +1 -1
  22. package/dist/{chunk-PWAF6VOD-CTFCL0jI.js → chunk-PWAF6VOD-lNxB9k8z.js} +1 -1
  23. package/dist/{chunk-SHT3W25Y-BspJEJ5H.js → chunk-SHT3W25Y-CrEPyWy1.js} +7 -7
  24. package/dist/{chunk-SVP7TREG-DX3rFNTe.js → chunk-SVP7TREG-uIyyySp6.js} +2 -2
  25. package/dist/{chunk-TICWLB2K-fVF7Uujg.js → chunk-TICWLB2K-DdXM3eg6.js} +5 -5
  26. package/dist/classDiagram-ZZMXUADV-BiATbBE4.js +30 -0
  27. package/dist/classDiagram-v2-VYDZK3BY-JnH97GYw.js +30 -0
  28. package/dist/{code-visibility-Cv2cG11L.js → code-visibility-DMcT7AsU.js} +17 -17
  29. package/dist/{common-DVOYsne0.js → common-B58G5YN_.js} +6726 -6430
  30. package/dist/{cynefinDiagram-5FMLGOSQ-CFQrqzSX.js → cynefinDiagram-5FMLGOSQ-zknaAsGy.js} +3 -3
  31. package/dist/{dagre-GXQ25YYZ-xHNAUTyG.js → dagre-GXQ25YYZ-BhMOoMGJ.js} +10 -10
  32. package/dist/{data-grid-overlay-editor--Egdzm1k.js → data-grid-overlay-editor-DUWqrgYI.js} +1 -1
  33. package/dist/{diagram-S7CK7UJ4-Bt1rPbAx.js → diagram-S7CK7UJ4-V5-Z-EDY.js} +4 -4
  34. package/dist/{diagram-UQ7AKVKN-D1sq5FoZ.js → diagram-UQ7AKVKN-qw8AjDal.js} +3 -3
  35. package/dist/{diagram-VSXAHHWV-BKpmG23x.js → diagram-VSXAHHWV-CR7BJygZ.js} +2 -2
  36. package/dist/{diagram-VX7I27RA-BMwGFVD6.js → diagram-VX7I27RA-DfuqFb1E.js} +5 -5
  37. package/dist/{diagram-Z3DM3KII--KLDR9Pl.js → diagram-Z3DM3KII-DpWwlYZB.js} +3 -3
  38. package/dist/{dist-BaHjhkpZ.js → dist-CcyKTBTF.js} +1 -1
  39. package/dist/{dropdown-menu-CZgjYSAh.js → dropdown-menu-CZy06LAq.js} +12 -12
  40. package/dist/{ebnfDiagram-PWID7BFC-WnG4cvSQ.js → ebnfDiagram-PWID7BFC-C20OnNMZ.js} +3 -3
  41. package/dist/{erDiagram-RLTQ6QDP-DhzKiYHc.js → erDiagram-RLTQ6QDP-DBXLWO9v.js} +12 -12
  42. package/dist/{error-entries-C0NsUqXl.js → error-entries-DLl0XqoW.js} +18 -18
  43. package/dist/{feedback-button-WVepiUsI.js → feedback-button-BmlXbdJI.js} +19 -19
  44. package/dist/flowDiagram-HODETNUW-DL52nMkt.js +16 -0
  45. package/dist/{formats-BR5iGb4s.js → formats-Cl_67ghI.js} +2 -2
  46. package/dist/{ganttDiagram-EL5Y4UJY-DbzEBLbl.js → ganttDiagram-EL5Y4UJY-cRRaDt88.js} +2 -2
  47. package/dist/{gitGraphDiagram-WWUBYQGX-BMf0iKi1.js → gitGraphDiagram-WWUBYQGX-Pox5k9-Y.js} +2 -2
  48. package/dist/{glide-data-editor-S0WTUxUP.js → glide-data-editor-DnxrqL3c.js} +5 -5
  49. package/dist/{globals-B0NGznoE.js → globals-C6IYCw1c.js} +1 -1
  50. package/dist/{html-to-image-CeYYvQNb.js → html-to-image-CmkwfNkf.js} +32 -31
  51. package/dist/{infoDiagram-27XIBGKW-BagtCX_5.js → infoDiagram-27XIBGKW-ntpxMfrq.js} +2 -2
  52. package/dist/{ishikawaDiagram-5VMMS53U-DByDehYy.js → ishikawaDiagram-5VMMS53U-BllIlHE5.js} +3 -3
  53. package/dist/{journeyDiagram-3NMN7TZE-D2LcKDUO.js → journeyDiagram-3NMN7TZE-EPJDPlt0.js} +2 -2
  54. package/dist/{kanban-definition-UXKFOSKX-BxwkbBI_.js → kanban-definition-UXKFOSKX-GYtNMjtS.js} +9 -9
  55. package/dist/{katex-C6D4cX_N.js → katex-BNCmKUol.js} +983 -1120
  56. package/dist/{useNumberFormatter-BfDpa21j.js → label-BslhXqL6.js} +108 -81
  57. package/dist/{loader-D2W4oM-3.js → loader-DEZSzvma.js} +253 -248
  58. package/dist/main.js +670 -661
  59. package/dist/{mermaid-DPNuhemn.js → mermaid-Dnzoxjt1.js} +49 -49
  60. package/dist/{mhchem-DWCF06w9.js → mhchem-BEc7A1or.js} +1 -1
  61. package/dist/{mindmap-definition-YA3MSWOX-Cgvojw3y.js → mindmap-definition-YA3MSWOX-Cth76xgH.js} +11 -11
  62. package/dist/{number-overlay-editor-5uyVnQ6u.js → number-overlay-editor-BO78Sr4W.js} +1 -1
  63. package/dist/{pegDiagram-XKGWAZYB-DahHhYyN.js → pegDiagram-XKGWAZYB-Cu4uOXii.js} +3 -3
  64. package/dist/{pieDiagram-E7YTZNPT-CCtX0oCK.js → pieDiagram-E7YTZNPT-Bh3eDa9s.js} +3 -3
  65. package/dist/{process-output-BCTjlyuH.js → process-output-CYN5E-iO.js} +2 -2
  66. package/dist/{quadrantDiagram-AXDQQJYC-DftINo6g.js → quadrantDiagram-AXDQQJYC--kqzFC3w.js} +1 -1
  67. package/dist/{railroadDiagram-O6MQD6OU-Du5NsPUb.js → railroadDiagram-O6MQD6OU-DG-M6Rnc.js} +3 -3
  68. package/dist/{react-vega-5AcMW8gG.js → react-vega-ewj7q_U5.js} +1 -1
  69. package/dist/{requirementDiagram-BXWQKSXE-0pmmxL6_.js → requirementDiagram-BXWQKSXE-DCwsThh0.js} +11 -11
  70. package/dist/{reveal-component-CKpvbtfe.js → reveal-component-C1yOCuj8.js} +744 -743
  71. package/dist/{sankeyDiagram-P5KCCOFB-CDKR5TJH.js → sankeyDiagram-P5KCCOFB-BdzhT0BM.js} +1 -1
  72. package/dist/{sequenceDiagram-WJ2MYXX4-DB-ChWwU.js → sequenceDiagram-WJ2MYXX4-CbXB1_PU.js} +4 -4
  73. package/dist/{spec-CAYwFeV6.js → spec-DQBRQSba.js} +123 -102
  74. package/dist/{stateDiagram-D77RDMKH-orN6AwMx.js → stateDiagram-D77RDMKH-A-Zf3Sb2.js} +13 -13
  75. package/dist/stateDiagram-v2-MP3YSRHH-D9YMnUGx.js +30 -0
  76. package/dist/style.css +1 -1
  77. package/dist/{swimlanes-42K2YHIH-BkSDcqDT.js → swimlanes-42K2YHIH-B_pMf0J4.js} +10 -10
  78. package/dist/swimlanesDiagram-VR7AAH4N-Ctgy-yGP.js +30 -0
  79. package/dist/{timeline-definition-24CTP7MA-BuqJUIRZ.js → timeline-definition-24CTP7MA-DTXFjTTM.js} +3 -3
  80. package/dist/{toDate-WXg1yLcI.js → toDate-C67bxMWn.js} +139 -111
  81. package/dist/{useDateFormatter-BRTPsUK7.js → useDateFormatter-BXQGu86d.js} +28 -49
  82. package/dist/{vega-component-D0QXopU8.js → vega-component-tFOzgarw.js} +12 -12
  83. package/dist/{vega-embed-container-CbnTccZi.js → vega-embed-container-sSR5hAsy.js} +2 -2
  84. package/dist/{vega-loader.browser-D95WfUcj.js → vega-loader.browser-DNST6uVf.js} +2 -2
  85. package/dist/{vennDiagram-4TSXK5OY-CTUlJ2PK.js → vennDiagram-4TSXK5OY-BPHjZo0R.js} +3 -3
  86. package/dist/{wardleyDiagram-VM6X3IG4-3evLUb0M.js → wardleyDiagram-VM6X3IG4-6fTLYBuD.js} +3 -3
  87. package/dist/{xychartDiagram-S5SC5T6Z-DL2E3K8-.js → xychartDiagram-S5SC5T6Z-BYjwjrzE.js} +5 -5
  88. package/package.json +1 -2
  89. package/src/__mocks__/common.ts +3 -3
  90. package/src/__tests__/CellStatus.test.tsx +1 -1
  91. package/src/__tests__/setup.ts +7 -7
  92. package/src/components/app-config/ai-config.tsx +2 -0
  93. package/src/components/app-config/optional-features.tsx +1 -1
  94. package/src/components/chat/chat-panel.tsx +19 -8
  95. package/src/components/data-table/TableTopBar.tsx +2 -2
  96. package/src/components/data-table/__tests__/export-actions.test.tsx +662 -0
  97. package/src/components/data-table/charts/__tests__/chart-panel.test.tsx +286 -0
  98. package/src/components/data-table/charts/charts.tsx +26 -13
  99. package/src/components/data-table/column-summary/chart-spec-model.tsx +4 -4
  100. package/src/components/data-table/data-table.tsx +1 -1
  101. package/src/components/data-table/export-actions.tsx +642 -176
  102. package/src/components/data-table/schemas.ts +25 -3
  103. package/src/components/dependency-graph/elements.ts +2 -2
  104. package/src/components/editor/__tests__/package-alert.test.tsx +140 -0
  105. package/src/components/editor/actions/__tests__/pair-with-agent.test.tsx +107 -0
  106. package/src/components/editor/actions/pair-with-agent.tsx +119 -0
  107. package/src/components/editor/actions/useNotebookActions.tsx +2 -1
  108. package/src/components/editor/ai/add-cell-with-ai.tsx +2 -0
  109. package/src/components/editor/ai/staged-cell-submission.ts +2 -2
  110. package/src/components/editor/ai/transport/chat-transport.tsx +1 -1
  111. package/src/components/editor/chrome/components/contribute-snippet-button.tsx +6 -1
  112. package/src/components/editor/connections/database/as-code.ts +44 -44
  113. package/src/components/editor/connections/storage/as-code.ts +3 -3
  114. package/src/components/editor/file-tree/requesting-tree.tsx +16 -13
  115. package/src/components/editor/navigation/clipboard.ts +2 -2
  116. package/src/components/editor/notebook-cell.tsx +2 -2
  117. package/src/components/editor/output/MarimoTracebackOutput.tsx +1 -1
  118. package/src/components/editor/output/VideoOutput.tsx +1 -1
  119. package/src/components/editor/output/ansi-reduce.ts +21 -17
  120. package/src/components/editor/output/console/ConsoleOutput.tsx +3 -3
  121. package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +59 -0
  122. package/src/components/editor/output/console/text-rendering.tsx +3 -1
  123. package/src/components/editor/package-alert.tsx +20 -7
  124. package/src/components/home/components.tsx +1 -0
  125. package/src/components/markdown/markdown-renderer.css +1 -1
  126. package/src/components/pages/run-page.tsx +1 -0
  127. package/src/components/slides/__tests__/minimap-actions.test.tsx +7 -7
  128. package/src/components/slides/__tests__/minimap.test.ts +12 -12
  129. package/src/components/slides/__tests__/slide-scroll-hint.test.tsx +8 -8
  130. package/src/components/static-html/__tests__/share-modal.test.tsx +154 -0
  131. package/src/components/static-html/__tests__/stage-for-publish.test.ts +111 -0
  132. package/src/components/static-html/share-modal.tsx +114 -144
  133. package/src/components/static-html/stage-for-publish.ts +56 -0
  134. package/src/components/static-html/static-banner.tsx +2 -2
  135. package/src/components/ui/links.tsx +6 -1
  136. package/src/components/ui/typography.tsx +16 -8
  137. package/src/core/ai/context/__tests__/registry.test.ts +31 -28
  138. package/src/core/ai/context/providers/cell-output.ts +8 -8
  139. package/src/core/ai/context/providers/datasource.ts +10 -7
  140. package/src/core/ai/context/providers/error.ts +7 -7
  141. package/src/core/ai/context/providers/file.ts +8 -8
  142. package/src/core/ai/context/providers/tables.ts +7 -7
  143. package/src/core/ai/context/providers/variable.ts +7 -7
  144. package/src/core/ai/context/registry.ts +18 -18
  145. package/src/core/ai/ids/ids.ts +5 -5
  146. package/src/core/ai/model-registry.ts +12 -9
  147. package/src/core/ai/staged-cells.ts +6 -6
  148. package/src/core/ai/tools/base.ts +6 -6
  149. package/src/core/ai/tools/edit-notebook-tool.ts +6 -6
  150. package/src/core/ai/tools/registry.ts +4 -4
  151. package/src/core/ai/tools/run-cells-tool.ts +7 -7
  152. package/src/core/ai/tools/sample-tool.ts +6 -6
  153. package/src/core/cells/__tests__/cells.test.ts +27 -0
  154. package/src/core/cells/cells.ts +2 -1
  155. package/src/core/codemirror/cells/debugger-decorations.ts +13 -7
  156. package/src/core/codemirror/cells/line-timing-decorations.ts +9 -9
  157. package/src/core/codemirror/cells/traceback-decorations.ts +7 -4
  158. package/src/core/codemirror/code-lens/extension.ts +13 -13
  159. package/src/core/codemirror/copilot/__tests__/language-server.test.ts +6 -6
  160. package/src/core/codemirror/copilot/__tests__/transport.test.ts +12 -12
  161. package/src/core/codemirror/copilot/language-server.ts +13 -13
  162. package/src/core/codemirror/copilot/transport.ts +1 -1
  163. package/src/core/codemirror/find-replace/search-highlight.ts +5 -5
  164. package/src/core/codemirror/go-to-definition/underline.ts +3 -3
  165. package/src/core/codemirror/keymaps/vim.ts +3 -3
  166. package/src/core/codemirror/language/languages/markdown.ts +8 -8
  167. package/src/core/codemirror/language/languages/python.ts +7 -7
  168. package/src/core/codemirror/language/languages/sql/completion-builder.ts +5 -5
  169. package/src/core/codemirror/language/languages/sql/completion-store.ts +4 -4
  170. package/src/core/codemirror/language/languages/sql/sql.ts +21 -21
  171. package/src/core/codemirror/lsp/__tests__/transports.test.ts +10 -10
  172. package/src/core/codemirror/lsp/federated-lsp.ts +29 -27
  173. package/src/core/codemirror/lsp/notebook-lsp.ts +21 -21
  174. package/src/core/codemirror/misc/__tests__/dnd.test.ts +10 -10
  175. package/src/core/codemirror/misc/__tests__/paste.test.ts +7 -4
  176. package/src/core/codemirror/reactive-references/extension.ts +3 -3
  177. package/src/core/codemirror/rtc/loro/awareness.ts +12 -12
  178. package/src/core/codemirror/rtc/loro/sync.ts +5 -5
  179. package/src/core/codemirror/vim/cursor-visibility.ts +3 -3
  180. package/src/core/dom/ui-element.ts +5 -5
  181. package/src/core/dom/uiregistry.ts +10 -10
  182. package/src/core/hotkeys/hotkeys.ts +9 -9
  183. package/src/core/islands/__tests__/bridge.test.ts +4 -4
  184. package/src/core/islands/__tests__/test-utils.tsx +4 -4
  185. package/src/core/islands/bridge.ts +85 -82
  186. package/src/core/islands/components/web-components.tsx +7 -7
  187. package/src/core/islands/worker/__tests__/controller.test.ts +1 -1
  188. package/src/core/islands/worker/controller.ts +6 -3
  189. package/src/core/islands/worker-factory.ts +2 -2
  190. package/src/core/kernel/RuntimeState.ts +4 -4
  191. package/src/core/kernel/__tests__/session.test.ts +110 -1
  192. package/src/core/kernel/session.ts +46 -15
  193. package/src/core/lsp/__tests__/transport.test.ts +19 -19
  194. package/src/core/lsp/transport.ts +5 -5
  195. package/src/core/network/CachingRequestRegistry.ts +2 -2
  196. package/src/core/network/DeferredRequestRegistry.ts +4 -4
  197. package/src/core/network/__tests__/export-asset-url.test.ts +45 -0
  198. package/src/core/network/export-asset-url.ts +19 -0
  199. package/src/core/network/requests-network.ts +2 -7
  200. package/src/core/runtime/runtime.ts +25 -20
  201. package/src/core/static/virtual-file-tracker.ts +5 -5
  202. package/src/core/wasm/__tests__/bridge.test.ts +2 -2
  203. package/src/core/wasm/bridge.ts +132 -133
  204. package/src/core/wasm/router.ts +5 -5
  205. package/src/core/wasm/store.ts +4 -4
  206. package/src/core/wasm/worker/bootstrap.ts +8 -5
  207. package/src/core/wasm/worker/message-buffer.ts +3 -3
  208. package/src/core/websocket/transports/__tests__/ws.test.ts +8 -8
  209. package/src/core/websocket/transports/basic.ts +15 -8
  210. package/src/core/websocket/transports/sse.ts +7 -7
  211. package/src/core/websocket/transports/transport.ts +3 -3
  212. package/src/core/websocket/transports/ws.ts +9 -7
  213. package/src/css/globals.css +18 -21
  214. package/src/css/katex.min.css +260 -241
  215. package/src/hooks/__tests__/useOverflowDetection.test.tsx +5 -5
  216. package/src/hooks/__tests__/useResizeObserver.test.tsx +12 -12
  217. package/src/plugins/core/registerReactComponent.tsx +5 -5
  218. package/src/plugins/core/sidebar-element.tsx +2 -2
  219. package/src/plugins/impl/ButtonPlugin.tsx +3 -3
  220. package/src/plugins/impl/CheckboxPlugin.tsx +3 -3
  221. package/src/plugins/impl/CodeEditorPlugin.tsx +3 -3
  222. package/src/plugins/impl/DatePickerPlugin.tsx +3 -3
  223. package/src/plugins/impl/DateRangePlugin.tsx +3 -3
  224. package/src/plugins/impl/DateTimePickerPlugin.tsx +3 -3
  225. package/src/plugins/impl/DictPlugin.tsx +3 -3
  226. package/src/plugins/impl/DropdownPlugin.tsx +3 -3
  227. package/src/plugins/impl/FileUploadPlugin.tsx +3 -3
  228. package/src/plugins/impl/MatrixPlugin.tsx +4 -4
  229. package/src/plugins/impl/MicrophonePlugin.tsx +3 -3
  230. package/src/plugins/impl/MultiselectPlugin.tsx +3 -3
  231. package/src/plugins/impl/NumberPlugin.tsx +3 -3
  232. package/src/plugins/impl/RadioPlugin.tsx +9 -5
  233. package/src/plugins/impl/RangeSliderPlugin.tsx +3 -3
  234. package/src/plugins/impl/RefreshPlugin.tsx +3 -3
  235. package/src/plugins/impl/SliderPlugin.tsx +3 -3
  236. package/src/plugins/impl/SwitchPlugin.tsx +3 -3
  237. package/src/plugins/impl/TabsPlugin.tsx +3 -3
  238. package/src/plugins/impl/TextAreaPlugin.tsx +3 -3
  239. package/src/plugins/impl/TextInputPlugin.tsx +3 -3
  240. package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +2 -2
  241. package/src/plugins/impl/anywidget/model.ts +10 -10
  242. package/src/plugins/impl/anywidget/registry.ts +12 -9
  243. package/src/plugins/impl/anywidget/runtime.ts +11 -9
  244. package/src/plugins/impl/anywidget/widget-binding.ts +6 -6
  245. package/src/plugins/impl/image-comparison/ImageComparisonComponent.tsx +7 -6
  246. package/src/plugins/impl/matplotlib/MatplotlibPlugin.tsx +3 -3
  247. package/src/plugins/impl/matplotlib/__tests__/matplotlib-renderer.test.ts +2 -2
  248. package/src/plugins/impl/matplotlib/matplotlib-renderer.ts +2 -2
  249. package/src/plugins/impl/mpl-interactive/mpl-websocket-shim.ts +10 -10
  250. package/src/plugins/impl/panel/utils.ts +5 -5
  251. package/src/plugins/impl/plotly/PlotlyPlugin.tsx +3 -3
  252. package/src/plugins/impl/vega/VegaPlugin.tsx +3 -3
  253. package/src/plugins/impl/vega/__tests__/use-vega-container-remeasure.test.ts +7 -7
  254. package/src/plugins/impl/vega/__tests__/utils.test.ts +16 -1
  255. package/src/plugins/impl/vega/__tests__/vega.test.ts +37 -0
  256. package/src/plugins/impl/vega/loader.ts +23 -1
  257. package/src/plugins/impl/vega/utils.ts +5 -4
  258. package/src/plugins/layout/AccordionPlugin.tsx +3 -3
  259. package/src/plugins/layout/CalloutPlugin.tsx +3 -3
  260. package/src/plugins/layout/ImageComparisonPlugin.tsx +5 -3
  261. package/src/plugins/layout/JsonOutputPlugin.tsx +3 -3
  262. package/src/plugins/layout/MimeRenderPlugin.tsx +3 -3
  263. package/src/plugins/layout/NavigationMenuPlugin.tsx +3 -3
  264. package/src/plugins/layout/OutlinePlugin.tsx +3 -3
  265. package/src/plugins/layout/ProgressPlugin.tsx +3 -3
  266. package/src/plugins/layout/RoutesPlugin.tsx +6 -8
  267. package/src/plugins/layout/StatPlugin.tsx +3 -3
  268. package/src/plugins/layout/TexPlugin.tsx +3 -3
  269. package/src/plugins/layout/carousel/CarouselPlugin.tsx +4 -4
  270. package/src/plugins/layout/mermaid/MermaidPlugin.tsx +3 -3
  271. package/src/utils/Deferred.ts +6 -6
  272. package/src/utils/async-capture-tracker.ts +10 -7
  273. package/src/utils/errors.ts +5 -5
  274. package/src/utils/id-tree.tsx +83 -80
  275. package/src/utils/lru.ts +1 -1
  276. package/src/utils/multi-map.ts +14 -12
  277. package/src/utils/paths.ts +6 -6
  278. package/src/utils/pluralize.ts +3 -3
  279. package/src/utils/progress.ts +6 -6
  280. package/src/utils/python-poet/poet.ts +14 -14
  281. package/src/utils/routes.ts +4 -2
  282. package/src/utils/semaphore.ts +6 -6
  283. package/src/utils/storage/storage.ts +6 -6
  284. package/src/utils/storage/typed.ts +16 -12
  285. package/src/utils/time.ts +9 -9
  286. package/src/utils/timed-cache.ts +4 -4
  287. package/src/utils/tracer.ts +9 -6
  288. package/dist/classDiagram-ZZMXUADV-Fe-V14Sc.js +0 -30
  289. package/dist/classDiagram-v2-VYDZK3BY-xTDg7lOs.js +0 -30
  290. package/dist/flowDiagram-HODETNUW-6dMdB8pR.js +0 -16
  291. package/dist/katex-DFBiSucW.js +0 -21840
  292. package/dist/label-BJ49YTvk.js +0 -30
  293. package/dist/stateDiagram-v2-MP3YSRHH-o05_rJN8.js +0 -30
  294. package/dist/swimlanesDiagram-VR7AAH4N-D_nFQfRc.js +0 -30
@@ -1,7 +1,7 @@
1
1
  import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { t } from "./react-ofJbxM4x.js";
3
3
  import { g as n } from "./tooltip-qB8NlSqV.js";
4
- import { r } from "./useNumberFormatter-BfDpa21j.js";
4
+ import { i as r } from "./label-BslhXqL6.js";
5
5
  var i = n("chart-pie", [["path", {
6
6
  d: "M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z",
7
7
  key: "pzmjnu"
@@ -21,37 +21,16 @@ var i = n("chart-pie", [["path", {
21
21
  d: "M9 19h6",
22
22
  key: "456am0"
23
23
  }]
24
- ]), o = n("table", [
25
- ["path", {
26
- d: "M12 3v18",
27
- key: "108xh3"
28
- }],
29
- ["rect", {
30
- width: "18",
31
- height: "18",
32
- x: "3",
33
- y: "3",
34
- rx: "2",
35
- key: "afitv7"
36
- }],
37
- ["path", {
38
- d: "M3 9h18",
39
- key: "1pudct"
40
- }],
41
- ["path", {
42
- d: "M3 15h18",
43
- key: "5xshup"
44
- }]
45
- ]), s = /* @__PURE__ */ e(t(), 1);
46
- function c(e, t) {
47
- let n = (0, s.useRef)(null);
24
+ ]), o = /* @__PURE__ */ e(t(), 1);
25
+ function s(e, t) {
26
+ let n = (0, o.useRef)(null);
48
27
  return e && n.current && t(e, n.current) && (e = n.current), n.current = e, e;
49
28
  }
50
29
  //#endregion
51
30
  //#region ../node_modules/.pnpm/@internationalized+date@3.12.3/node_modules/@internationalized/date/dist/private/DateFormatter.mjs
52
- var l = /* @__PURE__ */ new Map(), u = class {
31
+ var c = /* @__PURE__ */ new Map(), l = class {
53
32
  constructor(e, t = {}) {
54
- this.formatter = f(e, t), this.options = t;
33
+ this.formatter = d(e, t), this.options = t;
55
34
  }
56
35
  format(e) {
57
36
  return this.formatter.format(e);
@@ -86,41 +65,41 @@ var l = /* @__PURE__ */ new Map(), u = class {
86
65
  }
87
66
  resolvedOptions() {
88
67
  let e = this.formatter.resolvedOptions();
89
- return g() && (this.resolvedHourCycle ||= _(e.locale, this.options), e.hourCycle = this.resolvedHourCycle, e.hour12 = this.resolvedHourCycle === "h11" || this.resolvedHourCycle === "h12"), e.calendar === "ethiopic-amete-alem" && (e.calendar = "ethioaa"), e;
68
+ return h() && (this.resolvedHourCycle ||= g(e.locale, this.options), e.hourCycle = this.resolvedHourCycle, e.hour12 = this.resolvedHourCycle === "h11" || this.resolvedHourCycle === "h12"), e.calendar === "ethiopic-amete-alem" && (e.calendar = "ethioaa"), e;
90
69
  }
91
- }, d = {
70
+ }, u = {
92
71
  true: { ja: "h11" },
93
72
  false: {}
94
73
  };
95
- function f(e, t = {}) {
96
- if (typeof t.hour12 == "boolean" && m()) {
74
+ function d(e, t = {}) {
75
+ if (typeof t.hour12 == "boolean" && p()) {
97
76
  t = { ...t };
98
- let n = d[String(t.hour12)][e.split("-")[0]], r = t.hour12 ? "h12" : "h23";
77
+ let n = u[String(t.hour12)][e.split("-")[0]], r = t.hour12 ? "h12" : "h23";
99
78
  t.hourCycle = n ?? r, delete t.hour12;
100
79
  }
101
80
  let n = e + (t ? Object.entries(t).sort((e, t) => e[0] < t[0] ? -1 : 1).join() : "");
102
- if (l.has(n)) return l.get(n);
81
+ if (c.has(n)) return c.get(n);
103
82
  let r = new Intl.DateTimeFormat(e, t);
104
- return l.set(n, r), r;
83
+ return c.set(n, r), r;
105
84
  }
106
- var p = null;
107
- function m() {
108
- return p ??= new Intl.DateTimeFormat("en-US", {
85
+ var f = null;
86
+ function p() {
87
+ return f ??= new Intl.DateTimeFormat("en-US", {
109
88
  hour: "numeric",
110
89
  hour12: !1
111
- }).format(new Date(2020, 2, 3, 0)) === "24", p;
90
+ }).format(new Date(2020, 2, 3, 0)) === "24", f;
112
91
  }
113
- var h = null;
114
- function g() {
115
- return h ??= new Intl.DateTimeFormat("fr", {
92
+ var m = null;
93
+ function h() {
94
+ return m ??= new Intl.DateTimeFormat("fr", {
116
95
  hour: "numeric",
117
96
  hour12: !1
118
- }).resolvedOptions().hourCycle === "h12", h;
97
+ }).resolvedOptions().hourCycle === "h12", m;
119
98
  }
120
- function _(e, t) {
99
+ function g(e, t) {
121
100
  if (!t.timeStyle && !t.hour) return;
122
101
  e = e.replace(/(-u-)?-nu-[a-zA-Z0-9]+/, ""), e += (e.includes("-u-") ? "" : "-u") + "-nu-latn";
123
- let n = f(e, {
102
+ let n = d(e, {
124
103
  ...t,
125
104
  timeZone: void 0
126
105
  }), r = parseInt(n.formatToParts(new Date(2020, 2, 3, 0)).find((e) => e.type === "hour").value, 10), i = parseInt(n.formatToParts(new Date(2020, 2, 3, 23)).find((e) => e.type === "hour").value, 10);
@@ -132,12 +111,12 @@ function _(e, t) {
132
111
  }
133
112
  //#endregion
134
113
  //#region ../node_modules/.pnpm/@react-aria+i18n@3.12.16_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@react-aria/i18n/dist/useDateFormatter.mjs
135
- function v(e) {
136
- e = c(e ?? {}, y);
114
+ function _(e) {
115
+ e = s(e ?? {}, v);
137
116
  let { locale: t } = r();
138
- return (0, s.useMemo)(() => new u(t, e), [t, e]);
117
+ return (0, o.useMemo)(() => new l(t, e), [t, e]);
139
118
  }
140
- function y(e, t) {
119
+ function v(e, t) {
141
120
  if (e === t) return !0;
142
121
  let n = Object.keys(e), r = Object.keys(t);
143
122
  if (n.length !== r.length) return !1;
@@ -145,4 +124,4 @@ function y(e, t) {
145
124
  return !0;
146
125
  }
147
126
  //#endregion
148
- export { a, o as i, u as n, i as o, c as r, v as t };
127
+ export { i as a, a as i, l as n, s as r, _ as t };
@@ -3,7 +3,7 @@ import { g as t, h as n, m as r, o as i } from "./button-DdXAm8iz.js";
3
3
  import { t as a } from "./react-ofJbxM4x.js";
4
4
  import { t as o } from "./compiler-runtime-Cj8ZWiNS.js";
5
5
  import { t as s } from "./tooltip-qB8NlSqV.js";
6
- import { c, v as l } from "./toDate-WXg1yLcI.js";
6
+ import { T as c, c as l } from "./toDate-C67bxMWn.js";
7
7
  import { t as u } from "./jsx-runtime-DgDPJV9S.js";
8
8
  import { n as d } from "./error-banner-B94dcDmP.js";
9
9
  import { t as f } from "./debounce-C3jyATpc.js";
@@ -11,17 +11,17 @@ import { A as p, n as ee } from "./useTheme-DzXmYZ5V.js";
11
11
  import { c as m } from "./arrays-CN1djC4k.js";
12
12
  import { t as te } from "./objects-CzUgoMIF.js";
13
13
  import { t as h } from "./useAsyncData-BD6AStMt.js";
14
- import { a as ne, i as re, n as ie, t as g } from "./formats-BR5iGb4s.js";
15
- import { M as ae, n as oe } from "./vega-loader.browser-D95WfUcj.js";
16
- import { t as se } from "./react-vega-5AcMW8gG.js";
17
- import { a as ce, n as _ } from "./loader-D2W4oM-3.js";
14
+ import { a as ne, i as re, n as ie, t as g } from "./formats-Cl_67ghI.js";
15
+ import { M as ae, n as oe } from "./vega-loader.browser-DNST6uVf.js";
16
+ import { t as se } from "./react-vega-ewj7q_U5.js";
17
+ import { a as ce, n as _ } from "./loader-DEZSzvma.js";
18
18
  import { t as le } from "./useDeepCompareMemoize-D_HNdyvI.js";
19
19
  import { t as ue } from "./semaphore-89jsoHtS.js";
20
20
  import { t as de } from "./use-vega-container-remeasure-4DwJbPWu.js";
21
21
  //#region src/plugins/impl/vega/fix-relative-url.ts
22
22
  var fe = /* @__PURE__ */ e(a(), 1), pe = o();
23
23
  function me(e) {
24
- return e.data && "url" in e.data && (e.data.url = c(e.data.url).href), e;
24
+ return e.data && "url" in e.data && (e.data.url = l(e.data.url).href), e;
25
25
  }
26
26
  //#endregion
27
27
  //#region src/plugins/impl/vega/types.ts
@@ -492,7 +492,7 @@ async function U(e) {
492
492
  }), !e.data || !("url" in e.data)) return e;
493
493
  let i;
494
494
  try {
495
- i = c(e.data.url);
495
+ i = l(e.data.url);
496
496
  } catch {
497
497
  return e;
498
498
  }
@@ -530,7 +530,7 @@ var G = (e) => {
530
530
  embedOptions: s
531
531
  }), t[5] = i, t[6] = s, t[7] = a, t[8] = u, t[9] = r, t[10] = n, t[11] = p) : p = t[11], p;
532
532
  }, K = (e) => {
533
- let a = (0, pe.c)(50), { value: o, setValue: c, chartSelection: u, fieldSelection: d, spec: m, embedOptions: h } = e, { theme: ne } = ee(), g = (0, fe.useRef)(null), oe = (0, fe.useRef)(void 0), [_, ue] = (0, fe.useState)(), v;
533
+ let a = (0, pe.c)(50), { value: o, setValue: l, chartSelection: u, fieldSelection: d, spec: m, embedOptions: h } = e, { theme: ne } = ee(), g = (0, fe.useRef)(null), oe = (0, fe.useRef)(void 0), [_, ue] = (0, fe.useState)(), v;
534
534
  bb0: {
535
535
  if (h && "actions" in h) {
536
536
  v = h.actions;
@@ -550,12 +550,12 @@ var G = (e) => {
550
550
  let C = S, w;
551
551
  a[5] === C ? w = a[6] : (w = T(C), a[5] = C, a[6] = w);
552
552
  let E = w, D;
553
- a[7] !== c || a[8] !== o ? (D = (e) => {
554
- c({
553
+ a[7] !== l || a[8] !== o ? (D = (e) => {
554
+ l({
555
555
  ...o,
556
556
  ...e
557
557
  });
558
- }, a[7] = c, a[8] = o, a[9] = D) : D = a[9];
558
+ }, a[7] = l, a[8] = o, a[9] = D) : D = a[9];
559
559
  let O = p(D), k;
560
560
  a[10] === O ? k = a[11] : (k = f((e, n) => {
561
561
  t.debug("[Vega signal]", e, n);
@@ -592,7 +592,7 @@ var G = (e) => {
592
592
  className: "text-xs flex flex-col",
593
593
  children: e.map(ve)
594
594
  }),
595
- children: /* @__PURE__ */ (0, W.jsx)(l, { className: "absolute bottom-1 right-0 m-2 h-4 w-4 cursor-help text-muted-foreground hover:text-foreground" })
595
+ children: /* @__PURE__ */ (0, W.jsx)(c, { className: "absolute bottom-1 right-0 m-2 h-4 w-4 cursor-help text-muted-foreground hover:text-foreground" })
596
596
  });
597
597
  }, a[20] = E, a[21] = R);
598
598
  let z = R, B = ne === "dark" ? "dark" : void 0, V;
@@ -2,8 +2,8 @@ import { a as e } from "./rolldown-runtime-Cb76FRpK.js";
2
2
  import { t } from "./react-ofJbxM4x.js";
3
3
  import { t as n } from "./compiler-runtime-Cj8ZWiNS.js";
4
4
  import { t as r } from "./jsx-runtime-DgDPJV9S.js";
5
- import { M as i } from "./vega-loader.browser-D95WfUcj.js";
6
- import { n as a } from "./react-vega-5AcMW8gG.js";
5
+ import { M as i } from "./vega-loader.browser-DNST6uVf.js";
6
+ import { n as a } from "./react-vega-ewj7q_U5.js";
7
7
  import { t as o } from "./use-vega-container-remeasure-4DwJbPWu.js";
8
8
  //#region src/components/charts/vega-embed-container.tsx
9
9
  var s = n(), c = /* @__PURE__ */ e(t(), 1), l = r();
@@ -237,8 +237,8 @@ function Ye(e) {
237
237
  if ("spec" in e) return Ye(e.spec);
238
238
  }
239
239
  }
240
- function Xe(t) {
241
- return !t || Object.keys(t).length === 0 ? "auto" : e.mapValues(t, (e) => e === "geometry" || e === "date" || e === "time" ? "string" : e === "datetime" ? "date" : e);
240
+ function Xe(t, { parseDates: n = !1 } = {}) {
241
+ return !t || Object.keys(t).length === 0 ? "auto" : e.mapValues(t, (e) => e === "geometry" ? "string" : e === "date" ? n ? "date" : "string" : e === "time" ? "string" : e === "datetime" ? "date" : e);
242
242
  }
243
243
  //#endregion
244
244
  //#region ../node_modules/.pnpm/d3-dsv@3.0.1/node_modules/d3-dsv/src/dsv.js
@@ -1,9 +1,9 @@
1
- import { i as e } from "./chunk-75Z2AOVW-5_HsvXwr.js";
1
+ import { i as e } from "./chunk-75Z2AOVW-C4AOleKf.js";
2
2
  import { t } from "./src-CA_m4ONl.js";
3
3
  import { n } from "./chunk-Y2CYZVJY-DKKS1VyV.js";
4
- import { $ as r, H as i, K as a, U as o, a as s, b as c, c as l, et as u, f as d, nt as f, tt as p, v as m, w as h, y as g } from "./chunk-DU6HZSFF-BUgAHvnM.js";
4
+ import { $ as r, H as i, K as a, U as o, a as s, b as c, c as l, et as u, f as d, nt as f, tt as p, v as m, w as h, y as g } from "./chunk-DU6HZSFF-1TwWR6gh.js";
5
5
  import { t as _ } from "./rough.esm-CtV9AnV1.js";
6
- import { p as v } from "./mermaid-DPNuhemn.js";
6
+ import { p as v } from "./mermaid-Dnzoxjt1.js";
7
7
  //#region ../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/transparentize.js
8
8
  var y = (e, t) => p(e, "a", -t), b = 1e-10;
9
9
  function x(e, t) {
@@ -1,8 +1,8 @@
1
- import { i as e } from "./chunk-75Z2AOVW-5_HsvXwr.js";
1
+ import { i as e } from "./chunk-75Z2AOVW-C4AOleKf.js";
2
2
  import { n as t } from "./src-CA_m4ONl.js";
3
3
  import { n } from "./chunk-Y2CYZVJY-DKKS1VyV.js";
4
- import { D as r, H as i, K as a, U as o, a as s, b as c, c as l, v as u, w as d, x as f, y as p } from "./chunk-DU6HZSFF-BUgAHvnM.js";
5
- import { p as m } from "./mermaid-DPNuhemn.js";
4
+ import { D as r, H as i, K as a, U as o, a as s, b as c, c as l, v as u, w as d, x as f, y as p } from "./chunk-DU6HZSFF-1TwWR6gh.js";
5
+ import { p as m } from "./mermaid-Dnzoxjt1.js";
6
6
  import { n as h } from "./mermaid-parser.core-DxuSfYwJ.js";
7
7
  import { t as g } from "./chunk-JWPE2WC7-DJvv1t8U.js";
8
8
  //#region ../node_modules/.pnpm/mermaid@11.17.2/node_modules/mermaid/dist/chunks/mermaid.core/wardleyDiagram-VM6X3IG4.mjs
@@ -2,14 +2,14 @@ import { t as e } from "./linear-Cnaq3Tfb.js";
2
2
  import { n as t } from "./ordinal-c7efuCSS.js";
3
3
  import { t as n } from "./range-BAIvbVHp.js";
4
4
  import { q as r } from "./cubic-OaEBhQPK.js";
5
- import { i } from "./chunk-75Z2AOVW-5_HsvXwr.js";
5
+ import { i } from "./chunk-75Z2AOVW-C4AOleKf.js";
6
6
  import { n as a } from "./init-Ix4LXMlt.js";
7
7
  import { n as o } from "./src-CA_m4ONl.js";
8
8
  import { n as s } from "./chunk-Y2CYZVJY-DKKS1VyV.js";
9
- import { D as c, H as l, K as u, U as d, a as f, b as p, c as m, f as h, v as g, w as _, y as v, z as y } from "./chunk-DU6HZSFF-BUgAHvnM.js";
10
- import "./chunk-PWAF6VOD-CTFCL0jI.js";
11
- import { t as b } from "./chunk-GMAD6QVW-Czynz8aA.js";
12
- import { p as x } from "./mermaid-DPNuhemn.js";
9
+ import { D as c, H as l, K as u, U as d, a as f, b as p, c as m, f as h, v as g, w as _, y as v, z as y } from "./chunk-DU6HZSFF-1TwWR6gh.js";
10
+ import "./chunk-PWAF6VOD-lNxB9k8z.js";
11
+ import { t as b } from "./chunk-GMAD6QVW-vStrMz2P.js";
12
+ import { p as x } from "./mermaid-Dnzoxjt1.js";
13
13
  //#region ../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/band.js
14
14
  function S() {
15
15
  var e = t().unknown(void 0), r = e.domain, i = e.range, o = 0, s = 1, c, l, u = !1, d = 0, f = 0, p = .5;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marimo-team/islands",
3
- "version": "0.25.1-dev90",
3
+ "version": "0.25.1",
4
4
  "main": "dist/main.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -198,7 +198,6 @@
198
198
  "@testing-library/jest-dom": "^7.0.1",
199
199
  "@testing-library/react": "^16.3.2",
200
200
  "@types/dompurify": "^3.2.0",
201
- "@types/katex": "^0.16.8",
202
201
  "@types/lodash-es": "^4.17.12",
203
202
  "@types/node": "^24.13.3",
204
203
  "@types/plotly.js": "^2.35.16",
@@ -101,9 +101,9 @@ export const SetupMocks = {
101
101
  const unobserve = vi.fn();
102
102
  const disconnect = vi.fn();
103
103
  global.ResizeObserver = class MockResizeObserver {
104
- observe = observe;
105
- unobserve = unobserve;
106
- disconnect = disconnect;
104
+ public observe = observe;
105
+ public unobserve = unobserve;
106
+ public disconnect = disconnect;
107
107
  } as unknown as typeof ResizeObserver;
108
108
  return { observe, unobserve, disconnect };
109
109
  },
@@ -57,7 +57,7 @@ describe("CellStatusComponent", () => {
57
57
 
58
58
  beforeEach(() => {
59
59
  global.Date = class extends Date {
60
- static override now() {
60
+ public static override now() {
61
61
  return mockDate.getTime();
62
62
  }
63
63
  } as typeof Date;
@@ -9,29 +9,29 @@ import "blob-polyfill";
9
9
  // if we need to test ResizeObserver functionality
10
10
  // we can use a library like "resize-observer-polyfill"
11
11
  globalThis.ResizeObserver ??= class {
12
- observe(_target: Element) {
12
+ public observe(_target: Element) {
13
13
  /* noop */
14
14
  }
15
- unobserve(_target: Element) {
15
+ public unobserve(_target: Element) {
16
16
  /* noop */
17
17
  }
18
- disconnect() {
18
+ public disconnect() {
19
19
  /* noop */
20
20
  }
21
21
  } as never;
22
22
 
23
23
  // mock implementation because jsdom doesn't support IntersectionObserver
24
24
  globalThis.IntersectionObserver ??= class {
25
- observe(_target: Element) {
25
+ public observe(_target: Element) {
26
26
  /* noop */
27
27
  }
28
- unobserve(_target: Element) {
28
+ public unobserve(_target: Element) {
29
29
  /* noop */
30
30
  }
31
- disconnect() {
31
+ public disconnect() {
32
32
  /* noop */
33
33
  }
34
- takeRecords() {
34
+ public takeRecords() {
35
35
  return [];
36
36
  }
37
37
  } as never;
@@ -59,6 +59,7 @@ import {
59
59
  listModelsForAiSettings,
60
60
  } from "../ai/ai-utils";
61
61
  import { getTagColour } from "../ai/display-helpers";
62
+ import { PairWithAgentBanner } from "../editor/actions/pair-with-agent";
62
63
  import {
63
64
  Accordion,
64
65
  AccordionContent,
@@ -2005,6 +2006,7 @@ export const AiConfig: React.FC<AiConfigProps> = ({
2005
2006
  {aiEnabled !== false && (
2006
2007
  <>
2007
2008
  <TabsContent value="ai-providers">
2009
+ <PairWithAgentBanner className="mb-4" />
2008
2010
  <AiProvidersConfig
2009
2011
  form={form}
2010
2012
  config={config}
@@ -107,7 +107,7 @@ const OPTIONAL_DEPENDENCIES: OptionalFeature[] = [
107
107
  },
108
108
  {
109
109
  id: "lens",
110
- packagesRequired: [{ name: "marimo-lens", minVersion: "0.2.0" }],
110
+ packagesRequired: [{ name: "marimo-lens", minVersion: "0.2.3" }],
111
111
  additionalPackageInstalls: [],
112
112
  description: "Select outputs for agents",
113
113
  },
@@ -64,6 +64,10 @@ import { cn } from "@/utils/cn";
64
64
  import { Logger } from "@/utils/Logger";
65
65
  import { AIModelDropdown } from "../ai/ai-model-dropdown";
66
66
  import { useOpenSettingsToTab } from "../app-config/state";
67
+ import {
68
+ PairWithAgentBanner,
69
+ PairWithAgentButton,
70
+ } from "../editor/actions/pair-with-agent";
67
71
  import { PairWithAgentModal } from "../editor/actions/pair-with-agent-modal";
68
72
  import { PromptInput } from "../editor/ai/add-cell-with-ai";
69
73
  import {
@@ -163,6 +167,9 @@ const ChatHeader: React.FC<ChatHeaderProps> = ({
163
167
  </Button>
164
168
  </Tooltip>
165
169
  <div className="flex items-center gap-2">
170
+ <Tooltip content="Connect your agent">
171
+ <PairWithAgentButton className="mr-1" label="Connect" />
172
+ </Tooltip>
166
173
  <MCPStatusIndicator />
167
174
  <Tooltip content="AI Settings">
168
175
  <Button
@@ -493,7 +500,7 @@ const PairWithAgentCallout: React.FC<{
493
500
  onClick={onPairWithAgent}
494
501
  >
495
502
  <SparklesIcon className="h-3.5 w-3.5 shrink-0" />
496
- <span>Work on this notebook with your own agent</span>
503
+ <span>Connect your own agent to this notebook</span>
497
504
  <ArrowRightIcon className="h-3 w-3 shrink-0" />
498
505
  </Button>
499
506
  );
@@ -509,13 +516,17 @@ const ChatPanel = () => {
509
516
  title="Chat with AI"
510
517
  description="No AI provider configured or Chat model not selected"
511
518
  action={
512
- <Button
513
- variant="outline"
514
- size="sm"
515
- onClick={() => handleClick("ai", "ai-providers")}
516
- >
517
- Edit AI settings
518
- </Button>
519
+ <div className="flex flex-col gap-3">
520
+ <Button
521
+ variant="outline"
522
+ size="sm"
523
+ className="self-start"
524
+ onClick={() => handleClick("ai", "ai-providers")}
525
+ >
526
+ Edit AI settings
527
+ </Button>
528
+ <PairWithAgentBanner />
529
+ </div>
519
530
  }
520
531
  icon={<BotMessageSquareIcon />}
521
532
  />
@@ -19,7 +19,7 @@ import {
19
19
  import { Spinner } from "../icons/spinner";
20
20
  import { Button } from "../ui/button";
21
21
  import { ColumnVisibilityDropdown } from "./column-visibility-dropdown";
22
- import { type ExportActionProps, ExportMenu } from "./export-actions";
22
+ import { type ExportActionProps, ExportActions } from "./export-actions";
23
23
 
24
24
  const NOOP_ON_SEARCH = () => {
25
25
  /** no-op*/
@@ -130,7 +130,7 @@ export const TableTopBar = <TData,>({
130
130
  </Button>
131
131
  )}
132
132
  {downloadAs && (
133
- <ExportMenu
133
+ <ExportActions
134
134
  downloadAs={downloadAs}
135
135
  sizeBytes={sizeBytes}
136
136
  sizeBytesIsLoading={sizeBytesIsLoading}