[{"data":1,"prerenderedAt":2340},["ShallowReactive",2],{"navigation_docs":3,"-modules-menu":153,"-modules-menu-surround":2335},[4,35,50,59,144],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Local Development","\u002Fgetting-started\u002Flocal-development","1.getting-started\u002F3.local-development","i-lucide-terminal",{"title":21,"path":22,"stem":23,"icon":24},"Publishing Packages","\u002Fgetting-started\u002Fpublishing","1.getting-started\u002F4.publishing","i-lucide-package-check",{"title":26,"path":27,"stem":28,"icon":29},"Writing a Module","\u002Fgetting-started\u002Fwriting-a-module","1.getting-started\u002F5.writing-a-module","i-lucide-puzzle",{"title":31,"path":32,"stem":33,"icon":34},"UX Patterns","\u002Fgetting-started\u002Fux-patterns","1.getting-started\u002F6.ux-patterns","i-lucide-layout-template",{"title":36,"path":37,"stem":38,"children":39},"Applications","\u002Fapplications","2.applications",[40,45],{"title":41,"path":42,"stem":43,"icon":44},"Website","\u002Fapplications\u002Fwebsite","2.applications\u002F1.website","i-lucide-layout-dashboard",{"title":46,"path":47,"stem":48,"icon":49},"Docs","\u002Fapplications\u002Fdocs","2.applications\u002F2.docs","i-lucide-book-open",{"title":51,"path":52,"stem":53,"children":54},"Layers","\u002Flayers","3.layers",[55],{"title":56,"path":57,"stem":58},"Base Layer","\u002Flayers\u002Fbase","3.layers\u002F1.base",{"title":60,"path":61,"stem":62,"children":63},"Modules","\u002Fmodules","4.modules",[64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140],{"title":65,"path":66,"stem":67},"Account","\u002Fmodules\u002Faccount","4.modules\u002F01.account",{"title":69,"path":70,"stem":71},"Admin","\u002Fmodules\u002Fadmin","4.modules\u002F02.admin",{"title":73,"path":74,"stem":75},"Auth","\u002Fmodules\u002Fauth","4.modules\u002F03.auth",{"title":77,"path":78,"stem":79},"Authorization","\u002Fmodules\u002Fauthorization","4.modules\u002F04.authorization",{"title":81,"path":82,"stem":83},"Cookie Consent","\u002Fmodules\u002Fcookie-consent","4.modules\u002F05.cookie-consent",{"title":85,"path":86,"stem":87},"Events","\u002Fmodules\u002Fevents","4.modules\u002F06.events",{"title":89,"path":90,"stem":91},"Forms","\u002Fmodules\u002Fforms","4.modules\u002F07.forms",{"title":93,"path":94,"stem":95},"MCP","\u002Fmodules\u002Fmcp","4.modules\u002F08.mcp",{"title":97,"path":98,"stem":99},"Menu","\u002Fmodules\u002Fmenu","4.modules\u002F09.menu",{"title":101,"path":102,"stem":103},"Module Kit","\u002Fmodules\u002Fmodule-kit","4.modules\u002F10.module-kit",{"title":105,"path":106,"stem":107},"Notify","\u002Fmodules\u002Fnotify","4.modules\u002F11.notify",{"title":109,"path":110,"stem":111},"OAuth Server","\u002Fmodules\u002Foauth-server","4.modules\u002F12.oauth-server",{"title":113,"path":114,"stem":115},"Payments","\u002Fmodules\u002Fpayments","4.modules\u002F13.payments",{"title":117,"path":118,"stem":119},"Preferences","\u002Fmodules\u002Fpreferences","4.modules\u002F14.preferences",{"title":121,"path":122,"stem":123},"Stripe","\u002Fmodules\u002Fstripe","4.modules\u002F15.stripe",{"title":125,"path":126,"stem":127},"Subscriptions","\u002Fmodules\u002Fsubscriptions","4.modules\u002F16.subscriptions",{"title":129,"path":130,"stem":131},"UI","\u002Fmodules\u002Fui","4.modules\u002F17.ui",{"title":133,"path":134,"stem":135},"Users","\u002Fmodules\u002Fusers","4.modules\u002F18.users",{"title":137,"path":138,"stem":139},"Widget","\u002Fmodules\u002Fwidget","4.modules\u002F19.widget",{"title":141,"path":142,"stem":143},"Email Templates","\u002Fmodules\u002Femail-templates","4.modules\u002F20.email-templates",{"title":145,"path":146,"stem":147,"children":148},"Packages","\u002Fpackages","5.packages",[149],{"title":150,"path":151,"stem":152},"CLI","\u002Fpackages\u002Fcli","5.packages\u002F4.cli",{"id":154,"title":97,"body":155,"description":2329,"extension":2330,"links":2331,"meta":2332,"navigation":460,"path":98,"seo":2333,"stem":99,"__hash__":2334},"docs\u002F4.modules\u002F09.menu.md",{"type":156,"value":157,"toc":2315},"minimark",[158,195,230,235,304,308,377,584,588,594,650,754,771,775,803,823,863,866,901,905,910,924,1088,1115,1127,1130,1296,1357,1361,1376,1479,1483,1486,1491,1662,1670,1861,2071,2094,2098,2103,2213,2229,2233,2311],[159,160,161,162,166,167,171,172,171,175,178,179,182,183,186,187,190,191,194],"p",{},"Named, shareable navigation menus. A ",[163,164,165],"strong",{},"menu"," (",[168,169,170],"code",{},"main",", ",[168,173,174],{},"dashboard",[168,176,177],{},"account",", ...) is a named collection of items,\nfilled by one or more ",[163,180,181],{},"sources",": Nuxt Content (for example the website navigation), other modules (at build time or\ndynamically at runtime), or both. The module is presentation-free: it only exposes data through ",[168,184,185],{},"useMenu",", and\n",[168,188,189],{},"description"," and ",[168,192,193],{},"icon"," are optional fields a consumer may render or ignore.",[196,197,198,201,202,208,209,201,212,190,215,218,219,221,222,225,226,229],"note",{},[163,199,200],{},"Requires"," ",[203,204,205],"a",{"href":102},[168,206,207],{},"@frigear-nu\u002Fmodule-kit",".\n",[163,210,211],{},"Optional",[168,213,214],{},"@nuxt\u002Fcontent",[168,216,217],{},"@nuxtjs\u002Fi18n",". ",[168,220,214],{}," is required only for menus that enable the\n",[168,223,224],{},"content"," source (a build-time error is thrown otherwise).\nOther modules declare ",[168,227,228],{},"@frigear-nu\u002Fmenu"," as an optional dependency, so it is only needed when the host wants their\nitems rendered somewhere.",[231,232,234],"h2",{"id":233},"vocabulary","Vocabulary",[236,237,238,251],"table",{},[239,240,241],"thead",{},[242,243,244,248],"tr",{},[245,246,247],"th",{},"Term",[245,249,250],{},"Meaning",[252,253,254,269,288],"tbody",{},[242,255,256,259],{},[257,258,97],"td",{},[257,260,261,262,171,264,171,266,268],{},"A named collection of items (",[168,263,170],{},[168,265,174],{},[168,267,177],{},", ...).",[242,270,271,274],{},[257,272,273],{},"Group",[257,275,276,277,280,281,284,285,287],{},"The part after a menu's first dot: ",[168,278,279],{},"dashboard.more"," is group ",[168,282,283],{},"more"," of menu ",[168,286,174],{},". The part before any dot-less path is the root group.",[242,289,290,293],{},[257,291,292],{},"Source",[257,294,295,296,299,300,303],{},"Anything that fills a menu: Nuxt Content, ",[168,297,298],{},"extendMenu",", or a module's ",[168,301,302],{},"runtime\u002Fmenus.ts"," file.",[231,305,307],{"id":306},"quick-setup","Quick setup",[309,310,315],"pre",{"className":311,"code":312,"language":313,"meta":314,"style":314},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['@frigear-nu\u002Fmenu'],\n})\n","ts","",[168,316,317,341,368],{"__ignoreMap":314},[318,319,322,326,329,333,337],"span",{"class":320,"line":321},"line",1,[318,323,325],{"class":324},"s7zQu","export",[318,327,328],{"class":324}," default",[318,330,332],{"class":331},"s2Zo4"," defineNuxtConfig",[318,334,336],{"class":335},"sTEyZ","(",[318,338,340],{"class":339},"sMK4o","{\n",[318,342,344,348,351,354,357,360,362,365],{"class":320,"line":343},2,[318,345,347],{"class":346},"swJcz","  modules",[318,349,350],{"class":339},":",[318,352,353],{"class":335}," [",[318,355,356],{"class":339},"'",[318,358,228],{"class":359},"sfazB",[318,361,356],{"class":339},[318,363,364],{"class":335},"]",[318,366,367],{"class":339},",\n",[318,369,371,374],{"class":320,"line":370},3,[318,372,373],{"class":339},"}",[318,375,376],{"class":335},")\n",[309,378,382],{"className":379,"code":380,"language":381,"meta":314,"style":314},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nconst { data: items } = useMenu('main')\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cnav>\n    \u003CNuxtLink v-for=\"item in items\" :key=\"item.id\" :to=\"item.to\">\n      {{ item.label }}\n    \u003C\u002FNuxtLink>\n  \u003C\u002Fnav>\n\u003C\u002Ftemplate>\n","vue",[168,383,384,412,446,455,462,472,483,549,555,565,575],{"__ignoreMap":314},[318,385,386,389,392,396,399,402,405,407,409],{"class":320,"line":321},[318,387,388],{"class":339},"\u003C",[318,390,391],{"class":346},"script",[318,393,395],{"class":394},"spNyl"," setup",[318,397,398],{"class":394}," lang",[318,400,401],{"class":339},"=",[318,403,404],{"class":339},"\"",[318,406,313],{"class":359},[318,408,404],{"class":339},[318,410,411],{"class":339},">\n",[318,413,414,417,420,423,425,428,430,433,436,438,440,442,444],{"class":320,"line":343},[318,415,416],{"class":394},"const",[318,418,419],{"class":339}," {",[318,421,422],{"class":346}," data",[318,424,350],{"class":339},[318,426,427],{"class":335}," items ",[318,429,373],{"class":339},[318,431,432],{"class":339}," =",[318,434,435],{"class":331}," useMenu",[318,437,336],{"class":335},[318,439,356],{"class":339},[318,441,170],{"class":359},[318,443,356],{"class":339},[318,445,376],{"class":335},[318,447,448,451,453],{"class":320,"line":370},[318,449,450],{"class":339},"\u003C\u002F",[318,452,391],{"class":346},[318,454,411],{"class":339},[318,456,458],{"class":320,"line":457},4,[318,459,461],{"emptyLinePlaceholder":460},true,"\n",[318,463,465,467,470],{"class":320,"line":464},5,[318,466,388],{"class":339},[318,468,469],{"class":346},"template",[318,471,411],{"class":339},[318,473,475,478,481],{"class":320,"line":474},6,[318,476,477],{"class":339},"  \u003C",[318,479,480],{"class":346},"nav",[318,482,411],{"class":339},[318,484,486,489,492,495,497,499,502,505,508,510,513,516,518,520,522,525,528,530,532,535,537,539,541,543,545,547],{"class":320,"line":485},7,[318,487,488],{"class":339},"    \u003C",[318,490,491],{"class":346},"NuxtLink",[318,493,494],{"class":324}," v-for",[318,496,401],{"class":339},[318,498,404],{"class":339},[318,500,501],{"class":335},"item",[318,503,504],{"class":339}," in ",[318,506,507],{"class":335},"items",[318,509,404],{"class":339},[318,511,512],{"class":339}," :",[318,514,515],{"class":394},"key",[318,517,401],{"class":339},[318,519,404],{"class":339},[318,521,501],{"class":335},[318,523,524],{"class":339},".",[318,526,527],{"class":335},"id",[318,529,404],{"class":339},[318,531,512],{"class":339},[318,533,534],{"class":394},"to",[318,536,401],{"class":339},[318,538,404],{"class":339},[318,540,501],{"class":335},[318,542,524],{"class":339},[318,544,534],{"class":335},[318,546,404],{"class":339},[318,548,411],{"class":339},[318,550,552],{"class":320,"line":551},8,[318,553,554],{"class":335},"      {{ item.label }}\n",[318,556,558,561,563],{"class":320,"line":557},9,[318,559,560],{"class":339},"    \u003C\u002F",[318,562,491],{"class":346},[318,564,411],{"class":339},[318,566,568,571,573],{"class":320,"line":567},10,[318,569,570],{"class":339},"  \u003C\u002F",[318,572,480],{"class":346},[318,574,411],{"class":339},[318,576,578,580,582],{"class":320,"line":577},11,[318,579,450],{"class":339},[318,581,469],{"class":346},[318,583,411],{"class":339},[231,585,587],{"id":586},"options","Options",[159,589,590,591,524],{},"Options live under ",[168,592,593],{},"menus",[236,595,596,612],{},[239,597,598],{},[242,599,600,603,606,609],{},[245,601,602],{},"Option",[245,604,605],{},"Type",[245,607,608],{},"Default",[245,610,611],{},"Purpose",[252,613,614],{},[242,615,616,620,625,628],{},[257,617,618],{},[168,619,224],{},[257,621,622],{},[168,623,624],{},"Record\u003Cstring, boolean | { collection?: string, field?: string }>",[257,626,627],{},"none",[257,629,630,631,634,635,638,639,642,643,646,647,524],{},"Enables the Nuxt Content source per menu. ",[168,632,633],{},"true"," reads the ",[168,636,637],{},"config"," collection's ",[168,640,641],{},"navigation"," field (as defined by the base layer); an object picks another ",[168,644,645],{},"collection"," \u002F ",[168,648,649],{},"field",[309,651,653],{"className":311,"code":652,"language":313,"meta":314,"style":314},"export default defineNuxtConfig({\n  menus: {\n    content: {\n      main: true,\n      dashboard: { collection: 'dashboard', field: 'tiles' },\n    },\n  },\n})\n",[168,654,655,667,677,686,699,738,743,748],{"__ignoreMap":314},[318,656,657,659,661,663,665],{"class":320,"line":321},[318,658,325],{"class":324},[318,660,328],{"class":324},[318,662,332],{"class":331},[318,664,336],{"class":335},[318,666,340],{"class":339},[318,668,669,672,674],{"class":320,"line":343},[318,670,671],{"class":346},"  menus",[318,673,350],{"class":339},[318,675,676],{"class":339}," {\n",[318,678,679,682,684],{"class":320,"line":370},[318,680,681],{"class":346},"    content",[318,683,350],{"class":339},[318,685,676],{"class":339},[318,687,688,691,693,697],{"class":320,"line":457},[318,689,690],{"class":346},"      main",[318,692,350],{"class":339},[318,694,696],{"class":695},"sfNiH"," true",[318,698,367],{"class":339},[318,700,701,704,706,708,711,713,716,718,720,723,726,728,730,733,735],{"class":320,"line":464},[318,702,703],{"class":346},"      dashboard",[318,705,350],{"class":339},[318,707,419],{"class":339},[318,709,710],{"class":346}," collection",[318,712,350],{"class":339},[318,714,715],{"class":339}," '",[318,717,174],{"class":359},[318,719,356],{"class":339},[318,721,722],{"class":339},",",[318,724,725],{"class":346}," field",[318,727,350],{"class":339},[318,729,715],{"class":339},[318,731,732],{"class":359},"tiles",[318,734,356],{"class":339},[318,736,737],{"class":339}," },\n",[318,739,740],{"class":320,"line":474},[318,741,742],{"class":339},"    },\n",[318,744,745],{"class":320,"line":485},[318,746,747],{"class":339},"  },\n",[318,749,750,752],{"class":320,"line":551},[318,751,373],{"class":339},[318,753,376],{"class":335},[159,755,756,757,759,760,763,764,766,767,770],{},"With ",[168,758,217],{}," configured with ",[168,761,762],{},"locales",", content items are localized by the per-locale collection\n(",[168,765,637],{}," becomes ",[168,768,769],{},"config_en","), the same convention as the base layer.",[231,772,774],{"id":773},"server","Server",[309,776,778],{"className":311,"code":777,"language":313,"meta":314,"style":314},"useMenu(event: H3Event, path: string): Promise\u003CMenuItem[]>\n",[168,779,780],{"__ignoreMap":314},[318,781,782,784,787,789,792,796,798,801],{"class":320,"line":321},[318,783,185],{"class":331},[318,785,786],{"class":335},"(event: H3Event",[318,788,722],{"class":339},[318,790,791],{"class":335}," path: string): ",[318,793,795],{"class":794},"sBMFI","Promise",[318,797,388],{"class":339},[318,799,800],{"class":335},"MenuItem[]",[318,802,411],{"class":339},[159,804,805,806,171,808,811,812,815,816,818,819,822],{},"Auto-imported in server code. It resolves the same merged list as the client composable: Content items first, then\nitems registered with ",[168,807,298],{},[168,809,810],{},"registerMenuSource"," or ",[168,813,814],{},"extendMenuItem"," (including from ",[168,817,302],{},"\nsources), sorted by ",[168,820,821],{},"order",". Paths and wildcards work as on the client.",[309,824,826],{"className":311,"code":825,"language":313,"meta":314,"style":314},"export default defineEventHandler(event => useMenu(event, 'dashboard.*'))\n",[168,827,828],{"__ignoreMap":314},[318,829,830,832,834,837,839,843,846,848,851,853,855,858,860],{"class":320,"line":321},[318,831,325],{"class":324},[318,833,328],{"class":324},[318,835,836],{"class":331}," defineEventHandler",[318,838,336],{"class":335},[318,840,842],{"class":841},"sHdIc","event",[318,844,845],{"class":394}," =>",[318,847,435],{"class":331},[318,849,850],{"class":335},"(event",[318,852,722],{"class":339},[318,854,715],{"class":339},[318,856,857],{"class":359},"dashboard.*",[318,859,356],{"class":339},[318,861,862],{"class":335},"))\n",[159,864,865],{},"Differences from the client:",[867,868,869,880,890],"ul",{},[870,871,872,873,646,876,879],"li",{},"Labels are not translated: ",[168,874,875],{},"labelKey",[168,877,878],{},"descriptionKey"," are returned untouched.",[870,881,882,883,886,887,524],{},"Content comes from the unlocalized collection unless you pass ",[168,884,885],{},"{ locale }",", as in ",[168,888,889],{},"useMenu(event, 'main', { locale: 'en' })",[870,891,892,894,895,897,898,524],{},[168,893,302],{}," sources run once per server process, not once per request, so they should depend on runtime config\nrather than request data. A source must import ",[168,896,814],{}," explicitly from ",[168,899,900],{},"@frigear-nu\u002Fmenu\u002Futils",[231,902,904],{"id":903},"app","App",[906,907,909],"h3",{"id":908},"reading-a-menu","Reading a menu",[159,911,912,914,915,923],{},[168,913,185],{}," is auto-imported and returns the shape of ",[203,916,920],{"href":917,"rel":918},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-async-data",[919],"nofollow",[168,921,922],{},"useAsyncData",".\nIt re-evaluates when the content locale changes and merges every source: Content items first, then items registered\nat build time or by a runtime source.",[309,925,927],{"className":311,"code":926,"language":313,"meta":314,"style":314},"useMenu(path: string): AsyncData\u003CMenuItem[], NuxtError | undefined> \u002F\u002F { data, pending, error, refresh }\n\nconst { data: items } = useMenu('main') \u002F\u002F the root group of `main`\nconst { data: more } = useMenu('dashboard.more') \u002F\u002F group `more` of `dashboard`\nconst { data: all } = useMenu('dashboard.*') \u002F\u002F every group of `dashboard`, flattened\nconst { data: tree } = useMenu('dashboard.account.*') \u002F\u002F `account` and groups nested under it, not siblings\n",[168,928,929,955,959,991,1023,1055],{"__ignoreMap":314},[318,930,931,933,936,938,940,942,945,948,951],{"class":320,"line":321},[318,932,185],{"class":331},[318,934,935],{"class":335},"(path: string): AsyncData",[318,937,388],{"class":339},[318,939,800],{"class":335},[318,941,722],{"class":339},[318,943,944],{"class":335}," NuxtError ",[318,946,947],{"class":339},"|",[318,949,950],{"class":339}," undefined>",[318,952,954],{"class":953},"sHwdD"," \u002F\u002F { data, pending, error, refresh }\n",[318,956,957],{"class":320,"line":343},[318,958,461],{"emptyLinePlaceholder":460},[318,960,961,963,965,967,969,971,973,975,977,979,981,983,985,988],{"class":320,"line":370},[318,962,416],{"class":394},[318,964,419],{"class":339},[318,966,422],{"class":346},[318,968,350],{"class":339},[318,970,427],{"class":335},[318,972,373],{"class":339},[318,974,432],{"class":339},[318,976,435],{"class":331},[318,978,336],{"class":335},[318,980,356],{"class":339},[318,982,170],{"class":359},[318,984,356],{"class":339},[318,986,987],{"class":335},") ",[318,989,990],{"class":953},"\u002F\u002F the root group of `main`\n",[318,992,993,995,997,999,1001,1004,1006,1008,1010,1012,1014,1016,1018,1020],{"class":320,"line":457},[318,994,416],{"class":394},[318,996,419],{"class":339},[318,998,422],{"class":346},[318,1000,350],{"class":339},[318,1002,1003],{"class":335}," more ",[318,1005,373],{"class":339},[318,1007,432],{"class":339},[318,1009,435],{"class":331},[318,1011,336],{"class":335},[318,1013,356],{"class":339},[318,1015,279],{"class":359},[318,1017,356],{"class":339},[318,1019,987],{"class":335},[318,1021,1022],{"class":953},"\u002F\u002F group `more` of `dashboard`\n",[318,1024,1025,1027,1029,1031,1033,1036,1038,1040,1042,1044,1046,1048,1050,1052],{"class":320,"line":464},[318,1026,416],{"class":394},[318,1028,419],{"class":339},[318,1030,422],{"class":346},[318,1032,350],{"class":339},[318,1034,1035],{"class":335}," all ",[318,1037,373],{"class":339},[318,1039,432],{"class":339},[318,1041,435],{"class":331},[318,1043,336],{"class":335},[318,1045,356],{"class":339},[318,1047,857],{"class":359},[318,1049,356],{"class":339},[318,1051,987],{"class":335},[318,1053,1054],{"class":953},"\u002F\u002F every group of `dashboard`, flattened\n",[318,1056,1057,1059,1061,1063,1065,1068,1070,1072,1074,1076,1078,1081,1083,1085],{"class":320,"line":474},[318,1058,416],{"class":394},[318,1060,419],{"class":339},[318,1062,422],{"class":346},[318,1064,350],{"class":339},[318,1066,1067],{"class":335}," tree ",[318,1069,373],{"class":339},[318,1071,432],{"class":339},[318,1073,435],{"class":331},[318,1075,336],{"class":335},[318,1077,356],{"class":339},[318,1079,1080],{"class":359},"dashboard.account.*",[318,1082,356],{"class":339},[318,1084,987],{"class":335},[318,1086,1087],{"class":953},"\u002F\u002F `account` and groups nested under it, not siblings\n",[159,1089,1090,1091,1094,1095,1098,1099,1101,1102,1105,1106,1109,1110,190,1112,1114],{},"Paths are split on the ",[163,1092,1093],{},"first dot"," only: ",[168,1096,1097],{},"a.b.c"," is menu ",[168,1100,203],{},", group ",[168,1103,1104],{},"b.c",". A trailing ",[168,1107,1108],{},".*"," is a wildcard and is only\nsupported when reading; ",[168,1111,298],{},[168,1113,814],{}," reject it.",[159,1116,1117,1118,1120,1121,1123,1124,1126],{},"Items are sorted by ",[168,1119,821],{}," ascending. Items without an ",[168,1122,821],{}," come after those with one; ties (including all items\nwithout an ",[168,1125,821],{},") keep registration order.",[906,1128,1129],{"id":507},"Items",[309,1131,1133],{"className":311,"code":1132,"language":313,"meta":314,"style":314},"type MenuItem = {\n  id?: string \u002F\u002F stable key; default: `to`, else a slug of `label`\n  label: string\n  labelKey?: string \u002F\u002F i18n key; falls back to `label`\n  description?: string\n  descriptionKey?: string\n  icon?: string\n  to?: string\n  external?: boolean\n  tags?: string[]\n  order?: number \u002F\u002F lower first\n  group?: string \u002F\u002F set from the registration path; an explicit value wins\n  meta?: Record\u003Cstring, unknown>\n}\n",[168,1134,1135,1147,1161,1171,1183,1192,1201,1210,1219,1229,1241,1254,1267,1290],{"__ignoreMap":314},[318,1136,1137,1140,1143,1145],{"class":320,"line":321},[318,1138,1139],{"class":394},"type",[318,1141,1142],{"class":794}," MenuItem",[318,1144,432],{"class":339},[318,1146,676],{"class":339},[318,1148,1149,1152,1155,1158],{"class":320,"line":343},[318,1150,1151],{"class":346},"  id",[318,1153,1154],{"class":339},"?:",[318,1156,1157],{"class":794}," string",[318,1159,1160],{"class":953}," \u002F\u002F stable key; default: `to`, else a slug of `label`\n",[318,1162,1163,1166,1168],{"class":320,"line":370},[318,1164,1165],{"class":346},"  label",[318,1167,350],{"class":339},[318,1169,1170],{"class":794}," string\n",[318,1172,1173,1176,1178,1180],{"class":320,"line":457},[318,1174,1175],{"class":346},"  labelKey",[318,1177,1154],{"class":339},[318,1179,1157],{"class":794},[318,1181,1182],{"class":953}," \u002F\u002F i18n key; falls back to `label`\n",[318,1184,1185,1188,1190],{"class":320,"line":464},[318,1186,1187],{"class":346},"  description",[318,1189,1154],{"class":339},[318,1191,1170],{"class":794},[318,1193,1194,1197,1199],{"class":320,"line":474},[318,1195,1196],{"class":346},"  descriptionKey",[318,1198,1154],{"class":339},[318,1200,1170],{"class":794},[318,1202,1203,1206,1208],{"class":320,"line":485},[318,1204,1205],{"class":346},"  icon",[318,1207,1154],{"class":339},[318,1209,1170],{"class":794},[318,1211,1212,1215,1217],{"class":320,"line":551},[318,1213,1214],{"class":346},"  to",[318,1216,1154],{"class":339},[318,1218,1170],{"class":794},[318,1220,1221,1224,1226],{"class":320,"line":557},[318,1222,1223],{"class":346},"  external",[318,1225,1154],{"class":339},[318,1227,1228],{"class":794}," boolean\n",[318,1230,1231,1234,1236,1238],{"class":320,"line":567},[318,1232,1233],{"class":346},"  tags",[318,1235,1154],{"class":339},[318,1237,1157],{"class":794},[318,1239,1240],{"class":335},"[]\n",[318,1242,1243,1246,1248,1251],{"class":320,"line":577},[318,1244,1245],{"class":346},"  order",[318,1247,1154],{"class":339},[318,1249,1250],{"class":794}," number",[318,1252,1253],{"class":953}," \u002F\u002F lower first\n",[318,1255,1257,1260,1262,1264],{"class":320,"line":1256},12,[318,1258,1259],{"class":346},"  group",[318,1261,1154],{"class":339},[318,1263,1157],{"class":794},[318,1265,1266],{"class":953}," \u002F\u002F set from the registration path; an explicit value wins\n",[318,1268,1270,1273,1275,1278,1280,1283,1285,1288],{"class":320,"line":1269},13,[318,1271,1272],{"class":346},"  meta",[318,1274,1154],{"class":339},[318,1276,1277],{"class":794}," Record",[318,1279,388],{"class":339},[318,1281,1282],{"class":794},"string",[318,1284,722],{"class":339},[318,1286,1287],{"class":794}," unknown",[318,1289,411],{"class":339},[318,1291,1293],{"class":320,"line":1292},14,[318,1294,1295],{"class":339},"}\n",[236,1297,1298,1308],{},[239,1299,1300],{},[242,1301,1302,1305],{},[245,1303,1304],{},"Field",[245,1306,1307],{},"Notes",[252,1309,1310,1323,1340],{},[242,1311,1312,1316],{},[257,1313,1314],{},[168,1315,527],{},[257,1317,1318,1319,1322],{},"Always derived from the untranslated ",[168,1320,1321],{},"label",", so it is identical in every locale. A duplicate id in one batch logs a warning in development.",[242,1324,1325,1331],{},[257,1326,1327,171,1329],{},[168,1328,1321],{},[168,1330,189],{},[257,1332,1333,1334,1336,1337,1339],{},"Same shape as the ",[168,1335,641],{}," entries of the base layer's ",[168,1338,637],{}," collection, so content-sourced and module-sourced items match.",[242,1341,1342,1348],{},[257,1343,1344,171,1346],{},[168,1345,875],{},[168,1347,878],{},[257,1349,1350,1351,1353,1354,1356],{},"Resolved by ",[168,1352,185],{}," against the active locale and re-evaluated when it changes. Without ",[168,1355,217],{},", or when a key has no message, the plain text is used.",[906,1358,1360],{"id":1359},"translating-menus","Translating menus",[159,1362,1363,1364,1367,1368,1371,1372,1375],{},"Items from code can carry i18n keys. Ship the messages in your module's ",[168,1365,1366],{},"runtime\u002Fi18n\u002Flang\u002F*.json"," and register them\nwith ",[168,1369,1370],{},"registerLocales"," (see ",[203,1373,101],{"href":1374},"\u002Fmodules\u002Fmodule-kit#translations-i18n","). Items from the Content source are\nlocalized by their per-locale collection instead.",[309,1377,1379],{"className":311,"code":1378,"language":313,"meta":314,"style":314},"extendMenuItem('account.dropdown', {\n  id: 'logout',\n  label: 'Logout',\n  labelKey: 'account.menu.logout.label',\n  description: 'Sign out of your account.',\n  descriptionKey: 'account.menu.logout.description',\n})\n",[168,1380,1381,1398,1413,1428,1443,1458,1473],{"__ignoreMap":314},[318,1382,1383,1385,1387,1389,1392,1394,1396],{"class":320,"line":321},[318,1384,814],{"class":331},[318,1386,336],{"class":335},[318,1388,356],{"class":339},[318,1390,1391],{"class":359},"account.dropdown",[318,1393,356],{"class":339},[318,1395,722],{"class":339},[318,1397,676],{"class":339},[318,1399,1400,1402,1404,1406,1409,1411],{"class":320,"line":343},[318,1401,1151],{"class":346},[318,1403,350],{"class":339},[318,1405,715],{"class":339},[318,1407,1408],{"class":359},"logout",[318,1410,356],{"class":339},[318,1412,367],{"class":339},[318,1414,1415,1417,1419,1421,1424,1426],{"class":320,"line":370},[318,1416,1165],{"class":346},[318,1418,350],{"class":339},[318,1420,715],{"class":339},[318,1422,1423],{"class":359},"Logout",[318,1425,356],{"class":339},[318,1427,367],{"class":339},[318,1429,1430,1432,1434,1436,1439,1441],{"class":320,"line":457},[318,1431,1175],{"class":346},[318,1433,350],{"class":339},[318,1435,715],{"class":339},[318,1437,1438],{"class":359},"account.menu.logout.label",[318,1440,356],{"class":339},[318,1442,367],{"class":339},[318,1444,1445,1447,1449,1451,1454,1456],{"class":320,"line":464},[318,1446,1187],{"class":346},[318,1448,350],{"class":339},[318,1450,715],{"class":339},[318,1452,1453],{"class":359},"Sign out of your account.",[318,1455,356],{"class":339},[318,1457,367],{"class":339},[318,1459,1460,1462,1464,1466,1469,1471],{"class":320,"line":474},[318,1461,1196],{"class":346},[318,1463,350],{"class":339},[318,1465,715],{"class":339},[318,1467,1468],{"class":359},"account.menu.logout.description",[318,1470,356],{"class":339},[318,1472,367],{"class":339},[318,1474,1475,1477],{"class":320,"line":485},[318,1476,373],{"class":339},[318,1478,376],{"class":335},[906,1480,1482],{"id":1481},"contributing-from-a-module","Contributing from a module",[159,1484,1485],{},"Registration order between modules does not matter: items are merged once every module has finished setting up.",[159,1487,1488],{},[163,1489,1490],{},"Static items, known at build time",[309,1492,1494],{"className":311,"code":1493,"language":313,"meta":314,"style":314},"import { extendMenu } from '@frigear-nu\u002Fmenu\u002Futils'\n\nexport default defineNuxtModule({\n  meta: { name: '@frigear-nu\u002Fexample' },\n  setup(options, nuxt) {\n    extendMenu(nuxt, 'dashboard.more', [\n      { label: 'Billing', description: 'Manage your subscription', to: '\u002Fbilling' },\n    ])\n  },\n})\n",[168,1495,1496,1519,1523,1536,1558,1577,1600,1647,1652,1656],{"__ignoreMap":314},[318,1497,1498,1501,1503,1506,1509,1512,1514,1516],{"class":320,"line":321},[318,1499,1500],{"class":324},"import",[318,1502,419],{"class":339},[318,1504,1505],{"class":335}," extendMenu",[318,1507,1508],{"class":339}," }",[318,1510,1511],{"class":324}," from",[318,1513,715],{"class":339},[318,1515,900],{"class":359},[318,1517,1518],{"class":339},"'\n",[318,1520,1521],{"class":320,"line":343},[318,1522,461],{"emptyLinePlaceholder":460},[318,1524,1525,1527,1529,1532,1534],{"class":320,"line":370},[318,1526,325],{"class":324},[318,1528,328],{"class":324},[318,1530,1531],{"class":331}," defineNuxtModule",[318,1533,336],{"class":335},[318,1535,340],{"class":339},[318,1537,1538,1540,1542,1544,1547,1549,1551,1554,1556],{"class":320,"line":457},[318,1539,1272],{"class":346},[318,1541,350],{"class":339},[318,1543,419],{"class":339},[318,1545,1546],{"class":346}," name",[318,1548,350],{"class":339},[318,1550,715],{"class":339},[318,1552,1553],{"class":359},"@frigear-nu\u002Fexample",[318,1555,356],{"class":339},[318,1557,737],{"class":339},[318,1559,1560,1563,1565,1567,1569,1572,1575],{"class":320,"line":464},[318,1561,1562],{"class":346},"  setup",[318,1564,336],{"class":339},[318,1566,586],{"class":841},[318,1568,722],{"class":339},[318,1570,1571],{"class":841}," nuxt",[318,1573,1574],{"class":339},")",[318,1576,676],{"class":339},[318,1578,1579,1582,1584,1587,1589,1591,1593,1595,1597],{"class":320,"line":474},[318,1580,1581],{"class":331},"    extendMenu",[318,1583,336],{"class":346},[318,1585,1586],{"class":335},"nuxt",[318,1588,722],{"class":339},[318,1590,715],{"class":339},[318,1592,279],{"class":359},[318,1594,356],{"class":339},[318,1596,722],{"class":339},[318,1598,1599],{"class":346}," [\n",[318,1601,1602,1605,1608,1610,1612,1615,1617,1619,1622,1624,1626,1629,1631,1633,1636,1638,1640,1643,1645],{"class":320,"line":485},[318,1603,1604],{"class":339},"      {",[318,1606,1607],{"class":346}," label",[318,1609,350],{"class":339},[318,1611,715],{"class":339},[318,1613,1614],{"class":359},"Billing",[318,1616,356],{"class":339},[318,1618,722],{"class":339},[318,1620,1621],{"class":346}," description",[318,1623,350],{"class":339},[318,1625,715],{"class":339},[318,1627,1628],{"class":359},"Manage your subscription",[318,1630,356],{"class":339},[318,1632,722],{"class":339},[318,1634,1635],{"class":346}," to",[318,1637,350],{"class":339},[318,1639,715],{"class":339},[318,1641,1642],{"class":359},"\u002Fbilling",[318,1644,356],{"class":339},[318,1646,737],{"class":339},[318,1648,1649],{"class":320,"line":551},[318,1650,1651],{"class":346},"    ])\n",[318,1653,1654],{"class":320,"line":557},[318,1655,747],{"class":339},[318,1657,1658,1660],{"class":320,"line":567},[318,1659,373],{"class":339},[318,1661,376],{"class":335},[159,1663,1664],{},[163,1665,1666,1667,1574],{},"Dynamic items, needing runtime context (for example ",[168,1668,1669],{},"useRuntimeConfig",[309,1671,1673],{"className":311,"code":1672,"language":313,"meta":314,"style":314},"import { createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\nimport { registerMenuSource } from '@frigear-nu\u002Fmenu\u002Futils'\n\nexport default defineNuxtModule({\n  meta: { name: '@frigear-nu\u002Fexample' },\n  setup(options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n    registerMenuSource(nuxt, { file: resolver.resolve('.\u002Fruntime\u002Fmenus'), menu: 'dashboard' })\n  },\n})\n",[168,1674,1675,1699,1718,1722,1734,1754,1770,1798,1851,1855],{"__ignoreMap":314},[318,1676,1677,1679,1681,1684,1686,1688,1690,1692,1694,1697],{"class":320,"line":321},[318,1678,1500],{"class":324},[318,1680,419],{"class":339},[318,1682,1683],{"class":335}," createResolver",[318,1685,722],{"class":339},[318,1687,1531],{"class":335},[318,1689,1508],{"class":339},[318,1691,1511],{"class":324},[318,1693,715],{"class":339},[318,1695,1696],{"class":359},"@nuxt\u002Fkit",[318,1698,1518],{"class":339},[318,1700,1701,1703,1705,1708,1710,1712,1714,1716],{"class":320,"line":343},[318,1702,1500],{"class":324},[318,1704,419],{"class":339},[318,1706,1707],{"class":335}," registerMenuSource",[318,1709,1508],{"class":339},[318,1711,1511],{"class":324},[318,1713,715],{"class":339},[318,1715,900],{"class":359},[318,1717,1518],{"class":339},[318,1719,1720],{"class":320,"line":370},[318,1721,461],{"emptyLinePlaceholder":460},[318,1723,1724,1726,1728,1730,1732],{"class":320,"line":457},[318,1725,325],{"class":324},[318,1727,328],{"class":324},[318,1729,1531],{"class":331},[318,1731,336],{"class":335},[318,1733,340],{"class":339},[318,1735,1736,1738,1740,1742,1744,1746,1748,1750,1752],{"class":320,"line":464},[318,1737,1272],{"class":346},[318,1739,350],{"class":339},[318,1741,419],{"class":339},[318,1743,1546],{"class":346},[318,1745,350],{"class":339},[318,1747,715],{"class":339},[318,1749,1553],{"class":359},[318,1751,356],{"class":339},[318,1753,737],{"class":339},[318,1755,1756,1758,1760,1762,1764,1766,1768],{"class":320,"line":474},[318,1757,1562],{"class":346},[318,1759,336],{"class":339},[318,1761,586],{"class":841},[318,1763,722],{"class":339},[318,1765,1571],{"class":841},[318,1767,1574],{"class":339},[318,1769,676],{"class":339},[318,1771,1772,1775,1778,1780,1782,1784,1786,1788,1791,1793,1796],{"class":320,"line":485},[318,1773,1774],{"class":394},"    const",[318,1776,1777],{"class":335}," resolver",[318,1779,432],{"class":339},[318,1781,1683],{"class":331},[318,1783,336],{"class":346},[318,1785,1500],{"class":324},[318,1787,524],{"class":339},[318,1789,1790],{"class":335},"meta",[318,1792,524],{"class":339},[318,1794,1795],{"class":335},"url",[318,1797,376],{"class":346},[318,1799,1800,1803,1805,1807,1809,1811,1814,1816,1818,1820,1823,1825,1827,1830,1832,1834,1836,1839,1841,1843,1845,1847,1849],{"class":320,"line":551},[318,1801,1802],{"class":331},"    registerMenuSource",[318,1804,336],{"class":346},[318,1806,1586],{"class":335},[318,1808,722],{"class":339},[318,1810,419],{"class":339},[318,1812,1813],{"class":346}," file",[318,1815,350],{"class":339},[318,1817,1777],{"class":335},[318,1819,524],{"class":339},[318,1821,1822],{"class":331},"resolve",[318,1824,336],{"class":346},[318,1826,356],{"class":339},[318,1828,1829],{"class":359},".\u002Fruntime\u002Fmenus",[318,1831,356],{"class":339},[318,1833,1574],{"class":346},[318,1835,722],{"class":339},[318,1837,1838],{"class":346}," menu",[318,1840,350],{"class":339},[318,1842,715],{"class":339},[318,1844,174],{"class":359},[318,1846,356],{"class":339},[318,1848,1508],{"class":339},[318,1850,376],{"class":346},[318,1852,1853],{"class":320,"line":557},[318,1854,747],{"class":339},[318,1856,1857,1859],{"class":320,"line":567},[318,1858,373],{"class":339},[318,1860,376],{"class":335},[309,1862,1864],{"className":311,"code":1863,"language":313,"meta":314,"style":314},"\u002F\u002F runtime\u002Fmenus.ts\nimport { defineMenuSource, extendMenuItem } from '@frigear-nu\u002Fmenu\u002Futils'\n\nexport default defineMenuSource((items) => {\n  const config = useRuntimeConfig().public.example\n\n  \u002F\u002F Pushed into the `dashboard` menu's root group.\n  if (config?.enabled) items.push({ label: 'Example', to: '\u002Fexample' })\n\n  \u002F\u002F Pushed into a named group instead, created if missing.\n  extendMenuItem('dashboard.more', { label: 'Security', to: '\u002Fsecurity' })\n})\n",[168,1865,1866,1871,1895,1899,1919,1945,1949,1954,2011,2015,2020,2065],{"__ignoreMap":314},[318,1867,1868],{"class":320,"line":321},[318,1869,1870],{"class":953},"\u002F\u002F runtime\u002Fmenus.ts\n",[318,1872,1873,1875,1877,1880,1882,1885,1887,1889,1891,1893],{"class":320,"line":343},[318,1874,1500],{"class":324},[318,1876,419],{"class":339},[318,1878,1879],{"class":335}," defineMenuSource",[318,1881,722],{"class":339},[318,1883,1884],{"class":335}," extendMenuItem",[318,1886,1508],{"class":339},[318,1888,1511],{"class":324},[318,1890,715],{"class":339},[318,1892,900],{"class":359},[318,1894,1518],{"class":339},[318,1896,1897],{"class":320,"line":370},[318,1898,461],{"emptyLinePlaceholder":460},[318,1900,1901,1903,1905,1907,1909,1911,1913,1915,1917],{"class":320,"line":457},[318,1902,325],{"class":324},[318,1904,328],{"class":324},[318,1906,1879],{"class":331},[318,1908,336],{"class":335},[318,1910,336],{"class":339},[318,1912,507],{"class":841},[318,1914,1574],{"class":339},[318,1916,845],{"class":394},[318,1918,676],{"class":339},[318,1920,1921,1924,1927,1929,1932,1935,1937,1940,1942],{"class":320,"line":464},[318,1922,1923],{"class":394},"  const",[318,1925,1926],{"class":335}," config",[318,1928,432],{"class":339},[318,1930,1931],{"class":331}," useRuntimeConfig",[318,1933,1934],{"class":346},"()",[318,1936,524],{"class":339},[318,1938,1939],{"class":335},"public",[318,1941,524],{"class":339},[318,1943,1944],{"class":335},"example\n",[318,1946,1947],{"class":320,"line":474},[318,1948,461],{"emptyLinePlaceholder":460},[318,1950,1951],{"class":320,"line":485},[318,1952,1953],{"class":953},"  \u002F\u002F Pushed into the `dashboard` menu's root group.\n",[318,1955,1956,1959,1961,1963,1966,1969,1971,1973,1975,1978,1980,1983,1985,1987,1989,1992,1994,1996,1998,2000,2002,2005,2007,2009],{"class":320,"line":551},[318,1957,1958],{"class":324},"  if",[318,1960,166],{"class":346},[318,1962,637],{"class":335},[318,1964,1965],{"class":339},"?.",[318,1967,1968],{"class":335},"enabled",[318,1970,987],{"class":346},[318,1972,507],{"class":335},[318,1974,524],{"class":339},[318,1976,1977],{"class":331},"push",[318,1979,336],{"class":346},[318,1981,1982],{"class":339},"{",[318,1984,1607],{"class":346},[318,1986,350],{"class":339},[318,1988,715],{"class":339},[318,1990,1991],{"class":359},"Example",[318,1993,356],{"class":339},[318,1995,722],{"class":339},[318,1997,1635],{"class":346},[318,1999,350],{"class":339},[318,2001,715],{"class":339},[318,2003,2004],{"class":359},"\u002Fexample",[318,2006,356],{"class":339},[318,2008,1508],{"class":339},[318,2010,376],{"class":346},[318,2012,2013],{"class":320,"line":557},[318,2014,461],{"emptyLinePlaceholder":460},[318,2016,2017],{"class":320,"line":567},[318,2018,2019],{"class":953},"  \u002F\u002F Pushed into a named group instead, created if missing.\n",[318,2021,2022,2025,2027,2029,2031,2033,2035,2037,2039,2041,2043,2046,2048,2050,2052,2054,2056,2059,2061,2063],{"class":320,"line":577},[318,2023,2024],{"class":331},"  extendMenuItem",[318,2026,336],{"class":346},[318,2028,356],{"class":339},[318,2030,279],{"class":359},[318,2032,356],{"class":339},[318,2034,722],{"class":339},[318,2036,419],{"class":339},[318,2038,1607],{"class":346},[318,2040,350],{"class":339},[318,2042,715],{"class":339},[318,2044,2045],{"class":359},"Security",[318,2047,356],{"class":339},[318,2049,722],{"class":339},[318,2051,1635],{"class":346},[318,2053,350],{"class":339},[318,2055,715],{"class":339},[318,2057,2058],{"class":359},"\u002Fsecurity",[318,2060,356],{"class":339},[318,2062,1508],{"class":339},[318,2064,376],{"class":346},[318,2066,2067,2069],{"class":320,"line":1256},[318,2068,373],{"class":339},[318,2070,376],{"class":335},[159,2072,2073,2075,2076,2079,2080,2082,2083,2086,2087,2089,2090,2093],{},[168,2074,814],{}," pushes into shared app state, so it only works from code that runs as part of the Nuxt app (such as a\nsource file), not from a module's build-time ",[168,2077,2078],{},"setup()","; use ",[168,2081,298],{}," there. A module that should not depend on\nthe menu module registers its source with ",[168,2084,2085],{},"addOptionalMenuSource"," from ",[203,2088,101],{"href":102},", which skips\nthe registration when the menu module is not installed (",[168,2091,2092],{},"addMenuSource"," registers it unconditionally).",[906,2095,2097],{"id":2096},"utils","Utils",[159,2099,2100,2102],{},[168,2101,900],{}," is framework-agnostic.",[236,2104,2105,2117],{},[239,2106,2107],{},[242,2108,2109,2112,2115],{},[245,2110,2111],{},"Export",[245,2113,2114],{},"Where it runs",[245,2116,611],{},[252,2118,2119,2134,2155,2172,2185,2198],{},[242,2120,2121,2126,2131],{},[257,2122,2123],{},[168,2124,2125],{},"extendMenu(nuxt, path, items)",[257,2127,2128,2129],{},"Module ",[168,2130,2078],{},[257,2132,2133],{},"Register static items into one exact group.",[242,2135,2136,2141,2145],{},[257,2137,2138],{},[168,2139,2140],{},"registerMenuSource(nuxt, { file, menu })",[257,2142,2128,2143],{},[168,2144,2078],{},[257,2146,2147,2148,2150,2151,2154],{},"Register a ",[168,2149,302],{}," source; ",[168,2152,2153],{},"file"," must be a resolved path.",[242,2156,2157,2162,2165],{},[257,2158,2159],{},[168,2160,2161],{},"defineMenuSource(fn)",[257,2163,2164],{},"Source file",[257,2166,2167,2168,2171],{},"Typed identity helper. ",[168,2169,2170],{},"fn(items)"," receives the menu's root group array.",[242,2173,2174,2179,2182],{},[257,2175,2176],{},[168,2177,2178],{},"extendMenuItem(path, items)",[257,2180,2181],{},"Nuxt app (auto-imported)",[257,2183,2184],{},"Push into a group from a source or app code.",[242,2186,2187,2192,2195],{},[257,2188,2189],{},[168,2190,2191],{},"defineMenuItem(item)",[257,2193,2194],{},"Anywhere",[257,2196,2197],{},"Typed identity helper for an item.",[242,2199,2200,2208,2210],{},[257,2201,2202,171,2205],{},[168,2203,2204],{},"parseMenuPath(path)",[168,2206,2207],{},"deriveMenuItemId(item)",[257,2209,2194],{},[257,2211,2212],{},"Path parsing and id derivation.",[159,2214,2215,2216,171,2219,171,2222,190,2225,2228],{},"Types ",[168,2217,2218],{},"MenuItem",[168,2220,2221],{},"MenuSource",[168,2223,2224],{},"RegisterMenuSourceOptions",[168,2226,2227],{},"ParsedMenuPath"," are exported from the same path.",[231,2230,2232],{"id":2231},"hooks","Hooks",[236,2234,2235,2251],{},[239,2236,2237],{},[242,2238,2239,2242,2245,2248],{},[245,2240,2241],{},"Hook",[245,2243,2244],{},"Where",[245,2246,2247],{},"When",[245,2249,2250],{},"Payload",[252,2252,2253,2273,2291],{},[242,2254,2255,2260,2263,2268],{},[257,2256,2257],{},[168,2258,2259],{},"menus:extend",[257,2261,2262],{},"Nuxt (build)",[257,2264,2265,2267],{},[168,2266,298],{}," registers items",[257,2269,2270],{},[168,2271,2272],{},"(menu: string, items: MenuItem[])",[242,2274,2275,2280,2282,2285],{},[257,2276,2277],{},[168,2278,2279],{},"menus:resolved",[257,2281,2262],{},[257,2283,2284],{},"Once, after every module has set up",[257,2286,2287,2290],{},[168,2288,2289],{},"(menus: Record\u003Cstring, Record\u003Cstring, MenuItem[]>>)",": menu to group to items; static items only, runtime sources and Content items resolve at render time",[242,2292,2293,2298,2301,2306],{},[257,2294,2295],{},[168,2296,2297],{},"menus:visible",[257,2299,2300],{},"Nuxt app",[257,2302,2303,2305],{},[168,2304,185],{}," resolved a menu's items",[257,2307,2308],{},[168,2309,2310],{},"(menu: string)",[2312,2313,2314],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":314,"searchDepth":343,"depth":343,"links":2316},[2317,2318,2319,2320,2321,2328],{"id":233,"depth":343,"text":234},{"id":306,"depth":343,"text":307},{"id":586,"depth":343,"text":587},{"id":773,"depth":343,"text":774},{"id":903,"depth":343,"text":904,"children":2322},[2323,2324,2325,2326,2327],{"id":908,"depth":370,"text":909},{"id":507,"depth":370,"text":1129},{"id":1359,"depth":370,"text":1360},{"id":1481,"depth":370,"text":1482},{"id":2096,"depth":370,"text":2097},{"id":2231,"depth":343,"text":2232},"Named, shareable navigation menus - modules contribute items, Nuxt Content can too, consumers read and render them.","md",null,{},{"title":97,"description":2329},"UJwirgGyVnK5xbX18zqweyMDA8O0T-A3XkWeKfQDGkQ",[2336,2338],{"title":93,"path":94,"stem":95,"description":2337,"children":-1},"Modules contribute MCP tools that are only listed and callable within the scopes the caller holds, without leaking other people's personal data.",{"title":101,"path":102,"stem":103,"description":2339,"children":-1},"Helpers for building Frigear Nuxt modules - pages, URLs, translations, menu sources, virtual registries and extendable database tables.",1792824489813]