@pagesmith/docs 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/README.md +374 -0
- package/dist/abap-DriO5VG6.mjs +5 -0
- package/dist/abap-DriO5VG6.mjs.map +1 -0
- package/dist/actionscript-3-G6toewHp.mjs +5 -0
- package/dist/actionscript-3-G6toewHp.mjs.map +1 -0
- package/dist/ada-C_QiJ0Pq.mjs +5 -0
- package/dist/ada-C_QiJ0Pq.mjs.map +1 -0
- package/dist/andromeeda-CoIEPgYR.mjs +6 -0
- package/dist/andromeeda-CoIEPgYR.mjs.map +1 -0
- package/dist/angular-html-D9wIlok7.mjs +35 -0
- package/dist/angular-html-D9wIlok7.mjs.map +1 -0
- package/dist/angular-ts-Dxk7hl9Z.mjs +29 -0
- package/dist/angular-ts-Dxk7hl9Z.mjs.map +1 -0
- package/dist/apache-B1aRGcgY.mjs +5 -0
- package/dist/apache-B1aRGcgY.mjs.map +1 -0
- package/dist/apex-FoK4UgwA.mjs +5 -0
- package/dist/apex-FoK4UgwA.mjs.map +1 -0
- package/dist/apl-DwmTqCJs.mjs +19 -0
- package/dist/apl-DwmTqCJs.mjs.map +1 -0
- package/dist/applescript-eBeY0Hp4.mjs +5 -0
- package/dist/applescript-eBeY0Hp4.mjs.map +1 -0
- package/dist/ara-CkIucGv1.mjs +5 -0
- package/dist/ara-CkIucGv1.mjs.map +1 -0
- package/dist/asciidoc-AIdrECCR.mjs +5 -0
- package/dist/asciidoc-AIdrECCR.mjs.map +1 -0
- package/dist/asm-CflFLM6a.mjs +5 -0
- package/dist/asm-CflFLM6a.mjs.map +1 -0
- package/dist/astro-DLt5gl0n.mjs +21 -0
- package/dist/astro-DLt5gl0n.mjs.map +1 -0
- package/dist/aurora-x-DbqEqkUT.mjs +6 -0
- package/dist/aurora-x-DbqEqkUT.mjs.map +1 -0
- package/dist/awk-Br_61sCS.mjs +5 -0
- package/dist/awk-Br_61sCS.mjs.map +1 -0
- package/dist/ayu-dark-DdJXJf7U.mjs +6 -0
- package/dist/ayu-dark-DdJXJf7U.mjs.map +1 -0
- package/dist/ayu-light-Bg-9Hujp.mjs +6 -0
- package/dist/ayu-light-Bg-9Hujp.mjs.map +1 -0
- package/dist/ayu-mirage-7v6-qMvl.mjs +6 -0
- package/dist/ayu-mirage-7v6-qMvl.mjs.map +1 -0
- package/dist/ballerina-D-8GYl8R.mjs +5 -0
- package/dist/ballerina-D-8GYl8R.mjs.map +1 -0
- package/dist/bat-CJ4nIaxw.mjs +5 -0
- package/dist/bat-CJ4nIaxw.mjs.map +1 -0
- package/dist/beancount-DFPOglwN.mjs +5 -0
- package/dist/beancount-DFPOglwN.mjs.map +1 -0
- package/dist/berry-DiM_rwEt.mjs +5 -0
- package/dist/berry-DiM_rwEt.mjs.map +1 -0
- package/dist/bibtex-ryU9pJLB.mjs +5 -0
- package/dist/bibtex-ryU9pJLB.mjs.map +1 -0
- package/dist/bicep-DFoNCrG3.mjs +5 -0
- package/dist/bicep-DFoNCrG3.mjs.map +1 -0
- package/dist/bird2-C3EaFiUY.mjs +5 -0
- package/dist/bird2-C3EaFiUY.mjs.map +1 -0
- package/dist/blade-Cwq7FVfH.mjs +23 -0
- package/dist/blade-Cwq7FVfH.mjs.map +1 -0
- package/dist/bsl-Ci4vkNj8.mjs +8 -0
- package/dist/bsl-Ci4vkNj8.mjs.map +1 -0
- package/dist/c-D7oHDxxD.mjs +8 -0
- package/dist/c-D7oHDxxD.mjs.map +1 -0
- package/dist/c3-D5hU-x2t.mjs +5 -0
- package/dist/c3-D5hU-x2t.mjs.map +1 -0
- package/dist/cadence-B-Z42oTz.mjs +5 -0
- package/dist/cadence-B-Z42oTz.mjs.map +1 -0
- package/dist/cairo-BpET0YK1.mjs +8 -0
- package/dist/cairo-BpET0YK1.mjs.map +1 -0
- package/dist/catppuccin-frappe-0BRWFMtJ.mjs +6 -0
- package/dist/catppuccin-frappe-0BRWFMtJ.mjs.map +1 -0
- package/dist/catppuccin-latte-VaqpfzxV.mjs +6 -0
- package/dist/catppuccin-latte-VaqpfzxV.mjs.map +1 -0
- package/dist/catppuccin-macchiato-qrypRbXk.mjs +6 -0
- package/dist/catppuccin-macchiato-qrypRbXk.mjs.map +1 -0
- package/dist/catppuccin-mocha-Dvb6gv4O.mjs +6 -0
- package/dist/catppuccin-mocha-Dvb6gv4O.mjs.map +1 -0
- package/dist/clarity-egx-5RLz.mjs +5 -0
- package/dist/clarity-egx-5RLz.mjs.map +1 -0
- package/dist/cli/bin.d.mts +1 -0
- package/dist/cli/bin.mjs +115 -0
- package/dist/cli/bin.mjs.map +1 -0
- package/dist/clojure-N5xIuTbG.mjs +5 -0
- package/dist/clojure-N5xIuTbG.mjs.map +1 -0
- package/dist/cmake-CYzXNVI_.mjs +5 -0
- package/dist/cmake-CYzXNVI_.mjs.map +1 -0
- package/dist/cobol-DuznKErk.mjs +13 -0
- package/dist/cobol-DuznKErk.mjs.map +1 -0
- package/dist/codeowners-BaallJaj.mjs +5 -0
- package/dist/codeowners-BaallJaj.mjs.map +1 -0
- package/dist/codeql-BIahF8Ga.mjs +5 -0
- package/dist/codeql-BIahF8Ga.mjs.map +1 -0
- package/dist/coffee-t6lXzaXy.mjs +8 -0
- package/dist/coffee-t6lXzaXy.mjs.map +1 -0
- package/dist/common-lisp-bLMBDFt9.mjs +5 -0
- package/dist/common-lisp-bLMBDFt9.mjs.map +1 -0
- package/dist/coq-h9z5p2Ui.mjs +5 -0
- package/dist/coq-h9z5p2Ui.mjs.map +1 -0
- package/dist/cpp-D6_V2gI1.mjs +27 -0
- package/dist/cpp-D6_V2gI1.mjs.map +1 -0
- package/dist/crystal-BH-Qv6Rl.mjs +21 -0
- package/dist/crystal-BH-Qv6Rl.mjs.map +1 -0
- package/dist/csharp-BbHR3YVQ.mjs +5 -0
- package/dist/csharp-BbHR3YVQ.mjs.map +1 -0
- package/dist/css-Wu--EEs5.mjs +8 -0
- package/dist/css-Wu--EEs5.mjs.map +1 -0
- package/dist/csv-CRvIpAc5.mjs +5 -0
- package/dist/csv-CRvIpAc5.mjs.map +1 -0
- package/dist/cue-B8A_h-kS.mjs +5 -0
- package/dist/cue-B8A_h-kS.mjs.map +1 -0
- package/dist/cypher-B8mmimml.mjs +5 -0
- package/dist/cypher-B8mmimml.mjs.map +1 -0
- package/dist/d-Ddz3GmKc.mjs +5 -0
- package/dist/d-Ddz3GmKc.mjs.map +1 -0
- package/dist/dark-plus-BjClkp3W.mjs +6 -0
- package/dist/dark-plus-BjClkp3W.mjs.map +1 -0
- package/dist/dart-BOQAkR91.mjs +5 -0
- package/dist/dart-BOQAkR91.mjs.map +1 -0
- package/dist/dax-D3YKmfop.mjs +5 -0
- package/dist/dax-D3YKmfop.mjs.map +1 -0
- package/dist/desktop-wo52vLHj.mjs +5 -0
- package/dist/desktop-wo52vLHj.mjs.map +1 -0
- package/dist/diff-nA9OrLiI.mjs +5 -0
- package/dist/diff-nA9OrLiI.mjs.map +1 -0
- package/dist/docker-BgWkJ5L9.mjs +5 -0
- package/dist/docker-BgWkJ5L9.mjs.map +1 -0
- package/dist/dotenv-90bAk1yC.mjs +5 -0
- package/dist/dotenv-90bAk1yC.mjs.map +1 -0
- package/dist/dracula-EYPvHKFq.mjs +6 -0
- package/dist/dracula-EYPvHKFq.mjs.map +1 -0
- package/dist/dracula-soft-Bb4JppaT.mjs +6 -0
- package/dist/dracula-soft-Bb4JppaT.mjs.map +1 -0
- package/dist/dream-maker-DbEH6ABX.mjs +5 -0
- package/dist/dream-maker-DbEH6ABX.mjs.map +1 -0
- package/dist/edge-CiNxTnJq.mjs +15 -0
- package/dist/edge-CiNxTnJq.mjs.map +1 -0
- package/dist/elixir-M-tyUuPQ.mjs +8 -0
- package/dist/elixir-M-tyUuPQ.mjs.map +1 -0
- package/dist/elm-CPy7ntV_.mjs +8 -0
- package/dist/elm-CPy7ntV_.mjs.map +1 -0
- package/dist/emacs-lisp-Brxx0Sbt.mjs +5 -0
- package/dist/emacs-lisp-Brxx0Sbt.mjs.map +1 -0
- package/dist/engine-javascript-CjxD84Z_.mjs +3058 -0
- package/dist/engine-javascript-CjxD84Z_.mjs.map +1 -0
- package/dist/engine-oniguruma-B2buYh9y.mjs +389 -0
- package/dist/engine-oniguruma-B2buYh9y.mjs.map +1 -0
- package/dist/erb-CP0kP8S1.mjs +13 -0
- package/dist/erb-CP0kP8S1.mjs.map +1 -0
- package/dist/erlang-Ji96SB8L.mjs +8 -0
- package/dist/erlang-Ji96SB8L.mjs.map +1 -0
- package/dist/everforest-dark-mXu75VmU.mjs +6 -0
- package/dist/everforest-dark-mXu75VmU.mjs.map +1 -0
- package/dist/everforest-light-B0xAPlUp.mjs +6 -0
- package/dist/everforest-light-B0xAPlUp.mjs.map +1 -0
- package/dist/fennel-DZeZiT-Z.mjs +5 -0
- package/dist/fennel-DZeZiT-Z.mjs.map +1 -0
- package/dist/fish-BW_XyVWl.mjs +5 -0
- package/dist/fish-BW_XyVWl.mjs.map +1 -0
- package/dist/fluent-D5wjIx4S.mjs +5 -0
- package/dist/fluent-D5wjIx4S.mjs.map +1 -0
- package/dist/fortran-fixed-form-pFDq8aul.mjs +8 -0
- package/dist/fortran-fixed-form-pFDq8aul.mjs.map +1 -0
- package/dist/fortran-free-form-B6T0euh-.mjs +5 -0
- package/dist/fortran-free-form-B6T0euh-.mjs.map +1 -0
- package/dist/fsharp-DFzfL_uZ.mjs +8 -0
- package/dist/fsharp-DFzfL_uZ.mjs.map +1 -0
- package/dist/gdresource-DZkMKM9Q.mjs +13 -0
- package/dist/gdresource-DZkMKM9Q.mjs.map +1 -0
- package/dist/gdscript-DwtQqEcX.mjs +5 -0
- package/dist/gdscript-DwtQqEcX.mjs.map +1 -0
- package/dist/gdshader-rDwkUCaa.mjs +5 -0
- package/dist/gdshader-rDwkUCaa.mjs.map +1 -0
- package/dist/genie-BfhM6kGv.mjs +5 -0
- package/dist/genie-BfhM6kGv.mjs.map +1 -0
- package/dist/gherkin-G-JA03FJ.mjs +5 -0
- package/dist/gherkin-G-JA03FJ.mjs.map +1 -0
- package/dist/git-commit-drj2jjWh.mjs +8 -0
- package/dist/git-commit-drj2jjWh.mjs.map +1 -0
- package/dist/git-rebase-CaohyQnS.mjs +8 -0
- package/dist/git-rebase-CaohyQnS.mjs.map +1 -0
- package/dist/github-dark-CTenoRQ8.mjs +6 -0
- package/dist/github-dark-CTenoRQ8.mjs.map +1 -0
- package/dist/github-dark-default-Con6b1h-.mjs +6 -0
- package/dist/github-dark-default-Con6b1h-.mjs.map +1 -0
- package/dist/github-dark-dimmed-CaAnvWw3.mjs +6 -0
- package/dist/github-dark-dimmed-CaAnvWw3.mjs.map +1 -0
- package/dist/github-dark-high-contrast-COm7y1Rv.mjs +6 -0
- package/dist/github-dark-high-contrast-COm7y1Rv.mjs.map +1 -0
- package/dist/github-light-D74aa4dO.mjs +6 -0
- package/dist/github-light-D74aa4dO.mjs.map +1 -0
- package/dist/github-light-default-BBVzuVUz.mjs +6 -0
- package/dist/github-light-default-BBVzuVUz.mjs.map +1 -0
- package/dist/github-light-high-contrast-CqxSzsLD.mjs +6 -0
- package/dist/github-light-high-contrast-CqxSzsLD.mjs.map +1 -0
- package/dist/gleam-DzWkrReo.mjs +5 -0
- package/dist/gleam-DzWkrReo.mjs.map +1 -0
- package/dist/glimmer-js-BNQY0kPX.mjs +17 -0
- package/dist/glimmer-js-BNQY0kPX.mjs.map +1 -0
- package/dist/glimmer-ts-DO-qafJY.mjs +17 -0
- package/dist/glimmer-ts-DO-qafJY.mjs.map +1 -0
- package/dist/glsl-wU4MxvvQ.mjs +10 -0
- package/dist/glsl-wU4MxvvQ.mjs.map +1 -0
- package/dist/gn-DVz3m6tN.mjs +5 -0
- package/dist/gn-DVz3m6tN.mjs.map +1 -0
- package/dist/gnuplot-D4teOAbn.mjs +5 -0
- package/dist/gnuplot-D4teOAbn.mjs.map +1 -0
- package/dist/go-DcqYXZDE.mjs +5 -0
- package/dist/go-DcqYXZDE.mjs.map +1 -0
- package/dist/graphql-CAmmtGyG.mjs +19 -0
- package/dist/graphql-CAmmtGyG.mjs.map +1 -0
- package/dist/groovy-BdsJaZey.mjs +5 -0
- package/dist/groovy-BdsJaZey.mjs.map +1 -0
- package/dist/gruvbox-dark-hard-CGsJkBU-.mjs +6 -0
- package/dist/gruvbox-dark-hard-CGsJkBU-.mjs.map +1 -0
- package/dist/gruvbox-dark-medium-uVadnpDA.mjs +6 -0
- package/dist/gruvbox-dark-medium-uVadnpDA.mjs.map +1 -0
- package/dist/gruvbox-dark-soft-CGpZgcKq.mjs +6 -0
- package/dist/gruvbox-dark-soft-CGpZgcKq.mjs.map +1 -0
- package/dist/gruvbox-light-hard-BXZeSfoD.mjs +6 -0
- package/dist/gruvbox-light-hard-BXZeSfoD.mjs.map +1 -0
- package/dist/gruvbox-light-medium-D7mAxe90.mjs +6 -0
- package/dist/gruvbox-light-medium-D7mAxe90.mjs.map +1 -0
- package/dist/gruvbox-light-soft-enFNSJ1V.mjs +6 -0
- package/dist/gruvbox-light-soft-enFNSJ1V.mjs.map +1 -0
- package/dist/hack-DgaC5QUw.mjs +13 -0
- package/dist/hack-DgaC5QUw.mjs.map +1 -0
- package/dist/haml-1vrxYPQe.mjs +15 -0
- package/dist/haml-1vrxYPQe.mjs.map +1 -0
- package/dist/handlebars-BOf036w9.mjs +17 -0
- package/dist/handlebars-BOf036w9.mjs.map +1 -0
- package/dist/haskell-BgXObw3Z.mjs +5 -0
- package/dist/haskell-BgXObw3Z.mjs.map +1 -0
- package/dist/haxe-SN6gQnv7.mjs +5 -0
- package/dist/haxe-SN6gQnv7.mjs.map +1 -0
- package/dist/hcl-DfQ78ybU.mjs +5 -0
- package/dist/hcl-DfQ78ybU.mjs.map +1 -0
- package/dist/hjson-DsbHj1Vu.mjs +5 -0
- package/dist/hjson-DsbHj1Vu.mjs.map +1 -0
- package/dist/hlsl-DErhWTj4.mjs +5 -0
- package/dist/hlsl-DErhWTj4.mjs.map +1 -0
- package/dist/horizon-bright-BLpSmqnO.mjs +6 -0
- package/dist/horizon-bright-BLpSmqnO.mjs.map +1 -0
- package/dist/horizon-mHk0xSKw.mjs +6 -0
- package/dist/horizon-mHk0xSKw.mjs.map +1 -0
- package/dist/houston-CJWIjsF-.mjs +6 -0
- package/dist/houston-CJWIjsF-.mjs.map +1 -0
- package/dist/html-derivative-CoKpUZPA.mjs +8 -0
- package/dist/html-derivative-CoKpUZPA.mjs.map +1 -0
- package/dist/html-hLCdjm8s.mjs +15 -0
- package/dist/html-hLCdjm8s.mjs.map +1 -0
- package/dist/http-Cu2vb2m1.mjs +17 -0
- package/dist/http-Cu2vb2m1.mjs.map +1 -0
- package/dist/hurl-DXLUiPe9.mjs +15 -0
- package/dist/hurl-DXLUiPe9.mjs.map +1 -0
- package/dist/hxml-D53ff3CT.mjs +8 -0
- package/dist/hxml-D53ff3CT.mjs.map +1 -0
- package/dist/hy-V5YDnsp0.mjs +5 -0
- package/dist/hy-V5YDnsp0.mjs.map +1 -0
- package/dist/imba-Dj8CXVx-.mjs +5 -0
- package/dist/imba-Dj8CXVx-.mjs.map +1 -0
- package/dist/index.d.mts +102 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +3 -0
- package/dist/ini-BBJUwrOG.mjs +5 -0
- package/dist/ini-BBJUwrOG.mjs.map +1 -0
- package/dist/java-YvKbK6tX.mjs +8 -0
- package/dist/java-YvKbK6tX.mjs.map +1 -0
- package/dist/javascript-YIAaXWRu.mjs +8 -0
- package/dist/javascript-YIAaXWRu.mjs.map +1 -0
- package/dist/jinja-ENyZ39OR.mjs +12 -0
- package/dist/jinja-ENyZ39OR.mjs.map +1 -0
- package/dist/jison-a-QW5GR4.mjs +8 -0
- package/dist/jison-a-QW5GR4.mjs.map +1 -0
- package/dist/json-D_p_sVuw.mjs +8 -0
- package/dist/json-D_p_sVuw.mjs.map +1 -0
- package/dist/json5-DC6Kkd4p.mjs +5 -0
- package/dist/json5-DC6Kkd4p.mjs.map +1 -0
- package/dist/jsonc-CXqrxP7Z.mjs +5 -0
- package/dist/jsonc-CXqrxP7Z.mjs.map +1 -0
- package/dist/jsonl-CzqgMhZd.mjs +5 -0
- package/dist/jsonl-CzqgMhZd.mjs.map +1 -0
- package/dist/jsonnet-Hvy31yDW.mjs +5 -0
- package/dist/jsonnet-Hvy31yDW.mjs.map +1 -0
- package/dist/jssm-CKXXM0Nd.mjs +5 -0
- package/dist/jssm-CKXXM0Nd.mjs.map +1 -0
- package/dist/jsx-Cmr67-nO.mjs +8 -0
- package/dist/jsx-Cmr67-nO.mjs.map +1 -0
- package/dist/julia-apY6-EoT.mjs +19 -0
- package/dist/julia-apY6-EoT.mjs.map +1 -0
- package/dist/just-DPxowZX-.mjs +21 -0
- package/dist/just-DPxowZX-.mjs.map +1 -0
- package/dist/kanagawa-dragon-bgbtpXkX.mjs +6 -0
- package/dist/kanagawa-dragon-bgbtpXkX.mjs.map +1 -0
- package/dist/kanagawa-lotus-CAjM2aBD.mjs +6 -0
- package/dist/kanagawa-lotus-CAjM2aBD.mjs.map +1 -0
- package/dist/kanagawa-wave-gUF-XydY.mjs +6 -0
- package/dist/kanagawa-wave-gUF-XydY.mjs.map +1 -0
- package/dist/kdl-DakeRkny.mjs +5 -0
- package/dist/kdl-DakeRkny.mjs.map +1 -0
- package/dist/kotlin-Cy2z7uIJ.mjs +5 -0
- package/dist/kotlin-Cy2z7uIJ.mjs.map +1 -0
- package/dist/kusto-8vFexomq.mjs +5 -0
- package/dist/kusto-8vFexomq.mjs.map +1 -0
- package/dist/laserwave-afq0Xxwk.mjs +6 -0
- package/dist/laserwave-afq0Xxwk.mjs.map +1 -0
- package/dist/latex-D_F2h8-H.mjs +8 -0
- package/dist/latex-D_F2h8-H.mjs.map +1 -0
- package/dist/lean-IHm98qhW.mjs +5 -0
- package/dist/lean-IHm98qhW.mjs.map +1 -0
- package/dist/less-D6RfQ6-S.mjs +5 -0
- package/dist/less-D6RfQ6-S.mjs.map +1 -0
- package/dist/light-plus-Dwa6Dmsm.mjs +6 -0
- package/dist/light-plus-Dwa6Dmsm.mjs.map +1 -0
- package/dist/liquid-DK7BdQ-d.mjs +17 -0
- package/dist/liquid-DK7BdQ-d.mjs.map +1 -0
- package/dist/llvm-CbsqsAF1.mjs +5 -0
- package/dist/llvm-CbsqsAF1.mjs.map +1 -0
- package/dist/log-CutLVNLV.mjs +5 -0
- package/dist/log-CutLVNLV.mjs.map +1 -0
- package/dist/logo-DNTC5lxi.mjs +5 -0
- package/dist/logo-DNTC5lxi.mjs.map +1 -0
- package/dist/lua-NCVDi2Y_.mjs +10 -0
- package/dist/lua-NCVDi2Y_.mjs.map +1 -0
- package/dist/luau-Z-b9t2YR.mjs +5 -0
- package/dist/luau-Z-b9t2YR.mjs.map +1 -0
- package/dist/make-D7o-TjTO.mjs +5 -0
- package/dist/make-D7o-TjTO.mjs.map +1 -0
- package/dist/markdown-CEvLuIE_.mjs +5 -0
- package/dist/markdown-CEvLuIE_.mjs.map +1 -0
- package/dist/markdown-config-BGDiDMhB.d.mts +2094 -0
- package/dist/markdown-config-BGDiDMhB.d.mts.map +1 -0
- package/dist/marko-DyPWMVoi.mjs +17 -0
- package/dist/marko-DyPWMVoi.mjs.map +1 -0
- package/dist/material-theme-BMSwLkhz.mjs +6 -0
- package/dist/material-theme-BMSwLkhz.mjs.map +1 -0
- package/dist/material-theme-darker-DREhSOvw.mjs +6 -0
- package/dist/material-theme-darker-DREhSOvw.mjs.map +1 -0
- package/dist/material-theme-lighter-egkNOF68.mjs +6 -0
- package/dist/material-theme-lighter-egkNOF68.mjs.map +1 -0
- package/dist/material-theme-ocean-CNqBAXQm.mjs +6 -0
- package/dist/material-theme-ocean-CNqBAXQm.mjs.map +1 -0
- package/dist/material-theme-palenight-DtcONgpr.mjs +6 -0
- package/dist/material-theme-palenight-DtcONgpr.mjs.map +1 -0
- package/dist/matlab-DHZHeFXY.mjs +5 -0
- package/dist/matlab-DHZHeFXY.mjs.map +1 -0
- package/dist/mdc-MKPEEsGA.mjs +15 -0
- package/dist/mdc-MKPEEsGA.mjs.map +1 -0
- package/dist/mdx-ClLOyMcG.mjs +5 -0
- package/dist/mdx-ClLOyMcG.mjs.map +1 -0
- package/dist/mermaid-CfX58h2h.mjs +5 -0
- package/dist/mermaid-CfX58h2h.mjs.map +1 -0
- package/dist/min-dark-CvIB8xOx.mjs +6 -0
- package/dist/min-dark-CvIB8xOx.mjs.map +1 -0
- package/dist/min-light-DnoFQoeu.mjs +6 -0
- package/dist/min-light-DnoFQoeu.mjs.map +1 -0
- package/dist/mipsasm-BPlrYcYb.mjs +5 -0
- package/dist/mipsasm-BPlrYcYb.mjs.map +1 -0
- package/dist/mojo-C5Qzk_lA.mjs +5 -0
- package/dist/mojo-C5Qzk_lA.mjs.map +1 -0
- package/dist/monokai-CmoRmG4x.mjs +6 -0
- package/dist/monokai-CmoRmG4x.mjs.map +1 -0
- package/dist/moonbit-BzaO7bLo.mjs +5 -0
- package/dist/moonbit-BzaO7bLo.mjs.map +1 -0
- package/dist/move-CAZmkwHx.mjs +5 -0
- package/dist/move-CAZmkwHx.mjs.map +1 -0
- package/dist/narrat-DN2gLj7A.mjs +5 -0
- package/dist/narrat-DN2gLj7A.mjs.map +1 -0
- package/dist/nextflow-DhVPPjdW.mjs +8 -0
- package/dist/nextflow-DhVPPjdW.mjs.map +1 -0
- package/dist/nextflow-groovy-DJq82mRo.mjs +5 -0
- package/dist/nextflow-groovy-DJq82mRo.mjs.map +1 -0
- package/dist/nginx-CU-DGOv1.mjs +8 -0
- package/dist/nginx-CU-DGOv1.mjs.map +1 -0
- package/dist/night-owl-Cs13ScSs.mjs +6 -0
- package/dist/night-owl-Cs13ScSs.mjs.map +1 -0
- package/dist/night-owl-light--HbEFF7Y.mjs +6 -0
- package/dist/night-owl-light--HbEFF7Y.mjs.map +1 -0
- package/dist/nim-3UbGj8cc.mjs +23 -0
- package/dist/nim-3UbGj8cc.mjs.map +1 -0
- package/dist/nix-CjXcUl9k.mjs +9 -0
- package/dist/nix-CjXcUl9k.mjs.map +1 -0
- package/dist/nord-C9GqXk2p.mjs +6 -0
- package/dist/nord-C9GqXk2p.mjs.map +1 -0
- package/dist/nushell-C4iFdrTc.mjs +5 -0
- package/dist/nushell-C4iFdrTc.mjs.map +1 -0
- package/dist/objective-c-CXuDGuMm.mjs +5 -0
- package/dist/objective-c-CXuDGuMm.mjs.map +1 -0
- package/dist/objective-cpp-V9yvCIRm.mjs +5 -0
- package/dist/objective-cpp-V9yvCIRm.mjs.map +1 -0
- package/dist/ocaml-D9fCj6sT.mjs +5 -0
- package/dist/ocaml-D9fCj6sT.mjs.map +1 -0
- package/dist/odin-CAKGLqrj.mjs +5 -0
- package/dist/odin-CAKGLqrj.mjs.map +1 -0
- package/dist/one-dark-pro-DW7BmY6Q.mjs +6 -0
- package/dist/one-dark-pro-DW7BmY6Q.mjs.map +1 -0
- package/dist/one-light-DCu0Wv9N.mjs +6 -0
- package/dist/one-light-DCu0Wv9N.mjs.map +1 -0
- package/dist/openscad-BdLZBBab.mjs +5 -0
- package/dist/openscad-BdLZBBab.mjs.map +1 -0
- package/dist/pascal-nsk9MKFb.mjs +5 -0
- package/dist/pascal-nsk9MKFb.mjs.map +1 -0
- package/dist/perl-DI9oLKmv.mjs +19 -0
- package/dist/perl-DI9oLKmv.mjs.map +1 -0
- package/dist/php-DJjzFdsM.mjs +21 -0
- package/dist/php-DJjzFdsM.mjs.map +1 -0
- package/dist/pkl-BVtC2QFe.mjs +5 -0
- package/dist/pkl-BVtC2QFe.mjs.map +1 -0
- package/dist/plastic-qUgYNoeW.mjs +6 -0
- package/dist/plastic-qUgYNoeW.mjs.map +1 -0
- package/dist/plsql-BwM0DOLE.mjs +5 -0
- package/dist/plsql-BwM0DOLE.mjs.map +1 -0
- package/dist/po-D39EqRsl.mjs +5 -0
- package/dist/po-D39EqRsl.mjs.map +1 -0
- package/dist/poimandres-DPRzGPvx.mjs +6 -0
- package/dist/poimandres-DPRzGPvx.mjs.map +1 -0
- package/dist/polar-DCBzWT3J.mjs +5 -0
- package/dist/polar-DCBzWT3J.mjs.map +1 -0
- package/dist/postcss-L6y-bzEw.mjs +5 -0
- package/dist/postcss-L6y-bzEw.mjs.map +1 -0
- package/dist/powerquery-BHkUTyux.mjs +5 -0
- package/dist/powerquery-BHkUTyux.mjs.map +1 -0
- package/dist/powershell-C80dlfD8.mjs +5 -0
- package/dist/powershell-C80dlfD8.mjs.map +1 -0
- package/dist/preset.d.mts +15 -0
- package/dist/preset.d.mts.map +1 -0
- package/dist/preset.mjs +19 -0
- package/dist/preset.mjs.map +1 -0
- package/dist/prisma-D407qtUw.mjs +5 -0
- package/dist/prisma-D407qtUw.mjs.map +1 -0
- package/dist/prolog-CSrn8-6K.mjs +5 -0
- package/dist/prolog-CSrn8-6K.mjs.map +1 -0
- package/dist/proto-ClvDy0H0.mjs +5 -0
- package/dist/proto-ClvDy0H0.mjs.map +1 -0
- package/dist/pug-Cyyu0V2y.mjs +15 -0
- package/dist/pug-Cyyu0V2y.mjs.map +1 -0
- package/dist/puppet-D5ZQtSNi.mjs +5 -0
- package/dist/puppet-D5ZQtSNi.mjs.map +1 -0
- package/dist/purescript-30PxZSjT.mjs +5 -0
- package/dist/purescript-30PxZSjT.mjs.map +1 -0
- package/dist/python-CpiNX4Ip.mjs +5 -0
- package/dist/python-CpiNX4Ip.mjs.map +1 -0
- package/dist/qml-PuKhTmY-.mjs +8 -0
- package/dist/qml-PuKhTmY-.mjs.map +1 -0
- package/dist/qmldir-BTwcIF6g.mjs +5 -0
- package/dist/qmldir-BTwcIF6g.mjs.map +1 -0
- package/dist/qss-DcpQyHuk.mjs +5 -0
- package/dist/qss-DcpQyHuk.mjs.map +1 -0
- package/dist/r-DcW8EcF5.mjs +8 -0
- package/dist/r-DcW8EcF5.mjs.map +1 -0
- package/dist/racket-D-BwrG5z.mjs +5 -0
- package/dist/racket-D-BwrG5z.mjs.map +1 -0
- package/dist/raku-CM1N1WTp.mjs +5 -0
- package/dist/raku-CM1N1WTp.mjs.map +1 -0
- package/dist/razor-C912Hs6M.mjs +13 -0
- package/dist/razor-C912Hs6M.mjs.map +1 -0
- package/dist/red-DhGHw_i_.mjs +6 -0
- package/dist/red-DhGHw_i_.mjs.map +1 -0
- package/dist/reg-MlBfIgTN.mjs +5 -0
- package/dist/reg-MlBfIgTN.mjs.map +1 -0
- package/dist/regexp-CEVpExph.mjs +8 -0
- package/dist/regexp-CEVpExph.mjs.map +1 -0
- package/dist/rel-Dg_W2E_N.mjs +5 -0
- package/dist/rel-Dg_W2E_N.mjs.map +1 -0
- package/dist/riscv-BoH7mqNI.mjs +5 -0
- package/dist/riscv-BoH7mqNI.mjs.map +1 -0
- package/dist/ron-DbOWX1T7.mjs +5 -0
- package/dist/ron-DbOWX1T7.mjs.map +1 -0
- package/dist/rose-pine-78rugKGO.mjs +6 -0
- package/dist/rose-pine-78rugKGO.mjs.map +1 -0
- package/dist/rose-pine-dawn-C_mYSEtu.mjs +6 -0
- package/dist/rose-pine-dawn-C_mYSEtu.mjs.map +1 -0
- package/dist/rose-pine-moon-Cz7-JQvG.mjs +6 -0
- package/dist/rose-pine-moon-Cz7-JQvG.mjs.map +1 -0
- package/dist/rosmsg-Ca1BpyBh.mjs +5 -0
- package/dist/rosmsg-Ca1BpyBh.mjs.map +1 -0
- package/dist/rst-DbIJV67W.mjs +25 -0
- package/dist/rst-DbIJV67W.mjs.map +1 -0
- package/dist/ruby-D-Lps7Dp.mjs +33 -0
- package/dist/ruby-D-Lps7Dp.mjs.map +1 -0
- package/dist/rust-Dk6HN1uF.mjs +5 -0
- package/dist/rust-Dk6HN1uF.mjs.map +1 -0
- package/dist/sas-QckC_qvJ.mjs +8 -0
- package/dist/sas-QckC_qvJ.mjs.map +1 -0
- package/dist/sass-BWOQVuIy.mjs +5 -0
- package/dist/sass-BWOQVuIy.mjs.map +1 -0
- package/dist/scala-BoffQEnY.mjs +5 -0
- package/dist/scala-BoffQEnY.mjs.map +1 -0
- package/dist/schemas/index.d.mts +1615 -0
- package/dist/schemas/index.d.mts.map +1 -0
- package/dist/schemas/index.mjs +263 -0
- package/dist/schemas/index.mjs.map +1 -0
- package/dist/schemas-By1qE0sQ.mjs +3881 -0
- package/dist/schemas-By1qE0sQ.mjs.map +1 -0
- package/dist/scheme-C2D8wvUe.mjs +5 -0
- package/dist/scheme-C2D8wvUe.mjs.map +1 -0
- package/dist/scss-D1vWunvk.mjs +10 -0
- package/dist/scss-D1vWunvk.mjs.map +1 -0
- package/dist/sdbl-DkThjfrg.mjs +5 -0
- package/dist/sdbl-DkThjfrg.mjs.map +1 -0
- package/dist/shaderlab-D0NLokaw.mjs +8 -0
- package/dist/shaderlab-D0NLokaw.mjs.map +1 -0
- package/dist/shellscript-BHpEag8P.mjs +8 -0
- package/dist/shellscript-BHpEag8P.mjs.map +1 -0
- package/dist/shellsession-CSdmCfg4.mjs +8 -0
- package/dist/shellsession-CSdmCfg4.mjs.map +1 -0
- package/dist/site-D8l4ghX0.mjs +71441 -0
- package/dist/site-D8l4ghX0.mjs.map +1 -0
- package/dist/slack-dark-Cj8kL6BM.mjs +6 -0
- package/dist/slack-dark-Cj8kL6BM.mjs.map +1 -0
- package/dist/slack-ochin-B4Rna-gD.mjs +6 -0
- package/dist/slack-ochin-B4Rna-gD.mjs.map +1 -0
- package/dist/smalltalk-ZNQAnLNC.mjs +5 -0
- package/dist/smalltalk-ZNQAnLNC.mjs.map +1 -0
- package/dist/snazzy-light-CF7MTUt6.mjs +6 -0
- package/dist/snazzy-light-CF7MTUt6.mjs.map +1 -0
- package/dist/solarized-dark-DBFHIE1d.mjs +6 -0
- package/dist/solarized-dark-DBFHIE1d.mjs.map +1 -0
- package/dist/solarized-light-Del516-O.mjs +6 -0
- package/dist/solarized-light-Del516-O.mjs.map +1 -0
- package/dist/solidity-Ddf3MOD2.mjs +5 -0
- package/dist/solidity-Ddf3MOD2.mjs.map +1 -0
- package/dist/soy-PW0jpJKW.mjs +8 -0
- package/dist/soy-PW0jpJKW.mjs.map +1 -0
- package/dist/sparql-rX-q1CB9.mjs +8 -0
- package/dist/sparql-rX-q1CB9.mjs.map +1 -0
- package/dist/splunk-DcREbx5k.mjs +5 -0
- package/dist/splunk-DcREbx5k.mjs.map +1 -0
- package/dist/sql-Cq_hpY16.mjs +8 -0
- package/dist/sql-Cq_hpY16.mjs.map +1 -0
- package/dist/ssh-config-DIv0Kb8E.mjs +5 -0
- package/dist/ssh-config-DIv0Kb8E.mjs.map +1 -0
- package/dist/stata-rEmfzZT7.mjs +8 -0
- package/dist/stata-rEmfzZT7.mjs.map +1 -0
- package/dist/stylus-DHanz1Kd.mjs +5 -0
- package/dist/stylus-DHanz1Kd.mjs.map +1 -0
- package/dist/surrealql-BdfgI90j.mjs +8 -0
- package/dist/surrealql-BdfgI90j.mjs.map +1 -0
- package/dist/svelte-DFFWgqCr.mjs +17 -0
- package/dist/svelte-DFFWgqCr.mjs.map +1 -0
- package/dist/swift-Ci7klDIa.mjs +5 -0
- package/dist/swift-Ci7klDIa.mjs.map +1 -0
- package/dist/synthwave-84-T5fF9-Op.mjs +6 -0
- package/dist/synthwave-84-T5fF9-Op.mjs.map +1 -0
- package/dist/system-verilog-tLSd9PYh.mjs +5 -0
- package/dist/system-verilog-tLSd9PYh.mjs.map +1 -0
- package/dist/systemd-C_LIvN4y.mjs +5 -0
- package/dist/systemd-C_LIvN4y.mjs.map +1 -0
- package/dist/talonscript-2cIfb9F4.mjs +5 -0
- package/dist/talonscript-2cIfb9F4.mjs.map +1 -0
- package/dist/tasl-iwLzpKVu.mjs +5 -0
- package/dist/tasl-iwLzpKVu.mjs.map +1 -0
- package/dist/tcl-DR2zhegR.mjs +5 -0
- package/dist/tcl-DR2zhegR.mjs.map +1 -0
- package/dist/templ-BDCp727o.mjs +15 -0
- package/dist/templ-BDCp727o.mjs.map +1 -0
- package/dist/terraform-BH4YC6Zk.mjs +5 -0
- package/dist/terraform-BH4YC6Zk.mjs.map +1 -0
- package/dist/tex-DGRDr7pd.mjs +8 -0
- package/dist/tex-DGRDr7pd.mjs.map +1 -0
- package/dist/tokyo-night-YpyXNs_N.mjs +6 -0
- package/dist/tokyo-night-YpyXNs_N.mjs.map +1 -0
- package/dist/toml-CECsyL8x.mjs +5 -0
- package/dist/toml-CECsyL8x.mjs.map +1 -0
- package/dist/ts-tags-BsG9I5cd.mjs +61 -0
- package/dist/ts-tags-BsG9I5cd.mjs.map +1 -0
- package/dist/tsv-BwwAUdIn.mjs +5 -0
- package/dist/tsv-BwwAUdIn.mjs.map +1 -0
- package/dist/tsx-qx39NaGS.mjs +8 -0
- package/dist/tsx-qx39NaGS.mjs.map +1 -0
- package/dist/turtle-D8n7HFvE.mjs +5 -0
- package/dist/turtle-D8n7HFvE.mjs.map +1 -0
- package/dist/twig-DsMUiWk8.mjs +21 -0
- package/dist/twig-DsMUiWk8.mjs.map +1 -0
- package/dist/typescript-BZXFn-rd.mjs +8 -0
- package/dist/typescript-BZXFn-rd.mjs.map +1 -0
- package/dist/typespec-ClgDzShT.mjs +5 -0
- package/dist/typespec-ClgDzShT.mjs.map +1 -0
- package/dist/typst-CMN2lhh3.mjs +5 -0
- package/dist/typst-CMN2lhh3.mjs.map +1 -0
- package/dist/v-CA1cYsER.mjs +5 -0
- package/dist/v-CA1cYsER.mjs.map +1 -0
- package/dist/vala-DuBY1WKl.mjs +5 -0
- package/dist/vala-DuBY1WKl.mjs.map +1 -0
- package/dist/vb-XQBHWfW8.mjs +5 -0
- package/dist/vb-XQBHWfW8.mjs.map +1 -0
- package/dist/verilog-CWqhvrSz.mjs +5 -0
- package/dist/verilog-CWqhvrSz.mjs.map +1 -0
- package/dist/vesper-CigfTEKg.mjs +6 -0
- package/dist/vesper-CigfTEKg.mjs.map +1 -0
- package/dist/vhdl-C67Bhzjr.mjs +5 -0
- package/dist/vhdl-C67Bhzjr.mjs.map +1 -0
- package/dist/viml-C26cD_wa.mjs +5 -0
- package/dist/viml-C26cD_wa.mjs.map +1 -0
- package/dist/vitesse-black-DYCj3nJd.mjs +6 -0
- package/dist/vitesse-black-DYCj3nJd.mjs.map +1 -0
- package/dist/vitesse-dark-BMGIMsRz.mjs +6 -0
- package/dist/vitesse-dark-BMGIMsRz.mjs.map +1 -0
- package/dist/vitesse-light-SKJOp9ZR.mjs +6 -0
- package/dist/vitesse-light-SKJOp9ZR.mjs.map +1 -0
- package/dist/vue-bb5YUHg6.mjs +33 -0
- package/dist/vue-bb5YUHg6.mjs.map +1 -0
- package/dist/vue-html-ypB-H6rb.mjs +8 -0
- package/dist/vue-html-ypB-H6rb.mjs.map +1 -0
- package/dist/vue-vine-Cl_j-Bb5.mjs +21 -0
- package/dist/vue-vine-Cl_j-Bb5.mjs.map +1 -0
- package/dist/vyper-gBkdcGC5.mjs +5 -0
- package/dist/vyper-gBkdcGC5.mjs.map +1 -0
- package/dist/wasm-B1KmdQo5.mjs +9 -0
- package/dist/wasm-B1KmdQo5.mjs.map +1 -0
- package/dist/wasm-D4mFcPzE.mjs +5 -0
- package/dist/wasm-D4mFcPzE.mjs.map +1 -0
- package/dist/wenyan-D1TI9OZw.mjs +5 -0
- package/dist/wenyan-D1TI9OZw.mjs.map +1 -0
- package/dist/wgsl-DzVADIua.mjs +5 -0
- package/dist/wgsl-DzVADIua.mjs.map +1 -0
- package/dist/wikitext-DPnM1XoL.mjs +5 -0
- package/dist/wikitext-DPnM1XoL.mjs.map +1 -0
- package/dist/wit-Bewokpy8.mjs +5 -0
- package/dist/wit-Bewokpy8.mjs.map +1 -0
- package/dist/wolfram-DVQXO29Z.mjs +5 -0
- package/dist/wolfram-DVQXO29Z.mjs.map +1 -0
- package/dist/xml-TYYGqgP3.mjs +10 -0
- package/dist/xml-TYYGqgP3.mjs.map +1 -0
- package/dist/xsl-BOev1i40.mjs +8 -0
- package/dist/xsl-BOev1i40.mjs.map +1 -0
- package/dist/yaml-Xue9e-YO.mjs +8 -0
- package/dist/yaml-Xue9e-YO.mjs.map +1 -0
- package/dist/zenscript-CwrU69w6.mjs +5 -0
- package/dist/zenscript-CwrU69w6.mjs.map +1 -0
- package/dist/zig-NT9tMYQ2.mjs +5 -0
- package/dist/zig-NT9tMYQ2.mjs.map +1 -0
- package/package.json +78 -0
- package/theme/components/DocFooter.tsx +59 -0
- package/theme/components/DocHeader.tsx +72 -0
- package/theme/components/DocSidebar.tsx +90 -0
- package/theme/components/DocTOC.tsx +25 -0
- package/theme/components/Html.tsx +107 -0
- package/theme/layouts/DocHome.tsx +212 -0
- package/theme/layouts/DocNotFound.tsx +55 -0
- package/theme/layouts/DocPage.tsx +74 -0
- package/theme/runtime/main.ts +16 -0
- package/theme/runtime/search.ts +65 -0
- package/theme/runtime/sidebar.ts +135 -0
- package/theme/runtime/toc-highlight.ts +73 -0
- package/theme/styles/code/inline.css +26 -0
- package/theme/styles/components/not-found.css +85 -0
- package/theme/styles/components/search.css +300 -0
- package/theme/styles/content/alerts.css +87 -0
- package/theme/styles/content/prose.css +225 -0
- package/theme/styles/content/toc.css +90 -0
- package/theme/styles/foundations/fonts.css +37 -0
- package/theme/styles/foundations/reset.css +49 -0
- package/theme/styles/foundations/tokens.css +66 -0
- package/theme/styles/layout/footer.css +119 -0
- package/theme/styles/layout/grid.css +98 -0
- package/theme/styles/layout/header.css +153 -0
- package/theme/styles/layout/home.css +449 -0
- package/theme/styles/layout/sidebar.css +239 -0
- package/theme/styles/main.css +19 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { Fragment, h } from '@pagesmith/core/jsx-runtime'
|
|
2
|
+
|
|
3
|
+
type Props = {
|
|
4
|
+
title: string
|
|
5
|
+
description?: string
|
|
6
|
+
url?: string
|
|
7
|
+
site: {
|
|
8
|
+
origin: string
|
|
9
|
+
basePath?: string
|
|
10
|
+
name: string
|
|
11
|
+
language?: string
|
|
12
|
+
seo?: { locale?: string; twitterHandle?: string; defaultOgType?: string }
|
|
13
|
+
theme?: { lightColor?: string; darkColor?: string }
|
|
14
|
+
analytics?: { googleAnalytics?: string }
|
|
15
|
+
footerLinks?: Array<{ label: string; path: string }>
|
|
16
|
+
search?: { enabled?: boolean; showImages?: boolean; showSubResults?: boolean }
|
|
17
|
+
}
|
|
18
|
+
children?: any
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function Html({ title, description, url, site, children }: Props) {
|
|
22
|
+
const origin = site.origin.replace(/\/$/, '')
|
|
23
|
+
const base = site.basePath || ''
|
|
24
|
+
const canonicalUrl = url ? `${origin}${url}` : undefined
|
|
25
|
+
const locale = site.seo?.locale || 'en_US'
|
|
26
|
+
const lightColor = site.theme?.lightColor || '#f8fafc'
|
|
27
|
+
const darkColor = site.theme?.darkColor || '#020617'
|
|
28
|
+
const gaId = site.analytics?.googleAnalytics
|
|
29
|
+
const searchEnabled = site.search?.enabled !== false
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<html lang={site.language || 'en'} class="no-js">
|
|
33
|
+
<head>
|
|
34
|
+
<meta charset="utf-8" />
|
|
35
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
36
|
+
<meta name="color-scheme" content="light dark" />
|
|
37
|
+
<title>{title}</title>
|
|
38
|
+
{description ? <meta name="description" content={description} /> : null}
|
|
39
|
+
|
|
40
|
+
{/* Canonical URL */}
|
|
41
|
+
{canonicalUrl ? <link rel="canonical" href={canonicalUrl} /> : null}
|
|
42
|
+
|
|
43
|
+
{/* OpenGraph */}
|
|
44
|
+
<meta property="og:type" content="website" />
|
|
45
|
+
{canonicalUrl ? <meta property="og:url" content={canonicalUrl} /> : null}
|
|
46
|
+
<meta property="og:title" content={title} />
|
|
47
|
+
{description ? <meta property="og:description" content={description} /> : null}
|
|
48
|
+
<meta property="og:locale" content={locale} />
|
|
49
|
+
<meta property="og:site_name" content={site.name} />
|
|
50
|
+
|
|
51
|
+
{/* Theme color */}
|
|
52
|
+
<meta name="theme-color" content={lightColor} media="(prefers-color-scheme: light)" />
|
|
53
|
+
<meta name="theme-color" content={darkColor} media="(prefers-color-scheme: dark)" />
|
|
54
|
+
|
|
55
|
+
{/* CSS */}
|
|
56
|
+
<link rel="stylesheet" href={`${base}/assets/style.css`} />
|
|
57
|
+
{searchEnabled ? <link rel="stylesheet" href={`${base}/pagefind/pagefind-ui.css`} /> : null}
|
|
58
|
+
|
|
59
|
+
{/* Remove no-js class */}
|
|
60
|
+
<script innerHTML="document.documentElement.classList.remove('no-js')" />
|
|
61
|
+
{searchEnabled ? <script src={`${base}/pagefind/pagefind-ui.js`} defer /> : null}
|
|
62
|
+
{searchEnabled ? (
|
|
63
|
+
<noscript>
|
|
64
|
+
<style innerHTML=".doc-search-trigger{display:none!important}" />
|
|
65
|
+
</noscript>
|
|
66
|
+
) : null}
|
|
67
|
+
|
|
68
|
+
{/* Google Analytics */}
|
|
69
|
+
{gaId ? (
|
|
70
|
+
<Fragment>
|
|
71
|
+
<script async src={`https://www.googletagmanager.com/gtag/js?id=${gaId}`} />
|
|
72
|
+
<script
|
|
73
|
+
innerHTML={`window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','${gaId}');`}
|
|
74
|
+
/>
|
|
75
|
+
</Fragment>
|
|
76
|
+
) : null}
|
|
77
|
+
</head>
|
|
78
|
+
<body>
|
|
79
|
+
{children}
|
|
80
|
+
{searchEnabled ? (
|
|
81
|
+
<dialog
|
|
82
|
+
class="doc-search-modal"
|
|
83
|
+
id="search-modal"
|
|
84
|
+
aria-label="Search documentation"
|
|
85
|
+
data-search-show-images={site.search?.showImages ? 'true' : 'false'}
|
|
86
|
+
data-search-show-sub-results={site.search?.showSubResults !== false ? 'true' : 'false'}
|
|
87
|
+
>
|
|
88
|
+
<div class="doc-search-modal-inner">
|
|
89
|
+
<div class="doc-search-modal-header">
|
|
90
|
+
<span class="doc-search-modal-title">Search</span>
|
|
91
|
+
<button
|
|
92
|
+
type="button"
|
|
93
|
+
class="doc-search-modal-close"
|
|
94
|
+
aria-label="Close search"
|
|
95
|
+
data-search-close=""
|
|
96
|
+
innerHTML='<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><path d="m5 5 10 10M15 5 5 15"/></svg>'
|
|
97
|
+
/>
|
|
98
|
+
</div>
|
|
99
|
+
<div class="doc-search-modal-body" data-pagefind-search="" />
|
|
100
|
+
</div>
|
|
101
|
+
</dialog>
|
|
102
|
+
) : null}
|
|
103
|
+
<script src={`${base}/assets/main.js`} defer />
|
|
104
|
+
</body>
|
|
105
|
+
</html>
|
|
106
|
+
)
|
|
107
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DocHome layout.
|
|
3
|
+
*
|
|
4
|
+
* Documentation landing page with hero, install snippet, features grid,
|
|
5
|
+
* packages grid, code example, and optional markdown content.
|
|
6
|
+
*
|
|
7
|
+
* All sections are optional — omit the frontmatter key and the section
|
|
8
|
+
* is not rendered. Supports both single-package and monorepo projects.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { h } from '@pagesmith/core/jsx-runtime'
|
|
12
|
+
import { DocFooter } from '../components/DocFooter'
|
|
13
|
+
import { DocHeader } from '../components/DocHeader'
|
|
14
|
+
import { DocSidebar } from '../components/DocSidebar'
|
|
15
|
+
import { Html } from '../components/Html'
|
|
16
|
+
|
|
17
|
+
type Props = {
|
|
18
|
+
content: string
|
|
19
|
+
frontmatter: Record<string, any>
|
|
20
|
+
headings: Array<{ depth: number; text: string; slug: string }>
|
|
21
|
+
slug: string
|
|
22
|
+
site: any
|
|
23
|
+
[key: string]: any
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default function DocHome(props: Props) {
|
|
27
|
+
const { content, frontmatter, slug, site } = props
|
|
28
|
+
|
|
29
|
+
const hero =
|
|
30
|
+
frontmatter.hero ??
|
|
31
|
+
(frontmatter.title || frontmatter.tagline || frontmatter.actions
|
|
32
|
+
? {
|
|
33
|
+
name: frontmatter.title || site.name,
|
|
34
|
+
text: frontmatter.tagline || frontmatter.title,
|
|
35
|
+
tagline: frontmatter.description,
|
|
36
|
+
badge: frontmatter.badge,
|
|
37
|
+
actions: frontmatter.actions,
|
|
38
|
+
}
|
|
39
|
+
: undefined)
|
|
40
|
+
const features = frontmatter.features
|
|
41
|
+
const install = frontmatter.install
|
|
42
|
+
const packages = frontmatter.packages
|
|
43
|
+
const codeExample = frontmatter.codeExample
|
|
44
|
+
|
|
45
|
+
// Build sidebar sections from navItems for mobile hamburger menu
|
|
46
|
+
const navItems = site.navItems as Array<{ path: string; label: string }> | undefined
|
|
47
|
+
const sidebarSections =
|
|
48
|
+
navItems && navItems.length > 0
|
|
49
|
+
? [
|
|
50
|
+
{
|
|
51
|
+
title: 'Navigation',
|
|
52
|
+
items: navItems.map((item: { path: string; label: string }) => ({
|
|
53
|
+
title: item.label,
|
|
54
|
+
slug: item.path,
|
|
55
|
+
path: item.path,
|
|
56
|
+
})),
|
|
57
|
+
},
|
|
58
|
+
]
|
|
59
|
+
: undefined
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<Html
|
|
63
|
+
title={hero?.name || frontmatter.title || site.title}
|
|
64
|
+
description={hero?.tagline || frontmatter.description || site.description}
|
|
65
|
+
url="/"
|
|
66
|
+
site={site}
|
|
67
|
+
>
|
|
68
|
+
<DocHeader
|
|
69
|
+
siteName={site.name}
|
|
70
|
+
basePath={site.basePath}
|
|
71
|
+
homeLink={site.homeLink}
|
|
72
|
+
navItems={site.navItems}
|
|
73
|
+
slug={slug}
|
|
74
|
+
searchEnabled={site.search?.enabled}
|
|
75
|
+
/>
|
|
76
|
+
<main class="doc-home" data-pagefind-body="">
|
|
77
|
+
{/* Mobile sidebar (visible on small screens via hamburger toggle) */}
|
|
78
|
+
<DocSidebar sections={sidebarSections} currentSlug={slug} />
|
|
79
|
+
|
|
80
|
+
{/* Hero section */}
|
|
81
|
+
{hero ? (
|
|
82
|
+
<section class="doc-home-section doc-hero">
|
|
83
|
+
{hero.badge ? (
|
|
84
|
+
<div class="doc-hero-badge">
|
|
85
|
+
<span class="doc-hero-badge-dot" />
|
|
86
|
+
{hero.badge}
|
|
87
|
+
</div>
|
|
88
|
+
) : null}
|
|
89
|
+
{hero.name ? <p class="doc-hero-name">{hero.name}</p> : null}
|
|
90
|
+
{hero.text ? <h1 class="doc-hero-text">{hero.text}</h1> : null}
|
|
91
|
+
{hero.tagline ? <p class="doc-hero-tagline">{hero.tagline}</p> : null}
|
|
92
|
+
{hero.actions && hero.actions.length > 0 ? (
|
|
93
|
+
<div class="doc-hero-actions">
|
|
94
|
+
{hero.actions.map((action: any) => (
|
|
95
|
+
<a
|
|
96
|
+
href={action.link}
|
|
97
|
+
class={`doc-hero-action doc-hero-action-${action.theme || 'brand'}`}
|
|
98
|
+
>
|
|
99
|
+
{action.icon ? (
|
|
100
|
+
<span class="doc-hero-action-icon" innerHTML={action.icon} />
|
|
101
|
+
) : null}
|
|
102
|
+
{action.text}
|
|
103
|
+
</a>
|
|
104
|
+
))}
|
|
105
|
+
</div>
|
|
106
|
+
) : null}
|
|
107
|
+
</section>
|
|
108
|
+
) : null}
|
|
109
|
+
|
|
110
|
+
{/* Install snippet */}
|
|
111
|
+
{install ? (
|
|
112
|
+
<div class="doc-home-section doc-home-install">
|
|
113
|
+
<div class="doc-install-bar">
|
|
114
|
+
<div class="doc-install-header">
|
|
115
|
+
<span class="doc-install-dot doc-install-dot-r" />
|
|
116
|
+
<span class="doc-install-dot doc-install-dot-y" />
|
|
117
|
+
<span class="doc-install-dot doc-install-dot-g" />
|
|
118
|
+
<span class="doc-install-title">Terminal</span>
|
|
119
|
+
<span style="width:36px" />
|
|
120
|
+
</div>
|
|
121
|
+
<div class="doc-install-body">
|
|
122
|
+
<code>
|
|
123
|
+
<span class="doc-install-prompt">$ </span>
|
|
124
|
+
{install}
|
|
125
|
+
</code>
|
|
126
|
+
<button
|
|
127
|
+
type="button"
|
|
128
|
+
class="doc-install-copy"
|
|
129
|
+
data-copy-text={install}
|
|
130
|
+
onclick={`navigator.clipboard.writeText(this.dataset.copyText);this.textContent='Copied!';setTimeout(()=>this.textContent='Copy',1500)`}
|
|
131
|
+
>
|
|
132
|
+
Copy
|
|
133
|
+
</button>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
) : null}
|
|
138
|
+
|
|
139
|
+
{/* Features grid */}
|
|
140
|
+
{features && features.length > 0 ? (
|
|
141
|
+
<section class="doc-home-section">
|
|
142
|
+
<p class="doc-home-section-label">Features</p>
|
|
143
|
+
<div class="doc-features">
|
|
144
|
+
{features.map((feature: any) => (
|
|
145
|
+
<div class="doc-feature-card">
|
|
146
|
+
{feature.icon ? <span class="doc-feature-icon" innerHTML={feature.icon} /> : null}
|
|
147
|
+
<h3 class="doc-feature-title">{feature.title}</h3>
|
|
148
|
+
<p class="doc-feature-details">{feature.details}</p>
|
|
149
|
+
</div>
|
|
150
|
+
))}
|
|
151
|
+
</div>
|
|
152
|
+
</section>
|
|
153
|
+
) : null}
|
|
154
|
+
|
|
155
|
+
{/* Packages grid (monorepo) */}
|
|
156
|
+
{packages && packages.length > 0 ? (
|
|
157
|
+
<section class="doc-home-section">
|
|
158
|
+
<p class="doc-home-section-label">Packages</p>
|
|
159
|
+
<div class="doc-packages">
|
|
160
|
+
{packages.map((pkg: any) => {
|
|
161
|
+
const Tag = pkg.href ? 'a' : 'div'
|
|
162
|
+
return (
|
|
163
|
+
<Tag class="doc-package-card" href={pkg.href || undefined}>
|
|
164
|
+
<div class="doc-package-name">{pkg.name}</div>
|
|
165
|
+
<p class="doc-package-desc">{pkg.description}</p>
|
|
166
|
+
{pkg.version || pkg.tag ? (
|
|
167
|
+
<div class="doc-package-meta">
|
|
168
|
+
{pkg.version ? (
|
|
169
|
+
<span class="doc-package-version">{pkg.version}</span>
|
|
170
|
+
) : null}
|
|
171
|
+
{pkg.tag ? <span class="doc-package-tag">{pkg.tag}</span> : null}
|
|
172
|
+
</div>
|
|
173
|
+
) : null}
|
|
174
|
+
</Tag>
|
|
175
|
+
)
|
|
176
|
+
})}
|
|
177
|
+
</div>
|
|
178
|
+
</section>
|
|
179
|
+
) : null}
|
|
180
|
+
|
|
181
|
+
{/* Code example */}
|
|
182
|
+
{codeExample ? (
|
|
183
|
+
<section class="doc-home-section">
|
|
184
|
+
<p class="doc-home-section-label">{codeExample.label || 'Quick Start'}</p>
|
|
185
|
+
<div class="doc-home-code">
|
|
186
|
+
<div class="doc-home-code-header">
|
|
187
|
+
<span class="doc-install-dot doc-install-dot-r" />
|
|
188
|
+
<span class="doc-install-dot doc-install-dot-y" />
|
|
189
|
+
<span class="doc-install-dot doc-install-dot-g" />
|
|
190
|
+
<span class="doc-home-code-title">{codeExample.title || ''}</span>
|
|
191
|
+
<span style="width:36px" />
|
|
192
|
+
</div>
|
|
193
|
+
<pre innerHTML={codeExample.code} />
|
|
194
|
+
</div>
|
|
195
|
+
</section>
|
|
196
|
+
) : null}
|
|
197
|
+
|
|
198
|
+
{/* Content (if any markdown content is provided) */}
|
|
199
|
+
{content ? (
|
|
200
|
+
<section class="doc-home-content">
|
|
201
|
+
<div class="prose" innerHTML={content} />
|
|
202
|
+
</section>
|
|
203
|
+
) : null}
|
|
204
|
+
|
|
205
|
+
{/* Footer */}
|
|
206
|
+
<div class="doc-home-footer">
|
|
207
|
+
<DocFooter links={site.footerLinks} copyright={site.copyright} />
|
|
208
|
+
</div>
|
|
209
|
+
</main>
|
|
210
|
+
</Html>
|
|
211
|
+
)
|
|
212
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DocNotFound layout.
|
|
3
|
+
*
|
|
4
|
+
* 404 page for documentation sites.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { h } from '@pagesmith/core/jsx-runtime'
|
|
8
|
+
import { DocHeader } from '../components/DocHeader'
|
|
9
|
+
import { Html } from '../components/Html'
|
|
10
|
+
|
|
11
|
+
type Props = {
|
|
12
|
+
content: string
|
|
13
|
+
frontmatter: Record<string, any>
|
|
14
|
+
headings: Array<{ depth: number; text: string; slug: string }>
|
|
15
|
+
slug: string
|
|
16
|
+
site: any
|
|
17
|
+
[key: string]: any
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default function DocNotFound(props: Props) {
|
|
21
|
+
const { site, slug } = props
|
|
22
|
+
const homePath = site.homeLink || (site.basePath ? `${site.basePath}/` : '/')
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<Html
|
|
26
|
+
title={`Page Not Found — ${site.title}`}
|
|
27
|
+
description="The requested page could not be found."
|
|
28
|
+
url={`${slug}/`}
|
|
29
|
+
site={site}
|
|
30
|
+
>
|
|
31
|
+
<DocHeader
|
|
32
|
+
siteName={site.name}
|
|
33
|
+
basePath={site.basePath}
|
|
34
|
+
homeLink={site.homeLink}
|
|
35
|
+
navItems={site.navItems}
|
|
36
|
+
slug={slug}
|
|
37
|
+
searchEnabled={site.search?.enabled}
|
|
38
|
+
/>
|
|
39
|
+
<main class="doc-not-found">
|
|
40
|
+
<div class="doc-not-found-container">
|
|
41
|
+
<p class="doc-not-found-code">404</p>
|
|
42
|
+
<h1 class="doc-not-found-title">Page Not Found</h1>
|
|
43
|
+
<p class="doc-not-found-text">
|
|
44
|
+
The page you are looking for might have been moved or no longer exists.
|
|
45
|
+
</p>
|
|
46
|
+
<div class="doc-not-found-actions">
|
|
47
|
+
<a href={homePath} class="doc-not-found-btn doc-not-found-btn-primary">
|
|
48
|
+
Go Home
|
|
49
|
+
</a>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
</main>
|
|
53
|
+
</Html>
|
|
54
|
+
)
|
|
55
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DocPage layout.
|
|
3
|
+
*
|
|
4
|
+
* Standard documentation page with 3-column grid:
|
|
5
|
+
* left sidebar (navigation) | content | right TOC
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { h } from '@pagesmith/core/jsx-runtime'
|
|
9
|
+
import { DocFooter } from '../components/DocFooter'
|
|
10
|
+
import { DocHeader } from '../components/DocHeader'
|
|
11
|
+
import { DocSidebar } from '../components/DocSidebar'
|
|
12
|
+
import { DocTOC } from '../components/DocTOC'
|
|
13
|
+
import { Html } from '../components/Html'
|
|
14
|
+
|
|
15
|
+
type Props = {
|
|
16
|
+
content: string
|
|
17
|
+
frontmatter: Record<string, any>
|
|
18
|
+
headings: Array<{ depth: number; text: string; slug: string }>
|
|
19
|
+
slug: string
|
|
20
|
+
site: any
|
|
21
|
+
pages?: any[]
|
|
22
|
+
sidebarSections?: any[]
|
|
23
|
+
prev?: { title: string; path: string }
|
|
24
|
+
next?: { title: string; path: string }
|
|
25
|
+
[key: string]: any
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default function DocPage(props: Props) {
|
|
29
|
+
const { content, frontmatter, headings, slug, site, next, prev, sidebarSections } = props
|
|
30
|
+
|
|
31
|
+
const pageTitle = frontmatter.title ? `${frontmatter.title} — ${site.title}` : site.title
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<Html
|
|
35
|
+
title={pageTitle}
|
|
36
|
+
description={frontmatter.description || site.description}
|
|
37
|
+
url={`${slug}/`}
|
|
38
|
+
site={site}
|
|
39
|
+
>
|
|
40
|
+
<DocHeader
|
|
41
|
+
siteName={site.name}
|
|
42
|
+
basePath={site.basePath}
|
|
43
|
+
homeLink={site.homeLink}
|
|
44
|
+
navItems={site.navItems}
|
|
45
|
+
slug={slug}
|
|
46
|
+
searchEnabled={site.search?.enabled}
|
|
47
|
+
/>
|
|
48
|
+
<div class="doc-layout">
|
|
49
|
+
<DocSidebar
|
|
50
|
+
sections={sidebarSections}
|
|
51
|
+
currentSlug={slug}
|
|
52
|
+
collapsible={site.sidebar?.collapsible}
|
|
53
|
+
/>
|
|
54
|
+
<main class="doc-main" data-pagefind-body="">
|
|
55
|
+
{/* Mobile TOC — always at top of content area */}
|
|
56
|
+
{headings.length > 0 ? (
|
|
57
|
+
<details class="doc-toc-mobile">
|
|
58
|
+
<summary>On this page</summary>
|
|
59
|
+
<DocTOC headings={headings} />
|
|
60
|
+
</details>
|
|
61
|
+
) : null}
|
|
62
|
+
|
|
63
|
+
<article>
|
|
64
|
+
<div class="prose" innerHTML={content} />
|
|
65
|
+
</article>
|
|
66
|
+
<DocFooter prev={prev} next={next} links={site.footerLinks} copyright={site.copyright} />
|
|
67
|
+
</main>
|
|
68
|
+
<aside class="doc-aside">
|
|
69
|
+
<DocTOC headings={headings} />
|
|
70
|
+
</aside>
|
|
71
|
+
</div>
|
|
72
|
+
</Html>
|
|
73
|
+
)
|
|
74
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime entry point — browser only.
|
|
3
|
+
*
|
|
4
|
+
* All features are progressive enhancements on top of CSS-only behavior.
|
|
5
|
+
* The site works without JS — this adds TOC highlighting,
|
|
6
|
+
* sidebar toggle behavior, and search. Code block interactivity
|
|
7
|
+
* (copy button, etc.) is handled by Expressive Code inline scripts.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { initSearch } from './search'
|
|
11
|
+
import { initSidebar } from './sidebar'
|
|
12
|
+
import { initTocHighlight } from './toc-highlight'
|
|
13
|
+
|
|
14
|
+
initSidebar()
|
|
15
|
+
initTocHighlight()
|
|
16
|
+
initSearch()
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search modal toggle and keyboard shortcut.
|
|
3
|
+
*
|
|
4
|
+
* Opens a <dialog> containing Pagefind UI. PagefindUI is lazily
|
|
5
|
+
* initialized on first open so the main bundle stays small.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
declare const PagefindUI: any
|
|
9
|
+
|
|
10
|
+
export function initSearch(): void {
|
|
11
|
+
const trigger = document.querySelector('[data-search-trigger]') as HTMLElement | null
|
|
12
|
+
const modal = document.getElementById('search-modal') as HTMLDialogElement | null
|
|
13
|
+
const closeBtn = document.querySelector('[data-search-close]') as HTMLElement | null
|
|
14
|
+
if (!trigger || !modal) return
|
|
15
|
+
|
|
16
|
+
let initialized = false
|
|
17
|
+
|
|
18
|
+
const showImages = modal.dataset.searchShowImages === 'true'
|
|
19
|
+
const showSubResults = modal.dataset.searchShowSubResults !== 'false'
|
|
20
|
+
|
|
21
|
+
function openSearch() {
|
|
22
|
+
modal!.showModal()
|
|
23
|
+
|
|
24
|
+
if (!initialized && typeof PagefindUI !== 'undefined') {
|
|
25
|
+
const container = modal!.querySelector('[data-pagefind-search]')
|
|
26
|
+
if (container) {
|
|
27
|
+
new PagefindUI({
|
|
28
|
+
element: container,
|
|
29
|
+
showSubResults,
|
|
30
|
+
showImages,
|
|
31
|
+
resetStyles: false,
|
|
32
|
+
})
|
|
33
|
+
initialized = true
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Focus the search input after Pagefind renders
|
|
38
|
+
requestAnimationFrame(() => {
|
|
39
|
+
const input = modal!.querySelector<HTMLInputElement>('.pagefind-ui__search-input')
|
|
40
|
+
input?.focus()
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
trigger.addEventListener('click', openSearch)
|
|
45
|
+
closeBtn?.addEventListener('click', () => modal.close())
|
|
46
|
+
|
|
47
|
+
// Ctrl+K / Cmd+K shortcut
|
|
48
|
+
document.addEventListener('keydown', (e) => {
|
|
49
|
+
if ((e.metaKey || e.ctrlKey) && e.key === 'k') {
|
|
50
|
+
e.preventDefault()
|
|
51
|
+
if (modal.open) {
|
|
52
|
+
modal.close()
|
|
53
|
+
} else {
|
|
54
|
+
openSearch()
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
// Close on backdrop click (clicking outside the dialog content)
|
|
60
|
+
modal.addEventListener('click', (e) => {
|
|
61
|
+
if (e.target === modal) {
|
|
62
|
+
modal.close()
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sidebar modal — JS-powered overlay for mobile/tablet.
|
|
3
|
+
*
|
|
4
|
+
* Clones the .doc-sidebar nav content into a slide-in modal panel,
|
|
5
|
+
* and prepends top-level nav links (Guide, Reference, etc.) as a
|
|
6
|
+
* "Navigation" section so mobile users can reach all sections.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const closeIcon =
|
|
10
|
+
'<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><path d="m5 5 10 10M15 5 5 15"/></svg>'
|
|
11
|
+
|
|
12
|
+
function buildNavSection(): HTMLElement | null {
|
|
13
|
+
const docNav = document.querySelector('.doc-nav')
|
|
14
|
+
if (!docNav) return null
|
|
15
|
+
|
|
16
|
+
const links = docNav.querySelectorAll('a')
|
|
17
|
+
if (links.length === 0) return null
|
|
18
|
+
|
|
19
|
+
const section = document.createElement('div')
|
|
20
|
+
section.className = 'doc-sidebar-section'
|
|
21
|
+
|
|
22
|
+
const heading = document.createElement('p')
|
|
23
|
+
heading.className = 'doc-sidebar-heading'
|
|
24
|
+
heading.textContent = 'Navigation'
|
|
25
|
+
section.appendChild(heading)
|
|
26
|
+
|
|
27
|
+
const list = document.createElement('ul')
|
|
28
|
+
list.className = 'doc-sidebar-list'
|
|
29
|
+
|
|
30
|
+
links.forEach((link) => {
|
|
31
|
+
const li = document.createElement('li')
|
|
32
|
+
li.className = 'doc-sidebar-item'
|
|
33
|
+
if (link.classList.contains('active')) li.classList.add('active')
|
|
34
|
+
|
|
35
|
+
const a = document.createElement('a')
|
|
36
|
+
a.href = link.href
|
|
37
|
+
a.className = 'doc-sidebar-link'
|
|
38
|
+
a.textContent = link.textContent
|
|
39
|
+
li.appendChild(a)
|
|
40
|
+
list.appendChild(li)
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
section.appendChild(list)
|
|
44
|
+
return section
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function createModal(sidebarNav: Element | null): HTMLElement {
|
|
48
|
+
const modal = document.createElement('div')
|
|
49
|
+
modal.className = 'doc-sidebar-modal'
|
|
50
|
+
modal.setAttribute('role', 'dialog')
|
|
51
|
+
modal.setAttribute('aria-label', 'Navigation')
|
|
52
|
+
|
|
53
|
+
const backdrop = document.createElement('div')
|
|
54
|
+
backdrop.className = 'doc-sidebar-modal-backdrop'
|
|
55
|
+
|
|
56
|
+
const panel = document.createElement('div')
|
|
57
|
+
panel.className = 'doc-sidebar-modal-panel'
|
|
58
|
+
|
|
59
|
+
const closeBtn = document.createElement('button')
|
|
60
|
+
closeBtn.type = 'button'
|
|
61
|
+
closeBtn.className = 'doc-sidebar-modal-close'
|
|
62
|
+
closeBtn.setAttribute('aria-label', 'Close navigation')
|
|
63
|
+
closeBtn.innerHTML = closeIcon
|
|
64
|
+
|
|
65
|
+
panel.appendChild(closeBtn)
|
|
66
|
+
|
|
67
|
+
// Build the modal nav container
|
|
68
|
+
const nav = document.createElement('nav')
|
|
69
|
+
nav.className = 'doc-sidebar-nav'
|
|
70
|
+
nav.setAttribute('aria-label', 'Navigation')
|
|
71
|
+
|
|
72
|
+
// Clone the sidebar nav sections (skip the outer <nav>, just grab sections)
|
|
73
|
+
const hasExistingNav =
|
|
74
|
+
sidebarNav?.querySelector('.doc-sidebar-heading')?.textContent === 'Navigation'
|
|
75
|
+
if (sidebarNav) {
|
|
76
|
+
for (const child of Array.from(sidebarNav.children)) {
|
|
77
|
+
nav.appendChild(child.cloneNode(true))
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Add top-level nav links as "Navigation" section (skip if sidebar already has one)
|
|
82
|
+
if (!hasExistingNav) {
|
|
83
|
+
const navSection = buildNavSection()
|
|
84
|
+
if (navSection) nav.prepend(navSection)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
panel.appendChild(nav)
|
|
88
|
+
modal.appendChild(backdrop)
|
|
89
|
+
modal.appendChild(panel)
|
|
90
|
+
document.body.appendChild(modal)
|
|
91
|
+
|
|
92
|
+
return modal
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function initSidebar(): void {
|
|
96
|
+
const toggle = document.querySelector('[data-sidebar-toggle]') as HTMLElement | null
|
|
97
|
+
if (!toggle) return
|
|
98
|
+
|
|
99
|
+
const sidebarNav = document.querySelector('.doc-sidebar-nav')
|
|
100
|
+
|
|
101
|
+
const modal = createModal(sidebarNav)
|
|
102
|
+
const closeBtn = modal.querySelector<HTMLButtonElement>('.doc-sidebar-modal-close')
|
|
103
|
+
const backdrop = modal.querySelector<HTMLElement>('.doc-sidebar-modal-backdrop')
|
|
104
|
+
if (!closeBtn || !backdrop) return
|
|
105
|
+
|
|
106
|
+
function open() {
|
|
107
|
+
modal.setAttribute('open', '')
|
|
108
|
+
document.body.style.overflow = 'hidden'
|
|
109
|
+
closeBtn?.focus()
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function close() {
|
|
113
|
+
modal.removeAttribute('open')
|
|
114
|
+
document.body.style.overflow = ''
|
|
115
|
+
toggle?.focus()
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
toggle.addEventListener('click', open)
|
|
119
|
+
closeBtn.addEventListener('click', close)
|
|
120
|
+
backdrop.addEventListener('click', close)
|
|
121
|
+
|
|
122
|
+
// Close on link click
|
|
123
|
+
modal.addEventListener('click', (e) => {
|
|
124
|
+
if ((e.target as HTMLElement).closest('a')) {
|
|
125
|
+
close()
|
|
126
|
+
}
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
// Close on Escape
|
|
130
|
+
document.addEventListener('keydown', (e) => {
|
|
131
|
+
if (e.key === 'Escape' && modal.hasAttribute('open')) {
|
|
132
|
+
close()
|
|
133
|
+
}
|
|
134
|
+
})
|
|
135
|
+
}
|