@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
@@ -0,0 +1,132 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { atom, useAtomValue } from "jotai";
4
+ import { useAsyncData } from "@/hooks/useAsyncData";
5
+ import { createReducerAndAtoms } from "@/utils/createReducer";
6
+ import type { NotificationMessageData } from "../kernel/messages";
7
+ import type { VariableName } from "../variables/types";
8
+ import { ListStorageEntries } from "./request-registry";
9
+ import type { StorageEntry, StorageState } from "./types";
10
+ import {
11
+ DEFAULT_FETCH_LIMIT,
12
+ ROOT_PATH,
13
+ storageNamespacePrefix,
14
+ storagePathKey,
15
+ } from "./types";
16
+
17
+ function initialState(): StorageState {
18
+ return {
19
+ namespaces: [],
20
+ entriesByPath: new Map(),
21
+ };
22
+ }
23
+
24
+ const {
25
+ reducer,
26
+ createActions,
27
+ valueAtom: storageAtom,
28
+ useActions,
29
+ } = createReducerAndAtoms(initialState, {
30
+ setNamespaces: (
31
+ state,
32
+ data: NotificationMessageData<"storage-namespaces">,
33
+ ) => {
34
+ // Merge/replace namespaces by name
35
+ const existingMap = new Map(state.namespaces.map((ns) => [ns.name, ns]));
36
+ for (const ns of data.namespaces) {
37
+ existingMap.set(ns.name, ns);
38
+ }
39
+ return {
40
+ ...state,
41
+ namespaces: [...existingMap.values()],
42
+ };
43
+ },
44
+
45
+ setEntries: (
46
+ state,
47
+ opts: {
48
+ namespace: string;
49
+ prefix: string | null | undefined;
50
+ entries: StorageEntry[];
51
+ },
52
+ ) => {
53
+ const key = storagePathKey(opts.namespace, opts.prefix);
54
+ const entriesByPath = new Map(state.entriesByPath);
55
+ entriesByPath.set(key, opts.entries);
56
+ return { ...state, entriesByPath };
57
+ },
58
+
59
+ clearNamespaceCache: (state, namespace: string) => {
60
+ const entriesByPath = new Map(state.entriesByPath);
61
+ const prefix = storageNamespacePrefix(namespace);
62
+ for (const key of entriesByPath.keys()) {
63
+ if (key.startsWith(prefix)) {
64
+ entriesByPath.delete(key);
65
+ }
66
+ }
67
+ return { ...state, entriesByPath };
68
+ },
69
+
70
+ filterFromVariables: (state, variableNames: VariableName[]) => {
71
+ const names = new Set(variableNames);
72
+ // Filter out namespaces whose backing variable is no longer in scope
73
+ const namespaces = state.namespaces.filter((ns) => {
74
+ return names.has(ns.name as VariableName);
75
+ });
76
+ return { ...state, namespaces };
77
+ },
78
+ });
79
+
80
+ /**
81
+ * React hook to get the storage state.
82
+ */
83
+ export const useStorage = () => useAtomValue(storageAtom);
84
+
85
+ export const storageNamespacesAtom = atom((get) => get(storageAtom).namespaces);
86
+
87
+ /**
88
+ * React hook to get the storage actions.
89
+ */
90
+ export function useStorageActions() {
91
+ return useActions();
92
+ }
93
+
94
+ export { storageAtom };
95
+
96
+ /**
97
+ * Hook that fetches and caches storage entries for a given namespace/prefix.
98
+ * Entries are fetched on first access and cached in the store for subsequent renders.
99
+ */
100
+ export function useStorageEntries(namespace: string, prefix?: string) {
101
+ const { entriesByPath } = useStorage();
102
+ const { setEntries } = useStorageActions();
103
+ const cached = entriesByPath.get(storagePathKey(namespace, prefix));
104
+
105
+ const { isPending, error, refetch } = useAsyncData(async () => {
106
+ if (cached) {
107
+ return;
108
+ }
109
+ const result = await ListStorageEntries.request({
110
+ namespace,
111
+ prefix: prefix ?? ROOT_PATH,
112
+ limit: DEFAULT_FETCH_LIMIT,
113
+ });
114
+ if (result.error) {
115
+ throw new Error(result.error);
116
+ }
117
+ setEntries({ namespace, prefix, entries: result.entries });
118
+ }, [namespace, prefix, cached === undefined]);
119
+
120
+ return {
121
+ entries: cached ?? [],
122
+ isPending: isPending && !cached,
123
+ error: cached ? undefined : error,
124
+ refetch,
125
+ };
126
+ }
127
+
128
+ export const exportedForTesting = {
129
+ reducer,
130
+ createActions,
131
+ initialState,
132
+ };
@@ -0,0 +1,57 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+ import type { components } from "@marimo-team/marimo-api";
3
+
4
+ export type StorageEntry = components["schemas"]["StorageEntry"];
5
+ export type StorageNamespace = components["schemas"]["StorageNamespace"];
6
+
7
+ /**
8
+ * Key for looking up lazy-loaded entries: "namespace::prefix"
9
+ */
10
+ export type StoragePathKey = `${string}::${string}`;
11
+
12
+ export const STORAGE_PATH_SEPARATOR = "::";
13
+
14
+ export function storagePathKey(
15
+ namespace: string,
16
+ prefix: string | null | undefined,
17
+ ): StoragePathKey {
18
+ return `${namespace}${STORAGE_PATH_SEPARATOR}${prefix ?? ""}`;
19
+ }
20
+
21
+ export function storageNamespacePrefix(namespace: string): string {
22
+ return `${namespace}${STORAGE_PATH_SEPARATOR}`;
23
+ }
24
+
25
+ /**
26
+ * The storage state.
27
+ */
28
+ export interface StorageState {
29
+ /** Namespaces from the broadcast notification */
30
+ namespaces: StorageNamespace[];
31
+ /** Lazy-loaded entries keyed by "namespace::prefix" */
32
+ entriesByPath: ReadonlyMap<StoragePathKey, StorageEntry[]>;
33
+ }
34
+
35
+ export function storageUrl(
36
+ protocol: string,
37
+ rootPath: string,
38
+ entryPath: string,
39
+ ): URL {
40
+ const parts = [rootPath, entryPath].filter(Boolean);
41
+ const path = parts.join("/").replaceAll(/\/+/g, "/");
42
+ return new URL(`${protocol}://${path}`);
43
+ }
44
+
45
+ export const ROOT_PATH = "";
46
+ export const DEFAULT_FETCH_LIMIT = 150;
47
+
48
+ /** Non-exhaustive list of known storage protocols */
49
+ export type KnownStorageProtocol =
50
+ | "s3"
51
+ | "gcs"
52
+ | "azure"
53
+ | "coreweave"
54
+ | "cloudflare"
55
+ | "http"
56
+ | "file"
57
+ | "in-memory";
@@ -596,6 +596,8 @@ export class PyodideBridge implements RunRequests, EditRequests {
596
596
  invokeAiTool = throwNotImplemented;
597
597
  clearCache = throwNotImplemented;
598
598
  getCacheInfo = throwNotImplemented;
599
+ listStorageEntries = throwNotImplemented;
600
+ downloadStorage = throwNotImplemented;
599
601
 
600
602
  private async putControlRequest(operation: CommandMessage) {
601
603
  await this.rpc.proxy.request.bridge({
@@ -56,6 +56,11 @@ import type { RequestId } from "../network/DeferredRequestRegistry";
56
56
  import { useRuntimeManager } from "../runtime/config";
57
57
  import { SECRETS_REGISTRY } from "../secrets/request-registry";
58
58
  import { isStaticNotebook } from "../static/static-state";
59
+ import {
60
+ DownloadStorage,
61
+ ListStorageEntries,
62
+ } from "../storage/request-registry";
63
+ import { useStorageActions } from "../storage/state";
59
64
  import { useVariablesActions } from "../variables/state";
60
65
  import type { VariableName } from "../variables/types";
61
66
  import { isWasm } from "../wasm/utils";
@@ -105,6 +110,10 @@ export function useMarimoKernelConnection(opts: {
105
110
  const runtimeManager = useRuntimeManager();
106
111
  const setCacheInfo = useSetAtom(cacheInfoAtom);
107
112
  const setKernelStartupError = useSetAtom(kernelStartupErrorAtom);
113
+ const {
114
+ setNamespaces: setStorageNamespaces,
115
+ filterFromVariables: filterStorageFromVariables,
116
+ } = useStorageActions();
108
117
 
109
118
  const handleMessage = (e: MessageEvent<JsonString<NotificationPayload>>) => {
110
119
  const msg = jsonParseWithSpecialChar(e.data);
@@ -196,6 +205,9 @@ export function useMarimoKernelConnection(opts: {
196
205
  filterDataSourcesFromVariables(
197
206
  msg.data.variables.map((v) => v.name as VariableName),
198
207
  );
208
+ filterStorageFromVariables(
209
+ msg.data.variables.map((v) => v.name as VariableName),
210
+ );
199
211
  return;
200
212
  case "variable-values":
201
213
  setMetadata(
@@ -285,7 +297,13 @@ export function useMarimoKernelConnection(opts: {
285
297
  });
286
298
  return;
287
299
  case "storage-namespaces":
288
- // TODO: Handle storage namespaces
300
+ setStorageNamespaces(msg.data);
301
+ return;
302
+ case "storage-entries":
303
+ ListStorageEntries.resolve(msg.data.request_id as RequestId, msg.data);
304
+ return;
305
+ case "storage-download-ready":
306
+ DownloadStorage.resolve(msg.data.request_id as RequestId, msg.data);
289
307
  return;
290
308
 
291
309
  case "reconnected":
@@ -0,0 +1,127 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { act, renderHook } from "@testing-library/react";
4
+ import { describe, expect, it } from "vitest";
5
+ import { useNonce } from "../useNonce";
6
+
7
+ describe("useNonce", () => {
8
+ it("should return a stable function reference", () => {
9
+ const { result, rerender } = renderHook(() => useNonce());
10
+ const firstRender = result.current;
11
+
12
+ rerender();
13
+
14
+ expect(result.current).toBe(firstRender);
15
+ });
16
+
17
+ it("should trigger re-render when called", () => {
18
+ let renderCount = 0;
19
+ const { result } = renderHook(() => {
20
+ renderCount++;
21
+ return useNonce();
22
+ });
23
+
24
+ const initialRenderCount = renderCount;
25
+
26
+ act(() => {
27
+ result.current();
28
+ });
29
+
30
+ expect(renderCount).toBe(initialRenderCount + 1);
31
+ });
32
+
33
+ it("should handle multiple rapid calls within the same act", () => {
34
+ // This is the core test for the stale closure fix.
35
+ // Before the fix, calling the function multiple times in the same
36
+ // synchronous block would always set nonce to the same value (e.g. 0+1=1),
37
+ // because the closure captured a stale `nonce`. With the functional update
38
+ // form `setNonce(n => n + 1)`, each call correctly increments from the
39
+ // latest pending state.
40
+ let renderCount = 0;
41
+ const { result } = renderHook(() => {
42
+ renderCount++;
43
+ return useNonce();
44
+ });
45
+
46
+ const initialRenderCount = renderCount;
47
+
48
+ // Call 3 times within the same act — only one batched re-render
49
+ act(() => {
50
+ result.current();
51
+ result.current();
52
+ result.current();
53
+ });
54
+
55
+ // React batches these into a single re-render, but the nonce should
56
+ // have incremented 3 times (0 → 1 → 2 → 3) thanks to functional updates.
57
+ // We verify a re-render happened (at least 1 extra render).
58
+ expect(renderCount).toBeGreaterThan(initialRenderCount);
59
+ });
60
+
61
+ it("should trigger separate re-renders for separate act calls", () => {
62
+ let renderCount = 0;
63
+ const { result } = renderHook(() => {
64
+ renderCount++;
65
+ return useNonce();
66
+ });
67
+
68
+ const initialRenderCount = renderCount;
69
+
70
+ act(() => {
71
+ result.current();
72
+ });
73
+
74
+ act(() => {
75
+ result.current();
76
+ });
77
+
78
+ act(() => {
79
+ result.current();
80
+ });
81
+
82
+ expect(renderCount).toBe(initialRenderCount + 3);
83
+ });
84
+
85
+ it("should maintain stable reference across multiple re-renders", () => {
86
+ const { result, rerender } = renderHook(() => useNonce());
87
+ const increment = result.current;
88
+
89
+ act(() => {
90
+ result.current();
91
+ });
92
+
93
+ rerender();
94
+
95
+ act(() => {
96
+ result.current();
97
+ });
98
+
99
+ rerender();
100
+
101
+ // Function reference should remain the same throughout
102
+ expect(result.current).toBe(increment);
103
+ });
104
+
105
+ it("should work correctly when called from event handlers", () => {
106
+ let renderCount = 0;
107
+ const { result } = renderHook(() => {
108
+ renderCount++;
109
+ return useNonce();
110
+ });
111
+
112
+ const initialRenderCount = renderCount;
113
+ const increment = result.current;
114
+
115
+ act(() => {
116
+ increment();
117
+ });
118
+
119
+ expect(renderCount).toBe(initialRenderCount + 1);
120
+
121
+ act(() => {
122
+ increment();
123
+ });
124
+
125
+ expect(renderCount).toBe(initialRenderCount + 2);
126
+ });
127
+ });
@@ -0,0 +1,127 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { renderHook } from "@testing-library/react";
4
+ import { useRef } from "react";
5
+ import { beforeEach, describe, expect, it, vi } from "vitest";
6
+ import { useOverflowDetection } from "../useOverflowDetection";
7
+
8
+ // Mock ResizeObserver
9
+ const mockObserve = vi.fn();
10
+ const mockDisconnect = vi.fn();
11
+
12
+ global.ResizeObserver = class MockResizeObserver {
13
+ callback: ResizeObserverCallback;
14
+
15
+ constructor(callback: ResizeObserverCallback) {
16
+ this.callback = callback;
17
+ }
18
+
19
+ observe(target: Element) {
20
+ mockObserve(target);
21
+ // Simulate initial observation callback
22
+ this.callback([], this);
23
+ }
24
+
25
+ unobserve() {
26
+ // noop
27
+ }
28
+
29
+ disconnect() {
30
+ mockDisconnect();
31
+ }
32
+ };
33
+
34
+ describe("useOverflowDetection", () => {
35
+ beforeEach(() => {
36
+ mockObserve.mockClear();
37
+ mockDisconnect.mockClear();
38
+ });
39
+
40
+ it("should return false when ref is null", () => {
41
+ const { result } = renderHook(() => {
42
+ const ref = useRef<HTMLDivElement>(null);
43
+ return useOverflowDetection(ref);
44
+ });
45
+
46
+ expect(result.current).toBe(false);
47
+ expect(mockObserve).not.toHaveBeenCalled();
48
+ });
49
+
50
+ it("should observe element when ref is set", () => {
51
+ const element = document.createElement("div");
52
+
53
+ const { result } = renderHook(() => {
54
+ const ref = useRef<HTMLDivElement>(element);
55
+ return useOverflowDetection(ref);
56
+ });
57
+
58
+ expect(mockObserve).toHaveBeenCalledWith(element);
59
+ expect(result.current).toBe(false); // No overflow by default
60
+ });
61
+
62
+ it("should not observe when enabled is false", () => {
63
+ const element = document.createElement("div");
64
+
65
+ renderHook(() => {
66
+ const ref = useRef<HTMLDivElement>(element);
67
+ return useOverflowDetection(ref, false);
68
+ });
69
+
70
+ expect(mockObserve).not.toHaveBeenCalled();
71
+ });
72
+
73
+ it("should disconnect observer on unmount", () => {
74
+ const element = document.createElement("div");
75
+
76
+ const { unmount } = renderHook(() => {
77
+ const ref = useRef<HTMLDivElement>(element);
78
+ return useOverflowDetection(ref);
79
+ });
80
+
81
+ unmount();
82
+ expect(mockDisconnect).toHaveBeenCalled();
83
+ });
84
+
85
+ it("should re-observe when enabled changes from false to true", () => {
86
+ const element = document.createElement("div");
87
+
88
+ const { rerender } = renderHook(
89
+ ({ enabled }) => {
90
+ const ref = useRef<HTMLDivElement>(element);
91
+ return useOverflowDetection(ref, enabled);
92
+ },
93
+ { initialProps: { enabled: false } },
94
+ );
95
+
96
+ expect(mockObserve).not.toHaveBeenCalled();
97
+
98
+ rerender({ enabled: true });
99
+ expect(mockObserve).toHaveBeenCalledWith(element);
100
+ });
101
+
102
+ it("should detect overflow when scrollHeight > clientHeight", () => {
103
+ const element = document.createElement("div");
104
+ Object.defineProperty(element, "scrollHeight", { value: 500 });
105
+ Object.defineProperty(element, "clientHeight", { value: 200 });
106
+
107
+ const { result } = renderHook(() => {
108
+ const ref = useRef<HTMLDivElement>(element);
109
+ return useOverflowDetection(ref);
110
+ });
111
+
112
+ expect(result.current).toBe(true);
113
+ });
114
+
115
+ it("should not detect overflow when scrollHeight <= clientHeight", () => {
116
+ const element = document.createElement("div");
117
+ Object.defineProperty(element, "scrollHeight", { value: 100 });
118
+ Object.defineProperty(element, "clientHeight", { value: 200 });
119
+
120
+ const { result } = renderHook(() => {
121
+ const ref = useRef<HTMLDivElement>(element);
122
+ return useOverflowDetection(ref);
123
+ });
124
+
125
+ expect(result.current).toBe(false);
126
+ });
127
+ });
@@ -1,9 +1,10 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- import { useState } from "react";
2
+ import { useCallback, useState } from "react";
3
3
 
4
4
  export function useNonce() {
5
- const [nonce, setNonce] = useState(0);
6
- return () => {
7
- setNonce(nonce + 1);
8
- };
5
+ // eslint-disable-next-line react/hook-use-state
6
+ const [, setNonce] = useState(0);
7
+ return useCallback(() => {
8
+ setNonce((n) => n + 1);
9
+ }, []);
9
10
  }
@@ -0,0 +1,36 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import type { RefObject } from "react";
4
+ import { useEffect, useState } from "react";
5
+
6
+ /**
7
+ * Hook to detect if an element's content overflows its visible area.
8
+ * Uses ResizeObserver to track size changes.
9
+ *
10
+ * @param ref - Ref to the element to observe
11
+ * @param enabled - When this changes, re-setup the observer (use to handle element recreation)
12
+ */
13
+ export function useOverflowDetection(
14
+ ref: RefObject<HTMLElement | null>,
15
+ enabled = true,
16
+ ): boolean {
17
+ const [isOverflowing, setIsOverflowing] = useState(false);
18
+
19
+ useEffect(() => {
20
+ const el = ref.current;
21
+ if (!el || !enabled) {
22
+ return;
23
+ }
24
+
25
+ const resizeObserver = new ResizeObserver(() => {
26
+ setIsOverflowing(el.scrollHeight > el.clientHeight);
27
+ });
28
+ resizeObserver.observe(el);
29
+
30
+ return () => {
31
+ resizeObserver.disconnect();
32
+ };
33
+ }, [ref, enabled]);
34
+
35
+ return isOverflowing;
36
+ }
@@ -1,5 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- import { type JSX, useCallback, useRef, useState } from "react";
2
+ import { type JSX, useCallback, useEffect, useRef, useState } from "react";
3
3
  import { z } from "zod";
4
4
  import { cn } from "@/utils/cn";
5
5
  import type { IPlugin, IPluginProps, Setter } from "../types";
@@ -90,7 +90,10 @@ const MatrixComponent = ({
90
90
  // Outside of a drag we always read from the prop `value` directly,
91
91
  // which avoids stale-state bugs when the matrix shape changes.
92
92
  const [draft, setDraft] = useState(value);
93
- const displayValue = activeCell != null ? draft : value;
93
+ useEffect(() => {
94
+ setDraft(value);
95
+ }, [value]);
96
+ const displayValue = activeCell == null ? value : draft;
94
97
 
95
98
  const formatValue = (val: number) =>
96
99
  scientific ? val.toExponential(precision) : val.toFixed(precision);
@@ -206,7 +206,7 @@ describe("MatrixPlugin", () => {
206
206
  const plugin = new MatrixPlugin();
207
207
  const props = makeProps({
208
208
  value: [
209
- [0.00153, 1234567],
209
+ [0.001_53, 1_234_567],
210
210
  [0, -0.042],
211
211
  ],
212
212
  data: {
@@ -17,10 +17,14 @@ import { ErrorBanner } from "../common/error-banner";
17
17
 
18
18
  export const LANGUAGE_MAP: Record<string, LanguageName | undefined> = {
19
19
  python: "py",
20
+ python3: "py",
20
21
  javascript: "js",
21
22
  typescript: "ts",
22
23
  shell: "sh",
23
24
  bash: "sh",
25
+ // Other fallbacks
26
+ unknown: "text",
27
+ undefined: "text",
24
28
  };
25
29
 
26
30
  function isSupportedLanguage(
@@ -41,10 +45,17 @@ function isSupportedLanguage(
41
45
  const AnyLanguageCodeMirror: React.FC<
42
46
  ReactCodeMirrorProps & {
43
47
  language: string | undefined;
48
+ hideUnsupportedLanguageErrors?: boolean;
44
49
  theme: ResolvedTheme;
45
50
  showCopyButton?: boolean;
46
51
  }
47
- > = ({ language, showCopyButton, extensions = [], ...props }) => {
52
+ > = ({
53
+ language,
54
+ hideUnsupportedLanguageErrors,
55
+ showCopyButton,
56
+ extensions = [],
57
+ ...props
58
+ }) => {
48
59
  // Maybe normalize the language to the extension
49
60
  language = LANGUAGE_MAP[language || ""] || language;
50
61
 
@@ -62,10 +73,10 @@ const AnyLanguageCodeMirror: React.FC<
62
73
 
63
74
  return (
64
75
  <div className="relative w-full group hover-actions-parent">
65
- {!isSupported && (
76
+ {!isSupported && !hideUnsupportedLanguageErrors && (
66
77
  <ErrorBanner
67
78
  className="mb-1 rounded-sm"
68
- error={`Language ${language} not supported. \n\nSupported languages are: ${Object.keys(
79
+ error={`Language ${language} not supported. Supported languages are: ${Object.keys(
69
80
  langs,
70
81
  ).join(", ")}`}
71
82
  />
@@ -3,8 +3,14 @@ import { describe, expect, it } from "vitest";
3
3
  import type { Data } from "../matplotlib-renderer";
4
4
  import { visibleForTesting } from "../matplotlib-renderer";
5
5
 
6
- const { pixelToData, dataToPixel, pointInPolygon, clampToAxes, isPointInBox } =
7
- visibleForTesting;
6
+ const {
7
+ pixelToData,
8
+ dataToPixel,
9
+ pointInPolygon,
10
+ clampToAxes,
11
+ isPointInBox,
12
+ isInAxes,
13
+ } = visibleForTesting;
8
14
 
9
15
  // A simple axes geometry for testing:
10
16
  // axes occupy pixels [100, 50] to [500, 350] (400px wide, 300px tall)
@@ -150,3 +156,32 @@ describe("isPointInBox", () => {
150
156
  expect(isPointInBox({ x: 5, y: 30 }, boxEnd, boxStart)).toBe(false);
151
157
  });
152
158
  });
159
+
160
+ describe("isInAxes", () => {
161
+ it("returns true for a point inside the axes", () => {
162
+ expect(isInAxes({ x: 300, y: 200 }, LINEAR_AXES)).toBe(true);
163
+ });
164
+
165
+ it("returns true for a point on the boundary", () => {
166
+ expect(isInAxes({ x: 100, y: 50 }, LINEAR_AXES)).toBe(true); // top-left
167
+ expect(isInAxes({ x: 500, y: 350 }, LINEAR_AXES)).toBe(true); // bottom-right
168
+ expect(isInAxes({ x: 100, y: 350 }, LINEAR_AXES)).toBe(true); // bottom-left
169
+ expect(isInAxes({ x: 500, y: 50 }, LINEAR_AXES)).toBe(true); // top-right
170
+ });
171
+
172
+ it("returns false for a point left of axes", () => {
173
+ expect(isInAxes({ x: 99, y: 200 }, LINEAR_AXES)).toBe(false);
174
+ });
175
+
176
+ it("returns false for a point right of axes", () => {
177
+ expect(isInAxes({ x: 501, y: 200 }, LINEAR_AXES)).toBe(false);
178
+ });
179
+
180
+ it("returns false for a point above axes", () => {
181
+ expect(isInAxes({ x: 300, y: 49 }, LINEAR_AXES)).toBe(false);
182
+ });
183
+
184
+ it("returns false for a point below axes", () => {
185
+ expect(isInAxes({ x: 300, y: 351 }, LINEAR_AXES)).toBe(false);
186
+ });
187
+ });