@marimo-team/islands 0.20.2 → 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 (563) 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 +2019 -5031
  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/utils/__tests__/filenames.test.ts +54 -1
  334. package/src/utils/filenames.ts +42 -0
  335. package/dist/apl-C1bki_dE.js +0 -4
  336. package/dist/architecture-U656AL7Q-Jd2CvPgJ.js +0 -6
  337. package/dist/asciiarmor-BdlkCCRr.js +0 -4
  338. package/dist/asn1-CvE30hox.js +0 -4
  339. package/dist/brainfuck-BalwWy1a.js +0 -4
  340. package/dist/classDiagram-2ON5EDUG-CUJlS_eo.js +0 -30
  341. package/dist/classDiagram-v2-WZHVMYZB-BhSPpbkE.js +0 -30
  342. package/dist/clojure-CUC2I1hM.js +0 -4
  343. package/dist/cmake-8PcMxXnB.js +0 -4
  344. package/dist/cobol-DkkkDz5v.js +0 -4
  345. package/dist/coffeescript-CCupxOZf.js +0 -4
  346. package/dist/commonlisp-DhUfGX6b.js +0 -4
  347. package/dist/crystal-DSaw6rFQ.js +0 -4
  348. package/dist/css-D4QDewkG.js +0 -4
  349. package/dist/cypher-CrYVqw_F.js +0 -4
  350. package/dist/d-Cr3H3pPx.js +0 -4
  351. package/dist/diff-ODiZJGls.js +0 -4
  352. package/dist/dist-BA-HK7pI.js +0 -5
  353. package/dist/dist-BD5GU948.js +0 -5
  354. package/dist/dist-BIYmAsND.js +0 -5
  355. package/dist/dist-BcKTJXJi.js +0 -5
  356. package/dist/dist-BgnrtcWg.js +0 -8
  357. package/dist/dist-C1njTlBq.js +0 -5
  358. package/dist/dist-CSKHwJYH.js +0 -5
  359. package/dist/dist-CSKKyiIq.js +0 -5
  360. package/dist/dist-CrQ_pOuK.js +0 -6
  361. package/dist/dist-Cskx1daf.js +0 -5
  362. package/dist/dist-D4i0Ef34.js +0 -8
  363. package/dist/dist-DOcn61TX.js +0 -8
  364. package/dist/dist-DwMejAPB.js +0 -6
  365. package/dist/dist-DzSe1wby.js +0 -8
  366. package/dist/dtd-C-t2Rk7F.js +0 -4
  367. package/dist/dylan-B4ctBLGp.js +0 -4
  368. package/dist/ecl-DqWfymni.js +0 -4
  369. package/dist/eiffel-DjBKKAr7.js +0 -4
  370. package/dist/elm--fxeC0FV.js +0 -4
  371. package/dist/erlang-CaKXCX6H.js +0 -4
  372. package/dist/factor-DlLO5EFS.js +0 -4
  373. package/dist/flatten-CWZjF1fc.js +0 -8
  374. package/dist/forth-rOO6LVj_.js +0 -4
  375. package/dist/fortran-CUg15VGR.js +0 -4
  376. package/dist/gas-BMRJspiW.js +0 -4
  377. package/dist/gherkin-DRxzijZU.js +0 -4
  378. package/dist/graphlib-CwMnCnQ9.js +0 -362
  379. package/dist/groovy-BmrQ8pUP.js +0 -4
  380. package/dist/haskell-BuaYfKOz.js +0 -4
  381. package/dist/haxe-DcH9eA0a.js +0 -5
  382. package/dist/idl-DGlcm4Ls.js +0 -4
  383. package/dist/infoDiagram-WHAUD3N6-B42WjAPh.js +0 -30
  384. package/dist/javascript-CeTk7rzr.js +0 -4
  385. package/dist/julia-BoP_q1gm.js +0 -4
  386. package/dist/livescript-B7IMN-ba.js +0 -4
  387. package/dist/lua-q1InavKb.js +0 -4
  388. package/dist/main-DmxVpB19.js +0 -1089
  389. package/dist/mathematica-DvR8-_EI.js +0 -4
  390. package/dist/mbox-7h5MNBS_.js +0 -4
  391. package/dist/merge-Db4Uulx4.js +0 -222
  392. package/dist/min-ypdVXicC.js +0 -38
  393. package/dist/mirc-D-XM8A5c.js +0 -4
  394. package/dist/mllike-BQGkkbmf.js +0 -6
  395. package/dist/modelica-D_yRj_WU.js +0 -4
  396. package/dist/mscgen-B-rltAjp.js +0 -6
  397. package/dist/mumps-2kh8TU2b.js +0 -4
  398. package/dist/now-Dwu5ou19.js +0 -31
  399. package/dist/nsis-CtusEqwb.js +0 -4
  400. package/dist/ntriples-BdAXw6zV.js +0 -4
  401. package/dist/octave-CsNFmVp5.js +0 -4
  402. package/dist/oz-odIXCrKd.js +0 -4
  403. package/dist/pascal-B9Mfk3Fo.js +0 -4
  404. package/dist/perl-C48inLcz.js +0 -4
  405. package/dist/pig-uwRtAssU.js +0 -4
  406. package/dist/powershell-CXqlca-i.js +0 -4
  407. package/dist/properties-D6Zu1rpK.js +0 -4
  408. package/dist/protobuf-BlNNWZaR.js +0 -4
  409. package/dist/pug-DytcK7bv.js +0 -4
  410. package/dist/puppet-lJ8Ok3iY.js +0 -4
  411. package/dist/python-cMaF7kUp.js +0 -4
  412. package/dist/q-Dgt2HYQh.js +0 -4
  413. package/dist/r-Bm4S4awf.js +0 -4
  414. package/dist/range-D9jxVFd_.js +0 -67
  415. package/dist/react-vega-1ub36dPZ.js +0 -9
  416. package/dist/reduce-C6NEPj6s.js +0 -133
  417. package/dist/rpm-_8LbzMVc.js +0 -5
  418. package/dist/ruby-Cr8IJ5VZ.js +0 -4
  419. package/dist/sas-CFcSfo2_.js +0 -4
  420. package/dist/scheme-N4XRoKgc.js +0 -4
  421. package/dist/shell-B4L7f_ds.js +0 -4
  422. package/dist/sieve-UI6J3Gm0.js +0 -4
  423. package/dist/slides-component-ql7-5GDI.js +0 -3048
  424. package/dist/smalltalk-BuaPZAZU.js +0 -4
  425. package/dist/sparql-1rKrq463.js +0 -4
  426. package/dist/stateDiagram-v2-4FDKWEC3-7i6jBXe6.js +0 -29
  427. package/dist/stex-D2rme5UG.js +0 -4
  428. package/dist/stylus-DvSovJEP.js +0 -4
  429. package/dist/swift-D-_E7Yyb.js +0 -4
  430. package/dist/tcl-Di5sAVHN.js +0 -4
  431. package/dist/textile-Benwt66z.js +0 -4
  432. package/dist/toml-CeOvPOkY.js +0 -4
  433. package/dist/troff-DJN9hfgu.js +0 -4
  434. package/dist/ttcn-DQW2Psjf.js +0 -4
  435. package/dist/ttcn-cfg-zFG_MNpg.js +0 -4
  436. package/dist/turtle-DHRyNlSc.js +0 -4
  437. package/dist/vb-CXWH9DD-.js +0 -4
  438. package/dist/vbscript-qr8qVck5.js +0 -4
  439. package/dist/velocity-C_9pUJRx.js +0 -4
  440. package/dist/verilog-DxBstgBa.js +0 -4
  441. package/dist/vhdl-odUxAbE6.js +0 -4
  442. package/dist/webidl-Dfn5Rku4.js +0 -4
  443. package/dist/xquery-CrJs6SXr.js +0 -4
  444. package/dist/yacas-B-uDDLZe.js +0 -4
  445. package/dist/z80-51gxgAXE.js +0 -4
  446. /package/dist/{ImageComparisonComponent-CRbA-1eg.js → ImageComparisonComponent-BYQfAfSR.js} +0 -0
  447. /package/dist/{Plot-C9vQQj4X.js → Plot-DfUav0o0.js} +0 -0
  448. /package/dist/{_arrayReduce-REKcIEj3.js → _arrayReduce-BfFy684W.js} +0 -0
  449. /package/dist/{_hasUnicode-DrSAc5A5.js → _hasUnicode-C32WqUu7.js} +0 -0
  450. /package/dist/{apl-Oc3bL26_.js → apl-DRxKiEot.js} +0 -0
  451. /package/dist/{array-CEIRxyh3.js → array-D-nrDupM.js} +0 -0
  452. /package/dist/{asciiarmor-DTbPh2VI.js → asciiarmor-C8HoXFIm.js} +0 -0
  453. /package/dist/{asn1-CGhwu1Ri.js → asn1-9Bo0DYT-.js} +0 -0
  454. /package/dist/{asterisk-Crp-Pien.js → asterisk-BsiuGzWq.js} +0 -0
  455. /package/dist/{brainfuck-CA0L8lRq.js → brainfuck-Db8njC-p.js} +0 -0
  456. /package/dist/{click-outside-container-C_k38vlR.js → click-outside-container-CKfwEZqH.js} +0 -0
  457. /package/dist/{clike-CEtUBPHD.js → clike-CFhUNtI5.js} +0 -0
  458. /package/dist/{clojure-BszjvdGo.js → clojure-CX7oovsp.js} +0 -0
  459. /package/dist/{cmake-B2Gvps8b.js → cmake-C29AR2kk.js} +0 -0
  460. /package/dist/{cobol-DuMch8nn.js → cobol-CNkuRW9i.js} +0 -0
  461. /package/dist/{coffeescript-L9aKXVsJ.js → coffeescript-BJAbfGam.js} +0 -0
  462. /package/dist/{colors-DR_aHfmQ.js → colors-6nB_pSln.js} +0 -0
  463. /package/dist/{common-keywords-NhoiR-2S.js → common-keywords-BAkLFdud.js} +0 -0
  464. /package/dist/{commonlisp-CrtdssxB.js → commonlisp-BTNhj2l9.js} +0 -0
  465. /package/dist/{crystal-vvNY0LpY.js → crystal-CZc0nIm9.js} +0 -0
  466. /package/dist/{css-B1GdzqT1.js → css-L2-0OTXc.js} +0 -0
  467. /package/dist/{cypher-BtZvV7bW.js → cypher-Dnc6MXl0.js} +0 -0
  468. /package/dist/{cytoscape.esm-CgJFiP_E.js → cytoscape.esm-BXzSsA6N.js} +0 -0
  469. /package/dist/{d-B0UN3V-Z.js → d-C6X9iIga.js} +0 -0
  470. /package/dist/{defaultLocale-DjFHq3Xk.js → defaultLocale-Bklbu-Tp.js} +0 -0
  471. /package/dist/{defaultLocale-B_A76Zpk.js → defaultLocale-CfQ4kBaV.js} +0 -0
  472. /package/dist/{diff-DOpgjj1W.js → diff-ZzKinYqY.js} +0 -0
  473. /package/dist/{dist-BYznkC5E.js → dist-Bymy0kEH.js} +0 -0
  474. /package/dist/{dtd-Ctnjxrle.js → dtd-CytEpkAo.js} +0 -0
  475. /package/dist/{duckdb-keywords-BnNtuiVz.js → duckdb-keywords-C1WxmSfG.js} +0 -0
  476. /package/dist/{dylan-DFXkoaZy.js → dylan-CZByFBEQ.js} +0 -0
  477. /package/dist/{ebnf-CFKHGc8c.js → ebnf-BF2FOt-m.js} +0 -0
  478. /package/dist/{ecl-C1NExZip.js → ecl-Cp7L1F5B.js} +0 -0
  479. /package/dist/{eiffel-uXVGgleg.js → eiffel-C66yjnFL.js} +0 -0
  480. /package/dist/{elm-CBOFnnib.js → elm-DtHo-73e.js} +0 -0
  481. /package/dist/{emotion-is-prop-valid.esm--WpIBtj8.js → emotion-is-prop-valid.esm-DtW2o230.js} +0 -0
  482. /package/dist/{erlang-DMnrT8XK.js → erlang-C_sj44mF.js} +0 -0
  483. /package/dist/{error-banner-vCG-EbUQ.js → error-banner-D0tXnwl4.js} +0 -0
  484. /package/dist/{esm-0_ieXYNc.js → esm-BWftfC-A.js} +0 -0
  485. /package/dist/{fcl-DPZwieM9.js → fcl-BhLcvRo_.js} +0 -0
  486. /package/dist/{forth-DDpxS4nw.js → forth-CIDHh56T.js} +0 -0
  487. /package/dist/{fortran-B6uYqQMz.js → fortran-BQrDVXRU.js} +0 -0
  488. /package/dist/{gas-BKnWzuFz.js → gas-D4HQPB0Q.js} +0 -0
  489. /package/dist/{gherkin-pBt0wT4X.js → gherkin-UB2gJHdT.js} +0 -0
  490. /package/dist/{groovy-DKsn4ppB.js → groovy-DVz6jkOx.js} +0 -0
  491. /package/dist/{haskell-BJVBJQcy.js → haskell-CpUdAPCz.js} +0 -0
  492. /package/dist/{haxe-rLN5UZU5.js → haxe-DCV5_cqD.js} +0 -0
  493. /package/dist/{http-AQJFxSug.js → http-C_TDb8VX.js} +0 -0
  494. /package/dist/{idl-B4mwMAo-.js → idl-D7WCIgHw.js} +0 -0
  495. /package/dist/{init-TaqZJsBY.js → init-Ci8VD8ZH.js} +0 -0
  496. /package/dist/{invariant-D-K49MfV.js → invariant-D9QLJ4SZ.js} +0 -0
  497. /package/dist/{javascript-Hf2NLNC0.js → javascript-B2Rn0Lmd.js} +0 -0
  498. /package/dist/{julia-GGpx21YN.js → julia-ApprtEaw.js} +0 -0
  499. /package/dist/{katex-Ba7xZPrx.js → katex-Bk_FvVSR.js} +0 -0
  500. /package/dist/{livescript-CSvXMspZ.js → livescript-BMLIlM7C.js} +0 -0
  501. /package/dist/{lua-CVMR5LMW.js → lua-DdDaW3tC.js} +0 -0
  502. /package/dist/{math-CTnb-N1W.js → math-HUZifhTs.js} +0 -0
  503. /package/dist/{mathematica-JENNt-p4.js → mathematica-PnNN7c2Z.js} +0 -0
  504. /package/dist/{mbox-mzifoc8E.js → mbox-B84OtHBK.js} +0 -0
  505. /package/dist/{mirc-BXoiItvN.js → mirc-BVWXJxIq.js} +0 -0
  506. /package/dist/{mllike-H-KR9OuH.js → mllike-BawXWupH.js} +0 -0
  507. /package/dist/{modelica-B6Hm3mMl.js → modelica-C8-X4Hf_.js} +0 -0
  508. /package/dist/{mscgen-D8TF_Hei.js → mscgen-BOM6dDj8.js} +0 -0
  509. /package/dist/{mumps-CD-kNPt4.js → mumps-DQOY8n05.js} +0 -0
  510. /package/dist/{nginx-hpek_Tnq.js → nginx-DkMgA__9.js} +0 -0
  511. /package/dist/{node-sql-parser-ChQUJk8A.js → node-sql-parser-D53LM_7b.js} +0 -0
  512. /package/dist/{ntriples-DgnpxU40.js → ntriples-DU8VrXdW.js} +0 -0
  513. /package/dist/{octave-CkobqyVm.js → octave-BzTIBsQ8.js} +0 -0
  514. /package/dist/{oz-ChDLd9tS.js → oz-DKFcZsoi.js} +0 -0
  515. /package/dist/{pascal-CvlkwK7E.js → pascal-DHBZ15pT.js} +0 -0
  516. /package/dist/{path-7gr7eZmp.js → path-BVI7RNUv.js} +0 -0
  517. /package/dist/{perl-BNEFTNbM.js → perl-75NMI3w0.js} +0 -0
  518. /package/dist/{pig-Cd1DMS7P.js → pig-B-HY1fo_.js} +0 -0
  519. /package/dist/{powershell-CPxA0zpc.js → powershell-DEH22U53.js} +0 -0
  520. /package/dist/{properties-BaFBm-Xa.js → properties-B1MzBoJC.js} +0 -0
  521. /package/dist/{protobuf-BQV_-X0H.js → protobuf-Dr14KV0p.js} +0 -0
  522. /package/dist/{puppet-LXLST0mx.js → puppet-C4z38l7v.js} +0 -0
  523. /package/dist/{purify.es-D4vaFt5N.js → purify.es-CyOIw8ru.js} +0 -0
  524. /package/dist/{python-DLjLzX4k.js → python-D2L7Nknt.js} +0 -0
  525. /package/dist/{q-DswTX1Y9.js → q-PxipHfgS.js} +0 -0
  526. /package/dist/{r-CO7NpMwE.js → r-CEMMu_Tf.js} +0 -0
  527. /package/dist/{range-DwpxnYuB.js → range-BToS7LsA.js} +0 -0
  528. /package/dist/{rpm-BlmEDT6r.js → rpm-D3xyahkR.js} +0 -0
  529. /package/dist/{ruby-BTPKgeZZ.js → ruby-DwEkwdiu.js} +0 -0
  530. /package/dist/{sas-DTDTiNO8.js → sas-L1W0BRft.js} +0 -0
  531. /package/dist/{scheme-UzAAg4GJ.js → scheme-CTybTrX0.js} +0 -0
  532. /package/dist/{shell-DQ0hQCsB.js → shell-BSx3LZnu.js} +0 -0
  533. /package/dist/{sieve-BVyYIx9u.js → sieve-BjUfbv-6.js} +0 -0
  534. /package/dist/{simple-mode-Dryu-fC9.js → simple-mode-IPZGFbI6.js} +0 -0
  535. /package/dist/{smalltalk-DAdMAHTu.js → smalltalk-BlzuYrMv.js} +0 -0
  536. /package/dist/{solr-BSTJW269.js → solr-Cj_9RM4d.js} +0 -0
  537. /package/dist/{sparql-Bi7quYgw.js → sparql-BXKjQ0cK.js} +0 -0
  538. /package/dist/{spreadsheet-CiBky1_y.js → spreadsheet-CifI10GO.js} +0 -0
  539. /package/dist/{sql-BXZovj-z.js → sql-B0bFyY1c.js} +0 -0
  540. /package/dist/{stex-DIvyJfNO.js → stex-BIsgBmK4.js} +0 -0
  541. /package/dist/{stylus-jhpzcQ6Y.js → stylus-CqrLLVnG.js} +0 -0
  542. /package/dist/{swift-BrO8qThZ.js → swift-DIqvj3_G.js} +0 -0
  543. /package/dist/{tcl-s5QI5gv3.js → tcl-B8bOIGVK.js} +0 -0
  544. /package/dist/{textile-ClhvJrxM.js → textile-DZsjavD_.js} +0 -0
  545. /package/dist/{tiddlywiki-DLTDKQCh.js → tiddlywiki-BbGdvEjx.js} +0 -0
  546. /package/dist/{tiki-tw_kBvbp.js → tiki-BYesmRDo.js} +0 -0
  547. /package/dist/{timer-DV8t68ti.js → timer-CPsmIOdm.js} +0 -0
  548. /package/dist/{toml-TFa3EJQE.js → toml-Uc7m08nl.js} +0 -0
  549. /package/dist/{treemap-CQJ0bIDy.js → treemap-DMn4tIJ7.js} +0 -0
  550. /package/dist/{troff-SqLg0heF.js → troff-GEl5wcXR.js} +0 -0
  551. /package/dist/{ttcn-cfg-Dopc-iwE.js → ttcn-cfg-dZQ_fWTH.js} +0 -0
  552. /package/dist/{ttcn-Cfrap7HJ.js → ttcn-pr4FDOLT.js} +0 -0
  553. /package/dist/{turtle-Dt52DvVH.js → turtle-TPRDOknA.js} +0 -0
  554. /package/dist/{vb-D1pAvfDe.js → vb-BJUAeTYr.js} +0 -0
  555. /package/dist/{vbscript-DZ7RBxn5.js → vbscript-CcJ6Z3ic.js} +0 -0
  556. /package/dist/{velocity-Csau7eZy.js → velocity-pq4ZMzU3.js} +0 -0
  557. /package/dist/{verilog-gXlZACs5.js → verilog-timMNjHt.js} +0 -0
  558. /package/dist/{vhdl-NaUWbI1B.js → vhdl-DYFbVKNm.js} +0 -0
  559. /package/dist/{webidl-BJmPjW01.js → webidl-pue9oqnb.js} +0 -0
  560. /package/dist/{xquery-CJIPsC0g.js → xquery-DeItGynK.js} +0 -0
  561. /package/dist/{yacas-8f2Vjiiz.js → yacas-By2Qrjba.js} +0 -0
  562. /package/dist/{z80-s5Xk2hCP.js → z80-C7iLsyPC.js} +0 -0
  563. /package/src/components/editor/file-tree/__tests__/{file-expolorer.test.ts → file-explorer.test.ts} +0 -0
@@ -0,0 +1,143 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { describe, expect, it } from "vitest";
4
+ import { extractCellPreview } from "../cell-preview";
5
+
6
+ describe("extractCellPreview", () => {
7
+ describe("markdown cells", () => {
8
+ it("extracts heading from f-string triple-double-quoted markdown", () => {
9
+ expect(extractCellPreview('mo.md(f"""# Heading\nbody""")')).toEqual({
10
+ text: "# Heading",
11
+ type: "markdown",
12
+ });
13
+ });
14
+
15
+ it("extracts text from r-prefixed triple-double-quoted markdown", () => {
16
+ expect(extractCellPreview('mo.md(r"""text""")')).toEqual({
17
+ text: "text",
18
+ type: "markdown",
19
+ });
20
+ });
21
+
22
+ it("skips leading empty lines", () => {
23
+ expect(extractCellPreview('mo.md(f"""\n# Heading\n""")')).toEqual({
24
+ text: "# Heading",
25
+ type: "markdown",
26
+ });
27
+ });
28
+
29
+ it("returns undefined text for empty markdown", () => {
30
+ expect(extractCellPreview('mo.md("")')).toEqual({
31
+ text: undefined,
32
+ type: "markdown",
33
+ });
34
+ });
35
+
36
+ it("works with single-quoted strings", () => {
37
+ expect(extractCellPreview("mo.md('single line')")).toEqual({
38
+ text: "single line",
39
+ type: "markdown",
40
+ });
41
+ });
42
+
43
+ it("works with triple-single-quoted strings", () => {
44
+ expect(extractCellPreview("mo.md('''some text''')")).toEqual({
45
+ text: "some text",
46
+ type: "markdown",
47
+ });
48
+ });
49
+
50
+ it("works with fr prefix", () => {
51
+ expect(extractCellPreview('mo.md(fr"""# Title\n{x}""")')).toEqual({
52
+ text: "# Title",
53
+ type: "markdown",
54
+ });
55
+ });
56
+
57
+ it("works with no prefix", () => {
58
+ expect(extractCellPreview('mo.md("""plain text""")')).toEqual({
59
+ text: "plain text",
60
+ type: "markdown",
61
+ });
62
+ });
63
+ });
64
+
65
+ describe("SQL cells", () => {
66
+ it("extracts SQL from assignment with f-string", () => {
67
+ expect(
68
+ extractCellPreview('_df = mo.sql(f"""SELECT * FROM cars""")'),
69
+ ).toEqual({
70
+ text: "SELECT * FROM cars",
71
+ type: "sql",
72
+ });
73
+ });
74
+
75
+ it("skips leading newlines in SQL", () => {
76
+ expect(
77
+ extractCellPreview('_df = mo.sql(f"""\nSELECT * FROM t\n""")'),
78
+ ).toEqual({
79
+ text: "SELECT * FROM t",
80
+ type: "sql",
81
+ });
82
+ });
83
+
84
+ it("returns first line of multi-line SQL", () => {
85
+ expect(
86
+ extractCellPreview(
87
+ '_df = mo.sql(f"""SELECT *\nFROM users\nWHERE id = 1""")',
88
+ ),
89
+ ).toEqual({
90
+ text: "SELECT *",
91
+ type: "sql",
92
+ });
93
+ });
94
+
95
+ it("handles SQL with engine kwarg after string", () => {
96
+ expect(
97
+ extractCellPreview('_df = mo.sql(f"""SELECT 1""", engine=my_engine)'),
98
+ ).toEqual({
99
+ text: "SELECT 1",
100
+ type: "sql",
101
+ });
102
+ });
103
+
104
+ it("returns undefined text for empty SQL string", () => {
105
+ expect(extractCellPreview('_df = mo.sql(f"""""")')).toEqual({
106
+ text: undefined,
107
+ type: "sql",
108
+ });
109
+ });
110
+ });
111
+
112
+ describe("Python fallback", () => {
113
+ it("returns first line of Python code", () => {
114
+ expect(extractCellPreview("import pandas as pd")).toEqual({
115
+ text: "import pandas as pd",
116
+ type: "python",
117
+ });
118
+ });
119
+
120
+ it("returns first line of multi-line Python", () => {
121
+ expect(extractCellPreview("x = 1\ny = 2")).toEqual({
122
+ text: "x = 1",
123
+ type: "python",
124
+ });
125
+ });
126
+
127
+ it("returns undefined text for empty string", () => {
128
+ // MarkdownParser.isSupported("") returns true, so empty cells
129
+ // are classified as markdown — the text is undefined either way.
130
+ expect(extractCellPreview("")).toEqual({
131
+ text: undefined,
132
+ type: "markdown",
133
+ });
134
+ });
135
+
136
+ it("returns undefined text for whitespace-only string", () => {
137
+ expect(extractCellPreview(" \n ")).toEqual({
138
+ text: undefined,
139
+ type: "markdown",
140
+ });
141
+ });
142
+ });
143
+ });
@@ -0,0 +1,46 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { MarkdownParser, SQLParser } from "@marimo-team/smart-cells";
4
+
5
+ export interface CellPreview {
6
+ text: string | undefined;
7
+ type: "python" | "markdown" | "sql";
8
+ }
9
+
10
+ const markdownParser = new MarkdownParser();
11
+ const sqlParser = new SQLParser();
12
+
13
+ function firstNonEmptyLine(content: string): string | undefined {
14
+ for (const line of content.split("\n")) {
15
+ const trimmed = line.trim();
16
+ if (trimmed.length > 0) {
17
+ return trimmed;
18
+ }
19
+ }
20
+ return undefined;
21
+ }
22
+
23
+ /**
24
+ * Extract a human-readable preview and cell type from raw cell code.
25
+ *
26
+ * For markdown cells (`mo.md(...)`) and SQL cells (`mo.sql(...)`),
27
+ * returns the inner content's first non-empty line instead of the
28
+ * Python wrapper boilerplate.
29
+ */
30
+ export function extractCellPreview(code: string): CellPreview {
31
+ const trimmed = code.trim();
32
+
33
+ if (markdownParser.isSupported(trimmed)) {
34
+ const { code: inner } = markdownParser.transformIn(trimmed);
35
+ return { text: firstNonEmptyLine(inner), type: "markdown" };
36
+ }
37
+
38
+ if (sqlParser.isSupported(trimmed)) {
39
+ const { code: inner } = sqlParser.transformIn(trimmed);
40
+ return { text: firstNonEmptyLine(inner), type: "sql" };
41
+ }
42
+
43
+ // Python fallback: first line of raw code
44
+ const firstLine = trimmed.split("\n")[0]?.trim();
45
+ return { text: firstLine || undefined, type: "python" };
46
+ }
@@ -1,12 +1,5 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- import React, {
3
- memo,
4
- Suspense,
5
- useEffect,
6
- useMemo,
7
- useRef,
8
- useState,
9
- } from "react";
2
+ import React, { memo, Suspense, useMemo, useRef } from "react";
10
3
  import { type CellId, CellOutputId } from "@/core/cells/ids";
11
4
  import type { CellOutput, OutputMessage } from "@/core/kernel/messages";
12
5
  import { cn } from "@/utils/cn";
@@ -30,6 +23,7 @@ import { tooltipHandler } from "@/components/charts/tooltip";
30
23
  import { useExpandedOutput } from "@/core/cells/outputs";
31
24
  import { viewStateAtom } from "@/core/mode";
32
25
  import { useIframeCapabilities } from "@/hooks/useIframeCapabilities";
26
+ import { useOverflowDetection } from "@/hooks/useOverflowDetection";
33
27
  import { renderHTML } from "@/plugins/core/RenderHTML";
34
28
  import { Banner } from "@/plugins/impl/common/error-banner";
35
29
  import type { TopLevelFacetedUnitSpec } from "@/plugins/impl/data-explorer/queries/types";
@@ -427,28 +421,9 @@ const ExpandableOutput = React.memo(
427
421
  }) => {
428
422
  const containerRef = useRef<HTMLDivElement>(null);
429
423
  const [isExpanded, setIsExpanded] = useExpandedOutput(cellId);
430
- const [isOverflowing, setIsOverflowing] = useState(false);
424
+ const isOverflowing = useOverflowDetection(containerRef);
431
425
  const { hasFullscreen } = useIframeCapabilities();
432
426
 
433
- // Create resize observer to detect overflow
434
- useEffect(() => {
435
- if (!containerRef.current) {
436
- return;
437
- }
438
- const el = containerRef.current;
439
-
440
- const detectOverflow = () => {
441
- setIsOverflowing(el.scrollHeight > el.clientHeight);
442
- };
443
-
444
- const resizeObserver = new ResizeObserver(detectOverflow);
445
- resizeObserver.observe(el);
446
-
447
- return () => {
448
- resizeObserver.disconnect();
449
- };
450
- }, [props.id]);
451
-
452
427
  return (
453
428
  <>
454
429
  <div>
@@ -64,6 +64,10 @@ const CellActionsDropdownInternal = (
64
64
  const buttonRef = useRef<HTMLButtonElement>(null);
65
65
  const actions = useCellActionButtons({ cell: props, closePopover });
66
66
 
67
+ const visibleActions = actions
68
+ .map((group) => group.filter((action) => !action.redundant))
69
+ .filter((group) => group.length > 0);
70
+
67
71
  // store the last focused element so we can restore it when the popover closes
68
72
  const restoreFocus = useRestoreFocus();
69
73
 
@@ -112,13 +116,10 @@ const CellActionsDropdownInternal = (
112
116
  />
113
117
  <CommandList>
114
118
  <CommandEmpty>No results</CommandEmpty>
115
- {actions.map((group, i) => (
119
+ {visibleActions.map((group, i) => (
116
120
  <Fragment key={i}>
117
121
  <CommandGroup key={i}>
118
122
  {group.map((action) => {
119
- if (action.redundant) {
120
- return null;
121
- }
122
123
  let body = (
123
124
  <div className="flex items-center flex-1">
124
125
  {action.icon && (
@@ -162,7 +163,7 @@ const CellActionsDropdownInternal = (
162
163
  );
163
164
  })}
164
165
  </CommandGroup>
165
- {i < actions.length - 1 && <CommandSeparator />}
166
+ {i < visibleActions.length - 1 && <CommandSeparator />}
166
167
  </Fragment>
167
168
  ))}
168
169
  </CommandList>
@@ -26,6 +26,7 @@ import { isOutputEmpty } from "@/core/cells/outputs";
26
26
  import { goToDefinitionAtCursorPosition } from "@/core/codemirror/go-to-definition/utils";
27
27
  import { sendToPanelManager } from "@/core/vscode/vscode-bindings";
28
28
  import { copyToClipboard } from "@/utils/copy";
29
+ import { getImageExtension } from "@/utils/filenames";
29
30
  import { Logger } from "@/utils/Logger";
30
31
  import type { ActionButton } from "../actions/types";
31
32
  import {
@@ -154,8 +155,9 @@ export const CellActionsContextMenu = ({
154
155
  handle: () => {
155
156
  if (imageRightClicked) {
156
157
  const link = document.createElement("a");
157
- link.download = "image.png";
158
158
  link.href = imageRightClicked.src;
159
+ const ext = getImageExtension(imageRightClicked.src) || "png";
160
+ link.download = `image.${ext}`;
159
161
  link.click();
160
162
  }
161
163
  },
@@ -174,6 +176,12 @@ export const CellActionsContextMenu = ({
174
176
 
175
177
  const allActions: ActionButton[][] = [DEFAULT_CONTEXT_MENU_ITEMS, ...actions];
176
178
 
179
+ const visibleActions = allActions
180
+ .map((group) =>
181
+ group.filter((action) => !action.hidden && !action.redundant),
182
+ )
183
+ .filter((group) => group.length > 0);
184
+
177
185
  return (
178
186
  <ContextMenu>
179
187
  <ContextMenuTrigger
@@ -189,13 +197,9 @@ export const CellActionsContextMenu = ({
189
197
  {children}
190
198
  </ContextMenuTrigger>
191
199
  <ContextMenuContent className="w-[300px]" scrollable={true}>
192
- {allActions.map((group, i) => (
200
+ {visibleActions.map((group, i) => (
193
201
  <Fragment key={i}>
194
202
  {group.map((action) => {
195
- if (action.hidden || action.redundant) {
196
- return null;
197
- }
198
-
199
203
  let body = (
200
204
  <div className="flex items-center flex-1">
201
205
  {action.icon && (
@@ -256,7 +260,7 @@ export const CellActionsContextMenu = ({
256
260
  </Fragment>
257
261
  );
258
262
  })}
259
- {i < allActions.length - 1 && <ContextMenuSeparator />}
263
+ {i < visibleActions.length - 1 && <ContextMenuSeparator />}
260
264
  </Fragment>
261
265
  ))}
262
266
  </ContextMenuContent>
@@ -0,0 +1,88 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import * as React from "react";
4
+ import {
5
+ AccordionContent,
6
+ AccordionItem,
7
+ AccordionTrigger,
8
+ } from "@/components/ui/accordion";
9
+ import { Badge } from "@/components/ui/badge";
10
+ import { cn } from "@/utils/cn";
11
+
12
+ /**
13
+ * Styled AccordionItem for sidebar panels.
14
+ * Applies border-b by default; set `lastItem` to remove it on the final item.
15
+ */
16
+ const PanelAccordionItem = React.forwardRef<
17
+ React.ComponentRef<typeof AccordionItem>,
18
+ React.ComponentPropsWithoutRef<typeof AccordionItem> & {
19
+ lastItem?: boolean;
20
+ }
21
+ >(({ className, lastItem, ...props }, ref) => (
22
+ <AccordionItem
23
+ ref={ref}
24
+ className={cn(lastItem && "border-b-0", className)}
25
+ {...props}
26
+ />
27
+ ));
28
+ PanelAccordionItem.displayName = "PanelAccordionItem";
29
+
30
+ /**
31
+ * Styled AccordionTrigger for sidebar panels.
32
+ * Applies compact uppercase styling and wraps children in a flex container
33
+ * with gap for icon + label layout.
34
+ */
35
+ const PanelAccordionTrigger = React.forwardRef<
36
+ React.ComponentRef<typeof AccordionTrigger>,
37
+ React.ComponentPropsWithoutRef<typeof AccordionTrigger>
38
+ >(({ className, children, ...props }, ref) => (
39
+ <AccordionTrigger
40
+ ref={ref}
41
+ className={cn(
42
+ "px-3 py-2 text-xs font-semibold uppercase tracking-wide hover:no-underline",
43
+ className,
44
+ )}
45
+ {...props}
46
+ >
47
+ <span className="flex items-center gap-2">{children}</span>
48
+ </AccordionTrigger>
49
+ ));
50
+ PanelAccordionTrigger.displayName = "PanelAccordionTrigger";
51
+
52
+ /**
53
+ * Styled AccordionContent for sidebar panels.
54
+ * Removes default wrapper padding.
55
+ */
56
+ const PanelAccordionContent = React.forwardRef<
57
+ React.ComponentRef<typeof AccordionContent>,
58
+ React.ComponentPropsWithoutRef<typeof AccordionContent>
59
+ >(({ wrapperClassName, ...props }, ref) => (
60
+ <AccordionContent
61
+ ref={ref}
62
+ wrapperClassName={cn("p-0", wrapperClassName)}
63
+ {...props}
64
+ />
65
+ ));
66
+ PanelAccordionContent.displayName = "PanelAccordionContent";
67
+
68
+ /**
69
+ * Styled Badge for sidebar panels.
70
+ */
71
+ const PanelBadge = ({
72
+ className,
73
+ ...props
74
+ }: React.ComponentPropsWithoutRef<typeof Badge>) => (
75
+ <Badge
76
+ variant="secondary"
77
+ className={cn("py-0 px-1.5 text-[10px]", className)}
78
+ {...props}
79
+ />
80
+ );
81
+ PanelBadge.displayName = "PanelBadge";
82
+
83
+ export {
84
+ PanelAccordionItem,
85
+ PanelAccordionTrigger,
86
+ PanelAccordionContent,
87
+ PanelBadge,
88
+ };
@@ -1,14 +1,40 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import React from "react";
3
+ import { useAtom, useAtomValue } from "jotai";
4
+ import { atomWithStorage } from "jotai/utils";
5
+ import { FileIcon, HardDrive } from "lucide-react";
6
+ import React, { useCallback, useMemo } from "react";
4
7
  import useResizeObserver from "use-resize-observer";
8
+ import { StorageInspector } from "@/components/storage/storage-inspector";
9
+ import { Accordion } from "@/components/ui/accordion";
10
+ import { getFeatureFlag } from "@/core/config/feature-flag";
11
+ import { storageNamespacesAtom } from "@/core/storage/state";
5
12
  import { cn } from "@/utils/cn";
13
+ import { jotaiJsonStorage } from "@/utils/storage/jotai";
6
14
  import { TreeDndProvider } from "../../file-tree/dnd-wrapper";
7
15
  import { FileExplorer } from "../../file-tree/file-explorer";
8
16
  import { useFileExplorerUpload } from "../../file-tree/upload";
17
+ import {
18
+ PanelAccordionContent,
19
+ PanelAccordionItem,
20
+ PanelAccordionTrigger,
21
+ PanelBadge,
22
+ } from "./components";
9
23
 
10
- const FileExplorerPanel: React.FC = () => {
11
- const { ref, height = 1 } = useResizeObserver<HTMLDivElement>();
24
+ type OpenSections = "files" | "remote-storage";
25
+
26
+ interface FileExplorerPanelState {
27
+ openSections: OpenSections[];
28
+ hasUserInteracted: boolean;
29
+ }
30
+
31
+ const fileExplorerPanelAtom = atomWithStorage<FileExplorerPanelState>(
32
+ "marimo:file-explorer-panel:state",
33
+ { openSections: ["files"], hasUserInteracted: false },
34
+ jotaiJsonStorage,
35
+ );
36
+
37
+ const FileExplorerComponent: React.FC<{ height: number }> = ({ height }) => {
12
38
  const { getRootProps, getInputProps, isDragActive } = useFileExplorerUpload({
13
39
  noClick: true,
14
40
  noKeyboard: true,
@@ -18,7 +44,8 @@ const FileExplorerPanel: React.FC = () => {
18
44
  <TreeDndProvider>
19
45
  <div
20
46
  {...getRootProps()}
21
- className={cn("flex flex-col flex-1 overflow-hidden relative")}
47
+ className={cn("flex flex-col overflow-hidden relative")}
48
+ style={{ height }}
22
49
  >
23
50
  <input {...getInputProps()} />
24
51
  {isDragActive && (
@@ -27,12 +54,98 @@ const FileExplorerPanel: React.FC = () => {
27
54
  </div>
28
55
  )}
29
56
 
30
- <div ref={ref} className="flex flex-col flex-1 overflow-hidden">
31
- <FileExplorer height={height} />
32
- </div>
57
+ <FileExplorer height={height} />
33
58
  </div>
34
59
  </TreeDndProvider>
35
60
  );
36
61
  };
37
62
 
63
+ // Height of each accordion trigger (px-3 py-2 text-xs = ~33px)
64
+ const TRIGGER_HEIGHT = 33;
65
+
66
+ const FileExplorerPanel: React.FC = () => {
67
+ const { ref: panelRef, height: panelHeight = 500 } =
68
+ useResizeObserver<HTMLDivElement>();
69
+ const [state, setState] = useAtom(fileExplorerPanelAtom);
70
+
71
+ const storageNamespaces = useAtomValue(storageNamespacesAtom);
72
+ const remoteStorageConnections = storageNamespaces.length;
73
+
74
+ const openSections = useMemo<OpenSections[]>(() => {
75
+ if (!state.hasUserInteracted && remoteStorageConnections > 0) {
76
+ if (state.openSections.includes("remote-storage")) {
77
+ return state.openSections;
78
+ }
79
+ return [...state.openSections, "remote-storage"];
80
+ }
81
+ return state.openSections;
82
+ }, [state.hasUserInteracted, state.openSections, remoteStorageConnections]);
83
+
84
+ const handleValueChange = useCallback(
85
+ (value: OpenSections[]) => {
86
+ setState({
87
+ openSections: value,
88
+ hasUserInteracted: true,
89
+ });
90
+ },
91
+ [setState],
92
+ );
93
+
94
+ const availableContent = panelHeight - TRIGGER_HEIGHT * 2;
95
+ const storageIsOpen = openSections.includes("remote-storage");
96
+ const bothOpen = storageIsOpen && openSections.includes("files");
97
+
98
+ const storageMaxHeight = bothOpen
99
+ ? Math.round(availableContent * 0.4)
100
+ : availableContent;
101
+ const fileTreeHeight = Math.max(
102
+ 200,
103
+ bothOpen ? availableContent - storageMaxHeight : availableContent,
104
+ );
105
+
106
+ const storageInspectorEnabled = getFeatureFlag("storage_inspector");
107
+ if (!storageInspectorEnabled) {
108
+ return (
109
+ <div ref={panelRef} className="h-full overflow-auto">
110
+ <FileExplorerComponent height={panelHeight} />
111
+ </div>
112
+ );
113
+ }
114
+
115
+ return (
116
+ <div ref={panelRef} className="h-full overflow-auto">
117
+ <Accordion
118
+ type="multiple"
119
+ value={openSections}
120
+ onValueChange={handleValueChange}
121
+ >
122
+ <PanelAccordionItem value="remote-storage">
123
+ <PanelAccordionTrigger>
124
+ <HardDrive className="w-4 h-4" /> Remote storage
125
+ {remoteStorageConnections > 0 && (
126
+ <PanelBadge>{remoteStorageConnections}</PanelBadge>
127
+ )}
128
+ </PanelAccordionTrigger>
129
+ <PanelAccordionContent
130
+ className="overflow-auto"
131
+ style={{ maxHeight: storageMaxHeight }}
132
+ >
133
+ <StorageInspector />
134
+ </PanelAccordionContent>
135
+ </PanelAccordionItem>
136
+
137
+ <PanelAccordionItem value="files">
138
+ <PanelAccordionTrigger>
139
+ <FileIcon className="w-4 h-4" />
140
+ Files
141
+ </PanelAccordionTrigger>
142
+ <PanelAccordionContent>
143
+ <FileExplorerComponent height={fileTreeHeight} />
144
+ </PanelAccordionContent>
145
+ </PanelAccordionItem>
146
+ </Accordion>
147
+ </div>
148
+ );
149
+ };
150
+
38
151
  export default FileExplorerPanel;
@@ -30,7 +30,7 @@ export const FloatingOutline: React.FC = () => {
30
30
  onMouseEnter={() => setIsHovered(true)}
31
31
  onMouseLeave={() => setIsHovered(false)}
32
32
  className={cn(
33
- "fixed top-[25vh] right-8 z-10000",
33
+ "fixed top-[25vh] right-8 z-10000 print:hidden",
34
34
  // Hide on small screens
35
35
  "hidden md:block",
36
36
  )}
@@ -105,21 +105,33 @@ export const OutlineList: React.FC<{
105
105
  const occurrences = seen.get(identifier) ?? 0;
106
106
  seen.set(identifier, occurrences + 1);
107
107
 
108
+ const key = `${identifier}-${idx}`;
109
+ const sharedProps = {
110
+ className: cn(
111
+ "px-2 py-1 cursor-pointer hover:bg-accent/50 hover:text-accent-foreground rounded-l",
112
+ item.level === 1 && "font-semibold",
113
+ item.level === 2 && "ml-3",
114
+ item.level === 3 && "ml-6",
115
+ item.level === 4 && "ml-9",
116
+ occurrences === activeOccurrences &&
117
+ activeHeaderId === identifier &&
118
+ "text-accent-foreground",
119
+ ),
120
+ onClick: () => scrollToOutlineItem(item, occurrences),
121
+ };
122
+
123
+ if (item.html) {
124
+ return (
125
+ <div
126
+ key={key}
127
+ {...sharedProps}
128
+ dangerouslySetInnerHTML={{ __html: item.html }}
129
+ />
130
+ );
131
+ }
132
+
108
133
  return (
109
- <div
110
- key={`${identifier}-${idx}`}
111
- className={cn(
112
- "px-2 py-1 cursor-pointer hover:bg-accent/50 hover:text-accent-foreground rounded-l",
113
- item.level === 1 && "font-semibold",
114
- item.level === 2 && "ml-3",
115
- item.level === 3 && "ml-6",
116
- item.level === 4 && "ml-9",
117
- occurrences === activeOccurrences &&
118
- activeHeaderId === identifier &&
119
- "text-accent-foreground",
120
- )}
121
- onClick={() => scrollToOutlineItem(item, occurrences)}
122
- >
134
+ <div key={key} {...sharedProps}>
123
135
  {item.name}
124
136
  </div>
125
137
  );