@marimo-team/frontend 0.23.9-dev8 → 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
@@ -221,26 +221,54 @@ const SubslideView = ({
221
221
  );
222
222
  };
223
223
 
224
+ const ParkedPreviewContent = ({
225
+ cell,
226
+ isNoOutputPreview,
227
+ isEditable,
228
+ codeShown,
229
+ }: {
230
+ cell: RuntimeCell;
231
+ isNoOutputPreview: boolean;
232
+ isEditable: boolean;
233
+ codeShown: boolean;
234
+ }) => {
235
+ if (isNoOutputPreview && isEditable) {
236
+ return <SlideCellView cell={cell} />;
237
+ }
238
+ if (isNoOutputPreview && codeShown) {
239
+ return <SlideCellReadOnlyView cell={cell} />;
240
+ }
241
+ return (
242
+ <CellOutputSlide
243
+ cellId={cell.id}
244
+ status={cell.status}
245
+ output={cell.output}
246
+ />
247
+ );
248
+ };
249
+
224
250
  // There is an upstream react bug in dev mode (https://github.com/facebook/react/issues/34840)
225
251
  // Uncaught SecurityError: Failed to read a named property '$$typeof' from 'Window'
226
252
  // Happens with cells containing iframes / external content
227
253
  const RevealSlidesComponent = ({
228
- cellsWithOutput,
254
+ slideCells,
229
255
  layout,
230
256
  setLayout,
257
+ noOutputIds,
231
258
  activeIndex,
232
259
  onSlideChange,
233
260
  mode,
234
- configWidth = 300, // px
261
+ configWidth, // px
235
262
  isEditable = false,
236
263
  }: {
237
- cellsWithOutput: RuntimeCell[];
264
+ slideCells: RuntimeCell[];
238
265
  layout: SlidesLayout;
239
266
  setLayout: (layout: SlidesLayout) => void;
267
+ noOutputIds: ReadonlySet<CellId>;
240
268
  activeIndex?: number;
241
269
  onSlideChange?: (index: number) => void;
242
270
  mode: AppMode;
243
- configWidth?: number;
271
+ configWidth: number;
244
272
  isEditable?: boolean;
245
273
  }) => {
246
274
  const containerRef = useRef<HTMLDivElement>(null);
@@ -255,42 +283,46 @@ const RevealSlidesComponent = ({
255
283
  );
256
284
 
257
285
  const [showCode, setShowCode] = useState(false);
258
- const codeAvailable = useNotebookCodeAvailable(cellsWithOutput);
286
+ const codeAvailable = useNotebookCodeAvailable(slideCells);
259
287
  const codeToggleEnabled = !isIslands() && codeAvailable;
260
288
  const codeShown = codeToggleEnabled && showCode;
261
289
 
262
- const activeCell =
263
- activeIndex != null ? cellsWithOutput[activeIndex] : undefined;
290
+ const activeCell = activeIndex != null ? slideCells[activeIndex] : undefined;
264
291
  // Fall back to the first cell while the deck settles on an initial slide.
265
292
  // Still `undefined` when the deck is empty (handled below).
266
- const activeConfigCell = activeCell ?? cellsWithOutput.at(0);
293
+ const activeConfigCell = activeCell ?? slideCells.at(0);
267
294
 
268
295
  const composition = useMemo(
269
296
  () =>
270
297
  composeSlides({
271
- cells: cellsWithOutput,
298
+ cells: slideCells,
272
299
  getType: (cell) =>
273
- layout.cells.get(cell.id)?.type ?? DEFAULT_SLIDE_TYPE,
300
+ noOutputIds.has(cell.id)
301
+ ? "skip"
302
+ : (layout.cells.get(cell.id)?.type ?? DEFAULT_SLIDE_TYPE),
274
303
  }),
275
- [cellsWithOutput, layout.cells],
304
+ [slideCells, noOutputIds, layout.cells],
276
305
  );
277
306
 
278
- // Skip cells aren't part of the composed deck. When one is selected in the
279
- // minimap we render a preview over the deck and park reveal on a neighboring
280
- // real slide; keyboard nav while parked is handled below.
281
- const skippedPreviewCell =
282
- activeCell && layout.cells.get(activeCell.id)?.type === "skip"
283
- ? activeCell
284
- : null;
307
+ // Skipped and output-less cells aren't part of the composed deck. When one is
308
+ // selected in the minimap we render a preview over the deck and park reveal on
309
+ // a neighboring real slide; keyboard nav while parked is handled below.
310
+ const activeCellSlideType = activeCell
311
+ ? layout.cells.get(activeCell.id)?.type
312
+ : undefined;
313
+ const isNoOutputPreview =
314
+ activeCell != null && noOutputIds.has(activeCell.id);
315
+ const isParkedPreview = activeCellSlideType === "skip" || isNoOutputPreview;
316
+ const parkedPreviewCell = isParkedPreview ? activeCell : null;
285
317
 
286
318
  const { cellToTarget, targetToCellIndex } = useMemo(
287
319
  () =>
288
320
  buildSlideIndices({
289
321
  composition,
290
- cells: cellsWithOutput,
322
+ cells: slideCells,
291
323
  getId: (c) => c.id,
292
324
  }),
293
- [composition, cellsWithOutput],
325
+ [composition, slideCells],
294
326
  );
295
327
 
296
328
  const deckTransition = layout.deck?.transition ?? DEFAULT_DECK_TRANSITION;
@@ -322,7 +354,7 @@ const RevealSlidesComponent = ({
322
354
  const navigateDeckToActiveCell = useEvent((deck: RevealApi) => {
323
355
  const target = resolveDeckNavigationTarget({
324
356
  activeIndex,
325
- cells: cellsWithOutput,
357
+ cells: slideCells,
326
358
  cellToTarget,
327
359
  getId: (cell) => cell.id,
328
360
  });
@@ -340,7 +372,7 @@ const RevealSlidesComponent = ({
340
372
  return;
341
373
  }
342
374
  navigateDeckToActiveCell(deck);
343
- }, [activeIndex, cellToTarget, cellsWithOutput, navigateDeckToActiveCell]);
375
+ }, [activeIndex, cellToTarget, slideCells, navigateDeckToActiveCell]);
344
376
 
345
377
  // Toggling code (re)mounts a CodeMirror editor on the active slide. Defer
346
378
  // the state update so the button/keypress paints first and the heavier mount
@@ -380,12 +412,12 @@ const RevealSlidesComponent = ({
380
412
  return { h: target.h, v: target.v };
381
413
  }, [activeCell, cellToTarget]);
382
414
 
383
- // Forward the deck's current cell to the parent, except while a skipped
415
+ // Forward the deck's current cell to the parent, except while a parked
384
416
  // preview is parked: every reveal.js event during that window is an echo
385
417
  // of the programmatic park (possibly with transient indices), so ignoring
386
- // them keeps `activeCellId` pinned on the skipped cell.
418
+ // them keeps `activeCellId` pinned on the minimap cell.
387
419
  const reportCurrentCell = useEvent(() => {
388
- if (skippedPreviewCell != null) {
420
+ if (parkedPreviewCell != null) {
389
421
  return;
390
422
  }
391
423
  const deck = deckRef.current;
@@ -401,10 +433,10 @@ const RevealSlidesComponent = ({
401
433
  }
402
434
  });
403
435
 
404
- // While parked on a skipped preview, step through minimap order instead of
436
+ // While parked on a preview, step through minimap order instead of
405
437
  // letting reveal.js advance from the parked slide the user can't see.
406
438
  const handleParkedNavKey = useEvent((event: KeyboardEvent) => {
407
- if (!skippedPreviewCell || activeIndex == null) {
439
+ if (!parkedPreviewCell || activeIndex == null) {
408
440
  return;
409
441
  }
410
442
  if (Events.fromInput(event)) {
@@ -418,7 +450,7 @@ const RevealSlidesComponent = ({
418
450
  event.preventDefault();
419
451
  event.stopPropagation();
420
452
  const nextIndex = activeIndex + direction;
421
- if (nextIndex < 0 || nextIndex >= cellsWithOutput.length) {
453
+ if (nextIndex < 0 || nextIndex >= slideCells.length) {
422
454
  return;
423
455
  }
424
456
  onSlideChange?.(nextIndex);
@@ -431,6 +463,10 @@ const RevealSlidesComponent = ({
431
463
 
432
464
  useEventListener(document, "keydown", handleParkedNavKey, { capture: true });
433
465
 
466
+ const parkedPreviewLabel = isNoOutputPreview
467
+ ? "Hidden as there is no output"
468
+ : "Skipped in presentation";
469
+
434
470
  const slideArea = (
435
471
  <div
436
472
  ref={containerRef}
@@ -439,7 +475,7 @@ const RevealSlidesComponent = ({
439
475
  <div className="group relative" style={{ width, height }}>
440
476
  <Deck
441
477
  deckRef={deckRef}
442
- className="aspect-video w-full overflow-hidden border rounded bg-background mo-slides-theme prose-slides"
478
+ className="aspect-video w-full overflow-hidden border rounded bg-background mo-slides-theme prose-slides focus:outline-none focus-visible:outline-none"
443
479
  config={revealConfig}
444
480
  onReady={handleDeckReady}
445
481
  onSlideChange={handleSlideChange}
@@ -480,21 +516,30 @@ const RevealSlidesComponent = ({
480
516
  );
481
517
  })}
482
518
  </Deck>
483
- {skippedPreviewCell && (
519
+ {parkedPreviewCell && (
484
520
  <div
521
+ key={parkedPreviewCell.id}
485
522
  className="absolute inset-0 z-10 border rounded bg-background flex flex-col overflow-hidden"
486
- aria-label="Skipped in presentation"
523
+ aria-label={parkedPreviewLabel}
487
524
  >
488
525
  <div className="flex items-center gap-1.5 px-3 py-1.5 text-xs text-muted-foreground border-b bg-muted/40">
489
526
  <EyeOffIcon className="h-3.5 w-3.5" />
490
- <span>Skipped in presentation</span>
527
+ <span>{parkedPreviewLabel}</span>
491
528
  </div>
492
529
  <div className="flex-1 overflow-auto flex">
493
- <div className="mo-slide-content" style={{ margin: "auto 20px" }}>
494
- <CellOutputSlide
495
- cellId={skippedPreviewCell.id}
496
- status={skippedPreviewCell.status}
497
- output={skippedPreviewCell.output}
530
+ <div
531
+ className={
532
+ isNoOutputPreview && (isEditable || codeShown)
533
+ ? "mo-slide-content flex flex-col gap-3"
534
+ : "mo-slide-content"
535
+ }
536
+ style={{ margin: "auto 20px" }}
537
+ >
538
+ <ParkedPreviewContent
539
+ cell={parkedPreviewCell}
540
+ isNoOutputPreview={isNoOutputPreview}
541
+ isEditable={isEditable}
542
+ codeShown={codeShown}
498
543
  />
499
544
  </div>
500
545
  </div>
@@ -3,6 +3,7 @@
3
3
  import { useMemo, useRef, useState } from "react";
4
4
  import type { EditorView } from "@codemirror/view";
5
5
  import { useAtomValue } from "jotai";
6
+ import { cellDomProps } from "@/components/editor/common";
6
7
  import { CellEditor } from "@/components/editor/cell/code/cell-editor";
7
8
  import { CellStatusComponent } from "@/components/editor/cell/CellStatus";
8
9
  import { RunButton } from "@/components/editor/cell/RunButton";
@@ -111,7 +112,10 @@ export const SlideCellView = ({ cell }: { cell: RuntimeCell }) => {
111
112
  );
112
113
 
113
114
  const editor = (
114
- <div className={editorWrapperClassName}>
115
+ <div
116
+ className={editorWrapperClassName}
117
+ {...cellDomProps(cell.id, cell.name)}
118
+ >
115
119
  <CellEditor
116
120
  theme={theme}
117
121
  showPlaceholder={false}
@@ -134,7 +138,14 @@ export const SlideCellView = ({ cell }: { cell: RuntimeCell }) => {
134
138
  languageAdapter={languageAdapter}
135
139
  setLanguageAdapter={setLanguageAdapter}
136
140
  showLanguageToggles={false}
141
+ // The reveal.js transforms in slides view break the inline AI
142
+ // tooltip's fixed positioning, so disable it here.
143
+ inlineAiTooltip={false}
137
144
  outputArea={cellOutputPosition}
145
+ // Parent tooltips (completions, hover, signature help) to the Reveal
146
+ // viewport so they stay visible when presenting fullscreen; `#App` sits
147
+ // outside the fullscreened subtree and would never paint.
148
+ tooltipParentSelector=".reveal-viewport"
138
149
  />
139
150
  {toolbar}
140
151
  </div>
@@ -26,15 +26,23 @@ import type {
26
26
  SlidesLayout,
27
27
  SlideType,
28
28
  } from "../editor/renderers/slides-layout/types";
29
- import { useState } from "react";
29
+ import { useAtom } from "jotai";
30
+ import { atomWithStorage } from "jotai/utils";
30
31
  import { Tooltip } from "../ui/tooltip";
31
32
  import { Button } from "../ui/button";
32
33
  import { Kbd } from "../ui/kbd";
33
34
  import type { RuntimeCell } from "@/core/cells/types";
35
+ import { jotaiJsonStorage } from "@/utils/storage/jotai";
34
36
 
35
37
  export const DEFAULT_SLIDE_TYPE: SlideType = "slide";
36
38
  export const DEFAULT_DECK_TRANSITION: DeckTransition = "slide";
37
39
  const COLLAPSED_CONFIG_WIDTH = 36;
40
+ const slideConfigOpenAtom = atomWithStorage<boolean>(
41
+ "marimo:slides:config-open",
42
+ true,
43
+ jotaiJsonStorage,
44
+ { getOnInit: true },
45
+ );
38
46
 
39
47
  export interface SlideTypeOption {
40
48
  value: SlideType;
@@ -322,7 +330,7 @@ export const SlideSidebar = ({
322
330
  setLayout: (layout: SlidesLayout) => void;
323
331
  activeConfigCell?: RuntimeCell;
324
332
  }) => {
325
- const [isConfigOpen, setIsConfigOpen] = useState(false);
333
+ const [isConfigOpen, setIsConfigOpen] = useAtom(slideConfigOpenAtom);
326
334
 
327
335
  return (
328
336
  <aside
@@ -350,7 +358,7 @@ export const SlideSidebar = ({
350
358
  variant="ghost"
351
359
  size="icon"
352
360
  className="h-7 w-7 text-muted-foreground hover:text-foreground"
353
- onClick={() => setIsConfigOpen(!isConfigOpen)}
361
+ onClick={() => setIsConfigOpen((open) => !open)}
354
362
  aria-expanded={isConfigOpen}
355
363
  aria-controls="slide-config-panel"
356
364
  >
@@ -6,6 +6,7 @@ import { useAtomValue } from "jotai";
6
6
  import { CopyIcon, DownloadIcon } from "lucide-react";
7
7
  import type React from "react";
8
8
  import { Constants } from "@/core/constants";
9
+ import { useResolvedMarimoConfig } from "@/core/config/config";
9
10
  import { codeAtom } from "@/core/saving/file-state";
10
11
  import { useFilename } from "@/core/saving/filename";
11
12
  import { isStaticNotebook } from "@/core/static/static-state";
@@ -66,6 +67,9 @@ const StaticBannerDialog = ({ code }: { code: string }) => {
66
67
  filename = filename.slice(lastSlash + 1);
67
68
  }
68
69
 
70
+ const [resolvedConfig] = useResolvedMarimoConfig();
71
+ const molabEnabled = resolvedConfig.sharing?.molab !== false;
72
+
69
73
  const href = window.location.href;
70
74
  const molabLink = createShareableLink({
71
75
  code,
@@ -118,28 +122,30 @@ const StaticBannerDialog = ({ code }: { code: string }) => {
118
122
  </div>
119
123
  )}
120
124
 
121
- <div className="pt-3 border-t flex gap-2 items-center">
122
- <Button
123
- asChild={true}
124
- variant="outline"
125
- size="xs"
126
- className="shrink-0"
127
- >
128
- <a href={molabLink} target="_blank" rel="noopener noreferrer">
129
- <MarimoPlusIcon
130
- size={12}
131
- strokeWidth={1.5}
132
- className="mr-1.5 mt-px text-(--grass-11)"
133
- />
134
- Open in molab
135
- </a>
136
- </Button>
137
- <p className="text-sm text-(--sky-12)">
138
- Run this notebook in{" "}
139
- <span className="font-semibold">molab</span>, marimo's
140
- cloud-hosted notebook platform.
141
- </p>
142
- </div>
125
+ {molabEnabled && (
126
+ <div className="pt-3 border-t flex gap-2 items-center">
127
+ <Button
128
+ asChild={true}
129
+ variant="outline"
130
+ size="xs"
131
+ className="shrink-0"
132
+ >
133
+ <a href={molabLink} target="_blank" rel="noopener noreferrer">
134
+ <MarimoPlusIcon
135
+ size={12}
136
+ strokeWidth={1.5}
137
+ className="mr-1.5 mt-px text-(--grass-11)"
138
+ />
139
+ Open in molab
140
+ </a>
141
+ </Button>
142
+ <p className="text-sm text-(--sky-12)">
143
+ Run this notebook in{" "}
144
+ <span className="font-semibold">molab</span>, marimo's
145
+ cloud-hosted notebook platform.
146
+ </p>
147
+ </div>
148
+ )}
143
149
  </DialogDescription>
144
150
  </DialogHeader>
145
151
  <div className="flex gap-3 pt-2">
@@ -1,46 +1,52 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import { beforeEach, describe, expect, it, vi } from "vitest";
3
3
 
4
- // Mock the models.json import
5
4
  vi.mock("@marimo-team/llm-info/models.json", () => {
6
- const models: AiModel[] = [
7
- {
8
- name: "GPT-4",
9
- model: "gpt-4",
10
- description: "OpenAI GPT-4 model",
11
- providers: ["openai"],
12
- roles: ["chat", "edit"],
13
- thinking: false,
14
- },
15
- {
16
- name: "Claude 3",
17
- model: "claude-3-sonnet",
18
- description: "Anthropic Claude 3 Sonnet",
19
- providers: ["anthropic"],
20
- roles: ["chat", "edit"],
21
- thinking: false,
22
- },
23
- {
24
- name: "Gemini Pro",
25
- model: "gemini-pro",
26
- description: "Google Gemini Pro model",
27
- providers: ["google"],
28
- roles: ["chat", "edit"],
29
- thinking: false,
30
- },
31
- {
32
- name: "Multi Provider Model",
33
- model: "multi-model",
34
- description: "Model available on multiple providers",
35
- providers: ["openai", "anthropic"],
36
- roles: ["chat", "edit"],
37
- thinking: false,
38
- },
39
- ];
40
-
41
- return {
42
- models: models,
5
+ const make = (
6
+ overrides: Partial<AiModel> & Pick<AiModel, "name" | "model">,
7
+ ): AiModel => ({
8
+ description: "",
9
+ roles: ["chat", "edit"],
10
+ capabilities: [],
11
+ input_types: [],
12
+ output_types: [],
13
+ release_date: "1970-01-01",
14
+ ...overrides,
15
+ });
16
+
17
+ const multiModel = make({
18
+ name: "Multi Provider Model",
19
+ model: "multi-model",
20
+ description: "Model available on multiple providers",
21
+ });
22
+
23
+ const models: Record<string, AiModel[]> = {
24
+ openai: [
25
+ make({
26
+ name: "GPT-4",
27
+ model: "gpt-4",
28
+ description: "OpenAI GPT-4 model",
29
+ }),
30
+ multiModel,
31
+ ],
32
+ anthropic: [
33
+ make({
34
+ name: "Claude 3",
35
+ model: "claude-3-sonnet",
36
+ description: "Anthropic Claude 3 Sonnet",
37
+ }),
38
+ multiModel,
39
+ ],
40
+ google: [
41
+ make({
42
+ name: "Gemini Pro",
43
+ model: "gemini-pro",
44
+ description: "Google Gemini Pro model",
45
+ }),
46
+ ],
43
47
  };
48
+
49
+ return { models };
44
50
  });
45
51
 
46
52
  import type { AiModel } from "@marimo-team/llm-info";
@@ -107,14 +113,15 @@ describe("AiModelRegistry", () => {
107
113
  });
108
114
 
109
115
  const ids = [...registry.getModelsMap().keys()];
110
- // Include custom and all default ones.
116
+ // Include custom and all default ones; iteration follows provider
117
+ // sections in the source data (openai → anthropic → google).
111
118
  expect(ids).toEqual([
112
119
  "openai/custom-gpt",
113
120
  "openai/gpt-4",
114
- "anthropic/claude-3-sonnet",
115
- "google/gemini-pro",
116
121
  "openai/multi-model",
122
+ "anthropic/claude-3-sonnet",
117
123
  "anthropic/multi-model",
124
+ "google/gemini-pro",
118
125
  ]);
119
126
  });
120
127
  });
@@ -125,9 +132,9 @@ describe("AiModelRegistry", () => {
125
132
  const openaiModels = registry.getModelsByProvider("openai");
126
133
 
127
134
  expect(openaiModels).toHaveLength(2); // gpt-4 and multi-model
128
- expect(
129
- openaiModels.every((model) => model.providers.includes("openai")),
130
- ).toBe(true);
135
+ expect(openaiModels.every((model) => model.provider === "openai")).toBe(
136
+ true,
137
+ );
131
138
  });
132
139
 
133
140
  it("should return empty array for provider with no models", () => {
@@ -147,9 +154,9 @@ describe("AiModelRegistry", () => {
147
154
  expect(customModel?.name).toBe("custom-gpt");
148
155
  expect(customModel?.model).toBe("custom-gpt");
149
156
  expect(customModel?.description).toBe("Custom model");
150
- expect(customModel?.providers).toEqual(["openai"]);
157
+ expect(customModel?.provider).toBe("openai");
151
158
  expect(customModel?.roles).toEqual([]);
152
- expect(customModel?.thinking).toBe(false);
159
+ expect(customModel?.capabilities).toEqual([]);
153
160
  });
154
161
 
155
162
  it("should filter models based on displayed models", () => {
@@ -309,7 +316,10 @@ describe("AiModelRegistry", () => {
309
316
 
310
317
  expect(multiModelInOpenai).toBeDefined();
311
318
  expect(multiModelInAnthropic).toBeDefined();
312
- expect(multiModelInOpenai).toEqual(multiModelInAnthropic);
319
+ // Same model id, but each entry belongs to its own provider.
320
+ expect(multiModelInOpenai?.provider).toBe("openai");
321
+ expect(multiModelInAnthropic?.provider).toBe("anthropic");
322
+ expect(multiModelInOpenai?.name).toBe(multiModelInAnthropic?.name);
313
323
  });
314
324
 
315
325
  it("should handle displayed models filter with non-existent models", () => {
@@ -339,20 +349,20 @@ describe("AiModelRegistry", () => {
339
349
  expect(model).toHaveProperty("name");
340
350
  expect(model).toHaveProperty("model");
341
351
  expect(model).toHaveProperty("description");
342
- expect(model).toHaveProperty("providers");
352
+ expect(model).toHaveProperty("provider");
343
353
  expect(model).toHaveProperty("roles");
344
- expect(model).toHaveProperty("thinking");
354
+ expect(model).toHaveProperty("capabilities");
345
355
  expect(model).toHaveProperty("custom");
346
356
 
347
357
  expect(typeof model.name).toBe("string");
348
358
  expect(typeof model.model).toBe("string");
349
359
  expect(typeof model.description).toBe("string");
350
- expect(Array.isArray(model.providers)).toBe(true);
360
+ expect(typeof model.provider).toBe("string");
351
361
  expect(Array.isArray(model.roles)).toBe(true);
352
- expect(typeof model.thinking).toBe("boolean");
362
+ expect(Array.isArray(model.capabilities)).toBe(true);
353
363
  expect(typeof model.custom).toBe("boolean");
354
364
 
355
- expect(model.providers).toContain(provider);
365
+ expect(model.provider).toBe(provider);
356
366
  }
357
367
  }
358
368
  });
@@ -367,31 +377,33 @@ describe("AiModelRegistry", () => {
367
377
 
368
378
  expect(customModel).toMatchInlineSnapshot(`
369
379
  {
380
+ "capabilities": [],
370
381
  "custom": true,
371
382
  "description": "Custom model",
383
+ "input_types": [],
372
384
  "model": "custom-gpt",
373
385
  "name": "custom-gpt",
374
- "providers": [
375
- "openai",
376
- ],
386
+ "output_types": [],
387
+ "provider": "openai",
388
+ "release_date": "1970-01-01",
377
389
  "roles": [],
378
- "thinking": false,
379
390
  }
380
391
  `);
381
392
  expect(defaultModel).toMatchInlineSnapshot(`
382
393
  {
394
+ "capabilities": [],
383
395
  "custom": false,
384
396
  "description": "OpenAI GPT-4 model",
397
+ "input_types": [],
385
398
  "model": "gpt-4",
386
399
  "name": "GPT-4",
387
- "providers": [
388
- "openai",
389
- ],
400
+ "output_types": [],
401
+ "provider": "openai",
402
+ "release_date": "1970-01-01",
390
403
  "roles": [
391
404
  "chat",
392
405
  "edit",
393
406
  ],
394
- "thinking": false,
395
407
  }
396
408
  `);
397
409
  });