@marimo-team/frontend 0.23.9-dev9 → 0.23.10-dev0

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 (600) hide show
  1. package/dist/assets/{CellStatus-D_-Xs2i2.js → CellStatus-BLWR83i_.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-CKOLvj_e.js → ConnectedDataExplorerComponent-W0UfNkj7.js} +1 -1
  3. package/dist/assets/JsonOutput-BJaeXQim.js +53 -0
  4. package/dist/assets/LazyAnyLanguageCodeMirror-BEvXb3VX.js +2 -0
  5. package/dist/assets/MarimoErrorOutput-B0h5OVW9.js +7 -0
  6. package/dist/assets/{RenderHTML-IGRZU9wj.js → RenderHTML-ChwPJgPd.js} +1 -1
  7. package/dist/assets/{RunButton-Cf9ByHXe.js → RunButton-NDsrcmxR.js} +1 -1
  8. package/dist/assets/{add-cell-with-ai-9EyttqGQ.js → add-cell-with-ai-FxJitVGs.js} +21 -21
  9. package/dist/assets/{add-connection-dialog-Bqsr9NiO.js → add-connection-dialog-EgkKupsZ.js} +1 -1
  10. package/dist/assets/{agent-panel-CSzzOKD1.js → agent-panel-BSt1fSQZ.js} +6 -6
  11. package/dist/assets/ai-model-dropdown-DxAk02Lc.js +5 -0
  12. package/dist/assets/{any-language-editor-Cs-Qsdlp.js → any-language-editor-CXeLf_N8.js} +1 -1
  13. package/dist/assets/apl-EAxnZS_5.js +1 -0
  14. package/dist/assets/{app-config-button-Cooknt8P.js → app-config-button-BcOcIm9W.js} +1 -1
  15. package/dist/assets/{arc-D0XsJSsf.js → arc-CWuN1tfc.js} +1 -1
  16. package/dist/assets/{architecture-7HQA4BMR-CyeFAHwy.js → architecture-7HQA4BMR-DJtUfdk-.js} +1 -1
  17. package/dist/assets/{architectureDiagram-VXUJARFQ-1WJT-eC3.js → architectureDiagram-VXUJARFQ-Cgi4wo9P.js} +1 -1
  18. package/dist/assets/arrow-right-pRnMoIOW.js +1 -0
  19. package/dist/assets/asciiarmor-zxnaShQE.js +1 -0
  20. package/dist/assets/asn1-7i28Os5R.js +1 -0
  21. package/dist/assets/{blockDiagram-VD42YOAC-JexHZqqE.js → blockDiagram-VD42YOAC-CsHap8-F.js} +1 -1
  22. package/dist/assets/brainfuck-BZegPsXK.js +1 -0
  23. package/dist/assets/{c4Diagram-YG6GDRKO-Bq-DoY7t.js → c4Diagram-YG6GDRKO-CZuArudM.js} +1 -1
  24. package/dist/assets/{cache-panel-CZqzacQu.js → cache-panel-DYiVMv5x.js} +1 -1
  25. package/dist/assets/cell-editor-C5CDtKML.js +20 -0
  26. package/dist/assets/{cell-link-VlbhstGP.js → cell-link-B1pHtGWp.js} +1 -1
  27. package/dist/assets/{cells-WW455pbI.js → cells-BsaJrRWi.js} +60 -62
  28. package/dist/assets/channel-6XBTrC3Q.js +1 -0
  29. package/dist/assets/{chat-display-0SSKyMkt.js → chat-display-ccjE30z9.js} +1 -1
  30. package/dist/assets/chat-panel-CtvtP3kb.js +3 -0
  31. package/dist/assets/chat-ui-DV8CD_s1.js +4 -0
  32. package/dist/assets/{chunk-4BX2VUAB-Dhno12SW.js → chunk-4BX2VUAB-Ca6WzYTr.js} +1 -1
  33. package/dist/assets/chunk-55IACEB6-Cr4aqhf3.js +1 -0
  34. package/dist/assets/{chunk-5FQGJX7Z-BzXnQz5s.js → chunk-5FQGJX7Z-D9iBG0F7.js} +2 -2
  35. package/dist/assets/{chunk-ABZYJK2D-fbQovzbZ.js → chunk-ABZYJK2D-BG7Eb4WW.js} +3 -3
  36. package/dist/assets/{chunk-ATLVNIR6-C71UReOL.js → chunk-ATLVNIR6-CqLn9HI1.js} +1 -1
  37. package/dist/assets/{chunk-B4BG7PRW-ChmO4xUA.js → chunk-B4BG7PRW-D4SyZNjn.js} +1 -1
  38. package/dist/assets/{chunk-CVBHYZKI-B6tT645I.js → chunk-CVBHYZKI-C-NWvPQL.js} +1 -1
  39. package/dist/assets/{chunk-DI55MBZ5-DaLBJUsc.js → chunk-DI55MBZ5-t9uiMPiN.js} +1 -1
  40. package/dist/assets/{chunk-EXTU4WIE-B3Lv3QWb.js → chunk-EXTU4WIE-BmVk7Fyq.js} +1 -1
  41. package/dist/assets/{chunk-FMBD7UC4-CDFiCFLp.js → chunk-FMBD7UC4-DlnzxSkO.js} +1 -1
  42. package/dist/assets/{chunk-HN2XXSSU-xW6J7MXn.js → chunk-HN2XXSSU-Bcaj5fRB.js} +1 -1
  43. package/dist/assets/{chunk-JA3XYJ7Z-jqUKn_dB.js → chunk-JA3XYJ7Z-B5b2QHOb.js} +1 -1
  44. package/dist/assets/{chunk-JZLCHNYA-xGZ72asD.js → chunk-JZLCHNYA-1_sVfAnw.js} +1 -1
  45. package/dist/assets/{chunk-MI3HLSF2-CXMqGP2w.js → chunk-MI3HLSF2-DqzZqBCh.js} +1 -1
  46. package/dist/assets/{chunk-N4CR4FBY-D8iMP1ch.js → chunk-N4CR4FBY-CFJoD-EQ.js} +2 -2
  47. package/dist/assets/{chunk-QN33PNHL-Ddzf5Xc1.js → chunk-QN33PNHL-BBE_bx9E.js} +1 -1
  48. package/dist/assets/{chunk-QXUST7PY-BUBd7EW9.js → chunk-QXUST7PY-Cu1nR-L2.js} +1 -1
  49. package/dist/assets/{chunk-QZHKN3VN-37WEuSLJ.js → chunk-QZHKN3VN-BAnb9AKF.js} +1 -1
  50. package/dist/assets/{chunk-S3R3BYOJ-7UJSqSFb.js → chunk-S3R3BYOJ-Cl0iW04v.js} +1 -1
  51. package/dist/assets/{chunk-TZMSLE5B-B7Xjx897.js → chunk-TZMSLE5B-f5ix6iSd.js} +1 -1
  52. package/dist/assets/classDiagram-2ON5EDUG-DlIMDu6i.js +1 -0
  53. package/dist/assets/classDiagram-v2-WZHVMYZB-CcIhhkQu.js +1 -0
  54. package/dist/assets/{clike-npv7NBwP.js → clike-bdcjLdZ4.js} +1 -1
  55. package/dist/assets/clojure-VUVi7fTV.js +1 -0
  56. package/dist/assets/cmake-DZJIDbjY.js +1 -0
  57. package/dist/assets/cobol-klCRwlLm.js +1 -0
  58. package/dist/assets/{code-block-37QAKDTI-BZVOQdyl.js → code-block-37QAKDTI-B19XL3UR.js} +1 -1
  59. package/dist/assets/coffeescript-C9foD9ub.js +1 -0
  60. package/dist/assets/{column-preview-CyyMserX.js → column-preview-BPismotx.js} +1 -1
  61. package/dist/assets/{command-palette-C0SuD26e.js → command-palette-Cdy8eCpi.js} +1 -1
  62. package/dist/assets/{common-Bei_EA1L.js → common-6n8M1qiK.js} +1 -1
  63. package/dist/assets/commonlisp-tHxoA35J.js +1 -0
  64. package/dist/assets/{components-B-vsJpY6.js → components-BzBUxUz0.js} +1 -1
  65. package/dist/assets/{components-cjKlTr3f.js → components-CK-WtvAJ.js} +1 -1
  66. package/dist/assets/config-ClMcu_sV.js +1 -0
  67. package/dist/assets/{cose-bilkent-S5V4N54A-CgMkzBzk.js → cose-bilkent-S5V4N54A-CQqSLzd1.js} +1 -1
  68. package/dist/assets/crystal-CQ11GdrX.js +1 -0
  69. package/dist/assets/{css-OVjTGRm9.js → css-ACAb8MRM.js} +1 -1
  70. package/dist/assets/cypher-CJ0Uzw29.js +1 -0
  71. package/dist/assets/d-DP0SUIt1.js +1 -0
  72. package/dist/assets/{dagre-6UL2VRFP-rclmYCNC.js → dagre-6UL2VRFP-CVKXpDlr.js} +1 -1
  73. package/dist/assets/{data-grid-overlay-editor-CO7vLLX5.js → data-grid-overlay-editor-BdDYn72O.js} +1 -1
  74. package/dist/assets/{datasource-CrDfHWto.js → datasource-DjDpJnbt.js} +2 -2
  75. package/dist/assets/dependency-graph-panel-BNaXAcZr.js +5 -0
  76. package/dist/assets/{diagram-PSM6KHXK-Dr5x-oaJ.js → diagram-PSM6KHXK-BfzLNKp-.js} +1 -1
  77. package/dist/assets/{diagram-QEK2KX5R-Cyino8Ci.js → diagram-QEK2KX5R-D_H77Ni5.js} +1 -1
  78. package/dist/assets/{diagram-S2PKOQOG-DYLuU52t.js → diagram-S2PKOQOG-DJmVBeMk.js} +1 -1
  79. package/dist/assets/diff-CNs8MB38.js +1 -0
  80. package/dist/assets/{dist-K7UrYXpJ.js → dist-BtL81uwZ.js} +1 -1
  81. package/dist/assets/{dist-BYYXrYaA.js → dist-Bww7hlVc.js} +1 -1
  82. package/dist/assets/{dist-BTDGJ6yw.js → dist-CJIOLS6O.js} +1 -1
  83. package/dist/assets/dist-CPF3W2Y-.js +1 -0
  84. package/dist/assets/{dist-D6HkmGB2.js → dist-CUapWJe4.js} +1 -1
  85. package/dist/assets/{dist-DYXeLJlk.js → dist-CWeWT34c.js} +1 -1
  86. package/dist/assets/{dist-CSowihAs.js → dist-CuCuJBdf.js} +1 -1
  87. package/dist/assets/{dist-fQYV9WTb.js → dist-DH60fwgs.js} +1 -1
  88. package/dist/assets/dist-DZPpMvcR.js +1 -0
  89. package/dist/assets/dist-DkcQg5xD.js +1 -0
  90. package/dist/assets/dist-DkzFxGAX.js +1 -0
  91. package/dist/assets/{dist-CtCHoDJA.js → dist-DmBXXm0k.js} +1 -1
  92. package/dist/assets/{dist-DB3ebLb3.js → dist-W1iHBJeE.js} +1 -1
  93. package/dist/assets/{dist-CO_N76Iz.js → dist-cgiAP5sW.js} +1 -1
  94. package/dist/assets/{dist-CGC-UAcL.js → dist-vkd1160q.js} +1 -1
  95. package/dist/assets/{dockerfile-CrSl2ewL.js → dockerfile-BSMbgQQl.js} +1 -1
  96. package/dist/assets/{documentation-panel-BWa3CXAu.js → documentation-panel-5jUKZR-l.js} +1 -1
  97. package/dist/assets/{download-CKGdZtPf.js → download-DT8gf0PL.js} +1 -1
  98. package/dist/assets/dtd-BsD0uJw0.js +1 -0
  99. package/dist/assets/dylan-DbrGP1IP.js +1 -0
  100. package/dist/assets/ecl-C0rZlhHw.js +1 -0
  101. package/dist/assets/edit-page-B7KTvcRN.js +9 -0
  102. package/dist/assets/eiffel-2ZX-OpSJ.js +1 -0
  103. package/dist/assets/elm-CbOSKldD.js +1 -0
  104. package/dist/assets/{erDiagram-Q2GNP2WA-FdS4NKUh.js → erDiagram-Q2GNP2WA-ROTNwSJz.js} +1 -1
  105. package/dist/assets/erlang-BWiOgHIX.js +1 -0
  106. package/dist/assets/{error-panel-BW7R1Ohr.js → error-panel-DHcg_ER5.js} +1 -1
  107. package/dist/assets/{esm-CwPtnMeh.js → esm-DeiyaVAJ.js} +1 -1
  108. package/dist/assets/{factor-MWFhpc0o.js → factor-C-_cRSDM.js} +1 -1
  109. package/dist/assets/factor-CUwFIMOP.js +1 -0
  110. package/dist/assets/{file-explorer-panel-C5v0FnJv.js → file-explorer-panel-CbOdvGyZ.js} +3 -3
  111. package/dist/assets/{file-icons-B1JtCN2e.js → file-icons-BiMOJy0r.js} +1 -1
  112. package/dist/assets/{floating-outline-wGcVRNZu.js → floating-outline-BN9sAcQ0.js} +1 -1
  113. package/dist/assets/{flowDiagram-NV44I4VS-DO4w8anv.js → flowDiagram-NV44I4VS--ee3IIVF.js} +1 -1
  114. package/dist/assets/{focus-COroLbWe.js → focus-q38vUCl-.js} +1 -1
  115. package/dist/assets/{form-Bstooyv1.js → form-BtBTvVVd.js} +2 -2
  116. package/dist/assets/forth-BEQA4QQL.js +1 -0
  117. package/dist/assets/fortran-DoPpOZgG.js +1 -0
  118. package/dist/assets/{ganttDiagram-JELNMOA3-Df-MBIrj.js → ganttDiagram-JELNMOA3-BGhmW2aP.js} +1 -1
  119. package/dist/assets/gas-BYovsvOE.js +1 -0
  120. package/dist/assets/gherkin-CFiRc1Pf.js +1 -0
  121. package/dist/assets/{gitGraph-G5XIXVHT-BAQx1hNd.js → gitGraph-G5XIXVHT-DuJ_0c_E.js} +1 -1
  122. package/dist/assets/{gitGraphDiagram-V2S2FVAM-fv2cmbLH.js → gitGraphDiagram-V2S2FVAM-DXFCZcxr.js} +1 -1
  123. package/dist/assets/{glide-data-editor-BAApVyo5.js → glide-data-editor-DqKNgyfg.js} +4 -4
  124. package/dist/assets/{globals-DggqXXLE.js → globals-7JnRMGd4.js} +1 -1
  125. package/dist/assets/groovy-DJNH7evt.js +1 -0
  126. package/dist/assets/haskell-duZvcePm.js +1 -0
  127. package/dist/assets/haxe-B2l95qvB.js +1 -0
  128. package/dist/assets/{home-page-B8SPyTFn.js → home-page-lXjPDNM0.js} +2 -2
  129. package/dist/assets/{hooks-CktFWxvJ.js → hooks-DP41kAWj.js} +1 -1
  130. package/dist/assets/{html-to-image-DB5sfuws.js → html-to-image-BWL3Ct4n.js} +1 -1
  131. package/dist/assets/idl-CZ_xwU8I.js +1 -0
  132. package/dist/assets/index-BIw7BKLH.css +2 -0
  133. package/dist/assets/index-awsLWRjZ.js +38 -0
  134. package/dist/assets/{info-VBDWY6EO-Cw9vVNQD.js → info-VBDWY6EO-DPQEAe2T.js} +1 -1
  135. package/dist/assets/infoDiagram-HS3SLOUP-CaaUieFa.js +2 -0
  136. package/dist/assets/javascript-CF5KGSAj.js +1 -0
  137. package/dist/assets/{journeyDiagram-XKPGCS4Q-C_cdVaga.js → journeyDiagram-XKPGCS4Q-9D2JCyrN.js} +1 -1
  138. package/dist/assets/julia-BQlq5iZn.js +1 -0
  139. package/dist/assets/{kanban-definition-3W4ZIXB7-CLpEm5s3.js → kanban-definition-3W4ZIXB7-DxV26rf-.js} +1 -1
  140. package/dist/assets/katex-CzQ1KdW3.js +1 -0
  141. package/dist/assets/{kiosk-mode-tHwBN3rS.js → kiosk-mode-BqvqWsFx.js} +1 -1
  142. package/dist/assets/layout-DXDnDtNw.js +9 -0
  143. package/dist/assets/{line-ortW3H6T.js → line-x4bpd_8D.js} +1 -1
  144. package/dist/assets/{linear-CIVE7jyt.js → linear-CW_ww8od.js} +1 -1
  145. package/dist/assets/livescript-sRMenfqS.js +1 -0
  146. package/dist/assets/{logs-panel-DZSPhsIs.js → logs-panel-BNoBKY1q.js} +1 -1
  147. package/dist/assets/{loro_wasm_bg-Ci19hd4D.js → loro_wasm_bg-CtNTubKN.js} +1 -1
  148. package/dist/assets/lua-a56ITumN.js +1 -0
  149. package/dist/assets/{markdown-renderer-BnUV17Tg.js → markdown-renderer-CU5Lbyax.js} +3 -3
  150. package/dist/assets/mathematica-B3m4jXeH.js +1 -0
  151. package/dist/assets/mbox-BtL7aO2I.js +1 -0
  152. package/dist/assets/mermaid-4DMBBIKO-CekzuCTz.js +1 -0
  153. package/dist/assets/{mermaid-D619LWHW.js → mermaid-Bes0ynI8.js} +3 -3
  154. package/dist/assets/{mermaid-parser.core-CMygPhv_.js → mermaid-parser.core-aYU6qXxk.js} +2 -2
  155. package/dist/assets/{mhchem-DSE1tfes.js → mhchem-8N2oE3tb.js} +1 -1
  156. package/dist/assets/{mindmap-definition-VGOIOE7T-mbWtJhR6.js → mindmap-definition-VGOIOE7T-DTJAbAQ8.js} +1 -1
  157. package/dist/assets/mirc-S27kuZ31.js +1 -0
  158. package/dist/assets/mllike-B3kx3KeF.js +1 -0
  159. package/dist/assets/modelica-DgbW4dSi.js +1 -0
  160. package/dist/assets/mscgen-BIa_4d-0.js +1 -0
  161. package/dist/assets/mumps-4fnELyHs.js +1 -0
  162. package/dist/assets/{name-cell-input-BZQLfDw0.js → name-cell-input-BNc3X9qF.js} +1 -1
  163. package/dist/assets/{nsis-CDylpiaC.js → nsis-BGZ5EB-j.js} +1 -1
  164. package/dist/assets/nsis-BfGyMssE.js +1 -0
  165. package/dist/assets/ntriples-DeY1n_tC.js +1 -0
  166. package/dist/assets/{number-overlay-editor-CHaQ6o4_.js → number-overlay-editor-DL4IwqDH.js} +1 -1
  167. package/dist/assets/octave-7Qn21jzx.js +1 -0
  168. package/dist/assets/{ordinal-RiUP-mHf.js → ordinal-_nQ2r1qQ.js} +1 -1
  169. package/dist/assets/{outline-panel-C4q1Ql1i.js → outline-panel-De2gw3Ro.js} +1 -1
  170. package/dist/assets/oz-CiPFl3Ni.js +1 -0
  171. package/dist/assets/{packages-panel-D9p8Tiee.js → packages-panel-C8maQt0Q.js} +1 -1
  172. package/dist/assets/{packet-DYOGHKS2-BXa5LrXK.js → packet-DYOGHKS2-CxgeJpvT.js} +1 -1
  173. package/dist/assets/pair-with-agent-modal-1tufe5MP.js +4 -0
  174. package/dist/assets/panels-BKv_j2lC.js +1 -0
  175. package/dist/assets/pascal-BH9yQLzw.js +1 -0
  176. package/dist/assets/perl-DfMCx2i2.js +1 -0
  177. package/dist/assets/{pie-VRWISCQL-BpZiOBLl.js → pie-VRWISCQL-GZ13ReaG.js} +1 -1
  178. package/dist/assets/{pieDiagram-ADFJNKIX-ouQhtndl.js → pieDiagram-ADFJNKIX-_3l2XiEo.js} +1 -1
  179. package/dist/assets/pig-D9CNebQN.js +1 -0
  180. package/dist/assets/powershell-Dss0bU9F.js +1 -0
  181. package/dist/assets/{process-output-czqgvDia.js → process-output-B2oklQi4.js} +1 -1
  182. package/dist/assets/properties-CHADYQUL.js +1 -0
  183. package/dist/assets/protobuf-DFN-V4SD.js +1 -0
  184. package/dist/assets/{pug-BXVTM5jr.js → pug-CYW0agOo.js} +1 -1
  185. package/dist/assets/pug-DOI9FnEk.js +1 -0
  186. package/dist/assets/puppet-BV0HAkDS.js +1 -0
  187. package/dist/assets/python-C83Db0-4.js +1 -0
  188. package/dist/assets/q-D84S4YaJ.js +1 -0
  189. package/dist/assets/{quadrantDiagram-AYHSOK5B-NRkmQ1sP.js → quadrantDiagram-AYHSOK5B-CX3AMAvR.js} +1 -1
  190. package/dist/assets/r-jmqrRzXv.js +1 -0
  191. package/dist/assets/{radar-ZZBFDIW7-CB-lQl_C.js → radar-ZZBFDIW7-CbAjwmA0.js} +1 -1
  192. package/dist/assets/{radio-group-BHzskOrm.js → radio-group-DlVSuZ_1.js} +1 -1
  193. package/dist/assets/{react-vega-CFabbyYN.js → react-vega-COx3Ibyn.js} +1 -1
  194. package/dist/assets/{react-vega-Bzl9LfSR.js → react-vega-CXIQBUis.js} +1 -1
  195. package/dist/assets/{readonly-python-code-u31O1EoO.js → readonly-python-code-D3_kHsDx.js} +1 -1
  196. package/dist/assets/renderShortcut-CcFk3m01.js +1 -0
  197. package/dist/assets/{requirementDiagram-UZGBJVZJ-C0LTiV9S.js → requirementDiagram-UZGBJVZJ-ORHKBnkg.js} +1 -1
  198. package/dist/assets/reveal-component-C50CTy8h.js +1069 -0
  199. package/dist/assets/rpm-DUjG0xRk.js +1 -0
  200. package/dist/assets/ruby-SP4FIzir.js +1 -0
  201. package/dist/assets/run-page-DeOIw0On.js +1 -0
  202. package/dist/assets/{sankeyDiagram-TZEHDZUN-CR2AycvD.js → sankeyDiagram-TZEHDZUN-Dvb8kmWa.js} +1 -1
  203. package/dist/assets/sas-BxaPz2EX.js +1 -0
  204. package/dist/assets/scheme-HBseLApj.js +1 -0
  205. package/dist/assets/{scratchpad-panel-B8GVlZFc.js → scratchpad-panel-DWbD_QB3.js} +1 -1
  206. package/dist/assets/{secrets-panel-B3E_Dkep.js → secrets-panel-BBvdIhtU.js} +1 -1
  207. package/dist/assets/{sequenceDiagram-WL72ISMW-CtF8-7iq.js → sequenceDiagram-WL72ISMW-DQycpQtE.js} +1 -1
  208. package/dist/assets/{session-panel-CeJHBx2m.js → session-panel-BHgL-7KC.js} +1 -1
  209. package/dist/assets/shell-w8ATY_lQ.js +1 -0
  210. package/dist/assets/sieve-Dyq0LGDO.js +1 -0
  211. package/dist/assets/smalltalk-D7mAtumc.js +1 -0
  212. package/dist/assets/{snippets-panel-BxEqEAeR.js → snippets-panel-FY_Ezibl.js} +1 -1
  213. package/dist/assets/sparql-DAeEYE_u.js +1 -0
  214. package/dist/assets/{src-CyeQdfB6.js → src-CvyFXpBy.js} +1 -1
  215. package/dist/assets/{state-D9_BpRuU.js → state-BTTshiKq.js} +3 -3
  216. package/dist/assets/{state-NqzCpbZn.js → state-D-2KaAHK.js} +1 -1
  217. package/dist/assets/{stateDiagram-FKZM4ZOC-R47bQmIs.js → stateDiagram-FKZM4ZOC-D78DIR_F.js} +1 -1
  218. package/dist/assets/stateDiagram-v2-4FDKWEC3-DX9rpmwh.js +1 -0
  219. package/dist/assets/{step-Ca7ZnceH.js → step-D7xg1Moj.js} +1 -1
  220. package/dist/assets/stylus-Cw3Ugan7.js +1 -0
  221. package/dist/assets/swift-CPsNOBsX.js +1 -0
  222. package/dist/assets/{switch-C8Pev-_F.js → switch-BiU_sAcn.js} +1 -1
  223. package/dist/assets/tcl-BfWyQdZa.js +1 -0
  224. package/dist/assets/{terminal-HJ3qH9Tb.js → terminal-BYGihNNp.js} +1 -1
  225. package/dist/assets/{textarea-By_oENlk.js → textarea-DwltG8V6.js} +1 -1
  226. package/dist/assets/textile-BKgaSzSN.js +1 -0
  227. package/dist/assets/{time-Dfh8bLaf.js → time-DLdI7jB3.js} +1 -1
  228. package/dist/assets/{timeline-definition-IT6M3QCI-qZnC-_po.js → timeline-definition-IT6M3QCI-DIywx3xf.js} +1 -1
  229. package/dist/assets/toml-BSOdv04W.js +1 -0
  230. package/dist/assets/{tracing-panel-DHbxfRgn.js → tracing-panel-bN0O3PuU.js} +2 -2
  231. package/dist/assets/{tracing-D3RHMNJS.js → tracing-zLH-qWb2.js} +1 -1
  232. package/dist/assets/{treemap-GDKQZRPO-C2f4_yBW.js → treemap-GDKQZRPO-Dz_qZhuG.js} +1 -1
  233. package/dist/assets/troff-C0hD9kig.js +1 -0
  234. package/dist/assets/ttcn-DEqPxhoh.js +1 -0
  235. package/dist/assets/ttcn-cfg-B-7jSlUe.js +1 -0
  236. package/dist/assets/turtle-BTtgFsu8.js +1 -0
  237. package/dist/assets/{useBoolean-DRITaoFR.js → useBoolean-Bp18o6XG.js} +1 -1
  238. package/dist/assets/{useCellActionButton-JqNWxCAc.js → useCellActionButton-h5LjhtEx.js} +1 -1
  239. package/dist/assets/{useDeleteCell-DhTEQpE6.js → useDeleteCell-BBPIhnQj.js} +1 -1
  240. package/dist/assets/useDependencyPanelTab-BSkmlMqr.js +1 -0
  241. package/dist/assets/{useHotkey-CKk0vHze.js → useHotkey-TKvjHf1m.js} +1 -1
  242. package/dist/assets/useNotebookActions-B32eCmtG.js +1 -0
  243. package/dist/assets/{useRunCells-DeA7yeHJ.js → useRunCells-BiCBGyeW.js} +1 -1
  244. package/dist/assets/{useSplitCell-DWx-q9BJ.js → useSplitCell-uogO-7ac.js} +1 -1
  245. package/dist/assets/useTheme-CI2eq4XN.js +1 -0
  246. package/dist/assets/utils-CvI-39U6.js +1 -0
  247. package/dist/assets/vb-DfRPk_ji.js +1 -0
  248. package/dist/assets/vbscript-C8D4uv5N.js +1 -0
  249. package/dist/assets/{vega-component-CBW7fUCI.js → vega-component-COOhhZ3h.js} +1 -1
  250. package/dist/assets/velocity-DxKr2FFC.js +1 -0
  251. package/dist/assets/verilog-CxVhamiH.js +1 -0
  252. package/dist/assets/vhdl-B-IpBNOA.js +1 -0
  253. package/dist/assets/webidl-CBjKmBwO.js +1 -0
  254. package/dist/assets/xquery-ABGCbLv0.js +1 -0
  255. package/dist/assets/{xychartDiagram-PRI3JC2R-Ul_9KMcM.js → xychartDiagram-PRI3JC2R-CjS1dL8k.js} +1 -1
  256. package/dist/assets/yacas-Ckyxh7oh.js +1 -0
  257. package/dist/assets/z80-Dr5sQweg.js +1 -0
  258. package/dist/index.html +32 -32
  259. package/package.json +1 -1
  260. package/src/components/ai/__tests__/ai-utils.test.ts +43 -38
  261. package/src/components/ai/ai-model-dropdown.tsx +2 -2
  262. package/src/components/app-config/ai-config.tsx +147 -16
  263. package/src/components/app-config/user-config-form.tsx +37 -1
  264. package/src/components/chat/__tests__/chat-utils.test.ts +269 -0
  265. package/src/components/chat/chat-panel.tsx +38 -5
  266. package/src/components/chat/chat-utils.ts +14 -58
  267. package/src/components/data-table/TableBottomBar.tsx +5 -8
  268. package/src/components/data-table/__tests__/column-explorer.test.tsx +128 -0
  269. package/src/components/data-table/__tests__/header-items.test.tsx +220 -10
  270. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +95 -29
  271. package/src/components/data-table/column-header.tsx +17 -12
  272. package/src/components/data-table/data-table.tsx +4 -0
  273. package/src/components/data-table/export-actions.tsx +19 -12
  274. package/src/components/data-table/header-items.tsx +40 -16
  275. package/src/components/data-table/hooks/use-column-visibility.ts +14 -0
  276. package/src/components/data-table/schemas.ts +2 -2
  277. package/src/components/data-table/table-explorer-panel/table-explorer-panel.tsx +16 -6
  278. package/src/components/databases/display.tsx +2 -0
  279. package/src/components/datasources/__tests__/utils.test.ts +82 -0
  280. package/src/components/datasources/utils.ts +16 -15
  281. package/src/components/editor/Disconnected.tsx +1 -60
  282. package/src/components/editor/__tests__/viewer-banner.test.tsx +89 -0
  283. package/src/components/editor/actions/pair-with-agent-modal.tsx +1 -0
  284. package/src/components/editor/actions/useCellActionButton.tsx +3 -3
  285. package/src/components/editor/actions/useNotebookActions.tsx +5 -2
  286. package/src/components/editor/cell/code/cell-editor.tsx +25 -5
  287. package/src/components/editor/chrome/types.ts +13 -6
  288. package/src/components/editor/chrome/wrapper/app-chrome.tsx +6 -4
  289. package/src/components/editor/chrome/wrapper/footer-items/ai-status.tsx +10 -1
  290. package/src/components/editor/chrome/wrapper/sidebar.tsx +7 -5
  291. package/src/components/editor/errors/auto-fix.tsx +3 -3
  292. package/src/components/editor/header/__tests__/status.test.tsx +0 -15
  293. package/src/components/editor/header/app-header.tsx +1 -4
  294. package/src/components/editor/header/status.tsx +4 -13
  295. package/src/components/editor/navigation/__tests__/navigation.test.ts +15 -0
  296. package/src/components/editor/navigation/navigation.ts +5 -0
  297. package/src/components/editor/output/MarimoErrorOutput.tsx +103 -25
  298. package/src/components/editor/output/MarimoTracebackOutput.tsx +28 -39
  299. package/src/components/editor/renderers/cell-array.tsx +27 -24
  300. package/src/components/editor/renderers/slides-layout/__tests__/compute-slide-cells.test.ts +30 -17
  301. package/src/components/editor/renderers/slides-layout/compute-slide-cells.ts +17 -8
  302. package/src/components/editor/renderers/slides-layout/slides-layout.tsx +10 -12
  303. package/src/components/editor/viewer-banner.tsx +82 -0
  304. package/src/components/slides/minimap.tsx +45 -9
  305. package/src/components/slides/reveal-component.tsx +82 -37
  306. package/src/components/slides/slide-cell-view.tsx +12 -1
  307. package/src/components/slides/slide-form.tsx +11 -3
  308. package/src/components/static-html/static-banner.tsx +28 -22
  309. package/src/core/ai/__tests__/model-registry.test.ts +72 -60
  310. package/src/core/ai/model-registry.ts +33 -28
  311. package/src/core/cells/__tests__/actions.test.ts +48 -0
  312. package/src/core/cells/actions.ts +5 -6
  313. package/src/core/codemirror/__tests__/setup.test.ts +29 -0
  314. package/src/core/codemirror/cells/traceback-decorations.ts +1 -1
  315. package/src/core/codemirror/cm.ts +50 -3
  316. package/src/core/codemirror/completion/hints.ts +4 -1
  317. package/src/core/codemirror/format.ts +1 -0
  318. package/src/core/codemirror/keymaps/vim.ts +63 -0
  319. package/src/core/codemirror/language/languages/sql/sql.ts +1 -0
  320. package/src/core/codemirror/language/languages/sql/utils.ts +2 -0
  321. package/src/core/config/__tests__/config-schema.test.ts +4 -0
  322. package/src/core/config/config-schema.ts +4 -0
  323. package/src/core/config/config.ts +16 -0
  324. package/src/core/edit-app.tsx +3 -0
  325. package/src/core/islands/bootstrap.ts +2 -0
  326. package/src/core/kernel/__tests__/handlers.test.ts +5 -0
  327. package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +0 -13
  328. package/src/core/websocket/types.ts +0 -6
  329. package/src/core/websocket/useMarimoKernelConnection.tsx +3 -12
  330. package/src/css/app/Cell.css +0 -1
  331. package/src/plugins/impl/DataTablePlugin.tsx +48 -22
  332. package/src/plugins/impl/chat/ChatPlugin.tsx +7 -1
  333. package/src/plugins/impl/chat/__tests__/chat-ui.test.ts +278 -0
  334. package/src/plugins/impl/chat/chat-ui.tsx +106 -59
  335. package/src/plugins/impl/chat/types.ts +5 -0
  336. package/src/utils/__tests__/json-parser.test.ts +1 -69
  337. package/src/utils/json/json-parser.ts +0 -30
  338. package/dist/assets/JsonOutput-DfDkDg0V.js +0 -53
  339. package/dist/assets/LazyAnyLanguageCodeMirror-DFv3yT20.js +0 -2
  340. package/dist/assets/MarimoErrorOutput-BXSRPZqF.js +0 -7
  341. package/dist/assets/ai-model-dropdown-D0tfwqft.js +0 -5
  342. package/dist/assets/apl-CZC-w0DM.js +0 -1
  343. package/dist/assets/asciiarmor-Dxkbb4uS.js +0 -1
  344. package/dist/assets/asn1-CrA2MPaL.js +0 -1
  345. package/dist/assets/brainfuck-B5oLVauS.js +0 -1
  346. package/dist/assets/cell-editor-hBNMClE6.js +0 -20
  347. package/dist/assets/channel-V1GV6hO1.js +0 -1
  348. package/dist/assets/chat-panel-BC-bG7Ms.js +0 -3
  349. package/dist/assets/chat-ui-B0pCMupQ.js +0 -4
  350. package/dist/assets/chunk-55IACEB6-BRJvcREw.js +0 -1
  351. package/dist/assets/classDiagram-2ON5EDUG-C8jlAFC-.js +0 -1
  352. package/dist/assets/classDiagram-v2-WZHVMYZB-DYST6eBL.js +0 -1
  353. package/dist/assets/clojure-D60XavrX.js +0 -1
  354. package/dist/assets/cmake-CrWsGXcU.js +0 -1
  355. package/dist/assets/cobol-CZosvDFE.js +0 -1
  356. package/dist/assets/coffeescript-DQGIz3iX.js +0 -1
  357. package/dist/assets/commonlisp-DrWSVXOx.js +0 -1
  358. package/dist/assets/config-C1gn3-tv.js +0 -1
  359. package/dist/assets/crystal-CMu2RgP7.js +0 -1
  360. package/dist/assets/cypher-C4I5nX3I.js +0 -1
  361. package/dist/assets/d-B_OAkSA3.js +0 -1
  362. package/dist/assets/dependency-graph-panel-skSyvOmU.js +0 -5
  363. package/dist/assets/diff-f-qA4U7T.js +0 -1
  364. package/dist/assets/dist-B2-3vH3I.js +0 -1
  365. package/dist/assets/dist-B3r3gs4u.js +0 -1
  366. package/dist/assets/dist-Dx65VI0Y.js +0 -1
  367. package/dist/assets/dist-FSgOAwAH.js +0 -1
  368. package/dist/assets/dtd-DWRTME-w.js +0 -1
  369. package/dist/assets/dylan-DnEm_ULG.js +0 -1
  370. package/dist/assets/ecl-Dbf1A5nG.js +0 -1
  371. package/dist/assets/edit-page-cW6c6KHJ.js +0 -9
  372. package/dist/assets/eiffel-Xj76_r0X.js +0 -1
  373. package/dist/assets/elm-nUwO24NA.js +0 -1
  374. package/dist/assets/erlang-CFVqMiR0.js +0 -1
  375. package/dist/assets/factor-mJPTAioV.js +0 -1
  376. package/dist/assets/forth-DBQr6L61.js +0 -1
  377. package/dist/assets/fortran-BkjqlXUL.js +0 -1
  378. package/dist/assets/gas-BNFtcdO9.js +0 -1
  379. package/dist/assets/gherkin-BrOMWqkN.js +0 -1
  380. package/dist/assets/groovy-DuCnwFRS.js +0 -1
  381. package/dist/assets/haskell-BD39942g.js +0 -1
  382. package/dist/assets/haxe-CXsKoap0.js +0 -1
  383. package/dist/assets/idl-D7hb6rI1.js +0 -1
  384. package/dist/assets/index-Cn0RBoFD.css +0 -2
  385. package/dist/assets/index-Df-5tfH1.js +0 -38
  386. package/dist/assets/infoDiagram-HS3SLOUP-CpBkxLyN.js +0 -2
  387. package/dist/assets/javascript-1S1_-Xac.js +0 -1
  388. package/dist/assets/julia-CbOUdU45.js +0 -1
  389. package/dist/assets/katex-BuYoGw8D.js +0 -1
  390. package/dist/assets/layout-CCKaB1K9.js +0 -9
  391. package/dist/assets/livescript-4YbxVKEy.js +0 -1
  392. package/dist/assets/lua-Dp2B-Joo.js +0 -1
  393. package/dist/assets/mathematica-BaSnKpgq.js +0 -1
  394. package/dist/assets/mbox-JZJfXD_G.js +0 -1
  395. package/dist/assets/mermaid-4DMBBIKO-BV51xhvi.js +0 -1
  396. package/dist/assets/mirc-BZe50pjl.js +0 -1
  397. package/dist/assets/mllike-Bgkhf51-.js +0 -1
  398. package/dist/assets/modelica-BzrnHsaM.js +0 -1
  399. package/dist/assets/mscgen-C7fmiScS.js +0 -1
  400. package/dist/assets/mumps-DYao3Wbn.js +0 -1
  401. package/dist/assets/nsis-BV9URIq2.js +0 -1
  402. package/dist/assets/ntriples-CCTjcLNo.js +0 -1
  403. package/dist/assets/octave-CalSSDIP.js +0 -1
  404. package/dist/assets/oz-BwBvNNj4.js +0 -1
  405. package/dist/assets/panels-CFhryJbE.js +0 -1
  406. package/dist/assets/pascal-VtYjd8tX.js +0 -1
  407. package/dist/assets/perl-CuiQHSod.js +0 -1
  408. package/dist/assets/pig-CIHZG4Z9.js +0 -1
  409. package/dist/assets/powershell-CI2Wos2z.js +0 -1
  410. package/dist/assets/properties-CBOFbPgT.js +0 -1
  411. package/dist/assets/protobuf-CdcXLd43.js +0 -1
  412. package/dist/assets/pug-DJHP9Svh.js +0 -1
  413. package/dist/assets/puppet-B2nxuZc5.js +0 -1
  414. package/dist/assets/python-VpIaVd-6.js +0 -1
  415. package/dist/assets/q-CamvlcK6.js +0 -1
  416. package/dist/assets/r-CgsrYWFj.js +0 -1
  417. package/dist/assets/renderShortcut-U2SzoZCS.js +0 -1
  418. package/dist/assets/reveal-component-Ds9C9Z1D.js +0 -1069
  419. package/dist/assets/rpm-DBux1aMG.js +0 -1
  420. package/dist/assets/ruby-BWHIAyVi.js +0 -1
  421. package/dist/assets/run-page-BC3D2rvr.js +0 -1
  422. package/dist/assets/sas-DJpj3tMb.js +0 -1
  423. package/dist/assets/scheme-DF-J69qP.js +0 -1
  424. package/dist/assets/shell-m-RSMeeH.js +0 -1
  425. package/dist/assets/sieve-CtzQvaig.js +0 -1
  426. package/dist/assets/smalltalk-ClFvBgAI.js +0 -1
  427. package/dist/assets/sparql-icVR0QFW.js +0 -1
  428. package/dist/assets/stateDiagram-v2-4FDKWEC3-sSKQU37N.js +0 -1
  429. package/dist/assets/stylus-TkCXytG7.js +0 -1
  430. package/dist/assets/swift-CBYBwE0m.js +0 -1
  431. package/dist/assets/tcl-DvyBVTw2.js +0 -1
  432. package/dist/assets/textile-DA3WvzuI.js +0 -1
  433. package/dist/assets/toml-BJa3ckRR.js +0 -1
  434. package/dist/assets/troff-CqZSdBAp.js +0 -1
  435. package/dist/assets/ttcn-BouEBguh.js +0 -1
  436. package/dist/assets/ttcn-cfg-C1whpGsE.js +0 -1
  437. package/dist/assets/turtle-DQ8l-awL.js +0 -1
  438. package/dist/assets/useDependencyPanelTab-BeLaV_28.js +0 -1
  439. package/dist/assets/useNotebookActions-C6L8GqPD.js +0 -4
  440. package/dist/assets/useTheme-TeWD29Uz.js +0 -1
  441. package/dist/assets/utils-Wvjk_Y4h.js +0 -1
  442. package/dist/assets/vb-B7wOdn6U.js +0 -1
  443. package/dist/assets/vbscript-DvH455rJ.js +0 -1
  444. package/dist/assets/velocity-B6C6O90i.js +0 -1
  445. package/dist/assets/verilog-JbcxpuFW.js +0 -1
  446. package/dist/assets/vhdl-SEFTp5Re.js +0 -1
  447. package/dist/assets/webidl-ChYZayPm.js +0 -1
  448. package/dist/assets/xquery-DWwllqyg.js +0 -1
  449. package/dist/assets/yacas-DQRdrpIp.js +0 -1
  450. package/dist/assets/z80-CGBxwDW7.js +0 -1
  451. /package/dist/assets/{ImageComparisonComponent-B5A-4CCj.js → ImageComparisonComponent-BIetTBDq.js} +0 -0
  452. /package/dist/assets/{Inputs-BG_nVZPt.js → Inputs-C6ftxLAJ.js} +0 -0
  453. /package/dist/assets/{Plot-CoEOwQq-.js → Plot-Ba3WGWNu.js} +0 -0
  454. /package/dist/assets/{apl-4hxG7HNk.js → apl-Byte72fT.js} +0 -0
  455. /package/dist/assets/{array-D5VxClQs.js → array-CC7vZNGO.js} +0 -0
  456. /package/dist/assets/{asciiarmor-Dv_174xi.js → asciiarmor-BU-VnG1Y.js} +0 -0
  457. /package/dist/assets/{asn1-iiMvplI8.js → asn1-hTvH3S4T.js} +0 -0
  458. /package/dist/assets/{asterisk-CC3QRUnf.js → asterisk-DIMri3P4.js} +0 -0
  459. /package/dist/assets/{brainfuck-C1zBqC_V.js → brainfuck-C-q1Rv8J.js} +0 -0
  460. /package/dist/assets/{chunk-4F5CHEZ2-DUo5vZ2r.js → chunk-4F5CHEZ2-eEwFz7fp.js} +0 -0
  461. /package/dist/assets/{chunk-B2363JML-BBEseLU0.js → chunk-B2363JML-COExSe0d.js} +0 -0
  462. /package/dist/assets/{chunk-DR5Q36YT-C0WIZcJM.js → chunk-DR5Q36YT-OB6tC_dd.js} +0 -0
  463. /package/dist/assets/{chunk-FRFDVMJY-CXpDqtzE.js → chunk-FRFDVMJY-CO3-6rb4.js} +0 -0
  464. /package/dist/assets/{chunk-PL6DKKU2-CdWr1t_8.js → chunk-PL6DKKU2-B9mDp5iV.js} +0 -0
  465. /package/dist/assets/{chunk-SJTYNZTY-SWJVmNtW.js → chunk-SJTYNZTY-Dh_h90Yu.js} +0 -0
  466. /package/dist/assets/{chunk-TQ3KTPDO-NHSLONf7.js → chunk-TQ3KTPDO-CFybjK0M.js} +0 -0
  467. /package/dist/assets/{chunk-UMXZTB3W-Ct179y25.js → chunk-UMXZTB3W-C3w83KpJ.js} +0 -0
  468. /package/dist/assets/{clear-button-CIwzVocs.js → clear-button-Cfe8K4j_.js} +0 -0
  469. /package/dist/assets/{click-outside-container-Bx6OOW4y.js → click-outside-container-BNVqwewc.js} +0 -0
  470. /package/dist/assets/{clike-DgscWMor.js → clike-BE-9Ct_H.js} +0 -0
  471. /package/dist/assets/{clojure-BHbbYwIQ.js → clojure-Co-TLeNo.js} +0 -0
  472. /package/dist/assets/{cmake-DLR6lpqL.js → cmake-B-Nm_Opd.js} +0 -0
  473. /package/dist/assets/{cobol-BCxTxy3w.js → cobol-BGdihAZT.js} +0 -0
  474. /package/dist/assets/{coffeescript-CpA2P5vm.js → coffeescript-BUZXkMUO.js} +0 -0
  475. /package/dist/assets/{colors-CWfEs9Oi.js → colors-BG8Z91CW.js} +0 -0
  476. /package/dist/assets/{common-keywords-0dB1lgek.js → common-keywords-15xBKau4.js} +0 -0
  477. /package/dist/assets/{commonlisp-IOtLAQXJ.js → commonlisp-CFkPbxvX.js} +0 -0
  478. /package/dist/assets/{crystal-D5D6_kGA.js → crystal-CqfqDl34.js} +0 -0
  479. /package/dist/assets/{css-DOb8-BDy.js → css-DPEtZWJi.js} +0 -0
  480. /package/dist/assets/{cypher-DLF7i4IG.js → cypher-B0t8FJvU.js} +0 -0
  481. /package/dist/assets/{cytoscape.esm-CuwfIk-V.js → cytoscape.esm-DT8iy6p1.js} +0 -0
  482. /package/dist/assets/{d-ByNdxjrk.js → d-DRa_XRSB.js} +0 -0
  483. /package/dist/assets/{diff-DgsriQcn.js → diff-GLneonpD.js} +0 -0
  484. /package/dist/assets/{dist-B6ehDvA-.js → dist-A7swzSTR.js} +0 -0
  485. /package/dist/assets/{dist-Cofj3PRM.js → dist-BF6UNR6V.js} +0 -0
  486. /package/dist/assets/{dist-Bc225YxE.js → dist-BQWswd1A.js} +0 -0
  487. /package/dist/assets/{dist-DviQ3W6h.js → dist-BQeNY9Zl.js} +0 -0
  488. /package/dist/assets/{dist-BA8xhrl2.js → dist-BXRWfNwi.js} +0 -0
  489. /package/dist/assets/{dist-fhXsH3fb.js → dist-BlOtCkpT.js} +0 -0
  490. /package/dist/assets/{dist-D8MaDlGc.js → dist-C78V1LRz.js} +0 -0
  491. /package/dist/assets/{dist-CcoNWYux.js → dist-CKT_lJKW.js} +0 -0
  492. /package/dist/assets/{dist-CNghxh0Q.js → dist-CNyMUs19.js} +0 -0
  493. /package/dist/assets/{dist-qBfIhsAs.js → dist-CXBpwk_w.js} +0 -0
  494. /package/dist/assets/{dist-D86l0QaP.js → dist-CciFN1z_.js} +0 -0
  495. /package/dist/assets/{dist-cS6yvaqe.js → dist-CocyeH0q.js} +0 -0
  496. /package/dist/assets/{dist-C_k5-SEy.js → dist-CpcTHxTt.js} +0 -0
  497. /package/dist/assets/{dist-WcxjmQmQ.js → dist-CsvFAFh9.js} +0 -0
  498. /package/dist/assets/{dist-oSdg9XA7.js → dist-D70Tz1Kr.js} +0 -0
  499. /package/dist/assets/{dist-CjBmWBr2.js → dist-DUHHizRG.js} +0 -0
  500. /package/dist/assets/{dist-CiOPfbN_.js → dist-DqVEVg0c.js} +0 -0
  501. /package/dist/assets/{dtd-BY21shY3.js → dtd-uVrZNVF0.js} +0 -0
  502. /package/dist/assets/{duckdb-keywords-DH8yhwVC.js → duckdb-keywords-CYQ5DEZJ.js} +0 -0
  503. /package/dist/assets/{dylan-D_hF5J0y.js → dylan-DkNeA4FZ.js} +0 -0
  504. /package/dist/assets/{ebnf-D73UE5Hl.js → ebnf-XMH6KY7E.js} +0 -0
  505. /package/dist/assets/{ecl-C1ORA0cg.js → ecl-CldUgvc9.js} +0 -0
  506. /package/dist/assets/{eiffel-1fe3g8c_.js → eiffel-CoMDRbRL.js} +0 -0
  507. /package/dist/assets/{elm-hjWurFzL.js → elm-Cb5XC6ev.js} +0 -0
  508. /package/dist/assets/{erlang-Bp4wxA5O.js → erlang-8H3fTZ3L.js} +0 -0
  509. /package/dist/assets/{esm-DM72gy9Q.js → esm-1wf4HygE.js} +0 -0
  510. /package/dist/assets/{fcl-1tMcz7c0.js → fcl-DyFJAgkq.js} +0 -0
  511. /package/dist/assets/{formatting-3l1CoS7X.js → formatting-CSG9kqNb.js} +0 -0
  512. /package/dist/assets/{forth-5O98d424.js → forth-B8kC4npz.js} +0 -0
  513. /package/dist/assets/{fortran-BIuAFxQ8.js → fortran-CNWGEL3c.js} +0 -0
  514. /package/dist/assets/{gallery-page-7ltBHWVR.js → gallery-page-Bcf7fYLy.js} +0 -0
  515. /package/dist/assets/{gas-CHHhShkY.js → gas-DnZQNTHK.js} +0 -0
  516. /package/dist/assets/{gherkin-DIjcYYBT.js → gherkin-JfGcGvci.js} +0 -0
  517. /package/dist/assets/{groovy-BYU3Z-yz.js → groovy-D0FWiAVm.js} +0 -0
  518. /package/dist/assets/{haskell-CjOVOYhk.js → haskell-wUB3uX-G.js} +0 -0
  519. /package/dist/assets/{haxe-Cb_U41Kf.js → haxe-g0JY6eL-.js} +0 -0
  520. /package/dist/assets/{http-DTsrgwMt.js → http-ySzAzH5W.js} +0 -0
  521. /package/dist/assets/{idl-XfUB5VqU.js → idl-CV2cLkPc.js} +0 -0
  522. /package/dist/assets/{init-BYCsRZEq.js → init-DsZRk2YA.js} +0 -0
  523. /package/dist/assets/{javascript-BZ9iuJe9.js → javascript-CT6okXEZ.js} +0 -0
  524. /package/dist/assets/{julia-ZgWUbR6s.js → julia-CKC48ufo.js} +0 -0
  525. /package/dist/assets/{katex-BNYG1in3.js → katex-BE4UDS50.js} +0 -0
  526. /package/dist/assets/{links-DguLoFik.js → links-1rtF1-eC.js} +0 -0
  527. /package/dist/assets/{livescript-PvHqMAnA.js → livescript-C43pZ6Ue.js} +0 -0
  528. /package/dist/assets/{loro_wasm_bg-Z5Iceaci.js → loro_wasm_bg-CXnd80ne.js} +0 -0
  529. /package/dist/assets/{lua-BAkgehCh.js → lua-Cs2mb10K.js} +0 -0
  530. /package/dist/assets/{marimo-icons-CcDNGIRM.js → marimo-icons-CiwvnnsT.js} +0 -0
  531. /package/dist/assets/{math-D-qpUWKO.js → math-B-ZqhQTL.js} +0 -0
  532. /package/dist/assets/{mathematica-sYPoESCW.js → mathematica-B5FMK3ma.js} +0 -0
  533. /package/dist/assets/{mbox-BFVpgB4i.js → mbox-36Zrn5Bd.js} +0 -0
  534. /package/dist/assets/{mirc-DAwdMlc7.js → mirc-BKTAABSX.js} +0 -0
  535. /package/dist/assets/{mllike-CNENYbun.js → mllike-DbuClUqc.js} +0 -0
  536. /package/dist/assets/{modelica-FtpuFG3d.js → modelica-CKRvBm7N.js} +0 -0
  537. /package/dist/assets/{mscgen-BZpZ1eAc.js → mscgen-B4BRgnCi.js} +0 -0
  538. /package/dist/assets/{multi-icon-aZG-rdCp.js → multi-icon-NVkxesVZ.js} +0 -0
  539. /package/dist/assets/{mumps-BM8g2rR9.js → mumps-BFiMcyFV.js} +0 -0
  540. /package/dist/assets/{nginx-CREUN6EW.js → nginx-Cz_XvoTm.js} +0 -0
  541. /package/dist/assets/{node-sql-parser-fWuidk6P.js → node-sql-parser-BtkrI4pN.js} +0 -0
  542. /package/dist/assets/{ntriples-Dpum4Lhl.js → ntriples-QQAkJYAR.js} +0 -0
  543. /package/dist/assets/{octave-C-8skAyy.js → octave-DsTphmGZ.js} +0 -0
  544. /package/dist/assets/{oz-C9dNiWs3.js → oz-CD9rr5Iz.js} +0 -0
  545. /package/dist/assets/{panel-context-C3ham7ZV.js → panel-context-BJbBGfoL.js} +0 -0
  546. /package/dist/assets/{pascal-OtDoyUlT.js → pascal-DdHEIlJE.js} +0 -0
  547. /package/dist/assets/{path-_EHCEa2c.js → path-DvTahePH.js} +0 -0
  548. /package/dist/assets/{perl-Bq6zPLry.js → perl-DHPJBQ1u.js} +0 -0
  549. /package/dist/assets/{pig-CzHJ3vXa.js → pig-Yz7ERgca.js} +0 -0
  550. /package/dist/assets/{powershell-CPgLwhmC.js → powershell-CHPZ_bsU.js} +0 -0
  551. /package/dist/assets/{properties-Kfp4iofx.js → properties-CI9nc7K4.js} +0 -0
  552. /package/dist/assets/{protobuf-BtodseUb.js → protobuf-BYSIv2pY.js} +0 -0
  553. /package/dist/assets/{puppet-DqMZ-3jb.js → puppet-CEpLafZX.js} +0 -0
  554. /package/dist/assets/{python-Du1sm3Dz.js → python-BndVuwG1.js} +0 -0
  555. /package/dist/assets/{q-mTJjDbkl.js → q-L_cetpiW.js} +0 -0
  556. /package/dist/assets/{r-CiWGt8bY.js → r-Dd37AKWk.js} +0 -0
  557. /package/dist/assets/{request-registry-Gm-nOP6a.js → request-registry--h6PWG50.js} +0 -0
  558. /package/dist/assets/{requests-Bm3bohzL.js → requests-DqJEWJ-Q.js} +0 -0
  559. /package/dist/assets/{rpm-DoWl8uQ-.js → rpm-CHrvhtlN.js} +0 -0
  560. /package/dist/assets/{ruby-EPWn7HjP.js → ruby-BPOowfX6.js} +0 -0
  561. /package/dist/assets/{runs-_nm7RTvJ.js → runs-BD0G-C2A.js} +0 -0
  562. /package/dist/assets/{sas-C49N66K9.js → sas-BsEFSvEP.js} +0 -0
  563. /package/dist/assets/{scheme-BKBMeaMf.js → scheme-B42INBu7.js} +0 -0
  564. /package/dist/assets/{shell-B3Qif7WE.js → shell-BPea12OI.js} +0 -0
  565. /package/dist/assets/{sieve-D2oOzUQe.js → sieve-C-yPcLw5.js} +0 -0
  566. /package/dist/assets/{simple-mode-awvuWmjh.js → simple-mode-CFlvn0Mm.js} +0 -0
  567. /package/dist/assets/{smalltalk-D2JNyQE_.js → smalltalk-e7OO1ATb.js} +0 -0
  568. /package/dist/assets/{solr-DD6Hdy4w.js → solr-BAO4N63o.js} +0 -0
  569. /package/dist/assets/{sparql-B_E2GW41.js → sparql-B4I2Ledx.js} +0 -0
  570. /package/dist/assets/{spreadsheet-DQc2JQ5m.js → spreadsheet-DWqd5foV.js} +0 -0
  571. /package/dist/assets/{sql-Cj5Wcvsd.js → sql-RBdzBYsM.js} +0 -0
  572. /package/dist/assets/{src-faGJHwXX.js → src-BnrQkOKh.js} +0 -0
  573. /package/dist/assets/{stylus-R6o8NrsG.js → stylus-CBRbZwhN.js} +0 -0
  574. /package/dist/assets/{swift-Dbh-hbmH.js → swift-B2hnU7ha.js} +0 -0
  575. /package/dist/assets/{swiper-component-Dgt-sBCT.js → swiper-component-YGJlBaCp.js} +0 -0
  576. /package/dist/assets/{tcl-B7hCCUdg.js → tcl-BtyamtaZ.js} +0 -0
  577. /package/dist/assets/{textile-3T2abjma.js → textile-M9mhyNE9.js} +0 -0
  578. /package/dist/assets/{tiddlywiki-Co__osNU.js → tiddlywiki-BsHUDwie.js} +0 -0
  579. /package/dist/assets/{tiki-CfCZczlo.js → tiki-ZqBe4Kjv.js} +0 -0
  580. /package/dist/assets/{timer-BgiWPhV9.js → timer-B6DpdVnC.js} +0 -0
  581. /package/dist/assets/{toml-BfSTXCbK.js → toml-YxyxhyRy.js} +0 -0
  582. /package/dist/assets/{treemap-F5PoC_M0.js → treemap-DeGcO9km.js} +0 -0
  583. /package/dist/assets/{troff-TmwTwfFH.js → troff-C7xpi05X.js} +0 -0
  584. /package/dist/assets/{ttcn-BptQ-efU.js → ttcn-D3YytrJU.js} +0 -0
  585. /package/dist/assets/{ttcn-cfg-BJSeQh2j.js → ttcn-cfg-DlZ5vA9E.js} +0 -0
  586. /package/dist/assets/{turtle-NWQZPdQh.js → turtle-BSHvAsUe.js} +0 -0
  587. /package/dist/assets/{types-iYXk7c05.js → types-a-yURniQ.js} +0 -0
  588. /package/dist/assets/{useInterval-Bc-mr0KL.js → useInterval-2YvvhIZI.js} +0 -0
  589. /package/dist/assets/{vb-5MAVubtN.js → vb-DdkIDLlO.js} +0 -0
  590. /package/dist/assets/{vbscript-C3wI-prb.js → vbscript-DhYGmk_p.js} +0 -0
  591. /package/dist/assets/{velocity-BZ0SsVqc.js → velocity-DAXJNEw4.js} +0 -0
  592. /package/dist/assets/{verilog-sCLfsuOk.js → verilog-jmuT_L3b.js} +0 -0
  593. /package/dist/assets/{vhdl-D8-XDERr.js → vhdl-DcVQ97RU.js} +0 -0
  594. /package/dist/assets/{web-vitals-CJ8ovao_.js → web-vitals-xkV-JBVF.js} +0 -0
  595. /package/dist/assets/{webidl-C2DK9LNJ.js → webidl-B-YB_4OQ.js} +0 -0
  596. /package/dist/assets/{write-secret-modal-DEx_mRHR.js → write-secret-modal-BFLlHwgU.js} +0 -0
  597. /package/dist/assets/{ws-YSapF1PN.js → ws-BnE9sl8z.js} +0 -0
  598. /package/dist/assets/{xquery-Db3HYO3C.js → xquery-DOmY3Oe8.js} +0 -0
  599. /package/dist/assets/{yacas-DhfMSinV.js → yacas-pL3kJRXV.js} +0 -0
  600. /package/dist/assets/{z80-CH-vqbta.js → z80-VwVuI_MT.js} +0 -0
@@ -313,6 +313,26 @@ describe("sqlCode", () => {
313
313
  );
314
314
  });
315
315
 
316
+ it("should preserve dots inside quoted schema names", () => {
317
+ const sqlTableContext: SQLTableContext = {
318
+ engine: "postgres",
319
+ schema: "analytics.events",
320
+ defaultSchema: "public",
321
+ defaultDatabase: "mydb",
322
+ database: "remote",
323
+ dialect: "postgres",
324
+ };
325
+
326
+ const result = sqlCode({
327
+ table: mockTable,
328
+ columnName: mockColumn.name,
329
+ sqlTableContext,
330
+ });
331
+ expect(result).toBe(
332
+ '_df = mo.sql(f"""\nSELECT "email" FROM "remote"."analytics.events"."users" LIMIT 100\n""", engine=postgres)',
333
+ );
334
+ });
335
+
316
336
  it("should not quote * column name", () => {
317
337
  const sqlTableContext: SQLTableContext = {
318
338
  engine: "postgres",
@@ -334,6 +354,68 @@ describe("sqlCode", () => {
334
354
  });
335
355
  });
336
356
 
357
+ describe("Dremio dialect", () => {
358
+ it("should quote reserved column names and table path parts", () => {
359
+ const sqlTableContext: SQLTableContext = {
360
+ engine: "dremio_conn",
361
+ schema: "operations",
362
+ defaultSchema: "",
363
+ defaultDatabase: "",
364
+ database: "lakehouse",
365
+ dialect: "dremio",
366
+ };
367
+
368
+ const result = sqlCode({
369
+ table: { ...mockTable, name: "shipments" as const },
370
+ columnName: "order",
371
+ sqlTableContext,
372
+ });
373
+ expect(result).toBe(
374
+ '_df = mo.sql(f"""\nSELECT "order" FROM "lakehouse"."operations"."shipments" LIMIT 100\n""", engine=dremio_conn)',
375
+ );
376
+ });
377
+
378
+ it("should not quote * column name", () => {
379
+ const sqlTableContext: SQLTableContext = {
380
+ engine: "dremio_conn",
381
+ schema: "operations",
382
+ defaultSchema: "",
383
+ defaultDatabase: "",
384
+ database: "lakehouse",
385
+ dialect: "dremio",
386
+ };
387
+
388
+ const result = sqlCode({
389
+ table: { ...mockTable, name: "customers" as const },
390
+ columnName: "*",
391
+ sqlTableContext,
392
+ });
393
+ expect(result).toBe(
394
+ '_df = mo.sql(f"""\nSELECT * FROM "lakehouse"."operations"."customers" LIMIT 100\n""", engine=dremio_conn)',
395
+ );
396
+ });
397
+
398
+ it("should preserve dots inside quoted schema names", () => {
399
+ const sqlTableContext: SQLTableContext = {
400
+ engine: "dremio_conn",
401
+ schema: "samples.dremio.com",
402
+ defaultSchema: "",
403
+ defaultDatabase: "",
404
+ database: "Samples",
405
+ dialect: "dremio",
406
+ };
407
+
408
+ const result = sqlCode({
409
+ table: { ...mockTable, name: "airlines" as const },
410
+ columnName: "*",
411
+ sqlTableContext,
412
+ });
413
+ expect(result).toBe(
414
+ '_df = mo.sql(f"""\nSELECT * FROM "Samples"."samples.dremio.com"."airlines" LIMIT 100\n""", engine=dremio_conn)',
415
+ );
416
+ });
417
+ });
418
+
337
419
  describe("fallback behavior", () => {
338
420
  it("should use default formatter for unknown dialect", () => {
339
421
  const sqlTableContext: SQLTableContext = {
@@ -15,9 +15,9 @@ export function isSchemaless(schemaName: string) {
15
15
 
16
16
  interface SqlCodeFormatter {
17
17
  /**
18
- * Format the table name based on dialect-specific rules
18
+ * Format the table path based on dialect-specific rules
19
19
  */
20
- formatTableName: (tableName: string) => string;
20
+ formatTablePath: (tablePath: string[]) => string;
21
21
  /**
22
22
  * Format the SELECT clause
23
23
  */
@@ -25,7 +25,7 @@ interface SqlCodeFormatter {
25
25
  }
26
26
 
27
27
  const defaultFormatter: SqlCodeFormatter = {
28
- formatTableName: (tableName: string) => tableName,
28
+ formatTablePath: (tablePath: string[]) => tablePath.join("."),
29
29
  formatSelectClause: (columnName: string, tableName: string) =>
30
30
  `SELECT ${columnName} FROM ${tableName} LIMIT 100`,
31
31
  };
@@ -41,7 +41,8 @@ function getFormatter(dialect: string): SqlCodeFormatter {
41
41
  const quote = BigQueryDialect.spec.identifierQuotes;
42
42
  return {
43
43
  // BigQuery uses backticks for identifiers
44
- formatTableName: (tableName: string) => `${quote}${tableName}${quote}`,
44
+ formatTablePath: (tablePath: string[]) =>
45
+ `${quote}${tablePath.join(".")}${quote}`,
45
46
  formatSelectClause: defaultFormatter.formatSelectClause,
46
47
  };
47
48
  }
@@ -49,7 +50,7 @@ function getFormatter(dialect: string): SqlCodeFormatter {
49
50
  case "sqlserver":
50
51
  case "microsoft sql server":
51
52
  return {
52
- formatTableName: defaultFormatter.formatTableName,
53
+ formatTablePath: defaultFormatter.formatTablePath,
53
54
  formatSelectClause: (columnName: string, tableName: string) =>
54
55
  `SELECT TOP 100 ${columnName} FROM ${tableName}`,
55
56
  };
@@ -57,12 +58,11 @@ function getFormatter(dialect: string): SqlCodeFormatter {
57
58
  case "postgres":
58
59
  case "postgresql":
59
60
  case "duckdb":
61
+ case "dremio":
60
62
  // Quote column and table names to avoid raising errors on weird characters
61
63
  return {
62
- formatTableName: (tableName: string) => {
63
- const parts = tableName.split(".");
64
- return parts.map((part) => `"${part}"`).join(".");
65
- },
64
+ formatTablePath: (tablePath: string[]) =>
65
+ tablePath.map((part) => `"${part}"`).join("."),
66
66
  formatSelectClause: (columnName: string, tableName: string) =>
67
67
  `SELECT ${columnName === "*" ? "*" : `"${columnName}"`} FROM ${tableName} LIMIT 100`,
68
68
  };
@@ -114,26 +114,27 @@ export function sqlCode({
114
114
  database,
115
115
  dialect,
116
116
  } = sqlTableContext;
117
- let tableName = table.name;
117
+ const tablePath = [table.name];
118
118
 
119
119
  // Set the fully qualified table name based on schema and database
120
120
  if (isSchemaless(schema)) {
121
- tableName =
122
- database === defaultDatabase ? tableName : `${database}.${tableName}`;
121
+ if (database !== defaultDatabase) {
122
+ tablePath.unshift(database);
123
+ }
123
124
  } else {
124
125
  // Include schema if it's not the default schema
125
126
  if (schema !== defaultSchema) {
126
- tableName = `${schema}.${tableName}`;
127
+ tablePath.unshift(schema);
127
128
  }
128
129
 
129
130
  // Include database if it's not the default database
130
131
  if (database !== defaultDatabase) {
131
- tableName = `${database}.${tableName}`;
132
+ tablePath.unshift(database);
132
133
  }
133
134
  }
134
135
 
135
136
  const formatter = getFormatter(dialect);
136
- const formattedTableName = formatter.formatTableName(tableName);
137
+ const formattedTableName = formatter.formatTablePath(tablePath);
137
138
  const selectClause = formatter.formatSelectClause(
138
139
  columnName,
139
140
  formattedTableName,
@@ -1,69 +1,10 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { ArrowRightSquareIcon } from "lucide-react";
4
- import { API } from "@/core/network/api";
5
- import { Banner } from "@/plugins/impl/common/error-banner";
6
- import { prettyError } from "@/utils/errors";
7
- import { reloadSafe } from "@/utils/reload-safe";
8
- import { Button } from "../ui/button";
9
- import { toast } from "../ui/use-toast";
10
-
11
3
  interface DisconnectedProps {
12
4
  reason: string;
13
- canTakeover: boolean | undefined;
14
5
  }
15
6
 
16
- export const Disconnected = ({
17
- reason,
18
- canTakeover = false,
19
- }: DisconnectedProps) => {
20
- const handleTakeover = async () => {
21
- try {
22
- const searchParams = new URL(window.location.href).searchParams;
23
- await API.post(`/kernel/takeover?${searchParams.toString()}`, {});
24
-
25
- // Refresh the page to reconnect
26
- reloadSafe();
27
- } catch (error) {
28
- toast({
29
- title: "Failed to take over session",
30
- description: prettyError(error),
31
- variant: "danger",
32
- });
33
- }
34
- };
35
-
36
- if (canTakeover) {
37
- return (
38
- <div className="flex justify-center">
39
- <Banner
40
- kind="info"
41
- className="mt-10 flex flex-col rounded p-3 max-w-[800px] mx-4"
42
- >
43
- <div className="flex justify-between">
44
- <span className="font-bold text-xl flex items-center mb-2">
45
- Notebook already connected
46
- </span>
47
- </div>
48
- <div className="flex justify-between items-end text-base gap-20">
49
- <span>{reason}</span>
50
- {canTakeover && (
51
- <Button
52
- onClick={handleTakeover}
53
- variant="outline"
54
- data-testid="takeover-button"
55
- className="shrink-0"
56
- >
57
- <ArrowRightSquareIcon className="w-4 h-4 mr-2" />
58
- Take over session
59
- </Button>
60
- )}
61
- </div>
62
- </Banner>
63
- </div>
64
- );
65
- }
66
-
7
+ export const Disconnected = ({ reason }: DisconnectedProps) => {
67
8
  return (
68
9
  <div className="font-mono text-center text-base text-(--red-11)">
69
10
  <p>{reason}</p>
@@ -0,0 +1,89 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+ import { render, screen } from "@testing-library/react";
3
+ import { createStore, Provider } from "jotai";
4
+ import { describe, expect, it, vi } from "vitest";
5
+ import { TooltipProvider } from "@/components/ui/tooltip";
6
+ import { layoutStateAtom } from "@/core/layout/layout";
7
+ import { kioskModeAtom, viewStateAtom } from "@/core/mode";
8
+ import { API } from "@/core/network/api";
9
+ import { ViewerBanner } from "../viewer-banner";
10
+
11
+ describe("ViewerBanner", () => {
12
+ it("renders nothing when not in kiosk mode", () => {
13
+ const store = createStore();
14
+ store.set(kioskModeAtom, false);
15
+ const { container } = render(
16
+ <Provider store={store}>
17
+ <TooltipProvider>
18
+ <ViewerBanner />
19
+ </TooltipProvider>
20
+ </Provider>,
21
+ );
22
+ expect(container).toBeEmptyDOMElement();
23
+ });
24
+
25
+ it("renders nothing for an intentional kiosk client (?kiosk=true)", () => {
26
+ const store = createStore();
27
+ store.set(kioskModeAtom, true);
28
+ window.history.pushState({}, "", "/?kiosk=true");
29
+ try {
30
+ const { container } = render(
31
+ <Provider store={store}>
32
+ <TooltipProvider>
33
+ <ViewerBanner />
34
+ </TooltipProvider>
35
+ </Provider>,
36
+ );
37
+ expect(container).toBeEmptyDOMElement();
38
+ } finally {
39
+ window.history.pushState({}, "", "/");
40
+ }
41
+ });
42
+
43
+ it("renders nothing in a non-vertical layout (grid/slides)", () => {
44
+ const store = createStore();
45
+ store.set(kioskModeAtom, true);
46
+ store.set(layoutStateAtom, { selectedLayout: "grid", layoutData: {} });
47
+ const { container } = render(
48
+ <Provider store={store}>
49
+ <TooltipProvider>
50
+ <ViewerBanner />
51
+ </TooltipProvider>
52
+ </Provider>,
53
+ );
54
+ expect(container).toBeEmptyDOMElement();
55
+ });
56
+
57
+ it("renders nothing in present mode", () => {
58
+ const store = createStore();
59
+ store.set(kioskModeAtom, true);
60
+ store.set(viewStateAtom, { mode: "present", cellAnchor: null });
61
+ const { container } = render(
62
+ <Provider store={store}>
63
+ <TooltipProvider>
64
+ <ViewerBanner />
65
+ </TooltipProvider>
66
+ </Provider>,
67
+ );
68
+ expect(container).toBeEmptyDOMElement();
69
+ });
70
+
71
+ it("shows take over and posts without reload when viewing", () => {
72
+ const store = createStore();
73
+ store.set(kioskModeAtom, true);
74
+ const post = vi.spyOn(API, "post").mockResolvedValue({} as never);
75
+ render(
76
+ <Provider store={store}>
77
+ <TooltipProvider>
78
+ <ViewerBanner />
79
+ </TooltipProvider>
80
+ </Provider>,
81
+ );
82
+ const button = screen.getByTestId("takeover-button");
83
+ button.click();
84
+ expect(post).toHaveBeenCalledWith(
85
+ expect.stringContaining("/kernel/takeover"),
86
+ {},
87
+ );
88
+ });
89
+ });
@@ -113,6 +113,7 @@ export const PairWithAgentModal: React.FC<{
113
113
  className="underline"
114
114
  >
115
115
  Learn more
116
+ <span className="sr-only"> about pairing marimo with an agent</span>
116
117
  </a>
117
118
  .
118
119
  </DialogDescription>
@@ -48,7 +48,7 @@ import {
48
48
  import { switchLanguage } from "@/core/codemirror/language/extension";
49
49
  import { MARKDOWN_INITIAL_HIDE_CODE } from "@/core/codemirror/language/languages/markdown";
50
50
  import {
51
- aiEnabledAtom,
51
+ aiFeaturesEnabledAtom,
52
52
  appWidthAtom,
53
53
  autoInstantiateAtom,
54
54
  } from "@/core/config/config";
@@ -100,7 +100,7 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
100
100
  const deleteCell = useDeleteCellCallback();
101
101
  const { openModal } = useImperativeModal();
102
102
  const setAiCompletionCell = useSetAtom(aiCompletionCellAtom);
103
- const aiEnabled = useAtomValue(aiEnabledAtom);
103
+ const aiFeaturesEnabled = useAtomValue(aiFeaturesEnabledAtom);
104
104
  const autoInstantiate = useAtomValue(autoInstantiateAtom);
105
105
  const kioskMode = useAtomValue(kioskModeAtom);
106
106
  const appWidth = useAtomValue(appWidthAtom);
@@ -162,7 +162,7 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
162
162
  {
163
163
  icon: <SparklesIcon size={13} strokeWidth={1.5} />,
164
164
  label: "Refactor with AI",
165
- hidden: !aiEnabled,
165
+ hidden: !aiFeaturesEnabled,
166
166
  handle: () => {
167
167
  setAiCompletionCell((current) =>
168
168
  current?.cellId === cellId ? null : { cellId },
@@ -142,9 +142,10 @@ export function useNotebookActions() {
142
142
  const { selectedLayout } = useLayoutState();
143
143
  const { setLayoutView } = useLayoutActions();
144
144
  const togglePresenting = useTogglePresenting();
145
- // Fallback: if sharing is undefined, both are enabled by default
145
+ // Fallback: if sharing is undefined, all options are enabled by default
146
146
  const sharingHtmlEnabled = resolvedConfig.sharing?.html ?? true;
147
147
  const sharingWasmEnabled = resolvedConfig.sharing?.wasm ?? true;
148
+ const sharingMolabEnabled = resolvedConfig.sharing?.molab ?? true;
148
149
 
149
150
  // Server-side PDF export is always available outside WASM.
150
151
  // Browser print fallback is used in WASM.
@@ -360,7 +361,8 @@ export function useNotebookActions() {
360
361
  icon: <Share2Icon size={14} strokeWidth={1.5} />,
361
362
  label: "Share",
362
363
  handle: NOOP_HANDLER,
363
- hidden: !sharingHtmlEnabled && !sharingWasmEnabled,
364
+ hidden:
365
+ !sharingHtmlEnabled && !sharingWasmEnabled && !sharingMolabEnabled,
364
366
  dropdown: [
365
367
  {
366
368
  icon: <GlobeIcon size={14} strokeWidth={1.5} />,
@@ -387,6 +389,7 @@ export function useNotebookActions() {
387
389
  {
388
390
  icon: <MarimoPlusIcon size={14} strokeWidth={1.5} />,
389
391
  label: "Create molab notebook",
392
+ hidden: !sharingMolabEnabled,
390
393
  handle: async () => {
391
394
  const code = await readCode();
392
395
  const url = createShareableLink({
@@ -26,7 +26,7 @@ import {
26
26
  connectedDocAtom,
27
27
  realTimeCollaboration,
28
28
  } from "@/core/codemirror/rtc/extension";
29
- import { autoInstantiateAtom, isAiEnabled } from "@/core/config/config";
29
+ import { autoInstantiateAtom, isAiFeatureEnabled } from "@/core/config/config";
30
30
  import type { UserConfig } from "@/core/config/config-schema";
31
31
  import { OverridingHotkeyProvider } from "@/core/hotkeys/hotkeys";
32
32
  import { connectionAtom } from "@/core/network/connection";
@@ -65,6 +65,11 @@ export interface CellEditorProps
65
65
  hasOutput?: boolean;
66
66
  languageAdapter: LanguageAdapterType | undefined;
67
67
  showLanguageToggles?: boolean;
68
+ /**
69
+ * Override for the inline "Edit with AI" tooltip. Defaults to the user's
70
+ * `ai.inline_tooltip` config. Set to `false` to force-disable it.
71
+ */
72
+ inlineAiTooltip?: boolean;
68
73
  setLanguageAdapter: React.Dispatch<
69
74
  React.SetStateAction<LanguageAdapterType | undefined>
70
75
  >;
@@ -73,6 +78,12 @@ export interface CellEditorProps
73
78
  editorViewParentRef?: React.RefObject<HTMLDivElement | null>;
74
79
  showHiddenCode: (opts?: { focus?: boolean }) => void;
75
80
  outputArea?: "above" | "below";
81
+ /**
82
+ * CSS selector for the element that editor tooltips (completions, hover,
83
+ * signature help) are appended to. Useful for fullscreen/dialog containers;
84
+ * defaults to `#App`.
85
+ */
86
+ tooltipParentSelector?: string;
76
87
  }
77
88
 
78
89
  const CellEditorInternal = ({
@@ -94,7 +105,9 @@ const CellEditorInternal = ({
94
105
  languageAdapter,
95
106
  setLanguageAdapter,
96
107
  showLanguageToggles = true,
108
+ inlineAiTooltip,
97
109
  outputArea,
110
+ tooltipParentSelector,
98
111
  }: CellEditorProps) => {
99
112
  const [aiCompletionCell, setAiCompletionCell] = useAtom(aiCompletionCellAtom);
100
113
  const deleteCell = useDeleteCellCallback();
@@ -173,13 +186,13 @@ const CellEditorInternal = ({
173
186
  });
174
187
  });
175
188
 
176
- const aiEnabled = isAiEnabled(userConfig);
189
+ const aiFeaturesEnabled = isAiFeatureEnabled(userConfig);
177
190
 
178
191
  const extensions = useMemo(() => {
179
192
  const extensions = setupCodeMirror({
180
193
  cellId,
181
194
  showPlaceholder,
182
- enableAI: aiEnabled,
195
+ enableAI: aiFeaturesEnabled,
183
196
  cellActions: {
184
197
  ...cellActions,
185
198
  afterToggleMarkdown,
@@ -201,6 +214,9 @@ const CellEditorInternal = ({
201
214
  splitCell,
202
215
  toggleHideCode,
203
216
  aiCellCompletion: () => {
217
+ if (!aiFeaturesEnabled) {
218
+ return false;
219
+ }
204
220
  let closed = false;
205
221
  setAiCompletionCell((v) => {
206
222
  // Toggle close
@@ -221,7 +237,9 @@ const CellEditorInternal = ({
221
237
  hotkeys: new OverridingHotkeyProvider(userConfig.keymap.overrides ?? {}),
222
238
  diagnosticsConfig: userConfig.diagnostics,
223
239
  displayConfig: userConfig.display,
224
- inlineAiTooltip: userConfig.ai?.inline_tooltip ?? false,
240
+ inlineAiTooltip:
241
+ inlineAiTooltip ?? userConfig.ai?.inline_tooltip ?? false,
242
+ tooltipParentSelector,
225
243
  });
226
244
 
227
245
  extensions.push(
@@ -271,7 +289,9 @@ const CellEditorInternal = ({
271
289
  userConfig.display,
272
290
  userConfig.diagnostics,
273
291
  userConfig.ai?.inline_tooltip,
274
- aiEnabled,
292
+ inlineAiTooltip,
293
+ tooltipParentSelector,
294
+ aiFeaturesEnabled,
275
295
  theme,
276
296
  showPlaceholder,
277
297
  cellActions,
@@ -201,16 +201,23 @@ export const PANEL_MAP = new Map<PanelType, PanelDescriptor>(
201
201
  );
202
202
 
203
203
  /**
204
- * Check if a panel should be hidden based on its `hidden` property
205
- * and `requiredCapability`.
204
+ * Check if a panel should be hidden based on its descriptor and runtime state.
206
205
  */
207
- export function isPanelHidden(
208
- panel: PanelDescriptor,
209
- capabilities: Capabilities,
210
- ): boolean {
206
+ export function isPanelHidden({
207
+ panel,
208
+ capabilities,
209
+ aiEnabled,
210
+ }: {
211
+ panel: PanelDescriptor;
212
+ capabilities: Capabilities;
213
+ aiEnabled: boolean;
214
+ }): boolean {
211
215
  if (panel.hidden) {
212
216
  return true;
213
217
  }
218
+ if (panel.type === "ai" && !aiEnabled) {
219
+ return true;
220
+ }
214
221
  if (panel.requiredCapability && !capabilities[panel.requiredCapability]) {
215
222
  return true;
216
223
  }
@@ -27,6 +27,7 @@ import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
27
27
  import { LazyActivity } from "@/components/utils/lazy-mount";
28
28
  import { cellErrorCount } from "@/core/cells/cells";
29
29
  import { capabilitiesAtom } from "@/core/config/capabilities";
30
+ import { aiEnabledAtom } from "@/core/config/config";
30
31
  import { getFeatureFlag } from "@/core/config/feature-flag";
31
32
  import { cn } from "@/utils/cn";
32
33
  import { ErrorBoundary } from "../../boundary/ErrorBoundary";
@@ -93,18 +94,19 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
93
94
  const [panelLayout, setPanelLayout] = useAtom(panelLayoutAtom);
94
95
  // Subscribe to capabilities to re-render when they change (e.g., terminal capability)
95
96
  const capabilities = useAtomValue(capabilitiesAtom);
97
+ const aiEnabled = useAtomValue(aiEnabledAtom);
96
98
 
97
99
  // Convert current developer panel items to PanelDescriptors
98
100
  // Filter out hidden panels (e.g., terminal when capability is not available)
99
101
  const devPanelItems = useMemo(() => {
100
102
  return panelLayout.developerPanel.flatMap((id) => {
101
103
  const panel = PANEL_MAP.get(id);
102
- if (!panel || isPanelHidden(panel, capabilities)) {
104
+ if (!panel || isPanelHidden({ panel, capabilities, aiEnabled })) {
103
105
  return [];
104
106
  }
105
107
  return [panel];
106
108
  });
107
- }, [panelLayout.developerPanel, capabilities]);
109
+ }, [panelLayout.developerPanel, capabilities, aiEnabled]);
108
110
 
109
111
  const handleSetDevPanelItems = (items: PanelDescriptor[]) => {
110
112
  setPanelLayout((prev) => ({
@@ -141,7 +143,7 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
141
143
  const availableDevPanels = useMemo(() => {
142
144
  const sidebarIds = new Set(panelLayout.sidebar);
143
145
  return PANELS.filter((p) => {
144
- if (isPanelHidden(p, capabilities)) {
146
+ if (isPanelHidden({ panel: p, capabilities, aiEnabled })) {
145
147
  return false;
146
148
  }
147
149
  // Exclude panels that are in the sidebar
@@ -150,7 +152,7 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
150
152
  }
151
153
  return true;
152
154
  });
153
- }, [panelLayout.sidebar, capabilities]);
155
+ }, [panelLayout.sidebar, capabilities, aiEnabled]);
154
156
 
155
157
  const emitResizeEvent = useEvent(() => {
156
158
  // HACK: Unfortunately, we have to do this twice to make sure the
@@ -4,18 +4,27 @@ import { useAtomValue } from "jotai";
4
4
  import { SparklesIcon } from "lucide-react";
5
5
  import React from "react";
6
6
  import { useOpenSettingsToTab } from "@/components/app-config/state";
7
- import { aiAtom, aiEnabledAtom } from "@/core/config/config";
7
+ import {
8
+ aiAtom,
9
+ aiEnabledAtom,
10
+ aiModelConfiguredAtom,
11
+ } from "@/core/config/config";
8
12
  import { DEFAULT_AI_MODEL } from "@/core/config/config-schema";
9
13
  import { FooterItem } from "../footer-item";
10
14
 
11
15
  export const AIStatusIcon: React.FC = () => {
12
16
  const ai = useAtomValue(aiAtom);
13
17
  const aiEnabled = useAtomValue(aiEnabledAtom);
18
+ const aiModelConfigured = useAtomValue(aiModelConfiguredAtom);
14
19
  const chatModel = ai?.models?.chat_model || DEFAULT_AI_MODEL;
15
20
  const editModel = ai?.models?.edit_model || chatModel;
16
21
  const { handleClick } = useOpenSettingsToTab();
17
22
 
18
23
  if (!aiEnabled) {
24
+ return null;
25
+ }
26
+
27
+ if (!aiModelConfigured) {
19
28
  return (
20
29
  <FooterItem
21
30
  tooltip="Assist is disabled"
@@ -12,6 +12,7 @@ import {
12
12
  notebookQueuedOrRunningCountAtom,
13
13
  } from "@/core/cells/cells";
14
14
  import { capabilitiesAtom } from "@/core/config/capabilities";
15
+ import { aiEnabledAtom } from "@/core/config/config";
15
16
  import { cn } from "@/utils/cn";
16
17
  import { FeedbackButton } from "../components/feedback-button";
17
18
  import { panelLayoutAtom, useChromeActions, useChromeState } from "../state";
@@ -30,6 +31,7 @@ export const Sidebar: React.FC = () => {
30
31
  const [panelLayout, setPanelLayout] = useAtom(panelLayoutAtom);
31
32
  // Subscribe to capabilities to re-render when they change
32
33
  const capabilities = useAtomValue(capabilitiesAtom);
34
+ const aiEnabled = useAtomValue(aiEnabledAtom);
33
35
 
34
36
  const renderIcon = ({ Icon }: PanelDescriptor, className?: string) => {
35
37
  return <Icon className={cn("h-5 w-5", className)} />;
@@ -40,7 +42,7 @@ export const Sidebar: React.FC = () => {
40
42
  const availableSidebarPanels = useMemo(() => {
41
43
  const devPanelIds = new Set(panelLayout.developerPanel);
42
44
  return PANELS.filter((p) => {
43
- if (isPanelHidden(p, capabilities)) {
45
+ if (isPanelHidden({ panel: p, capabilities, aiEnabled })) {
44
46
  return false;
45
47
  }
46
48
  // Exclude panels that are in the developer panel
@@ -49,19 +51,19 @@ export const Sidebar: React.FC = () => {
49
51
  }
50
52
  return true;
51
53
  });
52
- }, [panelLayout.developerPanel, capabilities]);
54
+ }, [panelLayout.developerPanel, capabilities, aiEnabled]);
53
55
 
54
56
  // Convert current sidebar items to PanelDescriptors
55
57
  // Filter out hidden panels (e.g., when capability is not available)
56
58
  const sidebarItems = useMemo(() => {
57
59
  return panelLayout.sidebar.flatMap((id) => {
58
60
  const panel = PANEL_MAP.get(id);
59
- if (!panel || isPanelHidden(panel, capabilities)) {
61
+ if (!panel || isPanelHidden({ panel, capabilities, aiEnabled })) {
60
62
  return [];
61
63
  }
62
64
  return [panel];
63
65
  });
64
- }, [panelLayout.sidebar, capabilities]);
66
+ }, [panelLayout.sidebar, capabilities, aiEnabled]);
65
67
 
66
68
  const handleSetSidebarItems = (items: PanelDescriptor[]) => {
67
69
  setPanelLayout((prev) => ({
@@ -218,7 +220,7 @@ const SidebarItem: React.FC<
218
220
  // Render as div when not clickable (e.g., inside ReorderableList)
219
221
  // This avoids nested interactive elements which break react-aria's drag behavior
220
222
  const content = onClick ? (
221
- <button className={itemClassName} onClick={onClick}>
223
+ <button type="button" className={itemClassName} onClick={onClick}>
222
224
  {children}
223
225
  </button>
224
226
  ) : (