folderview 0.0.0-stage → 0.2.1
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/LICENSE +21 -0
- package/README.md +282 -2
- package/dist/cli.js +115 -0
- package/dist/client/assets/app.css +1 -0
- package/dist/client/assets/chunks/abap-EINPUMCJ.js +1 -0
- package/dist/client/assets/chunks/abnfDiagram-S7VZAUFO-W2CM2W6D.js +1 -0
- package/dist/client/assets/chunks/actionscript-3-O776AQUO.js +1 -0
- package/dist/client/assets/chunks/ada-WLOTXRTV.js +1 -0
- package/dist/client/assets/chunks/ahk-EF37A2DY.js +1 -0
- package/dist/client/assets/chunks/ahk2-FH4K3CKT.js +1 -0
- package/dist/client/assets/chunks/angular-html-ZALQFV2H.js +1 -0
- package/dist/client/assets/chunks/angular-ts-4IWMF7QO.js +1 -0
- package/dist/client/assets/chunks/apache-44AYOEWM.js +1 -0
- package/dist/client/assets/chunks/apex-XRYPID42.js +1 -0
- package/dist/client/assets/chunks/apl-5HBALFOI.js +1 -0
- package/dist/client/assets/chunks/applescript-2DZEHZEC.js +1 -0
- package/dist/client/assets/chunks/ara-ZGZQBLXL.js +1 -0
- package/dist/client/assets/chunks/architecture-WOLXFQ4H-EJGENNRL.js +1 -0
- package/dist/client/assets/chunks/architectureDiagram-YGSQEFNW-2VHWSKO6.js +36 -0
- package/dist/client/assets/chunks/asciidoc-GSQAKCPO.js +1 -0
- package/dist/client/assets/chunks/asm-BFURM5BK.js +1 -0
- package/dist/client/assets/chunks/astro-VJORWDZJ.js +1 -0
- package/dist/client/assets/chunks/awk-BSHTWXXX.js +1 -0
- package/dist/client/assets/chunks/ballerina-HAOQJ4B2.js +1 -0
- package/dist/client/assets/chunks/bat-OSH45EOF.js +1 -0
- package/dist/client/assets/chunks/beancount-RBATIHOV.js +1 -0
- package/dist/client/assets/chunks/berry-CZUIOUM4.js +1 -0
- package/dist/client/assets/chunks/bibtex-KCL2UWHE.js +1 -0
- package/dist/client/assets/chunks/bicep-SZJZB3SG.js +1 -0
- package/dist/client/assets/chunks/bird2-XBF5YQQV.js +1 -0
- package/dist/client/assets/chunks/blade-Q24LEVFC.js +1 -0
- package/dist/client/assets/chunks/blockDiagram-APKKGZFW-53LXSOOT.js +140 -0
- package/dist/client/assets/chunks/bpmnIcons-APHXDYXF-FMBRQNTY.js +1 -0
- package/dist/client/assets/chunks/bsl-TI44NWFB.js +1 -0
- package/dist/client/assets/chunks/c-NLHY4Y4N.js +1 -0
- package/dist/client/assets/chunks/c3-BUTEM6PO.js +1 -0
- package/dist/client/assets/chunks/c4Diagram-KJ2TOQU5-O53G4GQH.js +38 -0
- package/dist/client/assets/chunks/cadence-JIRTEU64.js +1 -0
- package/dist/client/assets/chunks/cairo-3W6NVDNW.js +1 -0
- package/dist/client/assets/chunks/chapel-BPBJ2E7K.js +1 -0
- package/dist/client/assets/chunks/chunk-25KVF5ZE.js +1 -0
- package/dist/client/assets/chunks/chunk-2CJKSQOI.js +1 -0
- package/dist/client/assets/chunks/chunk-2QIJRTWR.js +1 -0
- package/dist/client/assets/chunks/chunk-2ZCRJZGF.js +2 -0
- package/dist/client/assets/chunks/chunk-3ILNDZNY.js +213 -0
- package/dist/client/assets/chunks/chunk-3M2OOQ7S.js +1 -0
- package/dist/client/assets/chunks/chunk-3M57NTNK.js +1 -0
- package/dist/client/assets/chunks/chunk-3MR6DCZJ.js +1 -0
- package/dist/client/assets/chunks/chunk-3WGHS7F7.js +1 -0
- package/dist/client/assets/chunks/chunk-4JK75V33.js +1 -0
- package/dist/client/assets/chunks/chunk-4NXNVEWK.js +1 -0
- package/dist/client/assets/chunks/chunk-4RNNBDFQ.js +1 -0
- package/dist/client/assets/chunks/chunk-4T4NVH7V.js +1 -0
- package/dist/client/assets/chunks/chunk-4TFFBC35.js +1 -0
- package/dist/client/assets/chunks/chunk-4WYBE67P.js +1 -0
- package/dist/client/assets/chunks/chunk-56ITEUFA.js +1 -0
- package/dist/client/assets/chunks/chunk-5DXRE7IH.js +1 -0
- package/dist/client/assets/chunks/chunk-5IMADCNU.js +1 -0
- package/dist/client/assets/chunks/chunk-5XZPGKN4.js +1 -0
- package/dist/client/assets/chunks/chunk-6O32UKSP.js +1 -0
- package/dist/client/assets/chunks/chunk-7BAEB64Q.js +1 -0
- package/dist/client/assets/chunks/chunk-7FMWBHZO.js +1 -0
- package/dist/client/assets/chunks/chunk-7GFDITUT.js +1 -0
- package/dist/client/assets/chunks/chunk-7H4MLBHI.js +1 -0
- package/dist/client/assets/chunks/chunk-7OJ4MEEB.js +1 -0
- package/dist/client/assets/chunks/chunk-7RSEISFE.js +1 -0
- package/dist/client/assets/chunks/chunk-7YNZZQVT.js +1 -0
- package/dist/client/assets/chunks/chunk-AB7TIL2G.js +1 -0
- package/dist/client/assets/chunks/chunk-ADDF76FL.js +1 -0
- package/dist/client/assets/chunks/chunk-AF6UTCD4.js +321 -0
- package/dist/client/assets/chunks/chunk-AJ2K6ASU.js +1 -0
- package/dist/client/assets/chunks/chunk-AUBAENQZ.js +1 -0
- package/dist/client/assets/chunks/chunk-BJEYVZ65.js +1 -0
- package/dist/client/assets/chunks/chunk-BLRM6LXA.js +1 -0
- package/dist/client/assets/chunks/chunk-BOCTYCDZ.js +1 -0
- package/dist/client/assets/chunks/chunk-BU4VRYN7.js +1 -0
- package/dist/client/assets/chunks/chunk-CALYHV7D.js +1 -0
- package/dist/client/assets/chunks/chunk-CF4W3RZ4.js +1 -0
- package/dist/client/assets/chunks/chunk-DCZ2OBSL.js +1 -0
- package/dist/client/assets/chunks/chunk-DUFPBTHD.js +1 -0
- package/dist/client/assets/chunks/chunk-DUICIQBC.js +88 -0
- package/dist/client/assets/chunks/chunk-EH2N475V.js +1 -0
- package/dist/client/assets/chunks/chunk-EHLLNPZT.js +1 -0
- package/dist/client/assets/chunks/chunk-EIBFAW37.js +1 -0
- package/dist/client/assets/chunks/chunk-EO3ER3GN.js +1 -0
- package/dist/client/assets/chunks/chunk-FH24BIIA.js +1 -0
- package/dist/client/assets/chunks/chunk-FNOXGAL5.js +2 -0
- package/dist/client/assets/chunks/chunk-FTY6WLQF.js +3 -0
- package/dist/client/assets/chunks/chunk-FZFME6UK.js +1 -0
- package/dist/client/assets/chunks/chunk-FZJZZYYO.js +1 -0
- package/dist/client/assets/chunks/chunk-G4Z6L7OO.js +1 -0
- package/dist/client/assets/chunks/chunk-GNCEAN2B.js +1 -0
- package/dist/client/assets/chunks/chunk-GQJIKV3T.js +1 -0
- package/dist/client/assets/chunks/chunk-GUMNOKT2.js +1 -0
- package/dist/client/assets/chunks/chunk-GXRORAF3.js +1 -0
- package/dist/client/assets/chunks/chunk-H36ABDKY.js +1 -0
- package/dist/client/assets/chunks/chunk-HAR5NYVW.js +1 -0
- package/dist/client/assets/chunks/chunk-HIGPS4L2.js +1 -0
- package/dist/client/assets/chunks/chunk-HMOBGTME.js +1 -0
- package/dist/client/assets/chunks/chunk-HNO6SQ7M.js +1 -0
- package/dist/client/assets/chunks/chunk-HYVZ3GYN.js +1 -0
- package/dist/client/assets/chunks/chunk-I6TGFOQS.js +1 -0
- package/dist/client/assets/chunks/chunk-IHIOJK7I.js +1 -0
- package/dist/client/assets/chunks/chunk-IHJNUMSC.js +1 -0
- package/dist/client/assets/chunks/chunk-IP7PB2OC.js +1 -0
- package/dist/client/assets/chunks/chunk-ISDTMH2Y.js +1 -0
- package/dist/client/assets/chunks/chunk-J65M2LNT.js +1 -0
- package/dist/client/assets/chunks/chunk-JCWYZ7X2.js +62 -0
- package/dist/client/assets/chunks/chunk-JENWYTLI.js +1 -0
- package/dist/client/assets/chunks/chunk-JJ6YWJQS.js +1 -0
- package/dist/client/assets/chunks/chunk-JMUVGGX7.js +32 -0
- package/dist/client/assets/chunks/chunk-JNQUFMM4.js +1 -0
- package/dist/client/assets/chunks/chunk-JPTECOAL.js +1 -0
- package/dist/client/assets/chunks/chunk-JZNK4LKS.js +1 -0
- package/dist/client/assets/chunks/chunk-KPNXJBIW.js +1 -0
- package/dist/client/assets/chunks/chunk-KZO2GZL7.js +1 -0
- package/dist/client/assets/chunks/chunk-L2REESOQ.js +1 -0
- package/dist/client/assets/chunks/chunk-LJPJXR7R.js +1 -0
- package/dist/client/assets/chunks/chunk-LOEZMLCI.js +1 -0
- package/dist/client/assets/chunks/chunk-MLYC6FSE.js +1 -0
- package/dist/client/assets/chunks/chunk-MMDGEZYU.js +1 -0
- package/dist/client/assets/chunks/chunk-MYXE7CGE.js +1 -0
- package/dist/client/assets/chunks/chunk-NBH7YOBD.js +15 -0
- package/dist/client/assets/chunks/chunk-NCOVM3YF.js +1 -0
- package/dist/client/assets/chunks/chunk-NCWOBVU7.js +1 -0
- package/dist/client/assets/chunks/chunk-NLRIHHEH.js +1 -0
- package/dist/client/assets/chunks/chunk-NUPEOYK6.js +1 -0
- package/dist/client/assets/chunks/chunk-O4MVOA7X.js +1 -0
- package/dist/client/assets/chunks/chunk-OBHQQZ4H.js +1 -0
- package/dist/client/assets/chunks/chunk-OKPNJIIR.js +1 -0
- package/dist/client/assets/chunks/chunk-OLMPB57R.js +1 -0
- package/dist/client/assets/chunks/chunk-P2FYOAEV.js +1 -0
- package/dist/client/assets/chunks/chunk-PI3SNP4C.js +1 -0
- package/dist/client/assets/chunks/chunk-PRDTEROB.js +1 -0
- package/dist/client/assets/chunks/chunk-PZELHD2H.js +136 -0
- package/dist/client/assets/chunks/chunk-QR2Q34LM.js +1 -0
- package/dist/client/assets/chunks/chunk-R4GIXL6S.js +1 -0
- package/dist/client/assets/chunks/chunk-RORF4F5V.js +1 -0
- package/dist/client/assets/chunks/chunk-S73BYTLL.js +1 -0
- package/dist/client/assets/chunks/chunk-SFC5MRYR.js +1 -0
- package/dist/client/assets/chunks/chunk-SVM2H22K.js +2 -0
- package/dist/client/assets/chunks/chunk-SZ6UCGVD.js +1 -0
- package/dist/client/assets/chunks/chunk-SZYM6GIJ.js +127 -0
- package/dist/client/assets/chunks/chunk-TT5KJZKM.js +1 -0
- package/dist/client/assets/chunks/chunk-UFBKUYNH.js +1 -0
- package/dist/client/assets/chunks/chunk-UL57AD4T.js +1 -0
- package/dist/client/assets/chunks/chunk-UNEI7LMM.js +1 -0
- package/dist/client/assets/chunks/chunk-VNQBBFIY.js +1 -0
- package/dist/client/assets/chunks/chunk-WGVITPII.js +1 -0
- package/dist/client/assets/chunks/chunk-WRA6KJHX.js +10 -0
- package/dist/client/assets/chunks/chunk-WS5EHW43.js +1 -0
- package/dist/client/assets/chunks/chunk-XE6SLBBE.js +3 -0
- package/dist/client/assets/chunks/chunk-XF5T2P7U.js +72 -0
- package/dist/client/assets/chunks/chunk-XFRY5WKO.js +1 -0
- package/dist/client/assets/chunks/chunk-XWYV4OPA.js +1 -0
- package/dist/client/assets/chunks/chunk-YCE5ECKY.js +1 -0
- package/dist/client/assets/chunks/chunk-YIN5CSIF.js +1 -0
- package/dist/client/assets/chunks/chunk-YLFUX6XH.js +1 -0
- package/dist/client/assets/chunks/chunk-YNXJICZM.js +1 -0
- package/dist/client/assets/chunks/chunk-YOHF7NGD.js +1 -0
- package/dist/client/assets/chunks/chunk-YORIST7Z.js +1 -0
- package/dist/client/assets/chunks/chunk-YUL7CG4R.js +1 -0
- package/dist/client/assets/chunks/chunk-YUN7JSFJ.js +2 -0
- package/dist/client/assets/chunks/chunk-YZ7D2IT7.js +1 -0
- package/dist/client/assets/chunks/chunk-Z7LAPMFJ.js +1 -0
- package/dist/client/assets/chunks/chunk-ZE325LPC.js +1 -0
- package/dist/client/assets/chunks/chunk-ZN7TN6PO.js +1 -0
- package/dist/client/assets/chunks/chunk-ZST3EVPO.js +1 -0
- package/dist/client/assets/chunks/chunk-ZZHMDDZN.js +1 -0
- package/dist/client/assets/chunks/clarity-RKRYQ7WF.js +1 -0
- package/dist/client/assets/chunks/classDiagram-v2-L25IHNXF-Y67HVDZV.js +217 -0
- package/dist/client/assets/chunks/clojure-2X2DQECJ.js +1 -0
- package/dist/client/assets/chunks/cmake-LH5524XE.js +1 -0
- package/dist/client/assets/chunks/cobol-7DALQF3W.js +1 -0
- package/dist/client/assets/chunks/codeowners-52SZU5P5.js +1 -0
- package/dist/client/assets/chunks/codeql-EISH3KUP.js +1 -0
- package/dist/client/assets/chunks/coffee-VAWSGA7Y.js +1 -0
- package/dist/client/assets/chunks/common-lisp-4MVK2AN6.js +1 -0
- package/dist/client/assets/chunks/coq-4VRYZRZV.js +1 -0
- package/dist/client/assets/chunks/core-BRBMZSD2.js +12 -0
- package/dist/client/assets/chunks/cose-bilkent-JH36ORCC-BIOOHSAA.js +1 -0
- package/dist/client/assets/chunks/cpp-RFECMSKD.js +1 -0
- package/dist/client/assets/chunks/crystal-ZBGGFAOI.js +1 -0
- package/dist/client/assets/chunks/csharp-BZDPMKKW.js +1 -0
- package/dist/client/assets/chunks/css-3WWGM6UD.js +1 -0
- package/dist/client/assets/chunks/csv-AB4GNWSB.js +1 -0
- package/dist/client/assets/chunks/cue-2E46MZP2.js +1 -0
- package/dist/client/assets/chunks/cynefin-EF2NZ3EQ-TLFQLWUN.js +1 -0
- package/dist/client/assets/chunks/cynefinDiagram-L36ESFBY-FLPXCSSG.js +62 -0
- package/dist/client/assets/chunks/cypher-HR3ILFOL.js +1 -0
- package/dist/client/assets/chunks/d-TARSZPOL.js +1 -0
- package/dist/client/assets/chunks/dagre-SPEB5RXH-7EGEINJ2.js +4 -0
- package/dist/client/assets/chunks/dart-SALLJHVI.js +1 -0
- package/dist/client/assets/chunks/dax-WYMRGMXC.js +1 -0
- package/dist/client/assets/chunks/desktop-ND5CGLLJ.js +1 -0
- package/dist/client/assets/chunks/diagram-3B7GL73J-6USY4HZX.js +200 -0
- package/dist/client/assets/chunks/diagram-DNEMPZML-BNSOC4VW.js +24 -0
- package/dist/client/assets/chunks/diagram-L3MUGCDN-5V5FZYIG.js +41 -0
- package/dist/client/assets/chunks/diagram-LA4NIPWU-25VLY2CO.js +24 -0
- package/dist/client/assets/chunks/diagram-MHCOC4E2-G2LFP3JU.js +3 -0
- package/dist/client/assets/chunks/diagram-XPFHEONP-E6HBBIBV.js +30 -0
- package/dist/client/assets/chunks/diff-PWYGPM7B.js +1 -0
- package/dist/client/assets/chunks/docker-A4D7DT7W.js +1 -0
- package/dist/client/assets/chunks/dotenv-VWQWV2DY.js +1 -0
- package/dist/client/assets/chunks/dream-maker-M5YDQS35.js +1 -0
- package/dist/client/assets/chunks/ebnfDiagram-UZSYDL2S-BMXXZZPI.js +1 -0
- package/dist/client/assets/chunks/edge-3QXIDJHI.js +1 -0
- package/dist/client/assets/chunks/elixir-3OX2UHIZ.js +1 -0
- package/dist/client/assets/chunks/elk-XV6XMXQE-IPR65FON.js +27 -0
- package/dist/client/assets/chunks/elm-CTS65NCT.js +1 -0
- package/dist/client/assets/chunks/emacs-lisp-HHS2IDO7.js +1 -0
- package/dist/client/assets/chunks/engine-javascript-DNHSF67B.js +141 -0
- package/dist/client/assets/chunks/erDiagram-EYBAPDEH-3GEHFWHG.js +99 -0
- package/dist/client/assets/chunks/erb-ICYWK6HS.js +1 -0
- package/dist/client/assets/chunks/erlang-BDQPNCKX.js +1 -0
- package/dist/client/assets/chunks/eventmodeling-K75KTNOO-B27BJTZL.js +1 -0
- package/dist/client/assets/chunks/fennel-4ONBA2PH.js +1 -0
- package/dist/client/assets/chunks/fish-ATLPBZSD.js +1 -0
- package/dist/client/assets/chunks/flowDiagram-MALGAFMO-5PCLR4AE.js +1 -0
- package/dist/client/assets/chunks/fluent-GGMONBVW.js +1 -0
- package/dist/client/assets/chunks/fortran-fixed-form-5MSBDRWQ.js +1 -0
- package/dist/client/assets/chunks/fortran-free-form-TT3RBL75.js +1 -0
- package/dist/client/assets/chunks/fsharp-PAGHNW4O.js +1 -0
- package/dist/client/assets/chunks/ganttDiagram-23REXITY-VE5MVBTO.js +292 -0
- package/dist/client/assets/chunks/gdresource-5OTP326D.js +1 -0
- package/dist/client/assets/chunks/gdscript-VPWHSCLF.js +1 -0
- package/dist/client/assets/chunks/gdshader-FYLPXFE5.js +1 -0
- package/dist/client/assets/chunks/genie-UYMEEMA2.js +1 -0
- package/dist/client/assets/chunks/gherkin-SU7D5DMY.js +1 -0
- package/dist/client/assets/chunks/git-commit-5CF5QAG7.js +1 -0
- package/dist/client/assets/chunks/git-rebase-X72BAUZI.js +1 -0
- package/dist/client/assets/chunks/gitGraph-VSP46ZUC-J6CJ5YZF.js +1 -0
- package/dist/client/assets/chunks/gitGraphDiagram-STJD7YCW-7YJGT6ZP.js +106 -0
- package/dist/client/assets/chunks/gleam-LR42YRKO.js +1 -0
- package/dist/client/assets/chunks/glimmer-js-JPF67FJU.js +1 -0
- package/dist/client/assets/chunks/glimmer-ts-BYPAVIZT.js +1 -0
- package/dist/client/assets/chunks/glsl-GTGUULBN.js +1 -0
- package/dist/client/assets/chunks/gn-NMDQA4K3.js +1 -0
- package/dist/client/assets/chunks/gnuplot-UUAMYBCZ.js +1 -0
- package/dist/client/assets/chunks/go-4RERSTNP.js +1 -0
- package/dist/client/assets/chunks/graphql-5A6RK6YF.js +1 -0
- package/dist/client/assets/chunks/groovy-O7BJONCU.js +1 -0
- package/dist/client/assets/chunks/hack-7QGTNPDP.js +1 -0
- package/dist/client/assets/chunks/haml-ON5GAWN4.js +1 -0
- package/dist/client/assets/chunks/handlebars-6UOQSUBP.js +1 -0
- package/dist/client/assets/chunks/haskell-OIZXZ26Y.js +1 -0
- package/dist/client/assets/chunks/haxe-7FFVS4FO.js +1 -0
- package/dist/client/assets/chunks/hcl-XFUFQJHV.js +1 -0
- package/dist/client/assets/chunks/hjson-QDBHMTD5.js +1 -0
- package/dist/client/assets/chunks/hlsl-4LP25FFN.js +1 -0
- package/dist/client/assets/chunks/html-7RNQXAAV.js +1 -0
- package/dist/client/assets/chunks/html-derivative-ESOY72Q2.js +1 -0
- package/dist/client/assets/chunks/http-SAD4PMBD.js +1 -0
- package/dist/client/assets/chunks/hurl-ZSJJXPQH.js +1 -0
- package/dist/client/assets/chunks/hxml-HJCC37RK.js +1 -0
- package/dist/client/assets/chunks/hy-CLDE3P4K.js +1 -0
- package/dist/client/assets/chunks/imba-REB34U5V.js +1 -0
- package/dist/client/assets/chunks/info-OHQRW6UA-EQQKXR77.js +1 -0
- package/dist/client/assets/chunks/infoDiagram-KBXO4MBG-F6KGZCGS.js +2 -0
- package/dist/client/assets/chunks/ini-PDFEMGRA.js +1 -0
- package/dist/client/assets/chunks/ishikawaDiagram-M35NCXHK-5D6ZOZ34.js +70 -0
- package/dist/client/assets/chunks/java-KB6XENAD.js +1 -0
- package/dist/client/assets/chunks/javascript-3JX5T423.js +1 -0
- package/dist/client/assets/chunks/jinja-V4UNU6K4.js +1 -0
- package/dist/client/assets/chunks/jison-KH5XNLJP.js +1 -0
- package/dist/client/assets/chunks/journeyDiagram-OPLOXDXO-ANDOJZKW.js +139 -0
- package/dist/client/assets/chunks/json-HPXFRRPY.js +1 -0
- package/dist/client/assets/chunks/json5-LJM6TXWM.js +1 -0
- package/dist/client/assets/chunks/jsonc-UZWRU3JV.js +1 -0
- package/dist/client/assets/chunks/jsonl-RFZD5UN4.js +1 -0
- package/dist/client/assets/chunks/jsonnet-GFZABBL6.js +1 -0
- package/dist/client/assets/chunks/jssm-2YIGBISJ.js +1 -0
- package/dist/client/assets/chunks/jsx-KLV2ZWUT.js +1 -0
- package/dist/client/assets/chunks/julia-3TZDIPPO.js +1 -0
- package/dist/client/assets/chunks/just-UHCONBQS.js +1 -0
- package/dist/client/assets/chunks/kanban-definition-BZKZHSQY-GF5I5NVD.js +89 -0
- package/dist/client/assets/chunks/katex-PIN72PQZ.js +257 -0
- package/dist/client/assets/chunks/kdl-DARTFOCL.js +1 -0
- package/dist/client/assets/chunks/kotlin-7KT5DW6Y.js +1 -0
- package/dist/client/assets/chunks/kusto-EKYXZTC5.js +1 -0
- package/dist/client/assets/chunks/langs-GO3UQR4H.js +1 -0
- package/dist/client/assets/chunks/latex-T57MIHR5.js +1 -0
- package/dist/client/assets/chunks/lean-5QVPRMV6.js +1 -0
- package/dist/client/assets/chunks/less-K6QEH5TN.js +1 -0
- package/dist/client/assets/chunks/liquid-3LCNNEIV.js +1 -0
- package/dist/client/assets/chunks/llvm-O32ZIVRF.js +1 -0
- package/dist/client/assets/chunks/log-C4YPJ5BB.js +1 -0
- package/dist/client/assets/chunks/logo-JPMO43A6.js +1 -0
- package/dist/client/assets/chunks/lua-YKVSOG7K.js +1 -0
- package/dist/client/assets/chunks/luau-K4EECYSO.js +1 -0
- package/dist/client/assets/chunks/make-VHSYMHHW.js +1 -0
- package/dist/client/assets/chunks/markdown-GC5J46H4.js +1 -0
- package/dist/client/assets/chunks/marko-U45YFADC.js +1 -0
- package/dist/client/assets/chunks/matlab-AMOKC4LU.js +1 -0
- package/dist/client/assets/chunks/mdc-DIGA2UXP.js +1 -0
- package/dist/client/assets/chunks/mdx-BZUGCKQA.js +1 -0
- package/dist/client/assets/chunks/mermaid-WHDP6ZPA.js +1 -0
- package/dist/client/assets/chunks/mermaid.core-SQMPMUDN.js +10 -0
- package/dist/client/assets/chunks/mindmap-definition-I2QAS2VK-4NH5S56C.js +98 -0
- package/dist/client/assets/chunks/mipsasm-2S4CUGQV.js +1 -0
- package/dist/client/assets/chunks/mojo-ZOL2PNKT.js +1 -0
- package/dist/client/assets/chunks/moonbit-U3BDAIFE.js +1 -0
- package/dist/client/assets/chunks/move-YSXALBWA.js +1 -0
- package/dist/client/assets/chunks/narrat-DHFIAUJH.js +1 -0
- package/dist/client/assets/chunks/nextflow-ESAKNTI3.js +1 -0
- package/dist/client/assets/chunks/nextflow-groovy-FKDSPJUI.js +1 -0
- package/dist/client/assets/chunks/nginx-XYAYERLO.js +1 -0
- package/dist/client/assets/chunks/nim-XOWBVFDH.js +1 -0
- package/dist/client/assets/chunks/nix-RVSTQSHC.js +1 -0
- package/dist/client/assets/chunks/nsis-KMDUKQRL.js +1 -0
- package/dist/client/assets/chunks/nushell-SKJHHZ7U.js +1 -0
- package/dist/client/assets/chunks/objective-c-3B3KXQ7Q.js +1 -0
- package/dist/client/assets/chunks/objective-cpp-6JDULPJS.js +1 -0
- package/dist/client/assets/chunks/ocaml-TMRFXBVO.js +1 -0
- package/dist/client/assets/chunks/odin-IN3PLCK7.js +1 -0
- package/dist/client/assets/chunks/openscad-P52IKPNH.js +1 -0
- package/dist/client/assets/chunks/org-N3SJ2PIA.js +1 -0
- package/dist/client/assets/chunks/packet-JDAUHWVQ-4SWIKSKP.js +1 -0
- package/dist/client/assets/chunks/pascal-T7CUWCQ4.js +1 -0
- package/dist/client/assets/chunks/pegDiagram-FD4XPPHP-WDKZSEGN.js +1 -0
- package/dist/client/assets/chunks/perl-LCZ4KODH.js +1 -0
- package/dist/client/assets/chunks/php-4XHMBVR5.js +1 -0
- package/dist/client/assets/chunks/pie-XZMESJXO-PSSWOWGV.js +1 -0
- package/dist/client/assets/chunks/pieDiagram-J4AKIIQI-BDW5I5ON.js +39 -0
- package/dist/client/assets/chunks/pkl-OACG5B67.js +1 -0
- package/dist/client/assets/chunks/plsql-7E5C7CJX.js +1 -0
- package/dist/client/assets/chunks/po-ZSREFRRP.js +1 -0
- package/dist/client/assets/chunks/polar-4GBINVA7.js +1 -0
- package/dist/client/assets/chunks/postcss-B7RPVGFW.js +1 -0
- package/dist/client/assets/chunks/powerquery-6UFMTY4G.js +1 -0
- package/dist/client/assets/chunks/powershell-3STRPCNT.js +1 -0
- package/dist/client/assets/chunks/prisma-4TPSPIZ5.js +1 -0
- package/dist/client/assets/chunks/prolog-HEAYPKQW.js +1 -0
- package/dist/client/assets/chunks/proto-Y3Y3VKXM.js +1 -0
- package/dist/client/assets/chunks/pug-7PBPMG3M.js +1 -0
- package/dist/client/assets/chunks/puppet-FR35R4OI.js +1 -0
- package/dist/client/assets/chunks/purescript-OUHXQAOW.js +1 -0
- package/dist/client/assets/chunks/python-SNDG7FNU.js +1 -0
- package/dist/client/assets/chunks/qml-UVIOSWP4.js +1 -0
- package/dist/client/assets/chunks/qmldir-6JGUNYL5.js +1 -0
- package/dist/client/assets/chunks/qss-ZCC466IZ.js +1 -0
- package/dist/client/assets/chunks/quadrantDiagram-XTYBLID2-5VKXWVJ6.js +7 -0
- package/dist/client/assets/chunks/r-4XW4O3ZF.js +1 -0
- package/dist/client/assets/chunks/racket-YJAYXOOG.js +1 -0
- package/dist/client/assets/chunks/radar-ABXABTNO-3AXZCEY2.js +1 -0
- package/dist/client/assets/chunks/railroad-I3PHUGI6-2PLXYPOT.js +1 -0
- package/dist/client/assets/chunks/railroad-abnf-LNEFI6M7-M4DGICQX.js +1 -0
- package/dist/client/assets/chunks/railroad-ebnf-DWYD2UWJ-UEIHQMSZ.js +1 -0
- package/dist/client/assets/chunks/railroad-peg-JR7BVNR7-I7VLIBXM.js +1 -0
- package/dist/client/assets/chunks/railroadDiagram-MRQ6NCDL-Y6IYWEFL.js +1 -0
- package/dist/client/assets/chunks/raku-63NEL5JK.js +1 -0
- package/dist/client/assets/chunks/razor-J3CJP523.js +1 -0
- package/dist/client/assets/chunks/rbs-6GQLT7NW.js +1 -0
- package/dist/client/assets/chunks/reg-6Q3OEC2C.js +1 -0
- package/dist/client/assets/chunks/regexp-LPIMILT3.js +1 -0
- package/dist/client/assets/chunks/rel-TOQGUTHB.js +1 -0
- package/dist/client/assets/chunks/requirementDiagram-Y7LWUY3S-CIWXVVWJ.js +84 -0
- package/dist/client/assets/chunks/riscv-UELGBOXE.js +1 -0
- package/dist/client/assets/chunks/ron-FW7LCJJH.js +1 -0
- package/dist/client/assets/chunks/rosmsg-O63VHE3L.js +1 -0
- package/dist/client/assets/chunks/rst-3WJXGLA7.js +1 -0
- package/dist/client/assets/chunks/ruby-7S7L6JTH.js +1 -0
- package/dist/client/assets/chunks/rust-LIK4HRRI.js +1 -0
- package/dist/client/assets/chunks/sankeyDiagram-WGJFYUXA-OGNQPX5V.js +40 -0
- package/dist/client/assets/chunks/sas-FHDPZ2JH.js +1 -0
- package/dist/client/assets/chunks/sass-UI4HW2FN.js +1 -0
- package/dist/client/assets/chunks/scala-KN7RQSUJ.js +1 -0
- package/dist/client/assets/chunks/scheme-5R527YZ5.js +1 -0
- package/dist/client/assets/chunks/scss-KZ6DRE4A.js +1 -0
- package/dist/client/assets/chunks/sdbl-FHOCL5SL.js +1 -0
- package/dist/client/assets/chunks/sequenceDiagram-5NDRBG5M-QX2V24ZU.js +169 -0
- package/dist/client/assets/chunks/shaderlab-2TLHUS2H.js +1 -0
- package/dist/client/assets/chunks/shellscript-PIB6ZBDM.js +1 -0
- package/dist/client/assets/chunks/shellsession-5KL7NFNN.js +1 -0
- package/dist/client/assets/chunks/sizeCapture-INFHLROL-LCS2PIHM.js +1 -0
- package/dist/client/assets/chunks/smalltalk-JFLFU247.js +1 -0
- package/dist/client/assets/chunks/smithy-HONEXZAM.js +1 -0
- package/dist/client/assets/chunks/solidity-SJ3INJFZ.js +1 -0
- package/dist/client/assets/chunks/soy-ND4SWTM2.js +1 -0
- package/dist/client/assets/chunks/sparql-YB2JQBZD.js +1 -0
- package/dist/client/assets/chunks/splunk-UXIDDAWL.js +1 -0
- package/dist/client/assets/chunks/sql-K6OMG7SQ.js +1 -0
- package/dist/client/assets/chunks/ssh-config-I7KJY3KQ.js +1 -0
- package/dist/client/assets/chunks/stata-DNZ3DTFJ.js +1 -0
- package/dist/client/assets/chunks/stateDiagram-v2-FJ4FJNEA-LVAUWF3A.js +291 -0
- package/dist/client/assets/chunks/stylus-GWPR6IQY.js +1 -0
- package/dist/client/assets/chunks/surrealql-KQNHBWLC.js +1 -0
- package/dist/client/assets/chunks/svelte-YQKF25S4.js +1 -0
- package/dist/client/assets/chunks/swift-ZCIZUJXA.js +1 -0
- package/dist/client/assets/chunks/swimlanes-UMQ2AFYF-B3RQOARQ.js +1 -0
- package/dist/client/assets/chunks/swimlanesDiagram-OMPLPG4O-JOE33EOV.js +8 -0
- package/dist/client/assets/chunks/system-verilog-Y7E6FIO3.js +1 -0
- package/dist/client/assets/chunks/systemd-WHC7NBZP.js +1 -0
- package/dist/client/assets/chunks/talonscript-WC7SODAH.js +1 -0
- package/dist/client/assets/chunks/tasl-QHY2GTCB.js +1 -0
- package/dist/client/assets/chunks/tcl-VAMIL5PJ.js +1 -0
- package/dist/client/assets/chunks/temml-ISNSX3VV.js +96 -0
- package/dist/client/assets/chunks/templ-B3BHKWV4.js +1 -0
- package/dist/client/assets/chunks/terraform-Q4UEK6FK.js +1 -0
- package/dist/client/assets/chunks/tex-63OWCYAB.js +1 -0
- package/dist/client/assets/chunks/timeline-definition-SEUHKTQE-FDFTVAJG.js +120 -0
- package/dist/client/assets/chunks/toml-7Z4IPGES.js +1 -0
- package/dist/client/assets/chunks/treeView-D4JQ5SDB-ABSGRAGI.js +1 -0
- package/dist/client/assets/chunks/treemap-SAJKECNS-MYX2CBJN.js +1 -0
- package/dist/client/assets/chunks/ts-tags-DT62HE52.js +1 -0
- package/dist/client/assets/chunks/tsv-RTXHWADP.js +1 -0
- package/dist/client/assets/chunks/tsx-UANUBOC7.js +1 -0
- package/dist/client/assets/chunks/turtle-QVOUNUUL.js +1 -0
- package/dist/client/assets/chunks/twig-ZPC4BPDA.js +1 -0
- package/dist/client/assets/chunks/typescript-WGWKIMMW.js +1 -0
- package/dist/client/assets/chunks/typespec-TYCVR32J.js +1 -0
- package/dist/client/assets/chunks/typst-PIBFYUO6.js +1 -0
- package/dist/client/assets/chunks/usecaseDiagram-AFA6YXN4-KW7ADINR.js +370 -0
- package/dist/client/assets/chunks/v-3ERNWBSP.js +1 -0
- package/dist/client/assets/chunks/vala-UCBCT2GS.js +1 -0
- package/dist/client/assets/chunks/vb-DGI3VTPA.js +1 -0
- package/dist/client/assets/chunks/vennDiagram-NNMJR3RB-RDGLGOGM.js +34 -0
- package/dist/client/assets/chunks/verilog-G72NZROS.js +1 -0
- package/dist/client/assets/chunks/vhdl-PYGA77XE.js +1 -0
- package/dist/client/assets/chunks/viml-OOC5B5UU.js +1 -0
- package/dist/client/assets/chunks/vue-GTNHIOPG.js +1 -0
- package/dist/client/assets/chunks/vue-html-DKAMJV55.js +1 -0
- package/dist/client/assets/chunks/vue-vine-WTM5HREV.js +1 -0
- package/dist/client/assets/chunks/vyper-RHYEHOJM.js +1 -0
- package/dist/client/assets/chunks/wardley-7MLQ67FV-QJL2HSBT.js +1 -0
- package/dist/client/assets/chunks/wardleyDiagram-S7YFUSEH-A4XX3UJR.js +78 -0
- package/dist/client/assets/chunks/wasm-ZMM2Z5XV.js +1 -0
- package/dist/client/assets/chunks/wenyan-HF5UTKSJ.js +1 -0
- package/dist/client/assets/chunks/wgsl-O7D7OPO7.js +1 -0
- package/dist/client/assets/chunks/wikitext-T7BSWSKQ.js +1 -0
- package/dist/client/assets/chunks/wit-TKCHPPT6.js +1 -0
- package/dist/client/assets/chunks/wolfram-7MN66A7N.js +1 -0
- package/dist/client/assets/chunks/xml-NLTLAWOD.js +1 -0
- package/dist/client/assets/chunks/xsl-NZ4ECK3P.js +1 -0
- package/dist/client/assets/chunks/xychartDiagram-GGNKY7IX-OXJILWHR.js +7 -0
- package/dist/client/assets/chunks/yaml-HRJLEV3V.js +1 -0
- package/dist/client/assets/chunks/zenscript-4LLRSLPI.js +1 -0
- package/dist/client/assets/chunks/zig-Y7MUQFUO.js +1 -0
- package/dist/client/assets/main.js +186 -0
- package/dist/client/index.html +48 -0
- package/dist/config.js +322 -0
- package/dist/files.js +178 -0
- package/dist/git.js +365 -0
- package/dist/glob.js +89 -0
- package/dist/review.js +290 -0
- package/dist/search.js +136 -0
- package/dist/server.js +482 -0
- package/dist/watch.js +69 -0
- package/dist/zip.js +100 -0
- package/package.json +61 -4
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import{a as fn}from"./chunks/chunk-FTY6WLQF.js";import"./chunks/chunk-7FMWBHZO.js";var $=t=>document.getElementById(t),h=t=>String(t).replace(/[&<>"']/g,e=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[e]),Q=t=>{let e=wt(t),n=e.lastIndexOf(".");return n>0?e.slice(n+1).toLowerCase():""},wt=t=>t.slice(t.lastIndexOf("/")+1),ue=t=>t.includes("/")?t.slice(0,t.lastIndexOf("/")):"",z=(...t)=>t.filter(Boolean).join("/"),_s=t=>t.split("/").map(encodeURIComponent).join("/"),W=t=>"raw/"+_s(t);function $t(t){let e=[];for(let n of t.split("/"))n===".."?e.pop():n&&n!=="."&&e.push(n);return e.join("/")}var je=t=>t<1024?t+" B":t<1048576?(t/1024).toFixed(t<10240?1:0)+" KB":t<1073741824?(t/1048576).toFixed(1)+" MB":(t/1073741824).toFixed(2)+" GB",Z=t=>{let e=(Date.now()-t)/1e3;return e<60?"just now":e<3600?Math.floor(e/60)+" min ago":e<86400?Math.floor(e/3600)+" h ago":e<86400*30?Math.floor(e/86400)+" d ago":new Date(t).toLocaleDateString()},gn=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});function H(t,e){try{if(e===void 0)return localStorage.getItem("folderview:"+t);e===null?localStorage.removeItem("folderview:"+t):localStorage.setItem("folderview:"+t,e)}catch{return null}}async function M(t,e={}){let n={...e,headers:{...e.headers||{}}};e.json!==void 0&&(n.body=JSON.stringify(e.json),n.headers["content-type"]="application/json",delete n.json);let s=await fetch(t,n),a=(s.headers.get("content-type")||"").includes("json")?await s.json():await s.text();if(!s.ok)throw new Error(a&&a.error||typeof a=="string"&&a||s.statusText);return a}async function K(t,e="Copied"){try{await navigator.clipboard.writeText(t)}catch{let n=document.createElement("textarea");n.value=t,document.body.append(n),n.select(),document.execCommand("copy"),n.remove()}le(e)}var mn;function le(t){let e=$("toast");e||(e=document.createElement("div"),e.id="toast",e.className="toast",e.setAttribute("role","status"),document.body.append(e)),e.textContent=t,e.classList.add("show"),clearTimeout(mn),mn=setTimeout(()=>e.classList.remove("show"),1800)}function kn(t,e){let n;return(...s)=>{clearTimeout(n),n=setTimeout(()=>t(...s),e)}}var bt=new Map,Ie=(t,e)=>(bt.get(t)||bt.set(t,new Set).get(t)).add(e),ee=(t,e)=>bt.get(t)?.forEach(n=>n(e));var b={info:{name:"",git:!1,author:"",readOnly:!1,review:{json:"",md:""}},cache:new Map,git:null,changes:new Map,folderStates:new Map,ignored:[],comments:[],settings:{theme:H("theme")||"auto",ignored:H("ignored")||"dim",wrap:H("wrap")==="1",review:H("review")==="1",resolved:H("resolved")!=="0",author:H("author")||""}};function xe(t,e){b.settings[t]=e,H(t,typeof e=="boolean"?e?"1":"0":e)}var et=()=>b.settings.author||b.info.author||"reviewer",wn=["open","view","m","q","show","scope","line","tab","opts","inc"];function L(){let t=location.hash.slice(1)||"/",e=t.indexOf("?"),n=decodeURIComponent(e<0?t:t.slice(0,e)),s=new URLSearchParams(e<0?"":t.slice(e+1)),r={folder:n.replace(/^\/+|\/+$/g,"")};for(let a of wn)r[a]=s.get(a)||"";return r}function V(t){let e=new URLSearchParams;for(let s of wn)t[s]&&e.set(s,t[s]);let n=e.toString();return"#/"+(t.folder||"").split("/").map(encodeURIComponent).join("/")+(n?"?"+n:"")}function _(t){location.hash=V({view:L().view,...t})}function R(t,e=!1){let n=V({...L(),...t});e?history.replaceState(null,"",n):location.hash=n}var O=(t,e={})=>V({folder:ue(t),open:t.slice(t.lastIndexOf("/")+1),...e}),Os=t=>[...t].sort((e,n)=>(n.type==="folder")-(e.type==="folder")||gn.compare(e.name,n.name));async function ye(t){if(b.cache.has(t))return b.cache.get(t);let e=await M("api/list?p="+encodeURIComponent(t)),n=Os(e.entries);return b.cache.set(t,n),n}var bn={conflict:6,deleted:5,modified:4,renamed:3,added:2,new:1};async function xt(){if(b.info.git)try{let t=await M("api/git/status");b.git=t,b.changes=new Map(t.changes.map(n=>[n.path,n])),b.ignored=t.ignored;let e=new Map;for(let n of t.changes){let s=ue(n.path);for(;;){let r=e.get(s);if((!r||bn[n.state]>bn[r])&&e.set(s,n.state),!s)break;s=ue(s)}}b.folderStates=e}catch{b.git=null}}function te(t){for(let e of b.ignored)if(e.endsWith("/")?t===e.slice(0,-1)||t.startsWith(e):t===e)return!0;return!1}var tt={new:"U",added:"A",modified:"M",deleted:"D",renamed:"R",conflict:"!"},ne={new:"New (untracked)",added:"Added",modified:"Changed",deleted:"Deleted",renamed:"Renamed",conflict:"Conflict",ignored:"Ignored"};async function ze(){try{b.comments=(await M("api/comments")).comments}catch{b.comments=[]}}var F=t=>b.comments.filter(e=>e.path===t);function nt(t){let e=t?t+"/":"";return b.comments.filter(n=>n.status==="open"&&(n.path===t||n.path.startsWith(e))).length}function Tt(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var ke=Tt();function qn(t){ke=t}var me={exec:()=>null};function fe(t){let e=[];return n=>{let s=Math.max(0,Math.min(3,n-1)),r=e[s];return r||(r=t(s),e[s]=r),r}}function T(t,e=""){let n=typeof t=="string"?t:t.source,s={replace:(r,a)=>{let o=typeof a=="string"?a:a.source;return o=o.replace(I.caret,"$1"),n=n.replace(r,o),s},getRegex:()=>new RegExp(n,e)};return s}var Rn=((t="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+t)}catch{return!1}})(),I={codeRemoveIndent:/^(?: {0,3}\t| {1,4})/gm,listInterruptsParagraph:/^ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,endingSpaceTabChar:/[ \t]$/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,leadingSpaceTab:/^[ \t]+/,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+)[ \t]*)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,blockquoteMarkerWhitespace:/^( {0,3}>)([ \t]+)/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\][ \t]+\S/,listReplaceTask:/^\[[ xX]\][ \t]+/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,numericCharacterReference:/&#(?:(\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));/,numericCharacterReferenceOrAmpersand:/&#(?:(\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:fe(t=>new RegExp(`^ {0,${t}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:fe(t=>new RegExp(`^ {0,${t}}((?:-[ ]*){3,}|(?:_[ ]*){3,}|(?:\\*[ ]*){3,})(?:\\n+|$)`)),fencesBeginRegex:fe(t=>new RegExp(`^ {0,${t}}(?:\`\`\`|~~~)`)),headingBeginRegex:fe(t=>new RegExp(`^ {0,${t}}#{1,6}(?:\\s|$)`)),pedanticHeadingBeginRegex:fe(t=>new RegExp(`^ {0,${t}}#`)),htmlBeginRegex:fe(t=>new RegExp(`^ {0,${t}}(?:</?(?:${Pe})(?: +|$|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)`,"i")),blockquoteBeginRegex:fe(t=>new RegExp(`^ {0,${t}}>`)),nestedContainerMarkers:/^(?: {0,3}(?:(?:[*+-]|\d{1,9}[.)])[ \t]+|>[ \t]?))+/},Ps=/^(?:[ \t]*(?:\n|$))+/,Ns=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Bs=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}(?:(?=`)\1`*|(?=~)\1~*) *(?=\n|$)|$)/,Oe=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Ds=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Lt=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,En=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |fences|blockquote|heading|hr|html|table))+?)\n {0,3}(=+|-+)[ \t]*(?:\n+|$)/,jn=T(En).replace(/bull/g,Lt).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/hr/g,/ {0,3}(?:(?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Fs=T(En).replace(/bull/g,Lt).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/hr/g,/ {0,3}(?:(?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Mt=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/,Us=/^[^\n]+/,At=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\\n]|\n(?![ \t]*\n))+/,Ws=T(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",At).replace("title",/(?:"(?:\\[\s\S]|[^"\\])*"|'(?:\\[\s\S]|[^'\\\n]|\n(?!\n))*'|\((?:\\[\s\S]|[^()\\])*\))/).getRegex(),Zs=T(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,Lt).getRegex(),Pe="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Ct=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Ks=T("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\n*|$)|</?(tag)(?:[ \\t]+|\\n|/?>|$)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!(?:script|pre|style|textarea)(?![a-z0-9-]))([a-z][a-z0-9-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</[a-z][a-z0-9-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",Ct).replace("tag",Pe).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),In=t=>T(Mt).replace("hr",Oe).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list",t).replace("html"," {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag",Pe).getRegex(),Vs=In(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/),Gs=In(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/),Xs=T(/^( {0,3}> ?(?:(?![ \t]*(?:\n|$))(paragraph)|[^\n]*)(?:\n|$))+/).replace("paragraph",Gs).getRegex(),qt={blockquote:Xs,code:Ns,def:Ws,fences:Bs,heading:Ds,hr:Oe,html:Ks,lheading:jn,list:Zs,newline:Ps,paragraph:Vs,table:me,text:Us},$n=T("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Oe).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html"," {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag",Pe).getRegex(),Qs={...qt,lheading:Fs,table:$n,paragraph:T(Mt).replace("hr",Oe).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",$n).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html"," {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag",Pe).getRegex()},Js={...qt,html:T(`^ *(?:comment(?: *\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1>(?: *\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?>(?: *\\n{2,}|\\s*$))`).replace("comment",Ct).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:me,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:T(Mt).replace("hr",Oe).replace("heading",` *#{1,6} *[^
|
|
2
|
+
]`).replace("lheading",jn).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Ys=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,er=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,zn=/^( {2,}|\\)\n(?!\s*$)[ \t]*/,tr=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,J=/[\p{P}\p{S}]/u,Te=/[\s\p{P}\p{S}]/u,Ne=/[^\s\p{P}\p{S}]/u,nr=T(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,Te).getRegex(),sr=/[\p{Pi}\p{Ps}"']/u,Hn=/(?!~)[\p{P}\p{S}]/u,rr=/(?!~)[\s\p{P}\p{S}]/u,ar=/(?:[^\s\p{P}\p{S}]|~)/u,or=T(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Rn?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),_n=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,ir=T(_n,"u").replace(/punct/g,J).getRegex(),lr=T(_n,"u").replace(/punct/g,Hn).getRegex(),cr=/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,dr=T(cr,"u").replace(/openQuote/g,sr).replace(/punct/g,J).getRegex(),On="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",pr=T(On,"gu").replace(/notPunctSpace/g,Ne).replace(/punctSpace/g,Te).replace(/punct/g,J).getRegex(),hr=T(On,"gu").replace(/notPunctSpace/g,ar).replace(/punctSpace/g,rr).replace(/punct/g,Hn).getRegex(),ur="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)",fr=T(ur,"gu").replace(/notPunctSpace/g,Ne).replace(/punctSpace/g,Te).replace(/punct/g,J).getRegex(),mr=T("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Ne).replace(/punctSpace/g,Te).replace(/punct/g,J).getRegex(),gr="^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)",kr=T(gr,"gu").replace(/notPunctSpace/g,Ne).replace(/punctSpace/g,Te).replace(/punct/g,J).getRegex(),br=T(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,J).getRegex(),wr="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",$r=T(wr,"gu").replace(/notPunctSpace/g,Ne).replace(/punctSpace/g,Te).replace(/punct/g,J).getRegex(),xr=T(/\\(punct)/,"gu").replace(/punct/g,J).getRegex(),yr=T(/(`+)(?:[^`]|[^`][\s\S]*?[^`])\1(?!`)|`+|\\(punct)/,"gu").replace(/punct/g,J).getRegex(),vr=T(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Sr=T(Ct).replace("(?:-->|$)","-->").getRegex(),Tr=T("^comment|^</[a-zA-Z][a-zA-Z0-9-]*\\s*>|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",Sr).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Pn=/\[(?:\\[\s\S]|[^\[\]\\])*\]/,at=T(/(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/).replace("brackets",Pn).getRegex(),Lr=T(/^!?\[(label)\]\([ \t\n]*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?[ \t\n]*\)/).replace("label",at).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace("title",/"(?:\\[\s\S]|[^"\\])*"|'(?:\\[\s\S]|[^'\\])*'|\((?:\\[\s\S]|[^)\\])*\)/).getRegex(),Mr=T(/^!?\[(label)\]\[(ref)\]/).replace("label",at).replace("ref",At).getRegex(),Ar=T(/^!?\[(ref)\](?:\[\])?/).replace("ref",At).getRegex(),xn=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\]){1,999}/,Cr=T(/(?:[^\[\]\\`]*(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\]))){0,999}?[^\[\]\\`]*?/).replace("brackets",Pn).getRegex(),qr=T("reflink|nolink(?!\\()","g").replace("reflink",T(/^!?\[(label)\]\[(ref)\]/).replace("label",Cr).replace("ref",xn).getRegex()).replace("nolink",T(/^!?\[(ref)\](?:\[\])?/).replace("ref",xn).getRegex()).getRegex(),yn=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Rr=/[A-Za-z0-9._+-]+@[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/,Er=T(/(?:mailto:email|xmpp:email(?:\/[A-Za-z0-9@.]+)?)/).replace(/email/g,Rr).getRegex(),Rt={_backpedal:me,anyPunctuation:xr,anyPunctuationOutsideCode:yr,autolink:vr,blockSkip:or,br:zn,code:er,del:me,delLDelim:me,delRDelim:me,emStrongLDelim:ir,emStrongRDelimAst:pr,emStrongRDelimUnd:mr,escape:Ys,link:Lr,nolink:Ar,punctuation:nr,reflink:Mr,reflinkSearch:qr,tag:Tr,text:tr,url:me},jr={...Rt,emStrongLDelim:dr,emStrongRDelimAst:fr,emStrongRDelimUnd:kr,link:T(/^!?\[(label)\]\((.*?)\)/).replace("label",at).getRegex(),reflink:T(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",at).getRegex()},yt={...Rt,emStrongRDelimAst:hr,emStrongLDelim:lr,delLDelim:br,delRDelim:$r,url:T(/^emailProtocol|^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("emailProtocol",Er).replace("protocol",yn).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:T(/^(?:[^a-zA-Z0-9](?=emailProtocol)|(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|wwwStart|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9](?=emailProtocol)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))))/).replace("protocol",yn).replace(/emailProtocol/g,/(?:mailto|xmpp):/).replace("wwwStart",Rn?"(?<![^\\s*_~(])www\\.":"www\\.").getRegex()},Ir={...yt,br:T(zn).replace("{2,}","*").getRegex(),text:T(yt.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},st={normal:qt,gfm:Qs,pedantic:Js},He={normal:Rt,gfm:yt,breaks:Ir,pedantic:jr},zr={"&":"&","<":"<",">":">",'"':""","'":"'"},vn=t=>zr[t];function B(t,e){if(e){if(I.escapeTest.test(t))return t.replace(I.escapeReplace,vn)}else if(I.escapeTestNoEncode.test(t))return t.replace(I.escapeReplaceNoEncode,vn);return t}function Hr(t){return I.numericCharacterReference.test(t)?t.replace(I.numericCharacterReferenceOrAmpersand,(e,n,s)=>{if(n===void 0&&s===void 0)return"&";let r=n===void 0?Number.parseInt(s,16):Number.parseInt(n,10);return r===0||r>1114111||r>=55296&&r<=57343?"\uFFFD":r===38?"&":String.fromCodePoint(r)}):t}function Sn(t){try{t=encodeURI(t).replace(I.percentDecode,"%")}catch{return null}return t}function Tn(t,e){let n=t.replace(I.findPipe,(a,o,i)=>{let l=!1,c=o;for(;--c>=0&&i[c]==="\\";)l=!l;return l?"|":" |"}),s=n.split(I.splitPipe),r=0;if(s[0].trim()||s.shift(),s.length>0&&!s.at(-1)?.trim()&&s.pop(),e)if(s.length>e)s.splice(e);else for(;s.length<e;)s.push("");for(;r<s.length;r++)s[r]=s[r].trim().replace(I.slashPipe,"|");return s}function se(t,e,n){let s=t.length;if(s===0)return"";let r=0;for(;r<s;){let a=t.charAt(s-r-1);if(a===e&&!n)r++;else if(a!==e&&n)r++;else break}return t.slice(0,s-r)}function Ln(t){let e=t.split(`
|
|
3
|
+
`),n=e.length-1;for(;n>=0&&I.blankLine.test(e[n]);)n--;return e.length-n<=2?t:e.slice(0,n+1).join(`
|
|
4
|
+
`)}function ot(t){return t.trim().replace(I.multipleSpaceGlobal," ").toLowerCase().toUpperCase().toLowerCase()}function Mn(t,e){if(t.indexOf(e[0])===-1&&t.indexOf(e[1])===-1)return-1;let n=0;for(let s=0;s<t.length;s++)if(t[s]==="\\")s++;else if(t[s]===e[0])n++;else if(t[s]===e[1]&&(n--,n<0))return s;return n>0?-2:-1}var Se=new WeakMap;function Et(t){let e={"*":-1,_:-1},n=-1,s=t.length;for(let r=0;r<s;r++){let a=t[r];if(a!=="*"&&a!=="_"&&a!=="~")continue;let o=r===0?`
|
|
5
|
+
`:t[r-1],i=r+1;for(;i<s&&t[i]===a;)i++;o!==" "&&o!==" "&&o!==`
|
|
6
|
+
`&&o!=="\r"&&o!=="\f"&&(a==="~"?n=r:e[a]=r),r=i-1}return{maskedSrc:t,lastPossibleEmStrongCloserIndex:e,lastPossibleDelCloserIndex:n}}function _r(t,e){let n=Et(e),s=Se.get(t);s?s.push(n):Se.set(t,[n])}function Or(t){let e=Se.get(t);e&&(e.pop(),e.length===0&&Se.delete(t))}function Pr(t,e,n){let s=Se.get(t)?.at(-1);return s&&s.maskedSrc===e?s.lastPossibleEmStrongCloserIndex[n]:Et(e).lastPossibleEmStrongCloserIndex[n]}function Nr(t,e){let n=Se.get(t)?.at(-1);return n&&n.maskedSrc===e?n.lastPossibleDelCloserIndex:Et(e).lastPossibleDelCloserIndex}function rt(t,e=0){let n=e,s="";for(let r of t)if(r===" "){let a=4-n%4;s+=" ".repeat(a),n+=a}else s+=r,n++;return s}function An(t,e,n,s,r){let a=e.href,o=e.title||null,i=t[1].replace(r.other.outputLinkReplace,"$1"),l=t[0].charAt(0)==="!",c=s.state.inLink,d=s.state.linkEmitted,p=s.state.inRawBlock;s.state.inLink=!0,s.state.linkEmitted=!1;let u=s.inlineTokens(i),f=s.state.linkEmitted;if(s.state.linkEmitted=d,s.state.inLink=c,!l){if(f){s.state.inRawBlock=p;return}s.state.linkEmitted=!0}return{type:l?"image":"link",raw:n,href:a,title:o,text:i,tokens:u}}function Br(t,e,n){let s=t.match(n.other.indentCodeCompensation);if(s===null)return e;let r=s[1];return e.split(`
|
|
7
|
+
`).map(a=>{let o=a.match(n.other.beginningSpace);if(o===null)return a;let[i]=o;return a.slice(Math.min(i.length,r.length))}).join(`
|
|
8
|
+
`)}function Cn(t,e,n,s){if(!e.includes("<"))return!1;for(let r=0;r<e.length;r++){if(e[r]==="\\"){r++;continue}if(e[r]==="`"){let i=s.inline.code.exec(e.slice(r));if(i){r+=i[0].length-1;continue}}if(e[r]!=="<")continue;let a=t.slice(n+r),o=s.inline.tag.exec(a)||s.inline.autolink.exec(a);if(o){if(o[0].length>e.length-r)return!0;r+=o[0].length-1}}return!1}var ve=class{options;rules;lexer;constructor(t){this.options=t||ke}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let n=this.options.pedantic?e[0]:Ln(e[0]),s=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:s}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let n=e[0],s=Br(n,e[3]||"",this.rules);return{type:"code",raw:n,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:s}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let n=e[2].trim();if(this.rules.other.endingHash.test(n)){let s=se(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceTabChar.test(s))&&(n=s.trim())}return{type:"heading",raw:se(e[0],`
|
|
9
|
+
`),depth:e[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:se(e[0],`
|
|
10
|
+
`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let n=se(e[0],`
|
|
11
|
+
`).split(`
|
|
12
|
+
`),s="",r="",a=[];for(;n.length>0;){let o=!1,i=[],l;for(l=0;l<n.length;l++)if(this.rules.other.blockquoteStart.test(n[l]))i.push(n[l]),o=!0;else if(!o)i.push(n[l]);else break;n=n.slice(l);let c=i.join(`
|
|
13
|
+
`),d=c.replace(this.rules.other.blockquoteMarkerWhitespace,(f,g,m)=>g+rt(m,g.length)).replace(this.rules.other.blockquoteSetextReplace,`
|
|
14
|
+
$1`).replace(this.rules.other.blockquoteSetextReplace2,"");s=s?`${s}
|
|
15
|
+
${c}`:c,r=r?`${r}
|
|
16
|
+
${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,a,!0),this.lexer.state.top=p,n.length===0)break;let u=a.at(-1);if(u?.type==="code"||u?.type==="heading"||u?.type==="hr"||u?.type==="html"||u?.type==="table")break;if(u?.type==="blockquote"){let f=u,g=n.join(`
|
|
17
|
+
`),m=f.raw+`
|
|
18
|
+
`+g.replace(this.rules.other.blockquoteSetextReplace2,""),w=this.blockquote(m);a[a.length-1]=w;let v=m.substring(w.raw.length).replace(/^\n/,""),y=v?v.split(`
|
|
19
|
+
`).length:0,k=y?n.slice(0,-y):n;if(k.length>0&&(s=`${s}
|
|
20
|
+
${k.join(`
|
|
21
|
+
`)}`),r=r.substring(0,r.length-f.text.length)+w.text,n=n.slice(k.length),n.length>0&&this.rules.other.blockquoteStart.test(n[0]))continue;break}else if(u?.type==="list"){let f=u,g=f.raw+`
|
|
22
|
+
`+n.join(`
|
|
23
|
+
`),m=this.list(g);a[a.length-1]=m;let w=m.raw.length>f.raw.length?g.slice(f.raw.length+1,m.raw.length).split(`
|
|
24
|
+
`).length:0;if(w>0){let v=n.slice(0,w).join(`
|
|
25
|
+
`);s=`${s}
|
|
26
|
+
${v}`,r=`${r}
|
|
27
|
+
${v}`}n=n.slice(w);continue}}return{type:"blockquote",raw:s,tokens:a,text:r}}}list(t){let e=this.rules.block.list.exec(t);if(e){if(!this.options.pedantic&&this.lexer.state.lastToken?.type==="text"&&!this.rules.other.listInterruptsParagraph.test(t))return;let n=t,s=()=>n.length-t.length,r=e[1].trim(),a=r.length>1,o={type:"list",raw:"",ordered:a,start:a?+r.slice(0,-1):"",loose:!1,items:[]};r=a?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=a?r:"[*+-]");let i=this.rules.other.listItemRegex(r),l=!1;for(;t;){let d=!1,p="";if(!(e=i.exec(t))||this.rules.block.hr.test(t))break;let u=s();t=t.substring(e[0].length);let f=e[2].split(`
|
|
28
|
+
`,1)[0],g=e[1].length,m=this.options.pedantic?rt(f,g):f.replace(this.rules.other.leadingSpaceTab,S=>rt(S,g)),w=t.split(`
|
|
29
|
+
`,1)[0],v=!m.trim(),y=0;if(this.options.pedantic?(y=2,p=m.trimStart()):v?y=g+1:(y=m.search(this.rules.other.nonSpaceChar),y=y>4?1:y,p=m.slice(y),y+=g),v&&this.rules.other.blankLine.test(w)&&(t=t.substring(w.length+1),d=!0),!d){let S=this.rules.other.nextBulletRegex(y),C=this.rules.other.hrRegex(y),q=this.rules.other.fencesBeginRegex(y),j=this.options.pedantic?this.rules.other.pedanticHeadingBeginRegex(y):this.rules.other.headingBeginRegex(y),N=this.rules.other.htmlBeginRegex(y),E=this.rules.other.blockquoteBeginRegex(y),ie=!1;for(;t;){let un=t.split(`
|
|
30
|
+
`,1)[0],$e;if(w=un,this.options.pedantic?(w=w.replace(this.rules.other.listReplaceNesting," "),$e=w):$e=w.replace(this.rules.other.leadingSpaceTab,gt=>rt(gt)),q.test(w)||j.test(w)||N.test(w)||E.test(w)||S.test(w)||C.test(w))break;if($e.search(this.rules.other.nonSpaceChar)>=y||!w.trim())p+=`
|
|
31
|
+
`+$e.slice(y),ie=!1;else{if(v||m.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||q.test(m)||j.test(m)||N.test(m)||C.test(m))break;if(!this.options.pedantic&&!ie){let kt=m.replace(this.rules.other.nestedContainerMarkers,"");if(this.rules.block.fences.test(kt)||this.rules.block.heading.test(kt)||this.rules.block.hr.test(kt))break}let gt=!this.options.pedantic&&/^ {0,3}(?:=+|-+) *$/.test(w)&&this.rules.block.lheading.test(`${m}
|
|
32
|
+
${w}`)?` ${$e.replace(/^ {0,3}/,"")}`:w;p+=`
|
|
33
|
+
`+gt,ie=!0}v=!w.trim(),t=t.substring(un.length+1),m=$e.slice(y)}}let k=n.slice(u,s());o.loose||(l?o.loose=!0:this.rules.other.doubleBlankLine.test(k)&&(l=!0)),o.items.push({type:"list_item",raw:k,task:!!this.options.gfm&&this.rules.other.listIsTask.test(p),loose:!1,text:p,tokens:[]})}let c=o.items.at(-1);if(c)c.raw=c.raw.trimEnd(),c.text=c.text.trimEnd();else return;o.raw=n.slice(0,s()).trimEnd();for(let d of o.items)if(this.lexer.state.top=!1,d.tokens=this.lexer.blockTokens(d.text,[]),!o.loose){let p=d.tokens.filter(f=>f.type==="space"),u=p.length>0&&p.some(f=>this.rules.other.anyLine.test(f.raw));o.loose=u}for(let d of o.items){let p=d.tokens[0];if(d.task&&(p?.type==="text"||p?.type==="paragraph")){d.text=d.text.replace(this.rules.other.listReplaceTask,""),p.raw=p.raw.replace(this.rules.other.listReplaceTask,""),p.text=p.text.replace(this.rules.other.listReplaceTask,"");for(let f=this.lexer.inlineQueue.length-1;f>=0;f--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[f].src)){this.lexer.inlineQueue[f].src=this.lexer.inlineQueue[f].src.replace(this.rules.other.listReplaceTask,"");break}let u=this.rules.other.listTaskCheckbox.exec(d.raw);if(u){let f={type:"checkbox",raw:u[0]+" ",checked:u[0]!=="[ ]"};d.checked=f.checked,o.loose?d.tokens[0]&&["paragraph","text"].includes(d.tokens[0].type)&&"tokens"in d.tokens[0]&&d.tokens[0].tokens?(d.tokens[0].raw=f.raw+d.tokens[0].raw,d.tokens[0].text=f.raw+d.tokens[0].text,d.tokens[0].tokens.unshift(f)):d.tokens.unshift({type:"paragraph",raw:f.raw,text:f.raw,tokens:[f]}):d.tokens.unshift(f)}}else d.task&&(d.task=!1)}if(o.loose)for(let d of o.items){d.loose=!0;for(let p of d.tokens)p.type==="text"&&(p.type="paragraph")}return o}}html(t){let e=this.rules.block.html.exec(t);if(e){let n=Ln(e[0]);return{type:"html",block:!0,raw:n,pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:n}}}def(t){let e=this.rules.block.def.exec(t);if(e){if(!this.rules.other.startAngleBracket.test(e[2])&&Mn(e[2],"()")!==-1)return;let n=ot(e[1]),s=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:n,raw:se(e[0],`
|
|
34
|
+
`),href:s,title:r}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let n=Tn(e[1]),s=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(`
|
|
35
|
+
`):[],a={type:"table",raw:se(e[0],`
|
|
36
|
+
`),header:[],align:[],rows:[]};if(n.length===s.length){for(let o of s)this.rules.other.tableAlignRight.test(o)?a.align.push("right"):this.rules.other.tableAlignCenter.test(o)?a.align.push("center"):this.rules.other.tableAlignLeft.test(o)?a.align.push("left"):a.align.push(null);for(let o=0;o<n.length;o++)a.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:a.align[o]});for(let o of r)a.rows.push(Tn(o,a.header.length).map((i,l)=>({text:i,tokens:this.lexer.inline(i),header:!1,align:a.align[l]})));return a}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e){let n=e[1].trim();return{type:"heading",raw:se(e[0],`
|
|
37
|
+
`),depth:e[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let n=e[1].charAt(e[1].length-1)===`
|
|
38
|
+
`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:n,tokens:this.lexer.inline(n)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){if(this.lexer.state.linkParenPossible===!1)return;let e=this.rules.inline.link.exec(t);if(e){let n=e[0].charAt(0)==="!"?2:1;if(!this.options.pedantic&&Cn(t,e[1],n,this.rules))return;let s=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(s)){if(!this.rules.other.endAngleBracket.test(s))return;let i=se(s.slice(0,-1),"\\");if((s.length-i.length)%2===0)return}else{let i=Mn(e[2],"()");if(i===-2)return;if(i>-1){let l=(e[0].indexOf("!")===0?5:4)+e[1].length+i;e[2]=e[2].substring(0,i),e[0]=e[0].substring(0,l).trim(),e[3]=""}}let r=se(e[0].slice(0,-1),"\\");if((e[0].length-r.length)%2===0)return;let a=e[2],o="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(a);i&&(a=i[1],o=i[3])}else o=e[3]?e[3].slice(1,-1):"";return a=a.trim(),this.rules.other.startAngleBracket.test(a)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(s)?a=a.slice(1):a=a.slice(1,-1)),An(e,{href:a&&a.replace(this.rules.inline.anyPunctuation,"$1"),title:o&&o.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){let s=n[0].charAt(0)==="!"?2:1;if(!this.options.pedantic&&Cn(t,n[1],s,this.rules))return;let r=e[ot(n[2]||n[1])];if(!r){let a=n[0].charAt(0);return{type:"text",raw:a,text:a}}return An(n,r,n[0],this.lexer,this.rules)}}emStrong(t,e,n=""){let s=this.rules.inline.emStrongLDelim.exec(t);if(!s||!s[1]&&!s[2]&&!s[3]&&!s[4])return;let r=s[0][0],a=n===r,o=e.length-t.length,i=o;for(;!this.options.pedantic&&i>0&&e[i-1]===r;)i--;let l=[...e.slice(Math.max(0,i-2),i)].at(-1)??"",c=l==="*"||l==="_"||!!this.rules.inline.punctuation.exec(l);i<o&&(n=l);let d=i<o?c:n==="*"||n==="_"||!!this.rules.inline.punctuation.exec(n);if(s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))return;let p=s[1]||s[3]||"";if(!p||!n||d){let u=[...s[0]].length-1,f,g,m=u,w=0,v=o-i+u,y=!this.options.pedantic&&!!l.trim()&&(!!p||r==="*"&&!c);if(r!=="*"&&r!=="_")return;let k=r==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd,S=Pr(this,e,r),C=e.length-t.length+u;if(S<C)return;e=e.slice(-1*t.length+u);let q=S-C;for(k.lastIndex=0;(s=k.exec(e))!==null&&!(s.index>q);){if(f=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!f)continue;if(g=[...f].length,s[3]||s[4]){m+=g;continue}else if(s[5]||s[6]||y){if(a&&(s[5]||s[6]))break;if(v%3&&!((v+g)%3)){w+=g;continue}}if(m-=g,m>0)continue;g=Math.min(g,g+m+w);let j=[...s[0]][0].length,N=t.slice(0,u+s.index+j+g);if(Math.min(u,g)%2){let ie=N.slice(1,-1);return{type:"em",raw:N,text:ie,tokens:this.lexer.inlineTokens(ie)}}let E=N.slice(2,-2);return{type:"strong",raw:N,text:E,tokens:this.lexer.inlineTokens(E)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let n=e[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:e[0],text:n}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t,e,n=""){let s=this.rules.inline.delLDelim.exec(t);if(s&&(!s[1]||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,a,o,i=r,l=this.rules.inline.delRDelim,c=Nr(this,e),d=e.length-t.length+r;if(c<d)return;e=e.slice(-1*t.length+r);let p=c-d;for(l.lastIndex=0;(s=l.exec(e))!==null&&!(s.index>p);){if(a=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!a||(o=[...a].length,o!==r))continue;if(s[3]||s[4]){i+=o;continue}if(i-=o,i>0)continue;o=Math.min(o,o+i);let u=[...s[0]][0].length,f=t.slice(0,r+s.index+u+o),g=f.slice(r,-r);return{type:"del",raw:f,text:g,tokens:this.lexer.inlineTokens(g)}}}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let n,s;return e[2]==="@"?(n=e[1],s="mailto:"+n):(n=e[1],s=n),{type:"link",raw:e[0],text:n,href:s,autolink:!0,tokens:[{type:"text",raw:n,text:n}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let n,s;if(e[2]==="@")n=e[0],s="mailto:"+n;else{let r;do r=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(r!==e[0]);n=e[0],e[1]==="www."?s="http://"+e[0]:s=e[0]}return{type:"link",raw:e[0],text:n,href:s,autolink:!0,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let n=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:n?e[0]:Hr(e[0]),escaped:n}}}},G=class vt{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||ke,this.options.tokenizer=this.options.tokenizer||new ve,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,linkEmitted:!1,linkParenPossible:!0,top:!0};let n={other:I,block:st.normal,inline:He.normal};this.options.pedantic?(n.block=st.pedantic,n.inline=He.pedantic):this.options.gfm&&(n.block=st.gfm,this.options.breaks?n.inline=He.breaks:n.inline=He.gfm),this.tokenizer.rules=n}static get rules(){return{block:st,inline:He}}static lex(e,n){return new vt(n).lex(e)}static lexInline(e,n){return new vt(n).inlineTokens(e)}lex(e){e=e.replace(I.carriageReturn,`
|
|
39
|
+
`),this.blockTokens(e,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let s=this.inlineQueue[n];this.state.inRawBlock=!1,this.inlineTokens(s.src,s.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,n=[],s=!1){this.tokenizer.lexer=this;let r=this.state.lastToken;this.options.pedantic&&(e=e.replace(I.tabCharGlobal," ").replace(I.spaceLine,""));let a=1/0;for(;e;){if(e.length<a)a=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}this.state.lastToken=n.at(-1);let o;if(this.options.extensions?.block?.some(l=>(o=l.call({lexer:this},e,n))?(e=e.substring(o.raw.length),n.push(o),!0):!1))continue;if(o=this.tokenizer.space(e)){e=e.substring(o.raw.length);let l=n.at(-1);o.raw.length===1&&l!==void 0?l.raw+=`
|
|
40
|
+
`:n.push(o);continue}if(o=this.tokenizer.code(e)){e=e.substring(o.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`
|
|
41
|
+
`)?"":`
|
|
42
|
+
`)+o.raw,l.text+=`
|
|
43
|
+
`+o.text,this.inlineQueue.at(-1).src=l.text):n.push(o);continue}if(o=this.tokenizer.fences(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.heading(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.hr(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.blockquote(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.list(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.html(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.def(e)){e=e.substring(o.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`
|
|
44
|
+
`)?"":`
|
|
45
|
+
`)+o.raw,l.text+=`
|
|
46
|
+
`+o.raw,this.inlineQueue.at(-1).src=l.text):(this.tokens.links[o.tag]||(this.tokens.links[o.tag]={href:o.href,title:o.title}),n.push(o));continue}if(o=this.tokenizer.table(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.lheading(e)){e=e.substring(o.raw.length),n.push(o);continue}let i=e;if(this.options.extensions?.startBlock){let l=1/0,c=e.slice(1),d;this.options.extensions.startBlock.forEach(p=>{d=p.call({lexer:this},c),typeof d=="number"&&d>=0&&(l=Math.min(l,d))}),l<1/0&&l>=0&&(i=e.substring(0,l+1))}if(this.state.top&&(o=this.tokenizer.paragraph(i))){let l=n.at(-1);s&&l?.type==="paragraph"?(l.raw+=(l.raw.endsWith(`
|
|
47
|
+
`)?"":`
|
|
48
|
+
`)+o.raw,l.text+=`
|
|
49
|
+
`+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(o),s=i.length!==e.length,e=e.substring(o.raw.length);continue}if(o=this.tokenizer.text(e)){e=e.substring(o.raw.length);let l=n.at(-1);l?.type==="text"?(l.raw+=(l.raw.endsWith(`
|
|
50
|
+
`)?"":`
|
|
51
|
+
`)+o.raw,l.text+=`
|
|
52
|
+
`+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(o);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,this.state.lastToken=r,n}inline(e,n=[]){return this.inlineQueue.push({src:e,tokens:n}),n}linkInText(e){if(!e.includes("["))return!1;let n=this.tokenizer.rules.inline.link;for(let s of e.matchAll(this.tokenizer.rules.inline.blockSkip))if(n.test(s[0])&&e.charAt(s.index-1)!=="!")return!0;for(let s of e.matchAll(this.tokenizer.rules.inline.reflinkSearch)){let r=s[0],a=r.lastIndexOf("[");if(!(r.charAt(0)==="!"||!Object.hasOwn(this.tokens.links,ot(r.slice(a+1,-1))))&&!(a>1&&this.linkInText(r.slice(1,a-1))))return!0}return!1}inlineTokens(e,n=[]){this.tokenizer.lexer=this;let s=this.state.linkParenPossible;this.state.linkParenPossible=s&&e.includes(")");try{return this.#e(e,n)}finally{this.state.linkParenPossible=s}}#e(e,n){let s=e.includes("*")||e.includes("_")||e.includes("~")||this.options.hooks?.emStrongMask||this.tokenizer.emStrong!==ve.prototype.emStrong||this.tokenizer.del!==ve.prototype.del?this.#s(e):e;_r(this.tokenizer,s);try{return this.#t(e,s,n)}finally{Or(this.tokenizer)}}#t(e,n,s){let r=!1,a="",o=1/0;for(;e;){if(e.length<o)o=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}r||(a=""),r=!1;let i;if(this.options.extensions?.inline?.some(c=>(i=c.call({lexer:this},e,s))?(e=e.substring(i.raw.length),s.push(i),!0):!1))continue;if(i=this.tokenizer.escape(e)){e=e.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.tag(e)){e=e.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.link(e)){e=e.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(i.raw.length);let c=s.at(-1);i.type==="text"&&c?.type==="text"?(c.raw+=i.raw,c.text+=i.text):s.push(i);continue}if(i=this.tokenizer.emStrong(e,n,a)){e=e.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.codespan(e)){e=e.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.br(e)){e=e.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.del(e,n,a)){e=e.substring(i.raw.length),s.push(i);continue}if(i=this.tokenizer.autolink(e)){e=e.substring(i.raw.length),s.push(i);continue}if(!this.state.inLink&&(i=this.tokenizer.url(e))){e=e.substring(i.raw.length),s.push(i);continue}let l=e;if(this.options.extensions?.startInline){let c=1/0,d=e.slice(1),p;this.options.extensions.startInline.forEach(u=>{p=u.call({lexer:this},d),typeof p=="number"&&p>=0&&(c=Math.min(c,p))}),c<1/0&&c>=0&&(l=e.substring(0,c+1))}if(i=this.tokenizer.inlineText(l)){e=e.substring(i.raw.length),i.raw.slice(-1)!=="_"&&(a=i.raw.slice(-1)),r=!0;let c=s.at(-1);c?.type==="text"?(c.raw+=i.raw,c.text+=i.text):s.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return s}#n(e){let{blockSkip:n,tag:s,autolink:r}=this.tokenizer.rules.inline,a="",o=0,i;for(n.lastIndex=0;i=n.exec(e);){let l=i.index+(i[2]?i[2].length:0),c=i.index+i[0].length;if(e.charAt(l)==="<"){let d=e.slice(l),p=s.exec(d)||r.exec(d);if(!p){n.lastIndex=l+1;continue}c=l+p[0].length,n.lastIndex=c}a+=e.slice(o,l)+"["+"a".repeat(c-l-2)+"]",o=c}return a+e.slice(o)}#s(e){let n=e;if(this.tokens.links&&e.includes("[")){let s=this.tokenizer.rules.inline.reflinkSearch,r=a=>{let o=a.lastIndexOf("[");if(!Object.hasOwn(this.tokens.links,ot(a.slice(o+1,-1))))return a;if(o>1&&a.charAt(0)!=="!"){let i=a.slice(1,o-1);if(this.linkInText(i))return"["+i.replace(s,r)+"]["+"a".repeat(a.length-o-2)+"]"}return"["+"a".repeat(a.length-2)+"]"};n=n.replace(s,r)}return n=n.replace(this.tokenizer.rules.inline.anyPunctuationOutsideCode,(s,r,a)=>a?"+".repeat(s.length):r?r+s.slice(r.length,-r.length).replace(/`/g,"+")+r:s),n=this.#n(n),n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n,n}infiniteLoopError(e){let n="Infinite loop on byte: "+e;if(this.options.silent)console.error(n);else throw new Error(n)}},it=class{options;parser;constructor(t){this.options=t||ke}space(t){return""}code({text:t,lang:e,escaped:n}){let s=(e||"").match(I.notSpaceStart)?.[0],r=t?t.replace(I.endingNewline,"")+`
|
|
53
|
+
`:"";return s?'<pre><code class="language-'+B(s)+'">'+(n?r:B(r,!0))+`</code></pre>
|
|
54
|
+
`:"<pre><code>"+(n?r:B(r,!0))+`</code></pre>
|
|
55
|
+
`}blockquote({tokens:t}){return`<blockquote>
|
|
56
|
+
${this.parser.parse(t)}</blockquote>
|
|
57
|
+
`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`<h${e}>${this.parser.parseInline(t)}</h${e}>
|
|
58
|
+
`}hr(t){return`<hr>
|
|
59
|
+
`}list(t){let e=t.ordered,n=t.start,s="";for(let o=0;o<t.items.length;o++){let i=t.items[o];s+=this.listitem(i)}let r=e?"ol":"ul",a=e&&n!==1?' start="'+n+'"':"";return"<"+r+a+`>
|
|
60
|
+
`+s+"</"+r+`>
|
|
61
|
+
`}listitem(t){return`<li>${this.parser.parse(t.tokens)}</li>
|
|
62
|
+
`}checkbox({checked:t}){return"<input "+(t?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:t}){return`<p>${this.parser.parseInline(t)}</p>
|
|
63
|
+
`}table(t){let e="",n="";for(let r=0;r<t.header.length;r++)n+=this.tablecell(t.header[r]);e+=this.tablerow({text:n});let s="";for(let r=0;r<t.rows.length;r++){let a=t.rows[r];n="";for(let o=0;o<a.length;o++)n+=this.tablecell(a[o]);s+=this.tablerow({text:n})}return s&&(s=`<tbody>${s}</tbody>`),`<table>
|
|
64
|
+
<thead>
|
|
65
|
+
`+e+`</thead>
|
|
66
|
+
`+s+`</table>
|
|
67
|
+
`}tablerow({text:t}){return`<tr>
|
|
68
|
+
${t}</tr>
|
|
69
|
+
`}tablecell(t){let e=this.parser.parseInline(t.tokens),n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`</${n}>
|
|
70
|
+
`}strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}codespan({text:t}){return`<code>${B(t,!0)}</code>`}br(t){return"<br>"}del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}link({href:t,title:e,text:n,tokens:s,autolink:r}){let a=r?B(n,!0):this.parser.parseInline(s),o=Sn(t);if(o===null)return a;t=B(o,r);let i='<a href="'+t+'"';return e&&(i+=' title="'+B(e)+'"'),i+=">"+a+"</a>",i}image({href:t,title:e,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=Sn(t);if(r===null)return B(n);t=r;let a=`<img src="${B(t)}" alt="${B(n)}"`;return e&&(a+=` title="${B(e)}"`),a+=">",a}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"escaped"in t&&t.escaped?t.text:B(t.text)}},jt=class{parser;strong({text:t,tokens:e}){return e?this.parser.parseInline(e,this):t}em({text:t,tokens:e}){return e?this.parser.parseInline(e,this):t}codespan({text:t}){return t}del({text:t,tokens:e}){return e?this.parser.parseInline(e,this):t}html({text:t}){return t}text({text:t}){return t}link({text:t,tokens:e}){return e?this.parser.parseInline(e,this):t}image({text:t,tokens:e}){return e?this.parser.parseInline(e,this):t}br(){return`
|
|
71
|
+
`}checkbox({raw:t}){return t}},X=class St{options;renderer;textRenderer;constructor(e){this.options=e||ke,this.options.renderer=this.options.renderer||new it,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new jt,this.textRenderer.parser=this}static parse(e,n){return new St(n).parse(e)}static parseInline(e,n){return new St(n).parseInline(e)}parse(e){this.renderer.parser=this;let n="";for(let s=0;s<e.length;s++){let r=e[s];if(this.options.extensions?.renderers?.[r.type]){let o=r,i=this.options.extensions.renderers[o.type].call({parser:this},o);if(i!==!1||!["space","hr","heading","code","table","blockquote","list","checkbox","html","def","paragraph","text"].includes(o.type)){n+=i===!1?"":i??"";continue}}let a=r;switch(a.type){case"space":{n+=this.renderer.space(a);break}case"hr":{n+=this.renderer.hr(a);break}case"heading":{n+=this.renderer.heading(a);break}case"code":{n+=this.renderer.code(a);break}case"table":{n+=this.renderer.table(a);break}case"blockquote":{n+=this.renderer.blockquote(a);break}case"list":{n+=this.renderer.list(a);break}case"checkbox":{n+=this.renderer.checkbox(a);break}case"html":{n+=this.renderer.html(a);break}case"def":{n+=this.renderer.def(a);break}case"paragraph":{n+=this.renderer.paragraph(a);break}case"text":{n+=this.renderer.text(a);break}default:{let o='Token with "'+a.type+'" type was not found.';if(this.options.silent)return console.error(o),"";throw new Error(o)}}}return n}parseInline(e,n=this.renderer){this.renderer.parser=this;let s="";for(let r=0;r<e.length;r++){let a=e[r];if(this.options.extensions?.renderers?.[a.type]){let i=this.options.extensions.renderers[a.type].call({parser:this},a);if(i!==!1||!["escape","html","link","image","checkbox","strong","em","codespan","br","del","text"].includes(a.type)){s+=i===!1?"":i??"";continue}}let o=a;switch(o.type){case"escape":{s+=n.text(o);break}case"html":{s+=n.html(o);break}case"link":{s+=n.link(o);break}case"image":{s+=n.image(o);break}case"checkbox":{s+=n.checkbox(o);break}case"strong":{s+=n.strong(o);break}case"em":{s+=n.em(o);break}case"codespan":{s+=n.codespan(o);break}case"br":{s+=n.br(o);break}case"del":{s+=n.del(o);break}case"text":{s+=n.text(o);break}default:{let i='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(i),"";throw new Error(i)}}}return s}},_e=class{options;block;constructor(t){this.options=t||ke}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}emStrongMask(t){return t}provideLexer(t=this.block){return t?G.lex:G.lexInline}provideParser(t=this.block){return t?X.parse:X.parseInline}};function ce(t,e){if(Array.isArray(e))for(let n=0;n<e.length;n++)t.push(e[n]);else t.push(e)}var It=class{defaults=Tt();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=X;Renderer=it;TextRenderer=jt;Lexer=G;Tokenizer=ve;Hooks=_e;constructor(...t){this.use(...t)}walkTokens(t,e){let n=[];for(let s of t)switch(ce(n,e.call(this,s)),s.type){case"table":{let r=s;for(let a of r.header)ce(n,this.walkTokens(a.tokens,e));for(let a of r.rows)for(let o of a)ce(n,this.walkTokens(o.tokens,e));break}case"list":{let r=s;ce(n,this.walkTokens(r.items,e));break}default:{let r=s;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(a=>{let o=r[a].flat(1/0);ce(n,this.walkTokens(o,e))}):r.tokens&&ce(n,this.walkTokens(r.tokens,e))}}return n}use(...t){let e=this.defaults.extensions||{renderers:Object.create(null),childTokens:Object.create(null)};return t.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let a=e.renderers[r.name];a?e.renderers[r.name]=function(...o){let i=r.renderer.apply(this,o);return i===!1&&(i=a.apply(this,o)),i}:e.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let a=e[r.level];a?a.unshift(r.tokenizer):e[r.level]=[r.tokenizer],r.start&&(r.level==="block"?e.startBlock?e.startBlock.push(r.start):e.startBlock=[r.start]:r.level==="inline"&&(e.startInline?e.startInline.push(r.start):e.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(e.childTokens[r.name]=r.childTokens)}),s.extensions=e),n.renderer){let r=this.defaults.renderer||new it(this.defaults);for(let a in n.renderer){if(!(a in r))throw new Error(`renderer '${a}' does not exist`);if(["options","parser"].includes(a))continue;let o=a,i=n.renderer[o],l=r[o];r[o]=(...c)=>{let d=i.apply(r,c);return d===!1&&(d=l.apply(r,c)),d===!1?"":d??""}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new ve(this.defaults);for(let a in n.tokenizer){if(!(a in r))throw new Error(`tokenizer '${a}' does not exist`);if(["options","rules","lexer"].includes(a))continue;let o=a,i=n.tokenizer[o],l=r[o];r[o]=(...c)=>{let d=i.apply(r,c);return d===!1&&(d=l.apply(r,c)),d}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new _e;for(let a in n.hooks){if(!(a in r))throw new Error(`hook '${a}' does not exist`);if(["options","block"].includes(a))continue;let o=a,i=n.hooks[o],l=r[o];_e.passThroughHooks.has(a)?r[o]=c=>{if(r.options.async&&_e.passThroughHooksRespectAsync.has(a))return(async()=>{let p=await i.call(r,c);return l.call(r,p)})();let d=i.call(r,c);return l.call(r,d)}:r[o]=(...c)=>{if(r.options.async)return(async()=>{let p=await i.apply(r,c);return p===!1&&(p=await l.apply(r,c)),p})();let d=i.apply(r,c);return d===!1&&(d=l.apply(r,c)),d}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,a=n.walkTokens;s.walkTokens=function(o){let i=[];return ce(i,a.call(this,o)),r&&ce(i,r.call(this,o)),i}}this.defaults={...this.defaults,...s}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return G.lex(t,e??this.defaults)}parser(t,e){return X.parse(t,e??this.defaults)}parseMarkdown(t){return(e,n)=>{let s={...n},r={...this.defaults,...s},a=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&s.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=t),r.async)return(async()=>{let o=r.hooks?await r.hooks.preprocess(e):e,i=await(r.hooks?await r.hooks.provideLexer(t):t?G.lex:G.lexInline)(o,r),l=r.hooks?await r.hooks.processAllTokens(i):i;r.walkTokens&&await Promise.all(this.walkTokens(l,r.walkTokens));let c=await(r.hooks?await r.hooks.provideParser(t):t?X.parse:X.parseInline)(l,r);return r.hooks?await r.hooks.postprocess(c):c})().catch(a);try{r.hooks&&(e=r.hooks.preprocess(e));let o=(r.hooks?r.hooks.provideLexer(t):t?G.lex:G.lexInline)(e,r);r.hooks&&(o=r.hooks.processAllTokens(o)),r.walkTokens&&this.walkTokens(o,r.walkTokens);let i=(r.hooks?r.hooks.provideParser(t):t?X.parse:X.parseInline)(o,r);return r.hooks&&(i=r.hooks.postprocess(i)),i}catch(o){return a(o)}}}onError(t,e){return n=>{if(n.message+=`
|
|
72
|
+
Please report this to https://github.com/markedjs/marked.`,t){let s="<p>An error occurred:</p><pre>"+B(n.message+"",!0)+"</pre>";return e?Promise.resolve(s):s}if(e)return Promise.reject(n);throw n}}},ge=new It;function A(t,e){return ge.parse(t,e)}A.options=A.setOptions=function(t){return ge.setOptions(t),A.defaults=ge.defaults,qn(A.defaults),A};A.getDefaults=Tt;A.defaults=ke;function Dr(...t){return ge.use(...t),A.defaults=ge.defaults,qn(A.defaults),A}A.use=Dr;A.walkTokens=function(t,e){return ge.walkTokens(t,e)};A.parseInline=ge.parseInline;A.Parser=X;A.parser=X.parse;A.Renderer=it;A.TextRenderer=jt;A.Lexer=G;A.lexer=G.lex;A.Tokenizer=ve;A.Hooks=_e;A.parse=A;var So=A.options,To=A.setOptions,Lo=A.walkTokens,Mo=A.parseInline;var Ao=X.parse,Co=G.lex;function Fr(t,e){let n={type:"footnotes",raw:e,rawItems:[],items:[]};return{name:"footnote",level:"block",childTokens:["content"],tokenizer(s){t.hasFootnotes||(this.lexer.tokens.push(n),t.tokens=this.lexer.tokens,t.hasFootnotes=!0,n.rawItems=[],n.items=[]);let r=/^\[\^([^\]\n]+)\]:(?:[ \t]+|[\n]*?|$)([^\n]*?(?:\n|$)(?:\n*?[ ]{4,}[^\n]*)*)/.exec(s);if(r){let[a,o,i=""]=r,l=i.split(`
|
|
73
|
+
`).reduce((p,u)=>p+`
|
|
74
|
+
`+u.replace(/^(?:[ ]{4}|[\t])/,""),""),c=l.trimEnd().split(`
|
|
75
|
+
`).pop();l+=c&&/^[ \t]*?[>\-*][ ]|[`]{3,}$|^[ \t]*?[|].+[|]$/.test(c)?`
|
|
76
|
+
|
|
77
|
+
`:"";let d={type:"footnote",raw:a,label:o,refs:[],content:this.lexer.blockTokens(l)};return n.rawItems.push(d),d}},renderer(){return""}}}function Ur(t){return t.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function Wr(t,e=!1,n=!1){let s=0;return{name:"footnoteRef",level:"inline",tokenizer(r){let a=/^\[\^([^\]\n]+)\]/.exec(r);if(a){let[o,i]=a,l=this.lexer.tokens[0],c=l.rawItems.filter(f=>f.label===i);if(!c.length)return;let d=c[0],p=l.items.filter(f=>f.label===i)[0],u={type:"footnoteRef",raw:o,index:d.refs.length,id:"",label:i};return p?(u.id=p.refs[0].id,p.refs.push(u)):(s++,u.id=String(s),d.refs.push(u),l.items.push(d)),u}},renderer({index:r,id:a,label:o}){s=0;let i=encodeURIComponent(o),l=n?Ur(o):a,c=r>0?`-${r+1}`:"";return`<sup><a id="${t}ref-${i}${c}" href="#${t+i}" data-${t}ref aria-describedby="${t}label">${e?`[${l}]`:l}</a></sup>`}}}function Zr(t,e,n,s,r,a){return{name:"footnotes",renderer({raw:o,items:i=[]}){if(i.length===0)return"";let l=i.reduce((u,{label:f,content:g,refs:m})=>{let w=encodeURIComponent(f),v=this.parser.parse(g).trimEnd(),y=v.endsWith("</p>"),k=`<li id="${t+w}">
|
|
78
|
+
`;return k+=y?v.replace(/<\/p>$/,""):v,m.forEach((S,C)=>{let q=a.replace("{0}",f),j,N;if(C>0){let E=C+1;j=`\u21A9<sup>${E}</sup>`,N=`-${E}`}else j="\u21A9",N="";k+=` <a href="#${t}ref-${w}${N}" data-${t}backref aria-label="${q}">${j}</a>`}),k+=y?`</p>
|
|
79
|
+
`:`
|
|
80
|
+
`,k+=`</li>
|
|
81
|
+
`,u+k},""),c="";n&&(c+=`<hr data-${e}footnotes>
|
|
82
|
+
`);let d="";s&&(d=` class="${s}"`);let p="";return r&&(p=` class="${r}"`),c+=`<section${d} data-${e}footnotes>
|
|
83
|
+
`,c+=`<h2 id="${t}label"${p}>${o.trimEnd()}</h2>
|
|
84
|
+
`,c+=`<ol>
|
|
85
|
+
${l}</ol>
|
|
86
|
+
`,c+=`</section>
|
|
87
|
+
`,c}}}function Nn(t={}){let{prefixId:e="footnote-",prefixData:n="",description:s="Footnotes",refMarkers:r=!1,footnoteDivider:a=!1,keepLabels:o=!1,sectionClass:i="footnotes",headingClass:l="sr-only",backRefLabel:c="Back to reference {0}"}=t,d={hasFootnotes:!1,tokens:[]};return{extensions:[Fr(d,s),Wr(e,r,o),Zr(e,n,a,i,l,c)],walkTokens(p){p.type==="footnotes"&&d.tokens.indexOf(p)===0&&p.items.length&&(d.tokens[0]={type:"space",raw:""},d.tokens.push(p)),d.hasFootnotes&&(d.hasFootnotes=!1)}}}var Kr="abstract any as async await boolean break case catch class const constructor continue debugger declare default delete do else enum export extends false finally for from function get if implements import in infer instanceof interface is keyof let module namespace never new null number object of package private protected public readonly require return satisfies set static string super switch symbol this throw true try type typeof undefined unique unknown var void while with yield",Vr="auto bool break case char class const constexpr continue default delete do double else enum explicit extern false float for friend goto if inline int long namespace new nullptr operator private protected public register return short signed sizeof static struct switch template this throw true try typedef typename union unsigned using virtual void volatile while include define ifdef ifndef endif pragma",Gr="abstract as base bool boolean break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extends extern false final finally fixed float for foreach goto if implicit implements import in int interface internal is lock long namespace new null object operator out override package params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct super switch synchronized this throw throws true try typeof uint ulong unchecked unsafe ushort using var virtual void volatile while async await get set record yield",Xr="break case chan const continue default defer else fallthrough for func go goto if import interface map package range return select struct switch type var nil true false iota string int bool error byte rune float64 int64 uint",Qr="as async await break const continue crate dyn else enum extern false fn for if impl in let loop match mod move mut pub ref return self Self static struct super trait true type unsafe use where while i32 i64 u8 u32 u64 usize f32 f64 bool str String Vec Option Some None Result Ok Err",Jr="and as assert async await break class continue def del elif else except False finally for from global if import in is lambda None nonlocal not or pass raise return True try while with yield self print match case",Yr="if then else elif fi for while until do done case esac in function return local export source alias echo exit set unset readonly shift trap cd test true false",ea="alias and begin break case class def defined do else elsif end ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield require attr_accessor",ta="select from where and or not insert into values update set delete create table index view drop alter add primary key foreign references join left right inner outer on group by order asc desc limit offset having as distinct union all null is in like between case when then else end exists default unique check constraint begin commit rollback with returning integer text varchar boolean",na="and break do else elseif end false for function goto if in local nil not or repeat return then true until while",sa="begin break catch class continue data do dynamicparam else elseif end exit filter finally for foreach from function if in param process return switch throw trap try until using while",ra="important media import supports keyframes font-face from to and not only screen print",P=t=>new Set(t.split(" ")),Bn={js:{line:"//",block:["/*","*/"],quotes:['"',"'","`"],kw:P(Kr),regex:!0},c:{line:"//",block:["/*","*/"],quotes:['"',"'"],kw:P(Vr),pre:!0},cs:{line:"//",block:["/*","*/"],quotes:['"',"'"],kw:P(Gr),at:!0},go:{line:"//",block:["/*","*/"],quotes:['"',"'","`"],kw:P(Xr)},rs:{line:"//",block:["/*","*/"],quotes:['"'],kw:P(Qr)},py:{line:"#",quotes:['"""',"'''",'"',"'"],kw:P(Jr),at:!0},sh:{line:"#",quotes:['"',"'"],kw:P(Yr),vars:!0},rb:{line:"#",quotes:['"',"'"],kw:P(ea)},yaml:{line:"#",quotes:['"',"'"],kw:P("true false null yes no on off"),keys:!0},toml:{line:"#",quotes:['"""','"',"'"],kw:P("true false"),keys:!0},ini:{line:";",alt:"#",quotes:['"'],kw:P("true false"),keys:!0},sql:{line:"--",block:["/*","*/"],quotes:["'",'"'],kw:P(ta),nocase:!0},lua:{line:"--",quotes:['"',"'"],kw:P(na)},ps:{line:"#",block:["<#","#>"],quotes:['"',"'"],kw:P(sa),vars:!0,nocase:!0},css:{block:["/*","*/"],quotes:['"',"'"],kw:P(ra),css:!0},json:{line:"//",block:["/*","*/"],quotes:['"'],kw:P("true false null")},md:{md:!0},html:{html:!0}},aa={js:"js",mjs:"js",cjs:"js",jsx:"js",ts:"js",mts:"js",cts:"js",tsx:"js",vue:"html",svelte:"html",astro:"html",c:"c",h:"c",cpp:"c",cc:"c",hpp:"c",cxx:"c",m:"c",glsl:"c",frag:"c",vert:"c",wgsl:"rs",hlsl:"c",shader:"c",cs:"cs",java:"cs",kt:"cs",kts:"cs",scala:"cs",swift:"cs",dart:"cs",groovy:"cs",gradle:"cs",php:"cs",go:"go",rs:"rs",zig:"rs",py:"py",pyi:"py",ipy:"py",r:"py",jl:"py",nim:"py",sh:"sh",bash:"sh",zsh:"sh",fish:"sh",env:"sh",dockerfile:"sh",makefile:"sh",mk:"sh",cmake:"sh",gitignore:"sh",npmrc:"ini",editorconfig:"ini",rb:"rb",rake:"rb",gemspec:"rb",pl:"rb",ex:"rb",exs:"rb",cr:"rb",yml:"yaml",yaml:"yaml",toml:"toml",ini:"ini",cfg:"ini",conf:"ini",properties:"ini",sql:"sql",lua:"lua",ps1:"ps",psm1:"ps",psd1:"ps",css:"css",scss:"css",sass:"css",less:"css",styl:"css",json:"json",jsonc:"json",json5:"json",webmanifest:"json",map:"json",lock:"json",har:"json",ipynb:"json",geojson:"json",gltf:"json",md:"md",markdown:"md",mdx:"md",html:"html",htm:"html",xml:"html",svg:"html",xhtml:"html",plist:"html",csproj:"html",xaml:"html"};function oa(t){let e=t.toLowerCase();if(e==="dockerfile"||e==="makefile"||e.startsWith(".env")||e===".gitignore"||e===".gitattributes"||e===".dockerignore")return"sh";let n=e.includes(".")?e.slice(e.lastIndexOf(".")+1):"";return aa[n]||""}var re=t=>t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),zt=new Map;function ia(t){if(zt.has(t))return zt.get(t);let e=Bn[t],n=[];e.block&&n.push(`${re(e.block[0])}[\\s\\S]*?(?:${re(e.block[1])}|$)`),e.line&&n.push(`${re(e.line)}[^\\n]*`),e.alt&&n.push(`${re(e.alt)}[^\\n]*`);let s=(e.quotes||[]).map(o=>o.length===3?`${re(o)}[\\s\\S]*?(?:${re(o)}|$)`:o==="`"?"`(?:\\\\[\\s\\S]|[^`\\\\])*`?":`${re(o)}(?:\\\\.|[^${re(o)}\\\\\\n])*${re(o)}?`),r=[];n.length&&r.push(`(?<com>${n.join("|")})`),s.length&&r.push(`(?<str>${s.join("|")})`),e.vars&&r.push("(?<var>\\$\\{?[\\w@#?*!-]+\\}?)"),(e.at||t==="js")&&r.push("(?<at>@[\\w.]+)"),e.css?r.push("(?<at>@[\\w-]+)|(?<num>#[\\da-fA-F]{3,8}\\b|-?\\d*\\.?\\d+(?:px|em|rem|vh|vw|%|s|ms|deg|fr|ch)?\\b)|(?<key>[\\w-]+(?=\\s*:[^:]))|(?<word>[\\w-]+)"):(r.push("(?<num>\\b(?:0[xX][\\da-fA-F_]+|0[bB][01_]+|\\d[\\d_]*(?:\\.[\\d_]+)?(?:[eE][+-]?\\d+)?)[nlLfFuU]*\\b)"),e.pre&&r.push("(?<pre>^\\s*#\\s*\\w+)"),r.push("(?<word>[A-Za-z_$][\\w$]*)"));let a=new RegExp(r.join("|"),"gm");return zt.set(t,a),a}function Dn(t,e){let n=oa(e);if(!n)return pa(t);if(n==="md")return ha(t);if(n==="html")return ua(t);let s=Bn[n],r=ia(n),a=[],o=0;r.lastIndex=0;let i;for(;i=r.exec(t);){if(i[0]===""){r.lastIndex++;continue}i.index>o&&a.push(["",t.slice(o,i.index)]);let l=i.groups,c="";if(l.com)c="com";else if(l.str)c=/^\s*:/.test(t.slice(r.lastIndex,r.lastIndex+3))&&!s.css?"key":"str";else if(l.num)c="num";else if(l.at)c="at";else if(l.var)c="var";else if(l.pre)c="kw";else if(l.key)c="key";else if(l.word){let d=l.word,p=t.slice(r.lastIndex,r.lastIndex+2);da.has(d)?c="lit":s.kw.has(s.nocase?d.toLowerCase():d)?c="kw":s.keys&&/^\s*[:=]/.test(p)&&la(t,i.index)?c="key":s.css?c="":p[0]==="("?c="fn":/^[A-Z][a-z0-9]/.test(d)&&n!=="sql"?c="type":/^[A-Z][A-Z0-9_]+$/.test(d)&&d.length>1&&(c="const")}a.push([c,i[0]]),o=r.lastIndex}return o<t.length&&a.push(["",t.slice(o)]),Fn(a)}function la(t,e){let n=t.lastIndexOf(`
|
|
88
|
+
`,e-1)+1;return/^[\s-]*$/.test(t.slice(n,e))}var ca={com:"comment",str:"string",num:"number",const:"number",kw:"keyword",lit:"literal",pre:"keyword"},da=new Set(["true","false","null","undefined","None","True","False","nil","NaN","Infinity"]);function Fn(t){let e=[""];for(let[n,s]of t){let r=ca[n]||"";s.split(`
|
|
89
|
+
`).forEach((o,i)=>{i>0&&e.push(""),o&&(e[e.length-1]+=r?`<span class="tok-${r}">${h(o)}</span>`:h(o))})}return e.map(n=>n.replace(/\r/g,""))}var pa=t=>t.replace(/\r/g,"").split(`
|
|
90
|
+
`).map(h);function ha(t){let e=!1;return t.replace(/\r/g,"").split(`
|
|
91
|
+
`).map(n=>/^\s*(```|~~~)/.test(n)?(e=!e,`<span class="tok-comment">${h(n)}</span>`):e?`<span class="tok-string">${h(n)}</span>`:/^#{1,6} /.test(n)?`<span class="tok-keyword">${h(n)}</span>`:/^\s*>/.test(n)?`<span class="tok-comment">${h(n)}</span>`:h(n).replace(/^(\s*)([-*+]|\d+\.)(\s)/,'$1<span class="tok-number">$2</span>$3').replace(/`[^`]+`/g,s=>`<span class="tok-string">${s}</span>`).replace(/\[[^\]]*\]\([^)]*\)/g,s=>`<span class="tok-keyword">${s}</span>`))}function ua(t){let e=/(?<com><!--[\s\S]*?(?:-->|$))|(?<tag><\/?[A-Za-z][\w:.-]*|\/?>)|(?<attr>[\w:@.#-]+(?=\s*=))|(?<str>"[^"]*"?|'[^']*'?)|(?<ent>&[#\w]+;)/g,n=[],s=0,r=!1,a;for(;a=e.exec(t);){a.index>s&&n.push(["",t.slice(s,a.index)]);let o=a.groups,i="";o.com?i="com":o.tag?(i="kw",r=!o.tag.endsWith(">")):o.attr?i=r?"key":"":o.str?i=r?"str":"":o.ent&&(i="num"),n.push([i,a[0]]),s=e.lastIndex}return s<t.length&&n.push(["",t.slice(s)]),Fn(n)}var Vn={name:"folderview-scopes",type:"light",fg:"#000000",bg:"#ffffff",settings:[]},fa=[["comment","comment"],["punctuation.definition.comment","comment"],["string","string"],["punctuation.definition.string","string"],["constant.numeric","number"],["constant.language","literal"],["support.constant","literal"],["constant.character","literal"],["keyword.operator","plain"],["keyword","keyword"],["storage","keyword"],["markup.heading","keyword"],["markup.inline.raw","string"],["markup.fenced_code","string"],["entity.name.tag","keyword"]];function ma(t){for(let e=t.length-1;e>=0;e--){let n=t[e],s=fa.find(([r])=>n===r||n.startsWith(r+"."));if(s)return s[1]}return"plain"}var Un={dockerfile:"docker",makefile:"make","cmakelists.txt":"cmake",".gitignore":"shellscript",".dockerignore":"shellscript",".npmrc":"ini",".editorconfig":"ini",".prettierrc":"json",".eslintrc":"json","tsconfig.json":"jsonc","jsconfig.json":"jsonc",".babelrc":"json",gemfile:"ruby",rakefile:"ruby",jenkinsfile:"groovy",caddyfile:"shellscript"},Wn={h:"c",hpp:"cpp",cc:"cpp",cxx:"cpp",cs:"csharp",kt:"kotlin",kts:"kotlin",rs:"rust",py:"python",pyi:"python",rb:"ruby",sh:"shellscript",bash:"shellscript",zsh:"shellscript",env:"dotenv",ps1:"powershell",psm1:"powershell",psd1:"powershell",yml:"yaml",md:"markdown",mdx:"mdx",htm:"html",xhtml:"html",svg:"xml",plist:"xml",csproj:"xml",xaml:"xml",ipynb:"json",gltf:"json",webmanifest:"json",geojson:"json",map:"json",har:"json",jl:"julia",ex:"elixir",exs:"elixir",erl:"erlang",hs:"haskell",ml:"ocaml",fs:"fsharp",clj:"clojure",tf:"terraform",hcl:"hcl",vert:"glsl",frag:"glsl",wgsl:"wgsl",mjs:"javascript",cjs:"javascript",mts:"typescript",cts:"typescript",conf:"ini",cfg:"ini",properties:"properties",mmd:"mermaid",mermaid:"mermaid",gradle:"groovy",txt:"",log:"log",lock:""};function Le(t){let e=t.toLowerCase().slice(t.lastIndexOf("/")+1);if(Un[e])return Un[e];if(e.startsWith(".env"))return"dotenv";if(e.startsWith("dockerfile"))return"docker";let n=e.includes(".")?e.slice(e.lastIndexOf(".")+1):"";return n in Wn?Wn[n]:n}var Zn,ga,_t,Ot=new Set,Ht=new Map,ka=()=>ga??=import("./chunks/langs-GO3UQR4H.js").then(({bundledLanguages:t,bundledLanguagesAlias:e})=>new Map([...Object.entries(e),...Object.entries(t)]));async function ba(t){let e=(await ka()).get(t);if(!e)return!1;Zn??=Promise.all([import("./chunks/core-BRBMZSD2.js"),import("./chunks/engine-javascript-DNHSF67B.js")]).then(([{createHighlighterCore:s},{createJavaScriptRegexEngine:r}])=>s({themes:[Vn],langs:[],engine:r({forgiving:!0})}));let n=await Zn;return await n.loadLanguage(e),_t=n,Ot.add(t),!0}function Be(t){let e=Le(t);return e?Ot.has(e)?Promise.resolve(!0):(Ht.has(e)||Ht.set(e,ba(e).catch(()=>!1)),Ht.get(e)):Promise.resolve(!1)}var wa=4e5,Kn=8e3;function Me(t,e){let n=Le(e);if(n&&Ot.has(n)&&t.length<wa){let s=$a(t,n);if(s)return s}return Dn(t,e)}function $a(t,e){if(_t&&!(t.split(`
|
|
92
|
+
`,Kn+1).length>Kn))try{return _t.codeToTokensBase(t.replace(/\r\n?/g,`
|
|
93
|
+
`),{lang:e,theme:Vn.name,includeExplanation:"scopeName"}).map(s=>{let r="",a="plain",o="",i=()=>{o&&(r+=a==="plain"?h(o):`<span class="tok-${a}">${h(o)}</span>`,o="")};for(let l of s){let c=l.explanation??[{content:l.content,scopes:[]}];for(let d of c){let p=ma(d.scopes.map(u=>u.scopeName));p!==a&&(i(),a=p),o+=d.content}}return i(),r})}catch{return}}var xa=/<svg\b[^>]*>/,ya=/viewBox="\s*[-\d.]+[\s,]+[-\d.]+[\s,]+([\d.]+)[\s,]+([\d.]+)\s*"/,va=/\s(?:width|height)="[^"]*"/g;function Sa(t){let e=xa.exec(t)?.[0],n=e&&ya.exec(e);return!e||!n?t:t.replace(e,e.replace(va,"").replace(/^<svg/,`<svg width="${n[1]}" height="${n[2]}"`))}function Ta(t,e,n){e.style.color=`var(${n})`,t.clearRect(0,0,1,1),t.fillStyle=getComputedStyle(e).color,t.fillRect(0,0,1,1);let[s,r,a,o]=t.getImageData(0,0,1,1).data;return o===0?void 0:"#"+[s,r,a].map(i=>i.toString(16).padStart(2,"0")).join("")}function La(){let t=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});if(!t)return;let e=document.createElement("span");document.body.append(e);try{let[n,s,r,a,o,i]=["--bg","--surface-2","--border-strong","--text","--text-dim","--accent"].map(c=>Ta(t,e,c)),l=getComputedStyle(document.documentElement).getPropertyValue("--font").trim();return!n||!s||!r||!a||!o||!i?void 0:{font:l,background:n,surface:s,border:r,text:a,muted:o,accent:i}}finally{e.remove()}}function Ma(t,e){return{theme:"base",fontFamily:t.font,themeVariables:{darkMode:e,fontFamily:t.font,fontSize:"14px",background:t.background,primaryColor:t.surface,primaryBorderColor:t.border,primaryTextColor:t.text,secondaryColor:t.surface,secondaryBorderColor:t.border,secondaryTextColor:t.text,tertiaryColor:t.background,tertiaryBorderColor:t.border,tertiaryTextColor:t.text,mainBkg:t.surface,nodeBorder:t.border,nodeTextColor:t.text,lineColor:t.muted,textColor:t.text,clusterBkg:t.background,clusterBorder:t.border,edgeLabelBackground:t.background,titleColor:t.text,noteBkgColor:t.surface,noteBorderColor:t.accent,noteTextColor:t.text,actorBorder:t.border,actorBkg:t.surface}}}var Gn,Xn=Promise.resolve(),Qn=0,Aa=()=>matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.dataset.theme!=="light":document.documentElement.dataset.theme==="dark";function Ca(t){let e=Xn.then(async()=>{Gn??=import("./chunks/mermaid.core-SQMPMUDN.js").then(a=>a.default);let n=await Gn,s=La(),r=Aa();n.initialize({startOnLoad:!1,securityLevel:"strict",...s?Ma(s,r):{theme:r?"dark":"default"}});try{let{svg:a}=await n.render(`folderview-diagram-${++Qn}`,t);return{ok:!0,svg:Sa(a)}}catch(a){return document.getElementById(`dfolderview-diagram-${Qn}`)?.remove(),{ok:!1,problem:a instanceof Error?a.message:String(a)}}});return Xn=e.catch(()=>{}),e}async function lt(t,e){t.innerHTML='<div class="skeleton" style="width:60%;height:120px"></div>';let n=await Ca(e);if(!n.ok){t.innerHTML=`<p class="problem">This diagram couldn't be drawn: ${qa(n.problem)}</p>`;return}let s=URL.createObjectURL(new Blob([n.svg],{type:"image/svg+xml"})),r=document.createElement("img");r.src=s,r.alt="Diagram",r.onclick=()=>window.open(s,"_blank","noopener"),r.onload=()=>{let a=t.clientWidth-26,o=r.naturalWidth;o>a&&(r.style.width=(o<=a*1.8?a:Math.round(o*.6))+"px")},t.replaceChildren(r)}var qa=t=>String(t).replace(/[&<>]/g,e=>({"&":"&","<":"<",">":">"})[e]);var Jn={pen:'<path d="M12 20h9"/><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z"/><path d="m15 5 3 3"/>',"arrow-left":'<path d="M19 12H5M12 19l-7-7 7-7"/>',"arrow-right":'<path d="M5 12h14M12 5l7 7-7 7"/>',"arrow-up":'<path d="M12 19V5M5 12l7-7 7 7"/>',"arrow-down":'<path d="M12 5v14M19 12l-7 7-7-7"/>',menu:'<path d="M4 6h16M4 12h16M4 18h16"/>',x:'<path d="M18 6 6 18M6 6l12 12"/>',"chevron-left":'<path d="m15 18-6-6 6-6"/>',"chevron-right":'<path d="m9 18 6-6-6-6"/>',"chevron-down":'<path d="m6 9 6 6 6-6"/>',check:'<path d="M20 6 9 17l-5-5"/>',plus:'<path d="M12 5v14M5 12h14"/>',search:'<circle cx="11" cy="11" r="7"/><path d="m20 20-3.6-3.6"/>',settings:'<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/>',chat:'<path d="M21 12a8 8 0 0 1-11.6 7.14L4 20.5l1.36-4.9A8 8 0 1 1 21 12z"/>',sun:'<circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41"/>',moon:'<path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9z"/>',monitor:'<rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/>',copy:'<rect x="8" y="8" width="14" height="14" rx="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/>',external:'<path d="M15 3h6v6M10 14 21 3M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/>',wrap:'<path d="M3 6h18M3 12h15a3 3 0 1 1 0 6h-4"/><path d="m16 16-2 2 2 2M3 18h7"/>',refresh:'<path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/>',clock:'<circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/>',trash:'<path d="M3 6h18M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/>',edit:'<path d="M12 20h9"/><path d="M16.38 3.62a1 1 0 0 1 3 3L7.37 18.64a2 2 0 0 1-.86.5l-2.87.84a.5.5 0 0 1-.62-.62l.84-2.87a2 2 0 0 1 .5-.86z"/>',link:'<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/>',file:'<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/>',image:'<rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.09-3.09a2 2 0 0 0-2.82 0L6 21"/>',grid:'<rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/>',list:'<path d="M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01"/>',folder:'<path d="M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2z"/>',table:'<rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18M3 15h18M9 3v18"/>',code:'<path d="m16 18 6-6-6-6M8 6l-6 6 6 6"/>',download:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3"/>',eye:'<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/>',filter:'<path d="M22 3H2l8 9.46V19l4 2v-8.54z"/>',sort:'<path d="m3 16 4 4 4-4M7 20V4M21 8l-4-4-4 4M17 4v16"/>',book:'<path d="M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/>',hash:'<path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/>',braces:'<path d="M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"/>',undo:'<path d="M9 14 4 9l5-5"/><path d="M4 9h10.5a5.5 5.5 0 0 1 0 11H11"/>',reply:'<path d="m9 17-5-5 5-5"/><path d="M20 18v-2a4 4 0 0 0-4-4H4"/>',music:'<path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="16" r="3"/>',video:'<rect x="2" y="6" width="14" height="12" rx="2"/><path d="m22 8-6 4 6 4z"/>',warning:'<path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4M12 17h.01"/>',info:'<circle cx="12" cy="12" r="10"/><path d="M12 16v-4M12 8h.01"/>',more:'<circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/>',layers:'<path d="m12 2 10 5-10 5L2 7z"/><path d="m2 17 10 5 10-5M2 12l10 5 10-5"/>',tree:'<path d="M6 3v12"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/>',"git-branch":'<circle cx="6" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="8" r="3"/><path d="M6 9v6M18 11a6 6 0 0 1-6 6H9"/>',diff:'<path d="M12 3v14M5 10h14M5 21h14"/>',"folder-open":'<path d="m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2"/>'},x=(t,e=18)=>`<svg class="i" width="${e}" height="${e}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${Jn[t]||Jn.file}</svg>`;function Pt(t,e,n=e||"text"){let s="x."+(e||"txt"),r=Me(t.replace(/\n$/,""),s);return`<figure class="ui-code${b.settings.wrap?" wrapped":""}" data-lang="${h(e)}"><figcaption class="cbar"><span class="caption">${h(n)}</span><span class="ctools"><button class="icon-btn${b.settings.wrap?" on":""}" data-cb="wrap" title="Wrap long lines" aria-label="Wrap long lines">${x("wrap",16)}</button><button class="icon-btn" data-cb="copy" title="Copy code" aria-label="Copy code">${x("copy",16)}</button></span></figcaption><pre class="code" tabindex="0"><code>${r.join(`
|
|
94
|
+
`)}</code></pre><textarea hidden>${h(t)}</textarea></figure>`}var Yn={name:"mathBlock",level:"block",start:t=>t.match(/^\$\$/m)?.index,tokenizer(t){let e=/^\$\$[ \t]*\n?([\s\S]+?)\n?[ \t]*\$\$[ \t]*(?:\n+|$)/.exec(t);if(e)return{type:"mathBlock",raw:e[0],text:e[1].trim()}},renderer:t=>`<div class="md-math-wrap"><div class="md-math md-math-block" data-tex="${encodeURIComponent(t.text)}">${h(t.text)}</div></div>
|
|
95
|
+
`},Ra={name:"mathInline",level:"inline",start:t=>t.indexOf("$"),tokenizer(t){let e=new RegExp("^\\$(?![\\s$])((?:\\\\.|[^\\\\$\\n])+?)(?<![\\s\\\\])\\$(?![\\d$])").exec(t);if(e)return{type:"mathInline",raw:e[0],text:e[1]}},renderer:t=>`<span class="md-math" data-tex="${encodeURIComponent(t.text)}">${h(t.text)}</span>`},es=()=>{let t=new Map;return e=>{let n=e.toLowerCase().replace(/<[^>]+>/g,"").replace(/[^\p{L}\p{N}\s-]/gu,"").trim().replace(/\s+/g,"-")||"section",s=t.get(n)||0;return t.set(n,s+1),s?`${n}-${s}`:n}};function Ea(){let t=es(),e=new It({gfm:!0});return e.use(Nn({description:"Footnotes"})),e.use({extensions:[Yn,Ra],hooks:{preprocess(n){return t=es(),n}},renderer:{code({text:n,lang:s}){let r=(s||"").trim().split(/\s+/)[0].toLowerCase();return r==="mermaid"?`<div class="md-diagram" data-diagram="${encodeURIComponent(n)}"></div>`:r==="math"||r==="latex"||r==="tex"?Yn.renderer({text:n}):Pt(n,r)},heading({tokens:n,depth:s}){let r=this.parser.parseInline(n),a=t(r);return`<h${s} id="${a}">${r}<a class="anchor" href="#" data-anchor="${a}" aria-label="Link to this section">#</a></h${s}>
|
|
96
|
+
`}}}),e}var ja=Ea();function Ia(t){let e=/^---\r?\n([\s\S]*?)\r?\n---\r?\n/.exec(t);if(!e)return{body:t,front:""};let n=e[1].split(/\r?\n/).map(s=>/^([\w.-]+):\s*(.*)$/.exec(s)).filter(Boolean).map(([,s,r])=>`<tr><td>${h(s)}</td><td>${h(r)}</td></tr>`).join("");return{body:t.slice(e[0].length),front:n?`<div class="md-table front"><table>${n}</table></div>`:""}}var za={NOTE:["note","info"],TIP:["tip","sparkles"],IMPORTANT:["important","warning"],WARNING:["warning","warning"],CAUTION:["caution","warning"]};function Ae(t,e,n){let{body:s,front:r}=Ia(e),a=fn.sanitize(r+ja.parse(s),{ADD_ATTR:["target","data-anchor","data-diagram","data-tex","data-lang","data-cb"],FORBID_TAGS:["style","form"],FORBID_ATTR:["style"]});t.innerHTML=a,Ha(t,n)}function Ha(t,e){for(let s of t.querySelectorAll("table")){if(s.parentElement?.classList.contains("md-table"))continue;let r=document.createElement("div");r.className="md-table",s.replaceWith(r),r.append(s)}for(let s of t.querySelectorAll("a[href]")){if(s.dataset.anchor)continue;let r=s.getAttribute("href")||"";if(/^(https?:|mailto:|tel:)/i.test(r))s.target="_blank",s.rel="noopener noreferrer";else if(r.startsWith("#"))s.dataset.anchor=decodeURIComponent(r.slice(1)),s.setAttribute("href","#");else if(/^[a-z][a-z0-9+.-]*:/i.test(r))s.removeAttribute("href");else{let[a,o=""]=r.split("#"),i=$t(a.startsWith("/")?a:z(e,decodeURIComponent(a))),l=/^L(\d+)(?:-L?(\d+))?/.exec(o);a.endsWith("/")||!a?s.setAttribute("href",V({folder:i})):s.setAttribute("href",O(i,l?{line:l[2]?`${l[1]}-${l[2]}`:l[1]}:{}))}}for(let s of t.querySelectorAll("img[src]")){let r=s.getAttribute("src")||"";/^(https?:|data:image\/|blob:)/i.test(r)||(s.src=W($t(r.startsWith("/")?r:z(e,decodeURIComponent(r))))),s.loading="lazy"}for(let s of t.querySelectorAll("blockquote")){let r=s.querySelector("p"),a=r&&/^\s*\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]\s*/i.exec(r.innerHTML);if(!a)continue;let[o,i]=za[a[1].toUpperCase()];r.innerHTML=r.innerHTML.slice(a[0].length).replace(/^<br>\s*/,""),!r.textContent.trim()&&!r.querySelector("img")&&r.remove(),s.classList.add("alert",o),s.insertAdjacentHTML("afterbegin",`<div class="alert-title">${x(i,16)}${a[1][0].toUpperCase()+a[1].slice(1).toLowerCase()}</div>`)}for(let s of t.querySelectorAll("[data-diagram]"))lt(s,decodeURIComponent(s.dataset.diagram));let n=t.querySelectorAll("[data-tex]");n.length&&import("./chunks/temml-ISNSX3VV.js").then(({default:s})=>{for(let r of n)try{r.innerHTML=s.renderToString(decodeURIComponent(r.dataset.tex),{displayMode:r.classList.contains("md-math-block"),throwOnError:!1})}catch{}}),_a(t)}function _a(t){for(let e of t.querySelectorAll("figure.ui-code[data-lang]")){let n=e.dataset.lang;n&&Be("x."+n).then(s=>{if(!s||!e.isConnected)return;let r=e.querySelector("textarea")?.value??"";e.querySelector("code").innerHTML=Me(r.replace(/\n$/,""),"x."+n).join(`
|
|
97
|
+
`)})}}document.addEventListener("click",t=>{let e=t.target.closest("[data-cb]");if(e){let s=e.closest(".ui-code");if(e.dataset.cb==="wrap")s.classList.toggle("wrapped"),e.classList.toggle("on",s.classList.contains("wrapped"));else if(e.dataset.cb==="copy"){let r=s.querySelector("textarea")?.value??s.querySelector("code")?.textContent??"";K(r,"Code copied").then(()=>{e.innerHTML=x("check",16),e.classList.add("copied"),setTimeout(()=>{e.innerHTML=x("copy",16),e.classList.remove("copied")},1600)})}return}let n=t.target.closest("a[data-anchor]");if(n){t.preventDefault();let s=n.closest(".md")||document,r=n.dataset.anchor;(s.querySelector("#"+CSS.escape(r))||s.querySelector(`[id="user-content-${CSS.escape(r)}"]`)||document.getElementById(r))?.scrollIntoView({behavior:"smooth",block:"start"})}});function Nt(t,e){let n=document.createElement("div");return Ae(n,t,e),n.innerHTML}var Oa=t=>t.line?t.endLine?`L${t.line}\u2013${t.endLine}`:`L${t.line}`:t.strokes?.length?`Area ${Ce(t)}`:"File",Ce=t=>F(t.path).filter(e=>e.strokes?.length).findIndex(e=>e.id===t.id)+1;async function ct(){await ze(),ee("comments")}function De(t,e){let n=(t.replies||[]).map(a=>`<div class="reply"><div class="cmt-head"><b>${h(a.author)}</b><span class="faint">${Z(Date.parse(a.at))}</span></div><div class="cmt-body md">${Nt(a.body,e)}</div></div>`).join(""),s=t.status==="resolved",r=b.info.readOnly;return`<div class="cmt${s?" resolved":""}" data-cid="${h(t.id)}">
|
|
98
|
+
<div class="cmt-head"><b>${h(t.author||"reviewer")}</b><span class="faint">${Z(Date.parse(t.createdAt))}</span>${s?'<span class="pill ok">Resolved</span>':""}
|
|
99
|
+
${r?"":`<span class="cmt-acts"><button class="mini" data-cact="${s?"reopen":"resolve"}" title="${s?"Reopen":"Resolve"}">${s?x("undo",14)+" Reopen":x("check",14)+" Resolve"}</button><button class="mini" data-cact="edit" title="Edit" aria-label="Edit">${x("edit",14)}</button><button class="mini" data-cact="delete" title="Delete" aria-label="Delete">${x("trash",14)}</button></span>`}</div>
|
|
100
|
+
<div class="cmt-body md">${Nt(t.body,e)}</div>
|
|
101
|
+
${n}
|
|
102
|
+
${r?"":`<form class="reply-form" data-cid="${h(t.id)}"><textarea rows="1" placeholder="Reply\u2026"></textarea><button class="btn small" type="submit">Reply</button></form>`}
|
|
103
|
+
</div>`}function ae(t,e,n){let s=e?n&&n!==e?`lines ${e}\u2013${n}`:`line ${e}`:"this file";return`<form class="composer" data-path="${h(t)}" data-line="${e||""}" data-end="${n||""}">
|
|
104
|
+
<div class="composer-head">Comment on ${s} <span class="faint">as ${h(et())}</span></div>
|
|
105
|
+
<textarea rows="3" placeholder="What should change? Markdown works. Ctrl+Enter to save."></textarea>
|
|
106
|
+
<div class="composer-acts"><button class="btn primary" type="submit">Comment</button><button class="btn" type="button" data-cancel>Cancel</button></div>
|
|
107
|
+
</form>`}function Fe(t,e){return F(t).filter(s=>!s.line&&(b.settings.resolved||s.status==="open")).map(s=>`<div class="thread">${s.strokes?.length?`<div class="thread-where"><span class="pin static ${s.status}">${Ce(s)}</span> Marked area</div>`:""}${De(s,e)}</div>`).join("")}document.addEventListener("click",async t=>{let e=t.target.closest("[data-cact]");if(!e)return;let n=e.closest("[data-cid]"),s=n?.dataset.cid;if(!s)return;let r=e.dataset.cact;try{if(r==="resolve"||r==="reopen")await M("api/comments/"+s,{method:"PATCH",json:{status:r==="resolve"?"resolved":"open"}});else if(r==="delete"){if(!confirm("Delete this comment?"))return;await M("api/comments/"+s,{method:"DELETE"})}else if(r==="edit"){let a=b.comments.find(i=>i.id===s),o=n.querySelector(":scope > .cmt-body");o.outerHTML=`<form class="edit-form" data-cid="${h(s)}"><textarea rows="3">${h(a?.body||"")}</textarea><div class="composer-acts"><button class="btn primary" type="submit">Save</button><button class="btn" type="button" data-cancel-edit>Cancel</button></div></form>`,n.querySelector(".edit-form textarea").focus();return}await ct()}catch(a){le(a.message)}});document.addEventListener("click",t=>{t.target.closest("[data-cancel-edit]")&&ct();let e=t.target.closest("[data-cancel]");e&&(e.closest(".composer")?.remove(),ee("composer-closed"))});document.addEventListener("keydown",t=>{t.key==="Enter"&&(t.ctrlKey||t.metaKey)&&t.target.matches("form textarea")&&(t.preventDefault(),t.target.form.requestSubmit()),t.key==="Escape"&&t.target.matches(".composer textarea")&&(t.stopPropagation(),t.target.closest(".composer").remove(),ee("composer-closed"))});document.addEventListener("submit",async t=>{let e=t.target;if(!e.matches(".composer, .reply-form, .edit-form"))return;t.preventDefault();let n=e.querySelector("textarea").value.trim();if(!n)return;let s=e.querySelector("[type=submit]");s.disabled=!0;try{if(e.matches(".composer")){let r={path:e.dataset.path,body:n,author:et()};if(e.dataset.line&&(r.line=Number(e.dataset.line)),e.dataset.end&&(r.endLine=Number(e.dataset.end)),e.getMarks){let a=await e.getMarks();if(!a){s.disabled=!1;return}Object.assign(r,a)}await M("api/comments",{method:"POST",json:r}),e.remove(),ee("composer-closed")}else e.matches(".reply-form")?await M(`api/comments/${e.dataset.cid}/replies`,{method:"POST",json:{body:n,author:et()}}):await M("api/comments/"+e.dataset.cid,{method:"PATCH",json:{body:n}});await ct()}catch(r){s.disabled=!1,le(r.message)}});document.addEventListener("input",t=>{t.target.matches(".reply-form textarea, .composer textarea, .edit-form textarea")&&(t.target.style.height="auto",t.target.style.height=Math.min(t.target.scrollHeight+2,320)+"px")});var Pa=(t,e)=>`Read ${t}. It lists review comments on files in this folder (path:line, the quoted code, and the comment). Work through each open comment: make the change it asks for, then set that comment's "status" to "resolved" in ${e} and add a reply saying what you did. If you can't or shouldn't act on one, leave it open and reply with why.`;function ts(t,e){let n=b.comments,s=n.filter(u=>u.status==="open"),r=e==="resolved"?n.filter(u=>u.status==="resolved"):e==="all"?n:s,a=new Map;for(let u of[...r].sort((f,g)=>f.path.localeCompare(g.path)||(f.line||0)-(g.line||0)))a.has(u.path)||a.set(u.path,[]),a.get(u.path).push(u);let{md:o,json:i}=b.info.review,l=o&&!o.startsWith("..")?O(o):"",c=[["open",`Open (${s.length})`],["resolved",`Resolved (${n.length-s.length})`],["all",`All (${n.length})`]].map(([u,f])=>`<button class="btn${(e||"open")===u?" on":""}" data-rf="${u}">${f}</button>`).join(""),d=[...a].map(([u,f])=>`<section class="rgroup"><h3 class="group-title"><a href="${O(u)}">${h(u||".")}</a><span class="faint">${f.length}</span></h3>${f.map(g=>`<div class="rcard"><div class="rwhere"><a class="pill" href="${O(u,g.line?{line:String(g.line)}:{})}">${Oa(g)}</a>${g.commit?`<span class="faint">@ ${h(g.commit)}</span>`:""}</div>${g.quote?`<pre class="quote">${h(g.quote)}</pre>`:""}${g.image?`<a href="${O(u)}"><img class="rimg" src="api/comments/${h(g.id)}/image.png" alt="The marked area" loading="lazy"></a>`:""}${De(g,u.includes("/")?u.slice(0,u.lastIndexOf("/")):"")}</div>`).join("")}</section>`).join("");t.innerHTML=`<header class="head"><h2 class="page-title">${x("chat")} Review</h2>
|
|
108
|
+
<label class="switch" title="Click any line of a file to comment on it"><input type="checkbox" id="rmode" ${b.settings.review?"checked":""}> Review mode</label></header>
|
|
109
|
+
<p class="lede">Leave comments on files or lines (tap a line number). They're saved in <code>${h(b.info.review.dir)}/</code> as <code>comments.json</code>, and written out as <code>REVIEW.md</code> for an agent to work through. Its replies and resolutions show up here live.</p>
|
|
110
|
+
<div class="head"><div class="tabs">${c}</div><span class="grow"></span>
|
|
111
|
+
${l?`<a class="btn" href="${l}">${x("file",16)} REVIEW.md</a>`:""}
|
|
112
|
+
<button class="btn" id="copy-prompt" title="Copy instructions to paste into your agent">${x("copy",16)} Copy prompt for an agent</button>
|
|
113
|
+
${n.length-s.length&&!b.info.readOnly?'<button class="btn" id="clear-resolved">Clear resolved</button>':""}</div>
|
|
114
|
+
${d||`<p class="empty">${e==="resolved"?"Nothing resolved yet.":e==="all"?"No comments yet. Open a file and click a line number to leave one.":"No open comments. Open a file and click a line number to leave one."}</p>`}`,t.querySelectorAll("[data-rf]").forEach(u=>u.onclick=()=>R({q:u.dataset.rf==="open"?"":u.dataset.rf})),t.querySelector("#rmode").onchange=u=>{xe("review",u.target.checked),ee("settings")},t.querySelector("#copy-prompt").onclick=()=>K(b.info.review.prompt||Pa(o,i),"Prompt copied");let p=t.querySelector("#clear-resolved");p&&(p.onclick=async()=>{confirm("Remove every resolved comment?")&&(await M("api/comments?resolved=1",{method:"DELETE"}),await ct())})}function Bt(){let t=b.comments.filter(n=>n.status==="open").length,e=$("review-count");e&&(e.textContent=String(t),e.hidden=!t)}var Ue=null,Na="#ff2d55";function ns({path:t,stage:e,pic:n,tools:s,step:r}){let a={path:t,stage:e,pic:n,tools:s,wrap:e.querySelector(".picwrap"),strokes:[],drawing:!1,canvas:null};Ue=a,Dt(a),n.onclick=()=>{a.drawing||e.classList.toggle("actual")};let o=null;e.addEventListener("touchstart",i=>{o=i.touches.length===1?{x:i.touches[0].clientX,y:i.touches[0].clientY,t:Date.now()}:null},{passive:!0}),e.addEventListener("touchend",i=>{let l=o;if(o=null,!l||a.drawing||e.classList.contains("actual")||!i.changedTouches.length)return;let c=i.changedTouches[0].clientX-l.x,d=i.changedTouches[0].clientY-l.y;Math.abs(c)>60&&Math.abs(c)>1.5*Math.abs(d)&&Date.now()-l.t<800&&r(c<0?1:-1)}),s.onclick=i=>{let l=i.target.closest("[data-ink]");if(!l)return;let c=l.dataset.ink;c==="start"?Ba(a):c==="undo"?(a.strokes.pop(),qe(a)):c==="clear"?(a.strokes=[],qe(a)):c==="cancel"&&ss(a)},Ft()}function Dt(t){let e=b.info.readOnly,n=matchMedia("(pointer: coarse)").matches;t.tools.innerHTML=t.drawing?`<span class="ink-hint">${x("pen",14)} Draw on the picture around what you mean, then say what should change.</span><span class="grow"></span><button class="btn small" data-ink="undo">${x("undo",14)} Undo</button><button class="btn small" data-ink="clear">Clear</button><button class="btn small" data-ink="cancel">Cancel</button>`:`${e?"":`<button class="btn small" data-ink="start">${x("pen",14)} Mark an area</button>`}<span class="faint hint">${n?"Tap to zoom \xB7 swipe for the next file":"Click to see it at full size"}</span>`}function Ba(t){if(t.drawing)return;t.drawing=!0,t.strokes=[],t.stage.classList.remove("actual"),t.wrap.classList.add("drawing");let e=document.createElement("canvas");e.className="ink",t.wrap.append(e),t.canvas=e;let n=null,s=a=>{let o=e.getBoundingClientRect();return[Math.min(1,Math.max(0,(a.clientX-o.left)/o.width)),Math.min(1,Math.max(0,(a.clientY-o.top)/o.height))]};e.onpointerdown=a=>{a.preventDefault(),e.setPointerCapture(a.pointerId),n=[...s(a)],t.strokes.push(n),qe(t)},e.onpointermove=a=>{if(!n)return;let[o,i]=s(a),l=n[n.length-2],c=n[n.length-1];Math.hypot(o-l,i-c)<.002||(n.push(o,i),qe(t))},e.onpointerup=e.onpointercancel=()=>n=null,Dt(t),t.tools.insertAdjacentHTML("afterend",ae(t.path,0,0));let r=t.tools.nextElementSibling;r.classList.add("ink-composer"),r.querySelector(".composer-head").firstChild.textContent="Comment on the marked area ",r.getMarks=()=>Da(t),new ResizeObserver(()=>qe(t)).observe(e),qe(t)}function ss(t){t.drawing&&(t.drawing=!1,t.canvas?.remove(),t.canvas=null,t.strokes=[],t.wrap.classList.remove("drawing"),t.tools.parentElement?.querySelector(".ink-composer")?.remove(),Dt(t))}Ie("composer-closed",()=>{Ue?.drawing&&!Ue.tools.parentElement?.querySelector(".ink-composer")&&ss(Ue)});function qe(t){let e=t.canvas;if(!e)return;let n=e.getBoundingClientRect(),s=devicePixelRatio||1;e.width=Math.max(1,Math.round(n.width*s)),e.height=Math.max(1,Math.round(n.height*s));let r=e.getContext("2d");rs(r,t.strokes,e.width,e.height,3*s)}function rs(t,e,n,s,r){t.lineCap="round",t.lineJoin="round";for(let[a,o]of[["rgba(255,255,255,.85)",r*2],[Na,r]]){t.strokeStyle=a,t.lineWidth=o;for(let i of e){t.beginPath(),t.moveTo(i[0]*n,i[1]*s),i.length===2&&t.lineTo(i[0]*n+.1,i[1]*s);for(let l=2;l<i.length;l+=2)t.lineTo(i[l]*n,i[l+1]*s);t.stroke()}}}async function Da(t){if(!t.strokes.length)return le("Draw on the picture first"),null;let e=t.pic,n=e.naturalWidth||e.clientWidth*2,s=e.naturalHeight||e.clientHeight*2,r=1,a=1,o=0,i=0;for(let d of t.strokes)for(let p=0;p<d.length;p+=2)r=Math.min(r,d[p]),o=Math.max(o,d[p]),a=Math.min(a,d[p+1]),i=Math.max(i,d[p+1]);let l=.01;r=Math.max(0,r-l),a=Math.max(0,a-l),o=Math.min(1,o+l),i=Math.min(1,i+l);let c={strokes:t.strokes.map(d=>d.map(p=>Math.round(p*1e4)/1e4)),area:{x:Math.round(r*n),y:Math.round(a*s),w:Math.max(1,Math.round((o-r)*n)),h:Math.max(1,Math.round((i-a)*s))}};try{let d=Math.min(1,2048/Math.max(n,s)),p=document.createElement("canvas");p.width=Math.max(1,Math.round(n*d)),p.height=Math.max(1,Math.round(s*d));let u=p.getContext("2d");u.drawImage(e,0,0,p.width,p.height),rs(u,c.strokes,p.width,p.height,Math.max(3,p.width/250)),c.snapshot=p.toDataURL("image/png")}catch{}return c}function Ft(){let t=Ue;if(!t||!t.wrap.isConnected)return;let e=t.wrap.querySelector(".marks"),n=t.wrap.querySelector(".pins"),s=F(t.path).filter(r=>r.strokes?.length&&(b.settings.resolved||r.status==="open"));e.innerHTML=s.map(r=>r.strokes.map(a=>`<polyline class="${r.status}" points="${Fa(a)}"/>`).join("")).join(""),n.innerHTML=s.map(r=>`<button class="pin ${r.status}" data-pin="${r.id}" style="left:${r.strokes[0][0]*100}%;top:${r.strokes[0][1]*100}%" title="Marked area ${Ce(r)}" aria-label="Marked area ${Ce(r)}">${Ce(r)}</button>`).join(""),n.onclick=r=>{let a=r.target.closest("[data-pin]"),o=a&&document.querySelector(`#file-threads [data-cid="${a.dataset.pin}"]`);o&&(o.scrollIntoView({block:"center",behavior:"smooth"}),o.classList.remove("flash"),o.offsetWidth,o.classList.add("flash"))}}var Fa=t=>{let e=[];for(let n=0;n<t.length;n+=2)e.push(`${t[n]},${t[n+1]}`);return e.length===1&&e.push(e[0]),e.join(" ")};var Ut=6e4;function Ua(t){let e=/^(\d+)(?:-(\d+))?$/.exec(t||"");if(!e)return null;let n=Number(e[1]),s=Number(e[2]||e[1]);return[Math.min(n,s),Math.max(n,s)]}function Kt(t){let e=[],n=[],s=null,r=0,a=0;for(let o of t.replace(/\r/g,"").split(`
|
|
115
|
+
`)){let i=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@(.*)$/.exec(o);if(i){s={header:o,ctx:i[3].trim(),lines:[]},e.push(s),r=Number(i[1]),a=Number(i[2]);continue}if(!s){n.push(o);continue}o.startsWith("+")?s.lines.push({t:"+",text:o.slice(1),n:a++}):o.startsWith("-")?s.lines.push({t:"-",text:o.slice(1),o:r++}):o.startsWith(" ")?s.lines.push({t:" ",text:o.slice(1),o:r++,n:a++}):o.startsWith("\\")&&s.lines.push({t:"\\",text:o})}return{head:n,hunks:e}}function os(t){let e=new Map;for(let n of t.hunks){let s=0;for(let r=0;r<n.lines.length;r++){let a=n.lines[r];a.t==="-"?s++:a.t==="+"?(e.set(a.n,s>0?"mod":"add"),s>0&&s--):(s>0&&a.n&&e.set(a.n,e.get(a.n)||"del"),s=0)}}return e}function is(t,{download:e}={}){return`<figcaption class="cbar"><span class="caption">${h(t)}</span><span class="ctools"><button class="icon-btn${b.settings.wrap?" on":""}" data-cv="wrap" title="Wrap long lines" aria-label="Wrap long lines">${x("wrap",16)}</button><button class="icon-btn" data-cv="copy" title="Copy" aria-label="Copy">${x("copy",16)}</button>${e?`<a class="icon-btn" href="${e}" download title="Download" aria-label="Download">${x("download",16)}</a>`:""}</span></figcaption>`}function Vt(t,{path:e,text:n,folder:s,marks:r,caption:a,download:o}){let i=n.length>4e6?n.slice(0,4e6):n,l=()=>{let w=Me(i,e);return w.length>1&&w[w.length-1]===""&&i.endsWith(`
|
|
116
|
+
`)&&w.pop(),w},c=l(),d=c.slice(0,Ut),p=d.map((w,v)=>{let y=v+1,k=r?.get(y);return`<div class="ln" data-n="${y}"><a class="gut" href="${V({...L(),line:String(y)})}" data-n="${y}">${y}</a><span class="mk${k?" "+k:""}"></span><span class="src">${w||" "}</span></div>`}),u=Le(e),f=a??`${u||"text"} \xB7 ${d.length.toLocaleString()} ${d.length===1?"line":"lines"}`;t.innerHTML=`<figure class="ui-code">${is(f,{download:o})}<div class="code${b.settings.wrap?" wrap":""}${b.settings.review?" review":""}" tabindex="0" data-path="${h(e)}" data-folder="${h(s)}">${p.join("")}</div></figure>${c.length>Ut?`<p class="note">Showing the first ${Ut.toLocaleString()} of ${c.length.toLocaleString()} lines.</p>`:""}`;let g=t.querySelector(".code");g.lines=d.length,g.text=n,Wa(g,e),Gt(g);let m=Ua(L().line);return m&&Zt(g,m[0],m[1],!0),Be(e).then(w=>{if(!w||!g.isConnected)return;let v=l();g.querySelectorAll(".ln > .src").forEach((k,S)=>{v[S]!==void 0&&(k.innerHTML=v[S]||" ")})}),g}document.addEventListener("click",t=>{let e=t.target.closest("[data-cv]");if(!e)return;let s=e.closest(".ui-code")?.querySelector(".code");if(s){if(e.dataset.cv==="wrap")xe("wrap",!b.settings.wrap),document.querySelectorAll(".ui-code > .code").forEach(r=>r.classList.toggle("wrap",b.settings.wrap)),document.querySelectorAll('[data-cv="wrap"]').forEach(r=>r.classList.toggle("on",b.settings.wrap));else if(e.dataset.cv==="copy"){let r=s.text??[...s.querySelectorAll(".src, .dsrc")].map(a=>a.textContent).join(`
|
|
117
|
+
`);K(r,"Copied").then(()=>{e.innerHTML=x("check",16),e.classList.add("copied"),setTimeout(()=>{e.innerHTML=x("copy",16),e.classList.remove("copied")},1600)})}}});function Gt(t){if(!t)return;let e=t.dataset.path,n=t.dataset.folder;t.querySelectorAll(":scope > .threads").forEach(a=>a.remove()),t.querySelectorAll(".ln.has-c").forEach(a=>a.classList.remove("has-c","has-open"));let s=F(e).filter(a=>a.line&&(b.settings.resolved||a.status==="open")),r=new Map;for(let a of s){let o=Math.min(a.endLine||a.line,t.lines||1);r.has(o)||r.set(o,[]),r.get(o).push(a);for(let i=a.line;i<=(a.endLine||a.line);i++){let l=t.querySelector(`.ln[data-n="${i}"]`);l?.classList.add("has-c"),a.status==="open"&&l?.classList.add("has-open")}}for(let[a,o]of r){let i=t.querySelector(`.ln[data-n="${a}"]`);if(!i)continue;let l=document.createElement("div");l.className="threads",l.innerHTML=o.map(c=>`<div class="thread"><div class="thread-where">${c.endLine?`Lines ${c.line}\u2013${c.endLine}`:`Line ${c.line}`}${c.line>t.lines?" (past the end of the file now)":""}</div>${De(c,n)}</div>`).join(""),i.after(l)}}function Zt(t,e,n,s){t.sel=[e,n],t.querySelectorAll(".ln.sel").forEach(i=>i.classList.remove("sel"));for(let i=e;i<=n;i++)t.querySelector(`.ln[data-n="${i}"]`)?.classList.add("sel");t.querySelector(":scope > .selbar")?.remove();let r=t.querySelector(`.ln[data-n="${n}"]`);if(!r)return;let a=document.createElement("div");a.className="selbar";let o=e===n?`Line ${e}`:`Lines ${e}\u2013${n}`;a.innerHTML=`<span class="faint">${o}</span>${b.info.readOnly?"":`<button class="btn small primary" data-sb="comment">${x("chat",14)} Comment</button>`}<button class="btn small" data-sb="link">${x("link",14)} Link</button><button class="btn small" data-sb="ref">path:line</button><button class="btn small" data-sb="text">${x("copy",14)} Lines</button><button class="mini" data-sb="clear" title="Clear the selection" aria-label="Clear the selection">${x("x",14)}</button>`,r.after(a),s&&requestAnimationFrame(()=>t.querySelector(`.ln[data-n="${e}"]`)?.scrollIntoView({block:"center"}))}function as(t){t.sel=null,t.querySelectorAll(".ln.sel").forEach(e=>e.classList.remove("sel")),t.querySelector(":scope > .selbar")?.remove(),R({line:""},!0)}function Wt(t,e,n,s){t.querySelectorAll(":scope > .composer").forEach(i=>i.remove());let r=t.querySelector(`.ln[data-n="${s}"]`);if(!r)return;(r.nextElementSibling?.classList.contains("threads")?r.nextElementSibling:r).insertAdjacentHTML("afterend",ae(e,n,s)),t.querySelector(":scope > .selbar")?.remove();let o=t.querySelector(".composer textarea");o.focus(),o.scrollIntoView({block:"nearest"})}function Wa(t,e){t.addEventListener("click",n=>{let s=n.target.closest(".gut"),r=n.target.closest("[data-sb]");if(s){n.preventDefault();let o=Number(s.dataset.n),[i,l]=n.shiftKey&&t.sel?[Math.min(t.sel[0],o),Math.max(t.sel[1],o)]:[o,o];if(!n.shiftKey&&t.sel&&t.sel[0]===o&&t.sel[1]===o)return as(t);Zt(t,i,l,!1),R({line:i===l?String(i):`${i}-${l}`},!0),b.settings.review&&!b.info.readOnly&&!n.shiftKey&&Wt(t,e,i,l);return}if(r&&t.sel){let[o,i]=t.sel,l=r.dataset.sb;if(l==="comment")Wt(t,e,o,i);else if(l==="link")K(location.href,"Link copied");else if(l==="ref")K(`${e}:${o}${o!==i?"-"+i:""}`,"Copied");else if(l==="text"){let c=[];for(let d=o;d<=i;d++)c.push(t.querySelector(`.ln[data-n="${d}"] .src`)?.textContent??"");K(c.join(`
|
|
118
|
+
`),"Lines copied")}else l==="clear"&&as(t);return}let a=n.target.closest(".ln");if(a&&b.settings.review&&!b.info.readOnly&&!String(getSelection()).trim()){let o=Number(a.dataset.n),[i,l]=n.shiftKey&&t.sel?[Math.min(t.sel[0],o),Math.max(t.sel[1],o)]:[o,o];Zt(t,i,l,!1),R({line:i===l?String(i):`${i}-${l}`},!0),Wt(t,e,i,l)}})}function We(t,e,n,{comments:s=!0,caption:r=""}={}){if(!e.trim()){t.innerHTML='<p class="note">No changes against the last commit.</p>';return}let a=Kt(e),o=a.head.filter(m=>m&&!/^(diff --git|index |--- |\+\+\+ |(new|deleted) file mode|similarity index|rename (from|to) )/.test(m)),i=a.hunks.flatMap(m=>m.lines.filter(w=>w.t!=="\\")),l=()=>{let m=new Map;for(let w of a.hunks)for(let v of["o","n"]){let y=w.lines.filter(S=>S.t!=="\\"&&(v==="o"?S.t!=="+":S.t!=="-")),k=Me(y.map(S=>S.text).join(`
|
|
119
|
+
`),n);y.forEach((S,C)=>{(v==="n"||S.t==="-")&&m.set(S,k[C]||" ")})}return m},c=l(),d=[];for(let m of a.hunks){d.push(`<div class="dh"><span>${h(m.header.replace(/@@(.*)$/,"@@"))}</span>${m.ctx?`<span class="faint">${h(m.ctx)}</span>`:""}</div>`);for(let w of m.lines){if(w.t==="\\"){d.push(`<div class="dl meta"><span class="on"></span><span class="nn"></span><span class="dsrc faint">${h(w.text)}</span></div>`);continue}let v=w.t==="+"?"add":w.t==="-"?"del":"";d.push(`<div class="dl ${v}"${w.n?` data-n="${w.n}"`:""}><span class="on">${w.o??""}</span><span class="nn">${w.n?`<a class="gut" data-n="${w.n}">${w.n}</a>`:""}</span><span class="dsrc"><i>${w.t===" "?" ":w.t}</i><span class="dt">${c.get(w)}</span></span></div>`)}}let p=!a.hunks.length&&/Binary files/.test(e),u=i.filter(m=>m.t==="+").length,f=i.filter(m=>m.t==="-").length;t.innerHTML=`${o.length?`<pre class="commit-head">${h(o.join(`
|
|
120
|
+
`))}</pre>`:""}${p?'<p class="note">A binary file changed; no line diff.</p>':a.hunks.length?`<figure class="ui-code">${is(`${r||n} \xB7 +${u} \u2212${f}`)}<div class="diff code${b.settings.wrap?" wrap":""}${b.settings.review&&s?" review":""}" tabindex="0" data-path="${h(n)}">${d.join("")}</div></figure>`:'<p class="note">No lines changed (only its name or mode).</p>'}`;let g=t.querySelector(".diff");g&&(g.text=e,Be(n).then(m=>{if(!m||!g.isConnected)return;let w=l();g.querySelectorAll(".dt").forEach((v,y)=>{let k=w.get(i[y]);k!==void 0&&(v.innerHTML=k)})})),!(!g||!s)&&(Ze(g),g.addEventListener("click",m=>{if(b.info.readOnly||m.target.closest(".threads, .composer"))return;let w=m.target.closest(".gut")||(b.settings.review&&!String(getSelection()).trim()?m.target.closest(".dl[data-n]"):null);if(!w)return;let v=Number(w.dataset.n);g.querySelectorAll(":scope > .composer").forEach(S=>S.remove());let y=g.querySelector(`.dl[data-n="${v}"]`);(y.nextElementSibling?.classList.contains("threads")?y.nextElementSibling:y).insertAdjacentHTML("afterend",ae(n,v,v)),g.querySelector(".composer textarea").focus()}))}function Ze(t){if(!t)return;t.querySelectorAll(":scope > .threads").forEach(s=>s.remove());let e=t.dataset.path,n=e.includes("/")?e.slice(0,e.lastIndexOf("/")):"";for(let s of F(e).filter(r=>r.line&&(b.settings.resolved||r.status==="open"))){let r=t.querySelector(`.dl[data-n="${s.endLine||s.line}"]`);if(!r)continue;let a=r.nextElementSibling?.classList.contains("threads")?r.nextElementSibling:null;a||(a=document.createElement("div"),a.className="threads",r.after(a)),a.insertAdjacentHTML("beforeend",`<div class="thread"><div class="thread-where">${s.endLine?`Lines ${s.line}\u2013${s.endLine}`:`Line ${s.line}`}</div>${De(s,n)}</div>`)}}var be=new Set(["png","jpg","jpeg","gif","webp","avif","svg","ico","bmp"]),Za=new Set(["mp3","ogg","oga","wav","flac","m4a","aac","opus"]),Ka=new Set(["mp4","m4v","webm","ogv","mov"]),Va=new Set(["woff","woff2","ttf","otf"]),Ga=new Set(["zip","gz","tgz","bz2","xz","7z","rar","tar","exe","dll","so","dylib","bin","dat","glb","fbx","blend","vox","wasm","class","jar","o","a","pyc","db","sqlite","psd","ai","sketch","fig","xlsx","docx","pptx","ktx2","basis","dds","hdr","exr","mid","midi"]),ds={csv:",",tsv:" "},Xa=()=>b.info.maxFile||5*1048576,ps=t=>W(t)+"?download=1",Qa=t=>matchMedia("(max-width: 759px)").matches?document.scrollingElement:t;function Ja(t){let e=Q(t);return e==="svg"?"svg":be.has(e)?"image":Za.has(e)?"audio":Ka.has(e)?"video":Va.has(e)?"font":e==="pdf"?"pdf":Ga.has(e)?"binary":e==="md"||e==="markdown"||e==="mdx"?"markdown":e==="html"||e==="htm"?"html":e==="ipynb"?"notebook":e==="mmd"||e==="mermaid"?"diagram":e in ds?"table":e==="json"||e==="geojson"||e==="webmanifest"||e==="gltf"?"json":"text"}var ls={image:"Image",svg:"Image",audio:"Player",video:"Player",font:"Font",pdf:"PDF",markdown:"Rendered",html:"Preview",notebook:"Notebook",table:"Table",json:"Tree",binary:"Hex",diagram:"Diagram"},Ya=new Set(["svg","markdown","html","notebook","table","json","text","diagram"]),oe={path:"",token:0};function hs(){oe={path:"",token:oe.token+1}}async function dt(t,e=!1){let{folder:n,open:s,tab:r}=L(),a=z(n,s);if(!e&&oe.path===a&&oe.tab===(r||""))return;let o=Qa(t),i=e&&oe.path===a?o.scrollTop:0,l=++oe.token;oe={path:a,tab:r||"",token:l};let d=(b.cache.get(n)||[]).find(E=>E.name===s),p=b.changes.get(a),u=!d&&p?.state==="deleted",f=Ja(s),g=[];u?g.push(["deleted","Last committed"]):(ls[f]&&g.push(["preview",ls[f]]),Ya.has(f)&&g.push(["source","Source"])),p&&p.state!=="ignored"&&g.push(["diff","Changes"]),p&&(f==="image"||f==="svg")&&p.state!=="new"&&p.state!=="added"&&g.push(["compare","Compare"]),b.git&&p?.state!=="new"&&!te(a)&&g.push(["history","History"]);let m=g.some(([E])=>E===r)?r:g[0]?.[0]||"source",w=W(a),v=p&&p.state!=="ignored"?p.state:"",y=F(a).filter(E=>E.status==="open").length;if(!b.cache.has(n)&&(await ye(n).catch(()=>[]),l!==oe.token))return;let[k,S]=us(n,s),C=`<header class="file-head">
|
|
121
|
+
<button class="icon-btn back" id="back" aria-label="Back to the folder" title="Back to the folder">${x("chevron-left")}</button>
|
|
122
|
+
<span class="file-name" title="${h(a)}">${h(s)}</span>
|
|
123
|
+
${v?`<span class="badge s-${v}" title="${ne[v]}">${tt[v]||"\xB7"}</span>`:""}
|
|
124
|
+
${y?`<span class="pill warn" title="Open comments">${x("chat",12)} ${y}</span>`:""}
|
|
125
|
+
<span class="grow"></span>
|
|
126
|
+
<button class="icon-btn" id="prev-file" ${k?`title="Previous: ${h(k)} ( [ )" aria-label="Previous file: ${h(k)}"`:'disabled title="No previous file" aria-label="No previous file"'}>${x("arrow-left")}</button>
|
|
127
|
+
<button class="icon-btn" id="next-file" ${S?`title="Next: ${h(S)} ( ] )" aria-label="Next file: ${h(S)}"`:'disabled title="No next file" aria-label="No next file"'}>${x("arrow-right")}</button>
|
|
128
|
+
<button class="icon-btn hide-sm" id="copy-path" title="Copy the path" aria-label="Copy the path">${x("link")}</button>
|
|
129
|
+
${b.info.readOnly?"":`<button class="icon-btn" id="comment-file" title="Comment on the whole file" aria-label="Comment on the whole file">${x("chat")}</button>`}
|
|
130
|
+
${u?"":`<a class="icon-btn" href="${ps(a)}" download="${h(s)}" title="Download" aria-label="Download">${x("download")}</a><a class="icon-btn hide-sm" href="${w}" target="_blank" rel="noopener" title="Open the raw file" aria-label="Open the raw file">${x("external")}</a>`}
|
|
131
|
+
<button class="icon-btn" id="close" aria-label="Close the file" title="Close (Esc)">${x("x")}</button>
|
|
132
|
+
</header>
|
|
133
|
+
<div class="meta" id="fmeta">${h(a)}${d?" \xB7 "+je(d.size)+" \xB7 "+Z(d.mtime):u?" \xB7 deleted":""}${p?.add!==void 0?` \xB7 <span class="plus">+${p.add}</span> <span class="minus">\u2212${p.del||0}</span>`:""}</div>
|
|
134
|
+
<div id="file-threads">${Fe(a,n)}</div>
|
|
135
|
+
${g.length>1?`<div class="tabs">${g.map(([E,ie])=>`<button class="btn${E===m?" on":""}" data-tab="${E}">${ie}</button>`).join("")}</div>`:""}
|
|
136
|
+
<div id="fbody"><div class="skeleton" style="width:70%"></div></div>`;t.innerHTML=C,o.scrollTop=0,$("close").onclick=()=>R({open:"",tab:"",line:""}),$("back").onclick=()=>R({open:"",tab:"",line:""}),$("copy-path").onclick=()=>K(a,"Path copied"),$("prev-file").onclick=()=>Ke(-1),$("next-file").onclick=()=>Ke(1);let q=$("comment-file");q&&(q.onclick=()=>{$("file-threads").querySelector(".composer")||($("file-threads").insertAdjacentHTML("beforeend",ae(a,0,0)),$("file-threads").querySelector(".composer textarea").focus())}),t.querySelectorAll("[data-tab]").forEach(E=>E.onclick=()=>R({tab:E.dataset.tab===g[0][0]?"":E.dataset.tab,line:""}));let j=$("fbody"),N=()=>l!==oe.token;try{await eo(m,{body:j,path:a,folder:n,kind:f,url:w,e:d,change:p,stale:N})}catch(E){N()||(j.innerHTML=`<p class="note">${h(E.message)}</p>`)}i&&!N()&&(o.scrollTop=i)}function us(t,e){let n=(b.cache.get(t)||[]).filter(r=>r.type!=="folder");b.settings.ignored==="hide"&&(n=n.filter(r=>!te(z(t,r.name))));let s=n.findIndex(r=>r.name===e);return s<0?["",""]:[n[s-1]?.name||"",n[s+1]?.name||""]}function Ke(t){let{folder:e,open:n}=L();if(!n)return;let s=us(e,n)[t<0?0:1];s&&R({open:s,tab:"",line:""})}function fs(t){let{folder:e,open:n}=L(),s=t.querySelector("#file-threads");if(!s||!n)return;let r=s.querySelector(".composer");s.innerHTML=Fe(z(e,n),e),r&&s.append(r),Gt(t.querySelector("#fbody > .code, #fbody .code:not(.diff)")),Ze(t.querySelector(".diff")),Ft()}async function eo(t,e){let{body:n,path:s,folder:r,kind:a,url:o,e:i,stale:l}=e,c=async()=>{if(i&&i.size>Xa())throw new Error(`Too large to show here (${je(i.size)}). Download it instead.`);return(await fetch(o)).text()};if(t==="diff"){let d=await M("api/git/diff?p="+encodeURIComponent(s));if(l())return;We(n,d,s,{caption:"Changes since the last commit"});return}if(t==="deleted"){let d=await M("api/git/show?p="+encodeURIComponent(s));if(l())return;n.innerHTML='<p class="note">This file was deleted. It looked like this at the last commit:</p><div id="code-host"></div>',Vt($("code-host"),{path:s,text:d,folder:r});return}if(t==="history")return to(n,s,l);if(t==="compare"){n.innerHTML=`<div class="compare"><figure><figcaption>Last commit</figcaption><div class="stage"><img src="api/git/raw?p=${encodeURIComponent(s)}" alt="Before"></div></figure><figure><figcaption>Now</figcaption><div class="stage"><img src="${o}?t=${Date.now()}" alt="After"></div></figure></div>`;return}if(t==="source"||a==="text"){let d=await c();if(l())return;if(d.includes("\0"))return cs(n,o,l);let p=e.change?.state==="new"||e.change?.state==="added";n.innerHTML='<div id="code-host"></div>';let u=Vt($("code-host"),{path:s,text:d,folder:r,marks:p?new Map(d.split(`
|
|
137
|
+
`).map((f,g)=>[g+1,"add"])):void 0,download:ps(s)});if(e.change&&!p&&e.change.state!=="ignored"){let f=await M("api/git/diff?p="+encodeURIComponent(s)).catch(()=>"");if(l()||!u.isConnected)return;for(let[g,m]of os(Kt(f)))u.querySelector(`.ln[data-n="${g}"] .mk`)?.classList.add(m)}return}switch(a){case"image":case"svg":{n.innerHTML=`<div class="stage" id="stage"><div class="picwrap" id="picwrap"><img id="pic" src="${o}?t=${i?i.mtime:0}" alt="${h(s)}" draggable="false"><svg class="marks" id="marks" viewBox="0 0 1 1" preserveAspectRatio="none" aria-hidden="true"></svg><div class="pins" id="pins"></div></div></div><div class="img-tools" id="img-tools"></div>`;let d=$("pic");ns({path:s,stage:$("stage"),pic:d,tools:$("img-tools"),step:Ke}),d.onload=()=>{let p=$("fmeta");p&&!p.dataset.dim&&(p.dataset.dim="1",p.insertAdjacentHTML("beforeend",` \xB7 ${d.naturalWidth} \xD7 ${d.naturalHeight}`))};return}case"audio":n.innerHTML=`<div class="stage"><audio controls preload="metadata" src="${o}"></audio></div>`;return;case"video":n.innerHTML=`<div class="stage"><video controls preload="metadata" src="${o}"></video></div>`;return;case"pdf":n.innerHTML=`<div class="stage"><iframe src="${o}" title="${h(s)}"></iframe></div>`;return;case"font":return no(n,o);case"binary":return cs(n,o,l);case"markdown":{let d=await c();if(l())return;n.innerHTML='<article class="md card"></article>',Ae(n.firstElementChild,d,r);return}case"diagram":{let d=await c();if(l())return;n.innerHTML='<div class="stage diagram"></div>',await lt(n.firstElementChild,d);return}case"html":n.innerHTML=`<p class="faint hint">Shown sandboxed: scripts don't run.</p><div class="stage page"><iframe sandbox="" src="${o}?as=page" title="${h(s)}"></iframe></div>`;return;case"table":{let d=await c();return l()?void 0:ro(n,d,ds[Q(s)])}case"json":{let d=await c();if(l())return;let p;try{p=JSON.parse(d)}catch(u){n.innerHTML=`<p class="note">Not valid JSON: ${h(u.message)}</p>`;return}n.innerHTML=`<div class="code-foot"><button class="btn small" data-jt="open">Expand all</button><button class="btn small" data-jt="close">Collapse all</button></div><div class="jtree">${ms(p,0)}</div>`,n.querySelectorAll("[data-jt]").forEach(u=>u.onclick=()=>n.querySelectorAll(".jtree details").forEach(f=>f.open=u.dataset.jt==="open"));return}case"notebook":{let d=await c();return l()?void 0:ao(n,d,r)}}}async function to(t,e,n){let{commits:s,more:r}=await M("api/git/log?p="+encodeURIComponent(e));if(n())return;if(!s.length){t.innerHTML='<p class="note">No commits touch this file yet.</p>';return}let a=c=>`<button class="commit" data-h="${h(c.hash)}"><code>${h(c.hash)}</code><span class="subj">${h(c.subject)}</span><span class="faint">${h(c.author)} \xB7 ${Z(c.time)}</span></button>`;t.innerHTML=`<div class="commits">${s.map(a).join("")}</div>${r?'<button class="btn small" id="log-more">Show older commits</button>':""}<div id="commit-diff"></div>`;let o=s.length,i=$("log-more");i&&(i.onclick=async()=>{i.disabled=!0;let c=await M(`api/git/log?p=${encodeURIComponent(e)}&skip=${o}`).catch(()=>null);if(n()||!c)return void(i.disabled=!1);o+=c.commits.length,t.querySelector(".commits").insertAdjacentHTML("beforeend",c.commits.map(a).join("")),c.more?i.disabled=!1:i.remove()}),t.querySelector(".commits").onclick=c=>{let d=c.target.closest("[data-h]");d&&l(d).catch(()=>{})};async function l(c){t.querySelectorAll(".commit").forEach(p=>p.classList.toggle("on",p===c));let d=await M(`api/git/commit?p=${encodeURIComponent(e)}&h=${c.dataset.h}`);n()||(We($("commit-diff"),d,e,{comments:!1,caption:c.dataset.h}),$("commit-diff").insertAdjacentHTML("afterbegin",`<a class="btn small" href="${V({folder:L().folder,m:"history",q:c.dataset.h})}">${x("diff",14)} The whole commit</a>`),$("commit-diff").scrollIntoView({block:"nearest"}))}}async function cs(t,e,n){let s=await fetch(e,{headers:{range:"bytes=0-8191"}}),r=new Uint8Array(await s.arrayBuffer());if(n())return;let a=[];for(let o=0;o<r.length;o+=16){let i=[...r.slice(o,o+16)],l=i.map(d=>d.toString(16).padStart(2,"0")).join(" "),c=i.map(d=>d>=32&&d<127?String.fromCharCode(d):".").join("");a.push(`<span class="faint">${o.toString(16).padStart(8,"0")}</span> ${l.padEnd(47)} ${h(c)}`)}t.innerHTML=`<p class="faint hint">No preview for this kind of file. The first ${r.length.toLocaleString()} bytes:</p><pre class="hex">${a.join(`
|
|
138
|
+
`)}</pre>`}async function no(t,e){let n="fs-font-"+Math.random().toString(36).slice(2),s=new FontFace(n,`url("${e}")`);try{await s.load(),document.fonts.add(s)}catch{t.innerHTML='<p class="note">This font could not be loaded.</p>';return}let r="The quick brown fox jumps over the lazy dog";t.innerHTML=`<div class="font" style="font-family:'${n}'">
|
|
139
|
+
<input class="font-sample" value="${r}" aria-label="Sample text">
|
|
140
|
+
${[64,40,28,20,14].map(a=>`<p style="font-size:${a}px" data-s>${r}</p>`).join("")}
|
|
141
|
+
<p style="font-size:22px">ABCDEFGHIJKLMNOPQRSTUVWXYZ<br>abcdefghijklmnopqrstuvwxyz<br>0123456789 !@#$%^&*()[]{}?</p></div>`,t.querySelector(".font-sample").oninput=a=>t.querySelectorAll("[data-s]").forEach(o=>o.textContent=a.target.value||r)}function so(t,e){let n=[],s=[],r="",a=!1;for(let o=0;o<t.length;o++){let i=t[o];if(a)i==='"'&&t[o+1]==='"'?(r+='"',o++):i==='"'?a=!1:r+=i;else if(i==='"'&&r==="")a=!0;else if(i===e)s.push(r),r="";else if(i===`
|
|
142
|
+
`||i==="\r"){if(i==="\r"&&t[o+1]===`
|
|
143
|
+
`&&o++,s.push(r),n.push(s),s=[],r="",n.length>5e3)break}else r+=i}return(r||s.length)&&(s.push(r),n.push(s)),n}function ro(t,e,n){let s=so(e,n);if(!s.length){t.innerHTML='<p class="note">Empty.</p>';return}let[r,...a]=s,o=a.slice(0,2e3),i=r.map((p,u)=>o.length>0&&o.every(f=>f[u]===void 0||f[u]===""||!isNaN(Number(f[u]))));t.innerHTML=`<div class="code-foot"><input class="filter" id="tfilter" placeholder="Filter rows"><span class="faint">${a.length.toLocaleString()} rows \xB7 ${r.length} columns${a.length>o.length?` \xB7 showing ${o.length}`:""}</span></div>
|
|
144
|
+
<div class="tablewrap"><table class="grid-table"><thead><tr><th>#</th>${r.map((p,u)=>`<th data-col="${u}">${h(p)}</th>`).join("")}</tr></thead><tbody>${o.map((p,u)=>`<tr><td class="faint">${u+1}</td>${r.map((f,g)=>`<td${i[g]?' class="num"':""}>${h(p[g]??"")}</td>`).join("")}</tr>`).join("")}</tbody></table></div>`;let l=t.querySelector("tbody");$("tfilter").oninput=p=>{let u=p.target.value.toLowerCase();for(let f of l.rows)f.hidden=!!u&&!f.textContent.toLowerCase().includes(u)};let c=-1,d=!0;t.querySelectorAll("th[data-col]").forEach(p=>p.onclick=()=>{let u=Number(p.dataset.col);d=c===u?!d:!0,c=u;let f=[...l.rows];f.sort((g,m)=>{let w=g.cells[u+1].textContent,v=m.cells[u+1].textContent,y=i[u]?Number(w)-Number(v):w.localeCompare(v,void 0,{numeric:!0});return d?y:-y}),l.append(...f),t.querySelectorAll("th").forEach(g=>g.dataset.sort=""),p.dataset.sort=d?"\u25B2":"\u25BC"})}function ms(t,e){if(t===null)return'<span class="tok-literal">null</span>';if(typeof t=="string")return`<span class="tok-string">"${h(t.length>2e3?t.slice(0,2e3)+"\u2026":t)}"</span>`;if(typeof t=="number")return`<span class="tok-number">${t}</span>`;if(typeof t=="boolean")return`<span class="tok-literal">${t}</span>`;let n=Array.isArray(t),s=n?t.map((i,l)=>[l,i]):Object.entries(t);if(!s.length)return n?"[]":"{}";let r=s.slice(0,1e3),a=r.map(([i,l])=>`<div class="jrow">${n?`<span class="faint">${i}</span>`:`<span class="jkey">${h(i)}</span>`}: ${ms(l,e+1)}</div>`).join(""),o=s.length>r.length?`<div class="faint">\u2026 ${s.length-r.length} more</div>`:"";return`<details${e<2?" open":""}><summary>${n?`[ ${s.length} ]`:`{ ${s.length} }`}</summary><div class="jkids">${a}${o}</div></details>`}function ao(t,e,n){let s;try{s=JSON.parse(e)}catch(i){t.innerHTML=`<p class="note">Not a valid notebook: ${h(i.message)}</p>`;return}let r=i=>Array.isArray(i)?i.join(""):i||"",a=s.metadata?.language_info?.file_extension||".py",o=(s.cells||[]).map(i=>{if(i.cell_type==="markdown")return`<div class="nb-md md" data-md="${h(r(i.source))}"></div>`;let l=Pt(r(i.source),Le("x"+a),`In [${i.execution_count??" "}]`),c=(i.outputs||[]).map(d=>{let p=d.data||{};if(p["image/png"])return`<img class="nb-img" src="data:image/png;base64,${r(p["image/png"]).replace(/\s/g,"")}" alt="">`;if(p["image/jpeg"])return`<img class="nb-img" src="data:image/jpeg;base64,${r(p["image/jpeg"]).replace(/\s/g,"")}" alt="">`;let u=p["text/plain"]?r(p["text/plain"]):d.text?r(d.text):d.ename?`${d.ename}: ${d.evalue}`:"";return u?`<pre class="nb-out${d.output_type==="error"?" err":""}">${h(u.replace(/\x1b\[[\d;]*m/g,""))}</pre>`:""}).join("");return`<div class="nb-cell"><span class="nb-n faint"></span><div>${l}${c}</div></div>`});t.innerHTML=`<div class="nb">${o.join("")||'<p class="note">An empty notebook.</p>'}</div>`;for(let i of t.querySelectorAll("[data-md]"))Ae(i,i.dataset.md,n)}var Y=!1;function pt(){let t=$("scope"),e=L().folder;t.textContent=Y&&e?`in ${wt(e)}`:"everywhere",t.title=Y&&e?`Searching ${e}/ (click to search everywhere)`:"Searching every folder (click to search only the open folder)",t.classList.toggle("on",Y&&!!e)}function ht(t){Y=t==="here",pt(),$("q").focus(),$("q").select()}function gs(){$("search-form").onsubmit=e=>{e.preventDefault();let n=$("q").value.trim();if(!n)return;let s=L();_({folder:s.folder,m:"search",q:n,scope:Y&&s.folder?"here":"",opts:s.m==="search"?s.opts:"",inc:s.m==="search"?s.inc:""})},$("scope").onclick=()=>{Y=!Y,pt(),L().m==="search"&&R({scope:Y?"here":""}),$("q").focus()},addEventListener("hashchange",()=>{let e=L();e.m==="search"&&($("q").value=e.q,Y=e.scope==="here"),pt()});let t=L();t.m==="search"&&($("q").value=t.q,Y=t.scope==="here"),pt()}var oo=(t,e)=>{let n="",s=0;for(let[r,a]of e)n+=h(t.slice(s,r))+"<mark>"+h(t.slice(r,a))+"</mark>",s=a;return n+h(t.slice(s))},Xt=0;async function ks(t){let e=L(),n=e.opts||"",s=e.scope==="here"&&e.folder,r=(m,w,v)=>`<button class="btn small${n.includes(m)?" on":""}" data-o="${m}" title="${v}">${w}</button>`;t.innerHTML=`<header class="head"><h2 class="page-title">${x("search")} \u201C${h(e.q)}\u201D</h2></header>
|
|
145
|
+
<div class="head search-opts">
|
|
146
|
+
${r("c","Aa","Match case")}${r("w","<u>ab</u>","Whole word")}${r("r",".*","Regular expression")}
|
|
147
|
+
<input class="filter" id="inc" placeholder="Files to include: *.ts, src/**, !*.test.ts" value="${h(e.inc)}" aria-label="Files to include">
|
|
148
|
+
<span class="scope-chips"><button class="btn small${s?"":" on"}" data-sc="">Everywhere</button>${e.folder?`<button class="btn small${s?" on":""}" data-sc="here">In ${h(e.folder)}/</button>`:""}</span>
|
|
149
|
+
</div>
|
|
150
|
+
<div id="results"><p class="note">Searching\u2026</p></div>`,t.querySelectorAll("[data-o]").forEach(m=>m.onclick=()=>R({opts:n.includes(m.dataset.o)?n.replace(m.dataset.o,""):n+m.dataset.o})),t.querySelectorAll("[data-sc]").forEach(m=>m.onclick=()=>R({scope:m.dataset.sc}));let a=$("inc");a.onchange=()=>R({inc:a.value.trim()}),a.onkeydown=m=>m.key==="Enter"&&a.blur();let o=++Xt,i=new URLSearchParams({q:e.q,scope:s?e.folder:"",include:e.inc||""});n.includes("c")&&i.set("case","1"),n.includes("w")&&i.set("word","1"),n.includes("r")&&i.set("regex","1");let l;try{l=await M("api/search?"+i)}catch(m){o===Xt&&($("results").innerHTML=`<p class="note">${h(m.message)}</p>`);return}if(o!==Xt)return;if(l.error){$("results").innerHTML=`<p class="note">${h(l.error)}</p>`;return}let c=l.files.filter(m=>m.name),d=l.files.filter(m=>m.matches.length),u=`${d.reduce((m,w)=>m+w.matches.length,0).toLocaleString()} matching lines in ${d.length.toLocaleString()} files${c.length?` \xB7 ${c.length} file names`:""} \xB7 searched ${l.searched.toLocaleString()} files in ${l.ms} ms${l.truncated?" \xB7 stopped early, narrow the search":""}`,f=c.length?`<section class="sgroup"><h3 class="group-title">Files named like this</h3><div class="rows">${c.slice(0,100).map(m=>`<a class="row" href="${O(m.path)}"><span class="ico">${x("file",18)}</span><span class="nm">${h(m.path)}</span><span class="marks">${U(de(m.path,"file"))}</span></a>`).join("")}</div></section>`:"",g=d.map(m=>{let w=de(m.path,"file");return`<section class="sfile"><h3 class="group-title"><a href="${O(m.path)}">${h(m.path)}</a>${U(w)}<span class="faint">${m.matches.length}</span></h3><div class="slines">${m.matches.map(v=>`<a class="sline" href="${O(m.path,{line:String(v.line)})}"><span class="sn">${v.line}</span><code>${oo(v.text,v.hits)}</code></a>`).join("")}</div></section>`}).join("");$("results").innerHTML=`<p class="meta">${u}</p>${f}${g||(c.length?"":'<p class="empty">Nothing found.</p>')}`}var Ve=null,bs=()=>Ve=null;function io(t,e){let n=t.toLowerCase(),s=e.toLowerCase(),r=s.lastIndexOf("/")+1,a=0,o=0,i=0,l=[];for(let c of n){if(c===" ")continue;let d=s.indexOf(c,a);if(d<0)return null;i=d===a?i+1:0,o+=1+i*2+(d===0||"/._-".includes(s[d-1])?3:0)+(d>=r?2:0),l.push(d),a=d+1}return s.slice(r).startsWith(n)&&(o+=10),{total:o-e.length*.02,hits:l}}async function Qt(){if($("qo"))return;let t=document.createElement("div");t.id="qo",t.className="modal-back",t.innerHTML=`<div class="modal qo" role="dialog" aria-label="Go to a file"><label class="qo-in">${x("search")}<input id="qo-in" placeholder="Go to a file or folder\u2026" autocomplete="off" spellcheck="false" enterkeyhint="go"></label><div id="qo-list" class="qo-list"><p class="note">Loading\u2026</p></div><div class="qo-foot faint">\u2191\u2193 to move \xB7 Enter to open \xB7 Esc to close \xB7 type <b>?</b> then words to search inside files</div></div>`,document.body.append(t);let e=$("qo-in"),n=$("qo-list");e.focus();let s=()=>t.remove();if(t.onclick=l=>l.target===t&&s(),!Ve){let l=(await M("api/files")).files,c=new Set;for(let d of l)for(let p=ue(d);p&&!c.has(p);p=ue(p))c.add(p);Ve=[...l,...[...c].map(d=>d+"/")]}let r=[],a=0,o=()=>{let l=e.value.trim();if(l.startsWith("?")){r=l.length>1?[{search:l.slice(1).trim()}]:[],n.innerHTML=r.length?`<button class="qo-item on" data-i="0">${x("search",16)} Search everywhere for \u201C${h(r[0].search)}\u201D</button>`:'<p class="note">Type what to search for.</p>',a=0;return}l?r=Ve.map(c=>({p:c,s:io(l,c)})).filter(c=>c.s).sort((c,d)=>d.s.total-c.s.total).slice(0,60).map(c=>({p:c.p,hits:c.s.hits})):r=Ve.filter(c=>!c.endsWith("/")).slice(0,60).map(c=>({p:c,hits:[]})),a=Math.min(a,Math.max(0,r.length-1)),n.innerHTML=r.length?r.map((c,d)=>{let p=new Set(c.hits),u=[...c.p].map((m,w)=>p.has(w)?`<b>${h(m)}</b>`:h(m)).join(""),f=c.p.endsWith("/"),g=de(f?c.p.slice(0,-1):c.p,f?"folder":"file");return`<button class="qo-item${d===a?" on":""}${g?" s-"+g:""}" data-i="${d}">${x(f?"folder":"file",16)}<span class="nm">${u}</span>${U(g,f)}</button>`}).join(""):'<p class="note">No file matches. Start with ? to search inside files.</p>',n.querySelector(".on")?.scrollIntoView({block:"nearest"})},i=l=>{let c=r[l];c&&(s(),c.search?_({m:"search",q:c.search}):c.p.endsWith("/")?_({folder:c.p.slice(0,-1)}):location.hash=O(c.p))};e.oninput=kn(()=>{a=0,o()},30),e.onkeydown=l=>{l.key==="ArrowDown"||l.key==="ArrowUp"?(l.preventDefault(),a=Math.max(0,Math.min(r.length-1,a+(l.key==="ArrowDown"?1:-1))),n.querySelectorAll(".qo-item").forEach((c,d)=>c.classList.toggle("on",d===a)),n.querySelector(".on")?.scrollIntoView({block:"nearest"})):l.key==="Enter"?(l.preventDefault(),i(a)):l.key==="Escape"&&(l.preventDefault(),s())},n.onclick=l=>{let c=l.target.closest("[data-i]");c&&i(Number(c.dataset.i))},o()}var pe="",ft=()=>pe="",we=H("sort")||"name",lo=new Set(["ts","tsx","js","mjs","cjs","jsx","md","mdx","json","css","scss","html","vue","py","rs","go"]),co={png:"image",jpg:"image",jpeg:"image",gif:"image",webp:"image",svg:"image",mp3:"music",wav:"music",ogg:"music",mp4:"video",webm:"video",mov:"video",csv:"table",tsv:"table",pdf:"book",zip:"layers",gz:"layers"};function po(t,e){if(t.type==="folder")return`<span class="ico folder">${x("folder",18)}</span>`;let n=Q(t.name);return be.has(n)&&t.size<4*1048576&&!t.ghost?`<span class="ico"><img loading="lazy" src="${W(z(e,t.name))}" alt=""></span>`:lo.has(n)?`<span class="ico lang-${n}"><span class="ext">${h(n.slice(0,4))}</span></span>`:`<span class="ico">${x(co[n]||"file",18)}</span>`}function de(t,e){return e==="folder"?b.folderStates.get(t)||(te(t)?"ignored":""):b.changes.get(t)?.state||(te(t)?"ignored":"")}function U(t,e){return!t||t==="ignored"&&!e?"":e?t==="ignored"?"":`<span class="dot s-${t}" title="Something inside is ${ne[t].toLowerCase()}"></span>`:`<span class="badge s-${t}" title="${ne[t]}">${tt[t]||"\xB7"}</span>`}function ho(t){let e=(n,s)=>(s.type==="folder")-(n.type==="folder");return we==="size"?[...t].sort((n,s)=>e(n,s)||s.size-n.size):we==="mtime"?[...t].sort((n,s)=>e(n,s)||s.mtime-n.mtime):t}var Jt=new Map;async function ut(t){let{folder:e,open:n,view:s}=L(),r;try{r=await ye(e)}catch(k){t.innerHTML=`<p class="empty">${h(k.message)}</p>`;return}let a=[...b.changes.values()].filter(k=>k.state==="deleted"&&(k.path.includes("/")?k.path.slice(0,k.path.lastIndexOf("/")):"")===e).map(k=>({name:k.path.slice(k.path.lastIndexOf("/")+1),type:"file",size:0,mtime:0,ghost:!0})).filter(k=>!r.some(S=>S.name===k.name)),o=[...r,...a];b.settings.ignored==="hide"&&(o=o.filter(k=>!te(z(e,k.name))));let i=o.filter(k=>be.has(Q(k.name))).length,l=s?s==="grid":i>=4&&i>=o.length/2,c=ho(pe?o.filter(k=>k.name.toLowerCase().includes(pe)):o),d=e?e.split("/"):[],p=[`<button class="crumb${d.length?"":" current"}" data-f="">${h(b.info.name)}</button>`,...d.map((k,S)=>`<span class="sep">/</span><button class="crumb${S===d.length-1?" current":""}" data-f="${h(d.slice(0,S+1).join("/"))}">${h(k)}</button>`)].join(""),u=o.filter(k=>k.type==="folder").length,f=k=>{let S=z(e,k.name),C=k.ghost?"deleted":de(S,k.type),q=nt(S);return`<button class="${["row",k.name===n?"open":"",C?"s-"+C:"",k.ghost?"ghost":""].filter(Boolean).join(" ")}" data-e="${h(k.name)}" data-k="${k.type}" title="${h(k.name)}${C?" \xB7 "+ne[C]:""}">${po(k,e)}<span class="nm">${h(k.name)}${k.link?' <span class="faint">\u21AA</span>':""}</span><span class="marks">${q?`<span class="pill warn">${x("chat",12)}${q}</span>`:""}${U(C,k.type==="folder")}</span><span class="sz">${k.type==="folder"||k.ghost?"":je(k.size)}</span><span class="tm">${k.ghost?"deleted":Z(k.mtime)}</span></button>`},g=k=>{let S=z(e,k.name),C=Q(k.name),q=k.ghost?"deleted":de(S,k.type),j=k.type==="folder"?x("folder",34):be.has(C)&&!k.ghost?`<img loading="lazy" src="${W(S)}" alt="">`:`<span class="ext">.${h(C||"file")}</span>`;return`<button class="tile${k.name===n?" open":""}${q?" s-"+q:""}" data-e="${h(k.name)}" data-k="${k.type}" title="${h(k.name)}"><div class="thumb">${j}${U(q,k.type==="folder")}</div><div class="nm">${h(k.name)}</div></button>`},m=c.length?l?`<div class="grid">${c.map(g).join("")}</div>`:`<div class="rows">${c.map(f).join("")}</div>`:`<p class="empty">${pe?"Nothing matches.":"Nothing in this folder."}</p>`,w=r.find(k=>/^readme(\.md|\.markdown|\.txt)?$/i.test(k.name)&&k.type==="file"),v=(e?d[d.length-1]:b.info.name)+".zip";t.innerHTML=`<header class="head"><nav class="crumbs" aria-label="Folder trail">${p}</nav>
|
|
151
|
+
<a class="icon-btn" href="api/zip?p=${encodeURIComponent(e)}" download="${h(v)}" title="Download this folder as a .zip" aria-label="Download this folder as a .zip">${x("download")}</a></header>
|
|
152
|
+
<div class="head"><input class="filter" id="filter" type="search" placeholder="Filter this folder" value="${h(pe)}" aria-label="Filter this folder">
|
|
153
|
+
<div class="tools"><span class="seg"><button class="btn${l?"":" on"}" data-v="list" title="List" aria-label="List">${x("list",16)}</button><button class="btn${l?" on":""}" data-v="grid" title="Thumbnails" aria-label="Thumbnails">${x("grid",16)}</button></span>
|
|
154
|
+
<select class="btn" id="sort" aria-label="Sort by"><option value="name"${we==="name"?" selected":""}>Name</option><option value="mtime"${we==="mtime"?" selected":""}>Newest</option><option value="size"${we==="size"?" selected":""}>Largest</option></select>
|
|
155
|
+
<button class="btn" id="search-here" title="Search inside this folder">${x("search",16)}<span class="hide-sm">Search here</span></button></div>
|
|
156
|
+
<span class="meta">${u} folders \xB7 ${o.length-u} files</span></div>
|
|
157
|
+
${m}
|
|
158
|
+
${w&&!n?`<section class="card readme"><div class="card-head">${x("book",16)} ${h(w.name)}</div><article class="md" id="readme"></article></section>`:""}`;let y=$("filter");if(y.oninput=()=>{pe=y.value.toLowerCase();let k=y.selectionStart;ut(t).then(()=>{let S=$("filter");S.focus(),S.setSelectionRange(k,k)})},y.onkeydown=k=>{k.key==="Enter"&&t.querySelector("[data-e]")?.click()},$("sort").onchange=k=>{we=k.target.value,H("sort",we),ut(t)},$("search-here").onclick=()=>ht("here"),w&&!n){let k=z(e,w.name),S=k+"@"+w.mtime,C=q=>{let j=$("readme");!j||L().folder!==e||(/\.txt$/i.test(w.name)||!/\./.test(w.name)?j.innerHTML=`<pre>${h(q)}</pre>`:Ae(j,String(q),e))};Jt.has(S)?C(Jt.get(S)):($("readme").innerHTML='<div class="skeleton" style="width:50%"></div>',M(W(k)).then(q=>{Jt.set(S,String(q)),C(String(q))}).catch(q=>{let j=$("readme");j&&(j.innerHTML=`<p class="note">${h(q.message)}</p>`)}))}}function ws(t){t.addEventListener("click",e=>{let n=e.target,s=n.closest("[data-f]"),r=n.closest("[data-e]"),a=n.closest("[data-v]"),o=L();s?(pe="",_({folder:s.dataset.f})):a?R({view:a.dataset.v}):r&&(r.dataset.k==="folder"?(pe="",_({folder:z(o.folder,r.dataset.e)})):_({folder:o.folder,open:r.dataset.e}))})}var he=new Set(JSON.parse(H("open")||'[""]'));function $s(t,e,n){let s=he.has(t),r=s&&b.cache.has(t)?b.cache.get(t).filter(i=>i.type==="folder"):[];b.settings.ignored==="hide"&&(r=r.filter(i=>!te(z(t,i.name))));let a=t?de(t,"folder"):"",o=t?nt(t):0;return`<li><div class="item"><button class="twist" data-t="${h(t)}" aria-expanded="${s}" aria-label="${s?"Close":"Open"} ${h(e)}">${x("chevron-right",14)}</button><button class="node${n===t?" chosen":""}${a?" s-"+a:""}" data-c="${h(t)}">${x(s?"folder-open":"folder",16)}<span class="nm">${h(e)}</span>${o?`<span class="pill warn">${o}</span>`:""}${U(a,!0)}</button></div>${s?`<ul class="level">${r.map(i=>$s(z(t,i.name),i.name,n)).join("")}</ul>`:""}</li>`}async function Re(){let t=L().folder,e=t?t.split("/"):[];for(let n=0;n<=e.length;n++)he.add(e.slice(0,n).join("/"));await Promise.all([...he].map(n=>ye(n).catch(()=>he.delete(n)))),H("open",JSON.stringify([...he])),$("tree").innerHTML=$s("",b.info.name,t),$("tree").querySelector(".chosen")?.scrollIntoView({block:"nearest"})}function xs(){$("tree").addEventListener("click",t=>{let e=t.target.closest("[data-t]"),n=t.target.closest("[data-c]");if(e){let s=e.dataset.t;he.has(s)?he.delete(s):he.add(s),Re()}else n&&(ft(),_({folder:n.dataset.c}))})}var sn=t=>be.has(Q(t))||Q(t)==="svg",Yt=["conflict","modified","renamed","added","new","deleted"];function Qe(){let t=b.git;if(!t)return"";let e=[t.ahead?`\u2191${t.ahead}`:"",t.behind?`\u2193${t.behind}`:""].filter(Boolean).join(" ");return`<span class="branch" title="${h(t.upstream?`Tracking ${t.upstream}`:"No upstream")}">${x("git-branch",14)}${h(t.branch||"detached")}${t.head?` <span class="faint">${h(t.head)}</span>`:""}${e?` <span class="sync">${e}</span>`:""}</span>`}function ln(t){let e=b.git?.changes.length||0;return`<div class="tabs gtabs"><button class="btn${t==="changes"?" on":""}" data-gt="changes">Uncommitted${e?` <span class="count-pill">${e}</span>`:""}</button><button class="btn${t==="history"?" on":""}" data-gt="history">${x("clock",14)} History</button></div>`}function cn(t){t.querySelectorAll("[data-gt]").forEach(e=>e.onclick=()=>_({folder:L().folder,m:e.dataset.gt}))}var Ss=t=>t.innerHTML='<p class="empty">This folder isn\u2019t in a git repository, so there are no changes to show.</p>';async function Ts(t){let e=b.git;if(!e)return Ss(t);let s=L().q==="all",r={};for(let c of e.changes)r[c.state]=(r[c.state]||0)+1;let a=[...e.changes].sort((c,d)=>Yt.indexOf(c.state)-Yt.indexOf(d.state)||c.path.localeCompare(d.path)),o=e.changes.reduce((c,d)=>c+(d.add||0),0),i=e.changes.reduce((c,d)=>c+(d.del||0),0),l=Yt.filter(c=>r[c]).map(c=>`<span class="legend">${U(c)} ${r[c]} ${ne[c].toLowerCase()}</span>`).join("");if(t.innerHTML=`<header class="head"><h2 class="page-title">${x("diff")} Changes</h2>${Qe()}</header>
|
|
159
|
+
${ln("changes")}
|
|
160
|
+
${a.length?`<div class="head"><span class="meta"><span class="plus">+${o}</span> <span class="minus">\u2212${i}</span> in ${a.length} files</span>${l}<span class="grow"></span>
|
|
161
|
+
<button class="btn${s?"":" on"}" data-cv="">Files</button><button class="btn${s?" on":""}" data-cv="all">All diffs</button></div>
|
|
162
|
+
<div class="rows">${a.map(c=>Ls(c,O(c.path,{tab:"diff"}),c.staged)).join("")}</div>
|
|
163
|
+
${s?'<div id="all-diffs"></div>':""}`:'<p class="empty">Nothing has changed since the last commit. \u2728</p>'}`,cn(t),t.querySelectorAll("[data-cv]").forEach(c=>c.onclick=()=>R({q:c.dataset.cv})),!!a.length){if(!s){for(let c of a.slice(0,40)){let d="api/git/diff?p="+encodeURIComponent(c.path);sn(c.path)||M(d).then(p=>rn.set(d,p)).catch(()=>{})}return}a.length>80&&t.querySelector("#all-diffs").insertAdjacentHTML("beforebegin",`<p class="note">Showing the first 80 diffs of ${a.length.toLocaleString()} changed files.</p>`),Ms(t.querySelector("#all-diffs"),a.slice(0,80),{url:c=>"api/git/diff?p="+encodeURIComponent(c.path),link:c=>O(c.path,{tab:"diff"}),comments:!b.info.readOnly,key:"now",picture:c=>sn(c.path)&&{before:c.state==="new"||c.state==="added"?"":`api/git/raw?p=${encodeURIComponent(c.from||c.path)}`,after:c.state==="deleted"?"":W(c.path)}})}}function Ls(t,e,n){return`<a class="row s-${t.state}" href="${e}"><span class="ico">${x(t.state==="deleted"?"trash":"file",18)}</span><span class="nm">${h(t.path)}${t.from?` <span class="faint">\u2190 ${h(t.from)}</span>`:""}</span><span class="marks">${n?'<span class="pill" title="Staged">staged</span>':""}${U(t.state)}</span><span class="sz">${t.add!==void 0?`<span class="plus">+${t.add}</span> <span class="minus">\u2212${t.del||0}</span>`:""}</span><span class="tm">${ne[t.state]}</span></a>`}function Ms(t,e,{url:n,link:s,comments:r,key:a,picture:o}){let i=d=>a+":"+d.path;t.innerHTML=`<div class="diffs-bar"><span class="faint">${r?"Tap a line number to comment on that line.":""}</span><span class="grow"></span><button class="btn small" data-fold="all"></button></div>`;for(let d of e){let p=document.createElement("section"),u=Xe.has(i(d));p.className="diff-file"+(u?" folded":""),p.dataset.path=d.path,p.dataset.fk=i(d),p.innerHTML=`<h3 class="group-title"><button class="mini fold" data-fold="one" aria-expanded="${!u}" title="Collapse or expand" aria-label="Collapse or expand ${h(d.path)}">${x("chevron-down",16)}</button><a href="${s(d)}">${h(d.path)}</a>${U(d.state)}${d.add!==void 0?`<span class="sz faint"><span class="plus">+${d.add}</span> <span class="minus">\u2212${d.del||0}</span></span>`:""}<span class="ncom"></span><span class="grow"></span>${r?`<button class="mini" data-fcom title="Comment on the whole file" aria-label="Comment on ${h(d.path)}">${x("chat",14)}<span class="hide-sm"> Comment</span></button>`:""}</h3><div class="fold-body"><div class="fthreads"></div><div class="dbody"></div></div>`,t.append(p),r&&As(p);let f=p.querySelector(".dbody"),g=o?.(d);if(g){f.innerHTML=`<div class="compare">${g.before?`<figure><figcaption>Before</figcaption><div class="stage"><img src="${g.before}" alt="Before" loading="lazy"></div></figure>`:""}${g.after?`<figure><figcaption>${g.before?"After":"Added"}</figcaption><div class="stage"><img src="${g.after}" alt="After" loading="lazy"></div></figure>`:"<figure><figcaption>Deleted</figcaption></figure>"}</div>`;continue}let m=n(d),w=rn.get(m),v=y=>We(f,y,d.path,{comments:r,caption:d.path});w!==void 0?v(w):f.innerHTML='<p class="note">Loading\u2026</p>',!(w!==void 0&&a!=="now")&&M(m).then(y=>{rn.set(m,y),y!==w&&f.isConnected&&v(y)}).catch(y=>{w===void 0&&(f.innerHTML=`<p class="note">${h(y.message)}</p>`)})}let l=t.querySelector('[data-fold="all"]'),c=()=>{let d=e.some(p=>!Xe.has(i(p)));l.innerHTML=`${x(d?"chevron-right":"chevron-down",14)} ${d?"Collapse all":"Expand all"}`,l.dataset.to=d?"collapse":"expand"};c(),t.onclick=d=>{let p=d.target.closest("[data-fold], [data-fcom]");if(p){if(p.dataset.fold==="all"){let u=p.dataset.to==="collapse";for(let f of t.querySelectorAll(".diff-file"))en(f,u)}else if(p.dataset.fold==="one"){let u=p.closest(".diff-file");en(u,!u.classList.contains("folded"))}else{let u=p.closest(".diff-file");en(u,!1);let f=u.querySelector(".fthreads");f.querySelector(".composer")||f.insertAdjacentHTML("beforeend",ae(u.dataset.path,0,0)),f.querySelector(".composer textarea").focus()}c()}}}var rn=new Map,Xe=new Set(JSON.parse(uo("folded")||"[]"));function uo(t){try{return sessionStorage.getItem("folderview:"+t)}catch{return null}}function en(t,e){t.classList.toggle("folded",e),t.querySelector('[data-fold="one"]').setAttribute("aria-expanded",String(!e)),e?Xe.add(t.dataset.fk):Xe.delete(t.dataset.fk);try{sessionStorage.setItem("folderview:folded",JSON.stringify([...Xe]))}catch{}}function As(t){let e=t.dataset.path,n=e.includes("/")?e.slice(0,e.lastIndexOf("/")):"",s=t.querySelector(".fthreads"),r=s.querySelector(".composer");s.innerHTML=Fe(e,n),r&&s.append(r);let a=F(e).filter(o=>o.status==="open").length;t.querySelector(".ncom").innerHTML=a?`<span class="pill warn" title="Open comments">${x("chat",12)} ${a}</span>`:""}function Cs(t){for(let e of t.querySelectorAll("#all-diffs .diff-file"))e.querySelector(".fthreads")&&(As(e),Ze(e.querySelector(".diff")))}var an={local:["arrow-up","Not pushed","Only in this copy: not pushed yet"],pushed:["check","Pushed","On a remote"],incoming:["arrow-down","Not pulled","On the upstream, not pulled here yet"],unknown:["","",""]};function tn(t){let[e,n,s]=an[t.state];return`<a class="commit s-${t.state}" href="${h(on(t.hash))}"><code>${h(t.hash)}</code><span class="subj">${h(t.subject)}</span><span class="faint">${h(t.author)} \xB7 ${Z(t.time)}</span>${n?`<span class="push ${t.state}" title="${s}">${x(e,12)}<span class="hide-sm"> ${n}</span></span>`:""}</a>`}var on=t=>V({folder:L().folder,m:"history",q:t}),D=null,qs=()=>matchMedia("(max-width: 759px)").matches?document.scrollingElement:document.getElementById("main");async function Rs(t){if(!b.git)return Ss(t);let e=L().q;if(e)return fo(t,e);let n=D?.find||"";t.innerHTML=`<header class="head"><h2 class="page-title">${x("diff")} Changes</h2>${Qe()}</header>${ln("history")}
|
|
164
|
+
<div class="hist-find"><input class="filter" id="hist-q" type="search" placeholder="Find a commit: words from its message, or a hash" value="${h(n)}" aria-label="Find a commit"></div>
|
|
165
|
+
<div id="hist"><div class="skeleton" style="width:60%"></div></div>`,cn(t);let s=t.querySelector("#hist-q"),r=0;if(s.oninput=()=>{clearTimeout(r),r=setTimeout(()=>ys(t,s.value.trim()),300)},D&&D.head===b.git.head&&D.find===n){Es(t);let a=D.scroll||0;requestAnimationFrame(()=>qs().scrollTop=a)}else await ys(t,n)}async function ys(t,e){let n=t.querySelector("#hist");try{let s=await M("api/git/history"+(e?"?q="+encodeURIComponent(e):""));if(!n.isConnected)return;D={head:b.git.head,find:e,...s}}catch(s){n.innerHTML=`<p class="note">${h(s.message)}</p>`;return}Es(t)}function Es(t){let e=D,n=t.querySelector("#hist");if(!n)return;let s=e.find?`${e.commits.length}${e.more?"+":""} ${e.commits.length===1&&!e.more?"commit matches":"commits match"}.`:e.remotes?[e.upstream?`Tracking <code>${h(e.upstream)}</code>.`:"No upstream branch.",e.localTotal&&e.localTotal!=="0"?`${e.localTotal} not pushed.`:"Everything is pushed.",e.incomingTotal?`${e.incomingTotal} not pulled yet${e.incomingTotal>e.incoming.length?` (the newest ${e.incoming.length} below)`:""}.`:""].filter(Boolean).join(" "):"No remote: nothing here has been pushed anywhere.";n.innerHTML=`<p class="meta hist-sum">${s}</p>
|
|
166
|
+
${!e.find&&e.incoming.length?`<h3 class="group-title">${x("arrow-down",14)} Not pulled yet</h3><div class="commits">${e.incoming.map(tn).join("")}</div><h3 class="group-title">This branch</h3>`:""}
|
|
167
|
+
${e.commits.length?`<div class="commits" id="hist-list">${e.commits.map(tn).join("")}</div>`:`<p class="empty">${e.find?"No commit matches that.":"No commits yet."}</p>`}
|
|
168
|
+
<div id="hist-more-box">${e.more?'<button class="btn" id="hist-more">Show more</button>':""}</div>`,n.onclick=i=>{i.target.closest("a.commit")&&(D.scroll=qs().scrollTop)};let r=n.querySelector("#hist-more");if(!r)return;let a=async()=>{if(r.disabled||D!==e)return;r.disabled=!0,r.textContent="Loading\u2026";let i=await M(`api/git/history?skip=${e.commits.length}${e.find?"&q="+encodeURIComponent(e.find):""}`).catch(()=>null);if(D!==e||!r.isConnected||(r.disabled=!1,r.textContent="Show more",!i))return;let l=new Set(e.commits.map(d=>d.full)),c=i.commits.filter(d=>!l.has(d.full));e.commits.push(...c),e.more=i.more,n.querySelector("#hist-list")?.insertAdjacentHTML("beforeend",c.map(tn).join("")),e.more?r.getBoundingClientRect().top<innerHeight+600&&a():(o.disconnect(),r.remove())};r.onclick=a;let o=new IntersectionObserver(i=>i.some(l=>l.isIntersecting)&&a(),{rootMargin:"600px"});o.observe(r)}var Ge=120,nn=1e3,vs=new Map;async function fo(t,e){t.innerHTML=`<header class="head"><h2 class="page-title">${x("diff")} Changes</h2>${Qe()}</header>${ln("history")}<div id="commit"><div class="skeleton" style="width:60%"></div></div>`,cn(t);let n=vs.get(e);if(!n)try{n=await M("api/git/commit-info?h="+encodeURIComponent(e)),vs.set(e,n)}catch(p){t.querySelector("#commit").innerHTML=`<p class="note">${h(p.message)}</p>`;return}if(L().q!==e)return;let s=n.commit,r=D&&[...D.commits,...D.incoming].find(p=>p.full===s.full),[a,o,i]=r?an[r.state]:an.unknown,l=L().show?L().show==="all":n.files.length<=Ge,c=n.files.reduce((p,u)=>p+(u.add||0),0),d=n.files.reduce((p,u)=>p+(u.del||0),0);t.querySelector("#commit").innerHTML=`<div class="commit-card">
|
|
169
|
+
<div class="commit-top"><a class="btn small" href="${h(on(""))}">${x("chevron-left",14)} History</a><code class="hash" title="${h(s.full)}">${h(s.hash)}</code>${o?`<span class="push ${r.state}" title="${i}">${x(a,12)} ${o}</span>`:""}</div>
|
|
170
|
+
<h3 class="commit-subj">${h(s.subject)}</h3>
|
|
171
|
+
${s.body?`<pre class="commit-body">${h(s.body)}</pre>`:""}
|
|
172
|
+
<p class="meta">${h(s.author)} \xB7 ${new Date(s.time).toLocaleString()} (${Z(s.time)})${s.parents.length>1?` \xB7 merge of ${s.parents.map(p=>`<code>${h(p.slice(0,7))}</code>`).join(" + ")}, shown against the first`:""}</p>
|
|
173
|
+
</div>
|
|
174
|
+
${n.files.length?`<div class="head"><span class="meta"><span class="plus">+${c}</span> <span class="minus">\u2212${d}</span> in ${n.files.length} files</span><span class="grow"></span><button class="btn${l?"":" on"}" data-cv="files">Files</button><button class="btn${l?" on":""}" data-cv="all">All diffs</button></div>
|
|
175
|
+
${l?"":`<div class="rows">${n.files.slice(0,nn).map(p=>Ls(p,h(on(e)),!1)).join("")}</div>${n.files.length>nn?`<p class="note">Showing the first ${nn.toLocaleString()} of ${n.files.length.toLocaleString()} files.</p>`:""}`}
|
|
176
|
+
${l&&n.files.length>Ge?`<p class="note">Showing the first ${Ge} diffs of ${n.files.length.toLocaleString()} files.</p>`:""}
|
|
177
|
+
${l?'<div id="all-diffs"></div>':""}`:'<p class="empty">This commit changed nothing in this folder.</p>'}`,t.querySelectorAll("[data-cv]").forEach(p=>p.onclick=()=>R({show:p.dataset.cv})),t.querySelectorAll(".rows .row").forEach((p,u)=>{p.onclick=f=>{f.preventDefault(),R({show:"all"}),!(u>=Ge)&&requestAnimationFrame(()=>t.querySelectorAll("#all-diffs .diff-file")[u]?.scrollIntoView({block:"start"}))}}),!(!l||!n.files.length)&&Ms(t.querySelector("#all-diffs"),n.files.slice(0,Ge),{url:p=>`api/git/commit-diff?h=${encodeURIComponent(s.full)}&p=${encodeURIComponent(p.path)}${p.from?"&from="+encodeURIComponent(p.from):""}`,link:p=>O(p.path,{tab:"history"}),comments:!1,key:s.full,picture:p=>sn(p.path)&&{before:p.state==="added"||!s.parents[0]?"":`api/git/raw?p=${encodeURIComponent(p.from||p.path)}&rev=${s.parents[0]}`,after:p.state==="deleted"?"":`api/git/raw?p=${encodeURIComponent(p.path)}&rev=${s.full}`}})}var Ye=matchMedia("(max-width: 759px)"),js=t=>Ye.matches?document.scrollingElement:t,Is=new Map,dn="",Ee=matchMedia("(min-width: 1000px)"),hn=matchMedia("(min-width: 1280px)");function zs(){let t=b.settings.theme;document.documentElement.dataset.theme=t==="auto"?"":t}function mo(){let{open:t}=L(),e=$("app");e.classList.toggle("rail",Ee.matches),e.classList.toggle("split",!!t&&hn.matches),$("main").hidden=!!t&&!hn.matches,$("file").hidden=!t}var pn="";async function mt(t=!1){let e=L(),n=JSON.stringify([e.folder,e.m,e.q,e.show,e.scope,e.opts,e.inc,e.view,e.open]);if(!t&&n===pn)return;let s=n===pn?js($("main")).scrollTop:0;pn=n;let r=$("main");go(r)||(document.querySelectorAll("[data-nav]").forEach(a=>a.classList.toggle("on",a.dataset.nav===(e.m==="history"?"changes":e.m))),e.m==="search"&&e.q?await ks(r):e.m==="changes"?await Ts(r):e.m==="history"?await Rs(r):e.m==="review"?ts(r,e.q):await ut(r),Ye.matches&&e.open||(js(r).scrollTop=s))}var go=t=>{let e=document.activeElement;return e&&e.tagName==="TEXTAREA"&&t.contains(e)&&e.value.trim()};function Hs(){$("branch").innerHTML=Qe();let t=b.git?b.git.changes.length:0;$("changes-btn").hidden=!b.info.git,$("changes-count").textContent=String(t),$("changes-count").hidden=!t,Bt()}async function Je(){let t=L();Ye.matches&&t.open&&!dn&&Is.set(t.folder,document.scrollingElement.scrollTop);let e=Ye.matches&&!t.open&&dn;dn=t.open,mo(),await mt(e),t.open?dt($("file")):hs(),e&&(document.scrollingElement.scrollTop=Is.get(t.folder)||0),Ee.matches&&Re(),document.title=`${t.open||(t.m==="search"?"\u201C"+t.q+"\u201D":t.folder.split("/").pop()||b.info.name)} \u2014 folderview`}function ko(){let t=new EventSource("api/events");t.addEventListener("hello",()=>$("live").classList.add("on")),t.onerror=()=>$("live").classList.remove("on"),t.addEventListener("change",async e=>{let n=JSON.parse(e.data);for(let a of n.folders)b.cache.delete(a);n.files.length&&bs(),n.git&&await xt(),Hs();let s=L(),r=s.open?(s.folder?s.folder+"/":"")+s.open:"";(s.m==="changes"||s.m==="history"?n.git:!s.m&&(n.folders.includes(s.folder)||n.git))&&await mt(!0),r&&n.files.includes(r)&&dt($("file"),!0),Ee.matches&&Re()}),t.addEventListener("comments",async()=>{await ze(),ee("comments")})}Ie("comments",()=>{Bt(),fs($("file"));let t=L();t.m==="review"||!t.m?mt(!0):t.m==="changes"&&Cs($("main")),Ee.matches&&Re()});Ie("settings",()=>{zs(),mt(!0),L().open&&dt($("file"),!0),Ee.matches&&Re()});function bo(){let t=$("settings-pop");if(t)return t.remove();let e=b.settings,n=document.createElement("div");n.id="settings-pop",n.className="pop",n.innerHTML=`<h3>Settings</h3>
|
|
178
|
+
<label>Theme <select data-s="theme"><option value="auto">Match the system</option><option value="dark">Dark</option><option value="light">Light</option></select></label>
|
|
179
|
+
<label>Ignored files <select data-s="ignored"><option value="dim">Show dimmed</option><option value="hide">Hide</option></select></label>
|
|
180
|
+
<label class="check"><input type="checkbox" data-s="wrap"> Wrap long lines</label>
|
|
181
|
+
<label class="check"><input type="checkbox" data-s="review"> Review mode (click a line to comment)</label>
|
|
182
|
+
<label class="check"><input type="checkbox" data-s="resolved"> Show resolved comments in files</label>
|
|
183
|
+
<label>Your name on comments <input data-s="author" placeholder="${h(b.info.author)}" value="${h(e.author)}"></label>
|
|
184
|
+
<h3>Shortcuts</h3>
|
|
185
|
+
<dl class="keys"><dt><kbd>Ctrl</kbd> <kbd>P</kbd></dt><dd>Go to a file</dd><dt><kbd>/</kbd></dt><dd>Search</dd><dt><kbd>Esc</kbd></dt><dd>Close the file</dd><dt><kbd>[</kbd> <kbd>]</kbd></dt><dd>Previous / next file (\u2190 \u2192 on a picture; swipe on a phone)</dd><dt><kbd>Shift</kbd>-click</dt><dd>Select a range of lines</dd><dt><kbd>Ctrl</kbd> <kbd>Enter</kbd></dt><dd>Save a comment</dd></dl>
|
|
186
|
+
<p class="faint">folderview ${h(b.info.version||"")} \xB7 ${h(b.info.root||"")}</p>`,document.body.append(n);for(let s of n.querySelectorAll("[data-s]")){let r=s.dataset.s;s.type==="checkbox"?s.checked=!!e[r]:s.value=e[r],s.onchange=()=>{xe(r,s.type==="checkbox"?s.checked:s.value.trim()),ee("settings")}}setTimeout(()=>{let s=r=>{!n.contains(r.target)&&r.target!==$("settings-btn")&&(n.remove(),removeEventListener("pointerdown",s))};addEventListener("pointerdown",s)})}addEventListener("keydown",t=>{let e=/^(INPUT|TEXTAREA|SELECT)$/.test(document.activeElement?.tagName||"");(t.ctrlKey||t.metaKey)&&(t.key==="p"||t.key==="k")?(t.preventDefault(),Qt()):t.key==="/"&&!e?(t.preventDefault(),ht()):!e&&!t.ctrlKey&&!t.metaKey&&!t.altKey&&L().open&&(t.key==="["||t.key==="]"||$("picwrap")&&(t.key==="ArrowLeft"||t.key==="ArrowRight"))?(t.preventDefault(),Ke(t.key==="["||t.key==="ArrowLeft"?-1:1)):t.key==="Escape"&&!e&&!$("qo")&&L().open?R({open:"",tab:"",line:""}):t.key==="Escape"&&document.activeElement===$("q")&&$("q").blur()});function wo(){let t=Number(H("tree"))||280;$("app").style.setProperty("--tree",t+"px"),$("splitter").onpointerdown=e=>{e.preventDefault();let n=r=>{let a=Math.min(560,Math.max(180,r.clientX));$("app").style.setProperty("--tree",a+"px"),H("tree",String(a))},s=()=>{removeEventListener("pointermove",n),removeEventListener("pointerup",s)};addEventListener("pointermove",n),addEventListener("pointerup",s)}}async function $o(){zs();try{b.info=await M("api/info")}catch(t){$("main").innerHTML=`<p class="empty">Can't reach the filescope server: ${h(t.message)}</p>`;return}$("repo").textContent=b.info.name,$("search-icon").innerHTML=x("search",16),$("qo-btn").insertAdjacentHTML("afterbegin",x("file")),$("changes-btn").insertAdjacentHTML("afterbegin",x("diff")),$("review-btn").insertAdjacentHTML("afterbegin",x("chat")),$("settings-btn").innerHTML=x("settings"),new ResizeObserver(()=>document.documentElement.style.setProperty("--bar-h",$("bar").offsetHeight+"px")).observe($("bar")),Ye.onchange=()=>Je(),$("home").onclick=()=>{ft(),_({folder:""})},document.querySelectorAll("[data-nav]").forEach(t=>t.onclick=()=>{let e=L();e.m===t.dataset.nav||e.m==="history"&&t.dataset.nav==="changes"?_({folder:e.folder}):_({folder:e.folder,m:t.dataset.nav})}),$("qo-btn").onclick=()=>Qt(),$("settings-btn").onclick=bo,xs(),ws($("main")),gs(),wo(),await Promise.all([xt(),ze()]),Hs(),addEventListener("hashchange",Je),Ee.onchange=()=>Je(),hn.onchange=()=>Je(),await Je(),ko(),b.info.readOnly&&le("Read-only: comments can\u2019t be added")}$o();
|