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