[{"data":1,"prerenderedAt":957},["ShallowReactive",2],{"mobile-docs-navigation":3,"command-menu-docs":114,"navigation":165,"mobile-docs-page-meta":197,"docs-pages-category":227,"\u002Fdocs\u002Fcomponents\u002Fchangelog-timeline":253,"surround-\u002Fdocs\u002Fcomponents\u002Fchangelog-timeline":954},[4],{"title":5,"path":6,"stem":7,"children":8,"page":113},"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,69,73,77,81,85,89,93,97,101,105,109],{"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},"PolaroidCard","\u002Fdocs\u002Fcomponents\u002Fpolaroid-card","docs\u002F2.components\u002F10.polaroid-card",{"title":34,"path":35,"stem":36},"FeatureCard","\u002Fdocs\u002Fcomponents\u002Ffeature-card","docs\u002F2.components\u002F11.feature-card",{"title":38,"path":39,"stem":40},"ChangelogTimeline","\u002Fdocs\u002Fcomponents\u002Fchangelog-timeline","docs\u002F2.components\u002F12.changelog-timeline",{"title":42,"path":43,"stem":44},"MetricsGrid","\u002Fdocs\u002Fcomponents\u002Fmetrics-grid","docs\u002F2.components\u002F13.metrics-grid",{"title":46,"path":47,"stem":48},"Testimonials","\u002Fdocs\u002Fcomponents\u002Ftestimonials","docs\u002F2.components\u002F13.testimonials",{"title":50,"path":51,"stem":52},"FeatureGrid","\u002Fdocs\u002Fcomponents\u002Ffeature-grid","docs\u002F2.components\u002F14.feature-grid",{"title":54,"path":55,"stem":56},"FaqTabs","\u002Fdocs\u002Fcomponents\u002Ffaq-tabs","docs\u002F2.components\u002F15.faq-tabs",{"title":58,"path":59,"stem":60},"BlogPostGrid","\u002Fdocs\u002Fcomponents\u002Fblog-post-grid","docs\u002F2.components\u002F16.blog-post-grid",{"title":62,"path":63,"stem":64},"FileAttachment","\u002Fdocs\u002Fcomponents\u002Ffile-attachment","docs\u002F2.components\u002F17.file-attachment",{"title":66,"path":67,"stem":68},"ModelPicker","\u002Fdocs\u002Fcomponents\u002Fmodel-picker","docs\u002F2.components\u002F17.model-picker",{"title":70,"path":71,"stem":72},"WorkExperience","\u002Fdocs\u002Fcomponents\u002Fwork-experience","docs\u002F2.components\u002F17.work-experience",{"title":74,"path":75,"stem":76},"ChatMessage","\u002Fdocs\u002Fcomponents\u002Fchat-message","docs\u002F2.components\u002F2.chat-message",{"title":78,"path":79,"stem":80},"ChatMessages","\u002Fdocs\u002Fcomponents\u002Fchat-messages","docs\u002F2.components\u002F3.chat-messages",{"title":82,"path":83,"stem":84},"ChatPrompt","\u002Fdocs\u002Fcomponents\u002Fchat-prompt","docs\u002F2.components\u002F4.chat-prompt",{"title":86,"path":87,"stem":88},"ChatPromptSubmit","\u002Fdocs\u002Fcomponents\u002Fchat-prompt-submit","docs\u002F2.components\u002F5.chat-prompt-submit",{"title":90,"path":91,"stem":92},"DocsSearchModal","\u002Fdocs\u002Fcomponents\u002Fdocs-search-modal","docs\u002F2.components\u002F6.docs-search-modal",{"title":94,"path":95,"stem":96},"PricingPlans","\u002Fdocs\u002Fcomponents\u002Fpricing-plans","docs\u002F2.components\u002F7.pricing-plans",{"title":98,"path":99,"stem":100},"PageToc","\u002Fdocs\u002Fcomponents\u002Fpage-toc","docs\u002F2.components\u002F8.page-toc",{"title":102,"path":103,"stem":104},"ReasoningDisclosure","\u002Fdocs\u002Fcomponents\u002Freasoning-disclosure","docs\u002F2.components\u002F8.reasoning-disclosure",{"title":106,"path":107,"stem":108},"DocsPager","\u002Fdocs\u002Fcomponents\u002Fdocs-pager","docs\u002F2.components\u002F9.docs-pager",{"title":110,"path":111,"stem":112},"HomeCta","\u002Fdocs\u002Fcomponents\u002Fhome-cta","docs\u002F2.components\u002F9.home-cta",false,[115,117,119,121,123,125,127,129,131,133,135,137,139,141,143,145,147,149,151,153,155,157,159,161,163],{"path":59,"title":58,"description":116},"Render responsive blog and content teaser grids from display-ready post data.",{"path":39,"title":38,"description":118},"Render a release timeline from app-owned changelog data with optional rich body slots.",{"path":27,"title":26,"description":120},"Build Nuxt chat interfaces with installable shadcn-vue components you own and compose.",{"path":75,"title":74,"description":122},"Render an individual chat message bubble with AI SDK parts, actions, and layout control.",{"path":79,"title":78,"description":124},"Compose chat message lists with scrolling behavior, loading states, and action-ready assistant output.",{"path":83,"title":82,"description":126},"Build chat input flows with an auto-resizing prompt, keyboard shortcuts, and flexible slot composition.",{"path":87,"title":86,"description":128},"Handle chat submit, stop, and retry actions with a status-aware control for prompt workflows.",{"path":21,"title":20,"description":130},"Explore reusable components that complement Nuxt templates and real app workflows.",{"path":107,"title":106,"description":132},"Render previous and next documentation links from app-owned page data.",{"path":91,"title":90,"description":134},"Add a lightweight local search modal to Nuxt documentation interfaces.",{"path":55,"title":54,"description":136},"Render categorized FAQ sections while keeping answer content in your app.",{"path":35,"title":34,"description":138},"Render a reusable feature, content, or navigation card with optional link and icon slot.",{"path":51,"title":50,"description":140},"Render a complete feature section from app-owned feature data.",{"path":63,"title":62,"description":142},"Render display-only file attachment UI while your app owns upload behavior.",{"path":111,"title":110,"description":144},"Render a centered marketing CTA section with an integrated starfield background.",{"path":17,"title":16,"description":146},"Start from templates or install individual components in your Nuxt project.",{"path":11,"title":10,"description":148},"Stackhacker UI is an open-source collection of Nuxt templates and components for the shadcn-vue community.",{"path":43,"title":42,"description":150},"Render a responsive marketing metrics section from app-owned data.",{"path":67,"title":66,"description":152},"Render a controlled model selector from app-owned model\u002Fprovider data.",{"path":99,"title":98,"description":154},"Render an on-page table of contents from app-supplied heading links.",{"path":31,"title":30,"description":156},"Render a tilted photo card with app-owned image data and explicit presentation controls.",{"path":95,"title":94,"description":158},"Render a responsive pricing plan section from app-owned data.",{"path":103,"title":102,"description":160},"Show app-owned AI reasoning text in a compact collapsible disclosure.",{"path":47,"title":46,"description":162},"Render a responsive social-proof section from app-owned testimonial data.",{"path":71,"title":70,"description":164},"Render compact work-history and resume lists from app-owned experience data.",[166],{"title":5,"path":6,"stem":7,"children":167,"page":113},[168,172],{"title":10,"path":11,"stem":12,"children":169},[170,171],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},{"title":20,"path":21,"stem":22,"children":173},[174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196],{"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},{"title":70,"path":71,"stem":72},{"title":74,"path":75,"stem":76},{"title":78,"path":79,"stem":80},{"title":82,"path":83,"stem":84},{"title":86,"path":87,"stem":88},{"title":90,"path":91,"stem":92},{"title":94,"path":95,"stem":96},{"title":98,"path":99,"stem":100},{"title":102,"path":103,"stem":104},{"title":106,"path":107,"stem":108},{"title":110,"path":111,"stem":112},[198,200,201,202,204,206,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226],{"path":11,"category":199},"overview",{"path":17,"category":199},{"path":21,"category":199},{"path":27,"category":203},"chat",{"path":31,"category":205},"content",{"path":35,"category":207},"marketing",{"path":39,"category":205},{"path":43,"category":207},{"path":47,"category":207},{"path":51,"category":207},{"path":55,"category":207},{"path":59,"category":205},{"path":63,"category":203},{"path":67,"category":203},{"path":71,"category":205},{"path":75,"category":203},{"path":79,"category":203},{"path":83,"category":203},{"path":87,"category":203},{"path":91,"category":205},{"path":95,"category":207},{"path":99,"category":205},{"path":103,"category":203},{"path":107,"category":205},{"path":111,"category":207},[228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252],{"path":11,"category":199},{"path":17,"category":199},{"path":21,"category":199},{"path":27,"category":203},{"path":31,"category":205},{"path":35,"category":207},{"path":39,"category":205},{"path":43,"category":207},{"path":47,"category":207},{"path":51,"category":207},{"path":55,"category":207},{"path":59,"category":205},{"path":63,"category":203},{"path":67,"category":203},{"path":71,"category":205},{"path":75,"category":203},{"path":79,"category":203},{"path":83,"category":203},{"path":87,"category":203},{"path":91,"category":205},{"path":95,"category":207},{"path":99,"category":205},{"path":103,"category":203},{"path":107,"category":205},{"path":111,"category":207},{"id":254,"title":38,"body":255,"category":205,"description":118,"extension":949,"meta":950,"navigation":951,"path":39,"seo":952,"stem":40,"__hash__":953},"docs\u002Fdocs\u002F2.components\u002F12.changelog-timeline.md",{"type":256,"value":257,"toc":928},"minimark",[258,262,266,277,281,289,293,299,326,330,348,354,358,365,440,443,447,452,454,458,464,468,474,478,484,488,492,746,750,865,869,901,905],[259,260],"component-preview",{"name":261},"ChangelogTimelineDemo",[263,264,16],"h2",{"id":265},"installation",[267,268,274],"pre",{"className":269,"code":271,"language":272,"meta":273},[270],"language-bash","npx shadcn-vue@latest add \"https:\u002F\u002Fui.stackhacker.io\u002Fr\u002Fchangelog-timeline.json\"\n","bash","",[275,276,271],"code",{"__ignoreMap":273},[263,278,280],{"id":279},"usage","Usage",[267,282,287],{"className":283,"code":285,"language":286,"meta":273},[284],"language-vue","\u003Cscript setup lang=\"ts\">\nimport { ChangelogTimeline, type ChangelogTimelineItem } from \"@\u002Fcomponents\u002Fchangelog-timeline\";\n\nconst releases: ChangelogTimelineItem[] = [\n  {\n    id: \"2026-06-27\",\n    tag: \"v1.4.0\",\n    title: \"Registry-ready release timeline\",\n    dateLabel: \"Jun 27, 2026\",\n    date: \"2026-06-27\",\n    body: \"Ship a portable timeline block with app-owned release data.\",\n  },\n];\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CChangelogTimeline :items=\"releases\" \u002F>\n\u003C\u002Ftemplate>\n","vue",[275,288,285],{"__ignoreMap":273},[263,290,292],{"id":291},"app-owned-release-data","App-Owned Release Data",[294,295,296,298],"p",{},[275,297,38],{}," owns the timeline layout, latest marker, body slot boundary, and lightweight presentational states. Your app owns release fetching, repository configuration, normalization, caching, refresh lifecycle, date formatting, markdown rendering, and analytics.",[294,300,301,302,305,306,309,310,313,314,317,318,321,322,325],{},"The component intentionally does not import Nuxt MDC, parse markdown, call ",[275,303,304],{},"useFetch",", know about ",[275,307,308],{},"ungh.cc",", or require a GitHub release response shape. Pass app-shaped items with an already formatted ",[275,311,312],{},"dateLabel",". Use the optional raw ",[275,315,316],{},"date"," only when you want the rendered ",[275,319,320],{},"time"," element to include a machine-readable ",[275,323,324],{},"datetime"," value.",[263,327,329],{"id":328},"rich-release-notes","Rich Release Notes",[294,331,332,333,336,337,339,340,343,344,347],{},"Use the ",[275,334,335],{},"item"," slot when your app wants rich release notes. The slot receives ",[275,338,335],{},", ",[275,341,342],{},"index",", and ",[275,345,346],{},"latest",", so the consuming app can render MDC, prose components, custom HTML, or plain Vue markup without turning that renderer into a registry dependency.",[267,349,352],{"className":350,"code":351,"language":286,"meta":273},[284],"\u003CChangelogTimeline :items=\"releases\">\n  \u003Ctemplate #item=\"{ item, latest }\">\n    \u003Carticle class=\"space-y-3\">\n      \u003Cp>{{ item.body }}\u003C\u002Fp>\n      \u003Cp v-if=\"latest\" class=\"font-medium\">\n        This is the latest release.\n      \u003C\u002Fp>\n    \u003C\u002Farticle>\n  \u003C\u002Ftemplate>\n\u003C\u002FChangelogTimeline>\n",[275,353,351],{"__ignoreMap":273},[263,355,357],{"id":356},"github-releases-adapter","GitHub Releases Adapter",[294,359,360,361,364],{},"Keep GitHub release fetching in app code. Map your release source into ",[275,362,363],{},"ChangelogTimelineItem"," before passing it to the component.",[366,367,368,381],"table",{},[369,370,371],"thead",{},[372,373,374,378],"tr",{},[375,376,377],"th",{},"Source field",[375,379,380],{},"Timeline item field",[382,383,384,397,412,427],"tbody",{},[372,385,386,392],{},[387,388,389],"td",{},[275,390,391],{},"tag",[387,393,394,396],{},[275,395,391],{}," and fallback key",[372,398,399,407],{},[387,400,401,404,405],{},[275,402,403],{},"name"," or ",[275,406,391],{},[387,408,409],{},[275,410,411],{},"title",[372,413,414,419],{},[387,415,416],{},[275,417,418],{},"publishedAt",[387,420,421,422,424,425],{},"raw ",[275,423,316],{}," plus app-formatted ",[275,426,312],{},[372,428,429,434],{},[387,430,431],{},[275,432,433],{},"markdown",[387,435,436,439],{},[275,437,438],{},"body"," or slot-rendered rich content",[294,441,442],{},"This keeps the generated registry item independent from network clients, API providers, and markdown modules.",[263,444,446],{"id":445},"examples","Examples",[448,449,451],"h3",{"id":450},"default","Default",[259,453],{"name":261},[448,455,457],{"id":456},"loading","Loading",[267,459,462],{"className":460,"code":461,"language":286,"meta":273},[284],"\u003CChangelogTimeline loading \u002F>\n",[275,463,461],{"__ignoreMap":273},[448,465,467],{"id":466},"empty","Empty",[267,469,472],{"className":470,"code":471,"language":286,"meta":273},[284],"\u003CChangelogTimeline\n  :items=\"[]\"\n  empty-title=\"No public releases\"\n  empty-description=\"Connect your app-owned release source when you are ready to publish.\"\n\u002F>\n",[275,473,471],{"__ignoreMap":273},[448,475,477],{"id":476},"error-with-retry","Error With Retry",[267,479,482],{"className":480,"code":481,"language":286,"meta":273},[284],"\u003CChangelogTimeline\n  error=\"The release source did not respond.\"\n  show-retry\n  @retry=\"refreshReleases\"\n\u002F>\n",[275,483,481],{"__ignoreMap":273},[263,485,487],{"id":486},"api-reference","API Reference",[448,489,491],{"id":490},"props","Props",[366,493,494,509],{},[369,495,496],{},[372,497,498,501,504,506],{},[375,499,500],{},"Prop",[375,502,503],{},"Type",[375,505,451],{},[375,507,508],{},"Description",[382,510,511,531,550,569,589,608,627,646,672,691,709,728],{},[372,512,513,518,523,528],{},[387,514,515],{},[275,516,517],{},"items",[387,519,520],{},[275,521,522],{},"ChangelogTimelineItem[]",[387,524,525],{},[275,526,527],{},"[]",[387,529,530],{},"Release items supplied by your app.",[372,532,533,537,542,547],{},[387,534,535],{},[275,536,456],{},[387,538,539],{},[275,540,541],{},"boolean",[387,543,544],{},[275,545,546],{},"false",[387,548,549],{},"Shows loading skeletons when no items are present.",[372,551,552,557,562,566],{},[387,553,554],{},[275,555,556],{},"error",[387,558,559],{},[275,560,561],{},"boolean | string",[387,563,564],{},[275,565,546],{},[387,567,568],{},"Shows an error state. A string is rendered as supporting error copy.",[372,570,571,576,581,586],{},[387,572,573],{},[275,574,575],{},"latestLabel",[387,577,578],{},[275,579,580],{},"string",[387,582,583],{},[275,584,585],{},"\"Latest release\"",[387,587,588],{},"Label shown for the latest item.",[372,590,591,596,600,605],{},[387,592,593],{},[275,594,595],{},"emptyTitle",[387,597,598],{},[275,599,580],{},[387,601,602],{},[275,603,604],{},"\"No releases yet\"",[387,606,607],{},"Empty state title.",[372,609,610,615,619,624],{},[387,611,612],{},[275,613,614],{},"emptyDescription",[387,616,617],{},[275,618,580],{},[387,620,621],{},[275,622,623],{},"\"Published releases will appear here as changelog entries.\"",[387,625,626],{},"Empty state description.",[372,628,629,634,638,643],{},[387,630,631],{},[275,632,633],{},"errorTitle",[387,635,636],{},[275,637,580],{},[387,639,640],{},[275,641,642],{},"\"Could not load releases\"",[387,644,645],{},"Error state title.",[372,647,648,653,657,662],{},[387,649,650],{},[275,651,652],{},"errorDescription",[387,654,655],{},[275,656,580],{},[387,658,659],{},[275,660,661],{},"\"Check the release source or try loading the changelog again.\"",[387,663,664,665,667,668,671],{},"Error state description used when ",[275,666,556],{}," is ",[275,669,670],{},"true",".",[372,673,674,679,683,688],{},[387,675,676],{},[275,677,678],{},"retryLabel",[387,680,681],{},[275,682,580],{},[387,684,685],{},[275,686,687],{},"\"Try again\"",[387,689,690],{},"Retry button label.",[372,692,693,698,702,706],{},[387,694,695],{},[275,696,697],{},"showRetry",[387,699,700],{},[275,701,541],{},[387,703,704],{},[275,705,546],{},[387,707,708],{},"Shows a native retry button in the error state.",[372,710,711,716,720,725],{},[387,712,713],{},[275,714,715],{},"ariaLabel",[387,717,718],{},[275,719,580],{},[387,721,722],{},[275,723,724],{},"\"Changelog timeline\"",[387,726,727],{},"Accessible label for the timeline list.",[372,729,730,735,740,743],{},[387,731,732],{},[275,733,734],{},"class",[387,736,737],{},[275,738,739],{},"HTMLAttributes[\"class\"]",[387,741,742],{},"—",[387,744,745],{},"Additional CSS classes for the root element.",[448,747,749],{"id":748},"item-type","Item Type",[366,751,752,763],{},[369,753,754],{},[372,755,756,759,761],{},[375,757,758],{},"Field",[375,760,503],{},[375,762,508],{},[382,764,765,782,795,808,821,837,850],{},[372,766,767,772,776],{},[387,768,769],{},[275,770,771],{},"id",[387,773,774],{},[275,775,580],{},[387,777,778,779,781],{},"Stable item id. Falls back to ",[275,780,391],{}," or title-derived key when omitted.",[372,783,784,788,792],{},[387,785,786],{},[275,787,391],{},[387,789,790],{},[275,791,580],{},[387,793,794],{},"Optional release tag supplied by your app.",[372,796,797,801,805],{},[387,798,799],{},[275,800,411],{},[387,802,803],{},[275,804,580],{},[387,806,807],{},"Release title.",[372,809,810,814,818],{},[387,811,812],{},[275,813,312],{},[387,815,816],{},[275,817,580],{},[387,819,820],{},"App-formatted display date.",[372,822,823,827,831],{},[387,824,825],{},[275,826,316],{},[387,828,829],{},[275,830,580],{},[387,832,833,834,836],{},"Optional machine-readable date for the ",[275,835,324],{}," attribute.",[372,838,839,843,847],{},[387,840,841],{},[275,842,438],{},[387,844,845],{},[275,846,580],{},[387,848,849],{},"Optional plain text fallback body.",[372,851,852,856,860],{},[387,853,854],{},[275,855,346],{},[387,857,858],{},[275,859,541],{},[387,861,862,863,671],{},"Marks this item as latest. Defaults to the first item when no item sets ",[275,864,346],{},[448,866,868],{"id":867},"slots","Slots",[366,870,871,882],{},[369,872,873],{},[372,874,875,878,880],{},[375,876,877],{},"Slot",[375,879,491],{},[375,881,508],{},[382,883,884],{},[372,885,886,890,895],{},[387,887,888],{},[275,889,335],{},[387,891,892],{},[275,893,894],{},"{ item, index, latest }",[387,896,897,898,671],{},"Rich body renderer for each release item. Falls back to ",[275,899,900],{},"item.body",[448,902,904],{"id":903},"emits","Emits",[366,906,907,916],{},[369,908,909],{},[372,910,911,914],{},[375,912,913],{},"Event",[375,915,508],{},[382,917,918],{},[372,919,920,925],{},[387,921,922],{},[275,923,924],{},"retry",[387,926,927],{},"Emitted when the optional retry button is clicked. The app owns refresh behavior.",{"title":273,"searchDepth":929,"depth":929,"links":930},2,[931,932,933,934,935,936,943],{"id":265,"depth":929,"text":16},{"id":279,"depth":929,"text":280},{"id":291,"depth":929,"text":292},{"id":328,"depth":929,"text":329},{"id":356,"depth":929,"text":357},{"id":445,"depth":929,"text":446,"children":937},[938,940,941,942],{"id":450,"depth":939,"text":451},3,{"id":456,"depth":939,"text":457},{"id":466,"depth":939,"text":467},{"id":476,"depth":939,"text":477},{"id":486,"depth":929,"text":487,"children":944},[945,946,947,948],{"id":490,"depth":939,"text":491},{"id":748,"depth":939,"text":749},{"id":867,"depth":939,"text":868},{"id":903,"depth":939,"text":904},"md",{},true,{"title":38,"description":118},"CnmcKdIdVIpk9H60PvQwH-Aqa7hxAGWdMcNUimC43cg",[955,956],{"title":34,"path":35,"stem":36,"children":-1},{"title":42,"path":43,"stem":44,"children":-1},1782622222371]