@marimo-team/frontend 0.23.10-dev9 → 0.23.11-dev1

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 (711) hide show
  1. package/dist/assets/{CellStatus-CW_ZKa0D.js → CellStatus-e0ex7Iei.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-W0UfNkj7.js → ConnectedDataExplorerComponent-pHNm56FY.js} +1 -1
  3. package/dist/assets/{ImperativeModal-B3Th7k4R.js → ImperativeModal-BW1dmntO.js} +1 -1
  4. package/dist/assets/JsonOutput-DRNPZOvX.js +53 -0
  5. package/dist/assets/LazyAnyLanguageCodeMirror-C7ALwTI_.js +2 -0
  6. package/dist/assets/{MarimoErrorOutput-z_AGcPFY.js → MarimoErrorOutput-BH6hs0Ir.js} +2 -2
  7. package/dist/assets/{RSPContexts-CdN1NyAt.js → RSPContexts-C3vBe8nL.js} +1 -1
  8. package/dist/assets/{RenderHTML-p2dN-EvB.js → RenderHTML-BQ1PO4Wd.js} +1 -1
  9. package/dist/assets/RunButton-F8pLIvFp.js +1 -0
  10. package/dist/assets/__vite-browser-external-CeH7R2Sf.js +1 -0
  11. package/dist/assets/__vite-browser-external-DTK_qJHK.js +1 -0
  12. package/dist/assets/{add-cell-with-ai-D42169BY.js → add-cell-with-ai-C2OtCghK.js} +21 -21
  13. package/dist/assets/add-connection-dialog-AhwxOztN.js +170 -0
  14. package/dist/assets/{agent-panel-C106sjaz.js → agent-panel-D6ryE8xb.js} +6 -6
  15. package/dist/assets/{ai-model-dropdown-CKlj3_3M.js → ai-model-dropdown-CG4B4rqH.js} +3 -3
  16. package/dist/assets/{alert-dialog-BqFLkbUc.js → alert-dialog-5BGIfskO.js} +2 -2
  17. package/dist/assets/{any-language-editor-DOLtgCLo.js → any-language-editor-Ds4PatYt.js} +1 -1
  18. package/dist/assets/apl-DpOiWl6J.js +1 -0
  19. package/dist/assets/{app-config-button-DijwNgwN.js → app-config-button-D_sFrSql.js} +1 -1
  20. package/dist/assets/{arc-CWuN1tfc.js → arc-xh3ZebK_.js} +1 -1
  21. package/dist/assets/{architecture-7HQA4BMR-DJtUfdk-.js → architecture-7HQA4BMR-CtZSskKa.js} +1 -1
  22. package/dist/assets/{architectureDiagram-VXUJARFQ-Cgi4wo9P.js → architectureDiagram-VXUJARFQ-BOj65Cij.js} +1 -1
  23. package/dist/assets/asciiarmor-DVIuYySe.js +1 -0
  24. package/dist/assets/asn1-CWHjZJq6.js +1 -0
  25. package/dist/assets/{blockDiagram-VD42YOAC-CsHap8-F.js → blockDiagram-VD42YOAC-C1dCrclf.js} +1 -1
  26. package/dist/assets/brainfuck-CIKJewgG.js +1 -0
  27. package/dist/assets/{c4Diagram-YG6GDRKO-CZuArudM.js → c4Diagram-YG6GDRKO-i2yUrWYM.js} +1 -1
  28. package/dist/assets/{cache-panel-lRBWNjiY.js → cache-panel-C2wbL8-g.js} +1 -1
  29. package/dist/assets/cell-editor-XNa3wJ3P.js +24 -0
  30. package/dist/assets/{cell-editor-Iey559K_.css → cell-editor-nqEF4IhQ.css} +1 -1
  31. package/dist/assets/{cell-link-CLgpQstl.js → cell-link-Bj4-yOIx.js} +1 -1
  32. package/dist/assets/{cells-DZIaNeAd.js → cells-DOA0Gew8.js} +76 -74
  33. package/dist/assets/cells-pu5xzE_v.css +2 -0
  34. package/dist/assets/channel-C8k5aAg8.js +1 -0
  35. package/dist/assets/{chat-display-CBAWsoRx.js → chat-display-CezkHLLR.js} +1 -1
  36. package/dist/assets/{chat-panel-D7wvdByY.js → chat-panel-DEBTPtwE.js} +2 -2
  37. package/dist/assets/{chat-ui-BBqT02Tj.js → chat-ui-CIr1o1hq.js} +4 -4
  38. package/dist/assets/{chunk-4BX2VUAB-Ca6WzYTr.js → chunk-4BX2VUAB-CHtIUBVX.js} +1 -1
  39. package/dist/assets/chunk-55IACEB6-DJtiFmZI.js +1 -0
  40. package/dist/assets/{chunk-5FQGJX7Z-D9iBG0F7.js → chunk-5FQGJX7Z-D91x7QHS.js} +42 -42
  41. package/dist/assets/{chunk-ABZYJK2D-BG7Eb4WW.js → chunk-ABZYJK2D-CW6LcQEi.js} +3 -3
  42. package/dist/assets/{chunk-ATLVNIR6-CqLn9HI1.js → chunk-ATLVNIR6-CaXl_ZVt.js} +1 -1
  43. package/dist/assets/{chunk-B4BG7PRW-D4SyZNjn.js → chunk-B4BG7PRW-Dkcioyxv.js} +1 -1
  44. package/dist/assets/{chunk-CVBHYZKI-C-NWvPQL.js → chunk-CVBHYZKI-Cx6_q0Bq.js} +1 -1
  45. package/dist/assets/{chunk-DI55MBZ5-t9uiMPiN.js → chunk-DI55MBZ5-CpmNjAbj.js} +1 -1
  46. package/dist/assets/{chunk-EXTU4WIE-BmVk7Fyq.js → chunk-EXTU4WIE-BfQ60QJd.js} +1 -1
  47. package/dist/assets/{chunk-FMBD7UC4-DlnzxSkO.js → chunk-FMBD7UC4-Dzk6L3_z.js} +1 -1
  48. package/dist/assets/{chunk-HN2XXSSU-Bcaj5fRB.js → chunk-HN2XXSSU-DKAgaU5O.js} +1 -1
  49. package/dist/assets/{chunk-JA3XYJ7Z-B5b2QHOb.js → chunk-JA3XYJ7Z-Cx9lJRz-.js} +1 -1
  50. package/dist/assets/{chunk-JZLCHNYA-1_sVfAnw.js → chunk-JZLCHNYA-LdSYK6Ej.js} +1 -1
  51. package/dist/assets/{chunk-MI3HLSF2-DqzZqBCh.js → chunk-MI3HLSF2-AJRVV4NE.js} +1 -1
  52. package/dist/assets/{chunk-N4CR4FBY-CFJoD-EQ.js → chunk-N4CR4FBY-DM96YL3R.js} +2 -2
  53. package/dist/assets/{chunk-QN33PNHL-BBE_bx9E.js → chunk-QN33PNHL-4cZDuwgu.js} +1 -1
  54. package/dist/assets/{chunk-QXUST7PY-Cu1nR-L2.js → chunk-QXUST7PY-Di5YbBao.js} +1 -1
  55. package/dist/assets/{chunk-QZHKN3VN-BAnb9AKF.js → chunk-QZHKN3VN-B2hZ4g68.js} +1 -1
  56. package/dist/assets/{chunk-S3R3BYOJ-Cl0iW04v.js → chunk-S3R3BYOJ-BAKX3hoQ.js} +1 -1
  57. package/dist/assets/{chunk-TZMSLE5B-f5ix6iSd.js → chunk-TZMSLE5B-BFdV9a1D.js} +1 -1
  58. package/dist/assets/classDiagram-2ON5EDUG-CFISa78E.js +1 -0
  59. package/dist/assets/classDiagram-v2-WZHVMYZB-BzMNKvre.js +1 -0
  60. package/dist/assets/{clike-bdcjLdZ4.js → clike-wo4CVrJj.js} +1 -1
  61. package/dist/assets/clojure-CTxjMkBI.js +1 -0
  62. package/dist/assets/cmake-aJ0aGjat.js +1 -0
  63. package/dist/assets/cobol-Dw9T4cw-.js +1 -0
  64. package/dist/assets/{code-block-37QAKDTI-B19XL3UR.js → code-block-37QAKDTI-Ci6cOC6s.js} +1 -1
  65. package/dist/assets/coffeescript-B5HCKl_0.js +1 -0
  66. package/dist/assets/column-preview-nu3Qo2OW.js +1 -0
  67. package/dist/assets/{command-KARR7KMq.js → command-BmOGG6-2.js} +1 -1
  68. package/dist/assets/{command-palette-BcLQY0if.js → command-palette-_VEEjmkI.js} +1 -1
  69. package/dist/assets/{common-ClJSmjpB.js → common-fDFYY_sv.js} +1 -1
  70. package/dist/assets/commonlisp-C578hhl1.js +1 -0
  71. package/dist/assets/components--C6N-DXq.js +1 -0
  72. package/dist/assets/{copy-icon-D_qz1txR.js → copy-icon-BuRdHNPA.js} +1 -1
  73. package/dist/assets/{cose-bilkent-S5V4N54A-CQqSLzd1.js → cose-bilkent-S5V4N54A-DsnN-_2o.js} +1 -1
  74. package/dist/assets/crystal-D84c1nzD.js +1 -0
  75. package/dist/assets/{css-ACAb8MRM.js → css-BJsW3aHa.js} +1 -1
  76. package/dist/assets/cypher-DBO3MHmN.js +1 -0
  77. package/dist/assets/d-KvHiAR3H.js +1 -0
  78. package/dist/assets/{dagre-6UL2VRFP-CVKXpDlr.js → dagre-6UL2VRFP-CHMBr-on.js} +1 -1
  79. package/dist/assets/{data-grid-overlay-editor-BdDYn72O.js → data-grid-overlay-editor-orng_e3E.js} +1 -1
  80. package/dist/assets/{datasource-D4PcWbjA.js → datasource-CR6RRpTi.js} +2 -2
  81. package/dist/assets/dependency-graph-panel-BEgkvdX0.js +5 -0
  82. package/dist/assets/{diagram-PSM6KHXK-BfzLNKp-.js → diagram-PSM6KHXK-BAkhyJz0.js} +1 -1
  83. package/dist/assets/{diagram-QEK2KX5R-D_H77Ni5.js → diagram-QEK2KX5R-OUubZf2n.js} +1 -1
  84. package/dist/assets/{diagram-S2PKOQOG-DJmVBeMk.js → diagram-S2PKOQOG-CGIZL2qm.js} +1 -1
  85. package/dist/assets/{dialog-DzC_QCtT.js → dialog-DRnNAWYl.js} +1 -1
  86. package/dist/assets/diff-BmUpKGx-.js +1 -0
  87. package/dist/assets/dist-0sLFAEuj.js +1 -0
  88. package/dist/assets/dist-2FedModH.js +7 -0
  89. package/dist/assets/{dist-CNyMUs19.js → dist-2TkSwR77.js} +1 -1
  90. package/dist/assets/{dist-CJIOLS6O.js → dist-6YVuqDQg.js} +1 -1
  91. package/dist/assets/dist-AQEMgdxp.js +1 -0
  92. package/dist/assets/dist-B65RnwM5.js +1 -0
  93. package/dist/assets/dist-BURue7-e.js +3 -0
  94. package/dist/assets/{dist-A7swzSTR.js → dist-BXcZeTeA.js} +1 -1
  95. package/dist/assets/dist-BXeHg5NQ.js +1 -0
  96. package/dist/assets/{dist-DqVEVg0c.js → dist-BcvGVYKl.js} +1 -1
  97. package/dist/assets/dist-BdKlcwR7.js +1 -0
  98. package/dist/assets/{dist-CsvFAFh9.js → dist-BieDRQs9.js} +1 -1
  99. package/dist/assets/{dist-HlsDto3K.js → dist-Bo13cFwO.js} +1 -1
  100. package/dist/assets/dist-Bqr3AzD8.js +1 -0
  101. package/dist/assets/{dist-C78V1LRz.js → dist-BscEQwf7.js} +1 -1
  102. package/dist/assets/{dist-CpTFpfm_.js → dist-BwnT-_gD.js} +1 -1
  103. package/dist/assets/dist-BznMRbTz.js +1 -0
  104. package/dist/assets/dist-C5PcfT25.js +1 -0
  105. package/dist/assets/{dist-BdyjRhEt.js → dist-CWMKC7yO.js} +1 -1
  106. package/dist/assets/dist-CZ5EKIth.js +1 -0
  107. package/dist/assets/dist-CdtVwSQt.js +1 -0
  108. package/dist/assets/{dist-Dr8mWwQ_.js → dist-ChrXdgjb.js} +1 -1
  109. package/dist/assets/{dist-CqEym3Sr.js → dist-CvuhNTbr.js} +1 -1
  110. package/dist/assets/{dist-CKT_lJKW.js → dist-CycP1Cdf.js} +1 -1
  111. package/dist/assets/{dist-BrR4M-k3.js → dist-D0HyMpgV.js} +12 -11
  112. package/dist/assets/{dist-CciFN1z_.js → dist-D2g-G0wk.js} +1 -1
  113. package/dist/assets/dist-D3lJti6y.js +1 -0
  114. package/dist/assets/dist-DBklo-uX.js +1 -0
  115. package/dist/assets/{dist-DUHHizRG.js → dist-DCzr8T5W.js} +1 -1
  116. package/dist/assets/{dist-BlOtCkpT.js → dist-DU8NrdIh.js} +1 -1
  117. package/dist/assets/dist-DUDjfnME.js +1 -0
  118. package/dist/assets/dist-DVkC-Qmw.js +2 -0
  119. package/dist/assets/{dist-CocyeH0q.js → dist-DgGMawx8.js} +1 -1
  120. package/dist/assets/dist-Dq1Qheae.js +1 -0
  121. package/dist/assets/{dist-D70Tz1Kr.js → dist-DxlQcmyw.js} +1 -1
  122. package/dist/assets/dist-GiCZ_RyY.js +1 -0
  123. package/dist/assets/{dist-CBSMxaO_.js → dist-HyCgERnW.js} +4 -4
  124. package/dist/assets/{dist-CpcTHxTt.js → dist-Otadb4Hb.js} +1 -1
  125. package/dist/assets/dist-PCikvPoP.js +1 -0
  126. package/dist/assets/{dist-4ni0fia5.js → dist-PHrL7abE.js} +3 -3
  127. package/dist/assets/{dist-BQeNY9Zl.js → dist-QqcJxlfK.js} +1 -1
  128. package/dist/assets/dist-RMRSa-Mj.js +13 -0
  129. package/dist/assets/dist-RnuaWZoB.js +1 -0
  130. package/dist/assets/{dist-C9ZB41s2.js → dist-YEXtMjTi.js} +2 -2
  131. package/dist/assets/dist-deBZx53p.js +1 -0
  132. package/dist/assets/{dist-BF6UNR6V.js → dist-flL-WW8v.js} +1 -1
  133. package/dist/assets/dist-rBRbke5D.js +1 -0
  134. package/dist/assets/{dockerfile-BSMbgQQl.js → dockerfile-DQFWVVcg.js} +1 -1
  135. package/dist/assets/documentation-panel-HvbKykbI.js +1 -0
  136. package/dist/assets/download-DhxnAw14.js +9 -0
  137. package/dist/assets/{dropdown-menu-CR7cnzLX.js → dropdown-menu-CZ4XbE-c.js} +1 -1
  138. package/dist/assets/dtd-Dwf-AbUl.js +1 -0
  139. package/dist/assets/dylan-VHUB-7ez.js +1 -0
  140. package/dist/assets/ecl-DvGrObaA.js +1 -0
  141. package/dist/assets/edit-page-D-02q6iz.js +9 -0
  142. package/dist/assets/eiffel-CUYga93e.js +1 -0
  143. package/dist/assets/elm-BhMhmEP6.js +1 -0
  144. package/dist/assets/{erDiagram-Q2GNP2WA-ROTNwSJz.js → erDiagram-Q2GNP2WA-Da5CNIuT.js} +1 -1
  145. package/dist/assets/erlang-D4xbdJFD.js +1 -0
  146. package/dist/assets/{error-banner-LdWZDbqd.js → error-banner-D0xvrLog.js} +1 -1
  147. package/dist/assets/{error-panel-DshWkCok.js → error-panel-WLBQ3q9p.js} +1 -1
  148. package/dist/assets/errors-D3F5g1xA.js +1 -0
  149. package/dist/assets/{es-DGgq-Wes.js → es-By9LYOsD.js} +1 -1
  150. package/dist/assets/{esm-DeiyaVAJ.js → esm-DgI-7XOj.js} +1 -1
  151. package/dist/assets/esm-xaw4Vy8N.js +1 -0
  152. package/dist/assets/eye-off-Cm6DdkeR.js +1 -0
  153. package/dist/assets/factor-C0grrWrC.js +1 -0
  154. package/dist/assets/{factor-C-_cRSDM.js → factor-Ccw_GUUV.js} +1 -1
  155. package/dist/assets/{field-zLmMOSA4.js → field-DCdxnSKm.js} +1 -1
  156. package/dist/assets/file-explorer-panel-DtzGlnzT.js +26 -0
  157. package/dist/assets/{file-icons-3sDTzIiO.js → file-icons-D2f3nfbq.js} +1 -1
  158. package/dist/assets/{file-name-input-BQHsY06u.js → file-name-input-BNYf9WWM.js} +3 -3
  159. package/dist/assets/{fileToBase64-DZfwJMrG.js → fileToBase64-D15LPv1Y.js} +1 -1
  160. package/dist/assets/{floating-outline-BwApXVjM.js → floating-outline-BvHFWRoz.js} +1 -1
  161. package/dist/assets/{flowDiagram-NV44I4VS--ee3IIVF.js → flowDiagram-NV44I4VS-BxZczAJ3.js} +1 -1
  162. package/dist/assets/focus-Ldqh99xE.js +1 -0
  163. package/dist/assets/{form-Dwj-zTw2.js → form-CxBAInfg.js} +2 -2
  164. package/dist/assets/formatting-DuH2AQgo.js +1 -0
  165. package/dist/assets/forth-CSTdXn4A.js +1 -0
  166. package/dist/assets/fortran-fENQO2l9.js +1 -0
  167. package/dist/assets/{fullscreen-eipL3i3Y.js → fullscreen-DFky0PAA.js} +3 -3
  168. package/dist/assets/{gallery-page-Bcf7fYLy.js → gallery-page-iZXf43Df.js} +1 -1
  169. package/dist/assets/{ganttDiagram-JELNMOA3-BGhmW2aP.js → ganttDiagram-JELNMOA3-D6lhmAdR.js} +1 -1
  170. package/dist/assets/gas-CPJMP4zj.js +1 -0
  171. package/dist/assets/gherkin-CiUmN4EE.js +1 -0
  172. package/dist/assets/{gitGraph-G5XIXVHT-DuJ_0c_E.js → gitGraph-G5XIXVHT-Du3ykVxi.js} +1 -1
  173. package/dist/assets/{gitGraphDiagram-V2S2FVAM-DXFCZcxr.js → gitGraphDiagram-V2S2FVAM-Cn2X9uyf.js} +1 -1
  174. package/dist/assets/{glide-data-editor-k70Tmujb.js → glide-data-editor-BbI6JGpY.js} +4 -4
  175. package/dist/assets/{globals-7JnRMGd4.js → globals-BivClSmn.js} +1 -1
  176. package/dist/assets/groovy-DMooZA1X.js +1 -0
  177. package/dist/assets/haskell-sDlThg6u.js +1 -0
  178. package/dist/assets/haxe-Do80ITri.js +1 -0
  179. package/dist/assets/home-page-DwFpLpXK.js +4 -0
  180. package/dist/assets/{hooks-TAU-thfD.js → hooks-5gNQitDd.js} +1 -1
  181. package/dist/assets/{html-to-image-E1XHwobR.js → html-to-image-CyAtzePO.js} +2 -2
  182. package/dist/assets/idl-DFPg6k4F.js +1 -0
  183. package/dist/assets/index-BAYF7dcV.css +2 -0
  184. package/dist/assets/index-CGCBsDqs.js +38 -0
  185. package/dist/assets/{info-VBDWY6EO-DPQEAe2T.js → info-VBDWY6EO-DfrFT_jr.js} +1 -1
  186. package/dist/assets/infoDiagram-HS3SLOUP-DkUueEWV.js +2 -0
  187. package/dist/assets/input-DA8xlX70.js +1 -0
  188. package/dist/assets/javascript-BGc4iHiT.js +1 -0
  189. package/dist/assets/{journeyDiagram-XKPGCS4Q-9D2JCyrN.js → journeyDiagram-XKPGCS4Q-D_8hf_60.js} +1 -1
  190. package/dist/assets/julia-BHNHVraD.js +1 -0
  191. package/dist/assets/{kanban-definition-3W4ZIXB7-DxV26rf-.js → kanban-definition-3W4ZIXB7-DLnwfoGw.js} +1 -1
  192. package/dist/assets/katex-Bty7Bcil.js +1 -0
  193. package/dist/assets/kiosk-mode-CTWHjzXs.js +1 -0
  194. package/dist/assets/{label-xHqFtfdz.js → label-C2_YQRio.js} +1 -1
  195. package/dist/assets/layout-D3pd3R21.js +9 -0
  196. package/dist/assets/{line-x4bpd_8D.js → line-VKarCWVL.js} +1 -1
  197. package/dist/assets/{linear-CW_ww8od.js → linear-BrLBJGJq.js} +1 -1
  198. package/dist/assets/livescript-Bv2FpOTI.js +1 -0
  199. package/dist/assets/{logs-panel-BgBoDU9c.js → logs-panel-BVLYycQb.js} +1 -1
  200. package/dist/assets/{loro_wasm_bg-CtNTubKN.js → loro_wasm_bg-Drxc4adW.js} +1 -1
  201. package/dist/assets/lua-BysKHKPZ.js +1 -0
  202. package/dist/assets/markdown-renderer-C9Ujvj0b.js +5 -0
  203. package/dist/assets/mathematica-BBTHoTvM.js +1 -0
  204. package/dist/assets/mbox-DeT9_lvk.js +1 -0
  205. package/dist/assets/{menu-items-DcP01QzW.js → menu-items-BP7Ju9ww.js} +1 -1
  206. package/dist/assets/mermaid-4DMBBIKO-DpGOMfON.js +1 -0
  207. package/dist/assets/{mermaid-Bes0ynI8.js → mermaid-DALU4jHa.js} +3 -3
  208. package/dist/assets/{mermaid-parser.core-aYU6qXxk.js → mermaid-parser.core-B73Gp-Wo.js} +2 -2
  209. package/dist/assets/{mhchem-8N2oE3tb.js → mhchem-LBCEVJFr.js} +1 -1
  210. package/dist/assets/{mindmap-definition-VGOIOE7T-DTJAbAQ8.js → mindmap-definition-VGOIOE7T-DO_Zb7LC.js} +1 -1
  211. package/dist/assets/mirc-D5fMSrXQ.js +1 -0
  212. package/dist/assets/mllike-BtxCpmpf.js +1 -0
  213. package/dist/assets/modelica-CRQcZpK6.js +1 -0
  214. package/dist/assets/mscgen-BfscU11q.js +1 -0
  215. package/dist/assets/multi-map-C4OANz8X.js +1 -0
  216. package/dist/assets/mumps-g7ooySbl.js +1 -0
  217. package/dist/assets/{name-cell-input-LhNS_uVp.js → name-cell-input-DabvuruX.js} +1 -1
  218. package/dist/assets/nsis-BtyCmCHZ.js +1 -0
  219. package/dist/assets/{nsis-BGZ5EB-j.js → nsis-CzZqoCdu.js} +1 -1
  220. package/dist/assets/ntriples-DLyxF-NO.js +1 -0
  221. package/dist/assets/{number-overlay-editor-DL4IwqDH.js → number-overlay-editor-DyhbXrfU.js} +1 -1
  222. package/dist/assets/numbers-DGxQfQ-A.js +1 -0
  223. package/dist/assets/octave-CFXP_zzr.js +1 -0
  224. package/dist/assets/{ordinal-_nQ2r1qQ.js → ordinal-DgI3JO68.js} +1 -1
  225. package/dist/assets/{outline-panel-CXyY4Ooa.js → outline-panel-B-ncbNWI.js} +1 -1
  226. package/dist/assets/oz-CrQbC0N_.js +1 -0
  227. package/dist/assets/{packages-panel-Dc1T948s.js → packages-panel-CESeW_3T.js} +1 -1
  228. package/dist/assets/{packet-DYOGHKS2-CxgeJpvT.js → packet-DYOGHKS2-DoIJcGk-.js} +1 -1
  229. package/dist/assets/{pair-with-agent-modal-1tufe5MP.js → pair-with-agent-modal-_SlYEcmZ.js} +1 -1
  230. package/dist/assets/{panels-wCFiLJ4T.js → panels-CTy3hq0L.js} +1 -1
  231. package/dist/assets/pascal-CCSZgYZH.js +1 -0
  232. package/dist/assets/perl-Bc1MycMl.js +1 -0
  233. package/dist/assets/{pie-VRWISCQL-GZ13ReaG.js → pie-VRWISCQL-DYulZZ0A.js} +1 -1
  234. package/dist/assets/{pieDiagram-ADFJNKIX-_3l2XiEo.js → pieDiagram-ADFJNKIX-Dxph8su5.js} +1 -1
  235. package/dist/assets/pig-CDr04RdE.js +1 -0
  236. package/dist/assets/{popover-Bz_0Vkyf.js → popover-CNCYAwbC.js} +1 -1
  237. package/dist/assets/powershell-DcvrUwmh.js +1 -0
  238. package/dist/assets/process-output-pPgH0ANl.js +1 -0
  239. package/dist/assets/properties-Y8OgFJMt.js +1 -0
  240. package/dist/assets/protobuf-Dyx-ENis.js +1 -0
  241. package/dist/assets/{pug-CYW0agOo.js → pug-BqLMXh-D.js} +1 -1
  242. package/dist/assets/pug-T7qjkmFh.js +1 -0
  243. package/dist/assets/puppet-BzYSg90u.js +1 -0
  244. package/dist/assets/python-D4S7tVrv.js +1 -0
  245. package/dist/assets/q-YpqabiSl.js +1 -0
  246. package/dist/assets/{quadrantDiagram-AYHSOK5B-CX3AMAvR.js → quadrantDiagram-AYHSOK5B-OK6c_k6c.js} +1 -1
  247. package/dist/assets/r-DzpuVbmQ.js +1 -0
  248. package/dist/assets/{radar-ZZBFDIW7-CbAjwmA0.js → radar-ZZBFDIW7-DsPiq6Fm.js} +1 -1
  249. package/dist/assets/radio-group-D7rh6Zek.js +1 -0
  250. package/dist/assets/{react-vega-COx3Ibyn.js → react-vega-CF0xMHAj.js} +1 -1
  251. package/dist/assets/{react-vega-CXIQBUis.js → react-vega-DiXzyRNd.js} +1 -1
  252. package/dist/assets/readonly-python-code-CvPx4CU_.js +1 -0
  253. package/dist/assets/{renderShortcut-CcFk3m01.js → renderShortcut--ku7VECI.js} +1 -1
  254. package/dist/assets/{requirementDiagram-UZGBJVZJ-ORHKBnkg.js → requirementDiagram-UZGBJVZJ-CHfh_UWf.js} +1 -1
  255. package/dist/assets/reveal-component-lTtEZQh1.js +1069 -0
  256. package/dist/assets/rpm-DlmAEsH3.js +1 -0
  257. package/dist/assets/ruby-BHSBK3B4.js +1 -0
  258. package/dist/assets/{run-page-CUGbf_dY.js → run-page-BB6ghGfO.js} +1 -1
  259. package/dist/assets/{sankeyDiagram-TZEHDZUN-Dvb8kmWa.js → sankeyDiagram-TZEHDZUN-DJTjdP71.js} +1 -1
  260. package/dist/assets/sas-DmQmrPAn.js +1 -0
  261. package/dist/assets/save-worker-Bcr7rl0C.js +77 -0
  262. package/dist/assets/scheme-CZHvt0eC.js +1 -0
  263. package/dist/assets/scratchpad-panel-Bvb8RxUv.js +1 -0
  264. package/dist/assets/{secrets-panel-Yt3orrjq.js → secrets-panel-BJEb16JJ.js} +1 -1
  265. package/dist/assets/{select-DZcFyKFQ.js → select-6suE6YM2.js} +1 -1
  266. package/dist/assets/{sequenceDiagram-WL72ISMW-DQycpQtE.js → sequenceDiagram-WL72ISMW-BbqjAz3N.js} +1 -1
  267. package/dist/assets/session-panel-CTJPYbAa.js +1 -0
  268. package/dist/assets/shell-BJzvpTMz.js +1 -0
  269. package/dist/assets/sieve-DGjPhm-6.js +1 -0
  270. package/dist/assets/smalltalk-DaG60CSr.js +1 -0
  271. package/dist/assets/{snippets-panel-CFcDYkZP.js → snippets-panel-BSgcoo-M.js} +1 -1
  272. package/dist/assets/sparql-CN49rXKB.js +1 -0
  273. package/dist/assets/{src-CvyFXpBy.js → src-Cf4NnJCp.js} +1 -1
  274. package/dist/assets/{state-S6iAjdOK.js → state-BWM3qRkR.js} +1 -1
  275. package/dist/assets/{state-Ddd_K3qS.js → state-C8yHPSLN.js} +3 -3
  276. package/dist/assets/state-DyKcYt57.js +1 -0
  277. package/dist/assets/{stateDiagram-FKZM4ZOC-D78DIR_F.js → stateDiagram-FKZM4ZOC-DF2xwZZf.js} +1 -1
  278. package/dist/assets/stateDiagram-v2-4FDKWEC3-6MssSC6h.js +1 -0
  279. package/dist/assets/{step-D7xg1Moj.js → step-DGkZosD0.js} +1 -1
  280. package/dist/assets/stylus-CzHZ_0CL.js +1 -0
  281. package/dist/assets/swift-5fr5bTbW.js +1 -0
  282. package/dist/assets/{switch-BiU_sAcn.js → switch-Ac7CgLgh.js} +1 -1
  283. package/dist/assets/tcl-D5oaR_GS.js +1 -0
  284. package/dist/assets/{terminal-BYGihNNp.js → terminal-BJktwlxI.js} +1 -1
  285. package/dist/assets/{textarea-Cs-Nr1R_.js → textarea-bBuxbFm7.js} +1 -1
  286. package/dist/assets/textile-CJ5e8-7o.js +1 -0
  287. package/dist/assets/{time-DLdI7jB3.js → time-BCqVDrZA.js} +1 -1
  288. package/dist/assets/{timeline-definition-IT6M3QCI-DIywx3xf.js → timeline-definition-IT6M3QCI-5BUJBQNX.js} +1 -1
  289. package/dist/assets/toml-D9QwsDZO.js +1 -0
  290. package/dist/assets/{tooltip-DTV9tlSr.js → tooltip-B_PkSKN3.js} +1 -1
  291. package/dist/assets/{tracing-panel-BQdeG0Lh.js → tracing-panel-BveZ5DZw.js} +2 -2
  292. package/dist/assets/{tracing-CsmYUpPy.js → tracing-pt7eDHWc.js} +1 -1
  293. package/dist/assets/tree-actions-1KQDSu1H.js +1 -0
  294. package/dist/assets/{treemap-GDKQZRPO-Dz_qZhuG.js → treemap-GDKQZRPO-4ltp47XX.js} +1 -1
  295. package/dist/assets/troff-DlwQJbfr.js +1 -0
  296. package/dist/assets/ttcn-DUvoO9Vo.js +1 -0
  297. package/dist/assets/ttcn-cfg-Cj-t-B3M.js +1 -0
  298. package/dist/assets/turtle-DzvxCIjc.js +1 -0
  299. package/dist/assets/useBoolean-CE6PfxGj.js +1 -0
  300. package/dist/assets/useCellActionButton-C4V7J6PS.js +1 -0
  301. package/dist/assets/useDeleteCell-BvnurAZ9.js +1 -0
  302. package/dist/assets/useDependencyPanelTab-DNlXaxbt.js +1 -0
  303. package/dist/assets/useNotebookActions-BIQkawja.js +1 -0
  304. package/dist/assets/useRunCells-cSZpNqnR.js +1 -0
  305. package/dist/assets/useSplitCell-s7dSiBUa.js +1 -0
  306. package/dist/assets/vb-Caf126uo.js +1 -0
  307. package/dist/assets/vbscript-BgRl-LR8.js +1 -0
  308. package/dist/assets/{vega-component-COOhhZ3h.js → vega-component-HZvzjURu.js} +1 -1
  309. package/dist/assets/velocity-CpvfwasF.js +1 -0
  310. package/dist/assets/verilog-hsHogyKv.js +1 -0
  311. package/dist/assets/vhdl-FciHazR1.js +1 -0
  312. package/dist/assets/webidl-CqjZNx5V.js +1 -0
  313. package/dist/assets/{worker-B38WhSlZ.js → worker-Bp53hInb.js} +6 -6
  314. package/dist/assets/{write-secret-modal-CLc8TNUL.js → write-secret-modal-DM7t6LNp.js} +1 -1
  315. package/dist/assets/xquery-DpTaL2IT.js +1 -0
  316. package/dist/assets/{xychartDiagram-PRI3JC2R-CjS1dL8k.js → xychartDiagram-PRI3JC2R-Cqm5NYAj.js} +1 -1
  317. package/dist/assets/yacas-D6bbkHsk.js +1 -0
  318. package/dist/assets/z80-MlujNizn.js +1 -0
  319. package/dist/files/wasm-intro.py +11 -8
  320. package/dist/index.html +68 -70
  321. package/package.json +4 -3
  322. package/src/__tests__/setup.ts +16 -0
  323. package/src/components/chat/chat-display.tsx +2 -2
  324. package/src/components/data-table/TableBottomBar.tsx +1 -15
  325. package/src/components/data-table/TableTopBar.tsx +8 -13
  326. package/src/components/data-table/__tests__/TableBottomBar.test.tsx +6 -12
  327. package/src/components/data-table/__tests__/column-visibility-dropdown.test.tsx +227 -0
  328. package/src/components/data-table/column-visibility-dropdown.tsx +204 -0
  329. package/src/components/data-table/data-table.tsx +1 -1
  330. package/src/components/data-table/filter-by-values-picker.tsx +39 -17
  331. package/src/components/data-table/filter-pills.tsx +1 -1
  332. package/src/components/datasources/__tests__/filter-empty.test.ts +183 -0
  333. package/src/components/datasources/datasources.tsx +92 -3
  334. package/src/components/editor/ai/ai-completion-editor.tsx +6 -5
  335. package/src/components/editor/cell/code/cell-editor.tsx +70 -32
  336. package/src/components/editor/cell/code/code-placeholder.css +18 -0
  337. package/src/components/editor/cell/code/code-placeholder.tsx +47 -0
  338. package/src/components/editor/cell/code/language-toggle.tsx +7 -1
  339. package/src/components/editor/chrome/wrapper/app-chrome.tsx +97 -52
  340. package/src/components/editor/chrome/wrapper/lazy-panels.ts +91 -0
  341. package/src/components/editor/chrome/wrapper/sidebar.tsx +2 -0
  342. package/src/components/editor/connections/storage/__tests__/__snapshots__/as-code.test.ts.snap +9 -2
  343. package/src/components/editor/connections/storage/__tests__/as-code.test.ts +62 -27
  344. package/src/components/editor/connections/storage/add-storage-form.tsx +5 -1
  345. package/src/components/editor/connections/storage/as-code.ts +20 -6
  346. package/src/components/editor/documentation.css +35 -0
  347. package/src/components/editor/file-tree/file-explorer.tsx +8 -18
  348. package/src/components/editor/file-tree/tree-actions.tsx +46 -1
  349. package/src/components/editor/notebook-cell.tsx +3 -3
  350. package/src/components/editor/renderers/slides-layout/__tests__/plugin.test.ts +20 -0
  351. package/src/components/editor/renderers/slides-layout/types.ts +1 -0
  352. package/src/components/markdown/__tests__/markdown-renderer.test.tsx +43 -0
  353. package/src/components/markdown/markdown-renderer.tsx +24 -1
  354. package/src/components/slides/__tests__/minimap-actions.test.tsx +166 -0
  355. package/src/components/slides/__tests__/reveal-component.test.ts +425 -0
  356. package/src/components/slides/minimap.tsx +127 -10
  357. package/src/components/slides/reveal-component.tsx +287 -61
  358. package/src/components/slides/slide-cell-view.tsx +26 -2
  359. package/src/components/slides/slide-form.tsx +26 -4
  360. package/src/components/storage/__tests__/storage-inspector.test.ts +180 -0
  361. package/src/components/storage/storage-inspector.tsx +535 -81
  362. package/src/components/ui/combobox.tsx +51 -32
  363. package/src/components/ui/number-field.tsx +5 -1
  364. package/src/components/ui/reorderable-list.tsx +13 -0
  365. package/src/components/ui/select-core/__tests__/use-select-list.test.ts +294 -0
  366. package/src/components/ui/select-core/__tests__/utils.test.ts +222 -0
  367. package/src/components/ui/select-core/index.ts +16 -0
  368. package/src/components/ui/select-core/option-row.tsx +33 -0
  369. package/src/components/ui/select-core/render-slot.ts +20 -0
  370. package/src/components/ui/select-core/select-list.tsx +248 -0
  371. package/src/components/ui/select-core/types.ts +44 -0
  372. package/src/components/ui/select-core/use-select-list.ts +347 -0
  373. package/src/components/ui/select-core/utils.ts +121 -0
  374. package/src/components/ui/toast.tsx +1 -0
  375. package/src/core/ai/__tests__/strip-wrapping-backticks.test.ts +133 -0
  376. package/src/core/ai/stream-completion-text.ts +48 -0
  377. package/src/core/ai/strip-wrapping-backticks.ts +88 -0
  378. package/src/core/cells/__tests__/document-changes.test.ts +2 -2
  379. package/src/core/cells/__tests__/focus.test.ts +45 -2
  380. package/src/core/cells/focus.ts +1 -1
  381. package/src/core/cells/scrollCellIntoView.ts +4 -0
  382. package/src/core/cells/utils.ts +1 -1
  383. package/src/core/codemirror/__tests__/editor-mount-scheduler.test.ts +143 -0
  384. package/src/core/codemirror/ai/request.ts +2 -14
  385. package/src/core/codemirror/copilot/getCodes.ts +3 -1
  386. package/src/core/codemirror/editor-mount-scheduler.ts +101 -0
  387. package/src/core/codemirror/language/languages/python.ts +2 -0
  388. package/src/core/codemirror/language/languages/sql/utils.ts +3 -1
  389. package/src/core/codemirror/lsp/__tests__/markdown-renderer.test.ts +41 -0
  390. package/src/core/codemirror/lsp/markdown-renderer.ts +59 -0
  391. package/src/core/datasets/data-source-connections.ts +2 -0
  392. package/src/core/errors/errors.ts +1 -1
  393. package/src/core/storage/__tests__/state.test.ts +49 -0
  394. package/src/core/storage/__tests__/useStorageEntries.test.tsx +199 -3
  395. package/src/core/storage/state.ts +124 -13
  396. package/src/core/storage/types.ts +6 -0
  397. package/src/core/wasm/worker/bootstrap.ts +12 -4
  398. package/src/plugins/core/__test__/registerReactComponent.test.ts +96 -0
  399. package/src/plugins/core/registerReactComponent.tsx +42 -10
  400. package/src/plugins/impl/MultiselectPlugin.tsx +19 -142
  401. package/src/plugins/impl/SearchableSelect.tsx +16 -97
  402. package/src/plugins/impl/SliderPlugin.tsx +132 -18
  403. package/src/plugins/impl/__tests__/DropdownPlugin.test.tsx +5 -2
  404. package/src/plugins/impl/__tests__/MultiSelectPlugin.test.ts +1 -1
  405. package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +278 -8
  406. package/src/utils/__tests__/numbers.test.ts +20 -0
  407. package/src/utils/errors.ts +9 -0
  408. package/src/utils/lazy.ts +6 -1
  409. package/src/utils/numbers.ts +27 -0
  410. package/src/utils/schedule-task.ts +71 -0
  411. package/dist/assets/JsonOutput-CmKxNtru.js +0 -53
  412. package/dist/assets/LazyAnyLanguageCodeMirror-DXGWNDPu.js +0 -2
  413. package/dist/assets/RunButton-NDsrcmxR.js +0 -1
  414. package/dist/assets/__vite-browser-external-DuZehUbK.js +0 -1
  415. package/dist/assets/__vite-browser-external-Jpm67kL1.js +0 -1
  416. package/dist/assets/add-connection-dialog-DXpcs9M2.js +0 -167
  417. package/dist/assets/apl-EAxnZS_5.js +0 -1
  418. package/dist/assets/asciiarmor-zxnaShQE.js +0 -1
  419. package/dist/assets/asn1-7i28Os5R.js +0 -1
  420. package/dist/assets/brainfuck-BZegPsXK.js +0 -1
  421. package/dist/assets/cell-editor-B1wwg8iY.js +0 -20
  422. package/dist/assets/cells-jmgGt1lS.css +0 -2
  423. package/dist/assets/channel-6XBTrC3Q.js +0 -1
  424. package/dist/assets/chunk-55IACEB6-Cr4aqhf3.js +0 -1
  425. package/dist/assets/classDiagram-2ON5EDUG-DlIMDu6i.js +0 -1
  426. package/dist/assets/classDiagram-v2-WZHVMYZB-CcIhhkQu.js +0 -1
  427. package/dist/assets/clojure-VUVi7fTV.js +0 -1
  428. package/dist/assets/cmake-DZJIDbjY.js +0 -1
  429. package/dist/assets/cobol-klCRwlLm.js +0 -1
  430. package/dist/assets/coffeescript-C9foD9ub.js +0 -1
  431. package/dist/assets/column-preview-D6S-invN.js +0 -1
  432. package/dist/assets/commonlisp-tHxoA35J.js +0 -1
  433. package/dist/assets/components-BdJ56O4q.js +0 -1
  434. package/dist/assets/components-DLLO0jH-.js +0 -1
  435. package/dist/assets/crystal-CQ11GdrX.js +0 -1
  436. package/dist/assets/cypher-CJ0Uzw29.js +0 -1
  437. package/dist/assets/d-DP0SUIt1.js +0 -1
  438. package/dist/assets/dependency-graph-panel-B5HsauWV.js +0 -5
  439. package/dist/assets/diff-CNs8MB38.js +0 -1
  440. package/dist/assets/dist-B1U1kGCR.js +0 -1
  441. package/dist/assets/dist-B7U5jPfs.js +0 -1
  442. package/dist/assets/dist-BZX17NA8.js +0 -1
  443. package/dist/assets/dist-BtL81uwZ.js +0 -1
  444. package/dist/assets/dist-Bww7hlVc.js +0 -1
  445. package/dist/assets/dist-CAIBlJtJ.js +0 -1
  446. package/dist/assets/dist-CHcznzB-.js +0 -2
  447. package/dist/assets/dist-CPF3W2Y-.js +0 -1
  448. package/dist/assets/dist-CPczQFlJ.js +0 -3
  449. package/dist/assets/dist-CUapWJe4.js +0 -1
  450. package/dist/assets/dist-CWeWT34c.js +0 -1
  451. package/dist/assets/dist-CXBpwk_w.js +0 -7
  452. package/dist/assets/dist-ChF5Ln9c.js +0 -13
  453. package/dist/assets/dist-CuCuJBdf.js +0 -1
  454. package/dist/assets/dist-DH60fwgs.js +0 -1
  455. package/dist/assets/dist-DZPpMvcR.js +0 -1
  456. package/dist/assets/dist-DkcQg5xD.js +0 -1
  457. package/dist/assets/dist-DkzFxGAX.js +0 -1
  458. package/dist/assets/dist-DmBXXm0k.js +0 -1
  459. package/dist/assets/dist-W1iHBJeE.js +0 -1
  460. package/dist/assets/dist-_fyDen1v.js +0 -1
  461. package/dist/assets/dist-cgiAP5sW.js +0 -1
  462. package/dist/assets/dist-vkd1160q.js +0 -1
  463. package/dist/assets/documentation-panel-2PnKMw05.js +0 -1
  464. package/dist/assets/download-32D6oAIq.js +0 -9
  465. package/dist/assets/dtd-BsD0uJw0.js +0 -1
  466. package/dist/assets/dylan-DbrGP1IP.js +0 -1
  467. package/dist/assets/ecl-C0rZlhHw.js +0 -1
  468. package/dist/assets/edit-page-CgIpF5rg.js +0 -9
  469. package/dist/assets/eiffel-2ZX-OpSJ.js +0 -1
  470. package/dist/assets/ellipsis-vertical-CkwWkOQL.js +0 -1
  471. package/dist/assets/elm-CbOSKldD.js +0 -1
  472. package/dist/assets/erlang-BWiOgHIX.js +0 -1
  473. package/dist/assets/errors-vr57w7Ul.js +0 -1
  474. package/dist/assets/esm-CqWdmSnV.js +0 -1
  475. package/dist/assets/factor-CUwFIMOP.js +0 -1
  476. package/dist/assets/file-explorer-panel-Ba6mLeNn.js +0 -26
  477. package/dist/assets/focus-8kPvcQcq.js +0 -1
  478. package/dist/assets/formatting-CSG9kqNb.js +0 -1
  479. package/dist/assets/forth-BEQA4QQL.js +0 -1
  480. package/dist/assets/fortran-DoPpOZgG.js +0 -1
  481. package/dist/assets/gas-BYovsvOE.js +0 -1
  482. package/dist/assets/gherkin-CFiRc1Pf.js +0 -1
  483. package/dist/assets/groovy-DJNH7evt.js +0 -1
  484. package/dist/assets/haskell-duZvcePm.js +0 -1
  485. package/dist/assets/haxe-B2l95qvB.js +0 -1
  486. package/dist/assets/home-page-Dt8XHnbh.js +0 -4
  487. package/dist/assets/idl-CZ_xwU8I.js +0 -1
  488. package/dist/assets/index-BIw7BKLH.css +0 -2
  489. package/dist/assets/index-viGrdCLZ.js +0 -38
  490. package/dist/assets/infoDiagram-HS3SLOUP-CaaUieFa.js +0 -2
  491. package/dist/assets/input-C3Hrdlqq.js +0 -1
  492. package/dist/assets/javascript-CF5KGSAj.js +0 -1
  493. package/dist/assets/julia-BQlq5iZn.js +0 -1
  494. package/dist/assets/katex-CzQ1KdW3.js +0 -1
  495. package/dist/assets/kiosk-mode-x9vOLIH9.js +0 -1
  496. package/dist/assets/layout-C5tdHJmx.js +0 -9
  497. package/dist/assets/livescript-sRMenfqS.js +0 -1
  498. package/dist/assets/lua-a56ITumN.js +0 -1
  499. package/dist/assets/maps-n3GaPJwv.js +0 -1
  500. package/dist/assets/markdown-renderer-CbOSsdqB.js +0 -5
  501. package/dist/assets/mathematica-B3m4jXeH.js +0 -1
  502. package/dist/assets/mbox-BtL7aO2I.js +0 -1
  503. package/dist/assets/mermaid-4DMBBIKO-CekzuCTz.js +0 -1
  504. package/dist/assets/mirc-S27kuZ31.js +0 -1
  505. package/dist/assets/mllike-B3kx3KeF.js +0 -1
  506. package/dist/assets/modelica-DgbW4dSi.js +0 -1
  507. package/dist/assets/mscgen-BIa_4d-0.js +0 -1
  508. package/dist/assets/multi-map-CUuNtzHt.js +0 -1
  509. package/dist/assets/mumps-4fnELyHs.js +0 -1
  510. package/dist/assets/nsis-BfGyMssE.js +0 -1
  511. package/dist/assets/ntriples-DeY1n_tC.js +0 -1
  512. package/dist/assets/numbers-C3BAdHZE.js +0 -1
  513. package/dist/assets/octave-7Qn21jzx.js +0 -1
  514. package/dist/assets/oz-CiPFl3Ni.js +0 -1
  515. package/dist/assets/pascal-BH9yQLzw.js +0 -1
  516. package/dist/assets/perl-DfMCx2i2.js +0 -1
  517. package/dist/assets/pig-D9CNebQN.js +0 -1
  518. package/dist/assets/play-C7DcCsoO.js +0 -1
  519. package/dist/assets/powershell-Dss0bU9F.js +0 -1
  520. package/dist/assets/process-output-BN6KcCNl.js +0 -1
  521. package/dist/assets/properties-CHADYQUL.js +0 -1
  522. package/dist/assets/protobuf-DFN-V4SD.js +0 -1
  523. package/dist/assets/pug-DOI9FnEk.js +0 -1
  524. package/dist/assets/puppet-BV0HAkDS.js +0 -1
  525. package/dist/assets/python-C83Db0-4.js +0 -1
  526. package/dist/assets/q-D84S4YaJ.js +0 -1
  527. package/dist/assets/r-jmqrRzXv.js +0 -1
  528. package/dist/assets/radio-group-Hu4Rygaq.js +0 -1
  529. package/dist/assets/readonly-python-code-D5_r1Ld_.js +0 -1
  530. package/dist/assets/reveal-component-Da4UMw9R.js +0 -1069
  531. package/dist/assets/rpm-DUjG0xRk.js +0 -1
  532. package/dist/assets/ruby-SP4FIzir.js +0 -1
  533. package/dist/assets/sas-BxaPz2EX.js +0 -1
  534. package/dist/assets/save-worker-D2iQi-UK.js +0 -77
  535. package/dist/assets/scheme-HBseLApj.js +0 -1
  536. package/dist/assets/scratchpad-panel-gze3khJ_.js +0 -1
  537. package/dist/assets/session-panel-DU5bofPV.js +0 -1
  538. package/dist/assets/shell-w8ATY_lQ.js +0 -1
  539. package/dist/assets/sieve-Dyq0LGDO.js +0 -1
  540. package/dist/assets/smalltalk-D7mAtumc.js +0 -1
  541. package/dist/assets/sparql-DAeEYE_u.js +0 -1
  542. package/dist/assets/state-DTislnZA.js +0 -1
  543. package/dist/assets/stateDiagram-v2-4FDKWEC3-DX9rpmwh.js +0 -1
  544. package/dist/assets/stylus-Cw3Ugan7.js +0 -1
  545. package/dist/assets/swift-CPsNOBsX.js +0 -1
  546. package/dist/assets/tcl-BfWyQdZa.js +0 -1
  547. package/dist/assets/textile-BKgaSzSN.js +0 -1
  548. package/dist/assets/toml-BSOdv04W.js +0 -1
  549. package/dist/assets/tree-actions-BM_EJr3E.js +0 -1
  550. package/dist/assets/troff-C0hD9kig.js +0 -1
  551. package/dist/assets/ttcn-DEqPxhoh.js +0 -1
  552. package/dist/assets/ttcn-cfg-B-7jSlUe.js +0 -1
  553. package/dist/assets/turtle-BTtgFsu8.js +0 -1
  554. package/dist/assets/useBoolean-Bp18o6XG.js +0 -1
  555. package/dist/assets/useCellActionButton-4SU7bBwp.js +0 -1
  556. package/dist/assets/useDeleteCell-BFTb3_aM.js +0 -1
  557. package/dist/assets/useDependencyPanelTab-BdH0hUXV.js +0 -1
  558. package/dist/assets/useNotebookActions-BJSAXPbi.js +0 -1
  559. package/dist/assets/useRunCells-CewdwjHg.js +0 -1
  560. package/dist/assets/useSplitCell-CzWUkJwg.js +0 -1
  561. package/dist/assets/vb-DfRPk_ji.js +0 -1
  562. package/dist/assets/vbscript-C8D4uv5N.js +0 -1
  563. package/dist/assets/velocity-DxKr2FFC.js +0 -1
  564. package/dist/assets/verilog-CxVhamiH.js +0 -1
  565. package/dist/assets/vhdl-B-IpBNOA.js +0 -1
  566. package/dist/assets/webidl-CBjKmBwO.js +0 -1
  567. package/dist/assets/xquery-ABGCbLv0.js +0 -1
  568. package/dist/assets/yacas-Ckyxh7oh.js +0 -1
  569. package/dist/assets/z80-Dr5sQweg.js +0 -1
  570. package/src/plugins/impl/multiselectFilterFn.tsx +0 -22
  571. /package/dist/assets/{ImageComparisonComponent-BIetTBDq.js → ImageComparisonComponent-_eB8PDFu.js} +0 -0
  572. /package/dist/assets/{Inputs-C6ftxLAJ.js → Inputs-CdyQ7nLC.js} +0 -0
  573. /package/dist/assets/{Plot-Ba3WGWNu.js → Plot-BEhgxy0k.js} +0 -0
  574. /package/dist/assets/{apl-Byte72fT.js → apl-CpVTW0fY.js} +0 -0
  575. /package/dist/assets/{array-CC7vZNGO.js → array-BKCdRGCR.js} +0 -0
  576. /package/dist/assets/{asciiarmor-BU-VnG1Y.js → asciiarmor-qDK46YPd.js} +0 -0
  577. /package/dist/assets/{asn1-hTvH3S4T.js → asn1-s2ZJql-T.js} +0 -0
  578. /package/dist/assets/{asterisk-DIMri3P4.js → asterisk-BCtKIQ_I.js} +0 -0
  579. /package/dist/assets/{azure-B42ls0Ui.js → azure-DHLkI9dd.js} +0 -0
  580. /package/dist/assets/{brainfuck-C-q1Rv8J.js → brainfuck-5fD7ZBSv.js} +0 -0
  581. /package/dist/assets/{card--6HRj4T9.js → card-C9wGDUuq.js} +0 -0
  582. /package/dist/assets/{chunk-4F5CHEZ2-eEwFz7fp.js → chunk-4F5CHEZ2-DyHrF3GO.js} +0 -0
  583. /package/dist/assets/{chunk-B2363JML-COExSe0d.js → chunk-B2363JML-DutzPsZq.js} +0 -0
  584. /package/dist/assets/{chunk-DR5Q36YT-OB6tC_dd.js → chunk-DR5Q36YT-CbaaAWZ2.js} +0 -0
  585. /package/dist/assets/{chunk-FRFDVMJY-CO3-6rb4.js → chunk-FRFDVMJY-2_jGMKZ2.js} +0 -0
  586. /package/dist/assets/{chunk-PL6DKKU2-B9mDp5iV.js → chunk-PL6DKKU2-Ce2JFCUf.js} +0 -0
  587. /package/dist/assets/{chunk-SJTYNZTY-Dh_h90Yu.js → chunk-SJTYNZTY-PWGFKpLd.js} +0 -0
  588. /package/dist/assets/{chunk-TQ3KTPDO-CFybjK0M.js → chunk-TQ3KTPDO-CNkbM7LT.js} +0 -0
  589. /package/dist/assets/{chunk-UMXZTB3W-C3w83KpJ.js → chunk-UMXZTB3W-emEajCOH.js} +0 -0
  590. /package/dist/assets/{clear-button-Cfe8K4j_.js → clear-button-UYLFbizO.js} +0 -0
  591. /package/dist/assets/{click-outside-container-BNVqwewc.js → click-outside-container-B4pJ8dzi.js} +0 -0
  592. /package/dist/assets/{clike-BE-9Ct_H.js → clike-D58k-9vu.js} +0 -0
  593. /package/dist/assets/{clojure-Co-TLeNo.js → clojure-Dkfjc-Fr.js} +0 -0
  594. /package/dist/assets/{cmake-B-Nm_Opd.js → cmake-ffkxaUPf.js} +0 -0
  595. /package/dist/assets/{cobol-BGdihAZT.js → cobol-CKARYRbQ.js} +0 -0
  596. /package/dist/assets/{coffeescript-BUZXkMUO.js → coffeescript-Dz_r13Pd.js} +0 -0
  597. /package/dist/assets/{colors-BG8Z91CW.js → colors-CUF0x3zZ.js} +0 -0
  598. /package/dist/assets/{common-keywords-15xBKau4.js → common-keywords-Dl8aWedN.js} +0 -0
  599. /package/dist/assets/{commonlisp-CFkPbxvX.js → commonlisp-EavL1_-N.js} +0 -0
  600. /package/dist/assets/{crystal-CqfqDl34.js → crystal-BQ8grXRY.js} +0 -0
  601. /package/dist/assets/{css-DPEtZWJi.js → css-Bmqfl4iE.js} +0 -0
  602. /package/dist/assets/{cypher-B0t8FJvU.js → cypher-BKXIqXpT.js} +0 -0
  603. /package/dist/assets/{cytoscape.esm-DT8iy6p1.js → cytoscape.esm-Dr1GhgW1.js} +0 -0
  604. /package/dist/assets/{d-DRa_XRSB.js → d-DRfFJaS4.js} +0 -0
  605. /package/dist/assets/{diff-GLneonpD.js → diff-BWk1g4qN.js} +0 -0
  606. /package/dist/assets/{dist-BQWswd1A.js → dist-3Zzc89mE.js} +0 -0
  607. /package/dist/assets/{dist-BXRWfNwi.js → dist-D_deoNzY.js} +0 -0
  608. /package/dist/assets/{dtd-uVrZNVF0.js → dtd-C1gvGnbI.js} +0 -0
  609. /package/dist/assets/{duckdb-keywords-CYQ5DEZJ.js → duckdb-keywords-C_J2q1mp.js} +0 -0
  610. /package/dist/assets/{dylan-DkNeA4FZ.js → dylan-D26gjyBo.js} +0 -0
  611. /package/dist/assets/{ebnf-XMH6KY7E.js → ebnf-VrI3aTER.js} +0 -0
  612. /package/dist/assets/{ecl-CldUgvc9.js → ecl-D_pghsRW.js} +0 -0
  613. /package/dist/assets/{eiffel-CoMDRbRL.js → eiffel-CQeRT5l7.js} +0 -0
  614. /package/dist/assets/{elm-Cb5XC6ev.js → elm-BMJejWwJ.js} +0 -0
  615. /package/dist/assets/{empty-state-Cjt8SfMh.js → empty-state-vCWg-_A9.js} +0 -0
  616. /package/dist/assets/{erlang-8H3fTZ3L.js → erlang-DTDt7sE1.js} +0 -0
  617. /package/dist/assets/{esm-1wf4HygE.js → esm-DAVeZ8YU.js} +0 -0
  618. /package/dist/assets/{fcl-DyFJAgkq.js → fcl-B9roOCQ-.js} +0 -0
  619. /package/dist/assets/{forth-B8kC4npz.js → forth-DLug1Uos.js} +0 -0
  620. /package/dist/assets/{fortran-CNWGEL3c.js → fortran-CfPd9x83.js} +0 -0
  621. /package/dist/assets/{gas-DnZQNTHK.js → gas-C1vwqe1-.js} +0 -0
  622. /package/dist/assets/{gherkin-JfGcGvci.js → gherkin-DxFhlJYL.js} +0 -0
  623. /package/dist/assets/{groovy-D0FWiAVm.js → groovy-AqjvKzmp.js} +0 -0
  624. /package/dist/assets/{haskell-wUB3uX-G.js → haskell-B9BMJXS_.js} +0 -0
  625. /package/dist/assets/{haxe-g0JY6eL-.js → haxe-CFd4aFZH.js} +0 -0
  626. /package/dist/assets/{http-ySzAzH5W.js → http-BM6n_euc.js} +0 -0
  627. /package/dist/assets/{idl-CV2cLkPc.js → idl-DKlFwAHI.js} +0 -0
  628. /package/dist/assets/{init-DsZRk2YA.js → init-DZpk0tdu.js} +0 -0
  629. /package/dist/assets/{javascript-CT6okXEZ.js → javascript-BMuus-3E.js} +0 -0
  630. /package/dist/assets/{julia-CKC48ufo.js → julia-DGv2rboF.js} +0 -0
  631. /package/dist/assets/{katex-BE4UDS50.js → katex-DL3QMY8n.js} +0 -0
  632. /package/dist/assets/{links-1rtF1-eC.js → links-DoPgJNku.js} +0 -0
  633. /package/dist/assets/{livescript-C43pZ6Ue.js → livescript-51GCvdcX.js} +0 -0
  634. /package/dist/assets/{loro_wasm_bg-CXnd80ne.js → loro_wasm_bg-DYsTic7p.js} +0 -0
  635. /package/dist/assets/{lua-Cs2mb10K.js → lua-BwsAaftY.js} +0 -0
  636. /package/dist/assets/{marimo-icons-CiwvnnsT.js → marimo-icons-CLbC-oB3.js} +0 -0
  637. /package/dist/assets/{math-B-ZqhQTL.js → math-PgJy15ir.js} +0 -0
  638. /package/dist/assets/{mathematica-B5FMK3ma.js → mathematica-Du4amQ2X.js} +0 -0
  639. /package/dist/assets/{mbox-36Zrn5Bd.js → mbox-DKL-l6mb.js} +0 -0
  640. /package/dist/assets/{micromark-factory-space-BygYYKhs.js → micromark-factory-space-bqhKsQDn.js} +0 -0
  641. /package/dist/assets/{mirc-BKTAABSX.js → mirc-CvS1f8zr.js} +0 -0
  642. /package/dist/assets/{mllike-DbuClUqc.js → mllike-VhUq11ot.js} +0 -0
  643. /package/dist/assets/{modelica-CKRvBm7N.js → modelica-CjlHUZat.js} +0 -0
  644. /package/dist/assets/{mscgen-B4BRgnCi.js → mscgen-26STiUsc.js} +0 -0
  645. /package/dist/assets/{multi-icon-NVkxesVZ.js → multi-icon-BvuxcR2m.js} +0 -0
  646. /package/dist/assets/{mumps-BFiMcyFV.js → mumps-4o8IRFVU.js} +0 -0
  647. /package/dist/assets/{nginx-Cz_XvoTm.js → nginx-Tk1rzBXg.js} +0 -0
  648. /package/dist/assets/{node-sql-parser-BtkrI4pN.js → node-sql-parser-BRpb-iwO.js} +0 -0
  649. /package/dist/assets/{ntriples-QQAkJYAR.js → ntriples-D0zMsGJ-.js} +0 -0
  650. /package/dist/assets/{octave-DsTphmGZ.js → octave-CpJ40RVG.js} +0 -0
  651. /package/dist/assets/{oz-CD9rr5Iz.js → oz-W9l5CbXg.js} +0 -0
  652. /package/dist/assets/{panel-context-BJbBGfoL.js → panel-context-D7Ggu8Nw.js} +0 -0
  653. /package/dist/assets/{pascal-DdHEIlJE.js → pascal-BZtdYBm4.js} +0 -0
  654. /package/dist/assets/{path-DvTahePH.js → path-dqkZlAhR.js} +0 -0
  655. /package/dist/assets/{pathUtils-CJjndqMI.js → pathUtils-DPJ-EgtH.js} +0 -0
  656. /package/dist/assets/{perl-DHPJBQ1u.js → perl-Q79ziUtd.js} +0 -0
  657. /package/dist/assets/{pig-Yz7ERgca.js → pig-Dn9ueYxG.js} +0 -0
  658. /package/dist/assets/{powershell-CHPZ_bsU.js → powershell-DfXPJ56g.js} +0 -0
  659. /package/dist/assets/{properties-CI9nc7K4.js → properties-DRrw--9g.js} +0 -0
  660. /package/dist/assets/{protobuf-BYSIv2pY.js → protobuf-5jBh6Y7Q.js} +0 -0
  661. /package/dist/assets/{puppet-CEpLafZX.js → puppet-Bql5dDjm.js} +0 -0
  662. /package/dist/assets/{python-BndVuwG1.js → python-C7HNB5A8.js} +0 -0
  663. /package/dist/assets/{q-L_cetpiW.js → q-CW9lnZXb.js} +0 -0
  664. /package/dist/assets/{r-Dd37AKWk.js → r-DmuxMz9j.js} +0 -0
  665. /package/dist/assets/{request-registry--h6PWG50.js → request-registry-BmtPM40k.js} +0 -0
  666. /package/dist/assets/{requests-DqJEWJ-Q.js → requests-QKoDeQkn.js} +0 -0
  667. /package/dist/assets/{rpm-CHrvhtlN.js → rpm-2BQZRXYJ.js} +0 -0
  668. /package/dist/assets/{ruby-BPOowfX6.js → ruby-B-FyRKB2.js} +0 -0
  669. /package/dist/assets/{runs-BD0G-C2A.js → runs-DSnhrBgK.js} +0 -0
  670. /package/dist/assets/{sas-BsEFSvEP.js → sas-Q-94el51.js} +0 -0
  671. /package/dist/assets/{scheme-B42INBu7.js → scheme-By445Ne_.js} +0 -0
  672. /package/dist/assets/{semaphore-FlZezxaf.js → semaphore-qUGKVeAE.js} +0 -0
  673. /package/dist/assets/{shell-BPea12OI.js → shell-CezKrT5T.js} +0 -0
  674. /package/dist/assets/{sieve-C-yPcLw5.js → sieve-MRWdUbX3.js} +0 -0
  675. /package/dist/assets/{simple-mode-CFlvn0Mm.js → simple-mode-BtxX-F6Z.js} +0 -0
  676. /package/dist/assets/{smalltalk-e7OO1ATb.js → smalltalk-C0KZrhPl.js} +0 -0
  677. /package/dist/assets/{solr-BAO4N63o.js → solr-DaMZCY5b.js} +0 -0
  678. /package/dist/assets/{sparql-B4I2Ledx.js → sparql-CIMoBhOL.js} +0 -0
  679. /package/dist/assets/{spreadsheet-DWqd5foV.js → spreadsheet-CAZFfDgv.js} +0 -0
  680. /package/dist/assets/{sql-RBdzBYsM.js → sql-bIHkMPYp.js} +0 -0
  681. /package/dist/assets/{src-BnrQkOKh.js → src-DvosOx8X.js} +0 -0
  682. /package/dist/assets/{state-BGDrw26V.js → state-B2X5_9Jc.js} +0 -0
  683. /package/dist/assets/{stylus-CBRbZwhN.js → stylus-BxV1gbJN.js} +0 -0
  684. /package/dist/assets/{swift-B2hnU7ha.js → swift-C7ozIpB2.js} +0 -0
  685. /package/dist/assets/{swiper-component-YGJlBaCp.js → swiper-component-BA40Nidc.js} +0 -0
  686. /package/dist/assets/{tcl-BtyamtaZ.js → tcl-D9BrnXdg.js} +0 -0
  687. /package/dist/assets/{textile-M9mhyNE9.js → textile-8cDJUs1C.js} +0 -0
  688. /package/dist/assets/{tiddlywiki-BsHUDwie.js → tiddlywiki-C-jC8X9Z.js} +0 -0
  689. /package/dist/assets/{tiki-ZqBe4Kjv.js → tiki-CJPdyY5i.js} +0 -0
  690. /package/dist/assets/{timer-B6DpdVnC.js → timer-ffBO1paY.js} +0 -0
  691. /package/dist/assets/{toml-YxyxhyRy.js → toml-Dtc3-sql.js} +0 -0
  692. /package/dist/assets/{treemap-DeGcO9km.js → treemap-8bMgVaTX.js} +0 -0
  693. /package/dist/assets/{troff-C7xpi05X.js → troff-CxUT34rC.js} +0 -0
  694. /package/dist/assets/{ttcn-D3YytrJU.js → ttcn-BiVwbsr5.js} +0 -0
  695. /package/dist/assets/{ttcn-cfg-DlZ5vA9E.js → ttcn-cfg-BLBfLtVM.js} +0 -0
  696. /package/dist/assets/{turtle-BSHvAsUe.js → turtle-DqTQI7WU.js} +0 -0
  697. /package/dist/assets/{types-a-yURniQ.js → types-Cpe-qFT-.js} +0 -0
  698. /package/dist/assets/{useDeepCompareMemoize-zUHU--0D.js → useDeepCompareMemoize-CVmg-GkP.js} +0 -0
  699. /package/dist/assets/{useInterval-2YvvhIZI.js → useInterval-COQ3SSh0.js} +0 -0
  700. /package/dist/assets/{vb-DdkIDLlO.js → vb-D-mN5USJ.js} +0 -0
  701. /package/dist/assets/{vbscript-DhYGmk_p.js → vbscript-BHlqX42l.js} +0 -0
  702. /package/dist/assets/{velocity-DAXJNEw4.js → velocity-BX6395is.js} +0 -0
  703. /package/dist/assets/{verilog-jmuT_L3b.js → verilog-CixbCKyb.js} +0 -0
  704. /package/dist/assets/{vhdl-DcVQ97RU.js → vhdl-CofOR-02.js} +0 -0
  705. /package/dist/assets/{web-vitals-xkV-JBVF.js → web-vitals-CpL_P378.js} +0 -0
  706. /package/dist/assets/{webidl-B-YB_4OQ.js → webidl-DAqkXtNt.js} +0 -0
  707. /package/dist/assets/{ws-BnE9sl8z.js → ws-K6nioC-Z.js} +0 -0
  708. /package/dist/assets/{xquery-DOmY3Oe8.js → xquery-wPbfv0-o.js} +0 -0
  709. /package/dist/assets/{yacas-pL3kJRXV.js → yacas-B5Zk1avC.js} +0 -0
  710. /package/dist/assets/{z80-VwVuI_MT.js → z80-C0HuDTqd.js} +0 -0
  711. /package/src/components/{data-table → ui}/value-chips.tsx +0 -0
@@ -43,10 +43,12 @@ import {
43
43
  useStorage,
44
44
  useStorageActions,
45
45
  useStorageEntries,
46
+ useStoragePageFetcher,
46
47
  } from "@/core/storage/state";
47
48
  import type {
48
49
  StorageEntry,
49
50
  StorageNamespace,
51
+ StoragePageMetadata,
50
52
  StoragePathKey,
51
53
  } from "@/core/storage/types";
52
54
  import { storagePathKey } from "@/core/storage/types";
@@ -94,28 +96,52 @@ function displayName(path: string): string {
94
96
  return parts[parts.length - 1] || trimmed;
95
97
  }
96
98
 
99
+ function directoryPrefix(path: string): string {
100
+ return path.endsWith("/") ? path : `${path}/`;
101
+ }
102
+
103
+ /**
104
+ * Stable, unique identity for an entry row. Prefer the
105
+ * backend's stable id when present and fall back to the list index
106
+ */
107
+ export function storageEntryKey(entry: StorageEntry, index: number): string {
108
+ const id = entry.metadata?.id;
109
+ if (typeof id === "string" && id.length > 0) {
110
+ return id;
111
+ }
112
+ return `${entry.path}::${index}`;
113
+ }
114
+
115
+ interface SearchContext {
116
+ namespace: string;
117
+ searchValue: string;
118
+ entriesByPath: ReadonlyMap<StoragePathKey, StorageEntry[]>;
119
+ }
120
+
97
121
  /**
98
122
  * Recursively check whether an entry (or any of its loaded descendants)
99
123
  * matches the search query.
100
124
  */
101
125
  function entryMatchesSearch(
102
126
  entry: StorageEntry,
103
- namespace: string,
104
- searchValue: string,
105
- entriesByPath: ReadonlyMap<StoragePathKey, StorageEntry[]>,
127
+ { namespace, searchValue, entriesByPath }: SearchContext,
106
128
  ): boolean {
107
- const query = searchValue.toLowerCase();
129
+ const query = searchValue.trim().toLowerCase();
130
+ const path = entry.path.toLowerCase();
131
+ const name = displayName(entry.path).toLowerCase();
108
132
 
109
- if (displayName(entry.path).toLowerCase().includes(query)) {
133
+ if (name.includes(query) || path.includes(query)) {
110
134
  return true;
111
135
  }
112
136
 
113
137
  // For directories, check loaded children recursively
114
138
  if (entry.kind === "directory") {
115
- const children = entriesByPath.get(storagePathKey(namespace, entry.path));
139
+ const children = entriesByPath.get(
140
+ storagePathKey(namespace, directoryPrefix(entry.path)),
141
+ );
116
142
  if (children) {
117
143
  return children.some((child) =>
118
- entryMatchesSearch(child, namespace, searchValue, entriesByPath),
144
+ entryMatchesSearch(child, { namespace, searchValue, entriesByPath }),
119
145
  );
120
146
  }
121
147
  }
@@ -127,20 +153,142 @@ function entryMatchesSearch(
127
153
  * Filter entries to those matching the search (or having loaded descendants
128
154
  * that match). Returns all entries when there is no active search.
129
155
  */
130
- function filterEntries(
156
+ export function filterEntries(
131
157
  entries: StorageEntry[],
132
- namespace: string,
133
- searchValue: string,
134
- entriesByPath: ReadonlyMap<StoragePathKey, StorageEntry[]>,
158
+ context: SearchContext,
135
159
  ): StorageEntry[] {
136
- if (!searchValue.trim()) {
160
+ if (!context.searchValue.trim()) {
137
161
  return entries;
138
162
  }
139
- return entries.filter((entry) =>
140
- entryMatchesSearch(entry, namespace, searchValue, entriesByPath),
163
+ return entries.filter((entry) => entryMatchesSearch(entry, context));
164
+ }
165
+
166
+ const MAX_REMOTE_SEARCH_PAGES = 5;
167
+
168
+ type RemoteSearchState =
169
+ | { query: string; status: "idle" }
170
+ | { query: string; status: "searching" }
171
+ | { query: string; status: "found" }
172
+ | { query: string; status: "exhausted" }
173
+ | { query: string; status: "capped" }
174
+ | { query: string; status: "error"; error: Error };
175
+
176
+ type RemoteSearchByNamespace = Record<string, RemoteSearchState>;
177
+
178
+ function idleRemoteSearch(query: string): RemoteSearchState {
179
+ return { query, status: "idle" };
180
+ }
181
+
182
+ function canRetryRemoteSearch(remoteSearch: RemoteSearchState): boolean {
183
+ return (
184
+ remoteSearch.status === "idle" ||
185
+ remoteSearch.status === "error" ||
186
+ remoteSearch.status === "capped"
187
+ );
188
+ }
189
+
190
+ /**
191
+ * Whether the backend may still have an unfetched page for a prefix: either we
192
+ * have never listed it, or its last listing returned a next-page token.
193
+ */
194
+ function hasUnfetchedPrefixPage(
195
+ searchKey: StoragePathKey,
196
+ entriesByPath: ReadonlyMap<StoragePathKey, StorageEntry[]>,
197
+ pageMetadataByPath: ReadonlyMap<StoragePathKey, StoragePageMetadata>,
198
+ ): boolean {
199
+ return (
200
+ entriesByPath.get(searchKey) === undefined ||
201
+ pageMetadataByPath.get(searchKey)?.nextPageToken != null
202
+ );
203
+ }
204
+
205
+ function canSearchMoreRemoteEntries({
206
+ hasSearch,
207
+ hasLoadedMatches,
208
+ isPending,
209
+ remoteSearch,
210
+ searchKey,
211
+ entriesByPath,
212
+ pageMetadataByPath,
213
+ }: {
214
+ hasSearch: boolean;
215
+ hasLoadedMatches: boolean;
216
+ isPending: boolean;
217
+ remoteSearch: RemoteSearchState;
218
+ searchKey: StoragePathKey;
219
+ entriesByPath: ReadonlyMap<StoragePathKey, StorageEntry[]>;
220
+ pageMetadataByPath: ReadonlyMap<StoragePathKey, StoragePageMetadata>;
221
+ }): boolean {
222
+ if (!hasSearch || hasLoadedMatches || isPending) {
223
+ return false;
224
+ }
225
+ if (!canRetryRemoteSearch(remoteSearch)) {
226
+ return false;
227
+ }
228
+
229
+ return hasUnfetchedPrefixPage(searchKey, entriesByPath, pageMetadataByPath);
230
+ }
231
+
232
+ /**
233
+ * Returns the directory prefix to query the backend with for a given search.
234
+ *
235
+ * Object stores like obstore evaluate prefixes on a path-segment basis
236
+ * (`folder/x` would only match `folder/x/...`, never `folder/xsomething`), so
237
+ * for substring searches we list the parent directory and filter on the
238
+ * client. Returns `""` when the search has no directory component.
239
+ */
240
+ export function remoteSearchPrefix(searchValue: string): string {
241
+ const trimmed = searchValue.trim();
242
+ const lastSlash = trimmed.lastIndexOf("/");
243
+ return lastSlash === -1 ? "" : trimmed.slice(0, lastSlash + 1);
244
+ }
245
+
246
+ /**
247
+ * Shallow check (no recursion into loaded children) used inside the
248
+ * remote-search pagination loop to decide whether a fetched page has
249
+ * any candidates worth surfacing to the user.
250
+ */
251
+ function entryMatchesQueryShallow(
252
+ entry: StorageEntry,
253
+ searchValue: string,
254
+ ): boolean {
255
+ const query = searchValue.trim().toLowerCase();
256
+ if (!query) {
257
+ return true;
258
+ }
259
+ return (
260
+ entry.path.toLowerCase().includes(query) ||
261
+ displayName(entry.path).toLowerCase().includes(query)
141
262
  );
142
263
  }
143
264
 
265
+ const LoadMoreStorageEntries: React.FC<{
266
+ depth: number;
267
+ isLoading: boolean;
268
+ error?: Error;
269
+ onLoadMore: () => void;
270
+ }> = ({ depth, isLoading, error, onLoadMore }) => {
271
+ return (
272
+ <div className="py-px text-xs" style={indentStyle(depth)}>
273
+ <Button
274
+ variant="text"
275
+ size="xs"
276
+ className="h-6 px-0 hover:text-blue-600"
277
+ disabled={isLoading}
278
+ onClick={onLoadMore}
279
+ >
280
+ {isLoading && <LoaderCircle className="h-3 w-3 mr-1 animate-spin" />}
281
+ {isLoading ? "Loading..." : "Load more"}
282
+ </Button>
283
+ {error && (
284
+ <span className="ml-2 text-destructive">
285
+ Failed to load: {error.message}
286
+ </span>
287
+ )}
288
+ </div>
289
+ );
290
+ };
291
+
144
292
  /**
145
293
  * Lazily loaded children of a directory entry.
146
294
  * Caches fetched entries in the Jotai store so re-expanding doesn't re-fetch.
@@ -171,6 +319,10 @@ const StorageEntryChildren: React.FC<{
171
319
  entries: children,
172
320
  isPending,
173
321
  error,
322
+ hasMore,
323
+ loadMore,
324
+ isLoadingMore,
325
+ loadMoreError,
174
326
  } = useStorageEntries(namespace, prefix);
175
327
 
176
328
  if (isPending) {
@@ -204,35 +356,47 @@ const StorageEntryChildren: React.FC<{
204
356
  );
205
357
  }
206
358
 
207
- const filtered = filterEntries(
208
- children,
359
+ const filtered = filterEntries(children, {
209
360
  namespace,
210
361
  searchValue,
211
362
  entriesByPath,
212
- );
363
+ });
213
364
 
214
365
  return (
215
366
  <>
216
- {filtered.map((child) => (
217
- <StorageEntryRow
218
- key={child.path}
219
- entry={child}
220
- namespace={namespace}
221
- protocol={protocol}
222
- rootPath={rootPath}
223
- backendType={backendType}
367
+ {filtered.map((child) => {
368
+ const rowKey = storageEntryKey(child, children.indexOf(child));
369
+ return (
370
+ <StorageEntryRow
371
+ key={rowKey}
372
+ rowKey={rowKey}
373
+ entry={child}
374
+ namespace={namespace}
375
+ protocol={protocol}
376
+ rootPath={rootPath}
377
+ backendType={backendType}
378
+ depth={depth}
379
+ locale={locale}
380
+ searchValue={searchValue}
381
+ onOpenFile={onOpenFile}
382
+ />
383
+ );
384
+ })}
385
+ {hasMore && (
386
+ <LoadMoreStorageEntries
224
387
  depth={depth}
225
- locale={locale}
226
- searchValue={searchValue}
227
- onOpenFile={onOpenFile}
388
+ isLoading={isLoadingMore}
389
+ error={loadMoreError}
390
+ onLoadMore={loadMore}
228
391
  />
229
- ))}
392
+ )}
230
393
  </>
231
394
  );
232
395
  };
233
396
 
234
397
  const StorageEntryRow: React.FC<{
235
398
  entry: StorageEntry;
399
+ rowKey: string;
236
400
  namespace: string;
237
401
  protocol: string;
238
402
  rootPath: string;
@@ -243,6 +407,7 @@ const StorageEntryRow: React.FC<{
243
407
  onOpenFile: (info: OpenFileInfo) => void;
244
408
  }> = ({
245
409
  entry,
410
+ rowKey,
246
411
  namespace,
247
412
  protocol,
248
413
  rootPath,
@@ -269,9 +434,9 @@ const StorageEntryRow: React.FC<{
269
434
  isDir &&
270
435
  hasSearch &&
271
436
  !!entriesByPath
272
- .get(storagePathKey(namespace, entry.path))
437
+ .get(storagePathKey(namespace, directoryPrefix(entry.path)))
273
438
  ?.some((child) =>
274
- entryMatchesSearch(child, namespace, searchValue, entriesByPath),
439
+ entryMatchesSearch(child, { namespace, searchValue, entriesByPath }),
275
440
  );
276
441
 
277
442
  // Folder is shown expanded by manual toggle OR by search auto-expand
@@ -312,7 +477,7 @@ const StorageEntryRow: React.FC<{
312
477
  isDir && "font-medium",
313
478
  )}
314
479
  style={indentStyle(depth)}
315
- value={`${namespace}:${entry.path}`}
480
+ value={`${namespace}:${rowKey}`}
316
481
  onSelect={() => {
317
482
  if (isDir) {
318
483
  setIsExpanded(!effectiveExpanded);
@@ -418,7 +583,7 @@ const StorageEntryRow: React.FC<{
418
583
  protocol={protocol}
419
584
  rootPath={rootPath}
420
585
  backendType={backendType}
421
- prefix={entry.path}
586
+ prefix={directoryPrefix(entry.path)}
422
587
  depth={depth + 1}
423
588
  locale={locale}
424
589
  searchValue={selfMatches ? "" : searchValue} // When a parent directory matches the search, we don't need to filter the children.
@@ -433,10 +598,19 @@ const StorageNamespaceSection: React.FC<{
433
598
  namespace: StorageNamespace;
434
599
  locale: string;
435
600
  searchValue: string;
601
+ remoteSearch: RemoteSearchState;
602
+ onContinueRemoteSearch: () => void;
436
603
  onOpenFile: (info: OpenFileInfo) => void;
437
- }> = ({ namespace, locale, searchValue, onOpenFile }) => {
604
+ }> = ({
605
+ namespace,
606
+ locale,
607
+ searchValue,
608
+ remoteSearch,
609
+ onContinueRemoteSearch,
610
+ onOpenFile,
611
+ }) => {
438
612
  const [isExpanded, setIsExpanded] = useState(true);
439
- const { entriesByPath } = useStorage();
613
+ const { entriesByPath, pageMetadataByPath } = useStorage();
440
614
  const { clearNamespaceCache } = useStorageActions();
441
615
  const namespaceName = namespace.name ?? namespace.displayName;
442
616
 
@@ -444,6 +618,10 @@ const StorageNamespaceSection: React.FC<{
444
618
  entries: fetchedEntries,
445
619
  isPending,
446
620
  error,
621
+ hasMore,
622
+ loadMore,
623
+ isLoadingMore,
624
+ loadMoreError,
447
625
  refetch,
448
626
  } = useStorageEntries(namespaceName);
449
627
 
@@ -458,12 +636,105 @@ const StorageNamespaceSection: React.FC<{
458
636
 
459
637
  // While loading, fall back to initial entries from the namespace notification
460
638
  const entries = isPending ? namespace.storageEntries : fetchedEntries;
461
- const filtered = filterEntries(
462
- entries,
463
- namespaceName,
639
+ const filtered = filterEntries(entries, {
640
+ namespace: namespaceName,
464
641
  searchValue,
465
642
  entriesByPath,
466
- );
643
+ });
644
+ const searchPrefix = remoteSearchPrefix(searchValue);
645
+ const searchKey = storagePathKey(namespaceName, searchPrefix);
646
+ const remoteEntries =
647
+ searchPrefix === "" ? [] : (entriesByPath.get(searchKey) ?? []);
648
+ // The fetched page is the whole parent directory; we still need to filter
649
+ // it by the full search query before showing entries to the user.
650
+ const filteredRemoteEntries = filterEntries(remoteEntries, {
651
+ namespace: namespaceName,
652
+ searchValue,
653
+ entriesByPath,
654
+ });
655
+ const hasSearch = !!searchValue.trim();
656
+ const hasLoadedMatches =
657
+ filtered.length > 0 || filteredRemoteEntries.length > 0;
658
+ const canSearchMore =
659
+ searchPrefix !== "" &&
660
+ canSearchMoreRemoteEntries({
661
+ hasSearch,
662
+ hasLoadedMatches,
663
+ isPending,
664
+ remoteSearch,
665
+ searchKey,
666
+ entriesByPath,
667
+ pageMetadataByPath,
668
+ });
669
+
670
+ const showRemoteResults = hasSearch && filtered.length === 0;
671
+ const statusRow = (() => {
672
+ if (isPending && entries.length === 0) {
673
+ return (
674
+ <span className="flex items-center gap-1.5">
675
+ <LoaderCircle className="h-3 w-3 animate-spin" />
676
+ Loading...
677
+ </span>
678
+ );
679
+ }
680
+ if (remoteSearch.status === "searching") {
681
+ return (
682
+ <span className="flex items-center gap-1.5">
683
+ <LoaderCircle className="h-3 w-3 animate-spin" />
684
+ Searching more entries...
685
+ </span>
686
+ );
687
+ }
688
+ if (remoteSearch.status === "error") {
689
+ return (
690
+ <span className="text-destructive">
691
+ Search failed: {remoteSearch.error.message}
692
+ </span>
693
+ );
694
+ }
695
+ if (remoteSearch.status === "capped") {
696
+ return (
697
+ <span className="flex items-center gap-1.5">
698
+ Searched more entries.
699
+ <Button
700
+ variant="text"
701
+ size="xs"
702
+ className="h-5 px-0 text-xs hover:text-blue-600"
703
+ onClick={onContinueRemoteSearch}
704
+ >
705
+ Continue searching
706
+ </Button>
707
+ <span className="text-[10px]">(or press Enter)</span>
708
+ </span>
709
+ );
710
+ }
711
+ if (remoteSearch.status === "exhausted" && !hasLoadedMatches) {
712
+ return "No matches";
713
+ }
714
+ if (!hasSearch && !isPending && entries.length === 0) {
715
+ return "No entries";
716
+ }
717
+ if (canSearchMore) {
718
+ return (
719
+ <span className="flex items-center gap-1.5">
720
+ No loaded matches.
721
+ <Button
722
+ variant="text"
723
+ size="xs"
724
+ className="h-5 px-0 text-xs hover:text-blue-600"
725
+ onClick={onContinueRemoteSearch}
726
+ >
727
+ Search more entries
728
+ </Button>
729
+ <span className="text-[10px]">(or press Enter)</span>
730
+ </span>
731
+ );
732
+ }
733
+ if (hasSearch && !hasLoadedMatches && entries.length > 0) {
734
+ return "No matches";
735
+ }
736
+ return null;
737
+ })();
467
738
 
468
739
  return (
469
740
  <>
@@ -492,15 +763,6 @@ const StorageNamespaceSection: React.FC<{
492
763
  </CommandItem>
493
764
  {isExpanded && (
494
765
  <>
495
- {isPending && entries.length === 0 && (
496
- <div
497
- className="flex items-center gap-1.5 py-1 text-xs text-muted-foreground"
498
- style={indentStyle(1)}
499
- >
500
- <LoaderCircle className="h-3 w-3 animate-spin" />
501
- Loading...
502
- </div>
503
- )}
504
766
  {error && entries.length === 0 && (
505
767
  <ErrorState
506
768
  error={error}
@@ -509,36 +771,62 @@ const StorageNamespaceSection: React.FC<{
509
771
  showIcon={false}
510
772
  />
511
773
  )}
512
- {!isPending && entries.length === 0 && !error && (
774
+ {!error && statusRow && (
513
775
  <div
514
776
  className="py-1 text-xs text-muted-foreground italic"
515
777
  style={indentStyle(1)}
516
778
  >
517
- No entries
779
+ {statusRow}
518
780
  </div>
519
781
  )}
520
- {searchValue && filtered.length === 0 && entries.length > 0 && (
521
- <div
522
- className="py-1 text-xs text-muted-foreground italic"
523
- style={indentStyle(1)}
524
- >
525
- No matches
526
- </div>
527
- )}
528
- {filtered.map((entry) => (
529
- <StorageEntryRow
530
- key={entry.path}
531
- entry={entry}
532
- namespace={namespaceName}
533
- protocol={namespace.protocol}
534
- rootPath={namespace.rootPath}
535
- backendType={namespace.backendType}
782
+ {filtered.map((entry) => {
783
+ const rowKey = storageEntryKey(entry, entries.indexOf(entry));
784
+ return (
785
+ <StorageEntryRow
786
+ key={rowKey}
787
+ rowKey={rowKey}
788
+ entry={entry}
789
+ namespace={namespaceName}
790
+ protocol={namespace.protocol}
791
+ rootPath={namespace.rootPath}
792
+ backendType={namespace.backendType}
793
+ depth={1}
794
+ locale={locale}
795
+ searchValue={searchValue}
796
+ onOpenFile={onOpenFile}
797
+ />
798
+ );
799
+ })}
800
+ {showRemoteResults &&
801
+ filteredRemoteEntries.map((entry) => {
802
+ const rowKey = storageEntryKey(
803
+ entry,
804
+ remoteEntries.indexOf(entry),
805
+ );
806
+ return (
807
+ <StorageEntryRow
808
+ key={`remote-search:${rowKey}`}
809
+ rowKey={`remote-search:${rowKey}`}
810
+ entry={entry}
811
+ namespace={namespaceName}
812
+ protocol={namespace.protocol}
813
+ rootPath={namespace.rootPath}
814
+ backendType={namespace.backendType}
815
+ depth={1}
816
+ locale={locale}
817
+ searchValue={searchValue}
818
+ onOpenFile={onOpenFile}
819
+ />
820
+ );
821
+ })}
822
+ {hasMore && !canSearchMore && (
823
+ <LoadMoreStorageEntries
536
824
  depth={1}
537
- locale={locale}
538
- searchValue={searchValue}
539
- onOpenFile={onOpenFile}
825
+ isLoading={isLoadingMore}
826
+ error={loadMoreError}
827
+ onLoadMore={loadMore}
540
828
  />
541
- ))}
829
+ )}
542
830
  </>
543
831
  )}
544
832
  </>
@@ -546,11 +834,163 @@ const StorageNamespaceSection: React.FC<{
546
834
  };
547
835
 
548
836
  export const StorageInspector: React.FC = () => {
549
- const { namespaces } = useStorage();
837
+ const { namespaces, entriesByPath, pageMetadataByPath } = useStorage();
550
838
  const { locale } = useLocale();
551
839
  const [searchValue, setSearchValue] = useState("");
840
+ const [remoteSearchByNamespace, setRemoteSearchByNamespace] =
841
+ useState<RemoteSearchByNamespace>({});
552
842
  const [openFile, setOpenFile] = useState<OpenFileInfo | null>(null);
843
+ const fetchStoragePage = useStoragePageFetcher();
553
844
  const hasSearch = !!searchValue.trim();
845
+ const currentQuery = searchValue.trim();
846
+
847
+ const remoteSearchForNamespace = useCallback(
848
+ (namespaceName: string): RemoteSearchState => {
849
+ const remoteSearch = remoteSearchByNamespace[namespaceName];
850
+ if (remoteSearch?.query === currentQuery) {
851
+ return remoteSearch;
852
+ }
853
+ return idleRemoteSearch(currentQuery);
854
+ },
855
+ [currentQuery, remoteSearchByNamespace],
856
+ );
857
+
858
+ const setRemoteSearch = useCallback(
859
+ (namespaceName: string, remoteSearch: RemoteSearchState) => {
860
+ setRemoteSearchByNamespace((state) => ({
861
+ ...state,
862
+ [namespaceName]: remoteSearch,
863
+ }));
864
+ },
865
+ [],
866
+ );
867
+
868
+ const canContinueRemoteSearch = useCallback(
869
+ (namespace: StorageNamespace): boolean => {
870
+ if (!currentQuery) {
871
+ return false;
872
+ }
873
+
874
+ const namespaceName = namespace.name ?? namespace.displayName;
875
+ const searchPrefix = remoteSearchPrefix(currentQuery);
876
+ // No directory component in the query - the user is doing a fuzzy
877
+ // search and the backend can't help; rely on local filtering instead.
878
+ if (searchPrefix === "") {
879
+ return false;
880
+ }
881
+
882
+ const remoteSearch = remoteSearchForNamespace(namespaceName);
883
+ if (!canRetryRemoteSearch(remoteSearch)) {
884
+ return false;
885
+ }
886
+
887
+ // Already surfacing matches from loaded entries?
888
+ const rootEntries =
889
+ entriesByPath.get(storagePathKey(namespaceName, "")) ??
890
+ namespace.storageEntries;
891
+ const rootMatches = filterEntries(rootEntries, {
892
+ namespace: namespaceName,
893
+ searchValue: currentQuery,
894
+ entriesByPath,
895
+ });
896
+ if (rootMatches.length > 0) {
897
+ return false;
898
+ }
899
+
900
+ const searchKey = storagePathKey(namespaceName, searchPrefix);
901
+ const prefixEntries = entriesByPath.get(searchKey) ?? [];
902
+ const prefixMatches = filterEntries(prefixEntries, {
903
+ namespace: namespaceName,
904
+ searchValue: currentQuery,
905
+ entriesByPath,
906
+ });
907
+ if (prefixMatches.length > 0) {
908
+ return false;
909
+ }
910
+
911
+ return hasUnfetchedPrefixPage(
912
+ searchKey,
913
+ entriesByPath,
914
+ pageMetadataByPath,
915
+ );
916
+ },
917
+ [currentQuery, entriesByPath, pageMetadataByPath, remoteSearchForNamespace],
918
+ );
919
+
920
+ const continueRemoteSearch = useCallback(
921
+ async (namespace: StorageNamespace) => {
922
+ if (!canContinueRemoteSearch(namespace)) {
923
+ return;
924
+ }
925
+
926
+ const query = currentQuery;
927
+ const namespaceName = namespace.name ?? namespace.displayName;
928
+ const prefix = remoteSearchPrefix(query);
929
+ const key = storagePathKey(namespaceName, prefix);
930
+ const cachedEntries = entriesByPath.get(key);
931
+ let nextPageToken = pageMetadataByPath.get(key)?.nextPageToken ?? null;
932
+ let hasFetchedAny = cachedEntries !== undefined;
933
+
934
+ setRemoteSearch(namespaceName, { query, status: "searching" });
935
+ try {
936
+ for (let page = 0; page < MAX_REMOTE_SEARCH_PAGES; page++) {
937
+ // First iteration with a stale cache hit needs no fetch; just check
938
+ // the cached page before paginating.
939
+ const shouldFetch = !hasFetchedAny || nextPageToken !== null;
940
+ let newEntries: StorageEntry[] = [];
941
+ if (shouldFetch) {
942
+ const result = await fetchStoragePage({
943
+ namespace: namespaceName,
944
+ prefix,
945
+ pageToken: nextPageToken,
946
+ append: hasFetchedAny,
947
+ });
948
+ newEntries = result.entries;
949
+ nextPageToken = result.next_page_token ?? null;
950
+ hasFetchedAny = true;
951
+ }
952
+
953
+ const entriesToCheck = shouldFetch
954
+ ? newEntries
955
+ : (cachedEntries ?? []);
956
+ const hasMatches = entriesToCheck.some((entry) =>
957
+ entryMatchesQueryShallow(entry, query),
958
+ );
959
+ if (hasMatches) {
960
+ setRemoteSearch(namespaceName, { query, status: "found" });
961
+ return;
962
+ }
963
+
964
+ if (nextPageToken === null) {
965
+ setRemoteSearch(namespaceName, { query, status: "exhausted" });
966
+ return;
967
+ }
968
+ }
969
+ setRemoteSearch(namespaceName, { query, status: "capped" });
970
+ } catch (error) {
971
+ setRemoteSearch(namespaceName, {
972
+ query,
973
+ status: "error",
974
+ error: error instanceof Error ? error : new Error(String(error)),
975
+ });
976
+ }
977
+ },
978
+ [
979
+ canContinueRemoteSearch,
980
+ currentQuery,
981
+ entriesByPath,
982
+ fetchStoragePage,
983
+ pageMetadataByPath,
984
+ setRemoteSearch,
985
+ ],
986
+ );
987
+
988
+ const continueRemoteSearches = useCallback(() => {
989
+ const searchableNamespaces = namespaces.filter(canContinueRemoteSearch);
990
+ for (const namespace of searchableNamespaces) {
991
+ void continueRemoteSearch(namespace);
992
+ }
993
+ }, [canContinueRemoteSearch, continueRemoteSearch, namespaces]);
554
994
 
555
995
  if (namespaces.length === 0) {
556
996
  return (
@@ -609,6 +1049,15 @@ export const StorageInspector: React.FC = () => {
609
1049
  className="h-6 m-1"
610
1050
  value={searchValue}
611
1051
  onValueChange={setSearchValue}
1052
+ onKeyDown={(event) => {
1053
+ if (
1054
+ event.key === "Enter" &&
1055
+ namespaces.some(canContinueRemoteSearch)
1056
+ ) {
1057
+ event.preventDefault();
1058
+ continueRemoteSearches();
1059
+ }
1060
+ }}
612
1061
  rootClassName="flex-1 border-b-0"
613
1062
  />
614
1063
  {hasSearch && (
@@ -622,7 +1071,7 @@ export const StorageInspector: React.FC = () => {
622
1071
  </Button>
623
1072
  )}
624
1073
  <Tooltip
625
- content="Filters loaded entries only. Expand directories to include their contents in the search."
1074
+ content="Search by file name within loaded entries, or by prefix (e.g. 'folder/x') for backend search. Press Enter to fetch more results."
626
1075
  delayDuration={200}
627
1076
  >
628
1077
  <HelpCircleIcon className="h-3.5 w-3.5 shrink-0 cursor-help text-muted-foreground hover:text-foreground mr-2" />
@@ -638,15 +1087,20 @@ export const StorageInspector: React.FC = () => {
638
1087
  </AddConnectionDialog>
639
1088
  </div>
640
1089
  <CommandList className="flex flex-col">
641
- {namespaces.map((ns) => (
642
- <StorageNamespaceSection
643
- key={ns.name ?? ns.displayName}
644
- namespace={ns}
645
- locale={locale}
646
- searchValue={searchValue}
647
- onOpenFile={setOpenFile}
648
- />
649
- ))}
1090
+ {namespaces.map((ns) => {
1091
+ const namespaceName = ns.name ?? ns.displayName;
1092
+ return (
1093
+ <StorageNamespaceSection
1094
+ key={namespaceName}
1095
+ namespace={ns}
1096
+ locale={locale}
1097
+ searchValue={searchValue}
1098
+ remoteSearch={remoteSearchForNamespace(namespaceName)}
1099
+ onContinueRemoteSearch={() => void continueRemoteSearch(ns)}
1100
+ onOpenFile={setOpenFile}
1101
+ />
1102
+ );
1103
+ })}
650
1104
  </CommandList>
651
1105
  </Command>
652
1106
  </div>