[{"data":1,"prerenderedAt":431},["ShallowReactive",2],{"mobile-docs-navigation":3,"command-menu-docs":70,"navigation":99,"mobile-docs-page-meta":120,"docs-pages-category":139,"\u002Fdocs\u002Fcomponents\u002Fpage-toc":154,"surround-\u002Fdocs\u002Fcomponents\u002Fpage-toc":428},[4],{"title":5,"path":6,"stem":7,"children":8,"page":69},"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,53,57,61,65],{"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",{"title":54,"path":55,"stem":56},"PageToc","\u002Fdocs\u002Fcomponents\u002Fpage-toc","docs\u002F2.components\u002F8.page-toc",{"title":58,"path":59,"stem":60},"ReasoningDisclosure","\u002Fdocs\u002Fcomponents\u002Freasoning-disclosure","docs\u002F2.components\u002F8.reasoning-disclosure",{"title":62,"path":63,"stem":64},"DocsPager","\u002Fdocs\u002Fcomponents\u002Fdocs-pager","docs\u002F2.components\u002F9.docs-pager",{"title":66,"path":67,"stem":68},"HomeCta","\u002Fdocs\u002Fcomponents\u002Fhome-cta","docs\u002F2.components\u002F9.home-cta",false,[71,73,75,77,79,81,83,85,87,89,91,93,95,97],{"path":27,"title":26,"description":72},"Build Nuxt chat interfaces with installable shadcn-vue components you own and compose.",{"path":31,"title":30,"description":74},"Render an individual chat message bubble with AI SDK parts, actions, and layout control.",{"path":35,"title":34,"description":76},"Compose chat message lists with scrolling behavior, loading states, and action-ready assistant output.",{"path":39,"title":38,"description":78},"Build chat input flows with an auto-resizing prompt, keyboard shortcuts, and flexible slot composition.",{"path":43,"title":42,"description":80},"Handle chat submit, stop, and retry actions with a status-aware control for prompt workflows.",{"path":21,"title":20,"description":82},"Explore reusable components that complement Nuxt templates and real app workflows.",{"path":63,"title":62,"description":84},"Render previous and next documentation links from app-owned page data.",{"path":47,"title":46,"description":86},"Add a lightweight local search modal to Nuxt documentation interfaces.",{"path":67,"title":66,"description":88},"Render a centered marketing CTA section with an integrated starfield background.",{"path":17,"title":16,"description":90},"Start from templates or install individual components in your Nuxt project.",{"path":11,"title":10,"description":92},"Stackhacker UI is an open-source collection of Nuxt templates and components for the shadcn-vue community.",{"path":55,"title":54,"description":94},"Render an on-page table of contents from app-supplied heading links.",{"path":51,"title":50,"description":96},"Render a responsive pricing plan section from app-owned data.",{"path":59,"title":58,"description":98},"Show app-owned AI reasoning text in a compact collapsible disclosure.",[100],{"title":5,"path":6,"stem":7,"children":101,"page":69},[102,106],{"title":10,"path":11,"stem":12,"children":103},[104,105],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},{"title":20,"path":21,"stem":22,"children":107},[108,109,110,111,112,113,114,115,116,117,118,119],{"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},{"title":54,"path":55,"stem":56},{"title":58,"path":59,"stem":60},{"title":62,"path":63,"stem":64},{"title":66,"path":67,"stem":68},[121,123,124,125,127,128,129,130,131,133,135,136,137,138],{"path":11,"category":122},"overview",{"path":17,"category":122},{"path":21,"category":122},{"path":27,"category":126},"chat",{"path":31,"category":126},{"path":35,"category":126},{"path":39,"category":126},{"path":43,"category":126},{"path":47,"category":132},"content",{"path":51,"category":134},"marketing",{"path":55,"category":132},{"path":59,"category":126},{"path":63,"category":132},{"path":67,"category":134},[140,141,142,143,144,145,146,147,148,149,150,151,152,153],{"path":11,"category":122},{"path":17,"category":122},{"path":21,"category":122},{"path":27,"category":126},{"path":31,"category":126},{"path":35,"category":126},{"path":39,"category":126},{"path":43,"category":126},{"path":47,"category":132},{"path":51,"category":134},{"path":55,"category":132},{"path":59,"category":126},{"path":63,"category":132},{"path":67,"category":134},{"id":155,"title":54,"body":156,"category":132,"description":94,"extension":423,"meta":424,"navigation":425,"path":55,"seo":426,"stem":56,"__hash__":427},"docs\u002Fdocs\u002F2.components\u002F8.page-toc.md",{"type":157,"value":158,"toc":408},"minimark",[159,163,167,178,182,190,201,209,213,218,229,235,238,242,252,255,261,265,270,272,276,280,398,402],[160,161],"component-preview",{"name":162},"PageTocDemo",[164,165,16],"h2",{"id":166},"installation",[168,169,175],"pre",{"className":170,"code":172,"language":173,"meta":174},[171],"language-bash","npx shadcn-vue@latest add \"https:\u002F\u002Fui.stackhacker.io\u002Fr\u002Fpage-toc.json\"\n","bash","",[176,177,172],"code",{"__ignoreMap":174},[164,179,181],{"id":180},"usage","Usage",[168,183,188],{"className":184,"code":186,"language":187,"meta":174},[185],"language-vue","\u003Cscript setup lang=\"ts\">\nimport { PageToc, type PageTocItem } from \"@\u002Fcomponents\u002Fpage-toc\";\n\nconst headings: PageTocItem[] = [\n  { id: \"overview\", title: \"Overview\", depth: 2 },\n  { id: \"installation\", title: \"Installation\", depth: 2 },\n  { id: \"usage\", title: \"Usage\", depth: 2 },\n  { id: \"examples\", title: \"Examples\", depth: 3 },\n];\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CPageToc :items=\"headings\" class=\"sticky top-6\" \u002F>\n\u003C\u002Ftemplate>\n","vue",[176,189,186],{"__ignoreMap":174},[191,192,193,196,197,200],"p",{},[176,194,195],{},"href"," defaults to ",[176,198,199],{},"#${id}",". Pass a full path when your page shell needs route-aware anchors.",[168,202,207],{"className":203,"code":205,"language":206,"meta":174},[204],"language-ts","const headings: PageTocItem[] = [\n  { id: \"installation\", title: \"Installation\", href: \"\u002Fdocs\u002Fcomponents\u002Fpage-toc#installation\" },\n];\n","ts",[176,208,205],{"__ignoreMap":174},[164,210,212],{"id":211},"app-owned-headings","App-Owned Headings",[191,214,215,217],{},[176,216,54],{}," owns the visual table-of-contents list and active-link behavior for the data you pass in. Your app owns markdown parsing, heading extraction, page layout, and current route handling.",[191,219,220,221,224,225,228],{},"For Nuxt Content, map ",[176,222,223],{},"page.body.toc.links"," or another app-level source into ",[176,226,227],{},"PageTocItem[]"," before rendering the component.",[168,230,233],{"className":231,"code":232,"language":206,"meta":174},[204],"import type { PageTocItem } from \"@\u002Fcomponents\u002Fpage-toc\";\n\nconst headings: PageTocItem[] = page.body.toc.links.flatMap(link => [\n  {\n    id: link.id,\n    title: link.text,\n    depth: link.depth,\n  },\n  ...(link.children ?? []).map(child => ({\n    id: child.id,\n    title: child.text,\n    depth: child.depth,\n  })),\n]);\n",[176,234,232],{"__ignoreMap":174},[191,236,237],{},"The component intentionally does not import Nuxt Content types, query content collections, inspect the current route, or create the page's aside column.",[164,239,241],{"id":240},"active-state","Active State",[191,243,244,245,247,248,251],{},"By default, ",[176,246,54],{}," observes matching heading elements by ",[176,249,250],{},"id"," in the browser and highlights the active link.",[191,253,254],{},"Use controlled active state when your page already knows the active heading, or when rendering a static preview.",[168,256,259],{"className":257,"code":258,"language":187,"meta":174},[185],"\u003CPageToc\n  :items=\"headings\"\n  active-id=\"installation\"\n  :track-active=\"false\"\n\u002F>\n",[176,260,258],{"__ignoreMap":174},[164,262,264],{"id":263},"examples","Examples",[266,267,269],"h3",{"id":268},"default","Default",[160,271],{"name":162},[164,273,275],{"id":274},"api-reference","API Reference",[266,277,279],{"id":278},"props","Props",[281,282,283,301],"table",{},[284,285,286],"thead",{},[287,288,289,293,296,298],"tr",{},[290,291,292],"th",{},"Prop",[290,294,295],{},"Type",[290,297,269],{},[290,299,300],{},"Description",[302,303,304,324,344,364,381],"tbody",{},[287,305,306,312,316,321],{},[307,308,309],"td",{},[176,310,311],{},"items",[307,313,314],{},[176,315,227],{},[307,317,318],{},[176,319,320],{},"[]",[307,322,323],{},"Heading links supplied by your app.",[287,325,326,331,336,341],{},[307,327,328],{},[176,329,330],{},"title",[307,332,333],{},[176,334,335],{},"string",[307,337,338],{},[176,339,340],{},"\"On this page\"",[307,342,343],{},"Label rendered above the links. Use an empty string to hide it.",[287,345,346,351,356,361],{},[307,347,348],{},[176,349,350],{},"trackActive",[307,352,353],{},[176,354,355],{},"boolean",[307,357,358],{},[176,359,360],{},"true",[307,362,363],{},"Observe matching page headings and update the active link.",[287,365,366,371,375,378],{},[307,367,368],{},[176,369,370],{},"activeId",[307,372,373],{},[176,374,335],{},[307,376,377],{},"—",[307,379,380],{},"Controlled active heading id. Disables internal active tracking when supplied.",[287,382,383,388,393,395],{},[307,384,385],{},[176,386,387],{},"class",[307,389,390],{},[176,391,392],{},"HTMLAttributes[\"class\"]",[307,394,377],{},[307,396,397],{},"Additional CSS classes for the root nav.",[266,399,401],{"id":400},"types","Types",[168,403,406],{"className":404,"code":405,"language":206,"meta":174},[204],"interface PageTocItem {\n  id: string;\n  title: string;\n  href?: string;\n  depth?: number;\n}\n",[176,407,405],{"__ignoreMap":174},{"title":174,"searchDepth":409,"depth":409,"links":410},2,[411,412,413,414,415,419],{"id":166,"depth":409,"text":16},{"id":180,"depth":409,"text":181},{"id":211,"depth":409,"text":212},{"id":240,"depth":409,"text":241},{"id":263,"depth":409,"text":264,"children":416},[417],{"id":268,"depth":418,"text":269},3,{"id":274,"depth":409,"text":275,"children":420},[421,422],{"id":278,"depth":418,"text":279},{"id":400,"depth":418,"text":401},"md",{},true,{"title":54,"description":94},"HqAU_56XFXZ8yX_txl_RlsH4npXlYOrq_iYFBoYNw0Y",[429,430],{"title":50,"path":51,"stem":52,"children":-1},{"title":58,"path":59,"stem":60,"children":-1},1782382663280]