[{"data":1,"prerenderedAt":458},["ShallowReactive",2],{"mobile-docs-navigation":3,"command-menu-docs":50,"navigation":69,"mobile-docs-page-meta":85,"docs-pages-category":98,"\u002Fdocs\u002Fcomponents\u002Fdocs-search-modal":108,"surround-\u002Fdocs\u002Fcomponents\u002Fdocs-search-modal":455},[4],{"title":5,"path":6,"stem":7,"children":8,"page":49},"Docs","\u002Fdocs","docs",[9,19],{"title":10,"path":11,"stem":12,"children":13},"Introduction","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,15],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",{"title":20,"path":21,"stem":22,"children":23},"Components","\u002Fdocs\u002Fcomponents","docs\u002F2.components\u002F0.index",[24,25,29,33,37,41,45],{"title":20,"path":21,"stem":22},{"title":26,"path":27,"stem":28},"Chat","\u002Fdocs\u002Fcomponents\u002Fchat","docs\u002F2.components\u002F1.chat",{"title":30,"path":31,"stem":32},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002F2.chat-message",{"title":34,"path":35,"stem":36},"ChatMessages","\u002Fdocs\u002Fcomponents\u002Fchat-messages","docs\u002F2.components\u002F3.chat-messages",{"title":38,"path":39,"stem":40},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002F4.chat-prompt",{"title":42,"path":43,"stem":44},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002F5.chat-prompt-submit",{"title":46,"path":47,"stem":48},"DocsSearchModal","\u002Fdocs\u002Fcomponents\u002Fdocs-search-modal","docs\u002F2.components\u002F6.docs-search-modal",false,[51,53,55,57,59,61,63,65,67],{"path":27,"title":26,"description":52},"Build Nuxt chat interfaces with installable shadcn-vue components you own and compose.",{"path":31,"title":30,"description":54},"Render an individual chat message bubble with AI SDK parts, actions, and layout control.",{"path":35,"title":34,"description":56},"Compose chat message lists with scrolling behavior, loading states, and action-ready assistant output.",{"path":39,"title":38,"description":58},"Build chat input flows with an auto-resizing prompt, keyboard shortcuts, and flexible slot composition.",{"path":43,"title":42,"description":60},"Handle chat submit, stop, and retry actions with a status-aware control for prompt workflows.",{"path":21,"title":20,"description":62},"Explore reusable components that complement Nuxt templates and real app workflows.",{"path":47,"title":46,"description":64},"Add a lightweight local search modal to Nuxt documentation interfaces.",{"path":17,"title":16,"description":66},"Start from templates or install individual components in your Nuxt project.",{"path":11,"title":10,"description":68},"Stackhacker UI is an open-source collection of Nuxt templates and components for the shadcn-vue community.",[70],{"title":5,"path":6,"stem":7,"children":71,"page":49},[72,76],{"title":10,"path":11,"stem":12,"children":73},[74,75],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},{"title":20,"path":21,"stem":22,"children":77},[78,79,80,81,82,83,84],{"title":20,"path":21,"stem":22},{"title":26,"path":27,"stem":28},{"title":30,"path":31,"stem":32},{"title":34,"path":35,"stem":36},{"title":38,"path":39,"stem":40},{"title":42,"path":43,"stem":44},{"title":46,"path":47,"stem":48},[86,88,89,90,92,93,94,95,96],{"path":11,"category":87},"overview",{"path":17,"category":87},{"path":21,"category":87},{"path":27,"category":91},"chat",{"path":31,"category":91},{"path":35,"category":91},{"path":39,"category":91},{"path":43,"category":91},{"path":47,"category":97},"content",[99,100,101,102,103,104,105,106,107],{"path":11,"category":87},{"path":17,"category":87},{"path":21,"category":87},{"path":27,"category":91},{"path":31,"category":91},{"path":35,"category":91},{"path":39,"category":91},{"path":43,"category":91},{"path":47,"category":97},{"id":109,"title":46,"body":110,"category":97,"description":64,"extension":450,"meta":451,"navigation":452,"path":47,"seo":453,"stem":48,"__hash__":454},"docs\u002Fdocs\u002F2.components\u002F6.docs-search-modal.md",{"type":111,"value":112,"toc":434},"minimark",[113,117,121,132,136,144,148,154,161,169,172,176,181,183,187,191,357,361,390,394,424,428],[114,115],"component-preview",{"name":116},"DocsSearchModalDemo",[118,119,16],"h2",{"id":120},"installation",[122,123,129],"pre",{"className":124,"code":126,"language":127,"meta":128},[125],"language-bash","npx shadcn-vue@latest add \"https:\u002F\u002Fui.stackhacker.io\u002Fr\u002Fdocs-search-modal.json\"\n","bash","",[130,131,126],"code",{"__ignoreMap":128},[118,133,135],{"id":134},"usage","Usage",[122,137,142],{"className":138,"code":140,"language":141,"meta":128},[139],"language-vue","\u003Cscript setup lang=\"ts\">\nimport { DocsSearchModal, type DocsSearchItem } from '@\u002Fcomponents\u002Fdocs-search-modal'\n\nconst open = ref(false)\n\nconst items: DocsSearchItem[] = [\n  {\n    title: 'Introduction',\n    description: 'Start here to understand the docs structure.',\n    href: '\u002Fdocs\u002Fintroduction',\n    section: 'Getting Started',\n    content: 'overview installation usage'\n  }\n]\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cbutton type=\"button\" @click=\"open = true\">\n    Search\n  \u003C\u002Fbutton>\n\n  \u003CDocsSearchModal v-model:open=\"open\" :items=\"items\" \u002F>\n\u003C\u002Ftemplate>\n","vue",[130,143,140],{"__ignoreMap":128},[118,145,147],{"id":146},"app-owned-data","App-Owned Data",[149,150,151,153],"p",{},[130,152,46],{}," owns the modal UI, keyboard shortcut, local filtering, and result rendering boundary. Your app owns the search data.",[149,155,156,157,160],{},"Map static docs, Nuxt Content results, or any other source into ",[130,158,159],{},"DocsSearchItem[]"," before passing it to the component.",[122,162,167],{"className":163,"code":165,"language":166,"meta":128},[164],"language-ts","import type { DocsSearchItem } from '@\u002Fcomponents\u002Fdocs-search-modal'\n\nconst items: DocsSearchItem[] = pages.map(page => ({\n  title: page.title,\n  description: page.description,\n  href: page.path,\n  section: page.category,\n  content: page.bodyText\n}))\n","ts",[130,168,165],{"__ignoreMap":128},[149,170,171],{},"The component intentionally does not crawl pages, query Nuxt Content, call a search provider, rank results, or persist recent searches.",[118,173,175],{"id":174},"examples","Examples",[177,178,180],"h3",{"id":179},"default","Default",[114,182],{"name":116},[118,184,186],{"id":185},"api-reference","API Reference",[177,188,190],{"id":189},"props","Props",[192,193,194,212],"table",{},[195,196,197],"thead",{},[198,199,200,204,207,209],"tr",{},[201,202,203],"th",{},"Prop",[201,205,206],{},"Type",[201,208,180],{},[201,210,211],{},"Description",[213,214,215,235,255,274,293,312,340],"tbody",{},[198,216,217,223,227,232],{},[218,219,220],"td",{},[130,221,222],{},"items",[218,224,225],{},[130,226,159],{},[218,228,229],{},[130,230,231],{},"[]",[218,233,234],{},"Searchable items supplied by your app.",[198,236,237,242,247,252],{},[218,238,239],{},[130,240,241],{},"placeholder",[218,243,244],{},[130,245,246],{},"string",[218,248,249],{},[130,250,251],{},"'Search documentation...'",[218,253,254],{},"Search input placeholder.",[198,256,257,262,266,271],{},[218,258,259],{},[130,260,261],{},"searchLabel",[218,263,264],{},[130,265,246],{},[218,267,268],{},[130,269,270],{},"'Search documentation'",[218,272,273],{},"Accessible label for the dialog and search input.",[198,275,276,281,285,290],{},[218,277,278],{},[130,279,280],{},"emptyText",[218,282,283],{},[130,284,246],{},[218,286,287],{},[130,288,289],{},"'No pages available.'",[218,291,292],{},"Text shown when no query is entered and there are no items.",[198,294,295,300,304,309],{},[218,296,297],{},[130,298,299],{},"noResultsText",[218,301,302],{},[130,303,246],{},[218,305,306],{},[130,307,308],{},"'No results found.'",[218,310,311],{},"Text shown when a query has no matches.",[198,313,314,319,324,329],{},[218,315,316],{},[130,317,318],{},"shortcut",[218,320,321],{},[130,322,323],{},"boolean",[218,325,326],{},[130,327,328],{},"true",[218,330,331,332,335,336,339],{},"Enable ",[130,333,334],{},"Cmd+K"," \u002F ",[130,337,338],{},"Ctrl+K"," to open the modal.",[198,341,342,347,351,354],{},[218,343,344],{},[130,345,346],{},"class",[218,348,349],{},[130,350,246],{},[218,352,353],{},"—",[218,355,356],{},"Additional CSS classes for the modal panel.",[177,358,360],{"id":359},"models","Models",[192,362,363,374],{},[195,364,365],{},[198,366,367,370,372],{},[201,368,369],{},"Model",[201,371,206],{},[201,373,211],{},[213,375,376],{},[198,377,378,383,387],{},[218,379,380],{},[130,381,382],{},"open",[218,384,385],{},[130,386,323],{},[218,388,389],{},"Controls whether the modal is open.",[177,391,393],{"id":392},"slots","Slots",[192,395,396,407],{},[195,397,398],{},[198,399,400,403,405],{},[201,401,402],{},"Slot",[201,404,190],{},[201,406,211],{},[213,408,409],{},[198,410,411,416,421],{},[218,412,413],{},[130,414,415],{},"item",[218,417,418],{},[130,419,420],{},"{ item, query }",[218,422,423],{},"Custom result renderer.",[177,425,427],{"id":426},"types","Types",[122,429,432],{"className":430,"code":431,"language":166,"meta":128},[164],"interface DocsSearchItem {\n  title: string\n  href: string\n  description?: string\n  section?: string\n  content?: string\n}\n",[130,433,431],{"__ignoreMap":128},{"title":128,"searchDepth":435,"depth":435,"links":436},2,[437,438,439,440,444],{"id":120,"depth":435,"text":16},{"id":134,"depth":435,"text":135},{"id":146,"depth":435,"text":147},{"id":174,"depth":435,"text":175,"children":441},[442],{"id":179,"depth":443,"text":180},3,{"id":185,"depth":435,"text":186,"children":445},[446,447,448,449],{"id":189,"depth":443,"text":190},{"id":359,"depth":443,"text":360},{"id":392,"depth":443,"text":393},{"id":426,"depth":443,"text":427},"md",{},true,{"title":46,"description":64},"PrAa06gN3jJafoX_OoQOFi42BIYFo7LJHFKWCvUlPT0",[456,457],{"title":42,"path":43,"stem":44,"children":-1},null,1782311376738]