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