@marimo-team/islands 0.23.7-dev8 → 0.23.7-dev80

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 (554) hide show
  1. package/dist/{ConnectedDataExplorerComponent-PmilQqXR.js → ConnectedDataExplorerComponent-2lBNiUv6.js} +14 -14
  2. package/dist/{ErrorBoundary-Da4UeYxT.js → ErrorBoundary-D3wrPNma.js} +1 -1
  3. package/dist/{any-language-editor-BVR0l12r.js → any-language-editor-VWs_7v27.js} +15 -15
  4. package/dist/apl-Bdc61P1y.js +4 -0
  5. package/dist/{arc-CHF8PiiF.js → arc-DfkSnvZm.js} +2 -2
  6. package/dist/{architecture-7HQA4BMR-D0JB_3hE.js → architecture-7HQA4BMR-CS9jOrqM.js} +1 -1
  7. package/dist/{architectureDiagram-VXUJARFQ-BXQEUDtK.js → architectureDiagram-VXUJARFQ-CXVJxFhH.js} +16 -16
  8. package/dist/asciiarmor-DVRHDGzT.js +4 -0
  9. package/dist/asn1-BmuKfkfu.js +4 -0
  10. package/dist/assets/__vite-browser-external-CAdMKBac.js +1 -0
  11. package/dist/assets/worker-CpBbwbQo.js +73 -0
  12. package/dist/{blockDiagram-VD42YOAC-DhJe-Y9i.js → blockDiagram-VD42YOAC-DGDaxR8I.js} +11 -11
  13. package/dist/brainfuck-DPrRpyTV.js +4 -0
  14. package/dist/{button-CA5pI2YF.js → button-Dj4BTre0.js} +5 -0
  15. package/dist/{c4Diagram-YG6GDRKO-9dSfzOFR.js → c4Diagram-YG6GDRKO-C2hc6ne8.js} +5 -5
  16. package/dist/{capabilities-6laDasij.js → capabilities-C9rrYCzf.js} +1 -1
  17. package/dist/{channel-MqYIiKgS.js → channel-BBoIVUrJ.js} +1 -1
  18. package/dist/{chat-ui-D8SqlFay.js → chat-ui-D3XBept8.js} +626 -234
  19. package/dist/{check-CFM2mVDr.js → check-BcUIXnUT.js} +1 -1
  20. package/dist/{chunk-4BX2VUAB-BwfrWBqN.js → chunk-4BX2VUAB-CzXltWHN.js} +1 -1
  21. package/dist/{chunk-55IACEB6-D8THf2mi.js → chunk-55IACEB6-B-1mjMMC.js} +1 -1
  22. package/dist/{chunk-5FQGJX7Z-CO1e63h_.js → chunk-5FQGJX7Z-BOg95xG5.js} +2 -2
  23. package/dist/{chunk-ABZYJK2D-BrBb_0yY.js → chunk-ABZYJK2D-D0cLy8Bb.js} +2 -2
  24. package/dist/{chunk-ATLVNIR6-D-0XqNah.js → chunk-ATLVNIR6-BXsEjlHF.js} +2 -2
  25. package/dist/{chunk-B4BG7PRW-8iRKvugR.js → chunk-B4BG7PRW-Q1usn6T3.js} +7 -7
  26. package/dist/{chunk-CVBHYZKI-B6xhgaBd.js → chunk-CVBHYZKI-B_c5YBcW.js} +1 -1
  27. package/dist/{chunk-DI55MBZ5-C0_2D4m4.js → chunk-DI55MBZ5-D1qLYNrb.js} +6 -6
  28. package/dist/{chunk-EXTU4WIE-Jiw9ca1u.js → chunk-EXTU4WIE-BKNXdLmD.js} +2 -2
  29. package/dist/{chunk-FMBD7UC4-CHdus51S.js → chunk-FMBD7UC4-Ie8M9q0W.js} +1 -1
  30. package/dist/{chunk-HN2XXSSU-2Vfbq-kU.js → chunk-HN2XXSSU-E3n-Ys7Z.js} +1 -1
  31. package/dist/{chunk-JA3XYJ7Z-6wbaigKe.js → chunk-JA3XYJ7Z-D6c6cOBG.js} +3 -3
  32. package/dist/{chunk-JZLCHNYA-_rfptlUP.js → chunk-JZLCHNYA-BvsPHJmL.js} +6 -6
  33. package/dist/{chunk-MI3HLSF2-Do0-KRc0.js → chunk-MI3HLSF2-CUYEasXO.js} +1 -1
  34. package/dist/{chunk-N4CR4FBY-DIZG9dVD.js → chunk-N4CR4FBY-8ycT-O9a.js} +7 -7
  35. package/dist/{chunk-QN33PNHL-Cc64y40m.js → chunk-QN33PNHL-Bb-eUBW3.js} +2 -2
  36. package/dist/{chunk-QXUST7PY-BDG0-0Or.js → chunk-QXUST7PY-DV8yRwBd.js} +10 -10
  37. package/dist/{chunk-QZHKN3VN-B_Mdb8GC.js → chunk-QZHKN3VN-DRjXVwuJ.js} +1 -1
  38. package/dist/{chunk-S3R3BYOJ-DphMP0FA.js → chunk-S3R3BYOJ-mQeCz5CE.js} +4 -4
  39. package/dist/{chunk-TZMSLE5B-C9LUoYkc.js → chunk-TZMSLE5B-BqW10dHe.js} +3 -3
  40. package/dist/classDiagram-2ON5EDUG--Yh__LHb.js +30 -0
  41. package/dist/classDiagram-v2-WZHVMYZB-BC7X7Xtc.js +30 -0
  42. package/dist/{clike-sBZrGeF8.js → clike-DTxNUn7l.js} +1 -1
  43. package/dist/clojure-DEttQW5T.js +4 -0
  44. package/dist/cmake-jNlx_DaM.js +4 -0
  45. package/dist/cobol-BvvIm5MJ.js +4 -0
  46. package/dist/{code-block-37QAKDTI-0JNwiPGv.js → code-block-37QAKDTI-BsGy1AOJ.js} +1 -1
  47. package/dist/{code-visibility-i-wZHH96.js → code-visibility-BTN1sEU2.js} +11481 -1993
  48. package/dist/coffeescript-DTpBMyFU.js +4 -0
  49. package/dist/commonlisp-BmmUG8jb.js +4 -0
  50. package/dist/{copy-TGGAUEWp.js → copy-DLf4aN7I.js} +2 -2
  51. package/dist/{cose-bilkent-S5V4N54A-DXHZkJKX.js → cose-bilkent-S5V4N54A-kjoZoid4.js} +2 -2
  52. package/dist/crystal-BxyqmEWC.js +4 -0
  53. package/dist/css-BGoCtuG3.js +4 -0
  54. package/dist/cypher-BmCbdl3u.js +4 -0
  55. package/dist/d-CFrlbjZt.js +4 -0
  56. package/dist/{dagre-6UL2VRFP-tH87fkPA.js → dagre-6UL2VRFP-DRBWoQUw.js} +10 -10
  57. package/dist/{data-grid-overlay-editor-CWUN78-s.js → data-grid-overlay-editor-efe5ZagF.js} +2 -2
  58. package/dist/{diagram-PSM6KHXK-2VjPSCDn.js → diagram-PSM6KHXK-H66ATWP2.js} +18 -18
  59. package/dist/{diagram-QEK2KX5R-CiLmNyta.js → diagram-QEK2KX5R-DItl5Wns.js} +14 -14
  60. package/dist/{diagram-S2PKOQOG-Zha_1CLx.js → diagram-S2PKOQOG-CtuW_ZuL.js} +14 -14
  61. package/dist/diff-D6XwL6P8.js +4 -0
  62. package/dist/{dist-Brkazupz.js → dist--sWVZwjW.js} +1 -1
  63. package/dist/{dist-FN0ZA_8F.js → dist-21ButRCu.js} +1 -1
  64. package/dist/{dist-BetEKbPG.js → dist-B8RaFTRF.js} +1 -1
  65. package/dist/dist-BoHGySTM.js +5 -0
  66. package/dist/dist-ByAz19Qc.js +5 -0
  67. package/dist/dist-C93EysN4.js +5 -0
  68. package/dist/{dist-BHnX0ia_.js → dist-CY-lVor6.js} +1 -1
  69. package/dist/{dist-YP-G7W0f.js → dist-CYDuv4bR.js} +1 -1
  70. package/dist/{dist-CMjD5MQb.js → dist-Cfo5EE2t.js} +1 -1
  71. package/dist/dist-CjivSDvN.js +5 -0
  72. package/dist/dist-Cqwx-MH7.js +5 -0
  73. package/dist/{dist-ESg7xyoD.js → dist-D3ZI9nhS.js} +2 -2
  74. package/dist/{dist-DkC6YEo0.js → dist-DMZNjfX4.js} +1 -1
  75. package/dist/{dist-ChC1BhqM.js → dist-DbpcoFAV.js} +1 -1
  76. package/dist/dist-FUNenbiQ.js +5 -0
  77. package/dist/{dist-BEOU2g1b.js → dist-zhSud5X3.js} +1 -1
  78. package/dist/{dockerfile-COvlVLcE.js → dockerfile-twL37N91.js} +1 -1
  79. package/dist/dtd-Bw0lRN0-.js +4 -0
  80. package/dist/dylan-B55eBHTt.js +4 -0
  81. package/dist/ecl-C8G4p0wn.js +4 -0
  82. package/dist/eiffel-BmH46VJl.js +4 -0
  83. package/dist/elm-DhzeFqkl.js +4 -0
  84. package/dist/{erDiagram-Q2GNP2WA-biHZS05w.js → erDiagram-Q2GNP2WA--19X2kU5.js} +14 -14
  85. package/dist/erlang-CY-wdlsU.js +4 -0
  86. package/dist/{error-banner-DnBPzEWg.js → error-banner-CVkfBUT3.js} +2 -2
  87. package/dist/{esm-Dd1z1auZ.js → esm-CWp0KQeK.js} +1 -1
  88. package/dist/{esm-CYEyrE3Y.js → esm-DjNnlmpf.js} +96 -96
  89. package/dist/{extends-CzJgxo2J.js → extends-vAi97cpa.js} +4 -4
  90. package/dist/{factor-C2GT7jfQ.js → factor-CajWS6mS.js} +1 -1
  91. package/dist/factor-DWkgl0xw.js +4 -0
  92. package/dist/{flowDiagram-NV44I4VS-CWWlUpBR.js → flowDiagram-NV44I4VS-DQmWlo7f.js} +16 -16
  93. package/dist/{formats-CgaK7Gmx.js → formats-Dsy9kkZu.js} +3 -3
  94. package/dist/forth-Cij_ie2t.js +4 -0
  95. package/dist/fortran-Br3X9cfm.js +4 -0
  96. package/dist/{ganttDiagram-JELNMOA3-D7B2c4Z9.js → ganttDiagram-JELNMOA3-BOGXJ8Lk.js} +7 -7
  97. package/dist/gas-DYsGcMN2.js +4 -0
  98. package/dist/gherkin-eVgXQ0fQ.js +4 -0
  99. package/dist/{gitGraph-G5XIXVHT-BdepdFa_.js → gitGraph-G5XIXVHT-DGlbae5m.js} +1 -1
  100. package/dist/{gitGraphDiagram-V2S2FVAM-CtLvNR1S.js → gitGraphDiagram-V2S2FVAM-DjzxfF0P.js} +14 -14
  101. package/dist/{glide-data-editor-CvlvtPWJ.js → glide-data-editor-DucgdjRo.js} +13 -13
  102. package/dist/groovy-_NFHIXG7.js +4 -0
  103. package/dist/haskell-D6xNG_bH.js +4 -0
  104. package/dist/haxe-sU_rzAwn.js +5 -0
  105. package/dist/{html-to-image-_jxGvsrc.js → html-to-image-CpggM7u1.js} +2798 -2539
  106. package/dist/idl-Ds_VbrUx.js +4 -0
  107. package/dist/{info-VBDWY6EO--JNA2rNu.js → info-VBDWY6EO-D2lvLLw5.js} +1 -1
  108. package/dist/{infoDiagram-HS3SLOUP-BbZyOxsP.js → infoDiagram-HS3SLOUP-ChNufFsP.js} +12 -12
  109. package/dist/{input-BAOe64zx.js → input-D4kjoQUB.js} +8 -6
  110. package/dist/javascript-CztfIl0i.js +4 -0
  111. package/dist/{journeyDiagram-XKPGCS4Q-BU2mjjzl.js → journeyDiagram-XKPGCS4Q-BO_O4Ij1.js} +6 -6
  112. package/dist/julia-DDv40QMV.js +4 -0
  113. package/dist/{kanban-definition-3W4ZIXB7-BlmczUuw.js → kanban-definition-3W4ZIXB7-CPpiiiWk.js} +11 -11
  114. package/dist/{katex-qPqrBHZ8.js → katex-9-9QRhxz.js} +1 -1
  115. package/dist/{label-BCWi-Oqu.js → label-BLqV33b1.js} +2 -2
  116. package/dist/{line-BWRi3U3S.js → line-C5s_12ee.js} +3 -3
  117. package/dist/{linear-DnHwODZa.js → linear-2NnK4cxi.js} +2 -2
  118. package/dist/livescript-BEOngLLc.js +4 -0
  119. package/dist/{loader-BvW0-YWZ.js → loader-Dr8Qem8p.js} +1 -1
  120. package/dist/lua-9-7BhQ4Y.js +4 -0
  121. package/dist/main.js +1712 -10297
  122. package/dist/mathematica-DDa0Pfxm.js +4 -0
  123. package/dist/mbox-iO03mmoE.js +4 -0
  124. package/dist/{mermaid-4DMBBIKO-CG1ECj5W.js → mermaid-4DMBBIKO-B7VQMwJx.js} +1 -1
  125. package/dist/{mermaid-CEbzCxCc.js → mermaid-DO-Daq7u.js} +46 -46
  126. package/dist/{mermaid-parser.core-CleJseNW.js → mermaid-parser.core-DreccfmS.js} +7 -7
  127. package/dist/{mhchem-BwoRNwg_.js → mhchem-yiCCuiEF.js} +1 -1
  128. package/dist/{mindmap-definition-VGOIOE7T-CcSYqYP9.js → mindmap-definition-VGOIOE7T-CC1_Vl0f.js} +13 -13
  129. package/dist/mirc-C9z5LT4X.js +4 -0
  130. package/dist/mllike-jGJbdm_C.js +6 -0
  131. package/dist/modelica-DzF7oIEL.js +4 -0
  132. package/dist/mscgen-DB-u125o.js +6 -0
  133. package/dist/mumps-CRTFHhzh.js +4 -0
  134. package/dist/nsis-C4NPTuox.js +4 -0
  135. package/dist/{nsis-B5K1qoyo.js → nsis-ClF3r5Tr.js} +1 -1
  136. package/dist/ntriples-BCOoGph1.js +4 -0
  137. package/dist/{number-overlay-editor-_GnlYFHC.js → number-overlay-editor-CpKi64Fy.js} +1 -1
  138. package/dist/octave-DTwNlazz.js +4 -0
  139. package/dist/{ordinal-2jIulmcR.js → ordinal-B43ZeR68.js} +1 -1
  140. package/dist/oz-DD38AzSz.js +4 -0
  141. package/dist/{packet-DYOGHKS2-CBxXGWNr.js → packet-DYOGHKS2-CmWtF3uO.js} +1 -1
  142. package/dist/pascal-BohSp9jV.js +4 -0
  143. package/dist/perl-f5OutoPM.js +4 -0
  144. package/dist/{pie-VRWISCQL-Bmdnqjip.js → pie-VRWISCQL-B6u8vus8.js} +1 -1
  145. package/dist/{pieDiagram-ADFJNKIX-DNyLF5H2.js → pieDiagram-ADFJNKIX-Di34MOFQ.js} +19 -19
  146. package/dist/pig-Dv7wSmHb.js +4 -0
  147. package/dist/powershell-rYgjKB39.js +4 -0
  148. package/dist/{process-output-ClDgSR3m.js → process-output-X8TR20AK.js} +30 -25
  149. package/dist/properties-BFUNLRDN.js +4 -0
  150. package/dist/protobuf-B9QJQPPv.js +4 -0
  151. package/dist/{pug-tjbzJCFk.js → pug-B_rby2yb.js} +1 -1
  152. package/dist/pug-DzvWpaMC.js +4 -0
  153. package/dist/puppet-B_K-n_xK.js +4 -0
  154. package/dist/python-CAiFcaA2.js +4 -0
  155. package/dist/q-cLeFIBLK.js +4 -0
  156. package/dist/{quadrantDiagram-AYHSOK5B-rXwjifrj.js → quadrantDiagram-AYHSOK5B-B9kVk1ny.js} +3 -3
  157. package/dist/r-04Y-Wco3.js +4 -0
  158. package/dist/{radar-ZZBFDIW7-BmCWDffL.js → radar-ZZBFDIW7-XAmXSa8s.js} +1 -1
  159. package/dist/{react-vega-B-rkEqtS.js → react-vega-Cavbrg4l.js} +1 -1
  160. package/dist/{react-vega-k9ODWPlI.js → react-vega-Dh6-UKKe.js} +13 -13
  161. package/dist/{requirementDiagram-UZGBJVZJ-DBdrMVbs.js → requirementDiagram-UZGBJVZJ-BxGfGYEx.js} +13 -13
  162. package/dist/reveal-component-CsfEpSwA.js +7447 -0
  163. package/dist/rpm-FUdrIia9.js +5 -0
  164. package/dist/ruby-DMjFXuEW.js +4 -0
  165. package/dist/{sankeyDiagram-TZEHDZUN-CxmzalGv.js → sankeyDiagram-TZEHDZUN-D09PBJ-n.js} +4 -4
  166. package/dist/sas-DzHZxjXK.js +4 -0
  167. package/dist/scheme-DxHd_Rb9.js +4 -0
  168. package/dist/semaphore-CNDGTzkX.js +46 -0
  169. package/dist/{sequenceDiagram-WL72ISMW-CVCDsJ9h.js → sequenceDiagram-WL72ISMW-t_Dpemj0.js} +7 -7
  170. package/dist/shell-C8Kwypgf.js +4 -0
  171. package/dist/sieve-DdyqOKXZ.js +4 -0
  172. package/dist/smalltalk-pB7X1D9y.js +4 -0
  173. package/dist/sparql-NhBO6oOa.js +4 -0
  174. package/dist/{spec-DSIuqd3f.js → spec-hVaaZsY5.js} +4 -4
  175. package/dist/{src-BY0BGg6V.js → src-Bf2iLOlr.js} +1 -1
  176. package/dist/{stateDiagram-FKZM4ZOC-D_2djEhW.js → stateDiagram-FKZM4ZOC-B18gTP_j.js} +16 -16
  177. package/dist/stateDiagram-v2-4FDKWEC3-B6e_t14A.js +29 -0
  178. package/dist/{step-DGAGWg3y.js → step-CWipAYTY.js} +1 -1
  179. package/dist/{strings-B_FOH6eV.js → strings-BiIhGaI8.js} +4 -4
  180. package/dist/style.css +1 -1
  181. package/dist/stylus-SfWSnzPv.js +4 -0
  182. package/dist/swift-jRPdq2zR.js +4 -0
  183. package/dist/{swiper-component-KkEVUDd3.js → swiper-component-DlD2GU2g.js} +2 -2
  184. package/dist/tcl-_hpTHGX3.js +4 -0
  185. package/dist/textile-C9h8slqH.js +4 -0
  186. package/dist/{time-CMdrp3hw.js → time-C1SGcFMH.js} +2 -2
  187. package/dist/{timeline-definition-IT6M3QCI-E4NzxCs3.js → timeline-definition-IT6M3QCI-DJnh1ks5.js} +3 -3
  188. package/dist/{toDate-CHtl9vts.js → toDate-CIpC_34u.js} +33 -20
  189. package/dist/toml-DWvtinD4.js +4 -0
  190. package/dist/{tooltip-B0mtKTXm.js → tooltip-DRaMBu06.js} +3 -3
  191. package/dist/{treemap-GDKQZRPO-CoKHPxa7.js → treemap-GDKQZRPO-Du95DV6u.js} +1 -1
  192. package/dist/troff-Dwo_A0y7.js +4 -0
  193. package/dist/ttcn-V--CPFKq.js +4 -0
  194. package/dist/ttcn-cfg-CPSMchTG.js +4 -0
  195. package/dist/turtle-B4rPGBWu.js +4 -0
  196. package/dist/{types-DBtDeUKD.js → types-Dzuoc3LN.js} +1 -1
  197. package/dist/{useAsyncData-B6hCGywC.js → useAsyncData-C56Khv_R.js} +1 -1
  198. package/dist/{useDateFormatter-B3mCQMP3.js → useDateFormatter-B_9k85Ex.js} +2 -2
  199. package/dist/{useDeepCompareMemoize-CmwDuYUH.js → useDeepCompareMemoize-Dt98v2ua.js} +1 -1
  200. package/dist/{useIframeCapabilities-DbdLoEDm.js → useIframeCapabilities-BkYHTrss.js} +1 -1
  201. package/dist/{useLifecycle-CjMjllqy.js → useLifecycle-BF6-z62y.js} +3 -3
  202. package/dist/{useTheme-CByZUW0p.js → useTheme-DykuNHR2.js} +2 -2
  203. package/dist/vb-DaMBBd4j.js +4 -0
  204. package/dist/vbscript-BMJQqcE2.js +4 -0
  205. package/dist/{vega-component-CC8TqWWV.js → vega-component-cSdqoAxe.js} +26 -24
  206. package/dist/velocity-CGq2QRq2.js +4 -0
  207. package/dist/verilog-CUNo8F5u.js +4 -0
  208. package/dist/vhdl-CCzA0msW.js +4 -0
  209. package/dist/webidl-CqIMDIBL.js +4 -0
  210. package/dist/xquery-XC5Kbr-1.js +4 -0
  211. package/dist/{xychartDiagram-PRI3JC2R-CuxTvjw5.js → xychartDiagram-PRI3JC2R-Dk2d_bX0.js} +10 -10
  212. package/dist/yacas-CGOv7Dzy.js +4 -0
  213. package/dist/z80-CXhVmi-f.js +4 -0
  214. package/dist/{zod-BxdsqRPd.js → zod-BWkcDORu.js} +1 -1
  215. package/package.json +3 -3
  216. package/src/components/chat/chat-components.tsx +47 -0
  217. package/src/components/chat/chat-display.tsx +41 -7
  218. package/src/components/chat/chat-panel.tsx +37 -10
  219. package/src/components/chat/chat-utils.ts +42 -20
  220. package/src/components/chat/reasoning-accordion.tsx +14 -3
  221. package/src/components/chat/tool-call/shared.ts +13 -0
  222. package/src/components/chat/tool-call/tool-approval-card.tsx +62 -0
  223. package/src/components/chat/tool-call/tool-args.tsx +26 -0
  224. package/src/components/chat/tool-call/tool-call-view.tsx +99 -0
  225. package/src/components/chat/tool-call/tool-error-card.tsx +81 -0
  226. package/src/components/chat/tool-call/tool-history-row.tsx +153 -0
  227. package/src/components/chat/tool-call/tool-result.tsx +101 -0
  228. package/src/components/data-table/__tests__/column-header.test.ts +3 -1
  229. package/src/components/data-table/__tests__/column-header.test.tsx +308 -0
  230. package/src/components/data-table/__tests__/filter-by-values-picker.test.tsx +112 -0
  231. package/src/components/data-table/__tests__/filter-pill-editor.test.tsx +261 -0
  232. package/src/components/data-table/__tests__/filters.test.ts +196 -49
  233. package/src/components/data-table/charts/components/form-fields.tsx +1 -0
  234. package/src/components/data-table/column-header.tsx +349 -170
  235. package/src/components/data-table/date-filter-inputs.tsx +325 -0
  236. package/src/components/data-table/filter-by-values-picker.tsx +70 -9
  237. package/src/components/data-table/filter-pill-editor.tsx +410 -156
  238. package/src/components/data-table/filter-pills.tsx +69 -54
  239. package/src/components/data-table/filters.ts +218 -101
  240. package/src/components/data-table/header-items.tsx +8 -1
  241. package/src/components/data-table/operator-labels.ts +25 -0
  242. package/src/components/data-table/regex-input.tsx +61 -0
  243. package/src/components/dependency-graph/minimap-content.tsx +14 -3
  244. package/src/components/editor/actions/pair-with-agent-modal.tsx +140 -49
  245. package/src/components/editor/actions/useNotebookActions.tsx +3 -1
  246. package/src/components/editor/app-container.tsx +7 -1
  247. package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +10 -2
  248. package/src/components/editor/chrome/wrapper/app-chrome.tsx +1 -0
  249. package/src/components/editor/chrome/wrapper/footer-items/backend-status.tsx +1 -1
  250. package/src/components/editor/chrome/wrapper/footer.tsx +4 -1
  251. package/src/components/editor/chrome/wrapper/panels.tsx +4 -1
  252. package/src/components/editor/chrome/wrapper/sidebar.tsx +4 -1
  253. package/src/components/editor/controls/Controls.tsx +11 -3
  254. package/src/components/editor/file-tree/file-explorer.tsx +12 -2
  255. package/src/components/editor/file-tree/requesting-tree.tsx +27 -25
  256. package/src/components/editor/file-tree/upload.tsx +23 -17
  257. package/src/components/editor/header/__tests__/status.test.tsx +108 -0
  258. package/src/components/editor/header/status.tsx +44 -10
  259. package/src/components/editor/navigation/__tests__/clipboard.test.ts +106 -0
  260. package/src/components/editor/navigation/__tests__/navigation.test.ts +70 -0
  261. package/src/components/editor/navigation/clipboard.ts +99 -25
  262. package/src/components/editor/navigation/navigation.ts +15 -1
  263. package/src/components/editor/notebook-cell.tsx +5 -0
  264. package/src/components/editor/output/console/ConsoleOutput.tsx +23 -5
  265. package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +114 -0
  266. package/src/components/editor/renderers/slides-layout/__tests__/compute-slide-cells.test.ts +5 -4
  267. package/src/components/editor/renderers/slides-layout/__tests__/plugin.test.ts +55 -15
  268. package/src/components/editor/renderers/slides-layout/plugin.tsx +8 -25
  269. package/src/components/editor/renderers/slides-layout/slides-layout.tsx +19 -6
  270. package/src/components/editor/renderers/slides-layout/types.ts +40 -31
  271. package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +1 -0
  272. package/src/components/home/components.tsx +6 -0
  273. package/src/components/pages/run-page.tsx +4 -1
  274. package/src/components/scratchpad/scratchpad.tsx +1 -0
  275. package/src/components/slides/__tests__/slide-notes.test.ts +131 -0
  276. package/src/components/slides/reveal-component.tsx +252 -147
  277. package/src/components/slides/slide-notes-editor.tsx +127 -0
  278. package/src/components/slides/slide-notes.ts +64 -0
  279. package/src/components/slides/slides.css +14 -0
  280. package/src/components/ui/combobox.tsx +24 -5
  281. package/src/components/ui/number-field.tsx +2 -0
  282. package/src/core/ai/tools/__tests__/registry.test.ts +10 -12
  283. package/src/core/ai/tools/registry.ts +9 -5
  284. package/src/core/cells/__tests__/cells.test.ts +187 -0
  285. package/src/core/cells/__tests__/pending-cut-service.test.tsx +123 -0
  286. package/src/core/cells/cells.ts +102 -17
  287. package/src/core/cells/document-changes.ts +6 -1
  288. package/src/core/cells/pending-cut-service.ts +55 -0
  289. package/src/core/cells/utils.ts +11 -0
  290. package/src/core/codemirror/cells/extensions.ts +10 -0
  291. package/src/core/codemirror/go-to-definition/__tests__/commands.test.ts +152 -0
  292. package/src/core/codemirror/go-to-definition/__tests__/utils.test.ts +99 -0
  293. package/src/core/codemirror/go-to-definition/commands.ts +382 -22
  294. package/src/core/codemirror/go-to-definition/utils.ts +23 -5
  295. package/src/core/edit-app.tsx +3 -2
  296. package/src/core/hotkeys/hotkeys.ts +5 -0
  297. package/src/core/islands/worker/worker.tsx +3 -2
  298. package/src/core/run-app.tsx +2 -1
  299. package/src/core/runtime/__tests__/runtime.test.ts +38 -17
  300. package/src/core/runtime/runtime.ts +57 -34
  301. package/src/core/wasm/__tests__/utils.test.ts +34 -0
  302. package/src/core/wasm/utils.ts +14 -0
  303. package/src/core/wasm/worker/bootstrap.ts +3 -2
  304. package/src/core/wasm/worker/worker.ts +3 -2
  305. package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +156 -0
  306. package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +101 -0
  307. package/src/core/websocket/transports/__tests__/ws.test.ts +125 -0
  308. package/src/core/websocket/transports/basic.ts +1 -1
  309. package/src/core/websocket/transports/ws.ts +96 -0
  310. package/src/core/websocket/useMarimoKernelConnection.tsx +133 -54
  311. package/src/core/websocket/useWebSocket.tsx +3 -15
  312. package/src/css/app/Cell.css +10 -0
  313. package/src/plugins/core/__test__/sanitize.test.ts +30 -0
  314. package/src/plugins/impl/DropdownPlugin.tsx +12 -1
  315. package/src/plugins/impl/MultiselectPlugin.tsx +4 -0
  316. package/src/plugins/impl/SearchableSelect.tsx +11 -1
  317. package/src/plugins/impl/TabsPlugin.tsx +35 -7
  318. package/src/plugins/impl/__tests__/DropdownPlugin.test.tsx +56 -0
  319. package/src/plugins/impl/__tests__/TabsPlugin.test.tsx +154 -0
  320. package/src/plugins/impl/data-frames/forms/__tests__/__snapshots__/form.test.tsx.snap +48 -36
  321. package/src/plugins/impl/data-frames/schema.ts +4 -1
  322. package/src/plugins/impl/vega/resolve-data.ts +8 -1
  323. package/src/plugins/layout/DownloadPlugin.tsx +9 -7
  324. package/src/utils/__tests__/id-tree.test.ts +71 -0
  325. package/src/utils/__tests__/semaphore.test.ts +218 -0
  326. package/src/utils/download.ts +4 -2
  327. package/src/utils/fileToBase64.ts +8 -7
  328. package/src/utils/id-tree.tsx +89 -0
  329. package/src/utils/semaphore.ts +88 -0
  330. package/dist/apl-BKoVld9y.js +0 -4
  331. package/dist/asciiarmor-DQrKIjoo.js +0 -4
  332. package/dist/asn1-BZvnj0dq.js +0 -4
  333. package/dist/assets/__vite-browser-external-rrUYDKRl.js +0 -1
  334. package/dist/assets/worker-Bfy15ViQ.js +0 -73
  335. package/dist/brainfuck-D558nlUv.js +0 -4
  336. package/dist/classDiagram-2ON5EDUG-CBHMR6ZU.js +0 -30
  337. package/dist/classDiagram-v2-WZHVMYZB-BsUtUGM_.js +0 -30
  338. package/dist/clojure-Cq8mTSrE.js +0 -4
  339. package/dist/cmake-D8HCovWK.js +0 -4
  340. package/dist/cobol-UolN-9iU.js +0 -4
  341. package/dist/coffeescript-VdNuWrt5.js +0 -4
  342. package/dist/commonlisp-ALX7fpDc.js +0 -4
  343. package/dist/crystal-PbyO9Q_s.js +0 -4
  344. package/dist/css-DFklJkr_.js +0 -4
  345. package/dist/cypher-BifNeYlv.js +0 -4
  346. package/dist/d-BA-JP4PJ.js +0 -4
  347. package/dist/diff-CtkDpav4.js +0 -4
  348. package/dist/dist-BuBwsFva.js +0 -5
  349. package/dist/dist-BzmEQ9u7.js +0 -5
  350. package/dist/dist-Cih01ssx.js +0 -5
  351. package/dist/dist-CqfONiY9.js +0 -5
  352. package/dist/dist-D0iD0Fi9.js +0 -5
  353. package/dist/dist-DtNLXm8d.js +0 -5
  354. package/dist/dtd-DW3_UFEG.js +0 -4
  355. package/dist/dylan-pDhodO2N.js +0 -4
  356. package/dist/ecl-BJT8-YD7.js +0 -4
  357. package/dist/eiffel-Dmns-9vS.js +0 -4
  358. package/dist/elm-Da4sO4Bz.js +0 -4
  359. package/dist/erlang-C-zBsDi7.js +0 -4
  360. package/dist/factor-4xPWlWB5.js +0 -4
  361. package/dist/forth-l-c75zSd.js +0 -4
  362. package/dist/fortran-DIujSODW.js +0 -4
  363. package/dist/gas-CXnG5g_b.js +0 -4
  364. package/dist/gherkin-VPeqd4-X.js +0 -4
  365. package/dist/groovy-CphhZQgg.js +0 -4
  366. package/dist/haskell-CCvlS5Iq.js +0 -4
  367. package/dist/haxe-C_bi66fP.js +0 -5
  368. package/dist/idl-1DcP4Dm8.js +0 -4
  369. package/dist/javascript-DUIGhBvO.js +0 -4
  370. package/dist/julia-Cs2G4PQi.js +0 -4
  371. package/dist/livescript-DMtVFaAN.js +0 -4
  372. package/dist/lua-BAoLtdJg.js +0 -4
  373. package/dist/mathematica-C_NoFtbo.js +0 -4
  374. package/dist/mbox-DcFJFYrH.js +0 -4
  375. package/dist/mirc-71dccf_u.js +0 -4
  376. package/dist/mllike-CWcOFVDq.js +0 -6
  377. package/dist/modelica-Ape2VXxx.js +0 -4
  378. package/dist/mscgen-Cc6TwbSN.js +0 -6
  379. package/dist/mumps-h-ZbdkJ9.js +0 -4
  380. package/dist/nsis-C0p3m7JW.js +0 -4
  381. package/dist/ntriples-c9lEeT5w.js +0 -4
  382. package/dist/octave-DzEgB_74.js +0 -4
  383. package/dist/oz-CAxvHkyQ.js +0 -4
  384. package/dist/pascal-BJzu1sgP.js +0 -4
  385. package/dist/perl--IrOzZ2Z.js +0 -4
  386. package/dist/pig-CiBKKNhC.js +0 -4
  387. package/dist/powershell-KY0j6Qop.js +0 -4
  388. package/dist/properties-BW8q3ziV.js +0 -4
  389. package/dist/protobuf-BGaeuTGV.js +0 -4
  390. package/dist/pug-DjOKK-4J.js +0 -4
  391. package/dist/puppet-DWm2o6zX.js +0 -4
  392. package/dist/python-Bp2gezZy.js +0 -4
  393. package/dist/q-DljPshos.js +0 -4
  394. package/dist/r-BajPMnEu.js +0 -4
  395. package/dist/reveal-component-DisX89FD.js +0 -4863
  396. package/dist/rpm-BKx-ZZ62.js +0 -5
  397. package/dist/ruby-DJq_HNKc.js +0 -4
  398. package/dist/sas-WANvpcOU.js +0 -4
  399. package/dist/scheme-CliBbhGF.js +0 -4
  400. package/dist/shell-BwhrNUvM.js +0 -4
  401. package/dist/sieve-BIVePvMp.js +0 -4
  402. package/dist/smalltalk-D6G48JmY.js +0 -4
  403. package/dist/sparql-jjc3BmEP.js +0 -4
  404. package/dist/stateDiagram-v2-4FDKWEC3-Cv9Av10H.js +0 -29
  405. package/dist/stylus-WPBPQ4PE.js +0 -4
  406. package/dist/swift-O1Qy6iCm.js +0 -4
  407. package/dist/tcl-BAFdhvsi.js +0 -4
  408. package/dist/textile-DFuzhNLG.js +0 -4
  409. package/dist/toml-DRSTeely.js +0 -4
  410. package/dist/troff-B_ZjwBW0.js +0 -4
  411. package/dist/ttcn-CAyiB3ic.js +0 -4
  412. package/dist/ttcn-cfg-BS5_BGBJ.js +0 -4
  413. package/dist/turtle-CUBEDy3E.js +0 -4
  414. package/dist/vb-DY9S6-U2.js +0 -4
  415. package/dist/vbscript-gaHC39Jq.js +0 -4
  416. package/dist/velocity-TfCOtJZ_.js +0 -4
  417. package/dist/verilog-c2JOX8mv.js +0 -4
  418. package/dist/vhdl-dHBirRiO.js +0 -4
  419. package/dist/webidl-Bauj-i07.js +0 -4
  420. package/dist/xquery-CtaEAOt8.js +0 -4
  421. package/dist/yacas-BZ85agQP.js +0 -4
  422. package/dist/z80-hCgR-L4U.js +0 -4
  423. package/src/components/chat/tool-call-accordion.tsx +0 -247
  424. /package/dist/{ImageComparisonComponent-DaocPIse.js → ImageComparisonComponent-CNHIsPDj.js} +0 -0
  425. /package/dist/{Plot-PIeIvFnD.js → Plot-4wn-lMVn.js} +0 -0
  426. /package/dist/{apl-Dt8GMXYg.js → apl-BCgCq9iM.js} +0 -0
  427. /package/dist/{array-B-MVxRIF.js → array-tvvEqPy7.js} +0 -0
  428. /package/dist/{asciiarmor-CitDQ85h.js → asciiarmor-BtqU-KJQ.js} +0 -0
  429. /package/dist/{asn1-abrf9SMK.js → asn1-Dmb-dTMx.js} +0 -0
  430. /package/dist/{asterisk-BUZwqih-.js → asterisk-DaVJJDnV.js} +0 -0
  431. /package/dist/{brainfuck-BL-Boof0.js → brainfuck-C1HoZKlE.js} +0 -0
  432. /package/dist/{chunk-4F5CHEZ2-C6tO9vjs.js → chunk-4F5CHEZ2-BZq7Kom7.js} +0 -0
  433. /package/dist/{chunk-B2363JML-Ds8wZXyP.js → chunk-B2363JML-D9-XOau1.js} +0 -0
  434. /package/dist/{chunk-DR5Q36YT-CP69aZS_.js → chunk-DR5Q36YT-BflwErH1.js} +0 -0
  435. /package/dist/{chunk-FRFDVMJY-BgQv1HBE.js → chunk-FRFDVMJY-BSBUAX7r.js} +0 -0
  436. /package/dist/{chunk-PL6DKKU2-DHfTUHy8.js → chunk-PL6DKKU2-B0MTXvyc.js} +0 -0
  437. /package/dist/{chunk-SJTYNZTY-Diciw4sx.js → chunk-SJTYNZTY-CEG4F0pB.js} +0 -0
  438. /package/dist/{chunk-TQ3KTPDO-CQfP9npd.js → chunk-TQ3KTPDO-DiCtqVSi.js} +0 -0
  439. /package/dist/{chunk-UMXZTB3W-MSKeGL7W.js → chunk-UMXZTB3W-97iS1iEl.js} +0 -0
  440. /package/dist/{click-outside-container-BZgN7xS_.js → click-outside-container-BDd67_1U.js} +0 -0
  441. /package/dist/{clike-RWg7anhx.js → clike-CdT0yHjt.js} +0 -0
  442. /package/dist/{clojure-DaojKHow.js → clojure-CdyrCpUv.js} +0 -0
  443. /package/dist/{cmake-DN-_v0XE.js → cmake-BFlPxym7.js} +0 -0
  444. /package/dist/{cobol-C3VpMyux.js → cobol-CcJXewp8.js} +0 -0
  445. /package/dist/{coffeescript-DIkz3Tbt.js → coffeescript-DnKuIKRo.js} +0 -0
  446. /package/dist/{colors-Cn2p_FA3.js → colors-CQAOa8cK.js} +0 -0
  447. /package/dist/{common-keywords-hbLeU7VU.js → common-keywords-FBrXPTcz.js} +0 -0
  448. /package/dist/{commonlisp-CB1boOiP.js → commonlisp-B-kok83Z.js} +0 -0
  449. /package/dist/{crystal-DI2oCml6.js → crystal-FYRYjI1I.js} +0 -0
  450. /package/dist/{css-BdEVwQDV.js → css-B45lc2V3.js} +0 -0
  451. /package/dist/{cypher-BNHToqxU.js → cypher-DZMLyVY_.js} +0 -0
  452. /package/dist/{cytoscape.esm-WbbDoCfu.js → cytoscape.esm-ayF70frT.js} +0 -0
  453. /package/dist/{d-D7we7I1b.js → d-x-VVT4o9.js} +0 -0
  454. /package/dist/{diff-Cia6fzjN.js → diff-Dxe2mpXk.js} +0 -0
  455. /package/dist/{dist-BK-3fF4P.js → dist-B4LJpMEg.js} +0 -0
  456. /package/dist/{dist-CxdUraQr.js → dist-B507mf_I.js} +0 -0
  457. /package/dist/{dist-C89sHDXk.js → dist-BGdYVvOu.js} +0 -0
  458. /package/dist/{dist-DquyVv5H.js → dist-BNyrZfqT.js} +0 -0
  459. /package/dist/{dist-Zn0KNbo9.js → dist-Bc5pmZIw.js} +0 -0
  460. /package/dist/{dist-C-J0pt5p.js → dist-BvCfQQQE.js} +0 -0
  461. /package/dist/{dist-D9r7Cmw7.js → dist-C2ej4eOH.js} +0 -0
  462. /package/dist/{dist-HVuryI1a.js → dist-C34oIrQ9.js} +0 -0
  463. /package/dist/{dist-CGLzXdrt.js → dist-CDFZi-QD.js} +0 -0
  464. /package/dist/{dist-C9fmTOin.js → dist-CYEylvZA.js} +0 -0
  465. /package/dist/{dist-DadjmS-4.js → dist-DJ6zJQZ4.js} +0 -0
  466. /package/dist/{dist-CtCY55Jf.js → dist-Dh3wkoyH.js} +0 -0
  467. /package/dist/{dist-C474qFoq.js → dist-Dhk6FMb0.js} +0 -0
  468. /package/dist/{dist-DZjQ_MBo.js → dist-KnujRhFL.js} +0 -0
  469. /package/dist/{dist-CinA9Enb.js → dist-WdPUFc56.js} +0 -0
  470. /package/dist/{dist-DBLeRrPp.js → dist-t_qL7eB8.js} +0 -0
  471. /package/dist/{dist-CyFFzJTb.js → dist-usPCDYx8.js} +0 -0
  472. /package/dist/{dtd-H4Hubdwp.js → dtd-C9VM_Wfu.js} +0 -0
  473. /package/dist/{duckdb-keywords-CZ_ZTscu.js → duckdb-keywords-CvJhR_Yd.js} +0 -0
  474. /package/dist/{dylan-fVO6rnq3.js → dylan-DTSnEIFO.js} +0 -0
  475. /package/dist/{ebnf-WEXPLEWb.js → ebnf-2D4Ctp3y.js} +0 -0
  476. /package/dist/{ecl-B94VPjNR.js → ecl-N04ptnRK.js} +0 -0
  477. /package/dist/{eiffel-C_R6TusS.js → eiffel-Dd8rpqr_.js} +0 -0
  478. /package/dist/{elm-DzCHbO2g.js → elm-GT2E866W.js} +0 -0
  479. /package/dist/{erlang-BGNkx6JU.js → erlang-Cf0Bp5pY.js} +0 -0
  480. /package/dist/{esm-Bb_hbWan.js → esm-BaaaPNGl.js} +0 -0
  481. /package/dist/{fcl-B_Gv5Jfx.js → fcl-Ccj8Z5Xd.js} +0 -0
  482. /package/dist/{forth-Bybw0cJ7.js → forth-wd_XzGTg.js} +0 -0
  483. /package/dist/{fortran-C6PoCLkI.js → fortran-DcwUTZFe.js} +0 -0
  484. /package/dist/{gas-BBlhenj4.js → gas-DeALIER3.js} +0 -0
  485. /package/dist/{gherkin-NXtNG85X.js → gherkin-CKTqaJNX.js} +0 -0
  486. /package/dist/{groovy-BoFYK9xM.js → groovy-Bwdp_d8D.js} +0 -0
  487. /package/dist/{haskell-BtBdvQ1n.js → haskell-DCdCcPLK.js} +0 -0
  488. /package/dist/{haxe-D--o6dr0.js → haxe-DAyktQWJ.js} +0 -0
  489. /package/dist/{http-Dc2fv19V.js → http-_DVAYWoR.js} +0 -0
  490. /package/dist/{idl-AqTq5l7e.js → idl-CBuZiRYu.js} +0 -0
  491. /package/dist/{init-D-g0ONX1.js → init-uv0kkh4g.js} +0 -0
  492. /package/dist/{javascript-DvwNVye9.js → javascript-DzigE11c.js} +0 -0
  493. /package/dist/{julia-DoKiagZC.js → julia-PwfB-0Cm.js} +0 -0
  494. /package/dist/{katex-B7pMJpE0.js → katex-C_XRmjAP.js} +0 -0
  495. /package/dist/{livescript-DxBZMiWB.js → livescript-BJLz1EbT.js} +0 -0
  496. /package/dist/{lua-DmS_0NTu.js → lua-ZC-XC2jf.js} +0 -0
  497. /package/dist/{math-BYK36kWZ.js → math-DFcdCCU8.js} +0 -0
  498. /package/dist/{mathematica-ChlDFeIC.js → mathematica-DCYMx6qB.js} +0 -0
  499. /package/dist/{mbox-CguZuODr.js → mbox-OxMK_9XI.js} +0 -0
  500. /package/dist/{mirc-CFtY8dqz.js → mirc-nJVyhA0H.js} +0 -0
  501. /package/dist/{mllike-C0EJrEOk.js → mllike-DRO89bsU.js} +0 -0
  502. /package/dist/{modelica-C1kO1nfS.js → modelica-Don3E6ZD.js} +0 -0
  503. /package/dist/{mscgen-DEYdr7AY.js → mscgen-DJfqD3bN.js} +0 -0
  504. /package/dist/{mumps-B3NVJs2V.js → mumps-SjGTvDYL.js} +0 -0
  505. /package/dist/{nginx-ComVAAGN.js → nginx-DasThI7R.js} +0 -0
  506. /package/dist/{node-sql-parser-DNGGJ-Rw.js → node-sql-parser-B8nBD36q.js} +0 -0
  507. /package/dist/{ntriples-DHol9X9H.js → ntriples-CNBKRl3I.js} +0 -0
  508. /package/dist/{octave-CYGz0bfo.js → octave-DdeVHNlx.js} +0 -0
  509. /package/dist/{oz-kPxb2ni5.js → oz-CcKSoNvN.js} +0 -0
  510. /package/dist/{pascal-bZ0yrJKy.js → pascal-6leftwNj.js} +0 -0
  511. /package/dist/{path-Du6n3sOU.js → path-BGaWgPKg.js} +0 -0
  512. /package/dist/{perl-z4hvqyqz.js → perl-BhJIwWzN.js} +0 -0
  513. /package/dist/{pig-DZO8QDF9.js → pig-r-xDHqRf.js} +0 -0
  514. /package/dist/{powershell-BSuaDQEC.js → powershell-D-BELeNi.js} +0 -0
  515. /package/dist/{properties-BXhGLlIx.js → properties-CnuDhbll.js} +0 -0
  516. /package/dist/{protobuf-DM6iybWV.js → protobuf-CO8RBhvX.js} +0 -0
  517. /package/dist/{puppet-Bn05sQT8.js → puppet-NmXHjLy8.js} +0 -0
  518. /package/dist/{python-Cvnhm0g7.js → python-DAQXi720.js} +0 -0
  519. /package/dist/{q-B9V8hzex.js → q-DlikXfV0.js} +0 -0
  520. /package/dist/{r-Cf0gFqmq.js → r-CuohilwT.js} +0 -0
  521. /package/dist/{rpm-D-LMkTV1.js → rpm-0Pjwp0Pb.js} +0 -0
  522. /package/dist/{ruby-DeuPikpK.js → ruby-Dq8NJTDG.js} +0 -0
  523. /package/dist/{sas-C9tjgAo9.js → sas-CuwonyVP.js} +0 -0
  524. /package/dist/{scheme-D1_bUF0G.js → scheme-CYU-RRIf.js} +0 -0
  525. /package/dist/{shell-CJBmnks3.js → shell-COPmX2qE.js} +0 -0
  526. /package/dist/{sieve-1fSV75CF.js → sieve-B_3zyLne.js} +0 -0
  527. /package/dist/{simple-mode-B90Wdavj.js → simple-mode-DSBniks8.js} +0 -0
  528. /package/dist/{smalltalk-sZNPD0HO.js → smalltalk-DRft7iPv.js} +0 -0
  529. /package/dist/{solr-DTkyqJ-Z.js → solr-RZ9uTl59.js} +0 -0
  530. /package/dist/{sparql-oHc1nm77.js → sparql-CN6qj55H.js} +0 -0
  531. /package/dist/{spreadsheet-CER0raqY.js → spreadsheet-BNNUNXA2.js} +0 -0
  532. /package/dist/{sql-ByOoEONQ.js → sql-B4x8IkwU.js} +0 -0
  533. /package/dist/{stylus-KzkX6zRB.js → stylus-Bn_ZjOQ3.js} +0 -0
  534. /package/dist/{swift-DqVxZvKo.js → swift-BLUJhMbz.js} +0 -0
  535. /package/dist/{tcl-BtWSwXfA.js → tcl-C86fxecl.js} +0 -0
  536. /package/dist/{textile-CWDbn9Ql.js → textile-DmHh2rsK.js} +0 -0
  537. /package/dist/{tiddlywiki-Cr9xyOY1.js → tiddlywiki-DI0mF2WJ.js} +0 -0
  538. /package/dist/{tiki-D5JONyfZ.js → tiki-2HU6XLLn.js} +0 -0
  539. /package/dist/{timer-D7JVdX9U.js → timer-YZl28NYN.js} +0 -0
  540. /package/dist/{toml-BfehlgmL.js → toml-GWANRNAD.js} +0 -0
  541. /package/dist/{treemap-qFGzn7xk.js → treemap-D-ka1hvx.js} +0 -0
  542. /package/dist/{troff-BZBk6AAu.js → troff-BHTsomIy.js} +0 -0
  543. /package/dist/{ttcn-DVwvXg0_.js → ttcn-DQuhn5Mn.js} +0 -0
  544. /package/dist/{ttcn-cfg-gjbVLf1L.js → ttcn-cfg-HjFYtdB-.js} +0 -0
  545. /package/dist/{turtle-CgxKXorV.js → turtle-nCay33Nv.js} +0 -0
  546. /package/dist/{vb-B9kSwTdM.js → vb-BG-XlqqJ.js} +0 -0
  547. /package/dist/{vbscript-DrUKSCdb.js → vbscript-B6vyW0-D.js} +0 -0
  548. /package/dist/{velocity-AlMYTnMy.js → velocity-CWegueqO.js} +0 -0
  549. /package/dist/{verilog-DLUaM05j.js → verilog-CzSQm4cG.js} +0 -0
  550. /package/dist/{vhdl-DUJOtSmO.js → vhdl-DqnNVL7r.js} +0 -0
  551. /package/dist/{webidl-CQp4aHk_.js → webidl-DXEUpDWH.js} +0 -0
  552. /package/dist/{xquery-IxkjlwOD.js → xquery-Ba_NB5bD.js} +0 -0
  553. /package/dist/{yacas-Bnctn5w8.js → yacas-HKQU6hyk.js} +0 -0
  554. /package/dist/{z80-DrFwhx53.js → z80-CXkHXLdj.js} +0 -0
@@ -85,6 +85,7 @@ interface Props {
85
85
  className?: string;
86
86
  consoleOutputs: WithResponse<OutputMessage>[];
87
87
  stale: boolean;
88
+ interrupted: boolean;
88
89
  debuggerActive: boolean;
89
90
  onRefactorWithAI?: OnRefactorWithAI;
90
91
  onClear?: () => void;
@@ -111,6 +112,7 @@ const ConsoleOutputInternal = (props: Props): React.ReactNode => {
111
112
  const {
112
113
  consoleOutputs: rawConsoleOutputs,
113
114
  stale,
115
+ interrupted,
114
116
  cellName,
115
117
  cellId,
116
118
  onSubmitDebugger,
@@ -280,6 +282,7 @@ const ConsoleOutputInternal = (props: Props): React.ReactNode => {
280
282
  output={output.data}
281
283
  response={output.response}
282
284
  isPassword={isPassword}
285
+ interrupted={interrupted}
283
286
  />
284
287
  );
285
288
  }
@@ -359,9 +362,9 @@ const StdInput = (props: {
359
362
  if (e.key === "Enter" && !e.shiftKey) {
360
363
  if (value) {
361
364
  addToHistory(value);
362
- onSubmit(value);
363
- setValue("");
364
365
  }
366
+ onSubmit(value);
367
+ setValue("");
365
368
  e.preventDefault();
366
369
  e.stopPropagation();
367
370
  }
@@ -382,12 +385,27 @@ const StdInputWithResponse = (props: {
382
385
  output: string;
383
386
  response?: string;
384
387
  isPassword?: boolean;
388
+ interrupted?: boolean;
385
389
  }) => {
390
+ const { output, response, isPassword, interrupted } = props;
391
+ const hasResponse = response != null && response !== "";
392
+ const wasInterruptedWithoutResponse = interrupted && !hasResponse;
393
+
386
394
  return (
387
395
  <div className="flex gap-2 items-center">
388
- {renderText(props.output)}
389
- {!props.isPassword && (
390
- <span className="text-(--sky-11)">{props.response}</span>
396
+ {renderText(output)}
397
+ {!isPassword && !wasInterruptedWithoutResponse && (
398
+ <span
399
+ className="inline-flex items-center gap-1 text-(--sky-11)"
400
+ aria-label="stdin response"
401
+ >
402
+ <ChevronRightIcon className="w-4 h-4 shrink-0 opacity-70" />
403
+ {hasResponse ? (
404
+ response
405
+ ) : (
406
+ <span className="italic opacity-70">(empty)</span>
407
+ )}
408
+ </span>
391
409
  )}
392
410
  </div>
393
411
  );
@@ -28,6 +28,7 @@ describe("ConsoleOutput integration", () => {
28
28
  cellName: "test_cell",
29
29
  consoleOutputs: [] as WithResponse<OutputMessage>[],
30
30
  stale: false,
31
+ interrupted: false,
31
32
  debuggerActive: false,
32
33
  onSubmitDebugger: () => {
33
34
  // noop
@@ -59,6 +60,7 @@ describe("ConsoleOutput pdb history", () => {
59
60
  cellName: "test_cell",
60
61
  consoleOutputs: [] as WithResponse<OutputMessage>[],
61
62
  stale: false,
63
+ interrupted: false,
62
64
  debuggerActive: false,
63
65
  onSubmitDebugger: vi.fn(),
64
66
  };
@@ -118,6 +120,82 @@ describe("ConsoleOutput pdb history", () => {
118
120
  expect(newInput).toHaveValue("next");
119
121
  });
120
122
 
123
+ it("should submit an empty string when Enter is pressed with no input", () => {
124
+ // Many CLIs prompt "Press Enter to continue" and expect "" back.
125
+ const onSubmitDebugger = vi.fn();
126
+ const outputs: WithResponse<OutputMessage>[] = [
127
+ stdinPrompt("Press Enter to continue: "),
128
+ ];
129
+
130
+ renderWithProvider(
131
+ <ConsoleOutput
132
+ {...defaultProps}
133
+ consoleOutputs={outputs}
134
+ onSubmitDebugger={onSubmitDebugger}
135
+ />,
136
+ );
137
+
138
+ const input = screen.getByTestId("console-input");
139
+ fireEvent.keyDown(input, { key: "Enter" });
140
+
141
+ expect(onSubmitDebugger).toHaveBeenCalledWith("", 0);
142
+ });
143
+
144
+ it("should not record empty submissions in input history", () => {
145
+ const onSubmitDebugger = vi.fn();
146
+ const outputs1: WithResponse<OutputMessage>[] = [stdinPrompt("(Pdb) ")];
147
+
148
+ const { rerender } = renderWithProvider(
149
+ <ConsoleOutput
150
+ {...defaultProps}
151
+ consoleOutputs={outputs1}
152
+ onSubmitDebugger={onSubmitDebugger}
153
+ />,
154
+ );
155
+
156
+ let input = screen.getByTestId("console-input");
157
+ fireEvent.change(input, { target: { value: "step" } });
158
+ fireEvent.keyDown(input, { key: "Enter" });
159
+
160
+ const outputs2: WithResponse<OutputMessage>[] = [
161
+ stdinPrompt("(Pdb) ", "step"),
162
+ stdinPrompt("(Pdb) "),
163
+ ];
164
+ rerender(
165
+ <TooltipProvider>
166
+ <ConsoleOutput
167
+ {...defaultProps}
168
+ consoleOutputs={outputs2}
169
+ onSubmitDebugger={onSubmitDebugger}
170
+ />
171
+ </TooltipProvider>,
172
+ );
173
+
174
+ // Submit an empty value; this should NOT enter the history stack.
175
+ input = screen.getByTestId("console-input");
176
+ fireEvent.keyDown(input, { key: "Enter" });
177
+
178
+ const outputs3: WithResponse<OutputMessage>[] = [
179
+ stdinPrompt("(Pdb) ", "step"),
180
+ stdinPrompt("(Pdb) ", ""),
181
+ stdinPrompt("(Pdb) "),
182
+ ];
183
+ rerender(
184
+ <TooltipProvider>
185
+ <ConsoleOutput
186
+ {...defaultProps}
187
+ consoleOutputs={outputs3}
188
+ onSubmitDebugger={onSubmitDebugger}
189
+ />
190
+ </TooltipProvider>,
191
+ );
192
+
193
+ // ArrowUp should jump back to "step", skipping the empty submission.
194
+ input = screen.getByTestId("console-input");
195
+ fireEvent.keyDown(input, { key: "ArrowUp" });
196
+ expect(input).toHaveValue("step");
197
+ });
198
+
121
199
  it("should navigate through multiple history entries across remounts", () => {
122
200
  const onSubmitDebugger = vi.fn();
123
201
 
@@ -192,6 +270,41 @@ describe("ConsoleOutput pdb history", () => {
192
270
  fireEvent.keyDown(input, { key: "ArrowDown" });
193
271
  expect(input).toHaveValue("");
194
272
  });
273
+
274
+ it("should distinguish an interrupted prompt from a bare-Enter submission", () => {
275
+ // After interrupt, cell.ts coerces pending stdin prompts to response: "".
276
+ // We must render that case differently from a real bare-Enter response,
277
+ // so the user isn't told they "submitted" a blank value.
278
+ const interruptedOutputs: WithResponse<OutputMessage>[] = [
279
+ stdinPrompt("Press Enter to continue: ", ""),
280
+ ];
281
+
282
+ const { rerender } = renderWithProvider(
283
+ <ConsoleOutput
284
+ {...defaultProps}
285
+ consoleOutputs={interruptedOutputs}
286
+ interrupted={true}
287
+ />,
288
+ );
289
+
290
+ // No response chunk should be rendered for an interrupted pending prompt.
291
+ expect(screen.queryByLabelText("stdin response")).not.toBeInTheDocument();
292
+
293
+ // Same outputs, but the cell isn't interrupted -- this is a real
294
+ // bare-Enter submission, so we should render the (empty) placeholder.
295
+ rerender(
296
+ <TooltipProvider>
297
+ <ConsoleOutput
298
+ {...defaultProps}
299
+ consoleOutputs={interruptedOutputs}
300
+ interrupted={false}
301
+ />
302
+ </TooltipProvider>,
303
+ );
304
+
305
+ expect(screen.getByLabelText("stdin response")).toBeInTheDocument();
306
+ expect(screen.getByText("(empty)")).toBeInTheDocument();
307
+ });
195
308
  });
196
309
 
197
310
  describe("ConsoleOutput debounced clearing", () => {
@@ -219,6 +332,7 @@ describe("ConsoleOutput debounced clearing", () => {
219
332
  cellName: "test_cell",
220
333
  consoleOutputs: [] as WithResponse<OutputMessage>[],
221
334
  stale: false,
335
+ interrupted: false,
222
336
  debuggerActive: false,
223
337
  onSubmitDebugger: vi.fn(),
224
338
  };
@@ -4,6 +4,7 @@ import { describe, it, expect } from "vitest";
4
4
  import { computeSlideCellsInfo } from "../compute-slide-cells";
5
5
  import type { SlideConfig, SlidesLayout } from "../types";
6
6
  import type { CellId } from "@/core/cells/ids";
7
+ import { cellId } from "@/__tests__/branded";
7
8
 
8
9
  interface TestCell {
9
10
  id: CellId;
@@ -15,10 +16,10 @@ const DEFAULT_OUTPUT: TestCell["output"] = { data: "ok" };
15
16
  const cell = (
16
17
  id: string,
17
18
  output: TestCell["output"] = DEFAULT_OUTPUT,
18
- ): TestCell => ({ id: id as CellId, output });
19
+ ): TestCell => ({ id: cellId(id), output });
19
20
 
20
21
  const layoutOf = (entries: Array<[string, SlideConfig]>): SlidesLayout => ({
21
- cells: new Map(entries.map(([id, cfg]) => [id as CellId, cfg])),
22
+ cells: new Map(entries.map(([id, cfg]) => [cellId(id), cfg])),
22
23
  deck: {},
23
24
  });
24
25
 
@@ -121,7 +122,7 @@ describe("computeSlideCellsInfo", () => {
121
122
  // Skipped cells are still "visible" deck cells — they just aren't rendered
122
123
  // in reveal. The minimap relies on the full list plus skippedIds.
123
124
  expect(result.cellsWithOutput.map((c) => c.id)).toEqual(["a", "b", "c"]);
124
- expect(result.slideTypes.get("b" as CellId)).toBe("skip");
125
+ expect(result.slideTypes.get(cellId("b"))).toBe("skip");
125
126
  });
126
127
 
127
128
  it("ignores layout entries for cells that have no output", () => {
@@ -137,7 +138,7 @@ describe("computeSlideCellsInfo", () => {
137
138
  );
138
139
  expect(result.cellsWithOutput.map((c) => c.id)).toEqual(["a"]);
139
140
  expect(result.skippedIds.size).toBe(0);
140
- expect(result.slideTypes.has("b" as CellId)).toBe(false);
141
+ expect(result.slideTypes.has(cellId("b"))).toBe(false);
141
142
  });
142
143
 
143
144
  it("preserves the input order of cells in cellsWithOutput", () => {
@@ -4,10 +4,11 @@ import { describe, it, expect } from "vitest";
4
4
  import { SlidesLayoutPlugin } from "../plugin";
5
5
  import type { CellData } from "@/core/cells/types";
6
6
  import type { CellId } from "@/core/cells/ids";
7
+ import { cellId } from "@/__tests__/branded";
7
8
 
8
9
  function makeCell(id: string, code = "print('hi')"): CellData {
9
10
  return {
10
- id: id as CellId,
11
+ id: cellId(id),
11
12
  name: id,
12
13
  code,
13
14
  edited: false,
@@ -198,7 +199,10 @@ const BACKWARDS_COMPAT_SNAPSHOTS: BackwardsCompatCase[] = [
198
199
  },
199
200
  {
200
201
  // Defensive: if a future version adds a new SlideConfig field and a user
201
- // downgrades, we must not crash on unknown keys.
202
+ // downgrades, we must not crash on unknown keys — AND we must not silently
203
+ // drop them either. `notes` / `background` aren't in the current schema;
204
+ // they must still be present after validate + (de)serialize so a downgrade
205
+ // followed by a save doesn't erase the newer marimo's data.
202
206
  label: "forward-compat: unknown SlideConfig fields present",
203
207
  input: {
204
208
  cells: [{ type: "slide", notes: "x", background: "#000" }],
@@ -206,7 +210,42 @@ const BACKWARDS_COMPAT_SNAPSHOTS: BackwardsCompatCase[] = [
206
210
  expected: {
207
211
  deck: {},
208
212
  cellIds: ["a"],
209
- cellEntries: [["a", { type: "slide" }]],
213
+ cellEntries: [["a", { type: "slide", notes: "x", background: "#000" }]],
214
+ },
215
+ },
216
+ {
217
+ // Same forward-compat guarantee for unknown deck-level fields (e.g. future
218
+ // Reveal options we haven't modeled yet).
219
+ label: "forward-compat: unknown deck fields present",
220
+ input: {
221
+ cells: [{}],
222
+ deck: { transition: "fade", controls: false, autoSlide: 5000 },
223
+ },
224
+ expected: {
225
+ deck: { transition: "fade", controls: false, autoSlide: 5000 },
226
+ cellIds: ["a"],
227
+ },
228
+ },
229
+ {
230
+ // `speakerNotes` was added to SlideConfig. The validator must
231
+ // know about it (so it isn't silently stripped), the deserializer must
232
+ // carry it through, and serialize → deserialize must round-trip it.
233
+ label: "speakerNotes round-trips through validate + (de)serialize",
234
+ input: {
235
+ cells: [
236
+ { type: "slide", speakerNotes: "intro" },
237
+ { type: "fragment", speakerNotes: "" },
238
+ { type: "fragment", speakerNotes: "multi\n\nline\n\nnotes" },
239
+ ],
240
+ },
241
+ expected: {
242
+ deck: {},
243
+ cellIds: ["a", "b", "c"],
244
+ cellEntries: [
245
+ ["a", { type: "slide", speakerNotes: "intro" }],
246
+ ["b", { type: "fragment", speakerNotes: "" }],
247
+ ["c", { type: "fragment", speakerNotes: "multi\n\nline\n\nnotes" }],
248
+ ],
210
249
  },
211
250
  },
212
251
  ];
@@ -223,20 +262,21 @@ describe("SlidesLayoutPlugin backwards compatibility", () => {
223
262
  parsed.success,
224
263
  `validator rejected: ${JSON.stringify(input)}`,
225
264
  ).toBe(true);
265
+ if (!parsed.success) {
266
+ return;
267
+ }
226
268
 
227
- // 2. Deserialize must succeed and reflect the user-set fields.
228
- const layout = SlidesLayoutPlugin.deserializeLayout(
229
- // Use the raw input (not the validator output) because that is what
230
- // `deserializeLayout` actually receives in production today.
231
- // oxlint-disable-next-line typescript/no-explicit-any
232
- input as any,
233
- cells,
234
- );
269
+ // 2. Deserializing the *validator output* (not the raw input) must
270
+ // preserve every field listed in `expected.cellEntries`. This is what
271
+ // catches a schema regression: if the validator silently strips a
272
+ // known field, the deserialized config won't carry it and the
273
+ // assertion below fails.
274
+ const layout = SlidesLayoutPlugin.deserializeLayout(parsed.data, cells);
235
275
  if (expected.deck !== undefined) {
236
276
  expect(layout.deck).toEqual(expected.deck);
237
277
  }
238
- for (const [cellId, expectedConfig] of expected.cellEntries ?? []) {
239
- expect(layout.cells.get(cellId as CellId)).toMatchObject(
278
+ for (const [cellEntryId, expectedConfig] of expected.cellEntries ?? []) {
279
+ expect(layout.cells.get(cellId(cellEntryId))).toMatchObject(
240
280
  expectedConfig as object,
241
281
  );
242
282
  }
@@ -251,8 +291,8 @@ describe("SlidesLayoutPlugin backwards compatibility", () => {
251
291
  reserialized,
252
292
  cells,
253
293
  );
254
- for (const [cellId, expectedConfig] of expected.cellEntries ?? []) {
255
- expect(redeserialized.cells.get(cellId as CellId)).toMatchObject(
294
+ for (const [cellEntryId, expectedConfig] of expected.cellEntries ?? []) {
295
+ expect(redeserialized.cells.get(cellId(cellEntryId))).toMatchObject(
256
296
  expectedConfig as object,
257
297
  );
258
298
  }
@@ -1,15 +1,15 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { z } from "zod";
3
+ import type { CellId } from "@/core/cells/ids";
4
+ import { Logger } from "@/utils/Logger";
4
5
  import type { ICellRendererPlugin } from "../types";
5
6
  import { SlidesLayoutRenderer } from "./slides-layout";
6
- import type {
7
- SerializedSlidesLayout,
8
- SlideConfig,
9
- SlidesLayout,
7
+ import {
8
+ type SerializedSlidesLayout,
9
+ type SlideConfig,
10
+ type SlidesLayout,
11
+ SlidesLayoutSchema,
10
12
  } from "./types";
11
- import { Logger } from "@/utils/Logger";
12
- import type { CellId } from "@/core/cells/ids";
13
13
 
14
14
  /**
15
15
  * Plugin definition for the slides layout.
@@ -20,24 +20,7 @@ export const SlidesLayoutPlugin: ICellRendererPlugin<
20
20
  > = {
21
21
  type: "slides",
22
22
  name: "Slides",
23
-
24
- // All fields are optional so layouts saved by older marimo versions will work
25
- validator: z.object({
26
- cells: z
27
- .array(
28
- z.object({
29
- type: z.enum(["slide", "sub-slide", "fragment", "skip"]).optional(),
30
- }),
31
- )
32
- .optional(),
33
- deck: z
34
- .object({
35
- transition: z
36
- .enum(["none", "fade", "slide", "convex", "concave", "zoom"])
37
- .optional(),
38
- })
39
- .optional(),
40
- }),
23
+ validator: SlidesLayoutSchema,
41
24
 
42
25
  deserializeLayout: (serialized, cells): SlidesLayout => {
43
26
  const serializedCells = serialized.cells ?? [];
@@ -3,6 +3,7 @@ import React, { useMemo, useState } from "react";
3
3
  import { useAtomValue } from "jotai";
4
4
  import { numColumnsAtom } from "@/core/cells/cells";
5
5
  import type { CellId } from "@/core/cells/ids";
6
+ import { kioskModeAtom } from "@/core/mode";
6
7
  import type { ICellRendererProps } from "../types";
7
8
  import type { SlidesLayout } from "./types";
8
9
  import { computeSlideCellsInfo } from "./compute-slide-cells";
@@ -21,7 +22,10 @@ export const SlidesLayoutRenderer: React.FC<Props> = ({
21
22
  cells,
22
23
  mode,
23
24
  }) => {
24
- const isReading = mode === "read";
25
+ // Kiosk clients (e.g. reveal.js's speaker-view iframes) are read-only and
26
+ // shouldn't show authoring chrome, so we collapse to the read-mode layout.
27
+ const kioskMode = useAtomValue(kioskModeAtom);
28
+ const isReading = mode === "read" || kioskMode;
25
29
  const numColumns = useAtomValue(numColumnsAtom);
26
30
  const isMultiColumn = numColumns > 1;
27
31
  const [activeCellId, setActiveCellId] = useState<CellId | null>(null);
@@ -52,14 +56,23 @@ export const SlidesLayoutRenderer: React.FC<Props> = ({
52
56
  activeIndex={resolvedIndex}
53
57
  onSlideChange={handleSlideChange}
54
58
  configWidth={300}
55
- mode={mode}
56
- isEditable={mode !== "read"}
59
+ mode={isReading ? "read" : mode}
60
+ isEditable={!isReading}
57
61
  />
58
62
  );
59
63
 
60
64
  if (isReading) {
61
- // Cap the deck height and derive width from height via aspect-video so it stays 16:9 without
62
- // ballooning to the full viewport on wide screens.
65
+ // In kiosk mode (e.g. reveal.js's speaker-view iframes), anchor to the
66
+ // iframe viewport with `dvh`/`dvw` so the deck resizes with the popup
67
+ // window. The non-kiosk read mode keeps its 16:9 cap so the deck doesn't
68
+ // balloon to the full viewport on wide screens.
69
+ if (kioskMode) {
70
+ return (
71
+ <div className="flex h-dvh w-dvw overflow-hidden bg-background">
72
+ {slides}
73
+ </div>
74
+ );
75
+ }
63
76
  return (
64
77
  <div className="p-4 flex flex-1 items-center justify-center min-h-0">
65
78
  <div className="h-full max-h-[95vh] aspect-video max-w-full flex">
@@ -70,7 +83,7 @@ export const SlidesLayoutRenderer: React.FC<Props> = ({
70
83
  }
71
84
 
72
85
  return (
73
- <div className="pr-18 pb-2 flex flex-row gap-2 min-h-0">
86
+ <div className="flex-1 pr-18 pb-2 flex flex-row gap-2 min-h-0">
74
87
  <SlidesMinimap
75
88
  cells={cellsWithOutput}
76
89
  thumbnailWidth={220}
@@ -1,41 +1,50 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- /* oxlint-disable typescript/no-empty-object-type */
3
2
 
3
+ import { z } from "zod";
4
4
  import type { CellId } from "@/core/cells/ids";
5
5
 
6
+ const SlideTypeSchema = z.enum(["slide", "sub-slide", "fragment", "skip"]);
7
+ export type SlideType = z.infer<typeof SlideTypeSchema>;
8
+
9
+ const SlideConfigSchema = z.looseObject({
10
+ type: SlideTypeSchema.optional(),
11
+ speakerNotes: z.string().optional(),
12
+ });
13
+ export type SlideConfig = z.infer<typeof SlideConfigSchema>;
14
+
15
+ const DeckTransitionSchema = z.enum([
16
+ "none",
17
+ "fade",
18
+ "slide",
19
+ "convex",
20
+ "concave",
21
+ "zoom",
22
+ ]);
23
+ export type DeckTransition = z.infer<typeof DeckTransitionSchema>;
24
+
25
+ const DeckConfigSchema = z.looseObject({
26
+ transition: DeckTransitionSchema.optional(),
27
+ });
28
+ export type DeckConfig = z.infer<typeof DeckConfigSchema>;
29
+
6
30
  /**
7
- * The serialized form of a slides layout.
8
- * This must be backwards-compatible as it is stored on the user's disk.
31
+ * Schema for the serialized form of a slides layout.
32
+ *
33
+ * This must be backwards-compatible as it is stored on the user's disk —
34
+ * fields are optional so files saved before they existed (e.g. the bare `{}`
35
+ * emitted by earlier marimo versions) still deserialize cleanly. Unknown
36
+ * keys are preserved (via `looseObject`) for the same reason.
9
37
  */
10
- // oxlint-disable-next-line typescript/consistent-type-definitions
11
- export type SerializedSlidesLayout = {
12
- // Both fields are optional so files saved before these existed (e.g. the
13
- // bare `{}` emitted by earlier marimo versions) still deserialize cleanly.
14
- deck?: DeckConfig;
15
- cells?: SlideConfig[];
16
- };
38
+ export const SlidesLayoutSchema = z.looseObject({
39
+ cells: z.array(SlideConfigSchema).optional(),
40
+ deck: DeckConfigSchema.optional(),
41
+ });
42
+ export type SerializedSlidesLayout = z.infer<typeof SlidesLayoutSchema>;
17
43
 
18
- export interface SlidesLayout extends Omit<
19
- SerializedSlidesLayout,
20
- "cells" | "deck"
21
- > {
22
- // We map the cells to their IDs so that we can track them as they move around.
44
+ /**
45
+ * Runtime form of a slides layout.
46
+ */
47
+ export interface SlidesLayout {
23
48
  cells: Map<CellId, SlideConfig>;
24
49
  deck: DeckConfig;
25
50
  }
26
-
27
- export type SlideType = "slide" | "sub-slide" | "fragment" | "skip";
28
- export interface SlideConfig {
29
- type?: SlideType;
30
- }
31
-
32
- export type DeckTransition =
33
- | "none"
34
- | "fade"
35
- | "slide"
36
- | "convex"
37
- | "concave"
38
- | "zoom";
39
- export interface DeckConfig {
40
- transition?: DeckTransition;
41
- }
@@ -405,6 +405,7 @@ const VerticalCell = memo(
405
405
  <ConsoleOutput
406
406
  consoleOutputs={consoleOutputs}
407
407
  stale={outputStale}
408
+ interrupted={interrupted}
408
409
  cellName={name}
409
410
  onSubmitDebugger={() => null}
410
411
  cellId={cellId}
@@ -16,6 +16,7 @@ import {
16
16
  LinkIcon,
17
17
  MessagesSquareIcon,
18
18
  OrbitIcon,
19
+ PackageIcon,
19
20
  YoutubeIcon,
20
21
  } from "lucide-react";
21
22
  import type React from "react";
@@ -58,6 +59,11 @@ const TUTORIALS: Record<
58
59
  FileIcon,
59
60
  "Understand marimo's pure-Python file format",
60
61
  ],
62
+ "external-dependencies": [
63
+ "External dependencies",
64
+ PackageIcon,
65
+ "Declare dependencies with Python script metadata",
66
+ ],
61
67
  "for-jupyter-users": [
62
68
  "For Jupyter users",
63
69
  OrbitIcon,
@@ -34,7 +34,10 @@ const RunPage = (props: Props) => {
34
34
 
35
35
  const Watermark = () => {
36
36
  return (
37
- <div className="fixed bottom-0 right-0 z-50" data-testid="watermark">
37
+ <div
38
+ className="fixed bottom-0 right-0 z-50 print:hidden"
39
+ data-testid="watermark"
40
+ >
38
41
  <a
39
42
  href={Constants.githubPage}
40
43
  target="_blank"
@@ -289,6 +289,7 @@ export const ScratchPad: React.FC = () => {
289
289
  consoleOutputs={consoleOutputs}
290
290
  className="overflow-auto"
291
291
  stale={false}
292
+ interrupted={false}
292
293
  cellName={DEFAULT_CELL_NAME}
293
294
  onSubmitDebugger={Functions.NOOP}
294
295
  cellId={cellId}