folderview 0.0.0-stage → 0.1.0
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 +270 -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 +169 -0
- package/dist/client/index.html +48 -0
- package/dist/config.js +322 -0
- package/dist/files.js +178 -0
- package/dist/git.js +232 -0
- package/dist/glob.js +89 -0
- package/dist/review.js +261 -0
- package/dist/search.js +136 -0
- package/dist/server.js +420 -0
- package/dist/watch.js +69 -0
- package/dist/zip.js +100 -0
- package/package.json +61 -4
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import{a as Gt}from"./chunks/chunk-FTY6WLQF.js";import"./chunks/chunk-7FMWBHZO.js";var w=t=>document.getElementById(t),h=t=>String(t).replace(/[&<>"']/g,e=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[e]),oe=t=>{let e=lt(t),n=e.lastIndexOf(".");return n>0?e.slice(n+1).toLowerCase():""},lt=t=>t.slice(t.lastIndexOf("/")+1),ie=t=>t.includes("/")?t.slice(0,t.lastIndexOf("/")):"",z=(...t)=>t.filter(Boolean).join("/"),as=t=>t.split("/").map(encodeURIComponent).join("/"),V=t=>"raw/"+as(t);function ct(t){let e=[];for(let n of t.split("/"))n===".."?e.pop():n&&n!=="."&&e.push(n);return e.join("/")}var Me=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",J=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()},Xt=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});function I(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 R(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 D(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()}ke(e)}var Qt;function ke(t){let e=w("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(Qt),Qt=setTimeout(()=>e.classList.remove("show"),1800)}function Jt(t,e){let n;return(...s)=>{clearTimeout(n),n=setTimeout(()=>t(...s),e)}}var it=new Map,pt=(t,e)=>(it.get(t)||it.set(t,new Set).get(t)).add(e),K=(t,e)=>it.get(t)?.forEach(n=>n(e));var x={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:I("theme")||"auto",ignored:I("ignored")||"dim",wrap:I("wrap")==="1",review:I("review")==="1",resolved:I("resolved")!=="0",author:I("author")||""}};function be(t,e){x.settings[t]=e,I(t,typeof e=="boolean"?e?"1":"0":e)}var De=()=>x.settings.author||x.info.author||"reviewer",en=["open","view","m","q","scope","line","tab","opts","inc"];function M(){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 en)r[a]=s.get(a)||"";return r}function le(t){let e=new URLSearchParams;for(let s of en)t[s]&&e.set(s,t[s]);let n=e.toString();return"#/"+(t.folder||"").split("/").map(encodeURIComponent).join("/")+(n?"?"+n:"")}function H(t){location.hash=le({view:M().view,...t})}function q(t,e=!1){let n=le({...M(),...t});e?history.replaceState(null,"",n):location.hash=n}var P=(t,e={})=>le({folder:ie(t),open:t.slice(t.lastIndexOf("/")+1),...e}),os=t=>[...t].sort((e,n)=>(n.type==="folder")-(e.type==="folder")||Xt.compare(e.name,n.name));async function Fe(t){if(x.cache.has(t))return x.cache.get(t);let e=await R("api/list?p="+encodeURIComponent(t)),n=os(e.entries);return x.cache.set(t,n),n}var Yt={conflict:6,deleted:5,modified:4,renamed:3,added:2,new:1};async function dt(){if(x.info.git)try{let t=await R("api/git/status");x.git=t,x.changes=new Map(t.changes.map(n=>[n.path,n])),x.ignored=t.ignored;let e=new Map;for(let n of t.changes){let s=ie(n.path);for(;;){let r=e.get(s);if((!r||Yt[n.state]>Yt[r])&&e.set(s,n.state),!s)break;s=ie(s)}}x.folderStates=e}catch{x.git=null}}function Y(t){for(let e of x.ignored)if(e.endsWith("/")?t===e.slice(0,-1)||t.startsWith(e):t===e)return!0;return!1}var We={new:"U",added:"A",modified:"M",deleted:"D",renamed:"R",conflict:"!"},G={new:"New (untracked)",added:"Added",modified:"Changed",deleted:"Deleted",renamed:"Renamed",conflict:"Conflict",ignored:"Ignored"};async function Ae(){try{x.comments=(await R("api/comments")).comments}catch{x.comments=[]}}var ce=t=>x.comments.filter(e=>e.path===t);function Ue(t){let e=t?t+"/":"";return x.comments.filter(n=>n.status==="open"&&(n.path===t||n.path.startsWith(e))).length}function mt(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var ue=mt();function hn(t){ue=t}var de={exec:()=>null};function pe(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 S(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(j.caret,"$1"),n=n.replace(r,o),s},getRegex:()=>new RegExp(n,e)};return s}var un=((t="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+t)}catch{return!1}})(),j={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:pe(t=>new RegExp(`^ {0,${t}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:pe(t=>new RegExp(`^ {0,${t}}((?:-[ ]*){3,}|(?:_[ ]*){3,}|(?:\\*[ ]*){3,})(?:\\n+|$)`)),fencesBeginRegex:pe(t=>new RegExp(`^ {0,${t}}(?:\`\`\`|~~~)`)),headingBeginRegex:pe(t=>new RegExp(`^ {0,${t}}#{1,6}(?:\\s|$)`)),pedanticHeadingBeginRegex:pe(t=>new RegExp(`^ {0,${t}}#`)),htmlBeginRegex:pe(t=>new RegExp(`^ {0,${t}}(?:</?(?:${qe})(?: +|$|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)`,"i")),blockquoteBeginRegex:pe(t=>new RegExp(`^ {0,${t}}>`)),nestedContainerMarkers:/^(?: {0,3}(?:(?:[*+-]|\d{1,9}[.)])[ \t]+|>[ \t]?))+/},is=/^(?:[ \t]*(?:\n|$))+/,ls=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,cs=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}(?:(?=`)\1`*|(?=~)\1~*) *(?=\n|$)|$)/,Ce=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,ps=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,gt=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,fn=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |fences|blockquote|heading|hr|html|table))+?)\n {0,3}(=+|-+)[ \t]*(?:\n+|$)/,mn=S(fn).replace(/bull/g,gt).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(),ds=S(fn).replace(/bull/g,gt).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(),kt=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/,hs=/^[^\n]+/,bt=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\\n]|\n(?![ \t]*\n))+/,us=S(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",bt).replace("title",/(?:"(?:\\[\s\S]|[^"\\])*"|'(?:\\[\s\S]|[^'\\\n]|\n(?!\n))*'|\((?:\\[\s\S]|[^()\\])*\))/).getRegex(),fs=S(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,gt).getRegex(),qe="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",wt=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,ms=S("^ {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",wt).replace("tag",qe).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),gn=t=>S(kt).replace("hr",Ce).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",qe).getRegex(),gs=gn(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/),ks=gn(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/),bs=S(/^( {0,3}> ?(?:(?![ \t]*(?:\n|$))(paragraph)|[^\n]*)(?:\n|$))+/).replace("paragraph",ks).getRegex(),xt={blockquote:bs,code:ls,def:us,fences:cs,heading:ps,hr:Ce,html:ms,lheading:mn,list:fs,newline:is,paragraph:gs,table:de,text:hs},tn=S("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Ce).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",qe).getRegex(),ws={...xt,lheading:ds,table:tn,paragraph:S(kt).replace("hr",Ce).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",tn).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",qe).getRegex()},xs={...xt,html:S(`^ *(?:comment(?: *\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1>(?: *\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?>(?: *\\n{2,}|\\s*$))`).replace("comment",wt).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:de,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:S(kt).replace("hr",Ce).replace("heading",` *#{1,6} *[^
|
|
2
|
+
]`).replace("lheading",mn).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},$s=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ys=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,kn=/^( {2,}|\\)\n(?!\s*$)[ \t]*/,vs=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,U=/[\p{P}\p{S}]/u,$e=/[\s\p{P}\p{S}]/u,je=/[^\s\p{P}\p{S}]/u,Ss=S(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,$e).getRegex(),Ls=/[\p{Pi}\p{Ps}"']/u,bn=/(?!~)[\p{P}\p{S}]/u,Ts=/(?!~)[\s\p{P}\p{S}]/u,Ms=/(?:[^\s\p{P}\p{S}]|~)/u,As=S(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",un?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),wn=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,Rs=S(wn,"u").replace(/punct/g,U).getRegex(),Es=S(wn,"u").replace(/punct/g,bn).getRegex(),Cs=/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,qs=S(Cs,"u").replace(/openQuote/g,Ls).replace(/punct/g,U).getRegex(),xn="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",js=S(xn,"gu").replace(/notPunctSpace/g,je).replace(/punctSpace/g,$e).replace(/punct/g,U).getRegex(),Is=S(xn,"gu").replace(/notPunctSpace/g,Ms).replace(/punctSpace/g,Ts).replace(/punct/g,bn).getRegex(),zs="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)",_s=S(zs,"gu").replace(/notPunctSpace/g,je).replace(/punctSpace/g,$e).replace(/punct/g,U).getRegex(),Hs=S("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,je).replace(/punctSpace/g,$e).replace(/punct/g,U).getRegex(),Ps="^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)",Os=S(Ps,"gu").replace(/notPunctSpace/g,je).replace(/punctSpace/g,$e).replace(/punct/g,U).getRegex(),Ns=S(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,U).getRegex(),Bs="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",Ds=S(Bs,"gu").replace(/notPunctSpace/g,je).replace(/punctSpace/g,$e).replace(/punct/g,U).getRegex(),Fs=S(/\\(punct)/,"gu").replace(/punct/g,U).getRegex(),Ws=S(/(`+)(?:[^`]|[^`][\s\S]*?[^`])\1(?!`)|`+|\\(punct)/,"gu").replace(/punct/g,U).getRegex(),Us=S(/^<(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(),Zs=S(wt).replace("(?:-->|$)","-->").getRegex(),Vs=S("^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",Zs).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),$n=/\[(?:\\[\s\S]|[^\[\]\\])*\]/,Ke=S(/(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/).replace("brackets",$n).getRegex(),Ks=S(/^!?\[(label)\]\([ \t\n]*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?[ \t\n]*\)/).replace("label",Ke).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace("title",/"(?:\\[\s\S]|[^"\\])*"|'(?:\\[\s\S]|[^'\\])*'|\((?:\\[\s\S]|[^)\\])*\)/).getRegex(),Gs=S(/^!?\[(label)\]\[(ref)\]/).replace("label",Ke).replace("ref",bt).getRegex(),Qs=S(/^!?\[(ref)\](?:\[\])?/).replace("ref",bt).getRegex(),nn=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\]){1,999}/,Xs=S(/(?:[^\[\]\\`]*(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\]))){0,999}?[^\[\]\\`]*?/).replace("brackets",$n).getRegex(),Js=S("reflink|nolink(?!\\()","g").replace("reflink",S(/^!?\[(label)\]\[(ref)\]/).replace("label",Xs).replace("ref",nn).getRegex()).replace("nolink",S(/^!?\[(ref)\](?:\[\])?/).replace("ref",nn).getRegex()).getRegex(),sn=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Ys=/[A-Za-z0-9._+-]+@[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/,er=S(/(?:mailto:email|xmpp:email(?:\/[A-Za-z0-9@.]+)?)/).replace(/email/g,Ys).getRegex(),$t={_backpedal:de,anyPunctuation:Fs,anyPunctuationOutsideCode:Ws,autolink:Us,blockSkip:As,br:kn,code:ys,del:de,delLDelim:de,delRDelim:de,emStrongLDelim:Rs,emStrongRDelimAst:js,emStrongRDelimUnd:Hs,escape:$s,link:Ks,nolink:Qs,punctuation:Ss,reflink:Gs,reflinkSearch:Js,tag:Vs,text:vs,url:de},tr={...$t,emStrongLDelim:qs,emStrongRDelimAst:_s,emStrongRDelimUnd:Os,link:S(/^!?\[(label)\]\((.*?)\)/).replace("label",Ke).getRegex(),reflink:S(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Ke).getRegex()},ht={...$t,emStrongRDelimAst:Is,emStrongLDelim:Es,delLDelim:Ns,delRDelim:Ds,url:S(/^emailProtocol|^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("emailProtocol",er).replace("protocol",sn).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:S(/^(?:[^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",sn).replace(/emailProtocol/g,/(?:mailto|xmpp):/).replace("wwwStart",un?"(?<![^\\s*_~(])www\\.":"www\\.").getRegex()},nr={...ht,br:S(kn).replace("{2,}","*").getRegex(),text:S(ht.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},Ze={normal:xt,gfm:ws,pedantic:xs},Re={normal:$t,gfm:ht,breaks:nr,pedantic:tr},sr={"&":"&","<":"<",">":">",'"':""","'":"'"},rn=t=>sr[t];function N(t,e){if(e){if(j.escapeTest.test(t))return t.replace(j.escapeReplace,rn)}else if(j.escapeTestNoEncode.test(t))return t.replace(j.escapeReplaceNoEncode,rn);return t}function rr(t){return j.numericCharacterReference.test(t)?t.replace(j.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 an(t){try{t=encodeURI(t).replace(j.percentDecode,"%")}catch{return null}return t}function on(t,e){let n=t.replace(j.findPipe,(a,o,i)=>{let l=!1,p=o;for(;--p>=0&&i[p]==="\\";)l=!l;return l?"|":" |"}),s=n.split(j.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(j.slashPipe,"|");return s}function Q(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&&j.blankLine.test(e[n]);)n--;return e.length-n<=2?t:e.slice(0,n+1).join(`
|
|
4
|
+
`)}function Ge(t){return t.trim().replace(j.multipleSpaceGlobal," ").toLowerCase().toUpperCase().toLowerCase()}function cn(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 xe=new WeakMap;function yt(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 ar(t,e){let n=yt(e),s=xe.get(t);s?s.push(n):xe.set(t,[n])}function or(t){let e=xe.get(t);e&&(e.pop(),e.length===0&&xe.delete(t))}function ir(t,e,n){let s=xe.get(t)?.at(-1);return s&&s.maskedSrc===e?s.lastPossibleEmStrongCloserIndex[n]:yt(e).lastPossibleEmStrongCloserIndex[n]}function lr(t,e){let n=xe.get(t)?.at(-1);return n&&n.maskedSrc===e?n.lastPossibleDelCloserIndex:yt(e).lastPossibleDelCloserIndex}function Ve(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 pn(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)==="!",p=s.state.inLink,c=s.state.linkEmitted,d=s.state.inRawBlock;s.state.inLink=!0,s.state.linkEmitted=!1;let u=s.inlineTokens(i),k=s.state.linkEmitted;if(s.state.linkEmitted=c,s.state.inLink=p,!l){if(k){s.state.inRawBlock=d;return}s.state.linkEmitted=!0}return{type:l?"image":"link",raw:n,href:a,title:o,text:i,tokens:u}}function cr(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 dn(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 we=class{options;rules;lexer;constructor(t){this.options=t||ue}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=cr(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=Q(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceTabChar.test(s))&&(n=s.trim())}return{type:"heading",raw:Q(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:Q(e[0],`
|
|
10
|
+
`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let n=Q(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 p=i.join(`
|
|
13
|
+
`),c=p.replace(this.rules.other.blockquoteMarkerWhitespace,(k,g,f)=>g+Ve(f,g.length)).replace(this.rules.other.blockquoteSetextReplace,`
|
|
14
|
+
$1`).replace(this.rules.other.blockquoteSetextReplace2,"");s=s?`${s}
|
|
15
|
+
${p}`:p,r=r?`${r}
|
|
16
|
+
${c}`:c;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,a,!0),this.lexer.state.top=d,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 k=u,g=n.join(`
|
|
17
|
+
`),f=k.raw+`
|
|
18
|
+
`+g.replace(this.rules.other.blockquoteSetextReplace2,""),b=this.blockquote(f);a[a.length-1]=b;let v=f.substring(b.raw.length).replace(/^\n/,""),y=v?v.split(`
|
|
19
|
+
`).length:0,m=y?n.slice(0,-y):n;if(m.length>0&&(s=`${s}
|
|
20
|
+
${m.join(`
|
|
21
|
+
`)}`),r=r.substring(0,r.length-k.text.length)+b.text,n=n.slice(m.length),n.length>0&&this.rules.other.blockquoteStart.test(n[0]))continue;break}else if(u?.type==="list"){let k=u,g=k.raw+`
|
|
22
|
+
`+n.join(`
|
|
23
|
+
`),f=this.list(g);a[a.length-1]=f;let b=f.raw.length>k.raw.length?g.slice(k.raw.length+1,f.raw.length).split(`
|
|
24
|
+
`).length:0;if(b>0){let v=n.slice(0,b).join(`
|
|
25
|
+
`);s=`${s}
|
|
26
|
+
${v}`,r=`${r}
|
|
27
|
+
${v}`}n=n.slice(b);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 c=!1,d="";if(!(e=i.exec(t))||this.rules.block.hr.test(t))break;let u=s();t=t.substring(e[0].length);let k=e[2].split(`
|
|
28
|
+
`,1)[0],g=e[1].length,f=this.options.pedantic?Ve(k,g):k.replace(this.rules.other.leadingSpaceTab,L=>Ve(L,g)),b=t.split(`
|
|
29
|
+
`,1)[0],v=!f.trim(),y=0;if(this.options.pedantic?(y=2,d=f.trimStart()):v?y=g+1:(y=f.search(this.rules.other.nonSpaceChar),y=y>4?1:y,d=f.slice(y),y+=g),v&&this.rules.other.blankLine.test(b)&&(t=t.substring(b.length+1),c=!0),!c){let L=this.rules.other.nextBulletRegex(y),E=this.rules.other.hrRegex(y),C=this.rules.other.fencesBeginRegex(y),T=this.options.pedantic?this.rules.other.pedanticHeadingBeginRegex(y):this.rules.other.headingBeginRegex(y),O=this.rules.other.htmlBeginRegex(y),ae=this.rules.other.blockquoteBeginRegex(y),me=!1;for(;t;){let Kt=t.split(`
|
|
30
|
+
`,1)[0],ge;if(b=Kt,this.options.pedantic?(b=b.replace(this.rules.other.listReplaceNesting," "),ge=b):ge=b.replace(this.rules.other.leadingSpaceTab,at=>Ve(at)),C.test(b)||T.test(b)||O.test(b)||ae.test(b)||L.test(b)||E.test(b))break;if(ge.search(this.rules.other.nonSpaceChar)>=y||!b.trim())d+=`
|
|
31
|
+
`+ge.slice(y),me=!1;else{if(v||f.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||C.test(f)||T.test(f)||O.test(f)||E.test(f))break;if(!this.options.pedantic&&!me){let ot=f.replace(this.rules.other.nestedContainerMarkers,"");if(this.rules.block.fences.test(ot)||this.rules.block.heading.test(ot)||this.rules.block.hr.test(ot))break}let at=!this.options.pedantic&&/^ {0,3}(?:=+|-+) *$/.test(b)&&this.rules.block.lheading.test(`${f}
|
|
32
|
+
${b}`)?` ${ge.replace(/^ {0,3}/,"")}`:b;d+=`
|
|
33
|
+
`+at,me=!0}v=!b.trim(),t=t.substring(Kt.length+1),f=ge.slice(y)}}let m=n.slice(u,s());o.loose||(l?o.loose=!0:this.rules.other.doubleBlankLine.test(m)&&(l=!0)),o.items.push({type:"list_item",raw:m,task:!!this.options.gfm&&this.rules.other.listIsTask.test(d),loose:!1,text:d,tokens:[]})}let p=o.items.at(-1);if(p)p.raw=p.raw.trimEnd(),p.text=p.text.trimEnd();else return;o.raw=n.slice(0,s()).trimEnd();for(let c of o.items)if(this.lexer.state.top=!1,c.tokens=this.lexer.blockTokens(c.text,[]),!o.loose){let d=c.tokens.filter(k=>k.type==="space"),u=d.length>0&&d.some(k=>this.rules.other.anyLine.test(k.raw));o.loose=u}for(let c of o.items){let d=c.tokens[0];if(c.task&&(d?.type==="text"||d?.type==="paragraph")){c.text=c.text.replace(this.rules.other.listReplaceTask,""),d.raw=d.raw.replace(this.rules.other.listReplaceTask,""),d.text=d.text.replace(this.rules.other.listReplaceTask,"");for(let k=this.lexer.inlineQueue.length-1;k>=0;k--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[k].src)){this.lexer.inlineQueue[k].src=this.lexer.inlineQueue[k].src.replace(this.rules.other.listReplaceTask,"");break}let u=this.rules.other.listTaskCheckbox.exec(c.raw);if(u){let k={type:"checkbox",raw:u[0]+" ",checked:u[0]!=="[ ]"};c.checked=k.checked,o.loose?c.tokens[0]&&["paragraph","text"].includes(c.tokens[0].type)&&"tokens"in c.tokens[0]&&c.tokens[0].tokens?(c.tokens[0].raw=k.raw+c.tokens[0].raw,c.tokens[0].text=k.raw+c.tokens[0].text,c.tokens[0].tokens.unshift(k)):c.tokens.unshift({type:"paragraph",raw:k.raw,text:k.raw,tokens:[k]}):c.tokens.unshift(k)}}else c.task&&(c.task=!1)}if(o.loose)for(let c of o.items){c.loose=!0;for(let d of c.tokens)d.type==="text"&&(d.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])&&cn(e[2],"()")!==-1)return;let n=Ge(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:Q(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=on(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:Q(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(on(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:Q(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&&dn(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=Q(s.slice(0,-1),"\\");if((s.length-i.length)%2===0)return}else{let i=cn(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=Q(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)),pn(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&&dn(t,n[1],s,this.rules))return;let r=e[Ge(n[2]||n[1])];if(!r){let a=n[0].charAt(0);return{type:"text",raw:a,text:a}}return pn(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)??"",p=l==="*"||l==="_"||!!this.rules.inline.punctuation.exec(l);i<o&&(n=l);let c=i<o?p:n==="*"||n==="_"||!!this.rules.inline.punctuation.exec(n);if(s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))return;let d=s[1]||s[3]||"";if(!d||!n||c){let u=[...s[0]].length-1,k,g,f=u,b=0,v=o-i+u,y=!this.options.pedantic&&!!l.trim()&&(!!d||r==="*"&&!p);if(r!=="*"&&r!=="_")return;let m=r==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd,L=ir(this,e,r),E=e.length-t.length+u;if(L<E)return;e=e.slice(-1*t.length+u);let C=L-E;for(m.lastIndex=0;(s=m.exec(e))!==null&&!(s.index>C);){if(k=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!k)continue;if(g=[...k].length,s[3]||s[4]){f+=g;continue}else if(s[5]||s[6]||y){if(a&&(s[5]||s[6]))break;if(v%3&&!((v+g)%3)){b+=g;continue}}if(f-=g,f>0)continue;g=Math.min(g,g+f+b);let T=[...s[0]][0].length,O=t.slice(0,u+s.index+T+g);if(Math.min(u,g)%2){let me=O.slice(1,-1);return{type:"em",raw:O,text:me,tokens:this.lexer.inlineTokens(me)}}let ae=O.slice(2,-2);return{type:"strong",raw:O,text:ae,tokens:this.lexer.inlineTokens(ae)}}}}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,p=lr(this,e),c=e.length-t.length+r;if(p<c)return;e=e.slice(-1*t.length+r);let d=p-c;for(l.lastIndex=0;(s=l.exec(e))!==null&&!(s.index>d);){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,k=t.slice(0,r+s.index+u+o),g=k.slice(r,-r);return{type:"del",raw:k,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]:rr(e[0]),escaped:n}}}},F=class ut{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||ue,this.options.tokenizer=this.options.tokenizer||new we,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:j,block:Ze.normal,inline:Re.normal};this.options.pedantic?(n.block=Ze.pedantic,n.inline=Re.pedantic):this.options.gfm&&(n.block=Ze.gfm,this.options.breaks?n.inline=Re.breaks:n.inline=Re.gfm),this.tokenizer.rules=n}static get rules(){return{block:Ze,inline:Re}}static lex(e,n){return new ut(n).lex(e)}static lexInline(e,n){return new ut(n).inlineTokens(e)}lex(e){e=e.replace(j.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(j.tabCharGlobal," ").replace(j.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,p=e.slice(1),c;this.options.extensions.startBlock.forEach(d=>{c=d.call({lexer:this},p),typeof c=="number"&&c>=0&&(l=Math.min(l,c))}),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,Ge(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!==we.prototype.emStrong||this.tokenizer.del!==we.prototype.del?this.#s(e):e;ar(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(p=>(i=p.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 p=s.at(-1);i.type==="text"&&p?.type==="text"?(p.raw+=i.raw,p.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 p=1/0,c=e.slice(1),d;this.options.extensions.startInline.forEach(u=>{d=u.call({lexer:this},c),typeof d=="number"&&d>=0&&(p=Math.min(p,d))}),p<1/0&&p>=0&&(l=e.substring(0,p+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 p=s.at(-1);p?.type==="text"?(p.raw+=i.raw,p.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),p=i.index+i[0].length;if(e.charAt(l)==="<"){let c=e.slice(l),d=s.exec(c)||r.exec(c);if(!d){n.lastIndex=l+1;continue}p=l+d[0].length,n.lastIndex=p}a+=e.slice(o,l)+"["+"a".repeat(p-l-2)+"]",o=p}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,Ge(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)}},Qe=class{options;parser;constructor(t){this.options=t||ue}space(t){return""}code({text:t,lang:e,escaped:n}){let s=(e||"").match(j.notSpaceStart)?.[0],r=t?t.replace(j.endingNewline,"")+`
|
|
53
|
+
`:"";return s?'<pre><code class="language-'+N(s)+'">'+(n?r:N(r,!0))+`</code></pre>
|
|
54
|
+
`:"<pre><code>"+(n?r:N(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>${N(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?N(n,!0):this.parser.parseInline(s),o=an(t);if(o===null)return a;t=N(o,r);let i='<a href="'+t+'"';return e&&(i+=' title="'+N(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=an(t);if(r===null)return N(n);t=r;let a=`<img src="${N(t)}" alt="${N(n)}"`;return e&&(a+=` title="${N(e)}"`),a+=">",a}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"escaped"in t&&t.escaped?t.text:N(t.text)}},vt=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}},W=class ft{options;renderer;textRenderer;constructor(e){this.options=e||ue,this.options.renderer=this.options.renderer||new Qe,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new vt,this.textRenderer.parser=this}static parse(e,n){return new ft(n).parse(e)}static parseInline(e,n){return new ft(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}},Ee=class{options;block;constructor(t){this.options=t||ue}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?F.lex:F.lexInline}provideParser(t=this.block){return t?W.parse:W.parseInline}};function ee(t,e){if(Array.isArray(e))for(let n=0;n<e.length;n++)t.push(e[n]);else t.push(e)}var St=class{defaults=mt();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=W;Renderer=Qe;TextRenderer=vt;Lexer=F;Tokenizer=we;Hooks=Ee;constructor(...t){this.use(...t)}walkTokens(t,e){let n=[];for(let s of t)switch(ee(n,e.call(this,s)),s.type){case"table":{let r=s;for(let a of r.header)ee(n,this.walkTokens(a.tokens,e));for(let a of r.rows)for(let o of a)ee(n,this.walkTokens(o.tokens,e));break}case"list":{let r=s;ee(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);ee(n,this.walkTokens(o,e))}):r.tokens&&ee(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 Qe(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]=(...p)=>{let c=i.apply(r,p);return c===!1&&(c=l.apply(r,p)),c===!1?"":c??""}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new we(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]=(...p)=>{let c=i.apply(r,p);return c===!1&&(c=l.apply(r,p)),c}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new Ee;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];Ee.passThroughHooks.has(a)?r[o]=p=>{if(r.options.async&&Ee.passThroughHooksRespectAsync.has(a))return(async()=>{let d=await i.call(r,p);return l.call(r,d)})();let c=i.call(r,p);return l.call(r,c)}:r[o]=(...p)=>{if(r.options.async)return(async()=>{let d=await i.apply(r,p);return d===!1&&(d=await l.apply(r,p)),d})();let c=i.apply(r,p);return c===!1&&(c=l.apply(r,p)),c}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,a=n.walkTokens;s.walkTokens=function(o){let i=[];return ee(i,a.call(this,o)),r&&ee(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 F.lex(t,e??this.defaults)}parser(t,e){return W.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?F.lex:F.lexInline)(o,r),l=r.hooks?await r.hooks.processAllTokens(i):i;r.walkTokens&&await Promise.all(this.walkTokens(l,r.walkTokens));let p=await(r.hooks?await r.hooks.provideParser(t):t?W.parse:W.parseInline)(l,r);return r.hooks?await r.hooks.postprocess(p):p})().catch(a);try{r.hooks&&(e=r.hooks.preprocess(e));let o=(r.hooks?r.hooks.provideLexer(t):t?F.lex:F.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?W.parse:W.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>"+N(n.message+"",!0)+"</pre>";return e?Promise.resolve(s):s}if(e)return Promise.reject(n);throw n}}},he=new St;function A(t,e){return he.parse(t,e)}A.options=A.setOptions=function(t){return he.setOptions(t),A.defaults=he.defaults,hn(A.defaults),A};A.getDefaults=mt;A.defaults=ue;function pr(...t){return he.use(...t),A.defaults=he.defaults,hn(A.defaults),A}A.use=pr;A.walkTokens=function(t,e){return he.walkTokens(t,e)};A.parseInline=he.parseInline;A.Parser=W;A.parser=W.parse;A.Renderer=Qe;A.TextRenderer=vt;A.Lexer=F;A.lexer=F.lex;A.Tokenizer=we;A.Hooks=Ee;A.parse=A;var Oa=A.options,Na=A.setOptions,Ba=A.walkTokens,Da=A.parseInline;var Fa=W.parse,Wa=F.lex;function dr(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((d,u)=>d+`
|
|
74
|
+
`+u.replace(/^(?:[ ]{4}|[\t])/,""),""),p=l.trimEnd().split(`
|
|
75
|
+
`).pop();l+=p&&/^[ \t]*?[>\-*][ ]|[`]{3,}$|^[ \t]*?[|].+[|]$/.test(p)?`
|
|
76
|
+
|
|
77
|
+
`:"";let c={type:"footnote",raw:a,label:o,refs:[],content:this.lexer.blockTokens(l)};return n.rawItems.push(c),c}},renderer(){return""}}}function hr(t){return t.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function ur(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],p=l.rawItems.filter(k=>k.label===i);if(!p.length)return;let c=p[0],d=l.items.filter(k=>k.label===i)[0],u={type:"footnoteRef",raw:o,index:c.refs.length,id:"",label:i};return d?(u.id=d.refs[0].id,d.refs.push(u)):(s++,u.id=String(s),c.refs.push(u),l.items.push(c)),u}},renderer({index:r,id:a,label:o}){s=0;let i=encodeURIComponent(o),l=n?hr(o):a,p=r>0?`-${r+1}`:"";return`<sup><a id="${t}ref-${i}${p}" href="#${t+i}" data-${t}ref aria-describedby="${t}label">${e?`[${l}]`:l}</a></sup>`}}}function fr(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:k,content:g,refs:f})=>{let b=encodeURIComponent(k),v=this.parser.parse(g).trimEnd(),y=v.endsWith("</p>"),m=`<li id="${t+b}">
|
|
78
|
+
`;return m+=y?v.replace(/<\/p>$/,""):v,f.forEach((L,E)=>{let C=a.replace("{0}",k),T,O;if(E>0){let ae=E+1;T=`\u21A9<sup>${ae}</sup>`,O=`-${ae}`}else T="\u21A9",O="";m+=` <a href="#${t}ref-${b}${O}" data-${t}backref aria-label="${C}">${T}</a>`}),m+=y?`</p>
|
|
79
|
+
`:`
|
|
80
|
+
`,m+=`</li>
|
|
81
|
+
`,u+m},""),p="";n&&(p+=`<hr data-${e}footnotes>
|
|
82
|
+
`);let c="";s&&(c=` class="${s}"`);let d="";return r&&(d=` class="${r}"`),p+=`<section${c} data-${e}footnotes>
|
|
83
|
+
`,p+=`<h2 id="${t}label"${d}>${o.trimEnd()}</h2>
|
|
84
|
+
`,p+=`<ol>
|
|
85
|
+
${l}</ol>
|
|
86
|
+
`,p+=`</section>
|
|
87
|
+
`,p}}}function yn(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:p="Back to reference {0}"}=t,c={hasFootnotes:!1,tokens:[]};return{extensions:[dr(c,s),ur(e,r,o),fr(e,n,a,i,l,p)],walkTokens(d){d.type==="footnotes"&&c.tokens.indexOf(d)===0&&d.items.length&&(c.tokens[0]={type:"space",raw:""},c.tokens.push(d)),c.hasFootnotes&&(c.hasFootnotes=!1)}}}var mr="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",gr="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",kr="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",br="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",wr="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",xr="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",$r="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",yr="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",vr="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",Sr="and break do else elseif end false for function goto if in local nil not or repeat return then true until while",Lr="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",Tr="important media import supports keyframes font-face from to and not only screen print",_=t=>new Set(t.split(" ")),vn={js:{line:"//",block:["/*","*/"],quotes:['"',"'","`"],kw:_(mr),regex:!0},c:{line:"//",block:["/*","*/"],quotes:['"',"'"],kw:_(gr),pre:!0},cs:{line:"//",block:["/*","*/"],quotes:['"',"'"],kw:_(kr),at:!0},go:{line:"//",block:["/*","*/"],quotes:['"',"'","`"],kw:_(br)},rs:{line:"//",block:["/*","*/"],quotes:['"'],kw:_(wr)},py:{line:"#",quotes:['"""',"'''",'"',"'"],kw:_(xr),at:!0},sh:{line:"#",quotes:['"',"'"],kw:_($r),vars:!0},rb:{line:"#",quotes:['"',"'"],kw:_(yr)},yaml:{line:"#",quotes:['"',"'"],kw:_("true false null yes no on off"),keys:!0},toml:{line:"#",quotes:['"""','"',"'"],kw:_("true false"),keys:!0},ini:{line:";",alt:"#",quotes:['"'],kw:_("true false"),keys:!0},sql:{line:"--",block:["/*","*/"],quotes:["'",'"'],kw:_(vr),nocase:!0},lua:{line:"--",quotes:['"',"'"],kw:_(Sr)},ps:{line:"#",block:["<#","#>"],quotes:['"',"'"],kw:_(Lr),vars:!0,nocase:!0},css:{block:["/*","*/"],quotes:['"',"'"],kw:_(Tr),css:!0},json:{line:"//",block:["/*","*/"],quotes:['"'],kw:_("true false null")},md:{md:!0},html:{html:!0}},Mr={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 Ar(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 Mr[n]||""}var X=t=>t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Lt=new Map;function Rr(t){if(Lt.has(t))return Lt.get(t);let e=vn[t],n=[];e.block&&n.push(`${X(e.block[0])}[\\s\\S]*?(?:${X(e.block[1])}|$)`),e.line&&n.push(`${X(e.line)}[^\\n]*`),e.alt&&n.push(`${X(e.alt)}[^\\n]*`);let s=(e.quotes||[]).map(o=>o.length===3?`${X(o)}[\\s\\S]*?(?:${X(o)}|$)`:o==="`"?"`(?:\\\\[\\s\\S]|[^`\\\\])*`?":`${X(o)}(?:\\\\.|[^${X(o)}\\\\\\n])*${X(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 Lt.set(t,a),a}function Sn(t,e){let n=Ar(e);if(!n)return jr(t);if(n==="md")return Ir(t);if(n==="html")return zr(t);let s=vn[n],r=Rr(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,p="";if(l.com)p="com";else if(l.str)p=/^\s*:/.test(t.slice(r.lastIndex,r.lastIndex+3))&&!s.css?"key":"str";else if(l.num)p="num";else if(l.at)p="at";else if(l.var)p="var";else if(l.pre)p="kw";else if(l.key)p="key";else if(l.word){let c=l.word,d=t.slice(r.lastIndex,r.lastIndex+2);qr.has(c)?p="lit":s.kw.has(s.nocase?c.toLowerCase():c)?p="kw":s.keys&&/^\s*[:=]/.test(d)&&Er(t,i.index)?p="key":s.css?p="":d[0]==="("?p="fn":/^[A-Z][a-z0-9]/.test(c)&&n!=="sql"?p="type":/^[A-Z][A-Z0-9_]+$/.test(c)&&c.length>1&&(p="const")}a.push([p,i[0]]),o=r.lastIndex}return o<t.length&&a.push(["",t.slice(o)]),Ln(a)}function Er(t,e){let n=t.lastIndexOf(`
|
|
88
|
+
`,e-1)+1;return/^[\s-]*$/.test(t.slice(n,e))}var Cr={com:"comment",str:"string",num:"number",const:"number",kw:"keyword",lit:"literal",pre:"keyword"},qr=new Set(["true","false","null","undefined","None","True","False","nil","NaN","Infinity"]);function Ln(t){let e=[""];for(let[n,s]of t){let r=Cr[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 jr=t=>t.replace(/\r/g,"").split(`
|
|
90
|
+
`).map(h);function Ir(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 zr(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)]),Ln(n)}var En={name:"folderview-scopes",type:"light",fg:"#000000",bg:"#ffffff",settings:[]},_r=[["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 Hr(t){for(let e=t.length-1;e>=0;e--){let n=t[e],s=_r.find(([r])=>n===r||n.startsWith(r+"."));if(s)return s[1]}return"plain"}var Tn={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"},Mn={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 ye(t){let e=t.toLowerCase().slice(t.lastIndexOf("/")+1);if(Tn[e])return Tn[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 Mn?Mn[n]:n}var An,Pr,Mt,At=new Set,Tt=new Map,Or=()=>Pr??=import("./chunks/langs-GO3UQR4H.js").then(({bundledLanguages:t,bundledLanguagesAlias:e})=>new Map([...Object.entries(e),...Object.entries(t)]));async function Nr(t){let e=(await Or()).get(t);if(!e)return!1;An??=Promise.all([import("./chunks/core-BRBMZSD2.js"),import("./chunks/engine-javascript-DNHSF67B.js")]).then(([{createHighlighterCore:s},{createJavaScriptRegexEngine:r}])=>s({themes:[En],langs:[],engine:r({forgiving:!0})}));let n=await An;return await n.loadLanguage(e),Mt=n,At.add(t),!0}function Ie(t){let e=ye(t);return e?At.has(e)?Promise.resolve(!0):(Tt.has(e)||Tt.set(e,Nr(e).catch(()=>!1)),Tt.get(e)):Promise.resolve(!1)}var Br=4e5,Rn=8e3;function ve(t,e){let n=ye(e);if(n&&At.has(n)&&t.length<Br){let s=Dr(t,n);if(s)return s}return Sn(t,e)}function Dr(t,e){if(Mt&&!(t.split(`
|
|
92
|
+
`,Rn+1).length>Rn))try{return Mt.codeToTokensBase(t.replace(/\r\n?/g,`
|
|
93
|
+
`),{lang:e,theme:En.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 p=l.explanation??[{content:l.content,scopes:[]}];for(let c of p){let d=Hr(c.scopes.map(u=>u.scopeName));d!==a&&(i(),a=d),o+=c.content}}return i(),r})}catch{return}}var Fr=/<svg\b[^>]*>/,Wr=/viewBox="\s*[-\d.]+[\s,]+[-\d.]+[\s,]+([\d.]+)[\s,]+([\d.]+)\s*"/,Ur=/\s(?:width|height)="[^"]*"/g;function Zr(t){let e=Fr.exec(t)?.[0],n=e&&Wr.exec(e);return!e||!n?t:t.replace(e,e.replace(Ur,"").replace(/^<svg/,`<svg width="${n[1]}" height="${n[2]}"`))}function Vr(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 Kr(){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(p=>Vr(t,e,p)),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 Gr(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 Cn,qn=Promise.resolve(),jn=0,Qr=()=>matchMedia("(prefers-color-scheme: dark)").matches?document.documentElement.dataset.theme!=="light":document.documentElement.dataset.theme==="dark";function Xr(t){let e=qn.then(async()=>{Cn??=import("./chunks/mermaid.core-SQMPMUDN.js").then(a=>a.default);let n=await Cn,s=Kr(),r=Qr();n.initialize({startOnLoad:!1,securityLevel:"strict",...s?Gr(s,r):{theme:r?"dark":"default"}});try{let{svg:a}=await n.render(`folderview-diagram-${++jn}`,t);return{ok:!0,svg:Zr(a)}}catch(a){return document.getElementById(`dfolderview-diagram-${jn}`)?.remove(),{ok:!1,problem:a instanceof Error?a.message:String(a)}}});return qn=e.catch(()=>{}),e}async function Xe(t,e){t.innerHTML='<div class="skeleton" style="width:60%;height:120px"></div>';let n=await Xr(e);if(!n.ok){t.innerHTML=`<p class="problem">This diagram couldn't be drawn: ${Jr(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 Jr=t=>String(t).replace(/[&<>]/g,e=>({"&":"&","<":"<",">":">"})[e]);var In={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"/>'},$=(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">${In[t]||In.file}</svg>`;function Rt(t,e,n=e||"text"){let s="x."+(e||"txt"),r=ve(t.replace(/\n$/,""),s);return`<figure class="ui-code" data-lang="${h(e)}"><figcaption class="cbar"><span class="caption">${h(n)}</span><span class="ctools"><button class="icon-btn" data-cb="wrap" title="Wrap long lines" aria-label="Wrap long lines">${$("wrap",16)}</button><button class="icon-btn" data-cb="copy" title="Copy code" aria-label="Copy code">${$("copy",16)}</button></span></figcaption><pre class="code" tabindex="0"><code>${r.join(`
|
|
94
|
+
`)}</code></pre><textarea hidden>${h(t)}</textarea></figure>`}var zn={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
|
+
`},Yr={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>`},_n=()=>{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=_n(),e=new St({gfm:!0});return e.use(yn({description:"Footnotes"})),e.use({extensions:[zn,Yr],hooks:{preprocess(n){return t=_n(),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"?zn.renderer({text:n}):Rt(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 ta=ea();function na(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 sa={NOTE:["note","info"],TIP:["tip","sparkles"],IMPORTANT:["important","warning"],WARNING:["warning","warning"],CAUTION:["caution","warning"]};function Se(t,e,n){let{body:s,front:r}=na(e),a=Gt.sanitize(r+ta.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,ra(t,n)}function ra(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=ct(a.startsWith("/")?a:z(e,decodeURIComponent(a))),l=/^L(\d+)(?:-L?(\d+))?/.exec(o);a.endsWith("/")||!a?s.setAttribute("href",le({folder:i})):s.setAttribute("href",P(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=V(ct(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]=sa[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">${$(i,16)}${a[1][0].toUpperCase()+a[1].slice(1).toLowerCase()}</div>`)}for(let s of t.querySelectorAll("[data-diagram]"))Xe(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{}}),aa(t)}function aa(t){for(let e of t.querySelectorAll("figure.ui-code[data-lang]")){let n=e.dataset.lang;n&&Ie("x."+n).then(s=>{if(!s||!e.isConnected)return;let r=e.querySelector("textarea")?.value??"";e.querySelector("code").innerHTML=ve(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??"";D(r,"Code copied").then(()=>{e.innerHTML=$("check",16),e.classList.add("copied"),setTimeout(()=>{e.innerHTML=$("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 Et(t,e){let n=document.createElement("div");return Se(n,t,e),n.innerHTML}var oa=t=>t.line?t.endLine?`L${t.line}\u2013${t.endLine}`:`L${t.line}`:"File";async function Je(){await Ae(),K("comments")}function ze(t,e){let n=(t.replies||[]).map(a=>`<div class="reply"><div class="cmt-head"><b>${h(a.author)}</b><span class="faint">${J(Date.parse(a.at))}</span></div><div class="cmt-body md">${Et(a.body,e)}</div></div>`).join(""),s=t.status==="resolved",r=x.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">${J(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?$("undo",14)+" Reopen":$("check",14)+" Resolve"}</button><button class="mini" data-cact="edit" title="Edit" aria-label="Edit">${$("edit",14)}</button><button class="mini" data-cact="delete" title="Delete" aria-label="Delete">${$("trash",14)}</button></span>`}</div>
|
|
100
|
+
<div class="cmt-body md">${Et(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 _e(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(De())}</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 Ct(t,e){return ce(t).filter(s=>!s.line&&(x.settings.resolved||s.status==="open")).map(s=>`<div class="thread">${ze(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 R("api/comments/"+s,{method:"PATCH",json:{status:r==="resolve"?"resolved":"open"}});else if(r==="delete"){if(!confirm("Delete this comment?"))return;await R("api/comments/"+s,{method:"DELETE"})}else if(r==="edit"){let a=x.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 Je()}catch(a){ke(a.message)}});document.addEventListener("click",t=>{t.target.closest("[data-cancel-edit]")&&Je();let e=t.target.closest("[data-cancel]");e&&(e.closest(".composer")?.remove(),K("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(),K("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:De()};e.dataset.line&&(r.line=Number(e.dataset.line)),e.dataset.end&&(r.endLine=Number(e.dataset.end)),await R("api/comments",{method:"POST",json:r}),e.remove(),K("composer-closed")}else e.matches(".reply-form")?await R(`api/comments/${e.dataset.cid}/replies`,{method:"POST",json:{body:n,author:De()}}):await R("api/comments/"+e.dataset.cid,{method:"PATCH",json:{body:n}});await Je()}catch(r){s.disabled=!1,ke(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 ia=(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 Hn(t,e){let n=x.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((k,g)=>k.path.localeCompare(g.path)||(k.line||0)-(g.line||0)))a.has(u.path)||a.set(u.path,[]),a.get(u.path).push(u);let{md:o,json:i}=x.info.review,l=o&&!o.startsWith("..")?P(o):"",p=[["open",`Open (${s.length})`],["resolved",`Resolved (${n.length-s.length})`],["all",`All (${n.length})`]].map(([u,k])=>`<button class="btn${(e||"open")===u?" on":""}" data-rf="${u}">${k}</button>`).join(""),c=[...a].map(([u,k])=>`<section class="rgroup"><h3 class="group-title"><a href="${P(u)}">${h(u||".")}</a><span class="faint">${k.length}</span></h3>${k.map(g=>`<div class="rcard"><div class="rwhere"><a class="pill" href="${P(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>`:""}${ze(g,u.includes("/")?u.slice(0,u.lastIndexOf("/")):"")}</div>`).join("")}</section>`).join("");t.innerHTML=`<header class="head"><h2 class="page-title">${$("chat")} Review</h2>
|
|
108
|
+
<label class="switch" title="Click any line of a file to comment on it"><input type="checkbox" id="rmode" ${x.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(x.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">${p}</div><span class="grow"></span>
|
|
111
|
+
${l?`<a class="btn" href="${l}">${$("file",16)} REVIEW.md</a>`:""}
|
|
112
|
+
<button class="btn" id="copy-prompt" title="Copy instructions to paste into your agent">${$("copy",16)} Copy prompt for an agent</button>
|
|
113
|
+
${n.length-s.length&&!x.info.readOnly?'<button class="btn" id="clear-resolved">Clear resolved</button>':""}</div>
|
|
114
|
+
${c||`<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=()=>q({q:u.dataset.rf==="open"?"":u.dataset.rf})),t.querySelector("#rmode").onchange=u=>{be("review",u.target.checked),K("settings")},t.querySelector("#copy-prompt").onclick=()=>D(x.info.review.prompt||ia(o,i),"Prompt copied");let d=t.querySelector("#clear-resolved");d&&(d.onclick=async()=>{confirm("Remove every resolved comment?")&&(await R("api/comments?resolved=1",{method:"DELETE"}),await Je())})}function qt(){let t=x.comments.filter(n=>n.status==="open").length,e=w("review-count");e&&(e.textContent=String(t),e.hidden=!t)}var jt=6e4;function la(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 _t(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 On(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 Nn(t,{download:e}={}){return`<figcaption class="cbar"><span class="caption">${h(t)}</span><span class="ctools"><button class="icon-btn${x.settings.wrap?" on":""}" data-cv="wrap" title="Wrap long lines" aria-label="Wrap long lines">${$("wrap",16)}</button><button class="icon-btn" data-cv="copy" title="Copy" aria-label="Copy">${$("copy",16)}</button>${e?`<a class="icon-btn" href="${e}" download title="Download" aria-label="Download">${$("download",16)}</a>`:""}</span></figcaption>`}function Ht(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 b=ve(i,e);return b.length>1&&b[b.length-1]===""&&i.endsWith(`
|
|
116
|
+
`)&&b.pop(),b},p=l(),c=p.slice(0,jt),d=c.map((b,v)=>{let y=v+1,m=r?.get(y);return`<div class="ln" data-n="${y}"><a class="gut" href="${le({...M(),line:String(y)})}" data-n="${y}">${y}</a><span class="mk${m?" "+m:""}"></span><span class="src">${b||" "}</span></div>`}),u=ye(e),k=a??`${u||"text"} \xB7 ${c.length.toLocaleString()} ${c.length===1?"line":"lines"}`;t.innerHTML=`<figure class="ui-code">${Nn(k,{download:o})}<div class="code${x.settings.wrap?" wrap":""}${x.settings.review?" review":""}" tabindex="0" data-path="${h(e)}" data-folder="${h(s)}">${d.join("")}</div></figure>${p.length>jt?`<p class="note">Showing the first ${jt.toLocaleString()} of ${p.length.toLocaleString()} lines.</p>`:""}`;let g=t.querySelector(".code");g.lines=c.length,g.text=n,ca(g,e),Pt(g);let f=la(M().line);return f&&zt(g,f[0],f[1],!0),Ie(e).then(b=>{if(!b||!g.isConnected)return;let v=l();g.querySelectorAll(".ln > .src").forEach((m,L)=>{v[L]!==void 0&&(m.innerHTML=v[L]||" ")})}),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")be("wrap",!x.settings.wrap),document.querySelectorAll(".ui-code > .code").forEach(r=>r.classList.toggle("wrap",x.settings.wrap)),document.querySelectorAll('[data-cv="wrap"]').forEach(r=>r.classList.toggle("on",x.settings.wrap));else if(e.dataset.cv==="copy"){let r=s.text??[...s.querySelectorAll(".src, .dsrc")].map(a=>a.textContent).join(`
|
|
117
|
+
`);D(r,"Copied").then(()=>{e.innerHTML=$("check",16),e.classList.add("copied"),setTimeout(()=>{e.innerHTML=$("copy",16),e.classList.remove("copied")},1600)})}}});function Pt(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=ce(e).filter(a=>a.line&&(x.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(p=>`<div class="thread"><div class="thread-where">${p.endLine?`Lines ${p.line}\u2013${p.endLine}`:`Line ${p.line}`}${p.line>t.lines?" (past the end of the file now)":""}</div>${ze(p,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>${x.info.readOnly?"":`<button class="btn small primary" data-sb="comment">${$("chat",14)} Comment</button>`}<button class="btn small" data-sb="link">${$("link",14)} Link</button><button class="btn small" data-sb="ref">path:line</button><button class="btn small" data-sb="text">${$("copy",14)} Lines</button><button class="mini" data-sb="clear" title="Clear the selection" aria-label="Clear the selection">${$("x",14)}</button>`,r.after(a),s&&requestAnimationFrame(()=>t.querySelector(`.ln[data-n="${e}"]`)?.scrollIntoView({block:"center"}))}function Pn(t){t.sel=null,t.querySelectorAll(".ln.sel").forEach(e=>e.classList.remove("sel")),t.querySelector(":scope > .selbar")?.remove(),q({line:""},!0)}function It(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",_e(e,n,s)),t.querySelector(":scope > .selbar")?.remove();let o=t.querySelector(".composer textarea");o.focus(),o.scrollIntoView({block:"nearest"})}function ca(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 Pn(t);zt(t,i,l,!1),q({line:i===l?String(i):`${i}-${l}`},!0),x.settings.review&&!x.info.readOnly&&!n.shiftKey&&It(t,e,i,l);return}if(r&&t.sel){let[o,i]=t.sel,l=r.dataset.sb;if(l==="comment")It(t,e,o,i);else if(l==="link")D(location.href,"Link copied");else if(l==="ref")D(`${e}:${o}${o!==i?"-"+i:""}`,"Copied");else if(l==="text"){let p=[];for(let c=o;c<=i;c++)p.push(t.querySelector(`.ln[data-n="${c}"] .src`)?.textContent??"");D(p.join(`
|
|
118
|
+
`),"Lines copied")}else l==="clear"&&Pn(t);return}let a=n.target.closest(".ln");if(a&&x.settings.review&&!x.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),q({line:i===l?String(i):`${i}-${l}`},!0),It(t,e,i,l)}})}function He(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=_t(e),o=a.head.filter(f=>f&&!/^(diff --git|index |--- |\+\+\+ |(new|deleted) file mode|similarity index|rename (from|to) )/.test(f)),i=a.hunks.flatMap(f=>f.lines.filter(b=>b.t!=="\\")),l=()=>{let f=new Map;for(let b of a.hunks)for(let v of["o","n"]){let y=b.lines.filter(L=>L.t!=="\\"&&(v==="o"?L.t!=="+":L.t!=="-")),m=ve(y.map(L=>L.text).join(`
|
|
119
|
+
`),n);y.forEach((L,E)=>{(v==="n"||L.t==="-")&&f.set(L,m[E]||" ")})}return f},p=l(),c=[];for(let f of a.hunks){c.push(`<div class="dh"><span>${h(f.header.replace(/@@(.*)$/,"@@"))}</span>${f.ctx?`<span class="faint">${h(f.ctx)}</span>`:""}</div>`);for(let b of f.lines){if(b.t==="\\"){c.push(`<div class="dl meta"><span class="on"></span><span class="nn"></span><span class="dsrc faint">${h(b.text)}</span></div>`);continue}let v=b.t==="+"?"add":b.t==="-"?"del":"";c.push(`<div class="dl ${v}"${b.n?` data-n="${b.n}"`:""}><span class="on">${b.o??""}</span><span class="nn">${b.n?`<a class="gut" data-n="${b.n}">${b.n}</a>`:""}</span><span class="dsrc"><i>${b.t===" "?" ":b.t}</i><span class="dt">${p.get(b)}</span></span></div>`)}}let d=!a.hunks.length&&/Binary files/.test(e),u=i.filter(f=>f.t==="+").length,k=i.filter(f=>f.t==="-").length;t.innerHTML=`${o.length?`<pre class="commit-head">${h(o.join(`
|
|
120
|
+
`))}</pre>`:""}${d?'<p class="note">A binary file changed; no line diff.</p>':`<figure class="ui-code">${Nn(`${r||n} \xB7 +${u} \u2212${k}`)}<div class="diff code${x.settings.wrap?" wrap":""}" tabindex="0" data-path="${h(n)}">${c.join("")}</div></figure>`}`;let g=t.querySelector(".diff");g&&(g.text=e,Ie(n).then(f=>{if(!f||!g.isConnected)return;let b=l();g.querySelectorAll(".dt").forEach((v,y)=>{let m=b.get(i[y]);m!==void 0&&(v.innerHTML=m)})})),!(!g||!s)&&(Ot(g),g.addEventListener("click",f=>{let b=f.target.closest(".gut");if(!b||x.info.readOnly)return;let v=Number(b.dataset.n);g.querySelectorAll(":scope > .composer").forEach(L=>L.remove());let y=g.querySelector(`.dl[data-n="${v}"]`);(y.nextElementSibling?.classList.contains("threads")?y.nextElementSibling:y).insertAdjacentHTML("afterend",_e(n,v,v)),g.querySelector(".composer textarea").focus()}))}function Ot(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 ce(e).filter(r=>r.line&&(x.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>${ze(s,n)}</div>`)}}var Pe=new Set(["png","jpg","jpeg","gif","webp","avif","svg","ico","bmp"]),pa=new Set(["mp3","ogg","oga","wav","flac","m4a","aac","opus"]),da=new Set(["mp4","m4v","webm","ogv","mov"]),ha=new Set(["woff","woff2","ttf","otf"]),ua=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"]),Fn={csv:",",tsv:" "},fa=()=>x.info.maxFile||5*1048576,Wn=t=>V(t)+"?download=1",ma=t=>matchMedia("(max-width: 759px)").matches?document.scrollingElement:t;function ga(t){let e=oe(t);return e==="svg"?"svg":Pe.has(e)?"image":pa.has(e)?"audio":da.has(e)?"video":ha.has(e)?"font":e==="pdf"?"pdf":ua.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 Fn?"table":e==="json"||e==="geojson"||e==="webmanifest"||e==="gltf"?"json":"text"}var Bn={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"},ka=new Set(["svg","markdown","html","notebook","table","json","text","diagram"]),te={path:"",token:0};function Un(){te={path:"",token:te.token+1}}async function Ye(t,e=!1){let{folder:n,open:s,tab:r}=M(),a=z(n,s);if(!e&&te.path===a&&te.tab===(r||""))return;let o=ma(t),i=e&&te.path===a?o.scrollTop:0,l=++te.token;te={path:a,tab:r||"",token:l};let c=(x.cache.get(n)||[]).find(T=>T.name===s),d=x.changes.get(a),u=!c&&d?.state==="deleted",k=ga(s),g=[];u?g.push(["deleted","Last committed"]):(Bn[k]&&g.push(["preview",Bn[k]]),ka.has(k)&&g.push(["source","Source"])),d&&d.state!=="ignored"&&g.push(["diff","Changes"]),d&&(k==="image"||k==="svg")&&d.state!=="new"&&d.state!=="added"&&g.push(["compare","Compare"]),x.git&&d?.state!=="new"&&!Y(a)&&g.push(["history","History"]);let f=g.some(([T])=>T===r)?r:g[0]?.[0]||"source",b=V(a),v=d&&d.state!=="ignored"?d.state:"",y=ce(a).filter(T=>T.status==="open").length,m=`<header class="file-head">
|
|
121
|
+
<button class="icon-btn back" id="back" aria-label="Back to the folder" title="Back to the folder">${$("chevron-left")}</button>
|
|
122
|
+
<span class="file-name" title="${h(a)}">${h(s)}</span>
|
|
123
|
+
${v?`<span class="badge s-${v}" title="${G[v]}">${We[v]||"\xB7"}</span>`:""}
|
|
124
|
+
${y?`<span class="pill warn" title="Open comments">${$("chat",12)} ${y}</span>`:""}
|
|
125
|
+
<span class="grow"></span>
|
|
126
|
+
<button class="icon-btn hide-sm" id="copy-path" title="Copy the path" aria-label="Copy the path">${$("link")}</button>
|
|
127
|
+
${x.info.readOnly?"":`<button class="icon-btn" id="comment-file" title="Comment on the whole file" aria-label="Comment on the whole file">${$("chat")}</button>`}
|
|
128
|
+
${u?"":`<a class="icon-btn" href="${Wn(a)}" download="${h(s)}" title="Download" aria-label="Download">${$("download")}</a><a class="icon-btn hide-sm" href="${b}" target="_blank" rel="noopener" title="Open the raw file" aria-label="Open the raw file">${$("external")}</a>`}
|
|
129
|
+
<button class="icon-btn" id="close" aria-label="Close the file" title="Close (Esc)">${$("x")}</button>
|
|
130
|
+
</header>
|
|
131
|
+
<div class="meta" id="fmeta">${h(a)}${c?" \xB7 "+Me(c.size)+" \xB7 "+J(c.mtime):u?" \xB7 deleted":""}${d?.add!==void 0?` \xB7 <span class="plus">+${d.add}</span> <span class="minus">\u2212${d.del||0}</span>`:""}</div>
|
|
132
|
+
<div id="file-threads">${Ct(a,n)}</div>
|
|
133
|
+
${g.length>1?`<div class="tabs">${g.map(([T,O])=>`<button class="btn${T===f?" on":""}" data-tab="${T}">${O}</button>`).join("")}</div>`:""}
|
|
134
|
+
<div id="fbody"><div class="skeleton" style="width:70%"></div></div>`;t.innerHTML=m,o.scrollTop=0,w("close").onclick=()=>q({open:"",tab:"",line:""}),w("back").onclick=()=>q({open:"",tab:"",line:""}),w("copy-path").onclick=()=>D(a,"Path copied");let L=w("comment-file");L&&(L.onclick=()=>{w("file-threads").querySelector(".composer")||(w("file-threads").insertAdjacentHTML("beforeend",_e(a,0,0)),w("file-threads").querySelector(".composer textarea").focus())}),t.querySelectorAll("[data-tab]").forEach(T=>T.onclick=()=>q({tab:T.dataset.tab===g[0][0]?"":T.dataset.tab,line:""}));let E=w("fbody"),C=()=>l!==te.token;try{await ba(f,{body:E,path:a,folder:n,kind:k,url:b,e:c,change:d,stale:C})}catch(T){C()||(E.innerHTML=`<p class="note">${h(T.message)}</p>`)}i&&!C()&&(o.scrollTop=i)}function Zn(t){let{folder:e,open:n}=M(),s=t.querySelector("#file-threads");if(!s||!n)return;let r=s.querySelector(".composer");s.innerHTML=Ct(z(e,n),e),r&&s.append(r),Pt(t.querySelector("#fbody > .code, #fbody .code:not(.diff)")),Ot(t.querySelector(".diff"))}async function ba(t,e){let{body:n,path:s,folder:r,kind:a,url:o,e:i,stale:l}=e,p=async()=>{if(i&&i.size>fa())throw new Error(`Too large to show here (${Me(i.size)}). Download it instead.`);return(await fetch(o)).text()};if(t==="diff"){let c=await R("api/git/diff?p="+encodeURIComponent(s));if(l())return;He(n,c,s,{caption:"Changes since the last commit"});return}if(t==="deleted"){let c=await R("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>',Ht(w("code-host"),{path:s,text:c,folder:r});return}if(t==="history")return wa(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 c=await p();if(l())return;if(c.includes("\0"))return Dn(n,o,l);let d=e.change?.state==="new"||e.change?.state==="added";n.innerHTML='<div id="code-host"></div>';let u=Ht(w("code-host"),{path:s,text:c,folder:r,marks:d?new Map(c.split(`
|
|
135
|
+
`).map((k,g)=>[g+1,"add"])):void 0,download:Wn(s)});if(e.change&&!d&&e.change.state!=="ignored"){let k=await R("api/git/diff?p="+encodeURIComponent(s)).catch(()=>"");if(l()||!u.isConnected)return;for(let[g,f]of On(_t(k)))u.querySelector(`.ln[data-n="${g}"] .mk`)?.classList.add(f)}return}switch(a){case"image":case"svg":{n.innerHTML=`<div class="stage" id="stage"><img id="pic" src="${o}?t=${i?i.mtime:0}" alt="${h(s)}"></div><p class="faint hint">Click to see it at full size.</p>`;let c=w("pic");c.onload=()=>{let d=w("fmeta");d&&!d.dataset.dim&&(d.dataset.dim="1",d.insertAdjacentHTML("beforeend",` \xB7 ${c.naturalWidth} \xD7 ${c.naturalHeight}`))},c.onclick=()=>w("stage").classList.toggle("actual");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 xa(n,o);case"binary":return Dn(n,o,l);case"markdown":{let c=await p();if(l())return;n.innerHTML='<article class="md card"></article>',Se(n.firstElementChild,c,r);return}case"diagram":{let c=await p();if(l())return;n.innerHTML='<div class="stage diagram"></div>',await Xe(n.firstElementChild,c);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 c=await p();return l()?void 0:ya(n,c,Fn[oe(s)])}case"json":{let c=await p();if(l())return;let d;try{d=JSON.parse(c)}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">${Vn(d,0)}</div>`,n.querySelectorAll("[data-jt]").forEach(u=>u.onclick=()=>n.querySelectorAll(".jtree details").forEach(k=>k.open=u.dataset.jt==="open"));return}case"notebook":{let c=await p();return l()?void 0:va(n,c,r)}}}async function wa(t,e,n){let{commits:s}=await R("api/git/log?p="+encodeURIComponent(e));if(!n()){if(!s.length){t.innerHTML='<p class="note">No commits touch this file yet.</p>';return}t.innerHTML=`<div class="commits">${s.map(r=>`<button class="commit" data-h="${h(r.hash)}"><code>${h(r.hash)}</code><span class="subj">${h(r.subject)}</span><span class="faint">${h(r.author)} \xB7 ${J(r.time)}</span></button>`).join("")}</div><div id="commit-diff"></div>`,t.querySelectorAll("[data-h]").forEach(r=>r.onclick=async()=>{t.querySelectorAll(".commit").forEach(o=>o.classList.toggle("on",o===r));let a=await R(`api/git/commit?p=${encodeURIComponent(e)}&h=${r.dataset.h}`);He(w("commit-diff"),a,e,{comments:!1,caption:r.dataset.h}),w("commit-diff").scrollIntoView({block:"nearest"})})}}async function Dn(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(c=>c.toString(16).padStart(2,"0")).join(" "),p=i.map(c=>c>=32&&c<127?String.fromCharCode(c):".").join("");a.push(`<span class="faint">${o.toString(16).padStart(8,"0")}</span> ${l.padEnd(47)} ${h(p)}`)}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(`
|
|
136
|
+
`)}</pre>`}async function xa(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}'">
|
|
137
|
+
<input class="font-sample" value="${r}" aria-label="Sample text">
|
|
138
|
+
${[64,40,28,20,14].map(a=>`<p style="font-size:${a}px" data-s>${r}</p>`).join("")}
|
|
139
|
+
<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 $a(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===`
|
|
140
|
+
`||i==="\r"){if(i==="\r"&&t[o+1]===`
|
|
141
|
+
`&&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 ya(t,e,n){let s=$a(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((d,u)=>o.length>0&&o.every(k=>k[u]===void 0||k[u]===""||!isNaN(Number(k[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>
|
|
142
|
+
<div class="tablewrap"><table class="grid-table"><thead><tr><th>#</th>${r.map((d,u)=>`<th data-col="${u}">${h(d)}</th>`).join("")}</tr></thead><tbody>${o.map((d,u)=>`<tr><td class="faint">${u+1}</td>${r.map((k,g)=>`<td${i[g]?' class="num"':""}>${h(d[g]??"")}</td>`).join("")}</tr>`).join("")}</tbody></table></div>`;let l=t.querySelector("tbody");w("tfilter").oninput=d=>{let u=d.target.value.toLowerCase();for(let k of l.rows)k.hidden=!!u&&!k.textContent.toLowerCase().includes(u)};let p=-1,c=!0;t.querySelectorAll("th[data-col]").forEach(d=>d.onclick=()=>{let u=Number(d.dataset.col);c=p===u?!c:!0,p=u;let k=[...l.rows];k.sort((g,f)=>{let b=g.cells[u+1].textContent,v=f.cells[u+1].textContent,y=i[u]?Number(b)-Number(v):b.localeCompare(v,void 0,{numeric:!0});return c?y:-y}),l.append(...k),t.querySelectorAll("th").forEach(g=>g.dataset.sort=""),d.dataset.sort=c?"\u25B2":"\u25BC"})}function Vn(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>`}: ${Vn(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 va(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=Rt(r(i.source),ye("x"+a),`In [${i.execution_count??" "}]`),p=(i.outputs||[]).map(c=>{let d=c.data||{};if(d["image/png"])return`<img class="nb-img" src="data:image/png;base64,${r(d["image/png"]).replace(/\s/g,"")}" alt="">`;if(d["image/jpeg"])return`<img class="nb-img" src="data:image/jpeg;base64,${r(d["image/jpeg"]).replace(/\s/g,"")}" alt="">`;let u=d["text/plain"]?r(d["text/plain"]):c.text?r(c.text):c.ename?`${c.ename}: ${c.evalue}`:"";return u?`<pre class="nb-out${c.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}${p}</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]"))Se(i,i.dataset.md,n)}var Z=!1;function et(){let t=w("scope"),e=M().folder;t.textContent=Z&&e?`in ${lt(e)}`:"everywhere",t.title=Z&&e?`Searching ${e}/ (click to search everywhere)`:"Searching every folder (click to search only the open folder)",t.classList.toggle("on",Z&&!!e)}function tt(t){Z=t==="here",et(),w("q").focus(),w("q").select()}function Kn(){w("search-form").onsubmit=e=>{e.preventDefault();let n=w("q").value.trim();if(!n)return;let s=M();H({folder:s.folder,m:"search",q:n,scope:Z&&s.folder?"here":"",opts:s.m==="search"?s.opts:"",inc:s.m==="search"?s.inc:""})},w("scope").onclick=()=>{Z=!Z,et(),M().m==="search"&&q({scope:Z?"here":""}),w("q").focus()},addEventListener("hashchange",()=>{let e=M();e.m==="search"&&(w("q").value=e.q,Z=e.scope==="here"),et()});let t=M();t.m==="search"&&(w("q").value=t.q,Z=t.scope==="here"),et()}var Sa=(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))},Nt=0;async function Gn(t){let e=M(),n=e.opts||"",s=e.scope==="here"&&e.folder,r=(f,b,v)=>`<button class="btn small${n.includes(f)?" on":""}" data-o="${f}" title="${v}">${b}</button>`;t.innerHTML=`<header class="head"><h2 class="page-title">${$("search")} \u201C${h(e.q)}\u201D</h2></header>
|
|
143
|
+
<div class="head search-opts">
|
|
144
|
+
${r("c","Aa","Match case")}${r("w","<u>ab</u>","Whole word")}${r("r",".*","Regular expression")}
|
|
145
|
+
<input class="filter" id="inc" placeholder="Files to include: *.ts, src/**, !*.test.ts" value="${h(e.inc)}" aria-label="Files to include">
|
|
146
|
+
<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>
|
|
147
|
+
</div>
|
|
148
|
+
<div id="results"><p class="note">Searching\u2026</p></div>`,t.querySelectorAll("[data-o]").forEach(f=>f.onclick=()=>q({opts:n.includes(f.dataset.o)?n.replace(f.dataset.o,""):n+f.dataset.o})),t.querySelectorAll("[data-sc]").forEach(f=>f.onclick=()=>q({scope:f.dataset.sc}));let a=w("inc");a.onchange=()=>q({inc:a.value.trim()}),a.onkeydown=f=>f.key==="Enter"&&a.blur();let o=++Nt,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 R("api/search?"+i)}catch(f){o===Nt&&(w("results").innerHTML=`<p class="note">${h(f.message)}</p>`);return}if(o!==Nt)return;if(l.error){w("results").innerHTML=`<p class="note">${h(l.error)}</p>`;return}let p=l.files.filter(f=>f.name),c=l.files.filter(f=>f.matches.length),u=`${c.reduce((f,b)=>f+b.matches.length,0).toLocaleString()} matching lines in ${c.length.toLocaleString()} files${p.length?` \xB7 ${p.length} file names`:""} \xB7 searched ${l.searched.toLocaleString()} files in ${l.ms} ms${l.truncated?" \xB7 stopped early, narrow the search":""}`,k=p.length?`<section class="sgroup"><h3 class="group-title">Files named like this</h3><div class="rows">${p.slice(0,100).map(f=>`<a class="row" href="${P(f.path)}"><span class="ico">${$("file",18)}</span><span class="nm">${h(f.path)}</span><span class="marks">${B(ne(f.path,"file"))}</span></a>`).join("")}</div></section>`:"",g=c.map(f=>{let b=ne(f.path,"file");return`<section class="sfile"><h3 class="group-title"><a href="${P(f.path)}">${h(f.path)}</a>${B(b)}<span class="faint">${f.matches.length}</span></h3><div class="slines">${f.matches.map(v=>`<a class="sline" href="${P(f.path,{line:String(v.line)})}"><span class="sn">${v.line}</span><code>${Sa(v.text,v.hits)}</code></a>`).join("")}</div></section>`}).join("");w("results").innerHTML=`<p class="meta">${u}</p>${k}${g||(p.length?"":'<p class="empty">Nothing found.</p>')}`}var Oe=null,Qn=()=>Oe=null;function La(t,e){let n=t.toLowerCase(),s=e.toLowerCase(),r=s.lastIndexOf("/")+1,a=0,o=0,i=0,l=[];for(let p of n){if(p===" ")continue;let c=s.indexOf(p,a);if(c<0)return null;i=c===a?i+1:0,o+=1+i*2+(c===0||"/._-".includes(s[c-1])?3:0)+(c>=r?2:0),l.push(c),a=c+1}return s.slice(r).startsWith(n)&&(o+=10),{total:o-e.length*.02,hits:l}}async function Bt(){if(w("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">${$("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=w("qo-in"),n=w("qo-list");e.focus();let s=()=>t.remove();if(t.onclick=l=>l.target===t&&s(),!Oe){let l=(await R("api/files")).files,p=new Set;for(let c of l)for(let d=ie(c);d&&!p.has(d);d=ie(d))p.add(d);Oe=[...l,...[...p].map(c=>c+"/")]}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">${$("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=Oe.map(p=>({p,s:La(l,p)})).filter(p=>p.s).sort((p,c)=>c.s.total-p.s.total).slice(0,60).map(p=>({p:p.p,hits:p.s.hits})):r=Oe.filter(p=>!p.endsWith("/")).slice(0,60).map(p=>({p,hits:[]})),a=Math.min(a,Math.max(0,r.length-1)),n.innerHTML=r.length?r.map((p,c)=>{let d=new Set(p.hits),u=[...p.p].map((f,b)=>d.has(b)?`<b>${h(f)}</b>`:h(f)).join(""),k=p.p.endsWith("/"),g=ne(k?p.p.slice(0,-1):p.p,k?"folder":"file");return`<button class="qo-item${c===a?" on":""}${g?" s-"+g:""}" data-i="${c}">${$(k?"folder":"file",16)}<span class="nm">${u}</span>${B(g,k)}</button>`}).join(""):'<p class="note">No file matches. Start with ? to search inside files.</p>',n.querySelector(".on")?.scrollIntoView({block:"nearest"})},i=l=>{let p=r[l];p&&(s(),p.search?H({m:"search",q:p.search}):p.p.endsWith("/")?H({folder:p.p.slice(0,-1)}):location.hash=P(p.p))};e.oninput=Jt(()=>{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((p,c)=>p.classList.toggle("on",c===a)),n.querySelector(".on")?.scrollIntoView({block:"nearest"})):l.key==="Enter"?(l.preventDefault(),i(a)):l.key==="Escape"&&(l.preventDefault(),s())},n.onclick=l=>{let p=l.target.closest("[data-i]");p&&i(Number(p.dataset.i))},o()}var se="",st=()=>se="",fe=I("sort")||"name",Ta=new Set(["ts","tsx","js","mjs","cjs","jsx","md","mdx","json","css","scss","html","vue","py","rs","go"]),Ma={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 Aa(t,e){if(t.type==="folder")return`<span class="ico folder">${$("folder",18)}</span>`;let n=oe(t.name);return Pe.has(n)&&t.size<4*1048576&&!t.ghost?`<span class="ico"><img loading="lazy" src="${V(z(e,t.name))}" alt=""></span>`:Ta.has(n)?`<span class="ico lang-${n}"><span class="ext">${h(n.slice(0,4))}</span></span>`:`<span class="ico">${$(Ma[n]||"file",18)}</span>`}function ne(t,e){return e==="folder"?x.folderStates.get(t)||(Y(t)?"ignored":""):x.changes.get(t)?.state||(Y(t)?"ignored":"")}function B(t,e){return!t||t==="ignored"&&!e?"":e?t==="ignored"?"":`<span class="dot s-${t}" title="Something inside is ${G[t].toLowerCase()}"></span>`:`<span class="badge s-${t}" title="${G[t]}">${We[t]||"\xB7"}</span>`}function Ra(t){let e=(n,s)=>(s.type==="folder")-(n.type==="folder");return fe==="size"?[...t].sort((n,s)=>e(n,s)||s.size-n.size):fe==="mtime"?[...t].sort((n,s)=>e(n,s)||s.mtime-n.mtime):t}var Dt=new Map;async function nt(t){let{folder:e,open:n,view:s}=M(),r;try{r=await Fe(e)}catch(m){t.innerHTML=`<p class="empty">${h(m.message)}</p>`;return}let a=[...x.changes.values()].filter(m=>m.state==="deleted"&&(m.path.includes("/")?m.path.slice(0,m.path.lastIndexOf("/")):"")===e).map(m=>({name:m.path.slice(m.path.lastIndexOf("/")+1),type:"file",size:0,mtime:0,ghost:!0})).filter(m=>!r.some(L=>L.name===m.name)),o=[...r,...a];x.settings.ignored==="hide"&&(o=o.filter(m=>!Y(z(e,m.name))));let i=o.filter(m=>Pe.has(oe(m.name))).length,l=s?s==="grid":i>=4&&i>=o.length/2,p=Ra(se?o.filter(m=>m.name.toLowerCase().includes(se)):o),c=e?e.split("/"):[],d=[`<button class="crumb${c.length?"":" current"}" data-f="">${h(x.info.name)}</button>`,...c.map((m,L)=>`<span class="sep">/</span><button class="crumb${L===c.length-1?" current":""}" data-f="${h(c.slice(0,L+1).join("/"))}">${h(m)}</button>`)].join(""),u=o.filter(m=>m.type==="folder").length,k=m=>{let L=z(e,m.name),E=m.ghost?"deleted":ne(L,m.type),C=Ue(L);return`<button class="${["row",m.name===n?"open":"",E?"s-"+E:"",m.ghost?"ghost":""].filter(Boolean).join(" ")}" data-e="${h(m.name)}" data-k="${m.type}" title="${h(m.name)}${E?" \xB7 "+G[E]:""}">${Aa(m,e)}<span class="nm">${h(m.name)}${m.link?' <span class="faint">\u21AA</span>':""}</span><span class="marks">${C?`<span class="pill warn">${$("chat",12)}${C}</span>`:""}${B(E,m.type==="folder")}</span><span class="sz">${m.type==="folder"||m.ghost?"":Me(m.size)}</span><span class="tm">${m.ghost?"deleted":J(m.mtime)}</span></button>`},g=m=>{let L=z(e,m.name),E=oe(m.name),C=m.ghost?"deleted":ne(L,m.type),T=m.type==="folder"?$("folder",34):Pe.has(E)&&!m.ghost?`<img loading="lazy" src="${V(L)}" alt="">`:`<span class="ext">.${h(E||"file")}</span>`;return`<button class="tile${m.name===n?" open":""}${C?" s-"+C:""}" data-e="${h(m.name)}" data-k="${m.type}" title="${h(m.name)}"><div class="thumb">${T}${B(C,m.type==="folder")}</div><div class="nm">${h(m.name)}</div></button>`},f=p.length?l?`<div class="grid">${p.map(g).join("")}</div>`:`<div class="rows">${p.map(k).join("")}</div>`:`<p class="empty">${se?"Nothing matches.":"Nothing in this folder."}</p>`,b=r.find(m=>/^readme(\.md|\.markdown|\.txt)?$/i.test(m.name)&&m.type==="file"),v=(e?c[c.length-1]:x.info.name)+".zip";t.innerHTML=`<header class="head"><nav class="crumbs" aria-label="Folder trail">${d}</nav>
|
|
149
|
+
<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">${$("download")}</a></header>
|
|
150
|
+
<div class="head"><input class="filter" id="filter" type="search" placeholder="Filter this folder" value="${h(se)}" aria-label="Filter this folder">
|
|
151
|
+
<div class="tools"><span class="seg"><button class="btn${l?"":" on"}" data-v="list" title="List" aria-label="List">${$("list",16)}</button><button class="btn${l?" on":""}" data-v="grid" title="Thumbnails" aria-label="Thumbnails">${$("grid",16)}</button></span>
|
|
152
|
+
<select class="btn" id="sort" aria-label="Sort by"><option value="name"${fe==="name"?" selected":""}>Name</option><option value="mtime"${fe==="mtime"?" selected":""}>Newest</option><option value="size"${fe==="size"?" selected":""}>Largest</option></select>
|
|
153
|
+
<button class="btn" id="search-here" title="Search inside this folder">${$("search",16)}<span class="hide-sm">Search here</span></button></div>
|
|
154
|
+
<span class="meta">${u} folders \xB7 ${o.length-u} files</span></div>
|
|
155
|
+
${f}
|
|
156
|
+
${b&&!n?`<section class="card readme"><div class="card-head">${$("book",16)} ${h(b.name)}</div><article class="md" id="readme"></article></section>`:""}`;let y=w("filter");if(y.oninput=()=>{se=y.value.toLowerCase();let m=y.selectionStart;nt(t).then(()=>{let L=w("filter");L.focus(),L.setSelectionRange(m,m)})},y.onkeydown=m=>{m.key==="Enter"&&t.querySelector("[data-e]")?.click()},w("sort").onchange=m=>{fe=m.target.value,I("sort",fe),nt(t)},w("search-here").onclick=()=>tt("here"),b&&!n){let m=z(e,b.name),L=m+"@"+b.mtime,E=C=>{let T=w("readme");!T||M().folder!==e||(/\.txt$/i.test(b.name)||!/\./.test(b.name)?T.innerHTML=`<pre>${h(C)}</pre>`:Se(T,String(C),e))};Dt.has(L)?E(Dt.get(L)):(w("readme").innerHTML='<div class="skeleton" style="width:50%"></div>',R(V(m)).then(C=>{Dt.set(L,String(C)),E(String(C))}).catch(C=>{let T=w("readme");T&&(T.innerHTML=`<p class="note">${h(C.message)}</p>`)}))}}function Xn(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=M();s?(se="",H({folder:s.dataset.f})):a?q({view:a.dataset.v}):r&&(r.dataset.k==="folder"?(se="",H({folder:z(o.folder,r.dataset.e)})):H({folder:o.folder,open:r.dataset.e}))})}var re=new Set(JSON.parse(I("open")||'[""]'));function Jn(t,e,n){let s=re.has(t),r=s&&x.cache.has(t)?x.cache.get(t).filter(i=>i.type==="folder"):[];x.settings.ignored==="hide"&&(r=r.filter(i=>!Y(z(t,i.name))));let a=t?ne(t,"folder"):"",o=t?Ue(t):0;return`<li><div class="item"><button class="twist" data-t="${h(t)}" aria-expanded="${s}" aria-label="${s?"Close":"Open"} ${h(e)}">${$("chevron-right",14)}</button><button class="node${n===t?" chosen":""}${a?" s-"+a:""}" data-c="${h(t)}">${$(s?"folder-open":"folder",16)}<span class="nm">${h(e)}</span>${o?`<span class="pill warn">${o}</span>`:""}${B(a,!0)}</button></div>${s?`<ul class="level">${r.map(i=>Jn(z(t,i.name),i.name,n)).join("")}</ul>`:""}</li>`}async function Le(){let t=M().folder,e=t?t.split("/"):[];for(let n=0;n<=e.length;n++)re.add(e.slice(0,n).join("/"));await Promise.all([...re].map(n=>Fe(n).catch(()=>re.delete(n)))),I("open",JSON.stringify([...re])),w("tree").innerHTML=Jn("",x.info.name,t),w("tree").querySelector(".chosen")?.scrollIntoView({block:"nearest"})}function Yn(){w("tree").addEventListener("click",t=>{let e=t.target.closest("[data-t]"),n=t.target.closest("[data-c]");if(e){let s=e.dataset.t;re.has(s)?re.delete(s):re.add(s),Le()}else n&&(st(),H({folder:n.dataset.c}))})}var Ft=["conflict","modified","renamed","added","new","deleted"];function Wt(){let t=x.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")}">${$("git-branch",14)}${h(t.branch||"detached")}${t.head?` <span class="faint">${h(t.head)}</span>`:""}${e?` <span class="sync">${e}</span>`:""}</span>`}async function es(t){let e=x.git;if(!e){t.innerHTML='<p class="empty">This folder isn\u2019t in a git repository, so there are no changes to show.</p>';return}let s=M().q==="all",r={};for(let c of e.changes)r[c.state]=(r[c.state]||0)+1;let a=[...e.changes].sort((c,d)=>Ft.indexOf(c.state)-Ft.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=Ft.filter(c=>r[c]).map(c=>`<span class="legend">${B(c)} ${r[c]} ${G[c].toLowerCase()}</span>`).join("");if(t.innerHTML=`<header class="head"><h2 class="page-title">${$("diff")} Changes</h2>${Wt()}</header>
|
|
157
|
+
${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>
|
|
158
|
+
<button class="btn${s?"":" on"}" data-cv="">Files</button><button class="btn${s?" on":""}" data-cv="all">All diffs</button></div>
|
|
159
|
+
<div class="rows">${a.map(c=>`<a class="row s-${c.state}" href="${P(c.path,{tab:"diff"})}"><span class="ico">${$(c.state==="deleted"?"trash":"file",18)}</span><span class="nm">${h(c.path)}${c.from?` <span class="faint">\u2190 ${h(c.from)}</span>`:""}</span><span class="marks">${c.staged?'<span class="pill" title="Staged">staged</span>':""}${B(c.state)}</span><span class="sz">${c.add!==void 0?`<span class="plus">+${c.add}</span> <span class="minus">\u2212${c.del||0}</span>`:""}</span><span class="tm">${G[c.state]}</span></a>`).join("")}</div>
|
|
160
|
+
${s?'<div id="all-diffs"></div>':""}`:'<p class="empty">Nothing has changed since the last commit. \u2728</p>'}`,t.querySelectorAll("[data-cv]").forEach(c=>c.onclick=()=>q({q:c.dataset.cv})),!s||!a.length)return;let p=t.querySelector("#all-diffs");for(let c of a.slice(0,80)){let d=document.createElement("section");d.className="diff-file",d.innerHTML=`<h3 class="group-title"><a href="${P(c.path,{tab:"diff"})}">${h(c.path)}</a>${B(c.state)}</h3><div class="dbody"><p class="note">Loading\u2026</p></div>`,p.append(d),R("api/git/diff?p="+encodeURIComponent(c.path)).then(u=>He(d.querySelector(".dbody"),u,c.path)).catch(u=>d.querySelector(".dbody").innerHTML=`<p class="note">${h(u.message)}</p>`)}}var Be=matchMedia("(max-width: 759px)"),ts=t=>Be.matches?document.scrollingElement:t,ns=new Map,Ut="",Te=matchMedia("(min-width: 1000px)"),Vt=matchMedia("(min-width: 1280px)");function ss(){let t=x.settings.theme;document.documentElement.dataset.theme=t==="auto"?"":t}function Ea(){let{open:t}=M(),e=w("app");e.classList.toggle("rail",Te.matches),e.classList.toggle("split",!!t&&Vt.matches),w("main").hidden=!!t&&!Vt.matches,w("file").hidden=!t}var Zt="";async function rt(t=!1){let e=M(),n=JSON.stringify([e.folder,e.m,e.q,e.scope,e.opts,e.inc,e.view,e.open]);if(!t&&n===Zt)return;let s=n===Zt?ts(w("main")).scrollTop:0;Zt=n;let r=w("main");Ca(r)||(document.querySelectorAll("[data-nav]").forEach(a=>a.classList.toggle("on",a.dataset.nav===e.m)),e.m==="search"&&e.q?await Gn(r):e.m==="changes"?await es(r):e.m==="review"?Hn(r,e.q):await nt(r),Be.matches&&e.open||(ts(r).scrollTop=s))}var Ca=t=>{let e=document.activeElement;return e&&e.tagName==="TEXTAREA"&&t.contains(e)&&e.value.trim()};function rs(){w("branch").innerHTML=Wt();let t=x.git?x.git.changes.length:0;w("changes-btn").hidden=!x.info.git,w("changes-count").textContent=String(t),w("changes-count").hidden=!t,qt()}async function Ne(){let t=M();Be.matches&&t.open&&!Ut&&ns.set(t.folder,document.scrollingElement.scrollTop);let e=Be.matches&&!t.open&&Ut;Ut=t.open,Ea(),await rt(e),t.open?Ye(w("file")):Un(),e&&(document.scrollingElement.scrollTop=ns.get(t.folder)||0),Te.matches&&Le(),document.title=`${t.open||(t.m==="search"?"\u201C"+t.q+"\u201D":t.folder.split("/").pop()||x.info.name)} \u2014 folderview`}function qa(){let t=new EventSource("api/events");t.addEventListener("hello",()=>w("live").classList.add("on")),t.onerror=()=>w("live").classList.remove("on"),t.addEventListener("change",async e=>{let n=JSON.parse(e.data);for(let a of n.folders)x.cache.delete(a);n.files.length&&Qn(),n.git&&await dt(),rs();let s=M(),r=s.open?(s.folder?s.folder+"/":"")+s.open:"";(s.m==="changes"?n.git:!s.m&&(n.folders.includes(s.folder)||n.git))&&await rt(!0),r&&n.files.includes(r)&&Ye(w("file"),!0),Te.matches&&Le()}),t.addEventListener("comments",async()=>{await Ae(),K("comments")})}pt("comments",()=>{qt(),Zn(w("file"));let t=M();(t.m==="review"||!t.m)&&rt(!0),Te.matches&&Le()});pt("settings",()=>{ss(),rt(!0),M().open&&Ye(w("file"),!0),Te.matches&&Le()});function ja(){let t=w("settings-pop");if(t)return t.remove();let e=x.settings,n=document.createElement("div");n.id="settings-pop",n.className="pop",n.innerHTML=`<h3>Settings</h3>
|
|
161
|
+
<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>
|
|
162
|
+
<label>Ignored files <select data-s="ignored"><option value="dim">Show dimmed</option><option value="hide">Hide</option></select></label>
|
|
163
|
+
<label class="check"><input type="checkbox" data-s="wrap"> Wrap long lines</label>
|
|
164
|
+
<label class="check"><input type="checkbox" data-s="review"> Review mode (click a line to comment)</label>
|
|
165
|
+
<label class="check"><input type="checkbox" data-s="resolved"> Show resolved comments in files</label>
|
|
166
|
+
<label>Your name on comments <input data-s="author" placeholder="${h(x.info.author)}" value="${h(e.author)}"></label>
|
|
167
|
+
<h3>Shortcuts</h3>
|
|
168
|
+
<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>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>
|
|
169
|
+
<p class="faint">folderview ${h(x.info.version||"")} \xB7 ${h(x.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=()=>{be(r,s.type==="checkbox"?s.checked:s.value.trim()),K("settings")}}setTimeout(()=>{let s=r=>{!n.contains(r.target)&&r.target!==w("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(),Bt()):t.key==="/"&&!e?(t.preventDefault(),tt()):t.key==="Escape"&&!e&&!w("qo")&&M().open?q({open:"",tab:"",line:""}):t.key==="Escape"&&document.activeElement===w("q")&&w("q").blur()});function Ia(){let t=Number(I("tree"))||280;w("app").style.setProperty("--tree",t+"px"),w("splitter").onpointerdown=e=>{e.preventDefault();let n=r=>{let a=Math.min(560,Math.max(180,r.clientX));w("app").style.setProperty("--tree",a+"px"),I("tree",String(a))},s=()=>{removeEventListener("pointermove",n),removeEventListener("pointerup",s)};addEventListener("pointermove",n),addEventListener("pointerup",s)}}async function za(){ss();try{x.info=await R("api/info")}catch(t){w("main").innerHTML=`<p class="empty">Can't reach the filescope server: ${h(t.message)}</p>`;return}w("repo").textContent=x.info.name,w("search-icon").innerHTML=$("search",16),w("qo-btn").insertAdjacentHTML("afterbegin",$("file")),w("changes-btn").insertAdjacentHTML("afterbegin",$("diff")),w("review-btn").insertAdjacentHTML("afterbegin",$("chat")),w("settings-btn").innerHTML=$("settings"),new ResizeObserver(()=>document.documentElement.style.setProperty("--bar-h",w("bar").offsetHeight+"px")).observe(w("bar")),Be.onchange=()=>Ne(),w("home").onclick=()=>{st(),H({folder:""})},document.querySelectorAll("[data-nav]").forEach(t=>t.onclick=()=>{let e=M();e.m===t.dataset.nav?H({folder:e.folder}):H({folder:e.folder,m:t.dataset.nav})}),w("qo-btn").onclick=()=>Bt(),w("settings-btn").onclick=ja,Yn(),Xn(w("main")),Kn(),Ia(),await Promise.all([dt(),Ae()]),rs(),addEventListener("hashchange",Ne),Te.onchange=()=>Ne(),Vt.onchange=()=>Ne(),await Ne(),qa(),x.info.readOnly&&ke("Read-only: comments can\u2019t be added")}za();
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
|
6
|
+
<meta name="theme-color" content="#f8f8fb" media="(prefers-color-scheme: light)" />
|
|
7
|
+
<meta name="theme-color" content="#16171c" media="(prefers-color-scheme: dark)" />
|
|
8
|
+
<title>folderview</title>
|
|
9
|
+
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='8' fill='%235b5fd6'/><path d='M12 10l-6 6 6 6M20 10l6 6-6 6' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/></svg>" />
|
|
10
|
+
<link rel="stylesheet" href="assets/app.css" />
|
|
11
|
+
<script>
|
|
12
|
+
// the saved theme before anything draws, so a dark page never flashes white
|
|
13
|
+
try {
|
|
14
|
+
const t = localStorage.getItem('folderview:theme');
|
|
15
|
+
if (t === 'light' || t === 'dark') document.documentElement.dataset.theme = t;
|
|
16
|
+
} catch {}
|
|
17
|
+
</script>
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<div class="shell">
|
|
21
|
+
<header class="bar" id="bar">
|
|
22
|
+
<button class="brand" id="home" title="Back to the top folder">
|
|
23
|
+
<span class="logo"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round"><path d="m8 7-5 5 5 5M16 7l5 5-5 5" /></svg></span><b id="repo">…</b>
|
|
24
|
+
</button>
|
|
25
|
+
<span id="branch"></span>
|
|
26
|
+
<form class="search" id="search-form" role="search">
|
|
27
|
+
<span id="search-icon"></span>
|
|
28
|
+
<input id="q" type="search" placeholder="Search in files" aria-label="Search in files" autocomplete="off" spellcheck="false" enterkeyhint="search" />
|
|
29
|
+
<button type="button" class="chip" id="scope">everywhere</button>
|
|
30
|
+
</form>
|
|
31
|
+
<nav class="bar-acts">
|
|
32
|
+
<button class="icon-btn" id="qo-btn" title="Go to a file (Ctrl+P)" aria-label="Go to a file"></button>
|
|
33
|
+
<button class="icon-btn" data-nav="changes" id="changes-btn" title="What changed since the last commit" aria-label="Changes" hidden><span class="count" id="changes-count" hidden>0</span></button>
|
|
34
|
+
<button class="icon-btn" data-nav="review" id="review-btn" title="Review comments" aria-label="Review"><span class="count warn" id="review-count" hidden>0</span></button>
|
|
35
|
+
<button class="icon-btn" id="settings-btn" title="Settings" aria-label="Settings"></button>
|
|
36
|
+
<span class="live" id="live" title="Live: updates as files change"></span>
|
|
37
|
+
</nav>
|
|
38
|
+
</header>
|
|
39
|
+
<div class="app" id="app">
|
|
40
|
+
<aside class="tree" aria-label="Folders"><ul class="roots" id="tree"></ul></aside>
|
|
41
|
+
<div class="splitter-wrap"><div class="splitter" id="splitter" title="Drag to resize"></div></div>
|
|
42
|
+
<section class="main" id="main" aria-label="Folder"></section>
|
|
43
|
+
<section class="file" id="file" aria-label="File" hidden></section>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
<script type="module" src="assets/main.js"></script>
|
|
47
|
+
</body>
|
|
48
|
+
</html>
|