@marimo-team/islands 0.23.2-dev3 → 0.23.2-dev31

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 (509) hide show
  1. package/dist/{ConnectedDataExplorerComponent-P92i6wYx.js → ConnectedDataExplorerComponent-DShCAU06.js} +11 -11
  2. package/dist/{isArrayLikeObject-LXbTYiBa.js → _baseFor-6rr1p10t.js} +43 -215
  3. package/dist/_baseUniq-LxrBY6QK.js +380 -0
  4. package/dist/{any-language-editor-BCvLfvzI.js → any-language-editor-CtNfsWJh.js} +17 -17
  5. package/dist/apl-Y7yFAg6_.js +4 -0
  6. package/dist/{arc-DLJpPF9M.js → arc-CEWBr4jc.js} +2 -2
  7. package/dist/architecture-7HQA4BMR-CATq-AgL.js +6 -0
  8. package/dist/{architectureDiagram-VXUJARFQ-B3YQo9At.js → architectureDiagram-VXUJARFQ-DqqZsWn9.js} +19 -19
  9. package/dist/{arrays-beUWo8RF.js → arrays-Du-jRBAy.js} +1 -1
  10. package/dist/asciiarmor-Bl8b2p0w.js +4 -0
  11. package/dist/asn1-BF6cywqm.js +4 -0
  12. package/dist/{blockDiagram-VD42YOAC-CpQ3TKEN.js → blockDiagram-VD42YOAC-46RbsmrR.js} +53 -53
  13. package/dist/brainfuck-BuqydWe3.js +4 -0
  14. package/dist/{c4Diagram-YG6GDRKO-CZSU4uqU.js → c4Diagram-YG6GDRKO-DQhd8kxL.js} +6 -6
  15. package/dist/{capabilities-BwpUgo4S.js → capabilities-B6ae40r2.js} +1 -1
  16. package/dist/{channel-X3JKk8gE.js → channel-DR5iDSyR.js} +1 -1
  17. package/dist/{chat-ui-CNHw9Osh.js → chat-ui-CVKwVnwD.js} +18 -18
  18. package/dist/{chunk-4BX2VUAB-C2skOn1Z.js → chunk-4BX2VUAB-BChPAwlt.js} +1 -1
  19. package/dist/{chunk-4F5CHEZ2-D5mClyDv.js → chunk-4F5CHEZ2-Bt9N9Ox8.js} +1 -1
  20. package/dist/{chunk-55IACEB6-DRsSqxbU.js → chunk-55IACEB6-wWyiO7Qo.js} +1 -1
  21. package/dist/{chunk-5FQGJX7Z-VIref9gx.js → chunk-5FQGJX7Z-DDhYtPiB.js} +3 -3
  22. package/dist/{chunk-ABZYJK2D-CZYCCtLy.js → chunk-ABZYJK2D--T2L3L-f.js} +3 -3
  23. package/dist/{chunk-ATLVNIR6-DaOzLLgN.js → chunk-ATLVNIR6-CgKfvd-c.js} +2 -2
  24. package/dist/{chunk-B2363JML-Br0eA2T3.js → chunk-B2363JML-Db4oHCZ4.js} +1 -1
  25. package/dist/{chunk-B4BG7PRW-4BjV11Br.js → chunk-B4BG7PRW-J0s6wAkN.js} +7 -7
  26. package/dist/{chunk-CVBHYZKI-BXHgce-x.js → chunk-CVBHYZKI-DqdOZevv.js} +1 -1
  27. package/dist/{chunk-DI55MBZ5-DITY3EyP.js → chunk-DI55MBZ5-33PvMnN-.js} +6 -6
  28. package/dist/{chunk-EXTU4WIE-jUPSAk3i.js → chunk-EXTU4WIE-BspiJIuJ.js} +2 -2
  29. package/dist/{chunk-FMBD7UC4-BjIaI-XO.js → chunk-FMBD7UC4-WPL5C7Yr.js} +1 -1
  30. package/dist/{chunk-FRFDVMJY-DnEvEFRR.js → chunk-FRFDVMJY-DGahYT1S.js} +1 -1
  31. package/dist/{chunk-HN2XXSSU-DAhNp1ig.js → chunk-HN2XXSSU-GC9oeSst.js} +1 -1
  32. package/dist/{chunk-JA3XYJ7Z-BcPEfxk_.js → chunk-JA3XYJ7Z-DCohPV-J.js} +3 -3
  33. package/dist/{chunk-JZLCHNYA-2bnLL3xL.js → chunk-JZLCHNYA-B5kMsVU0.js} +6 -6
  34. package/dist/{chunk-MI3HLSF2-AKwFNP3m.js → chunk-MI3HLSF2-CAUClZTk.js} +1 -1
  35. package/dist/{chunk-N4CR4FBY-CpZSuGSU.js → chunk-N4CR4FBY-DJggWRjm.js} +7 -7
  36. package/dist/{chunk-PL6DKKU2-DnId6G-x.js → chunk-PL6DKKU2-CoF4omiN.js} +1 -1
  37. package/dist/{chunk-QN33PNHL-B9p5ojHB.js → chunk-QN33PNHL-B1NgkDCq.js} +2 -2
  38. package/dist/{chunk-QXUST7PY-Ch6F5Obl.js → chunk-QXUST7PY-CpxfBz2U.js} +10 -10
  39. package/dist/{chunk-QZHKN3VN-BK9tlbfw.js → chunk-QZHKN3VN-cTJMhkeY.js} +1 -1
  40. package/dist/{chunk-S3R3BYOJ-B0UOFJwq.js → chunk-S3R3BYOJ-DYg3yWKI.js} +8 -8
  41. package/dist/{chunk-SJTYNZTY-BsBZnJUj.js → chunk-SJTYNZTY-dW9OU4qd.js} +1 -1
  42. package/dist/{chunk-TCCFYFTB-Clbl-fTg.js → chunk-TCCFYFTB-vYPbT9fw.js} +1552 -345
  43. package/dist/{chunk-TQ3KTPDO-CFkSQ30e.js → chunk-TQ3KTPDO-Dykudlbk.js} +1 -1
  44. package/dist/{chunk-TZMSLE5B-D45397J2.js → chunk-TZMSLE5B-JAnY0w_r.js} +3 -3
  45. package/dist/{chunk-UMXZTB3W-D-A834Bq.js → chunk-UMXZTB3W-BVL6vS7M.js} +1 -1
  46. package/dist/classDiagram-2ON5EDUG-Be541Bqx.js +30 -0
  47. package/dist/classDiagram-v2-WZHVMYZB-CFtNZ66L.js +30 -0
  48. package/dist/{clike-B90WKs4D.js → clike-D8Yzpo0X.js} +1 -1
  49. package/dist/clojure-CAHAWK5H.js +4 -0
  50. package/dist/{clone-DZFQCtFJ.js → clone-0b7yW5QV.js} +1 -1
  51. package/dist/cmake-BogDc4GF.js +4 -0
  52. package/dist/cobol-DRnpeU4u.js +4 -0
  53. package/dist/{code-block-37QAKDTI-FQEoMOU1.js → code-block-37QAKDTI-DP_hitFg.js} +1 -1
  54. package/dist/coffeescript-9MgX7RN8.js +4 -0
  55. package/dist/commonlisp-CVz2KONN.js +4 -0
  56. package/dist/{constants-CvyfaCvs.js → constants-C2U1Bmny.js} +4 -4
  57. package/dist/{cose-bilkent-S5V4N54A-DvCk1aXi.js → cose-bilkent-S5V4N54A-CFYo67PX.js} +2 -2
  58. package/dist/crystal-td8mwLG5.js +4 -0
  59. package/dist/css-BK451dBn.js +4 -0
  60. package/dist/cypher-DuNPR6Ie.js +4 -0
  61. package/dist/d-DL6oP_-2.js +4 -0
  62. package/dist/{dagre-6UL2VRFP-OMItEBnY.js → dagre-6UL2VRFP-On1-AgLm.js} +102 -103
  63. package/dist/{dagre-QVd-lCXU.js → dagre-Bc6NAu6c.js} +105 -39
  64. package/dist/{data-grid-overlay-editor-C_sKPpLu.js → data-grid-overlay-editor-B1mPZ5v3.js} +2 -2
  65. package/dist/{diagram-PSM6KHXK-CkKbohWI.js → diagram-PSM6KHXK-B2x0d9iz.js} +22 -22
  66. package/dist/{diagram-QEK2KX5R-DjUMpVcx.js → diagram-QEK2KX5R-C6yZT5O0.js} +17 -17
  67. package/dist/{diagram-S2PKOQOG-b-c0d-wZ.js → diagram-S2PKOQOG-DDohjXNG.js} +17 -17
  68. package/dist/diff-D9CplOBj.js +4 -0
  69. package/dist/{dist-Doy0mQDg.js → dist-4BuWWZtg.js} +2 -2
  70. package/dist/{dist-DlSUOIm9.js → dist-5VO3ibto.js} +1 -1
  71. package/dist/dist-B9hNC-E9.js +5 -0
  72. package/dist/{dist-DJKubHDd.js → dist-BH67T-KO.js} +1 -1
  73. package/dist/{dist-CNF0QBLR.js → dist-BI11IEaj.js} +1 -1
  74. package/dist/dist-BK1_hXFC.js +5 -0
  75. package/dist/{dist-ej6AQKaS.js → dist-BKGmoFSu.js} +1 -1
  76. package/dist/{dist-CTwGwcQ8.js → dist-BKKbDTix.js} +2 -2
  77. package/dist/dist-BSGRbj-N.js +8 -0
  78. package/dist/{dist-VqF3W_ue.js → dist-BVdq25Pp.js} +2 -2
  79. package/dist/{dist-BvhGByxL.js → dist-BWmwgyyt.js} +4 -4
  80. package/dist/{dist-DUFd1bhm.js → dist-BmkybMad.js} +1 -1
  81. package/dist/{dist-DbnBiLNH.js → dist-Bo8Q2NZ6.js} +3 -3
  82. package/dist/{dist-DJ9F1eHs.js → dist-BrRkENbS.js} +2 -2
  83. package/dist/{dist-DFK94vuS.js → dist-C-Mi2f2L.js} +2 -2
  84. package/dist/dist-C5i3bD88.js +5 -0
  85. package/dist/dist-C9mOdSQc.js +5 -0
  86. package/dist/{dist--6TSlp8H.js → dist-CM55yvVz.js} +1 -1
  87. package/dist/{dist-CIB8w0Fl.js → dist-CWin4kuc.js} +2 -2
  88. package/dist/{dist-Ci0CXEFt.js → dist-Cf1__Ezo.js} +1 -1
  89. package/dist/{dist-CcMfr7jD.js → dist-ChYkaQZ9.js} +1 -1
  90. package/dist/{dist-CFKdzOIu.js → dist-Cil0kZOw.js} +2 -2
  91. package/dist/{dist-LhQNUe5A.js → dist-CjFd_clf.js} +3 -3
  92. package/dist/{dist-DD_cYHOl.js → dist-CtliEIOC.js} +2 -2
  93. package/dist/{dist-B43sbpd0.js → dist-CuT7pAjI.js} +3 -3
  94. package/dist/dist-DAmwszSZ.js +8 -0
  95. package/dist/dist-DGgzl61R.js +5 -0
  96. package/dist/{dist-DLafRu9s.js → dist-DH-coTYX.js} +2 -2
  97. package/dist/{dist-CxZvoNao.js → dist-DPAK3Dpl.js} +44 -31
  98. package/dist/{dist-DGNtjMZu.js → dist-DViRvB3t.js} +1 -1
  99. package/dist/{dist-m9tsXsFf.js → dist-DcB6g7XM.js} +2 -2
  100. package/dist/dist-DnGRs0FR.js +5 -0
  101. package/dist/dist-GBXFGpIo.js +8 -0
  102. package/dist/dist-H433csIN.js +8 -0
  103. package/dist/{dist-DpkJHKB8.js → dist-HNoCppvN.js} +2 -2
  104. package/dist/{dist-Bfp1XXWt.js → dist-I9ZUr7P2.js} +5 -5
  105. package/dist/dist-ItCg4aSC.js +6 -0
  106. package/dist/dist-Mi3Li5U2.js +6 -0
  107. package/dist/{dist-BrxqmS9Q.js → dist-QzlYe8XT.js} +4 -4
  108. package/dist/{dist-BjDuO5JW.js → dist-ZJ4KZJv-.js} +1 -1
  109. package/dist/dist-_-4VPi_T.js +5 -0
  110. package/dist/{dist-tGk0aZ--.js → dist-qpWXd9bI.js} +2 -2
  111. package/dist/{dist-DAfcmt-d.js → dist-rdefyFzZ.js} +2 -2
  112. package/dist/dist-tIur4wUM.js +5 -0
  113. package/dist/{dist-C4bq5Ioy.js → dist-vkjbtmSV.js} +2 -2
  114. package/dist/{dockerfile-DfXhjEUG.js → dockerfile-m9DOSpI5.js} +1 -1
  115. package/dist/dtd-Ce1c54UO.js +4 -0
  116. package/dist/dylan-B43wjIwg.js +4 -0
  117. package/dist/ecl-DK-fZmir.js +4 -0
  118. package/dist/eiffel-CNuvvPqD.js +4 -0
  119. package/dist/elm-DZEkBjgQ.js +4 -0
  120. package/dist/{erDiagram-Q2GNP2WA-CDhLaOZ1.js → erDiagram-Q2GNP2WA-C7-L36q5.js} +15 -15
  121. package/dist/erlang-Dw4PDZV_.js +4 -0
  122. package/dist/{esm-CDHI9cuO.js → esm-DGjaY9EX.js} +2 -2
  123. package/dist/{esm-CD1iby2n.js → esm-i3cb1Eej.js} +105 -105
  124. package/dist/factor-C9JRv63g.js +4 -0
  125. package/dist/{factor--4HHM8Rw.js → factor-Nva0iSXt.js} +1 -1
  126. package/dist/flatten-BOUk2Lcs.js +8 -0
  127. package/dist/{flowDiagram-NV44I4VS-BDi4O4CL.js → flowDiagram-NV44I4VS-CJW83FSj.js} +17 -17
  128. package/dist/forth-CKhoqn4e.js +4 -0
  129. package/dist/fortran-Do51bToK.js +4 -0
  130. package/dist/{ganttDiagram-JELNMOA3-BpZE6kVp.js → ganttDiagram-JELNMOA3-CwBjBQUx.js} +10 -10
  131. package/dist/gas-BZfL3Uwh.js +4 -0
  132. package/dist/gherkin-BwQh4ehw.js +4 -0
  133. package/dist/{gitGraph-G5XIXVHT-B_c6xFJv.js → gitGraph-G5XIXVHT-DTpIjETB.js} +3 -3
  134. package/dist/{gitGraphDiagram-V2S2FVAM-iQnXzbPM.js → gitGraphDiagram-V2S2FVAM-CmTxe2C4.js} +17 -17
  135. package/dist/{glide-data-editor-BFqEJGJW.js → glide-data-editor-BaAX1uv-.js} +8 -8
  136. package/dist/graphlib-DTP9cqCT.js +359 -0
  137. package/dist/groovy-CG5kCGiv.js +4 -0
  138. package/dist/{hasIn-DnfJcYpY.js → hasIn-MXhEnf0q.js} +3 -3
  139. package/dist/haskell-BKii9uTg.js +4 -0
  140. package/dist/haxe-Bsz30J8x.js +5 -0
  141. package/dist/idl-BlxgaPKj.js +4 -0
  142. package/dist/{info-VBDWY6EO-BTyzxmhr.js → info-VBDWY6EO-DcCsz2w_.js} +3 -3
  143. package/dist/infoDiagram-HS3SLOUP-Dz0ivKcB.js +30 -0
  144. package/dist/{input-CSVEkmaZ.js → input-L-W-RdiE.js} +4 -4
  145. package/dist/{isEmpty-B7FX9wKt.js → isEmpty-BkHRaD4A.js} +9 -9
  146. package/dist/{isSymbol-DCbjQG_U.js → isSymbol-DjQk-23F.js} +1 -1
  147. package/dist/javascript-SNhUvTcB.js +4 -0
  148. package/dist/{journeyDiagram-XKPGCS4Q-ClPC94aN.js → journeyDiagram-XKPGCS4Q-8XpEA5Ko.js} +7 -7
  149. package/dist/julia-CGZzaDyk.js +4 -0
  150. package/dist/{kanban-definition-3W4ZIXB7-DHEAKdZt.js → kanban-definition-3W4ZIXB7-C-sC72Q7.js} +12 -12
  151. package/dist/{katex-CkLtKXwv.js → katex-Ckd8lBne.js} +1 -1
  152. package/dist/{label-BebYlsDV.js → label-DAH3oYXB.js} +1 -1
  153. package/dist/{line-PAEmCpyD.js → line-LK_5q2B9.js} +3 -3
  154. package/dist/{linear-v57w-fIs.js → linear-CJ6ctpF3.js} +4 -4
  155. package/dist/livescript-Cj6cX-Ys.js +4 -0
  156. package/dist/{loader-ZFbGsMN1.js → loader-D9ktSJS7.js} +1 -1
  157. package/dist/lua-BcVHrD8f.js +4 -0
  158. package/dist/main.js +456 -361
  159. package/dist/mathematica-DLY8ZGoJ.js +4 -0
  160. package/dist/mbox-BNTsMWS5.js +4 -0
  161. package/dist/{memoize-CSTI9eOX.js → memoize-DxdGWSJ6.js} +1 -1
  162. package/dist/merge-BEePrO2O.js +222 -0
  163. package/dist/{mermaid-4DMBBIKO-BjtqcdX4.js → mermaid-4DMBBIKO-DRXAUrhi.js} +1 -1
  164. package/dist/{mermaid-BbhZNQeB.js → mermaid-DBH43AFh.js} +45 -45
  165. package/dist/{mermaid-parser.core-ntCgyx0x.js → mermaid-parser.core-Bn1MCv1H.js} +8 -8
  166. package/dist/{mhchem-BuY5LDSq.js → mhchem-DAXq6Zll.js} +1 -1
  167. package/dist/min-RKgAiXUl.js +38 -0
  168. package/dist/{mindmap-definition-VGOIOE7T-CxEUZZvY.js → mindmap-definition-VGOIOE7T-f-YOgrj9.js} +14 -14
  169. package/dist/mirc-oyeOBir2.js +4 -0
  170. package/dist/mllike-ByxznKQw.js +6 -0
  171. package/dist/modelica-DNLhoyD8.js +4 -0
  172. package/dist/mscgen-DkZltsli.js +6 -0
  173. package/dist/mumps-TTiQB1xv.js +4 -0
  174. package/dist/now-BUO7mCs3.js +31 -0
  175. package/dist/{nsis-B6EN9LWI.js → nsis-DgKbDAVQ.js} +1 -1
  176. package/dist/nsis-RT1O1Ph8.js +4 -0
  177. package/dist/ntriples-CxsCiZ7Z.js +4 -0
  178. package/dist/{number-overlay-editor-B02-t7Ar.js → number-overlay-editor-BbN3lvDI.js} +1 -1
  179. package/dist/octave-CkLh5tpW.js +4 -0
  180. package/dist/{once-C_TIu-kR.js → once-CZno0h-b.js} +1 -1
  181. package/dist/{ordinal-D7fa8Sey.js → ordinal-COPPjmMz.js} +1 -1
  182. package/dist/oz-yI7U9eVH.js +4 -0
  183. package/dist/{packet-DYOGHKS2-BhvnpoGi.js → packet-DYOGHKS2-BpYOwBIl.js} +3 -3
  184. package/dist/pascal-CQK8sfDe.js +4 -0
  185. package/dist/perl-BEG8-kZl.js +4 -0
  186. package/dist/pick-M816gWrv.js +43 -0
  187. package/dist/{pie-VRWISCQL-dILuA3iG.js → pie-VRWISCQL-narEdAtC.js} +3 -3
  188. package/dist/{pieDiagram-ADFJNKIX-U3LrUqAS.js → pieDiagram-ADFJNKIX-e7V1zvfH.js} +22 -22
  189. package/dist/pig-DLLCqQaR.js +4 -0
  190. package/dist/powershell-CtjMkVO_.js +4 -0
  191. package/dist/{precisionRound-CGLoV26P.js → precisionRound-Duzbr5ur.js} +1 -1
  192. package/dist/{process-output-Bekznt_B.js → process-output-BX1UfKIX.js} +2298 -2284
  193. package/dist/properties-Domeb57z.js +4 -0
  194. package/dist/protobuf-0yk85TV6.js +4 -0
  195. package/dist/pug-B-BiNkM-.js +4 -0
  196. package/dist/{pug-xrm7jQ2R.js → pug-CTpLcc1b.js} +1 -1
  197. package/dist/puppet-C0N4vevK.js +4 -0
  198. package/dist/python-BZFa8G3C.js +4 -0
  199. package/dist/q-gcj7dgJv.js +4 -0
  200. package/dist/{quadrantDiagram-AYHSOK5B-BVWuq-3R.js → quadrantDiagram-AYHSOK5B-DbJIgiah.js} +5 -5
  201. package/dist/r-DavzTuPU.js +4 -0
  202. package/dist/{radar-ZZBFDIW7-DwFrOJDj.js → radar-ZZBFDIW7-CZ6uVl9x.js} +3 -3
  203. package/dist/react-vega-BFLRzgl7.js +9 -0
  204. package/dist/{react-vega-DBwal82H.js → react-vega-Ov9UeJeF.js} +18 -18
  205. package/dist/{requirementDiagram-UZGBJVZJ-D0zpQnKC.js → requirementDiagram-UZGBJVZJ-DDTA2gwv.js} +14 -14
  206. package/dist/rpm-bPj31ya8.js +5 -0
  207. package/dist/ruby-3UzzijjE.js +4 -0
  208. package/dist/{sankeyDiagram-TZEHDZUN-CExy1joT.js → sankeyDiagram-TZEHDZUN-TOGeZF4f.js} +5 -5
  209. package/dist/sas-D9upmCP9.js +4 -0
  210. package/dist/scheme-DqWYzIFR.js +4 -0
  211. package/dist/{sequenceDiagram-WL72ISMW-D1BJxLjH.js → sequenceDiagram-WL72ISMW-XZ-vAxdG.js} +8 -8
  212. package/dist/shell-w63nkNmU.js +4 -0
  213. package/dist/sieve-Dz_ISrl6.js +4 -0
  214. package/dist/{slides-component-DLxprlqo.js → slides-component-B9NXzezL.js} +1 -1
  215. package/dist/smalltalk-BXZ14pkr.js +4 -0
  216. package/dist/sparql-Boyc0wkb.js +4 -0
  217. package/dist/{spec-3EPbPQZH.js → spec-Budha9Vn.js} +2 -2
  218. package/dist/{src-DbP20yFZ.js → src-szye8OCw.js} +1 -1
  219. package/dist/{stateDiagram-FKZM4ZOC-B1S8jGMn.js → stateDiagram-FKZM4ZOC-B72-jYlX.js} +19 -19
  220. package/dist/stateDiagram-v2-4FDKWEC3-Up7GUIPl.js +29 -0
  221. package/dist/{step-qd10PbTJ.js → step-1PmBKr2y.js} +1 -1
  222. package/dist/stex-CZyTRGVB.js +4 -0
  223. package/dist/stylus-m9L_f1X1.js +4 -0
  224. package/dist/swift-C4TGn99K.js +4 -0
  225. package/dist/tcl-D_L0cfYZ.js +4 -0
  226. package/dist/textile-BAofYdKN.js +4 -0
  227. package/dist/{time-Bdnxi22U.js → time-B8tcX_hU.js} +4 -4
  228. package/dist/{timeline-definition-IT6M3QCI-BDT9JAmn.js → timeline-definition-IT6M3QCI-CStBX2Oa.js} +4 -4
  229. package/dist/{toDate-B1AzlBoW.js → toDate-Cqrm-UC4.js} +2 -2
  230. package/dist/toml-DCDKACLL.js +4 -0
  231. package/dist/{treemap-GDKQZRPO-bx2ngsgN.js → treemap-GDKQZRPO-BxK9LkTz.js} +3 -3
  232. package/dist/troff-JHOU2VZK.js +4 -0
  233. package/dist/ttcn-Cxhng3qq.js +4 -0
  234. package/dist/ttcn-cfg-DJgUIu5n.js +4 -0
  235. package/dist/turtle-DKYkKZjV.js +4 -0
  236. package/dist/{types-pwjdK009.js → types-DEY2byth.js} +1 -1
  237. package/dist/{useAsyncData-BL98MPIy.js → useAsyncData-B1v_9k4L.js} +2 -2
  238. package/dist/{useDeepCompareMemoize-CsyOnnjc.js → useDeepCompareMemoize-ToNUMW7X.js} +3 -3
  239. package/dist/{useIframeCapabilities-CsTUYYj7.js → useIframeCapabilities-WKJHoHW-.js} +1 -1
  240. package/dist/{useLifecycle-DrGGIsgp.js → useLifecycle-DdNGMIjn.js} +1 -1
  241. package/dist/{useTheme-CzwDokKe.js → useTheme-CfzcSQtz.js} +1 -1
  242. package/dist/vb-C9rpn9hN.js +4 -0
  243. package/dist/vbscript-BQ7rxQU0.js +4 -0
  244. package/dist/{vega-component-KBJXEDZz.js → vega-component-CQ88A9vN.js} +11 -11
  245. package/dist/{vega-loader.browser-DqEcFOPD.js → vega-loader.browser-hMqVC9bf.js} +3 -3
  246. package/dist/velocity-C8WXmzLz.js +4 -0
  247. package/dist/verilog-BUXJEyEq.js +4 -0
  248. package/dist/vhdl-C18YIXfF.js +4 -0
  249. package/dist/webidl-D97EKzDx.js +4 -0
  250. package/dist/xquery-BZM6yzG2.js +4 -0
  251. package/dist/{xychartDiagram-PRI3JC2R-CuAZiqHS.js → xychartDiagram-PRI3JC2R-DCtrGSHF.js} +13 -13
  252. package/dist/yacas-CXKck-Ok.js +4 -0
  253. package/dist/z80-BbF6ykWc.js +4 -0
  254. package/package.json +2 -2
  255. package/src/components/data-table/TableBottomBar.tsx +5 -1
  256. package/src/components/data-table/__tests__/filters.test.ts +304 -0
  257. package/src/components/data-table/__tests__/pagination.test.tsx +46 -132
  258. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
  259. package/src/components/data-table/filters.ts +87 -33
  260. package/src/components/data-table/pagination.tsx +189 -76
  261. package/src/components/data-table/types.ts +0 -4
  262. package/src/components/editor/Output.tsx +1 -1
  263. package/src/components/editor/actions/useNotebookActions.tsx +12 -0
  264. package/src/components/editor/cell/code/cell-editor.tsx +1 -0
  265. package/src/core/cells/__tests__/apply-transaction.test.ts +42 -0
  266. package/src/core/cells/__tests__/logs.test.ts +101 -0
  267. package/src/core/cells/logs.ts +9 -1
  268. package/src/core/codemirror/__tests__/__snapshots__/setup.test.ts.snap +4 -14
  269. package/src/core/codemirror/cells/extensions.ts +0 -4
  270. package/src/core/codemirror/keymaps/keymaps.ts +69 -2
  271. package/src/core/codemirror/language/languages/python.ts +9 -9
  272. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +8 -1
  273. package/src/core/codemirror/lsp/federated-lsp.ts +2 -2
  274. package/src/core/codemirror/lsp/notebook-lsp.ts +2 -2
  275. package/src/core/codemirror/lsp/utils.ts +21 -6
  276. package/src/core/constants.ts +1 -0
  277. package/src/plugins/impl/DataTablePlugin.tsx +7 -20
  278. package/src/plugins/impl/TabsPlugin.tsx +18 -12
  279. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +4 -4
  280. package/src/plugins/impl/data-frames/schema.ts +41 -9
  281. package/src/plugins/impl/data-frames/utils/operators.ts +2 -0
  282. package/src/plugins/impl/matplotlib/matplotlib-renderer.ts +16 -0
  283. package/dist/_basePickBy-Sow3pJjS.js +0 -41
  284. package/dist/_baseUniq-C87CckHL.js +0 -518
  285. package/dist/apl-C1bki_dE.js +0 -4
  286. package/dist/architecture-7HQA4BMR-BHdkAMvZ.js +0 -6
  287. package/dist/asciiarmor-BdlkCCRr.js +0 -4
  288. package/dist/asn1-CvE30hox.js +0 -4
  289. package/dist/brainfuck-BalwWy1a.js +0 -4
  290. package/dist/classDiagram-2ON5EDUG-C8-zE3Zv.js +0 -30
  291. package/dist/classDiagram-v2-WZHVMYZB-DrmbGANl.js +0 -30
  292. package/dist/clojure-CUC2I1hM.js +0 -4
  293. package/dist/cmake-8PcMxXnB.js +0 -4
  294. package/dist/cobol-DkkkDz5v.js +0 -4
  295. package/dist/coffeescript-CCupxOZf.js +0 -4
  296. package/dist/commonlisp-DhUfGX6b.js +0 -4
  297. package/dist/crystal-DSaw6rFQ.js +0 -4
  298. package/dist/css-D4QDewkG.js +0 -4
  299. package/dist/cypher-CrYVqw_F.js +0 -4
  300. package/dist/d-Cr3H3pPx.js +0 -4
  301. package/dist/diff-ODiZJGls.js +0 -4
  302. package/dist/dist-7K5doRvB.js +0 -6
  303. package/dist/dist-B6I_A2-E.js +0 -8
  304. package/dist/dist-BEQsmaZY.js +0 -5
  305. package/dist/dist-BasY2RHp.js +0 -8
  306. package/dist/dist-Bosc00dY.js +0 -5
  307. package/dist/dist-CQMZOn-_.js +0 -8
  308. package/dist/dist-CViQhWZ8.js +0 -5
  309. package/dist/dist-Cz6rLfwY.js +0 -5
  310. package/dist/dist-D8eq8st3.js +0 -6
  311. package/dist/dist-DM1UDXdl.js +0 -5
  312. package/dist/dist-DNrtWPgS.js +0 -5
  313. package/dist/dist-V7q2qnpA.js +0 -5
  314. package/dist/dist-a5_hPgu2.js +0 -8
  315. package/dist/dist-uVyZcV1-.js +0 -5
  316. package/dist/dtd-C-t2Rk7F.js +0 -4
  317. package/dist/dylan-B4ctBLGp.js +0 -4
  318. package/dist/ecl-DqWfymni.js +0 -4
  319. package/dist/eiffel-DjBKKAr7.js +0 -4
  320. package/dist/elm--fxeC0FV.js +0 -4
  321. package/dist/erlang-CaKXCX6H.js +0 -4
  322. package/dist/factor-DlLO5EFS.js +0 -4
  323. package/dist/forth-rOO6LVj_.js +0 -4
  324. package/dist/fortran-CUg15VGR.js +0 -4
  325. package/dist/gas-BMRJspiW.js +0 -4
  326. package/dist/gherkin-DRxzijZU.js +0 -4
  327. package/dist/graphlib-BV1_gi0C.js +0 -226
  328. package/dist/groovy-BmrQ8pUP.js +0 -4
  329. package/dist/haskell-BuaYfKOz.js +0 -4
  330. package/dist/haxe-DcH9eA0a.js +0 -5
  331. package/dist/idl-DGlcm4Ls.js +0 -4
  332. package/dist/infoDiagram-HS3SLOUP-OYrX6uO3.js +0 -30
  333. package/dist/javascript-CeTk7rzr.js +0 -4
  334. package/dist/julia-BoP_q1gm.js +0 -4
  335. package/dist/livescript-B7IMN-ba.js +0 -4
  336. package/dist/lua-q1InavKb.js +0 -4
  337. package/dist/mathematica-DvR8-_EI.js +0 -4
  338. package/dist/mbox-7h5MNBS_.js +0 -4
  339. package/dist/merge-CVhG7q_o.js +0 -51
  340. package/dist/min-Ds3gG0Ff.js +0 -96
  341. package/dist/mirc-D-XM8A5c.js +0 -4
  342. package/dist/mllike-BQGkkbmf.js +0 -6
  343. package/dist/modelica-D_yRj_WU.js +0 -4
  344. package/dist/mscgen-B-rltAjp.js +0 -6
  345. package/dist/mumps-2kh8TU2b.js +0 -4
  346. package/dist/now-nrrrOr01.js +0 -7
  347. package/dist/nsis-CtusEqwb.js +0 -4
  348. package/dist/ntriples-BdAXw6zV.js +0 -4
  349. package/dist/octave-CsNFmVp5.js +0 -4
  350. package/dist/oz-odIXCrKd.js +0 -4
  351. package/dist/pascal-B9Mfk3Fo.js +0 -4
  352. package/dist/perl-C48inLcz.js +0 -4
  353. package/dist/pig-uwRtAssU.js +0 -4
  354. package/dist/powershell-CXqlca-i.js +0 -4
  355. package/dist/properties-D6Zu1rpK.js +0 -4
  356. package/dist/protobuf-BlNNWZaR.js +0 -4
  357. package/dist/pug-DytcK7bv.js +0 -4
  358. package/dist/puppet-lJ8Ok3iY.js +0 -4
  359. package/dist/python-cMaF7kUp.js +0 -4
  360. package/dist/q-Dgt2HYQh.js +0 -4
  361. package/dist/r-Bm4S4awf.js +0 -4
  362. package/dist/range-fJeId9Ri.js +0 -30
  363. package/dist/react-vega-BkjdpVsR.js +0 -9
  364. package/dist/rpm-_8LbzMVc.js +0 -5
  365. package/dist/ruby-Cr8IJ5VZ.js +0 -4
  366. package/dist/sas-CFcSfo2_.js +0 -4
  367. package/dist/scheme-N4XRoKgc.js +0 -4
  368. package/dist/shell-B4L7f_ds.js +0 -4
  369. package/dist/sieve-UI6J3Gm0.js +0 -4
  370. package/dist/smalltalk-BuaPZAZU.js +0 -4
  371. package/dist/sparql-1rKrq463.js +0 -4
  372. package/dist/stateDiagram-v2-4FDKWEC3-BH5ozUbc.js +0 -29
  373. package/dist/stex-CQDv3aS8.js +0 -4
  374. package/dist/stylus-DvSovJEP.js +0 -4
  375. package/dist/swift-D-_E7Yyb.js +0 -4
  376. package/dist/tcl-Di5sAVHN.js +0 -4
  377. package/dist/textile-Benwt66z.js +0 -4
  378. package/dist/toNumber-55tjPCWr.js +0 -28
  379. package/dist/toml-CeOvPOkY.js +0 -4
  380. package/dist/troff-DJN9hfgu.js +0 -4
  381. package/dist/ttcn-DQW2Psjf.js +0 -4
  382. package/dist/ttcn-cfg-zFG_MNpg.js +0 -4
  383. package/dist/turtle-DHRyNlSc.js +0 -4
  384. package/dist/vb-CXWH9DD-.js +0 -4
  385. package/dist/vbscript-qr8qVck5.js +0 -4
  386. package/dist/velocity-C_9pUJRx.js +0 -4
  387. package/dist/verilog-DxBstgBa.js +0 -4
  388. package/dist/vhdl-odUxAbE6.js +0 -4
  389. package/dist/webidl-Dfn5Rku4.js +0 -4
  390. package/dist/xquery-CrJs6SXr.js +0 -4
  391. package/dist/yacas-B-uDDLZe.js +0 -4
  392. package/dist/z80-51gxgAXE.js +0 -4
  393. /package/dist/{ImageComparisonComponent-HF4AY8_n.js → ImageComparisonComponent-BV1jHxOP.js} +0 -0
  394. /package/dist/{Plot-CK0oVgQL.js → Plot-DsEy3ro_.js} +0 -0
  395. /package/dist/{apl-Oc3bL26_.js → apl-BqjtmlWW.js} +0 -0
  396. /package/dist/{array-ByIS7m3B.js → array-D7wW5QoO.js} +0 -0
  397. /package/dist/{asciiarmor-DTbPh2VI.js → asciiarmor-D9C9bbeV.js} +0 -0
  398. /package/dist/{asn1-CGhwu1Ri.js → asn1-D_zR1ubK.js} +0 -0
  399. /package/dist/{asterisk-BApaB_8m.js → asterisk-B0dLLA8Z.js} +0 -0
  400. /package/dist/{brainfuck-CA0L8lRq.js → brainfuck-79SC7EYA.js} +0 -0
  401. /package/dist/{chunk-DR5Q36YT-C40cYcy5.js → chunk-DR5Q36YT-BxPcQ21t.js} +0 -0
  402. /package/dist/{click-outside-container-D3t6KDni.js → click-outside-container-BHqXZnKi.js} +0 -0
  403. /package/dist/{clike-CEtUBPHD.js → clike-DFDX2jWq.js} +0 -0
  404. /package/dist/{clojure-BszjvdGo.js → clojure-Bb3Od9By.js} +0 -0
  405. /package/dist/{cmake-B2Gvps8b.js → cmake-DYGUYEtU.js} +0 -0
  406. /package/dist/{cobol-DuMch8nn.js → cobol-CcWmcAFT.js} +0 -0
  407. /package/dist/{coffeescript-L9aKXVsJ.js → coffeescript-BVa1qoL6.js} +0 -0
  408. /package/dist/{colors-IJ-2cn2o.js → colors-6DRQ0kEF.js} +0 -0
  409. /package/dist/{common-keywords-CsU75Ked.js → common-keywords-Bz8dNfWa.js} +0 -0
  410. /package/dist/{commonlisp-CrtdssxB.js → commonlisp-zi51jgUH.js} +0 -0
  411. /package/dist/{crystal-vvNY0LpY.js → crystal-QjpegJHM.js} +0 -0
  412. /package/dist/{css-B1GdzqT1.js → css-B_GfJtcK.js} +0 -0
  413. /package/dist/{cypher-BtZvV7bW.js → cypher-BVuYJpGf.js} +0 -0
  414. /package/dist/{cytoscape.esm-CRfNlsPy.js → cytoscape.esm-BYAuS6uS.js} +0 -0
  415. /package/dist/{d-B0UN3V-Z.js → d-BT97RiQI.js} +0 -0
  416. /package/dist/{defaultLocale-Bxoo2-30.js → defaultLocale-B_A76Zpk.js} +0 -0
  417. /package/dist/{defaultLocale-qS7DaAmi.js → defaultLocale-DjFHq3Xk.js} +0 -0
  418. /package/dist/{diff-DOpgjj1W.js → diff-CHd93v7L.js} +0 -0
  419. /package/dist/{dist-BjWd_Ei9.js → dist-CqR8FBcH.js} +0 -0
  420. /package/dist/{dtd-Ctnjxrle.js → dtd-akLFIRuZ.js} +0 -0
  421. /package/dist/{duckdb-keywords-DjrZdCO2.js → duckdb-keywords-CQAIHMbC.js} +0 -0
  422. /package/dist/{dylan-DFXkoaZy.js → dylan-Iy-rgNOc.js} +0 -0
  423. /package/dist/{ebnf-XJCIl_em.js → ebnf-CTkZpZPT.js} +0 -0
  424. /package/dist/{ecl-C1NExZip.js → ecl-BhUXC_aR.js} +0 -0
  425. /package/dist/{eiffel-uXVGgleg.js → eiffel-DIRAlWPD.js} +0 -0
  426. /package/dist/{elm-CBOFnnib.js → elm-BDgVzkJ4.js} +0 -0
  427. /package/dist/{emotion-is-prop-valid.esm-CJVjyntJ.js → emotion-is-prop-valid.esm-DdzHpbbG.js} +0 -0
  428. /package/dist/{erlang-DMnrT8XK.js → erlang-Djcs_NwB.js} +0 -0
  429. /package/dist/{esm-D4gzqVRq.js → esm-BRwAuUu2.js} +0 -0
  430. /package/dist/{fcl-fh4Mj0bc.js → fcl-OXoT8w4k.js} +0 -0
  431. /package/dist/{forth-DDpxS4nw.js → forth-c_NTahPv.js} +0 -0
  432. /package/dist/{fortran-B6uYqQMz.js → fortran-Bpxt27dn.js} +0 -0
  433. /package/dist/{gas-BKnWzuFz.js → gas-RVBts6ZK.js} +0 -0
  434. /package/dist/{gherkin-pBt0wT4X.js → gherkin-Hf6PTauh.js} +0 -0
  435. /package/dist/{groovy-DKsn4ppB.js → groovy-CKjO-cRi.js} +0 -0
  436. /package/dist/{haskell-BJVBJQcy.js → haskell-DC1Gan6v.js} +0 -0
  437. /package/dist/{haxe-rLN5UZU5.js → haxe-Bpne--ot.js} +0 -0
  438. /package/dist/{http-CbJFDV7c.js → http-CPVO27fZ.js} +0 -0
  439. /package/dist/{idl-B4mwMAo-.js → idl-GRIbMIEq.js} +0 -0
  440. /package/dist/{init-Cge3yl4r.js → init-BfRhston.js} +0 -0
  441. /package/dist/{invariant-e8eBgdux.js → invariant-D4hPsZFI.js} +0 -0
  442. /package/dist/{javascript-Hf2NLNC0.js → javascript-nS0zxWNO.js} +0 -0
  443. /package/dist/{julia-GGpx21YN.js → julia-CQpdTxmO.js} +0 -0
  444. /package/dist/{katex-CQ_cP8Uu.js → katex-Dg42UEnr.js} +0 -0
  445. /package/dist/{livescript-CSvXMspZ.js → livescript-D5kqrQol.js} +0 -0
  446. /package/dist/{lua-CVMR5LMW.js → lua-CKifrpGK.js} +0 -0
  447. /package/dist/{main-XimWhSi_.js → main-CvkAPtaq.js} +0 -0
  448. /package/dist/{math-CEWMqgbD.js → math-BbMyrONz.js} +0 -0
  449. /package/dist/{mathematica-JENNt-p4.js → mathematica-CxT3f_fi.js} +0 -0
  450. /package/dist/{mbox-mzifoc8E.js → mbox-C2_n_I9h.js} +0 -0
  451. /package/dist/{micromark-factory-space-BHslBP9f.js → micromark-factory-space-YUxUai1y.js} +0 -0
  452. /package/dist/{mirc-BXoiItvN.js → mirc-BTQeASBH.js} +0 -0
  453. /package/dist/{mllike-H-KR9OuH.js → mllike-BxO6Hl5N.js} +0 -0
  454. /package/dist/{modelica-B6Hm3mMl.js → modelica-DuivZReX.js} +0 -0
  455. /package/dist/{mscgen-D8TF_Hei.js → mscgen-DwD83FOm.js} +0 -0
  456. /package/dist/{mumps-CD-kNPt4.js → mumps-CdVjp3OE.js} +0 -0
  457. /package/dist/{nginx-9EZQIKsh.js → nginx-Bi9TuNqb.js} +0 -0
  458. /package/dist/{node-sql-parser-DIe6Cq_-.js → node-sql-parser-Bet3kHkt.js} +0 -0
  459. /package/dist/{ntriples-DgnpxU40.js → ntriples-DBS60qLp.js} +0 -0
  460. /package/dist/{octave-CkobqyVm.js → octave-BL0tQUFC.js} +0 -0
  461. /package/dist/{oz-ChDLd9tS.js → oz-DBrG4vwi.js} +0 -0
  462. /package/dist/{pascal-CvlkwK7E.js → pascal-BWV9h8yS.js} +0 -0
  463. /package/dist/{path-B-82hpi8.js → path-C_x2ySFi.js} +0 -0
  464. /package/dist/{perl-BNEFTNbM.js → perl-Bm5a83JW.js} +0 -0
  465. /package/dist/{pig-Cd1DMS7P.js → pig-CbJDoHaE.js} +0 -0
  466. /package/dist/{powershell-CPxA0zpc.js → powershell-tG44m5Cy.js} +0 -0
  467. /package/dist/{properties-BaFBm-Xa.js → properties-DUZGzdb1.js} +0 -0
  468. /package/dist/{protobuf-BQV_-X0H.js → protobuf-CcoKXY0d.js} +0 -0
  469. /package/dist/{puppet-LXLST0mx.js → puppet-BH73L_Gw.js} +0 -0
  470. /package/dist/{purify.es-hTCfRGdl.js → purify.es-ukiMXY-F.js} +0 -0
  471. /package/dist/{python-DLjLzX4k.js → python-NJIxLTZp.js} +0 -0
  472. /package/dist/{q-DswTX1Y9.js → q-MotBNA65.js} +0 -0
  473. /package/dist/{r-CO7NpMwE.js → r-BUgBPae7.js} +0 -0
  474. /package/dist/{range-BYuZFTbA.js → range-DwpxnYuB.js} +0 -0
  475. /package/dist/{rpm-BlmEDT6r.js → rpm-C_PaGodG.js} +0 -0
  476. /package/dist/{ruby-BTPKgeZZ.js → ruby-DFLM2XD8.js} +0 -0
  477. /package/dist/{sas-DTDTiNO8.js → sas-BMyyu8oO.js} +0 -0
  478. /package/dist/{scheme-UzAAg4GJ.js → scheme-Qet9zYAe.js} +0 -0
  479. /package/dist/{shell-DQ0hQCsB.js → shell-BKHx4Jjo.js} +0 -0
  480. /package/dist/{sieve-BVyYIx9u.js → sieve-CVo7dc4j.js} +0 -0
  481. /package/dist/{simple-mode-Dryu-fC9.js → simple-mode-CVFBIo6d.js} +0 -0
  482. /package/dist/{smalltalk-DAdMAHTu.js → smalltalk-BHr2nCth.js} +0 -0
  483. /package/dist/{solr-Bn6k51kO.js → solr-Bt9XtM2H.js} +0 -0
  484. /package/dist/{sparql-Bi7quYgw.js → sparql-QSu0ZCcc.js} +0 -0
  485. /package/dist/{spreadsheet-UpVklYg7.js → spreadsheet-BWfuwc0V.js} +0 -0
  486. /package/dist/{sql-qyORs189.js → sql-BdV3YOCG.js} +0 -0
  487. /package/dist/{stex-D887Ylhf.js → stex-Ze8D4R_5.js} +0 -0
  488. /package/dist/{stylus-jhpzcQ6Y.js → stylus-CLZH9-Ps.js} +0 -0
  489. /package/dist/{swift-BrO8qThZ.js → swift-JNDJdNIE.js} +0 -0
  490. /package/dist/{tcl-s5QI5gv3.js → tcl-J5aE7aj5.js} +0 -0
  491. /package/dist/{textile-ClhvJrxM.js → textile-6Hn05XQM.js} +0 -0
  492. /package/dist/{tiddlywiki-CmAAqw9M.js → tiddlywiki-BWn8rSwJ.js} +0 -0
  493. /package/dist/{tiki-DzCRe_s0.js → tiki-XORjA1c3.js} +0 -0
  494. /package/dist/{timer-BPKOAfmx.js → timer-pEiW44EO.js} +0 -0
  495. /package/dist/{toml-TFa3EJQE.js → toml-BceyeuiF.js} +0 -0
  496. /package/dist/{treemap-CmLtUuWe.js → treemap-BzS5cW_6.js} +0 -0
  497. /package/dist/{troff-SqLg0heF.js → troff-DeMyd5Pf.js} +0 -0
  498. /package/dist/{ttcn-Cfrap7HJ.js → ttcn-DurvvcB-.js} +0 -0
  499. /package/dist/{ttcn-cfg-Dopc-iwE.js → ttcn-cfg-BuYui6Rv.js} +0 -0
  500. /package/dist/{turtle-Dt52DvVH.js → turtle-CD8Qf-tp.js} +0 -0
  501. /package/dist/{vb-D1pAvfDe.js → vb-BklM-Nqk.js} +0 -0
  502. /package/dist/{vbscript-DZ7RBxn5.js → vbscript-DbMEEX0d.js} +0 -0
  503. /package/dist/{velocity-Csau7eZy.js → velocity-CERL-_vq.js} +0 -0
  504. /package/dist/{verilog-gXlZACs5.js → verilog-BD6jNce6.js} +0 -0
  505. /package/dist/{vhdl-NaUWbI1B.js → vhdl-U-1_N98i.js} +0 -0
  506. /package/dist/{webidl-BJmPjW01.js → webidl-IUn0dzoa.js} +0 -0
  507. /package/dist/{xquery-CJIPsC0g.js → xquery-QeeHdSO2.js} +0 -0
  508. /package/dist/{yacas-8f2Vjiiz.js → yacas-C9XcEPAJ.js} +0 -0
  509. /package/dist/{z80-s5Xk2hCP.js → z80-C-nD1oRy.js} +0 -0
@@ -5,6 +5,11 @@ import { cellId } from "@/__tests__/branded";
5
5
  import type { CellMessage } from "../../kernel/messages";
6
6
  import { formatLogTimestamp, getCellLogsForMessage } from "../logs";
7
7
 
8
+ // Stable mock reference so every (re)import of use-toast sees the same spy,
9
+ // even after vi.resetModules() clears the module cache between tests.
10
+ const { toastMock } = vi.hoisted(() => ({ toastMock: vi.fn() }));
11
+ vi.mock("@/components/ui/use-toast", () => ({ toast: toastMock }));
12
+
8
13
  describe("getCellLogsForMessage", () => {
9
14
  beforeEach(() => {
10
15
  // Mock console.log to avoid cluttering test output
@@ -324,6 +329,102 @@ describe("getCellLogsForMessage", () => {
324
329
  });
325
330
  });
326
331
 
332
+ describe("getCellLogsForMessage - internal error toast", () => {
333
+ // Re-imported per test after vi.resetModules() so the module-level
334
+ // `didAlreadyToastError` flag starts fresh and all jotai atom references
335
+ // (initialModeAtom, etc.) match the versions used by the reset logs.ts.
336
+ let getLogs: typeof import("../logs").getCellLogsForMessage;
337
+ let store: typeof import("@/core/state/jotai").store;
338
+ let initialModeAtom: typeof import("@/core/mode").initialModeAtom;
339
+
340
+ beforeEach(async () => {
341
+ vi.spyOn(console, "log").mockImplementation(() => {
342
+ // no-op
343
+ });
344
+ vi.resetModules();
345
+ ({ getCellLogsForMessage: getLogs } = await import("../logs"));
346
+ ({ store } = await import("@/core/state/jotai"));
347
+ ({ initialModeAtom } = await import("@/core/mode"));
348
+ });
349
+
350
+ afterEach(() => {
351
+ vi.restoreAllMocks();
352
+ vi.clearAllMocks();
353
+ });
354
+
355
+ const makeErrorCellMessage = (id: CellMessage["cell_id"]): CellMessage => ({
356
+ cell_id: id,
357
+ console: [],
358
+ output: {
359
+ mimetype: "application/vnd.marimo+error",
360
+ data: [
361
+ {
362
+ type: "exception",
363
+ exception_type: "ValueError",
364
+ msg: "something exploded",
365
+ traceback: ["File foo.py, line 1", "ValueError: something exploded"],
366
+ },
367
+ ],
368
+ channel: "marimo-error",
369
+ timestamp: 0,
370
+ } as unknown as CellMessage["output"],
371
+ status: "idle",
372
+ stale_inputs: null,
373
+ timestamp: 0,
374
+ });
375
+
376
+ test("shows toast for internal errors in app (read) mode", () => {
377
+ store.set(initialModeAtom, "read");
378
+
379
+ getLogs(makeErrorCellMessage(cellId("cell-err-1")));
380
+
381
+ expect(toastMock).toHaveBeenCalledTimes(1);
382
+ expect(toastMock).toHaveBeenCalledWith(
383
+ expect.objectContaining({
384
+ title: "An internal error occurred",
385
+ variant: "danger",
386
+ }),
387
+ );
388
+ });
389
+
390
+ test("does not show toast for internal errors in edit mode", () => {
391
+ store.set(initialModeAtom, "edit");
392
+
393
+ getLogs(makeErrorCellMessage(cellId("cell-err-2")));
394
+
395
+ expect(toastMock).not.toHaveBeenCalled();
396
+ });
397
+
398
+ test("edit-mode errors do not consume the once-per-session toast slot", () => {
399
+ // Errors received while in edit mode should be silently skipped...
400
+ store.set(initialModeAtom, "edit");
401
+ getLogs(makeErrorCellMessage(cellId("cell-err-3")));
402
+ expect(toastMock).not.toHaveBeenCalled();
403
+
404
+ // ...and a subsequent error in app mode should still toast.
405
+ store.set(initialModeAtom, "read");
406
+ getLogs(makeErrorCellMessage(cellId("cell-err-4")));
407
+ expect(toastMock).toHaveBeenCalledTimes(1);
408
+ });
409
+
410
+ test("toast only fires once across multiple app-mode errors", () => {
411
+ store.set(initialModeAtom, "read");
412
+
413
+ getLogs(makeErrorCellMessage(cellId("cell-err-5")));
414
+ getLogs(makeErrorCellMessage(cellId("cell-err-6")));
415
+
416
+ expect(toastMock).toHaveBeenCalledTimes(1);
417
+ });
418
+
419
+ test("suppresses toast when initial mode has not been set", () => {
420
+ // Leave initialModeAtom at its default (undefined); getInitialAppMode
421
+ // will throw and the logic should swallow it without toasting.
422
+ getLogs(makeErrorCellMessage(cellId("cell-err-7")));
423
+
424
+ expect(toastMock).not.toHaveBeenCalled();
425
+ });
426
+ });
427
+
327
428
  describe("formatLogTimestamp", () => {
328
429
  test("formats unix timestamp correctly", () => {
329
430
  // January 1, 2024, 12:00:00 PM UTC
@@ -7,6 +7,7 @@ import { Strings } from "@/utils/strings";
7
7
  import type { CellMessage, OutputMessage } from "../kernel/messages";
8
8
  import { isErrorMime } from "../mime";
9
9
  import type { CellId } from "./ids";
10
+ import { initialModeAtom } from "../mode";
10
11
  import { store } from "../state/jotai";
11
12
  import { tracebackModalAtom } from "../errors/traceback-atom";
12
13
  import React from "react";
@@ -83,7 +84,14 @@ export function getCellLogsForMessage(cell: CellMessage): CellLog[] {
83
84
  error.type === "internal",
84
85
  );
85
86
 
86
- if (exceptionErrors.length > 0 && !didAlreadyToastError) {
87
+ // Only show the toast in app mode: edit mode already surfaces errors in
88
+ // the cell UI, so toasting there would be noisy and duplicative. Read the
89
+ // atom directly so an unset initial mode (e.g. in tests/islands) simply
90
+ // returns undefined instead of throwing and masking real errors.
91
+ const isAppMode = store.get(initialModeAtom) === "read";
92
+
93
+ // Only show toast once, and only in app mode
94
+ if (exceptionErrors.length > 0 && !didAlreadyToastError && isAppMode) {
87
95
  didAlreadyToastError = true;
88
96
 
89
97
  // Find first error with a traceback
@@ -9,9 +9,7 @@ exports[`snapshot all duplicate keymaps > default keymaps 2`] = `
9
9
  },
10
10
  {
11
11
  "key": "ArrowDown",
12
- "preventDefault": true,
13
12
  "run": "run",
14
- "stopPropagation": true,
15
13
  },
16
14
  {
17
15
  "key": "ArrowDown",
@@ -27,9 +25,7 @@ exports[`snapshot all duplicate keymaps > default keymaps 2`] = `
27
25
  },
28
26
  {
29
27
  "key": "ArrowUp",
30
- "preventDefault": true,
31
28
  "run": "run",
32
- "stopPropagation": true,
33
29
  },
34
30
  {
35
31
  "key": "ArrowUp",
@@ -118,15 +114,12 @@ exports[`snapshot all duplicate keymaps > vim keymaps 2`] = `
118
114
  },
119
115
  {
120
116
  "key": "ArrowDown",
121
- "preventDefault": true,
122
117
  "run": "run",
123
- "stopPropagation": true,
124
118
  },
125
119
  {
126
120
  "key": "ArrowDown",
127
- "preventDefault": true,
128
- "run": "cursorLineDown",
129
- "shift": "selectLineDown",
121
+ "run": "<no name>",
122
+ "shift": "<no name>",
130
123
  },
131
124
  ],
132
125
  "ArrowUp": [
@@ -136,15 +129,12 @@ exports[`snapshot all duplicate keymaps > vim keymaps 2`] = `
136
129
  },
137
130
  {
138
131
  "key": "ArrowUp",
139
- "preventDefault": true,
140
132
  "run": "run",
141
- "stopPropagation": true,
142
133
  },
143
134
  {
144
135
  "key": "ArrowUp",
145
- "preventDefault": true,
146
- "run": "cursorLineUp",
147
- "shift": "selectLineUp",
136
+ "run": "<no name>",
137
+ "shift": "<no name>",
148
138
  },
149
139
  ],
150
140
  "Backspace": [
@@ -169,8 +169,6 @@ function cellKeymaps({
169
169
  },
170
170
  {
171
171
  key: "ArrowUp",
172
- preventDefault: true,
173
- stopPropagation: true,
174
172
  run: (ev) => {
175
173
  // Skip if we are in the middle of an autocompletion
176
174
  const hasAutocomplete = completionStatus(ev.state);
@@ -188,8 +186,6 @@ function cellKeymaps({
188
186
  },
189
187
  {
190
188
  key: "ArrowDown",
191
- preventDefault: true,
192
- stopPropagation: true,
193
189
  run: (ev) => {
194
190
  // Skip if we are in the middle of an autocompletion
195
191
  const hasAutocomplete = completionStatus(ev.state);
@@ -1,8 +1,16 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
3
  import {
4
+ cursorCharLeft,
5
+ cursorCharRight,
6
+ cursorLineDown,
7
+ cursorLineUp,
4
8
  insertNewlineAndIndent,
5
9
  defaultKeymap as originalDefaultKeymap,
10
+ selectCharLeft,
11
+ selectCharRight,
12
+ selectLineDown,
13
+ selectLineUp,
6
14
  toggleBlockComment,
7
15
  toggleComment,
8
16
  } from "@codemirror/commands";
@@ -13,7 +21,7 @@ import {
13
21
  type KeyBinding,
14
22
  keymap,
15
23
  } from "@codemirror/view";
16
- import { getCM, vim } from "@replit/codemirror-vim";
24
+ import { type CodeMirror, getCM, vim } from "@replit/codemirror-vim";
17
25
  import type { KeymapConfig } from "@/core/config/config-schema";
18
26
  import type { HotkeyProvider } from "@/core/hotkeys/hotkeys";
19
27
  import { logNever } from "@/utils/assertNever";
@@ -62,6 +70,12 @@ export function keymapBundle(
62
70
  },
63
71
  ),
64
72
  ),
73
+ // Arrow keys: use CodeMirror's cursor movement except in vim visual
74
+ // mode, where vim must handle them to maintain selection.
75
+ // The original cursorLineUp/Down bindings from the default keymap are
76
+ // filtered out (see defaultVimKeymap) because their preventDefault
77
+ // flag blocks vim's handler even when their run function returns false.
78
+ keymap.of(vimVisualModeArrowKeyBindings()),
65
79
  // Base vim mode
66
80
  vim({ status: false }),
67
81
  // Custom vim keymaps for cell navigation
@@ -101,12 +115,22 @@ const overrideKeymap = (keymap: HotkeyProvider): readonly KeyBinding[] => {
101
115
  };
102
116
 
103
117
  const defaultVimKeymap = once(() => {
104
- const toRemove = new Set(["Enter", "Ctrl-v"]);
118
+ const toRemove = new Set([
119
+ "Enter",
120
+ "Ctrl-v",
121
+ "ArrowUp",
122
+ "ArrowDown",
123
+ "ArrowLeft",
124
+ "ArrowRight",
125
+ ]);
105
126
  // Remove conflicting keys from the keymap
106
127
  // Enter (<CR>) adds a new line
107
128
  // - it should just go to the next line
108
129
  // Ctrl-v goes to the bottom of the cell
109
130
  // - should enter blockwise visual mode
131
+ // ArrowUp/ArrowDown (cursorLineUp/Down) always handle the event and have
132
+ // preventDefault, which blocks vim's handler from processing arrow keys.
133
+ // Replaced with visual-mode-aware wrappers in keymapBundle.
110
134
  return defaultKeymap().filter(
111
135
  (k) => !toRemove.has(k.key || k.mac || k.linux || k.win || ""),
112
136
  );
@@ -155,6 +179,49 @@ function doubleCharacterListener(
155
179
  ]);
156
180
  }
157
181
 
182
+ function isInVimVisualMode(cm: CodeMirror | undefined | null): boolean {
183
+ return cm?.state.vim?.visualMode === true;
184
+ }
185
+
186
+ /**
187
+ * In vim visual mode, arrow keys must be handled by vim to maintain selection.
188
+ * Wrap each arrow key's run and shift so they defer to vim in visual mode,
189
+ * but use CodeMirror's cursor commands in all other modes.
190
+ */
191
+ function vimVisualModeArrowKeyBindings(): KeyBinding[] {
192
+ const wrap =
193
+ (cmd: Command): Command =>
194
+ (view) => {
195
+ if (isInVimVisualMode(getCM(view))) {
196
+ return false;
197
+ }
198
+ return cmd(view);
199
+ };
200
+
201
+ return [
202
+ {
203
+ key: "ArrowDown",
204
+ run: wrap(cursorLineDown),
205
+ shift: wrap(selectLineDown),
206
+ },
207
+ {
208
+ key: "ArrowUp",
209
+ run: wrap(cursorLineUp),
210
+ shift: wrap(selectLineUp),
211
+ },
212
+ {
213
+ key: "ArrowLeft",
214
+ run: wrap(cursorCharLeft),
215
+ shift: wrap(selectCharLeft),
216
+ },
217
+ {
218
+ key: "ArrowRight",
219
+ run: wrap(cursorCharRight),
220
+ shift: wrap(selectCharRight),
221
+ },
222
+ ];
223
+ }
224
+
158
225
  export const visibleForTesting = {
159
226
  defaultKeymap,
160
227
  defaultVimKeymap,
@@ -36,7 +36,7 @@ import { FederatedLanguageServerClient } from "../../lsp/federated-lsp";
36
36
  import { NotebookLanguageServerClient } from "../../lsp/notebook-lsp";
37
37
  import { createTransport } from "../../lsp/transports";
38
38
  import { CellDocumentUri, type ILanguageServerClient } from "../../lsp/types";
39
- import { getLSPDocumentRootUri } from "../../lsp/utils";
39
+ import { getLspRootUri, getLspWorkspaceFolders } from "../../lsp/utils";
40
40
  import {
41
41
  clickablePlaceholderExtension,
42
42
  smartPlaceholderExtension,
@@ -54,8 +54,8 @@ const pylspClient = once((lspConfig: LSPConfig) => {
54
54
 
55
55
  const lspClientOpts = {
56
56
  transport,
57
- rootUri: getLSPDocumentRootUri(),
58
- workspaceFolders: [],
57
+ rootUri: getLspRootUri(),
58
+ workspaceFolders: getLspWorkspaceFolders(),
59
59
  };
60
60
  const config = lspConfig?.pylsp;
61
61
 
@@ -161,8 +161,8 @@ const tyLspClient = once((_: LSPConfig) => {
161
161
 
162
162
  const lspClientOpts = {
163
163
  transport,
164
- rootUri: getLSPDocumentRootUri(),
165
- workspaceFolders: [],
164
+ rootUri: getLspRootUri(),
165
+ workspaceFolders: getLspWorkspaceFolders(),
166
166
  };
167
167
 
168
168
  // We wrap the client in a NotebookLanguageServerClient to add some
@@ -192,8 +192,8 @@ const pyreflyClient = once(
192
192
 
193
193
  const lspClientOpts = {
194
194
  transport,
195
- rootUri: getLSPDocumentRootUri(),
196
- workspaceFolders: [],
195
+ rootUri: getLspRootUri(),
196
+ workspaceFolders: getLspWorkspaceFolders(),
197
197
  };
198
198
 
199
199
  // We wrap the client in a NotebookLanguageServerClient to add some
@@ -230,8 +230,8 @@ const pyrightClient = once((_: LSPConfig) => {
230
230
 
231
231
  const lspClientOpts = {
232
232
  transport,
233
- rootUri: getLSPDocumentRootUri(),
234
- workspaceFolders: [],
233
+ rootUri: getLspRootUri(),
234
+ workspaceFolders: getLspWorkspaceFolders(),
235
235
  };
236
236
 
237
237
  // We wrap the client in a NotebookLanguageServerClient to add some
@@ -12,6 +12,7 @@ import { cellId } from "@/__tests__/branded";
12
12
  import type { CellId } from "@/core/cells/ids";
13
13
  import { store } from "@/core/state/jotai";
14
14
  import { topologicalCodesAtom } from "../../copilot/getCodes";
15
+ import { lspWorkspaceAtom } from "@/core/saving/file-state";
15
16
  import { languageAdapterState } from "../../language/extension";
16
17
  import { PythonLanguageAdapter } from "../../language/languages/python";
17
18
  import { languageMetadataField } from "../../language/metadata";
@@ -285,6 +286,12 @@ describe("NotebookLanguageServerClient", () => {
285
286
  },
286
287
  };
287
288
  }
289
+ if (atom === lspWorkspaceAtom) {
290
+ return {
291
+ rootUri: "file:///project",
292
+ documentUri: "file:///project/__marimo_notebook__.py",
293
+ };
294
+ }
288
295
  return undefined;
289
296
  });
290
297
 
@@ -421,7 +428,7 @@ describe("NotebookLanguageServerClient", () => {
421
428
  expect(result).toEqual(mockCompletionResponse);
422
429
  expect(mockClient.textDocumentCompletion).toHaveBeenCalledWith(
423
430
  expect.objectContaining({
424
- textDocument: { uri: "file:///__marimo_notebook__.py" },
431
+ textDocument: { uri: "file:///project/__marimo_notebook__.py" },
425
432
  }),
426
433
  );
427
434
  });
@@ -3,7 +3,7 @@
3
3
  import type * as LSP from "vscode-languageserver-protocol";
4
4
  import { Objects } from "@/utils/objects";
5
5
  import type { ILanguageServerClient } from "./types";
6
- import { getLSPDocument } from "./utils";
6
+ import { getLspDocumentUri } from "./utils";
7
7
 
8
8
  function removeFalseyValues<T extends object>(obj: T): T {
9
9
  return Objects.filter(obj, (value) => value !== false && value !== null) as T;
@@ -20,7 +20,7 @@ export class FederatedLanguageServerClient implements ILanguageServerClient {
20
20
 
21
21
  constructor(clients: ILanguageServerClient[]) {
22
22
  this.clients = clients;
23
- this.documentUri = getLSPDocument();
23
+ this.documentUri = getLspDocumentUri();
24
24
  }
25
25
 
26
26
  onNotification(
@@ -22,7 +22,7 @@ import {
22
22
  type ILanguageServerClient,
23
23
  isClientWithNotify,
24
24
  } from "./types";
25
- import { getLSPDocument } from "./utils";
25
+ import { getLspDocumentUri } from "./utils";
26
26
 
27
27
  /**
28
28
  * Check if a variable name is private (starts with underscore but not dunder).
@@ -189,7 +189,7 @@ export class NotebookLanguageServerClient implements ILanguageServerClient {
189
189
  EditorView | null | undefined
190
190
  > = defaultGetNotebookEditors,
191
191
  ) {
192
- this.documentUri = getLSPDocument();
192
+ this.documentUri = getLspDocumentUri();
193
193
  this.getNotebookEditors = getNotebookEditors;
194
194
  this.initialSettings = initialSettings;
195
195
  this.client = client;
@@ -1,11 +1,26 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- import { getFilenameFromDOM } from "@/core/dom/htmlUtils";
3
- import { Paths } from "@/utils/paths";
2
+ import { lspWorkspaceAtom } from "@/core/saving/file-state";
3
+ import { store } from "@/core/state/jotai";
4
4
 
5
- export function getLSPDocument() {
6
- return `file://${getFilenameFromDOM() ?? "/__marimo_notebook__.py"}`;
5
+ export function getLspRootUri() {
6
+ const lspWorkspace = store.get(lspWorkspaceAtom);
7
+ // The backend provides rootUri for active notebook sessions.
8
+ // For non-notebook pages (home, gallery), lspWorkspace is null,
9
+ // so return a valid file URI fallback.
10
+ return lspWorkspace?.rootUri ?? "file:///";
7
11
  }
8
12
 
9
- export function getLSPDocumentRootUri() {
10
- return `file://${Paths.dirname(getFilenameFromDOM() ?? "/")}`;
13
+ export function getLspWorkspaceFolders() {
14
+ const lspWorkspace = store.get(lspWorkspaceAtom);
15
+ const rootUri = lspWorkspace?.rootUri;
16
+ // Return workspace folders only if rootUri is set; empty array otherwise.
17
+ return rootUri ? [{ uri: rootUri, name: "marimo" }] : [];
18
+ }
19
+
20
+ export function getLspDocumentUri() {
21
+ const lspWorkspace = store.get(lspWorkspaceAtom);
22
+ // The backend provides documentUri for active notebook sessions.
23
+ // For non-notebook pages (home, gallery), lspWorkspace is null,
24
+ // so return a valid file URI fallback.
25
+ return lspWorkspace?.documentUri ?? "file:///__marimo_notebook__.py";
11
26
  }
@@ -7,6 +7,7 @@ export const Constants = {
7
7
  discordLink: "https://marimo.io/discord?ref=notebook",
8
8
  docsPage: "https://docs.marimo.io",
9
9
  youtube: "https://www.youtube.com/@marimo-team",
10
+ molab: "https://molab.marimo.io",
10
11
  };
11
12
 
12
13
  export const KnownQueryParams = {
@@ -28,10 +28,7 @@ import { TablePanel } from "@/components/data-table/charts/charts";
28
28
  import { hasChart } from "@/components/data-table/charts/storage";
29
29
  import { ColumnChartSpecModel } from "@/components/data-table/column-summary/chart-spec-model";
30
30
  import { ColumnChartContext } from "@/components/data-table/column-summary/column-summary";
31
- import {
32
- type ColumnFilterValue,
33
- filterToFilterCondition,
34
- } from "@/components/data-table/filters";
31
+ import { filtersToFilterGroup } from "@/components/data-table/filters";
35
32
  import { usePanelOwnership } from "@/components/data-table/hooks/use-panel-ownership";
36
33
  import { LoadingTable } from "@/components/data-table/loading-table";
37
34
  import {
@@ -86,8 +83,8 @@ import { rpc } from "../core/rpc";
86
83
  import { Banner } from "./common/error-banner";
87
84
  import { Labeled } from "./common/labeled";
88
85
  import {
89
- ConditionSchema,
90
- type ConditionType,
86
+ FilterGroupSchema,
87
+ type FilterGroupType,
91
88
  columnToFieldTypesSchema,
92
89
  } from "./data-frames/schema";
93
90
 
@@ -213,7 +210,7 @@ type DataTableFunctions = {
213
210
  descending: boolean;
214
211
  }[];
215
212
  query?: string;
216
- filters?: ConditionType[];
213
+ filters?: FilterGroupType;
217
214
  page_number: number;
218
215
  page_size: number;
219
216
  max_columns?: number | null;
@@ -312,7 +309,7 @@ export const DataTablePlugin = createPlugin<S>("marimo-table")
312
309
  )
313
310
  .optional(),
314
311
  query: z.string().optional(),
315
- filters: z.array(ConditionSchema).optional(),
312
+ filters: FilterGroupSchema.optional(),
316
313
  page_number: z.number(),
317
314
  page_size: z.number(),
318
315
  max_columns: z.number().nullable().optional(),
@@ -578,12 +575,7 @@ export const LoadingDataTableComponent = memo(
578
575
  query: searchQuery,
579
576
  page_number: paginationState.pageIndex,
580
577
  page_size: paginationState.pageSize,
581
- filters: filters.flatMap((filter) => {
582
- return filterToFilterCondition(
583
- filter.id,
584
- filter.value as ColumnFilterValue,
585
- );
586
- }),
578
+ filters: filtersToFilterGroup(filters),
587
579
  });
588
580
 
589
581
  if (canShowInitialPage) {
@@ -641,12 +633,7 @@ export const LoadingDataTableComponent = memo(
641
633
  page_size: 1,
642
634
  sort: sortArgs,
643
635
  query: searchQuery,
644
- filters: filters.flatMap((filter) => {
645
- return filterToFilterCondition(
646
- filter.id,
647
- filter.value as ColumnFilterValue,
648
- );
649
- }),
636
+ filters: filtersToFilterGroup(filters),
650
637
  // Do not clamp number of columns since we are viewing a single row
651
638
  max_columns: null,
652
639
  });
@@ -9,12 +9,14 @@ import {
9
9
  } from "../../components/ui/tabs";
10
10
  import { renderHTML } from "../core/RenderHTML";
11
11
  import type { IPlugin, IPluginProps } from "../types";
12
+ import { Labeled } from "./common/labeled";
12
13
 
13
14
  interface Data {
14
15
  /**
15
16
  * The labels for each tab; raw HTML.
16
17
  */
17
18
  tabs: string[];
19
+ label: string | null;
18
20
  }
19
21
 
20
22
  // Selected tab index
@@ -25,6 +27,7 @@ export class TabsPlugin implements IPlugin<T, Data> {
25
27
 
26
28
  validator = z.object({
27
29
  tabs: z.array(z.string()),
30
+ label: z.string().nullable(),
28
31
  });
29
32
 
30
33
  render(props: IPluginProps<T, Data>): JSX.Element {
@@ -47,6 +50,7 @@ interface TabComponentProps extends Data {
47
50
 
48
51
  const TabComponent = ({
49
52
  tabs,
53
+ label,
50
54
  value,
51
55
  setValue,
52
56
  children,
@@ -67,17 +71,19 @@ const TabComponent = ({
67
71
  }
68
72
 
69
73
  return (
70
- <Tabs value={internalValue} onValueChange={handleChange}>
71
- <TabsList>
72
- {tabs.map((tab, index) => (
73
- <TabsTrigger key={index} value={index.toString()}>
74
- {renderHTML({ html: tab })}
75
- </TabsTrigger>
76
- ))}
77
- </TabsList>
78
- {React.Children.map(children, (child, index) => {
79
- return <TabsContent value={index.toString()}>{child}</TabsContent>;
80
- })}
81
- </Tabs>
74
+ <Labeled label={label} align="top">
75
+ <Tabs value={internalValue} onValueChange={handleChange}>
76
+ <TabsList>
77
+ {tabs.map((tab, index) => (
78
+ <TabsTrigger key={index} value={index.toString()}>
79
+ {renderHTML({ html: tab })}
80
+ </TabsTrigger>
81
+ ))}
82
+ </TabsList>
83
+ {React.Children.map(children, (child, index) => {
84
+ return <TabsContent value={index.toString()}>{child}</TabsContent>;
85
+ })}
86
+ </Tabs>
87
+ </Labeled>
82
88
  );
83
89
  };
@@ -29,8 +29,8 @@ import { LoadingDataTableComponent, TableProviders } from "../DataTablePlugin";
29
29
  import type { DataType } from "../vega/vega-loader";
30
30
  import { TransformPanel, type TransformPanelHandle } from "./panel";
31
31
  import {
32
- ConditionSchema,
33
- type ConditionType,
32
+ FilterGroupSchema,
33
+ type FilterGroupType,
34
34
  columnToFieldTypesSchema,
35
35
  type Transformations,
36
36
  } from "./schema";
@@ -75,7 +75,7 @@ type PluginFunctions = {
75
75
  descending: boolean;
76
76
  }[];
77
77
  query?: string;
78
- filters?: ConditionType[];
78
+ filters?: FilterGroupType;
79
79
  page_number: number;
80
80
  page_size: number;
81
81
  }) => Promise<{
@@ -138,7 +138,7 @@ export const DataFramePlugin = createPlugin<S>("marimo-dataframe")
138
138
  )
139
139
  .optional(),
140
140
  query: z.string().optional(),
141
- filters: z.array(ConditionSchema).optional(),
141
+ filters: FilterGroupSchema.optional(),
142
142
  page_number: z.number(),
143
143
  page_size: z.number(),
144
144
  }),