[{"data":1,"prerenderedAt":1136},["ShallowReactive",2],{"footer-links":3,"content-\u002Fdevelop\u002Fnuxt":12},[4,9],{"path":5,"title":6,"type":7,"isExternal":8},"https:\u002F\u002Fgithub.com\u002Flife-and-dev\u002Fmdsite","GitHub Repo","link",true,{"path":10,"title":11,"type":7,"isExternal":8},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@life-and-dev\u002Fmdsite","NPM Registry",{"id":13,"title":14,"body":15,"description":1129,"extension":1130,"meta":1131,"navigation":8,"path":1132,"seo":1133,"stem":1134,"__hash__":1135},"content\u002Fdevelop\u002Fnuxt.md","Renderer: mdsite-nuxt Submodule",{"type":16,"value":17,"toc":1105},"minimark",[18,22,37,42,64,67,133,143,147,150,171,175,180,209,216,237,241,312,315,319,330,352,355,359,372,385,391,460,464,470,474,500,504,661,665,671,683,687,706,762,768,772,797,801,811,815,820,908,918,922,937,1048,1054,1058,1083,1086,1101],[19,20,14],"h1",{"id":21},"renderer-mdsite-nuxt-submodule",[23,24,25,26,30,31,36],"p",{},"This page covers the renderer half of MDsite: what ",[27,28,29],"code",{},"mdsite-nuxt\u002F"," is, how to customize it, and how to extend Nuxt with your own components. For the high-level CLI\u002Fsubmodule integration, start at ",[32,33,35],"a",{"href":34},"..\u002Fdevelop","Developing mdsite"," instead.",[38,39,41],"h2",{"id":40},"_1-what-the-submodule-is","1. What the submodule is",[23,43,44,46,47,53,54,59,60,63],{},[27,45,29],{}," is a ",[32,48,52],{"href":49,"rel":50},"https:\u002F\u002Fgit-scm.com\u002Fbook\u002Fen\u002Fv2\u002FGit-Tools-Submodules",[51],"nofollow","git submodule"," — a separate repository pinned inside this one. Its source of truth is ",[32,55,58],{"href":56,"rel":57},"https:\u002F\u002Fgithub.com\u002Flife-and-dev\u002Fmdsite-nuxt",[51],"life-and-dev\u002Fmdsite-nuxt",", and the parent repo records the exact commit it should check out via ",[27,61,62],{},".gitmodules"," plus a gitlink entry.",[23,65,66],{},"The submodule is a self-contained Nuxt 4 application. It owns:",[68,69,70,77,83,93,116],"ul",{},[71,72,73,76],"li",{},[27,74,75],{},"nuxt.config.ts"," — Nuxt configuration, Vuetify theme, and the content hooks that transform Markdown before parsing.",[71,78,79,82],{},[27,80,81],{},"app\u002F"," — Vue components, pages, layouts, composables, plugins, and assets.",[71,84,85,88,89,92],{},[27,86,87],{},"content.config.ts"," — declares the ",[27,90,91],{},"content"," collection that reads Markdown from the active content directory.",[71,94,95,98,99,102,103,102,106,102,109,102,112,115],{},[27,96,97],{},"scripts\u002F"," — renderer-side scripts invoked as npm scripts: ",[27,100,101],{},"start.ts",", ",[27,104,105],{},"generate-indices.ts",[27,107,108],{},"sync-content.ts",[27,110,111],{},"generate-favicons.ts",[27,113,114],{},"renderer-hooks.ts",".",[71,117,118,121,122,125,126,129,130,115],{},[27,119,120],{},"utils\u002F"," — ",[27,123,124],{},"mdsite-config.ts"," (loads ",[27,127,128],{},"mdsite.yml",") and ",[27,131,132],{},"base-url.ts",[23,134,135,136,102,139,142],{},"The CLI never edits source files inside the submodule. It only writes compatibility artifacts at known paths (",[27,137,138],{},".env",[27,140,141],{},"content.config.yml",") so the renderer can find the user's content. This keeps the submodule clean and reusable across content projects.",[38,144,146],{"id":145},"_2-why-a-submodule","2. Why a submodule?",[23,148,149],{},"Keeping the renderer in its own repository gives us:",[68,151,152,159,165],{},[71,153,154,158],{},[155,156,157],"strong",{},"Independent versioning"," — bump the submodule in the parent repo to ship a new renderer version, without touching CLI code.",[71,160,161,164],{},[155,162,163],{},"Reusable across content projects"," — any content directory can pin the same renderer version.",[71,166,167,170],{},[155,168,169],{},"Clean separation of concerns"," — the CLI stays a thin orchestrator; rendering logic lives entirely in the submodule.",[38,172,174],{"id":173},"_3-working-with-the-submodule","3. Working with the submodule",[176,177,179],"h3",{"id":178},"initial-checkout","Initial checkout",[181,182,187],"pre",{"className":183,"code":184,"language":185,"meta":186,"style":186},"language-bash shiki shiki-themes github-light github-dark","git clone --recurse-submodules https:\u002F\u002Fgithub.com\u002Flife-and-dev\u002Fmdsite.git\n","bash","",[27,188,189],{"__ignoreMap":186},[190,191,194,198,202,206],"span",{"class":192,"line":193},"line",1,[190,195,197],{"class":196},"sScJk","git",[190,199,201],{"class":200},"sZZnC"," clone",[190,203,205],{"class":204},"sj4cs"," --recurse-submodules",[190,207,208],{"class":200}," https:\u002F\u002Fgithub.com\u002Flife-and-dev\u002Fmdsite.git\n",[23,210,211,212,215],{},"If you already cloned without ",[27,213,214],{},"--recurse-submodules",":",[181,217,219],{"className":183,"code":218,"language":185,"meta":186,"style":186},"git submodule update --init --recursive\n",[27,220,221],{"__ignoreMap":186},[190,222,223,225,228,231,234],{"class":192,"line":193},[190,224,197],{"class":196},[190,226,227],{"class":200}," submodule",[190,229,230],{"class":200}," update",[190,232,233],{"class":204}," --init",[190,235,236],{"class":204}," --recursive\n",[176,238,240],{"id":239},"bumping-the-renderer","Bumping the renderer",[181,242,244],{"className":183,"code":243,"language":185,"meta":186,"style":186},"cd mdsite-nuxt\ngit fetch origin\ngit checkout v0.2.0        # or any commit\u002Fbranch\u002Ftag\ncd ..\ngit add mdsite-nuxt\ngit commit -m \"chore: bump mdsite-nuxt to v0.2.0\"\n",[27,245,246,254,265,280,288,298],{"__ignoreMap":186},[190,247,248,251],{"class":192,"line":193},[190,249,250],{"class":204},"cd",[190,252,253],{"class":200}," mdsite-nuxt\n",[190,255,257,259,262],{"class":192,"line":256},2,[190,258,197],{"class":196},[190,260,261],{"class":200}," fetch",[190,263,264],{"class":200}," origin\n",[190,266,268,270,273,276],{"class":192,"line":267},3,[190,269,197],{"class":196},[190,271,272],{"class":200}," checkout",[190,274,275],{"class":200}," v0.2.0",[190,277,279],{"class":278},"sJ8bj","        # or any commit\u002Fbranch\u002Ftag\n",[190,281,283,285],{"class":192,"line":282},4,[190,284,250],{"class":204},[190,286,287],{"class":200}," ..\n",[190,289,291,293,296],{"class":192,"line":290},5,[190,292,197],{"class":196},[190,294,295],{"class":200}," add",[190,297,253],{"class":200},[190,299,301,303,306,309],{"class":192,"line":300},6,[190,302,197],{"class":196},[190,304,305],{"class":200}," commit",[190,307,308],{"class":204}," -m",[190,310,311],{"class":200}," \"chore: bump mdsite-nuxt to v0.2.0\"\n",[23,313,314],{},"The parent repo records the new SHA. Pushing that commit ships the new renderer version with the next CLI release.",[176,316,318],{"id":317},"making-changes-to-the-renderer","Making changes to the renderer",[23,320,321,322,324,325,329],{},"Because ",[27,323,29],{}," is a submodule, edits made inside it are commits in the ",[326,327,328],"em",{},"submodule's"," repository, not the parent's. The typical workflow is:",[331,332,333,338,343,349],"ol",{},[71,334,335],{},[27,336,337],{},"cd mdsite-nuxt",[71,339,340,341,115],{},"Create a branch, make changes, commit, push to a fork or branch of ",[27,342,58],{},[71,344,345,346,115],{},"Open a PR against ",[32,347,58],{"href":56,"rel":348},[51],[71,350,351],{},"After merge, bump the submodule pointer in the parent repo (as above).",[23,353,354],{},"If you only need to test a local change end-to-end, you can commit on a feature branch of the submodule and point the parent at that branch commit — no PR required for local iteration.",[38,356,358],{"id":357},"_4-customizing-the-renderer","4. Customizing the renderer",[23,360,361,362,364,365,368,369,371],{},"Most renderer behavior is driven by ",[27,363,128],{}," (themes, features, site name, favicon, canonical URL). The CLI serializes the relevant fields into ",[27,366,367],{},"mdsite-nuxt\u002Fcontent.config.yml"," on every run, so editing ",[27,370,128],{}," in your content directory is the supported way to customize the look and feel without touching submodule code.",[23,373,374,375,377,378,381,382,384],{},"The renderer reads ",[27,376,128],{}," directly via ",[27,379,380],{},"utils\u002Fmdsite-config.ts"," for some low-level concerns (themes, content path). For everything else, the CLI-prepared ",[27,383,141],{}," is the source of truth.",[176,386,388,389],{"id":387},"what-you-can-configure-from-mdsiteyml","What you can configure from ",[27,390,128],{},[68,392,393,405,415,421,439],{},[71,394,395,398,399,404],{},[155,396,397],{},"Themes"," — Vuetify color tokens for light\u002Fdark mode (see ",[32,400,403],{"href":401,"rel":402},"https:\u002F\u002Flife-and-dev.github.io\u002Fmdsite\u002Ftheme",[51],"Theme Configuration",").",[71,406,407,410,411,404],{},[155,408,409],{},"Features"," — Bible tooltips, source-edit links (see ",[32,412,409],{"href":413,"rel":414},"https:\u002F\u002Flife-and-dev.github.io\u002Fmdsite\u002Ffeatures",[51],[71,416,417,420],{},[155,418,419],{},"Site name and canonical URL"," — used in metadata.",[71,422,423,426,427,430,431,434,435,438],{},[155,424,425],{},"Favicon"," — set ",[27,428,429],{},"site.favicon"," to a source image path relative to the content dir; the renderer generates all derived icons and the web manifest directly into its own ",[27,432,433],{},"public\u002F"," dir (the renderer working dir, e.g. ",[27,436,437],{},".mdsite\u002Fpublic\u002F","). No files are written into the content dir.",[71,440,441,444,445,448,449,451,452,455,456,404],{},[155,442,443],{},"Footer links"," — list of links, separators, and external URLs rendered in the bottom bar, configured under ",[27,446,447],{},"features.footer"," in ",[27,450,128],{},". Mirrors the ",[27,453,454],{},"menu"," item shape (string, null, or single-key object) but without sub-menus (see ",[32,457,459],{"href":458},"..\u002Ffooter","Footer Configuration",[176,461,463],{"id":462},"what-requires-editing-the-submodule","What requires editing the submodule",[23,465,466,467,469],{},"Changes that need new code in the renderer (new components, new Nuxt hooks, new pages, new Vuetify defaults) belong in ",[27,468,29],{},". The sections below describe where each kind of change goes.",[38,471,473],{"id":472},"_5-extending-nuxt-with-custom-components","5. Extending Nuxt with custom components",[23,475,476,477,480,481,102,484,102,487,102,490,102,493,102,496,499],{},"The renderer follows standard Nuxt 4 conventions. Components live in ",[27,478,479],{},"app\u002Fcomponents\u002F"," and are auto-imported. Existing components include ",[27,482,483],{},"AppBar.vue",[27,485,486],{},"AppFooter.vue",[27,488,489],{},"AppNavigation.vue",[27,491,492],{},"AppTableOfContents.vue",[27,494,495],{},"BreadcrumbNav.vue",[27,497,498],{},"SearchBox.vue",", and the navigation tree components.",[176,501,503],{"id":502},"add-a-new-global-component","Add a new global component",[331,505,506,624,634],{},[71,507,508,509,215,512],{},"Create ",[27,510,511],{},"mdsite-nuxt\u002Fapp\u002Fcomponents\u002FMyComponent.vue",[181,513,517],{"className":514,"code":515,"language":516,"meta":186,"style":186},"language-vue shiki shiki-themes github-light github-dark","\u003Ctemplate>\n  \u003Cv-card class=\"my-component\">\n    \u003Cslot \u002F>\n  \u003C\u002Fv-card>\n\u003C\u002Ftemplate>\n\n\u003Cscript setup lang=\"ts\">\n\u002F\u002F Component logic here\n\u003C\u002Fscript>\n","vue",[27,518,519,532,551,565,574,583,588,609,615],{"__ignoreMap":186},[190,520,521,525,529],{"class":192,"line":193},[190,522,524],{"class":523},"sVt8B","\u003C",[190,526,528],{"class":527},"s9eBZ","template",[190,530,531],{"class":523},">\n",[190,533,534,537,540,543,546,549],{"class":192,"line":256},[190,535,536],{"class":523},"  \u003C",[190,538,539],{"class":527},"v-card",[190,541,542],{"class":196}," class",[190,544,545],{"class":523},"=",[190,547,548],{"class":200},"\"my-component\"",[190,550,531],{"class":523},[190,552,553,556,559,563],{"class":192,"line":267},[190,554,555],{"class":523},"    \u003C",[190,557,558],{"class":527},"slot",[190,560,562],{"class":561},"s7hpK"," \u002F",[190,564,531],{"class":523},[190,566,567,570,572],{"class":192,"line":282},[190,568,569],{"class":523},"  \u003C\u002F",[190,571,539],{"class":527},[190,573,531],{"class":523},[190,575,576,579,581],{"class":192,"line":290},[190,577,578],{"class":523},"\u003C\u002F",[190,580,528],{"class":527},[190,582,531],{"class":523},[190,584,585],{"class":192,"line":300},[190,586,587],{"emptyLinePlaceholder":8},"\n",[190,589,591,593,596,599,602,604,607],{"class":192,"line":590},7,[190,592,524],{"class":523},[190,594,595],{"class":527},"script",[190,597,598],{"class":196}," setup",[190,600,601],{"class":196}," lang",[190,603,545],{"class":523},[190,605,606],{"class":200},"\"ts\"",[190,608,531],{"class":523},[190,610,612],{"class":192,"line":611},8,[190,613,614],{"class":278},"\u002F\u002F Component logic here\n",[190,616,618,620,622],{"class":192,"line":617},9,[190,619,578],{"class":523},[190,621,595],{"class":527},[190,623,531],{"class":523},[71,625,626,627,629,630,633],{},"Use it anywhere — Nuxt auto-imports components in ",[27,628,479],{}," based on filename. ",[27,631,632],{},"\u003CMyComponent>"," is available in every page and layout without an explicit import.",[71,635,636,637,640,641,644,645,648,649,652,653,656,657,660],{},"To use the component in Markdown content, enable the ",[27,638,639],{},"\u003Ccomponent>"," syntax in ",[27,642,643],{},"@nuxt\u002Fcontent"," (it is supported by default in Nuxt Content v3 for components in ",[27,646,647],{},"app\u002Fcomponents\u002Fcontent\u002F","). Drop the file in ",[27,650,651],{},"app\u002Fcomponents\u002Fcontent\u002FMyComponent.vue"," and reference it as ",[27,654,655],{},"::my-component"," or ",[27,658,659],{},"\u003CMyComponent \u002F>"," in your Markdown.",[176,662,664],{"id":663},"override-an-existing-component","Override an existing component",[23,666,667,668,670],{},"Nuxt auto-imports components by filename, but you can also register explicit aliases. To replace ",[27,669,483],{}," without deleting it, either:",[68,672,673,676],{},[71,674,675],{},"Rename the file (cleanest, but breaks existing references), or",[71,677,678,679,682],{},"Create a new component and update ",[27,680,681],{},"app\u002Flayouts\u002Fdefault.vue"," to use it.",[176,684,686],{"id":685},"add-a-new-page","Add a new page",[23,688,689,690,693,694,697,698,701,702,705],{},"Pages live in ",[27,691,692],{},"app\u002Fpages\u002F",". The renderer currently uses ",[27,695,696],{},"[...slug].vue"," to render any Markdown route and ",[27,699,700],{},"index.vue"," for the root. Add a new ",[27,703,704],{},".vue"," file to introduce a custom route that does not come from Markdown:",[181,707,709],{"className":514,"code":708,"language":516,"meta":186,"style":186},"\u003C!-- app\u002Fpages\u002Fcustom.vue -->\n\u003Ctemplate>\n  \u003Cv-container>\n    \u003Ch1>Custom route\u003C\u002Fh1>\n  \u003C\u002Fv-container>\n\u003C\u002Ftemplate>\n",[27,710,711,716,724,733,746,754],{"__ignoreMap":186},[190,712,713],{"class":192,"line":193},[190,714,715],{"class":278},"\u003C!-- app\u002Fpages\u002Fcustom.vue -->\n",[190,717,718,720,722],{"class":192,"line":256},[190,719,524],{"class":523},[190,721,528],{"class":527},[190,723,531],{"class":523},[190,725,726,728,731],{"class":192,"line":267},[190,727,536],{"class":523},[190,729,730],{"class":527},"v-container",[190,732,531],{"class":523},[190,734,735,737,739,742,744],{"class":192,"line":282},[190,736,555],{"class":523},[190,738,19],{"class":527},[190,740,741],{"class":523},">Custom route\u003C\u002F",[190,743,19],{"class":527},[190,745,531],{"class":523},[190,747,748,750,752],{"class":192,"line":290},[190,749,569],{"class":523},[190,751,730],{"class":527},[190,753,531],{"class":523},[190,755,756,758,760],{"class":192,"line":300},[190,757,578],{"class":523},[190,759,528],{"class":527},[190,761,531],{"class":523},[23,763,764,765,115],{},"It is reachable at ",[27,766,767],{},"\u002Fcustom",[176,769,771],{"id":770},"add-a-new-layout","Add a new layout",[23,773,774,775,778,779,102,782,785,786,789,790,793,794,115],{},"Layouts live in ",[27,776,777],{},"app\u002Flayouts\u002F",". The default layout wraps every page with ",[27,780,781],{},"AppBar",[27,783,784],{},"AppNavigation",", and ",[27,787,788],{},"AppFooter",". To introduce an alternative layout (for example, a barebones print layout), create ",[27,791,792],{},"app\u002Flayouts\u002Fprint.vue"," and reference it from a page via ",[27,795,796],{},"definePageMeta({ layout: 'print' })",[176,798,800],{"id":799},"add-a-nuxt-plugin","Add a Nuxt plugin",[23,802,803,804,807,808,115],{},"Plugins live in ",[27,805,806],{},"app\u002Fplugins\u002F",". Use them for one-time setup like registering Vue directives, initializing third-party libraries, or injecting helpers via ",[27,809,810],{},"nuxtApp.provide",[38,812,814],{"id":813},"_6-nuxt-hooks-the-renderer-relies-on","6. Nuxt hooks the renderer relies on",[23,816,817,819],{},[27,818,75],{}," registers three hooks that you should be aware of before extending the renderer:",[821,822,823,839],"table",{},[824,825,826],"thead",{},[827,828,829,833,836],"tr",{},[830,831,832],"th",{},"Hook",[830,834,835],{},"When it runs",[830,837,838],{},"What it does",[840,841,842,870,887],"tbody",{},[827,843,844,850,856],{},[845,846,847],"td",{},[27,848,849],{},"content:file:beforeParse",[845,851,852,853,855],{},"Before ",[27,854,643],{}," parses each Markdown file",[845,857,858,859,862,863,866,867,115],{},"Transforms GFM alerts into ",[27,860,861],{},"::markdown-alert"," MDC components, and (if ",[27,864,865],{},"features.bible-tooltips"," is on) wraps Bible references in ",[27,868,869],{},"\u003Cspan class=\"bible-ref\">",[827,871,872,877,880],{},[845,873,874],{},[27,875,876],{},"build:before",[845,878,879],{},"Before the production build",[845,881,882,883,886],{},"Runs ",[27,884,885],{},"scripts\u002Frenderer-hooks.ts"," to build search indices, navigation trees, and favicons. Skipped when the CLI has already orchestrated these.",[827,888,889,899,902],{},[845,890,891,894,895,898],{},[27,892,893],{},"ready"," (via ",[27,896,897],{},"scripts\u002Fstart.ts",")",[845,900,901],{},"When the dev server starts",[845,903,904,905,907],{},"Starts the ",[27,906,108],{}," watcher that copies images and regenerates JSON as you edit.",[23,909,910,911,913,914,917],{},"If you add new pre-parse transforms, follow the same ",[27,912,849],{}," pattern — mutate ",[27,915,916],{},"file.body"," in place and respect the existing code-block\u002Finline-code\u002Flink exclusion checks to avoid transforming code.",[38,919,921],{"id":920},"_7-low-level-renderer-commands","7. Low-level renderer commands",[23,923,924,925,102,928,102,931,934,935,215],{},"For normal content work, use the CLI (",[27,926,927],{},"mdsite live",[27,929,930],{},"mdsite generate",[27,932,933],{},"mdsite static","). The renderer exposes its own npm scripts for direct development inside ",[27,936,29],{},[821,938,939,949],{},[824,940,941],{},[827,942,943,946],{},[830,944,945],{},"Script",[830,947,948],{},"Purpose",[840,950,951,963,976,992,1004,1028,1038],{},[827,952,953,958],{},[845,954,955],{},[27,956,957],{},"npm run dev",[845,959,960,961,404],{},"Start the Nuxt dev server (used by ",[27,962,927],{},[827,964,965,970],{},[845,966,967],{},[27,968,969],{},"npm run build",[845,971,972,973,115],{},"Production build via ",[27,974,975],{},"scripts\u002Fstart.ts --build",[827,977,978,983],{},[845,979,980],{},[27,981,982],{},"npm run generate",[845,984,985,986,989,990,404],{},"Static build via ",[27,987,988],{},"scripts\u002Fstart.ts --generate"," (used by ",[27,991,930],{},[827,993,994,999],{},[845,995,996],{},[27,997,998],{},"npm run preview",[845,1000,1001,1002,404],{},"Preview a generated build (used by ",[27,1003,933],{},[827,1005,1006,1011],{},[845,1007,1008],{},[27,1009,1010],{},"npm run prepare:nuxt",[845,1012,1013,1016,1017,1020,1021,1024,1025,115],{},[27,1014,1015],{},"nuxt prepare"," — regenerates ",[27,1018,1019],{},".nuxt\u002F"," types. Runs automatically on ",[27,1022,1023],{},"npm install"," via ",[27,1026,1027],{},"postinstall",[827,1029,1030,1035],{},[845,1031,1032],{},[27,1033,1034],{},"npm run favicon",[845,1036,1037],{},"Regenerate favicons from a source SVG.",[827,1039,1040,1045],{},[845,1041,1042],{},[27,1043,1044],{},"npm test",[845,1046,1047],{},"Run the renderer's Vitest suite.",[23,1049,1050,1051,1053],{},"Run these inside ",[27,1052,29],{}," only when you are actively developing the renderer. Content projects should always go through the CLI.",[38,1055,1057],{"id":1056},"_8-renderer-tests","8. Renderer tests",[23,1059,1060,1061,1064,1065,1068,1069,102,1072,1075,1076,1080,1081,115],{},"The renderer has its own Vitest config (",[27,1062,1063],{},"mdsite-nuxt\u002Fvitest.config.ts",") and Playwright config (",[27,1066,1067],{},"mdsite-nuxt\u002Fplaywright.config.js","). Test files for utility scripts live next to their source (for example ",[27,1070,1071],{},"scripts\u002Fgenerate-indices.test.ts",[27,1073,1074],{},"scripts\u002Frenderer-hooks.test.ts","). The CLI test suite (see ",[32,1077,1079],{"href":1078},"tests","Testing",") does not cover renderer code — run renderer tests separately from inside ",[27,1082,29],{},[1084,1085],"hr",{},[1087,1088,1090],"markdown-alert",{"type":1089},"tip",[23,1091,1092,1093,1096,1097,1100],{},"If you find yourself wanting to change rendering behavior from inside ",[27,1094,1095],{},"src\u002F"," (the CLI), it almost certainly belongs here in the submodule instead. The CLI's job is to ",[326,1098,1099],{},"prepare"," the renderer environment, not to render.",[1102,1103,1104],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":186,"searchDepth":256,"depth":256,"links":1106},[1107,1108,1109,1114,1119,1126,1127,1128],{"id":40,"depth":256,"text":41},{"id":145,"depth":256,"text":146},{"id":173,"depth":256,"text":174,"children":1110},[1111,1112,1113],{"id":178,"depth":267,"text":179},{"id":239,"depth":267,"text":240},{"id":317,"depth":267,"text":318},{"id":357,"depth":256,"text":358,"children":1115},[1116,1118],{"id":387,"depth":267,"text":1117},"What you can configure from mdsite.yml",{"id":462,"depth":267,"text":463},{"id":472,"depth":256,"text":473,"children":1120},[1121,1122,1123,1124,1125],{"id":502,"depth":267,"text":503},{"id":663,"depth":267,"text":664},{"id":685,"depth":267,"text":686},{"id":770,"depth":267,"text":771},{"id":799,"depth":267,"text":800},{"id":813,"depth":256,"text":814},{"id":920,"depth":256,"text":921},{"id":1056,"depth":256,"text":1057},"This page covers the renderer half of MDsite: what mdsite-nuxt\u002F is, how to customize it, and how to extend Nuxt with your own components. For the high-level CLI\u002Fsubmodule integration, start at Developing mdsite instead.","md",{},"\u002Fdevelop\u002Fnuxt",{"title":14,"description":1129},"develop\u002Fnuxt","S4TwReez9rnwa5auOG4ZnmaGk_KivlyNhJp4rjLooLU",1784017753070]