git-history-ui 5.0.2 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +21 -10
- package/build/frontend/chunk-5K2HNBK3.js +1 -0
- package/build/frontend/chunk-AS5GIWPS.js +1 -0
- package/build/frontend/{chunk-S56XRIZ7.js → chunk-COLUQZLF.js} +1 -1
- package/build/frontend/chunk-EAY7RGLT.js +1 -0
- package/build/frontend/{chunk-J5ZVP6TN.js → chunk-GHYTSHSI.js} +1 -1
- package/build/frontend/chunk-HHK3LJFN.js +1 -0
- package/build/frontend/chunk-HSZFTFM3.js +1 -0
- package/build/frontend/{chunk-UM7ESEXJ.js → chunk-MTI6UKQ3.js} +1 -1
- package/build/frontend/chunk-Q72JIHF2.js +1 -0
- package/build/frontend/chunk-T5NR37IK.js +1 -0
- package/build/frontend/chunk-UC5UORBU.js +1 -0
- package/build/frontend/{chunk-STUSEB5P.js → chunk-VDZMKPJL.js} +1 -1
- package/build/frontend/chunk-VT6O3MYC.js +1 -0
- package/build/frontend/index.html +2 -2
- package/build/frontend/main-TYWZN6ZP.js +1 -0
- package/build/frontend/styles-VRDIEW7E.css +1 -0
- package/dist/backend/server.d.ts.map +1 -1
- package/dist/backend/server.js +15 -0
- package/dist/backend/server.js.map +1 -1
- package/dist/backend/wrapped.d.ts +81 -0
- package/dist/backend/wrapped.d.ts.map +1 -0
- package/dist/backend/wrapped.js +251 -0
- package/dist/backend/wrapped.js.map +1 -0
- package/dist/cli.js +106 -1
- package/dist/cli.js.map +1 -1
- package/docs/API.md +1 -0
- package/package.json +7 -2
- package/scripts/check-native.js +65 -0
- package/build/frontend/chunk-6DL2ZTKG.js +0 -1
- package/build/frontend/chunk-ACWXPHRR.js +0 -1
- package/build/frontend/chunk-F6HZ5OVS.js +0 -1
- package/build/frontend/chunk-GHSRMAIR.js +0 -1
- package/build/frontend/chunk-PRY6VAFG.js +0 -1
- package/build/frontend/chunk-PXNKNORB.js +0 -1
- package/build/frontend/chunk-VGAHCEAA.js +0 -1
- package/build/frontend/chunk-XLGWMKXV.js +0 -1
- package/build/frontend/main-W5NQX3FE.js +0 -1
- package/build/frontend/styles-RQGRQK4Z.css +0 -1
- package/docs/images/demo.gif +0 -0
- package/docs/screenshot.png +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$ as m,$a as pn,A as nt,Aa as Oe,Ab as Cn,Ba as tr,C as Y,Ca as rr,Da as he,E as te,Ea as fe,Eb as En,F as ue,Fa as rn,Ga as nn,Gb as bn,H as Wt,Ha as on,Hb as In,I as le,Ia as sn,Ja as an,K as it,Ka as cn,L as Q,La as un,M as Zt,Ma as re,N as qr,P as Gr,Pa as ln,R as Wr,S as _,T as Yt,Ta as _e,U as I,V as w,Va as dn,Wa as nr,X as R,Xa as k,Ya as hn,Z as Zr,Za as fn,_ as T,_a as ir,a as l,aa as f,b as L,ba as Qt,bb as Ne,bc as Tn,ca as Yr,da as de,dc as K,ea as j,f as $r,fb as gn,g as zr,gb as ne,gc as An,h as Hr,hb as pe,hc as Mn,i as Ft,ic as ct,j as Vt,ja as Qr,jb as or,k as V,ka as ot,kb as vn,kc as Dn,l as x,la as N,lb as mn,lc as ut,ma as Kr,mb as sr,mc as Pe,na as Kt,nb as yn,nc as On,oa as st,ob as Sn,oc as _n,p as q,pa as at,pb as Rn,pc as Nn,q as D,qa as Xr,qc as lt,r as d,s as Me,t as Br,ta as De,tb as wn,u as Fr,ua as Xt,v as S,va as Jr,w as qt,wa as Jt,wc as Pn,x as O,xa as en,xc as Un,y as Gt,ya as er,yc as Ln,z as Vr,za as tn}from"./chunk-MTI6UKQ3.js";var ft=new T(""),dr=(()=>{class t{_zone;_plugins;_eventNameToPlugin=new Map;constructor(e,r){this._zone=r,e.forEach(i=>{i.manager=this}),this._plugins=e.slice().reverse()}addEventListener(e,r,i,o){return this._findPluginFor(r).addEventListener(e,r,i,o)}getZone(){return this._zone}_findPluginFor(e){let r=this._eventNameToPlugin.get(e);if(r)return r;if(r=this._plugins.find(o=>o.supports(e)),!r)throw new w(5101,!1);return this._eventNameToPlugin.set(e,r),r}static \u0275fac=function(r){return new(r||t)(m(ft),m(pe))};static \u0275prov=R({token:t,factory:t.\u0275fac})}return t})(),Ue=class{_doc;constructor(n){this._doc=n}manager},ar="ng-app-id";function xn(t){for(let n of t)n.remove()}function jn(t,n){let e=n.createElement("style");return e.textContent=t,e}function $i(t,n,e,r){let i=t.head?.querySelectorAll(`style[${ar}="${n}"],link[${ar}="${n}"]`);if(i)for(let o of i)o.removeAttribute(ar),o instanceof HTMLLinkElement?r.set(o.href.slice(o.href.lastIndexOf("/")+1),{usage:0,elements:[o]}):o.textContent&&e.set(o.textContent,{usage:0,elements:[o]})}function ur(t,n){let e=n.createElement("link");return e.setAttribute("rel","stylesheet"),e.setAttribute("href",t),e}var hr=(()=>{class t{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;constructor(e,r,i,o={}){this.doc=e,this.appId=r,this.nonce=i,$i(e,r,this.inline,this.external),this.hosts.add(e.head)}addStyles(e,r){for(let i of e)this.addUsage(i,this.inline,jn);r?.forEach(i=>this.addUsage(i,this.external,ur))}removeStyles(e,r){for(let i of e)this.removeUsage(i,this.inline);r?.forEach(i=>this.removeUsage(i,this.external))}addUsage(e,r,i){let o=r.get(e);o?o.usage++:r.set(e,{usage:1,elements:[...this.hosts].map(s=>this.addElement(s,i(e,this.doc)))})}removeUsage(e,r){let i=r.get(e);i&&(i.usage--,i.usage<=0&&(xn(i.elements),r.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])xn(e);this.hosts.clear()}addHost(e){this.hosts.add(e);for(let[r,{elements:i}]of this.inline)i.push(this.addElement(e,jn(r,this.doc)));for(let[r,{elements:i}]of this.external)i.push(this.addElement(e,ur(r,this.doc)))}removeHost(e){this.hosts.delete(e)}addElement(e,r){return this.nonce&&r.setAttribute("nonce",this.nonce),e.appendChild(r)}static \u0275fac=function(r){return new(r||t)(m(N),m(er),m(tr,8),m(Oe))};static \u0275prov=R({token:t,factory:t.\u0275fac})}return t})(),cr={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/Math/MathML"},fr=/%COMP%/g;var $n="%COMP%",zi=`_nghost-${$n}`,Hi=`_ngcontent-${$n}`,Bi=!0,Fi=new T("",{providedIn:"root",factory:()=>Bi});function Vi(t){return Hi.replace(fr,t)}function qi(t){return zi.replace(fr,t)}function zn(t,n){return n.map(e=>e.replace(fr,t))}var pr=(()=>{class t{eventManager;sharedStylesHost;appId;removeStylesOnCompDestroy;doc;platformId;ngZone;nonce;animationDisabled;maxAnimationTimeout;tracingService;rendererByCompId=new Map;defaultRenderer;platformIsServer;registry;constructor(e,r,i,o,s,a,c,u=null,h,v,y=null){this.eventManager=e,this.sharedStylesHost=r,this.appId=i,this.removeStylesOnCompDestroy=o,this.doc=s,this.platformId=a,this.ngZone=c,this.nonce=u,this.animationDisabled=h,this.maxAnimationTimeout=v,this.tracingService=y,this.platformIsServer=!1,this.defaultRenderer=new Le(e,s,c,this.platformIsServer,this.tracingService,this.registry=Qr(),this.maxAnimationTimeout)}createRenderer(e,r){if(!e||!r)return this.defaultRenderer;let i=this.getOrCreateRenderer(e,r);return i instanceof dt?i.applyToHost(e):i instanceof xe&&i.applyStyles(),i}getOrCreateRenderer(e,r){let i=this.rendererByCompId,o=i.get(r.id);if(!o){let s=this.doc,a=this.ngZone,c=this.eventManager,u=this.sharedStylesHost,h=this.removeStylesOnCompDestroy,v=this.platformIsServer,y=this.tracingService;switch(r.encapsulation){case rr.Emulated:o=new dt(c,u,r,this.appId,h,s,a,v,y,this.registry,this.animationDisabled,this.maxAnimationTimeout);break;case rr.ShadowDom:return new lr(c,u,e,r,s,a,this.nonce,v,y,this.registry,this.maxAnimationTimeout);default:o=new xe(c,u,r,h,s,a,v,y,this.registry,this.animationDisabled,this.maxAnimationTimeout);break}i.set(r.id,o)}return o}ngOnDestroy(){this.rendererByCompId.clear()}componentReplaced(e){this.rendererByCompId.delete(e)}static \u0275fac=function(r){return new(r||t)(m(dr),m(hr),m(er),m(Fi),m(N),m(Oe),m(pe),m(tr),m(Sn),m(Rn),m(gn,8))};static \u0275prov=R({token:t,factory:t.\u0275fac})}return t})(),Le=class{eventManager;doc;ngZone;platformIsServer;tracingService;registry;maxAnimationTimeout;data=Object.create(null);throwOnSyntheticProps=!0;constructor(n,e,r,i,o,s,a){this.eventManager=n,this.doc=e,this.ngZone=r,this.platformIsServer=i,this.tracingService=o,this.registry=s,this.maxAnimationTimeout=a}destroy(){}destroyNode=null;createElement(n,e){return e?this.doc.createElementNS(cr[e]||e,n):this.doc.createElement(n)}createComment(n){return this.doc.createComment(n)}createText(n){return this.doc.createTextNode(n)}appendChild(n,e){(kn(n)?n.content:n).appendChild(e)}insertBefore(n,e,r){n&&(kn(n)?n.content:n).insertBefore(e,r)}removeChild(n,e){let{elements:r}=this.registry;if(r){r.animate(e,()=>e.remove(),this.maxAnimationTimeout);return}e.remove()}selectRootElement(n,e){let r=typeof n=="string"?this.doc.querySelector(n):n;if(!r)throw new w(-5104,!1);return e||(r.textContent=""),r}parentNode(n){return n.parentNode}nextSibling(n){return n.nextSibling}setAttribute(n,e,r,i){if(i){e=i+":"+e;let o=cr[i];o?n.setAttributeNS(o,e,r):n.setAttribute(e,r)}else n.setAttribute(e,r)}removeAttribute(n,e,r){if(r){let i=cr[r];i?n.removeAttributeNS(i,e):n.removeAttribute(`${r}:${e}`)}else n.removeAttribute(e)}addClass(n,e){n.classList.add(e)}removeClass(n,e){n.classList.remove(e)}setStyle(n,e,r,i){i&(_e.DashCase|_e.Important)?n.style.setProperty(e,r,i&_e.Important?"important":""):n.style[e]=r}removeStyle(n,e,r){r&_e.DashCase?n.style.removeProperty(e):n.style[e]=""}setProperty(n,e,r){n!=null&&(n[e]=r)}setValue(n,e){n.nodeValue=e}listen(n,e,r,i){if(typeof n=="string"&&(n=Pe().getGlobalEventTarget(this.doc,n),!n))throw new w(5102,!1);let o=this.decoratePreventDefault(r);return this.tracingService?.wrapEventListener&&(o=this.tracingService.wrapEventListener(n,e,o)),this.eventManager.addEventListener(n,e,o,i)}decoratePreventDefault(n){return e=>{if(e==="__ngUnwrap__")return n;n(e)===!1&&e.preventDefault()}}};function kn(t){return t.tagName==="TEMPLATE"&&t.content!==void 0}var lr=class extends Le{sharedStylesHost;hostEl;shadowRoot;constructor(n,e,r,i,o,s,a,c,u,h,v){super(n,o,s,c,u,h,v),this.sharedStylesHost=e,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);let y=i.styles;y=zn(i.id,y);for(let C of y){let M=document.createElement("style");a&&M.setAttribute("nonce",a),M.textContent=C,this.shadowRoot.appendChild(M)}let E=i.getExternalStyles?.();if(E)for(let C of E){let M=ur(C,o);a&&M.setAttribute("nonce",a),this.shadowRoot.appendChild(M)}}nodeOrShadowRoot(n){return n===this.hostEl?this.shadowRoot:n}appendChild(n,e){return super.appendChild(this.nodeOrShadowRoot(n),e)}insertBefore(n,e,r){return super.insertBefore(this.nodeOrShadowRoot(n),e,r)}removeChild(n,e){return super.removeChild(null,e)}parentNode(n){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(n)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}},xe=class extends Le{sharedStylesHost;removeStylesOnCompDestroy;styles;styleUrls;_animationDisabled;constructor(n,e,r,i,o,s,a,c,u,h,v,y){super(n,o,s,a,c,u,v),this.sharedStylesHost=e,this.removeStylesOnCompDestroy=i,this._animationDisabled=h;let E=r.styles;this.styles=y?zn(y,E):E,this.styleUrls=r.getExternalStyles?.(y)}applyStyles(){this.sharedStylesHost.addStyles(this.styles,this.styleUrls)}destroy(){if(this.removeStylesOnCompDestroy){if(!this._animationDisabled&&this.registry.elements){this.ngZone.runOutsideAngular(()=>{setTimeout(()=>{this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)},this.maxAnimationTimeout)});return}this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}}},dt=class extends xe{contentAttr;hostAttr;constructor(n,e,r,i,o,s,a,c,u,h,v,y){let E=i+"-"+r.id;super(n,e,r,o,s,a,c,u,h,v,y,E),this.contentAttr=Vi(E),this.hostAttr=qi(E)}applyToHost(n){this.applyStyles(),this.setAttribute(n,this.hostAttr,"")}createElement(n,e){let r=super.createElement(n,e);return super.setAttribute(r,this.contentAttr,""),r}};var pt=class t extends _n{supportsDOMEvents=!0;static makeCurrent(){On(new t)}onAndCancel(n,e,r,i){return n.addEventListener(e,r,i),()=>{n.removeEventListener(e,r,i)}}dispatchEvent(n,e){n.dispatchEvent(e)}remove(n){n.remove()}createElement(n,e){return e=e||this.getDefaultDocument(),e.createElement(n)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(n){return n.nodeType===Node.ELEMENT_NODE}isShadowRoot(n){return n instanceof DocumentFragment}getGlobalEventTarget(n,e){return e==="window"?window:e==="document"?n:e==="body"?n.body:null}getBaseHref(n){let e=Wi();return e==null?null:Zi(e)}resetBaseElement(){je=null}getUserAgent(){return window.navigator.userAgent}getCookie(n){return Pn(document.cookie,n)}},je=null;function Wi(){return je=je||document.head.querySelector("base"),je?je.getAttribute("href"):null}function Zi(t){return new URL(t,document.baseURI).pathname}var Yi=(()=>{class t{build(){return new XMLHttpRequest}static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:t.\u0275fac})}return t})(),Vn=(()=>{class t extends Ue{constructor(e){super(e)}supports(e){return!0}addEventListener(e,r,i,o){return e.addEventListener(r,i,o),()=>this.removeEventListener(e,r,i,o)}removeEventListener(e,r,i,o){return e.removeEventListener(r,i,o)}static \u0275fac=function(r){return new(r||t)(m(N))};static \u0275prov=R({token:t,factory:t.\u0275fac})}return t})(),Hn=["alt","control","meta","shift"],Qi={"\b":"Backspace"," ":"Tab","\x7F":"Delete","\x1B":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},Ki={alt:t=>t.altKey,control:t=>t.ctrlKey,meta:t=>t.metaKey,shift:t=>t.shiftKey},qn=(()=>{class t extends Ue{constructor(e){super(e)}supports(e){return t.parseEventName(e)!=null}addEventListener(e,r,i,o){let s=t.parseEventName(r),a=t.eventCallback(s.fullKey,i,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Pe().onAndCancel(e,s.domEventName,a,o))}static parseEventName(e){let r=e.toLowerCase().split("."),i=r.shift();if(r.length===0||!(i==="keydown"||i==="keyup"))return null;let o=t._normalizeKey(r.pop()),s="",a=r.indexOf("code");if(a>-1&&(r.splice(a,1),s="code."),Hn.forEach(u=>{let h=r.indexOf(u);h>-1&&(r.splice(h,1),s+=u+".")}),s+=o,r.length!=0||o.length===0)return null;let c={};return c.domEventName=i,c.fullKey=s,c}static matchEventFullKeyCode(e,r){let i=Qi[e.key]||e.key,o="";return r.indexOf("code.")>-1&&(i=e.code,o="code."),i==null||!i?!1:(i=i.toLowerCase(),i===" "?i="space":i==="."&&(i="dot"),Hn.forEach(s=>{if(s!==i){let a=Ki[s];a(e)&&(o+=s+".")}}),o+=i,o===r)}static eventCallback(e,r,i){return o=>{t.matchEventFullKeyCode(o,e)&&i.runGuarded(()=>r(o))}}static _normalizeKey(e){return e==="esc"?"escape":e}static \u0275fac=function(r){return new(r||t)(m(N))};static \u0275prov=R({token:t,factory:t.\u0275fac})}return t})();function Xi(t,n){let e=l({rootComponent:t},Ji(n));return Dn(e)}function Ji(t){return{appProviders:[...io,...t?.providers??[]],platformProviders:no}}function eo(){pt.makeCurrent()}function to(){return new Kt}function ro(){return en(document),document}var no=[{provide:Oe,useValue:Ln},{provide:tn,useValue:eo,multi:!0},{provide:N,useFactory:ro}];var io=[{provide:Yr,useValue:"root"},{provide:Kt,useFactory:to},{provide:ft,useClass:Vn,multi:!0,deps:[N]},{provide:ft,useClass:qn,multi:!0,deps:[N]},pr,hr,dr,{provide:dn,useExisting:pr},{provide:Un,useClass:Yi},[]];var Gn=(()=>{class t{_doc;constructor(e){this._doc=e}getTitle(){return this._doc.title}setTitle(e){this._doc.title=e||""}static \u0275fac=function(r){return new(r||t)(m(N))};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var ao=(()=>{class t{static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:function(r){let i=null;return r?i=new(r||t):i=m(co),i},providedIn:"root"})}return t})(),co=(()=>{class t extends ao{_doc;constructor(e){super(),this._doc=e}sanitize(e,r){if(r==null)return null;switch(e){case re.NONE:return r;case re.HTML:return fe(r,"HTML")?he(r):un(this._doc,String(r)).toString();case re.STYLE:return fe(r,"Style")?he(r):r;case re.SCRIPT:if(fe(r,"Script"))return he(r);throw new w(5200,!1);case re.URL:return fe(r,"URL")?he(r):cn(String(r));case re.RESOURCE_URL:if(fe(r,"ResourceURL"))return he(r);throw new w(5201,!1);default:throw new w(5202,!1)}}bypassSecurityTrustHtml(e){return rn(e)}bypassSecurityTrustStyle(e){return nn(e)}bypassSecurityTrustScript(e){return on(e)}bypassSecurityTrustUrl(e){return sn(e)}bypassSecurityTrustResourceUrl(e){return an(e)}static \u0275fac=function(r){return new(r||t)(m(N))};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var p="primary",Xe=Symbol("RouteTitle"),Sr=class{params;constructor(n){this.params=n||{}}has(n){return Object.prototype.hasOwnProperty.call(this.params,n)}get(n){if(this.has(n)){let e=this.params[n];return Array.isArray(e)?e[0]:e}return null}getAll(n){if(this.has(n)){let e=this.params[n];return Array.isArray(e)?e:[e]}return[]}get keys(){return Object.keys(this.params)}};function se(t){return new Sr(t)}function ei(t,n,e){let r=e.path.split("/");if(r.length>t.length||e.pathMatch==="full"&&(n.hasChildren()||r.length<t.length))return null;let i={};for(let o=0;o<r.length;o++){let s=r[o],a=t[o];if(s[0]===":")i[s.substring(1)]=a;else if(s!==a.path)return null}return{consumed:t.slice(0,r.length),posParams:i}}function lo(t,n){if(t.length!==n.length)return!1;for(let e=0;e<t.length;++e)if(!H(t[e],n[e]))return!1;return!0}function H(t,n){let e=t?Rr(t):void 0,r=n?Rr(n):void 0;if(!e||!r||e.length!=r.length)return!1;let i;for(let o=0;o<e.length;o++)if(i=e[o],!ti(t[i],n[i]))return!1;return!0}function Rr(t){return[...Object.keys(t),...Object.getOwnPropertySymbols(t)]}function ti(t,n){if(Array.isArray(t)&&Array.isArray(n)){if(t.length!==n.length)return!1;let e=[...t].sort(),r=[...n].sort();return e.every((i,o)=>r[o]===i)}else return t===n}function ri(t){return t.length>0?t[t.length-1]:null}function Z(t){return Br(t)?t:vn(t)?D(Promise.resolve(t)):d(t)}var ho={exact:ii,subset:oi},ni={exact:fo,subset:po,ignored:()=>!0};function Wn(t,n,e){return ho[e.paths](t.root,n.root,e.matrixParams)&&ni[e.queryParams](t.queryParams,n.queryParams)&&!(e.fragment==="exact"&&t.fragment!==n.fragment)}function fo(t,n){return H(t,n)}function ii(t,n,e){if(!ie(t.segments,n.segments)||!mt(t.segments,n.segments,e)||t.numberOfChildren!==n.numberOfChildren)return!1;for(let r in n.children)if(!t.children[r]||!ii(t.children[r],n.children[r],e))return!1;return!0}function po(t,n){return Object.keys(n).length<=Object.keys(t).length&&Object.keys(n).every(e=>ti(t[e],n[e]))}function oi(t,n,e){return si(t,n,n.segments,e)}function si(t,n,e,r){if(t.segments.length>e.length){let i=t.segments.slice(0,e.length);return!(!ie(i,e)||n.hasChildren()||!mt(i,e,r))}else if(t.segments.length===e.length){if(!ie(t.segments,e)||!mt(t.segments,e,r))return!1;for(let i in n.children)if(!t.children[i]||!oi(t.children[i],n.children[i],r))return!1;return!0}else{let i=e.slice(0,t.segments.length),o=e.slice(t.segments.length);return!ie(t.segments,i)||!mt(t.segments,i,r)||!t.children[p]?!1:si(t.children[p],n,o,r)}}function mt(t,n,e){return n.every((r,i)=>ni[e](t[i].parameters,r.parameters))}var F=class{root;queryParams;fragment;_queryParamMap;constructor(n=new g([],{}),e={},r=null){this.root=n,this.queryParams=e,this.fragment=r}get queryParamMap(){return this._queryParamMap??=se(this.queryParams),this._queryParamMap}toString(){return mo.serialize(this)}},g=class{segments;children;parent=null;constructor(n,e){this.segments=n,this.children=e,Object.values(e).forEach(r=>r.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return yt(this)}},X=class{path;parameters;_parameterMap;constructor(n,e){this.path=n,this.parameters=e}get parameterMap(){return this._parameterMap??=se(this.parameters),this._parameterMap}toString(){return ci(this)}};function go(t,n){return ie(t,n)&&t.every((e,r)=>H(e.parameters,n[r].parameters))}function ie(t,n){return t.length!==n.length?!1:t.every((e,r)=>e.path===n[r].path)}function vo(t,n){let e=[];return Object.entries(t.children).forEach(([r,i])=>{r===p&&(e=e.concat(n(i,r)))}),Object.entries(t.children).forEach(([r,i])=>{r!==p&&(e=e.concat(n(i,r)))}),e}var Je=(()=>{class t{static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:()=>new ae,providedIn:"root"})}return t})(),ae=class{parse(n){let e=new Cr(n);return new F(e.parseRootSegment(),e.parseQueryParams(),e.parseFragment())}serialize(n){let e=`/${ke(n.root,!0)}`,r=Ro(n.queryParams),i=typeof n.fragment=="string"?`#${yo(n.fragment)}`:"";return`${e}${r}${i}`}},mo=new ae;function yt(t){return t.segments.map(n=>ci(n)).join("/")}function ke(t,n){if(!t.hasChildren())return yt(t);if(n){let e=t.children[p]?ke(t.children[p],!1):"",r=[];return Object.entries(t.children).forEach(([i,o])=>{i!==p&&r.push(`${i}:${ke(o,!1)}`)}),r.length>0?`${e}(${r.join("//")})`:e}else{let e=vo(t,(r,i)=>i===p?[ke(t.children[p],!1)]:[`${i}:${ke(r,!1)}`]);return Object.keys(t.children).length===1&&t.children[p]!=null?`${yt(t)}/${e[0]}`:`${yt(t)}/(${e.join("//")})`}}function ai(t){return encodeURIComponent(t).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function gt(t){return ai(t).replace(/%3B/gi,";")}function yo(t){return encodeURI(t)}function wr(t){return ai(t).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function St(t){return decodeURIComponent(t)}function Zn(t){return St(t.replace(/\+/g,"%20"))}function ci(t){return`${wr(t.path)}${So(t.parameters)}`}function So(t){return Object.entries(t).map(([n,e])=>`;${wr(n)}=${wr(e)}`).join("")}function Ro(t){let n=Object.entries(t).map(([e,r])=>Array.isArray(r)?r.map(i=>`${gt(e)}=${gt(i)}`).join("&"):`${gt(e)}=${gt(r)}`).filter(e=>e);return n.length?`?${n.join("&")}`:""}var wo=/^[^\/()?;#]+/;function gr(t){let n=t.match(wo);return n?n[0]:""}var Co=/^[^\/()?;=#]+/;function Eo(t){let n=t.match(Co);return n?n[0]:""}var bo=/^[^=?&#]+/;function Io(t){let n=t.match(bo);return n?n[0]:""}var To=/^[^&#]+/;function Ao(t){let n=t.match(To);return n?n[0]:""}var Cr=class{url;remaining;constructor(n){this.url=n,this.remaining=n}parseRootSegment(){return this.consumeOptional("/"),this.remaining===""||this.peekStartsWith("?")||this.peekStartsWith("#")?new g([],{}):new g([],this.parseChildren())}parseQueryParams(){let n={};if(this.consumeOptional("?"))do this.parseQueryParam(n);while(this.consumeOptional("&"));return n}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(this.remaining==="")return{};this.consumeOptional("/");let n=[];for(this.peekStartsWith("(")||n.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),n.push(this.parseSegment());let e={};this.peekStartsWith("/(")&&(this.capture("/"),e=this.parseParens(!0));let r={};return this.peekStartsWith("(")&&(r=this.parseParens(!1)),(n.length>0||Object.keys(e).length>0)&&(r[p]=new g(n,e)),r}parseSegment(){let n=gr(this.remaining);if(n===""&&this.peekStartsWith(";"))throw new w(4009,!1);return this.capture(n),new X(St(n),this.parseMatrixParams())}parseMatrixParams(){let n={};for(;this.consumeOptional(";");)this.parseParam(n);return n}parseParam(n){let e=Eo(this.remaining);if(!e)return;this.capture(e);let r="";if(this.consumeOptional("=")){let i=gr(this.remaining);i&&(r=i,this.capture(r))}n[St(e)]=St(r)}parseQueryParam(n){let e=Io(this.remaining);if(!e)return;this.capture(e);let r="";if(this.consumeOptional("=")){let s=Ao(this.remaining);s&&(r=s,this.capture(r))}let i=Zn(e),o=Zn(r);if(n.hasOwnProperty(i)){let s=n[i];Array.isArray(s)||(s=[s],n[i]=s),s.push(o)}else n[i]=o}parseParens(n){let e={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){let r=gr(this.remaining),i=this.remaining[r.length];if(i!=="/"&&i!==")"&&i!==";")throw new w(4010,!1);let o;r.indexOf(":")>-1?(o=r.slice(0,r.indexOf(":")),this.capture(o),this.capture(":")):n&&(o=p);let s=this.parseChildren();e[o]=Object.keys(s).length===1?s[p]:new g([],s),this.consumeOptional("//")}return e}peekStartsWith(n){return this.remaining.startsWith(n)}consumeOptional(n){return this.peekStartsWith(n)?(this.remaining=this.remaining.substring(n.length),!0):!1}capture(n){if(!this.consumeOptional(n))throw new w(4011,!1)}};function ui(t){return t.segments.length>0?new g([],{[p]:t}):t}function li(t){let n={};for(let[r,i]of Object.entries(t.children)){let o=li(i);if(r===p&&o.segments.length===0&&o.hasChildren())for(let[s,a]of Object.entries(o.children))n[s]=a;else(o.segments.length>0||o.hasChildren())&&(n[r]=o)}let e=new g(t.segments,n);return Mo(e)}function Mo(t){if(t.numberOfChildren===1&&t.children[p]){let n=t.children[p];return new g(t.segments.concat(n.segments),n.children)}return t}function J(t){return t instanceof F}function di(t,n,e=null,r=null){let i=hi(t);return fi(i,n,e,r)}function hi(t){let n;function e(o){let s={};for(let c of o.children){let u=e(c);s[c.outlet]=u}let a=new g(o.url,s);return o===t&&(n=a),a}let r=e(t.root),i=ui(r);return n??i}function fi(t,n,e,r){let i=t;for(;i.parent;)i=i.parent;if(n.length===0)return vr(i,i,i,e,r);let o=Do(n);if(o.toRoot())return vr(i,i,new g([],{}),e,r);let s=Oo(o,i,t),a=s.processChildren?ze(s.segmentGroup,s.index,o.commands):gi(s.segmentGroup,s.index,o.commands);return vr(i,s.segmentGroup,a,e,r)}function Rt(t){return typeof t=="object"&&t!=null&&!t.outlets&&!t.segmentPath}function Fe(t){return typeof t=="object"&&t!=null&&t.outlets}function vr(t,n,e,r,i){let o={};r&&Object.entries(r).forEach(([c,u])=>{o[c]=Array.isArray(u)?u.map(h=>`${h}`):`${u}`});let s;t===n?s=e:s=pi(t,n,e);let a=ui(li(s));return new F(a,o,i)}function pi(t,n,e){let r={};return Object.entries(t.children).forEach(([i,o])=>{o===n?r[i]=e:r[i]=pi(o,n,e)}),new g(t.segments,r)}var wt=class{isAbsolute;numberOfDoubleDots;commands;constructor(n,e,r){if(this.isAbsolute=n,this.numberOfDoubleDots=e,this.commands=r,n&&r.length>0&&Rt(r[0]))throw new w(4003,!1);let i=r.find(Fe);if(i&&i!==ri(r))throw new w(4004,!1)}toRoot(){return this.isAbsolute&&this.commands.length===1&&this.commands[0]=="/"}};function Do(t){if(typeof t[0]=="string"&&t.length===1&&t[0]==="/")return new wt(!0,0,t);let n=0,e=!1,r=t.reduce((i,o,s)=>{if(typeof o=="object"&&o!=null){if(o.outlets){let a={};return Object.entries(o.outlets).forEach(([c,u])=>{a[c]=typeof u=="string"?u.split("/"):u}),[...i,{outlets:a}]}if(o.segmentPath)return[...i,o.segmentPath]}return typeof o!="string"?[...i,o]:s===0?(o.split("/").forEach((a,c)=>{c==0&&a==="."||(c==0&&a===""?e=!0:a===".."?n++:a!=""&&i.push(a))}),i):[...i,o]},[]);return new wt(e,n,r)}var me=class{segmentGroup;processChildren;index;constructor(n,e,r){this.segmentGroup=n,this.processChildren=e,this.index=r}};function Oo(t,n,e){if(t.isAbsolute)return new me(n,!0,0);if(!e)return new me(n,!1,NaN);if(e.parent===null)return new me(e,!0,0);let r=Rt(t.commands[0])?0:1,i=e.segments.length-1+r;return _o(e,i,t.numberOfDoubleDots)}function _o(t,n,e){let r=t,i=n,o=e;for(;o>i;){if(o-=i,r=r.parent,!r)throw new w(4005,!1);i=r.segments.length}return new me(r,!1,i-o)}function No(t){return Fe(t[0])?t[0].outlets:{[p]:t}}function gi(t,n,e){if(t??=new g([],{}),t.segments.length===0&&t.hasChildren())return ze(t,n,e);let r=Po(t,n,e),i=e.slice(r.commandIndex);if(r.match&&r.pathIndex<t.segments.length){let o=new g(t.segments.slice(0,r.pathIndex),{});return o.children[p]=new g(t.segments.slice(r.pathIndex),t.children),ze(o,0,i)}else return r.match&&i.length===0?new g(t.segments,{}):r.match&&!t.hasChildren()?Er(t,n,e):r.match?ze(t,0,i):Er(t,n,e)}function ze(t,n,e){if(e.length===0)return new g(t.segments,{});{let r=No(e),i={};if(Object.keys(r).some(o=>o!==p)&&t.children[p]&&t.numberOfChildren===1&&t.children[p].segments.length===0){let o=ze(t.children[p],n,e);return new g(t.segments,o.children)}return Object.entries(r).forEach(([o,s])=>{typeof s=="string"&&(s=[s]),s!==null&&(i[o]=gi(t.children[o],n,s))}),Object.entries(t.children).forEach(([o,s])=>{r[o]===void 0&&(i[o]=s)}),new g(t.segments,i)}}function Po(t,n,e){let r=0,i=n,o={match:!1,pathIndex:0,commandIndex:0};for(;i<t.segments.length;){if(r>=e.length)return o;let s=t.segments[i],a=e[r];if(Fe(a))break;let c=`${a}`,u=r<e.length-1?e[r+1]:null;if(i>0&&c===void 0)break;if(c&&u&&typeof u=="object"&&u.outlets===void 0){if(!Qn(c,u,s))return o;r+=2}else{if(!Qn(c,{},s))return o;r++}i++}return{match:!0,pathIndex:i,commandIndex:r}}function Er(t,n,e){let r=t.segments.slice(0,n),i=0;for(;i<e.length;){let o=e[i];if(Fe(o)){let c=Uo(o.outlets);return new g(r,c)}if(i===0&&Rt(e[0])){let c=t.segments[n];r.push(new X(c.path,Yn(e[0]))),i++;continue}let s=Fe(o)?o.outlets[p]:`${o}`,a=i<e.length-1?e[i+1]:null;s&&a&&Rt(a)?(r.push(new X(s,Yn(a))),i+=2):(r.push(new X(s,{})),i++)}return new g(r,{})}function Uo(t){let n={};return Object.entries(t).forEach(([e,r])=>{typeof r=="string"&&(r=[r]),r!==null&&(n[e]=Er(new g([],{}),0,r))}),n}function Yn(t){let n={};return Object.entries(t).forEach(([e,r])=>n[e]=`${r}`),n}function Qn(t,n,e){return t==e.path&&H(n,e.parameters)}var He="imperative",b=(function(t){return t[t.NavigationStart=0]="NavigationStart",t[t.NavigationEnd=1]="NavigationEnd",t[t.NavigationCancel=2]="NavigationCancel",t[t.NavigationError=3]="NavigationError",t[t.RoutesRecognized=4]="RoutesRecognized",t[t.ResolveStart=5]="ResolveStart",t[t.ResolveEnd=6]="ResolveEnd",t[t.GuardsCheckStart=7]="GuardsCheckStart",t[t.GuardsCheckEnd=8]="GuardsCheckEnd",t[t.RouteConfigLoadStart=9]="RouteConfigLoadStart",t[t.RouteConfigLoadEnd=10]="RouteConfigLoadEnd",t[t.ChildActivationStart=11]="ChildActivationStart",t[t.ChildActivationEnd=12]="ChildActivationEnd",t[t.ActivationStart=13]="ActivationStart",t[t.ActivationEnd=14]="ActivationEnd",t[t.Scroll=15]="Scroll",t[t.NavigationSkipped=16]="NavigationSkipped",t})(b||{}),U=class{id;url;constructor(n,e){this.id=n,this.url=e}},ce=class extends U{type=b.NavigationStart;navigationTrigger;restoredState;constructor(n,e,r="imperative",i=null){super(n,e),this.navigationTrigger=r,this.restoredState=i}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}},z=class extends U{urlAfterRedirects;type=b.NavigationEnd;constructor(n,e,r){super(n,e),this.urlAfterRedirects=r}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}},A=(function(t){return t[t.Redirect=0]="Redirect",t[t.SupersededByNewNavigation=1]="SupersededByNewNavigation",t[t.NoDataFromResolver=2]="NoDataFromResolver",t[t.GuardRejected=3]="GuardRejected",t[t.Aborted=4]="Aborted",t})(A||{}),Ve=(function(t){return t[t.IgnoredSameUrlNavigation=0]="IgnoredSameUrlNavigation",t[t.IgnoredByUrlHandlingStrategy=1]="IgnoredByUrlHandlingStrategy",t})(Ve||{}),B=class extends U{reason;code;type=b.NavigationCancel;constructor(n,e,r,i){super(n,e),this.reason=r,this.code=i}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}},G=class extends U{reason;code;type=b.NavigationSkipped;constructor(n,e,r,i){super(n,e),this.reason=r,this.code=i}},Se=class extends U{error;target;type=b.NavigationError;constructor(n,e,r,i){super(n,e),this.error=r,this.target=i}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}},qe=class extends U{urlAfterRedirects;state;type=b.RoutesRecognized;constructor(n,e,r,i){super(n,e),this.urlAfterRedirects=r,this.state=i}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},Ct=class extends U{urlAfterRedirects;state;type=b.GuardsCheckStart;constructor(n,e,r,i){super(n,e),this.urlAfterRedirects=r,this.state=i}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},Et=class extends U{urlAfterRedirects;state;shouldActivate;type=b.GuardsCheckEnd;constructor(n,e,r,i,o){super(n,e),this.urlAfterRedirects=r,this.state=i,this.shouldActivate=o}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}},bt=class extends U{urlAfterRedirects;state;type=b.ResolveStart;constructor(n,e,r,i){super(n,e),this.urlAfterRedirects=r,this.state=i}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},It=class extends U{urlAfterRedirects;state;type=b.ResolveEnd;constructor(n,e,r,i){super(n,e),this.urlAfterRedirects=r,this.state=i}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}},Tt=class{route;type=b.RouteConfigLoadStart;constructor(n){this.route=n}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}},At=class{route;type=b.RouteConfigLoadEnd;constructor(n){this.route=n}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}},Mt=class{snapshot;type=b.ChildActivationStart;constructor(n){this.snapshot=n}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},Dt=class{snapshot;type=b.ChildActivationEnd;constructor(n){this.snapshot=n}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},Ot=class{snapshot;type=b.ActivationStart;constructor(n){this.snapshot=n}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}},_t=class{snapshot;type=b.ActivationEnd;constructor(n){this.snapshot=n}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}};var Ge=class{},Re=class{url;navigationBehaviorOptions;constructor(n,e){this.url=n,this.navigationBehaviorOptions=e}};function Lo(t){return!(t instanceof Ge)&&!(t instanceof Re)}function xo(t,n){return t.providers&&!t._injector&&(t._injector=ir(t.providers,n,`Route: ${t.path}`)),t._injector??n}function $(t){return t.outlet||p}function jo(t,n){let e=t.filter(r=>$(r)===n);return e.push(...t.filter(r=>$(r)!==n)),e}function Ee(t){if(!t)return null;if(t.routeConfig?._injector)return t.routeConfig._injector;for(let n=t.parent;n;n=n.parent){let e=n.routeConfig;if(e?._loadedInjector)return e._loadedInjector;if(e?._injector)return e._injector}return null}var Nt=class{rootInjector;outlet=null;route=null;children;attachRef=null;get injector(){return Ee(this.route?.snapshot)??this.rootInjector}constructor(n){this.rootInjector=n,this.children=new be(this.rootInjector)}},be=(()=>{class t{rootInjector;contexts=new Map;constructor(e){this.rootInjector=e}onChildOutletCreated(e,r){let i=this.getOrCreateContext(e);i.outlet=r,this.contexts.set(e,i)}onChildOutletDestroyed(e){let r=this.getContext(e);r&&(r.outlet=null,r.attachRef=null)}onOutletDeactivated(){let e=this.contexts;return this.contexts=new Map,e}onOutletReAttached(e){this.contexts=e}getOrCreateContext(e){let r=this.getContext(e);return r||(r=new Nt(this.rootInjector),this.contexts.set(e,r)),r}getContext(e){return this.contexts.get(e)||null}static \u0275fac=function(r){return new(r||t)(m(de))};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),Pt=class{_root;constructor(n){this._root=n}get root(){return this._root.value}parent(n){let e=this.pathFromRoot(n);return e.length>1?e[e.length-2]:null}children(n){let e=br(n,this._root);return e?e.children.map(r=>r.value):[]}firstChild(n){let e=br(n,this._root);return e&&e.children.length>0?e.children[0].value:null}siblings(n){let e=Ir(n,this._root);return e.length<2?[]:e[e.length-2].children.map(i=>i.value).filter(i=>i!==n)}pathFromRoot(n){return Ir(n,this._root).map(e=>e.value)}};function br(t,n){if(t===n.value)return n;for(let e of n.children){let r=br(t,e);if(r)return r}return null}function Ir(t,n){if(t===n.value)return[n];for(let e of n.children){let r=Ir(t,e);if(r.length)return r.unshift(n),r}return[]}var P=class{value;children;constructor(n,e){this.value=n,this.children=e}toString(){return`TreeNode(${this.value})`}};function ve(t){let n={};return t&&t.children.forEach(e=>n[e.value.outlet]=e),n}var We=class extends Pt{snapshot;constructor(n,e){super(n),this.snapshot=e,Pr(this,n)}toString(){return this.snapshot.toString()}};function vi(t){let n=ko(t),e=new x([new X("",{})]),r=new x({}),i=new x({}),o=new x({}),s=new x(""),a=new W(e,r,o,s,i,p,t,n.root);return a.snapshot=n.root,new We(new P(a,[]),n)}function ko(t){let n={},e={},r={},o=new oe([],n,r,"",e,p,t,null,{});return new Ze("",new P(o,[]))}var W=class{urlSubject;paramsSubject;queryParamsSubject;fragmentSubject;dataSubject;outlet;component;snapshot;_futureSnapshot;_routerState;_paramMap;_queryParamMap;title;url;params;queryParams;fragment;data;constructor(n,e,r,i,o,s,a,c){this.urlSubject=n,this.paramsSubject=e,this.queryParamsSubject=r,this.fragmentSubject=i,this.dataSubject=o,this.outlet=s,this.component=a,this._futureSnapshot=c,this.title=this.dataSubject?.pipe(S(u=>u[Xe]))??d(void 0),this.url=n,this.params=e,this.queryParams=r,this.fragment=i,this.data=o}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=this.params.pipe(S(n=>se(n))),this._paramMap}get queryParamMap(){return this._queryParamMap??=this.queryParams.pipe(S(n=>se(n))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}};function Ut(t,n,e="emptyOnly"){let r,{routeConfig:i}=t;return n!==null&&(e==="always"||i?.path===""||!n.component&&!n.routeConfig?.loadComponent)?r={params:l(l({},n.params),t.params),data:l(l({},n.data),t.data),resolve:l(l(l(l({},t.data),n.data),i?.data),t._resolvedData)}:r={params:l({},t.params),data:l({},t.data),resolve:l(l({},t.data),t._resolvedData??{})},i&&yi(i)&&(r.resolve[Xe]=i.title),r}var oe=class{url;params;queryParams;fragment;data;outlet;component;routeConfig;_resolve;_resolvedData;_routerState;_paramMap;_queryParamMap;get title(){return this.data?.[Xe]}constructor(n,e,r,i,o,s,a,c,u){this.url=n,this.params=e,this.queryParams=r,this.fragment=i,this.data=o,this.outlet=s,this.component=a,this.routeConfig=c,this._resolve=u}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap??=se(this.params),this._paramMap}get queryParamMap(){return this._queryParamMap??=se(this.queryParams),this._queryParamMap}toString(){let n=this.url.map(r=>r.toString()).join("/"),e=this.routeConfig?this.routeConfig.path:"";return`Route(url:'${n}', path:'${e}')`}},Ze=class extends Pt{url;constructor(n,e){super(e),this.url=n,Pr(this,e)}toString(){return mi(this._root)}};function Pr(t,n){n.value._routerState=t,n.children.forEach(e=>Pr(t,e))}function mi(t){let n=t.children.length>0?` { ${t.children.map(mi).join(", ")} } `:"";return`${t.value}${n}`}function mr(t){if(t.snapshot){let n=t.snapshot,e=t._futureSnapshot;t.snapshot=e,H(n.queryParams,e.queryParams)||t.queryParamsSubject.next(e.queryParams),n.fragment!==e.fragment&&t.fragmentSubject.next(e.fragment),H(n.params,e.params)||t.paramsSubject.next(e.params),lo(n.url,e.url)||t.urlSubject.next(e.url),H(n.data,e.data)||t.dataSubject.next(e.data)}else t.snapshot=t._futureSnapshot,t.dataSubject.next(t._futureSnapshot.data)}function Tr(t,n){let e=H(t.params,n.params)&&go(t.url,n.url),r=!t.parent!=!n.parent;return e&&!r&&(!t.parent||Tr(t.parent,n.parent))}function yi(t){return typeof t.title=="string"||t.title===null}var Si=new T(""),Ur=(()=>{class t{activated=null;get activatedComponentRef(){return this.activated}_activatedRoute=null;name=p;activateEvents=new ne;deactivateEvents=new ne;attachEvents=new ne;detachEvents=new ne;routerOutletData=Mn(void 0);parentContexts=f(be);location=f(hn);changeDetector=f(ct);inputBinder=f(kt,{optional:!0});supportsBindingToComponentInputs=!0;ngOnChanges(e){if(e.name){let{firstChange:r,previousValue:i}=e.name;if(r)return;this.isTrackedInParentContexts(i)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(i)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name),this.inputBinder?.unsubscribeFromRouteData(this)}isTrackedInParentContexts(e){return this.parentContexts.getContext(e)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;let e=this.parentContexts.getContext(this.name);e?.route&&(e.attachRef?this.attach(e.attachRef,e.route):this.activateWith(e.route,e.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new w(4012,!1);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new w(4012,!1);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new w(4012,!1);this.location.detach();let e=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(e.instance),e}attach(e,r){this.activated=e,this._activatedRoute=r,this.location.insert(e.hostView),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.attachEvents.emit(e.instance)}deactivate(){if(this.activated){let e=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(e)}}activateWith(e,r){if(this.isActivated)throw new w(4013,!1);this._activatedRoute=e;let i=this.location,s=e.snapshot.component,a=this.parentContexts.getOrCreateContext(this.name).children,c=new Ar(e,a,i.injector,this.routerOutletData);this.activated=i.createComponent(s,{index:i.length,injector:c,environmentInjector:r}),this.changeDetector.markForCheck(),this.inputBinder?.bindActivatedRouteToOutletComponent(this),this.activateEvents.emit(this.activated.instance)}static \u0275fac=function(r){return new(r||t)};static \u0275dir=Ne({type:t,selectors:[["router-outlet"]],inputs:{name:"name",routerOutletData:[1,"routerOutletData"]},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],features:[De]})}return t})(),Ar=class{route;childContexts;parent;outletData;constructor(n,e,r,i){this.route=n,this.childContexts=e,this.parent=r,this.outletData=i}get(n,e){return n===W?this.route:n===be?this.childContexts:n===Si?this.outletData:this.parent.get(n,e)}},kt=new T("");var Lr=(()=>{class t{static \u0275fac=function(r){return new(r||t)};static \u0275cmp=pn({type:t,selectors:[["ng-component"]],exportAs:["emptyRouterOutlet"],decls:1,vars:0,template:function(r,i){r&1&&wn(0,"router-outlet")},dependencies:[Ur],encapsulation:2})}return t})();function xr(t){let n=t.children&&t.children.map(xr),e=n?L(l({},t),{children:n}):l({},t);return!e.component&&!e.loadComponent&&(n||e.loadChildren)&&e.outlet&&e.outlet!==p&&(e.component=Lr),e}function $o(t,n,e){let r=Ye(t,n._root,e?e._root:void 0);return new We(r,n)}function Ye(t,n,e){if(e&&t.shouldReuseRoute(n.value,e.value.snapshot)){let r=e.value;r._futureSnapshot=n.value;let i=zo(t,n,e);return new P(r,i)}else{if(t.shouldAttach(n.value)){let o=t.retrieve(n.value);if(o!==null){let s=o.route;return s.value._futureSnapshot=n.value,s.children=n.children.map(a=>Ye(t,a)),s}}let r=Ho(n.value),i=n.children.map(o=>Ye(t,o));return new P(r,i)}}function zo(t,n,e){return n.children.map(r=>{for(let i of e.children)if(t.shouldReuseRoute(r.value,i.value.snapshot))return Ye(t,r,i);return Ye(t,r)})}function Ho(t){return new W(new x(t.url),new x(t.params),new x(t.queryParams),new x(t.fragment),new x(t.data),t.outlet,t.component,t)}var we=class{redirectTo;navigationBehaviorOptions;constructor(n,e){this.redirectTo=n,this.navigationBehaviorOptions=e}},Ri="ngNavigationCancelingError";function Lt(t,n){let{redirectTo:e,navigationBehaviorOptions:r}=J(n)?{redirectTo:n,navigationBehaviorOptions:void 0}:n,i=wi(!1,A.Redirect);return i.url=e,i.navigationBehaviorOptions=r,i}function wi(t,n){let e=new Error(`NavigationCancelingError: ${t||""}`);return e[Ri]=!0,e.cancellationCode=n,e}function Bo(t){return Ci(t)&&J(t.url)}function Ci(t){return!!t&&t[Ri]}var Fo=(t,n,e,r)=>S(i=>(new Mr(n,i.targetRouterState,i.currentRouterState,e,r).activate(t),i)),Mr=class{routeReuseStrategy;futureState;currState;forwardEvent;inputBindingEnabled;constructor(n,e,r,i,o){this.routeReuseStrategy=n,this.futureState=e,this.currState=r,this.forwardEvent=i,this.inputBindingEnabled=o}activate(n){let e=this.futureState._root,r=this.currState?this.currState._root:null;this.deactivateChildRoutes(e,r,n),mr(this.futureState.root),this.activateChildRoutes(e,r,n)}deactivateChildRoutes(n,e,r){let i=ve(e);n.children.forEach(o=>{let s=o.value.outlet;this.deactivateRoutes(o,i[s],r),delete i[s]}),Object.values(i).forEach(o=>{this.deactivateRouteAndItsChildren(o,r)})}deactivateRoutes(n,e,r){let i=n.value,o=e?e.value:null;if(i===o)if(i.component){let s=r.getContext(i.outlet);s&&this.deactivateChildRoutes(n,e,s.children)}else this.deactivateChildRoutes(n,e,r);else o&&this.deactivateRouteAndItsChildren(e,r)}deactivateRouteAndItsChildren(n,e){n.value.component&&this.routeReuseStrategy.shouldDetach(n.value.snapshot)?this.detachAndStoreRouteSubtree(n,e):this.deactivateRouteAndOutlet(n,e)}detachAndStoreRouteSubtree(n,e){let r=e.getContext(n.value.outlet),i=r&&n.value.component?r.children:e,o=ve(n);for(let s of Object.values(o))this.deactivateRouteAndItsChildren(s,i);if(r&&r.outlet){let s=r.outlet.detach(),a=r.children.onOutletDeactivated();this.routeReuseStrategy.store(n.value.snapshot,{componentRef:s,route:n,contexts:a})}}deactivateRouteAndOutlet(n,e){let r=e.getContext(n.value.outlet),i=r&&n.value.component?r.children:e,o=ve(n);for(let s of Object.values(o))this.deactivateRouteAndItsChildren(s,i);r&&(r.outlet&&(r.outlet.deactivate(),r.children.onOutletDeactivated()),r.attachRef=null,r.route=null)}activateChildRoutes(n,e,r){let i=ve(e);n.children.forEach(o=>{this.activateRoutes(o,i[o.value.outlet],r),this.forwardEvent(new _t(o.value.snapshot))}),n.children.length&&this.forwardEvent(new Dt(n.value.snapshot))}activateRoutes(n,e,r){let i=n.value,o=e?e.value:null;if(mr(i),i===o)if(i.component){let s=r.getOrCreateContext(i.outlet);this.activateChildRoutes(n,e,s.children)}else this.activateChildRoutes(n,e,r);else if(i.component){let s=r.getOrCreateContext(i.outlet);if(this.routeReuseStrategy.shouldAttach(i.snapshot)){let a=this.routeReuseStrategy.retrieve(i.snapshot);this.routeReuseStrategy.store(i.snapshot,null),s.children.onOutletReAttached(a.contexts),s.attachRef=a.componentRef,s.route=a.route.value,s.outlet&&s.outlet.attach(a.componentRef,a.route.value),mr(a.route.value),this.activateChildRoutes(n,null,s.children)}else s.attachRef=null,s.route=i,s.outlet&&s.outlet.activateWith(i,s.injector),this.activateChildRoutes(n,null,s.children)}else this.activateChildRoutes(n,null,r)}},xt=class{path;route;constructor(n){this.path=n,this.route=this.path[this.path.length-1]}},ye=class{component;route;constructor(n,e){this.component=n,this.route=e}};function Vo(t,n,e){let r=t._root,i=n?n._root:null;return $e(r,i,e,[r.value])}function qo(t){let n=t.routeConfig?t.routeConfig.canActivateChild:null;return!n||n.length===0?null:{node:t,guards:n}}function Ie(t,n){let e=Symbol(),r=n.get(t,e);return r===e?typeof t=="function"&&!Zr(t)?t:n.get(t):r}function $e(t,n,e,r,i={canDeactivateChecks:[],canActivateChecks:[]}){let o=ve(n);return t.children.forEach(s=>{Go(s,o[s.value.outlet],e,r.concat([s.value]),i),delete o[s.value.outlet]}),Object.entries(o).forEach(([s,a])=>Be(a,e.getContext(s),i)),i}function Go(t,n,e,r,i={canDeactivateChecks:[],canActivateChecks:[]}){let o=t.value,s=n?n.value:null,a=e?e.getContext(t.value.outlet):null;if(s&&o.routeConfig===s.routeConfig){let c=Wo(s,o,o.routeConfig.runGuardsAndResolvers);c?i.canActivateChecks.push(new xt(r)):(o.data=s.data,o._resolvedData=s._resolvedData),o.component?$e(t,n,a?a.children:null,r,i):$e(t,n,e,r,i),c&&a&&a.outlet&&a.outlet.isActivated&&i.canDeactivateChecks.push(new ye(a.outlet.component,s))}else s&&Be(n,a,i),i.canActivateChecks.push(new xt(r)),o.component?$e(t,null,a?a.children:null,r,i):$e(t,null,e,r,i);return i}function Wo(t,n,e){if(typeof e=="function")return e(t,n);switch(e){case"pathParamsChange":return!ie(t.url,n.url);case"pathParamsOrQueryParamsChange":return!ie(t.url,n.url)||!H(t.queryParams,n.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Tr(t,n)||!H(t.queryParams,n.queryParams);case"paramsChange":default:return!Tr(t,n)}}function Be(t,n,e){let r=ve(t),i=t.value;Object.entries(r).forEach(([o,s])=>{i.component?n?Be(s,n.children.getContext(o),e):Be(s,null,e):Be(s,n,e)}),i.component?n&&n.outlet&&n.outlet.isActivated?e.canDeactivateChecks.push(new ye(n.outlet.component,i)):e.canDeactivateChecks.push(new ye(null,i)):e.canDeactivateChecks.push(new ye(null,i))}function et(t){return typeof t=="function"}function Zo(t){return typeof t=="boolean"}function Yo(t){return t&&et(t.canLoad)}function Qo(t){return t&&et(t.canActivate)}function Ko(t){return t&&et(t.canActivateChild)}function Xo(t){return t&&et(t.canDeactivate)}function Jo(t){return t&&et(t.canMatch)}function Ei(t){return t instanceof Fr||t?.name==="EmptyError"}var vt=Symbol("INITIAL_VALUE");function Ce(){return _(t=>qt(t.map(n=>n.pipe(le(1),Wr(vt)))).pipe(S(n=>{for(let e of n)if(e!==!0){if(e===vt)return vt;if(e===!1||es(e))return e}return!0}),Y(n=>n!==vt),le(1)))}function es(t){return J(t)||t instanceof we}function ts(t,n){return O(e=>{let{targetSnapshot:r,currentSnapshot:i,guards:{canActivateChecks:o,canDeactivateChecks:s}}=e;return s.length===0&&o.length===0?d(L(l({},e),{guardsResult:!0})):rs(s,r,i,t).pipe(O(a=>a&&Zo(a)?ns(r,o,t,n):d(a)),S(a=>L(l({},e),{guardsResult:a})))})}function rs(t,n,e,r){return D(t).pipe(O(i=>cs(i.component,i.route,e,n,r)),Q(i=>i!==!0,!0))}function ns(t,n,e,r){return D(n).pipe(ue(i=>Vr(os(i.route.parent,r),is(i.route,r),as(t,i.path,e),ss(t,i.route,e))),Q(i=>i!==!0,!0))}function is(t,n){return t!==null&&n&&n(new Ot(t)),d(!0)}function os(t,n){return t!==null&&n&&n(new Mt(t)),d(!0)}function ss(t,n,e){let r=n.routeConfig?n.routeConfig.canActivate:null;if(!r||r.length===0)return d(!0);let i=r.map(o=>nt(()=>{let s=Ee(n)??e,a=Ie(o,s),c=Qo(a)?a.canActivate(n,t):j(s,()=>a(n,t));return Z(c).pipe(Q())}));return d(i).pipe(Ce())}function as(t,n,e){let r=n[n.length-1],o=n.slice(0,n.length-1).reverse().map(s=>qo(s)).filter(s=>s!==null).map(s=>nt(()=>{let a=s.guards.map(c=>{let u=Ee(s.node)??e,h=Ie(c,u),v=Ko(h)?h.canActivateChild(r,t):j(u,()=>h(r,t));return Z(v).pipe(Q())});return d(a).pipe(Ce())}));return d(o).pipe(Ce())}function cs(t,n,e,r,i){let o=n&&n.routeConfig?n.routeConfig.canDeactivate:null;if(!o||o.length===0)return d(!0);let s=o.map(a=>{let c=Ee(n)??i,u=Ie(a,c),h=Xo(u)?u.canDeactivate(t,n,e,r):j(c,()=>u(t,n,e,r));return Z(h).pipe(Q())});return d(s).pipe(Ce())}function us(t,n,e,r){let i=n.canLoad;if(i===void 0||i.length===0)return d(!0);let o=i.map(s=>{let a=Ie(s,t),c=Yo(a)?a.canLoad(n,e):j(t,()=>a(n,e));return Z(c)});return d(o).pipe(Ce(),bi(r))}function bi(t){return zr(I(n=>{if(typeof n!="boolean")throw Lt(t,n)}),S(n=>n===!0))}function ls(t,n,e,r){let i=n.canMatch;if(!i||i.length===0)return d(!0);let o=i.map(s=>{let a=Ie(s,t),c=Jo(a)?a.canMatch(n,e):j(t,()=>a(n,e));return Z(c)});return d(o).pipe(Ce(),bi(r))}var Qe=class{segmentGroup;constructor(n){this.segmentGroup=n||null}},Ke=class extends Error{urlTree;constructor(n){super(),this.urlTree=n}};function ge(t){return Me(new Qe(t))}function ds(t){return Me(new w(4e3,!1))}function hs(t){return Me(wi(!1,A.GuardRejected))}var Dr=class{urlSerializer;urlTree;constructor(n,e){this.urlSerializer=n,this.urlTree=e}lineralizeSegments(n,e){let r=[],i=e.root;for(;;){if(r=r.concat(i.segments),i.numberOfChildren===0)return d(r);if(i.numberOfChildren>1||!i.children[p])return ds(`${n.redirectTo}`);i=i.children[p]}}applyRedirectCommands(n,e,r,i,o){return fs(e,i,o).pipe(S(s=>{if(s instanceof F)throw new Ke(s);let a=this.applyRedirectCreateUrlTree(s,this.urlSerializer.parse(s),n,r);if(s[0]==="/")throw new Ke(a);return a}))}applyRedirectCreateUrlTree(n,e,r,i){let o=this.createSegmentGroup(n,e.root,r,i);return new F(o,this.createQueryParams(e.queryParams,this.urlTree.queryParams),e.fragment)}createQueryParams(n,e){let r={};return Object.entries(n).forEach(([i,o])=>{if(typeof o=="string"&&o[0]===":"){let a=o.substring(1);r[i]=e[a]}else r[i]=o}),r}createSegmentGroup(n,e,r,i){let o=this.createSegments(n,e.segments,r,i),s={};return Object.entries(e.children).forEach(([a,c])=>{s[a]=this.createSegmentGroup(n,c,r,i)}),new g(o,s)}createSegments(n,e,r,i){return e.map(o=>o.path[0]===":"?this.findPosParam(n,o,i):this.findOrReturn(o,r))}findPosParam(n,e,r){let i=r[e.path.substring(1)];if(!i)throw new w(4001,!1);return i}findOrReturn(n,e){let r=0;for(let i of e){if(i.path===n.path)return e.splice(r),i;r++}return n}};function fs(t,n,e){if(typeof t=="string")return d(t);let r=t,{queryParams:i,fragment:o,routeConfig:s,url:a,outlet:c,params:u,data:h,title:v}=n;return Z(j(e,()=>r({params:u,data:h,queryParams:i,fragment:o,routeConfig:s,url:a,outlet:c,title:v})))}var Or={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function ps(t,n,e,r,i){let o=Ii(t,n,e);return o.matched?(r=xo(n,r),ls(r,n,e,i).pipe(S(s=>s===!0?o:l({},Or)))):d(o)}function Ii(t,n,e){if(n.path==="**")return gs(e);if(n.path==="")return n.pathMatch==="full"&&(t.hasChildren()||e.length>0)?l({},Or):{matched:!0,consumedSegments:[],remainingSegments:e,parameters:{},positionalParamSegments:{}};let i=(n.matcher||ei)(e,t,n);if(!i)return l({},Or);let o={};Object.entries(i.posParams??{}).forEach(([a,c])=>{o[a]=c.path});let s=i.consumed.length>0?l(l({},o),i.consumed[i.consumed.length-1].parameters):o;return{matched:!0,consumedSegments:i.consumed,remainingSegments:e.slice(i.consumed.length),parameters:s,positionalParamSegments:i.posParams??{}}}function gs(t){return{matched:!0,parameters:t.length>0?ri(t).parameters:{},consumedSegments:t,remainingSegments:[],positionalParamSegments:{}}}function Kn(t,n,e,r){return e.length>0&&ys(t,e,r)?{segmentGroup:new g(n,ms(r,new g(e,t.children))),slicedSegments:[]}:e.length===0&&Ss(t,e,r)?{segmentGroup:new g(t.segments,vs(t,e,r,t.children)),slicedSegments:e}:{segmentGroup:new g(t.segments,t.children),slicedSegments:e}}function vs(t,n,e,r){let i={};for(let o of e)if($t(t,n,o)&&!r[$(o)]){let s=new g([],{});i[$(o)]=s}return l(l({},r),i)}function ms(t,n){let e={};e[p]=n;for(let r of t)if(r.path===""&&$(r)!==p){let i=new g([],{});e[$(r)]=i}return e}function ys(t,n,e){return e.some(r=>$t(t,n,r)&&$(r)!==p)}function Ss(t,n,e){return e.some(r=>$t(t,n,r))}function $t(t,n,e){return(t.hasChildren()||n.length>0)&&e.pathMatch==="full"?!1:e.path===""}function Rs(t,n,e){return n.length===0&&!t.children[e]}var _r=class{};function ws(t,n,e,r,i,o,s="emptyOnly"){return new Nr(t,n,e,r,i,s,o).recognize()}var Cs=31,Nr=class{injector;configLoader;rootComponentType;config;urlTree;paramsInheritanceStrategy;urlSerializer;applyRedirects;absoluteRedirectCount=0;allowRedirects=!0;constructor(n,e,r,i,o,s,a){this.injector=n,this.configLoader=e,this.rootComponentType=r,this.config=i,this.urlTree=o,this.paramsInheritanceStrategy=s,this.urlSerializer=a,this.applyRedirects=new Dr(this.urlSerializer,this.urlTree)}noMatchError(n){return new w(4002,`'${n.segmentGroup}'`)}recognize(){let n=Kn(this.urlTree.root,[],[],this.config).segmentGroup;return this.match(n).pipe(S(({children:e,rootSnapshot:r})=>{let i=new P(r,e),o=new Ze("",i),s=di(r,[],this.urlTree.queryParams,this.urlTree.fragment);return s.queryParams=this.urlTree.queryParams,o.url=this.urlSerializer.serialize(s),{state:o,tree:s}}))}match(n){let e=new oe([],Object.freeze({}),Object.freeze(l({},this.urlTree.queryParams)),this.urlTree.fragment,Object.freeze({}),p,this.rootComponentType,null,{});return this.processSegmentGroup(this.injector,this.config,n,p,e).pipe(S(r=>({children:r,rootSnapshot:e})),te(r=>{if(r instanceof Ke)return this.urlTree=r.urlTree,this.match(r.urlTree.root);throw r instanceof Qe?this.noMatchError(r):r}))}processSegmentGroup(n,e,r,i,o){return r.segments.length===0&&r.hasChildren()?this.processChildren(n,e,r,o):this.processSegment(n,e,r,r.segments,i,!0,o).pipe(S(s=>s instanceof P?[s]:[]))}processChildren(n,e,r,i){let o=[];for(let s of Object.keys(r.children))s==="primary"?o.unshift(s):o.push(s);return D(o).pipe(ue(s=>{let a=r.children[s],c=jo(e,s);return this.processSegmentGroup(n,c,a,s,i)}),Gr((s,a)=>(s.push(...a),s)),Wt(null),qr(),O(s=>{if(s===null)return ge(r);let a=Ti(s);return Es(a),d(a)}))}processSegment(n,e,r,i,o,s,a){return D(e).pipe(ue(c=>this.processSegmentAgainstRoute(c._injector??n,e,c,r,i,o,s,a).pipe(te(u=>{if(u instanceof Qe)return d(null);throw u}))),Q(c=>!!c),te(c=>{if(Ei(c))return Rs(r,i,o)?d(new _r):ge(r);throw c}))}processSegmentAgainstRoute(n,e,r,i,o,s,a,c){return $(r)!==s&&(s===p||!$t(i,o,r))?ge(i):r.redirectTo===void 0?this.matchSegmentAgainstRoute(n,i,r,o,s,c):this.allowRedirects&&a?this.expandSegmentAgainstRouteUsingRedirect(n,i,e,r,o,s,c):ge(i)}expandSegmentAgainstRouteUsingRedirect(n,e,r,i,o,s,a){let{matched:c,parameters:u,consumedSegments:h,positionalParamSegments:v,remainingSegments:y}=Ii(e,i,o);if(!c)return ge(e);typeof i.redirectTo=="string"&&i.redirectTo[0]==="/"&&(this.absoluteRedirectCount++,this.absoluteRedirectCount>Cs&&(this.allowRedirects=!1));let E=new oe(o,u,Object.freeze(l({},this.urlTree.queryParams)),this.urlTree.fragment,Xn(i),$(i),i.component??i._loadedComponent??null,i,Jn(i)),C=Ut(E,a,this.paramsInheritanceStrategy);return E.params=Object.freeze(C.params),E.data=Object.freeze(C.data),this.applyRedirects.applyRedirectCommands(h,i.redirectTo,v,E,n).pipe(_(ee=>this.applyRedirects.lineralizeSegments(i,ee)),O(ee=>this.processSegment(n,r,e,ee.concat(y),s,!1,a)))}matchSegmentAgainstRoute(n,e,r,i,o,s){let a=ps(e,r,i,n,this.urlSerializer);return r.path==="**"&&(e.children={}),a.pipe(_(c=>c.matched?(n=r._injector??n,this.getChildConfig(n,r,i).pipe(_(({routes:u})=>{let h=r._loadedInjector??n,{parameters:v,consumedSegments:y,remainingSegments:E}=c,C=new oe(y,v,Object.freeze(l({},this.urlTree.queryParams)),this.urlTree.fragment,Xn(r),$(r),r.component??r._loadedComponent??null,r,Jn(r)),M=Ut(C,s,this.paramsInheritanceStrategy);C.params=Object.freeze(M.params),C.data=Object.freeze(M.data);let{segmentGroup:ee,slicedSegments:Bt}=Kn(e,y,E,u);if(Bt.length===0&&ee.hasChildren())return this.processChildren(h,u,ee,C).pipe(S(rt=>new P(C,rt)));if(u.length===0&&Bt.length===0)return d(new P(C,[]));let ki=$(r)===o;return this.processSegment(h,u,ee,Bt,ki?p:o,!0,C).pipe(S(rt=>new P(C,rt instanceof P?[rt]:[])))}))):ge(e)))}getChildConfig(n,e,r){return e.children?d({routes:e.children,injector:n}):e.loadChildren?e._loadedRoutes!==void 0?d({routes:e._loadedRoutes,injector:e._loadedInjector}):us(n,e,r,this.urlSerializer).pipe(O(i=>i?this.configLoader.loadChildren(n,e).pipe(I(o=>{e._loadedRoutes=o.routes,e._loadedInjector=o.injector})):hs(e))):d({routes:[],injector:n})}};function Es(t){t.sort((n,e)=>n.value.outlet===p?-1:e.value.outlet===p?1:n.value.outlet.localeCompare(e.value.outlet))}function bs(t){let n=t.value.routeConfig;return n&&n.path===""}function Ti(t){let n=[],e=new Set;for(let r of t){if(!bs(r)){n.push(r);continue}let i=n.find(o=>r.value.routeConfig===o.value.routeConfig);i!==void 0?(i.children.push(...r.children),e.add(i)):n.push(r)}for(let r of e){let i=Ti(r.children);n.push(new P(r.value,i))}return n.filter(r=>!e.has(r))}function Xn(t){return t.data||{}}function Jn(t){return t.resolve||{}}function Is(t,n,e,r,i,o){return O(s=>ws(t,n,e,r,s.extractedUrl,i,o).pipe(S(({state:a,tree:c})=>L(l({},s),{targetSnapshot:a,urlAfterRedirects:c}))))}function Ts(t,n){return O(e=>{let{targetSnapshot:r,guards:{canActivateChecks:i}}=e;if(!i.length)return d(e);let o=new Set(i.map(c=>c.route)),s=new Set;for(let c of o)if(!s.has(c))for(let u of Ai(c))s.add(u);let a=0;return D(s).pipe(ue(c=>o.has(c)?As(c,r,t,n):(c.data=Ut(c,c.parent,t).resolve,d(void 0))),I(()=>a++),Zt(1),O(c=>a===s.size?d(e):q))})}function Ai(t){let n=t.children.map(e=>Ai(e)).flat();return[t,...n]}function As(t,n,e,r){let i=t.routeConfig,o=t._resolve;return i?.title!==void 0&&!yi(i)&&(o[Xe]=i.title),nt(()=>(t.data=Ut(t,t.parent,e).resolve,Ms(o,t,n,r).pipe(S(s=>(t._resolvedData=s,t.data=l(l({},t.data),s),null)))))}function Ms(t,n,e,r){let i=Rr(t);if(i.length===0)return d({});let o={};return D(i).pipe(O(s=>Ds(t[s],n,e,r).pipe(Q(),I(a=>{if(a instanceof we)throw Lt(new ae,a);o[s]=a}))),Zt(1),S(()=>o),te(s=>Ei(s)?q:Me(s)))}function Ds(t,n,e,r){let i=Ee(n)??r,o=Ie(t,i),s=o.resolve?o.resolve(n,e):j(i,()=>o(n,e));return Z(s)}function yr(t){return _(n=>{let e=t(n);return e?D(e).pipe(S(()=>n)):d(n)})}var jr=(()=>{class t{buildTitle(e){let r,i=e.root;for(;i!==void 0;)r=this.getResolvedTitleForRoute(i)??r,i=i.children.find(o=>o.outlet===p);return r}getResolvedTitleForRoute(e){return e.data[Xe]}static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:()=>f(Mi),providedIn:"root"})}return t})(),Mi=(()=>{class t extends jr{title;constructor(e){super(),this.title=e}updateTitle(e){let r=this.buildTitle(e);r!==void 0&&this.title.setTitle(r)}static \u0275fac=function(r){return new(r||t)(m(Gn))};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),Te=new T("",{providedIn:"root",factory:()=>({})}),tt=new T(""),Di=(()=>{class t{componentLoaders=new WeakMap;childrenLoaders=new WeakMap;onLoadStartListener;onLoadEndListener;compiler=f(Tn);loadComponent(e,r){if(this.componentLoaders.get(r))return this.componentLoaders.get(r);if(r._loadedComponent)return d(r._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(r);let i=Z(j(e,()=>r.loadComponent())).pipe(S(_i),_(Ni),I(s=>{this.onLoadEndListener&&this.onLoadEndListener(r),r._loadedComponent=s}),it(()=>{this.componentLoaders.delete(r)})),o=new Vt(i,()=>new V).pipe(Ft());return this.componentLoaders.set(r,o),o}loadChildren(e,r){if(this.childrenLoaders.get(r))return this.childrenLoaders.get(r);if(r._loadedRoutes)return d({routes:r._loadedRoutes,injector:r._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(r);let o=Oi(r,this.compiler,e,this.onLoadEndListener).pipe(it(()=>{this.childrenLoaders.delete(r)})),s=new Vt(o,()=>new V).pipe(Ft());return this.childrenLoaders.set(r,s),s}static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function Oi(t,n,e,r){return Z(j(e,()=>t.loadChildren())).pipe(S(_i),_(Ni),O(i=>i instanceof fn||Array.isArray(i)?d(i):D(n.compileModuleAsync(i))),S(i=>{r&&r(t);let o,s,a=!1;return Array.isArray(i)?(s=i,a=!0):(o=i.create(e).injector,s=o.get(tt,[],{optional:!0,self:!0}).flat()),{routes:s.map(xr),injector:o}}))}function Os(t){return t&&typeof t=="object"&&"default"in t}function _i(t){return Os(t)?t.default:t}function Ni(t){return d(t)}var zt=(()=>{class t{static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:()=>f(_s),providedIn:"root"})}return t})(),_s=(()=>{class t{shouldProcessUrl(e){return!0}extract(e){return e}merge(e,r){return e}static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),Pi=new T("");var Ui=new T(""),Li=(()=>{class t{currentNavigation=at(null,{equal:()=>!1});currentTransition=null;lastSuccessfulNavigation=null;events=new V;transitionAbortWithErrorSubject=new V;configLoader=f(Di);environmentInjector=f(de);destroyRef=f(Kr);urlSerializer=f(Je);rootContexts=f(be);location=f(lt);inputBindingEnabled=f(kt,{optional:!0})!==null;titleStrategy=f(jr);options=f(Te,{optional:!0})||{};paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly";urlHandlingStrategy=f(zt);createViewTransition=f(Pi,{optional:!0});navigationErrorHandler=f(Ui,{optional:!0});navigationId=0;get hasRequestedNavigation(){return this.navigationId!==0}transitions;afterPreactivation=()=>d(void 0);rootComponentType=null;destroyed=!1;constructor(){let e=i=>this.events.next(new Tt(i)),r=i=>this.events.next(new At(i));this.configLoader.onLoadEndListener=r,this.configLoader.onLoadStartListener=e,this.destroyRef.onDestroy(()=>{this.destroyed=!0})}complete(){this.transitions?.complete()}handleNavigationRequest(e){let r=++this.navigationId;K(()=>{this.transitions?.next(L(l({},e),{extractedUrl:this.urlHandlingStrategy.extract(e.rawUrl),targetSnapshot:null,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null,abortController:new AbortController,id:r}))})}setupNavigations(e){return this.transitions=new x(null),this.transitions.pipe(Y(r=>r!==null),_(r=>{let i=!1;return d(r).pipe(_(o=>{if(this.navigationId>r.id)return this.cancelNavigationTransition(r,"",A.SupersededByNewNavigation),q;this.currentTransition=r,this.currentNavigation.set({id:o.id,initialUrl:o.rawUrl,extractedUrl:o.extractedUrl,targetBrowserUrl:typeof o.extras.browserUrl=="string"?this.urlSerializer.parse(o.extras.browserUrl):o.extras.browserUrl,trigger:o.source,extras:o.extras,previousNavigation:this.lastSuccessfulNavigation?L(l({},this.lastSuccessfulNavigation),{previousNavigation:null}):null,abort:()=>o.abortController.abort()});let s=!e.navigated||this.isUpdatingInternalState()||this.isUpdatedBrowserUrl(),a=o.extras.onSameUrlNavigation??e.onSameUrlNavigation;if(!s&&a!=="reload")return this.events.next(new G(o.id,this.urlSerializer.serialize(o.rawUrl),"",Ve.IgnoredSameUrlNavigation)),o.resolve(!1),q;if(this.urlHandlingStrategy.shouldProcessUrl(o.rawUrl))return d(o).pipe(_(c=>(this.events.next(new ce(c.id,this.urlSerializer.serialize(c.extractedUrl),c.source,c.restoredState)),c.id!==this.navigationId?q:Promise.resolve(c))),Is(this.environmentInjector,this.configLoader,this.rootComponentType,e.config,this.urlSerializer,this.paramsInheritanceStrategy),I(c=>{r.targetSnapshot=c.targetSnapshot,r.urlAfterRedirects=c.urlAfterRedirects,this.currentNavigation.update(h=>(h.finalUrl=c.urlAfterRedirects,h));let u=new qe(c.id,this.urlSerializer.serialize(c.extractedUrl),this.urlSerializer.serialize(c.urlAfterRedirects),c.targetSnapshot);this.events.next(u)}));if(s&&this.urlHandlingStrategy.shouldProcessUrl(o.currentRawUrl)){let{id:c,extractedUrl:u,source:h,restoredState:v,extras:y}=o,E=new ce(c,this.urlSerializer.serialize(u),h,v);this.events.next(E);let C=vi(this.rootComponentType).snapshot;return this.currentTransition=r=L(l({},o),{targetSnapshot:C,urlAfterRedirects:u,extras:L(l({},y),{skipLocationChange:!1,replaceUrl:!1})}),this.currentNavigation.update(M=>(M.finalUrl=u,M)),d(r)}else return this.events.next(new G(o.id,this.urlSerializer.serialize(o.extractedUrl),"",Ve.IgnoredByUrlHandlingStrategy)),o.resolve(!1),q}),I(o=>{let s=new Ct(o.id,this.urlSerializer.serialize(o.extractedUrl),this.urlSerializer.serialize(o.urlAfterRedirects),o.targetSnapshot);this.events.next(s)}),S(o=>(this.currentTransition=r=L(l({},o),{guards:Vo(o.targetSnapshot,o.currentSnapshot,this.rootContexts)}),r)),ts(this.environmentInjector,o=>this.events.next(o)),I(o=>{if(r.guardsResult=o.guardsResult,o.guardsResult&&typeof o.guardsResult!="boolean")throw Lt(this.urlSerializer,o.guardsResult);let s=new Et(o.id,this.urlSerializer.serialize(o.extractedUrl),this.urlSerializer.serialize(o.urlAfterRedirects),o.targetSnapshot,!!o.guardsResult);this.events.next(s)}),Y(o=>o.guardsResult?!0:(this.cancelNavigationTransition(o,"",A.GuardRejected),!1)),yr(o=>{if(o.guards.canActivateChecks.length!==0)return d(o).pipe(I(s=>{let a=new bt(s.id,this.urlSerializer.serialize(s.extractedUrl),this.urlSerializer.serialize(s.urlAfterRedirects),s.targetSnapshot);this.events.next(a)}),_(s=>{let a=!1;return d(s).pipe(Ts(this.paramsInheritanceStrategy,this.environmentInjector),I({next:()=>a=!0,complete:()=>{a||this.cancelNavigationTransition(s,"",A.NoDataFromResolver)}}))}),I(s=>{let a=new It(s.id,this.urlSerializer.serialize(s.extractedUrl),this.urlSerializer.serialize(s.urlAfterRedirects),s.targetSnapshot);this.events.next(a)}))}),yr(o=>{let s=a=>{let c=[];if(a.routeConfig?.loadComponent){let u=Ee(a)??this.environmentInjector;c.push(this.configLoader.loadComponent(u,a.routeConfig).pipe(I(h=>{a.component=h}),S(()=>{})))}for(let u of a.children)c.push(...s(u));return c};return qt(s(o.targetSnapshot.root)).pipe(Wt(null),le(1))}),yr(()=>this.afterPreactivation()),_(()=>{let{currentSnapshot:o,targetSnapshot:s}=r,a=this.createViewTransition?.(this.environmentInjector,o.root,s.root);return a?D(a).pipe(S(()=>r)):d(r)}),S(o=>{let s=$o(e.routeReuseStrategy,o.targetSnapshot,o.currentRouterState);return this.currentTransition=r=L(l({},o),{targetRouterState:s}),this.currentNavigation.update(a=>(a.targetRouterState=s,a)),r}),I(()=>{this.events.next(new Ge)}),Fo(this.rootContexts,e.routeReuseStrategy,o=>this.events.next(o),this.inputBindingEnabled),le(1),Yt(new Hr(o=>{let s=r.abortController.signal,a=()=>o.next();return s.addEventListener("abort",a),()=>s.removeEventListener("abort",a)}).pipe(Y(()=>!i&&!r.targetRouterState),I(()=>{this.cancelNavigationTransition(r,r.abortController.signal.reason+"",A.Aborted)}))),I({next:o=>{i=!0,this.lastSuccessfulNavigation=K(this.currentNavigation),this.events.next(new z(o.id,this.urlSerializer.serialize(o.extractedUrl),this.urlSerializer.serialize(o.urlAfterRedirects))),this.titleStrategy?.updateTitle(o.targetRouterState.snapshot),o.resolve(!0)},complete:()=>{i=!0}}),Yt(this.transitionAbortWithErrorSubject.pipe(I(o=>{throw o}))),it(()=>{i||this.cancelNavigationTransition(r,"",A.SupersededByNewNavigation),this.currentTransition?.id===r.id&&(this.currentNavigation.set(null),this.currentTransition=null)}),te(o=>{if(this.destroyed)return r.resolve(!1),q;if(i=!0,Ci(o))this.events.next(new B(r.id,this.urlSerializer.serialize(r.extractedUrl),o.message,o.cancellationCode)),Bo(o)?this.events.next(new Re(o.url,o.navigationBehaviorOptions)):r.resolve(!1);else{let s=new Se(r.id,this.urlSerializer.serialize(r.extractedUrl),o,r.targetSnapshot??void 0);try{let a=j(this.environmentInjector,()=>this.navigationErrorHandler?.(s));if(a instanceof we){let{message:c,cancellationCode:u}=Lt(this.urlSerializer,a);this.events.next(new B(r.id,this.urlSerializer.serialize(r.extractedUrl),c,u)),this.events.next(new Re(a.redirectTo,a.navigationBehaviorOptions))}else throw this.events.next(s),o}catch(a){this.options.resolveNavigationPromiseOnError?r.resolve(!1):r.reject(a)}}return q}))}))}cancelNavigationTransition(e,r,i){let o=new B(e.id,this.urlSerializer.serialize(e.extractedUrl),r,i);this.events.next(o),e.resolve(!1)}isUpdatingInternalState(){return this.currentTransition?.extractedUrl.toString()!==this.currentTransition?.currentUrlTree.toString()}isUpdatedBrowserUrl(){let e=this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(!0))),r=K(this.currentNavigation),i=r?.targetBrowserUrl??r?.extractedUrl;return e.toString()!==i?.toString()&&!r?.extras.skipLocationChange}static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function Ns(t){return t!==He}var xi=(()=>{class t{static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:()=>f(Ps),providedIn:"root"})}return t})(),jt=class{shouldDetach(n){return!1}store(n,e){}shouldAttach(n){return!1}retrieve(n){return null}shouldReuseRoute(n,e){return n.routeConfig===e.routeConfig}},Ps=(()=>{class t extends jt{static \u0275fac=(()=>{let e;return function(i){return(e||(e=Xt(t)))(i||t)}})();static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})(),ji=(()=>{class t{urlSerializer=f(Je);options=f(Te,{optional:!0})||{};canceledNavigationResolution=this.options.canceledNavigationResolution||"replace";location=f(lt);urlHandlingStrategy=f(zt);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";currentUrlTree=new F;getCurrentUrlTree(){return this.currentUrlTree}rawUrlTree=this.currentUrlTree;getRawUrlTree(){return this.rawUrlTree}createBrowserPath({finalUrl:e,initialUrl:r,targetBrowserUrl:i}){let o=e!==void 0?this.urlHandlingStrategy.merge(e,r):r,s=i??o;return s instanceof F?this.urlSerializer.serialize(s):s}commitTransition({targetRouterState:e,finalUrl:r,initialUrl:i}){r&&e?(this.currentUrlTree=r,this.rawUrlTree=this.urlHandlingStrategy.merge(r,i),this.routerState=e):this.rawUrlTree=i}routerState=vi(null);getRouterState(){return this.routerState}stateMemento=this.createStateMemento();updateStateMemento(){this.stateMemento=this.createStateMemento()}createStateMemento(){return{rawUrlTree:this.rawUrlTree,currentUrlTree:this.currentUrlTree,routerState:this.routerState}}resetInternalState({finalUrl:e}){this.routerState=this.stateMemento.routerState,this.currentUrlTree=this.stateMemento.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,e??this.rawUrlTree)}static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:()=>f(Us),providedIn:"root"})}return t})(),Us=(()=>{class t extends ji{currentPageId=0;lastSuccessfulId=-1;restoredState(){return this.location.getState()}get browserPageId(){return this.canceledNavigationResolution!=="computed"?this.currentPageId:this.restoredState()?.\u0275routerPageId??this.currentPageId}registerNonRouterCurrentEntryChangeListener(e){return this.location.subscribe(r=>{r.type==="popstate"&&setTimeout(()=>{e(r.url,r.state,"popstate")})})}handleRouterEvent(e,r){e instanceof ce?this.updateStateMemento():e instanceof G?this.commitTransition(r):e instanceof qe?this.urlUpdateStrategy==="eager"&&(r.extras.skipLocationChange||this.setBrowserUrl(this.createBrowserPath(r),r)):e instanceof Ge?(this.commitTransition(r),this.urlUpdateStrategy==="deferred"&&!r.extras.skipLocationChange&&this.setBrowserUrl(this.createBrowserPath(r),r)):e instanceof B&&e.code!==A.SupersededByNewNavigation&&e.code!==A.Redirect?this.restoreHistory(r):e instanceof Se?this.restoreHistory(r,!0):e instanceof z&&(this.lastSuccessfulId=e.id,this.currentPageId=this.browserPageId)}setBrowserUrl(e,{extras:r,id:i}){let{replaceUrl:o,state:s}=r;if(this.location.isCurrentPathEqualTo(e)||o){let a=this.browserPageId,c=l(l({},s),this.generateNgRouterState(i,a));this.location.replaceState(e,"",c)}else{let a=l(l({},s),this.generateNgRouterState(i,this.browserPageId+1));this.location.go(e,"",a)}}restoreHistory(e,r=!1){if(this.canceledNavigationResolution==="computed"){let i=this.browserPageId,o=this.currentPageId-i;o!==0?this.location.historyGo(o):this.getCurrentUrlTree()===e.finalUrl&&o===0&&(this.resetInternalState(e),this.resetUrlToCurrentUrlTree())}else this.canceledNavigationResolution==="replace"&&(r&&this.resetInternalState(e),this.resetUrlToCurrentUrlTree())}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.getRawUrlTree()),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(e,r){return this.canceledNavigationResolution==="computed"?{navigationId:e,\u0275routerPageId:r}:{navigationId:e}}static \u0275fac=(()=>{let e;return function(i){return(e||(e=Xt(t)))(i||t)}})();static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function kr(t,n){t.events.pipe(Y(e=>e instanceof z||e instanceof B||e instanceof Se||e instanceof G),S(e=>e instanceof z||e instanceof G?0:(e instanceof B?e.code===A.Redirect||e.code===A.SupersededByNewNavigation:!1)?2:1),Y(e=>e!==2),le(1)).subscribe(()=>{n()})}var Ls={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},xs={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"},Ae=(()=>{class t{get currentUrlTree(){return this.stateManager.getCurrentUrlTree()}get rawUrlTree(){return this.stateManager.getRawUrlTree()}disposed=!1;nonRouterCurrentEntryChangeSubscription;console=f(or);stateManager=f(ji);options=f(Te,{optional:!0})||{};pendingTasks=f(Xr);urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred";navigationTransitions=f(Li);urlSerializer=f(Je);location=f(lt);urlHandlingStrategy=f(zt);injector=f(de);_events=new V;get events(){return this._events}get routerState(){return this.stateManager.getRouterState()}navigated=!1;routeReuseStrategy=f(xi);onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore";config=f(tt,{optional:!0})?.flat()??[];componentInputBindingEnabled=!!f(kt,{optional:!0});currentNavigation=this.navigationTransitions.currentNavigation.asReadonly();constructor(){this.resetConfig(this.config),this.navigationTransitions.setupNavigations(this).subscribe({error:e=>{this.console.warn(e)}}),this.subscribeToNavigationEvents()}eventsSubscription=new $r;subscribeToNavigationEvents(){let e=this.navigationTransitions.events.subscribe(r=>{try{let i=this.navigationTransitions.currentTransition,o=K(this.navigationTransitions.currentNavigation);if(i!==null&&o!==null){if(this.stateManager.handleRouterEvent(r,o),r instanceof B&&r.code!==A.Redirect&&r.code!==A.SupersededByNewNavigation)this.navigated=!0;else if(r instanceof z)this.navigated=!0;else if(r instanceof Re){let s=r.navigationBehaviorOptions,a=this.urlHandlingStrategy.merge(r.url,i.currentRawUrl),c=l({browserUrl:i.extras.browserUrl,info:i.extras.info,skipLocationChange:i.extras.skipLocationChange,replaceUrl:i.extras.replaceUrl||this.urlUpdateStrategy==="eager"||Ns(i.source)},s);this.scheduleNavigation(a,He,null,c,{resolve:i.resolve,reject:i.reject,promise:i.promise})}}Lo(r)&&this._events.next(r)}catch(i){this.navigationTransitions.transitionAbortWithErrorSubject.next(i)}});this.eventsSubscription.add(e)}resetRootComponentType(e){this.routerState.root.component=e,this.navigationTransitions.rootComponentType=e}initialNavigation(){this.setUpLocationChangeListener(),this.navigationTransitions.hasRequestedNavigation||this.navigateToSyncWithBrowser(this.location.path(!0),He,this.stateManager.restoredState())}setUpLocationChangeListener(){this.nonRouterCurrentEntryChangeSubscription??=this.stateManager.registerNonRouterCurrentEntryChangeListener((e,r,i)=>{this.navigateToSyncWithBrowser(e,i,r)})}navigateToSyncWithBrowser(e,r,i){let o={replaceUrl:!0},s=i?.navigationId?i:null;if(i){let c=l({},i);delete c.navigationId,delete c.\u0275routerPageId,Object.keys(c).length!==0&&(o.state=c)}let a=this.parseUrl(e);this.scheduleNavigation(a,r,s,o).catch(c=>{this.disposed||this.injector.get(st)(c)})}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return K(this.navigationTransitions.currentNavigation)}get lastSuccessfulNavigation(){return this.navigationTransitions.lastSuccessfulNavigation}resetConfig(e){this.config=e.map(xr),this.navigated=!1}ngOnDestroy(){this.dispose()}dispose(){this._events.unsubscribe(),this.navigationTransitions.complete(),this.nonRouterCurrentEntryChangeSubscription&&(this.nonRouterCurrentEntryChangeSubscription.unsubscribe(),this.nonRouterCurrentEntryChangeSubscription=void 0),this.disposed=!0,this.eventsSubscription.unsubscribe()}createUrlTree(e,r={}){let{relativeTo:i,queryParams:o,fragment:s,queryParamsHandling:a,preserveFragment:c}=r,u=c?this.currentUrlTree.fragment:s,h=null;switch(a??this.options.defaultQueryParamsHandling){case"merge":h=l(l({},this.currentUrlTree.queryParams),o);break;case"preserve":h=this.currentUrlTree.queryParams;break;default:h=o||null}h!==null&&(h=this.removeEmptyProps(h));let v;try{let y=i?i.snapshot:this.routerState.snapshot.root;v=hi(y)}catch{(typeof e[0]!="string"||e[0][0]!=="/")&&(e=[]),v=this.currentUrlTree.root}return fi(v,e,h,u??null)}navigateByUrl(e,r={skipLocationChange:!1}){let i=J(e)?e:this.parseUrl(e),o=this.urlHandlingStrategy.merge(i,this.rawUrlTree);return this.scheduleNavigation(o,He,null,r)}navigate(e,r={skipLocationChange:!1}){return js(e),this.navigateByUrl(this.createUrlTree(e,r),r)}serializeUrl(e){return this.urlSerializer.serialize(e)}parseUrl(e){try{return this.urlSerializer.parse(e)}catch{return this.urlSerializer.parse("/")}}isActive(e,r){let i;if(r===!0?i=l({},Ls):r===!1?i=l({},xs):i=r,J(e))return Wn(this.currentUrlTree,e,i);let o=this.parseUrl(e);return Wn(this.currentUrlTree,o,i)}removeEmptyProps(e){return Object.entries(e).reduce((r,[i,o])=>(o!=null&&(r[i]=o),r),{})}scheduleNavigation(e,r,i,o,s){if(this.disposed)return Promise.resolve(!1);let a,c,u;s?(a=s.resolve,c=s.reject,u=s.promise):u=new Promise((v,y)=>{a=v,c=y});let h=this.pendingTasks.add();return kr(this,()=>{queueMicrotask(()=>this.pendingTasks.remove(h))}),this.navigationTransitions.handleNavigationRequest({source:r,restoredState:i,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:e,extras:o,resolve:a,reject:c,promise:u,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),u.catch(v=>Promise.reject(v))}static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function js(t){for(let n=0;n<t.length;n++)if(t[n]==null)throw new w(4008,!1)}var Ht=(()=>{class t{router;route;tabIndexAttribute;renderer;el;locationStrategy;reactiveHref=at(null);get href(){return K(this.reactiveHref)}set href(e){this.reactiveHref.set(e)}target;queryParams;fragment;queryParamsHandling;state;info;relativeTo;isAnchorElement;subscription;onChanges=new V;applicationErrorHandler=f(st);options=f(Te,{optional:!0});constructor(e,r,i,o,s,a){this.router=e,this.route=r,this.tabIndexAttribute=i,this.renderer=o,this.el=s,this.locationStrategy=a,this.reactiveHref.set(f(new An("href"),{optional:!0}));let c=s.nativeElement.tagName?.toLowerCase();this.isAnchorElement=c==="a"||c==="area"||!!(typeof customElements=="object"&&customElements.get(c)?.observedAttributes?.includes?.("href")),this.isAnchorElement?this.setTabIndexIfNotOnNativeEl("0"):this.subscribeToNavigationEventsIfNecessary()}subscribeToNavigationEventsIfNecessary(){if(this.subscription!==void 0||!this.isAnchorElement)return;let e=this.preserveFragment,r=i=>i==="merge"||i==="preserve";e||=r(this.queryParamsHandling),e||=!this.queryParamsHandling&&!r(this.options?.defaultQueryParamsHandling),e&&(this.subscription=this.router.events.subscribe(i=>{i instanceof z&&this.updateHref()}))}preserveFragment=!1;skipLocationChange=!1;replaceUrl=!1;setTabIndexIfNotOnNativeEl(e){this.tabIndexAttribute!=null||this.isAnchorElement||this.applyAttributeValue("tabindex",e)}ngOnChanges(e){this.isAnchorElement&&(this.updateHref(),this.subscribeToNavigationEventsIfNecessary()),this.onChanges.next(this)}routerLinkInput=null;set routerLink(e){e==null?(this.routerLinkInput=null,this.setTabIndexIfNotOnNativeEl(null)):(J(e)?this.routerLinkInput=e:this.routerLinkInput=Array.isArray(e)?e:[e],this.setTabIndexIfNotOnNativeEl("0"))}onClick(e,r,i,o,s){let a=this.urlTree;if(a===null||this.isAnchorElement&&(e!==0||r||i||o||s||typeof this.target=="string"&&this.target!="_self"))return!0;let c={skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state,info:this.info};return this.router.navigateByUrl(a,c)?.catch(u=>{this.applicationErrorHandler(u)}),!this.isAnchorElement}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){let e=this.urlTree;this.reactiveHref.set(e!==null&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(e))??"":null)}applyAttributeValue(e,r){let i=this.renderer,o=this.el.nativeElement;r!==null?i.setAttribute(o,e,r):i.removeAttribute(o,e)}get urlTree(){return this.routerLinkInput===null?null:J(this.routerLinkInput)?this.routerLinkInput:this.router.createUrlTree(this.routerLinkInput,{relativeTo:this.relativeTo!==void 0?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}static \u0275fac=function(r){return new(r||t)(k(Ae),k(W),Jr("tabindex"),k(nr),k(Jt),k(Nn))};static \u0275dir=Ne({type:t,selectors:[["","routerLink",""]],hostVars:2,hostBindings:function(r,i){r&1&&Cn("click",function(s){return i.onClick(s.button,s.ctrlKey,s.shiftKey,s.altKey,s.metaKey)}),r&2&&yn("href",i.reactiveHref(),ln)("target",i.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",info:"info",relativeTo:"relativeTo",preserveFragment:[2,"preserveFragment","preserveFragment",ut],skipLocationChange:[2,"skipLocationChange","skipLocationChange",ut],replaceUrl:[2,"replaceUrl","replaceUrl",ut],routerLink:"routerLink"},features:[De]})}return t})(),$s=(()=>{class t{router;element;renderer;cdr;link;links;classes=[];routerEventsSubscription;linkInputChangesSubscription;_isActive=!1;get isActive(){return this._isActive}routerLinkActiveOptions={exact:!1};ariaCurrentWhenActive;isActiveChange=new ne;constructor(e,r,i,o,s){this.router=e,this.element=r,this.renderer=i,this.cdr=o,this.link=s,this.routerEventsSubscription=e.events.subscribe(a=>{a instanceof z&&this.update()})}ngAfterContentInit(){d(this.links.changes,d(null)).pipe(Gt()).subscribe(e=>{this.update(),this.subscribeToEachLinkOnChanges()})}subscribeToEachLinkOnChanges(){this.linkInputChangesSubscription?.unsubscribe();let e=[...this.links.toArray(),this.link].filter(r=>!!r).map(r=>r.onChanges);this.linkInputChangesSubscription=D(e).pipe(Gt()).subscribe(r=>{this._isActive!==this.isLinkActive(this.router)(r)&&this.update()})}set routerLinkActive(e){let r=Array.isArray(e)?e:e.split(" ");this.classes=r.filter(i=>!!i)}ngOnChanges(e){this.update()}ngOnDestroy(){this.routerEventsSubscription.unsubscribe(),this.linkInputChangesSubscription?.unsubscribe()}update(){!this.links||!this.router.navigated||queueMicrotask(()=>{let e=this.hasActiveLinks();this.classes.forEach(r=>{e?this.renderer.addClass(this.element.nativeElement,r):this.renderer.removeClass(this.element.nativeElement,r)}),e&&this.ariaCurrentWhenActive!==void 0?this.renderer.setAttribute(this.element.nativeElement,"aria-current",this.ariaCurrentWhenActive.toString()):this.renderer.removeAttribute(this.element.nativeElement,"aria-current"),this._isActive!==e&&(this._isActive=e,this.cdr.markForCheck(),this.isActiveChange.emit(e))})}isLinkActive(e){let r=zs(this.routerLinkActiveOptions)?this.routerLinkActiveOptions:this.routerLinkActiveOptions.exact||!1;return i=>{let o=i.urlTree;return o?e.isActive(o,r):!1}}hasActiveLinks(){let e=this.isLinkActive(this.router);return this.link&&e(this.link)||this.links.some(e)}static \u0275fac=function(r){return new(r||t)(k(Ae),k(Jt),k(nr),k(ct),k(Ht,8))};static \u0275dir=Ne({type:t,selectors:[["","routerLinkActive",""]],contentQueries:function(r,i,o){if(r&1&&En(o,Ht,5),r&2){let s;bn(s=In())&&(i.links=s)}},inputs:{routerLinkActiveOptions:"routerLinkActiveOptions",ariaCurrentWhenActive:"ariaCurrentWhenActive",routerLinkActive:"routerLinkActive"},outputs:{isActiveChange:"isActiveChange"},exportAs:["routerLinkActive"],features:[De]})}return t})();function zs(t){return!!t.paths}var Hs=new T("");function Bs(t,...n){return Qt([{provide:tt,multi:!0,useValue:t},[],{provide:W,useFactory:Fs,deps:[Ae]},{provide:mn,multi:!0,useFactory:Vs},n.map(e=>e.\u0275providers)])}function Fs(t){return t.routerState.root}function Vs(){let t=f(ot);return n=>{let e=t.get(sr);if(n!==e.components[0])return;let r=t.get(Ae),i=t.get(qs);t.get(Gs)===1&&r.initialNavigation(),t.get(Ws,null,{optional:!0})?.setUpPreloading(),t.get(Hs,null,{optional:!0})?.init(),r.resetRootComponentType(e.componentTypes[0]),i.closed||(i.next(),i.complete(),i.unsubscribe())}}var qs=new T("",{factory:()=>new V}),Gs=new T("",{providedIn:"root",factory:()=>1});var Ws=new T("");export{Xi as a,ao as b,W as c,Ur as d,Ae as e,Ht as f,$s as g,Bs as h};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as J,c as K,e as Q,f as X,g as Z,h as ee}from"./chunk-HHK3LJFN.js";import{a as te}from"./chunk-HSZFTFM3.js";import{a as ie}from"./chunk-5K2HNBK3.js";import{$a as B,Ab as T,Bb as b,Jb as G,Kb as A,Mb as d,Nb as v,Oa as V,Ob as z,Sa as p,X as U,aa as E,e as P,eb as _,ec as H,fa as O,ga as k,nb as D,pa as u,qb as c,rb as o,rc as Y,sb as l,sc as j,tb as L,vc as q,zb as x}from"./chunk-MTI6UKQ3.js";var F=[{id:"aurora",name:"Aurora",stops:["#6d28d9","#7c3aed","#2563eb"],glow:"rgba(236,72,153,0.35)",ink:"#ffffff",inkSoft:"rgba(255,255,255,0.78)",inkFaint:"rgba(255,255,255,0.6)",tile:"rgba(255,255,255,0.08)",line:"rgba(255,255,255,0.14)",accent:"#ffffff"},{id:"sunset",name:"Sunset",stops:["#f97316","#db2777","#7c3aed"],glow:"rgba(250,204,21,0.4)",ink:"#ffffff",inkSoft:"rgba(255,255,255,0.82)",inkFaint:"rgba(255,255,255,0.66)",tile:"rgba(255,255,255,0.12)",line:"rgba(255,255,255,0.18)",accent:"#fde68a"},{id:"forest",name:"Forest",stops:["#064e3b","#047857","#0d9488"],glow:"rgba(163,230,53,0.35)",ink:"#ffffff",inkSoft:"rgba(255,255,255,0.8)",inkFaint:"rgba(255,255,255,0.62)",tile:"rgba(255,255,255,0.1)",line:"rgba(255,255,255,0.16)",accent:"#bbf7d0"},{id:"midnight",name:"Midnight",stops:["#020617","#0f172a","#1e293b"],glow:"rgba(56,189,248,0.3)",ink:"#e2e8f0",inkSoft:"rgba(226,232,240,0.72)",inkFaint:"rgba(148,163,184,0.7)",tile:"rgba(148,163,184,0.12)",line:"rgba(148,163,184,0.18)",accent:"#38bdf8"},{id:"candy",name:"Candy",stops:["#ec4899","#f43f5e","#fb923c"],glow:"rgba(255,255,255,0.4)",ink:"#ffffff",inkSoft:"rgba(255,255,255,0.85)",inkFaint:"rgba(255,255,255,0.7)",tile:"rgba(255,255,255,0.16)",line:"rgba(255,255,255,0.22)",accent:"#ffffff"},{id:"paper",name:"Paper",stops:["#f8fafc","#eef2f7","#dbe2ea"],glow:"rgba(124,58,237,0.18)",ink:"#0f172a",inkSoft:"rgba(15,23,42,0.7)",inkFaint:"rgba(15,23,42,0.5)",tile:"rgba(15,23,42,0.05)",line:"rgba(15,23,42,0.1)",accent:"#7c3aed"}],R=[{id:"classic",name:"Classic",description:"Stats, contributors and highlights"},{id:"minimal",name:"Minimal",description:"One big number, clean and centered"},{id:"bold",name:"Bold",description:"Oversized stat tiles front and center"}],ae=F[0],oe="classic",N=class a{W=1080;H=1350;FONT="ui-sans-serif, system-ui, -apple-system, Segoe UI, sans-serif";toBlob(e,t,i){return P(this,null,function*(){let n=this.render(e,t,i);return yield new Promise((s,r)=>{n.toBlob(m=>m?s(m):r(new Error("Canvas export failed")),"image/png")})})}toDataUrl(e,t,i){return this.render(e,t,i).toDataURL("image/png")}resolvePalette(e){return F.find(t=>t.id===e)??ae}resolveTemplate(e){return R.find(t=>t.id===e)?.id??oe}render(e,t,i){let n=this.resolvePalette(i?.paletteId),s=this.resolveTemplate(i?.template),r=Math.min(2,Math.max(1,window.devicePixelRatio||1)),m=document.createElement("canvas");m.width=this.W*r,m.height=this.H*r;let g=m.getContext("2d");if(!g)throw new Error("2D canvas context unavailable");switch(g.scale(r,r),g.textBaseline="alphabetic",this.drawBackground(g,n),s){case"minimal":this.renderMinimal(g,e,t,n);break;case"bold":this.renderBold(g,e,t,n);break;default:this.renderClassic(g,e,t,n)}return this.drawFooter(g,n,s==="minimal"),m}renderClassic(e,t,i,n){let r=120;e.fillStyle=n.inkSoft,e.font=`600 28px ${this.FONT}`,e.fillText("\u2387 GIT WRAPPED",80,r),r+=86,e.fillStyle=n.ink,e.font=`800 120px ${this.FONT}`,e.fillText(t.label,80,r),r+=52,e.fillStyle=n.inkSoft,e.font=`500 34px ${this.FONT}`,e.fillText(this.truncate(e,i,this.W-160),80,r),r+=70;let m=[[this.formatNumber(t.totalCommits),"commits"],[this.formatNumber(t.totalAuthors),"contributors"],[this.formatNumber(t.totalFilesTouched),"files touched"],[`+${this.formatNumber(t.totalAdditions)}`,"lines added"]],g=(this.W-160-30)/2,f=150;m.forEach(([y,w],h)=>{let I=h%2,W=Math.floor(h/2),S=80+I*(g+30),$=r+W*(f+24);this.roundRect(e,S,$,g,f,24),e.fillStyle=n.tile,e.fill(),e.fillStyle=n.ink,e.font=`800 60px ${this.FONT}`,e.fillText(y,S+32,$+78),e.fillStyle=n.inkFaint,e.font=`500 26px ${this.FONT}`,e.fillText(w,S+32,$+118)}),r+=f*2+24+70,e.fillStyle=n.inkFaint,e.font=`700 24px ${this.FONT}`,e.fillText("TOP CONTRIBUTORS",80,r),r+=44;let C=t.topContributors.slice(0,3),M=C[0]?.commits||1;C.forEach((y,w)=>{e.fillStyle=n.ink,e.font=`600 30px ${this.FONT}`,e.fillText(`${w+1}. ${this.truncate(e,y.author,520)}`,80,r+30),e.fillStyle=n.inkFaint,e.textAlign="right",e.fillText(`${y.commits}`,this.W-80,r+30),e.textAlign="left";let h=r+46;this.roundRect(e,80,h,this.W-160,10,5),e.fillStyle=n.line,e.fill(),this.roundRect(e,80,h,(this.W-160)*(y.commits/M),10,5),e.fillStyle=n.accent,e.fill(),r+=78}),r+=30,this.drawFunStats(e,t,n,80,r)}renderMinimal(e,t,i,n){let s=this.W/2;e.textAlign="center",e.fillStyle=n.inkFaint,e.font=`600 30px ${this.FONT}`,e.fillText("\u2387 GIT WRAPPED",s,360),e.fillStyle=n.ink,e.font=`800 220px ${this.FONT}`,e.fillText(t.label,s,560),e.fillStyle=n.inkSoft,e.font=`500 38px ${this.FONT}`,e.fillText(this.truncate(e,i,this.W-160),s,640),this.roundRect(e,s-60,690,120,8,4),e.fillStyle=n.accent,e.fill();let m=[[this.formatNumber(t.totalCommits),"commits"],[this.formatNumber(t.totalAuthors),"contributors"],[`${t.superlatives.longestStreakDays}d`,"streak"]],g=this.W/3,f=880;m.forEach(([M,y],w)=>{let h=g*w+g/2;e.fillStyle=n.ink,e.font=`800 76px ${this.FONT}`,e.fillText(M,h,f),e.fillStyle=n.inkFaint,e.font=`500 28px ${this.FONT}`,e.fillText(y,h,f+48)});let C=t.topContributors[0];C&&(e.fillStyle=n.inkFaint,e.font=`700 24px ${this.FONT}`,e.fillText("TOP CONTRIBUTOR",s,1080),e.fillStyle=n.ink,e.font=`600 44px ${this.FONT}`,e.fillText(this.truncate(e,C.author,this.W-160),s,1136)),e.textAlign="left"}renderBold(e,t,i,n){let r=130;e.fillStyle=n.inkSoft,e.font=`600 28px ${this.FONT}`,e.fillText("\u2387 GIT WRAPPED",80,r),r+=70,e.fillStyle=n.ink,e.font=`800 84px ${this.FONT}`,e.fillText(t.label,80,r),e.fillStyle=n.inkSoft,e.font=`500 30px ${this.FONT}`,e.fillText(this.truncate(e,i,this.W-160),80,r+44),r+=110;let m=[[this.formatNumber(t.totalCommits),"commits"],[this.formatNumber(t.totalAuthors),"contributors"],[`+${this.formatNumber(t.totalAdditions)}`,"lines added"],[`${t.nightOwlPercent}%`,"night-owl commits"]],g=28,f=(this.W-160-g)/2,C=340;m.forEach(([M,y],w)=>{let h=w%2,I=Math.floor(w/2),W=80+h*(f+g),S=r+I*(C+g);this.roundRect(e,W,S,f,C,32),e.fillStyle=n.tile,e.fill(),e.fillStyle=n.accent,this.roundRect(e,W+36,S+40,56,8,4),e.fill(),e.fillStyle=n.ink,e.font=`800 110px ${this.FONT}`,e.fillText(this.truncate(e,M,f-72),W+36,S+200),e.fillStyle=n.inkFaint,e.font=`500 30px ${this.FONT}`,e.fillText(this.truncate(e,y,f-72),W+36,S+256)})}drawFunStats(e,t,i,n,s){let r=s,m=[["\u{1F319}",`${t.nightOwlPercent}% night-owl commits`],["\u{1F6CB}\uFE0F",`${t.weekendWarriorPercent}% on weekends`],["\u{1F525}",`${t.superlatives.longestStreakDays}-day longest streak`]];t.superlatives.busiestHour&&m.push(["\u23F0",`peak hour ${String(t.superlatives.busiestHour.hour).padStart(2,"0")}:00`]),e.font=`500 30px ${this.FONT}`,m.forEach(([g,f])=>{e.fillStyle=i.ink,e.fillText(g,n,r+30),e.fillStyle=i.inkSoft,e.fillText(f,n+56,r+30),r+=56})}drawFooter(e,t,i){e.fillStyle=t.inkFaint,e.font=`500 24px ${this.FONT}`;let n="made with git-history-ui \xB7 npx git-history-ui";i?(e.textAlign="center",e.fillText(n,this.W/2,this.H-70),e.textAlign="left"):e.fillText(n,80,this.H-70)}drawBackground(e,t){let i=e.createLinearGradient(0,0,this.W,this.H);i.addColorStop(0,t.stops[0]),i.addColorStop(.5,t.stops[1]),i.addColorStop(1,t.stops[2]),e.fillStyle=i,e.fillRect(0,0,this.W,this.H);let n=e.createRadialGradient(this.W*.85,120,0,this.W*.85,120,520);n.addColorStop(0,t.glow),n.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=n,e.fillRect(0,0,this.W,this.H)}roundRect(e,t,i,n,s,r){let m=Math.min(r,n/2,s/2);e.beginPath(),e.moveTo(t+m,i),e.arcTo(t+n,i,t+n,i+s,m),e.arcTo(t+n,i+s,t,i+s,m),e.arcTo(t,i+s,t,i,m),e.arcTo(t,i,t+n,i,m),e.closePath()}truncate(e,t,i){if(e.measureText(t).width<=i)return t;let n=t;for(;n.length>1&&e.measureText(`${n}\u2026`).width>i;)n=n.slice(0,-1);return`${n}\u2026`}formatNumber(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e4?`${(e/1e3).toFixed(0)}k`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}static \u0275fac=function(t){return new(t||a)};static \u0275prov=U({token:a,factory:a.\u0275fac,providedIn:"root"})};function le(a,e){if(a&1&&(o(0,"option",12),d(1),l()),a&2){let t=e.$implicit;c("ngValue",t),p(),v(t)}}function se(a,e){if(a&1&&(o(0,"option",13),d(1),l()),a&2){let t=e.$implicit;c("value",t),p(),v(t)}}function de(a,e){a&1&&(o(0,"div",14),d(1,"Computing your year in review\u2026"),l())}function pe(a,e){if(a&1&&(o(0,"div",15),d(1),l()),a&2){let t=e.ngIf;p(),v(t)}}function me(a,e){if(a&1&&L(0,"img",33),a&2){let t=e.ngIf;c("src",t,V)}}function ce(a,e){if(a&1){let t=x();o(0,"button",34),T("click",function(){let n=O(t).$implicit,s=b(2);return k(s.setTemplate(n.id))}),o(1,"span",35),d(2),l(),o(3,"span",36),d(4),l()()}if(a&2){let t=e.$implicit,i=b(2);A("selected",i.template()===t.id),c("title",t.description),D("aria-pressed",i.template()===t.id),p(2),v(t.name),p(2),v(t.description)}}function ge(a,e){if(a&1){let t=x();o(0,"button",37),T("click",function(){let n=O(t).$implicit,s=b(2);return k(s.setPalette(n.id))}),l()}if(a&2){let t=e.$implicit,i=b(2);G("background",i.swatchGradient(t.stops)),A("selected",i.paletteId()===t.id),c("title",t.name),D("aria-pressed",i.paletteId()===t.id)("aria-label",t.name)}}function fe(a,e){if(a&1){let t=x();o(0,"button",30),T("click",function(){O(t);let n=b(2);return k(n.share())}),d(1," \u2197 Share\u2026 "),l()}if(a&2){let t=b(2);c("disabled",t.busy())}}function ue(a,e){if(a&1&&(o(0,"p",38),d(1),l()),a&2){let t=e.ngIf;p(),v(t)}}function he(a,e){if(a&1){let t=x();o(0,"div",16)(1,"div",17),_(2,me,1,1,"img",18),l(),o(3,"aside",19)(4,"div",20)(5,"div",21)(6,"strong"),d(7),l(),o(8,"span"),d(9,"commits"),l()(),o(10,"div",21)(11,"strong"),d(12),l(),o(13,"span"),d(14,"contributors"),l()(),o(15,"div",21)(16,"strong"),d(17),l(),o(18,"span"),d(19,"files"),l()(),o(20,"div",21)(21,"strong"),d(22),l(),o(23,"span"),d(24,"night owl"),l()()(),o(25,"div",22)(26,"p",23),d(27,"Template"),l(),o(28,"div",24),_(29,ce,5,6,"button",25),l(),o(30,"p",23),d(31,"Color scheme"),l(),o(32,"div",26),_(33,ge,1,7,"button",27),l()(),o(34,"button",28),T("click",function(){O(t);let n=b();return k(n.download())}),d(35," \u2B07 Download card (PNG) "),l(),_(36,fe,2,1,"button",29),o(37,"button",30),T("click",function(){O(t);let n=b();return k(n.copy())}),d(38," \u29C9 Copy to clipboard "),l(),_(39,ue,2,1,"p",31),o(40,"p",32),d(41," Everything is computed locally from your git history \u2014 nothing leaves your machine. "),l()()()}if(a&2){let t=e.ngIf,i=b();p(2),c("ngIf",i.previewUrl()),p(5),v(t.totalCommits),p(5),v(t.totalAuthors),p(5),v(t.totalFilesTouched),p(5),z("",t.nightOwlPercent,"%"),p(7),c("ngForOf",i.templates),p(4),c("ngForOf",i.palettes),p(),c("disabled",i.busy()),p(2),c("ngIf",i.canShare()),p(),c("disabled",i.busy()),p(2),c("ngIf",i.status())}}var ne=class a{insightsApi=E(ie);renderer=E(N);git=E(te);stats=u(null);loading=u(!1);error=u(null);busy=u(!1);status=u(null);previewUrl=u(null);authors=u([]);year=u(new Date().getFullYear());author=u("");template=u("classic");paletteId=u(F[0].id);templates=R;palettes=F;years=H(()=>{let e=new Date().getFullYear(),t=[];for(let i=e;i>=e-9;i--)t.push(i);return t});constructor(){this.git.getAuthors().subscribe({next:e=>this.authors.set(e),error:()=>this.authors.set([])}),this.load()}canShare(){return typeof navigator<"u"&&typeof navigator.canShare=="function"}setYear(e){this.year.set(Number(e)),this.load()}setAuthor(e){this.author.set(e??""),this.load()}setTemplate(e){this.template.set(e);let t=this.stats();t&&this.refreshPreview(t)}setPalette(e){this.paletteId.set(e);let t=this.stats();t&&this.refreshPreview(t)}swatchGradient(e){return`linear-gradient(135deg, ${e[0]}, ${e[1]} 50%, ${e[2]})`}cardOptions(){return{template:this.template(),paletteId:this.paletteId()}}repoName(){let e=(document.title||"").replace(/\s*[-–|·].*$/,"").trim();return e&&e.toLowerCase()!=="git history"?e:"this repository"}load(){this.loading.set(!0),this.error.set(null),this.status.set(null),this.insightsApi.wrapped({year:this.year(),author:this.author().trim()||void 0}).subscribe({next:e=>{this.stats.set(e),this.loading.set(!1),this.refreshPreview(e)},error:e=>{this.error.set(e?.error?.error??"Failed to compute Git Wrapped"),this.loading.set(!1)}})}refreshPreview(e){try{this.previewUrl.set(this.renderer.toDataUrl(e,this.repoName(),this.cardOptions()))}catch{this.previewUrl.set(null)}}fileName(){return`git-wrapped-${this.year()}-${this.template()}-${this.paletteId()}.png`}download(){return P(this,null,function*(){let e=this.stats();if(e){this.busy.set(!0),this.status.set(null);try{let t=yield this.renderer.toBlob(e,this.repoName(),this.cardOptions()),i=URL.createObjectURL(t),n=document.createElement("a");n.href=i,n.download=this.fileName(),n.click(),URL.revokeObjectURL(i),this.status.set("Saved your card.")}catch{this.status.set("Could not generate the image.")}finally{this.busy.set(!1)}}})}share(){return P(this,null,function*(){let e=this.stats();if(e){this.busy.set(!0),this.status.set(null);try{let t=yield this.renderer.toBlob(e,this.repoName(),this.cardOptions()),i=new File([t],this.fileName(),{type:"image/png"});navigator.canShare?.({files:[i]})?(yield navigator.share({files:[i],title:`Git Wrapped ${this.year()}`,text:`My Git Wrapped for ${this.year()} \u{1F381}`}),this.status.set("Shared.")):yield this.download()}catch(t){t?.name!=="AbortError"&&this.status.set("Sharing was not available; try downloading instead.")}finally{this.busy.set(!1)}}})}copy(){return P(this,null,function*(){let e=this.stats();if(e){this.busy.set(!0),this.status.set(null);try{let t=yield this.renderer.toBlob(e,this.repoName(),this.cardOptions());typeof ClipboardItem<"u"&&navigator.clipboard?.write?(yield navigator.clipboard.write([new ClipboardItem({"image/png":t})]),this.status.set("Copied to clipboard.")):yield this.download()}catch{this.status.set("Clipboard not available; downloaded instead."),yield this.download()}finally{this.busy.set(!1)}}})}static \u0275fac=function(t){return new(t||a)};static \u0275cmp=B({type:a,selectors:[["app-wrapped"]],decls:23,vars:7,consts:[[1,"page"],[1,"head"],[1,"eyebrow"],[1,"controls"],[1,"field"],[3,"ngModelChange","ngModel"],[3,"ngValue",4,"ngFor","ngForOf"],["value",""],[3,"value",4,"ngFor","ngForOf"],["class","empty",4,"ngIf"],["class","empty error",4,"ngIf"],["class","layout",4,"ngIf"],[3,"ngValue"],[3,"value"],[1,"empty"],[1,"empty","error"],[1,"layout"],[1,"preview-wrap"],["alt","Git Wrapped card preview",3,"src",4,"ngIf"],[1,"actions"],[1,"stat-grid"],[1,"mini"],[1,"customize"],[1,"section-label"],[1,"template-grid"],["type","button","class","template-chip",3,"selected","title","click",4,"ngFor","ngForOf"],[1,"palette-grid"],["type","button","class","swatch",3,"selected","title","background","click",4,"ngFor","ngForOf"],["type","button",1,"primary",3,"click","disabled"],["class","ghost","type","button",3,"disabled","click",4,"ngIf"],["type","button",1,"ghost",3,"click","disabled"],["class","note",4,"ngIf"],[1,"hint"],["alt","Git Wrapped card preview",3,"src"],["type","button",1,"template-chip",3,"click","title"],[1,"t-name"],[1,"t-desc"],["type","button",1,"swatch",3,"click","title"],[1,"note"]],template:function(t,i){t&1&&(o(0,"div",0)(1,"header",1)(2,"div")(3,"p",2),d(4,"Year in review"),l(),o(5,"h2"),d(6,"Git Wrapped"),l()(),o(7,"div",3)(8,"label",4)(9,"span"),d(10,"Year"),l(),o(11,"select",5),T("ngModelChange",function(s){return i.setYear(s)}),_(12,le,2,2,"option",6),l()(),o(13,"label",4)(14,"span"),d(15,"Author"),l(),o(16,"select",5),T("ngModelChange",function(s){return i.setAuthor(s)}),o(17,"option",7),d(18,"All contributors"),l(),_(19,se,2,2,"option",8),l()()()(),_(20,de,2,0,"div",9)(21,pe,2,1,"div",10)(22,he,42,11,"div",11),l()),t&2&&(p(11),c("ngModel",i.year()),p(),c("ngForOf",i.years()),p(4),c("ngModel",i.author()),p(3),c("ngForOf",i.authors()),p(),c("ngIf",i.loading()),p(),c("ngIf",i.error()),p(),c("ngIf",i.stats()))},dependencies:[q,Y,j,ee,X,Z,Q,J,K],styles:["[_nghost-%COMP%]{display:block;flex:1;min-height:0;overflow-y:auto}.page[_ngcontent-%COMP%]{padding:1.1rem 1.25rem 1.4rem;max-width:1100px;margin:0 auto}.head[_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:1.25rem}.eyebrow[_ngcontent-%COMP%]{margin:0 0 .2rem;color:var(--accent);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:clamp(20px,2vw,28px);letter-spacing:-.03em}.controls[_ngcontent-%COMP%]{display:flex;gap:.75rem;flex-wrap:wrap}.field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;font-size:11px;color:var(--fg-muted);text-transform:uppercase;letter-spacing:.05em}.field[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{padding:.45rem .6rem;border:1px solid var(--border-soft);border-radius:var(--radius-md);background:var(--bg-panel);color:var(--fg-primary);font-size:13px;text-transform:none;letter-spacing:normal}.empty[_ngcontent-%COMP%]{padding:2rem;color:var(--fg-muted);text-align:center}.empty.error[_ngcontent-%COMP%]{color:var(--danger)}.layout[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:1.5rem;align-items:start}.preview-wrap[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-soft);border-radius:var(--radius-lg);padding:1rem;box-shadow:var(--shadow-sm);display:flex;justify-content:center}.preview-wrap[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:100%;max-width:420px;height:auto;border-radius:16px;box-shadow:var(--shadow-md)}.actions[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.6rem;position:sticky;top:1rem}.stat-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;margin-bottom:.5rem}.mini[_ngcontent-%COMP%]{display:flex;flex-direction:column;padding:.6rem .75rem;background:var(--bg-panel);border:1px solid var(--border-soft);border-radius:var(--radius-md)}.mini[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:22px;letter-spacing:-.03em}.mini[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--fg-muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em}button[_ngcontent-%COMP%]{padding:.65rem .9rem;border-radius:var(--radius-md);font-size:13px;font-weight:600;cursor:pointer;border:1px solid var(--border-soft)}button[_ngcontent-%COMP%]:disabled{opacity:.55;cursor:not-allowed}.primary[_ngcontent-%COMP%]{background:var(--accent);color:#fff;border-color:transparent}.ghost[_ngcontent-%COMP%]{background:var(--bg-panel);color:var(--fg-primary)}.note[_ngcontent-%COMP%]{margin:.25rem 0 0;font-size:12px;color:var(--accent)}.hint[_ngcontent-%COMP%]{margin:.5rem 0 0;font-size:11px;color:var(--fg-muted);line-height:1.5}@media (max-width: 820px){.layout[_ngcontent-%COMP%]{grid-template-columns:1fr}.actions[_ngcontent-%COMP%]{position:static}}"],changeDetection:0})};export{ne as WrappedComponent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{V as f,X as h,aa as a,dc as v,ec as l,fc as m,ka as y,la as b,m as g,ma as d,pa as i}from"./chunk-MTI6UKQ3.js";function U(n,e){let t=e?.injector??a(y),s=new g(1),u=m(()=>{let r;try{r=n()}catch(c){v(()=>s.error(c));return}v(()=>s.next(r))},{injector:t,manualCleanup:!0});return t.get(d).onDestroy(()=>{u.destroy(),s.complete()}),s.asObservable()}function L(n,e){let s=!e?.manualCleanup?e?.injector?.get(d)??a(d):null,u=w(e?.equal),r;e?.requireSync?r=i({kind:0},{equal:u}):r=i({kind:1,value:e?.initialValue},{equal:u});let c,p=n.subscribe({next:o=>r.set({kind:1,value:o}),error:o=>{r.set({kind:2,error:o}),c?.()},complete:()=>{c?.()}});if(e?.requireSync&&r().kind===0)throw new f(601,!1);return c=s?.onDestroy(p.unsubscribe.bind(p)),l(()=>{let o=r();switch(o.kind){case 1:return o.value;case 2:throw o.error;case 0:throw new f(601,!1)}},{equal:e?.equal})}function w(n=Object.is){return(e,t)=>e.kind===1&&t.kind===1&&n(e.value,t.value)}var k="ghui:theme",D=class n{doc=a(b);mediaQuery=null;preference=i(this.read());systemDark=i(!1);resolved=l(()=>{let e=this.preference();return e==="system"?this.systemDark()?"dark":"light":e});constructor(){typeof window<"u"&&window.matchMedia&&(this.mediaQuery=window.matchMedia("(prefers-color-scheme: dark)"),this.systemDark.set(this.mediaQuery.matches),this.mediaQuery.addEventListener("change",e=>this.systemDark.set(e.matches))),m(()=>{let e=this.resolved(),t=this.doc.documentElement;t.classList.toggle("dark",e==="dark"),t.dataset.theme=e,this.doc.body?.classList?.toggle("dark",e==="dark")})}setPreference(e){this.preference.set(e);try{localStorage.setItem(k,e)}catch{}}cycle(){let t=this.resolved()==="light"?"dark":"light";this.setPreference(t)}read(){try{let e=localStorage.getItem(k);if(e==="light"||e==="dark"||e==="system")return e}catch{}return"system"}static \u0275fac=function(t){return new(t||n)};static \u0275prov=h({token:n,factory:n.\u0275fac,providedIn:"root"})};export{U as a,L as b,D as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{X as g,a as s,b as i,ec as d,pa as e}from"./chunk-MTI6UKQ3.js";var m=class o{filters=e({page:1,pageSize:100});commits=e([]);total=e(0);page=e(1);pageSize=e(100);loading=e(!1);error=e(null);authors=e([]);branches=e([]);tags=e([]);selectedHash=e(null);commitIndex=d(()=>{let t=new Map;return this.commits().forEach((n,a)=>t.set(n.hash,{commit:n,index:a})),t});selected=d(()=>{let t=this.selectedHash();return t?this.commitIndex().get(t)?.commit??null:null});paletteOpen=e(!1);shortcutsOpen=e(!1);graphVisible=e(!0);viewMode=e("flat");searchMode=e("classic");nlInterpretation=e(null);patchFilters(t){this.filters.update(n=>i(s(s({},n),t),{page:t.page??1}))}selectHash(t){this.selectedHash.set(t)}selectByOffset(t){let n=this.commits();if(n.length===0)return;let a=this.selectedHash(),l=a?this.commitIndex().get(a)?.index??-1:-1,r=l===-1?t>0?0:n.length-1:l+t;r=Math.max(0,Math.min(n.length-1,r)),this.selectedHash.set(n[r].hash)}static \u0275fac=function(n){return new(n||o)};static \u0275prov=g({token:o,factory:o.\u0275fac,providedIn:"root"})};export{m as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as Z}from"./chunk-COLUQZLF.js";import{a as X}from"./chunk-VDZMKPJL.js";import{a as G,b as W,c as q,d as J,h as K}from"./chunk-HHK3LJFN.js";import"./chunk-5K2HNBK3.js";import{$a as z,Ab as v,Ac as E,Bb as p,Bc as Y,Ec as Q,Fc as S,Ib as j,Jb as y,Kb as O,Lb as $,Mb as s,Nb as c,Ob as M,Pb as A,Sa as a,Vb as V,X as N,Yb as P,_b as I,aa as h,ac as B,eb as f,ec as g,fa as x,fc as T,ga as b,pa as u,qb as m,rb as r,rc as L,sb as o,sc as R,tb as _,tc as H,vc as U,zb as C}from"./chunk-MTI6UKQ3.js";var w=class i{http=h(Y);base="/api";cache=new Q(100);snapshot(t){let e=new E().set("at",t);return this.cache.get(`snapshot:${t}`,()=>this.http.get(`${this.base}/snapshot`,{params:e}),S.IMMUTABLE)}rangeDiff(t,e){let n=new E().set("from",t).set("to",e);return this.cache.get(`range:${t}:${e}`,()=>this.http.get(`${this.base}/diff`,{params:n}),S.IMMUTABLE)}invalidate(){this.cache.clear()}static \u0275fac=function(e){return new(e||i)};static \u0275prov=N({token:i,factory:i.\u0275fac,providedIn:"root"})};function ne(i,t){if(i&1&&(r(0,"span",22),s(1,"|"),o()),i&2){let e=t.$implicit,n=t.index,l=p();O("active",n===l.tickIndex()),m("title",e.label)}}function ie(i,t){if(i&1&&(r(0,"span",29)(1,"span",30),s(2),o(),r(3,"span",31),s(4),o(),r(5,"span",32),s(6),o()()),i&2){let e=t.$implicit,n=p(3);a(2),c(n.initials(e.author)),a(2),c(e.author),a(2),c(e.count)}}function oe(i,t){if(i&1&&(r(0,"div",27),f(1,ie,7,3,"span",28),o()),i&2){let e=p(2);a(),m("ngForOf",e.authorBreakdown())}}function ae(i,t){i&1&&(r(0,"p",33),s(1,"No loaded commits fall in this time window."),o())}function re(i,t){if(i&1&&(r(0,"section",23)(1,"div",24)(2,"span",25),s(3,"Selected moment"),o(),r(4,"h3"),s(5),o(),r(6,"p"),s(7),o()(),f(8,oe,2,1,"div",26)(9,ae,2,0,"ng-template",null,0,B),o()),i&2){let e=t.ngIf,n=j(10),l=p();a(5),c(e.label),a(2),c(l.momentSummary()),a(),m("ngIf",l.authorBreakdown().length)("ngIfElse",n)}}function se(i,t){if(i&1){let e=C();r(0,"div",39)(1,"span",25),s(2,"Commit at this point"),o(),r(3,"button",40),v("click",function(){let l=x(e).ngIf,d=p(2);return b(d.selectCommit(l))}),r(4,"span",41),s(5),o(),r(6,"span",42)(7,"code"),s(8),o(),r(9,"span"),s(10),o(),r(11,"span"),s(12),P(13,"date"),o()()()()}if(i&2){let e=t.ngIf;a(5),c(e.subject),a(3),c(e.shortHash),a(2),c(e.author),a(2),c(I(13,4,e.date,"MMM d, y, h:mm a"))}}function le(i,t){if(i&1&&(r(0,"li")(1,"span",46),s(2),o(),r(3,"code",47),s(4),o()()),i&2){let e=t.$implicit;a(2),c(e.name),a(2),c(e.hash.slice(0,7))}}function ce(i,t){if(i&1&&(r(0,"div",43)(1,"span",25),s(2),o(),r(3,"ul",44),f(4,le,5,2,"li",45),o()()),i&2){let e=p().ngIf,n=p();a(2),M("Branches (",n.branchEntries(e).length,")"),a(2),m("ngForOf",n.branchEntries(e).slice(0,8))}}function me(i,t){if(i&1&&(r(0,"li")(1,"span",46),s(2),o(),r(3,"code",47),s(4),o()()),i&2){let e=t.$implicit;a(2),c(e.name),a(2),c(e.hash.slice(0,7))}}function de(i,t){if(i&1&&(r(0,"div",43)(1,"span",25),s(2),o(),r(3,"ul",44),f(4,me,5,2,"li",45),o()()),i&2){let e=p().ngIf,n=p();a(2),M("Tags (",n.tagEntries(e).length,")"),a(2),m("ngForOf",n.tagEntries(e).slice(0,8))}}function pe(i,t){if(i&1&&(r(0,"section",34)(1,"div",35)(2,"span",25),s(3,"HEAD at this moment"),o(),r(4,"code",36),s(5),o()(),f(6,se,14,7,"div",37)(7,ce,5,2,"div",38)(8,de,5,2,"div",38),o()),i&2){let e=t.ngIf,n=p();a(5),c(e.ref??"(no commits yet)"),a(),m("ngIf",n.headCommit()),a(),m("ngIf",n.branchEntries(e).length),a(),m("ngIf",n.tagEntries(e).length)}}function fe(i,t){if(i&1){let e=C();r(0,"button",51),v("click",function(){let l=x(e).$implicit,d=p(2);return b(d.selectCommit(l))}),_(1,"span",52),r(2,"span",53)(3,"span",54),s(4),o(),r(5,"span",55)(6,"code"),s(7),o(),r(8,"span"),s(9),o(),r(10,"span"),s(11),P(12,"date"),o()()()()}if(i&2){let e=t.$implicit;a(4),c(e.subject),a(3),c(e.shortHash),a(2),c(e.author),a(2),c(I(12,4,e.date,"MMM d, y, h:mm a"))}}function ge(i,t){if(i&1&&(r(0,"section",48)(1,"div",49)(2,"h3"),s(3,"Recent commits before this moment"),o(),r(4,"span"),s(5),o()(),f(6,fe,13,7,"button",50),o()),i&2){let e=p();a(5),M("",e.recentCommits().length," shown"),a(),m("ngForOf",e.recentCommits())}}function ue(i,t){i&1&&(r(0,"span",56),s(1,"Computing diff\u2026"),o())}function he(i,t){if(i&1&&(r(0,"span",56),s(1),o()),i&2){let e=t.ngIf;a(),c(e)}}function ve(i,t){i&1&&(r(0,"span",57),s(1," No differences (you're already at HEAD). "),o())}function xe(i,t){if(i&1){let e=C();r(0,"div",60),v("click",function(){let l=x(e).$implicit,d=p(2);return b(d.selectedFile.set(l))}),r(1,"span"),s(2),o(),r(3,"span",61),s(4),o(),r(5,"span",62),s(6),o()()}if(i&2){let e=t.$implicit,n=p(2);O("selected",e===n.selectedFile()),a(),$(V("status status-",e.status)),a(),c(n.statusLabel(e.status)),a(2),c(e.file),a(2),A("+",e.additions," \u2212",e.deletions)}}function be(i,t){if(i&1&&(r(0,"div",58),f(1,xe,7,9,"div",59),o()),i&2){let e=p();a(),m("ngForOf",e.diff())}}function _e(i,t){if(i&1&&(r(0,"div",63),_(1,"app-diff-viewer",64),o()),i&2){let e=t.ngIf;a(),m("fileInput",e)}}var ee=class i{state=h(X);timelineApi=h(w);snapshot=u(null);diff=u(null);loadingDiff=u(!1);diffError=u(null);selectedFile=u(null);tickIndex=u(0);diffSub=null;timelineCommits=g(()=>this.state.commits().map(t=>({commit:t,time:new Date(t.date).getTime()})).filter(t=>Number.isFinite(t.time)).sort((t,e)=>t.time-e.time));ticks=g(()=>Ce(this.timelineCommits()));selectedTick=g(()=>this.ticks()[this.tickIndex()]??null);headCommit=g(()=>{let t=this.snapshot()?.ref;return t?this.state.commitIndex().get(t)?.commit??this.state.commits().find(e=>e.hash.startsWith(t))??null:null});windowCommits=g(()=>{let t=this.selectedTick();if(!t)return[];let e=new Date(t.iso).getTime(),n=this.previousTickTime();return this.timelineCommits().filter(l=>l.time<=e&&l.time>n).map(l=>l.commit).reverse()});recentCommits=g(()=>{let t=this.selectedTick();if(!t)return[];let e=new Date(t.iso).getTime(),n=[],l=this.timelineCommits();for(let d=l.length-1;d>=0&&n.length<6;d--)l[d].time<=e&&n.push(l[d].commit);return n});authorBreakdown=g(()=>{let t=new Map;for(let e of this.windowCommits())t.set(e.author,(t.get(e.author)??0)+1);return[...t.entries()].map(([e,n])=>({author:e,count:n})).sort((e,n)=>n.count-e.count||e.author.localeCompare(n.author)).slice(0,8)});atDisplay=g(()=>{let t=this.ticks()[this.tickIndex()];return t?t.label:""});firstTickLabel=g(()=>this.ticks()[0]?.label??"");lastTickLabel=g(()=>this.ticks()[this.ticks().length-1]?.label??"");tickPct=g(()=>{let t=Math.max(1,this.ticks().length-1);return Math.round(this.tickIndex()/t*100)});constructor(){T(()=>{let t=this.ticks();t.length!==0&&this.tickIndex()>=t.length&&this.tickIndex.set(t.length-1)}),T(t=>{let e=this.ticks()[this.tickIndex()];if(!e)return;let n=null,l=window.setTimeout(()=>{n=this.timelineApi.snapshot(e.iso).subscribe({next:d=>{this.snapshot.set(d),this.loadDiff(d)},error:()=>this.snapshot.set(null)})},180);t(()=>{window.clearTimeout(l),n?.unsubscribe()})})}onTickChange(t){this.tickIndex.set(Math.max(0,Math.min(this.ticks().length-1,Number(t))))}branchEntries(t){return Object.entries(t.branches).map(([e,n])=>({name:e,hash:n}))}tagEntries(t){return Object.entries(t.tags).map(([e,n])=>({name:e,hash:n}))}statusLabel(t){return t==="modified"?"mod":t.slice(0,3)}initials(t){let e=t.trim().split(/\s+/).filter(Boolean);if(!e.length)return"?";let n=e[0]?.[0]??"",l=e.length>1?e[e.length-1]?.[0]??"":e[0]?.[1]??"";return`${n}${l}`.toUpperCase()}momentSummary(){let t=this.windowCommits().length,e=this.authorBreakdown().length;return t===0?"No loaded commits landed in this interval.":`${t} commit${t===1?"":"s"} by ${e} author${e===1?"":"s"} in this interval.`}selectCommit(t){this.state.selectHash(t.hash)}loadDiff(t){if(this.diffSub?.unsubscribe(),!t.ref){this.diff.set([]),this.selectedFile.set(null);return}let e=this.state.commits()[0]?.hash;if(!e||e===t.ref){this.diff.set([]),this.selectedFile.set(null);return}this.loadingDiff.set(!0),this.diffError.set(null),this.diffSub=this.timelineApi.rangeDiff(t.ref,e).subscribe({next:n=>{this.diff.set(n),this.selectedFile.set(n[0]??null),this.loadingDiff.set(!1)},error:n=>{this.diffError.set(n?.error?.error??"Failed to compute diff"),this.loadingDiff.set(!1)}})}previousTickTime(){let t=this.ticks()[this.tickIndex()-1];return t?new Date(t.iso).getTime():Number.NEGATIVE_INFINITY}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=z({type:i,selectors:[["app-timeline"]],decls:33,vars:18,consts:[["noAuthors",""],[1,"page"],[1,"head"],[1,"sub"],[1,"now"],[1,"slider-wrap"],[1,"rail"],[1,"rail-fill"],[1,"rail-knob"],["type","range","min","0",1,"slider",3,"ngModelChange","max","ngModel"],[1,"ticks"],["class","tick",3,"active","title",4,"ngFor","ngForOf"],[1,"tick-labels"],["class","moment",4,"ngIf"],["class","snapshot",4,"ngIf"],["class","recent-card",4,"ngIf"],[1,"diff-panel"],[1,"diff-head"],["class","diff-status",4,"ngIf"],["class","diff-status muted",4,"ngIf"],["class","files",4,"ngIf"],["class","diff-body",4,"ngIf"],[1,"tick",3,"title"],[1,"moment"],[1,"moment-copy"],[1,"snap-label"],["class","authors",4,"ngIf","ngIfElse"],[1,"authors"],["class","author-chip",4,"ngFor","ngForOf"],[1,"author-chip"],[1,"avatar"],[1,"author-name"],[1,"author-count"],[1,"no-authors"],[1,"snapshot"],[1,"snap-card"],[1,"snap-hash"],["class","snap-card head-commit",4,"ngIf"],["class","snap-card branches",4,"ngIf"],[1,"snap-card","head-commit"],[1,"commit-summary",3,"click"],[1,"commit-subject"],[1,"commit-meta"],[1,"snap-card","branches"],[1,"ref-list"],[4,"ngFor","ngForOf"],[1,"ref-name"],[1,"ref-hash"],[1,"recent-card"],[1,"recent-head"],["class","recent-row",3,"click",4,"ngFor","ngForOf"],[1,"recent-row",3,"click"],[1,"recent-dot"],[1,"recent-main"],[1,"recent-subject"],[1,"recent-meta"],[1,"diff-status"],[1,"diff-status","muted"],[1,"files"],["class","file",3,"selected","click",4,"ngFor","ngForOf"],[1,"file",3,"click"],[1,"path"],[1,"changes"],[1,"diff-body"],[3,"fileInput"]],template:function(e,n){if(e&1&&(r(0,"div",1)(1,"header",2)(2,"div")(3,"h2"),s(4,"Time travel"),o(),r(5,"p",3),s(6," Drag the slider to see repo state at any point. Diff is computed against current HEAD. "),o()(),r(7,"div",4),s(8),o()(),r(9,"div",5)(10,"div",6),_(11,"div",7)(12,"div",8),o(),r(13,"input",9),v("ngModelChange",function(d){return n.onTickChange(d)}),o(),r(14,"div",10),f(15,ne,2,3,"span",11),o(),r(16,"div",12)(17,"span"),s(18),o(),r(19,"span"),s(20),o()()(),f(21,re,11,4,"section",13)(22,pe,9,4,"section",14)(23,ge,7,2,"section",15),r(24,"section",16)(25,"div",17)(26,"h3"),s(27,"Diff vs HEAD"),o(),f(28,ue,2,0,"span",18)(29,he,2,1,"span",18)(30,ve,2,0,"span",19),o(),f(31,be,2,1,"div",20)(32,_e,2,1,"div",21),o()()),e&2){let l,d;a(8),c(n.atDisplay()),a(3),y("width",n.tickPct(),"%"),a(),y("left",n.tickPct(),"%"),a(),m("max",n.ticks().length-1)("ngModel",n.tickIndex()),a(2),m("ngForOf",n.ticks()),a(3),c(n.firstTickLabel()),a(2),c(n.lastTickLabel()),a(),m("ngIf",n.selectedTick()),a(),m("ngIf",n.snapshot()),a(),m("ngIf",n.recentCommits().length),a(5),m("ngIf",n.loadingDiff()),a(),m("ngIf",n.diffError()),a(),m("ngIf",!n.loadingDiff()&&!n.diffError()&&((l=n.diff())==null?null:l.length)===0),a(),m("ngIf",(((d=n.diff())==null?null:d.length)??0)>0),a(),m("ngIf",n.selectedFile())}},dependencies:[U,L,R,K,G,J,W,q,Z,H],styles:["[_nghost-%COMP%]{display:block;flex:1;min-height:0;overflow-y:auto}.page[_ngcontent-%COMP%]{padding:1.1rem 1.25rem 1.4rem;max-width:1240px;margin:0 auto}.head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;margin-bottom:1rem}.head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:clamp(20px,2vw,28px);letter-spacing:-.03em}.head[_ngcontent-%COMP%] .sub[_ngcontent-%COMP%]{margin:.2rem 0 0;color:var(--fg-muted);font-size:13px}.now[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);font-size:13px;padding:.4rem .7rem;background:var(--bg-panel);border:1px solid var(--border-soft);border-radius:999px;box-shadow:var(--shadow-sm)}.slider-wrap[_ngcontent-%COMP%]{position:relative;background:radial-gradient(circle at 20% 0%,color-mix(in oklab,var(--accent) 14%,transparent),transparent 42%),var(--bg-panel);border:1px solid var(--border-soft);border-radius:var(--radius-lg);padding:1rem 1.25rem;margin-bottom:1rem;box-shadow:var(--shadow-sm)}.rail[_ngcontent-%COMP%]{position:relative;height:10px;margin:.25rem 0 .85rem;border-radius:999px;background:var(--bg-surface-2);overflow:visible}.rail-fill[_ngcontent-%COMP%]{height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--accent),#06b6d4);transition:width .12s ease}.rail-knob[_ngcontent-%COMP%]{position:absolute;top:50%;width:18px;height:18px;border-radius:50%;background:var(--bg-surface);border:3px solid var(--accent);box-shadow:var(--shadow-md);transform:translate(-50%,-50%);pointer-events:none}.slider[_ngcontent-%COMP%]{width:100%;accent-color:var(--accent);opacity:.01;position:absolute;left:1.25rem;right:1.25rem;top:.95rem;width:calc(100% - 2.5rem);height:34px;cursor:ew-resize}.ticks[_ngcontent-%COMP%]{display:flex;justify-content:space-between;margin-top:.4rem;color:var(--fg-subtle);font-size:10px}.tick.active[_ngcontent-%COMP%]{color:var(--accent);font-weight:700}.tick-labels[_ngcontent-%COMP%]{display:flex;justify-content:space-between;margin-top:.5rem;font-size:11px;color:var(--fg-muted)}.moment[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(220px,.8fr) minmax(0,1.2fr);gap:.9rem;align-items:center;margin-bottom:1rem;padding:.85rem 1rem;border:1px solid var(--border-soft);border-radius:var(--radius-lg);background:radial-gradient(circle at 92% 0%,color-mix(in oklab,var(--accent) 14%,transparent),transparent 36%),var(--bg-panel);box-shadow:var(--shadow-sm)}.moment-copy[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:18px;letter-spacing:-.03em}.moment-copy[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .no-authors[_ngcontent-%COMP%]{margin:.25rem 0 0;color:var(--fg-muted);font-size:12px;line-height:1.45}.authors[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.45rem}.author-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.4rem;min-width:0;max-width:230px;padding:.28rem .5rem .28rem .32rem;border:1px solid var(--border-soft);border-radius:999px;background:color-mix(in oklab,var(--bg-surface) 78%,transparent);color:var(--fg-secondary);font-size:11px}.avatar[_ngcontent-%COMP%]{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:999px;background:var(--accent);color:var(--accent-fg);font-size:10px;font-weight:800;flex:0 0 auto}.author-name[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.author-count[_ngcontent-%COMP%]{color:var(--fg-muted);font-variant-numeric:tabular-nums}.snapshot[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.75rem;margin-bottom:1rem}.snap-card[_ngcontent-%COMP%]{background:linear-gradient(180deg,color-mix(in oklab,var(--bg-panel) 96%,white 4%),var(--bg-panel));border:1px solid var(--border-soft);border-radius:var(--radius-lg);padding:.75rem 1rem;box-shadow:var(--shadow-sm);transition:border-color .12s,box-shadow .12s,transform .12s}.snap-card[_ngcontent-%COMP%]:hover{border-color:color-mix(in oklab,var(--accent) 28%,var(--border-soft));box-shadow:var(--shadow-md);transform:translateY(-1px)}.snap-label[_ngcontent-%COMP%]{display:block;font-size:11px;color:var(--fg-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:.4rem}.snap-hash[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);font-size:13px;color:var(--accent);word-break:break-all}.commit-summary[_ngcontent-%COMP%]{display:grid;gap:.35rem;width:100%;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;text-align:left}.commit-summary[_ngcontent-%COMP%]:hover .commit-subject[_ngcontent-%COMP%]{color:var(--accent)}.commit-subject[_ngcontent-%COMP%]{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.commit-meta[_ngcontent-%COMP%], .recent-meta[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.45rem;color:var(--fg-muted);font-size:11px}.commit-meta[_ngcontent-%COMP%] code[_ngcontent-%COMP%], .recent-meta[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{color:var(--accent);font-family:var(--font-mono, monospace)}.ref-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;font-size:12px}.ref-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:2px 0;gap:1rem}.ref-name[_ngcontent-%COMP%]{color:var(--fg-secondary)}.ref-hash[_ngcontent-%COMP%]{font-family:var(--font-mono, monospace);color:var(--fg-muted);font-size:11px}.recent-card[_ngcontent-%COMP%]{margin-bottom:1rem;border:1px solid var(--border-soft);border-radius:var(--radius-lg);background:var(--bg-panel);box-shadow:var(--shadow-sm);overflow:hidden}.recent-head[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;padding:.7rem .9rem;border-bottom:1px solid var(--border-soft);background:color-mix(in oklab,var(--bg-surface) 82%,transparent)}.recent-head[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:14px}.recent-head[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--fg-muted);font-size:11px}.recent-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:12px minmax(0,1fr);gap:.65rem;width:100%;padding:.55rem .9rem;border:0;border-bottom:1px solid color-mix(in oklab,var(--border-soft) 58%,transparent);background:transparent;color:inherit;cursor:pointer;text-align:left}.recent-row[_ngcontent-%COMP%]:last-child{border-bottom:0}.recent-row[_ngcontent-%COMP%]:hover{background:color-mix(in oklab,var(--bg-hover) 68%,transparent)}.recent-dot[_ngcontent-%COMP%]{width:9px;height:9px;margin-top:.25rem;border-radius:999px;background:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}.recent-main[_ngcontent-%COMP%]{min-width:0;display:grid;gap:.25rem}.recent-subject[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600}.diff-panel[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-soft);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-sm)}.diff-head[_ngcontent-%COMP%]{padding:.75rem 1rem;border-bottom:1px solid var(--border-soft);display:flex;align-items:baseline;gap:1rem}.diff-head[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:14px}.diff-status[_ngcontent-%COMP%]{font-size:12px;color:var(--fg-muted)}.diff-status.muted[_ngcontent-%COMP%]{font-style:italic}.files[_ngcontent-%COMP%]{display:flex;gap:.4rem;padding:.65rem;max-height:170px;overflow:auto;flex-wrap:wrap;background:color-mix(in oklab,var(--bg-surface-2) 56%,transparent)}.file[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.6rem;padding:.38rem .65rem;cursor:pointer;font-size:12px;border:1px solid var(--border-soft);border-radius:999px;background:var(--bg-surface);max-width:100%}.file[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.file.selected[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--accent) 18%,transparent);border-color:color-mix(in oklab,var(--accent) 40%,var(--border-soft))}.status[_ngcontent-%COMP%]{font-size:10px;padding:1px 6px;border-radius:999px;background:var(--bg-surface-2);color:var(--fg-muted);text-transform:uppercase}.status-added[_ngcontent-%COMP%]{background:#10b9812e;color:#10b981}.status-deleted[_ngcontent-%COMP%]{background:#ef44442e;color:#ef4444}.status-modified[_ngcontent-%COMP%]{background:#6366f12e;color:var(--accent)}.path[_ngcontent-%COMP%]{flex:1;font-family:var(--font-mono, monospace);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.changes[_ngcontent-%COMP%]{font-size:11px;color:var(--fg-muted)}.diff-body[_ngcontent-%COMP%]{border-top:1px solid var(--border-soft);height:clamp(320px,58vh,720px);min-height:0}.diff-body[_ngcontent-%COMP%] app-diff-viewer[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;min-height:0}@media (max-width: 760px){.moment[_ngcontent-%COMP%]{grid-template-columns:1fr}.authors[_ngcontent-%COMP%]{justify-content:flex-start}}"],changeDetection:0})};function Ce(i){if(i.length===0)return[];let t=i[0].time,n=i[i.length-1].time-t,l=Math.max(12,Math.min(24,Math.floor(n/(1e3*60*60*24*7))+1)),d=n/Math.max(1,l-1),D=[];for(let k=0;k<l;k++){let F=new Date(t+k*d);D.push({iso:F.toISOString(),label:F.toISOString().slice(0,10)})}return D}export{ee as TimelineComponent};
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
<meta name="theme-color" content="#0b1020" media="(prefers-color-scheme: dark)">
|
|
10
10
|
<meta name="theme-color" content="#f7f8fa" media="(prefers-color-scheme: light)">
|
|
11
11
|
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%234f46e5' d='M12 .5a11.5 11.5 0 1 0 11.5 11.5A11.5 11.5 0 0 0 12 .5Zm5.7 14.83a1 1 0 0 1-1.41 1.41L13 13.41V19a1 1 0 0 1-2 0v-5.59l-3.29 3.33A1 1 0 1 1 6.3 15.34l5-5.05a1 1 0 0 1 1.42 0Z'/%3E%3C/svg%3E">
|
|
12
|
-
<style>*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / .5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}:root{color-scheme:light;--bg-app:#f7f8fa;--bg-surface:#ffffff;--bg-surface-2:#f3f4f6;--bg-elevated:#ffffff;--bg-panel:rgba(255, 255, 255, .78);--bg-glass:rgba(255, 255, 255, .72);--bg-hover:#eef2ff;--bg-selected:#e0e7ff;--bg-overlay:rgba(15, 23, 42, .45);--bg-gradient:radial-gradient(circle at 12% -8%, rgba(79, 70, 229, .12), transparent 34%), radial-gradient(circle at 90% 0%, rgba(6, 182, 212, .12), transparent 28%), linear-gradient(180deg, #f8fafc 0%, #eef2f7 100%);--fg-primary:#0f172a;--fg-secondary:#475569;--fg-muted:#64748b;--fg-subtle:#94a3b8;--fg-inverted:#ffffff;--border-soft:#e2e8f0;--border-strong:#cbd5e1;--border-focus:#6366f1;--accent:#4f46e5;--accent-hover:#4338ca;--accent-soft:#eef2ff;--accent-fg:#ffffff;--accent-ring:rgba(99, 102, 241, .18);--success:#16a34a;--warning:#d97706;--danger:#dc2626;--diff-add-bg:#dcfce7;--diff-add-fg:#14532d;--diff-add-gutter:#86efac;--diff-del-bg:#fee2e2;--diff-del-fg:#7f1d1d;--diff-del-gutter:#fca5a5;--diff-hunk-bg:#f1f5f9;--diff-hunk-fg:#475569;--graph-guide:rgba(148, 163, 184, .28);--graph-row-alt:rgba(15, 23, 42, .025);--graph-row-hover:rgba(79, 70, 229, .08);--graph-row-selected:rgba(79, 70, 229, .14);--graph-node-ring:#ffffff;--graph-shadow:rgba(15, 23, 42, .12);--chart-add:#16a34a;--chart-del:#dc2626;--chart-line:#4f46e5;--chart-fill:rgba(79, 70, 229, .16);--shadow-sm:0 1px 2px rgba(15, 23, 42, .06);--shadow-md:0 4px 12px rgba(15, 23, 42, .08);--shadow-lg:0 12px 32px rgba(15, 23, 42, .12);--shadow-glow:0 16px 60px rgba(79, 70, 229, .14);--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--radius-xl:18px;--font-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, "Cascadia Mono", "Liberation Mono", "Courier New", monospace}*,*:before,*:after{box-sizing:border-box}html,body{height:100%}body{margin:0;font-family:var(--font-sans);font-size:14px;line-height:1.5;color:var(--fg-primary);background:var(--bg-gradient);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}</style><link rel="stylesheet" href="styles-
|
|
12
|
+
<style>*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / .5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}:root{color-scheme:light;--bg-app:#f7f8fa;--bg-surface:#ffffff;--bg-surface-2:#f3f4f6;--bg-elevated:#ffffff;--bg-panel:rgba(255, 255, 255, .78);--bg-glass:rgba(255, 255, 255, .72);--bg-hover:#eef2ff;--bg-selected:#e0e7ff;--bg-overlay:rgba(15, 23, 42, .45);--bg-gradient:radial-gradient(circle at 12% -8%, rgba(79, 70, 229, .12), transparent 34%), radial-gradient(circle at 90% 0%, rgba(6, 182, 212, .12), transparent 28%), linear-gradient(180deg, #f8fafc 0%, #eef2f7 100%);--fg-primary:#0f172a;--fg-secondary:#475569;--fg-muted:#64748b;--fg-subtle:#94a3b8;--fg-inverted:#ffffff;--border-soft:#e2e8f0;--border-strong:#cbd5e1;--border-focus:#6366f1;--accent:#4f46e5;--accent-hover:#4338ca;--accent-soft:#eef2ff;--accent-fg:#ffffff;--accent-ring:rgba(99, 102, 241, .18);--success:#16a34a;--warning:#d97706;--danger:#dc2626;--diff-add-bg:#dcfce7;--diff-add-fg:#14532d;--diff-add-gutter:#86efac;--diff-del-bg:#fee2e2;--diff-del-fg:#7f1d1d;--diff-del-gutter:#fca5a5;--diff-hunk-bg:#f1f5f9;--diff-hunk-fg:#475569;--graph-guide:rgba(148, 163, 184, .28);--graph-row-alt:rgba(15, 23, 42, .025);--graph-row-hover:rgba(79, 70, 229, .08);--graph-row-selected:rgba(79, 70, 229, .14);--graph-node-ring:#ffffff;--graph-shadow:rgba(15, 23, 42, .12);--chart-add:#16a34a;--chart-del:#dc2626;--chart-line:#4f46e5;--chart-fill:rgba(79, 70, 229, .16);--shadow-sm:0 1px 2px rgba(15, 23, 42, .06);--shadow-md:0 4px 12px rgba(15, 23, 42, .08);--shadow-lg:0 12px 32px rgba(15, 23, 42, .12);--shadow-glow:0 16px 60px rgba(79, 70, 229, .14);--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--radius-xl:18px;--font-sans:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, "Cascadia Mono", "Liberation Mono", "Courier New", monospace}*,*:before,*:after{box-sizing:border-box}html,body{height:100%}body{margin:0;font-family:var(--font-sans);font-size:14px;line-height:1.5;color:var(--fg-primary);background:var(--bg-gradient);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}</style><link rel="stylesheet" href="styles-VRDIEW7E.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-VRDIEW7E.css"></noscript></head>
|
|
13
13
|
<body>
|
|
14
14
|
<app-root></app-root>
|
|
15
|
-
<link rel="modulepreload" href="chunk-
|
|
15
|
+
<link rel="modulepreload" href="chunk-UC5UORBU.js"><link rel="modulepreload" href="chunk-VDZMKPJL.js"><link rel="modulepreload" href="chunk-Q72JIHF2.js"><link rel="modulepreload" href="chunk-HHK3LJFN.js"><link rel="modulepreload" href="chunk-HSZFTFM3.js"><link rel="modulepreload" href="chunk-MTI6UKQ3.js"><script src="polyfills-5CFQRCPP.js" type="module"></script><script src="main-TYWZN6ZP.js" type="module"></script></body>
|
|
16
16
|
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as ye,b as Me,c as Te}from"./chunk-UC5UORBU.js";import{a as O}from"./chunk-VDZMKPJL.js";import{a as ce,c as ge,d as he,f as fe,g as _e,h as be}from"./chunk-Q72JIHF2.js";import{a as B,b as R,c as q,e as ve,f as Ce,g as xe,h as j}from"./chunk-HHK3LJFN.js";import{a as Se}from"./chunk-HSZFTFM3.js";import{$a as w,Ab as d,Ac as pe,Bb as g,Bc as de,Cc as me,Dc as ue,E as ne,Ec as we,Fb as L,Fc as ke,G as ie,Gb as N,Hb as H,Kb as A,Mb as l,Nb as b,Ob as C,Qa as ae,Ra as D,S as oe,Sa as a,X as re,Xb as se,aa as v,cc as le,dc as z,eb as h,ec as y,fa as m,fc as k,ga as u,ha as P,ia as W,nb as E,pa as M,qb as c,r as te,rb as o,rc as I,sb as r,sc as S,tb as x,vc as T,xb as V,yb as F,zb as _}from"./chunk-MTI6UKQ3.js";var Oe=[{path:"",loadComponent:()=>import("./chunk-EAY7RGLT.js").then(n=>n.HomeShellComponent),pathMatch:"full"},{path:"timeline",loadComponent:()=>import("./chunk-VT6O3MYC.js").then(n=>n.TimelineComponent)},{path:"file/:path",loadComponent:()=>import("./chunk-AS5GIWPS.js").then(n=>n.FileHistoryComponent)},{path:"insights",loadComponent:()=>import("./chunk-GHYTSHSI.js").then(n=>n.InsightsComponent)},{path:"wrapped",loadComponent:()=>import("./chunk-T5NR37IK.js").then(n=>n.WrappedComponent)},{path:"**",redirectTo:""}];var Pe={providers:[le({eventCoalescing:!0}),be(Oe),me(ue())]};var Ie=["input"];function Ve(n,e){if(n&1){let t=_();o(0,"div",3),d("click",function(){m(t);let s=g();return u(s.close())}),r()}}function Fe(n,e){if(n&1){let t=_();o(0,"li",11),d("mouseenter",function(){let s=m(t).index,p=g(2);return u(p.index.set(s))})("click",function(){let s=m(t).$implicit,p=g(2);return u(p.pick(s))}),o(1,"span",12),l(2),r(),o(3,"span",13),l(4),r(),o(5,"span",14),l(6),r()()}if(n&2){let t=e.$implicit,i=e.index,s=g(2);A("active",i===s.index()),E("aria-selected",i===s.index()),a(2),b(t.shortHash),a(2),b(t.subject),a(2),b(t.author)}}function De(n,e){n&1&&(o(0,"li",15),l(1,"No matches."),r())}function Le(n,e){if(n&1){let t=_();o(0,"div",4)(1,"input",5,0),d("ngModelChange",function(s){m(t);let p=g();return u(p.onQuery(s))})("keydown",function(s){m(t);let p=g();return u(p.onKey(s))}),r(),o(3,"ul",6),h(4,Fe,7,6,"li",7)(5,De,2,0,"li",8),r(),o(6,"div",9)(7,"span")(8,"kbd",10),l(9,"\u2191"),r(),o(10,"kbd",10),l(11,"\u2193"),r(),l(12," navigate"),r(),o(13,"span")(14,"kbd",10),l(15,"Enter"),r(),l(16," select"),r(),o(17,"span")(18,"kbd",10),l(19,"Esc"),r(),l(20," close"),r()()()}if(n&2){let t=g();a(),c("ngModel",t.query()),a(3),c("ngForOf",t.results())("ngForTrackBy",t.trackByHash),a(),c("ngIf",!t.results().length)}}var K=class n{state=v(O);input;query=M("");index=M(0);results=y(()=>{let e=this.query().trim().toLowerCase(),t=this.state.commits();return e?t.filter(i=>i.hash.toLowerCase().startsWith(e)||i.shortHash.toLowerCase().startsWith(e)||i.subject.toLowerCase().includes(e)||i.author.toLowerCase().includes(e)).slice(0,50):t.slice(0,50)});constructor(){k(()=>{this.state.paletteOpen()&&(this.query.set(""),this.index.set(0),queueMicrotask(()=>this.input?.nativeElement.focus()))}),k(()=>{let e=this.results().length;this.index()>=e&&this.index.set(Math.max(0,e-1))})}trackByHash(e,t){return t.hash}onQuery(e){this.query.set(e),this.index.set(0)}onKey(e){if(e.key==="ArrowDown")e.preventDefault(),this.index.update(t=>Math.min(this.results().length-1,t+1));else if(e.key==="ArrowUp")e.preventDefault(),this.index.update(t=>Math.max(0,t-1));else if(e.key==="Enter"){e.preventDefault();let t=this.results()[this.index()];t&&this.pick(t)}else e.key==="Escape"&&(e.preventDefault(),this.close())}pick(e){this.state.selectHash(e.hash),this.close()}close(){this.state.paletteOpen.set(!1)}onGlobal(e){(e.metaKey||e.ctrlKey)&&(e.key==="k"||e.key==="K")&&(e.preventDefault(),this.state.paletteOpen.set(!this.state.paletteOpen()))}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=w({type:n,selectors:[["app-command-palette"]],viewQuery:function(t,i){if(t&1&&L(Ie,5),t&2){let s;N(s=H())&&(i.input=s.first)}},hostBindings:function(t,i){t&1&&d("keydown",function(p){return i.onGlobal(p)},D)},decls:2,vars:2,consts:[["input",""],["class","backdrop",3,"click",4,"ngIf"],["class","palette","role","dialog","aria-modal","true",4,"ngIf"],[1,"backdrop",3,"click"],["role","dialog","aria-modal","true",1,"palette"],["type","text","placeholder","Jump to a commit by hash, subject, or author\u2026",1,"search",3,"ngModelChange","keydown","ngModel"],["role","listbox",1,"results"],["class","result",3,"active","mouseenter","click",4,"ngFor","ngForOf","ngForTrackBy"],["class","result empty",4,"ngIf"],[1,"footer"],[1,"kbd"],[1,"result",3,"mouseenter","click"],[1,"hash"],[1,"subj"],[1,"auth"],[1,"result","empty"]],template:function(t,i){t&1&&h(0,Ve,1,0,"div",1)(1,Le,21,4,"div",2),t&2&&(c("ngIf",i.state.paletteOpen()),a(),c("ngIf",i.state.paletteOpen()))},dependencies:[T,I,S,j,B,R,q],styles:[".backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;background:var(--bg-overlay);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:90}.palette[_ngcontent-%COMP%]{position:fixed;top:12vh;left:50%;transform:translate(-50%);width:min(640px,calc(100vw - 32px));background:color-mix(in oklab,var(--bg-glass) 96%,transparent);border:1px solid var(--border-soft);border-radius:var(--radius-xl);box-shadow:var(--shadow-lg),var(--shadow-glow);-webkit-backdrop-filter:blur(18px) saturate(1.2);backdrop-filter:blur(18px) saturate(1.2);z-index:100;overflow:hidden}.search[_ngcontent-%COMP%]{width:100%;border:0;outline:0;padding:1rem 1.1rem;background:transparent;color:var(--fg-primary);font-size:14px;border-bottom:1px solid var(--border-soft)}.results[_ngcontent-%COMP%]{list-style:none;margin:0;padding:.25rem 0;max-height:50vh;overflow:auto}.result[_ngcontent-%COMP%]{display:grid;grid-template-columns:70px 1fr auto;align-items:center;gap:.6rem;padding:.52rem 1rem;cursor:pointer;font-size:13px}.result.active[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--accent) 12%,transparent);box-shadow:inset 3px 0 0 var(--accent)}.result.empty[_ngcontent-%COMP%]{grid-template-columns:1fr;color:var(--fg-muted);cursor:default}.hash[_ngcontent-%COMP%]{font-family:var(--font-mono);color:var(--fg-muted)}.subj[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--fg-primary)}.auth[_ngcontent-%COMP%]{color:var(--fg-muted);font-size:11px}.footer[_ngcontent-%COMP%]{display:flex;gap:1rem;padding:.4rem .75rem;background:color-mix(in oklab,var(--bg-surface-2) 84%,transparent);border-top:1px solid var(--border-soft);font-size:11px;color:var(--fg-muted)}"],changeDetection:0})};function Ne(n,e){if(n&1&&(o(0,"kbd",11),l(1),r()),n&2){let t=e.$implicit;a(),b(t)}}function He(n,e){if(n&1&&(o(0,"li")(1,"span",8),l(2),r(),o(3,"span",9),h(4,Ne,2,1,"kbd",10),r()()),n&2){let t=e.$implicit;a(2),b(t.description),a(2),c("ngForOf",t.keys)}}function Ae(n,e){if(n&1&&(o(0,"section")(1,"h3"),l(2),r(),o(3,"ul"),h(4,He,5,2,"li",7),r()()),n&2){let t=e.$implicit;a(2),b(t.title),a(2),c("ngForOf",t.bindings)}}function ze(n,e){if(n&1){let t=_();V(0),o(1,"div",1),d("click",function(){m(t);let s=g();return u(s.close())}),r(),o(2,"div",2)(3,"div",3)(4,"h2",4),l(5,"Keyboard shortcuts"),r(),o(6,"button",5),d("click",function(){m(t);let s=g();return u(s.close())}),l(7,"\u2715"),r()(),o(8,"div",6),h(9,Ae,5,2,"section",7),r()(),F()}if(n&2){let t=g();a(9),c("ngForOf",t.groups)}}var Be=[{title:"Navigation",bindings:[{keys:["j"],description:"Next commit"},{keys:["k"],description:"Previous commit"},{keys:["g"],description:"Jump to newest commit"},{keys:["G"],description:"Jump to oldest commit"}]},{title:"Search & overlays",bindings:[{keys:["/"],description:"Focus search"},{keys:["\u2318","K"],description:"Open command palette"},{keys:["?"],description:"Show this help"},{keys:["Esc"],description:"Close overlays"}]}],$=class n{state=v(O);groups=Be;close(){this.state.shortcutsOpen.set(!1)}onKey(e){e.key==="?"&&!this.isTyping(e.target)&&(e.preventDefault(),this.state.shortcutsOpen.set(!0)),e.key==="Escape"&&(this.state.shortcutsOpen.set(!1),this.state.paletteOpen.set(!1))}isTyping(e){return e instanceof HTMLElement?["INPUT","TEXTAREA","SELECT"].includes(e.tagName)||e.isContentEditable:!1}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=w({type:n,selectors:[["app-shortcuts-modal"]],hostBindings:function(t,i){t&1&&d("keydown",function(p){return i.onKey(p)},D)},decls:1,vars:1,consts:[[4,"ngIf"],[1,"backdrop",3,"click"],["role","dialog","aria-modal","true","aria-labelledby","shortcuts-title",1,"modal"],[1,"head"],["id","shortcuts-title"],["aria-label","Close",1,"btn","btn-ghost","btn-icon",3,"click"],[1,"body"],[4,"ngFor","ngForOf"],[1,"desc"],[1,"keys"],["class","kbd",4,"ngFor","ngForOf"],[1,"kbd"]],template:function(t,i){t&1&&h(0,ze,10,1,"ng-container",0),t&2&&c("ngIf",i.state.shortcutsOpen())},dependencies:[T,I,S],styles:[".backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;background:var(--bg-overlay);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:90}.modal[_ngcontent-%COMP%]{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(560px,calc(100vw - 32px));max-height:80vh;overflow:auto;background:var(--bg-elevated);border:1px solid var(--border-soft);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);z-index:100}.head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;border-bottom:1px solid var(--border-soft)}.head[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:16px}.body[_ngcontent-%COMP%]{padding:.75rem 1rem 1rem}h3[_ngcontent-%COMP%]{margin:1rem 0 .4rem;font-size:12px;color:var(--fg-muted);text-transform:uppercase;letter-spacing:.04em}h3[_ngcontent-%COMP%]:first-child{margin-top:0}ul[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}li[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:.45rem .25rem;border-bottom:1px dashed var(--border-soft)}li[_ngcontent-%COMP%]:last-child{border-bottom:0}.desc[_ngcontent-%COMP%]{color:var(--fg-secondary);font-size:13px}.keys[_ngcontent-%COMP%]{display:flex;gap:4px}"],changeDetection:0})};var Re=["searchInput"],qe=()=>({exact:!0});function je(n,e){if(n&1&&(o(0,"span",37),l(1),r()),n&2){let t=e.ngIf;a(),b(t)}}function Ke(n,e){n&1&&(V(0),P(),o(1,"svg",38),x(2,"path",39),r(),F())}function Ge(n,e){n&1&&(V(0),o(1,"span",40),l(2,"AI"),r(),F())}function $e(n,e){n&1&&(o(0,"kbd",41),l(1,"/"),r())}function Ze(n,e){if(n&1&&(o(0,"option",42),l(1),r()),n&2){let t=e.$implicit,i=g();c("value",t),a(),b(i.shortBranch(t))}}function Qe(n,e){if(n&1&&(o(0,"option",42),l(1),r()),n&2){let t=e.$implicit;c("value",t),a(),b(t)}}function Ue(n,e){if(n&1){let t=_();o(0,"button",43),d("click",function(){m(t);let s=g();return u(s.clearFilters())}),l(1),r()}if(n&2){let t=g();a(),C(" Clear ",t.activeFilterCount()," ")}}function We(n,e){n&1&&(P(),o(0,"svg",29),x(1,"path",44),r())}function Je(n,e){n&1&&(P(),o(0,"svg",29),x(1,"path",45),r())}function Xe(n,e){if(n&1&&(o(0,"span",51),l(1),r()),n&2){let t=g().ngIf;a(),C("author: ",t.author)}}function Ye(n,e){if(n&1&&(o(0,"span",51),l(1),r()),n&2){let t=g().ngIf;a(),C("since: ",t.since)}}function et(n,e){if(n&1&&(o(0,"span",51),l(1),r()),n&2){let t=g().ngIf;a(),C("until: ",t.until)}}function tt(n,e){if(n&1&&(o(0,"span",51),l(1),r()),n&2){let t=e.$implicit;a(),b(t)}}function nt(n,e){n&1&&(o(0,"span",52),l(1,"no structured filters detected"),r())}function it(n,e){if(n&1&&(o(0,"div",46)(1,"span",47),l(2,"Interpreted as"),r(),h(3,Xe,2,1,"span",48)(4,Ye,2,1,"span",48)(5,et,2,1,"span",48)(6,tt,2,1,"span",49)(7,nt,2,0,"span",50),r()),n&2){let t=e.ngIf;a(3),c("ngIf",t.author),a(),c("ngIf",t.since),a(),c("ngIf",t.until),a(),c("ngForOf",t.keywords),a(),c("ngIf",t.keywords.length===0&&!t.author&&!t.since)}}function ot(n,e){if(n&1){let t=_();o(0,"button",55),d("click",function(){m(t);let s=g(2);return u(s.onBranch(""))}),l(1),o(2,"span"),l(3,"\xD7"),r()()}if(n&2){let t=e.ngIf,i=g(2);a(),C(" branch: ",i.shortBranch(t)," ")}}function rt(n,e){if(n&1){let t=_();o(0,"button",55),d("click",function(){m(t);let s=g(2);return u(s.onAuthor(""))}),l(1),o(2,"span"),l(3,"\xD7"),r()()}if(n&2){let t=e.ngIf;a(),C(" author: ",t," ")}}function at(n,e){if(n&1){let t=_();o(0,"button",55),d("click",function(){m(t);let s=g(2);return u(s.onSince(""))}),l(1),o(2,"span"),l(3,"\xD7"),r()()}if(n&2){let t=e.ngIf;a(),C(" since: ",t," ")}}function st(n,e){if(n&1){let t=_();o(0,"button",55),d("click",function(){m(t);let s=g(2);return u(s.onUntil(""))}),l(1),o(2,"span"),l(3,"\xD7"),r()()}if(n&2){let t=e.ngIf;a(),C(" until: ",t," ")}}function lt(n,e){if(n&1){let t=_();o(0,"button",55),d("click",function(){m(t);let s=g(2);return u(s.onFile(""))}),l(1),o(2,"span"),l(3,"\xD7"),r()()}if(n&2){let t=e.ngIf;a(),C(" file: ",t," ")}}function ct(n,e){if(n&1){let t=_();o(0,"button",55),d("click",function(){m(t);let s=g(2);return u(s.onSearchInput(""))}),l(1),o(2,"span"),l(3,"\xD7"),r()()}if(n&2){let t=e.ngIf;a(),C(" search: ",t," ")}}function pt(n,e){if(n&1&&(o(0,"div",53)(1,"span",47),l(2,"Active filters"),r(),h(3,ot,4,1,"button",54)(4,rt,4,1,"button",54)(5,at,4,1,"button",54)(6,st,4,1,"button",54)(7,lt,4,1,"button",54)(8,ct,4,1,"button",54),r()),n&2){let t=g();a(3),c("ngIf",t.state.filters().branch),a(),c("ngIf",t.state.filters().author),a(),c("ngIf",t.state.filters().since),a(),c("ngIf",t.state.filters().until),a(),c("ngIf",t.state.filters().file),a(),c("ngIf",t.state.filters().search)}}var Z=class n{state=v(O);theme=v(Te);searchEl;searchValue=M("");totalLabel=y(()=>{let e=this.state.total();return e?`${e.toLocaleString()} commits`:""});themeLabel=y(()=>`Switch to ${this.theme.resolved()==="light"?"dark":"light"} mode`);searchPlaceholder=y(()=>this.state.searchMode()==="nl"?'Ask anything: "login bug last month", "payments by alice"\u2026':"Search commits\u2026 ( / )");searchModeTooltip=y(()=>this.state.searchMode()==="nl"?"Natural-language search active. Click to switch to literal search.":"Literal git-grep search. Click to switch to natural-language search.");viewModeTooltip=y(()=>this.state.viewMode()==="grouped"?"Showing PR / feature groups. Click for flat list.":"Showing flat commit list. Click for PR / feature groups.");branchOptions=y(()=>{let e=this.state.branches(),t=e.filter(i=>!dt(i));return t.length?t:e});activeFilterCount=y(()=>{let e=this.state.filters();return[e.branch,e.author,e.since,e.until,e.file,e.search].filter(Boolean).length});debounce=null;constructor(){k(()=>{let e=this.state.filters();this.searchValue.set(e.search??"")})}onKeydown(e){e.key==="/"&&!this.isTyping(e.target)&&(e.preventDefault(),queueMicrotask(()=>this.searchEl?.nativeElement.focus()))}onSearchInput(e){this.searchValue.set(e),this.debounce&&clearTimeout(this.debounce),this.debounce=setTimeout(()=>{this.state.patchFilters({search:e||void 0})},250)}onAuthor(e){this.state.patchFilters({author:e||void 0})}onBranch(e){this.state.patchFilters({branch:e||void 0})}onSince(e){this.state.patchFilters({since:e||void 0})}onUntil(e){this.state.patchFilters({until:e||void 0})}onFile(e){this.state.patchFilters({file:e||void 0})}toggleSearchMode(){let e=this.state.searchMode()==="classic"?"nl":"classic";this.state.searchMode.set(e),e==="classic"&&this.state.nlInterpretation.set(null),this.state.patchFilters({})}toggleViewMode(){this.state.viewMode.set(this.state.viewMode()==="flat"?"grouped":"flat")}clearFilters(){this.state.patchFilters({branch:void 0,author:void 0,since:void 0,until:void 0,file:void 0,search:void 0}),this.searchValue.set("")}isTyping(e){return e instanceof HTMLElement?["INPUT","TEXTAREA","SELECT"].includes(e.tagName)||e.isContentEditable:!1}shortBranch(e){return e.startsWith("origin/")?e.slice(7):e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=w({type:n,selectors:[["app-toolbar"]],viewQuery:function(t,i){if(t&1&&L(Re,5),t&2){let s;N(s=H())&&(i.searchEl=s.first)}},hostBindings:function(t,i){t&1&&d("keydown",function(p){return i.onKeydown(p)},ae)},decls:51,vars:29,consts:[["searchInput",""],[1,"toolbar"],[1,"brand"],["aria-hidden","true",1,"brand-mark"],[1,"brand-text"],[1,"brand-title"],["class","brand-sub",4,"ngIf"],[1,"nav"],["routerLink","/","routerLinkActive","active",3,"routerLinkActiveOptions"],["routerLink","/timeline","routerLinkActive","active"],["routerLink","/insights","routerLinkActive","active"],["routerLink","/wrapped","routerLinkActive","active"],[1,"filters"],[1,"search"],["type","button",1,"search-mode",3,"click","title"],[4,"ngIf"],["type","text","aria-label","Search commits",1,"search-input",3,"ngModelChange","placeholder","ngModel"],["class","kbd",4,"ngIf"],["aria-label","Filter by branch",1,"select",3,"ngModelChange","ngModel"],["value",""],[3,"value",4,"ngFor","ngForOf"],["aria-label","Filter by author",1,"select","author",3,"ngModelChange","ngModel"],["type","date","aria-label","Since date",1,"input","date",3,"ngModelChange","ngModel"],["type","date","aria-label","Until date",1,"input","date",3,"ngModelChange","ngModel"],["type","text","placeholder","path/to/file","aria-label","Filter by file path",1,"input","file",3,"ngModelChange","ngModel"],[1,"actions"],["class","btn btn-ghost clear-filters","title","Clear active filters",3,"click",4,"ngIf"],[1,"btn","btn-ghost","view-toggle",3,"click","title"],["title","Command palette (\u2318K)",1,"btn","btn-ghost","btn-icon",3,"click"],["viewBox","0 0 24 24","width","16","height","16","aria-hidden","true"],["fill","currentColor","d","M3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3Zm3-1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1Zm2 4h2v2H8Zm4 0h6v2h-6Zm-4 4h6v2H8Zm8 0h2v2h-2Z"],["title","Keyboard shortcuts (?)",1,"btn","btn-ghost","btn-icon",3,"click"],["fill","currentColor","d","M11 18h2v-2h-2Zm1-16a8 8 0 0 0-8 8h2a6 6 0 1 1 9.6 4.8c-1.06.8-1.6 1.42-1.6 3.2v.5h-2v-.5c0-2.6.94-3.5 2.13-4.39A4 4 0 1 0 8 10H6a6 6 0 0 1 6-8Z"],[1,"btn","btn-ghost","btn-icon",3,"click","title"],["viewBox","0 0 24 24","width","16","height","16","aria-hidden","true",4,"ngIf"],["class","nl-chips",4,"ngIf"],["class","filter-chips",4,"ngIf"],[1,"brand-sub"],["viewBox","0 0 20 20","width","14","height","14","aria-hidden","true"],["fill","currentColor","d","M9 2a7 7 0 1 1-4.32 12.5l-3.1 3.09a1 1 0 0 1-1.42-1.42l3.1-3.09A7 7 0 0 1 9 2Zm0 2a5 5 0 1 0 0 10A5 5 0 0 0 9 4Z"],[1,"ai-pill"],[1,"kbd"],[3,"value"],["title","Clear active filters",1,"btn","btn-ghost","clear-filters",3,"click"],["fill","currentColor","d","M12 4V2m0 20v-2m8-8h2M2 12h2m13.66-6.34 1.42-1.42M4.92 19.08l1.42-1.42m0-11.32L4.92 4.92m14.16 14.16-1.42-1.42M12 7a5 5 0 1 1 0 10 5 5 0 0 1 0-10Z"],["fill","currentColor","d","M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79Z"],[1,"nl-chips"],[1,"chip-label"],["class","chip",4,"ngIf"],["class","chip",4,"ngFor","ngForOf"],["class","chip muted",4,"ngIf"],[1,"chip"],[1,"chip","muted"],[1,"filter-chips"],["class","chip active",3,"click",4,"ngIf"],[1,"chip","active",3,"click"]],template:function(t,i){if(t&1){let s=_();o(0,"header",1)(1,"div",2)(2,"span",3),l(3,"\u2387"),r(),o(4,"div",4)(5,"span",5),l(6,"Git History"),r(),h(7,je,2,1,"span",6),r()(),o(8,"nav",7)(9,"a",8),l(10,"History"),r(),o(11,"a",9),l(12,"Timeline"),r(),o(13,"a",10),l(14,"Insights"),r(),o(15,"a",11),l(16,"Wrapped"),r()(),o(17,"div",12)(18,"label",13)(19,"button",14),d("click",function(){return m(s),u(i.toggleSearchMode())}),h(20,Ke,3,0,"ng-container",15)(21,Ge,3,0,"ng-container",15),r(),o(22,"input",16,0),d("ngModelChange",function(f){return m(s),u(i.onSearchInput(f))}),r(),h(24,$e,2,0,"kbd",17),r(),o(25,"select",18),d("ngModelChange",function(f){return m(s),u(i.onBranch(f))}),o(26,"option",19),l(27,"All branches"),r(),h(28,Ze,2,2,"option",20),r(),o(29,"select",21),d("ngModelChange",function(f){return m(s),u(i.onAuthor(f))}),o(30,"option",19),l(31,"All authors"),r(),h(32,Qe,2,2,"option",20),r(),o(33,"input",22),d("ngModelChange",function(f){return m(s),u(i.onSince(f))}),r(),o(34,"input",23),d("ngModelChange",function(f){return m(s),u(i.onUntil(f))}),r(),o(35,"input",24),d("ngModelChange",function(f){return m(s),u(i.onFile(f))}),r()(),o(36,"div",25),h(37,Ue,2,1,"button",26),o(38,"button",27),d("click",function(){return m(s),u(i.toggleViewMode())}),l(39),r(),o(40,"button",28),d("click",function(){return m(s),u(i.state.paletteOpen.set(!0))}),P(),o(41,"svg",29),x(42,"path",30),r()(),W(),o(43,"button",31),d("click",function(){return m(s),u(i.state.shortcutsOpen.set(!0))}),P(),o(44,"svg",29),x(45,"path",32),r()(),W(),o(46,"button",33),d("click",function(){return m(s),u(i.theme.cycle())}),h(47,We,2,0,"svg",34)(48,Je,2,0,"svg",34),r()()(),h(49,it,8,5,"div",35)(50,pt,9,6,"div",36)}t&2&&(a(7),c("ngIf",i.totalLabel()),a(2),c("routerLinkActiveOptions",se(28,qe)),a(9),A("search-nl",i.state.searchMode()==="nl"),a(),c("title",i.searchModeTooltip()),E("aria-label",i.searchModeTooltip()),a(),c("ngIf",i.state.searchMode()==="classic"),a(),c("ngIf",i.state.searchMode()==="nl"),a(),c("placeholder",i.searchPlaceholder())("ngModel",i.searchValue()),a(2),c("ngIf",!i.searchValue()),a(),c("ngModel",i.state.filters().branch??""),a(3),c("ngForOf",i.branchOptions()),a(),c("ngModel",i.state.filters().author??""),a(3),c("ngForOf",i.state.authors()),a(),c("ngModel",i.state.filters().since??""),a(),c("ngModel",i.state.filters().until??""),a(),c("ngModel",i.state.filters().file??""),a(2),c("ngIf",i.activeFilterCount()),a(),c("title",i.viewModeTooltip()),E("aria-label",i.viewModeTooltip()),a(),C(" ",i.state.viewMode()==="grouped"?"Grouped":"Flat"," "),a(7),c("title",i.themeLabel()),E("aria-label",i.themeLabel()),a(),c("ngIf",i.theme.resolved()==="light"),a(),c("ngIf",i.theme.resolved()==="dark"),a(),c("ngIf",i.state.searchMode()==="nl"&&i.state.nlInterpretation()),a(),c("ngIf",i.activeFilterCount()))},dependencies:[T,I,S,j,Ce,xe,B,ve,R,q,fe,_e],styles:["[_nghost-%COMP%]{display:block;position:sticky;top:0;z-index:50;background:color-mix(in oklab,var(--bg-glass) 94%,transparent);-webkit-backdrop-filter:blur(16px) saturate(1.2);backdrop-filter:blur(16px) saturate(1.2);border-bottom:1px solid var(--border-soft);box-shadow:var(--shadow-sm)}.toolbar[_ngcontent-%COMP%]{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;align-items:center;column-gap:.75rem;row-gap:.4rem;padding:.65rem 1rem .55rem}.brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.6rem;padding-right:.25rem}.brand-mark[_ngcontent-%COMP%]{width:32px;height:32px;border-radius:8px;display:grid;place-items:center;background:linear-gradient(135deg,var(--accent),#06b6d4);color:var(--accent-fg);box-shadow:var(--shadow-glow);font-weight:700;font-size:18px}.brand-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;line-height:1.1}.brand-title[_ngcontent-%COMP%]{font-weight:600}.brand-sub[_ngcontent-%COMP%]{font-size:11px;color:var(--fg-muted)}.filters[_ngcontent-%COMP%]{display:flex;gap:.4rem;align-items:center;min-width:0;justify-content:flex-end}.filters[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{min-width:0}.search[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;gap:.35rem;flex:1 1 220px;min-width:0;max-width:360px;padding:0 .55rem;background:linear-gradient(180deg,color-mix(in oklab,var(--bg-surface) 94%,white 6%),var(--bg-surface));border:1px solid var(--border-soft);border-radius:999px;color:var(--fg-muted)}.search[_ngcontent-%COMP%]:focus-within{border-color:var(--border-focus);box-shadow:0 0 0 3px var(--accent-ring)}.search-input[_ngcontent-%COMP%]{flex:1;border:0;outline:0;background:transparent;color:var(--fg-primary);font-size:13px;padding:.45rem 0}.search-input[_ngcontent-%COMP%]::placeholder{color:var(--fg-subtle)}.search[_ngcontent-%COMP%] .kbd[_ngcontent-%COMP%]{margin-left:.4rem}.date[_ngcontent-%COMP%]{width:8.25rem}.filters[_ngcontent-%COMP%] .input[_ngcontent-%COMP%], .filters[_ngcontent-%COMP%] .select[_ngcontent-%COMP%]{font-size:12px}.filters[_ngcontent-%COMP%] .select[_ngcontent-%COMP%]{max-width:9.5rem}.filters[_ngcontent-%COMP%] .select.author[_ngcontent-%COMP%]{max-width:8.5rem}.filters[_ngcontent-%COMP%] .input.file[_ngcontent-%COMP%]{width:9rem}.actions[_ngcontent-%COMP%]{display:flex;gap:.3rem;align-items:center}.nav[_ngcontent-%COMP%]{display:flex;gap:.15rem;padding:0}.nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{font-size:12px;color:var(--fg-muted);text-decoration:none;padding:.3rem .65rem;border-radius:var(--radius-sm);transition:background .15s ease,color .15s ease}.nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{background:var(--bg-elevated);color:var(--fg-primary)}.nav[_ngcontent-%COMP%] a.active[_ngcontent-%COMP%]{background:var(--bg-elevated);color:var(--accent);font-weight:600}.search-mode[_ngcontent-%COMP%]{background:transparent;border:0;padding:0;cursor:pointer;color:var(--fg-muted);display:flex;align-items:center}.search-mode[_ngcontent-%COMP%]:hover{color:var(--fg-primary)}.search.search-nl[_ngcontent-%COMP%]{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in oklab,var(--accent) 20%,transparent)}.ai-pill[_ngcontent-%COMP%]{font-size:10px;font-weight:700;letter-spacing:.04em;background:var(--accent);color:var(--accent-fg);padding:1px 5px;border-radius:4px}.view-toggle[_ngcontent-%COMP%]{font-size:11px;letter-spacing:.04em;text-transform:uppercase;padding:.35rem .6rem}.clear-filters[_ngcontent-%COMP%]{font-size:11px;color:var(--danger);border-color:color-mix(in oklab,var(--danger) 24%,transparent)}.nl-chips[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;padding:.4rem 1rem;border-bottom:1px solid var(--border-soft);background:var(--bg-surface);font-size:11px}.filter-chips[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;padding:0 1rem .55rem;background:color-mix(in oklab,var(--bg-glass) 94%,transparent);font-size:11px}.chip-label[_ngcontent-%COMP%]{color:var(--fg-muted);margin-right:.2rem}.chip[_ngcontent-%COMP%]{background:var(--bg-elevated);border:1px solid var(--border-soft);padding:2px 8px;border-radius:999px;color:var(--fg-secondary)}button.chip[_ngcontent-%COMP%]{cursor:pointer;font-family:inherit}.chip.active[_ngcontent-%COMP%]{display:inline-flex;gap:.35rem;align-items:center;border-color:color-mix(in oklab,var(--accent) 35%,var(--border-soft));color:var(--fg-primary)}.chip.active[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--fg-muted);font-weight:700}.chip.muted[_ngcontent-%COMP%]{font-style:italic;color:var(--fg-subtle)}@media (max-width: 1280px){.filters[_ngcontent-%COMP%] .input.file[_ngcontent-%COMP%]{display:none}}@media (max-width: 1100px){.filters[_ngcontent-%COMP%] .date[_ngcontent-%COMP%]{display:none}.search[_ngcontent-%COMP%]{max-width:280px}}@media (max-width: 900px){.toolbar[_ngcontent-%COMP%]{grid-template-columns:auto minmax(0,1fr) auto;row-gap:.5rem}.nav[_ngcontent-%COMP%]{grid-column:1 / -1;order:5}.filters[_ngcontent-%COMP%] .select[_ngcontent-%COMP%]{display:none}}"],changeDetection:0})};function dt(n){return n.startsWith("origin/")||n.includes("/origin/")}var Q=class n{http=v(de);base="/api";cache=new we(50);naturalLanguage(e,t={}){let s=new pe().set("q",e).set("page",String(t.page??1)).set("pageSize",String(t.pageSize??100));for(let p of["author","since","until","branch","file"]){let f=t[p];f&&(s=s.set(p,String(f)))}return this.cache.get(`nl:${s.toString()}`,()=>this.http.get(`${this.base}/search`,{params:s}),ke.SHORT)}invalidate(){this.cache.clear()}static \u0275fac=function(t){return new(t||n)};static \u0275prov=re({token:n,factory:n.\u0275fac,providedIn:"root"})};function mt(n,e){if(n&1&&(o(0,"div",2)(1,"span"),l(2),r()()),n&2){let t=e.ngIf;a(2),b(t)}}function ut(n,e){n&1&&(o(0,"div",3),x(1,"span",4),l(2," Loading commits\u2026 "),r())}var U=class n{state=v(O);git=v(Se);search=v(Q);route=v(ge);commitsResp=Me(ye(this.state.filters).pipe(ie(200),oe(e=>{this.state.loading.set(!0),this.state.error.set(null);let i=this.state.searchMode()==="nl"&&(e.search||"").trim().length>0,s=!i&&(e.page??1)===1;return(i?this.search.naturalLanguage(e.search||"",e):s?this.git.streamCommits(e):this.git.getCommits(e)).pipe(ne(f=>(this.state.error.set(this.errorMessage(f)),this.state.loading.set(!1),te(null))))})),{initialValue:null});authorsLoaded=M(!1);pendingSharedCommit=M(null);loadingSharedCommit=M(null);constructor(){this.route.queryParamMap.subscribe(e=>{let t=gt(e.get("commit"));t&&(this.pendingSharedCommit.set(t),this.state.selectHash(t))}),k(()=>{let e=this.commitsResp();if(!e)return;let t=z(()=>this.state.selectedHash()),i=t?z(()=>Y(this.state.commits(),t)):void 0,s=i&&!Y(e.commits,i.hash)?[i,...e.commits]:e.commits;this.state.commits.set(s),this.state.total.set(e.total),this.state.page.set(e.page),this.state.pageSize.set(e.pageSize),this.state.loading.set(!1);let p=e.parsedQuery;this.state.nlInterpretation.set(p??null);let f=this.pendingSharedCommit();if(f){let ee=Y(s,f);if(ee){this.state.selectHash(ee.hash),this.pendingSharedCommit.set(null);return}this.loadSharedCommit(f);return}!z(()=>this.state.selectedHash())&&e.commits.length&&this.state.selectHash(e.commits[0].hash)}),k(()=>{this.commitsResp()&&!this.authorsLoaded()&&(this.authorsLoaded.set(!0),this.git.getAuthors().subscribe({next:e=>this.state.authors.set(e),error:()=>this.state.authors.set([])}),this.git.getBranches().subscribe({next:e=>this.state.branches.set(e),error:()=>this.state.branches.set([])}),this.git.getTags().subscribe({next:e=>this.state.tags.set(e),error:()=>this.state.tags.set([])}))})}errorMessage(e){if(e&&typeof e=="object"&&"error"in e){let t=e.error;if(t?.error)return t.error}return e instanceof Error?e.message:"Failed to load commits."}loadSharedCommit(e){this.loadingSharedCommit()!==e&&(this.loadingSharedCommit.set(e),this.git.getCommit(e).subscribe({next:t=>{this.state.commits.update(i=>i.some(s=>s.hash===t.hash)?i:[t,...i]),this.state.selectHash(t.hash),this.pendingSharedCommit.set(null),this.loadingSharedCommit.set(null)},error:()=>{this.state.error.set(`Shared commit not found: ${e}`),this.pendingSharedCommit.set(null),this.loadingSharedCommit.set(null)}}))}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=w({type:n,selectors:[["app-root"]],decls:6,vars:2,consts:[["class","status-bar",4,"ngIf"],["class","loading","aria-live","polite",4,"ngIf"],[1,"status-bar"],["aria-live","polite",1,"loading"],[1,"spinner"]],template:function(t,i){t&1&&(x(0,"app-toolbar"),h(1,mt,3,1,"div",0),x(2,"router-outlet"),h(3,ut,3,0,"div",1),x(4,"app-command-palette")(5,"app-shortcuts-modal")),t&2&&(a(),c("ngIf",i.state.error()),a(2),c("ngIf",i.state.loading()))},dependencies:[T,S,he,Z,K,$],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100vh;width:100vw;overflow:hidden;background:var(--bg-app);color:var(--fg-primary)}.status-bar[_ngcontent-%COMP%]{padding:.5rem 1rem;background:#dc26261a;color:var(--danger);border-bottom:1px solid var(--border-soft);font-size:13px}.loading[_ngcontent-%COMP%]{position:fixed;bottom:1rem;right:1rem;display:flex;align-items:center;gap:.5rem;padding:.5rem .85rem;background:var(--bg-elevated);border:1px solid var(--border-soft);border-radius:var(--radius-md);box-shadow:var(--shadow-md);font-size:12px;color:var(--fg-secondary);z-index:80}.spinner[_ngcontent-%COMP%]{width:14px;height:14px;border:2px solid var(--border-strong);border-top-color:var(--accent);border-radius:50%;animation:_ngcontent-%COMP%_spin .7s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}"],changeDetection:0})};function gt(n){let e=n?.trim();return e&&/^[0-9a-f]{7,40}$/i.test(e)?e:null}function Y(n,e){let t=e.toLowerCase();return n.find(i=>i.hash.toLowerCase()===t||i.shortHash.toLowerCase()===t||i.hash.toLowerCase().startsWith(t))}ce(U,Pe).catch(n=>console.error(n));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.flex-shrink{flex-shrink:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize{resize:both}.flex-wrap{flex-wrap:wrap}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.border{border-width:1px}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.underline{text-decoration-line:underline}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert: invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:root{color-scheme:light;--bg-app: #f7f8fa;--bg-surface: #ffffff;--bg-surface-2: #f3f4f6;--bg-elevated: #ffffff;--bg-panel: rgba(255, 255, 255, .78);--bg-glass: rgba(255, 255, 255, .72);--bg-hover: #eef2ff;--bg-selected: #e0e7ff;--bg-overlay: rgba(15, 23, 42, .45);--bg-gradient: radial-gradient(circle at 12% -8%, rgba(79, 70, 229, .12), transparent 34%), radial-gradient(circle at 90% 0%, rgba(6, 182, 212, .12), transparent 28%), linear-gradient(180deg, #f8fafc 0%, #eef2f7 100%);--fg-primary: #0f172a;--fg-secondary: #475569;--fg-muted: #64748b;--fg-subtle: #94a3b8;--fg-inverted: #ffffff;--border-soft: #e2e8f0;--border-strong: #cbd5e1;--border-focus: #6366f1;--accent: #4f46e5;--accent-hover: #4338ca;--accent-soft: #eef2ff;--accent-fg: #ffffff;--accent-ring: rgba(99, 102, 241, .18);--success: #16a34a;--warning: #d97706;--danger: #dc2626;--diff-add-bg: #dcfce7;--diff-add-fg: #14532d;--diff-add-gutter: #86efac;--diff-del-bg: #fee2e2;--diff-del-fg: #7f1d1d;--diff-del-gutter: #fca5a5;--diff-hunk-bg: #f1f5f9;--diff-hunk-fg: #475569;--graph-guide: rgba(148, 163, 184, .28);--graph-row-alt: rgba(15, 23, 42, .025);--graph-row-hover: rgba(79, 70, 229, .08);--graph-row-selected: rgba(79, 70, 229, .14);--graph-node-ring: #ffffff;--graph-shadow: rgba(15, 23, 42, .12);--chart-add: #16a34a;--chart-del: #dc2626;--chart-line: #4f46e5;--chart-fill: rgba(79, 70, 229, .16);--shadow-sm: 0 1px 2px rgba(15, 23, 42, .06);--shadow-md: 0 4px 12px rgba(15, 23, 42, .08);--shadow-lg: 0 12px 32px rgba(15, 23, 42, .12);--shadow-glow: 0 16px 60px rgba(79, 70, 229, .14);--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 18px;--font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, "Cascadia Mono", "Liberation Mono", "Courier New", monospace}:root.dark{color-scheme:dark;--bg-app: #0b1020;--bg-surface: #111827;--bg-surface-2: #0f172a;--bg-elevated: #1f2937;--bg-panel: rgba(17, 24, 39, .74);--bg-glass: rgba(15, 23, 42, .72);--bg-hover: #1e293b;--bg-selected: #312e81;--bg-overlay: rgba(2, 6, 23, .6);--bg-gradient: radial-gradient(circle at 10% -10%, rgba(129, 140, 248, .18), transparent 34%), radial-gradient(circle at 94% 2%, rgba(34, 211, 238, .12), transparent 30%), linear-gradient(180deg, #0b1020 0%, #020617 100%);--fg-primary: #f8fafc;--fg-secondary: #cbd5e1;--fg-muted: #94a3b8;--fg-subtle: #64748b;--fg-inverted: #0b1020;--border-soft: #1f2937;--border-strong: #334155;--border-focus: #818cf8;--accent: #818cf8;--accent-hover: #a5b4fc;--accent-soft: #1e1b4b;--accent-fg: #0b1020;--accent-ring: rgba(129, 140, 248, .24);--success: #4ade80;--warning: #fbbf24;--danger: #f87171;--diff-add-bg: rgba(34, 197, 94, .16);--diff-add-fg: #bbf7d0;--diff-add-gutter: #166534;--diff-del-bg: rgba(239, 68, 68, .18);--diff-del-fg: #fecaca;--diff-del-gutter: #7f1d1d;--diff-hunk-bg: #1f2937;--diff-hunk-fg: #cbd5e1;--graph-guide: rgba(148, 163, 184, .22);--graph-row-alt: rgba(248, 250, 252, .025);--graph-row-hover: rgba(129, 140, 248, .12);--graph-row-selected: rgba(129, 140, 248, .2);--graph-node-ring: #111827;--graph-shadow: rgba(0, 0, 0, .45);--chart-add: #4ade80;--chart-del: #f87171;--chart-line: #a5b4fc;--chart-fill: rgba(129, 140, 248, .18);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .45);--shadow-md: 0 6px 16px rgba(0, 0, 0, .45);--shadow-lg: 0 18px 40px rgba(0, 0, 0, .55);--shadow-glow: 0 24px 80px rgba(79, 70, 229, .18)}*,*:before,*:after{box-sizing:border-box}html,body{height:100%}body{margin:0;font-family:var(--font-sans);font-size:14px;line-height:1.5;color:var(--fg-primary);background:var(--bg-gradient);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}::selection{background:var(--accent);color:var(--accent-fg)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:999px;border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-track{background:transparent}:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}button{font-family:inherit}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.45rem .85rem;font-size:13px;font-weight:500;border-radius:calc(var(--radius-sm) + 2px);background:linear-gradient(180deg,color-mix(in oklab,var(--bg-surface) 92%,white 8%),var(--bg-surface-2));color:var(--fg-primary);border:1px solid var(--border-soft);cursor:pointer;box-shadow:var(--shadow-sm);transition:background .12s,border-color .12s,color .12s,transform 60ms,box-shadow .12s}.btn:hover{background:var(--bg-hover);border-color:var(--border-strong);box-shadow:var(--shadow-md)}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--accent);color:var(--accent-fg);border-color:transparent}.btn-primary:hover{background:var(--accent-hover)}.btn-ghost{background:transparent;border-color:transparent;box-shadow:none}.btn-ghost:hover{background:var(--bg-hover)}.btn-icon{width:32px;padding:0;height:32px}.input,.select{background:color-mix(in oklab,var(--bg-surface) 88%,transparent);color:var(--fg-primary);border:1px solid var(--border-soft);border-radius:calc(var(--radius-sm) + 2px);padding:.4rem .6rem;font-size:13px;outline:none;min-height:32px}.input::placeholder{color:var(--fg-subtle)}.input:focus,.select:focus{border-color:var(--border-focus);box-shadow:0 0 0 3px var(--accent-ring)}.panel-card{background:linear-gradient(180deg,color-mix(in oklab,var(--bg-panel) 94%,white 6%),var(--bg-panel));border:1px solid color-mix(in oklab,var(--border-soft) 88%,transparent);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.metric-chip{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .55rem;border:1px solid var(--border-soft);border-radius:999px;background:var(--bg-surface-2);color:var(--fg-secondary);font-size:11px;font-variant-numeric:tabular-nums}.skeleton{position:relative;overflow:hidden;background:var(--bg-surface-2);border-radius:var(--radius-sm)}.skeleton:after{content:"";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,color-mix(in oklab,var(--fg-muted) 14%,transparent),transparent);animation:shimmer 1.4s infinite}@keyframes shimmer{to{transform:translate(100%)}}.kbd{display:inline-flex;align-items:center;justify-content:center;min-width:22px;padding:1px 6px;font-family:var(--font-mono);font-size:11px;font-weight:600;color:var(--fg-secondary);background:var(--bg-surface);border:1px solid var(--border-strong);border-bottom-width:2px;border-radius:4px}.divider{height:1px;background:var(--border-soft)}.hljs{background:transparent;color:var(--fg-primary)}.hljs-keyword,.hljs-selector-tag,.hljs-meta-keyword,.hljs-doctag,.hljs-section,.hljs-name{color:#c084fc}.dark .hljs-keyword,.dark .hljs-selector-tag,.dark .hljs-meta-keyword,.dark .hljs-doctag,.dark .hljs-section,.dark .hljs-name{color:#d8b4fe}.hljs-string,.hljs-attr,.hljs-symbol,.hljs-bullet,.hljs-addition{color:#15803d}.dark .hljs-string,.dark .hljs-attr,.dark .hljs-symbol,.dark .hljs-bullet,.dark .hljs-addition{color:#86efac}.hljs-number,.hljs-literal,.hljs-link{color:#b45309}.dark .hljs-number,.dark .hljs-literal,.dark .hljs-link{color:#fcd34d}.hljs-comment,.hljs-quote{color:var(--fg-subtle);font-style:italic}.hljs-title,.hljs-class .hljs-title,.hljs-type{color:#1d4ed8}.dark .hljs-title,.dark .hljs-class .hljs-title,.dark .hljs-type{color:#93c5fd}.hljs-deletion{color:#b91c1c}.dark .hljs-deletion{color:#fca5a5}.cdk-overlay-dark-backdrop{background:var(--bg-overlay);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/backend/server.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgB,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAO/D,OAAO,EAAwB,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/backend/server.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgB,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAO/D,OAAO,EAAwB,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAQ9E,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,gFAAgF;IAChF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAKD,wBAAsB,WAAW,CAC/B,IAAI,GAAE,MAAqB,EAC3B,IAAI,GAAE,MAAqB,EAC3B,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GACnC,OAAO,CAAC,UAAU,CAAC,CAmiBrB"}
|
package/dist/backend/server.js
CHANGED
|
@@ -20,6 +20,7 @@ const llm_1 = require("./llm");
|
|
|
20
20
|
const impact_1 = require("./impact");
|
|
21
21
|
const breakage_1 = require("./breakage");
|
|
22
22
|
const insights_1 = require("./insights");
|
|
23
|
+
const wrapped_1 = require("./wrapped");
|
|
23
24
|
const annotations_1 = require("./annotations");
|
|
24
25
|
const sqliteIndex_1 = require("./cache/sqliteIndex");
|
|
25
26
|
const DEFAULT_PORT = 3000;
|
|
@@ -291,6 +292,20 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
|
|
|
291
292
|
});
|
|
292
293
|
res.json(bundle);
|
|
293
294
|
}));
|
|
295
|
+
app.get('/api/wrapped', wrap(async (req, res) => {
|
|
296
|
+
const signal = requestAbortSignal(req);
|
|
297
|
+
const yearParam = numberParam(req.query.year, 0);
|
|
298
|
+
const wrapped = await (0, wrapped_1.computeWrapped)(gitService, {
|
|
299
|
+
year: yearParam > 0 ? yearParam : undefined,
|
|
300
|
+
since: stringParam(req.query.since),
|
|
301
|
+
until: stringParam(req.query.until),
|
|
302
|
+
branch: stringParam(req.query.branch),
|
|
303
|
+
author: stringParam(req.query.author),
|
|
304
|
+
maxCommits: numberParam(req.query.maxCommits, 5000),
|
|
305
|
+
signal
|
|
306
|
+
});
|
|
307
|
+
res.json(wrapped);
|
|
308
|
+
}));
|
|
294
309
|
app.post('/api/summarize-diff', wrap(async (req, res) => {
|
|
295
310
|
const text = typeof req.body?.text === 'string' ? req.body.text : '';
|
|
296
311
|
if (!text) {
|