[{"data":1,"prerenderedAt":1317},["ShallowReactive",2],{"navigation_docs":3,"-apps-module-and-runtime":217,"-apps-module-and-runtime-surround":1312},[4,25,41,84,126,165,201],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":24},"Overview","i-lucide-house","\u002Fgetting-started","1.getting-started",[10,14,19],{"title":11,"path":12,"stem":13,"icon":6},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F3.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Project structure","\u002Fgetting-started\u002Fproject-structure","1.getting-started\u002F4.project-structure","i-lucide-folder-tree",false,{"title":26,"icon":27,"path":28,"stem":29,"children":30,"page":24},"Architecture","i-lucide-cpu","\u002Farchitecture","3.architecture",[31,36],{"title":32,"path":33,"stem":34,"icon":35},"Core, themes, and apps","\u002Farchitecture\u002Foverview","3.architecture\u002F1.overview","i-lucide-layers",{"title":37,"path":38,"stem":39,"icon":40},"Kits and extension modules","\u002Farchitecture\u002Fkits","3.architecture\u002F3.kits","i-lucide-puzzle",{"title":42,"icon":43,"path":44,"stem":45,"children":46,"page":24},"Apps","i-lucide-app-window","\u002Fapps","4.apps",[47,51,55,60,64,69,74,79],{"title":5,"path":48,"stem":49,"icon":50},"\u002Fapps\u002Foverview","4.apps\u002F1.overview","i-lucide-info",{"title":52,"path":53,"stem":54,"icon":23},"Package layout","\u002Fapps\u002Fpackage-layout","4.apps\u002F2.package-layout",{"title":56,"path":57,"stem":58,"icon":59},"Create from scratch","\u002Fapps\u002Fcreate-from-scratch","4.apps\u002F3.create-from-scratch","i-lucide-list-checks",{"title":61,"path":62,"stem":63,"icon":40},"Module and runtime","\u002Fapps\u002Fmodule-and-runtime","4.apps\u002F4.module-and-runtime",{"title":65,"path":66,"stem":67,"icon":68},"Plugins","\u002Fapps\u002Fplugins","4.apps\u002F5.plugins","i-lucide-plug",{"title":70,"path":71,"stem":72,"icon":73},"Windows and commands","\u002Fapps\u002Fwindows-and-commands","4.apps\u002F6.windows-and-commands","i-lucide-layout-panel-top",{"title":75,"path":76,"stem":77,"icon":78},"Playground","\u002Fapps\u002Fplayground","4.apps\u002F7.playground","i-lucide-flask-conical",{"title":80,"path":81,"stem":82,"icon":83},"Build and publish","\u002Fapps\u002Fbuild-and-publish","4.apps\u002F8.build-and-publish","i-lucide-package",{"title":85,"icon":86,"path":87,"stem":88,"children":89,"page":24},"Themes","i-lucide-palette","\u002Fthemes","5.themes",[90,93,98,102,106,111,116,121],{"title":5,"path":91,"stem":92,"icon":50},"\u002Fthemes\u002Foverview","5.themes\u002F1.overview",{"title":94,"path":95,"stem":96,"icon":97},"Theme anatomy","\u002Fthemes\u002Ftheme-anatomy","5.themes\u002F2.theme-anatomy","i-lucide-component",{"title":99,"path":100,"stem":101},"Create From Scratch","\u002Fthemes\u002Fcreate-from-scratch","5.themes\u002F3.create-from-scratch",{"title":103,"path":104,"stem":105,"icon":68},"Theme plugins","\u002Fthemes\u002Fplugins","5.themes\u002F4.plugins",{"title":107,"path":108,"stem":109,"icon":110},"Styling and Tailwind","\u002Fthemes\u002Fstyling-and-tailwind","5.themes\u002F5.styling-and-tailwind","i-lucide-brush",{"title":112,"path":113,"stem":114,"icon":115},"Pages and boot flow","\u002Fthemes\u002Fpages-and-boot-flow","5.themes\u002F6.pages-and-boot-flow","i-lucide-power",{"title":117,"path":118,"stem":119,"icon":120},"Theme and optional modules","\u002Fthemes\u002Ftheme-and-optional-modules","5.themes\u002F7.theme-and-optional-modules","i-lucide-link",{"title":122,"path":123,"stem":124,"icon":125},"Window chrome and nav buttons","\u002Fthemes\u002Fwindow-chrome-and-nav-buttons","5.themes\u002F8.window-chrome-and-nav-buttons","i-lucide-square-mouse-pointer",{"title":127,"icon":128,"path":129,"stem":130,"children":131,"page":24},"Client & CLI","i-lucide-terminal","\u002Fsetup","6.setup",[132,136,141,146,151,156,161],{"title":133,"path":134,"stem":135,"icon":128},"desktop CLI","\u002Fsetup\u002Fdesktop-cli","6.setup\u002F1.desktop-cli",{"title":137,"path":138,"stem":139,"icon":140},"Package linking","\u002Fsetup\u002Fpackage-linking","6.setup\u002F2.package-linking","i-lucide-link-2",{"title":142,"path":143,"stem":144,"icon":145},"Monorepo and workspace","\u002Fsetup\u002Fmonorepo-workspace","6.setup\u002F3.monorepo-workspace","i-lucide-blocks",{"title":147,"path":148,"stem":149,"icon":150},"desktop.config.ts","\u002Fsetup\u002Fdesktop-config","6.setup\u002F4.desktop-config","i-lucide-file-code",{"title":152,"path":153,"stem":154,"icon":155},"Migrate themes, apps, and modules (3.3.2)","\u002Fsetup\u002Fmigrate-packages-3.3.2","6.setup\u002F5.migrate-packages-3.3.2","i-lucide-arrow-right-left",{"title":157,"path":158,"stem":159,"icon":160},"Migrate themes, apps, and modules (3.4)","\u002Fsetup\u002Fmigrate-packages-3.4","6.setup\u002F6.migrate-packages-3.4","i-lucide-arrow-up-right",{"title":162,"path":163,"stem":164},"Troubleshooting","\u002Fsetup\u002Ftroubleshooting","6.setup\u002F7.troubleshooting",{"title":166,"icon":167,"path":168,"stem":169,"children":170,"page":24},"Internals","i-lucide-book-open","\u002Finternals","7.internals",[171,176,181,186,191,196],{"title":172,"path":173,"stem":174,"icon":175},"Boot sequence","\u002Finternals\u002Fboot-sequence","7.internals\u002F1.boot-sequence","i-lucide-list-ordered",{"title":177,"path":178,"stem":179,"icon":180},"Stores and composables","\u002Finternals\u002Fstores-and-composables","7.internals\u002F2.stores-and-composables","i-lucide-database",{"title":182,"path":183,"stem":184,"icon":185},"Core components","\u002Finternals\u002Fcore-components","7.internals\u002F3.core-components","i-lucide-layout-grid",{"title":187,"path":188,"stem":189,"icon":190},"Dialog provider","\u002Finternals\u002Fdialog-provider","7.internals\u002F4.dialog-provider","i-lucide-message-square",{"title":192,"path":193,"stem":194,"icon":195},"Kernel contract","\u002Finternals\u002Fkernel-contract","7.internals\u002F5.kernel-contract","i-lucide-shield-check",{"title":197,"path":198,"stem":199,"icon":200},"Shell identity","\u002Finternals\u002Fshell-identity","7.internals\u002F6.shell-identity","i-lucide-user",{"title":202,"icon":203,"path":204,"stem":205,"children":206,"page":24},"Reference","i-lucide-book-marked","\u002Freference","8.reference",[207,212],{"title":208,"path":209,"stem":210,"icon":211},"Glossary","\u002Freference\u002Fglossary","8.reference\u002F1.glossary","i-lucide-book-a",{"title":213,"path":214,"stem":215,"icon":216},"Ecosystem","\u002Freference\u002Fuseful-links","8.reference\u002F2.useful-links","i-lucide-external-link",{"id":218,"title":61,"body":219,"description":1305,"extension":1306,"links":1307,"meta":1308,"navigation":1309,"path":62,"seo":1310,"stem":63,"__hash__":1311},"docs\u002F4.apps\u002F4.module-and-runtime.md",{"type":220,"value":221,"toc":1294},"minimark",[222,230,265,353,361,374,729,745,752,860,875,879,904,910,919,949,952,1104,1124,1135,1141,1149,1212,1217,1221,1269,1276,1280,1290],[223,224,226],"h2",{"id":225},"srcmodulets",[227,228,229],"code",{},"src\u002Fmodule.ts",[231,232,233,241,242,247,248,253,254,257,258,264],"callout",{"icon":155},[234,235,236,237,240],"strong",{},"Since ",[227,238,239],{},"@owdproject\u002Fcore"," 3.3.2:"," apps with a ",[234,243,244],{},[227,245,246],{},"configKey"," should use ",[234,249,250],{},[227,251,252],{},"defineDesktopModule"," instead of manual ",[227,255,256],{},"public.desktop"," assignment. See ",[234,259,260],{},[261,262,263],"a",{"href":153},"Migrate packages (3.3.2)",".",[266,267,268,281,304],"ul",{},[269,270,271,276,277,280],"li",{},[234,272,273],{},[227,274,275],{},"meta.name",": stable module id (e.g. ",[227,278,279],{},"desktop-app-about",").",[269,282,283,288,289,291,292,295,296,299,300,264],{},[234,284,285],{},[227,286,287],{},"meta.configKey",": namespace on ",[227,290,147],{}," (e.g. ",[227,293,294],{},"terminal"," → ",[227,297,298],{},"public.desktop.terminal","). Required when using ",[234,301,302],{},[227,303,252],{},[269,305,306,311,312],{},[234,307,308],{},[227,309,310],{},"setup",": register\n",[266,313,314,325,335],{},[269,315,316,295,321,324],{},[234,317,318],{},[227,319,320],{},"addComponentsDir",[227,322,323],{},".\u002Fruntime\u002Fcomponents",";",[269,326,327,295,332,324],{},[234,328,329],{},[227,330,331],{},"addPlugin",[227,333,334],{},".\u002Fruntime\u002Fplugin",[269,336,337,342,343,345,346,349,350,264],{},[234,338,339],{},[227,340,341],{},"registerTailwindPath"," (from ",[227,344,239],{},") so Tailwind scans your ",[227,347,348],{},".vue","\u002F",[227,351,352],{},".ts",[354,355,357,358,360],"h3",{"id":356},"consumer-config-configkey","Consumer config (",[227,359,246],{},")",[362,363,364,365,369,370,373],"p",{},"Import ",[234,366,367],{},[227,368,252],{}," from ",[227,371,372],{},"@owdproject\u002Fcore\u002Fruntime\u002Futils\u002FdefineDesktopModule"," (not the root barrel):",[375,376,381],"pre",{"className":377,"code":378,"language":379,"meta":380,"style":380},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createResolver, addComponentsDir, addPlugin } from '@nuxt\u002Fkit'\nimport { registerTailwindPath } from '@owdproject\u002Fkit-tailwind\u002Fkit\u002FregisterTailwindPath'\nimport { defineDesktopModule } from '@owdproject\u002Fcore\u002Fkit\u002Fauthoring'\n\nexport default defineDesktopModule({\n  meta: { name: 'desktop-app-about', configKey: 'about' },\n  defaults: { title: 'About', href: 'https:\u002F\u002Fowdproject.org' },\n  async setup(_options, nuxt) {\n    const { resolve } = createResolver(import.meta.url)\n    addComponentsDir({ path: resolve('.\u002Fruntime\u002Fcomponents') })\n    addPlugin(resolve('.\u002Fruntime\u002Fplugin'))\n    registerTailwindPath(nuxt, resolve('.\u002Fruntime\u002Fcomponents\u002F**\u002F*.{vue,mjs,ts}'))\n  },\n})\n","ts","",[227,382,383,427,448,469,476,494,535,573,599,634,668,690,716,722],{"__ignoreMap":380},[384,385,388,392,396,400,403,406,408,411,414,417,420,424],"span",{"class":386,"line":387},"line",1,[384,389,391],{"class":390},"s7zQu","import",[384,393,395],{"class":394},"sMK4o"," {",[384,397,399],{"class":398},"sTEyZ"," createResolver",[384,401,402],{"class":394},",",[384,404,405],{"class":398}," addComponentsDir",[384,407,402],{"class":394},[384,409,410],{"class":398}," addPlugin",[384,412,413],{"class":394}," }",[384,415,416],{"class":390}," from",[384,418,419],{"class":394}," '",[384,421,423],{"class":422},"sfazB","@nuxt\u002Fkit",[384,425,426],{"class":394},"'\n",[384,428,430,432,434,437,439,441,443,446],{"class":386,"line":429},2,[384,431,391],{"class":390},[384,433,395],{"class":394},[384,435,436],{"class":398}," registerTailwindPath",[384,438,413],{"class":394},[384,440,416],{"class":390},[384,442,419],{"class":394},[384,444,445],{"class":422},"@owdproject\u002Fkit-tailwind\u002Fkit\u002FregisterTailwindPath",[384,447,426],{"class":394},[384,449,451,453,455,458,460,462,464,467],{"class":386,"line":450},3,[384,452,391],{"class":390},[384,454,395],{"class":394},[384,456,457],{"class":398}," defineDesktopModule",[384,459,413],{"class":394},[384,461,416],{"class":390},[384,463,419],{"class":394},[384,465,466],{"class":422},"@owdproject\u002Fcore\u002Fkit\u002Fauthoring",[384,468,426],{"class":394},[384,470,472],{"class":386,"line":471},4,[384,473,475],{"emptyLinePlaceholder":474},true,"\n",[384,477,479,482,485,488,491],{"class":386,"line":478},5,[384,480,481],{"class":390},"export",[384,483,484],{"class":390}," default",[384,486,457],{"class":487},"s2Zo4",[384,489,490],{"class":398},"(",[384,492,493],{"class":394},"{\n",[384,495,497,501,504,506,509,511,513,515,518,520,523,525,527,530,532],{"class":386,"line":496},6,[384,498,500],{"class":499},"swJcz","  meta",[384,502,503],{"class":394},":",[384,505,395],{"class":394},[384,507,508],{"class":499}," name",[384,510,503],{"class":394},[384,512,419],{"class":394},[384,514,279],{"class":422},[384,516,517],{"class":394},"'",[384,519,402],{"class":394},[384,521,522],{"class":499}," configKey",[384,524,503],{"class":394},[384,526,419],{"class":394},[384,528,529],{"class":422},"about",[384,531,517],{"class":394},[384,533,534],{"class":394}," },\n",[384,536,538,541,543,545,548,550,552,555,557,559,562,564,566,569,571],{"class":386,"line":537},7,[384,539,540],{"class":499},"  defaults",[384,542,503],{"class":394},[384,544,395],{"class":394},[384,546,547],{"class":499}," title",[384,549,503],{"class":394},[384,551,419],{"class":394},[384,553,554],{"class":422},"About",[384,556,517],{"class":394},[384,558,402],{"class":394},[384,560,561],{"class":499}," href",[384,563,503],{"class":394},[384,565,419],{"class":394},[384,567,568],{"class":422},"https:\u002F\u002Fowdproject.org",[384,570,517],{"class":394},[384,572,534],{"class":394},[384,574,576,580,583,585,589,591,594,596],{"class":386,"line":575},8,[384,577,579],{"class":578},"spNyl","  async",[384,581,582],{"class":499}," setup",[384,584,490],{"class":394},[384,586,588],{"class":587},"sHdIc","_options",[384,590,402],{"class":394},[384,592,593],{"class":587}," nuxt",[384,595,360],{"class":394},[384,597,598],{"class":394}," {\n",[384,600,602,605,607,610,612,615,617,619,621,623,626,628,631],{"class":386,"line":601},9,[384,603,604],{"class":578},"    const",[384,606,395],{"class":394},[384,608,609],{"class":398}," resolve",[384,611,413],{"class":394},[384,613,614],{"class":394}," =",[384,616,399],{"class":487},[384,618,490],{"class":499},[384,620,391],{"class":390},[384,622,264],{"class":394},[384,624,625],{"class":398},"meta",[384,627,264],{"class":394},[384,629,630],{"class":398},"url",[384,632,633],{"class":499},")\n",[384,635,637,640,642,645,648,650,652,654,656,658,660,663,666],{"class":386,"line":636},10,[384,638,639],{"class":487},"    addComponentsDir",[384,641,490],{"class":499},[384,643,644],{"class":394},"{",[384,646,647],{"class":499}," path",[384,649,503],{"class":394},[384,651,609],{"class":487},[384,653,490],{"class":499},[384,655,517],{"class":394},[384,657,323],{"class":422},[384,659,517],{"class":394},[384,661,662],{"class":499},") ",[384,664,665],{"class":394},"}",[384,667,633],{"class":499},[384,669,671,674,676,679,681,683,685,687],{"class":386,"line":670},11,[384,672,673],{"class":487},"    addPlugin",[384,675,490],{"class":499},[384,677,678],{"class":487},"resolve",[384,680,490],{"class":499},[384,682,517],{"class":394},[384,684,334],{"class":422},[384,686,517],{"class":394},[384,688,689],{"class":499},"))\n",[384,691,693,696,698,701,703,705,707,709,712,714],{"class":386,"line":692},12,[384,694,695],{"class":487},"    registerTailwindPath",[384,697,490],{"class":499},[384,699,700],{"class":398},"nuxt",[384,702,402],{"class":394},[384,704,609],{"class":487},[384,706,490],{"class":499},[384,708,517],{"class":394},[384,710,711],{"class":422},".\u002Fruntime\u002Fcomponents\u002F**\u002F*.{vue,mjs,ts}",[384,713,517],{"class":394},[384,715,689],{"class":499},[384,717,719],{"class":386,"line":718},13,[384,720,721],{"class":394},"  },\n",[384,723,725,727],{"class":386,"line":724},14,[384,726,665],{"class":394},[384,728,633],{"class":398},[362,730,731,732,737,738,741,742,744],{},"Add ",[234,733,734],{},[227,735,736],{},"types\u002Fdesktop.d.ts"," augmenting ",[227,739,740],{},"DesktopConfig"," with your ",[227,743,529],{}," shape.",[362,746,747,748,503],{},"Consumers override via ",[234,749,750],{},[227,751,147],{},[375,753,755],{"className":377,"code":754,"language":379,"meta":380,"style":380},"export default defineDesktopConfig({\n  theme: '@owdproject\u002Ftheme-nova',\n  apps: ['@owdproject\u002Fapp-about'],\n  about: {\n    title: 'About (playground)',\n    href: 'https:\u002F\u002Fgithub.com\u002Fowdproject\u002Fapp-about',\n  },\n})\n",[227,756,757,770,787,809,818,834,850,854],{"__ignoreMap":380},[384,758,759,761,763,766,768],{"class":386,"line":387},[384,760,481],{"class":390},[384,762,484],{"class":390},[384,764,765],{"class":487}," defineDesktopConfig",[384,767,490],{"class":398},[384,769,493],{"class":394},[384,771,772,775,777,779,782,784],{"class":386,"line":429},[384,773,774],{"class":499},"  theme",[384,776,503],{"class":394},[384,778,419],{"class":394},[384,780,781],{"class":422},"@owdproject\u002Ftheme-nova",[384,783,517],{"class":394},[384,785,786],{"class":394},",\n",[384,788,789,792,794,797,799,802,804,807],{"class":386,"line":450},[384,790,791],{"class":499},"  apps",[384,793,503],{"class":394},[384,795,796],{"class":398}," [",[384,798,517],{"class":394},[384,800,801],{"class":422},"@owdproject\u002Fapp-about",[384,803,517],{"class":394},[384,805,806],{"class":398},"]",[384,808,786],{"class":394},[384,810,811,814,816],{"class":386,"line":471},[384,812,813],{"class":499},"  about",[384,815,503],{"class":394},[384,817,598],{"class":394},[384,819,820,823,825,827,830,832],{"class":386,"line":478},[384,821,822],{"class":499},"    title",[384,824,503],{"class":394},[384,826,419],{"class":394},[384,828,829],{"class":422},"About (playground)",[384,831,517],{"class":394},[384,833,786],{"class":394},[384,835,836,839,841,843,846,848],{"class":386,"line":496},[384,837,838],{"class":499},"    href",[384,840,503],{"class":394},[384,842,419],{"class":394},[384,844,845],{"class":422},"https:\u002F\u002Fgithub.com\u002Fowdproject\u002Fapp-about",[384,847,517],{"class":394},[384,849,786],{"class":394},[384,851,852],{"class":386,"line":537},[384,853,721],{"class":394},[384,855,856,858],{"class":386,"line":575},[384,857,665],{"class":394},[384,859,633],{"class":398},[362,861,862,863,868,869,874],{},"In Vue, read ",[234,864,865],{},[227,866,867],{},"useRuntimeConfig().public.desktop.about"," or ",[234,870,871],{},[227,872,873],{},"useDesktopExtension('about')"," (auto-imported).",[354,876,878],{"id":877},"resilience","Resilience",[362,880,881,882,885,886,891,892,895,896,899,900,264],{},"During ",[227,883,884],{},"nuxt prepare"," or builds without a full desktop, ",[234,887,888],{},[227,889,890],{},"runtimeConfig.public.desktop"," may be incomplete. Use optional chaining in Vue; do not assign ",[227,893,894],{},"public.desktop[configKey]"," manually in ",[227,897,898],{},"module.ts"," when using ",[234,901,902],{},[227,903,252],{},[223,905,907],{"id":906},"runtimeplugints",[227,908,909],{},"runtime\u002Fplugin.ts",[362,911,912,913,918],{},"Required for apps. ",[234,914,915],{},[227,916,917],{},"desktop validate"," checks:",[266,920,921,929,941],{},[269,922,923,924],{},"calls ",[234,925,926],{},[227,927,928],{},"defineDesktopApp",[269,930,931,932,937,938,360],{},"sets ",[234,933,934],{},[227,935,936],{},"name: 'desktop-\u003Cslug>-register'"," (for playground launch ",[227,939,940],{},"dependsOn",[269,942,943,944],{},"guards with ",[234,945,946],{},[227,947,948],{},"if (import.meta.server) return",[362,950,951],{},"Recommended pattern:",[375,953,955],{"className":377,"code":954,"language":379,"meta":380,"style":380},"import { defineNuxtPlugin } from 'nuxt\u002Fapp'\nimport { defineDesktopApp } from '@owdproject\u002Fcore'\nimport config from '.\u002Fapp.config'\n\nexport default defineNuxtPlugin({\n  name: 'desktop-app-about-register',\n  async setup() {\n    if (import.meta.server) return\n    await defineDesktopApp(config)\n  },\n})\n",[227,956,957,977,996,1013,1017,1029,1045,1056,1080,1094,1098],{"__ignoreMap":380},[384,958,959,961,963,966,968,970,972,975],{"class":386,"line":387},[384,960,391],{"class":390},[384,962,395],{"class":394},[384,964,965],{"class":398}," defineNuxtPlugin",[384,967,413],{"class":394},[384,969,416],{"class":390},[384,971,419],{"class":394},[384,973,974],{"class":422},"nuxt\u002Fapp",[384,976,426],{"class":394},[384,978,979,981,983,986,988,990,992,994],{"class":386,"line":429},[384,980,391],{"class":390},[384,982,395],{"class":394},[384,984,985],{"class":398}," defineDesktopApp",[384,987,413],{"class":394},[384,989,416],{"class":390},[384,991,419],{"class":394},[384,993,239],{"class":422},[384,995,426],{"class":394},[384,997,998,1000,1003,1006,1008,1011],{"class":386,"line":450},[384,999,391],{"class":390},[384,1001,1002],{"class":398}," config ",[384,1004,1005],{"class":390},"from",[384,1007,419],{"class":394},[384,1009,1010],{"class":422},".\u002Fapp.config",[384,1012,426],{"class":394},[384,1014,1015],{"class":386,"line":471},[384,1016,475],{"emptyLinePlaceholder":474},[384,1018,1019,1021,1023,1025,1027],{"class":386,"line":478},[384,1020,481],{"class":390},[384,1022,484],{"class":390},[384,1024,965],{"class":487},[384,1026,490],{"class":398},[384,1028,493],{"class":394},[384,1030,1031,1034,1036,1038,1041,1043],{"class":386,"line":496},[384,1032,1033],{"class":499},"  name",[384,1035,503],{"class":394},[384,1037,419],{"class":394},[384,1039,1040],{"class":422},"desktop-app-about-register",[384,1042,517],{"class":394},[384,1044,786],{"class":394},[384,1046,1047,1049,1051,1054],{"class":386,"line":537},[384,1048,579],{"class":578},[384,1050,582],{"class":499},[384,1052,1053],{"class":394},"()",[384,1055,598],{"class":394},[384,1057,1058,1061,1064,1066,1068,1070,1072,1075,1077],{"class":386,"line":575},[384,1059,1060],{"class":390},"    if",[384,1062,1063],{"class":499}," (",[384,1065,391],{"class":390},[384,1067,264],{"class":394},[384,1069,625],{"class":398},[384,1071,264],{"class":394},[384,1073,1074],{"class":398},"server",[384,1076,662],{"class":499},[384,1078,1079],{"class":390},"return\n",[384,1081,1082,1085,1087,1089,1092],{"class":386,"line":601},[384,1083,1084],{"class":390},"    await",[384,1086,985],{"class":487},[384,1088,490],{"class":499},[384,1090,1091],{"class":398},"config",[384,1093,633],{"class":499},[384,1095,1096],{"class":386,"line":636},[384,1097,721],{"class":394},[384,1099,1100,1102],{"class":386,"line":670},[384,1101,665],{"class":394},[384,1103,633],{"class":398},[362,1105,1106,1110,1111,1116,1117,1120,1121,280],{},[234,1107,1108],{},[227,1109,928],{}," registers the app with ",[234,1112,1113],{},[227,1114,1115],{},"useApplicationManager",". It must run on the ",[234,1118,1119],{},"client"," — the desktop shell is client-rendered (",[227,1122,1123],{},"ssr: false",[362,1125,1126,1127,1132,1133,264],{},"Avoid the legacy ",[234,1128,1129],{},[227,1130,1131],{},"app:created"," hook pattern; reference repos and the validator expect direct registration in plugin ",[227,1134,310],{},[223,1136,1138],{"id":1137},"runtimeappconfigts",[227,1139,1140],{},"runtime\u002Fapp.config.ts",[362,1142,1143,1144,503],{},"Export an object compatible with ",[234,1145,1146],{},[227,1147,1148],{},"ApplicationConfig",[266,1150,1151,1162,1186,1194,1205],{},[269,1152,1153,1158,1159,280],{},[234,1154,1155],{},[227,1156,1157],{},"id",": stable string (often reverse-DNS like ",[227,1160,1161],{},"org.owdproject.myapp",[269,1163,1164,1169,1170,1169,1175,1169,1180,1185],{},[234,1165,1166],{},[227,1167,1168],{},"title",", ",[234,1171,1172],{},[227,1173,1174],{},"icon",[234,1176,1177],{},[227,1178,1179],{},"category",[234,1181,1182],{},[227,1183,1184],{},"singleton"," when needed.",[269,1187,1188,1193],{},[234,1189,1190],{},[227,1191,1192],{},"windows",": map of model → window config (async component, size, position).",[269,1195,1196,1201,1202,264],{},[234,1197,1198],{},[227,1199,1200],{},"entries",": keys tied to ",[234,1203,1204],{},"commands",[269,1206,1207,1211],{},[234,1208,1209],{},[227,1210,1204],{},": functions that receive the app controller and open windows \u002F run actions.",[362,1213,1214,1215,264],{},"Details: ",[261,1216,70],{"href":71},[223,1218,1220],{"id":1219},"tailwind","Tailwind",[375,1222,1224],{"className":377,"code":1223,"language":379,"meta":380,"style":380},"import { registerTailwindPath } from '@owdproject\u002Fkit-tailwind\u002Fkit\u002FregisterTailwindPath'\n\nregisterTailwindPath(nuxt, resolve('.\u002Fruntime\u002Fcomponents\u002F**\u002F*.{vue,mjs,ts}'))\n",[227,1225,1226,1244,1248],{"__ignoreMap":380},[384,1227,1228,1230,1232,1234,1236,1238,1240,1242],{"class":386,"line":387},[384,1229,391],{"class":390},[384,1231,395],{"class":394},[384,1233,436],{"class":398},[384,1235,413],{"class":394},[384,1237,416],{"class":390},[384,1239,419],{"class":394},[384,1241,445],{"class":422},[384,1243,426],{"class":394},[384,1245,1246],{"class":386,"line":429},[384,1247,475],{"emptyLinePlaceholder":474},[384,1249,1250,1252,1255,1257,1259,1261,1263,1265,1267],{"class":386,"line":450},[384,1251,341],{"class":487},[384,1253,1254],{"class":398},"(nuxt",[384,1256,402],{"class":394},[384,1258,609],{"class":487},[384,1260,490],{"class":398},[384,1262,517],{"class":394},[384,1264,711],{"class":422},[384,1266,517],{"class":394},[384,1268,689],{"class":398},[362,1270,1271,1272,1275],{},"The ",[227,1273,1274],{},"@owdproject\u002Fkit-tailwind"," package aggregates these paths and merges them during Nuxt boot into the Tailwind CSS configuration.",[223,1277,1279],{"id":1278},"related","Related",[266,1281,1282,1286],{},[269,1283,1284],{},[261,1285,56],{"href":57},[269,1287,1288],{},[261,1289,65],{"href":66},[1291,1292,1293],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .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);}",{"title":380,"searchDepth":429,"depth":429,"links":1295},[1296,1301,1302,1303,1304],{"id":225,"depth":429,"text":229,"children":1297},[1298,1300],{"id":356,"depth":450,"text":1299},"Consumer config (configKey)",{"id":877,"depth":450,"text":878},{"id":906,"depth":429,"text":909},{"id":1137,"depth":429,"text":1140},{"id":1219,"depth":429,"text":1220},{"id":1278,"depth":429,"text":1279},"module.ts, plugins, defineDesktopApp, configKey merge, and Tailwind registration.","md",null,{},{"icon":40},{"title":61,"description":1305},"US2vgETp5ilpdhZ2JDmaaPVPlKGVflrh6mGNWxM6etk",[1313,1315],{"title":56,"path":57,"stem":58,"description":1314,"icon":59,"children":-1},"End-to-end guide to building an OWD app module, from scaffold to desktop integration.",{"title":65,"path":66,"stem":67,"description":1316,"icon":68,"children":-1},"Register plugins in app modules vs playground launch plugins — naming, dependsOn, and validation.",1782171655060]