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