@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
@@ -8,18 +8,18 @@ import {
8
8
  connectionsAtom,
9
9
  DataSources,
10
10
  } from "@/components/datasources/datasources";
11
- import {
12
- Accordion,
13
- AccordionContent,
14
- AccordionItem,
15
- AccordionTrigger,
16
- } from "@/components/ui/accordion";
17
- import { Badge } from "@/components/ui/badge";
11
+ import { Accordion } from "@/components/ui/accordion";
18
12
  import { VariableTable } from "@/components/variables/variables-table";
19
13
  import { useCellIds } from "@/core/cells/cells";
20
14
  import { datasetTablesAtom } from "@/core/datasets/state";
21
15
  import { useVariables } from "@/core/variables/state";
22
16
  import { jotaiJsonStorage } from "@/utils/storage/jotai";
17
+ import {
18
+ PanelAccordionContent,
19
+ PanelAccordionItem,
20
+ PanelAccordionTrigger,
21
+ PanelBadge,
22
+ } from "./components";
23
23
 
24
24
  type OpenSections = "variables" | "datasources";
25
25
 
@@ -69,34 +69,23 @@ const SessionPanel: React.FC = () => {
69
69
  onValueChange={handleValueChange}
70
70
  className="flex flex-col h-full overflow-auto"
71
71
  >
72
- <AccordionItem value="datasources" className="border-b">
73
- <AccordionTrigger className="px-3 py-2 text-xs font-semibold uppercase tracking-wide hover:no-underline">
74
- <span className="flex items-center gap-2">
75
- <DatabaseIcon className="w-4 h-4" />
76
- Data sources
77
- {showDatasourcesBadge && (
78
- <Badge
79
- variant="secondary"
80
- className="ml-1 px-1.5 py-0 mb-px text-[10px]"
81
- >
82
- {datasourcesCount}
83
- </Badge>
84
- )}
85
- </span>
86
- </AccordionTrigger>
87
- <AccordionContent wrapperClassName="p-0">
72
+ <PanelAccordionItem value="datasources">
73
+ <PanelAccordionTrigger>
74
+ <DatabaseIcon className="w-4 h-4" />
75
+ Data sources
76
+ {showDatasourcesBadge && <PanelBadge>{datasourcesCount}</PanelBadge>}
77
+ </PanelAccordionTrigger>
78
+ <PanelAccordionContent>
88
79
  <DataSources />
89
- </AccordionContent>
90
- </AccordionItem>
80
+ </PanelAccordionContent>
81
+ </PanelAccordionItem>
91
82
 
92
- <AccordionItem value="variables" className="border-b-0">
93
- <AccordionTrigger className="px-3 py-2 text-xs font-semibold uppercase tracking-wide hover:no-underline">
94
- <span className="flex items-center gap-2">
95
- <VariableIcon className="w-4 h-4" />
96
- Variables
97
- </span>
98
- </AccordionTrigger>
99
- <AccordionContent wrapperClassName="p-0">
83
+ <PanelAccordionItem value="variables" lastItem={true}>
84
+ <PanelAccordionTrigger>
85
+ <VariableIcon className="w-4 h-4" />
86
+ Variables
87
+ </PanelAccordionTrigger>
88
+ <PanelAccordionContent>
100
89
  {Object.keys(variables).length === 0 ? (
101
90
  <div className="px-3 py-4 text-sm text-muted-foreground">
102
91
  No variables defined
@@ -104,8 +93,8 @@ const SessionPanel: React.FC = () => {
104
93
  ) : (
105
94
  <VariableTable cellIds={cellIds.inOrderIds} variables={variables} />
106
95
  )}
107
- </AccordionContent>
108
- </AccordionItem>
96
+ </PanelAccordionContent>
97
+ </PanelAccordionItem>
109
98
  </Accordion>
110
99
  );
111
100
  };
@@ -174,7 +174,23 @@ describe("RequestingTree", () => {
174
174
  sendCreateFileOrFolder.mockResolvedValue({ success: true });
175
175
 
176
176
  await requestingTree.createFile("file3", "1.2");
177
- expect(sendCreateFileOrFolder).toHaveBeenCalled();
177
+ expect(sendCreateFileOrFolder).toHaveBeenCalledWith({
178
+ path: "/root/folder1",
179
+ type: "file",
180
+ name: "file3",
181
+ });
182
+ expect(mockOnChange).toHaveBeenCalled();
183
+ });
184
+
185
+ test("createFile should create a new notebook", async () => {
186
+ sendCreateFileOrFolder.mockResolvedValue({ success: true });
187
+
188
+ await requestingTree.createFile("notebook1", "1.2", "notebook");
189
+ expect(sendCreateFileOrFolder).toHaveBeenCalledWith({
190
+ path: "/root/folder1",
191
+ type: "notebook",
192
+ name: "notebook1",
193
+ });
178
194
  expect(mockOnChange).toHaveBeenCalled();
179
195
  });
180
196
 
@@ -32,6 +32,7 @@ import {
32
32
  type TreeApi,
33
33
  } from "react-arborist";
34
34
  import useEvent from "react-use-event-hook";
35
+ import { MarimoIcon, MarimoPlusIcon } from "@/components/icons/marimo-icons";
35
36
  import { Spinner } from "@/components/icons/spinner";
36
37
  import { useImperativeModal } from "@/components/modal/ImperativeModal";
37
38
  import { AlertDialogDestructiveAction } from "@/components/ui/alert-dialog";
@@ -60,7 +61,6 @@ import { openNotebook } from "@/utils/links";
60
61
  import type { FilePath } from "@/utils/paths";
61
62
  import { fileSplit } from "@/utils/pathUtils";
62
63
  import { jotaiJsonStorage } from "@/utils/storage/jotai";
63
- import marimoIcon from "../../../assets/icon-32x32.png";
64
64
  import { useTreeDndManager } from "./dnd-wrapper";
65
65
  import { FileViewer } from "./file-viewer";
66
66
  import type { RequestingTree } from "./requesting-tree";
@@ -128,6 +128,15 @@ export const FileExplorer: React.FC<{
128
128
  });
129
129
  });
130
130
 
131
+ const handleCreateNotebook = useEvent(async () => {
132
+ openPrompt({
133
+ title: "Notebook name",
134
+ onConfirm: async (name) => {
135
+ tree.createFile(name, null, "notebook");
136
+ },
137
+ });
138
+ });
139
+
131
140
  const handleCollapseAll = useEvent(() => {
132
141
  treeRef.current?.closeAll();
133
142
  setOpenState({});
@@ -182,6 +191,7 @@ export const FileExplorer: React.FC<{
182
191
  onRefresh={handleRefresh}
183
192
  onHidden={handleHiddenFilesToggle}
184
193
  onCreateFile={handleCreateFile}
194
+ onCreateNotebook={handleCreateNotebook}
185
195
  onCreateFolder={handleCreateFolder}
186
196
  onCollapseAll={handleCollapseAll}
187
197
  tree={tree}
@@ -248,6 +258,7 @@ interface ToolbarProps {
248
258
  onRefresh: () => void;
249
259
  onHidden: () => void;
250
260
  onCreateFile: () => void;
261
+ onCreateNotebook: () => void;
251
262
  onCreateFolder: () => void;
252
263
  onCollapseAll: () => void;
253
264
  tree: RequestingTree;
@@ -257,6 +268,7 @@ const Toolbar = ({
257
268
  onRefresh,
258
269
  onHidden,
259
270
  onCreateFile,
271
+ onCreateNotebook,
260
272
  onCreateFolder,
261
273
  onCollapseAll,
262
274
  }: ToolbarProps) => {
@@ -267,6 +279,16 @@ const Toolbar = ({
267
279
 
268
280
  return (
269
281
  <div className="flex items-center justify-end px-2 shrink-0 border-b">
282
+ <Tooltip content="Add notebook">
283
+ <Button
284
+ data-testid="file-explorer-add-notebook-button"
285
+ onClick={onCreateNotebook}
286
+ variant="text"
287
+ size="xs"
288
+ >
289
+ <MarimoPlusIcon size={16} />
290
+ </Button>
291
+ </Tooltip>
270
292
  <Tooltip content="Add file">
271
293
  <Button
272
294
  data-testid="file-explorer-add-file-button"
@@ -467,6 +489,16 @@ const Node = ({ node, style, dragHandle }: NodeRendererProps<FileInfo>) => {
467
489
  });
468
490
  });
469
491
 
492
+ const handleCreateNotebook = useEvent(async () => {
493
+ node.open();
494
+ openPrompt({
495
+ title: "Notebook name",
496
+ onConfirm: async (name) => {
497
+ tree?.createFile(name, node.id, "notebook");
498
+ },
499
+ });
500
+ });
501
+
470
502
  const handleDuplicate = useEvent(async () => {
471
503
  if (!tree || node.data.isDirectory) {
472
504
  return;
@@ -532,6 +564,10 @@ const Node = ({ node, style, dragHandle }: NodeRendererProps<FileInfo>) => {
532
564
  )}
533
565
  {node.data.isDirectory && (
534
566
  <>
567
+ <DropdownMenuItem onSelect={() => handleCreateNotebook()}>
568
+ <MarimoPlusIcon {...iconProps} />
569
+ Create notebook
570
+ </DropdownMenuItem>
535
571
  <DropdownMenuItem onSelect={() => handleCreateFile()}>
536
572
  <FilePlus2Icon {...iconProps} />
537
573
  Create file
@@ -661,11 +697,7 @@ const Node = ({ node, style, dragHandle }: NodeRendererProps<FileInfo>) => {
661
697
  )}
662
698
  >
663
699
  {node.data.isMarimoFile ? (
664
- <img
665
- src={marimoIcon}
666
- className="w-5 h-5 shrink-0 mr-2 filter grayscale"
667
- alt="Marimo"
668
- />
700
+ <MarimoIcon className="w-5 h-5 shrink-0 mr-2" strokeWidth={1.5} />
669
701
  ) : (
670
702
  <Icon className="w-5 h-5 shrink-0 mr-2" strokeWidth={1.5} />
671
703
  )}
@@ -0,0 +1,61 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { ArrowLeftIcon, DownloadIcon, RefreshCwIcon } from "lucide-react";
4
+ import { Button } from "@/components/ui/button";
5
+ import { Tooltip } from "@/components/ui/tooltip";
6
+
7
+ interface FilePreviewHeaderProps {
8
+ filename?: string;
9
+ filenameIcon?: React.ReactNode;
10
+ onBack?: () => void;
11
+ onRefresh?: () => void;
12
+ onDownload?: () => void;
13
+ /** Extra action buttons placed before the download button. */
14
+ actions?: React.ReactNode;
15
+ }
16
+
17
+ export const FilePreviewHeader: React.FC<FilePreviewHeaderProps> = ({
18
+ filename,
19
+ filenameIcon,
20
+ onBack,
21
+ onRefresh,
22
+ onDownload,
23
+ actions,
24
+ }) => {
25
+ return (
26
+ <div className="flex items-center shrink-0 border-b px-1 gap-1">
27
+ {onBack && (
28
+ <Tooltip content="Back to file list">
29
+ <Button variant="text" size="xs" onClick={onBack}>
30
+ <ArrowLeftIcon className="h-4 w-4" />
31
+ </Button>
32
+ </Tooltip>
33
+ )}
34
+ {filename ? (
35
+ <span className="flex items-center gap-1.5 flex-1 min-w-0 text-xs font-semibold truncate">
36
+ {filenameIcon}
37
+ {filename}
38
+ </span>
39
+ ) : (
40
+ <span className="flex-1" />
41
+ )}
42
+ <div className="flex items-center gap-0.5 shrink-0">
43
+ {onRefresh && (
44
+ <Tooltip content="Refresh">
45
+ <Button variant="text" size="xs" onClick={onRefresh}>
46
+ <RefreshCwIcon className="h-3.5 w-3.5" />
47
+ </Button>
48
+ </Tooltip>
49
+ )}
50
+ {actions}
51
+ {onDownload && (
52
+ <Tooltip content="Download">
53
+ <Button variant="text" size="xs" onClick={onDownload}>
54
+ <DownloadIcon className="h-3.5 w-3.5" />
55
+ </Button>
56
+ </Tooltip>
57
+ )}
58
+ </div>
59
+ </div>
60
+ );
61
+ };
@@ -1,19 +1,18 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { EditorView, keymap } from "@codemirror/view";
3
+ import { keymap } from "@codemirror/view";
4
4
  import { useAtomValue } from "jotai";
5
5
  import {
6
6
  AlertTriangleIcon,
7
7
  CopyIcon,
8
- DownloadIcon,
9
8
  ExternalLinkIcon,
10
- RefreshCwIcon,
11
9
  SaveIcon,
12
10
  } from "lucide-react";
13
11
  import type React from "react";
14
- import { Suspense, useEffect, useRef, useState } from "react";
12
+ import { useEffect, useRef, useState } from "react";
15
13
  import { renderShortcut } from "@/components/shortcuts/renderShortcut";
16
14
  import { Alert, AlertDescription } from "@/components/ui/alert";
15
+ import { Button } from "@/components/ui/button";
17
16
  import { Tooltip } from "@/components/ui/tooltip";
18
17
  import { disableFileDownloadsAtom, hotkeysAtom } from "@/core/config/config";
19
18
  import { useRequestClient } from "@/core/network/requests";
@@ -21,19 +20,15 @@ import type { FileInfo } from "@/core/network/types";
21
20
  import { filenameAtom } from "@/core/saving/file-state";
22
21
  import { isWasm } from "@/core/wasm/utils";
23
22
  import { useAsyncData } from "@/hooks/useAsyncData";
24
- import { LazyAnyLanguageCodeMirror } from "@/plugins/impl/code/LazyAnyLanguageCodeMirror";
25
23
  import { ErrorBanner } from "@/plugins/impl/common/error-banner";
26
- import { useTheme } from "@/theme/useTheme";
27
24
  import { copyToClipboard } from "@/utils/copy";
28
25
  import { downloadBlob, downloadByURL } from "@/utils/download";
29
26
  import { type Base64String, base64ToDataURL } from "@/utils/json/base64";
30
- import { Button } from "../inputs/Inputs";
27
+ import { FilePreviewHeader } from "./file-header";
31
28
  import {
32
- AudioViewer,
33
- CsvViewer,
34
- ImageViewer,
35
- PdfViewer,
36
- VideoViewer,
29
+ FileContentRenderer,
30
+ isMediaMime,
31
+ MIME_TO_LANGUAGE,
37
32
  } from "./renderers";
38
33
 
39
34
  interface Props {
@@ -46,7 +41,6 @@ interface Props {
46
41
  const unsavedContentsForFile = new Map<string, string>();
47
42
 
48
43
  export const FileViewer: React.FC<Props> = ({ file, onOpenNotebook }) => {
49
- const { theme } = useTheme();
50
44
  const { sendFileDetails, sendUpdateFile } = useRequestClient();
51
45
  const hotkeys = useAtomValue(hotkeysAtom);
52
46
  const disableFileDownloads = useAtomValue(disableFileDownloadsAtom);
@@ -105,7 +99,7 @@ export const FileViewer: React.FC<Props> = ({ file, onOpenNotebook }) => {
105
99
  }
106
100
 
107
101
  const mimeType = data.mimeType || "text/plain";
108
- const isEditable = mimeType in mimeToLanguage;
102
+ const isEditable = mimeType in MIME_TO_LANGUAGE;
109
103
  const isActiveNotebook =
110
104
  currentNotebookFilename &&
111
105
  data.file.isMarimoFile &&
@@ -127,7 +121,7 @@ export const FileViewer: React.FC<Props> = ({ file, onOpenNotebook }) => {
127
121
  }
128
122
 
129
123
  const handleDownload = () => {
130
- if (isMedia(mimeType)) {
124
+ if (isMediaMime(mimeType)) {
131
125
  const dataURL = base64ToDataURL(data.contents as Base64String, mimeType);
132
126
  downloadByURL(dataURL, data.file.name);
133
127
  return;
@@ -140,109 +134,57 @@ export const FileViewer: React.FC<Props> = ({ file, onOpenNotebook }) => {
140
134
  };
141
135
 
142
136
  const header = (
143
- <div className="text-xs text-muted-foreground p-1 flex justify-end gap-2 border-b">
144
- <Tooltip content="Refresh">
145
- <Button size="small" onClick={refetch}>
146
- <RefreshCwIcon />
147
- </Button>
148
- </Tooltip>
149
- {file.isMarimoFile && !isWasm() && (
150
- <Tooltip content="Open notebook">
151
- <Button size="small" onClick={(evt) => onOpenNotebook(evt)}>
152
- <ExternalLinkIcon />
153
- </Button>
154
- </Tooltip>
155
- )}
156
- {!disableFileDownloads && (
157
- <Tooltip content="Download">
158
- <Button size="small" onClick={handleDownload}>
159
- <DownloadIcon />
160
- </Button>
161
- </Tooltip>
162
- )}
163
- {!isMedia(mimeType) && (
137
+ <FilePreviewHeader
138
+ filename={data.file.name}
139
+ onRefresh={refetch}
140
+ onDownload={disableFileDownloads ? undefined : handleDownload}
141
+ actions={
164
142
  <>
165
- <Tooltip content="Copy contents to clipboard">
166
- <Button
167
- size="small"
168
- onClick={async () => {
169
- await copyToClipboard(internalValue);
170
- }}
171
- >
172
- <CopyIcon />
173
- </Button>
174
- </Tooltip>
175
- <Tooltip content={renderShortcut("global.save")}>
176
- <Button
177
- size="small"
178
- color={internalValue === data.contents ? undefined : "green"}
179
- onClick={handleSaveFile}
180
- disabled={internalValue === data.contents}
181
- >
182
- <SaveIcon />
183
- </Button>
184
- </Tooltip>
143
+ {file.isMarimoFile && !isWasm() && (
144
+ <Tooltip content="Open notebook">
145
+ <Button
146
+ variant="text"
147
+ size="xs"
148
+ onClick={(evt) => onOpenNotebook(evt)}
149
+ >
150
+ <ExternalLinkIcon className="h-3.5 w-3.5" />
151
+ </Button>
152
+ </Tooltip>
153
+ )}
154
+ {!isMediaMime(mimeType) && (
155
+ <>
156
+ <Tooltip content="Copy contents to clipboard">
157
+ <Button
158
+ variant="text"
159
+ size="xs"
160
+ onClick={async () => {
161
+ await copyToClipboard(internalValue);
162
+ }}
163
+ >
164
+ <CopyIcon className="h-3.5 w-3.5" />
165
+ </Button>
166
+ </Tooltip>
167
+ <Tooltip content={renderShortcut("global.save")}>
168
+ <Button
169
+ variant={internalValue === data.contents ? "text" : "success"}
170
+ size="xs"
171
+ onClick={handleSaveFile}
172
+ disabled={internalValue === data.contents}
173
+ >
174
+ <SaveIcon className="h-3.5 w-3.5" />
175
+ </Button>
176
+ </Tooltip>
177
+ </>
178
+ )}
185
179
  </>
186
- )}
187
- </div>
180
+ }
181
+ />
188
182
  );
189
183
 
190
- if (mimeType.startsWith("image/")) {
191
- return (
192
- <>
193
- {header}
194
- <div className="flex-1 overflow-hidden flex flex-col">
195
- <ImageViewer base64={data.contents as Base64String} mime={mimeType} />
196
- </div>
197
- </>
198
- );
199
- }
200
-
201
- if (mimeType === "text/csv" && data.contents) {
202
- return (
203
- <>
204
- {header}
205
- <div className="flex-1 overflow-hidden flex flex-col">
206
- <CsvViewer contents={data.contents} />
207
- </div>
208
- </>
209
- );
210
- }
211
-
212
- if (mimeType.startsWith("audio/")) {
213
- return (
214
- <>
215
- {header}
216
- <div className="flex-1 overflow-hidden flex flex-col">
217
- <AudioViewer base64={data.contents as Base64String} mime={mimeType} />
218
- </div>
219
- </>
220
- );
221
- }
222
-
223
- if (mimeType.startsWith("video/")) {
224
- return (
225
- <>
226
- {header}
227
- <div className="flex-1 overflow-hidden flex flex-col">
228
- <VideoViewer base64={data.contents as Base64String} mime={mimeType} />
229
- </div>
230
- </>
231
- );
232
- }
233
-
234
- if (mimeType.startsWith("application/pdf")) {
235
- return (
236
- <>
237
- {header}
238
- <div className="flex-1 overflow-hidden flex flex-col">
239
- <PdfViewer base64={data.contents as Base64String} mime={mimeType} />
240
- </div>
241
- </>
242
- );
243
- }
184
+ const isMedia = isMediaMime(mimeType);
185
+ const isText = !isMedia && mimeType !== "text/csv";
244
186
 
245
- const warningBanner = isActiveNotebook && (
187
+ const warningBanner = isText && isActiveNotebook && (
246
188
  <Alert variant="warning" className="rounded-none">
247
189
  <AlertTriangleIcon className="h-4 w-4" />
248
190
  <AlertDescription>
@@ -256,60 +198,39 @@ export const FileViewer: React.FC<Props> = ({ file, onOpenNotebook }) => {
256
198
  <>
257
199
  {header}
258
200
  {warningBanner}
259
- <div className="flex-1 overflow-auto">
260
- <Suspense>
261
- <LazyAnyLanguageCodeMirror
262
- theme={theme === "dark" ? "dark" : "light"}
263
- language={mimeToLanguage[mimeType] || mimeToLanguage.default}
264
- className="border-b"
265
- extensions={[
266
- EditorView.lineWrapping,
267
- // Command S for save
268
- keymap.of([
269
- {
270
- key: hotkeys.getHotkey("global.save").key,
271
- stopPropagation: true,
272
- run: () => {
273
- if (internalValue !== data.contents) {
274
- handleSaveFile();
275
- return true;
276
- }
277
- return false;
278
- },
279
- },
280
- ]),
281
- ]}
282
- value={internalValue}
283
- onChange={setInternalValue}
284
- />
285
- </Suspense>
286
- </div>
201
+ <FileContentRenderer
202
+ mimeType={mimeType}
203
+ contents={
204
+ isMedia
205
+ ? undefined
206
+ : isText
207
+ ? internalValue
208
+ : (data.contents ?? undefined)
209
+ }
210
+ mediaSource={
211
+ isMedia
212
+ ? { base64: data.contents as Base64String, mime: mimeType }
213
+ : undefined
214
+ }
215
+ readOnly={!isText}
216
+ onChange={setInternalValue}
217
+ extensions={[
218
+ // Command S for save
219
+ keymap.of([
220
+ {
221
+ key: hotkeys.getHotkey("global.save").key,
222
+ stopPropagation: true,
223
+ run: () => {
224
+ if (internalValue !== data.contents) {
225
+ handleSaveFile();
226
+ return true;
227
+ }
228
+ return false;
229
+ },
230
+ },
231
+ ]),
232
+ ]}
233
+ />
287
234
  </>
288
235
  );
289
236
  };
290
-
291
- const isMedia = (mime: string) => {
292
- if (!mime) {
293
- return false;
294
- }
295
- return (
296
- mime.startsWith("image/") ||
297
- mime.startsWith("audio/") ||
298
- mime.startsWith("video/") ||
299
- mime.startsWith("application/pdf")
300
- );
301
- };
302
-
303
- const mimeToLanguage: Record<string, string> = {
304
- "application/javascript": "javascript",
305
- "text/markdown": "markdown",
306
- "text/html": "html",
307
- "text/css": "css",
308
- "text/x-python": "python",
309
- "application/json": "json",
310
- "application/xml": "xml",
311
- "text/x-yaml": "yaml",
312
- "text/csv": "markdown",
313
- "text/plain": "markdown",
314
- default: "markdown",
315
- };