@marimo-team/frontend 0.18.2 → 0.18.3

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 (615) hide show
  1. package/dist/assets/{CellStatus-BF6SIoRw.js → CellStatus-D2D-5BFb.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-cWWwPzM6.js → ConnectedDataExplorerComponent-CsGDiHld.js} +1 -1
  3. package/dist/assets/{ConsoleOutput-D7wjWCxv.js → ConsoleOutput-1UUGbXpT.js} +1 -1
  4. package/dist/assets/{ErrorBoundary-CtDyEdnn.js → ErrorBoundary-Xx3vyups.js} +1 -1
  5. package/dist/assets/{LazyAnyLanguageCodeMirror-49uxEXHt.js → LazyAnyLanguageCodeMirror-LOVWlBJF.js} +2 -2
  6. package/dist/assets/{MarimoErrorOutput-B1Mc3WdL.js → MarimoErrorOutput-CBrjDxLd.js} +1 -1
  7. package/dist/assets/{Output-C7Tw17j5.js → Output-DaxqEvBr.js} +1 -1
  8. package/dist/assets/{RenderHTML-JtHAHXUk.js → RenderHTML-CDZ5aEc_.js} +1 -1
  9. package/dist/assets/{add-cell-with-ai-XMW6KxRB.js → add-cell-with-ai-CSoCSUxd.js} +1 -1
  10. package/dist/assets/{add-database-form-CEZCyiTa.js → add-database-form-SGMMGp2c.js} +2 -2
  11. package/dist/assets/{add-missing-import-BkauGlV2.js → add-missing-import-CtAvQzRq.js} +1 -1
  12. package/dist/assets/{agent-panel-Ce7SvzIG.js → agent-panel-C5Z0hBOF.js} +1 -1
  13. package/dist/assets/angular-html-6ZIByP3N.js +1 -0
  14. package/dist/assets/{angular-html-zPXXaV-8.js → angular-html-D2pQ7jQ_.js} +1 -1
  15. package/dist/assets/{angular-ts-enzRg3a_.js → angular-ts-D1ZL1jvS.js} +1 -1
  16. package/dist/assets/{api-DYFFXYuB.js → api-2JaIsahG.js} +1 -1
  17. package/dist/assets/{apl-BcJ9sfq_.js → apl-BCeEtywR.js} +1 -1
  18. package/dist/assets/app-config-button-B_M_eQY9.js +1 -0
  19. package/dist/assets/{arc-Ds_Zv0QO.js → arc-Crbn1TVB.js} +1 -1
  20. package/dist/assets/{architecture-U656AL7Q-DiJqir5O.js → architecture-U656AL7Q-cpYzhQMB.js} +1 -1
  21. package/dist/assets/{architectureDiagram-VXUJARFQ-DJQ935Jg.js → architectureDiagram-VXUJARFQ-BL5pjKVE.js} +1 -1
  22. package/dist/assets/{astro-DRWIggQ-.js → astro-Cj_DeCWe.js} +1 -1
  23. package/dist/assets/{blade-D2nYyrEj.js → blade-Fd7RZ-zP.js} +1 -1
  24. package/dist/assets/{blockDiagram-VD42YOAC-DdrDCK_z.js → blockDiagram-VD42YOAC-CmuhZsm9.js} +1 -1
  25. package/dist/assets/{bsl-CGmwQbBb.js → bsl-CzdIu7Xi.js} +1 -1
  26. package/dist/assets/c-NwLKp6np.js +1 -0
  27. package/dist/assets/{c4Diagram-YG6GDRKO-BjPLaLg6.js → c4Diagram-YG6GDRKO-BP2PIYlO.js} +1 -1
  28. package/dist/assets/{cache-panel-DzhCTE71.js → cache-panel-DkUaYb_-.js} +1 -1
  29. package/dist/assets/{cairo-pvAoeMSC.js → cairo-BhzRYPt4.js} +1 -1
  30. package/dist/assets/{cell-actions-Juc9p4m9.js → cell-actions-DQwP57Jw.js} +1 -1
  31. package/dist/assets/{cell-editor-CRlOJNCd.js → cell-editor-BgpgVJ_O.js} +3 -3
  32. package/dist/assets/{cell-link-ByqSnfe2.js → cell-link-D4ddCDwe.js} +1 -1
  33. package/dist/assets/{cells-B1ds6ZjK.js → cells-XWXpgwpH.js} +4 -4
  34. package/dist/assets/channel-B0biCWFN.js +1 -0
  35. package/dist/assets/chat-panel-BeaiJuzZ.js +3 -0
  36. package/dist/assets/{chunk-4BX2VUAB-OZ3RMBOG.js → chunk-4BX2VUAB-Dnmsi95O.js} +1 -1
  37. package/dist/assets/chunk-55IACEB6-D2aLmewM.js +1 -0
  38. package/dist/assets/{chunk-ABZYJK2D-hrtqo5Ih.js → chunk-ABZYJK2D-CtXIjLiW.js} +1 -1
  39. package/dist/assets/{chunk-ATLVNIR6-BgfpG5In.js → chunk-ATLVNIR6-B9PNf8Hz.js} +1 -1
  40. package/dist/assets/{chunk-B4BG7PRW-_PvkdrWC.js → chunk-B4BG7PRW-BNJbYnUH.js} +1 -1
  41. package/dist/assets/{chunk-CVBHYZKI-5HVb4Wim.js → chunk-CVBHYZKI-DDPYtx7T.js} +1 -1
  42. package/dist/assets/{chunk-DI55MBZ5-Cw58sQJJ.js → chunk-DI55MBZ5-DND_B2Za.js} +1 -1
  43. package/dist/assets/{chunk-EXTU4WIE-CEP0vCSp.js → chunk-EXTU4WIE-D12Fazph.js} +1 -1
  44. package/dist/assets/{chunk-FMBD7UC4-BkUavpb3.js → chunk-FMBD7UC4-C8i9rOfC.js} +1 -1
  45. package/dist/assets/{chunk-HN2XXSSU-DjhZVPDs.js → chunk-HN2XXSSU-Bm9ByQAV.js} +1 -1
  46. package/dist/assets/{chunk-JA3XYJ7Z-CgzUmbGk.js → chunk-JA3XYJ7Z-CtNBL0qt.js} +1 -1
  47. package/dist/assets/{chunk-JZLCHNYA-7mxrIoDk.js → chunk-JZLCHNYA-BZEPGvln.js} +1 -1
  48. package/dist/assets/{chunk-MI3HLSF2-pZk5-wBb.js → chunk-MI3HLSF2-BjSxv-Tb.js} +1 -1
  49. package/dist/assets/{chunk-N4CR4FBY-RwpuZVCY.js → chunk-N4CR4FBY-D4Pv9MjY.js} +2 -2
  50. package/dist/assets/{chunk-QN33PNHL-4snOivde.js → chunk-QN33PNHL-DY4Bb8bg.js} +1 -1
  51. package/dist/assets/{chunk-QXUST7PY-DhCicUET.js → chunk-QXUST7PY-BaL39LJ3.js} +1 -1
  52. package/dist/assets/{chunk-QZHKN3VN-GvLbztMp.js → chunk-QZHKN3VN-C6tsMej_.js} +1 -1
  53. package/dist/assets/{chunk-S3R3BYOJ-OSp35xNm.js → chunk-S3R3BYOJ-CHQG4Tkr.js} +1 -1
  54. package/dist/assets/{chunk-T7OEMACY-DbVUP18p.js → chunk-T7OEMACY-DmsJ7oRM.js} +3 -3
  55. package/dist/assets/{chunk-TZMSLE5B-CW2-539B.js → chunk-TZMSLE5B-Cv6_oHcL.js} +1 -1
  56. package/dist/assets/classDiagram-2ON5EDUG-BF--0IrT.js +1 -0
  57. package/dist/assets/classDiagram-v2-WZHVMYZB-CfJWUvdz.js +1 -0
  58. package/dist/assets/{client-D_omQOdF.js → client-0P4Oa4i0.js} +1 -1
  59. package/dist/assets/cmake-DIDeMhdf.js +1 -0
  60. package/dist/assets/{cobol-DFzCMwfG.js → cobol-NpM76oCU.js} +1 -1
  61. package/dist/assets/{code-block-JS6V4U2P-C_q8Dvc3.js → code-block-JS6V4U2P-iJhUpiql.js} +3 -3
  62. package/dist/assets/{coffee-9tBT_d38.js → coffee-BqxJYR0h.js} +1 -1
  63. package/dist/assets/{column-preview-BcoDJfhJ.js → column-preview-DN61SPFU.js} +1 -1
  64. package/dist/assets/command-palette-CJCaop_T.js +1 -0
  65. package/dist/assets/{common-BYQt3-He.js → common-D-7wYxmm.js} +1 -1
  66. package/dist/assets/{config-BwUC_LRl.js → config-ljv4_QXT.js} +1 -1
  67. package/dist/assets/{constants-Bt6NlroV.js → constants-O0mPFSN0.js} +1 -1
  68. package/dist/assets/{cose-bilkent-S5V4N54A-V1NG2lYv.js → cose-bilkent-S5V4N54A-GcYlE8uw.js} +1 -1
  69. package/dist/assets/cpp-BGtyUeB4.js +1 -0
  70. package/dist/assets/{cpp-D07lGOGh.js → cpp-BLoWjAXF.js} +1 -1
  71. package/dist/assets/{crystal-BkcFcpMl.js → crystal-BRLo8TK3.js} +1 -1
  72. package/dist/assets/csharp-8rTxz5Cn.js +1 -0
  73. package/dist/assets/css-FLaAaSlG.js +1 -0
  74. package/dist/assets/{dagre-6UL2VRFP-B2J9heb_.js → dagre-6UL2VRFP-Db0To5ui.js} +1 -1
  75. package/dist/assets/{data-grid-overlay-editor-CtKSQFwf.js → data-grid-overlay-editor-DWDX47Vs.js} +1 -1
  76. package/dist/assets/datasources-panel-B3B_6oaN.js +1 -0
  77. package/dist/assets/{dependency-graph-panel-CAq_VFUz.js → dependency-graph-panel-Cfk_uFwf.js} +1 -1
  78. package/dist/assets/{diagram-PSM6KHXK-DjVIUZBI.js → diagram-PSM6KHXK-C58qsAys.js} +1 -1
  79. package/dist/assets/{diagram-QEK2KX5R-ChWH1qmW.js → diagram-QEK2KX5R-DcaWIBK-.js} +1 -1
  80. package/dist/assets/{diagram-S2PKOQOG-jw1__MCe.js → diagram-S2PKOQOG-CezQu__Y.js} +1 -1
  81. package/dist/assets/diff-BVGhhozo.js +1 -0
  82. package/dist/assets/{dist-D6pW-8Gd.js → dist-CKUOeEGM.js} +1 -1
  83. package/dist/assets/{documentation-panel-BDteAlXf.js → documentation-panel-C_ASDI7f.js} +1 -1
  84. package/dist/assets/{edge-6E5i8E-5.js → edge-WMVFowHg.js} +1 -1
  85. package/dist/assets/{edit-page-CIErn7rp.js → edit-page-BEta7M3s.js} +6 -6
  86. package/dist/assets/{elixir-C_vJFtO6.js → elixir-CW0bCBTm.js} +1 -1
  87. package/dist/assets/{elm-Cshl2UY4.js → elm-Ce2fnIaC.js} +1 -1
  88. package/dist/assets/{erDiagram-Q2GNP2WA-xYpFjQnF.js → erDiagram-Q2GNP2WA-DB0WyJRj.js} +1 -1
  89. package/dist/assets/{erb-DbuYwwsU.js → erb-DjIl_KIf.js} +1 -1
  90. package/dist/assets/{erlang-6BmX0xfT.js → erlang-BPYBaUs1.js} +1 -1
  91. package/dist/assets/{error-panel-DvLmVUk9.js → error-panel-5x_F-NS3.js} +1 -1
  92. package/dist/assets/{file-explorer-panel-DDxuXk_g.js → file-explorer-panel-LFnqffxy.js} +1 -1
  93. package/dist/assets/{floating-outline-BQGPKYVi.js → floating-outline-Bk6kjZw5.js} +1 -1
  94. package/dist/assets/{flowDiagram-NV44I4VS-BYwwl5yU.js → flowDiagram-NV44I4VS-Do98S-D5.js} +1 -1
  95. package/dist/assets/{focus-BwsN5YFR.js → focus-BLLpcsff.js} +1 -1
  96. package/dist/assets/form-DhU-C-zB.js +2 -0
  97. package/dist/assets/{fortran-fixed-form-CU_lVn3W.js → fortran-fixed-form-CPD1Ld3F.js} +1 -1
  98. package/dist/assets/fortran-free-form-Qi8mZgN7.js +1 -0
  99. package/dist/assets/{fsharp-BWZe5KpF.js → fsharp-BXetOFqI.js} +1 -1
  100. package/dist/assets/{ganttDiagram-LVOFAZNH-DmFdObyd.js → ganttDiagram-LVOFAZNH-Cl2cbCz_.js} +1 -1
  101. package/dist/assets/{gdresource-DxweAAB0.js → gdresource-C48GwkIn.js} +1 -1
  102. package/dist/assets/gdscript-Dl7WwCNF.js +1 -0
  103. package/dist/assets/gdshader-RlrrzEyF.js +1 -0
  104. package/dist/assets/{git-commit-B-c9qmkK.js → git-commit-B3rEFd7D.js} +1 -1
  105. package/dist/assets/{git-rebase-C1uZdm2G.js → git-rebase-Dw0jcW6j.js} +1 -1
  106. package/dist/assets/{gitGraph-F6HP7TQM-Bp1qHyUF.js → gitGraph-F6HP7TQM-CEUy28T-.js} +1 -1
  107. package/dist/assets/{gitGraphDiagram-NY62KEGX-Ca6pRCe9.js → gitGraphDiagram-NY62KEGX-j_m8UxCE.js} +1 -1
  108. package/dist/assets/{glide-data-editor-Dk61gLIM.js → glide-data-editor-BCJd_9uX.js} +4 -4
  109. package/dist/assets/{glimmer-js-CRluyXqC.js → glimmer-js-DuwG4btA.js} +1 -1
  110. package/dist/assets/{glimmer-ts-Be4SRNfU.js → glimmer-ts-Bv5_LxhC.js} +1 -1
  111. package/dist/assets/{globals-BflAlIPe.js → globals-eSrTJiES.js} +1 -1
  112. package/dist/assets/glsl-CNhD1pjh.js +1 -0
  113. package/dist/assets/{glsl-B3aHnexF.js → glsl-CSojfCAK.js} +1 -1
  114. package/dist/assets/go-4uno1cNo.js +1 -0
  115. package/dist/assets/{graphql-TzGXXMoH.js → graphql-DWK8GxAH.js} +1 -1
  116. package/dist/assets/graphql-DlC4hv7h.js +1 -0
  117. package/dist/assets/{hack-Be9IDiZJ.js → hack-BwSRqsiT.js} +1 -1
  118. package/dist/assets/haml-BKy7-U6a.js +1 -0
  119. package/dist/assets/{haml-D0sma3Fr.js → haml-CUHHTr9D.js} +1 -1
  120. package/dist/assets/{handlebars-DCGKGZcy.js → handlebars-DBMYtD2n.js} +1 -1
  121. package/dist/assets/haxe-Bjuu3Qez.js +1 -0
  122. package/dist/assets/hlsl-DDoNsQHl.js +1 -0
  123. package/dist/assets/home-page-j5Kl0XcZ.js +4 -0
  124. package/dist/assets/html-C1WXfB-v.js +1 -0
  125. package/dist/assets/{html-QilReBRG.js → html-XjnqXjF_.js} +1 -1
  126. package/dist/assets/html-derivative-Bb70NcrA.js +1 -0
  127. package/dist/assets/{html-derivative-BOW362dn.js → html-derivative-CKW13wqU.js} +1 -1
  128. package/dist/assets/{http-CC85REw6.js → http-DYJIS8jR.js} +1 -1
  129. package/dist/assets/{hxml-CZKabaSC.js → hxml-C9BiOcOn.js} +1 -1
  130. package/dist/assets/{index-DvIxiN0j.js → index-CXWNxYPw.js} +14 -14
  131. package/dist/assets/{info-NVLQJR56-CRO066Ir.js → info-NVLQJR56-Z7xlJUKX.js} +1 -1
  132. package/dist/assets/{infoDiagram-ER5ION4S-J_j0uIyL.js → infoDiagram-ER5ION4S-6FR8ZdmP.js} +1 -1
  133. package/dist/assets/java-DDv0H7yL.js +1 -0
  134. package/dist/assets/{r-OhKPuvaw.js → javascript-CNjghNZs.js} +1 -1
  135. package/dist/assets/{jinja-CZFTWy7D.js → jinja-DqdQtCQl.js} +1 -1
  136. package/dist/assets/{jison-DjiEyDKn.js → jison-DYy80zr1.js} +1 -1
  137. package/dist/assets/{journeyDiagram-XKPGCS4Q-DlF_FBwA.js → journeyDiagram-XKPGCS4Q-DQyZO9j2.js} +1 -1
  138. package/dist/assets/json-D6QbUdRZ.js +1 -0
  139. package/dist/assets/jsx-05bO5G09.js +1 -0
  140. package/dist/assets/{julia-sBXvBe-F.js → julia-C75tWECT.js} +1 -1
  141. package/dist/assets/{kanban-definition-3W4ZIXB7-C_1jJ-oj.js → kanban-definition-3W4ZIXB7-CqawISU9.js} +1 -1
  142. package/dist/assets/{kiosk-mode-BJ_ZGDx5.js → kiosk-mode-i02oHc6v.js} +1 -1
  143. package/dist/assets/{latex-CS3Ztrvu.js → latex-BYbB2J-j.js} +1 -1
  144. package/dist/assets/{layout-N-k846yN.js → layout-BwT0IKwx.js} +3 -3
  145. package/dist/assets/lazy-ShQ0UXOI.js +2 -0
  146. package/dist/assets/less-CvcIL3JI.js +1 -0
  147. package/dist/assets/{line-BXY1-slS.js → line-6NN8CLqn.js} +1 -1
  148. package/dist/assets/{linear-BQs_BJbB.js → linear-C65za0NQ.js} +1 -1
  149. package/dist/assets/links-Dby89aO_.js +1 -0
  150. package/dist/assets/{liquid-DqBVA45f.js → liquid-C-lVMv3a.js} +1 -1
  151. package/dist/assets/{logs-panel-Ce3j2J9t.js → logs-panel-qlhJ40ua.js} +1 -1
  152. package/dist/assets/{loro_wasm_bg-CpvTcjq2.js → loro_wasm_bg-DDSX2v3H.js} +1 -1
  153. package/dist/assets/{lua-DL1HmgdC.js → lua-CVCk_xyq.js} +1 -1
  154. package/dist/assets/lua-DRkRNcth.js +1 -0
  155. package/dist/assets/markdown-CTc4euAS.js +1 -0
  156. package/dist/assets/{marko-BaR7Pilf.js → marko-tJVp8Hwi.js} +1 -1
  157. package/dist/assets/{mdc-Bth8SuR1.js → mdc-DVrcLgsN.js} +1 -1
  158. package/dist/assets/{mermaid-DaBnAxOO.js → mermaid-B6qMr8L1.js} +1 -1
  159. package/dist/assets/{mermaid-ZSTFYFNX-CfTeVf8N.js → mermaid-ZSTFYFNX-C-YUgcrj.js} +1 -1
  160. package/dist/assets/{mermaid-parser.core-DFQ2AotN.js → mermaid-parser.core-bcTOi7_A.js} +2 -2
  161. package/dist/assets/{mermaid.core-B3zF-yjd.js → mermaid.core-Cd9fy8CM.js} +3 -3
  162. package/dist/assets/mermaid.core-FjFmaBy2.js +1 -0
  163. package/dist/assets/{mindmap-definition-VGOIOE7T-CKETnCM8.js → mindmap-definition-VGOIOE7T-B3H781GF.js} +1 -1
  164. package/dist/assets/{mode-DQrmKtLw.js → mode-OgOLIWqz.js} +1 -1
  165. package/dist/assets/{name-cell-input-Do6XiA3C.js → name-cell-input-Czy9kSf0.js} +1 -1
  166. package/dist/assets/{nginx-CFsvje3Q.js → nginx-B9lIXTIk.js} +1 -1
  167. package/dist/assets/{nim-DyRQVOp8.js → nim-DMbY95qc.js} +1 -1
  168. package/dist/assets/{number-overlay-editor-CBErLveY.js → number-overlay-editor-DGg2F2Zq.js} +1 -1
  169. package/dist/assets/{ordinal-6cy7Wi6n.js → ordinal-DWAMmZun.js} +1 -1
  170. package/dist/assets/{outline-panel-Badv1nDU.js → outline-panel-BFOEX_7J.js} +1 -1
  171. package/dist/assets/packages-panel-BOQ3cGnK.js +1 -0
  172. package/dist/assets/{packet-BFZMPI3H-bOa1RmAa.js → packet-BFZMPI3H-BMO-hBPp.js} +1 -1
  173. package/dist/assets/{panels-pbTyO4Yq.js → panels-CEi9-a5L.js} +1 -1
  174. package/dist/assets/{perl-POkTMWN_.js → perl-DIZyk-OD.js} +1 -1
  175. package/dist/assets/{php-I1bL2ks3.js → php-CORYW3W_.js} +1 -1
  176. package/dist/assets/php-DJRiktZv.js +1 -0
  177. package/dist/assets/{pie-7BOR55EZ-Dp5gdvt7.js → pie-7BOR55EZ-rHQ0gno-.js} +1 -1
  178. package/dist/assets/{pieDiagram-ADFJNKIX-C-IhILl8.js → pieDiagram-ADFJNKIX-sVmyfEDE.js} +1 -1
  179. package/dist/assets/postcss-UlVqXkr3.js +1 -0
  180. package/dist/assets/{pug-srb5GKBG.js → pug-UOb7Pne9.js} +1 -1
  181. package/dist/assets/python-BrYQwEQj.js +1 -0
  182. package/dist/assets/{qml-yDHVcOWe.js → qml-Dj3U559P.js} +1 -1
  183. package/dist/assets/{quadrantDiagram-AYHSOK5B-DPvV-jC1.js → quadrantDiagram-AYHSOK5B-BuHfUyfh.js} +1 -1
  184. package/dist/assets/r-BUz5cY9H.js +1 -0
  185. package/dist/assets/{radar-NHE76QYJ-BAC5t54Z.js → radar-NHE76QYJ-76Yb3phk.js} +1 -1
  186. package/dist/assets/{razor-Deru5o-A.js → razor-B-gpU4vR.js} +1 -1
  187. package/dist/assets/{react-vega-BAaWsGgr.js → react-vega-CAmAfweF.js} +1 -1
  188. package/dist/assets/react-vega-DnTzz140.js +1 -0
  189. package/dist/assets/{readonly-python-code-B5NwduhZ.js → readonly-python-code-mq6FZbVx.js} +1 -1
  190. package/dist/assets/regexp-BxunqEf_.js +1 -0
  191. package/dist/assets/{requirementDiagram-UZGBJVZJ-D3ptzvUf.js → requirementDiagram-UZGBJVZJ-DYMMivrm.js} +1 -1
  192. package/dist/assets/{rst-kEAtnakZ.js → rst-B85hxnlc.js} +1 -1
  193. package/dist/assets/{ruby-DQJPe_a3.js → ruby-CHdGuXFc.js} +1 -1
  194. package/dist/assets/ruby-Cqw2Hu6d.js +1 -0
  195. package/dist/assets/{run-page-C5kJvOM4.js → run-page-BztCKtqc.js} +1 -1
  196. package/dist/assets/{sankeyDiagram-TZEHDZUN-BkdZ5Blc.js → sankeyDiagram-TZEHDZUN-CZ16wpaY.js} +1 -1
  197. package/dist/assets/{sas-BC29kgD3.js → sas-CuEH6iIJ.js} +1 -1
  198. package/dist/assets/scratchpad-panel--oc6tyQX.js +1 -0
  199. package/dist/assets/{scss-DIvyDHtT.js → scss-BlV4UnBb.js} +1 -1
  200. package/dist/assets/scss-NmNzk_Zf.js +1 -0
  201. package/dist/assets/sdbl-xDrIgPir.js +1 -0
  202. package/dist/assets/{secrets-panel-BlIKbCgm.js → secrets-panel-BEvDYtNi.js} +1 -1
  203. package/dist/assets/{sequenceDiagram-WL72ISMW-BHHYyLkd.js → sequenceDiagram-WL72ISMW-CGUwnU1T.js} +1 -1
  204. package/dist/assets/{shaderlab-D5vwGw2B.js → shaderlab-HGefy3lX.js} +1 -1
  205. package/dist/assets/shellscript-CWnpfIVd.js +1 -0
  206. package/dist/assets/{shellsession-DPqodGjj.js → shellsession-DN9F7p6q.js} +1 -1
  207. package/dist/assets/snippets-panel-BIDF0xto.js +1 -0
  208. package/dist/assets/{soy-B2_gXGVS.js → soy-xZVRMNo7.js} +1 -1
  209. package/dist/assets/{sparql-Dkh6t6h9.js → sparql-B9ed17pr.js} +1 -1
  210. package/dist/assets/sql-BCMUEiW4.js +1 -0
  211. package/dist/assets/{src-R7nIPgRU.js → src-C0izl9Fx.js} +1 -1
  212. package/dist/assets/{stata-C5URTFfT.js → stata-BpL_33SQ.js} +1 -1
  213. package/dist/assets/state-BToBIIvZ.js +1 -0
  214. package/dist/assets/{state-GOQmrHWh.js → state-BUWnJ0Ly.js} +1 -1
  215. package/dist/assets/{stateDiagram-FKZM4ZOC-IWRHaCgb.js → stateDiagram-FKZM4ZOC-FbkYBg2y.js} +1 -1
  216. package/dist/assets/stateDiagram-v2-4FDKWEC3-DkhmZNet.js +1 -0
  217. package/dist/assets/{step-Cy9SLim8.js → step-DPEIwvoe.js} +1 -1
  218. package/dist/assets/stylus-nltikuP7.js +1 -0
  219. package/dist/assets/{svelte-BlKptMet.js → svelte-DI_4WP4b.js} +1 -1
  220. package/dist/assets/{templ-BsPHdbRC.js → templ-DI8Afhor.js} +1 -1
  221. package/dist/assets/{terminal-D2sy-Waz.js → terminal-C_4Ns3Fs.js} +1 -1
  222. package/dist/assets/tex-CDJH0sDw.js +1 -0
  223. package/dist/assets/{tex-1rcoMxJg.js → tex-DStQkt6N.js} +1 -1
  224. package/dist/assets/textarea-d-UPtQ6q.js +1 -0
  225. package/dist/assets/{time-BI36HTF4.js → time-CdS3VZ8n.js} +1 -1
  226. package/dist/assets/{timeline-definition-IT6M3QCI-BlMXBA1F.js → timeline-definition-IT6M3QCI-D1fKq86a.js} +1 -1
  227. package/dist/assets/{tracing-CkRwWZsW.js → tracing-Csn-104k.js} +1 -1
  228. package/dist/assets/{tracing-panel-D-FQ2AQs.js → tracing-panel-DXlQNpKZ.js} +2 -2
  229. package/dist/assets/{treemap-KMMF4GRG-OjAxT76G.js → treemap-KMMF4GRG-DrMPlNqO.js} +1 -1
  230. package/dist/assets/{ts-tags-DgEj73wl.js → ts-tags-Bnh7Dmjn.js} +1 -1
  231. package/dist/assets/tsx-DKB6JoC0.js +1 -0
  232. package/dist/assets/turtle-BLgGJnnz.js +1 -0
  233. package/dist/assets/{twig-aFZulmnv.js → twig-BAH4DqEc.js} +1 -1
  234. package/dist/assets/{types-mgJcVmSJ.js → types-CKActxHf.js} +1 -1
  235. package/dist/assets/typescript-85LvAE5j.js +1 -0
  236. package/dist/assets/{useAddCell-Dq_OGA6d.js → useAddCell-BrByzpGu.js} +1 -1
  237. package/dist/assets/{useBoolean-BE5lrBVg.js → useBoolean-BKHo47jI.js} +1 -1
  238. package/dist/assets/{useCellActionButton-BDj2KBhe.js → useCellActionButton-BOQPSz5O.js} +1 -1
  239. package/dist/assets/{useDeleteCell-BCwFj4vN.js → useDeleteCell-D5AVSLUE.js} +1 -1
  240. package/dist/assets/useNotebookActions-DgqsaZin.js +1 -0
  241. package/dist/assets/{useRunCells-D8WfVv85.js → useRunCells-Ds9oEET1.js} +1 -1
  242. package/dist/assets/{useSplitCell-BwGnS2JP.js → useSplitCell-aFVCWa6U.js} +1 -1
  243. package/dist/assets/{utilities.esm-DjX7r00f.js → utilities.esm-CFYsyNzv.js} +1 -1
  244. package/dist/assets/{variable-panel-BZlKieX_.js → variable-panel-C8vEDXm4.js} +1 -1
  245. package/dist/assets/{vega-component-CjT5sun6.js → vega-component-BRGu_yST.js} +1 -1
  246. package/dist/assets/{vue-CKT9nSbH.js → vue--gIeQjr8.js} +1 -1
  247. package/dist/assets/vue-B_HxT6r_.js +1 -0
  248. package/dist/assets/{vue-html-D18noJ-r.js → vue-html-C27ztYTf.js} +1 -1
  249. package/dist/assets/{vue-vine-Bnvz9iJZ.js → vue-vine-DI-ZXTmB.js} +1 -1
  250. package/dist/assets/xml-CeNgF7kS.js +1 -0
  251. package/dist/assets/{xml-BcMKyt_P.js → xml-DIxJIKCS.js} +1 -1
  252. package/dist/assets/{xsl-VK0PRWSO.js → xsl-4Sp2Mdn6.js} +1 -1
  253. package/dist/assets/{xychartDiagram-PRI3JC2R-CuBIRers.js → xychartDiagram-PRI3JC2R-CUU7ukP_.js} +1 -1
  254. package/dist/assets/yaml-Bqhzr1cU.js +1 -0
  255. package/dist/index.html +33 -34
  256. package/package.json +1 -1
  257. package/src/components/app-config/user-config-form.tsx +14 -1
  258. package/src/components/editor/chrome/components/contribute-snippet-button.tsx +22 -103
  259. package/src/components/editor/controls/duplicate-shortcut-banner.tsx +50 -0
  260. package/src/components/editor/controls/keyboard-shortcuts.tsx +25 -2
  261. package/src/components/editor/notebook-cell.tsx +4 -3
  262. package/src/components/editor/output/__tests__/ansi-reduce.test.ts +6 -6
  263. package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +3 -3
  264. package/src/components/pages/home-page.tsx +6 -0
  265. package/src/components/scratchpad/scratchpad.tsx +2 -1
  266. package/src/core/constants.ts +10 -0
  267. package/src/core/layout/useTogglePresenting.ts +69 -25
  268. package/src/core/state/__mocks__/mocks.ts +1 -0
  269. package/src/hooks/__tests__/useDuplicateShortcuts.test.ts +449 -0
  270. package/src/hooks/useDuplicateShortcuts.ts +145 -0
  271. package/src/plugins/impl/NumberPlugin.tsx +1 -1
  272. package/src/plugins/impl/__tests__/NumberPlugin.test.tsx +1 -1
  273. package/src/plugins/layout/NavigationMenuPlugin.tsx +24 -22
  274. package/src/utils/__tests__/json-parser.test.ts +1 -1
  275. package/dist/assets/angular-html-qOWu-bq5.js +0 -1
  276. package/dist/assets/app-config-button-CrQE8pCi.js +0 -1
  277. package/dist/assets/c-DK7yxhEk.js +0 -1
  278. package/dist/assets/channel-OTfZ1-1I.js +0 -1
  279. package/dist/assets/chat-panel-CGsuZ5Go.js +0 -3
  280. package/dist/assets/chunk-55IACEB6-s81xpI0r.js +0 -1
  281. package/dist/assets/classDiagram-2ON5EDUG-XevY1wkt.js +0 -1
  282. package/dist/assets/classDiagram-v2-WZHVMYZB-DaUQ3aCS.js +0 -1
  283. package/dist/assets/cmake-DnKi9GbG.js +0 -1
  284. package/dist/assets/command-palette-DvhRIrgJ.js +0 -1
  285. package/dist/assets/cpp-DGKGBFed.js +0 -1
  286. package/dist/assets/csharp-DE0jZV2l.js +0 -1
  287. package/dist/assets/css-CsweFm2_.js +0 -1
  288. package/dist/assets/datasources-panel-BO36gzyB.js +0 -1
  289. package/dist/assets/diff-q90s40US.js +0 -1
  290. package/dist/assets/form-BjObeC0h.js +0 -1
  291. package/dist/assets/form-DTev0psg.js +0 -2
  292. package/dist/assets/fortran-free-form-HryIQ4W-.js +0 -1
  293. package/dist/assets/gdscript-Cfb7DTSE.js +0 -1
  294. package/dist/assets/gdshader-BNcJtWpI.js +0 -1
  295. package/dist/assets/glsl-k2CEL1ZR.js +0 -1
  296. package/dist/assets/go-DDeMiLXS.js +0 -1
  297. package/dist/assets/graphql-BOuQbvtY.js +0 -1
  298. package/dist/assets/haml-x4wHzfmM.js +0 -1
  299. package/dist/assets/haxe-Y8l9Vw7S.js +0 -1
  300. package/dist/assets/hlsl-BC9vLe5i.js +0 -1
  301. package/dist/assets/home-page-DPyNY7-N.js +0 -4
  302. package/dist/assets/html-6zcPP9vQ.js +0 -1
  303. package/dist/assets/html-derivative-CZ_iVBpw.js +0 -1
  304. package/dist/assets/java-D0JYojV3.js +0 -1
  305. package/dist/assets/javascript-fnYBTrQU.js +0 -1
  306. package/dist/assets/json-DdkjtEAy.js +0 -1
  307. package/dist/assets/jsx-BRHOEKay.js +0 -1
  308. package/dist/assets/lazy-KZ8U4iLp.js +0 -2
  309. package/dist/assets/less-D8ABr8rk.js +0 -1
  310. package/dist/assets/links-BlVLDD3s.js +0 -1
  311. package/dist/assets/lua-DVEqmH0Q.js +0 -1
  312. package/dist/assets/markdown-YxR0PAO-.js +0 -1
  313. package/dist/assets/mermaid.core-DXVTV2Hj.js +0 -1
  314. package/dist/assets/packages-panel-DmcUg1VD.js +0 -1
  315. package/dist/assets/php-CF0VHhQN.js +0 -1
  316. package/dist/assets/postcss-DBPrVyi7.js +0 -1
  317. package/dist/assets/python-q_66F1lX.js +0 -1
  318. package/dist/assets/react-vega-BwyCQsXO.js +0 -1
  319. package/dist/assets/regexp-BO0NINwb.js +0 -1
  320. package/dist/assets/ruby-BS61p2-p.js +0 -1
  321. package/dist/assets/scratchpad-panel-BSZ3o7dX.js +0 -1
  322. package/dist/assets/scss-DtVaFBIG.js +0 -1
  323. package/dist/assets/sdbl-n1NYlSsH.js +0 -1
  324. package/dist/assets/shellscript-B9GqbbDf.js +0 -1
  325. package/dist/assets/snippets-panel-U33d2abo.js +0 -1
  326. package/dist/assets/sql-DYHm1Gmq.js +0 -1
  327. package/dist/assets/state-C0NcdwFM.js +0 -1
  328. package/dist/assets/stateDiagram-v2-4FDKWEC3-BcvK7_p4.js +0 -1
  329. package/dist/assets/stylus-BotWR-Ny.js +0 -1
  330. package/dist/assets/tex-DjXSwZnW.js +0 -1
  331. package/dist/assets/textarea-BOYy-qvB.js +0 -1
  332. package/dist/assets/tsx-DtNi9Nb6.js +0 -1
  333. package/dist/assets/turtle-DYkY6F5e.js +0 -1
  334. package/dist/assets/typescript-BV-JiWcR.js +0 -1
  335. package/dist/assets/useNotebookActions-Cm45caIw.js +0 -1
  336. package/dist/assets/vue-tjC6Sbnx.js +0 -1
  337. package/dist/assets/xml-C2l9gxhy.js +0 -1
  338. package/dist/assets/yaml-4s6R0_yj.js +0 -1
  339. /package/dist/assets/{ImageComparisonComponent-D3YD6U99.js → ImageComparisonComponent-K5BS8sdE.js} +0 -0
  340. /package/dist/assets/{Inputs-DoHz4Ac3.js → Inputs-DvhARDSy.js} +0 -0
  341. /package/dist/assets/{TinyCode-Cao0NuXg.js → TinyCode-x_5B700C.js} +0 -0
  342. /package/dist/assets/{abap-DxePiFXy.js → abap-D1Z-L_5q.js} +0 -0
  343. /package/dist/assets/{actionscript-3-loviFdIr.js → actionscript-3-D54xMgAT.js} +0 -0
  344. /package/dist/assets/{ada-BHYSdrTr.js → ada-JV3xjdTK.js} +0 -0
  345. /package/dist/assets/{andromeeda-D4KLNorU.js → andromeeda-CDvHizgn.js} +0 -0
  346. /package/dist/assets/{any-language-editor-D81IZ5GK.js → any-language-editor-DuK-ILO6.js} +0 -0
  347. /package/dist/assets/{apache-Dub_2Yvr.js → apache-BZv9EbRt.js} +0 -0
  348. /package/dist/assets/{apex-CdLLfTKz.js → apex-Bd5xyvHz.js} +0 -0
  349. /package/dist/assets/{applescript-uRrY4stD.js → applescript-DIi4_Xi7.js} +0 -0
  350. /package/dist/assets/{ara-CuqrI37H.js → ara-BupzijwJ.js} +0 -0
  351. /package/dist/assets/{array-BLCDwreq.js → array-bj4GuPbJ.js} +0 -0
  352. /package/dist/assets/{asciidoc-LIbwK8dJ.js → asciidoc-1ZHD9O7I.js} +0 -0
  353. /package/dist/assets/{asm-BoI_VDIP.js → asm-BpvIZ69Y.js} +0 -0
  354. /package/dist/assets/{asterisk-B-OBxvds.js → asterisk-DiARfDaC.js} +0 -0
  355. /package/dist/assets/{aurora-x-BxnuLyJ0.js → aurora-x-Br-m95KW.js} +0 -0
  356. /package/dist/assets/{awk-BX7Qs7iG.js → awk-Cyd7xl0x.js} +0 -0
  357. /package/dist/assets/{ayu-dark-DQpZZSnB.js → ayu-dark-CN25i7B4.js} +0 -0
  358. /package/dist/assets/{ballerina-CoqJei6s.js → ballerina-DMqwvGaL.js} +0 -0
  359. /package/dist/assets/{bat-BDhPfOcC.js → bat-BXAhszio.js} +0 -0
  360. /package/dist/assets/{beancount-CPXtIDDe.js → beancount-DwTwPpP0.js} +0 -0
  361. /package/dist/assets/{berry-tZMHhl5s.js → berry-BpYXyvjy.js} +0 -0
  362. /package/dist/assets/{bibtex-MJ4zGLoW.js → bibtex-ISeJbbs3.js} +0 -0
  363. /package/dist/assets/{bicep-Cbjc1EE1.js → bicep-CUWX3w6F.js} +0 -0
  364. /package/dist/assets/{c-CXCYKfDi.js → c-B3hbGfdD.js} +0 -0
  365. /package/dist/assets/{cadence-DXVwaoxC.js → cadence-CwMWcknp.js} +0 -0
  366. /package/dist/assets/{catppuccin-frappe-Dq3-TlMz.js → catppuccin-frappe-DlIq2PyH.js} +0 -0
  367. /package/dist/assets/{catppuccin-latte-BHbMv0gf.js → catppuccin-latte-DfbG9iiU.js} +0 -0
  368. /package/dist/assets/{catppuccin-macchiato-BR3V9GdK.js → catppuccin-macchiato-BCT9pBsM.js} +0 -0
  369. /package/dist/assets/{catppuccin-mocha-_q9HZHtP.js → catppuccin-mocha-C-3tcdmj.js} +0 -0
  370. /package/dist/assets/{chat-components-CGtn3dSB.js → chat-components-DzWMl02B.js} +0 -0
  371. /package/dist/assets/{chunk-6MN3ZHY7-BaGu-E-4.js → chunk-6MN3ZHY7-Db4OXWfQ.js} +0 -0
  372. /package/dist/assets/{chunk-76Q3JFCE-CqxV2TaJ.js → chunk-76Q3JFCE-MoKVUmPd.js} +0 -0
  373. /package/dist/assets/{chunk-FWNWRKHM-Dy8-EtNA.js → chunk-FWNWRKHM-CAStKZ1H.js} +0 -0
  374. /package/dist/assets/{chunk-LBM3YZW2-CskV0o9K.js → chunk-LBM3YZW2-DECJ0RIr.js} +0 -0
  375. /package/dist/assets/{chunk-LHMN2FUI-ehm0Evo6.js → chunk-LHMN2FUI-CZFxxXco.js} +0 -0
  376. /package/dist/assets/{chunk-O7ZBX7Z2-C-g5bK2c.js → chunk-O7ZBX7Z2-B5IhsoVf.js} +0 -0
  377. /package/dist/assets/{chunk-S6J4BHB3-DPUJrVeh.js → chunk-S6J4BHB3-1pPGBAFs.js} +0 -0
  378. /package/dist/assets/{chunk-T53DSG4Q-Dv0rCIuT.js → chunk-T53DSG4Q-BBZDImTa.js} +0 -0
  379. /package/dist/assets/{clarity-CJjyLoBB.js → clarity-C_Q3Q1C_.js} +0 -0
  380. /package/dist/assets/{clear-button-BKX-NUB4.js → clear-button-DJ8_0gR3.js} +0 -0
  381. /package/dist/assets/{click-outside-container-DetGE8-X.js → click-outside-container-MMVNWqLS.js} +0 -0
  382. /package/dist/assets/{clojure-DXtjxNRs.js → clojure-CH1e77ix.js} +0 -0
  383. /package/dist/assets/{cmake-D91H72Gs.js → cmake-Dgb5Lyq9.js} +0 -0
  384. /package/dist/assets/{codeowners-orA2uJoI.js → codeowners-DOFJDUHD.js} +0 -0
  385. /package/dist/assets/{codeql-DFjnPoB5.js → codeql-CtuYP9qg.js} +0 -0
  386. /package/dist/assets/{colors-DdaNPisK.js → colors-B9JZ1tur.js} +0 -0
  387. /package/dist/assets/{common-keywords-jeunqxtr.js → common-keywords-SbjdiiT2.js} +0 -0
  388. /package/dist/assets/{common-lisp-BGI4U1eD.js → common-lisp-DzktjHXv.js} +0 -0
  389. /package/dist/assets/{constants-BMMfj8a0.js → constants-jbSFyU5S.js} +0 -0
  390. /package/dist/assets/{coq-pUDHcqnM.js → coq-tzTPg-q2.js} +0 -0
  391. /package/dist/assets/{csharp-DO2e9dSM.js → csharp-CAyFH1uq.js} +0 -0
  392. /package/dist/assets/{css-DtKkbFBH.js → css-ZSA9R7AF.js} +0 -0
  393. /package/dist/assets/{csv-DyNeMINd.js → csv-De4jsG8p.js} +0 -0
  394. /package/dist/assets/{cue-BqeXqyDz.js → cue-DMLkv97W.js} +0 -0
  395. /package/dist/assets/{cypher-BsFgydv-.js → cypher-Ceemj-Is.js} +0 -0
  396. /package/dist/assets/{cytoscape.esm--kAy4Luj.js → cytoscape.esm-asoeCsL1.js} +0 -0
  397. /package/dist/assets/{d-C1srouON.js → d-CdX2Porx.js} +0 -0
  398. /package/dist/assets/{dark-plus-BaRJAIpI.js → dark-plus-qMpINP2g.js} +0 -0
  399. /package/dist/assets/{dart-CtVHE7nw.js → dart-COmex10B.js} +0 -0
  400. /package/dist/assets/{dax-iZqzS7ix.js → dax-DJ47sIed.js} +0 -0
  401. /package/dist/assets/{desktop-BAj6OCw6.js → desktop-DY7N7KdY.js} +0 -0
  402. /package/dist/assets/{diff-Bq0z3j0u.js → diff-DkDLU4Wy.js} +0 -0
  403. /package/dist/assets/{dist-C3NfsvPr.js → dist-D0SBdfFe.js} +0 -0
  404. /package/dist/assets/{dist-PMig389l.js → dist-Dr2c9ly3.js} +0 -0
  405. /package/dist/assets/{dist-_Q2jiHxJ.js → dist-H3OKX6lq.js} +0 -0
  406. /package/dist/assets/{dist-BmUQz5fw.js → dist-Sjq7q5Ez.js} +0 -0
  407. /package/dist/assets/{dist-Defk0C2q.js → dist-W1ShJE5f.js} +0 -0
  408. /package/dist/assets/{docker-Cr2CnLQ2.js → docker-B2CjJVhm.js} +0 -0
  409. /package/dist/assets/{dockerfile-C762TJXL.js → dockerfile-B_QLo1At.js} +0 -0
  410. /package/dist/assets/{dotenv-KU02onGh.js → dotenv-Cyagbxs1.js} +0 -0
  411. /package/dist/assets/{dracula-CvSC8Czt.js → dracula-CvV5-mag.js} +0 -0
  412. /package/dist/assets/{dracula-soft-B4J0PAvT.js → dracula-soft-PvQYCfkb.js} +0 -0
  413. /package/dist/assets/{dream-maker-B3Dm3pQl.js → dream-maker-B0_XeRpu.js} +0 -0
  414. /package/dist/assets/{duckdb-keywords-C79Zr-4E.js → duckdb-keywords-1LrL1yMB.js} +0 -0
  415. /package/dist/assets/{ebnf-Du2bRoLG.js → ebnf-dF3cEqvZ.js} +0 -0
  416. /package/dist/assets/{emacs-lisp-BdobIt1g.js → emacs-lisp-ChCDqZ1h.js} +0 -0
  417. /package/dist/assets/{empty-state-Q1kmIC8W.js → empty-state-C0F9aXq7.js} +0 -0
  418. /package/dist/assets/{esm-E62eMmKt.js → esm-i8Q6E3KX.js} +0 -0
  419. /package/dist/assets/{everforest-dark-rX5J0dkQ.js → everforest-dark-HrmalDfI.js} +0 -0
  420. /package/dist/assets/{everforest-light-Ds8wUCP6.js → everforest-light-CTgZ_gPY.js} +0 -0
  421. /package/dist/assets/{fcl-AN_7s6hb.js → fcl-B-rgLKAF.js} +0 -0
  422. /package/dist/assets/{fennel-DE_pVddn.js → fennel-MZxGNSrM.js} +0 -0
  423. /package/dist/assets/{fish-cjNcekQO.js → fish-DRCDgPk5.js} +0 -0
  424. /package/dist/assets/{fluent-DJr0gNkP.js → fluent-NvaHTkBM.js} +0 -0
  425. /package/dist/assets/{fortran-free-form-eUr81bMp.js → fortran-free-form-CdgvemYo.js} +0 -0
  426. /package/dist/assets/{gdscript-66Cf2nnq.js → gdscript-D-KniuQ4.js} +0 -0
  427. /package/dist/assets/{gdshader-BpCIw3Sv.js → gdshader-5lUCkj-c.js} +0 -0
  428. /package/dist/assets/{genie-DeyJF9Ze.js → genie-Dbfmdf17.js} +0 -0
  429. /package/dist/assets/{gherkin-fnQTohuB.js → gherkin-9NiplwFZ.js} +0 -0
  430. /package/dist/assets/{github-dark-uDumM3l4.js → github-dark-CxvE91gQ.js} +0 -0
  431. /package/dist/assets/{github-dark-default-DDVM0vOe.js → github-dark-default-1SCW2CGt.js} +0 -0
  432. /package/dist/assets/{github-dark-dimmed-iRg1V-7L.js → github-dark-dimmed-CJAUeRrR.js} +0 -0
  433. /package/dist/assets/{github-dark-high-contrast-C5-unF21.js → github-dark-high-contrast-CykF8Y7T.js} +0 -0
  434. /package/dist/assets/{github-light-DuiFVio6.js → github-light-ChCxt24M.js} +0 -0
  435. /package/dist/assets/{github-light-default-CmrjzqeI.js → github-light-default-RoBmoNdk.js} +0 -0
  436. /package/dist/assets/{github-light-high-contrast-CqfwEQNX.js → github-light-high-contrast-D_tUORxl.js} +0 -0
  437. /package/dist/assets/{gleam-DWpcZsx2.js → gleam-CP_METjM.js} +0 -0
  438. /package/dist/assets/{gnuplot-DPuXsSVA.js → gnuplot-Doud-VAQ.js} +0 -0
  439. /package/dist/assets/{go-RRaiDSpA.js → go-CNGyJWjZ.js} +0 -0
  440. /package/dist/assets/{groovy-DWAM6JNR.js → groovy-DVSHCuuj.js} +0 -0
  441. /package/dist/assets/{gruvbox-dark-hard-ZcheWvOc.js → gruvbox-dark-hard-qkid6bYx.js} +0 -0
  442. /package/dist/assets/{gruvbox-dark-medium-BADfnTRm.js → gruvbox-dark-medium-AtXDSk3i.js} +0 -0
  443. /package/dist/assets/{gruvbox-dark-soft-CoSCAPGu.js → gruvbox-dark-soft-AyAMMmM7.js} +0 -0
  444. /package/dist/assets/{gruvbox-light-hard-_daP3e07.js → gruvbox-light-hard-CTUpa453.js} +0 -0
  445. /package/dist/assets/{gruvbox-light-medium-B6EX0gu8.js → gruvbox-light-medium-DRd-CCVA.js} +0 -0
  446. /package/dist/assets/{gruvbox-light-soft-D71M2TiB.js → gruvbox-light-soft-B5_s24l8.js} +0 -0
  447. /package/dist/assets/{haskell-CbnANGVy.js → haskell-uYgJ4Z8d.js} +0 -0
  448. /package/dist/assets/{haxe-BCyu6f-Y.js → haxe-nhPqZkCg.js} +0 -0
  449. /package/dist/assets/{hcl-BrzU5nOA.js → hcl-DRH2AP2G.js} +0 -0
  450. /package/dist/assets/{hjson-nOuwQKVZ.js → hjson-770-uRQt.js} +0 -0
  451. /package/dist/assets/{hlsl-CSw5uEjR.js → hlsl-v-fW8xE0.js} +0 -0
  452. /package/dist/assets/{houston-BWAmWqDi.js → houston-BG3WemGs.js} +0 -0
  453. /package/dist/assets/{http-DgnuoVuu.js → http-yVvkAwUM.js} +0 -0
  454. /package/dist/assets/{hy-BX6LbTxm.js → hy-BQjdOFLb.js} +0 -0
  455. /package/dist/assets/{icon-32x32-CTeqBIMC.js → icon-32x32-BtZ5PsD0.js} +0 -0
  456. /package/dist/assets/{imba-YSUcRLzb.js → imba-BSA0-GwH.js} +0 -0
  457. /package/dist/assets/{ini-Cz_LajY8.js → ini-BSbqRFHk.js} +0 -0
  458. /package/dist/assets/{init-MQWkw9UL.js → init-CH1jaKcr.js} +0 -0
  459. /package/dist/assets/{java-BfNYa0tJ.js → java-De5awGet.js} +0 -0
  460. /package/dist/assets/{javascript-BJ0-m6fu.js → javascript-hAQlDAdU.js} +0 -0
  461. /package/dist/assets/{json-C1OKNpxm.js → json-Cqy3CSs1.js} +0 -0
  462. /package/dist/assets/{json5-B5zHZpXv.js → json5-DdnG7oJF.js} +0 -0
  463. /package/dist/assets/{jsonc-C8o88KUg.js → jsonc-WrScgXXk.js} +0 -0
  464. /package/dist/assets/{jsonl-DhMbCT_e.js → jsonl-BcQA_K38.js} +0 -0
  465. /package/dist/assets/{jsonnet-DHb50-fk.js → jsonnet-BfDPKcCs.js} +0 -0
  466. /package/dist/assets/{jssm-Cj9PYafd.js → jssm-S7SP4HO6.js} +0 -0
  467. /package/dist/assets/{jsx-CUti7cdn.js → jsx-BqUP8u50.js} +0 -0
  468. /package/dist/assets/{kanagawa-dragon-CcpjQ1rU.js → kanagawa-dragon-BAIXtD5S.js} +0 -0
  469. /package/dist/assets/{kanagawa-lotus-DgjqMG_f.js → kanagawa-lotus-zEsYpsSm.js} +0 -0
  470. /package/dist/assets/{kanagawa-wave-F7l1o1xb.js → kanagawa-wave-UNA8R8g6.js} +0 -0
  471. /package/dist/assets/{kotlin-D-g5849J.js → kotlin-Chs5n2bu.js} +0 -0
  472. /package/dist/assets/{kusto-9WeuGAhE.js → kusto-COKe-O_e.js} +0 -0
  473. /package/dist/assets/{laserwave-DLwMaxtK.js → laserwave-kT1H6lw-.js} +0 -0
  474. /package/dist/assets/{lean-Bba3V5Y9.js → lean-DUug0SwA.js} +0 -0
  475. /package/dist/assets/{less-DwYCcztn.js → less--oQJH9Q1.js} +0 -0
  476. /package/dist/assets/{light-plus-hdlJW_86.js → light-plus-DgdTskSs.js} +0 -0
  477. /package/dist/assets/{llvm-D98fD3Nh.js → llvm-BPj-c3p9.js} +0 -0
  478. /package/dist/assets/{log-BOd_fBKp.js → log-BH13g8Nw.js} +0 -0
  479. /package/dist/assets/{logo-Cm0FUGOF.js → logo-DNn5dvJc.js} +0 -0
  480. /package/dist/assets/{loro_wasm_bg-Cq3oLczA.js → loro_wasm_bg-Bzb1jHum.js} +0 -0
  481. /package/dist/assets/{luau-6zHmGhkW.js → luau-DL3sEuii.js} +0 -0
  482. /package/dist/assets/{make-U8HwnuHe.js → make-BdeTVDRa.js} +0 -0
  483. /package/dist/assets/{markdown-d7Cz4if8.js → markdown-vGgQFzW0.js} +0 -0
  484. /package/dist/assets/{material-theme-I6Y7OkaK.js → material-theme-CkoNJvCe.js} +0 -0
  485. /package/dist/assets/{material-theme-darker-CNcEf8sm.js → material-theme-darker-CB2doNe8.js} +0 -0
  486. /package/dist/assets/{material-theme-lighter-D3evP2su.js → material-theme-lighter-DuCJ6WZ5.js} +0 -0
  487. /package/dist/assets/{material-theme-ocean-CPEtfO_B.js → material-theme-ocean-DCuGJ6FB.js} +0 -0
  488. /package/dist/assets/{material-theme-palenight-D_u9ejG5.js → material-theme-palenight-CfuFbWVx.js} +0 -0
  489. /package/dist/assets/{math-CJEhL5Or.js → math-CqRXdPQw.js} +0 -0
  490. /package/dist/assets/{matlab-CEwZHCMo.js → matlab-akoGkA0O.js} +0 -0
  491. /package/dist/assets/{mdx-CO8y8wiY.js → mdx-DLxMURj7.js} +0 -0
  492. /package/dist/assets/{mermaid-DMV7PGFu.js → mermaid-CEVlDHkO.js} +0 -0
  493. /package/dist/assets/{mhchem-jH__Szog.js → mhchem-CLsIUv8b.js} +0 -0
  494. /package/dist/assets/{min-dark-Dag83Pcc.js → min-dark-IIJ-x9kz.js} +0 -0
  495. /package/dist/assets/{min-light-B50ygFVa.js → min-light-D2T-CjOQ.js} +0 -0
  496. /package/dist/assets/{mipsasm-DX3GgTT2.js → mipsasm-Ctoz7zuP.js} +0 -0
  497. /package/dist/assets/{mojo-BjZAp1JB.js → mojo-D8g11cZ6.js} +0 -0
  498. /package/dist/assets/{monokai-BCLA0yyf.js → monokai-ijJEF77N.js} +0 -0
  499. /package/dist/assets/{move-lI3LwkmI.js → move-CB8XiRFg.js} +0 -0
  500. /package/dist/assets/{multi-icon-Du4jZia9.js → multi-icon-BghmJYOx.js} +0 -0
  501. /package/dist/assets/{narrat-fKgCSVgL.js → narrat-CIBCqQK9.js} +0 -0
  502. /package/dist/assets/{nextflow-oneXHs3b.js → nextflow-BS0FFmxq.js} +0 -0
  503. /package/dist/assets/{nginx-BsgJS-4H.js → nginx-BJ0Q8Eme.js} +0 -0
  504. /package/dist/assets/{night-owl-gYOT99lk.js → night-owl-CIsIp5O3.js} +0 -0
  505. /package/dist/assets/{nix-CC0kcI7F.js → nix-C1QvDerr.js} +0 -0
  506. /package/dist/assets/{nord-C_aPIcqR.js → nord-D1sb3CmD.js} +0 -0
  507. /package/dist/assets/{nushell-CP-Gie43.js → nushell-CXLz08Lx.js} +0 -0
  508. /package/dist/assets/{objective-c-b6Zsv9Ym.js → objective-c-B_HUYiGQ.js} +0 -0
  509. /package/dist/assets/{objective-cpp-BD265VSU.js → objective-cpp-DW9bw8lt.js} +0 -0
  510. /package/dist/assets/{ocaml-BCGy2li-.js → ocaml-KWnRg_uN.js} +0 -0
  511. /package/dist/assets/{one-dark-pro-DkCruvRZ.js → one-dark-pro-BaVvieuD.js} +0 -0
  512. /package/dist/assets/{one-light-G7zLNBR4.js → one-light-lH2J1XQJ.js} +0 -0
  513. /package/dist/assets/{pascal-Ho8hIYey.js → pascal-ClnlVJPk.js} +0 -0
  514. /package/dist/assets/{path-Whqm9ggf.js → path-B7okaUWq.js} +0 -0
  515. /package/dist/assets/{plastic-Du1swyNU.js → plastic-DuR5v6Wc.js} +0 -0
  516. /package/dist/assets/{plsql-CT7rXBpG.js → plsql-DgP3xvUq.js} +0 -0
  517. /package/dist/assets/{po-czm9byVG.js → po-DU1OdSeR.js} +0 -0
  518. /package/dist/assets/{poimandres-D78SF0Pk.js → poimandres-CyWDVjZC.js} +0 -0
  519. /package/dist/assets/{polar-DxmE_2om.js → polar-Dd9fJQjn.js} +0 -0
  520. /package/dist/assets/{postcss-Dle6gmTk.js → postcss-D4Q_M6OS.js} +0 -0
  521. /package/dist/assets/{powerquery-DkWimkCS.js → powerquery-CLLesowi.js} +0 -0
  522. /package/dist/assets/{powershell-C-NBx5WM.js → powershell-DHd7gEZS.js} +0 -0
  523. /package/dist/assets/{prisma-DVVbwJf5.js → prisma-CMDJZhIH.js} +0 -0
  524. /package/dist/assets/{prolog-CuCKoun9.js → prolog-BBkWPVLS.js} +0 -0
  525. /package/dist/assets/{proto-sz0WkDoC.js → proto-DMZFD88l.js} +0 -0
  526. /package/dist/assets/{puppet-Dkhn3sn4.js → puppet-BRhdqd5E.js} +0 -0
  527. /package/dist/assets/{purescript-B1I6EIa6.js → purescript-CEd64Rnc.js} +0 -0
  528. /package/dist/assets/{python-o2F1Etvb.js → python-BaVivF5K.js} +0 -0
  529. /package/dist/assets/{qmldir-CuqHMvOy.js → qmldir-C1aL24FM.js} +0 -0
  530. /package/dist/assets/{qss-C3E5pKGW.js → qss-Cdx18Xax.js} +0 -0
  531. /package/dist/assets/{r-CTyfvtqP.js → r-CtoJYLo-.js} +0 -0
  532. /package/dist/assets/{racket-gWP07v-p.js → racket-CwO0Lr2J.js} +0 -0
  533. /package/dist/assets/{raku-Uricbtek.js → raku-DDSWLJPm.js} +0 -0
  534. /package/dist/assets/{react-plotly-DDLpxvn5.js → react-plotly-DKr4J-io.js} +0 -0
  535. /package/dist/assets/{red-C5FdDgHI.js → red-BfwQnrVf.js} +0 -0
  536. /package/dist/assets/{reg-C7J3B58q.js → reg-Cf6RGOkx.js} +0 -0
  537. /package/dist/assets/{regexp-C1TUIf6h.js → regexp-BYhcVMQ-.js} +0 -0
  538. /package/dist/assets/{rel-CLkNsjPn.js → rel-j0w3UkgS.js} +0 -0
  539. /package/dist/assets/{request-registry-DMm1Lqvw.js → request-registry-B_gRKz92.js} +0 -0
  540. /package/dist/assets/{requests-DwcRL3oc.js → requests-DahrJP1H.js} +0 -0
  541. /package/dist/assets/{riscv-BDDxN-GM.js → riscv-ByXk41Qm.js} +0 -0
  542. /package/dist/assets/{rose-pine-B0GKpd9B.js → rose-pine-DqgHatX7.js} +0 -0
  543. /package/dist/assets/{rose-pine-dawn-DreZFsmm.js → rose-pine-dawn-CM4MUJgI.js} +0 -0
  544. /package/dist/assets/{rose-pine-moon-1ofUK8uz.js → rose-pine-moon-CHBhcNNY.js} +0 -0
  545. /package/dist/assets/{runs-ktQuNucz.js → runs-CaPopRXH.js} +0 -0
  546. /package/dist/assets/{rust-HFHVPrUY.js → rust-OKxW0BES.js} +0 -0
  547. /package/dist/assets/{sass-TWWLiu7U.js → sass-C6vf7Dvi.js} +0 -0
  548. /package/dist/assets/{scala-MKsUm-uW.js → scala-CUwoZYlq.js} +0 -0
  549. /package/dist/assets/{scheme-BoPdLMBn.js → scheme-DNpnyiZP.js} +0 -0
  550. /package/dist/assets/{sdbl-Dczl6J-p.js → sdbl-B3CmJ4_s.js} +0 -0
  551. /package/dist/assets/{shellscript-CsoyuLD9.js → shellscript-DOy2nPFr.js} +0 -0
  552. /package/dist/assets/{slack-dark-BGKxO96g.js → slack-dark-Dt_0Md1_.js} +0 -0
  553. /package/dist/assets/{slack-ochin-rH4j_MGJ.js → slack-ochin-C1pvDiLv.js} +0 -0
  554. /package/dist/assets/{slides-component-Cah21n3w.js → slides-component-BpP55T4f.js} +0 -0
  555. /package/dist/assets/{smalltalk-CTR0g6Eo.js → smalltalk-DeT6QCSw.js} +0 -0
  556. /package/dist/assets/{snazzy-light-CvG-GkvX.js → snazzy-light-CjXOb3HE.js} +0 -0
  557. /package/dist/assets/{solarized-dark-DGJyER8s.js → solarized-dark-DIymRRun.js} +0 -0
  558. /package/dist/assets/{solarized-light-CXpzAEuU.js → solarized-light-C9bfe0pM.js} +0 -0
  559. /package/dist/assets/{solidity-F1C0jU35.js → solidity-Df1--CzQ.js} +0 -0
  560. /package/dist/assets/{solr-D_MwF19e.js → solr-22vMYYBB.js} +0 -0
  561. /package/dist/assets/{splunk-CcWfAxQh.js → splunk-GMtHe9Ud.js} +0 -0
  562. /package/dist/assets/{spreadsheet-DK4de3zi.js → spreadsheet-6pcF7kl3.js} +0 -0
  563. /package/dist/assets/{sql-BZL3rKzd.js → sql-B_5kbdRZ.js} +0 -0
  564. /package/dist/assets/{sql-DGjfNEBw.js → sql-CtdBWFvz.js} +0 -0
  565. /package/dist/assets/{src-cSe6DUft.js → src-BgRVyE5A.js} +0 -0
  566. /package/dist/assets/{ssh-config-BFXbz4pv.js → ssh-config-BAZgW9d2.js} +0 -0
  567. /package/dist/assets/{state-CcQ97JO_.js → state-LF49AOw7.js} +0 -0
  568. /package/dist/assets/{stylus-C5w_LTi4.js → stylus-BgsHecy0.js} +0 -0
  569. /package/dist/assets/{swift-B1AYZCjL.js → swift-BFTceoDT.js} +0 -0
  570. /package/dist/assets/{switch-DXZyYXuk.js → switch-BskylHTJ.js} +0 -0
  571. /package/dist/assets/{synthwave-84-ZAlpH9Ym.js → synthwave-84-BtbL421X.js} +0 -0
  572. /package/dist/assets/{system-verilog-DDQxypqF.js → system-verilog-eEv6Jl-G.js} +0 -0
  573. /package/dist/assets/{systemd-Bz3p_k3b.js → systemd-BAGTy3BE.js} +0 -0
  574. /package/dist/assets/{talonscript-DIxhFJMM.js → talonscript-CdbOsON7.js} +0 -0
  575. /package/dist/assets/{tasl-BqPjs6kw.js → tasl-Q2f-wQrD.js} +0 -0
  576. /package/dist/assets/{tcl-DdIfswmD.js → tcl-p_gBMeoR.js} +0 -0
  577. /package/dist/assets/{terraform-Bs_EshJ8.js → terraform-B54vlzKW.js} +0 -0
  578. /package/dist/assets/{tiddlywiki-BazK34jE.js → tiddlywiki-Cpw-vTdJ.js} +0 -0
  579. /package/dist/assets/{tiki-FVbW2x_-.js → tiki-RFHR5l3d.js} +0 -0
  580. /package/dist/assets/{timer-CjInJf90.js → timer-yuocpjOJ.js} +0 -0
  581. /package/dist/assets/{tokyo-night-BhO4uZ92.js → tokyo-night-Cx0X8b_T.js} +0 -0
  582. /package/dist/assets/{toml-C6QaSv9d.js → toml-Dv0Gb0wx.js} +0 -0
  583. /package/dist/assets/{treemap-C4MB7fhl.js → treemap-vyAuwhdg.js} +0 -0
  584. /package/dist/assets/{tsv-BAKfX8wv.js → tsv-Ut6uyypY.js} +0 -0
  585. /package/dist/assets/{tsx-aFodw_xS.js → tsx-D756ZH1Y.js} +0 -0
  586. /package/dist/assets/{turtle-D5Y7qw_i.js → turtle-DvlqL4De.js} +0 -0
  587. /package/dist/assets/{types-9ZxV92yA.js → types-BKy85QqA.js} +0 -0
  588. /package/dist/assets/{typescript-CbzbRIOY.js → typescript-Bjkeag3f.js} +0 -0
  589. /package/dist/assets/{typespec-DMsY6JbU.js → typespec-l75HlZAh.js} +0 -0
  590. /package/dist/assets/{typst-CvWWmKf3.js → typst-D5DOy-Nw.js} +0 -0
  591. /package/dist/assets/{useInterval-BlrlAz25.js → useInterval-DIIyxDFF.js} +0 -0
  592. /package/dist/assets/{v-BETRwRCQ.js → v-BRTHAjS3.js} +0 -0
  593. /package/dist/assets/{vala-PKPtNQTj.js → vala-B4SSIQsl.js} +0 -0
  594. /package/dist/assets/{vb-CxRBS5lI.js → vb-BKRIf9S9.js} +0 -0
  595. /package/dist/assets/{verilog-BvRlaZ0s.js → verilog-YDWw5rF_.js} +0 -0
  596. /package/dist/assets/{vesper-CAgzRfn0.js → vesper-B-uz6_AN.js} +0 -0
  597. /package/dist/assets/{vhdl-WKARZqAU.js → vhdl-e7mgPsnL.js} +0 -0
  598. /package/dist/assets/{viml-OELtdek0.js → viml-X__Ssn6B.js} +0 -0
  599. /package/dist/assets/{vitesse-black-DxUt4R-X.js → vitesse-black-DubupWa_.js} +0 -0
  600. /package/dist/assets/{vitesse-dark-B89R9-Iv.js → vitesse-dark-BYulCnOh.js} +0 -0
  601. /package/dist/assets/{vitesse-light-Df6Ywkh7.js → vitesse-light-CXTtOKie.js} +0 -0
  602. /package/dist/assets/{vyper-r2Y73Yfh.js → vyper-DoyBGlNX.js} +0 -0
  603. /package/dist/assets/{wasm-HYAa6Rjp.js → wasm-C0nJmPb9.js} +0 -0
  604. /package/dist/assets/{wasm-Ceot4DBK.js → wasm-CZnstKSJ.js} +0 -0
  605. /package/dist/assets/{web-vitals-DDafkY2T.js → web-vitals-BDw5NjtZ.js} +0 -0
  606. /package/dist/assets/{wenyan-QngFPc2J.js → wenyan-BysEK3Da.js} +0 -0
  607. /package/dist/assets/{wgsl-D0ixO4MK.js → wgsl-CpajkF4Y.js} +0 -0
  608. /package/dist/assets/{wikitext-BRpFMAXk.js → wikitext-DBTabVkT.js} +0 -0
  609. /package/dist/assets/{wit-CkCowzVv.js → wit-BH3jcuTQ.js} +0 -0
  610. /package/dist/assets/{wolfram-7TSQgFp_.js → wolfram-vVLgt4lx.js} +0 -0
  611. /package/dist/assets/{write-secret-modal-CkdOk4az.js → write-secret-modal-aHYEAoIY.js} +0 -0
  612. /package/dist/assets/{ws-DG2NUHhQ.js → ws-BUeGIU5G.js} +0 -0
  613. /package/dist/assets/{yaml-Dt1mYd6v.js → yaml-xeznevN1.js} +0 -0
  614. /package/dist/assets/{zenscript-DtbxcJSn.js → zenscript-DIrhsqy-.js} +0 -0
  615. /package/dist/assets/{zig-fIW36tqn.js → zig-Di5wxjmq.js} +0 -0
@@ -534,13 +534,13 @@ describe("AnsiReducer streaming with append()", () => {
534
534
  describe("AnsiReducer color preservation", () => {
535
535
  const CASES = [
536
536
  // SGR sequences
537
- "\u001b[34mBlue text\u001b[m normal text\u001b[31mRed text\u001b[0m",
537
+ "\u001B[34mBlue text\u001B[m normal text\u001B[31mRed text\u001B[0m",
538
538
  // Complex SGR with parameters
539
- "\u001b[1;31mBold Red\u001b[0m \u001b[48;5;240mGray bg\u001b[0m",
539
+ "\u001B[1;31mBold Red\u001B[0m \u001B[48;5;240mGray bg\u001B[0m",
540
540
  // Character set selection
541
- "Text\u001b(BMore\u001b(0Graphics\u001b(B",
541
+ "Text\u001B(BMore\u001B(0Graphics\u001B(B",
542
542
  // Complex case
543
- "\u001b[34m[D 251201 15:32:24 cell_runner:695]\u001b(B\u001b[m Running post_execution hooks in context\n\u001b[34m[D 251201 15:32:24 hooks_post_execution:65]\u001b(B\u001b[m Acquiring graph lock to update cell import workspace\n\u001b[34m[D 251201 15:32:24 hooks_post_execution:67]\u001b(B\u001b[m Acquired graph lock to update import workspace.\n",
543
+ "\u001B[34m[D 251201 15:32:24 cell_runner:695]\u001B(B\u001B[m Running post_execution hooks in context\n\u001B[34m[D 251201 15:32:24 hooks_post_execution:65]\u001B(B\u001B[m Acquiring graph lock to update cell import workspace\n\u001B[34m[D 251201 15:32:24 hooks_post_execution:67]\u001B(B\u001B[m Acquired graph lock to update import workspace.\n",
544
544
  ];
545
545
 
546
546
  test.each(CASES)("preserves ANSI color codes", (input) => {
@@ -554,12 +554,12 @@ describe("AnsiReducer color preservation", () => {
554
554
  // Test that color codes work alongside cursor movements
555
555
  // Note: when cursor moves up, lines below are discarded (tqdm behavior)
556
556
  const result = reducer.reduce(
557
- "Line1\n\u001b[31mRed\u001b[0m\u001b[1A\u001b[32mGreen\u001b[0m",
557
+ "Line1\n\u001B[31mRed\u001B[0m\u001B[1A\u001B[32mGreen\u001B[0m",
558
558
  );
559
559
  // After moving up from row 1 to row 0, row 1 is discarded
560
560
  // Green is written at the end of row 0
561
561
  expect(result).toMatchInlineSnapshot(
562
- `"Line1 \u001b[32mGreen\u001b[0m"`,
562
+ `"Line1 \u001B[32mGreen\u001B[0m"`,
563
563
  );
564
564
  });
565
565
  });
@@ -29,7 +29,7 @@ import { isOutputEmpty } from "@/core/cells/outputs";
29
29
  import type { CellData, CellRuntimeState } from "@/core/cells/types";
30
30
  import { MarkdownLanguageAdapter } from "@/core/codemirror/language/languages/markdown";
31
31
  import { useResolvedMarimoConfig } from "@/core/config/config";
32
- import { KnownQueryParams } from "@/core/constants";
32
+ import { CSSClasses, KnownQueryParams } from "@/core/constants";
33
33
  import type { OutputMessage } from "@/core/kernel/messages";
34
34
  import { showCodeInRunModeAtom } from "@/core/meta/state";
35
35
  import { isErrorMime } from "@/core/mime";
@@ -339,7 +339,7 @@ const VerticalCell = memo(
339
339
  <OutputArea
340
340
  allowExpand={true}
341
341
  output={output}
342
- className="output-area"
342
+ className={CSSClasses.outputArea}
343
343
  cellId={cellId}
344
344
  stale={outputStale}
345
345
  loading={loading}
@@ -394,7 +394,7 @@ const VerticalCell = memo(
394
394
  <OutputArea
395
395
  allowExpand={mode === "edit"}
396
396
  output={output}
397
- className="output-area"
397
+ className={CSSClasses.outputArea}
398
398
  cellId={cellId}
399
399
  stale={outputStale}
400
400
  loading={loading}
@@ -169,6 +169,12 @@ const WorkspaceNotebooks: React.FC = () => {
169
169
  return (
170
170
  <WorkspaceRootContext value={workspace.root}>
171
171
  <div className="flex flex-col gap-2">
172
+ {workspace.hasMore && (
173
+ <Banner kind="warn" className="rounded p-4">
174
+ Showing first {workspace.fileCount} files. Your workspace has more
175
+ files.
176
+ </Banner>
177
+ )}
172
178
  <Header
173
179
  Icon={BookTextIcon}
174
180
  control={
@@ -17,6 +17,7 @@ import { HTMLCellId, SCRATCH_CELL_ID } from "@/core/cells/ids";
17
17
  import { DEFAULT_CELL_NAME } from "@/core/cells/names";
18
18
  import type { LanguageAdapterType } from "@/core/codemirror/language/types";
19
19
  import { useResolvedMarimoConfig } from "@/core/config/config";
20
+ import { CSSClasses } from "@/core/constants";
20
21
  import { useRequestClient } from "@/core/network/requests";
21
22
  import type { CellConfig } from "@/core/network/types";
22
23
  import { LazyAnyLanguageCodeMirror } from "@/plugins/impl/code/LazyAnyLanguageCodeMirror";
@@ -149,7 +150,7 @@ export const ScratchPad: React.FC = () => {
149
150
  <OutputArea
150
151
  allowExpand={false}
151
152
  output={output}
152
- className="output-area"
153
+ className={CSSClasses.outputArea}
153
154
  cellId={cellId}
154
155
  stale={false}
155
156
  loading={false}
@@ -50,3 +50,13 @@ export const KnownQueryParams = {
50
50
  */
51
51
  showChrome: "show-chrome",
52
52
  };
53
+
54
+ /**
55
+ * CSS class names used throughout the application
56
+ */
57
+ export const CSSClasses = {
58
+ /**
59
+ * Class name for cell output areas
60
+ */
61
+ outputArea: "output-area",
62
+ };
@@ -2,47 +2,91 @@
2
2
 
3
3
  import { useSetAtom } from "jotai";
4
4
  import { useCallback } from "react";
5
+ import { Logger } from "@/utils/Logger";
5
6
  import { type CellId, HTMLCellId } from "../cells/ids";
7
+ import { CSSClasses } from "../constants";
6
8
  import { toggleAppMode, viewStateAtom } from "../mode";
7
9
 
10
+ interface ScrollAnchor {
11
+ cellId: CellId;
12
+ }
13
+
14
+ function findScrollAnchor(): ScrollAnchor | null {
15
+ const outputAreas = document.getElementsByClassName(CSSClasses.outputArea);
16
+
17
+ for (const elem of Array.from(outputAreas)) {
18
+ const rect = elem.getBoundingClientRect();
19
+
20
+ // Find first visible output area
21
+ if (rect.bottom > 0 && rect.top < window.innerHeight) {
22
+ const cellEl = HTMLCellId.findElement(elem);
23
+ if (!cellEl) {
24
+ Logger.warn("Could not find HTMLCellId for visible output area", elem);
25
+ continue;
26
+ }
27
+ return {
28
+ cellId: HTMLCellId.parse(cellEl.id),
29
+ };
30
+ }
31
+ }
32
+
33
+ Logger.warn("No visible output area found for scroll anchor");
34
+ return null;
35
+ }
36
+
37
+ function restoreScrollPosition(anchor: ScrollAnchor | null): void {
38
+ if (!anchor) {
39
+ Logger.warn("No scroll anchor provided to restore scroll position");
40
+ return;
41
+ }
42
+
43
+ // Find the cell element
44
+ const cellElement = document.getElementById(HTMLCellId.create(anchor.cellId));
45
+ if (!cellElement) {
46
+ Logger.warn(
47
+ "Could not find cell element to restore scroll position",
48
+ anchor.cellId,
49
+ );
50
+ return;
51
+ }
52
+
53
+ // Find its output area
54
+ const outputArea = cellElement.querySelector(`.${CSSClasses.outputArea}`);
55
+ if (!outputArea) {
56
+ Logger.warn(
57
+ "Could not find output area to restore scroll position",
58
+ anchor.cellId,
59
+ );
60
+ return;
61
+ }
62
+
63
+ // Adjust scroll to restore visual position
64
+ cellElement.scrollIntoView({ block: "start", behavior: "auto" });
65
+ }
66
+
8
67
  /**
9
68
  * Toggle the notebook's presentation state and scroll to current visible cell
10
69
  */
11
70
  export function useTogglePresenting() {
12
71
  const setViewState = useSetAtom(viewStateAtom);
13
72
 
14
- // Toggle the array's presenting state, and sets a cell to scroll to
73
+ // Toggle the array's presenting state and preserve scroll position
15
74
  const togglePresenting = useCallback(() => {
16
- const outputAreas = document.getElementsByClassName("output-area");
17
- const viewportEnd =
18
- window.innerHeight || document.documentElement.clientHeight;
19
- let cellAnchor: CellId | null = null;
20
-
21
- // Find the first output area that is visible
22
- // eslint-disable-next-line unicorn/prefer-spread
23
- for (const elem of Array.from(outputAreas)) {
24
- const rect = elem.getBoundingClientRect();
25
- if (
26
- (rect.top >= 0 && rect.top <= viewportEnd) ||
27
- (rect.bottom >= 0 && rect.bottom <= viewportEnd)
28
- ) {
29
- cellAnchor = HTMLCellId.parse(
30
- (elem.parentNode as HTMLElement).id as HTMLCellId,
31
- );
32
- break;
33
- }
34
- }
75
+ // Capture scroll anchor BEFORE toggle
76
+ const scrollAnchor = findScrollAnchor();
35
77
 
78
+ // Toggle the mode
36
79
  setViewState((prev) => ({
37
80
  mode: toggleAppMode(prev.mode),
38
- cellAnchor: cellAnchor,
81
+ cellAnchor: scrollAnchor?.cellId ?? null,
39
82
  }));
40
83
 
84
+ // Restore scroll position AFTER DOM updates
85
+ // Double RAF ensures React commits changes and browser completes layout
41
86
  requestAnimationFrame(() => {
42
- if (cellAnchor === null) {
43
- return;
44
- }
45
- document.getElementById(HTMLCellId.create(cellAnchor))?.scrollIntoView();
87
+ requestAnimationFrame(() => {
88
+ restoreScrollPosition(scrollAnchor);
89
+ });
46
90
  });
47
91
  }, [setViewState]);
48
92
 
@@ -1,3 +1,4 @@
1
+ /* Copyright 2024 Marimo. All rights reserved. */
1
2
  import type { Observable } from "../observable";
2
3
 
3
4
  export function createMockObservable<T>(
@@ -0,0 +1,449 @@
1
+ /* Copyright 2024 Marimo. All rights reserved. */
2
+ import { describe, expect, it } from "vitest";
3
+ import {
4
+ type Hotkey,
5
+ type HotkeyAction,
6
+ HotkeyProvider,
7
+ } from "@/core/hotkeys/hotkeys";
8
+ import {
9
+ findDuplicateShortcuts,
10
+ normalizeShortcutKey,
11
+ } from "../useDuplicateShortcuts";
12
+
13
+ /**
14
+ * Helper to create a minimal hotkey configuration for testing.
15
+ */
16
+ function createHotkeys(
17
+ keys: Partial<Record<HotkeyAction, Hotkey>>,
18
+ ): Record<HotkeyAction, Hotkey> {
19
+ return new Proxy(keys as Record<HotkeyAction, Hotkey>, {
20
+ // biome-ignore lint: ok to have three arguments here (It's a web API)
21
+ get(target, p, receiver) {
22
+ const key = Reflect.get(target, p, receiver);
23
+ if (key === "undefined") {
24
+ throw new Error("Missing required hotkey.");
25
+ }
26
+ return key;
27
+ },
28
+ });
29
+ }
30
+
31
+ describe("normalizeShortcutKey", () => {
32
+ it("should convert to lowercase", () => {
33
+ expect(normalizeShortcutKey("Ctrl-Shift-A")).toBe("ctrl-shift-a");
34
+ expect(normalizeShortcutKey("MOD-ENTER")).toBe("mod-enter");
35
+ });
36
+
37
+ it("should replace + with -", () => {
38
+ expect(normalizeShortcutKey("Ctrl+Shift+A")).toBe("ctrl-shift-a");
39
+ expect(normalizeShortcutKey("Cmd+Enter")).toBe("cmd-enter");
40
+ });
41
+
42
+ it("should trim whitespace", () => {
43
+ expect(normalizeShortcutKey(" Ctrl-A ")).toBe("ctrl-a");
44
+ expect(normalizeShortcutKey(" Mod-Enter ")).toBe("mod-enter");
45
+ });
46
+
47
+ it("should handle mixed separators", () => {
48
+ expect(normalizeShortcutKey("Ctrl+Shift-A")).toBe("ctrl-shift-a");
49
+ expect(normalizeShortcutKey("Mod-Alt+K")).toBe("mod-alt-k");
50
+ });
51
+ });
52
+
53
+ describe("findDuplicateShortcuts", () => {
54
+ it("should detect no duplicates when all shortcuts are unique", () => {
55
+ const hotkeys = createHotkeys({
56
+ "cell.run": {
57
+ name: "Run cell",
58
+ group: "Running Cells",
59
+ key: "Mod-Enter",
60
+ },
61
+ "cell.format": {
62
+ name: "Format cell",
63
+ group: "Editing",
64
+ key: "Mod-b",
65
+ },
66
+ "cell.delete": {
67
+ name: "Delete cell",
68
+ group: "Editing",
69
+ key: "Shift-Backspace",
70
+ },
71
+ });
72
+
73
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
74
+ const result = findDuplicateShortcuts(provider);
75
+
76
+ expect(result.duplicates).toHaveLength(0);
77
+ expect(result.hasDuplicate("cell.run")).toBe(false);
78
+ expect(result.hasDuplicate("cell.format")).toBe(false);
79
+ expect(result.hasDuplicate("cell.delete")).toBe(false);
80
+ });
81
+
82
+ it("should detect duplicates when two actions share the same key", () => {
83
+ const hotkeys = createHotkeys({
84
+ "cell.format": {
85
+ name: "Format cell",
86
+ group: "Editing",
87
+ key: "Mod-b",
88
+ },
89
+ "markdown.bold": {
90
+ name: "Bold",
91
+ group: "Markdown",
92
+ key: "Mod-b",
93
+ },
94
+ "cell.run": {
95
+ name: "Run cell",
96
+ group: "Running Cells",
97
+ key: "Mod-Enter",
98
+ },
99
+ });
100
+
101
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
102
+ const result = findDuplicateShortcuts(provider);
103
+
104
+ expect(result.duplicates).toHaveLength(1);
105
+ expect(result.duplicates[0].key).toBe("cmd-b");
106
+ expect(result.duplicates[0].actions).toHaveLength(2);
107
+
108
+ expect(result.hasDuplicate("cell.format")).toBe(true);
109
+ expect(result.hasDuplicate("markdown.bold")).toBe(true);
110
+ expect(result.hasDuplicate("cell.run")).toBe(false);
111
+ });
112
+
113
+ it("should detect multiple duplicate groups", () => {
114
+ const hotkeys = createHotkeys({
115
+ "cell.format": {
116
+ name: "Format cell",
117
+ group: "Editing",
118
+ key: "Mod-b",
119
+ },
120
+ "markdown.bold": {
121
+ name: "Bold",
122
+ group: "Markdown",
123
+ key: "Mod-b",
124
+ },
125
+ "cell.run": {
126
+ name: "Run cell",
127
+ group: "Running Cells",
128
+ key: "Mod-Enter",
129
+ },
130
+ "cell.complete": {
131
+ name: "Code completion",
132
+ group: "Editing",
133
+ key: "Ctrl-Space",
134
+ },
135
+ "cell.signatureHelp": {
136
+ name: "Signature help",
137
+ group: "Editing",
138
+ key: "Mod-Enter",
139
+ },
140
+ });
141
+
142
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
143
+ const result = findDuplicateShortcuts(provider);
144
+
145
+ expect(result.duplicates).toHaveLength(2);
146
+
147
+ // Check that both duplicate groups are detected
148
+ const duplicateKeys = result.duplicates.map((d) => d.key).sort();
149
+ expect(duplicateKeys).toEqual(["cmd-b", "cmd-enter"]);
150
+
151
+ expect(result.hasDuplicate("cell.format")).toBe(true);
152
+ expect(result.hasDuplicate("markdown.bold")).toBe(true);
153
+ expect(result.hasDuplicate("cell.run")).toBe(true);
154
+ expect(result.hasDuplicate("cell.signatureHelp")).toBe(true);
155
+ expect(result.hasDuplicate("cell.complete")).toBe(false);
156
+ });
157
+
158
+ it("should handle three or more actions with the same key", () => {
159
+ const hotkeys = createHotkeys({
160
+ "cell.format": {
161
+ name: "Format cell",
162
+ group: "Editing",
163
+ key: "Mod-k",
164
+ },
165
+ "markdown.link": {
166
+ name: "Convert to Link",
167
+ group: "Markdown",
168
+ key: "Mod-k",
169
+ },
170
+ "global.commandPalette": {
171
+ name: "Show command palette",
172
+ group: "Other",
173
+ key: "Mod-k",
174
+ },
175
+ });
176
+
177
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
178
+ const result = findDuplicateShortcuts(provider);
179
+
180
+ expect(result.duplicates).toHaveLength(1);
181
+ expect(result.duplicates[0].actions).toHaveLength(3);
182
+ expect(result.duplicates[0].key).toBe("cmd-k");
183
+ });
184
+
185
+ it("should ignore empty or unset shortcuts", () => {
186
+ const hotkeys = createHotkeys({
187
+ "cell.run": {
188
+ name: "Run cell",
189
+ group: "Running Cells",
190
+ key: "Mod-Enter",
191
+ },
192
+ "global.runAll": {
193
+ name: "Re-run all cells",
194
+ group: "Running Cells",
195
+ key: "",
196
+ },
197
+ "cell.format": {
198
+ name: "Format cell",
199
+ group: "Editing",
200
+ key: "Mod-b",
201
+ },
202
+ });
203
+
204
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
205
+ const result = findDuplicateShortcuts(provider);
206
+
207
+ expect(result.duplicates).toHaveLength(0);
208
+ expect(result.hasDuplicate("global.runAll")).toBe(false);
209
+ });
210
+
211
+ it("should normalize keys for comparison (case and separator insensitive)", () => {
212
+ const hotkeys = createHotkeys({
213
+ "cell.format": {
214
+ name: "Format cell",
215
+ group: "Editing",
216
+ key: "Cmd-B",
217
+ },
218
+ "markdown.bold": {
219
+ name: "Bold",
220
+ group: "Markdown",
221
+ key: "cmd+b",
222
+ },
223
+ });
224
+
225
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
226
+ const result = findDuplicateShortcuts(provider);
227
+
228
+ expect(result.duplicates).toHaveLength(1);
229
+ expect(result.duplicates[0].actions).toHaveLength(2);
230
+ });
231
+
232
+ it("getDuplicatesFor should return other actions with the same key", () => {
233
+ const hotkeys = createHotkeys({
234
+ "cell.format": {
235
+ name: "Format cell",
236
+ group: "Editing",
237
+ key: "Mod-b",
238
+ },
239
+ "markdown.bold": {
240
+ name: "Bold",
241
+ group: "Markdown",
242
+ key: "Mod-b",
243
+ },
244
+ "markdown.italic": {
245
+ name: "Italic",
246
+ group: "Markdown",
247
+ key: "Mod-i",
248
+ },
249
+ });
250
+
251
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
252
+ const result = findDuplicateShortcuts(provider);
253
+
254
+ const duplicatesForFormat = result.getDuplicatesFor("cell.format");
255
+ expect(duplicatesForFormat).toEqual(["markdown.bold"]);
256
+
257
+ const duplicatesForBold = result.getDuplicatesFor("markdown.bold");
258
+ expect(duplicatesForBold).toEqual(["cell.format"]);
259
+
260
+ const duplicatesForItalic = result.getDuplicatesFor("markdown.italic");
261
+ expect(duplicatesForItalic).toEqual([]);
262
+ });
263
+
264
+ it("getDuplicatesFor should return all other actions when three or more share a key", () => {
265
+ const hotkeys = createHotkeys({
266
+ "cell.format": {
267
+ name: "Format cell",
268
+ group: "Editing",
269
+ key: "Mod-k",
270
+ },
271
+ "markdown.link": {
272
+ name: "Convert to Link",
273
+ group: "Markdown",
274
+ key: "Mod-k",
275
+ },
276
+ "global.commandPalette": {
277
+ name: "Show command palette",
278
+ group: "Other",
279
+ key: "Mod-k",
280
+ },
281
+ });
282
+
283
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
284
+ const result = findDuplicateShortcuts(provider);
285
+
286
+ const duplicatesForFormat = result.getDuplicatesFor("cell.format");
287
+ expect(duplicatesForFormat).toHaveLength(2);
288
+ expect(duplicatesForFormat).toContain("markdown.link");
289
+ expect(duplicatesForFormat).toContain("global.commandPalette");
290
+ });
291
+
292
+ it("should respect platform-specific key overrides", () => {
293
+ const hotkeys = createHotkeys({
294
+ "cell.format": {
295
+ name: "Format cell",
296
+ group: "Editing",
297
+ key: {
298
+ main: "Mod-Shift-F",
299
+ mac: "Cmd-Option-F",
300
+ windows: "Ctrl-Alt-F",
301
+ },
302
+ },
303
+ "markdown.bold": {
304
+ name: "Bold",
305
+ group: "Markdown",
306
+ key: "Cmd-Option-F", // Duplicate on Mac only
307
+ },
308
+ });
309
+
310
+ const macProvider = new HotkeyProvider(hotkeys, { platform: "mac" });
311
+ const macResult = findDuplicateShortcuts(macProvider);
312
+ expect(macResult.duplicates).toHaveLength(1);
313
+ expect(macResult.hasDuplicate("cell.format")).toBe(true);
314
+ expect(macResult.hasDuplicate("markdown.bold")).toBe(true);
315
+
316
+ const windowsProvider = new HotkeyProvider(hotkeys, {
317
+ platform: "windows",
318
+ });
319
+ const windowsResult = findDuplicateShortcuts(windowsProvider);
320
+ expect(windowsResult.duplicates).toHaveLength(0);
321
+ expect(windowsResult.hasDuplicate("cell.format")).toBe(false);
322
+ expect(windowsResult.hasDuplicate("markdown.bold")).toBe(false);
323
+ });
324
+
325
+ describe("ignoreGroup parameter", () => {
326
+ it("should ignore duplicates from the specified group", () => {
327
+ const hotkeys = createHotkeys({
328
+ "cell.format": {
329
+ name: "Format cell",
330
+ group: "Editing",
331
+ key: "Mod-b",
332
+ },
333
+ "markdown.bold": {
334
+ name: "Bold",
335
+ group: "Markdown",
336
+ key: "Mod-b",
337
+ },
338
+ "cell.run": {
339
+ name: "Run cell",
340
+ group: "Running Cells",
341
+ key: "Mod-Enter",
342
+ },
343
+ });
344
+
345
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
346
+ const result = findDuplicateShortcuts(provider, "Markdown");
347
+
348
+ // markdown.bold should be ignored, so no duplicates should be found
349
+ expect(result.duplicates).toHaveLength(0);
350
+ expect(result.hasDuplicate("cell.format")).toBe(false);
351
+ expect(result.hasDuplicate("markdown.bold")).toBe(false);
352
+ });
353
+
354
+ it("should still detect duplicates outside the ignored group", () => {
355
+ const hotkeys = createHotkeys({
356
+ "cell.format": {
357
+ name: "Format cell",
358
+ group: "Editing",
359
+ key: "Mod-b",
360
+ },
361
+ "markdown.bold": {
362
+ name: "Bold",
363
+ group: "Markdown",
364
+ key: "Mod-b",
365
+ },
366
+ "cell.run": {
367
+ name: "Run cell",
368
+ group: "Running Cells",
369
+ key: "Mod-Enter",
370
+ },
371
+ "cell.complete": {
372
+ name: "Code completion",
373
+ group: "Editing",
374
+ key: "Mod-Enter",
375
+ },
376
+ });
377
+
378
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
379
+ const result = findDuplicateShortcuts(provider, "Markdown");
380
+
381
+ // markdown.bold is ignored, but cell.run and cell.complete should still be detected
382
+ expect(result.duplicates).toHaveLength(1);
383
+ expect(result.duplicates[0].key).toBe("cmd-enter");
384
+ expect(result.hasDuplicate("cell.run")).toBe(true);
385
+ expect(result.hasDuplicate("cell.complete")).toBe(true);
386
+ expect(result.hasDuplicate("markdown.bold")).toBe(false);
387
+ expect(result.hasDuplicate("cell.format")).toBe(false);
388
+ });
389
+
390
+ it("should handle ignoring a group that doesn't exist", () => {
391
+ const hotkeys = createHotkeys({
392
+ "cell.format": {
393
+ name: "Format cell",
394
+ group: "Editing",
395
+ key: "Mod-b",
396
+ },
397
+ "markdown.bold": {
398
+ name: "Bold",
399
+ group: "Markdown",
400
+ key: "Mod-b",
401
+ },
402
+ });
403
+
404
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
405
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
406
+ const result = findDuplicateShortcuts(provider, "NonExistent" as any);
407
+
408
+ // Should still work normally and detect the duplicate
409
+ expect(result.duplicates).toHaveLength(1);
410
+ expect(result.hasDuplicate("cell.format")).toBe(true);
411
+ expect(result.hasDuplicate("markdown.bold")).toBe(true);
412
+ });
413
+
414
+ it("should ignore multiple actions from the same group", () => {
415
+ const hotkeys = createHotkeys({
416
+ "cell.format": {
417
+ name: "Format cell",
418
+ group: "Editing",
419
+ key: "Mod-b",
420
+ },
421
+ "markdown.bold": {
422
+ name: "Bold",
423
+ group: "Markdown",
424
+ key: "Mod-b",
425
+ },
426
+ "markdown.italic": {
427
+ name: "Italic",
428
+ group: "Markdown",
429
+ key: "Mod-i",
430
+ },
431
+ "cell.hideCode": {
432
+ name: "Hide cell code",
433
+ group: "Editing",
434
+ key: "Mod-i",
435
+ },
436
+ });
437
+
438
+ const provider = new HotkeyProvider(hotkeys, { platform: "mac" });
439
+ const result = findDuplicateShortcuts(provider, "Markdown");
440
+
441
+ // Both markdown actions should be ignored
442
+ expect(result.duplicates).toHaveLength(0);
443
+ expect(result.hasDuplicate("cell.format")).toBe(false);
444
+ expect(result.hasDuplicate("cell.hideCode")).toBe(false);
445
+ expect(result.hasDuplicate("markdown.bold")).toBe(false);
446
+ expect(result.hasDuplicate("markdown.italic")).toBe(false);
447
+ });
448
+ });
449
+ });