diff --git a/404.html b/404.html new file mode 100644 index 0000000..0447885 --- /dev/null +++ b/404.html @@ -0,0 +1,15 @@ + + + + + + + Husky.Net + + + + +

404

How did we get here?
Take me home
+ + + diff --git a/assets/404.b0d8fe8a.js b/assets/404.b0d8fe8a.js new file mode 100644 index 0000000..78ed10f --- /dev/null +++ b/assets/404.b0d8fe8a.js @@ -0,0 +1 @@ +import{f as i,u as _,g as p,r as f,o as k,c as v,b as o,t as c,a as L,w as g,h as l,e as x}from"./app.22727b9e.js";const b={class:"theme-container"},B={class:"theme-default-content"},N=o("h1",null,"404",-1),V=i({setup(T){var a,s,n;const u=_(),e=p(),t=(a=e.value.notFound)!=null?a:["Not Found"],r=()=>t[Math.floor(Math.random()*t.length)],h=(s=e.value.home)!=null?s:u.value,m=(n=e.value.backToHome)!=null?n:"Back to home";return(C,M)=>{const d=f("RouterLink");return k(),v("div",b,[o("div",B,[N,o("blockquote",null,c(r()),1),L(d,{to:l(h)},{default:g(()=>[x(c(l(m)),1)]),_:1},8,["to"])])])}}});export{V as default}; diff --git a/assets/404.html.beaa804c.js b/assets/404.html.beaa804c.js new file mode 100644 index 0000000..b4ac8a7 --- /dev/null +++ b/assets/404.html.beaa804c.js @@ -0,0 +1 @@ +const t={key:"v-3706649a",path:"/404.html",title:"",lang:"en-US",frontmatter:{layout:"404"},excerpt:"",headers:[]};export{t as data}; diff --git a/assets/404.html.bee13de6.js b/assets/404.html.bee13de6.js new file mode 100644 index 0000000..8e6fc1b --- /dev/null +++ b/assets/404.html.bee13de6.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper.21dcd24c.js";const r={};function _(c,t){return null}var o=e(r,[["render",_]]);export{o as default}; diff --git a/assets/Layout.f68faebd.js b/assets/Layout.f68faebd.js new file mode 100644 index 0000000..36bf5d2 --- /dev/null +++ b/assets/Layout.f68faebd.js @@ -0,0 +1 @@ +var Me=Object.defineProperty,Be=Object.defineProperties;var De=Object.getOwnPropertyDescriptors;var de=Object.getOwnPropertySymbols;var Ne=Object.prototype.hasOwnProperty,Ee=Object.prototype.propertyIsEnumerable;var ve=(l,t,e)=>t in l?Me(l,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):l[t]=e,Y=(l,t)=>{for(var e in t||(t={}))Ne.call(t,e)&&ve(l,e,t[e]);if(de)for(var e of de(t))Ee.call(t,e)&&ve(l,e,t[e]);return l},J=(l,t)=>Be(l,De(t));import{r as I,o as a,c,a as k,f as y,i as P,j as p,k as pe,h as n,F as B,l as R,m as w,b as g,t as T,n as W,p as Q,q as C,w as M,s as he,v as x,e as j,x as U,y as Ie,z as Pe,A as Re,B as V,C as Z,D as G,E as _e,G as fe,H,u as me,g as D,I as He,J as Ae,T as be,K as z,L as ze,M as q,N as K,O as ee,P as ge,Q as ke,d as Oe,R as $e,S as Fe,U as X,V as te,W as We,X as je,Y as Ue}from"./app.22727b9e.js";import{_ as Ve}from"./plugin-vue_export-helper.21dcd24c.js";const Ge={},qe={class:"theme-default-content custom"};function Ke(l,t){const e=I("Content");return a(),c("div",qe,[k(e)])}var Xe=Ve(Ge,[["render",Ke]]);const Ye={key:0,class:"features"},Je=y({setup(l){const t=P(),e=p(()=>pe(t.value.features)?t.value.features:[]);return(i,r)=>n(e).length?(a(),c("div",Ye,[(a(!0),c(B,null,R(n(e),_=>(a(),c("div",{key:_.title,class:"feature"},[g("h2",null,T(_.title),1),g("p",null,T(_.details),1)]))),128))])):w("",!0)}}),Qe=["innerHTML"],Ze=["textContent"],et=y({setup(l){const t=P(),e=p(()=>t.value.footer),i=p(()=>t.value.footerHtml);return(r,_)=>n(e)?(a(),c(B,{key:0},[n(i)?(a(),c("div",{key:0,class:"footer",innerHTML:n(e)},null,8,Qe)):(a(),c("div",{key:1,class:"footer",textContent:T(n(e))},null,8,Ze))],64)):w("",!0)}}),tt=["href","rel","target","aria-label"],nt=y({inheritAttrs:!1}),E=y(J(Y({},nt),{props:{item:{type:Object,required:!0}},setup(l){const t=l,e=W(),i=Re(),{item:r}=Q(t),_=p(()=>U(r.value.link)),f=p(()=>Ie(r.value.link)||Pe(r.value.link)),h=p(()=>{if(!f.value){if(r.value.target)return r.value.target;if(_.value)return"_blank"}}),s=p(()=>h.value==="_blank"),o=p(()=>!_.value&&!f.value&&!s.value),u=p(()=>{if(!f.value){if(r.value.rel)return r.value.rel;if(s.value)return"noopener noreferrer"}}),d=p(()=>r.value.ariaLabel||r.value.text),v=p(()=>{const L=Object.keys(i.value.locales);return L.length?!L.some(m=>m===r.value.link):r.value.link!=="/"}),b=p(()=>v.value?e.path.startsWith(r.value.link):!1),$=p(()=>o.value?r.value.activeMatch?new RegExp(r.value.activeMatch).test(e.path):b.value:!1);return(L,m)=>{const S=I("RouterLink"),N=I("ExternalLinkIcon");return n(o)?(a(),C(S,he({key:0,class:{"router-link-active":n($)},to:n(r).link,"aria-label":n(d)},L.$attrs),{default:M(()=>[x(L.$slots,"before"),j(" "+T(n(r).text)+" ",1),x(L.$slots,"after")]),_:3},16,["class","to","aria-label"])):(a(),c("a",he({key:1,class:"external-link",href:n(r).link,rel:n(u),target:n(h),"aria-label":n(d)},L.$attrs),[x(L.$slots,"before"),j(" "+T(n(r).text)+" ",1),n(s)?(a(),C(N,{key:0})):w("",!0),x(L.$slots,"after")],16,tt))}}})),at={class:"hero"},st={key:0,id:"main-title"},rt={key:1,class:"description"},ot={key:2,class:"actions"},lt=y({setup(l){const t=P(),e=V(),i=Z(),r=p(()=>i.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),_=p(()=>t.value.heroText===null?null:t.value.heroText||e.value.title||"Hello"),f=p(()=>t.value.heroAlt||_.value||"hero"),h=p(()=>t.value.tagline===null?null:t.value.tagline||e.value.description||"Welcome to your VuePress site"),s=p(()=>pe(t.value.actions)?t.value.actions.map(({text:u,link:d,type:v="primary"})=>({text:u,link:d,type:v})):[]),o=()=>{if(!r.value)return null;const u=G("img",{src:_e(r.value),alt:f.value});return t.value.heroImageDark===void 0?u:G(fe,u)};return(u,d)=>(a(),c("header",at,[k(o),n(_)?(a(),c("h1",st,T(n(_)),1)):w("",!0),n(h)?(a(),c("p",rt,T(n(h)),1)):w("",!0),n(s).length?(a(),c("p",ot,[(a(!0),c(B,null,R(n(s),v=>(a(),C(E,{key:v.text,class:H(["action-button",[v.type]]),item:v},null,8,["class","item"]))),128))])):w("",!0)]))}}),ut={class:"home"},it=y({setup(l){return(t,e)=>(a(),c("main",ut,[k(lt),k(Je),k(Xe),k(et)]))}}),ct=y({setup(l){const t=me(),e=V(),i=D(),r=Z(),_=p(()=>i.value.home||t.value),f=p(()=>e.value.title),h=p(()=>r.value&&i.value.logoDark!==void 0?i.value.logoDark:i.value.logo),s=()=>{if(!h.value)return null;const o=G("img",{class:"logo",src:_e(h.value),alt:f.value});return i.value.logoDark===void 0?o:G(fe,o)};return(o,u)=>{const d=I("RouterLink");return a(),C(d,{to:n(_)},{default:M(()=>[k(s),n(f)?(a(),c("span",{key:0,class:H(["site-name",{"can-hide":n(h)}])},T(n(f)),3)):w("",!0)]),_:1},8,["to"])}}}),Le=l=>decodeURI(l).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),dt=(l,t)=>{if(t.hash===l)return!0;const e=Le(t.path),i=Le(l);return e===i},ye=(l,t)=>l.link&&dt(l.link,t)?!0:l.children?l.children.some(e=>ye(e,t)):!1,we=l=>!U(l)||/github\.com/.test(l)?"GitHub":/bitbucket\.org/.test(l)?"Bitbucket":/gitlab\.com/.test(l)?"GitLab":/gitee\.com/.test(l)?"Gitee":null,vt={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},pt=({docsRepo:l,editLinkPattern:t})=>{if(t)return t;const e=we(l);return e!==null?vt[e]:null},ht=({docsRepo:l,docsBranch:t,docsDir:e,filePathRelative:i,editLinkPattern:r})=>{if(!i)return null;const _=pt({docsRepo:l,editLinkPattern:r});return _?_.replace(/:repo/,U(l)?l:`https://github.com/${l}`).replace(/:branch/,t).replace(/:path/,He(`${Ae(e)}/${i}`)):null},xe=y({setup(l){const t=i=>{i.style.height=i.scrollHeight+"px"},e=i=>{i.style.height=""};return(i,r)=>(a(),C(be,{name:"dropdown",onEnter:t,onAfterEnter:e,onBeforeLeave:t},{default:M(()=>[x(i.$slots,"default")]),_:3}))}}),_t=["aria-label"],ft={class:"title"},mt=g("span",{class:"arrow down"},null,-1),bt=["aria-label"],gt={class:"title"},kt={class:"navbar-dropdown"},$t={class:"navbar-dropdown-subtitle"},Lt={key:1},yt={class:"navbar-dropdown-subitem-wrapper"},wt=y({props:{item:{type:Object,required:!0}},setup(l){const t=l,{item:e}=Q(t),i=p(()=>e.value.ariaLabel||e.value.text),r=z(!1),_=W();ze(()=>_.path,()=>{r.value=!1});const f=s=>{s.detail===0?r.value=!r.value:r.value=!1},h=(s,o)=>o[o.length-1]===s;return(s,o)=>(a(),c("div",{class:H(["navbar-dropdown-wrapper",{open:r.value}])},[g("button",{class:"navbar-dropdown-title",type:"button","aria-label":n(i),onClick:f},[g("span",ft,T(n(e).text),1),mt],8,_t),g("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":n(i),onClick:o[0]||(o[0]=u=>r.value=!r.value)},[g("span",gt,T(n(e).text),1),g("span",{class:H(["arrow",r.value?"down":"right"])},null,2)],8,bt),k(xe,null,{default:M(()=>[q(g("ul",kt,[(a(!0),c(B,null,R(n(e).children,u=>(a(),c("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(a(),c(B,{key:0},[g("h4",$t,[u.link?(a(),C(E,{key:0,item:u,onFocusout:d=>h(u,n(e).children)&&u.children.length===0&&(r.value=!1)},null,8,["item","onFocusout"])):(a(),c("span",Lt,T(u.text),1))]),g("ul",yt,[(a(!0),c(B,null,R(u.children,d=>(a(),c("li",{key:d.link,class:"navbar-dropdown-subitem"},[k(E,{item:d,onFocusout:v=>h(d,u.children)&&h(u,n(e).children)&&(r.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(a(),C(E,{key:1,item:u,onFocusout:d=>h(u,n(e).children)&&(r.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[K,r.value]])]),_:1})],2))}}),xt={key:0,class:"navbar-items"},Ce=y({setup(l){const t=()=>{const o=ee(),u=me(),d=V(),v=D();return p(()=>{var S,N;const b=Object.keys(d.value.locales);if(b.length<2)return[];const $=o.currentRoute.value.path,L=o.currentRoute.value.fullPath;return[{text:(S=v.value.selectLanguageText)!=null?S:"unknown language",ariaLabel:(N=v.value.selectLanguageAriaLabel)!=null?N:"unkown language",children:b.map(A=>{var se,re,oe,le,ue,ie;const O=(re=(se=d.value.locales)==null?void 0:se[A])!=null?re:{},ne=(le=(oe=v.value.locales)==null?void 0:oe[A])!=null?le:{},ae=`${O.lang}`,Te=(ue=ne.selectLanguageName)!=null?ue:ae;let F;if(ae===d.value.lang)F=L;else{const ce=$.replace(u.value,A);o.getRoutes().some(Se=>Se.path===ce)?F=ce:F=(ie=ne.home)!=null?ie:A}return{text:Te,link:F}})}]})},e=()=>{const o=D(),u=p(()=>o.value.repo),d=p(()=>u.value?we(u.value):null),v=p(()=>u.value&&!U(u.value)?`https://github.com/${u.value}`:u.value),b=p(()=>v.value?o.value.repoLabel?o.value.repoLabel:d.value===null?"Source":d.value:null);return p(()=>!v.value||!b.value?[]:[{text:b.value,link:v.value}])},i=o=>ge(o)?ke(o):o.children?J(Y({},o),{children:o.children.map(i)}):o,_=(()=>{const o=D();return p(()=>(o.value.navbar||[]).map(i))})(),f=t(),h=e(),s=p(()=>[..._.value,...f.value,...h.value]);return(o,u)=>n(s).length?(a(),c("nav",xt,[(a(!0),c(B,null,R(n(s),d=>(a(),c("div",{key:d.text,class:"navbar-item"},[d.children?(a(),C(wt,{key:0,item:d},null,8,["item"])):(a(),C(E,{key:1,item:d},null,8,["item"]))]))),128))])):w("",!0)}}),Ct=["title"],Tt={class:"icon",focusable:"false",viewBox:"0 0 32 32"},St=Oe('',9),Mt=[St],Bt={class:"icon",focusable:"false",viewBox:"0 0 32 32"},Dt=g("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),Nt=[Dt],Et=y({setup(l){const t=D(),e=Z(),i=()=>{e.value=!e.value};return(r,_)=>(a(),c("button",{class:"toggle-dark-button",title:n(t).toggleDarkMode,onClick:i},[q((a(),c("svg",Tt,Mt,512)),[[K,!n(e)]]),q((a(),c("svg",Bt,Nt,512)),[[K,n(e)]])],8,Ct))}}),It=["title"],Pt=g("div",{class:"icon","aria-hidden":"true"},[g("span"),g("span"),g("span")],-1),Rt=[Pt],Ht=y({emits:["toggle"],setup(l){const t=D();return(e,i)=>(a(),c("div",{class:"toggle-sidebar-button",title:n(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:i[0]||(i[0]=r=>e.$emit("toggle"))},Rt,8,It))}}),At=y({emits:["toggle-sidebar"],setup(l){const t=D(),e=z(null),i=z(null),r=z(0),_=p(()=>r.value?{maxWidth:r.value+"px"}:{}),f=p(()=>t.value.darkMode);$e(()=>{const s=719,o=h(e.value,"paddingLeft")+h(e.value,"paddingRight"),u=()=>{var d;window.innerWidth<=s?r.value=0:r.value=e.value.offsetWidth-o-(((d=i.value)==null?void 0:d.offsetWidth)||0)};u(),window.addEventListener("resize",u,!1),window.addEventListener("orientationchange",u,!1)});function h(s,o){var v,b,$;const u=($=(b=(v=s==null?void 0:s.ownerDocument)==null?void 0:v.defaultView)==null?void 0:b.getComputedStyle(s,null))==null?void 0:$[o],d=Number.parseInt(u,10);return Number.isNaN(d)?0:d}return(s,o)=>{const u=I("NavbarSearch");return a(),c("header",{ref_key:"navbar",ref:e,class:"navbar"},[k(Ht,{onToggle:o[0]||(o[0]=d=>s.$emit("toggle-sidebar"))}),g("span",{ref_key:"navbarBrand",ref:i},[k(ct)],512),g("div",{class:"navbar-items-wrapper",style:Fe(n(_))},[x(s.$slots,"before"),k(Ce,{class:"can-hide"}),x(s.$slots,"after"),n(f)?(a(),C(Et,{key:0})):w("",!0),k(u)],4)],512)}}}),zt={class:"page-meta"},Ot={key:0,class:"meta-item edit-link"},Ft={key:1,class:"meta-item last-updated"},Wt={class:"meta-item-label"},jt={class:"meta-item-info"},Ut={key:2,class:"meta-item contributors"},Vt={class:"meta-item-label"},Gt={class:"meta-item-info"},qt=["title"],Kt=j(", "),Xt=y({setup(l){const t=()=>{const s=D(),o=X(),u=P();return p(()=>{var N,A,O;if(!((A=(N=u.value.editLink)!=null?N:s.value.editLink)!=null?A:!0))return null;const{repo:v,docsRepo:b=v,docsBranch:$="main",docsDir:L="",editLinkText:m}=s.value;if(!b)return null;const S=ht({docsRepo:b,docsBranch:$,docsDir:L,filePathRelative:o.value.filePathRelative,editLinkPattern:(O=u.value.editLinkPattern)!=null?O:s.value.editLinkPattern});return S?{text:m!=null?m:"Edit this page",link:S}:null})},e=()=>{V();const s=D(),o=X(),u=P();return p(()=>{var b,$,L,m;return!(($=(b=u.value.lastUpdated)!=null?b:s.value.lastUpdated)!=null?$:!0)||!((L=o.value.git)==null?void 0:L.updatedTime)?null:new Date((m=o.value.git)==null?void 0:m.updatedTime).toLocaleString()})},i=()=>{const s=D(),o=X(),u=P();return p(()=>{var v,b,$,L;return((b=(v=u.value.contributors)!=null?v:s.value.contributors)!=null?b:!0)&&(L=($=o.value.git)==null?void 0:$.contributors)!=null?L:null})},r=D(),_=t(),f=e(),h=i();return(s,o)=>{const u=I("ClientOnly");return a(),c("footer",zt,[n(_)?(a(),c("div",Ot,[k(E,{class:"meta-item-label",item:n(_)},null,8,["item"])])):w("",!0),n(f)?(a(),c("div",Ft,[g("span",Wt,T(n(r).lastUpdatedText)+": ",1),k(u,null,{default:M(()=>[g("span",jt,T(n(f)),1)]),_:1})])):w("",!0),n(h)&&n(h).length?(a(),c("div",Ut,[g("span",Vt,T(n(r).contributorsText)+": ",1),g("span",Gt,[(a(!0),c(B,null,R(n(h),(d,v)=>(a(),c(B,{key:v},[g("span",{class:"contributor",title:`email: ${d.email}`},T(d.name),9,qt),v!==n(h).length-1?(a(),c(B,{key:0},[Kt],64)):w("",!0)],64))),128))])])):w("",!0)])}}}),Yt={key:0,class:"page-nav"},Jt={class:"inner"},Qt={key:0,class:"prev"},Zt={key:1,class:"next"},en=y({setup(l){const t=s=>s===!1?null:ge(s)?ke(s):We(s)?s:!1,e=(s,o,u)=>{const d=s.findIndex(v=>v.link===o);if(d!==-1){const v=s[d+u];return(v==null?void 0:v.link)?v:null}for(const v of s)if(v.children){const b=e(v.children,o,u);if(b)return b}return null},i=P(),r=te(),_=W(),f=p(()=>{const s=t(i.value.prev);return s!==!1?s:e(r.value,_.path,-1)}),h=p(()=>{const s=t(i.value.next);return s!==!1?s:e(r.value,_.path,1)});return(s,o)=>n(f)||n(h)?(a(),c("nav",Yt,[g("p",Jt,[n(f)?(a(),c("span",Qt,[k(E,{item:n(f)},null,8,["item"])])):w("",!0),n(h)?(a(),c("span",Zt,[k(E,{item:n(h)},null,8,["item"])])):w("",!0)])])):w("",!0)}}),tn={class:"page"},nn={class:"theme-default-content"},an=y({setup(l){return(t,e)=>{const i=I("Content");return a(),c("main",tn,[x(t.$slots,"top"),g("div",nn,[k(i)]),k(Xt),k(en),x(t.$slots,"bottom")])}}}),sn={class:"sidebar-item-children"},rn=y({props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(l){const t=l,{item:e,depth:i}=Q(t),r=W(),_=ee(),f=p(()=>ye(e.value,r)),h=p(()=>({"sidebar-item":!0,"sidebar-heading":i.value===0,active:f.value,collapsible:e.value.collapsible})),s=z(!0),o=z(void 0);return e.value.collapsible&&(s.value=f.value,o.value=()=>{s.value=!s.value},_.afterEach(()=>{s.value=f.value})),(u,d)=>{var b;const v=I("SidebarItem",!0);return a(),c("li",null,[n(e).link?(a(),C(E,{key:0,class:H(n(h)),item:n(e)},null,8,["class","item"])):(a(),c("p",{key:1,class:H(n(h)),onClick:d[0]||(d[0]=(...$)=>o.value&&o.value(...$))},[j(T(n(e).text)+" ",1),n(e).collapsible?(a(),c("span",{key:0,class:H(["arrow",s.value?"down":"right"])},null,2)):w("",!0)],2)),((b=n(e).children)==null?void 0:b.length)?(a(),C(xe,{key:2},{default:M(()=>[q(g("ul",sn,[(a(!0),c(B,null,R(n(e).children,$=>(a(),C(v,{key:`${n(i)}${$.text}${$.link}`,item:$,depth:n(i)+1},null,8,["item","depth"]))),128))],512),[[K,s.value]])]),_:1})):w("",!0)])}}}),on={key:0,class:"sidebar-items"},ln=y({setup(l){const t=te();return(e,i)=>n(t).length?(a(),c("ul",on,[(a(!0),c(B,null,R(n(t),r=>(a(),C(rn,{key:r.link||r.text,item:r},null,8,["item"]))),128))])):w("",!0)}}),un={class:"sidebar"},cn=y({setup(l){return(t,e)=>(a(),c("aside",un,[k(Ce),x(t.$slots,"top"),k(ln),x(t.$slots,"bottom")]))}}),hn=y({setup(l){const t=X(),e=P(),i=D(),r=p(()=>e.value.navbar!==!1&&i.value.navbar!==!1),_=te(),f=z(!1),h=m=>{f.value=typeof m=="boolean"?m:!f.value},s={x:0,y:0},o=m=>{s.x=m.changedTouches[0].clientX,s.y=m.changedTouches[0].clientY},u=m=>{const S=m.changedTouches[0].clientX-s.x,N=m.changedTouches[0].clientY-s.y;Math.abs(S)>Math.abs(N)&&Math.abs(S)>40&&(S>0&&s.x<=80?h(!0):h(!1))},d=p(()=>[{"no-navbar":!r.value,"no-sidebar":!_.value.length,"sidebar-open":f.value},e.value.pageClass]);let v;$e(()=>{v=ee().afterEach(()=>{h(!1)})}),je(()=>{v()});const b=Ue(),$=b.resolve,L=b.pending;return(m,S)=>(a(),c("div",{class:H(["theme-container",n(d)]),onTouchstart:o,onTouchend:u},[x(m.$slots,"navbar",{},()=>[n(r)?(a(),C(At,{key:0,onToggleSidebar:h},{before:M(()=>[x(m.$slots,"navbar-before")]),after:M(()=>[x(m.$slots,"navbar-after")]),_:3})):w("",!0)]),g("div",{class:"sidebar-mask",onClick:S[0]||(S[0]=N=>h(!1))}),x(m.$slots,"sidebar",{},()=>[k(cn,null,{top:M(()=>[x(m.$slots,"sidebar-top")]),bottom:M(()=>[x(m.$slots,"sidebar-bottom")]),_:3})]),x(m.$slots,"page",{},()=>[n(e).home?(a(),C(it,{key:0})):(a(),C(be,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:n($),onBeforeLeave:n(L)},{default:M(()=>[(a(),C(an,{key:n(t).path},{top:M(()=>[x(m.$slots,"page-top")]),bottom:M(()=>[x(m.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}});export{hn as default}; diff --git a/assets/app.22727b9e.js b/assets/app.22727b9e.js new file mode 100644 index 0000000..9a62e7e --- /dev/null +++ b/assets/app.22727b9e.js @@ -0,0 +1,8 @@ +var dl=Object.defineProperty,hl=Object.defineProperties;var pl=Object.getOwnPropertyDescriptors;var To=Object.getOwnPropertySymbols;var ml=Object.prototype.hasOwnProperty,gl=Object.prototype.propertyIsEnumerable;var Po=(e,t,n)=>t in e?dl(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,qe=(e,t)=>{for(var n in t||(t={}))ml.call(t,n)&&Po(e,n,t[n]);if(To)for(var n of To(t))gl.call(t,n)&&Po(e,n,t[n]);return e},xn=(e,t)=>hl(e,pl(t));const ir={};function lr(e,t){const n=Object.create(null),r=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}const vl="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",yl=lr(vl);function Ro(e){return!!e||e===""}function An(e){if(Y(e)){const t={};for(let n=0;n{if(n){const r=n.split(_l);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Yt(e){let t="";if(he(e))t=e;else if(Y(e))for(let n=0;ne==null?"":Y(e)||ye(e)&&(e.toString===Mo||!X(e.toString))?JSON.stringify(e,ko,2):String(e),ko=(e,t)=>t&&t.__v_isRef?ko(e,t.value):Lt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o])=>(n[`${r} =>`]=o,n),{})}:Oo(t)?{[`Set(${t.size})`]:[...t.values()]}:ye(t)&&!Y(t)&&!No(t)?String(t):t,ue={},Rt=[],Ue=()=>{},wl=()=>!1,Cl=/^on[^a-z]/,Jt=e=>Cl.test(e),ar=e=>e.startsWith("onUpdate:"),Ce=Object.assign,cr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},xl=Object.prototype.hasOwnProperty,re=(e,t)=>xl.call(e,t),Y=Array.isArray,Lt=e=>Sn(e)==="[object Map]",Oo=e=>Sn(e)==="[object Set]",X=e=>typeof e=="function",he=e=>typeof e=="string",ur=e=>typeof e=="symbol",ye=e=>e!==null&&typeof e=="object",Io=e=>ye(e)&&X(e.then)&&X(e.catch),Mo=Object.prototype.toString,Sn=e=>Mo.call(e),Al=e=>Sn(e).slice(8,-1),No=e=>Sn(e)==="[object Object]",fr=e=>he(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Qt=lr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Tn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Sl=/-(\w)/g,We=Tn(e=>e.replace(Sl,(t,n)=>n?n.toUpperCase():"")),Tl=/\B([A-Z])/g,kt=Tn(e=>e.replace(Tl,"-$1").toLowerCase()),Pn=Tn(e=>e.charAt(0).toUpperCase()+e.slice(1)),dr=Tn(e=>e?`on${Pn(e)}`:""),Zt=(e,t)=>!Object.is(e,t),hr=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Ho=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Do;const Pl=()=>Do||(Do=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});let Ge;const Ln=[];class Rl{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&Ge&&(this.parent=Ge,this.index=(Ge.scopes||(Ge.scopes=[])).push(this)-1)}run(t){if(this.active)try{return this.on(),t()}finally{this.off()}}on(){this.active&&(Ln.push(this),Ge=this)}off(){this.active&&(Ln.pop(),Ge=Ln[Ln.length-1])}stop(t){if(this.active){if(this.effects.forEach(n=>n.stop()),this.cleanups.forEach(n=>n()),this.scopes&&this.scopes.forEach(n=>n.stop(!0)),this.parent&&!t){const n=this.parent.scopes.pop();n&&n!==this&&(this.parent.scopes[this.index]=n,n.index=this.index)}this.active=!1}}}function Ll(e,t){t=t||Ge,t&&t.active&&t.effects.push(e)}function kl(){return Ge}function Ol(e){Ge&&Ge.cleanups.push(e)}const pr=e=>{const t=new Set(e);return t.w=0,t.n=0,t},Fo=e=>(e.w&rt)>0,jo=e=>(e.n&rt)>0,Il=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r0?en[t-1]:void 0}}stop(){this.active&&($o(this),this.onStop&&this.onStop(),this.active=!1)}}function $o(e){const{deps:t}=e;if(t.length){for(let n=0;n{(c==="length"||c>=r)&&l.push(a)});else switch(n!==void 0&&l.push(i.get(n)),t){case"add":Y(e)?fr(n)&&l.push(i.get("length")):(l.push(i.get(pt)),Lt(e)&&l.push(i.get(vr)));break;case"delete":Y(e)||(l.push(i.get(pt)),Lt(e)&&l.push(i.get(vr)));break;case"set":Lt(e)&&l.push(i.get(pt));break}if(l.length===1)l[0]&&_r(l[0]);else{const a=[];for(const c of l)c&&a.push(...c);_r(pr(a))}}function _r(e,t){for(const n of Y(e)?e:[...e])(n!==ht||n.allowRecurse)&&(n.scheduler?n.scheduler():n.run())}const Hl=lr("__proto__,__v_isRef,__isVue"),Uo=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(ur)),Dl=Er(),Fl=Er(!1,!0),jl=Er(!0),Ko=$l();function $l(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=oe(this);for(let s=0,i=this.length;s{e[t]=function(...n){It();const r=oe(this)[t].apply(this,n);return mt(),r}}),e}function Er(e=!1,t=!1){return function(r,o,s){if(o==="__v_isReactive")return!e;if(o==="__v_isReadonly")return e;if(o==="__v_raw"&&s===(e?t?na:Xo:t?Zo:Qo).get(r))return r;const i=Y(r);if(!e&&i&&re(Ko,o))return Reflect.get(Ko,o,s);const l=Reflect.get(r,o,s);return(ur(o)?Uo.has(o):Hl(o))||(e||Oe(r,"get",o),t)?l:xe(l)?!i||!fr(o)?l.value:l:ye(l)?e?xr(l):tn(l):l}}const zl=Vo(),Bl=Vo(!0);function Vo(e=!1){return function(n,r,o,s){let i=n[r];if(!e&&!Sr(o)&&(o=oe(o),i=oe(i),!Y(n)&&xe(i)&&!xe(o)))return i.value=o,!0;const l=Y(n)&&fr(r)?Number(r)e,kn=e=>Reflect.getPrototypeOf(e);function On(e,t,n=!1,r=!1){e=e.__v_raw;const o=oe(e),s=oe(t);t!==s&&!n&&Oe(o,"get",t),!n&&Oe(o,"get",s);const{has:i}=kn(o),l=r?wr:n?Tr:nn;if(i.call(o,t))return l(e.get(t));if(i.call(o,s))return l(e.get(s));e!==o&&e.get(t)}function In(e,t=!1){const n=this.__v_raw,r=oe(n),o=oe(e);return e!==o&&!t&&Oe(r,"has",e),!t&&Oe(r,"has",o),e===o?n.has(e):n.has(e)||n.has(o)}function Mn(e,t=!1){return e=e.__v_raw,!t&&Oe(oe(e),"iterate",pt),Reflect.get(e,"size",e)}function Wo(e){e=oe(e);const t=oe(this);return kn(t).has.call(t,e)||(t.add(e),Qe(t,"add",e,e)),this}function Go(e,t){t=oe(t);const n=oe(this),{has:r,get:o}=kn(n);let s=r.call(n,e);s||(e=oe(e),s=r.call(n,e));const i=o.call(n,e);return n.set(e,t),s?Zt(t,i)&&Qe(n,"set",e,t):Qe(n,"add",e,t),this}function Yo(e){const t=oe(this),{has:n,get:r}=kn(t);let o=n.call(t,e);o||(e=oe(e),o=n.call(t,e)),r&&r.call(t,e);const s=t.delete(e);return o&&Qe(t,"delete",e,void 0),s}function Jo(){const e=oe(this),t=e.size!==0,n=e.clear();return t&&Qe(e,"clear",void 0,void 0),n}function Nn(e,t){return function(r,o){const s=this,i=s.__v_raw,l=oe(i),a=t?wr:e?Tr:nn;return!e&&Oe(l,"iterate",pt),i.forEach((c,f)=>r.call(o,a(c),a(f),s))}}function Hn(e,t,n){return function(...r){const o=this.__v_raw,s=oe(o),i=Lt(s),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,c=o[e](...r),f=n?wr:t?Tr:nn;return!t&&Oe(s,"iterate",a?vr:pt),{next(){const{value:m,done:d}=c.next();return d?{value:m,done:d}:{value:l?[f(m[0]),f(m[1])]:f(m),done:d}},[Symbol.iterator](){return this}}}}function ot(e){return function(...t){return e==="delete"?!1:this}}function Gl(){const e={get(s){return On(this,s)},get size(){return Mn(this)},has:In,add:Wo,set:Go,delete:Yo,clear:Jo,forEach:Nn(!1,!1)},t={get(s){return On(this,s,!1,!0)},get size(){return Mn(this)},has:In,add:Wo,set:Go,delete:Yo,clear:Jo,forEach:Nn(!1,!0)},n={get(s){return On(this,s,!0)},get size(){return Mn(this,!0)},has(s){return In.call(this,s,!0)},add:ot("add"),set:ot("set"),delete:ot("delete"),clear:ot("clear"),forEach:Nn(!0,!1)},r={get(s){return On(this,s,!0,!0)},get size(){return Mn(this,!0)},has(s){return In.call(this,s,!0)},add:ot("add"),set:ot("set"),delete:ot("delete"),clear:ot("clear"),forEach:Nn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(s=>{e[s]=Hn(s,!1,!1),n[s]=Hn(s,!0,!1),t[s]=Hn(s,!1,!0),r[s]=Hn(s,!0,!0)}),[e,n,t,r]}const[Yl,Jl,Ql,Zl]=Gl();function Cr(e,t){const n=t?e?Zl:Ql:e?Jl:Yl;return(r,o,s)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(re(n,o)&&o in r?n:r,o,s)}const Xl={get:Cr(!1,!1)},ea={get:Cr(!1,!0)},ta={get:Cr(!0,!1)},Qo=new WeakMap,Zo=new WeakMap,Xo=new WeakMap,na=new WeakMap;function ra(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function oa(e){return e.__v_skip||!Object.isExtensible(e)?0:ra(Al(e))}function tn(e){return e&&e.__v_isReadonly?e:Ar(e,!1,qo,Xl,Qo)}function sa(e){return Ar(e,!1,Wl,ea,Zo)}function xr(e){return Ar(e,!0,ql,ta,Xo)}function Ar(e,t,n,r,o){if(!ye(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const s=o.get(e);if(s)return s;const i=oa(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return o.set(e,l),l}function Mt(e){return Sr(e)?Mt(e.__v_raw):!!(e&&e.__v_isReactive)}function Sr(e){return!!(e&&e.__v_isReadonly)}function es(e){return Mt(e)||Sr(e)}function oe(e){const t=e&&e.__v_raw;return t?oe(t):e}function ts(e){return Rn(e,"__v_skip",!0),e}const nn=e=>ye(e)?tn(e):e,Tr=e=>ye(e)?xr(e):e;function ns(e){zo()&&(e=oe(e),e.dep||(e.dep=pr()),Bo(e.dep))}function rs(e,t){e=oe(e),e.dep&&_r(e.dep)}function xe(e){return Boolean(e&&e.__v_isRef===!0)}function be(e){return ss(e,!1)}function os(e){return ss(e,!0)}function ss(e,t){return xe(e)?e:new ia(e,t)}class ia{constructor(t,n){this._shallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:oe(t),this._value=n?t:nn(t)}get value(){return ns(this),this._value}set value(t){t=this._shallow?t:oe(t),Zt(t,this._rawValue)&&(this._rawValue=t,this._value=this._shallow?t:nn(t),rs(this))}}function Ze(e){return xe(e)?e.value:e}const la={get:(e,t,n)=>Ze(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return xe(o)&&!xe(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function is(e){return Mt(e)?e:new Proxy(e,la)}function aa(e){const t=Y(e)?new Array(e.length):{};for(const n in e)t[n]=ua(e,n);return t}class ca{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function ua(e,t,n){const r=e[t];return xe(r)?r:new ca(e,t,n)}class fa{constructor(t,n,r){this._setter=n,this.dep=void 0,this._dirty=!0,this.__v_isRef=!0,this.effect=new yr(t,()=>{this._dirty||(this._dirty=!0,rs(this))}),this.__v_isReadonly=r}get value(){const t=oe(this);return ns(t),t._dirty&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function pe(e,t){let n,r;const o=X(e);return o?(n=e,r=Ue):(n=e.get,r=e.set),new fa(n,r,o||!r)}Promise.resolve();function da(e,t,...n){const r=e.vnode.props||ue;let o=n;const s=t.startsWith("update:"),i=s&&t.slice(7);if(i&&i in r){const f=`${i==="modelValue"?"model":i}Modifiers`,{number:m,trim:d}=r[f]||ue;d?o=n.map(_=>_.trim()):m&&(o=n.map(Ho))}let l,a=r[l=dr(t)]||r[l=dr(We(t))];!a&&s&&(a=r[l=dr(kt(t))]),a&&ze(a,e,6,o);const c=r[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,ze(c,e,6,o)}}function ls(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const s=e.emits;let i={},l=!1;if(!X(e)){const a=c=>{const f=ls(c,t,!0);f&&(l=!0,Ce(i,f))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!s&&!l?(r.set(e,null),null):(Y(s)?s.forEach(a=>i[a]=null):Ce(i,s),r.set(e,i),i)}function Pr(e,t){return!e||!Jt(t)?!1:(t=t.slice(2).replace(/Once$/,""),re(e,t[0].toLowerCase()+t.slice(1))||re(e,kt(t))||re(e,t))}let Ie=null,as=null;function Dn(e){const t=Ie;return Ie=e,as=e&&e.type.__scopeId||null,t}function cs(e,t=Ie,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&Ms(-1);const s=Dn(t),i=e(...o);return Dn(s),r._d&&Ms(1),i};return r._n=!0,r._c=!0,r._d=!0,r}function Rr(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:s,propsOptions:[i],slots:l,attrs:a,emit:c,render:f,renderCache:m,data:d,setupState:_,ctx:h,inheritAttrs:b}=e;let g,v;const w=Dn(e);try{if(n.shapeFlag&4){const R=o||r;g=Ke(f.call(R,R,m,s,_,d,h)),v=a}else{const R=t;g=Ke(R.length>1?R(s,{attrs:a,slots:l,emit:c}):R(s,null)),v=t.props?a:ha(a)}}catch(R){ln.length=0,un(R,e,1),g=ve(je)}let A=g;if(v&&b!==!1){const R=Object.keys(v),{shapeFlag:D}=A;R.length&&D&(1|6)&&(i&&R.some(ar)&&(v=pa(v,i)),A=Nt(A,v))}return n.dirs&&(A.dirs=A.dirs?A.dirs.concat(n.dirs):n.dirs),n.transition&&(A.transition=n.transition),g=A,Dn(w),g}const ha=e=>{let t;for(const n in e)(n==="class"||n==="style"||Jt(n))&&((t||(t={}))[n]=e[n]);return t},pa=(e,t)=>{const n={};for(const r in e)(!ar(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function ma(e,t,n){const{props:r,children:o,component:s}=e,{props:i,children:l,patchFlag:a}=t,c=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return r?us(r,i,c):!!i;if(a&8){const f=t.dynamicProps;for(let m=0;me.__isSuspense;function fs(e,t){t&&t.pendingBranch?Y(e)?t.effects.push(...e):t.effects.push(e):pc(e)}function gt(e,t){if(Ee){let n=Ee.provides;const r=Ee.parent&&Ee.parent.provides;r===n&&(n=Ee.provides=Object.create(r)),n[e]=t}}function we(e,t,n=!1){const r=Ee||Ie;if(r){const o=r.parent==null?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return n&&X(t)?t.call(r.proxy):t}}function ya(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Ye(()=>{e.isMounted=!0}),$n(()=>{e.isUnmounting=!0}),e}const De=[Function,Array],ba={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:De,onEnter:De,onAfterEnter:De,onEnterCancelled:De,onBeforeLeave:De,onLeave:De,onAfterLeave:De,onLeaveCancelled:De,onBeforeAppear:De,onAppear:De,onAfterAppear:De,onAppearCancelled:De},setup(e,{slots:t}){const n=$s(),r=ya();let o;return()=>{const s=t.default&&ms(t.default(),!0);if(!s||!s.length)return;const i=oe(e),{mode:l}=i,a=s[0];if(r.isLeaving)return kr(a);const c=ps(a);if(!c)return kr(a);const f=Lr(c,i,r,n);Or(c,f);const m=n.subTree,d=m&&ps(m);let _=!1;const{getTransitionKey:h}=c.type;if(h){const b=h();o===void 0?o=b:b!==o&&(o=b,_=!0)}if(d&&d.type!==je&&(!_t(c,d)||_)){const b=Lr(d,i,r,n);if(Or(d,b),l==="out-in")return r.isLeaving=!0,b.afterLeave=()=>{r.isLeaving=!1,n.update()},kr(a);l==="in-out"&&c.type!==je&&(b.delayLeave=(g,v,w)=>{const A=hs(r,d);A[String(d.key)]=d,g._leaveCb=()=>{v(),g._leaveCb=void 0,delete f.delayedLeave},f.delayedLeave=w})}return a}}},ds=ba;function hs(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function Lr(e,t,n,r){const{appear:o,mode:s,persisted:i=!1,onBeforeEnter:l,onEnter:a,onAfterEnter:c,onEnterCancelled:f,onBeforeLeave:m,onLeave:d,onAfterLeave:_,onLeaveCancelled:h,onBeforeAppear:b,onAppear:g,onAfterAppear:v,onAppearCancelled:w}=t,A=String(e.key),R=hs(n,e),D=(S,C)=>{S&&ze(S,r,9,C)},j={mode:s,persisted:i,beforeEnter(S){let C=l;if(!n.isMounted)if(o)C=b||l;else return;S._leaveCb&&S._leaveCb(!0);const W=R[A];W&&_t(e,W)&&W.el._leaveCb&&W.el._leaveCb(),D(C,[S])},enter(S){let C=a,W=c,U=f;if(!n.isMounted)if(o)C=g||a,W=v||c,U=w||f;else return;let G=!1;const E=S._enterCb=N=>{G||(G=!0,N?D(U,[S]):D(W,[S]),j.delayedLeave&&j.delayedLeave(),S._enterCb=void 0)};C?(C(S,E),C.length<=1&&E()):E()},leave(S,C){const W=String(e.key);if(S._enterCb&&S._enterCb(!0),n.isUnmounting)return C();D(m,[S]);let U=!1;const G=S._leaveCb=E=>{U||(U=!0,C(),E?D(h,[S]):D(_,[S]),S._leaveCb=void 0,R[W]===e&&delete R[W])};R[W]=e,d?(d(S,G),d.length<=1&&G()):G()},clone(S){return Lr(S,t,n,r)}};return j}function kr(e){if(rn(e))return e=Nt(e),e.children=null,e}function ps(e){return rn(e)?e.children?e.children[0]:void 0:e}function Or(e,t){e.shapeFlag&6&&e.component?Or(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ms(e,t=!1){let n=[],r=0;for(let o=0;o1)for(let o=0;o!!e.type.__asyncLoader;function Me(e){X(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:s,suspensible:i=!0,onError:l}=e;let a=null,c,f=0;const m=()=>(f++,a=null,d()),d=()=>{let _;return a||(_=a=t().catch(h=>{if(h=h instanceof Error?h:new Error(String(h)),l)return new Promise((b,g)=>{l(h,()=>b(m()),()=>g(h),f+1)});throw h}).then(h=>_!==a&&a?a:(h&&(h.__esModule||h[Symbol.toStringTag]==="Module")&&(h=h.default),c=h,h)))};return Fe({name:"AsyncComponentWrapper",__asyncLoader:d,get __asyncResolved(){return c},setup(){const _=Ee;if(c)return()=>Ir(c,_);const h=w=>{a=null,un(w,_,13,!r)};if(i&&_.suspense||cn)return d().then(w=>()=>Ir(w,_)).catch(w=>(h(w),()=>r?ve(r,{error:w}):null));const b=be(!1),g=be(),v=be(!!o);return o&&setTimeout(()=>{v.value=!1},o),s!=null&&setTimeout(()=>{if(!b.value&&!g.value){const w=new Error(`Async component timed out after ${s}ms.`);h(w),g.value=w}},s),d().then(()=>{b.value=!0,_.parent&&rn(_.parent.vnode)&&Jr(_.parent.update)}).catch(w=>{h(w),g.value=w}),()=>{if(b.value&&c)return Ir(c,_);if(g.value&&r)return ve(r,{error:g.value});if(n&&!v.value)return ve(n)}}})}function Ir(e,{vnode:{ref:t,props:n,children:r}}){const o=ve(e,n,r);return o.ref=t,o}const rn=e=>e.type.__isKeepAlive;function _a(e,t){gs(e,"a",t)}function Ea(e,t){gs(e,"da",t)}function gs(e,t,n=Ee){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(jn(t,r,n),n){let o=n.parent;for(;o&&o.parent;)rn(o.parent.vnode)&&wa(r,t,n,o),o=o.parent}}function wa(e,t,n,r){const o=jn(t,e,r,!0);Mr(()=>{cr(r[t],o)},n)}function jn(e,t,n=Ee,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;It(),Ht(n);const l=ze(t,n,e,i);return Et(),mt(),l});return r?o.unshift(s):o.push(s),s}}const Xe=e=>(t,n=Ee)=>(!cn||e==="sp")&&jn(e,t,n),Ca=Xe("bm"),Ye=Xe("m"),xa=Xe("bu"),Aa=Xe("u"),$n=Xe("bum"),Mr=Xe("um"),Sa=Xe("sp"),Ta=Xe("rtg"),Pa=Xe("rtc");function Ra(e,t=Ee){jn("ec",e,t)}let Nr=!0;function La(e){const t=bs(e),n=e.proxy,r=e.ctx;Nr=!1,t.beforeCreate&&vs(t.beforeCreate,e,"bc");const{data:o,computed:s,methods:i,watch:l,provide:a,inject:c,created:f,beforeMount:m,mounted:d,beforeUpdate:_,updated:h,activated:b,deactivated:g,beforeDestroy:v,beforeUnmount:w,destroyed:A,unmounted:R,render:D,renderTracked:j,renderTriggered:S,errorCaptured:C,serverPrefetch:W,expose:U,inheritAttrs:G,components:E,directives:N,filters:q}=t;if(c&&ka(c,r,null,e.appContext.config.unwrapInjectedRef),i)for(const Z in i){const te=i[Z];X(te)&&(r[Z]=te.bind(n))}if(o){const Z=o.call(n,n);ye(Z)&&(e.data=tn(Z))}if(Nr=!0,s)for(const Z in s){const te=s[Z],_e=X(te)?te.bind(n,n):X(te.get)?te.get.bind(n,n):Ue,Ae=!X(te)&&X(te.set)?te.set.bind(n):Ue,Le=pe({get:_e,set:Ae});Object.defineProperty(r,Z,{enumerable:!0,configurable:!0,get:()=>Le.value,set:He=>Le.value=He})}if(l)for(const Z in l)ys(l[Z],r,n,Z);if(a){const Z=X(a)?a.call(n):a;Reflect.ownKeys(Z).forEach(te=>{gt(te,Z[te])})}f&&vs(f,e,"c");function B(Z,te){Y(te)?te.forEach(_e=>Z(_e.bind(n))):te&&Z(te.bind(n))}if(B(Ca,m),B(Ye,d),B(xa,_),B(Aa,h),B(_a,b),B(Ea,g),B(Ra,C),B(Pa,j),B(Ta,S),B($n,w),B(Mr,R),B(Sa,W),Y(U))if(U.length){const Z=e.exposed||(e.exposed={});U.forEach(te=>{Object.defineProperty(Z,te,{get:()=>n[te],set:_e=>n[te]=_e})})}else e.exposed||(e.exposed={});D&&e.render===Ue&&(e.render=D),G!=null&&(e.inheritAttrs=G),E&&(e.components=E),N&&(e.directives=N)}function ka(e,t,n=Ue,r=!1){Y(e)&&(e=Hr(e));for(const o in e){const s=e[o];let i;ye(s)?"default"in s?i=we(s.from||o,s.default,!0):i=we(s.from||o):i=we(s),xe(i)&&r?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):t[o]=i}}function vs(e,t,n){ze(Y(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function ys(e,t,n,r){const o=r.includes(".")?Qs(n,r):()=>n[r];if(he(e)){const s=t[e];X(s)&&tt(o,s)}else if(X(e))tt(o,e.bind(n));else if(ye(e))if(Y(e))e.forEach(s=>ys(s,t,n,r));else{const s=X(e.handler)?e.handler.bind(n):t[e.handler];X(s)&&tt(o,s,e)}}function bs(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let a;return l?a=l:!o.length&&!n&&!r?a=t:(a={},o.length&&o.forEach(c=>zn(a,c,i,!0)),zn(a,t,i)),s.set(t,a),a}function zn(e,t,n,r=!1){const{mixins:o,extends:s}=t;s&&zn(e,s,n,!0),o&&o.forEach(i=>zn(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=Oa[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const Oa={data:_s,props:vt,emits:vt,methods:vt,computed:vt,beforeCreate:Se,created:Se,beforeMount:Se,mounted:Se,beforeUpdate:Se,updated:Se,beforeDestroy:Se,beforeUnmount:Se,destroyed:Se,unmounted:Se,activated:Se,deactivated:Se,errorCaptured:Se,serverPrefetch:Se,components:vt,directives:vt,watch:Ma,provide:_s,inject:Ia};function _s(e,t){return t?e?function(){return Ce(X(e)?e.call(this,this):e,X(t)?t.call(this,this):t)}:t:e}function Ia(e,t){return vt(Hr(e),Hr(t))}function Hr(e){if(Y(e)){const t={};for(let n=0;n0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let m=0;m{a=!0;const[d,_]=ws(m,t,!0);Ce(i,d),_&&l.push(..._)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!s&&!a)return r.set(e,Rt),Rt;if(Y(s))for(let f=0;f-1,_[1]=b<0||h-1||re(_,"default"))&&l.push(m)}}}const c=[i,l];return r.set(e,c),c}function Cs(e){return e[0]!=="$"}function xs(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function As(e,t){return xs(e)===xs(t)}function Ss(e,t){return Y(t)?t.findIndex(n=>As(n,e)):X(t)&&As(t,e)?0:-1}const Ts=e=>e[0]==="_"||e==="$stable",Fr=e=>Y(e)?e.map(Ke):[Ke(e)],Da=(e,t,n)=>{const r=cs((...o)=>Fr(t(...o)),n);return r._c=!1,r},Ps=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Ts(o))continue;const s=e[o];if(X(s))t[o]=Da(o,s,r);else if(s!=null){const i=Fr(s);t[o]=()=>i}}},Rs=(e,t)=>{const n=Fr(t);e.slots.default=()=>n},Fa=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=oe(t),Rn(t,"_",n)):Ps(t,e.slots={})}else e.slots={},t&&Rs(e,t);Rn(e.slots,qn,1)},ja=(e,t,n)=>{const{vnode:r,slots:o}=e;let s=!0,i=ue;if(r.shapeFlag&32){const l=t._;l?n&&l===1?s=!1:(Ce(o,t),!n&&l===1&&delete o._):(s=!t.$stable,Ps(t,o)),i=t}else t&&(Rs(e,t),i={default:1});if(s)for(const l in o)!Ts(l)&&!(l in i)&&delete o[l]};function ph(e,t){const n=Ie;if(n===null)return e;const r=n.proxy,o=e.dirs||(e.dirs=[]);for(let s=0;sBn(d,t&&(Y(t)?t[_]:t),n,r,o));return}if(Fn(r)&&!o)return;const s=r.shapeFlag&4?Vr(r.component)||r.component.proxy:r.el,i=o?null:s,{i:l,r:a}=e,c=t&&t.r,f=l.refs===ue?l.refs={}:l.refs,m=l.setupState;if(c!=null&&c!==a&&(he(c)?(f[c]=null,re(m,c)&&(m[c]=null)):xe(c)&&(c.value=null)),X(a))lt(a,l,12,[i,f]);else{const d=he(a),_=xe(a);if(d||_){const h=()=>{if(e.f){const b=d?f[a]:a.value;o?Y(b)&&cr(b,s):Y(b)?b.includes(s)||b.push(s):d?f[a]=[s]:(a.value=[s],e.k&&(f[e.k]=a.value))}else d?(f[a]=i,re(m,a)&&(m[a]=i)):xe(a)&&(a.value=i,e.k&&(f[e.k]=i))};i?(h.id=-1,Pe(h,n)):h()}}}let st=!1;const Un=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",jr=e=>e.nodeType===8;function Ba(e){const{mt:t,p:n,o:{patchProp:r,nextSibling:o,parentNode:s,remove:i,insert:l,createComment:a}}=e,c=(g,v)=>{if(!v.hasChildNodes()){n(null,g,v),Jn();return}st=!1,f(v.firstChild,g,null,null,null),Jn(),st&&console.error("Hydration completed but contains mismatches.")},f=(g,v,w,A,R,D=!1)=>{const j=jr(g)&&g.data==="[",S=()=>h(g,v,w,A,R,j),{type:C,ref:W,shapeFlag:U}=v,G=g.nodeType;v.el=g;let E=null;switch(C){case on:G!==3?E=S():(g.data!==v.children&&(st=!0,g.data=v.children),E=o(g));break;case je:G!==8||j?E=S():E=o(g);break;case sn:if(G!==1)E=S();else{E=g;const N=!v.children.length;for(let q=0;q{D=D||!!v.dynamicChildren;const{type:j,props:S,patchFlag:C,shapeFlag:W,dirs:U}=v,G=j==="input"&&U||j==="option";if(G||C!==-1){if(U&&Je(v,null,w,"created"),S)if(G||!D||C&(16|32))for(const N in S)(G&&N.endsWith("value")||Jt(N)&&!Qt(N))&&r(g,N,null,S[N],!1,void 0,w);else S.onClick&&r(g,"onClick",null,S.onClick,!1,void 0,w);let E;if((E=S&&S.onVnodeBeforeMount)&&$e(E,w,v),U&&Je(v,null,w,"beforeMount"),((E=S&&S.onVnodeMounted)||U)&&fs(()=>{E&&$e(E,w,v),U&&Je(v,null,w,"mounted")},A),W&16&&!(S&&(S.innerHTML||S.textContent))){let N=d(g.firstChild,v,g,w,A,R,D);for(;N;){st=!0;const q=N;N=N.nextSibling,i(q)}}else W&8&&g.textContent!==v.children&&(st=!0,g.textContent=v.children)}return g.nextSibling},d=(g,v,w,A,R,D,j)=>{j=j||!!v.dynamicChildren;const S=v.children,C=S.length;for(let W=0;W{const{slotScopeIds:j}=v;j&&(R=R?R.concat(j):j);const S=s(g),C=d(o(g),v,S,w,A,R,D);return C&&jr(C)&&C.data==="]"?o(v.anchor=C):(st=!0,l(v.anchor=a("]"),S,C),C)},h=(g,v,w,A,R,D)=>{if(st=!0,v.el=null,D){const C=b(g);for(;;){const W=o(g);if(W&&W!==C)i(W);else break}}const j=o(g),S=s(g);return i(g),n(null,v,S,j,w,A,Un(S),R),j},b=g=>{let v=0;for(;g;)if(g=o(g),g&&jr(g)&&(g.data==="["&&v++,g.data==="]")){if(v===0)return o(g);v--}return g};return[c,f]}const Pe=fs;function Ua(e){return Ka(e,Ba)}function Ka(e,t){const n=Pl();n.__VUE__=!0;const{insert:r,remove:o,patchProp:s,createElement:i,createText:l,createComment:a,setText:c,setElementText:f,parentNode:m,nextSibling:d,setScopeId:_=Ue,cloneNode:h,insertStaticContent:b}=e,g=(u,p,y,P=null,T=null,k=null,H=!1,O=null,M=!!p.dynamicChildren)=>{if(u===p)return;u&&!_t(u,p)&&(P=$(u),Te(u,T,k,!0),u=null),p.patchFlag===-2&&(M=!1,p.dynamicChildren=null);const{type:L,ref:K,shapeFlag:z}=p;switch(L){case on:v(u,p,y,P);break;case je:w(u,p,y,P);break;case sn:u==null&&A(p,y,P,H);break;case Re:N(u,p,y,P,T,k,H,O,M);break;default:z&1?j(u,p,y,P,T,k,H,O,M):z&6?q(u,p,y,P,T,k,H,O,M):(z&64||z&128)&&L.process(u,p,y,P,T,k,H,O,M,le)}K!=null&&T&&Bn(K,u&&u.ref,k,p||u,!p)},v=(u,p,y,P)=>{if(u==null)r(p.el=l(p.children),y,P);else{const T=p.el=u.el;p.children!==u.children&&c(T,p.children)}},w=(u,p,y,P)=>{u==null?r(p.el=a(p.children||""),y,P):p.el=u.el},A=(u,p,y,P)=>{[u.el,u.anchor]=b(u.children,p,y,P)},R=({el:u,anchor:p},y,P)=>{let T;for(;u&&u!==p;)T=d(u),r(u,y,P),u=T;r(p,y,P)},D=({el:u,anchor:p})=>{let y;for(;u&&u!==p;)y=d(u),o(u),u=y;o(p)},j=(u,p,y,P,T,k,H,O,M)=>{H=H||p.type==="svg",u==null?S(p,y,P,T,k,H,O,M):U(u,p,T,k,H,O,M)},S=(u,p,y,P,T,k,H,O)=>{let M,L;const{type:K,props:z,shapeFlag:V,transition:J,patchFlag:ne,dirs:me}=u;if(u.el&&h!==void 0&&ne===-1)M=u.el=h(u.el);else{if(M=u.el=i(u.type,k,z&&z.is,z),V&8?f(M,u.children):V&16&&W(u.children,M,null,P,T,k&&K!=="foreignObject",H,O),me&&Je(u,null,P,"created"),z){for(const de in z)de!=="value"&&!Qt(de)&&s(M,de,null,z[de],k,u.children,P,T,I);"value"in z&&s(M,"value",null,z.value),(L=z.onVnodeBeforeMount)&&$e(L,P,u)}C(M,u,u.scopeId,H,P)}me&&Je(u,null,P,"beforeMount");const ce=(!T||T&&!T.pendingBranch)&&J&&!J.persisted;ce&&J.beforeEnter(M),r(M,p,y),((L=z&&z.onVnodeMounted)||ce||me)&&Pe(()=>{L&&$e(L,P,u),ce&&J.enter(M),me&&Je(u,null,P,"mounted")},T)},C=(u,p,y,P,T)=>{if(y&&_(u,y),P)for(let k=0;k{for(let L=M;L{const O=p.el=u.el;let{patchFlag:M,dynamicChildren:L,dirs:K}=p;M|=u.patchFlag&16;const z=u.props||ue,V=p.props||ue;let J;y&&yt(y,!1),(J=V.onVnodeBeforeUpdate)&&$e(J,y,p,u),K&&Je(p,u,y,"beforeUpdate"),y&&yt(y,!0);const ne=T&&p.type!=="foreignObject";if(L?G(u.dynamicChildren,L,O,y,P,ne,k):H||_e(u,p,O,null,y,P,ne,k,!1),M>0){if(M&16)E(O,p,z,V,y,P,T);else if(M&2&&z.class!==V.class&&s(O,"class",null,V.class,T),M&4&&s(O,"style",z.style,V.style,T),M&8){const me=p.dynamicProps;for(let ce=0;ce{J&&$e(J,y,p,u),K&&Je(p,u,y,"updated")},P)},G=(u,p,y,P,T,k,H)=>{for(let O=0;O{if(y!==P){for(const O in P){if(Qt(O))continue;const M=P[O],L=y[O];M!==L&&O!=="value"&&s(u,O,L,M,H,p.children,T,k,I)}if(y!==ue)for(const O in y)!Qt(O)&&!(O in P)&&s(u,O,y[O],null,H,p.children,T,k,I);"value"in P&&s(u,"value",y.value,P.value)}},N=(u,p,y,P,T,k,H,O,M)=>{const L=p.el=u?u.el:l(""),K=p.anchor=u?u.anchor:l("");let{patchFlag:z,dynamicChildren:V,slotScopeIds:J}=p;J&&(O=O?O.concat(J):J),u==null?(r(L,y,P),r(K,y,P),W(p.children,y,K,T,k,H,O,M)):z>0&&z&64&&V&&u.dynamicChildren?(G(u.dynamicChildren,V,y,T,k,H,O),(p.key!=null||T&&p===T.subTree)&&ks(u,p,!0)):_e(u,p,y,K,T,k,H,O,M)},q=(u,p,y,P,T,k,H,O,M)=>{p.slotScopeIds=O,u==null?p.shapeFlag&512?T.ctx.activate(p,y,P,H,M):se(p,y,P,T,k,H,M):B(u,p,M)},se=(u,p,y,P,T,k,H)=>{const O=u.component=rc(u,P,T);if(rn(u)&&(O.ctx.renderer=le),oc(O),O.asyncDep){if(T&&T.registerDep(O,Z),!u.el){const M=O.subTree=ve(je);w(null,M,p,y)}return}Z(O,u,p,y,T,k,H)},B=(u,p,y)=>{const P=p.component=u.component;if(ma(u,p,y))if(P.asyncDep&&!P.asyncResolved){te(P,p,y);return}else P.next=p,dc(P.update),P.update();else p.component=u.component,p.el=u.el,P.vnode=p},Z=(u,p,y,P,T,k,H)=>{const O=()=>{if(u.isMounted){let{next:K,bu:z,u:V,parent:J,vnode:ne}=u,me=K,ce;yt(u,!1),K?(K.el=ne.el,te(u,K,H)):K=ne,z&&hr(z),(ce=K.props&&K.props.onVnodeBeforeUpdate)&&$e(ce,J,K,ne),yt(u,!0);const de=Rr(u),Be=u.subTree;u.subTree=de,g(Be,de,m(Be.el),$(Be),u,T,k),K.el=de.el,me===null&&ga(u,de.el),V&&Pe(V,T),(ce=K.props&&K.props.onVnodeUpdated)&&Pe(()=>$e(ce,J,K,ne),T)}else{let K;const{el:z,props:V}=p,{bm:J,m:ne,parent:me}=u,ce=Fn(p);if(yt(u,!1),J&&hr(J),!ce&&(K=V&&V.onVnodeBeforeMount)&&$e(K,me,p),yt(u,!0),z&&Q){const de=()=>{u.subTree=Rr(u),Q(z,u.subTree,u,T,null)};ce?p.type.__asyncLoader().then(()=>!u.isUnmounted&&de()):de()}else{const de=u.subTree=Rr(u);g(null,de,y,P,u,T,k),p.el=de.el}if(ne&&Pe(ne,T),!ce&&(K=V&&V.onVnodeMounted)){const de=p;Pe(()=>$e(K,me,de),T)}p.shapeFlag&256&&u.a&&Pe(u.a,T),u.isMounted=!0,p=y=P=null}},M=u.effect=new yr(O,()=>Jr(u.update),u.scope),L=u.update=M.run.bind(M);L.id=u.uid,yt(u,!0),L()},te=(u,p,y)=>{p.component=u;const P=u.vnode.props;u.vnode=p,u.next=null,Ha(u,p.props,P,y),ja(u,p.children,y),It(),Qr(void 0,u.update),mt()},_e=(u,p,y,P,T,k,H,O,M=!1)=>{const L=u&&u.children,K=u?u.shapeFlag:0,z=p.children,{patchFlag:V,shapeFlag:J}=p;if(V>0){if(V&128){Le(L,z,y,P,T,k,H,O,M);return}else if(V&256){Ae(L,z,y,P,T,k,H,O,M);return}}J&8?(K&16&&I(L,T,k),z!==L&&f(y,z)):K&16?J&16?Le(L,z,y,P,T,k,H,O,M):I(L,T,k,!0):(K&8&&f(y,""),J&16&&W(z,y,P,T,k,H,O,M))},Ae=(u,p,y,P,T,k,H,O,M)=>{u=u||Rt,p=p||Rt;const L=u.length,K=p.length,z=Math.min(L,K);let V;for(V=0;VK?I(u,T,k,!0,!1,z):W(p,y,P,T,k,H,O,M,z)},Le=(u,p,y,P,T,k,H,O,M)=>{let L=0;const K=p.length;let z=u.length-1,V=K-1;for(;L<=z&&L<=V;){const J=u[L],ne=p[L]=M?it(p[L]):Ke(p[L]);if(_t(J,ne))g(J,ne,y,null,T,k,H,O,M);else break;L++}for(;L<=z&&L<=V;){const J=u[z],ne=p[V]=M?it(p[V]):Ke(p[V]);if(_t(J,ne))g(J,ne,y,null,T,k,H,O,M);else break;z--,V--}if(L>z){if(L<=V){const J=V+1,ne=JV)for(;L<=z;)Te(u[L],T,k,!0),L++;else{const J=L,ne=L,me=new Map;for(L=ne;L<=V;L++){const ke=p[L]=M?it(p[L]):Ke(p[L]);ke.key!=null&&me.set(ke.key,L)}let ce,de=0;const Be=V-ne+1;let Pt=!1,xo=0;const Gt=new Array(Be);for(L=0;L=Be){Te(ke,T,k,!0);continue}let Ve;if(ke.key!=null)Ve=me.get(ke.key);else for(ce=ne;ce<=V;ce++)if(Gt[ce-ne]===0&&_t(ke,p[ce])){Ve=ce;break}Ve===void 0?Te(ke,T,k,!0):(Gt[Ve-ne]=L+1,Ve>=xo?xo=Ve:Pt=!0,g(ke,p[Ve],y,null,T,k,H,O,M),de++)}const Ao=Pt?Va(Gt):Rt;for(ce=Ao.length-1,L=Be-1;L>=0;L--){const ke=ne+L,Ve=p[ke],So=ke+1{const{el:k,type:H,transition:O,children:M,shapeFlag:L}=u;if(L&6){He(u.component.subTree,p,y,P);return}if(L&128){u.suspense.move(p,y,P);return}if(L&64){H.move(u,p,y,le);return}if(H===Re){r(k,p,y);for(let z=0;zO.enter(k),T);else{const{leave:z,delayLeave:V,afterLeave:J}=O,ne=()=>r(k,p,y),me=()=>{z(k,()=>{ne(),J&&J()})};V?V(k,ne,me):me()}else r(k,p,y)},Te=(u,p,y,P=!1,T=!1)=>{const{type:k,props:H,ref:O,children:M,dynamicChildren:L,shapeFlag:K,patchFlag:z,dirs:V}=u;if(O!=null&&Bn(O,null,y,u,!0),K&256){p.ctx.deactivate(u);return}const J=K&1&&V,ne=!Fn(u);let me;if(ne&&(me=H&&H.onVnodeBeforeUnmount)&&$e(me,p,u),K&6)F(u.component,y,P);else{if(K&128){u.suspense.unmount(y,P);return}J&&Je(u,null,p,"beforeUnmount"),K&64?u.type.remove(u,p,y,T,le,P):L&&(k!==Re||z>0&&z&64)?I(L,p,y,!1,!0):(k===Re&&z&(128|256)||!T&&K&16)&&I(M,p,y),P&&Wt(u)}(ne&&(me=H&&H.onVnodeUnmounted)||J)&&Pe(()=>{me&&$e(me,p,u),J&&Je(u,null,p,"unmounted")},y)},Wt=u=>{const{type:p,el:y,anchor:P,transition:T}=u;if(p===Re){x(y,P);return}if(p===sn){D(u);return}const k=()=>{o(y),T&&!T.persisted&&T.afterLeave&&T.afterLeave()};if(u.shapeFlag&1&&T&&!T.persisted){const{leave:H,delayLeave:O}=T,M=()=>H(y,k);O?O(u.el,k,M):M()}else k()},x=(u,p)=>{let y;for(;u!==p;)y=d(u),o(u),u=y;o(p)},F=(u,p,y)=>{const{bum:P,scope:T,update:k,subTree:H,um:O}=u;P&&hr(P),T.stop(),k&&(k.active=!1,Te(H,u,p,y)),O&&Pe(O,p),Pe(()=>{u.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},I=(u,p,y,P=!1,T=!1,k=0)=>{for(let H=k;Hu.shapeFlag&6?$(u.component.subTree):u.shapeFlag&128?u.suspense.next():d(u.anchor||u.el),ie=(u,p,y)=>{u==null?p._vnode&&Te(p._vnode,null,null,!0):g(p._vnode||null,u,p,null,null,null,y),Jn(),p._vnode=u},le={p:g,um:Te,m:He,r:Wt,mt:se,mc:W,pc:_e,pbc:G,n:$,o:e};let ee,Q;return t&&([ee,Q]=t(le)),{render:ie,hydrate:ee,createApp:za(ie,ee)}}function yt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function ks(e,t,n=!1){const r=e.children,o=t.children;if(Y(r)&&Y(o))for(let s=0;s>1,e[n[l]]0&&(t[r]=n[s-1]),n[s]=r)}}for(s=n.length,i=n[s-1];s-- >0;)n[s]=i,i=t[i];return n}const qa=e=>e.__isTeleport,Os="components";function Wa(e,t){return Ya(Os,e,!0,t)||e}const Ga=Symbol();function Ya(e,t,n=!0,r=!1){const o=Ie||Ee;if(o){const s=o.type;if(e===Os){const l=ac(s);if(l&&(l===t||l===We(t)||l===Pn(We(t))))return s}const i=Is(o[e]||s[e],t)||Is(o.appContext[e],t);return!i&&r?s:i}}function Is(e,t){return e&&(e[t]||e[We(t)]||e[Pn(We(t))])}const Re=Symbol(void 0),on=Symbol(void 0),je=Symbol(void 0),sn=Symbol(void 0),ln=[];let bt=null;function an(e=!1){ln.push(bt=e?null:[])}function Ja(){ln.pop(),bt=ln[ln.length-1]||null}let Kn=1;function Ms(e){Kn+=e}function Ns(e){return e.dynamicChildren=Kn>0?bt||Rt:null,Ja(),Kn>0&&bt&&bt.push(e),e}function Hs(e,t,n,r,o,s){return Ns(zr(e,t,n,r,o,s,!0))}function $r(e,t,n,r,o){return Ns(ve(e,t,n,r,o,!0))}function Vn(e){return e?e.__v_isVNode===!0:!1}function _t(e,t){return e.type===t.type&&e.key===t.key}const qn="__vInternal",Ds=({key:e})=>e!=null?e:null,Wn=({ref:e,ref_key:t,ref_for:n})=>e!=null?he(e)||xe(e)||X(e)?{i:Ie,r:e,k:t,f:!!n}:e:null;function zr(e,t=null,n=null,r=0,o=null,s=e===Re?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ds(t),ref:t&&Wn(t),scopeId:as,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null};return l?(Ur(a,n),s&128&&e.normalize(a)):n&&(a.shapeFlag|=he(n)?8:16),Kn>0&&!i&&bt&&(a.patchFlag>0||s&6)&&a.patchFlag!==32&&bt.push(a),a}const ve=Qa;function Qa(e,t=null,n=null,r=0,o=null,s=!1){if((!e||e===Ga)&&(e=je),Vn(e)){const l=Nt(e,t,!0);return n&&Ur(l,n),l}if(cc(e)&&(e=e.__vccOpts),t){t=Za(t);let{class:l,style:a}=t;l&&!he(l)&&(t.class=Yt(l)),ye(a)&&(es(a)&&!Y(a)&&(a=Ce({},a)),t.style=An(a))}const i=he(e)?1:va(e)?128:qa(e)?64:ye(e)?4:X(e)?2:0;return zr(e,t,n,r,o,i,s,!0)}function Za(e){return e?es(e)||qn in e?Ce({},e):e:null}function Nt(e,t,n=!1){const{props:r,ref:o,patchFlag:s,children:i}=e,l=t?Xa(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Ds(l),ref:t&&t.ref?n&&o?Y(o)?o.concat(Wn(t)):[o,Wn(t)]:Wn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Re?s===-1?16:s|16:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Nt(e.ssContent),ssFallback:e.ssFallback&&Nt(e.ssFallback),el:e.el,anchor:e.anchor}}function Br(e=" ",t=0){return ve(on,null,e,t)}function mh(e,t){const n=ve(sn,null,e);return n.staticCount=t,n}function gh(e="",t=!1){return t?(an(),$r(je,null,e)):ve(je,null,e)}function Ke(e){return e==null||typeof e=="boolean"?ve(je):Y(e)?ve(Re,null,e.slice()):typeof e=="object"?it(e):ve(on,null,String(e))}function it(e){return e.el===null||e.memo?e:Nt(e)}function Ur(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(Y(t))n=16;else if(typeof t=="object")if(r&(1|64)){const o=t.default;o&&(o._c&&(o._d=!1),Ur(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(qn in t)?t._ctx=Ie:o===3&&Ie&&(Ie.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else X(t)?(t={default:t,_ctx:Ie},n=32):(t=String(t),r&64?(n=16,t=[Br(t)]):n=8);e.children=t,e.shapeFlag|=n}function Xa(...e){const t={};for(let n=0;nt(i,l,void 0,s&&s[l]));else{const i=Object.keys(e);o=new Array(i.length);for(let l=0,a=i.length;lVn(t)?!(t.type===je||t.type===Re&&!js(t.children)):!0)?e:null}const Kr=e=>e?zs(e)?Vr(e)||e.proxy:Kr(e.parent):null,Gn=Ce(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Kr(e.parent),$root:e=>Kr(e.root),$emit:e=>e.emit,$options:e=>bs(e),$forceUpdate:e=>()=>Jr(e.update),$nextTick:e=>Yr.bind(e.proxy),$watch:e=>mc.bind(e)}),ec={get({_:e},t){const{ctx:n,setupState:r,data:o,props:s,accessCache:i,type:l,appContext:a}=e;let c;if(t[0]!=="$"){const _=i[t];if(_!==void 0)switch(_){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(r!==ue&&re(r,t))return i[t]=1,r[t];if(o!==ue&&re(o,t))return i[t]=2,o[t];if((c=e.propsOptions[0])&&re(c,t))return i[t]=3,s[t];if(n!==ue&&re(n,t))return i[t]=4,n[t];Nr&&(i[t]=0)}}const f=Gn[t];let m,d;if(f)return t==="$attrs"&&Oe(e,"get",t),f(e);if((m=l.__cssModules)&&(m=m[t]))return m;if(n!==ue&&re(n,t))return i[t]=4,n[t];if(d=a.config.globalProperties,re(d,t))return d[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;if(o!==ue&&re(o,t))o[t]=n;else if(r!==ue&&re(r,t))r[t]=n;else if(re(e.props,t))return!1;return t[0]==="$"&&t.slice(1)in e?!1:(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:s}},i){let l;return!!n[i]||e!==ue&&re(e,i)||t!==ue&&re(t,i)||(l=s[0])&&re(l,i)||re(r,i)||re(Gn,i)||re(o.config.globalProperties,i)}},tc=Ls();let nc=0;function rc(e,t,n){const r=e.type,o=(t?t.appContext:e.appContext)||tc,s={uid:nc++,vnode:e,type:r,parent:t,appContext:o,root:null,next:null,subTree:null,effect:null,update:null,scope:new Rl(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(o.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:ws(r,o),emitsOptions:ls(r,o),emit:null,emitted:null,propsDefaults:ue,inheritAttrs:r.inheritAttrs,ctx:ue,data:ue,props:ue,attrs:ue,slots:ue,refs:ue,setupState:ue,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return s.ctx={_:s},s.root=t?t.root:s,s.emit=da.bind(null,s),e.ce&&e.ce(s),s}let Ee=null;const $s=()=>Ee||Ie,Ht=e=>{Ee=e,e.scope.on()},Et=()=>{Ee&&Ee.scope.off(),Ee=null};function zs(e){return e.vnode.shapeFlag&4}let cn=!1;function oc(e,t=!1){cn=t;const{props:n,children:r}=e.vnode,o=zs(e);Na(e,n,o,t),Fa(e,r);const s=o?sc(e,t):void 0;return cn=!1,s}function sc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=ts(new Proxy(e.ctx,ec));const{setup:r}=n;if(r){const o=e.setupContext=r.length>1?lc(e):null;Ht(e),It();const s=lt(r,e,0,[e.props,o]);if(mt(),Et(),Io(s)){if(s.then(Et,Et),t)return s.then(i=>{Bs(e,i,t)}).catch(i=>{un(i,e,0)});e.asyncDep=s}else Bs(e,s,t)}else Ks(e,t)}function Bs(e,t,n){X(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ye(t)&&(e.setupState=is(t)),Ks(e,n)}let Us;function Ks(e,t,n){const r=e.type;if(!e.render){if(!t&&Us&&!r.render){const o=r.template;if(o){const{isCustomElement:s,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:a}=r,c=Ce(Ce({isCustomElement:s,delimiters:l},i),a);r.render=Us(o,c)}}e.render=r.render||Ue}Ht(e),It(),La(e),mt(),Et()}function ic(e){return new Proxy(e.attrs,{get(t,n){return Oe(e,"get","$attrs"),t[n]}})}function lc(e){const t=r=>{e.exposed=r||{}};let n;return{get attrs(){return n||(n=ic(e))},slots:e.slots,emit:e.emit,expose:t}}function Vr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(is(ts(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Gn)return Gn[n](e)}}))}function ac(e){return X(e)&&e.displayName||e.name}function cc(e){return X(e)&&"__vccOpts"in e}function lt(e,t,n,r){let o;try{o=r?e(...r):e()}catch(s){un(s,t,n)}return o}function ze(e,t,n,r){if(X(e)){const s=lt(e,t,n,r);return s&&Io(s)&&s.catch(i=>{un(i,t,n)}),s}const o=[];for(let s=0;s>>1;pn(Ne[r])et&&Ne.splice(t,1)}function Ws(e,t,n,r){Y(e)?n.push(...e):(!t||!t.includes(e,e.allowRecurse?r+1:r))&&n.push(e),qs()}function hc(e){Ws(e,dn,fn,Dt)}function pc(e){Ws(e,at,hn,Ft)}function Qr(e,t=null){if(fn.length){for(Gr=t,dn=[...new Set(fn)],fn.length=0,Dt=0;Dtpn(n)-pn(r)),Ft=0;Fte.id==null?1/0:e.id;function Gs(e){qr=!1,Yn=!0,Qr(e),Ne.sort((n,r)=>pn(n)-pn(r));const t=Ue;try{for(et=0;ete.value,c=!!e._shallow):Mt(e)?(a=()=>e,r=!0):Y(e)?(f=!0,c=e.some(Mt),a=()=>e.map(v=>{if(xe(v))return v.value;if(Mt(v))return wt(v);if(X(v))return lt(v,l,2)})):X(e)?t?a=()=>lt(e,l,2):a=()=>{if(!(l&&l.isUnmounted))return m&&m(),ze(e,l,3,[d])}:a=Ue,t&&r){const v=a;a=()=>wt(v())}let m,d=v=>{m=g.onStop=()=>{lt(v,l,4)}};if(cn)return d=Ue,t?n&&ze(t,l,3,[a(),f?[]:void 0,d]):a(),Ue;let _=f?[]:Ys;const h=()=>{if(!!g.active)if(t){const v=g.run();(r||c||(f?v.some((w,A)=>Zt(w,_[A])):Zt(v,_)))&&(m&&m(),ze(t,l,3,[v,_===Ys?void 0:_,d]),_=v)}else g.run()};h.allowRecurse=!!t;let b;o==="sync"?b=h:o==="post"?b=()=>Pe(h,l&&l.suspense):b=()=>{!l||l.isMounted?hc(h):h()};const g=new yr(a,b);return t?n?h():_=g.run():o==="post"?Pe(g.run.bind(g),l&&l.suspense):g.run(),()=>{g.stop(),l&&l.scope&&cr(l.scope.effects,g)}}function mc(e,t,n){const r=this.proxy,o=he(e)?e.includes(".")?Qs(r,e):()=>r[e]:e.bind(r,r);let s;X(t)?s=t:(s=t.handler,n=t);const i=Ee;Ht(this);const l=Js(o,s.bind(r),n);return i?Ht(i):Et(),l}function Qs(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{wt(n,t)});else if(No(e))for(const n in e)wt(e[n],t);return e}function ae(e,t,n){const r=arguments.length;return r===2?ye(t)&&!Y(t)?Vn(t)?ve(e,null,[t]):ve(e,t):ve(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Vn(n)&&(n=[n]),ve(e,t,n))}const gc="3.2.26",vc="http://www.w3.org/2000/svg",jt=typeof document!="undefined"?document:null,Zs=new Map,yc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?jt.createElementNS(vc,e):jt.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>jt.createTextNode(e),createComment:e=>jt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>jt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,r){const o=n?n.previousSibling:t.lastChild;let s=Zs.get(e);if(!s){const i=jt.createElement("template");if(i.innerHTML=r?`${e}`:e,s=i.content,r){const l=s.firstChild;for(;l.firstChild;)s.appendChild(l.firstChild);s.removeChild(l)}Zs.set(e,s)}return t.insertBefore(s.cloneNode(!0),n),[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function bc(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function _c(e,t,n){const r=e.style,o=he(n);if(n&&!o){for(const s in n)Zr(r,s,n[s]);if(t&&!he(t))for(const s in t)n[s]==null&&Zr(r,s,"")}else{const s=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=s)}}const Xs=/\s*!important$/;function Zr(e,t,n){if(Y(n))n.forEach(r=>Zr(e,t,r));else if(t.startsWith("--"))e.setProperty(t,n);else{const r=Ec(e,t);Xs.test(n)?e.setProperty(kt(r),n.replace(Xs,""),"important"):e[r]=n}}const ei=["Webkit","Moz","ms"],Xr={};function Ec(e,t){const n=Xr[t];if(n)return n;let r=We(t);if(r!=="filter"&&r in e)return Xr[t]=r;r=Pn(r);for(let o=0;odocument.createEvent("Event").timeStamp&&(Qn=()=>performance.now());const e=navigator.userAgent.match(/firefox\/(\d+)/i);ni=!!(e&&Number(e[1])<=53)}let eo=0;const xc=Promise.resolve(),Ac=()=>{eo=0},Sc=()=>eo||(xc.then(Ac),eo=Qn());function Tc(e,t,n,r){e.addEventListener(t,n,r)}function Pc(e,t,n,r){e.removeEventListener(t,n,r)}function Rc(e,t,n,r,o=null){const s=e._vei||(e._vei={}),i=s[t];if(r&&i)i.value=r;else{const[l,a]=Lc(t);if(r){const c=s[t]=kc(r,o);Tc(e,l,c,a)}else i&&(Pc(e,l,i,a),s[t]=void 0)}}const ri=/(?:Once|Passive|Capture)$/;function Lc(e){let t;if(ri.test(e)){t={};let n;for(;n=e.match(ri);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[kt(e.slice(2)),t]}function kc(e,t){const n=r=>{const o=r.timeStamp||Qn();(ni||o>=n.attached-1)&&ze(Oc(r,n.value),t,5,[r])};return n.value=e,n.attached=Sc(),n}function Oc(e,t){if(Y(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r(o))}else return t}const oi=/^on[a-z]/,Ic=(e,t,n,r,o=!1,s,i,l,a)=>{t==="class"?bc(e,r,o):t==="style"?_c(e,n,r):Jt(t)?ar(t)||Rc(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Mc(e,t,r,o))?Cc(e,t,r,s,i,l,a):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),wc(e,t,r,o))};function Mc(e,t,n,r){return r?!!(t==="innerHTML"||t==="textContent"||t in e&&oi.test(t)&&X(n)):t==="spellcheck"||t==="draggable"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||oi.test(t)&&he(n)?!1:t in e}const ct="transition",mn="animation",to=(e,{slots:t})=>ae(ds,Nc(e),t);to.displayName="Transition";const si={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};to.props=Ce({},ds.props,si);const Ct=(e,t=[])=>{Y(e)?e.forEach(n=>n(...t)):e&&e(...t)},ii=e=>e?Y(e)?e.some(t=>t.length>1):e.length>1:!1;function Nc(e){const t={};for(const E in e)E in si||(t[E]=e[E]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=s,appearActiveClass:c=i,appearToClass:f=l,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:_=`${n}-leave-to`}=e,h=Hc(o),b=h&&h[0],g=h&&h[1],{onBeforeEnter:v,onEnter:w,onEnterCancelled:A,onLeave:R,onLeaveCancelled:D,onBeforeAppear:j=v,onAppear:S=w,onAppearCancelled:C=A}=t,W=(E,N,q)=>{$t(E,N?f:l),$t(E,N?c:i),q&&q()},U=(E,N)=>{$t(E,_),$t(E,d),N&&N()},G=E=>(N,q)=>{const se=E?S:w,B=()=>W(N,E,q);Ct(se,[N,B]),li(()=>{$t(N,E?a:s),ut(N,E?f:l),ii(se)||ai(N,r,b,B)})};return Ce(t,{onBeforeEnter(E){Ct(v,[E]),ut(E,s),ut(E,i)},onBeforeAppear(E){Ct(j,[E]),ut(E,a),ut(E,c)},onEnter:G(!1),onAppear:G(!0),onLeave(E,N){const q=()=>U(E,N);ut(E,m),jc(),ut(E,d),li(()=>{$t(E,m),ut(E,_),ii(R)||ai(E,r,g,q)}),Ct(R,[E,q])},onEnterCancelled(E){W(E,!1),Ct(A,[E])},onAppearCancelled(E){W(E,!0),Ct(C,[E])},onLeaveCancelled(E){U(E),Ct(D,[E])}})}function Hc(e){if(e==null)return null;if(ye(e))return[no(e.enter),no(e.leave)];{const t=no(e);return[t,t]}}function no(e){return Ho(e)}function ut(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function $t(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function li(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Dc=0;function ai(e,t,n,r){const o=e._endId=++Dc,s=()=>{o===e._endId&&r()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:a}=Fc(e,t);if(!i)return r();const c=i+"end";let f=0;const m=()=>{e.removeEventListener(c,d),s()},d=_=>{_.target===e&&++f>=a&&m()};setTimeout(()=>{f(n[h]||"").split(", "),o=r(ct+"Delay"),s=r(ct+"Duration"),i=ci(o,s),l=r(mn+"Delay"),a=r(mn+"Duration"),c=ci(l,a);let f=null,m=0,d=0;t===ct?i>0&&(f=ct,m=i,d=s.length):t===mn?c>0&&(f=mn,m=c,d=a.length):(m=Math.max(i,c),f=m>0?i>c?ct:mn:null,d=f?f===ct?s.length:a.length:0);const _=f===ct&&/\b(transform|all)(,|$)/.test(n[ct+"Property"]);return{type:f,timeout:m,propCount:d,hasTransform:_}}function ci(e,t){for(;e.lengthui(n)+ui(e[r])))}function ui(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function jc(){return document.body.offsetHeight}const yh={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):gn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),gn(e,!0),r.enter(e)):r.leave(e,()=>{gn(e,!1)}):gn(e,t))},beforeUnmount(e,{value:t}){gn(e,t)}};function gn(e,t){e.style.display=t?e._vod:"none"}const $c=Ce({patchProp:Ic},yc);let ro,fi=!1;function zc(){return ro=fi?ro:Ua($c),fi=!0,ro}const Bc=(...e)=>{const t=zc().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=Uc(r);if(o)return n(o,!0,o instanceof SVGElement)},t};function Uc(e){return he(e)?document.querySelector(e):e}/*! + * vue-router v4.0.12 + * (c) 2021 Eduardo San Martin Morote + * @license MIT + */const di=typeof Symbol=="function"&&typeof Symbol.toStringTag=="symbol",zt=e=>di?Symbol(e):"_vr_"+e,Kc=zt("rvlm"),hi=zt("rvd"),Zn=zt("r"),oo=zt("rl"),so=zt("rvl"),Bt=typeof window!="undefined";function Vc(e){return e.__esModule||di&&e[Symbol.toStringTag]==="Module"}const fe=Object.assign;function io(e,t){const n={};for(const r in t){const o=t[r];n[r]=Array.isArray(o)?o.map(e):e(o)}return n}const vn=()=>{},qc=/\/$/,Wc=e=>e.replace(qc,"");function lo(e,t,n="/"){let r,o={},s="",i="";const l=t.indexOf("?"),a=t.indexOf("#",l>-1?l:0);return l>-1&&(r=t.slice(0,l),s=t.slice(l+1,a>-1?a:t.length),o=e(s)),a>-1&&(r=r||t.slice(0,a),i=t.slice(a,t.length)),r=Qc(r!=null?r:t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:i}}function Gc(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function pi(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Yc(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&Ut(t.matched[r],n.matched[o])&&mi(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Ut(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function mi(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Jc(e[n],t[n]))return!1;return!0}function Jc(e,t){return Array.isArray(e)?gi(e,t):Array.isArray(t)?gi(t,e):e===t}function gi(e,t){return Array.isArray(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Qc(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/");let o=n.length-1,s,i;for(s=0;s({left:window.pageXOffset,top:window.pageYOffset});function nu(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=tu(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function vi(e,t){return(history.state?history.state.position-t:-1)+e}const ao=new Map;function ru(e,t){ao.set(e,t)}function ou(e){const t=ao.get(e);return ao.delete(e),t}let su=()=>location.protocol+"//"+location.host;function yi(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let l=o.includes(e.slice(s))?e.slice(s).length:1,a=o.slice(l);return a[0]!=="/"&&(a="/"+a),pi(a,"")}return pi(n,e)+r+o}function iu(e,t,n,r){let o=[],s=[],i=null;const l=({state:d})=>{const _=yi(e,location),h=n.value,b=t.value;let g=0;if(d){if(n.value=_,t.value=d,i&&i===h){i=null;return}g=b?d.position-b.position:0}else r(_);o.forEach(v=>{v(n.value,h,{delta:g,type:yn.pop,direction:g?g>0?bn.forward:bn.back:bn.unknown})})};function a(){i=n.value}function c(d){o.push(d);const _=()=>{const h=o.indexOf(d);h>-1&&o.splice(h,1)};return s.push(_),_}function f(){const{history:d}=window;!d.state||d.replaceState(fe({},d.state,{scroll:Xn()}),"")}function m(){for(const d of s)d();s=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",f)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",f),{pauseListeners:a,listen:c,destroy:m}}function bi(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?Xn():null}}function lu(e){const{history:t,location:n}=window,r={value:yi(e,n)},o={value:t.state};o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function s(a,c,f){const m=e.indexOf("#"),d=m>-1?(n.host&&document.querySelector("base")?e:e.slice(m))+a:su()+e+a;try{t[f?"replaceState":"pushState"](c,"",d),o.value=c}catch(_){console.error(_),n[f?"replace":"assign"](d)}}function i(a,c){const f=fe({},t.state,bi(o.value.back,a,o.value.forward,!0),c,{position:o.value.position});s(a,f,!0),r.value=a}function l(a,c){const f=fe({},o.value,t.state,{forward:a,scroll:Xn()});s(f.current,f,!0);const m=fe({},bi(r.value,a,null),{position:f.position+1},c);s(a,m,!1),r.value=a}return{location:r,state:o,push:l,replace:i}}function au(e){e=Zc(e);const t=lu(e),n=iu(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=fe({location:"",base:e,go:r,createHref:eu.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function cu(e){return typeof e=="string"||e&&typeof e=="object"}function _i(e){return typeof e=="string"||typeof e=="symbol"}const nt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Ei=zt("nf");var wi;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(wi||(wi={}));function Kt(e,t){return fe(new Error,{type:e,[Ei]:!0},t)}function xt(e,t){return e instanceof Error&&Ei in e&&(t==null||!!(e.type&t))}const Ci="[^/]+?",uu={sensitive:!1,strict:!1,start:!0,end:!0},fu=/[.+*?^${}()[\]/\\]/g;function du(e,t){const n=fe({},uu,t),r=[];let o=n.start?"^":"";const s=[];for(const c of e){const f=c.length?[]:[90];n.strict&&!c.length&&(o+="/");for(let m=0;mt.length?t.length===1&&t[0]===40+40?1:-1:0}function pu(e,t){let n=0;const r=e.score,o=t.score;for(;n1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:c,regexp:f,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function d(){c+=a}for(;l{i(w)}:vn}function i(f){if(_i(f)){const m=r.get(f);m&&(r.delete(f),n.splice(n.indexOf(m),1),m.children.forEach(i),m.alias.forEach(i))}else{const m=n.indexOf(f);m>-1&&(n.splice(m,1),f.record.name&&r.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function l(){return n}function a(f){let m=0;for(;m=0;)m++;n.splice(m,0,f),f.record.name&&!xi(f)&&r.set(f.record.name,f)}function c(f,m){let d,_={},h,b;if("name"in f&&f.name){if(d=r.get(f.name),!d)throw Kt(1,{location:f});b=d.record.name,_=fe(_u(m.params,d.keys.filter(w=>!w.optional).map(w=>w.name)),f.params),h=d.stringify(_)}else if("path"in f)h=f.path,d=n.find(w=>w.re.test(h)),d&&(_=d.parse(h),b=d.record.name);else{if(d=m.name?r.get(m.name):n.find(w=>w.re.test(m.path)),!d)throw Kt(1,{location:f,currentLocation:m});b=d.record.name,_=fe({},m.params,f.params),h=d.stringify(_)}const g=[];let v=d;for(;v;)g.unshift(v.record),v=v.parent;return{name:b,path:h,params:_,matched:g,meta:Cu(g)}}return e.forEach(f=>s(f)),{addRoute:s,resolve:c,removeRoute:i,getRoutes:l,getRecordMatcher:o}}function _u(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function Eu(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:wu(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||{}:{default:e.component}}}function wu(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="boolean"?n:n[r];return t}function xi(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Cu(e){return e.reduce((t,n)=>fe(t,n.meta),{})}function Ai(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}const Si=/#/g,xu=/&/g,Au=/\//g,Su=/=/g,Tu=/\?/g,Ti=/\+/g,Pu=/%5B/g,Ru=/%5D/g,Pi=/%5E/g,Lu=/%60/g,Ri=/%7B/g,ku=/%7C/g,Li=/%7D/g,Ou=/%20/g;function co(e){return encodeURI(""+e).replace(ku,"|").replace(Pu,"[").replace(Ru,"]")}function Iu(e){return co(e).replace(Ri,"{").replace(Li,"}").replace(Pi,"^")}function uo(e){return co(e).replace(Ti,"%2B").replace(Ou,"+").replace(Si,"%23").replace(xu,"%26").replace(Lu,"`").replace(Ri,"{").replace(Li,"}").replace(Pi,"^")}function Mu(e){return uo(e).replace(Su,"%3D")}function Nu(e){return co(e).replace(Si,"%23").replace(Tu,"%3F")}function Hu(e){return e==null?"":Nu(e).replace(Au,"%2F")}function er(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Du(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;os&&uo(s)):[r&&uo(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function Fu(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=Array.isArray(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}function _n(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e,reset:n}}function ft(e,t,n,r,o){const s=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((i,l)=>{const a=m=>{m===!1?l(Kt(4,{from:n,to:t})):m instanceof Error?l(m):cu(m)?l(Kt(2,{from:t,to:m})):(s&&r.enterCallbacks[o]===s&&typeof m=="function"&&s.push(m),i())},c=e.call(r&&r.instances[o],t,n,a);let f=Promise.resolve(c);e.length<3&&(f=f.then(a)),f.catch(m=>l(m))})}function fo(e,t,n,r){const o=[];for(const s of e)for(const i in s.components){let l=s.components[i];if(!(t!=="beforeRouteEnter"&&!s.instances[i]))if(ju(l)){const c=(l.__vccOpts||l)[t];c&&o.push(ft(c,n,r,s,i))}else{let a=l();o.push(()=>a.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${i}" at "${s.path}"`));const f=Vc(c)?c.default:c;s.components[i]=f;const d=(f.__vccOpts||f)[t];return d&&ft(d,n,r,s,i)()}))}}return o}function ju(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Oi(e){const t=we(Zn),n=we(oo),r=pe(()=>t.resolve(Ze(e.to))),o=pe(()=>{const{matched:a}=r.value,{length:c}=a,f=a[c-1],m=n.matched;if(!f||!m.length)return-1;const d=m.findIndex(Ut.bind(null,f));if(d>-1)return d;const _=Ii(a[c-2]);return c>1&&Ii(f)===_&&m[m.length-1].path!==_?m.findIndex(Ut.bind(null,a[c-2])):d}),s=pe(()=>o.value>-1&&Uu(n.params,r.value.params)),i=pe(()=>o.value>-1&&o.value===n.matched.length-1&&mi(n.params,r.value.params));function l(a={}){return Bu(a)?t[Ze(e.replace)?"replace":"push"](Ze(e.to)).catch(vn):Promise.resolve()}return{route:r,href:pe(()=>r.value.href),isActive:s,isExactActive:i,navigate:l}}const $u=Fe({name:"RouterLink",props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Oi,setup(e,{slots:t}){const n=tn(Oi(e)),{options:r}=we(Zn),o=pe(()=>({[Mi(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Mi(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const s=t.default&&t.default(n);return e.custom?s:ae("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),zu=$u;function Bu(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Uu(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!Array.isArray(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function Ii(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Mi=(e,t,n)=>e!=null?e:t!=null?t:n,Ku=Fe({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},setup(e,{attrs:t,slots:n}){const r=we(so),o=pe(()=>e.route||r.value),s=we(hi,0),i=pe(()=>o.value.matched[s]);gt(hi,s+1),gt(Kc,i),gt(so,o);const l=be();return tt(()=>[l.value,i.value,e.name],([a,c,f],[m,d,_])=>{c&&(c.instances[f]=a,d&&d!==c&&a&&a===m&&(c.leaveGuards.size||(c.leaveGuards=d.leaveGuards),c.updateGuards.size||(c.updateGuards=d.updateGuards))),a&&c&&(!d||!Ut(c,d)||!m)&&(c.enterCallbacks[f]||[]).forEach(h=>h(a))},{flush:"post"}),()=>{const a=o.value,c=i.value,f=c&&c.components[e.name],m=e.name;if(!f)return Ni(n.default,{Component:f,route:a});const d=c.props[e.name],_=d?d===!0?a.params:typeof d=="function"?d(a):d:null,b=ae(f,fe({},_,t,{onVnodeUnmounted:g=>{g.component.isUnmounted&&(c.instances[m]=null)},ref:l}));return Ni(n.default,{Component:b,route:a})||b}}});function Ni(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Hi=Ku;function Vu(e){const t=bu(e.routes,e),n=e.parseQuery||Du,r=e.stringifyQuery||ki,o=e.history,s=_n(),i=_n(),l=_n(),a=os(nt);let c=nt;Bt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const f=io.bind(null,x=>""+x),m=io.bind(null,Hu),d=io.bind(null,er);function _(x,F){let I,$;return _i(x)?(I=t.getRecordMatcher(x),$=F):$=x,t.addRoute($,I)}function h(x){const F=t.getRecordMatcher(x);F&&t.removeRoute(F)}function b(){return t.getRoutes().map(x=>x.record)}function g(x){return!!t.getRecordMatcher(x)}function v(x,F){if(F=fe({},F||a.value),typeof x=="string"){const Q=lo(n,x,F.path),u=t.resolve({path:Q.path},F),p=o.createHref(Q.fullPath);return fe(Q,u,{params:d(u.params),hash:er(Q.hash),redirectedFrom:void 0,href:p})}let I;if("path"in x)I=fe({},x,{path:lo(n,x.path,F.path).path});else{const Q=fe({},x.params);for(const u in Q)Q[u]==null&&delete Q[u];I=fe({},x,{params:m(x.params)}),F.params=m(F.params)}const $=t.resolve(I,F),ie=x.hash||"";$.params=f(d($.params));const le=Gc(r,fe({},x,{hash:Iu(ie),path:$.path})),ee=o.createHref(le);return fe({fullPath:le,hash:ie,query:r===ki?Fu(x.query):x.query||{}},$,{redirectedFrom:void 0,href:ee})}function w(x){return typeof x=="string"?lo(n,x,a.value.path):fe({},x)}function A(x,F){if(c!==x)return Kt(8,{from:F,to:x})}function R(x){return S(x)}function D(x){return R(fe(w(x),{replace:!0}))}function j(x){const F=x.matched[x.matched.length-1];if(F&&F.redirect){const{redirect:I}=F;let $=typeof I=="function"?I(x):I;return typeof $=="string"&&($=$.includes("?")||$.includes("#")?$=w($):{path:$},$.params={}),fe({query:x.query,hash:x.hash,params:x.params},$)}}function S(x,F){const I=c=v(x),$=a.value,ie=x.state,le=x.force,ee=x.replace===!0,Q=j(I);if(Q)return S(fe(w(Q),{state:ie,force:le,replace:ee}),F||I);const u=I;u.redirectedFrom=F;let p;return!le&&Yc(r,$,I)&&(p=Kt(16,{to:u,from:$}),Ae($,$,!0,!1)),(p?Promise.resolve(p):W(u,$)).catch(y=>xt(y)?y:Z(y,u,$)).then(y=>{if(y){if(xt(y,2))return S(fe(w(y.to),{state:ie,force:le,replace:ee}),F||u)}else y=G(u,$,!0,ee,ie);return U(u,$,y),y})}function C(x,F){const I=A(x,F);return I?Promise.reject(I):Promise.resolve()}function W(x,F){let I;const[$,ie,le]=qu(x,F);I=fo($.reverse(),"beforeRouteLeave",x,F);for(const Q of $)Q.leaveGuards.forEach(u=>{I.push(ft(u,x,F))});const ee=C.bind(null,x,F);return I.push(ee),Vt(I).then(()=>{I=[];for(const Q of s.list())I.push(ft(Q,x,F));return I.push(ee),Vt(I)}).then(()=>{I=fo(ie,"beforeRouteUpdate",x,F);for(const Q of ie)Q.updateGuards.forEach(u=>{I.push(ft(u,x,F))});return I.push(ee),Vt(I)}).then(()=>{I=[];for(const Q of x.matched)if(Q.beforeEnter&&!F.matched.includes(Q))if(Array.isArray(Q.beforeEnter))for(const u of Q.beforeEnter)I.push(ft(u,x,F));else I.push(ft(Q.beforeEnter,x,F));return I.push(ee),Vt(I)}).then(()=>(x.matched.forEach(Q=>Q.enterCallbacks={}),I=fo(le,"beforeRouteEnter",x,F),I.push(ee),Vt(I))).then(()=>{I=[];for(const Q of i.list())I.push(ft(Q,x,F));return I.push(ee),Vt(I)}).catch(Q=>xt(Q,8)?Q:Promise.reject(Q))}function U(x,F,I){for(const $ of l.list())$(x,F,I)}function G(x,F,I,$,ie){const le=A(x,F);if(le)return le;const ee=F===nt,Q=Bt?history.state:{};I&&($||ee?o.replace(x.fullPath,fe({scroll:ee&&Q&&Q.scroll},ie)):o.push(x.fullPath,ie)),a.value=x,Ae(x,F,I,ee),_e()}let E;function N(){E=o.listen((x,F,I)=>{const $=v(x),ie=j($);if(ie){S(fe(ie,{replace:!0}),$).catch(vn);return}c=$;const le=a.value;Bt&&ru(vi(le.fullPath,I.delta),Xn()),W($,le).catch(ee=>xt(ee,4|8)?ee:xt(ee,2)?(S(ee.to,$).then(Q=>{xt(Q,4|16)&&!I.delta&&I.type===yn.pop&&o.go(-1,!1)}).catch(vn),Promise.reject()):(I.delta&&o.go(-I.delta,!1),Z(ee,$,le))).then(ee=>{ee=ee||G($,le,!1),ee&&(I.delta?o.go(-I.delta,!1):I.type===yn.pop&&xt(ee,4|16)&&o.go(-1,!1)),U($,le,ee)}).catch(vn)})}let q=_n(),se=_n(),B;function Z(x,F,I){_e(x);const $=se.list();return $.length?$.forEach(ie=>ie(x,F,I)):console.error(x),Promise.reject(x)}function te(){return B&&a.value!==nt?Promise.resolve():new Promise((x,F)=>{q.add([x,F])})}function _e(x){B||(B=!0,N(),q.list().forEach(([F,I])=>x?I(x):F()),q.reset())}function Ae(x,F,I,$){const{scrollBehavior:ie}=e;if(!Bt||!ie)return Promise.resolve();const le=!I&&ou(vi(x.fullPath,0))||($||!I)&&history.state&&history.state.scroll||null;return Yr().then(()=>ie(x,F,le)).then(ee=>ee&&nu(ee)).catch(ee=>Z(ee,x,F))}const Le=x=>o.go(x);let He;const Te=new Set;return{currentRoute:a,addRoute:_,removeRoute:h,hasRoute:g,getRoutes:b,resolve:v,options:e,push:R,replace:D,go:Le,back:()=>Le(-1),forward:()=>Le(1),beforeEach:s.add,beforeResolve:i.add,afterEach:l.add,onError:se.add,isReady:te,install(x){const F=this;x.component("RouterLink",zu),x.component("RouterView",Hi),x.config.globalProperties.$router=F,Object.defineProperty(x.config.globalProperties,"$route",{enumerable:!0,get:()=>Ze(a)}),Bt&&!He&&a.value===nt&&(He=!0,R(o.location).catch(ie=>{}));const I={};for(const ie in nt)I[ie]=pe(()=>a.value[ie]);x.provide(Zn,F),x.provide(oo,tn(I)),x.provide(so,a);const $=x.unmount;Te.add(x),x.unmount=function(){Te.delete(x),Te.size<1&&(c=nt,E&&E(),a.value=nt,He=!1,B=!1),$()}}}}function Vt(e){return e.reduce((t,n)=>t.then(()=>n()),Promise.resolve())}function qu(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;iUt(c,l))?r.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(c=>Ut(c,a))||o.push(a))}return[n,r,o]}function tr(){return we(Zn)}function ho(){return we(oo)}const Wu=Fe({setup(e,t){const n=be(!1);return Ye(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)===null||o===void 0?void 0:o.call(r):null}}}),Gu="modulepreload",Di={},Yu="/Husky.Net/",ge=function(t,n){return!n||n.length===0?t():Promise.all(n.map(r=>{if(r=`${Yu}${r}`,r in Di)return;Di[r]=!0;const o=r.endsWith(".css"),s=o?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${r}"]${s}`))return;const i=document.createElement("link");if(i.rel=o?"stylesheet":Gu,o||(i.as="script",i.crossOrigin=""),i.href=r,document.head.appendChild(i),o)return new Promise((l,a)=>{i.addEventListener("load",l),i.addEventListener("error",a)})})).then(()=>t())},Fi={"v-8daa1a0e":Me(()=>ge(()=>import("./index.html.504c7800.js"),["assets/index.html.504c7800.js","assets/plugin-vue_export-helper.21dcd24c.js"])),"v-42d847c6":Me(()=>ge(()=>import("./index.html.2aaa5aee.js"),["assets/index.html.2aaa5aee.js","assets/plugin-vue_export-helper.21dcd24c.js"])),"v-fffb8e28":Me(()=>ge(()=>import("./index.html.56e1725b.js"),["assets/index.html.56e1725b.js","assets/plugin-vue_export-helper.21dcd24c.js"])),"v-3bf892b9":Me(()=>ge(()=>import("./automate.html.f8e0d483.js"),["assets/automate.html.f8e0d483.js","assets/plugin-vue_export-helper.21dcd24c.js"])),"v-44c2d174":Me(()=>ge(()=>import("./csharp-script.html.b6baa528.js"),["assets/csharp-script.html.b6baa528.js","assets/plugin-vue_export-helper.21dcd24c.js"])),"v-fb0f0066":Me(()=>ge(()=>import("./getting-started.html.640b3ed8.js"),["assets/getting-started.html.640b3ed8.js","assets/plugin-vue_export-helper.21dcd24c.js"])),"v-7b646586":Me(()=>ge(()=>import("./submodules.html.2b2978a2.js"),["assets/submodules.html.2b2978a2.js","assets/plugin-vue_export-helper.21dcd24c.js"])),"v-a98fa702":Me(()=>ge(()=>import("./task-configuration.html.9ea86763.js"),["assets/task-configuration.html.9ea86763.js","assets/plugin-vue_export-helper.21dcd24c.js"])),"v-74ae684d":Me(()=>ge(()=>import("./task-runner.html.9b743ad8.js"),["assets/task-runner.html.9b743ad8.js","assets/plugin-vue_export-helper.21dcd24c.js"])),"v-c83fcc36":Me(()=>ge(()=>import("./troubleshoot.html.42443789.js"),["assets/troubleshoot.html.42443789.js","assets/plugin-vue_export-helper.21dcd24c.js"])),"v-3706649a":Me(()=>ge(()=>import("./404.html.bee13de6.js"),["assets/404.html.bee13de6.js","assets/plugin-vue_export-helper.21dcd24c.js"]))},Ju={"v-8daa1a0e":()=>ge(()=>import("./index.html.80ef201c.js"),[]).then(({data:e})=>e),"v-42d847c6":()=>ge(()=>import("./index.html.710bbd8d.js"),[]).then(({data:e})=>e),"v-fffb8e28":()=>ge(()=>import("./index.html.c4b28ab0.js"),[]).then(({data:e})=>e),"v-3bf892b9":()=>ge(()=>import("./automate.html.18b5ee3d.js"),[]).then(({data:e})=>e),"v-44c2d174":()=>ge(()=>import("./csharp-script.html.66921e8d.js"),[]).then(({data:e})=>e),"v-fb0f0066":()=>ge(()=>import("./getting-started.html.a51a07e5.js"),[]).then(({data:e})=>e),"v-7b646586":()=>ge(()=>import("./submodules.html.7c452965.js"),[]).then(({data:e})=>e),"v-a98fa702":()=>ge(()=>import("./task-configuration.html.a73375a6.js"),[]).then(({data:e})=>e),"v-74ae684d":()=>ge(()=>import("./task-runner.html.5a8991f3.js"),[]).then(({data:e})=>e),"v-c83fcc36":()=>ge(()=>import("./troubleshoot.html.5431d5aa.js"),[]).then(({data:e})=>e),"v-3706649a":()=>ge(()=>import("./404.html.beaa804c.js"),[]).then(({data:e})=>e)},ji=be(Ju),po=xr({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),dt=be(po),En=()=>dt,Qu=async e=>{const t=ji.value[e];if(!t)return po;const n=await t();return n!=null?n:po};ir.webpackHot&&(__VUE_HMR_RUNTIME__.updatePageData=e=>{ji.value[e.key]=()=>Promise.resolve(e),e.key===dt.value.key&&(dt.value=e)});const $i=Symbol(""),Zu=()=>{const e=we($i);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},Xu=e=>e.frontmatter,ef=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),tf=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=ef(r);t.has(o)||(t.add(o),n.push(r))}),n},nf=e=>/^(https?:)?\/\//.test(e),bh=e=>/^mailto:/.test(e),_h=e=>/^tel:/.test(e),zi=e=>Object.prototype.toString.call(e)==="[object Object]",rf=e=>e.replace(/\/$/,""),of=e=>e.replace(/^\//,""),Bi=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const s=o.split("/").length-r.split("/").length;return s!==0?s:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"},Ui=Symbol(""),sf=()=>{const e=we(Ui);if(!e)throw new Error("usePageHead() is called without provider.");return e},lf=(e,t,n)=>{const r=he(t.description)?t.description:n.description,o=[...Y(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return tf(o)},af=Symbol(""),cf=(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,Ki=Symbol(""),uf=()=>{const e=we(Ki);if(!e)throw new Error("usePageLang() is called without provider.");return e},ff=e=>e.lang||"en",mo=Symbol(""),df=()=>{const e=we(mo);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},hf=(e,t)=>Bi(e,t),pf={base:"/Husky.Net/",lang:"en-US",title:"Husky.Net",description:"Git hooks made easy with husky.net task runner",head:[["link",{rel:"icon",href:"/Husky.Net/favicon.ico",type:"image/x-icon"}],["link",{rel:"shortcut icon",href:"/Husky.Net/favicon.ico",type:"image/x-icon"}],["meta",{property:"og:image",content:"https://alirezanet.github.io/Husky.Net/workflow.jpg"}],["meta",{property:"og:image:type",content:"image/png"}],["meta",{property:"og:image:width",content:"1280"}],["meta",{property:"og:image:height",content:"640"}],["meta",{property:"og:title",content:"Husky.Net"}],["meta",{property:"og:type",content:"website"}],["meta",{property:"og:url",content:"https://alirezanet.github.io/Husky.Net/"}],["meta",{property:"twitter:card",content:"summary_large_image"}]],locales:{}},At=be(pf),mf=()=>At;ir.webpackHot&&(__VUE_HMR_RUNTIME__.updateSiteData=e=>{At.value=e});const Vi=Symbol(""),Eh=()=>{const e=we(Vi);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},gf=(e,t)=>qe(qe({},e),e.locales[t]),vf=Symbol(""),yf=()=>{const e=ho(),t=sf(),n=uf(),r=be([]),o=()=>{t.value.forEach(i=>{const l=bf(i);l&&r.value.push(l)})},s=()=>{document.documentElement.lang=n.value,r.value.forEach(i=>{i.parentNode===document.head&&document.head.removeChild(i)}),r.value.splice(0,r.value.length),t.value.forEach(i=>{const l=_f(i);l!==null&&(document.head.appendChild(l),r.value.push(l))})};gt(vf,s),Ye(()=>{o(),s(),tt(()=>e.path,()=>s())})},bf=([e,t,n=""])=>{const r=Object.entries(t).map(([l,a])=>he(a)?`[${l}="${a}"]`:a===!0?`[${l}]`:"").join(""),o=`head > ${e}${r}`;return Array.from(document.querySelectorAll(o)).find(l=>l.innerText===n)||null},_f=([e,t,n])=>{if(!he(e))return null;const r=document.createElement(e);return zi(t)&&Object.entries(t).forEach(([o,s])=>{he(s)?r.setAttribute(o,s):s===!0&&r.setAttribute(o,"")}),he(n)&&r.appendChild(document.createTextNode(n)),r},go=e=>{let t;e.pageKey?t=e.pageKey:t=En().value.key;const n=Fi[t];return n?ae(n):ae("div","404 Not Found")};go.displayName="Content";go.props={pageKey:{type:String,required:!1}};const Ef={"404":Me(()=>ge(()=>import("./404.b0d8fe8a.js"),[])),Layout:Me(()=>ge(()=>import("./Layout.f68faebd.js"),["assets/Layout.f68faebd.js","assets/plugin-vue_export-helper.21dcd24c.js"]))},qi=Fe({name:"Vuepress",setup(){const e=En(),t=pe(()=>{let n;if(e.value.path){const r=e.value.frontmatter.layout;he(r)?n=r:n="Layout"}else n="404";return Ef[n]||Wa(n,!1)});return()=>ae(t.value)}}),St=e=>e,vo=e=>e,wf=e=>nf(e)?e:`${mf().value.base}${of(e)}`;const Cf=ae("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[ae("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),ae("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),yo=(e,{slots:t})=>{var n;return ae("span",[Cf,(n=t.default)===null||n===void 0?void 0:n.call(t)])};yo.displayName="ExternalLinkIcon";var xf=St(({app:e})=>{e.component("ExternalLinkIcon",yo)});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var Tt=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=window.Promise||function(E){function N(){}E(N,N)},o=function(E){var N=E.target;if(N===W){h();return}A.indexOf(N)!==-1&&b({target:N})},s=function(){if(!(D||!C.original)){var E=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(j-E)>S.scrollOffset&&setTimeout(h,150)}},i=function(E){var N=E.key||E.keyCode;(N==="Escape"||N==="Esc"||N===27)&&h()},l=function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},N=E;if(E.background&&(W.style.background=E.background),E.container&&E.container instanceof Object&&(N.container=Tt({},S.container,E.container)),E.template){var q=rr(E.template)?E.template:document.querySelector(E.template);N.template=q}return S=Tt({},S,N),A.forEach(function(se){se.dispatchEvent(qt("medium-zoom:update",{detail:{zoom:U}}))}),U},a=function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Tt({},S,E))},c=function(){for(var E=arguments.length,N=Array(E),q=0;q0?N.reduce(function(B,Z){return[].concat(B,Gi(Z))},[]):A;return se.forEach(function(B){B.classList.remove("medium-zoom-image"),B.dispatchEvent(qt("medium-zoom:detach",{detail:{zoom:U}}))}),A=A.filter(function(B){return se.indexOf(B)===-1}),U},m=function(E,N){var q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return A.forEach(function(se){se.addEventListener("medium-zoom:"+E,N,q)}),R.push({type:"medium-zoom:"+E,listener:N,options:q}),U},d=function(E,N){var q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return A.forEach(function(se){se.removeEventListener("medium-zoom:"+E,N,q)}),R=R.filter(function(se){return!(se.type==="medium-zoom:"+E&&se.listener.toString()===N.toString())}),U},_=function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},N=E.target,q=function(){var B={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},Z=void 0,te=void 0;if(S.container)if(S.container instanceof Object)B=Tt({},B,S.container),Z=B.width-B.left-B.right-S.margin*2,te=B.height-B.top-B.bottom-S.margin*2;else{var _e=rr(S.container)?S.container:document.querySelector(S.container),Ae=_e.getBoundingClientRect(),Le=Ae.width,He=Ae.height,Te=Ae.left,Wt=Ae.top;B=Tt({},B,{width:Le,height:He,left:Te,top:Wt})}Z=Z||B.width-S.margin*2,te=te||B.height-S.margin*2;var x=C.zoomedHd||C.original,F=Wi(x)?Z:x.naturalWidth||Z,I=Wi(x)?te:x.naturalHeight||te,$=x.getBoundingClientRect(),ie=$.top,le=$.left,ee=$.width,Q=$.height,u=Math.min(F,Z)/ee,p=Math.min(I,te)/Q,y=Math.min(u,p),P=(-le+(Z-ee)/2+S.margin+B.left)/y,T=(-ie+(te-Q)/2+S.margin+B.top)/y,k="scale("+y+") translate3d("+P+"px, "+T+"px, 0)";C.zoomed.style.transform=k,C.zoomedHd&&(C.zoomedHd.style.transform=k)};return new r(function(se){if(N&&A.indexOf(N)===-1){se(U);return}var B=function Le(){D=!1,C.zoomed.removeEventListener("transitionend",Le),C.original.dispatchEvent(qt("medium-zoom:opened",{detail:{zoom:U}})),se(U)};if(C.zoomed){se(U);return}if(N)C.original=N;else if(A.length>0){var Z=A;C.original=Z[0]}else{se(U);return}if(C.original.dispatchEvent(qt("medium-zoom:open",{detail:{zoom:U}})),j=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,D=!0,C.zoomed=Tf(C.original),document.body.appendChild(W),S.template){var te=rr(S.template)?S.template:document.querySelector(S.template);C.template=document.createElement("div"),C.template.appendChild(te.content.cloneNode(!0)),document.body.appendChild(C.template)}if(document.body.appendChild(C.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),C.original.classList.add("medium-zoom-image--hidden"),C.zoomed.classList.add("medium-zoom-image--opened"),C.zoomed.addEventListener("click",h),C.zoomed.addEventListener("transitionend",B),C.original.getAttribute("data-zoom-src")){C.zoomedHd=C.zoomed.cloneNode(),C.zoomedHd.removeAttribute("srcset"),C.zoomedHd.removeAttribute("sizes"),C.zoomedHd.src=C.zoomed.getAttribute("data-zoom-src"),C.zoomedHd.onerror=function(){clearInterval(_e),console.warn("Unable to reach the zoom image target "+C.zoomedHd.src),C.zoomedHd=null,q()};var _e=setInterval(function(){C.zoomedHd.complete&&(clearInterval(_e),C.zoomedHd.classList.add("medium-zoom-image--opened"),C.zoomedHd.addEventListener("click",h),document.body.appendChild(C.zoomedHd),q())},10)}else if(C.original.hasAttribute("srcset")){C.zoomedHd=C.zoomed.cloneNode(),C.zoomedHd.removeAttribute("sizes"),C.zoomedHd.removeAttribute("loading");var Ae=C.zoomedHd.addEventListener("load",function(){C.zoomedHd.removeEventListener("load",Ae),C.zoomedHd.classList.add("medium-zoom-image--opened"),C.zoomedHd.addEventListener("click",h),document.body.appendChild(C.zoomedHd),q()})}else q()})},h=function(){return new r(function(E){if(D||!C.original){E(U);return}var N=function q(){C.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(C.zoomed),C.zoomedHd&&document.body.removeChild(C.zoomedHd),document.body.removeChild(W),C.zoomed.classList.remove("medium-zoom-image--opened"),C.template&&document.body.removeChild(C.template),D=!1,C.zoomed.removeEventListener("transitionend",q),C.original.dispatchEvent(qt("medium-zoom:closed",{detail:{zoom:U}})),C.original=null,C.zoomed=null,C.zoomedHd=null,C.template=null,E(U)};D=!0,document.body.classList.remove("medium-zoom--opened"),C.zoomed.style.transform="",C.zoomedHd&&(C.zoomedHd.style.transform=""),C.template&&(C.template.style.transition="opacity 150ms",C.template.style.opacity=0),C.original.dispatchEvent(qt("medium-zoom:close",{detail:{zoom:U}})),C.zoomed.addEventListener("transitionend",N)})},b=function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},N=E.target;return C.original?h():_({target:N})},g=function(){return S},v=function(){return A},w=function(){return C.original},A=[],R=[],D=!1,j=0,S=n,C={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?S=t:(t||typeof t=="string")&&c(t),S=Tt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},S);var W=Sf(S.background);document.addEventListener("click",o),document.addEventListener("keyup",i),document.addEventListener("scroll",s),window.addEventListener("resize",h);var U={open:_,close:h,toggle:b,update:l,clone:a,attach:c,detach:f,on:m,off:d,getOptions:g,getImages:v,getZoomedImage:w};return U};function Rf(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document=="undefined")){var r=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",n==="top"&&r.firstChild?r.insertBefore(o,r.firstChild):r.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var Lf=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";Rf(Lf);var kf=Pf;const Of=Symbol("mediumZoom");const If=".theme-default-content > img, .theme-default-content :not(a) > img",Mf={},Nf=400;var Hf=St(({app:e,router:t})=>{const n=kf(Mf);n.refresh=(r=If)=>{n.detach(),n.attach(r)},e.provide(Of,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),Nf)})});const Df={editLinks:!0,editLinkText:"Help us improve this page!",contributors:!1,docsRepo:"alirezanet/husky.net",docsBranch:"master",docsDir:"/docs",repo:"alirezanet/husky.net",sidebar:{"/guide/":[{text:"Git hooks",children:["/guide/README.md","/guide/getting-started.md","/guide/automate.md","/guide/submodules.md"]},{text:"Task Runner",children:["/guide/task-runner.md","/guide/task-configuration.md"]},{text:"CSharp Scripts",children:["/guide/csharp-script.md"]},{text:"Troubleshoot",children:["/guide/troubleshoot.md"]}],"/contribution/":[{text:"Contribution",link:"/contribution/",children:["/contribution/README.md"]}]},navbar:[{text:"Welcome",link:"/"},{text:"Guide",link:"/guide/"},{text:"Contribution",link:"/contribution/"}],locales:{"/":{selectLanguageName:"English"}},logo:null,darkMode:!0,selectLanguageText:"Languages",selectLanguageAriaLabel:"Select language",sidebarDepth:2,editLink:!0,lastUpdated:!0,lastUpdatedText:"Last Updated",contributorsText:"Contributors",notFound:["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],backToHome:"Take me home",openInNewWindow:"open in new window",toggleDarkMode:"toggle dark mode",toggleSidebar:"toggle sidebar"},Yi=be(Df),Ff=()=>Yi;ir.webpackHot&&(__VUE_HMR_RUNTIME__.updateThemeData=e=>{Yi.value=e});const Ji=Symbol(""),jf=()=>{const e=we(Ji);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},$f=(e,t)=>{var n;return qe(qe({},e),(n=e.locales)===null||n===void 0?void 0:n[t])};var zf=St(({app:e})=>{const t=Ff(),n=e._context.provides[mo],r=pe(()=>$f(t.value,n.value));e.provide(Ji,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})});const Bf=Fe({props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,n)=>(an(),Hs("span",{class:Yt(["badge",e.type]),style:An({verticalAlign:e.vertical})},[Fs(t.$slots,"default",{},()=>[Br(Lo(e.text),1)])],6))}});var Uf=Fe({name:"CodeGroup",setup(e,{slots:t}){const n=be(-1),r=be([]),o=(l=n.value)=>{l{l>0?n.value=l-1:n.value=r.value.length-1,r.value[n.value].focus()},i=(l,a)=>{l.key===" "||l.key==="Enter"?(l.preventDefault(),n.value=a):l.key==="ArrowRight"?(l.preventDefault(),o(a)):l.key==="ArrowLeft"&&(l.preventDefault(),s(a))};return()=>{var l;const a=(((l=t.default)===null||l===void 0?void 0:l.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return a.length===0?null:(n.value<0||n.value>a.length-1?(n.value=a.findIndex(c=>c.props.active===""||c.props.active===!0),n.value===-1&&(n.value=0)):a.forEach((c,f)=>{c.props.active=f===n.value}),ae("div",{class:"code-group"},[ae("div",{class:"code-group__nav"},ae("ul",{class:"code-group__ul"},a.map((c,f)=>{const m=f===n.value;return ae("li",{class:"code-group__li"},ae("button",{ref:d=>{d&&(r.value[f]=d)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":m},ariaPressed:m,ariaExpanded:m,onClick:()=>n.value=f,onKeydown:d=>i(d,f)},c.props.title))}))),a]))}}});const Kf=["aria-selected"],Vf=Fe({name:"CodeGroupItem"}),qf=Fe(xn(qe({},Vf),{props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,n)=>(an(),Hs("div",{class:Yt(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[Fs(t.$slots,"default")],10,Kf))}}));function Qi(e){return kl()?(Ol(e),!0):!1}const wn=typeof window!="undefined",Wf=e=>typeof e=="string",bo=()=>{};function Gf(e,t){function n(...r){e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})}return n}const Yf=e=>e();var Zi=Object.getOwnPropertySymbols,Jf=Object.prototype.hasOwnProperty,Qf=Object.prototype.propertyIsEnumerable,Zf=(e,t)=>{var n={};for(var r in e)Jf.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Zi)for(var r of Zi(e))t.indexOf(r)<0&&Qf.call(e,r)&&(n[r]=e[r]);return n};function Xf(e,t,n={}){const r=n,{eventFilter:o=Yf}=r,s=Zf(r,["eventFilter"]);return tt(e,Gf(o,t),s)}function ed(e,t=!0){$s()?Ye(e):t?e():Yr(e)}const or=wn?window:void 0;wn&&window.document;wn&&window.navigator;wn&&window.location;function td(...e){let t,n,r,o;if(Wf(e[0])?([n,r,o]=e,t=or):[t,n,r,o]=e,!t)return bo;let s=bo;const i=tt(()=>Ze(t),a=>{s(),!!a&&(a.addEventListener(n,r,o),s=()=>{a.removeEventListener(n,r,o),s=bo})},{immediate:!0,flush:"post"}),l=()=>{i(),s()};return Qi(l),l}function nd(e,t={}){const{window:n=or}=t;let r;const o=be(!1),s=()=>{!n||(r||(r=n.matchMedia(e)),o.value=r.matches)};return ed(()=>{s(),!!r&&("addEventListener"in r?r.addEventListener("change",s):r.addListener(s),Qi(()=>{"removeEventListener"in s?r.removeEventListener("change",s):r.removeListener(s)}))}),o}const _o="__vueuse_ssr_handlers__";globalThis[_o]=globalThis[_o]||{};const rd=globalThis[_o];function od(e,t){return rd[e]||t}function sd(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"||Array.isArray(e)?"object":Number.isNaN(e)?"any":"number"}const id={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))}};function ld(e,t,n,r={}){var o;const{flush:s="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:a=!0,shallow:c,window:f=or,eventFilter:m,onError:d=w=>{console.error(w)}}=r,_=Ze(t),h=sd(_),b=(c?os:be)(t),g=(o=r.serializer)!=null?o:id[h];if(!n)try{n=od("getDefaultStorage",()=>{var w;return(w=or)==null?void 0:w.localStorage})()}catch(w){d(w)}function v(w){if(!(!n||w&&w.key!==e))try{const A=w?w.newValue:n.getItem(e);A==null?(b.value=_,a&&_!==null&&n.setItem(e,g.write(_))):typeof A!="string"?b.value=A:b.value=g.read(A)}catch(A){d(A)}}return v(),f&&l&&td(f,"storage",w=>setTimeout(()=>v(w),0)),n&&Xf(b,()=>{try{b.value==null?n.removeItem(e):n.setItem(e,g.write(b.value))}catch(w){d(w)}},{flush:s,deep:i,eventFilter:m}),b}function ad(e){return nd("(prefers-color-scheme: dark)",e)}var Xi,el;wn&&(window==null?void 0:window.navigator)&&((Xi=window==null?void 0:window.navigator)==null?void 0:Xi.platform)&&/iP(ad|hone|od)/.test((el=window==null?void 0:window.navigator)==null?void 0:el.platform);var cd=Object.defineProperty,tl=Object.getOwnPropertySymbols,ud=Object.prototype.hasOwnProperty,fd=Object.prototype.propertyIsEnumerable,nl=(e,t,n)=>t in e?cd(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,dd=(e,t)=>{for(var n in t||(t={}))ud.call(t,n)&&nl(e,n,t[n]);if(tl)for(var n of tl(t))fd.call(t,n)&&nl(e,n,t[n]);return e};const hd={top:0,left:0,bottom:0,right:0,height:0,width:0};dd({text:""},hd);const rl=Symbol(""),wh=()=>{const e=we(rl);if(!e)throw new Error("useDarkMode() is called without provider.");return e},pd=()=>{const e=Co(),t=ad(),n=ld("vuepress-color-scheme","auto"),r=pe({get(){return e.value.darkMode?n.value==="auto"?t.value:n.value==="dark":!1},set(o){o===t.value?n.value="auto":n.value=o?"dark":"light"}});gt(rl,r),md(r)},md=e=>{const t=(n=e.value)=>{const r=window==null?void 0:window.document.querySelector("html");r==null||r.classList.toggle("dark",n)};Ye(()=>{tt(e,t,{immediate:!0})}),Mr(()=>t())},ol=(...e)=>{const n=tr().resolve(...e),r=n.matched[n.matched.length-1];if(!(r==null?void 0:r.redirect))return n;const{redirect:o}=r,s=X(o)?o(n):o,i=he(s)?{path:s}:s;return ol(qe({hash:n.hash,query:n.query,params:n.params},i))},gd=e=>{const t=ol(e);return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Eo=null,Cn=null;const vd={wait:()=>Eo,pending:()=>{Eo=new Promise(e=>Cn=e)},resolve:()=>{Cn==null||Cn(),Eo=null,Cn=null}},yd=()=>vd,sl=Symbol("sidebarItems"),Ch=()=>{const e=we(sl);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},bd=()=>{const e=Co(),t=Zu(),n=pe(()=>_d(t.value,e.value));gt(sl,n)},_d=(e,t)=>{var n,r,o,s;const i=(r=(n=e.sidebar)!==null&&n!==void 0?n:t.sidebar)!==null&&r!==void 0?r:"auto",l=(s=(o=e.sidebarDepth)!==null&&o!==void 0?o:t.sidebarDepth)!==null&&s!==void 0?s:2;return e.home||i===!1?[]:i==="auto"?wd(l):Y(i)?il(i,l):zi(i)?Cd(i,l):[]},Ed=(e,t)=>({text:e.title,link:`#${e.slug}`,children:wo(e.children,t)}),wo=(e,t)=>t>0?e.map(n=>Ed(n,t-1)):[],wd=e=>{const t=En();return[{text:t.value.title,children:wo(t.value.headers,e)}]},il=(e,t)=>{const n=ho(),r=En(),o=s=>{var i;let l;if(he(s)?l=gd(s):l=s,l.children)return xn(qe({},l),{children:l.children.map(a=>o(a))});if(l.link===n.path){const a=((i=r.value.headers[0])===null||i===void 0?void 0:i.level)===1?r.value.headers[0].children:r.value.headers;return xn(qe({},l),{children:wo(a,t)})}return l};return e.map(s=>o(s))},Cd=(e,t)=>{var n;const r=ho(),o=Bi(e,r.path),s=(n=e[o])!==null&&n!==void 0?n:[];return il(s,t)},Co=()=>jf(),xd={class:"sr-only"},Ad=Fe({setup(e){const t=Co();return(n,r)=>(an(),$r(Ze(yo),null,{default:cs(()=>[zr("span",xd,Lo(Ze(t).openInNewWindow),1)]),_:1}))}});var Sd=St(({app:e,router:t})=>{e.component("Badge",Bf),e.component("CodeGroup",Uf),e.component("CodeGroupItem",qf),delete e._context.components.ExternalLinkIcon,e.component("ExternalLinkIcon",Ad),e.component("NavbarSearch",()=>{const r=e.component("Docsearch")||e.component("SearchBox");return r?ae(r):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await yd().wait(),n(...r))});const Td=({input:e,hotKeys:t})=>{const n=r=>{!e.value||t.value.length===0||r.target===document.body&&t.value.includes(r.key)&&(e.value.focus(),r.preventDefault())};Ye(()=>{document.addEventListener("keydown",n)}),$n(()=>{document.removeEventListener("keydown",n)})},Pd=[{title:"Welcome",headers:[],path:"/",pathLocale:"/",extraFields:[]},{title:"Contribute to the project",headers:[{level:2,title:"Todos",slug:"todos",children:[]},{level:2,title:"Documentation",slug:"documentation",children:[]},{level:2,title:"How to contribute",slug:"how-to-contribute",children:[]},{level:2,title:"Contributors",slug:"contributors",children:[]}],path:"/contribution/",pathLocale:"/",extraFields:[]},{title:"Introduction",headers:[{level:2,title:"Features",slug:"features",children:[]},{level:2,title:"Why use Hooks and Husky.Net?",slug:"why-use-hooks-and-husky-net",children:[]}],path:"/guide/",pathLocale:"/",extraFields:[]},{title:"Automate installation for other contributors",headers:[{level:2,title:"Attach Husky to your project",slug:"attach-husky-to-your-project",children:[]},{level:2,title:"Disable husky in CI/CD pipelines",slug:"disable-husky-in-ci-cd-pipelines",children:[]},{level:2,title:"Manual Attach",slug:"manual-attach",children:[]},{level:2,title:"package.json alternative",slug:"package-json-alternative",children:[]}],path:"/guide/automate.html",pathLocale:"/",extraFields:[]},{title:"Using C# code in your git hooks",headers:[{level:2,title:"Examples",slug:"examples",children:[{level:3,title:"Simple commit message linter",slug:"simple-commit-message-linter",children:[]}]}],path:"/guide/csharp-script.html",pathLocale:"/",extraFields:[]},{title:"Getting Started",headers:[{level:2,title:"Installation",slug:"installation",children:[]},{level:2,title:"Setup husky for your project",slug:"setup-husky-for-your-project",children:[]},{level:2,title:"Add your first hook",slug:"add-your-first-hook",children:[]},{level:2,title:"Make a commit",slug:"make-a-commit",children:[]}],path:"/guide/getting-started.html",pathLocale:"/",extraFields:[]},{title:"Git submodules",headers:[{level:2,title:"Installing husky",slug:"installing-husky",children:[{level:3,title:"Ignoring submodule install",slug:"ignoring-submodule-install",children:[]}]},{level:2,title:"Attaching husky",slug:"attaching-husky",children:[]}],path:"/guide/submodules.html",pathLocale:"/",extraFields:[]},{title:"Configuration",headers:[{level:2,title:"Glob patterns",slug:"glob-patterns",children:[]},{level:2,title:"Variables",slug:"variables",children:[{level:3,title:"Custom variables",slug:"custom-variables",children:[]}]}],path:"/guide/task-configuration.html",pathLocale:"/",extraFields:[]},{title:"Task Runner",headers:[{level:2,title:"Why task runner?",slug:"why-task-runner",children:[]},{level:2,title:"task-runner.json",slug:"task-runner-json",children:[]}],path:"/guide/task-runner.html",pathLocale:"/",extraFields:[]},{title:"Missing Emojis",headers:[{level:2,title:"Disabling Emojis",slug:"disabling-emojis",children:[]}],path:"/guide/troubleshoot.html",pathLocale:"/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],ll=be(Pd),Rd=()=>ll;ir.webpackHot&&(__VUE_HMR_RUNTIME__.updateSearchIndex=e=>{ll.value=e});const Ld=/[^\x00-\x7F]/,kd=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),al=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),cl=(e,t)=>{const n=t.join(" "),r=kd(e);if(Ld.test(e))return r.some(i=>n.toLowerCase().indexOf(i)>-1);const o=e.endsWith(" ");return new RegExp(r.map((i,l)=>r.length===l+1&&!o?`(?=.*\\b${al(i)})`:`(?=.*\\b${al(i)}\\b)`).join("")+".+","gi").test(n)},Od=({searchIndex:e,routeLocale:t,query:n,maxSuggestions:r})=>{const o=pe(()=>e.value.filter(s=>s.pathLocale===t.value));return pe(()=>{const s=n.value.trim().toLowerCase();if(!s)return[];const i=[],l=(a,c)=>{cl(s,[c.title])&&i.push({link:`${a.path}#${c.slug}`,title:a.title,header:c.title});for(const f of c.children){if(i.length>=r.value)return;l(a,f)}};for(const a of o.value){if(i.length>=r.value)break;if(cl(s,[a.title,...a.extraFields])){i.push({link:a.path,title:a.title});continue}for(const c of a.headers){if(i.length>=r.value)break;l(a,c)}}return i})},Id=e=>{const t=be(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},Md=Fe({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:n,maxSuggestions:r}=aa(e),o=tr(),s=df(),i=Rd(),l=be(null),a=be(!1),c=be(""),f=pe(()=>{var A;return(A=t.value[s.value])!==null&&A!==void 0?A:{}}),m=Od({searchIndex:i,routeLocale:s,query:c,maxSuggestions:r}),{focusIndex:d,focusNext:_,focusPrev:h}=Id(m);Td({input:l,hotKeys:n});const b=pe(()=>a.value&&!!m.value.length),g=()=>{!b.value||h()},v=()=>{!b.value||_()},w=A=>{if(!b.value)return;const R=m.value[A];!R||o.push(R.link).then(()=>{c.value="",d.value=0})};return()=>ae("form",{class:"search-box",role:"search"},[ae("input",{ref:l,type:"search",placeholder:f.value.placeholder,autocomplete:"off",spellcheck:!1,value:c.value,onFocus:()=>a.value=!0,onBlur:()=>a.value=!1,onInput:A=>c.value=A.target.value,onKeydown:A=>{switch(A.key){case"ArrowUp":{g();break}case"ArrowDown":{v();break}case"Enter":{A.preventDefault(),w(d.value);break}}}}),b.value&&ae("ul",{class:"suggestions",onMouseleave:()=>d.value=-1},m.value.map(({link:A,title:R,header:D},j)=>ae("li",{class:["suggestion",{focus:d.value===j}],onMouseenter:()=>d.value=j,onMousedown:()=>w(j)},ae("a",{href:A,onClick:S=>S.preventDefault()},[ae("span",{class:"page-title"},R),D&&ae("span",{class:"page-header"},`> ${D}`)]))))])}});const Nd={},Hd=["s","/"],Dd=5;var Fd=St(({app:e})=>{e.component("SearchBox",t=>ae(Md,qe({locales:Nd,hotKeys:Hd,maxSuggestions:Dd},t)))});const jd=e=>{if(window.dataLayer&&window.gtag)return;const t=document.createElement("script");t.src=`https://www.googletagmanager.com/gtag/js?id=${e}`,t.async=!0,document.head.appendChild(t),window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},gtag("js",new Date),gtag("config",e)},$d="G-LV6WS6HDKN";var zd=St(()=>{jd($d)});const Bd="0.7.2";var Ud=St(({app:e,router:t,siteData:n})=>{e.config.globalProperties.$version=Bd});const Kd=[xf,Hf,zf,Sd,Fd,zd,Ud];function ul(e,t,n){var r,o,s;t===void 0&&(t=50),n===void 0&&(n={});var i=(r=n.isImmediate)!=null&&r,l=(o=n.callback)!=null&&o,a=n.maxWait,c=Date.now(),f=[];function m(){if(a!==void 0){var _=Date.now()-c;if(_+t>=a)return a-_}return t}var d=function(){var _=[].slice.call(arguments),h=this;return new Promise(function(b,g){var v=i&&s===void 0;if(s!==void 0&&clearTimeout(s),s=setTimeout(function(){if(s=void 0,c=Date.now(),!i){var A=e.apply(h,_);l&&l(A),f.forEach(function(R){return(0,R.resolve)(A)}),f=[]}},m()),v){var w=e.apply(h,_);return l&&l(w),b(w)}f.push({resolve:b,reject:g})})};return d.cancel=function(_){s!==void 0&&clearTimeout(s),f.forEach(function(h){return(0,h.reject)(_)}),f=[]},d}const fl=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,Vd=()=>window.scrollTo({top:0,behavior:"smooth"});const qd=Fe({name:"BackToTop",setup(){const e=be(0),t=pe(()=>e.value>300),n=ul(()=>{e.value=fl()},100);Ye(()=>{e.value=fl(),window.addEventListener("scroll",()=>n())});const r=ae("div",{class:"back-to-top",onClick:Vd});return()=>ae(to,{name:"back-to-top"},{default:()=>t.value?r:null})}}),Wd=[qd],Gd=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=tr(),s=En(),i=()=>{var a,c,f,m;const d=Array.from(document.querySelectorAll(e)),h=Array.from(document.querySelectorAll(t)).filter(A=>d.some(R=>R.hash===A.hash)),b=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),g=window.innerHeight+b,v=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),w=Math.abs(v-g)=((c=(a=R.parentElement)===null||a===void 0?void 0:a.offsetTop)!==null&&c!==void 0?c:0)-r,C=!D||b<((m=(f=D.parentElement)===null||f===void 0?void 0:f.offsetTop)!==null&&m!==void 0?m:0)-r;if(!(j||S&&C))continue;const U=decodeURIComponent(o.currentRoute.value.hash),G=decodeURIComponent(R.hash);if(U===G)return;if(w){for(let E=A+1;Ei(),n);Ye(()=>{l(),window.addEventListener("scroll",()=>l())}),$n(()=>{window.removeEventListener("scroll",()=>l())}),tt(()=>s.value.path,()=>l())},Yd=async(e,...t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace(...t).finally(()=>e.options.scrollBehavior=n)},Jd="a.sidebar-item",Qd=".header-anchor",Zd=200,Xd=5;var eh=vo(()=>{Gd({headerLinkSelector:Jd,headerAnchorSelector:Qd,delay:Zd,offset:Xd})}),th=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},sr={exports:{}};/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */(function(e,t){(function(n,r){e.exports=r()})(th,function(){var n={};n.version="0.2.0";var r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};n.configure=function(h){var b,g;for(b in h)g=h[b],g!==void 0&&h.hasOwnProperty(b)&&(r[b]=g);return this},n.status=null,n.set=function(h){var b=n.isStarted();h=o(h,r.minimum,1),n.status=h===1?null:h;var g=n.render(!b),v=g.querySelector(r.barSelector),w=r.speed,A=r.easing;return g.offsetWidth,l(function(R){r.positionUsing===""&&(r.positionUsing=n.getPositioningCSS()),a(v,i(h,w,A)),h===1?(a(g,{transition:"none",opacity:1}),g.offsetWidth,setTimeout(function(){a(g,{transition:"all "+w+"ms linear",opacity:0}),setTimeout(function(){n.remove(),R()},w)},w)):setTimeout(R,w)}),this},n.isStarted=function(){return typeof n.status=="number"},n.start=function(){n.status||n.set(0);var h=function(){setTimeout(function(){!n.status||(n.trickle(),h())},r.trickleSpeed)};return r.trickle&&h(),this},n.done=function(h){return!h&&!n.status?this:n.inc(.3+.5*Math.random()).set(1)},n.inc=function(h){var b=n.status;return b?(typeof h!="number"&&(h=(1-b)*o(Math.random()*b,.1,.95)),b=o(b+h,0,.994),n.set(b)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},function(){var h=0,b=0;n.promise=function(g){return!g||g.state()==="resolved"?this:(b===0&&n.start(),h++,b++,g.always(function(){b--,b===0?(h=0,n.done()):n.set((h-b)/h)}),this)}}(),n.render=function(h){if(n.isRendered())return document.getElementById("nprogress");f(document.documentElement,"nprogress-busy");var b=document.createElement("div");b.id="nprogress",b.innerHTML=r.template;var g=b.querySelector(r.barSelector),v=h?"-100":s(n.status||0),w=document.querySelector(r.parent),A;return a(g,{transition:"all 0 linear",transform:"translate3d("+v+"%,0,0)"}),r.showSpinner||(A=b.querySelector(r.spinnerSelector),A&&_(A)),w!=document.body&&f(w,"nprogress-custom-parent"),w.appendChild(b),b},n.remove=function(){m(document.documentElement,"nprogress-busy"),m(document.querySelector(r.parent),"nprogress-custom-parent");var h=document.getElementById("nprogress");h&&_(h)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var h=document.body.style,b="WebkitTransform"in h?"Webkit":"MozTransform"in h?"Moz":"msTransform"in h?"ms":"OTransform"in h?"O":"";return b+"Perspective"in h?"translate3d":b+"Transform"in h?"translate":"margin"};function o(h,b,g){return hg?g:h}function s(h){return(-1+h)*100}function i(h,b,g){var v;return r.positionUsing==="translate3d"?v={transform:"translate3d("+s(h)+"%,0,0)"}:r.positionUsing==="translate"?v={transform:"translate("+s(h)+"%,0)"}:v={"margin-left":s(h)+"%"},v.transition="all "+b+"ms "+g,v}var l=function(){var h=[];function b(){var g=h.shift();g&&g(b)}return function(g){h.push(g),h.length==1&&b()}}(),a=function(){var h=["Webkit","O","Moz","ms"],b={};function g(R){return R.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(D,j){return j.toUpperCase()})}function v(R){var D=document.body.style;if(R in D)return R;for(var j=h.length,S=R.charAt(0).toUpperCase()+R.slice(1),C;j--;)if(C=h[j]+S,C in D)return C;return R}function w(R){return R=g(R),b[R]||(b[R]=v(R))}function A(R,D,j){D=w(D),R.style[D]=j}return function(R,D){var j=arguments,S,C;if(j.length==2)for(S in D)C=D[S],C!==void 0&&D.hasOwnProperty(S)&&A(R,S,C);else A(R,j[1],j[2])}}();function c(h,b){var g=typeof h=="string"?h:d(h);return g.indexOf(" "+b+" ")>=0}function f(h,b){var g=d(h),v=g+b;c(g,b)||(h.className=v.substring(1))}function m(h,b){var g=d(h),v;!c(h,b)||(v=g.replace(" "+b+" "," "),h.className=v.substring(1,v.length-1))}function d(h){return(" "+(h.className||"")+" ").replace(/\s+/gi," ")}function _(h){h&&h.parentNode&&h.parentNode.removeChild(h)}return n})})(sr);const nh=()=>{Ye(()=>{const e=tr(),t=new Set;t.add(e.currentRoute.value.path),sr.exports.configure({showSpinner:!1}),e.beforeEach(n=>{t.has(n.path)||sr.exports.start()}),e.afterEach(n=>{t.add(n.path),sr.exports.done()})})};var rh=vo(()=>{nh()}),oh=vo(()=>{pd(),bd()});const sh=[eh,rh,oh],ih=[["v-8daa1a0e","/",{title:"Welcome"},["/index.html","/README.md"]],["v-42d847c6","/contribution/",{title:"Contribute to the project"},["/contribution/index.html","/contribution/README.md"]],["v-fffb8e28","/guide/",{title:"Introduction"},["/guide/index.html","/guide/README.md"]],["v-3bf892b9","/guide/automate.html",{title:"Automate installation for other contributors"},["/guide/automate","/guide/automate.md"]],["v-44c2d174","/guide/csharp-script.html",{title:"Using C# code in your git hooks"},["/guide/csharp-script","/guide/csharp-script.md"]],["v-fb0f0066","/guide/getting-started.html",{title:"Getting Started"},["/guide/getting-started","/guide/getting-started.md"]],["v-7b646586","/guide/submodules.html",{title:"Git submodules"},["/guide/submodules","/guide/submodules.md"]],["v-a98fa702","/guide/task-configuration.html",{title:"Configuration"},["/guide/task-configuration","/guide/task-configuration.md"]],["v-74ae684d","/guide/task-runner.html",{title:"Task Runner"},["/guide/task-runner","/guide/task-runner.md"]],["v-c83fcc36","/guide/troubleshoot.html",{title:"Missing Emojis"},["/guide/troubleshoot","/guide/troubleshoot.md"]],["v-3706649a","/404.html",{},["/404"]]],lh=ih.reduce((e,[t,n,r,o])=>(e.push({name:t,path:n,component:qi,meta:r},...o.map(s=>({path:s,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:qi}]),ah=(e,t)=>{const n=pe(()=>hf(At.value.locales,t.currentRoute.value.path)),r=pe(()=>gf(At.value,n.value)),o=pe(()=>Xu(dt.value)),s=pe(()=>cf(dt.value,r.value)),i=pe(()=>lf(s.value,o.value,r.value)),l=pe(()=>ff(dt.value));e.provide(mo,n),e.provide(Vi,r),e.provide($i,o),e.provide(af,s),e.provide(Ui,i),e.provide(Ki,l),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>o.value},$headTitle:{get:()=>s.value},$lang:{get:()=>l.value},$page:{get:()=>dt.value},$routeLocale:{get:()=>n.value},$site:{get:()=>At.value},$siteLocale:{get:()=>r.value},$withBase:{get:()=>wf}})},ch=e=>{e.component("ClientOnly",Wu),e.component("Content",go)},uh=Bc,fh=au,dh=async()=>{const e=uh({name:"VuepressApp",setup(){yf();for(const n of sh)n();return()=>[ae(Hi),...Wd.map(n=>ae(n))]}}),t=Vu({history:fh(rf(At.value.base)),routes:lh,scrollBehavior:(n,r,o)=>o||(n.hash?{el:n.hash}:{top:0})});t.beforeResolve(async(n,r)=>{var o;(n.path!==r.path||r===nt)&&([dt.value]=await Promise.all([Qu(n.name),(o=Fi[n.name])===null||o===void 0?void 0:o.__asyncLoader()]))}),ah(e,t),ch(e);for(const n of Kd)await n({app:e,router:t,siteData:At});return e.use(t),{app:e,router:t}};dh().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{mf as A,Eh as B,wh as C,ae as D,wf as E,Re as F,Wu as G,Yt as H,of as I,rf as J,be as K,tt as L,ph as M,yh as N,tr as O,he as P,gd as Q,Ye as R,An as S,to as T,En as U,Ch as V,zi as W,Mr as X,yd as Y,ve as a,zr as b,Hs as c,dh as createVueApp,mh as d,Br as e,Fe as f,Co as g,Ze as h,Zu as i,pe as j,Y as k,vh as l,gh as m,ho as n,an as o,aa as p,$r as q,Wa as r,Xa as s,Lo as t,df as u,Fs as v,cs as w,nf as x,bh as y,_h as z}; diff --git a/assets/automate.html.18b5ee3d.js b/assets/automate.html.18b5ee3d.js new file mode 100644 index 0000000..91cce8a --- /dev/null +++ b/assets/automate.html.18b5ee3d.js @@ -0,0 +1 @@ +const e={key:"v-3bf892b9",path:"/guide/automate.html",title:"Automate installation for other contributors",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Attach Husky to your project",slug:"attach-husky-to-your-project",children:[]},{level:2,title:"Disable husky in CI/CD pipelines",slug:"disable-husky-in-ci-cd-pipelines",children:[]},{level:2,title:"Manual Attach",slug:"manual-attach",children:[]},{level:2,title:"package.json alternative",slug:"package-json-alternative",children:[]}],git:{updatedTime:1693060964e3},filePathRelative:"guide/automate.md"};export{e as data}; diff --git a/assets/automate.html.f8e0d483.js b/assets/automate.html.f8e0d483.js new file mode 100644 index 0000000..db9b5ac --- /dev/null +++ b/assets/automate.html.f8e0d483.js @@ -0,0 +1,12 @@ +import{d as a}from"./app.22727b9e.js";import{_ as n}from"./plugin-vue_export-helper.21dcd24c.js";const t={},s=a(`

Automate installation for other contributors

Husky.Net brings the dev-dependency concept to the .NET ecosystem.

You can attach husky to your project without adding extra dependencies! This way the other contributors will use your pre-configured tasks automatically.

Attach Husky to your project

To attach Husky to your project, you can use the following command:

dotnet husky attach <path-to-project-file>
+
1

This will add the required configuration to your project file.

check out the Manual Attach section for more details.

Disable husky in CI/CD pipelines

You can set the HUSKY environment variable to 0 in order to disable husky in CI/CD pipelines.

Manual Attach

To manually attach husky to your project, add the below code to one of your projects (.csproj/.vbproj).

<Target Name="husky" BeforeTargets="Restore;CollectPackageReferences" Condition="'$(HUSKY)' != 0">
+   <Exec Command="dotnet tool restore"  StandardOutputImportance="Low" StandardErrorImportance="High"/>
+   <Exec Command="dotnet husky install" StandardOutputImportance="Low" StandardErrorImportance="High"
+         WorkingDirectory="../../" />  <!--Update this to the relative path to your project root dir -->
+</Target>
+

TIP

Make sure to update the working directory depending on your folder structure it should be a relative path to your project root dir

WARNING

Adding the above code to a multiple targeted project will cause husky to run multiple times. e.g <TargetFrameworks>netcoreapp3.1;net5.0;net6.0;net7.0</TargetFrameworks>

to avoid this, you can add the $(IsCrossTargetingBuild)' == 'true' condition to the target. e.g

<Target Name="husky" BeforeTargets="Restore;CollectPackageReferences" Condition="'$(HUSKY)' != 0 and '$(IsCrossTargetingBuild)' == 'true'">
+...
+

package.json alternative

If you are using the npm, add the below code to your package.json file will automatically install husky after the npm install

 "scripts": {
+      "prepare": "dotnet tool restore && dotnet husky install"
+ }
+
1
2
3
`,18);function e(o,p){return s}var l=n(t,[["render",e]]);export{l as default}; diff --git a/assets/back-to-top.8efcbe56.svg b/assets/back-to-top.8efcbe56.svg new file mode 100644 index 0000000..8323678 --- /dev/null +++ b/assets/back-to-top.8efcbe56.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/csharp-script.html.66921e8d.js b/assets/csharp-script.html.66921e8d.js new file mode 100644 index 0000000..076490b --- /dev/null +++ b/assets/csharp-script.html.66921e8d.js @@ -0,0 +1 @@ +const e={key:"v-44c2d174",path:"/guide/csharp-script.html",title:"Using C# code in your git hooks",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Examples",slug:"examples",children:[{level:3,title:"Simple commit message linter",slug:"simple-commit-message-linter",children:[]}]}],git:{updatedTime:1641528435e3},filePathRelative:"guide/csharp-script.md"};export{e as data}; diff --git a/assets/csharp-script.html.b6baa528.js b/assets/csharp-script.html.b6baa528.js new file mode 100644 index 0000000..c9e999f --- /dev/null +++ b/assets/csharp-script.html.b6baa528.js @@ -0,0 +1,37 @@ +import{r as p,o,c,b as s,a as e,F as l,d as n,e as t}from"./app.22727b9e.js";import{_ as r}from"./plugin-vue_export-helper.21dcd24c.js";const u={},i=n(`

Using C# code in your git hooks

You can use task runner exec command to execute a C# script.

e.g

dotnet husky exec <csx-file-path>
+# e.g
+# dotnet husky exec .husky/csx/hello.csx
+
1
2
3

Also, you can use your csx scripts in your tasks.

{
+   "command": "dotnet",
+   "args": ["husky", "exec", ".husky/csx/hello.csx"]
+}
+
1
2
3
4

Examples

Simple commit message linter

This repo is using a csharp script to lint the commit messages, you can check it here:

`,9),k={href:"https://github.com/alirezanet/Husky.Net/blob/master/.husky/csx/commit-lint.csx",target:"_blank",rel:"noopener noreferrer"},m=t("commit-lint.csx"),b=n(`
using System.Text.RegularExpressions;
+
+private var pattern = @"^(?=.{1,90}$)(?:build|feat|ci|chore|docs|fix|perf|refactor|revert|style|test)(?:\\(.+\\))*(?::).{4,}(?:#\\d+)*(?<![\\.\\s])$";
+private var msg = File.ReadAllLines(Args[0])[0];
+
+if (Regex.IsMatch(msg, pattern))
+   return 0;
+
+Console.ForegroundColor = ConsoleColor.Red;
+Console.WriteLine("Invalid commit message");
+Console.ResetColor();
+Console.WriteLine("e.g: 'feat(scope): subject' or 'fix: subject'");
+Console.ForegroundColor = ConsoleColor.Gray;
+Console.WriteLine("more info: https://www.conventionalcommits.org/en/v1.0.0/");
+
+return 1;
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
`,1),d={href:"https://github.com/alirezanet/Husky.Net/blob/master/.husky/commit-msg",target:"_blank",rel:"noopener noreferrer"},h=t("commit-msg "),g=s("em",null,"hook",-1),q=n(`
#!/bin/sh
+. "$(dirname "$0")/_/husky.sh"
+
+dotnet husky run --name "commit-message-linter" --args "$1"
+echo
+echo Great work! \u{1F942}
+echo
+
1
2
3
4
5
6
7
`,1),x={href:"https://github.com/alirezanet/Husky.Net/blob/master/.husky/task-runner.json",target:"_blank",rel:"noopener noreferrer"},y=t("task-runner.json"),_=n(`
   ],
+   "tasks": [
+      {
+         "name": "commit-message-linter",
+         "command": "dotnet",
+         "args": ["husky", "exec", ".husky/csx/commit-lint.csx", "--args", "\${args}"]
+
1
2
3
4
5
6
`,1);function v(f,C){const a=p("ExternalLinkIcon");return o(),c(l,null,[i,s("p",null,[s("a",k,[m,e(a)])]),b,s("p",null,[s("a",d,[h,g,e(a)])]),q,s("p",null,[s("a",x,[y,e(a)])]),_],64)}var N=r(u,[["render",v]]);export{N as default}; diff --git a/assets/getting-started.html.640b3ed8.js b/assets/getting-started.html.640b3ed8.js new file mode 100644 index 0000000..7454553 --- /dev/null +++ b/assets/getting-started.html.640b3ed8.js @@ -0,0 +1,11 @@ +import{r as s,o as l,c as i,b as e,a as t,w as o,F as d,e as a,d as p}from"./app.22727b9e.js";import{_ as u}from"./plugin-vue_export-helper.21dcd24c.js";const h={},m=e("h1",{id:"getting-started",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#getting-started","aria-hidden":"true"},"#"),a(" Getting Started")],-1),g=e("p",null,"Husky.Net is a dotnet tool available in nuget repository.",-1),k={href:"https://www.nuget.org/packages/Husky/",target:"_blank",rel:"noopener noreferrer"},_=a("Husky"),f=e("h2",{id:"installation",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#installation","aria-hidden":"true"},"#"),a(" Installation")],-1),y=e("div",{class:"language-bash ext-sh"},[e("pre",{class:"language-bash"},[e("code",null,[e("span",{class:"token builtin class-name"},"cd"),a(),e("span",{class:"token operator"},"<"),a("Your project root directory"),e("span",{class:"token operator"},">"),a(` +dotnet new tool-manifest +dotnet tool `),e("span",{class:"token function"},"install"),a(` Husky +`)])])],-1),b=e("div",{class:"language-bash ext-sh"},[e("pre",{class:"language-bash"},[e("code",null,[a("dotnet tool "),e("span",{class:"token function"},"install"),a(` --global Husky +`)])])],-1),x=p(`

Setup husky for your project

cd <Your project root directory>
+dotnet husky install
+

TIP

With the global installation, you don't need to add the dotnet prefix to the commands.

Add your first hook

dotnet husky add pre-commit -c "echo 'Husky.Net is awesome!'"
+git add .husky/pre-commit
+

Make a commit

git commit -m "Keep calm and commit"
+# \`echo 'Husky.Net is awesome!'\` will run every time you commit
+
`,7);function v(w,j){const c=s("ExternalLinkIcon"),n=s("CodeGroupItem"),r=s("CodeGroup");return l(),i(d,null,[m,g,e("ul",null,[e("li",null,[e("a",k,[_,t(c)])])]),f,t(r,null,{default:o(()=>[t(n,{title:"local (recommended)"},{default:o(()=>[y]),_:1}),t(n,{title:"global"},{default:o(()=>[b]),_:1})]),_:1}),x],64)}var C=u(h,[["render",v]]);export{C as default}; diff --git a/assets/getting-started.html.a51a07e5.js b/assets/getting-started.html.a51a07e5.js new file mode 100644 index 0000000..a4f0bf7 --- /dev/null +++ b/assets/getting-started.html.a51a07e5.js @@ -0,0 +1 @@ +const t={key:"v-fb0f0066",path:"/guide/getting-started.html",title:"Getting Started",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Installation",slug:"installation",children:[]},{level:2,title:"Setup husky for your project",slug:"setup-husky-for-your-project",children:[]},{level:2,title:"Add your first hook",slug:"add-your-first-hook",children:[]},{level:2,title:"Make a commit",slug:"make-a-commit",children:[]}],git:{updatedTime:1641474529e3},filePathRelative:"guide/getting-started.md"};export{t as data}; diff --git a/assets/index.html.2aaa5aee.js b/assets/index.html.2aaa5aee.js new file mode 100644 index 0000000..cab67b3 --- /dev/null +++ b/assets/index.html.2aaa5aee.js @@ -0,0 +1,5 @@ +import{r,o as c,c as l,a as t,w as a,b as e,F as d,d as u,e as o}from"./app.22727b9e.js";import{_ as h}from"./plugin-vue_export-helper.21dcd24c.js";const _={},p=u('

Contribute to the project

Any kind of contribution is welcome.

start contributing to the project by submitting pull requests

Todos

  • \u26A1 Improve the documentation
  • \u26A1 Add unit-tests

Documentation

Husky.Net documentation is powered by vuePress, All the markdown source files are placed in docs directory.

by running the following commands, you can run the documentation site locally:

',8),m=e("div",{class:"language-cmd ext-cmd line-numbers-mode"},[e("pre",{class:"language-cmd"},[e("code",null,`yarn install +yarn dev +`)]),e("div",{class:"line-numbers"},[e("span",{class:"line-number"},"1"),e("br"),e("span",{class:"line-number"},"2"),e("br")])],-1),b=e("div",{class:"language-cmd ext-cmd line-numbers-mode"},[e("pre",{class:"language-cmd"},[e("code",null,`npm install +npm run dev +`)]),e("div",{class:"line-numbers"},[e("span",{class:"line-number"},"1"),e("br"),e("span",{class:"line-number"},"2"),e("br")])],-1),f=e("h2",{id:"how-to-contribute",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-to-contribute","aria-hidden":"true"},"#"),o(" How to contribute")],-1),g=o("check out the "),x={href:"https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project",target:"_blank",rel:"noopener noreferrer"},k=o("github contributing guide"),y=e("h2",{id:"contributors",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contributors","aria-hidden":"true"},"#"),o(" Contributors")],-1),v={href:"https://github.com/alirezanet",target:"_blank",rel:"noopener noreferrer"},j=o("AliReZa Sabouri"),w={href:"https://github.com/SajjadHosseinPour",target:"_blank",rel:"noopener noreferrer"},C=o("Sajjad Hossein Pour"),A={href:"https://github.com/atifaziz",target:"_blank",rel:"noopener noreferrer"},z=o("Atif Aziz"),G={href:"https://github.com/acesyde",target:"_blank",rel:"noopener noreferrer"},H=o("Pierre Mercier"),I=e("li",null,"Add your name",-1);function N(P,S){const s=r("CodeGroupItem"),i=r("CodeGroup"),n=r("ExternalLinkIcon");return c(),l(d,null,[p,t(i,null,{default:a(()=>[t(s,{title:"yarn"},{default:a(()=>[m]),_:1}),t(s,{title:"npm"},{default:a(()=>[b]),_:1})]),_:1}),f,e("p",null,[g,e("a",x,[k,t(n)])]),y,e("ul",null,[e("li",null,[e("a",v,[j,t(n)])]),e("li",null,[e("a",w,[C,t(n)])]),e("li",null,[e("a",A,[z,t(n)])]),e("li",null,[e("a",G,[H,t(n)])]),I])],64)}var E=h(_,[["render",N]]);export{E as default}; diff --git a/assets/index.html.504c7800.js b/assets/index.html.504c7800.js new file mode 100644 index 0000000..8fe03b2 --- /dev/null +++ b/assets/index.html.504c7800.js @@ -0,0 +1 @@ +import{_ as e}from"./plugin-vue_export-helper.21dcd24c.js";const r={};function _(c,n){return null}var o=e(r,[["render",_]]);export{o as default}; diff --git a/assets/index.html.56e1725b.js b/assets/index.html.56e1725b.js new file mode 100644 index 0000000..5c56b23 --- /dev/null +++ b/assets/index.html.56e1725b.js @@ -0,0 +1 @@ +import{r as n,o as r,c as a,b as e,a as s,F as i,e as o}from"./app.22727b9e.js";import{_ as l}from"./plugin-vue_export-helper.21dcd24c.js";var d="/Husky.Net/assets/workflow.290a20c9.jpg";const c={},h=e("h1",{id:"introduction",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#introduction","aria-hidden":"true"},"#"),o(" Introduction")],-1),u=e("p",null,[e("img",{src:d,alt:"Husky.Net WorkFlow"})],-1),_=e("blockquote",null,[e("p",null,"Husky improves your commits and more \u{1F436} woof!"),e("p",null,"Run linters against staged git files and don't let \u{1F4A9} slip into your code base!")],-1),m=o("These two quotes from "),p={href:"https://github.com/typicode/husky",target:"_blank",rel:"noopener noreferrer"},f=o("husky"),y=o(" and "),k={href:"https://github.com/okonet/lint-staged",target:"_blank",rel:"noopener noreferrer"},g=o("lint-staged"),b=o(" JS tools inspired me to create Husky.Net for dotnet developers. it provides a simple native way to do both also has a lot of other cool features, You can use it to lint your commit messages, run tests, lint/format code, etc... when you commit or push. \u{1F680}\u{1F680}"),w=e("h2",{id:"features",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#features","aria-hidden":"true"},"#"),o(" Features")],-1),v=e("li",null,[o("\u{1F525} It brings the "),e("strong",null,"dev-dependency"),o(" concept to the .NET world!")],-1),x=e("li",null,"\u{1F525} Supports all Git & gitflow hooks",-1),N=e("li",null,"\u{1F525} Internal task runner!",-1),S=e("li",null,"Multiple file states (staged, last-commit, git-files, etc...)",-1),H=e("li",null,"CSharp scripts (csx)",-1),I=e("li",null,"Supports macOS, Linux and Windows",-1),C=e("li",null,"Powered by modern new Git feature (core.hooksPath)",-1),T=e("li",null,"User-define variables",-1),G=o("Compatible with "),j={href:"https://github.com/dotnet/format",target:"_blank",rel:"noopener noreferrer"},L=o("dotnet-format"),W=o(", "),E={href:"https://csharpier.com/",target:"_blank",rel:"noopener noreferrer"},F=o("CSharpier"),A=o(", "),B={href:"https://www.jetbrains.com/help/resharper/ReSharper_Command_Line_Tools.html",target:"_blank",rel:"noopener noreferrer"},R=o("ReSharper command line tools"),U=o(" and other formatting tools"),V=e("li",null,"User-friendly messages",-1),q=e("li",null,"Git GUIs",-1),D=e("li",null,"Custom directories",-1),M=e("li",null,"Monorepo",-1),O=e("p",null,[o("-"),e("em",null,"A lot of features are coming soon, stay tuned! \u{1F441}\uFE0F\u200D\u{1F5E8}\uFE0F\u{1F440}")],-1),P=e("h2",{id:"why-use-hooks-and-husky-net",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-use-hooks-and-husky-net","aria-hidden":"true"},"#"),o(" Why use Hooks and Husky.Net?")],-1),Y=e("p",null,"We, as developers, love platforms like GitHub, GitLab, Atlassian, Azure DevOps etc., as our managed git system and collaboration platform. We also love clean code and keep inventing new linters and rules to enforce it. In my opinion, every commit should allow the codebase to deploy to production. There is nothing worse than commits like \u201Cfixed style errors\u201D or \u201Cfixed build\u201D. These are often small mistakes you want to know as early as possible in your development cycle. You don\u2019t want to break the build for the next developer because he pulled your \u2018mistake\u2019 or waste precious build minutes of your CI server. Say you have asked your teammate to review your code; in the meantime, the build server rejects your code. That means you have to go back and fix this, and your teammate has to come back and possibly review again after the changes (i.e., approvals reset on new commit). Doing so would waste a lot of time and effort.",-1),z=e("p",null,"Husky.Net offers a very simple way to start using git hooks or running certain tasks, write and run custom scripts and more ...",-1);function J(K,Q){const t=n("ExternalLinkIcon");return r(),a(i,null,[h,u,_,e("p",null,[m,e("a",p,[f,s(t)]),y,e("a",k,[g,s(t)]),b]),w,e("ul",null,[v,x,N,S,H,I,C,T,e("li",null,[G,e("a",j,[L,s(t)]),W,e("a",E,[F,s(t)]),A,e("a",B,[R,s(t)]),U]),V,q,D,M]),O,P,Y,z],64)}var $=l(c,[["render",J]]);export{$ as default}; diff --git a/assets/index.html.710bbd8d.js b/assets/index.html.710bbd8d.js new file mode 100644 index 0000000..01595a2 --- /dev/null +++ b/assets/index.html.710bbd8d.js @@ -0,0 +1 @@ +const t={key:"v-42d847c6",path:"/contribution/",title:"Contribute to the project",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Todos",slug:"todos",children:[]},{level:2,title:"Documentation",slug:"documentation",children:[]},{level:2,title:"How to contribute",slug:"how-to-contribute",children:[]},{level:2,title:"Contributors",slug:"contributors",children:[]}],git:{updatedTime:1673097895e3},filePathRelative:"contribution/README.md"};export{t as data}; diff --git a/assets/index.html.80ef201c.js b/assets/index.html.80ef201c.js new file mode 100644 index 0000000..e1f945e --- /dev/null +++ b/assets/index.html.80ef201c.js @@ -0,0 +1 @@ +const t={key:"v-8daa1a0e",path:"/",title:"Welcome",lang:"en-US",frontmatter:{home:!0,title:"Welcome",tagline:"It brings the dev-dependency concept to the .NET world!",actions:[{text:"Get Started",link:"/guide/getting-started.md",type:"primary"},{text:"Introduction",link:"/guide/",type:"secondary"}],features:[{title:"Easy To Use",details:"Just with a few commands you can start using the git hooks to keep your code clean and organized."},{title:"Git hooks",details:"Supports all git and git-flow hooks, powered by modern git features."},{title:"Task Runner",details:"Has a powerful task runner that you can use to manage and run linters, tests, scripts, and more."},{title:"Automate for everyone",details:"You can configure it to automatically run your tasks when other contributors work with your repository."},{title:"Multiple File States",details:"Supports multiple file states like staged, last-commit, git-files, etc, and user-defined states."},{title:"CSharp Script",details:"Supports C# scripting for more complex tasks."}],footer:"MIT Licensed | Copyright \xA9 2022-present AliReZa Sabouri"},excerpt:"",headers:[],git:{updatedTime:1642251873e3},filePathRelative:"README.md"};export{t as data}; diff --git a/assets/index.html.c4b28ab0.js b/assets/index.html.c4b28ab0.js new file mode 100644 index 0000000..4c8d3fe --- /dev/null +++ b/assets/index.html.c4b28ab0.js @@ -0,0 +1 @@ +const e={key:"v-fffb8e28",path:"/guide/",title:"Introduction",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Features",slug:"features",children:[]},{level:2,title:"Why use Hooks and Husky.Net?",slug:"why-use-hooks-and-husky-net",children:[]}],git:{updatedTime:1680598084e3},filePathRelative:"guide/README.md"};export{e as data}; diff --git a/assets/plugin-vue_export-helper.21dcd24c.js b/assets/plugin-vue_export-helper.21dcd24c.js new file mode 100644 index 0000000..aae20ad --- /dev/null +++ b/assets/plugin-vue_export-helper.21dcd24c.js @@ -0,0 +1 @@ +var a=(t,o)=>{const r=t.__vccOpts||t;for(const[e,_]of o)r[e]=_;return r};export{a as _}; diff --git a/assets/search.0782d0d1.svg b/assets/search.0782d0d1.svg new file mode 100644 index 0000000..03d8391 --- /dev/null +++ b/assets/search.0782d0d1.svg @@ -0,0 +1 @@ + diff --git a/assets/style.217a916a.css b/assets/style.217a916a.css new file mode 100644 index 0000000..fbc4595 --- /dev/null +++ b/assets/style.217a916a.css @@ -0,0 +1 @@ +:root{--external-link-icon-color:#aaa}.external-link-icon{position:relative;display:inline-block;color:var(--external-link-icon-color);vertical-align:middle;top:-1px}:root{--medium-zoom-z-index:100;--medium-zoom-bg-color:#ffffff;--medium-zoom-opacity:1}.medium-zoom-overlay{background-color:var(--medium-zoom-bg-color)!important;z-index:var(--medium-zoom-z-index)}.medium-zoom-overlay~img{z-index:calc(var(--medium-zoom-z-index) + 1)}.medium-zoom--opened .medium-zoom-overlay{opacity:var(--medium-zoom-opacity)}:root{--c-brand:#3eaf7c;--c-brand-light:#4abf8a;--c-bg:#ffffff;--c-bg-light:#f3f4f5;--c-bg-lighter:#eeeeee;--c-bg-navbar:var(--c-bg);--c-bg-sidebar:var(--c-bg);--c-bg-arrow:#cccccc;--c-text:#2c3e50;--c-text-accent:var(--c-brand);--c-text-light:#3a5169;--c-text-lighter:#4e6e8e;--c-text-lightest:#6a8bad;--c-text-quote:#999999;--c-border:#eaecef;--c-border-dark:#dfe2e5;--c-tip:#42b983;--c-tip-bg:var(--c-bg-light);--c-tip-title:var(--c-text);--c-tip-text:var(--c-text);--c-tip-text-accent:var(--c-text-accent);--c-warning:#e7c000;--c-warning-bg:#fffae3;--c-warning-title:#ad9000;--c-warning-text:#746000;--c-warning-text-accent:var(--c-text);--c-danger:#cc0000;--c-danger-bg:#ffe0e0;--c-danger-title:#990000;--c-danger-text:#660000;--c-danger-text-accent:var(--c-text);--c-details-bg:#eeeeee;--c-badge-tip:var(--c-tip);--c-badge-warning:var(--c-warning);--c-badge-danger:var(--c-danger);--t-color:.3s ease;--t-transform:.3s ease;--code-bg-color:#282c34;--code-hl-bg-color:rgba(0, 0, 0, .66);--code-ln-color:#9e9e9e;--code-ln-wrapper-width:3.5rem;--font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code:Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height:3.6rem;--navbar-padding-v:.7rem;--navbar-padding-h:1.5rem;--sidebar-width:20rem;--sidebar-width-mobile:calc(var(--sidebar-width) * .82);--content-width:740px;--homepage-width:960px}.back-to-top{--back-to-top-color:var(--c-brand);--back-to-top-color-hover:var(--c-brand-light)}.DocSearch{--docsearch-primary-color:var(--c-brand);--docsearch-text-color:var(--c-text);--docsearch-highlight-color:var(--c-brand);--docsearch-muted-color:var(--c-text-quote);--docsearch-container-background:rgba(9, 10, 17, .8);--docsearch-modal-background:var(--c-bg-light);--docsearch-searchbox-background:var(--c-bg-lighter);--docsearch-searchbox-focus-background:var(--c-bg);--docsearch-searchbox-shadow:inset 0 0 0 2px var(--c-brand);--docsearch-hit-color:var(--c-text-light);--docsearch-hit-active-color:var(--c-bg);--docsearch-hit-background:var(--c-bg);--docsearch-hit-shadow:0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background:var(--c-bg)}.external-link-icon{--external-link-icon-color:var(--c-text-quote)}.medium-zoom-overlay{--medium-zoom-bg-color:var(--c-bg)}#nprogress{--nprogress-color:var(--c-brand)}.pwa-popup{--pwa-popup-text-color:var(--c-text);--pwa-popup-bg-color:var(--c-bg);--pwa-popup-border-color:var(--c-brand);--pwa-popup-shadow:0 4px 16px var(--c-brand);--pwa-popup-btn-text-color:var(--c-bg);--pwa-popup-btn-bg-color:var(--c-brand);--pwa-popup-btn-hover-bg-color:var(--c-brand-light)}.search-box{--search-bg-color:var(--c-bg);--search-accent-color:var(--c-brand);--search-text-color:var(--c-text);--search-border-color:var(--c-border);--search-item-text-color:var(--c-text-lighter);--search-item-focus-bg-color:var(--c-bg-light)}html.dark{--c-brand:#3aa675;--c-brand-light:#349469;--c-bg:#22272e;--c-bg-light:#2b313a;--c-bg-lighter:#262c34;--c-text:#adbac7;--c-text-light:#96a7b7;--c-text-lighter:#8b9eb0;--c-text-lightest:#8094a8;--c-border:#3e4c5a;--c-border-dark:#34404c;--c-tip:#318a62;--c-warning:#ceab00;--c-warning-bg:#7e755b;--c-warning-title:#ceac03;--c-warning-text:#362e00;--c-danger:#940000;--c-danger-bg:#806161;--c-danger-title:#610000;--c-danger-text:#3a0000;--c-details-bg:#323843;--code-hl-bg-color:#363b46;color-scheme:dark}html.dark .DocSearch{--docsearch-logo-color:var(--c-text);--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow:inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, .3);--docsearch-key-gradient:linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73, 76, 106, .5), 0 -4px 8px 0 rgba(0, 0, 0, .2)}body,html{padding:0;margin:0;background-color:var(--c-bg);transition:background-color var(--t-color)}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px}a,p a code{color:var(--c-text-accent)}a{font-weight:500;text-decoration:none;overflow-wrap:break-word}p a code{font-weight:400}code,kbd{font-family:var(--font-family-code)}body,kbd{color:var(--c-text)}kbd{background:var(--c-bg-lighter);border:solid .15rem var(--c-border-dark);border-bottom:solid .25rem var(--c-border-dark);border-radius:.15rem;padding:0 .15em}code{color:var(--c-text-lighter);padding:.25rem .5rem;font-size:.85em;background-color:var(--c-bg-light);border-radius:3px;overflow-wrap:break-word;transition:background-color var(--t-color),color var(--t-color)}blockquote{font-size:1rem;color:var(--c-text-quote);border-left:.2rem solid var(--c-border-dark);margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p,code{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:0}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid var(--c-border)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid var(--c-border-dark)}tr:nth-child(2n){background-color:var(--c-bg-light)}td,th{border:1px solid var(--c-border-dark);padding:.6em 1em}.arrow,.badge{display:inline-block}.arrow{width:0;height:0}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.up{border-bottom:6px solid var(--c-bg-arrow)}.arrow.down{border-top:6px solid var(--c-bg-arrow)}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.right{border-left:6px solid var(--c-bg-arrow)}.arrow.left{border-right:6px solid var(--c-bg-arrow)}.badge{font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:var(--c-bg);vertical-align:top;transition:color var(--t-color),background-color var(--t-color)}.badge.tip{background-color:var(--c-badge-tip)}.badge.warning{background-color:var(--c-badge-warning)}.badge.danger{background-color:var(--c-badge-danger)}.badge+.badge{margin-left:5px}code[class*=language-],pre[class*=language-]{color:#ccc;background:0 0;font-family:var(--font-family-code);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.3rem 1.5rem;margin:.85rem 0;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent;border-radius:0;overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:var(--code-ln-color)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:0 0!important;position:relative;z-index:1}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlight-line{background-color:var(--code-hl-bg-color)}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line:before{content:" ";position:absolute;z-index:2;left:0;top:0;display:block;width:var(--code-ln-wrapper-width);height:100%}div[class*=language-].line-numbers-mode pre{margin-left:var(--code-ln-wrapper-width);padding-left:1rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);text-align:center;color:var(--code-ln-color);padding-top:1.25rem;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers .line-number,div[class*=language-].line-numbers-mode .line-numbers br{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;font-size:.85em;line-height:0}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--code-hl-bg-color)}div[class*=language-].ext-c:before{content:"c"}div[class*=language-].ext-cpp:before{content:"cpp"}div[class*=language-].ext-cs:before{content:"cs"}div[class*=language-].ext-css:before{content:"css"}div[class*=language-].ext-dart:before{content:"dart"}div[class*=language-].ext-docker:before{content:"docker"}div[class*=language-].ext-fs:before{content:"fs"}div[class*=language-].ext-go:before{content:"go"}div[class*=language-].ext-html:before{content:"html"}div[class*=language-].ext-java:before{content:"java"}div[class*=language-].ext-js:before{content:"js"}div[class*=language-].ext-json:before{content:"json"}div[class*=language-].ext-kt:before{content:"kt"}div[class*=language-].ext-less:before{content:"less"}div[class*=language-].ext-makefile:before{content:"makefile"}div[class*=language-].ext-md:before{content:"md"}div[class*=language-].ext-php:before{content:"php"}div[class*=language-].ext-py:before{content:"py"}div[class*=language-].ext-rb:before{content:"rb"}div[class*=language-].ext-rs:before{content:"rs"}div[class*=language-].ext-sass:before{content:"sass"}div[class*=language-].ext-scss:before{content:"scss"}div[class*=language-].ext-sh:before{content:"sh"}div[class*=language-].ext-styl:before{content:"styl"}div[class*=language-].ext-ts:before{content:"ts"}div[class*=language-].ext-toml:before{content:"toml"}div[class*=language-].ext-vue:before{content:"vue"}div[class*=language-].ext-yml:before{content:"yml"}@media (max-width:419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.code-group__nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-bottom:calc(1.7rem - 6px);padding-left:10px;padding-top:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--code-bg-color)}.code-group__ul{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.code-group__nav-tab{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:#ffffffe6;font-weight:600}.code-group__nav-tab:focus{outline:0}.code-group__nav-tab:focus-visible{outline:1px solid rgba(255,255,255,.9)}.code-group__nav-tab-active{border-bottom:var(--c-brand) 1px solid}@media (max-width:419px){.code-group__nav{margin-left:-1.5rem;margin-right:-1.5rem;border-radius:0}}.code-group-item,.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a.router-link-active:after{display:none}.code-group-item__active{display:block}.code-group-item>pre{background-color:orange}.custom-container{transition:color var(--t-color),border-color var(--t-color),background-color var(--t-color)}.custom-container .custom-container-title{font-weight:600;margin-bottom:-.4rem}.custom-container.danger,.custom-container.tip,.custom-container.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.warning{border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.danger{border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:var(--c-details-bg)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:0;cursor:pointer}.home{padding:var(--navbar-height) 2rem 0;max-width:var(--homepage-width);margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .actions,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:var(--c-text-lightest)}.home .hero .action-button{display:inline-block;font-size:1.2rem;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;transition:background-color var(--t-color);box-sizing:border-box}.home .hero .action-button.primary{color:var(--c-bg);background-color:var(--c-brand);border-color:var(--c-brand)}.home .hero .action-button.primary:hover{background-color:var(--c-brand-light)}.home .hero .action-button.secondary{color:var(--c-brand);background-color:var(--c-bg);border-color:var(--c-brand)}.home .hero .action-button.secondary:hover{color:var(--c-bg);background-color:var(--c-brand-light)}.home .features{border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:var(--c-text-light)}.home .feature p,.home .footer{color:var(--c-text-lighter)}.home .footer{padding:2.5rem;border-top:1px solid var(--c-border);text-align:center;transition:border-color var(--t-color)}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .actions,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.page{padding-top:var(--navbar-height);padding-left:var(--sidebar-width)}.navbar,.sidebar{position:fixed;left:0;box-sizing:border-box}.navbar{z-index:20;top:0;right:0;height:var(--navbar-height);border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar);transition:background-color var(--t-color),border-color var(--t-color)}.sidebar{font-size:16px;width:var(--sidebar-width);z-index:10;margin:0;top:var(--navbar-height);bottom:0;border-right:1px solid var(--c-border);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-brand) var(--c-border);background-color:var(--c-bg-sidebar);transition:transform var(--t-transform),background-color var(--t-color),border-color var(--t-color)}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate(5.5px,5.5px)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(2){transform:scaleX(0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate(6px,-6px)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1),.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .page{padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:calc(.5rem - var(--navbar-height));padding-top:calc(1rem + var(--navbar-height));margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-container,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-container,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-container,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-container,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-container,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-container,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}.theme-default-content:not(.custom){max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}@media (max-width:959px){.sidebar{font-size:15px;width:var(--sidebar-width-mobile)}.page{padding-left:var(--sidebar-width-mobile)}}@media (max-width:719px){.sidebar{top:0;padding-top:var(--navbar-height);transform:translate(-100%)}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translate(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}}.navbar{--navbar-line-height:calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );padding:var(--navbar-padding-v) var(--navbar-padding-h);line-height:var(--navbar-line-height)}.navbar .logo{height:var(--navbar-line-height);margin-right:var(--navbar-padding-v);vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--c-text);position:relative}.navbar .navbar-items-wrapper{display:flex;position:absolute;box-sizing:border-box;top:var(--navbar-padding-v);right:var(--navbar-padding-h);height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);white-space:nowrap;font-size:.9rem}.navbar .navbar-items-wrapper .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.navbar-items,.navbar-items a{display:inline-block}.navbar-items a{line-height:1.4rem;color:inherit}.navbar-items a.router-link-active,.navbar-items a:hover{color:var(--c-text-accent)}.navbar-items .navbar-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}.navbar-items .navbar-item:first-child{margin-left:0}@media (max-width:719px){.navbar-items .navbar-item{margin-left:0}}@media (min-width:719px){.navbar-items a.router-link-active,.navbar-items a:hover{color:var(--c-text)}.navbar-item>a.router-link-active,.navbar-item>a:hover{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}}.toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}.toggle-sidebar-button .icon{display:flex;flex-direction:column;justify-content:center;align-items:center;width:1.25rem;height:1.25rem;cursor:inherit}.toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--c-text);transition:transform var(--t-transform)}.toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}@media screen and (max-width:719px){.toggle-sidebar-button{display:block}}.toggle-dark-button{display:flex;margin:auto;margin-left:1rem;border:0;background:0 0;color:var(--c-text);opacity:.8;cursor:pointer}.toggle-dark-button:hover{opacity:1}.toggle-dark-button .icon{width:1.25rem;height:1.25rem}.navbar-dropdown-wrapper{cursor:pointer}.navbar-dropdown-wrapper .navbar-dropdown-title,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:0 0;border:0;font-weight:500;color:var(--c-text)}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:none;font-weight:600;font-size:inherit}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover,.navbar-dropdown-wrapper .navbar-dropdown-title:hover{border-color:transparent}.navbar-dropdown-wrapper .navbar-dropdown-title .arrow,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item{color:inherit;line-height:1.7rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{margin:.45rem 0 0;border-top:1px solid var(--c-border);padding:1rem 0 .45rem;font-size:.9rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a{font-weight:inherit}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper{padding:0;list-style:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper .navbar-dropdown-subitem{font-size:.9em}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active,.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a:hover{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid var(--c-text-accent);border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item:first-child .navbar-dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.navbar-dropdown-wrapper.open .navbar-dropdown-title,.navbar-dropdown-wrapper.open .navbar-dropdown-title-mobile{margin-bottom:.5rem}.navbar-dropdown-wrapper .navbar-dropdown-title{display:none}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:block}.navbar-dropdown-wrapper .navbar-dropdown{transition:height .1s ease-out;overflow:hidden}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{border-top:0;margin-top:0;padding-top:0;padding-bottom:0;font-size:15px;line-height:2rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item>a{font-size:15px;line-height:2rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:720px){.navbar-dropdown-wrapper{height:1.8rem}.navbar-dropdown-wrapper.open .navbar-dropdown,.navbar-dropdown-wrapper:hover .navbar-dropdown{display:block!important}.navbar-dropdown-wrapper.open:blur{display:none}.navbar-dropdown-wrapper .navbar-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--c-bg-navbar);padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.page{padding-bottom:2rem;display:block}.page-meta{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem;overflow:auto}@media (max-width:959px){.page-meta{padding:2rem}}@media (max-width:419px){.page-meta{padding:1.5rem}}.page-meta .meta-item{cursor:default;margin-top:.8rem}.page-meta .meta-item .meta-item-label{font-weight:500;color:var(--c-text-lighter)}.page-meta .meta-item .meta-item-info{font-weight:400;color:var(--c-text-quote)}.page-meta .edit-link{display:inline-block;margin-right:.25rem}.page-meta .last-updated{float:right}@media (max-width:719px){.page-meta .last-updated{font-size:.8em;float:none}.page-meta .contributors{font-size:.8em}}.page-nav{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem 2rem;padding-bottom:0}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding-top:1rem;overflow:auto}.page-nav .prev a:before{content:"\2190"}.page-nav .next{float:right}.page-nav .next a:after{content:"\2192"}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .navbar-items{display:none;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color);padding:.5rem 0 .75rem}.sidebar .navbar-items a{font-weight:600}.sidebar .navbar-items .navbar-item{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar .sidebar-items{padding:1.5rem 0}@media (max-width:719px){.sidebar .navbar-items{display:block}.sidebar .navbar-items .navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar .sidebar-items{padding:1rem 0}}.sidebar-item{cursor:default}.sidebar-item.sidebar-heading{color:var(--c-text);transition:color .15s ease;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-item.sidebar-heading.collapsible,a.sidebar-item{cursor:pointer}.sidebar-item.sidebar-heading.collapsible+.sidebar-item-children{transition:height .1s ease-out;overflow:hidden;margin-bottom:.75rem}.sidebar-item.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-item:not(.sidebar-heading){font-size:1em;font-weight:400;display:inline-block;color:var(--c-text);border-left:.25rem solid transparent;margin:0;padding:.35rem 1rem .35rem 2rem;line-height:1.4;width:100%;box-sizing:border-box}.sidebar-item:not(.sidebar-heading).active{font-weight:600;color:var(--c-text-accent);border-left-color:var(--c-text-accent)}.sidebar-item:not(.sidebar-heading)+.sidebar-item-children{padding-left:1rem;font-size:.95em}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading).active{font-weight:500;border-left-color:transparent}a.sidebar-item:hover{color:var(--c-text-accent)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.table-of-contents .badge{vertical-align:middle}.dropdown-enter-from,.dropdown-leave-to{height:0!important}.fade-slide-y-enter-active{transition:all .3s ease}.fade-slide-y-leave-active{transition:all .3s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{transform:translateY(10px);opacity:0}:root{scroll-behavior:smooth}:root{--search-bg-color:#ffffff;--search-accent-color:#3eaf7c;--search-text-color:#2c3e50;--search-border-color:#eaecef;--search-item-text-color:#5d81a5;--search-item-focus-bg-color:#f3f4f5;--search-input-width:8rem;--search-result-width:20rem}.search-box{display:inline-block;position:relative;margin-left:1rem}.search-box input{cursor:text;width:var(--search-input-width);height:2rem;color:var(--search-text-color);display:inline-block;border:1px solid var(--search-border-color);border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:0;transition:all ease .3s;background:var(--search-bg-color) url(/Husky.Net/assets/search.0782d0d1.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:var(--search-accent-color)}.search-box .suggestions{background:var(--search-bg-color);width:var(--search-result-width);position:absolute;top:2rem;right:0;border:1px solid var(--search-border-color);border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion.focus{background-color:var(--search-item-focus-bg-color)}.search-box .suggestion.focus a{color:var(--search-accent-color)}.search-box .suggestion a{white-space:normal;color:var(--search-item-text-color)}.search-box .suggestion .page-title{font-weight:600}.search-box .suggestion .page-header{font-size:.9em;margin-left:.25em}@media (max-width:720px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (max-width:420px){.search-box input:focus{width:8rem}.search-box .suggestions{width:calc(100vw - 4rem);right:-.5rem}}:root{--back-to-top-z-index:5;--back-to-top-color:#3eaf7c;--back-to-top-color-hover:#71cda3}.back-to-top{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;height:1.2rem;background-color:var(--back-to-top-color);-webkit-mask:url(/Husky.Net/assets/back-to-top.8efcbe56.svg) no-repeat;mask:url(/Husky.Net/assets/back-to-top.8efcbe56.svg) no-repeat;z-index:var(--back-to-top-z-index)}.back-to-top:hover{background-color:var(--back-to-top-color-hover)}@media (max-width:959px){.back-to-top{display:none}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--nprogress-color:#29d;--nprogress-z-index:1031}#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px var(--nprogress-color),0 0 5px var(--nprogress-color);opacity:1;transform:rotate(3deg) translateY(-4px)} diff --git a/assets/submodules.html.2b2978a2.js b/assets/submodules.html.2b2978a2.js new file mode 100644 index 0000000..9158b36 --- /dev/null +++ b/assets/submodules.html.2b2978a2.js @@ -0,0 +1,8 @@ +import{r as u,o as l,c as p,b as a,a as s,w as e,F as c,e as t,d as o}from"./app.22727b9e.js";import{_ as i}from"./plugin-vue_export-helper.21dcd24c.js";const d={},r=a("h1",{id:"git-submodules",tabindex:"-1"},[a("a",{class:"header-anchor",href:"#git-submodules","aria-hidden":"true"},"#"),t(" Git submodules")],-1),h=a("p",null,"Husky handles git submodules in two ways:",-1),k=a("li",null,"The project hooks and husky steps are completely ignored when the project is a git submodule.",-1),g=t("The hooks are installed in the submodule's git directory. This is the default mode following the step in "),m=t("Installation"),_=t(" and "),y=t("Attach Husky to your project"),b=t(" should get you up and running."),q=o(`

Installing husky

When running dotnet husky install Husky will alert you when it detects a submodule and tell you where it will attach the hooks:

Submodule detected, attaching .../Repository/Project/mySubmodule/.husky hooks to .../Repository/Project/.git/modules/mySubmodule
+

WARNING

The submodule hooks will only be executed when you're issuing git commands from inside the submodule folder.

Ignoring submodule install

For Husky to ignore installing when in a submodule, call dotnet husky install --ignore-submodule. This will make the install step a no-op. No git configurations will be applied and your hooks won't be attached.

A message will alert you when this is happening:

Submodule detected and [--ignore-when-submodule] is set, skipping install target
+

Attaching husky

`,9),v=t("The "),f=a("code",null,"attach",-1),w=t(" command offers a "),x=a("code",null,"--ignore-submodule",-1),I=t(" options that generates an MsBuild target you can skip by setting the "),S=a("code",null,"IgnoreSubmodule",-1),T=t(" variable to "),j=a("code",null,"0",-1),C=t(" similar to the "),H=a("code",null,"Husky",-1),N=t(" variable, see "),R=t("Disable husky in CI/CD pipelines"),B=o(`

The generated block will look something like this, If you're attaching husky manually copy the target to your .csproj and adjust WorkingDirectory accordingly.

<Target Name="husky" BeforeTargets="Restore;CollectPackageReferences" Condition="'$(HUSKY)' != 0  and '$(IgnoreSubmodule)' != 0">
+   <Exec Command="dotnet tool restore"  StandardOutputImportance="Low" StandardErrorImportance="High"/>
+   <Exec Command="dotnet husky install --ignore-submodule" StandardOutputImportance="Low" StandardErrorImportance="High"
+         WorkingDirectory="../../" />  <!--Update this to the relative path to your project root dir -->
+</Target>
+

TIP

If you want your submodule hooks ignored but still want the MsBuild target to run, remove the and '$(IgnoreSubmodule)' != 0 condition. dotnet husky install --ignore-submodule is enough to prevent the installation of the hooks.

`,3);function E(A,D){const n=u("RouterLink");return l(),p(c,null,[r,h,a("ul",null,[k,a("li",null,[g,s(n,{to:"/guide/getting-started.md/#installation"},{default:e(()=>[m]),_:1}),_,s(n,{to:"/guide/automate.md/#attach-husky-to-your-project"},{default:e(()=>[y]),_:1}),b])]),q,a("p",null,[v,f,w,x,I,S,T,j,C,H,N,s(n,{to:"/guide/automate.html#disable-husky-in-ci-cd-pipelines"},{default:e(()=>[R]),_:1})]),B],64)}var V=i(d,[["render",E]]);export{V as default}; diff --git a/assets/submodules.html.7c452965.js b/assets/submodules.html.7c452965.js new file mode 100644 index 0000000..771fda0 --- /dev/null +++ b/assets/submodules.html.7c452965.js @@ -0,0 +1 @@ +const e={key:"v-7b646586",path:"/guide/submodules.html",title:"Git submodules",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Installing husky",slug:"installing-husky",children:[{level:3,title:"Ignoring submodule install",slug:"ignoring-submodule-install",children:[]}]},{level:2,title:"Attaching husky",slug:"attaching-husky",children:[]}],git:{updatedTime:1693060964e3},filePathRelative:"guide/submodules.md"};export{e as data}; diff --git a/assets/task-configuration.html.9ea86763.js b/assets/task-configuration.html.9ea86763.js new file mode 100644 index 0000000..ec36e6b --- /dev/null +++ b/assets/task-configuration.html.9ea86763.js @@ -0,0 +1,17 @@ +import{r as n,o as a,c as r,b as t,a as o,F as d,d as e,e as l}from"./app.22727b9e.js";import{_ as i}from"./plugin-vue_export-helper.21dcd24c.js";const c={},p=e('

Configuration

Each task in task-runner.json is a JSON object with the following properties:

nameoptionaltypedefaultdescription
commandfalsestring-path to the executable file or script or executable name
argstrue[string array]-command arguments
includetrue[array of glob]**/*glob pattern to select files
nametruestringcommandname of the task (recommended)
grouptruestring-group of the task (usually it should be the hook name)
branchtruestring (regex)-run task on specific branches only
pathModetrue[absolute, relative]relativefile path style (relative or absolute)
cwdtruestringproject root directorycurrent working directory for the command, can be relative or absolute
outputtrue[always, verbose, never]alwaysoutput log level
excludetrue[array of glob]-glob pattern to exclude files
filteringRuletrue[variable, staged]variablematch include/exclude against the used variables or git staged files
windowstrueobject-overrides all the above settings for windows

Glob patterns

Husky.Net supports the standard dotnet FileSystemGlobbing patterns for include or exclude task configurations. The patterns that are specified in the include and exclude can use the following formats to match multiple files or directories.

  • Exact directory or file name
    • some-file.txt
    • path/to/file.txt
  • Wildcards * in file and directory names that represent zero to many characters not including separator characters.
ValueDescription
*.txtAll files with .txt file extension.
.All files with an extension.
*All files in top-level directory.
.*File names beginning with '.'.
wordAll files with 'word' in the filename.
readme.*All files named 'readme' with any file extension.
styles/*.cssAll files with extension '.css' in the directory 'styles/'.
scripts//All files in 'scripts/' or one level of subdirectory under 'scripts/'.
images*/*All files in a folder with name that is or begins with 'images'.
  • Arbitrary directory depth (/**/).
ValueDescription
*/All files in any subdirectory.
dir/**/*All files in any subdirectory under 'dir/'.
  • Relative paths.

To match all files in a directory named "shared" at the sibling level to the base directory use ../shared/*.

',11),u={href:"https://docs.microsoft.com/en-us/dotnet/core/extensions/file-globbing#pattern-formats",target:"_blank",rel:"noopener noreferrer"},h=l("Read more here"),b=e(`

Variables

There are some variables that you can use in your task arguments (args).

  • \${staged}
    • returns the list of currently staged files
  • \${last-commit}
    • returns last commit changed files
  • \${git-files}
    • returns the output of (git ls-files)
  • \${all-files}
    • returns the list of matched files using include/exclude, be careful with this variable, it will return all the files if you don't specify include or exclude
  • \${args}
    • returns the arguments passed directly to the husky run command using --args option

e.g.

"args": [ "\${staged}" ]
+

Custom variables

You can define your own variables by adding a task to the variables section in task-runner.json.

e.g.

defining custom \${root-dir-files} variable to access root directory files

{
+   "variables": [
+      {
+         "name": "root-dir-files",
+         "command": "cmd",
+         "args": ["/c", "dir", "/b"]
+      }
+   ],
+   "tasks": [
+      {
+         "command": "cmd",
+         "args": ["/c", "echo", "\${root-dir-files}"]
+      }
+   ]
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
`,10);function m(g,f){const s=n("ExternalLinkIcon");return a(),r(d,null,[p,t("p",null,[t("a",u,[h,o(s)])]),b],64)}var q=i(c,[["render",m]]);export{q as default}; diff --git a/assets/task-configuration.html.a73375a6.js b/assets/task-configuration.html.a73375a6.js new file mode 100644 index 0000000..ff14ace --- /dev/null +++ b/assets/task-configuration.html.a73375a6.js @@ -0,0 +1 @@ +const e={key:"v-a98fa702",path:"/guide/task-configuration.html",title:"Configuration",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Glob patterns",slug:"glob-patterns",children:[]},{level:2,title:"Variables",slug:"variables",children:[{level:3,title:"Custom variables",slug:"custom-variables",children:[]}]}],git:{updatedTime:1718560437e3},filePathRelative:"guide/task-configuration.md"};export{e as data}; diff --git a/assets/task-runner.html.5a8991f3.js b/assets/task-runner.html.5a8991f3.js new file mode 100644 index 0000000..dc7057a --- /dev/null +++ b/assets/task-runner.html.5a8991f3.js @@ -0,0 +1 @@ +const e={key:"v-74ae684d",path:"/guide/task-runner.html",title:"Task Runner",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Why task runner?",slug:"why-task-runner",children:[]},{level:2,title:"task-runner.json",slug:"task-runner-json",children:[]}],git:{updatedTime:1718490285e3},filePathRelative:"guide/task-runner.md"};export{e as data}; diff --git a/assets/task-runner.html.9b743ad8.js b/assets/task-runner.html.9b743ad8.js new file mode 100644 index 0000000..1254633 --- /dev/null +++ b/assets/task-runner.html.9b743ad8.js @@ -0,0 +1,83 @@ +import{d as n}from"./app.22727b9e.js";import{_ as s}from"./plugin-vue_export-helper.21dcd24c.js";const a={},t=n(`

Task Runner

Why task runner?

Linting makes more sense when run before committing your code. By doing so you can ensure no errors go into the repository and enforce code style. But running a lint process on a whole project is slow, and linting results can be irrelevant. Ultimately you only want to lint files that will be committed.

task-runner.json

After installation, you must have a task-runner.json file in your .husky directory that you can use to define your tasks.

you can run and test your tasks with dotnet husky run command. Once you are sure that your tasks are working properly, you can add it to the hook.

e.g

dotnet husky add pre-commit -c "dotnet husky run --group pre-commit"
+
A real-world example.
{
+   "$schema": "https://alirezanet.github.io/Husky.Net/schema.json",
+   "tasks": [
+      {
+         "name": "dotnet-format",
+         "group": "pre-commit",
+         "command": "dotnet",
+         "args": ["dotnet-format", "--include", "\${staged}"],
+         "include": ["**/*.cs", "**/*.vb"]
+      },
+      {
+         "name": "commit-message-linter",
+         "command": "dotnet",
+         "args": [
+            "husky",
+            "exec",
+            ".husky/csx/commit-lint.csx",
+            "--args",
+            "\${args}"
+         ]
+      },
+      {
+         "name": "warning-check",
+         "command": "dotnet",
+         "group": "pre-push",
+         "args": ["build", "/warnaserror"],
+         "include": ["**/*.cs", "**/*.vb"]
+      },
+      {
+         "name": "eslint",
+         "group": "pre-commit",
+         "pathMode": "absolute",
+         "cwd": "Client",
+         "command": "npm",
+         "args": ["run", "lint", "\${staged}"],
+         "include": ["**/*.ts", "**/*.vue", "**/*.js"]
+      },
+      {
+         "name": "prettier",
+         "group": "pre-commit",
+         "pathMode": "absolute",
+         "cwd": "Client",
+         "command": "npx",
+         "args": ["prettier", "--write", "\${staged}"],
+         "include": [
+            "**/*.ts",
+            "**/*.vue",
+            "**/*.js",
+            "**/*.json",
+            "**/*.yml",
+            "**/*.css",
+            "**/*.scss"
+         ]
+      },
+      {
+         "name": "Welcome",
+         "output": "always",
+         "command": "bash",
+         "args": ["-c", "echo Nice work! \u{1F942}"],
+         "windows": {
+            "command": "cmd",
+            "args": ["/c", "echo Nice work! \u{1F942}"]
+         }
+      },
+      {
+         "name": "Run JB Clean Up Code",
+         "command": "cmd",
+         "pathMode": "relative",
+         "args": [
+           "/c",
+           "dotnet",
+           "jb",
+           "cleanupcode",
+           "proj.sln",
+           "--profile=Team: Full Cleanup",
+           "--include=\${args}"
+         ],
+         "group": "pre-commit"
+      }
+   ]
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
`,9);function p(o,e){return t}var r=s(a,[["render",p]]);export{r as default}; diff --git a/assets/troubleshoot.html.42443789.js b/assets/troubleshoot.html.42443789.js new file mode 100644 index 0000000..3c1a53b --- /dev/null +++ b/assets/troubleshoot.html.42443789.js @@ -0,0 +1 @@ +import{r as s,o as i,c as r,b as e,a as n,F as a,e as t,d as l}from"./app.22727b9e.js";import{_ as d}from"./plugin-vue_export-helper.21dcd24c.js";var c="/Husky.Net/assets/without_emojis.375b51ee.png",h="/Husky.Net/assets/with_emojis.4821a031.png";const u={},_=e("h1",{id:"missing-emojis",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#missing-emojis","aria-hidden":"true"},"#"),t(" Missing Emojis")],-1),m=e("p",null,[t("If emojies are missing when you use "),e("code",null,"Husky.Net"),t(" under Windows environment you can check these points below :")],-1),p=t("You have the latest version of "),g={href:"https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701#activetab=pivot:overviewtab",target:"_blank",rel:"noopener noreferrer"},f=t("Windows Terminal"),b=t("The font used by the terminal is a "),w={href:"https://github.com/powerline/fonts",target:"_blank",rel:"noopener noreferrer"},v=t("powerline"),k=t(" or a "),y={href:"https://www.nerdfonts.com/",target:"_blank",rel:"noopener noreferrer"},j=t("nerd fonts"),x=e("li",null,[t("You have enable the new UTF-8 option in Windows settings "),e("ol",null,[e("li",null,[t("Go to the "),e("a",{href:"ms-settings:regionlanguage"},"Language Settings")]),e("li",null,[t("Administrative language settings > Change system locale > Check "),e("code",null,"Beta: Use Unicode UTF-8 for worldwide language support")]),e("li",null,"Restart your computer")])],-1),N=l('
BeforeAfter
Without emojisWith emojis

Disabling Emojis

If none of the above solutions worked, you can disable husky unicode characters by setting the HUSKY_NOUNICODE environment variable to true or use the no-unicode or -u option after husky run command.

',3);function E(U,B){const o=s("ExternalLinkIcon");return i(),r(a,null,[_,m,e("ul",null,[e("li",null,[p,e("a",g,[f,n(o)])]),e("li",null,[b,e("a",w,[v,n(o)]),k,e("a",y,[j,n(o)])]),x]),N],64)}var W=d(u,[["render",E]]);export{W as default}; diff --git a/assets/troubleshoot.html.5431d5aa.js b/assets/troubleshoot.html.5431d5aa.js new file mode 100644 index 0000000..127e558 --- /dev/null +++ b/assets/troubleshoot.html.5431d5aa.js @@ -0,0 +1 @@ +const e={key:"v-c83fcc36",path:"/guide/troubleshoot.html",title:"Missing Emojis",lang:"en-US",frontmatter:{},excerpt:"",headers:[{level:2,title:"Disabling Emojis",slug:"disabling-emojis",children:[]}],git:{updatedTime:1659123368e3},filePathRelative:"guide/troubleshoot.md"};export{e as data}; diff --git a/assets/with_emojis.4821a031.png b/assets/with_emojis.4821a031.png new file mode 100644 index 0000000..302e07c Binary files /dev/null and b/assets/with_emojis.4821a031.png differ diff --git a/assets/without_emojis.375b51ee.png b/assets/without_emojis.375b51ee.png new file mode 100644 index 0000000..74320bf Binary files /dev/null and b/assets/without_emojis.375b51ee.png differ diff --git a/assets/workflow.290a20c9.jpg b/assets/workflow.290a20c9.jpg new file mode 100644 index 0000000..0097d14 Binary files /dev/null and b/assets/workflow.290a20c9.jpg differ diff --git a/contribution/index.html b/contribution/index.html new file mode 100644 index 0000000..c610b0e --- /dev/null +++ b/contribution/index.html @@ -0,0 +1,19 @@ + + + + + + + Contribute to the project | Husky.Net + + + + +

Contribute to the project

Any kind of contribution is welcome.

start contributing to the project by submitting pull requests

Todos

  • ⚡ Improve the documentation
  • ⚡ Add unit-tests

Documentation

Husky.Net documentation is powered by vuePress, All the markdown source files are placed in docs directory.

by running the following commands, you can run the documentation site locally:

yarn install
+yarn dev
+
1
2
npm install
+npm run dev
+
1
2

How to contribute

check out the github contributing guideopen in new window

Contributors

+ + + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..e6af269 Binary files /dev/null and b/favicon.ico differ diff --git a/guide/automate.html b/guide/automate.html new file mode 100644 index 0000000..8dd61a0 --- /dev/null +++ b/guide/automate.html @@ -0,0 +1,26 @@ + + + + + + + Automate installation for other contributors | Husky.Net + + + + +

Automate installation for other contributors

Husky.Net brings the dev-dependency concept to the .NET ecosystem.

You can attach husky to your project without adding extra dependencies! This way the other contributors will use your pre-configured tasks automatically.

Attach Husky to your project

To attach Husky to your project, you can use the following command:

dotnet husky attach <path-to-project-file>
+
1

This will add the required configuration to your project file.

check out the Manual Attach section for more details.

Disable husky in CI/CD pipelines

You can set the HUSKY environment variable to 0 in order to disable husky in CI/CD pipelines.

Manual Attach

To manually attach husky to your project, add the below code to one of your projects (.csproj/.vbproj).

<Target Name="husky" BeforeTargets="Restore;CollectPackageReferences" Condition="'$(HUSKY)' != 0">
+   <Exec Command="dotnet tool restore"  StandardOutputImportance="Low" StandardErrorImportance="High"/>
+   <Exec Command="dotnet husky install" StandardOutputImportance="Low" StandardErrorImportance="High"
+         WorkingDirectory="../../" />  <!--Update this to the relative path to your project root dir -->
+</Target>
+

TIP

Make sure to update the working directory depending on your folder structure it should be a relative path to your project root dir

WARNING

Adding the above code to a multiple targeted project will cause husky to run multiple times. e.g <TargetFrameworks>netcoreapp3.1;net5.0;net6.0;net7.0</TargetFrameworks>

to avoid this, you can add the $(IsCrossTargetingBuild)' == 'true' condition to the target. e.g

<Target Name="husky" BeforeTargets="Restore;CollectPackageReferences" Condition="'$(HUSKY)' != 0 and '$(IsCrossTargetingBuild)' == 'true'">
+...
+

package.json alternative

If you are using the npm, add the below code to your package.json file will automatically install husky after the npm install

 "scripts": {
+      "prepare": "dotnet tool restore && dotnet husky install"
+ }
+
1
2
3
+ + + diff --git a/guide/csharp-script.html b/guide/csharp-script.html new file mode 100644 index 0000000..6e77d68 --- /dev/null +++ b/guide/csharp-script.html @@ -0,0 +1,51 @@ + + + + + + + Using C# code in your git hooks | Husky.Net + + + + +

Using C# code in your git hooks

You can use task runner exec command to execute a C# script.

e.g

dotnet husky exec <csx-file-path>
+# e.g
+# dotnet husky exec .husky/csx/hello.csx
+
1
2
3

Also, you can use your csx scripts in your tasks.

{
+   "command": "dotnet",
+   "args": ["husky", "exec", ".husky/csx/hello.csx"]
+}
+
1
2
3
4

Examples

Simple commit message linter

This repo is using a csharp script to lint the commit messages, you can check it here:

commit-lint.csxopen in new window

using System.Text.RegularExpressions;
+
+private var pattern = @"^(?=.{1,90}$)(?:build|feat|ci|chore|docs|fix|perf|refactor|revert|style|test)(?:\(.+\))*(?::).{4,}(?:#\d+)*(?<![\.\s])quot;;
+private var msg = File.ReadAllLines(Args[0])[0];
+
+if (Regex.IsMatch(msg, pattern))
+   return 0;
+
+Console.ForegroundColor = ConsoleColor.Red;
+Console.WriteLine("Invalid commit message");
+Console.ResetColor();
+Console.WriteLine("e.g: 'feat(scope): subject' or 'fix: subject'");
+Console.ForegroundColor = ConsoleColor.Gray;
+Console.WriteLine("more info: https://www.conventionalcommits.org/en/v1.0.0/");
+
+return 1;
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

commit-msg hookopen in new window

#!/bin/sh
+. "$(dirname "$0")/_/husky.sh"
+
+dotnet husky run --name "commit-message-linter" --args "$1"
+echo
+echo Great work! 🥂
+echo
+
1
2
3
4
5
6
7

task-runner.jsonopen in new window

   ],
+   "tasks": [
+      {
+         "name": "commit-message-linter",
+         "command": "dotnet",
+         "args": ["husky", "exec", ".husky/csx/commit-lint.csx", "--args", "${args}"]
+
1
2
3
4
5
6
+ + + diff --git a/guide/getting-started.html b/guide/getting-started.html new file mode 100644 index 0000000..80d1234 --- /dev/null +++ b/guide/getting-started.html @@ -0,0 +1,25 @@ + + + + + + + Getting Started | Husky.Net + + + + +

Getting Started

Husky.Net is a dotnet tool available in nuget repository.

Installation

cd <Your project root directory>
+dotnet new tool-manifest
+dotnet tool install Husky
+
dotnet tool install --global Husky
+

Setup husky for your project

cd <Your project root directory>
+dotnet husky install
+

TIP

With the global installation, you don't need to add the dotnet prefix to the commands.

Add your first hook

dotnet husky add pre-commit -c "echo 'Husky.Net is awesome!'"
+git add .husky/pre-commit
+

Make a commit

git commit -m "Keep calm and commit"
+# `echo 'Husky.Net is awesome!'` will run every time you commit
+
+ + + diff --git a/guide/index.html b/guide/index.html new file mode 100644 index 0000000..0d2d85e --- /dev/null +++ b/guide/index.html @@ -0,0 +1,15 @@ + + + + + + + Introduction | Husky.Net + + + + +

Introduction

Husky.Net WorkFlow

Husky improves your commits and more 🐶 woof!

Run linters against staged git files and don't let 💩 slip into your code base!

These two quotes from huskyopen in new window and lint-stagedopen in new window JS tools inspired me to create Husky.Net for dotnet developers. it provides a simple native way to do both also has a lot of other cool features, You can use it to lint your commit messages, run tests, lint/format code, etc... when you commit or push. 🚀🚀

Features

-A lot of features are coming soon, stay tuned! 👁️‍🗨️👀

Why use Hooks and Husky.Net?

We, as developers, love platforms like GitHub, GitLab, Atlassian, Azure DevOps etc., as our managed git system and collaboration platform. We also love clean code and keep inventing new linters and rules to enforce it. In my opinion, every commit should allow the codebase to deploy to production. There is nothing worse than commits like “fixed style errors” or “fixed build”. These are often small mistakes you want to know as early as possible in your development cycle. You don’t want to break the build for the next developer because he pulled your ‘mistake’ or waste precious build minutes of your CI server. Say you have asked your teammate to review your code; in the meantime, the build server rejects your code. That means you have to go back and fix this, and your teammate has to come back and possibly review again after the changes (i.e., approvals reset on new commit). Doing so would waste a lot of time and effort.

Husky.Net offers a very simple way to start using git hooks or running certain tasks, write and run custom scripts and more ...

+ + + diff --git a/guide/submodules.html b/guide/submodules.html new file mode 100644 index 0000000..dc87eae --- /dev/null +++ b/guide/submodules.html @@ -0,0 +1,22 @@ + + + + + + + Git submodules | Husky.Net + + + + +

Git submodules

Husky handles git submodules in two ways:

  • The project hooks and husky steps are completely ignored when the project is a git submodule.
  • The hooks are installed in the submodule's git directory. This is the default mode following the step in Installation and Attach Husky to your project should get you up and running.

Installing husky

When running dotnet husky install Husky will alert you when it detects a submodule and tell you where it will attach the hooks:

Submodule detected, attaching .../Repository/Project/mySubmodule/.husky hooks to .../Repository/Project/.git/modules/mySubmodule
+

WARNING

The submodule hooks will only be executed when you're issuing git commands from inside the submodule folder.

Ignoring submodule install

For Husky to ignore installing when in a submodule, call dotnet husky install --ignore-submodule. This will make the install step a no-op. No git configurations will be applied and your hooks won't be attached.

A message will alert you when this is happening:

Submodule detected and [--ignore-when-submodule] is set, skipping install target
+

Attaching husky

The attach command offers a --ignore-submodule options that generates an MsBuild target you can skip by setting the IgnoreSubmodule variable to 0 similar to the Husky variable, see Disable husky in CI/CD pipelines

The generated block will look something like this, If you're attaching husky manually copy the target to your .csproj and adjust WorkingDirectory accordingly.

<Target Name="husky" BeforeTargets="Restore;CollectPackageReferences" Condition="'$(HUSKY)' != 0  and '$(IgnoreSubmodule)' != 0">
+   <Exec Command="dotnet tool restore"  StandardOutputImportance="Low" StandardErrorImportance="High"/>
+   <Exec Command="dotnet husky install --ignore-submodule" StandardOutputImportance="Low" StandardErrorImportance="High"
+         WorkingDirectory="../../" />  <!--Update this to the relative path to your project root dir -->
+</Target>
+

TIP

If you want your submodule hooks ignored but still want the MsBuild target to run, remove the and '$(IgnoreSubmodule)' != 0 condition. dotnet husky install --ignore-submodule is enough to prevent the installation of the hooks.

+ + + diff --git a/guide/task-configuration.html b/guide/task-configuration.html new file mode 100644 index 0000000..52bb1f8 --- /dev/null +++ b/guide/task-configuration.html @@ -0,0 +1,31 @@ + + + + + + + Configuration | Husky.Net + + + + +

Configuration

Each task in task-runner.json is a JSON object with the following properties:

nameoptionaltypedefaultdescription
commandfalsestring-path to the executable file or script or executable name
argstrue[string array]-command arguments
includetrue[array of glob]**/*glob pattern to select files
nametruestringcommandname of the task (recommended)
grouptruestring-group of the task (usually it should be the hook name)
branchtruestring (regex)-run task on specific branches only
pathModetrue[absolute, relative]relativefile path style (relative or absolute)
cwdtruestringproject root directorycurrent working directory for the command, can be relative or absolute
outputtrue[always, verbose, never]alwaysoutput log level
excludetrue[array of glob]-glob pattern to exclude files
filteringRuletrue[variable, staged]variablematch include/exclude against the used variables or git staged files
windowstrueobject-overrides all the above settings for windows

Glob patterns

Husky.Net supports the standard dotnet FileSystemGlobbing patterns for include or exclude task configurations. The patterns that are specified in the include and exclude can use the following formats to match multiple files or directories.

  • Exact directory or file name
    • some-file.txt
    • path/to/file.txt
  • Wildcards * in file and directory names that represent zero to many characters not including separator characters.
ValueDescription
*.txtAll files with .txt file extension.
.All files with an extension.
*All files in top-level directory.
.*File names beginning with '.'.
wordAll files with 'word' in the filename.
readme.*All files named 'readme' with any file extension.
styles/*.cssAll files with extension '.css' in the directory 'styles/'.
scripts//All files in 'scripts/' or one level of subdirectory under 'scripts/'.
images*/*All files in a folder with name that is or begins with 'images'.
  • Arbitrary directory depth (/**/).
ValueDescription
*/All files in any subdirectory.
dir/**/*All files in any subdirectory under 'dir/'.
  • Relative paths.

To match all files in a directory named "shared" at the sibling level to the base directory use ../shared/*.

Read more hereopen in new window

Variables

There are some variables that you can use in your task arguments (args).

  • ${staged}
    • returns the list of currently staged files
  • ${last-commit}
    • returns last commit changed files
  • ${git-files}
    • returns the output of (git ls-files)
  • ${all-files}
    • returns the list of matched files using include/exclude, be careful with this variable, it will return all the files if you don't specify include or exclude
  • ${args}
    • returns the arguments passed directly to the husky run command using --args option

e.g.

"args": [ "${staged}" ]
+

Custom variables

You can define your own variables by adding a task to the variables section in task-runner.json.

e.g.

defining custom ${root-dir-files} variable to access root directory files

{
+   "variables": [
+      {
+         "name": "root-dir-files",
+         "command": "cmd",
+         "args": ["/c", "dir", "/b"]
+      }
+   ],
+   "tasks": [
+      {
+         "command": "cmd",
+         "args": ["/c", "echo", "${root-dir-files}"]
+      }
+   ]
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+ + + diff --git a/guide/task-runner.html b/guide/task-runner.html new file mode 100644 index 0000000..fa10f31 --- /dev/null +++ b/guide/task-runner.html @@ -0,0 +1,97 @@ + + + + + + + Task Runner | Husky.Net + + + + +

Task Runner

Why task runner?

Linting makes more sense when run before committing your code. By doing so you can ensure no errors go into the repository and enforce code style. But running a lint process on a whole project is slow, and linting results can be irrelevant. Ultimately you only want to lint files that will be committed.

task-runner.json

After installation, you must have a task-runner.json file in your .husky directory that you can use to define your tasks.

you can run and test your tasks with dotnet husky run command. Once you are sure that your tasks are working properly, you can add it to the hook.

e.g

dotnet husky add pre-commit -c "dotnet husky run --group pre-commit"
+
A real-world example.
{
+   "$schema": "https://alirezanet.github.io/Husky.Net/schema.json",
+   "tasks": [
+      {
+         "name": "dotnet-format",
+         "group": "pre-commit",
+         "command": "dotnet",
+         "args": ["dotnet-format", "--include", "${staged}"],
+         "include": ["**/*.cs", "**/*.vb"]
+      },
+      {
+         "name": "commit-message-linter",
+         "command": "dotnet",
+         "args": [
+            "husky",
+            "exec",
+            ".husky/csx/commit-lint.csx",
+            "--args",
+            "${args}"
+         ]
+      },
+      {
+         "name": "warning-check",
+         "command": "dotnet",
+         "group": "pre-push",
+         "args": ["build", "/warnaserror"],
+         "include": ["**/*.cs", "**/*.vb"]
+      },
+      {
+         "name": "eslint",
+         "group": "pre-commit",
+         "pathMode": "absolute",
+         "cwd": "Client",
+         "command": "npm",
+         "args": ["run", "lint", "${staged}"],
+         "include": ["**/*.ts", "**/*.vue", "**/*.js"]
+      },
+      {
+         "name": "prettier",
+         "group": "pre-commit",
+         "pathMode": "absolute",
+         "cwd": "Client",
+         "command": "npx",
+         "args": ["prettier", "--write", "${staged}"],
+         "include": [
+            "**/*.ts",
+            "**/*.vue",
+            "**/*.js",
+            "**/*.json",
+            "**/*.yml",
+            "**/*.css",
+            "**/*.scss"
+         ]
+      },
+      {
+         "name": "Welcome",
+         "output": "always",
+         "command": "bash",
+         "args": ["-c", "echo Nice work! 🥂"],
+         "windows": {
+            "command": "cmd",
+            "args": ["/c", "echo Nice work! 🥂"]
+         }
+      },
+      {
+         "name": "Run JB Clean Up Code",
+         "command": "cmd",
+         "pathMode": "relative",
+         "args": [
+           "/c",
+           "dotnet",
+           "jb",
+           "cleanupcode",
+           "proj.sln",
+           "--profile=Team: Full Cleanup",
+           "--include=${args}"
+         ],
+         "group": "pre-commit"
+      }
+   ]
+}
+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
+ + + diff --git a/guide/troubleshoot.html b/guide/troubleshoot.html new file mode 100644 index 0000000..a7e24fa --- /dev/null +++ b/guide/troubleshoot.html @@ -0,0 +1,15 @@ + + + + + + + Missing Emojis | Husky.Net + + + + +

Missing Emojis

If emojies are missing when you use Husky.Net under Windows environment you can check these points below :

BeforeAfter
Without emojisWith emojis

Disabling Emojis

If none of the above solutions worked, you can disable husky unicode characters by setting the HUSKY_NOUNICODE environment variable to true or use the no-unicode or -u option after husky run command.

+ + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..3decffe --- /dev/null +++ b/index.html @@ -0,0 +1,15 @@ + + + + + + + Welcome | Husky.Net + + + + +

Husky.Net

It brings the dev-dependency concept to the .NET world!

Get Started Introduction

Easy To Use

Just with a few commands you can start using the git hooks to keep your code clean and organized.

Git hooks

Supports all git and git-flow hooks, powered by modern git features.

Task Runner

Has a powerful task runner that you can use to manage and run linters, tests, scripts, and more.

Automate for everyone

You can configure it to automatically run your tasks when other contributors work with your repository.

Multiple File States

Supports multiple file states like staged, last-commit, git-files, etc, and user-defined states.

CSharp Script

Supports C# scripting for more complex tasks.

+ + + diff --git a/schema.json b/schema.json new file mode 100644 index 0000000..b196391 --- /dev/null +++ b/schema.json @@ -0,0 +1,227 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "TaskRunner", + "type": "object", + "properties": { + "tasks": { + "type": "array", + "items": { + "$ref": "#/definitions/huskyTask" + }, + "description": "A list of tasks that the runner will execute. Each task is defined with specific commands and configurations." + }, + "variables": { + "type": "array", + "items": { + "$ref": "#/definitions/variableTask" + }, + "description": "A list of variable tasks that can override default settings or provide new ones." + } + }, + "required": ["tasks"], + "definitions": { + "huskyTask": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "minLength": 1, + "description": "The name of the task, recommended for identification." + }, + "command": { + "type": "string", + "minLength": 1, + "description": "Path to the executable file, script, or executable name to run." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of command arguments. Built-in variables can be used, such as ${staged}, ${git-files}, ${last-commit}", + "examples": ["${staged}", "${git-files}", "${last-commit}", "${args}", "${all-files}"] + }, + "output": { + "$ref": "#/definitions/outputTypes", + "description": "Specifies the output log level. Can be 'always', 'verbose', or 'never'.", + "default": "always" + }, + "pathMode": { + "$ref": "#/definitions/pathModes", + "description": "Defines the file path style. Can be 'relative' or 'absolute'.", + "default": "relative" + }, + "cwd": { + "type": "string", + "description": "Current working directory for the command.", + "default": "." + }, + "group": { + "type": "string", + "description": "Group of the task, usually the hook name." + }, + "branch": { + "type": "string", + "description": "Regex to run the task on specific branches only." + }, + "include": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Glob pattern to select files." + }, + "exclude": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Glob pattern to exclude files." + }, + "filteringRule": { + "$ref": "#/definitions/filteringRules", + "description": "The filtering rule for this task. Can be 'variable' or 'staged'.", + "default": "variable" + }, + "windows": { + "$ref": "#/definitions/windowsOverrides", + "description": "Overrides all settings for Windows." + } + }, + "required": ["name", "command"] + }, + "windowsOverrides": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "minLength": 1, + "description": "Override task name for Windows." + }, + "command": { + "type": "string", + "minLength": 1, + "description": "Override command for Windows." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override arguments for Windows. Built-in variables can be used, such as ${staged}, ${git-files}, ${last-commit}", + "examples": ["${staged}", "${git-files}", "${last-commit}"] + }, + "output": { + "$ref": "#/definitions/outputTypes", + "description": "Override output log level for Windows.", + "default": "always" + }, + "pathMode": { + "$ref": "#/definitions/pathModes", + "description": "Override path mode for Windows.", + "default": "relative" + }, + "cwd": { + "type": "string", + "description": "Override working directory for Windows.", + "default": "." + }, + "group": { + "type": "string", + "description": "Override group for Windows." + }, + "branch": { + "type": "string", + "description": "Override branch for Windows." + }, + "include": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override include pattern for Windows." + }, + "exclude": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override exclude pattern for Windows." + } + } + }, + "variableTask": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "minLength": 1, + "description": "The name of the variable task." + }, + "command": { + "type": "string", + "minLength": 1, + "description": "Command for the variable task." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments for the variable task command. Built-in variables can be used, such as ${staged}, ${git-files}, ${last-commit}", + "examples": ["${staged}", "${git-files}", "${last-commit}"] + }, + "windows": { + "$ref": "#/definitions/variableTaskOverrides", + "description": "Overrides for the variable task on Windows." + } + }, + "required": ["name", "command"] + }, + "variableTaskOverrides": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "minLength": 1, + "description": "Override task name for Windows." + }, + "command": { + "type": "string", + "minLength": 1, + "description": "Override command for Windows." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override arguments for Windows. Built-in variables can be used, such as ${staged}, ${git-files}, ${last-commit}", + "examples": ["${staged}", "${git-files}", "${last-commit}"] + } + } + }, + "outputTypes": { + "type": "string", + "enum": ["always", "verbose", "never"], + "description": "Specifies the output log level.", + "default": "always" + }, + "pathModes": { + "type": "string", + "enum": ["relative", "absolute"], + "description": "Specifies the file path style.", + "default": "relative" + }, + "filteringRules": { + "type": "string", + "enum": ["variable", "staged"], + "default": "variable", + "description": "The filtering rule for this task. Can be 'variable' or 'staged'." + } + } + } diff --git a/troubleshoot/with_emojis.png b/troubleshoot/with_emojis.png new file mode 100644 index 0000000..302e07c Binary files /dev/null and b/troubleshoot/with_emojis.png differ diff --git a/troubleshoot/without_emojis.png b/troubleshoot/without_emojis.png new file mode 100644 index 0000000..74320bf Binary files /dev/null and b/troubleshoot/without_emojis.png differ diff --git a/workflow.jpg b/workflow.jpg new file mode 100644 index 0000000..0097d14 Binary files /dev/null and b/workflow.jpg differ