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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/dist/{ConnectedDataExplorerComponent-Dl1grr8z.js → ConnectedDataExplorerComponent-DuD8BVl6.js} +54 -54
  2. package/dist/{Plot-WhbJAbBh.js → Plot-BxlSHo0G.js} +47 -38
  3. package/dist/_basePickBy-Sow3pJjS.js +41 -0
  4. package/dist/{_baseUniq-B4eL5sTC.js → _baseUniq-C87CckHL.js} +15 -54
  5. package/dist/{any-language-editor-CT_9yBde.js → any-language-editor-BHH_pQ6M.js} +21 -21
  6. package/dist/architecture-7HQA4BMR-BHdkAMvZ.js +6 -0
  7. package/dist/{architectureDiagram-VXUJARFQ-vxgYGIMP.js → architectureDiagram-VXUJARFQ-B3YQo9At.js} +15 -15
  8. package/dist/{arrays-Du-jRBAy.js → arrays-beUWo8RF.js} +1 -1
  9. package/dist/assets/__vite-browser-external-WSlCcXn_.js +1 -0
  10. package/dist/assets/{worker-D10K3OOz.js → worker-DUYMdbtA.js} +2 -2
  11. package/dist/{blockDiagram-VD42YOAC-C7x6YTH7.js → blockDiagram-VD42YOAC-CpQ3TKEN.js} +7 -7
  12. package/dist/{button-qsiIHncQ.js → button-DNlNlZY_.js} +82 -84
  13. package/dist/{c4Diagram-YG6GDRKO-Cx4oseGg.js → c4Diagram-YG6GDRKO-CZSU4uqU.js} +4 -4
  14. package/dist/{capabilities-26mwv03y.js → capabilities-Coe9eM9T.js} +2 -2
  15. package/dist/{channel-C_50jIAn.js → channel-X3JKk8gE.js} +1 -1
  16. package/dist/{chat-ui-CtqUthFR.js → chat-ui-Cel1kBfc.js} +147 -146
  17. package/dist/{check-D_YwHEgY.js → check-CWUkiHmb.js} +1 -1
  18. package/dist/{chunk-4F5CHEZ2-Dvo_CFnR.js → chunk-4F5CHEZ2-D5mClyDv.js} +1 -1
  19. package/dist/{chunk-ABZYJK2D-D5YIs71w.js → chunk-ABZYJK2D-CZYCCtLy.js} +1 -1
  20. package/dist/{chunk-ATLVNIR6-CyOjzOcf.js → chunk-ATLVNIR6-DaOzLLgN.js} +1 -1
  21. package/dist/{chunk-B2363JML-BzZqINRO.js → chunk-B2363JML-Br0eA2T3.js} +1 -1
  22. package/dist/{chunk-B4BG7PRW-ZJeV3KdD.js → chunk-B4BG7PRW-4BjV11Br.js} +4 -4
  23. package/dist/{chunk-DI55MBZ5-Dx_wwX6l.js → chunk-DI55MBZ5-DITY3EyP.js} +4 -4
  24. package/dist/{chunk-EXTU4WIE-CgefpSXQ.js → chunk-EXTU4WIE-jUPSAk3i.js} +1 -1
  25. package/dist/{chunk-FRFDVMJY-Derq8UzY.js → chunk-FRFDVMJY-DnEvEFRR.js} +1 -1
  26. package/dist/{chunk-JA3XYJ7Z-CcIOIFpc.js → chunk-JA3XYJ7Z-BcPEfxk_.js} +2 -2
  27. package/dist/{chunk-JZLCHNYA-CgO0GG1p.js → chunk-JZLCHNYA-2bnLL3xL.js} +4 -4
  28. package/dist/{chunk-N4CR4FBY-2qzGzAxT.js → chunk-N4CR4FBY-CpZSuGSU.js} +5 -5
  29. package/dist/{chunk-PL6DKKU2-KoG71Zin.js → chunk-PL6DKKU2-DnId6G-x.js} +1 -1
  30. package/dist/{chunk-QN33PNHL-Dp1qBo28.js → chunk-QN33PNHL-B9p5ojHB.js} +1 -1
  31. package/dist/{chunk-QXUST7PY-BxmmeIwf.js → chunk-QXUST7PY-Ch6F5Obl.js} +5 -5
  32. package/dist/{chunk-S3R3BYOJ-D3Rys9ZW.js → chunk-S3R3BYOJ-B0UOFJwq.js} +3 -3
  33. package/dist/{chunk-SJTYNZTY-Co-DhKAG.js → chunk-SJTYNZTY-BsBZnJUj.js} +1 -1
  34. package/dist/{chunk-TCCFYFTB-BAhzIqBO.js → chunk-TCCFYFTB-Clbl-fTg.js} +8 -7
  35. package/dist/{chunk-TQ3KTPDO-DxYI735Z.js → chunk-TQ3KTPDO-CFkSQ30e.js} +1 -1
  36. package/dist/{chunk-TZMSLE5B-Dxumt0wv.js → chunk-TZMSLE5B-D45397J2.js} +1 -1
  37. package/dist/{chunk-UMXZTB3W-CuahpKin.js → chunk-UMXZTB3W-D-A834Bq.js} +1 -1
  38. package/dist/{classDiagram-v2-WZHVMYZB-CYoFMQKE.js → classDiagram-2ON5EDUG-C8-zE3Zv.js} +10 -10
  39. package/dist/{classDiagram-2ON5EDUG-DkOvXRlx.js → classDiagram-v2-WZHVMYZB-DrmbGANl.js} +10 -10
  40. package/dist/{clone-DDndUqI0.js → clone-DZFQCtFJ.js} +1 -1
  41. package/dist/{constants-D1Am36hX.js → constants-CvyfaCvs.js} +3 -3
  42. package/dist/{copy-CBo9JcJW.js → copy-B7781WJ3.js} +2 -2
  43. package/dist/{dagre-6UL2VRFP-BXBaU8PB.js → dagre-6UL2VRFP-OMItEBnY.js} +12 -12
  44. package/dist/{dagre-D3dlYz-r.js → dagre-QVd-lCXU.js} +13 -23
  45. package/dist/{data-grid-overlay-editor-nZux6_d2.js → data-grid-overlay-editor-lKF301ME.js} +1 -1
  46. package/dist/{diagram-PSM6KHXK-CJxjk4LG.js → diagram-PSM6KHXK-CkKbohWI.js} +16 -16
  47. package/dist/{diagram-QEK2KX5R-IMILPh_p.js → diagram-QEK2KX5R-DjUMpVcx.js} +14 -14
  48. package/dist/{diagram-S2PKOQOG-6O0g6Boj.js → diagram-S2PKOQOG-b-c0d-wZ.js} +14 -14
  49. package/dist/{dist-BkXs8bw0.js → dist--6TSlp8H.js} +1 -1
  50. package/dist/dist-7K5doRvB.js +6 -0
  51. package/dist/{dist-CQidOwep.js → dist-B43sbpd0.js} +3 -3
  52. package/dist/dist-B6I_A2-E.js +8 -0
  53. package/dist/dist-BEQsmaZY.js +5 -0
  54. package/dist/dist-BasY2RHp.js +8 -0
  55. package/dist/{dist-BemtTYzN.js → dist-Bfp1XXWt.js} +5 -5
  56. package/dist/{dist-v-1kgqZ3.js → dist-BjDuO5JW.js} +1 -1
  57. package/dist/dist-Bosc00dY.js +5 -0
  58. package/dist/{dist-DLNKBPsk.js → dist-BrxqmS9Q.js} +4 -4
  59. package/dist/{dist-DBYL08Lu.js → dist-BvhGByxL.js} +4 -4
  60. package/dist/{dist-CVqlhD3M.js → dist-C4bq5Ioy.js} +2 -2
  61. package/dist/{dist-DwmxBUOe.js → dist-CFKdzOIu.js} +2 -2
  62. package/dist/{dist-5nTQE2yt.js → dist-CIB8w0Fl.js} +2 -2
  63. package/dist/{dist-C-EcLtO9.js → dist-CNF0QBLR.js} +1 -1
  64. package/dist/dist-CQMZOn-_.js +8 -0
  65. package/dist/dist-CViQhWZ8.js +5 -0
  66. package/dist/{dist-Dg65j0em.js → dist-CcMfr7jD.js} +1 -1
  67. package/dist/{dist-C0XYIHKJ.js → dist-Ci0CXEFt.js} +1 -1
  68. package/dist/dist-Cz6rLfwY.js +5 -0
  69. package/dist/dist-D8eq8st3.js +6 -0
  70. package/dist/{dist-qoCY8giM.js → dist-DAfcmt-d.js} +2 -2
  71. package/dist/{dist-B6Op2ogv.js → dist-DD_cYHOl.js} +2 -2
  72. package/dist/{dist-BUSLKXcu.js → dist-DFK94vuS.js} +2 -2
  73. package/dist/{dist-DBXPlQ0D.js → dist-DGNtjMZu.js} +1 -1
  74. package/dist/{dist-C9qF7MRB.js → dist-DJ9F1eHs.js} +2 -2
  75. package/dist/{dist-Ci_jEudG.js → dist-DJKubHDd.js} +1 -1
  76. package/dist/{dist-CnFp2Kcl.js → dist-DLafRu9s.js} +2 -2
  77. package/dist/dist-DM1UDXdl.js +5 -0
  78. package/dist/dist-DNrtWPgS.js +5 -0
  79. package/dist/dist-D_UjpfOY.js +1381 -0
  80. package/dist/{dist-DmFS6KZW.js → dist-DbnBiLNH.js} +3 -3
  81. package/dist/{dist-BiZZAo22.js → dist-DlSUOIm9.js} +1 -1
  82. package/dist/{dist-DStU8He1.js → dist-Doy0mQDg.js} +2 -2
  83. package/dist/{dist-CxAX99oC.js → dist-DpkJHKB8.js} +2 -2
  84. package/dist/{dist-DjaZNkZ7.js → dist-LhQNUe5A.js} +3 -3
  85. package/dist/dist-V7q2qnpA.js +5 -0
  86. package/dist/{dist-BJ3fhRYu.js → dist-VqF3W_ue.js} +2 -2
  87. package/dist/dist-a5_hPgu2.js +8 -0
  88. package/dist/{dist-B9KLrfoh.js → dist-ej6AQKaS.js} +1 -1
  89. package/dist/{dist-Brb6VNc4.js → dist-m9tsXsFf.js} +2 -2
  90. package/dist/{dist-CBwMSFDu.js → dist-tGk0aZ--.js} +2 -2
  91. package/dist/dist-uVyZcV1-.js +5 -0
  92. package/dist/{erDiagram-Q2GNP2WA-sho7Cl9f.js → erDiagram-Q2GNP2WA-CDhLaOZ1.js} +10 -10
  93. package/dist/{error-banner-Bx9kIgrs.js → error-banner-Cjf0RU9I.js} +79 -79
  94. package/dist/{esm-CMg2ABu6.js → esm-4wmsH2lp.js} +6 -6
  95. package/dist/{esm-cqK9POGH.js → esm-CD1iby2n.js} +23 -23
  96. package/dist/{flowDiagram-NV44I4VS-C4nY4Fbz.js → flowDiagram-NV44I4VS-BDi4O4CL.js} +10 -10
  97. package/dist/{ganttDiagram-JELNMOA3-CtxNcCM2.js → ganttDiagram-JELNMOA3-BpZE6kVp.js} +3 -3
  98. package/dist/{gitGraph-G5XIXVHT-SL6TDof6.js → gitGraph-G5XIXVHT-B_c6xFJv.js} +3 -3
  99. package/dist/{gitGraphDiagram-V2S2FVAM-D9885mxd.js → gitGraphDiagram-V2S2FVAM-iQnXzbPM.js} +13 -13
  100. package/dist/{glide-data-editor-CkVEV-Gk.js → glide-data-editor-BqnvTmDo.js} +1739 -1708
  101. package/dist/{graphlib-CxWdvYQt.js → graphlib-BV1_gi0C.js} +4 -3
  102. package/dist/hasIn-DnfJcYpY.js +108 -0
  103. package/dist/{info-VBDWY6EO-6MXPTSmi.js → info-VBDWY6EO-BTyzxmhr.js} +3 -3
  104. package/dist/{infoDiagram-HS3SLOUP-Bw2FlRwF.js → infoDiagram-HS3SLOUP-OYrX6uO3.js} +13 -13
  105. package/dist/{input-BSde8uV4.js → input-CFY9gApZ.js} +5055 -5055
  106. package/dist/{isEmpty-BQtUinxJ.js → isEmpty-B7FX9wKt.js} +1 -1
  107. package/dist/{isSymbol-DFp8040B.js → isSymbol-DCbjQG_U.js} +1 -1
  108. package/dist/{journeyDiagram-XKPGCS4Q-BXlCEth8.js → journeyDiagram-XKPGCS4Q-ClPC94aN.js} +3 -3
  109. package/dist/{kanban-definition-3W4ZIXB7-CorxzSYm.js → kanban-definition-3W4ZIXB7-DHEAKdZt.js} +7 -7
  110. package/dist/{label-DTNqw9tv.js → label-DbZGAoCH.js} +538 -569
  111. package/dist/{loader-3c9hT4kT.js → loader-Bd1kgLn7.js} +19 -16
  112. package/dist/main.js +3203 -3105
  113. package/dist/{memoize-CuHciEBb.js → memoize-CSTI9eOX.js} +1 -1
  114. package/dist/{merge-CA_buyY3.js → merge-CVhG7q_o.js} +1 -1
  115. package/dist/{mermaid-CEKslOkI.js → mermaid-B2HDLx2g.js} +54 -54
  116. package/dist/{mermaid-parser.core-cq4YDee-.js → mermaid-parser.core-ntCgyx0x.js} +8 -8
  117. package/dist/min-Ds3gG0Ff.js +96 -0
  118. package/dist/{mindmap-definition-VGOIOE7T-DRsT8UaN.js → mindmap-definition-VGOIOE7T-CxEUZZvY.js} +9 -9
  119. package/dist/{now-CXAdKY5k.js → now-nrrrOr01.js} +1 -1
  120. package/dist/{once-CZno0h-b.js → once-C_TIu-kR.js} +1 -1
  121. package/dist/{packet-DYOGHKS2-Dw08gMaZ.js → packet-DYOGHKS2-BhvnpoGi.js} +3 -3
  122. package/dist/{pie-VRWISCQL-C5SPSvT8.js → pie-VRWISCQL-dILuA3iG.js} +3 -3
  123. package/dist/{pieDiagram-ADFJNKIX-DhJ1Cx2O.js → pieDiagram-ADFJNKIX-U3LrUqAS.js} +14 -14
  124. package/dist/{process-output-KyzWazB-.js → process-output-DC1TOnIl.js} +3184 -3207
  125. package/dist/{quadrantDiagram-AYHSOK5B-DXUFIWlz.js → quadrantDiagram-AYHSOK5B-BVWuq-3R.js} +2 -2
  126. package/dist/{radar-ZZBFDIW7-BvY0bgSg.js → radar-ZZBFDIW7-DwFrOJDj.js} +3 -3
  127. package/dist/range-fJeId9Ri.js +30 -0
  128. package/dist/{requirementDiagram-UZGBJVZJ-DO_gtQIb.js → requirementDiagram-UZGBJVZJ-D0zpQnKC.js} +9 -9
  129. package/dist/{sankeyDiagram-TZEHDZUN-OZzXEkuG.js → sankeyDiagram-TZEHDZUN-CExy1joT.js} +2 -2
  130. package/dist/{sequenceDiagram-WL72ISMW-K7nZRifV.js → sequenceDiagram-WL72ISMW-D1BJxLjH.js} +4 -4
  131. package/dist/{slides-component-CIcSvFh7.js → slides-component-CX2JC-Ws.js} +2 -2
  132. package/dist/{spec-DYaR1rJh.js → spec-CD7QaCV-.js} +3 -3
  133. package/dist/{stateDiagram-FKZM4ZOC-DzXJZAq7.js → stateDiagram-FKZM4ZOC-B1S8jGMn.js} +12 -12
  134. package/dist/{stateDiagram-v2-4FDKWEC3-BZBPUmyF.js → stateDiagram-v2-4FDKWEC3-BH5ozUbc.js} +10 -10
  135. package/dist/stex-CQDv3aS8.js +4 -0
  136. package/dist/style.css +1 -1
  137. package/dist/{timeline-definition-IT6M3QCI-DNoLAh-i.js → timeline-definition-IT6M3QCI-BDT9JAmn.js} +2 -2
  138. package/dist/{toDate-D6VXexnV.js → toDate-CUqpEbBS.js} +5 -5
  139. package/dist/{toNumber-xFPoy1OI.js → toNumber-55tjPCWr.js} +2 -2
  140. package/dist/tooltip-BXEpXV3R.js +404 -0
  141. package/dist/{treemap-GDKQZRPO-C5OoxpmV.js → treemap-GDKQZRPO-bx2ngsgN.js} +3 -3
  142. package/dist/{types-CQ-RbYxp.js → types-D_ntCXg0.js} +3 -3
  143. package/dist/{useAsyncData-Cd4Urlww.js → useAsyncData-rN1nzPaS.js} +2 -2
  144. package/dist/{useDeepCompareMemoize-X7clcrcQ.js → useDeepCompareMemoize-Ch-7Rk2x.js} +4 -4
  145. package/dist/{useIframeCapabilities-BVQrlRBd.js → useIframeCapabilities-CqhrVue6.js} +1 -1
  146. package/dist/useLifecycle-4fA1pHoh.js +177 -0
  147. package/dist/{useTheme-Dm1WaAGy.js → useTheme-MWfxn4oz.js} +4 -5
  148. package/dist/{vega-component-A6unyUJS.js → vega-component-CPhNLfZZ.js} +25 -25
  149. package/dist/{xychartDiagram-PRI3JC2R-ehVeySMW.js → xychartDiagram-PRI3JC2R-CuAZiqHS.js} +5 -5
  150. package/dist/{Combination-B--d1_LV.js → zod-C6UGQ3fz.js} +8085 -8151
  151. package/package.json +8 -41
  152. package/src/__mocks__/common.ts +4 -4
  153. package/src/__tests__/main.test.tsx +12 -14
  154. package/src/components/ai/ai-provider-icon.tsx +3 -2
  155. package/src/components/app-config/user-config-form.tsx +0 -27
  156. package/src/components/chat/acp/agent-docs.tsx +3 -3
  157. package/src/components/chat/acp/agent-panel.tsx +71 -24
  158. package/src/components/chat/acp/agent-selector.tsx +2 -11
  159. package/src/components/chat/acp/state.ts +15 -3
  160. package/src/components/chat/chat-history-popover.tsx +1 -1
  161. package/src/components/chat/chat-panel.tsx +2 -1
  162. package/src/components/data-table/TableBottomBar.tsx +12 -1
  163. package/src/components/data-table/TableTopBar.tsx +31 -35
  164. package/src/components/data-table/__tests__/columns.test.tsx +7 -7
  165. package/src/components/data-table/cell-hover-template/types.ts +1 -1
  166. package/src/components/data-table/cell-hover-text/types.ts +1 -1
  167. package/src/components/data-table/cell-selection/__tests__/feature.test.ts +1 -1
  168. package/src/components/data-table/cell-selection/types.ts +4 -3
  169. package/src/components/data-table/cell-styling/types.ts +1 -1
  170. package/src/components/data-table/charts/chart-spec/altair-generator.ts +2 -2
  171. package/src/components/data-table/charts/charts.tsx +42 -13
  172. package/src/components/data-table/charts/components/chart-items.tsx +1 -1
  173. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
  174. package/src/components/data-table/column-formatting/types.ts +5 -4
  175. package/src/components/data-table/column-header.tsx +4 -2
  176. package/src/components/data-table/column-summary/legacy-chart-spec.ts +1 -1
  177. package/src/components/data-table/column-wrapping/types.ts +4 -3
  178. package/src/components/data-table/columns.tsx +4 -1
  179. package/src/components/data-table/copy-column/types.ts +4 -3
  180. package/src/components/data-table/data-table.tsx +16 -11
  181. package/src/components/data-table/focus-row/types.ts +4 -3
  182. package/src/components/data-table/loading-table.tsx +5 -2
  183. package/src/components/data-table/pagination.tsx +1 -1
  184. package/src/components/data-table/range-focus/__tests__/atoms.test.ts +13 -13
  185. package/src/components/data-table/range-focus/__tests__/use-cell-range-selection.test.ts +9 -11
  186. package/src/components/data-table/range-focus/atoms.ts +2 -2
  187. package/src/components/data-table/range-focus/cell-selection-stats.tsx +3 -1
  188. package/src/components/data-table/row-viewer-panel/row-viewer.tsx +1 -1
  189. package/src/components/data-table/table-explorer-panel/table-explorer-panel.tsx +2 -2
  190. package/src/components/dependency-graph/dependency-graph-tree.tsx +1 -1
  191. package/src/components/editor/__tests__/data-attributes.test.tsx +93 -94
  192. package/src/components/editor/__tests__/dynamic-favicon.test.tsx +1 -1
  193. package/src/components/editor/actions/name-cell-input.tsx +4 -2
  194. package/src/components/editor/actions/pair-with-agent-modal.tsx +142 -0
  195. package/src/components/editor/actions/useCellActionButton.tsx +4 -2
  196. package/src/components/editor/actions/useNotebookActions.tsx +10 -0
  197. package/src/components/editor/ai/add-cell-with-ai.tsx +2 -1
  198. package/src/components/editor/ai/ai-completion-editor.tsx +1 -1
  199. package/src/components/editor/app-container.tsx +1 -1
  200. package/src/components/editor/cell/CellStatus.tsx +4 -5
  201. package/src/components/editor/cell/cell-context-menu.tsx +4 -2
  202. package/src/components/editor/cell/code/cell-editor.tsx +3 -2
  203. package/src/components/editor/cell/toolbar.tsx +2 -1
  204. package/src/components/editor/chrome/components/contribute-snippet-button.tsx +4 -1
  205. package/src/components/editor/chrome/components/feedback-button.tsx +4 -1
  206. package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +1 -1
  207. package/src/components/editor/chrome/panels/empty-state.tsx +1 -0
  208. package/src/components/editor/chrome/panels/file-explorer-panel.tsx +0 -10
  209. package/src/components/editor/chrome/panels/snippets-panel.tsx +1 -1
  210. package/src/components/editor/chrome/panels/write-secret-modal.tsx +1 -1
  211. package/src/components/editor/chrome/wrapper/app-chrome.tsx +4 -1
  212. package/src/components/editor/chrome/wrapper/footer-items/lsp-status.tsx +2 -1
  213. package/src/components/editor/chrome/wrapper/storage.ts +2 -2
  214. package/src/components/editor/connections/database/as-code.ts +1 -1
  215. package/src/components/editor/connections/form-renderers.tsx +1 -1
  216. package/src/components/editor/connections/storage/as-code.ts +1 -1
  217. package/src/components/editor/controls/keyboard-shortcuts.tsx +1 -1
  218. package/src/components/editor/header/filename-input.tsx +4 -1
  219. package/src/components/editor/links/cell-link-list.tsx +1 -1
  220. package/src/components/editor/navigation/__tests__/navigation.test.ts +1 -1
  221. package/src/components/editor/navigation/clipboard.ts +1 -1
  222. package/src/components/editor/navigation/multi-cell-action-toolbar.tsx +2 -2
  223. package/src/components/editor/navigation/navigation.ts +3 -3
  224. package/src/components/editor/notebook-cell.tsx +1 -1
  225. package/src/components/editor/output/JsonOutput.tsx +6 -6
  226. package/src/components/editor/output/ansi-reduce.ts +2 -2
  227. package/src/components/editor/output/console/ConsoleOutput.tsx +2 -2
  228. package/src/components/editor/renderers/cells-renderer.tsx +1 -1
  229. package/src/components/editor/renderers/grid-layout/grid-layout.tsx +1 -1
  230. package/src/components/editor/renderers/plugins.ts +1 -1
  231. package/src/components/editor/renderers/slides-layout/types.ts +2 -2
  232. package/src/components/editor/renderers/vertical-layout/__tests__/useFocusFirstEditor.test.ts +2 -2
  233. package/src/components/editor/renderers/vertical-layout/__tests__/vertical-layout.test.ts +1 -1
  234. package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +12 -13
  235. package/src/components/find-replace/find-replace.tsx +3 -1
  236. package/src/components/forms/form.tsx +1 -1
  237. package/src/components/forms/options.ts +1 -1
  238. package/src/components/pages/gallery-page.tsx +1 -1
  239. package/src/components/static-html/static-banner.tsx +2 -2
  240. package/src/components/storage/__tests__/storage-snippets.test.ts +4 -6
  241. package/src/components/terminal/terminal.tsx +4 -4
  242. package/src/components/tracing/tracing.test.tsx +30 -30
  243. package/src/components/ui/accordion.tsx +1 -1
  244. package/src/components/ui/alert-dialog.tsx +1 -1
  245. package/src/components/ui/badge.tsx +2 -1
  246. package/src/components/ui/button.tsx +5 -4
  247. package/src/components/ui/calendar.tsx +3 -2
  248. package/src/components/ui/checkbox.tsx +1 -1
  249. package/src/components/ui/combobox.tsx +2 -1
  250. package/src/components/ui/command.tsx +5 -2
  251. package/src/components/ui/context-menu.tsx +1 -1
  252. package/src/components/ui/date-input.tsx +7 -6
  253. package/src/components/ui/date-picker.tsx +6 -4
  254. package/src/components/ui/dialog.tsx +1 -1
  255. package/src/components/ui/draggable-popover.tsx +1 -1
  256. package/src/components/ui/dropdown-menu.tsx +2 -1
  257. package/src/components/ui/field.tsx +1 -2
  258. package/src/components/ui/form.tsx +4 -5
  259. package/src/components/ui/fullscreen.tsx +4 -1
  260. package/src/components/ui/label.tsx +1 -1
  261. package/src/components/ui/navigation.tsx +1 -1
  262. package/src/components/ui/popover.tsx +1 -1
  263. package/src/components/ui/progress.tsx +4 -3
  264. package/src/components/ui/query-param-preserving-link.tsx +4 -2
  265. package/src/components/ui/radio-group.tsx +1 -1
  266. package/src/components/ui/range-slider.tsx +1 -1
  267. package/src/components/ui/scroll-area.tsx +1 -1
  268. package/src/components/ui/select.tsx +1 -1
  269. package/src/components/ui/sheet.tsx +3 -2
  270. package/src/components/ui/slider.tsx +1 -1
  271. package/src/components/ui/switch.tsx +1 -1
  272. package/src/components/ui/tabs.tsx +1 -1
  273. package/src/components/ui/textarea.tsx +1 -2
  274. package/src/components/ui/toast.tsx +1 -1
  275. package/src/components/ui/toggle.tsx +1 -1
  276. package/src/components/ui/tooltip.tsx +1 -1
  277. package/src/components/variables/variables-table.tsx +1 -1
  278. package/src/core/ai/context/providers/__tests__/datasource.test.ts +1 -1
  279. package/src/core/ai/context/providers/__tests__/error.test.ts +1 -1
  280. package/src/core/ai/context/providers/__tests__/variable.test.ts +1 -1
  281. package/src/core/ai/context/providers/cell-output.ts +1 -2
  282. package/src/core/ai/context/registry.ts +2 -2
  283. package/src/core/ai/tools/edit-notebook-tool.ts +4 -3
  284. package/src/core/ai/tools/registry.ts +1 -1
  285. package/src/core/ai/tools/run-cells-tool.ts +4 -3
  286. package/src/core/cells/__tests__/add-missing-import.test.ts +23 -22
  287. package/src/core/cells/__tests__/cell.test.ts +14 -13
  288. package/src/core/cells/__tests__/cells.test.ts +2 -2
  289. package/src/core/cells/__tests__/scrollCellIntoView.test.ts +1 -1
  290. package/src/core/cells/__tests__/session.test.ts +1 -1
  291. package/src/core/cells/__tests__/utils.test.ts +1 -1
  292. package/src/core/cells/cells.ts +2 -2
  293. package/src/core/cells/ids.ts +1 -1
  294. package/src/core/cells/logs.ts +1 -1
  295. package/src/core/codemirror/ai/request.ts +1 -1
  296. package/src/core/codemirror/cells/__tests__/extensions.test.ts +15 -17
  297. package/src/core/codemirror/cells/traceback-decorations.ts +1 -1
  298. package/src/core/codemirror/copilot/__tests__/language-server.test.ts +1 -1
  299. package/src/core/codemirror/copilot/__tests__/transport.test.ts +129 -3
  300. package/src/core/codemirror/copilot/client.ts +9 -2
  301. package/src/core/codemirror/copilot/getCodes.ts +1 -1
  302. package/src/core/codemirror/copilot/language-server.ts +12 -1
  303. package/src/core/codemirror/copilot/transport.ts +34 -8
  304. package/src/core/codemirror/copilot/types.ts +1 -1
  305. package/src/core/codemirror/facet.ts +1 -1
  306. package/src/core/codemirror/language/__tests__/sql.test.ts +4 -4
  307. package/src/core/codemirror/language/languages/markdown.ts +1 -3
  308. package/src/core/codemirror/language/languages/python.ts +4 -0
  309. package/src/core/codemirror/language/languages/sql/completion-builder.ts +1 -1
  310. package/src/core/codemirror/language/languages/sql/completion-sources.tsx +4 -6
  311. package/src/core/codemirror/language/languages/sql/sql.ts +1 -3
  312. package/src/core/codemirror/language/metadata.ts +1 -1
  313. package/src/core/codemirror/language/panel/sql.tsx +4 -1
  314. package/src/core/codemirror/language/types.ts +1 -1
  315. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +1 -1
  316. package/src/core/codemirror/lsp/notebook-lsp.ts +1 -1
  317. package/src/core/codemirror/misc/__tests__/dnd.test.ts +1 -1
  318. package/src/core/codemirror/reactive-references/__tests__/analyzer.test.ts +28 -42
  319. package/src/core/codemirror/rtc/loro/awareness.ts +1 -1
  320. package/src/core/config/__tests__/config-schema.test.ts +2 -6
  321. package/src/core/config/config-schema.ts +0 -1
  322. package/src/core/config/feature-flag.tsx +1 -3
  323. package/src/core/datasets/data-source-connections.ts +4 -2
  324. package/src/core/datasets/state.ts +1 -1
  325. package/src/core/dom/__tests__/htmlUtils.test.ts +8 -14
  326. package/src/core/dom/__tests__/outline.test.ts +2 -3
  327. package/src/core/dom/outline.ts +1 -1
  328. package/src/core/edit-app.tsx +4 -1
  329. package/src/core/export/__tests__/hooks.test.ts +1 -1
  330. package/src/core/hotkeys/__tests__/hotkeys.test.ts +1 -1
  331. package/src/core/hotkeys/shortcuts.ts +1 -1
  332. package/src/core/islands/__tests__/bridge.test.ts +2 -2
  333. package/src/core/islands/__tests__/parse.test.ts +8 -7
  334. package/src/core/islands/bridge.ts +2 -2
  335. package/src/core/islands/components/output-wrapper.tsx +1 -1
  336. package/src/core/islands/parse.ts +1 -1
  337. package/src/core/lsp/__tests__/transport.test.ts +1 -1
  338. package/src/core/network/CachingRequestRegistry.ts +1 -1
  339. package/src/core/network/DeferredRequestRegistry.ts +1 -1
  340. package/src/core/network/__tests__/requests-network.test.ts +1 -1
  341. package/src/core/network/api.ts +2 -2
  342. package/src/core/network/requests-lazy.ts +1 -1
  343. package/src/core/network/requests-toasting.tsx +1 -1
  344. package/src/core/runtime/runtime.ts +1 -0
  345. package/src/core/saving/__tests__/filename.test.ts +7 -6
  346. package/src/core/static/__tests__/download-html.test.ts +16 -15
  347. package/src/core/static/__tests__/files.test.ts +30 -28
  348. package/src/core/static/files.ts +1 -1
  349. package/src/core/vscode/vscode-bindings.ts +1 -1
  350. package/src/core/wasm/bridge.ts +3 -3
  351. package/src/core/wasm/worker/tracer.ts +1 -1
  352. package/src/core/websocket/useWebSocket.tsx +5 -3
  353. package/src/css/app/Cell.css +25 -1
  354. package/src/css/globals.css +18 -16
  355. package/src/css/table.css +17 -0
  356. package/src/custom.d.ts +1 -1
  357. package/src/hooks/__tests__/useDuplicateShortcuts.test.ts +3 -3
  358. package/src/hooks/debug.ts +3 -3
  359. package/src/hooks/useDebounce.ts +1 -1
  360. package/src/hooks/useEventListener.ts +1 -1
  361. package/src/hooks/useHotkey.ts +1 -1
  362. package/src/hooks/useLifecycle.ts +2 -2
  363. package/src/hooks/useNonce.ts +1 -1
  364. package/src/hooks/useResizeObserver.ts +2 -2
  365. package/src/main.tsx +1 -1
  366. package/src/plugins/core/BadPlugin.tsx +7 -6
  367. package/src/plugins/core/RenderHTML.tsx +3 -3
  368. package/src/plugins/core/__test__/registerReactComponent.test.ts +1 -1
  369. package/src/plugins/core/registerReactComponent.tsx +4 -4
  370. package/src/plugins/core/rpc.ts +1 -1
  371. package/src/plugins/impl/CheckboxPlugin.tsx +4 -1
  372. package/src/plugins/impl/DataEditorPlugin.tsx +8 -3
  373. package/src/plugins/impl/DataTablePlugin.tsx +6 -2
  374. package/src/plugins/impl/FileBrowserPlugin.tsx +1 -1
  375. package/src/plugins/impl/FormPlugin.tsx +2 -3
  376. package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +4 -1
  377. package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +1 -1
  378. package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +43 -15
  379. package/src/plugins/impl/anywidget/AnyWidgetPlugin.tsx +3 -12
  380. package/src/plugins/impl/anywidget/__tests__/model.test.ts +2 -2
  381. package/src/plugins/impl/anywidget/model.ts +1 -1
  382. package/src/plugins/impl/anywidget/types.ts +2 -2
  383. package/src/plugins/impl/anywidget/widget-binding.ts +1 -1
  384. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
  385. package/src/plugins/impl/chat/chat-ui.tsx +5 -2
  386. package/src/plugins/impl/data-editor/glide-data-editor.tsx +2 -2
  387. package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +2 -2
  388. package/src/plugins/impl/data-explorer/components/query-form.tsx +1 -1
  389. package/src/plugins/impl/data-explorer/functions/function.ts +1 -1
  390. package/src/plugins/impl/data-explorer/queries/types.ts +1 -1
  391. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -1
  392. package/src/plugins/impl/data-frames/forms/__tests__/form.test.tsx +7 -9
  393. package/src/plugins/impl/data-frames/forms/renderers.tsx +1 -1
  394. package/src/plugins/impl/data-frames/utils/operators.ts +1 -1
  395. package/src/plugins/impl/matplotlib/MatplotlibPlugin.tsx +1 -1
  396. package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +1 -1
  397. package/src/plugins/impl/panel/PanelPlugin.tsx +2 -2
  398. package/src/plugins/impl/plotly/Plot.tsx +3 -3
  399. package/src/plugins/impl/plotly/PlotlyPlugin.tsx +65 -103
  400. package/src/plugins/impl/plotly/__tests__/PlotlyPlugin.test.tsx +114 -0
  401. package/src/plugins/impl/plotly/__tests__/selection.test.ts +199 -0
  402. package/src/plugins/impl/plotly/selection.ts +333 -0
  403. package/src/plugins/impl/vega/__tests__/make-selectable.test.ts +13 -14
  404. package/src/plugins/impl/vega/__tests__/utils.test.ts +68 -0
  405. package/src/plugins/impl/vega/batched.ts +1 -1
  406. package/src/plugins/impl/vega/make-selectable.ts +3 -3
  407. package/src/plugins/impl/vega/types.ts +1 -1
  408. package/src/plugins/impl/vega/utils.ts +14 -5
  409. package/src/plugins/impl/vega/vega.css +2 -1
  410. package/src/plugins/layout/DownloadPlugin.tsx +1 -1
  411. package/src/plugins/layout/ImageComparisonPlugin.tsx +1 -3
  412. package/src/plugins/layout/LazyPlugin.tsx +1 -1
  413. package/src/plugins/layout/RoutesPlugin.tsx +1 -1
  414. package/src/plugins/layout/mermaid/mermaid.tsx +1 -1
  415. package/src/plugins/plugins.ts +1 -1
  416. package/src/plugins/stateless-plugin.ts +4 -2
  417. package/src/stories/data-explorer.stories.tsx +1 -1
  418. package/src/stories/dataframe.stories.tsx +1 -1
  419. package/src/stories/editor.stories.tsx +1 -1
  420. package/src/stories/select.stories.tsx +1 -1
  421. package/src/stories/switchable-multi-select.stories.tsx +1 -1
  422. package/src/utils/Logger.ts +1 -1
  423. package/src/utils/__tests__/arrays.test.ts +1 -1
  424. package/src/utils/__tests__/blob.test.ts +1 -1
  425. package/src/utils/__tests__/cell-urls.test.ts +24 -21
  426. package/src/utils/__tests__/dates.test.ts +1 -1
  427. package/src/utils/__tests__/errors.test.ts +1 -1
  428. package/src/utils/__tests__/filenames.test.ts +15 -14
  429. package/src/utils/__tests__/json-parser.test.ts +14 -21
  430. package/src/utils/__tests__/multi-map.test.ts +3 -3
  431. package/src/utils/__tests__/objects.test.ts +3 -3
  432. package/src/utils/__tests__/path.test.ts +34 -31
  433. package/src/utils/__tests__/urls.test.ts +19 -18
  434. package/src/utils/__tests__/versions.test.ts +5 -5
  435. package/src/utils/__tests__/waitForWs.test.ts +1 -1
  436. package/src/utils/arrays.ts +2 -2
  437. package/src/utils/assertNever.ts +1 -1
  438. package/src/utils/batch-requests.ts +2 -2
  439. package/src/utils/createReducer.ts +2 -2
  440. package/src/utils/id-tree.tsx +2 -2
  441. package/src/utils/idle.ts +1 -1
  442. package/src/utils/invariant.ts +1 -2
  443. package/src/utils/json/base64.ts +2 -5
  444. package/src/utils/maps.ts +1 -1
  445. package/src/utils/math.ts +0 -1
  446. package/src/utils/mime-types.ts +1 -1
  447. package/src/utils/multi-map.ts +1 -1
  448. package/src/utils/objects.ts +1 -1
  449. package/src/utils/once.ts +2 -2
  450. package/src/utils/staticImplements.ts +1 -1
  451. package/src/utils/storage/jotai.ts +1 -1
  452. package/src/utils/tracer.ts +3 -2
  453. package/dist/_basePickBy-QjOmBDRE.js +0 -110
  454. package/dist/_baseSet-xgn1IbGV.js +0 -27
  455. package/dist/architecture-7HQA4BMR-BRyVh_Za.js +0 -6
  456. package/dist/assets/__vite-browser-external-Us1ds95c.js +0 -1
  457. package/dist/dist-B0R_ZM4-.js +0 -6
  458. package/dist/dist-B4a9_9pj.js +0 -5
  459. package/dist/dist-BCSUKEwO.js +0 -5
  460. package/dist/dist-BONIDQq6.js +0 -5
  461. package/dist/dist-BYeRx2hb.js +0 -5
  462. package/dist/dist-D2Rk1j4R.js +0 -1381
  463. package/dist/dist-DZjX5TYv.js +0 -5
  464. package/dist/dist-Dkw9x6kc.js +0 -5
  465. package/dist/dist-Ds6UaXGR.js +0 -6
  466. package/dist/dist-KuEJ1Q53.js +0 -8
  467. package/dist/dist-S72WNyTZ.js +0 -5
  468. package/dist/dist-bTG-yssT.js +0 -5
  469. package/dist/dist-diF0sguc.js +0 -8
  470. package/dist/dist-mJ84BIgu.js +0 -8
  471. package/dist/dist-wSIhFWQz.js +0 -8
  472. package/dist/get-CqrzlV1v.js +0 -68
  473. package/dist/range-CYz5jI--.js +0 -17
  474. package/dist/stex-CZyTRGVB.js +0 -4
  475. package/dist/tooltip-DGHTbHl5.js +0 -404
  476. package/dist/useLifecycle-Dids8BPm.js +0 -173
  477. /package/dist/{dist-KZI_BHqV.js → dist-CxZvoNao.js} +0 -0
  478. /package/dist/{invariant-D4hPsZFI.js → invariant-e8eBgdux.js} +0 -0
  479. /package/dist/{isArrayLikeObject-C-hFPChh.js → isArrayLikeObject-LXbTYiBa.js} +0 -0
  480. /package/dist/{main-CvkAPtaq.js → main-XimWhSi_.js} +0 -0
  481. /package/dist/{purify.es-ukiMXY-F.js → purify.es-hTCfRGdl.js} +0 -0
  482. /package/dist/{react-dom-BKwCWYPW.js → react-dom-BSUuJjCR.js} +0 -0
  483. /package/dist/{stex-Ze8D4R_5.js → stex-D887Ylhf.js} +0 -0
@@ -34,7 +34,9 @@ export const CellSelectionStats = <TData,>({
34
34
  if (dataCellCount < 2) {
35
35
  return (
36
36
  <Tooltip content="Select multiple cells to see stats">
37
- <span className={cn("text-sm text-muted-foreground italic", className)}>
37
+ <span
38
+ className={cn("text-xs text-muted-foreground/80 italic", className)}
39
+ >
38
40
  No selection
39
41
  </span>
40
42
  </Tooltip>
@@ -247,7 +247,7 @@ export const RowViewerPanel: React.FC<RowViewerPanelProps> = ({
247
247
 
248
248
  return (
249
249
  <div
250
- className="flex flex-col gap-3 mt-4 focus:outline-hidden"
250
+ className="flex flex-col gap-3 focus:outline-hidden"
251
251
  ref={panelRef}
252
252
  tabIndex={-1}
253
253
  onKeyDown={handleKeyDown}
@@ -42,7 +42,7 @@ export interface TableExplorerPanelProps {
42
42
  }
43
43
 
44
44
  const tabTriggerClassName =
45
- "text-xs uppercase tracking-wide font-semibold cursor-pointer transition-colors";
45
+ "text-[13px] uppercase tracking-wide font-semibold cursor-pointer transition-colors";
46
46
  const activeClassName = "text-primary";
47
47
  const inactiveClassName = "hover:text-foreground";
48
48
 
@@ -110,7 +110,7 @@ export const TableExplorerPanel: React.FC<TableExplorerPanelProps> = ({
110
110
  <Tabs
111
111
  value={resolvedTab}
112
112
  onValueChange={(value) => onTabChange(value as PanelType)}
113
- className="h-full flex flex-col min-w-[350px]"
113
+ className="flex flex-col min-w-[350px]"
114
114
  >
115
115
  <Fill name={SlotNames.CONTEXT_AWARE_PANEL_HEADER}>
116
116
  <div className="flex items-center gap-1">
@@ -51,7 +51,7 @@ export const DependencyGraphTree: React.FC<PropsWithChildren<Props>> = ({
51
51
  layoutDirection,
52
52
  settings,
53
53
  }) => {
54
- // eslint-disable-next-line react/hook-use-state
54
+ // oxlint-disable-next-line react/hook-use-state
55
55
  const [initial] = useState(() => {
56
56
  let elements = elementsBuilder.createElements(
57
57
  cellIds,
@@ -33,108 +33,107 @@ beforeAll(() => {
33
33
  });
34
34
 
35
35
  describe("Cell data attributes", () => {
36
- it.each([
37
- "edit",
38
- "read",
39
- "present",
40
- ])("should render cell with data-cell-id and data-cell-name in %s mode", (mode) => {
41
- const { store, wrapper } = createTestWrapper();
42
- const cid = cellId("test");
43
- const cellName = "test_cell";
36
+ it.each(["edit", "read", "present"])(
37
+ "should render cell with data-cell-id and data-cell-name in %s mode",
38
+ (mode) => {
39
+ const { store, wrapper } = createTestWrapper();
40
+ const cid = cellId("test");
41
+ const cellName = "test_cell";
44
42
 
45
- const userConfig: UserConfig = {
46
- display: {
47
- cell_output: "below",
48
- code_editor_font_size: 14,
49
- dataframes: "rich",
50
- default_table_page_size: 10,
51
- default_table_max_columns: 10,
52
- default_width: "normal",
53
- theme: "light",
54
- reference_highlighting: false,
55
- },
56
- keymap: { preset: "default" },
57
- completion: {
58
- activate_on_typing: true,
59
- signature_hint_on_typing: false,
60
- copilot: false,
61
- },
62
- formatting: { line_length: 88 },
63
- package_management: { manager: "pip" },
64
- runtime: {
65
- auto_instantiate: false,
66
- default_sql_output: "native",
67
- auto_reload: "off",
68
- on_cell_change: "lazy",
69
- watcher_on_save: "lazy",
70
- reactive_tests: true,
71
- output_max_bytes: 1_000_000,
72
- std_stream_max_bytes: 1_000_000,
73
- pythonpath: [],
74
- dotenv: [".env"],
75
- },
76
- server: {
77
- browser: "default",
78
- follow_symlink: false,
79
- },
80
- save: { autosave: "off", autosave_delay: 1000, format_on_save: false },
81
- ai: {},
82
- } as UserConfig;
43
+ const userConfig: UserConfig = {
44
+ display: {
45
+ cell_output: "below",
46
+ code_editor_font_size: 14,
47
+ dataframes: "rich",
48
+ default_table_page_size: 10,
49
+ default_table_max_columns: 10,
50
+ default_width: "normal",
51
+ theme: "light",
52
+ reference_highlighting: false,
53
+ },
54
+ keymap: { preset: "default" },
55
+ completion: {
56
+ activate_on_typing: true,
57
+ signature_hint_on_typing: false,
58
+ copilot: false,
59
+ },
60
+ formatting: { line_length: 88 },
61
+ package_management: { manager: "pip" },
62
+ runtime: {
63
+ auto_instantiate: false,
64
+ default_sql_output: "native",
65
+ auto_reload: "off",
66
+ on_cell_change: "lazy",
67
+ watcher_on_save: "lazy",
68
+ reactive_tests: true,
69
+ output_max_bytes: 1_000_000,
70
+ std_stream_max_bytes: 1_000_000,
71
+ pythonpath: [],
72
+ dotenv: [".env"],
73
+ },
74
+ server: {
75
+ browser: "default",
76
+ follow_symlink: false,
77
+ },
78
+ save: { autosave: "off", autosave_delay: 1000, format_on_save: false },
79
+ ai: {},
80
+ } as UserConfig;
83
81
 
84
- const notebook = MockNotebook.notebookState({
85
- cellData: {
86
- [cid]: {
87
- code: "",
88
- name: cellName,
89
- edited: false,
90
- serializedEditorState: null,
91
- config: {
92
- disabled: false,
93
- hide_code: false,
94
- column: null,
82
+ const notebook = MockNotebook.notebookState({
83
+ cellData: {
84
+ [cid]: {
85
+ code: "",
86
+ name: cellName,
87
+ edited: false,
88
+ serializedEditorState: null,
89
+ config: {
90
+ disabled: false,
91
+ hide_code: false,
92
+ column: null,
93
+ },
95
94
  },
96
95
  },
97
- },
98
- });
96
+ });
99
97
 
100
- notebook.cellRuntime[cid] = createCellRuntimeState({
101
- status: "idle",
102
- output: null,
103
- consoleOutputs: [],
104
- interrupted: false,
105
- errored: false,
106
- stopped: false,
107
- staleInputs: false,
108
- runStartTimestamp: null,
109
- lastRunStartTimestamp: null,
110
- runElapsedTimeMs: null,
111
- debuggerActive: false,
112
- outline: null,
113
- });
98
+ notebook.cellRuntime[cid] = createCellRuntimeState({
99
+ status: "idle",
100
+ output: null,
101
+ consoleOutputs: [],
102
+ interrupted: false,
103
+ errored: false,
104
+ stopped: false,
105
+ staleInputs: false,
106
+ runStartTimestamp: null,
107
+ lastRunStartTimestamp: null,
108
+ runElapsedTimeMs: null,
109
+ debuggerActive: false,
110
+ outline: null,
111
+ });
114
112
 
115
- store.set(notebookAtom, notebook);
113
+ store.set(notebookAtom, notebook);
116
114
 
117
- const { container } = render(
118
- <TooltipProvider>
119
- <Cell
120
- cellId={cid}
121
- mode={mode as AppMode}
122
- canDelete={true}
123
- userConfig={userConfig}
124
- isCollapsed={false}
125
- collapseCount={0}
126
- canMoveX={false}
127
- theme="light"
128
- showPlaceholder={false}
129
- />
130
- </TooltipProvider>,
131
- { wrapper },
132
- );
115
+ const { container } = render(
116
+ <TooltipProvider>
117
+ <Cell
118
+ cellId={cid}
119
+ mode={mode as AppMode}
120
+ canDelete={true}
121
+ userConfig={userConfig}
122
+ isCollapsed={false}
123
+ collapseCount={0}
124
+ canMoveX={false}
125
+ theme="light"
126
+ showPlaceholder={false}
127
+ />
128
+ </TooltipProvider>,
129
+ { wrapper },
130
+ );
133
131
 
134
- const cellElement = container.querySelector(`[data-cell-id="${cid}"]`);
135
- expect(cellElement).toBeTruthy();
136
- expect(cellElement?.getAttribute("data-cell-name")).toBe(cellName);
137
- });
132
+ const cellElement = container.querySelector(`[data-cell-id="${cid}"]`);
133
+ expect(cellElement).toBeTruthy();
134
+ expect(cellElement?.getAttribute("data-cell-name")).toBe(cellName);
135
+ },
136
+ );
138
137
  });
139
138
 
140
139
  describe("Output data attributes", () => {
@@ -176,7 +176,7 @@ describe("DynamicFavicon", () => {
176
176
  const { rerender } = render(<DynamicFavicon isRunning={true} />);
177
177
  rerender(<DynamicFavicon isRunning={false} />);
178
178
 
179
- // eslint-disable-next-line @typescript-eslint/unbound-method
179
+ // oxlint-disable-next-line typescript/unbound-method
180
180
  expect(Notification.requestPermission).toHaveBeenCalled();
181
181
  });
182
182
  });
@@ -14,8 +14,10 @@ import { useOnMount } from "@/hooks/useLifecycle";
14
14
  import { cn } from "@/utils/cn";
15
15
  import { Events } from "@/utils/events";
16
16
 
17
- interface Props
18
- extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange"> {
17
+ interface Props extends Omit<
18
+ React.InputHTMLAttributes<HTMLInputElement>,
19
+ "onChange"
20
+ > {
19
21
  value: string;
20
22
  onChange: (newName: string) => void;
21
23
  placeholder?: string;
@@ -0,0 +1,142 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { useAtomValue } from "jotai";
4
+ import { CheckIcon, CopyIcon } from "lucide-react";
5
+ import React, { useState } from "react";
6
+ import { Button } from "@/components/ui/button";
7
+ import {
8
+ DialogContent,
9
+ DialogDescription,
10
+ DialogFooter,
11
+ DialogHeader,
12
+ DialogTitle,
13
+ } from "@/components/ui/dialog";
14
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
15
+ import { runtimeConfigAtom } from "@/core/runtime/config";
16
+ import { copyToClipboard } from "@/utils/copy";
17
+ import { Events } from "@/utils/events";
18
+ import { Tooltip } from "@/components/ui/tooltip";
19
+ import type { RuntimeConfig } from "@/core/runtime/types";
20
+
21
+ type AgentTab = "claude" | "codex" | "opencode";
22
+
23
+ function buildRemoteUrl(config: RuntimeConfig) {
24
+ const url = new URL(config.url);
25
+ if (config.authToken) {
26
+ url.searchParams.set("auth", config.authToken);
27
+ }
28
+ return url.toString();
29
+ }
30
+
31
+ function getPromptCommand(agent: AgentTab, remoteUrl: string): string {
32
+ const command = import.meta.env.DEV ? "uv run marimo" : "uvx marimo@latest";
33
+ const base = `${command} pair prompt --url '${remoteUrl}'`;
34
+ switch (agent) {
35
+ case "claude":
36
+ return `claude "$(${base} --claude)"`;
37
+ case "codex":
38
+ return `codex "$(${base} --codex)"`;
39
+ case "opencode":
40
+ return `opencode "$(${base} --opencode)"`;
41
+ }
42
+ }
43
+
44
+ const SKILL_INSTALL = "npx skills add marimo-team/marimo-pair";
45
+
46
+ export const PairWithAgentModal: React.FC<{
47
+ onClose: () => void;
48
+ }> = ({ onClose }) => {
49
+ const [activeTab, setActiveTab] = useState<AgentTab>("claude");
50
+ const runtimeConfig = useAtomValue(runtimeConfigAtom);
51
+ const remoteUrl = buildRemoteUrl(runtimeConfig);
52
+ const promptCommand = getPromptCommand(activeTab, remoteUrl);
53
+
54
+ return (
55
+ <DialogContent className="sm:max-w-lg">
56
+ <DialogHeader>
57
+ <DialogTitle>Pair with an agent</DialogTitle>
58
+ <DialogDescription>
59
+ Use an AI coding agent to pair-program on this notebook.{" "}
60
+ <a
61
+ href="https://links.marimo.app/marimo-pair"
62
+ target="_blank"
63
+ rel="noopener noreferrer"
64
+ className="underline"
65
+ >
66
+ Learn more
67
+ </a>
68
+ .
69
+ </DialogDescription>
70
+ </DialogHeader>
71
+
72
+ <div className="flex flex-col gap-4 py-2">
73
+ <div className="flex flex-col gap-2">
74
+ <span className="text-sm font-medium">1. Install the skill</span>
75
+ <CommandBlock command={SKILL_INSTALL} />
76
+ </div>
77
+
78
+ <div className="flex flex-col gap-2">
79
+ <span className="text-sm font-medium">2. Run in your terminal</span>
80
+ <Tabs
81
+ value={activeTab}
82
+ onValueChange={(v) => setActiveTab(v as AgentTab)}
83
+ >
84
+ <TabsList className="w-full">
85
+ <TabsTrigger value="claude" className="flex-1">
86
+ Claude
87
+ </TabsTrigger>
88
+ <TabsTrigger value="codex" className="flex-1">
89
+ Codex
90
+ </TabsTrigger>
91
+ <TabsTrigger value="opencode" className="flex-1">
92
+ OpenCode
93
+ </TabsTrigger>
94
+ </TabsList>
95
+
96
+ <TabsContent value="claude" className="mt-3">
97
+ <CommandBlock command={promptCommand} />
98
+ </TabsContent>
99
+ <TabsContent value="codex" className="mt-3">
100
+ <CommandBlock command={promptCommand} />
101
+ </TabsContent>
102
+ <TabsContent value="opencode" className="mt-3">
103
+ <CommandBlock command={promptCommand} />
104
+ </TabsContent>
105
+ </Tabs>
106
+ </div>
107
+ </div>
108
+
109
+ <DialogFooter>
110
+ <Button variant="secondary" onClick={onClose}>
111
+ Close
112
+ </Button>
113
+ </DialogFooter>
114
+ </DialogContent>
115
+ );
116
+ };
117
+
118
+ const CommandBlock: React.FC<{ command: string }> = ({ command }) => {
119
+ const [copied, setCopied] = useState(false);
120
+
121
+ const copy = Events.stopPropagation(async (e) => {
122
+ e.preventDefault();
123
+ await copyToClipboard(command);
124
+ setCopied(true);
125
+ setTimeout(() => setCopied(false), 2000);
126
+ });
127
+
128
+ return (
129
+ <div className="flex items-center gap-2 rounded-md bg-muted px-3 py-2 font-mono text-xs">
130
+ <code className="flex-1 select-all break-words">{command}</code>
131
+ <Tooltip content="Copied!" open={copied}>
132
+ <Button onClick={copy} size="xs" variant="ghost">
133
+ {copied ? (
134
+ <CheckIcon size={14} strokeWidth={1.5} />
135
+ ) : (
136
+ <CopyIcon size={14} strokeWidth={1.5} />
137
+ )}
138
+ </Button>
139
+ </Tooltip>
140
+ </div>
141
+ );
142
+ };
@@ -65,8 +65,10 @@ import { useSplitCellCallback } from "../cell/useSplitCell";
65
65
  import { NameCellInput } from "./name-cell-input";
66
66
  import type { ActionButton } from "./types";
67
67
 
68
- export interface CellActionButtonProps
69
- extends Pick<CellData, "name" | "config"> {
68
+ export interface CellActionButtonProps extends Pick<
69
+ CellData,
70
+ "name" | "config"
71
+ > {
70
72
  cellId: CellId;
71
73
  status: RuntimeState;
72
74
  hasOutput: boolean;
@@ -36,6 +36,7 @@ import {
36
36
  PresentationIcon,
37
37
  SettingsIcon,
38
38
  Share2Icon,
39
+ SparklesIcon,
39
40
  Undo2Icon,
40
41
  XCircleIcon,
41
42
  YoutubeIcon,
@@ -45,6 +46,7 @@ import { settingDialogAtom } from "@/components/app-config/state";
45
46
  import { MarkdownIcon } from "@/components/editor/cell/code/icons";
46
47
  import { useImperativeModal } from "@/components/modal/ImperativeModal";
47
48
  import { renderShortcut } from "@/components/shortcuts/renderShortcut";
49
+ import { PairWithAgentModal } from "@/components/editor/actions/pair-with-agent-modal";
48
50
  import { ShareStaticNotebookModal } from "@/components/static-html/share-modal";
49
51
  import { toast } from "@/components/ui/use-toast";
50
52
  import {
@@ -343,6 +345,14 @@ export function useNotebookActions() {
343
345
  ],
344
346
  },
345
347
 
348
+ {
349
+ icon: <SparklesIcon size={14} strokeWidth={1.5} />,
350
+ label: "Pair with an agent",
351
+ handle: async () => {
352
+ openModal(<PairWithAgentModal onClose={closeModal} />);
353
+ },
354
+ },
355
+
346
356
  {
347
357
  icon: <Share2Icon size={14} strokeWidth={1.5} />,
348
358
  label: "Share",
@@ -122,7 +122,7 @@ export const AddCellWithAI: React.FC<{
122
122
  transport: new StreamingChunkTransport(
123
123
  {
124
124
  api: runtimeManager.getAiURL("completion").toString(),
125
- headers: runtimeManager.headers(),
125
+ headers: () => runtimeManager.headers(),
126
126
  prepareSendMessagesRequest: async (options) => {
127
127
  const completionBody = await buildCompletionRequestBody(
128
128
  options.messages,
@@ -136,6 +136,7 @@ export const AddCellWithAI: React.FC<{
136
136
  };
137
137
 
138
138
  return {
139
+ api: runtimeManager.getAiURL("completion").toString(),
139
140
  body: body,
140
141
  };
141
142
  },
@@ -156,7 +156,7 @@ export const AiCompletionEditor: React.FC<Props> = ({
156
156
  // Use complete to pass the prompt directly, else input might be empty
157
157
  complete(initialPrompt);
158
158
  }
159
- // eslint-disable-next-line react-hooks/exhaustive-deps
159
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
160
160
  }, [triggerImmediately]);
161
161
 
162
162
  // Focus the input
@@ -31,7 +31,7 @@ export const AppContainer: React.FC<PropsWithChildren<Props>> = ({
31
31
  <StatusOverlay connection={connection} isRunning={isRunning} />
32
32
  <PyodideLoader>
33
33
  <WrappedWithSidebar>
34
- {/** biome-ignore lint/correctness/useUniqueElementIds: ID is used by other components to grab the DOM element */}
34
+ {/** oxlint-ignore-next-line -- ID is used by other components to grab the DOM element */}
35
35
  <div
36
36
  id="App"
37
37
  data-config-width={width}
@@ -16,11 +16,10 @@ import "./cell-status.css";
16
16
  import { formatDistanceToNow } from "date-fns";
17
17
  import { Time } from "@/utils/time";
18
18
 
19
- export interface CellStatusComponentProps
20
- extends Pick<
21
- CellRuntimeState,
22
- "status" | "runStartTimestamp" | "interrupted" | "lastRunStartTimestamp"
23
- > {
19
+ export interface CellStatusComponentProps extends Pick<
20
+ CellRuntimeState,
21
+ "status" | "runStartTimestamp" | "interrupted" | "lastRunStartTimestamp"
22
+ > {
24
23
  editing: boolean;
25
24
  edited: boolean;
26
25
  disabled: boolean;
@@ -34,8 +34,10 @@ import {
34
34
  useCellActionButtons,
35
35
  } from "../actions/useCellActionButton";
36
36
 
37
- interface Props
38
- extends Pick<CellActionButtonProps, "cellId" | "getEditorView"> {
37
+ interface Props extends Pick<
38
+ CellActionButtonProps,
39
+ "cellId" | "getEditorView"
40
+ > {
39
41
  children: React.ReactNode;
40
42
  }
41
43
 
@@ -47,7 +47,8 @@ import { useSplitCellCallback } from "../useSplitCell";
47
47
  import { LanguageToggles } from "./language-toggle";
48
48
 
49
49
  export interface CellEditorProps
50
- extends Pick<CellRuntimeState, "status">,
50
+ extends
51
+ Pick<CellRuntimeState, "status">,
51
52
  Pick<CellData, "id" | "code" | "serializedEditorState" | "config"> {
52
53
  runCell: () => void;
53
54
  theme: Theme;
@@ -185,7 +186,7 @@ const CellEditorInternal = ({
185
186
  deleteCell: handleDelete,
186
187
  saveNotebook: saveOrNameNotebook,
187
188
  createManyBelow: (cells) => {
188
- for (const code of [...cells].reverse()) {
189
+ for (const code of cells.toReversed()) {
189
190
  cellActions.createNewCell({
190
191
  code,
191
192
  before: false,
@@ -27,7 +27,8 @@ const toolbarItemVariants = cva(
27
27
  );
28
28
 
29
29
  interface ToolbarItemProps
30
- extends VariantProps<typeof toolbarItemVariants>,
30
+ extends
31
+ VariantProps<typeof toolbarItemVariants>,
31
32
  React.HTMLAttributes<HTMLButtonElement> {
32
33
  tooltip: React.ReactNode;
33
34
  disabled?: boolean;
@@ -1,6 +1,9 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { Slot } from "@radix-ui/react-slot";
3
+ import { Slot as SlotPrimitive } from "radix-ui";
4
+
5
+ const Slot = SlotPrimitive.Slot;
6
+
4
7
  import React, { type PropsWithChildren } from "react";
5
8
  import { useImperativeModal } from "@/components/modal/ImperativeModal";
6
9
  import { Button } from "@/components/ui/button";
@@ -1,6 +1,9 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { Slot } from "@radix-ui/react-slot";
3
+ import { Slot as SlotPrimitive } from "radix-ui";
4
+
5
+ const Slot = SlotPrimitive.Slot;
6
+
4
7
  import React, { type PropsWithChildren } from "react";
5
8
  import { useImperativeModal } from "@/components/modal/ImperativeModal";
6
9
  import {
@@ -101,7 +101,7 @@ export const ContextAwarePanel: React.FC = () => {
101
101
  const renderBody = () => {
102
102
  return (
103
103
  <div className="pb-7 mb-4 h-full overflow-auto">
104
- <div className="p-3 border-b flex justify-between items-center">
104
+ <div className="px-3 py-2 border-b flex justify-between items-center">
105
105
  {renderModeToggle()}
106
106
  <Slot name={SlotNames.CONTEXT_AWARE_PANEL_HEADER} />
107
107
  <Button
@@ -18,6 +18,7 @@ export const PanelEmptyState = ({
18
18
  <div className="mx-6 my-6 flex flex-col gap-2">
19
19
  <div className="flex flex-row gap-2 items-center">
20
20
  {icon &&
21
+ // oxlint-disable-next-line react/no-clone-element
21
22
  React.cloneElement(icon, {
22
23
  className: "text-accent-foreground flex-shrink-0",
23
24
  })}
@@ -7,7 +7,6 @@ import React, { useCallback, useMemo } from "react";
7
7
  import useResizeObserver from "use-resize-observer";
8
8
  import { StorageInspector } from "@/components/storage/storage-inspector";
9
9
  import { Accordion } from "@/components/ui/accordion";
10
- import { getFeatureFlag } from "@/core/config/feature-flag";
11
10
  import { storageNamespacesAtom } from "@/core/storage/state";
12
11
  import { cn } from "@/utils/cn";
13
12
  import { jotaiJsonStorage } from "@/utils/storage/jotai";
@@ -103,15 +102,6 @@ const FileExplorerPanel: React.FC = () => {
103
102
  bothOpen ? availableContent - storageMaxHeight : availableContent,
104
103
  );
105
104
 
106
- const storageInspectorEnabled = getFeatureFlag("storage_inspector");
107
- if (!storageInspectorEnabled) {
108
- return (
109
- <div ref={panelRef} className="h-full overflow-auto">
110
- <FileExplorerComponent height={panelHeight} />
111
- </div>
112
- );
113
- }
114
-
115
105
  return (
116
106
  <div ref={panelRef} className="h-full overflow-auto">
117
107
  <Accordion
@@ -125,7 +125,7 @@ const SnippetViewer: React.FC<{ snippet: Snippet; onClose: () => void }> = ({
125
125
 
126
126
  const handleInsertSnippet = () => {
127
127
  // Add below last focused cell in reverse order
128
- for (const section of [...snippet.sections].reverse()) {
128
+ for (const section of snippet.sections.toReversed()) {
129
129
  if (section.code) {
130
130
  createNewCell({
131
131
  code: section.code,
@@ -25,7 +25,7 @@ import type { ListSecretKeysResponse } from "@/core/network/types";
25
25
 
26
26
  // dotenv providers should be at the top
27
27
  export function sortProviders(providers: ListSecretKeysResponse["keys"]) {
28
- return providers.sort((a, b) => {
28
+ return providers.toSorted((a, b) => {
29
29
  if (a.provider === "env") {
30
30
  return 1;
31
31
  }