@marimo-team/islands 0.20.1 → 0.20.3-dev76

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 (565) hide show
  1. package/dist/{ConnectedDataExplorerComponent-BMiGWK57.js → ConnectedDataExplorerComponent-DUS-zJoR.js} +12 -12
  2. package/dist/{_baseIsEqual-DN5YkPnl.js → _baseIsEqual-5cAxzk6f.js} +42 -41
  3. package/dist/_basePickBy-3JVb5wYm.js +47 -0
  4. package/dist/{_baseProperty-6juuyX7Z.js → _baseProperty-D1nWkRMz.js} +12 -12
  5. package/dist/_baseSlice-BrVixxuc.js +10 -0
  6. package/dist/{_baseUniq-BlF21ach.js → _baseUniq-DSSiFuIJ.js} +10 -6
  7. package/dist/{any-language-editor-1OMbohwD.js → any-language-editor-BL9o7y0_.js} +31 -30
  8. package/dist/apl-lHFVoxx7.js +4 -0
  9. package/dist/{arc-9nABupDE.js → arc-DXxE-tFl.js} +2 -2
  10. package/dist/architecture-7HQA4BMR-BxkNpYRp.js +6 -0
  11. package/dist/{architectureDiagram-VXUJARFQ-DhN0C3Xf.js → architectureDiagram-VXUJARFQ-DrJeyFHq.js} +19 -19
  12. package/dist/asciiarmor-DqCdZUHI.js +4 -0
  13. package/dist/asn1-DEcwtw-q.js +4 -0
  14. package/dist/{blockDiagram-VD42YOAC-DrBkIcbV.js → blockDiagram-VD42YOAC-BJrP6qKc.js} +53 -53
  15. package/dist/brainfuck-Bro9Oz5x.js +4 -0
  16. package/dist/{c4Diagram-YG6GDRKO-pWt4zmu0.js → c4Diagram-YG6GDRKO-Bo4gytQ5.js} +6 -6
  17. package/dist/{channel-C56Jz8EL.js → channel-IWLGkaBE.js} +1 -1
  18. package/dist/{chunk-4BX2VUAB-WmXmzRBr.js → chunk-4BX2VUAB-CwMMQLZ_.js} +1 -1
  19. package/dist/{chunk-S6J4BHB3-zfWjyfUg.js → chunk-4F5CHEZ2-CxKDFd-t.js} +2 -2
  20. package/dist/{chunk-55IACEB6-irYMvHJu.js → chunk-55IACEB6-Dj8CzJvE.js} +1 -1
  21. package/dist/{chunk-5FQGJX7Z-pOElJy8t.js → chunk-5FQGJX7Z-BkzUmppO.js} +2 -2
  22. package/dist/{chunk-ABZYJK2D-BwNsaa1P.js → chunk-ABZYJK2D-CRwanrkd.js} +3 -3
  23. package/dist/{chunk-ATLVNIR6-DtFMAawc.js → chunk-ATLVNIR6-CMMCMvOK.js} +2 -2
  24. package/dist/{chunk-FWNWRKHM-DmrwhAQr.js → chunk-B2363JML-e_W7KW1D.js} +2 -2
  25. package/dist/{chunk-B4BG7PRW-lfWcLlzS.js → chunk-B4BG7PRW-BNsHrGHG.js} +7 -7
  26. package/dist/{chunk-CVBHYZKI-Bb2XMuXJ.js → chunk-CVBHYZKI-D8iwHsLF.js} +1 -1
  27. package/dist/{chunk-DI55MBZ5-RhhAimfG.js → chunk-DI55MBZ5-DQeYbfMV.js} +6 -6
  28. package/dist/{chunk-XAJISQIX-CZ8Bi1-x.js → chunk-DR5Q36YT-D4q96vNV.js} +2 -2
  29. package/dist/{chunk-EXTU4WIE-Bmo660a9.js → chunk-EXTU4WIE-CV_DQeaX.js} +2 -2
  30. package/dist/{chunk-FMBD7UC4-C0DZU_4q.js → chunk-FMBD7UC4-XTL4xAvH.js} +1 -1
  31. package/dist/{chunk-LBM3YZW2-BkxsqkNK.js → chunk-FRFDVMJY-C7q09nvl.js} +2 -2
  32. package/dist/{chunk-HN2XXSSU-BsB4dtgF.js → chunk-HN2XXSSU-CzO5Phf0.js} +1 -1
  33. package/dist/{chunk-JA3XYJ7Z-n8UTzfok.js → chunk-JA3XYJ7Z-Cmt--e0q.js} +3 -3
  34. package/dist/{chunk-JZLCHNYA-ChKqHUdB.js → chunk-JZLCHNYA-CkyMJnI9.js} +6 -6
  35. package/dist/{chunk-MI3HLSF2-DeDZS-tQ.js → chunk-MI3HLSF2-DvCKDmpi.js} +1 -1
  36. package/dist/{chunk-N4CR4FBY-BxOHGL3P.js → chunk-N4CR4FBY-BJfHtJbD.js} +7 -7
  37. package/dist/{chunk-T53DSG4Q-Bewz1tiU.js → chunk-PL6DKKU2-ChKBqnoD.js} +2 -2
  38. package/dist/{chunk-QN33PNHL-Dda-55xY.js → chunk-QN33PNHL-WOLIPUAJ.js} +2 -2
  39. package/dist/{chunk-QXUST7PY-ClIEpoCT.js → chunk-QXUST7PY-DYuD50pU.js} +10 -10
  40. package/dist/{chunk-QZHKN3VN-Diy_Cdek.js → chunk-QZHKN3VN-CYbwZKgJ.js} +1 -1
  41. package/dist/{chunk-S3R3BYOJ-C_1SJcWo.js → chunk-S3R3BYOJ-CsnX6RKs.js} +8 -8
  42. package/dist/{chunk-76Q3JFCE-CQ6a2yGJ.js → chunk-SJTYNZTY-j6_1s5om.js} +2 -2
  43. package/dist/{chunk-FPAJGGOC-quWdfNUB.js → chunk-TCCFYFTB-DdLCbCTn.js} +3995 -3985
  44. package/dist/{chunk-LHMN2FUI-CgYPnxfN.js → chunk-TQ3KTPDO-CGsUIC73.js} +2 -2
  45. package/dist/{chunk-TZMSLE5B-XW3duOft.js → chunk-TZMSLE5B-B3eYTGCw.js} +3 -3
  46. package/dist/{chunk-O7ZBX7Z2-CdpLwOP0.js → chunk-UMXZTB3W--LdAK3Bv.js} +2 -2
  47. package/dist/classDiagram-2ON5EDUG-C7C-oefv.js +30 -0
  48. package/dist/classDiagram-v2-WZHVMYZB-UTw37Gg8.js +30 -0
  49. package/dist/{clike-B90WKs4D.js → clike-CLJYUAWw.js} +1 -1
  50. package/dist/clojure-B2uhdQPa.js +4 -0
  51. package/dist/{clone-V9hndNcj.js → clone-BJrS4PdE.js} +1 -1
  52. package/dist/cmake-B9WXyQcc.js +4 -0
  53. package/dist/cobol-CPD3EJfO.js +4 -0
  54. package/dist/{code-block-37QAKDTI-zh5AeoJo.js → code-block-37QAKDTI-DV_ZyoUh.js} +1 -1
  55. package/dist/coffeescript-KD9TnEnS.js +4 -0
  56. package/dist/commonlisp-DNEULz_Q.js +4 -0
  57. package/dist/{constants-BGRTDzdW.js → constants-D1Tbg_6B.js} +3 -2
  58. package/dist/{cose-bilkent-S5V4N54A-BK1nIR2J.js → cose-bilkent-S5V4N54A-BCDTZDay.js} +2 -2
  59. package/dist/crystal-DVPNgAPQ.js +4 -0
  60. package/dist/css-fq3a1AH1.js +4 -0
  61. package/dist/cypher-Dtzq0BP7.js +4 -0
  62. package/dist/d-DcZudIhJ.js +4 -0
  63. package/dist/{dagre-6UL2VRFP-BArPH353.js → dagre-6UL2VRFP-BgsUhJrV.js} +88 -87
  64. package/dist/{dagre-Dcgyn_Uy.js → dagre-CyZCGfV_.js} +41 -84
  65. package/dist/{data-grid-overlay-editor-BVFT970w.js → data-grid-overlay-editor-BD0BFHzy.js} +2 -2
  66. package/dist/{diagram-PSM6KHXK-B1xAkr9y.js → diagram-PSM6KHXK-BIUUOfKo.js} +22 -22
  67. package/dist/{diagram-QEK2KX5R-CaoqwzPb.js → diagram-QEK2KX5R-BFjolZQv.js} +17 -17
  68. package/dist/{diagram-S2PKOQOG-NXCsFLvR.js → diagram-S2PKOQOG-4jfkWoZw.js} +17 -17
  69. package/dist/diff-D9BPDC3o.js +4 -0
  70. package/dist/{dist-IlWGXVjO.js → dist-7ZF--V_D.js} +2 -2
  71. package/dist/dist-BAeGo2rp.js +5 -0
  72. package/dist/{dist-Ey9hP8-j.js → dist-BBcqvpvP.js} +1 -1
  73. package/dist/{dist-DpAbrLuF.js → dist-BFL9TlzD.js} +5 -5
  74. package/dist/{dist-CD7uLx0M.js → dist-BLThQiU4.js} +2 -2
  75. package/dist/{dist-CoZ8kKKW.js → dist-BT6_J2eq.js} +1 -1
  76. package/dist/{dist-C_9IMrtt.js → dist-BTQbjEKU.js} +1 -1
  77. package/dist/dist-BqwCMSEa.js +5 -0
  78. package/dist/{dist-CUOuFgHt.js → dist-BuapEdlD.js} +113 -58
  79. package/dist/dist-Bum8FwTO.js +6 -0
  80. package/dist/{dist-LNp8svLl.js → dist-BwQHkjA9.js} +4 -4
  81. package/dist/dist-C0YiOwt_.js +5 -0
  82. package/dist/dist-C2uPv4iU.js +5 -0
  83. package/dist/{dist-Dmr_nXF6.js → dist-C4XMUaob.js} +2 -2
  84. package/dist/dist-C5hOLsJN.js +8 -0
  85. package/dist/{dist-a6Obzr07.js → dist-C6z8U-ms.js} +2 -2
  86. package/dist/dist-C9NIAKMs.js +8 -0
  87. package/dist/{dist-EZFqUJhh.js → dist-CB6qhQ8K.js} +1 -1
  88. package/dist/dist-CCrzTtvk.js +5 -0
  89. package/dist/dist-CFS9i1rS.js +8 -0
  90. package/dist/{dist-CMOy93xY.js → dist-CFToYDWO.js} +2 -2
  91. package/dist/{dist-DF_77D2B.js → dist-COpDrwi-.js} +1 -1
  92. package/dist/{dist-D8EhXZ4S.js → dist-CYo3w-nC.js} +3 -3
  93. package/dist/{dist-Dv2Phbh5.js → dist-Cb3cLT39.js} +2 -2
  94. package/dist/{dist-DOLQQtWK.js → dist-Ch_JuCvc.js} +3 -3
  95. package/dist/{dist-Cb3iqED3.js → dist-Cqpjy6bK.js} +1 -1
  96. package/dist/{dist-BswsDM4k.js → dist-CsqiXw7J.js} +2 -2
  97. package/dist/{dist-BoagoQQw.js → dist-CwtEWuFb.js} +2 -2
  98. package/dist/dist-CyHZuhPH.js +5 -0
  99. package/dist/dist-CzcjWdIk.js +6 -0
  100. package/dist/{dist-BUEi7EKT.js → dist-D0f6Yrrb.js} +1 -1
  101. package/dist/{dist-C5QB1NtD.js → dist-D7ZGWV_9.js} +3 -3
  102. package/dist/{dist-CrAYcS_4.js → dist-DEFZ7dnD.js} +2 -2
  103. package/dist/{dist-DrC0QKFK.js → dist-DMS81OrU.js} +1 -1
  104. package/dist/{dist-iyBCcLRa.js → dist-DUxS2paD.js} +2 -2
  105. package/dist/dist-DaYyUSNC.js +5 -0
  106. package/dist/{dist-W6TdeACj.js → dist-De9X_Des.js} +1 -1
  107. package/dist/dist-DpDcJYNh.js +8 -0
  108. package/dist/{dist-bz6WguLy.js → dist-I8MQW60_.js} +2 -2
  109. package/dist/{dist-BGzkWRSl.js → dist-IW_ARJ3S.js} +4 -4
  110. package/dist/{dist-xCB683Dh.js → dist-Qjf6pcqK.js} +2 -2
  111. package/dist/{dist-B_i29Q6L.js → dist-UYm1IE5s.js} +2 -2
  112. package/dist/dist-U_BfxcPn.js +5 -0
  113. package/dist/{dist-iDeoXzdN.js → dist-ovDpXuSB.js} +1 -1
  114. package/dist/{dockerfile-D1Q_4uCN.js → dockerfile-BxhYdLHL.js} +1 -1
  115. package/dist/dtd-FhG-tVom.js +4 -0
  116. package/dist/dylan-HWpZOBPw.js +4 -0
  117. package/dist/ecl-B_rcje1I.js +4 -0
  118. package/dist/eiffel-oqHyHs6f.js +4 -0
  119. package/dist/elm-B62RQEds.js +4 -0
  120. package/dist/{erDiagram-Q2GNP2WA-DWCa11g5.js → erDiagram-Q2GNP2WA-Cq5Bz5lG.js} +15 -15
  121. package/dist/erlang-CjRjjA-B.js +4 -0
  122. package/dist/{esm-DZSk8vt3.js → esm-BxMbHo0y.js} +107 -107
  123. package/dist/factor-CGH_TnIV.js +4 -0
  124. package/dist/{factor--4HHM8Rw.js → factor-Png_OsVt.js} +1 -1
  125. package/dist/{flowDiagram-NV44I4VS-BQ5PQs4L.js → flowDiagram-NV44I4VS-6WPJVFl7.js} +17 -17
  126. package/dist/forth-5N06oHNp.js +4 -0
  127. package/dist/fortran-wZ-sNg3h.js +4 -0
  128. package/dist/{ganttDiagram-JELNMOA3-NTOuNWeT.js → ganttDiagram-JELNMOA3-AfDhh9CI.js} +10 -10
  129. package/dist/gas-3H4_FaS8.js +4 -0
  130. package/dist/gherkin-PEA2uy50.js +4 -0
  131. package/dist/{gitGraph-F6HP7TQM-DfRNsaDw.js → gitGraph-G5XIXVHT-C0o6gecv.js} +3 -3
  132. package/dist/{gitGraphDiagram-NY62KEGX-CYke62Ot.js → gitGraphDiagram-V2S2FVAM-BRSwuj0Q.js} +17 -17
  133. package/dist/{glide-data-editor-DttqGjrT.js → glide-data-editor-ByPNTNVG.js} +7 -7
  134. package/dist/graphlib-DZnBMcsX.js +228 -0
  135. package/dist/groovy-DZzbvCP1.js +4 -0
  136. package/dist/haskell-CExLTzho.js +4 -0
  137. package/dist/haxe-f3pVb8qU.js +5 -0
  138. package/dist/idl-BbWlJ0gk.js +4 -0
  139. package/dist/{info-NVLQJR56-CUaoPtis.js → info-VBDWY6EO-Bzsods6X.js} +3 -3
  140. package/dist/infoDiagram-HS3SLOUP-Cmxo6jKx.js +30 -0
  141. package/dist/{_baseFor-B69PDbIz.js → isArrayLikeObject-Btu-i6_P.js} +216 -44
  142. package/dist/{isEmpty-6z2uv6gM.js → isEmpty-CZvUtYFp.js} +2 -2
  143. package/dist/{isString-D6abkXrl.js → isString-CBr7TEb7.js} +1 -1
  144. package/dist/{isSymbol-hk7foJ70.js → isSymbol-BuQsMXhk.js} +1 -1
  145. package/dist/javascript-eMOhp6Aq.js +4 -0
  146. package/dist/{journeyDiagram-XKPGCS4Q-ahXD97kr.js → journeyDiagram-XKPGCS4Q-CKYr8cSR.js} +7 -7
  147. package/dist/julia-C6w3Rvqb.js +4 -0
  148. package/dist/{kanban-definition-3W4ZIXB7-CiTIpnhy.js → kanban-definition-3W4ZIXB7-DVvAZzQD.js} +12 -12
  149. package/dist/{katex-DaGuLbVh.js → katex-pyO_klYC.js} +1 -1
  150. package/dist/{label-Cc5tEavt.js → label-CV0KYhtH.js} +4 -10
  151. package/dist/{line-Bc27KE1D.js → line-C1k1rG3Z.js} +3 -3
  152. package/dist/{linear-Bnc6E9kA.js → linear-DIp6l9sg.js} +4 -4
  153. package/dist/livescript-ChQl9lD-.js +4 -0
  154. package/dist/{loader-Cob3XFOw.js → loader-eJCvvApN.js} +2 -2
  155. package/dist/lua-CiDvI96j.js +4 -0
  156. package/dist/main-Tj_-QTyF.js +4321 -0
  157. package/dist/main.js +2025 -5032
  158. package/dist/mathematica-ClVO4k7N.js +4 -0
  159. package/dist/mbox-BEI7DeUg.js +4 -0
  160. package/dist/{memoize-Ckyqzyu_.js → memoize-P1T1IGb9.js} +1 -1
  161. package/dist/merge-CGQkMGzr.js +51 -0
  162. package/dist/{mermaid-4DMBBIKO-BmJdHPwx.js → mermaid-4DMBBIKO-PVrJfEpX.js} +1 -1
  163. package/dist/{mermaid-B5xl_2hx.js → mermaid-COOB_abB.js} +46 -46
  164. package/dist/{mermaid-parser.core-BXj7Il0J.js → mermaid-parser.core-Cd-wu4tE.js} +8 -8
  165. package/dist/{mhchem-B_tiMbKF.js → mhchem-DckvwtV8.js} +1 -1
  166. package/dist/min-CMDDtXJP.js +89 -0
  167. package/dist/{mindmap-definition-VGOIOE7T-Mni766A_.js → mindmap-definition-VGOIOE7T-1ExmnvYy.js} +14 -14
  168. package/dist/mirc-DwidJ3iH.js +4 -0
  169. package/dist/mllike-Dspdy0xJ.js +6 -0
  170. package/dist/modelica-CIUejP-L.js +4 -0
  171. package/dist/mscgen-BWXU4Omp.js +6 -0
  172. package/dist/mumps-PHFFoPk5.js +4 -0
  173. package/dist/now-BxlRp0OQ.js +7 -0
  174. package/dist/nsis-B7xooKLf.js +4 -0
  175. package/dist/{nsis-B6EN9LWI.js → nsis-BrAITej_.js} +1 -1
  176. package/dist/ntriples-DnOgtCzG.js +4 -0
  177. package/dist/{number-overlay-editor-DKVJgXpp.js → number-overlay-editor-CQrncFlP.js} +1 -1
  178. package/dist/octave-Cn5kH_QT.js +4 -0
  179. package/dist/{once-C9dA9qgQ.js → once-BqS42WgZ.js} +1 -1
  180. package/dist/{ordinal-DLLbwLkP.js → ordinal-Dcvf4J1m.js} +1 -1
  181. package/dist/oz-DR-sROpu.js +4 -0
  182. package/dist/{packet-BFZMPI3H-DHtQCusE.js → packet-DYOGHKS2-Bf1CvFco.js} +3 -3
  183. package/dist/pascal-CPKK1zcS.js +4 -0
  184. package/dist/perl-D7FuFdyd.js +4 -0
  185. package/dist/{pie-7BOR55EZ-2sVLYbpR.js → pie-VRWISCQL-LY_wbqji.js} +3 -3
  186. package/dist/{pieDiagram-ADFJNKIX-PbXpgT8_.js → pieDiagram-ADFJNKIX-CJlIsdsU.js} +22 -22
  187. package/dist/pig-CEXnOAnI.js +4 -0
  188. package/dist/powershell-BKvWab7q.js +4 -0
  189. package/dist/{precisionRound-Duzbr5ur.js → precisionRound-BAc-kQ3q.js} +1 -1
  190. package/dist/properties-7jnK_vYx.js +4 -0
  191. package/dist/protobuf-4rslMjEN.js +4 -0
  192. package/dist/pug-BVwdEv4r.js +4 -0
  193. package/dist/{pug-xrm7jQ2R.js → pug-CH-17az-.js} +1 -1
  194. package/dist/puppet-iSHg_1Z2.js +4 -0
  195. package/dist/python-tK3wUCn0.js +4 -0
  196. package/dist/q-DP_Dcoox.js +4 -0
  197. package/dist/{quadrantDiagram-AYHSOK5B-BtXGnx8i.js → quadrantDiagram-AYHSOK5B-BU78RiaH.js} +5 -5
  198. package/dist/r-C32wHLYu.js +4 -0
  199. package/dist/{radar-NHE76QYJ-Be0pEUux.js → radar-ZZBFDIW7-Ro3iXZCk.js} +3 -3
  200. package/dist/range-Dh0_-r8P.js +30 -0
  201. package/dist/{react-vega-CCNu2JE0.js → react-vega-C6kwcd86.js} +18 -18
  202. package/dist/react-vega-CFUuchds.js +9 -0
  203. package/dist/reduce-BXFHs7IQ.js +268 -0
  204. package/dist/{requirementDiagram-UZGBJVZJ-DxzXQRgq.js → requirementDiagram-UZGBJVZJ-DACHtrFr.js} +14 -14
  205. package/dist/rpm-BbDBUfs9.js +5 -0
  206. package/dist/ruby-COfWUiIr.js +4 -0
  207. package/dist/{sankeyDiagram-TZEHDZUN-D-I7dJ0_.js → sankeyDiagram-TZEHDZUN-Bzg7_UWs.js} +5 -5
  208. package/dist/sas-y_Hue2-X.js +4 -0
  209. package/dist/scheme-7jTCqHw8.js +4 -0
  210. package/dist/{sequenceDiagram-WL72ISMW-VDme2ljw.js → sequenceDiagram-WL72ISMW-agybEe9J.js} +8 -8
  211. package/dist/shell-DAqJWXDk.js +4 -0
  212. package/dist/sieve-EaqnbCO3.js +4 -0
  213. package/dist/slides-component-B0yK5GXP.js +3057 -0
  214. package/dist/smalltalk-DL03YKLJ.js +4 -0
  215. package/dist/sparql-DTA-tQ_q.js +4 -0
  216. package/dist/{spec-GwhMEXwK.js → spec-Dq_reDGM.js} +4 -4
  217. package/dist/{src-jICM_d2B.js → src-CHUphWwL.js} +1 -1
  218. package/dist/{stateDiagram-FKZM4ZOC-g3GI1EcK.js → stateDiagram-FKZM4ZOC-DehQAt8g.js} +19 -19
  219. package/dist/stateDiagram-v2-4FDKWEC3-8VzeREl9.js +29 -0
  220. package/dist/{step-BqVgkWtk.js → step-BbmiiQdf.js} +1 -1
  221. package/dist/stex-KfRnSHzF.js +4 -0
  222. package/dist/style.css +1 -1
  223. package/dist/stylus-CfjeFry_.js +4 -0
  224. package/dist/swift-Dl0RRDbH.js +4 -0
  225. package/dist/tcl-wv9O7fLZ.js +4 -0
  226. package/dist/textile-DzMRCBcV.js +4 -0
  227. package/dist/{time-CrYsYnQU.js → time-DFFVNc1Q.js} +4 -4
  228. package/dist/{timeline-definition-IT6M3QCI-bhvLlX_b.js → timeline-definition-IT6M3QCI-CdCfdaCF.js} +4 -4
  229. package/dist/toNumber-By7s5JC_.js +28 -0
  230. package/dist/{toString-BwTJvlyD.js → toString-Ckpb50uw.js} +8 -8
  231. package/dist/toml-CyIWqgbe.js +4 -0
  232. package/dist/{treemap-KMMF4GRG-Ba9ifjpG.js → treemap-GDKQZRPO-DRxfDG65.js} +3 -3
  233. package/dist/troff-_huin_CY.js +4 -0
  234. package/dist/ttcn-BEiJuYYc.js +4 -0
  235. package/dist/ttcn-cfg-DB6Ksh67.js +4 -0
  236. package/dist/turtle-DzhzGEum.js +4 -0
  237. package/dist/{types-Dsh6yC4B.js → types-BwnzGcE4.js} +31 -32
  238. package/dist/uniq-cCc07Q8K.js +8 -0
  239. package/dist/{useAsyncData-BPpyKjTJ.js → useAsyncData-B4hMFGnF.js} +2 -2
  240. package/dist/{useDeepCompareMemoize-C8Ms87P-.js → useDeepCompareMemoize-DuPhOXzr.js} +3 -3
  241. package/dist/{useIframeCapabilities-C7z8VrZ1.js → useIframeCapabilities-CAt6D2EI.js} +1 -1
  242. package/dist/{useTheme-Cq-gIssy.js → useTheme-BNYQnvu-.js} +2 -2
  243. package/dist/vb-CngKZQHu.js +4 -0
  244. package/dist/vbscript-BV_8nbeM.js +4 -0
  245. package/dist/{vega-component-B5sxdjMq.js → vega-component-DouPy8AI.js} +12 -15
  246. package/dist/{vega-loader.browser-DqHiiBeQ.js → vega-loader.browser-CQ-lnUkI.js} +3 -3
  247. package/dist/velocity-IqE7qYKE.js +4 -0
  248. package/dist/verilog-xtyaWTnc.js +4 -0
  249. package/dist/vhdl-BaqXCtf3.js +4 -0
  250. package/dist/webidl-BDB8PTTO.js +4 -0
  251. package/dist/xquery-BIC-qj9Z.js +4 -0
  252. package/dist/{xychartDiagram-PRI3JC2R-CFxuifYY.js → xychartDiagram-PRI3JC2R-rEm_SIsC.js} +13 -13
  253. package/dist/yacas-ifv5tftd.js +4 -0
  254. package/dist/z80-B8zOMVNt.js +4 -0
  255. package/package.json +11 -11
  256. package/src/__mocks__/requests.ts +2 -0
  257. package/src/components/app-config/ai-config.tsx +1 -1
  258. package/src/components/app-config/user-config-form.tsx +27 -0
  259. package/src/components/data-table/__tests__/pagination.test.tsx +16 -24
  260. package/src/components/data-table/charts/lazy-chart.tsx +1 -1
  261. package/src/components/data-table/data-table.tsx +20 -18
  262. package/src/components/data-table/pagination.tsx +138 -56
  263. package/src/components/data-table/range-focus/__tests__/cell-selection-stats.test.tsx +365 -0
  264. package/src/components/data-table/range-focus/__tests__/test-utils.ts +77 -0
  265. package/src/components/data-table/range-focus/__tests__/utils.test.ts +205 -65
  266. package/src/components/data-table/range-focus/cell-selection-stats.tsx +79 -0
  267. package/src/components/data-table/range-focus/utils.ts +69 -7
  268. package/src/components/data-table/types.ts +4 -0
  269. package/src/components/databases/engine-variable.tsx +2 -1
  270. package/src/components/databases/icons/google-cloud-storage.svg +38 -0
  271. package/src/components/datasources/components.tsx +6 -2
  272. package/src/components/dependency-graph/minimap-content.tsx +3 -5
  273. package/src/components/dependency-graph/utils/__tests__/cell-preview.test.ts +143 -0
  274. package/src/components/dependency-graph/utils/cell-preview.ts +46 -0
  275. package/src/components/editor/Output.tsx +3 -28
  276. package/src/components/editor/cell/cell-actions.tsx +6 -5
  277. package/src/components/editor/cell/cell-context-menu.tsx +11 -7
  278. package/src/components/editor/chrome/panels/components.tsx +88 -0
  279. package/src/components/editor/chrome/panels/file-explorer-panel.tsx +120 -7
  280. package/src/components/editor/chrome/panels/outline/floating-outline.tsx +27 -15
  281. package/src/components/editor/chrome/panels/session-panel.tsx +24 -35
  282. package/src/components/editor/file-tree/__tests__/requesting-tree.test.ts +17 -1
  283. package/src/components/editor/file-tree/file-explorer.tsx +38 -6
  284. package/src/components/editor/file-tree/file-header.tsx +61 -0
  285. package/src/components/editor/file-tree/file-viewer.tsx +88 -167
  286. package/src/components/editor/file-tree/renderers.tsx +142 -21
  287. package/src/components/editor/file-tree/requesting-tree.tsx +6 -2
  288. package/src/components/editor/output/console/ConsoleOutput.tsx +34 -2
  289. package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +13 -0
  290. package/src/components/icons/marimo-icons.tsx +173 -0
  291. package/src/components/markdown/markdown-renderer.tsx +3 -20
  292. package/src/components/pages/run-page.tsx +2 -2
  293. package/src/components/storage/components.tsx +86 -0
  294. package/src/components/storage/storage-file-viewer.tsx +225 -0
  295. package/src/components/storage/storage-inspector.tsx +610 -0
  296. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +79 -0
  297. package/src/core/ai/tools/edit-notebook-tool.ts +5 -0
  298. package/src/core/cells/__tests__/cells.test.ts +30 -0
  299. package/src/core/cells/cells.ts +6 -1
  300. package/src/core/cells/outline.ts +7 -1
  301. package/src/core/cells/outputs.ts +20 -8
  302. package/src/core/codemirror/language/languages/sql/sql.ts +76 -62
  303. package/src/core/codemirror/language/panel/sql.tsx +3 -3
  304. package/src/core/codemirror/lsp/__tests__/normalize-markdown-math.test.ts +123 -0
  305. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +196 -0
  306. package/src/core/codemirror/lsp/normalize-markdown-math.ts +381 -0
  307. package/src/core/codemirror/lsp/notebook-lsp.ts +59 -3
  308. package/src/core/config/feature-flag.tsx +2 -0
  309. package/src/core/dom/__tests__/outline.test.ts +48 -0
  310. package/src/core/dom/outline.ts +13 -2
  311. package/src/core/islands/bridge.ts +2 -0
  312. package/src/core/islands/main.ts +2 -0
  313. package/src/core/network/requests-lazy.ts +2 -0
  314. package/src/core/network/requests-network.ts +16 -0
  315. package/src/core/network/requests-static.ts +2 -0
  316. package/src/core/network/requests-toasting.tsx +2 -0
  317. package/src/core/network/types.ts +6 -0
  318. package/src/core/storage/__tests__/state.test.ts +345 -0
  319. package/src/core/storage/__tests__/types.test.ts +83 -0
  320. package/src/core/storage/__tests__/useStorageEntries.test.tsx +187 -0
  321. package/src/core/storage/request-registry.ts +36 -0
  322. package/src/core/storage/state.ts +132 -0
  323. package/src/core/storage/types.ts +57 -0
  324. package/src/core/wasm/bridge.ts +2 -0
  325. package/src/core/websocket/useMarimoKernelConnection.tsx +19 -1
  326. package/src/hooks/__tests__/useNonce.test.tsx +127 -0
  327. package/src/hooks/__tests__/useOverflowDetection.test.tsx +127 -0
  328. package/src/hooks/useNonce.ts +6 -5
  329. package/src/hooks/useOverflowDetection.ts +36 -0
  330. package/src/plugins/impl/MatrixPlugin.tsx +5 -2
  331. package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +1 -1
  332. package/src/plugins/impl/code/any-language-editor.tsx +14 -3
  333. package/src/plugins/impl/matplotlib/__tests__/matplotlib-renderer.test.ts +37 -2
  334. package/src/plugins/impl/matplotlib/matplotlib-renderer.ts +13 -1
  335. package/src/utils/__tests__/filenames.test.ts +54 -1
  336. package/src/utils/filenames.ts +42 -0
  337. package/dist/apl-C1bki_dE.js +0 -4
  338. package/dist/architecture-U656AL7Q-Jd2CvPgJ.js +0 -6
  339. package/dist/asciiarmor-BdlkCCRr.js +0 -4
  340. package/dist/asn1-CvE30hox.js +0 -4
  341. package/dist/brainfuck-BalwWy1a.js +0 -4
  342. package/dist/classDiagram-2ON5EDUG-CUJlS_eo.js +0 -30
  343. package/dist/classDiagram-v2-WZHVMYZB-BhSPpbkE.js +0 -30
  344. package/dist/clojure-CUC2I1hM.js +0 -4
  345. package/dist/cmake-8PcMxXnB.js +0 -4
  346. package/dist/cobol-DkkkDz5v.js +0 -4
  347. package/dist/coffeescript-CCupxOZf.js +0 -4
  348. package/dist/commonlisp-DhUfGX6b.js +0 -4
  349. package/dist/crystal-DSaw6rFQ.js +0 -4
  350. package/dist/css-D4QDewkG.js +0 -4
  351. package/dist/cypher-CrYVqw_F.js +0 -4
  352. package/dist/d-Cr3H3pPx.js +0 -4
  353. package/dist/diff-ODiZJGls.js +0 -4
  354. package/dist/dist-BA-HK7pI.js +0 -5
  355. package/dist/dist-BD5GU948.js +0 -5
  356. package/dist/dist-BIYmAsND.js +0 -5
  357. package/dist/dist-BcKTJXJi.js +0 -5
  358. package/dist/dist-BgnrtcWg.js +0 -8
  359. package/dist/dist-C1njTlBq.js +0 -5
  360. package/dist/dist-CSKHwJYH.js +0 -5
  361. package/dist/dist-CSKKyiIq.js +0 -5
  362. package/dist/dist-CrQ_pOuK.js +0 -6
  363. package/dist/dist-Cskx1daf.js +0 -5
  364. package/dist/dist-D4i0Ef34.js +0 -8
  365. package/dist/dist-DOcn61TX.js +0 -8
  366. package/dist/dist-DwMejAPB.js +0 -6
  367. package/dist/dist-DzSe1wby.js +0 -8
  368. package/dist/dtd-C-t2Rk7F.js +0 -4
  369. package/dist/dylan-B4ctBLGp.js +0 -4
  370. package/dist/ecl-DqWfymni.js +0 -4
  371. package/dist/eiffel-DjBKKAr7.js +0 -4
  372. package/dist/elm--fxeC0FV.js +0 -4
  373. package/dist/erlang-CaKXCX6H.js +0 -4
  374. package/dist/factor-DlLO5EFS.js +0 -4
  375. package/dist/flatten-CWZjF1fc.js +0 -8
  376. package/dist/forth-rOO6LVj_.js +0 -4
  377. package/dist/fortran-CUg15VGR.js +0 -4
  378. package/dist/gas-BMRJspiW.js +0 -4
  379. package/dist/gherkin-DRxzijZU.js +0 -4
  380. package/dist/graphlib-CwMnCnQ9.js +0 -362
  381. package/dist/groovy-BmrQ8pUP.js +0 -4
  382. package/dist/haskell-BuaYfKOz.js +0 -4
  383. package/dist/haxe-DcH9eA0a.js +0 -5
  384. package/dist/idl-DGlcm4Ls.js +0 -4
  385. package/dist/infoDiagram-WHAUD3N6-B42WjAPh.js +0 -30
  386. package/dist/javascript-CeTk7rzr.js +0 -4
  387. package/dist/julia-BoP_q1gm.js +0 -4
  388. package/dist/livescript-B7IMN-ba.js +0 -4
  389. package/dist/lua-q1InavKb.js +0 -4
  390. package/dist/main-DmxVpB19.js +0 -1089
  391. package/dist/mathematica-DvR8-_EI.js +0 -4
  392. package/dist/mbox-7h5MNBS_.js +0 -4
  393. package/dist/merge-Db4Uulx4.js +0 -222
  394. package/dist/min-ypdVXicC.js +0 -38
  395. package/dist/mirc-D-XM8A5c.js +0 -4
  396. package/dist/mllike-BQGkkbmf.js +0 -6
  397. package/dist/modelica-D_yRj_WU.js +0 -4
  398. package/dist/mscgen-B-rltAjp.js +0 -6
  399. package/dist/mumps-2kh8TU2b.js +0 -4
  400. package/dist/now-Dwu5ou19.js +0 -31
  401. package/dist/nsis-CtusEqwb.js +0 -4
  402. package/dist/ntriples-BdAXw6zV.js +0 -4
  403. package/dist/octave-CsNFmVp5.js +0 -4
  404. package/dist/oz-odIXCrKd.js +0 -4
  405. package/dist/pascal-B9Mfk3Fo.js +0 -4
  406. package/dist/perl-C48inLcz.js +0 -4
  407. package/dist/pig-uwRtAssU.js +0 -4
  408. package/dist/powershell-CXqlca-i.js +0 -4
  409. package/dist/properties-D6Zu1rpK.js +0 -4
  410. package/dist/protobuf-BlNNWZaR.js +0 -4
  411. package/dist/pug-DytcK7bv.js +0 -4
  412. package/dist/puppet-lJ8Ok3iY.js +0 -4
  413. package/dist/python-cMaF7kUp.js +0 -4
  414. package/dist/q-Dgt2HYQh.js +0 -4
  415. package/dist/r-Bm4S4awf.js +0 -4
  416. package/dist/range-D9jxVFd_.js +0 -67
  417. package/dist/react-vega-1ub36dPZ.js +0 -9
  418. package/dist/reduce-C6NEPj6s.js +0 -133
  419. package/dist/rpm-_8LbzMVc.js +0 -5
  420. package/dist/ruby-Cr8IJ5VZ.js +0 -4
  421. package/dist/sas-CFcSfo2_.js +0 -4
  422. package/dist/scheme-N4XRoKgc.js +0 -4
  423. package/dist/shell-B4L7f_ds.js +0 -4
  424. package/dist/sieve-UI6J3Gm0.js +0 -4
  425. package/dist/slides-component-ql7-5GDI.js +0 -3048
  426. package/dist/smalltalk-BuaPZAZU.js +0 -4
  427. package/dist/sparql-1rKrq463.js +0 -4
  428. package/dist/stateDiagram-v2-4FDKWEC3-7i6jBXe6.js +0 -29
  429. package/dist/stex-D2rme5UG.js +0 -4
  430. package/dist/stylus-DvSovJEP.js +0 -4
  431. package/dist/swift-D-_E7Yyb.js +0 -4
  432. package/dist/tcl-Di5sAVHN.js +0 -4
  433. package/dist/textile-Benwt66z.js +0 -4
  434. package/dist/toml-CeOvPOkY.js +0 -4
  435. package/dist/troff-DJN9hfgu.js +0 -4
  436. package/dist/ttcn-DQW2Psjf.js +0 -4
  437. package/dist/ttcn-cfg-zFG_MNpg.js +0 -4
  438. package/dist/turtle-DHRyNlSc.js +0 -4
  439. package/dist/vb-CXWH9DD-.js +0 -4
  440. package/dist/vbscript-qr8qVck5.js +0 -4
  441. package/dist/velocity-C_9pUJRx.js +0 -4
  442. package/dist/verilog-DxBstgBa.js +0 -4
  443. package/dist/vhdl-odUxAbE6.js +0 -4
  444. package/dist/webidl-Dfn5Rku4.js +0 -4
  445. package/dist/xquery-CrJs6SXr.js +0 -4
  446. package/dist/yacas-B-uDDLZe.js +0 -4
  447. package/dist/z80-51gxgAXE.js +0 -4
  448. /package/dist/{ImageComparisonComponent-CRbA-1eg.js → ImageComparisonComponent-BYQfAfSR.js} +0 -0
  449. /package/dist/{Plot-C9vQQj4X.js → Plot-DfUav0o0.js} +0 -0
  450. /package/dist/{_arrayReduce-REKcIEj3.js → _arrayReduce-BfFy684W.js} +0 -0
  451. /package/dist/{_hasUnicode-DrSAc5A5.js → _hasUnicode-C32WqUu7.js} +0 -0
  452. /package/dist/{apl-Oc3bL26_.js → apl-DRxKiEot.js} +0 -0
  453. /package/dist/{array-CEIRxyh3.js → array-D-nrDupM.js} +0 -0
  454. /package/dist/{asciiarmor-DTbPh2VI.js → asciiarmor-C8HoXFIm.js} +0 -0
  455. /package/dist/{asn1-CGhwu1Ri.js → asn1-9Bo0DYT-.js} +0 -0
  456. /package/dist/{asterisk-Crp-Pien.js → asterisk-BsiuGzWq.js} +0 -0
  457. /package/dist/{brainfuck-CA0L8lRq.js → brainfuck-Db8njC-p.js} +0 -0
  458. /package/dist/{click-outside-container-C_k38vlR.js → click-outside-container-CKfwEZqH.js} +0 -0
  459. /package/dist/{clike-CEtUBPHD.js → clike-CFhUNtI5.js} +0 -0
  460. /package/dist/{clojure-BszjvdGo.js → clojure-CX7oovsp.js} +0 -0
  461. /package/dist/{cmake-B2Gvps8b.js → cmake-C29AR2kk.js} +0 -0
  462. /package/dist/{cobol-DuMch8nn.js → cobol-CNkuRW9i.js} +0 -0
  463. /package/dist/{coffeescript-L9aKXVsJ.js → coffeescript-BJAbfGam.js} +0 -0
  464. /package/dist/{colors-DR_aHfmQ.js → colors-6nB_pSln.js} +0 -0
  465. /package/dist/{common-keywords-NhoiR-2S.js → common-keywords-BAkLFdud.js} +0 -0
  466. /package/dist/{commonlisp-CrtdssxB.js → commonlisp-BTNhj2l9.js} +0 -0
  467. /package/dist/{crystal-vvNY0LpY.js → crystal-CZc0nIm9.js} +0 -0
  468. /package/dist/{css-B1GdzqT1.js → css-L2-0OTXc.js} +0 -0
  469. /package/dist/{cypher-BtZvV7bW.js → cypher-Dnc6MXl0.js} +0 -0
  470. /package/dist/{cytoscape.esm-CgJFiP_E.js → cytoscape.esm-BXzSsA6N.js} +0 -0
  471. /package/dist/{d-B0UN3V-Z.js → d-C6X9iIga.js} +0 -0
  472. /package/dist/{defaultLocale-DjFHq3Xk.js → defaultLocale-Bklbu-Tp.js} +0 -0
  473. /package/dist/{defaultLocale-B_A76Zpk.js → defaultLocale-CfQ4kBaV.js} +0 -0
  474. /package/dist/{diff-DOpgjj1W.js → diff-ZzKinYqY.js} +0 -0
  475. /package/dist/{dist-BYznkC5E.js → dist-Bymy0kEH.js} +0 -0
  476. /package/dist/{dtd-Ctnjxrle.js → dtd-CytEpkAo.js} +0 -0
  477. /package/dist/{duckdb-keywords-BnNtuiVz.js → duckdb-keywords-C1WxmSfG.js} +0 -0
  478. /package/dist/{dylan-DFXkoaZy.js → dylan-CZByFBEQ.js} +0 -0
  479. /package/dist/{ebnf-CFKHGc8c.js → ebnf-BF2FOt-m.js} +0 -0
  480. /package/dist/{ecl-C1NExZip.js → ecl-Cp7L1F5B.js} +0 -0
  481. /package/dist/{eiffel-uXVGgleg.js → eiffel-C66yjnFL.js} +0 -0
  482. /package/dist/{elm-CBOFnnib.js → elm-DtHo-73e.js} +0 -0
  483. /package/dist/{emotion-is-prop-valid.esm--WpIBtj8.js → emotion-is-prop-valid.esm-DtW2o230.js} +0 -0
  484. /package/dist/{erlang-DMnrT8XK.js → erlang-C_sj44mF.js} +0 -0
  485. /package/dist/{error-banner-vCG-EbUQ.js → error-banner-D0tXnwl4.js} +0 -0
  486. /package/dist/{esm-0_ieXYNc.js → esm-BWftfC-A.js} +0 -0
  487. /package/dist/{fcl-DPZwieM9.js → fcl-BhLcvRo_.js} +0 -0
  488. /package/dist/{forth-DDpxS4nw.js → forth-CIDHh56T.js} +0 -0
  489. /package/dist/{fortran-B6uYqQMz.js → fortran-BQrDVXRU.js} +0 -0
  490. /package/dist/{gas-BKnWzuFz.js → gas-D4HQPB0Q.js} +0 -0
  491. /package/dist/{gherkin-pBt0wT4X.js → gherkin-UB2gJHdT.js} +0 -0
  492. /package/dist/{groovy-DKsn4ppB.js → groovy-DVz6jkOx.js} +0 -0
  493. /package/dist/{haskell-BJVBJQcy.js → haskell-CpUdAPCz.js} +0 -0
  494. /package/dist/{haxe-rLN5UZU5.js → haxe-DCV5_cqD.js} +0 -0
  495. /package/dist/{http-AQJFxSug.js → http-C_TDb8VX.js} +0 -0
  496. /package/dist/{idl-B4mwMAo-.js → idl-D7WCIgHw.js} +0 -0
  497. /package/dist/{init-TaqZJsBY.js → init-Ci8VD8ZH.js} +0 -0
  498. /package/dist/{invariant-D-K49MfV.js → invariant-D9QLJ4SZ.js} +0 -0
  499. /package/dist/{javascript-Hf2NLNC0.js → javascript-B2Rn0Lmd.js} +0 -0
  500. /package/dist/{julia-GGpx21YN.js → julia-ApprtEaw.js} +0 -0
  501. /package/dist/{katex-Ba7xZPrx.js → katex-Bk_FvVSR.js} +0 -0
  502. /package/dist/{livescript-CSvXMspZ.js → livescript-BMLIlM7C.js} +0 -0
  503. /package/dist/{lua-CVMR5LMW.js → lua-DdDaW3tC.js} +0 -0
  504. /package/dist/{math-CTnb-N1W.js → math-HUZifhTs.js} +0 -0
  505. /package/dist/{mathematica-JENNt-p4.js → mathematica-PnNN7c2Z.js} +0 -0
  506. /package/dist/{mbox-mzifoc8E.js → mbox-B84OtHBK.js} +0 -0
  507. /package/dist/{mirc-BXoiItvN.js → mirc-BVWXJxIq.js} +0 -0
  508. /package/dist/{mllike-H-KR9OuH.js → mllike-BawXWupH.js} +0 -0
  509. /package/dist/{modelica-B6Hm3mMl.js → modelica-C8-X4Hf_.js} +0 -0
  510. /package/dist/{mscgen-D8TF_Hei.js → mscgen-BOM6dDj8.js} +0 -0
  511. /package/dist/{mumps-CD-kNPt4.js → mumps-DQOY8n05.js} +0 -0
  512. /package/dist/{nginx-hpek_Tnq.js → nginx-DkMgA__9.js} +0 -0
  513. /package/dist/{node-sql-parser-ChQUJk8A.js → node-sql-parser-D53LM_7b.js} +0 -0
  514. /package/dist/{ntriples-DgnpxU40.js → ntriples-DU8VrXdW.js} +0 -0
  515. /package/dist/{octave-CkobqyVm.js → octave-BzTIBsQ8.js} +0 -0
  516. /package/dist/{oz-ChDLd9tS.js → oz-DKFcZsoi.js} +0 -0
  517. /package/dist/{pascal-CvlkwK7E.js → pascal-DHBZ15pT.js} +0 -0
  518. /package/dist/{path-7gr7eZmp.js → path-BVI7RNUv.js} +0 -0
  519. /package/dist/{perl-BNEFTNbM.js → perl-75NMI3w0.js} +0 -0
  520. /package/dist/{pig-Cd1DMS7P.js → pig-B-HY1fo_.js} +0 -0
  521. /package/dist/{powershell-CPxA0zpc.js → powershell-DEH22U53.js} +0 -0
  522. /package/dist/{properties-BaFBm-Xa.js → properties-B1MzBoJC.js} +0 -0
  523. /package/dist/{protobuf-BQV_-X0H.js → protobuf-Dr14KV0p.js} +0 -0
  524. /package/dist/{puppet-LXLST0mx.js → puppet-C4z38l7v.js} +0 -0
  525. /package/dist/{purify.es-D4vaFt5N.js → purify.es-CyOIw8ru.js} +0 -0
  526. /package/dist/{python-DLjLzX4k.js → python-D2L7Nknt.js} +0 -0
  527. /package/dist/{q-DswTX1Y9.js → q-PxipHfgS.js} +0 -0
  528. /package/dist/{r-CO7NpMwE.js → r-CEMMu_Tf.js} +0 -0
  529. /package/dist/{range-DwpxnYuB.js → range-BToS7LsA.js} +0 -0
  530. /package/dist/{rpm-BlmEDT6r.js → rpm-D3xyahkR.js} +0 -0
  531. /package/dist/{ruby-BTPKgeZZ.js → ruby-DwEkwdiu.js} +0 -0
  532. /package/dist/{sas-DTDTiNO8.js → sas-L1W0BRft.js} +0 -0
  533. /package/dist/{scheme-UzAAg4GJ.js → scheme-CTybTrX0.js} +0 -0
  534. /package/dist/{shell-DQ0hQCsB.js → shell-BSx3LZnu.js} +0 -0
  535. /package/dist/{sieve-BVyYIx9u.js → sieve-BjUfbv-6.js} +0 -0
  536. /package/dist/{simple-mode-Dryu-fC9.js → simple-mode-IPZGFbI6.js} +0 -0
  537. /package/dist/{smalltalk-DAdMAHTu.js → smalltalk-BlzuYrMv.js} +0 -0
  538. /package/dist/{solr-BSTJW269.js → solr-Cj_9RM4d.js} +0 -0
  539. /package/dist/{sparql-Bi7quYgw.js → sparql-BXKjQ0cK.js} +0 -0
  540. /package/dist/{spreadsheet-CiBky1_y.js → spreadsheet-CifI10GO.js} +0 -0
  541. /package/dist/{sql-BXZovj-z.js → sql-B0bFyY1c.js} +0 -0
  542. /package/dist/{stex-DIvyJfNO.js → stex-BIsgBmK4.js} +0 -0
  543. /package/dist/{stylus-jhpzcQ6Y.js → stylus-CqrLLVnG.js} +0 -0
  544. /package/dist/{swift-BrO8qThZ.js → swift-DIqvj3_G.js} +0 -0
  545. /package/dist/{tcl-s5QI5gv3.js → tcl-B8bOIGVK.js} +0 -0
  546. /package/dist/{textile-ClhvJrxM.js → textile-DZsjavD_.js} +0 -0
  547. /package/dist/{tiddlywiki-DLTDKQCh.js → tiddlywiki-BbGdvEjx.js} +0 -0
  548. /package/dist/{tiki-tw_kBvbp.js → tiki-BYesmRDo.js} +0 -0
  549. /package/dist/{timer-DV8t68ti.js → timer-CPsmIOdm.js} +0 -0
  550. /package/dist/{toml-TFa3EJQE.js → toml-Uc7m08nl.js} +0 -0
  551. /package/dist/{treemap-CQJ0bIDy.js → treemap-DMn4tIJ7.js} +0 -0
  552. /package/dist/{troff-SqLg0heF.js → troff-GEl5wcXR.js} +0 -0
  553. /package/dist/{ttcn-cfg-Dopc-iwE.js → ttcn-cfg-dZQ_fWTH.js} +0 -0
  554. /package/dist/{ttcn-Cfrap7HJ.js → ttcn-pr4FDOLT.js} +0 -0
  555. /package/dist/{turtle-Dt52DvVH.js → turtle-TPRDOknA.js} +0 -0
  556. /package/dist/{vb-D1pAvfDe.js → vb-BJUAeTYr.js} +0 -0
  557. /package/dist/{vbscript-DZ7RBxn5.js → vbscript-CcJ6Z3ic.js} +0 -0
  558. /package/dist/{velocity-Csau7eZy.js → velocity-pq4ZMzU3.js} +0 -0
  559. /package/dist/{verilog-gXlZACs5.js → verilog-timMNjHt.js} +0 -0
  560. /package/dist/{vhdl-NaUWbI1B.js → vhdl-DYFbVKNm.js} +0 -0
  561. /package/dist/{webidl-BJmPjW01.js → webidl-pue9oqnb.js} +0 -0
  562. /package/dist/{xquery-CJIPsC0g.js → xquery-DeItGynK.js} +0 -0
  563. /package/dist/{yacas-8f2Vjiiz.js → yacas-By2Qrjba.js} +0 -0
  564. /package/dist/{z80-s5Xk2hCP.js → z80-C7iLsyPC.js} +0 -0
  565. /package/src/components/editor/file-tree/__tests__/{file-expolorer.test.ts → file-explorer.test.ts} +0 -0
@@ -279,6 +279,36 @@ describe("cell reducer", () => {
279
279
  `);
280
280
  });
281
281
 
282
+ it("undo delete restores cell config (hide_code, disabled)", () => {
283
+ actions.createNewCell({
284
+ cellId: firstCellId,
285
+ before: false,
286
+ code: "x = 1",
287
+ });
288
+ const newCellId = state.cellIds.getColumns()[0].atOrThrow(1);
289
+
290
+ // Set config to hidden and disabled
291
+ actions.updateCellConfig({
292
+ cellId: newCellId,
293
+ config: { hide_code: true, disabled: true },
294
+ });
295
+ expect(state.cellData[newCellId].config.hide_code).toBe(true);
296
+ expect(state.cellData[newCellId].config.disabled).toBe(true);
297
+
298
+ // Delete the cell
299
+ actions.deleteCell({ cellId: newCellId });
300
+ expect(state.cellIds.inOrderIds).not.toContain(newCellId);
301
+
302
+ // Undo delete
303
+ actions.undoDeleteCell();
304
+ const restoredCellId =
305
+ state.cellIds.inOrderIds[state.cellIds.inOrderIds.length - 1];
306
+
307
+ // Config should be preserved
308
+ expect(state.cellData[restoredCellId].config.hide_code).toBe(true);
309
+ expect(state.cellData[restoredCellId].config.disabled).toBe(true);
310
+ });
311
+
282
312
  it("can update a cell", () => {
283
313
  actions.updateCellCode({
284
314
  cellId: firstCellId,
@@ -84,6 +84,7 @@ export interface NotebookState {
84
84
  column: CellColumnId;
85
85
  index: CellIndex;
86
86
  isSetupCell: boolean;
87
+ config: CellConfig;
87
88
  }[];
88
89
  /**
89
90
  * Key of cell to scroll to; typically set by actions that re-order the cell
@@ -590,17 +591,19 @@ const {
590
591
 
591
592
  // release the granular atom(s) created for this cell
592
593
  releaseCellAtoms(cellId);
594
+ const prevData = state.cellData[cellId];
593
595
  return {
594
596
  ...state,
595
597
  cellIds: state.cellIds.deleteById(cellId),
596
598
  history: [
597
599
  ...state.history,
598
600
  {
599
- name: state.cellData[cellId].name,
601
+ name: prevData.name,
600
602
  serializedEditorState: serializedEditorState,
601
603
  column: column.id,
602
604
  index: cellIndex,
603
605
  isSetupCell: cellId === SETUP_CELL_ID,
606
+ config: prevData.config,
604
607
  },
605
608
  ],
606
609
  scrollKey: scrollKey,
@@ -619,6 +622,7 @@ const {
619
622
  column,
620
623
  index,
621
624
  isSetupCell,
625
+ config,
622
626
  } = mostRecentlyDeleted;
623
627
 
624
628
  const cellId = isSetupCell ? SETUP_CELL_ID : CellId.create();
@@ -628,6 +632,7 @@ const {
628
632
  code: serializedEditorState.doc,
629
633
  edited: serializedEditorState.doc.trim().length > 0,
630
634
  serializedEditorState,
635
+ config,
631
636
  });
632
637
 
633
638
  return {
@@ -5,9 +5,15 @@
5
5
  */
6
6
  export interface OutlineItem {
7
7
  /**
8
- * The human-readable heading name.
8
+ * The human-readable heading name (plain text).
9
9
  */
10
10
  name: string;
11
+ /**
12
+ * The heading's inner HTML, preserving rich content like LaTeX.
13
+ * When present and different from `name`, the outline should
14
+ * render this instead of the plain-text `name`.
15
+ */
16
+ html?: string;
11
17
  /**
12
18
  * Locator of the item.
13
19
  *
@@ -1,22 +1,34 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { useState } from "react";
3
+ import { useEffect, useState } from "react";
4
4
  import type { OutputMessage } from "../kernel/messages";
5
5
  import type { CellId } from "./ids";
6
6
 
7
7
  // This does not need to be overcomplicated. We can just store the expanded
8
8
  // state in a global map instead of Jotai since state is not shared between cells.
9
9
  const expandedOutputs: Record<CellId, boolean> = {};
10
+ const expandedConsoleOutputs: Record<CellId, boolean> = {};
10
11
 
11
12
  export function useExpandedOutput(cellId: CellId) {
12
13
  const [state, setState] = useState(expandedOutputs[cellId] ?? false);
13
- return [
14
- state,
15
- (expanded: boolean) => {
16
- setState(expanded);
17
- expandedOutputs[cellId] = expanded;
18
- },
19
- ] as const;
14
+
15
+ // Sync state to external storage
16
+ useEffect(() => {
17
+ expandedOutputs[cellId] = state;
18
+ }, [cellId, state]);
19
+
20
+ return [state, setState] as const;
21
+ }
22
+
23
+ export function useExpandedConsoleOutput(cellId: CellId) {
24
+ const [state, setState] = useState(expandedConsoleOutputs[cellId] ?? false);
25
+
26
+ // Sync state to external storage
27
+ useEffect(() => {
28
+ expandedConsoleOutputs[cellId] = state;
29
+ }, [cellId, state]);
30
+
31
+ return [state, setState] as const;
20
32
  }
21
33
 
22
34
  export function isOutputEmpty(
@@ -5,7 +5,12 @@ import { insertTab } from "@codemirror/commands";
5
5
  import { type SQLDialect, type SQLNamespace, sql } from "@codemirror/lang-sql";
6
6
  import type { EditorState, Extension } from "@codemirror/state";
7
7
  import { Compartment } from "@codemirror/state";
8
- import { EditorView, keymap } from "@codemirror/view";
8
+ import {
9
+ EditorView,
10
+ keymap,
11
+ ViewPlugin,
12
+ type ViewUpdate,
13
+ } from "@codemirror/view";
9
14
  import {
10
15
  defaultSqlHoverTheme,
11
16
  NodeSqlParser,
@@ -421,76 +426,85 @@ const SQL_VALIDATION_DEBOUNCE_MS = 300;
421
426
  * Custom extension to run SQL queries in EXPLAIN mode on keypress.
422
427
  */
423
428
  function sqlValidationExtension(): Extension {
424
- let debounceTimeout: number | undefined;
425
- let lastValidationRequest: string | null = null;
426
-
427
- return EditorView.updateListener.of((update) => {
428
- // Only run validation if the document has changed
429
- // The extension only runs on keypress, so we don't need to check for focus
430
- // This lets AI completions / external calls trigger validation
431
- if (!update.docChanged) {
432
- return;
433
- }
429
+ return ViewPlugin.define((view) => {
430
+ let debounceTimeout: number | undefined;
431
+ let lastValidationRequest: string | null = null;
432
+ const cellId = view.state.facet(cellIdState);
434
433
 
435
- const sqlMode = getSQLMode();
436
- if (sqlMode === "default") {
437
- return;
438
- }
434
+ return {
435
+ update(update: ViewUpdate) {
436
+ // Only run validation if the document has changed
437
+ // The extension only runs on keypress, so we don't need to check for focus
438
+ // This lets AI completions / external calls trigger validation
439
+ if (!update.docChanged) {
440
+ return;
441
+ }
439
442
 
440
- const metadata = getSQLMetadata(update.state);
441
- const connectionName = metadata.engine;
443
+ const sqlMode = getSQLMode();
444
+ if (sqlMode === "default") {
445
+ return;
446
+ }
442
447
 
443
- // Currently only DuckDB is supported
444
- if (!INTERNAL_SQL_ENGINES.has(connectionName)) {
445
- return;
446
- }
448
+ const metadata = getSQLMetadata(update.state);
449
+ const connectionName = metadata.engine;
447
450
 
448
- const doc = update.state.doc;
449
- const sqlContent = doc.toString();
451
+ // Currently only DuckDB is supported
452
+ if (!INTERNAL_SQL_ENGINES.has(connectionName)) {
453
+ return;
454
+ }
450
455
 
451
- // Clear existing timeout
452
- if (debounceTimeout) {
453
- window.clearTimeout(debounceTimeout);
454
- }
456
+ const sqlContent = update.state.doc.toString();
455
457
 
456
- // Debounce the validation call
457
- debounceTimeout = window.setTimeout(async () => {
458
- // Skip if content hasn't changed since last validation
459
- if (lastValidationRequest === sqlContent) {
460
- return;
461
- }
458
+ if (debounceTimeout) {
459
+ window.clearTimeout(debounceTimeout);
460
+ }
461
+
462
+ debounceTimeout = window.setTimeout(async () => {
463
+ // Skip if the SQL content has not changed
464
+ if (lastValidationRequest === sqlContent) {
465
+ return;
466
+ }
462
467
 
463
- lastValidationRequest = sqlContent;
464
- const cellId = update.view.state.facet(cellIdState);
468
+ lastValidationRequest = sqlContent;
465
469
 
466
- if (sqlContent === "") {
467
- clearSqlValidationError(cellId);
468
- return;
469
- }
470
-
471
- try {
472
- const dialect = connectionNameToParserDialect(connectionName);
473
- const result = await validateSQL(
474
- sqlContent,
475
- connectionName,
476
- dialect,
477
- sqlMode,
478
- );
479
- const validateResult = result.validate_result;
480
-
481
- if (validateResult?.error_message) {
482
- setSqlValidationError({
483
- cellId,
484
- errorMessage: validateResult.error_message,
485
- dialect,
486
- });
487
- } else {
488
- clearSqlValidationError(cellId);
470
+ if (sqlContent === "") {
471
+ clearSqlValidationError(cellId);
472
+ return;
473
+ }
474
+
475
+ try {
476
+ const dialect = connectionNameToParserDialect(connectionName);
477
+ const result = await validateSQL(
478
+ sqlContent,
479
+ connectionName,
480
+ dialect,
481
+ sqlMode,
482
+ );
483
+ const validateResult = result.validate_result;
484
+
485
+ if (validateResult?.error_message) {
486
+ setSqlValidationError({
487
+ cellId,
488
+ errorMessage: validateResult.error_message,
489
+ dialect,
490
+ });
491
+ } else {
492
+ clearSqlValidationError(cellId);
493
+ }
494
+ } catch (error) {
495
+ Logger.error("Failed to validate SQL", { error });
496
+ }
497
+ }, SQL_VALIDATION_DEBOUNCE_MS);
498
+ },
499
+
500
+ // Remove side-effects on plugin removal
501
+ destroy() {
502
+ if (debounceTimeout) {
503
+ window.clearTimeout(debounceTimeout);
489
504
  }
490
- } catch (error) {
491
- Logger.error("Failed to validate SQL", { error });
492
- }
493
- }, SQL_VALIDATION_DEBOUNCE_MS);
505
+ clearSqlValidationError(cellId);
506
+ },
507
+ };
494
508
  });
495
509
  }
496
510
 
@@ -5,7 +5,7 @@ import { useAtomValue } from "jotai";
5
5
  import {
6
6
  AlertCircle,
7
7
  CircleHelpIcon,
8
- DatabaseBackup,
8
+ DatabaseZap,
9
9
  SearchCheck,
10
10
  } from "lucide-react";
11
11
  import { getCellForDomProps } from "@/components/data-table/cell-utils";
@@ -160,7 +160,7 @@ export const SQLModeSelect: React.FC = () => {
160
160
  return mode === "validate" ? (
161
161
  <SearchCheck className="h-3 w-3" />
162
162
  ) : (
163
- <DatabaseBackup className="h-3 w-3" />
163
+ <DatabaseZap className="h-3 w-3" />
164
164
  );
165
165
  };
166
166
 
@@ -176,7 +176,7 @@ export const SQLModeSelect: React.FC = () => {
176
176
  ) : (
177
177
  <div className="text-xs">
178
178
  <div className="font-semibold mb-1 flex flex-row items-center gap-1">
179
- <DatabaseBackup className="h-3 w-3" />
179
+ <DatabaseZap className="h-3 w-3" />
180
180
  Default Mode
181
181
  </div>
182
182
  <p>Standard editing</p>
@@ -0,0 +1,123 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { describe, expect, it } from "vitest";
4
+ import {
5
+ normalizeLspDocumentation,
6
+ normalizeMarkdownMath,
7
+ } from "../normalize-markdown-math";
8
+
9
+ describe("normalizeMarkdownMath", () => {
10
+ it("converts rst math directives to marimo-tex display math", () => {
11
+ const markdown = `
12
+ For t > 0:
13
+
14
+ .. math::
15
+
16
+ m_t = \\beta_1 \\cdot m_{t-1}
17
+ `.trim();
18
+
19
+ const normalized = normalizeMarkdownMath(markdown);
20
+ expect(normalized).not.toContain(".. math::");
21
+ expect(normalized).toContain("<marimo-tex");
22
+ expect(normalized).toContain("||[m_t = \\beta_1 \\cdot m_{t-1}||]");
23
+ });
24
+
25
+ it("converts :math: roles and latex delimiters", () => {
26
+ const markdown =
27
+ "Inline :math:`x^2`, \\(y^2\\), \\[z^2\\], $a^2$, and $$b^2$$.";
28
+
29
+ const normalized = normalizeMarkdownMath(markdown);
30
+ expect(normalized).not.toContain(":math:`");
31
+ expect(normalized).not.toContain("\\(");
32
+ expect(normalized).not.toContain("\\[");
33
+ expect(normalized).toContain("<marimo-tex");
34
+ expect(normalized).toContain("||(x^2||)");
35
+ expect(normalized).toContain("||(y^2||)");
36
+ expect(normalized).toContain("||[z^2||]");
37
+ expect(normalized).toContain("||(a^2||)");
38
+ expect(normalized).toContain("||[b^2||]");
39
+ });
40
+
41
+ it("converts rst math directives with same-line latex", () => {
42
+ const markdown =
43
+ ".. math::\\begin{align*} m_t &= \\beta_1 g_t \\\\ v_t &= \\beta_2 g_t^2 \\end{align*}";
44
+
45
+ const normalized = normalizeMarkdownMath(markdown);
46
+ expect(normalized).not.toContain(".. math::");
47
+ expect(normalized).toContain("<marimo-tex");
48
+ expect(normalized).toContain(
49
+ "||[\\begin{align*} m_t &= \\beta_1 g_t \\\\ v_t &= \\beta_2 g_t^2 \\end{align*}||]",
50
+ );
51
+ });
52
+
53
+ it("converts rst math directives followed by unindented latex blocks", () => {
54
+ const markdown = `
55
+ .. math::
56
+
57
+ \\begin{align*}
58
+ m_t &= \\beta_1 g_t \\\\
59
+ v_t &= \\beta_2 g_t^2
60
+ \\end{align*}
61
+ `.trim();
62
+
63
+ const normalized = normalizeMarkdownMath(markdown);
64
+ expect(normalized).not.toContain(".. math::");
65
+ expect(normalized).toContain("<marimo-tex");
66
+ expect(normalized).toContain(
67
+ "||[\\begin{align*}\nm_t &= \\beta_1 g_t \\\\\nv_t &= \\beta_2 g_t^2\n\\end{align*}||]",
68
+ );
69
+ });
70
+
71
+ it("does not transform fenced code blocks or inline code spans", () => {
72
+ const markdown = `
73
+ \`\`\`python
74
+ formula = ":math:\`x\`"
75
+ directive = """
76
+ .. math::
77
+
78
+ x^2
79
+ """
80
+ \`\`\`
81
+
82
+ Use \`:math:\` as text and :math:\`z\` as math.
83
+ `.trim();
84
+
85
+ const normalized = normalizeMarkdownMath(markdown);
86
+
87
+ expect(normalized).toContain('formula = ":math:`x`"');
88
+ expect(normalized).toContain(".. math::");
89
+ expect(normalized).toContain("`:math:` as text");
90
+ expect(normalized).not.toContain(":math:`z`");
91
+ expect(normalized).toContain("||(z||)");
92
+ });
93
+ });
94
+
95
+ describe("normalizeLspDocumentation", () => {
96
+ it("normalizes markdown and plaintext math markup content", () => {
97
+ const markdownDoc = normalizeLspDocumentation({
98
+ kind: "markdown",
99
+ value: "Compute :math:`x^2`",
100
+ });
101
+ const plaintextMathDoc = normalizeLspDocumentation({
102
+ kind: "plaintext",
103
+ value: "Compute :math:`x^2`",
104
+ });
105
+ const plaintextDoc = normalizeLspDocumentation({
106
+ kind: "plaintext",
107
+ value: "Price is $5 today",
108
+ });
109
+
110
+ expect(markdownDoc).toEqual({
111
+ kind: "markdown",
112
+ value: 'Compute <marimo-tex class="arithmatex">||(x^2||)</marimo-tex>',
113
+ });
114
+ expect(plaintextMathDoc).toEqual({
115
+ kind: "markdown",
116
+ value: 'Compute <marimo-tex class="arithmatex">||(x^2||)</marimo-tex>',
117
+ });
118
+ expect(plaintextDoc).toEqual({
119
+ kind: "plaintext",
120
+ value: "Price is $5 today",
121
+ });
122
+ });
123
+ });
@@ -329,6 +329,40 @@ describe("NotebookLanguageServerClient", () => {
329
329
  });
330
330
  });
331
331
 
332
+ it("should normalize math content in hover markdown", async () => {
333
+ const hoverParams: LSP.HoverParams = {
334
+ textDocument: { uri: "file:///cell1.py" },
335
+ position: { line: 0, character: 1 },
336
+ };
337
+
338
+ const mockHoverResponse: LSP.Hover = {
339
+ contents: {
340
+ kind: "markdown",
341
+ value:
342
+ "For t > 0:\n\n.. math::\n\n\\begin{align*}\nm_t &= \\beta_1 \\cdot g_t\n\\end{align*}",
343
+ },
344
+ };
345
+
346
+ mockClient.textDocumentHover.mockResolvedValue(mockHoverResponse);
347
+
348
+ await notebookClient.textDocumentDidOpen({
349
+ textDocument: {
350
+ uri: "file:///cell1.py",
351
+ languageId: "python",
352
+ version: 1,
353
+ text: "value = 1",
354
+ },
355
+ });
356
+
357
+ const result = await notebookClient.textDocumentHover(hoverParams);
358
+ const contents = result?.contents as LSP.MarkupContent;
359
+
360
+ expect(contents.kind).toBe("markdown");
361
+ expect(contents.value).toContain("<marimo-tex");
362
+ expect(contents.value).not.toContain(".. math::");
363
+ expect(contents.value).toContain("\\begin{align*}");
364
+ });
365
+
332
366
  it("should return null for empty hover contents", async () => {
333
367
  const hoverParams: LSP.HoverParams = {
334
368
  textDocument: { uri: "file:///cell1.py" },
@@ -390,6 +424,168 @@ describe("NotebookLanguageServerClient", () => {
390
424
  }),
391
425
  );
392
426
  });
427
+
428
+ it("should normalize completion item markdown documentation", async () => {
429
+ const completionParams: LSP.CompletionParams = {
430
+ textDocument: { uri: "file:///cell1.py" },
431
+ position: { line: 0, character: 4 },
432
+ };
433
+
434
+ const mockCompletionResponse: LSP.CompletionList = {
435
+ isIncomplete: false,
436
+ items: [
437
+ {
438
+ label: "math_completion",
439
+ kind: LSP.CompletionItemKind.Function,
440
+ documentation: {
441
+ kind: "markdown",
442
+ value: "Compute :math:`x^2`",
443
+ },
444
+ },
445
+ ],
446
+ };
447
+
448
+ mockClient.textDocumentCompletion.mockResolvedValue(
449
+ mockCompletionResponse,
450
+ );
451
+
452
+ await notebookClient.textDocumentDidOpen({
453
+ textDocument: {
454
+ uri: "file:///cell1.py",
455
+ languageId: "python",
456
+ version: 1,
457
+ text: "math",
458
+ },
459
+ });
460
+
461
+ const result =
462
+ await notebookClient.textDocumentCompletion(completionParams);
463
+ const completion = (result as LSP.CompletionList).items[0];
464
+ const documentation = completion?.documentation as LSP.MarkupContent;
465
+
466
+ expect(documentation.kind).toBe("markdown");
467
+ expect(documentation.value).toContain("<marimo-tex");
468
+ expect(documentation.value).not.toContain(":math:`");
469
+ });
470
+
471
+ it("should normalize completion item plaintext math documentation", async () => {
472
+ const completionParams: LSP.CompletionParams = {
473
+ textDocument: { uri: "file:///cell1.py" },
474
+ position: { line: 0, character: 4 },
475
+ };
476
+
477
+ const mockCompletionResponse: LSP.CompletionList = {
478
+ isIncomplete: false,
479
+ items: [
480
+ {
481
+ label: "math_completion_plain",
482
+ kind: LSP.CompletionItemKind.Function,
483
+ documentation: {
484
+ kind: "plaintext",
485
+ value: "For t > 0:\n\n.. math::\n\n m_t = \\beta_1 \\cdot g_t",
486
+ },
487
+ },
488
+ ],
489
+ };
490
+
491
+ mockClient.textDocumentCompletion.mockResolvedValue(
492
+ mockCompletionResponse,
493
+ );
494
+
495
+ await notebookClient.textDocumentDidOpen({
496
+ textDocument: {
497
+ uri: "file:///cell1.py",
498
+ languageId: "python",
499
+ version: 1,
500
+ text: "math",
501
+ },
502
+ });
503
+
504
+ const result =
505
+ await notebookClient.textDocumentCompletion(completionParams);
506
+ const completion = (result as LSP.CompletionList).items[0];
507
+ const documentation = completion?.documentation as LSP.MarkupContent;
508
+
509
+ expect(documentation.kind).toBe("markdown");
510
+ expect(documentation.value).toContain("<marimo-tex");
511
+ expect(documentation.value).not.toContain(".. math::");
512
+ });
513
+ });
514
+
515
+ describe("completionItemResolve", () => {
516
+ it("should normalize resolved completion markdown documentation", async () => {
517
+ const unresolvedItem: LSP.CompletionItem = { label: "test" };
518
+ const resolvedItem: LSP.CompletionItem = {
519
+ label: "test",
520
+ documentation: {
521
+ kind: "markdown",
522
+ value: "For t > 0:\n\n.. math::\n\n m_t = \\beta_1 \\cdot g_t",
523
+ },
524
+ };
525
+
526
+ mockClient.completionItemResolve.mockResolvedValue(resolvedItem);
527
+
528
+ const result = await notebookClient.completionItemResolve(unresolvedItem);
529
+ const documentation = result.documentation as LSP.MarkupContent;
530
+
531
+ expect(documentation.kind).toBe("markdown");
532
+ expect(documentation.value).toContain("<marimo-tex");
533
+ expect(documentation.value).not.toContain(".. math::");
534
+ });
535
+ });
536
+
537
+ describe("textDocumentSignatureHelp", () => {
538
+ it("should normalize signature and parameter markdown documentation", async () => {
539
+ const signatureHelpParams: LSP.SignatureHelpParams = {
540
+ textDocument: { uri: "file:///cell1.py" },
541
+ position: { line: 0, character: 3 },
542
+ };
543
+
544
+ const mockSignatureHelp: LSP.SignatureHelp = {
545
+ signatures: [
546
+ {
547
+ label: "foo(x)",
548
+ documentation: {
549
+ kind: "markdown",
550
+ value: "Compute :math:`x^2`",
551
+ },
552
+ parameters: [
553
+ {
554
+ label: "x",
555
+ documentation: {
556
+ kind: "markdown",
557
+ value:
558
+ "For t > 0:\n\n.. math::\n\n m_t = \\beta_1 \\cdot g_t",
559
+ },
560
+ },
561
+ ],
562
+ },
563
+ ],
564
+ };
565
+
566
+ mockClient.textDocumentSignatureHelp.mockResolvedValue(mockSignatureHelp);
567
+
568
+ await notebookClient.textDocumentDidOpen({
569
+ textDocument: {
570
+ uri: "file:///cell1.py",
571
+ languageId: "python",
572
+ version: 1,
573
+ text: "foo(",
574
+ },
575
+ });
576
+
577
+ const result =
578
+ await notebookClient.textDocumentSignatureHelp(signatureHelpParams);
579
+ const signature = result?.signatures[0];
580
+ const signatureDoc = signature?.documentation as LSP.MarkupContent;
581
+ const parameterDoc = signature?.parameters?.[0]
582
+ ?.documentation as LSP.MarkupContent;
583
+
584
+ expect(signatureDoc.value).toContain("<marimo-tex");
585
+ expect(signatureDoc.value).not.toContain(":math:`");
586
+ expect(parameterDoc.value).toContain("<marimo-tex");
587
+ expect(parameterDoc.value).not.toContain(".. math::");
588
+ });
393
589
  });
394
590
 
395
591
  describe("textDocumentRename", () => {