@marimo-team/islands 0.21.2-dev0 → 0.21.2-dev100

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 (720) hide show
  1. package/dist/{Combination-BBPQRrDo.js → Combination-B--d1_LV.js} +10 -10
  2. package/dist/{ConnectedDataExplorerComponent-D0GoOd_c.js → ConnectedDataExplorerComponent-CTfvzyMi.js} +85 -85
  3. package/dist/{ImageComparisonComponent-BYQfAfSR.js → ImageComparisonComponent-B5q26YVi.js} +1 -1
  4. package/dist/{Plot-DfUav0o0.js → Plot-syRHsk-l.js} +1 -1
  5. package/dist/_basePickBy-DEctY8Qy.js +117 -0
  6. package/dist/_baseSet-Bk810b_4.js +20 -0
  7. package/dist/_baseUniq-B1NzzhU7.js +557 -0
  8. package/dist/{any-language-editor-DlsjUw_l.js → any-language-editor-Bj-3432h.js} +22 -21
  9. package/dist/apl-Y7yFAg6_.js +4 -0
  10. package/dist/{arc-DXxE-tFl.js → arc-CEWBr4jc.js} +2 -2
  11. package/dist/architecture-7HQA4BMR-SvLOcNCN.js +6 -0
  12. package/dist/{architectureDiagram-VXUJARFQ-Df0FNeBR.js → architectureDiagram-VXUJARFQ-BKlUkb-q.js} +19 -19
  13. package/dist/arrays--2cd0hte.js +59 -0
  14. package/dist/asciiarmor-Bl8b2p0w.js +4 -0
  15. package/dist/asn1-BF6cywqm.js +4 -0
  16. package/dist/{blockDiagram-VD42YOAC-DszWqlLz.js → blockDiagram-VD42YOAC-DvgBlX1D.js} +14 -14
  17. package/dist/brainfuck-BuqydWe3.js +4 -0
  18. package/dist/{button-BKkuUpZh.js → button-qsiIHncQ.js} +17 -13
  19. package/dist/{c4Diagram-YG6GDRKO-Dyj8LoUX.js → c4Diagram-YG6GDRKO-BN-xpNUK.js} +6 -6
  20. package/dist/capabilities-BC3mzKnw.js +36 -0
  21. package/dist/{channel-CUFaIkTh.js → channel-Dz_ka_DS.js} +1 -1
  22. package/dist/chat-ui-BvK3aDSR.js +7709 -0
  23. package/dist/{check-Diwc5emq.js → check-D_YwHEgY.js} +1 -1
  24. package/dist/{chunk-4BX2VUAB-CwMMQLZ_.js → chunk-4BX2VUAB-BChPAwlt.js} +1 -1
  25. package/dist/{chunk-4F5CHEZ2-CRwwZ2ED.js → chunk-4F5CHEZ2-9eJ5uB6a.js} +1 -1
  26. package/dist/{chunk-55IACEB6-Dj8CzJvE.js → chunk-55IACEB6-wWyiO7Qo.js} +1 -1
  27. package/dist/{chunk-5FQGJX7Z-BkzUmppO.js → chunk-5FQGJX7Z-DHiDX6JT.js} +1504 -2846
  28. package/dist/{chunk-ABZYJK2D-7QYXAAhe.js → chunk-ABZYJK2D-DYZpeLRO.js} +3 -3
  29. package/dist/{chunk-ATLVNIR6-pmHPAPSd.js → chunk-ATLVNIR6-9VSIMo3q.js} +2 -2
  30. package/dist/{chunk-B2363JML-BuBMltZc.js → chunk-B2363JML-CkfqLBeZ.js} +1 -1
  31. package/dist/{chunk-B4BG7PRW-Dbta9cTX.js → chunk-B4BG7PRW-CyIVj-RO.js} +7 -7
  32. package/dist/{chunk-CVBHYZKI-D8iwHsLF.js → chunk-CVBHYZKI-DqdOZevv.js} +1 -1
  33. package/dist/{chunk-DI55MBZ5-DyKB35wC.js → chunk-DI55MBZ5-kmoX4_PJ.js} +6 -6
  34. package/dist/{chunk-EXTU4WIE-BRFl4iNd.js → chunk-EXTU4WIE-anbpETeD.js} +2 -2
  35. package/dist/{chunk-FMBD7UC4-XTL4xAvH.js → chunk-FMBD7UC4-WPL5C7Yr.js} +1 -1
  36. package/dist/{chunk-FRFDVMJY-Bk2LD5Te.js → chunk-FRFDVMJY-DiBbw2aO.js} +1 -1
  37. package/dist/{chunk-HN2XXSSU-CzO5Phf0.js → chunk-HN2XXSSU-GC9oeSst.js} +1 -1
  38. package/dist/{chunk-JA3XYJ7Z-BkrY9SdL.js → chunk-JA3XYJ7Z-DT9thFja.js} +3 -3
  39. package/dist/{chunk-JZLCHNYA-Bk_Lil-q.js → chunk-JZLCHNYA-CoUG-3_5.js} +6 -6
  40. package/dist/{chunk-MI3HLSF2-DvCKDmpi.js → chunk-MI3HLSF2-CAUClZTk.js} +1 -1
  41. package/dist/{chunk-N4CR4FBY-f5n6meOd.js → chunk-N4CR4FBY-CgZCueW4.js} +7 -7
  42. package/dist/{chunk-PL6DKKU2-DiFkzMfM.js → chunk-PL6DKKU2-B93gSUY5.js} +1 -1
  43. package/dist/{chunk-QN33PNHL-CXfJywHv.js → chunk-QN33PNHL-T-uF7h40.js} +2 -2
  44. package/dist/{chunk-QXUST7PY-D7-26sj3.js → chunk-QXUST7PY-D1a8s9iP.js} +10 -10
  45. package/dist/{chunk-QZHKN3VN-CYbwZKgJ.js → chunk-QZHKN3VN-cTJMhkeY.js} +1 -1
  46. package/dist/{chunk-S3R3BYOJ-BRT9vd1R.js → chunk-S3R3BYOJ-KAv7zltL.js} +6 -6
  47. package/dist/{chunk-SJTYNZTY-BvVkbShU.js → chunk-SJTYNZTY-CxP2rIlm.js} +1 -1
  48. package/dist/{chunk-TCCFYFTB-DqxhgXG0.js → chunk-TCCFYFTB-BrhaBdR8.js} +18 -14
  49. package/dist/{chunk-TQ3KTPDO-CPkEruAA.js → chunk-TQ3KTPDO-C0j_j938.js} +1 -1
  50. package/dist/{chunk-TZMSLE5B-DSfBOnzx.js → chunk-TZMSLE5B-BY2BhygM.js} +3 -3
  51. package/dist/{chunk-UMXZTB3W-C4ypIY3V.js → chunk-UMXZTB3W-BDwe1tzK.js} +1 -1
  52. package/dist/classDiagram-2ON5EDUG-LT-Hu_dE.js +30 -0
  53. package/dist/classDiagram-v2-WZHVMYZB-G4qrOqlY.js +30 -0
  54. package/dist/{clike-CLJYUAWw.js → clike-D8Yzpo0X.js} +1 -1
  55. package/dist/clojure-CAHAWK5H.js +4 -0
  56. package/dist/{clone-CEQ-pda1.js → clone-DgKKB0qR.js} +1 -1
  57. package/dist/cmake-BogDc4GF.js +4 -0
  58. package/dist/cobol-DRnpeU4u.js +4 -0
  59. package/dist/{code-block-37QAKDTI-DV_ZyoUh.js → code-block-37QAKDTI-CdeP6GC3.js} +2 -2
  60. package/dist/coffeescript-9MgX7RN8.js +4 -0
  61. package/dist/commonlisp-CVz2KONN.js +4 -0
  62. package/dist/{constants-CytQ_3LM.js → constants-CXiS0vdr.js} +3 -3
  63. package/dist/{copy-DIK6DiIA.js → copy-CBo9JcJW.js} +14 -4
  64. package/dist/{cose-bilkent-S5V4N54A-BCDTZDay.js → cose-bilkent-S5V4N54A-CFYo67PX.js} +2 -2
  65. package/dist/crystal-td8mwLG5.js +4 -0
  66. package/dist/css-BK451dBn.js +4 -0
  67. package/dist/cypher-DuNPR6Ie.js +4 -0
  68. package/dist/d-DL6oP_-2.js +4 -0
  69. package/dist/{dagre-6UL2VRFP-DGEbtmgU.js → dagre-6UL2VRFP-CblBywCi.js} +33 -33
  70. package/dist/{dagre-BVnNvbvD.js → dagre-lLfkMavw.js} +37 -16
  71. package/dist/{data-grid-overlay-editor-BD0BFHzy.js → data-grid-overlay-editor-nQBPvGNe.js} +3 -3
  72. package/dist/{diagram-PSM6KHXK-CG_usglE.js → diagram-PSM6KHXK-CEWNAeex.js} +22 -22
  73. package/dist/{diagram-QEK2KX5R-CtGFEwzJ.js → diagram-QEK2KX5R-DvNPI6r6.js} +17 -17
  74. package/dist/{diagram-S2PKOQOG-ClKAGmbv.js → diagram-S2PKOQOG-Bd8sWp1V.js} +17 -17
  75. package/dist/diff-D9CplOBj.js +4 -0
  76. package/dist/{dist-CseYuPtL.js → dist-5XnuIjzQ.js} +2 -2
  77. package/dist/{dist-lNe4i1Nm.js → dist-B4HRhSlD.js} +1 -1
  78. package/dist/{dist-i-ud9aCA.js → dist-B5pakFbT.js} +1 -1
  79. package/dist/{dist-D5NMgbbv.js → dist-B7Wxocl4.js} +2 -2
  80. package/dist/{dist-CPlGUbk-.js → dist-B7pzGu3v.js} +2 -2
  81. package/dist/dist-BKKbDTix.js +550 -0
  82. package/dist/dist-BOx8CJbo.js +5 -0
  83. package/dist/dist-BYoWtcAc.js +5 -0
  84. package/dist/dist-BaGdTXK1.js +5 -0
  85. package/dist/dist-BhGA2ia0.js +8 -0
  86. package/dist/{dist-BUrWeMEP.js → dist-BmqJ8_Hr.js} +1 -1
  87. package/dist/{dist-BGZ7TWS9.js → dist-BnCNDnA7.js} +3 -3
  88. package/dist/{dist-BpMlUdNO.js → dist-BnIjtwRq.js} +3 -3
  89. package/dist/dist-BoHuwe5C.js +5 -0
  90. package/dist/{dist-Bq5eYK43.js → dist-BqO6WmbK.js} +2 -2
  91. package/dist/{dist-DUretbKK.js → dist-C-8pSTml.js} +2 -2
  92. package/dist/{dist-D4gcY469.js → dist-C6R5LnmH.js} +2 -2
  93. package/dist/{dist-Ux6dL_VB.js → dist-CD0aazOL.js} +1 -1
  94. package/dist/{dist-C4K7pumm.js → dist-CDXh0OSg.js} +2 -2
  95. package/dist/dist-CJ-2wW2z.js +8 -0
  96. package/dist/{dist-DOoqn-VL.js → dist-CORAUsE1.js} +71 -37
  97. package/dist/{dist-HoZO6brh.js → dist-C_tLMuB0.js} +2 -2
  98. package/dist/dist-Ccbo2rCF.js +8 -0
  99. package/dist/{dist-COpDrwi-.js → dist-CgCO1-j-.js} +1 -1
  100. package/dist/{dist-Cl5iM8xL.js → dist-Ck4gp1Wp.js} +3 -3
  101. package/dist/dist-CwayJLIO.js +5 -0
  102. package/dist/dist-D-jpfI6q.js +6 -0
  103. package/dist/{dist-C0Rnbr-_.js → dist-D2Rk1j4R.js} +4 -4
  104. package/dist/{dist-DERtJN02.js → dist-DFBgTyQ4.js} +2 -2
  105. package/dist/{dist-CDHl2i1x.js → dist-DInzmbT2.js} +4 -4
  106. package/dist/{dist-CSEWGuDq.js → dist-DJ3EjUNc.js} +1 -1
  107. package/dist/{dist-RNGn_-uD.js → dist-DM6PPTtq.js} +1 -1
  108. package/dist/{dist-DodLQWPg.js → dist-DS6k03oP.js} +1 -1
  109. package/dist/dist-DShjplLu.js +8 -0
  110. package/dist/{dist-BFxYppVR.js → dist-DUY_SIWT.js} +4 -4
  111. package/dist/dist-DhBqFguQ.js +5 -0
  112. package/dist/dist-DiCgMCy4.js +6 -0
  113. package/dist/{dist-CAKwXCWI.js → dist-DqWKkHpR.js} +2 -2
  114. package/dist/dist-Dqa-QKVa.js +5 -0
  115. package/dist/{dist-BSfYc7vq.js → dist-DqezbmBd.js} +2 -2
  116. package/dist/{dist-gc9KgJuA.js → dist-Dv7FDx1_.js} +1 -1
  117. package/dist/dist-OFv2DOPe.js +5 -0
  118. package/dist/{dist-D_-CGmlh.js → dist-_k5rxRQI.js} +2 -2
  119. package/dist/{dist-B9EjSb9T.js → dist-n5m_P2Mr.js} +1 -1
  120. package/dist/{dist-Bq9zYwJs.js → dist-nggqqIVv.js} +5 -5
  121. package/dist/{dist-DEj2X26M.js → dist-xzh9kCE-.js} +2 -2
  122. package/dist/{dockerfile-BxhYdLHL.js → dockerfile-m9DOSpI5.js} +1 -1
  123. package/dist/dtd-Ce1c54UO.js +4 -0
  124. package/dist/dylan-B43wjIwg.js +4 -0
  125. package/dist/ecl-DK-fZmir.js +4 -0
  126. package/dist/eiffel-CNuvvPqD.js +4 -0
  127. package/dist/elm-DZEkBjgQ.js +4 -0
  128. package/dist/{erDiagram-Q2GNP2WA-DPMseVVp.js → erDiagram-Q2GNP2WA-C5bM6dcx.js} +15 -15
  129. package/dist/erlang-Dw4PDZV_.js +4 -0
  130. package/dist/{error-banner-Dmi5ujan.js → error-banner-DkDzvax3.js} +26 -26
  131. package/dist/esm-BBsFNcPe.js +1587 -0
  132. package/dist/esm-C9_jY_wu.js +2805 -0
  133. package/dist/factor-C9JRv63g.js +4 -0
  134. package/dist/{factor-Png_OsVt.js → factor-Nva0iSXt.js} +1 -1
  135. package/dist/{flowDiagram-NV44I4VS-BpAIFwW7.js → flowDiagram-NV44I4VS-CULNNnl6.js} +17 -17
  136. package/dist/forth-CKhoqn4e.js +4 -0
  137. package/dist/fortran-Do51bToK.js +4 -0
  138. package/dist/{ganttDiagram-JELNMOA3-DXYghZ9C.js → ganttDiagram-JELNMOA3-DIi-PAjP.js} +10 -10
  139. package/dist/gas-BZfL3Uwh.js +4 -0
  140. package/dist/get-CqYRpAGT.js +68 -0
  141. package/dist/gherkin-BwQh4ehw.js +4 -0
  142. package/dist/{gitGraph-G5XIXVHT-ChHUSAop.js → gitGraph-G5XIXVHT-S7ypWRtz.js} +3 -3
  143. package/dist/{gitGraphDiagram-V2S2FVAM-CBL-7g3_.js → gitGraphDiagram-V2S2FVAM-BGDZsLhF.js} +17 -17
  144. package/dist/{glide-data-editor-pZyd9UJ_.js → glide-data-editor-D0IYL4_F.js} +96 -95
  145. package/dist/graphlib-TFMRsJse.js +225 -0
  146. package/dist/groovy-CG5kCGiv.js +4 -0
  147. package/dist/haskell-BKii9uTg.js +4 -0
  148. package/dist/haxe-Bsz30J8x.js +5 -0
  149. package/dist/idl-BlxgaPKj.js +4 -0
  150. package/dist/{info-VBDWY6EO-CwyXEo8E.js → info-VBDWY6EO-CRCLLsdb.js} +3 -3
  151. package/dist/infoDiagram-HS3SLOUP-fkZhmVE7.js +30 -0
  152. package/dist/{types-CGc7peZV.js → input-C5uUN4xL.js} +258 -455
  153. package/dist/isEmpty-D_Jzlmqv.js +42 -0
  154. package/dist/{isSymbol-Dyt2NSnN.js → isSymbol-DFp8040B.js} +1 -1
  155. package/dist/javascript-SNhUvTcB.js +4 -0
  156. package/dist/{journeyDiagram-XKPGCS4Q-D5BIjS4N.js → journeyDiagram-XKPGCS4Q-DUANVNzR.js} +7 -7
  157. package/dist/julia-CGZzaDyk.js +4 -0
  158. package/dist/{kanban-definition-3W4ZIXB7-DhDkqxFB.js → kanban-definition-3W4ZIXB7-dEyZPMAd.js} +12 -12
  159. package/dist/{katex-pyO_klYC.js → katex-Ckd8lBne.js} +1 -1
  160. package/dist/{label-BbpGrh4j.js → label-DwSVaniz.js} +75 -82
  161. package/dist/{line-C1k1rG3Z.js → line-LK_5q2B9.js} +3 -3
  162. package/dist/{linear-DIp6l9sg.js → linear-CJ6ctpF3.js} +4 -4
  163. package/dist/livescript-Cj6cX-Ys.js +4 -0
  164. package/dist/{loader-CABJs6GU.js → loader-DrMJeyDu.js} +29 -35
  165. package/dist/lua-BcVHrD8f.js +4 -0
  166. package/dist/main.js +40319 -75347
  167. package/dist/mathematica-DLY8ZGoJ.js +4 -0
  168. package/dist/mbox-BNTsMWS5.js +4 -0
  169. package/dist/{memoize-Cs8aS5RW.js → memoize-CwWm-NpB.js} +1 -1
  170. package/dist/{merge-NuyC7LN7.js → merge-Byt9w-nO.js} +1 -1
  171. package/dist/mermaid-4DMBBIKO-C2ajbN0u.js +6 -0
  172. package/dist/{mermaid-CrKqsE2j.js → mermaid-Bwy7OYzI.js} +50 -50
  173. package/dist/{mermaid-parser.core-OkWZ8nr-.js → mermaid-parser.core-DDGHdNnp.js} +8 -8
  174. package/dist/{mhchem-DckvwtV8.js → mhchem-DAXq6Zll.js} +1 -1
  175. package/dist/micromark-factory-space-YUxUai1y.js +1341 -0
  176. package/dist/{mindmap-definition-VGOIOE7T-BxQi78Vl.js → mindmap-definition-VGOIOE7T-jZ7-PfhM.js} +14 -14
  177. package/dist/mirc-oyeOBir2.js +4 -0
  178. package/dist/mllike-ByxznKQw.js +6 -0
  179. package/dist/modelica-DNLhoyD8.js +4 -0
  180. package/dist/mscgen-DkZltsli.js +6 -0
  181. package/dist/mumps-TTiQB1xv.js +4 -0
  182. package/dist/{now-BC2mX0ZT.js → now-uNLDfbuW.js} +1 -1
  183. package/dist/{nsis-BrAITej_.js → nsis-DgKbDAVQ.js} +1 -1
  184. package/dist/nsis-RT1O1Ph8.js +4 -0
  185. package/dist/ntriples-CxsCiZ7Z.js +4 -0
  186. package/dist/{number-overlay-editor-CQrncFlP.js → number-overlay-editor-BqzX9dHu.js} +1 -1
  187. package/dist/octave-CkLh5tpW.js +4 -0
  188. package/dist/once-BfpiMcdf.js +26 -0
  189. package/dist/{ordinal-Dcvf4J1m.js → ordinal-COPPjmMz.js} +1 -1
  190. package/dist/oz-yI7U9eVH.js +4 -0
  191. package/dist/{packet-DYOGHKS2-C62XQjZh.js → packet-DYOGHKS2-DPTC67cY.js} +3 -3
  192. package/dist/pascal-CQK8sfDe.js +4 -0
  193. package/dist/perl-BEG8-kZl.js +4 -0
  194. package/dist/{pie-VRWISCQL-nfAKQJw3.js → pie-VRWISCQL-DfbgsrV5.js} +3 -3
  195. package/dist/{pieDiagram-ADFJNKIX-DfSJXUHa.js → pieDiagram-ADFJNKIX-BiAFdzOP.js} +22 -22
  196. package/dist/pig-DLLCqQaR.js +4 -0
  197. package/dist/powershell-CtjMkVO_.js +4 -0
  198. package/dist/{precisionRound-BAc-kQ3q.js → precisionRound-Duzbr5ur.js} +1 -1
  199. package/dist/process-output-CT8hHGp6.js +27986 -0
  200. package/dist/properties-Domeb57z.js +4 -0
  201. package/dist/protobuf-0yk85TV6.js +4 -0
  202. package/dist/pug-B-BiNkM-.js +4 -0
  203. package/dist/{pug-CH-17az-.js → pug-CTpLcc1b.js} +1 -1
  204. package/dist/puppet-C0N4vevK.js +4 -0
  205. package/dist/python-BZFa8G3C.js +4 -0
  206. package/dist/q-gcj7dgJv.js +4 -0
  207. package/dist/{quadrantDiagram-AYHSOK5B-CAcVWXc-.js → quadrantDiagram-AYHSOK5B-CZjWO4oG.js} +5 -5
  208. package/dist/r-DavzTuPU.js +4 -0
  209. package/dist/{radar-ZZBFDIW7-lopS8_4j.js → radar-ZZBFDIW7-B5Hwx2a8.js} +3 -3
  210. package/dist/react-vega-DfxWeueH.js +9 -0
  211. package/dist/{react-vega-C6kwcd86.js → react-vega-JMnqwKtN.js} +19 -19
  212. package/dist/{requirementDiagram-UZGBJVZJ-BU7dwzFM.js → requirementDiagram-UZGBJVZJ-D9PkMDa5.js} +14 -14
  213. package/dist/rpm-bPj31ya8.js +5 -0
  214. package/dist/ruby-3UzzijjE.js +4 -0
  215. package/dist/{sankeyDiagram-TZEHDZUN-BVJnR4_b.js → sankeyDiagram-TZEHDZUN-DuCG1ouO.js} +5 -5
  216. package/dist/sas-D9upmCP9.js +4 -0
  217. package/dist/scheme-DqWYzIFR.js +4 -0
  218. package/dist/{sequenceDiagram-WL72ISMW-CQcFQTwX.js → sequenceDiagram-WL72ISMW-BLJqizTv.js} +8 -8
  219. package/dist/shell-w63nkNmU.js +4 -0
  220. package/dist/sieve-Dz_ISrl6.js +4 -0
  221. package/dist/{slides-component-GkilRW21.js → slides-component-BsaaAy66.js} +3 -3
  222. package/dist/smalltalk-BXZ14pkr.js +4 -0
  223. package/dist/sparql-Boyc0wkb.js +4 -0
  224. package/dist/{spec-Bfvf9Hre.js → spec-BLAZSydG.js} +12 -422
  225. package/dist/{src-CHUphWwL.js → src-szye8OCw.js} +1 -1
  226. package/dist/{stateDiagram-FKZM4ZOC-Dx9AIGDe.js → stateDiagram-FKZM4ZOC-CmZfv4_-.js} +19 -19
  227. package/dist/stateDiagram-v2-4FDKWEC3-BpOH8Bgl.js +29 -0
  228. package/dist/{step-BbmiiQdf.js → step-1PmBKr2y.js} +1 -1
  229. package/dist/stex-DYK84lGq.js +4 -0
  230. package/dist/style.css +1 -1
  231. package/dist/stylus-m9L_f1X1.js +4 -0
  232. package/dist/swift-C4TGn99K.js +4 -0
  233. package/dist/tcl-D_L0cfYZ.js +4 -0
  234. package/dist/textile-BAofYdKN.js +4 -0
  235. package/dist/{time-DFFVNc1Q.js → time-B8tcX_hU.js} +4 -4
  236. package/dist/{timeline-definition-IT6M3QCI-D8B3p7ID.js → timeline-definition-IT6M3QCI-C7yv4fEk.js} +4 -4
  237. package/dist/toDate-BWaG12Pv.js +637 -0
  238. package/dist/{toNumber-CbZ70FdN.js → toNumber-xFPoy1OI.js} +2 -2
  239. package/dist/toml-DCDKACLL.js +4 -0
  240. package/dist/{tooltip-CKG75XQa.js → tooltip-DGHTbHl5.js} +4 -4
  241. package/dist/{treemap-GDKQZRPO-CkR-5ai2.js → treemap-GDKQZRPO-B_LAAEIM.js} +3 -3
  242. package/dist/troff-JHOU2VZK.js +4 -0
  243. package/dist/ttcn-Cxhng3qq.js +4 -0
  244. package/dist/ttcn-cfg-DJgUIu5n.js +4 -0
  245. package/dist/turtle-DKYkKZjV.js +4 -0
  246. package/dist/types-Dqw69fPc.js +202 -0
  247. package/dist/{useAsyncData-CEjJxwFB.js → useAsyncData-Dqt2tV1E.js} +2 -2
  248. package/dist/useDeepCompareMemoize-D2PKDkrk.js +85 -0
  249. package/dist/useIframeCapabilities-DlwLttZw.js +13 -0
  250. package/dist/useLifecycle-CJ_5Z4Mk.js +173 -0
  251. package/dist/{useTheme-CPybHVFN.js → useTheme-BIAKDAh6.js} +47 -12
  252. package/dist/vb-C9rpn9hN.js +4 -0
  253. package/dist/vbscript-BQ7rxQU0.js +4 -0
  254. package/dist/{vega-component-CuPTCRp5.js → vega-component-CTOT0vRO.js} +199 -198
  255. package/dist/{vega-loader.browser-CQ-lnUkI.js → vega-loader.browser-hMqVC9bf.js} +3 -3
  256. package/dist/velocity-C8WXmzLz.js +4 -0
  257. package/dist/verilog-BUXJEyEq.js +4 -0
  258. package/dist/vhdl-C18YIXfF.js +4 -0
  259. package/dist/webidl-D97EKzDx.js +4 -0
  260. package/dist/xquery-BZM6yzG2.js +4 -0
  261. package/dist/{xychartDiagram-PRI3JC2R-XO8FiQjU.js → xychartDiagram-PRI3JC2R-DC0-6FAB.js} +13 -13
  262. package/dist/yacas-CXKck-Ok.js +4 -0
  263. package/dist/z80-BbF6ykWc.js +4 -0
  264. package/package.json +4 -3
  265. package/src/__mocks__/notebook.ts +9 -9
  266. package/src/__mocks__/requests.ts +2 -1
  267. package/src/__tests__/branded.ts +20 -0
  268. package/src/__tests__/setup.ts +15 -0
  269. package/src/components/ai/ai-model-dropdown.tsx +1 -1
  270. package/src/components/app-config/__tests__/get-dirty-values.test.ts +1 -1
  271. package/src/components/app-config/get-dirty-values.ts +100 -0
  272. package/src/components/app-config/user-config-form.tsx +6 -101
  273. package/src/components/chat/acp/agent-panel.tsx +4 -2
  274. package/src/components/chat/acp/blocks.tsx +1 -2
  275. package/src/components/chat/acp/state.ts +1 -1
  276. package/src/components/chat/chat-utils.ts +7 -8
  277. package/src/components/chat/tool-call-accordion.tsx +1 -0
  278. package/src/components/data-table/TableActions.tsx +34 -60
  279. package/src/components/data-table/__tests__/columns.test.tsx +138 -0
  280. package/src/components/data-table/__tests__/data-table.test.tsx +63 -0
  281. package/src/components/data-table/__tests__/utils.test.ts +138 -1
  282. package/src/components/data-table/charts/__tests__/storage.test.ts +7 -7
  283. package/src/components/data-table/charts/components/chart-items.tsx +1 -1
  284. package/src/components/data-table/charts/components/form-fields.tsx +1 -1
  285. package/src/components/data-table/charts/forms/common-chart.tsx +1 -1
  286. package/src/components/data-table/charts/storage.ts +1 -1
  287. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +24 -13
  288. package/src/components/data-table/column-header.tsx +1 -1
  289. package/src/components/data-table/columns.tsx +44 -4
  290. package/src/components/data-table/context-menu.tsx +9 -5
  291. package/src/components/data-table/data-table.tsx +24 -42
  292. package/src/components/data-table/download-actions.tsx +18 -18
  293. package/src/components/data-table/filters.ts +1 -0
  294. package/src/components/data-table/hooks/use-column-pinning.ts +1 -1
  295. package/src/components/data-table/hooks/use-panel-ownership.ts +15 -5
  296. package/src/components/data-table/hooks/use-scroll-container-height.ts +97 -0
  297. package/src/components/data-table/pagination.tsx +1 -1
  298. package/src/components/data-table/range-focus/__tests__/atoms.test.ts +8 -2
  299. package/src/components/data-table/range-focus/__tests__/test-utils.ts +2 -0
  300. package/src/components/data-table/range-focus/__tests__/use-cell-range-selection.test.ts +119 -0
  301. package/src/components/data-table/range-focus/__tests__/utils.test.ts +82 -8
  302. package/src/components/data-table/range-focus/atoms.ts +2 -2
  303. package/src/components/data-table/range-focus/use-cell-range-selection.ts +19 -0
  304. package/src/components/data-table/range-focus/utils.ts +50 -12
  305. package/src/components/data-table/renderers.tsx +103 -46
  306. package/src/components/data-table/row-viewer-panel/row-viewer.tsx +53 -44
  307. package/src/components/data-table/schemas.ts +7 -2
  308. package/src/components/data-table/table-explorer-panel/table-explorer-panel.tsx +161 -0
  309. package/src/components/data-table/types.ts +21 -0
  310. package/src/components/data-table/utils.ts +87 -0
  311. package/src/components/datasources/datasources.tsx +46 -1
  312. package/src/components/editor/__tests__/data-attributes.test.tsx +8 -8
  313. package/src/components/editor/actions/useNotebookActions.tsx +2 -2
  314. package/src/components/editor/ai/__tests__/completion-utils.test.ts +15 -15
  315. package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +16 -9
  316. package/src/components/editor/chrome/wrapper/footer-items/backend-status.tsx +2 -2
  317. package/src/components/editor/connections/form-renderers.tsx +1 -1
  318. package/src/components/editor/connections/storage/__tests__/__snapshots__/as-code.test.ts.snap +2 -2
  319. package/src/components/editor/connections/storage/as-code.ts +2 -2
  320. package/src/components/editor/file-tree/file-explorer.tsx +16 -2
  321. package/src/components/editor/file-tree/file-viewer.tsx +17 -3
  322. package/src/components/editor/navigation/__tests__/clipboard.test.ts +2 -2
  323. package/src/components/editor/navigation/__tests__/selection.test.ts +7 -6
  324. package/src/components/editor/navigation/__tests__/state.test.ts +8 -7
  325. package/src/components/editor/output/MarimoErrorOutput.tsx +7 -7
  326. package/src/components/editor/output/__tests__/traceback.test.tsx +4 -4
  327. package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +4 -4
  328. package/src/components/editor/package-alert.tsx +1 -1
  329. package/src/components/editor/renderers/grid-layout/grid-layout.tsx +2 -2
  330. package/src/components/editor/renderers/layout-select.tsx +2 -2
  331. package/src/components/editor/renderers/vertical-layout/useFocusFirstEditor.ts +8 -1
  332. package/src/components/markdown/markdown-renderer.tsx +18 -2
  333. package/src/components/storage/storage-file-viewer.tsx +35 -1
  334. package/src/components/storage/storage-inspector.tsx +9 -4
  335. package/src/components/storage/storage-snippets.ts +3 -3
  336. package/src/components/tracing/tracing.tsx +3 -1
  337. package/src/components/ui/range-slider.tsx +108 -1
  338. package/src/components/variables/variables-table.tsx +1 -1
  339. package/src/core/ai/__tests__/staged-cells.test.ts +9 -8
  340. package/src/core/ai/context/providers/__tests__/cell-output.test.ts +31 -31
  341. package/src/core/ai/context/providers/__tests__/datasource.test.ts +3 -3
  342. package/src/core/ai/context/providers/__tests__/tables.test.ts +3 -2
  343. package/src/core/ai/context/providers/__tests__/variable.test.ts +84 -63
  344. package/src/core/ai/staged-cells.ts +6 -0
  345. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +10 -9
  346. package/src/core/ai/tools/__tests__/run-cells-tool.test.ts +6 -6
  347. package/src/core/ai/tools/edit-notebook-tool.ts +3 -3
  348. package/src/core/cells/__tests__/add-missing-import.test.ts +3 -3
  349. package/src/core/cells/__tests__/apply-transaction.test.ts +279 -0
  350. package/src/core/cells/__tests__/cells.test.ts +198 -135
  351. package/src/core/cells/__tests__/document-changes.test.ts +572 -0
  352. package/src/core/cells/__tests__/document-roundtrip.test.ts +376 -0
  353. package/src/core/cells/__tests__/focus.test.ts +5 -4
  354. package/src/core/cells/__tests__/logs.test.ts +13 -12
  355. package/src/core/cells/__tests__/pending-delete-service.test.tsx +3 -3
  356. package/src/core/cells/__tests__/runs.test.ts +29 -24
  357. package/src/core/cells/__tests__/scrollCellIntoView.test.ts +8 -7
  358. package/src/core/cells/__tests__/session.test.ts +23 -22
  359. package/src/core/cells/cells.ts +36 -9
  360. package/src/core/cells/document-changes.ts +644 -0
  361. package/src/core/cells/ids.ts +5 -5
  362. package/src/core/cells/logs.ts +2 -2
  363. package/src/core/cells/runs.ts +6 -8
  364. package/src/core/codemirror/__tests__/format.test.ts +34 -36
  365. package/src/core/codemirror/__tests__/setup.test.ts +2 -2
  366. package/src/core/codemirror/cells/__tests__/extensions.test.ts +114 -0
  367. package/src/core/codemirror/cells/__tests__/traceback-decorations.test.ts +33 -32
  368. package/src/core/codemirror/cells/extensions.ts +66 -23
  369. package/src/core/codemirror/completion/__tests__/keymap.test.ts +15 -35
  370. package/src/core/codemirror/completion/keymap.ts +14 -4
  371. package/src/core/codemirror/copilot/__tests__/getCodes.test.ts +12 -13
  372. package/src/core/codemirror/language/__tests__/utils.test.ts +3 -3
  373. package/src/core/codemirror/language/embedded/__tests__/embedded-python.test.ts +7 -8
  374. package/src/core/codemirror/language/languages/python.ts +4 -0
  375. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +4 -3
  376. package/src/core/codemirror/lsp/notebook-lsp.ts +28 -2
  377. package/src/core/codemirror/reactive-references/__tests__/analyzer.test.ts +7 -6
  378. package/src/core/codemirror/reactive-references/analyzer.ts +2 -2
  379. package/src/core/codemirror/rtc/extension.ts +1 -1
  380. package/src/core/codemirror/rtc/loro/__tests__/sync.test.ts +52 -0
  381. package/src/core/codemirror/rtc/loro/sync.ts +1 -0
  382. package/src/core/datasets/__tests__/data-source.test.ts +93 -7
  383. package/src/core/datasets/data-source-connections.ts +44 -0
  384. package/src/core/datasets/request-registry.ts +13 -0
  385. package/src/core/datasets/state.ts +1 -1
  386. package/src/core/edit-app.tsx +0 -5
  387. package/src/core/errors/__tests__/errors.test.ts +2 -1
  388. package/src/core/export/__tests__/hooks.test.ts +37 -36
  389. package/src/core/islands/bridge.ts +2 -1
  390. package/src/core/islands/main.ts +5 -9
  391. package/src/core/kernel/__tests__/handlers.test.ts +5 -4
  392. package/src/core/kernel/handlers.ts +7 -4
  393. package/src/core/kernel/messages.ts +2 -0
  394. package/src/core/network/DeferredRequestRegistry.ts +2 -2
  395. package/src/core/network/__tests__/CachingRequestRegistry.test.ts +9 -10
  396. package/src/core/network/__tests__/DeferredRequestRegistry.test.ts +4 -6
  397. package/src/core/network/requests-lazy.ts +2 -1
  398. package/src/core/network/requests-network.ts +11 -3
  399. package/src/core/network/requests-static.ts +2 -1
  400. package/src/core/network/requests-toasting.tsx +2 -1
  401. package/src/core/network/types.ts +7 -2
  402. package/src/core/rtc/state.ts +1 -1
  403. package/src/core/saving/state.ts +2 -1
  404. package/src/core/slots/slots.ts +1 -0
  405. package/src/core/state/jotai.ts +2 -1
  406. package/src/core/static/__tests__/virtual-file-tracker.test.ts +8 -8
  407. package/src/core/static/virtual-file-tracker.ts +1 -1
  408. package/src/core/storage/__tests__/state.test.ts +31 -21
  409. package/src/core/storage/state.ts +1 -1
  410. package/src/core/variables/__tests__/state.test.ts +6 -6
  411. package/src/core/variables/types.ts +2 -2
  412. package/src/core/wasm/__tests__/state.test.ts +8 -8
  413. package/src/core/wasm/bridge.ts +11 -1
  414. package/src/core/websocket/useMarimoKernelConnection.tsx +33 -26
  415. package/src/css/app/fonts.css +6 -6
  416. package/src/css/md-tooltip.css +4 -39
  417. package/src/css/md.css +17 -0
  418. package/src/fonts/Fira_Mono/FiraMono-Bold.woff2 +0 -0
  419. package/src/fonts/Fira_Mono/FiraMono-Medium.woff2 +0 -0
  420. package/src/fonts/Fira_Mono/FiraMono-Regular.woff2 +0 -0
  421. package/src/fonts/Lora/Lora-VariableFont_wght.woff2 +0 -0
  422. package/src/fonts/PT_Sans/PTSans-Bold.woff2 +0 -0
  423. package/src/fonts/PT_Sans/PTSans-Regular.woff2 +0 -0
  424. package/src/plugins/core/RenderHTML.tsx +17 -0
  425. package/src/plugins/core/__test__/RenderHTML.test.ts +45 -0
  426. package/src/plugins/core/sanitize-html.ts +25 -18
  427. package/src/plugins/impl/DataTablePlugin.tsx +69 -28
  428. package/src/plugins/impl/RangeSliderPlugin.tsx +1 -1
  429. package/src/plugins/impl/SliderPlugin.tsx +1 -3
  430. package/src/plugins/impl/TextInputPlugin.tsx +97 -60
  431. package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +120 -0
  432. package/src/plugins/impl/anywidget/model.ts +1 -2
  433. package/src/plugins/impl/chat/ChatPlugin.tsx +6 -3
  434. package/src/plugins/impl/chat/chat-ui.tsx +2 -2
  435. package/src/plugins/impl/data-editor/components.tsx +1 -1
  436. package/src/plugins/impl/data-explorer/components/query-form.tsx +2 -2
  437. package/src/plugins/impl/data-explorer/functions/types.ts +1 -2
  438. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -2
  439. package/src/plugins/impl/matplotlib/matplotlib-renderer.ts +5 -2
  440. package/src/plugins/impl/plotly/PlotlyPlugin.tsx +9 -4
  441. package/src/plugins/impl/plotly/usePlotlyLayout.ts +2 -2
  442. package/src/plugins/impl/vega/loader.ts +3 -4
  443. package/src/plugins/impl/vega/params.ts +1 -1
  444. package/src/stories/cell.stories.tsx +8 -8
  445. package/src/stories/dataframe.stories.tsx +1 -1
  446. package/src/stories/layout/vertical/one-column.stories.tsx +9 -8
  447. package/src/stories/log-viewer.stories.tsx +8 -8
  448. package/src/stories/variables.stories.tsx +2 -2
  449. package/src/utils/__tests__/arrays.test.ts +118 -0
  450. package/src/utils/__tests__/createReducer.test.ts +2 -1
  451. package/src/utils/__tests__/download.test.tsx +21 -20
  452. package/src/utils/__tests__/objects.test.ts +34 -0
  453. package/src/utils/__tests__/strings.test.ts +27 -1
  454. package/src/utils/arrays.ts +67 -0
  455. package/src/utils/copy.ts +18 -5
  456. package/src/utils/createReducer.ts +46 -26
  457. package/src/utils/download.ts +4 -3
  458. package/src/utils/html-to-image.ts +6 -0
  459. package/src/utils/json/base64.ts +3 -3
  460. package/src/utils/objects.ts +14 -0
  461. package/src/utils/strings.ts +39 -19
  462. package/src/utils/traceback.ts +5 -3
  463. package/dist/_arrayReduce-BfFy684W.js +0 -9
  464. package/dist/_baseIsEqual-CvgsjYoW.js +0 -226
  465. package/dist/_basePickBy-pTDW2_2A.js +0 -47
  466. package/dist/_baseSlice-BrVixxuc.js +0 -10
  467. package/dist/_baseUniq-BUFhl85h.js +0 -59
  468. package/dist/_hasUnicode-C32WqUu7.js +0 -8
  469. package/dist/apl-lHFVoxx7.js +0 -4
  470. package/dist/architecture-7HQA4BMR-BmtmhGMc.js +0 -6
  471. package/dist/asciiarmor-DqCdZUHI.js +0 -4
  472. package/dist/asn1-DEcwtw-q.js +0 -4
  473. package/dist/brainfuck-Bro9Oz5x.js +0 -4
  474. package/dist/classDiagram-2ON5EDUG-DphiMW3Y.js +0 -30
  475. package/dist/classDiagram-v2-WZHVMYZB-BH1x5h4a.js +0 -30
  476. package/dist/clojure-B2uhdQPa.js +0 -4
  477. package/dist/cmake-B9WXyQcc.js +0 -4
  478. package/dist/cobol-CPD3EJfO.js +0 -4
  479. package/dist/coffeescript-KD9TnEnS.js +0 -4
  480. package/dist/commonlisp-DNEULz_Q.js +0 -4
  481. package/dist/crystal-DVPNgAPQ.js +0 -4
  482. package/dist/css-fq3a1AH1.js +0 -4
  483. package/dist/cypher-Dtzq0BP7.js +0 -4
  484. package/dist/d-DcZudIhJ.js +0 -4
  485. package/dist/diff-D9BPDC3o.js +0 -4
  486. package/dist/dist-B4MxkKHf.js +0 -8
  487. package/dist/dist-BYghZv6b.js +0 -5
  488. package/dist/dist-Be-uQhz5.js +0 -6
  489. package/dist/dist-CB_xf0ju.js +0 -5
  490. package/dist/dist-CK0qFAbF.js +0 -8
  491. package/dist/dist-CYEk-qrr.js +0 -8
  492. package/dist/dist-CmKoWpMk.js +0 -5
  493. package/dist/dist-D1nf4IQl.js +0 -5
  494. package/dist/dist-Df3AcKpt.js +0 -6
  495. package/dist/dist-DgaFHt_I.js +0 -5
  496. package/dist/dist-Dk10C3ui.js +0 -5
  497. package/dist/dist-DtyPVMHR.js +0 -5
  498. package/dist/dist-ko7WnHAO.js +0 -5
  499. package/dist/dist-of7gLRFK.js +0 -8
  500. package/dist/dtd-FhG-tVom.js +0 -4
  501. package/dist/dylan-HWpZOBPw.js +0 -4
  502. package/dist/ecl-B_rcje1I.js +0 -4
  503. package/dist/eiffel-oqHyHs6f.js +0 -4
  504. package/dist/elm-B62RQEds.js +0 -4
  505. package/dist/erlang-CjRjjA-B.js +0 -4
  506. package/dist/esm-BLobyqMs.js +0 -4387
  507. package/dist/factor-CGH_TnIV.js +0 -4
  508. package/dist/forth-5N06oHNp.js +0 -4
  509. package/dist/fortran-wZ-sNg3h.js +0 -4
  510. package/dist/gas-3H4_FaS8.js +0 -4
  511. package/dist/gherkin-PEA2uy50.js +0 -4
  512. package/dist/graphlib-D18eZCT4.js +0 -228
  513. package/dist/groovy-DZzbvCP1.js +0 -4
  514. package/dist/hasIn-B9AbGLj3.js +0 -86
  515. package/dist/haskell-CExLTzho.js +0 -4
  516. package/dist/haxe-f3pVb8qU.js +0 -5
  517. package/dist/idl-BbWlJ0gk.js +0 -4
  518. package/dist/infoDiagram-HS3SLOUP-BXGbfBss.js +0 -30
  519. package/dist/isEmpty-C-xMag79.js +0 -16
  520. package/dist/isString-D-vNYDBA.js +0 -9
  521. package/dist/javascript-eMOhp6Aq.js +0 -4
  522. package/dist/julia-C6w3Rvqb.js +0 -4
  523. package/dist/livescript-ChQl9lD-.js +0 -4
  524. package/dist/lua-CiDvI96j.js +0 -4
  525. package/dist/mathematica-ClVO4k7N.js +0 -4
  526. package/dist/mbox-BEI7DeUg.js +0 -4
  527. package/dist/mermaid-4DMBBIKO-PVrJfEpX.js +0 -6
  528. package/dist/min-ECVRnCdn.js +0 -89
  529. package/dist/mirc-DwidJ3iH.js +0 -4
  530. package/dist/mllike-Dspdy0xJ.js +0 -6
  531. package/dist/modelica-CIUejP-L.js +0 -4
  532. package/dist/mscgen-BWXU4Omp.js +0 -6
  533. package/dist/mumps-PHFFoPk5.js +0 -4
  534. package/dist/nsis-B7xooKLf.js +0 -4
  535. package/dist/ntriples-DnOgtCzG.js +0 -4
  536. package/dist/octave-Cn5kH_QT.js +0 -4
  537. package/dist/once-BqS42WgZ.js +0 -74
  538. package/dist/oz-DR-sROpu.js +0 -4
  539. package/dist/pascal-CPKK1zcS.js +0 -4
  540. package/dist/perl-D7FuFdyd.js +0 -4
  541. package/dist/pig-CEXnOAnI.js +0 -4
  542. package/dist/powershell-BKvWab7q.js +0 -4
  543. package/dist/properties-7jnK_vYx.js +0 -4
  544. package/dist/protobuf-4rslMjEN.js +0 -4
  545. package/dist/pug-BVwdEv4r.js +0 -4
  546. package/dist/puppet-iSHg_1Z2.js +0 -4
  547. package/dist/python-tK3wUCn0.js +0 -4
  548. package/dist/q-DP_Dcoox.js +0 -4
  549. package/dist/r-C32wHLYu.js +0 -4
  550. package/dist/range-BKaWvVUE.js +0 -30
  551. package/dist/react-vega-CFUuchds.js +0 -9
  552. package/dist/reduce-CqQo8ppc.js +0 -275
  553. package/dist/rpm-BbDBUfs9.js +0 -5
  554. package/dist/ruby-COfWUiIr.js +0 -4
  555. package/dist/sas-y_Hue2-X.js +0 -4
  556. package/dist/scheme-7jTCqHw8.js +0 -4
  557. package/dist/shell-DAqJWXDk.js +0 -4
  558. package/dist/sieve-EaqnbCO3.js +0 -4
  559. package/dist/smalltalk-DL03YKLJ.js +0 -4
  560. package/dist/sparql-DTA-tQ_q.js +0 -4
  561. package/dist/stateDiagram-v2-4FDKWEC3-BIeUs-Ed.js +0 -29
  562. package/dist/stex-KfRnSHzF.js +0 -4
  563. package/dist/stylus-CfjeFry_.js +0 -4
  564. package/dist/swift-Dl0RRDbH.js +0 -4
  565. package/dist/tcl-wv9O7fLZ.js +0 -4
  566. package/dist/textile-DzMRCBcV.js +0 -4
  567. package/dist/toString-DbIAWQpF.js +0 -23
  568. package/dist/toml-CyIWqgbe.js +0 -4
  569. package/dist/troff-_huin_CY.js +0 -4
  570. package/dist/ttcn-BEiJuYYc.js +0 -4
  571. package/dist/ttcn-cfg-DB6Ksh67.js +0 -4
  572. package/dist/turtle-DzhzGEum.js +0 -4
  573. package/dist/uniq-H2E5nMLq.js +0 -8
  574. package/dist/useDeepCompareMemoize-BWUwfh37.js +0 -755
  575. package/dist/useIframeCapabilities-OQaMKgZl.js +0 -46
  576. package/dist/vb-CngKZQHu.js +0 -4
  577. package/dist/vbscript-BV_8nbeM.js +0 -4
  578. package/dist/velocity-IqE7qYKE.js +0 -4
  579. package/dist/verilog-xtyaWTnc.js +0 -4
  580. package/dist/vhdl-BaqXCtf3.js +0 -4
  581. package/dist/webidl-BDB8PTTO.js +0 -4
  582. package/dist/xquery-BIC-qj9Z.js +0 -4
  583. package/dist/yacas-ifv5tftd.js +0 -4
  584. package/dist/z80-B8zOMVNt.js +0 -4
  585. package/src/core/cells/effects.ts +0 -42
  586. package/src/fonts/Fira_Mono/FiraMono-Bold.ttf +0 -0
  587. package/src/fonts/Fira_Mono/FiraMono-Medium.ttf +0 -0
  588. package/src/fonts/Fira_Mono/FiraMono-Regular.ttf +0 -0
  589. package/src/fonts/Lora/Lora-Italic-VariableFont_wght.ttf +0 -0
  590. package/src/fonts/Lora/Lora-VariableFont_wght.ttf +0 -0
  591. package/src/fonts/Lora/static/Lora-Bold.ttf +0 -0
  592. package/src/fonts/Lora/static/Lora-BoldItalic.ttf +0 -0
  593. package/src/fonts/Lora/static/Lora-Italic.ttf +0 -0
  594. package/src/fonts/Lora/static/Lora-Medium.ttf +0 -0
  595. package/src/fonts/Lora/static/Lora-MediumItalic.ttf +0 -0
  596. package/src/fonts/Lora/static/Lora-Regular.ttf +0 -0
  597. package/src/fonts/Lora/static/Lora-SemiBold.ttf +0 -0
  598. package/src/fonts/Lora/static/Lora-SemiBoldItalic.ttf +0 -0
  599. package/src/fonts/PT_Sans/PTSans-Bold.ttf +0 -0
  600. package/src/fonts/PT_Sans/PTSans-BoldItalic.ttf +0 -0
  601. package/src/fonts/PT_Sans/PTSans-Italic.ttf +0 -0
  602. package/src/fonts/PT_Sans/PTSans-Regular.ttf +0 -0
  603. /package/dist/{apl-DRxKiEot.js → apl-BqjtmlWW.js} +0 -0
  604. /package/dist/{array-D-nrDupM.js → array-D7wW5QoO.js} +0 -0
  605. /package/dist/{asciiarmor-C8HoXFIm.js → asciiarmor-D9C9bbeV.js} +0 -0
  606. /package/dist/{asn1-9Bo0DYT-.js → asn1-D_zR1ubK.js} +0 -0
  607. /package/dist/{asterisk-BsiuGzWq.js → asterisk-B0dLLA8Z.js} +0 -0
  608. /package/dist/{brainfuck-Db8njC-p.js → brainfuck-79SC7EYA.js} +0 -0
  609. /package/dist/{chunk-DR5Q36YT-D4q96vNV.js → chunk-DR5Q36YT-BxPcQ21t.js} +0 -0
  610. /package/dist/{click-outside-container-CKfwEZqH.js → click-outside-container-DNfggvIW.js} +0 -0
  611. /package/dist/{clike-CFhUNtI5.js → clike-DFDX2jWq.js} +0 -0
  612. /package/dist/{clojure-CX7oovsp.js → clojure-Bb3Od9By.js} +0 -0
  613. /package/dist/{clsx-D2KVTYnW.js → clsx-yW_RAw0K.js} +0 -0
  614. /package/dist/{cmake-C29AR2kk.js → cmake-DYGUYEtU.js} +0 -0
  615. /package/dist/{cobol-CNkuRW9i.js → cobol-CcWmcAFT.js} +0 -0
  616. /package/dist/{coffeescript-BJAbfGam.js → coffeescript-BVa1qoL6.js} +0 -0
  617. /package/dist/{colors-6nB_pSln.js → colors-6DRQ0kEF.js} +0 -0
  618. /package/dist/{common-keywords-BAkLFdud.js → common-keywords-Bz8dNfWa.js} +0 -0
  619. /package/dist/{commonlisp-BTNhj2l9.js → commonlisp-zi51jgUH.js} +0 -0
  620. /package/dist/{crystal-CZc0nIm9.js → crystal-QjpegJHM.js} +0 -0
  621. /package/dist/{css-L2-0OTXc.js → css-B_GfJtcK.js} +0 -0
  622. /package/dist/{cypher-Dnc6MXl0.js → cypher-BVuYJpGf.js} +0 -0
  623. /package/dist/{cytoscape.esm-BXzSsA6N.js → cytoscape.esm-BYAuS6uS.js} +0 -0
  624. /package/dist/{d-C6X9iIga.js → d-BT97RiQI.js} +0 -0
  625. /package/dist/{defaultLocale-CfQ4kBaV.js → defaultLocale-B_A76Zpk.js} +0 -0
  626. /package/dist/{defaultLocale-Bklbu-Tp.js → defaultLocale-DjFHq3Xk.js} +0 -0
  627. /package/dist/{diff-ZzKinYqY.js → diff-CHd93v7L.js} +0 -0
  628. /package/dist/{dist-Bymy0kEH.js → dist-CqR8FBcH.js} +0 -0
  629. /package/dist/{dtd-CytEpkAo.js → dtd-akLFIRuZ.js} +0 -0
  630. /package/dist/{duckdb-keywords-C1WxmSfG.js → duckdb-keywords-CQAIHMbC.js} +0 -0
  631. /package/dist/{dylan-CZByFBEQ.js → dylan-Iy-rgNOc.js} +0 -0
  632. /package/dist/{ebnf-BF2FOt-m.js → ebnf-CTkZpZPT.js} +0 -0
  633. /package/dist/{ecl-Cp7L1F5B.js → ecl-BhUXC_aR.js} +0 -0
  634. /package/dist/{eiffel-C66yjnFL.js → eiffel-DIRAlWPD.js} +0 -0
  635. /package/dist/{elm-DtHo-73e.js → elm-BDgVzkJ4.js} +0 -0
  636. /package/dist/{emotion-is-prop-valid.esm-DtW2o230.js → emotion-is-prop-valid.esm-DdzHpbbG.js} +0 -0
  637. /package/dist/{erlang-C_sj44mF.js → erlang-Djcs_NwB.js} +0 -0
  638. /package/dist/{esm-BWftfC-A.js → esm-BRwAuUu2.js} +0 -0
  639. /package/dist/{fcl-BhLcvRo_.js → fcl-OXoT8w4k.js} +0 -0
  640. /package/dist/{forth-CIDHh56T.js → forth-c_NTahPv.js} +0 -0
  641. /package/dist/{fortran-BQrDVXRU.js → fortran-Bpxt27dn.js} +0 -0
  642. /package/dist/{gas-D4HQPB0Q.js → gas-RVBts6ZK.js} +0 -0
  643. /package/dist/{gherkin-UB2gJHdT.js → gherkin-Hf6PTauh.js} +0 -0
  644. /package/dist/{groovy-DVz6jkOx.js → groovy-CKjO-cRi.js} +0 -0
  645. /package/dist/{haskell-CpUdAPCz.js → haskell-DC1Gan6v.js} +0 -0
  646. /package/dist/{haxe-DCV5_cqD.js → haxe-Bpne--ot.js} +0 -0
  647. /package/dist/{http-C_TDb8VX.js → http-CPVO27fZ.js} +0 -0
  648. /package/dist/{idl-D7WCIgHw.js → idl-GRIbMIEq.js} +0 -0
  649. /package/dist/{init-Ci8VD8ZH.js → init-BfRhston.js} +0 -0
  650. /package/dist/{invariant-D9QLJ4SZ.js → invariant-CzjtdzpE.js} +0 -0
  651. /package/dist/{isArrayLikeObject-BrYl-ETg.js → isArrayLikeObject-C-hFPChh.js} +0 -0
  652. /package/dist/{javascript-B2Rn0Lmd.js → javascript-nS0zxWNO.js} +0 -0
  653. /package/dist/{jsx-runtime-CTBg5pdT.js → jsx-runtime-9hcJiI23.js} +0 -0
  654. /package/dist/{julia-ApprtEaw.js → julia-CQpdTxmO.js} +0 -0
  655. /package/dist/{katex-Bk_FvVSR.js → katex-Dg42UEnr.js} +0 -0
  656. /package/dist/{livescript-BMLIlM7C.js → livescript-D5kqrQol.js} +0 -0
  657. /package/dist/{lua-DdDaW3tC.js → lua-CKifrpGK.js} +0 -0
  658. /package/dist/{main-Tj_-QTyF.js → main-C01_ic0d.js} +0 -0
  659. /package/dist/{math-HUZifhTs.js → math-BbMyrONz.js} +0 -0
  660. /package/dist/{mathematica-PnNN7c2Z.js → mathematica-CxT3f_fi.js} +0 -0
  661. /package/dist/{mbox-B84OtHBK.js → mbox-C2_n_I9h.js} +0 -0
  662. /package/dist/{mirc-BVWXJxIq.js → mirc-BTQeASBH.js} +0 -0
  663. /package/dist/{mllike-BawXWupH.js → mllike-BxO6Hl5N.js} +0 -0
  664. /package/dist/{modelica-C8-X4Hf_.js → modelica-DuivZReX.js} +0 -0
  665. /package/dist/{mscgen-BOM6dDj8.js → mscgen-DwD83FOm.js} +0 -0
  666. /package/dist/{mumps-DQOY8n05.js → mumps-CdVjp3OE.js} +0 -0
  667. /package/dist/{nginx-DkMgA__9.js → nginx-Bi9TuNqb.js} +0 -0
  668. /package/dist/{node-sql-parser-D53LM_7b.js → node-sql-parser-Bet3kHkt.js} +0 -0
  669. /package/dist/{ntriples-DU8VrXdW.js → ntriples-DBS60qLp.js} +0 -0
  670. /package/dist/{octave-BzTIBsQ8.js → octave-BL0tQUFC.js} +0 -0
  671. /package/dist/{oz-DKFcZsoi.js → oz-DBrG4vwi.js} +0 -0
  672. /package/dist/{pascal-DHBZ15pT.js → pascal-BWV9h8yS.js} +0 -0
  673. /package/dist/{path-BVI7RNUv.js → path-C_x2ySFi.js} +0 -0
  674. /package/dist/{perl-75NMI3w0.js → perl-Bm5a83JW.js} +0 -0
  675. /package/dist/{pig-B-HY1fo_.js → pig-CbJDoHaE.js} +0 -0
  676. /package/dist/{powershell-DEH22U53.js → powershell-tG44m5Cy.js} +0 -0
  677. /package/dist/{properties-B1MzBoJC.js → properties-DUZGzdb1.js} +0 -0
  678. /package/dist/{protobuf-Dr14KV0p.js → protobuf-CcoKXY0d.js} +0 -0
  679. /package/dist/{puppet-C4z38l7v.js → puppet-BH73L_Gw.js} +0 -0
  680. /package/dist/{purify.es-DGenX2XH.js → purify.es-BwXbuO3r.js} +0 -0
  681. /package/dist/{python-D2L7Nknt.js → python-NJIxLTZp.js} +0 -0
  682. /package/dist/{q-PxipHfgS.js → q-MotBNA65.js} +0 -0
  683. /package/dist/{r-CEMMu_Tf.js → r-BUgBPae7.js} +0 -0
  684. /package/dist/{range-BToS7LsA.js → range-DwpxnYuB.js} +0 -0
  685. /package/dist/{react-dom-CqtLRVZP.js → react-dom-BKwCWYPW.js} +0 -0
  686. /package/dist/{rpm-D3xyahkR.js → rpm-C_PaGodG.js} +0 -0
  687. /package/dist/{ruby-DwEkwdiu.js → ruby-DFLM2XD8.js} +0 -0
  688. /package/dist/{sas-L1W0BRft.js → sas-BMyyu8oO.js} +0 -0
  689. /package/dist/{scheme-CTybTrX0.js → scheme-Qet9zYAe.js} +0 -0
  690. /package/dist/{shell-BSx3LZnu.js → shell-BKHx4Jjo.js} +0 -0
  691. /package/dist/{sieve-BjUfbv-6.js → sieve-CVo7dc4j.js} +0 -0
  692. /package/dist/{simple-mode-IPZGFbI6.js → simple-mode-CVFBIo6d.js} +0 -0
  693. /package/dist/{smalltalk-BlzuYrMv.js → smalltalk-BHr2nCth.js} +0 -0
  694. /package/dist/{solr-Cj_9RM4d.js → solr-Bt9XtM2H.js} +0 -0
  695. /package/dist/{sparql-BXKjQ0cK.js → sparql-QSu0ZCcc.js} +0 -0
  696. /package/dist/{spreadsheet-CifI10GO.js → spreadsheet-BWfuwc0V.js} +0 -0
  697. /package/dist/{sql-B0bFyY1c.js → sql-BdV3YOCG.js} +0 -0
  698. /package/dist/{stex-BIsgBmK4.js → stex-Btoi8e7I.js} +0 -0
  699. /package/dist/{stylus-CqrLLVnG.js → stylus-CLZH9-Ps.js} +0 -0
  700. /package/dist/{swift-DIqvj3_G.js → swift-JNDJdNIE.js} +0 -0
  701. /package/dist/{tcl-B8bOIGVK.js → tcl-J5aE7aj5.js} +0 -0
  702. /package/dist/{textile-DZsjavD_.js → textile-6Hn05XQM.js} +0 -0
  703. /package/dist/{tiddlywiki-BbGdvEjx.js → tiddlywiki-BWn8rSwJ.js} +0 -0
  704. /package/dist/{tiki-BYesmRDo.js → tiki-XORjA1c3.js} +0 -0
  705. /package/dist/{timer-CPsmIOdm.js → timer-pEiW44EO.js} +0 -0
  706. /package/dist/{toml-Uc7m08nl.js → toml-BceyeuiF.js} +0 -0
  707. /package/dist/{treemap-DMn4tIJ7.js → treemap-BzS5cW_6.js} +0 -0
  708. /package/dist/{troff-GEl5wcXR.js → troff-DeMyd5Pf.js} +0 -0
  709. /package/dist/{ttcn-pr4FDOLT.js → ttcn-DurvvcB-.js} +0 -0
  710. /package/dist/{ttcn-cfg-dZQ_fWTH.js → ttcn-cfg-BuYui6Rv.js} +0 -0
  711. /package/dist/{turtle-TPRDOknA.js → turtle-CD8Qf-tp.js} +0 -0
  712. /package/dist/{vb-BJUAeTYr.js → vb-BklM-Nqk.js} +0 -0
  713. /package/dist/{vbscript-CcJ6Z3ic.js → vbscript-DbMEEX0d.js} +0 -0
  714. /package/dist/{velocity-pq4ZMzU3.js → velocity-CERL-_vq.js} +0 -0
  715. /package/dist/{verilog-timMNjHt.js → verilog-BD6jNce6.js} +0 -0
  716. /package/dist/{vhdl-DYFbVKNm.js → vhdl-U-1_N98i.js} +0 -0
  717. /package/dist/{webidl-pue9oqnb.js → webidl-IUn0dzoa.js} +0 -0
  718. /package/dist/{xquery-DeItGynK.js → xquery-QeeHdSO2.js} +0 -0
  719. /package/dist/{yacas-By2Qrjba.js → yacas-C9XcEPAJ.js} +0 -0
  720. /package/dist/{z80-C7iLsyPC.js → z80-C-nD1oRy.js} +0 -0
@@ -1,5 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
+ import { ChevronDownIcon, ChevronRightIcon } from "lucide-react";
3
4
  import { useState } from "react";
4
5
  import { useLocale } from "react-aria";
5
6
  import {
@@ -88,18 +89,21 @@ export const ColumnExplorerPanel = ({
88
89
  />
89
90
  <CommandList className="max-h-full">
90
91
  <CommandEmpty>No results.</CommandEmpty>
91
- {filteredColumns?.map(([columnName, [dataType, externalType]]) => {
92
- return (
93
- <ColumnItem
94
- // Tables may have the same column names, hence we use tableId to make it unique
95
- key={`${tableId}-${columnName}`}
96
- columnName={columnName}
97
- dataType={dataType}
98
- externalType={externalType}
99
- previewColumn={previewColumn}
100
- />
101
- );
102
- })}
92
+ {filteredColumns?.map(
93
+ ([columnName, [dataType, externalType]], index) => {
94
+ return (
95
+ <ColumnItem
96
+ // Tables may have the same column names, hence we use tableId to make it unique
97
+ key={`${tableId}-${columnName}`}
98
+ columnName={columnName}
99
+ dataType={dataType}
100
+ externalType={externalType}
101
+ previewColumn={previewColumn}
102
+ defaultExpanded={index === 0}
103
+ />
104
+ );
105
+ },
106
+ )}
103
107
  </CommandList>
104
108
  </Command>
105
109
  </div>
@@ -111,13 +115,15 @@ const ColumnItem = ({
111
115
  dataType,
112
116
  externalType,
113
117
  previewColumn,
118
+ defaultExpanded = false,
114
119
  }: {
115
120
  columnName: string;
116
121
  dataType: DataType;
117
122
  externalType: string;
118
123
  previewColumn: PreviewColumn;
124
+ defaultExpanded?: boolean;
119
125
  }) => {
120
- const [isExpanded, setIsExpanded] = useState(false);
126
+ const [isExpanded, setIsExpanded] = useState(defaultExpanded);
121
127
 
122
128
  const columnText = (
123
129
  <span className={isExpanded ? "font-semibold" : ""}>{columnName}</span>
@@ -130,6 +136,11 @@ const ColumnItem = ({
130
136
  onSelect={() => setIsExpanded(!isExpanded)}
131
137
  className="flex flex-row items-center gap-1.5 group w-full cursor-pointer"
132
138
  >
139
+ {isExpanded ? (
140
+ <ChevronDownIcon className="w-3 h-3 shrink-0 text-muted-foreground" />
141
+ ) : (
142
+ <ChevronRightIcon className="w-3 h-3 shrink-0 text-muted-foreground" />
143
+ )}
133
144
  <ColumnName columnName={columnText} dataType={dataType} />
134
145
  <div className="ml-auto">
135
146
  <Tooltip content="Copy column name" delayDuration={400}>
@@ -2,7 +2,6 @@
2
2
  "use no memo";
3
3
 
4
4
  import type { Column, Table } from "@tanstack/react-table";
5
- import { capitalize } from "lodash-es";
6
5
  import { FilterIcon, MinusIcon, TextIcon, XIcon } from "lucide-react";
7
6
  import { useMemo, useRef, useState } from "react";
8
7
  import { useLocale } from "react-aria";
@@ -24,6 +23,7 @@ import type { OperatorType } from "@/plugins/impl/data-frames/utils/operators";
24
23
  import { logNever } from "@/utils/assertNever";
25
24
  import { cn } from "@/utils/cn";
26
25
  import { Logger } from "@/utils/Logger";
26
+ import { capitalize } from "@/utils/strings";
27
27
  import { Spinner } from "../icons/spinner";
28
28
  import { Button } from "../ui/button";
29
29
  import { Checkbox } from "../ui/checkbox";
@@ -112,6 +112,7 @@ export function generateColumns<T>({
112
112
  headerTooltip,
113
113
  showDataTypes,
114
114
  calculateTopKRows,
115
+ fractionDigitsByColumn,
115
116
  }: {
116
117
  rowHeaders: FieldTypesWithExternalType;
117
118
  selection: DataTableSelection;
@@ -122,6 +123,7 @@ export function generateColumns<T>({
122
123
  headerTooltip?: Record<string, string>;
123
124
  showDataTypes?: boolean;
124
125
  calculateTopKRows?: CalculateTopKRows;
126
+ fractionDigitsByColumn?: Record<string, number>;
125
127
  }): ColumnDef<T>[] {
126
128
  // Row-headers are typically index columns
127
129
  const rowHeadersSet = new Set(rowHeaders.map(([columnName]) => columnName));
@@ -138,6 +140,7 @@ export function generateColumns<T>({
138
140
  rowHeader: isRowHeader,
139
141
  dtype: types?.[1],
140
142
  dataType: types?.[0],
143
+ minFractionDigits: fractionDigitsByColumn?.[key],
141
144
  };
142
145
  }
143
146
 
@@ -146,9 +149,23 @@ export function generateColumns<T>({
146
149
  filterType: getFilterTypeForFieldType(types[0]),
147
150
  dtype: types[1],
148
151
  dataType: types[0],
152
+ minFractionDigits: fractionDigitsByColumn?.[key],
149
153
  };
150
154
  };
151
155
 
156
+ const getJustify = (key: string): "left" | "center" | "right" | undefined => {
157
+ // Explicit user override takes precedence
158
+ if (textJustifyColumns?.[key]) {
159
+ return textJustifyColumns[key];
160
+ }
161
+ // Auto right-align numeric columns
162
+ const dataType = getMeta(key).dataType;
163
+ if (dataType === "number" || dataType === "integer") {
164
+ return "right";
165
+ }
166
+ return undefined;
167
+ };
168
+
152
169
  const columnKeys: string[] = [
153
170
  ...rowHeadersSet,
154
171
  ...fieldTypes.map(([columnName]) => columnName),
@@ -186,7 +203,7 @@ export function generateColumns<T>({
186
203
  </div>
187
204
  ) : null;
188
205
 
189
- const justify = textJustifyColumns?.[key];
206
+ const justify = getJustify(key);
190
207
 
191
208
  const headerWithType = (
192
209
  <div
@@ -254,18 +271,21 @@ export function generateColumns<T>({
254
271
  cell.toggleSelected?.();
255
272
  }
256
273
 
257
- const justify = textJustifyColumns?.[key];
274
+ const justify = getJustify(key);
258
275
  const wrapped = wrappedColumns?.includes(key);
259
276
  const isCellSelected = cell?.getIsSelected?.() || false;
260
277
  const canSelectCell =
261
278
  (selection === "single-cell" || selection === "multi-cell") &&
262
279
  !isCellSelected;
263
280
 
281
+ const dataType = column.columnDef.meta?.dataType;
282
+ const isNumeric = dataType === "number" || dataType === "integer";
264
283
  const cellStyles = getCellStyleClass(
265
284
  justify,
266
285
  wrapped,
267
286
  canSelectCell,
268
287
  isCellSelected,
288
+ isNumeric,
269
289
  );
270
290
 
271
291
  const renderedCell = renderCellValue({
@@ -430,6 +450,7 @@ function getCellStyleClass(
430
450
  wrapped: boolean | undefined,
431
451
  canSelectCell: boolean,
432
452
  isSelected: boolean,
453
+ isNumeric?: boolean,
433
454
  ): string {
434
455
  return cn(
435
456
  canSelectCell && "cursor-pointer",
@@ -438,6 +459,7 @@ function getCellStyleClass(
438
459
  "w-full",
439
460
  "text-left",
440
461
  "truncate",
462
+ isNumeric && "tabular-nums",
441
463
  justify === "center" && "text-center",
442
464
  justify === "right" && "text-right",
443
465
  wrapped && `${COLUMN_WRAPPING_STYLES} break-words`,
@@ -589,7 +611,18 @@ export function renderCellValue<TData, TValue>({
589
611
  if (typeof value === "number") {
590
612
  return (
591
613
  <div onClick={selectCell} className={cellStyles}>
592
- <LocaleNumber value={value} />
614
+ <LocaleNumber
615
+ value={value}
616
+ minFractionDigits={column.columnDef.meta?.minFractionDigits}
617
+ />
618
+ </div>
619
+ );
620
+ }
621
+
622
+ if (typeof value === "boolean") {
623
+ return (
624
+ <div onClick={selectCell} className={cellStyles}>
625
+ {value ? "True" : "False"}
593
626
  </div>
594
627
  );
595
628
  }
@@ -635,9 +668,16 @@ export function renderCellValue<TData, TValue>({
635
668
  );
636
669
  }
637
670
 
638
- export const LocaleNumber = ({ value }: { value: number }) => {
671
+ export const LocaleNumber = ({
672
+ value,
673
+ minFractionDigits,
674
+ }: {
675
+ value: number;
676
+ minFractionDigits?: number;
677
+ }) => {
639
678
  const { locale } = useLocale();
640
679
  const format = useNumberFormatter({
680
+ minimumFractionDigits: minFractionDigits,
641
681
  maximumFractionDigits: maxFractionalDigits(locale),
642
682
  });
643
683
  return format.format(value);
@@ -18,7 +18,7 @@ import {
18
18
  import { DATA_CELL_ID } from "./cell-utils";
19
19
  import { Filter } from "./filters";
20
20
  import { selectedCellsAtom } from "./range-focus/atoms";
21
- import { stringifyUnknownValue } from "./utils";
21
+ import { getClipboardContent, getRawValue } from "./utils";
22
22
 
23
23
  export const DataTableContextMenu = <TData,>({
24
24
  contextMenuRef,
@@ -82,11 +82,15 @@ export const CellContextMenu = <TData,>({
82
82
  return;
83
83
  }
84
84
 
85
+ const table = cell.getContext().table;
86
+ const displayedValue = cell.getValue();
87
+ const rawValue =
88
+ getRawValue(table, cell.row.index, cell.column.id) ?? displayedValue;
89
+
85
90
  const handleCopyCell = () => {
86
91
  try {
87
- const value = cell.getValue();
88
- const stringValue = stringifyUnknownValue({ value });
89
- copyToClipboard(stringValue);
92
+ const { text, html } = getClipboardContent(rawValue, displayedValue);
93
+ copyToClipboard(text, html);
90
94
  } catch (error) {
91
95
  Logger.error("Failed to copy context menu cell", error);
92
96
  }
@@ -98,7 +102,7 @@ export const CellContextMenu = <TData,>({
98
102
  const handleFilterCell = (operator: "in" | "not_in") => {
99
103
  column.setFilterValue(
100
104
  Filter.select({
101
- options: [cell.getValue()],
105
+ options: [rawValue],
102
106
  operator,
103
107
  }),
104
108
  );
@@ -24,7 +24,10 @@ import { useLocale } from "react-aria";
24
24
  import { Table } from "@/components/ui/table";
25
25
  import type { GetRowIds } from "@/plugins/impl/DataTablePlugin";
26
26
  import { cn } from "@/utils/cn";
27
- import type { PanelType } from "../editor/chrome/panels/context-aware-panel/context-aware-panel";
27
+ import {
28
+ PANEL_TYPES,
29
+ type PanelType,
30
+ } from "../editor/chrome/panels/context-aware-panel/context-aware-panel";
28
31
  import { CellHoverTemplateFeature } from "./cell-hover-template/feature";
29
32
  import { CellHoverTextFeature } from "./cell-hover-text/feature";
30
33
  import { CellSelectionFeature } from "./cell-selection/feature";
@@ -38,12 +41,17 @@ import type { DownloadActionProps } from "./download-actions";
38
41
  import { FilterPills } from "./filter-pills";
39
42
  import { FocusRowFeature } from "./focus-row/feature";
40
43
  import { useColumnPinning } from "./hooks/use-column-pinning";
44
+ import { useScrollContainerHeight } from "./hooks/use-scroll-container-height";
41
45
  import { CellSelectionStats } from "./range-focus/cell-selection-stats";
42
46
  import { CellSelectionProvider } from "./range-focus/provider";
43
47
  import { DataTableBody, renderTableHeader } from "./renderers";
44
48
  import { SearchBar } from "./SearchBar";
45
49
  import { TableActions } from "./TableActions";
46
- import type { DataTableSelection, TooManyRows } from "./types";
50
+ import {
51
+ type DataTableSelection,
52
+ MIN_ROWS_TO_VIRTUALIZE,
53
+ type TooManyRows,
54
+ } from "./types";
47
55
  import { getStableRowId } from "./utils";
48
56
 
49
57
  interface DataTableProps<TData> extends Partial<DownloadActionProps> {
@@ -52,6 +60,7 @@ interface DataTableProps<TData> extends Partial<DownloadActionProps> {
52
60
  maxHeight?: number;
53
61
  columns: ColumnDef<TData>[];
54
62
  data: TData[];
63
+ rawData?: TData[]; // raw data for filtering/copying (present only if format_mapping is provided)
55
64
  // Sorting
56
65
  manualSorting?: boolean; // server-side sorting
57
66
  sorting?: SortingState; // controlled sorting
@@ -91,10 +100,10 @@ interface DataTableProps<TData> extends Partial<DownloadActionProps> {
91
100
  // Others
92
101
  showChartBuilder?: boolean;
93
102
  showPageSizeSelector?: boolean;
94
- showColumnExplorer?: boolean;
95
- showRowExplorer?: boolean;
103
+ showTableExplorer?: boolean;
96
104
  togglePanel?: (panelType: PanelType) => void;
97
105
  isPanelOpen?: (panelType: PanelType) => boolean;
106
+ isAnyPanelOpen?: boolean;
98
107
  }
99
108
 
100
109
  const DataTableInternal = <TData,>({
@@ -103,6 +112,7 @@ const DataTableInternal = <TData,>({
103
112
  maxHeight,
104
113
  columns,
105
114
  data,
115
+ rawData,
106
116
  selection,
107
117
  totalColumns,
108
118
  totalRows,
@@ -117,7 +127,6 @@ const DataTableInternal = <TData,>({
117
127
  paginationState,
118
128
  setPaginationState,
119
129
  downloadAs,
120
- downloadFileName,
121
130
  manualPagination = false,
122
131
  pagination = false,
123
132
  onRowSelectionChange,
@@ -135,10 +144,10 @@ const DataTableInternal = <TData,>({
135
144
  toggleDisplayHeader,
136
145
  showChartBuilder,
137
146
  showPageSizeSelector,
138
- showColumnExplorer,
139
- showRowExplorer,
147
+ showTableExplorer,
140
148
  togglePanel,
141
149
  isPanelOpen,
150
+ isAnyPanelOpen,
142
151
  viewedRowIdx,
143
152
  onViewedRowChange,
144
153
  }: DataTableProps<TData>) => {
@@ -197,6 +206,7 @@ const DataTableInternal = <TData,>({
197
206
  ],
198
207
  data,
199
208
  columns,
209
+ meta: { rawData },
200
210
  getCoreRowModel: getCoreRowModel(),
201
211
  // pagination
202
212
  rowCount: totalRows === "too_many" ? undefined : totalRows,
@@ -264,37 +274,10 @@ const DataTableInternal = <TData,>({
264
274
  },
265
275
  });
266
276
 
267
- const rowViewerPanelOpen = isPanelOpen?.("row-viewer") ?? false;
268
-
269
- const tableRef = React.useRef<HTMLTableElement | null>(null);
277
+ const rowViewerPanelOpen = isPanelOpen?.(PANEL_TYPES.ROW_VIEWER) ?? false;
278
+ const virtualize = !pagination && data.length > MIN_ROWS_TO_VIRTUALIZE;
270
279
 
271
- // Why use a ref to set max-height on the wrapper?
272
- // - position: sticky only works when the sticky element's nearest scrollable
273
- // ancestor is its immediate container. If max-height/overflow are applied
274
- // on a grandparent, sticky table headers (th) will not stick.
275
- // - We keep the scroll wrapper colocated with the base Table component, but
276
- // derive the scroll boundary from maxHeight here to avoid coupling UI base
277
- // components to data-table specifics or expanding their API surface.
278
- // - Setting styles on the table's direct wrapper ensures the header sticks
279
- // reliably across browsers without changing upstream components.
280
- React.useEffect(() => {
281
- if (!tableRef.current) {
282
- return;
283
- }
284
- const wrapper = tableRef.current.parentElement as HTMLDivElement | null;
285
- if (!wrapper) {
286
- return;
287
- }
288
- if (maxHeight) {
289
- wrapper.style.maxHeight = `${maxHeight}px`;
290
- // Ensure wrapper scrolls
291
- if (!wrapper.style.overflow) {
292
- wrapper.style.overflow = "auto";
293
- }
294
- } else {
295
- wrapper.style.removeProperty("max-height");
296
- }
297
- }, [maxHeight]);
280
+ const tableRef = useScrollContainerHeight({ maxHeight, virtualize });
298
281
 
299
282
  return (
300
283
  <div className={cn(wrapperClassName, "flex flex-col space-y-1")}>
@@ -314,13 +297,14 @@ const DataTableInternal = <TData,>({
314
297
  {showLoadingBar && (
315
298
  <thead className="absolute top-0 left-0 h-[3px] w-1/2 bg-primary animate-slide" />
316
299
  )}
317
- {renderTableHeader(table, Boolean(maxHeight))}
300
+ {renderTableHeader(table, virtualize || Boolean(maxHeight))}
318
301
  <DataTableBody
319
302
  table={table}
320
303
  columns={columns}
321
304
  rowViewerPanelOpen={rowViewerPanelOpen}
322
305
  getRowIndex={getPaginatedRowIndex}
323
306
  viewedRowIdx={viewedRowIdx}
307
+ virtualize={virtualize}
324
308
  />
325
309
  </Table>
326
310
  </div>
@@ -337,15 +321,13 @@ const DataTableInternal = <TData,>({
337
321
  onRowSelectionChange={onRowSelectionChange}
338
322
  table={table}
339
323
  downloadAs={downloadAs}
340
- downloadFileName={downloadFileName}
341
324
  getRowIds={getRowIds}
342
325
  toggleDisplayHeader={toggleDisplayHeader}
343
326
  showChartBuilder={showChartBuilder}
344
327
  showPageSizeSelector={showPageSizeSelector}
345
- showColumnExplorer={showColumnExplorer}
346
- showRowExplorer={showRowExplorer}
328
+ showTableExplorer={showTableExplorer}
347
329
  togglePanel={togglePanel}
348
- isPanelOpen={isPanelOpen}
330
+ isAnyPanelOpen={isAnyPanelOpen}
349
331
  tableLoading={reloading}
350
332
  />
351
333
  </div>
@@ -14,7 +14,6 @@ import { logNever } from "@/utils/assertNever";
14
14
  import { copyToClipboard } from "@/utils/copy";
15
15
  import { downloadByURL } from "@/utils/download";
16
16
  import { prettyError } from "@/utils/errors";
17
- import { Filenames } from "@/utils/filenames";
18
17
  import {
19
18
  jsonParseWithSpecialChar,
20
19
  jsonToMarkdown,
@@ -36,8 +35,9 @@ import { toast } from "../ui/use-toast";
36
35
  type DownloadFormat = "csv" | "json" | "parquet";
37
36
 
38
37
  export interface DownloadActionProps {
39
- downloadAs: (req: { format: DownloadFormat }) => Promise<string>;
40
- downloadFileName?: string;
38
+ downloadAs: (req: {
39
+ format: DownloadFormat;
40
+ }) => Promise<{ url: string; filename: string }>;
41
41
  }
42
42
 
43
43
  const options = [
@@ -99,7 +99,9 @@ export const DownloadAs: React.FC<DownloadActionProps> = (props) => {
99
99
  </Button>
100
100
  );
101
101
 
102
- const getDownloadUrl = (format: DownloadFormat) => {
102
+ const getDownloadResponse = (
103
+ format: DownloadFormat,
104
+ ): Promise<{ url: string; filename: string }> => {
103
105
  return props.downloadAs({ format }).catch((error) => {
104
106
  toast({
105
107
  title: "Failed to download",
@@ -116,26 +118,26 @@ export const DownloadAs: React.FC<DownloadActionProps> = (props) => {
116
118
 
117
119
  switch (format) {
118
120
  case "tsv": {
119
- const downloadUrl = await getDownloadUrl("json");
120
- const json = await fetchJson(downloadUrl);
121
+ const { url } = await getDownloadResponse("json");
122
+ const json = await fetchJson(url);
121
123
  text = jsonToTSV(json, locale);
122
124
  break;
123
125
  }
124
126
  case "json": {
125
- const downloadUrl = await getDownloadUrl("json");
126
- const json = await fetchJson(downloadUrl);
127
+ const { url } = await getDownloadResponse("json");
128
+ const json = await fetchJson(url);
127
129
  text = JSON.stringify(json, null, 2);
128
130
  break;
129
131
  }
130
132
  case "csv": {
131
- const downloadUrl = await getDownloadUrl("csv");
132
- const csv = await fetchText(downloadUrl);
133
+ const { url } = await getDownloadResponse("csv");
134
+ const csv = await fetchText(url);
133
135
  text = csv;
134
136
  break;
135
137
  }
136
138
  case "markdown": {
137
- const downloadUrl = await getDownloadUrl("json");
138
- const json = await fetchJson(downloadUrl);
139
+ const { url } = await getDownloadResponse("json");
140
+ const json = await fetchJson(url);
139
141
  text = jsonToMarkdown(json);
140
142
  break;
141
143
  }
@@ -158,12 +160,10 @@ export const DownloadAs: React.FC<DownloadActionProps> = (props) => {
158
160
  <DropdownMenuItem
159
161
  key={option.label}
160
162
  onSelect={async () => {
161
- const downloadUrl = await getDownloadUrl(option.format);
162
- const ext = option.format;
163
- const rawName = (props.downloadFileName ?? "").trim();
164
- const baseName =
165
- Filenames.withoutExtension(rawName) || "download";
166
- downloadByURL(downloadUrl, `${baseName}.${ext}`);
163
+ const { url, filename } = await getDownloadResponse(
164
+ option.format,
165
+ );
166
+ downloadByURL(url, filename);
167
167
  }}
168
168
  >
169
169
  <option.icon className="mo-dropdown-icon" />
@@ -16,6 +16,7 @@ declare module "@tanstack/react-table" {
16
16
  dtype?: string;
17
17
  dataType?: DataType;
18
18
  filterType?: FilterType;
19
+ minFractionDigits?: number;
19
20
  }
20
21
  }
21
22
 
@@ -2,7 +2,7 @@
2
2
  "use no memo";
3
3
 
4
4
  import type { ColumnPinningState } from "@tanstack/react-table";
5
- import { isEqual } from "lodash-es";
5
+ import { dequal as isEqual } from "dequal";
6
6
  import React from "react";
7
7
  import { useInternalStateWithSync } from "@/hooks/useInternalStateWithSync";
8
8
  import { SELECT_COLUMN_ID } from "../types";
@@ -13,7 +13,10 @@ import { Logger } from "@/utils/Logger";
13
13
 
14
14
  interface PanelOwnershipResult {
15
15
  isPanelOpen: (panelType: PanelType) => boolean;
16
- togglePanel: (panelType: PanelType) => void;
16
+ isAnyPanelOpen: boolean;
17
+ togglePanel: (panelType?: PanelType) => void;
18
+ panelType: PanelType | null;
19
+ setPanelType: (panelType: PanelType) => void;
17
20
  }
18
21
 
19
22
  export function usePanelOwnership(
@@ -55,24 +58,31 @@ export function usePanelOwnership(
55
58
  setPanelOwner(panelId);
56
59
  }
57
60
 
58
- function togglePanel(panelType: PanelType) {
59
- if (isPanelOpen(panelType)) {
61
+ const isAnyPanelOpen = panelOwner === panelId && isContextAwarePanelOpen;
62
+
63
+ function togglePanel(requestedType?: PanelType) {
64
+ if (isAnyPanelOpen) {
60
65
  setPanelOwner(null);
61
66
  setContextAwarePanelOpen(false);
62
67
  } else {
63
68
  setPanelOwner(panelId);
64
- // if cell-aware, we want to focus on this cell when toggled open
65
69
  if (isPanelCellAware && cellId) {
66
70
  focusCell({ cellId });
67
71
  }
68
72
  setContextAwarePanelOpen(true);
69
- setPanelType(panelType);
73
+ // Only set type if explicitly requested and no previous type exists
74
+ if (requestedType && !panelType) {
75
+ setPanelType(requestedType);
76
+ }
70
77
  }
71
78
  }
72
79
 
73
80
  return {
74
81
  isPanelOpen,
82
+ isAnyPanelOpen,
75
83
  togglePanel,
84
+ panelType,
85
+ setPanelType,
76
86
  };
77
87
  }
78
88
 
@@ -0,0 +1,97 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { useEffect, useLayoutEffect, useRef } from "react";
4
+ import {
5
+ DEFAULT_VIRTUAL_ROWS,
6
+ TABLE_HEADER_HEIGHT_PX,
7
+ TABLE_ROW_HEIGHT_PX,
8
+ } from "../types";
9
+
10
+ /**
11
+ * Manages the scroll container's max-height for the data table.
12
+ *
13
+ * Why set max-height on the table's direct wrapper via a ref?
14
+ * - `position: sticky` only works when the sticky element's nearest scrollable
15
+ * ancestor is its immediate container. If max-height/overflow are applied on
16
+ * a grandparent, sticky `<th>` elements will not stick.
17
+ * - The <Table> UI component wraps <table> in a div with overflow-auto. We
18
+ * derive the scroll boundary from this wrapper (tableRef.parentElement) to
19
+ * keep sticky headers working without coupling base UI components to
20
+ * data-table specifics or expanding their API surface.
21
+ *
22
+ * 3 scenarios:
23
+ * - maxHeight applied directly. This always takes preference
24
+ * - Virtualize without maxHeight: observed via ResizeObserver on <thead>
25
+ * so the container reacts to header size changes (charts loading, toggles).
26
+ * - No maxHeight and no virtualization: render everything
27
+ * in practice virtualization kicks in after 100 rows with pagination disabled
28
+ */
29
+ export function useScrollContainerHeight({
30
+ maxHeight,
31
+ virtualize,
32
+ }: {
33
+ maxHeight?: number;
34
+ virtualize: boolean;
35
+ }) {
36
+ const tableRef = useRef<HTMLTableElement | null>(null);
37
+
38
+ // Handle explicit maxHeight and non-virtualize cases synchronously
39
+ // before paint to avoid flickering.
40
+ useLayoutEffect(() => {
41
+ if (!tableRef.current) {
42
+ return;
43
+ }
44
+ const wrapper = tableRef.current.parentElement as HTMLDivElement | null;
45
+ if (!wrapper) {
46
+ return;
47
+ }
48
+ if (maxHeight) {
49
+ wrapper.style.maxHeight = `${maxHeight}px`;
50
+ if (!wrapper.style.overflow) {
51
+ wrapper.style.overflow = "auto";
52
+ }
53
+ } else if (!virtualize) {
54
+ wrapper.style.removeProperty("max-height");
55
+ }
56
+ // When virtualizing without an explicit maxHeight, the ResizeObserver
57
+ // below handles setting maxHeight reactively based on actual header size.
58
+ }, [maxHeight, virtualize]);
59
+
60
+ // When virtualizing without an explicit maxHeight, observe the <thead> for
61
+ // size changes (column summaries, charts loading async, header toggle) and
62
+ // recompute the scroll container height accordingly.
63
+ useEffect(() => {
64
+ if (!virtualize || maxHeight) {
65
+ return;
66
+ }
67
+ const table = tableRef.current;
68
+ if (!table) {
69
+ return;
70
+ }
71
+ const wrapper = table.parentElement as HTMLDivElement | null;
72
+ const thead = table.querySelector("thead");
73
+ if (!wrapper || !thead) {
74
+ return;
75
+ }
76
+ const updateMaxHeight = () => {
77
+ const headerHeight =
78
+ thead.getBoundingClientRect().height || TABLE_HEADER_HEIGHT_PX;
79
+ // Skip virtual spacer rows — they have arbitrary heights for scroll offset.
80
+ const firstDataRow = table.querySelector(
81
+ "tbody tr:not([data-virtual-spacer])",
82
+ );
83
+ const rowHeight =
84
+ firstDataRow?.getBoundingClientRect().height || TABLE_ROW_HEIGHT_PX;
85
+ wrapper.style.maxHeight = `${DEFAULT_VIRTUAL_ROWS * rowHeight + headerHeight}px`;
86
+ };
87
+
88
+ // Set initial height
89
+ updateMaxHeight();
90
+
91
+ const observer = new ResizeObserver(updateMaxHeight);
92
+ observer.observe(thead);
93
+ return () => observer.disconnect();
94
+ }, [virtualize, maxHeight]);
95
+
96
+ return tableRef;
97
+ }
@@ -2,7 +2,6 @@
2
2
  "use no memo";
3
3
 
4
4
  import type { Table } from "@tanstack/react-table";
5
- import { range } from "lodash-es";
6
5
  import {
7
6
  ChevronDown,
8
7
  ChevronLeft,
@@ -22,6 +21,7 @@ import {
22
21
  DropdownMenuTrigger,
23
22
  } from "@/components/ui/dropdown-menu";
24
23
  import { Input } from "@/components/ui/input";
24
+ import { range } from "@/utils/arrays";
25
25
  import { cn } from "@/utils/cn";
26
26
  import { Events } from "@/utils/events";
27
27
  import { prettyNumber } from "@/utils/numbers";