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