@marimo-team/islands 0.20.2 → 0.20.3-dev76
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-BMiGWK57.js → ConnectedDataExplorerComponent-DUS-zJoR.js} +12 -12
- package/dist/{_baseIsEqual-DN5YkPnl.js → _baseIsEqual-5cAxzk6f.js} +42 -41
- package/dist/_basePickBy-3JVb5wYm.js +47 -0
- package/dist/{_baseProperty-6juuyX7Z.js → _baseProperty-D1nWkRMz.js} +12 -12
- package/dist/_baseSlice-BrVixxuc.js +10 -0
- package/dist/{_baseUniq-BlF21ach.js → _baseUniq-DSSiFuIJ.js} +10 -6
- package/dist/{any-language-editor-1OMbohwD.js → any-language-editor-BL9o7y0_.js} +31 -30
- package/dist/apl-lHFVoxx7.js +4 -0
- package/dist/{arc-9nABupDE.js → arc-DXxE-tFl.js} +2 -2
- package/dist/architecture-7HQA4BMR-BxkNpYRp.js +6 -0
- package/dist/{architectureDiagram-VXUJARFQ-DhN0C3Xf.js → architectureDiagram-VXUJARFQ-DrJeyFHq.js} +19 -19
- package/dist/asciiarmor-DqCdZUHI.js +4 -0
- package/dist/asn1-DEcwtw-q.js +4 -0
- package/dist/{blockDiagram-VD42YOAC-DrBkIcbV.js → blockDiagram-VD42YOAC-BJrP6qKc.js} +53 -53
- package/dist/brainfuck-Bro9Oz5x.js +4 -0
- package/dist/{c4Diagram-YG6GDRKO-pWt4zmu0.js → c4Diagram-YG6GDRKO-Bo4gytQ5.js} +6 -6
- package/dist/{channel-C56Jz8EL.js → channel-IWLGkaBE.js} +1 -1
- package/dist/{chunk-4BX2VUAB-WmXmzRBr.js → chunk-4BX2VUAB-CwMMQLZ_.js} +1 -1
- package/dist/{chunk-S6J4BHB3-zfWjyfUg.js → chunk-4F5CHEZ2-CxKDFd-t.js} +2 -2
- package/dist/{chunk-55IACEB6-irYMvHJu.js → chunk-55IACEB6-Dj8CzJvE.js} +1 -1
- package/dist/{chunk-5FQGJX7Z-pOElJy8t.js → chunk-5FQGJX7Z-BkzUmppO.js} +2 -2
- package/dist/{chunk-ABZYJK2D-BwNsaa1P.js → chunk-ABZYJK2D-CRwanrkd.js} +3 -3
- package/dist/{chunk-ATLVNIR6-DtFMAawc.js → chunk-ATLVNIR6-CMMCMvOK.js} +2 -2
- package/dist/{chunk-FWNWRKHM-DmrwhAQr.js → chunk-B2363JML-e_W7KW1D.js} +2 -2
- package/dist/{chunk-B4BG7PRW-lfWcLlzS.js → chunk-B4BG7PRW-BNsHrGHG.js} +7 -7
- package/dist/{chunk-CVBHYZKI-Bb2XMuXJ.js → chunk-CVBHYZKI-D8iwHsLF.js} +1 -1
- package/dist/{chunk-DI55MBZ5-RhhAimfG.js → chunk-DI55MBZ5-DQeYbfMV.js} +6 -6
- package/dist/{chunk-XAJISQIX-CZ8Bi1-x.js → chunk-DR5Q36YT-D4q96vNV.js} +2 -2
- package/dist/{chunk-EXTU4WIE-Bmo660a9.js → chunk-EXTU4WIE-CV_DQeaX.js} +2 -2
- package/dist/{chunk-FMBD7UC4-C0DZU_4q.js → chunk-FMBD7UC4-XTL4xAvH.js} +1 -1
- package/dist/{chunk-LBM3YZW2-BkxsqkNK.js → chunk-FRFDVMJY-C7q09nvl.js} +2 -2
- package/dist/{chunk-HN2XXSSU-BsB4dtgF.js → chunk-HN2XXSSU-CzO5Phf0.js} +1 -1
- package/dist/{chunk-JA3XYJ7Z-n8UTzfok.js → chunk-JA3XYJ7Z-Cmt--e0q.js} +3 -3
- package/dist/{chunk-JZLCHNYA-ChKqHUdB.js → chunk-JZLCHNYA-CkyMJnI9.js} +6 -6
- package/dist/{chunk-MI3HLSF2-DeDZS-tQ.js → chunk-MI3HLSF2-DvCKDmpi.js} +1 -1
- package/dist/{chunk-N4CR4FBY-BxOHGL3P.js → chunk-N4CR4FBY-BJfHtJbD.js} +7 -7
- package/dist/{chunk-T53DSG4Q-Bewz1tiU.js → chunk-PL6DKKU2-ChKBqnoD.js} +2 -2
- package/dist/{chunk-QN33PNHL-Dda-55xY.js → chunk-QN33PNHL-WOLIPUAJ.js} +2 -2
- package/dist/{chunk-QXUST7PY-ClIEpoCT.js → chunk-QXUST7PY-DYuD50pU.js} +10 -10
- package/dist/{chunk-QZHKN3VN-Diy_Cdek.js → chunk-QZHKN3VN-CYbwZKgJ.js} +1 -1
- package/dist/{chunk-S3R3BYOJ-C_1SJcWo.js → chunk-S3R3BYOJ-CsnX6RKs.js} +8 -8
- package/dist/{chunk-76Q3JFCE-CQ6a2yGJ.js → chunk-SJTYNZTY-j6_1s5om.js} +2 -2
- package/dist/{chunk-FPAJGGOC-quWdfNUB.js → chunk-TCCFYFTB-DdLCbCTn.js} +3995 -3985
- package/dist/{chunk-LHMN2FUI-CgYPnxfN.js → chunk-TQ3KTPDO-CGsUIC73.js} +2 -2
- package/dist/{chunk-TZMSLE5B-XW3duOft.js → chunk-TZMSLE5B-B3eYTGCw.js} +3 -3
- package/dist/{chunk-O7ZBX7Z2-CdpLwOP0.js → chunk-UMXZTB3W--LdAK3Bv.js} +2 -2
- package/dist/classDiagram-2ON5EDUG-C7C-oefv.js +30 -0
- package/dist/classDiagram-v2-WZHVMYZB-UTw37Gg8.js +30 -0
- package/dist/{clike-B90WKs4D.js → clike-CLJYUAWw.js} +1 -1
- package/dist/clojure-B2uhdQPa.js +4 -0
- package/dist/{clone-V9hndNcj.js → clone-BJrS4PdE.js} +1 -1
- package/dist/cmake-B9WXyQcc.js +4 -0
- package/dist/cobol-CPD3EJfO.js +4 -0
- package/dist/{code-block-37QAKDTI-zh5AeoJo.js → code-block-37QAKDTI-DV_ZyoUh.js} +1 -1
- package/dist/coffeescript-KD9TnEnS.js +4 -0
- package/dist/commonlisp-DNEULz_Q.js +4 -0
- package/dist/{constants-BGRTDzdW.js → constants-D1Tbg_6B.js} +3 -2
- package/dist/{cose-bilkent-S5V4N54A-BK1nIR2J.js → cose-bilkent-S5V4N54A-BCDTZDay.js} +2 -2
- package/dist/crystal-DVPNgAPQ.js +4 -0
- package/dist/css-fq3a1AH1.js +4 -0
- package/dist/cypher-Dtzq0BP7.js +4 -0
- package/dist/d-DcZudIhJ.js +4 -0
- package/dist/{dagre-6UL2VRFP-BArPH353.js → dagre-6UL2VRFP-BgsUhJrV.js} +88 -87
- package/dist/{dagre-Dcgyn_Uy.js → dagre-CyZCGfV_.js} +41 -84
- package/dist/{data-grid-overlay-editor-BVFT970w.js → data-grid-overlay-editor-BD0BFHzy.js} +2 -2
- package/dist/{diagram-PSM6KHXK-B1xAkr9y.js → diagram-PSM6KHXK-BIUUOfKo.js} +22 -22
- package/dist/{diagram-QEK2KX5R-CaoqwzPb.js → diagram-QEK2KX5R-BFjolZQv.js} +17 -17
- package/dist/{diagram-S2PKOQOG-NXCsFLvR.js → diagram-S2PKOQOG-4jfkWoZw.js} +17 -17
- package/dist/diff-D9BPDC3o.js +4 -0
- package/dist/{dist-IlWGXVjO.js → dist-7ZF--V_D.js} +2 -2
- package/dist/dist-BAeGo2rp.js +5 -0
- package/dist/{dist-Ey9hP8-j.js → dist-BBcqvpvP.js} +1 -1
- package/dist/{dist-DpAbrLuF.js → dist-BFL9TlzD.js} +5 -5
- package/dist/{dist-CD7uLx0M.js → dist-BLThQiU4.js} +2 -2
- package/dist/{dist-CoZ8kKKW.js → dist-BT6_J2eq.js} +1 -1
- package/dist/{dist-C_9IMrtt.js → dist-BTQbjEKU.js} +1 -1
- package/dist/dist-BqwCMSEa.js +5 -0
- package/dist/{dist-CUOuFgHt.js → dist-BuapEdlD.js} +113 -58
- package/dist/dist-Bum8FwTO.js +6 -0
- package/dist/{dist-LNp8svLl.js → dist-BwQHkjA9.js} +4 -4
- package/dist/dist-C0YiOwt_.js +5 -0
- package/dist/dist-C2uPv4iU.js +5 -0
- package/dist/{dist-Dmr_nXF6.js → dist-C4XMUaob.js} +2 -2
- package/dist/dist-C5hOLsJN.js +8 -0
- package/dist/{dist-a6Obzr07.js → dist-C6z8U-ms.js} +2 -2
- package/dist/dist-C9NIAKMs.js +8 -0
- package/dist/{dist-EZFqUJhh.js → dist-CB6qhQ8K.js} +1 -1
- package/dist/dist-CCrzTtvk.js +5 -0
- package/dist/dist-CFS9i1rS.js +8 -0
- package/dist/{dist-CMOy93xY.js → dist-CFToYDWO.js} +2 -2
- package/dist/{dist-DF_77D2B.js → dist-COpDrwi-.js} +1 -1
- package/dist/{dist-D8EhXZ4S.js → dist-CYo3w-nC.js} +3 -3
- package/dist/{dist-Dv2Phbh5.js → dist-Cb3cLT39.js} +2 -2
- package/dist/{dist-DOLQQtWK.js → dist-Ch_JuCvc.js} +3 -3
- package/dist/{dist-Cb3iqED3.js → dist-Cqpjy6bK.js} +1 -1
- package/dist/{dist-BswsDM4k.js → dist-CsqiXw7J.js} +2 -2
- package/dist/{dist-BoagoQQw.js → dist-CwtEWuFb.js} +2 -2
- package/dist/dist-CyHZuhPH.js +5 -0
- package/dist/dist-CzcjWdIk.js +6 -0
- package/dist/{dist-BUEi7EKT.js → dist-D0f6Yrrb.js} +1 -1
- package/dist/{dist-C5QB1NtD.js → dist-D7ZGWV_9.js} +3 -3
- package/dist/{dist-CrAYcS_4.js → dist-DEFZ7dnD.js} +2 -2
- package/dist/{dist-DrC0QKFK.js → dist-DMS81OrU.js} +1 -1
- package/dist/{dist-iyBCcLRa.js → dist-DUxS2paD.js} +2 -2
- package/dist/dist-DaYyUSNC.js +5 -0
- package/dist/{dist-W6TdeACj.js → dist-De9X_Des.js} +1 -1
- package/dist/dist-DpDcJYNh.js +8 -0
- package/dist/{dist-bz6WguLy.js → dist-I8MQW60_.js} +2 -2
- package/dist/{dist-BGzkWRSl.js → dist-IW_ARJ3S.js} +4 -4
- package/dist/{dist-xCB683Dh.js → dist-Qjf6pcqK.js} +2 -2
- package/dist/{dist-B_i29Q6L.js → dist-UYm1IE5s.js} +2 -2
- package/dist/dist-U_BfxcPn.js +5 -0
- package/dist/{dist-iDeoXzdN.js → dist-ovDpXuSB.js} +1 -1
- package/dist/{dockerfile-D1Q_4uCN.js → dockerfile-BxhYdLHL.js} +1 -1
- package/dist/dtd-FhG-tVom.js +4 -0
- package/dist/dylan-HWpZOBPw.js +4 -0
- package/dist/ecl-B_rcje1I.js +4 -0
- package/dist/eiffel-oqHyHs6f.js +4 -0
- package/dist/elm-B62RQEds.js +4 -0
- package/dist/{erDiagram-Q2GNP2WA-DWCa11g5.js → erDiagram-Q2GNP2WA-Cq5Bz5lG.js} +15 -15
- package/dist/erlang-CjRjjA-B.js +4 -0
- package/dist/{esm-DZSk8vt3.js → esm-BxMbHo0y.js} +107 -107
- package/dist/factor-CGH_TnIV.js +4 -0
- package/dist/{factor--4HHM8Rw.js → factor-Png_OsVt.js} +1 -1
- package/dist/{flowDiagram-NV44I4VS-BQ5PQs4L.js → flowDiagram-NV44I4VS-6WPJVFl7.js} +17 -17
- package/dist/forth-5N06oHNp.js +4 -0
- package/dist/fortran-wZ-sNg3h.js +4 -0
- package/dist/{ganttDiagram-JELNMOA3-NTOuNWeT.js → ganttDiagram-JELNMOA3-AfDhh9CI.js} +10 -10
- package/dist/gas-3H4_FaS8.js +4 -0
- package/dist/gherkin-PEA2uy50.js +4 -0
- package/dist/{gitGraph-F6HP7TQM-DfRNsaDw.js → gitGraph-G5XIXVHT-C0o6gecv.js} +3 -3
- package/dist/{gitGraphDiagram-NY62KEGX-CYke62Ot.js → gitGraphDiagram-V2S2FVAM-BRSwuj0Q.js} +17 -17
- package/dist/{glide-data-editor-DttqGjrT.js → glide-data-editor-ByPNTNVG.js} +7 -7
- package/dist/graphlib-DZnBMcsX.js +228 -0
- package/dist/groovy-DZzbvCP1.js +4 -0
- package/dist/haskell-CExLTzho.js +4 -0
- package/dist/haxe-f3pVb8qU.js +5 -0
- package/dist/idl-BbWlJ0gk.js +4 -0
- package/dist/{info-NVLQJR56-CUaoPtis.js → info-VBDWY6EO-Bzsods6X.js} +3 -3
- package/dist/infoDiagram-HS3SLOUP-Cmxo6jKx.js +30 -0
- package/dist/{_baseFor-B69PDbIz.js → isArrayLikeObject-Btu-i6_P.js} +216 -44
- package/dist/{isEmpty-6z2uv6gM.js → isEmpty-CZvUtYFp.js} +2 -2
- package/dist/{isString-D6abkXrl.js → isString-CBr7TEb7.js} +1 -1
- package/dist/{isSymbol-hk7foJ70.js → isSymbol-BuQsMXhk.js} +1 -1
- package/dist/javascript-eMOhp6Aq.js +4 -0
- package/dist/{journeyDiagram-XKPGCS4Q-ahXD97kr.js → journeyDiagram-XKPGCS4Q-CKYr8cSR.js} +7 -7
- package/dist/julia-C6w3Rvqb.js +4 -0
- package/dist/{kanban-definition-3W4ZIXB7-CiTIpnhy.js → kanban-definition-3W4ZIXB7-DVvAZzQD.js} +12 -12
- package/dist/{katex-DaGuLbVh.js → katex-pyO_klYC.js} +1 -1
- package/dist/{label-Cc5tEavt.js → label-CV0KYhtH.js} +4 -10
- package/dist/{line-Bc27KE1D.js → line-C1k1rG3Z.js} +3 -3
- package/dist/{linear-Bnc6E9kA.js → linear-DIp6l9sg.js} +4 -4
- package/dist/livescript-ChQl9lD-.js +4 -0
- package/dist/{loader-Cob3XFOw.js → loader-eJCvvApN.js} +2 -2
- package/dist/lua-CiDvI96j.js +4 -0
- package/dist/main-Tj_-QTyF.js +4321 -0
- package/dist/main.js +2019 -5031
- package/dist/mathematica-ClVO4k7N.js +4 -0
- package/dist/mbox-BEI7DeUg.js +4 -0
- package/dist/{memoize-Ckyqzyu_.js → memoize-P1T1IGb9.js} +1 -1
- package/dist/merge-CGQkMGzr.js +51 -0
- package/dist/{mermaid-4DMBBIKO-BmJdHPwx.js → mermaid-4DMBBIKO-PVrJfEpX.js} +1 -1
- package/dist/{mermaid-B5xl_2hx.js → mermaid-COOB_abB.js} +46 -46
- package/dist/{mermaid-parser.core-BXj7Il0J.js → mermaid-parser.core-Cd-wu4tE.js} +8 -8
- package/dist/{mhchem-B_tiMbKF.js → mhchem-DckvwtV8.js} +1 -1
- package/dist/min-CMDDtXJP.js +89 -0
- package/dist/{mindmap-definition-VGOIOE7T-Mni766A_.js → mindmap-definition-VGOIOE7T-1ExmnvYy.js} +14 -14
- package/dist/mirc-DwidJ3iH.js +4 -0
- package/dist/mllike-Dspdy0xJ.js +6 -0
- package/dist/modelica-CIUejP-L.js +4 -0
- package/dist/mscgen-BWXU4Omp.js +6 -0
- package/dist/mumps-PHFFoPk5.js +4 -0
- package/dist/now-BxlRp0OQ.js +7 -0
- package/dist/nsis-B7xooKLf.js +4 -0
- package/dist/{nsis-B6EN9LWI.js → nsis-BrAITej_.js} +1 -1
- package/dist/ntriples-DnOgtCzG.js +4 -0
- package/dist/{number-overlay-editor-DKVJgXpp.js → number-overlay-editor-CQrncFlP.js} +1 -1
- package/dist/octave-Cn5kH_QT.js +4 -0
- package/dist/{once-C9dA9qgQ.js → once-BqS42WgZ.js} +1 -1
- package/dist/{ordinal-DLLbwLkP.js → ordinal-Dcvf4J1m.js} +1 -1
- package/dist/oz-DR-sROpu.js +4 -0
- package/dist/{packet-BFZMPI3H-DHtQCusE.js → packet-DYOGHKS2-Bf1CvFco.js} +3 -3
- package/dist/pascal-CPKK1zcS.js +4 -0
- package/dist/perl-D7FuFdyd.js +4 -0
- package/dist/{pie-7BOR55EZ-2sVLYbpR.js → pie-VRWISCQL-LY_wbqji.js} +3 -3
- package/dist/{pieDiagram-ADFJNKIX-PbXpgT8_.js → pieDiagram-ADFJNKIX-CJlIsdsU.js} +22 -22
- package/dist/pig-CEXnOAnI.js +4 -0
- package/dist/powershell-BKvWab7q.js +4 -0
- package/dist/{precisionRound-Duzbr5ur.js → precisionRound-BAc-kQ3q.js} +1 -1
- package/dist/properties-7jnK_vYx.js +4 -0
- package/dist/protobuf-4rslMjEN.js +4 -0
- package/dist/pug-BVwdEv4r.js +4 -0
- package/dist/{pug-xrm7jQ2R.js → pug-CH-17az-.js} +1 -1
- package/dist/puppet-iSHg_1Z2.js +4 -0
- package/dist/python-tK3wUCn0.js +4 -0
- package/dist/q-DP_Dcoox.js +4 -0
- package/dist/{quadrantDiagram-AYHSOK5B-BtXGnx8i.js → quadrantDiagram-AYHSOK5B-BU78RiaH.js} +5 -5
- package/dist/r-C32wHLYu.js +4 -0
- package/dist/{radar-NHE76QYJ-Be0pEUux.js → radar-ZZBFDIW7-Ro3iXZCk.js} +3 -3
- package/dist/range-Dh0_-r8P.js +30 -0
- package/dist/{react-vega-CCNu2JE0.js → react-vega-C6kwcd86.js} +18 -18
- package/dist/react-vega-CFUuchds.js +9 -0
- package/dist/reduce-BXFHs7IQ.js +268 -0
- package/dist/{requirementDiagram-UZGBJVZJ-DxzXQRgq.js → requirementDiagram-UZGBJVZJ-DACHtrFr.js} +14 -14
- package/dist/rpm-BbDBUfs9.js +5 -0
- package/dist/ruby-COfWUiIr.js +4 -0
- package/dist/{sankeyDiagram-TZEHDZUN-D-I7dJ0_.js → sankeyDiagram-TZEHDZUN-Bzg7_UWs.js} +5 -5
- package/dist/sas-y_Hue2-X.js +4 -0
- package/dist/scheme-7jTCqHw8.js +4 -0
- package/dist/{sequenceDiagram-WL72ISMW-VDme2ljw.js → sequenceDiagram-WL72ISMW-agybEe9J.js} +8 -8
- package/dist/shell-DAqJWXDk.js +4 -0
- package/dist/sieve-EaqnbCO3.js +4 -0
- package/dist/slides-component-B0yK5GXP.js +3057 -0
- package/dist/smalltalk-DL03YKLJ.js +4 -0
- package/dist/sparql-DTA-tQ_q.js +4 -0
- package/dist/{spec-GwhMEXwK.js → spec-Dq_reDGM.js} +4 -4
- package/dist/{src-jICM_d2B.js → src-CHUphWwL.js} +1 -1
- package/dist/{stateDiagram-FKZM4ZOC-g3GI1EcK.js → stateDiagram-FKZM4ZOC-DehQAt8g.js} +19 -19
- package/dist/stateDiagram-v2-4FDKWEC3-8VzeREl9.js +29 -0
- package/dist/{step-BqVgkWtk.js → step-BbmiiQdf.js} +1 -1
- package/dist/stex-KfRnSHzF.js +4 -0
- package/dist/style.css +1 -1
- package/dist/stylus-CfjeFry_.js +4 -0
- package/dist/swift-Dl0RRDbH.js +4 -0
- package/dist/tcl-wv9O7fLZ.js +4 -0
- package/dist/textile-DzMRCBcV.js +4 -0
- package/dist/{time-CrYsYnQU.js → time-DFFVNc1Q.js} +4 -4
- package/dist/{timeline-definition-IT6M3QCI-bhvLlX_b.js → timeline-definition-IT6M3QCI-CdCfdaCF.js} +4 -4
- package/dist/toNumber-By7s5JC_.js +28 -0
- package/dist/{toString-BwTJvlyD.js → toString-Ckpb50uw.js} +8 -8
- package/dist/toml-CyIWqgbe.js +4 -0
- package/dist/{treemap-KMMF4GRG-Ba9ifjpG.js → treemap-GDKQZRPO-DRxfDG65.js} +3 -3
- package/dist/troff-_huin_CY.js +4 -0
- package/dist/ttcn-BEiJuYYc.js +4 -0
- package/dist/ttcn-cfg-DB6Ksh67.js +4 -0
- package/dist/turtle-DzhzGEum.js +4 -0
- package/dist/{types-Dsh6yC4B.js → types-BwnzGcE4.js} +31 -32
- package/dist/uniq-cCc07Q8K.js +8 -0
- package/dist/{useAsyncData-BPpyKjTJ.js → useAsyncData-B4hMFGnF.js} +2 -2
- package/dist/{useDeepCompareMemoize-C8Ms87P-.js → useDeepCompareMemoize-DuPhOXzr.js} +3 -3
- package/dist/{useIframeCapabilities-C7z8VrZ1.js → useIframeCapabilities-CAt6D2EI.js} +1 -1
- package/dist/{useTheme-Cq-gIssy.js → useTheme-BNYQnvu-.js} +2 -2
- package/dist/vb-CngKZQHu.js +4 -0
- package/dist/vbscript-BV_8nbeM.js +4 -0
- package/dist/{vega-component-B5sxdjMq.js → vega-component-DouPy8AI.js} +12 -15
- package/dist/{vega-loader.browser-DqHiiBeQ.js → vega-loader.browser-CQ-lnUkI.js} +3 -3
- package/dist/velocity-IqE7qYKE.js +4 -0
- package/dist/verilog-xtyaWTnc.js +4 -0
- package/dist/vhdl-BaqXCtf3.js +4 -0
- package/dist/webidl-BDB8PTTO.js +4 -0
- package/dist/xquery-BIC-qj9Z.js +4 -0
- package/dist/{xychartDiagram-PRI3JC2R-CFxuifYY.js → xychartDiagram-PRI3JC2R-rEm_SIsC.js} +13 -13
- package/dist/yacas-ifv5tftd.js +4 -0
- package/dist/z80-B8zOMVNt.js +4 -0
- package/package.json +11 -11
- package/src/__mocks__/requests.ts +2 -0
- package/src/components/app-config/ai-config.tsx +1 -1
- package/src/components/app-config/user-config-form.tsx +27 -0
- package/src/components/data-table/__tests__/pagination.test.tsx +16 -24
- package/src/components/data-table/charts/lazy-chart.tsx +1 -1
- package/src/components/data-table/data-table.tsx +20 -18
- package/src/components/data-table/pagination.tsx +138 -56
- package/src/components/data-table/range-focus/__tests__/cell-selection-stats.test.tsx +365 -0
- package/src/components/data-table/range-focus/__tests__/test-utils.ts +77 -0
- package/src/components/data-table/range-focus/__tests__/utils.test.ts +205 -65
- package/src/components/data-table/range-focus/cell-selection-stats.tsx +79 -0
- package/src/components/data-table/range-focus/utils.ts +69 -7
- package/src/components/data-table/types.ts +4 -0
- package/src/components/databases/engine-variable.tsx +2 -1
- package/src/components/databases/icons/google-cloud-storage.svg +38 -0
- package/src/components/datasources/components.tsx +6 -2
- package/src/components/dependency-graph/minimap-content.tsx +3 -5
- package/src/components/dependency-graph/utils/__tests__/cell-preview.test.ts +143 -0
- package/src/components/dependency-graph/utils/cell-preview.ts +46 -0
- package/src/components/editor/Output.tsx +3 -28
- package/src/components/editor/cell/cell-actions.tsx +6 -5
- package/src/components/editor/cell/cell-context-menu.tsx +11 -7
- package/src/components/editor/chrome/panels/components.tsx +88 -0
- package/src/components/editor/chrome/panels/file-explorer-panel.tsx +120 -7
- package/src/components/editor/chrome/panels/outline/floating-outline.tsx +27 -15
- package/src/components/editor/chrome/panels/session-panel.tsx +24 -35
- package/src/components/editor/file-tree/__tests__/requesting-tree.test.ts +17 -1
- package/src/components/editor/file-tree/file-explorer.tsx +38 -6
- package/src/components/editor/file-tree/file-header.tsx +61 -0
- package/src/components/editor/file-tree/file-viewer.tsx +88 -167
- package/src/components/editor/file-tree/renderers.tsx +142 -21
- package/src/components/editor/file-tree/requesting-tree.tsx +6 -2
- package/src/components/editor/output/console/ConsoleOutput.tsx +34 -2
- package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +13 -0
- package/src/components/icons/marimo-icons.tsx +173 -0
- package/src/components/markdown/markdown-renderer.tsx +3 -20
- package/src/components/pages/run-page.tsx +2 -2
- package/src/components/storage/components.tsx +86 -0
- package/src/components/storage/storage-file-viewer.tsx +225 -0
- package/src/components/storage/storage-inspector.tsx +610 -0
- package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +79 -0
- package/src/core/ai/tools/edit-notebook-tool.ts +5 -0
- package/src/core/cells/__tests__/cells.test.ts +30 -0
- package/src/core/cells/cells.ts +6 -1
- package/src/core/cells/outline.ts +7 -1
- package/src/core/cells/outputs.ts +20 -8
- package/src/core/codemirror/language/languages/sql/sql.ts +76 -62
- package/src/core/codemirror/language/panel/sql.tsx +3 -3
- package/src/core/codemirror/lsp/__tests__/normalize-markdown-math.test.ts +123 -0
- package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +196 -0
- package/src/core/codemirror/lsp/normalize-markdown-math.ts +381 -0
- package/src/core/codemirror/lsp/notebook-lsp.ts +59 -3
- package/src/core/config/feature-flag.tsx +2 -0
- package/src/core/dom/__tests__/outline.test.ts +48 -0
- package/src/core/dom/outline.ts +13 -2
- package/src/core/islands/bridge.ts +2 -0
- package/src/core/islands/main.ts +2 -0
- package/src/core/network/requests-lazy.ts +2 -0
- package/src/core/network/requests-network.ts +16 -0
- package/src/core/network/requests-static.ts +2 -0
- package/src/core/network/requests-toasting.tsx +2 -0
- package/src/core/network/types.ts +6 -0
- package/src/core/storage/__tests__/state.test.ts +345 -0
- package/src/core/storage/__tests__/types.test.ts +83 -0
- package/src/core/storage/__tests__/useStorageEntries.test.tsx +187 -0
- package/src/core/storage/request-registry.ts +36 -0
- package/src/core/storage/state.ts +132 -0
- package/src/core/storage/types.ts +57 -0
- package/src/core/wasm/bridge.ts +2 -0
- package/src/core/websocket/useMarimoKernelConnection.tsx +19 -1
- package/src/hooks/__tests__/useNonce.test.tsx +127 -0
- package/src/hooks/__tests__/useOverflowDetection.test.tsx +127 -0
- package/src/hooks/useNonce.ts +6 -5
- package/src/hooks/useOverflowDetection.ts +36 -0
- package/src/plugins/impl/MatrixPlugin.tsx +5 -2
- package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +1 -1
- package/src/plugins/impl/code/any-language-editor.tsx +14 -3
- package/src/utils/__tests__/filenames.test.ts +54 -1
- package/src/utils/filenames.ts +42 -0
- package/dist/apl-C1bki_dE.js +0 -4
- package/dist/architecture-U656AL7Q-Jd2CvPgJ.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-CUJlS_eo.js +0 -30
- package/dist/classDiagram-v2-WZHVMYZB-BhSPpbkE.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-BA-HK7pI.js +0 -5
- package/dist/dist-BD5GU948.js +0 -5
- package/dist/dist-BIYmAsND.js +0 -5
- package/dist/dist-BcKTJXJi.js +0 -5
- package/dist/dist-BgnrtcWg.js +0 -8
- package/dist/dist-C1njTlBq.js +0 -5
- package/dist/dist-CSKHwJYH.js +0 -5
- package/dist/dist-CSKKyiIq.js +0 -5
- package/dist/dist-CrQ_pOuK.js +0 -6
- package/dist/dist-Cskx1daf.js +0 -5
- package/dist/dist-D4i0Ef34.js +0 -8
- package/dist/dist-DOcn61TX.js +0 -8
- package/dist/dist-DwMejAPB.js +0 -6
- package/dist/dist-DzSe1wby.js +0 -8
- 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/flatten-CWZjF1fc.js +0 -8
- 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-CwMnCnQ9.js +0 -362
- 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-WHAUD3N6-B42WjAPh.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/main-DmxVpB19.js +0 -1089
- package/dist/mathematica-DvR8-_EI.js +0 -4
- package/dist/mbox-7h5MNBS_.js +0 -4
- package/dist/merge-Db4Uulx4.js +0 -222
- package/dist/min-ypdVXicC.js +0 -38
- 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-Dwu5ou19.js +0 -31
- 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-D9jxVFd_.js +0 -67
- package/dist/react-vega-1ub36dPZ.js +0 -9
- package/dist/reduce-C6NEPj6s.js +0 -133
- 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/slides-component-ql7-5GDI.js +0 -3048
- package/dist/smalltalk-BuaPZAZU.js +0 -4
- package/dist/sparql-1rKrq463.js +0 -4
- package/dist/stateDiagram-v2-4FDKWEC3-7i6jBXe6.js +0 -29
- package/dist/stex-D2rme5UG.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/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-CRbA-1eg.js → ImageComparisonComponent-BYQfAfSR.js} +0 -0
- /package/dist/{Plot-C9vQQj4X.js → Plot-DfUav0o0.js} +0 -0
- /package/dist/{_arrayReduce-REKcIEj3.js → _arrayReduce-BfFy684W.js} +0 -0
- /package/dist/{_hasUnicode-DrSAc5A5.js → _hasUnicode-C32WqUu7.js} +0 -0
- /package/dist/{apl-Oc3bL26_.js → apl-DRxKiEot.js} +0 -0
- /package/dist/{array-CEIRxyh3.js → array-D-nrDupM.js} +0 -0
- /package/dist/{asciiarmor-DTbPh2VI.js → asciiarmor-C8HoXFIm.js} +0 -0
- /package/dist/{asn1-CGhwu1Ri.js → asn1-9Bo0DYT-.js} +0 -0
- /package/dist/{asterisk-Crp-Pien.js → asterisk-BsiuGzWq.js} +0 -0
- /package/dist/{brainfuck-CA0L8lRq.js → brainfuck-Db8njC-p.js} +0 -0
- /package/dist/{click-outside-container-C_k38vlR.js → click-outside-container-CKfwEZqH.js} +0 -0
- /package/dist/{clike-CEtUBPHD.js → clike-CFhUNtI5.js} +0 -0
- /package/dist/{clojure-BszjvdGo.js → clojure-CX7oovsp.js} +0 -0
- /package/dist/{cmake-B2Gvps8b.js → cmake-C29AR2kk.js} +0 -0
- /package/dist/{cobol-DuMch8nn.js → cobol-CNkuRW9i.js} +0 -0
- /package/dist/{coffeescript-L9aKXVsJ.js → coffeescript-BJAbfGam.js} +0 -0
- /package/dist/{colors-DR_aHfmQ.js → colors-6nB_pSln.js} +0 -0
- /package/dist/{common-keywords-NhoiR-2S.js → common-keywords-BAkLFdud.js} +0 -0
- /package/dist/{commonlisp-CrtdssxB.js → commonlisp-BTNhj2l9.js} +0 -0
- /package/dist/{crystal-vvNY0LpY.js → crystal-CZc0nIm9.js} +0 -0
- /package/dist/{css-B1GdzqT1.js → css-L2-0OTXc.js} +0 -0
- /package/dist/{cypher-BtZvV7bW.js → cypher-Dnc6MXl0.js} +0 -0
- /package/dist/{cytoscape.esm-CgJFiP_E.js → cytoscape.esm-BXzSsA6N.js} +0 -0
- /package/dist/{d-B0UN3V-Z.js → d-C6X9iIga.js} +0 -0
- /package/dist/{defaultLocale-DjFHq3Xk.js → defaultLocale-Bklbu-Tp.js} +0 -0
- /package/dist/{defaultLocale-B_A76Zpk.js → defaultLocale-CfQ4kBaV.js} +0 -0
- /package/dist/{diff-DOpgjj1W.js → diff-ZzKinYqY.js} +0 -0
- /package/dist/{dist-BYznkC5E.js → dist-Bymy0kEH.js} +0 -0
- /package/dist/{dtd-Ctnjxrle.js → dtd-CytEpkAo.js} +0 -0
- /package/dist/{duckdb-keywords-BnNtuiVz.js → duckdb-keywords-C1WxmSfG.js} +0 -0
- /package/dist/{dylan-DFXkoaZy.js → dylan-CZByFBEQ.js} +0 -0
- /package/dist/{ebnf-CFKHGc8c.js → ebnf-BF2FOt-m.js} +0 -0
- /package/dist/{ecl-C1NExZip.js → ecl-Cp7L1F5B.js} +0 -0
- /package/dist/{eiffel-uXVGgleg.js → eiffel-C66yjnFL.js} +0 -0
- /package/dist/{elm-CBOFnnib.js → elm-DtHo-73e.js} +0 -0
- /package/dist/{emotion-is-prop-valid.esm--WpIBtj8.js → emotion-is-prop-valid.esm-DtW2o230.js} +0 -0
- /package/dist/{erlang-DMnrT8XK.js → erlang-C_sj44mF.js} +0 -0
- /package/dist/{error-banner-vCG-EbUQ.js → error-banner-D0tXnwl4.js} +0 -0
- /package/dist/{esm-0_ieXYNc.js → esm-BWftfC-A.js} +0 -0
- /package/dist/{fcl-DPZwieM9.js → fcl-BhLcvRo_.js} +0 -0
- /package/dist/{forth-DDpxS4nw.js → forth-CIDHh56T.js} +0 -0
- /package/dist/{fortran-B6uYqQMz.js → fortran-BQrDVXRU.js} +0 -0
- /package/dist/{gas-BKnWzuFz.js → gas-D4HQPB0Q.js} +0 -0
- /package/dist/{gherkin-pBt0wT4X.js → gherkin-UB2gJHdT.js} +0 -0
- /package/dist/{groovy-DKsn4ppB.js → groovy-DVz6jkOx.js} +0 -0
- /package/dist/{haskell-BJVBJQcy.js → haskell-CpUdAPCz.js} +0 -0
- /package/dist/{haxe-rLN5UZU5.js → haxe-DCV5_cqD.js} +0 -0
- /package/dist/{http-AQJFxSug.js → http-C_TDb8VX.js} +0 -0
- /package/dist/{idl-B4mwMAo-.js → idl-D7WCIgHw.js} +0 -0
- /package/dist/{init-TaqZJsBY.js → init-Ci8VD8ZH.js} +0 -0
- /package/dist/{invariant-D-K49MfV.js → invariant-D9QLJ4SZ.js} +0 -0
- /package/dist/{javascript-Hf2NLNC0.js → javascript-B2Rn0Lmd.js} +0 -0
- /package/dist/{julia-GGpx21YN.js → julia-ApprtEaw.js} +0 -0
- /package/dist/{katex-Ba7xZPrx.js → katex-Bk_FvVSR.js} +0 -0
- /package/dist/{livescript-CSvXMspZ.js → livescript-BMLIlM7C.js} +0 -0
- /package/dist/{lua-CVMR5LMW.js → lua-DdDaW3tC.js} +0 -0
- /package/dist/{math-CTnb-N1W.js → math-HUZifhTs.js} +0 -0
- /package/dist/{mathematica-JENNt-p4.js → mathematica-PnNN7c2Z.js} +0 -0
- /package/dist/{mbox-mzifoc8E.js → mbox-B84OtHBK.js} +0 -0
- /package/dist/{mirc-BXoiItvN.js → mirc-BVWXJxIq.js} +0 -0
- /package/dist/{mllike-H-KR9OuH.js → mllike-BawXWupH.js} +0 -0
- /package/dist/{modelica-B6Hm3mMl.js → modelica-C8-X4Hf_.js} +0 -0
- /package/dist/{mscgen-D8TF_Hei.js → mscgen-BOM6dDj8.js} +0 -0
- /package/dist/{mumps-CD-kNPt4.js → mumps-DQOY8n05.js} +0 -0
- /package/dist/{nginx-hpek_Tnq.js → nginx-DkMgA__9.js} +0 -0
- /package/dist/{node-sql-parser-ChQUJk8A.js → node-sql-parser-D53LM_7b.js} +0 -0
- /package/dist/{ntriples-DgnpxU40.js → ntriples-DU8VrXdW.js} +0 -0
- /package/dist/{octave-CkobqyVm.js → octave-BzTIBsQ8.js} +0 -0
- /package/dist/{oz-ChDLd9tS.js → oz-DKFcZsoi.js} +0 -0
- /package/dist/{pascal-CvlkwK7E.js → pascal-DHBZ15pT.js} +0 -0
- /package/dist/{path-7gr7eZmp.js → path-BVI7RNUv.js} +0 -0
- /package/dist/{perl-BNEFTNbM.js → perl-75NMI3w0.js} +0 -0
- /package/dist/{pig-Cd1DMS7P.js → pig-B-HY1fo_.js} +0 -0
- /package/dist/{powershell-CPxA0zpc.js → powershell-DEH22U53.js} +0 -0
- /package/dist/{properties-BaFBm-Xa.js → properties-B1MzBoJC.js} +0 -0
- /package/dist/{protobuf-BQV_-X0H.js → protobuf-Dr14KV0p.js} +0 -0
- /package/dist/{puppet-LXLST0mx.js → puppet-C4z38l7v.js} +0 -0
- /package/dist/{purify.es-D4vaFt5N.js → purify.es-CyOIw8ru.js} +0 -0
- /package/dist/{python-DLjLzX4k.js → python-D2L7Nknt.js} +0 -0
- /package/dist/{q-DswTX1Y9.js → q-PxipHfgS.js} +0 -0
- /package/dist/{r-CO7NpMwE.js → r-CEMMu_Tf.js} +0 -0
- /package/dist/{range-DwpxnYuB.js → range-BToS7LsA.js} +0 -0
- /package/dist/{rpm-BlmEDT6r.js → rpm-D3xyahkR.js} +0 -0
- /package/dist/{ruby-BTPKgeZZ.js → ruby-DwEkwdiu.js} +0 -0
- /package/dist/{sas-DTDTiNO8.js → sas-L1W0BRft.js} +0 -0
- /package/dist/{scheme-UzAAg4GJ.js → scheme-CTybTrX0.js} +0 -0
- /package/dist/{shell-DQ0hQCsB.js → shell-BSx3LZnu.js} +0 -0
- /package/dist/{sieve-BVyYIx9u.js → sieve-BjUfbv-6.js} +0 -0
- /package/dist/{simple-mode-Dryu-fC9.js → simple-mode-IPZGFbI6.js} +0 -0
- /package/dist/{smalltalk-DAdMAHTu.js → smalltalk-BlzuYrMv.js} +0 -0
- /package/dist/{solr-BSTJW269.js → solr-Cj_9RM4d.js} +0 -0
- /package/dist/{sparql-Bi7quYgw.js → sparql-BXKjQ0cK.js} +0 -0
- /package/dist/{spreadsheet-CiBky1_y.js → spreadsheet-CifI10GO.js} +0 -0
- /package/dist/{sql-BXZovj-z.js → sql-B0bFyY1c.js} +0 -0
- /package/dist/{stex-DIvyJfNO.js → stex-BIsgBmK4.js} +0 -0
- /package/dist/{stylus-jhpzcQ6Y.js → stylus-CqrLLVnG.js} +0 -0
- /package/dist/{swift-BrO8qThZ.js → swift-DIqvj3_G.js} +0 -0
- /package/dist/{tcl-s5QI5gv3.js → tcl-B8bOIGVK.js} +0 -0
- /package/dist/{textile-ClhvJrxM.js → textile-DZsjavD_.js} +0 -0
- /package/dist/{tiddlywiki-DLTDKQCh.js → tiddlywiki-BbGdvEjx.js} +0 -0
- /package/dist/{tiki-tw_kBvbp.js → tiki-BYesmRDo.js} +0 -0
- /package/dist/{timer-DV8t68ti.js → timer-CPsmIOdm.js} +0 -0
- /package/dist/{toml-TFa3EJQE.js → toml-Uc7m08nl.js} +0 -0
- /package/dist/{treemap-CQJ0bIDy.js → treemap-DMn4tIJ7.js} +0 -0
- /package/dist/{troff-SqLg0heF.js → troff-GEl5wcXR.js} +0 -0
- /package/dist/{ttcn-cfg-Dopc-iwE.js → ttcn-cfg-dZQ_fWTH.js} +0 -0
- /package/dist/{ttcn-Cfrap7HJ.js → ttcn-pr4FDOLT.js} +0 -0
- /package/dist/{turtle-Dt52DvVH.js → turtle-TPRDOknA.js} +0 -0
- /package/dist/{vb-D1pAvfDe.js → vb-BJUAeTYr.js} +0 -0
- /package/dist/{vbscript-DZ7RBxn5.js → vbscript-CcJ6Z3ic.js} +0 -0
- /package/dist/{velocity-Csau7eZy.js → velocity-pq4ZMzU3.js} +0 -0
- /package/dist/{verilog-gXlZACs5.js → verilog-timMNjHt.js} +0 -0
- /package/dist/{vhdl-NaUWbI1B.js → vhdl-DYFbVKNm.js} +0 -0
- /package/dist/{webidl-BJmPjW01.js → webidl-pue9oqnb.js} +0 -0
- /package/dist/{xquery-CJIPsC0g.js → xquery-DeItGynK.js} +0 -0
- /package/dist/{yacas-8f2Vjiiz.js → yacas-By2Qrjba.js} +0 -0
- /package/dist/{z80-s5Xk2hCP.js → z80-C7iLsyPC.js} +0 -0
- /package/src/components/editor/file-tree/__tests__/{file-expolorer.test.ts → file-explorer.test.ts} +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { extractCellPreview } from "../cell-preview";
|
|
5
|
+
|
|
6
|
+
describe("extractCellPreview", () => {
|
|
7
|
+
describe("markdown cells", () => {
|
|
8
|
+
it("extracts heading from f-string triple-double-quoted markdown", () => {
|
|
9
|
+
expect(extractCellPreview('mo.md(f"""# Heading\nbody""")')).toEqual({
|
|
10
|
+
text: "# Heading",
|
|
11
|
+
type: "markdown",
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it("extracts text from r-prefixed triple-double-quoted markdown", () => {
|
|
16
|
+
expect(extractCellPreview('mo.md(r"""text""")')).toEqual({
|
|
17
|
+
text: "text",
|
|
18
|
+
type: "markdown",
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("skips leading empty lines", () => {
|
|
23
|
+
expect(extractCellPreview('mo.md(f"""\n# Heading\n""")')).toEqual({
|
|
24
|
+
text: "# Heading",
|
|
25
|
+
type: "markdown",
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("returns undefined text for empty markdown", () => {
|
|
30
|
+
expect(extractCellPreview('mo.md("")')).toEqual({
|
|
31
|
+
text: undefined,
|
|
32
|
+
type: "markdown",
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("works with single-quoted strings", () => {
|
|
37
|
+
expect(extractCellPreview("mo.md('single line')")).toEqual({
|
|
38
|
+
text: "single line",
|
|
39
|
+
type: "markdown",
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("works with triple-single-quoted strings", () => {
|
|
44
|
+
expect(extractCellPreview("mo.md('''some text''')")).toEqual({
|
|
45
|
+
text: "some text",
|
|
46
|
+
type: "markdown",
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("works with fr prefix", () => {
|
|
51
|
+
expect(extractCellPreview('mo.md(fr"""# Title\n{x}""")')).toEqual({
|
|
52
|
+
text: "# Title",
|
|
53
|
+
type: "markdown",
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("works with no prefix", () => {
|
|
58
|
+
expect(extractCellPreview('mo.md("""plain text""")')).toEqual({
|
|
59
|
+
text: "plain text",
|
|
60
|
+
type: "markdown",
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
describe("SQL cells", () => {
|
|
66
|
+
it("extracts SQL from assignment with f-string", () => {
|
|
67
|
+
expect(
|
|
68
|
+
extractCellPreview('_df = mo.sql(f"""SELECT * FROM cars""")'),
|
|
69
|
+
).toEqual({
|
|
70
|
+
text: "SELECT * FROM cars",
|
|
71
|
+
type: "sql",
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("skips leading newlines in SQL", () => {
|
|
76
|
+
expect(
|
|
77
|
+
extractCellPreview('_df = mo.sql(f"""\nSELECT * FROM t\n""")'),
|
|
78
|
+
).toEqual({
|
|
79
|
+
text: "SELECT * FROM t",
|
|
80
|
+
type: "sql",
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("returns first line of multi-line SQL", () => {
|
|
85
|
+
expect(
|
|
86
|
+
extractCellPreview(
|
|
87
|
+
'_df = mo.sql(f"""SELECT *\nFROM users\nWHERE id = 1""")',
|
|
88
|
+
),
|
|
89
|
+
).toEqual({
|
|
90
|
+
text: "SELECT *",
|
|
91
|
+
type: "sql",
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it("handles SQL with engine kwarg after string", () => {
|
|
96
|
+
expect(
|
|
97
|
+
extractCellPreview('_df = mo.sql(f"""SELECT 1""", engine=my_engine)'),
|
|
98
|
+
).toEqual({
|
|
99
|
+
text: "SELECT 1",
|
|
100
|
+
type: "sql",
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("returns undefined text for empty SQL string", () => {
|
|
105
|
+
expect(extractCellPreview('_df = mo.sql(f"""""")')).toEqual({
|
|
106
|
+
text: undefined,
|
|
107
|
+
type: "sql",
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
describe("Python fallback", () => {
|
|
113
|
+
it("returns first line of Python code", () => {
|
|
114
|
+
expect(extractCellPreview("import pandas as pd")).toEqual({
|
|
115
|
+
text: "import pandas as pd",
|
|
116
|
+
type: "python",
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it("returns first line of multi-line Python", () => {
|
|
121
|
+
expect(extractCellPreview("x = 1\ny = 2")).toEqual({
|
|
122
|
+
text: "x = 1",
|
|
123
|
+
type: "python",
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it("returns undefined text for empty string", () => {
|
|
128
|
+
// MarkdownParser.isSupported("") returns true, so empty cells
|
|
129
|
+
// are classified as markdown — the text is undefined either way.
|
|
130
|
+
expect(extractCellPreview("")).toEqual({
|
|
131
|
+
text: undefined,
|
|
132
|
+
type: "markdown",
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("returns undefined text for whitespace-only string", () => {
|
|
137
|
+
expect(extractCellPreview(" \n ")).toEqual({
|
|
138
|
+
text: undefined,
|
|
139
|
+
type: "markdown",
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { MarkdownParser, SQLParser } from "@marimo-team/smart-cells";
|
|
4
|
+
|
|
5
|
+
export interface CellPreview {
|
|
6
|
+
text: string | undefined;
|
|
7
|
+
type: "python" | "markdown" | "sql";
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const markdownParser = new MarkdownParser();
|
|
11
|
+
const sqlParser = new SQLParser();
|
|
12
|
+
|
|
13
|
+
function firstNonEmptyLine(content: string): string | undefined {
|
|
14
|
+
for (const line of content.split("\n")) {
|
|
15
|
+
const trimmed = line.trim();
|
|
16
|
+
if (trimmed.length > 0) {
|
|
17
|
+
return trimmed;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Extract a human-readable preview and cell type from raw cell code.
|
|
25
|
+
*
|
|
26
|
+
* For markdown cells (`mo.md(...)`) and SQL cells (`mo.sql(...)`),
|
|
27
|
+
* returns the inner content's first non-empty line instead of the
|
|
28
|
+
* Python wrapper boilerplate.
|
|
29
|
+
*/
|
|
30
|
+
export function extractCellPreview(code: string): CellPreview {
|
|
31
|
+
const trimmed = code.trim();
|
|
32
|
+
|
|
33
|
+
if (markdownParser.isSupported(trimmed)) {
|
|
34
|
+
const { code: inner } = markdownParser.transformIn(trimmed);
|
|
35
|
+
return { text: firstNonEmptyLine(inner), type: "markdown" };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (sqlParser.isSupported(trimmed)) {
|
|
39
|
+
const { code: inner } = sqlParser.transformIn(trimmed);
|
|
40
|
+
return { text: firstNonEmptyLine(inner), type: "sql" };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Python fallback: first line of raw code
|
|
44
|
+
const firstLine = trimmed.split("\n")[0]?.trim();
|
|
45
|
+
return { text: firstLine || undefined, type: "python" };
|
|
46
|
+
}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
import React, {
|
|
3
|
-
memo,
|
|
4
|
-
Suspense,
|
|
5
|
-
useEffect,
|
|
6
|
-
useMemo,
|
|
7
|
-
useRef,
|
|
8
|
-
useState,
|
|
9
|
-
} from "react";
|
|
2
|
+
import React, { memo, Suspense, useMemo, useRef } from "react";
|
|
10
3
|
import { type CellId, CellOutputId } from "@/core/cells/ids";
|
|
11
4
|
import type { CellOutput, OutputMessage } from "@/core/kernel/messages";
|
|
12
5
|
import { cn } from "@/utils/cn";
|
|
@@ -30,6 +23,7 @@ import { tooltipHandler } from "@/components/charts/tooltip";
|
|
|
30
23
|
import { useExpandedOutput } from "@/core/cells/outputs";
|
|
31
24
|
import { viewStateAtom } from "@/core/mode";
|
|
32
25
|
import { useIframeCapabilities } from "@/hooks/useIframeCapabilities";
|
|
26
|
+
import { useOverflowDetection } from "@/hooks/useOverflowDetection";
|
|
33
27
|
import { renderHTML } from "@/plugins/core/RenderHTML";
|
|
34
28
|
import { Banner } from "@/plugins/impl/common/error-banner";
|
|
35
29
|
import type { TopLevelFacetedUnitSpec } from "@/plugins/impl/data-explorer/queries/types";
|
|
@@ -427,28 +421,9 @@ const ExpandableOutput = React.memo(
|
|
|
427
421
|
}) => {
|
|
428
422
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
429
423
|
const [isExpanded, setIsExpanded] = useExpandedOutput(cellId);
|
|
430
|
-
const
|
|
424
|
+
const isOverflowing = useOverflowDetection(containerRef);
|
|
431
425
|
const { hasFullscreen } = useIframeCapabilities();
|
|
432
426
|
|
|
433
|
-
// Create resize observer to detect overflow
|
|
434
|
-
useEffect(() => {
|
|
435
|
-
if (!containerRef.current) {
|
|
436
|
-
return;
|
|
437
|
-
}
|
|
438
|
-
const el = containerRef.current;
|
|
439
|
-
|
|
440
|
-
const detectOverflow = () => {
|
|
441
|
-
setIsOverflowing(el.scrollHeight > el.clientHeight);
|
|
442
|
-
};
|
|
443
|
-
|
|
444
|
-
const resizeObserver = new ResizeObserver(detectOverflow);
|
|
445
|
-
resizeObserver.observe(el);
|
|
446
|
-
|
|
447
|
-
return () => {
|
|
448
|
-
resizeObserver.disconnect();
|
|
449
|
-
};
|
|
450
|
-
}, [props.id]);
|
|
451
|
-
|
|
452
427
|
return (
|
|
453
428
|
<>
|
|
454
429
|
<div>
|
|
@@ -64,6 +64,10 @@ const CellActionsDropdownInternal = (
|
|
|
64
64
|
const buttonRef = useRef<HTMLButtonElement>(null);
|
|
65
65
|
const actions = useCellActionButtons({ cell: props, closePopover });
|
|
66
66
|
|
|
67
|
+
const visibleActions = actions
|
|
68
|
+
.map((group) => group.filter((action) => !action.redundant))
|
|
69
|
+
.filter((group) => group.length > 0);
|
|
70
|
+
|
|
67
71
|
// store the last focused element so we can restore it when the popover closes
|
|
68
72
|
const restoreFocus = useRestoreFocus();
|
|
69
73
|
|
|
@@ -112,13 +116,10 @@ const CellActionsDropdownInternal = (
|
|
|
112
116
|
/>
|
|
113
117
|
<CommandList>
|
|
114
118
|
<CommandEmpty>No results</CommandEmpty>
|
|
115
|
-
{
|
|
119
|
+
{visibleActions.map((group, i) => (
|
|
116
120
|
<Fragment key={i}>
|
|
117
121
|
<CommandGroup key={i}>
|
|
118
122
|
{group.map((action) => {
|
|
119
|
-
if (action.redundant) {
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
123
|
let body = (
|
|
123
124
|
<div className="flex items-center flex-1">
|
|
124
125
|
{action.icon && (
|
|
@@ -162,7 +163,7 @@ const CellActionsDropdownInternal = (
|
|
|
162
163
|
);
|
|
163
164
|
})}
|
|
164
165
|
</CommandGroup>
|
|
165
|
-
{i <
|
|
166
|
+
{i < visibleActions.length - 1 && <CommandSeparator />}
|
|
166
167
|
</Fragment>
|
|
167
168
|
))}
|
|
168
169
|
</CommandList>
|
|
@@ -26,6 +26,7 @@ import { isOutputEmpty } from "@/core/cells/outputs";
|
|
|
26
26
|
import { goToDefinitionAtCursorPosition } from "@/core/codemirror/go-to-definition/utils";
|
|
27
27
|
import { sendToPanelManager } from "@/core/vscode/vscode-bindings";
|
|
28
28
|
import { copyToClipboard } from "@/utils/copy";
|
|
29
|
+
import { getImageExtension } from "@/utils/filenames";
|
|
29
30
|
import { Logger } from "@/utils/Logger";
|
|
30
31
|
import type { ActionButton } from "../actions/types";
|
|
31
32
|
import {
|
|
@@ -154,8 +155,9 @@ export const CellActionsContextMenu = ({
|
|
|
154
155
|
handle: () => {
|
|
155
156
|
if (imageRightClicked) {
|
|
156
157
|
const link = document.createElement("a");
|
|
157
|
-
link.download = "image.png";
|
|
158
158
|
link.href = imageRightClicked.src;
|
|
159
|
+
const ext = getImageExtension(imageRightClicked.src) || "png";
|
|
160
|
+
link.download = `image.${ext}`;
|
|
159
161
|
link.click();
|
|
160
162
|
}
|
|
161
163
|
},
|
|
@@ -174,6 +176,12 @@ export const CellActionsContextMenu = ({
|
|
|
174
176
|
|
|
175
177
|
const allActions: ActionButton[][] = [DEFAULT_CONTEXT_MENU_ITEMS, ...actions];
|
|
176
178
|
|
|
179
|
+
const visibleActions = allActions
|
|
180
|
+
.map((group) =>
|
|
181
|
+
group.filter((action) => !action.hidden && !action.redundant),
|
|
182
|
+
)
|
|
183
|
+
.filter((group) => group.length > 0);
|
|
184
|
+
|
|
177
185
|
return (
|
|
178
186
|
<ContextMenu>
|
|
179
187
|
<ContextMenuTrigger
|
|
@@ -189,13 +197,9 @@ export const CellActionsContextMenu = ({
|
|
|
189
197
|
{children}
|
|
190
198
|
</ContextMenuTrigger>
|
|
191
199
|
<ContextMenuContent className="w-[300px]" scrollable={true}>
|
|
192
|
-
{
|
|
200
|
+
{visibleActions.map((group, i) => (
|
|
193
201
|
<Fragment key={i}>
|
|
194
202
|
{group.map((action) => {
|
|
195
|
-
if (action.hidden || action.redundant) {
|
|
196
|
-
return null;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
203
|
let body = (
|
|
200
204
|
<div className="flex items-center flex-1">
|
|
201
205
|
{action.icon && (
|
|
@@ -256,7 +260,7 @@ export const CellActionsContextMenu = ({
|
|
|
256
260
|
</Fragment>
|
|
257
261
|
);
|
|
258
262
|
})}
|
|
259
|
-
{i <
|
|
263
|
+
{i < visibleActions.length - 1 && <ContextMenuSeparator />}
|
|
260
264
|
</Fragment>
|
|
261
265
|
))}
|
|
262
266
|
</ContextMenuContent>
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import {
|
|
5
|
+
AccordionContent,
|
|
6
|
+
AccordionItem,
|
|
7
|
+
AccordionTrigger,
|
|
8
|
+
} from "@/components/ui/accordion";
|
|
9
|
+
import { Badge } from "@/components/ui/badge";
|
|
10
|
+
import { cn } from "@/utils/cn";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Styled AccordionItem for sidebar panels.
|
|
14
|
+
* Applies border-b by default; set `lastItem` to remove it on the final item.
|
|
15
|
+
*/
|
|
16
|
+
const PanelAccordionItem = React.forwardRef<
|
|
17
|
+
React.ComponentRef<typeof AccordionItem>,
|
|
18
|
+
React.ComponentPropsWithoutRef<typeof AccordionItem> & {
|
|
19
|
+
lastItem?: boolean;
|
|
20
|
+
}
|
|
21
|
+
>(({ className, lastItem, ...props }, ref) => (
|
|
22
|
+
<AccordionItem
|
|
23
|
+
ref={ref}
|
|
24
|
+
className={cn(lastItem && "border-b-0", className)}
|
|
25
|
+
{...props}
|
|
26
|
+
/>
|
|
27
|
+
));
|
|
28
|
+
PanelAccordionItem.displayName = "PanelAccordionItem";
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Styled AccordionTrigger for sidebar panels.
|
|
32
|
+
* Applies compact uppercase styling and wraps children in a flex container
|
|
33
|
+
* with gap for icon + label layout.
|
|
34
|
+
*/
|
|
35
|
+
const PanelAccordionTrigger = React.forwardRef<
|
|
36
|
+
React.ComponentRef<typeof AccordionTrigger>,
|
|
37
|
+
React.ComponentPropsWithoutRef<typeof AccordionTrigger>
|
|
38
|
+
>(({ className, children, ...props }, ref) => (
|
|
39
|
+
<AccordionTrigger
|
|
40
|
+
ref={ref}
|
|
41
|
+
className={cn(
|
|
42
|
+
"px-3 py-2 text-xs font-semibold uppercase tracking-wide hover:no-underline",
|
|
43
|
+
className,
|
|
44
|
+
)}
|
|
45
|
+
{...props}
|
|
46
|
+
>
|
|
47
|
+
<span className="flex items-center gap-2">{children}</span>
|
|
48
|
+
</AccordionTrigger>
|
|
49
|
+
));
|
|
50
|
+
PanelAccordionTrigger.displayName = "PanelAccordionTrigger";
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Styled AccordionContent for sidebar panels.
|
|
54
|
+
* Removes default wrapper padding.
|
|
55
|
+
*/
|
|
56
|
+
const PanelAccordionContent = React.forwardRef<
|
|
57
|
+
React.ComponentRef<typeof AccordionContent>,
|
|
58
|
+
React.ComponentPropsWithoutRef<typeof AccordionContent>
|
|
59
|
+
>(({ wrapperClassName, ...props }, ref) => (
|
|
60
|
+
<AccordionContent
|
|
61
|
+
ref={ref}
|
|
62
|
+
wrapperClassName={cn("p-0", wrapperClassName)}
|
|
63
|
+
{...props}
|
|
64
|
+
/>
|
|
65
|
+
));
|
|
66
|
+
PanelAccordionContent.displayName = "PanelAccordionContent";
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Styled Badge for sidebar panels.
|
|
70
|
+
*/
|
|
71
|
+
const PanelBadge = ({
|
|
72
|
+
className,
|
|
73
|
+
...props
|
|
74
|
+
}: React.ComponentPropsWithoutRef<typeof Badge>) => (
|
|
75
|
+
<Badge
|
|
76
|
+
variant="secondary"
|
|
77
|
+
className={cn("py-0 px-1.5 text-[10px]", className)}
|
|
78
|
+
{...props}
|
|
79
|
+
/>
|
|
80
|
+
);
|
|
81
|
+
PanelBadge.displayName = "PanelBadge";
|
|
82
|
+
|
|
83
|
+
export {
|
|
84
|
+
PanelAccordionItem,
|
|
85
|
+
PanelAccordionTrigger,
|
|
86
|
+
PanelAccordionContent,
|
|
87
|
+
PanelBadge,
|
|
88
|
+
};
|
|
@@ -1,14 +1,40 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import { useAtom, useAtomValue } from "jotai";
|
|
4
|
+
import { atomWithStorage } from "jotai/utils";
|
|
5
|
+
import { FileIcon, HardDrive } from "lucide-react";
|
|
6
|
+
import React, { useCallback, useMemo } from "react";
|
|
4
7
|
import useResizeObserver from "use-resize-observer";
|
|
8
|
+
import { StorageInspector } from "@/components/storage/storage-inspector";
|
|
9
|
+
import { Accordion } from "@/components/ui/accordion";
|
|
10
|
+
import { getFeatureFlag } from "@/core/config/feature-flag";
|
|
11
|
+
import { storageNamespacesAtom } from "@/core/storage/state";
|
|
5
12
|
import { cn } from "@/utils/cn";
|
|
13
|
+
import { jotaiJsonStorage } from "@/utils/storage/jotai";
|
|
6
14
|
import { TreeDndProvider } from "../../file-tree/dnd-wrapper";
|
|
7
15
|
import { FileExplorer } from "../../file-tree/file-explorer";
|
|
8
16
|
import { useFileExplorerUpload } from "../../file-tree/upload";
|
|
17
|
+
import {
|
|
18
|
+
PanelAccordionContent,
|
|
19
|
+
PanelAccordionItem,
|
|
20
|
+
PanelAccordionTrigger,
|
|
21
|
+
PanelBadge,
|
|
22
|
+
} from "./components";
|
|
9
23
|
|
|
10
|
-
|
|
11
|
-
|
|
24
|
+
type OpenSections = "files" | "remote-storage";
|
|
25
|
+
|
|
26
|
+
interface FileExplorerPanelState {
|
|
27
|
+
openSections: OpenSections[];
|
|
28
|
+
hasUserInteracted: boolean;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const fileExplorerPanelAtom = atomWithStorage<FileExplorerPanelState>(
|
|
32
|
+
"marimo:file-explorer-panel:state",
|
|
33
|
+
{ openSections: ["files"], hasUserInteracted: false },
|
|
34
|
+
jotaiJsonStorage,
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const FileExplorerComponent: React.FC<{ height: number }> = ({ height }) => {
|
|
12
38
|
const { getRootProps, getInputProps, isDragActive } = useFileExplorerUpload({
|
|
13
39
|
noClick: true,
|
|
14
40
|
noKeyboard: true,
|
|
@@ -18,7 +44,8 @@ const FileExplorerPanel: React.FC = () => {
|
|
|
18
44
|
<TreeDndProvider>
|
|
19
45
|
<div
|
|
20
46
|
{...getRootProps()}
|
|
21
|
-
className={cn("flex flex-col
|
|
47
|
+
className={cn("flex flex-col overflow-hidden relative")}
|
|
48
|
+
style={{ height }}
|
|
22
49
|
>
|
|
23
50
|
<input {...getInputProps()} />
|
|
24
51
|
{isDragActive && (
|
|
@@ -27,12 +54,98 @@ const FileExplorerPanel: React.FC = () => {
|
|
|
27
54
|
</div>
|
|
28
55
|
)}
|
|
29
56
|
|
|
30
|
-
<
|
|
31
|
-
<FileExplorer height={height} />
|
|
32
|
-
</div>
|
|
57
|
+
<FileExplorer height={height} />
|
|
33
58
|
</div>
|
|
34
59
|
</TreeDndProvider>
|
|
35
60
|
);
|
|
36
61
|
};
|
|
37
62
|
|
|
63
|
+
// Height of each accordion trigger (px-3 py-2 text-xs = ~33px)
|
|
64
|
+
const TRIGGER_HEIGHT = 33;
|
|
65
|
+
|
|
66
|
+
const FileExplorerPanel: React.FC = () => {
|
|
67
|
+
const { ref: panelRef, height: panelHeight = 500 } =
|
|
68
|
+
useResizeObserver<HTMLDivElement>();
|
|
69
|
+
const [state, setState] = useAtom(fileExplorerPanelAtom);
|
|
70
|
+
|
|
71
|
+
const storageNamespaces = useAtomValue(storageNamespacesAtom);
|
|
72
|
+
const remoteStorageConnections = storageNamespaces.length;
|
|
73
|
+
|
|
74
|
+
const openSections = useMemo<OpenSections[]>(() => {
|
|
75
|
+
if (!state.hasUserInteracted && remoteStorageConnections > 0) {
|
|
76
|
+
if (state.openSections.includes("remote-storage")) {
|
|
77
|
+
return state.openSections;
|
|
78
|
+
}
|
|
79
|
+
return [...state.openSections, "remote-storage"];
|
|
80
|
+
}
|
|
81
|
+
return state.openSections;
|
|
82
|
+
}, [state.hasUserInteracted, state.openSections, remoteStorageConnections]);
|
|
83
|
+
|
|
84
|
+
const handleValueChange = useCallback(
|
|
85
|
+
(value: OpenSections[]) => {
|
|
86
|
+
setState({
|
|
87
|
+
openSections: value,
|
|
88
|
+
hasUserInteracted: true,
|
|
89
|
+
});
|
|
90
|
+
},
|
|
91
|
+
[setState],
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
const availableContent = panelHeight - TRIGGER_HEIGHT * 2;
|
|
95
|
+
const storageIsOpen = openSections.includes("remote-storage");
|
|
96
|
+
const bothOpen = storageIsOpen && openSections.includes("files");
|
|
97
|
+
|
|
98
|
+
const storageMaxHeight = bothOpen
|
|
99
|
+
? Math.round(availableContent * 0.4)
|
|
100
|
+
: availableContent;
|
|
101
|
+
const fileTreeHeight = Math.max(
|
|
102
|
+
200,
|
|
103
|
+
bothOpen ? availableContent - storageMaxHeight : availableContent,
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
const storageInspectorEnabled = getFeatureFlag("storage_inspector");
|
|
107
|
+
if (!storageInspectorEnabled) {
|
|
108
|
+
return (
|
|
109
|
+
<div ref={panelRef} className="h-full overflow-auto">
|
|
110
|
+
<FileExplorerComponent height={panelHeight} />
|
|
111
|
+
</div>
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return (
|
|
116
|
+
<div ref={panelRef} className="h-full overflow-auto">
|
|
117
|
+
<Accordion
|
|
118
|
+
type="multiple"
|
|
119
|
+
value={openSections}
|
|
120
|
+
onValueChange={handleValueChange}
|
|
121
|
+
>
|
|
122
|
+
<PanelAccordionItem value="remote-storage">
|
|
123
|
+
<PanelAccordionTrigger>
|
|
124
|
+
<HardDrive className="w-4 h-4" /> Remote storage
|
|
125
|
+
{remoteStorageConnections > 0 && (
|
|
126
|
+
<PanelBadge>{remoteStorageConnections}</PanelBadge>
|
|
127
|
+
)}
|
|
128
|
+
</PanelAccordionTrigger>
|
|
129
|
+
<PanelAccordionContent
|
|
130
|
+
className="overflow-auto"
|
|
131
|
+
style={{ maxHeight: storageMaxHeight }}
|
|
132
|
+
>
|
|
133
|
+
<StorageInspector />
|
|
134
|
+
</PanelAccordionContent>
|
|
135
|
+
</PanelAccordionItem>
|
|
136
|
+
|
|
137
|
+
<PanelAccordionItem value="files">
|
|
138
|
+
<PanelAccordionTrigger>
|
|
139
|
+
<FileIcon className="w-4 h-4" />
|
|
140
|
+
Files
|
|
141
|
+
</PanelAccordionTrigger>
|
|
142
|
+
<PanelAccordionContent>
|
|
143
|
+
<FileExplorerComponent height={fileTreeHeight} />
|
|
144
|
+
</PanelAccordionContent>
|
|
145
|
+
</PanelAccordionItem>
|
|
146
|
+
</Accordion>
|
|
147
|
+
</div>
|
|
148
|
+
);
|
|
149
|
+
};
|
|
150
|
+
|
|
38
151
|
export default FileExplorerPanel;
|
|
@@ -30,7 +30,7 @@ export const FloatingOutline: React.FC = () => {
|
|
|
30
30
|
onMouseEnter={() => setIsHovered(true)}
|
|
31
31
|
onMouseLeave={() => setIsHovered(false)}
|
|
32
32
|
className={cn(
|
|
33
|
-
"fixed top-[25vh] right-8 z-10000",
|
|
33
|
+
"fixed top-[25vh] right-8 z-10000 print:hidden",
|
|
34
34
|
// Hide on small screens
|
|
35
35
|
"hidden md:block",
|
|
36
36
|
)}
|
|
@@ -105,21 +105,33 @@ export const OutlineList: React.FC<{
|
|
|
105
105
|
const occurrences = seen.get(identifier) ?? 0;
|
|
106
106
|
seen.set(identifier, occurrences + 1);
|
|
107
107
|
|
|
108
|
+
const key = `${identifier}-${idx}`;
|
|
109
|
+
const sharedProps = {
|
|
110
|
+
className: cn(
|
|
111
|
+
"px-2 py-1 cursor-pointer hover:bg-accent/50 hover:text-accent-foreground rounded-l",
|
|
112
|
+
item.level === 1 && "font-semibold",
|
|
113
|
+
item.level === 2 && "ml-3",
|
|
114
|
+
item.level === 3 && "ml-6",
|
|
115
|
+
item.level === 4 && "ml-9",
|
|
116
|
+
occurrences === activeOccurrences &&
|
|
117
|
+
activeHeaderId === identifier &&
|
|
118
|
+
"text-accent-foreground",
|
|
119
|
+
),
|
|
120
|
+
onClick: () => scrollToOutlineItem(item, occurrences),
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
if (item.html) {
|
|
124
|
+
return (
|
|
125
|
+
<div
|
|
126
|
+
key={key}
|
|
127
|
+
{...sharedProps}
|
|
128
|
+
dangerouslySetInnerHTML={{ __html: item.html }}
|
|
129
|
+
/>
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
108
133
|
return (
|
|
109
|
-
<div
|
|
110
|
-
key={`${identifier}-${idx}`}
|
|
111
|
-
className={cn(
|
|
112
|
-
"px-2 py-1 cursor-pointer hover:bg-accent/50 hover:text-accent-foreground rounded-l",
|
|
113
|
-
item.level === 1 && "font-semibold",
|
|
114
|
-
item.level === 2 && "ml-3",
|
|
115
|
-
item.level === 3 && "ml-6",
|
|
116
|
-
item.level === 4 && "ml-9",
|
|
117
|
-
occurrences === activeOccurrences &&
|
|
118
|
-
activeHeaderId === identifier &&
|
|
119
|
-
"text-accent-foreground",
|
|
120
|
-
)}
|
|
121
|
-
onClick={() => scrollToOutlineItem(item, occurrences)}
|
|
122
|
-
>
|
|
134
|
+
<div key={key} {...sharedProps}>
|
|
123
135
|
{item.name}
|
|
124
136
|
</div>
|
|
125
137
|
);
|