@marimo-team/frontend 0.19.8-dev9 → 0.19.9-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 (650) hide show
  1. package/dist/assets/{CellStatus-DbwQRhK0.js → CellStatus-CZlcjSUO.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-B098edeX.js → ConnectedDataExplorerComponent-HbY4uSsv.js} +1 -1
  3. package/dist/assets/Deferred-DxQeE5uh.js +1 -0
  4. package/dist/assets/{DeferredRequestRegistry-tv0PqJZ0.js → DeferredRequestRegistry-CMf25YiV.js} +1 -1
  5. package/dist/assets/{ImperativeModal-DZr52ffu.js → ImperativeModal-BNN1HA7x.js} +1 -1
  6. package/dist/assets/{JsonOutput-BTXiwFjF.js → JsonOutput-PE5ko4gi.js} +11 -11
  7. package/dist/assets/LazyAnyLanguageCodeMirror-DgZ8iknE.js +2 -0
  8. package/dist/assets/MarimoErrorOutput-Lf9P8Fhl.js +7 -0
  9. package/dist/assets/{RenderHTML-hMZtS42w.js → RenderHTML-D-of_-s7.js} +1 -1
  10. package/dist/assets/__vite-browser-external-DT1nudb6.js +1 -0
  11. package/dist/assets/add-cell-with-ai-e_HMl7UU.js +90 -0
  12. package/dist/assets/{add-database-form-CUZKNC1e.js → add-database-form-DvnhmpaG.js} +3 -3
  13. package/dist/assets/agent-panel-bOQya9ER.js +287 -0
  14. package/dist/assets/{ai-model-dropdown-C_Fhvna-.js → ai-model-dropdown-Dk2SdB3C.js} +4 -4
  15. package/dist/assets/{alert-dialog-Ctz24SMn.js → alert-dialog-BW4srmS0.js} +1 -1
  16. package/dist/assets/{any-language-editor-B1WBkbF4.js → any-language-editor-BODEG_5g.js} +1 -1
  17. package/dist/assets/apl-CaYjM5u2.js +1 -0
  18. package/dist/assets/{app-config-button-BqV8GA-q.js → app-config-button-DMsJtN9b.js} +1 -1
  19. package/dist/assets/{arc-xh3ZebK_.js → arc-D1owqr0z.js} +1 -1
  20. package/dist/assets/{architecture-U656AL7Q-DQB1ihe9.js → architecture-U656AL7Q-DENTsr7c.js} +1 -1
  21. package/dist/assets/{architectureDiagram-VXUJARFQ-BsTgqTsh.js → architectureDiagram-VXUJARFQ-CDeVogFv.js} +1 -1
  22. package/dist/assets/asciiarmor-D2cJUKTq.js +1 -0
  23. package/dist/assets/asn1-CZDBKivQ.js +1 -0
  24. package/dist/assets/blob-D-eV0cU3.js +1 -0
  25. package/dist/assets/{blockDiagram-VD42YOAC-CeZonq9z.js → blockDiagram-VD42YOAC-Bol-uwBO.js} +1 -1
  26. package/dist/assets/bot-message-square-B2ThzDUZ.js +1 -0
  27. package/dist/assets/brainfuck-D5O26WTe.js +1 -0
  28. package/dist/assets/{c4Diagram-YG6GDRKO-CDPGRzUd.js → c4Diagram-YG6GDRKO-C-eNQ40H.js} +1 -1
  29. package/dist/assets/{cache-panel-gTIhwBeU.js → cache-panel-D07YsKqa.js} +1 -1
  30. package/dist/assets/cell-editor-BW4w46wt.js +23 -0
  31. package/dist/assets/cell-link-B9b7J8QK.js +1 -0
  32. package/dist/assets/{cells-DdLMh4kY.js → cells-DPp5cDaO.js} +49 -49
  33. package/dist/assets/channel-CdzZX-OR.js +1 -0
  34. package/dist/assets/chat-display--jAB7huF.js +1 -0
  35. package/dist/assets/chat-panel-DzMwk8Wu.js +3 -0
  36. package/dist/assets/{chunk-4BX2VUAB-BP-RGZn9.js → chunk-4BX2VUAB-KawmK-5L.js} +1 -1
  37. package/dist/assets/chunk-55IACEB6-njZIr50E.js +1 -0
  38. package/dist/assets/{chunk-5FQGJX7Z-CwvgJCug.js → chunk-5FQGJX7Z-DPlx2kjA.js} +3 -3
  39. package/dist/assets/{chunk-ABZYJK2D-CtRGq-db.js → chunk-ABZYJK2D-0jga8uiE.js} +1 -1
  40. package/dist/assets/{chunk-ATLVNIR6-CXEe2jMF.js → chunk-ATLVNIR6-B17dg7Ry.js} +1 -1
  41. package/dist/assets/{chunk-B4BG7PRW-BVqt-NSK.js → chunk-B4BG7PRW-DoVbcCDm.js} +1 -1
  42. package/dist/assets/{chunk-CVBHYZKI-Brsoob-W.js → chunk-CVBHYZKI-DU48rJVu.js} +1 -1
  43. package/dist/assets/{chunk-DI55MBZ5-C_mlVJmb.js → chunk-DI55MBZ5-rLpl7joX.js} +1 -1
  44. package/dist/assets/{chunk-EXTU4WIE-CN3BqsR0.js → chunk-EXTU4WIE-Dmu97ZvI.js} +1 -1
  45. package/dist/assets/{chunk-FMBD7UC4-kejklSRQ.js → chunk-FMBD7UC4-CHJv683r.js} +1 -1
  46. package/dist/assets/{chunk-HN2XXSSU-BBxJMYrA.js → chunk-HN2XXSSU-Bdbi3Mns.js} +1 -1
  47. package/dist/assets/{chunk-JA3XYJ7Z-B5-JYmoA.js → chunk-JA3XYJ7Z-DOm8KfKa.js} +1 -1
  48. package/dist/assets/{chunk-JZLCHNYA-UFlatyc1.js → chunk-JZLCHNYA-48QVgmR4.js} +1 -1
  49. package/dist/assets/{chunk-MI3HLSF2-D6we5Ftb.js → chunk-MI3HLSF2-n3vxgSbN.js} +1 -1
  50. package/dist/assets/{chunk-N4CR4FBY-BFF_Z7sG.js → chunk-N4CR4FBY-BNoQB557.js} +2 -2
  51. package/dist/assets/{chunk-QN33PNHL-DOgXIePg.js → chunk-QN33PNHL-BOQncxfy.js} +1 -1
  52. package/dist/assets/{chunk-QXUST7PY-CbBaWlhv.js → chunk-QXUST7PY-DkCIa8tJ.js} +1 -1
  53. package/dist/assets/{chunk-QZHKN3VN-DCq7JxLD.js → chunk-QZHKN3VN-Cp_TxrNJ.js} +1 -1
  54. package/dist/assets/{chunk-S3R3BYOJ-CM-pQ0EF.js → chunk-S3R3BYOJ-8loRaCFh.js} +1 -1
  55. package/dist/assets/{chunk-TZMSLE5B-Bs5ERkTF.js → chunk-TZMSLE5B-CPHBPwrM.js} +1 -1
  56. package/dist/assets/classDiagram-2ON5EDUG-CUlU7OLD.js +1 -0
  57. package/dist/assets/classDiagram-v2-WZHVMYZB-DAwrDtTO.js +1 -0
  58. package/dist/assets/{clike-wo4CVrJj.js → clike-TwxwxEw_.js} +1 -1
  59. package/dist/assets/clojure-B8dfjAV6.js +1 -0
  60. package/dist/assets/cmake-D3vlGJdL.js +1 -0
  61. package/dist/assets/cobol-S-4I_F1W.js +1 -0
  62. package/dist/assets/{code-block-37QAKDTI-CT7W9knZ.js → code-block-37QAKDTI-DnnrjIZy.js} +1 -1
  63. package/dist/assets/coffeescript-DG-Oj54u.js +1 -0
  64. package/dist/assets/{column-preview-t0CyBVJf.js → column-preview-CXjSXUhP.js} +1 -1
  65. package/dist/assets/{command-cs3Dd1TU.js → command-2ElA5IkO.js} +1 -1
  66. package/dist/assets/{command-palette-DJg1FMo6.js → command-palette-DrD2qhGV.js} +1 -1
  67. package/dist/assets/{common-VAE3DrnP.js → common-DSlhalAu.js} +1 -1
  68. package/dist/assets/commonlisp-CWlOS49U.js +1 -0
  69. package/dist/assets/{config-D2-Bw6QC.js → config-Q0O7_stz.js} +1 -1
  70. package/dist/assets/{context-Ga_vV5mE.js → context-BfYAMNLF.js} +1 -1
  71. package/dist/assets/{copy-icon-B9w72gBC.js → copy-icon-v8ME_JKB.js} +1 -1
  72. package/dist/assets/{cose-bilkent-S5V4N54A-vYRNxW8r.js → cose-bilkent-S5V4N54A-tFAvjCRW.js} +1 -1
  73. package/dist/assets/crystal-CD-LQ3E-.js +1 -0
  74. package/dist/assets/{css-BJsW3aHa.js → css-sdrF9ahV.js} +1 -1
  75. package/dist/assets/cypher-oiVTIRlU.js +1 -0
  76. package/dist/assets/d-KaoGirPa.js +1 -0
  77. package/dist/assets/{dagre-6UL2VRFP-UK8bracd.js → dagre-6UL2VRFP-DOB6anec.js} +1 -1
  78. package/dist/assets/{data-grid-overlay-editor-2vr_zUfM.js → data-grid-overlay-editor-D8lE4fym.js} +1 -1
  79. package/dist/assets/{datasource-BBMMxrje.js → datasource-CtyqtITR.js} +2 -2
  80. package/dist/assets/{dates-CT5PUuFo.js → dates-CrvjILe3.js} +1 -1
  81. package/dist/assets/{dependency-graph-panel-D16tZkyM.js → dependency-graph-panel-Cbke_QgZ.js} +4 -4
  82. package/dist/assets/{diagram-PSM6KHXK-7QiPU-26.js → diagram-PSM6KHXK-DpuCiAS7.js} +1 -1
  83. package/dist/assets/{diagram-QEK2KX5R-BbZsWUC4.js → diagram-QEK2KX5R-IlkvvuKX.js} +1 -1
  84. package/dist/assets/{diagram-S2PKOQOG-SZ-twU4B.js → diagram-S2PKOQOG-DJt_T1Gq.js} +1 -1
  85. package/dist/assets/{dialog-tQELcltn.js → dialog-eb-NieZw.js} +1 -1
  86. package/dist/assets/diff-Df1QxxZl.js +1 -0
  87. package/dist/assets/dist-4mAhUzty.js +1 -0
  88. package/dist/assets/dist-5CXgzdUa.js +1 -0
  89. package/dist/assets/{dist-DGPkGdD2.js → dist-8kKeYgOg.js} +1 -1
  90. package/dist/assets/dist-B27MCO52.js +1 -0
  91. package/dist/assets/{dist-SpkGM8op.js → dist-BXnpRw3d.js} +1 -1
  92. package/dist/assets/dist-Bc7uxGRW.js +1 -0
  93. package/dist/assets/{dist-BSxIk2Vq.js → dist-BtJZmWkg.js} +1 -1
  94. package/dist/assets/{dist-TiFCI16_.js → dist-Btv5Rh1v.js} +1 -1
  95. package/dist/assets/{dist-BwcKpTZt.js → dist-ByjGU_ag.js} +1 -1
  96. package/dist/assets/{dist-2qScxWoK.js → dist-C-V6lvxH.js} +1 -1
  97. package/dist/assets/dist-C6SivM7z.js +1 -0
  98. package/dist/assets/dist-C9k2RMmO.js +1 -0
  99. package/dist/assets/{dist-C0QU3Oay.js → dist-CEEqzIVj.js} +1 -1
  100. package/dist/assets/{dist-BtUqLXS9.js → dist-CEaOyZOW.js} +1 -1
  101. package/dist/assets/{dist-BcotcL0h.js → dist-CLc5WXWw.js} +1 -1
  102. package/dist/assets/{dist-B1CD4nG7.js → dist-CRjEDsfC.js} +1 -1
  103. package/dist/assets/{dist-DstaRs6N.js → dist-CsRJPnA9.js} +1 -1
  104. package/dist/assets/dist-Cx8mOJOB.js +1 -0
  105. package/dist/assets/{dist-CNknMFYG.js → dist-DLgWirXg.js} +1 -1
  106. package/dist/assets/{dist-B407S7D_.js → dist-DOZ8nmkC.js} +1 -1
  107. package/dist/assets/{dist-h7FGpi6W.js → dist-DUlOLsKi.js} +1 -1
  108. package/dist/assets/{dist-GCDTTvNx.js → dist-Dv0MupEh.js} +1 -1
  109. package/dist/assets/{dist-DDGMbl6p.js → dist-DwV58Fb1.js} +1 -1
  110. package/dist/assets/{dist-Cip4Ndtd.js → dist-OlCHPNfN.js} +1 -1
  111. package/dist/assets/{dist-Cayq-K1c.js → dist-bBwmhqty.js} +1 -1
  112. package/dist/assets/dist-fO1a06Tp.js +1 -0
  113. package/dist/assets/dist-iXB2pOUD.js +1 -0
  114. package/dist/assets/dist-lTwzYaMX.js +1 -0
  115. package/dist/assets/{dist-DXT0W0hS.js → dist-wS1s8MYb.js} +1 -1
  116. package/dist/assets/{dockerfile-BPCA7-hu.js → dockerfile-BmwSYxi2.js} +1 -1
  117. package/dist/assets/{documentation-panel-0BCnCatP.js → documentation-panel-BDQNa1xE.js} +1 -1
  118. package/dist/assets/{download-BodpSpiQ.js → download-os8QlW6l.js} +1 -1
  119. package/dist/assets/{dropdown-menu-BUgFWmX1.js → dropdown-menu-ldcmQvIV.js} +1 -1
  120. package/dist/assets/dtd-Aj5m459l.js +1 -0
  121. package/dist/assets/dylan-CdSB1nh8.js +1 -0
  122. package/dist/assets/ecl-CvwsCfi6.js +1 -0
  123. package/dist/assets/{edit-page-1kpZH_Tj.js → edit-page-BpIuEeU6.js} +7 -7
  124. package/dist/assets/eiffel-Bws25dAs.js +1 -0
  125. package/dist/assets/elm--WkcLZ1a.js +1 -0
  126. package/dist/assets/{erDiagram-Q2GNP2WA-BSmVh3Kt.js → erDiagram-Q2GNP2WA-CekwCx1v.js} +1 -1
  127. package/dist/assets/erlang-Ct30wW1o.js +1 -0
  128. package/dist/assets/{error-banner-Dlrzo_Ay.js → error-banner-B9ts0mNl.js} +1 -1
  129. package/dist/assets/{error-panel-D7CVHSby.js → error-panel-B_234Lt3.js} +1 -1
  130. package/dist/assets/{es-CerBf9Z6.js → es-BYgU_srD.js} +1 -1
  131. package/dist/assets/{esm-BmQh-C2G.js → esm-D82gQH1f.js} +1 -1
  132. package/dist/assets/{factor-Ccw_GUUV.js → factor-B3fhZG6W.js} +1 -1
  133. package/dist/assets/factor-DbSpQa-0.js +1 -0
  134. package/dist/assets/{field-D9jE8HEt.js → field-CySaBlkz.js} +1 -1
  135. package/dist/assets/{file-explorer-panel-d9LDZt_k.js → file-explorer-panel-T3oL7Bzx.js} +1 -1
  136. package/dist/assets/{floating-outline-C8UBGhNL.js → floating-outline-BtdqbkUq.js} +1 -1
  137. package/dist/assets/{flowDiagram-NV44I4VS-2nYUYKvI.js → flowDiagram-NV44I4VS-BhCyaqwV.js} +1 -1
  138. package/dist/assets/{focus-Bd_p77qK.js → focus-C1YokgL7.js} +1 -1
  139. package/dist/assets/{form-D23zs2fF.js → form-BidPUZUn.js} +2 -2
  140. package/dist/assets/forth-BP0pXyoR.js +1 -0
  141. package/dist/assets/fortran-DpX_2iww.js +1 -0
  142. package/dist/assets/gallery-page-D5ulMArd.js +1 -0
  143. package/dist/assets/{ganttDiagram-JELNMOA3-B77PnMPw.js → ganttDiagram-JELNMOA3-Ct2B_ci4.js} +1 -1
  144. package/dist/assets/gas-CiUR6fHB.js +1 -0
  145. package/dist/assets/gherkin-C9v48C48.js +1 -0
  146. package/dist/assets/{gitGraph-F6HP7TQM-ULnyMCh9.js → gitGraph-F6HP7TQM-BwJPuiCH.js} +1 -1
  147. package/dist/assets/{gitGraphDiagram-NY62KEGX-B-3aRelz.js → gitGraphDiagram-NY62KEGX-DOBPUqeq.js} +1 -1
  148. package/dist/assets/{glide-data-editor-B5UMCoFz.js → glide-data-editor-D1ZoJKPr.js} +4 -4
  149. package/dist/assets/{globals-BgJBhxFI.js → globals-BgACvYmr.js} +1 -1
  150. package/dist/assets/groovy-psUnKwK-.js +1 -0
  151. package/dist/assets/haskell-DZHQAKUV.js +1 -0
  152. package/dist/assets/haxe-AOvPCF-w.js +1 -0
  153. package/dist/assets/{home-page-DXMa3CyZ.js → home-page-DUMF8ZY4.js} +1 -1
  154. package/dist/assets/{hooks-jQB62wos.js → hooks-BGeojgid.js} +1 -1
  155. package/dist/assets/{html-to-image-Bc6qDa9c.js → html-to-image-CIQqSu-S.js} +1 -1
  156. package/dist/assets/idl-CSA8C1ck.js +1 -0
  157. package/dist/assets/index-CeUwN_0i.css +2 -0
  158. package/dist/assets/{index-BL9e2vk6.js → index-DFrkvKWf.js} +21 -21
  159. package/dist/assets/{info-NVLQJR56-gsco60Pt.js → info-NVLQJR56-Ccg18Lpe.js} +1 -1
  160. package/dist/assets/infoDiagram-WHAUD3N6-Cytag0-K.js +2 -0
  161. package/dist/assets/{input-DHHmNa19.js → input-DUrq2DiR.js} +1 -1
  162. package/dist/assets/javascript-XMYUq5-t.js +1 -0
  163. package/dist/assets/{journeyDiagram-XKPGCS4Q-CkD6eopP.js → journeyDiagram-XKPGCS4Q-CPDnALH5.js} +1 -1
  164. package/dist/assets/julia-oON8zLDW.js +1 -0
  165. package/dist/assets/{kanban-definition-3W4ZIXB7-kX5aL9Ug.js → kanban-definition-3W4ZIXB7-D0-Tthpw.js} +1 -1
  166. package/dist/assets/{kiosk-mode-BlAqMmYG.js → kiosk-mode-WmM7aFkh.js} +1 -1
  167. package/dist/assets/{layout-BztBqV-1.js → layout-_O8thjaV.js} +4 -4
  168. package/dist/assets/{line-VKarCWVL.js → line-BA7eTS55.js} +1 -1
  169. package/dist/assets/{linear-BxhToEEF.js → linear-BWciPXnd.js} +1 -1
  170. package/dist/assets/links-DWIqY1l5.js +1 -0
  171. package/dist/assets/livescript--BxQO5G_.js +1 -0
  172. package/dist/assets/{logs-panel-B3aMPrwV.js → logs-panel-C3cavnFO.js} +1 -1
  173. package/dist/assets/{loro_wasm_bg-aCueZs8k.js → loro_wasm_bg-C3Vl7VMX.js} +1 -1
  174. package/dist/assets/lua-CUyaVUOv.js +1 -0
  175. package/dist/assets/markdown-renderer-DJy8ww5d.js +10 -0
  176. package/dist/assets/mathematica-ONd8izyd.js +1 -0
  177. package/dist/assets/mbox-kjl3g9N-.js +1 -0
  178. package/dist/assets/{menu-items-vwmjPhjW.js → menu-items-BMjcEb2j.js} +1 -1
  179. package/dist/assets/mermaid-4DMBBIKO-DyygmIT8.js +1 -0
  180. package/dist/assets/{mermaid-parser.core-D237JwYN.js → mermaid-parser.core-BLHYb13y.js} +2 -2
  181. package/dist/assets/{mermaid-Caj4ROsO.js → mermaid-y-IBDpJK.js} +3 -3
  182. package/dist/assets/{mindmap-definition-VGOIOE7T-BJ9zWUqW.js → mindmap-definition-VGOIOE7T-BflEJS3A.js} +1 -1
  183. package/dist/assets/mirc-BZ6TyuOO.js +1 -0
  184. package/dist/assets/mllike-Dxt2U6MQ.js +1 -0
  185. package/dist/assets/{mode-BfhhQnCm.js → mode-Bn7pdJvO.js} +1 -1
  186. package/dist/assets/modelica-B9sdhdtj.js +1 -0
  187. package/dist/assets/mscgen-5e5Z5trn.js +1 -0
  188. package/dist/assets/{multi-map-t2yhdp8D.js → multi-map-DxdLNTBd.js} +1 -1
  189. package/dist/assets/mumps-BUfWDrRe.js +1 -0
  190. package/dist/assets/{name-cell-input-DvFZv__e.js → name-cell-input-Bc7geMVf.js} +1 -1
  191. package/dist/assets/nsis-Dq7T79DJ.js +1 -0
  192. package/dist/assets/{nsis-CzZqoCdu.js → nsis-QuE155sg.js} +1 -1
  193. package/dist/assets/ntriples-Dqzi7kwu.js +1 -0
  194. package/dist/assets/{number-overlay-editor-DIy8e1ST.js → number-overlay-editor-Dylprn80.js} +1 -1
  195. package/dist/assets/octave-v4IgjFm5.js +1 -0
  196. package/dist/assets/{ordinal-C93T4L8H.js → ordinal-DG_POl79.js} +1 -1
  197. package/dist/assets/{outline-panel-DH2X9Yaa.js → outline-panel-Bxt_JABC.js} +1 -1
  198. package/dist/assets/oz-BtUsXhbc.js +1 -0
  199. package/dist/assets/packages-panel-yEp7rAYf.js +1 -0
  200. package/dist/assets/{packet-BFZMPI3H-CnHEXEVi.js → packet-BFZMPI3H-C_EwQwCX.js} +1 -1
  201. package/dist/assets/panels-IsIZwIow.js +1 -0
  202. package/dist/assets/pascal-DV7k6vJ0.js +1 -0
  203. package/dist/assets/perl-Bz7YaP_R.js +1 -0
  204. package/dist/assets/{pie-7BOR55EZ-C5Sp4r8f.js → pie-7BOR55EZ-B2NFlNeo.js} +1 -1
  205. package/dist/assets/{pieDiagram-ADFJNKIX-Mf2FMnt9.js → pieDiagram-ADFJNKIX-DXRnX2TS.js} +1 -1
  206. package/dist/assets/pig-BQWmcOEQ.js +1 -0
  207. package/dist/assets/{popover-B-131r4d.js → popover-CH1FzjxU.js} +1 -1
  208. package/dist/assets/powershell-CmIFs71i.js +1 -0
  209. package/dist/assets/{process-output-CHXcfo-X.js → process-output-ByfLnk6j.js} +1 -1
  210. package/dist/assets/properties-D7F2Eomu.js +1 -0
  211. package/dist/assets/protobuf-BMELuvny.js +1 -0
  212. package/dist/assets/pug-C2KbP_v3.js +1 -0
  213. package/dist/assets/{pug-BqLMXh-D.js → pug-NA-6TsNe.js} +1 -1
  214. package/dist/assets/puppet-C7MviiPj.js +1 -0
  215. package/dist/assets/python-BUl8uFIl.js +1 -0
  216. package/dist/assets/q-B5bIbNKB.js +1 -0
  217. package/dist/assets/{quadrantDiagram-AYHSOK5B-B04U71uV.js → quadrantDiagram-AYHSOK5B-e3OVACTV.js} +1 -1
  218. package/dist/assets/r-B0lU_x8o.js +1 -0
  219. package/dist/assets/{radar-NHE76QYJ-DAElyE_r.js → radar-NHE76QYJ-C3XGuwbG.js} +1 -1
  220. package/dist/assets/{react-vega-CqegDZRQ.js → react-vega-BL1HBBjq.js} +1 -1
  221. package/dist/assets/{react-vega-CP7NqbRQ.js → react-vega-gERE3HQc.js} +1 -1
  222. package/dist/assets/readonly-python-code-WjTf6Pdd.js +1 -0
  223. package/dist/assets/{renderShortcut-B1jzzLJw.js → renderShortcut-BckyRbYt.js} +1 -1
  224. package/dist/assets/{request-registry-BWqkV683.js → request-registry-C5_pVc8Y.js} +1 -1
  225. package/dist/assets/{requirementDiagram-UZGBJVZJ-oJlPs172.js → requirementDiagram-UZGBJVZJ-DMbzgjKI.js} +1 -1
  226. package/dist/assets/rpm-BqQ3VFpY.js +1 -0
  227. package/dist/assets/ruby-AFh8QoqR.js +1 -0
  228. package/dist/assets/run-page-_7E2SCeQ.js +1 -0
  229. package/dist/assets/{sankeyDiagram-TZEHDZUN-aplEbaHE.js → sankeyDiagram-TZEHDZUN-B90PTMUW.js} +1 -1
  230. package/dist/assets/sas-CeRTI9sn.js +1 -0
  231. package/dist/assets/scheme-D0VcE_o1.js +1 -0
  232. package/dist/assets/{scratchpad-panel-BFFeceHa.js → scratchpad-panel-C6thsU6k.js} +1 -1
  233. package/dist/assets/{secrets-panel-vKKBtc8G.js → secrets-panel-Db_JucCn.js} +1 -1
  234. package/dist/assets/{select-B7bfltkI.js → select-BVdzZKAh.js} +1 -1
  235. package/dist/assets/{sequenceDiagram-WL72ISMW-WAUwGkkd.js → sequenceDiagram-WL72ISMW-DKFGl_80.js} +1 -1
  236. package/dist/assets/{session-panel-IeLEqwsB.js → session-panel-3zs_-lnF.js} +1 -1
  237. package/dist/assets/{share-rXkgGlhr.js → share-ipf2hrOh.js} +1 -1
  238. package/dist/assets/shell-BBh9RTgS.js +1 -0
  239. package/dist/assets/sieve-BSX0MHaT.js +1 -0
  240. package/dist/assets/smalltalk-PvrpLgKW.js +1 -0
  241. package/dist/assets/{snippets-panel-nld0VX-j.js → snippets-panel-Bbk7MFBI.js} +1 -1
  242. package/dist/assets/sparql-CXsmb8zq.js +1 -0
  243. package/dist/assets/{house-BI81AWSn.js → square-CuJ72M8f.js} +1 -1
  244. package/dist/assets/{src-DJ8ZKoFs.js → src-CvyFXpBy.js} +1 -1
  245. package/dist/assets/{state-DAl4qLSi.js → state-BrMfOLl1.js} +1 -1
  246. package/dist/assets/{state-yRkQ_uSW.js → state-D4T75eZb.js} +1 -1
  247. package/dist/assets/{stateDiagram-FKZM4ZOC-DUDhr_Gg.js → stateDiagram-FKZM4ZOC-Czf6mxbq.js} +1 -1
  248. package/dist/assets/stateDiagram-v2-4FDKWEC3-DT577w6p.js +1 -0
  249. package/dist/assets/{step-DGkZosD0.js → step-CVy5FnKg.js} +1 -1
  250. package/dist/assets/stex-Dn4qnyVB.js +1 -0
  251. package/dist/assets/stylus-B60bUBy2.js +1 -0
  252. package/dist/assets/swift-BwnHGvoR.js +1 -0
  253. package/dist/assets/{switch-D-TxHKpg.js → switch-dWLWbbtg.js} +1 -1
  254. package/dist/assets/tcl-Bj8phnhq.js +1 -0
  255. package/dist/assets/{terminal-CF-esPMT.js → terminal-CjhjkmtR.js} +1 -1
  256. package/dist/assets/{textarea-BFfMAEaQ.js → textarea-CRI7xDBj.js} +1 -1
  257. package/dist/assets/textile-WPCmEeGb.js +1 -0
  258. package/dist/assets/{time-EL4bnqqQ.js → time-DkuObi5n.js} +1 -1
  259. package/dist/assets/{timeline-definition-IT6M3QCI-D93LYpWp.js → timeline-definition-IT6M3QCI-Cr57imdX.js} +1 -1
  260. package/dist/assets/{toggle-CriARMQK.js → toggle-zVW4FXNz.js} +1 -1
  261. package/dist/assets/toml-Cdfp0vaG.js +1 -0
  262. package/dist/assets/{tooltip-C_WgOOcZ.js → tooltip-CMQz28hC.js} +1 -1
  263. package/dist/assets/{tracing-DB7ckaG0.js → tracing-U3RlLbPJ.js} +1 -1
  264. package/dist/assets/tracing-panel-D6GhZuLA.js +2 -0
  265. package/dist/assets/{tree-B8r7cwRm.js → tree-B--q0-tu.js} +1 -1
  266. package/dist/assets/{treemap-KMMF4GRG-Bf9yeA5X.js → treemap-KMMF4GRG-CQXdJ2ER.js} +1 -1
  267. package/dist/assets/troff-D4suUzlg.js +1 -0
  268. package/dist/assets/ttcn-CvD_6RGm.js +1 -0
  269. package/dist/assets/ttcn-cfg-BX59kgnW.js +1 -0
  270. package/dist/assets/turtle-midFOTTV.js +1 -0
  271. package/dist/assets/{types-D-xsoOE8.js → types-BRfQN3HL.js} +1 -1
  272. package/dist/assets/{useAddCell-Bc2_jloT.js → useAddCell-CmuX2hOk.js} +1 -1
  273. package/dist/assets/{useBoolean-IZsSX_XF.js → useBoolean-Ck_unDZw.js} +1 -1
  274. package/dist/assets/useCellActionButton-DUDHPTmq.js +1 -0
  275. package/dist/assets/{useDateFormatter-CieT0-H-.js → useDateFormatter-CqhdUl2n.js} +1 -1
  276. package/dist/assets/{useDeleteCell-6jBNYEDG.js → useDeleteCell-DdRX94yC.js} +1 -1
  277. package/dist/assets/{useDependencyPanelTab-Dq7NTXk8.js → useDependencyPanelTab-CeDmKn0Z.js} +1 -1
  278. package/dist/assets/{useInstallPackage-xrG_Tm9T.js → useInstallPackage-D4fX0Ee_.js} +1 -1
  279. package/dist/assets/useNotebookActions-BFGSBiOA.js +1 -0
  280. package/dist/assets/{useNumberFormatter-BX4DTYtT.js → useNumberFormatter-Db6Vjve5.js} +1 -1
  281. package/dist/assets/{usePress-3CRs0fQg.js → usePress-C__vuri5.js} +1 -1
  282. package/dist/assets/useRunCells-D2HBb4DB.js +1 -0
  283. package/dist/assets/{useSplitCell-DE71CDKv.js → useSplitCell-C4khe6eU.js} +1 -1
  284. package/dist/assets/utilities.esm-MA1QpjVT.js +3 -0
  285. package/dist/assets/vb-CSNH0UHQ.js +1 -0
  286. package/dist/assets/vbscript-DTgXfl5y.js +1 -0
  287. package/dist/assets/{vega-component-D4ZTpyiq.js → vega-component-D4L27L4Y.js} +1 -1
  288. package/dist/assets/velocity-CKgzALh9.js +1 -0
  289. package/dist/assets/verilog-NDqaS3bW.js +1 -0
  290. package/dist/assets/vhdl-BibQgFNM.js +1 -0
  291. package/dist/assets/webidl-BjqVurO-.js +1 -0
  292. package/dist/assets/worker-BPV9SmHz.js +120 -0
  293. package/dist/assets/{write-secret-modal-BodBOJkR.js → write-secret-modal-1fGKmd5H.js} +1 -1
  294. package/dist/assets/xquery-DQLXMdMd.js +1 -0
  295. package/dist/assets/{xychartDiagram-PRI3JC2R-C8jV7uCC.js → xychartDiagram-PRI3JC2R-DtYN6-1-.js} +1 -1
  296. package/dist/assets/yacas-DlkZlCdY.js +1 -0
  297. package/dist/assets/z80-YKwwCjvZ.js +1 -0
  298. package/dist/index.html +94 -95
  299. package/package.json +2 -2
  300. package/src/components/app-config/ai-config.tsx +11 -2
  301. package/src/components/app-config/optional-features.tsx +1 -1
  302. package/src/components/app-config/user-config-form.tsx +0 -54
  303. package/src/components/chat/__tests__/useFileState.test.tsx +93 -0
  304. package/src/components/chat/acp/__tests__/state.test.ts +69 -0
  305. package/src/components/chat/acp/agent-panel.tsx +26 -77
  306. package/src/components/chat/acp/state.ts +6 -6
  307. package/src/components/chat/chat-components.tsx +114 -1
  308. package/src/components/chat/chat-panel.tsx +79 -134
  309. package/src/components/chat/chat-utils.ts +42 -0
  310. package/src/components/editor/actions/useCellActionButton.tsx +14 -1
  311. package/src/components/editor/ai/add-cell-with-ai.tsx +85 -53
  312. package/src/components/editor/ai/ai-completion-editor.tsx +15 -38
  313. package/src/components/editor/cell/CreateCellButton.tsx +2 -1
  314. package/src/components/editor/cell/code/cell-editor.tsx +12 -0
  315. package/src/components/editor/chrome/panels/packages-panel.tsx +12 -9
  316. package/src/components/editor/database/__tests__/__snapshots__/as-code.test.ts.snap +15 -0
  317. package/src/components/editor/database/__tests__/as-code.test.ts +8 -0
  318. package/src/components/editor/database/as-code.ts +3 -0
  319. package/src/components/editor/database/schemas.ts +9 -0
  320. package/src/components/editor/renderers/cell-array.tsx +2 -1
  321. package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +12 -0
  322. package/src/components/pages/gallery-page.tsx +37 -6
  323. package/src/core/ai/context/providers/file.ts +1 -1
  324. package/src/core/cells/__tests__/cells.test.ts +120 -0
  325. package/src/core/cells/__tests__/session.test.ts +37 -1
  326. package/src/core/cells/cells.ts +14 -0
  327. package/src/core/cells/session.ts +20 -8
  328. package/src/core/codemirror/language/languages/markdown.ts +7 -0
  329. package/src/core/config/feature-flag.tsx +0 -4
  330. package/src/core/dom/uiregistry.ts +4 -1
  331. package/src/core/islands/__tests__/bridge.test.ts +7 -2
  332. package/src/core/islands/bridge.ts +1 -1
  333. package/src/core/islands/main.ts +7 -0
  334. package/src/core/network/types.ts +2 -2
  335. package/src/core/run-app.tsx +11 -4
  336. package/src/core/static/__tests__/files.test.ts +195 -1
  337. package/src/core/static/files.ts +39 -9
  338. package/src/core/wasm/bridge.ts +1 -1
  339. package/src/core/websocket/useMarimoKernelConnection.tsx +5 -15
  340. package/src/plugins/impl/anywidget/AnyWidgetPlugin.tsx +93 -168
  341. package/src/plugins/impl/anywidget/__tests__/AnyWidgetPlugin.test.tsx +37 -123
  342. package/src/plugins/impl/anywidget/__tests__/model.test.ts +128 -122
  343. package/src/{utils/__tests__/data-views.test.ts → plugins/impl/anywidget/__tests__/serialization.test.ts} +42 -96
  344. package/src/plugins/impl/anywidget/model.ts +348 -223
  345. package/src/plugins/impl/anywidget/schemas.ts +32 -0
  346. package/src/{utils/data-views.ts → plugins/impl/anywidget/serialization.ts} +13 -36
  347. package/src/plugins/impl/anywidget/types.ts +27 -0
  348. package/src/plugins/impl/chat/chat-ui.tsx +22 -20
  349. package/src/utils/Deferred.ts +21 -0
  350. package/src/utils/__tests__/blob.test.ts +3 -3
  351. package/src/utils/__tests__/id-tree.test.ts +22 -7
  352. package/src/utils/__tests__/url-parser.test.ts +22 -0
  353. package/src/utils/blob.ts +14 -27
  354. package/src/utils/id-tree.tsx +11 -19
  355. package/src/utils/json/base64.ts +38 -8
  356. package/src/utils/url-parser.ts +1 -1
  357. package/dist/assets/Deferred-CrO5-0RA.js +0 -1
  358. package/dist/assets/LazyAnyLanguageCodeMirror-CQP8KZWO.js +0 -2
  359. package/dist/assets/MarimoErrorOutput-lr6vqAph.js +0 -7
  360. package/dist/assets/__vite-browser-external-DBckR0WR.js +0 -1
  361. package/dist/assets/add-cell-with-ai-DdyvzMmu.js +0 -90
  362. package/dist/assets/agent-panel-CCs3ktma.js +0 -287
  363. package/dist/assets/apl-DpOiWl6J.js +0 -1
  364. package/dist/assets/asciiarmor-DVIuYySe.js +0 -1
  365. package/dist/assets/asn1-CWHjZJq6.js +0 -1
  366. package/dist/assets/blob-t6qcPM7K.js +0 -1
  367. package/dist/assets/brainfuck-CIKJewgG.js +0 -1
  368. package/dist/assets/cell-editor-COnUMHxW.js +0 -23
  369. package/dist/assets/cell-link-OwIbBa8Q.js +0 -1
  370. package/dist/assets/channel-CUmF6tDU.js +0 -1
  371. package/dist/assets/chat-components-jnrAy95o.js +0 -1
  372. package/dist/assets/chat-display-rXqWwmbx.js +0 -1
  373. package/dist/assets/chat-panel-ims98I-K.js +0 -3
  374. package/dist/assets/chunk-55IACEB6-NZRDKuqH.js +0 -1
  375. package/dist/assets/classDiagram-2ON5EDUG-DLI68D-F.js +0 -1
  376. package/dist/assets/classDiagram-v2-WZHVMYZB-yfw4NTdf.js +0 -1
  377. package/dist/assets/clojure-CTxjMkBI.js +0 -1
  378. package/dist/assets/cmake-aJ0aGjat.js +0 -1
  379. package/dist/assets/cobol-Dw9T4cw-.js +0 -1
  380. package/dist/assets/coffeescript-B5HCKl_0.js +0 -1
  381. package/dist/assets/commonlisp-C578hhl1.js +0 -1
  382. package/dist/assets/crystal-D84c1nzD.js +0 -1
  383. package/dist/assets/cypher-DBO3MHmN.js +0 -1
  384. package/dist/assets/d-KvHiAR3H.js +0 -1
  385. package/dist/assets/diff-BmUpKGx-.js +0 -1
  386. package/dist/assets/dist-1nstYXhq.js +0 -1
  387. package/dist/assets/dist-8LCoAaYJ.js +0 -1
  388. package/dist/assets/dist-B6bNYRJb.js +0 -1
  389. package/dist/assets/dist-BKMynip3.js +0 -1
  390. package/dist/assets/dist-BP1tfplb.js +0 -1
  391. package/dist/assets/dist-BuwU3nUf.js +0 -1
  392. package/dist/assets/dist-DrFRlZJz.js +0 -1
  393. package/dist/assets/dist-DzjeKTWA.js +0 -1
  394. package/dist/assets/dist-QPLTo43F.js +0 -1
  395. package/dist/assets/dist-YQMqR1ri.js +0 -1
  396. package/dist/assets/dtd-Dwf-AbUl.js +0 -1
  397. package/dist/assets/dylan-VHUB-7ez.js +0 -1
  398. package/dist/assets/ecl-DvGrObaA.js +0 -1
  399. package/dist/assets/eiffel-CUYga93e.js +0 -1
  400. package/dist/assets/elm-BhMhmEP6.js +0 -1
  401. package/dist/assets/erlang-D4xbdJFD.js +0 -1
  402. package/dist/assets/factor-C0grrWrC.js +0 -1
  403. package/dist/assets/forth-CSTdXn4A.js +0 -1
  404. package/dist/assets/fortran-fENQO2l9.js +0 -1
  405. package/dist/assets/gallery-page-Yq7Go5FK.js +0 -1
  406. package/dist/assets/gas-CPJMP4zj.js +0 -1
  407. package/dist/assets/gherkin-CiUmN4EE.js +0 -1
  408. package/dist/assets/groovy-DMooZA1X.js +0 -1
  409. package/dist/assets/haskell-sDlThg6u.js +0 -1
  410. package/dist/assets/haxe-Do80ITri.js +0 -1
  411. package/dist/assets/idl-DFPg6k4F.js +0 -1
  412. package/dist/assets/index-CikhHYAB.css +0 -2
  413. package/dist/assets/infoDiagram-WHAUD3N6-_vys04Gc.js +0 -2
  414. package/dist/assets/javascript-BGc4iHiT.js +0 -1
  415. package/dist/assets/julia-BHNHVraD.js +0 -1
  416. package/dist/assets/links-DgZx-VxW.js +0 -1
  417. package/dist/assets/livescript-Bv2FpOTI.js +0 -1
  418. package/dist/assets/lua-BysKHKPZ.js +0 -1
  419. package/dist/assets/markdown-renderer-Dy-FX527.js +0 -10
  420. package/dist/assets/mathematica-BBTHoTvM.js +0 -1
  421. package/dist/assets/mbox-DeT9_lvk.js +0 -1
  422. package/dist/assets/mermaid-4DMBBIKO-DQz_QvBC.js +0 -1
  423. package/dist/assets/mirc-D5fMSrXQ.js +0 -1
  424. package/dist/assets/mllike-BtxCpmpf.js +0 -1
  425. package/dist/assets/modelica-CRQcZpK6.js +0 -1
  426. package/dist/assets/mscgen-BfscU11q.js +0 -1
  427. package/dist/assets/mumps-g7ooySbl.js +0 -1
  428. package/dist/assets/nsis-BtyCmCHZ.js +0 -1
  429. package/dist/assets/ntriples-DLyxF-NO.js +0 -1
  430. package/dist/assets/octave-CFXP_zzr.js +0 -1
  431. package/dist/assets/oz-CrQbC0N_.js +0 -1
  432. package/dist/assets/packages-panel-BWx1vxzx.js +0 -1
  433. package/dist/assets/panels-vsOIbBB6.js +0 -1
  434. package/dist/assets/pascal-CCSZgYZH.js +0 -1
  435. package/dist/assets/perl-Bc1MycMl.js +0 -1
  436. package/dist/assets/pig-CDr04RdE.js +0 -1
  437. package/dist/assets/powershell-DcvrUwmh.js +0 -1
  438. package/dist/assets/properties-Y8OgFJMt.js +0 -1
  439. package/dist/assets/protobuf-Dyx-ENis.js +0 -1
  440. package/dist/assets/pug-T7qjkmFh.js +0 -1
  441. package/dist/assets/puppet-BzYSg90u.js +0 -1
  442. package/dist/assets/python-D4S7tVrv.js +0 -1
  443. package/dist/assets/q-YpqabiSl.js +0 -1
  444. package/dist/assets/r-DzpuVbmQ.js +0 -1
  445. package/dist/assets/readonly-python-code-Drm-iT2o.js +0 -1
  446. package/dist/assets/rpm-DlmAEsH3.js +0 -1
  447. package/dist/assets/ruby-BHSBK3B4.js +0 -1
  448. package/dist/assets/run-page-nX90i6hX.js +0 -1
  449. package/dist/assets/sas-DmQmrPAn.js +0 -1
  450. package/dist/assets/scheme-CZHvt0eC.js +0 -1
  451. package/dist/assets/shell-BJzvpTMz.js +0 -1
  452. package/dist/assets/sieve-DGjPhm-6.js +0 -1
  453. package/dist/assets/smalltalk-DaG60CSr.js +0 -1
  454. package/dist/assets/sparql-CN49rXKB.js +0 -1
  455. package/dist/assets/square-DPZjfUaq.js +0 -1
  456. package/dist/assets/stateDiagram-v2-4FDKWEC3-yH9Rugj-.js +0 -1
  457. package/dist/assets/stex-D6sqtveI.js +0 -1
  458. package/dist/assets/stylus-CzHZ_0CL.js +0 -1
  459. package/dist/assets/swift-5fr5bTbW.js +0 -1
  460. package/dist/assets/tcl-D5oaR_GS.js +0 -1
  461. package/dist/assets/textile-CJ5e8-7o.js +0 -1
  462. package/dist/assets/toml-D9QwsDZO.js +0 -1
  463. package/dist/assets/tracing-panel-CxTR1RYC.js +0 -2
  464. package/dist/assets/troff-DlwQJbfr.js +0 -1
  465. package/dist/assets/ttcn-DUvoO9Vo.js +0 -1
  466. package/dist/assets/ttcn-cfg-Cj-t-B3M.js +0 -1
  467. package/dist/assets/turtle-DzvxCIjc.js +0 -1
  468. package/dist/assets/useCellActionButton-DUpWwYW8.js +0 -1
  469. package/dist/assets/useNotebookActions-DRVyh52j.js +0 -1
  470. package/dist/assets/useRunCells-CmbQTUeO.js +0 -1
  471. package/dist/assets/utilities.esm-8Diy8be3.js +0 -3
  472. package/dist/assets/vb-Caf126uo.js +0 -1
  473. package/dist/assets/vbscript-BgRl-LR8.js +0 -1
  474. package/dist/assets/velocity-CpvfwasF.js +0 -1
  475. package/dist/assets/verilog-hsHogyKv.js +0 -1
  476. package/dist/assets/vhdl-FciHazR1.js +0 -1
  477. package/dist/assets/webidl-CqjZNx5V.js +0 -1
  478. package/dist/assets/worker-CyCdlLVf.js +0 -120
  479. package/dist/assets/xquery-DpTaL2IT.js +0 -1
  480. package/dist/assets/yacas-D6bbkHsk.js +0 -1
  481. package/dist/assets/z80-MlujNizn.js +0 -1
  482. /package/dist/assets/{Combination-izwufzWe.js → Combination-BAEdC-rz.js} +0 -0
  483. /package/dist/assets/{ImageComparisonComponent-BVXYpigZ.js → ImageComparisonComponent-BmIQwrIS.js} +0 -0
  484. /package/dist/assets/{Inputs-CbenuziM.js → Inputs-GV-aQbOR.js} +0 -0
  485. /package/dist/assets/{SSRProvider-DrpctNAg.js → SSRProvider-BIDQNg9Q.js} +0 -0
  486. /package/dist/assets/{apl-CpVTW0fY.js → apl-DHQPYmx2.js} +0 -0
  487. /package/dist/assets/{array-BKCdRGCR.js → array-Cf4PUXPA.js} +0 -0
  488. /package/dist/assets/{asciiarmor-qDK46YPd.js → asciiarmor-fnQAw8T8.js} +0 -0
  489. /package/dist/assets/{asn1-s2ZJql-T.js → asn1-5lb7I37s.js} +0 -0
  490. /package/dist/assets/{asterisk-Cy-53Fu-.js → asterisk-B04IJwAt.js} +0 -0
  491. /package/dist/assets/{badge-D4keL3YC.js → badge-DX6CQ6PA.js} +0 -0
  492. /package/dist/assets/{brainfuck-5fD7ZBSv.js → brainfuck-D30bRgvC.js} +0 -0
  493. /package/dist/assets/{bundle.esm-CBAPjfrh.js → bundle.esm-i_UbZC0w.js} +0 -0
  494. /package/dist/assets/{card-DdlNjkEA.js → card-OlSjYhmd.js} +0 -0
  495. /package/dist/assets/{chunk-76Q3JFCE-B261Xkae.js → chunk-76Q3JFCE-BAZ3z-Fu.js} +0 -0
  496. /package/dist/assets/{chunk-FWNWRKHM-C0b0DIG0.js → chunk-FWNWRKHM-DzIkWreD.js} +0 -0
  497. /package/dist/assets/{chunk-LBM3YZW2-D3uTpSOd.js → chunk-LBM3YZW2-BRBe7ZaP.js} +0 -0
  498. /package/dist/assets/{chunk-LHMN2FUI-2FK1AIwU.js → chunk-LHMN2FUI-C4onQD9F.js} +0 -0
  499. /package/dist/assets/{chunk-O7ZBX7Z2-DoE29Zoe.js → chunk-O7ZBX7Z2-CFqB9i7k.js} +0 -0
  500. /package/dist/assets/{chunk-S6J4BHB3-Cvr0itXK.js → chunk-S6J4BHB3-C4KwSfr_.js} +0 -0
  501. /package/dist/assets/{chunk-T53DSG4Q-C7bPrBIt.js → chunk-T53DSG4Q-Bhd043Cg.js} +0 -0
  502. /package/dist/assets/{chunk-XAJISQIX-TwS9jXHm.js → chunk-XAJISQIX-0gvwv13B.js} +0 -0
  503. /package/dist/assets/{clear-button-DI7_bdOB.js → clear-button-DMZhBF9S.js} +0 -0
  504. /package/dist/assets/{click-outside-container-Npdlddni.js → click-outside-container-BXzp0MYr.js} +0 -0
  505. /package/dist/assets/{clike-D58k-9vu.js → clike-jZeb2kFn.js} +0 -0
  506. /package/dist/assets/{clojure-Dkfjc-Fr.js → clojure-C0pkR8m2.js} +0 -0
  507. /package/dist/assets/{cmake-ffkxaUPf.js → cmake-DlvFtk_M.js} +0 -0
  508. /package/dist/assets/{cobol-CKARYRbQ.js → cobol-C_yb45mr.js} +0 -0
  509. /package/dist/assets/{coffeescript-Dz_r13Pd.js → coffeescript-DBK0AeMT.js} +0 -0
  510. /package/dist/assets/{colors-CUF0x3zZ.js → colors-DUsH-HF1.js} +0 -0
  511. /package/dist/assets/{common-keywords-CU-S2Vqm.js → common-keywords-D6ImdZX8.js} +0 -0
  512. /package/dist/assets/{commonlisp-EavL1_-N.js → commonlisp-Bo8hOdn-.js} +0 -0
  513. /package/dist/assets/{crystal-BQ8grXRY.js → crystal-DYrQEMVi.js} +0 -0
  514. /package/dist/assets/{css-Bmqfl4iE.js → css-zh47N2UC.js} +0 -0
  515. /package/dist/assets/{cypher-BKXIqXpT.js → cypher-BWPAHm69.js} +0 -0
  516. /package/dist/assets/{cytoscape.esm-BihqZ2_-.js → cytoscape.esm-BauVghWH.js} +0 -0
  517. /package/dist/assets/{d-DRfFJaS4.js → d-CMuL95tt.js} +0 -0
  518. /package/dist/assets/{diff-BWk1g4qN.js → diff-oor_HZ51.js} +0 -0
  519. /package/dist/assets/{dist-qIIHXwC_.js → dist-B62Xo7-b.js} +0 -0
  520. /package/dist/assets/{dist-Bx6F_B1m.js → dist-B83wRp_v.js} +0 -0
  521. /package/dist/assets/{dist-DY1C8dgM.js → dist-BZP3Xxma.js} +0 -0
  522. /package/dist/assets/{dist-DLCy1STk.js → dist-BZWmfQbq.js} +0 -0
  523. /package/dist/assets/{dist-OZngTf6n.js → dist-BpuNldXk.js} +0 -0
  524. /package/dist/assets/{dist-DxxvVPQH.js → dist-C1VXabOr.js} +0 -0
  525. /package/dist/assets/{dist-Bpsss9Eu.js → dist-C5H5qIvq.js} +0 -0
  526. /package/dist/assets/{dist-DsxhNXOv.js → dist-CF4gkF4y.js} +0 -0
  527. /package/dist/assets/{dist-rT8uZk_k.js → dist-CNW1zLeq.js} +0 -0
  528. /package/dist/assets/{dist-BYyu59D8.js → dist-CoCQUAeM.js} +0 -0
  529. /package/dist/assets/{dist-Dj9zNHXU.js → dist-CtrmRz20.js} +0 -0
  530. /package/dist/assets/{dist-BIKFl48f.js → dist-Dcqqg9UU.js} +0 -0
  531. /package/dist/assets/{dist-B0VqT_4z.js → dist-sMh6mJ2d.js} +0 -0
  532. /package/dist/assets/{dist-BZe-2kC9.js → dist-tLOz534J.js} +0 -0
  533. /package/dist/assets/{dtd-C1gvGnbI.js → dtd-Fe_Eikw6.js} +0 -0
  534. /package/dist/assets/{duckdb-keywords-CR9f4wu5.js → duckdb-keywords-5i8us9ML.js} +0 -0
  535. /package/dist/assets/{dylan-D26gjyBo.js → dylan-DjUZAjRK.js} +0 -0
  536. /package/dist/assets/{ebnf-BdwTqLUx.js → ebnf--2SLsnbd.js} +0 -0
  537. /package/dist/assets/{ecl-D_pghsRW.js → ecl-qgyT1LqI.js} +0 -0
  538. /package/dist/assets/{eiffel-CQeRT5l7.js → eiffel-Dgulx8rf.js} +0 -0
  539. /package/dist/assets/{elm-BMJejWwJ.js → elm-BvFY4GJb.js} +0 -0
  540. /package/dist/assets/{empty-state-DrmGF88A.js → empty-state-B8Cxr9nj.js} +0 -0
  541. /package/dist/assets/{en-US-DU2jJCpg.js → en-US-CCVfmA-q.js} +0 -0
  542. /package/dist/assets/{erlang-DTDt7sE1.js → erlang-Ba0XOLlj.js} +0 -0
  543. /package/dist/assets/{errors-CPlNr33a.js → errors-TZBmrJmc.js} +0 -0
  544. /package/dist/assets/{esm-C-53tlK5.js → esm-Bmu2DhPy.js} +0 -0
  545. /package/dist/assets/{esm-DvGqZhsW.js → esm-vpVfqVb3.js} +0 -0
  546. /package/dist/assets/{fcl-BFWIADMy.js → fcl-CcJxrJDr.js} +0 -0
  547. /package/dist/assets/{forth-DLug1Uos.js → forth-gbBFxz8f.js} +0 -0
  548. /package/dist/assets/{fortran-CfPd9x83.js → fortran-CXijpPbh.js} +0 -0
  549. /package/dist/assets/{gas-C1vwqe1-.js → gas-CnHGSLCd.js} +0 -0
  550. /package/dist/assets/{gherkin-DxFhlJYL.js → gherkin-DfEZpSxY.js} +0 -0
  551. /package/dist/assets/{groovy-AqjvKzmp.js → groovy-9JiNA9gq.js} +0 -0
  552. /package/dist/assets/{haskell-B9BMJXS_.js → haskell-CKr_RZFK.js} +0 -0
  553. /package/dist/assets/{haxe-CFd4aFZH.js → haxe-DsAAHfaR.js} +0 -0
  554. /package/dist/assets/{http-CgzOAOXj.js → http-BBXW5Cu0.js} +0 -0
  555. /package/dist/assets/{icon-32x32-XIbzzdoo.js → icon-32x32-DH9kM4Sh.js} +0 -0
  556. /package/dist/assets/{icons-DjR3qLG_.js → icons-CCHmxi8d.js} +0 -0
  557. /package/dist/assets/{idl-DKlFwAHI.js → idl-Djz72z1a.js} +0 -0
  558. /package/dist/assets/{init-DZpk0tdu.js → init-DRQmrFIb.js} +0 -0
  559. /package/dist/assets/{isValid-DpSSOU5z.js → isValid-DDt9wNjK.js} +0 -0
  560. /package/dist/assets/{javascript-BMuus-3E.js → javascript-CsBr0q2-.js} +0 -0
  561. /package/dist/assets/{julia-DGv2rboF.js → julia-BCYfl68O.js} +0 -0
  562. /package/dist/assets/{label-C9wP7Kp2.js → label-E64zk6_7.js} +0 -0
  563. /package/dist/assets/{livescript-51GCvdcX.js → livescript-BEw7FNJP.js} +0 -0
  564. /package/dist/assets/{loro_wasm_bg-CdafknAX.js → loro_wasm_bg-DzFUi5p_.js} +0 -0
  565. /package/dist/assets/{lua-BwsAaftY.js → lua-DqxHXOsz.js} +0 -0
  566. /package/dist/assets/{math-PgJy15ir.js → math-BJjKGmt3.js} +0 -0
  567. /package/dist/assets/{mathematica-Du4amQ2X.js → mathematica-Do-octY0.js} +0 -0
  568. /package/dist/assets/{mbox-DKL-l6mb.js → mbox-VgrgGytk.js} +0 -0
  569. /package/dist/assets/{mhchem-CJmb5HsA.js → mhchem-ICopO0mb.js} +0 -0
  570. /package/dist/assets/{mirc-CvS1f8zr.js → mirc-DkD5mNIp.js} +0 -0
  571. /package/dist/assets/{mllike-VhUq11ot.js → mllike-C8Ah4kKN.js} +0 -0
  572. /package/dist/assets/{modelica-CjlHUZat.js → modelica-2q7w6nLE.js} +0 -0
  573. /package/dist/assets/{mscgen-26STiUsc.js → mscgen-BRqvO7u4.js} +0 -0
  574. /package/dist/assets/{multi-icon-BWLbAXq5.js → multi-icon-jM74Rbvg.js} +0 -0
  575. /package/dist/assets/{mumps-4o8IRFVU.js → mumps-CjtiTT1a.js} +0 -0
  576. /package/dist/assets/{nginx-CFpObAqg.js → nginx-CiiHaY6Q.js} +0 -0
  577. /package/dist/assets/{node-sql-parser-UQ9Ur_LP.js → node-sql-parser-Bzh-sm1v.js} +0 -0
  578. /package/dist/assets/{ntriples-D0zMsGJ-.js → ntriples-4lauqsM6.js} +0 -0
  579. /package/dist/assets/{numbers-UHLm3mA-.js → numbers-D7O23mOZ.js} +0 -0
  580. /package/dist/assets/{octave-CpJ40RVG.js → octave-A2kFK0nR.js} +0 -0
  581. /package/dist/assets/{oz-W9l5CbXg.js → oz-CvXDMSbl.js} +0 -0
  582. /package/dist/assets/{panel-context-2mVKaSYm.js → panel-context-HhzMRtZm.js} +0 -0
  583. /package/dist/assets/{pascal-BZtdYBm4.js → pascal-6Jinj26u.js} +0 -0
  584. /package/dist/assets/{path-dqkZlAhR.js → path-D7fidI_g.js} +0 -0
  585. /package/dist/assets/{paths-Dfii2bN8.js → paths-BzSgteR-.js} +0 -0
  586. /package/dist/assets/{perl-Q79ziUtd.js → perl-CXauYQdN.js} +0 -0
  587. /package/dist/assets/{pig-Dn9ueYxG.js → pig-Dl0QLQI6.js} +0 -0
  588. /package/dist/assets/{powershell-DfXPJ56g.js → powershell-6bdy_rHW.js} +0 -0
  589. /package/dist/assets/{preload-helper-DItdS47A.js → preload-helper-D2MJg03u.js} +0 -0
  590. /package/dist/assets/{properties-DRrw--9g.js → properties-p1rx3aF7.js} +0 -0
  591. /package/dist/assets/{protobuf-5jBh6Y7Q.js → protobuf-BZ6p9Xh_.js} +0 -0
  592. /package/dist/assets/{puppet-Bql5dDjm.js → puppet-CjdIRV7D.js} +0 -0
  593. /package/dist/assets/{python-C7HNB5A8.js → python-uzyJYIWU.js} +0 -0
  594. /package/dist/assets/{q-CW9lnZXb.js → q-CfD3i9uI.js} +0 -0
  595. /package/dist/assets/{r-DmuxMz9j.js → r-JyJdYHQB.js} +0 -0
  596. /package/dist/assets/{react-plotly-D4UaXGJL.js → react-plotly-kw5W3sN8.js} +0 -0
  597. /package/dist/assets/{react-resizable-panels.browser.esm-Mq45xjWt.js → react-resizable-panels.browser.esm-Da3ksQXL.js} +0 -0
  598. /package/dist/assets/{requests-BQkjRazP.js → requests-De5yEBc8.js} +0 -0
  599. /package/dist/assets/{rpm-2BQZRXYJ.js → rpm-DuGPfDyX.js} +0 -0
  600. /package/dist/assets/{ruby-B-FyRKB2.js → ruby-CA1TzLxZ.js} +0 -0
  601. /package/dist/assets/{runs-DyBOFmAK.js → runs-YUGrkyfE.js} +0 -0
  602. /package/dist/assets/{sas-Q-94el51.js → sas-BJPWZC7M.js} +0 -0
  603. /package/dist/assets/{scheme-By445Ne_.js → scheme-IRagAY3r.js} +0 -0
  604. /package/dist/assets/{session-fBtIbMpB.js → session-BOFn9QrD.js} +0 -0
  605. /package/dist/assets/{shell-CezKrT5T.js → shell-BVpF3W_J.js} +0 -0
  606. /package/dist/assets/{sieve-MRWdUbX3.js → sieve-BSfPMeZl.js} +0 -0
  607. /package/dist/assets/{simple-mode-BtxX-F6Z.js → simple-mode-BmS_AmGQ.js} +0 -0
  608. /package/dist/assets/{slides-component-CeMnlG8H.js → slides-component-JYH8kck6.js} +0 -0
  609. /package/dist/assets/{smalltalk-C0KZrhPl.js → smalltalk-CkHVehky.js} +0 -0
  610. /package/dist/assets/{solr-BkyoAXqg.js → solr-DYYuHZ7Q.js} +0 -0
  611. /package/dist/assets/{sparql-CIMoBhOL.js → sparql-CmKKjr-f.js} +0 -0
  612. /package/dist/assets/{spreadsheet-7FZkhkVo.js → spreadsheet-hVThRh5Z.js} +0 -0
  613. /package/dist/assets/{sql-BNnXxKXA.js → sql-DG1AJQLP.js} +0 -0
  614. /package/dist/assets/{src-CmKhyEBC.js → src-CsZby044.js} +0 -0
  615. /package/dist/assets/{stex-CtmkcLz7.js → stex-jWatZkll.js} +0 -0
  616. /package/dist/assets/{stylus-BxV1gbJN.js → stylus-D28PuRsm.js} +0 -0
  617. /package/dist/assets/{swift-C7ozIpB2.js → swift-D-jfpPuv.js} +0 -0
  618. /package/dist/assets/{tcl-D9BrnXdg.js → tcl-BrQdCDVA.js} +0 -0
  619. /package/dist/assets/{textile-8cDJUs1C.js → textile-DXBc8HMq.js} +0 -0
  620. /package/dist/assets/{tiddlywiki-DE5lnTl3.js → tiddlywiki-Dc8c_QaF.js} +0 -0
  621. /package/dist/assets/{tiki-Dt9oCY2i.js → tiki-CwGnGueS.js} +0 -0
  622. /package/dist/assets/{timer-DXL2Iyk5.js → timer-B6DpdVnC.js} +0 -0
  623. /package/dist/assets/{toml-Dtc3-sql.js → toml-ClSouHPE.js} +0 -0
  624. /package/dist/assets/{trash-2-B8SQYdQq.js → trash-2-DDsWrxuJ.js} +0 -0
  625. /package/dist/assets/{trash-Cv0yH8fs.js → trash-DCF6Krvi.js} +0 -0
  626. /package/dist/assets/{treemap-8bMgVaTX.js → treemap-CZF0Enj1.js} +0 -0
  627. /package/dist/assets/{triangle-alert-U93NZYDl.js → triangle-alert-CebQ7XwA.js} +0 -0
  628. /package/dist/assets/{troff-CxUT34rC.js → troff-BGDyQn9x.js} +0 -0
  629. /package/dist/assets/{ttcn-BiVwbsr5.js → ttcn-De1OdISX.js} +0 -0
  630. /package/dist/assets/{ttcn-cfg-BLBfLtVM.js → ttcn-cfg-CQMSrhCz.js} +0 -0
  631. /package/dist/assets/{turtle-DqTQI7WU.js → turtle-DNhfxysg.js} +0 -0
  632. /package/dist/assets/{types-DZmRsGZN.js → types-iYXk7c05.js} +0 -0
  633. /package/dist/assets/{use-toast-T0_cQDma.js → use-toast-BDYuj3zG.js} +0 -0
  634. /package/dist/assets/{useDebounce-B28kFfrM.js → useDebounce-7iEVSqwM.js} +0 -0
  635. /package/dist/assets/{useDeepCompareMemoize-ChxLMT9E.js → useDeepCompareMemoize-5OUgerQ3.js} +0 -0
  636. /package/dist/assets/{useInterval-BNfubus2.js → useInterval-B-PjgTm9.js} +0 -0
  637. /package/dist/assets/{useTheme-CTORu22_.js → useTheme-DQozhcp1.js} +0 -0
  638. /package/dist/assets/{uuid-DercMavo.js → uuid-DXdzqzcr.js} +0 -0
  639. /package/dist/assets/{vb-D-mN5USJ.js → vb-BX7-Md9G.js} +0 -0
  640. /package/dist/assets/{vbscript-BHlqX42l.js → vbscript-DNMzJOTU.js} +0 -0
  641. /package/dist/assets/{velocity-BX6395is.js → velocity-viirwPm7.js} +0 -0
  642. /package/dist/assets/{verilog-CixbCKyb.js → verilog-CZguTLBV.js} +0 -0
  643. /package/dist/assets/{vhdl-CofOR-02.js → vhdl-CAEhCBOl.js} +0 -0
  644. /package/dist/assets/{web-vitals-Br9feh_D.js → web-vitals-CUbDLLN1.js} +0 -0
  645. /package/dist/assets/{webidl-DAqkXtNt.js → webidl-BNJg_7gX.js} +0 -0
  646. /package/dist/assets/{workflow-B12dAR4X.js → workflow-BphwJiK3.js} +0 -0
  647. /package/dist/assets/{ws-DQY2KwIl.js → ws-DcVtI9Wj.js} +0 -0
  648. /package/dist/assets/{xquery-wPbfv0-o.js → xquery-CGV_r322.js} +0 -0
  649. /package/dist/assets/{yacas-B5Zk1avC.js → yacas-uRzw7z7m.js} +0 -0
  650. /package/dist/assets/{z80-C0HuDTqd.js → z80-CBK8t-9T.js} +0 -0
@@ -9,35 +9,73 @@ import {
9
9
  vi,
10
10
  } from "vitest";
11
11
  import { TestUtils } from "@/__tests__/test-helpers";
12
- import type { Base64String } from "@/utils/json/base64";
13
12
  import {
14
- type AnyWidgetMessage,
13
+ getMarimoInternal,
15
14
  handleWidgetMessage,
16
15
  Model,
17
16
  visibleForTesting,
18
17
  } from "../model";
18
+ import type { WidgetModelId } from "../types";
19
19
 
20
20
  const { ModelManager } = visibleForTesting;
21
21
 
22
+ // Helper to create typed model IDs for tests
23
+ const asModelId = (id: string): WidgetModelId => id as WidgetModelId;
24
+
25
+ // Mock the request client
26
+ const mockSendModelValue = vi.fn().mockResolvedValue(null);
27
+ vi.mock("@/core/network/requests", () => ({
28
+ getRequestClient: () => ({
29
+ sendModelValue: mockSendModelValue,
30
+ }),
31
+ }));
32
+
33
+ // Helper to create a mock MarimoComm
34
+ function createMockComm<T>() {
35
+ return {
36
+ sendUpdate: vi.fn().mockResolvedValue(undefined),
37
+ sendCustomMessage: vi.fn().mockResolvedValue(undefined),
38
+ };
39
+ }
40
+
22
41
  describe("Model", () => {
23
42
  let model: Model<{ foo: string; bar: number }>;
24
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
- let onChange: (value: any) => void;
26
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
- let sendToWidget: (req: {
28
- content: unknown;
29
- buffers: Base64String[];
30
- }) => Promise<null | undefined>;
43
+ let mockComm: ReturnType<typeof createMockComm<{ foo: string; bar: number }>>;
31
44
 
32
45
  beforeEach(() => {
33
- onChange = vi.fn();
34
- sendToWidget = vi.fn().mockResolvedValue(null);
35
- model = new Model(
36
- { foo: "test", bar: 123 },
37
- onChange,
38
- sendToWidget,
39
- new Set(),
40
- );
46
+ mockComm = createMockComm();
47
+ mockSendModelValue.mockClear();
48
+ model = new Model({ foo: "test", bar: 123 }, mockComm);
49
+ });
50
+
51
+ describe("public API", () => {
52
+ it("should only expose AFM-compliant interface", () => {
53
+ // Get all enumerable own properties
54
+ const ownProperties = Object.keys(model).sort();
55
+ // Get prototype methods (excluding constructor)
56
+ const prototypeMethods = Object.getOwnPropertyNames(
57
+ Object.getPrototypeOf(model),
58
+ )
59
+ .filter((name) => name !== "constructor")
60
+ .sort();
61
+
62
+ // Snapshot the public API to catch accidental leaks of internal methods
63
+ expect({ ownProperties, prototypeMethods }).toMatchInlineSnapshot(`
64
+ {
65
+ "ownProperties": [
66
+ "widget_manager",
67
+ ],
68
+ "prototypeMethods": [
69
+ "get",
70
+ "off",
71
+ "on",
72
+ "save_changes",
73
+ "send",
74
+ "set",
75
+ ],
76
+ }
77
+ `);
78
+ });
41
79
  });
42
80
 
43
81
  describe("get/set", () => {
@@ -70,7 +108,7 @@ describe("Model", () => {
70
108
  model.set("bar", 456);
71
109
  model.save_changes();
72
110
 
73
- expect(onChange).toHaveBeenCalledWith({
111
+ expect(mockComm.sendUpdate).toHaveBeenCalledWith({
74
112
  foo: "new value",
75
113
  bar: 456,
76
114
  });
@@ -80,7 +118,7 @@ describe("Model", () => {
80
118
  model.set("foo", "new value");
81
119
  model.save_changes();
82
120
 
83
- expect(onChange).toHaveBeenCalledWith({
121
+ expect(mockComm.sendUpdate).toHaveBeenCalledWith({
84
122
  foo: "new value",
85
123
  });
86
124
 
@@ -88,17 +126,17 @@ describe("Model", () => {
88
126
  model.save_changes();
89
127
 
90
128
  // After clearing, only the newly changed field is sent
91
- expect(onChange).toHaveBeenCalledWith({
129
+ expect(mockComm.sendUpdate).toHaveBeenCalledWith({
92
130
  bar: 456,
93
131
  });
94
132
  });
95
133
 
96
- it("should not call onChange when no dirty fields", () => {
134
+ it("should not call sendUpdate when no dirty fields", () => {
97
135
  model.set("foo", "new value");
98
136
  model.save_changes();
99
- model.save_changes(); // Second save should not call onChange
137
+ model.save_changes(); // Second save should not call sendUpdate
100
138
 
101
- expect(onChange).toHaveBeenCalledTimes(1);
139
+ expect(mockComm.sendUpdate).toHaveBeenCalledTimes(1);
102
140
  });
103
141
  });
104
142
 
@@ -145,23 +183,28 @@ describe("Model", () => {
145
183
  describe("send", () => {
146
184
  it("should send message and handle callbacks", async () => {
147
185
  const callback = vi.fn();
148
- model.send({ test: true }, callback);
186
+ await model.send({ test: true }, callback);
149
187
 
150
- expect(sendToWidget).toHaveBeenCalledWith({
151
- content: {
152
- state: { test: true },
153
- bufferPaths: [],
154
- },
155
- buffers: [],
156
- });
157
- await TestUtils.nextTick(); // flush
158
- expect(callback).toHaveBeenCalledWith(null);
188
+ expect(mockComm.sendCustomMessage).toHaveBeenCalledWith(
189
+ { test: true },
190
+ [],
191
+ );
192
+ expect(callback).toHaveBeenCalled();
193
+ });
194
+
195
+ it("should convert buffers to DataViews", async () => {
196
+ const buffer = new ArrayBuffer(8);
197
+ await model.send({ test: true }, undefined, [buffer]);
198
+
199
+ expect(mockComm.sendCustomMessage).toHaveBeenCalledWith({ test: true }, [
200
+ expect.any(DataView),
201
+ ]);
159
202
  });
160
203
  });
161
204
 
162
205
  describe("widget_manager", () => {
163
- const childModelId = "test-id";
164
- const childModel = new Model({ foo: "test" }, vi.fn(), vi.fn(), new Set());
206
+ const childModelId = asModelId("test-id");
207
+ const childModel = new Model({ foo: "test" }, createMockComm());
165
208
  const manager = new ModelManager(10);
166
209
  let previousModelManager = Model._modelManager;
167
210
 
@@ -177,9 +220,9 @@ describe("Model", () => {
177
220
  });
178
221
 
179
222
  it("should throw error when accessing a model that is not registered", async () => {
180
- await expect(model.widget_manager.get_model("random-id")).rejects.toThrow(
181
- "Model not found for key: random-id",
182
- );
223
+ await expect(
224
+ model.widget_manager.get_model(asModelId("random-id")),
225
+ ).rejects.toThrow("Model not found for key: random-id");
183
226
  });
184
227
 
185
228
  it("should return the registered model", async () => {
@@ -194,7 +237,7 @@ describe("Model", () => {
194
237
  const callback = vi.fn();
195
238
  model.on("change:foo", callback);
196
239
 
197
- model.updateAndEmitDiffs({ foo: "test", bar: 456 });
240
+ getMarimoInternal(model).updateAndEmitDiffs({ foo: "test", bar: 456 });
198
241
  expect(callback).not.toHaveBeenCalled(); // foo didn't change
199
242
  expect(model.get("bar")).toBe(456);
200
243
  });
@@ -202,47 +245,33 @@ describe("Model", () => {
202
245
  it("should update and emit for deep changes", () => {
203
246
  const modelWithObject = new Model<{ foo: { nested: string } }>(
204
247
  { foo: { nested: "test" } },
205
- onChange,
206
- sendToWidget,
207
- new Set(),
248
+ createMockComm(),
208
249
  );
209
250
  const callback = vi.fn();
210
251
  modelWithObject.on("change:foo", callback);
211
252
 
212
- modelWithObject.updateAndEmitDiffs({ foo: { nested: "changed" } });
253
+ getMarimoInternal(modelWithObject).updateAndEmitDiffs({
254
+ foo: { nested: "changed" },
255
+ });
213
256
  expect(callback).toHaveBeenCalledTimes(1);
214
257
  });
215
258
 
216
259
  it("should emit change event for any changes", async () => {
217
260
  const callback = vi.fn();
218
261
  model.on("change", callback);
219
- model.updateAndEmitDiffs({ foo: "changed", bar: 456 });
262
+ getMarimoInternal(model).updateAndEmitDiffs({ foo: "changed", bar: 456 });
220
263
  await TestUtils.nextTick(); // flush
221
264
  expect(callback).toHaveBeenCalledTimes(1);
222
265
  });
223
266
  });
224
267
 
225
- describe("receiveCustomMessage", () => {
226
- it("should handle update messages", () => {
227
- model.receiveCustomMessage({
228
- method: "update",
229
- state: {
230
- foo: "updated",
231
- bar: 789,
232
- },
233
- buffer_paths: [],
234
- });
235
-
236
- expect(model.get("foo")).toBe("updated");
237
- expect(model.get("bar")).toBe(789);
238
- });
239
-
268
+ describe("emitCustomMessage", () => {
240
269
  it("should handle custom messages", () => {
241
270
  const callback = vi.fn();
242
271
  model.on("msg:custom", callback);
243
272
 
244
273
  const content = { type: "test" };
245
- model.receiveCustomMessage({
274
+ getMarimoInternal(model).emitCustomMessage({
246
275
  method: "custom",
247
276
  content,
248
277
  });
@@ -256,7 +285,7 @@ describe("Model", () => {
256
285
 
257
286
  const content = { type: "test" };
258
287
  const buffer = new DataView(new ArrayBuffer(8));
259
- model.receiveCustomMessage(
288
+ getMarimoInternal(model).emitCustomMessage(
260
289
  {
261
290
  method: "custom",
262
291
  content,
@@ -266,108 +295,85 @@ describe("Model", () => {
266
295
 
267
296
  expect(callback).toHaveBeenCalledWith(content, [buffer]);
268
297
  });
269
-
270
- it("should log error for invalid messages", () => {
271
- const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => {
272
- // noop
273
- });
274
- model.receiveCustomMessage({ invalid: "message" });
275
-
276
- expect(consoleSpy).toHaveBeenCalledTimes(2);
277
- });
278
298
  });
279
299
  });
280
300
 
281
301
  describe("ModelManager", () => {
282
302
  let modelManager = new ModelManager(50);
283
- const handle = ({
284
- modelId,
285
- message,
286
- buffers,
287
- }: {
288
- modelId: string;
289
- message: AnyWidgetMessage;
290
- buffers: readonly DataView[];
291
- }) => {
292
- return handleWidgetMessage({
293
- modelId,
294
- msg: message,
295
- buffers,
296
- modelManager,
297
- });
298
- };
303
+ const testId = asModelId("test-id");
299
304
 
300
305
  beforeEach(() => {
301
306
  // Clear the model manager before each test
302
307
  modelManager = new ModelManager(50);
308
+ mockSendModelValue.mockClear();
303
309
  });
304
310
 
305
311
  it("should set and get models", async () => {
306
- const model = new Model({ count: 0 }, vi.fn(), vi.fn(), new Set());
307
- modelManager.set("test-id", model);
308
- const retrievedModel = await modelManager.get("test-id");
312
+ const model = new Model({ count: 0 }, createMockComm());
313
+ modelManager.set(testId, model);
314
+ const retrievedModel = await modelManager.get(testId);
309
315
  expect(retrievedModel).toBe(model);
310
316
  });
311
317
 
312
318
  it("should handle model not found", async () => {
313
- await expect(modelManager.get("non-existent")).rejects.toThrow(
319
+ await expect(modelManager.get(asModelId("non-existent"))).rejects.toThrow(
314
320
  "Model not found for key: non-existent",
315
321
  );
316
322
  });
317
323
 
318
324
  it("should delete models", async () => {
319
- const model = new Model({ count: 0 }, vi.fn(), vi.fn(), new Set());
320
- modelManager.set("test-id", model);
321
- modelManager.delete("test-id");
322
- await expect(modelManager.get("test-id")).rejects.toThrow();
325
+ const model = new Model({ count: 0 }, createMockComm());
326
+ modelManager.set(testId, model);
327
+ modelManager.delete(testId);
328
+ await expect(modelManager.get(testId)).rejects.toThrow();
323
329
  });
324
330
 
325
331
  it("should handle widget messages", async () => {
326
- const openMessage: AnyWidgetMessage = {
327
- method: "open",
328
- state: { count: 0 },
329
- buffer_paths: [],
330
- };
331
-
332
- await handle({ modelId: "test-id", message: openMessage, buffers: [] });
333
- const model = await modelManager.get("test-id");
332
+ await handleWidgetMessage(modelManager, {
333
+ model_id: testId,
334
+ message: {
335
+ method: "open",
336
+ state: { count: 0 },
337
+ buffer_paths: [],
338
+ buffers: [],
339
+ },
340
+ });
341
+ const model = await modelManager.get(testId);
334
342
  expect(model.get("count")).toBe(0);
335
343
 
336
- const updateMessage: AnyWidgetMessage = {
337
- method: "update",
338
- state: {
339
- count: 1,
344
+ await handleWidgetMessage(modelManager, {
345
+ model_id: testId,
346
+ message: {
347
+ method: "update",
348
+ state: { count: 1 },
349
+ buffer_paths: [],
350
+ buffers: [],
340
351
  },
341
- buffer_paths: [],
342
- };
343
-
344
- await handle({ modelId: "test-id", message: updateMessage, buffers: [] });
352
+ });
345
353
  expect(model.get("count")).toBe(1);
346
354
  });
347
355
 
348
356
  it("should handle custom messages", async () => {
349
- const model = new Model({ count: 0 }, vi.fn(), vi.fn(), new Set());
357
+ const model = new Model({ count: 0 }, createMockComm());
350
358
  const callback = vi.fn();
351
359
  model.on("msg:custom", callback);
352
- modelManager.set("test-id", model);
360
+ modelManager.set(testId, model);
353
361
 
354
- await handle({
355
- modelId: "test-id",
356
- message: { method: "custom", content: { count: 1 } },
357
- buffers: [],
362
+ await handleWidgetMessage(modelManager, {
363
+ model_id: testId,
364
+ message: { method: "custom", content: { count: 1 }, buffers: [] },
358
365
  });
359
366
  expect(callback).toHaveBeenCalledWith({ count: 1 }, []);
360
367
  });
361
368
 
362
369
  it("should handle close messages", async () => {
363
- const model = new Model({ count: 0 }, vi.fn(), vi.fn(), new Set());
364
- modelManager.set("test-id", model);
370
+ const model = new Model({ count: 0 }, createMockComm());
371
+ modelManager.set(testId, model);
365
372
 
366
- await handle({
367
- modelId: "test-id",
373
+ await handleWidgetMessage(modelManager, {
374
+ model_id: testId,
368
375
  message: { method: "close" },
369
- buffers: [],
370
376
  });
371
- await expect(modelManager.get("test-id")).rejects.toThrow();
377
+ await expect(modelManager.get(testId)).rejects.toThrow();
372
378
  });
373
379
  });
@@ -1,12 +1,8 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import { describe, expect, it } from "vitest";
3
- import {
4
- decodeFromWire,
5
- isWireFormat,
6
- serializeBuffersToBase64,
7
- type WireFormat,
8
- } from "../data-views";
9
- import type { Base64String } from "../json/base64";
3
+ import type { WireFormat } from "@/plugins/impl/anywidget/types";
4
+ import type { Base64String } from "../../../../utils/json/base64";
5
+ import { decodeFromWire, serializeBuffersToBase64 } from "../serialization";
10
6
 
11
7
  describe("decodeFromWire with DataViews", () => {
12
8
  it("should return the original state if bufferPaths.length === 0", () => {
@@ -108,7 +104,7 @@ describe("Immutability Tests", () => {
108
104
  expect(input.array).toBe(input.array); // Array reference unchanged
109
105
  });
110
106
 
111
- it("decodeFromWire (wire format) should not mutate input", () => {
107
+ it("decodeFromWire (wire format) should decode base64 to DataView", () => {
112
108
  const encoder = new TextEncoder();
113
109
  const data = encoder.encode("Hello");
114
110
  const base64 = btoa(String.fromCharCode(...data)) as Base64String;
@@ -119,19 +115,16 @@ describe("Immutability Tests", () => {
119
115
  buffers: [base64],
120
116
  };
121
117
 
122
- const clone = structuredClone(input);
123
-
124
- decodeFromWire(input);
125
-
126
- // Check deep equality
127
- expect(input).toEqual(clone);
118
+ const result = decodeFromWire(input);
128
119
 
129
- // Check references are unchanged
130
- expect(input.state).toBe(input.state);
131
- expect(input.state.nested).toBe(input.state.nested);
120
+ // Result should have DataView instead of base64 string
121
+ expect(result.text).toBeInstanceOf(DataView);
122
+ // Other properties should be preserved
123
+ expect(result.number).toBe(42);
124
+ expect(result.nested).toEqual({ value: "test" });
132
125
  });
133
126
 
134
- it("decodeFromWire (with DataViews) should not mutate input", () => {
127
+ it("decodeFromWire (with DataViews) should insert buffers at paths", () => {
135
128
  const encoder = new TextEncoder();
136
129
  const dataView = new DataView(encoder.encode("data").buffer);
137
130
 
@@ -143,21 +136,21 @@ describe("Immutability Tests", () => {
143
136
  const bufferPaths = [["data"]];
144
137
  const buffers = [dataView];
145
138
 
146
- const input = { state, bufferPaths, buffers };
147
- const clone = structuredClone(input);
148
-
149
- decodeFromWire(input);
150
-
151
- // Check deep equality
152
- expect(input).toEqual(clone);
153
-
154
- // Check references are unchanged
155
- expect(input.state.nested).toBe(state.nested);
156
- expect(input.state.array).toBe(state.array);
157
- expect(input.buffers?.[0]).toBe(dataView); // Buffer reference unchanged
139
+ const result = decodeFromWire({
140
+ state,
141
+ bufferPaths,
142
+ buffers,
143
+ }) as typeof state & { data: DataView };
144
+
145
+ // Result should have the DataView at the path
146
+ expect(result.data).toBe(dataView);
147
+ // Other properties should be preserved
148
+ expect(result.placeholder).toBe("value");
149
+ expect(result.nested).toEqual({ key: "test" });
150
+ expect(result.array).toEqual([1, 2, 3]);
158
151
  });
159
152
 
160
- it("decodeFromWire should return new object, not mutate", () => {
153
+ it("decodeFromWire should insert buffers and return state", () => {
161
154
  const encoder = new TextEncoder();
162
155
  const dataView = new DataView(encoder.encode("data").buffer);
163
156
 
@@ -165,16 +158,15 @@ describe("Immutability Tests", () => {
165
158
  const bufferPaths = [["c"]];
166
159
  const buffers = [dataView];
167
160
 
168
- const result = decodeFromWire({ state, bufferPaths, buffers });
169
-
170
- // Result should be different reference
171
- expect(result).not.toBe(state);
172
-
173
- // Input should not have new property
174
- expect("c" in state).toBe(false);
161
+ const result = decodeFromWire({
162
+ state,
163
+ bufferPaths,
164
+ buffers,
165
+ }) as typeof state & { c: DataView };
175
166
 
176
167
  // Result should have new property
177
168
  expect("c" in result).toBe(true);
169
+ expect(result.c).toBe(dataView);
178
170
  });
179
171
 
180
172
  it("serializeBuffersToBase64 should return new state object", () => {
@@ -198,7 +190,7 @@ describe("Immutability Tests", () => {
198
190
  expect(typeof result.state.buffer).toBe("string");
199
191
  });
200
192
 
201
- it("decodeFromWire with object input should not mutate state", () => {
193
+ it("decodeFromWire with object input should insert buffers", () => {
202
194
  const encoder = new TextEncoder();
203
195
  const dataView = new DataView(encoder.encode("data").buffer);
204
196
 
@@ -206,16 +198,17 @@ describe("Immutability Tests", () => {
206
198
  const bufferPaths = [["d"]];
207
199
  const buffers = [dataView];
208
200
 
209
- const input = { state, bufferPaths, buffers };
210
- const clone = structuredClone(input);
211
-
212
- decodeFromWire(input);
213
-
214
- // Check deep equality
215
- expect(input).toEqual(clone);
216
-
217
- // Check references are unchanged
218
- expect(input.state.b).toBe(state.b);
201
+ const result = decodeFromWire({
202
+ state,
203
+ bufferPaths,
204
+ buffers,
205
+ }) as typeof state & { d: DataView };
206
+
207
+ // Result should have the buffer inserted
208
+ expect(result.d).toBe(dataView);
209
+ // Original properties should be preserved
210
+ expect(result.a).toBe(1);
211
+ expect(result.b).toEqual({ c: 2 });
219
212
  });
220
213
 
221
214
  it("nested objects should maintain independence after serialization", () => {
@@ -342,53 +335,6 @@ describe("serializeBuffersToBase64", () => {
342
335
  });
343
336
  });
344
337
 
345
- describe("isWireFormat", () => {
346
- it("should return true for valid wire format", () => {
347
- const wireFormat: WireFormat = {
348
- state: { a: 1 },
349
- bufferPaths: [],
350
- buffers: [],
351
- };
352
- expect(isWireFormat(wireFormat)).toBe(true);
353
- });
354
-
355
- it("should return true for wire format with data", () => {
356
- const wireFormat: WireFormat = {
357
- state: { value: "SGVsbG8=" },
358
- bufferPaths: [["value"]],
359
- buffers: ["SGVsbG8=" as Base64String],
360
- };
361
- expect(isWireFormat(wireFormat)).toBe(true);
362
- });
363
-
364
- it("should return false for null", () => {
365
- expect(isWireFormat(null)).toBe(false);
366
- });
367
-
368
- it("should return false for non-objects", () => {
369
- expect(isWireFormat("string")).toBe(false);
370
- expect(isWireFormat(123)).toBe(false);
371
- expect(isWireFormat(true)).toBe(false);
372
- expect(isWireFormat(undefined)).toBe(false);
373
- });
374
-
375
- it("should return false when missing state", () => {
376
- expect(isWireFormat({ bufferPaths: [], buffers: [] })).toBe(false);
377
- });
378
-
379
- it("should return false when missing bufferPaths", () => {
380
- expect(isWireFormat({ state: {}, buffers: [] })).toBe(false);
381
- });
382
-
383
- it("should return false when missing buffers", () => {
384
- expect(isWireFormat({ state: {}, bufferPaths: [] })).toBe(false);
385
- });
386
-
387
- it("should return false for plain objects", () => {
388
- expect(isWireFormat({ a: 1, b: 2 })).toBe(false);
389
- });
390
- });
391
-
392
338
  describe("decodeFromWire from WireFormat", () => {
393
339
  it("should return state unchanged when no buffer paths", () => {
394
340
  const wire: WireFormat = {