1import{a as ae}from"./chunk-YR3OENHY.js";import{a as re}from"./chunk-D7L6FC4M.js";import{a as ie}from"./chunk-VKHNYQM2.js";import"./chunk-VM6UVBDM.js";import{j as te,l as ne}from"./chunk-G2PU7N4Z.js";import{a as oe}from"./chunk-UZXQ3HR5.js";import"./chunk-HD24UKVR.js";import"./chunk-3GYEHCKE.js";import"./chunk-5AZVRCJ5.js";import"./chunk-LLKRHPEX.js";import"./chunk-EYROE7GJ.js";import"./chunk-RSGFAPF4.js";import"./chunk-XDBH7HEM.js";import"./chunk-FPAFD7PF.js";import"./chunk-3T5NHWU6.js";import"./chunk-J3LRG2U7.js";import"./chunk-XYLTODMW.js";import{Bb as V,Hb as $,Jc as ee,Rb as W,Zb as q,a as X,b as Y,bc as K,ja as Z,oc as Q}from"./chunk-WAEISIZW.js";import{q as J}from"./chunk-AU53IGB6.js";import"./chunk-ETS6BJW7.js";import{$a as i,$c as j,Da as D,Gb as R,Hb as O,Ib as F,Ic as B,Jc as G,Nb as p,Pb as g,Sb as w,Tb as y,Ub as h,Vb as a,Wb as s,X as C,Xb as u,_c as H,aa as l,cc as U,eb as L,ga as S,gc as E,ha as A,ic as c,ma as I,rb as N,sa as f,ta as M,tb as P,wc as d,xc as v,ya as T,yc as z,zb as k}from"./chunk-H4GOOYKI.js";import{a as x,b}from"./chunk-GAL4ENT6.js";var se={meta:{month:"April 2025",year:2025,monthNumber:4,date:new Date(2025,3,1),id:"04-2025"},overview:"Form foundations and CLI launch! New Input and Form components with validation support. Official CLI tool released for easy project initialization and component installation. The Form component has since been discontinued \u2014 use Field instead, which covers the same ground and is what the form guides are built on.",loadExamples:()=>import("./chunk-DNVW4LW7.js").then(e=>e.APRIL_2025_EXAMPLES)};var ce={meta:{month:"August 2025",year:2025,monthNumber:8,date:new Date(2025,7,1),id:"08-2025"},overview:"Enhanced navigation and display components. New Avatar component with fallback support, Divider for content separation, and Breadcrumb for hierarchical navigation.",loadExamples:()=>import("./chunk-XBCIOZBH.js").then(e=>e.AUGUST_2025_EXAMPLES)};var le={meta:{month:"December 2025",year:2025,monthNumber:12,date:new Date(2025,11,1),id:"12-2025"},overview:"Major infrastructure improvements this month! We focused on developer experience with a new provider system, CLI enhancements with our own private registry, and streamlined dark-mode setup.",highlights:[{title:"provideZard()",description:"New provider function for streamlined app configuration. Add event manager plugins and other Zard utilities with a single function call in your app.config.ts.",icon:"zap",code:"provideZard()"},{title:"Private Registry System",description:"The CLI now uses our own private registry instead of fetching from GitHub. This brings significant performance improvements, better version control, and more reliable component installations.",icon:"package"},{title:"Dark Mode via CLI",description:"Adding dark-mode support to your project is now as simple as running a single CLI command. It automatically configures everything you need.",icon:"moon",code:"npx zard-cli@latest add dark-mode"}]};var de={meta:{month:"July 2025",year:2025,monthNumber:7,date:new Date(2025,6,1),id:"07-2025"},overview:"Major release of navigation and content organization components. New Tabs for multi-view interfaces, Accordion for collapsible content, and Tooltip for contextual information. Theming system improvements with new color palettes.",loadExamples:()=>import("./chunk-U7BB3CZ3.js").then(e=>e.JULY_2025_EXAMPLES)};var me={meta:{month:"June 2025",year:2025,monthNumber:6,date:new Date(2025,5,1),id:"06-2025"},overview:"Overlay components release! New Dialog, Popover, Alert Dialog, and Dropdown Menu components. CVA integration for type-safe styling variants across all components.",loadExamples:()=>import("./chunk-NDRY567T.js").then(e=>e.JUNE_2025_EXAMPLES)};var pe={meta:{month:"March 2025",year:2025,monthNumber:3,date:new Date(2025,2,1),id:"03-2025"},overview:"\u{1F389} Initial release of ZardUI! An Angular component library built with TailwindCSS v4, featuring standalone components, signal-based reactivity, and modern Angular architecture. Core components including Button, Card, Badge, Alert, and Table.",loadExamples:()=>import("./chunk-I4DWS2VQ.js").then(e=>e.MARCH_2025_EXAMPLES)};var ge={meta:{month:"May 2025",year:2025,monthNumber:5,date:new Date(2025,4,1),id:"05-2025"},overview:"Comprehensive form controls release! New Select, Checkbox, Radio, Switch, and Slider components with full Angular Reactive Forms integration and ControlValueAccessor support.",loadExamples:()=>import("./chunk-ULX25GQB.js").then(e=>e.MAY_2025_EXAMPLES)};var he={meta:{month:"November 2025",year:2025,monthNumber:11,date:new Date(2025,10,1),id:"11-2025"}
1,overview:"Major updates this month with new interactive components including Carousel, Button Group, Input Group, and Kbd components. Enhanced user experience with better form controls and keyboard navigation support.",loadExamples:()=>import("./chunk-M4OIKCJ6.js").then(e=>e.NOVEMBER_2025_EXAMPLES)};var ue={meta:{month:"October 2025",year:2025,monthNumber:10,date:new Date(2025,9,1),id:"10-2025"},overview:"Breaking changes with icons migration from lucide-static to lucide-angular for better performance. New layout components including Sheet and Empty state component for better UX.",loadExamples:()=>import("./chunk-DYNGN3IW.js").then(e=>e.OCTOBER_2025_EXAMPLES)};var ve={meta:{month:"September 2025",year:2025,monthNumber:9,date:new Date(2025,8,1),id:"09-2025"},overview:"Focus on loading and feedback components this month. New Progress, Skeleton, and Loader components for better perceived performance and user feedback during async operations.",loadExamples:()=>import("./chunk-SPFGMQNE.js").then(e=>e.SEPTEMBER_2025_EXAMPLES)};var fe={meta:{month:"August 2026",year:2026,monthNumber:8,date:new Date(2026,7,1),id:"08-2026"},overview:"One-time passwords land this month. We added the Input OTP component, with grouped slots, separators, pattern validation, and paste support out of the box.",loadExamples:()=>import("./chunk-C277HP2Q.js").then(e=>e.AUGUST_2026_EXAMPLES)};var _e={meta:{month:"July 2026",year:2026,monthNumber:7,date:new Date(2026,6,1),id:"07-2026"},overview:"Four new components this month \u2014 Field, Item, Textarea, and Sonner \u2014 and a reorganisation that moved every demo and API doc next to the component it documents.",highlights:[{title:"Toast is now Sonner",description:"The `toast` component has been replaced by `sonner`. Swap `z-toast` / `z-toaster` for `z-sonner`, import `ZardSonnerService` instead of the toast service, and reinstall under the new name. The old component no longer ships.",icon:"package",code:"npx zard-cli@latest add sonner"},{title:"Demos and docs live with the components",description:"Every demo, API reference, and overview moved from the documentation site into `libs/zard/.../components/<name>/`. Nothing changes for you as a consumer \u2014 the CLI and the registry are unaffected \u2014 but contributing a component is now a single folder.",icon:"code"}],loadExamples:()=>import("./chunk-42WMLMKC.js").then(e=>e.JULY_2026_EXAMPLES)};var we={meta:{month:"March 2026",year:2026,monthNumber:3,date:new Date(2026,2,1),id:"03-2026"},overview:"Complete icon system migration! We replaced the custom `ZardIconComponent` with `@ng-icons/lucide`, bringing better tree-shaking, a wider icon selection, and a simpler API across all components.",highlights:[{title:"Migration to @ng-icons/lucide",description:"All components now use `NgIcon` from `@ng-icons/core` with icons sourced from `@ng-icons/lucide`. This replaces the deprecated `ZardIconComponent` and the custom icon registry, resulting in better tree-shaking and smaller bundle sizes.",icon:"package"},{title:"New Icon API",description:'Icons are now provided at component level using `provideIcons()` in `viewProviders` and rendered with `<ng-icon name="lucideIconName" />`. Import only the icons you need from `@ng-icons/lucide`.',icon:"code"},{title:"Updated Dependencies",description:"The `lucide-angular` dependency has been replaced by `@ng-icons/core` and `@ng-icons/lucide`. The CLI `init` command now installs these automatically.",icon:"terminal",code:"npm install @ng-icons/core @ng-icons/lucide"}]};var ye={meta:{month:"May 2026",year:2026,monthNumber:5,date:new Date(2026,4,1),id:"05-2026"},overview:"A quieter month focused on form correctness. We taught the input directive to speak numbers, and we changed one dialog default that had been surprising people.",highlights:[{title:"Numeric inputs keep their type",description:'The input directive now reads and writes real numbers for `type="number"` and `type="range"`, so a signal or reactive form typed as `number` stays a number instead of being turned into a string. An empty field resolves to `null`.',icon:"code"},{title:"Alert Dialog no longer closes on the backdrop",description:"`zMaskClosable` now defaults to `false` on Alert Dialog. A confirmation is meant to be answered, not dismissed by a stray click. If you relied on the old behaviour, opt back in explicitly.",icon:"shield",code:"zMaskClosable: true"}]};var Ee=[fe,_e,ye,we,le,he,ue,ve,ce,de,me,ge,se,pe].sort((e,o)=>o.meta.date.getTime()-e.meta.date.getTime());var be=(()=>{class e{entries=Ee;loaded=f({});requests=new Map;examplesOf(t){return this.loaded()[t]}load(t){let{id:n}=t.meta,r=this.requests.get(n);if(r)return r;if(!t.loadExamples)return Promise.resolve();let m=t.loadExamples().then(_=>this.loaded.update(Se=>b(x({},Se),{[n]:_})));return this.requests.set(n,m),m}loadAll(){return Promise.all(this.entries.map(t=>this.load(t))).then(()=>{})}static \u0275fac=function(n){return new(n||e)};static \u0275prov=C({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();
1var Ce=(()=>{class e{elementRef=l(T);destroyRef=l(I);viewportEnterMargin=j("600px");viewportEnter=H();constructor(){L(()=>{if(typeof IntersectionObserver>"u"){this.viewportEnter.emit();return}let t=new IntersectionObserver(n=>{n.some(r=>r.isIntersecting)&&(t.disconnect(),this.viewportEnter.emit())},{rootMargin:this.viewportEnterMargin()});t.observe(this.elementRef.nativeElement),this.destroyRef.onDestroy(()=>t.disconnect())})}static \u0275fac=function(n){return new(n||e)};static \u0275dir=P({type:e,selectors:[["","viewportEnter",""]],inputs:{viewportEnterMargin:[1,"viewportEnterMargin"]},outputs:{viewportEnter:"viewportEnter"}})}return e})();var Ae=()=>[import("./chunk-WN7BDZT3.js").then(e=>e.ChangelogExamplesComponent)],Ie=()=>[],Me=(e,o)=>o.meta.id,Te=(e,o)=>o.title;function De(e,o){if(e&1&&(a(0,"div",18)(1,"code",19),d(2),s()()),e&2){let t=c().$implicit;i(2),v(t.code)}}function Le(e,o){if(e&1&&(a(0,"div",12)(1,"div",13)(2,"div",14),u(3,"ng-icon",15),s(),a(4,"h4",16),d(5),s()(),a(6,"p",17),d(7),s(),p(8,De,3,1,"div",18),s()),e&2){let t=o.$implicit,n=c(3);i(3),h("name",n.iconOf(t.icon)),i(2),v(t.title),i(2),v(t.description),i(),g(t.code?8:-1)}}function Ne(e,o){if(e&1&&(a(0,"section",6)(1,"h3",10),d(2,"Highlights"),s(),a(3,"div",11),w(4,Le,9,4,"div",12,Te),s()()),e&2){let t=c().$implicit;i(4),y(t.highlights)}}function Pe(e,o){if(e&1&&u(0,"z-changelog-examples",20),e&2){let t=c(2).$implicit,n=c();h("examples",n.examplesOf(t.meta.id)??G(1,Ie))}}function ke(e,o){if(e&1&&(k(0,Pe,1,2),R(1,0,Ae,null,null,null,null,null,null,1)),e&2){let t=c().$implicit,n=c();i(),F(n.examplesOf(t.meta.id)),O(n.examplesOf(t.meta.id))}}function Re(e,o){if(e&1){let t=U();a(0,"div",5),E("viewportEnter",function(){let r=S(t).$implicit,m=c();return A(m.onEntryApproaching(r))}),a(1,"div",6)(2,"div",7)(3,"h2",8),d(4),s()(),a(5,"p",9),d(6),s()(),p(7,Ne,6,0,"section",6),p(8,ke,3,2),s()}if(e&2){let t=o.$implicit;h("id",t.meta.id)("scrollSpyItem",t.meta.id),i(4),z(" ",t.meta.month," "),i(2),v(t.overview),i(),g(t.highlights&&t.highlights.length>0?7:-1),i(),g(t.loadExamples?8:-1)}}function Oe(e,o){e&1&&u(0,"z-alert",4)}var Fe={zap:"lucideZap",terminal:"lucideTerminal",moon:"lucideMoon",package:"lucidePackage",rocket:"lucideRocket",shield:"lucideShield",code:"lucideCode",settings:"lucideSettings"},Rt=(()=>{class e{changelogService=l(be);seoService=l(oe);pendingTasks=l(M);isBrowser=J(l(D));title="Changelog - zard/ui";activeAnchor=f(void 0);entries=this.changelogService.entries;navigationConfig={items:[{id:"overview",label:"Overview",type:"core"},...this.changelogService.entries.map(t=>({id:t.meta.id,label:t.meta.month,type:"core"}))]};ngOnInit(){if(this.seoService.setDocsSeo("Changelog","Latest updates and announcements.","/docs/changelog","og-changelog.jpg"),!this.isBrowser){let t=this.pendingTasks.add();this.changelogService.loadAll().finally(t)}}iconOf(t){return Fe[t]}examplesOf(t){return this.changelogService.examplesOf(t)}onEntryApproaching(t){this.changelogService.load(t)}static \u0275fac=function(n){return new(n||e)};static \u0275cmp=N({type:e,selectors:[["z-changelog"]],features:[B([],[X({lucideCode:Z,lucideMoon:V,lucidePackage:$,lucideRocket:W,lucideSettings:q,lucideShield:K,lucideTerminal:Q,lucideZap:ee})])],decls:6,vars:4,consts:[["scrollSpy","",3,"scrollSpyChange","title","navigationConfig","activeAnchor"],["title","Changelog","description","Latest updates, new components, and improvements to ZardUI.","scrollSpyItem","overview","id","overview"],[1,"mt-8","space-y-16"],["scrollSpyItem","",1,"scroll-mt-20",3,"id","scrollSpyItem"],["variant","outline","zTitle","No entries found","zDescription","No changelog entries are available at this time.",1,"mt-8"],["scrollSpyItem","",1,"scroll-mt-20",3,"viewportEnter","id","scrollSpyItem"],[1,"mb-8"],[1,"mb-4","flex","items-center","justify-between"],[1,"font-heading","mt-12","scroll-m-28","text-2xl","font-medium","tracking-tight","first:mt-0","lg:mt-20"],[1,"text-muted-foreground"],[1,"mb-4","text-xl","font-semibold"],[1,"grid","gap-4"],[1,"group","bg-card","hover:border-primary/50","relative","rounded-lg","border","p-6","transition-colors"],[1,"mb-3","flex","items-center","gap-3"],[1,"bg-primary/10","text-primary","flex","h-10","w-10","shrink-0","items-center","justify-center","rounded-lg"],[1,"size-5!",3,"name"],[1,"font-semibold"],[1,"text-muted-foreground","text-sm"],[1,"mt-4"],[1,"bg-muted","rounded","px-2","py-1","font-mono","text-xs"],[3,"examples"]],template:function(n,r){n&1&&(a(0,"z-content",0),E("scrollSpyChange",function(_){return r.activeAnchor.set(_)}),u(1,"z-doc-heading",1),a(2,"div",2),w(3,Re,9,6,"div",3,Me),p(5,Oe,1,0,"z-alert",4),s()()),n&2&&(h("title",r.title)("navigationConfig",r.navigationConfig)("activeAnchor",r.activeAnchor()),i(3),y(r.entries),i(2),g(r.entries.length===0?5:-1))},dependencies:[ie,re,Y,ne,te,Ce,ae],encapsulation:2,changeDetection:0})}return e})();export{Rt as ChangeLogPage};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.