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