@marimo-team/islands 0.21.2-dev9 → 0.21.2-dev90

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 (666) hide show
  1. package/dist/{Combination-BBPQRrDo.js → Combination-B_FmEi05.js} +3 -3
  2. package/dist/{ConnectedDataExplorerComponent-D0GoOd_c.js → ConnectedDataExplorerComponent-CLLlotD4.js} +30 -29
  3. package/dist/{ImageComparisonComponent-BYQfAfSR.js → ImageComparisonComponent-BC00mJmw.js} +1 -1
  4. package/dist/{Plot-DfUav0o0.js → Plot-B1ahrLui.js} +1 -1
  5. package/dist/{_baseIsEqual-CvgsjYoW.js → _baseIsEqual-QWfxbVqg.js} +1 -1
  6. package/dist/_basePickBy-Do49cXgl.js +34 -0
  7. package/dist/{_baseUniq-BUFhl85h.js → _baseUniq-vFmWNipH.js} +1 -1
  8. package/dist/{any-language-editor-DlsjUw_l.js → any-language-editor-CSvBdMtG.js} +22 -21
  9. package/dist/apl-e1B5LPEL.js +4 -0
  10. package/dist/{arc-DXxE-tFl.js → arc-CHF8PiiF.js} +2 -2
  11. package/dist/architecture-7HQA4BMR-KeUc82D1.js +6 -0
  12. package/dist/{architectureDiagram-VXUJARFQ-Df0FNeBR.js → architectureDiagram-VXUJARFQ-CIl7H_7A.js} +19 -19
  13. package/dist/asciiarmor-B-gwgesP.js +4 -0
  14. package/dist/asn1-DF2ckRB4.js +4 -0
  15. package/dist/{blockDiagram-VD42YOAC-DszWqlLz.js → blockDiagram-VD42YOAC-Bxg4bo7H.js} +14 -14
  16. package/dist/brainfuck-4G-7_gq_.js +4 -0
  17. package/dist/{button-BKkuUpZh.js → button-B1ZgJ7Cc.js} +2 -2
  18. package/dist/{c4Diagram-YG6GDRKO-Dyj8LoUX.js → c4Diagram-YG6GDRKO-k4TEDUb8.js} +6 -6
  19. package/dist/capabilities-DAGZLwa6.js +36 -0
  20. package/dist/{channel-CUFaIkTh.js → channel-CCR8wXOx.js} +1 -1
  21. package/dist/chat-ui-CN_DUtLR.js +7710 -0
  22. package/dist/{check-Diwc5emq.js → check-B2OoWw2h.js} +1 -1
  23. package/dist/{chunk-4BX2VUAB-CwMMQLZ_.js → chunk-4BX2VUAB-BwfrWBqN.js} +1 -1
  24. package/dist/{chunk-4F5CHEZ2-CRwwZ2ED.js → chunk-4F5CHEZ2-BigWQaTs.js} +1 -1
  25. package/dist/{chunk-55IACEB6-Dj8CzJvE.js → chunk-55IACEB6-D8THf2mi.js} +1 -1
  26. package/dist/{chunk-5FQGJX7Z-BkzUmppO.js → chunk-5FQGJX7Z-Cz2QbNIw.js} +1504 -2846
  27. package/dist/{chunk-ABZYJK2D-7QYXAAhe.js → chunk-ABZYJK2D-NPoevJcI.js} +3 -3
  28. package/dist/{chunk-ATLVNIR6-pmHPAPSd.js → chunk-ATLVNIR6-DAhC1FCG.js} +2 -2
  29. package/dist/{chunk-B2363JML-BuBMltZc.js → chunk-B2363JML-DOYwB798.js} +1 -1
  30. package/dist/{chunk-B4BG7PRW-Dbta9cTX.js → chunk-B4BG7PRW-BDmytgmO.js} +7 -7
  31. package/dist/{chunk-CVBHYZKI-D8iwHsLF.js → chunk-CVBHYZKI-B6xhgaBd.js} +1 -1
  32. package/dist/{chunk-DI55MBZ5-DyKB35wC.js → chunk-DI55MBZ5-C6iNEV8U.js} +6 -6
  33. package/dist/{chunk-EXTU4WIE-BRFl4iNd.js → chunk-EXTU4WIE-BtA6WdD4.js} +2 -2
  34. package/dist/{chunk-FMBD7UC4-XTL4xAvH.js → chunk-FMBD7UC4-CHdus51S.js} +1 -1
  35. package/dist/{chunk-FRFDVMJY-Bk2LD5Te.js → chunk-FRFDVMJY-Bo7Hv3UF.js} +1 -1
  36. package/dist/{chunk-HN2XXSSU-CzO5Phf0.js → chunk-HN2XXSSU-2Vfbq-kU.js} +1 -1
  37. package/dist/{chunk-JA3XYJ7Z-BkrY9SdL.js → chunk-JA3XYJ7Z-BeXqAsc9.js} +3 -3
  38. package/dist/{chunk-JZLCHNYA-Bk_Lil-q.js → chunk-JZLCHNYA-ibE7xTEx.js} +6 -6
  39. package/dist/{chunk-MI3HLSF2-DvCKDmpi.js → chunk-MI3HLSF2-Do0-KRc0.js} +1 -1
  40. package/dist/{chunk-N4CR4FBY-f5n6meOd.js → chunk-N4CR4FBY-CHAcubAf.js} +7 -7
  41. package/dist/{chunk-PL6DKKU2-DiFkzMfM.js → chunk-PL6DKKU2-D3wYz-iW.js} +1 -1
  42. package/dist/{chunk-QN33PNHL-CXfJywHv.js → chunk-QN33PNHL-CDWJY_kT.js} +2 -2
  43. package/dist/{chunk-QXUST7PY-D7-26sj3.js → chunk-QXUST7PY-CV37xRZd.js} +10 -10
  44. package/dist/{chunk-QZHKN3VN-CYbwZKgJ.js → chunk-QZHKN3VN-B_Mdb8GC.js} +1 -1
  45. package/dist/{chunk-S3R3BYOJ-BRT9vd1R.js → chunk-S3R3BYOJ-CGlk8NH-.js} +6 -6
  46. package/dist/{chunk-SJTYNZTY-BvVkbShU.js → chunk-SJTYNZTY-Bauwp2-p.js} +1 -1
  47. package/dist/{chunk-TCCFYFTB-DqxhgXG0.js → chunk-TCCFYFTB-C5_FjmXA.js} +15 -14
  48. package/dist/{chunk-TQ3KTPDO-CPkEruAA.js → chunk-TQ3KTPDO-TjHW8xfv.js} +1 -1
  49. package/dist/{chunk-TZMSLE5B-DSfBOnzx.js → chunk-TZMSLE5B-DfY6C3FB.js} +3 -3
  50. package/dist/{chunk-UMXZTB3W-C4ypIY3V.js → chunk-UMXZTB3W-DdRiIIOF.js} +1 -1
  51. package/dist/classDiagram-2ON5EDUG-DbWOiPgs.js +30 -0
  52. package/dist/classDiagram-v2-WZHVMYZB-COnXBrRA.js +30 -0
  53. package/dist/{clike-CLJYUAWw.js → clike-7lgyEYRk.js} +1 -1
  54. package/dist/clojure-CUybM11R.js +4 -0
  55. package/dist/{clone-CEQ-pda1.js → clone-BM9_Wkaf.js} +1 -1
  56. package/dist/cmake-BPjGcuDL.js +4 -0
  57. package/dist/cobol-BETk_nb6.js +4 -0
  58. package/dist/{code-block-37QAKDTI-DV_ZyoUh.js → code-block-37QAKDTI-DW3JC11U.js} +2 -2
  59. package/dist/coffeescript-CManZxXL.js +4 -0
  60. package/dist/commonlisp-DWkn7GW8.js +4 -0
  61. package/dist/{constants-CytQ_3LM.js → constants-LmeAawHa.js} +3 -3
  62. package/dist/{copy-DIK6DiIA.js → copy-B7XqFjF_.js} +14 -4
  63. package/dist/{cose-bilkent-S5V4N54A-BCDTZDay.js → cose-bilkent-S5V4N54A-DXHZkJKX.js} +2 -2
  64. package/dist/crystal-CCbg5EUH.js +4 -0
  65. package/dist/css-By8eo-XS.js +4 -0
  66. package/dist/cypher-DwfHg3nP.js +4 -0
  67. package/dist/d-Brs1wNbw.js +4 -0
  68. package/dist/{dagre-6UL2VRFP-DGEbtmgU.js → dagre-6UL2VRFP-B8UW0fXE.js} +16 -16
  69. package/dist/{dagre-BVnNvbvD.js → dagre-B3-rUlCT.js} +14 -14
  70. package/dist/{data-grid-overlay-editor-BD0BFHzy.js → data-grid-overlay-editor-CpL5Zajy.js} +3 -3
  71. package/dist/{diagram-PSM6KHXK-CG_usglE.js → diagram-PSM6KHXK-DGD-j1bM.js} +22 -22
  72. package/dist/{diagram-QEK2KX5R-CtGFEwzJ.js → diagram-QEK2KX5R-DgsT6ZW4.js} +17 -17
  73. package/dist/{diagram-S2PKOQOG-ClKAGmbv.js → diagram-S2PKOQOG-CDh5Ij8z.js} +17 -17
  74. package/dist/diff-DJIRmJ1g.js +4 -0
  75. package/dist/{dist-DodLQWPg.js → dist--MUqhsBh.js} +1 -1
  76. package/dist/{dist-CAKwXCWI.js → dist-8-jPFKws.js} +2 -2
  77. package/dist/{dist-i-ud9aCA.js → dist-B6ZvKwIz.js} +1 -1
  78. package/dist/{dist-BGZ7TWS9.js → dist-B771Ewvn.js} +3 -3
  79. package/dist/dist-BK8Ch8me.js +5 -0
  80. package/dist/dist-BPlAe3w3.js +6 -0
  81. package/dist/dist-BQnLGf1A.js +8 -0
  82. package/dist/dist-BZRBnAnM.js +5 -0
  83. package/dist/{dist-D4gcY469.js → dist-Bc-mOFlk.js} +2 -2
  84. package/dist/{dist-BUrWeMEP.js → dist-Bg1YGq2b.js} +1 -1
  85. package/dist/{dist-C0Rnbr-_.js → dist-BiNtCiQ9.js} +4 -4
  86. package/dist/{dist-B9EjSb9T.js → dist-BjYGwQ65.js} +1 -1
  87. package/dist/dist-BmTKj-5m.js +5 -0
  88. package/dist/{dist-D_-CGmlh.js → dist-BsyHyGqX.js} +2 -2
  89. package/dist/dist-C1UyhB0b.js +5 -0
  90. package/dist/dist-C1uqqTuH.js +5 -0
  91. package/dist/dist-CCeSY9xv.js +5 -0
  92. package/dist/{dist-DEj2X26M.js → dist-CEmSeYaL.js} +2 -2
  93. package/dist/{dist-CDHl2i1x.js → dist-CJEfzjG5.js} +4 -4
  94. package/dist/dist-CMWhb0s1.js +5 -0
  95. package/dist/{dist-BSfYc7vq.js → dist-CXsGjNbR.js} +2 -2
  96. package/dist/{dist-CseYuPtL.js → dist-CpNdP46s.js} +2 -2
  97. package/dist/{dist-CPlGUbk-.js → dist-CsToCMcA.js} +2 -2
  98. package/dist/dist-CwEBZkrQ.js +550 -0
  99. package/dist/{dist-DERtJN02.js → dist-CwP9oyR8.js} +2 -2
  100. package/dist/{dist-C4K7pumm.js → dist-D2nC1On3.js} +2 -2
  101. package/dist/{dist-BFxYppVR.js → dist-DEmPLkH9.js} +4 -4
  102. package/dist/{dist-lNe4i1Nm.js → dist-DKr1M-ru.js} +1 -1
  103. package/dist/{dist-D5NMgbbv.js → dist-DNSJBJI7.js} +2 -2
  104. package/dist/{dist-HoZO6brh.js → dist-DSSPn3fP.js} +2 -2
  105. package/dist/dist-DYoFz28E.js +8 -0
  106. package/dist/dist-DeSnQwvL.js +6 -0
  107. package/dist/{dist-COpDrwi-.js → dist-Dl9_0tkc.js} +1 -1
  108. package/dist/{dist-Bq5eYK43.js → dist-DlacJSaE.js} +2 -2
  109. package/dist/{dist-RNGn_-uD.js → dist-DoO66t8e.js} +1 -1
  110. package/dist/{dist-Bq9zYwJs.js → dist-DqT0O-4m.js} +5 -5
  111. package/dist/{dist-CSEWGuDq.js → dist-DqweMfpO.js} +1 -1
  112. package/dist/{dist-gc9KgJuA.js → dist-DvjVNme1.js} +1 -1
  113. package/dist/{dist-DOoqn-VL.js → dist-N1lm7LVK.js} +71 -37
  114. package/dist/{dist-Cl5iM8xL.js → dist-QxBlbqgj.js} +3 -3
  115. package/dist/{dist-Ux6dL_VB.js → dist-TuFHGVp2.js} +1 -1
  116. package/dist/dist-e8VqCQ_P.js +5 -0
  117. package/dist/{dist-DUretbKK.js → dist-fRW2mZtS.js} +2 -2
  118. package/dist/dist-kGaha3sX.js +8 -0
  119. package/dist/{dist-BpMlUdNO.js → dist-mpvRA2Bc.js} +3 -3
  120. package/dist/dist-wQD8nhf9.js +8 -0
  121. package/dist/{dockerfile-BxhYdLHL.js → dockerfile-DG6A2DdH.js} +1 -1
  122. package/dist/dtd-Dyiazv4N.js +4 -0
  123. package/dist/dylan-D8Fcw7NA.js +4 -0
  124. package/dist/ecl-CjKp8Vii.js +4 -0
  125. package/dist/eiffel-K9ViOX5r.js +4 -0
  126. package/dist/elm-B5NVtRco.js +4 -0
  127. package/dist/{erDiagram-Q2GNP2WA-DPMseVVp.js → erDiagram-Q2GNP2WA-CGK0SUdu.js} +15 -15
  128. package/dist/erlang-BnLzgk7R.js +4 -0
  129. package/dist/{error-banner-Dmi5ujan.js → error-banner-D-KBGvBj.js} +3 -3
  130. package/dist/esm-B_4hpmV_.js +1587 -0
  131. package/dist/esm-Bcbo0Yvz.js +2805 -0
  132. package/dist/{factor-Png_OsVt.js → factor-Bq2mGIHt.js} +1 -1
  133. package/dist/factor-C7f9Jz5R.js +4 -0
  134. package/dist/{flowDiagram-NV44I4VS-BpAIFwW7.js → flowDiagram-NV44I4VS-PjhviPI_.js} +17 -17
  135. package/dist/forth-rGM8jLao.js +4 -0
  136. package/dist/fortran-B3acSe0i.js +4 -0
  137. package/dist/{ganttDiagram-JELNMOA3-DXYghZ9C.js → ganttDiagram-JELNMOA3-CUVtQqgT.js} +10 -10
  138. package/dist/gas-Bb1Vmv_N.js +4 -0
  139. package/dist/gherkin-C9Lyidgd.js +4 -0
  140. package/dist/{gitGraph-G5XIXVHT-ChHUSAop.js → gitGraph-G5XIXVHT-B6b-Z3mr.js} +3 -3
  141. package/dist/{gitGraphDiagram-V2S2FVAM-CBL-7g3_.js → gitGraphDiagram-V2S2FVAM-CNdrlK1I.js} +17 -17
  142. package/dist/{glide-data-editor-pZyd9UJ_.js → glide-data-editor-DQEuWuu_.js} +94 -93
  143. package/dist/{graphlib-D18eZCT4.js → graphlib-CIQjMxKw.js} +6 -6
  144. package/dist/groovy-DQk6XcGH.js +4 -0
  145. package/dist/{hasIn-B9AbGLj3.js → hasIn-eLCPDloT.js} +5 -5
  146. package/dist/haskell-mV0Vw9gv.js +4 -0
  147. package/dist/haxe-DqxN89zH.js +5 -0
  148. package/dist/idl-ya8W561J.js +4 -0
  149. package/dist/{info-VBDWY6EO-CwyXEo8E.js → info-VBDWY6EO-DfFl0Z8H.js} +3 -3
  150. package/dist/infoDiagram-HS3SLOUP-DGimKb9k.js +30 -0
  151. package/dist/{types-CGc7peZV.js → input-B8CM-AuM.js} +208 -405
  152. package/dist/{isEmpty-C-xMag79.js → isEmpty-CI9akcsL.js} +2 -2
  153. package/dist/{isString-D-vNYDBA.js → isString-xiQUcgm4.js} +1 -1
  154. package/dist/{isSymbol-Dyt2NSnN.js → isSymbol-DFp8040B.js} +1 -1
  155. package/dist/javascript-CgqgptVu.js +4 -0
  156. package/dist/{journeyDiagram-XKPGCS4Q-D5BIjS4N.js → journeyDiagram-XKPGCS4Q-CyoESVVb.js} +7 -7
  157. package/dist/julia-CFQ-HusI.js +4 -0
  158. package/dist/{kanban-definition-3W4ZIXB7-DhDkqxFB.js → kanban-definition-3W4ZIXB7-Doc2YV80.js} +12 -12
  159. package/dist/{katex-pyO_klYC.js → katex-qPqrBHZ8.js} +1 -1
  160. package/dist/{label-BbpGrh4j.js → label-e5-84vsp.js} +10 -10
  161. package/dist/{line-C1k1rG3Z.js → line-BWRi3U3S.js} +3 -3
  162. package/dist/{linear-DIp6l9sg.js → linear-DZ8_CGCd.js} +4 -4
  163. package/dist/livescript-D__3TmDo.js +4 -0
  164. package/dist/{loader-CABJs6GU.js → loader-C51Irhxm.js} +3 -3
  165. package/dist/lua-Bytcgj_W.js +4 -0
  166. package/dist/main.js +35443 -70505
  167. package/dist/mathematica-DJhvVKvl.js +4 -0
  168. package/dist/mbox-IGHPCjfR.js +4 -0
  169. package/dist/{memoize-Cs8aS5RW.js → memoize-zYM53m8l.js} +1 -1
  170. package/dist/{merge-NuyC7LN7.js → merge-CqBPpP0q.js} +1 -1
  171. package/dist/mermaid-4DMBBIKO-DQdI9xDR.js +6 -0
  172. package/dist/{mermaid-CrKqsE2j.js → mermaid-CzWpf81s.js} +50 -50
  173. package/dist/{mermaid-parser.core-OkWZ8nr-.js → mermaid-parser.core-CrrqF1ZZ.js} +8 -8
  174. package/dist/{mhchem-DckvwtV8.js → mhchem-BwoRNwg_.js} +1 -1
  175. package/dist/micromark-factory-space-DQCQsiYz.js +1341 -0
  176. package/dist/{min-ECVRnCdn.js → min-IJGSWMpU.js} +8 -8
  177. package/dist/{mindmap-definition-VGOIOE7T-BxQi78Vl.js → mindmap-definition-VGOIOE7T-L2ybicpO.js} +14 -14
  178. package/dist/mirc-tcwvVugm.js +4 -0
  179. package/dist/mllike-Dx91i62r.js +6 -0
  180. package/dist/modelica-_SRt-yU5.js +4 -0
  181. package/dist/mscgen-GZrGS9gt.js +6 -0
  182. package/dist/mumps-Cv3ygyod.js +4 -0
  183. package/dist/{now-BC2mX0ZT.js → now-CnuN5fN5.js} +1 -1
  184. package/dist/nsis-BU7GeGbI.js +4 -0
  185. package/dist/{nsis-BrAITej_.js → nsis-i9_sgigf.js} +1 -1
  186. package/dist/ntriples-CL-FCYXb.js +4 -0
  187. package/dist/{number-overlay-editor-CQrncFlP.js → number-overlay-editor-D2Y0RpcH.js} +1 -1
  188. package/dist/octave-Dc6_3DIu.js +4 -0
  189. package/dist/{once-BqS42WgZ.js → once-DjP4Kbhy.js} +1 -1
  190. package/dist/{ordinal-Dcvf4J1m.js → ordinal-B4zYMadD.js} +1 -1
  191. package/dist/oz-DpUAJCXf.js +4 -0
  192. package/dist/{packet-DYOGHKS2-C62XQjZh.js → packet-DYOGHKS2-DIf3Dotq.js} +3 -3
  193. package/dist/pascal-B17mncXs.js +4 -0
  194. package/dist/perl-BTpK97q9.js +4 -0
  195. package/dist/{pie-VRWISCQL-nfAKQJw3.js → pie-VRWISCQL-Dj_gvPcD.js} +3 -3
  196. package/dist/{pieDiagram-ADFJNKIX-DfSJXUHa.js → pieDiagram-ADFJNKIX-x5w7q6Yp.js} +22 -22
  197. package/dist/pig-CFb638Ap.js +4 -0
  198. package/dist/powershell-Cxo-_2A5.js +4 -0
  199. package/dist/{precisionRound-BAc-kQ3q.js → precisionRound-C-DW449D.js} +1 -1
  200. package/dist/process-output-BfgNdve9.js +28024 -0
  201. package/dist/properties-BPgT1xTB.js +4 -0
  202. package/dist/protobuf-BgHBaIIK.js +4 -0
  203. package/dist/pug-25-oS0SG.js +4 -0
  204. package/dist/{pug-CH-17az-.js → pug-BhE2JRSg.js} +1 -1
  205. package/dist/puppet-DarIr20S.js +4 -0
  206. package/dist/python-BqmOsBsi.js +4 -0
  207. package/dist/q-D3QJCTup.js +4 -0
  208. package/dist/{quadrantDiagram-AYHSOK5B-CAcVWXc-.js → quadrantDiagram-AYHSOK5B-D5j_5qG_.js} +5 -5
  209. package/dist/r-Cz_yBX4z.js +4 -0
  210. package/dist/{radar-ZZBFDIW7-lopS8_4j.js → radar-ZZBFDIW7-DXDVq3gi.js} +3 -3
  211. package/dist/{range-BKaWvVUE.js → range-DffmqG6L.js} +4 -3
  212. package/dist/{react-vega-C6kwcd86.js → react-vega-BBUxfZoV.js} +19 -19
  213. package/dist/react-vega-Cs3lfDw8.js +9 -0
  214. package/dist/{reduce-CqQo8ppc.js → reduce-CGwzfrDo.js} +5 -5
  215. package/dist/{requirementDiagram-UZGBJVZJ-BU7dwzFM.js → requirementDiagram-UZGBJVZJ-3SoJH6yP.js} +14 -14
  216. package/dist/rpm-DGOtYwAI.js +5 -0
  217. package/dist/ruby-DBZu4rPc.js +4 -0
  218. package/dist/{sankeyDiagram-TZEHDZUN-BVJnR4_b.js → sankeyDiagram-TZEHDZUN-fGkFNe5q.js} +5 -5
  219. package/dist/sas-Dd1D9qTq.js +4 -0
  220. package/dist/scheme-BmDjvTHX.js +4 -0
  221. package/dist/{sequenceDiagram-WL72ISMW-CQcFQTwX.js → sequenceDiagram-WL72ISMW-BE2uTn_d.js} +8 -8
  222. package/dist/shell-BL8zFSaj.js +4 -0
  223. package/dist/sieve-BAx2WqUP.js +4 -0
  224. package/dist/{slides-component-GkilRW21.js → slides-component-Cjo6LzW9.js} +3 -3
  225. package/dist/smalltalk-CYRzF7VV.js +4 -0
  226. package/dist/sparql-YWaDRO4A.js +4 -0
  227. package/dist/{spec-Bfvf9Hre.js → spec-UGFYIDJb.js} +12 -422
  228. package/dist/{src-CHUphWwL.js → src-BY0BGg6V.js} +1 -1
  229. package/dist/{stateDiagram-FKZM4ZOC-Dx9AIGDe.js → stateDiagram-FKZM4ZOC-Dmk9IAOx.js} +19 -19
  230. package/dist/stateDiagram-v2-4FDKWEC3-BGF0BvU6.js +29 -0
  231. package/dist/{step-BbmiiQdf.js → step-DGAGWg3y.js} +1 -1
  232. package/dist/stex-BvZqVamL.js +4 -0
  233. package/dist/style.css +1 -1
  234. package/dist/stylus-lYsyLFc1.js +4 -0
  235. package/dist/swift-ClQz9z1n.js +4 -0
  236. package/dist/tcl-B3jhsfqY.js +4 -0
  237. package/dist/textile-Cb1Dw7Aq.js +4 -0
  238. package/dist/{time-DFFVNc1Q.js → time-C_pvjzP0.js} +4 -4
  239. package/dist/{timeline-definition-IT6M3QCI-D8B3p7ID.js → timeline-definition-IT6M3QCI-CvB4yGrN.js} +4 -4
  240. package/dist/toDate-COI3hP-5.js +637 -0
  241. package/dist/toInteger-BUeg_O0F.js +15 -0
  242. package/dist/{toNumber-CbZ70FdN.js → toNumber-xFPoy1OI.js} +2 -2
  243. package/dist/{toString-DbIAWQpF.js → toString-CtXX84W6.js} +2 -2
  244. package/dist/toml-nHZhetdO.js +4 -0
  245. package/dist/{tooltip-CKG75XQa.js → tooltip-DnI4CwIS.js} +4 -4
  246. package/dist/{treemap-GDKQZRPO-CkR-5ai2.js → treemap-GDKQZRPO-CIG6WH-x.js} +3 -3
  247. package/dist/troff-DuJAGWKH.js +4 -0
  248. package/dist/ttcn-BxrcwP21.js +4 -0
  249. package/dist/ttcn-cfg-BAg_9dcc.js +4 -0
  250. package/dist/turtle-zCq949as.js +4 -0
  251. package/dist/types-BqLAaq-i.js +209 -0
  252. package/dist/{uniq-H2E5nMLq.js → uniq-CCKqEs7T.js} +1 -1
  253. package/dist/{useAsyncData-CEjJxwFB.js → useAsyncData-BtHYXgXF.js} +2 -2
  254. package/dist/useDeepCompareMemoize-9dXEtK7u.js +124 -0
  255. package/dist/useIframeCapabilities-CzVvBDe8.js +13 -0
  256. package/dist/useLifecycle-Be1LUuEg.js +427 -0
  257. package/dist/{useTheme-CPybHVFN.js → useTheme-5GTtjXjy.js} +4 -4
  258. package/dist/vb-De5hElus.js +4 -0
  259. package/dist/vbscript-Cypcpv4F.js +4 -0
  260. package/dist/{vega-component-CuPTCRp5.js → vega-component-BQNW4qnB.js} +198 -197
  261. package/dist/{vega-loader.browser-CQ-lnUkI.js → vega-loader.browser-DnqN5nbz.js} +3 -3
  262. package/dist/velocity-Di7l-yhe.js +4 -0
  263. package/dist/verilog-Bzi-S3g2.js +4 -0
  264. package/dist/vhdl-B0ZZITaW.js +4 -0
  265. package/dist/webidl-0sviiRcN.js +4 -0
  266. package/dist/xquery-B4qMVWaB.js +4 -0
  267. package/dist/{xychartDiagram-PRI3JC2R-XO8FiQjU.js → xychartDiagram-PRI3JC2R-BbEInSqY.js} +13 -13
  268. package/dist/yacas-Jt25Fuv8.js +4 -0
  269. package/dist/z80-CrcbYzmp.js +4 -0
  270. package/package.json +4 -3
  271. package/src/__mocks__/notebook.ts +9 -9
  272. package/src/__mocks__/requests.ts +2 -1
  273. package/src/__tests__/branded.ts +20 -0
  274. package/src/__tests__/setup.ts +15 -0
  275. package/src/components/app-config/__tests__/get-dirty-values.test.ts +1 -1
  276. package/src/components/app-config/get-dirty-values.ts +100 -0
  277. package/src/components/app-config/user-config-form.tsx +6 -101
  278. package/src/components/chat/chat-utils.ts +7 -8
  279. package/src/components/data-table/TableActions.tsx +8 -2
  280. package/src/components/data-table/__tests__/columns.test.tsx +138 -0
  281. package/src/components/data-table/__tests__/data-table.test.tsx +63 -0
  282. package/src/components/data-table/__tests__/utils.test.ts +138 -1
  283. package/src/components/data-table/charts/__tests__/storage.test.ts +7 -7
  284. package/src/components/data-table/columns.tsx +44 -4
  285. package/src/components/data-table/context-menu.tsx +9 -5
  286. package/src/components/data-table/data-table.tsx +13 -31
  287. package/src/components/data-table/filters.ts +1 -0
  288. package/src/components/data-table/hooks/use-scroll-container-height.ts +97 -0
  289. package/src/components/data-table/range-focus/__tests__/atoms.test.ts +8 -2
  290. package/src/components/data-table/range-focus/__tests__/test-utils.ts +2 -0
  291. package/src/components/data-table/range-focus/__tests__/use-cell-range-selection.test.ts +119 -0
  292. package/src/components/data-table/range-focus/__tests__/utils.test.ts +82 -8
  293. package/src/components/data-table/range-focus/atoms.ts +2 -2
  294. package/src/components/data-table/range-focus/use-cell-range-selection.ts +19 -0
  295. package/src/components/data-table/range-focus/utils.ts +50 -12
  296. package/src/components/data-table/renderers.tsx +103 -46
  297. package/src/components/data-table/types.ts +21 -0
  298. package/src/components/data-table/utils.ts +87 -0
  299. package/src/components/datasources/datasources.tsx +45 -0
  300. package/src/components/editor/__tests__/data-attributes.test.tsx +8 -8
  301. package/src/components/editor/ai/__tests__/completion-utils.test.ts +15 -15
  302. package/src/components/editor/connections/storage/__tests__/__snapshots__/as-code.test.ts.snap +2 -2
  303. package/src/components/editor/connections/storage/as-code.ts +2 -2
  304. package/src/components/editor/file-tree/file-explorer.tsx +16 -2
  305. package/src/components/editor/file-tree/file-viewer.tsx +17 -3
  306. package/src/components/editor/navigation/__tests__/clipboard.test.ts +2 -2
  307. package/src/components/editor/navigation/__tests__/selection.test.ts +7 -6
  308. package/src/components/editor/navigation/__tests__/state.test.ts +8 -7
  309. package/src/components/editor/output/MarimoErrorOutput.tsx +7 -7
  310. package/src/components/editor/output/__tests__/traceback.test.tsx +4 -4
  311. package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +4 -4
  312. package/src/components/editor/package-alert.tsx +1 -1
  313. package/src/components/editor/renderers/vertical-layout/useFocusFirstEditor.ts +8 -1
  314. package/src/components/markdown/markdown-renderer.tsx +18 -2
  315. package/src/components/storage/storage-file-viewer.tsx +35 -1
  316. package/src/components/storage/storage-inspector.tsx +9 -4
  317. package/src/components/storage/storage-snippets.ts +3 -3
  318. package/src/components/tracing/tracing.tsx +3 -1
  319. package/src/components/ui/range-slider.tsx +108 -1
  320. package/src/core/ai/__tests__/staged-cells.test.ts +9 -8
  321. package/src/core/ai/context/providers/__tests__/cell-output.test.ts +31 -31
  322. package/src/core/ai/context/providers/__tests__/datasource.test.ts +3 -3
  323. package/src/core/ai/context/providers/__tests__/tables.test.ts +3 -2
  324. package/src/core/ai/context/providers/__tests__/variable.test.ts +84 -63
  325. package/src/core/ai/staged-cells.ts +6 -0
  326. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +10 -9
  327. package/src/core/ai/tools/__tests__/run-cells-tool.test.ts +6 -6
  328. package/src/core/ai/tools/edit-notebook-tool.ts +3 -3
  329. package/src/core/cells/__tests__/add-missing-import.test.ts +3 -3
  330. package/src/core/cells/__tests__/apply-transaction.test.ts +279 -0
  331. package/src/core/cells/__tests__/cells.test.ts +198 -135
  332. package/src/core/cells/__tests__/document-changes.test.ts +572 -0
  333. package/src/core/cells/__tests__/document-roundtrip.test.ts +376 -0
  334. package/src/core/cells/__tests__/focus.test.ts +5 -4
  335. package/src/core/cells/__tests__/logs.test.ts +13 -12
  336. package/src/core/cells/__tests__/pending-delete-service.test.tsx +3 -3
  337. package/src/core/cells/__tests__/runs.test.ts +29 -24
  338. package/src/core/cells/__tests__/scrollCellIntoView.test.ts +8 -7
  339. package/src/core/cells/__tests__/session.test.ts +23 -22
  340. package/src/core/cells/cells.ts +35 -8
  341. package/src/core/cells/document-changes.ts +644 -0
  342. package/src/core/cells/ids.ts +5 -5
  343. package/src/core/cells/logs.ts +2 -2
  344. package/src/core/cells/runs.ts +6 -8
  345. package/src/core/codemirror/__tests__/format.test.ts +34 -36
  346. package/src/core/codemirror/__tests__/setup.test.ts +2 -2
  347. package/src/core/codemirror/cells/__tests__/extensions.test.ts +114 -0
  348. package/src/core/codemirror/cells/__tests__/traceback-decorations.test.ts +33 -32
  349. package/src/core/codemirror/cells/extensions.ts +66 -23
  350. package/src/core/codemirror/completion/__tests__/keymap.test.ts +15 -35
  351. package/src/core/codemirror/completion/keymap.ts +14 -4
  352. package/src/core/codemirror/copilot/__tests__/getCodes.test.ts +12 -13
  353. package/src/core/codemirror/language/__tests__/utils.test.ts +3 -3
  354. package/src/core/codemirror/language/embedded/__tests__/embedded-python.test.ts +7 -8
  355. package/src/core/codemirror/language/languages/python.ts +4 -0
  356. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +4 -3
  357. package/src/core/codemirror/lsp/notebook-lsp.ts +28 -2
  358. package/src/core/codemirror/reactive-references/__tests__/analyzer.test.ts +7 -6
  359. package/src/core/codemirror/reactive-references/analyzer.ts +2 -2
  360. package/src/core/codemirror/rtc/loro/__tests__/sync.test.ts +52 -0
  361. package/src/core/codemirror/rtc/loro/sync.ts +1 -0
  362. package/src/core/datasets/__tests__/data-source.test.ts +93 -7
  363. package/src/core/datasets/data-source-connections.ts +44 -0
  364. package/src/core/datasets/request-registry.ts +13 -0
  365. package/src/core/datasets/state.ts +1 -1
  366. package/src/core/edit-app.tsx +0 -5
  367. package/src/core/errors/__tests__/errors.test.ts +2 -1
  368. package/src/core/export/__tests__/hooks.test.ts +37 -36
  369. package/src/core/islands/bridge.ts +2 -1
  370. package/src/core/islands/main.ts +5 -9
  371. package/src/core/kernel/__tests__/handlers.test.ts +5 -4
  372. package/src/core/kernel/handlers.ts +7 -4
  373. package/src/core/kernel/messages.ts +2 -0
  374. package/src/core/network/DeferredRequestRegistry.ts +2 -2
  375. package/src/core/network/__tests__/CachingRequestRegistry.test.ts +9 -10
  376. package/src/core/network/__tests__/DeferredRequestRegistry.test.ts +4 -6
  377. package/src/core/network/requests-lazy.ts +2 -1
  378. package/src/core/network/requests-network.ts +10 -2
  379. package/src/core/network/requests-static.ts +2 -1
  380. package/src/core/network/requests-toasting.tsx +2 -1
  381. package/src/core/network/types.ts +7 -2
  382. package/src/core/static/__tests__/virtual-file-tracker.test.ts +8 -8
  383. package/src/core/static/virtual-file-tracker.ts +1 -1
  384. package/src/core/storage/__tests__/state.test.ts +31 -21
  385. package/src/core/storage/state.ts +1 -1
  386. package/src/core/variables/__tests__/state.test.ts +6 -6
  387. package/src/core/variables/types.ts +2 -2
  388. package/src/core/wasm/__tests__/state.test.ts +8 -8
  389. package/src/core/wasm/bridge.ts +11 -1
  390. package/src/core/websocket/useMarimoKernelConnection.tsx +33 -26
  391. package/src/css/app/fonts.css +6 -6
  392. package/src/css/md-tooltip.css +4 -39
  393. package/src/css/md.css +10 -0
  394. package/src/fonts/Fira_Mono/FiraMono-Bold.woff2 +0 -0
  395. package/src/fonts/Fira_Mono/FiraMono-Medium.woff2 +0 -0
  396. package/src/fonts/Fira_Mono/FiraMono-Regular.woff2 +0 -0
  397. package/src/fonts/Lora/Lora-VariableFont_wght.woff2 +0 -0
  398. package/src/fonts/PT_Sans/PTSans-Bold.woff2 +0 -0
  399. package/src/fonts/PT_Sans/PTSans-Regular.woff2 +0 -0
  400. package/src/plugins/core/RenderHTML.tsx +17 -0
  401. package/src/plugins/core/__test__/RenderHTML.test.ts +45 -0
  402. package/src/plugins/core/sanitize-html.ts +25 -18
  403. package/src/plugins/impl/DataTablePlugin.tsx +50 -2
  404. package/src/plugins/impl/SliderPlugin.tsx +1 -3
  405. package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +120 -0
  406. package/src/plugins/impl/anywidget/model.ts +1 -2
  407. package/src/plugins/impl/chat/ChatPlugin.tsx +6 -3
  408. package/src/plugins/impl/matplotlib/matplotlib-renderer.ts +5 -2
  409. package/src/stories/cell.stories.tsx +8 -8
  410. package/src/stories/layout/vertical/one-column.stories.tsx +9 -8
  411. package/src/stories/log-viewer.stories.tsx +8 -8
  412. package/src/stories/variables.stories.tsx +2 -2
  413. package/src/utils/__tests__/createReducer.test.ts +2 -1
  414. package/src/utils/__tests__/download.test.tsx +21 -20
  415. package/src/utils/copy.ts +18 -5
  416. package/src/utils/createReducer.ts +46 -26
  417. package/src/utils/download.ts +4 -3
  418. package/src/utils/html-to-image.ts +6 -0
  419. package/src/utils/json/base64.ts +3 -3
  420. package/src/utils/traceback.ts +5 -3
  421. package/dist/_basePickBy-pTDW2_2A.js +0 -47
  422. package/dist/apl-lHFVoxx7.js +0 -4
  423. package/dist/architecture-7HQA4BMR-BmtmhGMc.js +0 -6
  424. package/dist/asciiarmor-DqCdZUHI.js +0 -4
  425. package/dist/asn1-DEcwtw-q.js +0 -4
  426. package/dist/brainfuck-Bro9Oz5x.js +0 -4
  427. package/dist/classDiagram-2ON5EDUG-DphiMW3Y.js +0 -30
  428. package/dist/classDiagram-v2-WZHVMYZB-BH1x5h4a.js +0 -30
  429. package/dist/clojure-B2uhdQPa.js +0 -4
  430. package/dist/cmake-B9WXyQcc.js +0 -4
  431. package/dist/cobol-CPD3EJfO.js +0 -4
  432. package/dist/coffeescript-KD9TnEnS.js +0 -4
  433. package/dist/commonlisp-DNEULz_Q.js +0 -4
  434. package/dist/crystal-DVPNgAPQ.js +0 -4
  435. package/dist/css-fq3a1AH1.js +0 -4
  436. package/dist/cypher-Dtzq0BP7.js +0 -4
  437. package/dist/d-DcZudIhJ.js +0 -4
  438. package/dist/diff-D9BPDC3o.js +0 -4
  439. package/dist/dist-B4MxkKHf.js +0 -8
  440. package/dist/dist-BYghZv6b.js +0 -5
  441. package/dist/dist-Be-uQhz5.js +0 -6
  442. package/dist/dist-CB_xf0ju.js +0 -5
  443. package/dist/dist-CK0qFAbF.js +0 -8
  444. package/dist/dist-CYEk-qrr.js +0 -8
  445. package/dist/dist-CmKoWpMk.js +0 -5
  446. package/dist/dist-D1nf4IQl.js +0 -5
  447. package/dist/dist-Df3AcKpt.js +0 -6
  448. package/dist/dist-DgaFHt_I.js +0 -5
  449. package/dist/dist-Dk10C3ui.js +0 -5
  450. package/dist/dist-DtyPVMHR.js +0 -5
  451. package/dist/dist-ko7WnHAO.js +0 -5
  452. package/dist/dist-of7gLRFK.js +0 -8
  453. package/dist/dtd-FhG-tVom.js +0 -4
  454. package/dist/dylan-HWpZOBPw.js +0 -4
  455. package/dist/ecl-B_rcje1I.js +0 -4
  456. package/dist/eiffel-oqHyHs6f.js +0 -4
  457. package/dist/elm-B62RQEds.js +0 -4
  458. package/dist/erlang-CjRjjA-B.js +0 -4
  459. package/dist/esm-BLobyqMs.js +0 -4387
  460. package/dist/factor-CGH_TnIV.js +0 -4
  461. package/dist/forth-5N06oHNp.js +0 -4
  462. package/dist/fortran-wZ-sNg3h.js +0 -4
  463. package/dist/gas-3H4_FaS8.js +0 -4
  464. package/dist/gherkin-PEA2uy50.js +0 -4
  465. package/dist/groovy-DZzbvCP1.js +0 -4
  466. package/dist/haskell-CExLTzho.js +0 -4
  467. package/dist/haxe-f3pVb8qU.js +0 -5
  468. package/dist/idl-BbWlJ0gk.js +0 -4
  469. package/dist/infoDiagram-HS3SLOUP-BXGbfBss.js +0 -30
  470. package/dist/javascript-eMOhp6Aq.js +0 -4
  471. package/dist/julia-C6w3Rvqb.js +0 -4
  472. package/dist/livescript-ChQl9lD-.js +0 -4
  473. package/dist/lua-CiDvI96j.js +0 -4
  474. package/dist/mathematica-ClVO4k7N.js +0 -4
  475. package/dist/mbox-BEI7DeUg.js +0 -4
  476. package/dist/mermaid-4DMBBIKO-PVrJfEpX.js +0 -6
  477. package/dist/mirc-DwidJ3iH.js +0 -4
  478. package/dist/mllike-Dspdy0xJ.js +0 -6
  479. package/dist/modelica-CIUejP-L.js +0 -4
  480. package/dist/mscgen-BWXU4Omp.js +0 -6
  481. package/dist/mumps-PHFFoPk5.js +0 -4
  482. package/dist/nsis-B7xooKLf.js +0 -4
  483. package/dist/ntriples-DnOgtCzG.js +0 -4
  484. package/dist/octave-Cn5kH_QT.js +0 -4
  485. package/dist/oz-DR-sROpu.js +0 -4
  486. package/dist/pascal-CPKK1zcS.js +0 -4
  487. package/dist/perl-D7FuFdyd.js +0 -4
  488. package/dist/pig-CEXnOAnI.js +0 -4
  489. package/dist/powershell-BKvWab7q.js +0 -4
  490. package/dist/properties-7jnK_vYx.js +0 -4
  491. package/dist/protobuf-4rslMjEN.js +0 -4
  492. package/dist/pug-BVwdEv4r.js +0 -4
  493. package/dist/puppet-iSHg_1Z2.js +0 -4
  494. package/dist/python-tK3wUCn0.js +0 -4
  495. package/dist/q-DP_Dcoox.js +0 -4
  496. package/dist/r-C32wHLYu.js +0 -4
  497. package/dist/react-vega-CFUuchds.js +0 -9
  498. package/dist/rpm-BbDBUfs9.js +0 -5
  499. package/dist/ruby-COfWUiIr.js +0 -4
  500. package/dist/sas-y_Hue2-X.js +0 -4
  501. package/dist/scheme-7jTCqHw8.js +0 -4
  502. package/dist/shell-DAqJWXDk.js +0 -4
  503. package/dist/sieve-EaqnbCO3.js +0 -4
  504. package/dist/smalltalk-DL03YKLJ.js +0 -4
  505. package/dist/sparql-DTA-tQ_q.js +0 -4
  506. package/dist/stateDiagram-v2-4FDKWEC3-BIeUs-Ed.js +0 -29
  507. package/dist/stex-KfRnSHzF.js +0 -4
  508. package/dist/stylus-CfjeFry_.js +0 -4
  509. package/dist/swift-Dl0RRDbH.js +0 -4
  510. package/dist/tcl-wv9O7fLZ.js +0 -4
  511. package/dist/textile-DzMRCBcV.js +0 -4
  512. package/dist/toml-CyIWqgbe.js +0 -4
  513. package/dist/troff-_huin_CY.js +0 -4
  514. package/dist/ttcn-BEiJuYYc.js +0 -4
  515. package/dist/ttcn-cfg-DB6Ksh67.js +0 -4
  516. package/dist/turtle-DzhzGEum.js +0 -4
  517. package/dist/useDeepCompareMemoize-BWUwfh37.js +0 -755
  518. package/dist/useIframeCapabilities-OQaMKgZl.js +0 -46
  519. package/dist/vb-CngKZQHu.js +0 -4
  520. package/dist/vbscript-BV_8nbeM.js +0 -4
  521. package/dist/velocity-IqE7qYKE.js +0 -4
  522. package/dist/verilog-xtyaWTnc.js +0 -4
  523. package/dist/vhdl-BaqXCtf3.js +0 -4
  524. package/dist/webidl-BDB8PTTO.js +0 -4
  525. package/dist/xquery-BIC-qj9Z.js +0 -4
  526. package/dist/yacas-ifv5tftd.js +0 -4
  527. package/dist/z80-B8zOMVNt.js +0 -4
  528. package/src/core/cells/effects.ts +0 -42
  529. package/src/fonts/Fira_Mono/FiraMono-Bold.ttf +0 -0
  530. package/src/fonts/Fira_Mono/FiraMono-Medium.ttf +0 -0
  531. package/src/fonts/Fira_Mono/FiraMono-Regular.ttf +0 -0
  532. package/src/fonts/Lora/Lora-Italic-VariableFont_wght.ttf +0 -0
  533. package/src/fonts/Lora/Lora-VariableFont_wght.ttf +0 -0
  534. package/src/fonts/Lora/static/Lora-Bold.ttf +0 -0
  535. package/src/fonts/Lora/static/Lora-BoldItalic.ttf +0 -0
  536. package/src/fonts/Lora/static/Lora-Italic.ttf +0 -0
  537. package/src/fonts/Lora/static/Lora-Medium.ttf +0 -0
  538. package/src/fonts/Lora/static/Lora-MediumItalic.ttf +0 -0
  539. package/src/fonts/Lora/static/Lora-Regular.ttf +0 -0
  540. package/src/fonts/Lora/static/Lora-SemiBold.ttf +0 -0
  541. package/src/fonts/Lora/static/Lora-SemiBoldItalic.ttf +0 -0
  542. package/src/fonts/PT_Sans/PTSans-Bold.ttf +0 -0
  543. package/src/fonts/PT_Sans/PTSans-BoldItalic.ttf +0 -0
  544. package/src/fonts/PT_Sans/PTSans-Italic.ttf +0 -0
  545. package/src/fonts/PT_Sans/PTSans-Regular.ttf +0 -0
  546. /package/dist/{_arrayReduce-BfFy684W.js → _arrayReduce-6BJAuN54.js} +0 -0
  547. /package/dist/{_baseSlice-BrVixxuc.js → _baseSlice-bwIVgwNq.js} +0 -0
  548. /package/dist/{_hasUnicode-C32WqUu7.js → _hasUnicode-DOFcQHhs.js} +0 -0
  549. /package/dist/{apl-DRxKiEot.js → apl-99A7dLQe.js} +0 -0
  550. /package/dist/{array-D-nrDupM.js → array-B-MVxRIF.js} +0 -0
  551. /package/dist/{asciiarmor-C8HoXFIm.js → asciiarmor-DLEhpFDx.js} +0 -0
  552. /package/dist/{asn1-9Bo0DYT-.js → asn1-CMrcTsT4.js} +0 -0
  553. /package/dist/{asterisk-BsiuGzWq.js → asterisk-BUZwqih-.js} +0 -0
  554. /package/dist/{brainfuck-Db8njC-p.js → brainfuck-ChPt5yBe.js} +0 -0
  555. /package/dist/{chunk-DR5Q36YT-D4q96vNV.js → chunk-DR5Q36YT-CP69aZS_.js} +0 -0
  556. /package/dist/{click-outside-container-CKfwEZqH.js → click-outside-container-DB_bTXRG.js} +0 -0
  557. /package/dist/{clike-CFhUNtI5.js → clike-CE0fXfM_.js} +0 -0
  558. /package/dist/{clojure-CX7oovsp.js → clojure-QkBEMU-g.js} +0 -0
  559. /package/dist/{clsx-D2KVTYnW.js → clsx-yW_RAw0K.js} +0 -0
  560. /package/dist/{cmake-C29AR2kk.js → cmake-CU1jX7Mo.js} +0 -0
  561. /package/dist/{cobol-CNkuRW9i.js → cobol-DMOKzzky.js} +0 -0
  562. /package/dist/{coffeescript-BJAbfGam.js → coffeescript-DjnjLyfk.js} +0 -0
  563. /package/dist/{colors-6nB_pSln.js → colors-Cn2p_FA3.js} +0 -0
  564. /package/dist/{common-keywords-BAkLFdud.js → common-keywords-hbLeU7VU.js} +0 -0
  565. /package/dist/{commonlisp-BTNhj2l9.js → commonlisp-CYd9iOSe.js} +0 -0
  566. /package/dist/{crystal-CZc0nIm9.js → crystal-Dy55yoYG.js} +0 -0
  567. /package/dist/{css-L2-0OTXc.js → css-CNU8w3HJ.js} +0 -0
  568. /package/dist/{cypher-Dnc6MXl0.js → cypher-q47DGzK7.js} +0 -0
  569. /package/dist/{cytoscape.esm-BXzSsA6N.js → cytoscape.esm-WbbDoCfu.js} +0 -0
  570. /package/dist/{d-C6X9iIga.js → d-jEkaLvxX.js} +0 -0
  571. /package/dist/{defaultLocale-CfQ4kBaV.js → defaultLocale-Dr6Bz4JK.js} +0 -0
  572. /package/dist/{defaultLocale-Bklbu-Tp.js → defaultLocale-I3_GfJ4U.js} +0 -0
  573. /package/dist/{diff-ZzKinYqY.js → diff-vb2-unFN.js} +0 -0
  574. /package/dist/{dist-Bymy0kEH.js → dist-C89sHDXk.js} +0 -0
  575. /package/dist/{dtd-CytEpkAo.js → dtd-C9kR-bXa.js} +0 -0
  576. /package/dist/{duckdb-keywords-C1WxmSfG.js → duckdb-keywords-CZ_ZTscu.js} +0 -0
  577. /package/dist/{dylan-CZByFBEQ.js → dylan-BLckrK-V.js} +0 -0
  578. /package/dist/{ebnf-BF2FOt-m.js → ebnf-WEXPLEWb.js} +0 -0
  579. /package/dist/{ecl-Cp7L1F5B.js → ecl-CEsf6XVg.js} +0 -0
  580. /package/dist/{eiffel-C66yjnFL.js → eiffel-2KGZNzx6.js} +0 -0
  581. /package/dist/{elm-DtHo-73e.js → elm-D2s3K5wF.js} +0 -0
  582. /package/dist/{emotion-is-prop-valid.esm-DtW2o230.js → emotion-is-prop-valid.esm-CflmeIys.js} +0 -0
  583. /package/dist/{erlang-C_sj44mF.js → erlang-0PMFOndk.js} +0 -0
  584. /package/dist/{esm-BWftfC-A.js → esm-Bb_hbWan.js} +0 -0
  585. /package/dist/{fcl-BhLcvRo_.js → fcl-B_Gv5Jfx.js} +0 -0
  586. /package/dist/{forth-CIDHh56T.js → forth-DG89iUsu.js} +0 -0
  587. /package/dist/{fortran-BQrDVXRU.js → fortran-ytKsAVvu.js} +0 -0
  588. /package/dist/{gas-D4HQPB0Q.js → gas-Cg2Fm0N2.js} +0 -0
  589. /package/dist/{gherkin-UB2gJHdT.js → gherkin-B87FEnZ-.js} +0 -0
  590. /package/dist/{groovy-DVz6jkOx.js → groovy-Dcs08AWD.js} +0 -0
  591. /package/dist/{haskell-CpUdAPCz.js → haskell-cwkOuhx6.js} +0 -0
  592. /package/dist/{haxe-DCV5_cqD.js → haxe-DWEo4q10.js} +0 -0
  593. /package/dist/{http-C_TDb8VX.js → http-Dc2fv19V.js} +0 -0
  594. /package/dist/{idl-D7WCIgHw.js → idl-WWQwDcRV.js} +0 -0
  595. /package/dist/{init-Ci8VD8ZH.js → init-D-g0ONX1.js} +0 -0
  596. /package/dist/{invariant-D9QLJ4SZ.js → invariant-Ctm_8TNZ.js} +0 -0
  597. /package/dist/{isArrayLikeObject-BrYl-ETg.js → isArrayLikeObject-C-hFPChh.js} +0 -0
  598. /package/dist/{javascript-B2Rn0Lmd.js → javascript-BeR74dxD.js} +0 -0
  599. /package/dist/{jsx-runtime-CTBg5pdT.js → jsx-runtime-9hcJiI23.js} +0 -0
  600. /package/dist/{julia-ApprtEaw.js → julia-UlvCUYGL.js} +0 -0
  601. /package/dist/{katex-Bk_FvVSR.js → katex-B7pMJpE0.js} +0 -0
  602. /package/dist/{livescript-BMLIlM7C.js → livescript-GPmFcmYV.js} +0 -0
  603. /package/dist/{lua-DdDaW3tC.js → lua-DYoT_0zM.js} +0 -0
  604. /package/dist/{main-Tj_-QTyF.js → main-sxFlUO_N.js} +0 -0
  605. /package/dist/{math-HUZifhTs.js → math-BYK36kWZ.js} +0 -0
  606. /package/dist/{mathematica-PnNN7c2Z.js → mathematica-DSFIQlbG.js} +0 -0
  607. /package/dist/{mbox-B84OtHBK.js → mbox-ej8lFMdL.js} +0 -0
  608. /package/dist/{mirc-BVWXJxIq.js → mirc-CAdIdvHQ.js} +0 -0
  609. /package/dist/{mllike-BawXWupH.js → mllike-CjTB1lHF.js} +0 -0
  610. /package/dist/{modelica-C8-X4Hf_.js → modelica-BB68FYMa.js} +0 -0
  611. /package/dist/{mscgen-BOM6dDj8.js → mscgen-BkbzgGGI.js} +0 -0
  612. /package/dist/{mumps-DQOY8n05.js → mumps-Cu-28E9F.js} +0 -0
  613. /package/dist/{nginx-DkMgA__9.js → nginx-ComVAAGN.js} +0 -0
  614. /package/dist/{node-sql-parser-D53LM_7b.js → node-sql-parser-DNGGJ-Rw.js} +0 -0
  615. /package/dist/{ntriples-DU8VrXdW.js → ntriples-D9cQiZxZ.js} +0 -0
  616. /package/dist/{octave-BzTIBsQ8.js → octave-BvtAnPX0.js} +0 -0
  617. /package/dist/{oz-DKFcZsoi.js → oz-COaVHk2E.js} +0 -0
  618. /package/dist/{pascal-DHBZ15pT.js → pascal-BFpqVD2x.js} +0 -0
  619. /package/dist/{path-BVI7RNUv.js → path-Du6n3sOU.js} +0 -0
  620. /package/dist/{perl-75NMI3w0.js → perl-DaiORxHP.js} +0 -0
  621. /package/dist/{pig-B-HY1fo_.js → pig-DFzRhmsF.js} +0 -0
  622. /package/dist/{powershell-DEH22U53.js → powershell-BG2LQNKN.js} +0 -0
  623. /package/dist/{properties-B1MzBoJC.js → properties-CqJJR5QY.js} +0 -0
  624. /package/dist/{protobuf-Dr14KV0p.js → protobuf-WwDYV1yY.js} +0 -0
  625. /package/dist/{puppet-C4z38l7v.js → puppet-QNY3w_uN.js} +0 -0
  626. /package/dist/{purify.es-DGenX2XH.js → purify.es-Co_dANLh.js} +0 -0
  627. /package/dist/{python-D2L7Nknt.js → python-4QrQ3Ugi.js} +0 -0
  628. /package/dist/{q-PxipHfgS.js → q-DhwXuxE2.js} +0 -0
  629. /package/dist/{r-CEMMu_Tf.js → r-Df-nkR25.js} +0 -0
  630. /package/dist/{range-BToS7LsA.js → range-Bn3no95s.js} +0 -0
  631. /package/dist/{react-dom-CqtLRVZP.js → react-dom-BKwCWYPW.js} +0 -0
  632. /package/dist/{rpm-D3xyahkR.js → rpm-Cokue07s.js} +0 -0
  633. /package/dist/{ruby-DwEkwdiu.js → ruby-DrYcL3qF.js} +0 -0
  634. /package/dist/{sas-L1W0BRft.js → sas-CoiPirA5.js} +0 -0
  635. /package/dist/{scheme-CTybTrX0.js → scheme-CwFLjzHv.js} +0 -0
  636. /package/dist/{shell-BSx3LZnu.js → shell-BFV-R24I.js} +0 -0
  637. /package/dist/{sieve-BjUfbv-6.js → sieve-CxwXF5T9.js} +0 -0
  638. /package/dist/{simple-mode-IPZGFbI6.js → simple-mode-DTaJtKPt.js} +0 -0
  639. /package/dist/{smalltalk-BlzuYrMv.js → smalltalk-QivVOCtX.js} +0 -0
  640. /package/dist/{solr-Cj_9RM4d.js → solr-DTkyqJ-Z.js} +0 -0
  641. /package/dist/{sparql-BXKjQ0cK.js → sparql-nKsFk8j7.js} +0 -0
  642. /package/dist/{spreadsheet-CifI10GO.js → spreadsheet-CER0raqY.js} +0 -0
  643. /package/dist/{sql-B0bFyY1c.js → sql-ByOoEONQ.js} +0 -0
  644. /package/dist/{stex-BIsgBmK4.js → stex-7yEw16Ww.js} +0 -0
  645. /package/dist/{stylus-CqrLLVnG.js → stylus-BLKQAycn.js} +0 -0
  646. /package/dist/{swift-DIqvj3_G.js → swift-CJoKqiKj.js} +0 -0
  647. /package/dist/{tcl-B8bOIGVK.js → tcl-YTeYFNUc.js} +0 -0
  648. /package/dist/{textile-DZsjavD_.js → textile-C6rKQqMQ.js} +0 -0
  649. /package/dist/{tiddlywiki-BbGdvEjx.js → tiddlywiki-Cr9xyOY1.js} +0 -0
  650. /package/dist/{tiki-BYesmRDo.js → tiki-D5JONyfZ.js} +0 -0
  651. /package/dist/{timer-CPsmIOdm.js → timer-D7JVdX9U.js} +0 -0
  652. /package/dist/{toml-Uc7m08nl.js → toml-DxlPGbRy.js} +0 -0
  653. /package/dist/{treemap-DMn4tIJ7.js → treemap-qFGzn7xk.js} +0 -0
  654. /package/dist/{troff-GEl5wcXR.js → troff-DFCfH7Ku.js} +0 -0
  655. /package/dist/{ttcn-pr4FDOLT.js → ttcn-DAW-ERVP.js} +0 -0
  656. /package/dist/{ttcn-cfg-dZQ_fWTH.js → ttcn-cfg-CpJ8b7EN.js} +0 -0
  657. /package/dist/{turtle-TPRDOknA.js → turtle-BneV2f8L.js} +0 -0
  658. /package/dist/{vb-BJUAeTYr.js → vb-D973Vxxh.js} +0 -0
  659. /package/dist/{vbscript-CcJ6Z3ic.js → vbscript-Dckaq3YO.js} +0 -0
  660. /package/dist/{velocity-pq4ZMzU3.js → velocity-DKty-GUC.js} +0 -0
  661. /package/dist/{verilog-timMNjHt.js → verilog-aNaK_biA.js} +0 -0
  662. /package/dist/{vhdl-DYFbVKNm.js → vhdl-CQuehnQy.js} +0 -0
  663. /package/dist/{webidl-pue9oqnb.js → webidl-Bhg8vaMr.js} +0 -0
  664. /package/dist/{xquery-DeItGynK.js → xquery-D2q16GaM.js} +0 -0
  665. /package/dist/{yacas-By2Qrjba.js → yacas-DHGOHnNa.js} +0 -0
  666. /package/dist/{z80-C7iLsyPC.js → z80-BPhTmO22.js} +0 -0
@@ -11,7 +11,8 @@ import {
11
11
  type Table,
12
12
  type Table as TanStackTable,
13
13
  } from "@tanstack/react-table";
14
- import { type JSX, useRef } from "react";
14
+ import { useVirtualizer } from "@tanstack/react-virtual";
15
+ import { type JSX, useLayoutEffect, useRef, useState } from "react";
15
16
  import useEvent from "react-use-event-hook";
16
17
  import {
17
18
  TableBody,
@@ -27,6 +28,7 @@ import { DataTableContextMenu } from "./context-menu";
27
28
  import { CellRangeSelectionIndicator } from "./range-focus/cell-selection-indicator";
28
29
  import { useCellRangeSelection } from "./range-focus/use-cell-range-selection";
29
30
  import { useScrollIntoViewOnFocus } from "./range-focus/use-scroll-into-view";
31
+ import { TABLE_ROW_HEIGHT_PX } from "./types";
30
32
  import { stringifyUnknownValue } from "./utils";
31
33
 
32
34
  export function renderTableHeader<TData>(
@@ -79,6 +81,7 @@ interface DataTableBodyProps<TData> {
79
81
  rowViewerPanelOpen: boolean;
80
82
  getRowIndex?: (row: TData, idx: number) => number;
81
83
  viewedRowIdx?: number;
84
+ virtualize?: boolean;
82
85
  }
83
86
 
84
87
  export const DataTableBody = <TData,>({
@@ -87,9 +90,30 @@ export const DataTableBody = <TData,>({
87
90
  rowViewerPanelOpen,
88
91
  getRowIndex,
89
92
  viewedRowIdx,
93
+ virtualize = false,
90
94
  }: DataTableBodyProps<TData>) => {
91
- // Automatically scroll focused cells into view
95
+ const rows = table.getRowModel().rows;
96
+
97
+ // Find the scroll container (tbody -> table -> overflow-auto wrapper div).
98
+ // Using useState so that when the element becomes available after mount,
99
+ // useVirtualizer re-observes the correct element.
100
+ const [scrollElement, setScrollElement] = useState<HTMLElement | null>(null);
92
101
  const tableRef = useRef<HTMLTableSectionElement>(null);
102
+ useLayoutEffect(() => {
103
+ // tbody.parentElement = table, table.parentElement = overflow wrapper
104
+ setScrollElement(tableRef.current?.parentElement?.parentElement ?? null);
105
+ }, []);
106
+
107
+ // Always call useVirtualizer (rules of hooks); count=0 when not virtualizing
108
+ const virtualizer = useVirtualizer({
109
+ count: virtualize ? rows.length : 0,
110
+ getScrollElement: () => scrollElement,
111
+ estimateSize: () => TABLE_ROW_HEIGHT_PX,
112
+ overscan: 10,
113
+ });
114
+
115
+ // Automatically scroll focused cells into view.
116
+ // In virtual mode, off-screen cells won't be in the DOM so this silently no-ops for them.
93
117
  useScrollIntoViewOnFocus(tableRef);
94
118
 
95
119
  const {
@@ -172,57 +196,90 @@ export const DataTableBody = <TData,>({
172
196
 
173
197
  const hoverTemplate = table.getState().cellHoverTemplate || null;
174
198
 
175
- const tableBody = (
176
- <TableBody onKeyDown={handleCellsKeyDown} ref={tableRef}>
177
- {table.getRowModel().rows?.length ? (
178
- table.getRowModel().rows.map((row) => {
179
- // Only find the row index if the row viewer panel is open
180
- const rowIndex = rowViewerPanelOpen
181
- ? (getRowIndex?.(row.original, row.index) ?? row.index)
182
- : undefined;
183
- const isRowViewedInPanel =
184
- rowViewerPanelOpen && viewedRowIdx === rowIndex;
199
+ const renderRow = (row: Row<TData>) => {
200
+ // Only find the row index if the row viewer panel is open
201
+ const rowIndex = rowViewerPanelOpen
202
+ ? (getRowIndex?.(row.original, row.index) ?? row.index)
203
+ : undefined;
204
+ const isRowViewedInPanel = rowViewerPanelOpen && viewedRowIdx === rowIndex;
205
+
206
+ // Compute hover title once per row using all visible cells
207
+ let rowTitle: string | undefined;
208
+ if (hoverTemplate) {
209
+ const visibleCells = row.getVisibleCells?.() ?? [
210
+ ...row.getLeftVisibleCells(),
211
+ ...row.getCenterVisibleCells(),
212
+ ...row.getRightVisibleCells(),
213
+ ];
214
+ rowTitle = applyHoverTemplate(hoverTemplate, visibleCells);
215
+ }
185
216
 
186
- // Compute hover title once per row using all visible cells
187
- let rowTitle: string | undefined;
188
- if (hoverTemplate) {
189
- const visibleCells = row.getVisibleCells?.() ?? [
190
- ...row.getLeftVisibleCells(),
191
- ...row.getCenterVisibleCells(),
192
- ...row.getRightVisibleCells(),
193
- ];
194
- rowTitle = hoverTemplate
195
- ? applyHoverTemplate(hoverTemplate, visibleCells)
196
- : undefined;
197
- }
217
+ return (
218
+ <TableRow
219
+ key={row.id}
220
+ data-state={row.getIsSelected() && "selected"}
221
+ title={rowTitle}
222
+ // These classes ensure that empty rows (nulls) still render
223
+ className={cn(
224
+ "border-t h-6",
225
+ rowViewerPanelOpen && "cursor-pointer",
226
+ isRowViewedInPanel &&
227
+ "bg-(--blue-3) hover:bg-(--blue-3) data-[state=selected]:bg-(--blue-4)",
228
+ )}
229
+ onClick={() => handleRowClick(row)}
230
+ >
231
+ {renderCells(row.getLeftVisibleCells())}
232
+ {renderCells(row.getCenterVisibleCells())}
233
+ {renderCells(row.getRightVisibleCells())}
234
+ </TableRow>
235
+ );
236
+ };
198
237
 
199
- return (
200
- <TableRow
201
- key={row.id}
202
- data-state={row.getIsSelected() && "selected"}
203
- title={rowTitle}
204
- // These classes ensure that empty rows (nulls) still render
205
- className={cn(
206
- "border-t h-6",
207
- rowViewerPanelOpen && "cursor-pointer",
208
- isRowViewedInPanel &&
209
- "bg-(--blue-3) hover:bg-(--blue-3) data-[state=selected]:bg-(--blue-4)",
210
- )}
211
- onClick={() => handleRowClick(row)}
212
- >
213
- {renderCells(row.getLeftVisibleCells())}
214
- {renderCells(row.getCenterVisibleCells())}
215
- {renderCells(row.getRightVisibleCells())}
216
- </TableRow>
217
- );
218
- })
219
- ) : (
238
+ const renderRows = () => {
239
+ if (rows.length === 0) {
240
+ return (
220
241
  <TableRow>
221
242
  <TableCell colSpan={columns.length} className="h-24 text-center">
222
243
  No results.
223
244
  </TableCell>
224
245
  </TableRow>
225
- )}
246
+ );
247
+ }
248
+
249
+ if (virtualize) {
250
+ const virtualItems = virtualizer.getVirtualItems();
251
+ const totalSize = virtualizer.getTotalSize();
252
+ return (
253
+ <>
254
+ {virtualItems[0]?.start > 0 && (
255
+ <tr
256
+ data-virtual-spacer=""
257
+ style={{ height: virtualItems[0].start }}
258
+ >
259
+ <td colSpan={columns.length} />
260
+ </tr>
261
+ )}
262
+ {virtualItems.map((vItem) => renderRow(rows[vItem.index]))}
263
+ {virtualItems.length > 0 && (
264
+ <tr
265
+ data-virtual-spacer=""
266
+ style={{
267
+ height: totalSize - (virtualItems.at(-1)?.end ?? totalSize),
268
+ }}
269
+ >
270
+ <td colSpan={columns.length} />
271
+ </tr>
272
+ )}
273
+ </>
274
+ );
275
+ }
276
+
277
+ return rows.map((row) => renderRow(row));
278
+ };
279
+
280
+ const tableBody = (
281
+ <TableBody onKeyDown={handleCellsKeyDown} ref={tableRef}>
282
+ {renderRows()}
226
283
  </TableBody>
227
284
  );
228
285
 
@@ -1,8 +1,29 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
+ import type { RowData } from "@tanstack/react-table";
3
4
  import type { DataType } from "@/core/kernel/messages";
4
5
  import { Objects } from "@/utils/objects";
5
6
 
7
+ declare module "@tanstack/react-table" {
8
+ interface TableMeta<TData extends RowData> {
9
+ rawData?: TData[]; // raw data for filtering/copying (present only if format_mapping is provided)
10
+ }
11
+ }
12
+
13
+ // Pixel heights derived from Tailwind classes applied to table elements.
14
+ // row: h-6 = 24px (TableRow in renderers.tsx)
15
+ // header: min-h-10 = 40px (TableHead in renderers.tsx)
16
+ export const TABLE_ROW_HEIGHT_PX = 24;
17
+ export const TABLE_HEADER_HEIGHT_PX = 40;
18
+
19
+ // Default number of visible rows when virtualizing without an explicit maxHeight.
20
+ export const DEFAULT_VIRTUAL_ROWS = 15;
21
+
22
+ // Minimum row count before virtualization kicks in. Below this threshold the
23
+ // DOM overhead is negligible and the virtualizer's measurement cost isn't
24
+ // worth it. Must be greater than DEFAULT_VIRTUAL_ROWS.
25
+ export const MIN_ROWS_TO_VIRTUALIZE = 100;
26
+
6
27
  export type ColumnName = string;
7
28
 
8
29
  export const ColumnHeaderStatsKeys = [
@@ -1,8 +1,10 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
+ import type { Table } from "@tanstack/react-table";
3
4
  import type { TableData } from "@/plugins/impl/DataTablePlugin";
4
5
  import { vegaLoadData } from "@/plugins/impl/vega/loader";
5
6
  import { jsonParseWithSpecialChar } from "@/utils/json/json-parser";
7
+ import { getMimeValues } from "./mime-cell";
6
8
  import { INDEX_COLUMN_NAME } from "./types";
7
9
 
8
10
  /**
@@ -32,6 +34,21 @@ export async function loadTableData<T = object>(
32
34
  return tableData;
33
35
  }
34
36
 
37
+ /**
38
+ * Load both table and raw table data. Raw table data is typically when
39
+ * there is formatting applied to the table data.
40
+ */
41
+ export async function loadTableAndRawData<T>(
42
+ tableData: TableData<T>,
43
+ rawTableData?: TableData<T> | null,
44
+ ): Promise<[T[], T[] | undefined]> {
45
+ if (rawTableData) {
46
+ return Promise.all([loadTableData(tableData), loadTableData(rawTableData)]);
47
+ }
48
+
49
+ return [await loadTableData(tableData), undefined];
50
+ }
51
+
35
52
  /**
36
53
  * Get the stable row ID for a row.
37
54
  *
@@ -87,3 +104,73 @@ export function stringifyUnknownValue(opts: {
87
104
  }
88
105
  return String(value);
89
106
  }
107
+
108
+ function stripHtml(html: string): string {
109
+ const div = document.createElement("div");
110
+ div.innerHTML = html;
111
+ const text = (div.textContent || div.innerText || "").trim();
112
+ return text || html;
113
+ }
114
+
115
+ const HTML_MIMETYPES = new Set(["text/html", "text/markdown"]);
116
+
117
+ function isRecord(value: unknown): value is Record<string, unknown> {
118
+ return value !== null && typeof value === "object" && !Array.isArray(value);
119
+ }
120
+
121
+ /**
122
+ * Get clipboard-ready text and optional HTML for a cell.
123
+ *
124
+ * @param rawValue - The raw (unformatted) value, or undefined if not available.
125
+ * @param displayedValue - The displayed value (may be a mime bundle).
126
+ */
127
+ export function getClipboardContent(
128
+ rawValue: unknown,
129
+ displayedValue: unknown,
130
+ ): { text: string; html?: string } {
131
+ const mimeValues =
132
+ typeof displayedValue === "object" && displayedValue !== null
133
+ ? getMimeValues(displayedValue)
134
+ : undefined;
135
+
136
+ let html: string | undefined;
137
+ if (mimeValues) {
138
+ // text/markdown from mo.md() contains rendered HTML
139
+ const htmlParts = mimeValues
140
+ .filter((v) => HTML_MIMETYPES.has(v.mimetype))
141
+ .map((v) => v.data);
142
+ html = htmlParts.length > 0 ? htmlParts.join("") : undefined;
143
+ }
144
+
145
+ let text: string;
146
+ if (rawValue !== undefined && rawValue !== displayedValue) {
147
+ text = stringifyUnknownValue({ value: rawValue });
148
+ } else if (mimeValues) {
149
+ text = mimeValues
150
+ .map((v) => (HTML_MIMETYPES.has(v.mimetype) ? stripHtml(v.data) : v.data))
151
+ .join(", ");
152
+ } else {
153
+ text = stringifyUnknownValue({ value: displayedValue });
154
+ }
155
+
156
+ return { text, html };
157
+ }
158
+
159
+ /**
160
+ * Get the raw (unformatted) value for a row/column from the table,
161
+ * or undefined if raw data is not available.
162
+ */
163
+ export function getRawValue<TData>(
164
+ table: Table<TData>,
165
+ rowIndex: number,
166
+ columnId: string,
167
+ ): unknown {
168
+ const rawData = table.options.meta?.rawData;
169
+ if (rawData) {
170
+ const rawRow = rawData[rowIndex];
171
+ if (isRecord(rawRow)) {
172
+ return rawRow[columnId];
173
+ }
174
+ }
175
+ return undefined;
176
+ }
@@ -28,6 +28,7 @@ import {
28
28
  INTERNAL_SQL_ENGINES,
29
29
  } from "@/core/datasets/engines";
30
30
  import {
31
+ PreviewSQLSchemaList,
31
32
  PreviewSQLTable,
32
33
  PreviewSQLTableList,
33
34
  } from "@/core/datasets/request-registry";
@@ -80,6 +81,7 @@ const INDENT = {
80
81
  database: "pl-4",
81
82
  schemaEmpty: "pl-8",
82
83
  schema: "pl-7",
84
+ schemaLoading: "pl-8",
83
85
  tableLoading: "pl-11",
84
86
  tableSchemaless: "pl-8",
85
87
  tableWithSchema: "pl-12",
@@ -369,6 +371,49 @@ const SchemaList: React.FC<{
369
371
  hasSearch,
370
372
  searchValue,
371
373
  }) => {
374
+ const { addSchemaList } = useDataSourceActions();
375
+ const [schemasRequested, setSchemasRequested] = React.useState(false);
376
+
377
+ // Custom loading state, we need to wait for the data to propagate once requested
378
+ // useAsyncData's loading state may return false before data has propagated
379
+ const [schemasLoading, setSchemasLoading] = React.useState(false);
380
+
381
+ const { isPending, error } = useAsyncData(async () => {
382
+ if (schemas.length === 0 && engineName && !schemasRequested) {
383
+ setSchemasRequested(true);
384
+ setSchemasLoading(true);
385
+ try {
386
+ const previewSchemaList = await PreviewSQLSchemaList.request({
387
+ engine: engineName,
388
+ database: databaseName,
389
+ });
390
+
391
+ addSchemaList({
392
+ schemas: previewSchemaList.schemas ?? [],
393
+ sqlSchemaContext: {
394
+ engine: engineName,
395
+ database: databaseName,
396
+ },
397
+ });
398
+ } finally {
399
+ setSchemasLoading(false);
400
+ }
401
+ }
402
+ }, [schemas.length, engineName, databaseName, schemasRequested]);
403
+
404
+ if (isPending || schemasLoading) {
405
+ return (
406
+ <LoadingState
407
+ message="Loading schemas..."
408
+ className={INDENT.schemaLoading}
409
+ />
410
+ );
411
+ }
412
+
413
+ if (error) {
414
+ return <ErrorState error={error} className={INDENT.schemaLoading} />;
415
+ }
416
+
372
417
  if (schemas.length === 0) {
373
418
  return (
374
419
  <EmptyState
@@ -5,9 +5,9 @@ import { beforeAll, describe, expect, it } from "vitest";
5
5
  import { SetupMocks } from "@/__mocks__/common";
6
6
  import { MockNotebook } from "@/__mocks__/notebook";
7
7
  import { MockRequestClient } from "@/__mocks__/requests";
8
+ import { cellId } from "@/__tests__/branded";
8
9
  import { TooltipProvider } from "@/components/ui/tooltip";
9
10
  import { notebookAtom } from "@/core/cells/cells";
10
- import type { CellId } from "@/core/cells/ids";
11
11
  import { createCellRuntimeState } from "@/core/cells/types";
12
12
  import type { UserConfig } from "@/core/config/config-schema";
13
13
  import type { OutputMessage } from "@/core/kernel/messages";
@@ -39,7 +39,7 @@ describe("Cell data attributes", () => {
39
39
  "present",
40
40
  ])("should render cell with data-cell-id and data-cell-name in %s mode", (mode) => {
41
41
  const { store, wrapper } = createTestWrapper();
42
- const cellId = "test" as CellId;
42
+ const cid = cellId("test");
43
43
  const cellName = "test_cell";
44
44
 
45
45
  const userConfig: UserConfig = {
@@ -83,7 +83,7 @@ describe("Cell data attributes", () => {
83
83
 
84
84
  const notebook = MockNotebook.notebookState({
85
85
  cellData: {
86
- [cellId]: {
86
+ [cid]: {
87
87
  code: "",
88
88
  name: cellName,
89
89
  edited: false,
@@ -97,7 +97,7 @@ describe("Cell data attributes", () => {
97
97
  },
98
98
  });
99
99
 
100
- notebook.cellRuntime[cellId] = createCellRuntimeState({
100
+ notebook.cellRuntime[cid] = createCellRuntimeState({
101
101
  status: "idle",
102
102
  output: null,
103
103
  consoleOutputs: [],
@@ -117,7 +117,7 @@ describe("Cell data attributes", () => {
117
117
  const { container } = render(
118
118
  <TooltipProvider>
119
119
  <Cell
120
- cellId={cellId}
120
+ cellId={cid}
121
121
  mode={mode as AppMode}
122
122
  canDelete={true}
123
123
  userConfig={userConfig}
@@ -131,7 +131,7 @@ describe("Cell data attributes", () => {
131
131
  { wrapper },
132
132
  );
133
133
 
134
- const cellElement = container.querySelector(`[data-cell-id="${cellId}"]`);
134
+ const cellElement = container.querySelector(`[data-cell-id="${cid}"]`);
135
135
  expect(cellElement).toBeTruthy();
136
136
  expect(cellElement?.getAttribute("data-cell-name")).toBe(cellName);
137
137
  });
@@ -139,7 +139,7 @@ describe("Cell data attributes", () => {
139
139
 
140
140
  describe("Output data attributes", () => {
141
141
  it("should render output with data-cell-role", () => {
142
- const cellId = "test" as CellId;
142
+ const cid = cellId("test");
143
143
  const output: OutputMessage = {
144
144
  channel: "output",
145
145
  mimetype: "text/plain",
@@ -151,7 +151,7 @@ describe("Output data attributes", () => {
151
151
  <TooltipProvider>
152
152
  <OutputArea
153
153
  output={output}
154
- cellId={cellId}
154
+ cellId={cid}
155
155
  stale={false}
156
156
  loading={false}
157
157
  allowExpand={true}
@@ -1,5 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import { beforeEach, describe, expect, it, type Mock, vi } from "vitest";
3
+ import { variableName } from "@/__tests__/branded";
3
4
  import { getCodes } from "@/core/codemirror/copilot/getCodes";
4
5
  import { dataSourceConnectionsAtom } from "@/core/datasets/data-source-connections";
5
6
  import { DUCKDB_ENGINE } from "@/core/datasets/engines";
@@ -7,7 +8,6 @@ import { datasetsAtom } from "@/core/datasets/state";
7
8
  import type { DatasetsState } from "@/core/datasets/types";
8
9
  import { store } from "@/core/state/jotai";
9
10
  import { variablesAtom } from "@/core/variables/state";
10
- import type { Variable, VariableName } from "@/core/variables/types";
11
11
  import { codeToCells, getAICompletionBody } from "../completion-utils";
12
12
 
13
13
  // Mock getCodes function
@@ -205,16 +205,16 @@ describe("getAICompletionBody", () => {
205
205
 
206
206
  it("should return the correct completion body with mentioned variables", () => {
207
207
  // Set up test data in the Jotai store
208
- const testVariables: Record<VariableName, Variable> = {
209
- ["var1" as VariableName]: {
210
- name: "var1" as VariableName,
208
+ const testVariables = {
209
+ [variableName("var1")]: {
210
+ name: variableName("var1"),
211
211
  value: "string value",
212
212
  dataType: "string",
213
213
  declaredBy: [],
214
214
  usedBy: [],
215
215
  },
216
- ["var2" as VariableName]: {
217
- name: "var2" as VariableName,
216
+ [variableName("var2")]: {
217
+ name: variableName("var2"),
218
218
  value: "42",
219
219
  dataType: "number",
220
220
  declaredBy: [],
@@ -253,9 +253,9 @@ describe("getAICompletionBody", () => {
253
253
  ];
254
254
  store.set(datasetsAtom, { tables: testDatasets } as DatasetsState);
255
255
 
256
- const testVariables: Record<VariableName, Variable> = {
257
- ["var1" as VariableName]: {
258
- name: "var1" as VariableName,
256
+ const testVariables = {
257
+ [variableName("var1")]: {
258
+ name: variableName("var1"),
259
259
  value: "string value",
260
260
  dataType: "string",
261
261
  declaredBy: [],
@@ -285,9 +285,9 @@ describe("getAICompletionBody", () => {
285
285
 
286
286
  it("should handle non-existent variables", () => {
287
287
  // Set up test data in the Jotai store
288
- const testVariables: Record<VariableName, Variable> = {
289
- ["existingVar" as VariableName]: {
290
- name: "existingVar" as VariableName,
288
+ const testVariables = {
289
+ [variableName("existingVar")]: {
290
+ name: variableName("existingVar"),
291
291
  value: "string value",
292
292
  dataType: "string",
293
293
  declaredBy: [],
@@ -322,9 +322,9 @@ describe("getAICompletionBody", () => {
322
322
  ];
323
323
  store.set(datasetsAtom, { tables: testDatasets } as DatasetsState);
324
324
 
325
- const testVariables: Record<VariableName, Variable> = {
326
- ["conflict" as VariableName]: {
327
- name: "conflict" as VariableName,
325
+ const testVariables = {
326
+ [variableName("conflict")]: {
327
+ name: variableName("conflict"),
328
328
  value: "string value",
329
329
  dataType: "string",
330
330
  declaredBy: [],
@@ -85,7 +85,7 @@ store = GCSStore("my-bucket")"
85
85
  exports[`generateStorageCode > Google Drive > with browser auth (no credentials) 1`] = `
86
86
  "from gdrive_fsspec import GoogleDriveFileSystem
87
87
 
88
- fs = GoogleDriveFileSystem(token="browser")"
88
+ fs = GoogleDriveFileSystem(token="browser", use_listings_cache=False)"
89
89
  `;
90
90
 
91
91
  exports[`generateStorageCode > Google Drive > with service account credentials 1`] = `
@@ -93,7 +93,7 @@ exports[`generateStorageCode > Google Drive > with service account credentials 1
93
93
  import json
94
94
 
95
95
  _creds = json.loads("""{"type": "service_account", "client_email": "test@test.iam.gserviceaccount.com"}""")
96
- fs = GoogleDriveFileSystem(creds=_creds, token="service_account")"
96
+ fs = GoogleDriveFileSystem(creds=_creds, token="service_account", use_listings_cache=False)"
97
97
  `;
98
98
 
99
99
  exports[`generateStorageCode > S3 > basic connection with all fields 1`] = `
@@ -173,13 +173,13 @@ function generateGDriveCode(
173
173
  );
174
174
  const code = dedent(`
175
175
  _creds = json.loads("""${connection.credentials_json?.startsWith("ENV:") ? `{${creds}}` : connection.credentials_json}""")
176
- fs = GoogleDriveFileSystem(creds=_creds, token="service_account")
176
+ fs = GoogleDriveFileSystem(creds=_creds, token="service_account", use_listings_cache=False)
177
177
  `);
178
178
  return { imports, code };
179
179
  }
180
180
 
181
181
  const code = dedent(`
182
- fs = GoogleDriveFileSystem(token="browser")
182
+ fs = GoogleDriveFileSystem(token="browser", use_listings_cache=False)
183
183
  `);
184
184
  return { imports, code };
185
185
  }
@@ -62,9 +62,11 @@ import type { FileInfo } from "@/core/network/types";
62
62
  import { isWasm } from "@/core/wasm/utils";
63
63
  import { useAsyncData } from "@/hooks/useAsyncData";
64
64
  import { ErrorBanner } from "@/plugins/impl/common/error-banner";
65
+ import { deserializeBlob } from "@/utils/blob";
65
66
  import { cn } from "@/utils/cn";
66
67
  import { copyToClipboard } from "@/utils/copy";
67
68
  import { downloadBlob } from "@/utils/download";
69
+ import { type Base64String, base64ToDataURL } from "@/utils/json/base64";
68
70
  import { openNotebook } from "@/utils/links";
69
71
  import type { FilePath } from "@/utils/paths";
70
72
  import { fileSplit } from "@/utils/pathUtils";
@@ -650,8 +652,20 @@ const Node = ({ node, style, dragHandle }: NodeRendererProps<FileInfo>) => {
650
652
  <DropdownMenuItem
651
653
  onSelect={async () => {
652
654
  const details = await sendFileDetails({ path: node.data.path });
653
- const contents = details.contents || "";
654
- downloadBlob(new Blob([contents]), node.data.name);
655
+ if (details.isBase64 && details.contents) {
656
+ const blob = deserializeBlob(
657
+ base64ToDataURL(
658
+ details.contents as Base64String,
659
+ details.mimeType || "application/octet-stream",
660
+ ),
661
+ );
662
+ downloadBlob(blob, node.data.name);
663
+ } else {
664
+ downloadBlob(
665
+ new Blob([details.contents || ""]),
666
+ node.data.name,
667
+ );
668
+ }
655
669
  }}
656
670
  >
657
671
  <DownloadIcon className={ic} />
@@ -21,6 +21,7 @@ import { filenameAtom } from "@/core/saving/file-state";
21
21
  import { isWasm } from "@/core/wasm/utils";
22
22
  import { useAsyncData } from "@/hooks/useAsyncData";
23
23
  import { ErrorBanner } from "@/plugins/impl/common/error-banner";
24
+ import { deserializeBlob } from "@/utils/blob";
24
25
  import { copyToClipboard } from "@/utils/copy";
25
26
  import { downloadBlob, downloadByURL } from "@/utils/download";
26
27
  import { type Base64String, base64ToDataURL } from "@/utils/json/base64";
@@ -121,9 +122,22 @@ export const FileViewer: React.FC<Props> = ({ file, onOpenNotebook }) => {
121
122
  }
122
123
 
123
124
  const handleDownload = () => {
124
- if (isMediaMime(mimeType)) {
125
- const dataURL = base64ToDataURL(data.contents as Base64String, mimeType);
126
- downloadByURL(dataURL, data.file.name);
125
+ if (data.isBase64 && data.contents) {
126
+ if (isMediaMime(mimeType)) {
127
+ const dataURL = base64ToDataURL(
128
+ data.contents as Base64String,
129
+ mimeType,
130
+ );
131
+ downloadByURL(dataURL, data.file.name);
132
+ } else {
133
+ const blob = deserializeBlob(
134
+ base64ToDataURL(
135
+ data.contents as Base64String,
136
+ data.mimeType || "application/octet-stream",
137
+ ),
138
+ );
139
+ downloadBlob(blob, data.file.name);
140
+ }
127
141
  return;
128
142
  }
129
143
 
@@ -4,8 +4,8 @@
4
4
  import { act, renderHook } from "@testing-library/react";
5
5
  import { beforeEach, describe, expect, it, vi } from "vitest";
6
6
  import { asMock, MockModules, Mocks, SetupMocks } from "@/__mocks__/common";
7
+ import { cellId } from "@/__tests__/branded";
7
8
  import type { CellActions, NotebookState } from "@/core/cells/cells";
8
- import type { CellId } from "@/core/cells/ids";
9
9
  import { useCellClipboard } from "../clipboard";
10
10
 
11
11
  // Mock dependencies
@@ -179,7 +179,7 @@ describe("useCellClipboard", () => {
179
179
  });
180
180
 
181
181
  it("should filter out non-existent cells", async () => {
182
- const nonExistentCellId = "non-existent" as CellId;
182
+ const nonExistentCellId = cellId("non-existent");
183
183
 
184
184
  const { result } = renderHook(() => useCellClipboard());
185
185