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