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