@marimo-team/frontend 0.23.9-dev8 → 0.23.9

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
@@ -20,13 +20,17 @@ import {
20
20
  RotateCwIcon,
21
21
  SendHorizontalIcon,
22
22
  SettingsIcon,
23
+ SquareIcon,
23
24
  Trash2Icon,
24
25
  X,
25
26
  } from "lucide-react";
26
27
  import React, { useEffect, useRef, useState } from "react";
27
28
  import { z } from "zod";
28
29
  import { renderUIMessage } from "@/components/chat/chat-display";
29
- import { convertToFileUIPart } from "@/components/chat/chat-utils";
30
+ import {
31
+ convertToFileUIPart,
32
+ hasPendingToolCalls,
33
+ } from "@/components/chat/chat-utils";
30
34
  import {
31
35
  type AdditionalCompletions,
32
36
  PromptInput,
@@ -60,6 +64,7 @@ import { cn } from "@/utils/cn";
60
64
  import { Logger } from "@/utils/Logger";
61
65
  import { Objects } from "@/utils/objects";
62
66
  import { Strings } from "@/utils/strings";
67
+ import { generateUUID } from "@/utils/uuid";
63
68
  import { ErrorBanner } from "../common/error-banner";
64
69
  import type { PluginFunctions } from "./ChatPlugin";
65
70
  import type { ChatConfig } from "./types";
@@ -86,6 +91,48 @@ const ChatMessageIncomingSchema = z.object({
86
91
  is_final: z.boolean().optional(),
87
92
  });
88
93
 
94
+ type ChatMessageIncoming = z.infer<typeof ChatMessageIncomingSchema>;
95
+
96
+ export interface IncomingChatChunkRefs {
97
+ controllerRef: {
98
+ current: ReadableStreamDefaultController<UIMessageChunk> | null;
99
+ };
100
+ activeRequestIdRef: { current: string | null };
101
+ }
102
+
103
+ /**
104
+ * Route a single incoming chunk to the active stream controller, dropping it
105
+ * if it belongs to a stale (aborted-but-not-yet-cancelled) backend run.
106
+ */
107
+ export function routeIncomingChatChunk(
108
+ message: ChatMessageIncoming,
109
+ refs: IncomingChatChunkRefs,
110
+ ): "enqueued" | "closed" | "dropped-no-controller" | "dropped-stale" {
111
+ const { controllerRef, activeRequestIdRef } = refs;
112
+ const controller = controllerRef.current;
113
+ if (controller === null) {
114
+ return "dropped-no-controller";
115
+ }
116
+ const activeRequestId = activeRequestIdRef.current;
117
+ if (activeRequestId !== null && message.message_id !== activeRequestId) {
118
+ Logger.debug("Dropping stale chat chunk", {
119
+ chunkRequestId: message.message_id,
120
+ activeRequestId,
121
+ });
122
+ return "dropped-stale";
123
+ }
124
+ if (message.content) {
125
+ controller.enqueue(message.content);
126
+ }
127
+ if (message.is_final) {
128
+ controller.close();
129
+ controllerRef.current = null;
130
+ activeRequestIdRef.current = null;
131
+ return "closed";
132
+ }
133
+ return "enqueued";
134
+ }
135
+
89
136
  export const Chatbot: React.FC<Props> = (props) => {
90
137
  const [input, setInput] = useState("");
91
138
  const [config, setConfig] = useState<ChatConfig>(props.config);
@@ -113,16 +160,15 @@ export const Chatbot: React.FC<Props> = (props) => {
113
160
  const configRef = useRef<ChatConfig>(config);
114
161
  configRef.current = config;
115
162
 
116
- // Track streaming state - maps backend message_id to frontend message index
117
- const streamingStateRef = useRef<{
118
- backendMessageId: string | null;
119
- frontendMessageIndex: number | null;
120
- }>({ backendMessageId: null, frontendMessageIndex: null });
121
-
122
163
  // For frontend-managed streaming, create a controller to enqueue chunks to.
123
164
  const frontendStreamControllerRef =
124
165
  useRef<ReadableStreamDefaultController<UIMessageChunk> | null>(null);
125
166
 
167
+ // The request_id of the currently-active prompt run. Chunks arriving with a
168
+ // different message_id are stale (from an aborted-but-not-yet-cancelled run
169
+ // on the kernel) and must be dropped
170
+ const activeRequestIdRef = useRef<string | null>(null);
171
+
126
172
  const { data: backendMessages } = useAsyncData(async () => {
127
173
  const response = await props.get_chat_history({});
128
174
  return response.messages;
@@ -143,7 +189,9 @@ export const Chatbot: React.FC<Props> = (props) => {
143
189
  error,
144
190
  regenerate,
145
191
  clearError,
192
+ addToolApprovalResponse,
146
193
  } = useChat({
194
+ sendAutomaticallyWhen: ({ messages }) => hasPendingToolCalls(messages),
147
195
  transport: new DefaultChatTransport({
148
196
  fetch: async (
149
197
  request: RequestInfo | URL,
@@ -180,17 +228,33 @@ export const Chatbot: React.FC<Props> = (props) => {
180
228
  };
181
229
  });
182
230
 
231
+ // Client-generated id used to (a) route chunks back to this stream
232
+ // and (b) ask the kernel to cancel just this run on Stop.
233
+ const requestId = generateUUID();
234
+
183
235
  const stream = new ReadableStream<UIMessageChunk>({
184
236
  start(controller) {
185
237
  frontendStreamControllerRef.current = controller;
238
+ activeRequestIdRef.current = requestId;
186
239
 
187
240
  const abortHandler = () => {
241
+ // Close the local controller first so the chat status flips to
242
+ // "ready" immediately and any racing chunks are dropped; then
243
+ // fire-and-forget the backend cancel so the kernel stops the
244
+ // model and we don't waste tokens / leak chunks to the next
245
+ // run.
188
246
  try {
189
247
  controller.close();
190
248
  } catch (error) {
191
249
  Logger.debug("Controller may already be closed", { error });
192
250
  }
193
251
  frontendStreamControllerRef.current = null;
252
+ activeRequestIdRef.current = null;
253
+ void props
254
+ .cancel_prompt({ request_id: requestId })
255
+ .catch((error: Error) => {
256
+ Logger.debug("cancel_prompt failed", { error });
257
+ });
194
258
  };
195
259
  signal?.addEventListener("abort", abortHandler);
196
260
 
@@ -200,28 +264,25 @@ export const Chatbot: React.FC<Props> = (props) => {
200
264
  },
201
265
  cancel() {
202
266
  frontendStreamControllerRef.current = null;
267
+ activeRequestIdRef.current = null;
203
268
  },
204
269
  });
205
270
 
206
271
  // Start the prompt, chunks will be sent via events
207
272
  void props
208
273
  .send_prompt({
274
+ request_id: requestId,
209
275
  messages: messages,
210
276
  config: chatConfig,
211
277
  })
212
278
  .catch((error: Error) => {
213
279
  frontendStreamControllerRef.current?.error(error);
214
280
  frontendStreamControllerRef.current = null;
281
+ activeRequestIdRef.current = null;
215
282
  });
216
283
 
217
284
  return createUIMessageStreamResponse({ stream });
218
285
  } catch (error: unknown) {
219
- // Clear streaming state on error
220
- streamingStateRef.current = {
221
- backendMessageId: null,
222
- frontendMessageIndex: null,
223
- };
224
-
225
286
  // Handle abort gracefully without showing an error
226
287
  if (error instanceof Error && error.name === "AbortError") {
227
288
  return new Response("Aborted", { status: 499 });
@@ -244,21 +305,10 @@ export const Chatbot: React.FC<Props> = (props) => {
244
305
  }
245
306
  Logger.debug("Finished streaming message:", message);
246
307
 
247
- // Clear streaming state
248
- streamingStateRef.current = {
249
- backendMessageId: null,
250
- frontendMessageIndex: null,
251
- };
252
-
253
308
  props.setValue(message.messages);
254
309
  },
255
310
  onError: (error) => {
256
311
  Logger.error("An error occurred:", error);
257
- // Clear streaming state on error
258
- streamingStateRef.current = {
259
- backendMessageId: null,
260
- frontendMessageIndex: null,
261
- };
262
312
  },
263
313
  });
264
314
 
@@ -273,23 +323,10 @@ export const Chatbot: React.FC<Props> = (props) => {
273
323
  if (!parsedMessage.success) {
274
324
  return;
275
325
  }
276
- const message = parsedMessage.data;
277
-
278
- // Push to the stream for useChat to process
279
- const controller = frontendStreamControllerRef.current;
280
- if (!controller) {
281
- return;
282
- }
283
-
284
- if (message.content) {
285
- controller.enqueue(message.content);
286
- }
287
- if (message.is_final) {
288
- controller.close();
289
- frontendStreamControllerRef.current = null;
290
- }
291
-
292
- return;
326
+ routeIncomingChatChunk(parsedMessage.data, {
327
+ controllerRef: frontendStreamControllerRef,
328
+ activeRequestIdRef,
329
+ });
293
330
  },
294
331
  );
295
332
 
@@ -408,6 +445,9 @@ export const Chatbot: React.FC<Props> = (props) => {
408
445
  message,
409
446
  isStreamingReasoning: status === "streaming",
410
447
  isLast,
448
+ addToolApprovalResponse: isLast
449
+ ? addToolApprovalResponse
450
+ : undefined,
411
451
  })}
412
452
  </div>
413
453
  <div className="flex justify-end text-xs gap-2 invisible group-hover:visible">
@@ -429,16 +469,8 @@ export const Chatbot: React.FC<Props> = (props) => {
429
469
  })}
430
470
 
431
471
  {isLoading && (
432
- <div className="flex items-center justify-center space-x-2 mb-4">
472
+ <div className="flex items-center justify-center mb-4">
433
473
  <Spinner size="small" />
434
- <Button
435
- variant="link"
436
- size="sm"
437
- onClick={() => stop()}
438
- className="text-(--red-9) hover:text-(--red-11)"
439
- >
440
- Stop
441
- </Button>
442
474
  </div>
443
475
  )}
444
476
 
@@ -569,15 +601,30 @@ export const Chatbot: React.FC<Props> = (props) => {
569
601
  />
570
602
  </>
571
603
  )}
572
- <Button
573
- type="submit"
574
- disabled={isLoading || !input}
575
- variant="outline"
576
- size="xs"
577
- className="text-(--slate-11)"
578
- >
579
- <SendHorizontalIcon className="h-4 w-4" />
580
- </Button>
604
+ {isLoading ? (
605
+ <Tooltip content="Stop generating">
606
+ <Button
607
+ type="button"
608
+ variant="link"
609
+ size="xs"
610
+ onClick={() => stop()}
611
+ className="text-(--red-9) hover:text-(--red-11)"
612
+ >
613
+ <SquareIcon className="h-4 w-4 fill-current" />
614
+ </Button>
615
+ </Tooltip>
616
+ ) : (
617
+ <Button
618
+ type="submit"
619
+ disabled={!input}
620
+ variant="outline"
621
+ size="xs"
622
+ className="text-(--slate-11)"
623
+ aria-label="Send message"
624
+ >
625
+ <SendHorizontalIcon className="h-4 w-4" />
626
+ </Button>
627
+ )}
581
628
  </form>
582
629
  </div>
583
630
  );
@@ -22,6 +22,11 @@ export interface ChatConfig {
22
22
  }
23
23
 
24
24
  export interface SendMessageRequest {
25
+ request_id: string;
25
26
  messages: ChatMessage[];
26
27
  config: ChatConfig;
27
28
  }
29
+
30
+ export interface CancelPromptRequest {
31
+ request_id: string;
32
+ }
@@ -1,10 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import { expect, it } from "vitest";
3
- import {
4
- jsonParseWithSpecialChar,
5
- jsonToMarkdown,
6
- jsonToTSV,
7
- } from "../json/json-parser";
3
+ import { jsonParseWithSpecialChar, jsonToMarkdown } from "../json/json-parser";
8
4
 
9
5
  it("can jsonParseWithSpecialChar happy path", () => {
10
6
  expect(jsonParseWithSpecialChar('"hello"')).toEqual("hello");
@@ -72,70 +68,6 @@ it("can parse bigInts", () => {
72
68
  });
73
69
  });
74
70
 
75
- it("can convert json to tsv with en-US locale", () => {
76
- const locale = "en-US";
77
-
78
- expect(jsonToTSV([], locale)).toEqual("");
79
-
80
- expect(jsonToTSV([{ a: 1, b: 2 }], locale)).toEqual("a\tb\n1\t2");
81
-
82
- expect(
83
- jsonToTSV(
84
- [
85
- { a: 1, b: 2 },
86
- { a: 3, b: 4 },
87
- ],
88
- locale,
89
- ),
90
- ).toEqual("a\tb\n1\t2\n3\t4");
91
-
92
- // Does not handle sparse arrays
93
- expect(jsonToTSV([{ a: 1 }, { a: 2, b: 3 }], locale)).toMatchInlineSnapshot(
94
- '"a\n1\n2"',
95
- );
96
-
97
- // Handles special characters
98
- expect(
99
- jsonToTSV([{ a: "hello\tworld", b: "new\nline" }], locale),
100
- ).toMatchInlineSnapshot('"a\tb\nhello\tworld\tnew\nline"');
101
-
102
- // Handles floats with en-US locale (uses . as decimal separator)
103
- expect(jsonToTSV([{ a: 1.5, b: 2.7 }], locale)).toEqual("a\tb\n1.5\t2.7");
104
- });
105
-
106
- it("can convert json to tsv with de-DE locale", () => {
107
- const locale = "de-DE";
108
-
109
- // Handles floats with de-DE locale (uses , as decimal separator)
110
- expect(jsonToTSV([{ a: 1.5, b: 2.7 }], locale)).toEqual("a\tb\n1,5\t2,7");
111
-
112
- // Handles integers (no change)
113
- expect(jsonToTSV([{ a: 1, b: 2 }], locale)).toEqual("a\tb\n1\t2");
114
- });
115
-
116
- it("can convert json to tsv with fr-FR locale", () => {
117
- const locale = "fr-FR";
118
-
119
- // Handles floats with fr-FR locale (uses , as decimal separator)
120
- expect(jsonToTSV([{ a: 3.14, b: 2.123_45 }], locale)).toEqual(
121
- "a\tb\n3,14\t2,12345",
122
- );
123
- });
124
-
125
- it("handles null and undefined values in TSV", () => {
126
- const locale = "en-US";
127
-
128
- expect(jsonToTSV([{ a: null, b: undefined, c: 1 }], locale)).toEqual(
129
- "a\tb\tc\n\t\t1",
130
- );
131
- });
132
-
133
- it("handles NaN values in TSV", () => {
134
- const locale = "en-US";
135
-
136
- expect(jsonToTSV([{ a: Number.NaN, b: 1 }], locale)).toEqual("a\tb\nNaN\t1");
137
- });
138
-
139
71
  it("can convert json to markdown - basic table", () => {
140
72
  expect(jsonToMarkdown([])).toMatchInlineSnapshot(`""`);
141
73
 
@@ -66,36 +66,6 @@ export function jsonParseWithSpecialChar<T = unknown>(
66
66
  }
67
67
  }
68
68
 
69
- /**
70
- * Formats a value for TSV export, respecting user's locale for numbers
71
- */
72
- function formatValueForTSV(value: unknown, locale: string): string {
73
- if (value === null || value === undefined) {
74
- return "";
75
- }
76
- if (typeof value === "number" && !Number.isNaN(value)) {
77
- // Use toLocaleString to format numbers according to user's locale
78
- // This will use the appropriate decimal separator (e.g., "," in European locales)
79
- return value.toLocaleString(locale, {
80
- useGrouping: false,
81
- maximumFractionDigits: 20,
82
- });
83
- }
84
- return String(value);
85
- }
86
-
87
- export function jsonToTSV(json: Record<string, unknown>[], locale: string) {
88
- if (json.length === 0) {
89
- return "";
90
- }
91
-
92
- const keys = Object.keys(json[0]);
93
- const values = json.map((row) =>
94
- keys.map((key) => formatValueForTSV(row[key], locale)).join("\t"),
95
- );
96
- return `${keys.join("\t")}\n${values.join("\n")}`;
97
- }
98
-
99
69
  /**
100
70
  * Converts JSON data to a Markdown table format
101
71
  * Detects URLs and converts them to markdown links [url](url)