@marimo-team/frontend 0.23.3-dev3 → 0.23.3-dev33

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 (622) hide show
  1. package/dist/assets/{CellStatus-Dtymd7Mw.js → CellStatus-BRcxaA-Z.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-ChNjqWW0.js → ConnectedDataExplorerComponent-Bxogo_Sw.js} +1 -1
  3. package/dist/assets/{DeferredRequestRegistry-C2V-hXrK.js → DeferredRequestRegistry-Bobqy1XF.js} +1 -1
  4. package/dist/assets/{ImperativeModal-CAFE3UV7.js → ImperativeModal-QWJWbLVR.js} +1 -1
  5. package/dist/assets/{JsonOutput-sWUD3O5F.js → JsonOutput-BLiYwyAC.js} +12 -12
  6. package/dist/assets/LazyAnyLanguageCodeMirror-B4dqgtrW.js +2 -0
  7. package/dist/assets/{MarimoErrorOutput-CUkxKVSp.js → MarimoErrorOutput-BWFFx2VQ.js} +1 -1
  8. package/dist/assets/{RSPContexts-CrATdGvz.js → RSPContexts-Bxv3gv46.js} +1 -1
  9. package/dist/assets/{RenderHTML-aOmkRy0R.js → RenderHTML-DweIff7M.js} +1 -1
  10. package/dist/assets/{add-cell-with-ai-apfqz2QF.js → add-cell-with-ai-BKhUWiT4.js} +1 -1
  11. package/dist/assets/{add-connection-dialog-D6XFTnTb.js → add-connection-dialog-C1aIq9FP.js} +1 -1
  12. package/dist/assets/{agent-panel-D7n2noTX.js → agent-panel-BF6fYTEU.js} +1 -1
  13. package/dist/assets/{ai-model-dropdown-CMNpHk5I.js → ai-model-dropdown-Cq8Bx0V5.js} +1 -1
  14. package/dist/assets/{any-language-editor-CFmH0GoP.js → any-language-editor-DxmolZrV.js} +1 -1
  15. package/dist/assets/apl-CuOurP-c.js +1 -0
  16. package/dist/assets/{app-config-button-CXAAPUFL.js → app-config-button-DA64Zwmh.js} +1 -1
  17. package/dist/assets/{arc-3DY1fURi.js → arc-dPVZ2r1X.js} +1 -1
  18. package/dist/assets/{architecture-7HQA4BMR-CKjkd5Dl.js → architecture-7HQA4BMR-CDlW2bIF.js} +1 -1
  19. package/dist/assets/{architectureDiagram-VXUJARFQ-x1tfs-Zy.js → architectureDiagram-VXUJARFQ-BIxSxJ1n.js} +1 -1
  20. package/dist/assets/asciiarmor-C4q0KAuh.js +1 -0
  21. package/dist/assets/asn1-gmsDz0li.js +1 -0
  22. package/dist/assets/{blockDiagram-VD42YOAC-DsnHpCid.js → blockDiagram-VD42YOAC-Bhz_qfg3.js} +1 -1
  23. package/dist/assets/brainfuck-RlYwG6Xx.js +1 -0
  24. package/dist/assets/{c4Diagram-YG6GDRKO-D32cjsO5.js → c4Diagram-YG6GDRKO-C2TPKPvJ.js} +1 -1
  25. package/dist/assets/{cache-panel-_zalrRwf.js → cache-panel-Ks8PpcN1.js} +1 -1
  26. package/dist/assets/{cell-editor-BUrhiKcX.js → cell-editor-DL4womh8.js} +3 -3
  27. package/dist/assets/{cell-link-owqfXuA4.js → cell-link-DiZacqDz.js} +1 -1
  28. package/dist/assets/{cells-BA9ZN5Xy.js → cells-_QgKZKXb.js} +5 -5
  29. package/dist/assets/channel-DrzQ4dkV.js +1 -0
  30. package/dist/assets/{chat-display-AB-C2j6p.js → chat-display-DyTcEZFU.js} +1 -1
  31. package/dist/assets/{chat-panel-C1Evz8wb.js → chat-panel-DVFjhDIb.js} +1 -1
  32. package/dist/assets/{chat-ui-CcArYoMw.js → chat-ui-CyIhz4-T.js} +1 -1
  33. package/dist/assets/{chunk-4BX2VUAB-hp7-9s5b.js → chunk-4BX2VUAB-BtkoEUm5.js} +1 -1
  34. package/dist/assets/chunk-55IACEB6-C0WB3ojj.js +1 -0
  35. package/dist/assets/{chunk-5FQGJX7Z-wbiBygI_.js → chunk-5FQGJX7Z-CQS0x34U.js} +3 -3
  36. package/dist/assets/{chunk-ABZYJK2D-CSzcbtsR.js → chunk-ABZYJK2D-Djqzm08o.js} +3 -3
  37. package/dist/assets/{chunk-ATLVNIR6-BGYBu2zE.js → chunk-ATLVNIR6-BLh4jD_n.js} +1 -1
  38. package/dist/assets/{chunk-B4BG7PRW-S78japIA.js → chunk-B4BG7PRW-CEbAymbQ.js} +1 -1
  39. package/dist/assets/{chunk-CVBHYZKI-DJ6aHNEG.js → chunk-CVBHYZKI-DU48rJVu.js} +1 -1
  40. package/dist/assets/{chunk-DI55MBZ5-B1Vz0MTl.js → chunk-DI55MBZ5-D27slPkl.js} +1 -1
  41. package/dist/assets/{chunk-EXTU4WIE-D-Spa6rW.js → chunk-EXTU4WIE-CIsrjnFi.js} +1 -1
  42. package/dist/assets/{chunk-FMBD7UC4-DiqdRLvx.js → chunk-FMBD7UC4-Dt9Umy1r.js} +1 -1
  43. package/dist/assets/{chunk-HN2XXSSU-CigyI152.js → chunk-HN2XXSSU-Bdbi3Mns.js} +1 -1
  44. package/dist/assets/{chunk-JA3XYJ7Z-BJGCDHDS.js → chunk-JA3XYJ7Z-BTrWHP3y.js} +1 -1
  45. package/dist/assets/{chunk-JZLCHNYA-lm1LBIfJ.js → chunk-JZLCHNYA-LclGfauS.js} +1 -1
  46. package/dist/assets/{chunk-MI3HLSF2-vtv46ho2.js → chunk-MI3HLSF2-n3vxgSbN.js} +1 -1
  47. package/dist/assets/{chunk-N4CR4FBY-BQWUF0Ly.js → chunk-N4CR4FBY-w0eE8xM0.js} +2 -2
  48. package/dist/assets/{chunk-QN33PNHL-Buv0c3y8.js → chunk-QN33PNHL-f1vj2iOo.js} +1 -1
  49. package/dist/assets/{chunk-QXUST7PY-tI3bGlcO.js → chunk-QXUST7PY-qfZjyLmh.js} +1 -1
  50. package/dist/assets/{chunk-QZHKN3VN-BWO63iFa.js → chunk-QZHKN3VN-Cp6Fo6NS.js} +1 -1
  51. package/dist/assets/{chunk-S3R3BYOJ-BwE-T8-d.js → chunk-S3R3BYOJ-CcarQkcq.js} +1 -1
  52. package/dist/assets/{chunk-TZMSLE5B-zQ3MzIy5.js → chunk-TZMSLE5B-CWbra1hF.js} +1 -1
  53. package/dist/assets/classDiagram-2ON5EDUG-BDDARHRt.js +1 -0
  54. package/dist/assets/classDiagram-v2-WZHVMYZB-DCy5PwnC.js +1 -0
  55. package/dist/assets/{clike-B5Yp94w5.js → clike-0Uxq7Mmj.js} +1 -1
  56. package/dist/assets/clojure-DaWCBM5I.js +1 -0
  57. package/dist/assets/cmake-Nobmxv0n.js +1 -0
  58. package/dist/assets/cobol--NmnvDWE.js +1 -0
  59. package/dist/assets/{code-block-37QAKDTI-Bf-3UT2Z.js → code-block-37QAKDTI-DIqDJgVj.js} +1 -1
  60. package/dist/assets/coffeescript-Cv1Wf46X.js +1 -0
  61. package/dist/assets/{column-preview-BbSZl4gC.js → column-preview-rQE4qc5R.js} +1 -1
  62. package/dist/assets/{command-DQS2IzwJ.js → command-DAtXz-Gx.js} +1 -1
  63. package/dist/assets/{command-palette-Cc7XXZHG.js → command-palette-Cd2q-HUO.js} +1 -1
  64. package/dist/assets/{common-CakcoJKZ.js → common-CP7IrRbz.js} +1 -1
  65. package/dist/assets/commonlisp-8PbUodZQ.js +1 -0
  66. package/dist/assets/{components-DVzYtTDe.js → components-BHpyAs_N.js} +1 -1
  67. package/dist/assets/components-C7yXo-zq.js +1 -0
  68. package/dist/assets/{config-Calf6e81.js → config-BwY7xK-l.js} +1 -1
  69. package/dist/assets/{context-BrNoqz7t.js → context-DgMiuV-M.js} +1 -1
  70. package/dist/assets/{copy-icon-D189KR4Z.js → copy-icon-D6J-Qe0V.js} +1 -1
  71. package/dist/assets/{cose-bilkent-S5V4N54A-DT_V8ZfF.js → cose-bilkent-S5V4N54A-w2ZbuMrq.js} +1 -1
  72. package/dist/assets/crystal-DOOJCjhq.js +1 -0
  73. package/dist/assets/{css-B68S0me4.js → css-vLkD8PfS.js} +1 -1
  74. package/dist/assets/cypher-Aazxis5r.js +1 -0
  75. package/dist/assets/d-B-5Jnu40.js +1 -0
  76. package/dist/assets/{dagre-6UL2VRFP-DGYXMu3i.js → dagre-6UL2VRFP-DPsGmD7I.js} +1 -1
  77. package/dist/assets/{data-grid-overlay-editor-CD6KDhh4.js → data-grid-overlay-editor--tsDL5t_.js} +1 -1
  78. package/dist/assets/{datasource-BZ77nRPA.js → datasource-BwNTnVse.js} +1 -1
  79. package/dist/assets/{dates-CtmdgiVR.js → dates-C-8zX5--.js} +1 -1
  80. package/dist/assets/{dependency-graph-panel-DJodxi-n.js → dependency-graph-panel-DWJUNQBd.js} +1 -1
  81. package/dist/assets/{diagram-PSM6KHXK-Df7m0-Bk.js → diagram-PSM6KHXK-B5QExXBA.js} +1 -1
  82. package/dist/assets/{diagram-QEK2KX5R-BC5JXjfp.js → diagram-QEK2KX5R-B-41avP4.js} +1 -1
  83. package/dist/assets/{diagram-S2PKOQOG-D6E97R3h.js → diagram-S2PKOQOG-CuAoGDsR.js} +1 -1
  84. package/dist/assets/diff-8GFZiZ2V.js +1 -0
  85. package/dist/assets/dist-2R4BmaTU.js +1 -0
  86. package/dist/assets/{dist-CD7-c8A4.js → dist-78cHWCwm.js} +1 -1
  87. package/dist/assets/dist-7la8MlmI.js +1 -0
  88. package/dist/assets/{dist-Cb9wJQiu.js → dist-B8l8kyRO.js} +1 -1
  89. package/dist/assets/{dist-BvefCWaz.js → dist-BCAHuLK8.js} +1 -1
  90. package/dist/assets/dist-BDO57Gzu.js +1 -0
  91. package/dist/assets/{dist-BwejP-9J.js → dist-Bd6jkjtM.js} +1 -1
  92. package/dist/assets/{dist-C5pbZROJ.js → dist-BfwIwU8S.js} +1 -1
  93. package/dist/assets/{dist-DSv2WUkf.js → dist-BjR_2YCR.js} +1 -1
  94. package/dist/assets/{dist-D8mC0RLm.js → dist-BxAV3E_D.js} +1 -1
  95. package/dist/assets/{dist-fKK_jBk2.js → dist-C6ZECnB-.js} +1 -1
  96. package/dist/assets/{dist-G8rBPeDP.js → dist-CE09e8bx.js} +1 -1
  97. package/dist/assets/dist-CYeDRMz-.js +1 -0
  98. package/dist/assets/{dist-G3xLh7ZX.js → dist-CZoX3_w7.js} +1 -1
  99. package/dist/assets/dist-Ct7IOnPn.js +1 -0
  100. package/dist/assets/{dist-CM2zL7eu.js → dist-D9A9VND-.js} +1 -1
  101. package/dist/assets/{dist-CSLszKKS.js → dist-DG5oYwLf.js} +1 -1
  102. package/dist/assets/dist-DMrvUyzG.js +1 -0
  103. package/dist/assets/{dist-DX-ejWLY.js → dist-DX7lwwkF.js} +1 -1
  104. package/dist/assets/dist-DbrS_VZM.js +1 -0
  105. package/dist/assets/{dist-D9brkCnf.js → dist-DrmtAiKa.js} +1 -1
  106. package/dist/assets/{dist-CdAQ8eZ9.js → dist-DrwAJH5c.js} +1 -1
  107. package/dist/assets/{dist-BuSjuYCJ.js → dist-DwRhpGvx.js} +1 -1
  108. package/dist/assets/{dist-BvpmHCI2.js → dist-EeiXxq6X.js} +1 -1
  109. package/dist/assets/dist-LftDLXf7.js +1 -0
  110. package/dist/assets/{dist-HIpA48xV.js → dist-Q7HIqK0H.js} +1 -1
  111. package/dist/assets/{dist-D8d8D49Y.js → dist-Sg8yY2ZO.js} +1 -1
  112. package/dist/assets/dist-TTJY3rXz.js +1 -0
  113. package/dist/assets/{dist-C2akIBaE.js → dist-b34Ig78W.js} +1 -1
  114. package/dist/assets/dist-u-Lxqf65.js +1 -0
  115. package/dist/assets/{dockerfile-COvjaTvv.js → dockerfile-BG4x0ExJ.js} +1 -1
  116. package/dist/assets/{documentation-panel-DMXEUS7v.js → documentation-panel-CZt-M5JN.js} +1 -1
  117. package/dist/assets/{download-rCRPD7IF.js → download-Bc8oaRxn.js} +1 -1
  118. package/dist/assets/dtd-DbhDFQ4b.js +1 -0
  119. package/dist/assets/dylan-4K5wZgOx.js +1 -0
  120. package/dist/assets/ecl-BCQ-LzuG.js +1 -0
  121. package/dist/assets/{edit-page-CK943x81.js → edit-page-BQ7AdKwV.js} +3 -3
  122. package/dist/assets/eiffel-DjgNAio4.js +1 -0
  123. package/dist/assets/elm-BJzUTgDF.js +1 -0
  124. package/dist/assets/{erDiagram-Q2GNP2WA-AvxewI5H.js → erDiagram-Q2GNP2WA-DnP7h2-r.js} +1 -1
  125. package/dist/assets/erlang-BMwCh1Tz.js +1 -0
  126. package/dist/assets/{error-banner-BxlXxssi.js → error-banner-B6M4W7BS.js} +1 -1
  127. package/dist/assets/{error-panel-4rKxybFL.js → error-panel-BN05vshu.js} +1 -1
  128. package/dist/assets/es-DpJU8Hx8.js +5 -0
  129. package/dist/assets/{esm-CcSYdGmP.js → esm-B4U2RMiA.js} +1 -1
  130. package/dist/assets/{esm-jhgLTcf6.js → esm-BGvvz4bU.js} +1 -1
  131. package/dist/assets/{factor-PbpmJuj6.js → factor-B-0VZGQP.js} +1 -1
  132. package/dist/assets/factor-DuQK79vi.js +1 -0
  133. package/dist/assets/{field-Dpiu3eud.js → field-Dolqshm5.js} +1 -1
  134. package/dist/assets/file-explorer-panel-Ci0Cz4JU.js +26 -0
  135. package/dist/assets/{file-icons-CSF7UWQn.js → file-icons-uyLXhwTt.js} +1 -1
  136. package/dist/assets/file-name-input-Cx8sGgtD.js +3 -0
  137. package/dist/assets/{floating-outline-DzcyDJwQ.js → floating-outline-CGwx3Uc3.js} +1 -1
  138. package/dist/assets/{flowDiagram-NV44I4VS-BqW0suiP.js → flowDiagram-NV44I4VS-V3Xf7aMp.js} +1 -1
  139. package/dist/assets/{focus-BRfyPUhi.js → focus-Ci7q4lAK.js} +1 -1
  140. package/dist/assets/{form-BUVFJb5I.js → form-BON4sAdY.js} +1 -1
  141. package/dist/assets/{formats-CQbVJYLi.js → formats-O_Kup2es.js} +1 -1
  142. package/dist/assets/{formatting-CbFi9xG8.js → formatting-cNkBQVu3.js} +1 -1
  143. package/dist/assets/forth-CN0H2hBb.js +1 -0
  144. package/dist/assets/fortran-D-JaE1fl.js +1 -0
  145. package/dist/assets/{gallery-page-ClCkynuR.js → gallery-page-ry801rEh.js} +1 -1
  146. package/dist/assets/{ganttDiagram-JELNMOA3-CeCvJWgC.js → ganttDiagram-JELNMOA3-CpnbMA7j.js} +1 -1
  147. package/dist/assets/gas-B-bID6UX.js +1 -0
  148. package/dist/assets/gherkin-JGxOpXhU.js +1 -0
  149. package/dist/assets/{gitGraph-G5XIXVHT-nrZ-BMna.js → gitGraph-G5XIXVHT-CT2LFSad.js} +1 -1
  150. package/dist/assets/{gitGraphDiagram-V2S2FVAM-Dn1AbOWu.js → gitGraphDiagram-V2S2FVAM-Da6kLjST.js} +1 -1
  151. package/dist/assets/{glide-data-editor-CKiZFI5U.js → glide-data-editor-Bsfs3Z8D.js} +4 -4
  152. package/dist/assets/{globals-DY_dRKpv.js → globals-fN2Lim68.js} +1 -1
  153. package/dist/assets/groovy-BHPB9Hfx.js +1 -0
  154. package/dist/assets/haskell-By6RbCCv.js +1 -0
  155. package/dist/assets/haxe-HQiVsOCF.js +1 -0
  156. package/dist/assets/home-page-CUCcuheh.js +4 -0
  157. package/dist/assets/{hooks-CK1ac3iV.js → hooks-CLXoEljg.js} +1 -1
  158. package/dist/assets/{html-to-image-BOWUS6J2.js → html-to-image-s8Gi2a0d.js} +1 -1
  159. package/dist/assets/idl-B2iocbwq.js +1 -0
  160. package/dist/assets/{index-DCq7udug.js → index-Flgwmpg_.js} +8 -8
  161. package/dist/assets/{info-VBDWY6EO-Bn_7XCeN.js → info-VBDWY6EO-Dek9l4Y7.js} +1 -1
  162. package/dist/assets/infoDiagram-HS3SLOUP-DbESo9Nm.js +2 -0
  163. package/dist/assets/{input-2egRGOhT.js → input-gOeJx-hY.js} +1 -1
  164. package/dist/assets/javascript-CTjlnOSz.js +1 -0
  165. package/dist/assets/{journeyDiagram-XKPGCS4Q-BQL61Vfo.js → journeyDiagram-XKPGCS4Q-BXrwe60A.js} +1 -1
  166. package/dist/assets/julia-BiUkdI9P.js +1 -0
  167. package/dist/assets/{kanban-definition-3W4ZIXB7-CMoUF4Qw.js → kanban-definition-3W4ZIXB7-DUU5VV3y.js} +1 -1
  168. package/dist/assets/katex-BpW3cI17.js +1 -0
  169. package/dist/assets/{kiosk-mode-BJNsfVZJ.js → kiosk-mode-PchJOoW7.js} +1 -1
  170. package/dist/assets/{layout-0Xp7ABJw.js → layout-B31_eP6P.js} +3 -3
  171. package/dist/assets/{line-BCZzhM6G.js → line-BGH_46b5.js} +1 -1
  172. package/dist/assets/{linear-DxS7NPzz.js → linear-DPcd3E-t.js} +1 -1
  173. package/dist/assets/{links-DhwG_EVu.js → links-DJCEkOLM.js} +1 -1
  174. package/dist/assets/livescript-uNIpKRlq.js +1 -0
  175. package/dist/assets/{logs-panel-bp6XOaLO.js → logs-panel-XG-10F8K.js} +1 -1
  176. package/dist/assets/{loro_wasm_bg-DpX928kr.js → loro_wasm_bg-BzwizXI_.js} +1 -1
  177. package/dist/assets/lua-CMIwWFMm.js +1 -0
  178. package/dist/assets/{markdown-renderer-3M2UXZOE.js → markdown-renderer-Cown6yO8.js} +3 -3
  179. package/dist/assets/mathematica-eDJrChdG.js +1 -0
  180. package/dist/assets/mbox-zqvBlhy3.js +1 -0
  181. package/dist/assets/mermaid-4DMBBIKO-CMn6CB3M.js +1 -0
  182. package/dist/assets/{mermaid-CI6k86rB.js → mermaid-LF8PrN7e.js} +3 -3
  183. package/dist/assets/{mermaid-parser.core-B0EhnNjP.js → mermaid-parser.core-C7QPzAah.js} +2 -2
  184. package/dist/assets/{mhchem-Bzl65iLm.js → mhchem-DJIKMDhe.js} +1 -1
  185. package/dist/assets/{mindmap-definition-VGOIOE7T-C0BN8YhO.js → mindmap-definition-VGOIOE7T-h5az-Gzm.js} +1 -1
  186. package/dist/assets/mirc-DA5aApOX.js +1 -0
  187. package/dist/assets/mllike-bIsNpdn1.js +1 -0
  188. package/dist/assets/modelica-0mx6heI0.js +1 -0
  189. package/dist/assets/mscgen-BKLWiiDn.js +1 -0
  190. package/dist/assets/mumps-5_kXgafg.js +1 -0
  191. package/dist/assets/{name-cell-input-CUkoykAD.js → name-cell-input-o3llo2cQ.js} +1 -1
  192. package/dist/assets/{nsis-BbDlITQ-.js → nsis-DGDbP9K4.js} +1 -1
  193. package/dist/assets/nsis-DOhuqhNG.js +1 -0
  194. package/dist/assets/ntriples-BWf6tqTo.js +1 -0
  195. package/dist/assets/{number-overlay-editor-DJEXT_Ye.js → number-overlay-editor-BNttkvY4.js} +1 -1
  196. package/dist/assets/octave-DmFvn7Va.js +1 -0
  197. package/dist/assets/{ordinal-DTOdb5Da.js → ordinal-COKHkltN.js} +1 -1
  198. package/dist/assets/{outline-panel-s7vxHE_P.js → outline-panel-DRIKTKZY.js} +1 -1
  199. package/dist/assets/oz-TIwA1cRs.js +1 -0
  200. package/dist/assets/{packages-panel-CDb4sauq.js → packages-panel-B6wpAt69.js} +1 -1
  201. package/dist/assets/{packet-DYOGHKS2-B53MIhbR.js → packet-DYOGHKS2-DlIjAe6N.js} +1 -1
  202. package/dist/assets/{panels-s8gQr6G_.js → panels-CfgYkAvQ.js} +1 -1
  203. package/dist/assets/pascal-BFfHjByI.js +1 -0
  204. package/dist/assets/pathUtils-B1w9iv-i.js +1 -0
  205. package/dist/assets/paths-2eb7kMpE.js +1 -0
  206. package/dist/assets/perl-iyEBGoKl.js +1 -0
  207. package/dist/assets/{pie-VRWISCQL-CsQYRyI_.js → pie-VRWISCQL-CY-XhoDk.js} +1 -1
  208. package/dist/assets/{pieDiagram-ADFJNKIX-CZ1pBex_.js → pieDiagram-ADFJNKIX-C8MBDnEw.js} +1 -1
  209. package/dist/assets/pig-Du8JEd9u.js +1 -0
  210. package/dist/assets/powershell-rJPOSwVp.js +1 -0
  211. package/dist/assets/{precisionRound-BMPhtTJQ.js → precisionRound-DaoicKhB.js} +1 -1
  212. package/dist/assets/{process-output-C6_eNZv8.js → process-output-D2bI7SXv.js} +1 -1
  213. package/dist/assets/properties-B7p1o35g.js +1 -0
  214. package/dist/assets/protobuf-DSVPm4uR.js +1 -0
  215. package/dist/assets/{pug-B2p6efPp.js → pug-5wW7Sn9S.js} +1 -1
  216. package/dist/assets/pug-BBnJinJ-.js +1 -0
  217. package/dist/assets/puppet-CvB_7oA0.js +1 -0
  218. package/dist/assets/python-D-LGD-zO.js +1 -0
  219. package/dist/assets/q-s96Dgstm.js +1 -0
  220. package/dist/assets/{quadrantDiagram-AYHSOK5B-D6LNQBr8.js → quadrantDiagram-AYHSOK5B-Behe9yHt.js} +1 -1
  221. package/dist/assets/r-DCKN0Q_M.js +1 -0
  222. package/dist/assets/{radar-ZZBFDIW7-DixuyYGz.js → radar-ZZBFDIW7-i-Te6Y8v.js} +1 -1
  223. package/dist/assets/react-vega-CPP33Ky2.js +1 -0
  224. package/dist/assets/{react-vega-D3GJC5Ll.js → react-vega-FSXcjjhW.js} +1 -1
  225. package/dist/assets/{readonly-python-code-BBLUUIbP.js → readonly-python-code-BahUauZ9.js} +1 -1
  226. package/dist/assets/{request-registry-yZbbPZkh.js → request-registry-BoWteoOD.js} +1 -1
  227. package/dist/assets/{requirementDiagram-UZGBJVZJ-BQCIkW22.js → requirementDiagram-UZGBJVZJ-BZ7h3AoJ.js} +1 -1
  228. package/dist/assets/{reveal-component-CT2scTNG.js → reveal-component-Bt3Epro6.js} +1 -1
  229. package/dist/assets/rpm-DKF6hj80.js +1 -0
  230. package/dist/assets/ruby-DrHWYpO-.js +1 -0
  231. package/dist/assets/{run-page-BebSJHhp.js → run-page-4lA-192f.js} +1 -1
  232. package/dist/assets/{sankeyDiagram-TZEHDZUN-WXVSVZRc.js → sankeyDiagram-TZEHDZUN-Co7WU0tF.js} +1 -1
  233. package/dist/assets/sas-Bf--oEyw.js +1 -0
  234. package/dist/assets/scheme-BZSq5_CL.js +1 -0
  235. package/dist/assets/{scratchpad-panel-CPn_yM49.js → scratchpad-panel-CiXkVXhL.js} +1 -1
  236. package/dist/assets/{secrets-panel-B6HrST_M.js → secrets-panel-Bxz9BsLr.js} +1 -1
  237. package/dist/assets/{sequenceDiagram-WL72ISMW-FSYTKWFS.js → sequenceDiagram-WL72ISMW-BKeDY4nC.js} +1 -1
  238. package/dist/assets/session-panel-oGdw6hvF.js +1 -0
  239. package/dist/assets/{share-CJEPnWjm.js → share-C7-yIyYZ.js} +1 -1
  240. package/dist/assets/shell-C5LsobAY.js +1 -0
  241. package/dist/assets/sieve-B6cTRfjv.js +1 -0
  242. package/dist/assets/{slide-CdqatvaH.js → slide-C5wPx0qL.js} +1 -1
  243. package/dist/assets/smalltalk-B-ZeF8oP.js +1 -0
  244. package/dist/assets/{snippets-panel-tfceTIEM.js → snippets-panel-C1g0FaLN.js} +1 -1
  245. package/dist/assets/sparql-hKgXdTt3.js +1 -0
  246. package/dist/assets/{spec-6oUobewY.js → spec-C-DRirsO.js} +1 -1
  247. package/dist/assets/{src-COk1uIaa.js → src-CWJKdmqu.js} +1 -1
  248. package/dist/assets/{state-Dlj7aAV2.js → state-BqtnroUI.js} +1 -1
  249. package/dist/assets/{state-INwBo8-b.js → state-CvCX-bpE.js} +1 -1
  250. package/dist/assets/state-DpMLCkRP.js +3 -0
  251. package/dist/assets/{state-SzKMGrBW.js → state-Vt0MLBrw.js} +1 -1
  252. package/dist/assets/{stateDiagram-FKZM4ZOC-NXeF8b27.js → stateDiagram-FKZM4ZOC-DEmCk9Rd.js} +1 -1
  253. package/dist/assets/stateDiagram-v2-4FDKWEC3-BnQZW9RQ.js +1 -0
  254. package/dist/assets/{step-COhf-b0R.js → step-BEsMOrhi.js} +1 -1
  255. package/dist/assets/stex-C5zzfAG3.js +1 -0
  256. package/dist/assets/stylus-MJ5VouuS.js +1 -0
  257. package/dist/assets/swift-jqL65uqK.js +1 -0
  258. package/dist/assets/{switch-CqJGGLBT.js → switch-QpkpQKr6.js} +1 -1
  259. package/dist/assets/tcl-D9FDKTky.js +1 -0
  260. package/dist/assets/{terminal-6UFUAGzf.js → terminal-CyaX8miJ.js} +1 -1
  261. package/dist/assets/{textarea-D2liylO5.js → textarea-DLywVJ2b.js} +1 -1
  262. package/dist/assets/textile-Ne1MkNjB.js +1 -0
  263. package/dist/assets/{time-hqD5bg84.js → time-C4Bk-t_8.js} +1 -1
  264. package/dist/assets/{timeline-definition-IT6M3QCI-B3aCCYAY.js → timeline-definition-IT6M3QCI-CNeWgYoO.js} +1 -1
  265. package/dist/assets/toml-Ba1TjbvG.js +1 -0
  266. package/dist/assets/{tracing-BUxVK-Z_.js → tracing-D5CN46rG.js} +1 -1
  267. package/dist/assets/tracing-panel-CoriopUM.js +2 -0
  268. package/dist/assets/tree-actions-BEhaM9eb.js +1 -0
  269. package/dist/assets/{treemap-GDKQZRPO-C7ssVrVz.js → treemap-GDKQZRPO-M0PfNVm7.js} +1 -1
  270. package/dist/assets/troff-ClRZFpM8.js +1 -0
  271. package/dist/assets/ttcn-JOxk9-wl.js +1 -0
  272. package/dist/assets/ttcn-cfg-D-oWP0t7.js +1 -0
  273. package/dist/assets/turtle-CfJStbTs.js +1 -0
  274. package/dist/assets/{useAddCell-xtQoaf-X.js → useAddCell-DtcrFkTf.js} +1 -1
  275. package/dist/assets/{useBoolean-D2Wc5G49.js → useBoolean-CZ3cQicK.js} +1 -1
  276. package/dist/assets/{useCellActionButton-DXgH5B4A.js → useCellActionButton-DLUN-oPD.js} +1 -1
  277. package/dist/assets/{useDateFormatter-_XK-fjTQ.js → useDateFormatter-DncW9tjn.js} +1 -1
  278. package/dist/assets/{useDeleteCell-C1_f7lEy.js → useDeleteCell-Y0BbfZjx.js} +1 -1
  279. package/dist/assets/{useDependencyPanelTab-PKhgm9-V.js → useDependencyPanelTab-BTOhjR-l.js} +1 -1
  280. package/dist/assets/{useInstallPackage-BHZ1EjqC.js → useInstallPackage-DQBOxUeJ.js} +1 -1
  281. package/dist/assets/{useNotebookActions-BPt4w3KQ.js → useNotebookActions-C-Vve9tT.js} +1 -1
  282. package/dist/assets/{useNumberFormatter-D_mZTdYK.js → useNumberFormatter-DYIfVU-H.js} +1 -1
  283. package/dist/assets/{usePress-Cj1lHaxt.js → usePress-BPoseSMY.js} +1 -1
  284. package/dist/assets/{useRunCells-cIxqHRwZ.js → useRunCells-Ce0N_5Wc.js} +1 -1
  285. package/dist/assets/{useSplitCell-B0qjEpW1.js → useSplitCell-Dby_-BDH.js} +1 -1
  286. package/dist/assets/{utils-DVodi8oQ.js → utils-B_ZkX8f0.js} +1 -1
  287. package/dist/assets/vb-DtMAcbIy.js +1 -0
  288. package/dist/assets/vbscript-CUB17r-X.js +1 -0
  289. package/dist/assets/{vega-component-Dh_sdcAu.js → vega-component-VkLCyBCX.js} +1 -1
  290. package/dist/assets/{vega-loader.browser-CRZ52CKf.js → vega-loader.browser-BlkwfOz9.js} +1 -1
  291. package/dist/assets/velocity-Dwo66olV.js +1 -0
  292. package/dist/assets/verilog-DuexQCyX.js +1 -0
  293. package/dist/assets/vhdl-Mgyyw75F.js +1 -0
  294. package/dist/assets/webidl-DZaOA0mR.js +1 -0
  295. package/dist/assets/{write-secret-modal-DNCTT09O.js → write-secret-modal-Chu5xifR.js} +1 -1
  296. package/dist/assets/xquery-DpQixCSm.js +1 -0
  297. package/dist/assets/{xychartDiagram-PRI3JC2R-eSL2LfH9.js → xychartDiagram-PRI3JC2R-eqzm3nQu.js} +1 -1
  298. package/dist/assets/yacas-B1gHpHXz.js +1 -0
  299. package/dist/assets/z80-IF9HkI5m.js +1 -0
  300. package/dist/index.html +93 -91
  301. package/package.json +2 -2
  302. package/src/components/editor/file-tree/__tests__/requesting-tree.test.ts +84 -2
  303. package/src/components/editor/file-tree/file-explorer.tsx +142 -203
  304. package/src/components/editor/file-tree/file-name-input.tsx +41 -0
  305. package/src/components/editor/file-tree/file-operations.tsx +266 -0
  306. package/src/components/editor/file-tree/renderers.tsx +1 -1
  307. package/src/components/editor/file-tree/requesting-tree.tsx +68 -49
  308. package/src/components/editor/output/JsonOutput.tsx +157 -4
  309. package/src/components/editor/output/__tests__/JsonOutput-mimetype.test.tsx +80 -0
  310. package/src/components/editor/output/__tests__/json-output.test.ts +147 -2
  311. package/src/components/home/state.ts +13 -1
  312. package/src/components/pages/home-page.tsx +116 -10
  313. package/src/core/islands/__tests__/bridge.test.ts +116 -5
  314. package/src/core/islands/bridge.ts +5 -1
  315. package/src/core/network/requests-network.ts +0 -3
  316. package/src/core/static/export-context.ts +43 -0
  317. package/src/plugins/core/__test__/trusted-url.test.ts +130 -18
  318. package/src/plugins/core/trusted-url.ts +23 -10
  319. package/src/plugins/impl/anywidget/__tests__/widget-binding.test.ts +29 -1
  320. package/src/plugins/impl/mpl-interactive/__tests__/MplInteractivePlugin.test.tsx +34 -0
  321. package/src/plugins/impl/panel/__tests__/PanelPlugin.test.ts +35 -2
  322. package/src/utils/__tests__/path.test.ts +20 -0
  323. package/src/utils/pathUtils.test.ts +141 -1
  324. package/src/utils/pathUtils.ts +46 -0
  325. package/src/utils/paths.ts +9 -1
  326. package/dist/assets/LazyAnyLanguageCodeMirror-BYkSpfWg.js +0 -2
  327. package/dist/assets/apl-ezh0ScS-.js +0 -1
  328. package/dist/assets/asciiarmor-DBqyln4y.js +0 -1
  329. package/dist/assets/asn1-C9Hie9a5.js +0 -1
  330. package/dist/assets/brainfuck-BDNU41Mw.js +0 -1
  331. package/dist/assets/channel-esN5troS.js +0 -1
  332. package/dist/assets/chunk-55IACEB6-C_BE0X2F.js +0 -1
  333. package/dist/assets/classDiagram-2ON5EDUG-BSpbvL3e.js +0 -1
  334. package/dist/assets/classDiagram-v2-WZHVMYZB-CQ49gdZV.js +0 -1
  335. package/dist/assets/clojure-DnkK3bSc.js +0 -1
  336. package/dist/assets/cmake-BnWrJdTV.js +0 -1
  337. package/dist/assets/cobol-HBrO1JaF.js +0 -1
  338. package/dist/assets/coffeescript-CRPuDhgD.js +0 -1
  339. package/dist/assets/commonlisp-Da4KcekY.js +0 -1
  340. package/dist/assets/components-eaRIBPb2.js +0 -1
  341. package/dist/assets/crystal-DSapLTsa.js +0 -1
  342. package/dist/assets/cypher-xFGoEou9.js +0 -1
  343. package/dist/assets/d-DgvhEIBQ.js +0 -1
  344. package/dist/assets/diff-_ncWAuCI.js +0 -1
  345. package/dist/assets/dist-BOBxlWRU.js +0 -1
  346. package/dist/assets/dist-C9byx33H.js +0 -1
  347. package/dist/assets/dist-CAjNwSwp.js +0 -1
  348. package/dist/assets/dist-ChEIZSwD.js +0 -1
  349. package/dist/assets/dist-DEsgb6r0.js +0 -1
  350. package/dist/assets/dist-DK65leDK.js +0 -1
  351. package/dist/assets/dist-DMIdeanR.js +0 -1
  352. package/dist/assets/dist-DlFpiRHv.js +0 -1
  353. package/dist/assets/dist-H-P6qorM.js +0 -1
  354. package/dist/assets/dist-vhQjV8kg.js +0 -1
  355. package/dist/assets/dtd-BnBIn3kr.js +0 -1
  356. package/dist/assets/dylan-CkGqQmFw.js +0 -1
  357. package/dist/assets/ecl-CFTIHpsV.js +0 -1
  358. package/dist/assets/eiffel-DqSKoxJh.js +0 -1
  359. package/dist/assets/elm-dL9c1n0U.js +0 -1
  360. package/dist/assets/erlang-ZIYI48gw.js +0 -1
  361. package/dist/assets/es-CjWf0wU3.js +0 -5
  362. package/dist/assets/factor-CDbckATe.js +0 -1
  363. package/dist/assets/file-explorer-panel-B5sFxYu1.js +0 -26
  364. package/dist/assets/forth-ClT6YoKq.js +0 -1
  365. package/dist/assets/fortran-D3wR_E-8.js +0 -1
  366. package/dist/assets/gas-_ShnzaTM.js +0 -1
  367. package/dist/assets/gherkin-LsHtc0Ns.js +0 -1
  368. package/dist/assets/groovy-D_Yv0Fac.js +0 -1
  369. package/dist/assets/haskell-qhM1HAIB.js +0 -1
  370. package/dist/assets/haxe-Bi62PpIr.js +0 -1
  371. package/dist/assets/home-page-BvfssQ5c.js +0 -4
  372. package/dist/assets/idl-CI42bOaI.js +0 -1
  373. package/dist/assets/infoDiagram-HS3SLOUP-DTO3Z6Cg.js +0 -2
  374. package/dist/assets/javascript-BNZ5YnSy.js +0 -1
  375. package/dist/assets/julia-dpVUKOp6.js +0 -1
  376. package/dist/assets/katex-B5wxkMHB.js +0 -1
  377. package/dist/assets/livescript-BDwSUbUd.js +0 -1
  378. package/dist/assets/lua-cGUKNtb5.js +0 -1
  379. package/dist/assets/mathematica-D4XScfvP.js +0 -1
  380. package/dist/assets/mbox-COnP75oc.js +0 -1
  381. package/dist/assets/mermaid-4DMBBIKO-D-U6KmKa.js +0 -1
  382. package/dist/assets/mirc-DXskkW6M.js +0 -1
  383. package/dist/assets/mllike-B3ebn_fS.js +0 -1
  384. package/dist/assets/modelica-Df8_BOFz.js +0 -1
  385. package/dist/assets/mscgen-ugK6iLdl.js +0 -1
  386. package/dist/assets/mumps-Qes0D9Sq.js +0 -1
  387. package/dist/assets/nsis-CvTk2ElD.js +0 -1
  388. package/dist/assets/ntriples-BrWSHgAl.js +0 -1
  389. package/dist/assets/octave--UXUC2au.js +0 -1
  390. package/dist/assets/oz-SCICUQnB.js +0 -1
  391. package/dist/assets/pascal-BZRIRN0Y.js +0 -1
  392. package/dist/assets/paths-DsQUzvvb.js +0 -1
  393. package/dist/assets/perl-BJBf_VRX.js +0 -1
  394. package/dist/assets/pig-8VtGvtGP.js +0 -1
  395. package/dist/assets/powershell-MUdKU-yo.js +0 -1
  396. package/dist/assets/properties-B_YTP79K.js +0 -1
  397. package/dist/assets/protobuf-BjqtN1d3.js +0 -1
  398. package/dist/assets/pug-pCMDyY3V.js +0 -1
  399. package/dist/assets/puppet-ByNusmmY.js +0 -1
  400. package/dist/assets/python-CeK7Mdg6.js +0 -1
  401. package/dist/assets/q-BPLn3RjU.js +0 -1
  402. package/dist/assets/r-C6hL19P_.js +0 -1
  403. package/dist/assets/react-vega-B2Q2ObPu.js +0 -1
  404. package/dist/assets/rpm-Cepx5AK5.js +0 -1
  405. package/dist/assets/ruby-8a_JNJtC.js +0 -1
  406. package/dist/assets/sas-DRXu6Kkn.js +0 -1
  407. package/dist/assets/scheme-DaBlDkbO.js +0 -1
  408. package/dist/assets/session-panel-CfLYfSX2.js +0 -1
  409. package/dist/assets/shell-CEmng-T5.js +0 -1
  410. package/dist/assets/sieve-CTG31Wbe.js +0 -1
  411. package/dist/assets/smalltalk-DlBjAIRH.js +0 -1
  412. package/dist/assets/sparql-D8XQtNgL.js +0 -1
  413. package/dist/assets/state-BFFSWzNE.js +0 -3
  414. package/dist/assets/stateDiagram-v2-4FDKWEC3-co6cLoce.js +0 -1
  415. package/dist/assets/stex-CXcPf-7C.js +0 -1
  416. package/dist/assets/stylus-DpfM4Y-0.js +0 -1
  417. package/dist/assets/swift-Bevjlmsx.js +0 -1
  418. package/dist/assets/tcl-CWB1W9St.js +0 -1
  419. package/dist/assets/textile-DrGyKlBQ.js +0 -1
  420. package/dist/assets/toml-CF49H3Gs.js +0 -1
  421. package/dist/assets/tracing-panel-BZQdh8Uh.js +0 -2
  422. package/dist/assets/tree-Dtn4o2IZ.js +0 -3
  423. package/dist/assets/troff-DS9glUnj.js +0 -1
  424. package/dist/assets/ttcn-cfg-D8JUANmi.js +0 -1
  425. package/dist/assets/ttcn-iXXxBDpr.js +0 -1
  426. package/dist/assets/turtle-IsYxGpD1.js +0 -1
  427. package/dist/assets/vb-CJBc18Ui.js +0 -1
  428. package/dist/assets/vbscript-f-536WNP.js +0 -1
  429. package/dist/assets/velocity-BKcC2FIu.js +0 -1
  430. package/dist/assets/verilog-BwwsdDY5.js +0 -1
  431. package/dist/assets/vhdl-BG8PfJd8.js +0 -1
  432. package/dist/assets/webidl-BHBWV-F6.js +0 -1
  433. package/dist/assets/xquery-BSuR2Wlv.js +0 -1
  434. package/dist/assets/yacas-DdJ1FiXV.js +0 -1
  435. package/dist/assets/z80-BWehJ3ot.js +0 -1
  436. /package/dist/assets/{Deferred-Bk0r4KDZ.js → Deferred-CcWopv8N.js} +0 -0
  437. /package/dist/assets/{ImageComparisonComponent-BDf80c-c.js → ImageComparisonComponent-BbeHudzx.js} +0 -0
  438. /package/dist/assets/{Inputs-kqHYE7dL.js → Inputs-BJt-xWQ4.js} +0 -0
  439. /package/dist/assets/{Plot-Dw2rpqfa.js → Plot-NkctaBpw.js} +0 -0
  440. /package/dist/assets/{SSRProvider-1sSrgJwI.js → SSRProvider-ChaJ6dv8.js} +0 -0
  441. /package/dist/assets/{apl-BYqtBlld.js → apl-CArdF_Ee.js} +0 -0
  442. /package/dist/assets/{array-BF0shS9G.js → array-vLcKmV3f.js} +0 -0
  443. /package/dist/assets/{asciiarmor-DUW0Iozu.js → asciiarmor-rf6n_8YZ.js} +0 -0
  444. /package/dist/assets/{asn1-ClnHsHDP.js → asn1-Bl4vlAxN.js} +0 -0
  445. /package/dist/assets/{asterisk-CO_c0gwL.js → asterisk-B04IJwAt.js} +0 -0
  446. /package/dist/assets/{azure-BGC9_IAe.js → azure-DZ9IQ5nj.js} +0 -0
  447. /package/dist/assets/{badge-IqsYSyWB.js → badge-OeIzJ2Mo.js} +0 -0
  448. /package/dist/assets/{blob-CpeNXBj-.js → blob-Gsfvuteh.js} +0 -0
  449. /package/dist/assets/{brainfuck-FB_E90sw.js → brainfuck-CWRjg_-2.js} +0 -0
  450. /package/dist/assets/{card-DaCTzD6y.js → card-CVZJbqix.js} +0 -0
  451. /package/dist/assets/{chunk-4F5CHEZ2-CiW94ehv.js → chunk-4F5CHEZ2-Cw8YQRir.js} +0 -0
  452. /package/dist/assets/{chunk-B2363JML-Dj_BsGfX.js → chunk-B2363JML-BSJ4A4O7.js} +0 -0
  453. /package/dist/assets/{chunk-DR5Q36YT-CCzZb1o4.js → chunk-DR5Q36YT-BAovSO-b.js} +0 -0
  454. /package/dist/assets/{chunk-FRFDVMJY-BB5sTbw6.js → chunk-FRFDVMJY-Ca8ZLUo3.js} +0 -0
  455. /package/dist/assets/{chunk-PL6DKKU2-BVOKRgy0.js → chunk-PL6DKKU2-BjuKxBfi.js} +0 -0
  456. /package/dist/assets/{chunk-SJTYNZTY-BY2Gu6VM.js → chunk-SJTYNZTY-wqlkd3w7.js} +0 -0
  457. /package/dist/assets/{chunk-TQ3KTPDO-BXqsqDoM.js → chunk-TQ3KTPDO-BUikk8OW.js} +0 -0
  458. /package/dist/assets/{chunk-UMXZTB3W-2RQe-UTW.js → chunk-UMXZTB3W-lROkSRJ2.js} +0 -0
  459. /package/dist/assets/{clear-button-hXGBrmNq.js → clear-button-cQS2Q-bl.js} +0 -0
  460. /package/dist/assets/{click-outside-container-7UXGgq-9.js → click-outside-container-ChOZeHlm.js} +0 -0
  461. /package/dist/assets/{clike-B7PZCnaI.js → clike-B4xEkWXN.js} +0 -0
  462. /package/dist/assets/{clojure-DtLrahuY.js → clojure-04C6o-hL.js} +0 -0
  463. /package/dist/assets/{cmake-DGfhkTv5.js → cmake-Dh64a3j4.js} +0 -0
  464. /package/dist/assets/{cobol-Cpbk-vCU.js → cobol-B24ofC4q.js} +0 -0
  465. /package/dist/assets/{coffeescript-BATQF8kE.js → coffeescript-B0i0O-b-.js} +0 -0
  466. /package/dist/assets/{colors-C3_wIR8c.js → colors-CgemTayT.js} +0 -0
  467. /package/dist/assets/{common-keywords-CvypSGuw.js → common-keywords-D6ImdZX8.js} +0 -0
  468. /package/dist/assets/{commonlisp-C9N48zGs.js → commonlisp-NXg-Bye5.js} +0 -0
  469. /package/dist/assets/{copy-BnK_ki61.js → copy-MpDsCBB6.js} +0 -0
  470. /package/dist/assets/{crystal-D2nrZv1k.js → crystal-BOjNTZjx.js} +0 -0
  471. /package/dist/assets/{css-DNoZFvlx.js → css-C_vknI7E.js} +0 -0
  472. /package/dist/assets/{cypher-6TFCZzgE.js → cypher-DwQoZmH9.js} +0 -0
  473. /package/dist/assets/{cytoscape.esm-BihqZ2_-.js → cytoscape.esm-BUYfy0ER.js} +0 -0
  474. /package/dist/assets/{d-DHH1X7PS.js → d-xedQGhmO.js} +0 -0
  475. /package/dist/assets/{defaultLocale-D_rSvXvJ.js → defaultLocale-CIhzTQNN.js} +0 -0
  476. /package/dist/assets/{defaultLocale-C92Rrpmf.js → defaultLocale-CUv_V9gw.js} +0 -0
  477. /package/dist/assets/{dialog-CqE8CV1Y.js → dialog-BEgS5oXa.js} +0 -0
  478. /package/dist/assets/{diff-DNDp4fOd.js → diff-ChFnp8JW.js} +0 -0
  479. /package/dist/assets/{dist-DfWgLTCQ.js → dist-B4jGC5bx.js} +0 -0
  480. /package/dist/assets/{dist-Dg3CCt0r.js → dist-BNScjj64.js} +0 -0
  481. /package/dist/assets/{dist-a6hqEAyw.js → dist-ByJngTCJ.js} +0 -0
  482. /package/dist/assets/{dist-D-j2KFQ4.js → dist-C1VXabOr.js} +0 -0
  483. /package/dist/assets/{dist-Bgd1ZX49.js → dist-Cqk8HSav.js} +0 -0
  484. /package/dist/assets/{dist-idZNafp8.js → dist-D80LaxlS.js} +0 -0
  485. /package/dist/assets/{dist-B5ONF0fx.js → dist-DdzMFGlM.js} +0 -0
  486. /package/dist/assets/{dist-Ct7BBGwl.js → dist-FpqIkji6.js} +0 -0
  487. /package/dist/assets/{dist-B804XDz9.js → dist-R9N_YrBH.js} +0 -0
  488. /package/dist/assets/{dist-D8llshvP.js → dist-SITbEFUx.js} +0 -0
  489. /package/dist/assets/{dist-DDWNnRcK.js → dist-fKKpzSr2.js} +0 -0
  490. /package/dist/assets/{dist-CpbLJKXc.js → dist-fOLN5Vji.js} +0 -0
  491. /package/dist/assets/{dist-BiQrY0m-.js → dist-wsxxqJfJ.js} +0 -0
  492. /package/dist/assets/{dtd-BYdB19UC.js → dtd-KbDPyUs4.js} +0 -0
  493. /package/dist/assets/{duckdb-keywords-C63auBrb.js → duckdb-keywords-5i8us9ML.js} +0 -0
  494. /package/dist/assets/{dylan-3sqQfqPE.js → dylan-0KH4Nowk.js} +0 -0
  495. /package/dist/assets/{ebnf-CJQ7hlUt.js → ebnf--2SLsnbd.js} +0 -0
  496. /package/dist/assets/{ecl-79y60Sdt.js → ecl-B5iM_b7s.js} +0 -0
  497. /package/dist/assets/{eiffel-Cy1qkCDz.js → eiffel-sVM1STl5.js} +0 -0
  498. /package/dist/assets/{elm-DrRzHEES.js → elm-BlNENVB6.js} +0 -0
  499. /package/dist/assets/{emotion-is-prop-valid.esm-UWgehH47.js → emotion-is-prop-valid.esm-BvF4JMSP.js} +0 -0
  500. /package/dist/assets/{empty-state-CrP10sqm.js → empty-state-CPvr0RGL.js} +0 -0
  501. /package/dist/assets/{en-US-B8TXLgVt.js → en-US-BXVprI6a.js} +0 -0
  502. /package/dist/assets/{erlang-D3BTE-y0.js → erlang-C0uOSFok.js} +0 -0
  503. /package/dist/assets/{errors-DVkmLSXX.js → errors-pt9sYxVM.js} +0 -0
  504. /package/dist/assets/{esm-vpVfqVb3.js → esm-D6KjvJkM.js} +0 -0
  505. /package/dist/assets/{events-CWUex2qo.js → events-CKqlBGzI.js} +0 -0
  506. /package/dist/assets/{extends-q1GgI0Ag.js → extends-DYqjHZ5t.js} +0 -0
  507. /package/dist/assets/{fcl-BM8Miy5A.js → fcl-CcJxrJDr.js} +0 -0
  508. /package/dist/assets/{forth-DGce5eRS.js → forth-Dkvgp5v0.js} +0 -0
  509. /package/dist/assets/{fortran-CS97oQQW.js → fortran-DWGt9NN5.js} +0 -0
  510. /package/dist/assets/{gas-7e_zvN4u.js → gas-ucVnXY28.js} +0 -0
  511. /package/dist/assets/{gherkin-3f1nzx4Y.js → gherkin-BRjIORXo.js} +0 -0
  512. /package/dist/assets/{groovy-Bn1MvSId.js → groovy-BwyAyRPC.js} +0 -0
  513. /package/dist/assets/{haskell-qtyafuM6.js → haskell-Cs-Andhs.js} +0 -0
  514. /package/dist/assets/{haxe-CQwWk_Ht.js → haxe-BW46cyaq.js} +0 -0
  515. /package/dist/assets/{http-DJG1eSBi.js → http-BBXW5Cu0.js} +0 -0
  516. /package/dist/assets/{idl-BnUby_AK.js → idl-BGiQ18ct.js} +0 -0
  517. /package/dist/assets/{init-AtRnKt23.js → init-NRxdWJN-.js} +0 -0
  518. /package/dist/assets/{isValid-KoNx_uxe.js → isValid-BBUyUJly.js} +0 -0
  519. /package/dist/assets/{javascript-BFKHKHDt.js → javascript-I9_Q-6Fg.js} +0 -0
  520. /package/dist/assets/{julia-BZeLe6be.js → julia-Wfay9brY.js} +0 -0
  521. /package/dist/assets/{katex-Bc4cO2Ba.js → katex-BIY1ztUE.js} +0 -0
  522. /package/dist/assets/{livescript-LB6oZdgV.js → livescript-J6EnSQWw.js} +0 -0
  523. /package/dist/assets/{loro_wasm_bg-DSqjo7Pf.js → loro_wasm_bg-BAHdi7Mz.js} +0 -0
  524. /package/dist/assets/{lua-D73MeF_d.js → lua-BO_knq_Q.js} +0 -0
  525. /package/dist/assets/{marimo-icons-Ce24dQVN.js → marimo-icons-ifBE8yqY.js} +0 -0
  526. /package/dist/assets/{math-BIeW4iGV.js → math-CIWU-TqO.js} +0 -0
  527. /package/dist/assets/{mathematica-SckqhulL.js → mathematica-DU8ikXHk.js} +0 -0
  528. /package/dist/assets/{mbox-DpdjYR8y.js → mbox-Dzzw6MxI.js} +0 -0
  529. /package/dist/assets/{mirc-9Mp8ii_5.js → mirc-82uLLidC.js} +0 -0
  530. /package/dist/assets/{mllike-CteazA5r.js → mllike-WTbu2PGL.js} +0 -0
  531. /package/dist/assets/{modelica-DruS-uJ8.js → modelica-w4uKZrXu.js} +0 -0
  532. /package/dist/assets/{mscgen-Dqm6ZJyo.js → mscgen-Bf7m7BDT.js} +0 -0
  533. /package/dist/assets/{multi-icon-nJMmVh2f.js → multi-icon-CPhrdW6o.js} +0 -0
  534. /package/dist/assets/{mumps-DAwJeUn4.js → mumps-Bicgf-gh.js} +0 -0
  535. /package/dist/assets/{nginx-B_wjuKSa.js → nginx-CiiHaY6Q.js} +0 -0
  536. /package/dist/assets/{node-sql-parser-UQ9Ur_LP.js → node-sql-parser-DllVaz4k.js} +0 -0
  537. /package/dist/assets/{ntriples-D5_p8srT.js → ntriples-CyotCBD4.js} +0 -0
  538. /package/dist/assets/{numbers-epUg4eUW.js → numbers-CHuwXNCA.js} +0 -0
  539. /package/dist/assets/{objectWithoutPropertiesLoose-BQlZis3f.js → objectWithoutPropertiesLoose-CUZPaRZf.js} +0 -0
  540. /package/dist/assets/{octave-StxXX2kg.js → octave-BP7UuRZ-.js} +0 -0
  541. /package/dist/assets/{oz-CZcv8Gut.js → oz-C9dsRBsA.js} +0 -0
  542. /package/dist/assets/{panel-context-DgIiEtMa.js → panel-context-S-AFWBnz.js} +0 -0
  543. /package/dist/assets/{pascal-BTSTYf7j.js → pascal-Do-HizJs.js} +0 -0
  544. /package/dist/assets/{path-BMloFSsK.js → path-CQRzwJPY.js} +0 -0
  545. /package/dist/assets/{perl-D3WNCnWS.js → perl-DkWjygEp.js} +0 -0
  546. /package/dist/assets/{pig-m1LfHx7X.js → pig-C5cO5Lzu.js} +0 -0
  547. /package/dist/assets/{play-CEytussU.js → play-DSUm4sBu.js} +0 -0
  548. /package/dist/assets/{plus-BueqiM86.js → plus-DgRbTQuK.js} +0 -0
  549. /package/dist/assets/{powershell-C7evXFhK.js → powershell-B7iMkhi7.js} +0 -0
  550. /package/dist/assets/{preload-helper-BFv3hW2s.js → preload-helper-DXnewu3N.js} +0 -0
  551. /package/dist/assets/{prop-types-D9vVr8W2.js → prop-types-CMQyZoIm.js} +0 -0
  552. /package/dist/assets/{properties-CX3A241c.js → properties-BojS2wNP.js} +0 -0
  553. /package/dist/assets/{protobuf-CEqDY4vo.js → protobuf-C3jQLUT4.js} +0 -0
  554. /package/dist/assets/{puppet-DlFBPmUd.js → puppet-BIu7yw7Q.js} +0 -0
  555. /package/dist/assets/{purify.es-Cg0r2qW-.js → purify.es-Lm0LKKB_.js} +0 -0
  556. /package/dist/assets/{python-kNH0316T.js → python-BvK-LeGt.js} +0 -0
  557. /package/dist/assets/{q-KQ_N2MXi.js → q-DxTFD_3l.js} +0 -0
  558. /package/dist/assets/{r-Dj_WdT8c.js → r-D9kMb9Pl.js} +0 -0
  559. /package/dist/assets/{range-Bc7-zhbC.js → range-l5y19iar.js} +0 -0
  560. /package/dist/assets/{react-icons.esm-B8rtE4cC.js → react-icons.esm-CwO5-6Hf.js} +0 -0
  561. /package/dist/assets/{refresh-ccw-BuMhEaS9.js → refresh-ccw-B-iu4wyD.js} +0 -0
  562. /package/dist/assets/{refresh-cw-BmiNHssk.js → refresh-cw-C6hZr6dA.js} +0 -0
  563. /package/dist/assets/{requests-DdU2Ap88.js → requests-dD3-AncY.js} +0 -0
  564. /package/dist/assets/{rotate-ccw-Bwso-5RT.js → rotate-ccw-CMEpyC--.js} +0 -0
  565. /package/dist/assets/{rpm-C3VyCeYo.js → rpm-DMBmptJ_.js} +0 -0
  566. /package/dist/assets/{ruby-9RpAFOsP.js → ruby-Bi66LQBu.js} +0 -0
  567. /package/dist/assets/{runs-BBFoea9K.js → runs-5FOfd9Cy.js} +0 -0
  568. /package/dist/assets/{sas-CFBIkOrK.js → sas-DDMCLlZz.js} +0 -0
  569. /package/dist/assets/{save-B_q9ApPf.js → save-B5tS7kkh.js} +0 -0
  570. /package/dist/assets/{scheme-n4WmsRUQ.js → scheme-MngEI34z.js} +0 -0
  571. /package/dist/assets/{session-DdhIEena.js → session-DI1agD5_.js} +0 -0
  572. /package/dist/assets/{settings-C_KZ1Eue.js → settings-DDffqDzb.js} +0 -0
  573. /package/dist/assets/{shell-BDAgpmgp.js → shell-BSVgrHzY.js} +0 -0
  574. /package/dist/assets/{sieve-BVNIn7Yz.js → sieve-DvUWNrPv.js} +0 -0
  575. /package/dist/assets/{simple-mode-C-nP-kAb.js → simple-mode-DxeVZov3.js} +0 -0
  576. /package/dist/assets/{smalltalk-C7nE9dmX.js → smalltalk-CeZ66qpG.js} +0 -0
  577. /package/dist/assets/{solr-CU1BrlpT.js → solr-DYYuHZ7Q.js} +0 -0
  578. /package/dist/assets/{sparkles-BRTQ46qC.js → sparkles-C9V_hOqY.js} +0 -0
  579. /package/dist/assets/{sparql-DPFIzZM3.js → sparql-oFx_t7AO.js} +0 -0
  580. /package/dist/assets/{spreadsheet-DwP77QON.js → spreadsheet-hVThRh5Z.js} +0 -0
  581. /package/dist/assets/{sql-CBifPEyZ.js → sql-DG1AJQLP.js} +0 -0
  582. /package/dist/assets/{square-function-DN3RwIjj.js → square-function-iLrgnnoW.js} +0 -0
  583. /package/dist/assets/{src-DSbF9mby.js → src-CsZby044.js} +0 -0
  584. /package/dist/assets/{stex--zUcZkER.js → stex-CHLzTK9d.js} +0 -0
  585. /package/dist/assets/{stylus-DGcebGVS.js → stylus-KE-9LQSK.js} +0 -0
  586. /package/dist/assets/{swift-DiAJo7C6.js → swift-A-ZhZWU8.js} +0 -0
  587. /package/dist/assets/{swiper-component-BIp7oQxt.js → swiper-component-DL6ct72W.js} +0 -0
  588. /package/dist/assets/{tcl-DpD837eJ.js → tcl-CREXWwrr.js} +0 -0
  589. /package/dist/assets/{textile-DEqOicm6.js → textile-Cj8L4qVJ.js} +0 -0
  590. /package/dist/assets/{tiddlywiki-CqVNI8lH.js → tiddlywiki-Dc8c_QaF.js} +0 -0
  591. /package/dist/assets/{tiki-BIINIJTn.js → tiki-CwGnGueS.js} +0 -0
  592. /package/dist/assets/{timer-DwQQMK5T.js → timer-CEUQS2Fi.js} +0 -0
  593. /package/dist/assets/{toml-BdA-7EhB.js → toml-BwSlV2Pt.js} +0 -0
  594. /package/dist/assets/{trash-2-C5AzNaHr.js → trash-2-3m1rZsYE.js} +0 -0
  595. /package/dist/assets/{trash-BUseJO4n.js → trash-D89_qya1.js} +0 -0
  596. /package/dist/assets/{treemap-DqSsE4KM.js → treemap-BYvDYG1E.js} +0 -0
  597. /package/dist/assets/{triangle-alert-CBEvAwaa.js → triangle-alert-Bt-v8HXv.js} +0 -0
  598. /package/dist/assets/{troff-iGRgQHLe.js → troff-DWonWT6V.js} +0 -0
  599. /package/dist/assets/{ttcn-CLQ1c3XL.js → ttcn--CHQduBW.js} +0 -0
  600. /package/dist/assets/{ttcn-cfg-BFj90pgD.js → ttcn-cfg-Cei3Mnk3.js} +0 -0
  601. /package/dist/assets/{turtle-DwFVq6UC.js → turtle-BaGuNPTf.js} +0 -0
  602. /package/dist/assets/{types-D8yP89N6.js → types-DOdUT9LT.js} +0 -0
  603. /package/dist/assets/{types-Bpx1EWqM.js → types-jWhVbgX6.js} +0 -0
  604. /package/dist/assets/{use-toast-PYIpV284.js → use-toast-DZOInYtM.js} +0 -0
  605. /package/dist/assets/{useDebounce-BxKDvvzN.js → useDebounce-C0E828y0.js} +0 -0
  606. /package/dist/assets/{useDeepCompareMemoize-pHFuC8FJ.js → useDeepCompareMemoize-606Ao2HX.js} +0 -0
  607. /package/dist/assets/{useHotkey-j1wCvjNq.js → useHotkey-DMv61Udq.js} +0 -0
  608. /package/dist/assets/{useInterval-BePSL0QQ.js → useInterval-zx_Q7num.js} +0 -0
  609. /package/dist/assets/{useTheme-AmxLvSQ5.js → useTheme-DhrO1NvC.js} +0 -0
  610. /package/dist/assets/{uuid-CCkGk34L.js → uuid-D_ujsK2Y.js} +0 -0
  611. /package/dist/assets/{vb-gm5P9Pn5.js → vb-DQgwufRi.js} +0 -0
  612. /package/dist/assets/{vbscript-gQvKiDdU.js → vbscript-B66XhQhu.js} +0 -0
  613. /package/dist/assets/{velocity-CkfRmD_d.js → velocity-D7CxwqhZ.js} +0 -0
  614. /package/dist/assets/{verilog-D3b05tu1.js → verilog-SCT9zECa.js} +0 -0
  615. /package/dist/assets/{vhdl-DRo1SU3e.js → vhdl-Bz6d75os.js} +0 -0
  616. /package/dist/assets/{web-vitals-CUbDLLN1.js → web-vitals-CMDkd9l8.js} +0 -0
  617. /package/dist/assets/{webidl-DFtmGFay.js → webidl-B7LbwCfy.js} +0 -0
  618. /package/dist/assets/{workflow-ktgLxNKJ.js → workflow-CyJEIDjL.js} +0 -0
  619. /package/dist/assets/{ws-BV-4clkP.js → ws-Bim0WMvW.js} +0 -0
  620. /package/dist/assets/{xquery-CzUikajR.js → xquery-BOMK2ySj.js} +0 -0
  621. /package/dist/assets/{yacas-BqvQWbYq.js → yacas-Yk74VuuD.js} +0 -0
  622. /package/dist/assets/{z80-CQqkYd-2.js → z80-BQKQ7DhX.js} +0 -0
@@ -0,0 +1,266 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { CopyIcon, Edit3Icon, Trash2Icon } from "lucide-react";
4
+ import type React from "react";
5
+ import { useCallback } from "react";
6
+ import type { NodeApi } from "react-arborist";
7
+ import useEvent from "react-use-event-hook";
8
+ import { useImperativeModal } from "@/components/modal/ImperativeModal";
9
+ import { AlertDialogDestructiveAction } from "@/components/ui/alert-dialog";
10
+ import {
11
+ DropdownMenu,
12
+ DropdownMenuContent,
13
+ DropdownMenuItem,
14
+ DropdownMenuTrigger,
15
+ } from "@/components/ui/dropdown-menu";
16
+ import { useRequestClient } from "@/core/network/requests";
17
+ import type { FileInfo } from "@/core/network/types";
18
+ import {
19
+ makeDuplicateName,
20
+ resolvePaths,
21
+ toAbsolutePath,
22
+ } from "@/utils/pathUtils";
23
+ import {
24
+ type FileOperationResult,
25
+ handleFileResponse,
26
+ } from "./requesting-tree";
27
+ import { MENU_ITEM_ICON_CLASS, MoreActionsButton } from "./tree-actions";
28
+
29
+ /**
30
+ * Hook that exposes rename / duplicate / delete operations against absolute
31
+ * paths, handling path resolution (via `resolvePaths`) and error toasting.
32
+ *
33
+ * `root` is the workspace / tree root used to turn relative node paths into
34
+ * absolute paths for the API. Pass `""` if all node paths are already
35
+ * absolute (in which case `resolvePaths` is a no-op transformation).
36
+ */
37
+ export function useFileOperations({ root }: { root: string }) {
38
+ const {
39
+ sendRenameFileOrFolder,
40
+ sendCopyFileOrFolder,
41
+ sendDeleteFileOrFolder,
42
+ } = useRequestClient();
43
+
44
+ const renameFile = useCallback(
45
+ async (
46
+ file: Pick<FileInfo, "path">,
47
+ newName: string,
48
+ ): Promise<FileOperationResult> => {
49
+ const { path, newPath } = resolvePaths({
50
+ path: file.path,
51
+ name: newName,
52
+ root,
53
+ });
54
+ const resp = await sendRenameFileOrFolder({ path, newPath });
55
+ return handleFileResponse(resp);
56
+ },
57
+ [root, sendRenameFileOrFolder],
58
+ );
59
+
60
+ const duplicateFile = useCallback(
61
+ async (
62
+ file: Pick<FileInfo, "path" | "name">,
63
+ ): Promise<FileOperationResult> => {
64
+ const { path, newPath } = resolvePaths({
65
+ path: file.path,
66
+ name: makeDuplicateName(file.name),
67
+ root,
68
+ });
69
+ const resp = await sendCopyFileOrFolder({ path, newPath });
70
+ return handleFileResponse(resp);
71
+ },
72
+ [root, sendCopyFileOrFolder],
73
+ );
74
+
75
+ const deleteFile = useCallback(
76
+ async (file: Pick<FileInfo, "path">): Promise<FileOperationResult> => {
77
+ const resp = await sendDeleteFileOrFolder({
78
+ path: toAbsolutePath(file.path, root),
79
+ });
80
+ return handleFileResponse(resp);
81
+ },
82
+ [root, sendDeleteFileOrFolder],
83
+ );
84
+
85
+ return { renameFile, duplicateFile, deleteFile };
86
+ }
87
+
88
+ export type FileItemKind = "file" | "folder" | "notebook";
89
+
90
+ const DELETE_TITLE_BY_KIND: Record<FileItemKind, string> = {
91
+ file: "Delete file",
92
+ folder: "Delete folder",
93
+ notebook: "Delete notebook",
94
+ };
95
+
96
+ export function useConfirmDeleteFile() {
97
+ const { openConfirm } = useImperativeModal();
98
+
99
+ return useCallback(
100
+ (
101
+ target: { name: string; kind?: FileItemKind },
102
+ onConfirm: () => void | Promise<void>,
103
+ ) => {
104
+ const kind = target.kind ?? "file";
105
+ openConfirm({
106
+ title: DELETE_TITLE_BY_KIND[kind],
107
+ description: `Are you sure you want to delete ${target.name}?`,
108
+ confirmAction: (
109
+ <AlertDialogDestructiveAction
110
+ onClick={async () => {
111
+ await onConfirm();
112
+ }}
113
+ aria-label="Confirm"
114
+ >
115
+ Delete
116
+ </AlertDialogDestructiveAction>
117
+ ),
118
+ });
119
+ },
120
+ [openConfirm],
121
+ );
122
+ }
123
+
124
+ /**
125
+ * High-level handlers for rename/duplicate/delete against a single node
126
+ *
127
+ * All successful operations fire `onAfterChange` so callers can refresh their
128
+ * data sources (workspace tree + recent notebooks on the homepage).
129
+ */
130
+ export function useNotebookFileActions({
131
+ node,
132
+ root,
133
+ onAfterChange,
134
+ }: {
135
+ node: NodeApi<FileInfo>;
136
+ root: string;
137
+ onAfterChange?: () => void;
138
+ }) {
139
+ const { duplicateFile, deleteFile } = useFileOperations({ root });
140
+ const confirmDelete = useConfirmDeleteFile();
141
+
142
+ const handleRename = useEvent(() => {
143
+ node.edit();
144
+ });
145
+
146
+ const handleDuplicate = useEvent(async () => {
147
+ const result = await duplicateFile(node.data);
148
+ if (result) {
149
+ onAfterChange?.();
150
+ }
151
+ });
152
+
153
+ const handleDelete = useEvent(() => {
154
+ const kind: FileItemKind = node.data.isDirectory
155
+ ? "folder"
156
+ : node.data.isMarimoFile
157
+ ? "notebook"
158
+ : "file";
159
+ confirmDelete({ name: node.data.name, kind }, async () => {
160
+ const result = await deleteFile(node.data);
161
+ if (result) {
162
+ onAfterChange?.();
163
+ }
164
+ });
165
+ });
166
+
167
+ return { handleRename, handleDuplicate, handleDelete };
168
+ }
169
+
170
+ export const FileActionsDropdown = ({
171
+ testId,
172
+ buttonClassName,
173
+ iconClassName,
174
+ contentClassName,
175
+ preventDefaultOnTrigger = false,
176
+ children,
177
+ }: {
178
+ testId?: string;
179
+ buttonClassName?: string;
180
+ iconClassName?: string;
181
+ contentClassName?: string;
182
+ /**
183
+ * When true, the trigger also calls `preventDefault()` on click — needed
184
+ * when the dropdown is nested inside an `<a>` or other element whose
185
+ * default click behavior (navigation, submit, etc.) should be suppressed.
186
+ */
187
+ preventDefaultOnTrigger?: boolean;
188
+ children: React.ReactNode;
189
+ }) => (
190
+ <DropdownMenu modal={false}>
191
+ <DropdownMenuTrigger
192
+ asChild={true}
193
+ tabIndex={-1}
194
+ onClick={(e) => {
195
+ e.stopPropagation();
196
+ if (preventDefaultOnTrigger) {
197
+ e.preventDefault();
198
+ }
199
+ }}
200
+ >
201
+ <MoreActionsButton
202
+ data-testid={testId}
203
+ className={buttonClassName}
204
+ iconClassName={iconClassName}
205
+ />
206
+ </DropdownMenuTrigger>
207
+ <DropdownMenuContent
208
+ align="end"
209
+ className={contentClassName ?? "print:hidden w-[220px]"}
210
+ onClick={(e) => e.stopPropagation()}
211
+ onCloseAutoFocus={(e) => e.preventDefault()}
212
+ >
213
+ {children}
214
+ </DropdownMenuContent>
215
+ </DropdownMenu>
216
+ );
217
+
218
+ export const RenameMenuItem = ({
219
+ onSelect,
220
+ disabled,
221
+ title,
222
+ }: {
223
+ onSelect: (evt: Event) => void;
224
+ disabled?: boolean;
225
+ title?: string;
226
+ }) => (
227
+ <DropdownMenuItem onSelect={onSelect} disabled={disabled} title={title}>
228
+ <Edit3Icon className={MENU_ITEM_ICON_CLASS} />
229
+ Rename
230
+ </DropdownMenuItem>
231
+ );
232
+
233
+ export const DuplicateMenuItem = ({
234
+ onSelect,
235
+ disabled,
236
+ title,
237
+ }: {
238
+ onSelect: (evt: Event) => void;
239
+ disabled?: boolean;
240
+ title?: string;
241
+ }) => (
242
+ <DropdownMenuItem onSelect={onSelect} disabled={disabled} title={title}>
243
+ <CopyIcon className={MENU_ITEM_ICON_CLASS} />
244
+ Duplicate
245
+ </DropdownMenuItem>
246
+ );
247
+
248
+ export const DeleteMenuItem = ({
249
+ onSelect,
250
+ disabled,
251
+ title,
252
+ }: {
253
+ onSelect: (evt: Event) => void;
254
+ disabled?: boolean;
255
+ title?: string;
256
+ }) => (
257
+ <DropdownMenuItem
258
+ onSelect={onSelect}
259
+ variant="danger"
260
+ disabled={disabled}
261
+ title={title}
262
+ >
263
+ <Trash2Icon className={MENU_ITEM_ICON_CLASS} />
264
+ Delete
265
+ </DropdownMenuItem>
266
+ );
@@ -88,7 +88,7 @@ export const CsvViewer: React.FC<{ contents: string }> = ({ contents }) => {
88
88
  setPaginationState={setPagination}
89
89
  wrapperClassName="h-full justify-between pb-1 px-1"
90
90
  pagination={true}
91
- className="rounded-none border-b flex overflow-hidden"
91
+ className="rounded-none border-b flex flex-col overflow-hidden"
92
92
  rowSelection={Objects.EMPTY}
93
93
  />
94
94
  );
@@ -10,6 +10,26 @@ import type {
10
10
  import { prettyError } from "@/utils/errors";
11
11
  import { Functions } from "@/utils/functions";
12
12
  import { type FilePath, PathBuilder } from "@/utils/paths";
13
+ import { resolvePaths } from "@/utils/pathUtils";
14
+
15
+ /**
16
+ * Normalized result of a file mutation: the server response when successful,
17
+ * `null` when the server rejected the request and a toast was surfaced.
18
+ */
19
+ export type FileOperationResult = FileUpdateResponse | null;
20
+
21
+ export function handleFileResponse(
22
+ response: FileUpdateResponse,
23
+ ): FileOperationResult {
24
+ if (!response.success) {
25
+ toast({
26
+ title: "Failed",
27
+ description: response.message,
28
+ });
29
+ return null;
30
+ }
31
+ return response;
32
+ }
13
33
 
14
34
  export class RequestingTree {
15
35
  private delegate = new SimpleTree<FileInfo>([]);
@@ -85,15 +105,15 @@ export class RequestingTree {
85
105
  });
86
106
  return;
87
107
  }
88
- const currentPath = node.data.path as FilePath;
89
- const parentPath = this.path.dirname(currentPath);
90
- const newPath = this.path.join(parentPath, newName);
108
+ const { path, newPath } = resolvePaths({
109
+ path: node.data.path,
110
+ name: newName,
111
+ root: this.rootPath,
112
+ });
113
+ const parentPath = this.path.dirname(path);
91
114
  const newFile = await this.callbacks
92
- .copyFileOrFolder({
93
- path: currentPath,
94
- newPath: newPath,
95
- })
96
- .then(this.handleResponse);
115
+ .copyFileOrFolder({ path, newPath })
116
+ .then(handleFileResponse);
97
117
  if (!newFile?.info) {
98
118
  return;
99
119
  }
@@ -116,14 +136,18 @@ export class RequestingTree {
116
136
  });
117
137
  return;
118
138
  }
119
- const currentPath = node.data.path as FilePath;
120
- const newPath = this.path.join(this.path.dirname(currentPath), name);
121
- await this.callbacks
122
- .renameFileOrFolder({
123
- path: currentPath,
124
- newPath: newPath,
125
- })
126
- .then(this.handleResponse);
139
+ const { path, newPath } = resolvePaths({
140
+ path: node.data.path,
141
+ name,
142
+ root: this.rootPath,
143
+ });
144
+ const result = await this.callbacks
145
+ .renameFileOrFolder({ path, newPath })
146
+ .then(handleFileResponse);
147
+ if (!result) {
148
+ return;
149
+ }
150
+
127
151
  this.delegate.update({ id, changes: { name, path: newPath } });
128
152
  this.onChange(this.delegate.data);
129
153
  // Rename all of its children
@@ -136,23 +160,25 @@ export class RequestingTree {
136
160
  : this.rootPath;
137
161
 
138
162
  await Promise.all(
139
- fromIds.map((id) => {
140
- this.delegate.move({ id, parentId, index: 0 });
163
+ fromIds.map(async (id) => {
141
164
  const node = this.delegate.find(id);
142
165
  if (!node) {
143
- return Promise.resolve();
166
+ return;
144
167
  }
168
+ const originalPath = node.data.path;
145
169
  const newPath = this.path.join(
146
170
  parentPath,
147
- this.path.basename(node.data.path as FilePath),
171
+ this.path.basename(originalPath as FilePath),
148
172
  );
173
+ const result = await this.callbacks
174
+ .renameFileOrFolder({ path: originalPath, newPath })
175
+ .then(handleFileResponse);
176
+ if (!result) {
177
+ return;
178
+ }
179
+
180
+ this.delegate.move({ id, parentId, index: 0 });
149
181
  this.delegate.update({ id, changes: { path: newPath } });
150
- return this.callbacks
151
- .renameFileOrFolder({
152
- path: node.data.path,
153
- newPath: newPath,
154
- })
155
- .then(this.handleResponse);
156
182
  }),
157
183
  );
158
184
 
@@ -162,17 +188,21 @@ export class RequestingTree {
162
188
  await this.refreshAll([parentPath]);
163
189
  }
164
190
 
165
- async createFile(
166
- name: string,
167
- parentId: string | null,
168
- type: "file" | "notebook" = "file",
169
- ): Promise<void> {
191
+ async createFile({
192
+ name,
193
+ parentId,
194
+ type = "file",
195
+ }: {
196
+ name: string;
197
+ parentId: string | null;
198
+ type?: "file" | "notebook";
199
+ }): Promise<void> {
170
200
  const parentPath = parentId
171
201
  ? (this.delegate.find(parentId)?.data.path ?? parentId)
172
202
  : this.rootPath;
173
203
  const newFile = await this.callbacks
174
204
  .createFileOrFolder({ path: parentPath, type: type, name: name })
175
- .then(this.handleResponse);
205
+ .then(handleFileResponse);
176
206
  if (!newFile?.info) {
177
207
  return;
178
208
  }
@@ -192,7 +222,7 @@ export class RequestingTree {
192
222
  : this.rootPath;
193
223
  const newFolder = await this.callbacks
194
224
  .createFileOrFolder({ path: parentPath, type: "directory", name: name })
195
- .then(this.handleResponse);
225
+ .then(handleFileResponse);
196
226
  if (!newFolder?.info) {
197
227
  return;
198
228
  }
@@ -216,9 +246,12 @@ export class RequestingTree {
216
246
  return;
217
247
  }
218
248
 
219
- await this.callbacks
249
+ const result = await this.callbacks
220
250
  .deleteFileOrFolder({ path: node.data.path })
221
- .then(this.handleResponse);
251
+ .then(handleFileResponse);
252
+ if (!result) {
253
+ return;
254
+ }
222
255
  this.delegate.drop({ id });
223
256
  this.onChange(this.delegate.data);
224
257
  }
@@ -262,18 +295,4 @@ export class RequestingTree {
262
295
  }
263
296
  return path;
264
297
  };
265
-
266
- private handleResponse = (
267
- response: FileUpdateResponse,
268
- ): FileUpdateResponse | null => {
269
- if (!response.success) {
270
- toast({
271
- title: "Failed",
272
- description: response.message,
273
- });
274
- return null;
275
- }
276
-
277
- return response;
278
- };
279
298
  }
@@ -8,6 +8,7 @@ import {
8
8
  floatType,
9
9
  intType,
10
10
  JsonViewer,
11
+ type JsonViewerKeyRenderer,
11
12
  nullType,
12
13
  objectType,
13
14
  stringType,
@@ -130,6 +131,9 @@ export const JsonOutput: React.FC<Props> = memo(
130
131
  collapseStringsAfterLength={COLLAPSED_TEXT_LENGTH}
131
132
  // leave the default valueTypes as it was - 'python', only 'json' is changed
132
133
  valueTypes={valueTypesMap[valueTypes]}
134
+ // Render dict keys that carry Python type info (e.g. `int`, `tuple`).
135
+ // See `_key_formatter` in marimo/_output/formatters/structures.py.
136
+ keyRenderer={valueTypes === "python" ? keyRenderer : undefined}
133
137
  // Don't group arrays, it will make the tree view look like there are nested arrays
134
138
  groupArraysAfterLength={Number.MAX_SAFE_INTEGER}
135
139
  // Built-in clipboard shifts content on hover
@@ -207,7 +211,10 @@ const LEAF_RENDERERS: Record<string, LeafRenderer> = {
207
211
  ),
208
212
  "text/plain+float:": (value) => <span>{value}</span>,
209
213
  "text/plain+bigint:": (value) => <span>{value}</span>,
210
- "text/plain+set:": (value) => <span>set{value}</span>,
214
+ "text/plain+set:": (value) => <span>{formatSetPayload(value)}</span>,
215
+ "text/plain+frozenset:": (value) => (
216
+ <span>{formatFrozensetPayload(value)}</span>
217
+ ),
211
218
  "text/plain+tuple:": (value) => <span>{value}</span>,
212
219
  "text/plain:": (value) => <CollapsibleTextOutput text={value} />,
213
220
  "application/json:": (value) => (
@@ -375,6 +382,99 @@ function renderLeaf(leaf: string, render: LeafRenderer): React.ReactNode {
375
382
  return <span>{leaf}</span>;
376
383
  }
377
384
 
385
+ // Prefix marking keys that carry encoded type information from Python.
386
+ // See `_key_formatter` in marimo/_output/formatters/structures.py.
387
+ const KEY_ENCODED_PREFIX = "text/plain+";
388
+
389
+ // Format a JSON-list payload as a Python tuple literal. 1-element tuples
390
+ // need a trailing comma — `(1)` is just `1` in Python, `(1,)` is the tuple.
391
+ function formatTuplePayload(jsonList: string): string {
392
+ const items = JSON.parse(jsonList) as unknown[];
393
+ const inner = items.map((x) => JSON.stringify(x)).join(", ");
394
+ if (items.length === 0) {
395
+ return "()";
396
+ }
397
+ if (items.length === 1) {
398
+ return `(${inner},)`;
399
+ }
400
+ return `(${inner})`;
401
+ }
402
+
403
+ // Format a JSON-list payload as a Python frozenset literal. Empty → `frozenset()`
404
+ // rather than `frozenset({})` (which reads like a dict).
405
+ function formatFrozensetPayload(jsonList: string): string {
406
+ const items = JSON.parse(jsonList) as unknown[];
407
+ if (items.length === 0) {
408
+ return "frozenset()";
409
+ }
410
+ const inner = items.map((x) => JSON.stringify(x)).join(", ");
411
+ return `frozenset({${inner}})`;
412
+ }
413
+
414
+ // Format a JSON-list payload as a Python set literal. Empty → `set()`
415
+ // (not `{}`, which is a dict literal in Python).
416
+ function formatSetPayload(jsonList: string): string {
417
+ try {
418
+ const items = JSON.parse(jsonList) as unknown[];
419
+ if (items.length === 0) {
420
+ return "set()";
421
+ }
422
+ const inner = items.map((x) => JSON.stringify(x)).join(", ");
423
+ return `{${inner}}`;
424
+ } catch {
425
+ // Back-compat: older wire form was `text/plain+set:{1, 2, 3}` (Python
426
+ // set-literal string, not JSON). Pass it through as-is rather than crash.
427
+ return jsonList;
428
+ }
429
+ }
430
+
431
+ // Renderers for decoded non-string keys. Visual affordances match Python:
432
+ // unquoted primitives, parens for tuple, `frozenset({...})` for frozenset,
433
+ // and the `text/plain+str:` escape re-quotes the original string.
434
+ const KEY_DECODERS: Record<string, (data: string) => React.ReactNode> = {
435
+ "text/plain+int:": (v) => <span>{v}</span>,
436
+ "text/plain+float:": (v) => <span>{v}</span>,
437
+ "text/plain+bool:": (v) => <span>{v === "True" ? "True" : "False"}</span>,
438
+ "text/plain+none:": () => <span>None</span>,
439
+ "text/plain+tuple:": (v) => <span>{formatTuplePayload(v)}</span>,
440
+ "text/plain+frozenset:": (v) => <span>{formatFrozensetPayload(v)}</span>,
441
+ "text/plain+str:": (v) => <span>"{v}"</span>,
442
+ };
443
+
444
+ function isEncodedKey(key: unknown): key is string {
445
+ return typeof key === "string" && key.startsWith(KEY_ENCODED_PREFIX);
446
+ }
447
+
448
+ // `@textea/json-viewer` drops quotes from integer-like string keys, which
449
+ // makes the string `"2"` visually identical to the decoded int `2`. Match
450
+ // the same keys the viewer strips and render them with explicit quotes.
451
+ const INT_LIKE_STRING = /^-?\d+$/;
452
+
453
+ const keyRenderer: JsonViewerKeyRenderer = Object.assign(
454
+ ({ path }: DataItemProps) => {
455
+ const key = path[path.length - 1];
456
+ if (typeof key !== "string") {
457
+ return <span>{String(key)}</span>;
458
+ }
459
+ if (isEncodedKey(key)) {
460
+ const [data, mimeType] = leafDataAndMimeType(key);
461
+ const render = KEY_DECODERS[`${mimeType}:`];
462
+ return render ? render(data) : <span>{key}</span>;
463
+ }
464
+ // Plain integer-like string — quote it so it's distinct from a decoded int.
465
+ return <span>"{key}"</span>;
466
+ },
467
+ {
468
+ when: ({ path }: DataItemProps) => {
469
+ const key = path[path.length - 1];
470
+ return (
471
+ isEncodedKey(key) ||
472
+ (typeof key === "string" && INT_LIKE_STRING.test(key))
473
+ );
474
+ },
475
+ },
476
+ );
477
+
378
478
  const MIME_PREFIXES = Object.keys(LEAF_RENDERERS);
379
479
  const REPLACE_PREFIX = "<marimo-replace>";
380
480
  const REPLACE_SUFFIX = "</marimo-replace>";
@@ -413,8 +513,10 @@ function pythonJsonReplacer(_key: string, value: unknown): unknown {
413
513
  return `${REPLACE_PREFIX}(${leafData(value).slice(1, -1)})${REPLACE_SUFFIX}`;
414
514
  }
415
515
  if (value.startsWith("text/plain+set:")) {
416
- // replace first and last characters [] with {}
417
- return `${REPLACE_PREFIX}{${leafData(value).slice(1, -1)}}${REPLACE_SUFFIX}`;
516
+ return `${REPLACE_PREFIX}${formatSetPayload(leafData(value))}${REPLACE_SUFFIX}`;
517
+ }
518
+ if (value.startsWith("text/plain+frozenset:")) {
519
+ return `${REPLACE_PREFIX}${formatFrozensetPayload(leafData(value))}${REPLACE_SUFFIX}`;
418
520
  }
419
521
 
420
522
  if (MIME_PREFIXES.some((prefix) => value.startsWith(prefix))) {
@@ -428,10 +530,61 @@ function pythonJsonReplacer(_key: string, value: unknown): unknown {
428
530
  return value;
429
531
  }
430
532
 
533
+ // Rewrite an encoded key string into the Python literal that should appear
534
+ // unquoted in the copy output. Wrapping in REPLACE_PREFIX/SUFFIX makes the
535
+ // final regex pass strip the surrounding JSON quotes.
536
+ function decodeKeyForCopy(key: string): string {
537
+ const [data, mimeType] = leafDataAndMimeType(key);
538
+ const wrap = (s: string) => `${REPLACE_PREFIX}${s}${REPLACE_SUFFIX}`;
539
+ switch (`${mimeType}:`) {
540
+ case "text/plain+int:":
541
+ return wrap(data);
542
+ case "text/plain+float:":
543
+ if (data === "nan") {
544
+ return wrap("float('nan')");
545
+ }
546
+ if (data === "inf") {
547
+ return wrap("float('inf')");
548
+ }
549
+ if (data === "-inf") {
550
+ return wrap("-float('inf')");
551
+ }
552
+ return wrap(data);
553
+ case "text/plain+bool:":
554
+ return wrap(data === "True" ? "True" : "False");
555
+ case "text/plain+none:":
556
+ return wrap("None");
557
+ case "text/plain+tuple:":
558
+ return wrap(formatTuplePayload(data));
559
+ case "text/plain+frozenset:":
560
+ return wrap(formatFrozensetPayload(data));
561
+ case "text/plain+str:":
562
+ // `data` is the original Python string; it stays quoted.
563
+ return data;
564
+ default:
565
+ return key;
566
+ }
567
+ }
568
+
569
+ function rewriteEncodedKeys(value: unknown): unknown {
570
+ if (Array.isArray(value)) {
571
+ return value.map(rewriteEncodedKeys);
572
+ }
573
+ if (typeof value === "object" && value !== null) {
574
+ const out: Record<string, unknown> = {};
575
+ for (const [k, v] of Object.entries(value)) {
576
+ const newKey = isEncodedKey(k) ? decodeKeyForCopy(k) : k;
577
+ out[newKey] = rewriteEncodedKeys(v);
578
+ }
579
+ return out;
580
+ }
581
+ return value;
582
+ }
583
+
431
584
  export function getCopyValue(value: unknown): string {
432
585
  // Because this results in valid json, it adds quotes around None and True/False.
433
586
  // but we want to make this look like Python, so we remove the quotes.
434
- return JSON.stringify(value, pythonJsonReplacer, 2)
587
+ return JSON.stringify(rewriteEncodedKeys(value), pythonJsonReplacer, 2)
435
588
  .replaceAll(`"${REPLACE_PREFIX}`, "")
436
589
  .replaceAll(`${REPLACE_SUFFIX}"`, "");
437
590
  }