@marimo-team/islands 0.22.0 → 0.22.1-dev10

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 (503) hide show
  1. package/dist/{ConnectedDataExplorerComponent-CTfvzyMi.js → ConnectedDataExplorerComponent-iT7t3FxV.js} +12 -12
  2. package/dist/{_basePickBy-DEctY8Qy.js → _basePickBy-QjOmBDRE.js} +3 -10
  3. package/dist/{_baseSet-Bk810b_4.js → _baseSet-xgn1IbGV.js} +8 -1
  4. package/dist/{_baseUniq-B1NzzhU7.js → _baseUniq-B4eL5sTC.js} +2 -2
  5. package/dist/{any-language-editor-Bj-3432h.js → any-language-editor-CT_9yBde.js} +18 -18
  6. package/dist/apl-C1bki_dE.js +4 -0
  7. package/dist/{arc-CEWBr4jc.js → arc-DLJpPF9M.js} +2 -2
  8. package/dist/architecture-7HQA4BMR-BRyVh_Za.js +6 -0
  9. package/dist/{architectureDiagram-VXUJARFQ-BKlUkb-q.js → architectureDiagram-VXUJARFQ-vxgYGIMP.js} +19 -19
  10. package/dist/arrays-Du-jRBAy.js +55 -0
  11. package/dist/asciiarmor-BdlkCCRr.js +4 -0
  12. package/dist/asn1-CvE30hox.js +4 -0
  13. package/dist/{blockDiagram-VD42YOAC-DvgBlX1D.js → blockDiagram-VD42YOAC-C7x6YTH7.js} +14 -14
  14. package/dist/brainfuck-BalwWy1a.js +4 -0
  15. package/dist/{c4Diagram-YG6GDRKO-BN-xpNUK.js → c4Diagram-YG6GDRKO-Cx4oseGg.js} +6 -6
  16. package/dist/{capabilities-BC3mzKnw.js → capabilities-26mwv03y.js} +1 -1
  17. package/dist/{channel-Dz_ka_DS.js → channel-C_50jIAn.js} +1 -1
  18. package/dist/{chat-ui-BvK3aDSR.js → chat-ui-CtqUthFR.js} +19 -19
  19. package/dist/{chunk-4BX2VUAB-BChPAwlt.js → chunk-4BX2VUAB-C2skOn1Z.js} +1 -1
  20. package/dist/{chunk-4F5CHEZ2-9eJ5uB6a.js → chunk-4F5CHEZ2-Dvo_CFnR.js} +1 -1
  21. package/dist/{chunk-55IACEB6-wWyiO7Qo.js → chunk-55IACEB6-DRsSqxbU.js} +1 -1
  22. package/dist/{chunk-5FQGJX7Z-DHiDX6JT.js → chunk-5FQGJX7Z-C428iZBW.js} +3 -3
  23. package/dist/{chunk-ABZYJK2D-DYZpeLRO.js → chunk-ABZYJK2D-D5YIs71w.js} +3 -3
  24. package/dist/{chunk-ATLVNIR6-9VSIMo3q.js → chunk-ATLVNIR6-CyOjzOcf.js} +2 -2
  25. package/dist/{chunk-B2363JML-CkfqLBeZ.js → chunk-B2363JML-BzZqINRO.js} +1 -1
  26. package/dist/{chunk-B4BG7PRW-CyIVj-RO.js → chunk-B4BG7PRW-ZJeV3KdD.js} +7 -7
  27. package/dist/{chunk-CVBHYZKI-DqdOZevv.js → chunk-CVBHYZKI-BXHgce-x.js} +1 -1
  28. package/dist/{chunk-DI55MBZ5-kmoX4_PJ.js → chunk-DI55MBZ5-Dx_wwX6l.js} +6 -6
  29. package/dist/{chunk-EXTU4WIE-anbpETeD.js → chunk-EXTU4WIE-CgefpSXQ.js} +2 -2
  30. package/dist/{chunk-FMBD7UC4-WPL5C7Yr.js → chunk-FMBD7UC4-BjIaI-XO.js} +1 -1
  31. package/dist/{chunk-FRFDVMJY-DiBbw2aO.js → chunk-FRFDVMJY-Derq8UzY.js} +1 -1
  32. package/dist/{chunk-HN2XXSSU-GC9oeSst.js → chunk-HN2XXSSU-DAhNp1ig.js} +1 -1
  33. package/dist/{chunk-JA3XYJ7Z-DT9thFja.js → chunk-JA3XYJ7Z-CcIOIFpc.js} +3 -3
  34. package/dist/{chunk-JZLCHNYA-CoUG-3_5.js → chunk-JZLCHNYA-CgO0GG1p.js} +6 -6
  35. package/dist/{chunk-MI3HLSF2-CAUClZTk.js → chunk-MI3HLSF2-AKwFNP3m.js} +1 -1
  36. package/dist/{chunk-N4CR4FBY-CgZCueW4.js → chunk-N4CR4FBY-2qzGzAxT.js} +7 -7
  37. package/dist/{chunk-PL6DKKU2-B93gSUY5.js → chunk-PL6DKKU2-KoG71Zin.js} +1 -1
  38. package/dist/{chunk-QN33PNHL-T-uF7h40.js → chunk-QN33PNHL-Dp1qBo28.js} +2 -2
  39. package/dist/{chunk-QXUST7PY-D1a8s9iP.js → chunk-QXUST7PY-BxmmeIwf.js} +10 -10
  40. package/dist/{chunk-QZHKN3VN-cTJMhkeY.js → chunk-QZHKN3VN-BK9tlbfw.js} +1 -1
  41. package/dist/{chunk-S3R3BYOJ-KAv7zltL.js → chunk-S3R3BYOJ-D3Rys9ZW.js} +6 -6
  42. package/dist/{chunk-SJTYNZTY-CxP2rIlm.js → chunk-SJTYNZTY-Co-DhKAG.js} +1 -1
  43. package/dist/{chunk-TCCFYFTB-BrhaBdR8.js → chunk-TCCFYFTB-BAhzIqBO.js} +6 -6
  44. package/dist/{chunk-TQ3KTPDO-C0j_j938.js → chunk-TQ3KTPDO-DxYI735Z.js} +1 -1
  45. package/dist/{chunk-TZMSLE5B-BY2BhygM.js → chunk-TZMSLE5B-Dxumt0wv.js} +3 -3
  46. package/dist/{chunk-UMXZTB3W-BDwe1tzK.js → chunk-UMXZTB3W-CuahpKin.js} +1 -1
  47. package/dist/classDiagram-2ON5EDUG-DkOvXRlx.js +30 -0
  48. package/dist/classDiagram-v2-WZHVMYZB-CYoFMQKE.js +30 -0
  49. package/dist/{clike-D8Yzpo0X.js → clike-B90WKs4D.js} +1 -1
  50. package/dist/clojure-CUC2I1hM.js +4 -0
  51. package/dist/{clone-DgKKB0qR.js → clone-DDndUqI0.js} +1 -1
  52. package/dist/cmake-8PcMxXnB.js +4 -0
  53. package/dist/cobol-DkkkDz5v.js +4 -0
  54. package/dist/{code-block-37QAKDTI-CdeP6GC3.js → code-block-37QAKDTI-D9EnJeBI.js} +1 -1
  55. package/dist/coffeescript-CCupxOZf.js +4 -0
  56. package/dist/commonlisp-DhUfGX6b.js +4 -0
  57. package/dist/{constants-CXiS0vdr.js → constants-D1Am36hX.js} +1 -1
  58. package/dist/{cose-bilkent-S5V4N54A-CFYo67PX.js → cose-bilkent-S5V4N54A-DvCk1aXi.js} +2 -2
  59. package/dist/crystal-DSaw6rFQ.js +4 -0
  60. package/dist/css-D4QDewkG.js +4 -0
  61. package/dist/cypher-CrYVqw_F.js +4 -0
  62. package/dist/d-Cr3H3pPx.js +4 -0
  63. package/dist/{dagre-6UL2VRFP-CblBywCi.js → dagre-6UL2VRFP-BXBaU8PB.js} +16 -16
  64. package/dist/{dagre-lLfkMavw.js → dagre-D3dlYz-r.js} +9 -19
  65. package/dist/{data-grid-overlay-editor-nQBPvGNe.js → data-grid-overlay-editor-nZux6_d2.js} +2 -2
  66. package/dist/{diagram-PSM6KHXK-CEWNAeex.js → diagram-PSM6KHXK-CJxjk4LG.js} +22 -22
  67. package/dist/{diagram-QEK2KX5R-DvNPI6r6.js → diagram-QEK2KX5R-IMILPh_p.js} +17 -17
  68. package/dist/{diagram-S2PKOQOG-Bd8sWp1V.js → diagram-S2PKOQOG-6O0g6Boj.js} +17 -17
  69. package/dist/diff-ODiZJGls.js +4 -0
  70. package/dist/{dist-5XnuIjzQ.js → dist-5nTQE2yt.js} +2 -2
  71. package/dist/dist-B0R_ZM4-.js +6 -0
  72. package/dist/dist-B4a9_9pj.js +5 -0
  73. package/dist/{dist-DqWKkHpR.js → dist-B6Op2ogv.js} +2 -2
  74. package/dist/{dist-n5m_P2Mr.js → dist-B9KLrfoh.js} +1 -1
  75. package/dist/dist-BCSUKEwO.js +5 -0
  76. package/dist/{dist-B7Wxocl4.js → dist-BJ3fhRYu.js} +2 -2
  77. package/dist/dist-BONIDQq6.js +5 -0
  78. package/dist/{dist-C-8pSTml.js → dist-BUSLKXcu.js} +2 -2
  79. package/dist/dist-BYeRx2hb.js +5 -0
  80. package/dist/{dist-nggqqIVv.js → dist-BemtTYzN.js} +5 -5
  81. package/dist/{dist-DM6PPTtq.js → dist-BiZZAo22.js} +1 -1
  82. package/dist/{dist-DS6k03oP.js → dist-BkXs8bw0.js} +1 -1
  83. package/dist/{dist-CgCO1-j-.js → dist-BoNJsA65.js} +1 -1
  84. package/dist/{dist-_k5rxRQI.js → dist-Brb6VNc4.js} +2 -2
  85. package/dist/{dist-B5pakFbT.js → dist-C-EcLtO9.js} +1 -1
  86. package/dist/{dist-CD0aazOL.js → dist-C0XYIHKJ.js} +1 -1
  87. package/dist/{dist-C6R5LnmH.js → dist-C9qF7MRB.js} +2 -2
  88. package/dist/{dist-DFBgTyQ4.js → dist-CBwMSFDu.js} +2 -2
  89. package/dist/{dist-BnIjtwRq.js → dist-CQidOwep.js} +3 -3
  90. package/dist/{dist-BKKbDTix.js → dist-CTwGwcQ8.js} +2 -2
  91. package/dist/{dist-B7pzGu3v.js → dist-CVqlhD3M.js} +2 -2
  92. package/dist/{dist-Dv7FDx1_.js → dist-Ci_jEudG.js} +1 -1
  93. package/dist/{dist-xzh9kCE-.js → dist-CnFp2Kcl.js} +2 -2
  94. package/dist/{dist-BqO6WmbK.js → dist-CxAX99oC.js} +2 -2
  95. package/dist/{dist-DJ3EjUNc.js → dist-DBXPlQ0D.js} +1 -1
  96. package/dist/{dist-DUY_SIWT.js → dist-DBYL08Lu.js} +4 -4
  97. package/dist/{dist-DInzmbT2.js → dist-DLNKBPsk.js} +4 -4
  98. package/dist/{dist-C_tLMuB0.js → dist-DStU8He1.js} +2 -2
  99. package/dist/dist-DZjX5TYv.js +5 -0
  100. package/dist/{dist-B4HRhSlD.js → dist-Dg65j0em.js} +1 -1
  101. package/dist/{dist-Ck4gp1Wp.js → dist-DjaZNkZ7.js} +3 -3
  102. package/dist/dist-Dkw9x6kc.js +5 -0
  103. package/dist/{dist-BnCNDnA7.js → dist-DmFS6KZW.js} +3 -3
  104. package/dist/dist-Ds6UaXGR.js +6 -0
  105. package/dist/{dist-DqezbmBd.js → dist-DwmxBUOe.js} +2 -2
  106. package/dist/dist-KuEJ1Q53.js +8 -0
  107. package/dist/dist-S72WNyTZ.js +5 -0
  108. package/dist/dist-bTG-yssT.js +5 -0
  109. package/dist/dist-diF0sguc.js +8 -0
  110. package/dist/dist-mJ84BIgu.js +8 -0
  111. package/dist/{dist-CDXh0OSg.js → dist-qoCY8giM.js} +2 -2
  112. package/dist/{dist-BmqJ8_Hr.js → dist-v-1kgqZ3.js} +1 -1
  113. package/dist/dist-wSIhFWQz.js +8 -0
  114. package/dist/{dockerfile-m9DOSpI5.js → dockerfile-DfXhjEUG.js} +1 -1
  115. package/dist/dtd-C-t2Rk7F.js +4 -0
  116. package/dist/dylan-B4ctBLGp.js +4 -0
  117. package/dist/ecl-DqWfymni.js +4 -0
  118. package/dist/eiffel-DjBKKAr7.js +4 -0
  119. package/dist/elm--fxeC0FV.js +4 -0
  120. package/dist/{erDiagram-Q2GNP2WA-C5bM6dcx.js → erDiagram-Q2GNP2WA-sho7Cl9f.js} +15 -15
  121. package/dist/erlang-CaKXCX6H.js +4 -0
  122. package/dist/{esm-C9_jY_wu.js → esm-CMg2ABu6.js} +2 -2
  123. package/dist/{esm-BBsFNcPe.js → esm-cqK9POGH.js} +105 -105
  124. package/dist/{factor-Nva0iSXt.js → factor--4HHM8Rw.js} +1 -1
  125. package/dist/factor-DlLO5EFS.js +4 -0
  126. package/dist/{flowDiagram-NV44I4VS-CULNNnl6.js → flowDiagram-NV44I4VS-C4nY4Fbz.js} +17 -17
  127. package/dist/forth-rOO6LVj_.js +4 -0
  128. package/dist/fortran-CUg15VGR.js +4 -0
  129. package/dist/{ganttDiagram-JELNMOA3-DIi-PAjP.js → ganttDiagram-JELNMOA3-CtxNcCM2.js} +10 -10
  130. package/dist/gas-BMRJspiW.js +4 -0
  131. package/dist/{get-CqYRpAGT.js → get-CqrzlV1v.js} +1 -1
  132. package/dist/gherkin-DRxzijZU.js +4 -0
  133. package/dist/{gitGraph-G5XIXVHT-S7ypWRtz.js → gitGraph-G5XIXVHT-SL6TDof6.js} +3 -3
  134. package/dist/{gitGraphDiagram-V2S2FVAM-BGDZsLhF.js → gitGraphDiagram-V2S2FVAM-D9885mxd.js} +17 -17
  135. package/dist/{glide-data-editor-D0IYL4_F.js → glide-data-editor-CkVEV-Gk.js} +8 -8
  136. package/dist/{graphlib-TFMRsJse.js → graphlib-CxWdvYQt.js} +2 -2
  137. package/dist/groovy-BmrQ8pUP.js +4 -0
  138. package/dist/haskell-BuaYfKOz.js +4 -0
  139. package/dist/haxe-DcH9eA0a.js +5 -0
  140. package/dist/idl-DGlcm4Ls.js +4 -0
  141. package/dist/{info-VBDWY6EO-CRCLLsdb.js → info-VBDWY6EO-6MXPTSmi.js} +3 -3
  142. package/dist/infoDiagram-HS3SLOUP-Bw2FlRwF.js +30 -0
  143. package/dist/{input-C5uUN4xL.js → input-BSde8uV4.js} +4 -4
  144. package/dist/javascript-CeTk7rzr.js +4 -0
  145. package/dist/{journeyDiagram-XKPGCS4Q-DUANVNzR.js → journeyDiagram-XKPGCS4Q-BXlCEth8.js} +7 -7
  146. package/dist/julia-BoP_q1gm.js +4 -0
  147. package/dist/{kanban-definition-3W4ZIXB7-dEyZPMAd.js → kanban-definition-3W4ZIXB7-CorxzSYm.js} +12 -12
  148. package/dist/{katex-Ckd8lBne.js → katex-CkLtKXwv.js} +1 -1
  149. package/dist/{label-DwSVaniz.js → label-DTNqw9tv.js} +1 -1
  150. package/dist/{line-LK_5q2B9.js → line-PAEmCpyD.js} +3 -3
  151. package/dist/{linear-CJ6ctpF3.js → linear-v57w-fIs.js} +4 -4
  152. package/dist/livescript-B7IMN-ba.js +4 -0
  153. package/dist/{loader-DrMJeyDu.js → loader-CMMa6QVT.js} +5 -2
  154. package/dist/lua-q1InavKb.js +4 -0
  155. package/dist/main.js +4412 -4445
  156. package/dist/mathematica-DvR8-_EI.js +4 -0
  157. package/dist/mbox-7h5MNBS_.js +4 -0
  158. package/dist/{mermaid-4DMBBIKO-C2ajbN0u.js → mermaid-4DMBBIKO-Cw46o6DN.js} +1 -1
  159. package/dist/{mermaid-Bwy7OYzI.js → mermaid-CEKslOkI.js} +46 -46
  160. package/dist/{mermaid-parser.core-DDGHdNnp.js → mermaid-parser.core-cq4YDee-.js} +8 -8
  161. package/dist/{mhchem-DAXq6Zll.js → mhchem-BuY5LDSq.js} +1 -1
  162. package/dist/{mindmap-definition-VGOIOE7T-jZ7-PfhM.js → mindmap-definition-VGOIOE7T-DRsT8UaN.js} +14 -14
  163. package/dist/mirc-D-XM8A5c.js +4 -0
  164. package/dist/mllike-BQGkkbmf.js +6 -0
  165. package/dist/modelica-D_yRj_WU.js +4 -0
  166. package/dist/mscgen-B-rltAjp.js +6 -0
  167. package/dist/mumps-2kh8TU2b.js +4 -0
  168. package/dist/{nsis-DgKbDAVQ.js → nsis-B6EN9LWI.js} +1 -1
  169. package/dist/nsis-CtusEqwb.js +4 -0
  170. package/dist/ntriples-BdAXw6zV.js +4 -0
  171. package/dist/{number-overlay-editor-BqzX9dHu.js → number-overlay-editor-DxLoVuuE.js} +1 -1
  172. package/dist/octave-CsNFmVp5.js +4 -0
  173. package/dist/{once-BfpiMcdf.js → once-CZno0h-b.js} +1 -1
  174. package/dist/{ordinal-COPPjmMz.js → ordinal-D7fa8Sey.js} +1 -1
  175. package/dist/oz-odIXCrKd.js +4 -0
  176. package/dist/{packet-DYOGHKS2-DPTC67cY.js → packet-DYOGHKS2-Dw08gMaZ.js} +3 -3
  177. package/dist/pascal-B9Mfk3Fo.js +4 -0
  178. package/dist/perl-C48inLcz.js +4 -0
  179. package/dist/{pie-VRWISCQL-DfbgsrV5.js → pie-VRWISCQL-C5SPSvT8.js} +3 -3
  180. package/dist/{pieDiagram-ADFJNKIX-BiAFdzOP.js → pieDiagram-ADFJNKIX-DhJ1Cx2O.js} +22 -22
  181. package/dist/pig-uwRtAssU.js +4 -0
  182. package/dist/powershell-CXqlca-i.js +4 -0
  183. package/dist/{precisionRound-Duzbr5ur.js → precisionRound-CGLoV26P.js} +1 -1
  184. package/dist/{process-output-CT8hHGp6.js → process-output-KyzWazB-.js} +163 -163
  185. package/dist/properties-D6Zu1rpK.js +4 -0
  186. package/dist/protobuf-BlNNWZaR.js +4 -0
  187. package/dist/pug-DytcK7bv.js +4 -0
  188. package/dist/{pug-CTpLcc1b.js → pug-xrm7jQ2R.js} +1 -1
  189. package/dist/puppet-lJ8Ok3iY.js +4 -0
  190. package/dist/python-cMaF7kUp.js +4 -0
  191. package/dist/q-Dgt2HYQh.js +4 -0
  192. package/dist/{quadrantDiagram-AYHSOK5B-CZjWO4oG.js → quadrantDiagram-AYHSOK5B-DXUFIWlz.js} +5 -5
  193. package/dist/r-Bm4S4awf.js +4 -0
  194. package/dist/{radar-ZZBFDIW7-B5Hwx2a8.js → radar-ZZBFDIW7-BvY0bgSg.js} +3 -3
  195. package/dist/range-CYz5jI--.js +17 -0
  196. package/dist/{react-vega-JMnqwKtN.js → react-vega-CzRAIHrv.js} +18 -18
  197. package/dist/react-vega-DayQmZjG.js +9 -0
  198. package/dist/{requirementDiagram-UZGBJVZJ-D9PkMDa5.js → requirementDiagram-UZGBJVZJ-DO_gtQIb.js} +14 -14
  199. package/dist/rpm-_8LbzMVc.js +5 -0
  200. package/dist/ruby-Cr8IJ5VZ.js +4 -0
  201. package/dist/{sankeyDiagram-TZEHDZUN-DuCG1ouO.js → sankeyDiagram-TZEHDZUN-OZzXEkuG.js} +5 -5
  202. package/dist/sas-CFcSfo2_.js +4 -0
  203. package/dist/scheme-N4XRoKgc.js +4 -0
  204. package/dist/{sequenceDiagram-WL72ISMW-BLJqizTv.js → sequenceDiagram-WL72ISMW-K7nZRifV.js} +8 -8
  205. package/dist/shell-B4L7f_ds.js +4 -0
  206. package/dist/sieve-UI6J3Gm0.js +4 -0
  207. package/dist/{slides-component-BsaaAy66.js → slides-component-CIcSvFh7.js} +1 -1
  208. package/dist/smalltalk-BuaPZAZU.js +4 -0
  209. package/dist/sparql-1rKrq463.js +4 -0
  210. package/dist/{spec-BLAZSydG.js → spec-DYaR1rJh.js} +2 -2
  211. package/dist/{src-szye8OCw.js → src-DbP20yFZ.js} +1 -1
  212. package/dist/{stateDiagram-FKZM4ZOC-CmZfv4_-.js → stateDiagram-FKZM4ZOC-DzXJZAq7.js} +19 -19
  213. package/dist/stateDiagram-v2-4FDKWEC3-BZBPUmyF.js +29 -0
  214. package/dist/{step-1PmBKr2y.js → step-qd10PbTJ.js} +1 -1
  215. package/dist/stex-CZyTRGVB.js +4 -0
  216. package/dist/style.css +1 -1
  217. package/dist/stylus-DvSovJEP.js +4 -0
  218. package/dist/swift-D-_E7Yyb.js +4 -0
  219. package/dist/tcl-Di5sAVHN.js +4 -0
  220. package/dist/textile-Benwt66z.js +4 -0
  221. package/dist/{time-B8tcX_hU.js → time-Bdnxi22U.js} +4 -4
  222. package/dist/{timeline-definition-IT6M3QCI-C7yv4fEk.js → timeline-definition-IT6M3QCI-DNoLAh-i.js} +4 -4
  223. package/dist/{toDate-BWaG12Pv.js → toDate-D6VXexnV.js} +2 -2
  224. package/dist/toml-CeOvPOkY.js +4 -0
  225. package/dist/{treemap-GDKQZRPO-B_LAAEIM.js → treemap-GDKQZRPO-C5OoxpmV.js} +3 -3
  226. package/dist/troff-DJN9hfgu.js +4 -0
  227. package/dist/ttcn-DQW2Psjf.js +4 -0
  228. package/dist/ttcn-cfg-zFG_MNpg.js +4 -0
  229. package/dist/turtle-DHRyNlSc.js +4 -0
  230. package/dist/{types-Dqw69fPc.js → types-CQ-RbYxp.js} +1 -1
  231. package/dist/{useAsyncData-Dqt2tV1E.js → useAsyncData-Cd4Urlww.js} +2 -2
  232. package/dist/{useDeepCompareMemoize-D2PKDkrk.js → useDeepCompareMemoize-DOzKCTzc.js} +3 -3
  233. package/dist/{useIframeCapabilities-DlwLttZw.js → useIframeCapabilities-BVQrlRBd.js} +1 -1
  234. package/dist/{useLifecycle-CJ_5Z4Mk.js → useLifecycle-Dids8BPm.js} +1 -1
  235. package/dist/{useTheme-BIAKDAh6.js → useTheme-Dm1WaAGy.js} +1 -1
  236. package/dist/vb-CXWH9DD-.js +4 -0
  237. package/dist/vbscript-qr8qVck5.js +4 -0
  238. package/dist/{vega-component-CTOT0vRO.js → vega-component-BaDgUvQP.js} +12 -12
  239. package/dist/{vega-loader.browser-hMqVC9bf.js → vega-loader.browser-DqEcFOPD.js} +3 -3
  240. package/dist/velocity-C_9pUJRx.js +4 -0
  241. package/dist/verilog-DxBstgBa.js +4 -0
  242. package/dist/vhdl-odUxAbE6.js +4 -0
  243. package/dist/webidl-Dfn5Rku4.js +4 -0
  244. package/dist/xquery-CrJs6SXr.js +4 -0
  245. package/dist/{xychartDiagram-PRI3JC2R-DC0-6FAB.js → xychartDiagram-PRI3JC2R-ehVeySMW.js} +13 -13
  246. package/dist/yacas-B-uDDLZe.js +4 -0
  247. package/dist/z80-51gxgAXE.js +4 -0
  248. package/package.json +1 -1
  249. package/src/__tests__/branded.ts +6 -0
  250. package/src/components/data-table/TableBottomBar.tsx +176 -0
  251. package/src/components/data-table/TableTopBar.tsx +137 -0
  252. package/src/components/data-table/charts/charts.tsx +40 -11
  253. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
  254. package/src/components/data-table/data-table.tsx +35 -37
  255. package/src/components/data-table/export-actions.tsx +231 -0
  256. package/src/components/data-table/loading-table.tsx +4 -1
  257. package/src/components/data-table/pagination.tsx +171 -251
  258. package/src/components/data-table/range-focus/__tests__/cell-selection-stats.test.tsx +16 -12
  259. package/src/components/data-table/range-focus/cell-selection-stats.tsx +11 -2
  260. package/src/components/data-table/row-viewer-panel/row-viewer.tsx +1 -1
  261. package/src/components/data-table/table-explorer-panel/table-explorer-panel.tsx +2 -2
  262. package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +1 -1
  263. package/src/core/cells/__tests__/apply-transaction.test.ts +12 -11
  264. package/src/core/cells/document-changes.ts +9 -9
  265. package/src/core/islands/__tests__/bridge.test.ts +20 -10
  266. package/src/core/network/__tests__/requests-lazy.test.ts +30 -14
  267. package/src/core/websocket/useMarimoKernelConnection.tsx +5 -11
  268. package/src/css/app/Cell.css +22 -1
  269. package/src/css/table.css +17 -0
  270. package/src/plugins/impl/DataTablePlugin.tsx +5 -0
  271. package/src/plugins/impl/vega/__tests__/utils.test.ts +68 -0
  272. package/src/plugins/impl/vega/utils.ts +14 -5
  273. package/src/plugins/impl/vega/vega.css +2 -1
  274. package/src/utils/time.ts +4 -2
  275. package/src/utils/typed.ts +2 -2
  276. package/dist/apl-Y7yFAg6_.js +0 -4
  277. package/dist/architecture-7HQA4BMR-SvLOcNCN.js +0 -6
  278. package/dist/arrays--2cd0hte.js +0 -59
  279. package/dist/asciiarmor-Bl8b2p0w.js +0 -4
  280. package/dist/asn1-BF6cywqm.js +0 -4
  281. package/dist/brainfuck-BuqydWe3.js +0 -4
  282. package/dist/classDiagram-2ON5EDUG-LT-Hu_dE.js +0 -30
  283. package/dist/classDiagram-v2-WZHVMYZB-G4qrOqlY.js +0 -30
  284. package/dist/clojure-CAHAWK5H.js +0 -4
  285. package/dist/cmake-BogDc4GF.js +0 -4
  286. package/dist/cobol-DRnpeU4u.js +0 -4
  287. package/dist/coffeescript-9MgX7RN8.js +0 -4
  288. package/dist/commonlisp-CVz2KONN.js +0 -4
  289. package/dist/crystal-td8mwLG5.js +0 -4
  290. package/dist/css-BK451dBn.js +0 -4
  291. package/dist/cypher-DuNPR6Ie.js +0 -4
  292. package/dist/d-DL6oP_-2.js +0 -4
  293. package/dist/diff-D9CplOBj.js +0 -4
  294. package/dist/dist-BOx8CJbo.js +0 -5
  295. package/dist/dist-BYoWtcAc.js +0 -5
  296. package/dist/dist-BaGdTXK1.js +0 -5
  297. package/dist/dist-BhGA2ia0.js +0 -8
  298. package/dist/dist-BoHuwe5C.js +0 -5
  299. package/dist/dist-CJ-2wW2z.js +0 -8
  300. package/dist/dist-Ccbo2rCF.js +0 -8
  301. package/dist/dist-CwayJLIO.js +0 -5
  302. package/dist/dist-D-jpfI6q.js +0 -6
  303. package/dist/dist-DShjplLu.js +0 -8
  304. package/dist/dist-DhBqFguQ.js +0 -5
  305. package/dist/dist-DiCgMCy4.js +0 -6
  306. package/dist/dist-Dqa-QKVa.js +0 -5
  307. package/dist/dist-OFv2DOPe.js +0 -5
  308. package/dist/dtd-Ce1c54UO.js +0 -4
  309. package/dist/dylan-B43wjIwg.js +0 -4
  310. package/dist/ecl-DK-fZmir.js +0 -4
  311. package/dist/eiffel-CNuvvPqD.js +0 -4
  312. package/dist/elm-DZEkBjgQ.js +0 -4
  313. package/dist/erlang-Dw4PDZV_.js +0 -4
  314. package/dist/factor-C9JRv63g.js +0 -4
  315. package/dist/forth-CKhoqn4e.js +0 -4
  316. package/dist/fortran-Do51bToK.js +0 -4
  317. package/dist/gas-BZfL3Uwh.js +0 -4
  318. package/dist/gherkin-BwQh4ehw.js +0 -4
  319. package/dist/groovy-CG5kCGiv.js +0 -4
  320. package/dist/haskell-BKii9uTg.js +0 -4
  321. package/dist/haxe-Bsz30J8x.js +0 -5
  322. package/dist/idl-BlxgaPKj.js +0 -4
  323. package/dist/infoDiagram-HS3SLOUP-fkZhmVE7.js +0 -30
  324. package/dist/javascript-SNhUvTcB.js +0 -4
  325. package/dist/julia-CGZzaDyk.js +0 -4
  326. package/dist/livescript-Cj6cX-Ys.js +0 -4
  327. package/dist/lua-BcVHrD8f.js +0 -4
  328. package/dist/mathematica-DLY8ZGoJ.js +0 -4
  329. package/dist/mbox-BNTsMWS5.js +0 -4
  330. package/dist/mirc-oyeOBir2.js +0 -4
  331. package/dist/mllike-ByxznKQw.js +0 -6
  332. package/dist/modelica-DNLhoyD8.js +0 -4
  333. package/dist/mscgen-DkZltsli.js +0 -6
  334. package/dist/mumps-TTiQB1xv.js +0 -4
  335. package/dist/nsis-RT1O1Ph8.js +0 -4
  336. package/dist/ntriples-CxsCiZ7Z.js +0 -4
  337. package/dist/octave-CkLh5tpW.js +0 -4
  338. package/dist/oz-yI7U9eVH.js +0 -4
  339. package/dist/pascal-CQK8sfDe.js +0 -4
  340. package/dist/perl-BEG8-kZl.js +0 -4
  341. package/dist/pig-DLLCqQaR.js +0 -4
  342. package/dist/powershell-CtjMkVO_.js +0 -4
  343. package/dist/properties-Domeb57z.js +0 -4
  344. package/dist/protobuf-0yk85TV6.js +0 -4
  345. package/dist/pug-B-BiNkM-.js +0 -4
  346. package/dist/puppet-C0N4vevK.js +0 -4
  347. package/dist/python-BZFa8G3C.js +0 -4
  348. package/dist/q-gcj7dgJv.js +0 -4
  349. package/dist/r-DavzTuPU.js +0 -4
  350. package/dist/react-vega-DfxWeueH.js +0 -9
  351. package/dist/rpm-bPj31ya8.js +0 -5
  352. package/dist/ruby-3UzzijjE.js +0 -4
  353. package/dist/sas-D9upmCP9.js +0 -4
  354. package/dist/scheme-DqWYzIFR.js +0 -4
  355. package/dist/shell-w63nkNmU.js +0 -4
  356. package/dist/sieve-Dz_ISrl6.js +0 -4
  357. package/dist/smalltalk-BXZ14pkr.js +0 -4
  358. package/dist/sparql-Boyc0wkb.js +0 -4
  359. package/dist/stateDiagram-v2-4FDKWEC3-BpOH8Bgl.js +0 -29
  360. package/dist/stex-DYK84lGq.js +0 -4
  361. package/dist/stylus-m9L_f1X1.js +0 -4
  362. package/dist/swift-C4TGn99K.js +0 -4
  363. package/dist/tcl-D_L0cfYZ.js +0 -4
  364. package/dist/textile-BAofYdKN.js +0 -4
  365. package/dist/toml-DCDKACLL.js +0 -4
  366. package/dist/troff-JHOU2VZK.js +0 -4
  367. package/dist/ttcn-Cxhng3qq.js +0 -4
  368. package/dist/ttcn-cfg-DJgUIu5n.js +0 -4
  369. package/dist/turtle-DKYkKZjV.js +0 -4
  370. package/dist/vb-C9rpn9hN.js +0 -4
  371. package/dist/vbscript-BQ7rxQU0.js +0 -4
  372. package/dist/velocity-C8WXmzLz.js +0 -4
  373. package/dist/verilog-BUXJEyEq.js +0 -4
  374. package/dist/vhdl-C18YIXfF.js +0 -4
  375. package/dist/webidl-D97EKzDx.js +0 -4
  376. package/dist/xquery-BZM6yzG2.js +0 -4
  377. package/dist/yacas-CXKck-Ok.js +0 -4
  378. package/dist/z80-BbF6ykWc.js +0 -4
  379. package/src/components/data-table/TableActions.tsx +0 -170
  380. package/src/components/data-table/download-actions.tsx +0 -224
  381. /package/dist/{ImageComparisonComponent-B5q26YVi.js → ImageComparisonComponent-DY3J_vIU.js} +0 -0
  382. /package/dist/{Plot-syRHsk-l.js → Plot-WhbJAbBh.js} +0 -0
  383. /package/dist/{apl-BqjtmlWW.js → apl-Oc3bL26_.js} +0 -0
  384. /package/dist/{array-D7wW5QoO.js → array-ByIS7m3B.js} +0 -0
  385. /package/dist/{asciiarmor-D9C9bbeV.js → asciiarmor-DTbPh2VI.js} +0 -0
  386. /package/dist/{asn1-D_zR1ubK.js → asn1-CGhwu1Ri.js} +0 -0
  387. /package/dist/{asterisk-B0dLLA8Z.js → asterisk-BApaB_8m.js} +0 -0
  388. /package/dist/{brainfuck-79SC7EYA.js → brainfuck-CA0L8lRq.js} +0 -0
  389. /package/dist/{chunk-DR5Q36YT-BxPcQ21t.js → chunk-DR5Q36YT-C40cYcy5.js} +0 -0
  390. /package/dist/{click-outside-container-DNfggvIW.js → click-outside-container-vCXhHl-R.js} +0 -0
  391. /package/dist/{clike-DFDX2jWq.js → clike-CEtUBPHD.js} +0 -0
  392. /package/dist/{clojure-Bb3Od9By.js → clojure-BszjvdGo.js} +0 -0
  393. /package/dist/{cmake-DYGUYEtU.js → cmake-B2Gvps8b.js} +0 -0
  394. /package/dist/{cobol-CcWmcAFT.js → cobol-DuMch8nn.js} +0 -0
  395. /package/dist/{coffeescript-BVa1qoL6.js → coffeescript-L9aKXVsJ.js} +0 -0
  396. /package/dist/{colors-6DRQ0kEF.js → colors-IJ-2cn2o.js} +0 -0
  397. /package/dist/{common-keywords-Bz8dNfWa.js → common-keywords-CsU75Ked.js} +0 -0
  398. /package/dist/{commonlisp-zi51jgUH.js → commonlisp-CrtdssxB.js} +0 -0
  399. /package/dist/{crystal-QjpegJHM.js → crystal-vvNY0LpY.js} +0 -0
  400. /package/dist/{css-B_GfJtcK.js → css-B1GdzqT1.js} +0 -0
  401. /package/dist/{cypher-BVuYJpGf.js → cypher-BtZvV7bW.js} +0 -0
  402. /package/dist/{cytoscape.esm-BYAuS6uS.js → cytoscape.esm-CRfNlsPy.js} +0 -0
  403. /package/dist/{d-BT97RiQI.js → d-B0UN3V-Z.js} +0 -0
  404. /package/dist/{defaultLocale-B_A76Zpk.js → defaultLocale-Bxoo2-30.js} +0 -0
  405. /package/dist/{defaultLocale-DjFHq3Xk.js → defaultLocale-qS7DaAmi.js} +0 -0
  406. /package/dist/{diff-CHd93v7L.js → diff-DOpgjj1W.js} +0 -0
  407. /package/dist/{dist-CqR8FBcH.js → dist-BjWd_Ei9.js} +0 -0
  408. /package/dist/{dist-CORAUsE1.js → dist-KZI_BHqV.js} +0 -0
  409. /package/dist/{dtd-akLFIRuZ.js → dtd-Ctnjxrle.js} +0 -0
  410. /package/dist/{duckdb-keywords-CQAIHMbC.js → duckdb-keywords-DjrZdCO2.js} +0 -0
  411. /package/dist/{dylan-Iy-rgNOc.js → dylan-DFXkoaZy.js} +0 -0
  412. /package/dist/{ebnf-CTkZpZPT.js → ebnf-XJCIl_em.js} +0 -0
  413. /package/dist/{ecl-BhUXC_aR.js → ecl-C1NExZip.js} +0 -0
  414. /package/dist/{eiffel-DIRAlWPD.js → eiffel-uXVGgleg.js} +0 -0
  415. /package/dist/{elm-BDgVzkJ4.js → elm-CBOFnnib.js} +0 -0
  416. /package/dist/{emotion-is-prop-valid.esm-DdzHpbbG.js → emotion-is-prop-valid.esm-CJVjyntJ.js} +0 -0
  417. /package/dist/{erlang-Djcs_NwB.js → erlang-DMnrT8XK.js} +0 -0
  418. /package/dist/{error-banner-DkDzvax3.js → error-banner-Bx9kIgrs.js} +0 -0
  419. /package/dist/{esm-BRwAuUu2.js → esm-D4gzqVRq.js} +0 -0
  420. /package/dist/{fcl-OXoT8w4k.js → fcl-fh4Mj0bc.js} +0 -0
  421. /package/dist/{forth-c_NTahPv.js → forth-DDpxS4nw.js} +0 -0
  422. /package/dist/{fortran-Bpxt27dn.js → fortran-B6uYqQMz.js} +0 -0
  423. /package/dist/{gas-RVBts6ZK.js → gas-BKnWzuFz.js} +0 -0
  424. /package/dist/{gherkin-Hf6PTauh.js → gherkin-pBt0wT4X.js} +0 -0
  425. /package/dist/{groovy-CKjO-cRi.js → groovy-DKsn4ppB.js} +0 -0
  426. /package/dist/{haskell-DC1Gan6v.js → haskell-BJVBJQcy.js} +0 -0
  427. /package/dist/{haxe-Bpne--ot.js → haxe-rLN5UZU5.js} +0 -0
  428. /package/dist/{http-CPVO27fZ.js → http-CbJFDV7c.js} +0 -0
  429. /package/dist/{idl-GRIbMIEq.js → idl-B4mwMAo-.js} +0 -0
  430. /package/dist/{init-BfRhston.js → init-Cge3yl4r.js} +0 -0
  431. /package/dist/{invariant-CzjtdzpE.js → invariant-D4hPsZFI.js} +0 -0
  432. /package/dist/{isEmpty-D_Jzlmqv.js → isEmpty-BQtUinxJ.js} +0 -0
  433. /package/dist/{javascript-nS0zxWNO.js → javascript-Hf2NLNC0.js} +0 -0
  434. /package/dist/{julia-CQpdTxmO.js → julia-GGpx21YN.js} +0 -0
  435. /package/dist/{katex-Dg42UEnr.js → katex-CQ_cP8Uu.js} +0 -0
  436. /package/dist/{livescript-D5kqrQol.js → livescript-CSvXMspZ.js} +0 -0
  437. /package/dist/{lua-CKifrpGK.js → lua-CVMR5LMW.js} +0 -0
  438. /package/dist/{main-C01_ic0d.js → main-CvkAPtaq.js} +0 -0
  439. /package/dist/{math-BbMyrONz.js → math-CEWMqgbD.js} +0 -0
  440. /package/dist/{mathematica-CxT3f_fi.js → mathematica-JENNt-p4.js} +0 -0
  441. /package/dist/{mbox-C2_n_I9h.js → mbox-mzifoc8E.js} +0 -0
  442. /package/dist/{memoize-CwWm-NpB.js → memoize-CuHciEBb.js} +0 -0
  443. /package/dist/{merge-Byt9w-nO.js → merge-CA_buyY3.js} +0 -0
  444. /package/dist/{micromark-factory-space-YUxUai1y.js → micromark-factory-space-BHslBP9f.js} +0 -0
  445. /package/dist/{mirc-BTQeASBH.js → mirc-BXoiItvN.js} +0 -0
  446. /package/dist/{mllike-BxO6Hl5N.js → mllike-H-KR9OuH.js} +0 -0
  447. /package/dist/{modelica-DuivZReX.js → modelica-B6Hm3mMl.js} +0 -0
  448. /package/dist/{mscgen-DwD83FOm.js → mscgen-D8TF_Hei.js} +0 -0
  449. /package/dist/{mumps-CdVjp3OE.js → mumps-CD-kNPt4.js} +0 -0
  450. /package/dist/{nginx-Bi9TuNqb.js → nginx-9EZQIKsh.js} +0 -0
  451. /package/dist/{node-sql-parser-Bet3kHkt.js → node-sql-parser-DIe6Cq_-.js} +0 -0
  452. /package/dist/{now-uNLDfbuW.js → now-CXAdKY5k.js} +0 -0
  453. /package/dist/{ntriples-DBS60qLp.js → ntriples-DgnpxU40.js} +0 -0
  454. /package/dist/{octave-BL0tQUFC.js → octave-CkobqyVm.js} +0 -0
  455. /package/dist/{oz-DBrG4vwi.js → oz-ChDLd9tS.js} +0 -0
  456. /package/dist/{pascal-BWV9h8yS.js → pascal-CvlkwK7E.js} +0 -0
  457. /package/dist/{path-C_x2ySFi.js → path-B-82hpi8.js} +0 -0
  458. /package/dist/{perl-Bm5a83JW.js → perl-BNEFTNbM.js} +0 -0
  459. /package/dist/{pig-CbJDoHaE.js → pig-Cd1DMS7P.js} +0 -0
  460. /package/dist/{powershell-tG44m5Cy.js → powershell-CPxA0zpc.js} +0 -0
  461. /package/dist/{properties-DUZGzdb1.js → properties-BaFBm-Xa.js} +0 -0
  462. /package/dist/{protobuf-CcoKXY0d.js → protobuf-BQV_-X0H.js} +0 -0
  463. /package/dist/{puppet-BH73L_Gw.js → puppet-LXLST0mx.js} +0 -0
  464. /package/dist/{purify.es-BwXbuO3r.js → purify.es-ukiMXY-F.js} +0 -0
  465. /package/dist/{python-NJIxLTZp.js → python-DLjLzX4k.js} +0 -0
  466. /package/dist/{q-MotBNA65.js → q-DswTX1Y9.js} +0 -0
  467. /package/dist/{r-BUgBPae7.js → r-CO7NpMwE.js} +0 -0
  468. /package/dist/{range-DwpxnYuB.js → range-BYuZFTbA.js} +0 -0
  469. /package/dist/{rpm-C_PaGodG.js → rpm-BlmEDT6r.js} +0 -0
  470. /package/dist/{ruby-DFLM2XD8.js → ruby-BTPKgeZZ.js} +0 -0
  471. /package/dist/{sas-BMyyu8oO.js → sas-DTDTiNO8.js} +0 -0
  472. /package/dist/{scheme-Qet9zYAe.js → scheme-UzAAg4GJ.js} +0 -0
  473. /package/dist/{shell-BKHx4Jjo.js → shell-DQ0hQCsB.js} +0 -0
  474. /package/dist/{sieve-CVo7dc4j.js → sieve-BVyYIx9u.js} +0 -0
  475. /package/dist/{simple-mode-CVFBIo6d.js → simple-mode-Dryu-fC9.js} +0 -0
  476. /package/dist/{smalltalk-BHr2nCth.js → smalltalk-DAdMAHTu.js} +0 -0
  477. /package/dist/{solr-Bt9XtM2H.js → solr-Bn6k51kO.js} +0 -0
  478. /package/dist/{sparql-QSu0ZCcc.js → sparql-Bi7quYgw.js} +0 -0
  479. /package/dist/{spreadsheet-BWfuwc0V.js → spreadsheet-UpVklYg7.js} +0 -0
  480. /package/dist/{sql-BdV3YOCG.js → sql-qyORs189.js} +0 -0
  481. /package/dist/{stex-Btoi8e7I.js → stex-Ze8D4R_5.js} +0 -0
  482. /package/dist/{stylus-CLZH9-Ps.js → stylus-jhpzcQ6Y.js} +0 -0
  483. /package/dist/{swift-JNDJdNIE.js → swift-BrO8qThZ.js} +0 -0
  484. /package/dist/{tcl-J5aE7aj5.js → tcl-s5QI5gv3.js} +0 -0
  485. /package/dist/{textile-6Hn05XQM.js → textile-ClhvJrxM.js} +0 -0
  486. /package/dist/{tiddlywiki-BWn8rSwJ.js → tiddlywiki-CmAAqw9M.js} +0 -0
  487. /package/dist/{tiki-XORjA1c3.js → tiki-DzCRe_s0.js} +0 -0
  488. /package/dist/{timer-pEiW44EO.js → timer-BPKOAfmx.js} +0 -0
  489. /package/dist/{toml-BceyeuiF.js → toml-TFa3EJQE.js} +0 -0
  490. /package/dist/{treemap-BzS5cW_6.js → treemap-CmLtUuWe.js} +0 -0
  491. /package/dist/{troff-DeMyd5Pf.js → troff-SqLg0heF.js} +0 -0
  492. /package/dist/{ttcn-DurvvcB-.js → ttcn-Cfrap7HJ.js} +0 -0
  493. /package/dist/{ttcn-cfg-BuYui6Rv.js → ttcn-cfg-Dopc-iwE.js} +0 -0
  494. /package/dist/{turtle-CD8Qf-tp.js → turtle-Dt52DvVH.js} +0 -0
  495. /package/dist/{vb-BklM-Nqk.js → vb-D1pAvfDe.js} +0 -0
  496. /package/dist/{vbscript-DbMEEX0d.js → vbscript-DZ7RBxn5.js} +0 -0
  497. /package/dist/{velocity-CERL-_vq.js → velocity-Csau7eZy.js} +0 -0
  498. /package/dist/{verilog-BD6jNce6.js → verilog-gXlZACs5.js} +0 -0
  499. /package/dist/{vhdl-U-1_N98i.js → vhdl-NaUWbI1B.js} +0 -0
  500. /package/dist/{webidl-IUn0dzoa.js → webidl-BJmPjW01.js} +0 -0
  501. /package/dist/{xquery-QeeHdSO2.js → xquery-CJIPsC0g.js} +0 -0
  502. /package/dist/{yacas-C9XcEPAJ.js → yacas-8f2Vjiiz.js} +0 -0
  503. /package/dist/{z80-C-nD1oRy.js → z80-s5Xk2hCP.js} +0 -0
@@ -2,6 +2,7 @@
2
2
  "use no memo";
3
3
 
4
4
  import type { Table } from "@tanstack/react-table";
5
+ import { range } from "lodash-es";
5
6
  import {
6
7
  ChevronDown,
7
8
  ChevronLeft,
@@ -12,126 +13,47 @@ import {
12
13
  import React from "react";
13
14
  import { useLocale } from "react-aria";
14
15
  import { Button } from "@/components/ui/button";
16
+ import {
17
+ Command,
18
+ CommandEmpty,
19
+ CommandInput,
20
+ CommandItem,
21
+ CommandList,
22
+ } from "@/components/ui/command";
15
23
  import {
16
24
  DropdownMenu,
17
25
  DropdownMenuContent,
18
26
  DropdownMenuItem,
19
27
  DropdownMenuLabel,
20
- DropdownMenuSeparator,
21
28
  DropdownMenuTrigger,
22
29
  } from "@/components/ui/dropdown-menu";
23
- import { Input } from "@/components/ui/input";
24
- import { range } from "@/utils/arrays";
30
+ import {
31
+ Popover,
32
+ PopoverContent,
33
+ PopoverTrigger,
34
+ } from "@/components/ui/popover";
35
+ import { Tooltip } from "@/components/ui/tooltip";
25
36
  import { cn } from "@/utils/cn";
26
37
  import { Events } from "@/utils/events";
27
38
  import { prettyNumber } from "@/utils/numbers";
28
39
  import { PluralWord } from "@/utils/pluralize";
29
- import {
30
- Select,
31
- SelectContent,
32
- SelectGroup,
33
- SelectItem,
34
- SelectLabel,
35
- SelectTrigger,
36
- SelectValue,
37
- } from "../ui/select";
38
- import type { DataTableSelection, PageRange } from "./types";
40
+ import type { PageRange } from "./types";
39
41
 
40
42
  const MAX_PAGES_BEFORE_CLAMPING = 100;
41
43
 
42
44
  interface DataTablePaginationProps<TData> {
43
45
  table: Table<TData>;
44
- selection?: DataTableSelection;
45
- totalColumns: number;
46
- onSelectAllRowsChange?: (value: boolean) => void;
47
46
  tableLoading?: boolean;
48
47
  showPageSizeSelector?: boolean;
49
48
  }
50
49
 
51
50
  export const DataTablePagination = <TData,>({
52
51
  table,
53
- selection,
54
- onSelectAllRowsChange,
55
- totalColumns,
56
52
  tableLoading,
57
53
  showPageSizeSelector,
58
54
  }: DataTablePaginationProps<TData>) => {
59
55
  const { locale } = useLocale();
60
56
 
61
- const renderTotal = () => {
62
- const { rowSelection, cellSelection } = table.getState();
63
- let selected = Object.keys(rowSelection).length;
64
- let isAllPageSelected = table.getIsAllPageRowsSelected();
65
- const numRows = table.getRowCount();
66
- let isAllSelected = selected === numRows;
67
-
68
- const isCellSelection =
69
- selection === "single-cell" || selection === "multi-cell";
70
- if (isCellSelection) {
71
- selected = cellSelection.length;
72
- isAllPageSelected = false;
73
- isAllSelected = false;
74
- }
75
-
76
- if (isAllPageSelected && !isAllSelected) {
77
- return (
78
- <>
79
- <span>{prettyNumber(selected, locale)} selected</span>
80
- <Button
81
- size="xs"
82
- data-testid="select-all-button"
83
- variant="link"
84
- className="h-4 print:hidden"
85
- onMouseDown={Events.preventFocus}
86
- onClick={() => {
87
- if (onSelectAllRowsChange) {
88
- onSelectAllRowsChange(true);
89
- } else {
90
- table.toggleAllRowsSelected(true);
91
- }
92
- }}
93
- >
94
- Select all {prettyNumber(numRows, locale)}
95
- </Button>
96
- </>
97
- );
98
- }
99
-
100
- if (selected) {
101
- return (
102
- <>
103
- <span>{prettyNumber(selected, locale)} selected</span>
104
- <Button
105
- size="xs"
106
- data-testid="clear-selection-button"
107
- variant="link"
108
- className="h-4 print:hidden"
109
- onMouseDown={Events.preventFocus}
110
- onClick={() => {
111
- if (!isCellSelection) {
112
- if (onSelectAllRowsChange) {
113
- onSelectAllRowsChange(false);
114
- } else {
115
- table.toggleAllRowsSelected(false);
116
- }
117
- } else if (table.resetCellSelection) {
118
- table.resetCellSelection();
119
- }
120
- }}
121
- >
122
- Clear selection
123
- </Button>
124
- </>
125
- );
126
- }
127
-
128
- const rowColumnCount = prettifyRowColumnCount(
129
- numRows,
130
- totalColumns,
131
- locale,
132
- );
133
- return <span>{rowColumnCount}</span>;
134
- };
135
57
  const currentPage = Math.min(
136
58
  table.getState().pagination.pageIndex + 1,
137
59
  table.getPageCount(),
@@ -153,65 +75,72 @@ export const DataTablePagination = <TData,>({
153
75
 
154
76
  const renderPageSizeSelector = () => {
155
77
  return (
156
- <div className="flex items-center gap-1 text-xs whitespace-nowrap mr-1 print:hidden">
157
- <Select
158
- value={pageSize.toString()}
159
- onValueChange={(value) => table.setPageSize(Number(value))}
160
- >
161
- <SelectTrigger className="w-11 h-[18px] shadow-none! !hover:shadow-none ring-0! border-border text-xs p-1">
162
- <SelectValue />
163
- </SelectTrigger>
164
- <SelectContent>
165
- <SelectGroup>
166
- <SelectLabel>Rows per page</SelectLabel>
167
- {[...pageSizes].map((size) => {
168
- const sizeStr = size.toString();
169
- return (
170
- <SelectItem key={size} value={sizeStr}>
171
- {sizeStr}
172
- </SelectItem>
173
- );
174
- })}
175
- </SelectGroup>
176
- </SelectContent>
177
- </Select>
178
- <span>/ page</span>
78
+ <div className="flex items-center text-xs whitespace-nowrap mr-1 print:hidden">
79
+ <DropdownMenu>
80
+ <DropdownMenuTrigger asChild={true}>
81
+ <button
82
+ type="button"
83
+ className="border rounded justify-between pl-1.5 pr-0.5 h-6 text-xs items-center hover:bg-accent inline-flex gap-0.5"
84
+ >
85
+ {pageSize} / page
86
+ <ChevronDown className="h-3 w-3 opacity-50 mb-px" />
87
+ </button>
88
+ </DropdownMenuTrigger>
89
+ <DropdownMenuContent align="center" sideOffset={6}>
90
+ <DropdownMenuLabel className="text-xs text-muted-foreground">
91
+ Rows per page
92
+ </DropdownMenuLabel>
93
+ {[...pageSizes].map((size) => (
94
+ <DropdownMenuItem
95
+ key={size}
96
+ className={cn(
97
+ "text-xs cursor-pointer",
98
+ size === pageSize && "font-semibold bg-accent",
99
+ )}
100
+ onSelect={() => table.setPageSize(size)}
101
+ onMouseDown={Events.preventFocus}
102
+ >
103
+ {size}
104
+ </DropdownMenuItem>
105
+ ))}
106
+ </DropdownMenuContent>
107
+ </DropdownMenu>
179
108
  </div>
180
109
  );
181
110
  };
182
111
 
183
112
  return (
184
- <div className="flex flex-1 items-center justify-between px-2">
185
- <div className="flex items-center gap-2">
186
- <div className="text-sm text-muted-foreground">{renderTotal()}</div>
113
+ <div className="flex flex-col lg:flex-row items-center gap-0.5 lg:gap-1 px-2">
114
+ <div className="order-2 lg:order-first">
187
115
  {showPageSizeSelector && renderPageSizeSelector()}
188
116
  </div>
189
-
190
- <div className="flex items-end space-x-2 print:hidden">
191
- <Button
192
- size="xs"
193
- variant="outline"
194
- data-testid="first-page-button"
195
- className="hidden h-6 w-6 p-0 lg:flex"
196
- onClick={() => handlePageChange(() => table.setPageIndex(0))}
197
- onMouseDown={Events.preventFocus}
198
- disabled={!table.getCanPreviousPage()}
199
- >
200
- <span className="sr-only">Go to first page</span>
201
- <ChevronsLeft className="h-4 w-4" />
202
- </Button>
203
- <Button
204
- size="xs"
205
- variant="outline"
206
- data-testid="previous-page-button"
207
- className="h-6 w-6 p-0"
208
- onClick={() => handlePageChange(() => table.previousPage())}
209
- onMouseDown={Events.preventFocus}
210
- disabled={!table.getCanPreviousPage()}
211
- >
212
- <span className="sr-only">Go to previous page</span>
213
- <ChevronLeft className="h-4 w-4" />
214
- </Button>
117
+ <div className="order-1 lg:order-last flex items-center print:hidden">
118
+ <Tooltip content="First page">
119
+ <Button
120
+ size="xs"
121
+ variant="text"
122
+ data-testid="first-page-button"
123
+ className="hidden h-6 w-5 p-0 lg:flex"
124
+ onClick={() => handlePageChange(() => table.setPageIndex(0))}
125
+ onMouseDown={Events.preventFocus}
126
+ disabled={!table.getCanPreviousPage()}
127
+ >
128
+ <ChevronsLeft className="h-4 w-4" />
129
+ </Button>
130
+ </Tooltip>
131
+ <Tooltip content="Previous page">
132
+ <Button
133
+ size="xs"
134
+ variant="text"
135
+ data-testid="previous-page-button"
136
+ className="h-6 w-5 p-0"
137
+ onClick={() => handlePageChange(() => table.previousPage())}
138
+ onMouseDown={Events.preventFocus}
139
+ disabled={!table.getCanPreviousPage()}
140
+ >
141
+ <ChevronLeft className="h-4 w-4" />
142
+ </Button>
143
+ </Tooltip>
215
144
  <div className="flex items-center justify-center text-xs font-medium gap-1">
216
145
  <span>Page</span>
217
146
  <PageSelector
@@ -225,32 +154,36 @@ export const DataTablePagination = <TData,>({
225
154
  of {prettyNumber(totalPages, locale)}
226
155
  </span>
227
156
  </div>
228
- <Button
229
- size="xs"
230
- variant="outline"
231
- data-testid="next-page-button"
232
- className="h-6 w-6 p-0"
233
- onClick={() => handlePageChange(() => table.nextPage())}
234
- onMouseDown={Events.preventFocus}
235
- disabled={!table.getCanNextPage()}
236
- >
237
- <span className="sr-only">Go to next page</span>
238
- <ChevronRight className="h-4 w-4" />
239
- </Button>
240
- <Button
241
- size="xs"
242
- variant="outline"
243
- data-testid="last-page-button"
244
- className="hidden h-6 w-6 p-0 lg:flex"
245
- onClick={() =>
246
- handlePageChange(() => table.setPageIndex(table.getPageCount() - 1))
247
- }
248
- onMouseDown={Events.preventFocus}
249
- disabled={!table.getCanNextPage()}
250
- >
251
- <span className="sr-only">Go to last page</span>
252
- <ChevronsRight className="h-4 w-4" />
253
- </Button>
157
+ <Tooltip content="Next page">
158
+ <Button
159
+ size="xs"
160
+ variant="text"
161
+ data-testid="next-page-button"
162
+ className="h-6 w-5 p-0"
163
+ onClick={() => handlePageChange(() => table.nextPage())}
164
+ onMouseDown={Events.preventFocus}
165
+ disabled={!table.getCanNextPage()}
166
+ >
167
+ <ChevronRight className="h-4 w-4" />
168
+ </Button>
169
+ </Tooltip>
170
+ <Tooltip content="Last page">
171
+ <Button
172
+ size="xs"
173
+ variant="text"
174
+ data-testid="last-page-button"
175
+ className="hidden h-6 w-5 p-0 lg:flex"
176
+ onClick={() =>
177
+ handlePageChange(() =>
178
+ table.setPageIndex(table.getPageCount() - 1),
179
+ )
180
+ }
181
+ onMouseDown={Events.preventFocus}
182
+ disabled={!table.getCanNextPage()}
183
+ >
184
+ <ChevronsRight className="h-4 w-4" />
185
+ </Button>
186
+ </Tooltip>
254
187
  </div>
255
188
  </div>
256
189
  );
@@ -266,102 +199,89 @@ export const PageSelector = ({
266
199
  onPageChange: (page: number) => void;
267
200
  }) => {
268
201
  const [open, setOpen] = React.useState(false);
269
- const [jumpValue, setJumpValue] = React.useState("");
270
- const jumpInputId = React.useId();
271
202
 
272
203
  const pageRanges = React.useMemo(
273
204
  () => getPageRanges(currentPage, totalPages),
274
205
  [currentPage, totalPages],
275
206
  );
276
207
 
277
- const handleJump = () => {
278
- const page = Number.parseInt(jumpValue, 10);
279
- if (page >= 1 && page <= totalPages) {
280
- onPageChange(page - 1);
281
- setJumpValue("");
282
- setOpen(false);
283
- }
208
+ const handleSelect = (page: number) => {
209
+ onPageChange(page - 1);
210
+ setOpen(false);
284
211
  };
285
212
 
286
213
  return (
287
- <DropdownMenu open={open} onOpenChange={setOpen}>
288
- <DropdownMenuTrigger asChild={true}>
214
+ <Popover open={totalPages > 1 ? open : false} onOpenChange={setOpen}>
215
+ <PopoverTrigger asChild={true} disabled={totalPages <= 1}>
289
216
  <button
290
217
  type="button"
291
- className="border rounded justify-between pl-1.5 pr-0.5 min-w-9 text-xs items-center hover:bg-accent inline-flex gap-0.5"
218
+ className={cn(
219
+ "border rounded justify-between pl-1.5 pr-0.5 h-6 min-w-9 text-xs items-center inline-flex gap-0.5",
220
+ totalPages > 1
221
+ ? "hover:bg-accent cursor-pointer"
222
+ : "opacity-50 cursor-default",
223
+ )}
292
224
  data-testid="page-select"
225
+ disabled={totalPages <= 1}
293
226
  >
294
227
  {currentPage}
295
228
  <ChevronDown className="h-3 w-3 opacity-50 mb-px" />
296
229
  </button>
297
- </DropdownMenuTrigger>
298
- <DropdownMenuContent
299
- className="w-36 overflow-hidden flex flex-col"
300
- scrollable={false}
301
- align="center"
302
- sideOffset={6}
303
- style={{ maxHeight: "22rem" }}
304
- >
305
- <div className="overflow-y-auto flex-1 min-h-0">
306
- {pageRanges.map((item) =>
307
- item.type === "ellipsis" ? (
308
- <DropdownMenuLabel
309
- key={item.key}
310
- className="text-center text-xs text-muted-foreground"
311
- >
312
- ...
313
- </DropdownMenuLabel>
314
- ) : (
315
- <DropdownMenuItem
316
- key={item.page}
317
- data-testid="page-option"
318
- className={cn(
319
- "text-xs cursor-pointer",
320
- item.page === currentPage && "font-semibold bg-accent",
321
- )}
322
- onSelect={() => onPageChange(item.page - 1)}
323
- onMouseDown={Events.preventFocus}
324
- >
325
- {item.page}
326
- </DropdownMenuItem>
327
- ),
328
- )}
329
- </div>
330
- {totalPages > MAX_PAGES_BEFORE_CLAMPING && (
331
- <>
332
- <DropdownMenuSeparator />
333
- <div
334
- className="px-2 pt-0.5 shrink-0"
335
- onKeyDown={(e) => e.stopPropagation()}
336
- >
337
- <label
338
- htmlFor={jumpInputId}
339
- className="text-xs text-muted-foreground block mb-1"
340
- >
341
- Jump to page
342
- </label>
343
- <Input
344
- id={jumpInputId}
345
- type="number"
346
- min={1}
347
- max={totalPages}
348
- placeholder={`1-${totalPages}`}
349
- value={jumpValue}
350
- onChange={(e) => setJumpValue(e.target.value)}
351
- onKeyDown={(e) => {
352
- if (e.key === "Enter") {
353
- handleJump();
354
- }
355
- e.stopPropagation();
356
- }}
357
- className="h-6 text-xs"
358
- data-testid="page-jump-input"
359
- />
360
- </div>
361
- </>
362
- )}
363
- </DropdownMenuContent>
364
- </DropdownMenu>
230
+ </PopoverTrigger>
231
+ <PopoverContent className="w-36 p-0" align="center" sideOffset={6}>
232
+ <Command
233
+ shouldFilter={true}
234
+ filter={(value, search) => {
235
+ return value.startsWith(search) ? 1 : 0;
236
+ }}
237
+ >
238
+ <CommandInput
239
+ placeholder={`Page (1–${totalPages})`}
240
+ rootClassName="px-2 h-8"
241
+ className="text-xs h-8"
242
+ autoFocus={true}
243
+ icon={null}
244
+ onKeyDown={(e) => {
245
+ // Allow navigation/editing keys, block non-numeric input
246
+ const allowed = [
247
+ "Backspace",
248
+ "Delete",
249
+ "ArrowLeft",
250
+ "ArrowRight",
251
+ "Tab",
252
+ "Enter",
253
+ "Escape",
254
+ ];
255
+ if (!allowed.includes(e.key) && !/^\d$/.test(e.key)) {
256
+ e.preventDefault();
257
+ }
258
+ }}
259
+ />
260
+ <CommandList className="max-h-60">
261
+ {pageRanges.map((item) =>
262
+ item.type === "ellipsis" ? null : (
263
+ <CommandItem
264
+ key={item.page}
265
+ value={String(item.page)}
266
+ data-testid="page-option"
267
+ className={cn(
268
+ "text-xs cursor-pointer",
269
+ item.page === currentPage && "font-semibold bg-accent",
270
+ )}
271
+ onSelect={() => handleSelect(item.page)}
272
+ onMouseDown={Events.preventFocus}
273
+ >
274
+ {item.page}
275
+ </CommandItem>
276
+ ),
277
+ )}
278
+ <CommandEmpty className="py-2 text-center text-xs text-muted-foreground">
279
+ No matching page
280
+ </CommandEmpty>
281
+ </CommandList>
282
+ </Command>
283
+ </PopoverContent>
284
+ </Popover>
365
285
  );
366
286
  };
367
287
 
@@ -5,6 +5,7 @@ import { render, screen } from "@testing-library/react";
5
5
  import { useEffect } from "react";
6
6
  import { I18nProvider } from "react-aria";
7
7
  import { describe, expect, it } from "vitest";
8
+ import { TooltipProvider } from "@/components/ui/tooltip";
8
9
  import { SELECT_COLUMN_ID } from "../../types";
9
10
  import { useCellSelectionReducerActions } from "../atoms";
10
11
  import { CellSelectionStats } from "../cell-selection-stats";
@@ -23,27 +24,30 @@ const TestHarness = ({
23
24
  actions.setSelectedCells(selectedCellIds);
24
25
  }, [actions, selectedCellIds]);
25
26
  return (
26
- <I18nProvider locale="en-US">
27
- <CellSelectionStats table={table} />
28
- </I18nProvider>
27
+ <TooltipProvider>
28
+ <I18nProvider locale="en-US">
29
+ <CellSelectionStats table={table} />
30
+ </I18nProvider>
31
+ </TooltipProvider>
29
32
  );
30
33
  };
31
34
 
32
35
  describe("CellSelectionStats", () => {
33
- it("should return null when fewer than 2 cells are selected", () => {
36
+ it("should show hint when fewer than 2 cells are selected", () => {
34
37
  const row = createMockRow("0", [
35
38
  createMockCell("0_0", 10),
36
39
  createMockCell("0_1", 20),
37
40
  ]);
38
41
  const table = createMockTable([row], []);
39
42
 
40
- const { container } = render(
43
+ render(
41
44
  <CellSelectionProvider>
42
45
  <TestHarness table={table} selectedCellIds={new Set(["0_0"])} />
43
46
  </CellSelectionProvider>,
44
47
  );
45
48
 
46
- expect(container.firstChild).toBeNull();
49
+ expect(screen.getByText("No selection")).toBeInTheDocument();
50
+ expect(screen.queryByText(/Count:/)).not.toBeInTheDocument();
47
51
  });
48
52
 
49
53
  it("should display Count stat when 2 or more cells are selected", () => {
@@ -181,20 +185,20 @@ describe("CellSelectionStats", () => {
181
185
  expect(screen.getByText("Average: 0")).toBeInTheDocument();
182
186
  });
183
187
 
184
- it("should not display any stats when exactly one cell is selected", () => {
188
+ it("should show hint instead of stats when exactly one cell is selected", () => {
185
189
  const row = createMockRow("0", [
186
190
  createMockCell("0_0", 10),
187
191
  createMockCell("0_1", 20),
188
192
  ]);
189
193
  const table = createMockTable([row], []);
190
194
 
191
- const { container } = render(
195
+ render(
192
196
  <CellSelectionProvider>
193
197
  <TestHarness table={table} selectedCellIds={new Set(["0_0"])} />
194
198
  </CellSelectionProvider>,
195
199
  );
196
200
 
197
- expect(container.firstChild).toBeNull();
201
+ expect(screen.getByText("No selection")).toBeInTheDocument();
198
202
  expect(screen.queryByText(/Count:/)).not.toBeInTheDocument();
199
203
  });
200
204
 
@@ -301,14 +305,14 @@ describe("CellSelectionStats", () => {
301
305
  expect(screen.getByText("Average: 25")).toBeInTheDocument();
302
306
  });
303
307
 
304
- it("should not display stats when only checkbox column cells are selected", () => {
308
+ it("should show hint when only checkbox column cells are selected", () => {
305
309
  const selectCellId1 = `0_${SELECT_COLUMN_ID}`;
306
310
  const selectCellId2 = `1_${SELECT_COLUMN_ID}`;
307
311
  const row1 = createMockRow("0", [createMockCell(selectCellId1, true)]);
308
312
  const row2 = createMockRow("1", [createMockCell(selectCellId2, false)]);
309
313
  const table = createMockTable([row1, row2], []);
310
314
 
311
- const { container } = render(
315
+ render(
312
316
  <CellSelectionProvider>
313
317
  <TestHarness
314
318
  table={table}
@@ -317,7 +321,7 @@ describe("CellSelectionStats", () => {
317
321
  </CellSelectionProvider>,
318
322
  );
319
323
 
320
- expect(container.firstChild).toBeNull();
324
+ expect(screen.getByText("No selection")).toBeInTheDocument();
321
325
  expect(screen.queryByText(/Count:/)).not.toBeInTheDocument();
322
326
  });
323
327
 
@@ -3,6 +3,7 @@
3
3
  import type { Table } from "@tanstack/react-table";
4
4
  import { useAtomValue } from "jotai";
5
5
  import { useLocale } from "react-aria";
6
+ import { Tooltip } from "@/components/ui/tooltip";
6
7
  import { cn } from "@/utils/cn";
7
8
  import { selectedCellsAtom } from "./atoms";
8
9
  import {
@@ -31,7 +32,15 @@ export const CellSelectionStats = <TData,>({
31
32
  const dataCellCount = countDataCellsInSelection(selectedCells);
32
33
 
33
34
  if (dataCellCount < 2) {
34
- return null;
35
+ return (
36
+ <Tooltip content="Select multiple cells to see stats">
37
+ <span
38
+ className={cn("text-xs text-muted-foreground/80 italic", className)}
39
+ >
40
+ No selection
41
+ </span>
42
+ </Tooltip>
43
+ );
35
44
  }
36
45
 
37
46
  const numericValues = getNumericValuesFromSelectedCells(table, selectedCells);
@@ -39,7 +48,7 @@ export const CellSelectionStats = <TData,>({
39
48
  return (
40
49
  <div
41
50
  className={cn(
42
- "flex items-center justify-end gap-3 text-xs text-muted-foreground shrink-0",
51
+ "flex items-center justify-end gap-3 text-sm text-muted-foreground shrink-0",
43
52
  className,
44
53
  )}
45
54
  >
@@ -247,7 +247,7 @@ export const RowViewerPanel: React.FC<RowViewerPanelProps> = ({
247
247
 
248
248
  return (
249
249
  <div
250
- className="flex flex-col gap-3 mt-4 focus:outline-hidden"
250
+ className="flex flex-col gap-3 focus:outline-hidden"
251
251
  ref={panelRef}
252
252
  tabIndex={-1}
253
253
  onKeyDown={handleKeyDown}
@@ -42,7 +42,7 @@ export interface TableExplorerPanelProps {
42
42
  }
43
43
 
44
44
  const tabTriggerClassName =
45
- "text-xs uppercase tracking-wide font-semibold cursor-pointer transition-colors";
45
+ "text-[13px] uppercase tracking-wide font-semibold cursor-pointer transition-colors";
46
46
  const activeClassName = "text-primary";
47
47
  const inactiveClassName = "hover:text-foreground";
48
48
 
@@ -110,7 +110,7 @@ export const TableExplorerPanel: React.FC<TableExplorerPanelProps> = ({
110
110
  <Tabs
111
111
  value={resolvedTab}
112
112
  onValueChange={(value) => onTabChange(value as PanelType)}
113
- className="h-full flex flex-col min-w-[350px]"
113
+ className="flex flex-col min-w-[350px]"
114
114
  >
115
115
  <Fill name={SlotNames.CONTEXT_AWARE_PANEL_HEADER}>
116
116
  <div className="flex items-center gap-1">