From 5d70c06d96d2faf454f5447acd4433c01b50e7a3 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Thu, 25 Jul 2024 20:54:42 +0300 Subject: [PATCH] fix end date --- dist/404.html | 8 ++++---- .../assets/{404.html-BBIICBHL.js => 404.html-Bb8vIwe-.js} | 2 +- dist/assets/{app-BkWeNt32.js => app-Dg9P_Zls.js} | 4 ++-- .../{index.html-CXTX8AI0.js => index.html-DLgZGocO.js} | 2 +- .../{index.html-Bt5-NjbQ.js => index.html-zZCC-31N.js} | 2 +- .../{works.html-kia6uxqT.js => works.html-BrLYBvQK.js} | 2 +- .../{works.html-aZ7q92-5.js => works.html-D3oTJVPS.js} | 2 +- dist/eng/index.html | 6 +++--- dist/eng/works.html | 8 ++++---- dist/index.html | 6 +++--- dist/works.html | 8 ++++---- docs/.vuepress/modules/work/data.ts | 2 +- 12 files changed, 26 insertions(+), 26 deletions(-) rename dist/assets/{404.html-BBIICBHL.js => 404.html-Bb8vIwe-.js} (91%) rename dist/assets/{app-BkWeNt32.js => app-Dg9P_Zls.js} (91%) rename dist/assets/{index.html-CXTX8AI0.js => index.html-DLgZGocO.js} (99%) rename dist/assets/{index.html-Bt5-NjbQ.js => index.html-zZCC-31N.js} (98%) rename dist/assets/{works.html-kia6uxqT.js => works.html-BrLYBvQK.js} (98%) rename dist/assets/{works.html-aZ7q92-5.js => works.html-D3oTJVPS.js} (99%) diff --git a/dist/404.html b/dist/404.html index c6aa394..9f3f392 100644 --- a/dist/404.html +++ b/dist/404.html @@ -33,11 +33,11 @@ Дмитрий Плешевский - - + + -

404

Верните страницу!
Вернуться на главную
- +

404

Страница украдена.
Вернуться на главную
+ diff --git a/dist/assets/404.html-BBIICBHL.js b/dist/assets/404.html-Bb8vIwe-.js similarity index 91% rename from dist/assets/404.html-BBIICBHL.js rename to dist/assets/404.html-Bb8vIwe-.js index dad69fc..2805688 100644 --- a/dist/assets/404.html-BBIICBHL.js +++ b/dist/assets/404.html-Bb8vIwe-.js @@ -1 +1 @@ -import{_ as t,c as e,o,a}from"./app-BkWeNt32.js";const n={},r=a("p",null,"404 Not Found",-1),c=[r];function s(l,p){return o(),e("div",null,c)}const i=t(n,[["render",s],["__file","404.html.vue"]]),m=JSON.parse('{"path":"/404.html","title":"","lang":"ru-RU","frontmatter":{"layout":"NotFound","head":[["meta",{"property":"og:url","content":"https://pleshevski.ru/404.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"\\"}"]]},"headers":[],"git":{},"filePathRelative":null}');export{i as comp,m as data}; +import{_ as t,c as e,o,a}from"./app-Dg9P_Zls.js";const n={},r=a("p",null,"404 Not Found",-1),c=[r];function s(l,p){return o(),e("div",null,c)}const i=t(n,[["render",s],["__file","404.html.vue"]]),m=JSON.parse('{"path":"/404.html","title":"","lang":"ru-RU","frontmatter":{"layout":"NotFound","head":[["meta",{"property":"og:url","content":"https://pleshevski.ru/404.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"\\"}"]]},"headers":[],"git":{},"filePathRelative":null}');export{i as comp,m as data}; diff --git a/dist/assets/app-BkWeNt32.js b/dist/assets/app-Dg9P_Zls.js similarity index 91% rename from dist/assets/app-BkWeNt32.js rename to dist/assets/app-Dg9P_Zls.js index 1390650..c3501aa 100644 --- a/dist/assets/app-BkWeNt32.js +++ b/dist/assets/app-Dg9P_Zls.js @@ -14,14 +14,14 @@ * @vue/runtime-dom v3.4.33 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const xu="http://www.w3.org/2000/svg",Eu="http://www.w3.org/1998/Math/MathML",vt=typeof document<"u"?document:null,Bs=vt&&vt.createElement("template"),Au={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==="svg"?vt.createElementNS(xu,e):t==="mathml"?vt.createElementNS(Eu,e):n?vt.createElement(e,{is:n}):vt.createElement(e);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>vt.createTextNode(e),createComment:e=>vt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>vt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const i=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{Bs.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=Bs.content;if(r==="svg"||r==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},kt="transition",kn="animation",Un=Symbol("_vtc"),rr=(e,{slots:t})=>ke(_c,Tu(e),t);rr.displayName="Transition";const Dl={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};rr.props=Me({},sl,Dl);const Wt=(e,t=[])=>{X(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ws=e=>e?X(e)?e.some(t=>t.length>1):e.length>1:!1;function Tu(e){const t={};for(const T in e)T in Dl||(t[T]=e[T]);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:u=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,_=Ru(o),S=_&&_[0],k=_&&_[1],{onBeforeEnter:R,onEnter:b,onEnterCancelled:m,onLeave:w,onLeaveCancelled:V,onBeforeAppear:O=R,onAppear:G=b,onAppearCancelled:Z=m}=t,j=(T,ee,ve)=>{Ut(T,ee?f:l),Ut(T,ee?c:i),ve&&ve()},L=(T,ee)=>{T._isLeaving=!1,Ut(T,u),Ut(T,g),Ut(T,p),ee&&ee()},U=T=>(ee,ve)=>{const _e=T?G:b,J=()=>j(ee,T,ve);Wt(_e,[ee,J]),Us(()=>{Ut(ee,T?a:s),Lt(ee,T?f:l),Ws(_e)||Ks(ee,r,S,J)})};return Me(t,{onBeforeEnter(T){Wt(R,[T]),Lt(T,s),Lt(T,i)},onBeforeAppear(T){Wt(O,[T]),Lt(T,a),Lt(T,c)},onEnter:U(!1),onAppear:U(!0),onLeave(T,ee){T._isLeaving=!0;const ve=()=>L(T,ee);Lt(T,u),Lt(T,p),Iu(),Us(()=>{T._isLeaving&&(Ut(T,u),Lt(T,g),Ws(w)||Ks(T,r,k,ve))}),Wt(w,[T,ve])},onEnterCancelled(T){j(T,!1),Wt(m,[T])},onAppearCancelled(T){j(T,!0),Wt(Z,[T])},onLeaveCancelled(T){L(T),Wt(V,[T])}})}function Ru(e){if(e==null)return null;if(ye(e))return[so(e.enter),so(e.leave)];{const t=so(e);return[t,t]}}function so(e){return Ca(e)}function Lt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Un]||(e[Un]=new Set)).add(t)}function Ut(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Un];n&&(n.delete(t),n.size||(e[Un]=void 0))}function Us(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Du=0;function Ks(e,t,n,r){const o=e._endId=++Du,s=()=>{o===e._endId&&r()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:a}=Ou(e,t);if(!i)return r();const c=i+"end";let f=0;const u=()=>{e.removeEventListener(c,p),s()},p=g=>{g.target===e&&++f>=a&&u()};setTimeout(()=>{f(n[_]||"").split(", "),o=r(`${kt}Delay`),s=r(`${kt}Duration`),i=Gs(o,s),l=r(`${kn}Delay`),a=r(`${kn}Duration`),c=Gs(l,a);let f=null,u=0,p=0;t===kt?i>0&&(f=kt,u=i,p=s.length):t===kn?c>0&&(f=kn,u=c,p=a.length):(u=Math.max(i,c),f=u>0?i>c?kt:kn:null,p=f?f===kt?s.length:a.length:0);const g=f===kt&&/\b(transform|all)(,|$)/.test(r(`${kt}Property`).toString());return{type:f,timeout:u,propCount:p,hasTransform:g}}function Gs(e,t){for(;e.lengthqs(n)+qs(e[r])))}function qs(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Iu(){return document.body.offsetHeight}function Mu(e,t,n){const r=e[Un];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Dr=Symbol("_vod"),Ol=Symbol("_vsh"),Or={beforeMount(e,{value:t},{transition:n}){e[Dr]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Ln(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),Ln(e,!0),r.enter(e)):r.leave(e,()=>{Ln(e,!1)}):Ln(e,t))},beforeUnmount(e,{value:t}){Ln(e,t)}};function Ln(e,t){e.style.display=t?e[Dr]:"none",e[Ol]=!t}const $u=Symbol(""),Nu=/(^|;)\s*display\s*:/;function Hu(e,t,n){const r=e.style,o=Te(n);let s=!1;if(n&&!o){if(t)if(Te(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&wr(r,l,"")}else for(const i in t)n[i]==null&&wr(r,i,"");for(const i in n)i==="display"&&(s=!0),wr(r,i,n[i])}else if(o){if(t!==n){const i=r[$u];i&&(n+=";"+i),r.cssText=n,s=Nu.test(n)}}else t&&e.removeAttribute("style");Dr in e&&(e[Dr]=s?r.display:"",e[Ol]&&(r.display="none"))}const zs=/\s*!important$/;function wr(e,t,n){if(X(n))n.forEach(r=>wr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Vu(e,t);zs.test(n)?e.setProperty(Ht(r),n.replace(zs,""),"important"):e[r]=n}}const Js=["Webkit","Moz","ms"],io={};function Vu(e,t){const n=io[t];if(n)return n;let r=Qe(t);if(r!=="filter"&&r in e)return io[t]=r;r=Qn(r);for(let o=0;olo||(Ku.then(()=>lo=0),lo=Date.now());function qu(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;nt(zu(r,n.value),t,5,[r])};return n.value=e,n.attached=Gu(),n}function zu(e,t){if(X(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const ei=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ju=(e,t,n,r,o,s)=>{const i=o==="svg";t==="class"?Mu(e,r,i):t==="style"?Hu(e,n,r):Jn(t)?Oo(t)||Wu(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Qu(e,t,r,i))?(ju(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ys(e,t,r,i,s,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Ys(e,t,r,i))};function Qu(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&ei(t)&&ne(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return ei(t)&&Te(n)?!1:t in e}const Yu={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Xu=(e,t)=>{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=o=>{if(!("key"in o))return;const s=Ht(o.key);if(t.some(i=>i===s||Yu[i]===s))return e(o)})},Zu=Me({patchProp:Ju},Au);let ao,ti=!1;function ef(){return ao=ti?ao:Xc(Zu),ti=!0,ao}const tf=(...e)=>{const t=ef().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=rf(r);if(o)return n(o,!0,nf(o))},t};function nf(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function rf(e){return Te(e)?document.querySelector(e):e}var or=e=>/^[a-z][a-z0-9+.-]*:/.test(e)||e.startsWith("//"),of=/.md((\?|#).*)?$/,sf=(e,t="/")=>or(e)||e.startsWith("/")&&!e.startsWith(t)&&!of.test(e),Kr=e=>/^(https?:)?\/\//.test(e),ni=e=>{if(!e||e.endsWith("/"))return e;let t=e.replace(/(^|\/)README.md$/i,"$1index.html");return t.endsWith(".md")?t=t.substring(0,t.length-3)+".html":t.endsWith(".html")||(t=t+".html"),t.endsWith("/index.html")&&(t=t.substring(0,t.length-10)),t},lf="http://.",af=(e,t)=>{if(!e.startsWith("/")&&t){const n=t.slice(0,t.lastIndexOf("/"));return ni(new URL(`${n}/${e}`,lf).pathname)}return ni(e)},cf=(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"/"},uf=/(#|\?)/,Il=e=>{const[t,...n]=e.split(uf);return{pathname:t,hashAndQueries:n.join("")}},ff=["link","meta","script","style","noscript","template"],df=["title","base"],hf=([e,t,n])=>df.includes(e)?e:ff.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([r,o])=>typeof o=="boolean"?o?[r,""]:null:[r,o]).filter(r=>r!=null).sort(([r],[o])=>r.localeCompare(o)),n]):null,pf=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=hf(r);o&&!t.has(o)&&(t.add(o),n.push(r))}),n},gf=e=>e[e.length-1]==="/"||e.endsWith(".html")?e:`${e}/`,Ml=e=>e[e.length-1]==="/"?e.slice(0,-1):e,$l=e=>e[0]==="/"?e.slice(1):e,Yo=e=>Object.prototype.toString.call(e)==="[object Object]",st=e=>typeof e=="string";const mf="modulepreload",vf=function(e){return"/"+e},ri={},xn=function(t,n,r){let o=Promise.resolve();return n&&n.length>0&&(document.getElementsByTagName("link"),o=Promise.all(n.map(s=>{if(s=vf(s),s in ri)return;ri[s]=!0;const i=s.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${l}`))return;const a=document.createElement("link");if(a.rel=i?"stylesheet":mf,i||(a.as="script",a.crossOrigin=""),a.href=s,document.head.appendChild(a),i)return new Promise((c,f)=>{a.addEventListener("load",c),a.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${s}`)))})}))),o.then(()=>t()).catch(s=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s})},_f=JSON.parse("{}"),bf=Object.fromEntries([["/",{loader:()=>xn(()=>import("./index.html-CXTX8AI0.js"),__vite__mapDeps([])),meta:{title:"Резюме"}}],["/works.html",{loader:()=>xn(()=>import("./works.html-aZ7q92-5.js"),__vite__mapDeps([])),meta:{title:"Работы"}}],["/eng/",{loader:()=>xn(()=>import("./index.html-Bt5-NjbQ.js"),__vite__mapDeps([])),meta:{title:"Resume"}}],["/eng/works.html",{loader:()=>xn(()=>import("./works.html-kia6uxqT.js"),__vite__mapDeps([])),meta:{title:"Works"}}],["/404.html",{loader:()=>xn(()=>import("./404.html-BBIICBHL.js"),__vite__mapDeps([])),meta:{title:""}}]]);/*! +**/const xu="http://www.w3.org/2000/svg",Eu="http://www.w3.org/1998/Math/MathML",vt=typeof document<"u"?document:null,Bs=vt&&vt.createElement("template"),Au={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==="svg"?vt.createElementNS(xu,e):t==="mathml"?vt.createElementNS(Eu,e):n?vt.createElement(e,{is:n}):vt.createElement(e);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>vt.createTextNode(e),createComment:e=>vt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>vt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const i=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{Bs.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=Bs.content;if(r==="svg"||r==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},kt="transition",kn="animation",Un=Symbol("_vtc"),rr=(e,{slots:t})=>ke(_c,Tu(e),t);rr.displayName="Transition";const Dl={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};rr.props=Me({},sl,Dl);const Wt=(e,t=[])=>{X(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ws=e=>e?X(e)?e.some(t=>t.length>1):e.length>1:!1;function Tu(e){const t={};for(const T in e)T in Dl||(t[T]=e[T]);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:u=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,_=Ru(o),S=_&&_[0],k=_&&_[1],{onBeforeEnter:R,onEnter:b,onEnterCancelled:m,onLeave:w,onLeaveCancelled:V,onBeforeAppear:O=R,onAppear:G=b,onAppearCancelled:Z=m}=t,j=(T,ee,ve)=>{Ut(T,ee?f:l),Ut(T,ee?c:i),ve&&ve()},L=(T,ee)=>{T._isLeaving=!1,Ut(T,u),Ut(T,g),Ut(T,p),ee&&ee()},U=T=>(ee,ve)=>{const _e=T?G:b,J=()=>j(ee,T,ve);Wt(_e,[ee,J]),Us(()=>{Ut(ee,T?a:s),Lt(ee,T?f:l),Ws(_e)||Ks(ee,r,S,J)})};return Me(t,{onBeforeEnter(T){Wt(R,[T]),Lt(T,s),Lt(T,i)},onBeforeAppear(T){Wt(O,[T]),Lt(T,a),Lt(T,c)},onEnter:U(!1),onAppear:U(!0),onLeave(T,ee){T._isLeaving=!0;const ve=()=>L(T,ee);Lt(T,u),Lt(T,p),Iu(),Us(()=>{T._isLeaving&&(Ut(T,u),Lt(T,g),Ws(w)||Ks(T,r,k,ve))}),Wt(w,[T,ve])},onEnterCancelled(T){j(T,!1),Wt(m,[T])},onAppearCancelled(T){j(T,!0),Wt(Z,[T])},onLeaveCancelled(T){L(T),Wt(V,[T])}})}function Ru(e){if(e==null)return null;if(ye(e))return[so(e.enter),so(e.leave)];{const t=so(e);return[t,t]}}function so(e){return Ca(e)}function Lt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Un]||(e[Un]=new Set)).add(t)}function Ut(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Un];n&&(n.delete(t),n.size||(e[Un]=void 0))}function Us(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Du=0;function Ks(e,t,n,r){const o=e._endId=++Du,s=()=>{o===e._endId&&r()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:a}=Ou(e,t);if(!i)return r();const c=i+"end";let f=0;const u=()=>{e.removeEventListener(c,p),s()},p=g=>{g.target===e&&++f>=a&&u()};setTimeout(()=>{f(n[_]||"").split(", "),o=r(`${kt}Delay`),s=r(`${kt}Duration`),i=Gs(o,s),l=r(`${kn}Delay`),a=r(`${kn}Duration`),c=Gs(l,a);let f=null,u=0,p=0;t===kt?i>0&&(f=kt,u=i,p=s.length):t===kn?c>0&&(f=kn,u=c,p=a.length):(u=Math.max(i,c),f=u>0?i>c?kt:kn:null,p=f?f===kt?s.length:a.length:0);const g=f===kt&&/\b(transform|all)(,|$)/.test(r(`${kt}Property`).toString());return{type:f,timeout:u,propCount:p,hasTransform:g}}function Gs(e,t){for(;e.lengthqs(n)+qs(e[r])))}function qs(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Iu(){return document.body.offsetHeight}function Mu(e,t,n){const r=e[Un];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Dr=Symbol("_vod"),Ol=Symbol("_vsh"),Or={beforeMount(e,{value:t},{transition:n}){e[Dr]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Ln(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),Ln(e,!0),r.enter(e)):r.leave(e,()=>{Ln(e,!1)}):Ln(e,t))},beforeUnmount(e,{value:t}){Ln(e,t)}};function Ln(e,t){e.style.display=t?e[Dr]:"none",e[Ol]=!t}const $u=Symbol(""),Nu=/(^|;)\s*display\s*:/;function Hu(e,t,n){const r=e.style,o=Te(n);let s=!1;if(n&&!o){if(t)if(Te(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&wr(r,l,"")}else for(const i in t)n[i]==null&&wr(r,i,"");for(const i in n)i==="display"&&(s=!0),wr(r,i,n[i])}else if(o){if(t!==n){const i=r[$u];i&&(n+=";"+i),r.cssText=n,s=Nu.test(n)}}else t&&e.removeAttribute("style");Dr in e&&(e[Dr]=s?r.display:"",e[Ol]&&(r.display="none"))}const zs=/\s*!important$/;function wr(e,t,n){if(X(n))n.forEach(r=>wr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Vu(e,t);zs.test(n)?e.setProperty(Ht(r),n.replace(zs,""),"important"):e[r]=n}}const Js=["Webkit","Moz","ms"],io={};function Vu(e,t){const n=io[t];if(n)return n;let r=Qe(t);if(r!=="filter"&&r in e)return io[t]=r;r=Qn(r);for(let o=0;olo||(Ku.then(()=>lo=0),lo=Date.now());function qu(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;nt(zu(r,n.value),t,5,[r])};return n.value=e,n.attached=Gu(),n}function zu(e,t){if(X(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const ei=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ju=(e,t,n,r,o,s)=>{const i=o==="svg";t==="class"?Mu(e,r,i):t==="style"?Hu(e,n,r):Jn(t)?Oo(t)||Wu(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Qu(e,t,r,i))?(ju(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Ys(e,t,r,i,s,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Ys(e,t,r,i))};function Qu(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&ei(t)&&ne(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return ei(t)&&Te(n)?!1:t in e}const Yu={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Xu=(e,t)=>{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=o=>{if(!("key"in o))return;const s=Ht(o.key);if(t.some(i=>i===s||Yu[i]===s))return e(o)})},Zu=Me({patchProp:Ju},Au);let ao,ti=!1;function ef(){return ao=ti?ao:Xc(Zu),ti=!0,ao}const tf=(...e)=>{const t=ef().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=rf(r);if(o)return n(o,!0,nf(o))},t};function nf(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function rf(e){return Te(e)?document.querySelector(e):e}var or=e=>/^[a-z][a-z0-9+.-]*:/.test(e)||e.startsWith("//"),of=/.md((\?|#).*)?$/,sf=(e,t="/")=>or(e)||e.startsWith("/")&&!e.startsWith(t)&&!of.test(e),Kr=e=>/^(https?:)?\/\//.test(e),ni=e=>{if(!e||e.endsWith("/"))return e;let t=e.replace(/(^|\/)README.md$/i,"$1index.html");return t.endsWith(".md")?t=t.substring(0,t.length-3)+".html":t.endsWith(".html")||(t=t+".html"),t.endsWith("/index.html")&&(t=t.substring(0,t.length-10)),t},lf="http://.",af=(e,t)=>{if(!e.startsWith("/")&&t){const n=t.slice(0,t.lastIndexOf("/"));return ni(new URL(`${n}/${e}`,lf).pathname)}return ni(e)},cf=(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"/"},uf=/(#|\?)/,Il=e=>{const[t,...n]=e.split(uf);return{pathname:t,hashAndQueries:n.join("")}},ff=["link","meta","script","style","noscript","template"],df=["title","base"],hf=([e,t,n])=>df.includes(e)?e:ff.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([r,o])=>typeof o=="boolean"?o?[r,""]:null:[r,o]).filter(r=>r!=null).sort(([r],[o])=>r.localeCompare(o)),n]):null,pf=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=hf(r);o&&!t.has(o)&&(t.add(o),n.push(r))}),n},gf=e=>e[e.length-1]==="/"||e.endsWith(".html")?e:`${e}/`,Ml=e=>e[e.length-1]==="/"?e.slice(0,-1):e,$l=e=>e[0]==="/"?e.slice(1):e,Yo=e=>Object.prototype.toString.call(e)==="[object Object]",st=e=>typeof e=="string";const mf="modulepreload",vf=function(e){return"/"+e},ri={},xn=function(t,n,r){let o=Promise.resolve();return n&&n.length>0&&(document.getElementsByTagName("link"),o=Promise.all(n.map(s=>{if(s=vf(s),s in ri)return;ri[s]=!0;const i=s.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${l}`))return;const a=document.createElement("link");if(a.rel=i?"stylesheet":mf,i||(a.as="script",a.crossOrigin=""),a.href=s,document.head.appendChild(a),i)return new Promise((c,f)=>{a.addEventListener("load",c),a.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${s}`)))})}))),o.then(()=>t()).catch(s=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s})},_f=JSON.parse("{}"),bf=Object.fromEntries([["/",{loader:()=>xn(()=>import("./index.html-DLgZGocO.js"),__vite__mapDeps([])),meta:{title:"Резюме"}}],["/works.html",{loader:()=>xn(()=>import("./works.html-D3oTJVPS.js"),__vite__mapDeps([])),meta:{title:"Работы"}}],["/eng/",{loader:()=>xn(()=>import("./index.html-zZCC-31N.js"),__vite__mapDeps([])),meta:{title:"Resume"}}],["/eng/works.html",{loader:()=>xn(()=>import("./works.html-BrLYBvQK.js"),__vite__mapDeps([])),meta:{title:"Works"}}],["/404.html",{loader:()=>xn(()=>import("./404.html-Bb8vIwe-.js"),__vite__mapDeps([])),meta:{title:""}}]]);/*! * vue-router v4.4.0 * (c) 2024 Eduardo San Martin Morote * @license MIT */const ln=typeof document<"u";function yf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const me=Object.assign;function co(e,t){const n={};for(const r in t){const o=t[r];n[r]=it(o)?o.map(e):e(o)}return n}const Hn=()=>{},it=Array.isArray,Nl=/#/g,wf=/&/g,Sf=/\//g,Pf=/=/g,Cf=/\?/g,Hl=/\+/g,kf=/%5B/g,Lf=/%5D/g,Vl=/%5E/g,xf=/%60/g,jl=/%7B/g,Ef=/%7C/g,Fl=/%7D/g,Af=/%20/g;function Xo(e){return encodeURI(""+e).replace(Ef,"|").replace(kf,"[").replace(Lf,"]")}function Tf(e){return Xo(e).replace(jl,"{").replace(Fl,"}").replace(Vl,"^")}function Lo(e){return Xo(e).replace(Hl,"%2B").replace(Af,"+").replace(Nl,"%23").replace(wf,"%26").replace(xf,"`").replace(jl,"{").replace(Fl,"}").replace(Vl,"^")}function Rf(e){return Lo(e).replace(Pf,"%3D")}function Df(e){return Xo(e).replace(Nl,"%23").replace(Cf,"%3F")}function Of(e){return e==null?"":Df(e).replace(Sf,"%2F")}function Kn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const If=/\/$/,Mf=e=>e.replace(If,"");function uo(e,t,n="/"){let r,o={},s="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return l=0&&(a=-1),a>-1&&(r=t.slice(0,a),s=t.slice(a+1,l>-1?l:t.length),o=e(s)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=Vf(r??t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:Kn(i)}}function $f(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function oi(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Nf(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&vn(t.matched[r],n.matched[o])&&Bl(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function vn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Bl(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Hf(e[n],t[n]))return!1;return!0}function Hf(e,t){return it(e)?si(e,t):it(t)?si(t,e):e===t}function si(e,t){return it(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Vf(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let s=n.length-1,i,l;for(i=0;i1&&s--;else break;return n.slice(0,s).join("/")+"/"+r.slice(i).join("/")}const mt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Gn;(function(e){e.pop="pop",e.push="push"})(Gn||(Gn={}));var Vn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Vn||(Vn={}));function jf(e){if(!e)if(ln){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Mf(e)}const Ff=/^[^#]+#/;function Bf(e,t){return e.replace(Ff,"#")+t}function Wf(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const Gr=()=>({left:window.scrollX,top:window.scrollY});function Uf(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=Wf(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function ii(e,t){return(history.state?history.state.position-t:-1)+e}const xo=new Map;function Kf(e,t){xo.set(e,t)}function Gf(e){const t=xo.get(e);return xo.delete(e),t}let qf=()=>location.protocol+"//"+location.host;function Wl(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),oi(a,"")}return oi(n,e)+r+o}function zf(e,t,n,r){let o=[],s=[],i=null;const l=({state:p})=>{const g=Wl(e,location),_=n.value,S=t.value;let k=0;if(p){if(n.value=g,t.value=p,i&&i===_){i=null;return}k=S?p.position-S.position:0}else r(g);o.forEach(R=>{R(n.value,_,{delta:k,type:Gn.pop,direction:k?k>0?Vn.forward:Vn.back:Vn.unknown})})};function a(){i=n.value}function c(p){o.push(p);const g=()=>{const _=o.indexOf(p);_>-1&&o.splice(_,1)};return s.push(g),g}function f(){const{history:p}=window;p.state&&p.replaceState(me({},p.state,{scroll:Gr()}),"")}function u(){for(const p of s)p();s=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",f)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",f,{passive:!0}),{pauseListeners:a,listen:c,destroy:u}}function li(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?Gr():null}}function Jf(e){const{history:t,location:n}=window,r={value:Wl(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 u=e.indexOf("#"),p=u>-1?(n.host&&document.querySelector("base")?e:e.slice(u))+a:qf()+e+a;try{t[f?"replaceState":"pushState"](c,"",p),o.value=c}catch(g){console.error(g),n[f?"replace":"assign"](p)}}function i(a,c){const f=me({},t.state,li(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=me({},o.value,t.state,{forward:a,scroll:Gr()});s(f.current,f,!0);const u=me({},li(r.value,a,null),{position:f.position+1},c);s(a,u,!1),r.value=a}return{location:r,state:o,push:l,replace:i}}function Qf(e){e=jf(e);const t=Jf(e),n=zf(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=me({location:"",base:e,go:r,createHref:Bf.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 Yf(e){return typeof e=="string"||e&&typeof e=="object"}function Ul(e){return typeof e=="string"||typeof e=="symbol"}const Kl=Symbol("");var ai;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(ai||(ai={}));function _n(e,t){return me(new Error,{type:e,[Kl]:!0},t)}function gt(e,t){return e instanceof Error&&Kl in e&&(t==null||!!(e.type&t))}const ci="[^/]+?",Xf={sensitive:!1,strict:!1,start:!0,end:!0},Zf=/[.+*?^${}()[\]/\\]/g;function ed(e,t){const n=me({},Xf,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 u=0;ut.length?t.length===1&&t[0]===80?1:-1:0}function Gl(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const nd={type:0,value:""},rd=/[a-zA-Z0-9_]/;function od(e){if(!e)return[[]];if(e==="/")return[[nd]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${c}": ${g}`)}let n=0,r=n;const o=[];let s;function i(){s&&o.push(s),s=[]}let l=0,a,c="",f="";function u(){c&&(n===0?s.push({type:0,value:c}):n===1||n===2||n===3?(s.length>1&&(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 p(){c+=a}for(;l{i(m)}:Hn}function i(u){if(Ul(u)){const p=r.get(u);p&&(r.delete(u),n.splice(n.indexOf(p),1),p.children.forEach(i),p.alias.forEach(i))}else{const p=n.indexOf(u);p>-1&&(n.splice(p,1),u.record.name&&r.delete(u.record.name),u.children.forEach(i),u.alias.forEach(i))}}function l(){return n}function a(u){const p=ud(u,n);n.splice(p,0,u),u.record.name&&!di(u)&&r.set(u.record.name,u)}function c(u,p){let g,_={},S,k;if("name"in u&&u.name){if(g=r.get(u.name),!g)throw _n(1,{location:u});k=g.record.name,_=me(fi(p.params,g.keys.filter(m=>!m.optional).concat(g.parent?g.parent.keys.filter(m=>m.optional):[]).map(m=>m.name)),u.params&&fi(u.params,g.keys.map(m=>m.name))),S=g.stringify(_)}else if(u.path!=null)S=u.path,g=n.find(m=>m.re.test(S)),g&&(_=g.parse(S),k=g.record.name);else{if(g=p.name?r.get(p.name):n.find(m=>m.re.test(p.path)),!g)throw _n(1,{location:u,currentLocation:p});k=g.record.name,_=me({},p.params,u.params),S=g.stringify(_)}const R=[];let b=g;for(;b;)R.unshift(b.record),b=b.parent;return{name:k,path:S,params:_,matched:R,meta:cd(R)}}e.forEach(u=>s(u));function f(){n.length=0,r.clear()}return{addRoute:s,resolve:c,removeRoute:i,clearRoutes:f,getRoutes:l,getRecordMatcher:o}}function fi(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function ld(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:ad(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function ad(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=="object"?n[r]:n;return t}function di(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function cd(e){return e.reduce((t,n)=>me(t,n.meta),{})}function hi(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function ud(e,t){let n=0,r=t.length;for(;n!==r;){const s=n+r>>1;Gl(e,t[s])<0?r=s:n=s+1}const o=fd(e);return o&&(r=t.lastIndexOf(o,r-1)),r}function fd(e){let t=e;for(;t=t.parent;)if(ql(t)&&Gl(e,t)===0)return t}function ql({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function dd(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;os&&Lo(s)):[r&&Lo(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function hd(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=it(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const pd=Symbol(""),gi=Symbol(""),qr=Symbol(""),Zo=Symbol(""),Eo=Symbol("");function En(){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.slice(),reset:n}}function Tt(e,t,n,r,o,s=i=>i()){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((l,a)=>{const c=p=>{p===!1?a(_n(4,{from:n,to:t})):p instanceof Error?a(p):Yf(p)?a(_n(2,{from:t,to:p})):(i&&r.enterCallbacks[o]===i&&typeof p=="function"&&i.push(p),l())},f=s(()=>e.call(r&&r.instances[o],t,n,c));let u=Promise.resolve(f);e.length<3&&(u=u.then(c)),u.catch(p=>a(p))})}function fo(e,t,n,r,o=s=>s()){const s=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(gd(a)){const f=(a.__vccOpts||a)[t];f&&s.push(Tt(f,n,r,i,l,o))}else{let c=a();s.push(()=>c.then(f=>{if(!f)return Promise.reject(new Error(`Couldn't resolve component "${l}" at "${i.path}"`));const u=yf(f)?f.default:f;i.components[l]=u;const g=(u.__vccOpts||u)[t];return g&&Tt(g,n,r,i,l,o)()}))}}return s}function gd(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function mi(e){const t=Be(qr),n=Be(Zo),r=A(()=>{const a=Yt(e.to);return t.resolve(a)}),o=A(()=>{const{matched:a}=r.value,{length:c}=a,f=a[c-1],u=n.matched;if(!f||!u.length)return-1;const p=u.findIndex(vn.bind(null,f));if(p>-1)return p;const g=vi(a[c-2]);return c>1&&vi(f)===g&&u[u.length-1].path!==g?u.findIndex(vn.bind(null,a[c-2])):p}),s=A(()=>o.value>-1&&bd(n.params,r.value.params)),i=A(()=>o.value>-1&&o.value===n.matched.length-1&&Bl(n.params,r.value.params));function l(a={}){return _d(a)?t[Yt(e.replace)?"replace":"push"](Yt(e.to)).catch(Hn):Promise.resolve()}return{route:r,href:A(()=>r.value.href),isActive:s,isExactActive:i,navigate:l}}const md=he({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:mi,setup(e,{slots:t}){const n=Xn(mi(e)),{options:r}=Be(qr),o=A(()=>({[_i(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[_i(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const s=t.default&&t.default(n);return e.custom?s:ke("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),vd=md;function _d(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 bd(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(!it(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function vi(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const _i=(e,t,n)=>e??t??n,yd=he({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Be(Eo),o=A(()=>e.route||r.value),s=Be(gi,0),i=A(()=>{let c=Yt(s);const{matched:f}=o.value;let u;for(;(u=f[c])&&!u.components;)c++;return c}),l=A(()=>o.value.matched[i.value]);Xt(gi,A(()=>i.value+1)),Xt(pd,l),Xt(Eo,o);const a=ue();return $e(()=>[a.value,l.value,e.name],([c,f,u],[p,g,_])=>{f&&(f.instances[u]=c,g&&g!==f&&c&&c===p&&(f.leaveGuards.size||(f.leaveGuards=g.leaveGuards),f.updateGuards.size||(f.updateGuards=g.updateGuards))),c&&f&&(!g||!vn(f,g)||!p)&&(f.enterCallbacks[u]||[]).forEach(S=>S(c))},{flush:"post"}),()=>{const c=o.value,f=e.name,u=l.value,p=u&&u.components[f];if(!p)return bi(n.default,{Component:p,route:c});const g=u.props[f],_=g?g===!0?c.params:typeof g=="function"?g(c):g:null,k=ke(p,me({},_,t,{onVnodeUnmounted:R=>{R.component.isUnmounted&&(u.instances[f]=null)},ref:a}));return bi(n.default,{Component:k,route:c})||k}}});function bi(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const wd=yd;function Sd(e){const t=id(e.routes,e),n=e.parseQuery||dd,r=e.stringifyQuery||pi,o=e.history,s=En(),i=En(),l=En(),a=yn(mt);let c=mt;ln&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const f=co.bind(null,P=>""+P),u=co.bind(null,Of),p=co.bind(null,Kn);function g(P,F){let H,q;return Ul(P)?(H=t.getRecordMatcher(P),q=F):q=P,t.addRoute(q,H)}function _(P){const F=t.getRecordMatcher(P);F&&t.removeRoute(F)}function S(){return t.getRoutes().map(P=>P.record)}function k(P){return!!t.getRecordMatcher(P)}function R(P,F){if(F=me({},F||a.value),typeof P=="string"){const h=uo(n,P,F.path),v=t.resolve({path:h.path},F),C=o.createHref(h.fullPath);return me(h,v,{params:p(v.params),hash:Kn(h.hash),redirectedFrom:void 0,href:C})}let H;if(P.path!=null)H=me({},P,{path:uo(n,P.path,F.path).path});else{const h=me({},P.params);for(const v in h)h[v]==null&&delete h[v];H=me({},P,{params:u(h)}),F.params=u(F.params)}const q=t.resolve(H,F),pe=P.hash||"";q.params=f(p(q.params));const Pe=$f(r,me({},P,{hash:Tf(pe),path:q.path})),d=o.createHref(Pe);return me({fullPath:Pe,hash:pe,query:r===pi?hd(P.query):P.query||{}},q,{redirectedFrom:void 0,href:d})}function b(P){return typeof P=="string"?uo(n,P,a.value.path):me({},P)}function m(P,F){if(c!==P)return _n(8,{from:F,to:P})}function w(P){return G(P)}function V(P){return w(me(b(P),{replace:!0}))}function O(P){const F=P.matched[P.matched.length-1];if(F&&F.redirect){const{redirect:H}=F;let q=typeof H=="function"?H(P):H;return typeof q=="string"&&(q=q.includes("?")||q.includes("#")?q=b(q):{path:q},q.params={}),me({query:P.query,hash:P.hash,params:q.path!=null?{}:P.params},q)}}function G(P,F){const H=c=R(P),q=a.value,pe=P.state,Pe=P.force,d=P.replace===!0,h=O(H);if(h)return G(me(b(h),{state:typeof h=="object"?me({},pe,h.state):pe,force:Pe,replace:d}),F||H);const v=H;v.redirectedFrom=F;let C;return!Pe&&Nf(r,q,H)&&(C=_n(16,{to:v,from:q}),ct(q,q,!0,!1)),(C?Promise.resolve(C):L(v,q)).catch(y=>gt(y)?gt(y,2)?y:Pt(y):K(y,v,q)).then(y=>{if(y){if(gt(y,2))return G(me({replace:d},b(y.to),{state:typeof y.to=="object"?me({},pe,y.to.state):pe,force:Pe}),F||v)}else y=T(v,q,!0,d,pe);return U(v,q,y),y})}function Z(P,F){const H=m(P,F);return H?Promise.reject(H):Promise.resolve()}function j(P){const F=rn.values().next().value;return F&&typeof F.runWithContext=="function"?F.runWithContext(P):P()}function L(P,F){let H;const[q,pe,Pe]=Pd(P,F);H=fo(q.reverse(),"beforeRouteLeave",P,F);for(const h of q)h.leaveGuards.forEach(v=>{H.push(Tt(v,P,F))});const d=Z.bind(null,P,F);return H.push(d),Ye(H).then(()=>{H=[];for(const h of s.list())H.push(Tt(h,P,F));return H.push(d),Ye(H)}).then(()=>{H=fo(pe,"beforeRouteUpdate",P,F);for(const h of pe)h.updateGuards.forEach(v=>{H.push(Tt(v,P,F))});return H.push(d),Ye(H)}).then(()=>{H=[];for(const h of Pe)if(h.beforeEnter)if(it(h.beforeEnter))for(const v of h.beforeEnter)H.push(Tt(v,P,F));else H.push(Tt(h.beforeEnter,P,F));return H.push(d),Ye(H)}).then(()=>(P.matched.forEach(h=>h.enterCallbacks={}),H=fo(Pe,"beforeRouteEnter",P,F,j),H.push(d),Ye(H))).then(()=>{H=[];for(const h of i.list())H.push(Tt(h,P,F));return H.push(d),Ye(H)}).catch(h=>gt(h,8)?h:Promise.reject(h))}function U(P,F,H){l.list().forEach(q=>j(()=>q(P,F,H)))}function T(P,F,H,q,pe){const Pe=m(P,F);if(Pe)return Pe;const d=F===mt,h=ln?history.state:{};H&&(q||d?o.replace(P.fullPath,me({scroll:d&&h&&h.scroll},pe)):o.push(P.fullPath,pe)),a.value=P,ct(P,F,H,d),Pt()}let ee;function ve(){ee||(ee=o.listen((P,F,H)=>{if(!ir.listening)return;const q=R(P),pe=O(q);if(pe){G(me(pe,{replace:!0}),q).catch(Hn);return}c=q;const Pe=a.value;ln&&Kf(ii(Pe.fullPath,H.delta),Gr()),L(q,Pe).catch(d=>gt(d,12)?d:gt(d,2)?(G(d.to,q).then(h=>{gt(h,20)&&!H.delta&&H.type===Gn.pop&&o.go(-1,!1)}).catch(Hn),Promise.reject()):(H.delta&&o.go(-H.delta,!1),K(d,q,Pe))).then(d=>{d=d||T(q,Pe,!1),d&&(H.delta&&!gt(d,8)?o.go(-H.delta,!1):H.type===Gn.pop&>(d,20)&&o.go(-1,!1)),U(q,Pe,d)}).catch(Hn)}))}let _e=En(),J=En(),oe;function K(P,F,H){Pt(P);const q=J.list();return q.length?q.forEach(pe=>pe(P,F,H)):console.error(P),Promise.reject(P)}function rt(){return oe&&a.value!==mt?Promise.resolve():new Promise((P,F)=>{_e.add([P,F])})}function Pt(P){return oe||(oe=!P,ve(),_e.list().forEach(([F,H])=>P?H(P):F()),_e.reset()),P}function ct(P,F,H,q){const{scrollBehavior:pe}=e;if(!ln||!pe)return Promise.resolve();const Pe=!H&&Gf(ii(P.fullPath,0))||(q||!H)&&history.state&&history.state.scroll||null;return wn().then(()=>pe(P,F,Pe)).then(d=>d&&Uf(d)).catch(d=>K(d,P,F))}const We=P=>o.go(P);let nn;const rn=new Set,ir={currentRoute:a,listening:!0,addRoute:g,removeRoute:_,clearRoutes:t.clearRoutes,hasRoute:k,getRoutes:S,resolve:R,options:e,push:w,replace:V,go:We,back:()=>We(-1),forward:()=>We(1),beforeEach:s.add,beforeResolve:i.add,afterEach:l.add,onError:J.add,isReady:rt,install(P){const F=this;P.component("RouterLink",vd),P.component("RouterView",wd),P.config.globalProperties.$router=F,Object.defineProperty(P.config.globalProperties,"$route",{enumerable:!0,get:()=>Yt(a)}),ln&&!nn&&a.value===mt&&(nn=!0,w(o.location).catch(pe=>{}));const H={};for(const pe in mt)Object.defineProperty(H,pe,{get:()=>a.value[pe],enumerable:!0});P.provide(qr,F),P.provide(Zo,Ji(H)),P.provide(Eo,a);const q=P.unmount;rn.add(P),P.unmount=function(){rn.delete(P),rn.size<1&&(c=mt,ee&&ee(),ee=null,a.value=mt,nn=!1,oe=!1),q()}}};function Ye(P){return P.reduce((F,H)=>F.then(()=>j(H)),Promise.resolve())}return ir}function Pd(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;ivn(c,l))?r.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(c=>vn(c,a))||o.push(a))}return[n,r,o]}function tn(){return Be(qr)}function St(e){return Be(Zo)}var es=Symbol(""),pt=()=>{const e=Be(es);if(!e)throw new Error("useClientData() is called without provider.");return e},Cd=()=>pt().pageComponent,Sn=()=>pt().pageData,at=()=>pt().pageFrontmatter,kd=()=>pt().pageHead,Ld=()=>pt().pageLang,xd=()=>pt().pageLayout,sr=()=>pt().routeLocale,Ed=()=>pt().routes,zl=()=>pt().siteData,ts=()=>pt().siteLocaleData,Ad=Symbol(""),Ao=yn(_f),pn=yn(bf),Jl=(e,t)=>{const n=af(e,t);if(pn.value[n])return n;const r=encodeURI(n);if(pn.value[r])return r;const o=Ao.value[n]||Ao.value[r];return o||n},qn=(e,t)=>{const{pathname:n,hashAndQueries:r}=Il(e),o=Jl(n,t),s=o+r;return pn.value[o]?{...pn.value[o],path:s,notFound:!1}:{...pn.value["/404.html"],path:s,notFound:!0}},Td=(e,t)=>{const{pathname:n,hashAndQueries:r}=Il(e);return Jl(n,t)+r},Rd=e=>{if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget){const t=e.currentTarget.getAttribute("target");if(t!=null&&t.match(/\b_blank\b/i))return}return e.preventDefault(),!0}},zr=he({name:"RouteLink",props:{to:{type:String,required:!0},active:Boolean,activeClass:{type:String,default:"route-link-active"}},slots:Object,setup(e,{slots:t}){const n=tn(),r=St(),o=A(()=>e.to.startsWith("#")||e.to.startsWith("?")?e.to:`/${Td(e.to,r.path).substring(1)}`);return()=>{var s;return ke("a",{class:["route-link",{[e.activeClass]:e.active}],href:o.value,onClick:(i={})=>{Rd(i)&&n.push(e.to).catch()}},(s=t.default)==null?void 0:s.call(t))}}}),Pn=he({name:"AutoLink",props:{config:{type:Object,required:!0}},slots:Object,setup(e,{slots:t}){const n=ac(e,"config"),r=St(),o=zl(),s=A(()=>or(n.value.link)),i=A(()=>n.value.target||(s.value?"_blank":void 0)),l=A(()=>i.value==="_blank"),a=A(()=>!s.value&&!l.value),c=A(()=>n.value.rel||(l.value?"noopener noreferrer":null)),f=A(()=>n.value.ariaLabel??n.value.text),u=A(()=>{if(n.value.exact)return!1;const g=Object.keys(o.value.locales);return g.length?g.every(_=>_!==n.value.link):n.value.link!=="/"}),p=A(()=>a.value?n.value.activeMatch?(n.value.activeMatch instanceof RegExp?n.value.activeMatch:new RegExp(n.value.activeMatch,"u")).test(r.path):u.value?r.path.startsWith(n.value.link):r.path===n.value.link:!1);return()=>{const{before:g,after:_,default:S}=t,k=(S==null?void 0:S(n.value))||[g==null?void 0:g(n.value),n.value.text,_==null?void 0:_(n.value)];return a.value?ke(zr,{class:"auto-link",to:n.value.link,active:p.value,"aria-label":f.value},()=>k):ke("a",{class:"auto-link external-link",href:n.value.link,"aria-label":f.value,rel:c.value,target:i.value},k)}}}),ns=he({name:"ClientOnly",setup(e,t){const n=ue(!1);return Ge(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)==null?void 0:o.call(r):null}}}),rs=he({name:"Content",props:{path:{type:String,required:!1,default:""}},setup(e){const t=Cd(),n=A(()=>{if(!e.path)return t.value;const r=qn(e.path);return bc(()=>r.loader().then(({comp:o})=>o))});return()=>ke(n.value)}}),Dd="Layout",Od="en-US",Kt=Xn({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageHead:(e,t,n)=>{const r=st(t.description)?t.description:n.description,o=[...Array.isArray(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return pf(o)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||Od,resolvePageLayout:(e,t)=>{const n=st(e.frontmatter.layout)?e.frontmatter.layout:Dd;if(!t[n])throw new Error(`[vuepress] Cannot resolve layout: ${n}`);return t[n]},resolveRouteLocale:(e,t)=>cf(e,decodeURI(t)),resolveSiteLocaleData:({base:e,locales:t,...n},r)=>{var o;return{...n,...t[r],head:[...((o=t[r])==null?void 0:o.head)??[],...n.head??[]]}}}),Ft=(e={})=>e,os=e=>Kr(e)?e:`/${$l(e)}`;function Jr(e){return Ni()?(Oa(e),!0):!1}function ht(e){return typeof e=="function"?e():Yt(e)}const ss=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Id=Object.prototype.toString,Md=e=>Id.call(e)==="[object Object]",To=()=>{};function Ql(e,t){function n(...r){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(s)})}return n}const Yl=e=>e();function $d(e,t={}){let n,r,o=To;const s=l=>{clearTimeout(l),o(),o=To};return l=>{const a=ht(e),c=ht(t.maxWait);return n&&s(n),a<=0||c!==void 0&&c<=0?(r&&(s(r),r=null),Promise.resolve(l())):new Promise((f,u)=>{o=t.rejectOnCancel?u:f,c&&!r&&(r=setTimeout(()=>{n&&s(n),r=null,f(l())},c)),n=setTimeout(()=>{r&&s(r),r=null,f(l())},a)})}}function Nd(e=Yl){const t=ue(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...s)=>{t.value&&e(...s)};return{isActive:Nr(t),pause:n,resume:r,eventFilter:o}}function Hd(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const r=t;t=void 0,r&&await r},n}function Vd(e){return Wr()}function jd(e,t=200,n={}){return Ql($d(t,n),e)}function Fd(e,t,n={}){const{eventFilter:r=Yl,...o}=n;return $e(e,Ql(r,t),o)}function Bd(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:s,pause:i,resume:l,isActive:a}=Nd(r);return{stop:Fd(e,t,{...o,eventFilter:s}),pause:i,resume:l,isActive:a}}function is(e,t=!0,n){Vd()?Ge(e,n):t?e():wn(e)}function Wd(e,t,n={}){const{immediate:r=!0}=n,o=ue(!1);let s=null;function i(){s&&(clearTimeout(s),s=null)}function l(){o.value=!1,i()}function a(...c){i(),o.value=!0,s=setTimeout(()=>{o.value=!1,s=null,e(...c)},ht(t))}return r&&(o.value=!0,ss&&a()),Jr(l),{isPending:Nr(o),start:a,stop:l}}function Ud(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,o=Ne(e),s=ue(e);function i(l){if(arguments.length)return s.value=l,s.value;{const a=ht(n);return s.value=s.value===a?ht(r):a,s.value}}return o?i:[s,i]}function zt(e){var t;const n=ht(e);return(t=n==null?void 0:n.$el)!=null?t:n}const yt=ss?window:void 0,Xl=ss?window.navigator:void 0;function lt(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=yt):[t,n,r,o]=e,!t)return To;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const s=[],i=()=>{s.forEach(f=>f()),s.length=0},l=(f,u,p,g)=>(f.addEventListener(u,p,g),()=>f.removeEventListener(u,p,g)),a=$e(()=>[zt(t),ht(o)],([f,u])=>{if(i(),!f)return;const p=Md(u)?{...u}:u;s.push(...n.flatMap(g=>r.map(_=>l(f,g,_,p))))},{immediate:!0,flush:"post"}),c=()=>{a(),i()};return Jr(c),c}function Kd(){const e=ue(!1),t=Wr();return t&&Ge(()=>{e.value=!0},t),e}function Qr(e){const t=Kd();return A(()=>(t.value,!!e()))}function ls(e,t={}){const{window:n=yt}=t,r=Qr(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const s=ue(!1),i=c=>{s.value=c.matches},l=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",i):o.removeListener(i))},a=ru(()=>{r.value&&(l(),o=n.matchMedia(ht(e)),"addEventListener"in o?o.addEventListener("change",i):o.addListener(i),s.value=o.matches)});return Jr(()=>{a(),l(),o=void 0}),s}function yi(e,t={}){const{controls:n=!1,navigator:r=Xl}=t,o=Qr(()=>r&&"permissions"in r);let s;const i=typeof e=="string"?{name:e}:e,l=ue(),a=()=>{s&&(l.value=s.state)},c=Hd(async()=>{if(o.value){if(!s)try{s=await r.permissions.query(i),lt(s,"change",a),a()}catch{l.value="prompt"}return s}});return c(),n?{state:l,isSupported:o,query:c}:l}function Gd(e={}){const{navigator:t=Xl,read:n=!1,source:r,copiedDuring:o=1500,legacy:s=!1}=e,i=Qr(()=>t&&"clipboard"in t),l=yi("clipboard-read"),a=yi("clipboard-write"),c=A(()=>i.value||s),f=ue(""),u=ue(!1),p=Wd(()=>u.value=!1,o);function g(){i.value&&R(l.value)?t.clipboard.readText().then(b=>{f.value=b}):f.value=k()}c.value&&n&<(["copy","cut"],g);async function _(b=ht(r)){c.value&&b!=null&&(i.value&&R(a.value)?await t.clipboard.writeText(b):S(b),f.value=b,u.value=!0,p.start())}function S(b){const m=document.createElement("textarea");m.value=b??"",m.style.position="absolute",m.style.opacity="0",document.body.appendChild(m),m.select(),document.execCommand("copy"),m.remove()}function k(){var b,m,w;return(w=(m=(b=document==null?void 0:document.getSelection)==null?void 0:b.call(document))==null?void 0:m.toString())!=null?w:""}function R(b){return b==="granted"||b==="prompt"}return{isSupported:c,text:f,copied:u,copy:_}}const mr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},vr="__vueuse_ssr_handlers__",qd=zd();function zd(){return vr in mr||(mr[vr]=mr[vr]||{}),mr[vr]}function Jd(e,t){return qd[e]||t}function Qd(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Yd={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))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},wi="vueuse-storage";function as(e,t,n,r={}){var o;const{flush:s="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:a=!0,mergeDefaults:c=!1,shallow:f,window:u=yt,eventFilter:p,onError:g=L=>{console.error(L)},initOnMounted:_}=r,S=(f?yn:ue)(typeof t=="function"?t():t);if(!n)try{n=Jd("getDefaultStorage",()=>{var L;return(L=yt)==null?void 0:L.localStorage})()}catch(L){g(L)}if(!n)return S;const k=ht(t),R=Qd(k),b=(o=r.serializer)!=null?o:Yd[R],{pause:m,resume:w}=Bd(S,()=>O(S.value),{flush:s,deep:i,eventFilter:p});u&&l&&is(()=>{lt(u,"storage",Z),lt(u,wi,j),_&&Z()}),_||Z();function V(L,U){u&&u.dispatchEvent(new CustomEvent(wi,{detail:{key:e,oldValue:L,newValue:U,storageArea:n}}))}function O(L){try{const U=n.getItem(e);if(L==null)V(U,null),n.removeItem(e);else{const T=b.write(L);U!==T&&(n.setItem(e,T),V(U,T))}}catch(U){g(U)}}function G(L){const U=L?L.newValue:n.getItem(e);if(U==null)return a&&k!=null&&n.setItem(e,b.write(k)),k;if(!L&&c){const T=b.read(U);return typeof c=="function"?c(T,k):R==="object"&&!Array.isArray(T)?{...k,...T}:T}else return typeof U!="string"?U:b.read(U)}function Z(L){if(!(L&&L.storageArea!==n)){if(L&&L.key==null){S.value=k;return}if(!(L&&L.key!==e)){m();try{(L==null?void 0:L.newValue)!==b.write(S.value)&&(S.value=G(L))}catch(U){g(U)}finally{L?wn(w):w()}}}}function j(L){Z(L.detail)}return S}function Xd(e){return ls("(prefers-color-scheme: dark)",e)}function Zd(e,t,n={}){const{window:r=yt,...o}=n;let s;const i=Qr(()=>r&&"ResizeObserver"in r),l=()=>{s&&(s.disconnect(),s=void 0)},a=A(()=>Array.isArray(e)?e.map(u=>zt(u)):[zt(e)]),c=$e(a,u=>{if(l(),i.value&&r){s=new ResizeObserver(t);for(const p of u)p&&s.observe(p,o)}},{immediate:!0,flush:"post"}),f=()=>{l(),c()};return Jr(f),{isSupported:i,stop:f}}function eh(e,t={width:0,height:0},n={}){const{window:r=yt,box:o="content-box"}=n,s=A(()=>{var u,p;return(p=(u=zt(e))==null?void 0:u.namespaceURI)==null?void 0:p.includes("svg")}),i=ue(t.width),l=ue(t.height),{stop:a}=Zd(e,([u])=>{const p=o==="border-box"?u.borderBoxSize:o==="content-box"?u.contentBoxSize:u.devicePixelContentBoxSize;if(r&&s.value){const g=zt(e);if(g){const _=g.getBoundingClientRect();i.value=_.width,l.value=_.height}}else if(p){const g=Array.isArray(p)?p:[p];i.value=g.reduce((_,{inlineSize:S})=>_+S,0),l.value=g.reduce((_,{blockSize:S})=>_+S,0)}else i.value=u.contentRect.width,l.value=u.contentRect.height},n);is(()=>{const u=zt(e);u&&(i.value="offsetWidth"in u?u.offsetWidth:t.width,l.value="offsetHeight"in u?u.offsetHeight:t.height)});const c=$e(()=>zt(e),u=>{i.value=u?t.width:0,l.value=u?t.height:0});function f(){a(),c()}return{width:i,height:l,stop:f}}function th(e,t,n={}){const{window:r=yt}=n;return as(e,t,r==null?void 0:r.sessionStorage,n)}function nh(e={}){const{window:t=yt,behavior:n="auto"}=e;if(!t)return{x:ue(0),y:ue(0)};const r=ue(t.scrollX),o=ue(t.scrollY),s=A({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),i=A({get(){return o.value},set(l){scrollTo({top:l,behavior:n})}});return lt(t,"scroll",()=>{r.value=t.scrollX,o.value=t.scrollY},{capture:!1,passive:!0}),{x:s,y:i}}function rh(e={}){const{window:t=yt,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:s=!0}=e,i=ue(n),l=ue(r),a=()=>{t&&(s?(i.value=t.innerWidth,l.value=t.innerHeight):(i.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(a(),is(a),lt("resize",a,{passive:!0}),o){const c=ls("(orientation: portrait)");$e(c,()=>a())}return{width:i,height:l}}const Si=async(e,t)=>{const{path:n,query:r}=e.currentRoute.value,{scrollBehavior:o}=e.options;e.options.scrollBehavior=void 0,await e.replace({path:n,query:r,hash:t}),e.options.scrollBehavior=o},oh=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=tn();lt("scroll",jd(()=>{var _,S;const i=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(i-0)u.some(R=>R.hash===k.hash));for(let k=0;k=(((_=R.parentElement)==null?void 0:_.offsetTop)??0)-r,w=!b||i<(((S=b.parentElement)==null?void 0:S.offsetTop)??0)-r;if(!(m&&w))continue;const O=decodeURIComponent(o.currentRoute.value.hash),G=decodeURIComponent(R.hash);if(O===G)return;if(f){for(let Z=k+1;Z{const t=sr();return A(()=>e[t.value]??{})},fh=()=>{const e=Ed();return A(()=>Object.keys(e.value))},ho=(e,t)=>{var r;const n=(r=Wr())==null?void 0:r.appContext.components;return n?e in n||Qe(e)in n||Qn(Qe(e))in n:!1},dh=e=>new Promise(t=>setTimeout(t,e)),hh=({selector:e=[...new Array(6)].map((r,o)=>`#vp-content h${o+1}`).join(","),levels:t=2,ignore:n=[]}={})=>{const r=Array.from(document.querySelectorAll(e)).filter(o=>o.id&&o.hasChildNodes()).map(o=>{const s=Number(o.tagName[1]);return{element:o,title:ph(o,n),link:"#"+o.id,slug:o.id,level:s}});return gh(r,t)},ph=(e,t=[])=>{let n="";if(t.length){const r=e.cloneNode(!0);r.querySelectorAll(t.join(",")).forEach(o=>o.remove()),n=r.textContent||""}else n=e.textContent||"";return n.trim()},gh=(e,t=2)=>{if(t===!1)return[];const[n,r]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;e=e.filter(s=>s.level>=n&&s.level<=r);const o=[];e:for(let s=0;s=0;l--){const a=e[l];if(a.levelst(e)&&e.startsWith(t),mh=Object.keys,ta=e=>ea(e,"/");var vh={"/eng/":{backToTop:"Back to top"},"/":{backToTop:"Вернуться к началу"}};const _h=he({name:"BackToTop",setup(){const e=at(),t=Zl(vh),n=yn(),{height:r}=eh(n),{height:o}=rh(),{y:s}=nh(),i=A(()=>e.value.backToTop!==!1&&s.value>100),l=A(()=>s.value/(r.value-o.value)*100);return Ge(()=>{n.value=document.body}),()=>ke(rr,{name:"back-to-top"},()=>i.value?ke("button",{type:"button",class:"vp-back-to-top-button","aria-label":t.value.backToTop,onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[ke("span",{class:"vp-scroll-progress",role:"progressbar","aria-labelledby":"loadinglabel","aria-valuenow":l.value},ke("svg",ke("circle",{cx:"26",cy:"26",r:"24",fill:"none",stroke:"currentColor","stroke-width":"4","stroke-dasharray":`${Math.PI*l.value*.48} ${Math.PI*(100-l.value)*.48}`}))),ke("div",{class:"back-to-top-icon"})]):null)}}),bh=Ft({rootComponents:[_h]}),yh=Object.freeze(Object.defineProperty({__proto__:null,default:bh},Symbol.toStringTag,{value:"Module"})),wh=/language-(shellscript|shell|bash|sh|zsh)/,Sh=({delay:e=500,duration:t=2e3,locales:n,selector:r,showInMobile:o,ignoreSelector:s=[],transform:i})=>{const l=ls("(max-width: 419px)"),a=A(()=>!l.value||o),c=Zl(n),f=Sn(),u=k=>{var b;if(k.hasAttribute("copy-code-registered"))return;const R=document.createElement("button");R.type="button",R.classList.add("vp-copy-code-button"),R.setAttribute("aria-label",c.value.copy),R.setAttribute("data-copied",c.value.copied),(b=k.parentElement)==null||b.insertBefore(R,k),k.setAttribute("copy-code-registered","")};$e(()=>[f.value.path,a.value],async()=>{document.body.classList.toggle("copy-code-disabled",!a.value),a.value&&(await wn(),await dh(e),document.querySelectorAll(r.join(",")).forEach(u))},{immediate:!0});const{copy:g}=Gd({legacy:!0}),_=new WeakMap,S=(k,R,b)=>{const m=R.cloneNode(!0);s.length&&m.querySelectorAll(s.join(",")).forEach(V=>V.remove()),i&&i(m);let w=m.textContent||"";wh.test(k.className)&&(w=w.replace(/^ *(\$|>) /gm,"")),g(w).then(()=>{if(t<=0)return;b.classList.add("copied"),clearTimeout(_.get(b));const V=setTimeout(()=>{b.classList.remove("copied"),b.blur(),_.delete(b)},t);_.set(b,V)})};lt("click",k=>{const R=k.target;if(a.value&&R.matches('div[class*="language-"] > button.vp-copy-code-button')){const b=R.parentElement,m=R.nextElementSibling;if(!b||!m)return;S(b,m,R)}})};var Ph={"/eng/":{copy:"Copy code",copied:"Copied"},"/":{copy:"Скопировать код",copied:"Скопировано"}},Ch=['.theme-default-content div[class*="language-"] pre'];const kh=Ft({setup:()=>{Sh({selector:Ch,locales:Ph,duration:2e3,delay:500,showInMobile:!1})}}),Lh=Object.freeze(Object.defineProperty({__proto__:null,default:kh},Symbol.toStringTag,{value:"Module"}));/** * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT - */const ae={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=ae.isStarted();e=po(e,ae.settings.minimum,1),ae.status=e===1?null:e;const n=ae.render(!t),r=n.querySelector(ae.settings.barSelector),o=ae.settings.speed,s=ae.settings.easing;return n.offsetWidth,xh(i=>{_r(r,{transform:"translate3d("+Pi(e)+"%,0,0)",transition:"all "+o+"ms "+s}),e===1?(_r(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(()=>{_r(n,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(()=>{ae.remove(),i()},o)},o)):setTimeout(()=>i(),o)}),ae},isStarted:()=>typeof ae.status=="number",start:()=>{ae.status||ae.set(0);const e=()=>{setTimeout(()=>{ae.status&&(ae.trickle(),e())},ae.settings.trickleSpeed)};return ae.settings.trickle&&e(),ae},done:e=>!e&&!ae.status?ae:ae.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=ae.status;return t?(typeof e!="number"&&(e=(1-t)*po(Math.random()*t,.1,.95)),t=po(t+e,0,.994),ae.set(t)):ae.start()},trickle:()=>ae.inc(Math.random()*ae.settings.trickleRate),render:e=>{if(ae.isRendered())return document.getElementById("nprogress");Ci(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=ae.settings.template;const n=t.querySelector(ae.settings.barSelector),r=e?"-100":Pi(ae.status||0),o=document.querySelector(ae.settings.parent);return _r(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),o!==document.body&&Ci(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{ki(document.documentElement,"nprogress-busy"),ki(document.querySelector(ae.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&Eh(e)},isRendered:()=>!!document.getElementById("nprogress")},po=(e,t,n)=>en?n:e,Pi=e=>(-1+e)*100,xh=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),_r=function(){const e=["Webkit","O","Moz","ms"],t={};function n(i){return i.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(l,a){return a.toUpperCase()})}function r(i){const l=document.body.style;if(i in l)return i;let a=e.length;const c=i.charAt(0).toUpperCase()+i.slice(1);let f;for(;a--;)if(f=e[a]+c,f in l)return f;return i}function o(i){return i=n(i),t[i]??(t[i]=r(i))}function s(i,l,a){l=o(l),i.style[l]=a}return function(i,l){for(const a in l){const c=l[a];c!==void 0&&Object.prototype.hasOwnProperty.call(l,a)&&s(i,a,c)}}}(),na=(e,t)=>(typeof e=="string"?e:cs(e)).indexOf(" "+t+" ")>=0,Ci=(e,t)=>{const n=cs(e),r=n+t;na(n,t)||(e.className=r.substring(1))},ki=(e,t)=>{const n=cs(e);if(!na(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},cs=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),Eh=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)},Ah=()=>{Ge(()=>{const e=tn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||ae.start()}),e.afterEach(n=>{t.add(n.path),ae.done()})})},Th=Ft({setup(){Ah()}}),Rh=Object.freeze(Object.defineProperty({__proto__:null,default:Th},Symbol.toStringTag,{value:"Module"})),Dh=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Oh=JSON.parse(`{"repo":"https://git.pleshevski.ru/pleshevskiy/pleshevski.ru","locales":{"/":{"selectLanguageName":"Русский","navbar":["/","/works"],"notFound":["Верните страницу!","Мы потеряли страницу...","Вы заблокированы в лабиринте.","Искали кота?","Страница украдена.","Ошиблись в параллельной вселенной."],"backToHome":"Вернуться на главную","worksTable":{"name":"Название","description":"Описание","role":"Роль","technologies":"Технологии","status":"Статус","dates":"Даты"}},"/eng/":{"selectLanguageName":"English","navbar":["/eng/","/eng/works"],"notFound":["Return the page!","We lost a page...","You're blocked in a labyrinth.","Looking for a cat?","The page has been stolen.","Wrong turn in parallel universe."],"backToHome":"Back to home","worksTable":{"name":"Name","description":"Description","role":"Role","technologies":"Technologies","status":"Status","dates":"Dates"}}},"colorMode":"auto","colorModeSwitch":true,"navbar":[],"logo":null,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebar":"heading","sidebarDepth":2,"editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"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","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),Ih=ue(Oh),ra=()=>Ih,oa=Symbol(""),Mh=()=>{const e=Be(oa);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},$h=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},Nh=Ft({enhance({app:e}){const t=ra(),n=e._context.provides[es],r=A(()=>$h(t.value,n.routeLocale.value));e.provide(oa,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}}),Hh=Object.freeze(Object.defineProperty({__proto__:null,default:Nh},Symbol.toStringTag,{value:"Module"})),Vh=()=>ra(),Re=()=>Mh(),sa=Symbol(""),jh=e=>{const t=(n=e.value)=>{const r=window.document.documentElement;r.classList.toggle("dark",n),r.dataset.theme=n?"dark":"light"};Ge(()=>{$e(e,t,{immediate:!0})}),Fr(()=>t())},us=()=>{const e=Be(sa);if(!e)throw new Error("useDarkMode() is called without provider.");return e},Fh=()=>{const e=Re(),t=Xd(),n=as("vuepress-color-scheme",e.value.colorMode),r=A({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?n.value="auto":n.value=o?"dark":"light"}});Xt(sa,r),jh(r)};let go=null,An=null;const Bh={wait:()=>go,pending:()=>{go=new Promise(e=>An=e)},resolve:()=>{An==null||An(),go=null,An=null}},ia=()=>Bh,bn=(e,t)=>{const{notFound:n,meta:r,path:o}=qn(e,t);return n?{text:o,link:o}:{text:r.title||o,link:o}},Li=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Wh=(e,t)=>{if(t.hash===e)return!0;const n=Li(t.path),r=Li(e);return n===r},la=(e,t)=>e.link&&Wh(e.link,t)?!0:"children"in e?e.children.some(n=>la(n,t)):!1,aa=e=>!sf(e)&&!or(e),ca=e=>!Kr(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Uh={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"},Kh=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=ca(e);return n!==null?Uh[n]:null},Gh=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:r,editLinkPattern:o})=>{if(!r)return null;const s=Kh({docsRepo:e,editLinkPattern:o});return s?s.replace(/:repo/,Kr(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,$l(`${Ml(n)}/${r}`)):null},gn=(e="",t="")=>ta(t)||or(t)?t:`${gf(e)}${t}`,Sr=ue([]),qh=()=>{const e=tn(),t=Re(),n=at(),r=A(()=>n.value.sidebarDepth??t.value.sidebarDepth??2);e.beforeEach((s,i)=>{s.path!==i.path&&(Sr.value=[])});const o=()=>{if(r.value<=0){Sr.value=[];return}Sr.value=hh({selector:[...new Array(6)].map((s,i)=>`.theme-default-content h${i+1}`).join(","),levels:[2,r.value+1],ignore:[".vp-badge"]})};$e(r,o),Ge(o)},zh=()=>Sr,ua=Symbol("sidebarItems"),fs=()=>{const e=Be(ua);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},Jh=()=>{const e=Re(),t=at(),n=Sn(),r=St(),o=sr(),s=zh(),i=A(()=>t.value.home?!1:t.value.sidebar??e.value.sidebar??"heading"),l=A(()=>Qh(i.value,n.value,r.path,o.value,s.value));Xt(ua,l)},Qh=(e,t,n,r,o)=>e===!1?[]:e==="heading"?fa(t,o):Array.isArray(e)?da(e,o,n,r):Yo(e)?Xh(e,t,o,n):[],Yh=e=>({text:e.title,link:e.link,children:ds(e.children)}),ds=e=>e?e.map(t=>Yh(t)):[],fa=(e,t)=>[{text:e.title,children:ds(t)}],da=(e,t,n,r="")=>{const o=(s,i)=>{var a;const l=st(s)?bn(gn(i,s)):st(s.link)?{...s,link:aa(s.link)?bn(gn(i,s.link)).link:s.link}:s;if("children"in l)return{...l,children:l.children.map(c=>o(c,gn(i,l.prefix)))};if(l.link===n){const c=((a=t[0])==null?void 0:a.level)===1?t[0].children:t;return{...l,children:ds(c)}}return l};return e.map(s=>o(s,r))},Xh=(e,t,n,r)=>{const o=mh(e).sort((s,i)=>i.length-s.length);for(const s of o)if(ea(decodeURI(r),s)){const i=e[s];return i?i==="heading"?fa(t,n):da(i,n,r,s):[]}return console.warn(`${decodeURI(r)} is missing sidebar config.`),[]},Zh=he({__name:"Badge",props:{type:{default:"tip"},text:{default:""},vertical:{default:void 0}},setup(e,{expose:t}){t();const n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),we=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n};function ep(e,t,n,r,o,s){return $(),Y("span",{class:Fe(["vp-badge",n.type]),style:Yn({verticalAlign:n.vertical})},[Le(e.$slots,"default",{},()=>[$t(le(n.text),1)])],6)}const tp=we(Zh,[["render",ep],["__file","Badge.vue"]]),np=he({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=ue([]),r=ue(-1),o=as("vuepress-code-group",{}),s=A(()=>n.value.map(c=>c.innerText).join(","));Ge(()=>{$e(()=>o.value[s.value],(c=-1)=>{r.value!==c&&(r.value=c)},{immediate:!0}),$e(r,c=>{o.value[s.value]!==c&&(o.value[s.value]=c)})});const i=(c=r.value)=>{c{c>0?r.value=c-1:r.value=n.value.length-1,n.value[r.value].focus()},a=(c,f)=>{c.key===" "||c.key==="Enter"?(c.preventDefault(),r.value=f):c.key==="ArrowRight"?(c.preventDefault(),i(f)):c.key==="ArrowLeft"&&(c.preventDefault(),l(f))};return()=>{var f;const c=(((f=t.default)==null?void 0:f.call(t))||[]).filter(u=>u.type.name==="CodeGroupItem").map(u=>(u.props===null&&(u.props={}),u));return c.length===0?null:(r.value<0||r.value>c.length-1?(r.value=c.findIndex(u=>u.props.active===""||u.props.active===!0),r.value===-1&&(r.value=0)):c.forEach((u,p)=>{u.props.active=p===r.value}),ke("div",{class:"code-group"},[ke("div",{class:"code-group-nav",role:"tablist"},c.map((u,p)=>{const g=p===r.value;return ke("button",{ref:_=>{_&&(n.value[p]=_)},class:{"code-group-nav-tab":!0,active:g},role:"tab",ariaSelected:g,onClick:()=>r.value=p,onKeydown:_=>a(_,p)},u.props.title)})),c]))}}}),rp=he({name:"CodeGroupItem",__name:"CodeGroupItem",props:{title:{},active:{type:Boolean}},setup(e,{expose:t}){t();const n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function op(e,t,n,r,o,s){return $(),Y("div",{class:Fe(["code-group-item",{active:n.active}]),role:"tabpanel"},[Le(e.$slots,"default")],2)}const sp=we(rp,[["render",op],["__file","CodeGroupItem.vue"]]),ip=he({__name:"VPHomeFeatures",setup(e,{expose:t}){t();const n=at(),r=A(()=>n.value.features??[]),o={frontmatter:n,features:r};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),lp={key:0,class:"vp-features"};function ap(e,t,n,r,o,s){return r.features.length?($(),Y("div",lp,[($(!0),Y(be,null,bt(r.features,i=>($(),Y("div",{key:i.title,class:"vp-feature"},[W("h2",null,le(i.title),1),W("p",null,le(i.details),1)]))),128))])):Ae("",!0)}const cp=we(ip,[["render",ap],["__file","VPHomeFeatures.vue"]]),up=he({__name:"VPHomeFooter",setup(e,{expose:t}){t();const n=at(),r=A(()=>n.value.footer),o=A(()=>n.value.footerHtml),s={frontmatter:n,footer:r,footerHtml:o};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),fp=["innerHTML"],dp=["textContent"];function hp(e,t,n,r,o,s){return r.footer?($(),Y(be,{key:0},[r.footerHtml?($(),Y("div",{key:0,class:"vp-footer",innerHTML:r.footer},null,8,fp)):($(),Y("div",{key:1,class:"vp-footer",textContent:le(r.footer)},null,8,dp))],64)):Ae("",!0)}const pp=we(up,[["render",hp],["__file","VPHomeFooter.vue"]]),gp=he({__name:"VPHomeHero",setup(e,{expose:t}){t();const n=at(),r=ts(),o=us(),s=A(()=>o.value&&n.value.heroImageDark!==void 0?n.value.heroImageDark:n.value.heroImage),i=A(()=>n.value.heroAlt||a.value||"hero"),l=A(()=>n.value.heroHeight||280),a=A(()=>n.value.heroText===null?null:n.value.heroText||r.value.title||"Hello"),c=A(()=>n.value.tagline===null?null:n.value.tagline||r.value.description||"Welcome to your VuePress site"),f=A(()=>Array.isArray(n.value.actions)?n.value.actions.map(({text:g,link:_,type:S="primary"})=>({text:g,link:_,type:S})):[]),p={frontmatter:n,siteLocale:r,isDarkMode:o,heroImage:s,heroAlt:i,heroHeight:l,heroText:a,tagline:c,actions:f,HomeHeroImage:()=>{if(!s.value)return null;const g=ke("img",{class:"vp-hero-image",src:os(s.value),alt:i.value,height:l.value});return n.value.heroImageDark===void 0?g:ke(ns,()=>g)},get AutoLink(){return Pn}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),mp={class:"vp-hero"},vp={key:0,id:"main-title"},_p={key:1,class:"vp-hero-description"},bp={key:2,class:"vp-hero-actions"};function yp(e,t,n,r,o,s){return $(),Y("header",mp,[te(r.HomeHeroImage),r.heroText?($(),Y("h1",vp,le(r.heroText),1)):Ae("",!0),r.tagline?($(),Y("p",_p,le(r.tagline),1)):Ae("",!0),r.actions.length?($(),Y("p",bp,[($(!0),Y(be,null,bt(r.actions,i=>($(),xe(r.AutoLink,{key:i.text,class:Fe(["vp-hero-action-button",[i.type]]),config:i},null,8,["class","config"]))),128))])):Ae("",!0)])}const wp=we(gp,[["render",yp],["__file","VPHomeHero.vue"]]),Sp=he({__name:"VPHome",setup(e,{expose:t}){t();const n={VPHomeFeatures:cp,VPHomeFooter:pp,VPHomeHero:wp,get Content(){return rs}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Pp={class:"vp-home"},Cp={class:"theme-default-content"};function kp(e,t,n,r,o,s){return $(),Y("main",Pp,[te(r.VPHomeHero),te(r.VPHomeFeatures),W("div",Cp,[te(r.Content)]),te(r.VPHomeFooter)])}const Lp=we(Sp,[["render",kp],["__file","VPHome.vue"]]),xp="719px",Ep={mobile:xp};var zn;(function(e){e.MOBILE="mobile"})(zn||(zn={}));const Ap={[zn.MOBILE]:Number.parseInt(Ep.mobile.replace("px",""),10)},ha=(e,t)=>{const n=Ap[e];Number.isInteger(n)&&(lt("orientationchange",()=>t(n),!1),lt("resize",()=>t(n),!1),Ge(()=>{t(n)}))},Tp=he({__name:"VPNavbarBrand",setup(e,{expose:t}){t();const n=sr(),r=ts(),o=Re(),s=us(),i=A(()=>o.value.home||n.value),l=A(()=>r.value.title),a=A(()=>s.value&&o.value.logoDark!==void 0?o.value.logoDark:o.value.logo),c=A(()=>o.value.logoAlt??l.value),f=A(()=>l.value.toLocaleUpperCase().trim()===c.value.toLocaleUpperCase().trim()),p={routeLocale:n,siteLocale:r,themeLocale:o,isDarkMode:s,navbarBrandLink:i,navbarBrandTitle:l,navbarBrandLogo:a,navbarBrandLogoAlt:c,navBarLogoAltMatchesTitle:f,NavbarBrandLogo:()=>{if(!a.value)return null;const g=ke("img",{class:"vp-site-logo",src:os(a.value),alt:c.value});return o.value.logoDark===void 0?g:ke(ns,()=>g)},get RouteLink(){return zr}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),Rp=["aria-hidden"];function Dp(e,t,n,r,o,s){return $(),xe(r.RouteLink,{to:r.navbarBrandLink},{default:Ee(()=>[te(r.NavbarBrandLogo),r.navbarBrandTitle?($(),Y("span",{key:0,class:Fe(["vp-site-name",{"vp-hide-mobile":r.navbarBrandLogo}]),"aria-hidden":r.navBarLogoAltMatchesTitle},le(r.navbarBrandTitle),11,Rp)):Ae("",!0)]),_:1},8,["to"])}const Op=we(Tp,[["render",Dp],["__file","VPNavbarBrand.vue"]]),pa=(e,t="")=>st(e)?bn(gn(t,e)):"children"in e?{...e,children:e.children.map(n=>pa(n,gn(t,e.prefix)))}:{...e,link:aa(e.link)?bn(gn(t,e.link)).link:e.link},Ip=()=>{const e=Re();return A(()=>(e.value.navbar||[]).map(t=>pa(t)))},Mp=()=>{const e=Re(),t=A(()=>e.value.repo),n=A(()=>t.value?ca(t.value):null),r=A(()=>t.value&&!Kr(t.value)?`https://github.com/${t.value}`:t.value),o=A(()=>r.value?e.value.repoLabel?e.value.repoLabel:n.value===null?"Source":n.value:null);return A(()=>!r.value||!o.value?[]:[{text:o.value,link:r.value}])},$p=()=>{const e=St(),t=fh(),n=sr(),r=zl(),o=ts(),s=Vh(),i=Re();return A(()=>{const l=Object.keys(r.value.locales);if(l.length<2)return[];const a=e.path,c=e.fullPath;return[{text:`${i.value.selectLanguageText}`,ariaLabel:`${i.value.selectLanguageAriaLabel??i.value.selectLanguageText}`,children:l.map(u=>{var R,b;const p=((R=r.value.locales)==null?void 0:R[u])??{},g=((b=s.value.locales)==null?void 0:b[u])??{},_=`${p.lang}`,S=g.selectLanguageName??_;if(_===o.value.lang)return{text:S,activeMatch:".",link:e.fullPath};const k=a.replace(n.value,u);return{text:S,link:t.value.some(m=>m===k)?c.replace(a,k):g.home??u}})}]})},Np=he({__name:"VPDropdownTransition",setup(e,{expose:t}){t();const o={setHeight:s=>{s.style.height=s.scrollHeight+"px"},unsetHeight:s=>{s.style.height=""}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});function Hp(e,t,n,r,o,s){return $(),xe(rr,{name:"vp-dropdown",onEnter:r.setHeight,onAfterEnter:r.unsetHeight,onBeforeLeave:r.setHeight},{default:Ee(()=>[Le(e.$slots,"default")]),_:3})}const ga=we(Np,[["render",Hp],["__file","VPDropdownTransition.vue"]]),Vp=he({__name:"VPNavbarDropdown",props:{item:{}},setup(e,{expose:t}){t();const n=e,{item:r}=el(n),o=St(),s=ue(!1),i=A(()=>r.value.ariaLabel||r.value.text),l=(f,u)=>u[u.length-1]===f,a=f=>{const u=f.detail===0;s.value=u?!s.value:!1};$e(()=>o.path,()=>{s.value=!1});const c={props:n,item:r,route:o,open:s,dropdownAriaLabel:i,isLastItemOfArray:l,handleDropdown:a,VPDropdownTransition:ga,get AutoLink(){return Pn}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),jp=["aria-label"],Fp={class:"title"},Bp=W("span",{class:"arrow down"},null,-1),Wp=["aria-label"],Up={class:"title"},Kp={class:"vp-navbar-dropdown"},Gp={class:"vp-navbar-dropdown-subtitle"},qp={key:1},zp={class:"vp-navbar-dropdown-subitem-wrapper"};function Jp(e,t,n,r,o,s){return $(),Y("div",{class:Fe(["vp-navbar-dropdown-wrapper",{open:r.open}])},[W("button",{class:"vp-navbar-dropdown-title",type:"button","aria-label":r.dropdownAriaLabel,onClick:r.handleDropdown},[W("span",Fp,le(r.item.text),1),Bp],8,jp),W("button",{class:"vp-navbar-dropdown-title-mobile",type:"button","aria-label":r.dropdownAriaLabel,onClick:t[0]||(t[0]=i=>r.open=!r.open)},[W("span",Up,le(r.item.text),1),W("span",{class:Fe(["arrow",r.open?"down":"right"])},null,2)],8,Wp),te(r.VPDropdownTransition,null,{default:Ee(()=>[Lr(W("ul",Kp,[($(!0),Y(be,null,bt(r.item.children,i=>($(),Y("li",{key:i.text,class:"vp-navbar-dropdown-item"},["children"in i?($(),Y(be,{key:0},[W("h4",Gp,[i.link?($(),xe(r.AutoLink,{key:0,config:i,onFocusout:l=>r.isLastItemOfArray(i,r.item.children)&&i.children.length===0&&(r.open=!1)},null,8,["config","onFocusout"])):($(),Y("span",qp,le(i.text),1))]),W("ul",zp,[($(!0),Y(be,null,bt(i.children,l=>($(),Y("li",{key:l.link,class:"vp-navbar-dropdown-subitem"},[te(r.AutoLink,{config:l,onFocusout:a=>r.isLastItemOfArray(l,i.children)&&r.isLastItemOfArray(i,r.item.children)&&(r.open=!1)},null,8,["config","onFocusout"])]))),128))])],64)):($(),xe(r.AutoLink,{key:1,config:i,onFocusout:l=>r.isLastItemOfArray(i,r.item.children)&&(r.open=!1)},null,8,["config","onFocusout"]))]))),128))],512),[[Or,r.open]])]),_:1})],2)}const Qp=we(Vp,[["render",Jp],["__file","VPNavbarDropdown.vue"]]),Yp=he({__name:"VPNavbarItems",setup(e,{expose:t}){t();const n=Ip(),r=$p(),o=Mp(),s=ue(!1),i=A(()=>Re().value.navbarLabel??"site navigation"),l=A(()=>[...n.value,...r.value,...o.value]);ha(zn.MOBILE,c=>{s.value=window.innerWidth($(),Y("div",{key:i.text,class:"vp-navbar-item"},["children"in i?($(),xe(r.VPNavbarDropdown,{key:0,class:Fe({mobile:r.isMobile}),item:i},null,8,["class","item"])):($(),xe(r.AutoLink,{key:1,config:i},null,8,["config"]))]))),128))],8,Xp)):Ae("",!0)}const ma=we(Yp,[["render",Zp],["__file","VPNavbarItems.vue"]]),eg={},tg={class:"dark-icon",viewBox:"0 0 32 32"},ng=W("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),rg=[ng];function og(e,t){return $(),Y("svg",tg,rg)}const sg=we(eg,[["render",og],["__file","VPDarkIcon.vue"]]),ig={},lg={class:"light-icon",viewBox:"0 0 32 32"},ag=gu('',9),cg=[ag];function ug(e,t){return $(),Y("svg",lg,cg)}const fg=we(ig,[["render",ug],["__file","VPLightIcon.vue"]]),dg=he({__name:"VPToggleColorModeButton",setup(e,{expose:t}){t();const n=Re(),r=us(),s={themeLocale:n,isDarkMode:r,toggleColorMode:()=>{r.value=!r.value},VPDarkIcon:sg,VPLightIcon:fg};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),hg=["title"];function pg(e,t,n,r,o,s){return $(),Y("button",{class:"vp-toggle-color-mode-button",title:r.themeLocale.toggleColorMode,onClick:r.toggleColorMode},[Lr(te(r.VPLightIcon,null,null,512),[[Or,!r.isDarkMode]]),Lr(te(r.VPDarkIcon,null,null,512),[[Or,r.isDarkMode]])],8,hg)}const gg=we(dg,[["render",pg],["__file","VPToggleColorModeButton.vue"]]),mg=he({__name:"VPToggleSidebarButton",emits:["toggle"],setup(e,{expose:t}){t();const r={themeLocale:Re()};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),vg=["title"],_g=W("div",{class:"icon","aria-hidden":"true"},[W("span"),W("span"),W("span")],-1),bg=[_g];function yg(e,t,n,r,o,s){return $(),Y("div",{class:"vp-toggle-sidebar-button",title:r.themeLocale.toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:t[0]||(t[0]=i=>e.$emit("toggle"))},bg,8,vg)}const wg=we(mg,[["render",yg],["__file","VPToggleSidebarButton.vue"]]),Sg=he({__name:"VPNavbar",emits:["toggle-sidebar"],setup(e,{expose:t}){t();const n=Re(),r=ue(null),o=ue(null),s=ue(0),i=A(()=>s.value?{maxWidth:s.value+"px"}:{}),l=(c,f)=>{var g,_,S;const u=(S=(_=(g=c==null?void 0:c.ownerDocument)==null?void 0:g.defaultView)==null?void 0:_.getComputedStyle(c,null))==null?void 0:S[f],p=Number.parseInt(u,10);return Number.isNaN(p)?0:p};ha(zn.MOBILE,c=>{var u;const f=l(r.value,"paddingLeft")+l(r.value,"paddingRight");window.innerWidthe.$emit("toggle-sidebar"))}),W("span",Cg,[te(r.VPNavbarBrand)],512),W("div",{class:"vp-navbar-items-wrapper",style:Yn(r.linksWrapperStyle)},[Le(e.$slots,"before"),te(r.VPNavbarItems,{class:"vp-hide-mobile"}),Le(e.$slots,"after"),r.themeLocale.colorModeSwitch?($(),xe(r.VPToggleColorModeButton,{key:0})):Ae("",!0),te(i)],4)],512)}const Lg=we(Sg,[["render",kg],["__file","VPNavbar.vue"]]),xg=()=>{const e=Re(),t=Sn(),n=at();return A(()=>{var o;return n.value.contributors??e.value.contributors??!0?((o=t.value.git)==null?void 0:o.contributors)??null:null})},Eg=()=>{const e=Re(),t=Sn(),n=at();return A(()=>{if(!(n.value.editLink??e.value.editLink??!0))return null;const{repo:o,docsRepo:s=o,docsBranch:i="main",docsDir:l="",editLinkText:a}=e.value;if(!s)return null;const c=Gh({docsRepo:s,docsBranch:i,docsDir:l,filePathRelative:t.value.filePathRelative,editLinkPattern:n.value.editLinkPattern??e.value.editLinkPattern});return c?{text:a??"Edit this page",link:c}:null})},Ag=()=>{const e=Re(),t=Sn(),n=at();return A(()=>{var s,i;return!(n.value.lastUpdated??e.value.lastUpdated??!0)||!((s=t.value.git)!=null&&s.updatedTime)?null:new Date((i=t.value.git)==null?void 0:i.updatedTime).toLocaleString()})},Tg={},Rg={class:"edit-icon",viewBox:"0 0 1024 1024"},Dg=W("g",{fill:"currentColor"},[W("path",{d:"M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"}),W("path",{d:"M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"})],-1),Og=[Dg];function Ig(e,t){return $(),Y("svg",Rg,Og)}const Mg=we(Tg,[["render",Ig],["__file","VPEditIcon.vue"]]),$g=he({__name:"VPPageMeta",setup(e,{expose:t}){t();const n=Re(),r=Eg(),o=Ag(),s=xg(),i={themeLocale:n,editLink:r,lastUpdated:o,contributors:s,VPEditIcon:Mg,get AutoLink(){return Pn}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),Ng={class:"vp-page-meta"},Hg={key:0,class:"vp-meta-item edit-link"},Vg={class:"vp-meta-item git-info"},jg={key:0,class:"vp-meta-item last-updated"},Fg={class:"meta-item-label"},Bg={class:"meta-item-info"},Wg={key:1,class:"vp-meta-item contributors"},Ug={class:"meta-item-label"},Kg={class:"meta-item-info"},Gg=["title"];function qg(e,t,n,r,o,s){const i=Go("ClientOnly");return $(),Y("footer",Ng,[r.editLink?($(),Y("div",Hg,[te(r.AutoLink,{class:"label",config:r.editLink},{before:Ee(()=>[te(r.VPEditIcon)]),_:1},8,["config"])])):Ae("",!0),W("div",Vg,[r.lastUpdated?($(),Y("div",jg,[W("span",Fg,le(r.themeLocale.lastUpdatedText)+": ",1),te(i,null,{default:Ee(()=>[W("span",Bg,le(r.lastUpdated),1)]),_:1})])):Ae("",!0),r.contributors&&r.contributors.length?($(),Y("div",Wg,[W("span",Ug,le(r.themeLocale.contributorsText)+": ",1),W("span",Kg,[($(!0),Y(be,null,bt(r.contributors,(l,a)=>($(),Y(be,{key:a},[W("span",{class:"contributor",title:`email: ${l.email}`},le(l.name),9,Gg),a!==r.contributors.length-1?($(),Y(be,{key:0},[$t(", ")],64)):Ae("",!0)],64))),128))])])):Ae("",!0)])])}const zg=we($g,[["render",qg],["__file","VPPageMeta.vue"]]),Jg=()=>{const e=tn(),t=St();return n=>{n&&(ta(n)?t.path!==n&&e.push(n):or(n)?window==null||window.open(n):e.push(encodeURI(n)))}},xi=(e,t)=>e===!1?!1:st(e)?bn(e,t):Yo(e)?{...e,link:bn(e.link,t).link}:null,Ro=(e,t,n)=>{const r=e.findIndex(s=>s.link===t);if(r!==-1){const s=e[r+n];return s?s.link?s:"prefix"in s&&!qn(s.prefix).notFound?{...s,link:s.prefix}:null:null}for(const s of e)if("children"in s){const i=Ro(s.children,t,n);if(i)return i}const o=e.findIndex(s=>"prefix"in s&&s.prefix===t);if(o!==-1){const s=e[o+n];return s?s.link?s:"prefix"in s&&!qn(s.prefix).notFound?{...s,link:s.prefix}:null:null}return null},Qg=()=>{const e=at(),t=Re(),n=fs(),r=St(),o=A(()=>{const i=xi(e.value.prev,r.path);return i===!1?null:i??(t.value.prev===!1?null:Ro(n.value,r.path,-1))}),s=A(()=>{const i=xi(e.value.next,r.path);return i===!1?null:i??(t.value.next===!1?null:Ro(n.value,r.path,1))});return{prevLink:o,nextLink:s}},Yg=he({__name:"VPPageNav",setup(e,{expose:t}){t();const n=Re(),r=Jg(),{prevLink:o,nextLink:s}=Qg(),i=A(()=>Re().value.pageNavbarLabel??"page navigation");lt("keydown",a=>{a.altKey&&(a.key==="ArrowRight"?s.value&&(r(s.value.link),a.preventDefault()):a.key==="ArrowLeft"&&o.value&&(r(o.value.link),a.preventDefault()))});const l={themeLocale:n,navigate:r,prevLink:o,nextLink:s,navbarLabel:i,get AutoLink(){return Pn}};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),Xg=["aria-label"],Zg={class:"hint"},em=W("span",{class:"arrow left"},null,-1),tm={class:"link"},nm={class:"hint"},rm=W("span",{class:"arrow right"},null,-1),om={class:"link"};function sm(e,t,n,r,o,s){return r.prevLink||r.nextLink?($(),Y("nav",{key:0,class:"vp-page-nav","aria-label":r.navbarLabel},[r.prevLink?($(),xe(r.AutoLink,{key:0,class:"prev",config:r.prevLink},{default:Ee(()=>[W("div",Zg,[em,$t(" "+le(r.themeLocale.prev??"Prev"),1)]),W("div",tm,[W("span",null,le(r.prevLink.text),1)])]),_:1},8,["config"])):Ae("",!0),r.nextLink?($(),xe(r.AutoLink,{key:1,class:"next",config:r.nextLink},{default:Ee(()=>[W("div",nm,[$t(le(r.themeLocale.next??"Next")+" ",1),rm]),W("div",om,[W("span",null,le(r.nextLink.text),1)])]),_:1},8,["config"])):Ae("",!0)],8,Xg)):Ae("",!0)}const im=we(Yg,[["render",sm],["__file","VPPageNav.vue"]]),lm=he({__name:"VPPage",setup(e,{expose:t}){t(),qh();const n={VPPageMeta:zg,VPPageNav:im,get Content(){return rs}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),am={class:"vp-page"},cm={class:"theme-default-content"};function um(e,t,n,r,o,s){return $(),Y("main",am,[Le(e.$slots,"top"),W("div",cm,[Le(e.$slots,"content-top"),te(r.Content),Le(e.$slots,"content-bottom")]),te(r.VPPageMeta),te(r.VPPageNav),Le(e.$slots,"bottom")])}const fm=we(lm,[["render",um],["__file","VPPage.vue"]]),dm=he({__name:"VPSidebarItem",props:{item:{},depth:{default:0}},setup(e,{expose:t}){t();const n=e,{item:r,depth:o}=el(n),s=St(),i=tn(),l=A(()=>"collapsible"in r.value&&r.value.collapsible),a=A(()=>la(r.value,s)),c=A(()=>({"vp-sidebar-item":!0,"vp-sidebar-heading":o.value===0,active:a.value,collapsible:l.value})),f=A(()=>l.value?a.value:!0),[u,p]=Ud(f.value),g=k=>{l.value&&(k.preventDefault(),p())},_=i.afterEach(k=>{wn(()=>{u.value=f.value})});Ko(()=>{_()});const S={props:n,item:r,depth:o,route:s,router:i,collapsible:l,isActive:a,itemClass:c,isOpenDefault:f,isOpen:u,toggleIsOpen:p,onClick:g,unregisterRouterHook:_,VPDropdownTransition:ga,get AutoLink(){return Pn}};return Object.defineProperty(S,"__isScriptSetup",{enumerable:!1,value:!0}),S}}),hm={class:"vp-sidebar-children"};function pm(e,t,n,r,o,s){const i=Go("VPSidebarItem",!0);return $(),Y("li",null,[r.item.link?($(),xe(r.AutoLink,{key:0,class:Fe(r.itemClass),config:r.item},null,8,["class","config"])):($(),Y("p",{key:1,tabindex:"0",class:Fe(r.itemClass),onClick:r.onClick,onKeydown:Xu(r.onClick,["enter"])},[$t(le(r.item.text)+" ",1),r.collapsible?($(),Y("span",{key:0,class:Fe(["arrow",r.isOpen?"down":"right"])},null,2)):Ae("",!0)],34)),"children"in r.item&&r.item.children.length?($(),xe(r.VPDropdownTransition,{key:2},{default:Ee(()=>[Lr(W("ul",hm,[($(!0),Y(be,null,bt(r.item.children,l=>($(),xe(i,{key:`${r.depth}${l.text}${l.link}`,item:l,depth:r.depth+1},null,8,["item","depth"]))),128))],512),[[Or,r.isOpen]])]),_:1})):Ae("",!0)])}const gm=we(dm,[["render",pm],["__file","VPSidebarItem.vue"]]),mm=he({__name:"VPSidebarItems",setup(e,{expose:t}){t();const n=St(),r=fs();Ge(()=>{$e(()=>n.hash,s=>{const i=document.querySelector(".vp-sidebar");if(!i)return;const l=document.querySelector(`.vp-sidebar a.vp-sidebar-item[href="${n.path}${s}"]`);if(!l)return;const{top:a,height:c}=i.getBoundingClientRect(),{top:f,height:u}=l.getBoundingClientRect();fa+c&&l.scrollIntoView(!1)})});const o={route:n,sidebarItems:r,VPSidebarItem:gm};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),vm={key:0,class:"vp-sidebar-items"};function _m(e,t,n,r,o,s){return r.sidebarItems.length?($(),Y("ul",vm,[($(!0),Y(be,null,bt(r.sidebarItems,i=>($(),xe(r.VPSidebarItem,{key:`${i.text}${i.link}`,item:i},null,8,["item"]))),128))])):Ae("",!0)}const bm=we(mm,[["render",_m],["__file","VPSidebarItems.vue"]]),ym=he({__name:"VPSidebar",setup(e,{expose:t}){t();const n={VPNavbarItems:ma,VPSidebarItems:bm};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),wm={class:"vp-sidebar"};function Sm(e,t,n,r,o,s){return $(),Y("aside",wm,[te(r.VPNavbarItems),Le(e.$slots,"top"),te(r.VPSidebarItems),Le(e.$slots,"bottom")])}const Pm=we(ym,[["render",Sm],["__file","VPSidebar.vue"]]),Cm=he({__name:"Layout",setup(e,{expose:t}){t();const n=Sn(),r=at(),o=Re(),s=A(()=>r.value.navbar!==!1&&o.value.navbar!==!1),i=fs(),l=ue(!1),a=m=>{l.value=typeof m=="boolean"?m:!l.value},c={x:0,y:0},f=m=>{c.x=m.changedTouches[0].clientX,c.y=m.changedTouches[0].clientY},u=m=>{const w=m.changedTouches[0].clientX-c.x,V=m.changedTouches[0].clientY-c.y;Math.abs(w)>Math.abs(V)&&Math.abs(w)>40&&(w>0&&c.x<=80?a(!0):a(!1))},p=A(()=>r.value.externalLinkIcon??o.value.externalLinkIcon??!0),g=A(()=>[{"no-navbar":!s.value,"no-sidebar":!i.value.length,"sidebar-open":l.value,"external-link-icon":p.value},r.value.pageClass]);let _;Ge(()=>{_=tn().afterEach(()=>{a(!1)})}),Fr(()=>{_()});const S=ia(),k=S.resolve,R=S.pending,b={page:n,frontmatter:r,themeLocale:o,shouldShowNavbar:s,sidebarItems:i,isSidebarOpen:l,toggleSidebar:a,touchStart:c,onTouchStart:f,onTouchEnd:u,enableExternalLinkIcon:p,containerClass:g,get unregisterRouterHook(){return _},set unregisterRouterHook(m){_=m},scrollPromise:S,onBeforeEnter:k,onBeforeLeave:R,VPHome:Lp,VPNavbar:Lg,VPPage:fm,VPSidebar:Pm};return Object.defineProperty(b,"__isScriptSetup",{enumerable:!1,value:!0}),b}});function km(e,t,n,r,o,s){return $(),Y("div",{class:Fe(["vp-theme-container",r.containerClass]),onTouchstart:r.onTouchStart,onTouchend:r.onTouchEnd},[Le(e.$slots,"navbar",{},()=>[r.shouldShowNavbar?($(),xe(r.VPNavbar,{key:0,onToggleSidebar:r.toggleSidebar},{before:Ee(()=>[Le(e.$slots,"navbar-before")]),after:Ee(()=>[Le(e.$slots,"navbar-after")]),_:3})):Ae("",!0)]),W("div",{class:"vp-sidebar-mask",onClick:t[0]||(t[0]=i=>r.toggleSidebar(!1))}),Le(e.$slots,"sidebar",{},()=>[te(r.VPSidebar,null,{top:Ee(()=>[Le(e.$slots,"sidebar-top")]),bottom:Ee(()=>[Le(e.$slots,"sidebar-bottom")]),_:3})]),Le(e.$slots,"page",{},()=>[r.frontmatter.home?($(),xe(r.VPHome,{key:0})):($(),xe(rr,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:r.onBeforeEnter,onBeforeLeave:r.onBeforeLeave},{default:Ee(()=>[($(),xe(r.VPPage,{key:r.page.path},{top:Ee(()=>[Le(e.$slots,"page-top")]),"content-top":Ee(()=>[Le(e.$slots,"page-content-top")]),"content-bottom":Ee(()=>[Le(e.$slots,"page-content-bottom")]),bottom:Ee(()=>[Le(e.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34)}const va=we(Cm,[["render",km],["__file","Layout.vue"]]),Lm=he({__name:"NotFound",setup(e,{expose:t}){t();const n=sr(),r=Re(),o=r.value.notFound??["Not Found"],s=()=>o[Math.floor(Math.random()*o.length)],i=r.value.home??n.value,l=r.value.backToHome??"Back to home",a={routeLocale:n,themeLocale:r,messages:o,getMsg:s,homeLink:i,homeText:l,get RouteLink(){return zr}};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),xm=e=>(pc("data-v-99131a8e"),e=e(),gc(),e),Em={class:"vp-theme-container"},Am={class:"page"},Tm={class:"theme-default-content"},Rm=xm(()=>W("h1",null,"404",-1));function Dm(e,t,n,r,o,s){return $(),Y("div",Em,[W("main",Am,[W("div",Tm,[Rm,W("blockquote",null,le(r.getMsg()),1),te(r.RouteLink,{to:r.homeLink},{default:Ee(()=>[$t(le(r.homeText),1)]),_:1},8,["to"])])])])}const Om=we(Lm,[["render",Dm],["__scopeId","data-v-99131a8e"],["__file","NotFound.vue"]]),Im=Ft({enhance({app:e,router:t}){ho("Badge")||e.component("Badge",tp),ho("CodeGroup")||e.component("CodeGroup",np),ho("CodeGroupItem")||e.component("CodeGroupItem",sp),e.component("VPSearch",()=>{const r=e.component("Docsearch")||e.component("SearchBox");return r?ke(r):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await ia().wait(),n(...r))},setup(){Fh(),Jh()},layouts:{Layout:va,NotFound:Om}}),Mm=Object.freeze(Object.defineProperty({__proto__:null,default:Im},Symbol.toStringTag,{value:"Module"})),$m=Object.entries;var Nm={autoLocale:!1,switchLocale:!1,localeConfig:{"/eng/":["en-US"]},defaultLocale:"/eng/",localeFallback:!0,defaultBehavior:"defaultLocale"};const Hm=Nm;$m(Hm.localeConfig);th("VUEPRESS_REDIRECT_LOCALES",{});const Vm=Ft({setup(){},rootComponents:[]}),jm=Object.freeze(Object.defineProperty({__proto__:null,default:Vm},Symbol.toStringTag,{value:"Module"}));var ie=(e=>(e.Collaborator="collaborator",e.Author="author",e.TechLead="tech lead",e.TeamLead="team lead",e.Developer="developer",e))(ie||{}),de=(e=>(e.ActiveDeveloped="actively-developed",e.PassivelyMaintained="passively-maintained",e.AsIs="as-is",e.Experimental="experimental",e.LookingForMaintainer="looking-for-maintainer",e.Deprecated="deprecated",e))(de||{}),D=(e=>(e.C="C",e.Go="Go",e.JavaScript="JS",e.TypeScript="TS",e.Rust="Rust",e.Python="Python",e.Php="PHP",e.Deno="Deno",e.NodeJS="NodeJS",e.Flask="Flask",e.React="React",e.Antd="Antd",e.Postgresql="PostgreSQL",e.Docker="Docker",e.Drone="Drone CI",e.Woodpecker="Woodpecker CI",e.Bash="Bash",e.TreeSitter="TreeSitter",e.Nix="Nix",e.Lua="Lua",e.Sqlite="Sqlite",e.Vue="Vue",e.Vuepress="Vuepress",e.Godot="Godot",e.Haskell="Haskell",e))(D||{});const Fm=[{name:"picsg",url:"/pleshevskiy/picsg",description:"A tool for steganographing information in a picture encoded using the Vernam cipher.",roles:[ie.Author],technologies:[D.Haskell],startDate:new Date("2024-04-13"),startDate:new Date("2024-07-25"),status:de.AsIs},{name:"Mindustry tools",url:"/pleshevskiy/mindustry-tools",description:"Tools for the Mindustry game",roles:[ie.Author],technologies:[D.Nix,D.Godot],startDate:new Date("2024-01-07"),status:de.PassivelyMaintained},{name:"Master Progress Rosmintrud tools",url:"https://rosmintrud.masterprogress.ru",description:"Internal service to prepare documents for the rosmintrud (SPA)",roles:[ie.TechLead],technologies:[D.Deno,D.Sqlite,D.TypeScript,D.Vue,D.Docker,D.Woodpecker,D.Nix],startDate:new Date("2023-07-03"),status:de.PassivelyMaintained},{name:"yandexgpt_tg_bot",url:"/pleshevskiy/yandexgpt_tg_bot",description:"The Telegram bot to describe article with link by YandexGPT.",roles:[ie.Author],technologies:[D.JavaScript,D.NodeJS,D.Nix],startDate:new Date("2023-06-27"),endDate:new Date("2024-07-25"),status:de.AsIs},{name:"tree-sitter-plpgsql",url:"/pleshevskiy/tree-sitter-plpgsql",description:"plpgsql grammar for tree-sitter",roles:[ie.Author],technologies:[D.C,D.JavaScript,D.TreeSitter,D.Nix],startDate:new Date("2023-01-05"),status:de.PassivelyMaintained},{name:"wd2",url:"/pleshevskiy/wd2",description:"A wrapper over d2 which allows to use additional configs from d2 file",roles:[ie.Author],technologies:[D.Bash,D.Nix],startDate:new Date("2022-12-12"),endDate:new Date("2023-07-31"),status:de.AsIs},{name:"tree-sitter-d2",url:"/pleshevskiy/tree-sitter-d2",description:"d2 grammar for tree-sitter",roles:[ie.Author],technologies:[D.C,D.JavaScript,D.TreeSitter,D.Nix],startDate:new Date("2022-12-04"),status:de.ActiveDeveloped},{name:"nix2lua",url:"/mynix/nix2lua",description:"This is a small but functional library that converts your nix configurations into lua format.",roles:[ie.Author],technologies:[D.Nix,D.Lua],startDate:new Date("2022-11-22"),status:de.PassivelyMaintained},{name:"vnetod",url:"/pleshevskiy/vnetod",description:"Dotenv section switcher",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2022-07-29"),status:de.PassivelyMaintained},{name:"estring",url:"/pleshevskiy/estring",description:"A simple way to parse a string using type annotations.",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2022-07-23"),endDate:new Date("2024-07-25"),status:de.AsIs},{name:"enve",url:"/pleshevskiy/enve",description:"It helps you work with environment variables and convert it to any type using only type annotations",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2022-07-18"),endDate:new Date("2024-07-25"),status:de.AsIs},{name:"docker stack drone plugin",url:"/pleshevskiy/docker_stack",description:"Deploy to production using `docker stack deploy`",roles:[ie.Author],technologies:[D.Docker,D.Drone,D.Woodpecker],startDate:new Date("2022-06-06"),endDate:new Date("2024-07-25"),status:de.AsIs},{name:"dexios",url:"/github/dexios",description:"Dexios is a fast, secure, and open source command-line encryption tool.",roles:[ie.Collaborator],technologies:[D.Rust],startDate:new Date("2022-06-01"),endDate:new Date("2023-02-28")},{name:"recipes",url:"/pleshevskiy/recipes",description:"Site with recipes which cares about privacy",roles:[ie.Author],technologies:[D.TypeScript,D.Deno,D.Rust],startDate:new Date("2022-05-04"),status:de.PassivelyMaintained},{name:"pleshevski.ru",url:"/pleshevskiy/pleshevski.ru",description:"Source code of my personal site",roles:[ie.Author],technologies:[D.TypeScript,D.Vue,D.Vuepress,D.Nix],startDate:new Date("2022-03-16"),status:de.PassivelyMaintained},{name:"paren",url:"/pleshevskiy/paren",description:"Library for parsing and rendering information.",roles:[ie.Author],technologies:[D.TypeScript,D.Deno],startDate:new Date("2022-03-14"),endDate:new Date("2024-07-25"),status:de.Experimental},{name:"hwt",url:"/pleshevskiy/hwt",description:"healthy workaholic timer – A tool that keeps you from breaking your health by working all day.",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2022-02-04"),endDate:new Date("2024-07-25"),status:de.AsIs},{name:"ood_persistence",url:"/pleshevskiy/ood_persistence",description:"Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture ",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2021-10-12"),endDate:new Date("2021-10-21"),status:de.Deprecated},{name:"migra",url:"/pleshevskiy/migra",description:"Simple SQL migration manager for your project.",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2021-01-31"),endDate:new Date("2022-03-17"),status:de.AsIs},{name:"espruino-starter",url:"/pleshevskiy/espruino-starter",description:"Quickly start creating your new project on the espruino board or a board based on it.",roles:[ie.Author],technologies:[D.JavaScript],startDate:new Date("2021-08-23"),status:de.AsIs},{name:"react-rest-request",url:"/pleshevskiy/react-rest-request",description:"Minimalistic REST API client for React inspired by Apollo.",roles:[ie.Author],technologies:[D.TypeScript,D.React],startDate:new Date("2020-10-04"),endDate:new Date("2023-03-02"),status:de.Deprecated},{name:"sonic-channel",url:"/pleshevskiy/sonic-channel",description:"Rust client for sonic search backend.",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2020-07-18"),status:de.PassivelyMaintained},{name:"itconfig",url:"/pleshevskiy/itconfig",description:"Easy build a configs from environment variables and use it in globally.",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2019-12-22"),endDate:new Date("2022-07-24"),status:de.Deprecated},{name:"it-fsm",url:"/pleshevskiy/it-fsm",description:"Simple full-featured finite state machine for your project",roles:[ie.Author],technologies:[D.TypeScript,D.NodeJS,D.Deno],startDate:new Date("2019-10-11"),status:de.PassivelyMaintained},{name:"Cabinet Master Progress",url:"https://cabinet.masterprogress.ru",description:"Student's cabinet of the educational center Master Progress (SSR + SPA)",roles:[ie.TechLead],technologies:[D.Python,D.Flask,D.Postgresql,D.TypeScript,D.React,D.Docker,D.Woodpecker,D.Nix],startDate:new Date("2019-09-22"),status:de.PassivelyMaintained},{name:"genrss",url:"/pleshevskiy/genrss",description:"RSS generator for python",roles:[ie.Author],technologies:[D.Python],startDate:new Date("2019-07-23"),status:de.AsIs},{name:"marshmallow_pageinfo",url:"/pleshevskiy/marshmallow_pageinfo",description:"Page info marshmallow schema for api",roles:[ie.Author],technologies:[D.Python],startDate:new Date("2019-10-05"),endDate:new Date("2023-03-02"),status:de.AsIs},{name:"Binary Management",url:"https://www.binarymanagement.com",description:"Project management tool for interior designers",roles:[ie.Developer,ie.TechLead,ie.TeamLead],technologies:[D.TypeScript,D.NodeJS,D.React,D.Antd,D.Docker,D.Drone,D.Rust,D.Nix],startDate:new Date("2018-09-15"),status:de.ActiveDeveloped},{name:"Core Spirit",url:"https://corespirit.com",description:"Social platform focusing on human and planetary enhancement",roles:[ie.Developer],technologies:[D.TypeScript,D.NodeJS,D.Go,D.Python,D.React,D.Docker,D.Drone],startDate:new Date("2018-09-05"),endDate:new Date("2019-12-31")},{name:"Master Progress",url:"https://masterprogress.ru",description:"Main website of the educational center Master Progress (SSR + Forms)",roles:[ie.TechLead],technologies:[D.Python,D.Flask,D.JavaScript,D.Nix],startDate:new Date("2018-04-10"),status:de.PassivelyMaintained},{name:"ictmpl",url:"/pleshevskiy/ictmpl",description:"Generate projects from templates",roles:[ie.Author],technologies:[D.Python],startDate:new Date("2018-06-30"),endDate:new Date("2023-03-02"),status:de.AsIs},{name:"jjcrypto",url:"/pleshevskiy/jjcrypto",description:"Javascript encoder and decoder",roles:[ie.Author],technologies:[D.Php],startDate:new Date("2015-11-01"),endDate:new Date("2015-11-01"),status:de.AsIs}];function Bm(e){return e.toLocaleDateString(void 0,{year:"numeric",month:"2-digit",day:"2-digit"})}const Wm=e=>e.url.startsWith("https://")?e.url:new URL(e.url,"https://git.pleshevski.ru").toString(),Um=Object.freeze(Object.defineProperty({__proto__:null,getExternalLink:Wm},Symbol.toStringTag,{value:"Module"}));function Tn(e){return(e==null?void 0:e.valueOf())??1/0}const Km={name:"WorksPage",computed:{tableTheme(){return this.$themeLocale.worksTable??{}}}},Gm=he({...Km,setup(e,{expose:t}){t();const n=A(()=>Fm.concat().sort((o,s)=>Tn(s.endDate)-Tn(o.endDate)||Tn(s.startDate)-Tn(o.startDate))),r={date2num:Tn,works:n,get renderDate(){return Bm},get w(){return Um}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),qm=["href"],zm=["innerHTML"],Jm={key:0};function Qm(e,t,n,r,o,s){return $(),Y("table",null,[W("thead",null,[W("tr",null,[W("th",null,le(s.tableTheme.name),1),W("th",null,le(s.tableTheme.description),1),W("th",null,le(s.tableTheme.role),1),W("th",null,le(s.tableTheme.technologies),1),W("th",null,le(s.tableTheme.status),1),W("th",null,le(s.tableTheme.dates),1)])]),W("tbody",null,[($(!0),Y(be,null,bt(r.works,i=>($(),Y("tr",null,[W("td",null,[W("a",{rel:"nofollow noopener",href:r.w.getExternalLink(i)},le(i.name),9,qm)]),W("td",null,le(i.description),1),W("td",{innerHTML:i.roles.join(", ")},null,8,zm),W("td",null,le(i.technologies.join(", ")),1),W("td",null,le(i.status),1),W("td",null,[W("div",null,[W("small",{class:Fe({grey:i.endDate})},le(r.renderDate(i.startDate)),3)]),i.endDate?($(),Y("div",Jm,[W("small",null,le(r.renderDate(i.endDate)),1)])):Ae("",!0)])]))),256))])])}const Ym=we(Gm,[["render",Qm],["__file","ChronologicalWorksTable.vue"]]),Xm={__name:"WorksPage",setup(e,{expose:t}){t();const n={ParentLayout:va,get ChronologicalWorksTable(){return Ym}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},Zm={class:"works-table-wrapper"};function ev(e,t,n,r,o,s){return $(),xe(r.ParentLayout,null,{"page-bottom":Ee(()=>[W("div",Zm,[te(r.ChronologicalWorksTable)])]),_:1})}const tv=we(Xm,[["render",ev],["__scopeId","data-v-765855fb"],["__file","WorksPage.vue"]]),nv=Ft({layouts:{WorksPage:tv}}),rv=Object.freeze(Object.defineProperty({__proto__:null,default:nv},Symbol.toStringTag,{value:"Module"})),br=[uh,yh,Lh,Rh,Dh,Hh,Mm,jm,rv].map(e=>e.default).filter(Boolean),ov=JSON.parse('{"base":"/","lang":"ru-RU","title":"Дмитрий Плешевский","description":" ","head":[],"locales":{"/":{"lang":"ru-RU","title":"Дмитрий Плешевский"},"/eng/":{"lang":"en-US","title":"Dmitriy Pleshevskiy"}}}');var Dn=yn(ov),sv=Qf,iv=()=>{const e=Sd({history:sv(Ml("/")),routes:[{name:"vuepress-route",path:"/:catchAll(.*)",components:{}}],scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{if(t.path!==n.path||n===mt){const r=qn(t.fullPath);if(r.path!==t.fullPath)return r.path;const o=await r.loader();t.meta={...r.meta,_pageChunk:o}}else t.path===n.path&&(t.meta=n.meta)}),e},lv=e=>{e.component("ClientOnly",ns),e.component("Content",rs),e.component("RouteLink",zr)},av=(e,t,n)=>{const r=A(()=>t.currentRoute.value.path),o=sc((k,R)=>({get(){return k(),t.currentRoute.value.meta._pageChunk},set(b){t.currentRoute.value.meta._pageChunk=b,R()}})),s=A(()=>Kt.resolveLayouts(n)),i=A(()=>Kt.resolveRouteLocale(Dn.value.locales,r.value)),l=A(()=>Kt.resolveSiteLocaleData(Dn.value,i.value)),a=A(()=>o.value.comp),c=A(()=>o.value.data),f=A(()=>c.value.frontmatter),u=A(()=>Kt.resolvePageHeadTitle(c.value,l.value)),p=A(()=>Kt.resolvePageHead(u.value,f.value,l.value)),g=A(()=>Kt.resolvePageLang(c.value,l.value)),_=A(()=>Kt.resolvePageLayout(c.value,s.value)),S={layouts:s,pageData:c,pageComponent:a,pageFrontmatter:f,pageHead:p,pageHeadTitle:u,pageLang:g,pageLayout:_,redirects:Ao,routeLocale:i,routePath:r,routes:pn,siteData:Dn,siteLocaleData:l};return e.provide(es,S),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>f.value},$head:{get:()=>p.value},$headTitle:{get:()=>u.value},$lang:{get:()=>g.value},$page:{get:()=>c.value},$routeLocale:{get:()=>i.value},$site:{get:()=>Dn.value},$siteLocale:{get:()=>l.value},$withBase:{get:()=>os}}),S},cv=()=>{const e=kd(),t=Ld();let n=[];const r=()=>{e.value.forEach(i=>{const l=uv(i);l&&n.push(l)})},o=()=>{const i=[];return e.value.forEach(l=>{const a=fv(l);a&&i.push(a)}),i},s=()=>{document.documentElement.lang=t.value;const i=o();n.forEach((l,a)=>{const c=i.findIndex(f=>l.isEqualNode(f));c===-1?(l.remove(),delete n[a]):i.splice(c,1)}),i.forEach(l=>document.head.appendChild(l)),n=[...n.filter(l=>!!l),...i]};Xt(Ad,s),Ge(()=>{r(),$e(e,s,{immediate:!1})})},uv=([e,t,n=""])=>{const r=Object.entries(t).map(([l,a])=>st(a)?`[${l}=${JSON.stringify(a)}]`:a===!0?`[${l}]`:"").join(""),o=`head > ${e}${r}`;return Array.from(document.querySelectorAll(o)).find(l=>l.innerText===n)||null},fv=([e,t,n])=>{if(!st(e))return null;const r=document.createElement(e);return Yo(t)&&Object.entries(t).forEach(([o,s])=>{st(s)?r.setAttribute(o,s):s===!0&&r.setAttribute(o,"")}),st(n)&&r.appendChild(document.createTextNode(n)),r},dv=tf,hv=async()=>{var n;const e=dv({name:"Vuepress",setup(){var s;cv();for(const i of br)(s=i.setup)==null||s.call(i);const r=br.flatMap(({rootComponents:i=[]})=>i.map(l=>ke(l))),o=xd();return()=>[ke(o.value),r]}}),t=iv();lv(e),av(e,t,br);for(const r of br)await((n=r.enhance)==null?void 0:n.call(r,{app:e,router:t,siteData:Dn}));return e.use(t),{app:e,router:t}};hv().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{we as _,W as a,$t as b,Y as c,hv as createVueApp,te as d,gu as e,$ as o,Go as r,Ee as w}; + */const ae={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=ae.isStarted();e=po(e,ae.settings.minimum,1),ae.status=e===1?null:e;const n=ae.render(!t),r=n.querySelector(ae.settings.barSelector),o=ae.settings.speed,s=ae.settings.easing;return n.offsetWidth,xh(i=>{_r(r,{transform:"translate3d("+Pi(e)+"%,0,0)",transition:"all "+o+"ms "+s}),e===1?(_r(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(()=>{_r(n,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(()=>{ae.remove(),i()},o)},o)):setTimeout(()=>i(),o)}),ae},isStarted:()=>typeof ae.status=="number",start:()=>{ae.status||ae.set(0);const e=()=>{setTimeout(()=>{ae.status&&(ae.trickle(),e())},ae.settings.trickleSpeed)};return ae.settings.trickle&&e(),ae},done:e=>!e&&!ae.status?ae:ae.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=ae.status;return t?(typeof e!="number"&&(e=(1-t)*po(Math.random()*t,.1,.95)),t=po(t+e,0,.994),ae.set(t)):ae.start()},trickle:()=>ae.inc(Math.random()*ae.settings.trickleRate),render:e=>{if(ae.isRendered())return document.getElementById("nprogress");Ci(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=ae.settings.template;const n=t.querySelector(ae.settings.barSelector),r=e?"-100":Pi(ae.status||0),o=document.querySelector(ae.settings.parent);return _r(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),o!==document.body&&Ci(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{ki(document.documentElement,"nprogress-busy"),ki(document.querySelector(ae.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&Eh(e)},isRendered:()=>!!document.getElementById("nprogress")},po=(e,t,n)=>en?n:e,Pi=e=>(-1+e)*100,xh=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),_r=function(){const e=["Webkit","O","Moz","ms"],t={};function n(i){return i.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(l,a){return a.toUpperCase()})}function r(i){const l=document.body.style;if(i in l)return i;let a=e.length;const c=i.charAt(0).toUpperCase()+i.slice(1);let f;for(;a--;)if(f=e[a]+c,f in l)return f;return i}function o(i){return i=n(i),t[i]??(t[i]=r(i))}function s(i,l,a){l=o(l),i.style[l]=a}return function(i,l){for(const a in l){const c=l[a];c!==void 0&&Object.prototype.hasOwnProperty.call(l,a)&&s(i,a,c)}}}(),na=(e,t)=>(typeof e=="string"?e:cs(e)).indexOf(" "+t+" ")>=0,Ci=(e,t)=>{const n=cs(e),r=n+t;na(n,t)||(e.className=r.substring(1))},ki=(e,t)=>{const n=cs(e);if(!na(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},cs=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),Eh=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)},Ah=()=>{Ge(()=>{const e=tn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||ae.start()}),e.afterEach(n=>{t.add(n.path),ae.done()})})},Th=Ft({setup(){Ah()}}),Rh=Object.freeze(Object.defineProperty({__proto__:null,default:Th},Symbol.toStringTag,{value:"Module"})),Dh=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Oh=JSON.parse(`{"repo":"https://git.pleshevski.ru/pleshevskiy/pleshevski.ru","locales":{"/":{"selectLanguageName":"Русский","navbar":["/","/works"],"notFound":["Верните страницу!","Мы потеряли страницу...","Вы заблокированы в лабиринте.","Искали кота?","Страница украдена.","Ошиблись в параллельной вселенной."],"backToHome":"Вернуться на главную","worksTable":{"name":"Название","description":"Описание","role":"Роль","technologies":"Технологии","status":"Статус","dates":"Даты"}},"/eng/":{"selectLanguageName":"English","navbar":["/eng/","/eng/works"],"notFound":["Return the page!","We lost a page...","You're blocked in a labyrinth.","Looking for a cat?","The page has been stolen.","Wrong turn in parallel universe."],"backToHome":"Back to home","worksTable":{"name":"Name","description":"Description","role":"Role","technologies":"Technologies","status":"Status","dates":"Dates"}}},"colorMode":"auto","colorModeSwitch":true,"navbar":[],"logo":null,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebar":"heading","sidebarDepth":2,"editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"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","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),Ih=ue(Oh),ra=()=>Ih,oa=Symbol(""),Mh=()=>{const e=Be(oa);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},$h=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},Nh=Ft({enhance({app:e}){const t=ra(),n=e._context.provides[es],r=A(()=>$h(t.value,n.routeLocale.value));e.provide(oa,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}}),Hh=Object.freeze(Object.defineProperty({__proto__:null,default:Nh},Symbol.toStringTag,{value:"Module"})),Vh=()=>ra(),Re=()=>Mh(),sa=Symbol(""),jh=e=>{const t=(n=e.value)=>{const r=window.document.documentElement;r.classList.toggle("dark",n),r.dataset.theme=n?"dark":"light"};Ge(()=>{$e(e,t,{immediate:!0})}),Fr(()=>t())},us=()=>{const e=Be(sa);if(!e)throw new Error("useDarkMode() is called without provider.");return e},Fh=()=>{const e=Re(),t=Xd(),n=as("vuepress-color-scheme",e.value.colorMode),r=A({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?n.value="auto":n.value=o?"dark":"light"}});Xt(sa,r),jh(r)};let go=null,An=null;const Bh={wait:()=>go,pending:()=>{go=new Promise(e=>An=e)},resolve:()=>{An==null||An(),go=null,An=null}},ia=()=>Bh,bn=(e,t)=>{const{notFound:n,meta:r,path:o}=qn(e,t);return n?{text:o,link:o}:{text:r.title||o,link:o}},Li=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Wh=(e,t)=>{if(t.hash===e)return!0;const n=Li(t.path),r=Li(e);return n===r},la=(e,t)=>e.link&&Wh(e.link,t)?!0:"children"in e?e.children.some(n=>la(n,t)):!1,aa=e=>!sf(e)&&!or(e),ca=e=>!Kr(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Uh={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"},Kh=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=ca(e);return n!==null?Uh[n]:null},Gh=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:r,editLinkPattern:o})=>{if(!r)return null;const s=Kh({docsRepo:e,editLinkPattern:o});return s?s.replace(/:repo/,Kr(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,$l(`${Ml(n)}/${r}`)):null},gn=(e="",t="")=>ta(t)||or(t)?t:`${gf(e)}${t}`,Sr=ue([]),qh=()=>{const e=tn(),t=Re(),n=at(),r=A(()=>n.value.sidebarDepth??t.value.sidebarDepth??2);e.beforeEach((s,i)=>{s.path!==i.path&&(Sr.value=[])});const o=()=>{if(r.value<=0){Sr.value=[];return}Sr.value=hh({selector:[...new Array(6)].map((s,i)=>`.theme-default-content h${i+1}`).join(","),levels:[2,r.value+1],ignore:[".vp-badge"]})};$e(r,o),Ge(o)},zh=()=>Sr,ua=Symbol("sidebarItems"),fs=()=>{const e=Be(ua);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},Jh=()=>{const e=Re(),t=at(),n=Sn(),r=St(),o=sr(),s=zh(),i=A(()=>t.value.home?!1:t.value.sidebar??e.value.sidebar??"heading"),l=A(()=>Qh(i.value,n.value,r.path,o.value,s.value));Xt(ua,l)},Qh=(e,t,n,r,o)=>e===!1?[]:e==="heading"?fa(t,o):Array.isArray(e)?da(e,o,n,r):Yo(e)?Xh(e,t,o,n):[],Yh=e=>({text:e.title,link:e.link,children:ds(e.children)}),ds=e=>e?e.map(t=>Yh(t)):[],fa=(e,t)=>[{text:e.title,children:ds(t)}],da=(e,t,n,r="")=>{const o=(s,i)=>{var a;const l=st(s)?bn(gn(i,s)):st(s.link)?{...s,link:aa(s.link)?bn(gn(i,s.link)).link:s.link}:s;if("children"in l)return{...l,children:l.children.map(c=>o(c,gn(i,l.prefix)))};if(l.link===n){const c=((a=t[0])==null?void 0:a.level)===1?t[0].children:t;return{...l,children:ds(c)}}return l};return e.map(s=>o(s,r))},Xh=(e,t,n,r)=>{const o=mh(e).sort((s,i)=>i.length-s.length);for(const s of o)if(ea(decodeURI(r),s)){const i=e[s];return i?i==="heading"?fa(t,n):da(i,n,r,s):[]}return console.warn(`${decodeURI(r)} is missing sidebar config.`),[]},Zh=he({__name:"Badge",props:{type:{default:"tip"},text:{default:""},vertical:{default:void 0}},setup(e,{expose:t}){t();const n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),we=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n};function ep(e,t,n,r,o,s){return $(),Y("span",{class:Fe(["vp-badge",n.type]),style:Yn({verticalAlign:n.vertical})},[Le(e.$slots,"default",{},()=>[$t(le(n.text),1)])],6)}const tp=we(Zh,[["render",ep],["__file","Badge.vue"]]),np=he({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=ue([]),r=ue(-1),o=as("vuepress-code-group",{}),s=A(()=>n.value.map(c=>c.innerText).join(","));Ge(()=>{$e(()=>o.value[s.value],(c=-1)=>{r.value!==c&&(r.value=c)},{immediate:!0}),$e(r,c=>{o.value[s.value]!==c&&(o.value[s.value]=c)})});const i=(c=r.value)=>{c{c>0?r.value=c-1:r.value=n.value.length-1,n.value[r.value].focus()},a=(c,f)=>{c.key===" "||c.key==="Enter"?(c.preventDefault(),r.value=f):c.key==="ArrowRight"?(c.preventDefault(),i(f)):c.key==="ArrowLeft"&&(c.preventDefault(),l(f))};return()=>{var f;const c=(((f=t.default)==null?void 0:f.call(t))||[]).filter(u=>u.type.name==="CodeGroupItem").map(u=>(u.props===null&&(u.props={}),u));return c.length===0?null:(r.value<0||r.value>c.length-1?(r.value=c.findIndex(u=>u.props.active===""||u.props.active===!0),r.value===-1&&(r.value=0)):c.forEach((u,p)=>{u.props.active=p===r.value}),ke("div",{class:"code-group"},[ke("div",{class:"code-group-nav",role:"tablist"},c.map((u,p)=>{const g=p===r.value;return ke("button",{ref:_=>{_&&(n.value[p]=_)},class:{"code-group-nav-tab":!0,active:g},role:"tab",ariaSelected:g,onClick:()=>r.value=p,onKeydown:_=>a(_,p)},u.props.title)})),c]))}}}),rp=he({name:"CodeGroupItem",__name:"CodeGroupItem",props:{title:{},active:{type:Boolean}},setup(e,{expose:t}){t();const n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function op(e,t,n,r,o,s){return $(),Y("div",{class:Fe(["code-group-item",{active:n.active}]),role:"tabpanel"},[Le(e.$slots,"default")],2)}const sp=we(rp,[["render",op],["__file","CodeGroupItem.vue"]]),ip=he({__name:"VPHomeFeatures",setup(e,{expose:t}){t();const n=at(),r=A(()=>n.value.features??[]),o={frontmatter:n,features:r};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),lp={key:0,class:"vp-features"};function ap(e,t,n,r,o,s){return r.features.length?($(),Y("div",lp,[($(!0),Y(be,null,bt(r.features,i=>($(),Y("div",{key:i.title,class:"vp-feature"},[W("h2",null,le(i.title),1),W("p",null,le(i.details),1)]))),128))])):Ae("",!0)}const cp=we(ip,[["render",ap],["__file","VPHomeFeatures.vue"]]),up=he({__name:"VPHomeFooter",setup(e,{expose:t}){t();const n=at(),r=A(()=>n.value.footer),o=A(()=>n.value.footerHtml),s={frontmatter:n,footer:r,footerHtml:o};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),fp=["innerHTML"],dp=["textContent"];function hp(e,t,n,r,o,s){return r.footer?($(),Y(be,{key:0},[r.footerHtml?($(),Y("div",{key:0,class:"vp-footer",innerHTML:r.footer},null,8,fp)):($(),Y("div",{key:1,class:"vp-footer",textContent:le(r.footer)},null,8,dp))],64)):Ae("",!0)}const pp=we(up,[["render",hp],["__file","VPHomeFooter.vue"]]),gp=he({__name:"VPHomeHero",setup(e,{expose:t}){t();const n=at(),r=ts(),o=us(),s=A(()=>o.value&&n.value.heroImageDark!==void 0?n.value.heroImageDark:n.value.heroImage),i=A(()=>n.value.heroAlt||a.value||"hero"),l=A(()=>n.value.heroHeight||280),a=A(()=>n.value.heroText===null?null:n.value.heroText||r.value.title||"Hello"),c=A(()=>n.value.tagline===null?null:n.value.tagline||r.value.description||"Welcome to your VuePress site"),f=A(()=>Array.isArray(n.value.actions)?n.value.actions.map(({text:g,link:_,type:S="primary"})=>({text:g,link:_,type:S})):[]),p={frontmatter:n,siteLocale:r,isDarkMode:o,heroImage:s,heroAlt:i,heroHeight:l,heroText:a,tagline:c,actions:f,HomeHeroImage:()=>{if(!s.value)return null;const g=ke("img",{class:"vp-hero-image",src:os(s.value),alt:i.value,height:l.value});return n.value.heroImageDark===void 0?g:ke(ns,()=>g)},get AutoLink(){return Pn}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),mp={class:"vp-hero"},vp={key:0,id:"main-title"},_p={key:1,class:"vp-hero-description"},bp={key:2,class:"vp-hero-actions"};function yp(e,t,n,r,o,s){return $(),Y("header",mp,[te(r.HomeHeroImage),r.heroText?($(),Y("h1",vp,le(r.heroText),1)):Ae("",!0),r.tagline?($(),Y("p",_p,le(r.tagline),1)):Ae("",!0),r.actions.length?($(),Y("p",bp,[($(!0),Y(be,null,bt(r.actions,i=>($(),xe(r.AutoLink,{key:i.text,class:Fe(["vp-hero-action-button",[i.type]]),config:i},null,8,["class","config"]))),128))])):Ae("",!0)])}const wp=we(gp,[["render",yp],["__file","VPHomeHero.vue"]]),Sp=he({__name:"VPHome",setup(e,{expose:t}){t();const n={VPHomeFeatures:cp,VPHomeFooter:pp,VPHomeHero:wp,get Content(){return rs}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Pp={class:"vp-home"},Cp={class:"theme-default-content"};function kp(e,t,n,r,o,s){return $(),Y("main",Pp,[te(r.VPHomeHero),te(r.VPHomeFeatures),W("div",Cp,[te(r.Content)]),te(r.VPHomeFooter)])}const Lp=we(Sp,[["render",kp],["__file","VPHome.vue"]]),xp="719px",Ep={mobile:xp};var zn;(function(e){e.MOBILE="mobile"})(zn||(zn={}));const Ap={[zn.MOBILE]:Number.parseInt(Ep.mobile.replace("px",""),10)},ha=(e,t)=>{const n=Ap[e];Number.isInteger(n)&&(lt("orientationchange",()=>t(n),!1),lt("resize",()=>t(n),!1),Ge(()=>{t(n)}))},Tp=he({__name:"VPNavbarBrand",setup(e,{expose:t}){t();const n=sr(),r=ts(),o=Re(),s=us(),i=A(()=>o.value.home||n.value),l=A(()=>r.value.title),a=A(()=>s.value&&o.value.logoDark!==void 0?o.value.logoDark:o.value.logo),c=A(()=>o.value.logoAlt??l.value),f=A(()=>l.value.toLocaleUpperCase().trim()===c.value.toLocaleUpperCase().trim()),p={routeLocale:n,siteLocale:r,themeLocale:o,isDarkMode:s,navbarBrandLink:i,navbarBrandTitle:l,navbarBrandLogo:a,navbarBrandLogoAlt:c,navBarLogoAltMatchesTitle:f,NavbarBrandLogo:()=>{if(!a.value)return null;const g=ke("img",{class:"vp-site-logo",src:os(a.value),alt:c.value});return o.value.logoDark===void 0?g:ke(ns,()=>g)},get RouteLink(){return zr}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),Rp=["aria-hidden"];function Dp(e,t,n,r,o,s){return $(),xe(r.RouteLink,{to:r.navbarBrandLink},{default:Ee(()=>[te(r.NavbarBrandLogo),r.navbarBrandTitle?($(),Y("span",{key:0,class:Fe(["vp-site-name",{"vp-hide-mobile":r.navbarBrandLogo}]),"aria-hidden":r.navBarLogoAltMatchesTitle},le(r.navbarBrandTitle),11,Rp)):Ae("",!0)]),_:1},8,["to"])}const Op=we(Tp,[["render",Dp],["__file","VPNavbarBrand.vue"]]),pa=(e,t="")=>st(e)?bn(gn(t,e)):"children"in e?{...e,children:e.children.map(n=>pa(n,gn(t,e.prefix)))}:{...e,link:aa(e.link)?bn(gn(t,e.link)).link:e.link},Ip=()=>{const e=Re();return A(()=>(e.value.navbar||[]).map(t=>pa(t)))},Mp=()=>{const e=Re(),t=A(()=>e.value.repo),n=A(()=>t.value?ca(t.value):null),r=A(()=>t.value&&!Kr(t.value)?`https://github.com/${t.value}`:t.value),o=A(()=>r.value?e.value.repoLabel?e.value.repoLabel:n.value===null?"Source":n.value:null);return A(()=>!r.value||!o.value?[]:[{text:o.value,link:r.value}])},$p=()=>{const e=St(),t=fh(),n=sr(),r=zl(),o=ts(),s=Vh(),i=Re();return A(()=>{const l=Object.keys(r.value.locales);if(l.length<2)return[];const a=e.path,c=e.fullPath;return[{text:`${i.value.selectLanguageText}`,ariaLabel:`${i.value.selectLanguageAriaLabel??i.value.selectLanguageText}`,children:l.map(u=>{var R,b;const p=((R=r.value.locales)==null?void 0:R[u])??{},g=((b=s.value.locales)==null?void 0:b[u])??{},_=`${p.lang}`,S=g.selectLanguageName??_;if(_===o.value.lang)return{text:S,activeMatch:".",link:e.fullPath};const k=a.replace(n.value,u);return{text:S,link:t.value.some(m=>m===k)?c.replace(a,k):g.home??u}})}]})},Np=he({__name:"VPDropdownTransition",setup(e,{expose:t}){t();const o={setHeight:s=>{s.style.height=s.scrollHeight+"px"},unsetHeight:s=>{s.style.height=""}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});function Hp(e,t,n,r,o,s){return $(),xe(rr,{name:"vp-dropdown",onEnter:r.setHeight,onAfterEnter:r.unsetHeight,onBeforeLeave:r.setHeight},{default:Ee(()=>[Le(e.$slots,"default")]),_:3})}const ga=we(Np,[["render",Hp],["__file","VPDropdownTransition.vue"]]),Vp=he({__name:"VPNavbarDropdown",props:{item:{}},setup(e,{expose:t}){t();const n=e,{item:r}=el(n),o=St(),s=ue(!1),i=A(()=>r.value.ariaLabel||r.value.text),l=(f,u)=>u[u.length-1]===f,a=f=>{const u=f.detail===0;s.value=u?!s.value:!1};$e(()=>o.path,()=>{s.value=!1});const c={props:n,item:r,route:o,open:s,dropdownAriaLabel:i,isLastItemOfArray:l,handleDropdown:a,VPDropdownTransition:ga,get AutoLink(){return Pn}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),jp=["aria-label"],Fp={class:"title"},Bp=W("span",{class:"arrow down"},null,-1),Wp=["aria-label"],Up={class:"title"},Kp={class:"vp-navbar-dropdown"},Gp={class:"vp-navbar-dropdown-subtitle"},qp={key:1},zp={class:"vp-navbar-dropdown-subitem-wrapper"};function Jp(e,t,n,r,o,s){return $(),Y("div",{class:Fe(["vp-navbar-dropdown-wrapper",{open:r.open}])},[W("button",{class:"vp-navbar-dropdown-title",type:"button","aria-label":r.dropdownAriaLabel,onClick:r.handleDropdown},[W("span",Fp,le(r.item.text),1),Bp],8,jp),W("button",{class:"vp-navbar-dropdown-title-mobile",type:"button","aria-label":r.dropdownAriaLabel,onClick:t[0]||(t[0]=i=>r.open=!r.open)},[W("span",Up,le(r.item.text),1),W("span",{class:Fe(["arrow",r.open?"down":"right"])},null,2)],8,Wp),te(r.VPDropdownTransition,null,{default:Ee(()=>[Lr(W("ul",Kp,[($(!0),Y(be,null,bt(r.item.children,i=>($(),Y("li",{key:i.text,class:"vp-navbar-dropdown-item"},["children"in i?($(),Y(be,{key:0},[W("h4",Gp,[i.link?($(),xe(r.AutoLink,{key:0,config:i,onFocusout:l=>r.isLastItemOfArray(i,r.item.children)&&i.children.length===0&&(r.open=!1)},null,8,["config","onFocusout"])):($(),Y("span",qp,le(i.text),1))]),W("ul",zp,[($(!0),Y(be,null,bt(i.children,l=>($(),Y("li",{key:l.link,class:"vp-navbar-dropdown-subitem"},[te(r.AutoLink,{config:l,onFocusout:a=>r.isLastItemOfArray(l,i.children)&&r.isLastItemOfArray(i,r.item.children)&&(r.open=!1)},null,8,["config","onFocusout"])]))),128))])],64)):($(),xe(r.AutoLink,{key:1,config:i,onFocusout:l=>r.isLastItemOfArray(i,r.item.children)&&(r.open=!1)},null,8,["config","onFocusout"]))]))),128))],512),[[Or,r.open]])]),_:1})],2)}const Qp=we(Vp,[["render",Jp],["__file","VPNavbarDropdown.vue"]]),Yp=he({__name:"VPNavbarItems",setup(e,{expose:t}){t();const n=Ip(),r=$p(),o=Mp(),s=ue(!1),i=A(()=>Re().value.navbarLabel??"site navigation"),l=A(()=>[...n.value,...r.value,...o.value]);ha(zn.MOBILE,c=>{s.value=window.innerWidth($(),Y("div",{key:i.text,class:"vp-navbar-item"},["children"in i?($(),xe(r.VPNavbarDropdown,{key:0,class:Fe({mobile:r.isMobile}),item:i},null,8,["class","item"])):($(),xe(r.AutoLink,{key:1,config:i},null,8,["config"]))]))),128))],8,Xp)):Ae("",!0)}const ma=we(Yp,[["render",Zp],["__file","VPNavbarItems.vue"]]),eg={},tg={class:"dark-icon",viewBox:"0 0 32 32"},ng=W("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),rg=[ng];function og(e,t){return $(),Y("svg",tg,rg)}const sg=we(eg,[["render",og],["__file","VPDarkIcon.vue"]]),ig={},lg={class:"light-icon",viewBox:"0 0 32 32"},ag=gu('',9),cg=[ag];function ug(e,t){return $(),Y("svg",lg,cg)}const fg=we(ig,[["render",ug],["__file","VPLightIcon.vue"]]),dg=he({__name:"VPToggleColorModeButton",setup(e,{expose:t}){t();const n=Re(),r=us(),s={themeLocale:n,isDarkMode:r,toggleColorMode:()=>{r.value=!r.value},VPDarkIcon:sg,VPLightIcon:fg};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),hg=["title"];function pg(e,t,n,r,o,s){return $(),Y("button",{class:"vp-toggle-color-mode-button",title:r.themeLocale.toggleColorMode,onClick:r.toggleColorMode},[Lr(te(r.VPLightIcon,null,null,512),[[Or,!r.isDarkMode]]),Lr(te(r.VPDarkIcon,null,null,512),[[Or,r.isDarkMode]])],8,hg)}const gg=we(dg,[["render",pg],["__file","VPToggleColorModeButton.vue"]]),mg=he({__name:"VPToggleSidebarButton",emits:["toggle"],setup(e,{expose:t}){t();const r={themeLocale:Re()};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),vg=["title"],_g=W("div",{class:"icon","aria-hidden":"true"},[W("span"),W("span"),W("span")],-1),bg=[_g];function yg(e,t,n,r,o,s){return $(),Y("div",{class:"vp-toggle-sidebar-button",title:r.themeLocale.toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:t[0]||(t[0]=i=>e.$emit("toggle"))},bg,8,vg)}const wg=we(mg,[["render",yg],["__file","VPToggleSidebarButton.vue"]]),Sg=he({__name:"VPNavbar",emits:["toggle-sidebar"],setup(e,{expose:t}){t();const n=Re(),r=ue(null),o=ue(null),s=ue(0),i=A(()=>s.value?{maxWidth:s.value+"px"}:{}),l=(c,f)=>{var g,_,S;const u=(S=(_=(g=c==null?void 0:c.ownerDocument)==null?void 0:g.defaultView)==null?void 0:_.getComputedStyle(c,null))==null?void 0:S[f],p=Number.parseInt(u,10);return Number.isNaN(p)?0:p};ha(zn.MOBILE,c=>{var u;const f=l(r.value,"paddingLeft")+l(r.value,"paddingRight");window.innerWidthe.$emit("toggle-sidebar"))}),W("span",Cg,[te(r.VPNavbarBrand)],512),W("div",{class:"vp-navbar-items-wrapper",style:Yn(r.linksWrapperStyle)},[Le(e.$slots,"before"),te(r.VPNavbarItems,{class:"vp-hide-mobile"}),Le(e.$slots,"after"),r.themeLocale.colorModeSwitch?($(),xe(r.VPToggleColorModeButton,{key:0})):Ae("",!0),te(i)],4)],512)}const Lg=we(Sg,[["render",kg],["__file","VPNavbar.vue"]]),xg=()=>{const e=Re(),t=Sn(),n=at();return A(()=>{var o;return n.value.contributors??e.value.contributors??!0?((o=t.value.git)==null?void 0:o.contributors)??null:null})},Eg=()=>{const e=Re(),t=Sn(),n=at();return A(()=>{if(!(n.value.editLink??e.value.editLink??!0))return null;const{repo:o,docsRepo:s=o,docsBranch:i="main",docsDir:l="",editLinkText:a}=e.value;if(!s)return null;const c=Gh({docsRepo:s,docsBranch:i,docsDir:l,filePathRelative:t.value.filePathRelative,editLinkPattern:n.value.editLinkPattern??e.value.editLinkPattern});return c?{text:a??"Edit this page",link:c}:null})},Ag=()=>{const e=Re(),t=Sn(),n=at();return A(()=>{var s,i;return!(n.value.lastUpdated??e.value.lastUpdated??!0)||!((s=t.value.git)!=null&&s.updatedTime)?null:new Date((i=t.value.git)==null?void 0:i.updatedTime).toLocaleString()})},Tg={},Rg={class:"edit-icon",viewBox:"0 0 1024 1024"},Dg=W("g",{fill:"currentColor"},[W("path",{d:"M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"}),W("path",{d:"M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"})],-1),Og=[Dg];function Ig(e,t){return $(),Y("svg",Rg,Og)}const Mg=we(Tg,[["render",Ig],["__file","VPEditIcon.vue"]]),$g=he({__name:"VPPageMeta",setup(e,{expose:t}){t();const n=Re(),r=Eg(),o=Ag(),s=xg(),i={themeLocale:n,editLink:r,lastUpdated:o,contributors:s,VPEditIcon:Mg,get AutoLink(){return Pn}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),Ng={class:"vp-page-meta"},Hg={key:0,class:"vp-meta-item edit-link"},Vg={class:"vp-meta-item git-info"},jg={key:0,class:"vp-meta-item last-updated"},Fg={class:"meta-item-label"},Bg={class:"meta-item-info"},Wg={key:1,class:"vp-meta-item contributors"},Ug={class:"meta-item-label"},Kg={class:"meta-item-info"},Gg=["title"];function qg(e,t,n,r,o,s){const i=Go("ClientOnly");return $(),Y("footer",Ng,[r.editLink?($(),Y("div",Hg,[te(r.AutoLink,{class:"label",config:r.editLink},{before:Ee(()=>[te(r.VPEditIcon)]),_:1},8,["config"])])):Ae("",!0),W("div",Vg,[r.lastUpdated?($(),Y("div",jg,[W("span",Fg,le(r.themeLocale.lastUpdatedText)+": ",1),te(i,null,{default:Ee(()=>[W("span",Bg,le(r.lastUpdated),1)]),_:1})])):Ae("",!0),r.contributors&&r.contributors.length?($(),Y("div",Wg,[W("span",Ug,le(r.themeLocale.contributorsText)+": ",1),W("span",Kg,[($(!0),Y(be,null,bt(r.contributors,(l,a)=>($(),Y(be,{key:a},[W("span",{class:"contributor",title:`email: ${l.email}`},le(l.name),9,Gg),a!==r.contributors.length-1?($(),Y(be,{key:0},[$t(", ")],64)):Ae("",!0)],64))),128))])])):Ae("",!0)])])}const zg=we($g,[["render",qg],["__file","VPPageMeta.vue"]]),Jg=()=>{const e=tn(),t=St();return n=>{n&&(ta(n)?t.path!==n&&e.push(n):or(n)?window==null||window.open(n):e.push(encodeURI(n)))}},xi=(e,t)=>e===!1?!1:st(e)?bn(e,t):Yo(e)?{...e,link:bn(e.link,t).link}:null,Ro=(e,t,n)=>{const r=e.findIndex(s=>s.link===t);if(r!==-1){const s=e[r+n];return s?s.link?s:"prefix"in s&&!qn(s.prefix).notFound?{...s,link:s.prefix}:null:null}for(const s of e)if("children"in s){const i=Ro(s.children,t,n);if(i)return i}const o=e.findIndex(s=>"prefix"in s&&s.prefix===t);if(o!==-1){const s=e[o+n];return s?s.link?s:"prefix"in s&&!qn(s.prefix).notFound?{...s,link:s.prefix}:null:null}return null},Qg=()=>{const e=at(),t=Re(),n=fs(),r=St(),o=A(()=>{const i=xi(e.value.prev,r.path);return i===!1?null:i??(t.value.prev===!1?null:Ro(n.value,r.path,-1))}),s=A(()=>{const i=xi(e.value.next,r.path);return i===!1?null:i??(t.value.next===!1?null:Ro(n.value,r.path,1))});return{prevLink:o,nextLink:s}},Yg=he({__name:"VPPageNav",setup(e,{expose:t}){t();const n=Re(),r=Jg(),{prevLink:o,nextLink:s}=Qg(),i=A(()=>Re().value.pageNavbarLabel??"page navigation");lt("keydown",a=>{a.altKey&&(a.key==="ArrowRight"?s.value&&(r(s.value.link),a.preventDefault()):a.key==="ArrowLeft"&&o.value&&(r(o.value.link),a.preventDefault()))});const l={themeLocale:n,navigate:r,prevLink:o,nextLink:s,navbarLabel:i,get AutoLink(){return Pn}};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),Xg=["aria-label"],Zg={class:"hint"},em=W("span",{class:"arrow left"},null,-1),tm={class:"link"},nm={class:"hint"},rm=W("span",{class:"arrow right"},null,-1),om={class:"link"};function sm(e,t,n,r,o,s){return r.prevLink||r.nextLink?($(),Y("nav",{key:0,class:"vp-page-nav","aria-label":r.navbarLabel},[r.prevLink?($(),xe(r.AutoLink,{key:0,class:"prev",config:r.prevLink},{default:Ee(()=>[W("div",Zg,[em,$t(" "+le(r.themeLocale.prev??"Prev"),1)]),W("div",tm,[W("span",null,le(r.prevLink.text),1)])]),_:1},8,["config"])):Ae("",!0),r.nextLink?($(),xe(r.AutoLink,{key:1,class:"next",config:r.nextLink},{default:Ee(()=>[W("div",nm,[$t(le(r.themeLocale.next??"Next")+" ",1),rm]),W("div",om,[W("span",null,le(r.nextLink.text),1)])]),_:1},8,["config"])):Ae("",!0)],8,Xg)):Ae("",!0)}const im=we(Yg,[["render",sm],["__file","VPPageNav.vue"]]),lm=he({__name:"VPPage",setup(e,{expose:t}){t(),qh();const n={VPPageMeta:zg,VPPageNav:im,get Content(){return rs}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),am={class:"vp-page"},cm={class:"theme-default-content"};function um(e,t,n,r,o,s){return $(),Y("main",am,[Le(e.$slots,"top"),W("div",cm,[Le(e.$slots,"content-top"),te(r.Content),Le(e.$slots,"content-bottom")]),te(r.VPPageMeta),te(r.VPPageNav),Le(e.$slots,"bottom")])}const fm=we(lm,[["render",um],["__file","VPPage.vue"]]),dm=he({__name:"VPSidebarItem",props:{item:{},depth:{default:0}},setup(e,{expose:t}){t();const n=e,{item:r,depth:o}=el(n),s=St(),i=tn(),l=A(()=>"collapsible"in r.value&&r.value.collapsible),a=A(()=>la(r.value,s)),c=A(()=>({"vp-sidebar-item":!0,"vp-sidebar-heading":o.value===0,active:a.value,collapsible:l.value})),f=A(()=>l.value?a.value:!0),[u,p]=Ud(f.value),g=k=>{l.value&&(k.preventDefault(),p())},_=i.afterEach(k=>{wn(()=>{u.value=f.value})});Ko(()=>{_()});const S={props:n,item:r,depth:o,route:s,router:i,collapsible:l,isActive:a,itemClass:c,isOpenDefault:f,isOpen:u,toggleIsOpen:p,onClick:g,unregisterRouterHook:_,VPDropdownTransition:ga,get AutoLink(){return Pn}};return Object.defineProperty(S,"__isScriptSetup",{enumerable:!1,value:!0}),S}}),hm={class:"vp-sidebar-children"};function pm(e,t,n,r,o,s){const i=Go("VPSidebarItem",!0);return $(),Y("li",null,[r.item.link?($(),xe(r.AutoLink,{key:0,class:Fe(r.itemClass),config:r.item},null,8,["class","config"])):($(),Y("p",{key:1,tabindex:"0",class:Fe(r.itemClass),onClick:r.onClick,onKeydown:Xu(r.onClick,["enter"])},[$t(le(r.item.text)+" ",1),r.collapsible?($(),Y("span",{key:0,class:Fe(["arrow",r.isOpen?"down":"right"])},null,2)):Ae("",!0)],34)),"children"in r.item&&r.item.children.length?($(),xe(r.VPDropdownTransition,{key:2},{default:Ee(()=>[Lr(W("ul",hm,[($(!0),Y(be,null,bt(r.item.children,l=>($(),xe(i,{key:`${r.depth}${l.text}${l.link}`,item:l,depth:r.depth+1},null,8,["item","depth"]))),128))],512),[[Or,r.isOpen]])]),_:1})):Ae("",!0)])}const gm=we(dm,[["render",pm],["__file","VPSidebarItem.vue"]]),mm=he({__name:"VPSidebarItems",setup(e,{expose:t}){t();const n=St(),r=fs();Ge(()=>{$e(()=>n.hash,s=>{const i=document.querySelector(".vp-sidebar");if(!i)return;const l=document.querySelector(`.vp-sidebar a.vp-sidebar-item[href="${n.path}${s}"]`);if(!l)return;const{top:a,height:c}=i.getBoundingClientRect(),{top:f,height:u}=l.getBoundingClientRect();fa+c&&l.scrollIntoView(!1)})});const o={route:n,sidebarItems:r,VPSidebarItem:gm};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),vm={key:0,class:"vp-sidebar-items"};function _m(e,t,n,r,o,s){return r.sidebarItems.length?($(),Y("ul",vm,[($(!0),Y(be,null,bt(r.sidebarItems,i=>($(),xe(r.VPSidebarItem,{key:`${i.text}${i.link}`,item:i},null,8,["item"]))),128))])):Ae("",!0)}const bm=we(mm,[["render",_m],["__file","VPSidebarItems.vue"]]),ym=he({__name:"VPSidebar",setup(e,{expose:t}){t();const n={VPNavbarItems:ma,VPSidebarItems:bm};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),wm={class:"vp-sidebar"};function Sm(e,t,n,r,o,s){return $(),Y("aside",wm,[te(r.VPNavbarItems),Le(e.$slots,"top"),te(r.VPSidebarItems),Le(e.$slots,"bottom")])}const Pm=we(ym,[["render",Sm],["__file","VPSidebar.vue"]]),Cm=he({__name:"Layout",setup(e,{expose:t}){t();const n=Sn(),r=at(),o=Re(),s=A(()=>r.value.navbar!==!1&&o.value.navbar!==!1),i=fs(),l=ue(!1),a=m=>{l.value=typeof m=="boolean"?m:!l.value},c={x:0,y:0},f=m=>{c.x=m.changedTouches[0].clientX,c.y=m.changedTouches[0].clientY},u=m=>{const w=m.changedTouches[0].clientX-c.x,V=m.changedTouches[0].clientY-c.y;Math.abs(w)>Math.abs(V)&&Math.abs(w)>40&&(w>0&&c.x<=80?a(!0):a(!1))},p=A(()=>r.value.externalLinkIcon??o.value.externalLinkIcon??!0),g=A(()=>[{"no-navbar":!s.value,"no-sidebar":!i.value.length,"sidebar-open":l.value,"external-link-icon":p.value},r.value.pageClass]);let _;Ge(()=>{_=tn().afterEach(()=>{a(!1)})}),Fr(()=>{_()});const S=ia(),k=S.resolve,R=S.pending,b={page:n,frontmatter:r,themeLocale:o,shouldShowNavbar:s,sidebarItems:i,isSidebarOpen:l,toggleSidebar:a,touchStart:c,onTouchStart:f,onTouchEnd:u,enableExternalLinkIcon:p,containerClass:g,get unregisterRouterHook(){return _},set unregisterRouterHook(m){_=m},scrollPromise:S,onBeforeEnter:k,onBeforeLeave:R,VPHome:Lp,VPNavbar:Lg,VPPage:fm,VPSidebar:Pm};return Object.defineProperty(b,"__isScriptSetup",{enumerable:!1,value:!0}),b}});function km(e,t,n,r,o,s){return $(),Y("div",{class:Fe(["vp-theme-container",r.containerClass]),onTouchstart:r.onTouchStart,onTouchend:r.onTouchEnd},[Le(e.$slots,"navbar",{},()=>[r.shouldShowNavbar?($(),xe(r.VPNavbar,{key:0,onToggleSidebar:r.toggleSidebar},{before:Ee(()=>[Le(e.$slots,"navbar-before")]),after:Ee(()=>[Le(e.$slots,"navbar-after")]),_:3})):Ae("",!0)]),W("div",{class:"vp-sidebar-mask",onClick:t[0]||(t[0]=i=>r.toggleSidebar(!1))}),Le(e.$slots,"sidebar",{},()=>[te(r.VPSidebar,null,{top:Ee(()=>[Le(e.$slots,"sidebar-top")]),bottom:Ee(()=>[Le(e.$slots,"sidebar-bottom")]),_:3})]),Le(e.$slots,"page",{},()=>[r.frontmatter.home?($(),xe(r.VPHome,{key:0})):($(),xe(rr,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:r.onBeforeEnter,onBeforeLeave:r.onBeforeLeave},{default:Ee(()=>[($(),xe(r.VPPage,{key:r.page.path},{top:Ee(()=>[Le(e.$slots,"page-top")]),"content-top":Ee(()=>[Le(e.$slots,"page-content-top")]),"content-bottom":Ee(()=>[Le(e.$slots,"page-content-bottom")]),bottom:Ee(()=>[Le(e.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34)}const va=we(Cm,[["render",km],["__file","Layout.vue"]]),Lm=he({__name:"NotFound",setup(e,{expose:t}){t();const n=sr(),r=Re(),o=r.value.notFound??["Not Found"],s=()=>o[Math.floor(Math.random()*o.length)],i=r.value.home??n.value,l=r.value.backToHome??"Back to home",a={routeLocale:n,themeLocale:r,messages:o,getMsg:s,homeLink:i,homeText:l,get RouteLink(){return zr}};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),xm=e=>(pc("data-v-99131a8e"),e=e(),gc(),e),Em={class:"vp-theme-container"},Am={class:"page"},Tm={class:"theme-default-content"},Rm=xm(()=>W("h1",null,"404",-1));function Dm(e,t,n,r,o,s){return $(),Y("div",Em,[W("main",Am,[W("div",Tm,[Rm,W("blockquote",null,le(r.getMsg()),1),te(r.RouteLink,{to:r.homeLink},{default:Ee(()=>[$t(le(r.homeText),1)]),_:1},8,["to"])])])])}const Om=we(Lm,[["render",Dm],["__scopeId","data-v-99131a8e"],["__file","NotFound.vue"]]),Im=Ft({enhance({app:e,router:t}){ho("Badge")||e.component("Badge",tp),ho("CodeGroup")||e.component("CodeGroup",np),ho("CodeGroupItem")||e.component("CodeGroupItem",sp),e.component("VPSearch",()=>{const r=e.component("Docsearch")||e.component("SearchBox");return r?ke(r):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await ia().wait(),n(...r))},setup(){Fh(),Jh()},layouts:{Layout:va,NotFound:Om}}),Mm=Object.freeze(Object.defineProperty({__proto__:null,default:Im},Symbol.toStringTag,{value:"Module"})),$m=Object.entries;var Nm={autoLocale:!1,switchLocale:!1,localeConfig:{"/eng/":["en-US"]},defaultLocale:"/eng/",localeFallback:!0,defaultBehavior:"defaultLocale"};const Hm=Nm;$m(Hm.localeConfig);th("VUEPRESS_REDIRECT_LOCALES",{});const Vm=Ft({setup(){},rootComponents:[]}),jm=Object.freeze(Object.defineProperty({__proto__:null,default:Vm},Symbol.toStringTag,{value:"Module"}));var ie=(e=>(e.Collaborator="collaborator",e.Author="author",e.TechLead="tech lead",e.TeamLead="team lead",e.Developer="developer",e))(ie||{}),de=(e=>(e.ActiveDeveloped="actively-developed",e.PassivelyMaintained="passively-maintained",e.AsIs="as-is",e.Experimental="experimental",e.LookingForMaintainer="looking-for-maintainer",e.Deprecated="deprecated",e))(de||{}),D=(e=>(e.C="C",e.Go="Go",e.JavaScript="JS",e.TypeScript="TS",e.Rust="Rust",e.Python="Python",e.Php="PHP",e.Deno="Deno",e.NodeJS="NodeJS",e.Flask="Flask",e.React="React",e.Antd="Antd",e.Postgresql="PostgreSQL",e.Docker="Docker",e.Drone="Drone CI",e.Woodpecker="Woodpecker CI",e.Bash="Bash",e.TreeSitter="TreeSitter",e.Nix="Nix",e.Lua="Lua",e.Sqlite="Sqlite",e.Vue="Vue",e.Vuepress="Vuepress",e.Godot="Godot",e.Haskell="Haskell",e))(D||{});const Fm=[{name:"picsg",url:"/pleshevskiy/picsg",description:"A tool for steganographing information in a picture encoded using the Vernam cipher.",roles:[ie.Author],technologies:[D.Haskell],startDate:new Date("2024-04-13"),endDate:new Date("2024-07-25"),status:de.AsIs},{name:"Mindustry tools",url:"/pleshevskiy/mindustry-tools",description:"Tools for the Mindustry game",roles:[ie.Author],technologies:[D.Nix,D.Godot],startDate:new Date("2024-01-07"),status:de.PassivelyMaintained},{name:"Master Progress Rosmintrud tools",url:"https://rosmintrud.masterprogress.ru",description:"Internal service to prepare documents for the rosmintrud (SPA)",roles:[ie.TechLead],technologies:[D.Deno,D.Sqlite,D.TypeScript,D.Vue,D.Docker,D.Woodpecker,D.Nix],startDate:new Date("2023-07-03"),status:de.PassivelyMaintained},{name:"yandexgpt_tg_bot",url:"/pleshevskiy/yandexgpt_tg_bot",description:"The Telegram bot to describe article with link by YandexGPT.",roles:[ie.Author],technologies:[D.JavaScript,D.NodeJS,D.Nix],startDate:new Date("2023-06-27"),endDate:new Date("2024-07-25"),status:de.AsIs},{name:"tree-sitter-plpgsql",url:"/pleshevskiy/tree-sitter-plpgsql",description:"plpgsql grammar for tree-sitter",roles:[ie.Author],technologies:[D.C,D.JavaScript,D.TreeSitter,D.Nix],startDate:new Date("2023-01-05"),status:de.PassivelyMaintained},{name:"wd2",url:"/pleshevskiy/wd2",description:"A wrapper over d2 which allows to use additional configs from d2 file",roles:[ie.Author],technologies:[D.Bash,D.Nix],startDate:new Date("2022-12-12"),endDate:new Date("2023-07-31"),status:de.AsIs},{name:"tree-sitter-d2",url:"/pleshevskiy/tree-sitter-d2",description:"d2 grammar for tree-sitter",roles:[ie.Author],technologies:[D.C,D.JavaScript,D.TreeSitter,D.Nix],startDate:new Date("2022-12-04"),status:de.ActiveDeveloped},{name:"nix2lua",url:"/mynix/nix2lua",description:"This is a small but functional library that converts your nix configurations into lua format.",roles:[ie.Author],technologies:[D.Nix,D.Lua],startDate:new Date("2022-11-22"),status:de.PassivelyMaintained},{name:"vnetod",url:"/pleshevskiy/vnetod",description:"Dotenv section switcher",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2022-07-29"),status:de.PassivelyMaintained},{name:"estring",url:"/pleshevskiy/estring",description:"A simple way to parse a string using type annotations.",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2022-07-23"),endDate:new Date("2024-07-25"),status:de.AsIs},{name:"enve",url:"/pleshevskiy/enve",description:"It helps you work with environment variables and convert it to any type using only type annotations",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2022-07-18"),endDate:new Date("2024-07-25"),status:de.AsIs},{name:"docker stack drone plugin",url:"/pleshevskiy/docker_stack",description:"Deploy to production using `docker stack deploy`",roles:[ie.Author],technologies:[D.Docker,D.Drone,D.Woodpecker],startDate:new Date("2022-06-06"),endDate:new Date("2024-07-25"),status:de.AsIs},{name:"dexios",url:"/github/dexios",description:"Dexios is a fast, secure, and open source command-line encryption tool.",roles:[ie.Collaborator],technologies:[D.Rust],startDate:new Date("2022-06-01"),endDate:new Date("2023-02-28")},{name:"recipes",url:"/pleshevskiy/recipes",description:"Site with recipes which cares about privacy",roles:[ie.Author],technologies:[D.TypeScript,D.Deno,D.Rust],startDate:new Date("2022-05-04"),status:de.PassivelyMaintained},{name:"pleshevski.ru",url:"/pleshevskiy/pleshevski.ru",description:"Source code of my personal site",roles:[ie.Author],technologies:[D.TypeScript,D.Vue,D.Vuepress,D.Nix],startDate:new Date("2022-03-16"),status:de.PassivelyMaintained},{name:"paren",url:"/pleshevskiy/paren",description:"Library for parsing and rendering information.",roles:[ie.Author],technologies:[D.TypeScript,D.Deno],startDate:new Date("2022-03-14"),endDate:new Date("2024-07-25"),status:de.Experimental},{name:"hwt",url:"/pleshevskiy/hwt",description:"healthy workaholic timer – A tool that keeps you from breaking your health by working all day.",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2022-02-04"),endDate:new Date("2024-07-25"),status:de.AsIs},{name:"ood_persistence",url:"/pleshevskiy/ood_persistence",description:"Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture ",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2021-10-12"),endDate:new Date("2021-10-21"),status:de.Deprecated},{name:"migra",url:"/pleshevskiy/migra",description:"Simple SQL migration manager for your project.",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2021-01-31"),endDate:new Date("2022-03-17"),status:de.AsIs},{name:"espruino-starter",url:"/pleshevskiy/espruino-starter",description:"Quickly start creating your new project on the espruino board or a board based on it.",roles:[ie.Author],technologies:[D.JavaScript],startDate:new Date("2021-08-23"),status:de.AsIs},{name:"react-rest-request",url:"/pleshevskiy/react-rest-request",description:"Minimalistic REST API client for React inspired by Apollo.",roles:[ie.Author],technologies:[D.TypeScript,D.React],startDate:new Date("2020-10-04"),endDate:new Date("2023-03-02"),status:de.Deprecated},{name:"sonic-channel",url:"/pleshevskiy/sonic-channel",description:"Rust client for sonic search backend.",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2020-07-18"),status:de.PassivelyMaintained},{name:"itconfig",url:"/pleshevskiy/itconfig",description:"Easy build a configs from environment variables and use it in globally.",roles:[ie.Author],technologies:[D.Rust],startDate:new Date("2019-12-22"),endDate:new Date("2022-07-24"),status:de.Deprecated},{name:"it-fsm",url:"/pleshevskiy/it-fsm",description:"Simple full-featured finite state machine for your project",roles:[ie.Author],technologies:[D.TypeScript,D.NodeJS,D.Deno],startDate:new Date("2019-10-11"),status:de.PassivelyMaintained},{name:"Cabinet Master Progress",url:"https://cabinet.masterprogress.ru",description:"Student's cabinet of the educational center Master Progress (SSR + SPA)",roles:[ie.TechLead],technologies:[D.Python,D.Flask,D.Postgresql,D.TypeScript,D.React,D.Docker,D.Woodpecker,D.Nix],startDate:new Date("2019-09-22"),status:de.PassivelyMaintained},{name:"genrss",url:"/pleshevskiy/genrss",description:"RSS generator for python",roles:[ie.Author],technologies:[D.Python],startDate:new Date("2019-07-23"),status:de.AsIs},{name:"marshmallow_pageinfo",url:"/pleshevskiy/marshmallow_pageinfo",description:"Page info marshmallow schema for api",roles:[ie.Author],technologies:[D.Python],startDate:new Date("2019-10-05"),endDate:new Date("2023-03-02"),status:de.AsIs},{name:"Binary Management",url:"https://www.binarymanagement.com",description:"Project management tool for interior designers",roles:[ie.Developer,ie.TechLead,ie.TeamLead],technologies:[D.TypeScript,D.NodeJS,D.React,D.Antd,D.Docker,D.Drone,D.Rust,D.Nix],startDate:new Date("2018-09-15"),status:de.ActiveDeveloped},{name:"Core Spirit",url:"https://corespirit.com",description:"Social platform focusing on human and planetary enhancement",roles:[ie.Developer],technologies:[D.TypeScript,D.NodeJS,D.Go,D.Python,D.React,D.Docker,D.Drone],startDate:new Date("2018-09-05"),endDate:new Date("2019-12-31")},{name:"Master Progress",url:"https://masterprogress.ru",description:"Main website of the educational center Master Progress (SSR + Forms)",roles:[ie.TechLead],technologies:[D.Python,D.Flask,D.JavaScript,D.Nix],startDate:new Date("2018-04-10"),status:de.PassivelyMaintained},{name:"ictmpl",url:"/pleshevskiy/ictmpl",description:"Generate projects from templates",roles:[ie.Author],technologies:[D.Python],startDate:new Date("2018-06-30"),endDate:new Date("2023-03-02"),status:de.AsIs},{name:"jjcrypto",url:"/pleshevskiy/jjcrypto",description:"Javascript encoder and decoder",roles:[ie.Author],technologies:[D.Php],startDate:new Date("2015-11-01"),endDate:new Date("2015-11-01"),status:de.AsIs}];function Bm(e){return e.toLocaleDateString(void 0,{year:"numeric",month:"2-digit",day:"2-digit"})}const Wm=e=>e.url.startsWith("https://")?e.url:new URL(e.url,"https://git.pleshevski.ru").toString(),Um=Object.freeze(Object.defineProperty({__proto__:null,getExternalLink:Wm},Symbol.toStringTag,{value:"Module"}));function Tn(e){return(e==null?void 0:e.valueOf())??1/0}const Km={name:"WorksPage",computed:{tableTheme(){return this.$themeLocale.worksTable??{}}}},Gm=he({...Km,setup(e,{expose:t}){t();const n=A(()=>Fm.concat().sort((o,s)=>Tn(s.endDate)-Tn(o.endDate)||Tn(s.startDate)-Tn(o.startDate))),r={date2num:Tn,works:n,get renderDate(){return Bm},get w(){return Um}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),qm=["href"],zm=["innerHTML"],Jm={key:0};function Qm(e,t,n,r,o,s){return $(),Y("table",null,[W("thead",null,[W("tr",null,[W("th",null,le(s.tableTheme.name),1),W("th",null,le(s.tableTheme.description),1),W("th",null,le(s.tableTheme.role),1),W("th",null,le(s.tableTheme.technologies),1),W("th",null,le(s.tableTheme.status),1),W("th",null,le(s.tableTheme.dates),1)])]),W("tbody",null,[($(!0),Y(be,null,bt(r.works,i=>($(),Y("tr",null,[W("td",null,[W("a",{rel:"nofollow noopener",href:r.w.getExternalLink(i)},le(i.name),9,qm)]),W("td",null,le(i.description),1),W("td",{innerHTML:i.roles.join(", ")},null,8,zm),W("td",null,le(i.technologies.join(", ")),1),W("td",null,le(i.status),1),W("td",null,[W("div",null,[W("small",{class:Fe({grey:i.endDate})},le(r.renderDate(i.startDate)),3)]),i.endDate?($(),Y("div",Jm,[W("small",null,le(r.renderDate(i.endDate)),1)])):Ae("",!0)])]))),256))])])}const Ym=we(Gm,[["render",Qm],["__file","ChronologicalWorksTable.vue"]]),Xm={__name:"WorksPage",setup(e,{expose:t}){t();const n={ParentLayout:va,get ChronologicalWorksTable(){return Ym}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},Zm={class:"works-table-wrapper"};function ev(e,t,n,r,o,s){return $(),xe(r.ParentLayout,null,{"page-bottom":Ee(()=>[W("div",Zm,[te(r.ChronologicalWorksTable)])]),_:1})}const tv=we(Xm,[["render",ev],["__scopeId","data-v-765855fb"],["__file","WorksPage.vue"]]),nv=Ft({layouts:{WorksPage:tv}}),rv=Object.freeze(Object.defineProperty({__proto__:null,default:nv},Symbol.toStringTag,{value:"Module"})),br=[uh,yh,Lh,Rh,Dh,Hh,Mm,jm,rv].map(e=>e.default).filter(Boolean),ov=JSON.parse('{"base":"/","lang":"ru-RU","title":"Дмитрий Плешевский","description":" ","head":[],"locales":{"/":{"lang":"ru-RU","title":"Дмитрий Плешевский"},"/eng/":{"lang":"en-US","title":"Dmitriy Pleshevskiy"}}}');var Dn=yn(ov),sv=Qf,iv=()=>{const e=Sd({history:sv(Ml("/")),routes:[{name:"vuepress-route",path:"/:catchAll(.*)",components:{}}],scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{if(t.path!==n.path||n===mt){const r=qn(t.fullPath);if(r.path!==t.fullPath)return r.path;const o=await r.loader();t.meta={...r.meta,_pageChunk:o}}else t.path===n.path&&(t.meta=n.meta)}),e},lv=e=>{e.component("ClientOnly",ns),e.component("Content",rs),e.component("RouteLink",zr)},av=(e,t,n)=>{const r=A(()=>t.currentRoute.value.path),o=sc((k,R)=>({get(){return k(),t.currentRoute.value.meta._pageChunk},set(b){t.currentRoute.value.meta._pageChunk=b,R()}})),s=A(()=>Kt.resolveLayouts(n)),i=A(()=>Kt.resolveRouteLocale(Dn.value.locales,r.value)),l=A(()=>Kt.resolveSiteLocaleData(Dn.value,i.value)),a=A(()=>o.value.comp),c=A(()=>o.value.data),f=A(()=>c.value.frontmatter),u=A(()=>Kt.resolvePageHeadTitle(c.value,l.value)),p=A(()=>Kt.resolvePageHead(u.value,f.value,l.value)),g=A(()=>Kt.resolvePageLang(c.value,l.value)),_=A(()=>Kt.resolvePageLayout(c.value,s.value)),S={layouts:s,pageData:c,pageComponent:a,pageFrontmatter:f,pageHead:p,pageHeadTitle:u,pageLang:g,pageLayout:_,redirects:Ao,routeLocale:i,routePath:r,routes:pn,siteData:Dn,siteLocaleData:l};return e.provide(es,S),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>f.value},$head:{get:()=>p.value},$headTitle:{get:()=>u.value},$lang:{get:()=>g.value},$page:{get:()=>c.value},$routeLocale:{get:()=>i.value},$site:{get:()=>Dn.value},$siteLocale:{get:()=>l.value},$withBase:{get:()=>os}}),S},cv=()=>{const e=kd(),t=Ld();let n=[];const r=()=>{e.value.forEach(i=>{const l=uv(i);l&&n.push(l)})},o=()=>{const i=[];return e.value.forEach(l=>{const a=fv(l);a&&i.push(a)}),i},s=()=>{document.documentElement.lang=t.value;const i=o();n.forEach((l,a)=>{const c=i.findIndex(f=>l.isEqualNode(f));c===-1?(l.remove(),delete n[a]):i.splice(c,1)}),i.forEach(l=>document.head.appendChild(l)),n=[...n.filter(l=>!!l),...i]};Xt(Ad,s),Ge(()=>{r(),$e(e,s,{immediate:!1})})},uv=([e,t,n=""])=>{const r=Object.entries(t).map(([l,a])=>st(a)?`[${l}=${JSON.stringify(a)}]`:a===!0?`[${l}]`:"").join(""),o=`head > ${e}${r}`;return Array.from(document.querySelectorAll(o)).find(l=>l.innerText===n)||null},fv=([e,t,n])=>{if(!st(e))return null;const r=document.createElement(e);return Yo(t)&&Object.entries(t).forEach(([o,s])=>{st(s)?r.setAttribute(o,s):s===!0&&r.setAttribute(o,"")}),st(n)&&r.appendChild(document.createTextNode(n)),r},dv=tf,hv=async()=>{var n;const e=dv({name:"Vuepress",setup(){var s;cv();for(const i of br)(s=i.setup)==null||s.call(i);const r=br.flatMap(({rootComponents:i=[]})=>i.map(l=>ke(l))),o=xd();return()=>[ke(o.value),r]}}),t=iv();lv(e),av(e,t,br);for(const r of br)await((n=r.enhance)==null?void 0:n.call(r,{app:e,router:t,siteData:Dn}));return e.use(t),{app:e,router:t}};hv().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{we as _,W as a,$t as b,Y as c,hv as createVueApp,te as d,gu as e,$ as o,Go as r,Ee as w}; function __vite__mapDeps(indexes) { if (!__vite__mapDeps.viteFileDeps) { __vite__mapDeps.viteFileDeps = [] diff --git a/dist/assets/index.html-CXTX8AI0.js b/dist/assets/index.html-DLgZGocO.js similarity index 99% rename from dist/assets/index.html-CXTX8AI0.js rename to dist/assets/index.html-DLgZGocO.js index 60805fe..3bad4ea 100644 --- a/dist/assets/index.html-CXTX8AI0.js +++ b/dist/assets/index.html-DLgZGocO.js @@ -1 +1 @@ -import{_ as i,c as a,a as t,b as e,d as o,w as c,e as n,r as d,o as r}from"./app-BkWeNt32.js";const s={},h=n('

Общие сведения

Меня зовут Дмитрий Плешевский.

Я энтузиаст программного обеспечения с открытым исходным кодом, ведущий разработчик програмного обеспечения, архитектор, руководитель команды, а так же ментор.

Умения

Языки программирования:

  • TypeScript (предпочитаю, твёрдый 9-летний опыт)
  • SQL (предпочитаю, твёрдый 8-летний опыт)
  • Rust (предпочитаю, 5-летний опыт)
  • Python (твёрдый 9-летний опыт)
  • Haskell
  • Bash (8-летний опыт)
  • Java
  • C#
  • C++

Хранилища данных:

  • PostgreSQL (предпочитаю, твёрдый 8-летний опыт)
  • MySQL
  • Sqlite
  • MsSQL
  • MongoDB
  • Reddis
  • Minio (предпочитаю, твердый 5-летний опыт)

Я так же имею большой опыт в создании следующих типов приложений:

  • Традиционные (SSR + Forms)
  • API (REST/GraphQL/WebSocket/EventSource)
  • Динамическое (SPA)
  • Гибридное (SSR + SPA)
  • Консольные
  • Кроссплатформенные

Stack

Backend (Rust)

  • axum (предпочитаю, твёрдый 2-летний опыт)
  • async-graphql (предпочитаю, твёрдый 2-летний опыт)
  • shaku (предпочитаю, твёрдый 2-летний опыт)
  • bb8 + postgres-types (предпочитаю, твёрдый 5-летний опыт)
  • diesel (2-летний опыт)

Backend (Node.JS)

  • Apollo (твёрдый 5-летний опыт)
  • Express (твёрдый 9-летний опыт)
  • Nest.JS
  • Knex.js / Objection.js (твёрдый 5-летний опыт)
  • Sequelize

Frontend

  • React (твёрдый 8-летний опыт)
  • VueJS (предпочитаю, твёрдый 4-летний опыт)
  • Cypress (предпочитаю, твёрдый 3-летний опыт)
  • JQuery
  • Antd / Antdv
  • PostCSS (предпочитаю, твёрдый 5-летний опыт)
  • Sass (предпочитаю, твёрдый 8-летний опыт)
  • Less (слабый 4-летний опыт)

DevOps

  • NixOS / NixOps / Nix dev shell (предпочитаю, твёрдый 3-летний опыт)
  • Docker Swarm (твёрдый 6-летний опыт)
  • Kubernetes (слабый 5-летний опыт)
  • Woodpecker CI (твёрдый 4-летний опыт)
  • Drone CI (твёрдый 3-летний опыт)
  • Gitlab CI (твёрдый 7-летний опыт)
  • GitHub Actions (4-летний опыт)

Интересы

Open-source проекты - моя страсть! Разрабатываю, поддерживаю и улучшаю проекты в своё свободное время.

Помимо программирования я люблю готовить и проводить время со своей любимой семьей!

Контакты

Telegram: Dmitriy Pleshevskiy

Matrix: @pleshevskiy:matrix.org

Email: dmitriy[at]pleshevski[dot]ru

Ссылки

',29);function p(u,m){const l=d("RouteLink");return r(),a("div",null,[t("p",null,[e("Всегда актуальная ссылка на "),o(l,{to:"/"},{default:c(()=>[e("резюме")]),_:1}),e(".")]),h])}const b=i(s,[["render",p],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/","title":"Резюме","lang":"ru-RU","frontmatter":{"home":true,"title":"Резюме","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Резюме"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-07-25T12:12:09.000Z"}],["meta",{"property":"article:modified_time","content":"2024-07-25T12:12:09.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Резюме\\"}"]]},"headers":[{"level":2,"title":"Общие сведения","slug":"общие-сведения","link":"#общие-сведения","children":[]},{"level":2,"title":"Умения","slug":"умения","link":"#умения","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Интересы","slug":"интересы","link":"#интересы","children":[]},{"level":2,"title":"Контакты","slug":"контакты","link":"#контакты","children":[]},{"level":2,"title":"Ссылки","slug":"ссылки","link":"#ссылки","children":[]}],"git":{"updatedTime":1721909529000,"contributors":[{"name":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":3}]},"filePathRelative":"index.md"}');export{b as comp,f as data}; +import{_ as i,c as a,a as t,b as e,d as o,w as c,e as n,r as d,o as r}from"./app-Dg9P_Zls.js";const s={},h=n('

Общие сведения

Меня зовут Дмитрий Плешевский.

Я энтузиаст программного обеспечения с открытым исходным кодом, ведущий разработчик програмного обеспечения, архитектор, руководитель команды, а так же ментор.

Умения

Языки программирования:

  • TypeScript (предпочитаю, твёрдый 9-летний опыт)
  • SQL (предпочитаю, твёрдый 8-летний опыт)
  • Rust (предпочитаю, 5-летний опыт)
  • Python (твёрдый 9-летний опыт)
  • Haskell
  • Bash (8-летний опыт)
  • Java
  • C#
  • C++

Хранилища данных:

  • PostgreSQL (предпочитаю, твёрдый 8-летний опыт)
  • MySQL
  • Sqlite
  • MsSQL
  • MongoDB
  • Reddis
  • Minio (предпочитаю, твердый 5-летний опыт)

Я так же имею большой опыт в создании следующих типов приложений:

  • Традиционные (SSR + Forms)
  • API (REST/GraphQL/WebSocket/EventSource)
  • Динамическое (SPA)
  • Гибридное (SSR + SPA)
  • Консольные
  • Кроссплатформенные

Stack

Backend (Rust)

  • axum (предпочитаю, твёрдый 2-летний опыт)
  • async-graphql (предпочитаю, твёрдый 2-летний опыт)
  • shaku (предпочитаю, твёрдый 2-летний опыт)
  • bb8 + postgres-types (предпочитаю, твёрдый 5-летний опыт)
  • diesel (2-летний опыт)

Backend (Node.JS)

  • Apollo (твёрдый 5-летний опыт)
  • Express (твёрдый 9-летний опыт)
  • Nest.JS
  • Knex.js / Objection.js (твёрдый 5-летний опыт)
  • Sequelize

Frontend

  • React (твёрдый 8-летний опыт)
  • VueJS (предпочитаю, твёрдый 4-летний опыт)
  • Cypress (предпочитаю, твёрдый 3-летний опыт)
  • JQuery
  • Antd / Antdv
  • PostCSS (предпочитаю, твёрдый 5-летний опыт)
  • Sass (предпочитаю, твёрдый 8-летний опыт)
  • Less (слабый 4-летний опыт)

DevOps

  • NixOS / NixOps / Nix dev shell (предпочитаю, твёрдый 3-летний опыт)
  • Docker Swarm (твёрдый 6-летний опыт)
  • Kubernetes (слабый 5-летний опыт)
  • Woodpecker CI (твёрдый 4-летний опыт)
  • Drone CI (твёрдый 3-летний опыт)
  • Gitlab CI (твёрдый 7-летний опыт)
  • GitHub Actions (4-летний опыт)

Интересы

Open-source проекты - моя страсть! Разрабатываю, поддерживаю и улучшаю проекты в своё свободное время.

Помимо программирования я люблю готовить и проводить время со своей любимой семьей!

Контакты

Telegram: Dmitriy Pleshevskiy

Matrix: @pleshevskiy:matrix.org

Email: dmitriy[at]pleshevski[dot]ru

Ссылки

',29);function p(u,m){const l=d("RouteLink");return r(),a("div",null,[t("p",null,[e("Всегда актуальная ссылка на "),o(l,{to:"/"},{default:c(()=>[e("резюме")]),_:1}),e(".")]),h])}const b=i(s,[["render",p],["__file","index.html.vue"]]),f=JSON.parse('{"path":"/","title":"Резюме","lang":"ru-RU","frontmatter":{"home":true,"title":"Резюме","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Резюме"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-07-25T12:12:09.000Z"}],["meta",{"property":"article:modified_time","content":"2024-07-25T12:12:09.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Резюме\\"}"]]},"headers":[{"level":2,"title":"Общие сведения","slug":"общие-сведения","link":"#общие-сведения","children":[]},{"level":2,"title":"Умения","slug":"умения","link":"#умения","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Интересы","slug":"интересы","link":"#интересы","children":[]},{"level":2,"title":"Контакты","slug":"контакты","link":"#контакты","children":[]},{"level":2,"title":"Ссылки","slug":"ссылки","link":"#ссылки","children":[]}],"git":{"updatedTime":1721909529000,"contributors":[{"name":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":3}]},"filePathRelative":"index.md"}');export{b as comp,f as data}; diff --git a/dist/assets/index.html-Bt5-NjbQ.js b/dist/assets/index.html-zZCC-31N.js similarity index 98% rename from dist/assets/index.html-Bt5-NjbQ.js rename to dist/assets/index.html-zZCC-31N.js index 2567458..416827b 100644 --- a/dist/assets/index.html-Bt5-NjbQ.js +++ b/dist/assets/index.html-zZCC-31N.js @@ -1 +1 @@ -import{_ as l,c as a,a as r,b as e,d as o,w as s,e as t,r as n,o as d}from"./app-BkWeNt32.js";const c={},p=t('

Overview

My name is Dmitriy Pleshevskiy.

I'm an open source software enthusiast, a lead software developer, architect, team leader and also mentor.

Skills

Programming Languages:

  • TypeScript (prefer, solid 9-year exp)
  • SQL (prefer, solid 8-year exp)
  • Rust (prefer, solid 5-year exp)
  • Python (solid 9-year exp)
  • Haskell
  • Bash (8-year exp)
  • Java
  • C#
  • C++

Repositories:

  • PostgreSQL (prefer, solid 8-year exp)
  • MySQL
  • Sqlite
  • MsSQL
  • MongoDB
  • Reddis
  • Minio (prefer, solid 5-year exp)

I also have extensive experience in creating the following applications:

  • Traditional (SSR + Forms)
  • API (REST/GraphQL/WebSocket/EventSource)
  • Dynamic (SPA)
  • Hybrid (SSR + SPA)
  • Console
  • Cross-platform

Stack

Backend (Rust)

  • axum (prefer, solid 2-year exp)
  • async-graphql (prefer, solid 2-year exp)
  • shaku (prefer, solid 2-year exp)
  • bb8 + postgres-types (prefer, solid 5-year exp)
  • diesel (2-year exp)

Backend (Node.JS)

  • Apollo (solid 5-year exp)
  • Express (solid 9-year exp)
  • Nest.JS
  • Knex.js / Objection.js (solid 5-year exp)
  • Sequelize

Frontend

  • React (solid 8-year exp)
  • VueJS (prefer, solid 3-year exp)
  • Cypress (prefer, solid 3-year exp)
  • JQuery
  • Antd / Antdv
  • PostCSS (prefer, solid 5-year exp)
  • Sass (prefer, solid 8-year exp)
  • Less (weak 4-year exp)

DevOps

  • NixOS / NixOps / Nix dev shell (prefer, solid 3-year exp)
  • Docker Swarm (solid 6-year exp)
  • Kubernetes (weak 5-year exp)
  • Woodpecker CI (prefer, solid 4-year exp)
  • Drone CI (solid 3-year exp)
  • Gitlab CI (solid 7-year exp)
  • GitHub Actions (4-year exp)

Interests

Open-source projects are my passion! I develop, maintain and improve projects in my spare time.

Besides programming, I love to cook and spend time with my beloved family!

Contacts

Telegram: Dmitriy Pleshevskiy

Matrix: @pleshevskiy:matrix.org

Email: dmitriy[at]pleshevski[dot]ru

',29);function h(m,u){const i=n("RouteLink");return d(),a("div",null,[r("p",null,[e("Always up-to-date link to "),o(i,{to:"/eng/"},{default:s(()=>[e("resume")]),_:1}),e(".")]),p])}const x=l(c,[["render",h],["__file","index.html.vue"]]),k=JSON.parse('{"path":"/eng/","title":"Resume","lang":"en-US","frontmatter":{"home":true,"title":"Resume","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Resume"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2024-07-25T12:12:09.000Z"}],["meta",{"property":"article:modified_time","content":"2024-07-25T12:12:09.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Resume\\"}"]]},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Skills","slug":"skills","link":"#skills","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Interests","slug":"interests","link":"#interests","children":[]},{"level":2,"title":"Contacts","slug":"contacts","link":"#contacts","children":[]},{"level":2,"title":"Links","slug":"links","link":"#links","children":[]}],"git":{"updatedTime":1721909529000,"contributors":[{"name":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":3}]},"filePathRelative":"eng/index.md"}');export{x as comp,k as data}; +import{_ as l,c as a,a as r,b as e,d as o,w as s,e as t,r as n,o as d}from"./app-Dg9P_Zls.js";const c={},p=t('

Overview

My name is Dmitriy Pleshevskiy.

I'm an open source software enthusiast, a lead software developer, architect, team leader and also mentor.

Skills

Programming Languages:

  • TypeScript (prefer, solid 9-year exp)
  • SQL (prefer, solid 8-year exp)
  • Rust (prefer, solid 5-year exp)
  • Python (solid 9-year exp)
  • Haskell
  • Bash (8-year exp)
  • Java
  • C#
  • C++

Repositories:

  • PostgreSQL (prefer, solid 8-year exp)
  • MySQL
  • Sqlite
  • MsSQL
  • MongoDB
  • Reddis
  • Minio (prefer, solid 5-year exp)

I also have extensive experience in creating the following applications:

  • Traditional (SSR + Forms)
  • API (REST/GraphQL/WebSocket/EventSource)
  • Dynamic (SPA)
  • Hybrid (SSR + SPA)
  • Console
  • Cross-platform

Stack

Backend (Rust)

  • axum (prefer, solid 2-year exp)
  • async-graphql (prefer, solid 2-year exp)
  • shaku (prefer, solid 2-year exp)
  • bb8 + postgres-types (prefer, solid 5-year exp)
  • diesel (2-year exp)

Backend (Node.JS)

  • Apollo (solid 5-year exp)
  • Express (solid 9-year exp)
  • Nest.JS
  • Knex.js / Objection.js (solid 5-year exp)
  • Sequelize

Frontend

  • React (solid 8-year exp)
  • VueJS (prefer, solid 3-year exp)
  • Cypress (prefer, solid 3-year exp)
  • JQuery
  • Antd / Antdv
  • PostCSS (prefer, solid 5-year exp)
  • Sass (prefer, solid 8-year exp)
  • Less (weak 4-year exp)

DevOps

  • NixOS / NixOps / Nix dev shell (prefer, solid 3-year exp)
  • Docker Swarm (solid 6-year exp)
  • Kubernetes (weak 5-year exp)
  • Woodpecker CI (prefer, solid 4-year exp)
  • Drone CI (solid 3-year exp)
  • Gitlab CI (solid 7-year exp)
  • GitHub Actions (4-year exp)

Interests

Open-source projects are my passion! I develop, maintain and improve projects in my spare time.

Besides programming, I love to cook and spend time with my beloved family!

Contacts

Telegram: Dmitriy Pleshevskiy

Matrix: @pleshevskiy:matrix.org

Email: dmitriy[at]pleshevski[dot]ru

',29);function h(m,u){const i=n("RouteLink");return d(),a("div",null,[r("p",null,[e("Always up-to-date link to "),o(i,{to:"/eng/"},{default:s(()=>[e("resume")]),_:1}),e(".")]),p])}const x=l(c,[["render",h],["__file","index.html.vue"]]),k=JSON.parse('{"path":"/eng/","title":"Resume","lang":"en-US","frontmatter":{"home":true,"title":"Resume","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Resume"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2024-07-25T12:12:09.000Z"}],["meta",{"property":"article:modified_time","content":"2024-07-25T12:12:09.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Resume\\"}"]]},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Skills","slug":"skills","link":"#skills","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Interests","slug":"interests","link":"#interests","children":[]},{"level":2,"title":"Contacts","slug":"contacts","link":"#contacts","children":[]},{"level":2,"title":"Links","slug":"links","link":"#links","children":[]}],"git":{"updatedTime":1721909529000,"contributors":[{"name":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":3}]},"filePathRelative":"eng/index.md"}');export{x as comp,k as data}; diff --git a/dist/assets/works.html-kia6uxqT.js b/dist/assets/works.html-BrLYBvQK.js similarity index 98% rename from dist/assets/works.html-kia6uxqT.js rename to dist/assets/works.html-BrLYBvQK.js index fa59b31..2fb2c51 100644 --- a/dist/assets/works.html-kia6uxqT.js +++ b/dist/assets/works.html-BrLYBvQK.js @@ -1 +1 @@ -import{_ as e,c as t,o as r,e as o}from"./app-BkWeNt32.js";const a={},i=o('

Highlighted working experience

Binary Management

  • Dates: August 2018 – currently
  • Roles: Lead Fullstack Developer, Team Lead, Architect

Development of a project management tool for interior designers

  • Development of the GraphQL API (Node.JS, Apollo, PostgreSQL, Redis, BullMQ). Moved database triggers to business logic. Wrote integration tests on 70% api.
  • Development of the frontend (React, Antd). Formed uikit, shared components, redesigned the page generation gathering. Completely changed work with API on the frontend. Introduced the practice of writing integration tests using cypress
  • Completely ported the project to TypeScript. I have formed isolated modules of the system.
  • As a team leader, I brought the critical chain method, the buffer method, and the planning method to the project from the end. Helped the team get into a rhythm to make releases each week in small batches. A couple of times I also prepared an individual development plan for team members.

Master Progress

  • Dates: May 2018 - currently (Passively maintained)
  • Role: Tech Lead

Development web infrastructure of the educational center Master Progress

Core Spirit

  • Dates: August 2018 - May 2020
  • Role: Lead Fullstack Developer

Development of Social platform focusing on human and planetary enhancement.

  • REST API (Node.JS, Express, PostgreSQL) for main site and backoffice.
  • Auto poster to various social networks and messengers (Facebook, LinkedIn, Twitter, Telegram).
  • Neural network for automatic categorization of articles.

MERLION

  • Dates: March 2016 – May 2018
  • Role: Senior Fullstack developer

In this company there were 6 considerable projects I have successfully completed:

  • optimize the creation of promotional pages (PHP, JavaScript)
  • support main traditional site https://citilink.ru (PHP, JavaScript)
  • development of parsing to monitor products for changes in price, quantity/availability in stock, rating and other fields based on data from 55 websites (Node.JS, Express)
  • work with neural networks for matching of goods
  • development face recognition apps for Android (Java)

Chronology

Public projects only.

',19),n=[i];function l(s,p){return r(),t("div",null,n)}const h=e(a,[["render",l],["__file","works.html.vue"]]),d=JSON.parse('{"path":"/eng/works.html","title":"Works","lang":"en-US","frontmatter":{"title":"Works","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Works"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2024-07-25T12:12:09.000Z"}],["meta",{"property":"article:modified_time","content":"2024-07-25T12:12:09.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Works\\"}"]]},"headers":[{"level":2,"title":"Highlighted working experience","slug":"highlighted-working-experience","link":"#highlighted-working-experience","children":[]},{"level":2,"title":"Chronology","slug":"chronology","link":"#chronology","children":[]}],"git":{"updatedTime":1721909529000,"contributors":[{"name":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":2}]},"filePathRelative":"eng/works.md"}');export{h as comp,d as data}; +import{_ as e,c as t,o as r,e as o}from"./app-Dg9P_Zls.js";const a={},i=o('

Highlighted working experience

Binary Management

  • Dates: August 2018 – currently
  • Roles: Lead Fullstack Developer, Team Lead, Architect

Development of a project management tool for interior designers

  • Development of the GraphQL API (Node.JS, Apollo, PostgreSQL, Redis, BullMQ). Moved database triggers to business logic. Wrote integration tests on 70% api.
  • Development of the frontend (React, Antd). Formed uikit, shared components, redesigned the page generation gathering. Completely changed work with API on the frontend. Introduced the practice of writing integration tests using cypress
  • Completely ported the project to TypeScript. I have formed isolated modules of the system.
  • As a team leader, I brought the critical chain method, the buffer method, and the planning method to the project from the end. Helped the team get into a rhythm to make releases each week in small batches. A couple of times I also prepared an individual development plan for team members.

Master Progress

  • Dates: May 2018 - currently (Passively maintained)
  • Role: Tech Lead

Development web infrastructure of the educational center Master Progress

Core Spirit

  • Dates: August 2018 - May 2020
  • Role: Lead Fullstack Developer

Development of Social platform focusing on human and planetary enhancement.

  • REST API (Node.JS, Express, PostgreSQL) for main site and backoffice.
  • Auto poster to various social networks and messengers (Facebook, LinkedIn, Twitter, Telegram).
  • Neural network for automatic categorization of articles.

MERLION

  • Dates: March 2016 – May 2018
  • Role: Senior Fullstack developer

In this company there were 6 considerable projects I have successfully completed:

  • optimize the creation of promotional pages (PHP, JavaScript)
  • support main traditional site https://citilink.ru (PHP, JavaScript)
  • development of parsing to monitor products for changes in price, quantity/availability in stock, rating and other fields based on data from 55 websites (Node.JS, Express)
  • work with neural networks for matching of goods
  • development face recognition apps for Android (Java)

Chronology

Public projects only.

',19),n=[i];function l(s,p){return r(),t("div",null,n)}const h=e(a,[["render",l],["__file","works.html.vue"]]),d=JSON.parse('{"path":"/eng/works.html","title":"Works","lang":"en-US","frontmatter":{"title":"Works","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Works"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2024-07-25T12:12:09.000Z"}],["meta",{"property":"article:modified_time","content":"2024-07-25T12:12:09.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Works\\"}"]]},"headers":[{"level":2,"title":"Highlighted working experience","slug":"highlighted-working-experience","link":"#highlighted-working-experience","children":[]},{"level":2,"title":"Chronology","slug":"chronology","link":"#chronology","children":[]}],"git":{"updatedTime":1721909529000,"contributors":[{"name":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":2}]},"filePathRelative":"eng/works.md"}');export{h as comp,d as data}; diff --git a/dist/assets/works.html-aZ7q92-5.js b/dist/assets/works.html-D3oTJVPS.js similarity index 99% rename from dist/assets/works.html-aZ7q92-5.js rename to dist/assets/works.html-D3oTJVPS.js index 184bd6d..5c814b2 100644 --- a/dist/assets/works.html-aZ7q92-5.js +++ b/dist/assets/works.html-D3oTJVPS.js @@ -1 +1 @@ -import{_ as e,c as r,o as t,e as a}from"./app-BkWeNt32.js";const l={},i=a('

Выделенный опыт работы

Binary Management

  • Даты: Август 2018 – по настоящее время
  • Роли: Lead Fullstack Developer, Team Lead, Architect

Разработка инструмента управления проектами для дизайнеров интерьера

  • Разработка GraphQL API (Node.JS, Apollo, PostgreSQL, Redis, BullMQ). Перенес триггеры базы данных в бизнес-логику. Написал интеграционные тесты на 70% api.
  • Разработка фронтенда (React, Antd). Сформировал uikit и общие компоненты, оптимизировал сложные и нагруженные компоненты. Полностью изменил работу с API на фронтенде. Внедрил практику написания интеграционных тестов с помощью cypress.
  • Полностью перенес проект на TypeScript. Сформировал изолированные модули системы.
  • Как руководитель команды, я привнес в проект метод критической цепи, метод буфера и метод планирования с конца. Помог команде войти в ритм, чтобы выпускать релизы каждую неделю небольшими партиями. Я также несколько раз составлял индивидуальный план развития для членов команды.

Master Progress

  • Даты: Май 2018 - по настоящее время (Пассивная поддержка)
  • Роль: Tech Lead

Разработка веб-инфраструктуры образовательного центра Мастер Прогресс

Core Spirit

  • Даты: Август 2018 - May 2020
  • Роль: Lead Fullstack Developer

Разработка социальной платформы, сфокусированной на улучшении человека и планеты.

  • REST API (Node.JS, Express, PostgreSQL) для основного сайта и бэк-офиса.
  • Автопостер в различные социальные сети и мессенджеры (Facebook, LinkedIn, Twitter, Telegram).
  • Создал нейронную сеть для автоматической категоризации статей.

MERLION

  • Dates: March 2016 – May 2018
  • Role: Senior Fullstack developer

В этой компании было 6 значительных проектов, которые я успешно завершил:

  • Оптимизация создания рекламных страниц (PHP, JavaScript)
  • Поддержка основного традиционного сайта https://citilink.ru (PHP, JavaScript)
  • Разработка парсинга для мониторинга товаров на предмет изменения цены, количества/наличия на складе, рейтинга и других полей на основе данных с 55+ сайтов (Node.js, Express)
  • Работа с нейронными сетями для подбора товаров
  • Разработка приложений для распознавания лиц для Android (Java)

Хронология

В списке перечислены только публичные проекты.

',19),s=[i];function n(o,p){return t(),r("div",null,s)}const h=e(l,[["render",n],["__file","works.html.vue"]]),d=JSON.parse('{"path":"/works.html","title":"Работы","lang":"ru-RU","frontmatter":{"title":"Работы","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Работы"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-07-25T13:59:34.000Z"}],["meta",{"property":"article:modified_time","content":"2024-07-25T13:59:34.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Работы\\"}"]]},"headers":[{"level":2,"title":"Выделенный опыт работы","slug":"выделенныи-опыт-работы","link":"#выделенныи-опыт-работы","children":[]},{"level":2,"title":"Хронология","slug":"хронология","link":"#хронология","children":[]}],"git":{"updatedTime":1721915974000,"contributors":[{"name":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":3}]},"filePathRelative":"works.md"}');export{h as comp,d as data}; +import{_ as e,c as r,o as t,e as a}from"./app-Dg9P_Zls.js";const l={},i=a('

Выделенный опыт работы

Binary Management

  • Даты: Август 2018 – по настоящее время
  • Роли: Lead Fullstack Developer, Team Lead, Architect

Разработка инструмента управления проектами для дизайнеров интерьера

  • Разработка GraphQL API (Node.JS, Apollo, PostgreSQL, Redis, BullMQ). Перенес триггеры базы данных в бизнес-логику. Написал интеграционные тесты на 70% api.
  • Разработка фронтенда (React, Antd). Сформировал uikit и общие компоненты, оптимизировал сложные и нагруженные компоненты. Полностью изменил работу с API на фронтенде. Внедрил практику написания интеграционных тестов с помощью cypress.
  • Полностью перенес проект на TypeScript. Сформировал изолированные модули системы.
  • Как руководитель команды, я привнес в проект метод критической цепи, метод буфера и метод планирования с конца. Помог команде войти в ритм, чтобы выпускать релизы каждую неделю небольшими партиями. Я также несколько раз составлял индивидуальный план развития для членов команды.

Master Progress

  • Даты: Май 2018 - по настоящее время (Пассивная поддержка)
  • Роль: Tech Lead

Разработка веб-инфраструктуры образовательного центра Мастер Прогресс

Core Spirit

  • Даты: Август 2018 - May 2020
  • Роль: Lead Fullstack Developer

Разработка социальной платформы, сфокусированной на улучшении человека и планеты.

  • REST API (Node.JS, Express, PostgreSQL) для основного сайта и бэк-офиса.
  • Автопостер в различные социальные сети и мессенджеры (Facebook, LinkedIn, Twitter, Telegram).
  • Создал нейронную сеть для автоматической категоризации статей.

MERLION

  • Dates: March 2016 – May 2018
  • Role: Senior Fullstack developer

В этой компании было 6 значительных проектов, которые я успешно завершил:

  • Оптимизация создания рекламных страниц (PHP, JavaScript)
  • Поддержка основного традиционного сайта https://citilink.ru (PHP, JavaScript)
  • Разработка парсинга для мониторинга товаров на предмет изменения цены, количества/наличия на складе, рейтинга и других полей на основе данных с 55+ сайтов (Node.js, Express)
  • Работа с нейронными сетями для подбора товаров
  • Разработка приложений для распознавания лиц для Android (Java)

Хронология

В списке перечислены только публичные проекты.

',19),s=[i];function n(o,p){return t(),r("div",null,s)}const h=e(l,[["render",n],["__file","works.html.vue"]]),d=JSON.parse('{"path":"/works.html","title":"Работы","lang":"ru-RU","frontmatter":{"title":"Работы","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Работы"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-07-25T13:59:34.000Z"}],["meta",{"property":"article:modified_time","content":"2024-07-25T13:59:34.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Работы\\"}"]]},"headers":[{"level":2,"title":"Выделенный опыт работы","slug":"выделенныи-опыт-работы","link":"#выделенныи-опыт-работы","children":[]},{"level":2,"title":"Хронология","slug":"хронология","link":"#хронология","children":[]}],"git":{"updatedTime":1721915974000,"contributors":[{"name":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":3}]},"filePathRelative":"works.md"}');export{h as comp,d as data}; diff --git a/dist/eng/index.html b/dist/eng/index.html index 03137dc..56999dd 100644 --- a/dist/eng/index.html +++ b/dist/eng/index.html @@ -33,11 +33,11 @@ Resume | Dmitriy Pleshevskiy - - + +
- + diff --git a/dist/eng/works.html b/dist/eng/works.html index 830798e..972238c 100644 --- a/dist/eng/works.html +++ b/dist/eng/works.html @@ -33,11 +33,11 @@ Works | Dmitriy Pleshevskiy - - + + -
- +
+ diff --git a/dist/index.html b/dist/index.html index 37ce99a..f2a36da 100644 --- a/dist/index.html +++ b/dist/index.html @@ -33,11 +33,11 @@ Резюме | Дмитрий Плешевский - - + +
- + diff --git a/dist/works.html b/dist/works.html index df29a23..6899476 100644 --- a/dist/works.html +++ b/dist/works.html @@ -33,11 +33,11 @@ Работы | Дмитрий Плешевский - - + + -
- +
+ diff --git a/docs/.vuepress/modules/work/data.ts b/docs/.vuepress/modules/work/data.ts index 4140854..e0c6581 100644 --- a/docs/.vuepress/modules/work/data.ts +++ b/docs/.vuepress/modules/work/data.ts @@ -12,7 +12,7 @@ export const CHRONOLOGICAL_WORKS: Work[] = [ roles: [Role.Author], technologies: [Technology.Haskell], startDate: new Date("2024-04-13"), - startDate: new Date("2024-07-25"), + endDate: new Date("2024-07-25"), status: Status.AsIs, }, {