@marimo-team/islands 0.23.2-dev7 → 0.23.2-dev70

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 (577) hide show
  1. package/dist/{ConnectedDataExplorerComponent-P92i6wYx.js → ConnectedDataExplorerComponent-BS9U2zaC.js} +68 -66
  2. package/dist/ErrorBoundary-Da4UeYxT.js +167 -0
  3. package/dist/{ImageComparisonComponent-HF4AY8_n.js → ImageComparisonComponent-DaocPIse.js} +1 -1
  4. package/dist/{Plot-CK0oVgQL.js → Plot-PIeIvFnD.js} +1 -1
  5. package/dist/{isArrayLikeObject-LXbTYiBa.js → _baseFor-BGiY-cm1.js} +43 -215
  6. package/dist/_baseUniq-CxZRxRRo.js +380 -0
  7. package/dist/{any-language-editor-BCvLfvzI.js → any-language-editor-BVR0l12r.js} +23 -22
  8. package/dist/apl-BKoVld9y.js +4 -0
  9. package/dist/{arc-DLJpPF9M.js → arc-CHF8PiiF.js} +2 -2
  10. package/dist/architecture-7HQA4BMR-D0JB_3hE.js +6 -0
  11. package/dist/{architectureDiagram-VXUJARFQ-B3YQo9At.js → architectureDiagram-VXUJARFQ-BXQEUDtK.js} +19 -19
  12. package/dist/{arrays-beUWo8RF.js → arrays-CldYf7p7.js} +1 -1
  13. package/dist/asciiarmor-DQrKIjoo.js +4 -0
  14. package/dist/asn1-BZvnj0dq.js +4 -0
  15. package/dist/{blockDiagram-VD42YOAC-CpQ3TKEN.js → blockDiagram-VD42YOAC-DhJe-Y9i.js} +53 -53
  16. package/dist/brainfuck-D558nlUv.js +4 -0
  17. package/dist/{button-D1C3g5GI.js → button-CA5pI2YF.js} +2 -2
  18. package/dist/{c4Diagram-YG6GDRKO-CZSU4uqU.js → c4Diagram-YG6GDRKO-9dSfzOFR.js} +6 -6
  19. package/dist/{capabilities-BwpUgo4S.js → capabilities-6laDasij.js} +2 -2
  20. package/dist/{channel-X3JKk8gE.js → channel-MqYIiKgS.js} +1 -1
  21. package/dist/{chat-ui-Bi0ioKDx.js → chat-ui-CTt4WX0V.js} +2803 -2800
  22. package/dist/{check-BgrdTLuv.js → check-CFM2mVDr.js} +1 -1
  23. package/dist/{chunk-4BX2VUAB-C2skOn1Z.js → chunk-4BX2VUAB-BwfrWBqN.js} +1 -1
  24. package/dist/{chunk-4F5CHEZ2-D5mClyDv.js → chunk-4F5CHEZ2-C6tO9vjs.js} +1 -1
  25. package/dist/{chunk-55IACEB6-DRsSqxbU.js → chunk-55IACEB6-D8THf2mi.js} +1 -1
  26. package/dist/{chunk-5FQGJX7Z-VIref9gx.js → chunk-5FQGJX7Z-CO1e63h_.js} +5 -5
  27. package/dist/{chunk-ABZYJK2D-CZYCCtLy.js → chunk-ABZYJK2D-BrBb_0yY.js} +3 -3
  28. package/dist/{chunk-ATLVNIR6-DaOzLLgN.js → chunk-ATLVNIR6-D-0XqNah.js} +2 -2
  29. package/dist/{chunk-B2363JML-Br0eA2T3.js → chunk-B2363JML-Ds8wZXyP.js} +1 -1
  30. package/dist/{chunk-B4BG7PRW-4BjV11Br.js → chunk-B4BG7PRW-8iRKvugR.js} +7 -7
  31. package/dist/{chunk-CVBHYZKI-BXHgce-x.js → chunk-CVBHYZKI-B6xhgaBd.js} +1 -1
  32. package/dist/{chunk-DI55MBZ5-DITY3EyP.js → chunk-DI55MBZ5-C0_2D4m4.js} +6 -6
  33. package/dist/{chunk-EXTU4WIE-jUPSAk3i.js → chunk-EXTU4WIE-Jiw9ca1u.js} +2 -2
  34. package/dist/{chunk-FMBD7UC4-BjIaI-XO.js → chunk-FMBD7UC4-CHdus51S.js} +1 -1
  35. package/dist/{chunk-FRFDVMJY-DnEvEFRR.js → chunk-FRFDVMJY-BgQv1HBE.js} +1 -1
  36. package/dist/{chunk-HN2XXSSU-DAhNp1ig.js → chunk-HN2XXSSU-2Vfbq-kU.js} +1 -1
  37. package/dist/{chunk-JA3XYJ7Z-BcPEfxk_.js → chunk-JA3XYJ7Z-6wbaigKe.js} +3 -3
  38. package/dist/{chunk-JZLCHNYA-2bnLL3xL.js → chunk-JZLCHNYA-_rfptlUP.js} +6 -6
  39. package/dist/{chunk-MI3HLSF2-AKwFNP3m.js → chunk-MI3HLSF2-Do0-KRc0.js} +1 -1
  40. package/dist/{chunk-N4CR4FBY-CpZSuGSU.js → chunk-N4CR4FBY-DIZG9dVD.js} +7 -7
  41. package/dist/{chunk-PL6DKKU2-DnId6G-x.js → chunk-PL6DKKU2-DHfTUHy8.js} +1 -1
  42. package/dist/{chunk-QN33PNHL-B9p5ojHB.js → chunk-QN33PNHL-Cc64y40m.js} +2 -2
  43. package/dist/{chunk-QXUST7PY-Ch6F5Obl.js → chunk-QXUST7PY-BDG0-0Or.js} +10 -10
  44. package/dist/{chunk-QZHKN3VN-BK9tlbfw.js → chunk-QZHKN3VN-B_Mdb8GC.js} +1 -1
  45. package/dist/{chunk-S3R3BYOJ-B0UOFJwq.js → chunk-S3R3BYOJ-DphMP0FA.js} +8 -8
  46. package/dist/{chunk-SJTYNZTY-BsBZnJUj.js → chunk-SJTYNZTY-Diciw4sx.js} +1 -1
  47. package/dist/{chunk-TCCFYFTB-Clbl-fTg.js → chunk-TCCFYFTB-d3HOqL2I.js} +1552 -345
  48. package/dist/{chunk-TQ3KTPDO-CFkSQ30e.js → chunk-TQ3KTPDO-CQfP9npd.js} +1 -1
  49. package/dist/{chunk-TZMSLE5B-D45397J2.js → chunk-TZMSLE5B-C9LUoYkc.js} +3 -3
  50. package/dist/{chunk-UMXZTB3W-D-A834Bq.js → chunk-UMXZTB3W-MSKeGL7W.js} +1 -1
  51. package/dist/classDiagram-2ON5EDUG-CBHMR6ZU.js +30 -0
  52. package/dist/classDiagram-v2-WZHVMYZB-BsUtUGM_.js +30 -0
  53. package/dist/{clike-B90WKs4D.js → clike-sBZrGeF8.js} +1 -1
  54. package/dist/clojure-Cq8mTSrE.js +4 -0
  55. package/dist/{clone-DZFQCtFJ.js → clone-BuIIsfA8.js} +1 -1
  56. package/dist/cmake-D8HCovWK.js +4 -0
  57. package/dist/cobol-UolN-9iU.js +4 -0
  58. package/dist/{code-block-37QAKDTI-FQEoMOU1.js → code-block-37QAKDTI-0JNwiPGv.js} +2 -2
  59. package/dist/coffeescript-VdNuWrt5.js +4 -0
  60. package/dist/commonlisp-ALX7fpDc.js +4 -0
  61. package/dist/{constants-CvyfaCvs.js → constants-D0gkYoE2.js} +4 -4
  62. package/dist/{copy-Bp6CK_Fg.js → copy-TGGAUEWp.js} +2 -2
  63. package/dist/{cose-bilkent-S5V4N54A-DvCk1aXi.js → cose-bilkent-S5V4N54A-DXHZkJKX.js} +2 -2
  64. package/dist/crystal-PbyO9Q_s.js +4 -0
  65. package/dist/css-DFklJkr_.js +4 -0
  66. package/dist/cypher-BifNeYlv.js +4 -0
  67. package/dist/d-BA-JP4PJ.js +4 -0
  68. package/dist/{dagre-6UL2VRFP-OMItEBnY.js → dagre-6UL2VRFP-tH87fkPA.js} +102 -103
  69. package/dist/{dagre-QVd-lCXU.js → dagre-VYEPqXIV.js} +105 -39
  70. package/dist/{data-grid-overlay-editor-C_sKPpLu.js → data-grid-overlay-editor-CWUN78-s.js} +3 -3
  71. package/dist/{diagram-PSM6KHXK-CkKbohWI.js → diagram-PSM6KHXK-2VjPSCDn.js} +22 -22
  72. package/dist/{diagram-QEK2KX5R-DjUMpVcx.js → diagram-QEK2KX5R-CiLmNyta.js} +17 -17
  73. package/dist/{diagram-S2PKOQOG-b-c0d-wZ.js → diagram-S2PKOQOG-Zha_1CLx.js} +17 -17
  74. package/dist/diff-CtkDpav4.js +4 -0
  75. package/dist/dist-B--tLnAP.js +5 -0
  76. package/dist/{dist-tGk0aZ--.js → dist-B52GXZbd.js} +2 -2
  77. package/dist/{dist-Bfp1XXWt.js → dist-B8BjrFUE.js} +5 -5
  78. package/dist/dist-BEOU2g1b.js +8 -0
  79. package/dist/dist-BHnX0ia_.js +8 -0
  80. package/dist/{dist-DJKubHDd.js → dist-BK-3fF4P.js} +1 -1
  81. package/dist/{dist-Ci0CXEFt.js → dist-BTyJtnNg.js} +1 -1
  82. package/dist/{dist-CFKdzOIu.js → dist-BetEKbPG.js} +2 -2
  83. package/dist/{dist-DpkJHKB8.js → dist-BrBucRXs.js} +2 -2
  84. package/dist/{dist-CTwGwcQ8.js → dist-Brkazupz.js} +2 -2
  85. package/dist/dist-BuBwsFva.js +5 -0
  86. package/dist/dist-BzmEQ9u7.js +5 -0
  87. package/dist/{dist-ej6AQKaS.js → dist-C-J0pt5p.js} +1 -1
  88. package/dist/dist-C1Ap5CYU.js +5 -0
  89. package/dist/{dist-LhQNUe5A.js → dist-C474qFoq.js} +3 -3
  90. package/dist/{dist-DlSUOIm9.js → dist-C9fmTOin.js} +1 -1
  91. package/dist/{dist-CxZvoNao.js → dist-CCADb07R.js} +44 -31
  92. package/dist/{dist-BjDuO5JW.js → dist-CGLzXdrt.js} +1 -1
  93. package/dist/dist-CMjD5MQb.js +6 -0
  94. package/dist/{dist-BvhGByxL.js → dist-CNtV21T_.js} +4 -4
  95. package/dist/dist-ChC1BhqM.js +6 -0
  96. package/dist/dist-Cih01ssx.js +5 -0
  97. package/dist/{dist-CNF0QBLR.js → dist-CinA9Enb.js} +1 -1
  98. package/dist/dist-CqfONiY9.js +5 -0
  99. package/dist/{dist-DFK94vuS.js → dist-CtCY55Jf.js} +2 -2
  100. package/dist/{dist-VqF3W_ue.js → dist-CxdUraQr.js} +2 -2
  101. package/dist/{dist-DUFd1bhm.js → dist-CyFFzJTb.js} +1 -1
  102. package/dist/{dist-C4bq5Ioy.js → dist-D029TiHd.js} +2 -2
  103. package/dist/dist-D0iD0Fi9.js +5 -0
  104. package/dist/{dist-m9tsXsFf.js → dist-D9r7Cmw7.js} +2 -2
  105. package/dist/{dist-DD_cYHOl.js → dist-DBLeRrPp.js} +2 -2
  106. package/dist/{dist-DJ9F1eHs.js → dist-DGAfI2rB.js} +2 -2
  107. package/dist/{dist-BrxqmS9Q.js → dist-DZjQ_MBo.js} +4 -4
  108. package/dist/{dist-DLafRu9s.js → dist-DadjmS-4.js} +2 -2
  109. package/dist/{dist-Doy0mQDg.js → dist-DkC6YEo0.js} +2 -2
  110. package/dist/{dist-CIB8w0Fl.js → dist-DquyVv5H.js} +2 -2
  111. package/dist/dist-DtNLXm8d.js +5 -0
  112. package/dist/{dist-CTtLBPLZ.js → dist-ESg7xyoD.js} +4 -4
  113. package/dist/dist-FN0ZA_8F.js +8 -0
  114. package/dist/{dist-CcMfr7jD.js → dist-HVuryI1a.js} +1 -1
  115. package/dist/{dist-DGNtjMZu.js → dist-JEhxD_cn.js} +1 -1
  116. package/dist/{dist-B43sbpd0.js → dist-UcOPnRMa.js} +3 -3
  117. package/dist/dist-YP-G7W0f.js +8 -0
  118. package/dist/{dist-DbnBiLNH.js → dist-Yrfc6L0I.js} +3 -3
  119. package/dist/{dist--6TSlp8H.js → dist-Zn0KNbo9.js} +1 -1
  120. package/dist/{dist-DAfcmt-d.js → dist-nuW5EDYT.js} +2 -2
  121. package/dist/{dockerfile-DfXhjEUG.js → dockerfile-COvlVLcE.js} +1 -1
  122. package/dist/dtd-DW3_UFEG.js +4 -0
  123. package/dist/dylan-pDhodO2N.js +4 -0
  124. package/dist/ecl-BJT8-YD7.js +4 -0
  125. package/dist/eiffel-Dmns-9vS.js +4 -0
  126. package/dist/elm-Da4sO4Bz.js +4 -0
  127. package/dist/{erDiagram-Q2GNP2WA-CDhLaOZ1.js → erDiagram-Q2GNP2WA-biHZS05w.js} +15 -15
  128. package/dist/erlang-C-zBsDi7.js +4 -0
  129. package/dist/{error-banner-B_ioHva3.js → error-banner-DnBPzEWg.js} +3 -3
  130. package/dist/{esm-CD1iby2n.js → esm-CYEyrE3Y.js} +105 -105
  131. package/dist/esm-Dd1z1auZ.js +1171 -0
  132. package/dist/extends-CzJgxo2J.js +1645 -0
  133. package/dist/factor-4xPWlWB5.js +4 -0
  134. package/dist/{factor--4HHM8Rw.js → factor-C2GT7jfQ.js} +1 -1
  135. package/dist/flatten-CzBvFdvC.js +8 -0
  136. package/dist/{flowDiagram-NV44I4VS-BDi4O4CL.js → flowDiagram-NV44I4VS-CWWlUpBR.js} +17 -17
  137. package/dist/formats-Dh5M1ZRs.js +79 -0
  138. package/dist/forth-l-c75zSd.js +4 -0
  139. package/dist/fortran-DIujSODW.js +4 -0
  140. package/dist/{ganttDiagram-JELNMOA3-BpZE6kVp.js → ganttDiagram-JELNMOA3-D7B2c4Z9.js} +10 -10
  141. package/dist/gas-CXnG5g_b.js +4 -0
  142. package/dist/gherkin-VPeqd4-X.js +4 -0
  143. package/dist/{gitGraph-G5XIXVHT-B_c6xFJv.js → gitGraph-G5XIXVHT-BdepdFa_.js} +3 -3
  144. package/dist/{gitGraphDiagram-V2S2FVAM-iQnXzbPM.js → gitGraphDiagram-V2S2FVAM-CtLvNR1S.js} +17 -17
  145. package/dist/{glide-data-editor-BFqEJGJW.js → glide-data-editor-DXti2axL.js} +591 -583
  146. package/dist/graphlib-CVPKjKCS.js +359 -0
  147. package/dist/groovy-CphhZQgg.js +4 -0
  148. package/dist/{hasIn-DnfJcYpY.js → hasIn-COs6vImh.js} +3 -3
  149. package/dist/haskell-CCvlS5Iq.js +4 -0
  150. package/dist/haxe-C_bi66fP.js +5 -0
  151. package/dist/{process-output-H_7QTreh.js → html-to-image-BdsDysfl.js} +2521 -2639
  152. package/dist/idl-1DcP4Dm8.js +4 -0
  153. package/dist/{info-VBDWY6EO-BTyzxmhr.js → info-VBDWY6EO--JNA2rNu.js} +3 -3
  154. package/dist/infoDiagram-HS3SLOUP-BbZyOxsP.js +30 -0
  155. package/dist/{input-CSVEkmaZ.js → input-Drx1pguW.js} +70 -70
  156. package/dist/{isEmpty-B7FX9wKt.js → isEmpty-Dd8mx_WL.js} +9 -9
  157. package/dist/{isSymbol-DCbjQG_U.js → isSymbol-BvIfMnn6.js} +1 -1
  158. package/dist/javascript-DUIGhBvO.js +4 -0
  159. package/dist/{journeyDiagram-XKPGCS4Q-ClPC94aN.js → journeyDiagram-XKPGCS4Q-BU2mjjzl.js} +7 -7
  160. package/dist/julia-Cs2G4PQi.js +4 -0
  161. package/dist/{kanban-definition-3W4ZIXB7-DHEAKdZt.js → kanban-definition-3W4ZIXB7-BlmczUuw.js} +12 -12
  162. package/dist/{katex-CkLtKXwv.js → katex-qPqrBHZ8.js} +1 -1
  163. package/dist/label-BCWi-Oqu.js +31 -0
  164. package/dist/{line-PAEmCpyD.js → line-BWRi3U3S.js} +3 -3
  165. package/dist/{linear-v57w-fIs.js → linear-DnHwODZa.js} +4 -4
  166. package/dist/livescript-DMtVFaAN.js +4 -0
  167. package/dist/{loader-ZFbGsMN1.js → loader-BvW0-YWZ.js} +2 -2
  168. package/dist/lua-BAoLtdJg.js +4 -0
  169. package/dist/main.js +16437 -39681
  170. package/dist/mathematica-C_NoFtbo.js +4 -0
  171. package/dist/mbox-DcFJFYrH.js +4 -0
  172. package/dist/{memoize-CSTI9eOX.js → memoize-C9ltv0Cw.js} +1 -1
  173. package/dist/merge-CHn7Yx0N.js +222 -0
  174. package/dist/mermaid-4DMBBIKO-CG1ECj5W.js +6 -0
  175. package/dist/{mermaid-BbhZNQeB.js → mermaid-BagLPXm9.js} +50 -50
  176. package/dist/{mermaid-parser.core-ntCgyx0x.js → mermaid-parser.core-CleJseNW.js} +8 -8
  177. package/dist/{mhchem-BuY5LDSq.js → mhchem-BwoRNwg_.js} +1 -1
  178. package/dist/min-BNz2lZfk.js +38 -0
  179. package/dist/{mindmap-definition-VGOIOE7T-CxEUZZvY.js → mindmap-definition-VGOIOE7T-CcSYqYP9.js} +14 -14
  180. package/dist/mirc-71dccf_u.js +4 -0
  181. package/dist/mllike-CWcOFVDq.js +6 -0
  182. package/dist/modelica-Ape2VXxx.js +4 -0
  183. package/dist/mscgen-Cc6TwbSN.js +6 -0
  184. package/dist/mumps-h-ZbdkJ9.js +4 -0
  185. package/dist/now-Sgq5m3D-.js +31 -0
  186. package/dist/{nsis-B6EN9LWI.js → nsis-B5K1qoyo.js} +1 -1
  187. package/dist/nsis-C0p3m7JW.js +4 -0
  188. package/dist/ntriples-c9lEeT5w.js +4 -0
  189. package/dist/{number-overlay-editor-B02-t7Ar.js → number-overlay-editor-_GnlYFHC.js} +1 -1
  190. package/dist/octave-DzEgB_74.js +4 -0
  191. package/dist/{once-C_TIu-kR.js → once-rJImu7SE.js} +1 -1
  192. package/dist/{ordinal-D7fa8Sey.js → ordinal-2jIulmcR.js} +1 -1
  193. package/dist/oz-CAxvHkyQ.js +4 -0
  194. package/dist/{packet-DYOGHKS2-BhvnpoGi.js → packet-DYOGHKS2-CBxXGWNr.js} +3 -3
  195. package/dist/pascal-BJzu1sgP.js +4 -0
  196. package/dist/perl--IrOzZ2Z.js +4 -0
  197. package/dist/pick-CRAXxDYn.js +43 -0
  198. package/dist/{pie-VRWISCQL-dILuA3iG.js → pie-VRWISCQL-Bmdnqjip.js} +3 -3
  199. package/dist/{pieDiagram-ADFJNKIX-U3LrUqAS.js → pieDiagram-ADFJNKIX-DNyLF5H2.js} +22 -22
  200. package/dist/pig-CiBKKNhC.js +4 -0
  201. package/dist/powershell-KY0j6Qop.js +4 -0
  202. package/dist/{precisionRound-CGLoV26P.js → precisionRound-CnHPY_5v.js} +1 -1
  203. package/dist/process-output-COL2Pf5I.js +109 -0
  204. package/dist/properties-BW8q3ziV.js +4 -0
  205. package/dist/protobuf-BGaeuTGV.js +4 -0
  206. package/dist/pug-DjOKK-4J.js +4 -0
  207. package/dist/{pug-xrm7jQ2R.js → pug-tjbzJCFk.js} +1 -1
  208. package/dist/puppet-DWm2o6zX.js +4 -0
  209. package/dist/{purify.es-hTCfRGdl.js → purify.es-DT70lfR0.js} +85 -81
  210. package/dist/python-Bp2gezZy.js +4 -0
  211. package/dist/q-DljPshos.js +4 -0
  212. package/dist/{quadrantDiagram-AYHSOK5B-BVWuq-3R.js → quadrantDiagram-AYHSOK5B-rXwjifrj.js} +5 -5
  213. package/dist/r-BajPMnEu.js +4 -0
  214. package/dist/{radar-ZZBFDIW7-DwFrOJDj.js → radar-ZZBFDIW7-BmCWDffL.js} +3 -3
  215. package/dist/{react-vega-DBwal82H.js → react-vega-C2Rtgjb4.js} +19 -19
  216. package/dist/react-vega-jy3CfYys.js +9 -0
  217. package/dist/{requirementDiagram-UZGBJVZJ-D0zpQnKC.js → requirementDiagram-UZGBJVZJ-DBdrMVbs.js} +14 -14
  218. package/dist/reveal-component-Cd5Y35Ny.js +4549 -0
  219. package/dist/rpm-BKx-ZZ62.js +5 -0
  220. package/dist/ruby-DJq_HNKc.js +4 -0
  221. package/dist/{sankeyDiagram-TZEHDZUN-CExy1joT.js → sankeyDiagram-TZEHDZUN-CxmzalGv.js} +5 -5
  222. package/dist/sas-WANvpcOU.js +4 -0
  223. package/dist/scheme-CliBbhGF.js +4 -0
  224. package/dist/{sequenceDiagram-WL72ISMW-D1BJxLjH.js → sequenceDiagram-WL72ISMW-CVCDsJ9h.js} +8 -8
  225. package/dist/shell-BwhrNUvM.js +4 -0
  226. package/dist/sieve-BIVePvMp.js +4 -0
  227. package/dist/slide-BEerfanN.js +23928 -0
  228. package/dist/smalltalk-D6G48JmY.js +4 -0
  229. package/dist/sparql-jjc3BmEP.js +4 -0
  230. package/dist/{spec-3EPbPQZH.js → spec-BKWq0wn2.js} +8 -152
  231. package/dist/{src-DbP20yFZ.js → src-BY0BGg6V.js} +1 -1
  232. package/dist/{stateDiagram-FKZM4ZOC-B1S8jGMn.js → stateDiagram-FKZM4ZOC-D_2djEhW.js} +19 -19
  233. package/dist/stateDiagram-v2-4FDKWEC3-Cv9Av10H.js +29 -0
  234. package/dist/{step-qd10PbTJ.js → step-DGAGWg3y.js} +1 -1
  235. package/dist/stex-ChDHQs3R.js +4 -0
  236. package/dist/{label-BebYlsDV.js → strings-B_FOH6eV.js} +57 -81
  237. package/dist/style.css +1 -1
  238. package/dist/stylus-WPBPQ4PE.js +4 -0
  239. package/dist/swift-O1Qy6iCm.js +4 -0
  240. package/dist/{slides-component-DLxprlqo.js → swiper-component-KkEVUDd3.js} +5 -5
  241. package/dist/tcl-BAFdhvsi.js +4 -0
  242. package/dist/textile-DFuzhNLG.js +4 -0
  243. package/dist/{time-Bdnxi22U.js → time-CMdrp3hw.js} +4 -4
  244. package/dist/{timeline-definition-IT6M3QCI-BDT9JAmn.js → timeline-definition-IT6M3QCI-E4NzxCs3.js} +4 -4
  245. package/dist/{toDate-B1AzlBoW.js → toDate-yqOcZ_tY.js} +4 -4
  246. package/dist/toml-DRSTeely.js +4 -0
  247. package/dist/{tooltip-DwNnFsxZ.js → tooltip-B0mtKTXm.js} +4 -4
  248. package/dist/{treemap-GDKQZRPO-bx2ngsgN.js → treemap-GDKQZRPO-CoKHPxa7.js} +3 -3
  249. package/dist/troff-B_ZjwBW0.js +4 -0
  250. package/dist/ttcn-CAyiB3ic.js +4 -0
  251. package/dist/ttcn-cfg-BS5_BGBJ.js +4 -0
  252. package/dist/turtle-CUBEDy3E.js +4 -0
  253. package/dist/types-DBtDeUKD.js +38 -0
  254. package/dist/{useAsyncData-BL98MPIy.js → useAsyncData-CKYzhCis.js} +2 -2
  255. package/dist/useDateFormatter-B3mCQMP3.js +150 -0
  256. package/dist/useDeepCompareMemoize-je76AJS_.js +11 -0
  257. package/dist/{useIframeCapabilities-CsTUYYj7.js → useIframeCapabilities-DbdLoEDm.js} +1 -1
  258. package/dist/{useLifecycle-DrGGIsgp.js → useLifecycle-smVfjLNI.js} +4 -4
  259. package/dist/{useTheme-CzwDokKe.js → useTheme-CX9pPLUH.js} +3 -3
  260. package/dist/vb-DY9S6-U2.js +4 -0
  261. package/dist/vbscript-gaHC39Jq.js +4 -0
  262. package/dist/{vega-component-KBJXEDZz.js → vega-component-CjMUUeEZ.js} +18 -17
  263. package/dist/{vega-loader.browser-DqEcFOPD.js → vega-loader.browser-3_z8GoFC.js} +3 -3
  264. package/dist/velocity-TfCOtJZ_.js +4 -0
  265. package/dist/verilog-c2JOX8mv.js +4 -0
  266. package/dist/vhdl-dHBirRiO.js +4 -0
  267. package/dist/webidl-Bauj-i07.js +4 -0
  268. package/dist/xquery-CtaEAOt8.js +4 -0
  269. package/dist/{xychartDiagram-PRI3JC2R-CuAZiqHS.js → xychartDiagram-PRI3JC2R-CuxTvjw5.js} +13 -13
  270. package/dist/yacas-BZ85agQP.js +4 -0
  271. package/dist/z80-hCgR-L4U.js +4 -0
  272. package/dist/{zod-W5ZEjzaE.js → zod-BxdsqRPd.js} +3 -3
  273. package/package.json +4 -2
  274. package/src/__mocks__/requests.ts +1 -0
  275. package/src/components/data-table/TableBottomBar.tsx +5 -1
  276. package/src/components/data-table/__tests__/chart-spec-model.test.ts +14 -14
  277. package/src/components/data-table/__tests__/columns.test.tsx +104 -0
  278. package/src/components/data-table/__tests__/filters.test.ts +304 -0
  279. package/src/components/data-table/__tests__/pagination.test.tsx +46 -132
  280. package/src/components/data-table/__tests__/sentinel-cell.test.tsx +171 -0
  281. package/src/components/data-table/__tests__/types.test.ts +34 -1
  282. package/src/components/data-table/__tests__/utils.test.ts +227 -0
  283. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
  284. package/src/components/data-table/column-header.tsx +11 -2
  285. package/src/components/data-table/column-summary/chart-spec-model.tsx +6 -3
  286. package/src/components/data-table/column-summary/column-summary.tsx +1 -1
  287. package/src/components/data-table/columns.tsx +48 -5
  288. package/src/components/data-table/export-actions.tsx +62 -23
  289. package/src/components/data-table/filters.ts +87 -33
  290. package/src/components/data-table/pagination.tsx +189 -76
  291. package/src/components/data-table/schemas.ts +8 -1
  292. package/src/components/data-table/sentinel-cell.tsx +118 -0
  293. package/src/components/data-table/types.ts +32 -11
  294. package/src/components/data-table/utils.ts +119 -1
  295. package/src/components/datasources/__tests__/missing-package-prompt.test.tsx +103 -0
  296. package/src/components/datasources/missing-package-prompt.tsx +49 -0
  297. package/src/components/editor/actions/useNotebookActions.tsx +12 -0
  298. package/src/components/editor/cell/code/cell-editor.tsx +1 -0
  299. package/src/components/editor/file-tree/__tests__/requesting-tree.test.ts +33 -0
  300. package/src/components/editor/file-tree/file-explorer.tsx +8 -33
  301. package/src/components/editor/file-tree/requesting-tree.tsx +41 -0
  302. package/src/components/editor/file-tree/state.tsx +1 -0
  303. package/src/components/editor/renderers/slides-layout/slides-layout.tsx +9 -17
  304. package/src/components/home/components.tsx +7 -0
  305. package/src/components/slides/reveal-component.tsx +109 -0
  306. package/src/components/slides/reveal-slides.css +42 -0
  307. package/src/components/slides/slides.css +0 -65
  308. package/src/components/slides/{slides-component.tsx → swiper-component.tsx} +1 -0
  309. package/src/components/slides/swiper-slides.css +64 -0
  310. package/src/components/static-html/static-banner.tsx +23 -14
  311. package/src/components/ui/toast.tsx +16 -7
  312. package/src/core/cells/__tests__/apply-transaction.test.ts +483 -0
  313. package/src/core/cells/__tests__/cells.test.ts +110 -0
  314. package/src/core/cells/__tests__/logs.test.ts +101 -0
  315. package/src/core/cells/cells.ts +18 -0
  316. package/src/core/cells/document-changes.ts +34 -1
  317. package/src/core/cells/logs.ts +9 -1
  318. package/src/core/codemirror/__tests__/__snapshots__/setup.test.ts.snap +4 -14
  319. package/src/core/codemirror/cells/extensions.ts +0 -4
  320. package/src/core/codemirror/keymaps/keymaps.ts +69 -2
  321. package/src/core/constants.ts +1 -0
  322. package/src/core/islands/bridge.ts +1 -0
  323. package/src/core/mode.ts +10 -1
  324. package/src/core/network/requests-lazy.ts +1 -0
  325. package/src/core/network/requests-network.ts +8 -0
  326. package/src/core/network/requests-static.ts +1 -0
  327. package/src/core/network/requests-toasting.tsx +1 -0
  328. package/src/core/network/types.ts +3 -0
  329. package/src/core/wasm/__tests__/bridge.test.ts +113 -0
  330. package/src/core/wasm/bridge.ts +13 -2
  331. package/src/core/wasm/worker/types.ts +3 -0
  332. package/src/core/wasm/worker/worker.ts +1 -0
  333. package/src/plugins/core/__test__/trusted-url.test.ts +45 -1
  334. package/src/plugins/core/trusted-url.ts +27 -2
  335. package/src/plugins/impl/DataEditorPlugin.tsx +7 -3
  336. package/src/plugins/impl/DataTablePlugin.tsx +7 -20
  337. package/src/plugins/impl/FileBrowserPlugin.tsx +81 -81
  338. package/src/plugins/impl/TabsPlugin.tsx +18 -12
  339. package/src/plugins/impl/data-editor/__tests__/data-utils.test.ts +147 -149
  340. package/src/plugins/impl/data-editor/data-utils.ts +12 -11
  341. package/src/plugins/impl/data-editor/glide-data-editor.tsx +4 -4
  342. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +4 -4
  343. package/src/plugins/impl/data-frames/schema.ts +41 -9
  344. package/src/plugins/impl/data-frames/utils/operators.ts +2 -0
  345. package/src/plugins/impl/matplotlib/matplotlib-renderer.ts +16 -0
  346. package/src/plugins/layout/carousel/CarouselPlugin.tsx +3 -1
  347. package/dist/_basePickBy-Sow3pJjS.js +0 -41
  348. package/dist/_baseUniq-C87CckHL.js +0 -518
  349. package/dist/apl-C1bki_dE.js +0 -4
  350. package/dist/architecture-7HQA4BMR-BHdkAMvZ.js +0 -6
  351. package/dist/asciiarmor-BdlkCCRr.js +0 -4
  352. package/dist/asn1-CvE30hox.js +0 -4
  353. package/dist/brainfuck-BalwWy1a.js +0 -4
  354. package/dist/classDiagram-2ON5EDUG-C8-zE3Zv.js +0 -30
  355. package/dist/classDiagram-v2-WZHVMYZB-DrmbGANl.js +0 -30
  356. package/dist/clojure-CUC2I1hM.js +0 -4
  357. package/dist/cmake-8PcMxXnB.js +0 -4
  358. package/dist/cobol-DkkkDz5v.js +0 -4
  359. package/dist/coffeescript-CCupxOZf.js +0 -4
  360. package/dist/commonlisp-DhUfGX6b.js +0 -4
  361. package/dist/crystal-DSaw6rFQ.js +0 -4
  362. package/dist/css-D4QDewkG.js +0 -4
  363. package/dist/cypher-CrYVqw_F.js +0 -4
  364. package/dist/d-Cr3H3pPx.js +0 -4
  365. package/dist/diff-ODiZJGls.js +0 -4
  366. package/dist/dist-7K5doRvB.js +0 -6
  367. package/dist/dist-B6I_A2-E.js +0 -8
  368. package/dist/dist-BEQsmaZY.js +0 -5
  369. package/dist/dist-BasY2RHp.js +0 -8
  370. package/dist/dist-Bosc00dY.js +0 -5
  371. package/dist/dist-CQMZOn-_.js +0 -8
  372. package/dist/dist-CViQhWZ8.js +0 -5
  373. package/dist/dist-Cz6rLfwY.js +0 -5
  374. package/dist/dist-D8eq8st3.js +0 -6
  375. package/dist/dist-DM1UDXdl.js +0 -5
  376. package/dist/dist-DNrtWPgS.js +0 -5
  377. package/dist/dist-V7q2qnpA.js +0 -5
  378. package/dist/dist-a5_hPgu2.js +0 -8
  379. package/dist/dist-uVyZcV1-.js +0 -5
  380. package/dist/dtd-C-t2Rk7F.js +0 -4
  381. package/dist/dylan-B4ctBLGp.js +0 -4
  382. package/dist/ecl-DqWfymni.js +0 -4
  383. package/dist/eiffel-DjBKKAr7.js +0 -4
  384. package/dist/elm--fxeC0FV.js +0 -4
  385. package/dist/erlang-CaKXCX6H.js +0 -4
  386. package/dist/esm-CDHI9cuO.js +0 -2805
  387. package/dist/factor-DlLO5EFS.js +0 -4
  388. package/dist/forth-rOO6LVj_.js +0 -4
  389. package/dist/fortran-CUg15VGR.js +0 -4
  390. package/dist/gas-BMRJspiW.js +0 -4
  391. package/dist/gherkin-DRxzijZU.js +0 -4
  392. package/dist/graphlib-BV1_gi0C.js +0 -226
  393. package/dist/groovy-BmrQ8pUP.js +0 -4
  394. package/dist/haskell-BuaYfKOz.js +0 -4
  395. package/dist/haxe-DcH9eA0a.js +0 -5
  396. package/dist/idl-DGlcm4Ls.js +0 -4
  397. package/dist/infoDiagram-HS3SLOUP-OYrX6uO3.js +0 -30
  398. package/dist/javascript-CeTk7rzr.js +0 -4
  399. package/dist/julia-BoP_q1gm.js +0 -4
  400. package/dist/livescript-B7IMN-ba.js +0 -4
  401. package/dist/lua-q1InavKb.js +0 -4
  402. package/dist/mathematica-DvR8-_EI.js +0 -4
  403. package/dist/mbox-7h5MNBS_.js +0 -4
  404. package/dist/merge-CVhG7q_o.js +0 -51
  405. package/dist/mermaid-4DMBBIKO-BjtqcdX4.js +0 -6
  406. package/dist/min-Ds3gG0Ff.js +0 -96
  407. package/dist/mirc-D-XM8A5c.js +0 -4
  408. package/dist/mllike-BQGkkbmf.js +0 -6
  409. package/dist/modelica-D_yRj_WU.js +0 -4
  410. package/dist/mscgen-B-rltAjp.js +0 -6
  411. package/dist/mumps-2kh8TU2b.js +0 -4
  412. package/dist/now-nrrrOr01.js +0 -7
  413. package/dist/nsis-CtusEqwb.js +0 -4
  414. package/dist/ntriples-BdAXw6zV.js +0 -4
  415. package/dist/octave-CsNFmVp5.js +0 -4
  416. package/dist/oz-odIXCrKd.js +0 -4
  417. package/dist/pascal-B9Mfk3Fo.js +0 -4
  418. package/dist/perl-C48inLcz.js +0 -4
  419. package/dist/pig-uwRtAssU.js +0 -4
  420. package/dist/powershell-CXqlca-i.js +0 -4
  421. package/dist/properties-D6Zu1rpK.js +0 -4
  422. package/dist/protobuf-BlNNWZaR.js +0 -4
  423. package/dist/pug-DytcK7bv.js +0 -4
  424. package/dist/puppet-lJ8Ok3iY.js +0 -4
  425. package/dist/python-cMaF7kUp.js +0 -4
  426. package/dist/q-Dgt2HYQh.js +0 -4
  427. package/dist/r-Bm4S4awf.js +0 -4
  428. package/dist/range-fJeId9Ri.js +0 -30
  429. package/dist/react-vega-BkjdpVsR.js +0 -9
  430. package/dist/rpm-_8LbzMVc.js +0 -5
  431. package/dist/ruby-Cr8IJ5VZ.js +0 -4
  432. package/dist/sas-CFcSfo2_.js +0 -4
  433. package/dist/scheme-N4XRoKgc.js +0 -4
  434. package/dist/shell-B4L7f_ds.js +0 -4
  435. package/dist/sieve-UI6J3Gm0.js +0 -4
  436. package/dist/smalltalk-BuaPZAZU.js +0 -4
  437. package/dist/sparql-1rKrq463.js +0 -4
  438. package/dist/stateDiagram-v2-4FDKWEC3-BH5ozUbc.js +0 -29
  439. package/dist/stex-CQDv3aS8.js +0 -4
  440. package/dist/stylus-DvSovJEP.js +0 -4
  441. package/dist/swift-D-_E7Yyb.js +0 -4
  442. package/dist/tcl-Di5sAVHN.js +0 -4
  443. package/dist/textile-Benwt66z.js +0 -4
  444. package/dist/toNumber-55tjPCWr.js +0 -28
  445. package/dist/toml-CeOvPOkY.js +0 -4
  446. package/dist/troff-DJN9hfgu.js +0 -4
  447. package/dist/ttcn-DQW2Psjf.js +0 -4
  448. package/dist/ttcn-cfg-zFG_MNpg.js +0 -4
  449. package/dist/turtle-DHRyNlSc.js +0 -4
  450. package/dist/types-pwjdK009.js +0 -202
  451. package/dist/useDeepCompareMemoize-CsyOnnjc.js +0 -85
  452. package/dist/vb-CXWH9DD-.js +0 -4
  453. package/dist/vbscript-qr8qVck5.js +0 -4
  454. package/dist/velocity-C_9pUJRx.js +0 -4
  455. package/dist/verilog-DxBstgBa.js +0 -4
  456. package/dist/vhdl-odUxAbE6.js +0 -4
  457. package/dist/webidl-Dfn5Rku4.js +0 -4
  458. package/dist/xquery-CrJs6SXr.js +0 -4
  459. package/dist/yacas-B-uDDLZe.js +0 -4
  460. package/dist/z80-51gxgAXE.js +0 -4
  461. /package/dist/{apl-Oc3bL26_.js → apl-Dt8GMXYg.js} +0 -0
  462. /package/dist/{array-ByIS7m3B.js → array-B-MVxRIF.js} +0 -0
  463. /package/dist/{asciiarmor-DTbPh2VI.js → asciiarmor-CitDQ85h.js} +0 -0
  464. /package/dist/{asn1-CGhwu1Ri.js → asn1-abrf9SMK.js} +0 -0
  465. /package/dist/{asterisk-BApaB_8m.js → asterisk-BUZwqih-.js} +0 -0
  466. /package/dist/{brainfuck-CA0L8lRq.js → brainfuck-BL-Boof0.js} +0 -0
  467. /package/dist/{chunk-DR5Q36YT-C40cYcy5.js → chunk-DR5Q36YT-CP69aZS_.js} +0 -0
  468. /package/dist/{click-outside-container-D3t6KDni.js → click-outside-container-BZgN7xS_.js} +0 -0
  469. /package/dist/{clike-CEtUBPHD.js → clike-RWg7anhx.js} +0 -0
  470. /package/dist/{clojure-BszjvdGo.js → clojure-DaojKHow.js} +0 -0
  471. /package/dist/{clsx-CwTY0BxM.js → clsx-CyyyQ8Ue.js} +0 -0
  472. /package/dist/{cmake-B2Gvps8b.js → cmake-DN-_v0XE.js} +0 -0
  473. /package/dist/{cobol-DuMch8nn.js → cobol-C3VpMyux.js} +0 -0
  474. /package/dist/{coffeescript-L9aKXVsJ.js → coffeescript-DIkz3Tbt.js} +0 -0
  475. /package/dist/{colors-IJ-2cn2o.js → colors-Cn2p_FA3.js} +0 -0
  476. /package/dist/{common-keywords-CsU75Ked.js → common-keywords-hbLeU7VU.js} +0 -0
  477. /package/dist/{commonlisp-CrtdssxB.js → commonlisp-CB1boOiP.js} +0 -0
  478. /package/dist/{crystal-vvNY0LpY.js → crystal-DI2oCml6.js} +0 -0
  479. /package/dist/{css-B1GdzqT1.js → css-BdEVwQDV.js} +0 -0
  480. /package/dist/{cypher-BtZvV7bW.js → cypher-BNHToqxU.js} +0 -0
  481. /package/dist/{cytoscape.esm-CRfNlsPy.js → cytoscape.esm-WbbDoCfu.js} +0 -0
  482. /package/dist/{d-B0UN3V-Z.js → d-D7we7I1b.js} +0 -0
  483. /package/dist/{defaultLocale-qS7DaAmi.js → defaultLocale-BpsHxBd7.js} +0 -0
  484. /package/dist/{defaultLocale-Bxoo2-30.js → defaultLocale-DoeErsX2.js} +0 -0
  485. /package/dist/{diff-DOpgjj1W.js → diff-Cia6fzjN.js} +0 -0
  486. /package/dist/{dist-BjWd_Ei9.js → dist-C89sHDXk.js} +0 -0
  487. /package/dist/{dtd-Ctnjxrle.js → dtd-H4Hubdwp.js} +0 -0
  488. /package/dist/{duckdb-keywords-DjrZdCO2.js → duckdb-keywords-CZ_ZTscu.js} +0 -0
  489. /package/dist/{dylan-DFXkoaZy.js → dylan-fVO6rnq3.js} +0 -0
  490. /package/dist/{ebnf-XJCIl_em.js → ebnf-WEXPLEWb.js} +0 -0
  491. /package/dist/{ecl-C1NExZip.js → ecl-B94VPjNR.js} +0 -0
  492. /package/dist/{eiffel-uXVGgleg.js → eiffel-C_R6TusS.js} +0 -0
  493. /package/dist/{elm-CBOFnnib.js → elm-DzCHbO2g.js} +0 -0
  494. /package/dist/{emotion-is-prop-valid.esm-CJVjyntJ.js → emotion-is-prop-valid.esm-DtW2o230.js} +0 -0
  495. /package/dist/{erlang-DMnrT8XK.js → erlang-BGNkx6JU.js} +0 -0
  496. /package/dist/{esm-D4gzqVRq.js → esm-Bb_hbWan.js} +0 -0
  497. /package/dist/{fcl-fh4Mj0bc.js → fcl-B_Gv5Jfx.js} +0 -0
  498. /package/dist/{forth-DDpxS4nw.js → forth-Bybw0cJ7.js} +0 -0
  499. /package/dist/{fortran-B6uYqQMz.js → fortran-C6PoCLkI.js} +0 -0
  500. /package/dist/{gas-BKnWzuFz.js → gas-BBlhenj4.js} +0 -0
  501. /package/dist/{gherkin-pBt0wT4X.js → gherkin-NXtNG85X.js} +0 -0
  502. /package/dist/{groovy-DKsn4ppB.js → groovy-BoFYK9xM.js} +0 -0
  503. /package/dist/{haskell-BJVBJQcy.js → haskell-BtBdvQ1n.js} +0 -0
  504. /package/dist/{haxe-rLN5UZU5.js → haxe-D--o6dr0.js} +0 -0
  505. /package/dist/{http-CbJFDV7c.js → http-Dc2fv19V.js} +0 -0
  506. /package/dist/{idl-B4mwMAo-.js → idl-AqTq5l7e.js} +0 -0
  507. /package/dist/{init-Cge3yl4r.js → init-D-g0ONX1.js} +0 -0
  508. /package/dist/{invariant-e8eBgdux.js → invariant-UcGKQEhF.js} +0 -0
  509. /package/dist/{javascript-Hf2NLNC0.js → javascript-DvwNVye9.js} +0 -0
  510. /package/dist/{jsx-runtime-9hcJiI23.js → jsx-runtime-COBk7ree.js} +0 -0
  511. /package/dist/{julia-GGpx21YN.js → julia-DoKiagZC.js} +0 -0
  512. /package/dist/{katex-CQ_cP8Uu.js → katex-B7pMJpE0.js} +0 -0
  513. /package/dist/{livescript-CSvXMspZ.js → livescript-DxBZMiWB.js} +0 -0
  514. /package/dist/{lua-CVMR5LMW.js → lua-DmS_0NTu.js} +0 -0
  515. /package/dist/{main-XimWhSi_.js → main-CThhXnXU.js} +0 -0
  516. /package/dist/{math-CEWMqgbD.js → math-BYK36kWZ.js} +0 -0
  517. /package/dist/{mathematica-JENNt-p4.js → mathematica-ChlDFeIC.js} +0 -0
  518. /package/dist/{mbox-mzifoc8E.js → mbox-CguZuODr.js} +0 -0
  519. /package/dist/{micromark-factory-space-BHslBP9f.js → micromark-factory-space-CwHmg6iz.js} +0 -0
  520. /package/dist/{mirc-BXoiItvN.js → mirc-CFtY8dqz.js} +0 -0
  521. /package/dist/{mllike-H-KR9OuH.js → mllike-C0EJrEOk.js} +0 -0
  522. /package/dist/{modelica-B6Hm3mMl.js → modelica-C1kO1nfS.js} +0 -0
  523. /package/dist/{mscgen-D8TF_Hei.js → mscgen-DEYdr7AY.js} +0 -0
  524. /package/dist/{mumps-CD-kNPt4.js → mumps-B3NVJs2V.js} +0 -0
  525. /package/dist/{nginx-9EZQIKsh.js → nginx-ComVAAGN.js} +0 -0
  526. /package/dist/{node-sql-parser-DIe6Cq_-.js → node-sql-parser-DNGGJ-Rw.js} +0 -0
  527. /package/dist/{ntriples-DgnpxU40.js → ntriples-DHol9X9H.js} +0 -0
  528. /package/dist/{octave-CkobqyVm.js → octave-CYGz0bfo.js} +0 -0
  529. /package/dist/{oz-ChDLd9tS.js → oz-kPxb2ni5.js} +0 -0
  530. /package/dist/{pascal-CvlkwK7E.js → pascal-bZ0yrJKy.js} +0 -0
  531. /package/dist/{path-B-82hpi8.js → path-Du6n3sOU.js} +0 -0
  532. /package/dist/{perl-BNEFTNbM.js → perl-z4hvqyqz.js} +0 -0
  533. /package/dist/{pig-Cd1DMS7P.js → pig-DZO8QDF9.js} +0 -0
  534. /package/dist/{powershell-CPxA0zpc.js → powershell-BSuaDQEC.js} +0 -0
  535. /package/dist/{properties-BaFBm-Xa.js → properties-BXhGLlIx.js} +0 -0
  536. /package/dist/{protobuf-BQV_-X0H.js → protobuf-DM6iybWV.js} +0 -0
  537. /package/dist/{puppet-LXLST0mx.js → puppet-Bn05sQT8.js} +0 -0
  538. /package/dist/{python-DLjLzX4k.js → python-Cvnhm0g7.js} +0 -0
  539. /package/dist/{q-DswTX1Y9.js → q-B9V8hzex.js} +0 -0
  540. /package/dist/{r-CO7NpMwE.js → r-Cf0gFqmq.js} +0 -0
  541. /package/dist/{range-BYuZFTbA.js → range-BOiA8qqU.js} +0 -0
  542. /package/dist/{react-dom-D5FDLRUB.js → react-dom-BWRJ_g_k.js} +0 -0
  543. /package/dist/{rpm-BlmEDT6r.js → rpm-D-LMkTV1.js} +0 -0
  544. /package/dist/{ruby-BTPKgeZZ.js → ruby-DeuPikpK.js} +0 -0
  545. /package/dist/{sas-DTDTiNO8.js → sas-C9tjgAo9.js} +0 -0
  546. /package/dist/{scheme-UzAAg4GJ.js → scheme-D1_bUF0G.js} +0 -0
  547. /package/dist/{shell-DQ0hQCsB.js → shell-CJBmnks3.js} +0 -0
  548. /package/dist/{sieve-BVyYIx9u.js → sieve-1fSV75CF.js} +0 -0
  549. /package/dist/{simple-mode-Dryu-fC9.js → simple-mode-B90Wdavj.js} +0 -0
  550. /package/dist/{smalltalk-DAdMAHTu.js → smalltalk-sZNPD0HO.js} +0 -0
  551. /package/dist/{solr-Bn6k51kO.js → solr-DTkyqJ-Z.js} +0 -0
  552. /package/dist/{sparql-Bi7quYgw.js → sparql-oHc1nm77.js} +0 -0
  553. /package/dist/{spreadsheet-UpVklYg7.js → spreadsheet-CER0raqY.js} +0 -0
  554. /package/dist/{sql-qyORs189.js → sql-ByOoEONQ.js} +0 -0
  555. /package/dist/{stex-D887Ylhf.js → stex-DrxP7bb3.js} +0 -0
  556. /package/dist/{stylus-jhpzcQ6Y.js → stylus-KzkX6zRB.js} +0 -0
  557. /package/dist/{swift-BrO8qThZ.js → swift-DqVxZvKo.js} +0 -0
  558. /package/dist/{tcl-s5QI5gv3.js → tcl-BtWSwXfA.js} +0 -0
  559. /package/dist/{textile-ClhvJrxM.js → textile-CWDbn9Ql.js} +0 -0
  560. /package/dist/{tiddlywiki-CmAAqw9M.js → tiddlywiki-Cr9xyOY1.js} +0 -0
  561. /package/dist/{tiki-DzCRe_s0.js → tiki-D5JONyfZ.js} +0 -0
  562. /package/dist/{timer-BPKOAfmx.js → timer-D7JVdX9U.js} +0 -0
  563. /package/dist/{toml-TFa3EJQE.js → toml-BfehlgmL.js} +0 -0
  564. /package/dist/{treemap-CmLtUuWe.js → treemap-qFGzn7xk.js} +0 -0
  565. /package/dist/{troff-SqLg0heF.js → troff-BZBk6AAu.js} +0 -0
  566. /package/dist/{ttcn-Cfrap7HJ.js → ttcn-DVwvXg0_.js} +0 -0
  567. /package/dist/{ttcn-cfg-Dopc-iwE.js → ttcn-cfg-gjbVLf1L.js} +0 -0
  568. /package/dist/{turtle-Dt52DvVH.js → turtle-CgxKXorV.js} +0 -0
  569. /package/dist/{vb-D1pAvfDe.js → vb-B9kSwTdM.js} +0 -0
  570. /package/dist/{vbscript-DZ7RBxn5.js → vbscript-DrUKSCdb.js} +0 -0
  571. /package/dist/{velocity-Csau7eZy.js → velocity-AlMYTnMy.js} +0 -0
  572. /package/dist/{verilog-gXlZACs5.js → verilog-DLUaM05j.js} +0 -0
  573. /package/dist/{vhdl-NaUWbI1B.js → vhdl-DUJOtSmO.js} +0 -0
  574. /package/dist/{webidl-BJmPjW01.js → webidl-CQp4aHk_.js} +0 -0
  575. /package/dist/{xquery-CJIPsC0g.js → xquery-IxkjlwOD.js} +0 -0
  576. /package/dist/{yacas-8f2Vjiiz.js → yacas-Bnctn5w8.js} +0 -0
  577. /package/dist/{z80-s5Xk2hCP.js → z80-DrFwhx53.js} +0 -0
@@ -369,6 +369,7 @@ const namesThatRequireSync = new Set<keyof RawBridge>([
369
369
  "rename_file",
370
370
  "create_file_or_directory",
371
371
  "delete_file_or_directory",
372
+ "copy_file_or_directory",
372
373
  "move_file_or_directory",
373
374
  "update_file",
374
375
  ]);
@@ -1,5 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- import { describe, expect, it } from "vitest";
2
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
3
+ import { hasRunAnyCellAtom } from "@/components/editor/cell/useRunCells";
4
+ import { store } from "@/core/state/jotai";
3
5
  import { isTrustedVirtualFileUrl } from "../trusted-url";
4
6
 
5
7
  describe("isTrustedVirtualFileUrl", () => {
@@ -45,4 +47,46 @@ describe("isTrustedVirtualFileUrl", () => {
45
47
  expect(isTrustedVirtualFileUrl(42)).toBe(false);
46
48
  expect(isTrustedVirtualFileUrl({})).toBe(false);
47
49
  });
50
+
51
+ describe("data URL exemption", () => {
52
+ let previousHasRunAnyCell: boolean;
53
+
54
+ beforeEach(() => {
55
+ previousHasRunAnyCell = store.get(hasRunAnyCellAtom);
56
+ store.set(hasRunAnyCellAtom, true);
57
+ });
58
+
59
+ afterEach(() => {
60
+ store.set(hasRunAnyCellAtom, previousHasRunAnyCell);
61
+ });
62
+
63
+ it.each([
64
+ "data:text/javascript;base64,ZXhwb3J0IGRlZmF1bHQge30=",
65
+ "data:application/javascript;base64,ZXhwb3J0IGRlZmF1bHQge30=",
66
+ "data:text/css;base64,Ym9keXt9",
67
+ ])("accepts safe data URL %s after a cell has run", (url) => {
68
+ expect(isTrustedVirtualFileUrl(url)).toBe(true);
69
+ });
70
+
71
+ it.each([
72
+ // Non-base64 data URLs are refused
73
+ "data:text/javascript,alert(1)",
74
+ "data:text/javascript;charset=utf-8,alert(1)",
75
+ // HTML / SVG / arbitrary types are refused
76
+ "data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==",
77
+ "data:image/svg+xml;base64,PHN2Zy8+",
78
+ "data:application/octet-stream;base64,AAA=",
79
+ ])("still rejects unsafe data URL %s", (url) => {
80
+ expect(isTrustedVirtualFileUrl(url)).toBe(false);
81
+ });
82
+
83
+ it("rejects data URL when no cell has been run", () => {
84
+ store.set(hasRunAnyCellAtom, false);
85
+ expect(
86
+ isTrustedVirtualFileUrl(
87
+ "data:text/javascript;base64,ZXhwb3J0IGRlZmF1bHQge30=",
88
+ ),
89
+ ).toBe(false);
90
+ });
91
+ });
48
92
  });
@@ -1,20 +1,45 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
+ import { hasRunAnyCellAtom } from "@/components/editor/cell/useRunCells";
4
+ import { store } from "@/core/state/jotai";
5
+
3
6
  /**
4
7
  * Whether a URL can be trusted to point at a marimo-served virtual file.
5
8
  *
6
9
  * Plugins that load remote scripts or stylesheets (e.g. MplInteractive, Panel)
7
10
  * must call this before turning a plugin-supplied URL into a `<script src>` or
8
- * `<link href>`. The backend always serializes these URLs as virtual file
11
+ * `<link href>`. The backend normally serializes these URLs as virtual file
9
12
  * paths of the form `./@file/<byte_length>-<filename>` (see
10
13
  * `VirtualFile.create_and_register`). Accepting anything else would let a
11
14
  * maliciously crafted `<marimo-*>` element embedded in markdown load
12
15
  * attacker-controlled JavaScript at same origin, since the HTML sanitizer
13
16
  * lets arbitrary marimo custom elements and attributes through.
17
+ *
18
+ * Some runtimes (WASM, VS Code) have no backend to serve virtual files, so
19
+ * `VirtualFile` falls back to inline base64 data URLs (see `virtual_file.py`).
20
+ * We accept those only once the user has explicitly run a cell in the current
21
+ * notebook — the same trust signal `sanitize.ts` uses to lift HTML
22
+ * sanitization. Running a cell requires deliberate user action and already
23
+ * executes arbitrary Python, so a data URL script loaded afterwards is not a
24
+ * new attack surface.
14
25
  */
15
26
  export function isTrustedVirtualFileUrl(url: unknown): url is string {
16
27
  if (typeof url !== "string" || url.length === 0) {
17
28
  return false;
18
29
  }
19
- return /^(\.?\/)?@file\/[^?#]+$/.test(url);
30
+ if (/^(\.?\/)?@file\/[^?#]+$/.test(url)) {
31
+ return true;
32
+ }
33
+ if (isSafeDataUrl(url) && store.get(hasRunAnyCellAtom)) {
34
+ return true;
35
+ }
36
+ return false;
37
+ }
38
+
39
+ function isSafeDataUrl(url: string): boolean {
40
+ return (
41
+ url.startsWith("data:text/javascript;base64,") ||
42
+ url.startsWith("data:application/javascript;base64,") ||
43
+ url.startsWith("data:text/css;base64,")
44
+ );
20
45
  }
@@ -83,19 +83,23 @@ interface Props extends Omit<
83
83
 
84
84
  const LoadingDataEditor = (props: Props) => {
85
85
  const [data, setData] = useState<unknown[]>([]);
86
- const [columnFields, setColumnFields] = useState<FieldTypes>({});
86
+ const [columnFields, setColumnFields] = useState<FieldTypes>(new Map());
87
87
 
88
88
  // Load the data
89
89
  const { error } = useAsyncData(async () => {
90
90
  const withoutExternalTypes = toFieldTypes(props.fieldTypes ?? []);
91
91
 
92
92
  // If we already have the data, return it
93
- // Otherwise, load the data from the URL
93
+ // Otherwise, load the data from the URL. Vega's CSV parser takes a
94
+ // plain `Record`; column order doesn't matter for parsing.
94
95
  const localData = Array.isArray(props.data)
95
96
  ? props.data
96
97
  : await vegaLoadData(
97
98
  props.data,
98
- { type: "csv", parse: getVegaFieldTypes(withoutExternalTypes) },
99
+ {
100
+ type: "csv",
101
+ parse: getVegaFieldTypes(Object.fromEntries(withoutExternalTypes)),
102
+ },
99
103
  { handleBigIntAndNumberLike: true },
100
104
  );
101
105
 
@@ -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
  });
@@ -1,6 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { CornerLeftUp } from "lucide-react";
3
+ import { type LucideIcon, CornerLeftUp } from "lucide-react";
4
4
  import { type JSX, useEffect, useState } from "react";
5
5
  import { z } from "zod";
6
6
  import {
@@ -128,6 +128,43 @@ interface FileBrowserProps extends Data, PluginFunctions {
128
128
  host: HTMLElement;
129
129
  }
130
130
 
131
+ interface CheckboxOrIconProps {
132
+ isSelected: boolean;
133
+ canSelect: boolean;
134
+ Icon: LucideIcon;
135
+ onSelect: () => void;
136
+ }
137
+
138
+ function CheckboxOrIcon({
139
+ isSelected,
140
+ canSelect,
141
+ Icon,
142
+ onSelect,
143
+ }: CheckboxOrIconProps) {
144
+ if (canSelect) {
145
+ return (
146
+ <>
147
+ <Checkbox
148
+ checked={isSelected}
149
+ onClick={(e) => {
150
+ onSelect();
151
+ e.stopPropagation();
152
+ }}
153
+ className={cn({ "hidden group-hover:flex": !isSelected })}
154
+ />
155
+ <Icon
156
+ size={16}
157
+ className={cn("mr-2", {
158
+ hidden: isSelected,
159
+ "group-hover:hidden": !isSelected,
160
+ })}
161
+ />
162
+ </>
163
+ );
164
+ }
165
+ return <Icon size={16} className="mr-2" />;
166
+ }
167
+
131
168
  /**
132
169
  * File browser component.
133
170
  *
@@ -145,7 +182,6 @@ export const FileBrowser = ({
145
182
  host,
146
183
  }: FileBrowserProps): JSX.Element | null => {
147
184
  const [path, setPath] = useInternalStateWithSync(initialPath);
148
- const [selectAllLabel, setSelectAllLabel] = useState("Select all");
149
185
  const [isUpdatingPath, setIsUpdatingPath] = useState(false);
150
186
  const [showLoadingOverlay, setShowLoadingOverlay] = useState(false);
151
187
 
@@ -158,7 +194,6 @@ export const FileBrowser = ({
158
194
  const { data, error, isPending } = useAsyncData(() => {
159
195
  return list_directory({ path: path });
160
196
  }, [path, randomId]);
161
- const spinnerLabel = "Listing files...";
162
197
 
163
198
  useEffect(() => {
164
199
  if (!isPending) {
@@ -175,25 +210,29 @@ export const FileBrowser = ({
175
210
  };
176
211
  }, [isPending]);
177
212
 
213
+ const files = data?.files ?? [];
214
+ const selectedPaths = new Set(value.map((x) => x.path));
215
+ const canSelectDirectories =
216
+ selectionMode === "directory" || selectionMode === "all";
217
+ const canSelectFiles = selectionMode === "file" || selectionMode === "all";
218
+
219
+ const selectable = files.filter(
220
+ (f) =>
221
+ (canSelectDirectories && f.is_directory) ||
222
+ (canSelectFiles && !f.is_directory),
223
+ );
224
+ const allSelected =
225
+ selectable.length > 0 && selectable.every((f) => selectedPaths.has(f.path));
226
+
178
227
  if (!data && error) {
179
228
  return <Banner kind="danger">{error.message}</Banner>;
180
229
  }
181
230
 
182
- let { files } = data || {};
183
- if (files === undefined) {
184
- files = [];
185
- }
186
-
187
231
  const pathBuilder = PathBuilder.guessDeliminator(initialPath);
188
232
  const delimiter = pathBuilder.deliminator;
189
233
 
190
- const selectedPaths = new Set(value.map((x) => x.path));
191
234
  const selectedFiles = value.map((x) => <li key={x.id}>{x.path}</li>);
192
235
 
193
- const canSelectDirectories =
194
- selectionMode === "directory" || selectionMode === "all";
195
- const canSelectFiles = selectionMode === "file" || selectionMode === "all";
196
-
197
236
  function setNewPath(newPath: string) {
198
237
  // Prevent updating path while updating
199
238
  if (isUpdatingPath) {
@@ -230,9 +269,7 @@ export const FileBrowser = ({
230
269
  return;
231
270
  }
232
271
 
233
- // Update path and reset select all label
234
272
  setPath(newPath);
235
- setSelectAllLabel("Select all");
236
273
  setIsUpdatingPath(false);
237
274
  }
238
275
 
@@ -264,28 +301,18 @@ export const FileBrowser = ({
264
301
  }) {
265
302
  const fileInfo = createFileInfo({ path, name, isDirectory });
266
303
 
267
- if (multiple) {
268
- if (selectedPaths.has(path)) {
269
- setValue(value.filter((x) => x.path !== path));
270
- setSelectAllLabel("Select all");
271
- } else {
272
- setValue([...value, fileInfo]);
273
- }
304
+ if (selectedPaths.has(path)) {
305
+ setValue(value.filter((x) => x.path !== path));
274
306
  } else {
275
- setValue([fileInfo]);
307
+ setValue(multiple ? [...value, fileInfo] : [fileInfo]);
276
308
  }
277
309
  }
278
310
 
279
311
  function deselectAllFiles() {
280
312
  setValue(value.filter((x) => Paths.dirname(x.path) !== path));
281
- setSelectAllLabel("Select all");
282
313
  }
283
314
 
284
315
  function selectAllFiles() {
285
- if (!files) {
286
- return;
287
- }
288
-
289
316
  const filesInView: FileInfo[] = [];
290
317
 
291
318
  for (const file of files) {
@@ -304,7 +331,6 @@ export const FileBrowser = ({
304
331
  }
305
332
 
306
333
  setValue([...value, ...filesInView]);
307
- setSelectAllLabel("Deselect all");
308
334
  }
309
335
 
310
336
  // Create rows for directories and files
@@ -313,7 +339,7 @@ export const FileBrowser = ({
313
339
  // Parent directory ".." row button
314
340
  fileRows.push(
315
341
  <TableRow
316
- className="hover:bg-primary hover:bg-opacity-25 select-none"
342
+ className="hover:bg-accent select-none"
317
343
  key={"Parent directory"}
318
344
  onClick={() => setNewPath(PARENT_DIRECTORY)}
319
345
  >
@@ -344,50 +370,13 @@ export const FileBrowser = ({
344
370
  const Icon = FILE_TYPE_ICONS[fileType];
345
371
 
346
372
  const isSelected = selectedPaths.has(filePath);
347
- const renderCheckboxOrIcon = () => {
348
- if (
349
- (canSelectDirectories && file.is_directory) ||
350
- (canSelectFiles && !file.is_directory)
351
- ) {
352
- return (
353
- <>
354
- <Checkbox
355
- checked={isSelected}
356
- onClick={(e) => {
357
- handleSelection({
358
- path: filePath,
359
- name: file.name,
360
- isDirectory: file.is_directory,
361
- });
362
- e.stopPropagation();
363
- }}
364
- className={cn("", {
365
- "hidden group-hover:flex": !isSelected,
366
- })}
367
- />
368
- <Icon
369
- size={16}
370
- className={cn("mr-2", {
371
- hidden: isSelected,
372
- "group-hover:hidden": !isSelected,
373
- })}
374
- />
375
- </>
376
- );
377
- }
378
-
379
- return <Icon size={16} className="mr-2" />;
380
- };
381
373
 
382
374
  fileRows.push(
383
375
  <TableRow
384
376
  key={file.id}
385
- className={cn(
386
- "hover:bg-primary hover:bg-opacity-25 group select-none",
387
- {
388
- "bg-primary bg-opacity-25": isSelected,
389
- },
390
- )}
377
+ className={cn("hover:bg-accent group select-none", {
378
+ "bg-primary/25 hover:bg-primary/35": isSelected,
379
+ })}
391
380
  onClick={() =>
392
381
  handleClick({
393
382
  path: filePath,
@@ -397,7 +386,21 @@ export const FileBrowser = ({
397
386
  }
398
387
  >
399
388
  <TableCell className="w-[50px] pl-4">
400
- {renderCheckboxOrIcon()}
389
+ <CheckboxOrIcon
390
+ isSelected={isSelected}
391
+ canSelect={
392
+ (canSelectDirectories && file.is_directory) ||
393
+ (canSelectFiles && !file.is_directory)
394
+ }
395
+ Icon={Icon}
396
+ onSelect={() =>
397
+ handleSelection({
398
+ path: filePath,
399
+ name: file.name,
400
+ isDirectory: file.is_directory,
401
+ })
402
+ }
403
+ />
401
404
  </TableCell>
402
405
  <TableCell>{file.name}</TableCell>
403
406
  </TableRow>,
@@ -423,8 +426,9 @@ export const FileBrowser = ({
423
426
  : PluralWords.of("file");
424
427
 
425
428
  const renderHeader = () => {
426
- label = label ?? `Select ${selectionKindLabel.join(" and ", 2)}...`;
427
- const labelText = <Label>{renderHTML({ html: label })}</Label>;
429
+ const displayLabel =
430
+ label ?? `Select ${selectionKindLabel.join(" and ", 2)}...`;
431
+ const labelText = <Label>{renderHTML({ html: displayLabel })}</Label>;
428
432
 
429
433
  if (multiple) {
430
434
  return (
@@ -434,13 +438,9 @@ export const FileBrowser = ({
434
438
  <Button
435
439
  size="xs"
436
440
  variant="link"
437
- onClick={
438
- selectAllLabel === "Select all"
439
- ? () => selectAllFiles()
440
- : () => deselectAllFiles()
441
- }
441
+ onClick={allSelected ? deselectAllFiles : selectAllFiles}
442
442
  >
443
- {renderHTML({ html: selectAllLabel })}
443
+ {allSelected ? "Deselect all" : "Select all"}
444
444
  </Button>
445
445
  </div>
446
446
  </div>
@@ -461,7 +461,7 @@ export const FileBrowser = ({
461
461
  onChange={(e) => setNewPath(e.target.value)}
462
462
  >
463
463
  {parentDirectories.map((dir) => (
464
- <option value={dir} key={dir} selected={dir === path}>
464
+ <option value={dir} key={dir}>
465
465
  {dir}
466
466
  </option>
467
467
  ))}
@@ -487,7 +487,7 @@ export const FileBrowser = ({
487
487
  role="status"
488
488
  >
489
489
  <Spinner size="small" />
490
- <span>{spinnerLabel}</span>
490
+ <span>Listing files...</span>
491
491
  </div>
492
492
  )}
493
493
  <Table className="cursor-pointer table-fixed">
@@ -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
  };