[{"data":1,"prerenderedAt":2387},["ShallowReactive",2],{"navigation_docs":3,"-modules-admin":153,"-modules-admin-surround":2382},[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":69,"body":155,"description":2376,"extension":2377,"links":2378,"meta":2379,"navigation":775,"path":70,"seo":2380,"stem":71,"__hash__":2381},"docs\u002F4.modules\u002F02.admin.md",{"type":156,"value":157,"toc":2361},"minimark",[158,172,239,244,394,398,405,529,532,603,607,610,614,619,634,696,708,712,735,831,1171,1180,1451,1607,1617,1621,1628,1712,1719,1723,1729,1776,1780,1818,1824,1881,1885,1920,1931,2144,2155,2159,2165,2253,2257,2263,2357],[159,160,161,162,166,167,171],"p",{},"A generic admin area. It owns ",[163,164,165],"strong",{},"no domain features",": it provides the shell (an ",[168,169,170],"code",{},"admin"," layout with a sidebar), a\nguarded dashboard page and the registries other modules plug into. Domain admin UIs (forms, events, OAuth\napplications, users, ...) stay in their own modules and register here.",[173,174,175,233],"note",{},[159,176,177,180,181,187,188,193,194,199,200,203,204,209,210,213,214,217,218,180,221,226,227,232],{},[163,178,179],{},"Requires"," ",[182,183,184],"a",{"href":102},[168,185,186],{},"@frigear-nu\u002Fmodule-kit",", ",[182,189,190],{"href":130},[168,191,192],{},"@frigear-nu\u002Fui"," (the page components\nevery admin page is built from), ",[182,195,196],{"href":98},[168,197,198],{},"@frigear-nu\u002Fmenu"," (the sidebar is the ",[168,201,202],{},"admin.nav"," menus),\n",[182,205,206],{"href":138},[168,207,208],{},"@frigear-nu\u002Fwidget"," (the dashboard is the ",[168,211,212],{},"admin.dashboard"," area) and ",[168,215,216],{},"nuxt-auth-utils"," (the\nsigned-in user is shown in the account menu).\n",[163,219,220],{},"Optional",[182,222,223],{"href":78},[168,224,225],{},"@frigear-nu\u002Fauthorization",", used for the role guard, and\n",[182,228,229],{"href":66},[168,230,231],{},"@frigear-nu\u002Faccount",", which provides the account menu in the sidebar footer.",[159,234,235,238],{},[168,236,237],{},"@nuxt\u002Fui"," is not declared as a module dependency, but the layout and components are built on Nuxt UI, so the host\ninstalls it.",[240,241,243],"h2",{"id":242},"quick-setup","Quick setup",[245,246,251],"pre",{"className":247,"code":248,"language":249,"meta":250,"style":250},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['@nuxt\u002Fui', '@frigear-nu\u002Fauthorization', '@frigear-nu\u002Fadmin'],\n  admin: {\n    settings: {\n      roles: ['admin', 'manager'],\n    },\n  },\n})\n","ts","",[168,252,253,277,323,334,344,373,379,385],{"__ignoreMap":250},[254,255,258,262,265,269,273],"span",{"class":256,"line":257},"line",1,[254,259,261],{"class":260},"s7zQu","export",[254,263,264],{"class":260}," default",[254,266,268],{"class":267},"s2Zo4"," defineNuxtConfig",[254,270,272],{"class":271},"sTEyZ","(",[254,274,276],{"class":275},"sMK4o","{\n",[254,278,280,284,287,290,293,296,298,301,304,306,308,310,312,315,317,320],{"class":256,"line":279},2,[254,281,283],{"class":282},"swJcz","  modules",[254,285,286],{"class":275},":",[254,288,289],{"class":271}," [",[254,291,292],{"class":275},"'",[254,294,237],{"class":295},"sfazB",[254,297,292],{"class":275},[254,299,300],{"class":275},",",[254,302,303],{"class":275}," '",[254,305,225],{"class":295},[254,307,292],{"class":275},[254,309,300],{"class":275},[254,311,303],{"class":275},[254,313,314],{"class":295},"@frigear-nu\u002Fadmin",[254,316,292],{"class":275},[254,318,319],{"class":271},"]",[254,321,322],{"class":275},",\n",[254,324,326,329,331],{"class":256,"line":325},3,[254,327,328],{"class":282},"  admin",[254,330,286],{"class":275},[254,332,333],{"class":275}," {\n",[254,335,337,340,342],{"class":256,"line":336},4,[254,338,339],{"class":282},"    settings",[254,341,286],{"class":275},[254,343,333],{"class":275},[254,345,347,350,352,354,356,358,360,362,364,367,369,371],{"class":256,"line":346},5,[254,348,349],{"class":282},"      roles",[254,351,286],{"class":275},[254,353,289],{"class":271},[254,355,292],{"class":275},[254,357,170],{"class":295},[254,359,292],{"class":275},[254,361,300],{"class":275},[254,363,303],{"class":275},[254,365,366],{"class":295},"manager",[254,368,292],{"class":275},[254,370,319],{"class":271},[254,372,322],{"class":275},[254,374,376],{"class":256,"line":375},6,[254,377,378],{"class":275},"    },\n",[254,380,382],{"class":256,"line":381},7,[254,383,384],{"class":275},"  },\n",[254,386,388,391],{"class":256,"line":387},8,[254,389,390],{"class":275},"}",[254,392,393],{"class":271},")\n",[240,395,397],{"id":396},"options","Options",[159,399,400,401,404],{},"All options live under ",[168,402,403],{},"admin.settings",".",[406,407,408,427],"table",{},[409,410,411],"thead",{},[412,413,414,418,421,424],"tr",{},[415,416,417],"th",{},"Option",[415,419,420],{},"Type",[415,422,423],{},"Default",[415,425,426],{},"Purpose",[428,429,430,451,478,504],"tbody",{},[412,431,432,438,443,448],{},[433,434,435],"td",{},[168,436,437],{},"base",[433,439,440],{},[168,441,442],{},"string",[433,444,445],{},[168,446,447],{},"'\u002Fadmin'",[433,449,450],{},"Path prefix of the area. A trailing slash is trimmed.",[412,452,453,458,463,468],{},[433,454,455],{},[168,456,457],{},"dashboard",[433,459,460],{},[168,461,462],{},"boolean | string",[433,464,465],{},[168,466,467],{},"true",[433,469,470,471,473,474,477],{},"The dashboard page at ",[168,472,437],{},". ",[168,475,476],{},"false"," turns it off (other modules' pages still get the layout); a string is a custom path.",[412,479,480,485,490,495],{},[433,481,482],{},[168,483,484],{},"roles",[433,486,487],{},[168,488,489],{},"string[] | false",[433,491,492],{},[168,493,494],{},"['admin']",[433,496,497,498,473,501,503],{},"Roles allowed into the area, applied as a route rule on ",[168,499,500],{},"\u003Cbase>\u002F**",[168,502,476],{}," sets no rule: guard the area yourself.",[412,505,506,511,516,520],{},[433,507,508],{},[168,509,510],{},"layout",[433,512,513],{},[168,514,515],{},"boolean",[433,517,518],{},[168,519,467],{},[433,521,522,523,525,526,528],{},"Gives every page under ",[168,524,437],{}," the ",[168,527,170],{}," layout unless it picked its own.",[159,530,531],{},"Behaviour of the generated route rules:",[533,534,535,552,570,584],"ul",{},[536,537,538,541,542,545,546,548,549,551],"li",{},[163,539,540],{},"Guard",": ",[168,543,544],{},"{ roles }"," on ",[168,547,500],{},", only when ",[168,550,225],{}," is installed. Without it nothing guards the\npages on the client and a warning is logged. An explicit rule of yours wins. API routes are guarded by the modules\nthat own them.",[536,553,554,541,557,545,560,563,564,566,567,569],{},[163,555,556],{},"Layout",[168,558,559],{},"{ appLayout: 'admin' }",[168,561,562],{},"\u003Cbase>"," and ",[168,565,500],{}," (the dashboard at ",[168,568,437],{}," itself is not matched by\nthe wildcard, so it gets its own rule). A rule of yours wins.",[536,571,572,575,576,579,580,583],{},[163,573,574],{},"Locales",": with ",[168,577,578],{},"@nuxtjs\u002Fi18n"," the rules are repeated for each ",[168,581,582],{},"\u002F\u003Clocale>"," prefix.",[536,585,586,589,590,592,593,595,596,598,599,602],{},[163,587,588],{},"Account menu",": unless ",[168,591,457],{}," or ",[168,594,484],{}," is ",[168,597,476],{},", an \"Admin\" entry is added to the ",[168,600,601],{},"account.dropdown"," menu,\nshown only to users holding one of the roles.",[240,604,606],{"id":605},"server","Server",[159,608,609],{},"None. The module registers no server routes.",[240,611,613],{"id":612},"app","App",[615,616,618],"h3",{"id":617},"navigation-groups","Navigation groups",[159,620,621,622,625,626,629,630,633],{},"The sidebar is three groups, each read from its own ",[182,623,624],{"href":98},"menu"," path. ",[168,627,628],{},"ADMIN_NAV_GROUPS"," (from\n",[168,631,632],{},"@frigear-nu\u002Fadmin\u002Futils",") lists them in display order:",[406,635,636,649],{},[409,637,638],{},[412,639,640,643,646],{},[415,641,642],{},"Group",[415,644,645],{},"Menu path",[415,647,648],{},"Put here",[428,650,651,666,681],{},[412,652,653,658,663],{},[433,654,655],{},[168,656,657],{},"overview",[433,659,660],{},[168,661,662],{},"admin.nav.overview",[433,664,665],{},"The dashboard.",[412,667,668,673,678],{},[433,669,670],{},[168,671,672],{},"manage",[433,674,675,677],{},[168,676,202],{}," (root)",[433,679,680],{},"What staff manage every day: users, events, forms, groups, documents. This is the default group.",[412,682,683,688,693],{},[433,684,685],{},[168,686,687],{},"settings",[433,689,690],{},[168,691,692],{},"admin.nav.settings",[433,694,695],{},"Configuration: OAuth applications, integrations.",[159,697,698,699,702,703,707],{},"The layout reads all three in one ",[168,700,701],{},"useMenu('admin.nav.*')"," call and renders them as labelled sections (Overview has no\nlabel; Manage and Settings do). A new feature goes into an existing group; a new group needs a\nreason (see ",[182,704,706],{"href":705},"\u002Fgetting-started\u002Fux-patterns#admin-back-office","UX patterns",").",[615,709,711],{"id":710},"registries","Registries",[159,713,714,715,718,719,723,724,727,728,731,732,734],{},"Modules never import the admin module at runtime. The ",[163,716,717],{},"documented way to add a sidebar entry"," is a\n",[182,720,722],{"href":721},"\u002Fmodules\u002Fmenu#contributing-from-a-module","runtime menu source",": a module registers a ",[168,725,726],{},"runtime\u002Fmenus.ts"," file, and that\nfile pushes items into the group's menu path with ",[168,729,730],{},"extendMenuItem",". It works whether or not ",[168,733,314],{}," is\ninstalled, because the sidebar is just a menu.",[245,736,738],{"className":247,"code":737,"language":249,"meta":250,"style":250},"\u002F\u002F module.ts\nimport { addOptionalMenuSource } from '@frigear-nu\u002Fmodule-kit\u002Futils'\n\naddOptionalMenuSource(nuxt, { file: resolver.resolve('.\u002Fruntime\u002Fmenus'), menu: 'admin' })\n",[168,739,740,746,771,777],{"__ignoreMap":250},[254,741,742],{"class":256,"line":257},[254,743,745],{"class":744},"sHwdD","\u002F\u002F module.ts\n",[254,747,748,751,754,757,760,763,765,768],{"class":256,"line":279},[254,749,750],{"class":260},"import",[254,752,753],{"class":275}," {",[254,755,756],{"class":271}," addOptionalMenuSource",[254,758,759],{"class":275}," }",[254,761,762],{"class":260}," from",[254,764,303],{"class":275},[254,766,767],{"class":295},"@frigear-nu\u002Fmodule-kit\u002Futils",[254,769,770],{"class":275},"'\n",[254,772,773],{"class":256,"line":325},[254,774,776],{"emptyLinePlaceholder":775},true,"\n",[254,778,779,782,785,787,789,792,794,797,799,802,804,806,809,811,814,816,819,821,823,825,827,829],{"class":256,"line":336},[254,780,781],{"class":267},"addOptionalMenuSource",[254,783,784],{"class":271},"(nuxt",[254,786,300],{"class":275},[254,788,753],{"class":275},[254,790,791],{"class":282}," file",[254,793,286],{"class":275},[254,795,796],{"class":271}," resolver",[254,798,404],{"class":275},[254,800,801],{"class":267},"resolve",[254,803,272],{"class":271},[254,805,292],{"class":275},[254,807,808],{"class":295},".\u002Fruntime\u002Fmenus",[254,810,292],{"class":275},[254,812,813],{"class":271},")",[254,815,300],{"class":275},[254,817,818],{"class":282}," menu",[254,820,286],{"class":275},[254,822,303],{"class":275},[254,824,170],{"class":295},[254,826,292],{"class":275},[254,828,759],{"class":275},[254,830,393],{"class":271},[245,832,834],{"className":247,"code":833,"language":249,"meta":250,"style":250},"\u002F\u002F runtime\u002Fmenus.ts\nimport { defineMenuItem, defineMenuSource, extendMenuItem } from '@frigear-nu\u002Fmenu\u002Futils'\n\nexport default defineMenuSource(() => {\n  const config = useRuntimeConfig().public.forms\n\n  \u002F\u002F Manage group (the root of `admin.nav`)\n  extendMenuItem('admin.nav', defineMenuItem({\n    id: 'forms-admin',\n    label: 'Forms',\n    labelKey: 'forms.menu.admin.label',\n    icon: 'i-lucide-clipboard-list',\n    to: config.pages.admin,\n    order: 30,\n  }))\n\n  \u002F\u002F Settings group\n  extendMenuItem('admin.nav.settings', defineMenuItem({\n    id: 'forms-settings',\n    label: 'Form settings',\n    icon: 'i-lucide-settings-2',\n    to: '\u002Fadmin\u002Fforms\u002Fsettings',\n  }))\n})\n",[168,835,836,841,871,875,894,920,924,929,950,967,983,1000,1017,1038,1052,1061,1066,1072,1093,1109,1125,1141,1157,1164],{"__ignoreMap":250},[254,837,838],{"class":256,"line":257},[254,839,840],{"class":744},"\u002F\u002F runtime\u002Fmenus.ts\n",[254,842,843,845,847,850,852,855,857,860,862,864,866,869],{"class":256,"line":279},[254,844,750],{"class":260},[254,846,753],{"class":275},[254,848,849],{"class":271}," defineMenuItem",[254,851,300],{"class":275},[254,853,854],{"class":271}," defineMenuSource",[254,856,300],{"class":275},[254,858,859],{"class":271}," extendMenuItem",[254,861,759],{"class":275},[254,863,762],{"class":260},[254,865,303],{"class":275},[254,867,868],{"class":295},"@frigear-nu\u002Fmenu\u002Futils",[254,870,770],{"class":275},[254,872,873],{"class":256,"line":325},[254,874,776],{"emptyLinePlaceholder":775},[254,876,877,879,881,883,885,888,892],{"class":256,"line":336},[254,878,261],{"class":260},[254,880,264],{"class":260},[254,882,854],{"class":267},[254,884,272],{"class":271},[254,886,887],{"class":275},"()",[254,889,891],{"class":890},"spNyl"," =>",[254,893,333],{"class":275},[254,895,896,899,902,905,908,910,912,915,917],{"class":256,"line":346},[254,897,898],{"class":890},"  const",[254,900,901],{"class":271}," config",[254,903,904],{"class":275}," =",[254,906,907],{"class":267}," useRuntimeConfig",[254,909,887],{"class":282},[254,911,404],{"class":275},[254,913,914],{"class":271},"public",[254,916,404],{"class":275},[254,918,919],{"class":271},"forms\n",[254,921,922],{"class":256,"line":375},[254,923,776],{"emptyLinePlaceholder":775},[254,925,926],{"class":256,"line":381},[254,927,928],{"class":744},"  \u002F\u002F Manage group (the root of `admin.nav`)\n",[254,930,931,934,936,938,940,942,944,946,948],{"class":256,"line":387},[254,932,933],{"class":267},"  extendMenuItem",[254,935,272],{"class":282},[254,937,292],{"class":275},[254,939,202],{"class":295},[254,941,292],{"class":275},[254,943,300],{"class":275},[254,945,849],{"class":267},[254,947,272],{"class":282},[254,949,276],{"class":275},[254,951,953,956,958,960,963,965],{"class":256,"line":952},9,[254,954,955],{"class":282},"    id",[254,957,286],{"class":275},[254,959,303],{"class":275},[254,961,962],{"class":295},"forms-admin",[254,964,292],{"class":275},[254,966,322],{"class":275},[254,968,970,973,975,977,979,981],{"class":256,"line":969},10,[254,971,972],{"class":282},"    label",[254,974,286],{"class":275},[254,976,303],{"class":275},[254,978,89],{"class":295},[254,980,292],{"class":275},[254,982,322],{"class":275},[254,984,986,989,991,993,996,998],{"class":256,"line":985},11,[254,987,988],{"class":282},"    labelKey",[254,990,286],{"class":275},[254,992,303],{"class":275},[254,994,995],{"class":295},"forms.menu.admin.label",[254,997,292],{"class":275},[254,999,322],{"class":275},[254,1001,1003,1006,1008,1010,1013,1015],{"class":256,"line":1002},12,[254,1004,1005],{"class":282},"    icon",[254,1007,286],{"class":275},[254,1009,303],{"class":275},[254,1011,1012],{"class":295},"i-lucide-clipboard-list",[254,1014,292],{"class":275},[254,1016,322],{"class":275},[254,1018,1020,1023,1025,1027,1029,1032,1034,1036],{"class":256,"line":1019},13,[254,1021,1022],{"class":282},"    to",[254,1024,286],{"class":275},[254,1026,901],{"class":271},[254,1028,404],{"class":275},[254,1030,1031],{"class":271},"pages",[254,1033,404],{"class":275},[254,1035,170],{"class":271},[254,1037,322],{"class":275},[254,1039,1041,1044,1046,1050],{"class":256,"line":1040},14,[254,1042,1043],{"class":282},"    order",[254,1045,286],{"class":275},[254,1047,1049],{"class":1048},"sbssI"," 30",[254,1051,322],{"class":275},[254,1053,1055,1058],{"class":256,"line":1054},15,[254,1056,1057],{"class":275},"  }",[254,1059,1060],{"class":282},"))\n",[254,1062,1064],{"class":256,"line":1063},16,[254,1065,776],{"emptyLinePlaceholder":775},[254,1067,1069],{"class":256,"line":1068},17,[254,1070,1071],{"class":744},"  \u002F\u002F Settings group\n",[254,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091],{"class":256,"line":1074},18,[254,1076,933],{"class":267},[254,1078,272],{"class":282},[254,1080,292],{"class":275},[254,1082,692],{"class":295},[254,1084,292],{"class":275},[254,1086,300],{"class":275},[254,1088,849],{"class":267},[254,1090,272],{"class":282},[254,1092,276],{"class":275},[254,1094,1096,1098,1100,1102,1105,1107],{"class":256,"line":1095},19,[254,1097,955],{"class":282},[254,1099,286],{"class":275},[254,1101,303],{"class":275},[254,1103,1104],{"class":295},"forms-settings",[254,1106,292],{"class":275},[254,1108,322],{"class":275},[254,1110,1112,1114,1116,1118,1121,1123],{"class":256,"line":1111},20,[254,1113,972],{"class":282},[254,1115,286],{"class":275},[254,1117,303],{"class":275},[254,1119,1120],{"class":295},"Form settings",[254,1122,292],{"class":275},[254,1124,322],{"class":275},[254,1126,1128,1130,1132,1134,1137,1139],{"class":256,"line":1127},21,[254,1129,1005],{"class":282},[254,1131,286],{"class":275},[254,1133,303],{"class":275},[254,1135,1136],{"class":295},"i-lucide-settings-2",[254,1138,292],{"class":275},[254,1140,322],{"class":275},[254,1142,1144,1146,1148,1150,1153,1155],{"class":256,"line":1143},22,[254,1145,1022],{"class":282},[254,1147,286],{"class":275},[254,1149,303],{"class":275},[254,1151,1152],{"class":295},"\u002Fadmin\u002Fforms\u002Fsettings",[254,1154,292],{"class":275},[254,1156,322],{"class":275},[254,1158,1160,1162],{"class":256,"line":1159},23,[254,1161,1057],{"class":275},[254,1163,1060],{"class":282},[254,1165,1167,1169],{"class":256,"line":1166},24,[254,1168,390],{"class":275},[254,1170,393],{"class":271},[159,1172,1173,1174,1177,1178,286],{},"For static entries known at build time there is sugar over ",[168,1175,1176],{},"extendMenu",", plus the dashboard helpers. They come from\n",[168,1179,632],{},[245,1181,1183],{"className":247,"code":1182,"language":249,"meta":250,"style":250},"import { extendAdminNav, extendAdminDashboard, adminRoute } from '@frigear-nu\u002Fadmin\u002Futils'\n\nextendAdminNav(nuxt, { label: 'Forms', to: adminRoute(nuxt, 'forms'), icon: 'i-lucide-clipboard-list', order: 20 })\nextendAdminNav(nuxt, { label: 'OAuth applications', to: adminRoute(nuxt, 'oauth'), icon: 'i-lucide-key-round' }, 'settings')\nextendAdminDashboard(nuxt, { component: resolver.resolve('.\u002Fruntime\u002Fapp\u002Fwidgets\u002FSubmissions.vue'), order: 10 })\nextendAdminDashboard(nuxt, { component: resolver.resolve('.\u002Fruntime\u002Fapp\u002Fwidgets\u002FSubmissionCount.vue'), order: 10 }, 'top')\n",[168,1184,1185,1214,1218,1289,1355,1401],{"__ignoreMap":250},[254,1186,1187,1189,1191,1194,1196,1199,1201,1204,1206,1208,1210,1212],{"class":256,"line":257},[254,1188,750],{"class":260},[254,1190,753],{"class":275},[254,1192,1193],{"class":271}," extendAdminNav",[254,1195,300],{"class":275},[254,1197,1198],{"class":271}," extendAdminDashboard",[254,1200,300],{"class":275},[254,1202,1203],{"class":271}," adminRoute",[254,1205,759],{"class":275},[254,1207,762],{"class":260},[254,1209,303],{"class":275},[254,1211,632],{"class":295},[254,1213,770],{"class":275},[254,1215,1216],{"class":256,"line":279},[254,1217,776],{"emptyLinePlaceholder":775},[254,1219,1220,1223,1225,1227,1229,1232,1234,1236,1238,1240,1242,1245,1247,1249,1251,1253,1255,1258,1260,1262,1264,1267,1269,1271,1273,1275,1277,1280,1282,1285,1287],{"class":256,"line":325},[254,1221,1222],{"class":267},"extendAdminNav",[254,1224,784],{"class":271},[254,1226,300],{"class":275},[254,1228,753],{"class":275},[254,1230,1231],{"class":282}," label",[254,1233,286],{"class":275},[254,1235,303],{"class":275},[254,1237,89],{"class":295},[254,1239,292],{"class":275},[254,1241,300],{"class":275},[254,1243,1244],{"class":282}," to",[254,1246,286],{"class":275},[254,1248,1203],{"class":267},[254,1250,784],{"class":271},[254,1252,300],{"class":275},[254,1254,303],{"class":275},[254,1256,1257],{"class":295},"forms",[254,1259,292],{"class":275},[254,1261,813],{"class":271},[254,1263,300],{"class":275},[254,1265,1266],{"class":282}," icon",[254,1268,286],{"class":275},[254,1270,303],{"class":275},[254,1272,1012],{"class":295},[254,1274,292],{"class":275},[254,1276,300],{"class":275},[254,1278,1279],{"class":282}," order",[254,1281,286],{"class":275},[254,1283,1284],{"class":1048}," 20",[254,1286,759],{"class":275},[254,1288,393],{"class":271},[254,1290,1291,1293,1295,1297,1299,1301,1303,1305,1308,1310,1312,1314,1316,1318,1320,1322,1324,1327,1329,1331,1333,1335,1337,1339,1342,1344,1347,1349,1351,1353],{"class":256,"line":336},[254,1292,1222],{"class":267},[254,1294,784],{"class":271},[254,1296,300],{"class":275},[254,1298,753],{"class":275},[254,1300,1231],{"class":282},[254,1302,286],{"class":275},[254,1304,303],{"class":275},[254,1306,1307],{"class":295},"OAuth applications",[254,1309,292],{"class":275},[254,1311,300],{"class":275},[254,1313,1244],{"class":282},[254,1315,286],{"class":275},[254,1317,1203],{"class":267},[254,1319,784],{"class":271},[254,1321,300],{"class":275},[254,1323,303],{"class":275},[254,1325,1326],{"class":295},"oauth",[254,1328,292],{"class":275},[254,1330,813],{"class":271},[254,1332,300],{"class":275},[254,1334,1266],{"class":282},[254,1336,286],{"class":275},[254,1338,303],{"class":275},[254,1340,1341],{"class":295},"i-lucide-key-round",[254,1343,292],{"class":275},[254,1345,1346],{"class":275}," },",[254,1348,303],{"class":275},[254,1350,687],{"class":295},[254,1352,292],{"class":275},[254,1354,393],{"class":271},[254,1356,1357,1360,1362,1364,1366,1369,1371,1373,1375,1377,1379,1381,1384,1386,1388,1390,1392,1394,1397,1399],{"class":256,"line":346},[254,1358,1359],{"class":267},"extendAdminDashboard",[254,1361,784],{"class":271},[254,1363,300],{"class":275},[254,1365,753],{"class":275},[254,1367,1368],{"class":282}," component",[254,1370,286],{"class":275},[254,1372,796],{"class":271},[254,1374,404],{"class":275},[254,1376,801],{"class":267},[254,1378,272],{"class":271},[254,1380,292],{"class":275},[254,1382,1383],{"class":295},".\u002Fruntime\u002Fapp\u002Fwidgets\u002FSubmissions.vue",[254,1385,292],{"class":275},[254,1387,813],{"class":271},[254,1389,300],{"class":275},[254,1391,1279],{"class":282},[254,1393,286],{"class":275},[254,1395,1396],{"class":1048}," 10",[254,1398,759],{"class":275},[254,1400,393],{"class":271},[254,1402,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1428,1430,1432,1434,1436,1438,1440,1442,1444,1447,1449],{"class":256,"line":375},[254,1404,1359],{"class":267},[254,1406,784],{"class":271},[254,1408,300],{"class":275},[254,1410,753],{"class":275},[254,1412,1368],{"class":282},[254,1414,286],{"class":275},[254,1416,796],{"class":271},[254,1418,404],{"class":275},[254,1420,801],{"class":267},[254,1422,272],{"class":271},[254,1424,292],{"class":275},[254,1426,1427],{"class":295},".\u002Fruntime\u002Fapp\u002Fwidgets\u002FSubmissionCount.vue",[254,1429,292],{"class":275},[254,1431,813],{"class":271},[254,1433,300],{"class":275},[254,1435,1279],{"class":282},[254,1437,286],{"class":275},[254,1439,1396],{"class":1048},[254,1441,1346],{"class":275},[254,1443,303],{"class":275},[254,1445,1446],{"class":295},"top",[254,1448,292],{"class":275},[254,1450,393],{"class":271},[406,1452,1453,1465],{},[409,1454,1455],{},[412,1456,1457,1460,1463],{},[415,1458,1459],{},"Export",[415,1461,1462],{},"Signature",[415,1464,426],{},[428,1466,1467,1491,1511,1535,1547,1562,1577,1592],{},[412,1468,1469,1473,1478],{},[433,1470,1471],{},[168,1472,1222],{},[433,1474,1475],{},[168,1476,1477],{},"(nuxt: Nuxt, items: MenuItem | MenuItem[], group?: 'overview' | 'manage' | 'settings') => void",[433,1479,1480,1481,473,1484,1487,1488,404],{},"Adds sidebar entries at build time: ",[168,1482,1483],{},"extendMenu(nuxt, '\u003Cgroup path>', ...)",[168,1485,1486],{},"group"," defaults to ",[168,1489,1490],{},"'manage'",[412,1492,1493,1497,1502],{},[433,1494,1495],{},[168,1496,1359],{},[433,1498,1499],{},[168,1500,1501],{},"(nuxt: Nuxt, widgets: WidgetDefinition | WidgetDefinition[], position?: 'top' | 'main' | 'side') => void",[433,1503,1504,1505,1487,1508,404],{},"Adds dashboard widgets to one of the three dashboard areas (below); ",[168,1506,1507],{},"position",[168,1509,1510],{},"'main'",[412,1512,1513,1518,1523],{},[433,1514,1515],{},[168,1516,1517],{},"adminRoute",[433,1519,1520],{},[168,1521,1522],{},"(nuxt: Nuxt, ...segments: string[]) => string",[433,1524,1525,1526,595,1529,1532,1533,404],{},"Path below the configured base: ",[168,1527,1528],{},"adminRoute(nuxt, 'events', ':id')",[168,1530,1531],{},"\u002Fadmin\u002Fevents\u002F:id",". Use it so defaults follow the host's ",[168,1534,437],{},[412,1536,1537,1541,1544],{},[433,1538,1539],{},[168,1540,628],{},[433,1542,1543],{},"readonly list",[433,1545,1546],{},"The groups in display order, with the menu path each reads (table above).",[412,1548,1549,1554,1559],{},[433,1550,1551],{},[168,1552,1553],{},"ADMIN_NAV_MENU",[433,1555,1556],{},[168,1557,1558],{},"'admin.nav'",[433,1560,1561],{},"Menu name of the sidebar (the Manage group).",[412,1563,1564,1569,1574],{},[433,1565,1566],{},[168,1567,1568],{},"ADMIN_DASHBOARD_AREA",[433,1570,1571],{},[168,1572,1573],{},"'admin.dashboard'",[433,1575,1576],{},"Widget area of the main dashboard column.",[412,1578,1579,1584,1589],{},[433,1580,1581],{},[168,1582,1583],{},"ADMIN_DASHBOARD_TOP_AREA",[433,1585,1586],{},[168,1587,1588],{},"'admin.dashboard.top'",[433,1590,1591],{},"Widget area of the stat row.",[412,1593,1594,1599,1604],{},[433,1595,1596],{},[168,1597,1598],{},"ADMIN_DASHBOARD_SIDE_AREA",[433,1600,1601],{},[168,1602,1603],{},"'admin.dashboard.side'",[433,1605,1606],{},"Widget area of the narrow side column.",[159,1608,1609,1610,1612,1613,1616],{},"A module can also call ",[168,1611,1176],{}," \u002F ",[168,1614,1615],{},"extendWidgets"," directly, without depending on this package.",[615,1618,1620],{"id":1619},"dashboard-areas","Dashboard areas",[159,1622,1623,1624,1627],{},"The dashboard is three ",[182,1625,1626],{"href":138},"widget"," areas, so modules fill it without the admin module knowing them:",[406,1629,1630,1645],{},[409,1631,1632],{},[412,1633,1634,1637,1641,1643],{},[415,1635,1636],{},"Area",[415,1638,1639],{},[168,1640,1507],{},[415,1642,556],{},[415,1644,648],{},[428,1646,1647,1672,1691],{},[412,1648,1649,1654,1659,1665],{},[433,1650,1651],{},[168,1652,1653],{},"admin.dashboard.top",[433,1655,1656],{},[168,1657,1658],{},"'top'",[433,1660,1661,1662,1664],{},"Row of up to four cards (",[168,1663,254],{}," works)",[433,1666,1667,1668,1671],{},"One ",[168,1669,1670],{},"StatCard"," per widget: a number with a label and icon.",[412,1673,1674,1678,1682,1685],{},[433,1675,1676],{},[168,1677,212],{},[433,1679,1680],{},[168,1681,1510],{},[433,1683,1684],{},"Wide column below the stats (full width when the side column is empty)",[433,1686,1687,1688,404],{},"Lists and tables, e.g. ",[168,1689,1690],{},"ListCard",[412,1692,1693,1698,1703,1706],{},[433,1694,1695],{},[168,1696,1697],{},"admin.dashboard.side",[433,1699,1700],{},[168,1701,1702],{},"'side'",[433,1704,1705],{},"Narrow column next to it, stacked",[433,1707,1708,1709,1711],{},"Short ",[168,1710,1690],{},"s.",[159,1713,1714,1715,1718],{},"Widgets load their own data (",[168,1716,1717],{},"useLazyFetch",", so the page doesn't wait) and receive no context. Without widgets in any\nof the areas, the dashboard shows a shortcut card for every entry of the Manage and Settings groups.",[615,1720,1722],{"id":1721},"runtime-config","Runtime config",[159,1724,1725,1728],{},[168,1726,1727],{},"runtimeConfig.public.admin"," holds the resolved values:",[245,1730,1732],{"className":247,"code":1731,"language":249,"meta":250,"style":250},"type PublicModuleOptions = {\n  base: string\n  dashboard?: string \u002F\u002F undefined when the dashboard is off\n}\n",[168,1733,1734,1747,1757,1771],{"__ignoreMap":250},[254,1735,1736,1739,1743,1745],{"class":256,"line":257},[254,1737,1738],{"class":890},"type",[254,1740,1742],{"class":1741},"sBMFI"," PublicModuleOptions",[254,1744,904],{"class":275},[254,1746,333],{"class":275},[254,1748,1749,1752,1754],{"class":256,"line":279},[254,1750,1751],{"class":282},"  base",[254,1753,286],{"class":275},[254,1755,1756],{"class":1741}," string\n",[254,1758,1759,1762,1765,1768],{"class":256,"line":325},[254,1760,1761],{"class":282},"  dashboard",[254,1763,1764],{"class":275},"?:",[254,1766,1767],{"class":1741}," string",[254,1769,1770],{"class":744}," \u002F\u002F undefined when the dashboard is off\n",[254,1772,1773],{"class":256,"line":336},[254,1774,1775],{"class":275},"}\n",[615,1777,1779],{"id":1778},"layout-and-page","Layout and page",[406,1781,1782,1791],{},[409,1783,1784],{},[412,1785,1786,1789],{},[415,1787,1788],{},"Name",[415,1790,426],{},[428,1792,1793,1803],{},[412,1794,1795,1800],{},[433,1796,1797,1799],{},[168,1798,170],{}," layout",[433,1801,1802],{},"A collapsible, resizable sidebar and a navbar over the page body.",[412,1804,1805,1808],{},[433,1806,1807],{},"Dashboard page",[433,1809,1810,1813,1814,1817],{},[168,1811,1812],{},"admin-dashboard"," at the dashboard path: a ",[168,1815,1816],{},"PageHeading"," and the three widget areas above. Skipped if a page already exists at that path.",[159,1819,1820,1821,1823],{},"The ",[168,1822,170],{}," layout is a Nuxt UI dashboard shell:",[533,1825,1826,1853,1863,1874],{},[536,1827,1828,1831,1832,187,1835,1838,1839,1842,1843,1846,1847,1849,1850,707],{},[163,1829,1830],{},"Sidebar",": the brand, the ⌘K search button, the grouped navigation (Overview, ",[163,1833,1834],{},"Manage",[163,1836,1837],{},"Settings",") and, in the\nfooter, a \"Back to the site\" link and the ",[163,1840,1841],{},"account menu"," (",[168,1844,1845],{},"AccountMenu"," from ",[182,1848,65],{"href":66},", when\ninstalled: it shows the signed-in user and a colour-mode switch under ",[163,1851,1852],{},"Appearance",[536,1854,1855,1858,1859,1862],{},[163,1856,1857],{},"Navbar",": the sidebar collapse button, the title of the current section and, with more than one locale,\n",[168,1860,1861],{},"LanguageSelect",". There is no colour-mode button in the navbar: appearance lives in the account menu.",[536,1864,1865,1868,1869,563,1871,1873],{},[163,1866,1867],{},"⌘K",": the palette has one group per navigation group, listing the same entries, so everything in the sidebar is\nsearchable. ",[168,1870,1845],{},[168,1872,1861],{}," are resolved by name, so a host's own versions win and neither is\nrequired.",[536,1875,1876,1877,1880],{},"Links are built with ",[168,1878,1879],{},"useNavLinks",", so they keep the visitor's locale prefix and the active entry is highlighted.",[615,1882,1884],{"id":1883},"components","Components",[159,1886,1887,1888,541,1892,187,1894,322,1897,187,1900,187,1903,187,1906,187,1909,187,1911,563,1913,1916,1917,1919],{},"The admin pages are built from the shared components of ",[182,1889,1890],{"href":130},[168,1891,192],{},[168,1893,1816],{},[168,1895,1896],{},"PageToolbar",[168,1898,1899],{},"TableCard",[168,1901,1902],{},"RowMenu",[168,1904,1905],{},"SectionCard",[168,1907,1908],{},"DescriptionList",[168,1910,1670],{},[168,1912,1690],{},[168,1914,1915],{},"FormSlideover",". They are registered\nglobally by that module, which this module now depends on. Use them directly; see ",[182,1918,706],{"href":32},"\nfor how a list, a detail page and a form are put together.",[1921,1922,1820,1923,1926,1927,1930],"warning",{},[168,1924,1925],{},"Admin*"," components from earlier versions are ",[163,1928,1929],{},"deprecated"," and kept for one release as thin aliases over the\nshared components, so existing pages keep rendering. Move to the shared components; the aliases will be removed in the\nnext admin minor.",[406,1932,1933,1946],{},[409,1934,1935],{},[412,1936,1937,1940,1943],{},[415,1938,1939],{},"Deprecated alias",[415,1941,1942],{},"Use instead",[415,1944,1945],{},"Notes",[428,1947,1948,1963,1996,2015,2052,2074,2089,2104,2126],{},[412,1949,1950,1955,1960],{},[433,1951,1952],{},[168,1953,1954],{},"\u003CAdminPage>",[433,1956,1957],{},[168,1958,1959],{},"\u003Cdiv class=\"flex flex-col gap-4\">",[433,1961,1962],{},"There is no page wrapper any more.",[412,1964,1965,1970,1975],{},[433,1966,1967],{},[168,1968,1969],{},"\u003CAdminPageHeader>",[433,1971,1972],{},[168,1973,1974],{},"\u003CPageHeading>",[433,1976,1977,1980,1981,1984,1985,1988,1989,1992,1993,404],{},[168,1978,1979],{},"back: { label, to }"," becomes ",[168,1982,1983],{},"breadcrumb"," (a string, or ",[168,1986,1987],{},"BreadcrumbItem[]"," ending at the current page); the ",[168,1990,1991],{},"links"," slot is ",[168,1994,1995],{},"actions",[412,1997,1998,2003,2008],{},[433,1999,2000],{},[168,2001,2002],{},"\u003CAdminToolbar>",[433,2004,2005],{},[168,2006,2007],{},"\u003CPageToolbar>",[433,2009,2010,2011,2014],{},"Same default slot; adds a ",[168,2012,2013],{},"right"," slot.",[412,2016,2017,2022,2031],{},[433,2018,2019],{},[168,2020,2021],{},"\u003CAdminTable>",[433,2023,2024,2027,2028],{},[168,2025,2026],{},"\u003CTableCard>"," around ",[168,2029,2030],{},"\u003CUTable :ui=\"tableUi()\">",[433,2032,2033,2034,545,2037,2040,2041,2044,2045,2048,2049,2014],{},"Row click is ",[168,2035,2036],{},"@select",[168,2038,2039],{},"UTable","; the ",[168,2042,2043],{},"empty"," shortcut is a ",[168,2046,2047],{},"UEmpty"," in the table's ",[168,2050,2051],{},"#empty",[412,2053,2054,2059,2064],{},[433,2055,2056],{},[168,2057,2058],{},"\u003CAdminSection>",[433,2060,2061],{},[168,2062,2063],{},"\u003CSectionCard>",[433,2065,2066,2067,2070,2071,404],{},"Same slots; ",[168,2068,2069],{},"flush"," is now a prop. Adds ",[168,2072,2073],{},"icon",[412,2075,2076,2081,2086],{},[433,2077,2078],{},[168,2079,2080],{},"\u003CAdminEmpty>",[433,2082,2083],{},[168,2084,2085],{},"\u003CUEmpty variant=\"naked\">",[433,2087,2088],{},"Name the thing and offer exactly one action.",[412,2090,2091,2096,2101],{},[433,2092,2093],{},[168,2094,2095],{},"\u003CAdminKeyValue>",[433,2097,2098],{},[168,2099,2100],{},"\u003CDescriptionList>",[433,2102,2103],{},"Missing values read \"Not set\" instead of an en dash.",[412,2105,2106,2111,2116],{},[433,2107,2108],{},[168,2109,2110],{},"\u003CAdminStatCard>",[433,2112,2113],{},[168,2114,2115],{},"\u003CStatCard>",[433,2117,2118,2119,563,2122,2125],{},"Adds ",[168,2120,2121],{},"value",[168,2123,2124],{},"hint"," props; the default slot still overrides the value.",[412,2127,2128,2133,2138],{},[433,2129,2130],{},[168,2131,2132],{},"\u003CAdminListCard>",[433,2134,2135],{},[168,2136,2137],{},"\u003CListCard>",[433,2139,2140,2143],{},[168,2141,2142],{},"toLabel"," defaults to the translated \"View all\".",[159,2145,2146,2147,2149,2150,2154],{},"Modules that ship admin pages declare ",[168,2148,314],{}," as an optional module dependency and\n",[182,2151,2152],{"href":130},[168,2153,192],{}," as a dependency; a host that enables those pages installs both.",[615,2156,2158],{"id":2157},"page-conventions","Page conventions",[159,2160,2161,2162,2164],{},"Every admin page follows ",[182,2163,706],{"href":32},". In short:",[533,2166,2167,2187,2210,2226,2235,2244],{},[536,2168,2169,541,2172,2174,2175,2177,2178,2180,2181,2183,2184,2186],{},[163,2170,2171],{},"Lists",[168,2173,1816],{}," with the primary action, ",[168,2176,1896],{}," for search past about eight rows, ",[168,2179,2039],{}," in\n",[168,2182,1899],{}," with clickable rows and a ",[168,2185,1902],{}," in the last column.",[536,2188,2189,541,2192,2194,2195,2197,2198,2200,2201,2206,2207,404],{},[163,2190,2191],{},"Detail pages",[168,2193,1816],{}," with a ",[168,2196,1983],{}," back to the list, then ",[168,2199,1905],{},"s; extensible tabs are\n",[182,2202,2203],{"href":138},[168,2204,2205],{},"WidgetTabs",", the page's own sections are ",[168,2208,2209],{},"PageTabs",[536,2211,2212,541,2215,2217,2218,2221,2222,2225],{},[163,2213,2214],{},"Create and edit",[168,2216,1915],{}," opened with ",[168,2219,2220],{},"useOverlay()",", behind a ",[168,2223,2224],{},"use\u003CEntity>Actions()"," composable.",[536,2227,2228,541,2231,2234],{},[163,2229,2230],{},"Destructive actions",[168,2232,2233],{},"useConfirmDialog({ destructive: true })",", saying what else is affected.",[536,2236,2237,2240,2241,404],{},[163,2238,2239],{},"Feedback",": a toast with the record's name; errors through ",[168,2242,2243],{},"useErrorToast",[536,2245,2246,541,2249,2252],{},[163,2247,2248],{},"Text",[168,2250,2251],{},"useModuleT"," with an English default; buttons name the object (\"Add user\", not \"Add\").",[240,2254,2256],{"id":2255},"translations","Translations",[159,2258,2259,2260,2262],{},"Namespace ",[168,2261,170],{},", shipped in English and Danish.",[406,2264,2265,2275],{},[409,2266,2267],{},[412,2268,2269,2272],{},[415,2270,2271],{},"Key",[415,2273,2274],{},"Used for",[428,2276,2277,2287,2297,2310,2320,2335,2345],{},[412,2278,2279,2284],{},[433,2280,2281],{},[168,2282,2283],{},"admin.title",[433,2285,2286],{},"Header title when no nav entry matches the route",[412,2288,2289,2294],{},[433,2290,2291],{},[168,2292,2293],{},"admin.nav.label",[433,2295,2296],{},"Sidebar navigation label",[412,2298,2299,2307],{},[433,2300,2301,187,2304],{},[168,2302,2303],{},"admin.nav.groups.manage",[168,2305,2306],{},".settings",[433,2308,2309],{},"Headers of the Manage and Settings groups in the sidebar",[412,2311,2312,2317],{},[433,2313,2314],{},[168,2315,2316],{},"admin.search.goTo",[433,2318,2319],{},"Title of the ⌘K palette groups",[412,2321,2322,2333],{},[433,2323,2324,187,2327,187,2330],{},[168,2325,2326],{},"admin.dashboard.title",[168,2328,2329],{},".description",[168,2331,2332],{},".empty",[433,2334,1807],{},[412,2336,2337,2342],{},[433,2338,2339],{},[168,2340,2341],{},"admin.backToSite",[433,2343,2344],{},"Link back to the public site",[412,2346,2347,2354],{},[433,2348,2349,187,2352],{},[168,2350,2351],{},"admin.menu.label",[168,2353,2329],{},[433,2355,2356],{},"The \"Admin\" entry in the account dropdown",[2358,2359,2360],"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 .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}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":250,"searchDepth":279,"depth":279,"links":2362},[2363,2364,2365,2366,2375],{"id":242,"depth":279,"text":243},{"id":396,"depth":279,"text":397},{"id":605,"depth":279,"text":606},{"id":612,"depth":279,"text":613,"children":2367},[2368,2369,2370,2371,2372,2373,2374],{"id":617,"depth":325,"text":618},{"id":710,"depth":325,"text":711},{"id":1619,"depth":325,"text":1620},{"id":1721,"depth":325,"text":1722},{"id":1778,"depth":325,"text":1779},{"id":1883,"depth":325,"text":1884},{"id":2157,"depth":325,"text":2158},{"id":2255,"depth":279,"text":2256},"Generic admin area - guarded shell, dashboard and navigation that other modules contribute to.","md",null,{},{"title":69,"description":2376},"AKLjSldL46gnA4Hr28G5UlnZ-7QtNB_ABfGObORSVss",[2383,2385],{"title":65,"path":66,"stem":67,"description":2384,"children":-1},"The account area - a layout with its own navigation, an overview and the profile, security, documents and API tokens pages - built on Users and Auth.",{"title":73,"path":74,"stem":75,"description":2386,"children":-1},"Sign-in (password, magic link, OAuth, passkeys), user API tokens and one requireAuth for cookie sessions, tokens and OAuth access tokens, with scopes.",1792824490033]